#include "TError.h"
#include "TPRegexp.h"
#include "TGFrame.h"
#include "TGTextView.h"
#include "TGScrollBar.h"
#include "TGLabel.h"
#include "TProof.h"
#include "TProofProgressDialog.h"
#include "TProofProgressLog.h"
#include "TProofLog.h"
#include "TGNumberEntry.h"
#include "TGListBox.h"
#include "TGMenu.h"
#include "TGButton.h"
const UInt_t kLogElemFilled = BIT(17);
const UInt_t kDefaultActive = BIT(18);
ClassImp(TProofProgressLog)
TProofProgressLog::TProofProgressLog(TProofProgressDialog *d, Int_t w, Int_t h) :
TGTransientFrame(gClient->GetRoot(), gClient->GetRoot(), w, h)
{
fDialog = d;
if (fDialog) fSessionUrl = fDialog->fSessionUrl;
fSessionIdx = 0;
Init(w, h);
}
TProofProgressLog::TProofProgressLog(const char *url, Int_t idx, Int_t w, Int_t h) :
TGTransientFrame(gClient->GetRoot(), gClient->GetRoot(), w, h)
{
fDialog = 0;
fSessionUrl = url;
fSessionIdx = (idx > 0) ? -idx : idx;
Init(w, h);
}
void TProofProgressLog::Init(Int_t w, Int_t h)
{
fProofLog = 0;
fFullText = kFALSE;
fTextType = kStd;
SetCleanup(kDeepCleanup);
TGHorizontalFrame *htotal = new TGHorizontalFrame(this, w, h);
TGVerticalFrame *vtextbox = new TGVerticalFrame(htotal, w, h);
fText = new TGTextView(vtextbox, w, h);
vtextbox->AddFrame(fText, new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 3, 3, 3, 3));
fVworkers = new TGVerticalFrame(htotal);
TGLabel *laburl = new TGLabel(fVworkers, "Enter cluster URL:");
fVworkers->AddFrame(laburl, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 2, 2, 2));
fUrlText = new TGTextEntry(fVworkers);
fUrlText->SetText(fSessionUrl.Data());
fVworkers->AddFrame(fUrlText, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 0, 0, 0));
TGHorizontalFrame *hfurlbox = new TGHorizontalFrame(fVworkers, 20, 20);
TGLabel *labsess = new TGLabel(hfurlbox, "Enter session:");
hfurlbox->AddFrame(labsess, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 2, 2, 2));
fSessNum = new TGNumberEntry(hfurlbox, 0, 5, -1, TGNumberFormat::kNESInteger);
fSessNum->SetLimits(TGNumberFormat::kNELLimitMax, 0., 0.);
fSessNum->SetIntNumber(0);
fSessNum->GetNumberEntry()->SetToolTipText("Use 0 for the last known one,"
" negative numbers for the previous ones, e.g. -1 for the last-but-one");
hfurlbox->AddFrame(fSessNum, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 0, 0, 0));
fUrlButton = new TGTextButton(hfurlbox, "Get logs info");
fUrlButton->Connect("Clicked()", "TProofProgressLog", this, "Rebuild()");
hfurlbox->AddFrame(fUrlButton, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 4, 0, 0, 0));
fVworkers->AddFrame(hfurlbox, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
TGNumberEntry *nent = new TGNumberEntry(hfurlbox);
fVworkers->AddFrame(nent, new TGLayoutHints(kLHintsTop | kLHintsLeft, 4, 0, 0, 0));
fLogList = 0;
BuildLogList(kTRUE);
fLogList->Resize(102,52);
fLogList->SetMultipleSelections(kTRUE);
TGHorizontalFrame *hfselbox = new TGHorizontalFrame(fVworkers, 20, 20);
TGLabel *label1 = new TGLabel(hfselbox,"Choose workers:");
hfselbox->AddFrame(label1, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 0, 0, 0, 0));
TGTextButton *selall = new TGTextButton(hfselbox, " &All ");
selall->Connect("Clicked()", "TProofProgressLog", this, "Select(=0)");
hfselbox->AddFrame(selall, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 10, 0, 0, 0));
TGTextButton *clearall = new TGTextButton(hfselbox, " &Clear ");
clearall->Connect("Clicked()", "TProofProgressLog", this, "Select(=1)");
hfselbox->AddFrame(clearall, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 10, 0, 0, 0));
Select(0, kFALSE);
fLogNew = new TGTextButton(fVworkers, "&Display");
fLogNew->Connect("Clicked()", "TProofProgressLog", this, "DoLog(=kFALSE)");
fLogNew->SetTextColor(0xffffff, kFALSE);
fLogNew->SetBackgroundColor(0x000044);
fVworkers->AddFrame(hfselbox, new TGLayoutHints(kLHintsExpandX | kLHintsTop, 5, 2, 2, 2));
fVworkers->AddFrame(fLogList, new TGLayoutHints(kLHintsExpandX | kLHintsTop | kLHintsExpandY, 2, 2, 5, 2));
fVworkers->AddFrame(fLogNew, new TGLayoutHints(kLHintsExpandX | kLHintsTop , 2, 2, 1, 5));
htotal->AddFrame(fVworkers, new TGLayoutHints(kLHintsCenterY | kLHintsLeft | kLHintsExpandY, 2, 2, 2, 2));
TGHorizontalFrame *hflogbox = new TGHorizontalFrame(vtextbox, 550, 20);
fClose = new TGTextButton(hflogbox, " &Close ");
fClose->Connect("Clicked()", "TProofProgressLog", this, "CloseWindow()");
hflogbox->AddFrame(fClose, new TGLayoutHints(kLHintsCenterY |
kLHintsRight, 10, 2, 2, 2));
fSave = new TGTextButton(hflogbox, "&Save");
fSave->Connect("Clicked()", "TProofProgressLog", this, "SaveToFile()");
hflogbox->AddFrame(fSave, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 4, 0, 0, 0));
fFileName = new TGTextEntry(hflogbox);
fFileName->SetText("<session-tag>.log");
hflogbox->AddFrame(fFileName, new TGLayoutHints(kLHintsCenterY | kLHintsRight | kLHintsExpandX));
TGLabel *label10 = new TGLabel(hflogbox, "Save to a file:");
hflogbox->AddFrame(label10, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 50, 2, 2, 2));
TGVerticalFrame *vlines = new TGVerticalFrame(hflogbox);
TGHorizontalFrame *vlines_buttons = new TGHorizontalFrame(vlines);
TGLabel *label2 = new TGLabel(vlines_buttons, "Lines:");
vlines_buttons->AddFrame(label2, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
fAllLines = new TGCheckButton(vlines_buttons, "all");
fAllLines->SetToolTipText("Retrieve all lines (service messages excluded)");
fAllLines->SetState(kButtonUp);
fAllLines->Connect("Clicked()", "TProofProgressLog", this, "NoLineEntry()");
vlines_buttons->AddFrame(fAllLines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
fRawLines = new TGCheckButton(vlines_buttons, "svcmsg");
fRawLines->SetToolTipText("Retrieve all type of lines, service messages included");
fRawLines->SetState(kButtonUp);
vlines_buttons->AddFrame(fRawLines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
TGLabel *label11 = new TGLabel(vlines_buttons, "From");
vlines_buttons->AddFrame(label11, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
fLinesFrom = new TGNumberEntry(vlines_buttons, 0, 5, -1, TGNumberFormat::kNESInteger);
fLinesFrom->SetIntNumber(-100);
fLinesFrom->GetNumberEntry()->SetToolTipText("Negative values indicate \"tail\" action");
vlines_buttons->AddFrame(fLinesFrom, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
TGLabel *label3 = new TGLabel(vlines_buttons, "to");
vlines_buttons->AddFrame(label3, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
fLinesTo = new TGNumberEntry(vlines_buttons, 0, 5, -1, TGNumberFormat::kNESInteger);
vlines_buttons->AddFrame(fLinesTo, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
vlines->AddFrame(vlines_buttons, new TGLayoutHints(kLHintsCenterY));
hflogbox->AddFrame(vlines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
TGHorizontalFrame *hfgrepbox = new TGHorizontalFrame(vtextbox, 550, 20);
fGrepLabel = new TGLabel(hfgrepbox, "");
hfgrepbox->AddFrame(fGrepLabel, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
fGrepText = new TGTextEntry(hfgrepbox);
{
TGDimension dim = fGrepText->GetDefaultSize();
fGrepText->SetDefaultSize(400, dim.fHeight);
}
hfgrepbox->AddFrame(fGrepText, new TGLayoutHints( kLHintsCenterY | kLHintsLeft | kLHintsExpandX));
fGrepButton = new TGTextButton(hfgrepbox, "Filter");
fGrepButton->Connect("Clicked()", "TProofProgressLog", this, "DoLog(=kTRUE)");
hfgrepbox->AddFrame(fGrepButton, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4, 10, 0, 0));
fGrepCheckInv = new TGCheckButton(hfgrepbox, "invert match");
fGrepCheckInv->Connect("Clicked()", "TProofProgressLog", this, "SetGrepView()");
hfgrepbox->AddFrame(fGrepCheckInv, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
fGrepCheckCmd = new TGCheckButton(hfgrepbox, "is a pipe command");
fGrepCheckCmd->Connect("Clicked()", "TProofProgressLog", this, "SetGrepView()");
hfgrepbox->AddFrame(fGrepCheckCmd, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
vtextbox->AddFrame(hflogbox, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
vtextbox->AddFrame(hfgrepbox, new TGLayoutHints(kLHintsBottom | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
htotal->AddFrame(vtextbox, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY | kLHintsRight, 3, 3, 3, 3));
AddFrame(htotal, new TGLayoutHints(kLHintsExpandX |
kLHintsExpandY, 3, 3, 3, 3));
SetGrepView();
MapSubwindows();
Resize();
CenterOnParent();
Popup();
}
TProofProgressLog::~TProofProgressLog()
{
SafeDelete(fProofLog);
if (fDialog) {
fDialog->fLogWindow = 0;
fDialog->fProof->Disconnect("LogMessage(const char*,Bool_t)", this,
"LogMessage(const char*,Bool_t)");
}
}
void TProofProgressLog::Popup()
{
MapWindow();
}
void TProofProgressLog::Clear(Option_t *)
{
if (fText)
fText->Clear();
}
void TProofProgressLog::LoadBuffer(const char *buffer)
{
if (fText)
fText->LoadBuffer(buffer);
}
void TProofProgressLog::LoadFile(const char *file)
{
if (fText)
fText->LoadFile(file);
}
void TProofProgressLog::AddBuffer(const char *buffer)
{
if (fText) {
TGText txt;
txt.LoadBuffer(buffer);
fText->AddText(&txt);
}
}
void TProofProgressLog::CloseWindow()
{
DeleteWindow();
}
void TProofProgressLog::BuildLogList(Bool_t create)
{
TString title;
title.Form("PROOF - Processing logs for session 'undefined'");
SetWindowName(title.Data());
SetIconName(title.Data());
if (create) {
if (fLogList) delete fLogList;
fLogList = new TGListBox(fVworkers);
} else {
Int_t nent = fLogList->GetNumberOfEntries();
fLogList->RemoveEntries(0,nent);
fLogList->Layout();
}
if (fSessionUrl.IsNull()) {
if (gDebug > 0)
Info("BuildLogList", "sesssion URL undefined - do nothing");
return;
}
TProofMgr *mgr = TProof::Mgr(fSessionUrl.Data());
if (!mgr || !mgr->IsValid()) {
Warning("BuildLogList", "unable open a manager connection to %s",
fSessionUrl.Data());
return;
}
if (!(fProofLog = mgr->GetSessionLogs(fSessionIdx,"NR"))) {
Warning("BuildLogList", "unable to get logs from %s",
fSessionUrl.Data());
return;
}
title.Form("PROOF - Processing logs for session '%s', started on %s at %s",
fProofLog->GetName(), fProofLog->StartTime().AsString(),
fProofLog->GetTitle());
SetWindowName(title.Data());
SetIconName(title.Data());
TList *elem = fProofLog->GetListOfLogs();
TIter next(elem);
TProofLogElem *pe = 0;
Int_t is = 0;
TGLBEntry *ent = 0;
TString buf;
while ((pe=(TProofLogElem*)next())){
TUrl url(pe->GetTitle());
buf.Form("%s %s", pe->GetName(), url.GetHost());
fLogList->AddEntry(buf.Data(), is);
if ((ent = fLogList->FindEntry(buf.Data()))) {
ent->ResetBit(kLogElemFilled);
ent->ResetBit(kDefaultActive);
if (!(pe->IsWorker())) ent->SetBit(kDefaultActive);
}
is++;
}
return;
}
void TProofProgressLog::DoLog(Bool_t grep)
{
Clear();
if (!fGrepText) {
Warning("DoLog", "no text: do nothing!");
return;
}
TString greptext = fGrepText->GetText();
greptext.Remove(TString::kBoth, ' ');
if (greptext.IsNull()) {
grep = kFALSE;
}
else if (!fGrepCheckCmd->IsOn()) {
TPMERegexp san("(^|[^\\\\])([^a-zA-Z0-9_=\\\\/.-])");
while ( san.Substitute(greptext, "$1\\$2") > 0 );
}
Int_t from, to;
if (fAllLines->IsOn()){
from = 0;
to = -1;
} else {
from = fLinesFrom->GetIntNumber();
to = fLinesTo->GetIntNumber();
}
if (!fProofLog) {
TProofMgr *mgr = 0;
if ((mgr = TProof::Mgr(fSessionUrl.Data()))) {
if (!(fProofLog = mgr->GetSessionLogs(fSessionIdx, "NR"))) {
Warning("DoLog", "unable to instantiate TProofLog for %s",
fSessionUrl.Data());
}
} else {
Warning("DoLog", "unable to instantiate a TProofMgr for %s",
fSessionUrl.Data());
}
}
TString pipeCommand;
if (!fRawLines->IsOn()) {
pipeCommand = "grep -v \"| SvcMsg\"";
}
Bool_t retrieve = kFALSE;
if (!grep) {
if (!fFullText ||
((fTextType != kRaw && fRawLines->IsOn()) ||
(fTextType != kStd && !fRawLines->IsOn())) ||
(fDialog && fDialog->fStatus==TProofProgressDialog::kRunning)) {
retrieve = kTRUE;
if (fRawLines->IsOn()) {
fTextType = kRaw;
} else {
fTextType = kStd;
}
if (fDialog && fDialog->fStatus != TProofProgressDialog::kRunning)
fFullText = kTRUE;
}
} else {
retrieve = kTRUE;
fTextType = kGrep;
if (!pipeCommand.IsNull())
pipeCommand.Append('|');
if (fGrepCheckCmd->IsOn()) {
pipeCommand.Append(greptext);
}
else {
pipeCommand.Append("grep ");
if (fGrepCheckInv->IsOn())
pipeCommand.Append("-v ");
pipeCommand.Append("-- ");
pipeCommand.Append(greptext);
}
if (fDialog && fDialog->fStatus != TProofProgressDialog::kRunning)
fFullText = kTRUE;
}
if (fProofLog) {
TList *selected = new TList;
fLogList->GetSelectedEntries(selected);
TIter next(selected);
TGTextLBEntry *selentry;
Bool_t logonly = fProofLog->LogToBox();
fProofLog->SetLogToBox(kTRUE);
fProofLog->Connect("Prt(const char*)", "TProofProgressLog",
this, "LogMessage(const char*, Bool_t)");
while ((selentry=(TGTextLBEntry*)next())){
TString ord = selentry->GetText()->GetString();
Int_t is = ord.Index(" ");
if (is != kNPOS) ord.Remove(is);
if (retrieve || !selentry->TestBit(kLogElemFilled)) {
pipeCommand.Prepend('|');
if (fTextType == kRaw) {
if (gDebug >= 2)
Info("DoLog", "Retrieving unfiltered log for %s", ord.Data());
fProofLog->Retrieve(ord.Data(), TProofLog::kTrailing, 0, 0);
}
else {
if (gDebug >= 2)
Info("DoLog", "Retrieving log for %s filtered with %s",
ord.Data(), pipeCommand.Data());
fProofLog->Retrieve(ord.Data(), TProofLog::kGrep, 0, pipeCommand.Data());
}
selentry->SetBit(kLogElemFilled);
}
fProofLog->Display(ord.Data(), from, to);
}
fProofLog->SetLogToBox(logonly);
fProofLog->Disconnect("Prt(const char*)", this, "LogMessage(const char*, Bool_t)");
delete selected;
}
}
void TProofProgressLog::LogMessage(const char *msg, Bool_t all)
{
if (all) {
LoadBuffer(msg);
} else {
AddBuffer(msg);
}
}
void TProofProgressLog::SaveToFile()
{
if (!fProofLog) DoLog();
TString filename = fFileName->GetText();
if (filename.IsNull() || filename == "<session-tag>.log") {
filename = (fDialog && fDialog->fProof) ?
TString::Format("%s.log", fDialog->fProof->GetName()) :
TString("proof.log");
}
TList *selected = new TList;
fLogList->GetSelectedEntries(selected);
TIter next(selected);
TGTextLBEntry *selentry;
Bool_t writemode=kTRUE;
const char *option;
TString ord;
while ((selentry=(TGTextLBEntry*)next())){
ord = selentry->GetText()->GetString();
Int_t isp = ord.Index(' ');
if (isp != kNPOS) ord.Remove(isp);
option = writemode ? "w" : "a";
fProofLog->Save(ord.Data(), filename.Data(), option);
writemode=kFALSE;
}
Info("SaveToFile", "logs saved to file %s", filename.Data());
return;
}
void TProofProgressLog::SetGrepView()
{
if (fGrepCheckCmd->IsOn()) {
fGrepLabel->SetText("Pipe log through command:");
fGrepCheckInv->SetDisabledAndSelected(kFALSE);
}
else {
fGrepLabel->SetText("Grep:");
Bool_t u = fGrepCheckInv->IsOn();
fGrepCheckInv->SetEnabled(kTRUE);
if (u) {
fGrepLabel->SetText("Show lines not matching:");
fGrepCheckInv->SetState(kButtonDown);
}
else {
fGrepLabel->SetText("Show lines matching:");
fGrepCheckInv->SetState(kButtonUp);
}
}
TGFrame *frame = dynamic_cast<TGFrame *>( const_cast<TGWindow *>(fGrepLabel->GetParent()) );
if (frame) frame->Layout();
}
void TProofProgressLog::NoLineEntry()
{
if (fAllLines->IsOn()){
fLinesFrom->SetState(kFALSE);
fLinesTo->SetState(kFALSE);
} else {
fLinesFrom->SetState(kTRUE);
fLinesTo->SetState(kTRUE);
}
}
void TProofProgressLog::Select(Int_t id, Bool_t all)
{
Int_t nen = fLogList->GetNumberOfEntries();
Bool_t sel = id ? 0 : 1;
TGLBEntry *ent = 0;
for (Int_t ie=0; ie<nen; ie++) {
if (all) {
fLogList->Select(ie, sel);
} else {
if ((ent = fLogList->GetEntry(ie))) {
if (ent->TestBit(kDefaultActive)) fLogList->Select(ie, sel);
}
}
}
}
void TProofProgressLog::Rebuild()
{
Bool_t sameurl = kFALSE;
TUrl url(fUrlText->GetText());
TUrl urlref(fSessionUrl.Data());
if (!strcmp(url.GetHostFQDN(), urlref.GetHostFQDN())) {
if (url.GetPort() == urlref.GetPort()) {
if (!strcmp(url.GetUser(), urlref.GetUser())) {
sameurl = kTRUE;
}
}
}
Int_t idx = 0;
if (sameurl) {
idx = fSessNum->GetIntNumber();
if (idx == fSessionIdx) {
Info("Rebuild", "same paremeters {%s, %s}, {%d, %d}: no need to rebuild TProofLog",
url.GetUrl(), urlref.GetUrl(), idx, fSessionIdx);
return;
}
}
if (fProofLog) delete fProofLog;
fSessionUrl = fUrlText->GetText();
fSessionIdx = idx;
BuildLogList(kFALSE);
Select(0, kFALSE);
fLogList->Layout();
return;
}
TProofProgressLog.cxx:100 TProofProgressLog.cxx:101 TProofProgressLog.cxx:102 TProofProgressLog.cxx:103 TProofProgressLog.cxx:104 TProofProgressLog.cxx:105 TProofProgressLog.cxx:106 TProofProgressLog.cxx:107 TProofProgressLog.cxx:108 TProofProgressLog.cxx:109 TProofProgressLog.cxx:110 TProofProgressLog.cxx:111 TProofProgressLog.cxx:112 TProofProgressLog.cxx:113 TProofProgressLog.cxx:114 TProofProgressLog.cxx:115 TProofProgressLog.cxx:116 TProofProgressLog.cxx:117 TProofProgressLog.cxx:118 TProofProgressLog.cxx:119 TProofProgressLog.cxx:120 TProofProgressLog.cxx:121 TProofProgressLog.cxx:122 TProofProgressLog.cxx:123 TProofProgressLog.cxx:124 TProofProgressLog.cxx:125 TProofProgressLog.cxx:126 TProofProgressLog.cxx:127 TProofProgressLog.cxx:128 TProofProgressLog.cxx:129 TProofProgressLog.cxx:130 TProofProgressLog.cxx:131 TProofProgressLog.cxx:132 TProofProgressLog.cxx:133 TProofProgressLog.cxx:134 TProofProgressLog.cxx:135 TProofProgressLog.cxx:136 TProofProgressLog.cxx:137 TProofProgressLog.cxx:138 TProofProgressLog.cxx:139 TProofProgressLog.cxx:140 TProofProgressLog.cxx:141 TProofProgressLog.cxx:142 TProofProgressLog.cxx:143 TProofProgressLog.cxx:144 TProofProgressLog.cxx:145 TProofProgressLog.cxx:146 TProofProgressLog.cxx:147 TProofProgressLog.cxx:148 TProofProgressLog.cxx:149 TProofProgressLog.cxx:150 TProofProgressLog.cxx:151 TProofProgressLog.cxx:152 TProofProgressLog.cxx:153 TProofProgressLog.cxx:154 TProofProgressLog.cxx:155 TProofProgressLog.cxx:156 TProofProgressLog.cxx:157 TProofProgressLog.cxx:158 TProofProgressLog.cxx:159 TProofProgressLog.cxx:160 TProofProgressLog.cxx:161 TProofProgressLog.cxx:162 TProofProgressLog.cxx:163 TProofProgressLog.cxx:164 TProofProgressLog.cxx:165 TProofProgressLog.cxx:166 TProofProgressLog.cxx:167 TProofProgressLog.cxx:168 TProofProgressLog.cxx:169 TProofProgressLog.cxx:170 TProofProgressLog.cxx:171 TProofProgressLog.cxx:172 TProofProgressLog.cxx:173 TProofProgressLog.cxx:174 TProofProgressLog.cxx:175 TProofProgressLog.cxx:176 TProofProgressLog.cxx:177 TProofProgressLog.cxx:178 TProofProgressLog.cxx:179 TProofProgressLog.cxx:180 TProofProgressLog.cxx:181 TProofProgressLog.cxx:182 TProofProgressLog.cxx:183 TProofProgressLog.cxx:184 TProofProgressLog.cxx:185 TProofProgressLog.cxx:186 TProofProgressLog.cxx:187 TProofProgressLog.cxx:188 TProofProgressLog.cxx:189 TProofProgressLog.cxx:190 TProofProgressLog.cxx:191 TProofProgressLog.cxx:192 TProofProgressLog.cxx:193 TProofProgressLog.cxx:194 TProofProgressLog.cxx:195 TProofProgressLog.cxx:196 TProofProgressLog.cxx:197 TProofProgressLog.cxx:198 TProofProgressLog.cxx:199 TProofProgressLog.cxx:200 TProofProgressLog.cxx:201 TProofProgressLog.cxx:202 TProofProgressLog.cxx:203 TProofProgressLog.cxx:204 TProofProgressLog.cxx:205 TProofProgressLog.cxx:206 TProofProgressLog.cxx:207 TProofProgressLog.cxx:208 TProofProgressLog.cxx:209 TProofProgressLog.cxx:210 TProofProgressLog.cxx:211 TProofProgressLog.cxx:212 TProofProgressLog.cxx:213 TProofProgressLog.cxx:214 TProofProgressLog.cxx:215 TProofProgressLog.cxx:216 TProofProgressLog.cxx:217 TProofProgressLog.cxx:218 TProofProgressLog.cxx:219 TProofProgressLog.cxx:220 TProofProgressLog.cxx:221 TProofProgressLog.cxx:222 TProofProgressLog.cxx:223 TProofProgressLog.cxx:224 TProofProgressLog.cxx:225 TProofProgressLog.cxx:226 TProofProgressLog.cxx:227 TProofProgressLog.cxx:228 TProofProgressLog.cxx:229 TProofProgressLog.cxx:230 TProofProgressLog.cxx:231 TProofProgressLog.cxx:232 TProofProgressLog.cxx:233 TProofProgressLog.cxx:234 TProofProgressLog.cxx:235 TProofProgressLog.cxx:236 TProofProgressLog.cxx:237 TProofProgressLog.cxx:238 TProofProgressLog.cxx:239 TProofProgressLog.cxx:240 TProofProgressLog.cxx:241 TProofProgressLog.cxx:242 TProofProgressLog.cxx:243 TProofProgressLog.cxx:244 TProofProgressLog.cxx:245 TProofProgressLog.cxx:246 TProofProgressLog.cxx:247 TProofProgressLog.cxx:248 TProofProgressLog.cxx:249 TProofProgressLog.cxx:250 TProofProgressLog.cxx:251 TProofProgressLog.cxx:252 TProofProgressLog.cxx:253 TProofProgressLog.cxx:254 TProofProgressLog.cxx:255 TProofProgressLog.cxx:256 TProofProgressLog.cxx:257 TProofProgressLog.cxx:258 TProofProgressLog.cxx:259 TProofProgressLog.cxx:260 TProofProgressLog.cxx:261 TProofProgressLog.cxx:262 TProofProgressLog.cxx:263 TProofProgressLog.cxx:264 TProofProgressLog.cxx:265 TProofProgressLog.cxx:266 TProofProgressLog.cxx:267 TProofProgressLog.cxx:268 TProofProgressLog.cxx:269 TProofProgressLog.cxx:270 TProofProgressLog.cxx:271 TProofProgressLog.cxx:272 TProofProgressLog.cxx:273 TProofProgressLog.cxx:274 TProofProgressLog.cxx:275 TProofProgressLog.cxx:276 TProofProgressLog.cxx:277 TProofProgressLog.cxx:278 TProofProgressLog.cxx:279 TProofProgressLog.cxx:280 TProofProgressLog.cxx:281 TProofProgressLog.cxx:282 TProofProgressLog.cxx:283 TProofProgressLog.cxx:284 TProofProgressLog.cxx:285 TProofProgressLog.cxx:286 TProofProgressLog.cxx:287 TProofProgressLog.cxx:288 TProofProgressLog.cxx:289 TProofProgressLog.cxx:290 TProofProgressLog.cxx:291 TProofProgressLog.cxx:292 TProofProgressLog.cxx:293 TProofProgressLog.cxx:294 TProofProgressLog.cxx:295 TProofProgressLog.cxx:296 TProofProgressLog.cxx:297 TProofProgressLog.cxx:298 TProofProgressLog.cxx:299 TProofProgressLog.cxx:300 TProofProgressLog.cxx:301 TProofProgressLog.cxx:302 TProofProgressLog.cxx:303 TProofProgressLog.cxx:304 TProofProgressLog.cxx:305 TProofProgressLog.cxx:306 TProofProgressLog.cxx:307 TProofProgressLog.cxx:308 TProofProgressLog.cxx:309 TProofProgressLog.cxx:310 TProofProgressLog.cxx:311 TProofProgressLog.cxx:312 TProofProgressLog.cxx:313 TProofProgressLog.cxx:314 TProofProgressLog.cxx:315 TProofProgressLog.cxx:316 TProofProgressLog.cxx:317 TProofProgressLog.cxx:318 TProofProgressLog.cxx:319 TProofProgressLog.cxx:320 TProofProgressLog.cxx:321 TProofProgressLog.cxx:322 TProofProgressLog.cxx:323 TProofProgressLog.cxx:324 TProofProgressLog.cxx:325 TProofProgressLog.cxx:326 TProofProgressLog.cxx:327 TProofProgressLog.cxx:328 TProofProgressLog.cxx:329 TProofProgressLog.cxx:330 TProofProgressLog.cxx:331 TProofProgressLog.cxx:332 TProofProgressLog.cxx:333 TProofProgressLog.cxx:334 TProofProgressLog.cxx:335 TProofProgressLog.cxx:336 TProofProgressLog.cxx:337 TProofProgressLog.cxx:338 TProofProgressLog.cxx:339 TProofProgressLog.cxx:340 TProofProgressLog.cxx:341 TProofProgressLog.cxx:342 TProofProgressLog.cxx:343 TProofProgressLog.cxx:344 TProofProgressLog.cxx:345 TProofProgressLog.cxx:346 TProofProgressLog.cxx:347 TProofProgressLog.cxx:348 TProofProgressLog.cxx:349 TProofProgressLog.cxx:350 TProofProgressLog.cxx:351 TProofProgressLog.cxx:352 TProofProgressLog.cxx:353 TProofProgressLog.cxx:354 TProofProgressLog.cxx:355 TProofProgressLog.cxx:356 TProofProgressLog.cxx:357 TProofProgressLog.cxx:358 TProofProgressLog.cxx:359 TProofProgressLog.cxx:360 TProofProgressLog.cxx:361 TProofProgressLog.cxx:362 TProofProgressLog.cxx:363 TProofProgressLog.cxx:364 TProofProgressLog.cxx:365 TProofProgressLog.cxx:366 TProofProgressLog.cxx:367 TProofProgressLog.cxx:368 TProofProgressLog.cxx:369 TProofProgressLog.cxx:370 TProofProgressLog.cxx:371 TProofProgressLog.cxx:372 TProofProgressLog.cxx:373 TProofProgressLog.cxx:374 TProofProgressLog.cxx:375 TProofProgressLog.cxx:376 TProofProgressLog.cxx:377 TProofProgressLog.cxx:378 TProofProgressLog.cxx:379 TProofProgressLog.cxx:380 TProofProgressLog.cxx:381 TProofProgressLog.cxx:382 TProofProgressLog.cxx:383 TProofProgressLog.cxx:384 TProofProgressLog.cxx:385 TProofProgressLog.cxx:386 TProofProgressLog.cxx:387 TProofProgressLog.cxx:388 TProofProgressLog.cxx:389 TProofProgressLog.cxx:390 TProofProgressLog.cxx:391 TProofProgressLog.cxx:392 TProofProgressLog.cxx:393 TProofProgressLog.cxx:394 TProofProgressLog.cxx:395 TProofProgressLog.cxx:396 TProofProgressLog.cxx:397 TProofProgressLog.cxx:398 TProofProgressLog.cxx:399 TProofProgressLog.cxx:400 TProofProgressLog.cxx:401 TProofProgressLog.cxx:402 TProofProgressLog.cxx:403 TProofProgressLog.cxx:404 TProofProgressLog.cxx:405 TProofProgressLog.cxx:406 TProofProgressLog.cxx:407 TProofProgressLog.cxx:408 TProofProgressLog.cxx:409 TProofProgressLog.cxx:410 TProofProgressLog.cxx:411 TProofProgressLog.cxx:412 TProofProgressLog.cxx:413 TProofProgressLog.cxx:414 TProofProgressLog.cxx:415 TProofProgressLog.cxx:416 TProofProgressLog.cxx:417 TProofProgressLog.cxx:418 TProofProgressLog.cxx:419 TProofProgressLog.cxx:420 TProofProgressLog.cxx:421 TProofProgressLog.cxx:422 TProofProgressLog.cxx:423 TProofProgressLog.cxx:424 TProofProgressLog.cxx:425 TProofProgressLog.cxx:426 TProofProgressLog.cxx:427 TProofProgressLog.cxx:428 TProofProgressLog.cxx:429 TProofProgressLog.cxx:430 TProofProgressLog.cxx:431 TProofProgressLog.cxx:432 TProofProgressLog.cxx:433 TProofProgressLog.cxx:434 TProofProgressLog.cxx:435 TProofProgressLog.cxx:436 TProofProgressLog.cxx:437 TProofProgressLog.cxx:438 TProofProgressLog.cxx:439 TProofProgressLog.cxx:440 TProofProgressLog.cxx:441 TProofProgressLog.cxx:442 TProofProgressLog.cxx:443 TProofProgressLog.cxx:444 TProofProgressLog.cxx:445 TProofProgressLog.cxx:446 TProofProgressLog.cxx:447 TProofProgressLog.cxx:448 TProofProgressLog.cxx:449 TProofProgressLog.cxx:450 TProofProgressLog.cxx:451 TProofProgressLog.cxx:452 TProofProgressLog.cxx:453 TProofProgressLog.cxx:454 TProofProgressLog.cxx:455 TProofProgressLog.cxx:456 TProofProgressLog.cxx:457 TProofProgressLog.cxx:458 TProofProgressLog.cxx:459 TProofProgressLog.cxx:460 TProofProgressLog.cxx:461 TProofProgressLog.cxx:462 TProofProgressLog.cxx:463 TProofProgressLog.cxx:464 TProofProgressLog.cxx:465 TProofProgressLog.cxx:466 TProofProgressLog.cxx:467 TProofProgressLog.cxx:468 TProofProgressLog.cxx:469 TProofProgressLog.cxx:470 TProofProgressLog.cxx:471 TProofProgressLog.cxx:472 TProofProgressLog.cxx:473 TProofProgressLog.cxx:474 TProofProgressLog.cxx:475 TProofProgressLog.cxx:476 TProofProgressLog.cxx:477 TProofProgressLog.cxx:478 TProofProgressLog.cxx:479 TProofProgressLog.cxx:480 TProofProgressLog.cxx:481 TProofProgressLog.cxx:482 TProofProgressLog.cxx:483 TProofProgressLog.cxx:484 TProofProgressLog.cxx:485 TProofProgressLog.cxx:486 TProofProgressLog.cxx:487 TProofProgressLog.cxx:488 TProofProgressLog.cxx:489 TProofProgressLog.cxx:490 TProofProgressLog.cxx:491 TProofProgressLog.cxx:492 TProofProgressLog.cxx:493 TProofProgressLog.cxx:494 TProofProgressLog.cxx:495 TProofProgressLog.cxx:496 TProofProgressLog.cxx:497 TProofProgressLog.cxx:498 TProofProgressLog.cxx:499 TProofProgressLog.cxx:500 TProofProgressLog.cxx:501 TProofProgressLog.cxx:502 TProofProgressLog.cxx:503 TProofProgressLog.cxx:504 TProofProgressLog.cxx:505 TProofProgressLog.cxx:506 TProofProgressLog.cxx:507 TProofProgressLog.cxx:508 TProofProgressLog.cxx:509 TProofProgressLog.cxx:510 TProofProgressLog.cxx:511 TProofProgressLog.cxx:512 TProofProgressLog.cxx:513 TProofProgressLog.cxx:514 TProofProgressLog.cxx:515 TProofProgressLog.cxx:516 TProofProgressLog.cxx:517 TProofProgressLog.cxx:518 TProofProgressLog.cxx:519 TProofProgressLog.cxx:520 TProofProgressLog.cxx:521 TProofProgressLog.cxx:522 TProofProgressLog.cxx:523 TProofProgressLog.cxx:524 TProofProgressLog.cxx:525 TProofProgressLog.cxx:526 TProofProgressLog.cxx:527 TProofProgressLog.cxx:528 TProofProgressLog.cxx:529 TProofProgressLog.cxx:530 TProofProgressLog.cxx:531 TProofProgressLog.cxx:532 TProofProgressLog.cxx:533 TProofProgressLog.cxx:534 TProofProgressLog.cxx:535 TProofProgressLog.cxx:536 TProofProgressLog.cxx:537 TProofProgressLog.cxx:538 TProofProgressLog.cxx:539 TProofProgressLog.cxx:540 TProofProgressLog.cxx:541 TProofProgressLog.cxx:542 TProofProgressLog.cxx:543 TProofProgressLog.cxx:544 TProofProgressLog.cxx:545 TProofProgressLog.cxx:546 TProofProgressLog.cxx:547 TProofProgressLog.cxx:548 TProofProgressLog.cxx:549 TProofProgressLog.cxx:550 TProofProgressLog.cxx:551 TProofProgressLog.cxx:552 TProofProgressLog.cxx:553 TProofProgressLog.cxx:554 TProofProgressLog.cxx:555 TProofProgressLog.cxx:556 TProofProgressLog.cxx:557 TProofProgressLog.cxx:558 TProofProgressLog.cxx:559 TProofProgressLog.cxx:560 TProofProgressLog.cxx:561 TProofProgressLog.cxx:562 TProofProgressLog.cxx:563 TProofProgressLog.cxx:564 TProofProgressLog.cxx:565 TProofProgressLog.cxx:566 TProofProgressLog.cxx:567 TProofProgressLog.cxx:568 TProofProgressLog.cxx:569 TProofProgressLog.cxx:570 TProofProgressLog.cxx:571 TProofProgressLog.cxx:572 TProofProgressLog.cxx:573 TProofProgressLog.cxx:574 TProofProgressLog.cxx:575 TProofProgressLog.cxx:576 TProofProgressLog.cxx:577 TProofProgressLog.cxx:578 TProofProgressLog.cxx:579 TProofProgressLog.cxx:580 TProofProgressLog.cxx:581 TProofProgressLog.cxx:582 TProofProgressLog.cxx:583 TProofProgressLog.cxx:584 TProofProgressLog.cxx:585 TProofProgressLog.cxx:586 TProofProgressLog.cxx:587 TProofProgressLog.cxx:588 TProofProgressLog.cxx:589 TProofProgressLog.cxx:590 TProofProgressLog.cxx:591 TProofProgressLog.cxx:592 TProofProgressLog.cxx:593 TProofProgressLog.cxx:594 TProofProgressLog.cxx:595 TProofProgressLog.cxx:596 TProofProgressLog.cxx:597 TProofProgressLog.cxx:598 TProofProgressLog.cxx:599 TProofProgressLog.cxx:600 TProofProgressLog.cxx:601 TProofProgressLog.cxx:602 TProofProgressLog.cxx:603 TProofProgressLog.cxx:604 TProofProgressLog.cxx:605 TProofProgressLog.cxx:606 TProofProgressLog.cxx:607 TProofProgressLog.cxx:608 TProofProgressLog.cxx:609 TProofProgressLog.cxx:610 TProofProgressLog.cxx:611 TProofProgressLog.cxx:612 TProofProgressLog.cxx:613 TProofProgressLog.cxx:614 TProofProgressLog.cxx:615 TProofProgressLog.cxx:616 TProofProgressLog.cxx:617 TProofProgressLog.cxx:618 TProofProgressLog.cxx:619 TProofProgressLog.cxx:620 TProofProgressLog.cxx:621 TProofProgressLog.cxx:622 TProofProgressLog.cxx:623 TProofProgressLog.cxx:624 TProofProgressLog.cxx:625 TProofProgressLog.cxx:626 TProofProgressLog.cxx:627 TProofProgressLog.cxx:628 TProofProgressLog.cxx:629 TProofProgressLog.cxx:630 TProofProgressLog.cxx:631 TProofProgressLog.cxx:632 TProofProgressLog.cxx:633 TProofProgressLog.cxx:634 TProofProgressLog.cxx:635 TProofProgressLog.cxx:636 TProofProgressLog.cxx:637 TProofProgressLog.cxx:638 TProofProgressLog.cxx:639 TProofProgressLog.cxx:640 TProofProgressLog.cxx:641 TProofProgressLog.cxx:642 TProofProgressLog.cxx:643 TProofProgressLog.cxx:644 TProofProgressLog.cxx:645 TProofProgressLog.cxx:646 TProofProgressLog.cxx:647 TProofProgressLog.cxx:648 TProofProgressLog.cxx:649 TProofProgressLog.cxx:650 TProofProgressLog.cxx:651 TProofProgressLog.cxx:652 TProofProgressLog.cxx:653 TProofProgressLog.cxx:654 TProofProgressLog.cxx:655 TProofProgressLog.cxx:656 TProofProgressLog.cxx:657 TProofProgressLog.cxx:658 TProofProgressLog.cxx:659 TProofProgressLog.cxx:660 TProofProgressLog.cxx:661 TProofProgressLog.cxx:662 TProofProgressLog.cxx:663 TProofProgressLog.cxx:664 TProofProgressLog.cxx:665 TProofProgressLog.cxx:666 TProofProgressLog.cxx:667 TProofProgressLog.cxx:668 TProofProgressLog.cxx:669 TProofProgressLog.cxx:670 TProofProgressLog.cxx:671 TProofProgressLog.cxx:672 TProofProgressLog.cxx:673 TProofProgressLog.cxx:674 TProofProgressLog.cxx:675