GmKY8==Y(nLlZ5A43DHX(y^Tqme~I^ICD-0>06T83xX}$0qF-b;&^==
zkx4b;<)gA;9ke%tXIM^5_@Mv1Mb6
zQo0cLyXgXuFio`tt`&c`T3}}$X?xMd^TBfQcKbID?p3;Vp?rio#&H$wNtoLozs!;gdfm9bToombV%anOcZ}g
ziqs0K0;2JC7Ushq8XJA%KTZ>zV|JO+0Xq#x?xXYW)yW|@S^b!E?F{PYZj(jt-2B$Q
zk9WOR5Mw-7;wU~xzdR^*h)bF8%L-EiROeRr9Wxf0XthU4oBs5Ujz1QiC-k+&?j&cC
zN2Y6o*$|eSpai*nE4a1n*m8u6&mwO{KYzLCi$TIf`|#bXQdW6*5~I!6ly!P%W;icc=#x$hxYdi#X@phl!0Ixtmdf6(LM!rLdPIrkhO
zO8w2JGw$KIA(pnvGf>W54~7YL8)0{uxFV1;cvySas`EZ!exdj1jDI4PfuT9T%iti-
zrkZIFPVX2Rslqfpsh#gmWqW*zr*v@JKr=kIrn3vP$NeM|@8S~fOqiVh1lFM(rR=M2
zgbPnqFz=&cA3o^m1zkp_?f)a|s~@WBp06)(>29REyFwkIV&}B+cz#K@J)E|prR`>Jx!SR)`QbO{;5GoM{=Akz$S18Vug9-7R+)^DYP@qKA
zfO2xez8U?BTcF>rEdM3>4)#H@D42wn2E}39c4srq1BT#_j)&%)ulqwMA9v+h6ueoCoQHD?jVrD*1UVJ
zaU#C>)KGu{#9QLNz0*S5O#v#<5#v-Uwwz8fqxw|gD#_~nM$23WEqN{ximJoorAk?*
zQ5cK(jhMy*N<7$`$F@g?qT3ngcQZ`H%{BvIOc3SBvMg3~-grz_oesPyijt!u_Mb=9c7_;>zsTcyMj!6LK&L!K7p|9G9AVwch(r>8@gEBbWm
z$cz^n{>Sz!M%(A#3;9HzzHm$0ZL&n3iNs{|O{9Tt-tP*KAMA(g|8Bdd1109tk*zF-r0m*V=bs(Yg5bd|SP`@{S*mpWYbyL?@}gkwr4
z4@EG(pFZd0p9a+F3oqQLP-hd9N6b0lUxeJ-(&6rY0=FVdroxiBwM;9T^7y5W4YTGy
zA^jqSF+_o5>a^4V3kv_oDg7^0IUh#+4)jy_Yag|`IP}%mXM#!85eJDN3?l4b4amJ-
z3W80oC1qdQEq;&CGi{ijMkR?6y+&ytuCHM$%`(Ga;zpbN43?744v0Hs-`(R*61r{*
z^TCJXK#jo%(ZZ!@gGY%PH;p>pYYfLRK`xM_CP#BplAS6=SJjjGx+_a4^d_E}KtSB@
zX+9cH|9t99L+vBF)VVDyvfON1O~uO5#ox~PL?e+LO?{HmF}9ErxXWPK8mMKqC#NZc
z89D%{D_l0=rP6b&c)oXO>7P3g{*=lc5^jyzRVQQ3d-QPTXBEM%mXQ$02YDf_m(Oea
zLz*&>1l4`)%&HnX=Jom&0})cXe>3_1O5M{^|J1$^^?}i8r2D_HeGoAeNFvEsB_w4l
zEPw1P*NVM&+_6s4w>1_H7Bs5kK=7lSR&djvk@
zTd{5Gffz|A$ShDWefG
zZ^gd}?ssW;S6tix3&xZMOdL&+(yyo5;dwJxosEF!+R$@>qeRvq6{lS-_*>fUbOdx%
zRNNRn_eyeZ&>&>^c#icdX=fn%4e_VVAB{k`
zvhZ~3W@&}-c1GJXcMTP2?BnwF75SQt3EG+gZZvK24da&>e0!pq_o0wHqx0`M!Srh}
zQf=UHxTGJs?!x5Vo>}AtOr)?FBq@6eCOs+{-`37YzE}8{p4wGBYboTl)$-*fXOqeL
z@rdy{>D+5)f-?Rcz4sihzcC=2lqrjr-#VQTchV?xV-V-1_RgwG0e#i
zt%P$TlO5ouNn>&6ULF_ZcvPd0zs^=c4W;}uFukBNsCXY%#$5)qMZ)0&ljfN^Iwy5P
z>)34jioQ2)Z0$nRh5pORJ=UcWPa*2S(W%g`#EBNBXf*&3Y{M21kMo+)4_!pFxaJ8(PV0!kt
z#l5}rtE#UqGLhv^$Liyz)S;#Ldm1cNzW?0kbcB@r7lhl|Q6bnnq?-G;1}&6~F2!#H
zCaktaMePm_$3};LG?V~`_iY0+NOx`Z@7b@Zra^jWl~+G57h
zEn6Mz64sNuZEd=%-OsTk|FHPjzPOV$PR{K*F@>vny(We2_T8X$nUS7zYj?55+6#
z#}9WOW#Ol_?c@=am0k8{wio~S3CP&$sD?awV9s@E>DJHKEvuhPk^wzW5Pf5KO0=86
zcgZR$Ls4+=$q8O&QA4ALzj3HMdRSD{%dl($eFJ3F`UHTOi%*zRSCc-L7QT#@+WCb_
z)HUn+o!`F*N7eYz?|=C!+mS_aSN=(I=Vfuc%`u3_`-jkwNmY#@qYzmJ5KS*{p_{oO
zmzWeQ+JADrh**FRh!;6uw!GTklcWBK%HP^HJ042#qJ+VK2TTI(w%Ii;jAOy2WZaQW@vNTLH7@hD7!POSeK{lAeBVo%vORbJJb
zG2N7YM3F;;>yeBENNUsCQ88HNBi==evI>kbepu2ju+Nq<@GV1`Wk`rb<23B(T^Coz
z;$Naatv73k+ZP1sMxZE>$)7pHjlb
z^VS4vN6oopRypr6GXeRp#^WQz;$mdT=61Vsw2|Zv4SxvYY-0QN~b`63j`Yu}fg#xW|WjvZR(&pRH};`I4*
zM>`-5{968Pi2Jm9dh
z@a1P`5kla9ym`}~Y}Gpl>%uJtOhOdt3B0R3lm%oU*Fj|~i8~!9rBY3HgE=GEruT?<
zZl5gevd9MV)E|pB%_^%*;96-f$#9EOj>SXOS;Y_Zr(OSbt5o*9mW
zAT@^xXchz;2`$Q9P`pe;VOExU{hXEM*SGWWHtvaP<)Gr6iPb61$~Km)M+uZcaHAEPHh)-tUl!4
z>Q&_Y<=)3OQGj5ub4Fb0`e{4n!0d=j6t5h6Jd;CF4Ni@MqQcpoRC6fikM7q^^HP!v
zuvFa+z(l=IB++g;0a;+8n+ukD*%IJ#bBEpfVmlu`*4+!H9IWCD6j3aAe!vK-FhdIT
zI@TbE=~!=XtMxU}+ZZUlHZ_P>AL$LGu>VrNq1uB#yfUnW8j3gP@@KT3V!eDI{H}P|
zk~af|Br;SIr+;I>_Z~X)qn+}caRb32SGrScHQ_)YI`wEjgJV83Es2jYDLVBxJ%l<`
ze8;ZKEfks5p`59tx4sT`fEjumFOUnK$GTjw?3xJv*?}mM3op~6KnN$I0qg$-RQ~~W
z+KQP|8>D%MUe@jl-Ja#x!c&sg80zB!w-T|#w}QIZy3g1k8w^S1Bv}QeMSCrIODxvN
zRX_(Yih(bRed(33VFpT{SjT>l0yoi9J3nU``1T!T-d`rtrHT|)2t>!he
zi&o>53JKR6KUXMKA%HDdXkoQ_tao8mqQCDUr)Fd@6-3)pHWvJA1`GRM`s&JqPBt)Ml+2i!^&7b($F+uOp0DRFbfU!yl=kEY&A_kWSGMuQQ*@XHhSsv
zw!uh6!O>F(KVOkC1xef^D1_3r^r1S`C!W<~*Q=$0hE`s=O^W>dxx1o#N+k#t7nVi
zOmU*MG=zu#b~Bg*fA}za=anqgrxDRk5#O2-YS%Vk;E=&jBcs@QA;1w|x$C~b47Q_hgL%4EGwy|)zG2m+I
zUfzG|HbO2`*(!nT40KhTx)3*({n-36&*`-%Noo650~;wK3~|dWXJ?qfYM}>q#mx+7
z=*g2P*au0e(P6I;$X(m!!cB>iqVHd?#twzRPxBU%16oUA@#GgTPBLTXRPiq%kipkW
zDYGBm39xB0pDjVoS73p8q`0x{L0``(jMQCI9-*+;@85u$pxs~6?T~ZC9O1Y$7~WD~
z9<-&(%B?E_f!r3!g^SC^B4NvB4_C%x2ys*Ra@+xTyUZ6;zLBlerep
zJR3wbckkTPDRonNB`!()-zun5)}8c46z9Az618uirrU5MIb}RwiCflDyw<=kh}|fj0_Na
zQ{jh)yU?sIDTimwZ>HN7k>GoG*oQKnpFi25xp#7>*oy4_)~ct@zQ*S!{#!*Kp6liR
z%qe8IO4|5seBGH%d7rnf${hJPsjfP~*-6tR%0>nwcooev84NhN9Y5+s_JW%%dzMjL
z1pNJj0vTB7?Su&=?|OaO^-k(P=_cu?Te1Fa;M=O>|W|jm8=O4QmV5sBCk(kwy
z#VNTY3}UZNB&b%@rmXn`{(T-mOl=#XXBOUf9pfUlseKWS1)BGPEPeRFFDH_Cv$v;`
zIDA{NmYl_SccH((ue&T^(?NnZR?aWxS&WP$>^R%2=_yb5r7W#CCX#&P5$6KPnX^;7
zK-174fQDvDfb}Fl)z~*{ERsv8x(9FJBTI&T
zn^v9=iawfZtg%uGxHvb55Ps+3sS$5n>kspAWzLCN*M8O)nysu0B~d>ac7&U`HDWls
zGVYm%wbp*&WZ*)4!
zbP~E%FF*S&InvqgC29K2`pxp+KVPL%C(5jDt_gR(K;B;zeg0)>`oY&;q+twa54JY|
zB(!UzGM&=a#wRsHd&ai$A7sD@N|xTNymR{wzWPr&C$ZU1rw0(xkKGKyXv0v$-&$O@
zl>g6ZfSkIv%RR)bo}
z=H$vPzurj#1%u6PysC!*IU?V@aco07&wkp1E`C5d;Voa=yff$I%%x0psFHgNm~}@U
z_2W0a-T`6NBs@4})N5?jl5(ML$>WR2-kztcGuXjv)(?RVx|&;5A5B6jcD(&w
zwgg~zfIYm$cu=I}Jri)zTH3sNGYH
zw01F7^zwij>O)Cpe3&B6u#04%-2fi=J
z0VKnHSV_NblN_;uB<_~tPMd-XW@H+0bbckPYtv9fXLP{_gC0Xfu~QQvwEAM|7TvD3
z&V^s;hUZPUieeA$t7Pnr-296Q`bZVarP{3l*I0Wa{3GvER&XYqpVA4vh$3*_Eo+C)
zHbD2gl3Ec4Pg{C0|C=5k%JG1udPn;12~Tvd`dwn1>g@uU{|PL3BGHQq)9lc9V
zBo+Mv|LH6P6tlykX)-SVgZVM@@%1SnPWGwWoptc7^l43u1mJSr8pNv`Y#T
z?za|HCcYBv&7}3KW0sbL+noL__7-^xXVu=Y3{lZ+YI_YU9J(tyYYc
zhnbaQ!|br=qKp!jpMv)Wgx8;$F!nWGL~-PT-DbWJBhWSirIar$?6cGLwJOK_7>5?p
zf8OM(95QM9KmQlIDY6@+=*1#PIJWZO5#)>(-67hi0XN7O*VyR!&XL@AC}yXK1un)R
zF^vqUgnK
z!^qWX9{by;L*MEw4#h&*Q^7F`gy;QNNj>waJX5eKi(fzi>kTo-zMTQjI&pyTkjG1F
z&}~}K?$$cd7Iy{hDP?G$3
z*Mi1_>*cWVlR;0$=b+LSqJv*1djXk(C`xk*s>X@wS2?(P%&7tP>U~k~qAq?lO4K(5fyyAz4+#F04^2O5ifhMjrl_j{7&PcW&s(9FMt%x!{GiH&qGwVZ>}wUBbKRPN3B
zT*C+fqEMXgzM&Ar-R9~MNP7iVe*WaRTFTW7_FudG*us;L7+ZM(@!?nd=KGp2=S2f{
z3Rq!hQD#RT!mrgvVXk@0$~t$`IHJhNn@J0H%^M0G@CNh*tqG?1EO05-;!tzn>f(V^
zNedm0Raj;9>g6`XwpRnTj;PCNOpA!%9ggD2*vsv=oZNap>jDkoMW*=Xy*4U0Xf86J
zSQVy@TZJ<@Ib;;i7WvOluU#9g%@X>ZKu#5-#$&6kziIYP<&t=5!lzv7q5o;X)Z9&i
z62|y^Sc6L5=eTh5h=iCn`-L34n?9?v@-nB19lXJW8xCzr@&dzOKzh^$b-Kp_dk_1$
z9)EXit-Vf9oQPh}DO3Xg^4bgd!RDpy-hyKmz=Eopu;uBXxI6?=jSEk7XPS(Qkugv<#r!b0ErC%)oz_h^Bf92Zmxvh}oYRzkk{15cXgYp6
zIltRY2E!~4zxM3~O~=|Bu6snnJ?4qYzCc;)?{vdX+R;w`a!UddnI-1FW*GNgLEnfA
zGe^^5oh@(GJ1lFNaWH8u<>1X$@JYz=-j?JhOOD&f%eRwp&gDfll1B8--IAtiZb}d*
zCRyq^$Zm#@q@XO23wPPSVo&LKW8MP+*96B3h#BV)@$%
z*?Q(YCZb96;pU~Y`-|!6p-SyY0qjx$moo*6HiaKPfyd{ahLxk?G7@|8NL-^fQ{y*R
zkNB-XiS;jor`XCiG>g+!wF(4?L#{q3d&FDpV`4CQYaa5`{oZ@spk~GZL2rST+P^#MZgw&!dm5bNVc_g71J)ed3bYL&kI#iu7a5f
zn?L?1e`GF@&-)~F75nl{!c-s1E;yyf{sf_Kn@T7hef7H4UL1e{czP&0k+%wI&=*oF
zM4^uY!Q_^fBx7GfPBdPK;(1&9>PiO@;~(y)UP(HGfQpMZ{wzY;63fwt-GVeBa%%SZ
z+Bygw@~4G#u|%*9&t-kK+GaSBU-zU)sBl&B!1DU^1<-yeE_`WTh5EURVRv-jKbMYZ
zAjO6n!;5#N?^8|tUKtP|%12>kWPa~W55-UHR$jlVgU98;9&{d1&s|n_Gv8K?sdS;5
z_%ZY<)0-H!VcB)!=GFRAU=j1C72QCt{NnabUfG0I`U5i@4wyGY0FG-*9x@qgv3bG=
zytI9IE%=Pf@VnvZ>asCOs%rr5{&9Zqbj%|rBu-h{ycTl^5vxu7LhtfPp6`5(;$Y~)
z|Cg;=;@0*@W2-*<%uJi$kV5X@0OrkE*sYKdU4C!+YmHYLW8PMZh9zj}Kc
z=?uGyYA~s}|HOcVtP*`DlL4Z?8QHC~DToUna!zb{C$RMw)&|#waOlfW(DfVyopYcH
zA2`)Lf*->TE5-dU29eqnt66bpdlN@KI?*hvRybbt`0%^u0~eOE4Sm1nMmANo*r9wy
z?(Yp&_P#L&`TpyJ&&&i^HXb%MG8(YuWb$$ZszKLfafIu0vwZb8puq-HsozQ*VpF#L
zMNOpSc_c#yRFC8@_t12&YHyL1wui;!P1(5+e)m_oN?>h;P`Co|bdUV2iu`BlSFbN5Pr^f%lK-%{ai0~AKTzzAV+=RQz
zkgCkP=y8R69I3Op*u_r8#s$=t&A0Epi0eTBOe;_5umL3QY9*Qou8XuU;9~2
zOM*IPlZwOf*sH(xT{5tx6H&dQg*Qfxq~mF7NwlGzEbzlBfAvM4b9-mOGS1I$4PO27
zKipcDQ2fj4>!B+FQ7uOu$b={p^>=x6@q#Bw_pPsL^rpwl!1Fp{DCelJwVKjTb5wC_
z6;&n%Q0#@aNFI+p+9Qr0i@Nm)&G}__&j#e>QVe4ftMY+hN~+WV5W2A?W)
zhB)4#mh33^BG-0vAjFV}4UScEFD^22lZkpI{p>l)A`nZR>bY2I>N=Dp;xRufntPtg
zu(HN5A-nA-B6?ez$b#1L=WF&73)hw7{^8)L;pRK&d$><3CBK!RsGm!2J{I;9#OIx`r>1i64uI!P2Z@uJ7M%GS7dM>hv
zIy5z@Ut(dSG4KBa&pHZy*;Fpz(-)z@MlWZ*FMsZf8%S;i1*!4Wpi#$_PC6jRkl26k
z8xq~LE8>T{qyP89hvY!Xq_yV<1628kN^A(Fkh#}e8D4%P2)wK;-~K_K41d5e-)yI>
zh1X{Uk@nj*^!tjN$7bnuT(79}Ki^Yz+jqL$n8|SGcI(?pF~-r+(@15Dhlk6{G?)J7
zR?M5OWI()^8u-)ZyTc+e8T5cVRZ7>f0v1|ft0UVVOG#90=w#^-gzp}8aCCmv977F58Lo2p~7B3I2ezEcDJ_BirrLnM`
zE99Gy-t~!8cXwX?YErKfDPC$gpe=I^#Ds_=LY{@
zG{-n(NJ{pwNLMtXQS=yAg#z0NE*hRVd&p)r!oyRf9u5ubW4XRj+t?R340=li8!jqu
z3{5uXdPpo{0_E^~GbuE5Pq4Au4sG<`+Rgs6FEPY0r{h!gwnwVFA*XMfg1`I8bZ^d0
zBntrGF>;GCA)!CO7IcRhZvefCTB%ABr;1j@R?gChr=Xz>BEo
zd@luN_#{-=QxrXoOFun3*xxEX+_#2k?cL+wWOzJo<-vH}0C{Sk20oT9nBl
zFg)2O?Sox8eyx7l=H*U*(fCIj0geHrY*Zvg5r~22t{T_CFX;UcJthCPZCa%#dLav(h9?eTAaq&
zqbO)XkqhZ8ro#92)jgXoxe~|gOz%`BjNoUT?3~2UZS!HS$$Gi!8J+9cT+nnU8)XO+
z5jKN4GR!~!Smgb@sTQYz!ppo{2Rd>J_Y
zFCHK=nCiCvMXS5JqmpRv>WsH~+tTXxI&s9w9JC*|&%YhggR4QWIQ3Zw)EK3ygDH`9IoXGp%QB?C|A!eor&w+KPFRy3=b0Y@nMinUDFE+
zQV|@U4d;>yyZL?=m1jGmB$e4)4`ppOX*3n)%XcRO0f~UBca`F;8Ie@Aj-|jGjUXSePR@KjXc6
z?5F&svuxs-BO4s=@gF7ln);`OpB9TC0WlijWN6Kwr{;cPnIjoawEeP^wpt8^0TJm$
z^Cx4*eLEmRl&>O8p$>sADPG)otbEBGgaqHxm^NMU0uzieF0*XyuNOl)<}|GCta&%7
zMA5NOx-Q21E#MvKzN}5{oHzQBXw5bC-1Len{Ri1b1H740GZ>LF`42|Ghv;dZPp3CM
z%37Y)D`4b54A|NcpLIZECWWEND_9?%(j9o7*-rwFDTDUPv8%9-Q@JER@TrR^HV1t`
z#fq>J;G}f5z9u;p@e&gC;iou
zK~1=kR^-7SS==?~NIa0?%ZaYm}NCzF}
zIVm8{!F*F4h$rz^lt)9*S84T`YuH+NdO0B{<@-vZygG8N1D__fUs}njpIkZUkCzS$
z;dvt?Xk0JOp>v+8+nep>y8m~T$m@p!hla1tQO*xOxX?hGD)Sdo$ms`<{?ors$E%I<
zs4lTw>vml5^PlAvd2OlckPFY0KQKJF#<;(vo9TwX8Oj=?+~#QZ5jBctKj
z{W`py7WF{+Owy=Q{d18-VV{!4e~?Igl2>FL4_VhS*lL!ot58UZrGO(ugleoUyFisN
z0tpa1uI5-|GrvKxh)wl1&1
z#E>3;@qIlF#IAE~o7fs|(foc&^aV^kS(KdZ1jp4u(5qwJWcQJ1m_$AB&RA77sTwQ)
z4t`x6ZYF@)QRjU4ch^Cp!Nd2z->(7}3<%aG6MC=j+>~4R&>?ZJ6?_!jk!fiY9s3goQH<6*glrpVS>7O0dxNRc>Ofbhc@t_Ead7L
z@h@O5OzzToN6^0T-hU%2T6cV$xq>-+L*wpk-BsAiUlQNIzigWlmz+30z2mFc>rcFm
zB8%lp823=hPh1z;=L#qu(o_$>B_Zh4&e^XQ<{2OEU^$*7PkE%eda$j0Z*t$xx&HM8
z$45~{w05ijASDEM7^{cWb?l4;eSPo&)BSu&@)?OTAi+RaUubg03-=V(`KSCh5r(SP
zwC6Uaq(@C!Bj;_{z%lz^?-Sd&8T=`guEjoLchTnw>Vj{4>uWIiq|Qz4ubgR5P}uoC
zGigVMZgkh^L9YOc^oBsqZ*PDgNVCKAU$B77&%xV55(ogAjE%sp9aVL~wmJMZ%ly`g
zjU^DnZLS!+
zQN2bFq6%HS*m^1&{2-7w8^7|Uko&et}4*Z(xJ!@Y(u0CCo#P-=Z4;4lf%_B8{@x0?jv
z8nZe4Pwv##VVSn{rnZWBJywH%|E^uZaovo`a6g3P&(ss&rhHHI9Jv(C&y4@Z%9ci@
z1Wy!^j_-JUs6G4QxBBx7C)>vnT2w=UMcp?b?G|e|st!1eQ
z`xZ2$tynoL0%Xnb{?JoZ*xX6?jR>$PzuoAd
z>c*FRDrl)=IO{pohb~2@z13DrrWNC5zlg~)bK_m#owaBML2%}v>L0!+jYiM(f}Fn(
zg}}JX^dp?3mjfl6GhjQRZuWfcjl8y%s?>PKr5S2vU~0SlJxt&~76CbwFXN(8kdT}X
zw9ge3FMKO{eNLcm+@<`ju!NAlWHiaMT#uRD&Coq1)`*=46;gZjGV!tHaL1(f{
z*p2DxN_b=FeER3Sxvx=XyN|Ghjph#lktK(05<6lA{vNJKEk0jCP{k0Z1)
zw@2s2kdm%7oEV!x5xrYZCH6THC$-7&%+|eN??4>xdrb
zyb*@HzUHG{SH0L_ft;)GPJpJ_TZKRTM4};z+Trb`mv7Xc=fZU=D#c)j=)>j>)ZXvM
z?D=A1AIsE2fkL@puYCrR>qcz8b(4Stp|sW07j;wLD-jf@<@V!xv5S5#>~NUhXBwT<
zf~X+1zdgvo$E3sOa*fBaP2V6S{+h?DLaC<=@&+&dAeW^feM#*%L{@=TA=*#_m(sVN
zs8(2yU~lsn)5Cv%`_^EmV7epM+_2B4=mEOk$@_F0nsuQdoy^GmQUAB%NJQJI1s9^^
zQ{6k$=Secpy^&LikEBlV$Bv0c8PHxDeK(;g!l%@y;4?4y7ki5Hs(FpI;%P=Tjaf@3
zpyk{wY%hseSI_2);wrop^ak?QLns{oknG;@r@d*$mdr#(0EM!Nts21SOh;;9Z+uF2
zv&IO#nda!2tUORYkAoz-Sr;1Lw?ev+L7`T0$D@r3AzXnnaJ8vJMRL&n`@o)xj=}B+
z^}$a5w{xveDPpzVc&iQYMjhS^-t78L)~^>+FAiAvecxFNetns*U$O2Zq!jyMKhxy}
zW&mlMkJ2F`>Za;ANr~d`i$Rs_}K;f;igw
z75qXV{OYOS=MCTQHhP4!1M&|H%|?aClFhg8p3gNPk0{Ib2R1=2e0e_&P4xwg^tD&DQ%vsD7M!1N
z29j4tu&=ADPguB+oL=(*Z+;(xJqsVm!Z3Kbs-KZ~jo#Hlz7yZTVz7$W`^(U^76e?y
zP-@5SE9^-Kw8+FkOIJG*RgKjoz2;5M+~D)4!%gucRwtL9ZS}v{L6(e{z42&q9G~Jy
z(ErGF!1jY{p=jpu{YJ~amjVXM#-%GWd+b?Kj{melxL&7R(^!zRrFSJD8>d&}(Y*#9ZDa`;p!=@}u
zlk4&DSZ%ShJUcf+EF=r=xg&|YD1?0#|kCJM>(=-TU8hwq_Gq(fdj
zjb%DV7SU?wj4d}VbF}D}FUqH6ucS?SZd;PcCN636UqUl
z%*E@*Af_V^9!_*!TP99bZ<$V3Xqh5!d_2F!H3Ym0tPF+HBYGd83m95AowshXj=g
z9?+|nW+!J5|JhU&7W!YQU^<#quY+p9yaqooYCQqo$O);|sy9=ae_Tx~wSXRh*lu!P
z@g-^d{2!%xyO~-%U8b8%$pk99jQ4WS>0|;yw`?lT{+L6#(;&v6;8Soi^>mYFE|gBac%@hzy}z`R{x^2o*s
zBF6fmiEuz?OVU)Gkn#E*%CCuhaTFFqJ9!I|T1CY~$gla{NTzos^!;@Dsyn;7#GgEl+kmN`vHa}?AS
zmfr)HAdaq~9MHmlpa%Te8mMgHWIEV7?Gqb<6TllKZ$x>p#1%ezTVuYWhdfV
zgUEhO;RM;58Wi~^sui~J%k`BF<#{<_#xATkpi&E3?-Z06`V=fgNYeJjBK3L9Jmwj#
z7n505pgmq*E)i#SL4{48er@=GwX!Zd%T)w^y5qjHqOKHTMb$BTr&tC{-oIV_f%rxt
zCX^iCm
zo>b2+TBxaqn!4bsKy}y0(2V-kT>=Ksup!fB8VU+9$A+ao&mNGTcEvgc?9?AI`$uFh
zhZkNQ`M%t&rCbP_Is>h#vreQ
z{eiuHEcu!q=ej}dII$eow6J_!geY-g9Z;L~u|nOwM*eT<)Zw&EhEHIJqW8#mYfFcF2Q4Ns1S^y?3u{S?9)LOtI|L?WLLn$*XkG9ggoSMY)7c6~+M+HNR|Aa^%Ce5_ch0cwmf5@#;>zqqpC_bVh!UM*1Zp%seOrH2BTl
z8a~WXrg_{pknsR*ThLvmpg8_Jt}B1`%j1@<5J!6)t5s56s@c+!8p{0=K(}Uj5N3
zYJ`R1aCg-l18FcrT#$v)^yAjx3{akFLwE+9h|Qcd1zKvL(+g3(k=d##e(;^5ONp08K)v6C)-)5y
zNIx9PO#ruRSNJL1pqJVK2#WaMZ%~6kICq|^f89t@aSBQBrA5&-lGKX;Ep}`u8hnYwZ9B<8mR`&ou1kOM^PuEwcgB^z
z{$IFXPhD}`?@BYPHyW~|j%KT-B?aTkR?X!~v}&q$w>cQ`-MyDm@QE~aq+%2U*Z@Jc
zM}KJ%3VlIuMe^*q4Fn_Q?NN&Yt=}o!cRsrkU-+*?iPu&}b)V?G6z5l3d?{2>?^C~4
znneI)F5Wk|lqXk#9M5Wg7N+-6`=)aJ47*49
zPl%P0P3Lu`U(CoiY1n0a_5I-Ur-o|$0h`Sqw~K0w%l7eo{04Z;_(%+(ocbRGHb}TA
zl=gW>7V
zV;FP_Umnu5;i*@m)Ua^jIKWWzTQ|fu`FN}xyB+`=e>Skk*4bNHObXaW=R|mY%vz%G;N6;e5QLg|RBeb;!vi-bD=fNvK!AT?SoKH-T8rX`o{x#CBOw4aU*A}gE
z96%(^%#&Nx0G@e1DC&k4-OsEp`+zw6FFn=m+I@N|V-K9jo!xK`i2;R@7n+s=
zYA8-ZDg6qnZU1k{V3_2EUeKEX^LfNOIFubi>%C&_gAj>!VZ9X31)SgAAm~>Pt5?-
zJF5PVdq*SVu*)eB@bLQeqQR%ovt(i+Yle8w0IP1{sBr$~+neGwt}^7_PL&K0iZOYZ
z^FN1}uKR`Q-_zx1Fs5!_wFVMje?Rn|-i6|!`P3{r(>kK4UxpYQ;wv&PAWsN@{To>y
zM*(>ww!us;BbayRe+v`dtk6I2doQqI@UGMvb@Jy0%3QTP%^BSE%o2e38b+l5zXvxC
zinwNNZh9>$USM8z#(-E2NdBPqR1N3}2#?zU-YLHSqLPLG?lzPOo)(z_MC%myOCB|p
zB&n1E6V>(yuu|Xay0Q3^%Qk4y(8l=qViVPn5uE~c)Ep1q9Qzmnzf`fOtt&>NnVDty
zofyy$)lTpFpMaLCwp0KU1>ALPf^qLj8rf)x()xm!O=xiKCLO4d_sM{5eSv|^vt@~q
z5DVA|4|oFcd?1Sc@+P#n!FfgzHIy-kKED<`9PDbAVMT?o9q{@$-2F8F`9an@&3pyc
zt6>Dgxe!BtIX++-ij5keP6X;RFmnLFS>#su1_M%h2PM*(6sb>1E7*vw@p@e^a7_m0sreqyC4@Z?d)tv9{KOJiy@_R9<0pX(To#BphL4)dh9-*(=B?(bk5JQrj#fKxdu
z2L=jqk)iyOEj2yf{UcON`&eP-r(_U{e=xJtE{0RZ|B=(dMPCg+TzTjB-#BX-uKj|8
zMb4KgUU`7rziEqEa=6eL17Gq>PPynaD#nRTJiFj=L^z%-a$4vW>;;XRJ2O-YNxkMj
zSKN9&%Eb0@vy;5_-&_KgmbgV(T9A5!;61AorLC;1S)60_ER25p+RX`G%$9&f)lfsF
zvP*y5gMnm|2zSuJed-{wv@qK8W!C+!{Uv)BUTEwkgRrDQt&CK&Tg`eiNDjMWEFn+a
zeqP4vR~5r7utlZlvhKKHt@tQS4W_C#R3snm(TYB5t+UlRylFbz`ojiC!etSTPOk#O
z;uo@U_Eix7x}{{SX5TqwC$BH(8b-5`gr)=35O8Mzmx1o9Sq_d%SizspE+wfx!WPk?
zn$QEm92tVmcz4v^Vum(qjanhlQ!XhFJ{szVZzb
zRWq8LoPh(^g$fQn792j0S@pI34JI{SfMEKDL)^j@oN@U~Othtsx|3
z{*u)Lmp!{7)&-B4wewv|oGv8dbC3bX9ndgKWG`+RQct-V-1yK24rm>*LLGPC6{R@NefnoZf
z)~2TV`OwfLhg6-SEtI_+mibm5Czs$w_gCNpWk!uiwY7xSJB?$mlB^OO$}61~ig@Zw~e8A-BTI`95Rzmi`3zxJ;B
zEvl|-&kTdW&^-*&jWp7&gmi6OQxO)N
zd?<706WVcBh&m_Pr>A*QVS=2C759H!aE8i!bT{H9{zpoUH`2eRq3dC@p=~`by-B5#
zz=j`nk*O#%$rq=_H4Q_!3gCsh(r38G!tZMl(=M{JZ+5Z8bco~28kFbSmZ;PGn+_7NHLWm9)KJN#w|i(xt2%&{D*uuQv357D
zQ7+VFY~|a{F}Q%{Gg$y~Yav;=xo`(q
zFFpYp6T%2p4crIl!Ib{n;>i<(Bsjr4V#$MLr?YaRG1}UAK3+YYuGHc(8&Y)WpG-jX|i3x?pO?Xoo@?4a$`zA~I_76y%fgq{VL|uVAIvaRF
z6IY2MFl@sK#n^Oa$Mt&CCtoEm$l8t}O*tFj)%c>zTVGLHwNp9TxA{y}s_yh*sj^xF
zgc!1n**f#JKF`LIX7Yd^lNnKPP70&g6*(!r$p9mT2a@HDk|;Y}n-&B=G`b^ssDjDH
z>Q)Cx9sY^Y%HgdNEC1U6#X
zUS)#`|13InEWKA21WMfSL0gh`pka862EPaPg8k$_mw4*0+_=Kx>1VKIrvbKvZ-e>e
zvpz(Dxzujr5}z*hVg29fSM_bHC>fFA|c
zic1_uX-1XK5tPzznF?wzu`qCiQBofHY`@Sk3JsezbGIbRJr58&ME->V&N1OVcNr(-
z_!h)@fUgX%D0bvhC_?(?&o<`F?X_cnKKpVBcC~E0vq(Wbm8K>I6GRf=1~6_R*O2|uR?A#Q+%I*M!Wd+IuU
z`4DrZ{subZ&J~Tr)0tTc=SMjYARz6lq-(5L+V?CAS0OMF%z9S8F&hC_Pz>m
zciPJNp$lN-z|&iqL4$7I&$SYc(c1BYM@u{m9Ei47p$bDo=EL6s2b`%IGf;I|4S>0s
z%j3ijA)o-(<28tji#vU8`gT?Q2vyZ;N(}QzGzw05_s7OHZb$G}i=0|PS7%3P=9pC2
z?^u!nK5r$9dUUCjpty{a;()WB^gW&3u@GT=GsRkN{(V9db!}0JU}%*G$935Ch_9
zm;a8E{v@1mRAVh8vz=$v6MnjE1<%X++Q02wibE@W>_d(8GD$PIWxlepurkMj7;a?5
z)q!3ER<<(j0XAQY5cx8Av;t-o6FdyXh*lY45$Te*5#FVg^Fl%5bh~Swg&LWDkR8-I_;W8_GSr9VwPtwtH!KFK34LIe?-()g*sPVt^R|PGcGuNwnH{5S66B
zNLEQBtkS*PxTlZWaGn&RA}TB^wRqKTSupF`EhRud7dhR)6=G)gk8F)q-czok@&ItSv-uM^$3_rA48l6)Gm34I$C(|5&_0+na
zBjM%J^s@wl%wiViq4k8`fWtE%GqTdooDd!g=MT+0e{fC*Wi8{PCBV9O~fSSRPJSvw9km
z54jDEHu6AnYvf{iju%6kLl)VE@#`gMJrl
z%KG;mmpfpbf_~TStX3IGpSluSTGu0tDSU8q@X%l9-+;U1FBeaMe1m%|vsx5Hlc&v-
zYEyVa;TL$bstvm+$HOh80fL6Ii=B|cPiqtV;Ed^mY=30^s_4&?r8K6-SCivuh>8#|oq;7#bM^mPh_f8G5?>J^2YXx7
zHFd^R>1^|SQ6G(0soIyn?kI{R_Zzc%!
zA*`^h-v9QO(x+}X4Pbt@v=3)Z+@dr<;I-?@$v+e9PC8kn8`{)>c~Qu0;wx4tDOsVJ
zqnTda$J%C0yKJ6%a>j6pKnRr^o^`&J)u~7T#2aNCKf<5=xr6%TmvVB%vl9Ny@YaXG
z@>A5W@u9nq@nIX6du30C{t>(B!ckm~c0P`yv6P*8!y$bN9jda7^)Ykj`6KT8()LxV
zM=iO+T(ea(YWoyKB}?eg`e3oqO-q*L7${9k_9gXxNi^y?!*_(?k#p=A{lxz5$%8-9
z)@Le`t$4hes_Pp0POA5-4TX>(q|1yn96!IfnpP|7n$(X(rpkzQNaVy36cO~m&vP&c
zADx7NI^kS@j}
zXW*HaK4CYeSPVT#@YjMq19`PYL-pX41aZyjNEJimA7dcb_wnAFv29)E?Pm&(sM!k(
z4N^kEGaR&7-+K)yKM(f>QqxCQQ;jv_G4;;r!*usU{x9x4Z;~2)Q{S^DVY<7v|2<8<
zYG3-Ggng014rqhK0#}a#G^N&al^}0<>0!_|H`6W-YQD^-Za2+rYB??$mGAtAk|4Lv
zS?pDWEFGQ)@&4ZP`Tj=MQc4M-hwe~UNN-zOlur39Zk&z=0C))a%CrRlpKlzhl-H#(
zOw8dl=TL}p3s%o+X%Ox6_$x~=`IO4k_-Tt;XEI85?)m-L`E112-+TUm^l-^8zPqHC
z5ofBiQ-w)%IbXKnV6gSuq>>Z|NLrC2ZJ0~QKcj<-rdKz`V{w5-;Sx5PCrE%N-9?|;RdGS!yl1fb
zJ(BYSa1Jl`k^6k>BfWUDk~3k28yG-Voh*9T3_!ZDm_}VV3!5HHgovMEnM-;Tu2q1~
z4OSR;3Ga?1e=3s}r7N-Fj(930-s7VvUy=%J@mGJ)h6cOg;P@L|uA^U^IMMSmw=pXI{*Cn
z@MpAq+Q*48Z(GgBR|JH%@9Cg^#NeR^H
z7;G}D74oefB1YA#rkJkY_Beof$ydf*8DD4dP>(38J9RHDs;RUeY`%CD+bp227Dyy$PKq-TY#
zx`70+l8l43^czmK#guB5-PiSlOoz`4m^k}H96LK3
z5Q47wi)xBA5v`L5Li^6ZlX|)~F4xwQJ!^@5ne1^?aeAA9l+UAh-2Ym^xc871p=-{-R%0M$^G-zrtH>)7lIS&+vUuz0B_OD2Qd
zpfkR5GuVdw8Nt8I8Vxm2$4Bkt?+n+oL8LE{HqIu2#5awLi_OgJe-C=-%PZp`6_i@X
z4{R^VL=_?m4YShPeo%zQ!Bau@eIlhE@BSt9?aROfVAASX9OuZvFYuq)A>O
z_nL$-ekqG}0ZqkP2TQy%v(jxEB?;c!OAtGSEy6$24ha-xCia11m+(Blee>DP(I_-oB^=Mg$xy#aB6
zkUa3L5cFtgC8!B5jZcshTt<4Hs|!&h+J~U=hbX~Q>l?E!7?I%)@^^zvE9k^-8xW^T
zTXoW7s;eZ~`Gang?3Sm?_CTEx-JKU5VWlV`5?pXdd`LGb~w=)xT51&B@{5@cRh4;Xy0jeu1|V0q<((
zEg9ng-&Y12{wh+be|-oA1jEb_Wt8G=1IJ0br1INmf>{-z|GVRV>+%2N|2V(dUA6vc
TfnL`K0hhXpj&julo3Q@?6qYjT
literal 0
HcmV?d00001
diff --git a/app/src/main/res/layout/activity_app_update.xml b/app/src/main/res/layout/activity_app_update.xml
deleted file mode 100644
index 84f64f3038..0000000000
--- a/app/src/main/res/layout/activity_app_update.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/xml/pref_about.xml b/app/src/main/res/xml/pref_about.xml
index 78b51f4518..44ccb4d063 100644
--- a/app/src/main/res/xml/pref_about.xml
+++ b/app/src/main/res/xml/pref_about.xml
@@ -6,14 +6,7 @@
-
-
+ android:persistent="false" />
Date: Wed, 10 Jun 2026 08:19:22 +0000
Subject: [PATCH 2/3] Remove app update checker and add easter egg
Removed AppUpdateRepository's fetchUpdate logic, AppUpdateActivity, and their
associated UI components and preference settings.
Implemented a Konfetti-based easter egg showing random presets (including
a unicorn emoji) that triggers when the app version preference is tapped
8 times.
From 853d5292960fc8a4d15fff1305273330e4167d55 Mon Sep 17 00:00:00 2001
From: Land
Date: Fri, 12 Jun 2026 12:27:20 +0530
Subject: [PATCH 3/3] feat: refine easter egg implementation and update
Konfetti
---
app/build.gradle | 2 +-
.../settings/about/AboutSettingsFragment.kt | 31 ++++++++++++++++---
.../futon/settings/about/Presets.kt | 18 +++++++----
gradle/libs.versions.toml | 2 +-
4 files changed, 40 insertions(+), 13 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 795ab21f70..702336cdac 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -221,7 +221,7 @@ dependencies {
implementation libs.markwon
implementation libs.kizzyrpc
implementation libs.konfetti.xml
-
+ implementation libs.konfetti.core
implementation libs.conscrypt.android
implementation libs.sentry.android
diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/about/AboutSettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/about/AboutSettingsFragment.kt
index e0a29e87c4..487c596e00 100644
--- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/about/AboutSettingsFragment.kt
+++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/about/AboutSettingsFragment.kt
@@ -1,6 +1,7 @@
package io.github.landwarderer.futon.settings.about
import android.os.Bundle
+import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
@@ -17,6 +18,7 @@ import io.github.landwarderer.futon.core.prefs.AppSettings
import io.github.landwarderer.futon.core.ui.BasePreferenceFragment
import nl.dionsegijn.konfetti.core.models.Shape
import nl.dionsegijn.konfetti.xml.KonfettiView
+import nl.dionsegijn.konfetti.xml.image.DrawableImage
import kotlin.random.Random
@AndroidEntryPoint
@@ -34,9 +36,12 @@ class AboutSettingsFragment : BasePreferenceFragment(R.string.about) {
findPreference(AppSettings.KEY_LINK_TELEGRAM)?.isVisible = false
}
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ val list = super.onCreateView(inflater, container, savedInstanceState)
konfettiView = KonfettiView(requireContext()).apply {
layoutParams = FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -46,8 +51,18 @@ class AboutSettingsFragment : BasePreferenceFragment(R.string.about) {
isClickable = false
isFocusable = false
}
+ return FrameLayout(requireContext()).apply {
+ layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ )
+ addView(list)
+ addView(konfettiView)
+ }
+ }
- (view as? ViewGroup)?.addView(konfettiView)
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
}
override fun onDestroyView() {
@@ -94,7 +109,13 @@ class AboutSettingsFragment : BasePreferenceFragment(R.string.about) {
private fun triggerEasterEgg() {
val drawable = ContextCompat.getDrawable(requireContext(), R.drawable.unicorn)
- val drawableShape = drawable?.let { Shape.DrawableShape(it, true) }
+ if (drawable == null) {
+ Snackbar.make(listView, "Failed to load unicorn drawable", Snackbar.LENGTH_SHORT).show()
+ return
+ }
+
+ val coreImage = DrawableImage(drawable, drawable.intrinsicWidth, drawable.intrinsicHeight)
+ val drawableShape = Shape.DrawableShape(coreImage, tint = false, applyAlpha = true)
val presets = listOf(
Presets.festive(drawableShape),
diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/about/Presets.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/about/Presets.kt
index decad05737..cdefe6d8b5 100644
--- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/about/Presets.kt
+++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/about/Presets.kt
@@ -20,10 +20,10 @@ class Presets {
damping = 0.9f,
angle = Angle.TOP,
spread = 45,
- size = listOf(Size.SMALL, Size.LARGE, Size.LARGE),
- shapes = listOf(Shape.Square, Shape.Circle, drawable).filterNotNull(),
+ size = if (drawable != null) listOf(Size(24), Size(32)) else listOf(Size.SMALL, Size.MEDIUM),
+ shapes = if (drawable != null) listOf(drawable) else listOf(Shape.Square, Shape.Circle),
timeToLive = 3000L,
- rotation = Rotation(),
+ rotation = Rotation(multiplier3D = 0f),
colors = listOf(0xfce18a, 0xff726d, 0xf4306d, 0xb48def),
emitter = Emitter(duration = 100, TimeUnit.MILLISECONDS).max(30),
position = Position.Relative(0.5, 1.0)
@@ -59,9 +59,11 @@ class Presets {
maxSpeed = 30f,
damping = 0.9f,
spread = 360,
- shapes = listOf(Shape.Square, Shape.Circle, drawable).filterNotNull(),
+ size = if (drawable != null) listOf(Size(24), Size(32)) else listOf(Size.SMALL, Size.MEDIUM),
+ shapes = if (drawable != null) listOf(drawable) else listOf(Shape.Square, Shape.Circle),
colors = listOf(0xfce18a, 0xff726d, 0xf4306d, 0xb48def),
emitter = Emitter(duration = 100, TimeUnit.MILLISECONDS).max(100),
+ rotation = Rotation(multiplier3D = 0f),
position = Position.Relative(0.5, 0.3)
)
)
@@ -74,9 +76,11 @@ class Presets {
damping = 0.9f,
angle = Angle.RIGHT - 45,
spread = Spread.SMALL,
- shapes = listOf(Shape.Square, Shape.Circle, drawable).filterNotNull(),
+ size = if (drawable != null) listOf(Size(24), Size(32)) else listOf(Size.SMALL, Size.MEDIUM),
+ shapes = if (drawable != null) listOf(drawable) else listOf(Shape.Square, Shape.Circle),
colors = listOf(0xfce18a, 0xff726d, 0xf4306d, 0xb48def),
emitter = Emitter(duration = 5, TimeUnit.SECONDS).perSecond(30),
+ rotation = Rotation(multiplier3D = 0f),
position = Position.Relative(0.0, 0.5)
)
@@ -97,9 +101,11 @@ class Presets {
damping = 0.9f,
angle = Angle.BOTTOM,
spread = Spread.ROUND,
- shapes = listOf(Shape.Square, Shape.Circle, drawable).filterNotNull(),
+ size = if (drawable != null) listOf(Size(24), Size(32)) else listOf(Size.SMALL, Size.MEDIUM),
+ shapes = if (drawable != null) listOf(drawable) else listOf(Shape.Square, Shape.Circle),
colors = listOf(0xfce18a, 0xff726d, 0xf4306d, 0xb48def),
emitter = Emitter(duration = 5, TimeUnit.SECONDS).perSecond(100),
+ rotation = Rotation(multiplier3D = 0f),
position = Position.Relative(0.0, 0.0).between(Position.Relative(1.0, 0.0))
)
)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 2280095ba6..6952a0ffd2 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -26,7 +26,7 @@ junit = "4.13.2"
junitKtx = "1.3.0"
kotlin = "2.2.10"
kizzyRpc = "ad8f2e32eb"
-konfetti = "2.0.4"
+konfetti = "2.0.5"
ksp = "2.3.2"
leakcanary = "3.0-alpha-8"
lifecycle = "2.9.4"