From 525fd98ac0002aacbf4fd91de02429cef406cd17 Mon Sep 17 00:00:00 2001 From: Fred Date: Mon, 5 Apr 2021 20:53:29 +0200 Subject: [PATCH] Working on models --- .../django-migrations-db-schema.drawio | 2 +- .../django/django-models-vs-database.png | Bin 0 -> 69106 bytes source/part-3-django-concepts/migrations.adoc | 15 +- source/part-3-django-concepts/models.adoc | 132 ++++-------------- source/part-3-django-concepts/queryset.adoc | 72 ++++++++++ 5 files changed, 111 insertions(+), 110 deletions(-) create mode 100644 source/images/django/django-models-vs-database.png diff --git a/source/images/diagrams/django-migrations-db-schema.drawio b/source/images/diagrams/django-migrations-db-schema.drawio index 3789024..7b74885 100644 --- a/source/images/diagrams/django-migrations-db-schema.drawio +++ b/source/images/diagrams/django-migrations-db-schema.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/source/images/django/django-models-vs-database.png b/source/images/django/django-models-vs-database.png new file mode 100644 index 0000000000000000000000000000000000000000..13ac130e786c68aab6c20dd87a7f717336590f9d GIT binary patch literal 69106 zcmagGcRZE<|38kTL&#pG%M94GoKlvA#784c#pM zVI$Guznrm4+=u_8^|Ll2)7W=F?R5yp-rwf3rso*(({yS)6a{aCfvgVlSDAG{0PL`_$^+@6!#KDW8` zP{e`-#Zr=sDM}=zFfxfu{Ck{EJck-n6!GtLayzNSUy>=L3Q5Y9e;@4n|M?)jE#=pT zu;q}ssZRqBjxQ`O%>8Ok-lQEoJNf&uH= z^#{RoQ^fbxPJSJ2O($-0YP>I1)M)>K1M4p~Z+ale}m_kw1=?!K|-mVJ4+#znb(pGQV|YR;Tq zV#?h6q*QJEW<$A}jGWLu!JX`ug`Inq+>(^&HuOHV$W7$2TrGH{=w1_@v`oQ>TE!~U zT(t|^-`1SjVO9~g9J)8*)D>FKXPgq|UDpqH=1@|%?yu6h+&lH=_JJ#+)FeD&uljU% z!})b%ifZ5A-a9-kS~K^#W4+o%$C5jEwE4xqry0&}U|M-A0m&BRFXM0TnO)xQ)l+10 z#V}Do*~9XVV-2?9<@Mb+4s~3@_MZ0fxoTa!^V9PS@mx~YwZU_D-P2 z_f~ie*GH}8koYdSC~3n&M~0Nm{Pb9Fkx9C&!(DuHa)(KpSS*M5&J-ct z$JqJCSWfj*<5>y^4U;!&9(j2c+nt1uMUvQYIo|EZ`no83=b8Bx^<&tchOb_GJyq53 zkSVE{-7w-^9}xo^_!M0Aea}h?jPlFvRaQKYKU%Ui_7v=Ya;{3?SmT=~3c6$#*5(1+ z=i_!Uvr8G$VitKh)kUV+io37dUfXunxxd1*w|JM4yOLW=iq)#)_pqXENB8{xa=g+> z=n=!;Zv*qsj_aOqjc}w1X;7Cv9i787diN~rtJZ_GHSJEPoWocpWHuChub`RGiRe5u7Dp=e!%PZOW>s&surQm%Qj(lM$B>!^>Su*`h9 zC51d{A(dfZVWrI4rC#Wy|941^+oej;gTI>DIa(niTe#!Np#Y^8nLRgK&feL3UpgY+ z<}4@W)I>i*?3PnqXhSs1`W@cwb3KSR9=W|0M_ygW+nngX{|&oWYMxu|Kh}fz+^88e z{q@xii+rtdZJ(hh!g|rnh}D-@t&kFzRZfV|op_eO@AtVq8}D$WDL%E-cptq?8rOx` zaQ)p^%Gi^x8cy%nyWv2Ry}lG8opUb9P+zE!)u}c(cEo7@9`o$akLNY=S7|A;<{Iqi zriky%khHtK!G^8o$@ugO?d1yZchv`*lVru_e@}d)QdL|VNdl*yXGq;U)N$nf_ny1U#YQ4V@caIzDOPZh7kPHak;rwJ!Ia$ zbA*v|a{|B8q0yF9d_zzpVDc>Osx0GdtL(km2eZ>#ZRWjLjz_T`zMnM`&n-qeMKiP%IjaWk+8G%|E`iP7cL`N^Ciqj0G*scfJ!-ldxw zzplH~_0aF|b2_Hg)l6&7cEu>2wR=3{J{wFQ|r7Dju_!Jj`yYR>oA<-JMWy9f9ds0@dA^do>`-L z(VKry6%_N`R;x%8&!~6mY3kgtMPE2Ydo|;Mm{lqV@AJ!@q`Z$NbNOb*zW$hS<(B@V z*cqDG!iOG5e)E!3Y6~1%_E5E@&Bp@B2Yk{vRLr;9t_VI`s9V1n2xtm1YZ{e}(=_=pG0R4n5f(q|v+aBIb)LIwgB9$V# zTQ9*er81CaZDYAen8WqJ!JSTe=Sz5ATG{6Ju2D%=xvZ0)e$FpZDd|_zXF3J#Z+1K? znz5?`Zg+I$m3nN}RM>jrNPKp-(g9wEoWJcf?I{_?lNWj;w>{=olieZ}q0&L-+}$M2 znR-8X&R6-(v&8kO&K~89fB)QLRy#35e^e-PJ=6E!69YFxyH3l7*xMA+zA7~OS;{8E ze4;K*JSwy<&Fl4B*TA3SZrP9KWnJAwmV_Z z=W)GFqVZ8ehHI{z?XJD*NI9MQkhH((7Tf)iaG4SAx6<@Si+5g#v^6NbD_xdBqVm1u zu8wnv7}IN!`pk7;m%FmLJFFx zV{LFYZA01HO0V@{cLMd9B~E>0OM3O@=BR}OGh^H{+9#X~?5h}CShRocNsyc<`DrL! zU%iJ}?#LS3-qzOGrwx1u=eZl&o0_6hpGCGibAC+x^aHIktJnn~$aP5J_^O8F)|{Wu zobJdg>I(4qWT>z`-q4*cJQQ%Xk+wXgXkV5-l)AIM@sd)ecJ@? zdONb2(e`ZDW0JVz;g&nxaK3k{qE398BrklHDk>PnLe<(uwPee^p?7*MHAwI$iQb0k z3b|mD$HRMlEPc9XRO%y__DBAfjMONVwUEiDtnM=_NZu{4xr-uvm)js~V||z59i1xa z{Tv&^ee6}X?xoR>h}n~7wmq!Y!=(Fq*Q3+NKZ`pt3C<@-B`X%)0(=x8vD#iyW{!;7 z9A_o~H1o4=x%{g0?$5g@5td}C(3Sr_BpCLv@CpG(CnNJCI{_eVij1E+dCCBaMr$+W zD!M;6)&o3U`lD@UXBTOXDp^d_@=nx$cC}xhJJKtGUOj~TZ#&g(VOeEGHlkPt)LW1b zx2B1=rc30jpT1qejl1hH3PzD#L}yK?RaI3&{)kIaFJRp+9qRr^r_2NxR)FqgBOnf& z8sKMIC6Qrm7q?nu%Dx2vD_&XAlBEChOgR}Ad~xzhm%~F}cYw0P9hb!acd447-2x08 z8Ua4y{&;?Iq|8iBmqSg^Hu7QIv1bneHp|LiC7$gv$&z<@k*E1@H2|b(VkU|QpE0kj zoPqoW0JukJ%&X1Qv+`w4i-E@qsv>*5xZ2Azy9D@m?AHgYMR zxTiAu0r@cc)&>pt=Ugj~^LzaiDR(XJ7UO~cKB*GAQ1v6K^Y(#9DgjfYt;E9OmKT2j z+v-LzXrB3fvx0@5VpAI&=t)qD&Hfx>#zVU(_YS|<$eO3@nT9vgfSV<=|%>O~Nr(ZYVPkW7|o&Hl^k!|GOQVoqzS|A6vYR2FUoMnDJ_dF2r(5?8GV; zxF0j+et7aqA?7Lh%g5$q;LwA{>hG`dZ=po8#?M1|?M9g8=8uiBN~gx{S044(WwKG-LGejlsz=tAFC-H&&LuifG!nn!XrAVoA}^s8 zCTM|N@$nh&D{oHVCvs)@bm*Vg7pkm^LRrrl%Ap4G6U#008eEUao+Z*}iI@&MS7r8(k{nSCifsaB_euT}h1WLy;c~gO zE#;Y0?U@-A-4tQH`L;J)Y--#xdorSt+Y3L!0F&c3X@`PA{mYhzeqUUlC8!>GDM_p+ zLWfFfIvB5kUGt}Q?W;WYfA1eL?+5Aw-jT3D)fzEhPcpse#~e`7_XgZk+cZlayejQ~ zn?`&Z=m^i7%%?ymG6W^-9cbOLzA~`V|F^mG)1DvJ=H9ToV;IllH9I-{zwk$B;%?}M zw<=iliFz~4DC`e>FR~K2-h)-=y7;#r%R==3zrX4ar4JP2#U(vnkV*sv( zSMV%J@X^sXTT*>d?Is2uC{G(-Q-BbpbxhOCdYQ zUfsC3(H&caSojJ`{mZUs|KorYudeR~tr)sveB$KE1E^NZON(9okx_-U(VG`#+Pm*(JA1+RYP8Xjf3cH9&_UL-260d;U@>y}id zlbd#U=Pcz;ge@=fN=R7b1rI%;O`SrPOyz7lnz^*o)f(Kq-1%uZIB-k`zVF+)bzi0F za#IJWdP)Oood-|q6oL|zWB3V}`g8`e-D(gtNdGw?$5yA>c5me>gCJpy~q(C z_hDn~Zrc9@&1Vgqn=0=60w8_-{bQFMno&8}LVXeMm<*8pkmaS^y5+?``Nnf{bTwUb z^D{CXGvHNd+%a6w7!t!4W`909{UeU6f3Bx^*U{HE%NGvpjvfIM{{8)3n}et|C|aXO zHoAuVSO&=R1CQ=-iljAl&?J5HtJ??mg`IDK9HAPeY9pI(PaS+ngcnf$jdjsUg6f$v zcHi^Eme@Bh+1}ot&9!)RYt`PXmK5}~(_dej6!{!Obs`vg@lNj4`X?>9>N{drGjTcR z#ON!WljN$4%8z92b;yvkie?p*_KK=MQ)razSg0QhfW@g58wHBv)}62HX+5f#uV_<> z2Qtr5K|hdCORI0Zxb5g`AgeDesS($5GSp9hA4L%bLun5|i{X^QN?zos`Vl=*cf)Qd z1OQ^T*KK2+O_`e2R8)LOVG8GB9B=Kt4|!n9u1LuLy4{^ltp#o=`jeH}wKH59{C}0c zd^O6|4$IRxVe%sT?)5#lo@>p!nfbfK9VRz#N)4C3Zb_lz49ZnIsn671eC+Mrj8_G^ zt5WZR-D16|N)KZ*t{5eA@D+G;7m7sPOV*QI`@n!nE?ayTk8jBlk=1hK^=WBJhs{&N zyIM2l)*F?V8dF#lTC+2GrSy#iQrc%iu1Xb`S%8xoFu6u;FLj(QFxDOE3en#@1<@o3 znnd)vO`TSw5$nkJhb+WcT)*Ho8w(Fbu?k))r#xVgW+~^8wU^h7s!mT6F<>$zeM%!Q zQOHpuQFBI-Pms%sIS@X$#EjX5{bQ)?qJ{~A>f4R7eY@vHd`DXpTpOJ&73fS{B%#1u z=$Vt5daB2Be4J;8_x_23Wy-y`wCHd`)+hkYTDJ0s+OrCID%Po5Ze3uXU!|bCx$thk zZb|Uu`75(B)?L(D)17@~E(S~|OC87A6y1y?wWM;^7NzX&D$qrE>N4GTUQ^&tT=sE8 zBx8ft=w@rnSM~gCQphy7Fb+?)XEaiyIU0e!gP-s8ty%ZBw)C;En6u=O{Gjxrx8ET{*aAw+Re?)QSpM^P>$P+ z5K?+F%zW}^AKp3h=ew(KBqS+zUX;tN;cP;rEX`D-`H^jQxA(VGB-byd(L5|)r)#Vo z=XI!Wa=0O$Q4mr_vsQcZd}K?4#jHdS<1duE9EMR-5|`9X-Rx^7CYQJ0GM@WAvHp`U zm&-n5$tRnF4S9sr^_dLrC2!H%s1+Pz;#%(7r2iZ(f$cDf?yI=93L`s9(WG6G&!KX& z%|T3M+Dkq+YkedvtW&fCWUS>;_tuK(^L{nA=ODAOX^!jUIG@~NtzSbr1hIx&DrVJ` z@KCp+h&ZIM4N)4e{>Jw`)1opgN_Jnb(C|HH{P@^gMY76YA+0>E5b578G(+oz9e(JF z$QU)naqr6dP#0!&Cx!fiDNw)6^x_u5;*Y`;CQK6+a#sarf|i#wrDj`&vq*Hp{#UoA zUEE{f;Yuf3gblOZz*yWivf1oX7bQVcVLP8vn&{JYkc`&a0xPmUh{ASdy3b zqIs^Gs=9hSm#<@m2m9J}!E92-bI@dM%ogK1KX+U{{37oiWLAfJhhj5Oz&o=PB6?3j zRuqZKA=da=C`_GE$}RrItdRBO z`8{3`8bf=}Iv!kIAE5U{LA7hESYafe`G&ur+IY(^uk=)Z7B6ndIjb&R^J+;EMle2> z_vjMReD-aJXrtN-<1G5@P3Q@Y+r3fFqAiPzg2I{B4x;>g6$qDa_s#dr&62Zj8Ady! z|AEFcMp^7DKiDY8GcvE48?k1c;>T|f(pyfU_hvrGX`z3*!*|qpvGOHKZLBH1^imvG zWKt=Yb6C=d{edGXr7d$%U`3+jbrOc}kd}RBCtV7;*lmsJ0g+YMlV-(k$I)(K7k!bh zedm0fjNR=rCPIGRLh*?;Rr$o2BC`6O&sdMRVz+yKm7GDhG3_A+SLv@^Z+1|Ejerhj z+8CJB&)vHTX5C{c`S@&?%foNGC=HXY@1hwlR+5L=GcVly?67U;K9^1C_o>_dAfJi} z{MNU=8=DNkwJ}@aVD!?WXw;$)A`SI? zEIEiTmP74S3uJlVz?tbWn?3Kew0*9ZS=a~7IZ`#w{6>-Sfk2gJPrtF2 z8IQwTAt2Q>wfnGK=q#B+6KRf?9~>ImwvX})F~%lLh9++W_?azY5XbiAWt-SUI<~Gc zc~e+@BxBEZaKdpyN4)2jyg~IYz@!rImi^9S#dY5YrQb8<0zApzn*RO{_m9d(5B!d0 zbzIukv!{>KKO~%T0e|J}=&Nalzj}B4BbzYgy!Ky;iKiwy$XPMU*n7%42WS6y0}*F{)x!O6(%~l1{ac z@j{hIxggmUN8gzDzn(OqMl$pFe7QI&Ii8Ndki+dE<`WwULEkh}HoI>BHv_7Qii)wG z%i+ct_A7`bWNG{U+TgbqWC`1=mRe4%)_rm)F;=Srx9qL zuO-J4m0Rxn={ZF6`S^ANs_l(E5NXt}px8qZAh!6~9kK*Dk_5+sct4wU!|A_%`*f;p z>QkH2;m&cVb)qtqgAXEE)}NwwQC3!66U0sV_)F=E7Go~T%l6~%_X{8bp&Br6Q1SWt z@*1&mH?PA{__}p#o+Y_CkC9tCBk0cMdYMpewNw#<`7illMHEZ>u2PFl_p9$(l-%opMg6=DGoqC2U0^w!guKTVP z_WRoq;TXZda!Jf2ZS`6n!j?eT;F;X`A{jXiTLq(r5C%v%fJ)1)Q8oeMXuW8aX$a;l z_0!%kN*6yJWg>1K&m$MdBPVcoGhzul!~~EDhl8IXDJjW!UDP|#$fOr{>VFb69g-FH zE(?sQ8^8)kQPwL;Qvq2_j$+#8)osEZ0}r8?GAycS*}5Wx-GYe2pk zcbw{;Cv%^Ak+^;bsv16nuoZ-S!&7nmLnve}qKe|>NuyxYEj%tnxi`ii>!VqAz1eDC zHiQle&}_R)HcFh7ivm6GNNq%>V_Oj%vL1b9!>AHSJqdtgs|t^9m>*D+$kEK#B9jD1 zhKA0*b`cF*T9C3S;fiI7(jf`v=L<}mP#fcUEzD$??qtBuM7SO~;GS;^NQj!W*G|awk=`jea7YRs&Y`1ol9lp2C`3a4uaZ%VO5X{LfXp-e-paOjWI?f|F#10CrHsv#sW^b=TUb9loNiLjhQ!9t;}0~w^B z8Q?(Jf|J?Sao?O|y5b71jVShHp`_D7VWI`9%pzP5#^fW?H zP!PuJ$mpoD?LqWN@c3n9k73dVXd+j!BgqIlP;lr|>+dMI)JH-s>tRO|H$065KS{W% zu+k|CexFT~M(*f{(W%p%VNzjI*{`#Q?k=|_{m{B5M*Xp~5@&bO4X#??vaF_AUM;G8 zRd%NE)ToL3HAU{y`J!GfWl{%S#kyNCTRfBnS^98SF#FGK7n4iAgIfSucsf!M7VzUd zCg6wO_ZrB|gct4u?m=BWe*;GJG^xY*jk0G?Q8|O=D=Y&+k+K^rZ^_(v6O|r(l-eP% z?MRn9HuqrMm3V}zHDrwHM@VFDY1@KtZ5L#k6_Z^otNlGkwe-N1IS9jh&rSPo_zzrC z;j3V?NuzF`qgy@ocDB7b_}U{s54*t$H>TC3?X>Rj5E@0 z?5#nIn%PQe;Iar7Im=!Xv!zk4aJ7`ke)bzA+n@{){n%N3HxX9$;+teDN0_Fr80UI= z`Ept}@uj`qRJLEEnf$K8VfXdSifNWe)*eF?AxNky%=C7&yV)!SrJIZzooQdu(<$X! zAEoUU@K{rz>reWkBSTBO(RkFJtko5LmQ^@5~rfQbLPfHWp#rEX}snX+j!3q8}0c99Wlfk5uWZcL`N66WQ)v zu~E(>y{A%H@s`=W-X;IYH{Imr9=K&6&-FMcZ&dLaLOneXsSm+U)FRZ)f9(Y5WFDjo zkNn7IxSq&VEDnGfMehJu5y&JI>uP{QV%y$5`h!A;%Tzyns0qjo%89v`AS5sfFd>>^ z+i~TV?(rR#Cv9~FD$i9Fe*AU0CYVDlM*Wa7(Yc5T8BG5WolAf1Ywe}G^kgdEvSt@( z3Z{=1a2-&`aqh^yNJ@yGQeFcz_jyGPnIY~%r9;ovB@hfMCihmyoD1m{+`sALKjNB1 zG{9Bt4T@nCM%V3AfF!t%cgtYSnLkBd>t}aUi%{z^uSCEiR4jv#wm07Vs=jUjBPduB zUaMlcq|$z_Iu2MsDDBXT_;}XmYlmf4dikK~K!DzH^tI^<0xiOT2*fnvO3WKI>_ch> zz4^6*0|4mTGNeSkR{gvvqlPL^4EG>r)l0&bm$nCNAszwxASxX3#r>#`Z|}Opq)n@= z&*M|`_ed1jh5-;^uT{F#mtZOahTXu$=+6Z9Jcz1CI9Q&2%xG|c2^e(9Ao2m-F&9%#=l!tq+HY z`M2$|E!R@gl`97q=V!piHskSmDK1KnMt! zMbz}$`yUeMpMjaL3;P2Hao2#(!lyWM=z#WHSJrW9yVs?j-=Uh0B*EbH%54ZH*uTFo zp1fTD>@6%#)NbMe^M8K4sK1Re4K^0WuI4dsU+!w6H@s^w=O{g+b;Db;58H=_f|tXV z)kj8$3dNVV80ECokHu7I9GvO>+sT@7M7pzQ(~Yu-^c#bFi~-EKF_rdjzagXS{%JaV z0bK^ge7S}F$7enR=MpH}9hY}(wJbPW!P4jyX^swrloDl$`q2H-kj==NfJx~R7tI<8qx1lu+T$k@^^N)Cz1Cdx`)qN*j85P3pyk$w?yogBp73K=y}bQ? zybjNRo4c@kh34u*Cq=YQW)z#8__)PiV}G~88-o)2(ak$;jS(8_w;i#?`p8uDdi|BS zc6*UmgV8F4r)(C87)S|$4TC@&9>Qu|CM(~4+>OYy*V}NJ}a{`9njQ6=%06IrR<<@B=e&0%#fOKAdusJiD ztk+9Bb>#e`+U`iYINdst`btlW^t{OnUF=Y(RrEKAUr0ZEj&9>rw-&clo<@bV|C5Xh z{NnyM6@zDe)-N!KtZ*nTZHw{rE|)EB`Py{^$%K8`lBIA3+`$k94?^G2)*q&Scq!@7 z@PG_JXk4zX8g!3*TrhI;8fUN58s5WlQGy{7{%*RRB_b7d+j4Se3Qtl*Pp7vG%4#jf zcCil}l2x=NH!Gpb+|{N0Lg577*zP@Ozp~k*ow)-}-y3C)<%5{j2L3V>U^-I>nwP77 zx-(DnQ3Z<_YTdK7xu7T4|4;+Sy|m;(dnQ4-n&=3V3o%Dk1upqd7I$?|$3;Y#sK(;Y zBlc^hL{rs0Iv1k5Qav7Jvx=N1)(k%e5FsB=u}0-}oh5ydKPr0H{gG6`*Gp#R5=408dDB}D$8 zixL$J22}l|4g3@c%R4+}l-qfaO&>qd>Xu$x#-%)UJ$47#sOZs;L#uBItraf3_{rh9 zu|}KF+_eYfHSH&9*JVevn^DSPsijo@;bcQc)2AvQd1<_|sa%qlLYQ1d1Z!A>$74H9 z^jvnpfTY;nafIjz$!9jci;+jx9_0IdUD#Hy)%GU@QSB%F`aP-n1)dvHaT>z!fREeIXZ2~R)3J% zuUnl&cK2yvbTlum-#*NS;(LpASfwaIkq*8f5(*%YX)yETU+D zE2GOPNg#nz4I$wk0W}39cF1Q!b`G?3lsP8c3JiPnSuES#jKstTHN z6}|~L+gEgWs2Kg&25cL!+z!-kL=Q0ryZZ*u&KuxQ6@idVx;_!e&l*!c;j4drYP*Q1 zgA{zIEi>^usv-eDs7Yws92A0JNm_|yj^$LyTEg$g5OIa1RiSg1 zieRPySOo}a@zZ^0+IU(4|7D0aq~*rrw8Fsv7*Jd2#~>B$hN;V!11%D>shkebnK?!D zN#QbUN{my(PelWIu;0QE$I#G_4p-?HlC*5WKIj}sknLXmY~$V5YNO18YW_ksK&0al zTtXZ^q&29}e7a{_O~G}&8mm%PUy$BiNXnokS7Ofj=AI~(7Jx#uMhF;D+SvP7GrE_Q zJ-gOa<)V+m?UgW2p~=T!hn^frW>Qh_4DHC-ofJk(24nh2I;o;~i)*s#exx52jCl+77=+r9PEKEtu%7j`nF?DHH1BUk8LCU@{z%ws#{NkXue;1SbDRkwmcyuNz$F7_(PFj)NGqM ztc(P$P6%EK|IOv)8oSVE*OC?-xiMp(K+l_e;iI!kZjS=a(dvEc&Z>~RW%jpM)SvCZ z@A;XdJSl)=?x_m^7s#SuOcfA{3TCsRj}jS$Bm&w1KUn}xXFjkr#r`*)F-f5vnR#ky zA@FNcxF29`LLah2&Z#zsTSf0udB>4pxLNq7ySurLXMcs%H#wM__8LjqMODk%qlIndZ^2Py6LyA*1D@e{Mfb^2Bc~#JtMOzXTGF9JxqX#Bd%b)6 zAa&v5k}-8>O+@nVt}9bAIw4DXXOcI{%%$s)LE=hW7eH4Pc^n?YETc-om)Ui;k>MVF z=T@!pt%L-=?{~FegEOCYsKzP_0%80NRQtPL{(5SELf{Fra-`2q5w@p|H0EsPhZn;| zB-p1e`7u51h;1Kx7TByR+3DK3b7((LsgnF{`jLfK=H7v)?&Z*A($Zzp=QJ%O-gqiP z>w2{85L;R3S%9d!)y}H4-OBa{NcNsX9AQmq4IJgAIvZ|qHqco`Cdu0Csp!o#F_0uy z*Lw*{yT;xuioRNv$k@wKUe{hv=Ma6We2=%Mv0Xb!;-uR)*@8AV&5o8mWje~K z9?IQ8I%nbxqgxKeH0t~y+5e5&(I8@}!{$OOTfoUb@x+(iUWZO(mAwg5_}+pV=k9%@ z=740W+<|cmQZXD-yqhNJ?@Y33|IFEIDJpFo;z@txoX^EC(OzdI8)ZJM738U1np)~T z+l2hgda1J8azxRDy-MgAXd>hA)%OBx8Uu`sj6~u$Lw<`~7mA8B*z?xml})In|HWBi0J{{~B!-4gDk_ystoq_Qcby zxH41s%iVm zH}o24(u9TriQ(RJ*X}081bv=EH+$_LmS=LlS-WndMgU+7W|?r?&*(a^RUX3X0eZ&Y zpo^rVJ3dC*LN*>LeM=Z($ot^sCBa|+Pd-L*=+o6WJ^THg`tLAk82Fo}lUgTCEcRD( z+KmlXto211X~dwzK(99hL+;Y(L?NjAZ-PQN)Na}?d|E7}UCXfMR{PvDom7*!C#!8n zktta+#aY2@mma^(R$FN_s9>#psD}#d?U*am46|3uy(0`+Q<7yvX{V zaMxHyvL#wx%g}2GRhkUY{p_|7c3k43yDlDS!J(RI?ZbTh+Ug6%t38PyymF6crZOedeqv zlo)jK`}<>59=-pn?tZ_Q>u{-*UrGCkQvym&)5o9Zyt@6>PJY!!xOPL#n}~V3iS_g! zFlWvlhGr9KzG_pQ{(N)b%vbKHyO|d%y*SGr@1~b6G0ny^3;F~~9`V)8UynE){rUBzk56_DXvB}z(;q1<>{SU3N zP)O52gxnB|z@C4SzW{UtkYJkdQia#$v!8B>I6rmxfawEFpJLL`3HQSUz@PN4YiLVH zmS+tv(-;9W!OsGG zfl5aE_tJDcu#H_zHUWzRM7N3!458kW01Lkw4+y~ggPx&Kw@YtWlavdzYod3sJwx^C zhTcC$a#g`?9Zpe6m;DljbdRX4-S++Si1Soy#Mn^qhXyUjvZZTt_MSVxt6#Q0@c7Nr z_z+e4fft{!|H!k%qen|0gbfc3m0{SRB~^5VzOaNWB#vlz0^4Qjf!_;bLee?#2FYF) zPA*=}_Sr?(Iwrv++pWwC+}M>bW3OLjsQNk9C?05HuX^~d`qSsnLGyQ)9lKAQ)bCee zJVEh_;F8ST6!_u?DK~%UtNuA!BdUHp&jbdN6kBVr;bhm*N8mu1Nd_?i#~}B>(f|)J zdos0$y$qV25%6p(*NOO9q5|mtKQsdq&#>%N-BQoodIw zetpgmws?RVb3?`4sPCnJbo3+7G{H>kXCa$@Me+ZgA^c#^Ds6}&mv$eAaJlmAZbW|f+X_z`aGa$af9Jk4HNQR8cq>+)b(+h5kY}ORo4uZ`Q#VSk43PxB z1_xZej8X7&2JkQRG))MYx>Ppy;>Eh%7gA~)Z&o)f36+PLL?K%So$&thCskfD(!#=`(r1FP+hGCyRv6O%4yAgkmmq1ROTtDHRdLll&>jsz5g{itQX1JA?GzO%WIo3WDgcaKNQxYYU`WZ5=e8uar`O{bB#d+|c@ z+hy(1$Mw%tal{RiHkvgGojjoAgr~Yf$*u8Dv8=g{sooFlY8(@6*?i8CNmYdrDa9Av(?V>}#Gs(VMYLYY@@&mBr@*6^248G@ zv{o?Po2@kM?~HBTl+tm7u}k6IaelmNn>Q7OE2w@Rb9%MZf&>O_yWHJ2Uh9yy}pnb=z3wK;il^J+YZ-D_kLF-YFMg& z#po!xx9Y_hPi$o(n;NKHYUMi{pimI?prHBpe8@EP)kF-DJF%&i*t7<-?)Cl~n;&>| z%RAYlgHcJVKkKL4k$XM9++>p-#@pe8}*;ExMp2k zdHjR3$>aOZ#y+ zE-9JZoO7XGD*#8E(LTD=dMf!*j-ae$gZ_C+28)F*%wpI)HClx2To)r+2vB*k*Pjeo z2Vc0BsA2aO9)=zy;XLKf6$>4>D7Dh*#G5tW`|B4&Zxe~T@n!5|wr>v9vKM#ucX!`z zIno^W?S5EeSd^UTZ7|a?&56zw+!F(M z4|ccqinBZ_MH7nbf$R`AH)XJyfAz0pFkp&ZNRaGVb$WzXu0@=PW^lUo#g5WT(OdHx z{>?0?ou0-bQ=~{2fh0tYUMi6=h#WWm?$O2Urr8}&Whft&;07&8LzXgzHmiIr8dE?D zO15_#53C4|{$F28K@EZi^a6)KJ!DFj5Kgeuhtah|7G@Q0Eq`oY2c#l|xJ-eiX43Fo zYJb%vNEI;apW%izSnf{hYy#?C-A<%BhSr2wEG7(!bCb`~Z_8iQFv zBFH)lX~A5K1lcU$&3;(hX>h~w*wD;J0R@3LWaD>1wt#~Iaz~u0M-{@XrziXu7*1-Z zzqb=33~N{fMlq}aLlC4xG0F^T4BU6PRz5f_SR1Tbcm&At=(awdo4;G6lUr<+rn0sj z)!#hI@NF9oK9!-+nF&A)e2;|#_dI}vg1Uh2H4dSQaA8mXc$QA^ZFrA_X~-(*d-9~_ zfA%9jHqywr_cP()<9IdV8OkBdm1L&J(7lj%clJLF_lFWVkFrDjOu()P7E=y%f#?p7bVzy{uBKdNEqh&Q{YL8tJv190KE@G zF8D=)l_`&Gm-T$&p31WsXOS(Nej9BRj^F@~frnuWVAXjn6JBw}eWahbB)FR_eoky%&5;ZaVBKdcq zR?4z~raCh-`0wvqrix6}X)|Y)nRSV?HbysJ6}u>vjfgxaX4(E_%#ZiEeVd8R*^AK{ zQI=K2AbChI=ojQ|!a|0Ci(fVff_4rw3<9wqq)%c12zZf*D&J3WpI)Ux*nw6>OtOp= zw){JgUIy_8z6PcokD_McRSyu8FDUBBPs9-38y^_zPs4bt4$3RH`rZqNMe+emKZ8cxGyp@qKO3Oxy$^D=jT#?_EgUaW|#)&yNqS z6YxTjI3j)-OUMPuZ-Cv6A}5F&y4XUL)0RdGSA9q+)*?=NESiY>#k?GRM^}bj@)?@=O;sVnwAEM1~Tv zqCB1lOeegAz8W5$VPbf$OJV8tZknL4|0<{3%H+neo-%&>-gy%$hELTqCu)AYW$=7+ zJGZ)-*Ivr*_8|01ugUORVW~TgJKEW;VA$X}>&^U8KgrEcp9-Up9jNx#9j~scy1DCAILj|mW_#W=yo`(Ie`K|P;zY4e6o1S&#nA)kBgmPn&1%TNOJh|@~7f8 zY--G*D?@(0=rUPf-^tfKfzT8_*L-|~H1k=Z=GcPJwFVfH)4)7yERS42^k}y1Th ztgOhGJ*iOWw-gjQw14a<0fg`gJ4^;)+zB=II`#$4nvqd9jF8b_ckdM-LJhJfp}!wZ zxzIN$%JO*4#nC+&KMYGZtfL9%^Wb4HgRMXhK&(y-z|}g+PiL>C8p629OU_sBE>9(m%teq04pTs`Jv;0P=&&+=i2m z$84bzzj%Vgf-8kQdy7zpi`3nV+NA>ZU^eLd?3u|S-SQ42SU0>*-9wFT?7q}4VOITk zq-O3QV&uF|X$+QXH3BUkqvz1?qrSY1x^Crg-6En(tAbDTTsim?H$(DlHG^p4If;!N z7rsPy4B6pFIixASWI!WxJiimpfou=Yd*7UkKNmdx?LRNe=>NCPJ zACVFvsasHBOVaS*)i=e6!rN?;ErhIawrUBmo~z>ey8)O|jNqaC)Xj;#qe41iIL$F4 zTQw)cN>wuDXnG?cn?LeqCOaU->7oZ$oc^vn4OMaL+e==|yC|7BRHe@ci#^wW!!s}c zdzQz}dR$SXZWn$>)4KX)MHa*TEyL{fWtJy1GhRDK6dJ_!B`&tow!~?iYnLicVTiI; z(;8yjGR*f~q5o$(U-F9)OzM(PDjsS#{``_0{3dcfd})!RKZk+hF#Y3V*B;5e{bs@0 z5r>KtqV!9=nog@U@~U{8`Z>Y!^A*c{_(t{*6>JAYgiQ3B~>0XjDdjm5if^=v@VQ5!)!fq?UK<_?gC}~CEfRQfgHosM(sMQA<+-l{Q76U37e`(1WABtYlBd*9hQp+|-xSj~#HBdPx`hE$L6Xdpp z->9L4@r91>KaIlQWU~POmOXir__-k@+Q{4@q2X%;rdbKs4*H-e08wBJ=`@NqJSxaW zk4lek2f~Sd>kEfYmL0b0S4`U>a0x>T1&lDX5F6<6$aS`OW0OWA_)0ADliYG3k8mYo zcu;f`tvHkI2FvvD6YoX;bZx01sqA+Xzg=~)t&j z;_zfbT+GGOmfNI_w_TInT{2?p6m0hqSqP+47}EG=n}#Z4-9d^)JP4@u{j^gp{D}4G zOHI9xRACoK$luj9A#}*PM;Kt>SN345w-I3aF?>_!E2<&6KTe0=VE`O zU&;LvZPWd@9wREOH+~_7P5zUNHekaJ=8CdhrnTCLIUI=4C>%%#g5;x6xC^5i$#}}p z@gmD%Lu&2X;yJJbmgHd*0gT(BQn!d*(V;41kXa!5Ne|&-piZa!uZO{~&6cs-@^69$ z*d8Z5(okd%-Tm#@g5oG{k@pzwtEW<7zhH!l!(wp>W^iYVeTHzy1<6W=nBN--@$mh z(_)zCLIe^+;wZ$ZCrvw!IeZiKe;l~s-K*A1Svuw_Z%8Af)JR`N%29UzSpGo%=nR3* z&LqW-S4HNgRY%zu*<|coC7Yhk)z-?LewoyyaIU5I>C@?JKCjgCCo<3$x_>M7D37P1pdC6L^NhkunArl(KL(P6 z6M~ZI3E{mHIG39mEi5F6k%9ZJO-!Bx+X?+E^h!<2uhd3x3>I}veEA=S%P$tk( zDf_V2&5nwg$@Q5g2;f_`JCZuum7cxPxd4&7IB_yw2~+05Ux$C1E|TNb+o-6J1~23lgC8w7j$e^IbTW&uzYV>WCUc={!lhl46U{TOm_ z5csVNe2CFxC2%+(QnX+8^qHeb!+mhjgg)_}Mr7QU&n9 zDRF=NNZIovGtg)tNa$Ag1dA-9rn!CuLqhJCn&B)NHy|}iXG{pd2w}4T9$-}Tz_{nr zA0)x}_#NNpKbK+`P73Ujy-l@u-eS&}>+}&}N#JzJtjukhUMDO=_HrLzX46Vs>{wj9{IIgq}I6LcA( z-o*QweVaWsf@kGnrGP%v;m6iY=T)`V3QnB643Vloy6KhBuRIQ|nV_4uYaa9BXXNs_ z%R$J6zRrk+!)JGT9H0Q93)KDsfujjoN|~90x&geoBIYkk@|2F|4@Kg{H9`qepRrfkU?ep)2j}1dVbloZ(C^pxu z#s7g{jM5$A@uWWmQp=BV^uve000qxaKA(WU5*U*I925lXzVqd>y7p;zGip`-GuBR{ z_K}9elvSGp#U_KuX_U};tGLF({prOa-=0s|-{Y{(ViZ)H#)cNVd??y=G08><$Gl#9 zzg#--uL@kL1!YM2ov%mVt-XFYbmZ2UGJc&dpRFQ8fHg1gg;Jgqk6M55r_k7bx22|; ztiX|(@7Et5eh_9yTKc}UT?fc_>T`z-%jI(c6L=j63skwCqGk8+qbA@ohgwox(DoI_ zE@BYg9mO%!hRV0P^#9}R&BL*5!|maS%rZ}rDO1Kw2^k)9h-e_mn4u_2r4-3bM23(d zV=9VBB9vK$2T?SbN+Ok#$n>pS@7}-P_s93ow~u4*ee}L>&-2{ZeO>3d&ULPHU5Ok2 zR2Dy@H+httC{Bd*Y`|D=kPQ@(P^hztu&X>4*sN}w| z5Xj&^-8>xltmW?InL82h#3Bo_8#t=IpO_oyZa;Q$=X|lt^WLP1!_h{Xi(_?%{O*Un zdv;RHvvdDYe520W*7jbPB*y}|6+?(R0H-7&RR!e0cEGq}S+<}zF=0!Rz~Sv#5rAZ@ zD_R>8qRNGzhj!-=+5Ac6I=2#JIKYSPefH$ZYvC86_Djb^6rA&B0eJsKVnpWrI#6E; zbAq3)GGu1^OE;8k_W1PaFvlgXdGqXD)We$_%=h#|F~MfO=TP-@U}T`LLCnmk%^!=0 z`W6Qf@IULB9eC_Fl6zgcO!BpK%A%e0fv$nQDuNg0F70<_O1!bz{<=S#di9sX47Ie0 zru8CzuGHo`A}?MzuGc69sW8)r>c6mp0DMB`mh?Wh^wG)n#0MsJT3Z-WVErKnlAazK z!BiscH_#{0Lzs(8QF0^9!3^=1^4A;SX@JO7kmFZZ7Vo3TA3I^+feIG+7PZ2)IY9%% zD(zN_C&?rIq=D4j+XEF%iaY_aqFa5Flgqd=3mlr zB{92cmn0vvHOj_w6ly-r+w{#Ny`Am;`L?g+UgwxE5CYL?C ze_hlMwb^(;4lJy^7FpGSIogm~5Kju0ZzxbB`uEP?c5q@WdV{{LX=9ymlE?(kRN$|1 zb8v0oZjdQqW_S`jM$by#l5fs0_7fc=DJP@q3WbhVlZNFe-}SBcXKWFd5v|ZDbSXK? zmwo!uLp?K6E8ErBJbQVfL*SCqD(5q&PcDux)BKT#t2~2e& z3U)2}m&DA!tJj%$Gt97ld8;4VgvYc=pRtZOHOVdC*`b@lG2&ZwV-4GeQ1o}9-N3R5rYog;Z z{9LW)KbSN0XuUgHmR0V)%_)l0DaYM8;l{(0vZvo+!vOZr}xuD>`bvY?tWfk z&ptg{NooDU|Mx0)Xxy2bw`u=O+IZUSVAM>OoSU)Y?oC+@CbuVuMksr22;B`p04*bz z+#w#hLu#IHC{SdeKDqJz+u;I0U+5T7iY8Zz_^<*Ef*isIVclNR#3X~gK`Rgv;DoXq zB;bOnLscT{x2_rX6YuqIa~&^m7Wxolc}Fb0bmch1MY~@5!9clt{34$sxn7yKR{Lw} zJ2Q`@q-vi&*J~U$l-9cpO-Y3NbAjKG8LL zqH4KDLwyFP59ACyl<_~v1#kPBSd6k4oi<%2+NlG{WazSPLoooHpTDeu0TXFN=pI@j zp-{qE1_dMD`9+Xd1XZUUghrU{I zs1I>A&YU`>fr3;oNx3zrkQMihoLpd(tpOEZ=3+GJfnS|=lVGdB!LnQ8Pd6Z{Lwg6LZV6r>)qz)%J6N1eF)|OOE2TFv z*!Ss$QB_Bp(k*}ebk-CMKvSB5?S)iVcOBRwUzB6CjRXsY@l=jj#6kGPWcmG-Bb3@; zwn-4Eh~TU~d#NB3`EH3*T(B%e2sI=>B|n4f z>rxxLMW~WaPPJ(RyP2v^P5ReOZJ|pB`=3@8(Pq&`K(MXPZt#x*Q|5c&@KGv31I&EI zQK(xzK7vE&8ApjBySIqt;vP)rREI}f8VwB0#m*;7&-7*?lk*(dz>tYt0`2B8Xzl(N z`kxXlFTi#b55kNRy4u)~Xle00A3HmgHiM0YkbYgtI$UTF!^k;qllUW)r6=zmdaNjL ziA4?~EW%_&xri&Ap<4tJ-Xi+T(ow)%q?#?JDOa4Zs3P`tEaBZ2A7%2_Z?h|+U~M)L z_6JG21Cu#sK6ru=9cBsk2fNY~#hz_)(l-+cgwI}BF5O6^M6OyVhl~x&a%cw0KBugR z^4|U;ONx=OrIS8BI&*!+wu#Xg8QOTUAL0f42FquNh}PDx>=53;JYLG00%3uk3;bs_ ze1>(v4gkUDauWp>4i9=D-T6Q^8TenE78C+sLA;=9gKqpj&N#|XFq&v^HV~X8CTa0* zQF)ds5Qhpy6>R~b*}|CvMSlXFCNMh05ZU?J37j|_y?~ifYT4DfX}cFO76k7O?T{ex zR{`)-`ALrBKZqI$)HAl4tLZp?hp>VrmzdQz(4er5irIul6l@4K9Ugg$$?n(1wjpno z<^P)O^kN=8`+~O`jIC_^csV}f*NP8 z+yrN8%Q{HcPBo5z!}^_W68#Q|T=q6JJwosOEeTMEUmbunXa~`qUs%&zTZQU8Xebd2mq0%Ege6*kVUvc?+Cq0Bs)Nw6|&CRD*OtvaVC+ z7z~qhiF~7QS)=f~gBCdi(T$4TVBaLG!xb|N*fWgk2WHL0^yP-IytpH$$FggSDi{}y_ zRKF}16zGjE;7Rc{+*g;QHHa~`fZUy*7bm(!w@@DQa4Q1@UWHh2l#B7C?z=GI55vFk zaX4!yp_fB<$qS2v{NWLXb50QUNKJrBMq-$MC%nKB(FAs!-165EFeEaB2%;}okLsUw zrI^`leu=UO7U2)>q_~L)q16g1DkV0I-mInXtOhJon&}Y&kg2C_A?b zI-{Ah$p1x>?(Xh`?%+{rrRLxz*N=j^+lqg;I1czGI0g04{2}Xo71!vB%Ms*_r_Dsl zYTuGa%Pq%$QJ6^&=6S*{slHNmqaXN2rlCKqE|f-khiYPM%vy-6c= zE2{}@-qRo^B6gW>W3%`C$d`|0*=*?b`P^4>&sE8ja78WXWE|0Y-Fj={Mr zd^ExRV6tIh*zHVzxxbG;Kel0!SGAFHe&be z{|A9!bipzC@ne^E;d~60%n42kX1Bl_wWs$XNqO49H3Q6;8!91mqw~sWyU>n_H>rP# zGYFpiHRy&4YA3rkhUEo^+!}u>H8j|$0vqbd?2LSV1hRr|FzPAW&^NRL525)*Sf*~`6%ss{9{)dgSaVXo`sHuKd6%>v7ms(8aMe;-z$&xYS@Ia{?e z%T4L(#ni2h6cPT?jZn_6V&tN3Vr< z{FC~^>7k3>h_8|`X$2mbHktrGsRh;^ArE|cnwga($Kgm`rEzdCr#`lg#M~NKq9xtJ zi|$c~MrY&??3egdE!K3MZJ4^1sQVZ4(TpCvN_Oh+gpvpE7F`zUwVxGAZckJC46JbE z+8$!$50x#DU%u0?wF49b<`YsGQ@%>7zjbRh6sGCi5!)fMi8ploj2Z})*i}~17Hmh? zYj75({M-hON$Pj>lEo9RQ0Da3T@3K#F#tMa45S>CU;9*s87sDb?*Y1qQo)>Z)MV8P zP`nUcr2Ubw*TN1=`-#r^*0qm-3dxg)`qbr_jT;uy|LK!|7U~33_LPdj?S)xT%S)T& zj*J4v)mc0lE?uRD7+!+iLjukcpcMKq!?S3MglzS~0x>1}aw8xvi#iVYweUTl1L{$l^pu`kQ-~WN zE~A|$$7DyDGg|I~LIP)G!^X{r_<}Q$VlZ5{)q{NV-(#|gJqG{;Dmx3?HSF3I5kGWI z2_d5A8_hKxtO$OBR{iy^`X7np9WX6krp+Wocv99af%hDxIO;_4>mk1&W~~u&z=Plg znqV_wII`e>ULZ2&n$>b8Rd5aX=blo$z|Yu+I7j>M9Wvn_?7RO^nxjq#BW-v#q{yew zLTIoTg#6G-mto2yrrOq>r_TOfTl@Vh%a+KHm>bHR^zyEq83U?a)Tk_xmET+?+g5tn zV)+S?Hr#fdh*AZ8yhzU^1d%4Avju4nOrN#y%3PT3?=wj` z+S0u&C4Hb(2$JGw=;WAf<2U`25xBS@pJ=(5ocA*JdsX)nr*rXNtR?aUAN&ay&D|OJ z*eLK3b)ds*kvsu@{(L7>xc*{hSCtSt(td?k_FfDa_T9nEWS9!<er^V)}Vvfr5y1IZL;4bU3;fi|G_u{!bn_CtN-;K6RK&cd(ZB z%e6j*?*rSd89X?;1^nvnw|DRr3S`EmPI+v7^(^V*!nGS&A%DKvo_C(Pt#SU?4Q<8K zp?QgZ`%IO$*GV?lJ{Z?i))wekNS*5z=#B1=`SDJif8w5y?BK8K(D&IR-2hl)wPD=X zjmHDAf>g*)==+JsyQzv1Q5_wmR)PYB$pE-KbNJ&auP7g0|3nb0Ye8!DN~bJm3@mJu zAl(kg<;LoG*`@i`w{z)}xip@(Qd+-7w2B?m%6YAeR9n4x-@iZA|DxwiuV$Hu zpIIGU!Kb=Lo3;QBEcLB-$KyB{#EwuZn3C zF&twijh&0^gpK^6wnq6%E;droR0N~B@N-k4*-cvKkI^Tl*wCFEFZGUoFh1|STRCPO z`?%#%Tk2CcPhb60AHBI=mfTo5Ag1uy>r0g9+r6xR6i&1#Hdn|x*UM4PGM!=;f4O7z z$uXIOPs;S|ITM^poMa2G1oRcFEjkNbUh=bDsvy&JuOE_0U{JnTCIIFz;6v7u~CZyMb2q9BlS$Yhj9WVyT zm=*G-v9R5!lL+}|tad2Zbg{l}{aD_k&9lK8DVLw}SDJ60+-4n<-pQv%CuGMesK2eGj%G8yEiC%7+4`Zrw_Z$o zx@GUD%P*}>l|Q+#RxZrGK6;1qmcXa+a4iKVE%L{#0NVzN#C(>($?Su4zY3SbB)%=) zVEg^9Dg4N*?I-NoxEaiN5ANNs@h&~!!kz2KItQ-Qd_4K*d2aK&%x%XwtfQA+?M<0~ z)#HB3V3w=YgZ_P@HioBEgEnQGw0{;H`Dro%g~;0vp}WBn5q{^ztk58b?*6B5mP)+R z0NV~ii1oFxt?-9iyWnzv^3@O3t)5p?a|^>mez7t0>)RgdG|W`hFM*+{)6mfu>3dlTlr(!n2B$3H7EWWx!DfaIZ5%oeA^!u zN8T>Zf9TNfJk6TVBQ~`h3@@4P27JmRm%SP4?t5~ppesd%(mJa;8(U}wF9r8+tck&8 zgUK@scN36pfliT(SRLdo;)R0O-V4;Agj#x)O&vlRBy3z^v=v=HB&ams>PJgp62Ua9 z555x7aM%VAy}$|M*qvZ9La1guBc4)`2DJu-OGEd)hj!)w8CpZ$@=XvFQD=W)2|IyUz%D^9^kDV-KZ8%s-r4)iV z3~rfK9XLGx%uPdD0gk)Go8(SqYTCYSd8&UO26u6;Q1m+2w%xJ#Z;0s<;Uj?;a4}Fm zJ7|U`v=bFjzCaN=lIX<|fa~!5zsBBxq2VF6Xs|3LdD zv=Wf6lVIt+_H3wlP1g!>C>Mo^cKg<8omf0wvxUxKjskga;$4KUDZA z3Q@Uuqqc{RdkXsn1r1(SAAl_WpP7bC66XCa!7L(?A&}j{xEnr08Z@ihKVJGez%xXf zpCE?>4#g@Genik#6J;TOJ-ngHHnDTZRA4F|MJ%TnABaS7=HieGfb~Sh9D|}viuNWp zR}0`Es!ho1UAn*xT0R7?Z$zdQ)Y6oFIjV-aDMInUxs~Ih`Ej667`fWu7|_uW268NIM2u$)pMm@zX)*0z@obd|_SFqN zAryruQM#~Ou}-(OVs)%7t)ugNJw*7Tb#4BsRC@>i74loBP44zo{^Q={YFmy&%Z(I7 zQyukfYN);*g*D0@g49LV1akaN_zi<41215U(2qaB5TWf2s_iw^FBlV4)%fDWV9oLF z@NNQe{88OwWFV?RRBiBT1AF5K)$DINf!mDp*TM!!LEe6p<4M@|P=$})0tFWKro|9! zRps&bTiKXG6f_AJV;*W!glBO44%|JID;nQ0$wiO|2Seg_>~|rk9F-MxAiz4C+`8{rg zCWcDr#Ty-#3a9dMi-1iE;Uq>5>wSwKNfJtzv&SBbQ!^a-XNk)jWdxSx# zags_>v55)kFs^k74`xZfrcuAZ7?Dx&2x_E4kP!{tqdA7m);g?68W z&f70Hi&$)YRb=|I^>I^_rK9LGSjXP8n8C=``?BAVHTMZv zfLXQW-QSfq;F^Qy@s3T3`*{l_HCq@(t_nB#I3J37)?Vb|qbN?8*N%hy5qNL{vy77U zNKDsAvLB-*j z^Mkz)(a%nw@n|?pWL1uc$V&GWc!#tJ9gT3-yPMNP8(6KTXAm_XQBCsPwv+y1I3N2S z9~7D*EV#QU%cjb+SG+-3&zWF|kU(*U5Uc)x>;TJ+Lg)X?wy0m2FTHzrijbs37>}YH z*g6}cL6oGolnJ8~Lqb9IS-JDrA##<+GclzDf!Qy(+72n}cjn5l7%*)AVWbuwap~?n zqnZV05%ceY!o9>yL%@Vv5BrdFb)p!~9U_tm z*V?$%IixT@xa0g|#Ay^@h7&?(LzP|kvfPR{YE#?5`Fy>3i)~bo$YG^i9>*(^JqsKL zVHwWu+j3bF7)^aUuH;;v;CTI#=OCl~F5T232syL;}N+c98HNp zJ%HHC+emvKtc38H#n~?*w1!^7arnrqXN-1Um)t}7IAjBf4a_?IC)j)zBf5*;`Zn}u z*7~dJGeH*hrQ|a=!@n6#+&o9%K$y1cdY1;1ov7szeR9*%*Zhe2(5lwX`vq(i+6f9{ zEzQ#W#;qS9(9kuZ&w={icJ1;f*25-A-Cj+m?hMUspgn=TCF0Dz8nX@uU^ zU?aLg@GB(cJbM`rKb?Ok1Op~GA(%U@0#%QQn*tE^qXEq?Tg|c&2U2T$yUE($VFglK z6BVL!D zs}aV(!J5Vx7c=>f04sr;bF5&^qz=N} z8piNPVE|>F6prvxSky@HAjV zvGdCDgupOvU0L>nfU*qWiaE5;j5&}9t8ch|;U=%p-N^m_@($1_3)r4_33&CkHE_0@ z>`x|*tcPMT5(dtj)-F`qB#fjBjVXiyhD5PohldByK&rO9I5m0yCyp_wD8+k(TmVP^ zU(YQ1%>tSrL?;c|AA|>v#gVpUw2koa_288uwI!tINX$f%LgEGjCKzvAzxuB`S%W4C zSW;Hs|Na7&8>|j?gg>Ajc=0rl<7k&dg{+Lp6==(_(C^yYJ&|br-~?4eF95`g z|N9Uj6|L*hvv?7A51=zO6M*^L{T$jQ2cYj78>?pe38;s$k@8?N%IiF1+yK{!6Y_7@ z2kA_(oW$E0K(8N(|KhUSM}Yg~XYx5WH;^eL*KOavopKfAV$>h1MYPtcs;j@jh#44- z%3q`d#W|9KiQkF7JAL?$|CeUs!_U@}gikWg5|$1x0%O2)BKP1y)%5evNkT4=L!ur% z4+f0@8&JTaO(?X|wDGgzl?V7BaDu?kM=+y_ZHQyC8$xQJHDXo{O=V;Y2uBF#YN`ex zCBlFT%ZtDVz_k~RGah3W7=eJY3I}$>%fL{rV>Un{lpD=)0yp?!+a3Q8Vc~vTT&kAD zkpMrh=sYr*MOP#@ytw&zj79M`?!3@qcUf*4u3P(NHg)28U=y7%Pw^RbiKWBQ_a%1Q zXL>u@dg!4{!|PI%1FrzZ+wcP2W|Hquqv2ConA#6}Uv# zKX0}H`o^$|ZrH@g`G2AdF4nlre)lMB$>NzqEgV*hBxpovS@`vzV{5ReVQ1*`3!uvY zZEnEqgl?5LaZ^YY5HQs^;%B*bPq1X%Asxxc><9xY@^}%2pAM+wcxI}=T&;%7j@cL` z%aDQ6A%cCFP8A})+vpX7`JFFz}3VKgIy3wgPCX)LZ5@;gm3$C{x~3T z^Q%*xokaK}CN+SdY3cG$4l@Byz#fhEd!go1B^3L^6prcIKcnh?|AXL z?A^{dMI{IBZ+;IQQyrolS>>m3O~i^p@`GRw2saamoz5(>F&f{ z^kDW}6(7x|X5S{XpM+rn8@kP!YEd|TE;sxtOi_eJr4!vTRE$_1%N>w<>(u~=Q;k?b zn}MP*l7S7UQ}-c(0}my#G*CawcSzyU^e;_JOpKRD{|PoWl=Np*dQG*&)xdCtf45eJ!VU{4c@QuV*>qPRxd?zEPX+_dWJ;!Y zD;g~NZFMNT{=VSML;y1-?u%4LTLV?*t_<-k1arMtw+gOFSja(mij=8O96aNMmQLs|oWDFqvNDyw@^fHmvUCyGOj1-8r@^Jyg37v6 zH~pKKZo`(|51u+MbbTJ8xrA1+X-u4`eqgm95)!h~L>EmjV2R^^3NhzyyzO3)17GK} zQO*HW6`;e3U;x-YW}T~%E^~W>RK>=>>)udMP<+imd04^6e*I*X_(Y#(g_s790^;Jat(Mo34=a!MMW>5rMhfUn<@WJFBf<;ss78muQQR?{wbKX(pdO>W1$lz&HG#45@fJ(>#`@4slxg`+gaxP5Iz-=Lyx59M{#?^I0LZ%j=r0o( z5bupZ(P*}!o+g^Ibr+m|60U6^bR^14&-o-L%c`7ToRdw?z5FUk>>WT0;pL4^J$g`J z3FZK*i2)_sDmW`6v7manhya0)b|`m?o$nmO*mU5s9V^Z!;jzpRi*g6%&0jHY;(6zp z5iwDY^Q{*PBY{^)*a$kORS0z&A`@|@h-orIB9p=~ad_BrUmmg{QAp!ThV`6HuVtPe zMYt=hFqDeD=C;c}WU0#4q)gjKCT-p01aCYcBm$CgBq=_cA5_E*?92YLnt_jYY68Dsbp_!XTS%apAUEKG>^7Z@i|=Z zb|!+wpKm+;e+XUFw;412EZ{p9((#3y^U}Yd$Ne zse+J3R!o^&UHSa={N3+KeY>qQG7Dd(DYg!HzU1hwmpZk-=5R`YBqc3kDJ(VU6AkEx zwCXui{bBisWgl?d{U}>nT_4qPUalV@sQ8U-Ltt#o-r_=@%vo%HBcxx#|FJQmwGqiV z@&sSB(JVFx8?JYINhINZM?pt-W)tLdeI?gXx-;>1A4E6yI|fnw(pre6&eSe0%DKGO3VhrDVQVa(7>n!#tBG6fYT$%6R@++sR zBNIT?_ZY4mp9M4Ws$Pq5O%Y)a8ZdfS$#wRgtz5LmYodc{7zTL3(I<)C=RHjs>WFyx zl*=JI!^X)+Xvk5Q=GT2>71E`mW!2FPX0ejoN^xX{J2qEz%k}vwI^RgOLmx${cq13?oXFX^A3ML%RXUG+v`m$d=Nnk?XP;unyHz7gArhU6|j3oKC|Df0QRK62s zd93dar}{(e7vKcQvJ{S9;iT;YCG%L*{YtY1DT0$OZ)kUDC*rLd9j_p?PB!mgOrCDN zXK-~f`#-m=$)LiZ?3b%=4F9(6p5urzHa=j66Kw0i`M;dkmmzVKrC93wyWJ6+WRXC}FMMk>uafwlP#=-HI2}vj z6qY@f>-9yQwKdp_BJD&{Sn}xt&dWGGwopD&G6Zeci~-eUdM)sX%A;!f3a8%7ph$3`S^0#-(!`Ll4Q_IpKl$lDy$5bEomqYk=s0s0Kq(ccROBKy z;8*xLsLs8^`HrwuZl&bA{y{=os7r6xif-Mp2+k+t;Ip; zNv%@<=hCkNoUJG82!+}!T0)ZoL!Yg*fSCmk6o6Pv`1S@}Zb2sUWa5ji_i&~#r^>@f zC(rF|4UDpM`p0DRgn7~r19VOpUXk#p)Sg-u|7+K?T9pA;5!y9KO`xvGhhO+ql ziZ1Dj>1!kX+qcdBS1jEBYbL04x(Rz z%eNp3a>U#TvKgUcFR2y%cy?ia#s&TbGAGQ`W7AG9a7~W)gNd=Xw;xcb{qq{#sw%Is z;R_DCxR}oN<~zz1Tv^o8&4}}8jj<5Obgf=EYI&(;VBj&bCh1$-77YxxXpG*7LLbCN zWmlulWtxq|lqbOu93w6q11drahG)_eMb0T)9tYn`;FbhHsG0Kt4wtT!;N~)Avq$$b z>@9{4*1kPmK6m2x`1`{88hh_$-b~TL8wZNGwsR*s`)WC-sEqqD_CqRMB`ekss&_3DnI@QO9NC2 z^FJrI9YHHklqpp(*d%YdZzd$Hj%dIY`xfA$;s0ZB_U3PZ-%ItDe0#I=23ilt?j6*m z6DTiEpv@7L`#3Qud8r&A1o;K3%AxM=JvdJ&aM(_4G@8JjIr|Y_d%FQz(B1(If;93F zUe#JZ(ieb%xZKRM*KlwHMkMr#t9?c;h%(=8~cBT1ygY4cx8mvZ5tTu zm&j#__ctkI!p$a|*L<+v1Vr1e>vFQOm#!3gnbF4P+P~;#dF_c! zpx2aA;|VGTf^D)H!;UR(?~(j;4>J zf#Wd@s+;|;7EC1g*M4BP31!Y9?m9sVd54RW%pSNb*-t?4YtCor3!WEe`t~D9-m8n( zbv{*o$5=kBu3Cwn9I_fHPFx2Ph4BVBEY8TU&T!*`(p@eF7z@TygC4l}hk0{Y>?t(B z&~3s=f(|(kJ9y@7juNtwCr>llMr(J|4T;e)PP`EQBeAOKz&PjQ9 zCW4bJE9o^m&rOMJ#(~n53}Cy4Iez|TNTK8fvGUu2NCIZq8Aw9F;*b1iobfUQ%pax} zgcMw1`PuMHw?4&%)T>;_f%RbGO~3!i!#_ch?N^u}E~EHtahY7U)M3;}a3N8Lu@CUY zxWqaa3+HnnPYJ%SJnwKP}E>WD$d&;SkWFx~hc0l-L8p z&SsPbM;Xeml*aRod*`TLkoJ4|sGwr`Q{|f>`{y3iQH;O!#r#&bG(AIEY}}{=z0Rit zIj1nIggk)mBHPxzMQBBuE}otLUcX8>T;bh=?r7Vht#kYbxYzG|L&|mO&n&*j2Y5v0 z=`*{E{Y;{k42%Fb=rf5Vw{LJRc9mWrMFfMLC=(+XxOdwZ{}vm~jWf}ysz335r+q5v zdZhP>(71=K$24==IT#+grpUw5bJ_VSceBf1OF98*qM z1HFqeq|24g&FvXHA1Kuid&M($1?d9uG0c4`N&FfA4`4UoVL0pXtsu*~&|L;R<#h#qYD4i!(1^I)0%;qoPsCXKVCW4?KxzZ)cGH6-d-tyNfzU<)F#d2UduqQBhdM=4-LZ1ivBY4B%$g+ zsK9`MCgK80aRtz;MfMk#iK}5;rvD`Sza)&bE8B5MX-%A7h z=Qwb!lduYz_g|SPOd$@$fqcbjB?@LI=?11!sEp9PCi5dDusjeY$mepmf-y9;cSkKz zo3SlK3Lv30Wqs}1!ylvMO4{#gT^B#gV%>nEYcTBD1Ra)WWsr1@+dSAc|9a zwa|L6^-)4+*4+^umJ}RjdHjhr`d8?Z(0-W&Sp%P9pY@N!J@l$`Mm((2uU8g?eL1pM zJnF*pPFK=fE4Uw(3%zDJO6U|2a{yd0He(_ZI|nKhWl#G`r3?6yR%6Ey;c59t_gHEm zu>rk5|BZCNA#`Ea6}n$XIJIv|Npz*&|0}t)sjMg^JXj%iao+_0j?w9d4Ns|#U1X&$ zSk{2zc?v>sFio=ocKBd|eL!Xmz`BBkfqZ*(e0&aZmXa~%3mP;Z{y+TF2pSVoYxLvr zm$dO3fOUxuCnyxi0OT;&OnAi$X7)L5Cz{hAeX1ZZwoMQo`1YnOWJxOQ!3xMt`Y?h5 ze|(B&yUzx+6Rx@tBVMx;th*a<>U~o$ym`7M(_$cEXV@wxOj!u2kc?cq0;Hf^0R*@)nJDjJJ47 zs4<_1E+lj8FQdqJAdmTifVt#?^w@%e$Uy?**BRE#WSX{5Bl$K9B z46?$B8GlA2Tte zjeW`-<3A}KJCuV{58efBFd^}@aOJN&uGy>fnV6*m3?g`Wz1l-MIrF?Y>bt;^Bj8+F zwSB5BJk3nn2p1&G7=VHoYYj?BiKTXP@6;Z&Uov_vk&V!EDhHBXf` z6QsLIqa=u(+1&QC*OU^^cIUc&P;N+N)p*u0#lo>UUNIVbUOVO4Gpxr zjO|z_B7rc@2nH#4?k0!D1=)9}X$RGzuDpl$OkC<4ww(~JgZBhI%ZEmvnPN2YLpN(m z#y*Ynr~i$*vS;N8xs;ii8EbaEQiRNkCtnj|#g%Q(`Gx))_$WnLEUKQk6p9V>&sgZA zLeP1D7aps`ZhrWp;}6E7r5Gn*byIeDvb_i~1$*`Qz=Hxjb{w!4`o<)_GcU2(oAd@y z!l3OZ#H5Ei4+zNo<>K#vS}48DGStejb)Xt(xxau3<#_ao)*89)2#W9}DY`E&R|DQ~ zD;Owr$y4xKpFOC<68Dt4_~nc_$TK2h<|s2dq4k3R4QEaw3S&~?*o*tz_=p;Rz3PpT zuM1a`ur_V7$2{ciS9jn%v3+;Fz9L1bfs-nr=o*=r$i4|%f*7TNmDt)3XubC#Q5C{_ z3{jelUDs`aMrk;|WaaPeyLsEcn{Tg$Cs$W%{5;KvDb6>MsDyzy3!GZt+#m-Nxx?;J z+?N~eENFgoIAZcbd^#RvFOJKDBxC{?&>{$kSqMl-9>kqo$PHT_Fl{-1+2Ywxl`Iq& z&im4lDToXNoKG+&kmi6ShBOzzq*ZgXX@HW%D`tEua7jC29T$JuF8=yRGpEt^xw^tKU zyn>kN@}y5Et|`Oz&h_;OnxWj6ZW*3koFwl zjnfEn1SNO=H*O{(<91X+qJ$PLcGl|BFAG2<4CQuX(06|`LG?mGiR6cC-@1ly;!mUY zB7$el8H0U#XK~&7`5$`-)te{G8EdX?P`oTejlC{-a~pCH*DSqFdbFb}+=`&Z;0{`x=z5Sj&lxtkZ^UXHwxmkyta*u8iPaay|1Qz27 z&Ky&nEuvYhZz6s4HADpW#NRZ&vgIh7epHSAev%C9cB}!Fi?foni1?8Q&MiVM>_5XO zg?{9%<8fOOyT@K1HPGaFQYg?;-S@hU9gMx5k0QTBIfZs19?4_$T_rUOjnJoCJ;HSWqy z;uc@rjLD(Qte4O)l+fZdXBdYG5@t`51C$Q*Wu&V&?JX55G|hL3iXK;s*UEKA+;EcG z&T2Tzect#9AeT&5o!;)8yX#`Z{(h8McV9lzC|CGZ{IOa2p4bOX_t$m5rj^;CARt>I zo^C;_t3x|^lEu%!SeL{>ug2eIq?1MYliM=o(#hb=g_un#!>M9blk0QkoEs-AB_=dF zW57GME42~sag2dPjHC$1lT~R zW_HanoTB+$iUa~nxTC6(azKw%sWV7&*Gl-VQgr^ zK@|hJlr7kYb7<0n_(EjBw0B(c8vt0m;fSnMBwdIJ;jpKLzCGc4o26-6#A3nLWECW& z6;DaJzzFGh1l)7qW6HTx21j;^yADq+p8lwAxz~4k9TF)709qcBlWE8nSy`%d_4BvGw74b1qVXG43_uZ~J5pxRxK=}m0#-m* z)^hp2P>kcG8e#hNmHOBXPM$G4@nyb@ zM{P$v{agP3`>oZIRuxN38{@jen2&jAtjUcX`L@`s^f{DnFXRX?d{|1MV1lIabbfmY zsESRc`%zzTPi^FqR{ZkX0|CqIzV^T!2aj!IGlB6Y*Hf)6Hy;kX9@qFDjMJ`(jprh5 z^QxwV$s4;-MPEco%M0(ZkoA+_k|kKwWvq~1=4;4K?Q%?cjx&Tlfp`%iFY@azZ7X=A zbSI2S=baDW4t(lf-zT|a&5=J5G56p?xA9&qWLv(&O@vwH3T4f)UQU5u``FLsge3VI zajUy65aSI`^=z}6VzVC0yoO!dg_~^ZDGCMv4K_&P&<8YG8cmd{5j#2R%h#`%^72O! z4Vekx*53o)?fI;ucjg^@vkn#v#QVWZH+{Qy;vOEmuKacVY#_)7Tz+v=Fk)0*W0x@)wAyP+Bo|fv{Ih(Mb)lIn+Y`<#x%RbcEe6%*+IvLS@6kh2D~wcb=owbKHKXTs(6M zRJMG=ASFryX^^FG6ei}<(P#w@Kyh^K-2Mv^mKSC$E+odYNPeSf7Y*XPi<=@Zx->jn zh_t;hFXQ)g%T=n)P0<^8ck$*Yi@>AG)pMx&fo6YkD2E%`?0pzRMy@%2{CG9tRZ#K| zL8F2+Lt%`5D7v|_|JQHC-+(E~79Dz`rZ;U|c>`}aV3%%6lt$`68dwViCL!%|A(Tt_ z!}ahIr{!xOf`AA2iqyLcxC;IyAXUZxukS-2 zDh{{rq9f7{LCeKJDn%#=AR~$opPmW$lOyx(jFcaXdP{xc>kSLH$z|1S^VULsa6J`g z%2NYRhp2*Ldj0^-|7>!?s|2q>aYgJW>=wazVs^L|*H&P3_A=0fsU9m29k*P@jDuID z?h|%(y!vTGGibb*0^cJ|*`s|661})WmKJ5o4CymEio{cg32y5F@4 z`}j7yL)Vwv53q3b&wmP>jciU_zq#zf+|w&7jF%o6*=k9D;XHOOJz7ukE^Q>BdDVz^`Uk_3xib|)?oB-{hAjB1kjt> z(t}$8%V95B=FI~QuO!q?0QW(2lY32bTvql6=k?0d3kaHS`}FnW#L7`i{KLVN$exGm zzLJ{yt{r+8SDwpb*;uN@Q^d<9C zY=0SxMPad-hcU*Ni5WR)P})eUZ`qo~ccGS!bYKG4w)dRL~l zUDM@slxNF9sls36LCyoethL6a9=sLmYQ1*j;rjJVP4;W=CWRz{Qd`*+92u&Vc=Wuv z4DcwP0L1t_&>1~|>u5cKb4FtW{ZU+WxCcYGDX*|~oK{in5SE^ZwV1hROIMNp0=(LV zei|@7ar+?v^^upU2?99#q)u%8D%j4#Q6!dI9lHQ`9Iw+7+%Z}%=cE1JY_LJ3b2&Qe zM;S*#`C{5PIX|<77fRiGi=_5wn8@yW?R-aS57mKR$49Nde~!?J*eGij5Z$uP`<0L4 zltGE_$E2wbkH<52J}jTR?VdCCTe3XxLEMLCevfX44`J&!jbSGho2ls?dsT$VBobX_ zeJ4~Mo&^X;ri=GQy0RUbmX#L`%-D-wFG=l{6KuEC`1FL;%?DHGYx>f4Fs~z>zNnf{#(uvaOOQhbVypJi|YFofLM{X_)LSc*t#f~Y0 z2C=uOuQgnTY_Wakp>utX4+!>3RCo!mLyVF zn%SOgFMdUMJ;c@VS8oUlCWN$Gl->B{`^UvR?73d?Yh|BHqvww5|P!JUtx#B z{T#1QmS7Zd_`W*iRzie>XoJFo=;flE&EfNk%&tTVI)za<;#O$1TL9)x?nSNB&LyDN z2_SB;13dQ@;3w#Q+Hv*wuE<#+D(jS)THFI+Na>1d3EYc#VsW04N{rIr=KwICa}VVo)uV&YVJYEMk?J$s&SQUXAKBF{acGD3L0#=2vrSy*(k+amzTKkh`dof1k*oK@ zIE`xLr%-PsrO};#A+13lvIn>j5fI_Y*DVUt(3>PkO=bT4T8{y8!XF+DRXE{A*6Gen z)Z26_SEJ%bNTF&&y9-Xg6R6=7+tvSmanlkrw>iETdbPkNqpi@|!YyGXGiaeHSy>DOI%o1!;T!e{j(k=ektgh|y zw^9OF_m`dDeZC`<!M$lAk_@|T_K?s9SY~km| z9VjR}V)Pv#%dq{at4iE)fmo@ykLYz<6vnJGDY;!^_8@NYi<|oP=5wy+@ayl(;JL%vomyEz7XD^H<}#6u2>8cn3^3PR8d;znz}bx|!YB&sNyV zIMDj!R_hlNp)N@VVdwNQ&CX+m98ABWJ~{=?UU|&XyJuWe_7``mDXUFZSJLR$+eiPl z^Us6a7{`bcuqkkQQlVp`)dVe?ZEuOG$9cllhePhro5|kg6-hs$g$vWeG*^Kay&Zo0 z(@USI4vXRezv%ZXUUwH0q%+%i-9zI3V(74^__pjDZbM(c)NwB53z~b2Z5n9Ich6$` zJQs#6*{o&L}kM+8${A{dzfeR3_FkVQ1TRpj_kc49~? zl(=TNV4Am+;zaoEFSoZJFdy|e+1h+zy2<&xqKj4nvZvcDhsCcvqbC`O;xdn@^KH1* z3te`;q)q3wxz!2LRgvItD#6e=3L!YdiS1z(k|OLT6u-zjnn}%FIXY6`0W6L|GG46l zOuYwtDO^>ExwnIlj>}Fv&^)$m)D5Z}n$3@EJ)PPt^0GJuM!8(+Asjg;0?j8<&#*VN zB_+G(xSX`In33_*5Qmwx7_B8};!qpb2wBVQ*bNnAu|MDrjDSF%*BGXKNUD{sHPeT0~Lp?E2o zOc!c~tI1G#0=+3wXr(+M_shSr>$}POKj)<+fBb-=dv_?NW{ls)m2m(~I^n=B zofR!|L+{6+WOZ|H5|Xs3-OQ~$vP+K$F+L(VWj=8oROpQSJz5(;8t6%#K_9`ul01X* zlH^6Sb-i2P+#*XMYyk=sET2_atMYyfg>%UPALwwZ*Z;|zn$t4}tG zvh;!pKp9cA$QPUnQE_W$fTuP){(1Swds*YSn_^U#c0k!R_ zMeM(rkJzebu#Wg>?7c~H&iYN@T|7~c63(4yl;)eT_iqIDD?+0k{{?M4nuQWJ`)^x? z^_JiOPZ0ALxCrS17*RxA*+W$dB~*mq9wC|V9z~N7I$->Jmd~&!h=+1#PyrO+KVs(` zWTueF<4W*ch&^#}TJnsZehhS&s4Ud-Y-=%qyu-OE60dqA;1x1x6SK_s<`a*~g3%#D zJdy(f`}$JY)u8jEBd6ByV9X`8%gPU5?Xonw@H7p=(eyyk?KTRk3MNg`(S=8`76lJb zAh$H4uE!tV*{o+!StHf~oe&6qdZhfA#O?b*azQWF z{do2_))N@|sg6DVJtm9MW^29ae8s-@d@?IBiU35`hlb-#dI3YUD*8P@7Jx(IB?Q#! zk%Ae5-&1L;|Uq^|ZN{IrzNd+irc;yJC{6 zAp9(R8#@&El!R)YNOds(9+g(y(?lBOdM1UJt}k_2a-ZmN)s92IR^+V)72(~vZbR3|MhA>((w56|;_e}DX5uix|f=5s!u_qgxtzV7S3 zZyV!B!11!u7UtA+QD=s+*kpev5EG~#FZbtixh$^5po~U_MGi=;e`*<> zbCcXH4bj;%5GmXrA<11Uz5f!61$-u1nR4Au*EpX$tsMCB%^>3+)_I!S*PBX(M?o_xMVO@ z&}*{|Huw4_E+bk$6&s1SqqtVG6^Nm&N6?=8#7d3u^>JV<(LF4o&*Iw@bY9$!?v;GT zhXNSqoA2Nh=3QIAeXr{}bSm`YCq$d<#j-{~dN!JBbS3u`BY!Q8 zblD~`{~{sx{Mh!#E*=Gliyh^AZr4RqwU;*ecg0=(g8xU2Df0*FC)UFvd1k_*D~0w4 zL@Z*P%rC`BDJ#0h_Rti_n;Xmr)v~zFYXC<}$lpI^SDuXhj7A@SWP5 zBjfMM&#gfX4Q*;$Kc1*eUSieK^0ooj1oz;WVUrPEyVSf z-CCPq{OP=QPIXG)R#&O}If$?PXYHQ+B?mF7yEHl%f0&x|-rRFZf%lru731p$dxE04 zzybBm)_JizHJ0Che4WUsHW?3z2U&_`3MXo8HYhIEUd=HkI#i_yn4;y6bQEG_>MkD- zkjRB~#GTa!qqF;0(EB9hRpq@|GhyZ|hKr?VqK;{s#JlR1heIswPBYlX(L!siDHa>* zAXS6D>ofF3458(S@oK&t#MfbY*1o!f%6%JL#09VK&<+sWcDVk4jNUg3Bv8(+DxJB(@zqV54f{T6imHeD)!R2#njq~4B3DKuTEQ$`fHj8}B2lDTY$mf< zIAT`4= z>U5MLoM>=ccPnc1aGxhE_j<+QH=amvF;Y;to=24grA{er3|bW+GHCZoPku)O6j25Z zauG>liaY9>MSmT-;XCas9riT!4dr={OoNKGfySZx`@U){={8twx%xx_W9wGuSJ9PI z@35!p2U~)_X|~1Y&u6{C$SH+~mZ6;Evu3MWh;kw%Yp^he+N8D-g#%zfiAWp%6si!9 z%l_hTNqSwT7g6j6;J54@ zGplFwWxas#!4|nX%#MN9EiXWZzuN9hkcgy=oNc|TT7Np-nlR7XvWR>Bv*baU3LDrsB9p}oMQO7Xqhl{_)I`xg+#(B z>N(8iF#;~}k8dC?72t`ekxGd!w%<%*9sYj%2mMR^xC&~Ke;Jqd^AsA%ArU=e+1ctI z2Id9T!A>L1FNfZ*c+$vBW{N=;-(jpVa@h9&^8|}xY=fAHFPo=x7@^0NBd46=Qr1u1 z`2rXoI09A%yR+x8|0SToBi7Kp0&`i4r-K-r?s@s-|3GI`Ivok5NI+lUA&kHytxd3e z*N6T~c= zc4|hxyy=sFWo3riLb?QRkN7XZ2HmyLR5GUp=WFXQ{V zR%LaqQacuXgE2SpQdmd#&Y#MSAe4<^BY`H9FZsF1ULPwbHl5zp-5s}wWW5j0cn+%B z|Gq+DQ#TkFxcZ{g$*vivAMrYrUBn%^gopDI+Cta(@jwW8V z+Yi|4lXNH))I(Icqn-9P`7}|$4;N5W^1IovKP*1=S(Zfj0_)ZUeG!5Y@m9bC+fkzW zhB^+Kd_qcp*8qkRDn?Bb8s*N1)c{Nkm^-W>J?LQi<8V7ox@%Ypc};!98R;59veik= z>J%v*IcCbv!`jN`N&T#dRx&wMh2^0szcO<{&Fwc6!0W7a(0a2XdJlwRc3@d?ECF{C z_PDDd<-e1ReP1wbA!xn92b?pc=D1Zc_-sc3aV<%d#OYVAXq`--`Nnz1+NcMe=10>j z3&BgLOrAYmKPs5D;DuFR(o81Ry>_GY?mDyzm?mAd?0**A!zUFE52V-WJzC80g#Hz! zTh_cEhOqDPD~6Zs3JR??0cFT)>W#&}vQXIof{bpA+1)E33Q#>b5@Z$$GIkIY$-UT@M+rWIYGCPY zGV*JPwFj7sfFQ7MfA9dpMMP#G!CVe^zq;gQ7N_ydbN!#PZuI;dDkjYmc3!ZLV!R*u zQrf1>OSJU|lj**vw+dN-{zt<{)E!*$t`JzSbDlJ(_Z>h?A@%{mAuW3ct^jThA}La< zjM)3*U!uIsoqwqR%jeIIv}tQ0lib#YH{S@OhL3{+>M0=TZwCv;S8%7r7OTfc2iTL~ zHu2Ngq*3}Fx%Ze}yA8evFjO`LiIHMZg>$Nx-1Qh~n&3(L(-LJO0IQVDx#|h$u?sju zYBFV2J!ytGA;6&{KOdRlIA_3U0o{Ia;pV-M{G)v3VycD8>Q^VfPw4kZI(NWhIA<$e z-K^i?#{9@?T~v#dj^3R2yjg-Yw5-0r?B%rb?=yzE@4IBGjiOo}jS^oD-d9!34FD^)-<4`|5xSgLqNOt^nd z{@Vy$?fkbhw>WNi`)z}&!F2s}=<5G+PHr<7S8acc5>G@?YE+M(XwBtf`Qg$5m;%Hd z(o{op;&E<_mhNcz?y9m`WuKU0jOc`!6T{@ZS6#rSrGz=>?WY@!vV5 zMhA4NjJd!F1U*8j_XYHWU)%sOLd}VaZXv2(0llEWbFl|U*6Q+lwzW^$u3OW5la}ea zF1TM^)@}awuFUNHO1Zu7rhk$&o^~Y6!t{jrstIv@duKhnlIlf!#AOIx{jxgV?u4F^ z2xA(U0gA`lpKJ(YRV1hzNr4B-=*7m<@gF8fxSL+znho0E z#>!Ks+ZfB3vmC??==qgCD|`EHCu+&*ty`Dj>y|ARCKhpML($H(%$rAIt>2A0G0%rD z_LO<-w~cm+GI+ydf5SC}j2CG`&z3QRNJ9eAuaQfbFi&%QDuwVOJ9qCUO|$Ci_W8a) zDmcFsOa`PH21`#%YAGFrc}}ze*%LDqoI#@l#<9&60a)M=R=~{Zq^h_os6KQXS;nkf z@+BwRYFVvB{(B#Eb=1^3y~)ggzI@TTm34RSzo&a#4A`iCWvVBWZ3RgbQpIQ-d+NctZsKqT46TOSvZ{^#bEVn%PL6xngT0fJBE% z;rMDK(&zyiu4Mtn1s*Kp*S_j8{&BJz@rJqqX#?lE9)GiTsmkYHKGkBl_(HxYR^W8o zWp21`SL7KPk=62U_+@h@Ucs8*Z$I$MFv3I-8KbITxay1i`msZhwdCQ3c4#~lq42`qw0?#CSrk>H?xR~{p z)-pYFv+|s8d9W`|4Op!0m{eckJ{l>nDl>wgx7CzjKb^c==J0SmTVA#L?zQSQbvpKn z3knM6Pnj~MtLY}iq+JE-tHX1HrzCh77#NVVf5NOZpKEGrT0coOD+f$Fni9I5pSW$Y zk@2g_-AmE71y}%{L;oyN#)}YrYz+-9D4%>{QZD!;mvRq5wuyH+-@v1d>rQ@uU{Kco z_b&iN`;#XJ$l^`|4DgW2Jz|%YfQDu#B1i0__0W^xC}=7`G?)K=1|6+u{eT_Bad)u4 z%!*c0RaD&!^lJ&!{bOFGo2}5e@d_cTcLa^>`Z(c7+F z$8I!f_imx07_qXyU+3RR4l53@es@2w|NOfui;Q`TEj)E7 zr>xXnwcO>xY=&zz8aUcLCRd7|^}{Y&6>F3mnn3?*votS)F&{nmlrAJG*1q>Umoe?S z^wETv-mR4VboaCF;$iY>6jCmQ)<%d0bHMq*%%T3K@%8K6zFV#(7r3qdHl&3%*XH*< z*X(0%DUzkdZ(t4=7#fB^Si|+xwO2Hv(GlJhMwN)vR^l^##K=5>#=|C@)h=zwGVVu{ zIA~9IZUj3`jWFUSt@_mE7`w##ReZR4km0tfIW#3i=ruP|`KM?syu&ZTH!W&z2lqa} zYQjtOlsl95t#)r%SeO%JBG^$w$@%l=PqRxmU!Xn4Xn9yheSHEq#_q$gTNS#;s#7T5RRED}A9o55>>F#1LrSo>< zkQbRX@_mVtIAkceh9$PVc9qA&rTix<12b6R>B`&6YuOaaK1)~nhM1N42}RR;QXab+ zZE`?HmB>6$3(LAXxk^7n)hstNSkRi8lP?Io4GaFOOrA> z6fu&JbCXBWmL{Y0@DmXFEPu_Db%LI_=$C zYo5Bor~&NoDICk*qtLfn><9@b2jk}NZ|zgJ%mM==Cf|JqngLQcfkEmbukrtPvK70+ zA+-Lk(u^>R47&xOsHmubd(7zF>AclJ$F3H}NB85Ww_p=VTmZ5EW!lBqQ?MB9^ncIUgQ^ zK`YQXhet%{wusIJS=X$oY)XdHlFwIAHlvK2$$J4yLH^E2e1B0bT8L z>A%5!{r6|lq{a1CTsGIc`*;5G;rRF-2WRp)CL}My=R#-2j`E=ZqQcj_LG_YLBUOY&8vd4e&)~c$YyT0QZA|8qCnrAu z0{HKXumTvMfq;F{qD8zfvN6EO2ScPGi(=>FVS2q$PVo&=a=x`id?#6I+%azhC;nhB3}^%LMEPBNIHcn=1BV6JWgS7pJ@ zbOFy}^LNaIzuvtgcHCwO2TGiIdU?S3o7m&L<8a};{qEV%PelFe&Un8MsJ91#DCo?BUG_ zt`Fr??6_k=qy7PS`HxQu(}w=OuLItB^i(N9wut@q<44`m6K}R}-~Pi|bkZ3_0!NJe zL}~_U<1cB+giqBPjrP@}J2qaySc`$V0|EC$$lwS@Ap+GOqaUR>;K9X&FPpa`4qULY zMK8(BD%~sBgP~eRTRgPj#0;(GL&n1QR+_AzJA9``q9;b7@t_Lj=Dc|q&SQ>gX-Eg{ zl!fEahtj9Z%jZBb-ShUX30j&i&a{?fNw@nXiq|3GHZYf7E5wdn#6JNZ?cnH=VAJfO z+Y}^2^Z{g`>%wcjcj5x7UmrwZi zXIbte{{YWSkb#1gtX%5Jugmu-;HGJx9IqfiImD_XI zACf0xV?JJyIBl<+ygJc7HeD*(+lUh-ml)~kWm!y<6s0o z<;-x=7K(frA^_Cu{zi?*{n0hS*k-fm$9<^L)9FabWt!a-;9$&!sqp0+5r5~1)Wcf4 zsVF)6MLw;4pp)fmL_K)D^>9Y6IqwKZP4*fy$$66J}Uk0_xUD%8bQH+qDpVjzbjmQzxPZed|TrJ(@J@%snE zM9U&6hT;Xc%15a=_wF0-ugh-BZ%dfXF)A3`A78*|#AlTpDO^8~&CQw9{<8hs#=mbQ z!UN2X9I>1w{WIR2?8tY(-}{kGHj*sTHBi@^8jq?$fUBkDRPklZSFc~ci%b^c%-h-} zgl|NS3Dto^!^65QwQj2Hm;l{gx#YtlVRq8`4g<1}%2>{M{ki+ayER(Ubm*Pi^3>XA zwF}ls{8nD-bbiRD&Mn1pM&$m;)sHv$Bs&G%%Yh}fV76V~JY%%)3AwURB3N%VQK${N z6FK^(qJn<{On#QxO*ypd7+{Bvjzp+@0WQh+IAGW=6m2*9sVDSQj$~B|UGqs=mXq$^ zsv9hOugbPWTIGrr%R^-ZPMVAOHOVJe`aPA2lUEI^{5Zp^ApW4esYBz@T81!$Be1SG zz@%I0xZC>(KMHiD$pH zBKr8xkU9V7E)=XVcmcJ7MO=d2QvKg zGx_rgDZeDDOfK?xZg_pOk$ykCq^@^LHDDCXb#XfK7O>O#fG1pF2^=_> zrI=}#CBm>BnHXEmhk6|6|L`}Bj=TrS^1q8TqvDVMaD1pX!q=mpqXyJoQPnitiSeN( zc@mYj<4c?Mzwf<2Ie7wujQRLc_z=8KzpRX8RgoCy{*l?Az@%6wsch1r!`1&kbfpdL z5wgfSVETvFoA8h-hS8Lk&J|9nkYUFjM+S3-y0tW7&8vxAQg18RP56R;e-o4yE(ehJ zi@STq;N89xYn$Qgs0fKBYyaZ5SFQF`jEnr=Uq+m^aKVD^xyB5laT+5z5&TI| z6O0y6^^us(0kZ-eu{4uHidn6AsOdkTg?K)mi+GtZ>j0+I91dt4N#K3bUK^Y`oQLEx z;$1B4-OyinzY|0Bo$moOce45ZK}?0>(D7v|!#>0ON|w1-LuT*(Zuhpm?H*x6mG0`k zNtriwtB&q{QxYzi;k{0EW850AlMxRY0cIitd+H|pw`sqh5JgPbNd)aE1Ifc8kRw0w zw?D^6T_AAD!RZRTvv2^hG_nhBnH21x&fLopb8R9f>pm2aod-(x=)wDj>W4y4W@%Y2 zEL+3jyh+o3z^_O5T8vx@jgH&~CW6k=x*ro+P*uGElAy|H3w}St&tJZ%(NUNVpTXAD zg=nlzo2_xr_;1X;`5`V8?Jzv}oBC-r&l{}xERVzc#Ukd`UrIHO+vi}k|I@wYfy|+x zwTtatm(N+jckp{(Y}d$hhV33GXghoQg@2?t&nmw`a0XFHnc4ew%%x+G3URQ&c0A^p zmRNoc+BjPQDx;B!6BhP&&p|2cX+2Av(%Mo$ZpvPkn4xq+UUh<#(Itc0uqUD!a<0tA z_S=V-o4gzNf=G66_oa*M*#74Sj~;!A>xknERFCkGs$DC?Myz!N=G7&WQZ3cqot)ZV zx*}_&#n~$+M?up#C|gdS^Zm*(5B6{UnwmQ*Hq0zx^ThTTF81Xzmm&IHjCKC;RB1u> z3_3J?h_>?(rB(p}vkySFmX}wb_SPtBv-O7wGu@mD0!~U{=f&6sx5N^Y#XqrQe-91c zS@sT(Ho2-z?-^`A#tr&rtC-78hY%6e_WiPhIwYbr-KtJb80tmvOc*7}U*aGM4;j$A z@>70T+rBF5b(r#O%MVGfl_M%gPQ^`9&38H7QkpLJ^SPs9PP^3bHJMY4-8TEO^;_m% z=sQ8lt^Z7Zgf=KNFj^->qRnYbPGh|nEL|(!o|t_QFpyG5-Jww=7{J7pBh?qgl&PkrC4sh+f5=hM(pZrlO6lX0$E8LOzA{2~3w0uAH2 z5xr%4^fn&7%xeE~f7DIcoVa9%=-D339G$mczc!8DG6ux2o;6#`UJcYW&eas{$patO zyc%-@n7Q zWw(+V_xf`ZrMt4_5qB;KeJ_caj{pNX)jfOuf;1(e=-Rbwkv`6kGNOj8W~Cy2Mk$D{ zy~K3|)w_Xj-;IT`+6ZA$p)twK{xr{}I_A<33MBYQrX4u&1Vm8x4npr-ft`htlgM}4 zXW5MtGS!dLYhr2ejaXJ5DM(HON5Ibp;WlKHb~wC)zs|rb;Ean=4<_OcEO*Cnd3pY zHkfx*gl*fl4NV+{@%bQ5@cFAPALbav!nYQ|(IEuZ^_H}Oi$!3+S%rhP-|`}McgqS7 zjEBrym-utckOCk%2OvBCDjnoqx-K6VsP#rOg$_`{Kgtqqx6Yxc-o4;F{^5vv;9YlN zVlL#bBvUe;uc*?&=<;)5bm1YY?%)3i2iIj^lcgyv={iSNHHzP@vUZ$-S`0zX*4>p# zu)%irm!r7gCr=1$3}4GcEuj;Cm0<#5!;y%xLys9OE%pq;)HrT^nYCy+pKj-$gJTPM zi%dO*IDz!T_Dy80V7h#S&;K;g1*8MRGUtuAdqz}z=?5DNl|Q8z3(T&r~?bQoc$AYmITvkYzbB%WPpdJ zLb#KpB?n$V_{{?Rc|KeQs5jza!`ExQ57V)i0A@hWpf{L#kN-w|*eQ%V2R|}rz-lI= z5Vn2HCq<5g$0@9Xz#(6tGe!{x#eoOEb2I^4 zkpNhXu}s}3=ED<1g1F?rg@W1vjv#4*T9Q^KWJf`X(y1wk_jzs@@@OK3!08@^B6xA8 zrHf0t6T|jZkn=ZwH>{J*0)d!S9%hTP^=_iX28CovS^^whk7Al|OaC1%dd279)rp25 zG7-GG2>mj`kNPssU!=P>snc`+7lN$ZHtoEf{j{n=W)(|e>gURB=ediU-c>cbF@ zBxzN$;r;-Y-|yQ!IU7In`tF_;3#yJ~p5)_fWiqo2=)LpA1y6#tX#`XtF9N&=0Pb{R z(ZU+JXzq>Mx0iZL>2qYglnp#D$N46>Qjsq~TtMy}aDPlp47fE7PbP5tI(g2nfgf78 zEbh)-K7N-P4jGg|wE-yQswdmJjA<>JYGXt$01OwT*BPTJU2yPi3?`8JOrNN%@oPJA zVj4_#;KL&aaqb@9nxhwg;xNyV&4vB)iF*21)SlcKB<=$_mZg)2xg3?j|wRt2X?Vt(BH)D>9652rI<$wobeyk+^145Rl z(7eEY*fBf`C=8DROmv{q#_jq0x~Y*WW_$1SsV0S~Bf4lCO@sGmHzGJNYIDWMV5uwS zHJiBTCBwYeCd%91c)Qyi7={ zN6FP&(hFtSp%9WMtwY;6)v-fDaz;D%>`9{3o?)5AjDpJ(oR<5dp%#=Yigh%0fJ&!HJMxxN(rm06gZ zp4f!Ttwx9FvLFX;`~bW&?An7eKTVP8M_Ek}%@~>Y40HL$+1~ZQr;ujgA(kZ!;6V@= z`1?Y9hJb(om=-GlEAz-TR072v3$PypN@bmOu7Zr`Tm{F8`*ZHM5<1O2;UUonos zU=nF2Si&`w#eC$vp}#doUg9v&n7dItfp=sPz2N~P2}bYX660< z=P{5r;oQI2VDsUD^#}NFnOs64V2|Ok;0OFTM%uX5u^$^oU%p0YjQJC^QO+JjkEs_% zWAFa6yhx=Xh5w_k?=;!xB}(ei6J$V{7H35tQPQQQJzG{?8r4(9qTpIx?|Qq5&kwE1vi1Y*y*BD&2||2zm8 zPDJC8BLjgvf3^0Gsc=iPTrL*uZ9Nq|s>ma8W+5SjqdkU4l9cMCIw<-IJrtpXy`IQD zkDlz6e7fU=J&e$L2rh8wbhGW4)_@aafCjOSpqCJf854qDNdx1KJBiT4E+fX*6I5D* zHv0;E6f>5>O&HG^;O<|5{siG?0q+tOp5B<~91>!fngYQF*(qoOLc_vp)-9|_$X zIO!;4vE1|~sL@Fj>7fW>F{4*#=|7(eJ&8ftkQ>CIJQM?Z*_R;Sefvab?!{yu>k>T_ zy(yvIZGe3R$mPbMS*ydi--6%mX}Rz+&q5F<7oiGtJ8r}cVidMgvUHVUHd+*I!tv&M z>SPO3>a^J=d-^v0x67nq5a=k3UOwre4*U$;L~aiOzbLUHAzC9<9EV4R4>F2;55+Ef z_7Ceo+$_1{-v4B4z-FCAIWYQw>12yBKHUCx4`Pdz>`-*Szyvg8_Fb?dSg{A`YJwNj zbplctIK^A}V7;&+@L||N%>@S@4!DlYjlSNM1AhPHKyc|01B76x!$4)}< z%^8@PT`~`1LSjGRl3;w1KHu2&yaCjL=SHKw|iw&EVXA%29pNA5xr67HgtzF7<1^{kq^zhph00y+ny$dtS zgCGb+(Dc4L*%=B+%?1DNHX0haAVeW*A-xP7DP(z#9KF5s%F0FwJP$~TJ9OwdJ_PD1 zTx{gXBsm$Q9U0(*>~|I)8b7`Gfm8TD_%Q6bjOywrSKfi??cisSMk?e&fN6nuU4KCE zNXb0zgS?vv-Ld(Q09;Pw;_y3F{+u~(X9A#`2WJ7LwE{8Y9RevlD~Lo)h0zkEQba)3q>A%oA7!|dvU~R}$96ec<^vrUd z;)HAh!qcqxCDub~xN!zfW#YDX4Wz^jKLQ7i{sRCYu)g*?-^7o9XWlBb==Z=?#B~R# z!bu0-9)KWHH-KsaVJKUx)*I7arkwut{=H3!9xq$}!@3Y^6uB*e`r}4pWMl*oA=<@l z>@ZHs&C8>)ng|~kK&|b?fJh&NPzZKTdME;(z?9FzkkQJ25ljFq_1CXofp!Z$)H!mn zD__A^%Ob;34UpAYK{2sm<6xro5TM|sn#*F6lHd|&ZFs7KaQHuiKo@Dha#us8agn_-_686Pf{jj*v>dodgl&LPNbRonm(Z!~~M=M=b-o9Yay zn%2-Eg5QY{0v*kd!9TZ0j^_F%qRCnp+!fBXjOs4~a)ywX9heYYh2Ce+AY6a{;82>c zXGhWlZ5|CRK6+|AS$q_0bNl8^v@|&Kmvk-Xm{LtVb$ERWd@uBvmoo?j6m;LZZ3)obQ6sv zp~FWzkxkIf!ioWiu9xTNuDX6c?&FMc_b?A)4cIutS-A7)X&QNxi-sF!GNdUXv8?DQ zh@K^dxcH!gc@Ny!0^J3Zgg)8v7Z`7)FDpe6LAXAC@Ms(m?3O}El_|PgtRsyJwSC!`xKvkOfyBqzM9PtPg2u})Y=sIJ^ zjvW&xPBc|IyAm2TWFXOoSNy|z7y@!%aG5PQ#eeq>yqk2avTS5<#%if)+dw^dZ-OQG zhWpEMnYWm(= zj$@fhZy%H0w9={ns=_i1jMXB)un10k~b904>t=2 zg)|I823DtE9jr&x)=7Q}BI{FLQ8`BCeky}7P(}h3A}}4xR`Lr@R1qkUUP-;q{~;BARmrl98`W4z)zrYYXuj@ZgI+rsJAPHgA<<>-|MGs zv^a`D>S5c2ml2D#S`o zwfakL<5L!sMZZ>~m3(ViTPJ<cM`>q8W{H zH`SJOrwqBuOqR(`+-|d|NW4d5dO{y#p{tMks!alOWFFX6ukw)kRPgTm*6vuzXOr2c zS;-Q4lZ#Re*IZl7UL-rCphajG+qg(v=9&4bGqWpP)mADzoS z=Q{LDCb!gye&6aJBUxjUua{NSu<-1@vz9HKlW@(k`kbu>va|Fy!Fq=8wXxm%s51Or zUTp0;CI6|1gtMxt30`{#gjWpwnEG+U49>tefr{Pmks%?yz@V`)F(JRx97b_{j?W7f znKTTuTj`k+x(m@YH2(3yo!cT|vk|vc>>@+&pmK$gQ|Kb~9XBRj+ziD?iqCnlT97bT zheZ+#h!WS53jk9$27@1;6dx2)nG$mO#NI*im3>tc%}8q?065f`>#ewW3{p&r)M6ne z_?RfZioNc?D-2UmV3=C0;^0tzW9BiN)|7OGAPdu@vL^nO%26It-ux^^l)|E9kEP*; ztF?WF*J(G+GMmIX(3|9^u-*5J_Sr*4TjKN;)CCSlEh{(dfC43c9Xmh7I@-qSNj^X3 zdPmj9ea498yEu!aN^s5XIWrePB%7AKF9QR<&J)>m+f~`0p#W^PTjUOecKs3Y4cG$H zO{~eR^>Td%eLs-4M=fi|hYzLT<#5N)ltocgP+DAt3Sr_Km5xB=7%6ApetgKFMk!%ngT!$O>{!B0jxg zUah5FbJ?5YBZQQG*OWRKH`u@1cK#`j2+d)ooOw_S=2IpYG|N(W7hv)!@R4{k;J~Si zeI-ft6Aa55^m|EKhagK@QB@>!|AQUh&z*re0?xb*;=fD3wixs$cojjOdIx|s>f8W! zdp)%7b8gP1_^sMI{QEiLkc0ZGvVDnWBM;69cJ9*h3rEhKJJ-)~bp80}qW`@)G&-ah z8oba7KI#g2pmcwwtUjo1+D^UGF zB4ip&Qq_@Wh~BaSN15SMcB$X&tfz}3`|bStRrYeV^7I0~AJp#&k?FeE?TjvXH%UA= zeMZ$n)okT6MMMsyvKDs&!34sVSZ?p;yOK?~YC(xUjpj_$Yg+L33$9Nl7mGvo3oMPQ zp|?45xoEm%ZlBWNWEOn+Fs+Pk>E*am<7A!Y3~eVhPD%gDh6SJejFr8XX6jCT60^&u z?oLeRX3es`$FcAcq@OUN5Xu8zgz0+p6uvdh6U~MUH@D47QiA;V%(8QeybZw_!GB{nXKckZlw1x!*xf@u1@8RwI`55(Q&f$eW}!7sK4MeG`nxm|6fnY*Mzb zjn-MOHHiji-IXMMK0By8^$OQpxa70~rf&dvz*4!OL37eNP`gFmo01wAW+=s`LnM!_ z{H3c$my}=ESVo)ks9HzP#7G~Ob@+FCJ5J4B-@2ALUlwVJ`tN;Nz_ItBZ`9v~7+ zZ(c>I<0*`Q!aSWillELYhqgw)XL|b5PtaF{+9awzWfk8pY_=M)JCjPv*@Tb^1Q( z3Cs|{=EnAGmJ@+btJzf~V+scwKJd_k9D62LCRw^*KVp{L+%<5zIsx~>P<)@3{1G%5 z7#ZB}p}|j=2sB1sr`co((FQNvM0->*&drccff`A_{m|tn#e>J}2s#jXVe}x8p#TeE zCgsK~9qI?io>DHi>z}Y{~y&?hpr7o$zBLTQu@0k$Y z`gyAtMMp>L!0>zSRM0J|1&4|Ez4Ydm_&{D0Fpk@|gW>$TYBS;NA zBQ4|>9U-l5Hzemb1wDe*$v>+u{3RTR0moF$Dq|b!cwkWTs&OzAvq%Q0T}}0`>q%q- z`#_QO%$!4M?FFM*pc`^5ISUq@y^J#w6p|66UE|Eycuu#~vz0@_+Ba@XhlYm0=L`jx zzO7s90O$^^gmDB*>?P&pNYfmgRh2_Bs@H72shbV&kx`()iclZdXKGE5K2935m7?~Q zRMn|lOH7?QHKXh6*W<_}!gZaQ`<9faljcC{8lIv)B7=}z;nT4kH&Wzv;R|Cc! zHyVLkB)Y?%M}9{A`2s+qaC*n=D#{ZSBqq)L4862lbCs_ua$=}ON}{Ah))&GGV@0`V zTu&gZhUUrn<0d>D{{#Xjz4XB_4Pa z>S74dSKYm@;FhWFlr+cnd2}G=6HcCuvBT+h75)1attOmXVpQF~|1|g>>KrGhifmuu zFbAW6Jl*uPBR?VVBb4=~XCId3Gu;gk7o9!n+hMD1$9S(Ue9F%xLx01wJG(-IgM%f9 zS{?n9SCpjQ&@x-;s6XM0{7m5!mByFdmKxqs6UEpy(ciL8)4!HUE{zlHl(95nXZosc znzYU$Xs-9&W-ZKc936NFYUI~^_->TZ0}VbI0;C%?5g>1}9}WGc&OfL!#u z?nzo?1{!oOxs&|5r>AGSTk~~sInDBri!Dm?Yfu)rZ{ID0kltwy*^+?=iqwi=)VIY0 z-y~8#uU0vyQ-p12po4Q-bE8jnAstfs!P;|SB8M*ndD}}#rfwAVSHr)BnO3g3;g?Z;skDR6s zc$d8`s!~&P<69(Mpzt7wC^u1eV;d)_QEpF4&n3?1Yte5U^X2%cKSFfgY{s5{&b2^f zuz>Udo7)CEbsw}$+FqxHDqDrqW*fBuo-IC!qbU-hB9addFPS1K$W1oNltQ!SljYHd zeBPQUXky!06sA!m9S|o^(xs|$WDCw=LUO#FMPO36;W3oSE<1?^PpTRVZEirbolHq- z*HN98LQn4K>WcaL66)Uonw#Nt@27EfMJ7{qR)$O9zg<=tv5T&Vp)5{Q>{wgApI*gv zKbJc@z8$x#P*f8x=m%6{NGuT7E!yrPGn``^By%{cq8(mOGMsom_R-m&Gb^_l-Z~e$fcm>cw6g){URKwG|F7jWEu9G~rwn+{&WMSK zyIy%+Fk{=#_fA1VEv^&YyG0&VU0*e#PDV4E_BI>$EUGC<(%;-#oZl8tYAt|rF^b^A ztuoXHME?}fH4M&(nZfU$d>LGzo}1xCjh`S(&gq(3r0+uM5@P0QZi+Kkvu3RPOgXk( zU3l9l$}Kx$fhgs5Z-iKD7s;Jfb8B|-5Z#i$c4bFL-MnNgv3pu>5Zk5=dTi0lnzTPQ zKuBF!G||*M#I9(cjPuNrSdxEt^LDqZIG6K>j0(CVp=+vCBVih}^{e;P#K5-`sfK)k zQ)_9*EKu2IokYKV-!QwwFt(W|4yd@fFIIAeH^s!UyPRw7(5?s?c=yluQn%LMNun^j zxZ(Kkvm2^mngOn*=DW^cmojL25TzGMYD-U&Dj#qM)X}Hwhae30Wkeelu|qMg;=6vz zbV5r0{PU;o+;n=^ZRI;>1&Q?2=zZrh1=ZQs7xMclBJ;v#Fq&?p)V6B4xzJ~Qhcib2 zAg5cTykY0pSMyRTaOV=d*dwhHzb3Y-l%)1cbKzsoTApd=KeJD0j?z@ux$*+PASqt` z?%a&L<^86$&SCYGykCHv-c~vRBO6I~JH=$x{XfOjr1g)-886*{)8tge(dLQaRpb+$iH{Zkdm`KWS zN+cLWvCYE~BbaZ&N*#>lOYq6Tg|6Cm_0ox7-tgCeT2%}oHs-Nt@XQ1_v}kV8+%Mkv zRb&pwW@U^)qlA*hS9#eA@;4r&V==O(8+OdtT?{x2vBTL&gFtG6tU2@Po(rDV4onzh zVUBAswZTyG?c29N5~^ReSpV~8ws)mYFT>*y>&mEpFY-w6p_1A|EdNIGM3ngeabH?_ zEeRPOYCO_a7=;|iV<Z#hPl;AUnrrJ|3 zIhE)Ew*%uEI)bKcJG6Es8xt>4K{j~I2Ri|XupD3sTl&wFpgYTh$LH-C5`rCEZa)To zCMiL+i_3i$JRT|W&nC?`F-WGCJlOP~2P2kZH6cXdWl1EbEVzLdiXcc&c|gF94HIS; zM0`A@MKlK>AjG7l!O~Kz-hTRoIUnyJ6K<5Aj36i#Nt8g1mgFD%YE5W2hsN(~OMC#eh*gCaK7(}4*= z$@;*+KYd?Tjs4qw6AeghnyoqF3rRl(XjxAk%I2c?h&l$xKn(>M47JJx%?RP&H`Q{8~^B$ z0iZTn;5b2c!SK3U*<1_{PA2!!0SN>kzBfP)yg0`&Wf_f5avkKSiE3`oo;?!O+RWj5 zCB6e9Zsk-KVsi{N5?En@s1W&DM1>T?dGFFs1E1)Zv z^6&{d^sa9oF7%0U&-U~WNV!?pU5%kVUFrDxaHerR`;XCYhD6rEcy7+~v<)k2hNk5J zu%Wr;D3Sk5B!CGRx5g$ z<(tVBo;%|wmm7cPugs^M!As3MYR+t-|E#&)ARgRP!)UsCkE>xB>UU2KHE=zhokr+o zfX@%v zbHLC-UYj7Tx|om&_e3g_QrqUm&Hv<-8yjEXJ)5&8Xoqyh=M8$UCbJ@z-%-AGq%F~U zIaBX?)31!kFU`eAiVA)9 zpXD#x4St=U6Q(YZA$R1;t$Xx`55iIRHkVZAgYJMHN9PdP4fk@nE5CGx6UBo^%|lnn zv>nd5edtk`bVkpHO5eTDyB?jCr5i21u6T3!HkWa$N&ByCT;G9|FHu|!FM%vMC^7ZY zrAt??m=G)3(6|^$Fl1vbcvK1S0H}~_qf-!F^!uX;f(}4~>&S2x67Hm2MK2jjDX1lY zRd|XF-n!zkX0WWNx31Dj^TqU<=NMD+k28tp28~X1cVGh0qOXA)idB5F3Rxc-4~OE1 zU=zW0j^h#6$u-U8^&K>)D-^`$1; zy6t!`0ELsqBg?TzBI^T`fx3SR9tmX=d1NK(#iqfZjhbI$6k_BO()%cRr)q2ZBh`uP zb9~O`$u*aA(0_(VhdQD9OI6*2Gf!CswE=V*e*juh>j%o=GGG=oBoN=`^4MHS`3%rM zmdvZcJFx>udky&CK531w<5K{Fv@9L~MY_-rmDEZRg##{0Cfj*61J znq?kLV07c~j2C6K!cRQ`#sgmg(KC4iq+=jWKqhFPucss4gZE(6a!vuZ2sF^=tbcJ? zYvyZm4#dSFLA!G9+$Ycymk?*zv>$*GtR}F^y4N9EAwmuugt70#xzRx5 zFEAd+IRkxrT6Cm!>(PH?Y|VgT0GJM*I5Bk$0cfj3iyO_&i_9bI@Dowg zjhi>e*8wD(SRMFleA&fTm#^rS0nmky*)=>kn_>G`@ihJb={U@OK`{cs3`o)7IO?ss zp5p6i&ICnJ1L&5bC8LUBMbaQ=6XauOfDO<`XMFXbn1CGzpm8qI(_V7Ckq7m_B?x01 zSKQ9#LTC%@JPt{a(w)Fl%;DUvf2=un?jYJ{H6dT1LssSKc~28qhOt!<5)#sM$linl zIEFiOSmbb!rw;X2O@!fux|}RDlI}9OXi@+XCmQncu5v2y9@;;GOFiTZ>)?!Mprec( z@BE9oYe2Dvvj?RJ@1BxbKhV4GdyIbw+(@+6V;2Sd5a^i8K2;)kVYIyBy|5Z15S>GK z=YBd8$wc`J17K;1>~khS1QBG8Z@8R_iX?}#S7(1V*ZsT)2V&!~RR#=%J}n4IU>FOO ze?V{$fDNzB1Pf@v1VP6rL2OWnbTJC-#+CwdX%+Srl=qH7G)G1pH^?kvi31a=sa44C zkG%qc_4*N zChzO1j<;{0EY06%iA3>jUFI?_yO~sM2JBtIEo!#toEzUK@ul(V>?gI38%-`WUcH)U zEp)^-&ojmHa6){;9IJy%^A^u&&c3?E>1E4lsm+KIt`2``OB9jauQ6GIwOxL*PMiGZ z35@y4b8O%G8Ss_Z7H=$0i)!_1-Re8hcZKghfzL0HXq)H)xqk;O9>@Rh;Gi^=e?^t( zU5K8{i-6QKB!H1_!8;ann557$^BaPQ_GRzdvYw9+VIz$*jqtRS^ zaPHApu$;CVnY1biB7Xq)f;=1{&@DS*Xh^OV1%x((Fq~{I-qy!L_@lu2f|xY1-mTH~ zQnWw?il%wKfV;W1yLjGi0rzE58_s#p5b`bHo8uC-U%|U-S+leNM~}}*(>(M{-fy8G z`=|)w^5UL4)eG3FqA3_u{!eV@4g>d^T6&k^=7kZ?{gY#Uq6nh2vN&cmB5$ zJ8{xA;*l|4=)N;A#H;go<(ha}{CtU0ga`Te5fY1xJOyL&v3Gr2z8@W0b5#2p+07}xY=j|x_|@N*uqE-32LAe2x)BDOi+ zMqY}Q%{ai`Y(2lAg7c$QxOGyiZtMJ3C!C9j*0k3A)+?>gTR*n`HWdk3&{1A48&e=$ zCn-He#m3$J3FuftyJD#re_rB6BWT3ePHOuOBm4Wl;oyW%9kWY?cj?t{v{+;^aKW{Fvhc$j z`-E?HUQ3@Xv8sR-b1N@;A4pjl*-dK@L)2XMcqr$Zt>s>58PB*TeAQlf!eg81E;G6x zr8!ld3(`6D!qH{pbe4@s&~}B-6U^sp+x}kwVFRB04(ulEda=K-;{>!L6|l##- z9tYw80OEK6I6MFyE9ujVg9k?uphGHcT5*ht;|<3oUd0hehhxf=;`jvOa0TM%1<5SH zI1Q3mkXXUl**TFJEDI7^;AAF2f&}s7$H%KxG~W6w@#4k9$G-s7ik3bHicrA@(o*CQ zIbhd7hNzp61w;qkS?vE5=s#&G64=|@(^3?P6%8nhs9+a4usM;$Arhb^BMAe|qRdBg4z@@(c*WxPc&4@_?!CEtG6z0sCBNkShS!IEkZvZRI zEVlrfDOhSo%vb<_Gk#_kTd-)+qW=B+s}mkkg0hGNvuDp13si$hLsgF)6DLj-n@mlh z%+>&EBW2n~KuxL4-w3G1mAM>&*fpa@jS@SH_MbAlBcR=^%=7>{4$Meu%>rh}jWw7%Q_U0Vq@)-eP`59P`TjiwSWqh#4Aj zf`};`an_)flnXW!;)D{HYe1Z6mRD>*y=cSsigQz3y#aB~Dwn==83)8=vA9GA*c@@u ztRk-PJ`42`62bmjuwa3>^tVKv4~QgU+5k|j39T9ydM^U>wguQ7VnJLnt0;38p@=5M zF@R<9E?z~RV(Y|pwz$+*FSx}uwcZI8Yv7)JB0^FvS_-`LI?L3L8r7 z4AEn#psPfp$W~NLY!uo=w5r$(*gImciCro7uSgL)PBf#~F0~+>8p0xkJfOQn@2A=V zI!vJlLJZJN2@^msjeY=~Ir>=i`RM;KG+>y(AoA|rJL)N{p(Q#D!!QiPF#l;-bQp$V z7>4;~VbNh2hG7`yn}tP(VHk#Cm~R#q9fn~ThGD*0SacYMVHk$_MhOY|KVfx En gros, soit on supprime toutes les migrations (en conservant le fichier __init__.py), soit on réinitialise proprement les migrations avec un --fake-initial (sous réserve que toutes les personnes qui utilisent déjà le projet s'y conforment... Ce qui n'est pas gagné. \ No newline at end of file diff --git a/source/part-3-django-concepts/models.adoc b/source/part-3-django-concepts/models.adoc index 8925474..5db2ad5 100644 --- a/source/part-3-django-concepts/models.adoc +++ b/source/part-3-django-concepts/models.adoc @@ -2,24 +2,33 @@ On va aborder la modélisation des objets en elle-même, qui s'apparente à la conception de la base de données. -Django utilise un modèle https://fr.wikipedia.org/wiki/Mapping_objet-relationnel[ORM] - c'est-à-dire que chaque objet peut s'apparenter à une table SQL, mais en ajoutant une couche propre au paradigme orienté objet. Il sera ainsi possible de définir facilement des notions d'héritage (tout en restant dans une forme d'héritage simple), la possibilité d'utiliser des propriétés spécifiques, des classes intermédiaires, ... +Django utilise un modèle https://fr.wikipedia.org/wiki/Mapping_objet-relationnel[ORM] - c'est-à-dire que chaque objet peut s'apparenter à une table SQL, mais en ajoutant une couche propre au paradigme orienté objet. +Il sera ainsi possible de définir facilement des notions d'héritage (tout en restant dans une forme d'héritage simple), la possibilité d'utiliser des propriétés spécifiques, des classes intermédiaires, ... -L'avantage de tout ceci est que tout reste au niveau du code. Si l'on revient sur la méthodologie des douze facteurs, ce point concerne principalement la minimisation de la divergence entre les environnements d'exécution. Déployer une nouvelle instance de l'application pourra être réalisé directement à partir d'une seule et même commande, dans la mesure où *tout est embarqué au niveau du code*. +L'avantage de tout ceci est que tout reste au niveau du code. +Si nous revenons sur la méthodologie des douze facteurs, ce point-ci concerne principalement la minimisation de la divergence entre les environnements d'exécution. +Déployer une nouvelle instance de l'application pourra être réalisé directement à partir d'une seule et même commande, dans la mesure où *tout est embarqué au niveau du code*. Assez de blabla, on démarre ! -=== Types de champs +=== Modélisation de base + +==== Types de champs -=== Clés étrangères et relations +==== Clés étrangères et relations . ForeignKey . ManyToManyField . OneToOneField -Dans les examples ci-dessus, nous avons vu les relations multiples (1-N), représentées par des *ForeignKey* d'une classe A vers une classe B. Il existe également les champs de type *ManyToManyField*, afin de représenter une relation N-N. Les champs de type *OneToOneField*, pour représenter une relation 1-1. +Dans les examples ci-dessus, nous avons vu les relations multiples (1-N), représentées par des clés étrangères (**ForeignKey**) d'une classe A vers une classe B. +Pour représenter d'autres types de relations, il existe également les champs de type *ManyToManyField*, afin de représenter une relation N-N. Les champs de type *OneToOneField*, pour représenter une relation 1-1. -Dans notre modèle ci-dessus, nous n'avons jusqu'à présent eu besoin que des relations 1-N: la première entre les listes de souhaits et les souhaits; la seconde entre les souhaits et les parts. +Dans notre modèle ci-dessus, nous n'avons jusqu'à présent eu besoin que des relations 1-N: + +. La première entre les listes de souhaits et les souhaits; +. La seconde entre les souhaits et les parts. [source,python] ---- @@ -49,102 +58,27 @@ class Item(models.Model): wishlist = models.ForeignKey(Wishlist, related_name='items') ---- -A partir de maintenant, on peut accéder à nos propriétés de la manière suivante: +NOTE: Si, dans une classe A, plusieurs relations sont liées à une classe B, Django ne saura pas à quoi correspondra la relation inverse. Pour palier à ce problème, nous fixons une valeur à l'attribut `related_name`. Par facilité (et pas conventions), prenez l'habitude de toujours ajouter cet attribut. Votre modèle gagnera en cohérence et en lisibilité. + +A partir de maintenant, nous pouvons accéder à nos propriétés de la manière suivante: [source,python] ---- # python manage.py shell >>> from wish.models import Wishlist, Item ->>> w = Wishlist('Liste de test', 'description') ->>> w = Wishlist.create('Liste de test', 'description') ->>> i = Item.create('Element de test', 'description', w) +>>> wishlist = Wishlist.create('Liste de test', 'description') +>>> item = Item.create('Element de test', 'description', w) >>> ->>> i.wishlist +>>> item.wishlist >>> ->>> w.items.all() +>>> wishlist.items.all() [] ---- -Remarque: si, dans une classe A, plusieurs relations sont liées à une classe B, Django ne saura pas à quoi correspondra la relation inverse. Pour palier à ce problème et pour gagner en cohérence, on fixe alors une valeur à l'attribut `related_name`. -=== Querysets et managers - - NOTE : faudra sortir les queryset du chapitre... - -* http://stackoverflow.com/questions/12681653/when-to-use-or-not-use-iterator-in-the-django-orm -* https://docs.djangoproject.com/en/1.9/ref/models/querysets/#django.db.models.query.QuerySet.iterator -* http://blog.etianen.com/blog/2013/06/08/django-querysets/ - -L'ORM de Django (et donc, chacune des classes qui composent votre modèle) propose par défaut deux objets hyper importants: - -* Les managers, qui consistent en un point d'entrée pour accéder aux objets persistants -* Les querysets, qui permettent de filtrer des ensembles ou sous-ensemble d'objets. Les querysets peuvent s'imbriquer, pour ajouter -d'autres filtres à des filtres existants. - -Ces deux propriétés vont de paire; par défaut, chaque classe de votre modèle propose un attribut `objects`, qui correspond - à un manager (ou un gestionnaire, si vous préférez). Ce gestionnaire constitue l'interface par laquelle vous accéderez à la base de données. Mais pour cela, vous aurez aussi besoin d'appliquer certains requêtes ou filtres. Et pour cela, vous aurez besoin des `querysets`, qui consistent en des ... ensembles de requêtes :-). - -Si on veut connaître la requête SQL sous-jacente à l'exécution du queryset, il suffit d'appeler la fonction str() sur la propriété `query`: - -[source,python] ----- -queryset = Wishlist.objects.all() - -print(queryset.query) ----- - -Conditions AND et OR sur un queryset - - Pour un `AND`, il suffit de chaîner les conditions. ** trouver un exemple ici ** :-) - - Mais en gros : bidule.objects.filter(condition1, condition2) - - Il existe deux autres options : combiner deux querysets avec l'opérateur `&` ou combiner des Q objects avec ce même opérateur. - -Soit encore combiner des filtres: - -[source,python] ----- -from core.models import Wish - -Wish.objects <1> -Wish.objects.filter(name__icontains="test").filter(name__icontains="too") <2> ----- -<1> Ca, c'est notre manager. -<2> Et là, on chaîne les requêtes pour composer une recherche sur tous les souhaits dont le nom contient (avec une casse insensible) la chaîne "test" et dont le nom contient la chaîne "too". - -Pour un 'OR', on a deux options : - - . Soit passer par deux querysets, typiuqment `queryset1 | queryset2` - . Soit passer par des `Q objects`, que l'on trouve dans le namespace `django.db.models`. - -[source,python] ----- -from django.db.models import Q - -condition1 = Q(...) -condition2 = Q(...) - -bidule.objects.filter(condition1 | condition2) ----- - -L'opérateur inverse (_NOT_) - -Idem que ci-dessus : soit on utilise la méthode `exclude` sur le queryset, soit l'opérateur `~` sur un Q object; - - -Ajouter les sujets suivants : - - . Prefetch - . select_related - -=== Aggregate vs. Annotate - -https://docs.djangoproject.com/en/3.1/topics/db/aggregation/ - -=== Metamodèle +==== Metamodèle Quand on prend une classe (par exemple, `Wishlist` que l'on a défini ci-dessus), on voit qu'elle hérite par défaut de `models.Model`. On peut regarder les propriétés définies dans cette classe en analysant le fichier `lib\site-packages\django\models\base.py`. On y voit notamment que `models.Model` hérite de `ModelBase` au travers de https://pypi.python.org/pypi/six[six] pour la rétrocompatibilité vers Python 2.7. @@ -172,26 +106,8 @@ Les propriétés de la classe Meta les plus utiles sont les suivates: * `verbose_name` pour indiquer le nom à utiliser au singulier pour définir votre classe * `verbose_name_plural`, pour le pluriel. -=== Migrations +==== Shell -Les migrations (comprendre les "_migrations du schéma de base de données_") sont intimement liées à la représentation d'un contexte fonctionnel. L'ajout d'une nouvelle information, d'un nouveau champ ou d'une nouvelle fonction peut s'accompagner de tables de données à mettre à jour ou de champs à étendre. - -Toujours dans une optique de centralisation, les migrations sont directement embarquées au niveau du code. Le développeur s'occupe de créer les migrations en fonction des actions à entreprendre; ces migrations peuvent être retravaillées, _squashées_, ... et feront partie intégrante du processus de mise à jour de l'application. - -A noter que les migrations n'appliqueront de modifications que si le schéma est impacté. Ajouter une propriété `related_name` sur une ForeignKey n'engendrera aucune nouvelle action de migration, puisque ce type d'action ne s'applique que sur l'ORM, et pas directement sur la base de données: au niveau des tables, rien ne change. Seul le code et le modèle sont impactés. - - -https://simpleisbetterthancomplex.com/tutorial/2016/07/26/how-to-reset-migrations.html[reset migrations]. - -> En gros, soit on supprime toutes les migrations (en conservant le fichier __init__.py), soit on réinitialise proprement les migrations avec un --fake-initial (sous réserve que toutes les personnes qui utilisent déjà le projet s'y conforment... Ce qui n'est pas gagné. - -=== Shell - - -=== Les validateurs - - -=== A retenir ==== Constructeurs diff --git a/source/part-3-django-concepts/queryset.adoc b/source/part-3-django-concepts/queryset.adoc index a603ee2..fbc42e8 100644 --- a/source/part-3-django-concepts/queryset.adoc +++ b/source/part-3-django-concepts/queryset.adoc @@ -1,5 +1,73 @@ ### Querysets & managers +* http://stackoverflow.com/questions/12681653/when-to-use-or-not-use-iterator-in-the-django-orm +* https://docs.djangoproject.com/en/1.9/ref/models/querysets/#django.db.models.query.QuerySet.iterator +* http://blog.etianen.com/blog/2013/06/08/django-querysets/ + +L'ORM de Django (et donc, chacune des classes qui composent votre modèle) propose par défaut deux objets hyper importants: + +* Les managers, qui consistent en un point d'entrée pour accéder aux objets persistants +* Les querysets, qui permettent de filtrer des ensembles ou sous-ensemble d'objets. Les querysets peuvent s'imbriquer, pour ajouter +d'autres filtres à des filtres existants. + +Ces deux propriétés vont de paire; par défaut, chaque classe de votre modèle propose un attribut `objects`, qui correspond + à un manager (ou un gestionnaire, si vous préférez). Ce gestionnaire constitue l'interface par laquelle vous accéderez à la base de données. Mais pour cela, vous aurez aussi besoin d'appliquer certains requêtes ou filtres. Et pour cela, vous aurez besoin des `querysets`, qui consistent en des ... ensembles de requêtes :-). + +Si on veut connaître la requête SQL sous-jacente à l'exécution du queryset, il suffit d'appeler la fonction str() sur la propriété `query`: + +[source,python] +---- +queryset = Wishlist.objects.all() + +print(queryset.query) +---- + +Conditions AND et OR sur un queryset + + Pour un `AND`, il suffit de chaîner les conditions. ** trouver un exemple ici ** :-) + + Mais en gros : bidule.objects.filter(condition1, condition2) + + Il existe deux autres options : combiner deux querysets avec l'opérateur `&` ou combiner des Q objects avec ce même opérateur. + +Soit encore combiner des filtres: + +[source,python] +---- +from core.models import Wish + +Wish.objects <1> +Wish.objects.filter(name__icontains="test").filter(name__icontains="too") <2> +---- +<1> Ca, c'est notre manager. +<2> Et là, on chaîne les requêtes pour composer une recherche sur tous les souhaits dont le nom contient (avec une casse insensible) la chaîne "test" et dont le nom contient la chaîne "too". + +Pour un 'OR', on a deux options : + + . Soit passer par deux querysets, typiuqment `queryset1 | queryset2` + . Soit passer par des `Q objects`, que l'on trouve dans le namespace `django.db.models`. + +[source,python] +---- +from django.db.models import Q + +condition1 = Q(...) +condition2 = Q(...) + +bidule.objects.filter(condition1 | condition2) +---- + +L'opérateur inverse (_NOT_) + +Idem que ci-dessus : soit on utilise la méthode `exclude` sur le queryset, soit l'opérateur `~` sur un Q object; + + +Ajouter les sujets suivants : + + . Prefetch + . select_related + + #### Jointures Pour appliquer une jointure sur un modèle, nous pouvons passer par les méthodes `select_related` et `prefetch_related`. @@ -29,3 +97,7 @@ informations = ( .iterator(chunk_size=1000) ) ---- + +=== Aggregate vs. Annotate + +https://docs.djangoproject.com/en/3.1/topics/db/aggregation/ \ No newline at end of file