From 01ddd1ab2bc47ba4e000a7a5853de14ebb49546d Mon Sep 17 00:00:00 2001 From: Choco Ham <77619465+banma1234@users.noreply.github.com> Date: Sun, 5 Nov 2023 10:16:29 +0900 Subject: [PATCH] Add README and thumbnail on example 'simultaneous-cursors' (#683) --- examples/simultaneous-cursors/README.md | 61 ++++++++++++++++++ .../assets => public}/icons/icon_cursor.svg | 0 .../assets => public}/icons/icon_heart.svg | 0 .../{src/assets => public}/icons/icon_pen.svg | 0 .../assets => public}/icons/icon_thumbs.svg | 0 .../src/components/Cursor.jsx | 2 +- .../src/components/CursorSelections.jsx | 2 +- .../src/components/SingleAnimation.jsx | 2 +- examples/simultaneous-cursors/thumbnail.jpg | Bin 0 -> 19156 bytes examples/simultaneous-cursors/vite.config.js | 1 + 10 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 examples/simultaneous-cursors/README.md rename examples/simultaneous-cursors/{src/assets => public}/icons/icon_cursor.svg (100%) rename examples/simultaneous-cursors/{src/assets => public}/icons/icon_heart.svg (100%) rename examples/simultaneous-cursors/{src/assets => public}/icons/icon_pen.svg (100%) rename examples/simultaneous-cursors/{src/assets => public}/icons/icon_thumbs.svg (100%) create mode 100644 examples/simultaneous-cursors/thumbnail.jpg diff --git a/examples/simultaneous-cursors/README.md b/examples/simultaneous-cursors/README.md new file mode 100644 index 000000000..c07d50a5a --- /dev/null +++ b/examples/simultaneous-cursors/README.md @@ -0,0 +1,61 @@ +# Yorkie Simultaneous-Cursors Example + +
+ + + +
+ + + +## How to run demo + +### With Yorkie Dashboard + +Install dependencies + +```bash +$ npm install +``` + +Create an account on [Yorkie Dashboard](https://yorkie.dev/dashboard) +Create a new project and copy your public key from the dashboard +Update the `.env` file like so: + +``` +VITE_YORKIE_API_ADDR='https://api.yorkie.dev' +VITE_YORKIE_API_KEY='your_key_xxxx' +``` + +Start demo project + +```bash +$ npm run dev +``` + +### With local Yorkie server + +Install dependencies + +```bash +$ npm install +``` + +At project root, run below command to start Yorkie and Envoy proxy. + +```bash +$ docker-compose -f docker/docker-compose.yml up --build -d +``` + +Update the `.env` file like so: + +``` +VITE_YORKIE_API_ADDR='http://localhost:8080' +VITE_YORKIE_API_KEY='' +``` + +Start demo project + +```bash +$ npm run dev +``` diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg b/examples/simultaneous-cursors/public/icons/icon_cursor.svg similarity index 100% rename from examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg rename to examples/simultaneous-cursors/public/icons/icon_cursor.svg diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_heart.svg b/examples/simultaneous-cursors/public/icons/icon_heart.svg similarity index 100% rename from examples/simultaneous-cursors/src/assets/icons/icon_heart.svg rename to examples/simultaneous-cursors/public/icons/icon_heart.svg diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_pen.svg b/examples/simultaneous-cursors/public/icons/icon_pen.svg similarity index 100% rename from examples/simultaneous-cursors/src/assets/icons/icon_pen.svg rename to examples/simultaneous-cursors/public/icons/icon_pen.svg diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg b/examples/simultaneous-cursors/public/icons/icon_thumbs.svg similarity index 100% rename from examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg rename to examples/simultaneous-cursors/public/icons/icon_thumbs.svg diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index 080da8f3c..379c24eca 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -5,7 +5,7 @@ const Cursor = ({ selectedCursorShape, x, y, pointerDown }) => { return ( <> diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx index cbaa933f0..9345ef51b 100644 --- a/examples/simultaneous-cursors/src/components/CursorSelections.jsx +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -20,7 +20,7 @@ const CursorSelections = ({ handleCursorShapeSelect, clientsLength }) => { ? 'cursor-shape-selected' : 'cursor-shape-not-selected' }`} - src={`src/assets/icons/icon_${shape}.svg`} + src={`./icons/icon_${shape}.svg`} /> ))} diff --git a/examples/simultaneous-cursors/src/components/SingleAnimation.jsx b/examples/simultaneous-cursors/src/components/SingleAnimation.jsx index 79d139895..7a3c5bfb1 100644 --- a/examples/simultaneous-cursors/src/components/SingleAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/SingleAnimation.jsx @@ -16,7 +16,7 @@ export default function SingleAnimation({ >jL4#`0?_4{3s+n>Tj^5_GRO|5f=J z0B++zOl8{tfu+Ey<+G|O5nYQmM3PU-;LuERE_!JC^PO+F^k!7fxV2QMhoWhmoN}&j zkeBPvaJ@0x>WylYUrG8-DpU;Me_22x6wVO0IquIZ*HF*lh~bFl91?t*cZ!Cl<BRnA!_Ij2X*B1%uB?P*b$qTY-w-W{&IZ?@AtBCN%mMf3v_5`yLvp^LU6C5# zZmMbXJ{}{^a}X(Mk?#L~Q1R0GVzl@Y4iF*kM<6o5dQDq#IHDhC1XY-j$W)y*=LIIq zcnQKRBF(Wc-Gz!uS19_)>ZwB 4*^ zhFX1kb3JKhs>Xclj^Ye`8k$+Xn7&ElBNr3B_PmJuQ~^dh8xO@Yz<)2ko+K3o=OUik z8@oaDe>p!U|6)T0uNwS5{vcucf#17W-w+DctLo(eYZSKT2y|i{ZcQ=?57nZNAS!d| z(jyoj;@YfgY+6SXzB=#OzCXXkVDF3ght6WlTnB8gkg1p+P%c9zc)vV$yi0Td5ka!S zCJY+m%hItCzrxo)rHm!JbN@*(TA6Z#{XWFwk%c>!OUu-={uF*{0IfWf3w||rPV$3l z0$gk^-p}v|Bm&oZ-70lErQHuvcaiJki{K=4d0y0e;j6_L8l*d30Yv1$_!A+s3L7h` zEmM%W rlTU{}3{vVV%UnWP};C!xUdH$DPIzIR6omg44^ zjzDi@>3rbWCF0ku4b+ChhS#M|O={rj1MBg9tx#MLwidMvqo1?~Bw9Dwg%TWae{W+L zD+Nf45_|xx<646&-n=GC;gS+fi=;I!jr(&x$uVOV9>d 6{px@b8=P^l`6Q?*(U~Gir!Mw$g$>?pDOB(7fN_xk$D7? z5DZkcOw-tbZ*JK9xV}@K^OaU3L$+J(7|_muYUtQDz?KlVt1M@aKvX`dy%R(T^>p{% zW3nDaC$w)`f}|Tya_?_Fbc!e~m q7&-`+uK`p+5;_?IpN{ z9t-fIpUfw)CHW9KajsUEb^~UO<}jC|YPOAEy`O^*2a*yPnijTc0--~qnvG;IMLvMi zIt{L{-UYLeq4$QXCT`!jojidz5H}51J2M%h`1T^fiB&D|F)E<6bR<~KcnuKHi@UMI zajMGh16h2|lpXk=up`i5V589FmUBv%-Okdd_&NsE_rzad`bh+Fp3cev%x-StULHA# z^szORiI(NNVX<#jOYSHP$b6y25$s{CpL87I9yYBO=ba#!l+rIO_&{c?jE>J#jI{$K z`w*f@X;%>Ll>^t=-iiH{OL9m~iUo7seaQ8((?Tj)*&w$Yl+e}i?aZqTxu^D;XJ;BO zN;kNt5*A+^;(KA;AtR&N@5V+}AD?UdrE5|NuQ07i-3l%~n9$zyjG@L2Z*qH)H64u~ z_&UeVaan>Evi>ZnX+<6fXYtK}i5~q_p2WGtjYsoa@iScXb8d&IC^RwxcSfR~n3tP@ z9=_%m8_W~kJ6oNg6Ju=`Wgb^F|C9y9$LrEJ7xKwPYD(Jt!H$i6!;D1(w9q`H&uQe2 zqJ!rHT7K7r@76--E>Fypic9+T?`2*kx6ZQC-9u$UzfY^t-eJ$fbx52WNfdSJGjfxE z0ZjE;TTMrQM5uCI{Rl?&$xF2~;mhsQYC})sI0(1IPTjCCdVh$Zv$jxtIO8DS5bLm6 z&eu2rYM?){V}3ch6fQ^L6m_sK5f!Ve2y>Nt60`X%$>a0q#Vem*>U$&*%-?G%7Z?0A z=P@>Fv&~x^nC`Xd+mC5P%JqhPE>?qtUu@XFH!_h^KLLG^I1#nL{YB;`^IN?j-%wt- z51D5UN ^py*@m)W#wJ^%}l~Z>3 Yz%|KOG#oFm5~IciZR{`v6|*U?59gh{h>x- z;!0~hKIRfkx4lz#&EYserZLkJ;M#<(U$A*dB*aAnaSE c?nv(71Ysq3H90!m zT)Npjr>xSCZdGdL74jM78DE{a!W|Pqpv&4a*ZGUy_Woeq(WCO}6KO2*4*e0%UEz%% zq-KA8gK|4`;0VM?=OrWCM8U+(;*dbjb`!wl;+67vJlQ;;VdG|_mHAeOwQTovUUO&c z(ktBJuMc-nmokEN<;_Bp-GY2qN7gs|Jd86w-N%*|pi}_o$2gjXM-I{Ws2hkTW4JW| zf@h?&d;pgG+OXzLf`|KBYvy^91@idedd&&@8~TpP5}!K9 UoMY1h0};;dzTVKGYqzL_v`Zd&w}J`mbbWcML7!9SKFZx+UwkK z1QH*jv#B3}96b{0$X%g!S{?2&m@~8sLe%U3wYC>cghpWi>)($gvKi^35Vt^5-l<7T zOIg|HZh?75K;>CH!t~A>a(@*wDzTNU$O=k&y;-23vL>e?Cp7ZAKDYYX+R#0eMFxVs z=+Gu34(VT2WxUlpW3rOv;ixw$c4InA*ZmGvn> GLeZ zN;7AT3Iihc?|*Fb5W0YFn=p~x^55R)1L>lKu4E@UxKKQ(VuO&`q9ags&4#+~Ec6Xs zjNCfI2H%i1BPF&TfubvaPoE(N`+D)Nl2&YtKc7|Q6n*H|lYB=cdvZ=S4L(UIlqvR_ z_6ZDDd56rYuY@;#{)|$Z@7L1HasQ0lyx<|XZ=f;p(L){$d42?PL*jkD 100)0MWUZH;y&B&Z9a^OiV|E%8c#LnGE_XrV8@&Yn0kn)!#D^N8u@1CgcSMX zEGqgdej7UKLbA^cR|wk~Z>#L^8yz|kT>a;3YR|p5- Vk W{2vri$%3$db^J(YsdkDIfp6Qr#7dnhWx3=b}F!G>PSA0 X9?MT*gi4K5*vJd<6WuJwVSNPzu((GZ9dkAAxGWn1%OK#p17UFl>mqqe>! z=0imq5^f$mk9wKOGP)~x93N5s#R_V#FTk*vHm&NDFz&33U$Mm(uNlJ=m&!{2%v6py z_DPS{=P4W }J-UyB67tetC$y(jk z^~4Qi?4uas$NPmVV_Yh<@|T4dE_vRg&4 FagaV0{10KI40D z_&=568m$iQ?_~j|$Tj$RS^-9osMnGXCMJ +{Wv2IgW@()r5$p&?%KE_Au;Yy0~aSbftwDyF~d5F1l3c1Bi~;CU1-M3X4} z480Y}O*NRW-JOX#0`Y~41(dbD_;>^ofa{F`ZVx)*8^et%Yj)Rcg(L=H)zd|6r$Hzo zk^)uOkm$U$+?s(1*OH_UAlb2Ca{a1dsqNhU8%^ImPF9BxkkK6Ls#EY9@I`wv>#?$* zAaM2rbBE0>G^R8dKVfq?Q9Sl6vA(2XW*G(@#Rs{S|KaTLBA@U7&KW;biEBYcS{%yP z&1xXt+^z{jZ?U?g9-#u jA|jfSX3B!xDkvY8c?o;(|AmIUQ{+Lya!FQ58;`poM+K0f!7;ZH*&Q#H$S z!n-it!_t!ru`%IQ7Ep;Ihv?OYGdM1+h$~b8!&pMLZ9OzkYnYokJ>H$aY7??>OJBib z(JWE8aFsP#b`}XjG*v=Cnp^}g&eEBfP?dmUfDXQnrN0pz=p)b>^z!SfkEKgDNaF{0 zmY1BxHA`{9%+qIHAD-9IQNQN1_jX`~?6L3Ja6Klyk<E*RQu<3J%Th#Hs*uei<%L zTHbIWA?HP=8|Hsuj7a_8Yrvf7H7f-V{^q`Bm@UjXd4!`pN$Mm_kV8CKk}z}rI0KTI zdKx*ayhY`Syg^Ifoq%wW^S?Xr)n!ujhtV3pBI>?Q8G0)>)y5Fc pe2W6I$LujR>0QasC}|^EVPa>@C~vFxEX*}3WY>zMiz%)1*YC$B z((3UZaD2n|a8z)zS;9&oe6Ru`zK%&0r$s`Za7gWO&^}-^h{Y{*Nm67C1~PX$K&czW zJvlK6wVg=2^eyo1P1g5A;*$5zKf7`R6sWKPXy)VIWM7IGeNgK(xzV3+1Om(%j!=n! zE3GSjndgWCQ4vXj*T1d^cP3?A4290zJ$WOpTUPd}Jm_#VrqI}|pxA)&W11ce-Nps4 zO1J5L%marP+ja*d(mf;FXVCrB)08>A4O`MKU3NSmpD@ mrn#4~~OZO)Xw>&sM<7U4= zh TA` _3RTF9TnuS+rIa2EJ*+}c5dEP(BVfhQ_8H yGsmE$ z<>n2~CBo_+Cy#xH!~#kwR`PcBz|C(t*%eoqd}U6pkBurlc&;NQ>`KT!0=0m{gXCW? z`J1igF5ueaW{LqN$_IpA)~H-$Rg!A6*11tlOA?Zh_K~=1j%>mTkj7#YO6Rst>X)#4 zxVT=3lkY9!v#Y0md8>asXl#Q5@XklFEudGy Uo0e93Yg&Cx6U}b*P-8{l@~xUT zKaQ7ry^x5wMZ9X;u74|j|67YB_G5Ob$|tB5)`>1pZ=5mD`Dxq_P~Xk^5SITHrM>tb zGW!;K@(VzAqyfcxlO#+v4AEF;a~_&F0zJ_MV#E9qzi*%838de+SleUC9_sM^FpS=J zUANszGC@7-1FON=7{MoImmj=tI{skz!5@@!VMwa4m*fN@*0EvP_gVw&cM0xz=(B)C zI!82_p=iyfw=^+|u1xlstBFFJmaHP#tDu6)sMlVbH<^9LqvAfBD^}loaDhpNmth@Q zy-(#zoC9wx&m~5xTx-Q%CWj!1aj#}+F5eH6-GmatPjfM_UmEC)dENO2^`nm6(NW$O zVn1;I2eFtcr@We)K3U~p^VG7+qk7*Bl`^xnHc4*Sa|Cb|fJ@R+As(`j#2~4d&`YqH z(~kzk2fWJQh6ITbz~+pLE#Hz~OylvEXu4ONbS1m!LJ NTg7=jDd)sZBTb0*QaDwh_8NV;5o@|p!XWRCMJ?R9hdSCid> zQ4dC>Tt}B>=&_f@RiG1N?VMx@WYY|o-oXz6?V=*mz2R4h@1g5$ua*sz>V8&Fyf0%E zWY5ceZk0B(bopUZ6a@Z2C?e-ny2sL_T7u@Q zzN_Jqv2XGZ&`r3i-+_eu$C{d{nb zjElS7_PVRnMp^?o&Q6po;wLY#m-iirZ#X0oXr4{z23Rd2UJU(Av+YKy)VWWg(898o zTO@mARBn>ohge<4%VJ-YXNkV<0Z+}{`Mk9T^EL#~gwaB|n#K(*-K#+(u_j-zIsKCT zM+cbmOj_Fdb7a;2dfO~w0zB)9BQ6tEUV9KAEaYScj>S){g`MY<^{4b*7xY-WR<&iN z&yBTfaRVOSQ~D`uSSG)yA{j~1g SCcV7z~b^+qKUuHhY(mC^LarJDkuaC;&EQ6BCvPP@wn7VnoD! zKyL~so`N%uwl~am_iwN<6xelEV4^vOXo=kc>7hTl)h67_tUjfzBC7JKJPO|tXoZbL zB4Qp9rR*hOO-9Y;rWj=5-S#a=EBm@;g4n@C#!i~rxVZ0*IbY7F&pPJRJ9hi@Z3F1& z4>2wMf@^NUWt!FWjftAP39WO0>I*wT6~+Agi+QeN3`o-26bpAn_fWY<1=gNJxe0$@ zXnyeT_wn!_lVG*Ge&K?B22->g$ZYfsD=?)0SK^%Bcl%%{`IQ?G-+VnL6w)3am_K9P zQD}$$+%VB9FS6mF!Xz$Ht^47eBV!Dp5#Cb@rFRyNKwSuCI^)kegD&IeQ`=DbjDg{n zf!)E{UNQg?EI?o{hgM8yqdp>?C?<46c;IZAOY=9Yhc-*+%NyLNjex7C_iEvpCb}bC zJjB??L5!qL=fIN%flN+33D?Sk(Idq+`$2gnx2awLVC(@{BdM0q%i`rpUXP-W_a!SO zU%k*%{NZeYeFr3P;EtlHf&8bL1LZm_MfUK#{n`=$#rIHfL(U|*e@>5jx?#4X8Ap~% zkHa~Oh0LS40BbBQPriV(TK`Fsawm0Kkk_V{oy)^&@s+sgg-%0$c6+PR=k DZ-$t3<#LbbRMO(F>?k6gk1RsH<2B9IlT52>DZZ- r65WPdqpIr6~5p-(d*wQ;m$EM){` zxaNT>TT00Nl%uknP(0#_EUm(MsA%bsiveBukZeyv&`+lSl{hjn8^eS!xAb##xQSHf zcm%uF55>C0{lHpOyBb@~61Y0<`l1T3q5(2vbEua}kW*Gayyenf Z;9RzL(&>N#LnJ1MUCKq9gLZ)P#%b4S@;y(l(|prt&dj40Qwv9a&* z)OX@Sy~jnLwR9rt8K%h^Hq@EUZ?nXmxR*Qs%Q8^E7j3Zi>J#e$yyo@gUzeV@4;4zm zep5$)^v}znU!RtIztNl86mGhfc(ITNXWCZ07jl!X7jL`>%~5ZnaXcLxo+VW&zHp3c zG0fl|N7epuAN+i=_JM_~bau?jRaWWjm;bbOF 173=ob}ck$8nzXC93x$pbGb~R9m*>{sIXZgR~q@@ z46BrznuQppb^~d%A=?KJCYszMnM5yQE622&*uPx8^>C)HJfZH)S<5bO#9nt(ySmK& zBzjbKs&c%$Zvysf_X@Ho*k!lFb;4->0MT+55>CH@3)}5AJ|l-6sFl^f`_$l3=9>_s z;KWE@uZ^h_gTyb|KHQxT&Te$}U3FlBtalTlsk$y7UPM2BUeqTnCAe6(oEO5B_e(zg zYtvJtAIqpBnccE8!0}E0w`qI?Oi=fe* IU!j18b&2P?|A`z@bk$6S1A zs>2KVzqm0RlvC^wP4|6~5i?c&37VSI=SDHA%&&L(hLqOWSV~nUA5RNr5SIJH^xkUR zxs|Qt*bQ3taSDin%%baSS_8vJ=(vIaE!TIp_=(>Gcy!j=hl0xjr}h7wc!ZR*K2|tU zTP<3Ro5cX8-Q7}Kf@THvIT_(3v5ESMzZ80LNbcu{%?*N`#KObpTSB0+#yc`e`z#Q4 zAQ6IiB >*(itTbAot zKq<}MOIik;W8QX6ryN7liuEWkVP!10|H*$b(~qZXnXHex2}DI%$qp?|qGyJxJmm2j z*RL9&6Z!_H72kwO4_`PZ`sxNa+|_dRg`?U~ob%>-8MS{F(^bk^TaSMBZ6W`nK|7?I ze=7ZlE3k%Kz5n0hdjH-pxRmkdl406;y+SpVJh_nYdjlSlXW$X!$Zyu3eo1)Wl`Zb| z5s0BL6unI~XjOU+muVfb#N-IuD@2bs2Fv1f>NP5;$4R~+pEOi!ytc0!#}t2EOABh> zs+er@u4Ka0aKw!i?O(LWx6s_l%?Pn5n1AOa;3j)HJ4W`_t^c&{>mR8Nll}tQwgR6D z o!{G#nUhAnS84Vbg3g578+w=i8C9q2F$qz4f_{< zczU`YAoxH0e`vvRaV}l!D09 Z*C*_a zONNhH<=*RDeSSvtjnE%l> L}?%P>S{@H4@ncoqRT mt?yitEE*QIN!?aK{3*(!Ng28C>}8LDGJ}Au1-m%gb#Noc&i06zXTJo zZshp+0%ZuNuE$c^(9>ASjuQfJT|`*=AgmP4_?AqVssqt4l@JzbI#jZC7vcLgN)ej1 z22J+vkKiG&KPZ1ka_B|#brCX#`c~Fxo*|yvtyO=>GQJmmtZRZNh~*35^3HU#5ZFEW zKexJhS=)MEKbzD){wkqS(P8ny3-Bo`^5dR~mA!BHTejZ%V<4nWBh;-4qxnZOGr{_z zkD9|)gGY^*oQbe{55KCQ=3Vm?bb9tTQyspY<+Oj6F5t7ZuJAC_tFO^z**}eO@5oNh zb=fUevha0l&lOQ$AHkB^jpYnpXql1pUQ!W`c@F5A@Fy@{Nx9LK-0e (G~7nKAT_>f>U^5#Ea~@Axle(`WlO7U~(rpBmQX?%D-4cWsGwIZ9stL zY(P${kQ0@^3xB&+Pp($O8vf(-DTDq)%yR8@*^UmE_jZ!194|{|w9fy~Hd0{O*1%>w z^&My$Db~#k@L+>3t^4no+95jZ{h+6)Dvfn9fgaB~QA)<9Ic9<9BgIx_?bej?(-wCt zS&K+{f(C~=c5#xTRx!jZk%d7@j{=^tLv@-917uDsy?U+&hJSs@6>0a9E!dZD#p2Jw zPqAnI(&{3zfYlrggizD1iFxaXp2d6Jm{*s!R5QuPpKvc{sx6FVg|-GwXQ2X?7W2}y zVW%>$M0T71c=S4IymAPuIH63PXwtfhX^CBZm}Ag&rtqfTe)@xhb6ZZ%$Sak8)wsYz z6|bhUh XAOvlUxcU;&boi z-sKbMk$9{Aa5+`&q1sBK&A}Y~x;v0-#){idtXQfX!X*bx1vj50_O%CvN4GQl4%&uV z!;NX_R6$Z?>(5pEZuoB7q+(RZ_^w9rZTQ*ZD=imJh<%aL3^}3YMM`X%;h?IMV|`B! zE6aX(aiCe7x%Zpd_uOR*7A`AxQffb=_!tQs57%h34pnyv`1B+suBg`xZBTgM43nKY zXu5yj%rt1CkODd3_$O#sl*`N$9{b^WvFg_vqZx-4&kzQRBGqsNd(O3{e05zaqfPFY zQ5^pjS?>H-pFGaahOF+Cn%u1!eQ{9gIUBKxpSxqoTOcBSfB1C31uQc}z;}wVBcsB~ z&d@_3Iny*kJ?b1H_)&))-FF|{BKz@Uf20t5P23;*?)>lD8gH#9+jEok&St`PamO$^ zM!;o@k+Yh7PE`kvy+t)`u#NnzKioZ} r1yW^qyU^YoF?DmD$;?Q`)iDSnHLS!dMxaW)&SWp|w!IbtI#+wR8^&{fIFxL~cX zWVn$#_i~o1z?2G3tO=;n8EaxAFce%m>?5vDh}UhO7*S_SzM6pE{0U_Gi!OxUW-!0; z9rWVZXPv-01$HNO?ZQhaAk8&6IaxGTjhFARfT*_5zq61pM#_)*|0VV}GoSrmYzF_| zY~ugd;%2^UZ!w`g Q9T#wzM`I0uLGafDNa^4?jh4C#1#T|0RpP3lzgMM3u5XE#OKjBbR*kQDIS zbXE~!&fd8yw5TTOf~|Y{? cW#n$t=f{Vh(2L7nEs0vE%X# z0ZeBZIszq{)q`bSrmHNQpd>ET`u-6J$P%3f92Q+9HK>uY2jtJglBr^}nx(obqH45e zuV -QN#i zkdthn3Az}S48Y0-L``pmp8YM9Gocq)u=@DwYvt53@_UM+7{s)r5lBi##{ac(Ak*Oj z5V-^LIfUP}>;1vmn5%{W9Fg#A!(KTN2EHF9d|oT g1^IhVk3tWs`3=Q)Hw^jd)9Z02WP`uX7;bZ{IkbBZB3IL=Yyp3keK zl%G$0dO^O!mSKpNcDm>hs2{?Gm<7V3q!<6QL*ajR*!j6M4mkJ{WB2ljF6|B5E;*}m zqB&vBeVY(TH(p;EP7X4+UeJ!s@&67Z5k3#3r({TSqp3us-cZ)_w8QG0>RHD9k<+!z z6Mmetvh%2uWW#%;z6Q~cUvE{~>z9xNEyQ)sbYE3uWfm)3y|D$g0myHRThJk*Xm4_l zKm)qi8-r9GpSj@b+G>xl`aNdgJp<;0S9b5aD)aB$4{OkCY %c?+pCA!sciix&2boVI3576^2Ewm3hi zY%S;UCv?GCZDC^Pgf8j}Z0WC>aVRwjU}?lJU))Z{H1;hj%NG3B(B}YH1z|C8gApxR z`V@|T*T})Ywyv6Fk(Jw0yP)Ic<|9!hjeRMuod|dl-Eg)!B-se#mE($o#k5c!9}08% zToBM_FFUQsm=ZQ6TTZKlcGJqW6l?MmcDIi}sj?Xq#GW?r4LWXEwlR# @yF%O7OOcKb@FE2?!>Hyda-F+G2# zXQo~ZE}v;_yg$3YVM| r-}8n@sL0*N+^r7I~L2n?V`d`%H_*a8QiM zLv32B7_YO|FvWJ_o1vv@mF+5-t^~7t#-|3FE9mgCWxekeChaqf%fRLh8&3pLUWSN~ zC2_K~sk=Y>m>Q%QRvb`J<|b8Co#v?k3zAEqi+9Q_zE7|&zGd`hErhRzGDhV&%tirA zD=aD?a}B7M8K|lD5n8+UPDS;&uOeUaEnIXI bmljMk!m7u#BRf*`F7-`*={M70W*28l8jVGDk2Y(-W?Uf$3+jd9aOm@@IIkWij z56# mwM-HTwTWM&xtgxFWk@bD_vF@2-vRx+)v1vtCS{Di9zw_qZv*M_a_REKxxiS zA+y2Gn)4&kTMpV3efpsP4FB$B`O V5OX=gUhA41Hg z<4AM!Ucio?BhZ)L2Q?B@sgaR`UdqFOv}GU_SQQy<^T*7hdBLh>Qiu29Lk4onuGA<_ z7q)G?2jr7eqDe?vxH$ct{(DcK!;Wwdk6r81l3nS~1dlBFu}-%W4D6-JZ%*G7eE3X{ z??b_g>NUg1ODE6w-)dR(%KGg-S{6E!^~-)Y;N7^ PSve(nJKa*jX~tJ6UC<# Y+5ep6JJ(#6-%{x15OlJM=yk zY<}VUWviax*X`y$3wA{`f!&6wT~(kyEh7j%ie&PQ&b?JWwPvPy2@!w$a+VnVcnO5{ zP^MB-WR|A!T}!ZXQ0e27s-bm9t`_b+(cE3}OoQtNrPo$8BQ`e?iqIODNCi!0%2T*w z`S7`5*z0-w$02c-;dLnI43$Hr=VF|tLC80d*-``-T-75BZvy*jzjA0)WMd@I6CY5N zrOn^p^^Ex@v;;!D2c(oNTL8rRTXWhV_@KxzjQ8Rt?$zqcd9A9QIjr*M9yfF)Fv{jQ zhUtSi(;x(aK*;ZU6rBr7n}N! (x=n&g#HrQj5GX?VB7_s48hIDfH`rGa6%pP zY^6|B(oB45(tOphg2y1RTao>8FH?Qm#CbvCsmYi6_I2tDv-D$KYR;*51a(wdhTR%! z PG>Ikg&HaDKl^oIzxJVzI@bU>GR7YkVS;L z<8fg1 %8nM_&N8#kYB|f%BOt~6YOrV(D_tQpGBui#*Wt8mBL3|IvKRKS=gylmtSSo+ zXXlS$b4Xw+52ta%$deGMwwjEPk7siQRF198?@f!}O)TiID*_YOfa2+_-++h#ivEVJ zGq%MRnSI166`h?mKD=Kj-<8Ay0qL-ZE0t|?TW1`Up33FdS4XIJu>Vfx2futlU6oUy zpA7Nf+i|9}r}N-nQ#v +B5V4EG>yt zL0!PxW~C7}-f&&m^>;+yI82t^O~A;`nyiC?u+3|_c%%(>SYA`R2(LnMPUbq!zd@Tj zbICA>yF(-bHszl5=`$eBzUu#%yMxfn0QXuUyy_6MNJJ%sDlTN7ip?REhOWEWh^vBE z#op&=7@a#?(OzWyQ`dm;D~zNEM8m=wLkABx3za9RP?B<`@kE?Op%?qb^#ZZ)qQj@g zAh}(#2L%8jDnbX5JJwV{*Mu}3f!hC~&EIy3B(6Bb(A^<(>&U8n8b3l1G4l*Ts{h;T zV;wsv9fUHNxMzaDPmhJf;kIfa T%*JITl7po-E*^n&knPa@Nify(?>b(V z(_{yry?WH^DSPjZK-vBC3Y1Mwy6WF`+_0jj0_Dj$bkQG_JBR@nQaWv)`3NNZcO73Y zA@1y0ZUepq=M!2U zgq=MC%>!=2-}W&5MNBF$EfPrnfcfbhROnzf`2)cgDH0%TT5lL~58832VQAiu)$>A< zxyj~sZC2+)mf6|F>H3qu{yV}g)CPdHvyMOuui?^1pz^fkBar?yPH=6{k$x%ys1D^I z=Fr=1ku >HN5b@w;U!ilug-NO%Ui_cgnlm1b`0AiDb_uZV;M*}Q>F^3n<&U$j zMVRCswIT;i;)xvM7?j>KBCH>by6DpPp=8|sr^nOz{k`OF{>@XCp>ypwI#D-h387Nt z*g4fi>dgYOf0N04djqkT{;|-ltA@F&{IiAn*B-DMo<;Dtszu~R3sJ0P<`~9)mNZAX zZrIXGz_D7x4kN>Ng^^X$0X9qbzE2pOXXy0RNxdB-a=Z3A(=knp7|Q%?;=1{qS2R-S z2;{u-6xfPgKHJX?*Bn-c^4Wb)=eC-J-t>aAr*xIRNs_enuDU{ 5 #=t=IXG|LUl zT~8;ys3>!TM6q*V9#e-(iXfG(p1eUZb gl zEqwR;c1D2x%%g8tZ-754kHZ fP`=PhCC#zHf bE zJs6h%dh3mn8B$I5X(wnIc$>!n6yXMpp|h_bPGE&$cvOoAqKzNP1y@8A!LE`a&747( zP;Z_`#NZFm`pF&Z;e2@2nsk}7mGF75@9Jj8%{?Cu4B5FgcoP2gl^0$0``1L4Y0nU} z<72zM(9S+!jh-{?KLkX|;Yrk5M%WV|h;TgoZ(ok_e|Qakk0bi*#rpbFRH;hX1Ob>K zn5V0%3(gx!a=5e{wgyXu84I3yULkhM zOh-+o<*iO=APhl#%G}b>XyJBAODbTxz4xQyjlHzWD%dXp8PyQ)n+C`@Udwe9_14yG z;-Rb-u!FzJBcBY&=F<&iF?vjY91v-;b))m1`c3uwiP0_yur)KBQn-g3+!8x3(e}Az zqU#Is#*6b2p=kcR!pSw8xUuvaRe-E=SXgYdjkUAq2baf&qRirB>;C`gcQ6ecFn)#K zAf1TJrG<4s$DWp`9w41+hMi+LW~P6Y2xyTD6fm~MtC^y&_3KB_wxt(-EeW4Qi6@Wp z^iM^V>#PQy+NH4l9q5Qwc{&TAxhm%&RDL`noZ&_2%^A2JNi<(Bc9I<1Dxi?}X jz!L7^-#k2#96r+o-m!qY04CFf3Gs`3Vn;WpAncmOE1x`@wQG%K zsliD;jvVXd6LwD?Zbe