From 0b71db8f4f95b5144fc36ea10d7cebd2b31cb22e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 18 Sep 2020 17:58:01 +0300 Subject: [PATCH] Part-2 blazor UI initial. --- docs/en/Tutorials/Part-1.md | 6 +- docs/en/Tutorials/Part-2.md | 79 ++++++++++++------ .../images/blazor-add-books-component.png | Bin 0 -> 19010 bytes .../images/blazor-menu-bookstore.png | Bin 0 -> 7754 bytes 4 files changed, 58 insertions(+), 27 deletions(-) create mode 100644 docs/en/Tutorials/images/blazor-add-books-component.png create mode 100644 docs/en/Tutorials/images/blazor-menu-bookstore.png diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 9a95fb5ba5..1d9b4c11cc 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -200,7 +200,7 @@ Before updating the database, read the section below to learn how to seed some i > It's good to have some initial data in the database before running the application. This section introduces the [Data Seeding](../Data-Seeding.md) system of the ABP framework. You can skip this section if you don't want to create seed data, but it is suggested to follow it to learn this useful ABP Framework feature. -Create a class deriving from the `IDataSeedContributor` in the `*.Domain` project and copy the following code: +Create a class deriving from the `IDataSeedContributor` in the `*.Domain` project by copying the following code: ```csharp using System; @@ -400,7 +400,7 @@ namespace Acme.BookStore.Books ### BookAppService -It is time to implement the `IBookAppService` interface. Create a new class, named `BookAppService` in the `Books` namespace (folder) of the Acme.BookStore.Application project: +It is time to implement the `IBookAppService` interface. Create a new class, named `BookAppService` in the `Books` namespace (folder) of the `Acme.BookStore.Application` project: ````csharp using System; @@ -440,7 +440,7 @@ ABP can [**automagically**](../API/Auto-API-Controllers.md) configures your appl ### Swagger UI -The startup template is configured to run the [Swagger UI](https://swagger.io/tools/swagger-ui/) using the [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) library. Run the application by pressing `CTRL+F5` and navigate to `https://localhost:/swagger/` on your browser. (Replace `` with your own port number.) +The startup template is configured to run the [Swagger UI](https://swagger.io/tools/swagger-ui/) using the [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) library. Run the application by pressing `CTRL+F5` and navigate to `https://localhost:/swagger/` on your browser. Replace `` with your own port number. You will see some built-in service endpoints as well as the `Book` service and its REST-style endpoints: diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index bcec504886..3e1b0047dd 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -2,32 +2,15 @@ ````json //[doc-params] { - "UI": ["MVC","NG"], + "UI": ["MVC","Blazor","NG"], "DB": ["EF","Mongo"] } ```` -{{ -if UI == "MVC" - UI_Text="mvc" -else if UI == "NG" - UI_Text="angular" -else - UI_Text="?" -end -if DB == "EF" - DB_Text="Entity Framework Core" -else if DB == "Mongo" - DB_Text="MongoDB" -else - DB_Text="?" -end -}} - ## About This Tutorial In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: -* **{{DB_Text}}** as the ORM provider. +* **{{DB_Value}}** as the ORM provider. * **{{UI_Value}}** as the UI Framework. This tutorial is organized as the following parts; @@ -115,7 +98,7 @@ We will use these dynamic proxy functions in the next sections to communicate to ## Localization -Before starting to the UI development, we first want to prepare the localization texts (you normally do when needed while developing your application). +Before starting to the UI development, we first want to prepare the localization texts (you normally do this when needed while developing your application). Localization texts are located under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project: @@ -341,9 +324,7 @@ You can run the application! The final UI of this part is shown below: This is a fully working, server side paged, sorted and localized table of books. -{{end}} - -{{if UI == "NG"}} +{{else if UI == "NG"}} ## Install NPM packages @@ -551,7 +532,57 @@ Now you can see the final result on your browser: ![Book list final result](./images/bookstore-book-list.png) -{{end}} +{{else if UI == "Blazor"}} + +## Create a Books Page + +It's time to create something visible and usable! Right click to the `Pages` folder under the `Acme.BookStore.Blazor` project and add a new **razor component**, named `Books.razor`: + +![blazor-add-books-component](images/blazor-add-books-component.png) + +Replace the contents of this component as shown below: + +````html +@page "/books" + +

Books

