ROOT logo
// $Id: AEVDistAnRep.cxx 2824 2012-07-15 19:26:02Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

//__________________________________________________________________________
// AEVDistAnRep
//
//

#include "AEVDistAnRep.h"

#include "AEVEventBatch.h"
#include "AEVJobRep.h"
#include "AEVDemoDriver.h"

#include "AEVDistAnRep.c7"

#include "AEVSite.h"
#include "AEVSiteViz.h"
#include "AEVProcessViz.h"

#include <Glasses/ZQueen.h>
#include <Glasses/Eventor.h>
#include <Stones/ZComet.h>

#include <TPRegexp.h>
#include <TMath.h>

ClassImp(AEVDistAnRep);

/**************************************************************************/

void AEVDistAnRep::_init()
{
  mConnectTime = 2.5;
  mRotTime     = 2;
  mTravelTime  = 1.25;
  mWaitTime    = 0.05;

  mProcDuration = 0;

  mReplayDuration = 60;
  mReplayMaxWait  = 5;

  bInReplay       = false;
}

/**************************************************************************/

void AEVDistAnRep::AdEnlightenment()
{
  PARENT_GLASS::AdEnlightenment();
  if(mSites == 0) {
    assign_link<ZNameMap>(mSites, FID(), "Sites", GForm("Containter of %s", GetName()));
    mSites->SetElementFID(AEVSite::FID());
    mSites->SetMIRActive(false);
  }
  if(mEvBatches == 0) {
    assign_link<ZNameMap>(mEvBatches, FID(), "EventBatches", GForm("Containter of %s", GetName()));
    mEvBatches->SetElementFID(AEVEventBatch::FID());
    mEvBatches->SetMIRActive(false);
  }
  if(mProcVizes == 0) {
    assign_link<ZNameMap>(mProcVizes, FID(), "ProcVizes", GForm("Containter of %s", GetName()));
    mProcVizes->SetElementFID(AEVProcessViz::FID());
    mProcVizes->SetMIRActive(false);
  }
}

void AEVDistAnRep::AddEventBatch(AEVEventBatch* evb)
{
  Add(evb);
  mEvBatches->Add(evb);
}

/**************************************************************************/

Int_t AEVDistAnRep::create_evbatches(map<string, int>& cmap)
{
  map<string, int>::iterator i = cmap.begin();
  int nres      = cmap.size();
  int totevents = 0;
  float dx = 1.5, x = -dx*nres/2, y = 2;
  while(i != cmap.end()) {
    Int_t events = i->second;
    printf("%-12s %d\n", i->first.c_str(), events);
    totevents += events;

    AEVEventBatch* eb = new AEVEventBatch(i->first.c_str(), GForm("EvBatch for %s", i->first.c_str()));
    eb->Reinit(events);
    eb->SetNWorkers(-1);
    eb->SetDataSizeMB(-1);

    mQueen->CheckIn(eb);
    AddEventBatch(eb);

    bool placed = false;
    if(mDemoDriver->GetMapViz() != 0) {
      placed = place_evbatch_on_map(eb);
    }
    if(!placed) {
      eb->SetPos(x, y, 0); x += dx;
    }

    ++i;
  }
  printf("Sites=%zd Events=%d\n", cmap.size(), totevents);
  return totevents;
}

void AEVDistAnRep::fix_evbatches()
{
  /*
  mDSet->GetListOfElementsMsn();
  TIter next_msn(mDSet->GetListOfElementsMsn());
  TDSetElementMsn* msn;
  while((msn = dynamic_cast<TDSetElementMsn*>(next_msn())) != 0) {
    Str_t msnname(msn->GetMsn());
    lStr_t els;
    GledNS::split_string(msnname, els, "::");
    if(els.size() != 3) {
      printf("Safr for %s\n", msnname.c_str());
      continue;
    }
    els.pop_front();
    AEVEventBatch* eb = dynamic_cast<AEVEventBatch*>
      (mEvBatches->GetElementByName( els.front().c_str() ));
    if(eb == 0) continue;

    SEvTaskState ts;
    ts.Reinit(msn->GetNfiles() * mMagicFac);
    eb->SetEvState(ts);

    eb->SetNWorkers(msn->GetNSiteDaemons());
    eb->SetDataSizeMB((Double_t)msn->GetDataSize()/1024/1024);
  }
  */
}

Bool_t AEVDistAnRep::place_evbatch_on_map(AEVEventBatch* eb)
{
  AEVSiteViz* sv = mDemoDriver->GetMapViz()->FindSiteViz(eb->GetName());
  if(sv == 0) return false;
  auto_ptr<ZTrans> t( ZNode::BtoA(this, sv) );
  if(t.get() == 0) return false;
  Double_t s[3];
  t->Unscale(s[0], s[1], s[2]);
  eb->SetTrans(*t);
  eb->SetScales(s[0], s[1], s[2]);
  return true;
}

/**************************************************************************/

void AEVDistAnRep::ResetJob()
{
  mBatchState.Reinit(mBatchState.GetNAll());
  mEventState.Reinit(mEventState.GetNAll());
  Stepper<AEVEventBatch> s(*mEvBatches);
  while(s.step())
    s->Reinit();
  mProcVizes->ClearList();
}

void AEVDistAnRep::ResetDistAn()
{
  ClearList();

  mSites->ClearList();
  mEvBatches->ClearList();
  mProcVizes->ClearList();

  mDemoDriver->GetMapViz()->ClearSiteVizes();
  mDemoDriver->GetTheatre()->ClearAmphitheatre();

  mBatchState.Reinit(0);
  mEventState.Reinit(0);

  Stamp(FID());
}

/**************************************************************************/

void AEVDistAnRep::InitJob(AEVJobRep* job)
{
  static const Exc_t _eh("AEVDistAnRep::InitJob ");

  if(job == 0 && mJobId == "")
    throw(_eh + "null argument.");
  if(job != 0) {
    mJobId   = job->GetName();
    mJobName = job->GetJobname();
  }

  Int_t total_entries = 0;

  {
    GLensWriteHolder wrlck(this);
    ResetDistAn();
  }

  AEVMlClient* mona_client = mDemoDriver->GetMonaClient();
  mona_client->SetCluster("ALIEN_QUERY");
  mona_client->SetNode(mJobId);
  mona_client->SetParam("sitelist");
  mona_client->SetFLSort(AEVMlClient::SM_Ascending);

  lMonaEntry_t l;

  mona_client->GetFLValues(l);
  if(l.empty())    throw(_eh + "empty sitelist.");
  if(l.size() > 1) throw(_eh + "got more than one result for sitelist.");

  // Setup query time.
  mQueryTime = l.front().fTime;

  TPMERegexp sites("\\s*:|,\\s*");
  Int_t n_sites = sites.Split(l.front().fValue);
  printf("n_sites=%d: %s\n", n_sites, l.front().fValue.Data());

  for(int s=0; s<n_sites; ++s) {
    mona_client->SetParam(sites[s] + ":param");

    l.clear();
    mona_client->GetFLValues(l);
    if(l.empty()) {
      printf("no data for %s\n", sites[s].Data());
      continue;
    }
    if(l.size() > 1) {
      printf("multiple entries for %s, using first\n", sites[s].Data());
    }

    TPMERegexp params("\\s*,\\s*");
    Int_t n_params = params.Split(l.front().fValue);
    printf("  site=%s, n_params=%d: %s\n", sites[s].Data(), n_params,
	   l.front().fValue.Data());

    AEVSite*       site    = new AEVSite(sites[s]);
    AEVEventBatch* evbatch = new AEVEventBatch(sites[s], GForm("EvBatch for %s", sites[s].Data()));

    TPMERegexp keyval("\\s*:\\s*");
    for(int p=0; p<n_params; ++p) {
      Int_t n = keyval.Split(params[p]);
      if(n != 2) {
	printf("split problems with %s\n", params[p].Data());
	continue;
      }
      printf("    '%s' = '%s'\n", keyval[0].Data(), keyval[1].Data());

      if(keyval[0] == "location") {
	site->SetLocation(keyval[1]);
      }
      // !!! Watch this !!! Wrong stuff stored in monalisa.
      else if(keyval[0] == "longitude") {
	site->SetLatitude(atof(keyval[1]));
      }
      else if(keyval[0] == "latitude") {
	site->SetLongitude(atof(keyval[1]));
      }
      else if(keyval[0] == "entries") {
	Int_t ent = atoi(keyval[1]);
	total_entries += ent;
	evbatch->Reinit(ent);
      }
      else if(keyval[0] == "datasize") {
	Double_t siz = atol(keyval[1])/1024.0/1024.0;
	evbatch->SetDataSizeMB(siz);
      }
      else {
	printf("unknown paramater '%s'\n", keyval[0].Data());
      }
    }

    GLensWriteHolder wrlck(this);

    mQueen->CheckIn(site);    mSites->Add(site);
    mQueen->CheckIn(evbatch); AddEventBatch(evbatch);

    if(mDemoDriver->GetMapViz()->ImportSite(site) == false)
      ISerr(_eh + "site '" + sites[s] + "' not placed on map.");
    place_evbatch_on_map(evbatch);
  }

  GLensWriteHolder wrlck(this);

  mBatchState.Reinit(n_sites);
  mEventState.Reinit(total_entries);

  Stamp(FID());
}

namespace
{

struct SiteData
{
  const char* name;
  const char* location;
  float       longitude;
  float       latitude;
};

SiteData SiteDatas[] = {
  { "Muenster", "Muenster", 7.633, 51.967 },
  { "ITEP", "Moscow", 37.42, 55.45 },
  // { "Clermont", "Clermont-Ferrand", 3.05, 44.46 },
  { "RMKI", "Budapest", 19.5, 47.30 },
  { "CERN", "Geneva", 6.15, 46.217 },
  { "CNAF", "Bologna", 11.333, 44.5 },
  { "Bari", "Bari", 16.867, 41.117 },
  { "Catania", "Catania", 15.1, 37.517 },
  { "Prague", "Prague", 14.26, 50.10 },
  { "FZK", "Karlsruhe", 8.4, 49.05 },
  { "Houston", "Houston", -95.33, 29.7500 },
  { "PNPI", "St. Petersburg", 30.2500, 58.8833 },
};
Int_t SiteDatasN = 11;

}

void AEVDistAnRep::FakeInitJob(AEVJobRep* job)
{
  static const Exc_t _eh("AEVDistAnRep::FakeInitJob ");

  if(job == 0 && mJobId == "")
    throw(_eh + "null argument.");
  if(job != 0) {
    mJobId   = job->GetName();
    mJobName = job->GetJobname();
  }

  Int_t total_entries = 0;

  {
    GLensWriteHolder wrlck(this);
    ResetDistAn();
  }

  TRandom gen(0);

  lMonaEntry_t l;

  Int_t n_sites = SiteDatasN;

  for(int s=0; s<n_sites; ++s) {
    AEVSite*       site    = new AEVSite(SiteDatas[s].name);
    AEVEventBatch* evbatch = new AEVEventBatch
      (SiteDatas[s].name, GForm("EvBatch for %s", SiteDatas[s].name));

    site->SetLocation(SiteDatas[s].location);
    site->SetLatitude(SiteDatas[s].latitude);
    site->SetLongitude(SiteDatas[s].longitude);
    {
      Int_t ent = Int_t(13 + 47*gen.Rndm());
      total_entries += ent;
      evbatch->Reinit(ent);
      Double_t siz = ent*100*(1 + 0.4*(gen.Rndm()-0.5));
      evbatch->SetDataSizeMB(siz);
      evbatch->SetProcAvg(TMath::Nint(2 + 2*gen.Rndm()));
    }

    GLensWriteHolder wrlck(this);

    mQueen->CheckIn(site);    mSites->Add(site);
    mQueen->CheckIn(evbatch); AddEventBatch(evbatch);

    if(mDemoDriver->GetMapViz()->ImportSite(site) == false)
      ISerr(_eh + "site '" + SiteDatas[s].name + "' not placed on map.");
    place_evbatch_on_map(evbatch);
  }

  GLensWriteHolder wrlck(this);

  mBatchState.Reinit(n_sites);
  mEventState.Reinit(total_entries);

  Stamp(FID());
}

