Compare commits

..

No commits in common. "master" and "master" have entirely different histories.

43 changed files with 3165 additions and 2734 deletions

202
cli.py Executable file
View File

@ -0,0 +1,202 @@
#!/usr/bin/env python
import otime
import argparse
import datetime
from rich import print
from rich import inspect
from rich.console import Console
from rich.columns import Columns
from rich.table import Table
def print_runners(Runners):
table = Table(title="Runners")
table.add_column("Name", justify="right", style="cyan", no_wrap=True)
table.add_column("club", style="magenta")
table.add_column("card", style="red")
table.add_column("class", justify="right", style="green")
table.add_column("start_time", justify="right", style="green")
table.add_column("fork", justify="right", style="green")
table.add_column("Status", justify="right", style="blue")
for i in Runners:
try:
o_class = i.o_class.name
except:
o_class = ''
table.add_row(i.fullname(), i.club ,str(i.card), o_class, i.start_time, str(i.fork), i.status())
console = Console()
console.print(table)
def print_time(Runners):
table = Table(title="Time")
table.add_column("Name", justify="right", style="cyan", no_wrap=True)
table.add_column("club", style="magenta")
table.add_column("splits", style="red")
table.add_column("Check", style="green")
table.add_column("Time", justify="right", style="blue")
for i in Runners:
try:
tottime = datetime.timedelta(seconds = i.totaltime())
except:
tottime = 0
table.add_row(i.fullname(), i.o_class.name, str(i.splits), str(i.check_codes()), str(tottime))
console = Console()
console.print(table)
def print_class_result(runners, o_class):
table = Table(title=o_class.name)
table.add_column("Pos", style="red", no_wrap=True)
table.add_column("Name", justify="right", style="cyan", no_wrap=True)
table.add_column("Club", style="magenta")
table.add_column("Time", justify="right", style="blue")
pos = 0
if o_class:
runners = otime.get_runners_in_class(runners, o_class)
runners_ok = []
runners_dsq = []
for n in runners:
if n.status() == 'OK':
runners_ok.append(n)
elif n.status() == 'Disqualified':
runners_dsq.append(n)
runners_ok.sort(key=lambda x: x.totaltime())
for i in runners_ok:
#if i.status() == 'OK':
pos += 1
table.add_row(str(pos)+'.',i.fullname(), i.club, str(datetime.timedelta(seconds=i.totaltime())))
for i in runners_dsq:
table.add_row('Dsq',i.fullname(), i.club, '')
console = Console()
console.print(table)
def print_class_splits(runners, o_class):
table = Table(title=o_class.name)
table.add_column("Pos", style="red", no_wrap=True)
table.add_column("Name", justify="right", style="cyan", no_wrap=True)
table.add_column("club", style="magenta")
if o_class:
for i in o_class.course.codes:
table.add_column(str(i))
runners = otime.get_runners_in_class(runners, o_class)
runners_ok = []
runners_dsq = []
for n in runners:
if n.status() == 'OK':
runners_ok.append(n)
elif n.status() == 'Disqualified':
runners_dsq.append(n)
runners_ok.sort(key=lambda x: x.totaltime())
pos = 0
for i in runners_ok:
splits = i.res_splits()
pos += 1
list_string = map(lambda x:str(datetime.timedelta(seconds=x)), splits)
table.add_row(str(pos)+'.', i.fullname(), i.club, *list_string)
for i in runners_dsq:
splits = i.res_splits()
list_string = map(lambda x:str(datetime.timedelta(seconds=x)), splits)
table.add_row('Dsq', i.fullname(), i.club, *list_string)
console = Console()
console.print(table)
def print_o_classes(class_list):
table = Table(title="Classes")
table.add_column("Class", justify="right", style="cyan", no_wrap=True)
table.add_column("Course", style="magenta")
table.add_column("Controls", justify="right", style="green")
for i in class_list:
table.add_row(i.name, i.course.name , str(i.course.codes))
console = Console()
console.print(table)
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--debug',
action='store_true',
help='Print debug info'
)
subparsers = parser.add_subparsers(dest='command')
show_runners = subparsers.add_parser('show_runners', help='show a table of runners')
show_runners.add_argument('--ttcnf', required=True, help='ttime configuration file')
show_runners.add_argument('--ttdb', required=True, help='ttime database file')
show_runners.add_argument('--mtr', required=True, help='mtr csv file')
show_runner = subparsers.add_parser('show_runner', help='show a table of runners')
show_runner.add_argument('--ttcnf', required=True, help='ttime configuration file')
show_runner.add_argument('--ttdb', required=True, help='ttime database file')
show_runner.add_argument('--mtr', required=True, help='mtr csv file')
show_runner.add_argument('--runner', required=True, help='Which runner to print')
show_runners = subparsers.add_parser('show_result', help='show a table of runners')
show_runners.add_argument('--ttcnf', required=True, help='ttime configuration file')
show_runners.add_argument('--ttdb', required=True, help='ttime database file')
show_runners.add_argument('--mtr', required=True, help='mtr csv file')
show_runners.add_argument('--class', dest='o_class_str', help='Which class to show. Prints all classes if not set')
show_runners.add_argument('--splits', action='store_true', help='Shows split times')
show_classes = subparsers.add_parser('show_classes', help='show a table of classes')
show_classes.add_argument('--ttcnf', required=True, help='ttime configuration file')
create_xml = subparsers.add_parser('create_xml', help='Create xml result file')
create_xml.add_argument('--ttcnf', required=True, help='ttime configuration file')
create_xml.add_argument('--ttdb', required=True, help='ttime database file')
create_xml.add_argument('--mtr', required=True, help='mtr csv file')
create_xml.add_argument('--file', required=True, help='Filename for result file')
args = parser.parse_args()
if args.command == 'show_runners':
event = otime.Event(0, 'NoName')
event.import_ttime_cnf(open(args.ttcnf, encoding='latin-1'))
event.import_ttime_db(open(args.ttdb, encoding='latin-1'))
event.import_mtr_file(open(args.mtr, encoding='latin-1'))
event.match_runners_cards()
print_runners(event.runners)
elif args.command == 'show_runner':
event = otime.Event(0, 'NoName')
event.import_ttime_cnf(open(args.ttcnf, encoding='latin-1'))
event.import_ttime_db(open(args.ttdb, encoding='latin-1'))
event.import_mtr_file(open(args.mtr, encoding='latin-1'))
event.match_runners_cards()
for n in event.runners:
if args.runner == n.fullname():
inspect(n)
break
else:
print('Runner not found. Use full name.')
elif args.command == 'show_result':
event = otime.Event(0, 'NoName')
event.import_ttime_cnf(open(args.ttcnf, encoding='latin-1'))
event.import_ttime_db(open(args.ttdb, encoding='latin-1'))
event.import_mtr_file(open(args.mtr, encoding='latin-1'))
event.match_runners_cards()
for n in event.o_classes:
if args.o_class_str == n.name:
sel_classes = [n]
break
else:
sel_classes = event.o_classes
for o_class in sel_classes:
if args.splits:
print_class_splits(event.runners, o_class)
else:
print_class_result(event.runners, o_class)
elif args.command == 'show_classes':
event = otime.Event(0, 'NoName')
event.import_ttime_cnf(open(args.ttcnf, encoding='latin-1'))
print_o_classes(event.o_classes)
elif args.command == 'create_xml':
event = otime.Event(0, 'NoName')
event.import_ttime_cnf(open(args.ttcnf, encoding='latin-1'))
event.import_ttime_db(open(args.ttdb, encoding='latin-1'))
event.import_mtr_file(open(args.mtr, encoding='latin-1'))
event.match_runners_cards()
event.get_xml_res().write(args.file)
if __name__ == "__main__":
main()

8
config.py Normal file
View File

@ -0,0 +1,8 @@
config = {
'event_name': 'KOK 2-dagers testing',
'port': '/dev/pts/2',
'cnf_file': 'k2ds/tt.cnf',
'db_file': 'k2ds/db.csv',
'xml_res_file': 'Resultater.xml',
'otime_file': 'test.otime'
}

21
dev.py Normal file
View File

@ -0,0 +1,21 @@
import otime
import mtr
from rich import print
from rich import inspect
from rich.console import Console
from rich.columns import Columns
from rich.table import Table
if __name__ == "__main__":
event = otime.Event(0, 'testevent')
event.import_xml_entries('k2ds/entries.xml')
event.import_mtr_file(open('k2ds/mtr.txt', 'r'))
event.match_all()
for runner in event.runners:
print(runner.fullname(), runner.fee.name)
with open('test.otime', 'w') as f:
f.write(event.create_json_file())
event.create_invoices('test.pdf')

179
event_mgr.py Normal file
View File

@ -0,0 +1,179 @@
#!/usr/bin/env python
import otime
from config import config
import datetime
import os
from time import sleep
import serial
import pickle
import argparse
from difflib import Differ
from rich import print
from rich import inspect
from rich.console import Console
from rich.columns import Columns
from rich.table import Table
from rich.panel import Panel
from rich.console import Group
def save(obj):
f = open(config['otime_file'], "wb")
pickle.dump(obj,f)
f.close()
def start_parse():
parser = argparse.ArgumentParser(description='Event manager')
subparsers = parser.add_subparsers(dest='command')
open_event = subparsers.add_parser('continue', help='Open pickle')
open_event.add_argument('--file', help='.otime file')
args = parser.parse_args()
if args.command == 'continue':
print('Later ' + args.file)
else:
print('Starter fra scratch')
start_event()
def start_event():
global event
event = otime.Event(0, config['event_name'])
event.import_ttime_cnf(config['cnf_file'])
event.import_ttime_db(config['db_file'])
save(event)
global db_file
global db_file_u
db_file = open(config['db_file'], 'r', encoding='latin_1').read().splitlines()
def load_event(ot_file):
global event
f = open(ot_file, "r")
event = pickle.load(f)
f.close()
global db_file
global db_file_u
db_file = open(config['db_file'], 'r', encoding='latin_1').read().splitlines()
def assign_card_r_to_runner(runners, card_r):
for n in runners:
if n.card == card_r.card:
n.card_r = card_r
print(runner_info(n))
break
else:
cont = f'Brikke ikke registrert på noen løper\nId: {card_r.card}\nPoster: {card_r.controls}'
panel = Panel.fit(cont, title=str(card_r.card), border_style='white')
print(panel)
def runner_info(runner):
time = str(datetime.timedelta(seconds=runner.totaltime()))
if runner.status() == 'Disqualified':
dsqp = Panel.fit(f'Løype: {runner.o_class.course.codes}\nRegistrert: {runner.card_r.controls}', border_style='red')
cont = Group(f'Status: {runner.status()}',dsqp)
panel = Panel.fit(cont, title=runner.fullname(), border_style='red')
elif runner.status() == 'OK':
cont = f'Status: {runner.status()}\nTid: {time}'
panel = Panel.fit(cont, title=runner.fullname(), border_style='green')
elif runner.status() == 'Active':
cont = ''
panel = Panel.fit(cont, title=runner.fullname())
return panel
def read_db_changes():
global event
global db_file
global db_file_u
print('DB file changed')
db_file_u = open(config['db_file'], 'r', encoding='latin_1').read().splitlines()
d = Differ()
result = list(d.compare(db_file, db_file_u))
db_file = db_file_u
added_raw = []
removed_raw = []
added = []
removed = []
changed = []
for line in result:
if line[:1] == '+':
clean = str(line).replace('+ ', '').split(';')
runner = otime.Runner.from_string(clean, event.o_classes)
if runner.first != None:
added_raw.append(runner)
elif line[:1] == '-':
clean = str(line).replace('- ', '').split(';')
runner = otime.Runner.from_string(clean, event.o_classes)
if runner.first != None:
removed_raw.append(runner)
for plus in added_raw:
for index, minus in enumerate(removed_raw):
if plus.id == minus.id:
changed.append(plus)
removed_raw[index] = plus
break
added = [x for x in added_raw if x not in changed]
removed = [x for x in removed_raw if x not in changed]
#print(len(added_raw),len(removed_raw))
#print(len(added),len(removed),len(changed))
event.runners.extend(added)
for n in added:
print(f'[green]Added: {n.fullname()}, {n.o_class.name}, {n.card}[green]')
if n.status != 'Active':
print(runner_info(n))
for r in removed:
for n in event.runners:
if n.id == r.id:
print(f'[red]Removed: {n.fullname()}, {n.o_class.name}, {n.card}')
event.runners.remove(n)
for change in changed:
for i, n in enumerate(event.runners):
if n.id == runner.id:
event.runners[i] = runner
print(f'[blue]Changed: {runner.fullname()}, {runner.o_class.name}, {runner.card}')
if n.status != 'Active':
print(runner_info(n))
event.match_runners_cards()
event.get_xml_res().write(config['xml_res_file'])
def read_mtr(mtr):
global event
if mtr.in_waiting > 0:
mtr.read_until(expected=b'\xFF\xFF\xFF\xFF')
size = mtr.read(size=1)
if size == b'\xe6':
meat = mtr.read(229)
full = b'\xFF\xFF\xFF\xFF' + size + meat
card_r = otime.CardDump.from_mtr_bytes(full)
event.card_dumps.append(card_r)
assign_card_r_to_runner(event.runners, card_r)
elif size == b'\x37':
meat = mtr.read(55)
status = mtrreader.MtrStatusMessage(meat)
inspect(status)
print(status.year(),status.month(),status.day(),status.hours(),status.minutes())
event.get_xml_res().write(config['xml_res_file'])
def main():
global event
global db_file
global db_file_u
mtr = serial.Serial(port=config['port'], baudrate=9600, timeout=40)
db_file_date = os.path.getctime(config['db_file'])
while True:
if db_file_date != os.path.getctime(config['db_file']):
db_file_date = os.path.getctime(config['db_file'])
read_db_changes()
read_mtr(mtr)
sleep(0.1)
db_file_u = None
if __name__ == "__main__":
start_parse()
main()

135
k2ds/db.csv Executable file
View File

@ -0,0 +1,135 @@
5776;X;Helmersen, Ragnhild Mathea;D17AL;Fet OL;A,16201,3,71,5776,W,0.026087,U,10:30:00;201888
12568;X;Johnsen, Mina Akiko;D17AL;Sturla, IF;A,16201,5,133,12568,W,0.061083,U,10:32:00;212043
21451;X;Hvenekilde, Tale Nordby;D17AL;Oppsal Orientering;A,16201,3,268,21451,W,0.093699,U,10:34:00;506980
38537;X;Solli, Ida Olea;D17AL;Mo OK;A,16201,10,222,38537,W,0.101712,U,10:36:00;212966
14408;X;Sebjørnsen, Heidi Kristina;D17AL;Fossum IF;A,16201,3,80,14408,W,0.158452,U,10:38:00;515039
16422;X;Klausen, Ylva;D17 AK;Sturla, IF;A,16201,5,133,16422,W,0.207650,U,10:40:00;519429
25647;;Scheele, Oda;D17AL;Nydalens SK;A,16201,3,245,25647,W,0.208781,U,10:42:00;515044
25812;;Tumelionis, Gunde;D17AL;Fossum IF;A,16201,3,80,25812,W,0.274077,U,10:44:00;228473
14340;X;Wik, Maria Strømdal;D17AL;Freidig;A,16201,15,320,14340,W,0.306082,U,10:46:00;508554
21484;X;Mosland, Ingeborg Roll;D17AL;Oppsal Orientering;A,16201,3,268,21484,W,0.326798,U,10:48:00;212069
694;X;Kvarme, Marie;D17 AK;Sturla, IF;A,16201,5,133,694,W,0.411518,U,10:50:00;507448
26686;X;Hunstad, Johanna Lovise;D17AL;Bodø og Omegn IF Orientering;A,16201,10,45,26686,W,0.418258,U,10:52:00;256285
2383;X;Kittilsen, Tora;D17AL;Freidig;A,16201,15,320,2383,W,0.428461,U,10:54:00;511855
4658;X;Jacobsen-Gaski, Anna;D17AL;Bardu IL;A,16201,17,35,4658,W,0.443662,U,10:56:00;504136
31395;X;Scheele, Marie;D17AL;Nydalens SK;A,16201,3,245,31395,W,0.504686,U,10:58:00;515045
16585;X;Eisvang, Frida Hovgaard;D17AL;OK Moss;A,16201,20,252,16585,W,0.544919,U,11:00:00;513398
35485;X;Skalstad, Ragnhild;D17 AK;Sturla, IF;A,16201,5,133,35485,W,0.265811,U,11:00:00;253296
12611;;Nomeland, Trygve Børte;H17AL;Kristiansand OK;A,16201,4,189,12611,W,0.086410,U,12:00:00;512445
5451;X;Nygårdseter, Sten Åge;H55;Vegårshei IL;A,16201,4,371,5451,W,0.030191,U,11:01:00;206436
2885;X;Dalsøren, Stig;H45;Kristiansand OK;A,16201,4,189,2885,W,0.332001,U,11:02:00;229985
5996;X;Wiklund, Inga Skaarer;D17AL;Nydalens SK;A,16201,3,245,5996,W,0.553106,U,11:02:00;511747
7408;X;Bjorvand, Siri;D55;Birkenes IL;A,16201,4,40,7408,W,0.117037,U,11:03:00;511473
1930;X;Bråten, Arnhild U.;D45;Vegårshei IL;A,16201,4,371,1930,W,0.773981,U,11:04:00;507023
1474;X;Storhov, Mathea Spets;D17AL;Freidig;A,16201,15,320,1474,W,0.572619,U,11:04:00;511410
914;X;Haugskott, Sigrid;D17 AK;OL Trollelg;A,16201,15,262,914,W,0.713275,U,11:05:00;512805
3595;X;Myrland, Jørn;H55;Notodden OL;A,16201,19,243,3595,W,0.044007,U,11:05:00;517487
820;;Stormoen, Håvar Birkeland;H17AL;Kristiansand OK;A,16201,4,189,820,W,0.095024,U,11:05:00;504431
30033;X;Isnes Tyse, Oda;D17AL;Eiker OL;A,16201,5,64,30033,W,0.582367,U,11:06:00;514702
16632;X;Wiig, Svein Erik;H45;Søgne og Songdalen OK;A,16201,4,341,16632,W,0.351271,U,11:06:00;216713
1893;X;Nygårdseter, Emma Smeland;D55;Vegårshei IL;A,16201,4,371,1893,W,0.162069,U,11:07:00;206435
8029;X;Sæstad, Reidar;H65;Kristiansand OK;A,16201,4,189,8029,W,0.115957,U,11:07:00;257393
31018;X;Hott, Kasper;H13-14;Kristiansand OK;A,16201,4,189,31018,W,0.262271,U,11:08:00;213724
3510;X;Nissen, Solveig Louise;D17AL;Freidig;A,16201,15,320,3510,W,0.681690,U,11:08:00;511332
156;X;Bråten, Geir;H55;Vegårshei IL;A,16201,4,371,156,W,0.290594,U,11:09:00;245669
3104;X;Danielsen, Vegard;H17AL;Kristiansand OK;A,16201,4,189,3104,W,0.277210,U,11:09:00;509049
2735;X;Helland-Hansen, Vida;D17 AK;Tyrving IL;A,16201,3,163,2735,W,0.828157,U,11:10:00;511344
13271;X;Tellesbø, Janna Sofie;D17AL;Østmarka OK;A,16201,3,388,13271,W,0.694913,U,11:10:00;516878
17763;X;Flaa, Sigmund Javenes;H15-16;Birkenes IL;A,16201,4,40,17763,W,0.381759,U,11:11:00;255325
21539;X;Raaen, Trine Marit Justad;D55;Lierbygda OL;A,16201,5,201,21539,W,0.267405,U,11:11:00;506935
6920;X;Sørensen, Kjell Walter;H65;IK Grane Arendal Orientering;A,16201,4,135,6920,W,0.121509,U,11:11:00;503611
9301;X;White, Astrid;D17AL;Søgne og Songdalen OK;A,16201,4,341,9301,W,0.698835,U,11:12:00;510279
1400;X;Gjelsten, Ståle;H17AL;Kristiansand OK;A,16201,4,189,1400,W,0.350956,U,11:13:00;506629
6154;X;Zeiner-Gundersen, Richard;H55;Lierbygda OL;A,16201,5,201,6154,W,0.299488,U,11:13:00;507044
25664;X;Johannessen, Nils Egil;H75;IL Høvdingen;A,16201,4,145,25664,W,0.493419,U,11:14:00;507767
20657;X;Lunde, Magnus Hennig;H11-12;OK Sør;A,16201,4,257,20657,W,0.843827,U,11:14:00;203484
37419;;Nygård Thorseng, Elise;D17AL;Fossum IF;A,16201,3,80,37419,W,0.726727,U,11:14:00;213111
6345;X;Christiansen, Marianne Fruseth;D55;OL Tønsberg og omegn;A,16201,19,264,6345,W,0.414680,U,11:15:00;181863
22630;X;Johannessen, Fabian;H15-16;Kristiansand OK;A,16201,4,189,22630,W,0.755650,U,11:15:00;506791
17015;X;Leiren, Malin Nordgård;D17 AK;Byåsen IL;A,16201,15,51,17015,W,0.949384,U,11:15:00;212099
6896;X;Simonsen, Øyvin;H65;IL Imås;A,16201,4,148,6896,W,0.188689,U,11:15:00;504631
21239;X;Hole, Anja;D17AL;Førde IL;A,16201,14,87,21239,W,0.744655,U,11:16:00;512427
7536;;Myhre, Roar;H45;Kristiansand OK;A,16201,4,189,7536,W,0.757031,U,11:16:00;237895
5306;X;Christiansen, Tor Ivar;H55;OL Tønsberg og omegn;A,16201,19,264,5306,W,0.618160,U,11:17:00;511369
14996;X;Håland, Kjell Arne;H17AL;OK Sør;A,16201,4,257,14996,W,0.407345,U,11:17:00;227057
33765;X;Kjeldsen, Hedda;D17 AK;Sturla, IF;A,16201,5,133,33765,W,0.762553,U,11:18:00;500401
1189;X;Revhaug, Helge;H75;Ringerike OL;A,16201,5,285,1189,W,0.500018,U,11:23:00;510674
6554;X;Sætran, Bjørn Idar;H45;IF Trauma;A,16201,4,134,6554,W,0.977432,U,11:18:00;216677
34936;X;Helgemo, Johan;H9-10;Kristiansand OK;A,16201,4,189,34936,W,0.589151,U,11:19:00;247982
6333;X;Moe, Dag;H65;Kristiansand OK;A,16201,4,189,6333,W,0.330405,U,11:19:00;184578
2317;X;Wiig, Eli Marie;D55;Porsgrunn OL;A,16201,19,278,2317,W,0.809467,U,11:19:00;241874
25555;X;Lind-Larsen, Erika;D17AL;OK Moss;A,16201,20,252,25555,W,0.771927,U,11:20:00;513390
7740;X;Lunde, Hege Hennig;D35;OK Sør;A,16201,4,257,7740,W,0.163543,U,11:20:00;226945
2340;X;Håversen, Håkon;H55;IK Grane Arendal Orientering;A,16201,4,135,2340,W,0.731708,U,11:21:00;258681
231;X;Scheie, Stein-Erik;H17AL;OK Sør;A,16201,4,257,231,W,0.411591,U,11:21:00;204755
8030;X;Bredland, Floke;H75;Søgne og Songdalen OK;A,16201,4,341,8030,W,0.647924,U,11:22:00;239482
17399;X;Høyer, Tuva;D17AL;Fossum IF;A,16201,3,80,17399,W,0.783538,U,11:22:00;225161
6907;X;Jørgensen, Magne Reier;H65;Kristiansand OK;A,16201,4,189,6907,W,0.561063,U,11:23:00;255211
4135;X;Taksdal, Anna;D17AL;Ganddal IL;A,16201,13,88,4135,W,0.795444,U,11:24:00;508199
37242;X;van der Eynden, Oda Lohne;D35;Søgne og Songdalen OK;A,16201,4,341,37242,W,0.986033,U,11:24:00;401024
2220;X;Lamark, Øyvind;H17AL;Ganddal IL;A,16201,13,88,2220,W,0.649161,U,11:25:00;509450
5361;X;Løe, Petter;H55;Notodden OL;A,16201,19,243,5361,W,0.941176,U,11:25:00;511451
384;X;Stormoen, Åsulv Birkeland;H35;Birkenes IL;A,16201,4,40,384,W,0.638565,U,11:25:00;231504
35100;X;Böhm, Ulrik Mascali;H17 AK;Kristiansand OK;A,16201,4,189,35100,W,0.999467,U,11:26:00;247654
2400;X;Götsch Iversen, Elisa;D17AL;IL BUL-Tromsø;A,16201,17,146,2400,W,0.806391,U,11:26:00;509544
507;X;Hansen, Svein Harald;H65;OK Silsand;A,16201,17,254,507,W,0.609192,U,11:27:00;506352
2222;X;Lamark, Ingrid;D17AL;Ganddal IL;A,16201,13,88,2222,W,0.827720,U,11:28:00;509447
28822;X;Hadland, Lars Audun;H55;Oddersjaa SSK;A,16201,4,248,28822,W,0.980565,U,11:29:00;212974
40278;X;Nilsen, Mathias William;H17AL;Kristiansand OK;A,16201,4,189,40278,W,0.659014,U,11:29:00;517508
16970;;Hagen, Kathinka Zahl;D17AL;Fossum IF;A,16201,3,80,16970,W,0.970029,U,11:30:00;512626
8437;X;Hansen, John;H65;Kristiansand OK;A,16201,4,189,8437,W,0.717891,U,11:31:00;208727
6933;X;Bredland, Else-Margrethe;D75;Søgne og Songdalen OK;A,16201,4,341,6933,W,0.341176,U,11:32:00;239378
13949;X;Torp, Selma Lothine Fridheim;D17AL;Sandnes IL (Rogaland);A,16201,13,303,13949,W,0.991020,U,11:32:00;212133
12637;X;Sundquist, Carl Tore;H45;Øyestad IF allianse;A,16201,4,393,12637,W,0.975060,U,11:33:00;246581
15220;X;Tørå, Glenn;H17AL;Kristiansand OK;A,16201,4,189,15220,W,0.735018,U,11:33:00;510996
6905;X;Haarr, Dagfinn;H65;Oddersjaa SSK;A,16201,4,248,6905,W,0.861087,U,11:35:00;238125
3040;X;Martens, Eirik Heddeland;H17AL;Kristiansand OK;A,16201,4,189,3040,W,0.920023,U,11:37:00;510877
18948;X;Aune, Stine;A-kort åpen;Nidarøst OK;A,16201,15,253,18948;213563
34179;X;Bøen, Sofie;N1- åpen;Kristiansand OK;A,16201,4,189,34179;517409
35061;X;Dalsøren, Fabian;N2 åpen 9-16;Kristiansand OK;A,16201,4,189,35061;247082
16351;;Eikedalen, Hans-Petter;A-lang åpen;Porsgrunn OL;A,16201,19,278,16351;249917
28601;X;Flaa, Mette Javenes;C åpen 17-;Birkenes IL;A,16201,4,40,28601;225005
24007;X;Flaa, Per Johan;C åpen 17-;Birkenes IL;A,16201,4,40,24007;203292
34953;X;Grøvan, Eirik Svarstad;N2 åpen 9-16;Kristiansand OK;A,16201,4,189,34953;247550
38962;X;Gunnes, Julia;N1- åpen;Kristiansand OK;A,16201,4,189,38962;255629
34937;X;Helgemo, Matilda;N1- åpen;Kristiansand OK;A,16201,4,189,34937;247435
41547;X;Henrik Fidjestad Andreasen;N2 åpen 9-16;OK Sør;A,0,0,257,0;227046
9919;X;Holo, Signe;A-kort åpen;Fossum IF;A,16201,3,80,9919;514902
39044;X;Holte tversland, Mia;N1- åpen;Kristiansand OK;A,16201,4,189,39044;
18662;X;Kalleson, Tina;A-kort åpen;Oppsal Orientering;A,16201,3,268,18662;513329
39139;X;Kjelsrud, Frida Wigstøl;N1- åpen;Kristiansand OK;A,16201,4,189,39139;247197
34787;X;Kuhnle, Vibeke Irgens;N1- åpen;Kristiansand OK;A,16201,4,189,34787;247180
14618;X;Nolte, Anna Aurora;A-kort åpen;Freidig;A,16201,15,320,14618;514841
41541;X;Nordhassel, Jenny Marie Dyrdahl;N1- åpen;Kristiansand OK;A,16201,4,189,41541;249911
25846;X;Nyberg-Hansen, Hedvig;A-kort åpen;Fossum IF;A,16201,3,80,25846;225566
4703;X;Samuelsen Skiri, Kaja;A-kort åpen;Bodø og Omegn IF Orientering;A,16201,10,45,4703;515181
34507;X;Stormoen, Brage Glende;N1- åpen;Birkenes IL;A,16201,4,40,34507;245548
3359;X;Sønsterudbråten, Pernille;A-kort åpen;Lillomarka OL;A,16201,3,203,3359;519493
9819;X;Veggan, Katrine Bjordal;A-kort åpen;Oppsal Orientering;A,16201,3,268,9819;517129
30301;X;Yuan, Boyan;A-lang åpen;Kristiansand OK;A,16201,4,189,30301;510994
1;X;Lamark, Trond;A-kort åpen;Ganddal IL;;509448
2;X;Graff Wiik, Marthe;A-kort åpen;Sturla, IF;;211867
3;X;Thortveit, Ståle;A-lang åpen;Søgne og Songdalen OK;;197885
4;X;Økstad, Siri;B åpen 17-;Oddersjaa SSK;;185940
5;X;Moe, Oddbjørg;B åpen 17-;Kristiansand OK;;173450
6;X;Alvestad, Stig;A-lang åpen;IK Grane Arendal Orientering;;517490
7;X;Dalsøren, Kaspian;N1- åpen;Kristiansand OK;;247062
8;X;Åmdal, Mari Fjørbu;B åpen 17-;Kristiansand OK;;515238
9;X;Ringot, Paul;B åpen 17-;Kristiansand OK;;518732
10;X;Mollestad, Andreas;N1- åpen;Kristiansand OK;;512524
11;X;Tversland, Mia Holte;N1- åpen;KOK;;249912
12;X;Ribe, Ane;B åpen 17-;Søgne og Songdalen OK;;510314
13;X;Nerland, Wilmer Ribe;N1- åpen;Søgne og Songdalen OK;;255744
14;X;Risdal, Johannes;N1- åpen;Søgne og Songdalen OK;;244910
15;X;Ribe, Wilhelm;C åpen 17-;Søgne og Songdalen OK;;249905
16;X;Johansen, Kai;A-lang åpen;Øyestad IF allianse;;251366
17;X;Moe, Jostein;A-lang åpen;Torridal;;226027
18;X;Damsgaard, Julia B.;N1- åpen;Hisøy OK;;193048
19;X;Damsgaard, Ingrid B.;N1- åpen;Hisøy OK;;233687
20;X;Damsgaard, Hanna B.;C åpen 17-;Hisøy OK;;223503
21;X;Neumann, Karoline;C åpen 17-;Kristiansand OK;;518331
22;X;Tortveit, Kristian;C åpen 17-;Kristiansand OK;;248227
23;X;Tortveit, Karoline;N1- åpen;Kristiansand OK;;249929
24;X;W. Fuglestad, Oliver;C åpen 17-;Kristiansand OK;;60730
25;X;W. Kjelsrud, Emil;N1- åpen;Kristiansand OK;;255638
26;X;Strøm, Leon;N1- åpen;Kristiansand OK;;249913
1 5776 X Helmersen, Ragnhild Mathea D17AL Fet OL A,16201,3,71,5776,W,0.026087,U,10:30:00 201888
2 12568 X Johnsen, Mina Akiko D17AL Sturla, IF A,16201,5,133,12568,W,0.061083,U,10:32:00 212043
3 21451 X Hvenekilde, Tale Nordby D17AL Oppsal Orientering A,16201,3,268,21451,W,0.093699,U,10:34:00 506980
4 38537 X Solli, Ida Olea D17AL Mo OK A,16201,10,222,38537,W,0.101712,U,10:36:00 212966
5 14408 X Sebjørnsen, Heidi Kristina D17AL Fossum IF A,16201,3,80,14408,W,0.158452,U,10:38:00 515039
6 16422 X Klausen, Ylva D17 AK Sturla, IF A,16201,5,133,16422,W,0.207650,U,10:40:00 519429
7 25647 Scheele, Oda D17AL Nydalens SK A,16201,3,245,25647,W,0.208781,U,10:42:00 515044
8 25812 Tumelionis, Gunde D17AL Fossum IF A,16201,3,80,25812,W,0.274077,U,10:44:00 228473
9 14340 X Wik, Maria Strømdal D17AL Freidig A,16201,15,320,14340,W,0.306082,U,10:46:00 508554
10 21484 X Mosland, Ingeborg Roll D17AL Oppsal Orientering A,16201,3,268,21484,W,0.326798,U,10:48:00 212069
11 694 X Kvarme, Marie D17 AK Sturla, IF A,16201,5,133,694,W,0.411518,U,10:50:00 507448
12 26686 X Hunstad, Johanna Lovise D17AL Bodø og Omegn IF Orientering A,16201,10,45,26686,W,0.418258,U,10:52:00 256285
13 2383 X Kittilsen, Tora D17AL Freidig A,16201,15,320,2383,W,0.428461,U,10:54:00 511855
14 4658 X Jacobsen-Gaski, Anna D17AL Bardu IL A,16201,17,35,4658,W,0.443662,U,10:56:00 504136
15 31395 X Scheele, Marie D17AL Nydalens SK A,16201,3,245,31395,W,0.504686,U,10:58:00 515045
16 16585 X Eisvang, Frida Hovgaard D17AL OK Moss A,16201,20,252,16585,W,0.544919,U,11:00:00 513398
17 35485 X Skalstad, Ragnhild D17 AK Sturla, IF A,16201,5,133,35485,W,0.265811,U,11:00:00 253296
18 12611 Nomeland, Trygve Børte H17AL Kristiansand OK A,16201,4,189,12611,W,0.086410,U,12:00:00 512445
19 5451 X Nygårdseter, Sten Åge H55 Vegårshei IL A,16201,4,371,5451,W,0.030191,U,11:01:00 206436
20 2885 X Dalsøren, Stig H45 Kristiansand OK A,16201,4,189,2885,W,0.332001,U,11:02:00 229985
21 5996 X Wiklund, Inga Skaarer D17AL Nydalens SK A,16201,3,245,5996,W,0.553106,U,11:02:00 511747
22 7408 X Bjorvand, Siri D55 Birkenes IL A,16201,4,40,7408,W,0.117037,U,11:03:00 511473
23 1930 X Bråten, Arnhild U. D45 Vegårshei IL A,16201,4,371,1930,W,0.773981,U,11:04:00 507023
24 1474 X Storhov, Mathea Spets D17AL Freidig A,16201,15,320,1474,W,0.572619,U,11:04:00 511410
25 914 X Haugskott, Sigrid D17 AK OL Trollelg A,16201,15,262,914,W,0.713275,U,11:05:00 512805
26 3595 X Myrland, Jørn H55 Notodden OL A,16201,19,243,3595,W,0.044007,U,11:05:00 517487
27 820 Stormoen, Håvar Birkeland H17AL Kristiansand OK A,16201,4,189,820,W,0.095024,U,11:05:00 504431
28 30033 X Isnes Tyse, Oda D17AL Eiker OL A,16201,5,64,30033,W,0.582367,U,11:06:00 514702
29 16632 X Wiig, Svein Erik H45 Søgne og Songdalen OK A,16201,4,341,16632,W,0.351271,U,11:06:00 216713
30 1893 X Nygårdseter, Emma Smeland D55 Vegårshei IL A,16201,4,371,1893,W,0.162069,U,11:07:00 206435
31 8029 X Sæstad, Reidar H65 Kristiansand OK A,16201,4,189,8029,W,0.115957,U,11:07:00 257393
32 31018 X Hott, Kasper H13-14 Kristiansand OK A,16201,4,189,31018,W,0.262271,U,11:08:00 213724
33 3510 X Nissen, Solveig Louise D17AL Freidig A,16201,15,320,3510,W,0.681690,U,11:08:00 511332
34 156 X Bråten, Geir H55 Vegårshei IL A,16201,4,371,156,W,0.290594,U,11:09:00 245669
35 3104 X Danielsen, Vegard H17AL Kristiansand OK A,16201,4,189,3104,W,0.277210,U,11:09:00 509049
36 2735 X Helland-Hansen, Vida D17 AK Tyrving IL A,16201,3,163,2735,W,0.828157,U,11:10:00 511344
37 13271 X Tellesbø, Janna Sofie D17AL Østmarka OK A,16201,3,388,13271,W,0.694913,U,11:10:00 516878
38 17763 X Flaa, Sigmund Javenes H15-16 Birkenes IL A,16201,4,40,17763,W,0.381759,U,11:11:00 255325
39 21539 X Raaen, Trine Marit Justad D55 Lierbygda OL A,16201,5,201,21539,W,0.267405,U,11:11:00 506935
40 6920 X Sørensen, Kjell Walter H65 IK Grane Arendal Orientering A,16201,4,135,6920,W,0.121509,U,11:11:00 503611
41 9301 X White, Astrid D17AL Søgne og Songdalen OK A,16201,4,341,9301,W,0.698835,U,11:12:00 510279
42 1400 X Gjelsten, Ståle H17AL Kristiansand OK A,16201,4,189,1400,W,0.350956,U,11:13:00 506629
43 6154 X Zeiner-Gundersen, Richard H55 Lierbygda OL A,16201,5,201,6154,W,0.299488,U,11:13:00 507044
44 25664 X Johannessen, Nils Egil H75 IL Høvdingen A,16201,4,145,25664,W,0.493419,U,11:14:00 507767
45 20657 X Lunde, Magnus Hennig H11-12 OK Sør A,16201,4,257,20657,W,0.843827,U,11:14:00 203484
46 37419 Nygård Thorseng, Elise D17AL Fossum IF A,16201,3,80,37419,W,0.726727,U,11:14:00 213111
47 6345 X Christiansen, Marianne Fruseth D55 OL Tønsberg og omegn A,16201,19,264,6345,W,0.414680,U,11:15:00 181863
48 22630 X Johannessen, Fabian H15-16 Kristiansand OK A,16201,4,189,22630,W,0.755650,U,11:15:00 506791
49 17015 X Leiren, Malin Nordgård D17 AK Byåsen IL A,16201,15,51,17015,W,0.949384,U,11:15:00 212099
50 6896 X Simonsen, Øyvin H65 IL Imås A,16201,4,148,6896,W,0.188689,U,11:15:00 504631
51 21239 X Hole, Anja D17AL Førde IL A,16201,14,87,21239,W,0.744655,U,11:16:00 512427
52 7536 Myhre, Roar H45 Kristiansand OK A,16201,4,189,7536,W,0.757031,U,11:16:00 237895
53 5306 X Christiansen, Tor Ivar H55 OL Tønsberg og omegn A,16201,19,264,5306,W,0.618160,U,11:17:00 511369
54 14996 X Håland, Kjell Arne H17AL OK Sør A,16201,4,257,14996,W,0.407345,U,11:17:00 227057
55 33765 X Kjeldsen, Hedda D17 AK Sturla, IF A,16201,5,133,33765,W,0.762553,U,11:18:00 500401
56 1189 X Revhaug, Helge H75 Ringerike OL A,16201,5,285,1189,W,0.500018,U,11:23:00 510674
57 6554 X Sætran, Bjørn Idar H45 IF Trauma A,16201,4,134,6554,W,0.977432,U,11:18:00 216677
58 34936 X Helgemo, Johan H9-10 Kristiansand OK A,16201,4,189,34936,W,0.589151,U,11:19:00 247982
59 6333 X Moe, Dag H65 Kristiansand OK A,16201,4,189,6333,W,0.330405,U,11:19:00 184578
60 2317 X Wiig, Eli Marie D55 Porsgrunn OL A,16201,19,278,2317,W,0.809467,U,11:19:00 241874
61 25555 X Lind-Larsen, Erika D17AL OK Moss A,16201,20,252,25555,W,0.771927,U,11:20:00 513390
62 7740 X Lunde, Hege Hennig D35 OK Sør A,16201,4,257,7740,W,0.163543,U,11:20:00 226945
63 2340 X Håversen, Håkon H55 IK Grane Arendal Orientering A,16201,4,135,2340,W,0.731708,U,11:21:00 258681
64 231 X Scheie, Stein-Erik H17AL OK Sør A,16201,4,257,231,W,0.411591,U,11:21:00 204755
65 8030 X Bredland, Floke H75 Søgne og Songdalen OK A,16201,4,341,8030,W,0.647924,U,11:22:00 239482
66 17399 X Høyer, Tuva D17AL Fossum IF A,16201,3,80,17399,W,0.783538,U,11:22:00 225161
67 6907 X Jørgensen, Magne Reier H65 Kristiansand OK A,16201,4,189,6907,W,0.561063,U,11:23:00 255211
68 4135 X Taksdal, Anna D17AL Ganddal IL A,16201,13,88,4135,W,0.795444,U,11:24:00 508199
69 37242 X van der Eynden, Oda Lohne D35 Søgne og Songdalen OK A,16201,4,341,37242,W,0.986033,U,11:24:00 401024
70 2220 X Lamark, Øyvind H17AL Ganddal IL A,16201,13,88,2220,W,0.649161,U,11:25:00 509450
71 5361 X Løe, Petter H55 Notodden OL A,16201,19,243,5361,W,0.941176,U,11:25:00 511451
72 384 X Stormoen, Åsulv Birkeland H35 Birkenes IL A,16201,4,40,384,W,0.638565,U,11:25:00 231504
73 35100 X Böhm, Ulrik Mascali H17 AK Kristiansand OK A,16201,4,189,35100,W,0.999467,U,11:26:00 247654
74 2400 X Götsch Iversen, Elisa D17AL IL BUL-Tromsø A,16201,17,146,2400,W,0.806391,U,11:26:00 509544
75 507 X Hansen, Svein Harald H65 OK Silsand A,16201,17,254,507,W,0.609192,U,11:27:00 506352
76 2222 X Lamark, Ingrid D17AL Ganddal IL A,16201,13,88,2222,W,0.827720,U,11:28:00 509447
77 28822 X Hadland, Lars Audun H55 Oddersjaa SSK A,16201,4,248,28822,W,0.980565,U,11:29:00 212974
78 40278 X Nilsen, Mathias William H17AL Kristiansand OK A,16201,4,189,40278,W,0.659014,U,11:29:00 517508
79 16970 Hagen, Kathinka Zahl D17AL Fossum IF A,16201,3,80,16970,W,0.970029,U,11:30:00 512626
80 8437 X Hansen, John H65 Kristiansand OK A,16201,4,189,8437,W,0.717891,U,11:31:00 208727
81 6933 X Bredland, Else-Margrethe D75 Søgne og Songdalen OK A,16201,4,341,6933,W,0.341176,U,11:32:00 239378
82 13949 X Torp, Selma Lothine Fridheim D17AL Sandnes IL (Rogaland) A,16201,13,303,13949,W,0.991020,U,11:32:00 212133
83 12637 X Sundquist, Carl Tore H45 Øyestad IF allianse A,16201,4,393,12637,W,0.975060,U,11:33:00 246581
84 15220 X Tørå, Glenn H17AL Kristiansand OK A,16201,4,189,15220,W,0.735018,U,11:33:00 510996
85 6905 X Haarr, Dagfinn H65 Oddersjaa SSK A,16201,4,248,6905,W,0.861087,U,11:35:00 238125
86 3040 X Martens, Eirik Heddeland H17AL Kristiansand OK A,16201,4,189,3040,W,0.920023,U,11:37:00 510877
87 18948 X Aune, Stine A-kort åpen Nidarøst OK A,16201,15,253,18948 213563
88 34179 X Bøen, Sofie N1- åpen Kristiansand OK A,16201,4,189,34179 517409
89 35061 X Dalsøren, Fabian N2 åpen 9-16 Kristiansand OK A,16201,4,189,35061 247082
90 16351 Eikedalen, Hans-Petter A-lang åpen Porsgrunn OL A,16201,19,278,16351 249917
91 28601 X Flaa, Mette Javenes C åpen 17- Birkenes IL A,16201,4,40,28601 225005
92 24007 X Flaa, Per Johan C åpen 17- Birkenes IL A,16201,4,40,24007 203292
93 34953 X Grøvan, Eirik Svarstad N2 åpen 9-16 Kristiansand OK A,16201,4,189,34953 247550
94 38962 X Gunnes, Julia N1- åpen Kristiansand OK A,16201,4,189,38962 255629
95 34937 X Helgemo, Matilda N1- åpen Kristiansand OK A,16201,4,189,34937 247435
96 41547 X Henrik Fidjestad Andreasen N2 åpen 9-16 OK Sør A,0,0,257,0 227046
97 9919 X Holo, Signe A-kort åpen Fossum IF A,16201,3,80,9919 514902
98 39044 X Holte tversland, Mia N1- åpen Kristiansand OK A,16201,4,189,39044
99 18662 X Kalleson, Tina A-kort åpen Oppsal Orientering A,16201,3,268,18662 513329
100 39139 X Kjelsrud, Frida Wigstøl N1- åpen Kristiansand OK A,16201,4,189,39139 247197
101 34787 X Kuhnle, Vibeke Irgens N1- åpen Kristiansand OK A,16201,4,189,34787 247180
102 14618 X Nolte, Anna Aurora A-kort åpen Freidig A,16201,15,320,14618 514841
103 41541 X Nordhassel, Jenny Marie Dyrdahl N1- åpen Kristiansand OK A,16201,4,189,41541 249911
104 25846 X Nyberg-Hansen, Hedvig A-kort åpen Fossum IF A,16201,3,80,25846 225566
105 4703 X Samuelsen Skiri, Kaja A-kort åpen Bodø og Omegn IF Orientering A,16201,10,45,4703 515181
106 34507 X Stormoen, Brage Glende N1- åpen Birkenes IL A,16201,4,40,34507 245548
107 3359 X Sønsterudbråten, Pernille A-kort åpen Lillomarka OL A,16201,3,203,3359 519493
108 9819 X Veggan, Katrine Bjordal A-kort åpen Oppsal Orientering A,16201,3,268,9819 517129
109 30301 X Yuan, Boyan A-lang åpen Kristiansand OK A,16201,4,189,30301 510994
110 1 X Lamark, Trond A-kort åpen Ganddal IL 509448
111 2 X Graff Wiik, Marthe A-kort åpen Sturla, IF 211867
112 3 X Thortveit, Ståle A-lang åpen Søgne og Songdalen OK 197885
113 4 X Økstad, Siri B åpen 17- Oddersjaa SSK 185940
114 5 X Moe, Oddbjørg B åpen 17- Kristiansand OK 173450
115 6 X Alvestad, Stig A-lang åpen IK Grane Arendal Orientering 517490
116 7 X Dalsøren, Kaspian N1- åpen Kristiansand OK 247062
117 8 X Åmdal, Mari Fjørbu B åpen 17- Kristiansand OK 515238
118 9 X Ringot, Paul B åpen 17- Kristiansand OK 518732
119 10 X Mollestad, Andreas N1- åpen Kristiansand OK 512524
120 11 X Tversland, Mia Holte N1- åpen KOK 249912
121 12 X Ribe, Ane B åpen 17- Søgne og Songdalen OK 510314
122 13 X Nerland, Wilmer Ribe N1- åpen Søgne og Songdalen OK 255744
123 14 X Risdal, Johannes N1- åpen Søgne og Songdalen OK 244910
124 15 X Ribe, Wilhelm C åpen 17- Søgne og Songdalen OK 249905
125 16 X Johansen, Kai A-lang åpen Øyestad IF allianse 251366
126 17 X Moe, Jostein A-lang åpen Torridal 226027
127 18 X Damsgaard, Julia B. N1- åpen Hisøy OK 193048
128 19 X Damsgaard, Ingrid B. N1- åpen Hisøy OK 233687
129 20 X Damsgaard, Hanna B. C åpen 17- Hisøy OK 223503
130 21 X Neumann, Karoline C åpen 17- Kristiansand OK 518331
131 22 X Tortveit, Kristian C åpen 17- Kristiansand OK 248227
132 23 X Tortveit, Karoline N1- åpen Kristiansand OK 249929
133 24 X W. Fuglestad, Oliver C åpen 17- Kristiansand OK 60730
134 25 X W. Kjelsrud, Emil N1- åpen Kristiansand OK 255638
135 26 X Strøm, Leon N1- åpen Kristiansand OK 249913

