From afe6aba9cb91e93234ffee2a22eee40f848ddedd Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 22 Aug 2011 18:25:34 -0700 Subject: [PATCH] altosui: Add --summary option to dump flight stats to stdout useful for quickly capturing sense of a flight. Signed-off-by: Keith Packard --- altosui/AltosUI.java | 80 +++++++++++++++++++++++++++++-------- altosui/libaltos/altos.dll | Bin 91605 -> 0 bytes 2 files changed, 64 insertions(+), 16 deletions(-) delete mode 100755 altosui/libaltos/altos.dll diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 0317f569..13cda637 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -369,6 +369,7 @@ public class AltosUI extends JFrame { static final int process_kml = 2; static final int process_graph = 3; static final int process_replay = 4; + static final int process_summary = 5; static void process_csv(String input) { AltosRecordIterable iterable = open_logfile(input); @@ -406,13 +407,13 @@ public class AltosUI extends JFrame { } } - static void process_replay(String filename) { + static AltosRecordIterable record_iterable_file(String filename) { FileInputStream in; try { in = new FileInputStream(filename); } catch (Exception e) { System.out.printf("Failed to open file '%s'\n", filename); - return; + return null; } AltosRecordIterable recs; AltosReplayReader reader; @@ -421,32 +422,74 @@ public class AltosUI extends JFrame { } else { recs = new AltosTelemetryIterable(in); } - reader = new AltosReplayReader(recs.iterator(), new File(filename)); + return recs; + } + + static AltosReplayReader replay_file(String filename) { + AltosRecordIterable recs = record_iterable_file(filename); + if (recs == null) + return null; + return new AltosReplayReader(recs.iterator(), new File(filename)); + } + + static void process_replay(String filename) { + AltosReplayReader reader = replay_file(filename); AltosFlightUI flight_ui = new AltosFlightUI(new AltosVoice(), reader); flight_ui.set_exit_on_close(); } static void process_graph(String filename) { - FileInputStream in; - try { - in = new FileInputStream(filename); - } catch (Exception e) { - System.out.printf("Failed to open file '%s'\n", filename); + AltosRecordIterable recs = record_iterable_file(filename); + if (recs == null) return; - } - AltosRecordIterable recs; - if (filename.endsWith("eeprom")) { - recs = new AltosEepromIterable(in); - } else { - recs = new AltosTelemetryIterable(in); - } try { - new AltosGraphUI(recs); + new AltosGraphUI(recs, filename); } catch (InterruptedException ie) { } catch (IOException ie) { } } + static void process_summary(String filename) { + AltosReplayReader reader = replay_file(filename); + try { + AltosFlightStats stats = new AltosFlightStats(reader); + if (stats.serial > 0) + System.out.printf("Serial: %5d\n", stats.serial); + if (stats.flight > 0) + System.out.printf("Flight: %5d\n", stats.flight); + if (stats.year > 0) + System.out.printf("Date: %04d-%02d-%02d\n", + stats.year, stats.month, stats.day); + if (stats.hour > 0) + System.out.printf("Time: %02d:%02d:%02d UTC\n", + stats.hour, stats.minute, stats.second); + System.out.printf("Max height: %6.0f m %6.0f ft\n", + stats.max_height, + AltosConvert.meters_to_feet(stats.max_height)); + System.out.printf("Max speed: %6.0f m/s %6.0f ft/s %6.4f Mach\n", + stats.max_speed, + AltosConvert.meters_to_feet(stats.max_speed), + AltosConvert.meters_to_mach(stats.max_speed)); + if (stats.max_acceleration != AltosRecord.MISSING) { + System.out.printf("Max accel: %6.0f m/s² %6.0f ft/s² %6.2f g\n", + stats.max_acceleration, + AltosConvert.meters_to_feet(stats.max_acceleration), + AltosConvert.meters_to_g(stats.max_acceleration)); + } + System.out.printf("Drogue rate: %6.0f m/s %6.0f ft/s\n", + stats.state_baro_speed[Altos.ao_flight_drogue], + AltosConvert.meters_to_feet(stats.state_baro_speed[Altos.ao_flight_drogue])); + System.out.printf("Main rate: %6.0f m/s %6.0f ft/s\n", + stats.state_baro_speed[Altos.ao_flight_main], + AltosConvert.meters_to_feet(stats.state_baro_speed[Altos.ao_flight_main])); + System.out.printf("Flight time: %6.0f s\n", + stats.state_end[Altos.ao_flight_main] - + stats.state_start[Altos.ao_flight_boost]); + } catch (InterruptedException ie) { + } catch (IOException ie) { + } + } + public static void help(int code) { System.out.printf("Usage: altosui [OPTION]... [FILE]...\n"); System.out.printf(" Options:\n"); @@ -489,6 +532,8 @@ public class AltosUI extends JFrame { process = process_csv; else if (args[i].equals("--graph")) process = process_graph; + else if (args[i].equals("--summary")) + process = process_summary; else if (args[i].startsWith("--")) help(1); else { @@ -506,6 +551,9 @@ public class AltosUI extends JFrame { case process_csv: process_csv(args[i]); break; + case process_summary: + process_summary(args[i]); + break; } } } diff --git a/altosui/libaltos/altos.dll b/altosui/libaltos/altos.dll deleted file mode 100755 index a96d31291bb0ad0f1e9e5327c5f26b36a54ff56e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91605 zcmeEv3w%_?_5a+x_ik>IO|pRm0t8tg2wKPs!ZU${WRXZhVjesc-GpQlQuA^jJp5@5 zhKOlQ8?0|_1s|=g^e0uTR&0xcL~U)UwZ7Y`)&4@Gma0|iqxpZ&%-r3(AyDj3+J62& z7bY`v=FFKhXU@FNojbSm+&-o<#x%I0A;unpPrrQr_r!lXkQ_hh;dpj`^wX0cQc9kl zT(zOe?`rq8HTr5>Ty?drt!)96|GUOQud2OjHSYcCOK-!$s z@rM|qx)MK@Ukxj-Nw2RB)B=`D@O(JpB^}Q4%V(MU(tQGP4>e{v90?@Tf`ni`tI1Da z@Anh*S;DKK(6PS`RpM5^y{3lf6BTbdzx?x42V2S@Zu z;4Hs<=3JVQwSYs0*1Sn>uSqko6m!_G8jt&+2bk@tVSS4W_LslN^+Ly46`eiuj1H`&s4n`f>K9Sho^+-ic zYuCO&Dx@)kszg1iyDH5<+|`|wHgpJe>eNX>3i#&ya^`oDm`Un~#(?0y?)`y+T_kh@ z{TQI`gPrea3*Ot5&|?Sr_YfI6wBWssf9Xz58~FZI)J!LA6owFy5+M>Cg|hY?*{&0R z5oPWrc^^(58X6)_oqaW}kb^;ylRseE%uDdyHM)%X*m!ze2Cu{jNtqEPdK-Vk7ycp68}9u5JcSp> zdmoJ~$g02_xZZ`@x!>=+^nDhL;^>2ID9}N3F8t6Slm-TfL;QBtUyd@-Wt~0M?|0jJ z-0%0W&Z9%YGk5I-b3=z7oaeK@iW1@g>CfjHjL?(B-`2MVAn1Pg zv#BWI@KXr)xQ(8Ct+!l3pu1e7C~=fD4)Za5C$UeQ!sDD$ytn#U3@aK++tnqCd5@jX{9a8&^92ysLif+URN|=xBE!v zrAJs`GU#t6`cF>&?@`&HAA{px8q3*8bh(B~aviDv~4D_Du=)IO; zG)i(=Ixsnaa0E_r@3ln7iu3!^fOCt5&iLMIsZ=Y@Uf}fb67&8Jc7kIB6P-t+H^!R5 z(HoPGslyyzhjR3d4%7jXqF%yfRwY6s%IwyWWj35Tmm#&$T_i&%SUh}yOKLv2r#9jW z(0eUKQJEA{1>SVmmQ&xZN^|yJn=8^BNHa(;Eb6d9szWNK&UlpaQ!3?q6B!$<6{6^V ztjF!>cFOkP5hxv(9VL_-s4oiYsdjWe=HM*??cM?cy@ARMQ&C7pC-tu4wQtI}x;M>!n9j5DX+e^a_cv`iRUkFo-_FI}-0X zP(e(Rp#~qLg#*`SI{V+{00QdIw$-wgEf)q&;eH-Hxi83Fl z;F));pG%ESf*jK%uX%5(U^D6=h+$|j7Zmz=IpCcQℑjqr&<-uA&frqyZ$8?!GG# zvsQ>QnY;!iulE9{^HK*!seZSEN`k~W+D;^x(tKZXXQ0!AJZc)9XCoP2IM@#4-YaEA z`AEV?j$STS!>rz2l7JJ{JElS?Xm|~dSZdHG1~kvgEGa)Z-IFEPv#BGMllo~~O(O3mN7PvdgI zxLO4LI{b_%uJ_8jC{TTbil&Bk_LdI7b3m#F4e?S{kA|B*p=&F$L^OX4ukYdOWfeN8 za43&PO+~6{X_~is+;2g?3s9acn+gW9Y>@#fc%&AI7b-Saco}^??g0f2O`H#O|LTlK zyPuGQaY9!bX$a(+Uj#lZ%2m1bE$Rcr*(2o3X|NB|GGxE=*?6l$C`ppP3_}MAls$QtYXbv#lJS2M&TJXY%k8a5EAufT^BDdeRL#4rs_N^i#7V)H;`y$`VD4! zpP5dh3Qr`J*({;ZaK3ZPqlGni7mAJDGKMt;)$0q4Y@JOkhslJW-yD;_+m^BUaKO7Wk1Bn(#o8b9ur8`+Cn-z*P5Fskxt|b*5ZUy5DzUcQ>eYy5Bc=(=Bp4 z0?|B#);!EP>M5rRKrTbi$T;S#_p!VSk6%O2mjcTPf*GEiB3palj=#_# zLOL3uea67GNRXTWc?3ln*vzw@gl6=(v9Efe$DP{ke#O+X5!<~NSkx|9Qiy(Wght=H zc{vyy1|nD-sRIsEzPsNK)nOR+2=$SwIE=(~A9DF{^*{32)&J7J9ghP(U<@nlk_haS zo@!@z^{YMAN!`_NG#n#4nfFM-gYH+ZbpJWwC+; z!0UJ-5i%uq0gF&VhQt5?QqurS?S+GHz)yj%4eUYA?)^O!MFr0V=Ivxh1R#|F#Q?}c zxG{L(O5k@Mn9=>hdHef7b0|3pJ2C?7Cy+D*^*%D4>Ol4*7>bBa7Wx}ZYU5x&P7RrG zM0y%FG0B}r)qs=lCV>EpQXko?U`CojOmZT$Vg{jyqOnAx<(t40hGkhE*|U3+Q^62& zq;)P-H)eI_Ibc7s1!DSj9-xe5Q6`%+_(|Ay6DO6zNuGy-`}KX&28wETVBQ}}-iLJ- z498vjZcl<8EMXf>!95dq1B#`k)(adkHuUS;A3?@lgaY#wrQBtv^dw7Y*E6?21f+y* zKO_=yl%ea%z#<4>p5RYZEX)n+!3|mjr)EQ(i}PNz`e8R@+OHEqq=IoGMz-8-YNrgiJb^fzJK`xq5_RB&U1@oT>(z`?hHY7x(| zn>}k^sA;*84%}+{sUc2zry{ZzsoVQAP;?f`otj1Hjo=o@}Ek$;@ z0Lc2Fr(9d`YhQfNWcpvncq%tP^M0!hWICwLO3u5$bN+rTu>&svAyZ8zMu>Div4FAwO#>^A zZYts}UW9XSch(1oXG2*yBR#|bsnS^nMEnWqDDn-o)8<+{5_tu%ff~fI{)PM?ywTYdAfM;x1gFLtNQ8`fwftVK3wABm`Rb8@wiwb$stW+@j02FyB*1Scjvv}n zS<^a;{&XIV`pWk@kH+q$NW$0t1k_y=#KJmp*Zn+@ux%fpq()mm=2)E@QJ0@EhHhS{ z{fKsw%8?$YI=XYefk~ma`i%h<%nM}SE28D8)t4Y!*2`$}Jd*w3=ss%Z{f z;F?_ziCVe#K7xRdU(cehp@go}QErc4>-r#}YXSue4H}rbXaNQ8%sO9=DkVHnX<$2q zddI4TTIWa3o*z&wP|*32E8y$=$Ow!jM$xSGD5Kx~Dn!EuuERDe;eq)d_IDr_aBcl1 zZS2nY<<>t_UghuI!B+>TCp?IB287^w;S>~r#K1bDJ{8o1U-}WXb#L{n1GmxEEVajZ z##39-WFYe{CS~3fl)4S6Vb(9Faq4i8n&g*s&Lms_sQ(D_3#V946rWNjl6s(7xhM;< zpNvq_pV96P(nSq3QNw|~h+BF*T4tA#kNji-9M{k{bcjcLVX#2kB~ub@*g6k5_Vf9L z&leM2bD@SG4+YY?UJfJ-C4G~}2NgVT2>t~H9h!-PvN2WDh`B%O;h})D zdlvD_**F|PGd{Fu+)s;sT!z%aHyY&rxW}#aRztj6Ep$$IVG@eg*gkZ9gsASfAB7NZ zpNSZDc@QX7^7gj?6S8n0*+sR)GIl8W1;G=L`p~>X$pa!jlza^W5R68YIrp#f6k{L} z$9F;+P|ZiHRAk?V(uR_+1X9n$TM(w{`{lr#o>^}YD32cFpnZE(qV*djLO#z!H5_=j zXpr{J!4un_^9(%UeK|z!5niN*b%z)N`SY<|9iWc(Ov-v0Et&!v@!c<=wNlV(NkH9C zTw~}C?S%}?7MM&928w&odXjjz9g#Fl8G`3s#Bz5I|GUhfXVzwoh==YM03q^J3>C2# z4Kp-&WrLVci6NxAz)BQUHf!H``$O5eK$1;?JcE6=ZNUpc=U|B(kBkK`23#=sE;W#w zlwZg(RC7+PXSvaRHeZX))Oo!kkOp5w?%O%*hX!97X+4;R;Vn?)8%0aL^ZCMpDna8r z7bZ$>;sKxqU+veaKBO`sZnlYb7(CD?@dMKZ7Af0E^a3{xypHD%gWm{|cu11yA9#`y zOa;PBtYz(M*t)Rv+<^Mt{yw!Lck4nrq!xUaz!#^)Dhb!@+u!|xT+gh^+E#EclrZPga!9eKQuk>l;A3T(E!m zdIkEM^)juBFTr|0H*KI0lUwIeW7Ar2PQ&cLxoByOZNu5+dg#_$Pl#)5bJ)1Zb1?G!NN@Wq&Uyx{J0$CU z#CrFk&I6i7o*0lx*C_|dbl^fW*J7FLN>SlG;R-()n3C||2fbC9(9I8)PIm>OXc+Gt zgq)Sm$7U>e!go098I;m}=vaA&OB+yRNql-ua1&qMhlaNgZ=8@wegV~i2xCxdzV*R) zLJw61`(eR6&(Q)e_N++*=7+z2bZ`O2%To_mB2o0y`&4)Oar<`4 zK=tqVF`qq27+{KzkZnd*5`rCKSmY2c4^!Za-~Trfpf;snCfb%KfID?7cuxtV#+-sq|DHa7VKUSDBzt>5qUBX@P>Qda2=1lx<6&hiF0 zyvV!J?`o)RYWCK7*&PRO^#b)k0)tK8DEzOA{bZe?wY zml%@x4Na}}E^C@=V{LQL%cf<{S;MB)v+_1yfM=0q1=?JV-he9vUM5(O;09llx3#`` zORFeE^6YL6wt!!-RNUIoW^(QI`PzK0X<&Wby7YC&mC=`LH`Zn}*S0ohlm!E24W-_e zHs2OE*ZaJFziV2%YeTKy)!OE2YN>7X&hmTfcw@O-tD1a)U~Tg`K`+!)s#pV8 z3)lKB0k7Xx8*tTzs1VOCmlT?--R}+7w?WJC9zreAqZeNSZFOzUu8m%wp8(V9(_sNS zVV?C(0hhn&Vs8i+i=F(Mn${NPXB$}^^RWP4_o!#h_;;#){M{Q6@4EEfd707W8a4xgnM~1V_$(Q17e8_uRp*&I|;8sz`qgxnN#sP!8FD$MS3Cp7{s53 z`!d`-xR2rPM%rbdRSr6N@Z;eh#c8sq@L2VU@r+G_4RJTzKE&@xLEdD>eu?liun`vm zeiQKo2LZ7;aIJ86!94?KV9;6&w+ZeZxc`B31{hliR|ofXxQE~l!=(gKKe&tFz6tj% zT+~MBI^2bDo8T^o`x@MhaNmKu7w!Puvv6<19f2ds*_evgGIYGg6NT3}qFD@!Weyg{ z;#mULpNVV~8;#d7lGzwG7Viv=W8>KbmdYlw)7T{DVw2evHkH*j2ip9+Gn|c)$AjUS zL(X1V91$)lURqF6RaWWAa#vK8Rd}*6DzcNzQCVGB=&nT8&yc68xYS)%U3C(9IJ=&# z^#MX0GM$yk2O5C2ePHGhjz8uuA}AmorucxcR#Uuyufq^a}uf zxlFqb{vB}l!#xJ~65P9RtP^uITpHX$xN^7}xB%Q&;ckI@0PY~%>u?{z#cX42Jlq_( ze7JJB^>7_j@!H0xvr1(d#+Q<&^}bpkN>|RpmbR^>r80mL82bT_2Yo&iRqku6!~TKY zdn~NDp8e1Qt=a$v>j7l%5VWM$ACQ}>zf-&vGk>#J)CT;g+5juVCZV~uz1>@1;q?cb z1MCcfQjv1o!q|BPsoa9icuN&_HU)mFFol?(QmUHjE-b|M5v$mPwqi_*SS4U5F}%Wx zTH>wUcnp}SYDrsdy_5sEvRmV;8EaH|qm+An*b%kVw$^!hVO}4*RINa5i5bQoRI$sp z$nPODPJFfn1AdmJ0i(Kg18>Xv&^8p=(K;+ot8Dgq+gY(z<@I6rhej~P&dRl_WDzRZ~_Li;xGNIk8t%lZkc~$0P zj|m${8>SGfFTTz^wJrWe509`s#Y1xs7;a$&2)C_g>`ujlo!^D*ESpE>`M~B0wsP1d zs%KMEYfJ5yv2*>2TDu-r4EA#s%E{kZe_L&!8IB!Q8#Yn#*zIU7GHsUD;%%vG-@;gq z*6zd3y#a4gXqd0ChdD>{`(ZZ$q*C(-eAsm|wuXlY{{jj%V}-$LDb!lm($2PO8yie2 z{iY44$cyB*Ekz-dND0* zw84~N=>sHSP?x7)hj0Z&s|w1CXAAQaKuLiAyWI+R#Y%Tcn5P-w=~TED|He9BfN%C# zF3K40{A6>hZEq475YDOoIfb2uiXq!d2i&PH@(cR^UI~obS<{*d=Y-8E1t$Riz1)0J z`oCNPPT0**=)}w^nPr(5WY%YXJ#%N~3z=Hh*sN(;*;&i7R%Bh2wJq!VtjDu{ne}4U zAG7pqNA{@f1=;!8E3z-mzB2pK>@(&x&hgFJJm;!8*Uq_fPF&8ooa~$hIX}tybV-E*It`{vwt z=8l;+dEWGSS@ZJdx#yM5tD5JT_vLwkc^&hVm&4P#2C}c;>>T3+omJ7hb&ZvV~VIynf-% zh4(J}@xtFP{GWw?TWBmAy{LFm-J+I78y9_h(GM5xU-Z(Vp+)0zm*v*xUYvVP?p?W$ zfa^cx{u!K)$(xq9B(EZGeO@5%w!A0vewX*hym#_G%}ZN+#^RNWs}^6dxN&jw;{RIQ zvG~fxI~L!(c-P|ZE#ABMrNyr<{^R2J7XNMWj3wzyik5UOxn{|YOKx4Vd&#{^ezRn7 z$zPUyxC9NAi92uLP05^*c~)j==DC?WGH=SfGjmVo1DTIz{w(vg%=a??mihgxy;+ZC zJ(=~3tkbg>XBTESWN$=U-H^RI`@ZalvwxaxpPe*&!R*zu*Uj#k{mt38&%Sr|qqE~=Irru~oby=DQ#sG%yp;2L z&YyDL&556zHW$p~GuS!NKH!b+9!i6kmOV3jPIhi~QFcjoRrb2<`t0WHN3#27Uo#tt zec0>4b7ZDurc$1rBF-|kOe51lkS~7!A_>rWWE(F_6D48|;E_QBi1d5#7()PePOE8s zL16N~BK?6RGo989zgEHsBE12YeUZOrMonvSI9byF!(=nP1L^K#%1_EL)9EPYEyv_f zo@1uB&#Gx%eN6eg^UU-^={2njM1?KUtN|3f;Dc2bl6{|*P*jR z$8gew>TFZ&-0*ADqJpjdrp8upJ+6uiFq@`hE7oX+Imi~}-+-NzD-zKVh!*T99*)FP zj8L4Hr)t{j;+0Fw%1W5(y#tJBMXSpyikRwuhPcwShUPZxue6f#Rb|BhUv^Y5D_Img z+jPMY=gttt9$U6nQnvCePkB`Z)8^ekB?*$Y?+{6z$ZQXa1j1ytw{C<2>skl?YRd~& z7L~Y}?Hxk4Yqn1uF9IC3tZBX1S43CC**b}cxoY^JVU?Yh(+7fr07a-a|7Bu?%TZR6c+1ouPJnw zR~477^i;UdDz2=mD3FmtY7Rx$h<9D1T03NoY_>QaEjQz8+|M}DZv1tW7nc^C<@QvS zRC)>vN=lX%6s};lSxIkmjQ8+2PKibbk0+MmNmM+SXs7uC5xj-k-HF;EMf5! zDb8X}j)6d;2xPNSA~1)I<|y-7k^szS$s7Q(V*~`Du@vHJoXRZjVjj-Y5Ukp#_JAxaJg#XlX&^3g8IJ zRcp)L1V9w}zZ;5}sL()Vb7*{wk=m+j{YV<6XrA&_%T_Uc?4yVxQcRH)(%;eLG|uSX zoN9*xdtjm>QLCW4J6QGWf_KY&!Mr^>yQDap#pK%uaaR(UZF zltw8RfVfJ3#`y3g+Ex}tVep*}FIg!jODtK&ykr1`DXDdYc4(=$ z@z^9DGqAS7nE)Jo8NZCce5N=PNvF*~R50^ZVrDsDldemwX?-5k)blDEUO~+9}r|x&sMQw0ID6t#*bg*%bvYM}X`33OHy=p_QR!p!Fd zWDTF)Fz%)0fWRSC^Eo(W^(a(wni)O)9HcD-5@XY;{6ds}Hk=aV<(DGGEPtHGQ`FpC zTHDkLd1C6o37U4M+{1-f0|8FN%w7xpdq95%7veo6#2W#c!KHW)N%1j?-iG3odq|9f zh~g+spbpo=GUW%^u=Lmn*mFMuZM5PDW$!u$7HU-&n4zV{0T3IHvq+*< zcSW@7u83CMC0mu935zS!cTGnwMM;?op_~Z-({EeAA-c8%{+G`DD#7k36KgfOj67%L#TCxI^)t1YMlqDXNdTj=^(Al{2@=w z_!Y#J>G8DVX@RFUfa!Y!wRAeQw5~Fka?X5&&@)M?6y?k*6v>j2?^9$pp(4dv$B61h z)axJBgVIl$`IBTVtG$lKC8jJQc`CZ<=tKL{>n1klLG`s$y+Z@7=;4f(XZ;Xal(Hx#ihZzwL;Gqk+1L_^CPf<-KE-(tqW&>P3QhgyG;}xZm<=8vksCZK0Lw-jvr~TcR=VIa z%Hu&lZozA;zGBj>Y6BAC&m72*f==jMlax5)(#+{jUWZ z2b}J&_2X>`CH8KCtmT6$t)#=K8|&(taX2D`>X4`msBAuVPd0YTzhYR!_XzyKb~&h3 z!a7|@OVE=a)YKrXgY5wy&26_Uv_Y_ao_0)4)2q4FP#yaQXzRkF*>nemO^YTagoZ;s zWYLVlzRRw0j{d17r6^b!Hs|xgg<(_w4pG*n*&ukGsL1jVQXGdF;-YGwyd3<%~JFQNe^N*9>X`F^2AhGLq+W-ZWPrQCJ_x7H)Gtb z^~WYJlF3?3D2>08!}MI4VuVu)aWrQsETn#>=gCw@OeIcQl{K8}^|j&fP&3mP%M@o! zA$h1TzB{6m6%INt?RQHimnSKthXL$KOtnb@3x?VHZTn;G{V-VFF zN~ml+<+cX3|xwh-@b>qXU!?xtSuFA~F$M@Mf|fWdDF;o`!fm#oa_!SJSY2 z7BJWpmI)Z$_%xAQ!b)KiE4@Qdr3*Wh%1OwDBFZUJMY@8>0*X`%G|&=D?iReQh0}nZ z4H(;*vWnV3SLwp3$ZAZoR6|$kw81>Svg287bFqMEpj6|?G;IGH|MGwwf)?v#1 z4VN?w9}w0sEOa-C^qfR8jzRJV+f1bAC6Wdt{_z+aD~DE}@+|?k;CMHCF?-T;Uvgy4 z{0y__=Q>xaV#}y#QD`Aeiz8K4>||>sn_m>IKQO34<+#nxo&X@U$Uq|rAXF|&0_lqx z1mspPLjvhr7y<~)XbIE+WLq@UntlIYA#I@eoG@8*4ff}ML}V`q7YfHxDV?U`DDG~KCD;dll6*xVZEY|uwHRk$a+OFX}#ho z+lFu(^-4g4{5dPPywdPU&~>lFc{^-2VV^@_r#^@_qF>lH=9)+>rxtXCA3)+-8ztXCpp zTCc)MR_m3C6NWv`n=rwtydJc zSg$P6koAgSR_oR96`A6x_tJ9=PrG>Ynkl1|A&e|E{CVLp?a#n?5Jfok*cl+5l4yL}Tpf0LPExz|L=JyXNsUwg&4w{H0c$H@BtS0v=UtM(IdN0GmQH<$l05 zbAx39ZIiA5Sf^K|v6E6el$Qu=*r5?@hC;_c5T;`pIwV!!)X+eg_9!1vrV+Pa+VEo} zc8&9)jc}Mm8-AE1O0z9pi)Z}WMdx77uW$QUcKmHn!iPiA0Sx=v6$31;wVO#Lz1PZLPGKV)okj1WpW_D{gbJua{`f zm{86-2}+8oB1N~?%XkXYkITB<8-FGU$C8-GV#;uk>O`?P&Aua%R<`lw8@BlA&7n}W zu1+NW;^jLfg1c{USZG69iLEFdT3PNcC~{Y@8TPLy2GKEN_+=ILzQiaHCb^V0`Rkbd znnWs?DlBP+in^AQwM{j5l;#fBew|D}<;5^k)fP&-UZy2k(n8k|_?i6%nVu3(FKKG^ z;vNhSY|VaCVmoghS136m_sueS$}wAA`z?}i8q?*5f0&%?-%R`l z#AMe<@UY|`bL7T|nTx@K4pV$_${xMfzi zL_@PW!K|~o7J1AjkzV==HZWJz_*bByqdYVNM@^W^I|`z8m}{a^X@0@sxlx|=beb+| zqDVGIc^aB)8(Gw8BHe*Fy*w8+NyMGV4x#B2(EnKr`u6w24FcP7aPrjB0DHr&ALAoj~Qg zW+Au$M%cHR@;x#ZQIp|@m<>$1n+9==(=3^&D7*g*f@3@${+gZ#Z|33hAEtb&DE|fG zVUND(Db)kjXvdjbkC$J0q*N%hru!8f9VWU2bSC00 zNv2d#5G&ZzCPCG}><)hZq!MHOwRGB2xmQts0URmKd+!4; zlh-rlep+ozMw9%Inq+blQy!p>z^3Fw^sj;e*O@qH1SS^5;%w3y06#`#YCQsJ(B7$S z2oxcZwjIO=f&TJi9 zt+G#1s2a3J{wvD79B)yav8mRyqdvyhtFVN@Y;$G{-fKp=2RLj2+U857gIkc>fW(wT zN;xu5n}P83N03kgjOkA!5Tw9w5!gk6cM-6`O;=FOWCUj3Lw|0kKiA^VtUVz3Cfsxf z5EcV6jgGBNAB)&J#ORks5+|G*D)>cZ+GfI72Ou3~I^Bzay5o_{PH#oPwqqS~#L|%2 z3;xns#=Ag{I`1Y#=&3f>Bm+NiDUTAs@Ph2{O8e8U!X!Bu5l?k_E9(X$)W+Ag@!tVQQ?aqX%NxE76M$&3JiX z3MBm*3}k9}e`DLD+=+^Rt|qfnV7F0Y=!6GtqQ9`)SXOu>5Oak`;fNI;0lu)?KnS4~ z9!bQy!lSrlg=dL|R(J%nuJDH2ZRjx!U)CwHc8mZ~SOH?!twhuFtu{|%a~rPW;+N53 zh)GhYzkUq&9SlG8!cq)oy)hJk#W)`(-ze<^sCi`OIt=>A>{1vydNJIuk$DI5#I~Xv zBW22)=)hAk0>olonM#qlh+s8?r!5#J@MuFRM>ZNKUU6Hl9=cVvyxYYsg#^xfM|PC#|%IH&^(J4du2u(RB1$54~wqNXMCNInjI2P_PDs z6PEEsvu&BLW1i^3D(w&Vhfd7NCM9h z`D{hJM9s6TqzvXxyscMRu*!`m2JQmZZo4e%btowBB)+!h)onhUnd;!pL|vL}l|jFN zZk13?uc~bnpvxr)U7B`KWep9u)q~kOCD-H(YquR{Rq%7 z_7xJIqMJ%mfQRwSww<#~eX7uxxw3t;FsRzDl<3VYf%-l5J0~@E8H*XA=CYB-dcQ! zh^;#MYrKHaQ!PV{SI7XV*KdNVLfGQIB{jiRK_o11YTOV`amo~w5Tc?cDt`vu=#^EK zRRvYml}wpH>OIO(CS4BVqZ zyPhDmlxfty*vR2<1*Jzeo^m>=k*?-r zu@aG68pN?)nsGlU>neRIW*lk5_$jpVnMvg<%J?}HnI$3NC z*{qMwY{z|criJG~bv{uSFKcTL-bi72zEOLJ3eY_zcz4<3URhPK7EkKFuh5Z3`?BVy z)(e^T-#muV$-Yzo?vVfu>oGd>WLPq5dlUlco{FjxXhU&TG2UYKn2%A4+)Jy^VlM6G zF&{v=?ffB_cFPz#h)4AKJ$Y?DI;~iRLx{NWyxzN+Y2TCxHXuY^lBa!Z%uaL`43Ks_ zW24*dO7NDZpT8ll-8zO|v&M4Nj+^v+Tf|*++Ria!IMiw9-4&N^x3$WoT{0;NH7BF6 zcAEsGjLaF0q)fYAa+hkaY_Iis#naO}B=EH3NP?wk_j1UZy=L z6P(}_uRrp;_q2z`h^J+=xTZ!i%1_X8+MQ$Qv|yC>7D_NiLS)*Hc-v~j+n(wDhp2X; zhi1d}uXvKqj{%_H@@vyEm!!_c5FH%}$7XWU#Q?`#h>O@1muO2CBhDvIzJkW|sag!b zM^%|}6^|M?UrGrM(sb}n*`u_p@i*=?{E4>|02^oM&UTE?>lNiUz(_z@*dEstIcEZl z&OyvC%`+hatSYVtkOrB&jGESOV5W(}s$>*>M{W`Z#L*1U$#A0%0#X2om=Qg=dm>z2 z7|BDWGUW_z2FpjLU%+{grxhfVd412|_1(deMSaiU_1&S3q3dcn!j}m59x5kFqsr0r z8(G-!o9UH&Ufv;;wLTM6-x36=&YoAkK1p_jV4 z4YPP;k~|MQem@G()efY`-HCckfTX!01y`EmB#3f4RbN+cK{|U2={Dwo5Ks9OY(1

IlMK@>6dH#mdj8x=Z8QiMzV#qTn8oxQE)DEr3B}uj>kag|5+_Z9Xxi83N#N-s zV>Z+0JGViOwy84!L4g?EnZCgJOD@Y?7DYlO1l|;?h+kvIqs!hhNrW9}K;}8zhuaoTJu#h}`6MA%|UoX>av3@Ki^c$R+ zoM$b3kVkwhr;0y2)o+yPMwk@;&JKiklT0!X7M1Z2)YLXF$6=Uo*&pEHaCJ*A{J>rFs@Ji`+T^vlh(CahrKGI)wQZKVjwc*@V z>oKV>$y8Ooy~C}u`pYJR5?UO-9fgc7On*fp7!sk{dVz{S`K?58gx?zCOJ=@PW%}=A zvXh^lD{Bx1|6W3qBvg=kRYFr@iZKXy`Dr@+H3>|Ok*ZSAjH|Nfvp-CKU8cEW=o({7 z!XIQp8e|7i;R;?K?7^*#;sU3T%-)a^ogrj)JhV3@+L?kHXD&qJk1}zlpb?q)KQb|0 zgmMo^giMk9ScJn8Av=;#ql+7-G!AjfW0kY`7xownf{I}wI~M5tYhBl`m;=3Ch2qANQGExG5v@nxZIjb z*JR^Oas4kcu_Vk|dno6-GO^r}Xl8s*rd7qz)!km7*k$SOOYoY|C{VGnwxG41Iv^_i zSDCynhBU0G$;VBNTbTXg6T zuQGgOTb@WYu}w`es}ZJ8H7HK}1j%L%hNoSF!tENz5HIV65tv@Zc{?^M76yr%k

) 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