From 720c491265385536a478c4b95f5a2a16ff8aa47e Mon Sep 17 00:00:00 2001 From: Taka Date: Thu, 10 Sep 2020 06:22:40 +0000 Subject: [PATCH] Allow custom labels to be added to a log file analysis. --- vasl_templates/webapp/lfa.py | 6 +++ vasl_templates/webapp/static/lfa.js | 8 ++++ .../fixtures/analyze-vlog/custom-labels.vlog | Bin 0 -> 2277 bytes vasl_templates/webapp/tests/test_lfa.py | 39 ++++++++++++++++++ vassal-shim/release/vassal-shim.jar | Bin 30455 -> 31225 bytes vassal-shim/src/vassal_shim/VassalShim.java | 16 ++++++- .../src/vassal_shim/lfa/CustomLabelEvent.java | 31 ++++++++++++++ 7 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 vasl_templates/webapp/tests/fixtures/analyze-vlog/custom-labels.vlog create mode 100644 vassal-shim/src/vassal_shim/lfa/CustomLabelEvent.java diff --git a/vasl_templates/webapp/lfa.py b/vasl_templates/webapp/lfa.py index 7934b01..516d4ed 100644 --- a/vasl_templates/webapp/lfa.py +++ b/vasl_templates/webapp/lfa.py @@ -131,6 +131,12 @@ def parse_analysis_report( fname, logger=None ): "turnNo": elem.attrib[ "turnNo" ], "phase": elem.attrib[ "phase" ] } ) + elif elem.tag == "customLabelEvent": + # found a CUSTOM label + events.append( { + "eventType": "customLabel", + "caption": elem.text + } ) else: if logger: logger.warn( "Found an unknown analysis event: %s", elem.tag ) diff --git a/vasl_templates/webapp/static/lfa.js b/vasl_templates/webapp/static/lfa.js index 9b28a63..0d0f9e8 100644 --- a/vasl_templates/webapp/static/lfa.js +++ b/vasl_templates/webapp/static/lfa.js @@ -684,6 +684,10 @@ function updateTimePlotChart( currWindowSize ) // we have a Turn Track event - use the phase description as the next label nextLabel = evt.side + " " + evt.turnNo + " " + evt.phase ; }, + onCustomLabelEvent: function( evt ) { + // we have a custom label event - use the caption as the next label + nextLabel = evt.caption ; + }, onRollEvent: function( evt ) { // we have a DR/dr roll - check if we want to include it if ( rollType === "" ) { @@ -1672,6 +1676,10 @@ function onDownloadData() // save the phase (it will be included in the next row of data) nextLabel = evt.side + " " + evt.turnNo + " " + evt.phase ; }, + onCustomLabelEvent: function( evt ) { + // save the custom label (it will be included in the next row of data) + nextLabel = evt.caption ; + }, onRollEvent: function( evt ) { // generate the next row of data if ( nextLogFilename ) { diff --git a/vasl_templates/webapp/tests/fixtures/analyze-vlog/custom-labels.vlog b/vasl_templates/webapp/tests/fixtures/analyze-vlog/custom-labels.vlog new file mode 100644 index 0000000000000000000000000000000000000000..34c05dbc1fcf6872a94d1d927af3bb06b153c691 GIT binary patch literal 2277 zcmZ`*XHXN^7LI}jgOR#~A_4-^rDG@o=_LXI=?EI>f`k^3CQk(y1f(b(L7K8aK$@r& zK|*gqA~k_fHzER35+sxjJM&iF&b;r=oqK2QoO8ePeLv1Yz!?}h0ZdFx08*r+1>hLY z(C>lBU^iDovUeWUEyBsS&j8;Pcy?bq#WW8oa%=*eB{R* zJaPlusurvpPq?Zai{xlt7LL?eS~EfZU8?%l(2BIeLj zp71*SIxiAPGrGtecZuAG&&AC=fYdRyF;UpzU=~#|b;hRrq4zbgw_4I7D$47Od{M-Q zJe_4jWZ}Ho$q?_E-3*8tdGPdd_u-oL$KP!y%qW}VMG>^YoDB05jj0gr)fK~uc1?;@ z?P5~*Ob&x{>w76@+IZE{`Igr=W_F4Vo)jtx22GT1aP8Bt(Atl2JCB)q7k z+l8phxtg+K*<@bG7?gbFVmwy+ZG3)vp-oD+ef86#6qf~e<8XbNo@}Z_>Uqf?@$;?W z)0C08f>eriAI4v!ty4DaSl}Z6MJe$_D*I zKRE-JJ-FoKDe57@)0aII;+$e(SBqWpLLtU)V6tGn5W5LKs-z)D{h9`*{$W-14&K08 zHe-7t%JL1I%Y~iy1?5iWI3R6DFQu6&{F zR?)|OAJJja6c^0gbIh7i;dvfp^=+(-6iW_2J64>L?+WwvT~85xaEX-;tRpxMU+ncI zTCg13w9XaX;Y|s)a#iHbsHnFl=lU#jBs@UDu4x@LcJj9f~+Uj9vQl2?(++m<=i+*OYAGyG6mZ&|Z~nUS>~a1sgo zy8U39-JmlkYu|)Q{h7zHk`zrk@%TRFL~yWBC?h=4_I?!Swaj+OMizbzV7kUKbG0u+ z_yDB(+_QUfTnAzy9bvT#E@+^~%;pXb_$~|88&gFkc=O+_8#OB`2B|pY^}#kc!{_FK zn8`meVO>Sx_6_#@=Go{spUa7~AIcw}q2%hKW)CWJEg|K(`NA&Zu4f?%m2z_r5(df? zSWFt2@lY<+o;w55HlKJ-CeDH1cX2r^P`>?G-EUi6d@8)Ab-jz1T!~p|W{HW^H2hSO zoP=BA_{yjQ|4QC<9G9(%+-Iqb9Ls-A**{#GEk|8AcYAzkttVj6*Vm)Z(HBc`AzUPJ z5e-g#EYN{ojk&-kuw_cUBT(>Aa5CzVz3u0;%nnE_$SuOzOkyTE%7<_Nfen)E!1<-KDi~ac{~Z;6SD;3DausrvZRPF#rJZPjj06 zS94ym;qfGF4W3h7_c|ON zsH?~~0guazfS;mgp%bRB68b6m_ZNQwZ;luH literal 0 HcmV?d00001 diff --git a/vasl_templates/webapp/tests/test_lfa.py b/vasl_templates/webapp/tests/test_lfa.py index b6e8e57..2352220 100644 --- a/vasl_templates/webapp/tests/test_lfa.py +++ b/vasl_templates/webapp/tests/test_lfa.py @@ -509,6 +509,45 @@ def test_download_data( webapp, webdriver ): # --------------------------------------------------------------------- +@pytest.mark.skipif( not pytest.config.option.vasl_mods, reason="--vasl-mods not specified" ) #pylint: disable=no-member +@pytest.mark.skipif( not pytest.config.option.vassal, reason="--vassal not specified" ) #pylint: disable=no-member +def test_custom_labels( webapp, webdriver ): + """Test custom labels in the log file.""" + + # initialize + control_tests = init_webapp( webapp, webdriver, vlog_persistence=1, lfa_persistence=1 ) + + def do_test(): #pylint: disable=missing-docstring + + # analyze the log file + _analyze_vlogs( "custom-labels.vlog" ) + + # download the data + marker = set_stored_msg_marker( "_lfa-download_" ) + find_child( "#lfa button.download" ).click() + wait_for( 2, lambda: get_stored_msg("_lfa-download_") != marker ) + data = get_stored_msg( "_lfa-download_" ) + + # check the results + data = data.split( "\n" ) + rows = list( csv.reader( data, quoting=csv.QUOTE_NONNUMERIC ) ) + assert rows == [ + [ "Log file", "Phase", "Player", "Type", "Die 1", "Die 2" ], + [ "custom-labels.vlog", "", "test", "Other", 5, 3 ], + [ "", "", "test", "Other", 3, "" ], + [ "", "Custom Label 1", "test", "Other", 6, 6 ], + [ "", "", "test", "RS", 6, "" ], + [ "", "Axis 1 PFPh", "test", "Other", 4, 4 ], + [ "", "", "test", "RS", 6, "" ], + [ "", "Custom label 2", "test", "Other", 2, 1 ], + [ "", "", "test", "RS", 1, "" ] + ] + + # run the test + _run_tests( control_tests, do_test, False ) + +# --------------------------------------------------------------------- + def _analyze_vlogs( fnames ): """Analyze log file(s).""" diff --git a/vassal-shim/release/vassal-shim.jar b/vassal-shim/release/vassal-shim.jar index 6ca0b54ea35eb889d2e8900df8dd83a9a46ccf49..c2fd7132ec4f1a2d5ecea5bd4c2095c3b3f752bd 100644 GIT binary patch delta 17939 zcmV)LK)Jv7?E(4o0S!<~0|XQR2nYxOaxyBB4LSpIGAfZu#{+UQDzg*;0R{tdGAfgx z86A`CaS*db2Oj|gaxyBjX9(p619CDdvri9g0RwU}Dzm>3IRyi9GAgtC6`}(JaxyBD zpcyWIya#+#RrUaUZh7-wCNGp30t|KNAr*o~2}MH!7zqIrS}4Mh8N$dU6K5tA0ejbV zt*h7z%Gw*I$f{V@hPvw7ySuAvSzTQ_BKgj_?@dXVi2lFt_xpCqd+)Y$&prLzd&g(@ zKlm^J9HQ-T!l(SS4E8fWogQb<<4meM%gN7w=I1#1x%@mQKcD}>$uHo4bn*-NMbzbD zgI|)#FXfl%{7+8k#V@DF6$am?^D7O06*XP0^J|=tZ2`Yl=hr!5AU};B*Joho8w`FU z6>g%D+YNp*y>Fp`J9PeMCyeB`(&*dhaeF4egWs9S@8WmU;~t&gYw-K1<$fBl)8G$( z7`&CrZ8TZC!8@q_L7ne%!X$p0!T+N3hYbF(6H55yI)B6ollkQa->vgUoiLR@X7I|Xwa!T;(+08bkHDSAJx^Jkn;L0DJtJE`Vb`r6~<&++H!@q&~8jlXE{mooXw{O|O5 zMdz;?{56BWo&odt8=3GPf0Mr6a>96j{|9~n#)cHR$VFmxE zlmClwixE4gZ!N z-_c~>8~g`)|45IYoH)Z?ga2&seFp!<;QI~UX$UX`GX&R#bi!t#=|XqHR*_+U2&W-3 z4PhcGB1;#&4AC3miav(u>x9#U%Mfnlo#kJ zf*~em!gf(?h)GUyh&WUiB~G}1O&o>`6Ne*##AHL18e$4{nyQOwPPmr@(kG@9_5OoJ zafBg`G(;I8J;M;?)L3DNnTD8Uh}jv~;V45?()(zqm?Nr?&|)q46&3R%XG2a5G$zXbb1_1fL79D6+L`^hFFbaBkECH zgdZh91Prl;3JsZJtqAJkI76(X`j8zoDYl5M^mQUF;Urz0?1XQ`DTX+eD0Lbkb2`ZE^)pg{-BG03k>l`LtJQxiwtqGAuch*r9_0w4Dlxt6J+WYhS+9^D+$_F zhPc`g*U;!|4RM_zt|#y}Q29nf+@y=`PBu{7Y=~P7v4e*H*$}r9R=4Tmc0=4@h&u`A zyPRye$e^yI_~ITSC-UuHUEJqnIpThLpaAVO!~?o$b+Q7~712h2Le!oqI!I-U#9@Yb z&=9)}@fV`eLxy;m5PZbR&Jw!~@u)5y(*K28#QQYM2lV(*7ymHCKk0L-A^zoL%Sb&w%0PTRrpLdD44=?CK6Q%E z#OL(*k0HJ=#FvKnuOYrN#Mg%SpCP_6#J7g{&Jf=l;s-*%v7WE;i&6L)Iat60O5Pxy;F)Mpnz^_?9aSiPm9%k6dZURcK(Pj~=V(QEy1UAp?e7 zW5@=g)LMccG~{uHTt`TS4B1FkO@<7Ux4c}J&4xT)ml0h?o$S9d=44;W7J95VrV6&q>+_Waxz@Wd?+7b(f zisnbc&4EZP7>HtzjF4}2AT+x<=*OAYH-`PQf}uc@uQ7m4tHZvCKdPWRrUsjWvFQxP ze7F_7h9KSJqU6>JJrw=}K}L>BmeR)?@At2XAVUpLp+tjf4>j3Y2!!4O85 zr!jEO+*luIjs?R_xO&sy(%4*Ej~GRQVFuZ0W~aF_eNDd5rV|247aWwEld{^fNW{0P zDj1EWMH3?nU7n7%9^(aFo}tS#b$J#py*Aj;(QBnYT$YM| z-=XPNQMDc!?hCDqt_?O8h1U3p$HWUYG8&9d(dF5?JO^VC3_5gqE`z>nf=zzA*Ua^S zrWk^rkW;m&thTnSs;EBP*ywBW7nNJ@DQQW91d!)p*nu&RF3)FB`MZWsJpgBg1`>jn z-P`6#oO>8WVH|1HwTC=hozZg zSx+F z8EEj;Z?a{ex(EM|4yo}6UoV4yNDp%ITS)bPp48nCz&HU#TUA@jW-vOve08&uVmpI| z-ykHvm)hwaU`8|$3e?AN4hDmB#>ef;>Xu;0UxXn?ODJH8wY&sfe4}q&V3C@lJRFYr zEjSD&+vxf>#ERyJgH1j1D~%eOQQ!KcACi}16s*h3bcq4S<>*Hn0Eeb@U7^fsgnW3=HpLA^bY5jZ;U@?fHSSJCi;2^HJdmM8e zE+hrOOmZV=Z)P6=rp)hG(sUr48N?6_E7Nn)tPR9klK3snNy|qPR*dgrfzhemfA3t5 znm|K&W6!h9RWDp)potiNFxu+=duMTC@N}^C%8p>S%pSghJwZR`feMIq3J!=T_lQ!f+^tFgT*eK&xl>lNu`~ZN|ZkM32$&Z|JC^ zM=Nu|2z-XhLKuh~<<|YdDA7pOF7`#5a7a{_+c51)I`?3>sIsYlxg~}W1HQ%{0!2*F zHX)_bz++%ctq<7=kFz%15~&YRkd0VbhN%`UP9Xs`xz0D5T;t5-4tfAS88gBH>2w(PcHI z-pyNedAlj^kawbg=EWC9NYIpSQ{E+S!<-MLGvM_HBWPX2kxeuTEv)L@6o?fqtf{Qs z)D-h=Ok`A;2$uVr#>Kp$a6O6yP32vKKub+|x4Z|bn=VT1GfF4B9l=sT}OnEW#oqQO zt|q=byCHCJ*p648Y_Kd@YJ_8tpduaPBpK<+E}R=2516PCjqS7v$eCqcY`- z@+H)#P}d|Eb8%C?EdOrGSLCYuP-WNH8yBX0jg;_pZkX~7`g&8oh0Rgh zEt~RfVlNN+P5BP7(GgI&v&lb@?_&6oHl;P?d-8o)uh=KQDAs&OAsnKR%leeC>f~Jj(FQ9-HIdXbVVeS#* zrxsC<>6pZu@?-gLQ+`59^r`$zm*<-DbJB_b$S+L!C0UEH>A?m4U4fbMzw#?nel7n; zXn%twshU-`a(>x@1v6`^S5{P(&sLO(LJKxE2c{S1 z9WmaE75<1SR@7|qN5(H#RqK7BmO#|%VU1lL&09VdTQEo46o{yn<!T-Mg!Fc4jeyPm*1l6 z`t8AoDZk^Zb@@Gmap?w?ul2=ZIG`dJr6n&2Y{ax6Go@t8A4nYf%?h`mP4Qa|-Wax! zQ8D6-WT4GM(}(u`NBI*Pj_!(45v;d=ww+LgEZUN=J%J^Q%_Kd0QF;ozbA2%km;K(v zh*B>(jh}HcVq;E4&3IHu|3n5XpFWD?4JbHNo`g;<358k`kj6y`XW^ZK&tcs$B$h3R z`0Cf$XiDNHzKDgmI>kCP^hwZN2M}a$cbMfZm?$(VHMOB?AuFpKl7!Q}Q>j;fmuH)D zpZvv?`}szsy|o`m7B;SjM3Z*%?425z8q<(^SD2d6q^@a6vt5roL*_=476TX1y)Egw zak1gm(JAED(Bv3vgMNRYX~rg9bC{a08EM8UkyC(8Edz~-=9GI(EmQ76V{HjcQ(%La zd?r$dBhs2l!Ze_Z;j=dWC@VC7wJfcdsr4okJa8dx{Lz}#Y~D5DNF0zX^^Tf`GNJWh zkY(>1TB)U}^_341v#hns2DMWym7y22$&zadnkgzZm#(=f)cC^Whwwv9zJW+Rxi;V< zuV_1RuOg3i)9%#}L4TJ8J0(`4sp5;WB4BMQ8jgrc6rDLHQQ)^Xlto40P~*fyC02bE)+ zTB-ae#wrEg+I6@b;(%HKk>8sW-p~|?5aOsm1zt;oY#)H)FkbNpse%k1I(0-r0oj{S zK`g#$SsL_vbCh#`L5G!GGn)8FZQ%HpKojYNUazQwYN1-6PEywz6*#d$c0z8!0P z7$o6G|M}LwWU9E3#A{PYFm-ETD4x@_>B{ydR%W%t$EYB*z*3quU`k549x|57ciR*{W ztf`rYiC$uD7Vm6KF}`HuOl_9Dhj5vV8n4_&fwzMA+6|#W-9))2&=_8Cc?TMORGP^w z@kmZKlp_0odTXiHmO&_tTqJ8djiwmbCDNGPTY0FHYL(j2 zYGZG3N+Q#J3Y?&9;evVPH8aZ=%(Mcgl}qN9)y%G}MlVx5!PMqx1JiY?vpSi45npU- zRpe%LYhN_fEtao}TNMVqx^5&Ajpov$+SKN0^L6ci7*ng!P&^H!Vq{Gyya5H}fSKpj zRLrblY0qSJsD{{6V#^MsV{w^ z!ChJJYmTm*NVV$&YlHQnK=)FkPxbFwodAJV;fTMm#9t|XrWY`M5#Ch zrQ$AsNED|>srUetio2pzoF1j(15ql*c)G9cIlR~uh*;v@E%Be;2;tfnvFZ7Jv>k6WlrWEr~G0?UJV?Y%I6YL^KISW(p(1v$}+%w8CS zI*cHjVrY+##h64}sjWiGlr()c7^DRo11T0TGog}Xfd-B9qV4jIi|ZT~BLVN4mQZMa z1bPAV0bN#W&FhO%)R2!+0|sjhJ-+1hXx9!kHJ^5vuB|q;dJWxofMVVL6*Fg*Ev#B# zvv*-F=4fSeXQDl*@U2HjTZ?lA*ZUANch{Z^W-eKP$%$qkAEjwUc4Z+6R%7bW5Fvkt z<~sxbmZMk5=<3q3if7;>BcloDn=)a4$^`Vw85ko@m}2rezSPv#q_x;Ki|o~#T7!I- z(tV5^*J?oo5wXMNuP&=0`P*V%@dK-Y%IIS&{KwHqU6Y(HD))*c1z>-K%*mvBb7xGS5!*ows^TOVo0g zsXfWKv>-7TE|^ttxT&qzHt6zyGE>{AVaR_1->7SwO>GPH7}Oo$(qMC9?=FK*tNfJU znc7zEL|tBP%4fBck|=lKOJgAB!@$8;gsTk9#RBaEn%c?QDKyuqJ?t!`Kc+FcAE}0E z*lDJAI??Y8O``Jk1OP`hhnrNU&{brp(b`nRm?hHEM4RfC5w=gvOzlj6ikL~@6M^O$0jZ&EQ`B5g|%Pg6TjJKxm)KneH-q;uT648?wh$&cgf z=+UTaf9!#^>CeV!P?#Qn$LrdKXw`r32^0;D>Kf*Y7i*X38fw{Pq|4lkDZudVn+O$~ zFh390+xrlh_woYlrcXs17~6yyMP@0*$SRwjW@>+;ZOVJK%L!VJsa-+qW#dh48`&bc ze0g35Z7d-ruB3ePDvI&Ya#*KBL^$i3TK8iRLsc)VsbVmuLix3SL|^X)``k!*u+{zv z6AC6zMzi8r?H@Ct7~RFy#LAOseUpB5XqfiLXemv8YO@e2MV=NZja21olz?bqY$KZH zYqV?8WKNCupH3361>H~Aei%`wo_|z_V=6;Rah%1!ic||FuKoa;)Ib8IMEZz8XSA$Y z6Nm)-H36TW;&)GfnjzBGIQ4y|hu{JewsPD$2jg6rq%w?ORv~N?iApRA9h@`CM(1Uc1OQ8yfQpOb~ z$Ekx@+LKf7o(A+!f7FjrMVD=)_|cduM*e6ub7OOaa{Vso=N!1+IKAyd!dX70nrOif+O-?wC?BV@ zq%O2TyA)4<<5bz|5KmGOLy~ZeqiHWRuqGNm*d)*0#j&TP<_p$hlxih6EB!qPbu%QYrir^|<#h;F>eV~cE=11= zCM;?HF3oWZOV`iW`l8k9fJru~S65EiWVVDP84Zm6O@x|~yz}+zTujf`!++aF^>ot? zO}>Q%jj&+qScV?B<49>Iqs4XS}r%C+vkI>8P{Z+LNF&>~vR}up`}n zHeAveN-VM+Y&}1Qkr%MTxz#&k~MS6hN!!IUs)XinlK;CU^I>AY&TRM96 zW@Rvb#Q+@`7fi8Ci`vsjkV$WhhZB=hVWploq=9J1AP7-XB9C^IHbI(6_|spDmiW;~ zzfM88Wn?_CUpX1Xmeo<)3ii*bOh2}N`v29h1=8GU8-9?Jcl0yL#o@O<5tj}Am6Lar zMI0~}qa)Xkrm!P*bKrp6z$rEq72fV`2Ua6`xH_EZVh_QLRh=(HE$fzlq;z>W z6tcpgDP69*CF|21v{wY`!?qhF;OfU&jbREm4^O#T+x=8N^`7qmZB}SQhbVN2czlbG zj7BEypJHqlofFt(b+F8wK>yv%oAvDX(%FYz!6r21WOm9474lnYG%Lwm$GX5K6<@Q; z_+GnpMGcps)WLzcEu!-kBS5Er*{UzqS%{+n2yC3Urib5ZRjOMUCj<_#4GDA|5p{Y+ zNB-o(l7=u5=k(;ST!=%wn6T#qa(c4d8BKIxA5zHl!=ZLdbjGFyz6Oi->Egfx{g&-Y zB*sgP_PWxzHYJ%!XGURXmF>VNI-*|Its8V_wU|QYq(wVLnp1wpXI-*?x3>35sI(11 zKLOU&O&nrI|E|=wc}e768wfV6jm3WmXdRF_lV|QI21~n$fqkWoKrT%M8UN{za!9s2 z$vMdHrMiXT3w#mf`iAEGy7o{mW!nVu94J$cs4bF}zowJF{jPH*p=4NcPTS*7wOtim z93-m##-Bhgr9~xg>FAMvKy%1PUll#N)`Pg*t_GiEwmPt(`z7x&Jz|&q<%GIm-Hc5! z%3|V)hY?MZm3EXAH4h5wxB8f2ziKV9!w}1KR|F`K^ZUqL+1txelHgHYsHT$URNHPV zp`naMB?%w-8g;ANHhUUH6pPY_vE3I{S!wmfc&NEnS%^dmM4c*sf{oVZ>Xi7_Q~u5HO|Yo?fzbGz?o{i7 zTBDtkDo{q;C&h2vB-Mm|ne2;N`z~X0(kb9zwy1Se7-JWerbbS5msuC98V+vOya@`$`bjM|>L+L2?%A ziMpa&Nv_VaK}0NNKyfultOHRNjnM`>F!VKBWOL=Dp^@Fg@;_>w)&|y)B<=@nZ%wgu z*S1v-Y*9C`@_YORQCfTAN&4B;O|mI*Q%GlHQBs6-VmgC=oK7T2wnNKVHbcoZ(vtl5 zfbP3#mGkU8$y7a#X$b~mAq*X|V&N`ZW&`5%>9&pWYx^^4c043yV+_3AlKQUOda7st zBn8R|v&0rp@vl&_$EbHe@@HjMIGRWv`r2`A(!g206XAj4WZW!g+cN|w9^O=h0M))* z)bg0!e;jvzFh`q?@0B@eLie7J%%=263UVs`0Lfl$`~Wi<0wkli9tlQ9vo_e+912*{ zPpVK6K>I_oGU_)Rb)hBtO~+bYe~~WmRkG4asHP@<2a<>l}WER z?j$p;6CO*s>9mIaD-8$yq9o`Gg&S;T%|r`RVc!qwW(92NT1p|$fbM&;iJkw9corS$ z7No?T`2qiV3mCzEhED;&0fXpwQuxK`7gp-cxlnIumo@wCQ19Wu=)@Sy8CW?RG=u@{ z)`tXZ3xM=`ssCAWJ~*F6dQP&<4F* zp%3<^mcF?=L8`_b&|CF&W8Z$NZ+2Z9^nU;bP?sm+EE>EE24ba$YFc5?eJ~iGt|9nn zg`o(yx}X(?ZG+_mXE=U)J75HY+6e=8!AP2ac~mQmreZ6M>432eN~H&9AID%DjH9m{ z2D@Q=sYU>DJsNfO;EM7(AYa0c&R27(##P`dY=xo+U;=fU*a5{HcEKb>?2yG&b7-EL zmhjC}iyd|)4BG`IaqL}(A;Niaqz`{&7fhy(rE2+8Y;aQv-D#zYNYhoFN4CQeR6J6D z74HRn2DDC`MCjaq)Oi;E1E%v{nZH1T&U@>;&reYBGc4eJv8x2e zzC-bHaknL2PyifA7_)MbBxQ5+T{GID{9deJYK^^AOXI-phneJyB(h1bF~?6b(~lR>qM zRc&8ShHHr`THRICf)1!dt{a|=4p@pa&qv%Vaw4yWNAno*!eo!kZ-TN#7fP;hQ%!{H7#67FOt$iPLS+7K8O$IL-eP+uq7z+ak?o9}TDdprh~10J22xrQUH8;Ao>!U?Xm?GW@hTj97? zScmk_Y=zJ^=;g^ogVor73QagsI9-pjWDkwx5v8Kgqls2%?vryp^3YpWI2)cpg?kz17RTkL2x!&8VE{leRnxTeq>h)aP#4+6pI@ z8fa1DcKIZ<$sWUhGR(@xveJwKs#r(NRctEvI9(^ZPHBfzOL5p~byz&T70y5 z9lRq^NxHx*+67k-ylo1?m0ciQbs&T%!I@80M=eIfeKqm!;SxiXWMpS#8#kg$*0VE; zOP#qMXFe+L=^1QC=O;-E_8=7E^BuHc??NWNd&B!^(>{Pf_#O`bKzI00$i;UNd<2KV z$54vzBj7WCm<6As9{dLu!x!i*zl4+Fzi=9SjdK4#w1wZoweTHk(f9Co_zB)X8U7F` zp!$UkgZ*p_bh7CTn4d`&WEzVw2Rnfo>&xC^F7`d^&wgeD zIA=rnFgBEr!FL`TrgUj3=$$x8rqU%#k#bW0jaPbqm8%r#XSncZnD;Z3b>d3(v;zS4 z1NP5j>_-@6TgH5}j0K5+?h*{>a9;MPvWyf$U6aC{Ym>1`2V6&yiDeuy7`eU`ZfJ!Y zJK!cpE>g4o&qws7{LglBl&)JkU3f zZn&*~6>eAVb4DxNab@Qn9s{*{0)B6!F4tI^bLW*XI|awP;(F`4o4(K^-@_n9jcL#> zxVO%3X@mP(;r_)t;BX7t&fRctD?Ct=DwM4WkZt(LMpd!vRxgPS9YKh zIjkVTgQomJE5O9{*>qV!Uv|)8Bxgo%uDN!9Ss+kdTz?_wOhJIt^^hlHCp;W4Jwm13 z?eM5o;UG6}Iq~Z}T308oB0)A994MGhbh~5NcqnAKuz=-3h)sYnn*{6GAsEXYiZR?_ za2`7xZeWvPJDUP`v8nJTn+E@5M=-{YWaHQjmdj?cL)k1W&1OflqgaSlvW@t48k@s^ zE?`ycYBrbM$*Nf!o5vnxHEcJlRib=2WbB9ON+=7_iSL66IxpG>ebp14Le|eP_eVHn zFYx`4mxuxOLVb#R7=rF$5DM%BKG7D~0q7oj8x>U{78NkI|5)?BLvjl1c1- znt{b=(_`9b5EilHAi&l`BijHQ*e1*dPJj#8X1IcF!C-GIJitzb2Qedf zm7NT4uv6h9hNhIA&ICJy4Ps}1va#$`md{Y`P=2Pdi%`BUR}wRYa)%4ZV%fPv*C=8{ zN-ROqBbmTid>`hqKf-(^G$v?DXo~qH6dO)IUbT|~ih{__^&=|2ZslmG$Q0+JGLt4J zGqyLZ5dTeL?pqA0?0UNc-a!r3^Mywj9q=y2eDAs5?|=_D)MERG@phSizWpC|yC^ZT z4YCCPWEeG{i>}O2z0nL{NdGSe@;Wqhux=N8T<6I^7!=gB!M{tLg!U(W91p>#C^ycX z@EM5?zCUk=|J2rL^!bJQbkOIQwRJkZ|Jx2<)z%sG`E_jv{7*oE8cf!MB;|AirK341 z1WTbm(&#G4WY z@?L1z3tAULKs>cPSSkKZ;Ztpc(1gC;g;=k`fbW}aEDr;|Z!Fb+|CU?{xfw-WwEeE{ z$d#~!C2%H`Ioq)f`jPGZ9{KI`WVXW(JD@iK`Oz+-#-RTERBFnSEJsN%kNFh1uufNX zT1l2pbx*<-vZS}i>{HYVdrSIc_qmGffynMdVR~OrU)Rs%*T5)1q1)%_n=gu0c{qMb z>$9II=}o-;#bbJZ`YI*Q?!8TA{&DBDpIj0eg?3k`<>koWWC`+f<}PTcLsdtNvwO8M z+Z^nmZH#0KZzK1ZKDZi|5?mEfLXnMY4yYLG!=#j40HcuJkATj0Ll%1!`mx7gFnb(w z*&dk0o`b3Ec_?EqptQUQ$Fjde1A7Hc#j7Yaufb;aIy# zDf$YX(AStR{tr3z4Lr%dg=a9ae;sxE9rhDS(q1-@?Pr5AE-&H+o5M3$9llp`r;@C- z;G}H_(+-13vPN0vg6Vu3x*YWntp*Bs=6>aV7~7A25u3C2!q}hSNK9hfi8v}1Kxz~< z!j{45_;&<x=QAx3OGn0ZY zJtf%O(RrJiFpCT(3V0s9?Q}bX(u6^(xtDUws*xPt4k*A-z-VK=txkPar#@EjW|#Wf zq1@4bm}W4SQhJQO3^bB%=617wtt{KxJZWY9(X~50rV2p|)!+d%(+JWxq@#^c#V$6m z&ZA=pE;0*)s*hmY1y&E8EY-OX`*l2=(hs|zCVZLF|V$E?Q9idxx(4mOdgeLQ=mIrK#B%U6 zMVF0>e#PT>3Pz@E^}5+4#M0^+-|i)c?q-L$*`c&g!AeRDtLCs|O-5XSow;r7aJ5Io zCSM5?JWe+&-NmNVsn^uHY$H3PjZN#D@r0XAw+ctZE&fk5=tv4nce1jQEPBmA2Zfd8 zrM*49sj?5fW|Z{p0c>`bmTj!{XZO{AvNQ0N3Levuw`l-9RsX)!zmL_wmzLf4!2Tbq z{vWFTS=oKCebvE7xmksUSA{)Kuk615?2J`O?7A=9qUB6Cn}xJ2H5IF8+x~GEJF2cg z$#EO2Bt5ZQKYDF9JGzz4A-X(V(npl^&F-7s=SFze(>uFwajDCL|4(ebXlNEY)`f=HhJ`AD@cD&e@{Q9A1;sE(_iUVwxwU4FL~U%SXCXedu}_c z_PA+F7yH{#2GN%dWdLgE085bnu>;L@mdDk>=5g$mjV&$(Rn^U>*uO6t?L*^e;qnpy zdnW+)!C`%DfEM+RakCntUT;Nzy;|yPQ_s`eqEtIuKqTy=IxJMS+S7}0?n@yHO~J3B zFMA4C0U~56<;O@g_fz0jBNtIMnui^odpvH8Rj;(`7gIf*33c92^FI~`VRiJPk)PA!i&nOj`1KUbSK^j`7)jhp*KPbR zwk)aM%gG+0w^*S}(y_Ldvz3o1WLMeIx{E^f?48VKhwAvbnm#*NJ!SH(%wO8Sodr-P z*qYM*784rWY%MWifK?2-*>O}HXcgDFS%``rMW3Y4LP;T6L3frwv5`<5pzv$5@N=^; z_U+nXU}}f1O@mUK4jAZv=?b|SJGj~Li9Qjsf1YfQyNyK?5R@CUHjrq|F|yjCi`8~{ zvQzB;-~_l9n$p$9{tqGhKg2V*2m9}0)RLHk{wVpW}aH!}Xty z=L~#XAsIgtZoubI$l$}EoDYWu_+H9KLV%Bg2pF zVGqxTH+Ug@#EalFJ^{Yt6B*-&Feg8h_2wmPD4)!7cqz-{)7fGC2sWD^iJDr*mhu^_ zftRy0_)K;&pT+Luv)RkMlD)@|WG4&A;UJd@uJ47Y~Sm_#VR7 zisAfpQOM5_6Zx5?FE;T%h!gn*;u?ODxSL-r9_5#aXZfY# zMShuhgI^&vevLHwwbIS6lY{sTas|{-xH*|Le%$dmO#_caB2-y<;-}$#E3l=UB*paU9F{JAwin zF~J-c3F)|hR%ni!gu`)<&>i=S4970vbUZCG9eYHU<2BLC@lVm)@v(3_eh~c}`$V>$ zDf;UJ!~lJm7^qLg+`mK&(r1dn`VuijUm=F-r-{+}onnl>Q;gLg7UT5iMUMWC7_WaW za`m4@zTPPcjAf$G*dmIIOT`4^dXaD3EQ*bL#3bW?IZPi$#Saa$)KUxiK5*k#CwS@oI{_h6_QKE~LEA@M>9ZHS`=Kn}tIscRn8k$wgVbI| zm1`gPbw0O~&4IzceXck-3l@Sw5GsdF?u#jZ4s=4*?;&6uESRfl&nmDw^%tCrRgUyktgv3>|^k+hSyr#mwXvA1?7%S zN*q2^7r5Cb>)=2Z&>=q^J%|!5eX90BYO0pZ$0|yV0xH<|3c6k;xGsK`fDJ6oEO2eJ zx?xJ;TH?vv$xg6NBJgYTlTbiW^cGc6fsTDlft6eB%GHTVET8x!jHSktR3TA+ee#pg z+heLP>-s|m#qQQk2TZor2AM;aXgfMrAlozICm=(}@1K&bZ3C38Q!y8Fv(psJg02T6 z7T-66Q*423u@#1i6ET=P2`a?NaEv$wmWfkgqc{yt6{o|6;tb^TnQ*5#3my~az_a39 zcvGAQABywg3vmJbApXd>xR7ao;v!~5zjd_3MO5_9DtT%Zd1 zA`U&N#?$E>NL&k2TnDDO9tMgVV6?aqip5QEsMrqW;%1m7Zh?8&wov>Tjup2;P~3)U zeFv-;cPbVQ0>^&3jDo&@a|zoAW6@TkJva7(mW{L2q4TwtKL@0`do;<8Me|U~^D#Tn zLaR`&RYdwnIx9sv$LcQ<)fl4QleoU*0A!W89|13m-*{r%t@BrCqkx!QIM>ZCs?IME z?eJAAySSZQqK;aLe3zN9zeZP$TsjiJ(Ug}__`Yv`woyXCC#% zy1SsCcpN<92^b}Ro`NFrG#oCTfhl4Sa_l)&-REJ6co9~JmtYmX8}NOcco`bSD{!KC z6;2bc!A0VAxJJAI+r`^(t9S?Q!1w+5ZWZq;&d#BuhE;ahgkrutel-Q3D|CJ=InR}- zpJj>Dhy%Lle3jKJ<)WFB{&PsSP~3)fwClUfN@nKlVz<_Ri8gjyRbD&0y_MauI4`%A z-ANz#zDu2y&&{`u>)?Fbw%%QxSJ1)e$Qt`$5}rp;BtlUDlF~jF=yJ@*NWXtWAMpuF z`==-epTTtTIaG@OK$Z9c>cp37?S1Vd)q1rW3Q!Ple**8_C~>6A=d1m$`&!xki2BYt z{LF1*4^-`cVy$)ZA=XwW@@jXncC7D^DwEBvZD$X*v0ZKKFLQCI>meLjtzghsskDGR zO%lO1yW+kN1cxiDNzXXmSp9kq}vbCnbYEl6T>617B;=iJgGG46=Q; z($CG0Yd@v6bla6ZW@oi9hkD>+0r7Dh%s#t70!i!|LeUU^6gU=5AxwSzRu=@&*sCsi2t|M zdGUj=yDjQ=&PV&!h*Y0EGQ+gFzjy~^=DFF+>a+8%B+ZYe<4ie! z8Z0BxsR`z{&DZxJH)1U*uu%gghKxlBMvb zoC5F2sfx}cLEi^elsoj=57yDS6^K@1L+~n(qCRg-#CGhN(R`#mB zoaCikCuyH7gCTN;0uxTSObbj=7lt8!l-Cq#UbhNwsKT2`I&}v;8|CdN1^9Ry@ZmP# zA>9DO7V8>WIw*5tu&h>4q6dM(-s%}jEkap=}IH`-YW7s%5WLuAa8~8?hg|&zotuRj+#rJb}lKZvoBD=84 z%|4i$mrv%AT9k#nIJw~dv@F>Gz2#cyFM}{h9*4@m4ky?YpMZ_Wh=%;%4mH7tY9m-o z9o)x%BMi%Rvwv7#V=(P?wzGeKwy}Sm&d|F2L-qbh^(G_gW*@h*e^=$AE_~9)KDF-q zFG_dU-_1U=>)?hM!>&qQs1I}1*iXQOpH z2X2w)D^7T6D;!!?CfZ{Z*|ykx`O5kY1#H>HzO38D{)_I3ebvUk zu12x=UtKA#{us(+o2W@%wx_)B8cH-w*VGwXhCdo<)m73Pa^Z=ngMMW?u#)2m{~G@Xy6U2VMVcMeCfw+VDMDX8b=;O9u#&?{hY5J^%ow zegFVaO9KQH00;;L2mo?2DwE?^X@8$!;?MYZES`2GjKSL6d(ZuP&bi$o9dL#A&xC8Q*5O4wouxoyKq?Jz9Wj&;Y;J5Qaq(Nzz9 zTO+ebJ|)96+%m&T`XZ;yA%j@4nw%kCGfe)t->q}|iC*szA~mdTPq)e1N`Kdm^kZG^ z=w?gRT-z{P#c3o{Wr%66-gvRE_eMD;A`j|Eyx|t75ic^L87)(H``&q_i-P*D(NQZt zE#0;3(lm)O6)tO5-)`_nhQ}a2F1O%$6Y|h(bkk|y^L^*-ZL@?faT%S^>Tn7aaQ1VQ zyUoQFp!!DR#?joiBR?05oOx(eAA2AtGk7r^WVVU2e zdz*o)HDu13RN1}@y2Sp{_|$}V>8-am=l%^nTcCF3bB)pSZ#<1#u5$%0dKGq7t-kWZ z94Y14ulmPcUYFgU)TZKid6w~+-i@nXeiB=*bSR|naOUgQv#-Rm-Wrrz-xZHgde~X- z|KG8}jb}PX@8qqFjd2d=p4l~|+B;SFTThzwOkl0RzRNz}4L;TTepHO|-szIq;b6I4 z%TC(qPs;;a!+Nf##{&#B)td7KczA3c>#97Ibt!cC*i?T=O2w#N;Ggj4L;5=0`!{O- zIk@eE_^J>5pPvZ3K48&G_Stt{sM;kp(dDU_OW?=ulh5`kO<8W(VlpF1U+Lxi?H$_x zcD1bD(iL%xYiYxB-jz@6|1*M8(!|~0EMu7%7_?X*DT#}LfrEj;R$ps!ca%2xjD?+1 z`yr<;RL3l30w1=Z9DfH){}z><>=4gV?_643lAr67n3S3WT&SE^qL-YLSX^8hbTjXA zfPn3F&W(>PV(;u?yybK{%R2LHP@KnAcBe|OhYLlU)Jq=6G<8ou<^5o@LsJ-QC;x-R z0*?g*6JsLheVjY9IPIO}|36>fvNy=u1YA6lB`bAJWQ}soN{zs#j~e>>wE6KG5Vdn=*BrgDY3-t8ONCp zH$|_QaPiuOgVTC)dHG7(!Zx0seCBhzl3Hn5_n&^#JBMr8wk==SdYVT%d7jFh`pJ7f zGaau#Jy)s8ZN|s_5;EM=o!kUXb=S_=x#x81Btw(C5g$VST)n1s`yA^oy{Rpkv7H|M zM~-h1Z+)o}@K{~FUP;F9TiBu6#(>zIOY?8A2wv)rsn{g?E3U<_tkcg-rHbLI9rNbf z@rt#}gzrv$BXhOsL#Wd=PVZj{sa@4BD{Qj2d_85kN{G+uo4CjG9V!byuXIQhsA)~m z?YdO9OvKt{V*l1}vRkjGPbhsV@^wzjoOP2dU6YT6%)YX2@?NL7Lsxa~gA!8l*N?}a zGcqugG9!v4aETPifCS_x8^#MyRx9P-Y?Q#p0#0AnDf1!e>u#z$;slV`GJ(w@IddQ~ zpL0(`Qr^J=3vkN&Q&0(}D+=Af^ua=RFwI@$2&VmuJizp9`OT`bM`aq{zGd9aC`CDKgt(UT7*Nlvye zkpc_F0EHgLOzw(Nn>@dS2Q0L%M4GX4@~ILnTaZ=AL8OLaRYn2>Lm4p7B<92yXJqE; z=cFa-Bju{ecT2>F# zW;g@QkU=ryMBZfoG7pKu0tSYZ#F9jPG@X;zmq{~CDVThwOqNfaL7btPje#Md7-Rwf DMN1zk delta 17187 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\\d),(?\\d),(?\\d) \\*\\*\\*\\s+\\<(?.+?)\\>" ) ) ; - Pattern turnTrackEventPatter = Pattern.compile( + Pattern turnTrackEventPattern = Pattern.compile( config.getProperty( "LFA_PATTERN_TURN_TRACK", "^\\* New: (?.+?) Turn (?\\d+) - (?.+?) \\*" ) ) ; + Pattern customLabelEventPattern = Pattern.compile( + config.getProperty( "LFA_PATTERN_CUSTOM_LABEL", "!!vt-label (?