2
k2ds/entries.xml Normal file

File diff suppressed because one or more lines are too long

119
k2ds/mtr.txt Executable file
View File

@ -0,0 +1,119 @@
"M","0","14917","517409","27.03.22 11:04:39.000","27.03.22 11:04:37.000",517409,0000,0000,000,00000,071,00030,158,00148,032,00224,062,00295,157,00439,084,00501,064,00624,079,00731,063,00977,100,01028,249,01060,250,01077,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000001
"M","0","14917","514902","27.03.22 11:16:06.000","27.03.22 11:16:04.000",514902,0000,0000,000,00000,037,00519,100,01779,249,01857,250,01864,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000002
"M","0","14917","512524","27.03.22 11:27:49.000","27.03.22 11:27:47.000",512524,0000,0000,000,00000,071,00029,158,00130,032,00176,062,00243,157,00410,084,00493,064,00621,079,00787,063,01031,100,01177,249,01217,250,01229,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000003
"M","0","14917","193048","27.03.22 11:33:38.000","27.03.22 11:33:36.000",193048,0000,0000,000,00000,071,00014,158,00121,032,00155,062,00217,157,00373,084,00429,064,00552,079,00638,063,00835,100,00897,249,00929,250,00940,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000004
"M","0","14917","233687","27.03.22 11:33:43.000","27.03.22 11:33:41.000",233687,0000,0000,000,00000,071,00015,158,00118,032,00152,062,00214,157,00369,084,00427,064,00549,079,00636,063,00845,100,00896,249,00933,250,00944,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000005
"M","0","14917","513329","27.03.22 11:34:33.000","27.03.22 11:34:31.000",513329,0000,0000,000,00000,037,00297,151,00892,092,01323,106,01531,082,01695,161,02320,118,02778,080,03122,091,03486,085,03576,077,03676,100,03767,249,03804,250,03811,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000006
"M","0","14917","245548","27.03.22 11:38:18.000","27.03.22 11:38:17.000",245548,0000,0000,000,00000,071,00017,158,00102,032,00139,062,00185,157,00302,084,00372,064,00466,079,00548,063,00735,100,00798,249,00823,250,00832,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000007
"M","0","14917","247180","27.03.22 11:39:49.000","27.03.22 11:39:47.000",247180,0000,0000,000,00000,071,00018,158,00126,032,00168,062,00232,157,00369,084,00450,064,00570,079,00665,063,00903,100,00990,249,01039,250,01047,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000008
"M","0","14917","255638","27.03.22 11:42:49.000","27.03.22 11:42:48.000",255638,0000,0000,000,00000,071,00012,158,00163,032,00203,062,00273,157,00448,084,00538,064,00665,079,00795,063,01031,249,01161,250,01172,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000009
"M","0","14917","249913","27.03.22 11:42:55.000","27.03.22 11:42:53.000",249913,0000,0000,000,00000,071,00026,158,00172,032,00213,062,00280,157,00458,084,00545,064,00679,079,00808,063,01043,249,01164,250,01181,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000010
"M","0","14917","249912","27.03.22 11:47:36.000","27.03.22 11:47:34.000",249912,0000,0000,000,00000,071,00062,158,00194,032,00251,062,00346,157,00563,084,00669,064,00841,079,00987,063,01348,100,01424,249,01457,250,01468,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000011
"M","0","14917","247197","27.03.22 11:47:46.000","27.03.22 11:47:44.000",247197,0000,0000,000,00000,071,00052,158,00194,032,00252,062,00360,157,00571,084,00665,064,00841,079,00986,063,01348,100,01420,249,01458,250,01481,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000012
"M","0","14917","247435","27.03.22 11:47:59.000","27.03.22 11:47:57.000",247435,0000,0000,000,00000,071,00045,158,00202,032,00260,062,00358,157,00564,084,00677,064,00852,079,00997,063,01359,100,01432,249,01466,250,01496,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000013
"M","0","14917","206435","27.03.22 11:48:08.000","27.03.22 11:48:06.000",206435,0000,0000,000,00000,093,00344,096,00539,105,00690,055,00925,118,01407,059,01650,160,02106,085,02207,077,02313,100,02404,249,02434,250,02468,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000014
"M","0","14917","519429","27.03.22 11:49:09.000","27.03.22 11:49:07.000",519429,0000,0000,000,00000,037,00316,151,00975,092,01459,106,01667,082,01819,161,02374,118,02899,080,03456,091,03797,085,03919,077,04020,100,04116,249,04141,250,04147,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000015
"M","0","14917","507448","27.03.22 11:49:23.000","27.03.22 11:49:22.000",507448,0000,0000,000,00000,037,00301,151,00814,092,01215,106,01421,082,01584,161,02165,118,02657,080,02857,091,03209,085,03331,077,03411,100,03515,249,03546,250,03562,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000016
"M","0","14917","255629","27.03.22 11:49:53.000","27.03.22 11:49:51.000",255629,0000,0000,000,00000,071,00027,158,00149,032,00209,062,00264,157,00459,084,00551,064,00764,079,00932,063,01191,100,01304,249,01358,250,01365,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000017
"M","0","14917","249911","27.03.22 11:50:02.000","27.03.22 11:50:01.000",249911,0000,0000,000,00000,071,00059,158,00183,032,00221,062,00290,157,00483,084,00588,064,00808,079,00952,063,01200,100,01319,249,01366,250,01389,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000018
"M","0","14917","206436","27.03.22 11:50:10.000","27.03.22 11:50:08.000",206436,0000,0000,000,00000,037,00308,151,00731,092,01044,033,01390,118,02177,080,02406,091,02686,085,02754,077,02837,100,02913,249,02938,250,02948,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000019
"M","0","14917","229985","27.03.22 11:51:16.000","27.03.22 11:51:15.000",229985,0000,0000,000,00000,037,00260,151,00668,092,00947,106,01085,082,01205,161,01677,118,02157,080,02375,091,02627,085,02700,077,02780,100,02855,249,02879,250,02954,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000020
"M","0","14917","211867","27.03.22 11:53:39.000","27.03.22 11:53:37.000",211867,0000,0000,000,00000,151,01481,092,02032,106,02343,082,02489,161,03210,118,03668,080,03909,091,04375,100,04800,249,04832,250,04837,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000021
"M","0","14917","213724","27.03.22 11:54:11.000","27.03.22 11:54:09.000",213724,0000,0000,000,00000,093,00352,096,00531,105,00716,055,00971,118,01492,059,02048,160,02415,085,02551,077,02630,100,02741,249,02761,250,02769,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000022
"M","0","14917","511473","27.03.22 11:54:19.000","27.03.22 11:54:18.000",511473,0000,0000,000,00000,093,00431,096,00624,105,00784,055,01110,118,01677,059,01994,160,02508,085,02644,052,02880,100,03028,249,03067,250,03077,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000023
"M","0","14917","184578","27.03.22 11:55:51.000","27.03.22 11:55:27.000",184578,0000,0000,250,00057,093,00318,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000024
"M","0","14917","503611","27.03.22 11:55:52.000","27.03.22 11:55:40.000",503611,0000,0000,000,00000,093,00379,096,00521,105,00677,055,00937,118,01489,059,01861,160,02247,085,02374,077,02460,100,02581,249,02619,250,02679,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000025
"M","0","14917","257393","27.03.22 11:56:04.000","27.03.22 11:56:02.000",257393,0000,0000,000,00000,093,00403,096,00566,105,00745,055,01033,118,01572,059,02105,160,02481,085,02617,077,02703,100,02824,249,02865,250,02941,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000026
"M","0","14917","249929","27.03.22 11:57:56.000","27.03.22 11:57:54.000",249929,0000,0000,000,00000,071,00044,158,00180,032,00252,062,00345,157,00578,084,00710,064,00916,079,01101,063,01709,100,01771,249,01835,250,01844,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000027
"M","0","14917","247062","27.03.22 11:58:08.000","27.03.22 11:58:07.000",247062,0000,0000,000,00000,071,00042,158,00178,032,00252,062,00346,157,00566,084,00701,064,00916,079,01101,063,01702,100,01764,249,01836,250,01853,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000028
"M","0","14917","212043","27.03.22 11:58:16.000","27.03.22 11:58:14.000",212043,0000,0000,000,00000,037,00331,151,00842,092,01288,081,01789,087,02070,103,02616,106,02797,082,02934,161,03493,118,04016,080,04207,158,04653,091,04852,054,04907,085,04982,077,05047,100,05136,249,05161,250,05173,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000029
"M","0","14917","512805","27.03.22 11:58:21.000","27.03.22 11:58:20.000",512805,0000,0000,000,00000,037,00262,151,00749,092,01135,106,01369,082,01504,161,02005,118,02409,080,02599,091,02889,085,03004,077,03076,100,03161,249,03186,250,03200,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000030
"M","0","14917","504631","27.03.22 11:58:38.000","27.03.22 11:58:37.000",504631,0000,0000,000,00000,093,00391,096,00536,105,00736,055,00999,118,01470,059,01761,160,02133,085,02271,052,02423,100,02566,249,02603,250,02616,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000031
"M","0","14917","515039","27.03.22 11:59:50.000","27.03.22 11:59:48.000",515039,0000,0000,000,00000,037,00294,151,00802,092,01230,081,01764,087,02070,103,02616,106,02782,082,02919,161,03451,118,03875,080,04062,158,04398,091,04581,054,04633,085,04720,077,04796,100,04878,249,04901,250,04907,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000032
"M","0","14917","212966","27.03.22 12:00:18.000","27.03.22 12:00:16.000",212966,0000,0000,000,00000,037,00432,151,00946,092,01340,081,01874,087,02195,103,02763,106,02911,082,03043,161,03568,118,03990,080,04188,158,04514,091,04693,054,04742,085,04868,077,04942,100,05025,249,05050,250,05056,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000033
"M","0","14917","201888","27.03.22 12:00:37.000","27.03.22 12:00:35.000",201888,0000,0000,000,00000,037,00326,151,00854,092,01355,081,01912,087,02224,103,02729,106,02924,082,03070,161,03609,118,04147,080,04333,158,04792,091,05071,054,05123,085,05224,077,05307,100,05397,249,05428,250,05435,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000034
"M","0","14917","227046","27.03.22 12:01:16.000","27.03.22 12:01:15.000",227046,0000,0000,000,00000,102,00379,109,00797,105,01011,164,01421,162,01623,163,01785,062,01986,157,02265,063,02703,100,02784,249,02811,250,02834,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000035
"M","0","14917","185940","27.03.22 12:01:31.000","27.03.22 12:01:30.000",185940,0000,0000,000,00000,093,00446,096,00587,105,00777,055,01158,118,01743,059,02314,160,02719,085,02832,077,02925,100,03045,249,03080,250,03089,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000036
"M","0","14917","506935","27.03.22 12:01:37.000","27.03.22 12:01:35.000",506935,0000,0000,000,00000,093,00405,096,00543,105,00732,055,01059,118,01765,059,02214,160,02669,085,02783,077,02887,100,02990,249,03025,250,03034,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000037
"M","0","14917","241874","27.03.22 12:01:46.000","27.03.22 12:01:45.000",241874,0000,0000,000,00000,093,00388,096,00595,105,00769,055,01041,118,01516,059,01768,160,02164,085,02305,077,02398,100,02508,249,02547,250,02564,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000038
"M","0","14917","514841","27.03.22 12:03:45.000","27.03.22 12:03:44.000",514841,0000,0000,000,00000,037,00300,151,00756,092,01173,106,01381,082,01534,161,02079,118,02609,080,02821,091,03116,085,03192,077,03271,100,03369,249,03395,250,03403,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000039
"M","0","14917","510674","27.03.22 12:04:05.000","27.03.22 12:04:03.000",510674,0000,0000,000,00000,093,00440,096,00645,105,00819,055,01105,118,01585,059,01898,160,02382,085,02508,077,02613,100,02725,249,02753,250,02762,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000040
"M","0","14917","507044","27.03.22 12:04:11.000","27.03.22 12:04:09.000",507044,0000,0000,000,00000,037,00287,151,00816,092,01292,033,01448,118,02267,080,02450,091,02768,085,02848,077,02922,100,03027,249,03057,250,03069,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000041
"M","0","14917","212069","27.03.22 12:04:27.000","27.03.22 12:04:25.000",212069,0000,0000,000,00000,037,00230,151,00658,092,00976,081,01463,087,01791,103,02213,106,02365,082,02474,161,03197,118,03538,080,03740,158,04069,091,04225,054,04276,085,04373,077,04467,100,04556,249,04580,250,04586,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000042
"M","0","14917","506980","27.03.22 12:04:48.000","27.03.22 12:04:46.000",506980,0000,0000,000,00000,037,00333,151,00888,092,01386,081,01987,087,02268,103,02810,106,03006,082,03155,161,03872,118,04301,080,04489,158,04822,091,05053,054,05110,085,05233,077,05310,100,05404,249,05434,250,05446,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000043
"M","0","14917","181863","27.03.22 12:05:06.000","27.03.22 12:05:05.000",181863,0000,0000,000,00000,093,00361,096,00565,105,00710,055,00949,118,01450,059,02221,160,02639,085,02751,077,02844,100,02956,249,02997,250,03004,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000044
"M","0","14917","511369","27.03.22 12:05:43.000","27.03.22 12:05:41.000",511369,0000,0000,000,00000,037,00294,151,00782,092,01186,033,01294,118,02072,080,02289,091,02613,085,02698,077,02776,100,02875,249,02911,250,02920,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000045
"M","0","14917","507023","27.03.22 12:06:01.000","27.03.22 12:05:59.000",507023,0000,0000,000,00000,037,00282,151,01153,092,01674,033,01779,118,02786,080,03010,091,03306,085,03431,077,03521,100,03679,249,03712,250,03719,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000046
"M","0","14917","509049","27.03.22 12:06:07.000","27.03.22 12:06:05.000",509049,0000,0000,000,00000,037,00215,151,00552,092,00851,081,01223,087,01430,103,01792,106,01899,082,01997,161,02363,118,02666,080,02821,158,03057,091,03180,054,03234,085,03287,077,03334,100,03395,249,03418,250,03425,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000047
"M","0","14917","216713","27.03.22 12:06:19.000","27.03.22 12:06:17.000",216713,0000,0000,000,00000,037,00269,151,00788,092,01238,106,01450,082,01596,161,02225,118,02709,080,02921,091,03281,085,03400,077,03475,100,03569,249,03601,250,03617,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000048
"M","0","14917","506352","27.03.22 12:06:33.000","27.03.22 12:06:31.000",506352,0000,0000,000,00000,093,00323,096,00463,105,00592,055,00872,118,01306,059,01590,160,01999,085,02138,077,02223,100,02321,249,02351,250,02371,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000049
"M","0","14917","247082","27.03.22 12:06:42.000","27.03.22 12:06:40.000",247082,0000,0000,000,00000,102,00396,109,00891,105,01056,164,01567,162,01745,163,01880,062,01996,157,02153,063,02689,100,02789,250,02839,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000050
"M","0","14917","247550","27.03.22 12:07:04.000","27.03.22 12:07:02.000",247550,0000,0000,000,00000,102,00417,109,00900,105,01054,164,01583,162,01749,163,01887,062,02003,157,02161,063,02707,100,02794,249,02854,250,02861,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000051
"M","0","14917","247082","27.03.22 12:07:10.000","27.03.22 12:07:08.000",247082,0000,0000,000,00000,102,00396,109,00891,105,01056,164,01567,162,01745,163,01880,062,01996,157,02153,063,02689,100,02789,250,02839,249,02857,250,02867,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000052
"M","0","14917","517487","27.03.22 12:09:20.000","27.03.22 12:09:18.000",517487,0000,0000,000,00000,037,00427,151,01057,092,01597,033,01715,118,02806,080,03078,091,03460,085,03588,077,03683,100,03813,249,03853,250,03858,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000053
"M","0","14917","255744","27.03.22 12:09:36.000","27.03.22 12:09:34.000",255744,0000,0000,000,00000,071,00015,158,00127,032,00180,062,00251,157,00406,084,00482,064,00651,079,00806,063,01046,100,01099,249,01130,250,01147,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000054
"M","0","14917","249910","27.03.22 12:09:41.000","27.03.22 12:09:40.000",249910,0000,0000,000,00000,071,00017,158,00133,032,00184,062,00256,157,00411,084,00487,064,00643,079,00810,063,01015,100,01094,249,01130,250,01152,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000055
"M","0","14917","507767","27.03.22 12:09:50.000","27.03.22 12:09:48.000",507767,0000,0000,000,00000,093,00456,096,00664,105,00887,055,01192,118,01906,059,02293,160,02875,085,03090,077,03220,100,03358,249,03399,250,03408,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000056
"M","0","14917","216677","27.03.22 12:10:06.000","27.03.22 12:10:04.000",216677,0000,0000,000,00000,037,00269,151,00711,092,01086,106,01249,082,01393,161,01913,118,02368,080,02552,091,02825,085,02908,077,02975,100,03071,249,03102,250,03123,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000057
"M","0","14917","511451","27.03.22 12:10:31.000","27.03.22 12:10:29.000",511451,0000,0000,000,00000,037,00260,151,00690,092,01082,033,01183,118,01922,080,02097,091,02394,085,02471,077,02548,100,02655,249,02684,250,02729,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000058
"M","0","14917","208727","27.03.22 12:10:44.000","27.03.22 12:10:42.000",208727,0000,0000,000,00000,093,00332,096,00453,105,00598,055,00801,118,01238,059,01658,160,02009,085,02154,077,02240,100,02339,249,02374,250,02382,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000059
"M","0","14917","500401","27.03.22 12:14:49.000","27.03.22 12:14:48.000",500401,0000,0000,000,00000,037,00273,151,00795,092,01229,106,01418,082,01547,161,02074,118,02568,080,02772,091,03061,085,03191,077,03280,100,03371,249,03394,250,03406,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000060
"M","0","14917","511344","27.03.22 12:16:04.000","27.03.22 12:16:02.000",511344,0000,0000,000,00000,037,00488,151,01457,161,02143,091,03337,085,03615,100,03925,249,03955,250,03962,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000061
"M","0","14917","258681","27.03.22 12:16:12.000","27.03.22 12:16:10.000",258681,0000,0000,000,00000,037,00286,151,00873,092,01410,033,01545,118,02339,080,02573,091,02957,085,03083,077,03165,100,03268,249,03301,250,03310,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000062
"M","0","14917","510314","27.03.22 12:16:16.000","27.03.22 12:16:14.000",510314,0000,0000,000,00000,093,00402,096,00956,105,01127,055,01371,118,01995,059,02599,160,02941,085,03089,077,03175,100,03271,249,03302,250,03313,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000063
"M","0","14917","255325","27.03.22 12:16:36.000","27.03.22 12:16:34.000",255325,0000,0000,000,00000,037,00412,151,00995,092,01498,106,01691,082,01875,161,02457,118,02934,080,03205,091,03547,085,03674,077,03772,100,03888,249,03916,250,03934,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000064
"M","0","14917","231504","27.03.22 12:16:55.000","27.03.22 12:16:54.000",231504,0000,0000,000,00000,037,00249,151,00714,092,01147,106,01304,082,01469,161,01917,118,02359,080,02545,091,02819,085,02916,077,02989,100,03075,249,03106,250,03113,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000065
"M","0","14917","506791","27.03.22 12:17:07.000","27.03.22 12:17:06.000",506791,0000,0000,000,00000,037,00278,151,01010,092,01446,106,01681,082,01833,161,02481,118,02976,080,03150,091,03429,085,03524,077,03591,100,03682,249,03710,250,03725,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000066
"M","0","14917","508554","27.03.22 12:17:44.000","27.03.22 12:17:42.000",508554,0000,0000,000,00000,037,00530,151,01328,092,01946,081,02431,087,02699,103,03138,106,03302,082,03435,161,03993,118,04390,080,04639,158,05006,091,05227,054,05270,085,05344,077,05405,100,05468,249,05493,250,05501,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000067
"M","0","14917","511747","27.03.22 12:17:47.000","27.03.22 12:17:46.000",511747,0000,0000,000,00000,037,00278,151,00745,092,01130,081,01616,087,01871,103,02304,106,02483,082,02610,161,03136,118,03539,080,03742,158,04099,091,04266,054,04312,085,04379,077,04445,100,04509,249,04537,250,04546,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000068
"M","0","14917","212099","27.03.22 12:18:40.000","27.03.22 12:18:39.000",212099,0000,0000,000,00000,037,00271,151,01042,092,01547,106,01748,082,01884,161,02455,118,02972,080,03162,091,03485,085,03563,077,03682,100,03784,249,03813,250,03819,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000069
"M","0","14917","245669","27.03.22 12:18:47.000","27.03.22 12:18:46.000",245669,0000,0000,000,00000,037,00362,151,01083,092,01803,033,01937,118,02861,080,03512,091,03860,085,03955,077,04052,100,04149,249,04179,250,04185,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000070
"M","0","14917","518331","27.03.22 12:19:15.000","27.03.22 12:19:13.000",518331,0000,0000,000,00000,102,00268,096,00613,105,00871,055,01413,163,01575,074,01911,059,02152,084,02549,085,02774,063,03082,100,03150,249,03183,250,03189,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000071
"M","0","14917","203484","27.03.22 12:19:53.000","27.03.22 12:19:51.000",203484,0000,0000,000,00000,102,00247,096,00664,105,00969,055,01787,163,01966,074,02274,059,02930,084,03365,085,03607,063,03839,100,03887,249,03915,250,03951,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000072
"M","0","14917","213563","27.03.22 12:21:10.000","27.03.22 12:21:09.000",213563,0000,0000,000,00000,037,00417,151,01121,092,01676,106,01909,082,02067,161,02658,118,03200,080,03529,091,04014,085,04098,077,04190,100,04290,249,04321,250,04329,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000073
"M","0","14917","212974","27.03.22 12:21:49.000","27.03.22 12:21:47.000",212974,0000,0000,000,00000,037,00290,151,00867,092,01287,033,01418,118,02285,080,02490,091,02824,085,02925,077,02999,100,03108,249,03141,250,03166,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000074
"M","0","14917","238125","27.03.22 12:22:01.000","27.03.22 12:21:59.000",238125,0000,0000,000,00000,093,00466,096,00634,105,00890,055,01190,118,01700,059,02009,160,02457,085,02614,077,02727,100,02855,249,02900,250,02913,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000075
"M","0","14917","511410","27.03.22 12:23:01.000","27.03.22 12:23:00.000",511410,0000,0000,000,00000,037,00262,151,00775,092,01149,081,01649,087,01936,103,02405,106,02559,082,02694,161,03202,118,03642,080,03851,158,04183,091,04397,054,04450,085,04529,077,04606,100,04705,249,04732,250,04740,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000076
"M","0","14917","225005","27.03.22 12:23:17.000","27.03.22 12:23:16.000",225005,0000,0000,000,00000,102,00385,096,00969,105,01538,055,02260,163,02424,074,02715,059,03063,084,03482,085,03650,063,03893,100,03978,249,04021,250,04035,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000077
"M","0","14917","255211","27.03.22 12:24:14.000","27.03.22 12:24:13.000",255211,0000,0000,000,00000,093,00418,096,00593,105,00809,055,01187,118,01840,059,02620,160,03118,085,03290,077,03480,100,03619,249,03664,250,03672,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000078
"M","0","14917","517490","27.03.22 12:24:39.000","27.03.22 12:24:37.000",517490,0000,0000,000,00000,037,00223,151,00605,092,00939,081,01327,087,01537,103,01944,106,02072,082,02182,161,02626,118,02987,080,03180,158,03486,091,03637,054,03684,085,03752,077,03825,100,03903,249,03932,250,03937,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000079
"M","0","14917","506629","27.03.22 12:24:44.000","27.03.22 12:24:42.000",506629,0000,0000,000,00000,037,00232,151,00582,092,00885,249,02547,250,04302,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000080
"M","0","14917","504136","27.03.22 12:25:09.000","27.03.22 12:25:07.000",504136,0000,0000,000,00000,037,00284,151,01021,092,01400,081,02147,087,02420,103,02894,106,03056,082,03211,161,03743,118,04268,080,04453,158,04833,091,05025,054,05074,085,05148,077,05218,100,05309,249,05342,250,05347,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000081
"M","0","14917","225161","27.03.22 12:26:44.000","27.03.22 12:26:42.000",225161,0000,0000,000,00000,037,00289,151,00935,092,01530,081,02308,087,02838,103,03420,106,03600,082,03741,161,04324,118,04920,080,05165,158,05571,091,05750,054,05798,085,05891,077,06013,100,06127,249,06157,250,06162,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000082
"M","0","14917","223503","27.03.22 12:28:48.000","27.03.22 12:28:46.000",223503,0000,0000,000,00000,102,00322,096,00873,105,01209,055,01683,163,01828,074,02324,059,02591,084,03081,085,03310,063,03491,100,03544,249,03578,250,03585,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000083
"M","0","14917","246581","27.03.22 12:29:27.000","27.03.22 12:29:25.000",246581,0000,0000,000,00000,037,00283,151,00760,092,01159,106,01318,082,01477,161,02024,118,02520,080,02743,091,03056,085,03148,077,03246,100,03344,249,03377,250,03384,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000084
"M","0","14917","517129","27.03.22 12:29:32.000","27.03.22 12:29:30.000",517129,0000,0000,000,00000,037,00420,151,01186,092,01766,106,02004,082,02266,161,03079,118,03632,080,03921,091,04309,085,04412,077,04499,100,04608,249,04643,250,04650,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000085
"M","0","14917","515181","27.03.22 12:31:21.000","27.03.22 12:31:20.000",515181,0000,0000,000,00000,037,00543,151,01276,092,01832,106,02070,082,02248,161,03032,118,03663,080,03895,091,04250,085,04357,077,04457,100,04583,249,04615,250,04639,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000086
"M","0","14917","519493","27.03.22 12:31:29.000","27.03.22 12:31:27.000",519493,0000,0000,000,00000,037,00666,151,01400,092,01957,106,02194,082,02366,161,03150,118,03789,080,04018,091,04376,085,04480,077,04582,100,04706,249,04739,250,04767,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000087
"M","0","14917","509450","27.03.22 12:31:43.000","27.03.22 12:31:41.000",509450,0000,0000,000,00000,037,00219,151,00588,092,00880,081,01291,087,01524,103,01935,106,02070,082,02190,161,02621,118,03014,080,03218,158,03508,091,03674,054,03712,085,03797,077,03863,100,03940,249,03968,250,04001,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000088
"M","0","14917","508199","27.03.22 12:32:00.000","27.03.22 12:31:59.000",508199,0000,0000,000,00000,037,00240,151,00651,092,00971,081,01395,087,01677,103,02076,106,02216,082,02338,161,02797,118,03129,080,03307,158,03598,091,03756,054,03802,085,03880,077,03947,100,04032,249,04060,250,04078,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000089
"M","0","14917","197885","27.03.22 12:32:44.000","27.03.22 12:32:42.000",197885,0000,0000,000,00000,037,00364,151,00833,092,01165,081,01621,087,02029,103,02602,106,02757,082,02879,161,03363,118,03741,080,04052,158,04351,091,04510,054,04555,085,04641,077,04718,100,04816,249,04848,250,04902,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000090
"M","0","14917","509448","27.03.22 12:32:50.000","27.03.22 12:32:48.000",509448,0000,0000,000,00000,037,00324,151,00958,092,01449,106,01660,082,01817,161,02544,118,03024,080,03246,091,03547,085,03669,077,03755,100,03860,249,03894,250,03947,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000091
"M","0","14917","511855","27.03.22 12:32:55.000","27.03.22 12:32:53.000",511855,0000,0000,000,00000,037,00377,151,01001,092,01453,081,02011,087,02362,103,02941,106,03126,082,03296,161,04000,118,04566,080,04814,158,05205,091,05442,054,05520,085,05647,077,05741,100,05846,249,05882,250,05934,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000092
"M","0","14917","515238","27.03.22 12:33:07.000","27.03.22 12:33:04.000",515238,0000,0000,000,00000,093,00523,096,00726,105,00937,055,01286,118,02173,059,02945,160,03640,085,03917,077,04063,100,04180,249,04219,250,04264,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000093
"M","0","14917","515045","27.03.22 12:35:02.000","27.03.22 12:35:00.000",515045,0000,0000,000,00000,037,00289,151,01265,092,01666,081,02387,087,02854,103,03393,106,03561,082,03706,161,04244,118,04734,080,04922,158,05234,091,05447,054,05494,085,05561,077,05693,100,05779,249,05813,250,05819,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000094
"M","0","14917","514702","27.03.22 12:38:03.000","27.03.22 12:38:01.000",514702,0000,0000,000,00000,037,00306,151,01027,092,01488,081,02213,087,02516,103,03040,106,03218,082,03363,161,03943,118,04351,080,04642,158,04918,091,05089,054,05141,085,05264,077,05390,100,05482,249,05513,250,05521,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000095
"M","0","14917","256285","27.03.22 12:38:38.000","27.03.22 12:38:36.000",256285,0000,0000,000,00000,037,00535,151,01242,092,01747,081,02377,087,02752,103,03422,106,03616,082,03848,161,04607,118,05133,080,05363,158,05725,091,05942,054,05988,085,06116,077,06242,100,06344,249,06374,250,06396,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000096
"M","0","14917","509544","27.03.22 12:38:42.000","27.03.22 12:38:40.000",509544,0000,0000,000,00000,037,00269,151,00687,092,01050,081,01490,087,01778,103,02257,106,02420,082,02537,161,03000,118,03420,080,03579,158,03852,091,04017,054,04101,085,04174,077,04242,100,04320,249,04347,250,04360,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000097
"M","0","14917","204755","27.03.22 12:38:51.000","27.03.22 12:38:49.000",204755,0000,0000,250,00009,054,00238,085,00318,077,00392,161,01589,118,01986,080,02155,158,02426,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000098
"M","0","14917","513398","27.03.22 12:39:05.000","27.03.22 12:39:03.000",513398,0000,0000,000,00000,037,00376,151,00912,092,01384,081,01946,087,02267,103,02913,106,03077,082,03251,161,03924,118,04412,080,04659,158,05045,091,05254,054,05529,085,05634,077,05789,100,05899,249,05928,250,05942,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000099
"M","0","14917","173450","27.03.22 12:39:16.000","27.03.22 12:39:15.000",173450,0000,0000,000,00000,093,00597,096,00926,105,01279,055,02566,118,03295,059,04229,160,05122,085,05379,077,05519,100,05766,249,05815,250,05834,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000100
"M","0","14917","510877","27.03.22 12:39:28.000","27.03.22 12:39:26.000",510877,0000,0000,000,00000,037,00224,151,00573,092,00966,081,01391,087,01610,103,01991,106,02110,082,02221,161,02615,118,02939,080,03074,158,03328,091,03465,054,03510,085,03575,077,03629,100,03695,249,03723,250,03746,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000101
"M","0","14917","510279","27.03.22 12:42:54.000","27.03.22 12:42:52.000",510279,0000,0000,000,00000,037,00277,151,00754,092,01212,081,01978,087,02245,103,02794,106,02971,082,03120,161,03660,118,04121,080,04512,158,04910,091,05083,054,05132,085,05252,077,05319,100,05412,249,05442,250,05452,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000102
"M","0","14917","511332","27.03.22 12:43:02.000","27.03.22 12:43:00.000",511332,0000,0000,000,00000,037,00604,151,01164,092,01600,081,02358,087,02635,103,03164,106,03339,082,03477,161,04041,118,04566,080,04778,158,05156,091,05337,054,05389,085,05494,077,05563,100,05655,249,05684,250,05699,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000103
"M","0","14917","253296","27.03.22 12:43:13.000","27.03.22 12:43:12.000",253296,0000,0000,000,00000,037,00395,151,02528,092,03131,106,03392,082,03571,161,04339,118,04988,080,05264,091,05720,085,05943,077,06032,100,06140,249,06169,250,06191,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000104
"M","0","14917","513390","27.03.22 12:43:18.000","27.03.22 12:43:17.000",513390,0000,0000,000,00000,037,00292,151,00880,092,01265,081,01780,087,02064,103,02561,106,02717,082,02865,161,03406,118,03909,080,04112,158,04434,091,04630,054,04679,085,04757,077,04841,100,04944,249,04975,250,04996,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000105
"M","0","14917","247982","27.03.22 12:44:52.000","27.03.22 12:44:51.000",247982,0000,0000,000,00000,102,03408,109,03683,105,03851,164,04109,162,04317,163,04430,062,04592,157,04792,063,05073,100,05110,249,05142,250,05150,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000106
"M","0","14917","226027","27.03.22 12:45:51.000","27.03.22 12:45:49.000",226027,0000,0000,250,00005,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000107
"M","0","14917","227057","27.03.22 12:46:14.000","27.03.22 12:46:13.000",227057,0000,0000,000,00000,037,00321,151,00813,092,01279,081,01820,087,02092,103,02630,106,02810,082,03001,161,03592,118,04163,080,04400,158,04768,091,04980,054,05056,085,05134,077,05211,100,05305,249,05339,250,05352,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000108
"M","0","14917","509447","27.03.22 12:51:05.000","27.03.22 12:51:03.000",509447,0000,0000,000,00000,037,00260,151,00816,092,01327,081,01916,087,02197,103,02748,106,02893,082,03042,161,03556,118,03976,080,04179,158,04499,091,04678,054,04722,085,04793,077,04869,100,04945,249,04975,250,04983,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000109
"M","0","14917","518732","27.03.22 12:51:35.000","27.03.22 12:51:34.000",518732,0000,0000,000,00000,093,00729,096,01138,105,01571,055,02399,118,03205,059,03819,160,05033,085,05323,077,05521,100,05775,249,05817,250,05852,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000110
"M","0","14917","401024","27.03.22 12:52:07.000","27.03.22 12:52:06.000",401024,0000,0000,000,00000,037,00574,151,01334,092,02073,033,02231,118,03665,080,04362,091,04858,085,04992,077,05098,100,05236,249,05277,250,05284,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000111
"M","0","14917","512427","27.03.22 12:55:31.000","27.03.22 12:55:30.000",512427,0000,0000,000,00000,037,00293,151,00924,092,01371,081,01887,087,02243,103,02813,106,03041,082,03215,161,03907,118,04533,080,04757,158,05241,091,05458,054,05554,085,05692,077,05797,100,05923,249,05958,250,05969,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000112
"M","0","14917","248227","27.03.22 12:58:45.000","27.03.22 12:58:43.000",248227,0000,0000,000,00000,102,00702,096,01292,105,01836,055,02648,163,02986,074,03317,059,03643,084,04140,085,04573,063,04792,100,04878,249,04918,250,04930,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000113
"M","0","14917","060730","27.03.22 12:59:00.000","27.03.22 12:58:58.000",060730,0000,0000,000,00000,102,00710,096,01291,105,01834,055,02671,163,02998,074,03328,059,03654,084,04151,085,04570,063,04801,100,04891,250,04948,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000114
"M","0","14917","203292","27.03.22 13:00:33.000","27.03.22 13:00:31.000",203292,0000,0000,000,00000,102,00684,096,02260,105,03154,055,04265,163,04439,074,05137,059,05566,084,05929,085,06075,249,06855,250,06869,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000115
"M","0","14917","060730","27.03.22 13:00:45.000","27.03.22 13:00:43.000",060730,0000,0000,000,00000,102,00710,096,01291,105,01834,055,02671,163,02998,074,03328,059,03654,084,04151,085,04570,063,04801,100,04891,250,04948,249,05004,250,05011,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000116
"M","0","14917","251366","27.03.22 13:00:48.000","27.03.22 13:00:46.000",251366,0000,0000,000,00000,037,00460,151,00983,092,01450,081,02172,087,02640,103,03201,106,03378,161,04064,118,04607,080,04922,158,05379,091,05616,054,05680,085,05777,077,05870,100,05996,249,06036,250,06043,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000117
"M","0","14917","510994","27.03.22 13:01:22.000","27.03.22 13:01:20.000",510994,0000,0000,000,00000,151,03476,100,06119,249,06185,250,06194,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000118
"M","0","14917","517508","27.03.22 13:22:37.000","27.03.22 13:22:35.000",517508,0000,0000,000,00000,037,00631,151,01122,092,01664,081,02233,087,02868,103,03712,106,03907,082,04115,161,04700,073,06144,100,06714,249,06750,250,06757,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000119

