From e187843e60654a3a830a8095029258dcddbafc77 Mon Sep 17 00:00:00 2001 From: Dione Batista Date: Sun, 5 Jun 2022 11:05:40 -0400 Subject: [PATCH] add my cassioWatch clock face --- apps/cassioWatch/ChangeLog | 3 + apps/cassioWatch/README.md | 10 ++ apps/cassioWatch/app.js | 183 ++++++++++++++++++++++++++++++ apps/cassioWatch/app.png | Bin 0 -> 4809 bytes apps/cassioWatch/icon.js | 5 + apps/cassioWatch/metadata.json | 17 +++ apps/cassioWatch/screens/main.png | Bin 0 -> 4389 bytes 7 files changed, 218 insertions(+) create mode 100644 apps/cassioWatch/ChangeLog create mode 100644 apps/cassioWatch/README.md create mode 100644 apps/cassioWatch/app.js create mode 100644 apps/cassioWatch/app.png create mode 100644 apps/cassioWatch/icon.js create mode 100644 apps/cassioWatch/metadata.json create mode 100644 apps/cassioWatch/screens/main.png diff --git a/apps/cassioWatch/ChangeLog b/apps/cassioWatch/ChangeLog new file mode 100644 index 000000000..6eae6605e --- /dev/null +++ b/apps/cassioWatch/ChangeLog @@ -0,0 +1,3 @@ +1.0.0: Main App. +1.0.1: Performance Fixes. +1.0.2: Correct Screen Clear and Draw. \ No newline at end of file diff --git a/apps/cassioWatch/README.md b/apps/cassioWatch/README.md new file mode 100644 index 000000000..f4dad48f8 --- /dev/null +++ b/apps/cassioWatch/README.md @@ -0,0 +1,10 @@ +# cassioWatch + +![Screenshot](screens/main.png) + +Clock with Space Cassio Watch Style. + +It displays current temperature,day,steps,battery.heartbeat and weather. + +**To-do**: +Integrate heartbeat and Weather,Dinamic Day and Month Text by Clock Language or by an Options Page, and Align and change size of some elements. diff --git a/apps/cassioWatch/app.js b/apps/cassioWatch/app.js new file mode 100644 index 000000000..d9c3b490c --- /dev/null +++ b/apps/cassioWatch/app.js @@ -0,0 +1,183 @@ +require("Font6x12").add(Graphics); +require("Font8x12").add(Graphics); +require("Font7x11Numeric7Seg").add(Graphics); + +let ClockInterval; +let RocketInterval; +let BatteryInterval; + +function bigThenSmall(big, small, x, y) { + g.setFont("7x11Numeric7Seg", 2); + g.drawString(big, x, y); + x += g.stringWidth(big); + g.setFont("8x12"); + g.drawString(small, x, y); +} + +function ClearIntervals(inoreclock){ + if (RocketInterval) clearInterval(RocketInterval); + if (BatteryInterval) clearInterval(BatteryInterval); + RocketInterval = undefined; + BatteryInterval = undefined; + if (inoreclock) return; + if (ClockInterval) clearInterval(ClockInterval); + ClockInterval = undefined; +} + +let background = require("heatshrink").decompress( + atob( + "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" + ) +); + +let Rocket = { + 1: require("heatshrink").decompress( + atob( + "qFGwkCkQAiiEBEkUgKQhPhE8ogCE8YhCiQoEE7pKEPIgncTQ4neEwpQCPoh1eJYYwCJ7QmHKAh1hZIpOjPAUBJ0ZQCTzEhExZ1lPAZ1kKDQmOJ65O2E65OPOy5O2E64mPOyxO/J2wnPJyx2QJ35O/J2khE0p2POq52PEy4nOiQnlOrEhiSfMJrEggQnLJzB1CPBQmZkInMEzBQDPBImbPBR1ZEoRMCZYImhgQgEE0BzFKAgmaDwLDFKAbqdYQwHBOrcgDgLBFJrsiiRNGYbpLBY4Ymhd4omkkUhE0pQEEwUBJjrHBd4QmCdzoiBDwYrCPLyZHF4QnagQeCE8UgJwYniJwgnIOzwfFO0wJCJzMQE4gyFEzR2FBQombkInDQI4AakAnBTYS+ZE5BMDE0LEES7YnLE0R3FAEQA=" + ) + ), + 2: require("heatshrink").decompress( + atob( + "qFGwkCkQAikMAgIliKYon/AA0gEAQniEwIhCAgYndEIjqBE8CaGKogmgKAp1fKAgncExBQBBQR1gKAp7BJ0IndExR4CE0idaOpYnbExqeYJxxPYEx0BJ0x2XExx2XJ20QE6xONJi5OPGwJOlBwLFkLoLFlBwJOkOwJOlE4JOkTjBOOE/52Pdi5OPEy7FnE5wmXE5xOZT5gmYEoMiiB1lgR4KTLAkDPBJ1WIAYDDKA4mWJwchDwYEDTjQiDJQh4GYLAhHFosSJy6OCTIxaEEywbBKYwjEEzMgUQxQFBogAURwZOGOjTKJdTYnOEryfHE0JQEfIpQgYQMAgJLeAgrtfTI4ndgSaFE4h0bdQkSZQpOfEAgIBO0AnEdrh2FJAb1EdbInEBIpObOwhOEEzYnFXzZ2HE4QlhE4QlDFMKcDYooniO0QnDT0YnCE0ciA" + ) + ), + 3: require("heatshrink").decompress( + atob( + "qFGwkEogAjiMUEkVAKYgnhPYolgOQIniOYZ4FOcLqBE8CaGKojpgKAomhEYUQE7gmHKAIxCE0QkCPYR1gZIgnZExR4CJ0idmE7ZONYzImNgEUJ0p3YJRh2ZJJwnXOpQhBdkpaETsMEGQhOhE7jFLUYpOfTzgmKE4hOiE4hOigEUJ0rvCEywnPEqx2OTjBOOE7ImOTsqeZE5zFYoJOmT5kBJzEAih4LdK5mBAQInKOqoYDEgR4JEypHDEYbxJOq5ABdgZ7CEzZOEJQgnGihOYEIzJFTionCKYxWGEy9ADAYnGUIYmWog/EdBFAEy7KIKAwnjKwLqWE5pMeT48CVQpQfgMjKEtEiAnfEQJQCgJSCTcB6FJzkEdYcUE8FAdQghDOzonKTjh2EZAidcDoInHJzodBOwx/BE8JxcOwsAOwQmhJgSXDObwnFEwUUO0LFGE8aeiE4YmiokQE0tE" + ) + ), + 4: require("heatshrink").decompress( + atob( + "qFGwkCkQAjiMSEkRTFE/4AGkMAgQCBE8MgEIYEDE7whDdQIngTQxVEE0ChFTjxQFE7jnFKAgxCOsBQFZgJ1gE7wmKPAROkTrTEHGAwnYiBHJFAaeXOoyXBEQZPac5AsFgJOhAoh2XJwwnFKoROdE4J9GJzwnIiQmVkInPAC0QE5AJFE64mHY5DFdE4SBEYr5JDJ0hKDJ0jCZJxoACgInmKLAmOTq5OOEy5OPTsxOYE5wmXO5wlYkAnMOqshiRNCgR4LOC8CkJCCEzxHDAgYnJOqpAEDoZ4HEyodDEQpQHdCsQOwwFHEyzoCPYzJGEy0gEwaZGA4acVEQSjHKAomXkQYEYAwlZeRKYDE8gjCYa7zJEwcCkImfKAb4FAD0hdTh4LgRSBOcR0CJz0gYYrrgN4QnEYrxOEE4bEeiAnGF4J2idL6VDE8ohBE0gnFE0J0BE4QGBiROgdIQABgJ2hJoTtjYgZSEE8ScgE4omikUQTcQADA=" + ) + ), + 5: require("heatshrink").decompress( + atob( + "qFGwkCkQAikMAgIliKYonhiAnjkEATIIniEwIhCAgYndEIhQFYUZVEE0BQFOr5QEeQQmiKAL1DOr5QEE7ROCDgZVEAoInZDwchFQQoDPAJOdEQYrBdrZFDOYwncEJDsDVIpOXgJxEE4pObEAgGFgJOaE48BaIhOZJ5ZObY5ROcE441CE6xOGPAwtCJzpGCJ0hHDkI1DJzwoEJzInLFg52dUo5O/J35OzE54mWOx4mXJxx1XE54mXkUhExkSJzCfMOrAlBPBiZXgQDBAQQmgJgh4JOqoYEFYwmaDoZzEFgh1YDgkiiAFEKAroXJJAGFiQmVkCNDTIz5EJy57HKAomXkQYEJoqaYeRadEJrAnJEQUAgJPiAoYmeT4cCkAnBE0BKCJkT1EkDCeJYYiDOkLDFFL5wBE4guCPDhEBEwQiDY70CkInDiQnCJzkhOwhKDdzp2Idb4nEE0B0Bdo4niE0J0CeYhOhgESUYYnidsgnEE0KeCE0gnDE0ciA" + ) + ), + 6: require("heatshrink").decompress( + atob( + "qFGwkCkQA/ABEgKQZPhEwgABEsAoGJkBxBE8JKEAowAbJIhQEgLDiPooAdKA4ncTZAndSwhQEFoInaJQkSKAwlZdgwnfSgYADE4h1ZDwInlcggnIOzAdCE8i7EY5J3XDgYhGd4pOZEI52bSYwGCOAJ2bYIodEOzZOFFAjFcEwwAIE6xOHABBO/J34ndEyx2PJ00BJ00SJ0p1XE54mXOxxO/J5wmYgQnMOrB2BPBgkWiJ1CPBbBYAYR4KiTAXRwIrFTjgZDJYZ4IEyoiEIwrDcEJJQFOqwiBDARxFFwgmXkAYDEogsBF4QmXEQJ7GUYYkBEzDKJAgYmdEQbKFEzonEKYgngJwgmfZggmjKQghgiBRGkBzeTgUikJRgc47LDErTnDEAkQJzkCJwYnEJzonEJIaddOwhJEJzgdBE4hYEJzieJADgnEE0KUCXzoAGkJLEiB2hOgQDBT0TsDT0YmlE4YmjkQ=" + ) + ), + 7: require("heatshrink").decompress( + atob( + "qFGwkCkQAhkIpBiQlhkBSEJ8InlEIIoFE7whEE8pQFE7giBJQoneI4MCTYhQDE7YdCYYondEQYnEPwZ1bE5BQCJzonHkR2ZEAkBE4pNBE7zHFYrYhFUgonaXAQeEEwruZEYcgiROHJ7AfDAwxOeAAURiAmHE65HIOzwmOJ35OPE6xOPO35O/J35O/J1gnPEyx2PEy5OOOq5OnE5xOYO5omZgJQMJrQnLiQnagR4JOq5nCDgZ1fEYRLDE5DoZkUQNoZ4GOrJKGAoomXOw7lCAwYmYDgJSEAAUBA4QDBJzB6FOQrDXJwTJFdLjJKE9jDYZRAmkKAwmhKAgmiKAYmBkApdJIgjCKYIncOQYvJYTovGE84lagR2DE4xOakBOEgJXFOjYnEJAbtdOwggEkAmbDgInDE0B0BE4QgcE5AkiXYbpCOLonGYo4nhPMYnCUEgnBY0kiA==" + ) + ), + 8: require("heatshrink").decompress( + atob( + "qFGwkCkQA/ABBSEJ8MgE4kBEsBPFE7xMCOIJ3hOYgFEE7rCGE70gE4pQBiAndYQwjBUohOZD4ZQFE7YkBE5AICYbZ2GE7sggJRCAA8iYzZOITroALE7EhExh4CAC0QExpPXOponZExx2XJ24nWdh52XdhzF/Yu5O/J35O0E55OXOx5O/J2omXE5x1XO54mYgQnMJrR4LOrciiAmiJgR4KEzIjDPBAlYiAiEeI51YkEBE4J5CD4KceTQQcBJgRQFdTZDCJIjDcNIqhGdTQmCkByFTTInDKgoAEE7ZEEJwhPdE1R1FE0InEE0R3DEwTGcDwomEE7hKFPYqafE8ROCE5DJbE5B/IEqh2ED4gnCJrMCJwgnEiB2bE4qeFEzUggQmIBQLEaEQImHLIImaE4YfcOw4lEFMLECS7onJO8wmkE4QljAAIA==" + ) + ), +}; +let rocket_sequence = 1; + +g.clear(); + +let DayMap = ["DOM","SEG", "TER", "QUA", "QUI", "SEX", "SAB"]; +let MonthMap = [ + "JAN", + "FEV", + "MAR", + "ABR", + "MAI", + "JUN", + "JUL", + "AUG", + "SET", + "OUT", + "NOV", + "DEZ", +]; +let GetCurrentDay = (current_day) => { + if (current_day < 10) { + current_day = "0" + current_day; + } + return current_day; +}; + +function DrawClock() { + let d = new Date(); + let h = d.getHours(), + m = d.getMinutes(); + let time = h + ":" + ("0" + m).substr(-2); + g.setFont("7x11Numeric7Seg", 3); + g.drawString(time, 70, 60); + g.setFont("8x12", 2); + g.drawString(DayMap[d.getDay()], 20, 130); + g.setFont("8x12"); + g.drawString(MonthMap[d.getMonth() - 1], 80, 126); + g.setFont("8x12", 2); + g.drawString(GetCurrentDay(d.getDate()), 78, 137); +} + +function DrawBattery() { + bigThenSmall(E.getBattery(), "%", 135, 21); +} + +function DrawRocket() { + g.clearRect(5, 62,63,115); + g.setColor(0, 255, 255); + g.drawRect(5, 62,63,115); + g.fillRect(5, 62,63,115); + g.drawImage(Rocket[rocket_sequence], 5, 65, { scale: 0.7 }); + g.setColor(0, 0, 0); + rocket_sequence = rocket_sequence + 1; + if (rocket_sequence > 8) { + rocket_sequence = 1; + } +} + +function DrawScene() { + g.reset(); + g.clear(); + g.setColor(0, 255, 255); + g.fillRect(0, 0, g.getWidth(), g.getHeight()); + g.drawImage(background, 0, 0, { scale: 1 }); + g.setColor(0, 0, 0); + g.setFont("6x12"); + g.drawString("Launching Process", 30, 20); + g.setFont("8x12"); + g.drawString("ACTIVATE", 40, 35); + g.setFont("8x12", 2); + g.drawString("30", 142, 132); + g.drawString("55", 95, 98); + g.setFont("8x12", 1); + g.drawString(Bangle.getStepCount(), 143, 104); + ClockInterval = setInterval(DrawClock, 30000); + DrawClock(); + RocketInterval = setInterval(DrawRocket, 700); + DrawRocket(); + BatteryInterval = setInterval(DrawBattery, 5 * 60000); + DrawBattery(); +} + +Bangle.on("lcdPower", (on) => { + if (!on) { + g.clear(); + ClearIntervals(true); + } +}); + + +Bangle.on("lock", (locked) => { + if (locked) { + ClearIntervals(true); + } else { + ClearIntervals(); + DrawScene(); + } +}); + +g.reset(); +g.clear(); +Bangle.setUI("clock"); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +DrawScene(); + +if (Bangle.isLocked()) { + ClearIntervals(true); +} diff --git a/apps/cassioWatch/app.png b/apps/cassioWatch/app.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9bbb36e336c20c47c9b714f8f149ba4ae897ec GIT binary patch literal 4809 zcmV;)5;pCLP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRa3Pf0{URCwCdnR$?1Wtql*-*?u#_U+r9?oN716B4qKkOd?`ktM9+im22mVj+X2 zHR?#Y6eBf`LydwK)k-}621`#!HwO7Z{g(gD8o%<%_8fD|x1GD@*tr_m_kDUHHZ34x-i zKuUwi_v!C!$7woj8626_k#AYr2>tm}wML&41o_rvGTC(fFi>I5()6*mbYd{2>w5z) z+Sb#NYm^%fbrVKmtgb#WDy90;JNoVh0g2T?Y{`L z0)!BlQs9NEcdT0f_*kiSL&b5rh$7H+kQ(B|MVfZP_8ohVpyGLFRVJLXj%eD4+ES^l zZE5@42}A#hp~=V%|AwGVO=4)0@oMANgXQM!jYhK-O@fq&6T$tNOC0+cO(Rr_@k(|1 zc&+}Q`GoZ`+cG|DYI3a*0{%?o$M8gKxi65h`;(U z2_X=s4pK1HaL(O4H1WiErFn;?Npwx}S_1K!pj%TmM~k&LuYFBnW{* zq3TUk5XPr>nnp?~RCLm4X|OIRk+X%?OqblNgFQmnk? z>HWh`mTJv@Vd=aa*f2yF8Y>pfA)ig6JRcQA5JrH&&?VONt!wdis~|#!(WxV-Ku8IO z&f&4*TQ(0IT^j^JE@7Id{9qkGY9}s+oDI8QEM4&1_0RuS89Kr;;xHcjTcnUWT()>V z4?Mq%al%q64Z*dlm4fa;$PM|$9`a2I%DP9%pX4TXo;TsBp$kCf*0Lv=jT zexo|A5*ltOx%bIu@2ix`T_Tfy)k#*7f(UwY3HmZRX;Y`+L&Z^8IwVYiA>&&q@FRsA zC>p*Zj1);jjF3{Ys4GEt+QRV_MJJ*)snM5^WGzS~Z0uwj-LhjY z1A*@`RjM#iX;P>wrkVj6OLE?<40|S<94$L2c?#f(1e*sAe&Y>i_Wq%#t@Xva){bz zI9f+3SeQ@XgfLcaAT)uJTD;3jK_bDx@c7$z4UN8WX>a$2hU>+kle(bcH1Y=~iZ^4P zB1x)kg+98W*DSXHm;s!-H(1sSN%_X>6STMy=Dn|o5t9{D1UrpCx&6s z*P7#+PcNic(z)x~5Adr^&vDI7H(?njTMtgr^kGr=4C=e?r)IVy=Bxy#3PK>J&&H0! zqqok?q&77DFxKg%eY0q~>iTBYY2~ETtU`rtYRt{qG=dOAlPqY{N!mJfk>SC+zs*Ih zYkBbAmAvh}Y4l(>jP1mk9AZYgLPCx(aCiehy5|S%+OeMRee*J|UtZ#YZ+wlGq|Mp= zZTOl=Lc+rHFGlvAjgk_qWK0pIz%&`0EL~Ib{N7wkI*#;6p~8WQ(lzk`5U-RTrRdFC zBs7g;2y^q2tR)cHE*}5x_qq0rC;0OB-Udg9@Qx_7)&xW_dv1o=OS|Jb*E9&H>iq1- zTbMlb0Jq(7E%q1I@x5<;gLmEb1sEG)$DtCIVG)(5pi)F-T3|*ef-0g}CGP!$B_0HMX(89E^-khX+riPRE$oVBJJplZ;yj1PZ!GaH{f#3f4-1obL8J;cH% zh$42Bbe^j8P+R&zWLqmyX_7N~x*ooG;k-{tfTN}IO3x2kkP_8&xoG7gRxgI97tuVjHg z$mefc#8T}rSGgN_r?rDi%>!JNuW@e9;hsxFwqLoPzRh1FstYhpiVb(^z({eW4lp!1 zI{%o&h%jVUHbdRuwv#*EV=3;7^{PJ0;K|lOdGMz zMhYT@mNG#=So1)Fv?S43lR0w(dR8ywBafZU{Hw2K$D~Ga!#3Fa3r4=UoH;EWSe^$$ zfz)tazw1b0e1Qb0Ic^^!X0u2qx%a8fJou*_h}H~g-N5r)GMNk=v(LoHbx|AH&!y)l zK-z>SwL%CWjFSpdpk+-qJvYu{j~qtkEQBGErbJ)>O+N6xcG_28f#3fo(v!Qnb1}Y*@kv`=(eQ_H1yw+pwg^Co|W*i|Ek~DO*Ob#=ZWT-H~ zi;w<-!t)QXcfV9Eli_ZXj z_U|dM`MFVcZJWTJYNAhgEVFg4UjzFNjB)4SJf36)Lw%RP`SX!}5mhO~rKgGzQev8h ztphZgbq{S?pQ8v8DG+JAXEx%MALXCB2U*rXPSOwAFxAE$$3TyK&_P5BAr)FugRBV| z3y5fzTn-IZ*#GoV_U@Xbe4s+wiCJ;)2ij)qZ{HO{d&ey37suEzV`zm+M-oghj4B1oB`R~z%>@t^PUidy5 z*26@#y^xrP>?jj80uE0!*t@g9(ZLe6i6*7PHAJCFI)qLHU5-x$P)VH$OK>EivFMUs z7K#cRH?C&Y`)^^>&ONBw1dURac8ly5XOxn~aG$U}lc-NwnJP#?Rbby{* zdT^rdpzJJcdXAeC&#>x-EBMI|2AFCH-aBuI?BG{u*;}B?YH~%Zhvw?|j}6gL4oC|y zY@MPes6>h}Jwnf!LFAP?4YXY z-1vcyvUUFf);+%u5_Vj&MiG{wH@aK0gE~NGTXr``3gA=`^XK!EXD=al*Cx)Jljeu3 zCTUh*!bRel5+#zjdMgKOIu)-;`&n%qazYaA7Cp1G^v+7t-ORK&4%YwI<7_W3=E^rLXX{IcX`g={^+2(G?;w-4CTQC68aoI`f-R4P|yi5g?FL&%B<)xjra7I@B%e;D?Pqm>IceMJZ_ljTRxIBbIdz0?p;lf1(VM9G5sAFb z(itggUPOPJNspLh*|JWy+jnroXFtv_zHX9TFqg3Cq7pj7ka1c!G&Fr$0ip=yhG_W& z{fM@Stk0zVw zVT4w4VWNR3If#mbEIMdGgr=Ho{q>W)>z1vItoQ;~y!%Ra?i-@vYh*3Sk*Z6>4PH?e z#Fm93Y3XA!@}DYIt8r<%XS|7_+yB#&O6)6FYx6P9mvgd^f+$ezoow)iSs66nCs=S9 zev64S@)DO^b1_>wI=T7B-(t<$^;~~JmUGUTNwTdaE|$U&w^C=v_F;atvCQvZJd-)^ zyo0MQSjM)!gB+>&Z`xfF4Ks^N-aLLSSeb10&CM#&A>F;S!Lgs%oH1ghR7 z-I6+V^Cg$g(}d}}zK=NOdjw&GQXqunte(zi&pD&}%iH%IyiKK(aa~+_ zMW+Vr`5*;1U3&ie=XGcNO2Y@N;|^2GoYq2IWF&d->gE5`@Pl(-d~xV|zG|&Wf*Jt~9Kzq`lD{azh>m;O{w#^ig5(uHtg}^ifp#mog87w=DR6S~L08+#* z?8$(G06dSY&tLwzRcFoG;D%rr#z_X`2{lO+MWm7m-hSRW*Z#cHcy4T}w1{+qq0usg zQ?cNyxMo%g3N?>H-N!N|SyLlx8kl0C;|R3o6)Xm&oddD{ac-48)c&hIV|703pR`#{?>fAP87GyZi1X{XL&-$!1v8-G;6U!V^Ht)4B9b&jZQW zo9Fjlbw+3Im&yxJes~&JKL#VT=}hQ)teDfuN3S|R{t%&F?$l2=(@}1KR7x%B?fmrI zj4U8!RE25^KY)}8t8g#f}eJhqcL8ov14cyAtXvf zryr4ou^HczN)D{*@3=W_XzQw;k8R7pZhRpG1W`oA@tBdezq)2&|H|%s>-|y)l;=%L z;3?Lb21h2UY}h#fTC7SZ(@6yp$`7#&tvs(Y|K(L@b}!E)%ynK6^5+J!fAJi#=>?dE zzH{a5S?{R?-sSs-3%5*G>u>df(2h^a^z22-c*AuGx^DHF)(vlM{o~&2<+(2b5%`g>_@`9k5Fto|8Y|8Px_-$_J4RCr$PozZsVAPhv?|NrRjaS~dhMa)PD8)EgPyEOG#*y*Uwje zr2?BO@Ery4&(F`-_xJag_FdB_s(rCj#*udA_+EcEjq}I49RlzH1Nu7PZhf`-TG~pR zb>G^y_H)f|%?C8kyne0%!vHhzmMKXnw7xBPtmBNptND9wXmT`0fgyl3Na}6ek|7!B zG`Q>Xr8R!JUc=cdI}&0BpX=L%0ennl1g@jM%(BH^>*uI;ZY>7QejNs;&GlhR4}KHO z$RQ48U?g+t->Og9aw8(cw+?ujfl>6>W3cS~rJKzxs@U;?C&6j@Qy74B%1&w^p*YV%Y$-%7j)8j4}hNrF-QFf>p~f zGT6Pv(JHABEWJKQUk}{KX0cmh-qJ?Pz}}rn(|-uydLj&rtwR~QWhU<)pmETBU~4IY z#$&EqGmKUSphd)9NB*GeXi>4(t?j}yum@mvd-j$cXpvk2FatTtOdcC`AGAY^+8^!j z^=~)>k2;?HQ-Ki$65tW_vhU>zB*2%4ARQP{AORjxFZ*7uKmvSu2-1NO1^xs0aT*-4 zn0?Ptpge&fUS&PUp}C_RFYLB%xxNE@6EWsWeUkN?0sN+F_4x1!aDsahb%Dd&8Q??4 z*ZiNq1C(F;DR6gyUlF?w;3EK$Yo}$;J4XG6OQesH%j8Uem0t(@oz8_C*#Y)KA%hoX zr`V0OSKErTn*c{D@UUeAI5IOugAr-(P5}2ZIh*BWyVn0FWoaJZ_KTzb6{T(YhsE-u zYMHbgTmD?W*joR;b*(xCJSHH;l>qmAYWY&zXRlk8WZ~-BMG1)=V|jpkHIR2@^)e#EskOj0Bz$NflA%#0L!4ZwqG_77AR1bTM^(| z2X-;A+G&dz_16-SmLWe5V0PsqAzRxh%95yLkk_xuz^$O8xp}r&7OoNt&o0W2f#%Hc z;A~^dz|jE9EF}*Wy^^AJP}2^58r)_4-XX5F*jgD7?Gos^HGnK!wXfFrv14dw5bsW5 z(Be9P4NgvNdP1Ex#eXYYniIY3ZylpfAlluRU@`6sFdLj;!Nbfk{`bm;dRGc_>U=}@ z1^9feV@E^)BX~U-Id%pi))L?l880x>1K10%JQJWrA`gh3!|0%NeSk}Sh)%G(){%qa zUD_SNH3G4hUE=jW)pOc2+&O_O3yY zgAX&(AGvkai>DPN?Oh4&0Yhs%#;)9gBQ=n=tk78Dt#wa;2O=rUle(<2KH;iuMcKWo ze2N5k)|0q_u(MtN&%kn}%IqaAx2~fV%X(L`Knqj^PV4$z0Y)XD77uoju=uaVq-nE3N;q!u)02`N8-JH$9TDzXD8e$euW}JcP(p{|? z*b6W1&@~P5ePF9!(L(ir>1CHzzcQDR5}{|eW#6hF+nxoOwYO=z^=sfwg`Mtp0{oB| z13WzvIe<%n1ULb9fwM}d1ULa+g+-Si32*}J0%w&@32*|u3X3j365toW$L9m*S1Pcn z0{J&GHVs_5{Zt@tqa_JjE06$h9lmrv0Zs+l6SkACYy4#m9pJ;SE(BLNO%U~5w|V4Gnx0p1$3dCt#(ZHCPRcpd}4mLq3K9PjzGX6 z8JpU?(TDdPgP)-bnj|yFkF0^^%iZYkFgsX|K%m&FA2C~ZOn{+`>ot%;lb%V{9hCkx`srs}~>?JbBQY;NGuE1~%*XyV$hOOFM*;=ahYF zV3cL$p`;e3{xb-qFe7o8ayUwWn;}^n;3H_vU4>(6%-`}DqSDZL7uaU_X^`o^rVfAB z1z2wR%%P3R(jx+Ya$lscoIA6V&9Eu_SQB9DL2b1Ryd&r{V4Gocd4RRsUQBjn+Uy9| z89vW|ZHCRI0ruQwSTXxLYB|X044ZJ!P6N%Kll@$$gg~oRJItX&9#gB01hUn4Mi6J% z9GQ0lT&aiPEm>9*e6`YH25d8ICcq;Ky!tZmdWX3p`yRf|fQ_-)E5W=PGD$=J(VWuf z1pTiqAwCh_1o#j6j|TWt;Z1;V0PrWnn*e_}z@H9p0-ON5&KoDxTeM%yfr~cQIP5aN z<5t_Bq0KFCqs_{`GXi7QGH@ioC#>p`xNh6m8Y3nSGi(Zh=Vstz0_a6^Ys4AhtTwa#`_n^44<-)V0bCrG zFW8_LZlVNZ>|~p^0yAKnVKY1fx15w&cL3m1KF1-U-d2I}5<&v(eeJO&A+t?wD}6d1 zp@1J?E%VA#cj080q#`SbwRYUQ=`NN+Y%zz(oBL2FH%Wx{5ttm*E2fO}xCsmXa>p~GzP zggG~~4$Ib=Y`9C#0k|jlu9=q&F59kmx5jhu9RawvkQR?u9KfyB-m90b+2N}8Y;f6j ztuq4)$qYTwF2MSBQGEOWBQaZdDzv*77fl`xi-HRcR1I1nAPu#8u2B6ucKFC=TEryz--NY9c4iv{u&2Zr1rjY9 z7M}Vng5uOWx5#T3oN+L~t;wQWHb|5+LG+HrEY{Zc$$-!LWYv*r&u;m09@-&Pd-t22 z<6yf!z_lREga(~iuDe$6qYP#_C-f%G0O={&kX_dQy0k3sfU~k*vW)L+n*e)+iz=_IKw8^d=CuS8v-FU)I+-ryGq(f2YPnVCI{Mw7-nhd`;%Hg(S$xR*7L2w0%ffRsQd zz*E>xfNNPj84T6HtvAPJ{Su_d|0!6VXEY9A?<;<6KWlJg9a?8r&6ahH$HRE#ZM4k5 zr%;>#pOJy{5H}6xc!1dtutV7n-8sdcg&KTVrU}k4Qfn#exHc5<>F$}=< zp|%`sd;PrroC+`s5_27`pwS5-`@Nc~SJ$&OpQgd;0GG0%1!Ad(YkgWjW8#l$S|$c% zK^ex|KLaDMTDQ^UfyDzcT2R&nYY3X!R2x%fS_#U>0NmSNdfQF!a4@?D9tBtf908R8 zzbhnnB6LOyTHx;)xOKo{2Z|0TJ8lB}rvOvSmJ*>ZEg~}T5&)yDQ(s3b%v%$AGq$A$ zMq4eTL-c}W#zbvUohct_w{}$txT7w8xY^UVWfSSC%>AA+0T^mT`L! z_cCy+U+b+nnT@@^T>^0LDHpnbivl`3W3w5!21(0EDAV<7er+qg3SjF_I2&O0Ni7qD z-%sX2;`Uarw&i<&entsFiqma|YIN(CXl>tej;}j;bp5mvLJov(glmh( znz7jo906~y#zQ-mHoh}}Z|1xNSMXa@hdI^dnSKY9|W)!-c|`Qx+Qvi7#%Z0 z{{%QfMPQ?Md+DqvacG*m0*vN0`T9LGaGgQDTNnZkW&Ii16Zte5rYp?f7hnl7x?5re zE&)D;=LFcBfxU+kYt3lEATzKHciCF+Fi)|A{r@KhJ`vTLb7`|sWh z(s8~oVyP}0N@lI@PQEhnL#IQR*SAsUpPB#tLF&D9FQ<$FfQyJS7~0QEJ9ORK4%w}P z9uw?$c;6*0zb|`y|N9{K=h`02!K1p*)(Pn>uOokYi``v9)S0(r0t7|r!(