/**************************************************************************/

void AEVDistAnRep::StudyJobHistory(Bool_t dump_p)
{
  static const Exc_t _eh("AEVDistAnRep::StudyJobHistory ");

  if(mJobId == "")
    throw(_eh + "no job specified.");

  AEVMlClient* mona_client = mDemoDriver->GetMonaClient();
  mona_client->SetCluster("ALIEN_PROCESS");
  mona_client->SetNode(mJobId);
  mona_client->SetParam("*");

  mona_client->SetFromHrs(mQueryTime.TimeUntilNow().ToDouble()/3600);
  mona_client->SetToHrs(0);

  mHistory.clear();
  mona_client->GetValues(mHistory);

  if(mHistory.empty() == false) {
    mProcStart    = mHistory.front().fTime;
    mProcEnd      = mHistory.back().fTime;
    mProcDuration = (mProcEnd - mProcStart).ToDouble();
  } else {
    mProcStart    = 0l;
    mProcEnd      = 0l;
    mProcDuration = 0;
  }

  Stamp(FID());

  if(dump_p) {
    printf("%sjobname='%s' jobid='%s' entries=%zd\n", _eh.Data(),
	   mJobName.Data(), mJobId.Data(), mHistory.size());
    for(lMonaEntry_i i=mHistory.begin(); i!=mHistory.end(); ++i)
      printf("  %-32s %12s %s\n", i->fParam.Data(), i->fValue.Data(), i->fDateStr.Data());
  }
}

/**************************************************************************/

AEVProcessViz* AEVDistAnRep::find_or_crete_procviz(const TString& proc,
						   const TString& site)
{
  static const Exc_t _eh("AEVDistAnRep::find_or_crete_procviz ");

  AEVProcessViz* pv = (AEVProcessViz*) mProcVizes->GetElementByName(proc);
  if(pv == 0) {
    AEVSiteViz* sv = mDemoDriver->GetMapViz()->FindSiteViz(site);
    if(sv == 0)
      throw(_eh + "site-viz for '" + site + "' not found.");

    AEVEventBatch* eb = (AEVEventBatch*) mEvBatches->GetElementByName(site);
    if(eb == 0)
      throw(_eh + "event-batch for '" + site + "' not found.");

    pv = new AEVProcessViz(proc);
    mQueen->CheckIn(pv);
    pv->SetParent(this);
    pv->SetNodeA(sv);
    pv->SetNodeB(mDemoDriver->GetMonaViz()->GetParent());
    pv->SetBatch(eb);
    // mDemoDriver->setup_tube(pv, "PROOF");
    mDemoDriver->setup_tube(pv, "Red2Yellow");
    pv->SetTexUScale(5);
    pv->SetDtexU(-0.5);
    pv->SetDefVelocity(1 / mTravelTime);
    pv->SetMinWaitTime(mWaitTime);
    mDemoDriver->animate_tube(pv);
    {
      GLensWriteHolder wrlck(this);
      mProcVizes->Add(pv);
    }
    pv->AnimateConnect(1 / mConnectTime);
    {
      GLensWriteHolder wrlck(eb);
      eb->IncProcessing();
    }
  }

  return pv;
}

Int_t AEVDistAnRep::ReplayJobFromHistory()
{
  // Returns number of remaining entries (also in mir-result-request).

  static const Exc_t _eh("AEVDistAnRep::ReplayJobFromHistory ");

  GMutexHolder replay_lock(mReplayCond);
  {
    GLensWriteHolder wrlck(this);
    if(bInReplay)
      throw(_eh + "already playing.");
    if(mHistory.empty())
      throw(_eh + "job history empty.");

    SetInReplay(true);
    mReplayTime = mHistory.front().fTime;
  }

  TPMERegexp proc_parname_re("([^:]+:[^:]+:[^:]+):([^:]+)");
  TPMERegexp site_subproc_re("([^:]+):([^:]+:[^:]+)");
  while(true) {
    if(mHistory.empty()) {
      GLensWriteHolder wrlck(this);
      printf("history empty, returning\n");
      SetInReplay(false);
      break;
    }

    AEVMlClient::MonaEntry me = mHistory.front();

    if(me.fTime > mReplayTime) {
      Double_t sleep_sec = (me.fTime - mReplayTime).ToDouble() *
	mReplayDuration / mProcDuration;
      if(sleep_sec > mReplayMaxWait)
	sleep_sec = mReplayMaxWait;
      printf("sleeping for %.3lf ms\n", sleep_sec);
      mReplayCond.TimedWait(GTime(sleep_sec, 0));

      GLensWriteHolder wrlck(this);
      if(bInReplay == false) {
	printf("replay stopped, returning\n");
	break;
      }
      mReplayTime = me.fTime;
      mReplayPos  = (mReplayTime - mProcStart).ToDouble()*
	mReplayDuration/mProcDuration;
      Stamp(FID());
    }
    mHistory.pop_front();

    printf("processing: '%s'\n", me.StdFormat());
    mDemoDriver->set_blurp(me.fDateStr);
    try {

      if(me.fParam == "status") {
	if(me.fValue == "STARTED") {
	  continue;
	}
	else if(me.fValue == "DONE") {
	  // This is not present
	  // !!! finalize all
	  // ??? break ??? history should be empty anyway
	}
	// RESET ???
	// STARTED can be ignored
	continue;
      }

      Int_t m1, m2;
      m1 = proc_parname_re.Match(me.fParam);
      if(m1 != 3) {
	printf("  m1=%d trouble, skipping\n", m1);
	continue;
      }
      printf("  proc_id='%s', subparam='%s'\n",
	     proc_parname_re[1].Data(), proc_parname_re[2].Data());
      m2 = site_subproc_re.Match(proc_parname_re[1]);
      if(m2 != 3) {
	printf("  m2=%d trouble, skipping\n", m2);
	continue;
      }
      printf("  site='%s', subproc='%s'\n",
	     site_subproc_re[1].Data(), site_subproc_re[2].Data());

      TString proc    = proc_parname_re[1];
      TString parname = proc_parname_re[2];
      TString site    = site_subproc_re[1];
      TString subproc = site_subproc_re[2];

      AEVProcessViz* pv = find_or_crete_procviz(proc, site);
      AEVEventBatch* eb = pv->GetBatch();

      if(parname == "status") {
	printf("  status = %s\n", me.fValue.Data());
	if(me.fValue == "PROCESSING") {
	  // All is done when first record for process is received.
	  // See above.
	}
	else if(me.fValue == "DONE") {
	  { GLensWriteHolder wrlck(eb);
	    eb->DecProcessing();

	    if(eb->IsDone()) {
	      eb->Finalize();
	      mBatchState.IncNOK(1);
	      Stamp(FID());
	    }
	  }
	  { GLensWriteHolder wrlck(pv);
	    pv->AnimateDisconnect(1 / mConnectTime, true);
	  }
	}
      }
      else if(parname == "entries") {
	Int_t ents  = atoi(me.fValue.Data());
	Int_t delta = ents - pv->GetEntsDone();
	printf("  entries = %d, delta = %d\n", ents, delta);
	if(delta != 0) {
	  eb->mEvState.IncNOK(delta);
	  eb->Stamp(AEVEventBatch::FID());
	  mEventState.IncNOK(delta);
	  Stamp(FID());
	  pv->SetEntsDone(ents);
	  {
	    GLensWriteHolder tube_lck(pv);
	    pv->MakeTraveler();
	  }
	}
      }
      else if(parname == "datasize") {
	Float_t megs  = atof(me.fValue.Data())/1024/1024;
	Float_t delta = megs - pv->GetMegsDone();
	printf("  megs = %lf\n", megs);
	if(delta != 0) {
	  eb->mDataDoneMB = megs;
	  eb->Stamp(AEVEventBatch::FID());
	  pv->SetMegsDone(megs);
	}
      }
      else {
	printf("  unknown parameter name\n");
      }

    } catch(Exc_t exc) {
      printf("exception: '%s'.\nproceeding ...\n", exc.Data());
    }
  }

  GLensWriteHolder wrlck(this);
  Int_t n_left = mHistory.size();

  SetInReplay(false);

  ZMIR* mir = get_MIR();
  if(mir && mir->HasResultReq()) {
    TBufferFile b(TBuffer::kWrite);
    b << n_left;
    mSaturn->ShootMIRResult(b);
  }

  return n_left;
}

namespace {

struct EvBatchInfo {
  AEVEventBatch*         event_batch;
  vector<AEVProcessViz*> proc_vector;
  Int_t                  all_proc_count;
  Int_t                  done_proc_count;

  EvBatchInfo(AEVEventBatch* eb) : event_batch(eb)
  { all_proc_count = done_proc_count = 0;}
};

};

