From 2483a50cefe96ea887fc342d8458c9f8c2223256 Mon Sep 17 00:00:00 2001 From: flavis Date: Wed, 4 Dec 2019 00:34:49 +0100 Subject: [PATCH] add ipi6 --- ws2019/ipi/uebungen/ipi6.pdf | Bin 0 -> 55270 bytes ws2019/ipi/uebungen/ipi6.tex | 75 +++++++++++++++ ws2019/ipi/uebungen/primfaktorzerlegung.cpp | 26 +++++ ws2019/ipi/uebungen/taschenrechner.cpp | 99 ++++++++++++++++++++ 4 files changed, 200 insertions(+) create mode 100644 ws2019/ipi/uebungen/ipi6.pdf create mode 100644 ws2019/ipi/uebungen/ipi6.tex create mode 100644 ws2019/ipi/uebungen/primfaktorzerlegung.cpp create mode 100644 ws2019/ipi/uebungen/taschenrechner.cpp diff --git a/ws2019/ipi/uebungen/ipi6.pdf b/ws2019/ipi/uebungen/ipi6.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cb0c65a6c3e68b9f861f4083cce920e2b4c4f9c1 GIT binary patch literal 55270 zcmc$`cTkh-);=5vArM+<(g{cxfrQ=@I!KWYA|f3`6huUklF*Bkh)5CX)e530s7S9O z9YsayO;PF6^F6rHbIvyJdvL$MnGc5t5wr*D3_sZr&;`n2F>~M{`J3U6b(>6HP`CWkfyCO_1==~6>eQoV2F#G|QXuTlsbDLSJLF z{LAULimx7yWn$O9yIl2psr+HB2JNhsent>IjKwZ>ZDw@IQTyi7-*Gn651;Ju3|d-n zV}CU|@SQ$FM{pyQ>&;cBZY_=T%t4jwM^!RDeaGj^CRww7th*{|RPf=U=Y#GJZ5y_v z8Sw+sW0VdbKE8O6V=a!yhCX6*L&R}b&7PT)^s_m})RBzW^qc}& zihwEGrLg=b{*OBX%Qs#NR5#>`&GsSv+DF)|rYDw27Qe*?R_kWBPmjI1YwePV58AfR z8}iO6(PB_@46}{5;lIIpR*ecVdzJ2V%<`%PcZ2#?w6b$S%s{dNcciJ^vsb6@$(gOJLxkkJwWZQlM1Htz5C!~j)=VgrTn;COFei_ zI7kOY4NEb;VQ!3*k?p_t;PJV)V_+#{a?5FH(^zR8SZ4Z>v7_cD(jaM8X@&y?Kl(O1 zzw;?RX^Wf;D0xT3mx|TWg1F&^L_N5ANsVF7v-};skS{08GMxg#&df9vtVpTYce?kI zc)|UloUDq}8Y0wn9iXQ>ZMSlTtkrb=8saY;VjDLP^^5$HC&5TFr5A8f_Ig*b?#sw7 zmiXyAAI(On*(9CoIrDI;(ud7_*%mWC#=g|RQhlBv`DBBwqUgqz76sfAN2t~cI*-9J zp3HDQaf4?2dZtBG$Y`&Yh~PW%;!)+&wmkYVMLKSgtGA0_T5a9MoE=%`SS;zCI=S3* z^#d2EWGT3U7hlQCD)S4;jbu(g#Fu zqzk19U6=B(&nJDzIjf;z|Jubz@Kx^d6=W3?m&j~5LgA#l_QnKV{PNL}QRBYqmSE0J znx)m8!r(=m0S5xxDSFOaDotZDlVjQ zVx2{Fm#h4J&-gnM?iB(y_sTQ7%5+$%B0!(ECO}2wHAY1+RB?skshaBRp<*_adR7&T zm9M?3YdzlER|M4^5;L)}rLq)W$ZDo;H~HviaL86VDd#9wpm*9VLIa)BRr1QQLsPc; z9E`(ukWk^>K7-65Kd=e9RB)mDc7%i#BxsU%5_7{lTxf--Vqre1THzW)2~8SBr+T;{9boJVFwfgn=dtCl(2;A={{Lmy%8mLfj%qF{$`%h)&*&sH$Yo|#d)ip+A`8pV2@ZuzVUO5e zsKJtKLh>HsU2h`!Hgxj3Yh*4CtW!?SWF-hn>*207o(6q5Sxtu?H%PbCtn>=!lrB-N zBJgz$X&quLzSA;&P$Knnpwju&zLe4R8X?=3uFt6!vJT?oRb}A`En`R3+k3y?a63L+ zDVl}2;#*CNWyuatp`c6C|13#sr77T1L$`3^MxRWh@awHg!s(~B{*TumQ-htC6mbXH zJMt;}^deI8sl?SK)o;b|>qnPmK0z_vJrQ)Z{^XrgM!8d(V!0hRvvo(pz70bH3ctQ- zKJV7i@dSP8S!sFT)rz|;)SqcazJW+>Z)xTjvGG|(3ZwQG`-}9n_xX;PiXV#N=ffbG2 zV^yOX+}s`(pEB@hbI|;xld9KL6R4PVv7l&4f>!s{CFZi4qD##f2u7A&;v2|Gr=`(2 zhP-|xxr7(N{>C(#-H!LR(6x>+b6qKw^s)HEJvW-Bz;8^`l)jHexK&w~voq>v3Fw~Z zcNb{RyRhQ+L{!;oXVxo|Jx`NzBjJ=9;RL(+CJ`Me{H`OEyzIVpbfU8c7HSOW=;&AY z%_g1s=a>@&>RCs7as@IO8BH@8a%Ko^?yBpmplawi7ymO6GMTN;`JkH(3tLxT%0iWW z2dM@*mOkc6RfW)=S>1Z^mP_P_?)|qkx}6scB#+In_$cAyQq25xo1dQ>{AkJ`g$L(} zIjD+S%kyf)lE28M7VyX=M_e~9a=o7S_=vsf@?zfm9gm7P*;A?a)@?3BKT&Hlt0(hz z)Q4u#6`s8HR6|UXbZH!M2b(38Gser!c}^R;mU?DF`E&iC=*kU>0Mj-JCTli!y*3vp9< zi_`aKy5O&JZ)( zasgsSan^;`(nI8Kp8fTX;z_fEJD7H{`sPh-hs-JDkc0Te+YkG0C#4^rC}6sIz$oiT z@MM)n^xD?rJvqz_t>_2NJxa$R4EJb2Lk7k_@5>c8Y zF{R1;iPAjk0e>1n4~^EdjZsA_NEkaI`RUcc9=U8}N*9DP-z7v?GD+$_AGtDV@|Dlo z7yhNH&HluT(VA((Xmgu<+ogIDv?gcQr5lTGnl(&13`Uo3tVke+r6oiHC*||zk2%6# zGJDBAlYmWshUh9i8`K-M7UQ?*)Y$fq+VobhHCJowC@Up}p1gXAi{e`pQvSD5P< zvbU?cRjdB;4fV{e0+tPMlCMP;5rs(+QJB80*4TK0fM&Uc-e z?g7`dO}E)JudN>GY;WZ}By1V@wHIFavP#G7f;i= zbqJJ;QHFTla&q?3dh&TY{P4-H7(P+=;;2<&szvrva1GTk@~$Z&RA*L0@wC)+=lCMa z^xM+Luk9&w0!T5NsOJP+uA9HYrIgNGuTxxs`r~k$WDQqTA{Z>re|DZ~fuL+g#D-*k z*McMxxo@XadG)}f-ku3E!YIk~HA&9>E7eT)M2qYRhG>{8e6By&w>Kf;5VN8#bKnEz zBiy`Bk@#W8CfZ@Huaj9$U)EgmuBy%oTPm4s-p#OnoK#?|?a}w%Wm`Z?WXkZGc}M7J z)TAlaZ}TXs$>a8ewDcD(>_NH;W;syqAVT=9PSy zmESNBGQkNQtx=rZ$X1bpoc5W-%VfpRXn9|%r??ze;&BC(^-y9^o1LAwlP@SnUg0)VJ?B3zVBVrI{i0DI|mnJ^p z$p_RqeW@0fZWBiD1mfd`^KNdS1Y#w%Hd(t$OvU-ylfIQJIXW2M*DDmBw#}EOdTMtT zn%v}b1l67-i_$tSEfC_xTcWl_k$yoMTugciGjJgeEU~sY*tc-(Guhp9noAdlH(5_B z^?SeZ?(Oz)e`IxZOOg6696o=BN?xk6Uam1$o%VMPND&Fgf1-g42|qNTRZ{>jYNNkN zHS<-Q(dil{&K{;FO7*~0pGr&Vs)|j*82w?hXvMb`%yu%^?=|Q+Xiu69$E)q|e9A(`zmv7stwU@fTGshid{5Ru zUcT&PG*6F))1?lkaEh^cUmW6;&{=|JZ=~*6MV?Ijmh58^t?PS``GOM0wUxDvRR3YD zzfP6asElY<^T;h$tr4@Vm)0yokL=`Xfkg0t2Y7O0@qpLj+!<@HHp@U#n-Q=yW)!ZZc~nzkd3dHm^;rPy=wW3=a*{Xn+q?x1QnpPs z=ux-#BAWb)S7U8p(l6rN3t3-@-J7KNrt1Df}=#msu5TE=g^rL1& zY7Vr=@Ie})F0|Y&vB`W$Xw^XJLjM<7^?>>lU#a!?HQ5_V@yb-s$0X!V%Lo#Ynn*ZA z$?PAvNy!dKNm?O|k(S*uW=L66B+5(|HF0P{vK$0s7fxeWb51&6byK-&xq&(EaOJWJ zuHJSd>jg|etMHcXh7n08EYfyE9M%&FBY$9#ZgrsHLQcEWjz+mtu0ZQFL zKqHarsAw7na9hX#{*-F#8H`-$5X?tv@Cycw+p3@Z)W+Nj0V$1X1rU*#NEMDk{sW0k zx@D}8vgX|~=6^k~BzX6M)%gGQz8%2(GU39DOV#yEP8~{pVTOAc%A5M)iu$A6P_@IU z#aGm~2?QDffq=%vsX6YIM|9^X~?jYLo-i1|qD5woi0Owyao)K$wTnDS_tsU547PcX5j0S_`r2ao>(eD?hA zr?;jtZQD~ny0&L#&yD2Lh}S(fb&2(1}LAcfZRaO{C6M_!$!S0l5Dq2RVawGb{xr z5@{P@n}W$A!GjMNbx!&$PV~}Ql}+@12hsm8QNfRTg_^)&UzSyu5VEKDhy&~_M820u z8H$pT{&T$p#tuX?^Iy^IFJu3YXtrzZ|23L*&`?v)L3z>;;UR(ka95mt0MBFam?F=8 zl3kw<3kjhQM`Msu6lf6p0_YhE$v4jmmI^g+s;vY?SJ|pmkye3B-bkG$A}KMjg4}tUj~Pgf%%1u{QenKNTKC^-FDe z;p#4vE0NEE%(znT2wCy4fJ_tk@`!vkF@z!Y5B&P4V<5|ac}6U|Fzazl;jef^O;ZKD z(AeMd4aS5e!ab+RTKp&r#GiaKas!NXALi-8abX5jaF|W#BHdsJo`Bm5*@z@i6IgeU zOi1sl%RUev5>Pt(nj) zfq5kD|pFR1dcTz_uCkUfP1e3;nb#W&!1Wx9o#_%h^Hk0oL zSd+g6Se}2=c}QJoW=L*i4TUvh#e#B>G0yaSkO7ORfBqAV@%q@x9e=rkxi85+L0u|W0uYL)?&JCE!m6P!HOnn8IR{lwVS}DL`|4FSnN_+v$2mN= zp5Nf*E2i%kbmC*pynJqu!<)PyVVQTcSFzX~)gJEbuaz1BV{a1P%iT0G$O&CA7XxI;2bCe8|*c`=@2tU>eOl%rVG6zwbTPA?kUVBnBuh`h59%HYo>BTe#6D6kp(&dEWBh?a;U1sS=0hy3^s zF}!hq%XHl|?RX9~ ze3K8}dj@y=FU+1oT)do!wm-aMv!(OhtG8i^N>YsB%nZ#2-kgJou*7hM z?EYhoSVuKL;lQEuOwiF3RrRlw2JejXX4zEb7bM!F`6tRm=<-9G1AbL|XJ-+@wf_dt!p( zMGNJ%L+km{bnWMu^b{ONbwv$5%wd$|MU+z4)vwHpiL{FE(C~>>6m1DS=WpQTI-eAH zV^N9uR&?27Sr{VJSFhxExn+pp5R}|MNE>AT;p^~WP$LBOD`CX_NEms4PZ$7zl{R+S z#ZvVIa`H$5)EK3t8aPh}-drG1&wVE#>;X?Ffn)6nErhUb=n~y3T^x20fyB&{L@EkD zZV3I1^Y~QzNfn1QM(7gIJ9PF-n5mD1;o9IGH2C}y-A@SS!fL)jM08@1=ATq75Jx8s z2%r96VUF+bq8sey%D;>Lx7utKv0JS;*zXXsL%5>XL#%hyQ~+?PqM;JTrNIRTvl2qa z5Y|Y8`w1ajB~geHvln$cxWKTjsLN&kbAXCoL2s|oJ$ktV0`DcIO-4CNA`%mWHgfx~ zST4kg(bglGTAmr;l^^oWW#aCCrtoQFrDW#Mfs;XW$;b|8j@xvdi&sbhIiB)Af#l~2 z9wXe+X$XvCn~D=JGp;oACc9_trWR=*fNRIu=34T&&4o&zSI!m>zz;Zv-aT!*ay<;&GX>y75~NAqUWOiUbj3q(JeIz zgcB3rj0Okm`fC|JCL0_l0w!dL;Ul^I7Y--l9smx`q;+x@en}tA`;E$=?_kq^IC#Y? zpoOwXnZOm>rFoOH)B9W1&}G#-?1yd{x!*qE`}$IYmsL?(<816bt%~B?Y844$ho0rO zZ2PMXoJ}n-x!~Jv&fVij)(oDfP&mqymTT{~C?h{!AZNVBt$9$BBW)dlCaqo0kLsYq zL&r6dYGevW5QM<33v4wck(Eg#-Y(~&5SiizM4$+O(tn#iLrMPwKntXE@UL`U#+pWz z^b5@*C8vQ(j>oF1B889kw>(AzZggAcV}}oZ#7emC4p5CY*>-6G2*klFTgE^#V@zp5_fxOG+>n5kz*bZR@USyhF$`Q{=HQBMD! z_kHpcwl8h2w~LfHKiqwl;Hn^i@RT}YXHm?5a&f_XqriD}wf=Uee_^4_f^ zCk?F%Vv@6T9fEJvCuxexv33_M#-UGsOVKXyIrsv@ z)QO>}t!e^aQ~F{DUV(h@UYE^%b^1x~aC?F@ZYf90=-V>YFpZ5a5iJqLbo+-qzc3vT z=NW$)ffFCkZlKrWpY~Dk_nD0nW#u?G8vxP*Lf*eu{GKe4mbsK>$$I&lv zZ3IESI!<64{6_HF4fG&Z!Z@~eCv2N!6FLQ*qr=aW^ezyvi@<+9)Tv)2>{V^bMaOfA z$VUXyp-}&TZ3FKHb4I?sV9xk=`O>|K$oDs9<1i4+a}VZFke3h|<_QR<0r0@!)tFBN z!X_OUBfA%&FUCm{GiG9#OK$&|E2w?1R}di*e#$4jgL24I*0C7QR~eCWJ;M4{VMN}& zwjNn)>&s;4!;?kwJ|7OXIi?&*nEq@h_ti`@b~coL$Lmalo4hra7t!8 zYjQ(`i>_F#-B;a~T1WsCIpFUwLE_76U+dGFrJcup_nfl^)N^lQRsb?yWLn8?*Ed(SG zQ+E*fH9}%8x31(odP}IQ7CTRem!FTy4yhT1#@Vl7AbC3r=uIdAO?X1U@znmL5XYSi z9f-(C3^+;c-$;MTi2M;tegda`#*)8$E##2XE{V7!x8tye-9k4IHVGU+fsO@*za=c7 z?Fj%p+6FIySE0IVpxHG7dL4MYw|oxkggtI_@uulXB7zaaN3#E*@CA(T-w>hHZ$X4u zko;Q^nPX#RC7|sANEi~bO`s#+Az)c2=(cv}uH4F;@NOkec&`$N5wEp|TI>iEtYk@@ z1a`nH;x7l}L<|BIKk%emVcXzw#43~;9*E1O zjr~$KqL_0-vFs@w4|PAZmyk#RE43=;Q~`B^Tv;}ut2THI3N}_T0bbvrV~_7hX}3F1 zL<7VClEVITI{;X%7^mr_q zJztE`cxA*+6GRtaL8Q}B(X&rO87bJ=qOY>E3yY@3>nsU#*Ok>dyk~=>lE)weG|bu>XxEo7 zC_=Wwztakly_6|@-SRbBu>P)sb(()weIw-J^h=VWV@7Z59z8$j`6ODbczPr^NmJ|L z3u&PNgF{W*M=tZ39{hw}q+36F`}{lXK*F&`nAgEc9U?PkK43n!-yQfXVbQUOCFux# zQgL3Y&#Se%%iJ5*QKLT7?PZFwSr6ZlzigkISP2}qw%Dw2zU!gjl9ctfpJ9}vL1_L9 zMXS<=wGD*RP{riES&VqI7peZee0Oh}>nRL!#v2aMdKTI;%y7(JKn-+LQ17iMpz=i^x2~Zq`}qIAgYsIkofcwpBC zXk6tpc{6quzNNz*rzUuQkKYHi>!$uLDNud??uUO+lK;XHKw;|ii-6fD&#WOH1QaD2 zkgy+B$p+mDVuygiz_ZswxWMC34)REZ3^g?~nw8Z<6^R@K5-}clO)zGtwzl>o$RVuJ zGh~pwq$n>mWK@I3T4EfmKt2Utq+UVHsTJ*n{0k*s7|>oKA~`VxCBOd&^hl@dZdHlUD5TDTINfm&9_kvY*%0dDZU9FB39-Dv1i|GQd&I7GK;)j za6)^Q`%Y5MSsrIP`X_jAXyn`1DPI^3`qbuZqHUqM1j;Rq2~ySi(pH)=avu6-7-(j~ zFkGT-@xaR~S8d<(R%pbkR5n6B4%WWu$Rf1*RhD>%c}>8qsEFu-SVofCKLU{|@0OA@ z`D<1LXlh&h>U2qx0iy)0$JGDL9sr#Adw2D(-d)y@-d!`AdXB)h_Ljq$mChQe49bH= z(m|*pnB|aMQgo;=_;!>#*$t31)SbQCU=LZk)Jw4wk&0N}`IAwDpHe{_`2hc>`l}|_ zIRAGzedGLpugMu$SrN#2wEY?ZH#!c6XE2x(YDl6h|7rw3f{GJ?3BZWn@8RhW26(ux z>@tR|;iY6u!QpqgICq4QXUto9C@MnP$TB$_^|&C+5uU3(8^S^1aa=HzSfJd{#hbEH z)gy7!sLO5d=EaIxW|dd(mTr3o89V4@T2B}F^(2)C>^!fzXxik^(329FkV^G7NejwW zmb79fExy2Y@C)v|H->60t01HVb)P3h#2!bkml=DAi#N0OZWsZAAa_4KtBdt4mn6av z$q~ytvinb?VlRIXq>ye7Nv4mz=Byj@XSo`7=02h5%v}CJ^HeEf>F{> z*h6!aCiVO`srBx-V@uIcwhYRQn~7{E+MMZSGGjYPLHMgGeX3X z@GHv?8w6kpfZo_gDUdg8jsmA5d2_;FPgD8C{NAcJ2Dz*2d2; zBOZ5W9&HcdwRoE6)*&qP&s*+GMb_ULu`p4M+p@m5aWiHkCqT$;!Nn&-hVEIuxk-mj zkcexR4eDI(lb72(MK(qQF}E&^_n#GbeFPG%cEXs@0x}Q1pFURUbIOSqqNN0I_!J4B=-R-69`CG-E%bbn+< zj)}D0w1~7976#?RB107;LoY`{SD|#RSg#R6OYIh-Ag*R7Bz`Llwn_(yLvtfRCQV>+ zDx@Un6Dg24qX=m5uf%!LMCuI@p^25>e`3XPKdd<7YWNlE?)lE+yshGKu~%lm-!ziDjQZ8K#u%lajFn5D?UnPXnUiw1*Y& z|3Umh7Xj>3Tktz)`m098hHZ!aRSV$M;9WZ;*q;qm-mCmkzkjs?k>nvM^K*>vzfU6u zbwAi$o577bbHVJS&`y7w$CyoxObt4KeXsZ9ZN%LUr5txK&8EBz%wEYbi+56b4Zz5abjq>>i0G48 zqEgs@7w1Cf-V}x?Tln!siYg)Gy#rj}U>w(9fQySM^Gim$&Mcqr9FNMk+c{Tw*VT5a zI8zfh)^Von?QJ^JoPE3vQhvv7TLlefdz?b!@JvAu3O-NzX`+uAifEwo&uGum zUSU&nC#gkRfl{hSyeqB?_eVAfj+&AsocuPRV|C}Tso|~m4OHNb*o!iw+Kb$&8+W!> zDNkg7pL()TdRIozswncQkjAs(0PjabiV2Y%cfu?q`8ug=$EoDS{V9m3g;-Wo*#D45 zMb|DggM+$tBkRSs$$;MVos_4LU&}>`!irC_UmtA~a-K5|u#45uy4i?Vt{f7m;=g8+ zY#;7qN7=>3?NnJSJy}T=H0B-IfqOS54XKzoVeA?KY!{IoI^KmMzdkPB>`o`BqZSGc zLd_&&eK7(YNlr2{o-ak(P}h_03Lk1?ez$S?%kze(ZsRnYkI`%A-oHP7|8w{~O^1`! zDx6r%Yr}3BaB4#R9bT$@QOMrG9(>gIOE`{*I*4VwKTyYsA65b^8ks3lTx{c;Pz^bA ztNTF?^W0xRbtXr+vT)?eipe4cn-tUdJ=l(ID^w^XL#jPWt4?IvN1JUL@=a3F^y6@0 z&>Z41l>JTeU4Apk0GqD$z^8K}Y!ZSuO-vUQ$9**}G(~HGXGTDbikhQ-I)PEA$hq3J z{gdylc3Udt`Wke)u6{7qi2vMmoggF7Cm&2C3?HlV?iI8-Lw4`(nL^avwD0O&^!E2?tv_2+ zbxD5cKy`6Qo=-8pEt3D5K9!z(L^rKG(pVFY0KkMC&G;Zr=l{yS zj8uQC)YGi@VM9Ao$U(#!A-iq|eIRKY4IU?eJ1{cfBa#QNb|8}$&|sx#&k zpXus40?eM z@od96ixK5IrrpNR1sj`7H&>mE7|x!r*LZ$ADui-n^7hcle>y`E*!1$qCR0v?JBIJL-m*(o@%CfPWEQ9u8h< zq{ngYM{MWxcbaUD#s*uKd@L>Bihs__>$=h;;E~>+==as!ny*+)OVg~P>h&As8M>#4 zne<=~hT$sx@5)0ViKH1x)c&#VAOVi<=sV$T(jO|aUA3dr_c!#6sBaD2XTpzwC za4>pejYV6ztc`xvGAINFOa990vZA?AGS8w6{vw*yUwWoBr#AIn3RsD!H@~leTl>O! z%*2((L%gB!C!yvp2)JItHCVTfw#EjDYoT`xF+~weQj+`6$MK!j9zan58leiMpbdLt zuuzQ=6;04DVzp)Y#M^DerC!AE6d6vY$TXp|ls`kSd>QU{^z2h6I+Yl&O7z)Vh(1VD za(7tKWN2?PEqhnmU3oUMjb*d9*+>bKAmeiNmG)ESlacpR-_u*{tQxRes2w+4pnVxy zyU2LYT}^RTo9(v7a1GyLbu}0+3&z7Ow+bUl4$!bb1;0p)@Z4oPhT`O7)!v9mcTt?T zT7M83v*kI33JwWTQv06TmdPDXMcrCjYu>kV_|Ej_WA5mD?PWuE|MXeg@H0b%Iqzrp?2x-v>X4nDrxXv>2Gp29%uU!s5$^z zXb2qM*Wfbn6=#wuI_f#P-Sx?>#3PGXdps6&oy$835k~ejo?d;&z6=;?oDa+0f`Wn7 zujyLM12>KhiPr*f|87)*Oey^4U%&% zK-Js9=YVAJI{R`u6J#eUY?BmqDHEWd&rG|ofzCad*%xF#GZg?X4t>Wp6RahAVtB+M<_{H$YVoKWqpw1cQM9$UKda(X?B0P>}@XX|xR9gfY%#@Px{T9=n+_@{(Usc^8Fy~N)-KwlqeP_G_N z<}GV{ftocTMSfb*G%}xtq&$KCd&Y6;VTF(7qqAQk8XyURovngfHt#ls?u}b_X5O!B zVK_OD5GXtIoQUpF#5fS-{;}hA`~%uhBs?+^i60u{^FC^?cE(vs&A=Ji(^e;cD?d!z zZNps|mRQ@0DT%m4&cO2S(aHN?K5TEhNXNS}bq^h`;;AY)9Zi=^QqdRwrD-zZTe5h0r@%+T%Q zVmF1-)Vtf&@Ad;8{<fNBFM2>iAmI`E3Jy_U%F^w^B>z zlA#Wr^miLi|C)>!w!=Mn#Z#fvSvMHP%=)qy`^J~VWUf5qd;MMDq~DO8NsV((v?+yg z%LDVsO4CQHrj+eR`zvyGFzbiX;)Op#)U34XKqn5bnT9ekKIKl+t1$f}vms}EuSXD_ z%pmF2j28~((>53!!Me3>$*4GM^L@Ka>X&B#Q99!aPH7Z8oO;Ik$nmlcS_jIHe3O(x zrcV_GT*Ul1>iihZpw-v=RV+vpzs}x#L2|?8df28C_FKasO^i4gm{mhI5l9SB1dv%Aww9>@O<|F! z{#FiC0=7TGeMALhwq^VYd?0ok%KeFsMp$_@R{`F%U|fn(AzwNJ_JMC{&jd`|SdI?{jvc9@R&P;}(Jz~pR_3921G zk0c3EvH@8}3VTq?nGU1G~3&SjQGF8Jgk zROgEP!It-Vkg~8m*wC|0%Z%uE;z0f@Kf` z2WVMpJhFFgk(m0_`a2(@{5r5=c6#U}RdxxDQ9pUhcLjq1a`sDJv!gkLQRjX_`jznW z>n}#d2w<7m>qLE(7|I0}QTIC=cA*D-y51NLnh#J$dNY;7Xg>AIZ zA$5MfW&Lk)cMzYh({i2o(4o^h0}re&vF7uq`?~f)MV?k1c04#k877~HQ>3rntZXcM zSz(pj)Djr7%{q`=FMbyH7DtVyt z?%Ly*qE56^99qagOcOvNL@&SBk^XL3c}zwVW@LkLwVMA@KrRGzdeq;`)UplrYOghkW84B4 zG1v1F^GzZM81)COWGNYd%r^({9O*8d@Y6XN_5W6Br|lwu-acXu2=T^>G^V}Dtpt5s4KcZi;MhND2LQL)cIhedk(ze6h(332 zFo}DB%GXBqf^qx|j;xO+nv#_bQ^srau_KWohGj-uz&QT=#hmiMBXjbPr>`{JE=rp6 zMdq)^B_zz=_es2O=TTOmRq=92wbEidmS#ZT>gMS|=2s9EboJ0P#|!>PE}!hXpfwqP z`ZXCEN8cRByV&VkhVbN5eJf?tsYFJL=@i0E%hi6p1fj-$YZHtE3AUyfol&4?3}Y}w zrt;?MNH92Pebd$y)#9)2i6gHlH?)qa!G_zlF{(O5iET7*T{Vm*%xtO@y-{Sm;LXwU zD5XHG;?&2W6^a?1xM;QFSi6ApMgA9GSBicIt7J#=5mP7;Xe@=?|4hP#9+Z9~k_j|o zMM@Js{?t#tbrbwaOY9 z)$7|Go0Fh59_9Q#Wi4JN-}v5EIodS$b5oDs^pxG<(^pS8-qQ3t^77!FuKC%8btC7O zOHLhHkL&Mn4pfv_xqqp>_vPSe0>cyb33AM8+*AQ{7tN|eiLHx$~A#s<+W%N)wBx%ZUN z2qnan-NREi-i%|>5(+se^hK*j8UE-+(S5d)Zg8QBO89V3^Q|6YZ$Jdf1INqv9TCp} zv%tW96@ZPY#Hm9bS-OhnWW>`yLXCh8c-?o;51z^uwx-C)pA-%N&R5mRf6k{*o#a@H zT4($)+r(s&`tC+j+S8zSr<4zNwKj!)cMYgDiS%d+FqcX&aXGIDtPYyzH>FA6ro1Pk z#nB;1mJ7i>C56jE@bC$saxH@kNSwU%UBXz+7%Aztwq1wpWiCqb_ZIy6^{%t}#SFzb zQRI9bc55uCM9usKiT{$}M^@RsJQ+{&RrZuTaqvr-^4e38`hlbcYv%dHltZL&KmqjJ ze$&O@DpyNn#ombm6tL!RrvGmz3S$2IiGq-I;I2&r);tuUi8RXuN>u(&SR@h~Xb&`{ ztJGeEtSbQ{!c$nFkWC|iCV^QBvao{U3I-h+2qV@%)2>c=4TTuuywAWJCxp zOnsGw;wDw{_7>Aqh7KMUwR<+2cRbjv`^7u*{h1O+dLzu8F5nIfPthdGxhleB65q}n zKTI#9T+5j?D54Uetx4UE8B5-x;V|4$2Mz)XoRoONx4z)foFw@CdS^m!c&<%t0CTH_ zi%hF|eDkfluf+zUtV(1*)p~Ga#Jby>mX5BM_Qimd4%r7lHtb@ujysN+Q#i|A+lE~% zPR4?YNnV)&r#s1>slbV;fe7&bN7nIU?grpB{!iBNehBZOHkly#~dB*aYzAAcp%vLfl3#mM+`{+No)5fF-q#l$oQ+b%c${pAPw9d`W;B)@__AajM$IsaUBR&+z6Vy zjZQHAlu_uM!;U=xsu^4cO+wJM$^kj%>OHKfr>{-AWk50^5{WQ0N|`E3BbqPfQdduod;|y4Qan3#!Iv*dCKI_^TctrbPGyq*kjUn&%UV^IPacsU^9Y3-#gw zaU9E)h{g6|E(rIyZcMX}#wpTx%^6c5vLxRNRkKPxJ z+=}Aep`-2yqkBLAM#2dovU7WzD$SuL;>2E*7|#2Hy=_VGZxRTJMn97_-*7Y&5e-NYp?Oi#`!B_QA>ALL z=+}tAKM6%^z>vunuo3!i5$K25|3d^qf~tXwQFR0Y2VQS)UjZBCLS*_31vFiL>sp}x zU?n9!;m1mfR!uHXdL$o`rP~D(CX440JnN8mJ!1DxZM+}30=v#AMY8#rvxx594kJ6) zov%CVSF<{bIOmgFZsg+{6tZPL2*+t9pX(XEc|V!WG=SF0^z>D|bQ<*6E~;Ce&zubp zO@~d5=nA^YBS3amq%mgTdpAwOSe$i7EaykBo4&|doiaz-C7;GJ9UOVSCrZLZPQmc=+WLk2x6I?z|a{6ATx9$ z)ej(Y{Yk2`?p$L}8-$!9kAL=@aL=O(+93)RWM$o01ba=+HHk z4sR6SM?FPTrm{N@Yusn(lAZZ2IU)S6kB=VASX%dedrkKMV+y~ioj$E>a$#J1X>EyZ zSe1np@_W6+bM~hKs&#kDNX$z}WDdAAF6_@jYaFWg7*uZna&HCbN(%!jCp$Krbshvm3 z^#8}%I|o_zHQSKLecGIfO*7EAIbh`13+ zgS#Qy4^fV%i4{;C)>filfufSde{*|(&A|Q#**V7?Yr{XK%zxxv|IzXLe~P^Rk999m z;NY-UK%g~=b_xHe=?G224P6M){Sl@Z44|?I9ajb>Bnrj;WD0fy6@_>Glf1KnhVb)( zf_@3sS^Ssl!*rMW8=S)Wx9sbWX41dA_WzfA{}%+$@t-_lmj8g@|ENd)-wd?>GX(#? zf$e=jN&nwy`_~_?aApFiG~nw}C>enG8|=T{6qVT&^lvNrm*kA)&v*UrzNz{&zwDsW zABu=8w3ZiAqX*Ry0OT9$#N~uZezg&VFeM~1%#yONFlTv^Z++lz|2VlEuxqafqb^SM zc?Cf(OF-rBZruzq;jQqHP2VQL49PdL;tMR7)?R;yE34GRF0*2(+_g+ImysDo##S=P zW7Bvkg%_H=n;*&0n(9jEx6d3s!r4SbR9c!(M_{iD4hKI zYpS~Ai~)>UX%Wl^&|+=F%)eRgFBu%mANcp*wVeDveYZkzkT(I;RA2>_A^-H9*(0|G z6B~WPH9B?XP4guWfH4O#@$PF1y-eb=B3rs+!agl2B{^i{2^|( ziFpg}c}(vn6W0@WW2%&wl7b)dz96Wjz7CzF&!zNLTDAK~AEk7Q>~T-2APLa38}JW<;s0WXzsVajv-}U-<{#KWCYLchlSdXHXou zbzCK3k~i3C%ldPgdj`>j3cCLj760_T5&g5KM&@@`0x|@<<`-ZK@rL z*Qv(o1N}jQR|C0PNM#JBl`oh?H%!Brb^(}JS7Tz6n2?6AdAal0{lM3VFFf0>PYUnG z$7t`FE@Xz&!MgOA0?>_pbajz*Fc{Ds7KvyV86p7+^?EPrU{?!;`ahd_b_qn{N=ew0#+Gm1cjrU(Y_cxR0 zL7UYNxtrwU7vZ$t0dHO=tvv$Y<2NO)c&x9zSD-TKk*it8xRslmQ5T`bQP1)5l^(@8 zf-Q>VrXCPAIw_Jyc5WsS7QpdMD9ph)f&)uuEm9sAxKnSw@0&Vto~-ZzonS}gF{H# zzq~9hIIOT6JyizfO-)O4jxD(3KY&+(5kqKgbihQ7x!WKC~VZC^*Xv znB#pk;da*7fOjTXBRks?TPfn*htbpDjPaM0^ncRQV4u+a&-AM>#T62#tgilPKj0j* z#*j5EEls9>6w#ny{~4We{tvFIyTjkwAC{U+#W zy2f|ly#xbO^fV&(=)#E!kRpi-h5Q^v33tgrkbXq;hd^P$dE@hll&#pe<{;`Z5!+xU zf{+-_^@qj}m}2@MWFp2376hXaxsUM=moA}L#iWkB+-KT*=BxJ6?_B%bJJ)Y}S>MNS*}`&`eMhxUd__nd*$Is>l8_2oX-3^}6bBXyLpJwSc~53P z;bpWF_{wH1@MFZPu%kezm1i9#TA;``p^w?G)0g9DBruSb0V1kE_yqz8%6HEvT-JrF z+Q%sXsqq#N><;{g5YSHTv0;D)CtRa=Uyk1={FmPl$d71>=y3|Z0Ey4;Z_@Iv>{ zFrY7BvPu_zs$$LZXPtB4qPss{`>FM5&>;T|TLctaAqldRz@1-W zm;+Yh{H>?3AtKI5HjH~6Fo6i6pxzm`34c zftXOBpNPA-kFwIBfZ#ini|7~LIFo=u-kreCD8QUpa|Qblg2>+8OZJ2U13M#PCaz%- zz#k<(Tu?s?!G=Jix@OlLaW)pdd_Htnl*%~KM7Y@F1Es>aH6qyaG-x&+_jIvS0RufI zciAzB{9$&tFVfN92h@|0SrYg(qyQ_z9F0W--eiJPzEN9tWy3Lcz9q|USDv>o<)1e) zsJjP9@-xTp@?k$5BtRepL;>o(vYdkZMwAy2lPwV!+zteLMIGL$r3U&oTkM;|hJxa; zwI|gYkv2&BXbCsNxWn2InDGtAYi9AY^;;sh%zLh?7v9?h{5+o`Ngse8fL&Drk*{j6 z0+1#^u+hM3#&NO$0TLQstN!)QWu)fP15z60Q7#Sy4?e)jSmO~I}P&TE1+8tYY?9cClR zjaD{Ru}1IokW+Z%t@5btqlLJ(u360jbikC zU*NP-@^XN^#;UD;&UDRo^RTYF^bk0A-6oA|z{oG#`xq}_pd50>QQN_>$jlU}Pw<0h zlh|oMIv+>(8Ut9F)^b>KYW7ja=R1M3!?lcZf>#)wOqSkR#&jYw+H4y{W;a;q z=Bvzp+B$DN)fXIY@>95I&NnY!fF-VY?#%j5g+mRuE#jl*0Sxt^*Ha|DM;EEr**Gf4 z6D$vd{ARR^@Q*T2j&{Lw9fI$st)R(;B97x{Tq-$&TAg z5)KEId@=MPe)JnHUO#WB9`6sCrPXT1fAn3VqkjOGBfhUp7s^b5dz3FJfb~R32 z4>u;W%Ink|k6amq>j6!+^UX2Ca$7cHY`*47+{{IVMOM*NVz_ksaX)J3j&T0+G@%Hk z>#JluoqBN!+=Y3jrAXmSNxyfg{pUA0b;08pma=~1$sZ&Lrs0eMUk4EkflQLC0Iv~P z(1{sdj%q%4lEWuU(Duyw2MSrFRwfn7a} zi{+8x(T8T*u{UMp(%&1;3nEw6JKEdL0XjRF%$K!#o4#eFHSdz-G-uff7RgO?4l|$< zI$QQQYv|fd4lSFP&pG;%$CF6JzfwoQC)Otsh_+KZ?tPqLJ7hD*>!vR>7_4Xb-geEy zd7r|gpHvera0cDV?&M{n27c*;u~}U9F8A?0Em7nNn_m;;S#yR`Dimd_r1n?{IMag2 z$a9N+R;L-Gq6#xmMrzP8PjJvg(2D4`KJprzkM$Rew-M(o2Wf9+$%Mj!{ zN{gAZupVAs-fz{u<9IFA$pf!LG%{KMSs4^X8cffS*W(*nx0Aoza5ejCKj9ITe1Qvo zQz}%Wb3i@@45f&@?@F(Eh_aL;rrGM6^I;4`MMG|2!BN}4I1B)*m~gX?10i2Hp>orO zq?Ej&icpIWy1rrjpk22lAN5J#`t6L_p*NCe1L}hAJufWeN-HsV|H4czOjDK``;J-9 z{W1fiEF$=NQOI0^ZGe8aliiU=%;zV6fex7dm6Ny4JfJd zvo~Ju3(*B<`=eWXsRf;mPVGzrI0axP3+KsRJKpf`sv&@bY+s>Yu5wc|?oj5$He(Z2$4~z2B=EKEiI~%R&9VYlVdJhM6_PMWC zeC4Apn|Y=&o-*Sj6U}{>8_JKr!LOka!`8M~?CD50hJNpGtEGjTTlVnyJUX%ud3Rg@@Xsw7DMwr6sZL zd#-L381eN=uTA%9pRyDRe!_1F$nXFoN4fgwQdNQ4mUNvo^=-QvZNJ4v6T_M0q)Ia& z-K-1W_&VIP=F&LllKVt4sKb{c7M#neBl!#M;6`WbwPL4Mu3UPt^|Ud@lHQx_cMTj@ zbARn!siJBvdvqP4=F#hW1P?Qk1#bnS;P~h_rv&s6m9wkY(A6+?>0oyRSh%Kyp0XMi z#LCd^C*D3Pcvg;`$10?p)6bD@SdaGO)*%IUa$deW`>Y8jrSeOkvoh54%2JU@HQ7iT zZwJ3Z=&exa*)sFfPP+m8ftMxct#N)I{R}ASH0K3PiYAQ=sw^`z9Wj6`ZSA$Iw&bY{ z%&;~!Uc5#-%keSJfO16*!r*J11nZR^D0YkRd-pdkOzfW}op4m+r z^e2k-5p$Y`A3%OexxgQNNzO0tu*}LtIrpu?*4rQ@L`t|OmssM+s>C_SyocNle})G6 z!r{)tJFkzko)`tFQlh26b~0)g(GoIa3mDldRv#nyQ?rM#c#1h53HqHX%RszygxBZW zBP_7CAHH|m1!?iCvVZzeG!wjo{Zn_Kyu=*J!+z2mhpM)Rly$f{nZ{UmrxEYRkY%^N zU}Y(^sl%Z~vosJ?)Jg{G7CRnEM7BIfh}92V`M`&^?<&G+$J*>JhZ?magTBSQPYrvsr$Gi)^I0$Wj5E=h#h5f1{%_bZ-X@$QR->3 zH7{FIrkqKSZxGJ@sZ`njusISbk(FVJ6-bxfc?K<~9WyovSNc|V?k}^}(p_m1#9?I~ zCTFMlpzdX}hlSEzQYvNLNM?v2Q}m47rarB3t zIScE7-Mn0Op1g6XB4h3}?@ z_H|SBYSK=zAB%IH8b@rz{HQ~a%V@tIb_kZ~3`ZMrGjiK#NB5f8#VyTz`g3{bm0J@2 z_m6mAGpO_*@!{9XFvh>{&fXwELb@b?-iC)LH?H60&%*jpS=>@qtXF1}g1UF)y%>tl=UkK0$w2bQ2EhZa%`vUim=#*~7QCc5Q3{0y>GG%2% z(`cw!If-+{m67nJL!9&c?L5Q}U)ql-*vRKCkbeStOX7DWn3OTr!S0jK_q?qm8M>fZ3{(-D63C zyZpu;b`^_0ic-+Eve)Thq^2KR#b#NW>U|ynZqrFB(sR&%hH%CYVUK(gkCq3AR!)cV zG*5G6S6J+U+8hWTSGI)F0y?GhA&OqG7B$4@)EA}IIPOjq3GdM}m;vxVr3BV~jSz1U z+V=bz%qWkV@v)V@u_|AFpO05jmq8dc@541FL2=sFD56Cxp>|`?bj1;}diPc!`I;L$ zw&u>gp`&v-@4S!vxJzxQv}t=Snb`qz9%8zD4_sVXs*RI5*+x)C7II#?bW{Lq^SUG# zPW>dJi?|ks$x6u;UV!sTwlvJzuaL>-D0_5*c|10T|AB!!WPt=LkJ#ky*sd%_nJm~u z*g?*R($?K`1LHS>^NcTx8$jszw0reH_VxM+%jNnRnept z47+(hU%9%3UQun6l{eww=rgzm2(x>GhPOn)v)Qj&IE%Oj-jB6^m|@k0PcP1yc}*X^8Zoy}14GEL~GOK9}sy5n!f!%0u?sCIK-GE`&<39o+q@ zhGdHB(zAlL8O7$&rx$uCS;ejil|X>wgNwUuW1%DJVMi&$^D$86?qR#0V=%=%1}Nj5 zN!=Esc{7g3nw?UX#CpAynm8=ktV&73U_XM4@bYVt$&PF4t*!fwi=}JuR+(=5j41+~ zkMK&g+VoRK#S&nnHcds`&Q-@$uRf+JgAQ##M=?nKpor!rmpt9dRFpjxRAyoPTYG6g z^0IOck1sty;oTxRZ+Oh-M6%Dmtfw$GY0@aDVcjNe-QJv%N=AjN_N)z4fp9 z7lq?e=<3mg;F%rN9s1fnlL1F-!BV}4{QF{|-e*16~3#1^5(cKRkC_AcI&Hf#Fz&NBC;f>6oPt(phRc)K}#khse$8CwtpylGl&hgCF z{pn$41{)%ErP>=pOq*r>E$)^IMA9kfpoOVSCE3jN)a!jHN&E7ITrz0mT!M4R(RiHQ z8Vg;uS~TD0?K{sQTMp790Gj6zP^ejFu=sLVaBF4wdk?$W-s)Jc|!H8rx2jx=6pHd?hv6s()d z>SXevHn1}lN+Uo!r~u2-tE0%0QoIku~BE6cV2 z@V7*xEhW|%VRcHph8*o^pvmlxi)HET^2qS+A8RL`DEl^zZx{y6Ddo zVgyx%o=~4uPlz}>uHGv~m<(B848oWM-P991yUjz-yD_HTXq6VC?dUx=9L>pOjk>rH z5**9EM}{M^C0M7Xd)p8g6!bs(v7!?Y=l!m|qpdmWDlD;LDv&tWqw=OvS|L+qS^H(A zkH~dny)msjn=pbFf;$SvX4`D?Nl})ZRyp9s{C#krT9EWGqaCxqRuaSr_=-G&*Zp*M z&Jg_xc;rWS$G|Lwy%UdZaotVwYp2;^gM~FuDm!gT?V^DEP^0DV*GgxV4j*|cN zQZ-g6`X;}My;sXzTMS_Y#i*w|L#q}-Ec!+IwQB^@T~#J8$v1h`HmoK$_xKYNLi8Yc z4!~~Us+|j%_)t3pJcimXgB9^{V9l<$nZ2C{nhdP(-iBhRF--f>dXjC#Z(ij@hO_7% zD+IJwi=Iz9xWz%Enb(^uI?vT_E@kDd>ss;KLXNfpwYl8MD1}z+?JDSZDr*8J`@1Wx zET%jMrzyM0v=J$%!`=&Boi)Fq2Rd%8c4C;`(OG{nt&K5LQpvRl<0N#F zzhX)tV0}h*Qgn|s!bOp@|GjHPP%iEj2S>)mkFcX@Z~DNXAbGoy1ne_);A2n5lXR0c zv$O9PjNt*6C_vAR-JoW{N8JkeBkki-DQsL=8GrKS)o;4lbmsfd=5e~oj59K+249Yx+#6BPld~^d`S>3erro3)7|(%TUt{#c-S{^K7d4&PetmJ&x|Lo zRJ}R0B_JHO9+dw0^?hjh%@ox1HwtDn@6YGgISJTeZ4;E1^Y0kn%#({TL{8yAh%!TX zU?v(%?#+*Fc&?uzbKh|H(KyBvO}V_s5r)UpA7=Z)%&k`5qwyF(r;k)Z15UQT(Wx>w z+(iX$ne3||WVT;?{p4$O>T;efh&|Aa3TQQ!BvNKmYlGVyrSSIN)DKD0C6>6qNIIe_ zh?-5ZU1(~b+?`u5*^H=Cp3`5^S3Svv335W3)vXSjxSo+((OP0VRu0EZcgIoM)T>0c zhl=$W8`vi*OxvISRF!`$oDZdF27l=B-;EMuc2%1zq69PmjN(6zKhy~HntpM71_cgo zR!TH2IgwiT}WA-2V+$<6vUv{1=w?-(j^s z9rORCoAYnLYM$U)^M1>Mb8u;B)+HdEQxejirF}r?QOpprD_6m?%^**r1{y zns489jF6DPP|!hw#DMhlkie#~KU)d<%wa~2kg19u0*KU@oTw0LRm1jfg!s`=$}W%K zz+yo9QRa5m=ZKJ$z`&AUaU%z$K-CMbpmg(dk(6-5LQR47XsDVnA&jpB2af@7PzOP` zApI&Tt>FIcplNzLSYU9`U}wV42u_&35?Bk^R{BczQ+*GDxD>JI&aTZWFh6MB88UnNd# z@eo|Ea~FlpB0{claH3xn#Oi{%am?YzgG7Ur-oi*jgB;Kga#G9)xtRe&Vq|;&j{L3~ zcile&87BgId1K%Af#l)zj@SnY>mC8>jK$fOHxq#KNe$d*lur*54!YKNi7eIETe!dI z)Va;#|A`e!`5P~^ln@K*6#!WN1v0~=i#E4sX1^;Bt z5P(tC=Sn=@mJ0wvf$YCA-1%bN4rqV>vif8l{~CYzs*&29S_OR1Ip*B?su$Hqnl=bP z@;d9-y|K-Y7+?gw>n*Uj+3u`_Y!z>7e{WTXg&eL8L75{^v=*+*K$5y>B?wZN^ct|g zCURnm*lq$;a{}6(rlH8*5ny6o0FnJZK|){VgO1pf&|g^nd+mUAu;D#TglF4CL31wu z@=xsu9F*{ek9I$jJrp4-2+&86orr|*LqP&Y??2WC_yg*3spvw*c5fJjd}sWHc+ntk zTz?zAFN7rtx(5afg|!EWl4 zuTFDy(2{Uzm`KN;Yi8By$goULWzLqX1#ClVw7Oj^X?pOFX9aYgH_r9Vo{)PGjTQ7b z%owLI`8hjT)2tpRJ|3~D(+U@8|6u8K<1WeDLC}SBM+^(D_UmQFOuIIG?7mLsZ#$)3 zaI}qZKk~5?1T*Uy{dPtuYl!mV|%Y z+qwBoCr`NEm_cO!ytC+-y~~Beo=L2s&fI`AzxuOM@NQzWwZY2Ij_m}k)$Wau@umcS z@%);r>cUQYV@LY5{n9AM1QYi2!f#R{B)3>|x(^MlR(#!mEM|wu20K+zVCct_1qoZ; zj38j_s0bgqWS^aNk+IW8nqc z#f$UfLL?f3E63Fm(QBY&Qf!i(6_1DL&b(2j;4;Y5T1>pQjg+NAz6OTV4~LAl+jD21 z-ov12eX)3we_sbRB(^Z_(ZDX_af*hTZxsTz*DBO}X}H46r;QH(Wyy;{`vjpQU*;p% z%d;&qK-*XLo(Y2-{$R|fX%!zIXOwDz!2SML#9_~v-xJLMm~Jr4NAM`6k1!k~q!K>Z zPoU@M{FM~?>qhzkx_kkk%@cVQ@8ch_r(&($Lq^JigD{}HH9mlIm$YCi#`$^5F zcr7@&dzg@G*p4j(4MVT&@~*?8QCS_)H%21Tq&=w>2Nvza&11IqSa+ z&KBbt9K3CeBd79cmYBh%=2)}gdFvZAFmubel`FOxuIET8KZUs}N?%O7G1use;pHDWhw>#v;Jx^qO zCV@86E^JGIfOMzzWKeb4lB|5m4uGJ%`? zSezRA5{vv6`D(1_!_l`0`yg1f11K0Lu0CFU0K9t*eXkfo)mTGe>9~{{y zW3@KDpQ8a}FirbK*=XEOSMTauq}HETB^Q!YKF-acL%CN?Id1+zv}eKDtDKGYCyqC4 z-n`{FIIBBmI1sfCTUc;fJYT)*bpDM~nWtw3^Fg^X%4%4WhRIkV$*-m;TOe0tk#F3xLv$GD(n)nhD ztj3l?4jf-UoZ3lx2QIPLJTtJ4$+Fd^^htXH0K;O#&huHGXu|HnupQ5G*P3g8n$EH; z1z=oo-OUm;vs@|=t9qSVdnGvwDgk9qOtWO&PeeZ0Wth9ZAhTxpA`00)=Fk1|5D*Oh zMuVx5maadQjep{q_F&-k;lxa)v144f_`EEF+uFcz-Z8Po^sV@x&OER$4*aAh zuC^zWX((k$AJe1mjE zT6e6O94j>_#`bc@YX9c_*h#gmJF08Z-CmKEe9oNBo6^JU&8f3ch#4+fs5_I%Y2lV) zUIhZw5^lYwlRb55-TfTywZ+WRhSgp(kB?!S#YzEKmsdrVhA!eyw|eo~gz;73JG}-j z^6hwxT+|8_1IDXG5>aU9t!7*7-8q~@?W*!AzeK;X28Nt%kp{V3o;gS3mrKw`qkO?q zKqY!mfhJs7gOZ(sy8ySGE6E#HS+sG;U&g8xVV7QYOcuOh;Pz3V=VSgwP;q1>vzG!J zzXqNVE_9|M?><8@)II6u+YL(T@qNA*FwM3Skb*5GyNb`()_`@G)^Ox$EfTK`_nv&zq0d!bERB-h3r$-|kTvHXm>E|SVDqj__at-u7T=bb zKq->peWye6q|bgY87!u5NuT#zTN9xM=IvQhJz`oRUB-b)$t9acOYIIFR){Jf-AcoH z0a|*z?E-02cOV}dv`Hp}p><9qG-puZsNut+h##W$DZ)K7!g=`0DvVPaUuy3SYOPQ# z>r<-ezEY`ga)fqVEtC4G(>yGt`|5DrLfCVY@_f%Rzrz!DR@`?s*6T`y18mr z%qopZe*OHG=Mrh(`C#r)WA@6L98an4R)EQaFjw2mQf`&14==YAkYo5(=h&|aQ6~DN z9^4^mz3XK2d+l5CgtAUX@(oY_NBB!$jB5%DLk}u+I^?xSR@!oUvL%Xn1gGZpkju{~ zygaZcI6JS0y@3~G^!vy&l*{q*u5?1xK82LI&m_l{N1w~~cw>L@K*$;AA2eBJ>w}{g znFBzJ#p*lr#xR6nU5)@33gt9AV|dx+qe|B8V-bPVx;3a{(%*x7Qn@bSnLy}waG$k| z+Pd1?+m8H_t|0Bbs-hF+INXagDGTiTdQe`NH8bBMlht-HVl|Lgr?ZI|6iaa}X)@=6 zRB-dEM!@o3xdG?#wEnLukMHA=;d*(8rV*Z5T?*{0_E0d=S-*xz#j6ei)L%D;L-QR7250DFO zVTXcd7C1=lT1>&zD)c>l+6QN@=IpJ}EfM9+kxY3AeXaZn-uL$Q%aQTSFLRp~;_JKP zHD2CrDmo}euj0m6*ylPV=j|=XAWv?}^(p6mCe{-dgCN-CK4W~Nm2(wxE}@fR z)hj398GUMnyQt)vv1g#!hJgY>SE5^GQLiwiuaO$vo)q*gzbp$btVkDYmr798+jIGS zc=Gw;w-|+5HVDqUCVO3%P;{o}W0Z*Ed3g zYe#dysrn6Mm0>BC{+45NVyQJF?3K`2mPom4S#}4zdYbab=6W1v?IX#wk7y-xuDJe(;`#?fO_KBU&`4duVk>p( z>UmtslB1X&Cus-WPxz`W&D29Bk9`wf?d)VIxI1YH{}^nE-N&SxQyU$3QOSNY+lFk# z;%)@!kfA&)hT}1*y>W_AaqXzHoReyTQck{x(b#<;vQG=!V9T1Kfsx-w@1z~gaVd(~ zH(3{-9}dkf{TQWIEGwPOyO4cg^!C!GlM@`v9FA`5@a5MWL;a>%G4Ja_wBOi^XpIV6 zf^hvSfWWZEu!TWamFsd>e+^8_F_AuR8}RK(Y?K=KO&G?eV|Mc?|X0^RqOT-PkV z{BPBfhzSFY=MvnK* zo1^P^lvCe#gO~8>Z2#p>ve&Y|3|fu#Tp}}ts@lv+LG?a(wLQzkPVew=itG%1bUjn< zd%{uA0;?g33d`7WIl^d9UFH5>Cck(>x&QAj>H+y=;>h@th1I9pxCZSl)NbPAk`~*x zq-2HZ#$p=U`5mow&JCA_8w1-%Eil;`jfF0!iUljenxuD?Z7(Jq4kDJv!Vmgz4Juy; zz!Pp-#2;J=T$cH~`N73CBh>l43I7$(a+#8k1jBVR^VKO`FXs_W33S~u><*fZ>+*)T z*j#U9TK(0QZOQXJj*;uY?T7(wA%59StD&(S_rG;WaP69+Zk236~?RTu`F#Vl}x_rsh`*S|Ah*rv1BL~Fg+{DCg z^}2BJT+I+1s3?K~k89lV8B4=6!<}Ko$IbQQruRmJ5VN>wD6(s z%X7S1chSUS$!18XOQ!eL_NP5*jF$BMd_p2p$&sBRoD`>QlkrqKlxfY}3RAxvJHfQ3 zEn^QXzbADj%U9hJ6ZPpPzqT+#OyL{MU>`R1-l;fec9qkSLR4U40r)O?KB{-WwOw0} zahjByj;0(R?Zd87UDZ#!aegk_vD|Pkx6?! zUbXak$dFt<^D=Ks0av6knD#D#4NIuR;H|9!J?5=5EZ}1&a>v$VS)eo!$Ty(uZK16~ zEJyq>UqSP0o-0^P<37U2po03k^OxS_c$EYB>W~oQoG-tZbyF2)dF}&AzLMbyP>ZUP z6fb6Q4>eCw(OCCU@d_Ypci*gziP{>=SP@6&g@}N2TJBUjv!ioHaJ(M#M|Gw(m6( zy&e_kk;&nb?PD};PpL|>h_P$eh7QK4V!?s4d?}XG3bdJDa)zjK6-E8PkzIIHA~`y* z;2ds?NlT!Z#p_qvuEC&3h0zJPlOCK;j%GtD%1tcGpk^ILiL5+c$1)Ug$*-@oOF=PF z(G1uApFRV4{yr5CQ4n7rxkMjT^^DiH>7p%#j1-$wI8&gs17(o8uVk8%iz-z|=!_ zqEZJ%5Cr1A+)EO3-1?)p5aCDJfVZe_6AR{6N8wx4#TIOUf0YhybU*Z8OF@py#)G)6 zhoT9^xduC?TgFzaGoXTPdxVKL$Y70|+sjbTTIu;syo=Ezm{=I$PxIW$%Z>G=%(MQw zN1b|(ko45egsG6YAa`dwsqP8JaR8GqeCnE*6zPeJCn|!Jp5l4&jGTAJ;pqsF6OH5- z;2-Fa5US|F3nph`&EoC&wJ~S${PT^61vO~mDUDpdqvft%899{4Y*iCYQGA>4#iojp zUR!JO<~#qb#41R8)BxZ0cxn>-^2;e4O$#}bslI^D-nh$lzMvySm@vxDZDD^W!5(9n zV>}&z$6Vv4FOw?_`?#6V(^{#8fua%dN^rsy{PeQWfjfVc7+24axAHq!9E{h2EMP=| zih@P}F)C7$$F0h-_00x4s*}Hwqf6D73xCq~<3qWlVAtp#Vg|86wBF2lWC3F0E)nqC z=v#Lfjv5(mdmBVv^MEX=dv`Q#On1<+qr~NRLWiF|7Zw;$Nn*!f`g@>8H0u?~Eklev ze!5LZ9YD1jn$Z%6xfas~!@U_K5#$^W8TRxbBPa?BHSCC1&Gxc*(AhS^xy}+pISJn8 zy$LTre5G08&~zO?5u7|(i~o+K+autb$U=wBdve8L=M|4=FVK2SdE|YCgb~7i40xs*?F%Z zko0=lLZ0(+#c`Dn!+s^pdL#dNdMV}?%A47fFoUrio9}($l4}GJ;E!94B$MP$ zA^U7RmC|;gn-BNtG)Pg7%~+VxdWL|HNDeZ2868oE|31O87maXI$VGt$yCHfnZKB|A zGsD}!_f+X*39cEj5MtFoP|;YP$b{!Rj=WBuFhJ^^HitcQ>7|*aLMhEFr(nv1Hl@Y4 zF}15vn3lt>qT8Xf!X*;%P@|3B2GCs=#C@A$8dbw5>GBqSiPXlT%&pF?_j7EW*=Ppvr_6Cg)X z;f0ATUqMQbp+U@ASvXiB;Ae%2K=_PcKx7a=(qn;S=7BL@WOB3Bw-A=G2uo;CB%kCMCNI0udSi?w$LH`b>k0f5(Rl7gD++Fe)O%JB4!!CN%;Qh37YpWt2byk`M_1?uTN7 z!9{$67(_Obr27xLTzCUBP;Ac4jIUKBC_gIT zu@vGtRJiW#it_H*X)}?E(5!EpmXZtQ?7P?&DC< z916-F5zvJI&=IUNGC;j=at8Ei9k3poLrm2NdI;<^5DyF+%-dgQI0S4}#|amB`w$Ec z{$9GDM{9xv1r#RA1SFZkiYNVkeWArVd0NZ<^v=KA1B6SI?oR}CvwUpm*`gILtSl9} z-MibHpd}`%DY~tsyE8NPUy~Somww6fFGfbYIY< zIZ1&k@WJrXNnejc@HmjMV$l^`BHZ{P>%w#a#jf2@)KFZm^)iT@wiI?(VLO z%g6hjd#X;=y;b+t(^b!OPftx(*Zk2n-P1puy>A?6BgP&AdWa`)LP-B`;-q%yT&6BR zrmo;P(F~!5hQ0W7n&f@{{c>R{jpE!TDm|uS_w4bflJwr%(47Ve`H7ZK%^4kTZW8}U zHd@5~NP!#&uCoLWT?7KUg)1NxJqsm_)OL8za7{_NO;H*UcosXAh^R1&$1p7 zsfF~~b{)2#S)Xq18_G>NjNg6n3P3@Qk8$$H9S<-n9Xg_}<&>ywoghiHSSDuuww~=z zx|S>Z{gV!3%uBLoU$~R61$rO>_I&8Nl9ZyY{l}-iEFPLg ziyG8w@8yT(HY>Wa`7^nG%VlJiPDb~vYvTg7SV5o-6BduyEu&7?ID>mpt+^L2Z?U1$ z@p&=ctDoy34a!C^hI5j;){_Eiq6Zjx4TLHmla-N^Ex0aLP^;1Ihd`lZ8Y-_@#3O~@ zM?N@l|J@DH6Qic>d|DmFiG&9EdWaKe%dm5pYxwPvMO=|%v#^BS+9o$4IyF*8Z)M_k zXMw@T&*@*I7UalAKQFs?+uzpzIGeThKT{~xFYZe`PT@b6TviKb7#S_AP0W$ken0Qq z*3v(`uu*u*zPnBkQk&}5^vg_y#D_t!CaL10OL#83`RGrZU*YX3x^aUF z>D!B6Nr!o-RAv*+bRn}x&^F8C#zpAwgx7mZ4G=2mKBYo?vzzhxL)~WF&mlNjDbCz# zMzvODm?Y3Kx=9(RQ}L7^+E?@NOJlO1A1`h=?I;VT`nKg*CIm6|l<-Dt3QluN*!68e z_e=>)vata1Og@)2cv`MQK`lPGm#j<5I<8ZIO-1?dA)53ua&xB$*@!G_RT7Liog%zY zgoUzb@jyq)4dwBJwO6+(srqVL%-@wjf-0^gug${fgOZ0w6UgAqg=mf5_W)+`T3FWh z#AYASfW+b7{f1C&nS*ejPr3Hjxxe^J^Bnd{*UU(*GD{mwT}H{7z+#Ig1{c6+X3>R(#Pr$_To0+`7yw30<){}j%kLv0oL^L>|04P~>B6Pzktg3pSB@(X+MO75O#*QQn`w!l!$fZBy2q+>JbUjhQxxAnE^^bcB3~ zvKQvsFSJy&xA8s;M}J^pSH`1}5T+}7IX^|KdMwTw$Zyn_rqg(OLsLKZXAJaHaz|zX zrUKubw@q#HGn@u0TV}uT=2}|RyF-P%hSBCpw09=A*HY(4ZE67_MVbO_gT>#(AD0eZ zoO43ndX>4h{;oHjgdAs>BHAH_<<7!6~y9OrqUjKAMeEj|t}ShjfQ;#msZ z#sOfq*P`|J@}%3_(0cKs(3|=y3!8)3*3AU0-A%dD>Z4_7+PzPZzYqlpZ0_(b?+prp z!!E8KfK16&L-352r?|nC(W(crDSQ0OPOFyZiSl^My*0Wf^tWyvsMBLxPxQ4(f zHEBZN&D*{db&UAz#+7LB_O}Qx)`Z$-yWZ4caQ!$L0-Z>YVe!2%(5OR#c)@f)4Uo~8 z6|ip^ZcZv$#uAW3n?nU^(%FkK7~;~WE*ViMBeUQ25^&a5ab%X@pduhAz!4b-79|0b zKb%F-lBswcmyjb+z{IfG%6XOiGqH;RybN!<1fA9;0!!xvhY;6lN6Oz3jEDY$XzH?* z#bST)3>vI)1l1E3BFj77#FBF&M@%UZV|?9$hK;W*Ul$< zjp#X{bv_E2bsZ_Jy013Dqe-V%Mc5Umv`i^>AKK_B5Y2u)h2rqpYD`$*@?mUR9pU zMy)DAAHD9=1-DfwIsf*#WdLm}l%Asnt?F9wl+0T<6Y3iCeZlC(aVa?@PF>_f+(7VJ zWZEu`XBqghmfT#APe%${>rvHOItnyQ27dosc{4QpyL$Y7y1gfJsa`?Vzvr9&liAz# z>VDDF&a3ZPd*sB(IG^q=4ibI;DrPpSUA&k2;VWQwFkE;c6x~DSSUZi28~`dp)W9ch zg{Zwp6P9Bdus&4QfPA58_2rCB&0X!_XIA$gP-qBG^NsKcg}a)+MUCQ zE2Vz%^@`gxAls3;NGwfsU&|m}Y)zZ>)TgxjDs@|DxSHvU#rJaj8rqnb1nc&v_D4_U zZ*bX>LS6CN_n+}r*ut`}n)?uC0^@IB%9qcHJ|dpf2>RwzUxb7%bsGZUd%gmZbkWZF)_jb2~uPJy5@SD*wLlP?Rwx}l~f=X0;V`jdZGY zv^>CS{yaw{hUf$_Blgp~)6{l%?e}I%qAH@_eWz3Wl^0&_2eE2wrVC8sjfO(%x7vsL z4htBxpPzasoS(AICl_KdRLgmH9-0fM+RKq0JNc2&Wk!(6#p}4)+vBcmb^%jY*wLpO zUqiEbNzgy2(I3mc7k1g4c|VB6kplw6yH+>)^^XYzxSub^=BOD*s-ly?*Ow4tWCG84 zz_&s*v9gyy$+~qVL(dq0dW$m=x4?X_d{TFsFs{82ijs8D&pn+rojA7^ab z20B%PKKBp0+Buu;c-$2Jzo)~kLrE`FUQ)d zEFq@qlb$-=$trQ~wc2FWFqttO5p~%-!21e8(KkWM-}Y_^RDzt|nrd4BGNdwC-)NJa!{anE6&y}$uo{E)2p@oyQz2*tpM;JV<7ZA3$6 z>25|X)Giv=c9q0@a*HV*(QNY^G@=#UaRzfM3WxV7L{=tBE}s_6oI?e5{7h)rl%fqS zWIljQ54le$WTEc4s#pqj?xiF-z~i@`$@C%J3ZG(ZJ)1S>SX3ySC=^PG>&I!E2JnH^ zT1c8;Ao^L8kvWKs%|pBFeBQgH^mzn7x$GF02^z3W)?|KvV;ub+J8@MnppM76FrFiY zwS>X;k$bNx9>1%FOsn@5Zp;4;kKX=xRyW&+D0zV<(Chg4EIz-j>cm(0N&ZviX&T+` zsNYV+#xm#nkKmc{49H~q;NEJiyIr(JfwJo@>iP1 zLG;F{mqMewXH>|AxFQBZahq-Oq5Bk+W~yK|rS|yI3r2@e|+0z;t~O zhBu27Gy+y*XSmFtwH50 zSf6wBj2^#jZu+R*VUwd8nmnp2-Z90M?Pnj1V^!x-YUr4EPcn;wsfu1yGAl8i(n)a# zSz!iQ;c-?QsotYxgoffDX{>HVEx$p`g1q(3Q!|hXrSFo&yIEmn-j$)qKb{7Rd4%Tz z?K57FN!={4fWn?H1np0;ww41)Y+Dp{=R%#((356#_@(D+mq|l!q?{93dp@WB26Hzo z-=@*_v$ILVgM{!dd8z*Tpv-zrCghTzB9!lo*eT~s=!i10+;ul%pw324?Qw;s_wV>J zN*mv3;f0*3%|&W)SjHWz)F^E_ogbpwR$Xye9uw^LmqTC> ztY)+nTkR>idrJ<%70REoHLvsz^)Um|u$Nc(w0*%zH*#Wo^6uV2cX_?;q{hReF#<*h z-(+MkH0wcno}Dzsgh9!z`-M_Y4BW2uMj>T2WI0#%Oh)#OIr#!#x-KiAmhXSsHt;3) zeyz12%?27)&6v3(74Vg}Pm!Y8oTF26RMlknS<&Fr1Pm0bU9(9lIzIOW%a3nHj6pV> znPbNBQo|kxD^G#~k{N<0?{(_*icjB(Gb>Ka@y?Te&?eCaUn)gZq>% z^Scehj9eQ-p0u=4hxg8Ejeq&AxuJ12iHlLlG~)PGuzYcu7MmI_#_@~3n20Cv#Z#(U zblPgGUUbJRYq24TD+Sik{1nJ|XIvg=@u1w3pq3Ig@t{2+898*QU0OX$tqCqzieRkE zRUzQh8&A<1vgT)wL_u41keT%F6yj|#45Y}W0-6#&Z0=}9dUch~;f&(=M+Zawlxbe{ zit?C@b`gapu$3rls;v#-gA4atD`=iBZWr1TYnmR#iP}_`+RhO2G{N$iVdOVcij&6L zvv(t%=TgEM4mHG-y((=--M*7o(csf>>s^BtC2tQ1TiiO0BlB&Xly<&s;-z1o3C1#RQ_EiVVE@bA*K&r9nZYSB9NB z`$kiZi2svTN3%t8^e=wda7!SR@$_bK;oX5UEze-A24Tn4m75VS{ayi1;9%N2n7}uo zO1`Qp=9E40d(`1bm|$^hZ%aNhFVg)A*y_m3KDyP#@Ji*w9y;yx}rjG66R!yrzL&9?PAu((E&0sIKCk zOTTT)_K>3S5Gjkoe$J2bs6AaS&PWF2gtEmUC1Wl+4q@$mRXtmH_x@(d5O;)J7Mn~> zG3c>crtcwsJVQ^$lQF}E(Folbkz`sc38n6)44#g4=5ynA$i)xQ`F^ue^;2FSs^Xjo zvv-H?yi}=1A|*S0-p83Gcn>t-TFAg@)!%<1W3MuyE?GtS9gR%L_?!&&oZIknq&O-O}|E_uLwt@knW;aOw2~&;Kyu7 zhp(HavoWPvsV&LZEx9iEyVN942)6`K4whxYIzICz_wneD$iM-t?ZS z7}ph~_4vt~?|RbYvvfY+u2^|&!ar{SWs#R^`K4G32s62Y2QuIZHh0^U>CL_u{TzTg zB9{}sMkPVy1y~vM&_t_p`o5CwI!wYBpvSORVyB*by1aR#jP#xlmjBi)4)P-Ai z@g7T9eD;U`O;p{*7LOa_>`dNHdF)Y3(uzYHGv~+|POqVpZD+S;-vyf%70F5wHX_LN zcs|Z={@#}|B!(VlA{DBHx!aU;TRrac1r+<_75$MT#n4lp#met{7ub9w+5jvkhTJOGM zIwZLNraz@Ve;#oUu+QlkvZCaYH1Wkj>5ADN^K%&4BJD7c$5|)#jX1x~N;wZErJwX( zhSd~$o1$#X{qovjsDv$WOn6|cZ9c@ycJA6JcOHZ?NvEc>WqkOsdB{*mZe&eMsb7c} zRkjY!SYAW*bq2&hgd9A!2FzBp_))a6TwCewb<(9Oyc2OAj2*t$u^3_^?gGaIRz!!J ztP(d*`BS)tzrID(Vr^EA0*0kC1iGvp`xX(z(F87!zQTlY_!zEJHCYXUY->)fOYa7d z$4@_Di0D-##(j>K6a*5=_PZbnH9*W3*WC*)iab&Gr6k4>9=owCV9UM&%hZh-bXjosiI5yKH^%61+Ce43xognMou1qNGBpJq zReJNxL`52919@JIF-I2pOgdH3h2et=ynM9M^Ou!q0RqJjrEeR*6uUp2l8h1jm2ogE z&l)d2#ltB7!y-k`xDDG^oATq4$oUut9~CRjm8i6HnTyYg5%Obip1+uU%djWK5!8iM z(XK+Xy3T*~vO+TAj?yEtYz+?mru4Dj+=J!dERmQq^e6UnBP{0 zo57Y)>UGD*XCFF66io!?SX=cmozZ^#Jx=9ba3Y@p(!q-iPx4!P+wZv8x;vi# zDkO;gr)Sozw5sF2JhpO!zwS*v|9QkJG0{P?5^7MEx1uzGs3u?jg`gt7C&fsH!Z!Va z2sSv$eV1MiNV!VhGrI17ykXdOPOBktN{2J$RTlsXurP|t%uqM9Zhdg1w={(dvKe_8 zfLkmp_~_&Ek(SQ5YMm~=l4j!AF0|02?zPMiy0CBW=Cn){w{(O1Gvjn&5qp{=)($W0 zbab8NHb0T8w_`H(uF#*~Z)qDr(Bq!aKz6Fm z%HTf=7hH?rr?9(c_zLKT+T+`8l9Bsz%3MygFDLZxt-pKo2w<#;dQpd*`#HI}(LwZ*rHf?Csn+Fi1L#r(#bV*+S zolO|vb9PW3X8dpUT|8UGm<(Nh7}4o)wBaErUnn2b$fLp562ApFX`=GS*(^lMIvar&$)M4dh8}zEB1P^5aJE}=>hL5X_z_j95DxV=y9%oN85PAEpte+w+40;rXLMP=j%*>5u^w* zmb1{#NjTGc;ujiCgjdy z*+r@snAT$e>~&|_47mU~jO|)tcta#>>9v$G3p5)Al<^!-M3ly?P}5q*m$5*Kh(lSH>h*nz7` z-0Mc)<=yhyZS{eaz$F(NWwFmsmW&!pK|?y4&aWm)Gm}LVr2TR z?h;_*6VnI{QhiO#g$k0S^4g>|px%{;J#EaFrR>)a{?*cvG7#o{Y|ylyXEan@iH%c)+~!M|0)(k{bhZOS+2X#_@}TJ=}iK;decrem_bxlbH^@4N4K>Jre#R}2H1 z^^Kp|MlQA%^43>Nx6hu#LtHsoyIW_3ucdwOw{JL!bc=|Ofe(itJb=n4`INKFM!PZz z3Bmva+Cb6ij}gtEP2Sp%T;p&wDmb=Ev}kzwVi{6K2ozm=)vZK_Lmzmf?Z=;&Mvl7<4Ox@LEDt5Ya7`9B%JS#yD)e8@jRmc;?mML;x76%$wfrfW>uQ^ zG)}sVHE7r?*GJn<>k2ln@Q;c0Xz~(rm;##Ugm2cL@|iybiqfXw^Dk~vVaHp!pRY0G z3x`b)dsBQ%Xo4Hc(=>ThZ~F0NqUp089dV@-AMt1R`PET`87(OLNM=&Z$H40Gj0YJ= z!JrIqw;?7VHutseznfTJq1)oimwnAX+lhD0aQ?&ubtKGx*2_u&(^h3j`Zcf2 zZrQKjGtCB-KOjwOf*yqk_bfKc==98=J&=FR4=~lf{={#Uke5fa$Bqqw82RBLKflg z*F1wnzeqrSb9tqnC0sG`P*=Kdp3GG{cZIVW%ypu&lFxM>vn_RC($)%vulcTY7Em5Q{!{H6ln-Kz=A2uMOm31E#`( zKX&2AiP}jpjFA11jc_`R#pXJy<^w4_cXLb>M`=XSlO?R>;&K$;>AZ_$EG_)*11MHa zf6MBZv#X@VZKXkX2I1!EIh|?H!CEDSjgkXZ@yuH=C8skHQ!PjrajoyEF=r-e&Z zTDvV&0(~_lv*w~O%)ewK0JFkjb7Dj z1D+f4el?%{0x-9Chqh*njh_0?%6RyIdNB(;sha9C7@tOU&dN?a>zWta+E?2a4%#b~ zpFRtoSICn+3+}&pA+5Cu)H4J;%4Q0zmV3{2!GYO{C+VlzWnYlFBEZf6Q%Lup05kuJ zV|3IltuWZ-!4{TY0DTSsCojJt2D^r>kL5o@4E9d|eNF%ufb&(T4uQD63jb*aul~;p zE66MNPhj*9Ck4Yl$4a@5(WJ4DzEz} zS%R(IYydp`|94Om!ts8^X|;Df=ewo4pW0^EKaOhfd2vso6i(z%)e15ts#gc0IF98n z!BBa`HmQoVG9s&O#3ImgrSYZIYVGjF$8x0!aMi9Ki71V*J8m*}pR%ZJxm1dsi69!7 z_&e$Lv?->=DGmkNR_Lt<*gga3u&BQl@tV{LWYUfLQs1JI7O7wvat|MJ*ME4HDA&Z% z>fwvv``OJe2pwM zyO&n;)*cdIw8DwXydM9ZnUZbPK zNR%9LA8B$@Da{g!@?vftEZDGLZqv?21SL}Jk&3$1Yxz5oVggDp&`+w@8^4xjDJ349 zjkp#aU(Xz&s4_Ef%OYNG?@A^P_D@T(oKNX0X)uFPR@Lj3Ma}2y1S&e*GVz6V|Aepd z*1S@RU=5T$1y$8aI{1FL&zye&Ioz}&hMLJH&ynD@JoK81xp5{0jRT{kxSdncP6r3Uq_l_x*Mv>K`LV>UUGs$|<*D*QpjDT+H~ pR=Q>xq!&CBKWyz=tAei*d0(jXa({|7>s(vJWD literal 0 HcmV?d00001 diff --git a/ws2019/ipi/uebungen/ipi6.tex b/ws2019/ipi/uebungen/ipi6.tex new file mode 100644 index 0000000..25693c6 --- /dev/null +++ b/ws2019/ipi/uebungen/ipi6.tex @@ -0,0 +1,75 @@ +\documentclass[uebung]{../../../lecture} + +\usepackage{listings} + +\title{Übungsblatt 6} +\author{Samuel Weidemaier, Christian Merten} + +\usepackage{xcolor} + +\lstdefinestyle{mystyle}{ + commentstyle=\color{gray}, + keywordstyle=\color{blue}, + numberstyle=\tiny\color{gray}, + stringstyle=\color{black}, + basicstyle=\ttfamily\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2 +} + +\lstset{style=mystyle} + +\begin{document} + +\punkte + +\begin{aufgabe} + siehe Blatt. +\end{aufgabe} + +\begin{aufgabe} Primfaktorzerlegung + \begin{lstlisting}[language=C++, title=Primfaktorzerlegung, captionpos=b] +#include "cpp_headers/fcpp.hh" + +int main() { + int n = enter_int("Please enter a natural number: "); + // search smallest factor, start with smallest possible: 2 + int k=2; + // go until sqrt(n) + while (k <= sqrt(n)) { + // k is factor of n + if (n % k == 0) { + // print out the factor k + print(k); + // reset n to the quotient + n = n / k; + // restart at k=2 + k = 2; + } else { + // if k is not a factor, check next one + k++; + } + } + // n is the last prime factor of the original input number + print(n); +} + \end{lstlisting} + + Die algorithmische Komplexität des Programms für $n$ Primzahl ist $\sqrt{n}$, da die Schleife + für Primzahlen bis $\sqrt{n} $ durchlaufen wird. +\end{aufgabe} + +\begin{aufgabe} + siehe \textit{taschenrechner.cpp} + +\end{aufgabe} + +\end{document} diff --git a/ws2019/ipi/uebungen/primfaktorzerlegung.cpp b/ws2019/ipi/uebungen/primfaktorzerlegung.cpp new file mode 100644 index 0000000..f1d95e8 --- /dev/null +++ b/ws2019/ipi/uebungen/primfaktorzerlegung.cpp @@ -0,0 +1,26 @@ +#include "cpp_headers/fcpp.hh" + +int main() { + int n = enter_int("Please enter a natural number: "); + // search smallest factor, start with smallest possible: 2 + int k=2; + // go until sqrt(n) + while (k <= sqrt(n)) { + printf("searching for dividers for %d, checking %d\n", n, k); + // k is factor of n + if (n % k == 0) { + // print out the factor k + print(k); + // reset n to the quotient + n = n / k; + printf("found %d, setting n=%d\n", k, n); + // restart at k=2 + k = 2; + } else { + // if k is not a factor, check next one + k++; + } + } + // n is the last prime factor of the original input number + print(n); +} diff --git a/ws2019/ipi/uebungen/taschenrechner.cpp b/ws2019/ipi/uebungen/taschenrechner.cpp new file mode 100644 index 0000000..250275f --- /dev/null +++ b/ws2019/ipi/uebungen/taschenrechner.cpp @@ -0,0 +1,99 @@ +#include "cpp_headers/fcpp.hh" +#include // fuer strlen, Laenge eines C-Strings +#define MAX(a,b) a > b ? a : b // gibt stets die groeßere zahl zurueck + +// Taschenrechner Stack mit aktuellem Index und Zahlenspeicher +struct RechnerStack { + int current = 0; // zeigt auf das erste leere Element, anfangs 0 + int numbers[64]; // der Zahlenstack +}; + +// initialisiere den Stack +RechnerStack stack; + +// gibt das letzte Element zurück +int pop() { + // letztes Element ist eins vor dem ersten leeren + int last = stack.numbers[stack.current-1]; + // setze den alten Eintrag auf 0 + stack.numbers[stack.current-1] = 0; + // reduziere den Index um 1, aber falle nicht unter 0 + stack.current = MAX(stack.current-1, 0); + // gebe letztes Element zurueck + return last; +} + +// fuege ein Element dem Stack hinzu +void push(int element) { + stack.numbers[stack.current] = element; // setze letztes leeres auf neuen wert + stack.current += 1; // erhöhe den aktuellen Index +} + +int main(int argc, char* argv[]) { + // Setzen Sie hier auf einen leeren Stack + + // fange kein Kommandozeilenargument ab + if(argc < 2) { + print("Eingabe für den Taschenrechner erwartet!"); + return 1; + } + + // arg enthaelt die als Eingabe von der Kommandozeile uebergebene Zeichenfolge + char* arg = argv[1]; + + // Schleife, die die Zeichen der Eingabe nacheinander ablaeuft + // strlen gibt die Anzahl der Zeichen in der Zeichenkette + bool inNumber = false; // merkt, ob aktuell eine zahl eingelesen wird + int digitCount = 0; // zaehlt die anzahl der ziffern + for (int i = 0; i <= strlen(arg); i = i+1) { + char zeichen = arg[i]; // aktuelles Zeichen + // 48: 0, 49: 1, ..., 57: 9 in ASCII + if (zeichen >= 48 && zeichen <= 57) { + inNumber = true; // setze auf true, da gerade Zahl eingelesen wird + digitCount += 1; + push(zeichen - 48); // fuege die neue Ziffer dem stack hinzu + } else if (inNumber) { + // erstes Zeichen nach Ziffern, das keine Ziffer ist + inNumber = false; + int newNumber = 0; // summiere nun alle ziffern auf + for (int i = 0; i < digitCount; i++) { + // nehme ziffer vom stack und multipliziere sie mit der + // richtigen Zehnerpotenz fuer diese Dezimalstelle + newNumber += pop()*pow(10, i); + } + // fuege neue Zahl dem Stack hinzu + push(newNumber); + // setze Zifferzahl zurueck + digitCount = 0; + } if (zeichen == '+' || zeichen == '-' || zeichen == '*' || zeichen == '/') { + // falls zeichen ein Rechenoperator + if (stack.current < 2) { + // nicht genug argumente im stack fuer den operator + print("Invalid: Not enough arguments for operator!"); + return 1; + } + // nehme die zwei letzten Argumente + int b = pop(); // letztes Element + int a = pop(); // vorletztes Element + // und fuehre Operation auf a und b aus, je nach zeichen + // und fuege sie dem stack hinzu + if (zeichen == '+') { + push(a+b); + } else if (zeichen == '-') { + push(a-b); + } else if (zeichen == '*') { + push(a*b); + } else if (zeichen == '/') { + push(a/b); + } + } + } + if (stack.current > 1) { + // falls mehr als eine Zahl im Stack uebrig, + // haben Operatoren gefehlt, werfe also Fehler + print("Invalid: Not enough operators for argument"); + return 1; + } + // drucke das Ergebnis aus (letztes Element auf dem Stack) + print(pop()); +}