9
k2ds/tt.cnf Executable file
View File

@ -0,0 +1,9 @@
# Auto generated ttime configuration file.
-codes "37,151,92,81,87,103,106,82,161,118,80,158,91,54,85,77,100,249;37,151,92,106,82,161,118,80,91,85,77,100,249;37,151,92,33,118,80,91,85,77,100,249;93,96,105,55,118,59,160,85,77,100,249;102,96,105,55,163,74,59,84,85,63,100,249;102,109,105,164,162,163,62,157,63,100,249;71,158,32,62,157,84,64,79,63,100,249"
-courses "A-lang åpen,D17AL,H17AL;A-kort åpen,D17 AK,H15-16,H17 AK,H35,H45;D35,D45,H55;B åpen 17-,D55,D75,H13-14,H65,H75;C åpen 17-,H11-12;H9-10,N2 åpen 9-16;N1- åpen"
-database "Z:/sdb.csv"
-emit "Z:/mtr.txt"
-wxml "Z:/res_1_ttime.xml"
-htmlres "C:/Users/KOK/Documents/results.html"
-port COM5
-start "D17AL,10:30:00,02:00,;H17AL,11:01:00,04:00,;D17 AK,11:00:00,05:00,;H15-16,11:11:00,04:00,;H17 AK,11:26:00,04:00,;H35,11:25:00,04:00,;H45,11:02:00,04:00,;D35,11:20:00,04:00,;D45,11:04:00,04:00,;H55,11:01:00,04:00,;D55,11:03:00,04:00,;D75,11:32:00,04:00,;H13-14,11:08:00,04:00,;H65,11:07:00,04:00,;H75,11:14:00,04:00,;H11-12,11:14:00,04:00,;H9-10,11:19:00,04:00,"

19
mtr.py Normal file
View File

@ -0,0 +1,19 @@
import otime
import serial
from time import sleep
def dump_all(port):
mtr = serial.Serial(port, baudrate=9600, timeout=40)
# dump all command
mtr.write(b'/SA')
card_dumps = []
sleep(0.4)
while mtr.in_waiting > 0:
mtr.read_until(expected=b'\xFF\xFF\xFF\xFF')
size = mtr.read(size=1)
if size == b'\xe6':
meat = mtr.read(229)
full = b'\xFF\xFF\xFF\xFF' + size + meat
card_r = otime.CardDump.from_mtr_bytes(full)
card_dumps.append(card_r)
return card_dumps

200
mtr_log_extractor.py Normal file
View File

@ -0,0 +1,200 @@
#!/usr/bin/env python3
import argparse
import logging
import logging.handlers
import os
import serial
import sys
from datetime import datetime, timedelta
import time
import mtrreader
import mtrlog
def create_argparser():
argparser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
argparser.add_argument(
'-p',
'--serial-port',
default='/dev/ttyMTR',
help="Serial port device of MTR")
argparser.add_argument(
'-t',
'--serial-port-polling-timeout',
metavar='TIMEOUT',
type=int,
help=(
'Number of seconds to spend polling MTR for status before '
'giving up. (Exits with status code {} on timeout.)'.format(
exit_code_serial_port_unresponsive)))
argparser.add_argument(
'-f',
'--output-file-name',
default="mtr-{}.log",
help=(
'Name of output file in the "MTR log file" format read by '
'tTime (See http://ttime.no. Format described at '
'http://ttime.no/rs232.pdf.) '
'A {} in the filename will be replaced with a timestamp in '
'the ISO 8601 combined date and time basic format.'))
argparser.add_argument(
'-d',
'--destination',
nargs='+',
metavar='DEST_ARG',
help=(
"Send MTR log file to a destination. Supported destinations: "
"an HTTP URL (accepting POST form uploads) or "
"'dropbox path/to/apitokenfile [/upload/dir]'"))
argparser.add_argument(
'-l',
'--log',
nargs='+',
metavar='LOG_ARG',
default=['syslog', '/dev/log', 'local0'],
help=(
"Configure logging. LOG_ARG can be a log file path or the "
"default (using multiple values) 'syslog [SOCKET] [FACILITY]' "
"where SOCKET is '/dev/log' and FACILITY is 'local0' by "
"default."))
return argparser
def initialize_logging():
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
if args.log[0] == 'syslog':
address = args.log[1] if len(args.log) >= 2 else '/dev/log'
facility = args.log[2] if len(args.log) >= 3 else 'local0'
syslog_handler = logging.handlers.SysLogHandler(
address=address,
facility=facility)
syslog_handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
logger.addHandler(syslog_handler)
else:
log_file = args.log[0]
file_handler = logging.handlers.WatchedFileHandler(log_file)
file_handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
logger.addHandler(file_handler)
return logger
def should_poll_mtr_for_status(timeout_uptime):
no_timeout_set = timeout_uptime is None
return no_timeout_set or uptime() < timeout_uptime
def uptime():
with open('/proc/uptime', 'r') as f:
uptime_seconds = float(f.readline().split()[0])
return timedelta(seconds=uptime_seconds)
def is_status_response(messages):
return (len(messages) == 1
and isinstance(messages[0], mtrreader.MtrStatusMessage))
def serial_port_with_live_mtr(
port, polling_timeout_secs, retry_wait_time_secs, serial_timeout_secs):
if polling_timeout_secs is None:
polling_timeout_uptime = None
logger.info("Polling serial port %s forever", port)
else:
polling_timeout_uptime = (
uptime() + timedelta(seconds=polling_timeout_secs))
logger.info(
"Polling serial port %s for status for %s seconds (until "
"uptime is %s)",
port, polling_timeout_secs, polling_timeout_uptime)
while should_poll_mtr_for_status(polling_timeout_uptime):
try:
serial_port = serial.Serial(
port=port, baudrate=9600, timeout=serial_timeout_secs)
logger.info(
"Opened serial port %s, sending 'status' command '/ST'...",
port)
mtr_reader_status = mtrreader.MtrReader(serial_port)
mtr_reader_status.send_status_command()
messages = mtr_reader_status.receive()
if is_status_response(messages):
logger.info(
"MTR status response received, ID is %d",
messages[0].mtr_id())
return serial_port
except serial.SerialException:
# Just log the error, the device could have been suddenly
# connected and could be responding next time.
logger.info((
"MTR status polling failed; Serial port %s was closed or "
"couldn't be opened"), port)
logger.info(
"Retrying MTR status polling in %d seconds",
retry_wait_time_secs)
time.sleep(retry_wait_time_secs)
logger.info(
"No status response received on serial port %s in %d seconds. "
"Giving up.",
port, polling_timeout_secs)
return None
def write_mtr_log_file(log_lines, output_filename):
with open(output_filename, 'wb') as output_file:
for log_line in log_lines:
output_file.write(("%s\n" % log_line).encode('utf-8'))
logger.info("Wrote log file %s", output_filename)
return output_filename
def upload_mtr_log_file_dropbox(log_file_name, upload_dir, token):
dbx = dropbox.Dropbox(token)
with open(log_file_name, 'rb') as f:
upload_filename = os.path.basename(f.name)
dbx.files_upload(f.read(), upload_dir + "/" + upload_filename)
return
def upload_mtr_log_file_http(log_file_name, url):
with open(log_file_name, 'rb') as f:
requests.post(url, files={'file': f})
return
exit_code_serial_port_unresponsive = 100
argparser = create_argparser()
args = argparser.parse_args()
logger = initialize_logging()
serial_port = serial_port_with_live_mtr(
args.serial_port,
polling_timeout_secs=args.serial_port_polling_timeout,
retry_wait_time_secs=5,
serial_timeout_secs=3)
if serial_port is None:
logger.info(
"Serial port is unresponsive, exiting... (status=%d)",
exit_code_serial_port_unresponsive)
sys.exit(exit_code_serial_port_unresponsive)
mtr_reader = mtrreader.MtrReader(serial_port)
destination_args = args.destination
dropbox_api_token = None
output_filename = (
args.output_file_name.format(datetime.now().strftime('%Y%m%dT%H%M%S')))
mtr_reader.send_spool_all_command()
data_messages = mtr_reader.receive()
datetime_extracted = datetime.now()
log_lines = mtrlog.MtrLogFormatter().format_all(
data_messages, datetime_extracted)
mtr_log_file_name = write_mtr_log_file(log_lines, output_filename)

47
mtrlog.py Normal file
View File

@ -0,0 +1,47 @@
import logging
logger = logging.getLogger()
class MtrLogFormatter:
def format_all(self, data_messages, datetime_extracted):
log_lines = []
for data_message in data_messages:
log_lines.append(self.format(data_message, datetime_extracted))
return log_lines
def format(self, msg, datetime_extracted):
log_line = []
log_line.append('"M"')
log_line.append('"0"')
log_line.append('"%d"' % msg.mtr_id())
log_line.append('"%06d"' % msg.card_id())
print('"%06d"' % msg.card_id())
log_line.append(
'"%s"' % datetime_extracted.strftime('%d.%m.%y %H:%M:%S.000'))
log_line.append(
'"%02d.%02d.%02d %02d:%02d:%02d.%03d"' % (
msg.day(),
msg.month(),
msg.year(),
msg.hours(),
msg.minutes(),
msg.seconds(),
msg.milliseconds()))
log_line.append('%06d' % msg.card_id())
log_line.append('%04d' % 0) # skipped product week
log_line.append('%04d' % 0) # skipped product year
controls = []
for (control_code, time_at_control) in msg.splits():
log_line.append('%03d' % control_code)
controls.append('%03d' % control_code)
log_line.append('%05d' % time_at_control)
print(controls)
log_line.append('%07d' % msg.packet_num())
log_line_str = ",".join(log_line)
logger.info("Converted message to log line format: %s", log_line_str)
return log_line_str

276
mtrreader.py Normal file
View File

@ -0,0 +1,276 @@
# From http://ttime.no/rs232.pdf
#
# MESSAGE DESCRIPTION:
# ====================
#
# MTR--datamessage
# ---------------
# Fieldname # bytes
# Preamble 4 FFFFFFFF(hex) (4 "FF"'s never occur "inside" a message).
# (Can be used to "resynchronize" logic if a connection is
# broken)
# Package-size 1 number of bytes excluding preamble (=230)
# Package-type 1 'M' as "MTR-datamessage"
# MTR-id 2 Serial number of MTR2; Least significant byte first
# Timestamp 6 Binary Year, Month, Day, Hour, Minute, Second
# TS-milliseconds 2 Milliseconds NOT YET USED, WILL BE 0 IN THIS VERSION
# Package# 4 Binary Counter, from 1 and up; Least sign byte first
# Card-id 3 Binary, Least sign byte first
# Producweek 1 0-53 ; 0 when package is retrived from "history"
# Producyear 1 94-99,0-..X ; 0 when package is retrived from "history"
# ECardHeadSum 1 Headchecksum from card; 0 when package is retrived from
# "history"
# The following fields are repeated 50 times:
# CodeN 1 ControlCode; unused positions have 0
# TimeN 2 Time binary seconds. Least sign. first, Most sign. last;
# unused:0
# ASCII-string 56 Various info depending on ECard-type; 20h (all spaces)
# when retr. from "history" (See ASCII-String)
# Checksum 1 Binary SUM (MOD 256) of all bytes including Preamble
# NULL-Filler 1 Binary 0 (to avoid potential 5 FF's. Making it easier to
# hunt PREAMBLE
# ---------------------------------------
# Size 234
#
# Status-message
# --------------
# Fieldname # bytes
# Preamble 4 FFFFFFFF(hex) (FFFFFFFF never occur elsewhere within
# a frame).
# Package-size 1 number of bytes excluding preamble (=55)
# Package-type 1 'S' as "Status-message" (0x53)
# MTR-id 2 Serial number of MTR2.
# CurrentTime 6 Binary Year, Month, Day, Hour, Minute, Second
# CurrentMilliseconds 2 Milliseconds NOT YET USED, WILL BE 0 IN THIS VERSION
# BatteryStatus 1 1 if battery low. 0 if battery OK.
# RecentPackage# 4 if this is 0, then ALL following # should be ignored!
# OldestPackage# 4 note: If RecentPack==0 then this is still 1! meaning:
# Number of packages in MTR is
# "RecentPackage# - OldestPackage# + 1"
# CurrentSessionStart# 4 Current session is from here to RecentPackage
# (if NOT = 0)
# Prev1SessStart# 4 Prev session was from Prev1SessStart# to
# CurrentSessionStart# - 1
# Prev2SessStart# 4
# Prev3SessStart# 4
# Prev4SessStart# 4
# Prev5SessStart# 4
# Prev6SessStart# 4
# Prev7SessStart# 4
# Checksum 1 Binary SUM (MOD 256) of all bytes including Preamble
# NULL-Filler 1 Binary 0 (to avoid potential 5 FF's. Making it easier
# to hunt PREAMBLE
# ---------------------------------------
# Size 59
import logging
logger = logging.getLogger()
def extend_with(old_items, new_items):
old_items.extend(new_items)
return new_items
def checksum_of(message_bytes):
return sum(message_bytes) % 256
class MtrReader:
def __init__(self, serial_port):
self.serial_port = serial_port
def send_status_command(self):
self.serial_port.write(b'/ST')
def send_spool_all_command(self):
self.serial_port.write(b'/SA')
def receive(self):
messages = []
timed_out = False
PREAMBLE = b'\xFF\xFF\xFF\xFF'
while not timed_out:
preamble_buffer = bytearray()
while preamble_buffer != PREAMBLE:
if len(preamble_buffer) == len(PREAMBLE):
# make room for incoming byte
preamble_buffer.pop(0)
bytes_read_waiting = self.serial_port.read()
timed_out = len(bytes_read_waiting) == 0
if timed_out:
logger.debug(
'Timed out, returning %d messages', len(messages))
return messages
preamble_buffer.extend(bytes_read_waiting)
logger.debug(
'Byte read waiting (hex): %s '
'(current preamble buffer: %s)',
bytes_read_waiting.hex(),
preamble_buffer.hex())
logger.debug('Saw preable, start package parsing')
message_bytes = bytearray()
message_bytes.extend(preamble_buffer)
package_size_numbytes = 1
package_type_numbytes = 1
package_size = int.from_bytes(
extend_with(
message_bytes,
self.serial_port.read(package_size_numbytes)),
'little')
package_type = int.from_bytes(
extend_with(
message_bytes,
self.serial_port.read(package_type_numbytes)),
'little')
num_remaining_bytes_expected = (
package_size
- package_size_numbytes
- package_type_numbytes)
remaining_bytes = self.serial_port.read(
num_remaining_bytes_expected)
if len(remaining_bytes) < num_remaining_bytes_expected:
logger.warning('Did not receive expected number of bytes')
continue
message_bytes.extend(remaining_bytes)
msg = None
if (package_type == ord('M')):
msg = MtrDataMessage(message_bytes)
elif package_type == ord('S'):
msg = MtrStatusMessage(message_bytes)
else:
logger.warning('Got unsupported package type %d', package_type)
continue
logger.info(
"Got message number %d (hex): %s",
len(messages) + 1, message_bytes.hex())
if not msg.is_checksum_valid():
logger.warning("Message has incorrect checksum")
continue
messages.append(msg)
return messages
class MtrStatusMessage:
def __init__(self, message_bytes):
self.message_bytes = message_bytes
def mtr_id(self):
return int.from_bytes(self.message_bytes[6:8], 'little')
def year(self):
return int.from_bytes(self.message_bytes[8:9], 'little')
def month(self):
return int.from_bytes(self.message_bytes[9:10], 'little')
def day(self):
return int.from_bytes(self.message_bytes[10:11], 'little')
def hours(self):
return int.from_bytes(self.message_bytes[11:12], 'little')
def minutes(self):
return int.from_bytes(self.message_bytes[12:13], 'little')
def seconds(self):
return int.from_bytes(self.message_bytes[13:14], 'little')
def milliseconds(self):
return int.from_bytes(self.message_bytes[14:16], 'little')
def battery_status(self):
return int.from_bytes(self.message_bytes[16:17], 'little')
# package number fields not supported (yet)
def is_checksum_valid(self):
checksum = int.from_bytes(self.message_bytes[57:58], 'little')
# calculate checksum for message bytes up until checksum
calculated_checksum = checksum_of(self.message_bytes[:57])
logger.debug(
"Calculated checksum %d, read %d",
calculated_checksum, checksum)
return checksum == calculated_checksum
class MtrDataMessage:
def __init__(self, message_bytes):
self.message_bytes = message_bytes
def mtr_id(self):
return int.from_bytes(self.message_bytes[6:8], 'little')
def year(self):
return int.from_bytes(self.message_bytes[8:9], 'little')
def month(self):
return int.from_bytes(self.message_bytes[9:10], 'little')
def day(self):
return int.from_bytes(self.message_bytes[10:11], 'little')
def hours(self):
return int.from_bytes(self.message_bytes[11:12], 'little')
def minutes(self):
return int.from_bytes(self.message_bytes[12:13], 'little')
def seconds(self):
return int.from_bytes(self.message_bytes[13:14], 'little')
def milliseconds(self):
return int.from_bytes(self.message_bytes[14:16], 'little')
def packet_num(self):
return int.from_bytes(self.message_bytes[16:20], 'little')
def card_id(self):
return int.from_bytes(self.message_bytes[20:23], 'little')
# product week (1 byte)
# product year (1 byte)
# ecard head checksum (1 byte)
def splits(self):
splits = []
splits_offset = 26
code_numbytes = 1
time_numbytes = 2
split_numbytes = code_numbytes + time_numbytes
for split_index in range(50):
code_offset = splits_offset + split_index * split_numbytes
time_offset = code_offset + code_numbytes
code = int.from_bytes(
self.message_bytes[code_offset:code_offset+code_numbytes],
'little')
time = int.from_bytes(
self.message_bytes[time_offset:time_offset+time_numbytes],
'little')
splits.append((code, time))
return splits
def ascii_string(self):
return self.message_bytes[176:232].decode('ascii')
def is_checksum_valid(self):
checksum = int.from_bytes(self.message_bytes[232:233], 'little')
# calculate checksum for message bytes up until checksum
calculated_checksum = checksum_of(self.message_bytes[:232])
logger.debug(
"Calculated checksum %d, read %d",
calculated_checksum, checksum)
return checksum == calculated_checksum

938
otime.py Normal file
View File