Int_t AEVDistAnRep::FakeReplayJobFromHistory()
{
  // Returns number of remaining entries (also in mir-result-request).

  static const Exc_t _eh("AEVDistAnRep::FakeReplayJobFromHistory ");

  GMutexHolder replay_lock(mReplayCond);
  {
    GLensWriteHolder wrlck(this);
    if(bInReplay)
      throw(_eh + "already playing.");

    SetInReplay(true);
    // mReplayTime.SetNow();
  }

  TRandom gen(0);

  Int_t n_todo = 0;
  list<EvBatchInfo> eb_infos;

  Stepper<AEVEventBatch> ebs(*mEvBatches);
  while(ebs.step()) {
    n_todo += ebs->RefEvState().GetNToDo();
    eb_infos.push_back(EvBatchInfo(*ebs));
  }

  while(true) {
    // printf("= n_todo=%d ============================================\n", n_todo);

    if(n_todo == 0) {
      GLensWriteHolder wrlck(this);
      printf("fake seems completed, returning\n");
      mEventState.SetNProc(0);
      SetInReplay(false);
      break;
    }
    n_todo = 0; // Actual value accumulated on each pass.

    for(list<EvBatchInfo>::iterator ebi=eb_infos.begin(); ebi!=eb_infos.end(); ++ebi) {
      AEVEventBatch* eb = ebi->event_batch;
      Int_t ex_nproc = eb->RefEvState().GetNProc();
      Int_t ex_ndone = eb->RefEvState().GetNDone();
      Int_t ex_nok   = eb->RefEvState().GetNOK();
      Int_t ex_nfail = eb->RefEvState().GetNFail();

      eb->FakeProc();

      Int_t nproc = eb->RefEvState().GetNProc();
      Int_t ndone = eb->RefEvState().GetNDone();
      Int_t nok   = eb->RefEvState().GetNOK();
      Int_t nfail = eb->RefEvState().GetNFail();

      Int_t delta_nproc = nproc - ex_nproc;
      Int_t delta_ndone = ndone - ex_ndone;
      Int_t delta_nok   = nok   - ex_nok;
      Int_t delta_nfail = nfail - ex_nfail;

      // printf("Site=%-12s ExNproc=%3d Nproc=%3d Dproc=%3d, ExNdone=%3d Ndone=%3d Ddone=%3d\n",
      //   eb->GetName(), ex_nproc, nproc, delta_nproc,
      //   ex_ndone, ndone, delta_ndone);

      Int_t born_procs = delta_nproc;
      while(born_procs-- > 0) {
	TString new_name(GForm("%s-%d", eb->GetName(), ebi->all_proc_count++));
	AEVProcessViz* pv = 0;
	{
	  AEVSiteViz* sv = mDemoDriver->GetMapViz()->FindSiteViz(eb->GetName());
	  if(sv == 0)
	    throw(_eh + "site-viz for '" + eb->GetName() + "' not found.");

	  pv = new AEVProcessViz(new_name);
	  mQueen->CheckIn(pv);
	  pv->SetParent(this);
	  pv->SetNodeA(sv);
	  pv->SetNodeB(mDemoDriver->GetMonaViz()->GetParent());
	  pv->SetBatch(eb);
	  // mDemoDriver->setup_tube(pv, "PROOF");
	  mDemoDriver->setup_tube(pv, "Red2Yellow");
	  pv->SetTexUScale(5);
	  pv->SetDtexU(-0.5);
	  pv->SetDefVelocity(1 / mTravelTime);
	  pv->SetMinWaitTime(mWaitTime);
	  mDemoDriver->animate_tube(pv);
	  {
	    GLensWriteHolder wrlck(this);
	    mProcVizes->Add(pv);
	  }
	  GLensWriteHolder wrlck(pv);
	  pv->AnimateConnect(1 / mConnectTime);
	}
	ebi->proc_vector.push_back(pv);
      }
      Int_t balls = delta_ndone;
      while(balls-- > 0) {
	int nproc = ebi->all_proc_count  - ebi->done_proc_count;
	int pos   = ebi->done_proc_count + int(nproc*gen.Rndm());
	// printf("  Shoot: pos=%d ndone=%d nall=%d\n", pos, ebi->done_proc_count, ebi->all_proc_count);
	AEVProcessViz* pv = ebi->proc_vector[pos];
	GLensWriteHolder tube_lck(pv);
	pv->MakeTraveler();
      }
      Int_t died_procs = delta_nproc;
      while(died_procs++ < 0) {
	int pos = ebi->done_proc_count++;
	AEVProcessViz* pv = ebi->proc_vector[pos];
	GLensWriteHolder wrlck(pv);
	pv->AnimateDisconnect(1 / mConnectTime, true);
      }

      if(delta_ndone != 0) {
	mEventState.IncNOK(delta_nok);
	mEventState.IncNFail(delta_nfail);
	mEventState.IncNProc(delta_nproc);
	Stamp(FID());
      }

      if(eb->RefEvState().GetNToDo() == 0) {
	// printf("Site='%s' FINISHED\n", eb->GetName());
	list<EvBatchInfo>::iterator i = ebi--;
	// assert no more connections?
	eb_infos.erase(i);
	{ GLensWriteHolder wrlck(eb);
	  eb->Finalize();
	  mBatchState.IncNOK(1);
	  Stamp(FID());
	}
      }

      n_todo += eb->RefEvState().GetNToDo();
    }

    // printf("=======================================================\n");
    {
      Eventor* etor = mDemoDriver->GetAnimator();
      Double_t tstart = etor->GetInternalTime();
      do {
	mReplayCond.TimedWait(GTime::MiliSec(200));
	GLensWriteHolder wrlck(this);
	if(bInReplay == false) {
	  printf("replay stopped, returning\n");
	  break;
	}
      } while (etor->GetInternalTime() - tstart < 1.4);
    }

  }

  GLensWriteHolder wrlck(this);

  SetInReplay(false);

  ZMIR* mir = get_MIR();
  if(mir && mir->HasResultReq()) {
    TBufferFile b(TBuffer::kWrite);
    b << n_todo;
    mSaturn->ShootMIRResult(b);
  }

  return n_todo;
}

/**************************************************************************/

void AEVDistAnRep::StopReplay()
{
  static const Exc_t _eh("AEVDistAnRep::StopReplay ");

  if(bInReplay == false)
    throw(_eh + "not playing.");

  SetInReplay(false);
  mReplayCond.LockSignal();
}

void AEVDistAnRep::FinalizeJob()
{
  static const Exc_t _eh("AEVDistAnRep::FinalizeJob ");

  if(bInReplay)
    throw(_eh + "replay not finished.");

  { GMutexHolder llck(mProcVizes->RefListMutex());
    Stepper<AEVProcessViz> s(*mProcVizes);
    while(s.step()) {
      if(s->GetConnectionStauts() == WSTube::CS_Connected) {
	AEVEventBatch* eb = s->GetBatch();
	{ GLensWriteHolder wrlck(eb);
	  eb->DecProcessing();
	}
	{ GLensWriteHolder wrlck(*s);
	  s->AnimateDisconnect(1 / mConnectTime, true);
	}
      }
    }
  }

  { GMutexHolder llck(mEvBatches->RefListMutex());
    Stepper<AEVEventBatch> s(*mEvBatches);
    while(s.step()) {
      if(s->RefEvState().GetState() != 'F') {
	GLensWriteHolder wrlck(*s);
	s->Finalize();
	if(s->RefEvState().GetNOK() > s->RefEvState().GetNAll()/2) {
	  mBatchState.IncNOK(1);
	} else {
	  mBatchState.IncNFail(1);
	}
      }
    }
  }

  mBatchState.Finalize();
  mEventState.Finalize();
  Stamp(FID());
}

/**************************************************************************/

namespace {

struct ProcInfo {
  TString fSite;
  TString fStatus;
  Int_t   fEntsDone;
  Float_t fMegsDone;

  ProcInfo() : fEntsDone(0), fMegsDone(0) {}
};

}

void AEVDistAnRep::FollowJob()
{
  static const Exc_t _eh("AEVDistAnRep::FollowJob ");

  AEVMlClient* mona_client = mDemoDriver->GetMonaClient();
  mona_client->SetCluster("ALIEN_PROCESS");
  mona_client->SetNode(mJobId);
  mona_client->SetParam("*");

  TPMERegexp proc_parname_re("([^:]+:[^:]+:[^:]+):([^:]+)");
  TPMERegexp site_subproc_re("([^:]+):([^:]+:[^:]+)");

  map<TString, ProcInfo> proc_map;
  Bool_t first_entry = true;

  while(bInReplay) {

    mHistory.clear();
    proc_map.clear();
    mona_client->GetFLValues(mHistory);

    for(lMonaEntry_i mei=mHistory.begin(); mei!=mHistory.end(); ++mei) {
      AEVMlClient::MonaEntry& me = *mei;

      if(me.fParam == "status") {
	if(me.fValue == "STARTED") {
	  continue;
	}
	else if(me.fValue == "DONE") {
	  // This is not present
	  // !!! finalize all
	  // ??? break ??? history should be empty anyway
	}
	// RESET ???
	// STARTED can be ignored
	continue;
      }

      Int_t m1, m2;
      m1 = proc_parname_re.Match(me.fParam);
      if(m1 != 3) {
	printf("  m1=%d trouble, skipping\n", m1);
	continue;
      }
      printf("  proc_id='%s', subparam='%s'\n",
	     proc_parname_re[1].Data(), proc_parname_re[2].Data());
      m2 = site_subproc_re.Match(proc_parname_re[1]);
      if(m2 != 3) {
	printf("  m2=%d trouble, skipping\n", m2);
	continue;
      }
      printf("  site='%s', subproc='%s'\n",
	     site_subproc_re[1].Data(), site_subproc_re[2].Data());

      TString proc    = proc_parname_re[1];
      TString parname = proc_parname_re[2];
      TString site    = site_subproc_re[1];
      TString subproc = site_subproc_re[2];

      proc_map[proc].fSite = site;
      if(parname == "status")
	proc_map[proc].fStatus = me.fValue;
      else if(parname == "entries")
	proc_map[proc].fEntsDone = atoi(me.fValue.Data());
      else if(parname == "datasize")
	proc_map[proc].fMegsDone = atof(me.fValue.Data())/1024/1024;

    } // for mona entry

    for(map<TString, ProcInfo>::iterator pimi = proc_map.begin();
	pimi != proc_map.end(); ++pimi)
      {
	const TString& proc = pimi->first;
	ProcInfo&      pi   = pimi->second;

	AEVProcessViz* pv = 0;
	if(pi.fStatus == "PROCESSING")
	  pv = find_or_crete_procviz(proc, pi.fSite);
	else
	  pv = (AEVProcessViz*) mProcVizes->GetElementByName(proc);
	AEVEventBatch* eb = (AEVEventBatch*) mEvBatches->GetElementByName(pi.fSite);

	if(pv != 0) {
	  { // check num entries
	    Int_t ents  = pi.fEntsDone;
	    Int_t delta = ents - pv->GetEntsDone();
	    if(delta != 0) {
	      printf("  entries = %d, delta = %d\n", ents, delta);
	      eb->mEvState.IncNOK(delta);
	      eb->Stamp(AEVEventBatch::FID());
	      mEventState.IncNOK(delta);
	      Stamp(FID());
	      pv->SetEntsDone(ents);
	      {
		GLensWriteHolder tube_lck(pv);
		pv->MakeTraveler();
	      }
	    }
	  }
	  { // check num megs
	    Float_t megs  = pi.fMegsDone;
	    Float_t delta = megs - pv->GetMegsDone();
	    printf("  megs = %lf\n", megs);
	    if(delta != 0) {
	      eb->mDataDoneMB = megs;
	      eb->Stamp(AEVEventBatch::FID());
	      pv->SetMegsDone(megs);
	    }
	  }
	}

	if(pi.fStatus == "DONE") {
	  if(first_entry) {
	    Int_t delta = pi.fEntsDone;
	    eb->mEvState.IncNOK(delta);
	    eb->Stamp(AEVEventBatch::FID());
	    mEventState.IncNOK(delta);
	    Stamp(FID());
	  } else {
	    // if in procs, disconnect
	    if(pv != 0) {
	      { GLensWriteHolder wrlck(pv);
		pv->AnimateDisconnect(1 / mConnectTime, true);
	      }
	      { GLensWriteHolder wrlck(eb);
		eb->DecProcessing();
	      }
	    }
	  }
	} // if status == done

	{ GLensWriteHolder wrlck(eb);
	  if(eb->IsDone()) {
	    eb->Finalize();
	    mBatchState.IncNOK(1);
	    Stamp(FID());
	  }
	}

      } // for process map

    first_entry = false;

  } //while in replay
}

/**************************************************************************/
/**************************************************************************/

void AEVDistAnRep::SendEvBatchesToTheatre(Amphitheatre* amph)
{
  static const Exc_t _eh("AEVDistAnRep::SendEvBatchesToTheatre ");

  if(amph == 0) amph = mDemoDriver->GetTheatre();
  if(amph == 0) throw(_eh + "no theatre in sight.");

  list<AEVEventBatch*> ebs;
  CopyListByGlass<AEVEventBatch>(ebs);
  amph->WriteLock();
  for(list<AEVEventBatch*>::iterator eb=ebs.begin(); eb!=ebs.end(); ++eb) {
    amph->AddGuest(*eb);
    RemoveAll(*eb);
  }
  amph->WriteUnlock();
  Stamp(FID());

  mSaturn->ShootMIR( amph->S_StartHunt() );
}

/**************************************************************************/
/**************************************************************************/

