From aacf5c69e9e6511688745b48d06064f255172e43 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Thu, 12 Mar 2026 23:09:18 -0500 Subject: [PATCH] Disable ProGuard for desktop release and add application icon (#4776) --- desktop/build.gradle.kts | 16 +++++++++++++++- .../main/kotlin/org/meshtastic/desktop/Main.kt | 2 ++ desktop/src/main/resources/icon.png | Bin 0 -> 13234 bytes 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 desktop/src/main/resources/icon.png diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index f82eba240..6de2f6166 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -43,12 +43,26 @@ compose.desktop { application { mainClass = "org.meshtastic.desktop.MainKt" - buildTypes.release.proguard { configurationFiles.from(project.file("proguard-rules.pro")) } + buildTypes.release.proguard { + isEnabled.set(false) + configurationFiles.from(project.file("proguard-rules.pro")) + } nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) packageName = "Meshtastic" + // App Icon + macOS { + iconFile.set(project.file("src/main/resources/icon.png")) + } + windows { + iconFile.set(project.file("src/main/resources/icon.png")) + } + linux { + iconFile.set(project.file("src/main/resources/icon.png")) + } + // Read version from project properties (passed by CI) or default to 0.1.0 // Native installers require strict numeric semantic versions (X.Y.Z) without suffixes val rawVersion = project.findProperty("appVersionName")?.toString() ?: "0.1.0" diff --git a/desktop/src/main/kotlin/org/meshtastic/desktop/Main.kt b/desktop/src/main/kotlin/org/meshtastic/desktop/Main.kt index 2118e02e6..1ea53339b 100644 --- a/desktop/src/main/kotlin/org/meshtastic/desktop/Main.kt +++ b/desktop/src/main/kotlin/org/meshtastic/desktop/Main.kt @@ -23,6 +23,7 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Window import androidx.compose.ui.window.application @@ -85,6 +86,7 @@ fun main() = application { Window( onCloseRequest = ::exitApplication, title = "Meshtastic Desktop", + icon = painterResource("icon.png"), state = rememberWindowState(width = 1024.dp, height = 768.dp), ) { // Providing localePref via a staticCompositionLocalOf forces the entire subtree to diff --git a/desktop/src/main/resources/icon.png b/desktop/src/main/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e10fb55a859496ef8fe105935abd723802f4d6 GIT binary patch literal 13234 zcmd6Nc{G&&`}a*EW$B}&2o;hNMNE;U>|}{-S%zfKzK>;;N}I@9go+`%?2Iv@NV1J( zY-3Wk!OU2OVVJp}+xL&>oagt?^F8PJ{P8&FKJGK;zTfxzdcUvtb-iA%>w0cxqQ`qs z_#glPyaxK(<^aGB-LeA*IH7;E@F4~OC`K4)-?$S#PA0fVz8|gySJz`64WqAQ4!j!o z(8cuV3vb-(CIn{O?=}uhnPF$c#Y#Rta??cMChy~8?2<#8r#Nnf9Owd#OTp5MGgrC4 z*Oyl5GSs*1@r}K4_HLUV6e4DG+#Brs0irDdptWO7BkBME9ELs*utC?qaC2&JtUa^- zg&R$17=Q!1{)L-ZXcz#p75F!9*kbu16aO_Ue{20a)B4}${Y!iKAD{S_to+Yv{Y!iK zAD=h?L_zNQKRs6eBG@duN)($7f}G~JR;%vi-Nc!8aLgr{BrgP}H_&!THHSE&lp$AW zZHivUS~7^aX>B%`$*Ll4T;Oi9oyeOG@x-qF;X_gCd(R-QY<2A~$~lp4Y>Scuu6n9> zoi9oHZF92;p7mzBuZVNc&6hg*-81r;(*a$yC#;PXtO+9K-O(Dn(Yh(U`*-J^eIq?h zAo-J|V@`TH7oUDRA(Ay4?}B5E=JP~d>YnFd2P%D;f2(NC0e26&@WL4@@EVzR>1)Ho z<`EAxo8Y+tO!lalA{)}XjL{T5``W_b&&CHcy`<_@WXA+8@iUUMIuhnb{ZfD1WDG@z z71FSSHh+49iJlR10(#BO*_-zC@L>q1hjU#WLa zk}`HX?pl+_Qnz`%bF9vgBG|g*Dw6+{pY?2T?`z9E!l4NO=DQ#LH$K&HxaL1eDl%{b!qCws-Y{ll1?QH1was_!+;1_8 zT}QtTs}HY!eSgQ4-@wgt`-R4?5a}P>mW74FF5RezgsRLmyOXF(1yRyQ2cVTGgIeM@9>gR$Djq&K^KOd*LR=*HvHDq#9Pb z*s_A;<^L%gg7Q?;C^z<67Ls>&nV0h19e7((S31m)%i$bIIYp?rrFii$2he(x1W$Y{ zSck75w>y6kHanTx+RFzsw5bqxOGq!I!H0%vJ$cdAF42eL1TY~Ydi(ag_%2-t1=`_^ zZgIpem9Py=)S)L9j!Q)a4U0O!32tAiTDFaAaceK*D0MeR4sZZY39layPqjEy?FvHE z1VhbFZPy*2%<}Jfj*w^bu1m#%VqHb03iWjl9kOv7I0LsEu>er2L&9!Y$Nx%YVFOeB zt%}fzntDg7eI1QJY5Tu~yH`SETpGIh^}|D}X;{5MX(%uh8#XJDg{x%KSXeJd%>^g^ z`tFD!q^s4>(6A=1vfEhMjAUT`t-<$krmGYHGM4l{j=J2Gs3oqqhb7nA47P4 zI8~(R%~SD&%cu4h>AM)8c(1|6ugVE)7<02C0U6zcYZqmMCY6EOd@V{TjV`{vE0p%S z#;7x>bL>B}dLFO!H?dQ)Liyf~bJARpB5*e*CN^Y!e000hv+JN$!}G|ZV?fQl+YvRn z)25Kw-Hr_8^y5^%`gh2~_Zc@SO?Rg_Fav850iVXc)nHLS(J?b>90)g6AcQT<50wz9BQ9NrI_O;lG#yUAb0MGk2LBw8LXPY z>o`!qAr1f(wAo!brJ%ghi_nfH8-cm@{uZ=f87##p-&41U@ZZZ_)j1$SKn`MT%t|Io5Nbh>a`P*qrZe>3s2tcl$OGrYiJQ?;h$({3ykh;+Kz~G0Kb>MCG*EWI+hjI z3YRY|zPs3hws=||C|H`Y&cgWRzIjyF#JjqJtrIj8NG?7S$8&(44cI!*q-G0&9=C9T zKDpec-Q4=KLjVd{VW(<6m+yrLXJ)XlGj2bcJ+w2a#6CKdqknhz#>Myfgt~t&%V32_ z26QS~q_Wid4GkvZ;)O=S_NncHAvaRtFCy*ocM=Ap#5Dn+9KYG`9QOS61`g?1qbt0z zh%XVcsTWD(F?^n3Y5>Kxr%_w-xR&@eiD-Kf9(KULj0Unwx1QeZ>3f97A%|&)-O*~e zzLK@ASoGNl39eW>Ty%L@{;G83wqq;+c#yDezAx_|ouD3s%QAz?Cnm0R&gGIbN;SWC z#B9N#9ZUPvt4oS;&7^W207gg0#j}$p^%J%qYB2mBG=)_}e)!@mR=`w4+P^?&hHt^K zf=NP2{U60ll45~aUVGsf`ukL#x~6Je0kU#^pRd2MxO<}-DSGJ@x+9`}Z+*&vvS(LV z{;#Oq(C}~l;-{-6DAQg{t_iHt+|>Pe8D?bW+^9cY%n*b}SZfv?tr;=;<66hA3A8?4 zVu)ufubp3qeVrZF&EI~wFPIt09hM7EhEPHN=e&pUOuSN>+YaHJr)a`2IwuG4;1zCV z!X0&W;6CdIT-Vv`jF2vhN?0$=;v!V^>2FVqg-M9Pd$$sm z6Y4S^#c6X~n?~gNdbB~58#cZR>CNO14Ol+P0pv4Uz?;_LTa)^R_Co@r1E(=axA9!a z6}72>=c?=o1J2rr_ZB;5!I^nTqhGYN!Lg6UPnHUbZaxHJ@1R6!W!USIq$it3VB?$0 z;Ok+p#2peHz#a|NQ~P^D3g#(Xp`ni63qz-MM6s%8$1I2I>e-LApBt3E0cb87$Dw5% zy+QivGii^8kjM;D8Q`Nk zjQsn%b3F>L321tyu{QX&pd&65#EAwE>anh;u{7SMEDp9O-?niJO-gy4Ig-K+XHY?Z z$KAYu!MxAaj|8veKLTQps;<#VZK5j$S!KtJ!0F0htV++o1t=DG zs%L`Zb3@B73lu73AhJL@;=L!;Ws z1tls7y!I}s$d6A!LoB7{Bz6o;_mk40j`nsPJq$QuX;eyV?y}MIa?oszH(=pBKhktK z+jI_fuNaQwu?`D7Uy`r9-QPUmrR$VME{o-X>yL|N>vLM}9i`Z@`1bvD-C7y+P!#Z^ zyfi(Avpl?QcDrmAN^T{Ye+nL*zTLut!Jd*1(~ zcMBBAK!>6)7ZmK%%dq|_DEElmOEflgEMwxZ6#ja(;I~Ta;~QYx^C#$&Jk&Q_bsa*RKm69PwahmG zU6t1x6;7BGoA4=A33C9)M}=axQ#m@D>^%vzH`p1Gd*8z=MD}+#MU+q$&N+0Wz~-l) zReKvxR-X)h%~E(uh+ltecg|Jx-2{CqqRX!+geX$d^SViJC0F7#8#`d7x8`F+jqQ6m^j4nf zo}O+rA@TR*$F-)~^_hRd1`=l%O~!08BptIIr)rH^ex$}o(eK{MLvHDY5YP_B#$-~@ z9{_9|viowATI=}2reDm)V|$A$RFr0X&)z3ATZS3J>a*mSLN!AM-Jq!b8y`_-%N=9> ztd_Z}d6JS4GSjiR01cpqIA+^jj(C|viUv!~Wk|lELPx&%PCf2>-SG4I7!Ij0sw3x@ z_At@PSGzpM&k&JGp#NC3(!61WsZqPq8+Hr|Fl|>F`h?^jb(L|8XslVE85 z%$dE?)hAmacdv;iuF_AI3%EP5XGy(=^6AE=o-{Y583rMW)2Cw=eF$2OJDr0T<|>nJ z2&bQaT9DzPiq$NPRap727k;0IX?L32Y~pH|jFn=ZZv#}*p6#CG*?K!(h>x~>e)?-& z6!N_bcLbv6OI73E-*#%I<%%TXdM=Y9v#N29mbqd9oxhgVmw%!ty`trM&ciMAF6tZP zH-C-CzWc8X8+P~c`}nFqd z3<6B6AN;IBx9DUi2pDmqYu`T62;X?5Etg;z`WZ*F(%hPKgCJdZ803|*a9Hr{9W42u zBKRxDFq#layx!gv;T4LOwUmyR>{+3yl1Uy7-t^*h7HF}@!5&x_l4Kr6Y~1#2@)Q40 z8amO$s-=N(gaT?T1Ok>C{a{2q$i&V}GE^cyw%Uh7^7->7tCd}&3geLz?SGSP1r#uKmeQOkYIe}s3ohlJIFDIvt!%$aOO+h84!S4@5T46vebn!g zgRqsbnHP2PYbi3(7^&u$^QP^-e^qnc_vdHBN`0=CZ#%GDz6cS%jM}$nIFlUM##IOU zF2054uS;tG_`oz{+ZJq6x(x-&y7M+Le!X#Z%x^=GSQYhN(d={&otp90ba^w_!}ZhJ zXe{Zgfl3v6nnLgn3>JWL=3SD;w*NExn&_#BkJs(bOGRIteBScdLbQxuESYu&J#C^o z7V;eq6^K#--RaDa%2tFa)Av6gw>h&yR{>P103~|ql*Y4+-k!oxB z-9ctSVz3t;8^eWfm*vW~Gpnm^rv!h$l3PLxx!xXo>M)?ZJK?t!v(w38dP0rL$2nqoZ%IEE3{!rW zv!7}RMz9sVn>fRyuExzuO>Q)Y=$?N~8*`la^dYz<{GNjYyu?|z)5HDfcv;iJ^ZnWM zud%1t0r79TvP@)X7lAD|NBk0;!T*5jkFp%;(ISB<5uUrNZ%HkD(MNc5#ceZkk$+}A zxyeSO7#+nj?W#wDlY)DK;Aj#G>^yrb*RCbzw<*L!@WUd1ym)q>YeZb zAz&6rwcOIKio{IyP+Le^dzd)4g+2{9wWqQwel@B6H0~&5`WUugyktUtYsGwMUWkd- zy$K!Za-Z?G>?;>=tCv4u(3tuQ+ANcJOIdvud@6YK`2l^ z;alTE=MF<%g;ZxOo00tzoe3NAg z1@HCW7T7`G9ppEqPPj`++q*yvB*8mDV{A!y%tn>}uY0b>>4#+j=t31-lrR7F)wQAo zwMdB*G2=1OqnkE!Ghv_aRS^kdUBqK-K+%*SYqk0DrZi-{gMuMUDoG7q8nL=(|d_zok~<7w^Aw__~If>|sM ze(pp)m5}J5cIQDo)*}}Oxo1^whqN;Hbl^XfvlE5>UJ|(Vxf2XX!P6fW7bYLX{|z1y zX9=5SieJ^lWAT4o`))Og2-L<+EUs3yZ6fGu_c7&%=5ig9N1@|%`=~1{rvr&rLr)VVUU1w@!D`Gnx%L! z&OGLGXHSk(Ps^uk^fJXiOMbP{=L_Y|ILKEi=>eKQ-_sK{)TAN?j-F#miwhva7*ExN z>$JZ}CmI^8eRZyF$^*-jbKK~^oiHsdKc&r?f4a_bXQ~T+P&=v88LK1#v^Gq^OpTn} z-3^18@qG!h@2?fmkPvvlzEAm?$4vHZXv))LWl|>eNT6vZDL}^F1?;T`38o? zg-$`1TnQ8aoEXn;`>b_pgHB}{yDyIz`;Lp(Cq+cMlu z-uy@*1pN{5s>TSKiHD@=yyk=kpiTF)w(@5RZj!L4&XE&MDk~Ns2r!y|Gz>Oz5dxP@ zT(Xx zN14v!FI zqJ0DY;bBvtbzJ$dl%t9a#OLRXK!gwiQc8@q#Yk62st67RT&xA&u!|ZRnp*P;MVRP# z)id7PcQj{kR=JX)g<{e}cV7lI>vj;a8O=kXlz8`;{>_|KEIVtmy z-SMsJS2T|YPLc8Gn`4xs*k?7n#2dc6l7N%37$3B^>&zWOzT6=H9(258h4wbHh53z( z35R7!+Fs-;blpKcFf9ybKE#1le*3Qn-C7gzHm2{}s{f9%FpcteKFkJ`gwL2J@-it6 zsjoZCoyOtsAQWyU=6I7t#7dndHHP{H%6gP!jKIb2`B>`{!a|$o3`-^=N!x7Pxf9Fh z-;@eLLnx7{JK#Akz3Pc8Guc=?D`D<4#iQ8;;EA5_VCb|?ejNP(G5SXG!L^7+f*5xh8FgycMTd}f&y*gzU5wRLzKOF z8oAj3^ARobQ9dO`3M0CXyaZxhPi|RU9?KO*fj$9YFt(*RpWmh%U8e^NRcZ?JRy$pS zBP&+v+TxW6nZ#kLL8wmJ&{Sg_+YJc(jRhf$cGCF3zc!YWWS)P z6|f;oG4WI}%(v%Cb`#r&D|#CYKg?RNeJ2=GyaMak4*(5C@$Ih9nQrDUju_9OSt0gi zyvPr7HU&b9$Bx>a4d(TC#Z%Y-aC@qY1ta-lq@#OZ2 zxp60UAbm|QX3T*j?+E@DmMKlNf2krO#iAWuntPMZ^1E#RbJ#~zE&Ye2Ue@}V$#ecC zX?gi=o19@)PrT!xl-l;@62YQ=Y9rUel8iWN1FJY9Ixls>#u*a#+rr}{8x}fC({sgB zAI;qzl;>jkh;rz&1J}uiz>Vgu`i@DFw~*hMX#V7mYOtM3sQ`JZgJyXiP?hk zes8xh1&^&?&qx+*@4lZ7^W$F90a|&LStJ|d?!n*3wx5nmuIf!4#`u!IiDh5H*6lHy zhx`kqOIX2`-fMWIOJj1rarwAj8?;O-#;zDHKH1ojxSyyFS5x@?#6fA+wsXR5K^2~Y8{IzeVAf~*- z67MnckagbNO25Dq;za#@CsS|yH51kAnLIvGm(`+vw_fIa;-;bqBuG}sGILKVs2!dg z|3&Q~<2Ks3M}Bo{7M2L1NJ#nwW|n#=gh(JgI_RB#PoAIpK4ooH9bL$dGn^EhGp3VW zFb9Aw>g%a}<)yycd zo`CuEto1mSU$+-XUO<&WsnM6*9HGlTq52?$wQm-;@rS#q8b4^&S}2qck*j12XFBHq z?K(z7@@wr^2FYd_jSORfIA;`dC9$NpVPlWJ&#nrV0aRprU* ztf##p5$AuG-pLiKi(Hi4CJaWJK)~!Jly)9mZ{nJhV_crvs1STn7td$Gpoh!ZsaCCf zc`v6s6W(uLgjq|ws8V;eYMxR3vaH>4LIUh{zW@sK) ztG2s5APrTSp>o}Vj>$l`om5^wrRa4{bFAvS5AB6E)gi3tD0;K@oF0K@Qeww;Lh5u8 zIz>c>8xZ+O%iWz05n|?#sjpcN4V?SZDLp2>8P12^)2Z?PBzTX+jD5P|0m?9~pAI^Ge!1;@jP_7sK}HKpbuRBW5^lh>+u*Nhmgnak$eI z)5lNNJyhVsFP7dsGj69Yyg(EV3sSUEgx=nfXhz(=$<@@OvAb~^BI?}@y;3|*Mc1&l z3OtYk6VS^L?+?M8u4kXhOyXoOT;22KbgBEXFJqJ+JSpDUIDz+f-?l04mFpioL@PWDjP$f)AwZH0 z7rzXy^c}pT|CgWsqc#4zWbZBF}vb9+OIaBtat(8 zVfFTm@_g5{n17a!Z^eNu9|f#nB}(mtRWA;L?)sScxR?NA*ra`={uW{5BSrb@2&IGg zX-fSY?jVtMS3nnIQZM+6x*p? zyg1TBvAXFSx31jt1!@3DK2jIiQ^A*2e07{!Cu5@+<*5<7DV-p7i>Q|@TAI4qd3J&8 z6p*hUL9R9uK>m3)bLWZ0rzI@;Bh=f_I!-u+@nhEOeTVgXA;xoAJG5Tz5gvHhO_|j- znZZtLOOjbuF!ra>LAJdTii)OmrJ65xNu&Bso4elqq@d{>G^@LFXIVM)EOCy;g;|}# zlnVKNzTF5_rVF@iJge_PaFK*n=+68H;K>+D=C=_27-{shFA6y4;q5=Tbk%#Qj0O+u z+1TJTvG+96r;B}=9#2J7wwID>6w62ZME`dmPE2h9h}j3j?Zu>?+8>B zuwnQiqs*a_+bsx!&eu#``a#JH4QAz*Vi+L9S;cVhzj6JFKr?pP|KzdHo{g66&aAA0}y zyv%KeU)kUDqf*N$x^k}!ttxT8mW7g%!|qQB4b~$(MuOu+vZKH+zPj@~d*WyV6f|A} zPM>HM*|f2b=hyj>#&prXpn<3OMUx4MBfjY^vjasBv$OZ;;m9EvU15E?d1mCXu{iJ0 zv=t-~xkFR0+>CTb449JUY!345%A~C{_LRQE?}3ePSf%u+3v2JlNh8It)BSAaWx1k1 zez|^1-!fbH&y)ar>o|@Sp(Lbh+&AR-{zkZnEE2vHsmVl8x1D zN^}AB(tuZi7(74YIZ&z0AKxc$w7!o^vbtt6hJ|@tlH%3?U%&-nLSy_*=Fs()#C@vK*g}WI-Qn$rDB3$ICtzyM+wyg}w?~UVaSqHosoyp6SWytI}3JXp4&Ux=5apd4zMr?hByu z4?kBJSM#cOOl_of;@QB&I(j*{7N?f%yLB(MwCbQ|gEx%OXESUot#Y6{u)Uhqqbuh( z3rhql%~9Y>--@oaD-GWDUm-ZLPVcmZC1%D{g-w4F&l?sM-LeP?{E;B#hN&zz{zC10 zp|Nf5yzTLUMX9~+9}6WyS?s1>2dbfDfcE9>ci6WkDkXolFE6LQSKm1jL&BIq0_nHh zoO^a$-qnID%c(O;x;>j63q)ThJ-xNrc@7B4*{JW8d>70TNwlS(PTQ^mlY>(Gtlw@> zLkhGYbW77YcTLc;{N`7l;8NFp!4L_TRK34t0yP6Y?n}@I(`@&WB9B8Q)Pevdipi{6 zk|z=>i@s7aW56GEh*NBB;1K5jWlqm4aCvSkUrMrSh4&eam75GYUz5KpkwAYvAZY~H zJng`S^)@L^k5qIGNg#QKWzYSLJo0YCS%^FIL9II>=JghR> z{`eMqt3oQK+%XBt^BGX3GTFg-y+b3L3x0WEUO2=?u|mRBULRu7T|>{^IWGXh%fWJA z`wMwg9=;)d!#V^<>mEzwESTrCck+!4pJe(}J95OjUK1PH894#9wEqhskCO`Q%^mRXGOH`{g8?`sHj^Qq7 z0XCug#Cy;;G*yr)7o75>PgN-Y$!tHzB<|W7?{?*x2jnB2S&a|Z3PP_)v;32B8o&4s zoG1A>u9FpE^!xb)0^eunn70@td#fSe_k|cAT`%hBw4BR8^_aIZxuV7%s>b~UP~fa8 z-&Tib5!So@XdSH7Q|T1!u0$DD{Z|&xt=xki4es?j<>j---ud=<9e2)xHVZKv%RiS7 zMSgBF)iH(J_AWzS)HkDCNQPPQt&5+a#Ur}#=2z>Y^*&m{S;UeuLM2JSjxDW|Q!?*r zO%oPri=xz-WWOkysJ_#60Pwcp4R^hJ2C8FzK$-X&zzIdx33STrORPC7qGYeFaRDlf zM|N6Q3x7Z%%M=1$aTi@aweU9bgl*aByS5(NsT9_Ew!?K%N1HY9BxpK{Qew&5usl-d7Wxt@ z6_k&7Dnu|55C{b=A zF*}_VBA@p6z5W8?FvS4I1Ac zKT*EZFD$zi#d~KT1mFrH=`Z{~SSlFZgbEt?F0U(BoYi(6wB=q+**}pj`}V|J?a$=S zSy2{8>`|o4ayX>{D(tp2_`7)`4@3F{j?t|Z{8Xfb7OWoj%MuYNp=2cX><>|_usAM6 z3vLb}2Vu0+#uukX$YWi)ZlZocJ2C&q7YLmTH-uxPSLpP5>(#h z`dq9GAxsN}Wajlp?2C%2D`6AuGcoY@yEl#dEMhZ3YgT}TBt;`j(Pgpx^ZA>v$;qTc z(JmntL`Fz)@lp^3gI~XV);6= z$}852yXJY)T;XqXqYyPfZd6w+;5yM}t;7rW`}5$AMw6FXwH z!%^cN+jn58g)XzbW{&I=>)QI0|EgtU$tR0N7PWUa0b1L($GUyP&7Ae}M8xuk0Wu>| zO}%SAWzl;_N9jX;#rJIQkzNmQ%;_Q(^%WGx!lUBP`C}N=j=d6ruIQ4w~D2+_}3s??~{sd zwSgP21KCdj&>uT={WmxNZr?ZXuk`TmHOv3c?(zSZU;dkQ_-~)tt5p4aR>ne>LaO8c ui*f(w>;LVxpW6HI|K;KTKU~A9i=`28QvFe{gs#Qjqz!aTw99WgJ^Ek5&8}kr literal 0 HcmV?d00001