From e3da8ce18d3e9001af351e82551825781403ff6e Mon Sep 17 00:00:00 2001 From: Vomitblood Date: Tue, 30 Jul 2024 18:03:06 +0800 Subject: [PATCH] experimentation with tauri api --- bun.lockb | Bin 166973 -> 167318 bytes package.json | 6 +- src-tauri/Cargo.lock | 101 ++++++++++++++++++++++++++++++++++ src-tauri/Cargo.toml | 2 +- src-tauri/src/main.rs | 14 +++-- src-tauri/tauri.conf.json | 13 ++++- src/contexts/ThemeContext.tsx | 2 +- src/pages/index.tsx | 71 +++++++++++++++++++++++- 8 files changed, 195 insertions(+), 14 deletions(-) diff --git a/bun.lockb b/bun.lockb index 542a64510c2013aa7def0c5822527f0099771a4b..635fb280f8a7f3c284d81b91ccb734dc013870e4 100755 GIT binary patch delta 30896 zcmeIbd7RGG|NnoTi;KB1c4oBRREkbID803h zWQ#CluWYF-B_h#+EU8qM=zD*@7ERuIf8Mv-@ALb9|LJw}nCE#u&+{zL=Q-zj&g;5f zUe~(WC7ye}#Egb@8!Za!-uKkRBHd$tJwNr~r*co!AAGbRe^FNPIw@HTD?P1?P4{}_ zdSPa-YPoM2WicL4_Lz}bV@T%%zsHl8m7X?G_+LON_(xC_`DrJAMEZEi_OveI@kAo8 z?a)wY1pIkg5qbz34t>v|i=bif23ol5C^Ez4GMWPFgCYJHs-wDNFAv!54#y{6blqp3te@ zu-s0xDPG-A(FV}>p;Aj8O^R9BQ0eYmgi^~2{zxwtLdAIoD!rQmm2z27F(WHId*rZj z>7IwFyc&ECRLTv7N-r|fvPa%O!jtP+#~4ckRml)@bJB(n6LUs02c&@^P$}3Ihf9Z= zK*j&*Sy>~qV$;XB!P!zS#>w9ekA-sH;?-W+55;|-`x zhi%AZ8m)zjxeKAv%>gy-*?tr%dOM(aA}{FBW3_C*-ifLv_zQeJvBCL?R)*dZBB z#*axKF^JYwJ-fVHzf-SXRkWOXSZ^;{E%QP{kLM;z9)#kcymuYiA1d?UC8*eSuCeW< z*|E;NiL-lr87kgB11$}miaw6b8x0jdbb*SW(sg%VSc%AHHdm&Z&hpj1ePVOFdxM9i zjTw_Z$dlqI4^GP-Gn(#arH{?d9Gv56*~0Ej$#~n`UQlt@W#m$ML#JH*1pU3QcDXT$ zb|2HTM`fj_dpxIgOtG-sZ7uD1wE`->EK4D&WNcPu?0u}WQDaBs3>-Nqy_zHULQ9kX zD;A57zjtVlWZUA7P?<+ZkjohDb7*FE?2ut22Y9BW*m~P-xn5PQT&_Q0w|NK}N|{k< zV=`igrsr%xN4)rsL%(Qk^9vn*LaJ@(u=H^w@QY^@yy*9H=n$y%Wl(zhC_;+oC8yle zP)j~?;Fzq;5xQORa{iDuc7LzvwBlj8R~#-qd-T}!tQ?QK-2S@E{(hB3(LxL@*Kc5Z zwQqadYsaACwF6M;!F|~yM=;u+?DXN|(z86CuE;|@p4_~ojeo(x^Y2! z8#w}%0F~UycHJzfxcy0}l&eC%4C|1Qqh#iLVx0Q+bhhVCs?)LiyV&K*beDE=iD)Eb z9t@Unlr}J9byr*AJc_abJbt@9Z#<4(_a63&J_ePBe?ed99(b9Io1kLAYA3%fR62UL zn{B{V^krV{hY!mou~8Dx#g4+WP=aCJM5t__L!iW{yxvghC=)CzeMtKFcJR`W8x-Q; zrNbTj*z(t);*na&adlp0s5D#(S^|26j^s*#k4cn;Zh^{}Er6DRz5tbijr-d2XW*sa zM5vTYhf2rqgqDHk_p=*l1203>2r3jdyD8md9 zen3`k+Q9T|kLOVYlJOx_DyT}-5QX9CSwqsBcs%af?nXsY;h3~hX#<9(dyY4-qupx` zePoEoQ;YoDplmaFu~0G4mtlA4`skTm)>#e`F$Uy#JbSb%8J0VUV$~@&jB2eJAn}B2 z-cY;wU!XFjo^j};VNQ25M`Vsl%g%P2nMS^tF=4n}Za7p1wC@O8UJP0azT`;TuO2A% z=3Y~{J|4LR@<-Wzath?RdvH%WECUpP$_$y9W&39&R2uG%uf?DN4&N180lvo=djc$j zR+dE>HP#lago?w%$Jql^+M%q0>~xf&!_(-@OX$f|dmJhq$brh*Xyr7}5Gn)v*m%31 z6HxKYA*gs@7qkp?8Dn5A%Czz6u>(hDrB`m?NWwM451Ng=;9x=8!=TlmogLZ;DjRhBgnhGMy6{@G0f-G}V(LlT&+OMN9S zNp00RQ2|v(7eobo6N`8}z4W@MB;Vd^sd_~{o}QL0_gZQnsUDW>W}lmyK&rbX+exac zm5MCp@dPEM(sg3hfO<>k@b_n3z~6@YB7g7IiPZw?Upl8+z+WuH<4M5^kKR;0p(spq zt7wi+tR9eVRuB07j9V*Il-^V=UiHuy$$3mC##s3=0bg;3sijViN%E$a&}(8+ytPW| zOED=bPbbz0sGT~eM!;W|F>gT~Mf9es@xHcjcjOE{)d^i zx1d>6Po}l^bz-f6w@7I{p;n5zLl@Kvs8{sGS^?jejCo6`!k5BmcCu2BlS;6v-K;O( z6!2YwPZaoXgbf7M%9q=zi#)%@Yq~26B-d~r=+stmZdc40MTn9LhR#EZ3 z*Wr@%mB=LDQ8(p{F0WhGNl|y}oH_wt87645o>V7E4b&Im3*hh9lkiC6ih4rb6yMB> z9#5)HMq!V>SU2D;SxL97m!j6|oO*PVb<|R{ea%?H-DHCJA0gF=4k(>kC*J=FTow^^88Q$NN3GRtnTrJ|a|dqcu?%LXalHsN|ggA_GQ7c>Z{9r|K}fWH*0MMk)| z6jl>-PHe!p5Sh%xRv{#0Y<+suumqjhFyMcaosifku8NHJmx{urb|ZD;{axYg$&y+t zUQO4DjRL--$ZpZejgow~u^I+TN-fkE8wJ#_Iz0p^ zR76veH?*p58JFVkQ}xZz6{lgO#{CDtn37xTrbIACdT7wV(F!hP6&Y^zF_R8?1Z8)%;Tm> z{(Ypx`(Ej+w|Wh|rdf(_d<{CJC)G;w?IP96O8JQ(w@6AopbMG@{J+EBPC=z7H;(sr zspau>gu~|8cr{z+vYHTAPO6)vw&bVnv^`ScIoTPx7sSA>D zG&wEwx@t+@(E7S%s}%oj^{=Vogr{{utAKAOvd&hVxl1P|2mDnUaqD4qNjms6T+eIV zH*n(8qOufKcb%AGg{~APb{xUa>QZV;mMok-8^qbK>%>67=cC81q%;0hQhz#Y3Y;u& zVoZFz?<2UbdQzKKAx%A=_K1sFei{iUOM^v6L|6zX@qqxwSRB!bsR4gI1fp+G$1FJU zxspkvmguy86Vn>jQ3rJ3+Uul zNvg9hxHaIi2`6#M z4sP}FvKYYt;@W|5QoBdXH2Rmr*;DLWha>t{i}%K)>Pwx8l&SWtqUu}XeS6><>*V%H zelIQ96|oTfDGtX5Q7hg*0ZzH=hSSmfdsdt8RWNiVF$=wApY6R(&xt&eoj6RM~9I})y` z8x?WE95^=Sx=H@Mr1&SziDz;4W zeMyRKre%^pyt5sbZKE>aBqmtV#5WrbEhgT#q-3Sir;hQyrX<@)Y4woK=@al)@2=PM zN%2o05ZWD=`MnWN#>k^nYs9MyI_Iu{uf^>i&mC5UuafF(SI8Xj^e9|%FdW&^3FEr|Tl>@nynw(pOTG)H^z-U%-C} z{?2QybR+3-xbtc-J8E`CR@fsH7!^v1M>+srHIHmx;YK7BVix>P8N!hic;a?4B_l`EarTXbL z15^A1`nkixjPtF8W7Hcb`7epioIP?xe*bbf zd!k~8Ukz}5D|y}F_$RHhi!axS8FJ{z$q4w{4Rre{3+8D!B2^uh94YY;qd{%qgY4Nw zyOHt!+u@p7JrnQGfD=vP33eZZYXfJ+RR7KCcDdqK>`H@^a*Q{d%`7;HH})ZEFB~C3 z%H108j~;w&{^0)G;kaMvkmUc4R6De+*yYb3;_)yZ4p%P2Ba6w2YlGl!)9Y?;Rg?th zMxw|`QnEz+R=BO1X^*hI%Vxq!*XSrl%!6a&=iWrzd>BqTYCApZK6?o4(?Sn8dyr%b zOo3x+%0Gl`QzjLA3Avm2q$ZWab?Zb z7-`QSJ3^0#6GKC+(OL;7?S)uQI0xs9GA?N_%I55SGy_iRv`2C!oXh~(aT7vdq)NX; zPk+K_n=2-9T#eHOV*>uo$Yl8;<5ugPEQT7+KKhr*))U62s7zfj7R7AaM!eS|-dl8x zZaFT+C!dKB+F0ION!?*B@7S?!2$Rj~1Gx6oXou7qj~pi{5|h?SDUP_g>W6+j{1Iq>mm`-f9rVLdOUhxLI{jFjapOVeLuo+&pa^6 zUq8oon7xAyg_D3q54rK$26v~$F{8XyC+JHPQvAIpT=OY$;(0i!mbFqfUhUTf4+Q)N z9w=O_(L~*HVv2fP=S&Rvw@$PRv+OeB{Us;40Z6r!AJvyJL|d;Ek;gfAPsi2wEjw^{Ov#* z?BV1WrlpXv19^O45C{SC`I}XMAYxsGX>la1Gphje)Vlr~Diu!#e(*Su4n5(}C!x}T znLw^wHzBknctNCG|A~qR{sn}-4CE?IrNLK#&{u(6LZ#sa!f-jXt(7Q>V38&ME0qcs zJ944o;-x_JR{*($7SZb-mJe1vp4C7~6*zPaR4$=X`dwkTgo@reVYmuY(c1vT{~rLk zgo^%FVYq~f`8$N+f?Dlc0?F8AiES#~-3_GTy^g#v75&c~d0{FI?g!$xLr%U>spm@| z`A2|s^gE}05_ZOMs9gUIl?F}&srW3Aihlrd2^9l=7KZC@scpZlAT#MIs10gKZP!t0 zsJ0^)Djulo@Iob7k3XW)taDk{0L{FRCtLq!nBpJLE>VXmW6aiSv^D#?}(O>*Rg zspuy=`6*7mP?5K`<&{0DPDWws*TWyJ7KfH6XsdZTIa)%cyImc5H%BhCsNVHxHOnDA z9qE6fUVY`!uo!8hH`-F5k3;VghD&G>9r|pT?)z9-t2g&JIYK3Qufq!!rww*^pwcr zgV6HO8Bm#;&pP>qsfcDda%isQ>e&cHHpj^jDnsys!wZ$LoJ|EzNI5?<;Vk${8oo=>m`&(1??O`M~8NHXg7z- zvs<#+-3{fRryqZ$fi$R;AK=h|Q0c&6haUnJy`c_2%;85t#gpS2IEjgl!X&6%LdC@o zK}Gb4{L$-7Sa)geG2yPGBA@DLKknoU75NiTX>KM|%$Nh^pXYh`qdPxgPlFeQ;}R;` zuR6R?spU0?7b?j&9Cb1%=A69f6jHo`H&mKS5;+ zya<&;mXFp%&ksf9DJiXAPxZPdZU2^ba)nB3WuOvVVxUsGrbBOnO7Lk26}?7Kxe8N} zH%49odMi}Q-v*Ulb%*lLbB9BF6~VvK{k{lfU&j{TA^a`9+WVYmuYnQ6Ig_#+Cp0coHekn2WN zhNv@;2LG3i|GA!FR3;r54&*9KWlI15d;G`$Gp%NA`hWfS-=4}NFV7uVqSNA+Q!ey;XjYf@2U=%-HTM1W_q^rHtn#>L&<7Jbg!(G4+?y5k zc0^$EsMZ-hnyqh>6xyifwlz7`{oh{NnSb{9*%sT!S=;Z`GFPG1^uHOD1b-&kw zDn>7Ot(WfodZ-S4J*aBxKCk!EA#a50b#OOn{~NvZYPjKV1l7&D04^gxR9DFls=7Ke zzn2bQ5UO{<)z=XVdg*O&lNJP3tlkbc{>@Mw`({uz(m8MT(sdSw>cenxy6(bW`g6GH z3xleuJ^(lMtx%o(R!}w9)86W(6Bd=$XW#0m;&tMpUi!qMP(5!^P$lYduRU zDoM{-+)KA#5~{DjCF>4Ldg%*rizITGE ztIl}``&MEfTz6e}CHBEhUm4`l)B|u+S7G0(pz5iot-`+5q52G5FP*p=`{3rS4yr!- zB;4!*>?;WJ5a*l%>|29A6&ZjufsmL;p>8Gh%SK3SdV?{gM5LQxgPsAU?1F29kBuX;3jPds^NM&-1v>y zw=t+j>YR<(w+Z{;M(etpun%tfrl88!2jHe|#=gx#HC9jCjD1_M5AJ@QxCQ&*=4}b8 z9DNdQ_Iud(UXW)K=e&n~?_(d_B;DbC?1NkMeo*D=i*WfLVBZHpHCZqC0QlJPI@IbL=~SeQ>LE z;sNY~n|C0n3iL_1*$1)jU{I~qa}HwP7uW~4PIveM``{LR5tQdQ;qnh*-=Uz|q!%2* zzQfpeILO1KeGX&am)HmQzV?5KeQ?9S4Dx7q0bIrr>^l-v+jZspmy2?ZH#69{WyVAKWP& zaSHq3CY=hZGkQDR_|w>TI;eioIj6Dj4EDkOsOz4=KDg;;f;>Zi0B-78>^mD&zvyXa zvF``$gZoV<{(yaO^L_}bi~1zo>~q+6E~qZ+Ip?tNN9=>UqC5PEeQ=9@4D#svMY#N* zuzRw`LzE$_Q4H5A5_J40bIr}*!N3N`E}+m*!L^; z!IjhzzhWQUq+f$7RBwkH{~PxG7UcgNOV|fD?@~}j=#y}>FJs^3po-FSE@R*C*aufdclaIq;1>NJRMqrF zxcn>Fcg5QOu3+C)?7M31e^;^Z5A1`xN&El6KDgn3So_}}y=G;o&{{XAkmx@!R%rPIu}EbWabn@(7rf=D(A$q7)Q{j+)5nh>qy&O>BDl@?OCVS+g5f0)v@-=F z$S8@RN=XDAOlC<0;iVAl5<$>JltQpg1d~c3=xnx&V0;89}DWtc)N$48blD3^fs92)2n}QW%2aX1fT+ zha-p$M=;Xlgd?aEf#9$RMw_}32tF6V^aupm=70#MMj}X#L@?G&i$stRh2V?`?l*~1 z2u_G#UKD~Hb5aDeqY-qDM(}`{6OEvK6$DpAFv)bNg5ZJ(7RkiUH5WyYUll>Wst6{V z1yvFBu7)7A8iI#SpK1s~sv}q@f+@yd9l>f546lyhF;gIdj2Hw}Vh~I-nK1~$YarMq zf+tKw4FuanFsTND>1MkK#@9p;TNA<4CZ{HXI<*iS7QswYx0dRqo-vb!XmdcwvnK8) z$SgBW$aChX5MvT+Q}je_iq5M|(K+TM0yWp9-VAx(%(+=Tt$s0e>!@43Uhk?Ab=1pB z-L|S+J=L{{ZXH=skBTg6=C@TL-nwC{M#QSKUbWivYpk>{`6j+!ST(wiDy~E+)cs%A z@pbw5-yna*EN!Bic{|5StyL|hRUysPBT7AKrZ-nl_&T(7YQP4mAv|FJud*7@va3eN zs=Z#T`MxbxNW_2+cBXu$>i)Oc7m{N4a#uBIrylMq{fH}Z&UvZC#<`~8IhB%o^$+{P0MBIWF67UL z6I@=bJ1+`c51}Kxd?<2B1YGj^36aSs&{IXg^{7*qd^eL|N%(5dk;#_;Q%G~=dZs!; z`Ji6Db(3qFBa`p*o_1u9Ba@^bjJFGWo^uF2Ihxef{r=3RRyKu>uFUH)jq-Hv@GRWRUPdfUHBa<(FW+9V~YDXsDiL3{5$#?1e zv%U&DV@d1})I=s9;nAYP-G0-<1**Wn5*9$M1H|ML`=E5A+%3H=`TFh0oLx)qLd>JU;PPH|e zbCvPd1kbA)$(IqycSB>rIB-AUfk*4HuZN(IfGI%c^ylCJI0zm9O-7JofTo~1hzALvB}f9TKne(e z)*uzglO}mUmZ>b;CxEOX`Pz90*a!>zYtUH>Qb-4YJewrXKQ#mrC&tlndG*bBkOL-w2f#geC=Gl~ z`Wx^aI1WyLlfZ18r$TZis2m2jquB!lK^M>!bORD>B#=npkYIBV-6$Z>94r6}!CT-N z@En*1^1x&u&s50Mb`ogjfgiv*@FS2wGe&s^c!pE)yD+VxErC2>vk*uSkpLkN)~p1p zKmk|-)`E>-6W9WFf)Bwi@Dca~>;ZehKC|FORWtV($zQ-Z`cwx<{Hg#dfe26)R09&j zmV>2WF_335UIMQGc^2ehu$As^1KYs{un}wmo58E#b?^qr2gktIvW0w0VgwzKN7b5u z=AZ@m9^6KyA>cG=37B>1NIeh>en55({0NG}hX8p_LjvY1An{P*-y=X`-Y)Pl_yoKO z7J|2E-+Bh_GD=s#Rqz4W0H%PwD18ccgGJy`WX)(uHqwW|K=^d zOQc;1R)bZb0Bn;G&y}}CB5RFU*$ZXkj6o*hU^?_k@C0ZEBos;{Z3(KGi}TgLa%GX$ z1hPP7p*8}wK`f{T8UP8GwLo>?oJTA|3m$rBH79k{08*wdz&fiQ$rnB0>wueq=!ibS zpsE!mgely(D9CdR4NclhszR>YClO1-Qm6FW?X&b(@}zw?U#L{;=85?tlS|6W&X54& zK?~3vNFAv_Hk=e7I|ljvEx$=2S3xQ(q+nGbTa4(4fkImYX(Rxo5$VhzAa%3`k|%Yv zH8HPXquYLGMD0LF&;dvw4T4T!Ah-u~12Px8fS#ZSkf7Zi+yNrNouD@;>hQgweSrk$ zKHzT95A+9VvP$nIF#u!&nX^*y2rwKB10o*+27?SR6iB7_0m&0RDKp05v!ElvXfO(7 zJG`XDcJawWU_7{AR;i3k4vfr_31BkF17vv~1e3r-@PLzk9GVBFfk(l^4t)eV1xWd+ z;4zRVRM}gW>@-7xY|QOJJJ3`%)DtL4C#FMJfj!_D5UW>!W#A|{2)+PsgZIG_Z~%M` zo(22CC*UKn3v31Nfh}Mo*Z|gpHDDcB1ae>J&s;DQv;lL#Z14=20iFg=0m+vRN~feT z4Q2rYo&(Q=*T5^_1uzf14CaG8AZ7jqUIZe4$wsafz8Ao}0rJ6H;7za)h&Nm>h}GhW zdw^Ij6)px#!E&$?yaS}8l3okM(gLs=ybCsiO%B9^AIKnoNMZ-r2DXEp;A5~4dBiQy4^;vl9uz6oTG{W3AmLO?p#geHGmhyfa;(!s0KnnX;2kZ0b*!0Gy;Ul zW?0F@=BudOPvZ|1K@_O!A~Lsncyprin}o$&<9Jlk2)jR$B&{LS>b;0|$YtD0*^=bUWfU zAhN$sMRvdJmA>sUaW@qyyQP20`xy5*$S?GQq%Hm;vBEAcdsBV25TxGr*%j zf};e*Dc}+CAeaP1XEcyu83i2yo+T~8u@aD*9`TMlTqEJ7E(x*{4ss=WUO#^I$Z!MP zO{8V^yKzTiP8J9QQmKrotO&WWlvQ(mU6L<#a0_O|G?~m3flTrTWc^PdQ5i^}l4U4? zWh{_@lmi_P?g!(5RPL?_NlRtoL3h?aL|XDELuHmrBT{!YAa&<~!hx`sjDO(<-QK&E zyA6tkQmNY^nZ;7!!$3SDoe;N92Qo}g0@=G{Xf{#S9Ud8)Cy>eTi05m|`hOfoHn3^X zsi5$9xgB!Xvb&5VkVvPb@dzNUm!Km{w*zPo+_G*2bmxF9(H7`RewD&PciqO2F$0C? zO`pZ;<`PSnkmfoRVxC&8>X~;JtKa;pe_UKc{xvr5E>X=Q=8#_o2fMHF@{-@MMZ?A( z^TQI=JW5VDezG43Pr8)(*d2o^z9qH%Ga z{-&R(x-ai-`pm!yo94}*ti zn>1|B;nEyIp~WE-!cjPI`L_>BocVgnp9<~^g_q>!o+$7CVfLRnp+!u?w^ewQ`wHUr zk9s;bc%!%eQ=_#>ds{V)x{DoJ%v}H4^7q>>TG76u__JAD!zP~l%n}q-zWG}8ju*53 zCqQ1?H~&}=z3i4UIJPmCH|5A|;+CuW>O0eKxr$LsP404xa^E;y|I=5pb`O2KuQg1K zsnxUAEMKmM@O?_^Dts`_+$}_#-Cl1*l>1`f6FUdC-v7glWJ=-Q7Wg9HJS}=F&Ab)V z?!JNek@@$2mRzIwgXlGD*i2k@(CkKmQ9iXo)%TV!Y0j-uEgN1xE6S?!C9O|~?ROV5 zdNYoH{$<3B_nws;llP8lsn(da@6eR{664BOYuvVB$=;`ED!yTJY3jWB0R@^Gz0$Ry zl1W&ps{Y#~EUQwIv4UA@D|=gonkQGPCir&4O4ZbxTH2gnsXE=zC+LXf(e68t_k9!d z@w9b~nV`07ntAG#G4HKX^&De6`CZfg;##K~^UP{hKHAlA-)H?7<2SCxcxQC%VR6dh zkq!l_{(mk#qd3}luGtg zK6PU5+#Zd#bP|^^L+O$+Gk2okzR>!crR`=f-}FcuOM!sO-LJWIy=oeL<8~zkRSh%G ztXEB<+;>~Qa^JYIIalwlLKRIK#)*@2%#roj`>+Z1c_U0SuQyVyGqD?J)_sfg!IeW7 zh2=c>I%RN_G<&y6LxHb{9}qIy%-X;rh>0{iHmD}vCXwdq1{L1ieJl2aFRGROa9}J? z31AkXp4;ds>&u(GUq?LmP{k6j*CdC?B0<;=K5Dl~-$=;%_n7W>z}EBDj5g;sGpO!6 zI=eL5{Bp#OEi$Q^+7+HKY7<>FCTbI1^i(z7Hc8j2+Fw8J?)~N`9nSyjTd$Iy5ehx- zo3t0k^nUr$ls{@&owjT~X68{-l>3V9Q>Cg$lzix>CRS6HLN~Kpn(Av#iC#>k{g%#- z@BH!AmwmtLiC%oeCe4^63r)4n=&d!$ThQB9-QEsw>Dsev=jnRAttX>z)mOEHb_t1*MHyJVPMG`(|R66f&EunIBHVg zQ(;A#d5)RT_b|;WAiR~~uBGT=<+uf+i=*20fAIHz%}AvJwka8QZ*4Q4a>q@pTP!Irph70-IG(cF)}YF*vxrEGQ{_vQ7sPy1|f)!rRt zVK=k8x8Kx%pEcazX4Ce4)hWt-;rPy^wn^rJ*SdPugN~;yt{omzWC3$J?0jQxO}biXklFzGl4efR;! z(f)TI;PhT5Vk_eC2Byna=A!#{>0;mhRH0{)isR^alZH(aXwH4p>~Bk-ZCB*(ai_^4 z$VfkWn&-Ewi2K}k=-xT!o4hj7FXl6ior8z_(%!)b0&n+>O<;mQ(!k?kisZSk^}Tb< z*_=LqRNCTI>&dB0j(oDr!puv5vO>}`JC_fzT-#LEYgDYMx=pq5wu)UfXq)P-c!pu! zb{sI<{O~d4CG(?j3r)!#kax`PUmzPyK)CHD?!2m8mGN=kGyLMCYj4fJQd*)3`>BlF z5i=dtDEB4g&(Eo~zO#PgJPNEBQTWwtLc!~8Xb$aA;nD8f%_FwW^dFwGbRmi|5m~;~ z8k({@@u~aL^z;W$-k;Uy=o@G-&l)!4p0S~QTH4Uy`GZM4!#k2AbC45e7t>E-t^0EL z>hyQn?+BiFOM`&wUyE(WzgIS=MDo2zt#pATT&DnIkAPci%Rj{cg{N zi@jxjv=o?V9C7Fa0VuC!T=0&_$w%I@`oLL?TPG9yAx`UW+I^_%hqORf2E^p;Q(;xf zcHezm&3mkW_p@i^2tfpwC3?;*p_eJ)P6|ehZ=U3hq-^=PrnE5JpRhE>nB-5`zE7LcpIB~q;uFq*jar)3pQ!51|7O_fg8SP015;~XO}TrjpC)Bb zCuf@p-A#oZP3mqc>|yTylbEM=(}5{w0SaD!zaEPZ@IyXAvqaAg`X5~Iu_6x0NBl!|yN3w1UP)Jx#rgy&+P zjoDIuI}yb>bo4Wg_OgLrxz+ano!xhKNh`ZzEA`3Z!2cm_%!7OB*%h;MFEzPu=pUN= z?9|bF4~e4Ozo2;7{DA`JmWX}!PS<6h3g>CGA+QAc=l79$uZj7LvsJvTglzLMqA2%$ z;+0BwxNBg>{+3k8Ib13nYKnZSI!9d}pUSFw47ywg%n!e+%GH=%?n}x`v`U`5M9o;> zxPwJgw7r@CDZwwiy;<`q!S`>1470=PTT>n=>-iZSwnIy_`}XwZGnaWoXMDtmUe>Ng zld0{^`p+x__ltgCQ*uA|F!!1G{VFNSeKY^+nG=uPGXMS=6qDJCQOC^m{kSKlqv`eq z-Ky8owEhN~)X|jvmfB{RxP#oVxi8%RG;ZyRawpU6#I+ioBNfj|bw4Ken0z&0mVL!42sy06ic;Dx<+N|^J)k0` zhKUERRp?|n6aQ)81+UqB9+ zC?V&~q9au6=(cd*Zoeb{u`-|g+VPkt)7|oi`~Le+TAWs0c2=_Esg={Ht9cO@JN|IG z?>gGsrmIjLhb?l>obyjr!IMED8k*DM?U&L+m5B+J8 z?bHaKm2*8Bsa`Oni+Ur}0+W20Iqv@KLCFK>XZ2oLa>phjXRE?#tM7sq>!- zWxAXBOu!<|x%n+T!se?Zsu^o<@=<0d71_RQaYM&hJFWZ65o^bP-~IEpR{~BG%w&7c zRFW;fZ4W!Dc@oc$d%4{cawZjnuGP<@u{&7=QSQ%4e4n=1mptb6PaQp0$tLp$3eDZ$ zpD5Dv{>Q(2F8WtTfhgwwLPf=WPu{xz^_^#&90Kt%^U_I-AqH8-SY}xUM%Z?`v%8Ym zYiC6NO^4}-vl47SS*zHcAklyC3ftS^*R7@-)Zs3)|B&Ube`i)+w~DW=tN&7NuX>3* zPUMpwZ2bOO1TlTTWr5k16>^Z3ny%ENFUuu<^-m~eM7zaNi?jGTFHEMhC43XP#&`#ev%cOZ#G@E_`X+Fq~by&qU=!Rj)3dkKc)Y!>%?>^@)zei-5Yg^?pdy=Slqe`qZ2bu(S18= z+R?DG<8#Y$JHze5wSl&G5SfDao>qfdU0YA9&W=_kDSsos%r}$Is>&wkjBP2q@&BOe zyB1sioMO)2<&3AhiCa~>%lmreYb(WdxgG7J+}~5F+O%!ji3zi6IDv#lFPrXc2i}y1 zX4nsSXP=q!1AE1GQvmUn8D!2Pje2yDeZourdE>GjWt(SEoI5o+f_`XX&QZK-x@mQe zBd+x+^KBt-4YnTkvCj69(e7`l%>1H*dVBZ1k9n2c`OvoKwjrkMPqaG7l>CwT^N6|W zM~=|5%_canFT))Ak*(=}F5cg8l#cMm4l!+h;?tlT+$YE_Fuk?z6DCKwzbX?Kc=e`< z50{I?9Qi{-$Ih5%e^w2WM-JuQf=$f*9hZ%f zHx*lZ&%Iw!Q4{-Pha24OB-)*P#$2HfQSML1M3gT-?2ejc_F0{@&cfDRr)=cG^Qykz zZEBLqJ31*iREjGgb6ynM-wRBXCHu4dOoW7aj zb;&7VT0<+E(Nvo^&J?k=)?ZEyvfzMwl0WVRl&e+?C}VY2ST&JtNI&GNRmHzjz$T|ogHr0NmTQ{`GnhAEl)fZ+sdbA)`NWD+~MuYigt(10uIi~$fODYcdeL6`(%s5s%M#6zo{lI++VMWzK~aP#fG;g zQ-$2jGZo$6w>eqtqf=oOChoDyTE`)`7hR3wO9!+5H$IddkY&5?jxQ$EsUMvn-y1cx z=aKsZJx|o%9rQwyKHas|1hx%Rg~N-rjWLo=4?$ET5b;Y3$q~`S=LMz7MM8!!C}A z{r|v+T}^$CvNw*VVMUrco7lCJvi+f~yJlxTR{`N4FF400e`yA@VYo`ip zqqO%~waom1qH?xsXPb2OowGubIJZY`PEx-O_QkQ!gh~ z_mtyIjA-}A&T8hit^4!o>eg2z+>$eOoU=?(&NBAVIokaZslBhibVs+QhEEo($&D_K z`-*9H{rviOSGW@A3}xMOI`cxz?5uv7b;aA1ITEM1rLyj585leh5KVrre>hQ z!4b(3R!6K)ME*VoqgQr;%41X;&yjZt22)2M%6$#*_r2Uq7qfx)n)S((4(59svB zfogehnR<6|Xmj{{mL62o29QiAB8i zODv<_I)ASC=)Yg_H(VhR?#a+SQakI!y8U)e%FfDkZxQVkXPvR^p$-3Uzo_}QVRak5 zVb}f)C+a^Qj;^!7Q8v#M^G15(A2f@LdBdaDKWJ~Z7eo9P&^OqaeMlXGAQ~N&^cA8}cj7W&!hDa`|h%1z8Q8gq4LC_?IR7rFqR7-c+Qg5r1 zqUNCuMNKutPz_bHqOGwgs*Sev`~A)kX;08~)U}`f6>##!;=7O}E>4 z%$wCSIA_Hip))pHX4a^TETr=R&1TEZNKGC{{ygvq_%SF*`6)AhWa@Zk+oH?ZZ2pkf zFzG#L_XGcfN%w>Lg8#&%?|{|-KNYn4Ge~41Q5AG3C>!c((xaXRpOrZxEd>p=gS;H_ zTY`Fn?kj8X(co#==uw$j12Z#iOT270AMo$VZlXrcQe;uOAEz@S(ThV5#27VJLbT|#V z1U|@?W6Mp=$QYFonL7S=WU%5y@2{L(cU`07UIS%=f%Oc3%bT29iLktl>OuYWj_YS809k3 z(le3=+iXKdj7ovEUS*e3;x6vN62PbD{J&Ot%sbezJ z24~xDpd9Vn*4*fh@=ntp@GSp>S?`=v-gMN>iD+S%otim1BQ@1#`@rOr2ad`Z3AM?? z#^MtTr==0?hJ&*AcR>wDX-r01-JX@GPY!#z4VYiQ)~ z)aFCH2qXs5tq38%qo-Es1Ik{|&#D90K9&Bi{g`%x3ZY}ouLC_Vcc<=EPg zQKPvqY)7Go^1LKt>J)b{tcdEO*UQP>`MA+gSU1Cf!3q>X!q*0QDJ@KSBBOjG3=Nz(q68q^V{B zHz>krZVV_ruL+8%mRkXo24FH}qz*|Pe-Db-kQFm7f~Ucvw;_K9ls$3+a`xDMP|n`% zpx!x1%rPsx0$LILbD$ic0iYE?p8#dW3w;cEB6v=!7*IA82ucThKr4Xu?`t&hJ9>_u zo(HAjMJC+}%64Xg<}l2RM}i)n$Jnq!4bUo}gHlt*48a%{G&I7|piu*}GSWt-9zZ@D z?3rwo+W?*(z5|L4BX=ffdC(Y8I&uv`hYdCW&mqc1%%%f72crKeNXbYZn3`#`#be4a z<3&&^I1I}C^wf+YsZDG)YaN$`A}Y*E9-W*rBGvW|4D5Ip{wdyA<@=8| z`pGJ9ZQGB)VCwlL!k8g38Akuq1!cot=xaLUr}J0?o=9-Sy|auNFcg$i>!8V}k1;Gi z0LlT{VN$Gt%v6*CO;3g~y&$iK{5GI8pfM=d#;s=!{Xc+mU=zk0dgg;_Tmupb_P|S^ zoWn!24F$>LQzNlkq#iLV?gym-2jCeE?l!?F7YoW6V4YzFfoDUvpEEo?Wm4?p`piKa zdJkWlXtO=ZhQaF%zW{4$flmPq0c~s2TA;z;JxqFjlCgE~Ht7;j&i&UxdEzrh_V)R8 zO|SBe9}(}%Jb#ztCK`y5GyLO39jOJl9Fv62)>0-##EEq>FTf>ivJlerGB#UJxj!Jz z@kL20zymhwve6}}9Y{T)%X}SHYB*BeblFCvy6UNNo;I7CDe;s{tmzVO%RGF3FAMP* zEVW>l=q3~KIaB5ZyX?P~m3x8{9L>CJwq|;zVKOnqrL6u!3XYXp zs7s8OiTH#Up)Px|CcVQF>?gcsr?3R!lzCw;@q#Q2b7{LUp_`*#8Cg`*>9`B-Y3UOd zCwj`fS}yUaEX1cxYPDTjOH5HV=OJeWJH_)dueQtnnUCC4J3*9_S{;{oS|-+UIc8&g zTT+GNHd3ASR2z(Itgbd&Cf0R1R)KH9PS-9Y)fh_cx>A3s)pKbnh#~Qim6MffJGC?5 zni|c9IJK&kY_>#jHd!ga>F5hCPWoV2=2|KHp-OUE{RB~27S?w;c2FRj*9BY|IV;p@zfxU#H%!oaV|^j4aZntgi7yb364f#v|xYjILAv!wbD~tkZQ}6 zXd<=dE^Q5BM|V^dvZ%3BbJVukI)Q`BkxtQ77NW#*$lB{A==j~*vXc|4>*&igJWf0( z3!N_ei8|6dHbJX|a7Et)y%9ZRUaZUUHe~IkPi&mlpdPN@tz2zn35Qjqtp=BXJO^9W zeggM6IJ;zzwXSchM1AInu`;oxODvapEnQkMa@ey*xh~`0@(4CVCzX zN8us^>d-fQEdd;B zA~?eT=fN4F5)06=8k|ecXcZ?sq}I-*Ig!O&w9?Wk(q&#dm*YzaTFV)&TX{K4W>*`h zHV~W(MbSYR!S}&&J%NjLYPZ3eK?O~A!^)&m#9XYRDd4zNjd`#cNxFa-;qSEHij{lX zCy1s}>);ZjWMT)GwzP%O^O$VmPNB&{9HiJy~j}CpbPmZ4EiKO9f(V$o_FjRnkK~KB@js+1fTRI(=kZdA-BIB@S zm&|{JuOx6>#d?6y-UY{XV}!PI;OGNvg+70DIkh8VViG-Na>fMvhsilO?DnIrWv4EP zlWmMS1=Vexjy!OU<&2JT+Ipl6MOX*gZIiDU7*sryjW5gQEt$lr{+*HNaQQ zo6TlP_!^2mo_R7UG){|o%;-B0Jxnih=9!~YGJWsX&b9hO996z z=c!NVIf-&wNP;F1s5zqg;&nU@uBF@`9;Z!13V*CRI@Zf=*a=%OvEYPEfqboR+Y8a>e11T<1nAFMX zxD2ixYl{}Lu(!*8Ni9HS+M+YMi<`gSr;nOb1Rmghi3j1_7mZR>Y zRsimP&7dc&or`+j2WLzu1R2Lka@63c-UE|UPxV8plT5KV{`=Wsx*E%zv#flIRzsrdTWs`?(yBp6Ft^zh4{zdSZWJEySA zykwWw;c08yp+6iifbm+AO;4lTyYqwa6y`aTB zV`)VRZ4@}eI<#Tm{*3eQBOO?aH$P(X@!un z!_hvLx=6N$4l!RF2F{qNoILBm8J){KuN32S5?zG-dzj1{%F~U)p)Tznatu4UV%iVn zBunCwLy9XN!_m;G9iZH37pJ4zAY<+78-dmV97~p!McJ`lVA_Gvqp5Zp9IKVpJIFWH zsD{~sU8XZQ&Qas+Xc{=43^-(^c24aOICK7>`?bOPbxNl=?QNtw==vDP`wy|%Faq2q z!0iTyC1P>`Lyd5RmZM@lz~H12UcHMH4bt?pmE+(zRg4%Hl4h7!R#w8u^Z&OAl|6agIqy_0X62_mn}05!)w@vF12e#xZbo zLtn#=YGc9a;iwx@O)a_ha%s-KeyrRxK0$kAoVDPnC9m9e5b zIC_DFR?{h7liKqxZRUj1)y_|l)1FTdZDb*`COvOdMr%Wz+BR^#jJC0z`%knu1P3hx zTwCN-=E<8_E44{3`)?Cvr%4HpxJfh~ClihZIfy5Es%$Q{Gd(r1B()i-r*)a%WGj`4 zR4-k&wkSF22f#lGru%_1hRgB0~iQ+0SHHW`4NWyHrogYc#xI_u>SN4n7jJ%?@%hv z1vDTJph442Ivtb-%mjE?G>3_Dz&uKE{42_?eg`0Z58zRnvcdNO(hmS0q-=N*862gl z2fmWGEj8qSp;WNUl#{ZHR{*GBTLbVQr6He^!9mJ;1!QoLl3!=i^`JaRsc!=rjz1GD zxRE@L(v$^12RI}<03M_)zmp6OQW{c721jX1`9580P&)7xK)nYk=lJUhld{5LfJbS{ z2EPH=l_vlmq*QbYVE$=H@W>?5{LOZ>Wx$LCPMeZ}Ox}hU0?y%OAl_I5GF zT`9#u$_{_R;C#BTSlZ(vd=69yS{idVx`(toW?S zXMpk`Wir#GS*Dzny*?4NGU)4|>`rOsm!=fGY0632DN0~^P&U`hAZ5lplP6{JA0~Yp zlndy63jan~Z-H6vBeUERQ11paInO?rt84pJsBn>;B!y9P=F zZhA04 zKv}=N$#b=^erJ>NnKAO+LAjAW4Ql87dj<(MFaVSal1-Wd$_l9_KNytdhMD|ulOF}j zt{h|1317&P*JnOs+Kf(v=a^wkCP$#YKpuU%!ZF`V|UcqQn+ml^-P%=qtRhJLxhMe*Ouj297T{(G5W zvz5NQV6Y_5ZSudD8UMdrX56cAPv7U(c+czOEjKN2^O?_&dP=X4d}R7ZZV@WigIfnK zXrWuwl4%Qj%ApH=>d8WIyTL^+c8hSCy|||wzt~5f0v92} zKkg~(f9xY?eC)<;wPWCpf{S0`7L8=ylAdzv5+8XLT(oSlw5N<+>LcG?>J~Bb61a=t zl9steGnv1vr<}X2yu7!p6P_GRT;5Z5T<#;6EqCLAhdbbk!S!9?7IAX%ik@=O3LojS z(k6F8UDR>8kj@NbnH_n+2-TL&&^wOc$Y(^kX3)$kA8W72O8{96P6 z*0@CnSqN@7xX86`ktnm*!oRif51dufQ#yke9$+1edhVEuNJ5>)_uyA9)vCPnozL{;h|9>)oQayaTQnT;I>! zqK{ns8T`W|uRa^xcnYIc3ZGwN` zQl;PL@b7c@_qkgPk%i!PgNxkk7HKkjGyK~O|G*8G;alL}7WlWtjR(q(fjbH=eybY~ zc;#({e_P=nxMyXHZSZd!{M+Uhner02i{O&ByYVDz{&x7c9sYqEClkMbe_z1AFWe$q z-T_w(uI~=Fm>?JLfPXvS-%hufD0}aOe>>qHxE!hNf`7Z<-!3lCzPtmj7+l}4++v?c+Clht5dIx>i}&PuaO=PY z9de5gWZEJ4cL@H0TOj?uhJRnfzpve5p)3Tq8(idJH=d2jJ`Dd3!#{9KWcWAm?;H5{ zjT_J09s_q2T>KF?o&d@_0{@P{KX9vLi=*)GDEvF>7Hi}sa2LTP9dnCMWd1SucMSf4 zE0BrD;oouicib)3%RAtT!Sy}i78~T^6Y%c@{5$Cun`G~k@b4u21Giafr{Lcy_;<=J zw#xP3)`1H;?H1c*+G+TA8vcRXA^pCEf8WBtZ{1>-ECjb3T;v(ID3sY};NKbe2X3zn zKMViP!oRa_v0okocNARwIkz|<^UlG)bMOybk!deJiz# z@b4o0yXY2Y<$7@Izy)1$i|=IGCHQv<{(<{J`dx;9m*L-Kx40k+!R-bYdBrU*$?Ple z?+W|_cSVN(2>*VBe?Pj#Re22DQE>5B-Qv2;y9)oV!ar~~WQ%L??;8BO<`%c)C2$wP zC0%!m+cN(;{JReS!2K!{e}aEM!M~r};*Punt{7b38*cHtTzmum-GF~L-Quq7eG~rO zgnu{P_CIaX`_@y^>lPfm<;H`(>uM>j)HlFC;oqO|4_uwuexm1WU*R)* zqQC|?yAa%N;iDo2*l?9CL{BwdKyZqJ2o-LJpuQb~8FmOF)iDZ=QV?GTf<`K@3;j--u8eXMqQ%dA_Ykf2%4#U2Ly8+5ZtA}sS-UQ=;#T-GEWFvs5=xC zQ_#081aWF{SqK)Dg}}!Pf_T;23xZx=5Nx8rr8Er!FAaip4T3gmJq7D12=a#DQI+Nm z!BB4q_EYef@+${{Z#f7imV=;!Dx_dH1(Af0 z6!cVymGIHA5(LXCLC{;>p`e(8zLg>9qZU_&U{PfVe5yduSM{y}L9Z$hY@(pQ(yBt> zRTYBtst_cr^%Sh5AgCGy165iz2!>XJU_S+^%C9;EzSSX^SRH~Ps*r-+6hzj5AWdc0 zfM9$L2u@KjT!s5WP#^P2&G3aFT^*y~C10c9d!8nx|2tmg{2$lsxkge`eP)tGJAP6R?#X%4(3WC6= zCIk~z@0t+wstLg+3UZVd41rfL1nI#LOjheDSVuun2m~*xv=9h}hCr~Nf|r$FC@Wz%he2?Pg6S%}76kQcK`^5h1T)kz3XW0`UmJqgRbFif zrq+hwDh0Dti#npGctg!1k?Io3o2pG+kl8AqWRAK)qEuo%RP9&~RhQL6)qHga0`ZpW zR$sg>&a1Qa#iI`15%ekO7AvHXx&9t%O9SEMXpTD#12hQt5#N>*uhCHa-Mf;)1;ri2i(S2o=NR9U z?ao)9Dv@A(U3u?M~@ zy&0z|d&QLTUcgJd_snC8Ddepu-gM(J)s*pe-fN~T4>Bfs^JpB>Jf@rFcwc9>F0t8O zHD!D-gHMp~m|@Cz6Cuj1`L-2gnrZ|#$9;Ia(IJ?&$iIg*^tl%-YlxfzQv);%GHqO?L;2D zL(j^Xy|!OXS-vT&0hx8X@hwy43)xz;oOL(f4>G)KBu9VV&APSk4`G2>khl4n3;@=d zviYXMK**K@Jl-{BK}hrVBn^1al+{FfD`eEm#|7}mf4Q`M1{w8!AO;x15HNi9iHbi& zDLNkttN}uRg^=OT76z;ZLV!i4tQOLI4k{E_Y|4t+9XQ^7SM7OAq}T_RQBm_mT_4^L z2CiHuc*)5tf_@Q5G-;7z>O8a)HUfi@-|&=k*cbC~yqGQIn3n*q<7ohw6>mcq0(*eHz&?O4v?&6<1`Y#U*3<1+ z@2?^;1K^tG+j6*$#{<0a$9rgR09?m&fVn_EFatObTmUWtmw?Lv*Y-)E7tkB%07L`4 ztJw%>3^W8901-eH4*U~nj8D_>37g?SIM4v#V?lgGXg$h&2E-$s0Pqe4AGV4F7&yk* z)ueYs^_+g_kpaLtIPx9v18^R=09*tv0ha;Bm6Jd>l-_;fb+8Ed7+3<#0%ikzB~T8RZY~mh(qbcwWw7}Na1FQ)`~)!AWI`#QIog1<3zWBG z_+-w<0OJT_1fR(H1o#wK2doD^12zL&fNj7YU@x!_*bf{Kn8ig%90U#l$JBfCMXek@ zjB_0})dLvADg#vkUmysm2{4YW237#e06vcKF7Q6UCq!NVcEa9Wz;1xI4L1W@fUUp> zzyjbSU?Ff8I0t;s+kfdWfRDmO15JTuz$Ks^l$HgqAkCmzABKbj4FNt;bRGB!@C08L zU=U@{{1jkJWDMl@$c%gYfG>dqz+&KIUds`UAKN>;OIo_;?F$PTIZ(z5jDfwnp@2q0JoP(z}t|Y0ve%w2zb6tiVvO41HOR#YBD~~ z0N()-$V7Q-~5n__+wAW}ttAgbh87EsKSAF5pjFuRskw2RX|t3 z{exxbAE^sqBRGB38wmp)2vCQW7q3D;gnw-yvfA&AbbBBX=m>NGIstAV1?UHK1vu-H zfF3}1pd0Ww@C4uwJPGs!JWT#6&^`boZ!h3!;2EGV*Wmyp`UA)Uj%&#$OWbVuK+B^P4FTpw~=80cij#^d+w4=fD6c^ z5wC)N3KRin0eZa#SP7f~jseGkRlpa(a^NU%1dzZtzyV-Cun*V?YzMXhn*oN%O#t_< zjX=&)d@KO+ftkRgz+6B9vw+uu*8uLU%%_1gijBPiya~(!W&>{l9|G?K^MHQZncRJay;3+oG7u7If3Q?cPH*rF#zWZcP%bU zs}6gCf&LHBYrs|D5~B zqx=rQG8WHrSD)JI^zj!Lz0afM-{hQd-9|E}nT;03N_S7@^_Ek{@SpoYx?52~cg z*xPi@>S1==gVOAIE01;9IhIksaUrmWX>pBG%2?13yfv);NS7W?mS=BL5n&lZU98J# z!~b+(9(l?+0-S&B)e&3VQ=OQ&T3rwOM8 z^Oz>hu?n$^xY~x8l&h>ga11D|jOUA%Ay!?=N|#}S)c1EeWpsw~q$RL~fp7r?kAi6n z@KS=86uh)>0j+^H07FDo;4!4FNZbkOM1Yqoyo$5rU6Jkruuf-CH(-^W2^rJVK$Ae{ zaQwR?u@V9r&<)_F;Nw6SvoITZ5_lST2H@pmFW@O)C(85$WnOQ9O8WtQfx*B4U=YB4 zX&`8SfWeV+%Jy^oQ@|txX#gv+LaIrJf(`**1{fR}6kh^f1SSH{11vKd;INDWO$V&t zSQY6J0DH$8u94uWi$OMr@qp3u@8cH^xfS4QBhA@w#hozl&jQr}D&?4RMPz{Is`jFm0LF#!pyPnCz!-qatrfvEl}&=&n)Q>B zW_~UxXE_=v35e9qt>=CqME`T0mTu6p-coKgNDryhGKjO73SR)&BQ%2D`YOO-nhtR9 z;?QhCU2AwaG}9pC-gS-RUkAto!wqaI=oFyzcv%K9K3GeO9x{;7C^qg3ul?5jl6fPAnTI%UL$-1tXCL!e8twO;lf_> zeu-$6xkkhUxUu`vvCkK*+0k*?+KyGxMNv(oqngf_Lzj}|tbhQFpGwU72FTFe9oA|J@lh91lsHW^1>n+CbuJ>#){{4klkkc$Gx;e6z zs=J?v2z#NoYVfIO8TI!;uP6$=^)Gad7an8yXI?mZ+Hd9;Z!$-{fjYR^v;R}wmZAbt z)w3DfTcSh(MCVliiEeW>)u}+#{HIw}Q6$8}kmga1jl%X@kEnMFL=(6Mbusp0ALY4D zbbfFz81CB-lvf+q319o!^6Hy)qJia%>bF5u)-3z~+J8n(_2GI^Im{|yz2UmFhlcO! z^jc9vU0*MPEIZ6$F#G>m)#o!2(fof_kZM3;$QWsedokxU2P22TJMmax#`1<&wttV zxtf?cd&3|n*Z#3N4@U)DY zya`L9ftvq0=9SSgxU(Dt&TjUCdi-<2yNttGqO@UusTA-)x6vy&XIEEIHNbiS_LYlo zz4b(+?VWY+o3TI_6}lO^Q&b$uaP{P7taPKLvgp`mw!_uchnq1DVd{#*?k5_n8!XsT z1$)~4RP8M=FH5<$pbhJl)5kv@zN|*}q>s=B29#}7R{Os~otkO}%8B}F;TEigqkih- z7SY6h$xl_>Dtwz+@6dkkL~zA@10%D|0cws58BDZtm}kF?oby6e?~iKfJ=g>>+Gd8B zscPI-SUpB9*$VxJ(0)8XouOXqU7TGSZF}Eu&vwq47=&2VwqD@-*!F<~_t(3Xft+Sh z`ef;%BDW#ZS#RA=dA4?Z>v9!hb(31qBTqG98(g+tyS*f|*ZaS{{AX>wfbMd>TEPPK zf{pFt$|E6uMqM#?+EYo$)9IVKXc|ulyycmVSyAC zy&aBasIFh2TuzAbhRn8IpX{16Lvkjg90ya^IV7-OsD7U&x6Y1_o~Rcv%)?R?Ycu-< zccTNKN$BNklxb`;G;>IXeSx7iJKUG8xlhqZP zG#BLpFhX}Kr4GN>bbmg|aWzLbwdJc|EO%_IC|)C|sqJAU8{3Te-`sjP{OAt-CjBvg zW*c3VK3vu<+|@6x-h40CCjmK_;v9{gb=1ZkqDj{SIAvi#`lY>p&+^Y*`nIb0tg<1o z-aDQ#snJ^p&a@8E9pTnyvtD`MJ@1?4HG6g9@`T~k`kIR0iIwTYgs$1@*Oc40StO)cJqRkJQ!o!*7$2&;;BVW`Th zh}{q$h)@G|W3r!%FwQ4Df4EuY$ud>P>V4EC7EM{Np#62_n;pvZ8T%u0nnyWl!y{_h zZs9kqRzsYwq4S=~|30@u;5&=#C8r|R+k6KfbFF?dGWG|%h(lRSvRvzZzfWad%kKSW zwe5B>207u#v0hc2`f8Q9H}gngMqK1a<*f#&Z;8gpY_e(lebe^o6+uV9Hy5H_u+NqaUE29THtJBL_Q7)N?eiCwXV2<+?%7{;d-zZOcB$T=-eW723k5_q)qB5) za9nMKRjl^j5dI#}p^ryZ&&FKs3)NPZ>!MCjpY^u;p54Aq>U*>Btf>z}v|3g866FF_ z_?O~X9Ra#nB9Ej+~tqluTd1Eq7I0`f!3Sv)5B|~eEen#Ru=*>UBSEV z)ye}nXIic99zf&PEAOY24Sy%;gVhUlRnbu``1nTjS7M&fH=7u9I@!-TRbUa;NrdWJ zgoyqD%JFo5?whT@_B}92I;J8qIgy=O%9p-O*vL-)$7YP;tI`tMr5D41=h54`Qcmr8c0BeM^G+ z=^$K^D*g~$dZV@RT*=eoA1B)XIv>{Y)J6e{*B!M7|liy)u^8B=bzf zZ0G5(g@2&+()*{n?d_6WaqTXs;ktoCn;%s(zlPas)hSpNV7=vkc>J4FpFMPv1#ueA zf^VuyhvE5r6>%8e76hpQhlQ{3RM}v$xhz9wfc0+ka%;N=1>}zyqg(5YYKpHN)mhe# zQNNRfscPSdq=3H%wu+(w<_3?MN)(IgEu8o=8&{S=@Xxzd{Nxp4=3=O14`J?EFGe3W zv_tW@GjX5kIr^|4=%Ds}gXsQ{c!lXwL&Y3{*^WV08cic=g%z2GI%2)G`qH~TWs+nhT9sosW z6V;g$2<qQ5naDKWn~ryhM?iWhy99o2M$AFwA=G z!rxo53aObVpzdNP_2nrz^v^zuD0TKatQoI@e*~GSB2R)WQJc>|bE)E6yQt^U6@k_p z^S^5Tqv*1?nh`Sf6>`3dTFK7(i#Jvm+JEn&w)}=%9~FHH4FoDTh-D;ZSPrF$%I9}1 zGQ9^(lhIpkATxR^Cct{}e?<57^B=GKT%y_a7_$MY>uGHL)^8+~JNEPJUZ0kGRxi*5 zXKps@Hv}qn-uG0ijQV+IRm6{1)Z3>qU*@PHXu#!hqn|)NQL`?>!tGsE$hYXZ{aw}b z7)tK?9AW#3uCqsD)?v+G?5f^z*nI=6A3Yc!8FA(L2L2ay{rZVb1-0Q@tTXG^5*FPY zKc!cGXn|=OCU%UvjsnfBpI7j$dm;4n%(r-UjYZ7uDD`pUg7MJhaYw)N@4CXwL9iUB z;xSSI)-N_p{&0Kc;~q0w-7l~}JPdiz@lvg$k_Iz1rESkyHTTg(V%mGQt9WHhNpo=03TN6YH0QtexztFyXs zzEp5TebX{4CJ7bs2j&-IW9cCDjM{nu(o%8fryns2R^863%~@>1=2|kXC@~WKVy-?b z2iBbay(Gk`;)~cFFZ3}^8hxr4KmF6IXYf^?zFM$tnQq+gUn|a(tYXs+wfvIN2{g`% z@}}oj-V6vhWawhsK)l3$T7*B(VMDu@{fpgYQpceY%#KricLxNqx|rfP_O^=JLg&5tYM->dq`lX$-0 z+T4v8Yy{Hk4lGSmqcAe80WLL(&F#n9Ce*a6q6>P4-*2d!S4GqRX%u>@>z?-NYWg)1 z^zRjQl*FjgJH53Fnj5{f@9WzCvJF}j*w{5KvrER**gKkEOEJ#>YR0rrzWChiFmpDb z>D3sHiU_~c2fev!C{`B@z@;&-v|yR-kHPA-pJ70N3c87K8mF8$#k@f42U~*e=lXTKb`595 z_|}Cda<+{_)U}&9Blw>+>L>Jm_U{L)r*6TZE^5hbH1MJN;Fg$-@7!>XS=F-%uN(4| z>t|dJTEFSG{N#ooLo*xt!zc6WtN*F3c3R!x`lB|vtz8Woju0zHhqXJ70z6sA6gZP^*i!u4grVDdy}7_H z3L&WhQ%0!BU*L^nq%qiodT-zMPK9?JcJUJmR6~I(Dwzcuqks?CXzv?W8nmy9@0$W4 z;cX55LZE6{-TqDKYUMAORS&s-hldZzLAMo*RQFIfU>o$(vZbS<*N(V0@EyJ1bnS1d z=wA`~(MacCF`W$4@h=KFkeZwwTHYx}W`DIG(g5oxY&tF&x%_CbXIWehu}d(^^h*jq zyK!ycYd`X=YF;dwG`D^Zo%PTdiJbw^&ndeYeo1Utm z7z@l#T`5M>bu)|}n;uc*|6#MP{92IZF&Y1Iec>yNlQ^8Irr!|}-knh`1nwgq&5=BoPtVzRoA4kd4Uv+81RtGAUL3(Sn?7r{x|fZ8S(!q zV%8{Q#$>;eGi&3!-;z*doJ(6f@Lx`&{r<&iw6}U4r`v%KKbbWnAluQmWc@tMUsb|M zfDp#Hz{8D>HqSo(W@Ui&qe{EmZ9Y)&dO{a{6!ZyTTqqcuCBO1+bQeqLA-gS34%>_| zre)OJ(D2J`!lKOK#Nz6uCf-FrHP7eOp1U~zFwQ}7o9j<#weNgf`QH8)8a(ZcPoNGfGauO_pP>U(=cw0J=X(II*u_ zx5ornzi#!^N1x1W;W_(LbKnq*o=|=5@Z0P-Ga#ILPA#?DeMKf}k(E6FIUl*lx ze(6|nuC5`P7h%RX4ZZ=^?*m5E7%iW9BKw+NLf=D;yLal3GWN>&nyZ3`JygW1Xb)K5 zO}Rbn5#B@5R{aNujfXCEKkLNQI+r&mn0{q%Tn70CKK#1aygY4Y{r29vuhzx?ST zSZ&VghfD)RsR!L?dVrlJr$MDw!Cy|4?nf*93mQ(?9v;{J?yOl}eOT7+Z@)HCZ7FN_ zZ8m0-vBzhP`8@WE29s*z{yA^-;+(|#sj+}NH*%-%^Ly%k&Jz6Vr`@la_1k0vleW!H z4)n>tU*J5H*2K{Cd#~Y@_fK5!dq2lR^+DAD>*vnSO|hk~I^3iD{Q_;(>nM#ER_9p%vA>u7e*kKzEZ6`5 diff --git a/package.json b/package.json index cd1c6c3..92c4605 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "tauri": "tauri" }, "dependencies": { "@emotion/cache": "^11.13.1", @@ -14,6 +15,7 @@ "@emotion/server": "^11.11.0", "@emotion/styled": "^11.13.0", "@mui/material": "^5.16.5", + "@tauri-apps/api": "^1.6.0", "next": "14.2.5", "react": "^18", "react-dom": "^18" @@ -27,4 +29,4 @@ "eslint-config-next": "14.2.5", "typescript": "^5" } -} +} \ No newline at end of file diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 90549f0..3d3635f 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1619,6 +1619,17 @@ dependencies = [ "objc_exception", ] +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + [[package]] name = "objc_exception" version = "0.1.2" @@ -2138,6 +2149,30 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +[[package]] +name = "rfd" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" +dependencies = [ + "block", + "dispatch", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "lazy_static", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.37.0", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -2614,6 +2649,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "raw-window-handle", + "rfd", "semver", "serde", "serde_json", @@ -3170,6 +3206,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.92" @@ -3199,6 +3247,16 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webkit2gtk" version = "0.18.2" @@ -3315,6 +3373,19 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" +dependencies = [ + "windows_aarch64_msvc 0.37.0", + "windows_i686_gnu 0.37.0", + "windows_i686_msvc 0.37.0", + "windows_x86_64_gnu 0.37.0", + "windows_x86_64_msvc 0.37.0", +] + [[package]] name = "windows" version = "0.39.0" @@ -3449,6 +3520,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" + [[package]] name = "windows_aarch64_msvc" version = "0.39.0" @@ -3467,6 +3544,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" + [[package]] name = "windows_i686_gnu" version = "0.39.0" @@ -3491,6 +3574,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" + [[package]] name = "windows_i686_msvc" version = "0.39.0" @@ -3509,6 +3598,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" + [[package]] name = "windows_x86_64_gnu" version = "0.39.0" @@ -3539,6 +3634,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" + [[package]] name = "windows_x86_64_msvc" version = "0.39.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 36a4acb..086978a 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -17,7 +17,7 @@ tauri-build = { version = "1.5.3", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.7.0", features = [] } +tauri = { version = "1.7.0", features = [ "dialog-all"] } [features] # this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled. diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index f5c5be2..edc5b4c 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,8 +1,14 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -fn main() { - tauri::Builder::default() - .run(tauri::generate_context!()) - .expect("error while running tauri application"); +#[tauri::command] +fn hello(content: &str) -> String { + format!("Hello {}, what is your name?!", content) +} + +fn main() { + tauri::Builder::default() + .invoke_handler(tauri::generate_handler![hello]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 0a30f53..be17396 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,8 +1,8 @@ { "$schema": "../node_modules/@tauri-apps/cli/schema.json", "build": { - "beforeBuildCommand": "npm run build", - "beforeDevCommand": "npm run dev", + "beforeBuildCommand": "bun run build", + "beforeDevCommand": "bun run dev", "devPath": "http://localhost:3000", "distDir": "../out" }, @@ -12,7 +12,14 @@ }, "tauri": { "allowlist": { - "all": false + "dialog": { + "all": true, + "ask": true, + "confirm": true, + "message": true, + "open": true, + "save": true + } }, "bundle": { "active": true, diff --git a/src/contexts/ThemeContext.tsx b/src/contexts/ThemeContext.tsx index 06a0b73..4f9ab20 100644 --- a/src/contexts/ThemeContext.tsx +++ b/src/contexts/ThemeContext.tsx @@ -64,7 +64,7 @@ export const userPalette = { export const UserThemeProvider: FC = ({ children }) => { // font family settings // TODO: figure out how to bundle fonts in tauri - let fontFamily = "JetBrains Mono"; + let fontFamily = "GoogleSans"; // switch (settings.display.font_family) { // case "sans_serif": // fontFamily = "GoogleSans, sans-serif"; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 36dacf1..e0760c8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,10 +1,75 @@ -import { Box, Button } from "@mui/material"; +import { Box, Button, TextField, Typography } from "@mui/material"; +import { getName } from "@tauri-apps/api/app"; +import { readText, writeText } from "@tauri-apps/api/clipboard"; +import { + ask, + ConfirmDialogOptions, + DialogFilter, + MessageDialogOptions, + open, + OpenDialogOptions, +} from "@tauri-apps/api/dialog"; +import { useState } from "react"; export default function Home() { + const [content, setContent] = useState("Please enter your name"); + + const confirmDialogOptions: ConfirmDialogOptions = { + cancelLabel: "fuck no", + okLabel: "fuck yes", + title: "this is a title", + type: "error", + }; + + const dialogFilter: DialogFilter = { + extensions: ["png", "jpeg"], + name: "this is a name", + }; + + const messageDialogOptions: MessageDialogOptions = { + okLabel: "fuck yes", + title: "this is a title", + type: "warning", + }; + + const openDialogOptions: OpenDialogOptions = { + defaultPath: "/home/vomitblood/Downloads", + directory: false, + filters: [dialogFilter], + multiple: true, + }; + + const bruh = async () => { + const selected = await open(openDialogOptions); + if (Array.isArray(selected)) { + console.log(selected); + } else if (selected === null) { + // user cancelled the selection + console.log(selected); + } else { + // user selected a single file + console.log(selected); + } + }; + + async function handleClick() { + bruh(); + } + return ( -

WhensApp

- + setContent(e.target.value)} + size="small" + variant="outlined" + /> + + + Response: {content} +
); }