void AEVDistAnRep::Process()
{
  static const Exc_t _eh("AEVDistAnRep::Process ");

  /*
  if(mDSet == 0)          throw(_eh + "DataSet not present.");
  if(bConnected == false) throw(_eh + "DatSet not Connected to PROOF.");

  {
    TList* l = new TList();
    l->SetName("FeedbackList");
    l->Add(new TObjString("hMassK0"));
    mDSet->AddInput(l);
  }

  WriteLock();
  SetProcessing(true);
  _first_feedback = true;
  mFeedback.Connect(mProof, this);
  WriteUnlock();

  Int_t nproc = 0;
  list<AEVEventBatch*> ebs;
  mEvBatches->CopyListByGlass<AEVEventBatch*>(ebs);
  for(list<AEVEventBatch*>::iterator eb=ebs.begin(); eb!=ebs.end(); ++eb) {
    (*eb)->WriteLock();
    SEvTaskState es = (*eb)->RefEvState();
    es.SetNProc((*eb)->GetNWorkers() <? es.GetNAll());
    nproc += es.GetNProc();
    es.SetState('R');
    (*eb)->SetEvState(es);
    (*eb)->WriteUnlock();
  }

  WriteLock();
  mBatchState.SetNProc(mBatchState.GetNAll());
  mBatchState.SetState('R');
  mEventState.SetNProc(nproc);
  mEventState.SetState('R');

  Stamp(FID());
  WriteUnlock();

  mProof->EnablePackage(mPkgName.Data());
  mProof->Exec(GForm(".include ../packages/%s", mPkgName.Data()));

  mDSet->Process(mSelector.Data());

  FinalizeProcStatus();

  WriteLock();
  mFeedback.Disconnect();
  SetProcessing(false);
  WriteUnlock();
  */
}

void AEVDistAnRep::UpdateProcStatus(TList* siteinfos,
				    map<string,int>* siteevmap)
{
  /*
  Int_t d_evs = 0, d_proc = 0, d_sites = 0;

  if(_first_feedback) {
    fix_evbatches();
    _first_feedback = false;
  }

  TIter next_site(siteinfos);
  TObject* ro;

  int site_count = 0;
  while((ro = next_site()) != 0) {
    ++site_count;
    TSiteNodeInfo* sni = dynamic_cast<TSiteNodeInfo*>(ro);
    if (sni == 0) continue;
    Str_t cename(sni->GetNodeName());
    Str_t sitename;
    {
      lStr_t els;
      GledNS::split_string(cename, els, "::");
      if(els.size() != 3) {
	printf("Safr for %s\n", cename.c_str());
	continue;
      }
      els.pop_front();
      sitename = els.front();
    }
    AEVEventBatch* eb = dynamic_cast<AEVEventBatch*>
      (mEvBatches->GetElementByName( sitename.c_str() ));
    if(eb == 0) continue;

    // sni->Print();

    eb->WriteLock();
    SEvTaskState ts = eb->GetEvState();

    if(ts.GetNToDo() != 0) {

      Int_t ndone =  (Int_t)sni->GetEventsProcessed();

      if(ts.GetNOK() < ndone) {
	Int_t delta = ndone - ts.GetNOK();
	d_evs += delta;
	ts.SetNOK(ndone);
	if(ts.GetNToDo() < ts.GetNProc()) {
	  d_proc += ts.GetNProc() - ts.GetNToDo();
	  ts.SetNProc(ts.GetNToDo());
	}
	if(ts.GetNToDo() <= 0 && ts.GetState() != 'F') {
	  d_sites += 1;
	  ts.SetState('F');
	}
	eb->SetEvState(ts);
	if(siteevmap) (*siteevmap)[sitename] = delta;
      }
    }
    eb->WriteUnlock();
  }

  // printf("Final: %d, %d, %d\n", d_evs, d_proc, d_sites);

  GLensWriteHolder wrlck(this);

  mBatchState.IncNOK(d_sites);
  mBatchState.IncNProc(-d_sites);

  mEventState.IncNOK(d_evs);
  mEventState.IncNProc(-d_proc);

  Stamp(FID());
  */
}

/**************************************************************************/

void AEVDistAnRep::StartProc()
{
  mBatchState.SetNProc(mBatchState.GetNAll());

  list<AEVEventBatch*> ebs;
  mEvBatches->CopyListByGlass<AEVEventBatch>(ebs);
  for(list<AEVEventBatch*>::iterator eb=ebs.begin(); eb!=ebs.end(); ++eb) {
    (*eb)->WriteLock();
    const SEvTaskState&	es((*eb)->RefEvState());
    (*eb)->SetProcAvg((Int_t) TMath::Floor(es.GetNAll()*0.1 + 1));
    (*eb)->SetFracFail(0.15);
    (*eb)->WriteUnlock();
  }
  Stamp(FID());
}

void AEVDistAnRep::FakeProc()
{
  map<string, int> changes;
  FakeProc(changes);
}

