anchor.diff:       procedure SaveData(const filename:string); overload;
        procedure SaveState(ini:TMemIniFile);
   
  -     procedure UpdateFromPanelString(data:string);     // nacteni informaci o HV z klienta
  +     procedure UpdateFromPanelString(data:string); // nacteni informaci o HV z klienta
   
        procedure ResetStats();
  -     function ExportStats():string;                    // export najetych statistik hnaciho vozidla
  -
  -     function PredejStanici(st:TOR):Integer;           // predej HV jine stanici
  +     function ExportStats():string;
  +
  +     function PredejStanici(st:TOR):Integer;
        function GetPanelLokString(mode:TLokStringMode = normal):string; // vrati HV ve standardnim formatu pro klienta
  -     procedure UpdateRuc(send_remove:boolean = true);  // aktualizuje informaci o rucnim rizeni do panelu (cerny text na bilem pozadi dole na panelu)
  -
  -     procedure RemoveRegulator(conn:TIDContext);       // smaze regulator -- klienta; je volano jen jako callback regulatoru!
  -     function IsReg(conn:TIdContext):boolean;          // je na tomto HV tento regulator ?
  +     procedure UpdateRuc(send_remove:boolean = true); // aktualizuje informaci o rucnim rizeni do panelu (cerny text na bilem pozadi dole na panelu)
  +
  +     procedure RemoveRegulator(conn:TIDContext); // smaze regulator -- klienta; je volano jen jako callback regulatoru!
  +     function IsReg(conn:TIdContext):boolean; // je na tomto HV tento regulator ?
        procedure UpdateAllRegulators();
        procedure ForceRemoveAllRegulators();
   
  
positive.code:      procedure TrakcePOMErr(Sender:TObject; data:Pointer);
  
     public
  
      index:Word; // index v seznamu vsech hnacich vozidel
      data:THVData;
      stav:THVStav;
      slot:TTrkLocoInfo;
      changed:boolean; // jestli se zmenil stav HV tak, ze je potraba aktualizaovat tabulku ve F_Main
  
       constructor Create(data_ini:TMemIniFile; state_ini:TMemIniFile; section:string); overload;
       constructor Create(adresa:Word; data:THVData; stav:THVStav); overload;
  
negative.code:   TLokStringMode = (normal = 0, full = 1);
  
    THVPomCV = record                                 // jeden zaznam POM se sklada z
      cv: Word;                                           // oznaceni CV a
      data: Byte;                                         // dat, ktera se maji do CV zapsat.
    end;
  
    THVFuncType = (permanent = 0, momentary = 1);
  
    THVData = record
     nazev: string;
     majitel: string;
     oznaceni: string;
     poznamka: string;
     trida: THVClass;
     maxRychlost: Cardinal;
  
     POMtake: TList<THVPomCV>; // seznam POM pri prevzeti do automatu
     POMrelease: TList<THVPomCV>; // seznam POM pri uvolneni do rucniho rizeni
  
     funcVyznam: array[0.._HV_FUNC_MAX] of string; // seznam popisu funkci hnaciho vozidla
     funcType: array[0.._HV_FUNC_MAX] of THVFuncType; // typy funkci hnaciho vozidla
    end;
  
    THVRegulator = record                             // jeden regulator -- klient -- je z pohledu hnaciho vozidla reprezentovan
     conn: TIdContext;                                   // fyzickym spojenim k tomu regulatoru -- klientu a
     root: boolean;                                      // tages, jestli je uzivatel za timto regulatorem root
    end;
  
    THVToken = record                                 // jeden token opravnujici prevzeti rizeni hnaciho vozidla
     timeout: TDateTime;                                 // cas expirace tokenu (obvykle 3 minuty od zadosti)
     token: string;                                      // samotny token
    end;
  
    THVStav = record
     stanovisteA: THVStanoviste;
  
     traveled_forward: Real; // in meters
     traveled_backward: Real; // in meters
     funkce: TFunkce; // stav funkci tak, jak je chceme; uklada se do souboru
     souprava: Integer; // index soupravy; -1 pokud neni na souprave
     stanice: TOR;
     regulators:TList<THVRegulator>; // seznam regulatoru -- klientu
     tokens: TList<THVToken>;
     ruc: Boolean;
     last_used: TDateTime;
     acquired: Boolean;
     stolen: Boolean; // is false if stolen
     pom: TPomStatus;
     trakceError: Boolean;
     acquiring: Boolean;
     updating: Boolean;
     lastUpdated: TTime;
    end;
  
    THV = class
     private
       fadresa: Word; // read-only!
       m_funcDict: TDictionary<string, Integer>; // function description to function number map
       acquiredOk: TCommandCallback; // also used for Update callback
       acquiredErr: TCommandCallback; // also used for Update callback
       releasedOk: TCommandCallback;
       pomOk: TCommandCallback;
       pomErr: TCommandCallback;
       pomTarget: TPomStatus;
  
       procedure LoadData(ini:TMemIniFile; section:string);
       procedure LoadState(ini:TMemIniFile; section:string);
  
       procedure SetRuc(state:boolean);
       procedure UpdateFuncDict();
       procedure SetSouprava(new:Integer);
  
  