@ -0,0 +1,938 @@
from copy import copy
import datetime
import csv
import re
import json
import io
import xml.etree.ElementTree as ET
# from fpdf import FPDF
# The event object stores all the event data.
# A .otime file is more or less just a json dump of the Event object.
class Event:
def __init__(self, eventid, name, start_time=None, end_time=None,
organiser=None, courses=[], o_classes=[], runners=[],
card_dumps=[], fees=[]):
self.id = eventid
self.name = name
self.start_time = start_time
self.end_time = end_time
self.organiser = organiser
self.courses = courses
self.o_classes = o_classes
self.runners = runners
self.card_dumps = card_dumps
self.fees = fees
def add_course(self, *args):
for n in args:
self.courses.append(n)
def add_o_class(self, *args):
for n in args:
self.o_classes.append(n)
def add_runners(self, *args):
for n in args:
self.runners.append(n)
def add_fees(self, *args):
for n in args:
self.fees.append(n)
def import_xml_entries(self, xml_file):
self.add_runners(*runners_from_xml_entries(xml_file))
self.add_fees(*fees_from_xml_entries(xml_file))
def from_xml_entries(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
event_el = root.find(f'./{url}Event')
event_id = int(event_el.find(f'./{url}Id').text)
name = event_el.find(f'./{url}Name').text
organiser = event_el.find(f'./{url}Organiser/{url}Name').text
start_ds = event_el.find(f'./{url}StartTime/{url}Date').text
start_ts = event_el.find(f'./{url}StartTime/{url}Time').text[:-1]
start_time = datetime.datetime.fromisoformat(f'{start_ds}T{start_ts}')
end_ds = event_el.find(f'./{url}EndTime/{url}Date').text
end_ts = event_el.find(f'./{url}EndTime/{url}Time').text[:-1]
end_time = datetime.datetime.fromisoformat(f'{end_ds}T{end_ts}')
runners = runners_from_xml_entries(xml_file)
fees = fees_from_xml_entries(xml_file)
return Event(event_id, name, organiser=organiser, runners=runners,
fees=fees, start_time=start_time, end_time=end_time)
def import_ttime_cnf(self, ttime_file):
self.add_course(*courses_from_ttime_conf(ttime_file))
if isinstance(ttime_file, io.TextIOBase):
ttime_file.seek(0)
self.add_o_class(*classes_from_ttime_conf(ttime_file, self.courses))
def import_ttime_db(self, ttime_file):
if type(ttime_file) == str:
f_list = ttime_file.splitlines()
elif isinstance(ttime_file, io.TextIOBase):
csvreader = csv.reader(ttime_file, delimiter=';',)
runnerarray = []
for row in f_list:
if len(row) == 0 or row[1] == '':
continue
runnerarray.append(Runner.from_string(row, self.o_classes))
self.runners = runnerarray
def import_mtr_file(self, mtr_file):
self.card_dumps = CardDump.list_from_mtr_f(mtr_file)
def match_runners_cards(self):
for r in self.runners:
for d in self.card_dumps:
if r.card == d.card:
r.card_r = d
def match_runners_o_classes(self):
for r in self.runners:
for c in self.o_classes:
if r.o_class_str == c.name:
r.o_class = c
def match_o_classes_courses(self):
for oc in self.o_classes:
for c in self.courses:
if oc.course_str == c.name:
oc.course = c
def match_runners_fees(self):
for r in self.runners:
for f in self.fees:
if r.fee_id == f.id:
r.fee = f
def match_all(self):
self.match_runners_cards()
self.match_runners_o_classes()
self.match_o_classes_courses()
self.match_runners_fees()
def get_xml_res(self):
root = ET.Element('ResultList')
root.set('xmlns', 'http://www.orienteering.org/datastandard/3.0')
root.set('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance')
root.set('iofVersion', '3.0')
root.set('createTime', datetime.datetime.now().isoformat(timespec='seconds'))
root.set('creator', 'oTime')
root.set('status', 'Complete')
tree = ET.ElementTree(root)
event = ET.SubElement(root, 'Event')
xml_child(event, 'Id', self.id)
xml_child(event, 'Name', self.name)
for i in self.o_classes:
print('Hmmmmmm')
# <ClassResult>
class_result = ET.SubElement(root, 'ClassResult')
# <Class>
t = ET.SubElement(class_result, 'Class')
xml_child(t, 'Name', i.name)
# <PersonResult>
runners_same_c = get_runners_in_class(self.runners, i)
runners_ranked = rank_runners(runners_same_c, i)
# Put the OK runners first and Active last
runners_sorted = [i for i in runners_same_c if i not in runners_ranked]
runners_ranked.extend(runners_sorted)
for n in runners_ranked:
if n.status() == 'Active':
continue
person_result = ET.SubElement(class_result, 'PersonResult')
# <Person>
person = ET.SubElement(person_result, 'Person')
xml_child(person, 'Id', n.id)
# <Name>
name = ET.SubElement(person, 'Name')
xml_child(name, 'Family', n.last)
xml_child(name, 'Given', n.first)
# </Name>
# </Person>
# <Organisation>
org = ET.SubElement(person_result, 'Organisation')
xml_child(org, 'Id', n.club_id)
xml_child(org, 'Name', n.club)
country = ET.SubElement(org, 'Country')
# TODO: hent land fra løperobjektet
country.text = 'Norway'
country.set('code', 'NOR')
# </Organisation>
# <Result>
result = ET.SubElement(person_result, 'Result')
# TODO: Dette bør skrives om til å bruke Runner metoder så mye som mulig.
if hasattr(n, 'card_r') and len(n.card_r.splits) > 2:
xml_child(result, 'StartTime', n.card_r.s_time.isoformat())
xml_child(result, 'FinishTime', n.card_r.f_time.isoformat())
xml_child(result, 'Time', n.totaltime())
if n.status() == 'OK':
# <TimeBehind>
xml_child(result, 'TimeBehind', n.totaltime() - runners_ranked[0].totaltime())
# </TimeBehind>
xml_child(result, 'Position', n.rank(self.runners))
xml_child(result, 'Status', n.status())
# <SplitTime>
# TODO: ta utgangspunkt i løypa, ikke det brikka har stempla
for code, split in zip(n.card_r.controls, n.card_r.splits):
st = ET.SubElement(result, 'SplitTime')
xml_child(st, 'ControlCode', code)
xml_child(st, 'Time', split)
if code == n.res_codes()[-1]:
break
# </SplitTime>
elif n.status() == 'Disqualified':
xml_child(result, 'Status', n.status())
for code, split in zip(n.res_codes(), n.res_splits()):
st = ET.SubElement(result, 'SplitTime')
xml_child(st, 'ControlCode', code)
if split is not None:
xml_child(st, 'Time', split)
else:
xml_child(result, 'Status', n.status())
else:
xml_child(result, 'Status', n.status())
# </Result>
# </PersonResult>
# </Class>
ET.indent(root, space=' ', level=0)
return tree
def create_json_file(self):
rdicts = []
for runner in self.runners:
rdicts.append(runner.asdict())
cdicts = []
for course in self.courses:
cdicts.append(course.asdict())
ocdicts = []
for o_class in self.o_classes:
ocdicts.append(o_class.asdict())
ddicts = []
for dump in self.card_dumps:
ddicts.append(dump.asdict())
fdicts = []
for fee in self.fees:
fdicts.append(fee.asdict())
json_data = {
'id': self.id,
'name': self.name,
'orginser': self.organiser,
'start_time': self.start_time.isoformat(),
'end_time': self.end_time.isoformat(),
'runners': rdicts,
'courses': cdicts,
'o_classes': ocdicts,
'card_dumps': ddicts,
'fees': fdicts
}
return json.dumps(json_data, sort_keys=True, indent=4)
# Get event object from .otime json file
def from_json(f):
data = json.load(f)
runners = []
for r in data['runners']:
runners.append(Runner(r['id'], r['first'], r['last'], club_id=r['club_id'],
club=r['club'], country=r['country'], card=r['card'],
o_class_str=r['o_class_str'], fork=r['fork'],
start_time=r['start_time'], fee_id=int(r['fee_id'])))
courses = []
for c in data['courses']:
courses.append(Course(c['name'], c['codes'], forked=c['forked'],
variations=c['variations']))
o_classes = []
for c in data['o_classes']:
o_classes.append(OClass(c['name'], c['course_str'], None))
card_dumps = []
for d in data['card_dumps']:
card_dumps.append(CardDump(d['card'], d['controls'], d['splits'],
datetime.datetime.fromisoformat(d['read_time']),
datetime.datetime.fromisoformat(d['s_time']),
datetime.datetime.fromisoformat(d['f_time'])))
fees = []
for f in data['fees']:
fees.append(Fee(f['id'], f['name'], f['currency'], f['amount'],
from_birth_date=f['from_birth_date'],
to_birth_date=f['to_birth_date']))
return Event(data['id'], data['name'], organiser=data['orginiser'],
start_time=datetime.datetime.fromisoformat(data['start_time']),
end_time=datetime.datetime.fromisoformat(data['end_time']),
runners=runners, courses=courses, o_classes=o_classes,
card_dumps=card_dumps, fees=fees)
def create_start_list_pdf(self, file_name):
pdf = FPDF()
pdf.add_page()
pdf.add_font("LiberationSans", fname="data/fonts/LiberationSans-Regular.ttf")
pdf.set_font("LiberationSans", size=10)
line_height = pdf.font_size * 2
col_width = pdf.epw / 4 # distribute content evenly
for runner in self.runners:
pdf.multi_cell(col_width, line_height, runner.fullname(), border=1, ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(col_width, line_height, runner.o_class_str, border=1, ln=3, max_line_height=pdf.font_size)
pdf.multi_cell(col_width, line_height, str(runner.card), border=1, ln=3, max_line_height=pdf.font_size)
if runner.start_time is not None:
pdf.multi_cell(col_width, line_height, str(runner.start_time), border=1, ln=3, max_line_height=pdf.font_size)
else:
pdf.multi_cell(col_width, line_height, '', border=1, ln=3, max_line_height=pdf.font_size)
pdf.ln(line_height)
pdf.output(file_name)
def create_all_invoices(self, filename_prefix):
clubs = [x.club for x in self.runners if x.club != self.runners[self.runners.index(x)-1].club and x.club is not None]
for club in clubs:
self.create_club_invoice(club, filename_prefix + club + '.pdf')
def create_club_invoice(self, club, file_name):
# Get only runners in specified club
runners_ic = [x for x in self.runners if x.club == club]
payments = [x.fee.amount for x in runners_ic]
subtotal = sum(payments)
# Dict of runners in each fee
fee_dict = {}
for fee in self.fees:
fee_dict.update({fee.name: [x for x in runners_ic if x.fee.name == fee.name]})
if len(fee_dict[fee.name]) == 0:
fee_dict.pop(fee.name)
pdf = PDF()
pdf.set_title(f'Faktura {self.name} {club}')
pdf.set_producer('oTime 0.0.1')
pdf.set_creator('oTime 0.0.1')
pdf.set_creation_date()
pdf.add_page()
pdf.add_font("LiberationSans", fname="data/fonts/LiberationSans-Regular.ttf")
pdf.add_font("LiberationSans-Bold", fname="data/fonts/LiberationSans-Bold.ttf")
pdf.set_font("LiberationSans", size=10)
line_height = pdf.font_size * 1.5
# Topp venstre:
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(pdf.epw / 2, line_height, self.name, align='L')
pdf.ln(0.2)
pdf.set_font("LiberationSans", size=10)
pdf.multi_cell(pdf.epw / 2, line_height, self.organiser, align='L')
pdf.ln(14)
pdf.multi_cell(pdf.epw / 2, line_height, club, align='L')
pdf.ln()
# Topp høyre:
pdf.set_xy(-pdf.epw / 3, 10)
pdf.set_font("LiberationSans-Bold", size=20)
pdf.multi_cell(pdf.epw, line_height, 'Faktura', align='L')
pdf.set_xy(-pdf.epw / 3, 20)
# Dato
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(0, line_height, 'Dato:', align='L')
pdf.set_xy(-pdf.epw / 3, 20)
pdf.set_font("LiberationSans", size=10)
pdf.multi_cell(0, line_height, datetime.date.today().strftime('%d.%m.%Y'), align='R')
# Nummer
pdf.set_xy(-pdf.epw / 3, 20 + line_height)
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(0, line_height, 'Nummer:', align='L')
pdf.set_xy(-pdf.epw / 3, 20 + line_height)
pdf.multi_cell(0, line_height, '1', align='R')
# Kundeid
pdf.set_xy(-pdf.epw / 3, 20 + line_height*2)
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(0, line_height, 'Kundeid:', align='L')
pdf.set_xy(-pdf.epw / 3, 20 + line_height*2)
pdf.set_font("LiberationSans", size=10)
pdf.multi_cell(0, line_height, '123', align='R')
# Forfall
pdf.set_xy(-pdf.epw / 3, 20 + line_height*3)
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(0, line_height, 'Forfall:', align='L')
pdf.set_xy(-pdf.epw / 3, 20 + line_height*3)
pdf.set_font("LiberationSans", size=10)
pdf.multi_cell(0, line_height, datetime.date.today().strftime('%d.08.%Y'), align='R')
pdf.set_xy(-pdf.epw, 20 + line_height*5)
pdf.set_font("LiberationSans-Bold", size=10)
date = self.start_time.strftime('%d.%m.%Y')
pdf.multi_cell(0, line_height, f'Kontingentliste {self.name} dato: {date}', align='R')
pdf.ln()
pdf.set_font("LiberationSans", size=10)
# Tabell
line_height = pdf.font_size * 2
col_width = pdf.epw / 8 # distribute content evenly
# Top row
pdf.set_fill_color(191, 191, 191)
pdf.set_draw_color(191, 191, 191)
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(col_width, line_height, 'Startnr', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width*2, line_height, 'Navn', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Klasse', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Brikke', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
# pdf.multi_cell(col_width, line_height, 'Starttid', border=1, ln=3,max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Resultat', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Plass', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Kontigent', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.ln()
pdf.set_draw_color(0, 0, 0)
for runners in fee_dict.values():
pdf.set_font("LiberationSans-Bold", size=11)
pdf.multi_cell(len(runners[0].fee.name)*2.3, pdf.font_size * 1.1, runners[0].fee.name, border='B', align='L')
pdf.set_font("LiberationSans", size=8)
line_height = pdf.font_size * 1.6
pdf.ln()
for runner in runners:
pdf.multi_cell(col_width, line_height, runner.id, ln=3, max_line_height=pdf.font_size, align='L') # Start Number
pdf.multi_cell(col_width*2, line_height, f'{runner.last}, {runner.first}', ln=3, max_line_height=pdf.font_size, align='L') # Name
pdf.multi_cell(col_width, line_height, runner.o_class_str, ln=3, max_line_height=pdf.font_size, align='L') # Class
pdf.multi_cell(col_width, line_height, str(runner.card), ln=3, max_line_height=pdf.font_size) # card
# Starttime:
#if runner.start_time != None:
# pdf.multi_cell(col_width, line_height, str(runner.start_time), ln=3, max_line_height=pdf.font_size)
#else:
# pdf.multi_cell(col_width, line_height, 'Fristart', ln=3, max_line_height=pdf.font_size)
# Time used:
if runner.status() == 'OK':
pdf.multi_cell(col_width, line_height, str(datetime.timedelta(seconds=runner.totaltime())), ln=3, max_line_height=pdf.font_size)
elif runner.status() == 'Disqualified':
pdf.multi_cell(col_width, line_height, 'DSQ', ln=3, max_line_height=pdf.font_size)
elif runner.status() == 'Active':
pdf.multi_cell(col_width, line_height, 'DNS', ln=3, max_line_height=pdf.font_size)
else:
pdf.multi_cell(col_width, line_height, runner.status(), ln=3, max_line_height=pdf.font_size)
# Rank:
if runner.status() == 'OK':
pdf.multi_cell(col_width, line_height, str(runner.rank(self.runners)) + '.', ln=3, max_line_height=pdf.font_size)
else:
pdf.multi_cell(col_width, line_height, '', ln=3, max_line_height=pdf.font_size)
pdf.multi_cell(col_width, line_height, str(runner.fee.amount), ln=3, max_line_height=pdf.font_size, align='R')
pdf.ln(line_height)
pdf.set_draw_color(0, 0, 0)
# sum
pdf.set_font("LiberationSans-Bold", size=10)
pdf.set_x(col_width*8)
pdf.cell(0, line_height, 'Sum ' + str(subtotal), border='TB', align='R')
pdf.set_font("LiberationSans", size=10)
line_height = pdf.font_size * 1.5
pdf.ln(20)
pdf.multi_cell(0, line_height, 'Antall løpere ' + str(len(runners_ic)), ln=3, max_line_height=pdf.font_size, align='L')
pdf.set_x(col_width*7)
pdf.multi_cell(col_width, line_height, 'Total sum', ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(0, line_height, str(subtotal), ln=3, max_line_height=pdf.font_size, align='R')
pdf.ln()
pdf.set_x(col_width*7)
pdf.multi_cell(col_width, line_height, 'Betalt', ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(0, line_height, '0', ln=3, max_line_height=pdf.font_size, align='R')
pdf.ln()
pdf.set_font("LiberationSans-Bold", size=10)
pdf.set_x(col_width*7)
pdf.multi_cell(col_width, line_height, 'Skyldig', border='B', ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(0, line_height, str(subtotal), border='B',ln=3, max_line_height=pdf.font_size, align='R')
pdf.output(file_name)
"""
class PDF(FPDF):
def footer(self):
self.set_y(-15)
self.set_font("LiberationSans", size=10)
self.set_fill_color(191, 191, 191)
self.set_draw_color(191, 191, 191)
col_width = self.epw / 3
self.cell(col_width, 7, 'oTime', border=1, align='L', fill=True)
self.cell(col_width, 7, datetime.datetime.now().strftime('%d.%m.%Y %H:%M:%S'), border=1, align='C', fill=True)
self.cell(col_width, 7, f"Side {self.page_no()} av {{nb}}", border=1, align='R', fill=True)
"""
# The runner object stores all the data specific to a runner.
class Runner:
def __init__(self, runner_id, first, last, club=None, club_id=None,
country=None, card=None, o_class_str=None, o_class=None,
fork=0, start_time=None, fee_id=None, fee=None):
self.id = runner_id
self.first = first
self.last = last
self.club = club
self.club_id = club_id
self.country = country
self.card = card
self.o_class_str = o_class_str
self.o_class = o_class
self.fork = fork
self.start_time = start_time
self.fee_id = fee_id
self.fee = fee
def from_string(tt_line, o_classes):
#https://web.archive.org/web/20191229124046/http://wiki.ttime.no/index.php/Developer
eventorid = tt_line[0]
country = ''
name = tt_line[2].split(',')
try:
first = name[1].strip()
except:
first = ''
last = name[0]
try:
club = tt_line[4]
except:
club = "None"
try:
card = int(tt_line[6])
except:
card = 0
runner_o_class = None
try:
raw_class_str = tt_line[3]
except:
# VELDIG MIDLERTIDIG
runner_o_class = None
else:
if raw_class_str != '':
for i in o_classes:
if i.name == raw_class_str:
runner_o_class = i
break
else:
runner_o_class = None
# TODO: Gjør sånn at den lager nye o klasser om den ikke finnes fra før
options = tt_line[5].split(',')
try:
club_id = options[options.index('A')+3]
except:
club_id = 0
try:
start_time = options[options.index('U')+1]
except:
start_time = None
return Runner(eventorid, first, last, club=club, club_id=club_id,
country=country, card=card, o_class_str=raw_class_str,
o_class=runner_o_class, start_time=start_time)
def fullname(self):
return '{} {}'.format(self.first, self.last)
def check_codes(self):
return contains(self.res_codes(), self.card_r.controls)
def totaltime(self):
f_control = self.res_codes()[-1]
try:
index = self.card_r.controls.index(f_control)
return self.card_r.splits[index]
except:
return 0
def status(self):
if hasattr(self, 'card_r') is False or self.o_class is None:
return 'Active'
elif self.check_codes():
return 'OK'
elif self.check_codes() is False:
return 'Disqualified'
# TODO: må forbedres
def rank(self, allrunners):
c_ranked = rank_runners(allrunners, self.o_class)
try:
return c_ranked.index(self) + 1
except ValueError:
return None
def res_codes(self):
if self.o_class.course.forked is False:
return self.o_class.course.codes
else:
return self.o_class.course.variations[self.fork]
# TODO: Mange bugs med løyper som har samme post flere ganger
# Used for making result files and tables
def res_splits(self):
if self.status() == 'OK':
splits_cpy = self.card_r.splits.copy()
for control in self.card_r.controls:
if control not in self.res_codes():
index = self.card_r.controls.index(control)
split = self.card_r.splits[index]
splits_cpy.remove(split)
return splits_cpy
else:
splits_cpy = self.card_r.splits.copy()
for control in self.card_r.controls:
if control not in self.res_codes():
index = self.card_r.controls.index(control)
split = self.card_r.splits[index]
splits_cpy.remove(split)
punches = self.card_r.controls.copy()
splits = []
for code in self.res_codes():
if punches[0] == code:
splits.append(splits_cpy[0])
splits_cpy.pop(0)
punches.pop(0)
continue
else:
splits.append(None)
return splits
def asdict(self):
return {
'id': self.id,
'first': self.first,
'last': self.last,
'club_id': self.club_id,
'club': self.club,
'country': self.country,
'card': self.card,
'o_class_str': self.o_class_str,
'fork' : self.fork,
'start_time': self.start_time,
'fee_id': self.fee_id
}
class CardDump:
def __init__(self, card, controls, splits, read_time, s_time, f_time):
self.card = card
self.controls = controls
self.splits = splits
self.read_time = read_time
self.s_time = s_time
self.f_time = f_time
def __repr__(self):
return f'card({self.card}) controls({self.controls}) splits({self.splits})'
def from_mtr_bytes(datamsg):
card = int.from_bytes(datamsg[20:23], 'little')
#Extract codes and splits:
controls = []
splits = []
splits_offset = 26
code_numbytes = 1
time_numbytes = 2
split_numbytes = code_numbytes + time_numbytes
for split_index in range(50):
code_offset = splits_offset + split_index * split_numbytes
time_offset = code_offset + code_numbytes
code = int.from_bytes(datamsg[code_offset:code_offset+code_numbytes], 'little')
time = int.from_bytes(datamsg[time_offset:time_offset+time_numbytes], 'little')
if code != 0:
controls.append(code)
splits.append(time)
# Extract start time:
year = int.from_bytes(datamsg[8:9], 'little')
month = int.from_bytes(datamsg[9:10], 'little')
day = int.from_bytes(datamsg[10:11], 'little')
hours = int.from_bytes(datamsg[11:12], 'little')
minutes = int.from_bytes(datamsg[12:13], 'little')
seconds = int.from_bytes(datamsg[13:14], 'little')
milliseconds = int.from_bytes(datamsg[14:16], 'little')
read_time = datetime.datetime(year, month, day, hours, minutes, seconds, milliseconds)
if len(controls) > 2:
s_time = read_time - datetime.timedelta(seconds=splits[-1])
f_time = read_time - (datetime.timedelta(seconds=splits[-1]) + datetime.timedelta(seconds=splits[-2]))
else:
s_time = read_time
f_time = read_time
return(CardDump(card, controls, splits, read_time, s_time, f_time))
def list_from_mtr_f(mtr_f):
if type(mtr_f) == str:
f_list = mtr_f.splitlines()
rows = []
cards = []
# hver rad er brikkenummer med tilhørende info
csvreader = csv.reader(f_list)
for row in csvreader:
if len(row) == 0:
continue
rows.append(row)
controls = []
splits = []
# postkodene kommer på oddetall fra og med den 11. De blir hevet inn i controls
for item in row[11::2]:
if item == '250':
controls.append(int(item))
break
elif item == '000':
break
else:
controls.append(int(item))
# strekktidene kommer på partall fra og med den 12. De blir hevet i splits.
for item in row[12::2]:
if item == '00000':
break
else:
splits.append(int(item))
# looper gjonnom løperobjektene og legger til poster og strekktider + start og sluttid
# usikker på om dette er riktig klokeslett
tl = row[5].split(' ')
tl[0] = tl[0].split('.')
tl[0][2] = '20' + tl[0][2]
tl[0] = list(map(int, tl[0]))
tl[1] = tl[1].split(':')
tl[1][2] = float(tl[1][2])
tl[1] = list(map(int, tl[1]))
read_time = datetime.datetime(tl[0][2], tl[0][1], tl[0][0], tl[1][0], tl[1][1], tl[1][2])
if len(controls) > 2 and len(splits) > 2:
s_time = read_time - datetime.timedelta(seconds=splits[-1])
f_time = read_time - (datetime.timedelta(seconds=splits[-1]) + datetime.timedelta(seconds=splits[-2]))
else:
s_time = read_time
f_time = read_time
cards.append(CardDump(int(row[6]), controls, splits, read_time, s_time, f_time))
return cards
def asdict(self):
return {
'card': self.card,
'controls': self.controls,
'splits': self.splits,
'read_time': self.read_time.isoformat(),
's_time': self.s_time.isoformat(),
'f_time': self.f_time.isoformat()
}
# Stored in Event.courses
class Course:
def __init__(self, name, codes, forked=False, variations=None):
self.name = name
self.codes = codes
self.forked = forked
self.variations = variations
def __repr__(self):
return f'name({self.name})'
def asdict(self):
return {
'name': self.name,
'codes': self.codes,
'forked': self.forked,
'variations': self.variations
}
# Stored in Event.o_classes
class OClass:
def __init__(self, name, course_str, course):
self.name = name
self.course_str = course_str
self.course = course
def __repr__(self):
return f'name({self.name})'
def asdict(self):
return {
'name': self.name,
'course_str': self.course_str
}
class Fee:
def __init__(self, fee_id, name, currency, amount, from_birth_date=None,
to_birth_date=None):
self.id = fee_id
self.name = name
self.currency = currency
self.amount = amount
self.from_birth_date = from_birth_date
self.to_birth_date = to_birth_date
def asdict(self):
return {
'id': self.id,
'name': self.name,
'currency': self.currency,
'amount': self.amount,
'from_birth_date': self.from_birth_date,
'to_birth_date': self.to_birth_date
}
# TODO: Take string instead of file.
def courses_from_ttime_conf(ttime_file):
if type(ttime_file) == str:
conf = ttime_file.splitlines()
elif isinstance(ttime_file, io.TextIOBase):
conf = ttime_file.readlines()
courses = []
for line in conf:
if '-codes' in line:
code_list = re.search(r'(?<=\")(.*?)(?=\")', line).group().split(';')
loops = 0
for n in code_list:
n = n.split(',')
loops += 1
n = list(map(int, n))
courses.append(Course('course_'+str(loops), n))
return courses
def classes_from_ttime_conf(ttime_file, courses):
if type(ttime_file) == str:
conf = ttime_file.splitlines()
elif isinstance(ttime_file, io.TextIOBase):
conf = ttime_file.readlines()
o_classes = []
for line in conf:
if '-courses' in line:
raw_courselist = re.search(r'(?<=\")(.*?)(?=\")', line).group().split(';')
loops = 0
for n in raw_courselist:
split = n.split(',')
for i in split:
o_classes.append(OClass(i, courses[loops].name, courses[loops]))
loops += 1
return o_classes
def runners_from_xml_entries(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
runners = []
person_entries = root.findall(f'./{url}PersonEntry')
for p_entry in person_entries:
rid = p_entry[1][0].text
person = p_entry.find(f'./{url}Person')
name = person.find(f'./{url}Name')
first = name.find(f'./{url}Given').text
last = name.find(f'./{url}Family').text
organisation = p_entry.find(f'./{url}Organisation')
if organisation is not None:
club_id = organisation.find(f'./{url}Id').text
club_name = organisation.find(f'./{url}Name').text
club_name_short = organisation.find(f'./{url}ShortName').text
country = organisation.find(f'./{url}Country').attrib['code']
else:
club_id = club_name = club_name_short = country = None
class_el = p_entry.find(f'./{url}Class')
class_str = class_el.find(f'./{url}Name').text
fee_id = int(p_entry.find(f'./{url}AssignedFee/{url}Fee/{url}Id').text)
try:
card = int(p_entry.find(f'./{url}ControlCard').text)
except AttributeError:
card = None
start_time = None
runners.append(Runner(rid, first, last, club=club_name, club_id=club_id,
country=country,card=card, o_class_str=class_str,
start_time=start_time, fee_id=fee_id))
return runners
def fees_from_xml_entries(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
allfees = root.findall(f'.//{url}Fee')
added_ids = []
fee_objs = []
for fee in allfees:
f_id = int(fee.find(f'./{url}Id').text)
if f_id not in added_ids:
added_ids.append(f_id)
fee_id = f_id
name = fee.find(f'./{url}Name').text
currency = fee.find(f'./{url}Amount').attrib['currency']
amount = int(fee.find(f'./{url}Amount').text)
try:
from_birth_date = fee.find(f'./{url}FromDateOfBirth').text
except AttributeError:
from_birth_date = None
try:
to_birth_date = fee.find(f'./{url}ToDateOfBirth').text
except AttributeError:
to_birth_date = None
fee_objs.append(Fee(fee_id, name, currency, amount,
from_birth_date=from_birth_date, to_birth_date=to_birth_date))
return fee_objs
# Checks if small list is in big list
def contains(small, big):
valid = True
mark = 0
map_bl = []
for i in small:
for n, control in enumerate(big[mark:]):
if i == control:
mark += n
map_bl.append(mark)
break
else:
valid = False
if valid:
return map_bl
else:
return False
def get_runners_in_class(runners, o_class):
# Filters out runner objects that dont have the correct o_class
list_filtrd = []
for i in runners:
if i.o_class == o_class:
list_filtrd.append(i)
return list_filtrd
def rank_runners(allrunners, o_class):
runners = get_runners_in_class(allrunners, o_class)
runners_ranked = []
for i in runners:
if i.status() == 'OK':
runners_ranked.append(i)
runners_ranked.sort(key=lambda x: x.totaltime())
return runners_ranked
# Used to make creating xml files easier
def xml_child(parent, tag, content):
e = ET.SubElement(parent, tag)
e.text = str(content)

View File

@ -1,2 +0,0 @@
from cli import main
main()

View File

@ -1,178 +0,0 @@
import argparse
import file_io
import datetime
import iof_xml
import serial
import subprocess
import os
import otime
import iof_xml
import pdf
from pdf import format_m_s
from rich import print
import search_tui
from rich.traceback import install
from rich import inspect
install(show_locals=True)
# Main entrypoint for now. Cli with two options; init will make the files needed and run will start the program from the specified directory
def main():
parser = argparse.ArgumentParser(description='Otime very alpha version 😁')
subparsers = parser.add_subparsers(dest='command')
parser_init = subparsers.add_parser('init', help='Create project files')
parser_init.add_argument('--entries', required=True, dest='entries_file', action='store', default='./',
help='The xml file with entries')
parser_init.add_argument('--courses', required=True, dest='courses_file', action='store', default='./',
help='The xml with courses')
parser_init.add_argument('--dir', required=False, dest='dir', action='store', default='./',
help='Specify a directort, if not set the files are created in the current directory')
parser_init = subparsers.add_parser('run', help='run otime')
parser_init.add_argument('--dir', required=False, dest='dir', action='store', default='./', help='specify a directory')
parser_init.add_argument('--port', required=False, dest='port', action='store', help='specify a serial port')
parser_init.add_argument('--xml', required=False, dest='xml_path', action='store', default=None, help='Where the xml result file should be saved')
parser_init = subparsers.add_parser('gen', help='Generate result files')
parser_init.add_argument('--dir', required=False, dest='dir', action='store', default='./', help='specify a directory')
parser_init.add_argument('--xml', required=False, dest='xml_path', action='store', default=None, help='Where the xml result file should be saved')
parser_init = subparsers.add_parser('view', help='View otime data')
parser_init.add_argument('--dir', required=False, dest='dir', action='store', default='./', help='specify a directory')
parser_init.add_argument('--xml', required=False, dest='xml_path', action='store', default=None, help='Where the xml result file should be saved')
parser_init = subparsers.add_parser('mtr', help='run mtr commands')
parser_init.add_argument('--port', required=True, dest='port', action='store', help='specify a serial port')
parser_init.add_argument('--spool', required=False, dest='mtr_spool', action='store_true', help='Spool all mtr data')
parser_init.add_argument('--status', required=False, dest='mtr_status', action='store_true', help='Spool all mtr data')
args = parser.parse_args()
try:
if not args.xml_path:
args.xml_path = args.dir + '/output'
except AttributeError:
pass
match args.command:
case 'init':
init_dir(args.dir, args.entries_file, args.courses_file)
case 'run':
run(args.port, args.dir, args.xml_path)
case 'view':
search_tui.main(args.dir)
case 'gen':
gen(args.dir, args.xml_path)
case 'mtr':
mtr = serial.Serial(port=args.port, baudrate=9600, timeout=40)
if args.mtr_spool:
mtr.write(b'/SA')
if args.mtr_status:
mtr.write(b'/ST')
case other:
parser.print_help()
def init_dir(project_dir, entries_xml_file, courses_xml_file):
# Lager mappe med en config fil, en csv fil med løpere og en fil med mtr data
csv_db_path = project_dir + '/runners.csv'
config_path = project_dir + '/config.yaml'
mtr_path = project_dir + 'mtr.yaml'
event = iof_xml.event_from_xml_entries(entries_xml_file)
event.courses = iof_xml.courses_from_xml(courses_xml_file)
print(f'Read {len(event.runners)} runners, {len(event.card_dumps)} ecards, {len(event.courses)} courses and {len(event.o_classes)} classes')
print('Remember to manually link the courses and classes in the config file')
file_io.write_runners_csv(event, csv_db_path)
file_io.write_config(event, config_path)
file_io.write_card_dumps(event, mtr_path)
os.makedirs(project_dir+'/output')
subprocess.run(['git', 'init', project_dir])
subprocess.run(['git', 'add', './*'], cwd=project_dir)
subprocess.run(['git', 'commit', '-m', f'Project initiated by otime'], cwd=project_dir)
def run(port='/dev/ttyUSB0', project_dir='./', xml_path='./output/'):
mtr = serial.Serial(port=port, baudrate=9600, timeout=40)
config_path = project_dir + '/config.yaml'
mtr_path = project_dir + '/mtr.yaml'
csv_path = project_dir + '/runners.csv'
while True:
if mtr.in_waiting > 0:
block = mtr.read_until(expected=b'\xFF\xFF\xFF\xFF')
size = block[0]
if size == 230:
event = file_io.event_from_yaml_and_csv(config_path, mtr_path, csv_path)
message = b'\xFF\xFF\xFF\xFF' + block[:230]
if not is_checksum_valid(message):
print('[red]Checksum is not valid![red]')
try:
print(otime.CardDump.from_mtr_bytes(message))
print(runner_info(event, card_dump))
except Exception as error:
print(error)
else:
card_dump = otime.CardDump.from_mtr_bytes(message)
event.card_dumps.append(card_dump)
file_io.write_card_dumps(event, mtr_path)
print(runner_info(event, card_dump))
subprocess.run(['git', 'add', './*'], cwd=project_dir, stdout=subprocess.DEVNULL)
subprocess.run(['git', 'commit', '-m', f'Added {card_dump.card}'], cwd=project_dir, stdout=subprocess.DEVNULL)
iof_xml.create_result_file(event, xml_path + '/results.xml')
pdf.create_result_list(event, project_dir + '/output/results.pdf')
elif size == 55:
message = b'\xFF\xFF\xFF\xFF' + block[:55]
mtr_id = int.from_bytes(message[6:8], 'little')
year = int.from_bytes(message[8:9], 'little')
month = int.from_bytes(message[9:10], 'little')
day = int.from_bytes(message[10:11], 'little')
hours =int.from_bytes(message[11:12], 'little')
minutes = int.from_bytes(message[12:13], 'little')
seconds = int.from_bytes(message[13:14], 'little')
milliseconds =int.from_bytes(message[14:16], 'little')
battery_status = int.from_bytes(message[16:17], 'little')
time = datetime.datetime(year, month, day, hours, minutes, seconds, milliseconds)
print(f'MTR status message: id: {mtr_id}, time: {time}, battery: {battery_status}')
else:
print('Data not found!')
print(block)
def gen(project_dir='./', xml_path='./output/'):
config_path = project_dir + '/config.yaml'
mtr_path = project_dir + '/mtr.yaml'
csv_path = project_dir + '/runners.csv'
event = file_io.event_from_yaml_and_csv(config_path, mtr_path, csv_path)
subprocess.run(['git', 'add', './*'], cwd=project_dir, stdout=subprocess.DEVNULL)
subprocess.run(['git', 'commit', '-m', f'Manually run'], cwd=project_dir, stdout=subprocess.DEVNULL)
iof_xml.create_result_file(event, xml_path + '/results.xml')
pdf.create_result_list(event, project_dir + '/output/results.pdf')
def runner_info(event, card_dump):
runner = next((i for i in event.runners if str(i.card_id) == str(card_dump.card)), None)
if runner is None:
return f'[orange_red1]No runner with ecard {card_dump.card}! It matches these courses: {otime.find_courses_matching_controls(card_dump.controls, event.courses)}[/orange_red1] {card_dump}'
result = event.get_runner_result(runner.id)
if result is None:
return '🧐 Dette skal ikke skje...'
if result.status == 'OK':
result_text = f'[green]Place: {result.place}. Time: [bold][yellow]{format_m_s(result.total_time)}[/yellow][/bold][/green]'
elif result.status == 'MissingPunch':
result_text = f'[red]Missed control(s): {result.missed_controls}! Time: [bold][yellow]{format_m_s(result.total_time)}[/yellow][/bold][/red]'
else:
result_text = f'[blue]{result.status}, Time: [bold][yellow]{result.total_time}[/yellow][/bold][/blue]'
return result_text + f' [blue]{result.fullname()}[/blue], {result.o_class}, {result.club}, [italic]Card: {result.card_id}[/italic]'
def is_checksum_valid(message):
# Hentet fra https://github.com/knutsiem/mtr-log-extractor
checksum = int.from_bytes(message[232:233], 'little')
# calculate checksum for message bytes up until checksum
calculated_checksum = sum(message[:232]) % 256
return checksum == calculated_checksum
if __name__ == '__main__':
main()

View File

@ -1,55 +0,0 @@
from yaml import load, dump
try:
from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
from yaml import Loader, Dumper
from copy import deepcopy
import otime
# Disse funksjonene er for å kunne lese og skrive seperate config, mtr og databasefiler.
def write_config(event, file_path):
output_event = deepcopy(event)
output_event.runners = []
output_event.card_dumps = []
with open(file_path, 'w') as f:
dump(output_event, f)
def write_card_dumps(event, file_path):
card_dumps = deepcopy(event.card_dumps)
with open(file_path, 'w') as f:
dump(card_dumps, f)
def write_runners_csv(event, file_path):
with open(file_path, 'w') as f:
f.write('ID;Status;Fornavn, Etternavn;Klasse;klubb;Brikke;Gafling;Starttid\n')
for i in event.runners:
f.write(f'{i.id};{i.status_override};{i.first}, {i.last};{i.o_class};{i.club};{i.card_id};{i.fork};{i.start_time}\n')
def event_from_yaml_and_csv(config_path, mtr_path, csv_path):
try:
with open(mtr_path, 'r') as f:
card_dumps = load(f, Loader=Loader)
except FileNotFoundError:
card_dumps=[]
with open(config_path, 'r') as f:
event = load(f, Loader=Loader)
with open(csv_path, 'r') as f:
data = [i.split(';') for i in f.readlines()]
data.pop(0)
for i in data: i[2] = i[2].split(',')
for i in data:
# Setter starttid til None hvis den ikke er satt
if len(i[7]) > 8:
i[7] = i[7]
else:
i[7] = None
# Sjekk om brikkenummer er tomt
if i[5] == '':
i[5] = 0
runners = [otime.Runner(id=i[0], status_override=i[1], first=i[2][0], last=i[2][1].strip(), o_class=i[3], club=i[4], card_id=int(i[5]), fork=int(i[6]), start_time=i[7]) for i in data]
event.card_dumps = card_dumps
event.runners = runners
return event

View File

@ -1,212 +0,0 @@
import datetime
import xml.etree.ElementTree as ET
import otime
def xml_child(parent, tag, content):
# Used to make creating xml files easier
e = ET.SubElement(parent, tag)
e.text = str(content)
def create_result_file(event, file_path, o_classes=[]):
results = event.get_result(o_classes)
root = ET.Element('ResultList')
root.set('xmlns', 'http://www.orienteering.org/datastandard/3.0')
root.set('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance')
root.set('iofVersion', '3.0')
root.set('createTime', datetime.datetime.now().isoformat(timespec='seconds'))
root.set('creator', 'oTime')
#root.set('status', 'Complete')
tree = ET.ElementTree(root)
xml_event = ET.SubElement(root, 'Event')
xml_child(xml_event, 'Id', event.id)
xml_child(xml_event, 'Name', event.name)
for i in results:
# <ClassResult>
class_result = ET.SubElement(root, 'ClassResult')
# <Class>
t = ET.SubElement(class_result, 'Class')
xml_child(t, 'Name', i.name)
# <PersonResult>
for n in i.runner_results:
if n.status == 'DidNotStart':
continue
person_result = ET.SubElement(class_result, 'PersonResult')
# <Person>
person = ET.SubElement(person_result, 'Person')
xml_child(person, 'Id', n.id)
# <Name>
name = ET.SubElement(person, 'Name')
xml_child(name, 'Family', n.last)
xml_child(name, 'Given', n.first)
# </Name>
# </Person>
# <Organisation>
org = ET.SubElement(person_result, 'Organisation')
xml_child(org, 'Id', n.club_id)
xml_child(org, 'Name', n.club)
country = ET.SubElement(org, 'Country')
# TODO: hent land fra løperobjektet
country.text = 'Norway'
country.set('code', 'NOR')
# </Organisation>
# <Result>
result = ET.SubElement(person_result, 'Result')
if n.status == 'OK' or n.status == 'MissingPunch':
xml_child(result, 'StartTime', n.start_time.isoformat())
xml_child(result, 'FinishTime', n.end_time.isoformat())
xml_child(result, 'Time', n.total_time)
if n.status == 'OK':
# <TimeBehind>
xml_child(result, 'TimeBehind', n.total_time - i.runner_results[0].total_time)
# </TimeBehind>
xml_child(result, 'Position', n.place)
xml_child(result, 'Status', n.status)
# <SplitTime>
# TODO: ta utgangspunkt i løypa, ikke det brikka har stempla
for code, split in zip(i.course.codes[n.fork][:-1], n.splits[:-1]):
st = ET.SubElement(result, 'SplitTime')
xml_child(st, 'ControlCode', code)
xml_child(st, 'Time', split)
# </SplitTime>
elif n.status == 'MissingPunch':
xml_child(result, 'Status', n.status)
for code, split in zip(i.course.codes[n.fork][:-1], n.splits[:-1]):
st = ET.SubElement(result, 'SplitTime')
xml_child(st, 'ControlCode', code)
if split != 0: xml_child(st, 'Time', split)
else:
xml_child(result, 'Status', n.status)
else:
xml_child(result, 'Status', n.status)
# </Result>
# </PersonResult>
# </Class>
ET.indent(root, space=' ', level=0)
tree.write(file_path)
def runners_from_xml_entries(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
runners = []
person_entries = root.findall(f'./{url}PersonEntry')
for p_entry in person_entries:
rid = p_entry[1][0].text
person = p_entry.find(f'./{url}Person')
name = person.find(f'./{url}Name')
first = name.find(f'./{url}Given').text
last = name.find(f'./{url}Family').text
organisation = p_entry.find(f'./{url}Organisation')
if organisation is not None:
club_id = organisation.find(f'./{url}Id').text
club_name = organisation.find(f'./{url}Name').text
club_name_short = organisation.find(f'./{url}ShortName').text
country = organisation.find(f'./{url}Country').attrib['code']
else:
club_id = club_name = club_name_short = country = None
class_el = p_entry.find(f'./{url}Class')
class_str = class_el.find(f'./{url}Name').text
fee_id = int(p_entry.find(f'./{url}AssignedFee/{url}Fee/{url}Id').text)
try:
card = int(p_entry.find(f'./{url}ControlCard').text)
except AttributeError:
card = None
start_time = None
runners.append(otime.Runner(rid, first, last, club=club_name, club_id=club_id,
country=country,card_id=card, o_class=class_str,
start_time=start_time, fee_id=fee_id))
return runners
def fees_from_xml_entries(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
allfees = root.findall(f'.//{url}Fee')
added_ids = []
fee_objs = []
for fee in allfees:
f_id = int(fee.find(f'./{url}Id').text)
if f_id not in added_ids:
added_ids.append(f_id)
fee_id = f_id
name = fee.find(f'./{url}Name').text
currency = fee.find(f'./{url}Amount').attrib['currency']
amount = int(fee.find(f'./{url}Amount').text)
try:
from_birth_date = fee.find(f'./{url}FromDateOfBirth').text
except AttributeError:
from_birth_date = None
try:
to_birth_date = fee.find(f'./{url}ToDateOfBirth').text
except AttributeError:
to_birth_date = None
fee_objs.append(otime.Fee(fee_id, name, currency, amount,
from_birth_date=from_birth_date, to_birth_date=to_birth_date))
return fee_objs
def courses_from_xml(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
allcourses = root.findall(f'.//{url}Course')
courseobjs = []
for c in allcourses:
name = c.find(f'./{url}Name').text
controls = []
allcontrols = c.findall(f'./{url}CourseControl')
for n in allcontrols:
controls.append(n.find(f'./{url}Control').text)
controls.remove('STA1')
controls.remove('FIN1')
controls = [int(l) for l in controls]
courseobjs.append(otime.Course(name, [controls]))
return courseobjs
def event_from_xml_entries(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
event_el = root.find(f'./{url}Event')
event_id = int(event_el.find(f'./{url}Id').text)
name = event_el.find(f'./{url}Name').text
organiser = event_el.find(f'./{url}Organiser/{url}Name').text
start_ds = event_el.find(f'./{url}StartTime/{url}Date').text
start_ts = event_el.find(f'./{url}StartTime/{url}Time').text[:-1]
start_time = datetime.datetime.fromisoformat(f'{start_ds}T{start_ts}')
end_ds = event_el.find(f'./{url}EndTime/{url}Date').text
end_ts = event_el.find(f'./{url}EndTime/{url}Time').text[:-1]
end_time = datetime.datetime.fromisoformat(f'{end_ds}T{end_ts}')
person_entries = root.findall(f'./{url}PersonEntry')
class_names = []
for p_entry in person_entries:
class_names.append(p_entry.find(f'./{url}Class/{url}Name').text)
o_classes = [otime.OClass(i, []) for i in set(class_names)]
runners = runners_from_xml_entries(xml_file)
# TODO: fiks fees
#fees = fees_from_xml_entries(xml_file)
fees = []
return otime.Event(event_id, name, organiser=organiser, runners=runners,
fees=fees, start_time=start_time, end_time=end_time, o_classes=o_classes)

View File

@ -1,473 +0,0 @@
import copy
import datetime
import re
import xml.etree.ElementTree as etree
class Runner:
def __init__(self, id: int, first: str, last: str, club=None, club_id=None,
country=None, card_id=None, o_class_str=None, o_class=None,
fork=0, start_time=None, fee_id=None, fee=None, status_override=''):
self.id = id
self.first = first
self.last = last
self.club = club
self.club_id = club_id
self.country = country
self.card_id = card_id
self.o_class = o_class
self.fork = fork
self.start_time = start_time
self.fee_id = fee_id
self.status_override = status_override
def __repr__(self):
return(f'name({self.fullname()})')
def from_ttime_string(ttime_db_line):
# Reads 1 line of a ttime db
#https://web.archive.org/web/20191229124046/http://wiki.ttime.no/index.php/Developer
runner_data = ttime_db_line.split(';')
eventorid = runner_data[0]
country = ''
name = runner_data[2].split(',')
try:
first = name[1].strip()
except:
first = ''
last = name[0]
try:
club = runner_data[4]
except:
club = ''
try:
card = int(runner_data[6])
except:
card = 0
try:
o_class = runner_data[3]
except:
o_class = ''
options = runner_data[5].split(',')
try:
club_id = options[options.index('A')+3]
except:
club_id = 0
try:
start_time = options[options.index('U')+1]
except:
start_time = None
return Runner(eventorid, first, last, club=club, club_id=club_id,
country=country, card_id=card, o_class=o_class, start_time=start_time)
def fullname(self):
return '{} {}'.format(self.first, self.last)
class CardDump:
def __init__(self, card, controls, splits, read_time, s_time, f_time):
self.card = card
self.controls = controls
self.splits = splits
self.read_time = read_time
self.s_time = s_time
self.f_time = f_time
def __repr__(self):
return f'card({self.card}) controls({self.controls}) splits({self.splits})'
def from_mtr_bytes(datamsg):
card = int.from_bytes(datamsg[20:23], 'little')
#Extract codes and splits:
controls = []
splits = []
splits_offset = 26
code_numbytes = 1
time_numbytes = 2
split_numbytes = code_numbytes + time_numbytes
for split_index in range(50):
code_offset = splits_offset + split_index * split_numbytes
time_offset = code_offset + code_numbytes
code = int.from_bytes(datamsg[code_offset:code_offset+code_numbytes], 'little')
time = int.from_bytes(datamsg[time_offset:time_offset+time_numbytes], 'little')
if code != 0:
controls.append(code)
splits.append(time)
# Extract start time:
year = 2000 + int.from_bytes(datamsg[8:9], 'little')
month = int.from_bytes(datamsg[9:10], 'little')
day = int.from_bytes(datamsg[10:11], 'little')
hours = int.from_bytes(datamsg[11:12], 'little')
minutes = int.from_bytes(datamsg[12:13], 'little')
seconds = int.from_bytes(datamsg[13:14], 'little')
milliseconds = int.from_bytes(datamsg[14:16], 'little')
read_time = datetime.datetime(year, month, day, hours, minutes, seconds, milliseconds)
if len(controls) > 2:
s_time = read_time - datetime.timedelta(seconds=splits[-1])
f_time = read_time - (datetime.timedelta(seconds=splits[-1]) + datetime.timedelta(seconds=splits[-2]))
else:
s_time = read_time
f_time = read_time
return(CardDump(card, controls, splits, read_time, s_time, f_time))
def list_from_mtr_f(mtr_file):
with open(mtr_file) as f:
data = [i.replace('"','').split(',') for i in f.readlines()]
cards = []
# hver rad er brikkenummer med tilhørende info
for row in data:
controls = []
splits = []
# postkodene kommer på oddetall fra og med den 11. De blir hevet inn i controls
for item in row[11::2]:
if item == '250':
controls.append(int(item))
break
elif item == '000':
break
else:
controls.append(int(item))
# strekktidene kommer på partall fra og med den 12. De blir hevet i splits.
for item in row[12::2]:
if item == '00000':
break
else:
splits.append(int(item))
# looper gjonnom løperobjektene og legger til poster og strekktider + start og sluttid
# usikker på om dette er riktig klokeslett
tl = row[5].split(' ')
tl[0] = tl[0].split('.')
tl[0][2] = '20' + tl[0][2]
tl[0] = list(map(int, tl[0]))
tl[1] = tl[1].split(':')
tl[1][2] = float(tl[1][2])
tl[1] = list(map(int, tl[1]))
read_time = datetime.datetime(tl[0][2], tl[0][1], tl[0][0], tl[1][0], tl[1][1], tl[1][2])
if len(controls) > 2 and len(splits) > 2:
s_time = read_time - datetime.timedelta(seconds=splits[-1])
f_time = read_time - (datetime.timedelta(seconds=splits[-1]) + datetime.timedelta(seconds=splits[-2]))
else:
s_time = read_time
f_time = read_time
# Remove mtr from splits:
if controls[-1] == 250:
controls.pop(-1)
splits.pop(-1)
cards.append(CardDump(int(row[6]), controls, splits, read_time, s_time, f_time))
return cards
# Stored in Event.courses
class Course:
def __init__(self, name, codes, forked=False):
self.name = name
# Codes is a list of courses
self.codes = codes
self.forked = forked
def __repr__(self):
return f'name({self.name})'
# Stored in Event.o_classes
class OClass:
def __init__(self, name, course):
self.name = name
self.course = course
def __repr__(self):
return f'name({self.name})'
class RunnerResult:
def __init__(self, runner_id: int, first: str, last: str, status: str, place: int, total_time: int, splits: list[int], end_time,
club=None, club_id=None, country=None, card_id=None, o_class=None, controls=None, fork=0, start_time=datetime.datetime(1973, 1, 1), fee_id=None, missed_controls=None, ran_other_course=None):
self.id = runner_id
self.first = first
self.last = last
self.club = club
self.club_id = club_id
self.country = country
self.card_id = card_id
self.o_class = o_class
self.controls = controls
self.fork = fork
self.start_time = start_time
self.fee_id = fee_id
self.status = status
self.place = place
self.total_time = total_time
self.splits = splits
self.end_time = end_time
# List of controls missed
self.missed_controls = missed_controls
# If the runner ran other course it is named here
self.ran_other_course = ran_other_course
def fullname(self):
return f'{self.first} {self.last}'
class ClassResult:
def __init__(self, name: str, course: Course, runner_results: list[RunnerResult]):
self.name = name
self.course = course
self.runner_results = runner_results
class Event:
def __init__(self, eventid=0, name=None, start_time=None, end_time=None,
organiser=None, courses=[], o_classes=[], runners=[],
card_dumps=[], fees=[]):
self.id = eventid
self.name = name
self.start_time = start_time
self.end_time = end_time
self.organiser = organiser
self.courses = courses
self.o_classes = o_classes
self.runners = runners
self.card_dumps = card_dumps
self.fees = fees
def __repr__(self):
return(f'id({self.id}), name({self.name}), organiser({self.organiser}), courses({self.courses}), o_classes({self.o_classes}), runners({self.runners})')
def add_course(self, *args):
for n in args:
self.courses.append(n)
def add_o_class(self, *args):
for n in args:
self.o_classes.append(n)
def add_runners(self, *args):
for n in args:
self.runners.append(n)
def get_runners_in_o_class(self, o_class: str) -> list[Runner]:
return [i for i in self.runners if i.o_class == o_class]
def add_fees(self, *args):
for n in args:
self.fees.append(n)
def get_course(self, name):
return next((copy.copy(i) for i in self.courses if i.name == name), None)
def get_o_class(self, name):
return next((copy.copy(i) for i in self.o_classes if i.name == name), None)
def get_card_dump(self, id):
return next((copy.copy(i) for i in self.card_dumps if i.card == id), None)
def get_runner(self, id):
return next((copy.copy(i) for i in self.runners if i.id == id), None)
def get_runner_status(self, id):
# https://github.com/international-orienteering-federation/datastandard-v3/blob/24eb108e4c6b5e2904e5f8f0e49142e45e2c5230/IOF.xsd#L2903C3-L2903C3
runner = self.get_runner(id)
if runner.status_override: return runner.status_override
o_class = self.get_o_class(runner.o_class)
if not o_class:
return 'Inactive'
course = self.get_course(o_class.course)
if not self.get_card_dump(runner.card_id):
return 'Active'
if contains(course.codes[runner.fork], self.get_card_dump(runner.card_id).controls):
return 'OK'
else:
return 'MissingPunch'
def get_runner_result(self, runner_id):
runner = self.get_runner(runner_id)
return next((i for i in produce_class_result(self, runner.o_class).runner_results if i.id == runner_id), None)
def get_runner_o_class(self, id):
runner = self.get_runner(id)
return next((copy.copy(i) for i in self.o_classes if i.name == runner.o_class), None)
def get_runner_time(self, id):
runner = self.get_runner(id)
card_dump = self.get_card_dump(runner.card_id)
course = self.get_course(self.get_runner_o_class(id).course)
if card_dump == None or course == None:
return False
f_control = course.codes[runner.fork][-1]
# TODO: Må gjøres mer robust
if f_control not in card_dump.controls:
# Hvis løperen ikke har vært på sistepost tar vi siste stempling istedet
return card_dump.splits[-1]
index = card_dump.controls.index(f_control)
# Hvis løperen ikke har en startid spesifisert brukes brikketid
if runner.start_time is None:
return card_dump.splits[index]
#Hvis det er en startid finner jeg tidsforskjellen mellom brikkestart og faktisk start og trekker den fra totaltida
else:
time_list = runner.start_time.split(':') # hour, minute, second
start_datetime = self.start_time.replace(hour=int(time_list[0]), minute=int(time_list[1]), second=int(time_list[2]))
diff = start_datetime - card_dump.s_time
return card_dump.splits[index] - diff.total_seconds()
def get_runner_splits(self, id):
# Tida brukt frem til hver post, ikke tida fra forrige post
try:
runner = self.get_runner(id)
card_dump = self.get_card_dump(runner.card_id)
course = self.get_course(self.get_o_class(runner.o_class).course)
codes = course.codes[runner.fork]
except AttributeError:
return None
if card_dump == None:
return None
split_iter = zip(card_dump.controls, card_dump.splits).__iter__()
splits = [0] * len(codes)
for n, control in enumerate(codes):
if control not in card_dump.controls:
continue
while True:
try:
punched_control, split = next(split_iter)
except StopIteration:
break
if punched_control == control:
splits[n] = split
break
return splits
def get_runner_controls(self, id):
try:
return self.get_card_dump(self.get_runner(id).card_id).controls
except AttributeError:
return None
def get_runner_end_clock(self, id):
try:
return self.get_card_dump(self.get_runner(id).card_id).f_time
except AttributeError:
return None
def get_result(self, o_classes: list[str] = []) -> list[ClassResult]:
if not o_classes:
o_classes = [i.name for i in self.o_classes]
return [produce_class_result(self, i) for i in o_classes]
def read_xml_entries(self, xml_file):
self.add_runners(*runners_from_xml_entries(xml_file))
self.add_fees(*fees_from_xml_entries(xml_file))
# Må endres
def read_xml_courses(self, xml_file):
self.courses = courses_from_xml(xml_file)
def read_ttime_cnf(self, ttime_file):
self.add_course(*courses_from_ttime_conf(ttime_file))
self.add_o_class(*classes_from_ttime_conf(ttime_file, self.courses))
def read_ttime_db(self, ttime_file):
with open(ttime_file) as f:
data = f.readlines()
self.runners = [Runner.from_ttime_string(i) for i in data if i]
def read_mtr_file(self, mtr_file):
self.card_dumps = CardDump.list_from_mtr_f(mtr_file)
def create_start_list_pdf(self, file_path):
pdf.create_start_list(copy.deepcopy(self), file_path)
def create_result_pdf(self, file_path):
pdf.create_result_list(copy.deepcopy(self), file_path)
class Fee:
def __init__(self, fee_id, name, currency, amount, from_birth_date=None,
to_birth_date=None):
self.id = fee_id
self.name = name
self.currency = currency
self.amount = amount
self.from_birth_date = from_birth_date
self.to_birth_date = to_birth_date
def produce_class_result(event, o_class_name) -> ClassResult:
o_class = event.get_o_class(o_class_name)
runners = event.get_runners_in_o_class(o_class_name)
ok_runners = [i for i in runners if event.get_runner_status(i.id) == 'OK']
ok_runners.sort(key=lambda i: event.get_runner_time(i.id))
dsq_runners = [i for i in runners if event.get_runner_status(i.id) == 'MissingPunch' or event.get_runner_status(i.id) == 'Disqualified']
other_runners = [i for i in runners if i not in ok_runners and i not in dsq_runners]
results = [RunnerResult(i.id, i.first, i.last, event.get_runner_status(i.id), ok_runners.index(i)+1, event.get_runner_time(i.id), event.get_runner_splits(i.id),
event.get_runner_end_clock(i.id), i.club, 0, i.country, i.card_id, i.o_class, event.get_runner_controls(i.id), start_time=event.get_card_dump(i.card_id).s_time) for i in ok_runners]
results += [RunnerResult(i.id, i.first, i.last, event.get_runner_status(i.id), 0, event.get_runner_time(i.id), event.get_runner_splits(i.id),
event.get_runner_end_clock(i.id), i.club, 0, i.country, i.card_id, i.o_class, event.get_runner_controls(i.id),
start_time=event.get_card_dump(i.card_id).s_time,
missed_controls=find_missed_controls(event.get_runner_controls(i.id), event.get_course(o_class.course).codes[i.fork]),
ran_other_course=find_courses_matching_controls(event.get_card_dump(i.card_id).controls, event.courses))
for i in dsq_runners]
results += [RunnerResult(i.id, i.first, i.last, event.get_runner_status(i.id), 0, event.get_runner_time(i.id), event.get_runner_splits(i.id),
event.get_runner_end_clock(i.id), i.club, 0, i.country, i.card_id, i.o_class, event.get_runner_controls(i.id)) for i in other_runners]
return ClassResult(o_class.name, event.get_course(o_class.course), results)
# TODO: Take string instead of file.
def courses_from_ttime_conf(ttime_file):
with open(ttime_file, 'r') as f:
data = f.readlines()
courses = []
for line in data:
if '-codes' in line:
code_list = re.search(r'(?<=\")(.*?)(?=\")', line).group().split(';')
loops = 0
for n in code_list:
n = n.split(',')
loops += 1
n = list(map(int, n))
courses.append(Course('course_'+str(loops), [n]))
return courses
def classes_from_ttime_conf(ttime_file, courses):
with open(ttime_file, 'r') as f:
data = f.readlines()
o_classes = []
for line in data:
if '-courses' in line:
raw_courselist = re.search(r'(?<=\")(.*?)(?=\")', line).group().split(';')
loops = 0
for n in raw_courselist:
split = n.split(',')
for i in split:
o_classes.append(OClass(i, courses[loops].name))
loops += 1
return o_classes
# Checks if small list is in big list
def contains(small, big):
valid = True
mark = 0
map_bl = []
for i in small:
for n, control in enumerate(big[mark:]):
if i == control:
mark += n
map_bl.append(mark)
break
else:
valid = False
if valid:
return map_bl
else:
return False
def find_missed_controls(punches, codes):
return [i for i in codes if i not in punches]
def find_courses_matching_controls(controls, courses):
matches = []
for i in courses:
for fork in i.codes:
if contains(fork, controls):
matches.append(i.name)
return matches

View File

@ -1,239 +0,0 @@
import datetime
from fpdf import FPDF
def format_m_s(seconds):
if seconds == 0: return ''
minutes, seconds = divmod(seconds, 60)
return f'{minutes:02}:{seconds:02}'
def create_result_list(event, file_path, o_classes=[]):
results = event.get_result(o_classes)
pdf = FPDF()
pdf.add_page()
pdf.add_font("LiberationSans", fname="otime/data/fonts/LiberationSans-Regular.ttf")
pdf.set_font("LiberationSans", size=10)
line_height = pdf.font_size * 1.5
col_width = pdf.epw / 4 # distribute content evenly
for class_result in results:
pdf.write(txt=class_result.name)
pdf.ln(line_height)
for runner in class_result.runner_results:
if runner.status == 'OK':
pdf.multi_cell(col_width, line_height, str(runner.place), border=1, ln=3, max_line_height=pdf.font_size, align='L')
else:
pdf.multi_cell(col_width, line_height, runner.status, border=1, ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(col_width, line_height, runner.fullname(), border=1, ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(col_width, line_height, runner.club, border=1, ln=3, max_line_height=pdf.font_size)
if runner.status == 'OK':
pdf.multi_cell(col_width, line_height, format_m_s(runner.total_time), border=1, ln=3, max_line_height=pdf.font_size)
else:
pdf.multi_cell(col_width, line_height, '', border=1, ln=3, max_line_height=pdf.font_size)
pdf.ln(line_height)
pdf.output(file_path)
def create_split_result_list(event, file_path, o_classes=[]):
results = event.get_result(o_classes)
pdf = FPDF()
pdf.add_page(orientation='L')
pdf.add_font("LiberationSans", fname="otime/data/fonts/LiberationSans-Regular.ttf")
pdf.set_font("LiberationSans", size=8)
line_height = pdf.font_size * 1.5
col_width = pdf.epw / 4 # distribute content evenly
for class_result in results:
col_width = 10
pdf.write(txt=class_result.name)
pdf.ln(line_height)
for runner in class_result.runner_results:
if runner.status == 'OK':
pdf.multi_cell(5, line_height, str(runner.place), border=1, ln=3, max_line_height=pdf.font_size, align='L')
else:
pdf.multi_cell(5, line_height, runner.status, border=1, ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(30, line_height, runner.fullname(), border=1, ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(30, line_height, runner.club, border=1, ln=3, max_line_height=pdf.font_size)
if runner.status == 'OK' or runner.status == 'MissingPunch':
for split in runner.splits:
pdf.multi_cell(col_width, line_height, format_m_s(split), border=1, ln=3, max_line_height=pdf.font_size)
else:
pdf.multi_cell(col_width, line_height, '', border=1, ln=3, max_line_height=pdf.font_size)
pdf.ln(line_height)
pdf.output(file_path)
def create_all_invoices(self, filename_prefix):
clubs = [x.club for x in self.runners if x.club != self.runners[self.runners.index(x)-1].club and x.club is not None]
for club in clubs:
self.create_club_invoice(club, filename_prefix + club + '.pdf')
def create_club_invoice(self, club, file_name):
# Get only runners in specified club
runners_ic = [x for x in self.runners if x.club == club]
payments = [x.fee.amount for x in runners_ic]
subtotal = sum(payments)
# Dict of runners in each fee
fee_dict = {}
for fee in self.fees:
fee_dict.update({fee.name: [x for x in runners_ic if x.fee.name == fee.name]})
if len(fee_dict[fee.name]) == 0:
fee_dict.pop(fee.name)
pdf = PDF()
pdf.set_title(f'Faktura {self.name} {club}')
pdf.set_producer('oTime 0.0.1')
pdf.set_creator('oTime 0.0.1')
pdf.set_creation_date()
pdf.add_page()
pdf.add_font("LiberationSans", fname="data/fonts/LiberationSans-Regular.ttf")
pdf.add_font("LiberationSans-Bold", fname="data/fonts/LiberationSans-Bold.ttf")
pdf.set_font("LiberationSans", size=10)
line_height = pdf.font_size * 1.5
# Topp venstre:
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(pdf.epw / 2, line_height, self.name, align='L')
pdf.ln(0.2)
pdf.set_font("LiberationSans", size=10)
pdf.multi_cell(pdf.epw / 2, line_height, self.organiser, align='L')
pdf.ln(14)
pdf.multi_cell(pdf.epw / 2, line_height, club, align='L')
pdf.ln()
# Topp høyre:
pdf.set_xy(-pdf.epw / 3, 10)
pdf.set_font("LiberationSans-Bold", size=20)
pdf.multi_cell(pdf.epw, line_height, 'Faktura', align='L')
pdf.set_xy(-pdf.epw / 3, 20)
# Dato
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(0, line_height, 'Dato:', align='L')
pdf.set_xy(-pdf.epw / 3, 20)
pdf.set_font("LiberationSans", size=10)
pdf.multi_cell(0, line_height, datetime.date.today().strftime('%d.%m.%Y'), align='R')
# Nummer
pdf.set_xy(-pdf.epw / 3, 20 + line_height)
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(0, line_height, 'Nummer:', align='L')
pdf.set_xy(-pdf.epw / 3, 20 + line_height)
pdf.multi_cell(0, line_height, '1', align='R')
# Kundeid
pdf.set_xy(-pdf.epw / 3, 20 + line_height*2)
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(0, line_height, 'Kundeid:', align='L')
pdf.set_xy(-pdf.epw / 3, 20 + line_height*2)
pdf.set_font("LiberationSans", size=10)
pdf.multi_cell(0, line_height, '123', align='R')
# Forfall
pdf.set_xy(-pdf.epw / 3, 20 + line_height*3)
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(0, line_height, 'Forfall:', align='L')
pdf.set_xy(-pdf.epw / 3, 20 + line_height*3)
pdf.set_font("LiberationSans", size=10)
pdf.multi_cell(0, line_height, datetime.date.today().strftime('%d.08.%Y'), align='R')
pdf.set_xy(-pdf.epw, 20 + line_height*5)
pdf.set_font("LiberationSans-Bold", size=10)
date = self.start_time.strftime('%d.%m.%Y')
pdf.multi_cell(0, line_height, f'Kontingentliste {self.name} dato: {date}', align='R')
pdf.ln()
pdf.set_font("LiberationSans", size=10)
# Tabell
line_height = pdf.font_size * 2
col_width = pdf.epw / 8 # distribute content evenly
# Top row
pdf.set_fill_color(191, 191, 191)
pdf.set_draw_color(191, 191, 191)
pdf.set_font("LiberationSans-Bold", size=10)
pdf.multi_cell(col_width, line_height, 'Startnr', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width*2, line_height, 'Navn', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Klasse', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Brikke', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
# pdf.multi_cell(col_width, line_height, 'Starttid', border=1, ln=3,max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Resultat', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Plass', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.multi_cell(col_width, line_height, 'Kontigent', border=1, ln=3, max_line_height=pdf.font_size, align='L', fill=True)
pdf.ln()
pdf.set_draw_color(0, 0, 0)
for runners in fee_dict.values():
pdf.set_font("LiberationSans-Bold", size=11)
pdf.multi_cell(len(runners[0].fee.name)*2.3, pdf.font_size * 1.1, runners[0].fee.name, border='B', align='L')
pdf.set_font("LiberationSans", size=8)
line_height = pdf.font_size * 1.6
pdf.ln()
for runner in runners:
pdf.multi_cell(col_width, line_height, runner.id, ln=3, max_line_height=pdf.font_size, align='L') # Start Number
pdf.multi_cell(col_width*2, line_height, f'{runner.last}, {runner.first}', ln=3, max_line_height=pdf.font_size, align='L') # Name
pdf.multi_cell(col_width, line_height, runner.o_class_str, ln=3, max_line_height=pdf.font_size, align='L') # Class
pdf.multi_cell(col_width, line_height, str(runner.card), ln=3, max_line_height=pdf.font_size) # card
# Starttime:
#if runner.start_time != None:
# pdf.multi_cell(col_width, line_height, str(runner.start_time), ln=3, max_line_height=pdf.font_size)
#else:
# pdf.multi_cell(col_width, line_height, 'Fristart', ln=3, max_line_height=pdf.font_size)
# Time used:
if runner.status() == 'OK':
pdf.multi_cell(col_width, line_height, str(datetime.timedelta(seconds=runner.totaltime())), ln=3, max_line_height=pdf.font_size)
elif runner.status() == 'Disqualified':
pdf.multi_cell(col_width, line_height, 'DSQ', ln=3, max_line_height=pdf.font_size)
elif runner.status() == 'Active':
pdf.multi_cell(col_width, line_height, 'DNS', ln=3, max_line_height=pdf.font_size)
else:
pdf.multi_cell(col_width, line_height, runner.status(), ln=3, max_line_height=pdf.font_size)
# Rank:
if runner.status() == 'OK':
pdf.multi_cell(col_width, line_height, str(runner.rank(self.runners)) + '.', ln=3, max_line_height=pdf.font_size)
else:
pdf.multi_cell(col_width, line_height, '', ln=3, max_line_height=pdf.font_size)
pdf.multi_cell(col_width, line_height, str(runner.fee.amount), ln=3, max_line_height=pdf.font_size, align='R')
pdf.ln(line_height)
pdf.set_draw_color(0, 0, 0)
# sum
pdf.set_font("LiberationSans-Bold", size=10)
pdf.set_x(col_width*8)
pdf.cell(0, line_height, 'Sum ' + str(subtotal), border='TB', align='R')
pdf.set_font("LiberationSans", size=10)
line_height = pdf.font_size * 1.5
pdf.ln(20)
pdf.multi_cell(0, line_height, 'Antall løpere ' + str(len(runners_ic)), ln=3, max_line_height=pdf.font_size, align='L')
pdf.set_x(col_width*7)
pdf.multi_cell(col_width, line_height, 'Total sum', ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(0, line_height, str(subtotal), ln=3, max_line_height=pdf.font_size, align='R')
pdf.ln()
pdf.set_x(col_width*7)
pdf.multi_cell(col_width, line_height, 'Betalt', ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(0, line_height, '0', ln=3, max_line_height=pdf.font_size, align='R')
pdf.ln()
pdf.set_font("LiberationSans-Bold", size=10)
pdf.set_x(col_width*7)
pdf.multi_cell(col_width, line_height, 'Skyldig', border='B', ln=3, max_line_height=pdf.font_size, align='L')
pdf.multi_cell(0, line_height, str(subtotal), border='B',ln=3, max_line_height=pdf.font_size, align='R')
pdf.output(file_name)
"""
class PDF(FPDF):
def footer(self):
self.set_y(-15)
self.set_font("LiberationSans", size=10)
self.set_fill_color(191, 191, 191)
self.set_draw_color(191, 191, 191)
col_width = self.epw / 3
self.cell(col_width, 7, 'oTime', border=1, align='L', fill=True)
self.cell(col_width, 7, datetime.datetime.now().strftime('%d.%m.%Y %H:%M:%S'), border=1, align='C', fill=True)
self.cell(col_width, 7, f"Side {self.page_no()} av {{nb}}", border=1, align='R', fill=True)
"""

View File

@ -1,30 +0,0 @@
from textual.app import App, ComposeResult
from textual.widgets import DataTable
import otime
import file_io
from pdf import format_m_s
global ROWS
class TableApp(App):
def compose(self) -> ComposeResult:
yield DataTable()
def on_mount(self) -> None:
global ROWS
table = self.query_one(DataTable)
table.add_columns(*ROWS[0])
table.add_rows(ROWS[1:])
def main(path):
event = file_io.event_from_yaml_and_csv(path + '/config.yaml', path + '/mtr.yaml', path + '/runners.csv')
result = event.get_result()
global ROWS
ROWS = []
for o_class in result:
ROWS += [(str(i.id), str(i.place), i.fullname(), i.o_class, i.club, str(i.card_id), format_m_s(i.total_time), str(i.controls)) for i in o_class.runner_results]
print(ROWS)
app = TableApp()
app.run()
if __name__ == "__main__":
main()

View File

@ -1,3 +0,0 @@
fpdf2
pyserial
rich

View File

@ -0,0 +1,62 @@
11595;X;Aasrum, Camilla;Damer A-kort;Kristiansand OK;A,15154,4,189,11595;86252;;
10520;X;Balchen, Eirik Glad;Herrer A-kort;Oddersjaa SSK;A,15154,4,248,10520;503969;;
25273;X;Beckmann, Benedicte;Damer A-kort;Kristiansand OK;A,15154,4,189,25273;212044;;
30872;X;Birkeland, Kristian;Herrer A-kort;Birkenes IL;A,15154,4,40,30872;225002;;
34463;X;Birkeland, Per Are;Herrer A-kort;Birkenes IL;A,15154,4,40,34463;515883;;
7439;X;Birkenes, Espen;Herrer A-kort;Birkenes IL;A,15154,4,40,7439;203397;;
25720;X;Birkenes, Lars;Herrer A-kort;Birkenes IL;A,15154,4,40,25720;225105;;
7408;X;Bjorvand, Siri;Damer A-kort;Birkenes IL;A,15154,4,40,7408;511473;;
190;X;Bjørnsen, Jack;Herrer A-kort;Kristiansand OK;A,15154,4,189,190;510880;;
6557;X;Blandkjenn, Jan;Herrer A-kort;Kristiansand OK;A,15154,4,189,6557;220759;;
10323;X;Daland, Linn Carina;Damer A-kort;Kristiansand OK;A,15154,4,189,10323;510983;;
2885;X;Dalsøren, Stig;Herrer A-lang;Kristiansand OK;A,15154,4,189,2885;229985;;
3104;X;Danielsen, Vegard;Herrer A-lang;Kristiansand OK;A,15154,4,189,3104;509049;;
28601;X;Flaa, Mette Javenes;Damer C;Birkenes IL;A,15154,4,40,28601;225005;;
24007;X;Flaa, Per Johan;Herrer C;Birkenes IL;A,15154,4,40,24007;203292;;
17763;X;Flaa, Sigmund Javenes;Herrer A-kort;Birkenes IL;A,15154,4,40,17763;224819;;
1400;X;Gjelsten, Ståle;Herrer A-lang;Kristiansand OK;A,15154,4,189,1400;506629;;
8437;X;Hansen, John;Herrer A-kort;Kristiansand OK;A,15154,4,189,8437;208727;;
26200;X;Harstad Arntsen, Kajsa;Damer A-kort;Heming Orientering;A,15154,3,114,26200;233748;;
6762;X;Heivoll, Reidar;Herrer A-kort;Søgne og Songdalen OK;A,15154,4,341,6762;511474;;
22630;X;Johannessen, Fabian;Herrer A-kort;Kristiansand OK;A,15154,4,189,22630;506791;;
8062;X;Johannessen, Nils Arne;Herrer A-kort;Kristiansand OK;A,15154,4,189,8062;512690;;
6907;X;Jørgensen, Magne Reier;Herrer A-kort;Kristiansand OK;A,15154,4,189,6907;255211;;
18753;X;Knutsen, Arild;Herrer A-kort;Søgne og Songdalen OK;A,15154,4,341,18753;197924;;
6924;X;Kostøl, Ole;Herrer A-kort;Kristiansand OK;A,15154,4,189,6924;184222;;
29758;X;Kuhnle, Eivind Irgens;Herrer C;Kristiansand OK;A,15154,4,189,29758;224394;;
7026;X;Mulen, Ingvild;Damer A-kort;Kristiansand OK;A,15154,4,189,7026;510878;;
7499;X;Myhre, Stein;Herrer A-kort;Bærums Skiklub;A,15154,3,33,7499;207798;;
33810;X;Ness-Jensen, Eivind;Herrer A-lang;Frol IL;A,15154,11,84,33810;248758;;
36494;X;Ness-Jensen, Trym;Herrer C;Frol IL;A,15154,11,84,36494;247677;;
36264;X;Ness-Jensen, Tuva;Damer C;Frol IL;A,15154,11,84,36264;247218;;
24983;X;Nilsen, Therese;Damer A-kort;IL Imås;A,15154,4,148,24983;236001;;
18599;X;Nygård, Emil;Herrer A-kort;Birkenes IL;A,15154,4,40,18599;225087;;
21539;X;Raaen, Trine Marit Justad;Damer A-kort;Lierbygda OL;A,15154,5,201,21539;506935;;
9432;X;Rasmussen, Henning;Herrer A-kort;OL Tønsberg og omegn;A,15154,19,264,9432;506632;;
13618;X;Ribe, Erlend;Herrer A-kort;;A,15154,0,,13618;198060;;
7426;X;Runde, David;Herrer A-lang;Kristiansand OK;A,15154,4,189,7426;510984;;
14837;X;Runde, John;Herrer A-lang;NTNUI;A,15154,15,244,14837;504087;;
12144;X;Runde, Pål;Herrer A-kort;Kristiansand OK;A,15154,4,189,12144;182054;;
6896;X;Simonsen, Øyvin;Herrer A-kort;IL Imås;A,15154,4,148,6896;504631;;
31942;X;Solheim, Espen;Herrer A-kort;IF Trauma;A,15154,4,134,31942;509140;;
31962;X;Solheim, Vilde Haslekås;Damer A-kort;IF Trauma;A,15154,4,134,31962;246953;;
820;X;Stormoen, Håvar Birkeland;Herrer A-lang;Kristiansand OK;A,15154,4,189,820;504431;;
901;X;Strand, Erling;Herrer A-kort;Bergens TF;A,15154,8,37,901;186000;;
6920;X;Sørensen, Kjell Walter;Herrer A-kort;IK Grane Arendal Orientering;A,15154,4,135,6920;503611;;
13638;X;Takle, Brage;Herrer A-lang;Kristiansand OK;A,15154,4,189,13638;510998;;
8151;X;Torgersen, Per W.;Herrer A-lang;Oddersjaa SSK;A,15154,4,248,8151;185934;;
17591;X;Tømt, Henrik Andreas;Herrer A-lang;IL Imås;A,15154,4,148,17591;207732;;
6523;X;Tømt, Per Kristian;Herrer A-lang;IL Imås;A,15154,4,148,6523;206546;;
18730;X;Tømt, Sandra Sofie;Damer C;IL Imås;A,15154,4,148,18730;246774;;
30302;X;Tørå, Thea;Nybegynner;Kristiansand OK;A,15154,4,189,30302;247987;;
26818;X;Tørå, Tobias;Nybegynner;Kristiansand OK;A,15154,4,189,26818;248089;;
466;X;Værp, Thorbjørn;Herrer A-kort;Kristiansand OK;A,15154,4,189,466;507857;;
13795;X;Ytterbø, Astrid;Damer A-kort;Asker Skiklubb;A,15154,3,26,13795;507040;;
3682;X;Ytterbø, Per Anders;Herrer A-kort;Asker Skiklubb;A,15154,3,26,3682;501115;;
6154;X;Zeiner-Gundersen, Richard;Herrer A-lang;Lierbygda OL;A,15154,5,201,6154;507044;;
7251;X;Økstad, Siri;Damer A-kort;Oddersjaa SSK;A,15154,4,248,7251;185940;;
36495;X;Andersen, Pål;Herrer A-kort;Søgne og Songdalen OK;A,0,0,341,0;253839;;
36496;X;Strand, Anette;Damer A-kort;Bergens TF;A,0,0,37,0;245739;;
36497;X;Vassbø, Halvard;Herrer A-lang;Vindbjart;A,0,0,540,0;204836;;
36498;X;Kvaase, Asle;Herrer A-kort;Høvdingen;;165351;;
36499;X;Wensaas, Elisabeth;Nybegynner;Høvdingen;;255737;;
1 11595 X Aasrum, Camilla Damer A-kort Kristiansand OK A,15154,4,189,11595 86252
2 10520 X Balchen, Eirik Glad Herrer A-kort Oddersjaa SSK A,15154,4,248,10520 503969
3 25273 X Beckmann, Benedicte Damer A-kort Kristiansand OK A,15154,4,189,25273 212044
4 30872 X Birkeland, Kristian Herrer A-kort Birkenes IL A,15154,4,40,30872 225002
5 34463 X Birkeland, Per Are Herrer A-kort Birkenes IL A,15154,4,40,34463 515883
6 7439 X Birkenes, Espen Herrer A-kort Birkenes IL A,15154,4,40,7439 203397
7 25720 X Birkenes, Lars Herrer A-kort Birkenes IL A,15154,4,40,25720 225105
8 7408 X Bjorvand, Siri Damer A-kort Birkenes IL A,15154,4,40,7408 511473
9 190 X Bjørnsen, Jack Herrer A-kort Kristiansand OK A,15154,4,189,190 510880
10 6557 X Blandkjenn, Jan Herrer A-kort Kristiansand OK A,15154,4,189,6557 220759
11 10323 X Daland, Linn Carina Damer A-kort Kristiansand OK A,15154,4,189,10323 510983
12 2885 X Dalsøren, Stig Herrer A-lang Kristiansand OK A,15154,4,189,2885 229985
13 3104 X Danielsen, Vegard Herrer A-lang Kristiansand OK A,15154,4,189,3104 509049
14 28601 X Flaa, Mette Javenes Damer C Birkenes IL A,15154,4,40,28601 225005
15 24007 X Flaa, Per Johan Herrer C Birkenes IL A,15154,4,40,24007 203292
16 17763 X Flaa, Sigmund Javenes Herrer A-kort Birkenes IL A,15154,4,40,17763 224819
17 1400 X Gjelsten, Ståle Herrer A-lang Kristiansand OK A,15154,4,189,1400 506629
18 8437 X Hansen, John Herrer A-kort Kristiansand OK A,15154,4,189,8437 208727
19 26200 X Harstad Arntsen, Kajsa Damer A-kort Heming Orientering A,15154,3,114,26200 233748
20 6762 X Heivoll, Reidar Herrer A-kort Søgne og Songdalen OK A,15154,4,341,6762 511474
21 22630 X Johannessen, Fabian Herrer A-kort Kristiansand OK A,15154,4,189,22630 506791
22 8062 X Johannessen, Nils Arne Herrer A-kort Kristiansand OK A,15154,4,189,8062 512690
23 6907 X Jørgensen, Magne Reier Herrer A-kort Kristiansand OK A,15154,4,189,6907 255211
24 18753 X Knutsen, Arild Herrer A-kort Søgne og Songdalen OK A,15154,4,341,18753 197924
25 6924 X Kostøl, Ole Herrer A-kort Kristiansand OK A,15154,4,189,6924 184222
26 29758 X Kuhnle, Eivind Irgens Herrer C Kristiansand OK A,15154,4,189,29758 224394
27 7026 X Mulen, Ingvild Damer A-kort Kristiansand OK A,15154,4,189,7026 510878
28 7499 X Myhre, Stein Herrer A-kort Bærums Skiklub A,15154,3,33,7499 207798
29 33810 X Ness-Jensen, Eivind Herrer A-lang Frol IL A,15154,11,84,33810 248758
30 36494 X Ness-Jensen, Trym Herrer C Frol IL A,15154,11,84,36494 247677
31 36264 X Ness-Jensen, Tuva Damer C Frol IL A,15154,11,84,36264 247218
32 24983 X Nilsen, Therese Damer A-kort IL Imås A,15154,4,148,24983 236001
33 18599 X Nygård, Emil Herrer A-kort Birkenes IL A,15154,4,40,18599 225087
34 21539 X Raaen, Trine Marit Justad Damer A-kort Lierbygda OL A,15154,5,201,21539 506935
35 9432 X Rasmussen, Henning Herrer A-kort OL Tønsberg og omegn A,15154,19,264,9432 506632
36 13618 X Ribe, Erlend Herrer A-kort A,15154,0,,13618 198060
37 7426 X Runde, David Herrer A-lang Kristiansand OK A,15154,4,189,7426 510984
38 14837 X Runde, John Herrer A-lang NTNUI A,15154,15,244,14837 504087
39 12144 X Runde, Pål Herrer A-kort Kristiansand OK A,15154,4,189,12144 182054
40 6896 X Simonsen, Øyvin Herrer A-kort IL Imås A,15154,4,148,6896 504631
41 31942 X Solheim, Espen Herrer A-kort IF Trauma A,15154,4,134,31942 509140
42 31962 X Solheim, Vilde Haslekås Damer A-kort IF Trauma A,15154,4,134,31962 246953
43 820 X Stormoen, Håvar Birkeland Herrer A-lang Kristiansand OK A,15154,4,189,820 504431
44 901 X Strand, Erling Herrer A-kort Bergens TF A,15154,8,37,901 186000
45 6920 X Sørensen, Kjell Walter Herrer A-kort IK Grane Arendal Orientering A,15154,4,135,6920 503611
46 13638 X Takle, Brage Herrer A-lang Kristiansand OK A,15154,4,189,13638 510998
47 8151 X Torgersen, Per W. Herrer A-lang Oddersjaa SSK A,15154,4,248,8151 185934
48 17591 X Tømt, Henrik Andreas Herrer A-lang IL Imås A,15154,4,148,17591 207732
49 6523 X Tømt, Per Kristian Herrer A-lang IL Imås A,15154,4,148,6523 206546
50 18730 X Tømt, Sandra Sofie Damer C IL Imås A,15154,4,148,18730 246774
51 30302 X Tørå, Thea Nybegynner Kristiansand OK A,15154,4,189,30302 247987
52 26818 X Tørå, Tobias Nybegynner Kristiansand OK A,15154,4,189,26818 248089
53 466 X Værp, Thorbjørn Herrer A-kort Kristiansand OK A,15154,4,189,466 507857
54 13795 X Ytterbø, Astrid Damer A-kort Asker Skiklubb A,15154,3,26,13795 507040
55 3682 X Ytterbø, Per Anders Herrer A-kort Asker Skiklubb A,15154,3,26,3682 501115
56 6154 X Zeiner-Gundersen, Richard Herrer A-lang Lierbygda OL A,15154,5,201,6154 507044
57 7251 X Økstad, Siri Damer A-kort Oddersjaa SSK A,15154,4,248,7251 185940
58 36495 X Andersen, Pål Herrer A-kort Søgne og Songdalen OK A,0,0,341,0 253839
59 36496 X Strand, Anette Damer A-kort Bergens TF A,0,0,37,0 245739
60 36497 X Vassbø, Halvard Herrer A-lang Vindbjart A,0,0,540,0 204836
61 36498 X Kvaase, Asle Herrer A-kort Høvdingen 165351
62 36499 X Wensaas, Elisabeth Nybegynner Høvdingen 255737

View File

@ -0,0 +1,351 @@
<?xml version="1.0" encoding="utf-8"?>
<CourseData>
<IOFVersion version="2.0.3" />
<ModifyDate>
<Date>2021-07-06</Date>
<Clock>17:18</Clock>
</ModifyDate>
<Map>
<Scale>10000</Scale>
<MapPosition x="-382.61" y="301.33" />
</Map>
<StartPoint>
<StartPointCode>STA1</StartPointCode>
<ControlPosition x="445934" y="6453146" />
<MapPosition x="-73.36" y="29.96" />
</StartPoint>
<StartPoint>
<StartPointCode>STA2</StartPointCode>
<ControlPosition x="445809" y="6452679" />
<MapPosition x="-82.73" y="-17.38" />
</StartPoint>
<Control>
<ControlCode>35</ControlCode>
<ControlPosition x="445776" y="6453203" />
<MapPosition x="-89.45" y="34.7" />
</Control>
<Control>
<ControlCode>91</ControlCode>
<ControlPosition x="445600" y="6453513" />
<MapPosition x="-109.03" y="64.48" />
</Control>
<Control>
<ControlCode>76</ControlCode>
<ControlPosition x="445687" y="6453751" />
<MapPosition x="-101.97" y="88.73" />
</Control>
<Control>
<ControlCode>75</ControlCode>
<ControlPosition x="445339" y="6453837" />
<MapPosition x="-137.19" y="95.07" />
</Control>
<Control>
<ControlCode>107</ControlCode>
<ControlPosition x="444509" y="6454122" />
<MapPosition x="-221.9" y="118.08" />
</Control>
<Control>
<ControlCode>116</ControlCode>
<ControlPosition x="444990" y="6454041" />
<MapPosition x="-173.43" y="113.17" />
</Control>
<Control>
<ControlCode>119</ControlCode>
<ControlPosition x="445032" y="6454224" />
<MapPosition x="-170.43" y="131.69" />
</Control>
<Control>
<ControlCode>95</ControlCode>
<ControlPosition x="444636" y="6454250" />
<MapPosition x="-210.03" y="131.72" />
</Control>
<Control>
<ControlCode>51</ControlCode>
<ControlPosition x="444871" y="6453514" />
<MapPosition x="-181.78" y="59.78" />
</Control>
<Control>
<ControlCode>109</ControlCode>
<ControlPosition x="445716" y="6452741" />
<MapPosition x="-92.47" y="-11.85" />
</Control>
<Control>
<ControlCode>44</ControlCode>
<ControlPosition x="445859" y="6452545" />
<MapPosition x="-76.89" y="-30.41" />
</Control>
<Control>
<ControlCode>150</ControlCode>
<ControlPosition x="445717" y="6452474" />
<MapPosition x="-90.61" y="-38.43" />
</Control>
<Control>
<ControlCode>143</ControlCode>
<ControlPosition x="445487" y="6452635" />
<MapPosition x="-114.59" y="-23.88" />
</Control>
<Control>
<ControlCode>113</ControlCode>
<ControlPosition x="445643" y="6452651" />
<MapPosition x="-99.18" y="-21.25" />
</Control>
<Control>
<ControlCode>70</ControlCode>
<ControlPosition x="445721" y="6452798" />
<MapPosition x="-92.37" y="-6.1" />
</Control>
<Control>
<ControlCode>54</ControlCode>
<ControlPosition x="445322" y="6452799" />
<MapPosition x="-132.15" y="-8.61" />
</Control>
<Control>
<ControlCode>97</ControlCode>
<ControlPosition x="445217" y="6453008" />
<MapPosition x="-143.95" y="11.55" />
</Control>
<Control>
<ControlCode>45</ControlCode>
<ControlPosition x="445953" y="6452803" />
<MapPosition x="-69.16" y="-4.05" />
</Control>
<Control>
<ControlCode>147</ControlCode>
<ControlPosition x="445350" y="6452984" />
<MapPosition x="-130.59" y="10.05" />
</Control>
<Control>
<ControlCode>39</ControlCode>
<ControlPosition x="445456" y="6452950" />
<MapPosition x="-119.74" y="7.36" />
</Control>
<Control>
<ControlCode>139</ControlCode>
<ControlPosition x="445134" y="6452747" />
<MapPosition x="-150.6" y="-15.05" />
</Control>
<Control>
<ControlCode>78</ControlCode>
<ControlPosition x="445180" y="6452651" />
<MapPosition x="-145.35" y="-24.25" />
</Control>
<FinishPoint>
<FinishPointCode>FIN1</FinishPointCode>
<ControlPosition x="445808" y="6452681" />
<MapPosition x="-82.9" y="-17.19" />
</FinishPoint>
<Course>
<CourseName>A lang</CourseName>
<CourseId>0</CourseId>
<CourseVariation>
<CourseVariationId>0</CourseVariationId>
<CourseLength>4400</CourseLength>
<StartPointCode>STA1</StartPointCode>
<CourseControl>
<Sequence>1</Sequence>
<ControlCode>35</ControlCode>
<LegLength>282</LegLength>
</CourseControl>
<CourseControl>
<Sequence>2</Sequence>
<ControlCode>91</ControlCode>
<LegLength>356</LegLength>
</CourseControl>
<CourseControl>
<Sequence>3</Sequence>
<ControlCode>76</ControlCode>
<LegLength>253</LegLength>
</CourseControl>
<CourseControl>
<Sequence>4</Sequence>
<ControlCode>75</ControlCode>
<LegLength>358</LegLength>
</CourseControl>
<CourseControl>
<Sequence>5</Sequence>
<ControlCode>116</ControlCode>
<LegLength>405</LegLength>
</CourseControl>
<CourseControl>
<Sequence>6</Sequence>
<ControlCode>119</ControlCode>
<LegLength>188</LegLength>
</CourseControl>
<CourseControl>
<Sequence>7</Sequence>
<ControlCode>95</ControlCode>
<LegLength>396</LegLength>
</CourseControl>
<CourseControl>
<Sequence>8</Sequence>
<ControlCode>107</ControlCode>
<LegLength>181</LegLength>
</CourseControl>
<CourseControl>
<Sequence>9</Sequence>
<ControlCode>51</ControlCode>
<LegLength>708</LegLength>
</CourseControl>
<CourseControl>
<Sequence>10</Sequence>
<ControlCode>109</ControlCode>
<LegLength>1145</LegLength>
</CourseControl>
<FinishPointCode>FIN1</FinishPointCode>
<DistanceToFinish>110</DistanceToFinish>
</CourseVariation>
</Course>
<Course>
<CourseName>A-kort</CourseName>
<CourseId>1</CourseId>
<CourseVariation>
<CourseVariationId>0</CourseVariationId>
<CourseLength>3400</CourseLength>
<StartPointCode>STA1</StartPointCode>
<CourseControl>
<Sequence>1</Sequence>
<ControlCode>35</ControlCode>
<LegLength>282</LegLength>
</CourseControl>
<CourseControl>
<Sequence>2</Sequence>
<ControlCode>91</ControlCode>
<LegLength>356</LegLength>
</CourseControl>
<CourseControl>
<Sequence>3</Sequence>
<ControlCode>76</ControlCode>
<LegLength>253</LegLength>
</CourseControl>
<CourseControl>
<Sequence>4</Sequence>
<ControlCode>75</ControlCode>
<LegLength>358</LegLength>
</CourseControl>
<CourseControl>
<Sequence>5</Sequence>
<ControlCode>116</ControlCode>
<LegLength>405</LegLength>
</CourseControl>
<CourseControl>
<Sequence>6</Sequence>
<ControlCode>51</ControlCode>
<LegLength>540</LegLength>
</CourseControl>
<CourseControl>
<Sequence>7</Sequence>
<ControlCode>109</ControlCode>
<LegLength>1145</LegLength>
</CourseControl>
<FinishPointCode>FIN1</FinishPointCode>
<DistanceToFinish>110</DistanceToFinish>
</CourseVariation>
</Course>
<Course>
<CourseName>N</CourseName>
<CourseId>2</CourseId>
<CourseVariation>
<CourseVariationId>0</CourseVariationId>
<CourseLength>2000</CourseLength>
<StartPointCode>STA2</StartPointCode>
<CourseControl>
<Sequence>1</Sequence>
<ControlCode>44</ControlCode>
<LegLength>143</LegLength>
</CourseControl>
<CourseControl>
<Sequence>2</Sequence>
<ControlCode>150</ControlCode>
<LegLength>159</LegLength>
</CourseControl>
<CourseControl>
<Sequence>3</Sequence>
<ControlCode>143</ControlCode>
<LegLength>280</LegLength>
</CourseControl>
<CourseControl>
<Sequence>4</Sequence>
<ControlCode>113</ControlCode>
<LegLength>156</LegLength>
</CourseControl>
<CourseControl>
<Sequence>5</Sequence>
<ControlCode>54</ControlCode>
<LegLength>353</LegLength>
</CourseControl>
<CourseControl>
<Sequence>6</Sequence>
<ControlCode>97</ControlCode>
<LegLength>234</LegLength>
</CourseControl>
<CourseControl>
<Sequence>7</Sequence>
<ControlCode>39</ControlCode>
<LegLength>246</LegLength>
</CourseControl>
<CourseControl>
<Sequence>8</Sequence>
<ControlCode>70</ControlCode>
<LegLength>305</LegLength>
</CourseControl>
<FinishPointCode>FIN1</FinishPointCode>
<DistanceToFinish>146</DistanceToFinish>
</CourseVariation>
</Course>
<Course>
<CourseName>C</CourseName>
<CourseId>3</CourseId>
<CourseVariation>
<CourseVariationId>0</CourseVariationId>
<CourseLength>2400</CourseLength>
<StartPointCode>STA2</StartPointCode>
<CourseControl>
<Sequence>1</Sequence>
<ControlCode>150</ControlCode>
<LegLength>225</LegLength>
</CourseControl>
<CourseControl>
<Sequence>2</Sequence>
<ControlCode>113</ControlCode>
<LegLength>192</LegLength>
</CourseControl>
<CourseControl>
<Sequence>3</Sequence>
<ControlCode>78</ControlCode>
<LegLength>463</LegLength>
</CourseControl>
<CourseControl>
<Sequence>4</Sequence>
<ControlCode>139</ControlCode>
<LegLength>106</LegLength>
</CourseControl>
<CourseControl>
<Sequence>5</Sequence>
<ControlCode>54</ControlCode>
<LegLength>195</LegLength>
</CourseControl>
<CourseControl>
<Sequence>6</Sequence>
<ControlCode>147</ControlCode>
<LegLength>187</LegLength>
</CourseControl>
<CourseControl>
<Sequence>7</Sequence>
<ControlCode>39</ControlCode>
<LegLength>112</LegLength>
</CourseControl>
<CourseControl>
<Sequence>8</Sequence>
<ControlCode>45</ControlCode>
<LegLength>519</LegLength>
</CourseControl>
<CourseControl>
<Sequence>9</Sequence>
<ControlCode>109</ControlCode>
<LegLength>246</LegLength>
</CourseControl>
<FinishPointCode>FIN1</FinishPointCode>
<DistanceToFinish>110</DistanceToFinish>
</CourseVariation>
</Course>
</CourseData>

47
sc_2021_ttime/mtr.csv Normal file
View File

@ -0,0 +1,47 @@
"M","0","14917","509049","06.07.21 18:15:38.000","06.07.21 18:15:20.000",509049,0000,0000,000,00000,035,00098,091,00260,076,00411,075,00567,116,00824,119,00929,095,01116,107,01213,051,01587,169,02082,046,02133,250,02159,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000004
"M","0","14917","507857","06.07.21 18:24:14.000","06.07.21 18:23:56.000",507857,0000,0000,000,00000,035,00173,091,00451,076,00691,075,00988,116,01461,051,01928,169,02986,046,03068,250,03089,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000005
"M","0","14917","510983","06.07.21 18:24:22.000","06.07.21 18:24:04.000",510983,0000,0000,000,00000,035,00183,091,00476,076,00717,075,01001,116,01428,051,02113,169,03195,046,03280,250,03290,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000006
"M","0","14917","248089","06.07.21 18:28:22.000","06.07.21 18:28:04.000",248089,0000,0000,000,00000,044,00062,150,00298,143,00617,144,00721,054,01091,097,01467,039,01733,070,02015,099,02016,046,02137,250,02164,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000007
"M","0","14917","507044","06.07.21 18:28:56.000","06.07.21 18:28:37.000",507044,0000,0000,000,00000,035,00183,091,00419,076,00650,075,00996,116,01377,119,01543,095,01862,107,01988,051,02767,169,03595,046,03673,250,03682,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000008
"M","0","14917","506935","06.07.21 18:29:04.000","06.07.21 18:28:46.000",506935,0000,0000,000,00000,035,00228,091,00514,076,00861,075,01192,116,01727,051,02369,169,03627,046,03717,250,03725,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000009
"M","0","14917","204836","06.07.21 18:29:46.000","06.07.21 18:29:28.000",204836,0000,0000,000,00000,031,00090,032,00261,033,00457,034,00555,035,00865,036,01017,032,01197,037,01245,038,01364,039,01493,040,01599,054,01689,053,01763,050,01812,140,01827,250,01847,250,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000010
"M","0","14917","225002","06.07.21 18:37:08.000","06.07.21 18:36:50.000",225002,0000,0000,000,00000,035,00137,091,00359,076,00549,075,00873,116,01192,051,01615,169,02257,046,02486,250,02492,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000011
"M","0","14917","506632","06.07.21 18:37:22.000","06.07.21 18:37:04.000",506632,0000,0000,000,00000,035,00136,091,00361,076,00662,075,00981,116,01421,051,01867,169,02663,046,02741,250,02753,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000012
"M","0","14917","515883","06.07.21 18:37:48.000","06.07.21 18:37:30.000",515883,0000,0000,000,00000,035,00381,091,00622,076,00871,075,01179,116,01507,051,01913,169,02762,046,02833,250,02876,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000013
"M","0","14917","197924","06.07.21 18:38:01.000","06.07.21 18:37:43.000",197924,0000,0000,000,00000,035,00293,091,00680,076,00911,075,01159,116,01505,051,02151,169,03084,046,03153,250,03178,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000014
"M","0","14917","184222","06.07.21 18:38:21.000","06.07.21 18:38:03.000",184222,0000,0000,000,00000,035,00143,091,00354,076,00521,075,00734,116,01060,051,01428,169,02108,046,02182,250,02225,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000015
"M","0","14917","510984","06.07.21 18:38:31.000","06.07.21 18:38:13.000",510984,0000,0000,000,00000,035,00116,091,00306,076,00459,075,00654,116,00966,119,01097,095,01348,107,01472,051,01993,169,02642,046,02706,250,02723,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000016
"M","0","14917","507040","06.07.21 18:38:41.000","06.07.21 18:38:23.000",507040,0000,0000,000,00000,035,00201,091,00409,076,00614,075,00910,116,01299,051,02228,169,03010,046,03081,250,03097,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000017
"M","0","14917","225087","06.07.21 18:38:47.000","06.07.21 18:38:29.000",225087,0000,0000,000,00000,035,00125,091,00326,076,00518,075,00748,116,01115,051,01440,169,02106,046,02171,250,02188,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000018
"M","0","14917","501115","06.07.21 18:38:52.000","06.07.21 18:38:34.000",501115,0000,0000,000,00000,035,00177,091,00464,076,00764,075,01232,116,01637,051,02369,169,03331,046,03409,250,03425,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000019
"M","0","14917","511474","06.07.21 18:39:07.000","06.07.21 18:38:49.000",511474,0000,0000,000,00000,035,00144,091,00357,076,00560,075,00787,116,01131,051,01511,169,02259,046,02340,250,02351,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000020
"M","0","14917","506629","06.07.21 18:40:58.000","06.07.21 18:40:40.000",506629,0000,0000,000,00000,035,00101,091,00252,076,00396,075,00571,116,00821,119,00937,095,01158,107,01255,051,01739,169,02371,046,02425,250,02433,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000021
"M","0","14917","203397","06.07.21 18:41:53.000","06.07.21 18:41:35.000",203397,0000,0000,000,00000,035,00130,091,00316,076,00485,075,00713,116,01099,051,01488,169,02155,046,02224,250,02233,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000022
"M","0","14917","225105","06.07.21 18:42:06.000","06.07.21 18:41:48.000",225105,0000,0000,000,00000,035,00152,091,00457,076,00662,075,00956,116,01330,051,01841,169,02619,046,02683,250,02690,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000023
"M","0","14917","255211","06.07.21 18:42:43.000","06.07.21 18:42:24.000",255211,0000,0000,000,00000,035,00190,091,00500,076,00828,075,01154,116,01698,051,02269,169,03399,046,03503,250,03513,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000024
"M","0","14917","504431","06.07.21 18:43:07.000","06.07.21 18:42:49.000",504431,0000,0000,000,00000,035,00130,091,00307,076,00460,075,00659,116,00974,119,01104,095,01356,107,01464,051,01960,169,02612,046,02675,250,02687,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000025
"M","0","14917","503611","06.07.21 18:43:51.000","06.07.21 18:43:33.000",503611,0000,0000,000,00000,035,00193,091,00493,076,00723,075,01019,116,01499,051,02035,169,03167,046,03270,250,03278,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000026
"M","0","14917","503969","06.07.21 18:45:48.000","06.07.21 18:45:30.000",503969,0000,0000,000,00000,035,00123,091,00316,076,00487,075,00722,116,01040,051,01619,169,02310,046,02376,250,02387,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000027
"M","0","14917","511473","06.07.21 18:48:21.000","06.07.21 18:48:03.000",511473,0000,0000,000,00000,035,00218,091,00539,076,00818,075,01230,116,01790,051,02855,169,04123,046,04242,250,04252,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000028
"M","0","14917","504087","06.07.21 18:50:44.000","06.07.21 18:50:26.000",504087,0000,0000,000,00000,035,00148,091,00405,076,00612,075,01088,116,01481,051,02462,046,03370,250,03376,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000029
"M","0","14917","185934","06.07.21 18:52:24.000","06.07.21 18:52:06.000",185934,0000,0000,000,00000,035,00207,091,00609,076,00844,075,01138,116,01550,119,01782,095,02093,107,02256,051,02939,169,03857,046,03951,250,03958,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000030
"M","0","14917","207798","06.07.21 18:53:00.000","06.07.21 18:52:42.000",207798,0000,0000,000,00000,035,00246,091,00547,076,00836,075,01216,116,01779,051,02407,169,03762,046,03879,250,03887,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000031
"M","0","14917","198060","06.07.21 18:53:37.000","06.07.21 18:53:19.000",198060,0000,0000,000,00000,035,00123,091,00352,076,00547,075,00791,116,01139,051,01587,169,02687,046,02775,250,02784,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000032
"M","0","14917","225005","06.07.21 18:58:44.000","06.07.21 18:58:26.000",225005,0000,0000,000,00000,150,00385,144,00900,078,01269,139,01399,054,02809,147,03221,039,03342,046,04013,250,04028,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000033
"M","0","14917","253839","06.07.21 19:05:14.000","06.07.21 19:04:55.000",253839,0000,0000,000,00000,035,00205,091,00854,076,01154,075,01573,116,02149,051,03003,169,04771,046,04901,250,04909,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000034
"M","0","14917","203292","06.07.21 19:06:02.000","06.07.21 19:05:44.000",203292,0000,0000,000,00000,150,00459,144,00649,078,01001,139,01142,250,04335,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000035
"M","0","14917","224819","06.07.21 19:07:54.000","06.07.21 19:07:36.000",224819,0000,0000,000,00000,035,00170,091,00652,076,00916,075,01274,116,01726,051,02644,169,03768,046,03845,250,03850,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000036
"M","0","14917","185940","06.07.21 19:10:00.000","06.07.21 19:09:42.000",185940,0000,0000,000,00000,035,00231,091,00661,076,00973,075,01383,116,02400,169,04881,046,04999,250,05007,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000037
"M","0","14917","510880","06.07.21 19:10:22.000","06.07.21 19:10:04.000",510880,0000,0000,000,00000,035,00192,091,00494,076,00836,075,01191,116,01734,051,02440,169,03597,046,03727,250,03748,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000038
"M","0","14917","204836","06.07.21 19:21:01.000","06.07.21 19:20:43.000",204836,0000,0000,000,00000,035,00134,091,00327,076,00496,075,00702,116,00956,119,01084,095,01332,107,01427,051,01940,169,02542,046,02611,250,02616,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000039
"M","0","14917","206546","06.07.21 19:21:09.000","06.07.21 19:20:50.000",206546,0000,0000,250,00009,051,00850,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000040
"M","0","14917","165351","06.07.21 19:27:55.000","06.07.21 19:27:37.000",165351,0000,0000,000,00000,035,00110,091,00335,076,00560,075,00812,116,01158,051,01600,169,02287,046,02363,250,02373,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000041
"M","0","14917","207732","06.07.21 19:29:43.000","06.07.21 19:29:24.000",207732,0000,0000,000,00000,035,00143,091,00394,076,00597,075,00886,116,01227,119,01402,095,01750,107,01875,051,02714,169,03498,046,03548,250,03564,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000042
"M","0","14917","086252","06.07.21 19:30:50.000","06.07.21 19:30:32.000",086252,0000,0000,000,00000,035,00154,091,00399,076,00628,075,00991,116,01423,051,02243,169,03407,046,03512,250,03521,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000043
"M","0","14917","245739","06.07.21 19:30:59.000","06.07.21 19:30:41.000",245739,0000,0000,000,00000,035,00366,091,00662,076,00934,075,01350,116,01933,051,02763,169,03944,046,04039,250,04054,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000044
"M","0","14917","186000","06.07.21 19:31:14.000","06.07.21 19:30:56.000",186000,0000,0000,000,00000,035,00245,091,00598,076,00923,075,01360,116,02005,051,02688,169,04109,046,04220,250,04231,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000045
"M","0","14917","246774","06.07.21 19:36:04.000","06.07.21 19:35:46.000",246774,0000,0000,000,00000,150,00279,144,00580,078,01013,139,01162,054,01627,147,02823,039,02955,045,03875,169,04263,046,04385,250,04394,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000046
"M","0","14917","255737","06.07.21 19:37:12.000","06.07.21 19:36:54.000",255737,0000,0000,000,00000,044,00049,150,00200,143,00467,144,00719,097,02533,039,02769,070,03031,099,03032,046,03184,250,03433,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000047
"M","0","14917","236001","06.07.21 19:38:18.000","06.07.21 19:38:00.000",236001,0000,0000,000,00000,035,00341,091,00783,076,01182,250,04032,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000048
"M","0","14917","248758","06.07.21 19:59:05.000","06.07.21 19:58:47.000",248758,0000,0000,000,00000,035,00153,091,00399,076,00638,075,00946,116,01354,119,01549,095,02102,107,02251,051,02917,169,03777,046,03864,250,03873,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000049
"M","0","14917","212044","06.07.21 20:02:44.000","06.07.21 20:02:26.000",212044,0000,0000,000,00000,035,00173,091,00450,076,00867,075,01317,116,01792,051,02395,169,03546,046,03655,250,03747,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000050
1 M 0 14917 509049 06.07.21 18:15:38.000 06.07.21 18:15:20.000 509049 0000 0000 000 00000 035 00098 091 00260 076 00411 075 00567 116 00824 119 00929 095 01116 107 01213 051 01587 169 02082 046 02133 250 02159 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000004
2 M 0 14917 507857 06.07.21 18:24:14.000 06.07.21 18:23:56.000 507857 0000 0000 000 00000 035 00173 091 00451 076 00691 075 00988 116 01461 051 01928 169 02986 046 03068 250 03089 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000005
3 M 0 14917 510983 06.07.21 18:24:22.000 06.07.21 18:24:04.000 510983 0000 0000 000 00000 035 00183 091 00476 076 00717 075 01001 116 01428 051 02113 169 03195 046 03280 250 03290 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000006
4 M 0 14917 248089 06.07.21 18:28:22.000 06.07.21 18:28:04.000 248089 0000 0000 000 00000 044 00062 150 00298 143 00617 144 00721 054 01091 097 01467 039 01733 070 02015 099 02016 046 02137 250 02164 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000007
5 M 0 14917 507044 06.07.21 18:28:56.000 06.07.21 18:28:37.000 507044 0000 0000 000 00000 035 00183 091 00419 076 00650 075 00996 116 01377 119 01543 095 01862 107 01988 051 02767 169 03595 046 03673 250 03682 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000008
6 M 0 14917 506935 06.07.21 18:29:04.000 06.07.21 18:28:46.000 506935 0000 0000 000 00000 035 00228 091 00514 076 00861 075 01192 116 01727 051 02369 169 03627 046 03717 250 03725 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000009
7 M 0 14917 204836 06.07.21 18:29:46.000 06.07.21 18:29:28.000 204836 0000 0000 000 00000 031 00090 032 00261 033 00457 034 00555 035 00865 036 01017 032 01197 037 01245 038 01364 039 01493 040 01599 054 01689 053 01763 050 01812 140 01827 250 01847 250 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000010
8 M 0 14917 225002 06.07.21 18:37:08.000 06.07.21 18:36:50.000 225002 0000 0000 000 00000 035 00137 091 00359 076 00549 075 00873 116 01192 051 01615 169 02257 046 02486 250 02492 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000011
9 M 0 14917 506632 06.07.21 18:37:22.000 06.07.21 18:37:04.000 506632 0000 0000 000 00000 035 00136 091 00361 076 00662 075 00981 116 01421 051 01867 169 02663 046 02741 250 02753 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000012
10 M 0 14917 515883 06.07.21 18:37:48.000 06.07.21 18:37:30.000 515883 0000 0000 000 00000 035 00381 091 00622 076 00871 075 01179 116 01507 051 01913 169 02762 046 02833 250 02876 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000013
11 M 0 14917 197924 06.07.21 18:38:01.000 06.07.21 18:37:43.000 197924 0000 0000 000 00000 035 00293 091 00680 076 00911 075 01159 116 01505 051 02151 169 03084 046 03153 250 03178 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000014
12 M 0 14917 184222 06.07.21 18:38:21.000 06.07.21 18:38:03.000 184222 0000 0000 000 00000 035 00143 091 00354 076 00521 075 00734 116 01060 051 01428 169 02108 046 02182 250 02225 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000015
13 M 0 14917 510984 06.07.21 18:38:31.000 06.07.21 18:38:13.000 510984 0000 0000 000 00000 035 00116 091 00306 076 00459 075 00654 116 00966 119 01097 095 01348 107 01472 051 01993 169 02642 046 02706 250 02723 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000016
14 M 0 14917 507040 06.07.21 18:38:41.000 06.07.21 18:38:23.000 507040 0000 0000 000 00000 035 00201 091 00409 076 00614 075 00910 116 01299 051 02228 169 03010 046 03081 250 03097 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000017
15 M 0 14917 225087 06.07.21 18:38:47.000 06.07.21 18:38:29.000 225087 0000 0000 000 00000 035 00125 091 00326 076 00518 075 00748 116 01115 051 01440 169 02106 046 02171 250 02188 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000018
16 M 0 14917 501115 06.07.21 18:38:52.000 06.07.21 18:38:34.000 501115 0000 0000 000 00000 035 00177 091 00464 076 00764 075 01232 116 01637 051 02369 169 03331 046 03409 250 03425 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000019
17 M 0 14917 511474 06.07.21 18:39:07.000 06.07.21 18:38:49.000 511474 0000 0000 000 00000 035 00144 091 00357 076 00560 075 00787 116 01131 051 01511 169 02259 046 02340 250 02351 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000020
18 M 0 14917 506629 06.07.21 18:40:58.000 06.07.21 18:40:40.000 506629 0000 0000 000 00000 035 00101 091 00252 076 00396 075 00571 116 00821 119 00937 095 01158 107 01255 051 01739 169 02371 046 02425 250 02433 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000021
19 M 0 14917 203397 06.07.21 18:41:53.000 06.07.21 18:41:35.000 203397 0000 0000 000 00000 035 00130 091 00316 076 00485 075 00713 116 01099 051 01488 169 02155 046 02224 250 02233 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000022
20 M 0 14917 225105 06.07.21 18:42:06.000 06.07.21 18:41:48.000 225105 0000 0000 000 00000 035 00152 091 00457 076 00662 075 00956 116 01330 051 01841 169 02619 046 02683 250 02690 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000023
21 M 0 14917 255211 06.07.21 18:42:43.000 06.07.21 18:42:24.000 255211 0000 0000 000 00000 035 00190 091 00500 076 00828 075 01154 116 01698 051 02269 169 03399 046 03503 250 03513 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000024
22 M 0 14917 504431 06.07.21 18:43:07.000 06.07.21 18:42:49.000 504431 0000 0000 000 00000 035 00130 091 00307 076 00460 075 00659 116 00974 119 01104 095 01356 107 01464 051 01960 169 02612 046 02675 250 02687 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000025
23 M 0 14917 503611 06.07.21 18:43:51.000 06.07.21 18:43:33.000 503611 0000 0000 000 00000 035 00193 091 00493 076 00723 075 01019 116 01499 051 02035 169 03167 046 03270 250 03278 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000026
24 M 0 14917 503969 06.07.21 18:45:48.000 06.07.21 18:45:30.000 503969 0000 0000 000 00000 035 00123 091 00316 076 00487 075 00722 116 01040 051 01619 169 02310 046 02376 250 02387 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000027
25 M 0 14917 511473 06.07.21 18:48:21.000 06.07.21 18:48:03.000 511473 0000 0000 000 00000 035 00218 091 00539 076 00818 075 01230 116 01790 051 02855 169 04123 046 04242 250 04252 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000028
26 M 0 14917 504087 06.07.21 18:50:44.000 06.07.21 18:50:26.000 504087 0000 0000 000 00000 035 00148 091 00405 076 00612 075 01088 116 01481 051 02462 046 03370 250 03376 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000029
27 M 0 14917 185934 06.07.21 18:52:24.000 06.07.21 18:52:06.000 185934 0000 0000 000 00000 035 00207 091 00609 076 00844 075 01138 116 01550 119 01782 095 02093 107 02256 051 02939 169 03857 046 03951 250 03958 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000030
28 M 0 14917 207798 06.07.21 18:53:00.000 06.07.21 18:52:42.000 207798 0000 0000 000 00000 035 00246 091 00547 076 00836 075 01216 116 01779 051 02407 169 03762 046 03879 250 03887 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000031
29 M 0 14917 198060 06.07.21 18:53:37.000 06.07.21 18:53:19.000 198060 0000 0000 000 00000 035 00123 091 00352 076 00547 075 00791 116 01139 051 01587 169 02687 046 02775 250 02784 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000032
30 M 0 14917 225005 06.07.21 18:58:44.000 06.07.21 18:58:26.000 225005 0000 0000 000 00000 150 00385 144 00900 078 01269 139 01399 054 02809 147 03221 039 03342 046 04013 250 04028 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000033
31 M 0 14917 253839 06.07.21 19:05:14.000 06.07.21 19:04:55.000 253839 0000 0000 000 00000 035 00205 091 00854 076 01154 075 01573 116 02149 051 03003 169 04771 046 04901 250 04909 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000034
32 M 0 14917 203292 06.07.21 19:06:02.000 06.07.21 19:05:44.000 203292 0000 0000 000 00000 150 00459 144 00649 078 01001 139 01142 250 04335 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000035
33 M 0 14917 224819 06.07.21 19:07:54.000 06.07.21 19:07:36.000 224819 0000 0000 000 00000 035 00170 091 00652 076 00916 075 01274 116 01726 051 02644 169 03768 046 03845 250 03850 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000036
34 M 0 14917 185940 06.07.21 19:10:00.000 06.07.21 19:09:42.000 185940 0000 0000 000 00000 035 00231 091 00661 076 00973 075 01383 116 02400 169 04881 046 04999 250 05007 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000037
35 M 0 14917 510880 06.07.21 19:10:22.000 06.07.21 19:10:04.000 510880 0000 0000 000 00000 035 00192 091 00494 076 00836 075 01191 116 01734 051 02440 169 03597 046 03727 250 03748 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000038
36 M 0 14917 204836 06.07.21 19:21:01.000 06.07.21 19:20:43.000 204836 0000 0000 000 00000 035 00134 091 00327 076 00496 075 00702 116 00956 119 01084 095 01332 107 01427 051 01940 169 02542 046 02611 250 02616 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000039
37 M 0 14917 206546 06.07.21 19:21:09.000 06.07.21 19:20:50.000 206546 0000 0000 250 00009 051 00850 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000040
38 M 0 14917 165351 06.07.21 19:27:55.000 06.07.21 19:27:37.000 165351 0000 0000 000 00000 035 00110 091 00335 076 00560 075 00812 116 01158 051 01600 169 02287 046 02363 250 02373 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000041
39 M 0 14917 207732 06.07.21 19:29:43.000 06.07.21 19:29:24.000 207732 0000 0000 000 00000 035 00143 091 00394 076 00597 075 00886 116 01227 119 01402 095 01750 107 01875 051 02714 169 03498 046 03548 250 03564 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000042
40 M 0 14917 086252 06.07.21 19:30:50.000 06.07.21 19:30:32.000 086252 0000 0000 000 00000 035 00154 091 00399 076 00628 075 00991 116 01423 051 02243 169 03407 046 03512 250 03521 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000043
41 M 0 14917 245739 06.07.21 19:30:59.000 06.07.21 19:30:41.000 245739 0000 0000 000 00000 035 00366 091 00662 076 00934 075 01350 116 01933 051 02763 169 03944 046 04039 250 04054 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000044
42 M 0 14917 186000 06.07.21 19:31:14.000 06.07.21 19:30:56.000 186000 0000 0000 000 00000 035 00245 091 00598 076 00923 075 01360 116 02005 051 02688 169 04109 046 04220 250 04231 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000045
43 M 0 14917 246774 06.07.21 19:36:04.000 06.07.21 19:35:46.000 246774 0000 0000 000 00000 150 00279 144 00580 078 01013 139 01162 054 01627 147 02823 039 02955 045 03875 169 04263 046 04385 250 04394 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000046
44 M 0 14917 255737 06.07.21 19:37:12.000 06.07.21 19:36:54.000 255737 0000 0000 000 00000 044 00049 150 00200 143 00467 144 00719 097 02533 039 02769 070 03031 099 03032 046 03184 250 03433 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000047
45 M 0 14917 236001 06.07.21 19:38:18.000 06.07.21 19:38:00.000 236001 0000 0000 000 00000 035 00341 091 00783 076 01182 250 04032 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000048
46 M 0 14917 248758 06.07.21 19:59:05.000 06.07.21 19:58:47.000 248758 0000 0000 000 00000 035 00153 091 00399 076 00638 075 00946 116 01354 119 01549 095 02102 107 02251 051 02917 169 03777 046 03864 250 03873 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000049
47 M 0 14917 212044 06.07.21 20:02:44.000 06.07.21 20:02:26.000 212044 0000 0000 000 00000 035 00173 091 00450 076 00867 075 01317 116 01792 051 02395 169 03546 046 03655 250 03747 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 000 00000 0000050

View File

@ -0,0 +1,9 @@
# Auto generated ttime configuration file.
-codes "35,91,76,75,116,119,95,107,51,169,46;35,91,76,75,116,51,169,46;44,150,143,144,54,97,39,70,46;150,144,78,139,54,147,39,45,169,46"
-courses "Herrer A-lang;Damer A-kort,Herrer A-kort;Nybegynner;Damer C,Herrer C"
-database "C:/Users/trygve/Documents/sc_2021_ttime/db_eventor.csv"
-emit "C:/Users/trygve/Documents/sc_2021_ttime/mtr.txt.txt"
-wxml "//dav.trygve.me@SSL/DavWWWRoot/Resultater.xml"
-htmlres "results.html"
-htmlsplit "splittimes.html"
-port COM3

38
serial_test.py Normal file
View File

@ -0,0 +1,38 @@
import serial
import mtrreader
from rich import inspect
import mtrlog
from datetime import datetime
import binascii
import otime
mtr = serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=40)
def main():
pree = mtr.read_until(expected=b'\xFF\xFF\xFF\xFF')
size = mtr.read(size=1)
if size == b'\xe6':
meat = mtr.read(229)
print('START')
full = b'\xFF\xFF\xFF\xFF' + size + meat
print(binascii.hexlify(full))
msg = mtrreader.MtrDataMessage(full)
f = mtrlog.MtrLogFormatter
#print(f.format(f, msg, datetime.now()))
#card_r_from_mtr_bytes(full)
inspect(otime.card_punch.from_mtr_bytes(full))
print('END')
elif size == b'\x37':
meat = mtr.read(55)
status = mtrreader.MtrStatusMessage(meat)
inspect(status)
print(status.year(),status.month(),status.day(),status.hours(),status.minutes())
main()
def send_status_command(mtr):
mtr.write(b'/ST')
if __name__ == '__main__':
#send_status_command(mtr)
main()

View File

@ -1,2 +0,0 @@
#!/bin/bash
socat -d -d pty,rawer,b9600 pty,rawer,b9600

View File

@ -1,632 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<CourseData xmlns="http://www.orienteering.org/datastandard/3.0" iofVersion="3.0" createTime="2023-07-21T22:04:10.2457657+02:00" creator="Purple Pen version 3.4.1">
<Event>
<Name>Sommercup 3 2023</Name>
</Event>
<RaceCourseData>
<Map>
<Scale>5000</Scale>
<MapPositionTopLeft x="554.47" y="-177.25" />
<MapPositionBottomRight x="692.79" y="-369.33" />
</Map>
<Control type="Start">
<Id>STA1</Id>
<Position lng="8.0325647364199977" lat="58.149244295853094" />
<MapPosition x="611" y="-253.09" />
</Control>
<Control type="Control">
<Id>144</Id>
<Position lng="8.03499900755055" lat="58.14787024882547" />
<MapPosition x="639.22" y="-284.09" />
</Control>
<Control type="Control">
<Id>149</Id>
<Position lng="8.0356561499559387" lat="58.145967340260484" />
<MapPosition x="646.35" y="-326.57" />
</Control>
<Control type="Control">
<Id>97</Id>
<Position lng="8.0378436728081422" lat="58.148107760064974" />
<MapPosition x="672.78" y="-279.28" />
</Control>
<Control type="Control">
<Id>103</Id>
<Position lng="8.0360008606351734" lat="58.147370196098493" />
<MapPosition x="650.85" y="-295.39" />
</Control>
<Control type="Control">
<Id>101</Id>
<Position lng="8.0355523755463274" lat="58.14559175907" />
<MapPosition x="645" y="-334.92" />
</Control>
<Control type="Control">
<Id>90</Id>
<Position lng="8.03400116974127" lat="58.146171185066841" />
<MapPosition x="626.93" y="-321.75" />
</Control>
<Control type="Control">
<Id>92</Id>
<Position lng="8.037920589403484" lat="58.147115867672035" />
<MapPosition x="673.37" y="-301.38" />
</Control>
<Control type="Control">
<Id>58</Id>
<Position lng="8.0309530672863474" lat="58.151044212250568" />
<MapPosition x="592.6" y="-212.74" />
</Control>
<Control type="Control">
<Id>31</Id>
<Position lng="8.0331378896304528" lat="58.151633896822609" />
<MapPosition x="618.51" y="-199.98" />
</Control>
<Control type="Control">
<Id>57</Id>
<Position lng="8.0302424086319544" lat="58.150300886183452" />
<MapPosition x="584" y="-229.17" />
</Control>
<Control type="Control">
<Id>117</Id>
<Position lng="8.035556432214376" lat="58.148411258327947" />
<MapPosition x="645.95" y="-272.14" />
</Control>
<Control type="Control">
<Id>142</Id>
<Position lng="8.0365230924736046" lat="58.148481196814345" />
<MapPosition x="657.35" y="-270.74" />
</Control>
<Control type="Control">
<Id>145</Id>
<Position lng="8.0363472980037187" lat="58.147945771039794" />
<MapPosition x="655.11" y="-282.64" />
</Control>
<Control type="Control">
<Id>44</Id>
<Position lng="8.0350591413137611" lat="58.147369304193369" />
<MapPosition x="639.76" y="-295.26" />
</Control>
<Control type="Control">
<Id>143</Id>
<Position lng="8.034073018408165" lat="58.147580029389005" />
<MapPosition x="628.22" y="-290.4" />
</Control>
<Control type="Control">
<Id>79</Id>
<Position lng="8.0366980493101252" lat="58.14685271886821" />
<MapPosition x="658.89" y="-307.03" />
</Control>
<Control type="Control">
<Id>106</Id>
<Position lng="8.0327779013974716" lat="58.147034162100653" />
<MapPosition x="612.8" y="-302.33" />
</Control>
<Control type="Control">
<Id>77</Id>
<Position lng="8.0367979953104989" lat="58.14883365867427" />
<MapPosition x="660.7" y="-262.94" />
</Control>
<Control type="Control">
<Id>48</Id>
<Position lng="8.0348013268232" lat="58.148715229049564" />
<MapPosition x="637.16" y="-265.24" />
</Control>
<Control type="Control">
<Id>118</Id>
<Position lng="8.03197142023774" lat="58.148678408040652" />
<MapPosition x="603.83" y="-265.59" />
</Control>
<Control type="Control">
<Id>55</Id>
<Position lng="8.0327348916329768" lat="58.151065104941317" />
<MapPosition x="613.58" y="-212.57" />
</Control>
<Control type="Control">
<Id>82</Id>
<Position lng="8.031512751007698" lat="58.150263077918389" />
<MapPosition x="598.94" y="-230.23" />
</Control>
<Control type="Control">
<Id>53</Id>
<Position lng="8.0313666570997064" lat="58.149110867807259" />
<MapPosition x="596.85" y="-255.86" />
</Control>
<Control type="Control">
<Id>52</Id>
<Position lng="8.0322493655393181" lat="58.152061531720946" />
<MapPosition x="608.18" y="-190.31" />
</Control>
<Control type="Control">
<Id>80</Id>
<Position lng="8.0298507978211617" lat="58.150581185788226" />
<MapPosition x="579.48" y="-222.86" />
</Control>
<Control type="Control">
<Id>59</Id>
<Position lng="8.0298617333084277" lat="58.151256560207671" />
<MapPosition x="579.82" y="-207.83" />
</Control>
<Control type="Control">
<Id>91</Id>
<Position lng="8.0354699440400381" lat="58.14721847398765" />
<MapPosition x="644.55" y="-298.68" />
</Control>
<Control type="Control">
<Id>63</Id>
<Position lng="8.03626480733685" lat="58.149405035587733" />
<MapPosition x="654.61" y="-250.13" />
</Control>
<Control type="Control">
<Id>56</Id>
<Position lng="8.03370406333622" lat="58.149676057790785" />
<MapPosition x="624.55" y="-243.67" />
</Control>
<Control type="Control">
<Id>54</Id>
<Position lng="8.03191788599621" lat="58.149594600771721" />
<MapPosition x="603.49" y="-245.18" />
</Control>
<Control type="Control">
<Id>61</Id>
<Position lng="8.0322226572704309" lat="58.15085453951724" />
<MapPosition x="607.48" y="-217.18" />
</Control>
<Control type="Control">
<Id>65</Id>
<Position lng="8.0342302154182867" lat="58.14910616635661" />
<MapPosition x="630.56" y="-256.44" />
</Control>
<Control type="Control">
<Id>105</Id>
<Position lng="8.0371868228530285" lat="58.147186024709271" />
<MapPosition x="664.75" y="-299.69" />
</Control>
<Control type="Finish">
<Id>FIN1</Id>
<Position lng="8.0305476762617225" lat="58.150000653056168" />
<MapPosition x="587.49" y="-235.9" />
</Control>
<Course>
<Name>A-lang</Name>
<Length>3200</Length>
<CourseControl type="Start">
<Control>STA1</Control>
</CourseControl>
<CourseControl type="Control">
<Control>144</Control>
<MapText>1</MapText>
<LegLength>240</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>117</Control>
<MapText>2</MapText>
<LegLength>69</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>142</Control>
<MapText>3</MapText>
<LegLength>57</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>145</Control>
<MapText>4</MapText>
<LegLength>61</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>144</Control>
<MapText>5</MapText>
<LegLength>80</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>44</Control>
<MapText>6</MapText>
<LegLength>56</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>143</Control>
<MapText>7</MapText>
<LegLength>63</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>144</Control>
<MapText>8</MapText>
<LegLength>63</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>103</Control>
<MapText>9</MapText>
<LegLength>81</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>79</Control>
<MapText>10</MapText>
<LegLength>71</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>149</Control>
<MapText>11</MapText>
<LegLength>116</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>101</Control>
<MapText>12</MapText>
<LegLength>42</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>90</Control>
<MapText>13</MapText>
<LegLength>112</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>106</Control>
<MapText>14</MapText>
<LegLength>120</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>79</Control>
<MapText>15</MapText>
<LegLength>232</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>92</Control>
<MapText>16</MapText>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>97</Control>
<MapText>17</MapText>
<LegLength>111</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>77</Control>
<MapText>18</MapText>
<LegLength>102</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>48</Control>
<MapText>19</MapText>
<LegLength>118</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>118</Control>
<MapText>20</MapText>
<LegLength>167</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>53</Control>
<MapText>21</MapText>
<LegLength>60</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>82</Control>
<MapText>22</MapText>
<LegLength>129</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>55</Control>
<MapText>23</MapText>
<LegLength>115</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>58</Control>
<MapText>24</MapText>
<LegLength>105</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>31</Control>
<MapText>25</MapText>
<LegLength>144</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>52</Control>
<MapText>26</MapText>
<LegLength>71</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>58</Control>
<MapText>27</MapText>
<LegLength>137</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>80</Control>
<MapText>28</MapText>
<LegLength>83</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>59</Control>
<MapText>29</MapText>
<LegLength>75</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>58</Control>
<MapText>30</MapText>
<LegLength>68</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>57</Control>
<MapText>31</MapText>
<LegLength>93</LegLength>
</CourseControl>
<CourseControl type="Finish" specialInstruction="FunnelTapedRoute">
<Control>FIN1</Control>
<LegLength>38</LegLength>
</CourseControl>
</Course>
<Course>
<Name>A-kort</Name>
<Length>2600</Length>
<CourseControl type="Start">
<Control>STA1</Control>
</CourseControl>
<CourseControl type="Control">
<Control>144</Control>
<MapText>1</MapText>
<LegLength>240</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>145</Control>
<MapText>2</MapText>
<LegLength>80</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>142</Control>
<MapText>3</MapText>
<LegLength>61</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>117</Control>
<MapText>4</MapText>
<LegLength>57</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>144</Control>
<MapText>5</MapText>
<LegLength>69</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>103</Control>
<MapText>6</MapText>
<LegLength>81</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>79</Control>
<MapText>7</MapText>
<LegLength>71</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>149</Control>
<MapText>8</MapText>
<LegLength>116</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>101</Control>
<MapText>9</MapText>
<LegLength>42</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>90</Control>
<MapText>10</MapText>
<LegLength>112</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>106</Control>
<MapText>11</MapText>
<LegLength>120</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>79</Control>
<MapText>12</MapText>
<LegLength>232</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>92</Control>
<MapText>13</MapText>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>97</Control>
<MapText>14</MapText>
<LegLength>111</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>77</Control>
<MapText>15</MapText>
<LegLength>102</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>48</Control>
<MapText>16</MapText>
<LegLength>118</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>118</Control>
<MapText>17</MapText>
<LegLength>167</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>53</Control>
<MapText>18</MapText>
<LegLength>60</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>82</Control>
<MapText>19</MapText>
<LegLength>129</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>55</Control>
<MapText>20</MapText>
<LegLength>115</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>58</Control>
<MapText>21</MapText>
<LegLength>105</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>80</Control>
<MapText>22</MapText>
<LegLength>83</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>59</Control>
<MapText>23</MapText>
<LegLength>75</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>58</Control>
<MapText>24</MapText>
<LegLength>68</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>57</Control>
<MapText>25</MapText>
<LegLength>93</LegLength>
</CourseControl>
<CourseControl type="Finish" specialInstruction="FunnelTapedRoute">
<Control>FIN1</Control>
<LegLength>38</LegLength>
</CourseControl>
</Course>
<Course>
<Name>N</Name>
<Length>1300</Length>
<CourseControl type="Start">
<Control>STA1</Control>
</CourseControl>
<CourseControl type="Control">
<Control>65</Control>
<MapText>1</MapText>
<LegLength>130</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>48</Control>
<MapText>2</MapText>
<LegLength>55</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>144</Control>
<MapText>3</MapText>
<LegLength>95</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>91</Control>
<MapText>4</MapText>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>97</Control>
<MapText>5</MapText>
<LegLength>171</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>63</Control>
<MapText>6</MapText>
<LegLength>172</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>56</Control>
<MapText>7</MapText>
<LegLength>154</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>54</Control>
<MapText>8</MapText>
<LegLength>106</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>61</Control>
<MapText>9</MapText>
<LegLength>141</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>58</Control>
<MapText>10</MapText>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>57</Control>
<MapText>11</MapText>
<LegLength>93</LegLength>
</CourseControl>
<CourseControl type="Finish" specialInstruction="FunnelTapedRoute">
<Control>FIN1</Control>
<LegLength>38</LegLength>
</CourseControl>
</Course>
<Course>
<Name>C</Name>
<Length>1500</Length>
<CourseControl type="Start">
<Control>STA1</Control>
</CourseControl>
<CourseControl type="Control">
<Control>48</Control>
<MapText>1</MapText>
<LegLength>175</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>97</Control>
<MapText>2</MapText>
<LegLength>191</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>105</Control>
<MapText>3</MapText>
<LegLength>110</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>103</Control>
<MapText>4</MapText>
<LegLength>73</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>91</Control>
<MapText>5</MapText>
<LegLength>36</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>144</Control>
<MapText>6</MapText>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>143</Control>
<MapText>7</MapText>
<LegLength>63</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>53</Control>
<MapText>8</MapText>
<LegLength>233</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>54</Control>
<MapText>9</MapText>
<LegLength>63</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>55</Control>
<MapText>10</MapText>
<LegLength>171</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>31</Control>
<MapText>11</MapText>
<LegLength>68</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>58</Control>
<MapText>12</MapText>
<LegLength>144</LegLength>
</CourseControl>
<CourseControl type="Control">
<Control>57</Control>
<MapText>13</MapText>
<LegLength>93</LegLength>
</CourseControl>
<CourseControl type="Finish" specialInstruction="FunnelTapedRoute">
<Control>FIN1</Control>
<LegLength>38</LegLength>
</CourseControl>
</Course>
</RaceCourseData>
</CourseData>

View File

@ -1,115 +0,0 @@
32799;X;Ahlbäck, Johan;Herrer A-lang;Wing OK;A,18618,15,379,32799;250596
34456;X;Andersen, Pål;Herrer A-lang;Søgne og Songdalen OK;A,18618,4,341,34456;253839
10520;X;Balchen, Eirik Glad;Herrer A-lang;Oddersjaa SSK;A,18618,4,248,10520;249929
9500;;Balchen, Frank Glad;Herrer A-kort;Oddersjaa SSK;A,18618,4,248,9500;515307
38237;X;Balchen, Nora Sandvand;Nybegynner;Oddersjaa SSK;A,18618,4,248,38237;251359
37658;X;Balchen, Ulrik Sandvand;Nybegynner;Oddersjaa SSK;A,18618,4,248,37658;255744
25273;X;Beckmann, Benedicte;Damer A-kort;Kristiansand OK;A,18618,4,189,25273;212044
30872;X;Birkeland, Kristian;Herrer A-lang;Birkenes IL;A,18618,4,40,30872;261030
34463;X;Birkeland, Per Are;Herrer A-lang;Birkenes IL;A,18618,4,40,34463;515883
7615;X;Bjørgum, Jon A;Herrer A-kort;IL Vindbjart;A,18618,4,166,7615;508819
190;X;Bjørnsen, Jack;Herrer A-kort;Kristiansand OK;A,18618,4,189,190;510880
6557;X;Blandkjenn, Jan;Herrer A-kort;Kristiansand OK;A,18618,4,189,6557;261416
35100;X;Böhm, Ulrik Mascali;Herrer A-lang;Kristiansand OK;A,18618,4,189,35100;247654
29280;X;Bøen, Christian;Herrer A-lang;Kristiansand OK;A,18618,4,189,29280;259979
2902;X;Bøen, Silje;Damer A-kort;Kristiansand OK;A,18618,4,189,2902;260788
13515;X;Børte, Gro;Damer A-kort;Kristiansand OK;A,18618,4,189,13515;512809
28601;X;Flaa, Mette Javenes;Damer A-kort;Birkenes IL;A,18618,4,40,28601;521029
24007;;Flaa, Per Johan;Herrer A-kort;Birkenes IL;A,18618,4,40,24007;255325
17763;X;Flaa, Sigmund Javenes;Herrer A-lang;Birkenes IL;A,18618,4,40,17763;521030
1400;X;Gjelsten, Ståle;Herrer A-lang;Kristiansand OK;A,18618,4,189,1400;506629
26200;X;Harstad Arntsen, Kajsa;Damer A-lang;Heming Orientering;A,18618,3,114,26200;233748
6762;X;Heivoll, Reidar;Herrer A-kort;Søgne og Songdalen OK;A,18618,4,341,6762;511474
6903;X;Hodne, Erik;Herrer A-kort;Oddersjaa SSK;A,18618,4,248,6903;511333
14996;X;Håland, Kjell Arne;Herrer A-lang;OK Sør;A,18618,4,257,14996;525046
8062;X;Johannessen, Nils Arne;Herrer A-lang;Kristiansand OK;A,18618,4,189,8062;512690
7432;X;Jonsmyr, Svein Roar;Herrer A-kort;Birkenes IL;A,18618,4,40,7432;203394
6907;X;Jørgensen, Magne Reier;Herrer A-kort;Kristiansand OK;A,18618,4,189,6907;255211
18662;X;Kalleson, Tina;Damer A-lang;Oppsal Orientering;A,18618,3,268,18662;255632
21788;X;Keskin, Aydin;Herrer C;Torridal IL;A,18618,4,352,21788;241013
25031;X;Killingmo, Lene Anett;Damer A-kort;OK Øst;A,18618,3,258,25031;514688
4627;X;Kittelsen, Rune;Herrer A-kort;Kristiansand OK;A,18618,4,189,4627;402905
29758;X;Kuhnle, Eivind Irgens;Herrer A-lang;Kristiansand OK;A,18618,4,189,29758;521042
7062;X;Larsen, Per;Herrer A-kort;Kristiansand OK;A,18618,4,189,7062;527382
1764;X;Laugen, Jan Petter;Herrer A-kort;IL Imås;A,18618,4,148,1764;517441
13170;X;Laugen, Kari Timenes;Damer A-kort;IL Imås;A,18618,4,148,13170;511781
52598;X;Loka, Daniel;Herrer C;;A,18618,0,,52598;259973
7848;X;Mestad, Kristin;Damer A-kort;Torridal IL;A,18618,4,352,7848;243222
7037;X;Mestad, Mette;Damer A-kort;Torridal IL;A,18618,4,352,7037;236434
6333;X;Moe, Dag;Herrer A-kort;Kristiansand OK;A,18618,4,189,6333;519875
28130;X;Moe, Dag Jørgen;Nybegynner;Torridal IL;A,18618,4,352,28130;519898
11548;X;Moe, Else;Damer C;Torridal IL;A,18618,4,352,11548;243121
5575;X;Moe, Jostein;Herrer A-lang;Torridal IL;A,18618,4,352,5575;519899
6335;X;Moe, Oddbjørg;Damer C;Kristiansand OK;A,18618,4,189,6335;519874
43585;X;Mollestad, Andreas;Herrer C;Kristiansand OK;A,18618,4,189,43585;260802
13746;X;Mollestad, Gunnar;Herrer A-lang;Kristiansand OK;A,18618,4,189,13746;266477
22756;X;Mollestad, Markus;Herrer A-lang;Kristiansand OK;A,18618,4,189,22756;212198
7026;X;Mulen, Ingvild;Damer A-kort;Kristiansand OK;A,18618,4,189,7026;510878
22979;X;Ribe, Anne Karin;Damer A-kort;Søgne og Songdalen OK;A,18618,4,341,22979;510423
8790;X;Ribe, Kristen;Herrer A-kort;Søgne og Songdalen OK;A,18618,4,341,8790;529329
36242;X;Solås, Arnt Egil;Herrer A-kort;Søgne og Songdalen OK;A,18618,4,341,36242;513623
28866;X;Solås, Frank;Herrer C;Søgne og Songdalen OK;A,18618,4,341,28866;520934
901;X;Strand, Erling;Herrer A-kort;Bergens TF;A,18618,8,37,901;268438
12712;X;Sundtjønn, Gunhild Aamli;Damer A-kort;Årvoll IL;A,18618,3,400,12712;265575
1042;X;Sundtjønn, Tone Aamli;Damer A-lang;Lillomarka OL;A,18618,3,203,1042;265937
12711;X;Sundtjønn, Tore;Herrer A-kort;Årvoll IL;A,18618,3,400,12711;237782
8584;X;Syvertsen, Svein Olav;Herrer A-kort;IL Høvdingen;A,18618,4,145,8584;229995
8029;X;Sæstad, Reidar;Herrer A-kort;Kristiansand OK;A,18618,4,189,8029;257393
6554;X;Sætran, Bjørn Idar;Herrer A-kort;IF Trauma;A,18618,4,134,6554;216677
34350;X;Sævig, Christian;Herrer A-kort;Afry BIL Kristiansand;A,18618,0,1798,34350;247823
7457;X;Thisted, Martin;Herrer C;Kristiansand OK;A,18618,4,189,7457;184307
20257;;Thisted, Ulrik;Herrer C;Kristiansand OK;A,18618,4,189,20257;184335
24049;X;Tobiassen, Marius;Herrer A-lang;IK Grane Arendal Orientering;A,18618,4,135,24049;516150
6523;X;Tømt, Per Kristian;Herrer A-lang;IL Imås;A,18618,4,148,6523;515210
27869;X;Udø, Inger Aurebekk;Damer A-kort;Torridal IL;A,18618,4,352,27869;86197
27870;X;Udø, Tuva Aurebekk;Damer A-kort;Torridal IL;A,18618,4,352,27870;86173
11494;X;Vaaje, Lars Peder;Herrer A-kort;Marnardal IL;A,18618,4,216,11494;515687
9249;X;Vassbø, Halvor;Herrer A-lang;IL Vindbjart;A,18618,4,166,9249;236736
25;X;Sedláček, Patrik;Herrer A-kort;Czech Republic;;263065
26;X;Junek, Matouš;Herrer A-kort;Czech Republic;;263090
27;X;Zápotocký, Jiří;Herrer A-kort;Czech Republic;;263083
28;X;Teringl, Vojtěch;Herrer A-lang;Czech Republic;;263082
29;X;Štrait, Vilém;Herrer A-kort;Czech Republic;;263074
30;X;Kuchař, Ondřej;Herrer A-lang;Czech Republic;;263081
31;X;Sedláček, Jaroslav;Herrer A-lang;Czech Republic;;263086
32;X;Kožina, Štěpán;Herrer A-lang;Czech Republic;;263089
33;X;Kabát, Martin;Herrer A-lang;Czech Republic;;263064
34;X;Čtrnáct, Franta;Herrer A-lang;Czech Republic;;263070
35;X;Gajda, Martin;Herrer A-lang;Czech Republic;;263073
36;X;Titz, Adam;Herrer A-lang;Czech Republic;;263085
37;X;Měšťan, Ondra;Herrer A-lang;Czech Republic;;263088
38;;Houska, Jindra;Herrer A-lang;Czech Republic;;263071
39;X;Navrátil, Šimon;Herrer A-lang;Czech Republic;;263079
40;X;Kabát, Honza;Herrer A-lang;Czech Republic;;263076
41;X;Landovský, Tomáš;Herrer A-lang;Czech Republic;;263072
42;X;Gajda, Jan;Herrer A-lang;Czech Republic;;263066
1;X;Vondráčková, Bětka;Damer A-kort;Czech Republic;;263091
2;X;Havlová, Tereza;Damer A-kort;Czech Republic;;263078
3;X;Mišeková, Kateřina;Damer A-kort;Czech Republic;;263067
4;X;Gregorová, Alice;Damer A-kort;Czech Republic;;263069
5;X;Janošíková, Marie;Damer A-kort;Czech Republic;;263062
6;X;Koubová, Hanka;Damer A-lang;Czech Republic;;263077
7;X;Škáchová, Viki;Damer A-lang;Czech Republic;;263084
8;X;Měšťanová, Terka;Damer A-lang;Czech Republic;;263075
9;X;Kotková, Adéla;Damer A-lang;Czech Republic;;263092
10;X;Housková, Bára;Damer A-lang;Czech Republic;;263063
11;X;Bambousková, Julča;Damer A-lang;Czech Republic;;263080
12;X;Lošťáková, Sára;Damer A-lang;Czech Republic;;263068
13;X;Štěpová, Kačka;Damer A-lang;Czech Republic;;249910
14;X;Magazu, Annabelle;Damer A-lang;Czech Republic;;255629
15;X;Štemberová, Bára;Damer A-lang;Czech Republic;;249905
16;X;Tomášková, Linda;Damer A-lang;Czech Republic;;259976
17;X;Krejčova, Lucka;Damer A-lang;Czech Republic;;251361
18;X;Kodejšová, Markéta;Damer A-lang;Czech Republic;;259974
19;X;Bartošová, Marie;Damer A-lang;Czech Republic;;249918
20;X;Arnoštová, Veronika;Damer A-lang;Czech Republic;;255638
21;X;Škáchová, Majda;Damer A-lang;Czech Republic;;259997
22;X;Plochová, Dominika;Damer A-lang;Czech Republic;;249916
23;X;Gregorová, Kamila;Damer A-lang;Czech Republic;;259978
24;X;Landovská, Petra;Damer A-lang;Czech Republic;;249911
25;X;Elleder David;Herrer A-lang;Czech Republic;;249917
26;X;Kvaase, Asle;Herrer A-lang;;;187059
27;X;Hodne, Håkon;Nybegynner;Oddersjaa SSK;;251252
28;X;Hodne, Eirik;Herrer A-lang;Oddersjaa SSK;;268492
29;X;Knutsen, Arild;Herrer A-kort;Søgne og Songdalen OK;;197924
30;X;Strand, Anette;Damer A-kort;Bergens TF;;245739
1 32799 X Ahlbäck, Johan Herrer A-lang Wing OK A,18618,15,379,32799 250596
2 34456 X Andersen, Pål Herrer A-lang Søgne og Songdalen OK A,18618,4,341,34456 253839
3 10520 X Balchen, Eirik Glad Herrer A-lang Oddersjaa SSK A,18618,4,248,10520 249929
4 9500 Balchen, Frank Glad Herrer A-kort Oddersjaa SSK A,18618,4,248,9500 515307
5 38237 X Balchen, Nora Sandvand Nybegynner Oddersjaa SSK A,18618,4,248,38237 251359
6 37658 X Balchen, Ulrik Sandvand Nybegynner Oddersjaa SSK A,18618,4,248,37658 255744
7 25273 X Beckmann, Benedicte Damer A-kort Kristiansand OK A,18618,4,189,25273 212044
8 30872 X Birkeland, Kristian Herrer A-lang Birkenes IL A,18618,4,40,30872 261030
9 34463 X Birkeland, Per Are Herrer A-lang Birkenes IL A,18618,4,40,34463 515883
10 7615 X Bjørgum, Jon A Herrer A-kort IL Vindbjart A,18618,4,166,7615 508819
11 190 X Bjørnsen, Jack Herrer A-kort Kristiansand OK A,18618,4,189,190 510880
12 6557 X Blandkjenn, Jan Herrer A-kort Kristiansand OK A,18618,4,189,6557 261416
13 35100 X Böhm, Ulrik Mascali Herrer A-lang Kristiansand OK A,18618,4,189,35100 247654
14 29280 X Bøen, Christian Herrer A-lang Kristiansand OK A,18618,4,189,29280 259979
15 2902 X Bøen, Silje Damer A-kort Kristiansand OK A,18618,4,189,2902 260788
16 13515 X Børte, Gro Damer A-kort Kristiansand OK A,18618,4,189,13515 512809
17 28601 X Flaa, Mette Javenes Damer A-kort Birkenes IL A,18618,4,40,28601 521029
18 24007 Flaa, Per Johan Herrer A-kort Birkenes IL A,18618,4,40,24007 255325
19 17763 X Flaa, Sigmund Javenes Herrer A-lang Birkenes IL A,18618,4,40,17763 521030
20 1400 X Gjelsten, Ståle Herrer A-lang Kristiansand OK A,18618,4,189,1400 506629
21 26200 X Harstad Arntsen, Kajsa Damer A-lang Heming Orientering A,18618,3,114,26200 233748
22 6762 X Heivoll, Reidar Herrer A-kort Søgne og Songdalen OK A,18618,4,341,6762 511474
23 6903 X Hodne, Erik Herrer A-kort Oddersjaa SSK A,18618,4,248,6903 511333
24 14996 X Håland, Kjell Arne Herrer A-lang OK Sør A,18618,4,257,14996 525046
25 8062 X Johannessen, Nils Arne Herrer A-lang Kristiansand OK A,18618,4,189,8062 512690
26 7432 X Jonsmyr, Svein Roar Herrer A-kort Birkenes IL A,18618,4,40,7432 203394
27 6907 X Jørgensen, Magne Reier Herrer A-kort Kristiansand OK A,18618,4,189,6907 255211
28 18662 X Kalleson, Tina Damer A-lang Oppsal Orientering A,18618,3,268,18662 255632
29 21788 X Keskin, Aydin Herrer C Torridal IL A,18618,4,352,21788 241013
30 25031 X Killingmo, Lene Anett Damer A-kort OK Øst A,18618,3,258,25031 514688
31 4627 X Kittelsen, Rune Herrer A-kort Kristiansand OK A,18618,4,189,4627 402905
32 29758 X Kuhnle, Eivind Irgens Herrer A-lang Kristiansand OK A,18618,4,189,29758 521042
33 7062 X Larsen, Per Herrer A-kort Kristiansand OK A,18618,4,189,7062 527382
34 1764 X Laugen, Jan Petter Herrer A-kort IL Imås A,18618,4,148,1764 517441
35 13170 X Laugen, Kari Timenes Damer A-kort IL Imås A,18618,4,148,13170 511781
36 52598 X Loka, Daniel Herrer C A,18618,0,,52598 259973
37 7848 X Mestad, Kristin Damer A-kort Torridal IL A,18618,4,352,7848 243222
38 7037 X Mestad, Mette Damer A-kort Torridal IL A,18618,4,352,7037 236434
39 6333 X Moe, Dag Herrer A-kort Kristiansand OK A,18618,4,189,6333 519875
40 28130 X Moe, Dag Jørgen Nybegynner Torridal IL A,18618,4,352,28130 519898
41 11548 X Moe, Else Damer C Torridal IL A,18618,4,352,11548 243121
42 5575 X Moe, Jostein Herrer A-lang Torridal IL A,18618,4,352,5575 519899
43 6335 X Moe, Oddbjørg Damer C Kristiansand OK A,18618,4,189,6335 519874
44 43585 X Mollestad, Andreas Herrer C Kristiansand OK A,18618,4,189,43585 260802
45 13746 X Mollestad, Gunnar Herrer A-lang Kristiansand OK A,18618,4,189,13746 266477
46 22756 X Mollestad, Markus Herrer A-lang Kristiansand OK A,18618,4,189,22756 212198
47 7026 X Mulen, Ingvild Damer A-kort Kristiansand OK A,18618,4,189,7026 510878
48 22979 X Ribe, Anne Karin Damer A-kort Søgne og Songdalen OK A,18618,4,341,22979 510423
49 8790 X Ribe, Kristen Herrer A-kort Søgne og Songdalen OK A,18618,4,341,8790 529329
50 36242 X Solås, Arnt Egil Herrer A-kort Søgne og Songdalen OK A,18618,4,341,36242 513623
51 28866 X Solås, Frank Herrer C Søgne og Songdalen OK A,18618,4,341,28866 520934
52 901 X Strand, Erling Herrer A-kort Bergens TF A,18618,8,37,901 268438
53 12712 X Sundtjønn, Gunhild Aamli Damer A-kort Årvoll IL A,18618,3,400,12712 265575
54 1042 X Sundtjønn, Tone Aamli Damer A-lang Lillomarka OL A,18618,3,203,1042 265937
55 12711 X Sundtjønn, Tore Herrer A-kort Årvoll IL A,18618,3,400,12711 237782
56 8584 X Syvertsen, Svein Olav Herrer A-kort IL Høvdingen A,18618,4,145,8584 229995
57 8029 X Sæstad, Reidar Herrer A-kort Kristiansand OK A,18618,4,189,8029 257393
58 6554 X Sætran, Bjørn Idar Herrer A-kort IF Trauma A,18618,4,134,6554 216677
59 34350 X Sævig, Christian Herrer A-kort Afry BIL Kristiansand A,18618,0,1798,34350 247823
60 7457 X Thisted, Martin Herrer C Kristiansand OK A,18618,4,189,7457 184307
61 20257 Thisted, Ulrik Herrer C Kristiansand OK A,18618,4,189,20257 184335
62 24049 X Tobiassen, Marius Herrer A-lang IK Grane Arendal Orientering A,18618,4,135,24049 516150
63 6523 X Tømt, Per Kristian Herrer A-lang IL Imås A,18618,4,148,6523 515210
64 27869 X Udø, Inger Aurebekk Damer A-kort Torridal IL A,18618,4,352,27869 86197
65 27870 X Udø, Tuva Aurebekk Damer A-kort Torridal IL A,18618,4,352,27870 86173
66 11494 X Vaaje, Lars Peder Herrer A-kort Marnardal IL A,18618,4,216,11494 515687
67 9249 X Vassbø, Halvor Herrer A-lang IL Vindbjart A,18618,4,166,9249 236736
68 25 X Sedláček, Patrik Herrer A-kort Czech Republic 263065
69 26 X Junek, Matouš Herrer A-kort Czech Republic 263090
70 27 X Zápotocký, Jiří Herrer A-kort Czech Republic 263083
71 28 X Teringl, Vojtěch Herrer A-lang Czech Republic 263082
72 29 X Štrait, Vilém Herrer A-kort Czech Republic 263074
73 30 X Kuchař, Ondřej Herrer A-lang Czech Republic 263081
74 31 X Sedláček, Jaroslav Herrer A-lang Czech Republic 263086
75 32 X Kožina, Štěpán Herrer A-lang Czech Republic 263089
76 33 X Kabát, Martin Herrer A-lang Czech Republic 263064
77 34 X Čtrnáct, Franta Herrer A-lang Czech Republic 263070
78 35 X Gajda, Martin Herrer A-lang Czech Republic 263073
79 36 X Titz, Adam Herrer A-lang Czech Republic 263085
80 37 X Měšťan, Ondra Herrer A-lang Czech Republic 263088
81 38 Houska, Jindra Herrer A-lang Czech Republic 263071
82 39 X Navrátil, Šimon Herrer A-lang Czech Republic 263079
83 40 X Kabát, Honza Herrer A-lang Czech Republic 263076
84 41 X Landovský, Tomáš Herrer A-lang Czech Republic 263072
85 42 X Gajda, Jan Herrer A-lang Czech Republic 263066
86 1 X Vondráčková, Bětka Damer A-kort Czech Republic 263091
87 2 X Havlová, Tereza Damer A-kort Czech Republic 263078
88 3 X Mišeková, Kateřina Damer A-kort Czech Republic 263067
89 4 X Gregorová, Alice Damer A-kort Czech Republic 263069
90 5 X Janošíková, Marie Damer A-kort Czech Republic 263062
91 6 X Koubová, Hanka Damer A-lang Czech Republic 263077
92 7 X Škáchová, Viki Damer A-lang Czech Republic 263084
93 8 X Měšťanová, Terka Damer A-lang Czech Republic 263075
94 9 X Kotková, Adéla Damer A-lang Czech Republic 263092
95 10 X Housková, Bára Damer A-lang Czech Republic 263063
96 11 X Bambousková, Julča Damer A-lang Czech Republic 263080
97 12 X Lošťáková, Sára Damer A-lang Czech Republic 263068
98 13 X Štěpová, Kačka Damer A-lang Czech Republic 249910
99 14 X Magazu, Annabelle Damer A-lang Czech Republic 255629
100 15 X Štemberová, Bára Damer A-lang Czech Republic 249905
101 16 X Tomášková, Linda Damer A-lang Czech Republic 259976
102 17 X Krejčova, Lucka Damer A-lang Czech Republic 251361
103 18 X Kodejšová, Markéta Damer A-lang Czech Republic 259974
104 19 X Bartošová, Marie Damer A-lang Czech Republic 249918
105 20 X Arnoštová, Veronika Damer A-lang Czech Republic 255638
106 21 X Škáchová, Majda Damer A-lang Czech Republic 259997
107 22 X Plochová, Dominika Damer A-lang Czech Republic 249916
108 23 X Gregorová, Kamila Damer A-lang Czech Republic 259978
109 24 X Landovská, Petra Damer A-lang Czech Republic 249911
110 25 X Elleder David Herrer A-lang Czech Republic 249917
111 26 X Kvaase, Asle Herrer A-lang 187059
112 27 X Hodne, Håkon Nybegynner Oddersjaa SSK 251252
113 28 X Hodne, Eirik Herrer A-lang Oddersjaa SSK 268492
114 29 X Knutsen, Arild Herrer A-kort Søgne og Songdalen OK 197924
115 30 X Strand, Anette Damer A-kort Bergens TF 245739

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
https://eventor.orientering.no/Events/Show/18618

View File

@ -1,636 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<CourseData>
<IOFVersion version="2.0.3" />
<ModifyDate>
<Date>2023-07-18</Date>
<Clock>18:58</Clock>
</ModifyDate>
<Map>
<Scale>5000</Scale>
<MapPosition x="554.47" y="-177.25" />
</Map>
<StartPoint>
<StartPointCode>STA1</StartPointCode>
<ControlPosition x="443055" y="6445735" />
<MapPosition x="611" y="-253.09" />
</StartPoint>
<Control>
<ControlCode>144</ControlCode>
<ControlPosition x="443196" y="6445580" />
<MapPosition x="639.22" y="-284.09" />
</Control>
<Control>
<ControlCode>149</ControlCode>
<ControlPosition x="443232" y="6445367" />
<MapPosition x="646.35" y="-326.57" />
</Control>
<Control>
<ControlCode>97</ControlCode>
<ControlPosition x="443364" y="6445604" />
<MapPosition x="672.78" y="-279.28" />
</Control>
<Control>
<ControlCode>103</ControlCode>
<ControlPosition x="443254" y="6445523" />
<MapPosition x="650.85" y="-295.39" />
</Control>
<Control>
<ControlCode>101</ControlCode>
<ControlPosition x="443225" y="6445325" />
<MapPosition x="645" y="-334.92" />
</Control>
<Control>
<ControlCode>90</ControlCode>
<ControlPosition x="443135" y="6445391" />
<MapPosition x="626.93" y="-321.75" />
</Control>
<Control>
<ControlCode>92</ControlCode>
<ControlPosition x="443367" y="6445493" />
<MapPosition x="673.37" y="-301.38" />
</Control>
<Control>
<ControlCode>58</ControlCode>
<ControlPosition x="442963" y="6445936" />
<MapPosition x="592.6" y="-212.74" />
</Control>
<Control>
<ControlCode>31</ControlCode>
<ControlPosition x="443093" y="6446000" />
<MapPosition x="618.51" y="-199.98" />
</Control>
<Control>
<ControlCode>57</ControlCode>
<ControlPosition x="442920" y="6445854" />
<MapPosition x="584" y="-229.17" />
</Control>
<Control>
<ControlCode>117</ControlCode>
<ControlPosition x="443230" y="6445639" />
<MapPosition x="645.95" y="-272.14" />
</Control>
<Control>
<ControlCode>142</ControlCode>
<ControlPosition x="443287" y="6445646" />
<MapPosition x="657.35" y="-270.74" />
</Control>
<Control>
<ControlCode>145</ControlCode>
<ControlPosition x="443276" y="6445587" />
<MapPosition x="655.11" y="-282.64" />
</Control>
<Control>
<ControlCode>44</ControlCode>
<ControlPosition x="443199" y="6445524" />
<MapPosition x="639.76" y="-295.26" />
</Control>
<Control>
<ControlCode>143</ControlCode>
<ControlPosition x="443141" y="6445548" />
<MapPosition x="628.22" y="-290.4" />
</Control>
<Control>
<ControlCode>79</ControlCode>
<ControlPosition x="443294" y="6445465" />
<MapPosition x="658.89" y="-307.03" />
</Control>
<Control>
<ControlCode>106</ControlCode>
<ControlPosition x="443064" y="6445488" />
<MapPosition x="612.8" y="-302.33" />
</Control>
<Control>
<ControlCode>77</ControlCode>
<ControlPosition x="443304" y="6445685" />
<MapPosition x="660.7" y="-262.94" />
</Control>
<Control>
<ControlCode>48</ControlCode>
<ControlPosition x="443186" y="6445674" />
<MapPosition x="637.16" y="-265.24" />
</Control>
<Control>
<ControlCode>118</ControlCode>
<ControlPosition x="443019" y="6445672" />
<MapPosition x="603.83" y="-265.59" />
</Control>
<Control>
<ControlCode>55</ControlCode>
<ControlPosition x="443068" y="6445937" />
<MapPosition x="613.58" y="-212.57" />
</Control>
<Control>
<ControlCode>82</ControlCode>
<ControlPosition x="442995" y="6445849" />
<MapPosition x="598.94" y="-230.23" />
</Control>
<Control>
<ControlCode>53</ControlCode>
<ControlPosition x="442984" y="6445721" />
<MapPosition x="596.85" y="-255.86" />
</Control>
<Control>
<ControlCode>52</ControlCode>
<ControlPosition x="443041" y="6446048" />
<MapPosition x="608.18" y="-190.31" />
</Control>
<Control>
<ControlCode>80</ControlCode>
<ControlPosition x="442897" y="6445886" />
<MapPosition x="579.48" y="-222.86" />
</Control>
<Control>
<ControlCode>59</ControlCode>
<ControlPosition x="442899" y="6445961" />
<MapPosition x="579.82" y="-207.83" />
</Control>
<Control>
<ControlCode>91</ControlCode>
<ControlPosition x="443223" y="6445507" />
<MapPosition x="644.55" y="-298.68" />
</Control>
<Control>
<ControlCode>63</ControlCode>
<ControlPosition x="443273" y="6445749" />
<MapPosition x="654.61" y="-250.13" />
</Control>
<Control>
<ControlCode>56</ControlCode>
<ControlPosition x="443123" y="6445782" />
<MapPosition x="624.55" y="-243.67" />
</Control>
<Control>
<ControlCode>54</ControlCode>
<ControlPosition x="443017" y="6445774" />
<MapPosition x="603.49" y="-245.18" />
</Control>
<Control>
<ControlCode>61</ControlCode>
<ControlPosition x="443037" y="6445914" />
<MapPosition x="607.48" y="-217.18" />
</Control>
<Control>
<ControlCode>65</ControlCode>
<ControlPosition x="443153" y="6445718" />
<MapPosition x="630.56" y="-256.44" />
</Control>
<Control>
<ControlCode>105</ControlCode>
<ControlPosition x="443324" y="6445502" />
<MapPosition x="664.75" y="-299.69" />
</Control>
<FinishPoint>
<FinishPointCode>FIN1</FinishPointCode>
<ControlPosition x="442937" y="6445820" />
<MapPosition x="587.49" y="-235.9" />
</FinishPoint>
<Course>
<CourseName>A-lang</CourseName>
<CourseId>0</CourseId>
<CourseVariation>
<CourseVariationId>0</CourseVariationId>
<CourseLength>3200</CourseLength>
<StartPointCode>STA1</StartPointCode>
<CourseControl>
<Sequence>1</Sequence>
<ControlCode>144</ControlCode>
<LegLength>240</LegLength>
</CourseControl>
<CourseControl>
<Sequence>2</Sequence>
<ControlCode>117</ControlCode>
<LegLength>69</LegLength>
</CourseControl>
<CourseControl>
<Sequence>3</Sequence>
<ControlCode>142</ControlCode>
<LegLength>57</LegLength>
</CourseControl>
<CourseControl>
<Sequence>4</Sequence>
<ControlCode>145</ControlCode>
<LegLength>61</LegLength>
</CourseControl>
<CourseControl>
<Sequence>5</Sequence>
<ControlCode>144</ControlCode>
<LegLength>80</LegLength>
</CourseControl>
<CourseControl>
<Sequence>6</Sequence>
<ControlCode>44</ControlCode>
<LegLength>56</LegLength>
</CourseControl>
<CourseControl>
<Sequence>7</Sequence>
<ControlCode>143</ControlCode>
<LegLength>63</LegLength>
</CourseControl>
<CourseControl>
<Sequence>8</Sequence>
<ControlCode>144</ControlCode>
<LegLength>63</LegLength>
</CourseControl>
<CourseControl>
<Sequence>9</Sequence>
<ControlCode>103</ControlCode>
<LegLength>81</LegLength>
</CourseControl>
<CourseControl>
<Sequence>10</Sequence>
<ControlCode>79</ControlCode>
<LegLength>71</LegLength>
</CourseControl>
<CourseControl>
<Sequence>11</Sequence>
<ControlCode>149</ControlCode>
<LegLength>116</LegLength>
</CourseControl>
<CourseControl>
<Sequence>12</Sequence>
<ControlCode>101</ControlCode>
<LegLength>42</LegLength>
</CourseControl>
<CourseControl>
<Sequence>13</Sequence>
<ControlCode>90</ControlCode>
<LegLength>112</LegLength>
</CourseControl>
<CourseControl>
<Sequence>14</Sequence>
<ControlCode>106</ControlCode>
<LegLength>120</LegLength>
</CourseControl>
<CourseControl>
<Sequence>15</Sequence>
<ControlCode>79</ControlCode>
<LegLength>232</LegLength>
</CourseControl>
<CourseControl>
<Sequence>16</Sequence>
<ControlCode>92</ControlCode>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl>
<Sequence>17</Sequence>
<ControlCode>97</ControlCode>
<LegLength>111</LegLength>
</CourseControl>
<CourseControl>
<Sequence>18</Sequence>
<ControlCode>77</ControlCode>
<LegLength>102</LegLength>
</CourseControl>
<CourseControl>
<Sequence>19</Sequence>
<ControlCode>48</ControlCode>
<LegLength>118</LegLength>
</CourseControl>
<CourseControl>
<Sequence>20</Sequence>
<ControlCode>118</ControlCode>
<LegLength>167</LegLength>
</CourseControl>
<CourseControl>
<Sequence>21</Sequence>
<ControlCode>53</ControlCode>
<LegLength>60</LegLength>
</CourseControl>
<CourseControl>
<Sequence>22</Sequence>
<ControlCode>82</ControlCode>
<LegLength>129</LegLength>
</CourseControl>
<CourseControl>
<Sequence>23</Sequence>
<ControlCode>55</ControlCode>
<LegLength>115</LegLength>
</CourseControl>
<CourseControl>
<Sequence>24</Sequence>
<ControlCode>58</ControlCode>
<LegLength>105</LegLength>
</CourseControl>
<CourseControl>
<Sequence>25</Sequence>
<ControlCode>31</ControlCode>
<LegLength>144</LegLength>
</CourseControl>
<CourseControl>
<Sequence>26</Sequence>
<ControlCode>52</ControlCode>
<LegLength>71</LegLength>
</CourseControl>
<CourseControl>
<Sequence>27</Sequence>
<ControlCode>58</ControlCode>
<LegLength>137</LegLength>
</CourseControl>
<CourseControl>
<Sequence>28</Sequence>
<ControlCode>80</ControlCode>
<LegLength>83</LegLength>
</CourseControl>
<CourseControl>
<Sequence>29</Sequence>
<ControlCode>59</ControlCode>
<LegLength>75</LegLength>
</CourseControl>
<CourseControl>
<Sequence>30</Sequence>
<ControlCode>58</ControlCode>
<LegLength>68</LegLength>
</CourseControl>
<CourseControl>
<Sequence>31</Sequence>
<ControlCode>57</ControlCode>
<LegLength>93</LegLength>
</CourseControl>
<FinishPointCode>FIN1</FinishPointCode>
<DistanceToFinish>38</DistanceToFinish>
</CourseVariation>
</Course>
<Course>
<CourseName>A-kort</CourseName>
<CourseId>1</CourseId>
<CourseVariation>
<CourseVariationId>0</CourseVariationId>
<CourseLength>2600</CourseLength>
<StartPointCode>STA1</StartPointCode>
<CourseControl>
<Sequence>1</Sequence>
<ControlCode>144</ControlCode>
<LegLength>240</LegLength>
</CourseControl>
<CourseControl>
<Sequence>2</Sequence>
<ControlCode>145</ControlCode>
<LegLength>80</LegLength>
</CourseControl>
<CourseControl>
<Sequence>3</Sequence>
<ControlCode>142</ControlCode>
<LegLength>61</LegLength>
</CourseControl>
<CourseControl>
<Sequence>4</Sequence>
<ControlCode>117</ControlCode>
<LegLength>57</LegLength>
</CourseControl>
<CourseControl>
<Sequence>5</Sequence>
<ControlCode>144</ControlCode>
<LegLength>69</LegLength>
</CourseControl>
<CourseControl>
<Sequence>6</Sequence>
<ControlCode>103</ControlCode>
<LegLength>81</LegLength>
</CourseControl>
<CourseControl>
<Sequence>7</Sequence>
<ControlCode>79</ControlCode>
<LegLength>71</LegLength>
</CourseControl>
<CourseControl>
<Sequence>8</Sequence>
<ControlCode>149</ControlCode>
<LegLength>116</LegLength>
</CourseControl>
<CourseControl>
<Sequence>9</Sequence>
<ControlCode>101</ControlCode>
<LegLength>42</LegLength>
</CourseControl>
<CourseControl>
<Sequence>10</Sequence>
<ControlCode>90</ControlCode>
<LegLength>112</LegLength>
</CourseControl>
<CourseControl>
<Sequence>11</Sequence>
<ControlCode>106</ControlCode>
<LegLength>120</LegLength>
</CourseControl>
<CourseControl>
<Sequence>12</Sequence>
<ControlCode>79</ControlCode>
<LegLength>232</LegLength>
</CourseControl>
<CourseControl>
<Sequence>13</Sequence>
<ControlCode>92</ControlCode>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl>
<Sequence>14</Sequence>
<ControlCode>97</ControlCode>
<LegLength>111</LegLength>
</CourseControl>
<CourseControl>
<Sequence>15</Sequence>
<ControlCode>77</ControlCode>
<LegLength>102</LegLength>
</CourseControl>
<CourseControl>
<Sequence>16</Sequence>
<ControlCode>48</ControlCode>
<LegLength>118</LegLength>
</CourseControl>
<CourseControl>
<Sequence>17</Sequence>
<ControlCode>118</ControlCode>
<LegLength>167</LegLength>
</CourseControl>
<CourseControl>
<Sequence>18</Sequence>
<ControlCode>53</ControlCode>
<LegLength>60</LegLength>
</CourseControl>
<CourseControl>
<Sequence>19</Sequence>
<ControlCode>82</ControlCode>
<LegLength>129</LegLength>
</CourseControl>
<CourseControl>
<Sequence>20</Sequence>
<ControlCode>55</ControlCode>
<LegLength>115</LegLength>
</CourseControl>
<CourseControl>
<Sequence>21</Sequence>
<ControlCode>58</ControlCode>
<LegLength>105</LegLength>
</CourseControl>
<CourseControl>
<Sequence>22</Sequence>
<ControlCode>58</ControlCode>
<LegLength>0</LegLength>
</CourseControl>
<CourseControl>
<Sequence>23</Sequence>
<ControlCode>80</ControlCode>
<LegLength>83</LegLength>
</CourseControl>
<CourseControl>
<Sequence>24</Sequence>
<ControlCode>59</ControlCode>
<LegLength>75</LegLength>
</CourseControl>
<CourseControl>
<Sequence>25</Sequence>
<ControlCode>58</ControlCode>
<LegLength>68</LegLength>
</CourseControl>
<CourseControl>
<Sequence>26</Sequence>
<ControlCode>57</ControlCode>
<LegLength>93</LegLength>
</CourseControl>
<FinishPointCode>FIN1</FinishPointCode>
<DistanceToFinish>38</DistanceToFinish>
</CourseVariation>
</Course>
<Course>
<CourseName>N</CourseName>
<CourseId>2</CourseId>
<CourseVariation>
<CourseVariationId>0</CourseVariationId>
<CourseLength>1300</CourseLength>
<StartPointCode>STA1</StartPointCode>
<CourseControl>
<Sequence>1</Sequence>
<ControlCode>65</ControlCode>
<LegLength>130</LegLength>
</CourseControl>
<CourseControl>
<Sequence>2</Sequence>
<ControlCode>48</ControlCode>
<LegLength>55</LegLength>
</CourseControl>
<CourseControl>
<Sequence>3</Sequence>
<ControlCode>144</ControlCode>
<LegLength>95</LegLength>
</CourseControl>
<CourseControl>
<Sequence>4</Sequence>
<ControlCode>91</ControlCode>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl>
<Sequence>5</Sequence>
<ControlCode>97</ControlCode>
<LegLength>171</LegLength>
</CourseControl>
<CourseControl>
<Sequence>6</Sequence>
<ControlCode>63</ControlCode>
<LegLength>172</LegLength>
</CourseControl>
<CourseControl>
<Sequence>7</Sequence>
<ControlCode>56</ControlCode>
<LegLength>154</LegLength>
</CourseControl>
<CourseControl>
<Sequence>8</Sequence>
<ControlCode>54</ControlCode>
<LegLength>106</LegLength>
</CourseControl>
<CourseControl>
<Sequence>9</Sequence>
<ControlCode>61</ControlCode>
<LegLength>141</LegLength>
</CourseControl>
<CourseControl>
<Sequence>10</Sequence>
<ControlCode>58</ControlCode>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl>
<Sequence>11</Sequence>
<ControlCode>57</ControlCode>
<LegLength>93</LegLength>
</CourseControl>
<FinishPointCode>FIN1</FinishPointCode>
<DistanceToFinish>38</DistanceToFinish>
</CourseVariation>
</Course>
<Course>
<CourseName>C</CourseName>
<CourseId>3</CourseId>
<CourseVariation>
<CourseVariationId>0</CourseVariationId>
<CourseLength>1500</CourseLength>
<StartPointCode>STA1</StartPointCode>
<CourseControl>
<Sequence>1</Sequence>
<ControlCode>48</ControlCode>
<LegLength>175</LegLength>
</CourseControl>
<CourseControl>
<Sequence>2</Sequence>
<ControlCode>97</ControlCode>
<LegLength>191</LegLength>
</CourseControl>
<CourseControl>
<Sequence>3</Sequence>
<ControlCode>105</ControlCode>
<LegLength>110</LegLength>
</CourseControl>
<CourseControl>
<Sequence>4</Sequence>
<ControlCode>103</ControlCode>
<LegLength>73</LegLength>
</CourseControl>
<CourseControl>
<Sequence>5</Sequence>
<ControlCode>91</ControlCode>
<LegLength>36</LegLength>
</CourseControl>
<CourseControl>
<Sequence>6</Sequence>
<ControlCode>144</ControlCode>
<LegLength>78</LegLength>
</CourseControl>
<CourseControl>
<Sequence>7</Sequence>
<ControlCode>143</ControlCode>
<LegLength>63</LegLength>
</CourseControl>
<CourseControl>
<Sequence>8</Sequence>
<ControlCode>53</ControlCode>
<LegLength>233</LegLength>
</CourseControl>
<CourseControl>
<Sequence>9</Sequence>
<ControlCode>54</ControlCode>
<LegLength>63</LegLength>
</CourseControl>
<CourseControl>
<Sequence>10</Sequence>
<ControlCode>55</ControlCode>
<LegLength>171</LegLength>
</CourseControl>
<CourseControl>
<Sequence>11</Sequence>
<ControlCode>31</ControlCode>
<LegLength>68</LegLength>
</CourseControl>
<CourseControl>
<Sequence>12</Sequence>
<ControlCode>58</ControlCode>
<LegLength>144</LegLength>
</CourseControl>
<CourseControl>
<Sequence>13</Sequence>
<ControlCode>57</ControlCode>
<LegLength>93</LegLength>
</CourseControl>
<FinishPointCode>FIN1</FinishPointCode>
<DistanceToFinish>38</DistanceToFinish>
</CourseVariation>
</Course>
</CourseData>

View File

@ -1,110 +0,0 @@
"M","0","14917","255744","18.07.23 17:47:22.000","18.07.23 17:46:40.000",255744,0000,0000,000,00000,065,00058,048,00120,144,00265,091,00386,097,00514,063,00621,056,00713,054,00817,061,00944,058,01016,057,01125,249,01137,099,01138,250,01145,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000001
"M","0","14917","251359","18.07.23 17:51:18.000","18.07.23 17:50:36.000",251359,0000,0000,000,00000,065,00078,048,00158,144,00324,091,00458,097,00590,063,00700,056,00806,054,00922,061,01036,058,01141,057,01323,249,01342,099,01343,250,01354,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000002
"M","0","14917","255744","18.07.23 17:52:52.000","18.07.23 17:52:11.000",255744,0000,0000,000,00000,065,00058,048,00120,144,00265,091,00386,097,00514,063,00621,056,00713,054,00817,061,00944,058,01016,057,01125,249,01137,099,01138,250,01476,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000003
"M","0","14917","251359","18.07.23 17:53:00.000","18.07.23 17:52:18.000",251359,0000,0000,000,00000,065,00078,048,00158,144,00324,091,00458,097,00590,063,00700,056,00806,054,00922,061,01036,058,01141,057,01323,249,01342,099,01343,250,01456,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000004
"M","0","14917","251252","18.07.23 17:59:18.000","18.07.23 17:58:36.000",251252,0000,0000,000,00000,065,00133,048,00213,144,00422,091,00571,097,00788,063,00946,056,01084,249,01291,250,01311,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000005
"M","0","14917","511333","18.07.23 17:59:32.000","18.07.23 17:58:50.000",511333,0000,0000,000,00000,249,01271,250,01300,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000006
"M","0","14917","263083","18.07.23 18:13:50.000","18.07.23 18:13:08.000",263083,0000,0000,000,00000,144,00127,145,00185,142,00220,117,00257,144,00303,103,00353,079,00389,149,00473,101,00509,090,00613,106,00744,079,00849,092,00956,097,01043,077,01109,048,01181,118,01281,053,01344,082,01422,055,01471,058,01519,080,01584,059,01625,058,01657,057,01699,249,01708,099,01709,250,01720,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000007
"M","0","14917","268492","18.07.23 18:14:10.000","18.07.23 18:13:29.000",268492,0000,0000,000,00000,144,00129,117,00255,142,00283,145,00340,144,00390,044,00465,143,00501,144,00538,103,00590,079,00627,149,00768,101,00844,090,00911,106,00981,079,01077,092,01151,097,01234,077,01337,048,01421,118,01521,053,01558,082,01617,055,01670,058,01721,031,01804,052,01850,058,01919,080,01974,059,02013,058,02044,057,02084,249,02093,099,02094,250,02104,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000008
"M","0","14917","250596","18.07.23 18:15:11.000","18.07.23 18:14:30.000",250596,0000,0000,000,00000,144,00131,117,00180,142,00219,145,00267,144,00352,044,00391,143,00550,144,00591,103,00636,079,00744,149,00844,101,00899,090,01429,079,01637,092,01693,097,01771,077,01883,048,01979,118,02084,082,02174,055,02227,058,02279,031,02360,052,02412,058,02485,080,02542,059,02606,058,02643,057,02696,249,02707,099,02707,250,02714,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000009
"M","0","14917","510878","18.07.23 18:16:31.000","18.07.23 18:15:50.000",510878,0000,0000,000,00000,144,00222,145,00385,142,00485,117,00564,144,00643,103,00713,079,00807,149,00954,101,01042,090,01188,106,01426,079,01586,092,01770,097,01892,077,02060,048,02186,118,02303,053,02350,082,02436,055,02504,058,02579,080,02650,059,02714,058,02763,057,02828,249,02842,250,02848,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000010
"M","0","14917","261416","18.07.23 18:16:36.000","18.07.23 18:15:55.000",261416,0000,0000,000,00000,144,00174,145,00345,142,00402,117,00509,144,00566,103,00634,079,00704,149,00851,101,00899,090,01036,106,01156,079,01370,092,01533,097,01641,048,01779,118,01888,053,01933,082,02018,055,02087,058,02162,080,02239,059,02307,058,02354,057,02417,249,02431,099,02431,250,02439,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000011
"M","0","14917","263065","18.07.23 18:18:28.000","18.07.23 18:17:46.000",263065,0000,0000,000,00000,144,00132,145,00224,142,00340,117,00369,144,00416,091,00457,103,00511,079,00549,149,00640,101,00720,090,00794,106,00883,079,00981,092,01107,097,01180,077,01332,048,01413,118,01509,053,01538,082,01598,055,01645,058,01691,080,01763,059,01803,058,01834,057,01874,249,01882,099,01883,250,01894,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000012
"M","0","14917","521042","18.07.23 18:18:49.000","18.07.23 18:18:08.000",521042,0000,0000,000,00000,144,00145,117,00205,142,00367,145,00404,144,00456,044,00496,143,00617,144,00647,103,00721,079,00767,149,00854,101,00909,090,01017,106,01145,079,01253,092,01378,097,01462,077,01681,048,01750,118,01909,053,01951,082,02024,055,02099,058,02161,031,02266,052,02346,058,02409,080,02482,059,02522,058,02559,057,02605,249,02615,099,02616,250,02629,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000013
"M","0","14917","260788","18.07.23 18:19:01.000","18.07.23 18:18:20.000",260788,0000,0000,000,00000,144,00186,145,00275,142,00374,117,00426,144,00488,103,00548,079,00607,149,00717,101,00813,090,00983,106,01100,079,01214,092,01333,097,01438,077,01506,048,01610,118,01804,053,01841,082,01927,055,01992,058,02052,080,02154,059,02211,058,02256,057,02316,249,02328,099,02328,250,02341,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000014
"M","0","14917","251359","18.07.23 18:19:15.000","18.07.23 18:18:34.000",251359,0000,0000,000,00000,065,00078,048,00193,144,00434,091,00502,097,00638,063,00728,056,00823,054,00884,061,00994,058,01083,057,01155,249,01173,099,01174,250,01186,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000015
"M","0","14917","255632","18.07.23 18:19:26.000","18.07.23 18:18:44.000",255632,0000,0000,000,00000,144,00144,117,00313,142,00380,144,00491,044,00533,143,00607,144,00649,103,00701,079,00746,149,00878,101,00923,090,01010,106,01095,079,01214,092,01290,097,01398,077,01513,048,01596,118,01693,053,01727,082,01794,055,01861,058,01917,031,02011,052,02066,058,02154,080,02243,059,02290,058,02329,057,02372,249,02382,099,02383,250,02396,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000016
"M","0","14917","263090","18.07.23 18:19:46.000","18.07.23 18:19:04.000",263090,0000,0000,000,00000,144,00153,145,00252,142,00389,117,00423,144,00473,103,00547,079,00588,149,00687,101,00785,090,00873,106,00954,079,01059,092,01144,097,01226,077,01363,048,01483,053,01618,082,01682,055,01737,058,01795,080,01850,059,01901,058,01939,057,01977,249,01987,099,01988,250,02015,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000017
"M","0","14917","519898","18.07.23 18:20:12.000","18.07.23 18:19:30.000",519898,0000,0000,000,00000,065,00042,048,00101,144,00238,091,00350,097,00460,063,00529,056,00601,054,00673,061,00759,058,00815,057,00885,249,00900,099,00901,250,00904,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000018
"M","0","14917","263086","18.07.23 18:21:49.000","18.07.23 18:21:08.000",263086,0000,0000,000,00000,117,00284,142,00320,145,00362,144,00410,044,00521,143,00569,144,00604,103,00652,079,00700,149,00799,101,00832,090,00976,106,01050,079,01132,092,01257,097,01324,077,01385,048,01472,118,01564,053,01599,082,01652,055,01700,058,01748,031,01809,052,01852,058,01902,080,01981,059,02019,058,02054,057,02099,249,02109,099,02110,250,02124,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000019
"M","0","14917","263089","18.07.23 18:22:18.000","18.07.23 18:21:36.000",263089,0000,0000,000,00000,144,00121,117,00250,142,00357,145,00392,144,00458,143,00522,044,00653,143,00691,103,00774,079,00827,149,00926,101,00967,090,01165,106,01235,079,01332,092,01430,097,01497,077,01560,048,01642,118,01733,053,01761,082,01816,055,01869,058,01911,031,01973,052,02021,058,02074,080,02142,059,02199,058,02235,057,02273,249,02282,099,02283,250,02318,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000020
"M","0","14917","263070","18.07.23 18:22:30.000","18.07.23 18:21:49.000",263070,0000,0000,000,00000,144,00129,117,00261,142,00299,145,00419,144,00484,143,00559,044,00679,143,00713,144,00754,103,00800,079,00851,149,00950,101,00988,090,01162,106,01237,079,01333,092,01375,097,01449,077,01533,048,01615,118,01692,053,01733,082,01798,055,01847,058,01896,031,01964,052,02022,058,02078,080,02175,059,02232,058,02272,057,02310,249,02320,099,02321,250,02360,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000021
"M","0","14917","233748","18.07.23 18:23:05.000","18.07.23 18:22:23.000",233748,0000,0000,000,00000,144,00195,117,00411,142,00470,145,00542,144,00651,044,00694,143,00783,144,00836,103,00956,079,01047,149,01229,101,01282,090,01368,106,01521,092,01889,097,02013,077,02112,048,02245,118,02382,053,02421,082,02523,055,02586,058,02652,031,02771,052,02835,058,02902,080,02971,059,03034,058,03081,057,03148,249,03161,099,03161,250,03168,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000022
"M","0","14917","187059","18.07.23 18:23:34.000","18.07.23 18:22:52.000",187059,0000,0000,000,00000,144,00150,117,00202,142,00243,145,00297,044,00485,143,00587,144,00636,103,00697,079,00740,149,00906,101,00969,090,01074,106,01149,079,01261,092,01342,097,01434,077,01586,048,01668,118,01760,053,01792,082,01863,055,01917,058,01980,031,02052,052,02121,058,02202,080,02254,059,02314,058,02358,057,02425,249,02438,099,02439,250,02448,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000023
"M","0","14917","259973","18.07.23 18:24:05.000","18.07.23 18:23:23.000",259973,0000,0000,000,00000,048,00060,097,00187,105,00235,103,00268,091,00283,144,00333,143,00374,053,00533,054,00589,055,00673,031,00702,058,00771,057,00831,249,00840,250,00852,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000024
"M","0","14917","203394","18.07.23 18:24:13.000","18.07.23 18:23:31.000",203394,0000,0000,000,00000,144,00177,145,00305,142,00388,117,00450,144,00516,103,00582,079,00637,149,00794,101,00845,090,00961,106,01332,105,01479,092,01642,097,01766,077,01887,048,02005,118,02151,053,02190,082,02353,055,02425,058,02507,080,02570,059,02634,058,02690,057,02759,249,02774,250,02790,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000025
"M","0","14917","263084","18.07.23 18:24:51.000","18.07.23 18:24:09.000",263084,0000,0000,000,00000,144,00146,117,00202,142,00302,145,00355,144,00413,044,00454,143,00529,144,00576,103,00626,079,00670,149,00800,101,00857,090,00939,106,01026,079,01138,092,01227,097,01316,077,01453,048,01543,118,01642,053,01680,082,01750,055,01807,058,01861,031,01933,052,01985,058,02046,080,02102,059,02147,058,02183,057,02228,249,02240,099,02241,250,02256,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000026
"M","0","14917","263072","18.07.23 18:24:58.000","18.07.23 18:24:17.000",263072,0000,0000,000,00000,144,00149,117,00207,142,00324,145,00360,144,00417,044,00456,143,00538,144,00579,103,00630,079,00673,101,00862,090,00941,106,01029,079,01140,092,01230,097,01321,077,01459,048,01545,118,01644,053,01683,082,01752,055,01809,058,01865,031,01937,052,01989,058,02048,080,02104,059,02151,058,02186,057,02229,249,02241,099,02242,250,02261,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000027
"M","0","14917","402905","18.07.23 18:25:17.000","18.07.23 18:24:36.000",402905,0000,0000,000,00000,144,00185,145,00296,142,00419,117,00502,144,00587,103,00713,079,00772,149,00950,101,01005,090,01147,106,01255,079,01387,092,01584,097,01715,077,01801,048,02068,053,02292,082,02389,055,02473,058,02556,059,02720,080,02802,059,02868,058,02926,057,02987,249,03002,250,03031,254,00195,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000028
"M","0","14917","257393","18.07.23 18:25:24.000","18.07.23 18:24:43.000",257393,0000,0000,000,00000,144,00186,145,00288,142,00370,117,00464,144,00544,091,00608,103,00654,079,00761,149,01106,101,01165,090,01325,106,01454,079,01720,092,01845,097,01955,077,02043,048,02297,118,02422,053,02546,082,02638,055,02715,058,02783,080,03028,059,03087,058,03155,057,03222,249,03239,250,03270,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000029
"M","0","14917","249917","18.07.23 18:25:53.000","18.07.23 18:25:11.000",249917,0000,0000,000,00000,144,00212,117,00348,142,00372,145,00419,044,00506,143,00554,103,00637,079,00680,149,00768,101,00806,090,00866,106,00941,079,01037,092,01098,097,01169,077,01238,048,01311,118,01388,053,01423,082,01492,055,01544,058,01588,031,01663,052,01712,058,01765,080,01803,059,01843,058,01876,057,01913,249,01929,099,01930,250,01978,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000030
"M","0","14917","263066","18.07.23 18:26:01.000","18.07.23 18:25:19.000",263066,0000,0000,000,00000,144,00105,117,00157,142,00207,145,00248,144,00300,044,00328,143,00384,144,00426,103,00473,079,00509,149,00598,101,00642,090,00727,106,00803,092,00981,097,01042,077,01128,048,01201,118,01277,053,01304,082,01358,055,01403,058,01445,031,01506,052,01548,058,01601,080,01641,059,01683,058,01717,057,01753,249,01766,099,01766,250,01819,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000031
"M","0","14917","255211","18.07.23 18:26:19.000","18.07.23 18:25:37.000",255211,0000,0000,000,00000,144,00264,145,00384,142,00491,117,00583,144,00666,103,00769,079,00861,149,01033,101,01090,090,01253,106,01369,079,01523,092,01671,097,01831,077,01946,048,02081,118,02309,053,02404,082,02628,055,02714,058,02807,080,02923,059,03000,058,03061,057,03162,249,03179,099,03180,250,03186,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,000,00000,0000032
"M","0","14917","259979","18.07.23 18:27:06.000","18.07.23 18:26:24.000",259979,0000,0000,000,00000,144,00106,117,00199,142,00228,145,00264,144,00310,044,00368,143,00406,144,00435,103,00476,079,00505,149,00570,101,00600,090,00664,106,00728,079,00797,092,00840,097,00898,077,00954,048,01016,118,01100,053,01129,082,01183,055,01224,058,01265,031,01316,052,01360,058,01404,080,01446,059,01477,058,01507,057,01546,249,01555,250,01562,000,00000,000,00000,000,