void AEVDistAnRep::FakeProc(map<string, int>& changes)
{
  list<AEVEventBatch*> ebs;
  mEvBatches->CopyListByGlass<AEVEventBatch>(ebs);
  for(list<AEVEventBatch*>::iterator eb=ebs.begin(); eb!=ebs.end(); ++eb) {
    (*eb)->WriteLock();
    SEvTaskState s0( (*eb)->RefEvState() );
    if(s0.GetNToDo() > 0) {
      (*eb)->FakeProc();
      SEvTaskState s1( (*eb)->RefEvState() );
      int delta = s1.GetNDone() - s0.GetNDone();
      changes[(*eb)->GetName()] = delta;

      if(s1.GetNToDo() == 0) {
	mBatchState.IncNOK(1);
	mBatchState.IncNProc(-1);
      }
      { int d = s1.GetNOK()   - s0.GetNOK();   mEventState.IncNOK(d); }
      { int d = s1.GetNFail() - s0.GetNFail(); mEventState.IncNFail(d); }
      { int d = s1.GetNProc() - s0.GetNProc(); mEventState.IncNProc(d); }
    }
    (*eb)->WriteUnlock();
  }
  Stamp(FID());
}
 AEVDistAnRep.cxx:1
 AEVDistAnRep.cxx:2
 AEVDistAnRep.cxx:3
 AEVDistAnRep.cxx:4
 AEVDistAnRep.cxx:5
 AEVDistAnRep.cxx:6
 AEVDistAnRep.cxx:7
 AEVDistAnRep.cxx:8
 AEVDistAnRep.cxx:9
 AEVDistAnRep.cxx:10
 AEVDistAnRep.cxx:11
 AEVDistAnRep.cxx:12
 AEVDistAnRep.cxx:13
 AEVDistAnRep.cxx:14
 AEVDistAnRep.cxx:15
 AEVDistAnRep.cxx:16
 AEVDistAnRep.cxx:17
 AEVDistAnRep.cxx:18
 AEVDistAnRep.cxx:19
 AEVDistAnRep.cxx:20
 AEVDistAnRep.cxx:21
 AEVDistAnRep.cxx:22
 AEVDistAnRep.cxx:23
 AEVDistAnRep.cxx:24
 AEVDistAnRep.cxx:25
 AEVDistAnRep.cxx:26
 AEVDistAnRep.cxx:27
 AEVDistAnRep.cxx:28
 AEVDistAnRep.cxx:29
 AEVDistAnRep.cxx:30
 AEVDistAnRep.cxx:31
 AEVDistAnRep.cxx:32
 AEVDistAnRep.cxx:33
 AEVDistAnRep.cxx:34
 AEVDistAnRep.cxx:35
 AEVDistAnRep.cxx:36
 AEVDistAnRep.cxx:37
 AEVDistAnRep.cxx:38
 AEVDistAnRep.cxx:39
 AEVDistAnRep.cxx:40
 AEVDistAnRep.cxx:41
 AEVDistAnRep.cxx:42
 AEVDistAnRep.cxx:43
 AEVDistAnRep.cxx:44
 AEVDistAnRep.cxx:45
 AEVDistAnRep.cxx:46
 AEVDistAnRep.cxx:47
 AEVDistAnRep.cxx:48
 AEVDistAnRep.cxx:49
 AEVDistAnRep.cxx:50
 AEVDistAnRep.cxx:51
 AEVDistAnRep.cxx:52
 AEVDistAnRep.cxx:53
 AEVDistAnRep.cxx:54
 AEVDistAnRep.cxx:55
 AEVDistAnRep.cxx:56
 AEVDistAnRep.cxx:57
 AEVDistAnRep.cxx:58
 AEVDistAnRep.cxx:59
 AEVDistAnRep.cxx:60
 AEVDistAnRep.cxx:61
 AEVDistAnRep.cxx:62
 AEVDistAnRep.cxx:63
 AEVDistAnRep.cxx:64
 AEVDistAnRep.cxx:65
 AEVDistAnRep.cxx:66
 AEVDistAnRep.cxx:67
 AEVDistAnRep.cxx:68
 AEVDistAnRep.cxx:69
 AEVDistAnRep.cxx:70
 AEVDistAnRep.cxx:71
 AEVDistAnRep.cxx:72
 AEVDistAnRep.cxx:73
 AEVDistAnRep.cxx:74
 AEVDistAnRep.cxx:75
 AEVDistAnRep.cxx:76
 AEVDistAnRep.cxx:77
 AEVDistAnRep.cxx:78
 AEVDistAnRep.cxx:79
 AEVDistAnRep.cxx:80
 AEVDistAnRep.cxx:81
 AEVDistAnRep.cxx:82
 AEVDistAnRep.cxx:83
 AEVDistAnRep.cxx:84
 AEVDistAnRep.cxx:85
 AEVDistAnRep.cxx:86
 AEVDistAnRep.cxx:87
 AEVDistAnRep.cxx:88
 AEVDistAnRep.cxx:89
 AEVDistAnRep.cxx:90
 AEVDistAnRep.cxx:91
 AEVDistAnRep.cxx:92
 AEVDistAnRep.cxx:93
 AEVDistAnRep.cxx:94
 AEVDistAnRep.cxx:95
 AEVDistAnRep.cxx:96
 AEVDistAnRep.cxx:97
 AEVDistAnRep.cxx:98
 AEVDistAnRep.cxx:99
 AEVDistAnRep.cxx:100
 AEVDistAnRep.cxx:101
 AEVDistAnRep.cxx:102
 AEVDistAnRep.cxx:103
 AEVDistAnRep.cxx:104
 AEVDistAnRep.cxx:105
 AEVDistAnRep.cxx:106
 AEVDistAnRep.cxx:107
 AEVDistAnRep.cxx:108
 AEVDistAnRep.cxx:109
 AEVDistAnRep.cxx:110
 AEVDistAnRep.cxx:111
 AEVDistAnRep.cxx:112
 AEVDistAnRep.cxx:113
 AEVDistAnRep.cxx:114
 AEVDistAnRep.cxx:115
 AEVDistAnRep.cxx:116
 AEVDistAnRep.cxx:117
 AEVDistAnRep.cxx:118
 AEVDistAnRep.cxx:119
 AEVDistAnRep.cxx:120
 AEVDistAnRep.cxx:121
 AEVDistAnRep.cxx:122
 AEVDistAnRep.cxx:123
 AEVDistAnRep.cxx:124
 AEVDistAnRep.cxx:125
 AEVDistAnRep.cxx:126
 AEVDistAnRep.cxx:127
 AEVDistAnRep.cxx:128
 AEVDistAnRep.cxx:129
 AEVDistAnRep.cxx:130
 AEVDistAnRep.cxx:131
 AEVDistAnRep.cxx:132
 AEVDistAnRep.cxx:133
 AEVDistAnRep.cxx:134
 AEVDistAnRep.cxx:135
 AEVDistAnRep.cxx:136
 AEVDistAnRep.cxx:137
 AEVDistAnRep.cxx:138
 AEVDistAnRep.cxx:139
 AEVDistAnRep.cxx:140
 AEVDistAnRep.cxx:141
 AEVDistAnRep.cxx:142
 AEVDistAnRep.cxx:143
 AEVDistAnRep.cxx:144
 AEVDistAnRep.cxx:145
 AEVDistAnRep.cxx:146
 AEVDistAnRep.cxx:147
 AEVDistAnRep.cxx:148
 AEVDistAnRep.cxx:149
 AEVDistAnRep.cxx:150
 AEVDistAnRep.cxx:151
 AEVDistAnRep.cxx:152
 AEVDistAnRep.cxx:153
 AEVDistAnRep.cxx:154
 AEVDistAnRep.cxx:155
 AEVDistAnRep.cxx:156
 AEVDistAnRep.cxx:157
 AEVDistAnRep.cxx:158
 AEVDistAnRep.cxx:159
 AEVDistAnRep.cxx:160
 AEVDistAnRep.cxx:161
 AEVDistAnRep.cxx:162
 AEVDistAnRep.cxx:163
 AEVDistAnRep.cxx:164
 AEVDistAnRep.cxx:165
 AEVDistAnRep.cxx:166
 AEVDistAnRep.cxx:167
 AEVDistAnRep.cxx:168
 AEVDistAnRep.cxx:169
 AEVDistAnRep.cxx:170
 AEVDistAnRep.cxx:171
 AEVDistAnRep.cxx:172
 AEVDistAnRep.cxx:173
 AEVDistAnRep.cxx:174
 AEVDistAnRep.cxx:175
 AEVDistAnRep.cxx:176
 AEVDistAnRep.cxx:177
 AEVDistAnRep.cxx:178
 AEVDistAnRep.cxx:179
 AEVDistAnRep.cxx:180
 AEVDistAnRep.cxx:181
 AEVDistAnRep.cxx:182
 AEVDistAnRep.cxx:183
 AEVDistAnRep.cxx:184
 AEVDistAnRep.cxx:185
 AEVDistAnRep.cxx:186
 AEVDistAnRep.cxx:187
 AEVDistAnRep.cxx:188
 AEVDistAnRep.cxx:189
 AEVDistAnRep.cxx:190
 AEVDistAnRep.cxx:191
 AEVDistAnRep.cxx:192
 AEVDistAnRep.cxx:193
 AEVDistAnRep.cxx:194
 AEVDistAnRep.cxx:195
 AEVDistAnRep.cxx:196
 AEVDistAnRep.cxx:197
 AEVDistAnRep.cxx:198
 AEVDistAnRep.cxx:199
 AEVDistAnRep.cxx:200
 AEVDistAnRep.cxx:201
 AEVDistAnRep.cxx:202
 AEVDistAnRep.cxx:203
 AEVDistAnRep.cxx:204
 AEVDistAnRep.cxx:205
 AEVDistAnRep.cxx:206
 AEVDistAnRep.cxx:207
 AEVDistAnRep.cxx:208
 AEVDistAnRep.cxx:209
 AEVDistAnRep.cxx:210
 AEVDistAnRep.cxx:211
 AEVDistAnRep.cxx:212
 AEVDistAnRep.cxx:213
 AEVDistAnRep.cxx:214
 AEVDistAnRep.cxx:215
 AEVDistAnRep.cxx:216
 AEVDistAnRep.cxx:217
 AEVDistAnRep.cxx:218
 AEVDistAnRep.cxx:219
 AEVDistAnRep.cxx:220
 AEVDistAnRep.cxx:221
 AEVDistAnRep.cxx:222
 AEVDistAnRep.cxx:223
 AEVDistAnRep.cxx:224
 AEVDistAnRep.cxx:225
 AEVDistAnRep.cxx:226
 AEVDistAnRep.cxx:227
 AEVDistAnRep.cxx:228
 AEVDistAnRep.cxx:229
 AEVDistAnRep.cxx:230
 AEVDistAnRep.cxx:231
 AEVDistAnRep.cxx:232
 AEVDistAnRep.cxx:233
 AEVDistAnRep.cxx:234
 AEVDistAnRep.cxx:235
 AEVDistAnRep.cxx:236
 AEVDistAnRep.cxx:237
 AEVDistAnRep.cxx:238
 AEVDistAnRep.cxx:239
 AEVDistAnRep.cxx:240
 AEVDistAnRep.cxx:241
 AEVDistAnRep.cxx:242
 AEVDistAnRep.cxx:243
 AEVDistAnRep.cxx:244
 AEVDistAnRep.cxx:245
 AEVDistAnRep.cxx:246
 AEVDistAnRep.cxx:247
 AEVDistAnRep.cxx:248
 AEVDistAnRep.cxx:249
 AEVDistAnRep.cxx:250
 AEVDistAnRep.cxx:251
 AEVDistAnRep.cxx:252
 AEVDistAnRep.cxx:253
 AEVDistAnRep.cxx:254
 AEVDistAnRep.cxx:255
 AEVDistAnRep.cxx:256
 AEVDistAnRep.cxx:257
 AEVDistAnRep.cxx:258
 AEVDistAnRep.cxx:259
 AEVDistAnRep.cxx:260
 AEVDistAnRep.cxx:261
 AEVDistAnRep.cxx:262
 AEVDistAnRep.cxx:263
 AEVDistAnRep.cxx:264
 AEVDistAnRep.cxx:265
 AEVDistAnRep.cxx:266
 AEVDistAnRep.cxx:267
 AEVDistAnRep.cxx:268
 AEVDistAnRep.cxx:269
 AEVDistAnRep.cxx:270
 AEVDistAnRep.cxx:271
 AEVDistAnRep.cxx:272
 AEVDistAnRep.cxx:273
 AEVDistAnRep.cxx:274
 AEVDistAnRep.cxx:275
 AEVDistAnRep.cxx:276
 AEVDistAnRep.cxx:277
 AEVDistAnRep.cxx:278
 AEVDistAnRep.cxx:279
 AEVDistAnRep.cxx:280
 AEVDistAnRep.cxx:281
 AEVDistAnRep.cxx:282
 AEVDistAnRep.cxx:283
 AEVDistAnRep.cxx:284
 AEVDistAnRep.cxx:285
 AEVDistAnRep.cxx:286
 AEVDistAnRep.cxx:287
 AEVDistAnRep.cxx:288
 AEVDistAnRep.cxx:289
 AEVDistAnRep.cxx:290
 AEVDistAnRep.cxx:291
 AEVDistAnRep.cxx:292
 AEVDistAnRep.cxx:293
 AEVDistAnRep.cxx:294
 AEVDistAnRep.cxx:295
 AEVDistAnRep.cxx:296
 AEVDistAnRep.cxx:297
 AEVDistAnRep.cxx:298
 AEVDistAnRep.cxx:299
 AEVDistAnRep.cxx:300
 AEVDistAnRep.cxx:301
 AEVDistAnRep.cxx:302
 AEVDistAnRep.cxx:303
 AEVDistAnRep.cxx:304
 AEVDistAnRep.cxx:305
 AEVDistAnRep.cxx:306
 AEVDistAnRep.cxx:307
 AEVDistAnRep.cxx:308
 AEVDistAnRep.cxx:309
 AEVDistAnRep.cxx:310
 AEVDistAnRep.cxx:311
 AEVDistAnRep.cxx:312
 AEVDistAnRep.cxx:313
 AEVDistAnRep.cxx:314
 AEVDistAnRep.cxx:315
 AEVDistAnRep.cxx:316
 AEVDistAnRep.cxx:317
 AEVDistAnRep.cxx:318
 AEVDistAnRep.cxx:319
 AEVDistAnRep.cxx:320
 AEVDistAnRep.cxx:321
 AEVDistAnRep.cxx:322
 AEVDistAnRep.cxx:323
 AEVDistAnRep.cxx:324
 AEVDistAnRep.cxx:325
 AEVDistAnRep.cxx:326
 AEVDistAnRep.cxx:327
 AEVDistAnRep.cxx:328
 AEVDistAnRep.cxx:329
 AEVDistAnRep.cxx:330
 AEVDistAnRep.cxx:331
 AEVDistAnRep.cxx:332
 AEVDistAnRep.cxx:333
 AEVDistAnRep.cxx:334
 AEVDistAnRep.cxx:335
 AEVDistAnRep.cxx:336
 AEVDistAnRep.cxx:337
 AEVDistAnRep.cxx:338
 AEVDistAnRep.cxx:339
 AEVDistAnRep.cxx:340
 AEVDistAnRep.cxx:341
 AEVDistAnRep.cxx:342
 AEVDistAnRep.cxx:343
 AEVDistAnRep.cxx:344
 AEVDistAnRep.cxx:345
 AEVDistAnRep.cxx:346
 AEVDistAnRep.cxx:347
 AEVDistAnRep.cxx:348
 AEVDistAnRep.cxx:349
 AEVDistAnRep.cxx:350
 AEVDistAnRep.cxx:351
 AEVDistAnRep.cxx:352
 AEVDistAnRep.cxx:353
 AEVDistAnRep.cxx:354
 AEVDistAnRep.cxx:355
 AEVDistAnRep.cxx:356
 AEVDistAnRep.cxx:357
 AEVDistAnRep.cxx:358
 AEVDistAnRep.cxx:359
 AEVDistAnRep.cxx:360
 AEVDistAnRep.cxx:361
 AEVDistAnRep.cxx:362
 AEVDistAnRep.cxx:363
 AEVDistAnRep.cxx:364
 AEVDistAnRep.cxx:365
 AEVDistAnRep.cxx:366
 AEVDistAnRep.cxx:367
 AEVDistAnRep.cxx:368
 AEVDistAnRep.cxx:369
 AEVDistAnRep.cxx:370
 AEVDistAnRep.cxx:371
 AEVDistAnRep.cxx:372
 AEVDistAnRep.cxx:373
 AEVDistAnRep.cxx:374
 AEVDistAnRep.cxx:375
 AEVDistAnRep.cxx:376
 AEVDistAnRep.cxx:377
 AEVDistAnRep.cxx:378
 AEVDistAnRep.cxx:379
 AEVDistAnRep.cxx:380
 AEVDistAnRep.cxx:381
 AEVDistAnRep.cxx:382
 AEVDistAnRep.cxx:383
 AEVDistAnRep.cxx:384
 AEVDistAnRep.cxx:385
 AEVDistAnRep.cxx:386
 AEVDistAnRep.cxx:387
 AEVDistAnRep.cxx:388
 AEVDistAnRep.cxx:389
 AEVDistAnRep.cxx:390
 AEVDistAnRep.cxx:391
 AEVDistAnRep.cxx:392
 AEVDistAnRep.cxx:393
 AEVDistAnRep.cxx:394
 AEVDistAnRep.cxx:395
 AEVDistAnRep.cxx:396
 AEVDistAnRep.cxx:397
 AEVDistAnRep.cxx:398
 AEVDistAnRep.cxx:399
 AEVDistAnRep.cxx:400
 AEVDistAnRep.cxx:401
 AEVDistAnRep.cxx:402
 AEVDistAnRep.cxx:403
 AEVDistAnRep.cxx:404
 AEVDistAnRep.cxx:405
 AEVDistAnRep.cxx:406
 AEVDistAnRep.cxx:407
 AEVDistAnRep.cxx:408
 AEVDistAnRep.cxx:409
 AEVDistAnRep.cxx:410
 AEVDistAnRep.cxx:411
 AEVDistAnRep.cxx:412
 AEVDistAnRep.cxx:413
 AEVDistAnRep.cxx:414
 AEVDistAnRep.cxx:415
 AEVDistAnRep.cxx:416
 AEVDistAnRep.cxx:417
 AEVDistAnRep.cxx:418
 AEVDistAnRep.cxx:419
 AEVDistAnRep.cxx:420
 AEVDistAnRep.cxx:421
 AEVDistAnRep.cxx:422
 AEVDistAnRep.cxx:423
 AEVDistAnRep.cxx:424
 AEVDistAnRep.cxx:425
 AEVDistAnRep.cxx:426
 AEVDistAnRep.cxx:427
 AEVDistAnRep.cxx:428
 AEVDistAnRep.cxx:429
 AEVDistAnRep.cxx:430
 AEVDistAnRep.cxx:431
 AEVDistAnRep.cxx:432
 AEVDistAnRep.cxx:433
 AEVDistAnRep.cxx:434
 AEVDistAnRep.cxx:435
 AEVDistAnRep.cxx:436
 AEVDistAnRep.cxx:437
 AEVDistAnRep.cxx:438
 AEVDistAnRep.cxx:439
 AEVDistAnRep.cxx:440
 AEVDistAnRep.cxx:441
 AEVDistAnRep.cxx:442
 AEVDistAnRep.cxx:443
 AEVDistAnRep.cxx:444
 AEVDistAnRep.cxx:445
 AEVDistAnRep.cxx:446
 AEVDistAnRep.cxx:447
 AEVDistAnRep.cxx:448
 AEVDistAnRep.cxx:449
 AEVDistAnRep.cxx:450
 AEVDistAnRep.cxx:451
 AEVDistAnRep.cxx:452
 AEVDistAnRep.cxx:453
 AEVDistAnRep.cxx:454
 AEVDistAnRep.cxx:455
 AEVDistAnRep.cxx:456
 AEVDistAnRep.cxx:457
 AEVDistAnRep.cxx:458
 AEVDistAnRep.cxx:459
 AEVDistAnRep.cxx:460
 AEVDistAnRep.cxx:461
 AEVDistAnRep.cxx:462
 AEVDistAnRep.cxx:463
 AEVDistAnRep.cxx:464
 AEVDistAnRep.cxx:465
 AEVDistAnRep.cxx:466
 AEVDistAnRep.cxx:467
 AEVDistAnRep.cxx:468
 AEVDistAnRep.cxx:469
 AEVDistAnRep.cxx:470
 AEVDistAnRep.cxx:471
 AEVDistAnRep.cxx:472
 AEVDistAnRep.cxx:473
 AEVDistAnRep.cxx:474
 AEVDistAnRep.cxx:475
 AEVDistAnRep.cxx:476
 AEVDistAnRep.cxx:477
 AEVDistAnRep.cxx:478
 AEVDistAnRep.cxx:479
 AEVDistAnRep.cxx:480
 AEVDistAnRep.cxx:481
 AEVDistAnRep.cxx:482
 AEVDistAnRep.cxx:483
 AEVDistAnRep.cxx:484
 AEVDistAnRep.cxx:485
 AEVDistAnRep.cxx:486
 AEVDistAnRep.cxx:487
 AEVDistAnRep.cxx:488
 AEVDistAnRep.cxx:489
 AEVDistAnRep.cxx:490
 AEVDistAnRep.cxx:491
 AEVDistAnRep.cxx:492
 AEVDistAnRep.cxx:493
 AEVDistAnRep.cxx:494
 AEVDistAnRep.cxx:495
 AEVDistAnRep.cxx:496
 AEVDistAnRep.cxx:497
 AEVDistAnRep.cxx:498
 AEVDistAnRep.cxx:499
 AEVDistAnRep.cxx:500
 AEVDistAnRep.cxx:501
 AEVDistAnRep.cxx:502
 AEVDistAnRep.cxx:503
 AEVDistAnRep.cxx:504
 AEVDistAnRep.cxx:505
 AEVDistAnRep.cxx:506
 AEVDistAnRep.cxx:507
 AEVDistAnRep.cxx:508
 AEVDistAnRep.cxx:509
 AEVDistAnRep.cxx:510
 AEVDistAnRep.cxx:511
 AEVDistAnRep.cxx:512
 AEVDistAnRep.cxx:513
 AEVDistAnRep.cxx:514
 AEVDistAnRep.cxx:515
 AEVDistAnRep.cxx:516
 AEVDistAnRep.cxx:517
 AEVDistAnRep.cxx:518
 AEVDistAnRep.cxx:519
 AEVDistAnRep.cxx:520
 AEVDistAnRep.cxx:521
 AEVDistAnRep.cxx:522
 AEVDistAnRep.cxx:523
 AEVDistAnRep.cxx:524
 AEVDistAnRep.cxx:525
 AEVDistAnRep.cxx:526
 AEVDistAnRep.cxx:527
 AEVDistAnRep.cxx:528
 AEVDistAnRep.cxx:529
 AEVDistAnRep.cxx:530
 AEVDistAnRep.cxx:531
 AEVDistAnRep.cxx:532
 AEVDistAnRep.cxx:533
 AEVDistAnRep.cxx:534
 AEVDistAnRep.cxx:535
 AEVDistAnRep.cxx:536
 AEVDistAnRep.cxx:537
 AEVDistAnRep.cxx:538
 AEVDistAnRep.cxx:539
 AEVDistAnRep.cxx:540
 AEVDistAnRep.cxx:541
 AEVDistAnRep.cxx:542
 AEVDistAnRep.cxx:543
 AEVDistAnRep.cxx:544
 AEVDistAnRep.cxx:545
 AEVDistAnRep.cxx:546
 AEVDistAnRep.cxx:547
 AEVDistAnRep.cxx:548
 AEVDistAnRep.cxx:549
 AEVDistAnRep.cxx:550
 AEVDistAnRep.cxx:551
 AEVDistAnRep.cxx:552
 AEVDistAnRep.cxx:553
 AEVDistAnRep.cxx:554
 AEVDistAnRep.cxx:555
 AEVDistAnRep.cxx:556
 AEVDistAnRep.cxx:557
 AEVDistAnRep.cxx:558
 AEVDistAnRep.cxx:559
 AEVDistAnRep.cxx:560
 AEVDistAnRep.cxx:561
 AEVDistAnRep.cxx:562
 AEVDistAnRep.cxx:563
 AEVDistAnRep.cxx:564
 AEVDistAnRep.cxx:565
 AEVDistAnRep.cxx:566
 AEVDistAnRep.cxx:567
 AEVDistAnRep.cxx:568
 AEVDistAnRep.cxx:569
 AEVDistAnRep.cxx:570
 AEVDistAnRep.cxx:571
 AEVDistAnRep.cxx:572
 AEVDistAnRep.cxx:573
 AEVDistAnRep.cxx:574
 AEVDistAnRep.cxx:575
 AEVDistAnRep.cxx:576
 AEVDistAnRep.cxx:577
 AEVDistAnRep.cxx:578
 AEVDistAnRep.cxx:579
 AEVDistAnRep.cxx:580
 AEVDistAnRep.cxx:581
 AEVDistAnRep.cxx:582
 AEVDistAnRep.cxx:583
 AEVDistAnRep.cxx:584
 AEVDistAnRep.cxx:585
 AEVDistAnRep.cxx:586
 AEVDistAnRep.cxx:587
 AEVDistAnRep.cxx:588
 AEVDistAnRep.cxx:589
 AEVDistAnRep.cxx:590
 AEVDistAnRep.cxx:591
 AEVDistAnRep.cxx:592
 AEVDistAnRep.cxx:593
 AEVDistAnRep.cxx:594
 AEVDistAnRep.cxx:595
 AEVDistAnRep.cxx:596
 AEVDistAnRep.cxx:597
 AEVDistAnRep.cxx:598
 AEVDistAnRep.cxx:599
 AEVDistAnRep.cxx:600
 AEVDistAnRep.cxx:601
 AEVDistAnRep.cxx:602
 AEVDistAnRep.cxx:603
 AEVDistAnRep.cxx:604
 AEVDistAnRep.cxx:605
 AEVDistAnRep.cxx:606
 AEVDistAnRep.cxx:607
 AEVDistAnRep.cxx:608
 AEVDistAnRep.cxx:609
 AEVDistAnRep.cxx:610
 AEVDistAnRep.cxx:611
 AEVDistAnRep.cxx:612
 AEVDistAnRep.cxx:613
 AEVDistAnRep.cxx:614
 AEVDistAnRep.cxx:615
 AEVDistAnRep.cxx:616
 AEVDistAnRep.cxx:617
 AEVDistAnRep.cxx:618
 AEVDistAnRep.cxx:619
 AEVDistAnRep.cxx:620
 AEVDistAnRep.cxx:621
 AEVDistAnRep.cxx:622
 AEVDistAnRep.cxx:623
 AEVDistAnRep.cxx:624
 AEVDistAnRep.cxx:625
 AEVDistAnRep.cxx:626
 AEVDistAnRep.cxx:627
 AEVDistAnRep.cxx:628
 AEVDistAnRep.cxx:629
 AEVDistAnRep.cxx:630
 AEVDistAnRep.cxx:631
 AEVDistAnRep.cxx:632
 AEVDistAnRep.cxx:633
 AEVDistAnRep.cxx:634
 AEVDistAnRep.cxx:635
 AEVDistAnRep.cxx:636
 AEVDistAnRep.cxx:637
 AEVDistAnRep.cxx:638
 AEVDistAnRep.cxx:639
 AEVDistAnRep.cxx:640
 AEVDistAnRep.cxx:641
 AEVDistAnRep.cxx:642
 AEVDistAnRep.cxx:643
 AEVDistAnRep.cxx:644
 AEVDistAnRep.cxx:645
 AEVDistAnRep.cxx:646
 AEVDistAnRep.cxx:647
 AEVDistAnRep.cxx:648
 AEVDistAnRep.cxx:649
 AEVDistAnRep.cxx:650
 AEVDistAnRep.cxx:651
 AEVDistAnRep.cxx:652
 AEVDistAnRep.cxx:653
 AEVDistAnRep.cxx:654
 AEVDistAnRep.cxx:655
 AEVDistAnRep.cxx:656
 AEVDistAnRep.cxx:657
 AEVDistAnRep.cxx:658
 AEVDistAnRep.cxx:659
 AEVDistAnRep.cxx:660
 AEVDistAnRep.cxx:661
 AEVDistAnRep.cxx:662
 AEVDistAnRep.cxx:663
 AEVDistAnRep.cxx:664
 AEVDistAnRep.cxx:665
 AEVDistAnRep.cxx:666
 AEVDistAnRep.cxx:667
 AEVDistAnRep.cxx:668
 AEVDistAnRep.cxx:669
 AEVDistAnRep.cxx:670
 AEVDistAnRep.cxx:671
 AEVDistAnRep.cxx:672
 AEVDistAnRep.cxx:673
 AEVDistAnRep.cxx:674
 AEVDistAnRep.cxx:675
 AEVDistAnRep.cxx:676
 AEVDistAnRep.cxx:677
 AEVDistAnRep.cxx:678
 AEVDistAnRep.cxx:679
 AEVDistAnRep.cxx:680
 AEVDistAnRep.cxx:681
 AEVDistAnRep.cxx:682
 AEVDistAnRep.cxx:683
 AEVDistAnRep.cxx:684
 AEVDistAnRep.cxx:685
 AEVDistAnRep.cxx:686
 AEVDistAnRep.cxx:687
 AEVDistAnRep.cxx:688
 AEVDistAnRep.cxx:689
 AEVDistAnRep.cxx:690
 AEVDistAnRep.cxx:691
 AEVDistAnRep.cxx:692
 AEVDistAnRep.cxx:693
 AEVDistAnRep.cxx:694
 AEVDistAnRep.cxx:695
 AEVDistAnRep.cxx:696
 AEVDistAnRep.cxx:697
 AEVDistAnRep.cxx:698
 AEVDistAnRep.cxx:699
 AEVDistAnRep.cxx:700
 AEVDistAnRep.cxx:701
 AEVDistAnRep.cxx:702
 AEVDistAnRep.cxx:703
 AEVDistAnRep.cxx:704
 AEVDistAnRep.cxx:705
 AEVDistAnRep.cxx:706
 AEVDistAnRep.cxx:707
 AEVDistAnRep.cxx:708
 AEVDistAnRep.cxx:709
 AEVDistAnRep.cxx:710
 AEVDistAnRep.cxx:711
 AEVDistAnRep.cxx:712
 AEVDistAnRep.cxx:713
 AEVDistAnRep.cxx:714
 AEVDistAnRep.cxx:715
 AEVDistAnRep.cxx:716
 AEVDistAnRep.cxx:717
 AEVDistAnRep.cxx:718
 AEVDistAnRep.cxx:719
 AEVDistAnRep.cxx:720
 AEVDistAnRep.cxx:721
 AEVDistAnRep.cxx:722
 AEVDistAnRep.cxx:723
 AEVDistAnRep.cxx:724
 AEVDistAnRep.cxx:725
 AEVDistAnRep.cxx:726
 AEVDistAnRep.cxx:727
 AEVDistAnRep.cxx:728
 AEVDistAnRep.cxx:729
 AEVDistAnRep.cxx:730
 AEVDistAnRep.cxx:731
 AEVDistAnRep.cxx:732
 AEVDistAnRep.cxx:733
 AEVDistAnRep.cxx:734
 AEVDistAnRep.cxx:735
 AEVDistAnRep.cxx:736
 AEVDistAnRep.cxx:737
 AEVDistAnRep.cxx:738
 AEVDistAnRep.cxx:739
 AEVDistAnRep.cxx:740
 AEVDistAnRep.cxx:741
 AEVDistAnRep.cxx:742
 AEVDistAnRep.cxx:743
 AEVDistAnRep.cxx:744
 AEVDistAnRep.cxx:745
 AEVDistAnRep.cxx:746
 AEVDistAnRep.cxx:747
 AEVDistAnRep.cxx:748
 AEVDistAnRep.cxx:749
 AEVDistAnRep.cxx:750
 AEVDistAnRep.cxx:751
 AEVDistAnRep.cxx:752
 AEVDistAnRep.cxx:753
 AEVDistAnRep.cxx:754
 AEVDistAnRep.cxx:755
 AEVDistAnRep.cxx:756
 AEVDistAnRep.cxx:757
 AEVDistAnRep.cxx:758
 AEVDistAnRep.cxx:759
 AEVDistAnRep.cxx:760
 AEVDistAnRep.cxx:761
 AEVDistAnRep.cxx:762
 AEVDistAnRep.cxx:763
 AEVDistAnRep.cxx:764
 AEVDistAnRep.cxx:765
 AEVDistAnRep.cxx:766
 AEVDistAnRep.cxx:767
 AEVDistAnRep.cxx:768
 AEVDistAnRep.cxx:769
 AEVDistAnRep.cxx:770
 AEVDistAnRep.cxx:771
 AEVDistAnRep.cxx:772
 AEVDistAnRep.cxx:773
 AEVDistAnRep.cxx:774
 AEVDistAnRep.cxx:775
 AEVDistAnRep.cxx:776
 AEVDistAnRep.cxx:777
 AEVDistAnRep.cxx:778
 AEVDistAnRep.cxx:779
 AEVDistAnRep.cxx:780
 AEVDistAnRep.cxx:781
 AEVDistAnRep.cxx:782
 AEVDistAnRep.cxx:783
 AEVDistAnRep.cxx:784
 AEVDistAnRep.cxx:785
 AEVDistAnRep.cxx:786
 AEVDistAnRep.cxx:787
 AEVDistAnRep.cxx:788
 AEVDistAnRep.cxx:789
 AEVDistAnRep.cxx:790
 AEVDistAnRep.cxx:791
 AEVDistAnRep.cxx:792
 AEVDistAnRep.cxx:793
 AEVDistAnRep.cxx:794
 AEVDistAnRep.cxx:795
 AEVDistAnRep.cxx:796
 AEVDistAnRep.cxx:797
 AEVDistAnRep.cxx:798
 AEVDistAnRep.cxx:799
 AEVDistAnRep.cxx:800
 AEVDistAnRep.cxx:801
 AEVDistAnRep.cxx:802
 AEVDistAnRep.cxx:803
 AEVDistAnRep.cxx:804
 AEVDistAnRep.cxx:805
 AEVDistAnRep.cxx:806
 AEVDistAnRep.cxx:807
 AEVDistAnRep.cxx:808
 AEVDistAnRep.cxx:809
 AEVDistAnRep.cxx:810
 AEVDistAnRep.cxx:811
 AEVDistAnRep.cxx:812
 AEVDistAnRep.cxx:813
 AEVDistAnRep.cxx:814
 AEVDistAnRep.cxx:815
 AEVDistAnRep.cxx:816
 AEVDistAnRep.cxx:817
 AEVDistAnRep.cxx:818
 AEVDistAnRep.cxx:819
 AEVDistAnRep.cxx:820
 AEVDistAnRep.cxx:821
 AEVDistAnRep.cxx:822
 AEVDistAnRep.cxx:823
 AEVDistAnRep.cxx:824
 AEVDistAnRep.cxx:825
 AEVDistAnRep.cxx:826
 AEVDistAnRep.cxx:827
 AEVDistAnRep.cxx:828
 AEVDistAnRep.cxx:829
 AEVDistAnRep.cxx:830
 AEVDistAnRep.cxx:831
 AEVDistAnRep.cxx:832
 AEVDistAnRep.cxx:833
 AEVDistAnRep.cxx:834
 AEVDistAnRep.cxx:835
 AEVDistAnRep.cxx:836
 AEVDistAnRep.cxx:837
 AEVDistAnRep.cxx:838
 AEVDistAnRep.cxx:839
 AEVDistAnRep.cxx:840
 AEVDistAnRep.cxx:841
 AEVDistAnRep.cxx:842
 AEVDistAnRep.cxx:843
 AEVDistAnRep.cxx:844
 AEVDistAnRep.cxx:845
 AEVDistAnRep.cxx:846
 AEVDistAnRep.cxx:847
 AEVDistAnRep.cxx:848
 AEVDistAnRep.cxx:849
 AEVDistAnRep.cxx:850
 AEVDistAnRep.cxx:851
 AEVDistAnRep.cxx:852
 AEVDistAnRep.cxx:853
 AEVDistAnRep.cxx:854
 AEVDistAnRep.cxx:855
 AEVDistAnRep.cxx:856
 AEVDistAnRep.cxx:857
 AEVDistAnRep.cxx:858
 AEVDistAnRep.cxx:859
 AEVDistAnRep.cxx:860
 AEVDistAnRep.cxx:861
 AEVDistAnRep.cxx:862
 AEVDistAnRep.cxx:863
 AEVDistAnRep.cxx:864
 AEVDistAnRep.cxx:865
 AEVDistAnRep.cxx:866
 AEVDistAnRep.cxx:867
 AEVDistAnRep.cxx:868
 AEVDistAnRep.cxx:869
 AEVDistAnRep.cxx:870
 AEVDistAnRep.cxx:871
 AEVDistAnRep.cxx:872
 AEVDistAnRep.cxx:873
 AEVDistAnRep.cxx:874
 AEVDistAnRep.cxx:875
 AEVDistAnRep.cxx:876
 AEVDistAnRep.cxx:877
 AEVDistAnRep.cxx:878
 AEVDistAnRep.cxx:879
 AEVDistAnRep.cxx:880
 AEVDistAnRep.cxx:881
 AEVDistAnRep.cxx:882
 AEVDistAnRep.cxx:883
 AEVDistAnRep.cxx:884
 AEVDistAnRep.cxx:885
 AEVDistAnRep.cxx:886
 AEVDistAnRep.cxx:887
 AEVDistAnRep.cxx:888
 AEVDistAnRep.cxx:889
 AEVDistAnRep.cxx:890
 AEVDistAnRep.cxx:891
 AEVDistAnRep.cxx:892
 AEVDistAnRep.cxx:893
 AEVDistAnRep.cxx:894
 AEVDistAnRep.cxx:895
 AEVDistAnRep.cxx:896
 AEVDistAnRep.cxx:897
 AEVDistAnRep.cxx:898
 AEVDistAnRep.cxx:899
 AEVDistAnRep.cxx:900
 AEVDistAnRep.cxx:901
 AEVDistAnRep.cxx:902
 AEVDistAnRep.cxx:903
 AEVDistAnRep.cxx:904
 AEVDistAnRep.cxx:905
 AEVDistAnRep.cxx:906
 AEVDistAnRep.cxx:907
 AEVDistAnRep.cxx:908
 AEVDistAnRep.cxx:909
 AEVDistAnRep.cxx:910
 AEVDistAnRep.cxx:911
 AEVDistAnRep.cxx:912
 AEVDistAnRep.cxx:913
 AEVDistAnRep.cxx:914
 AEVDistAnRep.cxx:915
 AEVDistAnRep.cxx:916
 AEVDistAnRep.cxx:917
 AEVDistAnRep.cxx:918
 AEVDistAnRep.cxx:919
 AEVDistAnRep.cxx:920
 AEVDistAnRep.cxx:921
 AEVDistAnRep.cxx:922
 AEVDistAnRep.cxx:923
 AEVDistAnRep.cxx:924
 AEVDistAnRep.cxx:925
 AEVDistAnRep.cxx:926
 AEVDistAnRep.cxx:927
 AEVDistAnRep.cxx:928
 AEVDistAnRep.cxx:929
 AEVDistAnRep.cxx:930
 AEVDistAnRep.cxx:931
 AEVDistAnRep.cxx:932
 AEVDistAnRep.cxx:933
 AEVDistAnRep.cxx:934
 AEVDistAnRep.cxx:935
 AEVDistAnRep.cxx:936
 AEVDistAnRep.cxx:937
 AEVDistAnRep.cxx:938
 AEVDistAnRep.cxx:939
 AEVDistAnRep.cxx:940
 AEVDistAnRep.cxx:941
 AEVDistAnRep.cxx:942
 AEVDistAnRep.cxx:943
 AEVDistAnRep.cxx:944
 AEVDistAnRep.cxx:945
 AEVDistAnRep.cxx:946
 AEVDistAnRep.cxx:947
 AEVDistAnRep.cxx:948
 AEVDistAnRep.cxx:949
 AEVDistAnRep.cxx:950
 AEVDistAnRep.cxx:951
 AEVDistAnRep.cxx:952
 AEVDistAnRep.cxx:953
 AEVDistAnRep.cxx:954
 AEVDistAnRep.cxx:955
 AEVDistAnRep.cxx:956
 AEVDistAnRep.cxx:957
 AEVDistAnRep.cxx:958
 AEVDistAnRep.cxx:959
 AEVDistAnRep.cxx:960
 AEVDistAnRep.cxx:961
 AEVDistAnRep.cxx:962
 AEVDistAnRep.cxx:963
 AEVDistAnRep.cxx:964
 AEVDistAnRep.cxx:965
 AEVDistAnRep.cxx:966
 AEVDistAnRep.cxx:967
 AEVDistAnRep.cxx:968
 AEVDistAnRep.cxx:969
 AEVDistAnRep.cxx:970
 AEVDistAnRep.cxx:971
 AEVDistAnRep.cxx:972
 AEVDistAnRep.cxx:973
 AEVDistAnRep.cxx:974
 AEVDistAnRep.cxx:975
 AEVDistAnRep.cxx:976
 AEVDistAnRep.cxx:977
 AEVDistAnRep.cxx:978
 AEVDistAnRep.cxx:979
 AEVDistAnRep.cxx:980
 AEVDistAnRep.cxx:981
 AEVDistAnRep.cxx:982
 AEVDistAnRep.cxx:983
 AEVDistAnRep.cxx:984
 AEVDistAnRep.cxx:985
 AEVDistAnRep.cxx:986
 AEVDistAnRep.cxx:987
 AEVDistAnRep.cxx:988
 AEVDistAnRep.cxx:989
 AEVDistAnRep.cxx:990
 AEVDistAnRep.cxx:991
 AEVDistAnRep.cxx:992
 AEVDistAnRep.cxx:993
 AEVDistAnRep.cxx:994
 AEVDistAnRep.cxx:995
 AEVDistAnRep.cxx:996
 AEVDistAnRep.cxx:997
 AEVDistAnRep.cxx:998
 AEVDistAnRep.cxx:999
 AEVDistAnRep.cxx:1000
 AEVDistAnRep.cxx:1001
 AEVDistAnRep.cxx:1002
 AEVDistAnRep.cxx:1003
 AEVDistAnRep.cxx:1004
 AEVDistAnRep.cxx:1005
 AEVDistAnRep.cxx:1006
 AEVDistAnRep.cxx:1007
 AEVDistAnRep.cxx:1008
 AEVDistAnRep.cxx:1009
 AEVDistAnRep.cxx:1010
 AEVDistAnRep.cxx:1011
 AEVDistAnRep.cxx:1012
 AEVDistAnRep.cxx:1013
 AEVDistAnRep.cxx:1014
 AEVDistAnRep.cxx:1015
 AEVDistAnRep.cxx:1016
 AEVDistAnRep.cxx:1017
 AEVDistAnRep.cxx:1018
 AEVDistAnRep.cxx:1019
 AEVDistAnRep.cxx:1020
 AEVDistAnRep.cxx:1021
 AEVDistAnRep.cxx:1022
 AEVDistAnRep.cxx:1023
 AEVDistAnRep.cxx:1024
 AEVDistAnRep.cxx:1025
 AEVDistAnRep.cxx:1026
 AEVDistAnRep.cxx:1027
 AEVDistAnRep.cxx:1028
 AEVDistAnRep.cxx:1029
 AEVDistAnRep.cxx:1030
 AEVDistAnRep.cxx:1031
 AEVDistAnRep.cxx:1032
 AEVDistAnRep.cxx:1033
 AEVDistAnRep.cxx:1034
 AEVDistAnRep.cxx:1035
 AEVDistAnRep.cxx:1036
 AEVDistAnRep.cxx:1037
 AEVDistAnRep.cxx:1038
 AEVDistAnRep.cxx:1039
 AEVDistAnRep.cxx:1040
 AEVDistAnRep.cxx:1041
 AEVDistAnRep.cxx:1042
 AEVDistAnRep.cxx:1043
 AEVDistAnRep.cxx:1044
 AEVDistAnRep.cxx:1045
 AEVDistAnRep.cxx:1046
 AEVDistAnRep.cxx:1047
 AEVDistAnRep.cxx:1048
 AEVDistAnRep.cxx:1049
 AEVDistAnRep.cxx:1050
 AEVDistAnRep.cxx:1051
 AEVDistAnRep.cxx:1052
 AEVDistAnRep.cxx:1053
 AEVDistAnRep.cxx:1054
 AEVDistAnRep.cxx:1055
 AEVDistAnRep.cxx:1056
 AEVDistAnRep.cxx:1057
 AEVDistAnRep.cxx:1058
 AEVDistAnRep.cxx:1059
 AEVDistAnRep.cxx:1060
 AEVDistAnRep.cxx:1061
 AEVDistAnRep.cxx:1062
 AEVDistAnRep.cxx:1063
 AEVDistAnRep.cxx:1064
 AEVDistAnRep.cxx:1065
 AEVDistAnRep.cxx:1066
 AEVDistAnRep.cxx:1067
 AEVDistAnRep.cxx:1068
 AEVDistAnRep.cxx:1069
 AEVDistAnRep.cxx:1070
 AEVDistAnRep.cxx:1071
 AEVDistAnRep.cxx:1072
 AEVDistAnRep.cxx:1073
 AEVDistAnRep.cxx:1074
 AEVDistAnRep.cxx:1075
 AEVDistAnRep.cxx:1076
 AEVDistAnRep.cxx:1077
 AEVDistAnRep.cxx:1078
 AEVDistAnRep.cxx:1079
 AEVDistAnRep.cxx:1080
 AEVDistAnRep.cxx:1081
 AEVDistAnRep.cxx:1082
 AEVDistAnRep.cxx:1083
 AEVDistAnRep.cxx:1084
 AEVDistAnRep.cxx:1085
 AEVDistAnRep.cxx:1086
 AEVDistAnRep.cxx:1087
 AEVDistAnRep.cxx:1088
 AEVDistAnRep.cxx:1089
 AEVDistAnRep.cxx:1090
 AEVDistAnRep.cxx:1091
 AEVDistAnRep.cxx:1092
 AEVDistAnRep.cxx:1093
 AEVDistAnRep.cxx:1094
 AEVDistAnRep.cxx:1095
 AEVDistAnRep.cxx:1096
 AEVDistAnRep.cxx:1097
 AEVDistAnRep.cxx:1098
 AEVDistAnRep.cxx:1099
 AEVDistAnRep.cxx:1100
 AEVDistAnRep.cxx:1101
 AEVDistAnRep.cxx:1102
 AEVDistAnRep.cxx:1103
 AEVDistAnRep.cxx:1104
 AEVDistAnRep.cxx:1105
 AEVDistAnRep.cxx:1106
 AEVDistAnRep.cxx:1107
 AEVDistAnRep.cxx:1108
 AEVDistAnRep.cxx:1109
 AEVDistAnRep.cxx:1110
 AEVDistAnRep.cxx:1111
 AEVDistAnRep.cxx:1112
 AEVDistAnRep.cxx:1113
 AEVDistAnRep.cxx:1114
 AEVDistAnRep.cxx:1115
 AEVDistAnRep.cxx:1116
 AEVDistAnRep.cxx:1117
 AEVDistAnRep.cxx:1118
 AEVDistAnRep.cxx:1119
 AEVDistAnRep.cxx:1120
 AEVDistAnRep.cxx:1121
 AEVDistAnRep.cxx:1122
 AEVDistAnRep.cxx:1123
 AEVDistAnRep.cxx:1124
 AEVDistAnRep.cxx:1125
 AEVDistAnRep.cxx:1126
 AEVDistAnRep.cxx:1127
 AEVDistAnRep.cxx:1128
 AEVDistAnRep.cxx:1129
 AEVDistAnRep.cxx:1130
 AEVDistAnRep.cxx:1131
 AEVDistAnRep.cxx:1132
 AEVDistAnRep.cxx:1133
 AEVDistAnRep.cxx:1134
 AEVDistAnRep.cxx:1135
 AEVDistAnRep.cxx:1136
 AEVDistAnRep.cxx:1137
 AEVDistAnRep.cxx:1138
 AEVDistAnRep.cxx:1139
 AEVDistAnRep.cxx:1140
 AEVDistAnRep.cxx:1141
 AEVDistAnRep.cxx:1142
 AEVDistAnRep.cxx:1143
 AEVDistAnRep.cxx:1144
 AEVDistAnRep.cxx:1145
 AEVDistAnRep.cxx:1146
 AEVDistAnRep.cxx:1147
 AEVDistAnRep.cxx:1148
 AEVDistAnRep.cxx:1149
 AEVDistAnRep.cxx:1150
 AEVDistAnRep.cxx:1151
 AEVDistAnRep.cxx:1152
 AEVDistAnRep.cxx:1153
 AEVDistAnRep.cxx:1154
 AEVDistAnRep.cxx:1155
 AEVDistAnRep.cxx:1156
 AEVDistAnRep.cxx:1157
 AEVDistAnRep.cxx:1158
 AEVDistAnRep.cxx:1159
 AEVDistAnRep.cxx:1160
 AEVDistAnRep.cxx:1161
 AEVDistAnRep.cxx:1162
 AEVDistAnRep.cxx:1163
 AEVDistAnRep.cxx:1164
 AEVDistAnRep.cxx:1165
 AEVDistAnRep.cxx:1166
 AEVDistAnRep.cxx:1167
 AEVDistAnRep.cxx:1168
 AEVDistAnRep.cxx:1169
 AEVDistAnRep.cxx:1170
 AEVDistAnRep.cxx:1171
 AEVDistAnRep.cxx:1172
 AEVDistAnRep.cxx:1173
 AEVDistAnRep.cxx:1174
 AEVDistAnRep.cxx:1175
 AEVDistAnRep.cxx:1176
 AEVDistAnRep.cxx:1177
 AEVDistAnRep.cxx:1178
 AEVDistAnRep.cxx:1179
 AEVDistAnRep.cxx:1180
 AEVDistAnRep.cxx:1181
 AEVDistAnRep.cxx:1182
 AEVDistAnRep.cxx:1183
 AEVDistAnRep.cxx:1184
 AEVDistAnRep.cxx:1185
 AEVDistAnRep.cxx:1186
 AEVDistAnRep.cxx:1187
 AEVDistAnRep.cxx:1188
 AEVDistAnRep.cxx:1189
 AEVDistAnRep.cxx:1190
 AEVDistAnRep.cxx:1191
 AEVDistAnRep.cxx:1192
 AEVDistAnRep.cxx:1193
 AEVDistAnRep.cxx:1194
 AEVDistAnRep.cxx:1195
 AEVDistAnRep.cxx:1196
 AEVDistAnRep.cxx:1197
 AEVDistAnRep.cxx:1198
 AEVDistAnRep.cxx:1199
 AEVDistAnRep.cxx:1200
 AEVDistAnRep.cxx:1201
 AEVDistAnRep.cxx:1202
 AEVDistAnRep.cxx:1203
 AEVDistAnRep.cxx:1204
 AEVDistAnRep.cxx:1205
 AEVDistAnRep.cxx:1206
 AEVDistAnRep.cxx:1207
 AEVDistAnRep.cxx:1208
 AEVDistAnRep.cxx:1209
 AEVDistAnRep.cxx:1210
 AEVDistAnRep.cxx:1211
 AEVDistAnRep.cxx:1212
 AEVDistAnRep.cxx:1213
 AEVDistAnRep.cxx:1214
 AEVDistAnRep.cxx:1215
 AEVDistAnRep.cxx:1216
 AEVDistAnRep.cxx:1217
 AEVDistAnRep.cxx:1218
 AEVDistAnRep.cxx:1219
 AEVDistAnRep.cxx:1220
 AEVDistAnRep.cxx:1221
 AEVDistAnRep.cxx:1222
 AEVDistAnRep.cxx:1223
 AEVDistAnRep.cxx:1224
 AEVDistAnRep.cxx:1225
 AEVDistAnRep.cxx:1226
 AEVDistAnRep.cxx:1227
 AEVDistAnRep.cxx:1228
 AEVDistAnRep.cxx:1229
 AEVDistAnRep.cxx:1230