From ab29339aba26e418fa2565f290b00172f281f6d5 Mon Sep 17 00:00:00 2001 From: mainSpi Date: Thu, 20 Jan 2022 23:22:21 -0300 Subject: [PATCH] fixed webcam bug and updated MonitorDesktopTask cause they share some code --- .../ui/controllers/WebcamController.java | 12 ++++---- .../controllers/tasks/MonitorDesktopTask.java | 24 +++++++++------- .../ui/controllers/tasks/WebcamTask.java | 26 ++++++++++-------- .../ui/controllers/WebcamController.class | Bin 3868 -> 2530 bytes .../tasks/MonitorDesktopTask.class | Bin 11098 -> 11149 bytes .../ui/controllers/tasks/WebcamTask$1.class | Bin 2064 -> 2064 bytes .../ui/controllers/tasks/WebcamTask.class | Bin 10495 -> 10504 bytes 7 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/main/java/greek/horse/server/ui/controllers/WebcamController.java b/src/main/java/greek/horse/server/ui/controllers/WebcamController.java index 6606904..e5bd115 100644 --- a/src/main/java/greek/horse/server/ui/controllers/WebcamController.java +++ b/src/main/java/greek/horse/server/ui/controllers/WebcamController.java @@ -20,12 +20,12 @@ public class WebcamController { public void configureChoiceBox() { choiceBox.getSelectionModel().selectFirst(); - choiceBox.getSelectionModel().selectedIndexProperty() - .addListener((observableValue, oldIndex, newIndex) -> { - if (oldIndex.intValue() != newIndex.intValue()) { - task.refreshSettings(newIndex.intValue()); - } - }); +// choiceBox.getSelectionModel().selectedIndexProperty() +// .addListener((observableValue, oldIndex, newIndex) -> { +// if (oldIndex.intValue() != newIndex.intValue()) { +// task.refreshSettings(newIndex.intValue()); +// } +// }); } public void setImage(BufferedImage screenCapture) { diff --git a/src/main/java/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask.java b/src/main/java/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask.java index 7492b84..43a5dce 100644 --- a/src/main/java/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask.java +++ b/src/main/java/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask.java @@ -79,8 +79,6 @@ public class MonitorDesktopTask implements Runnable { } }); - loadMonitors(); - while (!start.get()) { try { Thread.sleep(100); @@ -89,6 +87,8 @@ public class MonitorDesktopTask implements Runnable { } } + loadMonitors(); + startListening(); while (this.running.get() && this.plebe.getRunning().get()) { @@ -129,13 +129,7 @@ public class MonitorDesktopTask implements Runnable { } }); - } - - private void startListening() { - double w = stage.getWidth() - 50; - double h = stage.getHeight() - 70; - - while(controller.choiceBox.getItems().isEmpty()){ + while (controller.choiceBox.getSelectionModel().getSelectedItem() == null){ try { Thread.sleep(20); } catch (InterruptedException e) { @@ -143,6 +137,12 @@ public class MonitorDesktopTask implements Runnable { } } + } + + private void startListening() { + double w = stage.getWidth() - 50; + double h = stage.getHeight() - 70; + request = plebe.startDesktop(new MonitorDesktopWrapper(w, h, controller.isCompressed(), 0)); ObservableList observableList = request.getObservableReceivedObjs(); @@ -191,9 +191,13 @@ public class MonitorDesktopTask implements Runnable { } public void refreshSettings() { + int index = controller.choiceBox.getSelectionModel().getSelectedIndex(); + if (index<0){ + return; + } double w = stage.getWidth() - 50; double h = stage.getHeight() - 70; - this.plebe.refreshDesktop(new MonitorDesktopWrapper(w, h, controller.isCompressed(), controller.choiceBox.getSelectionModel().getSelectedIndex())); + this.plebe.refreshDesktop(new MonitorDesktopWrapper(w, h, controller.isCompressed(), index)); } public AtomicBoolean getRunning() { diff --git a/src/main/java/greek/horse/server/ui/controllers/tasks/WebcamTask.java b/src/main/java/greek/horse/server/ui/controllers/tasks/WebcamTask.java index 2955d60..37d9c6a 100644 --- a/src/main/java/greek/horse/server/ui/controllers/tasks/WebcamTask.java +++ b/src/main/java/greek/horse/server/ui/controllers/tasks/WebcamTask.java @@ -80,8 +80,6 @@ public class WebcamTask implements Runnable { } }); - loadWebcams(); - while (!start.get()) { try { Thread.sleep(100); @@ -90,6 +88,8 @@ public class WebcamTask implements Runnable { } } + loadWebcams(); + startListening(); while (this.running.get() && this.plebe.getRunning().get()) { @@ -116,14 +116,6 @@ public class WebcamTask implements Runnable { double w = stage.getWidth() - 50; double h = stage.getHeight() - 70; - while(controller.choiceBox.getItems().isEmpty()){ - try { - Thread.sleep(20); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - request = plebe.startWebcam(new WebcamInfoWrapper(w, h, controller.choiceBox.getSelectionModel().getSelectedItem())); ObservableList observableList = request.getObservableReceivedObjs(); @@ -171,11 +163,20 @@ public class WebcamTask implements Runnable { } catch (Exception e) { log.error("Failed to get webcams", e); this.running.set(false); - } finally { + } + finally { controller.configureChoiceBox(); } }); + while (controller.choiceBox.getSelectionModel().getSelectedItem() == null){ + try { + Thread.sleep(20); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } public void refreshSettings() { @@ -183,6 +184,9 @@ public class WebcamTask implements Runnable { } public void refreshSettings(int index) { + if (index<0){ + return; + } double w = stage.getWidth() - 50; double h = stage.getHeight() - 70; this.plebe.refreshWebcam(new WebcamInfoWrapper(w, h, controller.choiceBox.getItems().get(index))); diff --git a/target/classes/greek/horse/server/ui/controllers/WebcamController.class b/target/classes/greek/horse/server/ui/controllers/WebcamController.class index aea36915d6c9585aad31ac6da23b4ea38297378c..b1679ad65846280b60b628f5f9fc6a353409f300 100644 GIT binary patch delta 886 zcmZ9KNlz3}5XXN#-P1kvJctZP5Cwq&Mu!~~5Cz;oG>8j`g5W+Z;({_NDvE2od3lK> z>czx_GcF@B(ZrkaL(Jn!}!ZW;mB zDDqgV=X}+{dEZ!L#8yStegsD(e z5;0Jdv3SSWQlgp~hgwA)_4=tf8wj&m(LkfFw3_U#ify#$ajPbyjqMIQ6g$~vkgLC2 zx%!J04Yt$aut(9!Uj5tZ4z#gf(aizf<*$t#QXHnmz!{#H?2S#u1N0hLrB!vqE`1zz zIHu@lK)?1k1_v2(IH5SnDgDbokaNbss0eUQRF%sh!-^3`b)Vf6Xy?3QoC|v1F0(Hw zE;FGQ?bf%i9BpXJ4bM;{C-cb({TSZe#4-q?L|zfw$5pXpv1D8rCS!sk+UxLRi<}g% zTD0LsqaQHllVx#{UK-N5Cej1-+OBg$w80eij3}>ri)b$yjK0H3ke(oG8N*Ey%)upp z1x|1Yr-7R(m>6cVwp3tp%M+}7lAt(cZxFjYX&VbvCD`N*nDODU3}J~Z6oy6QQcQ__ z0*`UdKeW^&DCHKnlT@dPq-F|XnF>RZY?@|Yuv%s`o0&W_7idkedya@?_RT(Lm6v%# zS27s#oXl#znyEVR4~BZIPx$)H$O1=t7C0U{9XgvJmSD^yYZBLs>EY>RWjy|;NN-98@u1x{Rw A;s5{u literal 3868 zcmbVP`*#z^75>IDULzJTDj0CU0b*m>JT?&0G!b z?!`V0gF5yrM#eWq+)PqnhaVzOTb>^%H3xMJ;XZ+V(Y&k{oT^;C;<*j!1-AswtQ$5j zO~*GH@se>>n$=myzEyAnS(jd0B$r{-4(k}k{Q_ELfpL;mfv2;@|2+`74k;1#vS~LZ znO8cCmLD)49?3Y0V;UaNF@jMt8I!R!Ye|S%t+sUu9M87Ha1X>N$HsJIG0t4Emdv^= zTXKc5Z%aqH60R79_Bu^Hfs-0e={OBT;E*!aFjoR2+IXQ^t4WU`Pyzz|%#&+YHCPDq zx{$^hoYnAGYQ*E+oXc&- z(>2cu%z0aeD%L}vq_TU9GCi+j3Qv+OnjT{x?!+)D8fz{0JwCt$~A|bgJ*O+iyHzv zr=GZa>4USysV6UAot+XG>h>;akK*NHIzFy=(P|A}Io%IB(mQ(kY%Pr{q=uS~I+&P= zW<2FK89d5_RXST^Phr-DI8nEbHqhUjSkz$aSc21~p%i$`C${sN>n)j#!J}~&h0Q)% z%{`OQ81?@+RU(jhS3ep8;$%M<260+J20EHprg@%h*k*->P9?Rosdy#%TvIv~8D(dr zuWLT(O$?->x2oe7J`qJov86muSQ+n(y2dAUd8V zz1hNenFU|6>JID1Bbn#A6DmGl*H6jwcM>w0qozF1KSC5OM@GiasTLrRDY_NYE}NdE z-s8#MV8J5%R!G};rV}eeqiR;2=623*funJx?$U)>Pb?n4!aIbMHye?!QJ24KZxcwX zQjIEyU4S*jBxKR;ECps|amH-K?x>1Z0Tp;;E2rbe$b`0~SHjCnq~<=`T$-<%BX>GF z@}R(_$W@*h$+K;CUR{b5$zj4Ib3Y2mCNqkZ-EOy_z(_jDtjHLj^fJ0mJf+ z!MN_omGBZm9!qZ1tH^0fWyHRXAw8{xnf@1CH}C_`Y|O}D!L9nc`|x@izrk-c{7%R3 z@dtrp>o}IP>@G^97&1i(vu0KT*W*=Z$5Qg`-^mh=g(859rc<@0KT>qv#bzT(Ph9B< zuet>1ZZ*1k%hneo$RyOAvdQKYujWnLE?I%h4d74zNBraVnsBGxaLc^!{w2+W;td@? z#;XH(m6wNt!|PbyHho|E8r~Kdy@U152-NUSd})q4ZkJ~<*E|yJMm49 zl~M)tEqt3#f$wyL=Ln?Mh9};F*22yf-qRT!n0Ob5fEJFdYt5jSy9bfxeSHWAaF~DV z2*VwODSVfDm3b1W(9KcmJ$|Bvi5FXVFdn~`<441>Si|`iE^GukLeq~D<`{3p4}?I2 zk+K*F7{&MSeL@NR01wBIbcLY6jj_F$zWoaJ5#nNM4_->Gq1eLJ*D=PG>$hLVfLeJI z9|SYi9nTogZ^`jZH_wVR=IyJV2N@)#N#?3s}g5Sc5GBpLo^f2Lo;|%8*Imy!4 zaR%iCCV4l0mLtVaWcH1Y**EYKZqwW!a%~$@Lwk4e`t|?I4qI zi1r=|0VX2R4#0l=1g}vs)#0c3S!m9F{G6jy=t~M>ki%baLl1t5U-7Au@7J9BBmRsx Q@mJ2IIrA3tY7Gbf3y&{04gdfE diff --git a/target/classes/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask.class b/target/classes/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask.class index 3b4fcc6e9f3a32a31fcde99a2e97579d1fa7d2ff..3eb9f70d6511c39308c8cede0eaa643ce2878a3d 100644 GIT binary patch delta 3286 zcmYjS3tW^{7XP1b9^X9f3bh&|2+ctVim#1u`iy}9&TIQFsCJaS$J-^X>mBjsmgM_*yX_gutvvy z0{3IB++?eu2jn}p64yGIQeeVE0uSR6nPFe;UXRCgY!KLpO$5Ju-kvH4)7^5ry@t9a zImV04*s2nW6XqAm@zy-K(BhLfP@cRb-7;cQ@r+?uOrJPVi#~yVJTCV+#?p3q!jWNX z#-P9x*eP?IdA0%UR-vAhL1#|EV(b;zhp7b5AMuZb!b?=ePYXPQ{n9QbxDViiAqf z=<*kQNzi83IB*nStBSrMSc+!Xs9t@C?{)kj@FRYbM_u&{z%hYea9mDtSDvvBCj^GD zb~uGdC>WXB7G4mJM0FxU>hGMJxMXg4VYI0=Vk48>;`UoD0u#w9Uw2npZG!CNkSR&i z-GW>?@tB0AiulRom$??3T%DAERx%;^_jtibG~5_&bC8Ep1$h-lwx&pQMnlUY#%Vy& z!c6IcGRP-?NgCrGpe#YBP&UET5DLjnrgYyd2Nu#uLAi>4Hil5`m3AlA%bA{XYL?e} zg6Zpt+t5Mff-2N@HP3Gfarh4Tv1cr0$n4}Y>X4I@OKlxAPSCkn)g4Q|o@l9bq+ZUJ z=G0X@+Po9JT#buYn9v%DwzamjaN=l|4c;-l%pKm_*{L+`Y^vyjSeg`P2o&tz zk#QQ?EpuBJMR>z2R(NGfW;#9D9mou7?spvYF1@GI`+`2854)G2VxuxGYYJ9Tl_(R-S#KW?u>#gw;b|6Ds9Fdm&R#A9Z%|47Pu(?B5BBQ%{nWesIu_^pj3M zD-e%KYtHW2aXtcu535|V(FyMG`Qi2}qOA*aPpZpu$)iD$*f?7B@gii5Wz?!+%}=5flrWjU2_r&RO9E#;K&lQn`bg9 zJ6%3^irb`X9=T>@Fsl*s`83in19iqbh)Kp<9ckv=mE%g{$h{k0FY>qH)Xt%Ar7?l`%{rL0(~-{!7O`A{S#q9#9OcV({?V~i9s0#ON_G8m z9v!E19eg){=uQrF3(quumjwC{0=6NOvj}fNQyi^vEZVDz`iD`}ky@^ji+Zn%;rC%A zUq&Z$8U-7Nh;mNXuw@0?u4C)9oYTKi7~@F*H_%FU8NqAi@y1z2t2qd-N_W#e0Igx! z29tfJN|SxgIGG=n!NGsP)tuI{IF@^HZR14=`8qFdXq*(_NlHI%tS>B9na6RnsRuHS zJGNpPE2hO`xVzf24XdlH{a9Dug9oc^0iUf8oqV_2eHNd+7msQP^rM!IU0ZP>e|2F$ zHrKP)2x||vc+tcEarAa^9*HKD!^!eZ5V#o`d@YT^Z5W3;P=h-$nQxxy*nq!a6PnP4 zSO@xy;xB@(3Q3gApI%A#(ftfV2CksBESWgO1+t2|2{yEZkh<7TU^Kj6|Vn*gb)US zEQtsnO&ux;O4B7=wL-d?H{r8&y!~GIb6FfOuZB})&*C9AywQud`35li%)R)KuoCAg z=?JSV{Wx0hvkc;k9(=V8-&R{yr9NvMKl29ob!JW{Jk{3C7?(;KYsuU>v|Vk9D&Bnc z1Stz9$F@-~V>=s8W_lk>Rj8nTdYl`@X$=>xB-L2851MI!wsY$o_$%$8P0TXYVpU>7 z)5V%KtQifTTb7@2vDj7nj- z0wPX&oScK?iBrlsiXT0cHpP5ycGg;WOSAikkC`}S)?H(w&Y{m01d1b+Q`$>@4RuNp zr-DvY)f!L~l`s+~y-F!3l>)s~`bWp4>I7w|z-Qjk1vBSSgIWg6R@gfK3GTiL$*82A z1`m8Fri~1QhAGH4KvXa-PeAt@I0>&^%=R^G9SO?`WD&za$B;I}CnL))9te#(?RGL0 zd*s`NX|zm!UsyJlZ?Iulp5hih3BO%03#apg2>hWL?o2Wy^f# zIL$LW`lwmiB7xF4wGEiC<$ z-_b#+kQdTPa=$HIPOz7`uEljat{1ogH_8tCaF2tHRYlE~c0xg*NM4oZlRMHpo^dWL z#7#Q>DX<75WS%i1O>br_SfS%T0xPjfdYvJ< zPoCi{cCUsd1r|Ig(1|s2o^yp`As!ZZ1dqyz#(3-Fgwr_43XxxCU@f|ozbE9Y#yopW zpa&b}`K~c}y@b@Jy18|sInl=E(3z1)-PP5N?NN2|Ck39uCi#GCxFe1&YWLG}mn++G zEw&15!?SXweUj@r?9lPNzze96-`Gnty$oE9*=){=n)OxTdUKu%>m`Agu~Vjs39emu zRmW=ryBWSZQDNVsoa~jW#4vvxZwkDH8iKXGalWZGz9aB1-jjPpY2hxsFR&k*xH#Cw znf3K%ea)Q9)mdHm5FhFISl|u9{qhV?S=MSIK^j&K zo+Hdr&We~VW;m*oRW9+QlU;Ut^6U|WTUw*+z_e?N6iK^Vo)j#6_losad2Bqt81Ra=)_g_t&|}s zlZMGdNuwQc$`+JExiaX@ws57&%eoMVzjEcDWwy_bwzlP- zV2{itFZC1B0@W%FSIi5Ub2+o2iE15JG%ZQjh}~$KpuO~lm)>B8O)>0(UZdS!+Rcq# z6%Lz`3C(rf=mgXY4Eao@#894iNgL3W zU*wMPuq=~hQ)9SPXX}pRXgNTQ23*IECZj3jsuTvZ1jc{sKm@7xlnKWOVVH zmT+aTCJ<#;H_$Ss#DFH@`L>nga%iQ&t zAHy|q{DZIzLw)#H0;mHOHoq+a)xIEWrSxHOZDEnpkKtxZ4{nX&_6?ZI3575 zEw}e!b!`vsuW$tYj$S;#_np&k^E=~sNJFp>)hv8$1J346XLs~rZ7r(}wfA7158eEW zVM7__)(nCsa4)T*)$BYSx6pk|S=iVlx}P54 z3D%M_?zv;ZQb+gEJik13<|B{9wn9KUA7+K-sIQ zi7`;GbOD>u*-#UA*DKSxw_ZPQWDIYtfQwI+!sOd5*cZnKJiM)bYaE}cVmnf^74|1knMyY1lHS?BNtH@DcUUc1>RtrN(H; zX)41#ls?6JdRFFr@Relsk{^gs*7O@J)Y*UVx8z+@5~n;3(-k8|1)V6bPQ)ExAoSn0 zQYjdxl0WJtRagi2_^q3}RJ!dLk7`C|Tw!b8X4=9jN=6wy%@o0pB6^&o)-VNG3NiU& zVdnT}xH47DIj|i^CUJCh6hr!v0jAx&kflMVtuBs`ZT;RrLvd%KriC^WUhi z2C2jJ4IQTM*vZkvdMu%NT!UsAq^z2*IoMtXA7L#&)n}LH)Ld4lCNvM%AN>CXsfGkl diff --git a/target/classes/greek/horse/server/ui/controllers/tasks/WebcamTask$1.class b/target/classes/greek/horse/server/ui/controllers/tasks/WebcamTask$1.class index 70a432efb5c3e42edadeae4d1e36f41e98917a56..2306d8d65631bbe5d61e07032d63ad7c9f6bb4b5 100644 GIT binary patch delta 33 pcmbOrFhO9$CpN|jlRvWsvrc9ZWSBPDn>~be3WE&8)X7WOa{$8Y3dH~b delta 33 pcmbOrFhO9$CpN|zlRvWsv(9D^WSBSEn>~be4ucHC+{sJWa{$FN3he*@ diff --git a/target/classes/greek/horse/server/ui/controllers/tasks/WebcamTask.class b/target/classes/greek/horse/server/ui/controllers/tasks/WebcamTask.class index a226d81d13fafbc5881639405ae1aed25b5edfc3..940b207ba585fce05c496648db6196c15da2a320 100644 GIT binary patch delta 4134 zcmZ8j2Vj)N68`4ee`W8I+=X%hLPAM}gwTy3J%9#5LrFlzkUJn6E|@z^)aZ!?K~TW8 zp;SQ=6oF7KJVih4LwWN^8C4K7sqOPC9MfC23hsJ08S(4I2bDVv`(d z%QtNyWUL+4%Trvf%xs3y4Fk3bJd8)=M%%rvMr_ycsK8^`K}eScE{`nM66JaJ(X>m3 z?dMo`qDk$%N4DD+TOtC@Xpuu5!^36{uKG!~V>zA_IDis9`2v5a#9!sF2>E@J13rJ9 zog>sPa0pKk5^DVOYy825CH_!|oeC06S(CG8+Hn&O3p|5$1S{)L4*3@a9caXJDq+tP zIV9c85YyB|3z@= z>PteERr$r0!H@&T@Q%Q{=uOZngA*1l4qc<+eff>Zqz`41vy=5be5}0wMCLhDQX27@ zz~>4I=87tRd5t>UmjYkmYdO!EX{pDz0^iBiPVb2C37#`2olsZdUmU8e4p{LcyHQkL zS>^Yog{sro%e2}UpzIinp9Lo17x}rf!27GfZ*UNdL4U}OllVi!p8|g=+`5KaPvVro zfAF^qxU#Ls2!e~qIr!uzk4DLYI#FjiHlfT~PhAChDMfBgDCn`7x(n)oO`JSF^Oyi9wW7wq$R7w< zsi*uoA-#LLpk696riGP0za5n@+A*B^3d*2NnU|Ph$rhADxpH>m#G(BK<>3>~GCMcD zGE}AHX@H=Dj?`CF2ZA;lM1wUNB4{WLBlO@p>MXxc9N=oCa|9LAxg4ExpHFTwcFCNr z(MUpP74rFY`Sa@*Rpl3zPAM+tg7w$fVW3fhM$;Hsnbg}cj>c;=K~ND*l=mf#$(T%V z2P^yme=t9mi#(-orwgc9qbY(eq^X=V*`Cx%dfY>-Bj_R(xr^mAcjw#@G+odPRk$Wa z4jRphC!SBC+svO1 zSLG*MB#(NA$|6rs%X~o#Xra8)GpyGLxJmX$tJTD_R_iLcSXCzK1YM)2GPtn1 zR-^0KCArk=@!IKHW6Ye^KaElSl{}|MkHOz4wQmKr z)1gE<#CE<{6F&%gf}TvIC%JAW2Lk?@aaHBPpg*Y5FND5)hQ4xF4~OYDHCWTVuSKJi z`nAwKRcfhj@6FKQMlw1v=ed!HByJ5l^$$$VHs1=OW%BaW%b08Jl4%&dF_KO|&2-H-fYWkerM@ zEy!p%ePT+#2=W?Ef0q+M0sjxq*@qOtGV9QXyY2{v>4PpY1)0_}V?M8S?~uc&X#8EPR3sTi(r2f zZygIo9vpnrBLu;>b63=21fyXBuH%T+b7Zc^rMLt0u^Lxl4Q|K%Iszs!iumkt-}$LP zYiO;W{~+DPJtJEvB1w1i<#Rs9&^>f7dtSnndLP{nE8EPYb@Tvi^dQ^m9Olr(6xOps zY;gkz$e>;>F+gE0j}+{3IlZlVdjBU>&nY~$>3I6Km;uIk`m~8p~9(#e0Jv z7dGtRm7ToS#H+i)ocP_yJ7I0h5?NxYGcQ%dfx-f{g&_f)8Vk9v=Y}JEN6UU8$xyp7- zY8!`wX(G(LV>*R&4aZI+8~o~Vs?YH`8a-^|nDOlqj~PQwPihG>tIg^~(YhHAa$2zAMgP`A-ER31v@$uNFuINh$Q zBn_h&9>?R9kfSrx4Gf;8ymB*hPCFSqiZU}*DEN{yoyI_zITRW;YdFah znyM@g%U=+G!N76hJ2wu*p?r2_$;xi}B9!+3rB=;6wOBu6tkkR>c;s80SxdjF4)6gL zokf{AE6bXx_kQ@4J^pt`s81VZ0TJpK+aiAt4Q!?148AChD9ee^c@Y}xp-B-sznP}- zO-3c{H1onJm6r8yrrCw6V0~Uwgf7)hwo$n<=Fefl%5XdC_oJ2~{POz;=P~&xKNeMPoiLunR*kOZC#jBXe!;{uICnZHP_beHI~u$6H4eu0XXwnO z7wtI42!#ro8XXsgOO{}n!p5xwlekMH6C3WNy zdX0|6y7Wf8cZ}YqWAVB7c+2~jL Io&JFLzj9=bssI20 delta 4080 zcmZ8j30#!b7XP2wzL{_C3^3pVB7(|};#L}l2JVSsf+6~RK7vs(oG};@mzpv&OVjk0 zTYFlhwutB;kV<9yzGwTsFScqvi+AofBl>$R-*>-z&OOWj{O`GU&GgPo^ymL+I}9L? zPBrNkQ=tnf0)1g4IBWbBRb}4GDk~P%>Cn($AQfo@^L%fBpBb66th`SBRO!ejTd6_wuReWo(A?tlwd3M@f`%(snq zF2iySD+I2>)pEUUp7R=9t6`pAcjF$Z+gI4`6WGB4uCph) zbli^zG&Bl4h+XnSdoJyfE=RU&H_RTG@QA>p*el05HrrQYpFlJAOI zcx<%jKUhZyt;$uKT(2*-9Tqr(4ry_Yu%!Ci{sfztG z70Eeqgi#!sd8vx^3xO{cE3B0@-ilf^^R>V?_*TwwrC+cN-wXVp#GXpOZ(jBM`daUp z1^((vZ=t_I!%u|Rv+0d%sPrxlRQr8)9G8b&iMC$_#^E>lv1@SR9|C{E$yBZL26UXn zUm8vc{8w=#hdGkkv;UX{TwpK3;`25bDt`<7gHBoP&a@vR5@aH?-0n_uTFIu7CdiI7 z`GPxzzjbA4i$+48aHpiY38vYFIyottlcyL?En{|J=A}BtQk+KJ1a+q#GC!)^zKr4p zB~UMUSJdF%yQ#OJB<$k-!PGABRZa3$)_NCteE~Zq%O9dr68j43r=YMbsIKzrsD_y< zNoj)8DMMyPr`fUuWmArv5j|n(KtZ_*cRS}>S{E|3v<1`vCXaY@?n_>$3UCec< ztMvN3b-Cfn51iMqs79wEnxfHELB%vp{uwi6K|W1aP?Qj2B0TVU1GzJ%7cmEP%BLBE zE>)DXs5Ya~%t%@1HRKxBbEj3*G7cKeVt=aMU4jzjT&HsSm$E-c?(y`o%@ymxlJr%b3f)-G))i zClz-wQ>Wz^qQgZ&wP9^K3h7!wE9pA9Ixe5CZ$29LhKU-RxAqujc0aGv3-qE!F9~{? zUTJE>`$ZeSIY8Uf7~+ z^odTN(q|fdu4wXwoSS&G+gAiV+}4u^BvUkfL+Ftq3u0sQxH4?uJ7wT|L66fD(ewmQ z{G=v+7IcUXN7G?~nB?<$Ysb`7)YWw2Gtz#MSZ%^0^3rCXrm; z9(h6-ZhZ6z>&jkz(%dZT#j?^6X0l8c_vw|Ng#JiJE-uD2l#-8IVJ)`s3B8q%(0dG4 zOoyG@2Nw?BAHnS1~ zX*=Bx2i?JT6y3u5cd~w1b{ET3WdzKBqo>(Ci%a5QJ-#V{f^-9mMi`6)^sF{K4je>6 z6VIBAymeLuUlSZ?Hewg7%bJmZN%aNAW1hQ+HI>Yx>eW@HCqj7Y|E+}>%NE00zpy#a zIp&^?nA^lIZES9oT->)$a9w#uPfM5GV6Rp@XTli*ym;1uhxrP$aklM<$75WQLxv;8 zW40CXqegerJshsU5Cd@&Yo{8BTX=RPE{sHx%U_&S5LR|B_OgvIESxltJI;Z`8nzv6 zQvEBun$IsY{{pqVnD_0gA-vgvV@27mcwdp-)s7F!Js-8;lOtzSYsKfxy)y^~S@$aw zf@NwZgzp-WS+o!No}am2{K9j>9K!EiGS`&IFy}~<;kW>k@goONfcgBKj5)?T%;-^w z;<@|b#sl028j*rs%;?>$`zR)2FKh2X5gy_O@i2mOc(RHo=kwdo?<>$`X{v) z#F>qV&a*OdvD8QPm0ub=JJcpm#%L5WMB(n3Wpt+1ymxM7$y)A_>v&_|jL|{9aTj7e z#$p4Cu@Td`>8bWOih~;rH|?f9yl5=n*;M*gUYtu0(ZdGmO1el_Vr*JPoDzD39%U*i zDAE-ad{|jKF$7kILc?wiCwW3sJBndBg`hYE69dC%XM~vNbMVTNoztueQOemZ5Z;UR{zMkzY%4(x4xJO&#EvjC%;g^!K*M@8hGd#5s3ChD&##bX;c{XDdZ)2jX zoqaoY&~kYwtrxA4$I>c;syGulxiOeY&9t9^oQ!F7fI`ft8Qf7@=pe6Kjc(LRZCtRO z#u?YndJIQb!P+T&vZ>yxI2_i0j9a%VoD1d?*rCz#q6lsInh~i^u#~lxttieSe0FP` z>D8)AVXC=}{W*pSHA`zSg>9c)oKGlSer0KVEpT;#KT<-wsms4j4p z0X75`HS*6f>gY1+V2VD;(b?%}7nxEFDzPn(>mXgzjC^H_jQ$^Pbj(qDiswx9G(E#_ z)g(joERV+WmEbwf=~a4-|HGp