From c347dfc5b59433a940a0cac46fcba5359d9ad111 Mon Sep 17 00:00:00 2001 From: Danila Kamyshov Date: Wed, 6 Dec 2023 13:40:37 +0400 Subject: [PATCH] kamyshov_danila_lab_1 is done --- kamyshov_danila_lab_1/app.py | 61 ++++++++++++++++++ kamyshov_danila_lab_1/readme.md | 29 +++++++++ .../static/models_comparison.png | Bin 0 -> 36297 bytes kamyshov_danila_lab_1/templates/index.html | 24 +++++++ 4 files changed, 114 insertions(+) create mode 100644 kamyshov_danila_lab_1/app.py create mode 100644 kamyshov_danila_lab_1/readme.md create mode 100644 kamyshov_danila_lab_1/static/models_comparison.png create mode 100644 kamyshov_danila_lab_1/templates/index.html diff --git a/kamyshov_danila_lab_1/app.py b/kamyshov_danila_lab_1/app.py new file mode 100644 index 0000000..3c8618a --- /dev/null +++ b/kamyshov_danila_lab_1/app.py @@ -0,0 +1,61 @@ +from flask import Flask, request, render_template +from sklearn.datasets import make_moons +from sklearn.linear_model import LinearRegression +from sklearn.preprocessing import PolynomialFeatures +from sklearn.neural_network import MLPRegressor +from sklearn.model_selection import train_test_split +import matplotlib.pyplot as plt + +app = Flask(__name__) + +@app.route('/') +def home(): + return render_template('index.html') + +@app.route('/compare_models', methods=['POST']) +def compare_models(): + # Генерация данных + rs = 0 + X, y = make_moons(noise=0.3, random_state=rs) + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=rs) + + # Линейная регрессия + lr = LinearRegression() + lr.fit(X_train, y_train) + lr_score = lr.score(X_test, y_test) + + # Полиномиальная регрессия (степень 3) + poly = PolynomialFeatures(degree=3) + X_poly = poly.fit_transform(X_train) + poly_reg = LinearRegression() + poly_reg.fit(X_poly, y_train) + poly_score = poly_reg.score(poly.transform(X_test), y_test) + + # Многослойный персептрон (100 нейронов в скрытом слое, alpha=0.01) + mlp = MLPRegressor(hidden_layer_sizes=(100,), alpha=0.01, random_state=rs) + mlp.fit(X_train, y_train) + mlp_score = mlp.score(X_test, y_test) + + # Создание графиков + plt.figure(figsize=(15, 4)) + + plt.subplot(131) + plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.RdBu) + plt.title('Линейная регрессия\n(Score: {:.2f})'.format(lr_score)) + + plt.subplot(132) + plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.RdBu) + plt.title('Полиномиальная регрессия\n(Score: {:.2f})'.format(poly_score)) + + plt.subplot(133) + plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.RdBu) + plt.title('Многослойный персептрон\n(Score: {:.2f})'.format(mlp_score)) + + plt.tight_layout() + + plt.savefig('static/models_comparison.png') + + return render_template('index.html', result=True) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/kamyshov_danila_lab_1/readme.md b/kamyshov_danila_lab_1/readme.md new file mode 100644 index 0000000..747817c --- /dev/null +++ b/kamyshov_danila_lab_1/readme.md @@ -0,0 +1,29 @@ +Общее задание: +Используя код из пункта «Регуляризация и сеть прямого распространения» из [1] (стр. 228), сгенерируйте определенный тип данных и +сравните на нем 3 модели (по варианту). Постройте графики, отобразите качество моделей, объясните полученные результаты. + +13 вариант:Данные: make_moons (noise=0.3, random_state=rs) +Модели: +· Линейную регрессию +· Полиномиальную регрессию (со степенью 3) +43 +· Многослойный персептрон со 100-а нейронами в скрытом слое (alpha += 0.01) + +Чтобы Запустить приложение нужно запустить файл app.py + +Технологии: + +Язык программирования: Python +Фреймворк: Flask (для веб-приложения) +Библиотеки: NumPy, scikit-learn, Matplotlib +Описание программы: +Программа представляет собой веб-приложение, реализованное с использованием Flask. Она генерирует данные, используя make_moons из scikit-learn, и сравнивает три модели машинного обучения: линейную регрессию, полиномиальную регрессию степени 3 и многослойный персептрон с 100 нейронами в скрытом слое и параметром регуляризации alpha=0.01. + +Входные данные: + +Данные, сгенерированные с использованием make_moons (noise=0.3, random_state=0). +Выходные данные: + +Веб-страница с кнопкой "Сравнить модели". +После нажатия кнопки выводятся графики, представляющие результаты трех моделей (линейной регрессии, полиномиальной регрессии и многослойного персептрона) с соответствующими оценками (score). Графики сохраняются и отображаются на веб-странице. \ No newline at end of file diff --git a/kamyshov_danila_lab_1/static/models_comparison.png b/kamyshov_danila_lab_1/static/models_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..fa3817e3ed9c862864cda776ed5293f7bbaace04 GIT binary patch literal 36297 zcmd43XH=Bgwl!QdW&!OsA_^*qiV6w}A_6LsL`8{`8zo3aLLnI=Er=)x2ndMeEIAZG zMHD1SmW+WMC1>8b?e^Sz&bW8H-}~?DF>FhydY)(Rz4lsj&NX*ExO7pHam}_h6bgk= zTI#GEg|fVbLZN%SY6X6h*75RB{3U25e#J`OOwY9TWoUPJ4>2ov66wp^CgfrE{;!`(TP)j@*Zwik=LE>@I1Kf-)p zdll~f^FJN;#)jp;{;{56tNF@*{_&dr|A(*VTlR)Hyv(zoI^i55Xc@`0*$4}35dN+rB z^f@q>leysqYH zZ{^a=&BDixnr>$d5D;nYxTQ;v1qnvMHjr0AB;=5SC>{bf)S>0wwO?|(JB zKyNRFVqTYFqE;Rxq->Tq;rsUOBFmcD@fumhFbT%dliowLVUc4dO$tl%W1b)Vc#>`} zUppJ``(VS~zT^+AH6`AA6|*gLi{8DPj^9jCKEkv7Ooh(@We(}h?t5A@IK8FABt5Ar z{Mv7q`Jd-JW>EbudjJFXD$%L-({l3vdc>l;BB3qMo_0{kelkAz=GWDmcr?|YJbA*U zocLVRaYC_syLok8b_3Q(ui|;kvu9iD5;fFxOMUBJ-=f#$^;c)*o8f)K$ikmB(EYu{ zd;jb!vvv{T*`Bc2OQE+dIzL9t&y2-cc2{tZz1!QIX5g)wX_|lmIl}y_&C8}rZVBEn=;o%&4(_h_ldLsijGBfv9H}o%g(7kTw z*t4hi-WJVEjVZdDn3-ebBF^>t>jzgw$oR>nU8tz+cTRLHIB#mX(5O1tlrHn+2G+;7 zMCaU*>#wv6SLjD-8qJJ$8h(Biit#+%E6dty-JmhspH!gU#38B|dgk8qkX>Ho{(K)) z#?t2wD#j|f4TNA4-14QXjgs;r?I!y6J1@>-FZvnQMt_+cyZh8`v*w&XM|$P52APVo ze#exywnijwV$STAs z9TJz6JYd$Ai|2oWiwwxANoYxa@MKdia9U7!d3LqR!Oi+wtqUylt1h(WSl7hJN2TeM z{L!6K>c`Vx%2S|#?IxdAFe%hJfe;?>60UY07Q450ixTb?s}SRLHNfZl2dgQ|LFTVZ zi*rdQY=+_;W=8j)IH79YS6hY9l&ih*F zeLq;R*gZS-`9dIn4F063CVUJM$_x-NOKf+VE04Hfp*h$}Q@*!mlZD>2NoK3>*Hj6; zlne~m;9`x<;PmTs&yeRUv40e?`qs1K2AS$8N8b~JrXxggEA9$gvs)~fD zQj+FiHRnur8+JpERqyV&x>#%|qmhm`IX8b?b=y{5dS<`9zq6xOz)=IQA*%-^*r&*8 z;f<;KacAzWL7J2E*mf)p8*$@8ahcIx_HX>F9G-u9^w@G{R99N=?Af!CnZovy#u;Y! zy`DXbe(%B3kMv3wn@sfr0&m-qt9Ku57kr6)6PYt8x-=g))$S~+Hm6nKl;^ZCp=>?a zq$tpKGi-9GH7>K=New%uYI3l7(~cd7q}|-zGFVMH6hN6F>mj!mGR0jX^xzo=R;U5vcsw-25TxWF;P+I@TW>@gVloLoU& zCp`X`BrXxh*`6OC*cyU`?T_ky+-TC2CLO1oq;&IUR(M?K=S(v#Y$a)SiHDbhPuiv# z)NmeB&-yg;#;U|?4+&Alf$lL&*^-zn-Sa+o|_HK*m7;YSU>eg>wxqJzgE!mbn2m?u0+p{xc-3>X`{YPy_ zb#|P*c?rqFIzug0&jV5T63MW~M_KbpxgIG$d=rh@pI)5)=)Kod!jm;2NXVvdFtfcr z-*N8wN==U5Z=Rxv;=I~e#RGXr0_V=3uWdFfNI;ZcuZg_Cy+lQ^2@rA2DHTCJ)^KW1 zH}WGDPk4T$u&*x8Pp|A*Xho2a(U-UP3>#A-!pj_;`Wuo$$eQw-H1%L|6);wUI>`RB zjVOM0ck0bCb!|U$V~Fh873OObxB%UURDF2kC5ki@Zf>n{ErVl z$fF2&nH?vrKA{NrmTA*k6R~HEP%_9(R;*)aKt7cLnM_C7$?TM zzaAAoXpACF)f8HFb;bItnhrn2#k_tD7cAu*G((2Fj0)|i>-7*1Bl4oH0F>JNfgacbTfH74gCB3GOHgabn&}GE$f%TBqI+F~43sS*Bw*HNEXB*} zFml?Dx-{3mghv|fEY!U#5cHYTVEggMSlR&>ry4)T#7C#Yp^ zoI9wJ5-xL5HjuykuZIth2JoBoRSOhK`J+l}@uM&sA2q5k%W4C5Gn3*)?02izXWh8w zSINO#?yi|<$Beb!?^_upBv3RqIFwqLb>ka@cgc6T(!YLZ#}J;dOFl3465VkA+2LK~ zc3%C7z}+`c(Yi-}eEY!S_0X(fq5d#Kp_G)=;nD9U*T#q2+jZvvw6^gFmh0LYVs((% z8KvK&oIEf6`t|F>m*Vc*>S7fwxl4PxGm$HB4eYs-MfqNqj#%;gjmG>Ztow964^lHt zyo^eV`+HDm$WK}AdUpAJ_=p)_R$yeQ{qgC331j2Y4ObO&S#zLtXVV;DkVeG1G zok~Db+!plYt2!0W8)n*?BQeyH?J+$)ZN0I^tWFVq7Ga~G2cqF8K!azIZVI$orT5d zs9|k!_Q9E%^NWjAL}=LA2Y*yl?rCtUFFs$N!{V9cOZ#!F%;AI8-mnS5?Mz{SK@x~e z_2A}r@6LvSPf3*e9ty%V3t0DjdeeD?&2juP_K$Aq=EB3gzW0KQ9c(JCd2K3t(>a*E z9)bcK_Zw`^to+N(jTdwEUEQ~_;iANQll9Zjnsm!h|qA~d`Ks=xm7cmL%LvTk%j~ihn!SmOkIj%*|Md3 z^jVZ_$i*s7Y|DzJ0*g+!i$NzMfO7WB2A|~CKfQ;8L+a!Fm{r1~9YTG85$21U0G7y) z&9+KkduyW79cC=7d#j5&vxThto+9%_Xway=KtBF$!!J(XdA=0l!2B6ukdE3bt-Qo& z%pa(lVca|FP#1k!44J+jn}tI|*islzU+B6{8Q8K^#H%ueFdUHMu)V=I&)ANBztQ|Y z=y!IBXrS^wjLyw^_3G6h0|m?in(19c&pA1>@#_3lIvN#hcg{;rohjI%PDRhOcCt=c z%V1%4!miUtS0x|kJjTo zm!+!#H54*UHCnA|E*R7YqMCyp8=^h~>z{R-Xy_XC=hNS~WlI!E+QNK-e3iJF2R=+Y>G1IhFy)Wa+!B`Di245jx*p=j~+{)Y>vbw2&Q{4qN5~2m=fdaCG zkxF=+OAh(2z69v;-Te4bi|@r7Lwe;(7t=H)yDLNd3cnQB>+@4WLuLH92_@;O3>nU~ zC~dXkZ2)>W|6~)D)*4a1PIUgoZgID0l*kI*FJHcpvIArzxPY9-ocP0)&FK=dmb&Rs z0QeE(*2AZWc7RN?N5iq;(4`kHto8%R8$E9<*!Niq6XK7ww~}o-ff=PaJ_Nj`F*HSeFy^N%(-;-mBiQ|_ z8DI_RQz80NsKV6#62U1gRm)!8@bU?#na(YaOAAxjHU7;88~W-K;;`-dTW#7EQ6&gE zKz`Jn{z3Oz8B4M^wQ+z~GJ|8&ez~*QHdTO*>b@bu_DWv7Co9uhO&jfHJ+rPy9Eo+|6MC#BBGYXiK{7n4X{QP%C4uUe`>{B;RS^|5{YE3(pR}iIBxI zR(`tBHaXm$gp$)o8_t(G5;B_}vV#n0zkK9%5V38*EXWVdGYvHs3;M3u=W&pSxS6>L zsj;Lv>WQ{X%Vk@1%AIU)aH8&$3zxbtS}@p_r-lW!6nt!%*GjV~HRkX4RWmIy_b|wN zG}>L6gc@x$JKjquV60LC7v^U&e>LTd+MCt2elb%gqat?(361IiHC#g8pzA@uC| zN%3f_W6G$pAy+$&+U8{SkBJ__d|L`F|B&uUWFm6kOuK+6~V%Rdeq?KH_iZ; z#yD}CAK!k$yu$_H{(A~HH}^#%0)n@F9d%GY5T_?7V-h1)+u2%V__tgl(v?UYxrI4c8?Sxd^IMSb0b#G~#0SBH{>hI4B=ZCndOeGjP__IwI8 zWh-p;w{YLWQ(qk+lde}DaJ2vV3G3L>$sa#{VJ`cbXPPhc2amdHqo=@s`O6qY84?8c-g`fg-W|U9d;SX*ygT`_cAU?C-a+Ya~ zXn?4RguiVR81W7#xR?-RFf+?ECQ9*s=Dag|X9m6?5$QxP0299;`Y2L|K?d@CaH-!b zR4<_-eGDy?REq6N0+?2_1}XR-I|fSfjlMDdQQ(ydp`u^CQWT$t+z6$O{LkfXc@ zxpij|a}D5k<(oCa!}taBV*C^4r2N@fpuu3LS%aVx)*np*AL^K-Kn)WdZloed=1tVA z*>&7nsStVI->P4B7+I7BvzP%<7ry4#4T6O{opB~Mo2H0LEJ4`x0IHs|@|(XR41z*A8%Yni1T zPx9;AotFl4lch)fdyqLnfxFxPdUYMkiy&meJu<#l1_h3D)J+Gk92S$;26Ztkdv?SQQi}Y^iivH<48P~b zM2By@v$~{txFwsfCpYGr{YhT&6v3u*NTpFXhiM}0GQJ06 zP%p)pTnjr7PC-pN-k`65$(AqgHe!pzy;Nz`1gN`SUD7wI>*jM8IZ});+m|54#SAqV z^9vNE>?;z6@M|$`fg~a@@#{Dh)Rry!C6U3A=%o}fq&GwGN^N3fQqboE&-JT zrS2(gPEbjefV`2QY1_HUvn-|+$pb%nKiFtXkQeli(v(V(x$~g@uF!=11|4OT>6e-e zbT|mo-rx1bI~>{uX#ZsbDr>VX_0z9c?JiR9G5}vRQ}6my3ml!OB%qU0IoqBS4G*<0 zj$QIm_-B!sKN89Ucy-;zmKX~^J>4(Ak(D(OFjOXI*6h#B=83m!dBQ*Q@84fCL)Qa^ zLt6&u=vVC9z55Ijlrq3R zuXUp!W%}IciylxU4c`KkYp+D6c}^MVgg|O6+@xWNmrdfW}&6Y`1({bxvpcYZ_sicoEH`m(FA>Zf?D2pGK@Pc zq{|zZ>J7?zO0w30`Pg^h+_Lh$PV7o6Xz0VZmnd!&}VW0xJ&SF14z7FO3eg$a}K z;;ZEIx+nN##@~A3)ml8+AW>&c=f#<*{P|HC$m|WB@wo)Eqc7(lykhS$ zyt4tc{a|2uq?&2AI2svMfC}=@HJ*V6VUTe|h7Z2%;|o|GbNbE-yYEjV!E^T@JTGIC zY_hl8_tnOLEZs8An^2kA7W5}V<>4=g9$XgdK?M;N>kA~@eh`!o8>qMe4F&e;t z%5Ax}=^)p8klE|wRd|s~(V4RD4zh^_vhAyh@+2xW($;l|fZSST>sU`l|Ml0ZOo4B- zdICI>3KmrlD8)Z6*DF$PW?1QPKR z&(S~GY*sm*A08)=VbqqJO{8h4&xUwzvW9?BJA3;Yt;ro(Z+6frCTVKm=@fyX(^2OS zU3qm1BD#&xw3lz7X^u3BL+owEEOTu~z`GOFfoG*YE0`DN>(dP6g-2e~L;B4mRhe{X zm|V$jmjeJgcKy>%G`=n(|HfgosRt3S?yvhj7wnA#EEt0Mf1&tx-v+-&oT%(3mO- zt@~1ceF9+nHpkJDy?t$YGz92wY37eVIRYVWM1~>bLqDJ*W+qYiRd6H86ZAu?Ry!{( zWTHDj>;PmX{F~}^cze--_;KYBs`D)R_ay5Y0rjEt?1?07U2{Re0QhMCiYu1rUUqF+ zDkH-`xY=E=GB^PxI@W1nRuz@WO;9uhT5ixuTRG6C%2EFXh^bE-jq6c{tmmh10B^|1 zN1neS_^l5FtqQQ?s9xFD^5=r`KpJx33JM9T$2_(R^483yT{)w7oNDsbdm!&&C?pyPJG2h1g)+aed!GE7`>-Mi*--M%%60W<9;3X6ou6W(IGA8T zh=xIWBqS?{yKSt3ZmMpYH3`j7aCnnfRcbOxCXlJ#UbD`)UUi0`JH4~G^)><1cx5fe zy3Rj(`Y~|_%K1E!$lONRDgnQikE7p0T0d1#DnpT5`yp1GSJ0h0ZN(~g5?w}{{NNF@C-U76Qx{dkZ{P5w{Q1#v` zTTgl%$Wg7-W)oAgcuU{Krid6-&~$QKA_BvE68p`0|In3VtV?fV)Uic zK+u;^ulOdepiNYd1&D$?2U{L?zlm0SZ zZO%)M)_??Pd%k=b7FN?@7IDre4W<_lupVGf@4_#aP*EmI_J(BTJupI$g6?LXpEx8; z*nTiwFpL9)U$i?;1rf|)F*!a_J@=@0H9>Zm-*JGp>&OM@em{5Hxc?pB>0e!V{F zLica4U$1+}CaQ`2{Iu}Pi1q$mNdPZI%SkGwP^JY_nw_oC*+xeEVa-gTh)PoD*5%u< ze?HQ|G=0UvA(vQVAbFqH8*_H{>aGZ?!R8~QfDdOM3>dNKmk_!I`Z@RNY9+dY@uX1( zdjS_Grv%7Q9cmz7nhD|rCK|bUI9IA7S^?u)Gh`N3^6b)62eG4%qQdSFwyO^Y>{yi6DZ*okk5hOteYuPkQ#&%NDCK}9}Tyzq7qxxDr+{U=}<2(FCvF^ zryNjD#1JK#U_^j?5*0AFR`?^ARo^HxP2L3sKPJiI=#tQIuEjRw3;L>(LxbM*2kFwCf$c}{-Me>N(OXc7rK7BGDISW~w;7$(LWJI*5=1D3!3l!S zys+FtMFk$8FY+m!!*yVWS+wSBp(gruqHW~MfmXF>5fPCv=iH@WB%$0IInjTrO<;`jTIg{}>`2_c!yOIRQ|k}eSngX&7J{yYuhD^92gp5f`xH7T!FQ)LGS zhx<*Ofq+5`g_p>9;?XgWfPNf>r_k>^g4yyMm^@G2OG70ALyf{7qtyllKy=y<0TP`@ zs!Cgmt_)!j5CckT7k_@DLX%49CfPrzUmOTufTyTNCn#jZnKtpB#cbcfgA)&qO}Bac z`QAmSLkxmt97haM5leBM{n8|uYO%fdXyh%+1zsigB9d){;s1jaLIWWqBIAin zVaWNW`7?T`3AZ5omfvB(7e43BLd&YO?ii(XS+}s9sY6 zlrm!VBdvwxM97U^-+42ID3m`M2OkXN*OTrF+PgWz6mID)-0Gi*@MbftNo)(GzM&Wc z^m6-AiMI<|SDZ>uk;6_3ZiN_2FsNz40#z8s7L->q0Mr`d;dwjAFMIOGUF>K=TO(Dr zw9|gCb+ErJyuK;een?PE&aE_L!-fqWYc_GAtxdY#7%4v~)!#lRU)#?bh73gdtI04K z`gJyF`qm|1lVsn$`|W3Vvn(6IVm#nnBk!uv#baVyLSZw{RuI~?>kYP^tXr@0BUWL< z&&K?IoqziT^6VzgWiBB$CED{HIN8K$jeZ`_HiIyL`Vlz?Tuxfc z;m17!1o03b(PaSIuOmjm;$o>FDF4XnweZ?1q7UWw0ZGU!@nU8QoMi-jfcxG^;N3PnoChMGF3 zN+Jr&(v)EmchYt=%cKVN2&#`f8Va9~r}3!C3R9;MfGxYoB$g<9hMcfISFkV{2sgta z>Ap{)cL)UBqUCTInb(&?Bi}(qR%9le)oEJ0)uQwebF9aJ#H*|4m|x4Hq3;1uKqMo8 zmI;8}Xyi^Jei3RXT@5k+fHb&@MXaag*LSNy)noDd{q?QTccE00_DSg|U@>hzA4E}F z4v1L+xy&yFDn*o?{^5WoK&fP+F>xtp>PX z(49fAr|5mQ+I9z#Es0XjA#IjF6AASv26~Q87JmxM8#lfdIyM3Y@aw0KAHVqg`LjZ^ z&p{PAG#M3v&Y{mUmjfSQ_g;NeXYJT=Vmp(xa<}&ZG_u?#4O&<2IRs_O+TPpmyDmCf zrQ_GSVBVKQSvr)0YI;CiZh^vwkdD@ftKGFi_$F z=3RJ(5_|&P99UX=s0*MjfOfS=UQgVTmJ192tF^ zs8jBHPqvVkCRlnx`FjJ+@^5f|vlqC{EdP-rLOcP|)u2e~zGjUnMS~~xfFf$JG(mnb zMCC>us7B8`8keJ`T?no$znVaSY&lg(5P#lq+Ka7JR3i=U#P2{g2o3`H3!;PSs<4B?0-ArJxV*-)8nOxcH zdUX;LhE>@dMsC3hgEtMOIAC00TDuz=DN>j?O=>&j7_u`VczjJ+znaB9mih&_JN+i_`SPC=VA!4N-t_ zi)`Up2Vq!ziH~;O$q^TFfkX{jEHD^cp#|guP^gShOuZ6WBM?i0q=f}Bg0K7ov5sQD z?wIJUk!;R1Q%36t!#dhHIJt2w|Cm{uy4Q0yO%y*OCdLrY1m9-TJI8~cMpmrXuxa(V z>I@;i8iwlX=LeK>X6OBYqY>>gQ`vO?ns;I>hO>j9mga@r@oE`WY;a_kgg^G2>%qYX z!eZ-_w2}xvKwwxJ6u_KKwjy+kUJ-#`#ZmI%)==WiG_hgZVksLBqSQt}J-m zbLp(KR@03*yK)n~0$v4C%Fgk}ttzEMI%wMNzQZ~8(@7UY7&x55=J+Z^ZfA?~R)wxNyF$}HR_qk{2DR;U5Vcn3q z2y97`p`%P6!OuqWSl&GP@9bU7?iZ`SNueM5zrH^8ENSh?3IKc1@dNz)N}S#$6r%Bfd7X>^oT2OG0*Ekj9W7c z-XB;&S;msWLUDQRRX4!&fNl!7Q(8HMBd)IRn<0f#oC7fk@Vdp{(xH@^oIM9#BK=lu12GaDNZ z_9Sd);CWhp^gB;IZ?Qj>bZp>dR^bPo;iK6_h^Fv7xnTXBrjikNKE?ed>1rGcxqJl|osz znZOr>h55Bgv%qSTZ&K%~7d_PSE-?Z+uEV6B`g0fU_jq#jPM}PinHH6{=guGn2hn!_ zy3r{lQTQDSa(-1)(!80W@OVw^ooHDIF6o_=xegOF8&`_h<-35BwA z&#(7yJ+k@_O89QSV@k3K^JknZv?AL@X3yP_^o%fT?Ye5P{N9FGYpsb%iv!~`vL{!`++@FY z$bV{J|4%>PS%%Y%w+22Ixz8H)8U~44OU%f$Mq4l%l^Ay&-%Oz_l0e`23QO}FBmK~+ z%?n2duQ^T)EZY<8VZ&Xj)h97=b4s_>LXw?L35P!c*8g5^ms9U{o!+_D_rmO@5Jrc# zJ>z?N$MeMksxv&Pi)rsAeRSJ=Wciz5zF6#>`M}~49%~dX_m_DP-tvPOuQ=T^& z{#k3fWnBNu+^jO+vZ2D@`jcjB!5_DqCpc48isBTj`B?I&EOh;Cc8Q$cpf>&~f5N#~ zhriVPxDIci&T)oKNt)8K+;a+5w#NC~8(ts#drC)`QdnGg?wyOgcTV)n4(uDPkEW3~ z?h8GZR?FA$GVGD@!jZ|PVduV{idM~dE~7362hElIrao5bLvc%ab__$Ge0Ky0cQA+4 zt)RF>{R-n#JFmUoQ5-&fZLe-d_)^pc=kdE+VoP$e!ak&HSJ+s5-eKAxG(a_ZJ{4B6 z{p8oqkH|&`|A`{{RXRuv{!gQ>genwPN3=4E=U%!{zd+Nwma~8oFsPaLMrPA4VM&{z z`q(Lvx{o&c{Ueha`P?fhzpZFw)WRz4G%7ZoUem}ZyK2mu?$nDIi-sL;WjhjNy8mcJ zte2BLvBu{>XX{(u13klS>ra0545=+!8C*MA6sPX1j1YAc_1~vfbw(tXf$|%DBcmBR zu4!LvdXoj${K{an(|h+z%icDDU>jNm=GQnmdaS?FE<3jDfP7}o`Cj#x`n>)Mk(!J= zipy-c_iBD(xsYS{VN^>#zB%0@LDS43ggaPh_|8YlPV>jDBb*p^is!(60pysYD_U+H zy#Bc$(5~F!P|@!dy9NAeyh}wD{c{%Cd^29&Q%IGu_dm2bv%h?^du(fs#EjdPF$>+S z`W)GUx~hW3C+sD`SA*C~62C1C)S0n4c9MG_d`FO1C@1d>+|R`8qll=}&bMSB`9eW~ z*AdMnM-8Uie+loGUYbwQ?3N8uT$B@tJv;Fc>Q_GZfkN(gMYtiXM1>)|{ug++-v=;- zUiBk3v*$sl2PH``cAc%jr!RkT|uVX?z9NYMPOt=Ybp zb_+xD2}3(JvTo|^|3gf3KG{3QHJ^j|{#VbS5zW(-^&Q2g-;a`kx(`TPWT$;GKosrb zKFKRLVP~V1*B0ccv8JV1D>m!mkl;>sAED;JGQCavG+Ih=kk;YBz@!;Mzr#)^)0up< z>FFpHMoA9N7^o$aBpyH;$y0M=#Wfau7&iQ5v;R)8j8K2sx!q=Z^-9dUZ0`Tzwr>n zr>2Ky8Z^X~mIMc=g4^%wO>Tc#x`lf-`UFl23;)+UQTi_WZQ!|H{xEz0nf8*yR=c=Q zvvhNhnBoll>qGx~pC@^rJ`-zI=exBA8Oe8D`$sYg@)UkYmBh;Ytdh4nfX*mUe?9B5 zYTnA^iv4OEx(xt{_1`Z-;_7Q1SBVaPMALii%($l3guE-8a2>{fyUvzD2}a*9hg%Z) z)DFhBB>J0XrN8ux!zg2Z<^1(6sLCBL`!sB#=bCvwZfE86ZagS+^I4g;wpX}Yd4KO4 zL9>~xGZ^lF4FgMje@@KsGzYvi&jDsFIHVTNRuiY$-o3zgi%&f9{D{kHy#J{$-rZOkzjyV9jY;NHW#( zTeXuB*S0G*-TCTC>!}{B=hBxc%d8~$)9`TSDsWgHfHRG=&V;aGU|>HsN`C6NM{mGX zfu9wMFGq>_R~`q5i4&18m*ibOmXg(F>U`!>0-kg1qrZCWM>qv_b0iY z7_R4m>$&54`bFr025u-IK{f-b8fl4INb>HP=_cM zhZ&OM;vMqghHmr9csP7}ph0t&LKxx%M~4WQ-O9WCo24-=wog zcogVgv;5cm-g+&8$0+KjA0pj0G&P7}UAh{_Skv%gu)RR5x~{aESTK#3Mhe&U!;AX! z3lgqW4n6=cXIm;8K7+;5MWv82eFVs0wihR!PEir>6MrJnj9wvtklY?SA!o$hF%=Gg1 z|KJ>V!$tG8Vr^v$;;#uUS#uxIhziI#zb&FVJ$5$n@XptFe_}8?XUtFV?_B>4zySz!^zNBR>Ch@!HueDt-qLLp4vua-A%u6FNL|t#ok58vE$X^f^`^!D|ISG=keIT@=!6uiWYkHU>5g}Iv3|cs)C<}&qtV!|Bn~3 zSV0%{_&zJ^rig7CO}5EgxYo8`>65~H2TSm&*XN5{%KLBzXK!gQt9G@pO`8In z=k6hwX8zYr_pNBTb1Kv#;;8XpW=@16yZ&bxxzN#wTIZpo$8NrgTNelN(*Q*IlNwTX zhMmW;$b9bIQOF3Tda3(y?m#IHLc{lHKG#QmwZZfsb=?({KW@^=>AHi_kNl0)3FW%2 z@pFacff;sw1|xlI@q%;uQX7lgzF|gjhksB1lRgma;IsPgy2R0GVRTRUIV6Gj7q~?Ep7a{x6V#JZcRi<5hYx{aK~e-u1}Zq92@SO z%dsk9o~^E9uX@Bm(`#9}%e0VP=(@?St#j>`^zR5$oD&T&syQ&*y>?OAQc|Gp|Wv}tZYhkta_5HEcp%Jo% z%PBY68iOQ+5N;i=#Y0D%kWnvbpJP6yd`DP#k|Aw1hd_(!WlqakGrB#o%9Ce~AveBK zw+wMO&C4J-pd4aTcw^#DW9K_}uS8Ai^#b&3a@PC3uo-reT8eM$m{6soDfIVwsLE+GrA9l1scOdW>+amIbVX4p-Ak~{u>kbPG~UkrTzzhN zsgJa~rlT6C3};&~4ns??eSh&|asasdy@87l$YuFbgs@pwT?8BO+9qsKz`*Wf``v0n z%Aw|ioqf_yp57C>L_+f2ty8YOxih7x4@j*~M6tgnxAxNx*Ve>>%}Lew zvZl9#6n4lKn_@;tPQ#@)kxRQN?2B6&S+E;tdM&;S&MXN%Vu>APywfj5<7jl-NSL{D zp#F;e8Rm4-a@=b10Sp5%`T|QYc5f=R&EuT&d02kKFTj0ux3I!$%IlCPt;lhNxnVxI z&P%AeZn<;zKls}G=X^%z>y7W$r8`!g14H>J5F4QHnS zGnl90%HFB%(@Qe-yxhAvRg*%R!bggWx5qM#H&u( zWhP34!F&&WY|{@WX|Iy`c6Dk6jix1#7bIBr(qWI;C0aMzl+pvJb=!VrbPFc>p%Iy= zb=&LPCe*BEUu$dm{l@m{?mdIoEe3W_p>mQx9!fcT_rS*hHEX-Ju!;?mefQPOs2Pmz zZVC(e8b=2*lYD5WMA(!VDWM(%OeVPQGS(EKGz4vhHj~Y?PhNlK^|l%wqlQYOpwf>5 zi3zk1o|g!;R^B@AroHt<-qK_4AQ^@HKZ-UYvp4La)7bKtKM zzXTde?j1Ut>3co784T&AKCammI?Bk(U+X{_MtXPp63J=3(VIs$z~tpvlR~J9@bE@Z z)M~JezpMEO(~6caTi&v>TX(OOjcAN4Tr0c(ByY9MCOV2s+P~k&fDC-lod#CkJt+w({0FP6B|HSd*L(shp zNB&gS@U7zInjZl(gFLg^otrgsEX32z4#m+01@?9E7CC5uIhq4F z{|xT74=AL!KQL(vh&Aemf_4@;8x9u8mf zwN2W>dv zjAqIqp6v?IYiD1bQ0L*^b=gLQ|8h6?{FYfSolLETOqThN#)@3_VcY8BJL3MJqX<46 zV1npOaUp+Y4nK3$K!w5)ktJOnvY_9h<4Qj@&pmdo0PoGa`bKa9$&?P&Y z_0og;P6FQiyx9tuPZHFXtSQYlSex}DUzyna3Qc8G%dt7Q$`9JM|76*2 zd9Fq?o8#kGJbl{^VXVjgr)RZu%qf2IboL3=yD|PgeU5GN?(iscr$D`e(Z3GrxxYQQ zB>tpxX~|hCslM-1ctFxeddm01|IiQ%LUt>Y3?J#jQ4 zk}RZkSIdk2bj+5WSTu=V9)Cv zqu2V6a^SN4vDHjUzT@Pvg`*Sf8rkNTfnWv{hfO1fYBUv$-^`07t{-{$ceY>uvDoyk z+kbyOptlXvb^Bw{UCX9CyE_BYRG(-~729WGOsD@*?_35XM*hxyzwM;`K94;m5-6vK zvnBAzKP6u&MWdRa>&ji10W<8=5*>?~2X1boSJNrKi7ObJDjK$)%}h7D*h9~H)|9?@ zKPZT0u^B}Wd9Aw3n{EnbW_7gxs^G^=Bb~MwIdS+Us`1qq@~!W2umt|yiV)a0Y?H52 zC}*~0L*wb#Re+4e7{ZW6tZsen1qJYkhmk`v!?|OR(2Sh;;>s48<58j`_hh&DbJ2Ti zEtjE~XXPFr79JYET1dAzA*$35WTI_+r7N(jTkLzGsl!=)k@;Rqd-iO5x4rXQ=j2 zLg3^~X&&7F=qY?>SMaq(*0c*~*^c7@`^Xt0m}YjPl?O8x`IbP_W=|Zn!Pk1s$m2`Q zJg4X>E;{$Md%g`T$Mxk^#@%$^s~B4+&sEdqY-iHtdG1^azN66ihlHsNw)|__Z9&?e zd>eYoZP}f=nU$si0nBjKD59qei-#hc7>_ao zW!0X_3&BxN?4q9@3F8Y%nAk+)^xFgC=7NJcX|1B3Io(gox_%Ba*B$U`7(FZJ%~Fkn zn8@FjuPKJX;-{eCxkD(DoFDEvf|I^zn;u($3EQ+mQbGc!gmTE_ZQwU;k6X>>^w?_R zueo#vvDw9_3jt%_%<}h@v*$i({t2do|Ex46w{YqB!A2tpYY&OK!{K+sR3M zoLUbI{qU-JkbFOoV%qhp=Uf{oE)2HLZL(`p!&#&BQl*C-l3Uz2*=|PAtm1zY-1^51 zUU1*?ZPm{I-1~T!7{1|#hnTO(F=lc^VsYMnRL!HTBL+`}cduG;C)Q6IvAZ>YF`v$`q?0y-z3etP@^HzR=B- zUC}a(?|~vNHR6bbvw|!N`CcwtF+aFeN{ttXql;i`tA*1NE@=hg=z)u69AD5y&T9M+ zpP^8Wt6Y1DZ|jp&ucszFQ~zBvzId$IgmUWe>U#se*ixrPR;3N_GaD#w6vfIUYH|s9+nuamN*rIF}`z`e=%a=5~Dg!57 zQKEqB?M@-+!^qrk1n} zTxx%z6_)~lrDAO=O)NEkL0mfKZobuo=|?ul%qI7Lf1ju}dEe>>TYR3~3QXI6g4(pU z4s8OMApUOsy8QiyY)f%2-ra+98~#soZyrr$`@RqFD52pKaaGLNZ^ zGH2SRZEHZ0Ia5N)tSB?vR1(^zjA`43M>1{mu+84{rk>C9eAf57*89GH{MN74TJ4Ja zc3t;%U)Oma=W!fo95+Lg{oJ)HkoBwmj?DVi;Y4%wd9BHzim9 z@fVH|(qI1G(eZZ3eqO_+A`Cf7SXKgbD(0Sq3#?;C`_$CNGl%^LwO?x8W7pXYO!}=v zcPmrj1ti+u!B4z@m$@B(a-zl4>qFxoFLU<1s`boo$8&kErk-U#w@>!`F*i-XdK_RH zS1dck)Y35_Na04q1$G0{796q>Om>BuaK&w4O-;KT6g~4_u=sJi!Nv0LE6rErmY5Qj4i61VBnZhEQL9qeAm6*V=VPc$&*W%iN`C>0woW*G#3ri`IB8MmQ0s$Jdt z(c6g2A=<-mg1K}zUI5~GzY7GTX-8MWf4mdVUmlnDNa-{da~er!;sc!L@3Q_h5tV)YdyQ0utrQLlat;=#DT~sLPm%l^*11zveIG|?KTTVHM?Xgd% zTc3$$)eU!s(qw1jhQgp#Z-x{TKV@V?xhp%Bg;Ee*kNz?(tQ0M9dgGf?Nav1!UP}zF z^)k{P_v%caKo~c3@aE)e^3_~I0=jF}m}U&hP_>It?rf(Figb{lRO}55Xc$olXsT|E zh6lR^ia{ym5o8MY4_F@Yi&9@X`;v+3#gB-eSHyyI`H^6uJ(u#xddjk$36aAxv9`oEn-Zg#e{K@sNy1fd~IqfwP(h) zX1uvjT3LG|T1bf}?|XHHOB^IFNb^hw{dWBCULL`&_VaJUB|IfTSX4&m~F#ewoH??};3Ez{@tba^Br24xe9m zHR{9fGlbR~evDrjqYwMds>@I&ZYjB8c^J2rEYtrN{0|jCRa+CV19kr?{v0~g?1%wn zw8&s>Ok8Y!m`+KvB3vZByI<03(T#n0zaZ?6xZm@S;yB{q=ShR5tc^dvw|Pjc%r?!b zdlc(GKXgOzE|gxtcgahS4V;kwbBhl?J1G0UQC1UIW>R>=xvTGyhHU(jf=oAF_DO9@ z){YlDOKK3Aa@yJFqDLD(aEVq(?JVRv*<>{?wcBNkEDGQQ%0$tX>p&O@CBxhuBn`)k zgFmmi(9I6Q!t<&LJBprm(>9iRTE+KwGQm{1ZeH*ELt z2V`+R`N*JI*9LR65Zn>G#)>Asgkg{RCFx@~(tHO~MP;SjmlOYpvi4f{bl#ZnX6+WC zYR>H|%vgSyGZr0$6OV>^YsIE}-WX}~!Nv;Z9fChk0gdPstcKzMvI4Tell@_$9tQ-4 zfo*S|nw+yh$Yk4q!^r&o>XkwK2?I*KNO+uho_IJJ0Z5`MFIK-^Rk)c;Wb<%n_lK%M zt|?|uDrvH1`H$%NPp9*+T5KpcCYUd2SL!Mp5PYa|k4h_??N8XzF=cyNmiM7ZZ1*jV z#?|khXj34@5&E7dS*nP%oIf!(IuT6WYGeP64Z%S}$Vcznc7LA`bA|}pPLf+$w;ETo zQkg&8vPV#t2Gxr^88|wp*>jKH_aW1S9&8v$*ikS!mCSDP;uR22G>!hU5Q<}9WXMPj zS!i1HhP7C`?q}85Ab7sOc!hBKy@Br|u8(VP&rfYVX>a zI)SIZTT@zz#$3`GhVY`?k-7Ia^}g+4CCIw&mfXIt#L1YvIAr?1u)RL1+wk?7aJkDZ ziezkcH98z!8J;{+rgM3A!WpOr62#T+3ODmqc#yYdhxR;Y;?8Y)F0Nael-NV(<9V`~ zJAL^4lojOBz_LaQ8OMjb|K51wqU9PFpA(k|VK1CHR6F1dV((^?*q+q7itBZDG(G3j z9hO^J@|;Q#=v6!_I|`T_=3_d#K~1&{K$Zx@zVTX(xG?o)G8m@4yuw%_7q_!;F(`{q zNJ2F_n>*$E&(9y1wFaX!dr$AB<%kwA)yVSaxwE?2_oEIN`xg>$8(8Vam5Nt=l}EDH z+#OfnDWidCg9G##5cS`Z}7AoX`9A`S;iRB8xxsCV5(yhm=xwrpS z?=7lHPo-jF{WM{uTX|4QFLbQI|MqUunY>s-5!9qt3Hsqik4wu$DK}nLQN3ogTu}GU zr-vAi5+U?%xEmD3kh=k`VB_hpyJ1jLf0_q2YOVfx(XOK{Yq(zL!n9z4kL6SM{D=g% zmyrz?5%BwCH9zoJ0`}3j#mVBwHx?JXj5+&@e)8*a<%up39UOe@e{sm`mKs14pL1;n#Z)p0YdjO!whbWp$T1 zYDbFdjLeEt*Oe39K&y&V<%#6esUm29=mW~eVHl9a)_|&Sz<}mpK(U&iLq7c=ygn|4 z&4vR8Dk-p3_f&eQa@)_mV#&Qlmqd>eO}0-{0Pc(Pf`!2Plr6a?-~cV`7t_EDgt?*i znR=w`>g0z{PGb+MT_Jjm8Cw~NXT8fC<3(qRSN^wXM5ynC6Ced zsf*@Knl*`d4yAyAeY%Ok`xjaVDSQ~`XCbHe#c$DHP`LnBu_H`P>BUDfuIGVzQ{^IH zRQBeKIE66jFw!|&W8Mg^rzb?WVb~q0ge$JACP4E<^)r8XK|+qODi=q2`Sfd%juirM zo}mwH9a?*Sl7FUV{5sxH|9cG$kd$A)+;?`ZS!*^Pxn@Dvr$_MWOo6LQT!hGYz>tc)MhS&D+&* zz$}0VoQ<&BfkUkRb)#Z+vJFHo7r_a7I2UAt>A<1z0I!Z#(!a2#%UwXTX}u?WTq8P% zJ3~65M<^~2_kze2`*Wfv3YLh^)J|Df6|X58)FV0^!7e9pz#D8q*Fhu?CSo->`Itud z(--VO23_O8{h&BMIvMfm{eBFEGF`Q+;pxEj%QIMAxGExylSwh$R3DTwdP&d?_cAs} zg%SB&Kgi#GCae!w_x(BDY(FR1z}-&M6>q%7t1tmx#l*Mw)f2)9$U@uz^|2ihJggwF zHFn%M#?GGDn0cQp3W!bNgk*Bvv_nT}!P8fq)mY;{eONEd49c^td>#g1vB_NV+KZ04 z8x^hUNiAg3<$`aG>b*t_XXu%MR z23RyLVTUX)E=8)(lhosWI2gs3*GGv*`^{UuHNz6!e+V(5Hq0sa2U!+>4u}6(!>e0B zWc-$tN?&1;;g7#CC-3eZ2xWVYExv~(#LqZ*=aOps@`&S8VxTt)1$$=@q8LT7i@PEU zntOOPz_^4uygxlY2<%y>4c1EzRp)D{V;yEyAFwQXDD`cYbq|F|P4?^xdcIOXQz=CB z@7Pht%kEt+M5144lQjI9VwKx`wB!uz81xWPK7ViqfsweJLxDdrOCc|=_;`ZtG-9)C zPS_aF2QV2LKOh2}A|i;XyHd)z!P}X;V-ct$h}Krhr>J~+hLcUqRlyZsJ+Xor&TdJ> z(|MHep+s$oQvRCj_-O9x(2ZVCEy-d__b4~6BB;@A030ZD!?m_DXkCO7|tX+SUfvD+J*3lX;p6WqEBECN}ucFPmI>|(V9wbET&355C9S^l;xN{Qu!;>M*(mJlpR}&1 z?(Wt1hmKum^=-@1ZyA?j)p$hr$%Y*?^C(p}ye#sPdaf(w!`Xck1|>SH!fP4t9y^d) zOW*H}7MvK*J#bS@I48R#uq&lhvf)-I>5P@f`&VQxnd8And7iTM^=#J>b9XUu1DNX5`lQ%jr&QW@eKg%@Ng*g@daEdrx=ITj6&05O)5?H40K`G+z~zBw zxf@=OgrCjbjXvU`vdWC7UoxCmNFRQTF`f*tI~TW56~A!d?$Y|Pa`)+Q~{m`27`tgFn~m4(D~h5g*g;WLt=#90pVa)6anqI|M_9X}|vvc(l`9 zWD7v8u0($6eF>F{uPbjit>%K)k;9iz8mXOs^H|8#xSx!>xe#v$;d?l?!T~JZUIp^s zHF9OL68MyYElI4l>ne#zE7#hOs)~j=g`@x#4ikDGs;L8l>~&^YRVu)~KEN~(}|MK)ZHXJNlS23-f@%ybMJLC4y_f49rfU-Ae9a^W(r zJ98`|Q;Z?2Zo9b`l*53wiEQAn6hgc-rWlvc5j3I1n zOSrD$_ARu2e}r2wPfkC+u}Wt(7LRoq`naVgscr$n$%O)}X?!oP&Y!{058_BZ6K>Pz zwq!d0%sx%NTB~8zKJ*zmj z5fD|j=$(mqA#BKBdV556Y-#qopf00F@7kRtKlK-EO;*jA8h(GXI?$>AH&%n3YltaYf6057B+!D%y=;SFKzp<6A}{Z zK`6m(TI&kv_ND43$;a^nQ`^P!3iv@`M*t%J5*{j6mc`Xvgj+W@`URw`BkxH4K z#t2LMTVI2YEdB`Yh|$U+c-kNNEgHQS23YrCp~fP#lHeSj9hxT^ zDOc{#6_k)ro$K{djYxEt7K!HN$y*-#x*+h@db~?LL6_*K?TD@XkzoFX67dKbIiYN{^~z-C}-k z0nEULp$TPaf*0fh^OAHX?3J+WpVN(v)&zt$9EHC|XB&kHIjB5Vi7vSzj#{DyjT%Je zC=84mFxg^8pb|V5aaI7n2|YYFOZ|(vs-31o~Ond zA9K_z5_UPvz?{@hM+UFk{p3y~i}Uv4sD8n^NvH`^L){NA3l!9yG!bU#euHPI|5~cl zJKx&t+GurcszuZT3_n`mz!SluRjKqx>V6IMP7DVne_ip~=-ckVh59v97l>j-7@N{| zP=vp7Q7+!@t>D<^hV4Z5mi<5+`2}&Aa^bNL$#iD`@kL*C zOuZeKzZaAoE6HI_N~DG?_Il%L`Kw2t0tGOcB5|svB{t{YE;&4!{iLw^PR7k(8(0Ij zMG+>9lyq_%)kCHn4`ZzM@uWGh=0gEBwy{#~p+!;1!AY(ZrxnZ1b47DY`ur9PWqB37 zY#p_`JC3LQri{wC4ol>UU-*^L;C}rTVYapJxpHFWBls~@vy`uVpu#S7D91mMni>z6 ziR!lDnRoh@*|*u*RIaF5em58(9P+NpSq!QwCyWG4;U;(39&So+y>-K3q`H8!rc5Ze zFAerOqZxago`t$;!21O+&@tT5?fp}jv;;PXG}R1}_D;SAx#hcT$~KJ*y|_u3vq)6{N@ zo>kD*Z9ItPqbeH=_9)^jCpsLii!ju-(PJF zFw!csKb=Su)Bd7d>Va`q+Pk{BNjK6Xr!Lv@#j;?Bv=w~25Zs;vZvO>t&**P@U|N}U zor5IoXO<3iF_8Q98y9}Nb0$twH4sP2Y-Y^v$N)G2d;7}5=(npKb^@d0vs-eABtSwC zgdDkEY>kgNRj=BKz;u%iM}yVc%3N_)-p)8x%>ggrg7h2pyE}G>HiJamSZ57PI-4WFeDQ);s4N9 z(feT5_IB_^wSS3iPM?`zFpknKFG==}S$y{WV&+)fM}Te(e;2KMp8hW?%!jP5{UdiF zO)%Is`#IC-$wx%RC9#cjKSA^aANaT4j$fa*q(Zb}HGw~FKvB}mSmA21;|Zlr)=L7_ zXSFKi%zXXlqNq@ScM#!>K>3^uCG{eFdH+gHRBY5UbeDCWcl(cS73aTHA8e(rEbZkf zev5YrWmquCVupQqOR#c35acDXe>q%gpNpkjupjj>7C+umpErEr=Y)N}d#xl^ct9hz zv4@iiir+{ugRlTO-pxes;keS^M}-^Da~Y!VX7bb;n|72$boRR^}esJmqNG1*lyb9{o%A5x`u2vPn)tfIAn z>Q&vdvd$Q1;*a+Vo=JZ~!R6rZDW^ILf<>S2C6veBMhpI(HXA1!x%v`13)I+RRa3RP zU~6@;Hte!qfD#J=1aC>2I8J}`GDi6{EDugmdyt1h@+}BvGHb=zCT7s(U)K`9RLw@qVYn%p{<++=vs8*w%rE7& z_U0Jt!u?ciA%CrP-JzpzQ`-D9WJX_wXZvBlZT2;!c-3Es}qSCIh z`>M}+8OvP@1V4;MiyPoa1^z!dgdMr$?Anu7PzSzI{_G5&kkRg_GG0TQrsg3?sCCvi zio7?l{-9JFe9q93uHbt?(33h8yIsoIDFv_K_C}1XpMbN{!y z|3#EbsA7hPaVkbcm?R8kV&B=6KDz0Yc+ZeKiw`b}dHnSz;Bdq1Rbp2gyuM4N{HWXHzH=E@3T6%Rh5!Mcq%VnUh!^Yf9WSYBx$0c#s^hZ9IZG zfE{>|o~Qb%y=!JwEvfaOYSen68ujOfmiwGme?Ij>7@%_stJ6M4WC7jNFy5 zogK;`Rova2xkRV!cn};^M7r5v|7)(_B2gZ=`MfJ5+4zso)&SejPklI)TcePr_Rx^w zXau1v#l2mGfYS{zo2nZ)i^dpTX2IK1j;qDyX`MG6%ULz(TD<35_mpAWHJN!O+h@WQs^cU{(^=_e@&PU`7t;x^(3h=)4PN)N+b(8(Dqe(k(;UCgNcns^J zAH$f_JtmPkiJablnHG7x=R|iw9lw1dl2CW+9=kYWpuS7yvmx>x6zz31W*TAi6^D^N zARsAH{uXC0iFBgvnGzi-lPV2?WRs6vIt>5`!%?;rio(KzhB*)kIq?sXy$LuKbk{&3 z31j!^yK9su6W~y+6I1hsr$~4Hmi+W1Lr4+}5`$aUC&qb&*2d1radLf}hg`J4wds^L zzj1pl0~HE@UbqHCg@U=_mtYxw$fBMEb9BV39)zfoVDktb73v@jQgMm{FFeHBdQAd4 zrxAnjSn`_SH_B;7O}^|mDQLoQ>{cRes#?2#2o zFLP96`CxMcrtWUI8>F;|^$?v2kRsh(s>%T)1P7)#M70FCr!{z3u$;XqT}njkprA3$ zy$x_v?ERyIYB~}b7e$c*)iFoWzm8d)BcQ{3SvGt!Nk*;y44im?612`HY9HLhePTl> zB(Mu(!2SwJ*EzW0i9wJb+?6ncG=%_H(ssm>7d-ovT7edZbV)6ThN0jzsFz7p09O%c z$k)rq;KM%BodllE8O5oM`k8 z%ska980jU@Of9tEP#*;!%O-O$&_)`=f}0M~$ghY9?Na5yY#AiLe45FRC(GupAtr3# zP0}=7G5DJ=bTX^s`9uXATBmy(5J9aEd0VXl(Qi)tfH(ByfrcA(F2iPK(7ZJfFt6uh zu87?;_<{haeGYL&2E*PMa2?8kmI-{@$~iED5ygdsgfx4DGXm|o-{%ynijsS|UlPnY zkyd(l3zq@b&RtvTYPyI4bK*?sI|3%jC9YGwZvk*DC0T&UDmXl=Mp5#25$qNg%dH^I%vc+GPq(vp{Cl0&^K|Ua+T!2Z6YjCxNDO zt9j#PO3!OBBcPxPNvH#x=T@(jld;bMy-nL=@ygVz(7SDB?|MoKF*m928 zE`#{&J_|LN|5KkIEti7$!+O0FcM;p${C#7}Y$zy5XIQ78eL2_wU@Hn@uu!%C_woIq z76cLl@R5sk0HTA2_R(EoXMd9hVOEx2`U8s^h%d z=^H?n`TZ63_57 z3IhV2iM3`1p(&JhfQ|Q$yU5GA#Xw$L0)8V5%cR*y|a zX*&j#ZUUG|@Yk|-gmD4-p*jdwyH{&BxYF8-DTDwi+y`@a0G&tYygNZFutF}lFBIF; zTnXC-kYTqcmX=4AW*2JI?RKY3O(N89NMX0)tIy6a%mx`$E|{`w{nI7n!5%0ShSI=) zf2C9w?_WnlE-e|mnFadQf9T2|fbj?_)DM6~XMq__1pAY%RX^zlV%#lwWh-Oh`i8t< zcaao1;oHasqFw_JN$*n5zt_X|g=j#n90rrX#^Uxq^NmWGgOb#n@2{Gf zvO9jpuYw%}3Uv%omu>m8#35-vYQyeobLYyf0Ry(n%xTHvKcAgf8uP^5Cb{0Y*LOJj zil5n?HGip*4tk~$Bj_DDo5`RuQvMaIT_CduVGJS`I@>JA50Ai~kAuy3R=>cpGtWvt zCs#FfGphEp+-QmaRO>U#W7Ed>nCE+bxO;eik%(@IP6nz@dMftw-PK81#E=8k{CnGf z@Z^6`i4?4qvZ8j_^bJI8Qw1Mo*+n`AG%<{hhqt;+f4duLy_(NTN3o|sT*MZq)AeFc z2tqNC|Gf^t{lWT|ECb#bzZ?WZ0jD3KB=mbKKK(a7IfS}rqEc%-H(16eT>UHbD>PmAWb@Syt6R4wNzgbf~{bXJm^DJ*BcUqt+yEg=ipX${4dni z7pw+d<7;emw9v&0lC59y@{lnC&b&SIUAMrpLZ&J(g!Gz;9k2NQoQ43wKI^&>L5ejg zj&OJmLOs-fynkZr&pyr1cB9?<4~E*7D^LG+@c*kZ0nFO30M#4763@(S@J5(XSRSO}a&&}<9 zHupJ+hwB@Co(f`v39ea4Z*`$qFXQ0aPumd#;=s3+hSndPKX<96wqKfk{h`?r=mUKn z+~U!~yQdl)prG<9`?q*q|JFx{?EVU#*vQS^TPvoBuJze^mUF;!T5;C zl%BSAwTIN$`SP2R;sVSti6gfiULsdoIR<}OTfg{o&+nUJ1;xQ*%fIXIN#XqW1X1gu z(aB(kn*z~^X>|DQ-&dmQX4;!`ZsiE;);~xu`hK*2iu|Bk|3LdBE*18ntzV&Skjwx2 zjG~9&|Nq73%TS z%1fcM1=7v~u^p@(ZwPK!oPj1}$}>}Ugkqf`+MPQ5Vi(Xa+7Rvpn4&@Odlm6OMw-2m z1P*NS41l=;rOvL83lCE4b@1sjg`FP|;}ArFx+sMf0hRhNSQUd!aUS$i2-|0W-h0h$ zt6doIEApX5Iv8=Mga0Jb0i90gxyxmb`4-TdAYI_WL*5jzwDs9R-Ac;FZEkFt6M4F2m7B#|Q^%5$(pf_Qe-o2lQhcwLYSD57U?cSgm0k7G3#Mc<&+wmtS z6IzhYE?|s0Mn88YjKZo$MH8H6QV<;(i4eL!=dVq7XyV?-Q+VUGRV2A2ptH8c6MgpYzm!;fPTM* z0RA&{PkTWCGk0q_1qBvxEUy2sHxIG-^y9t_%cRL1aS%2WihT;^l_{mh@Q{L_8=hy< z$A&EMzCH&(&+rtq);tA1?&qLEdC>&;Xy1a4Cr#%1&}<;c|Cq-q#jOW^?sbkS?nM0( z_+_@)oCj-k#Kus7fVAy?4G%_CFLoH690JW~z^4$}Ld+@LjxCpvJMG z_E9Pf(UbRaBCCKJagE}{8*fz+)1Y4KcfG-`$${Pxd{DlE@B^{C1*S=3D)cF^1`BG* zHx1=LZ#bo%uxUNDA@h8t`cklz)TZhm=a@eirpvvxKqsB}yicp;ROyT`^?SPqSFh66 z3vj-P+gTq-yZ6-t+E;%N0$-jg_#=g;Tkd?sg>w&BwUYfbe*&XPAgI@;3a^qDizAN|OTN4e9a=jx)ZlA2m1nQSA9UCD>Wr2Grc z!wZA8^rK|*KCun(l-4vb5F4MtK_=AVb}$SSS@J(To;=ch{kX2kzK{FN88u;>Zye_4 z=B-2`p0&+b_-kP>j`QS6MI(V|G6}CMCMNbKq3PAr;NXDAk4bikE)B{CDsnWrL<2x_ z*0Zjf)Jj1{`;!y@7V!kA4EW))b_k7eev;=wrDw3&*H%B^u+tWEiS?j+Wg1XTm^T>@ zF)^KV#bcY6kBK>7ZEbBuL!#D7BAo%&Rrtn+_gyP1gE8J_*kII!E?#7qU8;1SXn0SZ3hnJR(XaGgcU1MPZ!8SHefzeMs3IsAhu(>Ayrz*L)Sg*_^hul-rHa6OL`T*@!7ncI0LriX7o+TTT z?J)N%c0hRqFG7I^&?B0U$kChNl-67My}d$Hybyym@2(JZzcK z;C8Whc~=kk+13m>LLUEQA03^tg@whpoWPWU8MjY^Ge?^L*t-`EW}uD>W7?v)jWXZ! z)whaCcK7h4&vOqRP%*QzKKuMxp~Pi8%J;ls4A901S-LsN<>jQY4352Fq_(=r$cN+& z@lcXpecj|;H08?`*G;y%$q~8g%TzCbS4GDzDKQ-L^y$-gCd5%^cw~K3Owj~$8_Mc> zctpgZPHVs0Nf*W9o0z4RX6A;~AtesfAjpuRBd44k4Gj(d{*Cr_ttUZ243&NC`J^dI zvq4DPs8PFHmhX+hDLAB0h=}OI*G1h5h>Edgi-?HW3{da3j7UsmXSiaZt!=(`sokq@ z@^PWlpM-~Gu(eVTEF9n2&BoHr)?H_}#+&QO(tY{N_iR`qchDHLVSRVwv(Btshr${Ub5Z?i@bVps(lcQ<2Vo+6&0l)Qdv8=heeQc7T$Yv^^sLP<&TM6u_-ngJ38)ybMlIpUjS3?~|_0bzI^7nfy{qe~D|%Zb7iupJ}>iddO!njWLOdsZ!$9r z3JMG~G|Zmj0KUlvWW?IaDnBPjUC^}R&HMN7SEdJKw=WDG3fosHQ{&*aT9B5e2p-Kz zuq&Gh;t(Pf85zmPdH$HKt?lO{2fu=4{gGzs`#uSxP6}*v{yf~=ci`n)q)-Gme=vG+jCb=>QvuLZJd=4d6)=}k z@Xqb9$h+(9T_K6v=vgw<&d^rU3lK|4xY;W#^Dp&Gk{+q;JICS^74dd9}K zPh9{F0Bt6Ac{XKNo=Gt*)X?GHO&4t)9V-ouuTQa#j*jhcRRslw7I)?+jE1+d*mBq; ztN`u#KH+*sK%ld;Q^%U8QaWjDb^ZBr(Tj-3tO#nJ0SGkgMKWCY`pK)vh6LN}lA`v- z2Ep3D6&#xm^qAkFo~rbJLcl{Uf8#t=J1_hljGx`H|Nqi2pB6m*x%nEMr$;+793}Z{ Ka@jIBAN)Twz>RAF literal 0 HcmV?d00001 diff --git a/kamyshov_danila_lab_1/templates/index.html b/kamyshov_danila_lab_1/templates/index.html new file mode 100644 index 0000000..2e5c84f --- /dev/null +++ b/kamyshov_danila_lab_1/templates/index.html @@ -0,0 +1,24 @@ + + + + + + + Сравнение моделей + + +

Сравнение моделей

+
+ +
+
+ {% if result %} +

Графики моделей

+
+
+ График линейной регрессии +
+
+ {% endif %} + +