+ +@code { + +} +```` + +### Add Books Page to the Main Menu + +Open the `BookStoreMenuContributor` class in the `Blazor` project add the following code to the end of the `ConfigureMainMenuAsync` method: + +````csharp +context.Menu.AddItem( + new ApplicationMenuItem( + "BooksStore", + l["Menu:BookStore"], + icon: "fa fa-book" + ).AddItem( + new ApplicationMenuItem( + "BooksStore.Books", + l["Menu:Books"], + url: "/Books" + ) + ) +); +```` + +Run the project, login to the application with the username `admin` and the password `1q2w3E*` and see the new menu item has been added to the main menu: + +![blazor-menu-bookstore](images/blazor-menu-bookstore.png) + +When you click to the Books menu item under the Book Store parent, you are being redirected to the new empty Books Page. + +### Book List + +TODO + +{{end # UI }} ## The Next Part diff --git a/docs/en/Tutorials/images/blazor-add-books-component.png b/docs/en/Tutorials/images/blazor-add-books-component.png new file mode 100644 index 0000000000000000000000000000000000000000..ec0412d31ecf79ada3578add9c7d5e28ee21979c GIT binary patch literal 19010 zcma&ObyQqI*Y4T4Yp~#MK>`FPI0Op>cZWuTyEhWt-6d#ncS~@BySqCC_c^@Z{pQ{^ zckZk?3;v+#ZmR24?fvZEeu~g<@?X%936Vh{5Sp}k!1w~Ui^PrG;OX}7OVjTIeBac6k!9iSREOeQhxPv|j3JnyaLz-C-|ftr?PgSJKB z(){8^7q0W}$E1aCw(Y9?4m02)Y?s|+O=4>>`#XL`DN&Y`9(o;0ds)zXA|e#St;erP z&Sx*r6E)K<8gbV5lswrEs+0!@j#)MjUXK}j8G;yUdL8JPh_IBDcQX9G!sOVXd>r5> zJ}CxFL~$pL4=2K9-*9km+1XITJyQ{T#H73E;Vh>SdywNk%0T%Rv|8%#91+#SIVrFQX*i+CkQfcDd%mgRq#Z*#vSvV96xDvo%L`Q=C)5D-8`MKx@D z=OqZ5w`$P%i;o=G+}vFK7!U#%T2i1%0Sy`_iD#_;a5BnHVLQn^09udbIigVs8%gJW z-Gg-e*}5>QqgxR8qKK>gPh19@3?`*+abRiB{c{j`ZDq$pOKWTTKT&8<`Un&#c?ikZ zm|)#4KT65M;y}UY-`0Ir_-mH$jF0vmku@fG->^JVQ~ z<%Ud^iVT}=>N;)foKWh`_K=%i=*mu)K!u7Pb~CtrM-=a@bu2aM`PuvPXIJSs*c|#W zhr%6Ec`nY+@)2lN87`xwz~IcB#{P=z)67c(2TILp)Dq6P?Nn}rRa47UyI=0Ez1#@#63a97;lSZY7+EYZ zEhzA$iVij3{_?ZQp=VSdUUVlvVR%s)Q(e9KXnpL^4BS8I$*uJQ?4?&34VB};;Q$q= zos>U?lEis1$`7nfyJrkxl!%lzvLAO^O`x((5md3QMOT?9drKXzkvT=&l{HckKd})f zN^ohqtNkOaAiq#Y&X(($|Hg(&AF>K!CZa*M?)~t+pW&;vGclxxzma?v3|9@dTesdjW;e5W#>k1V?>c zH=MQOPT}=R7PT8X-8^A8%+OZ>{oBczfeXraFfqtC7jcRDXj5O{=~GrOQ718Qk&o`1RcYg@?8etv$BQ&I;gb7A_%P z;~@<8?0W_Sf~2&Ad2+{O>GF3}3o{Ca(L?Udx!Yw{eowFVj(5}tn#&f_H`5-kGfvi8 zpe>6|6@js*ISkkEA7X`w%_#Cg0^lchYQ^@`XGK>z#`0Jh4D;bD#mX<8V-jKDfK`L@ zHTPiz3+iCgFW%+!lC|X9UpwpqDkiiG6rUTS+{^ytaMv+<_kU01R61bG4y>q_WGugM zZra@m2synSsd1Y7$OImNDy|E9SyGsTecNdukg@Xfv4SA?zVYg0*XEd$bZE2^lO(Nw zwR}v`8fE9~kLOs`b~6VrtB2`O28^mOZl$RAqlKAG$CdUA`i{zz%KzqCP^h_-``69R z@)NCHb`vL*i&0!9|9Sa-gO!2HQ>TE;tSvf6cC`MCo#1Lq;e1TJ#q@^tMtEErv{LU; zFY9a{nI$V!euukYv*sAOQKeZcw7r@+^M_yrI=0lz*0mPg`FE|Xu4ElWw6UB1IXv)g z9XAb#mcWhsNHFtw_M4fgTCgt_o$ThiAo8#~%{M-Lg2`9+t4}5mHu2DSN&aM-!E*vhBsCt& zxrpm9WFh&KaMZ7DP#dL|4qE^w)BdqlP@KUm`5r>sars!=Gd1Qhb!R9Ewl|GkIfvpQyj`ce8xk^_{= zdT3@NMDn6#p2(?%i0a-~Cr+bAHcb0^z`VhUx^=39A}Kmdz-P}RXW}Me*3!eI#vmyv zsam4n+lx!c$k2ViEVQZPv#&skhcHk4(`nDiqp+wGWs63cs}o+4K@%iwy30S*V6wAq zOiXH8+hxSn@DJnj?r+!ryY!|eCu!Pof{RNyLzP#NqVqoVo&xOiH3L8NN3!oCJ?8K^ zQ|3KROp^IL6#^&OXo;mNx|ZNlU|!eXg=gSxtAt8Fd6MPOR78Agks)j2KB}xJ3#sE-Ubi0y>m1Eb50DFW&NG*+pZ*$S z!bAz1DOCWn@-1*Y^*XOhdMD8UoV!gsaRnp})Xfrj^>((3bc{tE@+VYsqy%Uom zZKfluPJD)ai~vIZasaIfQ%fFNZ^3FY|UcJN~)v za9x3g0)gZoU?l!M@U^eCT5WN&&`4)HKyEp0NV43?M}Wb0qvP*5!3cXO-tT9om&t0~ z)R`7O!2Px8KGj3fT)^UgNfd>0T)DFC;B~ZZOyyl*`TlXA2+ZspiBgi$H-FV2&!(-o ze*VQZ;-#`umiUl51ZMb^<=!A1iM#r`t4)oDQwtR z2c2!s31M8`t|T8%cnZq)OE9BT7rEu_d87l|alPv6?Xpw->w?Gi2mfrog74M(0z1TH z*a|Y_lK&WY+ zK8Yi?NX{JR?{s|R;LxLjWH12%HR6zp@HJ0|?sx>QA7GIr*} z^jQraEz^AyKgdpQrv)6V7iw?W0xOyZN{(vK=vEr%<9GkngvbddOvxTn6EygG;yM|N z6uj@V#4$3@D43Cl-j8C*@0rFC`rb1waH3X(Y_tQ(z&-80RNVRFLtJ`q<^i@pjZTAz zD_HQhS3ln-F1DSUHr|ol@sjSPUQpNBs86i9vcAANi5D?z=kgT{dE6-cs#;%PZ>TQ{ zd3{dm=;+vSCH0f~hONK=`pt}U*&sNwcmpk@8^bh^%H@^Xwp0AR)ER6QLfo=<_Yggu zIrL+R0uwPVKE6BYBM;BM9Z%ANH7upQG(mv@OHS9v;SmL@o@0) zkz=w|GlHd!sd7}uT-c;$=XEyV^Pv&Nm!+zjF<_yqDai|j$uTEHWc-B5a|05ffqDS} zs3!bE(3Oy3p|ME**J9=E-9q-M#|cMpsc2|;>FCtyaiD+C&(E)~=ge554O5FM;&_C^ zUVIElpu}dvD{X5lYiViu^^2Z{1`brFb~G@s-y4o^yVh~y#Ak*UD??7|5Ti7V6lAE~ zV71!pXy)PJp{}kDfe1;60J=(brVn4wje?GD$*4NNprCbyrS{%OUq5@rM&BYCE2O|5 zD5^f3bTbyz)om}BW$)PW?2YL+xm_5U?UB^puRcHC1_uSrmSL%?sFZ0pR+N<`1ocw( z_4SQs;a`YUaGAeY+t!>a;D1qD#Dy=ND&2v;X4uWIsbObjJu9v3m_0({N{@V*G)nET z-zuEp(^XZK!0cIH#|-aXY^rwXk0RmVX!xLB!6eR)zyWDB4x_&UAQ&rWUbho9UK&wmM&EpwhvA(t-TtM z&bVEQ>=PDnqUy$Qzjx`qwn{>BkM9sURw$@V80U2xPJ8C`F^wtJmQAjaFPC{h4Cht~ zGeGpGXJt*6DINMNQ>oj^#ml?%7%K0;n5ee5ho8ak8bv)=lvQ$aa?9w>o^$f2gT;%3TYEkryEPl82AShPNtf*vHv)z{JA0a$&CSmf7&A_z zM7_Jpr;pkq2%6Boj*N=Z?R?P%Rsyh&8X6j+qLyNNMROncHIJM1{NcAnRxq0v$H}KS zXX*V6!RW+rJx1>eE2=iI-Q)jce+_5JUruI3YGbg57KNYqdsXz5kK*N7f%1ns2sY4h zPIhj;lN=n`m;Y@5nAk`Ec;WX^fA>*NTZ0xcVb+T5l0TQhfGC;~yRTT(vCJdEpu|Mn z`+N7f3f)epgQboR!SoTy%Bo!Y$*qg=*1Lwr#?DtCS^YKd_=8mhGOwJuBQr2KC@6?U zr^)W&%EF&K%WX4sd3kvNxA#RQf&1WqNaan>e$Rj8+_gJs=ta;*Mfm#Y%|$73`D9I9 zf(O=(ZGBy>9X66F(OfI*7&yU)2usr*8^vk%b~=I>V)Ib}Ey22yXW%2Esn1{K zDjvasK&eIz<+I%H>&=}1SoG}c2s$E4Y?os7LJekVDGG1W1A?9L^czSCnU)|33wGne zO(5(1J%}1x+WT2n==tEoPY4YS4MRR zMC9espWj(i;UEK}Tsi^M(reOR5$sqEj7aVM#ZBhuKu-7O4+-JgXyw(V%}$Y$>An2g zNK!xCEdP-!;_G#XkLT|YCd+m`e`-c4#{In)Vmjh`OL6DlZY?XQloF2nzUKA*lxaRv zamUBUTAe=6Hz!Mg{Pghr>R0I}qCS`D=l3Te0cW>sc64+!9G`Wy)fEHe;84SDy}0eb z+uzqGK#DPZFN&Bst*t}KOpPB)AnI{R<7H{<0jtY`H}Yb;{5Jxjuh7FHzD;_KT=^6C z^<6(S$}e?KQO9qEzr6Kwxd_b=5FO1$P}Qk&VI;2wEgFISsr=~(H?#_j$`FX(BE8n) zT>9&m-BN?~;1%`WjKVu%Wv)L9I*nj<;WYZ&n#80$YFk}+6|K4p+9lSiwh>_5cr83|$C{n8H z*4{UD0uIb|iOwHHyc##I$mnC!iTs7`mh3Q?j{3zkEFPXM?NN%ju&{76bE>{Rvw*&& z#pB3v?DK6GiZg55w?@~q)xB&;M_XG)_r{OUc3XWisd7oFsrD~VfwIXgT1?8Z`m8e@ zxGdWQa>;|lE+(?B-o}U_qX8`Oyl&#}q*5rxa)Z~-!N?0dox9~MWWr?M5)+(og<*)U3kZ;i#Gvj>!FY)5yqPn^o$P)J*ZB7Sq6Z34GoVdnJ@mc6N4Dvxt zQ9zypt0SAMM)Cn1=K1II0_VCt*(~AAmruLDTR=b<>`byyt?Nd0j{lYRH0qiCNbA;zyHEL|N^ZEG?VxZyU7xM1588-FR_eCJ4U$ zr{PUwU)lprb5X?ML)uhH5?E5#VD`B3R(7(CgYNm|Fsk^upKM|}3l()jf?2sV!KGNM z{R@<@rlatp3;p)aBDoL-XbaOeRSEo!{GoYR^WngyR+J*lkdFr#&9QJY67`e1VDB?#5RpYk%E{QpMNP-V@kzcwTlKd>_`eA=kWZ0%DMkl|HXr3 zC~zt!hl?-fU(x-fP_cy>qKJ8G0N9y$Ly2lWg1b3E0X1t*OGDFn(Fb|@m;CDV{BWIk zLxWmSK-1gXtHY9fZ|dr*U~9`N;~nK@E(Iz8fdsQVEqimDn(m5=vSegsjeYKSlFc3- zA7hosNeQvV7(l+=8%&)V)3dWl$&cJ(Z9dNr08sWW9^8)`8naex)|^jP9g&YyAd@f~?GuCA`y{&NBPge$$>YP3vm+cH3eth>)K zRA-Ayq3eoaG{b@)c=g3rzq%K}zq_qybu~4Ru&e8BAPPR7mYl(^Hd!fuB=cr04aEb_ z>fiu}*vhaEI&kL6nNwE%whm+i)@H8$O*W%m$+I!17uNe_F> zM{ndbt0xO7CwFfkX5JkGlJM-T-(G<3?czq4fy(ig1)_M&$xYEH3@E1bz30*qVF9D{ zxTzu6P|?zMgzcgdKO^=w~^9;fYQu~S7|z4P&uELoIRgGmhx29v@FW@CUrIB3>*pPXf0cXoGyZb&+} zEqiSwb64{3o+Jn7T2Yf(;`7gN^?!|9Vwk)s&CTjQl{-KT4yWL7M2o~t(gtSG*vB~^ zmIN}9n0=d6s1+OF2Vg-2Gk#`PK$>(GY(v*2`4mjcCW8^DoBDD>TI zyH{6(!pZ-uJwv;LNG>0JKn#=DVgsl+&O8TOpFEPv+Bv?e1~uFiNSEyI(|m7(k#TE!tg58k(I@I#SjTA7FeP_nhM6 z@skS{ftQ}2;xmXkBt!oefN8O3FyUp)RS>e_B%FE7U$GPmVESmrXhcdKp;Q(k_ZAVF zJR9f0wJ^Vb|Mp!v(Tmao^sC78<+(CU^=~&f*0vb;n)$F6IdDi!mm3AArK%FM8=W!^ z9h%XnTQ(tV&XlN2hWE4JY+sgoW)E(D@tkfKXPL* z{0@*CbIH?rRA9AK^U%e^;v@2?OK45!DRXD&Z7ofS>48ir5jjNZFP*~Ed$=)K5Z-9J zhW=1fdG;duH;#mpAc|e^QT-E~k;>d$hFbk6ZlFJk;+pUUF;x9u4C6m0`j_M*TYz6cqm=RdAZZ*Jiy<*eYk2@c!(I^^a%| z>R;!VZlEVc}vWn3wWC}d}}ooTTor-EWCu#zfyb^5fGsERU+nf z*v5d|o#D!f%fycsxmXXD>#-VaC?<3r_>FaPW+WAy%N@i=I&Tm~Dpm|yYoO@-$R9cefD|{k|IT|gMzNzs4P`?kxP|&>gbziwr)DC14lyk8`I-Jms0*c?u6=nW6l)$mszh=Xgkf^KY) zDmtJoJ)$%u$%7OCtIM8^G#FQnc2mZ{Mla2D$&}15g$}7&a*9Ymz_IXTz8XSAmd)dG zJP)+|c-EAN197EWU%6CoYRtAyQzz+ow6mm_%5z97Z%wv?3FGsJOtY_=tUjvmv$O0+ zNf&U|Li(LTWA&l1spbBg@rQzrbor zMF#%pA~`PKxdE%z%p=2Y$ztomqUI!Q!P#`c($SD9mp=UY?qN7rhe^%izr6qg6r-C= zEACJrUp0n6+HS>O`<;WCrCLO}Q$IJ8w=9gvoWbWDHnamIh3}m&*Fr$@U9pPFNyQFxYkAjV|9~vLEY8=Py-(Hh}$4$9@tZBO=!3F>vB++lRi9mjPVIx7IUgavZvO zD!6T~jb8Er{gYyIF#N3Uwjhj<-A81GG|{(+)xHD z(LZq6uGYC<7H)5wtoaF$s#C@$BqpsAo~KA2%Mz_800lm>ye*9~y<8-xl0_t-OB|ei zfgDv`+@Xj-*?aL@;}_!M`xDL565INs!CrFIFHon>{<4xDp(R~7A&Ipbrg!!r*fDE3>GGm+7JJM6B7qn&4 zS*Yu6g-_V9z7K}{prnu_1A#7psWAAw4?Tsp%!PaPnPj5pqZ~bsnwlCOF77|Kr-%sD z95Di%7#nWsxC@-Q-&O&Jwd-&tqRl+{Q&6B)P%slY4k1sF-*55|ug2kI_!Wh>6>Xb9 zt#eY1S#PrSR^R+I=bDBu(3dC!1891a<{cJbJ?QT4Rx4Fy!UKp{iw+BMe{D?-eHbAD zK}uQ!=CMvj$PsS1BQL%nnLmmBN?ueTj|!fh?TjF!+a`-`1W@6?<%ZW zn`d8rS#{n$OwE+41B#`zq~zaa`%pD~Sc~`LO(wrzv}om+sG7enxps+O3IyG>B?#`C@dwDctS z_H0ea`=R!%^L2H@4&>Xv)$DP72p~&#P9u*JnW_eIszXmI+5c4jzgZb@gAXpptfx%b zVM2O#WVa2=Xuc;-!la#>{m{^*7S7%T>UgJJxg|=J4YXS~!RPYeZWs`%FUW4}rHAmS zzv#>Ut1F+b>*?~ru}-VYi55%pksVLR<7um(XWvRXNA@zM{8xFce4_BaUq0GJ<}oKp z0ZI3$N&lfwwB$b+_ApJk`+s=^OfzFrZ!phK)6s3V@0VaM8$uEc zKpE>KJx}t7OyCtyvYN|t6Pav{I=CnS(GeIqL8*q1G+v~^wI3QieimH#3xhQ(^LZ8f zy9mw<|8^bAf>Vi_W?o_`8k&b#z-{_@JZ&VWb?fy@bK?4bv7)ZNqt?viFg*fLgVEe`RE3C=qS7jHCNG zK7anq$G12)=epJRHE+VaS_4EcEIo>aLG?qJT*HDa_x$0g5(5<#6&;<$u{|&_u+{af zq`aJ&l~qAre%FpiS65fx`?_AQ(zSI(Q&W>PnvRpx8Ss};#sVE3cPlF|kHwZ@c}mP7 zF=+bU4(~^wn_3w43LQ=PYWfc!JZ~1vfG!TOEA2Km2L|lG;N9Nv z&E4Hyrs#OY9)~yr87L4jIvtCVNSvZkw1tHQzl%V##Z=+y>MGz}`u8`n6g`-VgQMGu zYbvxC^n1s_*=f0up7Db$z_}`Pnja2|vVl>`6ioJ$E)k}&!TL!#0g(xvOpqAAI^;pm z+|;ypcO<=8r()2_7FbdzH#m5BU=tH`R8%>6`G;Wu#cplA3k-wazhbPGHJa^>O-)S;q^SP_*U->cdHJl2jQ#y4 z@3Yl*faU-_h*iC*{e60Yf7in*%bQ{uIx45?4U2j$Ya(yi@sUn3iNNbr9v3VBuBQ=tM_IFg1S-h84D{8gM zEi8(m{i-T#DurX5pC4Sewzh^11AC2PrKly1`+;5=JVG!n9bL1I4S?oaoOhu8)<-i> z3%|{2YY%UrSpg<9 z1mO4au~qz_(@|0^Y2y5eOY2HjLPA1p?4KQn{VP$xFDkqVw+dKcK2)|rgUGzj4Vi$# zmmp|^l-uwQ(+QGq3jIGcY@L*c>2ck87Y|B@#$b9Q zL&!S*pKu7*6RUzrv9FtzdxrIuF23Gclr-?{;;ro6-r zODD8u@wm{wQwLXW0j|J`s$GTy+tp7thS@9+_H7guw*#?+YXkWR8yb2pz zcXv%oOXMhHkcxu?dvG@zBL@{#=Gfj82_|}QyNmS&P&$26t&at0hmL&X63Jl@{)r}u zuT`TE%6yhq>;iF2x~vl84cA@)N0vn4w-mzf`ICeUEBQNzAfz{+n)h2(ztzzp&BPTF z9P(pd83Y2DANQJ9Z4=N3Ux*l#C5wY;pI+?@&h`B)4j{x{b|BdRdkqK(r6pYQ^71V@ z6>)LcAdSWf;(q(qmD3A1nw+L49%kn9nwpxbs*gaIpNc9kCx@JuH#PUyfkmmUASbad zEyq9)4fa`Wrw$Wzd?5)=*utr=i9$Kz@QJSMcY*Lz0;=E`z*f;T1_jFb{F9en+3k_G zdY+t=5j$4_3WUj;3IfdrumHxhWxR}k{aY8yoe+qZS6gG_?eRiogpq>(J==4m^O3Q%v@{ULTF53Q>>rnTSJv0Zd)_X$d_gz@g+`97 z%YVA;myyPEB0` zx!~n~406Apr))On!}_jnxtYR!ZCud|9nRDw3kjr32fUzxD zae>wyniT}^0Y5XlhR=UdQ8a2ORSmp z^uT)ZwNf9*|CO(TTD#M06yWv?04Q!}?Ly2Q+<%BpFT5VK_a0yS?_Xa32tK%O8rQd8 zzfO{ACJRv(K9@%F^S83-w)`-h2Qn3P9GVr^(uvDjt1BxnF9W}})L7y!Fq3=uS2s5| zw?aT~dj$MuKmh<{?6OS0yDSo3&G7A|h7$fuc3~wYp+PR@TbWqtWy8D&d%GfF=q&9&=c6J$416=;~%x z7cxx0%@6H6wyp5Djb>8waSB-$Ox(u?Fgz19k5^GfpiI`Jm?SAxC)zUa^$mxUi_7KaSRD`+g@wD#ds!=0hTaNey2Sk-7#VGrn+`7AX3I2A1*>Dd!mp<{cO zfHwtPKdPdpR;6)VT|F@kj?ix(M-9Zqp`A2c zy=y63^#C^+&5D57)+^Rczg<bR#aIcFCFCBzVP5-F4LC|dSPW;B80%Kr?9Gn#Xeq^q&s*J| z)wp4Amb`j>L1a_Dct2>n!eSOzhu)(~if7B98-)cl1LOeMV^6a1sVX(kyCZ$X2) zwoF_z@=jL_nyr3(AHBvJ3g?EgW5_Jgso?tbQS|*rE&;ZxY^~@vx109zGC9Y0^pEj2 zut|B}6H1^P7K<*O?gZgcLog9pk@A44e>x9lWjVI{e*ty1NdFGX?_0T1rlzK{7rIJu zOrdexlP8>Ah1Ym_Eh8-nP~w!>hIg+MxH*OM>c9;%Z+9YH+m8Y7O*##iE$E94`2!}9 zWlW{qx3fV2X&fKXU(E+JV!~*Us8^@QrIS=bd1c>@I3@;B=ue#Rg#Vkuu{(l(vrnHn z%q!PkE(i#MX#0k6>=EeJfWvz)mh>AtOXRP=9V|t8Ty?ElGaZ3 zN>Co~Jj((+VW9Z}3m(z#@Bq9te*E(<|%b7dDioL zez;9$2)9tEmZ6@eSe82;QI-5hh46gVibYRVoEfgU*i9ue2v z5)UhJrUD1p#STD|AjERF!Qiqa_r&O09tA5#dKQ_$d6%9r$)-ON z&GSOZ2WVOeu;mlEd-Bj$;+y|cET2#bHSxV^`q|%g8yvlJocXw9CPLut|wD=a0p6hjjJWai9;NXfmCrVkkGva6$p1DGKsH~Xl; zjT*fQEJXo`;u4YOj?+O@nD+2* zFRD=h2?IC|l)-=dRU;jcF3EavbTl;9YaN;WTi)k?g4;8*4djougUI48=h=w;Lg?Pc z9tH~{?uYulh13ZFj-chd26t~*t+XT#?O4<=F0JTe+dOLY3dW7-bD3cwl9^u-k$wEz z?JP&F{n!rSz~HI4KUpBc^Ct%kyDxYB5M5QR6rWqGf4^sXli#~q9&#yFszaD`Erc*- zkq(u65W2Po2)PRtmVXMx@qA}0br5f|xS%m6Xs}sn0hskBfX#@90#c&i`8>5Wv7DFk zuQ??^u(M%HLcXBo<6J<|tqjg0EO5Ba!|D7L<0bvZ<#W>}vu;*YgpY`bcbeq{dAY~8 zX@roCwzRYZr-vwPoYSgaZ*2JWlp8OWNQiz}y>cUpACnhoP~%8?fIw6$JUg33wQ!Tv z(E-F6RqygqsM^ajyQp-{T#!2-djICPeVR=CwB4-&p2;^eBU-9hD3S`E>IFbH?|V~)#K_3#8*fj#s8t{CV_)ax>w6Gz z1oskH6S?brwBpbDTV5=&;#JC4;*L1QBKR7G_cGh3)YtkcujVzwdTUS9sXLRg5d|By6K^(Nbpvtt+0== z^F?E)|H9%IJsxa3@BPD^sqOesjc1Gsd@N8JjqWF&pd!p4heTs!xw@jY5$-}FW9%bzP^|dsXzxm zC`9a1Fr%1@g2r7t+nljsn_rca1u%$cC)rzmjtbVb|GVl;4gPW*J$*88V$~i&(j0ML zzdm~Q+!@_A&WGf`{7T}Y)KIk#aj}DIhCt^{^k?qWl}@WR@j)n`b{0)OKJaCkgJ`3 zZ#J}e?wL0dxPyN}Ole;WxkwCZXw1n}yJ4KITP(%EBXnxsa$KnSwe7dPa+M!jU^d(h zI$;iu9O9t-!Cvu@%lKt>Uj;4izwBhMd9#n^0SQKmP4f)hsp)LL&#_#?jOn{ioz(bN zxEvlThK#;e)9xq}BiHPqewr_0;t4FmK`IJjzNcaEcZQ?UmidT5OF#0#UC!!&t|+(< zZ%6;Pug=}Y(TqyF*t514>m6XD&V1L2A=u~Ph+{xv`_5O8HeGXn)$^Qu?ZGBkte)z2 zX^sPY6xl_`-CY{NeZwYep5It#Q!ax!y}q~cs&h?g{TuBYq#RdV zn}|v2Bs|V966!IKUBm^Ktz9E-TgV;_3pSpQG$j~t`AhrAA|S5|E0c%N>1bDJvZO^H zd`6?%>|h0bbju#3Ct4@?=iB~v{Zgie;&SG9fP((Q4Fcu7Zo_k_0Nbe4N3mRM;IMKb zWoLiAf$HVXyh?SyiHff}gQ^QfDNJI6f@d~g0JM(jg+J=3z)NdW^&2VceXwkd=qpa@ z5M=ty%h|J6`8&UJyFoqrByk2V2!wR;_J09VgY2Q-sVAd5V??bUL^pOeEaiQpLp($kV5Z8;TQVWsc&~XXUNQ@*YqW3{-CYPA3=tIwEe^;k zkQ^KqCAlm)EuAR(I=_dIJ$XA6fDEQzbj!E|CG~iW9$=eF^sS!08qN~}n{4tYy8gP( z4u9m` z_UiL9Hv%aE!lNx3>hdS%(B!~Wp(}2Iqsm1(sL5OD?)l{dg1LUnZj-2>pz0sXo7;#!AJU`8(s?^JBL4 zH@G&ach<{n`mb1yzMD7~&{Xzn(?!CKtPVD(g%Z z`BQ4-U$9ssfcHDv6mlO}M%^X7QN&S>TL z-vcL~>zTQ}(Tc~`mzgY8yk`(B}E|4I7X+tLJxfG_>Dh@_1fc^EIDu~nUj6(LH0{9YQ8vUFO*oa zX891aaXWzuBkwjpXif#`LH18DqWNv7U{%VD8KMe}QkCceUx(+vXt z4FyXJF0`Lpornng|2)}cernvCL)q~m%#eOMLPG)=16vFZIW}TG&JePMqLbNM2V!`5 zxOpTeFRvS13o!U1eo1mQytm&ozf0#*1&rRn@d}BmPlWt}FL%ZdxPbktS45^78X!DY z^Hm#}uAdAcU!|qJ4``ad(aXtfLhgRLn3%v4WMaV@NeBZ^G%+=W`rYif_T!n8lXIsa zc^lxnOO3X`DXF)9hCbQi8CG={KyB#WNW~SM5Q)dRTURFq(4gFZ-LT`)ZnW8PaMvoo z8O?N~rI#SzMF~sljc9{<~%5|gj)j9oo&g1d<6W))<=ly!Up0D?R-JkH#jLyx@Au21| zHBdR5>$5HmV*%r~6be;D2p#PKbk~5TGM}lz)Q~vWP3okzbxJz0n=M7j!e?-e?n7+h zE4E7|;g!7NJE}5mHj|g0**!>3vuL_U%8K`t_BvOyLNg#WO)Q!Z3@$ovTtF)$fWg4I z%3@`^Z`HEEZ(sHXrxUv~}D5SaGCOrnyaZr*hsb>^EoQ=oi$26MYW2O3pb)9&Jr z-8Jd7`@%7I81Ml}(|Zes{JP%Z6}ajN-U|*!WqkMO7X~Ot!KRF}$F=D`K~*-ldlOdX zKYApyU7Z?03##?`65H7*)EyPdosfq6X`AqAtS%@>!ppZdzfmfkVGei}iGV8h{cNFy z10ctk$lXf@x{C`cw^KQr`~i#O4_Ec*%c748FhLcM-K>*eO93Dc>`q5?F5aswa%5!& zBigS~@n*wVK3+!vC{qXS8{;tihFHHrhisb)u3jImSCI<1f2FRsn$UT4< zsCkuGA|t>t%&~EYILsYAlK3HFO5c_yP`@%6Zs;2>1)8pmrdGr!pQfk@-_-4*Re@v$ zFCAtQg0-?O>vAcgAUOLSe}zdbmpz2N+Wm(WC}5gSUJ8`Vpk-rsZj;KHa|#q?yrNjv zyeLaX8;~*4`4}|Zl1qcn)^Pk5HP^ZpYaH{`* zCz_hiV;Py=*OG|^k-b&xmDU5~Zj1~_t@&>wOo1#&D-`5P*lu$WPSn+96flfH%I9ly zD$1?k;^k27#8Tp=m`HhnlegP~KDguM3=yt67z-6S^vZgw-l&~AmatjP`MR}So}Wz5 zzBnz`{_Mv>z!l2P-W}n+za_l=lVg0_tnjkFhG~nJzGuNkb#cADiUcrqGW|8V411uy zT!d*!wEkzgp&6R>0D5OB+Pdp15DOvG;Cz*|AEo2#b1U?cp^&-o=RQh0qSKIrl}DB4 z4k$LieMYW4O8=}Y@(~TbaW>E?ES!b|-F>)R8mFBr(YU+4K~)+N@=!cDYDzLzM3_!~ z@)LKW%Fo_&%=tzb;J~$D2BC^cVqf?ztNC05FWVt zwCDzGM>0f2SgmNvRUxSX<&OT&Gy%@yxOl)AsurprzUDb8o&fI;`0)H|Km5clR6=6l zeuM=!*S%(fEyvE@!(MF;egFZ1LUrTuYE@Obyh$~yF~f0P{mb1wTsOZs1X#88qfFma>sR{r{RsYT+7|8#87_+<8zwpvQ zR@(^xun7NaNI+V~8vvkukdqWwch5LnbkkFtc@{glhP~9r>&7HULD@GcqUOjLz{8VS z^wQcddaSFT|1htk>tG^=IdUT`KxQtsLT@= zoHEqw*kjRY6eM5_yT?I85ywLTo(r-3sWHy%za!&|yC9JQVIv-@~Xej6?npE}V(!`#l9D#g!{FK z4Cn?!nXu6^<==hfOpo|$t#K*;1D_J-8JP)hnY5q7PWL7 zI~a?*Wa`eW#3XY#o5u?_#`x7A&m(k>J6;!WpX{;{N1r)0^l?kDvkJ#0t6eK4zx428 z`n(N~6icO=TSWG=+{Xg|8+PPON^K^*XPhN4wQB0mYTjwKDDw$9yh-@*oJ;@JqYE2( zN3`e&c9D}&M`GerdNV3JMC1r0^8v8fEAd4%-+F%-ooz35ILQ=ZPSZ^FUWs9QT-JUs zU9&?doX^>M^yk!x=+gG{pEDeNt_HWh+pmq7dG@Na9r;7Cj*jBf+qe{LH^&*D^gy4C zds<-fWc-~g8ih8vBaUj)_wm_B!l?zy9X(S|Bz5lz38K$a5!jU~wM4#e$X@S+bt4;-CQ#qEKdGeeNN=ll}I`&9)!eoph zbK?EeJ;-l2BIAVSbuix)e_d6ONXlLML>s{6!QKk>(=yl|XInxrWvUc{+HNDQ-?KNC z9fo7sWkP<#*f~l);qRRbY!?!mr@LG4N0vOw37QqZ+_Wd(jUMBg3bb{!*%NMONO?S2 zvmY3U5Bca&Pm}6+Tbb@3?H}I6A4vu3eB0<0u%uUK%syIQlkOY+LRXIel%zL1GDFO1 zW<+w+JCp6wsGbKAO;k}f%xk_wzoN0m20nhR&g}=EmU(43Fl=^AIN0lYNhjE6r)(+| zT%XqPSrP3f#~e57PztydFdv_7*>?QN5UY)8)EBPU??CC7OX%aL?z_M_bz&_e+S{Qu z=g=3e5YvYD%atFaw#dYE=~KQn0AEIs5))3}t|4AZQhyGpLGCJ5EQMm#@E}r>jBE)( zJUVIW7cHn~VG-dbCZ?iZoa>2$OC#A&6>myvYk2o{A(<`rJZ&%taafRw79=Az?$yaj zS1!#Mt^qs6bO&P2E7+x_QFp;SKsxBso#kkKMu-xJf#B2$Zpe>MlFoFukSW$W zo@a%5Mm+YSX_$1BZnH%j7W7xeW~Nxn^V`v_Uc2 z<{5qx+Z2QQN~83GLDvhN>=kD4N1X{Bm;M2yE+2jP8LwriKIlaO_M0)&=WLJRz1Q%N z!?h!08G0kn%#r~2c2@3;jZ26Y>nD9}m(27=^gxMmW>Y=8dQ~OY^P^6)F-NZHmmZrU z#Yh0xLf6D-Vg>8)_VkNb3cVMggPY)d`GQaA=DIx6lS4rZEI&sKk%5JIcn7Vnp0Zy4 zH~>hS-nn~ynP7fnG(M>?$l|V^q;zeU$;RF};Cf8-x<~^fVo;Kek&1-;lXm^U*zgeM zOrjH3-eprF4q~DwPMQJ9sEFu{2rrs->I*p=V`bVr;!}cFs#M z-JD6g28CO0Pj*dxm+yYrt;|WJHHpFJ`R`f#;&yZ-rK&-U<-o~F!ip(ZSzO6dnNTtx z7AyYZo-;*wXt2gK85=3q^?GUPv11y(>Gw6cQF0d#@8i7!R-9$OZ!nmyR;OMvpI0^Q za}0EcBkSlD8yaa(l;@8x%KG%4z6-{0MvPlqgy&S?f<`<8)>4TY$hOwD3K>?L>+7b9 z(@v2JCVOVVb$MU>RaoPhbpIIb&;Ilx5n~`?6l%IfM~z4fco-+kL~`H>{)dZAKizr? zyom6$^v1aPr_t!F;N^vxg2K=g8>5!6r;mnIbyGADHR60?Rp$9Ct;EWad~sF-7|;u# zGhmF>I3U+)d}|R=x@P_-{FU>esQaSlzJ14>ccJVPAJ=tMABq=;Ju_2I^r+04(aj3>I*o{Xbf@8l@TvIrMiI22XQT|8X<`i z&SSX6h~<4#YUX{4;y=ylJ8Hg4(nzP%i;a7@Bl~W>zU?81ia)za4GpNP=y9{5baTC` z$wVbGvEEjh*cy&H+V8CEmtgO_fDK#TjC%mN(Cbgd>x`$XrH&005t0QBf{jOavomDO^N>YSCW+C?m7y6WI9M zeetNv^SvX>JYybnz*a9SMc#3*{?T-dpXwR*t6Zfy8$r>#PkH&`=E9NXGmdZY zpI6p@M4}lyo=zC8(wbF@8989-2{K1b-=U_Pc7*#xg6+t7Y)lp&DofbC%{Ws?2CRfs zuAg{`qp@JnDy!M50r4@y4zYMP&0YJ9TS4E413l)v%-eTO&wp=B?@RXpfaxIGXi0OK zEkne8<6tP&@aul>6a>GIofvles5opsOUDpb$MT-*(!=c1ct1+FXaX(ysGeZoksejbo$4Xd>|iD*pt(t+1zsU*t@31?Gp&pPvl;1gi@xdC`EJW|wca4|P&8)^&5{e$jhkbXHGD-vfw6j85-v zd-iKN6iEqZ>@6mn=$BuXd9vx&w{$R;J9@l+E?POrB@e;=p&y?jZ+!c79I3Ginb$Yq zAbZVkGjD#M0Df0W{KLhfyhbE<%;MF9r~7Do;2^`C+hJchXU9A>abr)@k^qh*Px#uA zVJNA3up8%rtn87f=SaX<7j~p3vGw87*VFOM%neduH%fSEF{AdJr^iEnJQ4s*lpil> z^KOm$KBc_@{Z3kH`W$a>V-idAycGi59-`L)23nmg`&V^?bU#Y&)UGe7Lmkf#hCk=O zir}?lFi+IgC51*)D6+=xOpe$6CKn;FbYl%6&pnw`97jw8^T8q!A)7cy!dG1V}XaEO6RZd3Wk*B6u^{1 zoU!Da-D|8`_SP@IY0L+oTS{4F#zDWaMwU8U?Ml)#dIpk@Du7&X%#yl_2)7o6uVvoZ zZ66#=opI44wBtW=;=RO(`pYB<7f>semAQhlrG4;wmiz8t1q}VYPC48}e$>6qWqTBPHS#&H5x4M5u+&J3n9sL| z9DpoZ*mY-e7sMZp6#KA7gPfmXy?mrlmaqp5F0MY`gAd-Ywr8fNZyF;+=VQmLo^n(`nv<)&(C zHz@U9`uRA1?Bap2(f_+{$J3vOg23#?K<4cS+v2^s!~*eH$5wgnrQt@bk3s-ov_W*f zHzf@K&|f-C$f%dEwC1a1bJJ+mkb4GS0SB#aU&mf1M}Mz1L*-|SJld8tp1apkR)zSL z0)XjClLysklnHN^t_>uhU zL5T-D4FOOw!F=&g#NOYeY3^GwG95y;sO__;pXc2suzX$O7juMgefmSv zwpL!y*qihE>0)Z*eAgr?6Y978Zld7Ft zCw&awY{OlN7>aH1TvNkT9|EoGW3k={KGLf}Dn-AIixD`k`7F37acT<{AmSEP} zSKeQI_j?Y5LzlDfPg&6W`hFBn=zcb{9zJoZ9)iVcvw3BeHTPx^c(gUbuqZ!b0XZyk zLmryelr3)c1^9Np;{WjD^X@)zqN_geW@jq4wI!|Bak{vXBal8jJ6pIt=OmD81)X1R zk%aV>1SHV*293!I3eEE?e(E;i!AAjB^0ukg)yYXnqTJSfCAi@h-sPt+-t)Zt>{(wt z7aBBfh+;v&Eg9LwO_nEFt35#c8t5#hqbPLUdEM#l%l&g?;17{idVRwaF+uQ@fa~4h zoXVBrxN@wY8)91DEkcUHpWmL*!wu(X%ZPbRu@vP7kA3R{NI(pB4kw*4X#G(w zZbs)7P(AJaOc#dSJ`n9s$?Z#gMburf6SP-d=}QU$f#Ac^=~kXN9V8 za0peq-RJWj^)L?W;8T%jUs&8PE;N`sA5PC?>z^R5Dr5K;7=GfC$;hlN9$AA_qC;Fu}Bd#Foc`` z_eeZ8z(M&*G=oH;(!=}oZU_y#u|)9NI6UElZ}-EJD3}=dSRm+mhw9>7SSMs|%|(#^ z97Jy|N^#ijEh?h$#o_u~X{PWsCgc*^aM|9Zid^j8)e4$KXEeE>(81Ju(2sImu$Hzl zi5;xbKZms@{6X93W6kvrzsmz%;Z+m<#hwjJ*zMG{22h^H}GP?%q z8X5}P>9!om4H&&zP*b}xNkP^Y=IIOuyUu8YnY&h(Gx&BamV=wtX#M`1=l%CJsdSwd zY{@F?g~7LD6_7jVbx32tGMdk0VCnYtf$+_*nYi>hPe8@eRq9B=ZgIuAz$XSNmpJ%Z zRdaJ`SSyg`&_*?UG^cn-8XdtS3#{ys+^uF<=(ybFlk))%my<+^na}aK1-C*xNS)(d zAglQRF2x_=i*%5w|VdO zoJMcEuf5O_o3wcZ@-o}M9)|f{WP#Z1 z&XbnBizB*Bi-#mHAR7?XCnYhbyxT*8;~D%`-p=HR^$z1rRH!v$jH zEU*1SgX6{wXmZ?DkU+t55LH9yG&!6f+m_y-*K_GHHT$W~SSQ<2xbb>}MC{42znZ}* zO`ZxepMJBH5q6`fD-p~?pK7^ptTfvGuwN{ke|&KJLrWZwApn5=+M3*j!ad4CAt(UA z5jXuc^nO2)Own3Vm1og+FBCybB$#LhcQu2m2RwQaeA{FJnobZ)ulUcun){8j#uxs5 zW1Fd$8g!Ao7%J$(0x&gs-3?HU@aFdUBFeLKG<&NWoN9g+Jov73_Yl)U>V=pY-I_eu z(h1sKi;ah)2{pzGC{d+x#D8QqFd3KW(UjA(?KHT$hD6AqztWEf3<>6P55|RzXa#JJ zHTB({hL%|29aK%@w?kcOB(CJdx~2Tuh#JbGL0xkySzfPmqrP_x3HllVjgp zUKvS@cVB{(2L-q~PdmUcrM;cwdUt~0`yY&)(si+>Oii|URx4{M32|`WV(v?HdsD4+ zvh6YE{WC$ONYt7>`GBeE1XB_A@%OKy>7zmrHs^3B zd^=oZ9%fE;Ds%e7xYYt|eYI~*zh$a@i7jkfgU{^q=cj~*z{oPTEbLiX;4KaUYD>m~ z)#820%vPp65XY=4NNW0NRZbKqbP5x-?VweFfP)Ucw;3#yvA`1^-iZM%W_xBXEUH?PL zkO6=4@XSP4)l2JiJpL7(4A1k1Xl%iB?{Tx4<8}c5zr|-l6sda5NnwMLSXfQSnQ-b2 zBGb*JG(UO&zh+|I>VwHF8#VHFOTl0JYf7w3<XP znLKYw#d%TtV?H3t>sm-JQJ$VSl12WEP>E9XtRL1#e(=UH0vYTIwzOT(e(71ylMU4$ zfVPdi_0f0MO|N?Qcu-yr(>tJC@bSFF_8u#hL2m$$D9FJ$r}@P`bA9Gu6)oSM};#v zLTW)`q!-#Btq1mVox$pv-0W?h3-*RBDW_%Y4^~bQHbMF-Ev{q(8U&A3z?L{M{iUl| zgU!9TYW7FBn*-~Zq<}v}`{cb$iMm|SFHAclyW)?zWw7+Lc!PHpS_8evzD7s6J@*6^ zW)8#YlrPFOZ#G^Q>W!r|Gkj89h1N0ZHA`^B{dZcluhsmX&nq_SOCVldp4a3HkfF3T zXWJ^q#f-2IV^4|*!Fm+nf)wN?;b(B(+pOYoxD%sQgRq`G?})TrDGE}g`nwl|)&dKE zHtBEBZ*=nTqs57PHi)%wRjEz(3