From 29c352dfd1ad9386fbc759fe86f036fc9fb1dbf1 Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Fri, 7 Jun 2024 20:12:58 +0300 Subject: [PATCH] Initial commit --- VBAMake.txt | 54 +++++++ VERSION | 1 + distr/80 Учет рабочего времени.xltx | Bin 0 -> 30032 bytes distr/90 Ежемесячный отчет.xltx | Bin 0 -> 12428 bytes distr/Примеры работ.xlsx | Bin 0 -> 21060 bytes distr/Производственный календарь.xlsx | Bin 0 -> 17662 bytes script/aggregator.txt | 89 ++++++++++++ script/projects.txt | 64 +++++++++ script/worker.txt | 92 ++++++++++++ skeleton/!Всеучёт.xlsm | Bin 0 -> 188112 bytes skeleton/!Список проектов.xlsm | Bin 0 -> 25199 bytes skeleton/ConceptReport.xlsm | Bin 0 -> 9600 bytes src/aggregator/CreateWorkerDlg.frm | 74 ++++++++++ src/aggregator/CreateWorkerDlg.frx | Bin 0 -> 3608 bytes src/aggregator/DB_GlobalWorks.cls | 87 +++++++++++ src/aggregator/DB_Workers.cls | 78 ++++++++++ src/aggregator/DataAccess.bas | 55 +++++++ src/aggregator/Declarations.bas | 29 ++++ src/aggregator/DevHelper.bas | 21 +++ src/aggregator/ItemInputWorker.cls | 14 ++ src/aggregator/IteratorGlobalWork.cls | 105 ++++++++++++++ src/aggregator/IteratorWorker.cls | 81 +++++++++++ src/aggregator/Main.bas | 86 +++++++++++ src/aggregator/MainImpl.bas | 70 +++++++++ src/aggregator/z_UIMessages.bas | 70 +++++++++ src/aggregator/z_UIRibbon.bas | 16 +++ src/common/DB_CachedProjects.cls | 105 ++++++++++++++ src/common/DB_Projects.cls | 69 +++++++++ src/common/DB_WorkerData.cls | 109 ++++++++++++++ src/common/DataTransfer.bas | 48 +++++++ src/common/DeclarationsWorker.bas | 44 ++++++ src/common/ItemCachedProject.cls | 32 +++++ src/common/IteratorProject.cls | 86 +++++++++++ src/common/IteratorWork.cls | 136 ++++++++++++++++++ src/projects/DataAccess.bas | 42 ++++++ src/projects/Declarations.bas | 30 ++++ src/projects/Main.bas | 45 ++++++ src/projects/MainImpl.bas | 48 +++++++ src/projects/z_UIRibbon.bas | 10 ++ src/worker/CRD_NewYear.frm | 51 +++++++ src/worker/CRD_NewYear.frx | Bin 0 -> 3096 bytes src/worker/CRD_ProjectList.frm | 77 ++++++++++ src/worker/CRD_ProjectList.frx | Bin 0 -> 3608 bytes src/worker/CRD_WorkList.frm | 62 ++++++++ src/worker/CRD_WorkList.frx | Bin 0 -> 3096 bytes src/worker/DataAccess.bas | 42 ++++++ src/worker/Declarations.bas | 28 ++++ src/worker/DevHelper.bas | 21 +++ src/worker/Main.bas | 142 ++++++++++++++++++ src/worker/MainImpl.bas | 106 ++++++++++++++ src/worker/MonthlyReport.cls | 199 ++++++++++++++++++++++++++ src/worker/z_UIMessages.bas | 74 ++++++++++ src/worker/z_UIRibbon.bas | 26 ++++ ui/aggregator/.rels | 2 + ui/aggregator/customUI.xml | 42 ++++++ ui/projects/.rels | 2 + ui/projects/customUI.xml | 21 +++ ui/worker/.rels | 2 + ui/worker/customUI.xml | 67 +++++++++ 59 files changed, 2854 insertions(+) create mode 100644 VBAMake.txt create mode 100644 VERSION create mode 100644 distr/80 Учет рабочего времени.xltx create mode 100644 distr/90 Ежемесячный отчет.xltx create mode 100644 distr/Примеры работ.xlsx create mode 100644 distr/Производственный календарь.xlsx create mode 100644 script/aggregator.txt create mode 100644 script/projects.txt create mode 100644 script/worker.txt create mode 100644 skeleton/!Всеучёт.xlsm create mode 100644 skeleton/!Список проектов.xlsm create mode 100644 skeleton/ConceptReport.xlsm create mode 100644 src/aggregator/CreateWorkerDlg.frm create mode 100644 src/aggregator/CreateWorkerDlg.frx create mode 100644 src/aggregator/DB_GlobalWorks.cls create mode 100644 src/aggregator/DB_Workers.cls create mode 100644 src/aggregator/DataAccess.bas create mode 100644 src/aggregator/Declarations.bas create mode 100644 src/aggregator/DevHelper.bas create mode 100644 src/aggregator/ItemInputWorker.cls create mode 100644 src/aggregator/IteratorGlobalWork.cls create mode 100644 src/aggregator/IteratorWorker.cls create mode 100644 src/aggregator/Main.bas create mode 100644 src/aggregator/MainImpl.bas create mode 100644 src/aggregator/z_UIMessages.bas create mode 100644 src/aggregator/z_UIRibbon.bas create mode 100644 src/common/DB_CachedProjects.cls create mode 100644 src/common/DB_Projects.cls create mode 100644 src/common/DB_WorkerData.cls create mode 100644 src/common/DataTransfer.bas create mode 100644 src/common/DeclarationsWorker.bas create mode 100644 src/common/ItemCachedProject.cls create mode 100644 src/common/IteratorProject.cls create mode 100644 src/common/IteratorWork.cls create mode 100644 src/projects/DataAccess.bas create mode 100644 src/projects/Declarations.bas create mode 100644 src/projects/Main.bas create mode 100644 src/projects/MainImpl.bas create mode 100644 src/projects/z_UIRibbon.bas create mode 100644 src/worker/CRD_NewYear.frm create mode 100644 src/worker/CRD_NewYear.frx create mode 100644 src/worker/CRD_ProjectList.frm create mode 100644 src/worker/CRD_ProjectList.frx create mode 100644 src/worker/CRD_WorkList.frm create mode 100644 src/worker/CRD_WorkList.frx create mode 100644 src/worker/DataAccess.bas create mode 100644 src/worker/Declarations.bas create mode 100644 src/worker/DevHelper.bas create mode 100644 src/worker/Main.bas create mode 100644 src/worker/MainImpl.bas create mode 100644 src/worker/MonthlyReport.cls create mode 100644 src/worker/z_UIMessages.bas create mode 100644 src/worker/z_UIRibbon.bas create mode 100644 ui/aggregator/.rels create mode 100644 ui/aggregator/customUI.xml create mode 100644 ui/projects/.rels create mode 100644 ui/projects/customUI.xml create mode 100644 ui/worker/.rels create mode 100644 ui/worker/customUI.xml diff --git a/VBAMake.txt b/VBAMake.txt new file mode 100644 index 0000000..8812b2c --- /dev/null +++ b/VBAMake.txt @@ -0,0 +1,54 @@ +# == Properties Section == +# configuration properties +# use .ini format to define properties +# mandatory properties: name, artifact_home, source_home + +id = Concept-Reports +name = Всеучет +description = Учет рабочего времени +artifact_home = Всеучет +source_home = Concept-Reports +install_home = \\fs1.concept.ru\projects\10 Автоматизация деятельности\02 Офисная автоматизация\01 Всеучет + +%% +# === Build section === +# Available commands: +# build LOCAL_MANIFEST +# copy LOCAL_SOURCE -> [LOCAL_ARTIFACT] +# save_as LOCAL_ARTIFACT -> LOCAL_ARTIFACT +# run LOCAL_SOURCE.bat + +copy distr\80 Учет рабочего времени.xltx +copy distr\90 Ежемесячный отчет.xltx +copy distr\Производственный календарь.xlsx +copy distr\Примеры работ.xlsx + +build script\worker.txt +build script\aggregator.txt +build script\projects.txt + +save_as ConceptReport.xlsm -> ConceptReport.xlam + +%% +# === Install section == +# Available commands: +# install LOCAL_ARTIFACT -> [INSTALL_PATH] +# add_template LOCAL_ARTIFACT -> [LOCAL_TEMPLATE] +# run LOCAL_ARTIFACT.bat <- [PARAMETERS] +# run APPLICATION <- [PARAMETERS] + +add_template 80 Учет рабочего времени.xltx +add_template 90 Ежемесячный отчет.xltx +install 80 Учет рабочего времени.xltx -> Шаблоны\80 Учет рабочего времени.xltx +install 90 Ежемесячный отчет.xltx -> Шаблоны\90 Ежемесячный отчет.xltx + +install !Всеучёт.xlsm +install !Список проектов.xlsm +install Производственный календарь.xlsx +install Примеры работ.xlsx + +install ConceptReport.xlam +install ConceptReport.xlam -> \\fs1.concept.ru\Exchange\ConceptDistr\data\Add-ins\Excel\ConceptReport.xlam + +# manual update !Список проектов.xlsm -> \\fs1.concept.ru\Exchange\!Список проектов.xlsm +# manual update !Всеучёт.xlsm -> \\fs1.concept.ru\projects\05 СОУ Концепт\05 Отчеты Сотрудников\!ВСЕУЧЁТ\!Всеучёт.xlsm \ No newline at end of file diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..9084fa2 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.1.0 diff --git a/distr/80 Учет рабочего времени.xltx b/distr/80 Учет рабочего времени.xltx new file mode 100644 index 0000000000000000000000000000000000000000..89638d1be619a80cd6302aa186b6e46a0b89dac5 GIT binary patch literal 30032 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 G?*9PW^X9n# literal 0 HcmV?d00001 diff --git a/distr/90 Ежемесячный отчет.xltx b/distr/90 Ежемесячный отчет.xltx new file mode 100644 index 0000000000000000000000000000000000000000..7fd000bfa94cdf413f3a69c76d57f08a2466b096 GIT binary patch literal 12428 zcmeHt^;;d;()GdJJ$P_;cMa|&c;LXn-QC@Sh2Rq0U4pv=ch}(V76>1infvBW?tFj2 zz5PS?)2F-EbN1d7`B99fN2G?23$N^mZE&uL(Z_U@Iw?a8v=9wClbpq4G^ zglsL<7#ea^u3gO|$uR56QU{*_T^(R#u}Cb3X_nk9>VDa(2pm zF7eU}M$ z=n|rlM=MeGM;^n_T037Zg=Q>)U7aFGW6|Y~%T$QRS;6k?k5f6}+FO08w&McZV+HPM zqT)mZaEvhXnUncV7@Dx?n%rqqh9lm#TSX2|K-0byFoz!PdPB!E2ms*u83Lg6x45lS zXC}LPaYnh9uta!?+xPY$O9v*#pXdL@>wj^O{@c(?(&l+NlUo)m{Zayzy!Ee*C($!XI@oKzg&uUK)Xp$wyZ2QWpH_ z!OjVWmeM{^(ynx)2hDlrdgdnijf@+$bL$7%lE%Vp*}*k3$*FVkD%3H?cdy_u@(6;l z1(N-=`s6iNfp_I#Goq@;WxugUOVaE6 zSL&*!JZ6=^413^A-?5Ip>8HrL_R*?kKOahW>*0dy zE*Ur*^p7AeTz#Ri{|u68o?_Rkm+(n@;X0I;nQ^sba!ex{GMs(1Tz_d4tq>R-ao>ytUkiY#p=b3&tY+U%sF{?xii6*sWgHub^9cDiHsnDC*-F*3CFulGZD(b=2M@3pTr z3_qYFAIy#JGhtz1h9lR)*!j|hdD`nLgv!;*{P>2MBwicyz{AiO zv(0XthdIUY6xR*BM}en|wO;|O%{|UO-+lwI2dx!4z7B$Z?(ftdn1->3af5K`Nv$Rl z1KN5dzUk_(2~pN>$`C+ws$sKtT)F}GTK_`0aw&@Au_B@mv-8GQveCOonj$`m9MchH zA?7(CFLR(;vorsF)m>0uz?b_y^W|oC3*wL6#rL|bP1Nsua`G21!nax8U&TZ-*dBPh zG!^1hXwYLQWtuFW4Lq#kf3-%}k4!Ibf|K~1bUhxhogQ_j*-*x}kyW+?=6u~baByHU zI^OF#?bH?fj*YdRdd3R7a3&{lF0bn0c>jEV>R_zk&E9@7(wv`U%Grz{kl-6{Y!r=Y z`ZoL9Jbu$SomlLh}h#{b2LU@r>x<=y}8qcm>FyoVW4;x_0~Ekku>Wt%+2MWql@JAno6 zqO{W(!+nc|96_MGeSAL3NZR+&NG)zbo{z^#92aE(EWY++Vy4`xO9y`|`$L z4B=o30y#P`{c&OWNfl|DOFyZ?i)q{kHIP5o6d2aDfNjYH)V`qH(~CK(-^+PDRfRfa zPr>tv;bHuTq)%>U)%Q1qdg98TkGT=Z6P?)kQ}9L+L$20GRGTJ=Z1u<&+zWG}i!59T zO)ibRxTb}C;Kw|g-X=`A6O~nS5FLy)j;}>}KN_4RZQu5ye^Y@7c4C?S1p0E0loR@i zJ1ShEzSF|BdfEnGf2hlens9C3(UfGjGmZWQ^ftzqDh?FY4u7KbN z{ar)JoRW^4YD$mWTce0-h+*g{O^$Y(t0-!0x#Fic6D0iu=VGFimHE|eiWFP$j3tyc z?eW7HMm@S;+U0k|o)j-Xn>5d2rswG0ZZ3=DJ9uyCUX6Z#vc_#J{|1@(^hxm5IQM;$ z1#0A-S3(zo=hN+>&)Sb4Hz<=)6Z#p#0Mwj10;b>xsEZ2v2>z^Z-tuRLq+WAh_imso zY;}O+VEc;@u!z_4jv@W13Ae;y2YvpnOy?&`mkhMryoT~ zM`&zE2$((}7q^TOt!-{uYjz!$Dd1e?DDRJD7Bq&E$_ob|U(2VJ`9ccTv6Jp2D-#J! z92&AReG)H^7;cm24!=lt1=}Q9#Ret*=p!$@go5DDL$uvSEG$v-4TGUxr^)lBE7)s| z>)iPHE2l=^wa}w|Wqcb!xo08BiD2mXCPw}HI&(-r&-z!MG-P`@#n*rlWY?@AxOH0o zGa14x8CAaZhjg}u-JkYP(K8OQbW3*JxTsqQ5ma|w(mL8s1yD6Layt&gqG!G)F`-Ih zCo@w^Hs3!%H*|hZ%^zi_&6yw>BjPA5CdcJO)69ucbj%IgJdwx5spg>k#yB9%O28Ti zZV1h7>z76=d}3gP90?;enG_)xD8*q~OycJs2+yh-(_m%ANYMdM4QgeUt*B~Xb&=~s zx(;?K1f`>*&C*C^k!1T18|7y6(S%ea(Pi`D%}uVD?=y-Ap1`A1OBIr^;hF6zzz3Ip zAEng^LPsMyIHP$zXuV$|!z~|16Hn5s5Ys3hD;%mO8G`5sr08=UVPU)O)g_%^#+8cZ zN`ghXE|dnG~ASt7RsK5o6FlN_KBKxEqy~}%uQO^Gi ze_$CquI>h(&y=FM%p4;{B#tdK)T@^g$g`bKB$q-6xD-&~L3n+p+rPFtz z985lS$zr231(8(jb-(?=>t52-U}U7pB6z47;Ra+L9#AzKPyQnFgIsY{BLm2Ow8Q&N(Bz1<>2hsb@0{r>p%ow$lrgq|#psW4v ztIgY~;uD_eosTvtK>3Wo%=B$73cNDC$R3pmgs9UsB+?V(E=zOj}nRCJh|(3QS2VtOb0I zt5JPd6Y!un#$mtW)}dH%;8 z9r~dkujdP2-;?}ISN_4*j;0_h5Yr#$KdAahbHti}3%w0yfRFt_Fr)qC9*rM)XD*y! zA(+E?os6S9IltE$St@$V&w#{M;R`wJy6zFk&xpwb)*n`b37wvE{+&`rr*Bl$B`Qs| zN4_*te!Cq-~@?jA9SA`F(6cO&L%*QXe-=)-o8wmD7M<65aZ~ zmV0Lp_NuQ|gXW`oFK%qlEjnhvVtjl0o=9`s#pb)J?lI zjfs&sP_v^KdBP?L0HctKB@d&*VdEDele%L3Y?O&%6Cy_@)q^LKaJMxpX*n$6j_%FyW+w(7A-Rx%BaGj>&A(+SnC$w=y^O#Ew5 zy)>eoW+P&tl6Kod>!A~_Q(038iWPYab|`NoG0^^bDWVu%YQJG`N<02;S{K;RXb z?`5?j(mq<;=}9I`zn_*lCXA%v6*Y`(XdCzFgk3K&$-9=}a-pVYFM^q*&RJ zQSLBHV;=%b2f95=u&Ok1u?u&_rVc|}%e{vdUy;$B-%e9=kB>%{TSo%Ndc74fMZ*QP z#~jz(E`3-AtLgEn3FpL9*Ot!P#I1k5wdFbglwx3=D-jGRRAUnys)exy$0n|%-?)b@ zUV66s+Wh?t(4kA)}u=(|Hux9c~|MI5$ica#RMbIGLzPp zbK?ihPzq5BRRi-8`C*!q@{Eoe$B$<(^_qR%wn7l2d2)nS-}Uvif_ZX_r{7n~(}z7G zCC?q~@j#^}DjdvH*cB-BvmiF2jx6hU`$Rj%65J8%tQNwWjWlnx`o76|iyGD9WaHI_ ze{JgI!Ad?TIy06NhLJ`&JfRcJ)4t8#IcLN#NFTS?bP`bg1W$f>uG07_r2M1YM4kKU zigwZ5(`3=fS4JeIY8zl6OR|;tjDffp53I7=M>KcPE>L31KtinOeXu!R??<|hT6MK` zjO757+eBh$vk<%#2c_~4>S>e4m#j^++`F&#-tAUY1u2qRrtfI6{=#(Tm5scHq?YUx7 zf}Y6n(rv}80K`w{i1u#^E11O#Y*pCe_`NpPf;EkG28hs=4{YUmY4Cf*fhWr74W4z6 z>YU@^4x#mBI$)x%Hc=MfWi2*+BICy--v%K++>AF{oXcy3suI35! zV0uOD_T6#RhD@reQtvG?0R|Wh-1c;;AvhI??)A{+>2zPhM7f(|uO z63Q(_yPf1wLm=z?(Lg!cLLqMI`el$?Uf$&Ilr9xx+T>2-jIEW-!;z zImETZAP{0Hf8K{-oOL~`xsPlAxVf(LR1WQUsVjET0RTvUlC^`Qn;ICk zu;A{F-)^cVnVWzq%RFs19HS9(>!gDg+F?X(b)>GzM157kv+fURy<)Aqn*UU))8V>q! zVz_si3szL|jl?y>XH(K$yvByBMgvU5;Nw+u%t%EaQ`rGLP<~kbvzEqMP<}zHC&1G+ z$(%K9yO#W#hWUlIN*|4>%N3dGGWu^%Wofb2d~)$|#955fa}No*nel?pkdJ`)mUj*5 zUMxh)kPMs!8wJWTNYH(-{JbwSU3Fw94;SvL8VW=oF*4MRd_|h#CyyZN)J!@qb#dVW z$l1XNBOQFL`OR1oMOf?X%>T;U2&dN`GOi$|ww{~5i1PfCpT9Kb$XquC7nbQ>eWw$% zT)bcl?)_!AC1P-#@27ZPoTvILA{BOrgYqA~^ifhB%7`{ZhxKFxthkDUwmr|9yuoWCUvXUX6JHFeOjzGW3BZ_q^G%9)j%OQGDkz z$qSE`3Fl}~oWh(azdzh1*u-Kry#ueh2yQypTb;?04tG@&weLfE6eV}C*e|PWL+;)O zhUn<5zf*@I}s8);|&PFepIZ5Wefpeto3oAD3W1>qmm0ePMqovL}1W^_jQ{M+;C zj7AeG)D&UlG_a#1F*8tvoiKR1L2N!q!qCzGE@9`WZ_3linJaAbb|OT0ZGA|99-Hp zqg{MK>O&5(6rX%V&-hY%o3>%9=WcN;uInM9UYWKVXlN_5lgY;LwIQ?MnpV}*0kZWQ;| z-q{3RaYAeJkD7${p}5jIQ+d+WCG@xVZp~x3kW609@*L$w{s`Sa$N$Q4Z&&@L#fG(h zF)YVD?~*(t1z&ZBw-~XOS3Bo;QAoaYZq@&&WqsBS&U+;}6G9!hRx#hhI}n5a7VAQr zM|UFT;v6M#)^+ovNE7(zEfx$mZ!CnlK5a6MxinFW;mnlIF}vBd@=f$^5X|LR|NG$0 zCL;;STAOM_{Q8ES3H`G=Y;V1m8Ba9Bs47}md3yVwcr!vQ z)45Iel|jObdijJW>Mgd2GUZ6}NaxxoD?(Mb*fWWH%#OEJT!$H6$GpyEK4yG%!6D`5 z?^g4)51SR9W-YExmfK47U2f@zY8m=tp)v?smVo4aXwvYySg%yHMWoM~{NPH)1J$wD zoL?%@|By#L)yTc6f7!8#ygbGH>r-!PU=K1X=@2NT>(=CkJhS1hsy*`oe zt`y5I04wMxC~W!;-;|T1nZez{;ap$jk>^TD3#-%OF|02$zk>O@$a_$ z{pvGyC(*^6X$U@6_ynhGR>B5O(`h4b3fu_nhXrL*?G^CO?Q|9#m@BHo=$s6j)$n41qx48AdLgiPs@s_>_wZ7`4g5`FO6U?y2)lI9CfOwhZI zd+2{!XFe-d+0K{s6@6K2vOm}PXSL<8eEFZ{mtR@)KZ-AbA3DRkm@y@8A%2Ltdc@BL zA&RMTy>3+Bg#bP*LN9%axy5|)s38D#Y;W6+ZF8o6=P$xHMvkSQZUPV5GQ=^hJo8v& zXcwvCK3K+tW8jZ5m||>8flyG83G0v1z(S}BQYL@G?e^|jsEURwiV@sdkPdTW9=wmh zA1^I7x4L)_Q_G}KcS^tI^)7%{Kt=P%QM4B^zjaRgsMN(+pfpd6zTjsmo&kyD3tynf zq03E%g%>hpzSZ#1Io$YtKk$Tc7V0IEM{!1l$(9YOZ0AVrIwPhXN01K7T^|gcvA@Oj9alv_gH++XU z0|NnKzHn>-k}wEyDssg9YkS8KligoCde1T+^l&-sLIVNiwNXR&gu-F^Yp6^yEda4z z-+T0zar|d(gvu`OXyfI{_RCtM{y9=Z14~0OQv);Wp9;<>c1fm(88!G6YK?TbH8uZ$ zcGA%x2)kt#26q3bK1NKs>$A@nus6`C!J?_T%>MFYy-V<-}Ad8Bva#zyiW0%`BnHH9dx8xfpD&kTZMDH^5M$QPV<7yu`O#{?nvx@z1?>~^{ioP*n1yAPOmT^cB}z%?KiN`Tg6Ap-^CXgE z8uS82>KI}B!beDRiVX?7!l!hM)s}M7HvFq$cp(T}^-xT*XbMs`;rFnS(2ir$I0iPA z^ErIk5NV7^YP-Dq``7f4SXJARr)7qcDcm*Z6`C8ZI8C&x?3mOhafhmp5>|MFM^3*r zpKm+q&d7_`(Lqy3bCbz|&wPm-N!3htx!g~BSF_5W`e7tOGgUoMJHtGaM%~@=oshh5 zCc`rkU+v=Df&CJdA0H>f%<5W9!d>_+MQ3|d0k*3R{fg~d^ijhsXpis#c)o*71iH${kTjE4hHV-X-St>B84Z|%d(jj0uullL$omoi7{u|F${mIC^ZB5RbM4uE zLaL9OMzxExv!)yh)a+;xCut{X3u@!#@UiB{oYULKaPINWnX};&joBK^E?2U2DYNWM zHbDW3HwC&22;Yai>tsFOZ<#o6&)Yaho!EG`kp*`8?5!=Vw&P}@gNNyUqTZqe^TI_b zWYxy>SXL|D(%pCB>Eb!K>@2^Kh&L?5=5zCtP1_`1gq;VVQ0*W)0>X#(5*5YFsLO|E zt8H?5p{`R_C+B9My-iM5mo|KC^T!Q)-ESsf_3NOT9b6!0*|kUjRA;e*pZ-CH-#t`)=fy>6_Pon*P2w`5obRo%;)c ziTw9D_(#?IJK*oK@fRQq#UFsbiN=2vk-vlfuF!sg;#2+s`ZvAyyY=4%%`aO3fc8b$ p{)fEz-Td#Q^Y7-pH2-G)7X>NFLcMtK&paR!!006i&>4Q-{Xc(5v(Eqk literal 0 HcmV?d00001 diff --git a/distr/Примеры работ.xlsx b/distr/Примеры работ.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f39c0922522cd31650b8ba8dba3319629cfbca3d GIT binary patch literal 21060 zcmeEuWmsInnkJqQ++BmayE~1$yE_Dj;1Jy13GOa|;O_2jL4r$g*(S-|dw1r}KF{vo znf}pTr%u)9?^oxPw7e8J1S$v=$a@eF5F!ww2r({4P!Ny^NDvSdkoRC(!gjV!Cbmv` z%I@|ijyiO1Hr9l>5MUHJAYj1u|MU58Y=K_oA=_>S#5T2`{37kDp?<FZzz6!wShn$%Sl3YUB<#=kX!;V~fOnN0b&DEVVK{ zp!@}(ZpJ(grq8h4ueI^G>+56!_&RBKXz-qZVfOk84kG`5VD*`5y#^DA)ovgZVSrfG z`($G6NKg0n{XZD}Zw$9A|pC0-Vmpf;m+jJjV?-#~<>(ML|%IJyN&cu32Y2>5W|SX6j`x^HGpNU>H5wN+S3hUjAz zvgBu4!=Tt3gcWYc8u|wIDY>p6zxYMm`?#y_Au&P)Mm<-ay)iL=v=vo%YCslEP zvSZ1R*AIJ|ubDw|MsaJ4^i-palMN06viS}K1OaG0 zH*0!VyH8ezc6L^8175kxgxv}oYCFQ>YmR+z7OFznlT?WIY*HkY)%VV^xNtw;q=S$U z5=#;^Zi)}(ZML1hc&@8n0>KReeg#7U-MxB3<&@8cY}oB20zK1))FmR~r?(nUp`eZS!G%<})LLb5qY} zQDP0rfmRUE>!(SE)5KnXM@PEdGB_4f#3?YU-aTsr85Y5EEnCS%H%J58lfC&KQ)1isl8OTXx9&vc04HtJ^rThpyBDq5DfjK9>?S6Eg7}g<+T&-_On%`hztH zH`1`r^3@RKQQ?_vwGTL)*&o1X<*dpto92!#W$vZ!)$ZG$@;>MBL+J1TP|>gyoCcX8 znY6$EYK|+b4rYAkhlBE<(*+UK0_N^lHW@ehk=Y%fY>i5Mp|B|vFm->uxt%_=prnsH zt(}UJ=J<7&#ZWQyFiB*{oA>EmY@GaeTfZ~bj)&(R4iK3wRv{jhZr|JZO=yxG&St+^ zUyxkqA6Wv&CwU_@s99e3-FH) z;)VK-%B{=^nq#(kXOwEKY1nQ)ps!82`7K13JVvMW-zajIPc%7-VO+`*c$m}BtD|28 zMN6-M7TLN6hY!1T5u*ikdMpOX{cIjc(CO=3v~~VP0*&_ltC=wr^D?CP)%6s7N6sGm zmx0+acz&yJedkKBsZ#dZQuJXx!6u(7ZwA$kfCwLY{&L+Oi%JB2JRcbyHxF?K0ffnO9h0Uc7EoeVuq!Ba z>Eda4TXC6nlt2}X#YpBzapHE}dr(9AX~K%zzskRMb$t7^xmh-3{@LEz<^+UzZ4Hl5 zSZ8BW<>6>~@$jqV6RPF9IOWiXIP({$k}L_8U-CAvafaXT6yDuxqeMq(7OtFdnlA8u z8vTmHk*8{g8UaOHq2Pt%@j8$xkJh%JU6R3kw8}0S;p@y1ejQ{47>g!LKe-}A3*?nc5$RHpgr63@fz>xSm3OJgZ zm^eAo|Ndco8xArO)@+vTs?whf9rrA1>QQ#uSA z2}bu*oufQJgpEr}Rk21i^l=>uX=G4!i@vw031MeXPXw7qNpYmxDfXC^vt!kJn-qTp zK0o=<2aPO*2eN4u{TvCcowgvyM?WaKdL75$0@U<}Vjk;+(u2+3z!1-Se_1;=T$kJ> z{pD1#fa;la@|O}HuJE0gYwpYloosC?|FQQN()w_xK5MVucNgc(y(&HEOq3^gYZQ`k1}q^@g0l!aF&^z8r1n>ep+ifM!X`Mo(^szGP~r+lq#T z{;UYcC>zrP(hp$?`0w&8b`dHfneRsp^0Fg_G84ABj2eynF}H%xU_9Z6UFNeggA&;1 zpJ7=q9E4fRe66djjs@y-jc++vYWae@GXz3?Eije3nR@KDkaZMWV)`Yvrd`G7HnqR* z;wjU~P=H1{fU^kzV&~G>BGAJ?f2lR~S)9{1k%f#I60|z-^s`yuIhdQ=Q?J(@X9XQE zr58ko?gSjGCU`+-{p5CKhgM|>_OFm~BxNVaq12o#%C9)*TonqHk`;F45WlyD;_6ue z3p)Mcg+m!nngsV6x_PtQGc(?J+P2lKQQ)Lsu)4%#ctj_V?yi+&U7>J7ADI~cQ$Uas z7jlEvgyR?_>N}hgUm0R|CQO!MA7aUeCAbcDL-0>Fjc^9(R{cFDrH@dt*K~BRxeMFBcop(Q?`N z9XuNw$1l_H>}MNZEuSA3Mh0%#2h!R1U(cNyy?r`x*V~?7Ue;FRcH$A9<5%v6E(XZ$ zCUW>=Cd^;?FMsSjrYqU6xcIK}FAeyt9sWp%u&MHE{|r0n>3f<@axg!ir^|G`z@P2& zx}QAI!SC(!w1%-$1arQ{^zgFxv>y$*h?BbBgF0!#0@5(!A+ir0eRMY*LYIehV2gLq zT0-Vam*? z@;TlmtcEi)FSRi)lV(?KJ43lJ;N?DJa?$;^)dfrKG9l>PIeiD6AZkS7u4T+29H?57 z=maUX4XKvKdm}c&xa^q}pG@{5gLR(vq4ap%$dS{OJB#xzj-o(Dn<%Z%970I_^_;dB zTOiK*$yv>x`&2Iz!40I-KOz%EDb(0plz#5BY&T4?jk3EeB*`#z%-HT>lu2b}+t|euzVk?ZlaTw1;F!Zm z?I#SbnCvemZ@k4s+4jL!FT;NvaY{-T!o^$MzQ2_+I&hqz8UeI_BIJh~!EL&;=Q-ak zGWbnF9$0Xn(;4jeG82q-dPkPY=VGP4XWk!dl(QRr$dFuhXCFw+4;RcSd$ILi)a~KC zR88xZi+;nObMuajo*;dOGmW!6pF#YR+95^C;4{ZKrDutk$_K|{O6hOLzoa(q$R;SY zrhtuR->sr>J_K_nU2M4nD_sN&8uJ0xS|dL10OPK#Ti)H1=_ndF$5+ibKSWMlz@m zCNW6ICUo;%+8?$MHZ&;HCMK^Pg(wf2ko1^2j0-xhHagivDAB_xA<;{$ZQvCRu^`av zCebVRPXk^HL(0cv(&HW7%V;$g!35+Rti&u-QWJuzxlz09VZOZg^^IO6$2&nEQ`Cp~ zbc<7?YilQpK`KN-e`VS1e@gJ$))Z4(=TpC3davP_t$?H%t{C?i!6Y9Rx5uacZW+_W zBwGOfcZD>fSo+ySZprCxz zcQF4gbfh^cp!~f}0B+D%OcRzLCjp6HBV&NdjG5B{pdTZI6vEzg^eFU^6zif8oKDA3 zjbM|tZgY>+oL=q)e9Bg!1thWXT`fXa<| zi6vUl0whnFe@ajS(jMJN&Akn+PMHDHRtj&N)qtE=-@!=XEY$Atj{{T+e{1*rhc1=$8#CRHX?)3f(+PwYrvU|p zktkX~QwM6Ms{gH?u8)^T)6->L5 z-F&B{b#g4A`GH=t|Daa-m$MR(GnfSQV+Pe<*_8kCE&7M_Dt{F$sr@GjO5t_M#ep{C zzqfS$5?TF6+yBoBK#WYT^QkWKBMFKC)nZYzAvR&^a`g%7@k|>CiKnwIH{_!eJ;;!5 z=89|=-x`cSZJOE&sG#Dpkwfg2j~Y&HcTpvYIY( zwAyAYQR-~FIBKe7Q3&ii%!gdz7~Z`%_1@nyGhHgqEF66eMnrPy9rvn9TA#MSX zV{Wy(h-AY!oadUg)<~)IY1BJzfrPkK@(<}%3W_%liI*%}DsMzXfKei1aK#D?Nd2Dl zNGlCnUE1MnA|OhC*ADYlDrV`84D%_xz$yS1|8|cx&(xaZB3Fu1%yqU^Sp0kf>P?I-4 zoPbau4TGzYILk~Nm-(f}B%mgERqL%lrm79&Ll7v`zo~Q8u-pQzcztFv$JJ!+PeI!J z=9|3yW(2l{rEgxA|AD82PPts$9VJ1@5!TlKwAL`;{io<9Vp|TCmp&1CgDHy@c*T68pdBLsyAOX_xFI)3WFY3 zxqnN;f2km7EWJtpe`RsJ^Vavj>ftDP$zyCn@JIIG@?+tK@v;9xq~C&&O>wyblhYr0 zxrX0@SZ!(G|JLKT=>HGwe{%@+ilgK$PR*}!d;{*bEf99Vg7lH~pF;Vb$)CdU+|pa% zK@w_=jr=JrmDNeskN?gJ$$txKW^bm)@HJ+o|Lp@=l^G9Bh=%6+2kU)hbwFG)f#&CK|BgqHl45s_lQ#gA6o2~-x-SXlnH845 zJ9!ZN?ew~D@*5;2laJ~^V7{gNBFju*G|5aaG#`S6KmI$~frCkjrdgh*S^PCHOddyh@W(!6NkFi8{SlE&HSTe?eO&CX5!?+e^!`u+0m7U_^SAPpRR#G~ zf0ZV={TFWfw1?lLMUJc+s(?&-0k*m-N7nz)Lz>3xHun0DJ$c^j`NwFxdnyh8%z;24H8e;?3XwWGU*<{}A#Jh|S-(fF`~Hy6QLSKd$;?2(QfF z;FQfVO+!`JTDf@sABJw{k^=ha5$JH~ z^4+;+AlJXW{6Y(=#{Ulr|KbhWlE0J)56kNQVQ5X@1BI2|Z^Zl*)?oRs$u{5_De}D?}*y{E0ba(f3v30-o{O4u+_Zv4$q~M2c0a(#0rd<$K zB&33ww(v?1|G|7_!OTDwVmA*h1D97Xx7XXSRI&O|XK1-J-fnN#FZvl$BXkdTa)_tf zbX8(O46!y&fehhp0k#KCYoSjSf(k=qFN%RM5R8RC4`^8Z!3U#|=h=o@p-=W|$quNmDg0z4F{qi)R-gZpxI zs@ZPKlT3L*G(<$)le>o3FKhN6=h}3^FcF{&WCy2HEH@w1Xa(ihlF$;q#YvGCcgZ!J zI~Vwxj!U3=qeAfN$?L|YG00aL4D#&57RFUTBouz3pePo6_86jWD}uhk&dB-ctB5@}g$Yy{J~b*XS#*e9b0laN8LcRXvVl&;~wQCh#k6X+?LGt-q7M0;`9cGJm!&KR@o8fdX$c(h^}0O z?Kt`!uDgVnv-7TLFTh3czjIpkX$e9&sUt}6@h@MpKVSf>bK1+`Y8V%kd*%Fg+c$^jth=zj|?HMi&JeTdm($H*XLOAo@fw@>#p2f4@f9 zH}+~j>-K*9+_8aQH!@HbZe^AI(r1?5+e(40q8z5H$0cQ3`VBq_UAvnknl^KnR?ovp zcBmxTR^OtF)amlIMXT=m09NWd=sfyoA?hl;`Ep*aon>xyt#jyM+uP44b|ryN=X8*6 zUK<11U&G#0)ye^SrF3opP}^y+5#!ZtbhO{Dm2_&;aM1BO2lSE&HV9<(v28AO$km_>JpzPFKt4YQ)5ps=d2V>G~K zQeP$9z@n%~Hxw6}d^jjM|6EZ#I$4^f&BmypS*YsZY>n*Jj%eE#oM}TpGX|<@mk>9) zz(u;$8z$b>2EMm0p$uh5OO>8N5!45-|0K46fr(oKt~lt_|1&adSqwDDE+Kw&n~Qv@ z*HR4&Is-bJk}5}>&}o)!7-GtH{J_vKRdM+XyB~|_k5no$)#>3IcN7UFWyHkhF{T1( zoOOt4R5TIE7}bzn(CH>lFW`kqd!008Pplp*dOW*q&rWASID9@`(ZWJx$K&Q^ zLCp1QSYk3YCp}k45yI&#VXK6hh+Py?p}S&8b|eA%+xPoj9qIB+7C<}<*#a4AVo_+p(Nd5K;6am@{25h2`D&4rJ*eASM z(Dgl^5$VZv0RU=fvf0Ao7;3-eN`)3%^&p$e{@Q-=_3hqaO#=mnuWX`0`4Zr+c`S?i z{x)GBN+GPjiyc;X1+Ji?DN6$DeM|IM?c>=|CzVsxXwb7;ytzop+lCUMMSpNol6lW2 zmY&M!%P0sYLRb}D*RDg%zjdp20c@P9>Da`xgPE%eq|Q2n{?b&GE?zZ*P?N*!>-{iD z>D9pAyi!*it1c|g0k}aQW=snacX}L#$aR3DZoSj*3yu`}5Sj~}1q>DO z?mD$|Tp3efNRp z^9mnU1q@NV*@FXM)y!n@i=m^8j!c(-QLu65_PFEsE{fkzGqscw(sI9KXaEzV)T)D$ zGSoFHOq0xNiWI}r6TUT4moS~Vg@6x|_oSrv%?!F?mWBXJq!6?6{FtO{J+PgFm8FB^ zeGC%}v;4xO#kZB%|Gc2P)6Wai3Izhvh5fc8@%OTvlevkF3H|Ty-z##*8f&&VqNwfS z+jy#;XAgF+Hsa1yo;K{0`4!kr#mPpV$C;)s3(HvK4W$4Tk5C99)LuAb`yNOz;)am) zYrIvn_ox>if1zz+8vQ9Ec70iUYBheTnB!%Y%lS!sH=Bi zr*uHFEzNRmQA=CD6EwLnabxzbuBeW@F2D?7^PckQRec!VB}~X)CRGl_3S+7TP6uJT zjjnyfCY-o`OL&cLkbt|xn=yKRPbeXqux!wIcS75ij$x5XB5l#0M%o}g>lG!+JGYi>uYp<@qP2ez)i;`8{2 z_L+;W@V9cS)wyKBF8A+ZlYbQ|Hf>Sv7AZvz$+CtZhIZ94z1a6aSfdt$zy<9hCCafx zGm614CXJzVUmSWT(maV;P{{ER5&cmekTpJY^$X7ii`*iSwgsxE8>0#kM=78(o6{wH z$P~hQ3DXnjlSKH+8i8tIK(5}enilAVenf6OdUW%cGp9;O58vVAaJT5;;AUU{x@-Qr zpBIb}ed8nTY~hbXfnDP7vrBoho`YGJMyg3mJYI^sZO8gd?ZI;jU@d+5^(za6Y?4ek_;GR&Pq!I#-~teZYlKG}f7SkL*shd;;+T-a%k0bgNyo8vS%8bd&77)KW2taC?M= zvGeoF-fp8${hyd2)A`i(_$*gz8>{?TPmTJLH{<=hngQX2_-etV~t00)&S4k(l zo(v6IeY^WdTA!6y&lf%mx@>+cGZ8r4tcvv?ntVK0irx|wYkNvz?5Wyg%oJ(?@GQeN z!K>kPO&&WS`1?4}aO{AXgqpY%9|5;&yc|ZF`|wYBT!xNwA59~TptwPoXk4f6Qf!;E zQv$Uv2-l|2!wqlK;-H0jtmwauxGZ{|qn@bL>MSd^t=>lMo_ZMg#&}_UOc;0iI1KfX zDqJjNm>-Ks+=Whc7FJa`=s~m?T|v7AOj=6}a$X6&y!&V4Q9e0j^^g!Mf=I@+aDb?j zsQozWG&yH{DHce0xG0oyY$ddo9Bvk-PMW1zNWE!boNWsd02|8OcYmn_zaqn|+)6`& z^(v4Wy^e@EPtgmn20i~%1de$=6J%t0TgyqJ4u||vp2He`wLDjG<0<$w|`+mGt~&JB9{;-iiWZCgZ-nwZTbY|pCXoyt+bY!jgLo5~3WVrK(y4csjUsJhA)c#s>JfXX{gW9AUDPJs^$r8UNLflNi}v~w zs?>6(jE9Pmb6;eH4H99dr*4T7^+K9%rK+vdC)qNMvANGxsaEdZ1#=enwhi;mc3R(& zk6DJ>cN)q#s}3GH2dLj)l{IMhQ6^%`7AV+oM?PMez((*CL^soSwoO<5`ZI?9$1S}v z`UDO95Fj9xz>yB_&tT{1AqE{X~<&a{_O63Vh$WizZ66ez%&ba;HMH!RX zJYFm$8jsLvVgOAyN~~gg*yKd`H+B)#uMBdGC>bK=;vcRpFP~j^gibJLqM*22%m43SgX-1kzF1?BN8TL{PV;0GVzGH zP*ykG$z;D|88l0F;Siklz~ktRVpj1`6KQkavX?p2ID}eIVhF7o(ob-CnXUs~j9Z@h z?9QHF#Y5lj^w$iakTI6x9f(t6lE4-~9mTpGWJ{4?(&D=xVpp}!M53DUv$is7bt*bX z^^7z+bs4C52NsyLdP)Rj`lS%H=i{RK-PoujYarF7uvWfzE?5WXGks|*4cTRMDsO39 zwDGlqH&BT+>2G83AiWs><=;b&>OZBNr#{w#k8cS#qABJM0K|!z%Qsg9sBm8(YQNS> zhtP=r(sin=>|wxd3D~m7eDGShZ8Ji`BosJT97MfTsT<*Cs6>|Ok1+ml9Ou+9{|d0K zPZXjIIUM3Ba3kd~^)O>&Zeb>x5CnwBXbJ-?iMO*?4@iHa!DHK1V^X|>dp8KT9ni1V z&ugb;Ln5Dq*l*k5&|&Pk?nF$%9By~Tp=Q^4A9L^A$|iH}u~yDe%9ZxLvJv2_cJfQo zqk?IL-kzuQ*&4=<&ALb_Q`S($&hkcT#b@jwY(F2H32UdYOioY~B@-Ft4v-IB%fua2 zcm<*fBgyYeiygP_dO#_1q`N)lpU|&+lA&}CrUdt#EV!u#?xf(9xzdIYVUO1^X`Oci z$@VMONvPgwYT@G3X9yj_-Mq&4@+31kk5V~a;iI=Sk%de_n)OQO-m0gkFltg855(8!13lT% z1Oz@lcSjdHJw>ue^{a|dw@EF)_k2ig!otMzcHAaWhVrB&8x0$}L;$})ioa(EUw(9g zvD?V3;VYw%&EvbcX&az-qaQ-op-q%UifuaP*l}E|JF0uOn^)7)GaHvz&vz}czH(&s z8!$w#lzGucZLz1PO0T9`q?hD?Q4KXgYTIvaECaB=>e&@8Y(0_PcnF(u9p8H)Uw7+s zok6}>b7c>F-Qld;;EJZ!JFhof_s>~%c~Rt~}ScIU4>a32qpUcq;s_S+~CM&E6JrQ~(J`v`eP8gXg*j>Y>7 z(DiHb8R6q`KZ?uaB-=gCzk96aD=_oN1ZEj=ZV(XEznR9|;FF25lG7&(TeIH@Cqqle zPI&>%t7`Vuo>i^{*+@tfnaCa=xnNi+w@@Wp#|&G(t1u!ojlG&EMu-8EVz7a?F*FXK zl7BI<*|jJ(OwVykf1T`9(J=9xRyWZ25HmQs8tr(qub3NV^v%$CKe*niuzzvWxLKtCJymZj6w*p)J0IoGpBh;m+8r&npN>V;$M!GN?^|E^ zF&euG^*H$XxE;JRHU_L(?jt8*z8jF^1`0011YA_7Y>e0i3wtMQz&!6J{hEZMudNQ0 zg1@vA=5HO^&j?TIiMz6(Z~aucM|CGu&e+pU<{uthF^g=vOti zE{R&@UQ_jRy3u{bXMDMho|bn8441X%WVn0m`Yqgzm;?6I1|Q4G5!Cy`_M&vgJ{=gW zdA7Lt{;(#W(D*RXW4LI~cV-{eXKB8s>=cQH`DAsE?zE{djRg9AL;k5ZnM+_^^W!l_fMvaQtdNV z)q6S|v(LLLiRZI5y)Xl9x|?uL`?SZEPQ>0$AwH)D(QVZPP-n*9HU%66_cAe%4-LWqPm3f`xbEtPkx@ zal64|@LVf0?XK}8_L(+J?liPB4ynV3N(__VD3w=@IL&@ABn~wK`!#MsCqQ2Xz@JrYMOYHoKlzTWf>_3E=RN z(8g6N<$h#CWtXR!fj*wag$ryj+r8b=JvYVd*qa}?U(XFt4tI;$l0c&T)T+}OjD#SL z9Ao3a&Twe(nds{cX$I|j!ZG+z*Zr})AG2}5vH?6%$5o)&xS5OYv)ec;`CteMBeGuC z$GwkP^b`Q%!kLiD;Lad}l;I-i=%y{NRS#?-d_War!H3X;&@crKe0dGOgkBc4AoJ`Z zrEZIiVzuHEdj+?jBVb0yu}wdaBF=0u+`h{OQg2YXo)J#l?cPRBG)(k-U^<%F#mu76 zZAv7x)RK*xDI)OnjT60g#<)7C*c+>bmV+dhaEY(gQ4W>{7>?XVz6u5Ua=G`45pBu z?Pw!uv-};yPe?%0L+N5w7!{7nQ(~xIyP9Ju4o;SWjstc{C*CJQPN|q~X`n<5KHFDm zZ}~mir_{Zi&%k#Hm}6lt=+y*}2gqS-h4;N%i%xv!m8x(7xc7U?r4hSadEKD$&IP4$ z`4XY0fm}rrt&~qhm%wOVFVl6@-l|9B{vLsN9uf2#r=kp!+JsFiTdF*Uh!7xY`dXE+ zXAKi0kj8q|+zAx4Um?f-ickHA)H&f!19M;+HnGYT8*CPt2qt%2>rsdWUq8>2y{RTyO1ZqO*?Q%Fm z2}KPyuxMp-N^Dq)1B}69(w02p9%Q$qZqM)n-sVv@0&#c0jYBS1SA$J)M!grEDCy9m zx*NkSiB-T{Y<5bKOD1`{x{)bq#ATd)yYs- z*o+zP+)*izNh_BvwesQ6Iuemx%v*wi0#LxhssG%K?9qy8*GQQoqK;-X;aUY9sKON&Wg(vd$#^2 zv}@qpW0@uwO1vl+8t_rT36=kAu)32#UMPNAn~HdORMqZ=1pC!8r1z$i7BrjSCx988}Z4Es1x*0J&!V z!4ka_3l!~F2?hv$IzEI)5<_H6JOx_`nG!S>q=3*QMua0m3Wcqy90{- zxmi+#FG9eJB}bf1iB-NEDU^X|?`@Qdfhl8(BF{qC1-4U8+UR@PS$_X|g!t7ejJXv% z{{yC8Udj0=nbk1K$!1;1{ch%@uLFVn1wOtTKekTJ_<7>D{aV*TdR!<%u#r1_&%%zf zQWyBW)JX+Z!TKdidFdDrF~?MIrI;o#X6ke||9T}9&^n3&euhTb(taJ$!V!mKM;G57H9DkMDnaZv}P6AC3`=*LSkc3TlR{lvt zCM)S^>?0Y4y;x}KlW(r`6NNB!&W&}Sbu-xZPNtICbOFpy0i^P4rE`hkn4yQ=3#6fh zvb9ascC?<%~?g30k=092*oAcGs5$wJ_e$}k}x$FzFgE#wQ=~2+Hr~^iQ1({#* z6A6CF4NGpECW=-W6&>FC0XlLdaKCj}Lx>OC?O7OC`7>MJMW0b0iAnI=RoB`1FIuwp@C+&TNxu2%nPgj3>+Jcsntqw9RN~X6 zsOz8e{gPJS$2f{OIwE28NR)O>-XOM;2Y;DHd0ZcEPf2U`XzNLSve<)RpMrJg#c1_6 zB79mR8s%>GZ+L&m?p0Tqfn=>sQ`OZNhCrJ(B@_ce(0x(cp*mE-&?(&7RTNja(T!5_ za8})(Qz%6g@q|qlQLZ>=b>85QA&>l&uX_hyVd5_;(+^Jw-IR*l6 zlgEz`UPwZPoMDNT)3_(j5a5T!NMI|-@KKTpE@XwZOwz_C-Gz9O7WP!ae< zXa%Eka>Iw-7MyXMc&Nxu2a#|ww3f>YB4q%6=l;g1ZboWSe>voO^=H9>9-nJ{jvdvT zsTDhJ(pBxiWKAfV#MYMlugEgaT<)x-IxdXU=(CJqsje^z%}aL_X|Vb1kx>|5i|^KBIdb3II_)?4Q@+x z3a7D~W-;79o+T)0KZ8yO=$N`#9Px8Bjnkfb$I-P&f7Un{^G3*57JIZQ38{zICBRk4*4lvazv3xD zYzX#J-1s#--OlqXpkUHkGNBsX7JP33=ZLANMC{*{F*ghcU7_-HqkGbr-rMazdJ>$X zG#D~J6G4y9>}#-OmixjK1`$i3GGefnsb=qmRA{y#hooIkSyoV5V0^+Em!C!~_)?)M zPfRi`Y7+qE121l`NZ?4NRL>Q_(&E;sl>eao2;gint?nQ1{oWEsS5753=L0dIMxM9CYAF1}0ng$f3lnGv%E0xF|@iK*j4$`E|g)!K$b|#c& zQ6OH^i)C=#>+EXgEE8A0A@)P^F$GVh;cUW3xvB4zLMhK65V|B{p~7MJNb7nBKdb3k zWli8hIm3xEUk(6?VcU&p#gKYs&IBoTi|GP`gqz_KsI|xWp-UCY362dU&8ayd`mvB;5W@#F>qZq%z9T*6Adkm;`7-i_Wp{Y}QD6 zq%jA1hH#=CClx7s_;MZ5O}=EJX|ZVN>*cz*4Oz{*dy?eFeTbY!o#U6J+t=sFz6t~P zAcyyr=o;o^{{=maTw45D{#rxxu&0_qw1p3}WPu{2KvzcbO4i10FPIW3jBWXQzNTXA z?6uMcPosFxr7 zDevi~spgF|efRQd8mKU^(+T(Wdwbd8z1=fOxlK7$$A2iWwcv@8$u20MBipT*zJAxh z?8mR8C=Prd7P5A}$b0tHUErvbk}d+}Qw$0uDCc_>Ig~n%icYX`h)3d%#1g^K!kY-? zLFY#l<$d3es4bG;;id76DiN1LNYLhAh;rN%#@dmyNWKHO(AZFWr*q?GqpI;TkQ^!4 z8c2~8xdj7ee8;6bX^CsFdW3Ib=IE4X9HD|UNHu*!lTf2ll0QvD;ND`{GV_NA2(_5- z3U^USs8rjf_4n!Wwd)3>m=ns8BL~BLgSRwLH*4y&qv?708CuR$KFm=iy zP={>6R1oVpWMSyKwY z^JhzKp@Ntp29ZRFr+puK)jwPe@Is8oL>%?CW31(0*sE&4=Vf}Y%8;}`8+kIX)C$r_ zbPlZm%htKJTRZHHom8Bln6BJo-R4`)6qe6rh8WCB+^>S(Gtq$WKoa56PU)L#B0R?P zq_n@UpTT9Zh<`E3k?7$wD8>aVm6Wm8t#??34tt%R1pZD)bMrKXYO*kd!ArzSEk^56V1ns<)$z2`S{w-V!5`gd%G3~zon&uUHhYp(E}xN zY!I43-1@`C=q&k(#?zN$&DxBI{0K$3{Rj!sXT9RP>snu>C#T_QSW=aDkK1PoDaErx z{&9lO818lR@F9k2WE6tGa8^@nGE;Vb3iF?j?aax&Tg27*nA!TH=ZN2hQAWzq^k>e3 zRz_`x+P(%@*o9dKRR}*=eE5p?3&_WKI(_p?H4l_m&7kB$$4+E7IVSO8>DnA3 z;`Ot7QBW6Q_O@MUaodfN89zmoIN3>}k4&o}asCv(Ln@Fy1to*ht_Eba!ii*Y3}TU{ z?1dw4s<;=${fZ80)B@V}Ts&yZ4!DXKNXv`{fwVNFhV}x@X)j%r2r5ymFGeekPb1nlHl7p1WIb|XimRnYtl zh%C)tC&U{-Fd%>Vw>#*#ZJ4CGfHP=9!1e2oe`eC&&KmzcH~Q!B@jp+G{yusf7~K`t z&44O;3;rVP<{3X91S_n>PW(+}AKdU^8EPdt<`(tYvkup!^T!YSi63m~k31zfrtq;e zvn^mjyG9u1)#skev>k#q96wi4p=o(y3})!s)4*kA0igpi>S!=EK?)?#m_6RTOEpo@ zB{6(^OOm1P3`6(fIFse2mNu7q@9ODg8_sBUz0?A@coj8Xj-$K?cx>}J#w9K%0wp

fE`1FJk6drEti0eM3T;M5u5O_J-CW`?+Oewwpyukpl?(De7O)3SB08CT zQZjLJdYet8{}0!UbcPnTAN1`F?2YVADGVh{B#bEx2H(|6fJV@aTDxLerUY!TGcYmP zGmUPuZAlpD8*iG0=o^AfBT0`6OviQwk|Rz%5NJOKE_q)NBv>YzuOT$u9h+xeY>~h+~oeqsxL>v8< zm$n^t@s14=H^=}1LqA3T%NF*58aMGWA>;;8nRp^QNEhR-ye|uOyzeGK6{yMq|2u4x z2@PXYjb_>OZ;#epS`PcV2i9g86Z>7QGrjir(Cs)ny6h^?((~W9eWyk2htU|6N@v@b z=N^{4EA@_tz1?ocycb;`6E}I~+9onAm_L0_4S9KQY|oou>4%@O@poYnT1Rpf_MgA10IK6N+@vlSR;Hggh-9-ESQI z4KiQmw1+<48~7gw|9QiV61SQ65HLoSfp-!AHAW5W?f)l4fwB4blM&x#JIjFhn%tm!P&avWX>O~QH~m?_XJEBCYRM?+ulR8O$a|nA8;Aj^jF1r?JhL2-?)82C?wav8Klab=7~c z^O*jxl~kk@YZlE|WO&}?UBkuSEY_?Sd2-dJl+FpQ3u^pw%*}7_@r}KnU&1Uh3WS0< zSGRoYxO!rjv-I<&pQp92PYkbLv;C{;VvQG*axJd#C4ZgLAI-@2`_Qok%m)wIJ#zXf zb7yvr+M563g{Lok{FnGg3^?9aD|uD^(Dx6@cdp%5%;}fix8NOD=|ioU>+@gd?%=b3 z?f;N1KcPGE`+}ooSscH`?_CjDdO=#}%SG*__jhhCO7v@K-`)F0{br4-&XOHR>XK`l z<~}mYxi`Zn+(}RVai8&tfqi>380&TzIYE|$|Mc2DdkDULR}#VtE9*R`eN8gw~hF5UuF*o#-Z@x9kum7`vl~0oHaNx`F5oC4_;d9$*8} znn_rjP3VTAwn-31GBC({GB9AYP|&rbRu{Vno* z4u)0^+6t~VhW47YE|wO=pP?ZsvH+0a`~UazKiC7s3PVzm3~0@%mnf-P$m+*B;kv6n zZVDL35N4d^$cr^QNYAW~Eco@11fFTs%+`SJB#iTTHP}j3_yq_&Ubz`616LgBr$(qx z7(5TSLLuL|W@{YFd_c~^MX|EJ9+!lE!#=0~%Ixzc*{fZA{6NEyl`8{mx$F?{aSf4N z95a;D=6TQPw=R&*H>+;WZa(h2jOc>64)<1sblP;2caN zrlL0JCJWs9&Llp(Vu%7;Ly3=g%fGF%6riZ^m`9HLoGLD?6K>CR&ocl zY24o1CJlig4*rm@wm#ER?y%fl8b#1X0vb)ABE-uGPk~@1sVFnr7;19eDEIJ8b+VuCdMfc_CD&HcyBLZ0f2`GD1gl0QudB& zsR9?AvhCoELKwi?oxdA(bV-F6waM{CRxXUr4ejmu~+X5UE9Iy2`I9>ibkqF8T zH`Sm302?>}02S;#7YjOPYddp2Yiskzey><@$ZDP)t(oq-v&;ubZpxR2vlRio!WOe8 z-&=?+K5mDE2${X3a+3L38C7v4lf_5Z^pmL3`m11{_>b#YOXc$5&mz~CLxXJV zqhXG!>}(RIw8G)N5F#j;Uk2;yLPvX0nVdriEem>0NMOQ7X~ws^w)dimTzoQgQx@hGAcWLB%B(mmW(U)5i^gY-e3AWP6>^Rs$(S|oWt zeAbwDAEa8{yV7<1{dctdE5mpSbc4QHO2R%ySr1dzPVcI!@te z7}#NvCSIaV92`1KveUU3*`cX~K)K|4p2waP5#q+(f9DC{DIe7P+CgE8H?(3`GON4J zoi(wa!&ibwG+MCS!{duQe^|lV^)WqkA7ht{R1&$NjIn0j&roUG=R~JQxLyP2Ggn=j zE%kW-etlNTtd_XxNplC>WtuTwl_(rOcWn``_qD}sxR8!p@M_Ej09UB0fr2=^S2*nvQuA&*Xxg*4u4^M0hBCTE$7l7U?A(=Y;!_5wzTY++iS+ZL;R;S zjD?HehXyAoFE|zP0nZ@7Y51#4`_E+jt9ye0k3_-u{?Gmt#}1fv(jy691m63PHrq0K z$^_XOjmjlirh56<#IsB2!Kr($ADPR&?Q4y;s$>vrzj*$kVcy%h$|KCu~xOVfr9UlM?$ASRhg75ej zl-rva8amk1J^e5|VtQw~rZriQW6%-QIxm_%`ize=$Jr>TEt*;A00A3=AZTNzSCRgu zu`~Hgj-P|YO6DCtCB(|CI>f!2(d%>+elUoUxwnC=jR<7zg%c5L0$)(i4+MoU5ac|&ye`@B{WQw3V zL}#2D{czp&!)WoNlVd66p;^uK_Qp^)Xk${6;zviu*wdxznBx4#b7 zpM2)=y%3&ljF)g!{@6q}Xo$^PPhHHTQIwq+78ci5mVqQXei68YrhfTEs8p5GrQk6IF96aYo9GkgemA%lhmT-eD8^N zdadKd!Mi*ts6Mo^k~pw23Aa^MkBF!3*nBU`O;0=Syw~<~)$U4GbKzzcF4*x#pTTjc z3N-X%?WzGZfaZmbUwz=DlZ2}~Ki&7>1W4R0)Cl!a>zi+JqPim1JSh>_# znu;@gay4*fQ7I z&l5AEi8+tbg6d{~%!}2xb?QaIYN_B`r^eIjr@&Qnm}=I{d^NTrdcDl9Pd9osDcVRW z$#)iR4y=WoH!r1Hj#@6#GkHC)ou!wqdX5^I?lSHUm${a2Ezg?T&ReX#tL`jr@(*6r zYFoA}+`Havte!7hc{|^f&6n+2FWy_-bP)^PO&{b#C_G?1+&bL2wobi(UFPQTP?Dwy zeYwPyoRp$?%~2eA_&gq6N>8$t?Rml`UjRoV*@oBn;bEhBu-?*QvdhMY{k+>C`D5hZ z>S;1dCu392PSv+C1t>*4JzDbhv+3gpXj?yle8Uwu03@_lVhA|^M~_xrL0NRYU@tM< zQ_Y5f569o(9mEaMW>c>LKoWK|9`ZcZj;x6fpaaN%LAVp`+>X zGy;?``)nIp;h~5tR{gyNK)%D0CR{^bS!}!n$Xa@?+cT_0qw*-J-H{4P^Omz%-1W}m5zeL zCsvRm*XJ&8AxstpcOzPs(q|sigHEJt`>;UtQAT7_*1B%)I-2+|1zoeE1;Gk}FH@}h z3ZPJeC2^d8jxNgvcTHjBtdd}DUGD(ZJxs5CVnr#sen`RINPfe~=A!Q>&6WdvBmb!v z4=3VkpzvrpqWJTyb@bniMV~BJq(gWT{x2yC5P@7^8*&KO)~;{*%(rYkClP5F>fLS7 zXef2cK<_8Rm>KF*8Dn3=I7CgdSy&dht&)m3QpSx@n5#mqkT;X1`t`xN)nRw_lGMmhecy zbfQRZGj$Fg>$R_?*lBpx%6=m@8~&7ofaBh zJ`W_c7o?r?fNz`($N0;m+i3v|KUiR*<&BRWkhq9QrR4z}j<9?^fbSJEJ}pq+gXv%< zTJf1w2oQIia1AUGh+jCun)kHMF;udG^Q1kQ{yVrO16s%$VaEDBE?EZPLyy=GVC#Vt zChP}&lEpY5vM05+(_8&q!?z_LRV*%9KHZ~DBJZ7hRK9KQxN^s8_pb_kxszY9B*aa+ z4eoY2z>Pd)30S`TkzS0;SA81uglBOW(J?111m3^1B6@g&gC8Rwa443<_^3o)f+=n+!OY}|Pk`^zAbS@-@c*EUb_xAUX-Kzx zumVq7QkFY~f)#tzKfS%snM%t?nG5I8(|!R7uiR36M~dTA*s&{hHy2fMFxq!HFWySO zlX|}*qn0cGjWrTfuhBE1j8NxAd1z;`BohBVNyWGYaXzd&N5v|Bg2GuT{|w z?a^Z*>GnJaZB}aq|qF*<(q= zV@z6zx8n@~x4XR9o4xVq&vH06Y)itn-p+q!*CJpmF%<;Be7}={(6$3?8_s|D zs_1X^;T8ZJ{c3vPEu&mhYx8I8p0~FTpIr{J>}#N&ZXOPw9k14YbzBt6mcHT$+NeQ; zV>xTg4W3i`Na$2{QLZFMk0MS&9xouW1~jW0Su{8M3@o@+XuVde3r=y1&wts#KtbA{ zdc`NVUaVquq!#)-EnJp0J{hCde4o|0boaZ#^Kc&m>2pOJ3$H71l^Tv9+DRk^%F1-f6cC zJMu?z@;B12g`>+DW%lDa@>Vx%(0IC*TQU2MjHOkr{BQc;FXBdfGa0*?13PsB?b;Cx znbiuwI*`F?$742AWTT6KWs)!?<)qQS!;26vbU_fPR#+m2-G~Q44&rYqJcS8c0;UyJ z6?MKF2=@N|4nbHcIbYBDArYkakl1aL5W{WQg;Ywt)wQ^FHR7gX3_k!XQE&E(v_tR-Oo}JT~mjPJ{~8q1-0*xP1Re6 zyYMv?Ex8?&V0L90>QSZ>VF`Si6p5xI`aDwD=-fK4^J$2&Vd>43AwgG#Az$T&h+b`V zcVz;@kjybc1`Rovx(MmqqjFyj`KqzJ`k3#Vr6SCWT(mwY75~r$oYIi5tBdF_Q&}T{ zLtxELpvRDzr!?G4*q4r?Zb7V7d2OY?H=_~>_TVGt98LC#6ZIBX`_BL>9ckr3coD2`z}Qs^*9zPWpd2(&&;{G3w5bDU-;QF$>{bpA^iDYbBuqd0 zY=(fxxZq)LPqPWYiy(Ug_ARN&_W+Jh@J#s9Dpx=u)lh%-L3rDwcj#2~TkUOfLVA*v z>ExpF>kb5MP5tFSdlh+cHg^xcMUnC<96x;AruVuOe=DgoDd$Umx52(z&4qu@!W^LJGl^G;U!mBQT3#zfOEbl_P2{f>+wPVS{<`?ilV*B6>0e z^q$03f!lY^zT_r#q{!9h3;3w&qflET1&$MAfCR{lSYB3y%kr-}ocb*e<+l?Wv1~p% zM+a6h38#?0NH*{Z1q#|5Wdc@WBPKkg)iK37`RY>Q88BJ$NF|f%s)4aPPKbpP1 z?`nZ7D4X{7k`aqu z`TeYXrw;a0+g!+<)|jxj@`(pR20h&`85z>q!$pk@4R0~%zJfiA47MlUcyI+C)Q)My zlJWR-sEyG4T}fc8@EIOuVu&`WY*h+`v{{4_YiEk+D!aBUPsX_XYJYU=ztvFUfst)R z`nRCRAb2unYG2fQVE6|7jDEmZJqel;@mNc;a#{*5&t}5OBn-Y0_j2CyygXK)bG6RK zEp|BsKqTWpR_0~Yrs*#`Z#CsU>jeiFh_(4>QiO}$+W0Y}p7l1OMXN^mJO<4PKi_7c z&!8E!f#vzEx?nbWu?Oz{b#LQwjA}$waU(-~f@^HlV##1&#-Q0x1H8LXJ8l3EBb|qV z(i-VNZ-yNN0Fsdo+CYhv7+e$ZK#O)IA+ExQP<_~^gk(f~YO{n+hLuH9;)3z@8C2Hu zt`*?}mxZNOT=jJ*wczQ^Jq$J?KH1>^G-$>csbq1he2jYL%YUixnDzaH&<0)sbb9le z5VNTl=muaL80z{PZ4zdIZ5c5XWKypy8}^>9QdQwAt3J6^!%(ZPzqniRms@uk=_U-7 zvT3QUkh%^ik_0I zO>r}@XwXc<@Cl1c8R;|(mDZ@JGyN!ZU>%cjb{UIg6Ce91Q~G3AUB)W>I8~9B&o=lI zhFS#!#Uh&EK!X`vp#rrl8nKjCf&)#%5c^5s+%v|3&w|BCu>Woh*Z<2tuvr31}Lz>{dPjgmN-YDPxgs!V^IJ z+fUMzPkuUU2D`2HTmNqQ1>PeN*@U>RqE%4}IPOzHkT!M^~#d*KPtlZc)eKLNUQ%wHAvrW|`&Sf#g_tho!$ zIpY7arOgyBs6rgKd+wQ2i=NG#uUs*Pc*P@d>v!$9k|@CkgF$^bgI^C0r9zy&b1o$Q zPO#VCQK|qZu)_@4l@_o?DzA$5q`+9)o6&Am9;(<*waKjX z=;hx{=2at^yA%bmeJZcW^rcAgz-XwCe9+3F1iz(1zzJdu z63Rm#9rrl0ePSsG&FS8cj}LA@C!12~x&|ZcxuS&Lzvca)r08$yC#bsVR`|D!!0{Er zq5%6r(=>fBFtnRShbv;gdXx`V74mPYl7X!-?6OnW$Jzsryr?!?sg&T0z^di(|MUe9 z_jIs|0u%>xpDCWtPUp+sgOPoaEsu%>&mO-|<-|kWHj=|8Qn8(5N~HWov1y8i7pq(k zJC-3oCfqRGv_BN@$r_Fb#b0^)$U13UrRxdj|GB9@pBN#DpHT_EFKJw?JCs21w}j{| z`A~yFUxQ+d*r)g~>`F`1Jt*xJSLsUYrh0^id1Z!yC;k6Vgv1H#Tj4%?5(A!MtTMCr zP^}W$<8P@vfdiR-LUcGsgu$cYNo`MxzehK~mnqi!k0*3d+IFr8KcD#iY4#X7Ts|Bp z5haJ7`0~7ADN3#soQJnX7^igkG2V~e;wX4nuEKzblQdq}dOacryh?m;R>t`i{tDd3 zKF0!26Ay|oYUuJSJPipSr-DzM$7h!?tZRVpLAr~I(PpMM(WGyTdIr=3w} zcVR^3tBT;@{`T_?CrfQqE3F8#lGAv#Z|AE!Cs%E|259FTtjnQgS%jq@%cP=Eryt)v z#LXHxxp|=9gV(9;(C@Y0lug6ogq`ho3|xWNjEhnwXF_mj*GCfR%Gl0Y=&yA^*G689 zbsEKN{{FKY8>f@A8~fMUmx6mZ1Ip6MMH{=ppfk5~u7JSU%`-Ny`WcNNy4r_tcX~Hh z=V9~97A(Hc%Zd& z+OCGFe8-vR4brpnCTPBOyJ@LyS-z*dy>q?%R3@;hZSjEdy!Q5`B?M7KyHKjhBD2zTUGT%%D+L zrlT|7bU2e<6}tm12b0=(xLgdabu4D%N3s)cj<2QKNO-ZUb883advSPUM;;y9)(NT7 zWVDz(G^s9i9tCNgui90qYE^4DC5_N-t}dXw2)3je`8XhXBh0?z`0d3Y8=Wx&`@{6uv+v|saeDAf^ z%?)S-?-FVQzx%@c_1??D#L&`^?&}LUBd656}X@PGk(54j9On)gh@ri585X0Z&NJu-KW*-Hm_1 zzk5%GH6bMKWZYuEImlt$%*2aBw}||uIt)|fM}ZX%9nb<%^v;Fvv+QE??7@0rO&5D8 zY)ChH>Ad{l{`g*aJfQ@>8*JQ^qZSytI9MAu7cW|vk|+V(bC?wmft4(A;J99w36oQTHyET zk#l3Xs{AVQDt}|tl`G2I2bF#lr%(Yu$z*9vbDYt7WKGl`O|;DemSHcuR|OYodtY$2 zcripxZ3@I^5*PJ4u8(L~(bCUQ_VL8YTF-u2tBagg*-ZrWE88B3&zrly_r&nI_QZ8H z3o9JAoJyf_j#T8^$>w)18l%EtY5d&MsAu1S)q=0(CwDiD&^&(97WPS$%Hl@Azc9PK2%$j=N;-NmT;h{ zF1bp#Qc8d)_8z&x;NJO7)}#_K9ZHM0?d6P{t&7dqhjo*Ot?XdbsB>=#M^irn3j8mA z-d;C-+S)wj_b#`SnNd7UYssMxXThl6uGe4ip7{?o9^Zoemoo^t9)4smx40YluwhKd zuWDlG8EJO8Perf?RJ^0x{I5bK%8u&w|ym!X4YE5o;SqK@OCA1`~8WHGe*QwuL zPk#`d9t;~rI7*fz6EWUw0S86blLEtpWYeb1S&XQzW(9c*Lz?(rfh53 zO)^F*p9|L3zou`bEXIJdGf&s4v z`0&2ZaFLCEneYmqSgg&-P|97)SrQAeHM1nlK8>?^;D@yS^v;2(BTbb?$NK7q#(Vz3 z{hr5^Hj~%fSO}Rgqhx7AjfV>)=Osq5xG5jXmaH+vM4{}D!rX5eybwlP>$V1XzC{3! z%qAWkUlE(+&F4~1l*RDoD$FkXt)BfPsZoSJEGNY58|Tr>B&%)AP}-QFzp#U_%`nRtIY(R}9w01C z7}g-B6kc7LFauXJ#mqS5t5HC#RXw^mKCFq)*6f$(C27XR=Bi>Wpa5#@DiWq_IZvVr z>>Rsr0+Sp@n26%0`hx^bcA33w+r{VY?*Lpu`n^Q2r`kdyS2{~Z;vCvr5URp4yVXNr zzI43W$+1Agh{OzwEw>6=rK|E4i51MT?7~26CotDQHrbG5Lh&nw!$S?O8<{MprfDDF zp{Dof$LcPVyPa$kV9emFtMzZon9Pn_hxG&6Qwy)QLg?BMD@ZhP5ZnCtMppUeArdQ( z#lRPOA zp(r%T9JjMaeHyB$iauE^{zcu2RHfUo8fKdRGk#GgrQ!t=3_k?G$TehgmdgH7pvs1d3Ga zQ3C_vbVntv&EDGZ2x`?A}`-Y>3 z`WdLGTBD0H0beRt){-;g24sj7&XpVWjjpw6tn{qqANT9UQgO+|f;S0O!vg@wzdAd6 z2UiP2`^TLfUzH@S)>wf{INLSH|9!nc4i`dAoBb_+xl9WeyIGg8pS93fy=+N zA&K)RN>!ThQS?GVRJ;YX(a0a=SHzUuVf~Y7D&zUgh zhl_TG!d9J^V^JKl!j9lai5>8+OjIT02PLuJ_J!pEj`&1pInCN2A>qehp$eC(IPo|d zxI#^K5}4igFOf3&QHksa+3wKPU(FN@X#qGzg?cca63&rZNkC&VKCkC;xNF32EAIK3 zADG)xmgrM?=-wMp+v(yf6e!_~ZM_S;PG@^Xk&lUbrmFe{beeoDm&;&zcj?b8m%mW;h}7+`O2qI%C>g5;7tYh~>nQMl?}6z&_^9~&E! z9vd)^_JSrz7z#Z*O?y7_y4uZWQ89av-&*a+65{}a5bqV%+RLBGi@62gM;OP7JIAc|}DOKsfpDL~E6mtxQD!K#3KAMG^ZuPsuhm9fMwM@?; zJSyTX&YOCGqb0A;f}Do6Q&UAfg1v6lw4~v;@mkEgKJG3cPup*2;LVU)EMC^2nN_*Yke=x4|Q38~7#$AJQrL_?nt6b&5Oa z%vjzxfyd`Zn|noEr^an|o6@wV`y*=`b5Z2rJv-?m{uC;AtZw?+$L;kk(BCIk4MuHT zg3r*}No=N#HFqNdcqoQnWpQuvMCG;Zu_N8yGCsTOiyyq5{mFO^Vh^7h?>nU$UPHgQ zOs2E-=_vOer@3;`UCCXOcuu{NbWwpVhx((1-8U+^b?ZTWR{I}Es-*DG8y3JVm*79( zzmnHP*Ur#D-oeh)%J?aVg`_0G+m>+`5tm2|teKohUM4$`xcHp|bT_LolRWUY2E-O; zLyKskQL~iMWC@|UI}!<46x)XUFM8bFYEDb)f-*E(<(^9;Py&i%I5j@nF|@G1P4N5N zHCF@iDV~kb&IkpSSr+&$OrigE_n`!3A^!2l*PoyUhYh!zB9hPF3u~g*`xu=%M9bFHP49XmPT{6CiYIT{=^D|44S?%DiWzfEU1LuB) z?fyp$udBjsQq4|A%Z1$B>5aGW#+DIybMb%gSL3u~eBTE4f&dukNPl_bakt~Y_N)Ec z{`h;>+SBI8fT*_6c6y-j1=PKui+kKuAd;Xw+sit|EhxR~IoSEc=nLSTdljK!>&Ax7 z$Odcb4c8X}Bb1mo6ZMdR>-sn*<;U)GG%frU?7IsU!r+7XWxBrrSH26BluoiXl8k;4fmB!s`}{7x~H=LTW&ek`~67I z7hG1^EyH4`BLVL?qIGyai*fV{ADsH=@$WgGXPA4UK<8Nw4uHsBVZZg^`#cg&qY|90O7ik`WRD(sLvT zzOi5ubgDg=cp8Y%Bzjy1T)-ztndi{Bs!6kl^b)eq?w4B!dt3YH!{!4>1ASwBGfDhD zz>A5}Ge9YFK%U8>(hEdDj!Ni=@=nx*td$hei^^E!#zN1c#2;gKASB531{8v;Cot4 z*E{9OCbhMgbIdmNacK>Mhb*iuF7LK;>&;qy{TD4gLO>R_v|1=54vD z9VX9cq5Wi}ydSmP?z}c$qg7ZHMt^^Hp}kHg+!sbZwCvgPjZO#T1rKt5;U&2fvS1@Z zHI`g8LDtG~Id&$ng=o*lCh@scW)U&}IDjbnwXSqV??PXdAHZ?mK^xeN&{6Tf?RM<%C^D>R{G;hPl_0kq5#r@UI zwZzJ%4mFooQO_qBLmO&Ak#);w*blu&RgN7@q|=L;UPrry5k_U~Fm!erix>^V>nZ26 z6T8(MW!8aQ9$tMF`}`5ri?g{WpLN|{v1tvLe0i{&w;LWQ^IlL^q@&bKHXNe9Ir)qT zy!9@$W}_+7W0sB#YBhNl{{Q`jl!yk-tba&8f_n@7Q*iQW5C8y=w}7|H>g!tQ3!3Pf zT0IV?EN0cM=9Pefs~3>z{;d}x8s;E16_jWI5kDt@-$)Ot9yeCzYZa>hXQ$LN-jvEN zZ+X_1j+h_o8y*17Y=VgF>x%T7a}yZh@sCwERRy8OF?jtxhSvNDfv8qzm6*BfVh z=jU#k=hC%XhTk$H)oTyRxl63SbMX+ePHTeR9i|Kol%C+*YUrmN+)&@Ol-+L40D8LF zm4*cqf|sQ3oc#Ljl`<+7FCUgNvJ6^e#Ds%Ohs;bc-V3x?1q+V83ZZ_HEW3x*gb+6nzQpzWV+ zq79NH3DO7aptL<*@Yvc3Ca6WS$K9k)>#&LRyMXFdu+c;)MO1m+Dv_0pkb;;3!R%|Y zyHf9C3ONB?2(N-!_u5C2IMs*s?AX=Ed3P1Gy$S;0!Z0G30B0y#WwWwOMJq?;zqJ$zfy=a)2_F<#Il`eD5I=A?aXr5ITX;l=SjGd3=%(sgP_iHVEs$ z@08{8KKXpo5Sfs?Fg^&-SZGxA4xUpX?lo;P{-0n4k%RD&Sa8kgCv*z_-!E)&PaR1| zT1RO(mBQ?6AkMh9FtS_P%)zuM>(sVc`7gpYAUhH4v(8wS&;MUu=vXUhv-jVE9YM|@ z;9_&JI$l`$_J4T+CIiPsYsJ-f>vus4hh1~U!FL?y|Flr2iqz1x;xOvPV2L{($?*S^ z`fsAXk|q(ze0_*thH1e3$`Ql+Ox@%-9+f~?Rr>uyaeg3g@l92R(p~v>FpKxpcsd!* z?L$M9#qvGf`6YNF_1~Ry8*7581$b!U4L)Ls4nC4$V687>XKiCor*Ca%_y`c-gNFZm z5(5mJ9FLh%76Uju?EP<%gC(^_kPYjd*n zpug(K$&hznIUJR1l7}g8sJFx`){kBLHD{(X*Ne4fr3*F9Qdf+Ctsi4~3sT?AwKXDx zDd3^T&is2(IrT9{3q(0b1rydynnRa0*5|n%Fa&?Vq2NcpON8adkB0hz5~l_Q=;9s6+j|cS+vYEpQ+yKL4So@# z90RSU+W56pGY6;Fm*Ix+3DgN^C+>sOS)$bQtHxKP{$r#PhuZVOF!90w8)KhE>D%4r1X zL@0^X#`8u*@?0TQ6-B^OU)oTHSV3Gf;4k!R9P3hJtEnc%R20Wc5?{{qE%=xTrcz_Z z0g zvv|mv;}BYb5JBDlc>s2B$a{b6u`;vLmtF!~&oP{lxUHj@`pEA-2-Y9AI}CGfC71cz zsjKZ5z3Ar7nJ@pDh_K2s*zrlFSTP{>bUC=`MF>GZ!`zfXjgl42M$zWlXV2?~d+&jh z9SYvQ9Yr{%wq>tM4{*T#LR$z(8t^pupZ^QPUytsu-+%a@3^MQk&fxE7!v7+C{H+4# z$FKS1(=75&!avWz{wBQzzgGI!F{-~##QsVA_mg|SNdW+VgeT%(g8%Cr-=BQ`JiYas zQxDR=mH4l-Tz_);^Ih0)E-l~*CfJle-;Djq;Lr8N-wcXrpBVgJZTyq;&()3Jq^69& zNdH{x_>;q*D+0ecI5Yj}gMVBf_>}M literal 0 HcmV?d00001 diff --git a/script/aggregator.txt b/script/aggregator.txt new file mode 100644 index 0000000..1645481 --- /dev/null +++ b/script/aggregator.txt @@ -0,0 +1,89 @@ +# == Properties Section == +# configuration properties +# use .ini format to define properties +# mandatory properties: name, artifact + +name = !Всеучёт.xlsm +artifact = !Всеучёт.xlsm + +%% +# === Imports Section === +# Hierarchy of folders and files +# Use Tabulator to mark next level in hierarchy +# All folders are nested into SharedHome path + +dev + DevTester.bas + ex_ConceptOrganization.bas + +api + ex_WinAPI.bas + + API_XLWrapper.cls + API_UserInteraction.cls + +excel + ex_Excel.bas + +utility + ex_VBA.bas + +ui + CSE_ProgressBar.frm + +%% +# === Source Code Section == +# Hierarchy of folders and files +# Use Tabulator to mark next level in hierarchy +# All folders are nested into SourceHome path + +src + aggregator + CreateWorkerDlg.frm + + DevHelper.bas + + DataAccess.bas + Declarations.bas + Main.bas + MainImpl.bas + z_UIMessages.bas + z_UIRibbon.bas + + DB_GlobalWorks.cls + DB_Workers.cls + + ItemInputWorker.cls + IteratorGlobalWork.cls + IteratorWorker.cls + + common + DataTransfer.bas + DeclarationsWorker.bas + + DB_CachedProjects.cls + DB_WorkerData.cls + + ItemCachedProject.cls + IteratorWork.cls + + +%% +# ===== UI Section ======= +# Pairs of path to UI elements, use " -> " delimiter +# First component is a path relative to SourceHome\ui folders +# Second component is internal path inside project file + +aggregator\.rels -> _rels\.rels +aggregator\customUI.xml -> customUI\customUI.xml + +%% +# === References Section === +# List dependencies in one of the formats +# global : GLOBAL_NAME +# guid : {REGISTERED_GUID} +# file : PATH_TO_LIBRARY + +global : Scripting +global : MSForms +global : Shell32 \ No newline at end of file diff --git a/script/projects.txt b/script/projects.txt new file mode 100644 index 0000000..a2959b0 --- /dev/null +++ b/script/projects.txt @@ -0,0 +1,64 @@ +# == Properties Section == +# configuration properties +# use .ini format to define properties +# mandatory properties: name, artifact + +name = !Список проектов.xlsm +artifact = !Список проектов.xlsm + +%% +# === Imports Section === +# Hierarchy of folders and files +# Use Tabulator to mark next level in hierarchy +# All folders are nested into SharedHome path + +dev + ex_ConceptOrganization.bas + +api + ex_WinAPI.bas + +utility + ex_VBA.bas + +%% +# === Source Code Section == +# Hierarchy of folders and files +# Use Tabulator to mark next level in hierarchy +# All folders are nested into SourceHome path + +src + projects + DataAccess.bas + Declarations.bas + Main.bas + MainImpl.bas + + z_UIRibbon.bas + + common + DataTransfer.bas + + DB_Projects.cls + + IteratorProject.cls + + +%% +# ===== UI Section ======= +# Pairs of path to UI elements, use " -> " delimiter +# First component is a path relative to SourceHome\ui folders +# Second component is internal path inside project file + +projects\.rels -> _rels\.rels +projects\customUI.xml -> customUI\customUI.xml + +%% +# === References Section === +# List dependencies in one of the formats +# global : GLOBAL_NAME +# guid : {REGISTERED_GUID} +# file : PATH_TO_LIBRARY + +global : Scripting +global : Shell32 \ No newline at end of file diff --git a/script/worker.txt b/script/worker.txt new file mode 100644 index 0000000..92db141 --- /dev/null +++ b/script/worker.txt @@ -0,0 +1,92 @@ +# == Properties Section == +# configuration properties +# use .ini format to define properties +# mandatory properties: name, artifact + +name = ConceptReport.xlsm +artifact = ConceptReport.xlsm + +%% +# === Imports Section === +# Hierarchy of folders and files +# Use Tabulator to mark next level in hierarchy +# All folders are nested into SharedHome path + +dev + DevTester.bas + ex_ConceptOrganization.bas + +api + ex_WinAPI.bas + + API_XLWrapper.cls + API_UserInteraction.cls + +excel + ex_Excel.bas + +utility + ex_VBA.bas + ex_DataPreparation.bas + +ui + CSE_ProgressBar.frm + + Calendar + CSE_Calendar.frm + z_CalendarUI.bas + CSE_CallbackCalendar.cls + +%% +# === Source Code Section == +# Hierarchy of folders and files +# Use Tabulator to mark next level in hierarchy +# All folders are nested into SourceHome path + +src + worker + DataAccess.bas + DevHelper.bas + Declarations.bas + Main.bas + MainImpl.bas + z_UIMessages.bas + z_UIRibbon.bas + + CRD_ProjectList.frm + CRD_NewYear.frm + CRD_WorkList.frm + + MonthlyReport.cls + + common + DataTransfer.bas + DeclarationsWorker.bas + + DB_CachedProjects.cls + DB_WorkerData.cls + + ItemCachedProject.cls + IteratorWork.cls + + +%% +# ===== UI Section ======= +# Pairs of path to UI elements, use " -> " delimiter +# First component is a path relative to SourceHome\ui folders +# Second component is internal path inside project file + +worker\.rels -> _rels\.rels +worker\customUI.xml -> customUI\customUI.xml + +%% +# === References Section === +# List dependencies in one of the formats +# global : GLOBAL_NAME +# guid : {REGISTERED_GUID} +# file : PATH_TO_LIBRARY + +global : Scripting +global : MSForms +global : Outlook +global : Shell32 \ No newline at end of file diff --git a/skeleton/!Всеучёт.xlsm b/skeleton/!Всеучёт.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..c5b38f2097929144068796b87ca48e641f1f89a1 GIT binary patch literal 188112 zcmeFZ2Ut_vwl<6nK@_k63JQWKR#53kQ3EI-ARr)0v4C_?dJEYWL`0=3QX@#O(xt0( zkS3h~kzNDR5<*D$=UQOLea`vLx!?Wob3dQ`gq6AGoNLZ8M|sCPR`x}Ob?bLfQB%=S zQBiSHbtOpB6W35tt=UXPwVjG)?Nx-Og^huQjou~4+XmJ;ybk7Odn4AbJ@|@hE$ILM z{{1hOz{eMLs+i-9Ws{*JryOi>ZJX*(hAQo*-|@`<(8#)jpANK0zYw^x)i-`!hAIr5k$xsiM>EinP;ax(PS!#~Z#hHVlU-818F( zSuT5Du?%~icS7-Fa?5P){y^jEv}!!+se0uDf~>+;TK|;9g>r8DnVc7|Lh@7Oa!+%d zKA1>#!+aBmfat?hk9^i5%1%kF+bRChhE4qp|Ms049eq5T$Q#^m^$)~m&A46^yQksZ z^_bC8S}}DdvxkBAsA26f&n~W-n79+}nd{Xe=RL1fd`?b$x$D)5aNNEg`WS)jj=3S@ z*NOI3_J*%LxM?{m?l^JpHaz!Xig;e6a5rr^5!L&}X`naiRd4xHr>bJ3hH$gVFs^Z+ zA>B`m7In|&Ob@BYe2Y^XSLm*HjguG^-wR%xWlz`ac1X&IK-NB|c{RZmD(m@vO_=Fq z`tIl&$G>oo6$z7RjK0$ew;v|sjT!RU4TmF&gq6%@{CN>E2R-n(IztL#sQ==vf(IHN4#d?)90 zVc?E4ZWkLZ7**|PGB@7F$(ab^FXMOkVs0{S;ED>Tv!m=Pa$G2@wl&0zGa&@}SiF(J z$I90V!h#!)h?*nT>BiqTW3+gDV@;1RB9Z!I;-@H@=V6{^jie@`rBHLG%KZ6JqlT&T zbUQV;(>8ChI+V-YeQ>v(w7WPh-A;S0#TYufCrYowh~8G4%v95`XM>uo#h&dgK%dOb z>l}8OzUCA4;^-NbcgAS1$A`i({AXKYPy3kEGPS3OK2aPt`po~*$Szv2b4fblnNOv~ z5s_m`tjFgcC)fk|{BBGyKd$9E35;nUH5C;r70nt4GrnbevbVG{yfFZS{p$Gswg+mjuzbj2mS zhC+13W+8?Vvw@R_tvXDyQYSW!RcjmrDo~-Wy z_gtEt9?vc-M94R!-oJLY6klJgOSfY~{)bBLQxOFF%pegWTqdd^#wCPYT$`mT{zrmC-4y6U7% z>vo}aj|-_&?L8uPkeQ1hm_&2axA%tE0Qdbs+P*`~$NK}W_*mb2&2>OJ(&N@>?(3+R zw~X9A&%|7NQ~BVbe#HkZ`ID(@d$`}P9cDREq#3wmw94av{}lZsEf_wpK@Ew$b7 z*k53lfsemzN@lGE-{z}Yx97#a@Y}q7Ij3|yGhJOCQM*ZKt20$n()r1G%i*Bw;xzAX z2vaK~(gc)}V?XvhWU`m^exCl`D(l)qN`n#g`Gil88Qzml3pf|oNO$2M9O$>%ud`u@ zC@k_kP~O}3^V#)VnYc&yvOF|XVi*6Mo-g&9_G8cs3$gQK7X9MAn_|(4Z>ppMEUPio z+0%tCdKC3;uKirw#T80uALVzm#+Ti}D_)KG%gD)NuXypj&6f|Her<}D((q!!@4fZP zb>PvW$m@{P4R`T->2H^Yd+|Nq%A9(#Pj2HD^3-vWJ*YeQ(cy#>$7$twoA&wg^FF?F zVn6NHqin+5PwdAAc5#)3&+4utXztKl;&5O4(yEAg^!)7&6b^d5vuV$!m?G)dZ%aBt zVzlZD#qNGfW_NLpzwWrMInCxOZfu>h#PAj;WZem~^6?^SzPEkuo9m?WU)(Pl-%Dpz z#6Ksf+rYX%`Y{#yu3hhs!&!rtd^Lg&dLz8>&E*&|p)7+?Y&i3kk zs&53w zFYKAh@*YMtze(JbHljwPyWAB(sJ0)_DW+y6J~VFLlp%KS;<&&*pYaWhb!A3-n!mWv z*t#A)&XQL7Kt%L~d+_GuyScrK>biRru+NJ=WMx;QtMjVb^CmG@){O^N)Xz&YP4oX1 z^njE3v&q3z`#TR?N+5&@2GLedr6p9w3RH<5^w;)_`zqAjvg(RA6@SA?H#IKFuyYkbYLV9C-B_dCrO$qQuJ++B!= z$|CeJUo>o_4F`NBB;+(-yhKqGY-sh%aV4xp?6=L z8&e^h_9Sr6fVZz=yz_xKly|eUslkbdeL1Q>)a7fV2*xu_B<}!{ZEEOj*T5TWb#_9p zMFH~V?9%kmKxr%%quGwOK znqI^M7(M1Z7tJcRL^X}}d4kti7bPdNW>m1oJZ-v*)KwbaHlFB#nQP2l=oILfG}q9?N|||{ z%tNN(DE()%Mv;ecQkJOxoZvwcb~ZyRrRs)Wr)EIQ^ylM)mcl6UoeXKs3JO?@rG%h6 z*Dnrow9KtB3!XMR&s&%=fGJxq6wUXvIWHmKsi-h`cIm`)dc(<)`QE4W?kv}Px=I}m zPjN-If2g_TnekF-sl6!2!fN_vd;0M~DSft6)KW`BLrawD6g>)VTrXkVPD7l@ASLZ> zdy$)K$`#85xuqKpyUO~e4n`io!09wceqS^9xvisSuB+po+GL_`AXa(7va|VQ)MdWL zqtmUnlsnis=avS{;vqftoGsmR&U%k;%-B6|4!oVEOPXV_{e*soO{#l_iEz*qCKM!z zWN=QVnRkZOA*bHz8C zLp+}&Cku}j_G4}})qEbs#bMC1NpXD5JuVn&LZQ4ZOkn3h$_2bH7qH68SGU~M|zPL zZX}8h(H6vh6#bgDK z8DN{}F!${K!ikI@!*E!1&O3d1Pd_&L_DN}??t!NA0xe_Lw$ix;&n#`Bfp^qXC%0jU zDeRRQx(=TRFFx6EkJxah_npj=>M)qK33TLF5a`p+7??h8Z?jPoO`p=OIQKzF1hc(J z^sS?{>K-wRY6G>faVF2+u~W$`SlIsFBE$IaS8Fj=4KJ#TORy4dA)${9F9;UfnVQ!Owd=RU4TU;2#09u7==*g! z&S;-fQ8cf~n#l^YFDx2vszx9?h@xs3wpJzSMkR@{rWvJzl~yga08^gV#xY^GqmD7U zHlqXKlDNghk?PFtpEA_y#OCtV_{8R>FQV;STXx(+3x;{k{MsxqC^mEXr}3S)(u)oM zDt1p8EMK&A^>(6gU-N4q9%b9+4E-s;26Qr6G8&&qN6|M0=(BhBsmNP3&k zd9H18(uz%nsPh-Nw|a1c_NF&3c%i4~xn#Mw?(==LRj%X__YLW7C%8Oz`ba;4n{WC) zIw4o`lKaMmZ6^+R?DUg7_Rilg!v^~JaYlPO8;J2|T! zo@im-BlaMK{!k3!tvmGOh_G0~^ z^mk(ry(5f{V)|k9;W3EO5k_aR{xJIYF^K6AMx>ZNn!YCnu`t4j5(*d&ThiLGCKj=F zl<}^Z{wsRUSj47L#`|LZujtRjBDRe(x{2wB(_fE8u#Pgii}i=o-;G6ZjWT+O=||9q z$081oGJ1;jN7yCM=QPpe#Gd0F_3?D-k6>TrGB1%yd-|bv6UHqvlFw#8S|?X-;cV+P zC(B%gj6~kM?Ycc4X)0LJwaEu$+E4S2N>ou>snqe#O8?E2t3T*(TD#6FxN300Pqb3; z(#|MM4e3n3D`~m+TT|1%RW6h1pfy4xe!Go3vr+#R;-6aMCM%UQyoW1fHsr+aWnt=% zxTk%|+jEu1`Z?&<^5@qM!%ooH<mTCi%NHtjRGt&CBZTN!=d-Uz#YpQy00V8iu{jtS`>{ z-u^?E)h|uz5_yJBS~dKoEwGnmONGq3ub0D4zqGwEe30h;AT8!WTKR(yLk}W0x~1{B zrJZw2GjvOHcjHj?tLk<&#K{( zwg4B)(~6%ib9H}f!>M}$OgXV!EdQO25o6!hP}R*}rz=p`El{T`Sl2CBrz^yO z74p&*uIm=A(-rahPcK`sLT0;F!vk#rPL}^km&t!x?NH9}wWXIs&Eg4Z!DBjj@1;XW zI9f2s$wNgc2gp5965~nQQsR=W>ZzuMrmbmMW_5M5up+0A>3R8yMQP`06I zComwV7{jIM=oadrDtVB3d6@@WiCIN+QqxHN!H;t0qV(;flB!^C7s_uKq5R-TH z*DS3{ADvxaMhRu4qVoFi$DHsaloLjFby@V4F}<52twnA;L&z#2`ftXRUP-H`GH28$ z-8oi0d*!mirTr6{k99Lr8dyeda$7c8AAEY=!0+^oaD7v`u2rqK`0mQ0U23hU`Fy7l zfqYMQUTxhfuzK%7YH@HZs}#F*p-wNB&kUDvYPU(A%>ifOKXx7q#r zn;^bcGLlXcW8D!O7WTr^>dG<6#46hYOZ}^bA5BM=CLD9xqgpgPt%I)CWKT+&@iI4? z>{Ap!s`p|pAiBZTGV|@iU{`KOEr)LZTPYTc!eL~0)zXtiL$#p6Aw7dD$5=2Xni9Fl2*+Qi#Nxlc<0t;Deh{C`oMuXX?~Mgi22#mk&zBv zBt@BwK`qU4@GV`b<2cZ)kcn$nwV1X{#wG-eEkvVE*pRjBPt<(QcpM{;ME$qz?~i&+S-@bBX5}@D#YsV`x|y8^BRLsqYm` zL8!MjkCF!RhH`TVCdBr}tc7rG;ew-j^6i%wQgGPWsJP;2k`TSQd|{VV(7ya5uEyEO zZ8&N9LhRI2o544)A2?~azL<=(@A7XvOF#Z5p{zVTd5Bx*?!-u_AmYAuPx-Vlr6-C~ zxG-C;>UE{|Mab}AZLZVe$z%3(In4thx^$%~2mh2dAK4c+I6t z<3H`SpxLi>LW~1GAh;KVHW2>EK%9+r!nv zCkdTFm$+FMKRtDrxaLmLat7r3|qP?0i;uoS|y7 z$zP_Wk!j6)b zbH>*i_vYy%S?dMfX_j+fql!jLt79UX|FS=zo`kCL3{W;mcpuK!4;nu-Q*o%BcViP{ z5hWB{J>Poe{!LBU?!4nw4mWpyDsB1e*`}WP;L8NnA;Q2sNz=Zq&SjV9h-=GUozZdo zQzyD=SwE-lkIvItCuUJ@6E0Z6zAa-%5Fwp)cQrR5BzlZ3uT_}P+ToC&k4p+6pSpa( zK8@NXXpAjF?i2p z(rk_$E=vpd4{V!I%3tg=KatDsvg5Gs?yRl3E#}&N>A8&=spGenNJ1fkJ*UO)jC-ig z=1Al;KDAshIcTojYpi_0-8?b~WBy@8sIe@c5NcZ7uKOV`RPBZoNnoVxlc?zSqK+Kn zb#tT=a}m=Ie(7A#?OktlUEWrGcgd+2U)7o2lSr$)O(8W5eOZ`7+`6=QX_9Ac2KNN! zcFO}EkEl&`%DbQ0+O!|%Ou=W%b-n4YAm*< zF=8ueir-KV|y-{%XHW` zsWGl_ti(@A99KdJb;$Bk_7XRpKisiqBze2C*i^=LtbK30q@-e);DgG1MdyBV@sUNB z?@wec)6b1j?A}!&CWZd?NCN?ka=-+SS#SVRFEm7Pa=rfXDy&?Y?|7&UD-Vh%=l+bn z?#-hv6Hv{?LuxpwXvtk{$fHU0El6`0S8c8vn?w97PEXvfzdX zQNcG1g{S$!d^w)*eD}CcsqJOrJhJT!c&eD9FA92y5Y+$C>BC&!j~{`r)CWk?!w(eT zsU-KqQwc3kB?C_->OFp89~fQfi}twmpfmYmpHMj-{%Lz~ zLyZ}};UW#)xcT+JQg46h6WoF-o8?q?AXJ&aSD6#sw&3ga9SCl9gtR*15?fVEyS*Ie zrVIG9nc*MkoF17VG_&t(#|qgH#VXuP5JLhp)|?ebZEi63gAV+Wds*VQ=t$FBg?H2o z_CjCoo2>J>b@xL0=~%73%|~svI#B}8C2I{Iw)UoLe#pzSG3TQB-p->ojt;I2TP>OC zpR&=2&~b;jC7;-6xUTtOG8f!o@TiSC)WN2TW9@5gqt1Gn?$2*8nh$?6hiCa%Tj%yJ z{dBL^-sz(@aUvqTm)LT5>;?g~e(NRmz;z2QUMSZ`*ZtIl~}!-cg!f;x#Pu*!p9 zWumEbV$UQ<{kWtnYfZd8SuUX}{TE%<7-s0_{Rf@`I3RC`3Zu`7g)ggOKCWr>t5cMA4tKZb zWU;M~*<+>RuHE#HE-$fnDo+@EpXb|@^-jMGPlfpmE*9JI6X9TX=ZgoORS#OJl!q}r z{{9$Zg~`bq`~KO-6JtfJP`|D43g6FL`?jQ?HvA7-SLX#AoK_>%R;Swjoz_c|X!e)) zm+49TA^Gu}fU|JIpOFW&-r~XiCtC;G-46jKa=Z^}{~H4F?+DKSvteHeus>2t|4kk0 zf1=OcNg9PAKZ%oK9s48hBHP5R8s14-u;&-)W#< z$g%&Qc5vhsYm*2tkO*y^!Hm@`>JW#B_%5r0u>ybPIYpGiAqHm*FIFPvZL&~}vcWMD zlph{O60~bMs*_xKyev@h@nT5+wro;XqLi6aFfqEbP=|7{dv>5vHvyNX-8$o>m1MaP zY;x6dsQSvZ&M^+l1&k%TqMjYQOMKR3uu?Z=)iO6Pn-fzbD07Saxy;SKT;|3?lt%ei zN<+ZY0a^TCieJ+vqCN^!~tAOOiWta#ePQinw^9CNcjqvaKI8T7N!J%J8}Q62-UxQ5(NjzkkF zniA$M32ALC49!uQ;v!}&$$xi#C_PoJ{nJh&TZdFt&k^dUYeUJYNljXP24KAR>2?k3?^S4CdAKW1h zEJvp{!?UC=ZEVUhk-6H@=fvVj)L8P1L#0lEw|t6{XOu}wU8K~5LX#R=p=%7QGxboK zJS5_L*MiyGBaaDlqu7p^-5m!epyKwTg<)V?)ItGY`6s-Y`Z(pK)TQ*rcGj02-IW^6 z3pXhRNhe0IOn`xNy(}fEUX!EQPGGOvITkYBUvQ)(}%O%3# zcBQVAB)j3r?neQ&3`e><%64mJq;(%D8lKc2%hl-?GuO;quuW+t^$*b4*iWYIVjZW! z4l%U54~@F_HgZfasA0O(_H>14X%h4XiLM4Qxwu9J?Cu!#DYJ7G6f7oj>_oLv^SJd4 zA!ZIaCotk%uvs$NCw;*D%YrJ$sp|64;%@vHmcClx)IjEzQ{0MdSxu==ZAQ*D$lwHe z%+2zv3C+_E;!DcTEtZX8WTcrgpU%z?EoMbRN$uG3mJk;*?N|-T$&cE-pjqEJOufCv zR?B6y{i52&l5P6yvh&g&qL7vti{yZUB$liVDW!-L_ zVlmGVf5O!DG(p*2crx1QItHq7=iHeYj1;r!d{G@O-hPC+G}~UAZ?XCris*samu>`A zzHPM8{Famw_w8wtWsO-OnFIO9z)WUUe!63+eKiF__Z89^V$4NNs~xZMc33&?^vgXb z9NK8=^c0_Q%+OravRdXUZ}4<~dP~41OG@JFtk$3A!1W`YQ~G{s3=MTNe8OLxrFV74 z;9%g7<>~x0$$O%rlamZXox0;#LY*9Al}||-YUkPF4hrC!(v>78n>>{Y#G7J5(SjB^ zcHBXBqgpXx_M;n&A+ z``GL(7yH)Pi{*0H`;YBLc5kUfw6z4K`cN~6M+Z*6qkcW3nU>l={=8$%k6$Q-qUGeO zY&RHMar`NtJ*T%(~L_knK} z@84_MKbE?Gt!e*Q>VC`V0czV9-g44{qV^^54gApt-yX7Y#j$e5vqqRTnIR=T1K0Xx zUKIMMBd2$eZ7${J`|i{2*B*~t6dKht3R}v7%iFcDL9v^C1Dej@HD!b7Fr7j1>pSc2 zMk69d7>&jBgXqJf5%D98regg;^zWk)X(Np0V*0^$OB+Siye-5^g6WCTh<792x5cDG z=y$~+Dn`7m#7aWwMPm^4Bi=S*(xLQPFF5k@Dm z$T0fU7{tT~ql*|fn!X_hfgfRX6^lgEPZ?UHCWx&OG^h7$yXa2S#JSFv=FA?|i|#v{ zI5*nToZaJl(fwc(C!H+~V$Y|G?jlW`47N1Vd$y^#pKs#aZc8JxM^(lBGC=H^Lsk_@ zvVST8FXK{-dD7<>!u=857To)h;irhBL;AHv&l$cJ!tL(!JPGlvW-)j>h|Yngg1rlOLcZ8&h--y_ooWcX_JdU#O5z+X?y z{<$^&Q?+eSGS1cet?X@6^jo!hoYnzPBkoMiF1g+-?4F_5`}CpD?f1Wo%Q@f=ivN>^ z^gq?7S6RWY_3ytcUH_?W|NU{_YS1fCxJh@*7FW8Pd?M#e!vjDvxaFUP$W6MJm1{vV z_-nPCwVwP-+qFp=13p>#J0_P5iq3X6Sye#IMqIm8$)}P|1!UeXBbEmzKi`-wN%|YxwI91R3(zq{j`mYtNXa zIf`J!gDk>ogzFB3ocm9g;t%vk(B>GO-=%a z|GC!~u8-Yv<*|CZRs^Af0npt!)!PZ5vkr)wY#oh=uJH!Asz0G{65CheW&Y?AG;E zR5v#Lv9>J$CxS29!EYpXJe;JP-LpO-J4;$-n!5UaqS0S=$Is_#H*Pc7?j!v?V*4o> zzK+(HEP>@O9bZ%2(*_)Rqsyo~GRcb$LhM!x7COw`uLYidQvcu}buBDWH8jq|=ZzjJ zXXNS2*2^je5%te6w8;vMca4)Kqm?_v1r!b?Z9Ln|ZDwpPF-1P0Q>7|^)T!R2XJsyb zeaeX0RgLY?N#WR|i^plGT@PI@%8P%N_hiX(#*p6 z;*G!1-CDb43yePYb#LI9VfX3{{xW^*_~zcRqBgV9(f<2W7oSWQ9Q3(g$03DUm?i|E z&bnmYaE+rg7x%O(&OR}d7;pB$>5LSsSNUtBog0b|(r@IPF;qh-1S|5peF(qiC_6}d zYRGSF>!Fa(!u!!dEQId#mI379*tPRirmvk{m2Gv*u%E8HG$o%dw(Pk{wa!#U&JwBj zI^xxh?pr8RTe9CrT+~sjx2Ippm^8m${A(+1u&Jr7V+^yxm_}GB__ddzmgo@!PR@sO zCCWQ5UNx?6J9$EH#(ie;9tT^C(plN@1C|@ZieKVRcdA}044QnG8=$5;d9F9hQ$$9e zg&gp{;Ews4_8NU&4Yz_uWhwdTU8#>%j%IWmXdjdpI`l%6tApWYM0D40zZLvZ z*x{gUd9iJ^CrNx0HQ(kBmn^BSC9nIOyJ7Pw&5Hw;PaafTa3|-*IihxyH(V1~MBkn_ zzt+X|cALh>Xjv)8;q#Z|4hqiNOA_l!_U?<6;5niCSJcZl)TW>B2n8*8RiJX!U$GWx zJYir8NLtHlznPs~KKTl*P;>#eh`%;R_!p(#;_TWp@ffu|HZsr7uTOrbr|OMsJj5+2 zf2K+~#(Vytn<_Hx9Q2iW`KvrZ|LS=c|FeePexO%mMorPNu}hkP5!8ntXKlRRdf7&T zA$Sc#go^m?S5A$K7V78gEKCHp=9KkB84I_Yg{lP%eaRJ)XA9Y76#g;VrcI0K2EKT| z@Vmp=lP_#xXgF?u&W12NJ8^7Vi%?Hj<2J*?9?dMX zDw;Vhc7(s|Iby_@sv&+1BPtZ0E)0=1@{RSKprWD1E5e{-&zO*Vd3`<-oRl1uHn|oDo-GKz^y@L@u1`9Wo#@?u$i+J(4 zR-wXKVQp2t#`|*j$=e*!5>k&Z(MCtUaJxg*juYXC;mAu>(DJegS&}=>eVa*-4)boE z|B{%ze$!3j#y34j-hW{K_(Ea-5ucd(@}tj^?;W4nn10<(lqR~dVQ=By;`ajvI~{jb zrnL)DJb3yvc(OO$-AUY%^lBpmik%`!aa!E-E-8E_@MzRo>V9hbt+KLB2TIq~(e{c+ z(nY-UyywHQ&=&fnYfp!M2p!|IW6Y}g=coL+S(0Q-zsP)f+U=IL)L?%o!RyJD4c?5m zUSqMBbprC#PSIH(noO(~>>t)z$nXCczfI+Gi%Xfpar9ZOxoqC)?KfKPC{G`9Pq1@( zMI*{L952ApKe&g*bAP{_>_xRBRoq2&Z*Lvn!q_%-PDtl~!ufTsD*MMT-wzte(h=qo zuHHfNL9FFlZ(5?!Q88+2uVmL9%HeHJzSc$DTIcbIh2b^Jo-SUCt5r`}#daOZIrGYN z?<+PFJzC$(*9$7xXs%)o?L-`AHF+E6eQi8B{G^$^;}muvw#bI_B1cWje815(mq$V_ z%r#tV3_n@XE*kBW^lTf6ug(moqlCq~#R?vFY{*)tAD8QTrf09OnVFy2+~B9v?S#Dj z;!k$_5_a!=epWsmdz$~u=>DRpDx;Tf&&|^Z8qr+O+j3M}9WmmBYxK5bdLxxmtG+4b zH^_Q5de2&_vr1e4^y?uZ*bG837W-Rm?Izdt?_tf?6lSn(+tGB=Y>(NxyVpxZwbhPQ zadmc$d;9B)R>(}VI{Jt|B+JIlsn^IQiEex$v1O6?`~u2Zoguj+^IVD|lG1O8av|VL z3E2!@_Jm12v`)Ubl=B@DrH0&UKZ#me7}r}GsP3q!rb!MxG?Fws+ta6+!j5%uCQS@Z4UpY21Pp4rhFqK%9D`eO znI|WdGcaTe>y61wb{FP~OX=wr2E`mH$a9{#z2vY|(^zdjph-fD_URSny4uc^X;v+w z8c(t`Cb(lJCp)Mm`D}>)Py4I)KV5xsbqJrqCC>VTsulvM`^~m;O*kD zC!dm@i+~QgaB+C3(XjE{P{2@Yk%->VK(7F~wLJzsEJ?%_d*W{8lWS`7%o!+)MJP&9 z(IP>QGGszhMq3mvj8kyrV$T?y9fp!VFkaf&MT%)P`fa4l7ug z_0udjLAy@Rb=mc0aI|>3V=Q&ii{`BB!=QfXcuzOAkMm@ukI3iXz>FoH2ZrK=P$gE$C?jRNk5>|JPX7Htwk7tzN>u!1w2aLmF2AW*^%eP@rBA0LERW7$T zR?qb=E{yUVF*Dtw(MEZ6aW`Ji0hNC9|yxqd*wP(-KEFF1I^CfX+QZQ;K zrY14KVrf?D+=AmX@D2HDe->(ip>JA1@8ggVKO_9RO2%*qoh6SQHL+Fdp*w@fb5;gFH=X)bMZt=P8leDMD_-Vrp|ik z4U~*}XkwJ-i07PLZM$6~rHE6M=jgtvd$@DS=OSHmi{3hfO-#<>`Ip9d8s#i8Lgd}) zdW-r_1MPe#ND3j8QJzNfE@sh`gb>_@z?qlSwKrKs)HFiM1#U+tiZosdDc>Q=C$#Gb zE=Jc|#Jt10BV*`edzo=#7{4K#VVICo@JU05ql?WX{0)@m15!)$-I)q7#X<4u3Bn4W?ypd>5G3D;|B9-=H)w8eDwLk+^L7r>Fai3Mrt8(+l=aLTg#x(DDq?aUx!ath0)^ z{qf+oH5ll4VVz;sV`%&SOol<=;-q1-J1;#C4q36XC00qzXYk{f2WudQ*FyKUBM%y8 zqK6TpN0eqctGR{@n%!sb*)Z^d;y3m0o2 zLqkhFB=xoaQ_bG=uG7{u$cnTc(Fc2zM4z7t~$Jm%8MOH)An~B@YD`qsjgDyRUzsexnRM@ZOXIZ zAwdTT)%yI@(D}i>V70La5vpAUMbIAbN8lww%`px<>j3;S<63k=}y%ht~M-kh@7}^DH_Y$GwuXDH32m!l?&mSCE<2w&Y z|MXsIjw-D?5e!-{L=z+h!lCYvD8S)>-r)EQYU3FchY>>1F+xfQ%f#CNo_uxH`Y)Qg zKO{jil7$r#5}~Y!=)k`68EmJ1_HDk-dNgEYYn84EOa_6yM#A( zv>Kd!P=mV}>(^Z_TN7l1w^l#-|GQIL@v3utqVr{Fhpc)M0b4ccB5c)?`mj~sTlM%d z$a&YkI6qnKtmsxht3S;1YE?Bjwz?YpyHm^5W{x79&P;O#<3ogSz)7*iC^~agwU-6P z)VP~Lc6w#?v(i}ote93;1DRFT;8RgO8jS!BVv?XGB<`*X>3r6QnL6dKx}OAXn)I8c zWJIhgBDnYOmU85G>GzAnwp+KnYxHV|OuOnvhF7;Q8_1XauI6H^TXg6bU^9?6g^m2X z`e(i16)DR67v`y7)rypU*A$`-CbD0x4lP{ra3Df z`?*x4|L3}Q1m*Uu`q+-gI3NC9Rd{lYVeycB74%q52MW>S>*M9zT8K0JyB>puxws8U z<$YaX-ATg+_h{>BPV__4iy!ym31aFfEh!G!VSPhNP@jzluZGCFb3-aq844Y3$`aSX zC5d483og-k7h2cH6a0|;o5KeGgSgcc{143^Tt_RH(b7-BAeNkM9oap&+O1`L0O)_y8dbC+;2 z-Fn`O%%nI84A_09A!!EO#gEVAMc#R~5XbXejAfyZ05GQh!J59L6Jocc%`nQ<01KKE z%q^0bhkQy&8d0_T;W@)Vl=7>2v>geahU|KSF5d(~-PbkU<%gH_2F;orO%~U<24eMf zsksN_Cdn-!mA6VfB*Eov!8`0nj)Tzl2JJ-R+l|46FD;h1np8k|FeQP&v#=b@!HEo% z8A-U;|LPLJu&SpGUtz-c01700NLbeMcOSAcU>Og=z!QMB@9H207Q&kLbUP`I6C;ue z1p84-f@68IZ1VEL>L4M5@j#T3szZ;VJr#bub^p55lnW#Uw{8-&;}%J&bL1vJ`A`Lb zYQRQGy==%y+BRie`@6tSITAp7uU$vwAUTRd^CPD|0`PleJwV(5r9Fj@AwXn`baFhV zo23qjYnCDn`kClu6Xus6ybbh&9_=vr^?>oV>xNR-N?9gA&)beyBMIb7ff=rHc4i++ zATcA2nv^BtnsPGG?w&SFWCPMkqN69&wealc3xhyMR(7avFvVuU%jqY)nfC!g&cE07e5DZ{t~D#H%U8$N@&| zM3dg#p$uRz%Sz-2ed|~ z*KG(g0BpeWzFSQ0Jaak!qm8X3Bh$?#qSKtu#R9;AfLURWllFCq74Fc^AT3#TE>J=O zZ7k&63pAn`-Y~QbkU2ny`h$2sf%F1s5)8TZ!7?QMQx4Sn{4QRQZ4?HHoLfE-SowY( zqQ2sDCc#N=X&?OdiBof-2d9;W{_0sFQ>udnayv5%{fi~c5`fm@;cXpxWZjQAY|9H$ z0C<= zr=$#rYMix!RO;Vo#IhX}@P$F%L;}h~r#JQP{%Nn{u(tohWvm!g&beH&D+h1~v&6ut zAw~)XsB!VCQx-#cCNR2xB)@-07(~b!$ycL?jH4RLt$}6#Crxl4NBoMD z=!OGK&9~2vm|>vc$>RWlz`n&5C`U&+8F*4b?Ihe#EZXVY@(87VzzQ-AA;LuW%+Cvl zAjv=W1pk-z`fbHL5Kr+-+ zH)o*N!K10Lm4bG++(@XTUBsx@-V6HPSm^%?>S~AH<4j&bL7#8zlu2EOJZaBs2K@M7_+w z0;ZYP@(>xdAuR+7QU?VW$_xxXB!M2Vra^iFG=z3VL*Nd-Yly~I1tygC5xtf3u*F~C zBnfQ%2UBT}{*$R>LA_Vgo^}YNev2bNXpiAf2m7O?m_xJ$OrQM{tp4eTK!Rvl+chUg z%ph=9<3oT@j?98j;1xnZq{!(|E-2a?$}mtij3WpF2e|^fhR}L5l2FKX(gW@{t8DlU zy7FoXz*#xgxx^$z*taodpur~A*bIx-4y{b5S3>I_SGx;J8l3YD zAS3)94WTGd2WR5H#u~_1rmx_W)rLTsJj7l>kmd&`kAaA;9|9UkSKud;z=IH3NXR|t z2lHG5SxUop5cb=F?+kIan095kN>B(vVWF(X8NOa}7W}3&NY}x# z;VckefRRl?VFpGhIJMbu6RA0~u6hW;SEMZ)2_8UKV0ugXAKSSjrt>o`hTjF|%a8yw z4r9@}9FHrcKndLi+LR$sZ=x3<8Z7OnMnEV zH0vT6i4FRPh?I5T{)jkKnY+2DJK|pfODgsCyom3Y1zBhlOOQ zg)>a!zVob*F99;!EnQMDwugiW#HTq7^}%Tsf}BLZtNt!@u%N84obreYtC&hPZtAFO zfB{n$5HYY;$l4!(WaXf+iYMfI^3jT1@^zexg`0su;LIBmEJ$gLH{gJGgLKUn;SQo7 z+&n&%de))4mtX*<8Jl+1Kvv|2uUk%(LNHNtM2IQNwQK~@;`PkRsY5&yv{V`>Cj-X{ z8DuFLV0zfuE{AJ#*cn4vA+jo@bgA$eWQ(8zGnu&n%We~y1fzOf;hs6QI-rZ>4VBQO z>Coh6ZY%rJ>?0?F)JE85iSkv-MexMHid-t-{21H>mI4sGXtu%_87$~4`8DSP?*#TU zIXciHzuswfPh=AVBs%1QpgZ$OEr_)MHG%dAuX~X#TlOp`3$?gU%V}~iaXF{{{mwGa zK7?5H4zp;&itZ5BLlCYH%7%p?BLhhel>fsTzMSHAZ--N07bxRgb}`WLe0MRBravVB zrUfVrBm$>0C_jR6ax>BsBv%k40Bs9~{m{vQ?Du;iK>umOvOx@WiXMY`h=)wGl-)=@ z4alTchGnKOPF$T0@03o0pwZFEUuOJXrhcchc%l+(W$)*#1u)W zAORdMx`q+0)GqyhkzUt9sLqY`dA2%w}HC~TdP-)*){9yDGB^rB{0=kEWwhrr4~2L+pDN)PfC56wv0fIdP)HU|g{ z=yHV?k%BxSV9hiE(WC$qO)D%B6!B<)zXKi}IMAbE499@ea0dA-kR;?DGE?dy7t#TE z=s8X(VnSUD`t6JhKn$|dm{b-$6nTiil{68GZ#e`Ym4UZ2Mja;SUQxC zEYt%sL#5ezgzWhC{96Edz-$Bsi^(syvEUT|iwK}m-UiTifOMBZnNuZ%@~2!@-VA|= zR#@VcLXfb)*kc)n0CzG6%?8^61g-$L2nSG2(>e^`o|o+l%BYtS8NAs7K0yAw#>N0j z0-p3X7O1+NaaZ;^p>ZCHq#$ry=)02`nDylY92(NK1E!`S>x1{(zEbPZwerdkVL;Hr zhWCIBDg!QpUD+VdJZ3X6)94gQs$&B73u!y7GYAckDCq;w4TC12eh@yX0-hUWQc!IN z0%x!dC`|Y;!_XB*GU6bA8ZMN8UI2mJ0eB`P7)X@?QUGaL>RKy}uOi5S8E6=l*g?tA zN>!_%pM4|?Erdfu%Fzx>@$D51MBXn;=o{k*3kbq=64j*T`p1g>z#5>_l?^lLx*+i+ zLh6AGoS5{_wPdiQ1o+LCeL@_`P$QGCyC~>iXLIw=c_jQFq z;T^m;bCeBgSg{|N)dF%`Rvi}johSGZ;gS$=IPAvXMK<(pd!RBI-nnl%FMw3)M*{r^ zrSXJcJo|x1UF}IANB>=2mL(!3rM}F&d^c_9EQrGfbyo83Zy{+V4O~`!D4T>r`VS!q zIv&;*DC+^WDafKA&9U;baR#A#IUM|;D{x8ZkDD7tXHCkAhj3 zRG5VLO2t6o{YNQ&w@oNlTrs}UQn*$P3UzlGlHfo)HPaXq%0SE@Y2O_mL`dR9IP;Ln z?`-;J4suD0w{&xXDX(VR~M0^Oi(cIM$eKE z-p!*zA6UH`6lJ`{o{CUNhpqF|Y933k!vt)10~wC~O1V zu*NrT7?830rH=Z=u7FYoC6f92_-`yP{2ByI+TH_lg`c%T4Fif9yoU)>&9Gd7h@cgA zKvc-rT5>nUgQzWPtE`lNKmbGI(NH6J-R~R6vb=Y0<##K|GO!<}T)>S#23{@Ri5E9? zeNO=aKspo1M*x@vNbJZN&N?6!I4D?q*+3NN!^H08sBpvx&`iKspaS2wV>W600wvR{ zX#kj3ZU_;ElW+x2HXg37{@`P|DgPg1Umh1_xxU}AJe3{Algp`GIG!@d^^~c}GNhB4 zm4cy=AkoIbP@sg-KnBW<)G~7;7Z^t^HUSlofEeneWgrYHi-0hd!T=)>42v)f{I2_c z-WjmY_w)Jv)56R9&imZYyUuU?gIVsCkGG%h=Rvx8(mb&3FzbG)gnf-co9jpLb@* z5wCPn>pJdv&b*$qMs6DhGw)2SUiKr$LznUQL&7W0q(Ul6b&?}#kliJ3>di-1XVgek zTOMJ9d;QNnO1)BhP8Ey;Fpva~L8T>lb}=i@22+*`7){qHE*|zMF%2CK!e0(gTtbY~ z8=m-QCGg#@mLDA-Y;1~Da7Mght9WtdI$etbzk4gvXDB!MUgW&1wK|D zNJ!aqU_tVr4VcwMKOuA-UfglFR=;cC+)7m9wf-CTVYDyse>Vu$M$KaCD%kMip&lh6 zYlqBD1FjLCglLbj5CKi&;MkrOY)n^DVFyYOo*xGjj`+mi=^2o{Kcp=^7KIdd!q)4v<7KV)+c@-|`_B!djA(;$9I{bnQP} zqqN1VCD9H^duz2%{$1#X*xM+5d41rJ2 zqdTbAz+^;_yq-6S3>V{D3Mgor*HdfN4vLot3TXmZpvazM+S($_XtAKZ>4eGtG<$vn zWTy!tR}^8Iw*uywMo_bAZMf(*OEV5}jdpM!Yr(mno7^a3F*1|#;`w2%qC?>r7Omg! z{TFn^1m-^`_&rmU%{{a}!H$FC=F!x5$B6z$Uj=w<-33y0XsdZf;0eZqh-;o9@jtNM zsAp=mNklaN@@nnX{(d+F$jDlfgAfGwp+0JeS;Q>5IfQ_+V7JA-e%|_BuW3AfxLvAH zwd9JzV`u<1Xc)5*zecSBS0QpW@lkJ~Q)n1;vsTHD<`BGwHJF$Lb_ou7Cv9NV4re--gU4q;cdBRbuo={m)%eNv8V3D? zLrGq{abEt!RRPbk8{j|b%*nB>kxfE9SO4msbhG(dIw=OAfb+{#b+lHS;H-;n9TGvv zJ}GBUhCU&PPWSAy=>f|C$ScYD2;czrl48$tu|vIoL<(xH{7NK_?tr&7fFm|f(eA)Z zmbls2m1|=cFo+gN+5{50`1@|Zc-|mE^fKGKG~We!i3NAeYUx!OmkV&-S_lw+zh3@- z+!Xe1n;Ddzj9L~Gb-AFS*iQ(_kcN^HgSa|W`BhK3L425%>}5A^X|4SCIQ?0{K`qHK znF>g&ORb!xSrQcI8C5Sfi1Fb0MWRp2P%V*&daK$2zjfefLZ&K|_-*((M%RPkA*-9U z?t`l!wGXF%C<{Hek@7b0{JWLR2<=!$Tn>iMs=FL1(|4v*a3l8cTNMLbye~5g|_VIT! zRZCFrK#~0r1VO&w*Lq2MN8`cb$4LP}&=Z3MxbBY)@9VC1`;qjw(Wrgl*iS5P%)(zC z;F-Skrj(q9VOENBLD-ot1=DUkK@sPrVAXg`&h#@S{Vj#pfa=_wm(H)OJb3%S!TaZcmIl_`*z8hh|3R?erea z?SHIaYustQW?a8+`SUVGK&AhDo8c3xBHo@nBBkeo)3%5v->ECs#eEsQXtyjkqRF;B zF+E4-xz}}M)d%^DWpmd?yWVp5Kd9Wu&%YF3+~j~C#Ba>g{Y&*&@w~X{jxn!D>IMSX=YcqB}VzkI-QR9Ug-Aw{)_WrzxCrqjq44{2YN~q z>lD>R@=NjkQ&bMg^<%oDPi#%`zAW!t@0FG7R9fdgu;r1w+Tbr-W4(+!P4X+>4rBuF4wQ zMY2wtp3>Es_~|0q+>V2;5x(bdx)0zz!=Cra`o;zObNftfH1-4cv_@}?Xj0u%55&NAYpkuTk@~SzE4a8l6?@x4(IljN1>iS z%>^!^P)5QdGTy=RAIrE&?{@mP&PwdzUf0-F#-)8zN($`E1B#D4WKY{P-zm+Xr3#pF~NMO? zWifxMcZBcw3&Q0M=J7qHJrgv!-+!ZPxl`)0FxD}9wta~qWOz?$df3m(Rmlc8Mp;1I z9nJcm;`?DR<3|p#*H8!TpV^-14vTdwR|~JkOC^WCS7dB{6UKoPr_VOs*35orUWOD# zU%gUDj+RnB6F;5VdmGlIcsVkLg6UWG8yP%gRad3bcZU>dZ%79C!gZwogzoA|s@{q^ zckR6e93Aj!=ehWtAHv}#ih!`V8VXm6&;Xcgit4f6fSMr&C`JIm*ptf5_rW_QJG-dk z92firt1h}(+aeEcKWlZgzBmVm-*cKH$;HGo+e{W~XTSxwg$ETGm(5|17dF$6pyfsU z)-6}pg^7f4@Db0_(r(k~UyD{tQ8YBsbd>i<&LvooTp zl!BL>dmRPq|A%FGzkWC(#gP-O?>H~PkfRZNJHl4d?OQz&fi=49}G^^iL zrv6hEK5zB{bwC}gn?y$4eke`bVtVG5`@o3+?ZNq3*E^A$F2(QAwC@aC3uk(;^TrYV zQHS+$-?)sO_?~fRYvEp3=cw8Z&X-_=hVP8GTd<^F&jnY*BQ@CH9=io`}qiw*Qs9TRlycYo4+&)*Fc?VZ*695viOCeNzhbEhaUxe>7RA!s0u~ zIK5<}ww|XFLj2>TiekuF4CkoOk7!T)b^SYWs8nf%@p1Pb(Bn4ub$Gfc9)6p2zyBwRhL~56=Aup_4aP?;P7QAZ}Tlg`D z23g0(UkvHF6m`CJFL7LyiEG7As&bv4NC=@~JZ*`W$cXG70|BdKo5Egl(;tF$4?aE< zpUJLBew5sv{j+>ijH|QF@1{VH7^eeeb=kwJe)9K-Id)H#UUpv@{6zhGv|ocD zyPbYGI*8J4dGk^4%XW3@+i%Ktd&r)$@w>mPvM;XpMM~9rx}-$L^L=HgQsdRN z;Kbr}HLp$1+3FQ2Ycx$kjJ*){K*kX~q4b=#zFR(@Q<-kt+s0F^(dV`nrLV2q-xYoC zUeo$|wfFOe@cfywBMUhStUY86Y2xT=f! z7^S*olplhkExkajC+^b3dGOxv#9P?^BIPTFS>6!HCEb!J*k6 z-f|0>SUYd3Zbv!%T-5g}+m|J0Q+n>{_>haHR~9+Z$VnMNIvAVEAFgFkXkf+WDGkZ+ zzFn42@_aiZ;%fhBHWl9S%jn4>7A2SZB8xuKdu;;n&e2*Rkp*Z%I?w)8be71 z`%hVz7sT~4(Z`6S^XvMXk-0bBb;v{sfAwG@My$WaLal(_!S zhvwAe%|>|%CLlxa^VeqN-++=mVN{o%a|M2&T*H?M=K$al5Pbjq(^{m^7OG2rzW4#6 zN-P{u>`7JHAw3rN{f;+Uvrs2f;dK6ro>7kj>2f)`*L0iUjZP$Gs@)@%3MDqj;sfkc z>8Bp8iT<}u8I>3N42yTXok8iFD=I95N@D?&K0B}QYX5ALZ;T?_yrr!f1TdDlxeDuFNvp-BbTaxp>n%AzYd7tQLI zW2`G#1c3JEt)|7}U4~phw!Qsk_msX!O8Fn(y>N=IBron1?z%_v8-Cao{}@*h5`-*| zPXds$rVd7Bj#zEJEdl#h%FS&is;%r8b(H^0QwfA6`m|E9X+C0-tU*z`-o2fz#MldO zQL@KX`4H-A&wsv{`_tnP46Bug zwmlO!ec`9)72X+Cl<;d^nFi4sX||3GG@QRRo&uxsYCEvYs$|7(6Cj=byU6i*bQp*=7e2HSNOv;{RITs1)=(wRQPJd!-5qxCJ z~zx%oqoUjx5@ET$(Zw|vRCr6mhbpJozxkZNd!fl`Q%9+~I4 z>M!;1gH6+dLjR4Zu?5xopK4-i2{08FCf;BMOeYjUn%2Tmxlx+yoLZ(K*Mo^ zvH3g0d6Q;_)E;eG8CV0%wzgTe5|x_WZG36=el#&a%I0crn+4i65jv`&cBKjX!VyMY zW9S*v%ocKttmDNgVVcArC{z9O#cHSB9t-}Wi&@o@Sr4bP+*;s7O>>!l*(i1%hPC5c zxnS6quFttG`68rwsPl{n>s&s*8GtvDZ=N)#QHB6WXgw?blwfpNTEG7k@eafxX_ zt|XK&`=%-IE@o;hNFRFlO)J0Gx5fV)A8B*ORN`r#Z=)=WQts;-nC#o>t2$*?MP&?V z^k!7XnCQ5m)|TRYV;^#{CjQBki2rt%o;v7yC$9I}Ic=>j#<`~U*>_}bMKxTja++eJ z^g3$Sr>u<64D0XiF9~^RwoTssr3&wd3kDuF7*dY7UXrT_R@Ofl)?h%_)@g`bEZ`G|Jkf1brA ze{epk+tjdrz%g}S*1bgS;JL@{HI8meTsmD9e7`r4ukZ`Bg{p_z_9a%$?R-=#9fzmQf=ZL@$*^LlR7P5H}lZ<((2tjrVEyAzQ)2(0L;`bj*r z`Af3wdz4EMh(ipAm!kc`kML-?9cY@Z5iRX|?jqN)^e7vlRf43WAWuI7nXCB%Cn zKJsXcvMGt0TjmSwGn~+-{0rOkfOY$if+5DnRm2b?YfDsxyg7MS67}5|;=k4~eGFT_ zSYyTt@&jMqV?&JfSi~*Sl9RiuM`Gc&xvhnGvGa*yg$7>ysP^naIkzf!jmW8**}IAM z7-~_X7uX~pd`^o*sKcWsQG&Wp5rj{9A)-m2^$xu*!s^TDfcqsw-;pDDa>%5@BFjLN zPeq7b)bBc892@qqs&~Qtw2MbF+QIyM;<{|ok52RPtSAnf{J;Y9A()h)#laVd3a-Ke z_w(X)^UCx`|5I)X482qS4ZRHl(yXQ>evA%uY{OhcZ*Slm?K8>n;kNWRTp&_mcikQ~BDoJ%7B%Tk_A`rK z05?INH~UZPoMmXC$O&nTl5(}G+g@12NFG=Pfh-5DBousX@2+*qo2%VmNiz%Ph&3Js#fZ;H+gcO+iX}2|O^v>f?!^8p)tQRjgZTtONLQ(EL$2r@ zOhazkSdKN%LpS~<@{xkD0^UmTo&IHO0V5AyR@K(`1m5Q-C4B@&QUjV#DMP;>WuIi= zpG8w9`a1nHMK1Py;2knjxDq~yu<05)lzNC67<>jQ-2bX#l8vybuB$f;<5D%~N1t55 z?qlC{?jGEx@w_plZgY)?s^F? zU$v3fdM#C!ym1ZKz5b*-ee2=6LEpH5hJ1&Tbdn(-S$r8XOMaG)Q!BWw_l}B?a`p@3 zc%`>=_+2Vvt>42!RHbp7l3L-=H_;1{e|5jf-od-U2@Q^UE#YYNmSKT3A0Y#k!v*Xe zPMe<0bZE)KWuwcUwO4+Aa3K$pVE(vs7+R49DU_&;Ew~?<{nK(Y+K4imZ6tXCobRKo zOw$N_`qUS#lLYKezjw@mCj@CqKfa5|FwS^tDWE87S>*4RqT(Lv&CV$|q(6Kzn(|87 zTsz84KXAavJb^t#v1eB@qVD@f&+SGMFP>MQZFMDd1UyaE#h{X!!|FDVp$tV-6aJsx zJb~PrDi`s2^CFt!SHJ^@(`_70h4kRNEHyGv)F5X+>L~Xm)S+M9ey9RCm|y@(`U#*- z`nV&#M2Rg1-C9F=!npb6MOQ+G!$^B5<`ZcS2G%HK+b8Ap(;-FzIRqqCC|mLgGhug= zL)_fG^;}m(@x4wqeu~P9%S{`UTe{i~mrb?%sH^S4GCR9>57zgbNy(AD7q#~M>K3)u z38SY*le+W>wZ~Pq1;Ys ztsA6`>B^hO#gz`TTR;)r1ZEioZdgOlnTM4U16>nsZ{rv37xh3=j!j@~jI;0T&{lbe zxn#Y2s~j-twaEn-aGof0A~HJ8e~yjw?APCqlRnCL3f}?zrV;N1b_^d_|F_;54=&b@ zE09;dRq1*usR;D&!uwOIi~39U|1;Ncs2xwOm{~WaBmhr%K3VZfn0@AR)QN@Nx#l$e z>F~>Fv{rL_Uc%ifdUqo5T;k(eDx^Mb$3`D?^*ctrQ-iT%^gSh?O?0ub?*U~*)DJcT zOWpW-D?u>LB#AG*SK>>F{v(bOo%0f+^U;!7QR{gcx&&m__gF? z6qa!HD~V79!sX@^QUVXLXfg%UrPP};5B)JQ9mJQq=hE~ZlTGbGFenXTe7738h-T!; z>og;|aYSdMpKi({F9 zEmN$b4;4HF!fNsT8XJX?+v~j9jx>bMmFY%-TcqxpMz{1BTQUjq3Vx(cqvrMsaf6bI z0sSi(a~^UpF(#Dv#il7@B?p~%(}>`sLs)3eXr zbhl+5>lWT49)RC;ZYXf?yz%pcm*QnSJg0p8B@+%!P7~6qdHBe0E^Q{LQl?Oa+fc@! zS>9=49C*b(7{X>??1Kf$0vz@N@H&#)@em$oxSKbpXeVAxkFzh?XYF+xu@eg z*&0mPoD7=Y%?*8oJ%F!w?$ilhMrc}Cevm9FNbWY22gr966htl=zFF2$Kb{06L|f&s zYs8Tb0%eo*0PJzpdJ)CmT8LzsOI4ca+&`|4XF=ow^epKk=|5>iMnOjD9OMptsN|;i zcR&I`dnM7LOE4#$yY?p)SX22urue0#7NY84IL{*|a^Ukp;Qt-2 zi;;G5`q{yNCXRI1D1tsD-x2H0tH*qcJ&`bX64Dn<5B_8e>gKWSlS=$SqSL1sLZU^XQ#gWmdX=o<>k)l!r# zj=jpb`s(HDuAf-bj5OjA!8+s7B{UbP@-%`(R1ZcY#ob~ndIO2!ON9ymlzE7s zB~-$A1|<|z1PaODThY0;M9^G$Xe|G+qTurFGqi0Ghir}MIu(224v+*L zlA3?kZ;(ulCh6evzeJwHC^J4{-wxX0f;?(ZEJ5`04sC0{1tbd?3#|i$1;D6Bp~d~C@eqD=B=At)=$=!p zm{u!HK&MM(URejC&&^J&{`*WXJhb6&0hvCkwDS7ZS3d;`-J)q<3baTN9G<0^(Oo?! zp^QEj&IvV81<TTL~LWoLDad5nAb6#Lw_}W(aOz*&;GRdJaubj!zOfn2g~+t|En)Jmd|w8z}%F z=VTabgw_-NfJL}SEjs7Z+wO7*bWAk0qI^+>aoEb$<YL=u1v~ zj@QAA0;P(wLhoW#^}#F%M|X(mFs-yVgnaez$t4(^6XG82l`9Q&>%!1XqgThG{Xv+M z?3Z$IQ)Q@aRkICLXf)eB_z01Vz%h?fmL~gP4I6)X1!6i%X zLV5VF;P3uPVoshr{pJKpe9&8vY~nZ4{7F()0p>uqNTLYVKv20aXPs4{BzPlZ7TGCX z4q*M7*-&>9pr&COdxLnn63+^>@n{t!cc!4BccZ7R2VlhzQq5TaO-?{rs8IHLSyN9>SEgw+aVXk@HT`=jO#v7jzV>)G3KB4ojuW@@ zQSjt$fGpgsFtY!N{GjS=5V`5MGMW+KYL$$*mw()FP6# zS!p%V??)jJIW&$SKntn@{|~-9%jJpE5DR%i2y=+1K<7x!l9qTC z(E|ysfrRA9EG*+bK1m4iL|QSe?^jlG+0@R@I;|Z?%^FoGOm7V#mi$1?4UG*&{7`7e zLoCB`Xi;(L^BC6Bz+c#_SWNRBPg9?0X>8c(-Mz#Q{T z*4SsA2lOHGTmo70=wIh#d=oU(QBtdsXZzxE0?3!BjGN;e(1~_c?g82i$_(VaTK&h_D`x4Vdf6Bku0D0=wG#?=l) zQSyL}gs#dLq0NRq80ni*ku>lnOZ!mcu+Wi)^IJhraslEgng0wE}|{5B=L|HDx%>IV@3q)!!j6xs*8XZlvsb)LA_SB2Tr zpFRl<184${Mv4I|@)Xi7ljd(CCs@+C=n|+ANrQLLE3p* zpX2Vmm4be`)ijB$?WTUraz9nXP!L-xqfvA_195Is2M zqHE^U5Qy#7hp$nVLDIywRr4aYJR)_ir!Nz~Ou+y)mQG)=eQTm?Z@ew^?&`D_IT=N2 zxS&zK-n#owgc6zS;3G4UXNbbZN?4=@RQ*(Gh@po|lDJraGLTF|=doVLs4?Vpg8CW2 zL@N@sV~;a$)D;GQS$8W$Pjz zs`|-prOM<6@?egQ&oD1fQt_trJi!KNOLRAxJr8OzGi+i63^BMiXPE^N0#yOwI)(CS zho=4g1Q_N`O#p6F0fsH;Ha*)VbokCHi#nLu z-a~r3l?r80d&$%rp^yJWTA-N^F0LRd_slH~6GL;s@)GR0VViRwM7vKxu3Jy=w4UU? z?QXyUMP~IY&l{TfWd^0bppvg!RykF@mS6FF&{H;$=i(XTDF^<85FB%i7@%3GH_K_I z*@zqk(XrAAlg8HObV!RevvWCP>W{izW*0zz51j8_C_AdN@!`}T5we^7Qb|d7T4uPD z3wo+#A+14j7?jqqtIcmMoCWfd4_SPcuVsprZe5(L@Jp&S_t{+x<*J;F4a3NvFhP)nn^>JxMgC09 zZYOHiFrG54L`3!i)296oOe=FSAbqpW$Cr#kQ+fOw$|qJ31Ziw@n3ap=4HFz{`c@L; z0lK~dr6-uKyS0rZV+B_6l*nx^O(-vwK$t36O?Th_h2NNUaT2JAyo=5uLGQ*0n>U6#YkqUdv#5-~9_&1&iruY+mUPRaM9vN( z9GO>3|A7w+NsYQV8>bQFos%}EKzyQ3>=y|YpSz0cgT7e?77M%M`y)ytDE%~oNbGR1 zl$b$|;1fw46V!wKwfPeNlaHB5y#1e?<8kYL*>m9~dV;BCLUjb#isTDFej`nrfQ|}p#mbJBw${UrNZ06BRn60n9e77^*6Q1c<3#;bB_Q?CBXV_jTsw;xPD z&U$tc6EPykaYzOdF@r?2f<}{sh?;3Ty=aZ#q?yuXa|mk1m-tN~jiwc|A;meu@<0rm zAe3PdJnuir*ev}HY2ht=q-WhrpPMz1M{(&vFNm{9Em^2$Wz_GyjHZApk3dS)j5uVH z$OV;_Y)KefpxBv~^L1&*pHJ(qPN)Kx?d}N$JOM!o(yFy1~B z?zHxXMbr>MmcR#thMJ8yb=pQL*$P+dL`!Z}X^L7eVcsus+EenI3IKC#lc(EpiNq0E zldvtf0=^JP5q0N(v|Sk?(UEdr>C_W>6+e|o^KB%PHNxvPavM6?I4lzfLo^@%>n?7J5%Owbo&JR$`U ziR2>wMF+KrbQ%)I^k_OeAOs1d7+0>^gF_L5S~x>q&hO6f)iwP@84MpDPA|J0VkBMya4?TKiC>}mz*6tylc*Alf3Ci0BH9T&FDFc?Ad%^g z1ztwmEcX9r<Au9R4D9}U1 zoln}Bn+dDRw5Mko<|XfTEs=%U^S`>i6J)aVm$lmb|1O(fzrZFzwv*yzDWCrQ4eV2; zZNW6t`u0Z#My&Nw9{SYS=jbQ_T5%*S=#D&!`@zoD5ATZ5fL9E&H$k{imh%;$<%e-V zo%w`pd{h}O_j&oKI-KV+AO-dciE5b5aP7UQ2Qt9y;vcK8#(<)A>d4}ulHwH|U~KtJ zI(t?=6X)5gI&lmy3a9L9f=MgU*6oMH$2tT&qWJ4D4frXXG3%!;2L#i$xB2)SUg-fG z`@>^BziAZAuYx$=A>=M3EI2<-$Em3ZA&}^3uplgns>ES%qAKyW1Gawtd#C5_dHhPs zv*GtTFO83VUVXmw`DNiI<>JF_-~aOQJ<9{0FX`Crx^&MerR!5(CbU|0<$yGgwVdxg zoP9c^2|i%{Iib_2u>X1tu|(>i4xInZ)kTkZH)+6oT4f!+P1tyo)^?H#_U#qt~imByxqxi*ABV!e7ZYZEiU-|>qUKu z!Qr&3A$s5Af#w%n4rHGXx`K?~yMIM__Ny0Ovg?JfMD2A=S$nwqsQ?GM>p=tLrWI=>g^lgO|${o6g*eM&qsMuOpgl+7rj6 z=&`CPn_>}}J8qQG@9i@GEx~vSoo@d>RbE$eKhg|f^O;bMCe ztXTV*d1qt;1X!>3l$y3^f*O^FHw5yVXGYTdr-bYuqw1Yg=id5I4(tb8Z|_~RP&W70 zi!L}fS=XKuYcWSc=NP?w_4imSUM6RP;TT_VSQ6etbW_l6ZN<$mmmi~bhiyJ$GrTmc zqwfWp3DWX0#iP62ri8}zSzf>MTTIz+rIH(LsOWzI3;HJL-X^C;U?3N~Mn(%+DT@b? zLrtPb-8i^T+Lk2ja^{9?)wLd&m+mSJ6{nhOUeAIkb^00M2lw}s?mB{Z1N+dl1FN)? zb@~_JudQ{6*Gh8Jf_|3=HC*T^flBmndt&!+A9jP}EsYV=uP@kURG;=%>TvDB1Y^Uu z7wOYBwdD^yY1x9?6Hl~8A1E}zllP7EiAoE7yQ7_KSxTN!@tI<`QGMAjcJM8Gk+{!o zN%3ZL4RsT;(%#%Yc9u@$*j;bCz$TRzHz5a^p4Ej5?`M^1EgM%Ah8bPm5o!CvN5NsU zZ)iCJ#L7E(-;D5ULy#10)LEJen(1y|L^&Y8j>Rx8^bFFvU+Ff2~8ZJO9v0$|m7qk#?EinB|* z?Bb@!_qaVDyTsuGBKlolOp!dfYt4J(7U_SsS=Li(iv@d8N|>^V?6EhO=1Ai%njdx3 zFGX;0AY{Tk9zoQ*Q9=oWHV#pzT(}uC1g~td$W>}`r0FrH1)bOz3b_>`s@&$6&n%8U zH%xM8#8E;ca>BUvHRoyZLn22c0`j=Ix5$ZBe>~)22FOwYj1nfmF=HX>ehPnbuEbP1 zv7jC33U1Kjfy3?C^Pt$R*2{|XJC`-Q;8NOnwGEL{8gf!a_Ix92&`ru`QjE!Kco&Wr zKP3`SGQWZdoS5ZURe?ja(~qtXpG^LI38G;g<%}CS(m&_KD3<5PzbNapcmj4c=L!IE zuO%mJWPh=ksaH0{Oz)O19zB5}=jYFtLbFs^=SAF_T2Q+Q@-W|qgZI4L#B97#5H!_h(M`o{!`WJTiwm(j; z5YS;Kx~uB^A5KDFKa;YiMITE3NQrB1tR>n17BRSXZM|Fh0&MqUL+g4@951+pTD-18 zdV2>*NgQ@Mp!Cq5x(~^O6oQyYqkHGS?-G;wNMl6aC(Z0K^N=-An&bB;oP^Ij z1NWrpc6l_@*ws1Hl93P=R)e}km)J~wx+)Z&b{O=FE=KWR#j&j5S=}MM&WdyDz#6i! z2xist6MG^7c<;)!p=>s{`KS!%PJiSOFBN1$uzPdqMEQ;zUs0x&FayO2VG~+ECzLL| zr6x2_q-wLwjvP5Ij593I0qQUo2{nILr~+cX)A3%j|jL#DboSMdv{r< z=D2~%W5B9^vq9#r{KVYj@r%Nd^AqYvZ*1%e?<`oTqF8-s0^t;ZkPbTI>_Qm@euYF- zde;Nfyt#l6_s)9Gw&{r`${HcrDuzi-X!$r-ehq)h3xa(QWS=r3bh?Mvx-Q;r`&!0n z?@MN*eAglKgV|9IQ+hXzdJ1VJvSGw=Ma5FCF2A`?uLyk@cJWJ1v^PwQbP0vat}sCB zFlB!4Qv6Nf&lphn#mYg|mgID&FF25|-?bq{bu0S7I`jH$_5QxS)6NwC%6#NFMjv}8 znDO-s|C}GX&-OLOdb8NKe52nspX%8=?R6LLpa%MnGsSA#oMCHgDgs07&j!6GJ2j#% z`$R(H6E63S`|Vq0$ZCCwjn7{)S{!g?jlr&G3TojIo2M#@tAB`S7;&TH&D8AK4Gur! zC!tp(UdsL&;)vH$8zW#F@u~($Fbd|zK1)9p{~6sHoysXZbmQ9{95)O{5EjLQAUv=k-e>I&$ z!@sL4q)uT!Sh-<3ib}V0YEh4sik#4n{q^#_6L>A93%GUl$RHT9H#d~(R`R2lS{;#Z$t4zs{}9xkw;R3FrX0i^tO^ zB@m7tnSGWD(Qqjl^TP4VNIq(g2Mflxe%2ZD&Oyku?~y>jY5a0p@v%LC)JTMGQ;OBs zBGy`50iH23`xT(qDVtIVYwR)~V;Tm@QkUgJU(V$y{)E@u{ z>=#`9ny2Hv$T-hMzb`wGeO(KnLRKt;Mh?EgaAj63md3?L`0?6iSn8lRj{<_$)c^xj zaL02Oyl+|45|oS@V5V>RXcD)Q{%7IbkYm zP>Pnu%!4aFQ$YaVJ^7@{&gEHz1tB6z%$d`!_h0C7)4%akKV{kvYnLqSYxJ|%C;qD5~z=~6dj5*OCdmy!7CruE(9RG%R@giTa#Ew=ASMNmH9jXg=*-`O)POzK5uFgQ4_SgQ!Z2 z)-VoGWm7=2 zeA_&+u@h8@wU1tOTf5&D`Q;^EuhOqnv~S6a%z0N^$2-7BkQZN`mmwG|ilWGb{R!`| zvxLk|M*Nr<=5420aVn7jk5=6NF1@X~k;vV~1#!-Q`dSGf4j2F~sF%l*d1W!y}C z%89S{_l;ipKx}kR$^7@PJsx{2dgEbDkPe8pD0=1hpuG zYb08YOV-5ed?fvVF@KZpzxvvsH-GNs7 zYQzH@aC*G8@W5`vMp%X-tCzVi0y5T)kyEO#rFb3m?nYt%Rlpe?m$%3?=Adxgk3m_2 zZYCH|x8rek)PB;9gPrun9ye?MN5N~sezftRnSW@F){rX_%>8Tj2cxcZ6CkHHVKqVg z;fT380U**!L*&>~QZL~64$h#s0d0Kwog^aB|QJVxU%w7nF<-&8kI56z)i zL?u{I3-}d7_7!dYKBD?i(KmpI>J>LzX)mHkkoHYmYVoytXx$_X8<%z1Ti*s2WD|kj zP$C?5UJ>}ByoQ=1WH%0k9Am-oy2s*r+7yv)~0 z6XX#@z1)u6lt_SH;U&emj^QgXMrJ+kP zrxTP!=d9XD|8AtGa=_Kr!tm{{XT^8>0hP^vs$|e$^kU#%t(NJvZucNr!0o_m$1zM% zpC$=4q8b-(7!XfGHiEx@2yPOL^v{~!RTf%x)L=mh@pTfp%{vIUWYUFPB6$&+&e9>Vb;PFc$T=&jp|Gb(LO#xP z1{8xIT?`7PxTFy1_e%m8AbATyw3m-(d!ruTpjxGqILP#L9)O{>JCl)jYXG^!1rwNrnm%5E{m_87^XPcFaBFbd7-|+GUe5wzT4(^O-UIB4`sChd|LzI(A z{jQwH_>?a#&5fX=LS+ZWt`&Jo2M?v>n|&5=pSU}IPnTe+0q4Glnhif>aUP{na0J%O zn?DALg%ALbAUK>eB0;(^(ZWrlgnF-2M^KOL=UglXAu<8-^k@l0cFDt@VX7zK>ZW9F zCM^sdSNRK~-#?AXi`6A0Z`slevmD}S8UUcQ?c((*CBk>dy&WaSR}_|=n^xCXf&OI3 zF0j$yI}kn-6vmDbSG3n6?A^2{^&|KTkAu->i>UdYne6ZM&1{dO0Cotr>_TE}t;8x@ z(K{>l5s`E_I+$}A!fp?#KSWTV{t%^Zi3HK1(*;Eq4+WSK`a`CbvWi%=$n>i~e<1I@ zj@m(%y65@NyYvQ!CMN`G?j2p!7$7&-*m3Kl29aI75uQTGeMdx7aQrK2Lr}BSsb__p zx|!YXFxKF2T#j)pzw8IKTo9MQg!upbM+rzgQ&B#X=P5Ox(Trv3$M}Xbo0&i;8MrJkWy+MlUVx|&A!gj( zM@YD%d*;B#Z#u`&R0aT6VdA)Td+j(8%Sn@}%#GF@6!jQLe2h`VwH60A|mWZ@h17=f@~UnM)=;Z>Ysdq^|*6shZ=S z0<%6ppuy?e*}3fM72@X%m#%h~7R-&k-zC(Q06?lhv_$TrBQz12{CkeilW&LCUX5rN zby?AN`h!t<{K%v?!BgJ1X}4nY@A6HI(koWvn!y z#IyJ0Ma}+NABWAMOwjQQRjW|&dFD7%_Qr~9mB(C(JKuCuq}tZypN`_(kTOE5v=VI= zOwf+ehJ~@5Trb}Q+(-P)ro$UY`ALjU!UV%1td=V%iV68H-)s5E)ZAiBC~6=e-_D z$Ir(x*qg&@^<2w7z$ATnx3#|5N2kX4ve459FNo|1eWHk-#PoH!Z8*|St7%0R+qQ+q5axRItijq?!PBo;;MZ5 zT0_sFni0W6!~{Bs)NaRRaaPL(20!PR5AFY zZ7-d^t$4nKnKWFM1hyuggI%B;|tC2@Eld zcSWG~vq;UXpG8NIGeMdNz}71)T_LF!hU_^}dxJ6-{81QLr!#AMiZQCDvyt3nV{eahX8Zt17<&{bi8oAjnRf=5)bAVruaV3+NL*kj`; z4D(i3fZVw*u(IRv;xSPWjQMj1&wex1P>rM-H|z&(8Jd^Urt4ty$GYji zSk9%E--~(^Oe=v9VA)ByR$QSVXoTdYJ9oS8In1aLZqr_H5f<7%EKow=XE3$5pI#ak z0YW5em`cvfv&ir?&mxc|NC6_A?Iz@iwCb?A#fw@+k!3Gh%_F0!Ph0d#^$-aV=iMS3 z1&xf!w+u)Xa65{VT^OAZ2h8iYU=lbLt)Ht~E7AkIwl)iDB!pUG*;z17Er2qsA3jOp zgt=VqocNm)|I5I6Q3J?G$-S}rSlR0&@d$ZGG*Ye1c~o$Efpp5s81OyIEjh+xI5|Z~ z8tGlo3$+5*_o3`Jn0(57>0!E=+pP&DoGAktj zk8j3i{JV;q0+KOM@W_J2_QgIvNqewDO%6wMxMGYzPl$;VMHCgG4ap<~%4)iuos5*? zG1i13Et`fjJ&&!a5$++-%!#4OI0pj~bjF<^ia;7b{3d)mLH{%4WC&qrPlDl=N`Y43 z_ncU3&J+9&=?{d=j>#ecCmDh&q>&RlrxNlZbg)ns_FZ1%7z{dNdCD8wgP(420U1n% z3=oTi7{CW2MkSe`((dW1I4SuG{Gx^f=FNWSo{j`nn&ICNzr4UP2n;}hpNFe=)U52g z)4wvqiCERqxB8v&Z-*(}trNF2sFp8&FG}|D(a9Ylz9ouz(d`wkl2(9OHpZe6&=c(a z=?+Q6NJ{{$NaSw=$qFzrk7!`VAK9;1uC%X5D70 zAP@<(mb(gR!&ckyVKbb)veFFpvbSOy4P8ZZV~ZRYyZmgkP#XQqqIckvKPt~-1;(H_ z!b>EnNCZ9v48)KmLj$D1bZy#cq8MDbWRlvBn=1AG{sD)T>NqxUj~YrXA{2xQ2nX8^ zt}~y?hfHC6@x4(E50)BVqAn40+a{kI`nFw%bbeCh@fhwzydlYJh-o|^sOKERx6K#~ zA>Td#LYzrow(lVNWhVi@ov1qXiZ{{dmp-F$Z5nf*O+$7>VZTwZPH@VUMW?Hocv9VZ zsd~W+LpWp_KGGD2$>;sp;Uefy@YhAw(YTY^JXRgr5c)-p`oln<=qe)IXq%~<6k1t zQ-8RNTY}a?$U&mwYGWYyaDDA~G6W>Ca^g`wKzYI(O$gM)Q`1o4@YU(75;QoYW*L3E zLL*46M((Sd=_0~iD2TzLLIo7Zn`#0Rvh&J$O24Vi82Ks!6jC9i1+Y$RgC}uO(%j7{ z7^2SCDRruwS(<&+>3d3pY4Y*7*|Hr0X=oi3+ zR!qQ!;PRWM^aU!S#80zu8vzmew!~kzt-+toVcH5DBWb@QjAu;rD1#xuK*g^As#|TwkS-6MI3`2pLVc_dBtgn zd;kmpJ(K#>^VR+9M@^;q+YC_s3Q<`aD2RlC zT8&Ojt2vthk|OI`bmE;fD<(C}khN1Rlc<{~9ej^Pf?2A68H{b9bpZ@!pj#(d7=}_P zNEk>F$6IencM=#yB}YcV*!L)Z)V@c2l)n0xmN4?YDNX~ZCXd8CL~<2}B_#Xh6DMdx ze#Kmt&w;Qxa+J#5v509HOF@n5fpKS4QgTf$zRZ2m2ol~7m89YwX`YW`5^R_q%YS=% z8pudwY7j>F1YuAq3Uu!NmiM6YA=-K_9iSG3$JR&V4a;ZtD_3hF0g0ltXP(f%`tOEs zi!3SjXJpX^@T@ozfg>b{G;3^GT88sNTSo&yhWAV7Wl-WRSR)OE6j{BwXdesegrqeR zA4z<79FZJsl`Eu{7~&~3tYzw((Sg+}1_aD1ih9vFu2-T-Y(4i&hdC-=S z+gk}*WlR*{bmYEaK3e?pbVz=1a^p>E+lU(K(5x3xiMZ0m_=$rqrJn(6qYY7^4JpP= zt&wva#wj^O((9%iDqUy=Pf zpZfcVsA*okiEFPwv}-2BJEc1~YEeg;3TkGxZ7*cFhV^5P=7)g)ORs}EVe{ry_U3H> zmUq;?zkGeaz62`d^_r=n8VuSaUsAAE*Sr2f^o`&Zfn+e{e1#Pa!Qgm{?aF8NOey10 zbR?s7nv%;IL0J{NkUU_s%WPmG=H;-hc8ePf5b9cO2jN=n3z`#7c^gSMD;qUs=3W?2JjX(WBkz@$^a1?CoLdlr0$t52m z;p8nt3A`vO=YJx4+3}9h#1nE3%Dm9ROEYVch%xxLo-LwD8_gK0hW69CNeX=cI)1__ z1ky>6Ng9#aCxt47tOjXXB*=Pr1{%c12%jaEyCn^Vq!-F3%^m$dCg5=@=lOBdJ2bD3 zBSr^6asW!mt3Ba=r*;|QUBh|!f4J}Yfv}6NbRY%XWqynL2im?63M_#0CEgqdS(;WkK_x*9Jdd%u0?{X zlIRhM^fg`!Uz4RKauVb>oDu&^fiXK@G^*auD5>@klR%Q@RGwPW0WtNv{L5hn~ zx{OH#w?M)(IE1XV`yX!looH=3XI+c%g<$fo(|fbsw5-ylaml8(d9DqB`+17MD2DEa zAUX+&r?XiAPk2NNPLK*9_8@_eWWZ+t>+xG8?qx337hE^9cHp`V(!>Fhi`VirXsY#f5Q5sz6Rk`Z*QU?~9r z`iDby%X6enZT0j(W_LY5i4;@uS4LzInS-1$+%dWq12HC3p_==xAE=LW31y3s*@lS) zH1HRN>}i^D_lr) z^TivH_9u~SgdpX8(jiEA#6 zpLgU~QxeW<7>IN6ebFMk65%DCIVIa$XKw=TL@~+JDjhsq4{#xdU0?zbTqn&8fAV(E z*Wr!ps&K@NBIP@SP)*h=|iu_5eeHqT2&fUeqYn1_)TeP;oo6q@}D-9&0+ z7q;O7RTU6X|DjsQ9^yp~Zqb=?-O#*oAryOP7_XPd`b|Q44y-xP1WUQH-xSqvP8;aa z4)p8t2Rgf520B&w%eu1eJA{L5JX(PNqnn2ROY>kF{*&qye{wtpqd6*hh#e&2F8zBl z91IxX3e4HmOxtBneoFvO}D)pYKN1P&t+8l4m}2N7_F zriwR}>XjrFh?^iCQV{i-PTXdKlSo;sjQmd!;T!dTnSFQ&qD*lDB5!u#4L*22;_LJ; zc6iV)+glU7A*V=UC#3VIXNsBR&Byr{pj%Fy$gQQ*FXYe(EY`5ZtS}&@oW@!F)0Ew< z`UkU%pa1^#3qGH4W#+-img7H-iq0DtxB9;AE1&*g*ITb%869f8cX8dltK#W96BgD) z?+V^YN~D7eCOPoei5uoe46Hh-a-_ffHemNu2_1l?Ch)^IgoG;z(>m!QsQ|SA?kOX> z-dM-!M=ctyxoEY3lZK&8$%OnIj@sTzgRG?jF>z ztu@+ye(12z+Y0?+^Ni=>AG;i_0hNbSk-tQ1Fe|(hcci5&|777ne`G_C?dHgayyL0f zU)m@U1jU7#HP;@DY$(iBn1Wq8)?78pTZgZ*I~GG1`$}TgIRJt}1TjCRA~0CiapPXx zfHv=U`GE;qyE{_~KGUavllFSnK$qNAT^m-pd1131K75VA?v8qPMK3=%vcKBKIi{ny zu=b&(<-f~)QyaG#&&{p~{cl7=;oMl14#YKKH z?Lv+@%Qk%0qvgL1xVU~eJHg@C%}w-Ry&pZNH8FpUL7$%=FB^Ear?hqWV*GW^&m-~o zqjsm7pODS1+rxh@XKZ&h{^m;Jj!61@IxSW7hf%WExu6)<4B^GUZNnpNdjB6^?;a3!oxP8@ZEk6+w1t|fv1X=;=B{p< zsF30%wFL8mfM~T#m?e~eh;rFn74w>fS1{eHd9>%7i+&U2oVh%~U4vwZ*tr@B0c8AVRDp3=Fa0_i0g zUzWeSDSQ#XAYth@Q59>pO?hQdGh){r@%d$A%tp>*GmV;4{5CUF{<34`-$i!2`9q99 zzpuM48_c(XOGzx_--Wkuizg$QFfM8=)RKFL` z*GKU$>ue<-ac*5M6OEyOZM-8C84!*?o&OyE6rt#osn;7z8)Z(M6Mt7d+oH~`Ye2Iy z9AIIG#87kGwkXR41hd#iY)k)3OWPUq`U!voHNpEAZ%oVSx~UP9WtWSS=0N2;@M+t$EG}e7x90UVYnVsM4!~4>KW-=yL$xh!v&N#P z&>=Z(seE6<&rys#i2j+dHcK)VyDLj{PISqwuy9Hh!agKXDQp+Qps|ElEMvp6YjF@} zy~jyv`7aBIeU%pLYmrgudF(HzTH`qc;*G`&#k zLKRNIQ>w|v_^iX5%sDR~Rx1(egr7RB4cE)OQwL%?gxkT2W4J-K6VVTxUN+NZE}Ekv z%Eb#C=9V9=!uf51cV?M98L1j?_v5ysaFvaB`=@GSb>(0dscI_Nt zg`cK_g+~C*9E9@}5UZA2AX}i0S^4_5P8%7^f_nvCiQvwJa5De&MswwCk%?G9gpSjk)NX$okpa1@Q zDi6SPx9|zP`cX<8iW**e@tS0@oY@zBOJCRS|14|f&+sL)FVNmq<1K6;x3uoWo4!Rn z*jw}Lx0_JO*gj?CAkgOZ^yA=iE0+fJ>z*!vA%c8=j`T%}r0jrYD`=J=qQJA>e-{2i zagRZi!E2R6Val;=c*x8zolbOqJ?IN*&y4t|_A@LC9ip57t&3b8;1I~I;t?GRgR?6;K$9q#>F=r*u7@TkI_Xb@<&tq z{0RqkC#O}$brPU!?uLJo&48@s#!BOp9Sz&7yo>;b>xfj*oKyWx749ekD#O$8xu0J8{|`3Nw1t98>yqI)#;io$SeAAHbE$rOHMQg=8iMq z_YH~O3BUlO)J;45Bq!8l4t7UI?DEsf zIb7$>$1Ta3oNwosPt_kk(A#AUS^93hp<58%4oIZcRJO-+XOrW@rk>mm)~uB9GZf1h zmzf}svFFJ>XJUXxf)H`?*)w6+B2j9c5zjOVTgvR~a0t68bCH@!!Yw<8^x&9NXChwROcOdv)*-x?b&;9#-g{p@uc(7Fa1oIww_9Nc zUvjPk&9<1DhC&4)OJFT$zR1b$$4!!@Ay!S2BV|e)`=i6r>+Q#`4s2>H(zXt37AMW~ zKV(H4Oj!sz6A{Ae%MI}lA`&xZkqk|k6FJp~9&w*kWW!J~Ma&N!K#S*~7>mX%MAm9b zU-qtg83(67#0M^8I84C>&!4@^BG@*{)AHh=O$-JmP>jvT;3?IVAK0#hq22M*F~{Yo zZv3D^8Hex%BMN;(&)5jAITpl664jgoMqHv03Z7qALCxJT%#c}jH;Nn;4V-#A8rrg8 z;4rMfRa8A$;@DKg&*n=u$-r#-pq-#)xS_@ew#F z4sV+^7JKE{pzP@*1)0~IKlK`wx2gIKg2<=9kRZRkiBnrDAmrJu4mS+f_lOza)MqNs z*H%oJv%=+RtIK7g0b0u5ak3B947}D_JLIP6O+Sms%$)K&z(Xq zT-LraUsPQ(Rb$b>u#@g<)cJVel2s=c@4W~zB52^-5TbywCDKjMFu_%+J)iFAnBZXj z{_U2r(}Z9sHg@K%+W%tyhaZv@>=n9n)WN{;7?h;{E+}hVcHr;{q?)#nC;7ipJH^8%=`!d%78JhLzkzKOs0enUM(W5hqm`ym z_z5;Nrj&nUda$;PU0?#>*P)X_8BHDFii2k>5x;Y*9b7qmjer6IX5{U;q~%j{W(EuV zg&k_3GMgQIoVzZUA?YM=yS(&P7!58KxWK)y9u^-F0OF*&g_JU3%pzsi0S*4VtuJXU zsK2#sriMyU2k2C=HaD%SbAmTxdw87PR?YP)Q+Rb$L_NOEH25^k;F*Pxi~u?crV+f- z?;cYMEJ9jPt}_Kt3=Ue_y^Dd$ybc~|!Z)GU;<8;vAju{Cef1YpqI@fN z-TUU830z#1xg3|~?@Fc*wiPE0wks!*C+?wFGuT!EC$lELA&78}>g>xY8@1Dv0d>P! zYqsE^U|bGfv7(9kZ;(FImaMK+HPWXozM~nhti)`K`7#9CAHRQMcg3}*oC9`xNm!e= zwB5plm@&1!8DMI>5L-dxq%Ij4l%NTZ7TL3fzK9A9hzjikI^C>kkK0HwDiFX1)b|?a z8)Rz+qnjKBATEd;Ap-$LH1xe4Z)^w*`gwo%=JU8csG|!F2-{%9@9ZclGM$UO-0iK( zEym(C17hRP4X$c-))~p!pev&i5?MCXe%=<_(lL7&T69mMsSeF{|22Nry%}_k8E+ZR zHR7k`pOC@qU{8aYd@Ohv!0gx?md3=$(b4W}JU_8-G3HHwyT%hf4^a+;7>1bxO|2Kl z`}A#0^xf}{nZ!@r_yMgaFB`(<{0Wi3yY993b7uboCkk6C^jlBVEqXDGE2Y)2S~@OvQ=G)tecgfU?4jL($~CUNmjHrs7eTf+v1` z8FW>}!Gek}5(cd0Qj6Io|2pF??TQP}xLG}T)%s{+1-GIq8sj{Z((a*xQ)~aUe{wa( z5O_kQ7<-}J{pO4B&CaNZn;(1|BE?K<#5ZZt?13>!wsnqfVLNw&U^Rle(6JlnR!Zrn zf#kt?+5g0(9E`)2za-%zJ4bgvAHT|&SKHkib7$;-Za%x5LB6 zEV{lQ@kiZ&X{>Dail`leb`eAT=oKi!G7ZGhGnw|vMMt_CJVFw};*$u+C7BVw@P&^O^DM5Y{b`Gn|)+i#z2P4)Xi_+GL zR?8~~J%Yf9Rb>A05`d{;b1)x{91#&QQ$ztRVpd-lHV3_A*BZQ+;|8DkPS{9?uaxi??Xa>CsDQ)?eSs81xz{w8N2}IEf;=Hu{0gsq z*!Yq;-VH!Y@fw|rGT(*fjO2FVZJtd1)iV~#Ep6&dqlm_`;XV$OyZYdf`m|e}cy&wJ z19Q}JH$KZLjJ+Z>(8W@=^1(0L$wkC6&^&NGV2#c@Y6NP9e=kx}Li=R=Crx^gQNVpv zhq`200~4&R&J}e#hV41#lnB6`Hz@)16x87`4yqs%6E@@CL4E+i4%WvJJSLY~q0%My zHSSK^vMi@xB-wbouD!H!VchZrj|dyXHAfFMZXFdi0>_W0VoZ?=2cqBARhO2X@BzBs zt~3NiMQ$3xxa5wkc4HdTGgRqFxgR8w`O0e*R2Xf+=Y!5-aQdE^T2y$fVAfd8? zDCC=H6g;_ifSuaBGo1pi6p7}OdsNoU`KdxQ79ygdVDn7X(4srIZ~ydARvOp|2;dOT zOP)`v3icy7Uu`ng3i?MV?*YKN_Lzy zVyDTkS6J1_1D%o-+(KK^&nN3`VO96lBu7yG%vNuBfW%}8$PX4+&MW+6>jxF#;?apr z@^@zO@MqqSLJ1J(%oPxEUMUrhm0{V0^IfL4AN-o3+mhDbMnT@#`<9>({{%*N8 z^+3ZTIi)~E)fwBH0P&M;o-hbF2OIs*H3(=-y83;a&s{A z6rTDS%leoisp=uYsL{QIO4fgC&$sbIhpgeOhLR=dy^*v-jt8@S1m@N*d|e7gVaPPT z(GN}%m*!T%^088Y0VKZ`6S2?*JW&5oJ6fGlCL=oJTG5as7WehDIv?JZgkCu!)PQJY z-XMPHAin#j9YmXPl^@^A`|1zH%zfxtkcUr|FoWUq*9QM>{2 ziRdmlt(oDn8~}CEi~b7jUoImPKH+E_Dx%i`Ic^bOKYHf+FqVp5W>FOOaSF^C)KqaZ z6ZiVf7iwwGp9(VfiM~YLfR^Nsu+{YJA_l6zTT>Lg(}jI!u&t*r?VE#lpjNX}#PoG3T5fOHn$x5Y-Y zp#4jEj}J8IW<*(>+u(`mBS_yx^;fd@LG;nGrAMM4qs@j7Q{mJ}**z@;)PmTzpYv;e z;+(cnT2c!e#hih(M*Dfb(Va#eq)W1uxN_g(Fj^Q{|{M!IQ1|#k*KTA{r zcw}@xI2A#TWU&zHCjxDqU$vMnxu5K0pYBT(6sH~YBTX2`;i>_(vXz2vFj(aF6kV1E zueK(`3KEtGq>$?%wc&ENDdpI~#r3@iRi(%Lu_0{){jMgIsSs#B`8tL7wEZ>gxWm;v zR}S6%6K{T!e|;pyF;eMKFk^$qki|L}$y^$!p7JA}<79T(s0$eU`>epV?|Tf1;Olkl zyb`S?6!ag_49+iqVHSg2Nk>LVCnCKs7K5gK5|uYq5K*1tZO)gn3s32q0&v)&AoTq* zPyxxKyYU(|Ly+rugw(jOXA%NCas%sj4|+AwSN*+(n{Ybg`xqcbGeDsBl!SA->-RCu zm_H-c<;nqQt0GqO67(bqsPeSt_Osrmm0@aBSOt!TFe8wQ*${YFn5&u@=R%KzS_Hhi z|Le6FyuTezGoD$*8amcTEQOK5O5wXO^GW)f92}IEnV6ae->mkM#Rde|XX*w9mYq+V zhX|6s-IqGMvVh`;up_Y$Go+UA8hq*<|m<|T71bxbbYP-Z`-PE}#CvW~g2(%Eo zne@(AqY_SM{F%#*mTLcR>Bt;}y_26oU_tFL1FGB;KyPi1-x*kj39%K7Bjgw@jAL*7 zYU@x`86Zcf{0^;X^Kq`gsj?rk%4%d1CGqOkHli15{)Cj4|K)j@H?(f)g?LM%Z{+K& zRA1>x?-h8j4nS(jHSc#^zGDcIl7;Da?ywIV=3*lT=R1&n${fcAkqT?@A+Mx=+-B~D zP4=N4lyYGN6W}X=e(8%Eu0`}LsxgO-^yO7H3TL%$b3R)Kfy!=}fK=uO_vHliWaifB z${>ssl-vd+yHZA+FHe73t{5JDSR{@~w$~Pgv{Zp&MA3qMZzCyd zJ((MO)3`p^{6G8*7!J z+)_!d`mg1r^tm4|sk#Rz1<(~~HFF_d(PG9o;U!7}AD5DrKp^f7_kZtFK1%8^dngzm z<|;mj=eX>Q=lJZ0b2qLxLqLFOF;$Jsfy|vDkhMthog~Da;ahYaMMTwP;Ml@4O-~Qh zFOv)ql0dezx49^$8DKt+!t>)xaLiC@Xtd=%ozQVWt!W2Oj59R1zJr~nI0 zRmmP8EMtVnoHP0OY9pZooE03UcdN3{NQ_%aUmn78I|EnKkZ!EEcOkAznA&x9^=1?= z==kW0v#Joe(nf(~sVrZ+jMtp`gr{~=d?#4dOgIK~5esb*pJJqes~hXXV$KQwk&69G ztAPe57F|mrNq*BW8)nEf5XCw_cG9PR#}Q4LBL-R3hPWp_x#v3S2VcA&JQA$EnV7c& z0x`3!9O@qlv}HLo7|rpt7*Di%Ief8#y=MF^;omSREtx9k1@}#Y*SPrT*Ya;Rs%W=) z;0MA?)X`8oD!u;zcHou%8doJyPdI~I zHGHBD0Pvet2i(Jgp%o?(rs4xA-h$w`rBPnd5ex_q3KmJFh(MP&3&=}=(BL|kES2|8 zgyKP)7&<+MLv#N)tn5nMoZ>IDectWXdi-^1`9ojejUQqr+j`CT*}jPI_BN+75FQ#j zQ24^W0ZO+;3x1+% z#+&U5keHQo&!~N+NDH1-=b2#p27T@kCW1y2M~;`07Cc1fAC?BfTgf}H-C<@`R`C0R zh4)W31rb6L#|dAWR0rr4bz2C%fyu-{7Z`HacwT8MiQ7aHT_|8WBl(^2W%#xNBotKf zi4yGMen*G}s2EC~qp_(A*)jAxdZ;9^1b>_0=YAd_lmJr3pbnhWqlrG0IvTM@Mcxo@ zf%)kLuxi9FvGKxaWPyP#rYe;_iEpcDLLv2;g=cVm2oyE_>1q=^d)0%yU24`M?fhay zSx6ctLi~4?u^ccYKMwdow0OW4#ydgB@BMuAxoxCB7j3EH%=XAV8H@r>tQH$9mZ}C2 zB3lZwK=A?rTIH5PRlJvQ%|dxz2c|_2%x%!|A$qq~a>_5XN+J^fZb~V%nRB z&e$*!8Q)sP4k6Rvz$pgs#IXn+tV}QG=@Oj?u6CUHq;t6sf>%aTcrJ{^Lh#Ch!s0UV;(T0Y zNpR=@HdyP_h$r#`E#}q`tTMV%z5Fj8fAdnM6F~MELO~j!s(H%oNq;YgfWz<yvigYR@6Iuw0aDPPASK#h);kv=g ziozYdz4nO0y_oTKnN%$`OtWW_c_y^Vk8%x6*G@N(F8XVBvcPkW0=v&UwZBGdtovdF za>BCI5s}pID>(d(i1zCU|M=&upaxPzhT&!b7RsDWx3T}fFjTjTPVX$PuX%V&p!u%?REVAP&i2LpK zm0_Jkn3|HpSp&((W2V){flJGY)((Va$yuxMH@ISONGibvk*zH`;`l;z5;pP4l_T@( zbrtM6RzskVcUbH-;tq+I;%nGbw>i)4xU|u!lK^o>4a5^JkZgUfJNQ%@d#Hhui6RS7 zsD&)*4YhKb{TW8{kQw``(6PQc=(51?#ADhLSF{U`yPm_n4IIe}CsQRC0vu z?WmX8)yU2UxH4C?NK;-^Ke1eOwiw_`BW}K?*iky*^-dY2h?(EDyHYfe2Gk_13|3~S zLZ6~lTEv~KHQrdZ|5dAJd#w4nA zvk3kciugIZ(%PuzGi0$-~36xIyW zY!n;R>p%EPNpOo6eAMq$`3pMIsYAkQb?97Og$%@dV4RO3{kvZszw)4@bwu*dmKHkA zc(P9J9aW8`Jt_JOugn=T5{5~U!>MtC+3!RD|8@UbLhN&^R?#KMO(u8h!D-QJLf_UW zW`L=H@C|rnxgrwvyL{f-3_?Ej<%8E((s&=Oyx`JJk!5B&&x>c>9!}PNDJX3fL)qD_GEI19Ghdg zA^wMoJw+8nBRRa7p>b2k^4Kp#L|CHyH-bLuM{XF-0c@xyJ9*|~B)Nm=(ejc*Rvuii4{-0@s{gjDQUBQRCasJ!3Kt`ghR`#hDe_Eeh%j-vCZ)C;fMHq2kR7 zvMPjJkP3=P`u+_#GbTPRK@`cevc6}Fu8xPKJUU}dX>!K^*7`B%? z*-8EtzAfV$&hXef+dpG_%W2bclbPrh&ihQRL$+02u6ca2^&bQ zFtRww7iboJ3^FHVejSM$IzN>Stt>Tm%vAIRVRrxz9VM-(V8fn6G#fYtGl>+o716yJ z)it{;TOcobP>MCa5$*(N4G%SYs$O;?=i@OCj=62@DU@UozwV5;3oa`|}1*2|Xu-(o(R4#>5~4{6M{K)Q|J{Y>({yDcm)(!+JO7u{nn z@MBLmYuOJZJhmzefHQo4yd=;w5dIF8-x%_a+nVj|`Dq=F6hoinfr_8FAfaoDg!vG<1bP$@8s#b=I2y)h5(LI_<@|AID5iu%i3ybZ?ZmnmbZ1rw05I|#p z+Bm17WUUa)4j$34O%<2R?I>;3dZ?)*PHbq@>ccs?N1s)+p5JVxq=ZoS;+Q7auTKB0=UtmlTtd-jiWSo6%G2_Ex=F`r2sEfhv(H%8FJF<2Fzjk4)Teh zG%^s+b_y4kCe7QyV?af(U4kT*RW(gAdVAiA4`V zYYTWVU$V|vp=QqUi3n&gN@KT|O*fnR1)Y||8h-U0DZn_1At2z*@y5Isw@@E2tc<|X z4@!h+?3Y@C%1y|T#Nz0rC-?9O8uCF&2R1qh*F=(*qQtsR@RR%U%kuFu9e(E1vW!07 z=JiBy*cbOBJIG-}-aa_%bkLn~sfK2CqN7~)w04y>m`j~Q4Yto~itUZSaqf+2 zK?OTazQugpCBrJ=QPo2!4y-})?-@^~Gd^Az>GI4Auo$Uw#P$Z5VfNfe?QHK8+nbOt zKm2M&*c6N?8_;Q7vj9l;VSrK4JH0H-IJ-)fC380S9>@zU^{Oi!MWk=aUkyXLGEI+_ z_sWBVF+<1%d$u1`M1&Ms4$#>;6w;JR^k))8 zUwZ0@L9FZF{oD?qSg$N?A6)QsATJDITgTz+wR|f;0a9E#+nmv|u1Ipo$L@`?CQC`9 zq)STeXA6Ro_gIK4oUL%+`yI=tykJO^QWSPYmX%AI^cJ>cdi4vM-bBZtUy)|kE5Xh6 z($YYgPW!2sL8t0raWoQ^3`02Bxc~^Q8)BS>hhyD`WP#Kp^a%5iJ#2QX_h04iHe`~W zU2qK`5Zps$2ozfu-1_(c2xjfJ*7MQ3UksU#wzDU098AE9LxHV-QUb1jM8Umwh2QB5 zRyPVt&y&TPhJSJc;F|S=rbJKTv$yz-_#)7O(JB%V84Fp2p_oU6M+WcnA|`gYVMHIN z(3QSnT{OhSZTa@#dnX%~U4i7V_MzgiEwfYn@qbmz+QWW6pzdN)DAjur9hD z*Xfu2{&>do{y#)VVM7e@_%x}>7qiOF$`AQo8LuPMe{5mhoJ73Le9&-xZ(Sor!U-m< z*@Po}rqzVHhy69dZO{JDrY&TbySXM)hW0}Te?DeVKh|7iQS@mNL3m8@^-14Xn5#F7 z7oMslYr>(3D?lEanYI`!-&NF1&wx>oU)J+`_vhxb`+nP@=vBtNU8!MR;`f>%Sbz=c z{mO;Bk-heCg2|_@Xpvh+yK&B0OVtHXww{~sc7QEQFlpWgNmt*ntCRQ`3cG3_@}0&7 zAdF9X^Uyx+EBj$!=_}6cPoWL5hjDO3T?QOi{!MBi(0LCLV22m>kfs-(kv~_PNdJ7~ z?@R8mya(XIZBO3pA$x>D()ow1b$}|Q;{PhnhE9YpM2wrKVHn`D8xW-6NhvR0c>D`m zlfE!Ts+J@jXYi`hPYuVUj8MVQsd6kZ`6a#LKJ@3=;sR{(6_?dA5uxz-du74KyiTJL z3m&kdY-RQwjS@{o+;hw~4i?PUJk(=DS%7iIrEB-Tp@Mtk+#jsRBIhi6LsgH43TGptrt-k1x)V2>QbCpotpRE(OoW>Pp$eW8d;( z=o|0~sq|cceOM?TlB>uGE^zJ+^~?(h;`EIuFbkAy=sZ(Kx^G5}a-74=dQ|>`CZ&#< zim3MT^z$}V&Yj@Bt608W9CMN+=??b{qtIU-25bwipYvkpy_!+1f}jmC=Coy_gf4Gs z91!t2*p?)5F4KzOZc?(_ymTONEFfMkxE+^{z6=Q0AO(i-TWH0n?bJnYT%$Gbxb0yh zoTF^lAhH zh{4Mrx4_(CA#iv`@V+Go@s%dM4(QNNd;Nm~R%pZCV@-R0Dg(nGrRiNAdtoc#CeQlK zdh-~)0xl3NLu(GS#eampxp{Xy1^M2vO2ts{2qzC;eWQA_YS7vBY6+gDA987?a)t=< z0g;xV%?O^tdJOH2w57GFtZu3n16<+$qYWeIR%qcQm`GXE+lSrxc*7@n52Mrq_tP}6 zrS>XJcy$LWzb5&36MJse5`c$@dOwC^l^LZwa(8MaLYnqn54$9YFE!zJwQg^jKBl37))P zxNxl&Q;7Q=*ZcY~%KpHeUFp!>pI)caRl=jpH zFs*UCB4fu>r9nGh@=)3)t23jOU=S7YO=s;^cz}rVngnZEwVg_QP{cfH`)#w9q+JJ`M^yV?%fyK)TM-#3TTxg0y;hsh3{T) z*v-N=b@_|Zal=L;L!j@8^yP&kGqV35r;A5QczswEvW?(+JmGrC)ZqUA#`V;fOgi#G(Oa|kPcv}Mjca!`E{lF@!p+y5IHL5&Lic}^t%Vn!UcEo2>i(yo{YB3sqe6-e zNn!7aogV^x(2rs`wxe%(B02e}z$7Iveo>#Pld<&Ap+EHfd}Uke2&@LwNYacYyE{uX z65XgVp93o?Y|ty6Kuw9Qp05ofYeri$yZl(HPIU)A_^a7h9u;1~?V zq#V>$%C7}Z2?%90pVZcng+*59pKTFtPSA=%Z18(!ij&U00HD)Qu=yqS2`1e-=;*|R zi{#i>st@gqAJ?vgAQ(b}5gyNzFh``Y?k`ipS>xp^0M71*b9~f_La7Po0V@hj{ivT0 zlUJCc){JKnRh)4e=3|KHZGf+_&-vLDG(JAMpTxmUTl2>OO|~zuuthOIwV!{HY6{px zj2K{FGXFE+)?3{I4d*a@1rJcrG#n}dhgwO)ZZ zF;mtX940l9G7 z)ML9Zs8TFIDcC|~_MaCPBE1-mSRkffOgF7-(-#+D?3B27kZd`3zRk+K97{ToKXqR+ zy!9;3h}=nV20(Sl^&28$7{I!NK=Wul{Kti7vesoWT}7tXgt|?_cVi;zu?9JTx#fXK za}|wQPP8t{@c;kn^coz|ImX?QI;h{KaPt}H#X_#0FlH3mwkzE}Ah`A6UKM=UTe5Fv z#sf~73Q5=3$46I7Y{?u`XgOIg`zb3}> zvX5I(DpQ5|?M?syU^Mujjwjq{Eu{n<5cB=dy67Yv(~qh|u%tE=SBqHYV3&gm`!VE) zyCBq72V3We@Gz(*BE%2aQog3dn0LfIx}jKJxpY1biQLQwGz6=B@M&Qpf-J%!dEzqi zsa5ZhVQNX-hwk!vHe^=-bym;TZnB`UJh58jC|+)yh!ny5^`==C&gR{AZZj5>u?T%Q z@*eAnWon(U!Kcbs>9Ztm*hU0n!l6d< zss-9sj2XdPhlj*<+=%OT1c#D{1uC$mV>myCqytVMr)xpDe~;BTB1sqak$j`s1gbQ3 zp5LxK)}X#H?ZQ67A-`Rmv3K;fNyM!ZIA70Thg=eA45SD)-%xR*wapE~2yE>U`2%ix zam;uy0T|474BrR&D!4%K2p+}N@7p8y5_34&+BBU^2-v5(U0_bi_w#s@hNiQOi~Rzu z1P<-ac*M5~+eh&WX8?PJ+6BX+0~#|oGnyav$BKcD!P$*jB7~RYM(CU8PolGsWcghT6(Yc=myqLBR}B%o-1if}(imB5FZb zwd&^K*XwK~t`Oc|JyCt)Tb?Dh;iJ|oZD2!08ZKoZB1w+*5Z@SATAS1~1lkAtP}V{aTMxDeUEUxhO2oQbrPYscRxMy~q% zWpf#(F1wnb$hJ6EjPMl`OaEW1gs@@&`xtbS2&yh7b$)`JqsPE|^X08FR&)eszV-4^ zWa;0#laJh;I~O&etJ&;uQS8Rz6+)Lzu=m1nl6xgQ6aR#QxHI_qD8ewWJ{Pwf^j#2^ z=n=`7^Pc`Uz-Y9Rq;Kqsf3G$|&noDgiFM0yqHQK1Dk5G1R}0sVilF?iwMi#@;JQM! zgC-tN+djz%sHe*_1^00_K==!?Cg_~wlHsKQF{rel89 z(xr{uAVNU9zk^Iz7oW$rt11}Qgq8HOLboN-82$5*S)x}2_>556rX}eB^I4u} z>@?(Eo=g|BXE5Ba-+A!QwbJYm0fV{Bei>C?-z71Yb}@47p(? zyp#CVlbMZUdD!IW27(PER8lPh5F{9Rkvzyk$DAqu8z5>uuFh8Y)(saTtqrDvqUbB5FaW+}LANv@u_1XTfv90a9H-_yrF{*6Z>86FFVHaXU5;F6$ z2cfCyR)c3(#&VcYhjS*7F;Lb9iDP3bo;;sbFF>SV#gM3T#kdJ_7(w)fw}N)L1Z5L# z41R(4zQpQMT@<`qw#VUJGq)QR$_&$#AlLmLVB1`D3V7HLdb9{%HPClJrUj8OfB{6# zlZ7J8a9hx1Le$5~gYTd3QyTVu8D=;Sylz_#fR-4t#Nr5!-=g)PwWM1>0t^A*J^ilz*fq`v3u0~?YeIkqM&AxUl7y~`jAMV@RPp#acL-YJnlCG(Zc`oi}nA=vT zfMsraga~U?uv=m(`%Z8R_c;0U%nd-6dFp74Yt1!p#kM0;|Q88|t}Y4Bi>i0xZ2n|yUBhY|lei%>*s zENcrhi+fbNaWw&+)r{ZuGHkIr?rw0AfY7WXIiGz`aR8!cY)J>drW*x`bxuJzYd^Pi()crJ~Z0WpQQuBXMJ*KyKA5S<)QD`zP96Qf!u=v@UKvFwo-N zj#88Y4oV&YGRgoCXVr|2UN^*lu_#=^CG$OX9G$084~7|q!Zy$;L3}>wNaCHw9n?yT z64;-89ZTGYl}j%i#k6~@-bwWHEYMFu1b}02*Z|_XbjG7AM2X876>#3c0+!nID6X=6 zPjdx=p_l}O265}hGxfh1E|?AxFvOV5YNmftXh9=&`-jSKmm@m%87mgWkl#|aH}uvu z8v;sNKt)#hc#(_neVZ+0Uzd>GHn$CSy#MpXYjGB}SVJqMtQPs-msM*s6yv75CMAIJ z04TmghuSQs8Sm6CK0KC%&3+=#F1SYnD74<*=x36!7cCY9{;;s9TnV5M1kRJJH)#*f za48yIqLHK3nIiwBV>p9f1So81YFL(4j+GXG-1~+fbT5`UFKzO87xZVZY*+_ z;bU_FVKGxet)bT+cKOR$YT}EC&D27=LJKry&#T*JmTa^%Of4l`rd$TbbWERRh9U|; z>WQ#>EiF?Pcn%Fn@KXVZH+U_8Bf@YPRY{}>Kw1F^BLIs~ZN2R+dI`e34By7IMxrcD zFMuyC{bE}$D#rFHY~IYD6&C`ngSCr6c4D+3>wmuAV2$3kxJ!5`)n`hxE2UClM1oX8N{BOG| zQnKo-sZTa_69(wAjweXMnfn(=B%hlhTx*r-6SJMv#0Y zCgjcP{d9-0%+Aj9G%zjsNXrR!N6Gghkg%}!FyABZ`*+!M?-C?d*p zBNs>6oW{-#kDhU>_SXz-B(;NgDZtW@lO}D^#QIgnt(E4q@T2W9(t=FbpaTYP?fL3C zCie_&b68#*#F`x%7KdNB0&o~y{c5Mk7K4;CXG&QMpXR>F{iL`9uo}Y0BIDqLiWiBm zTgf*e9KpEwP)=D5J1tqaBLu=y3vzD+=_^ZXh^6oOx*U-&;})$IL|yqf0*p1aU0xG1 z)guTxFUGiKFKKg=SrIxO181P>9Cb6cUbF}}@eG@&;q)7F27w-dt3>@ZF$=K&SwNBL z5Zn};7=*;PzCu+BJI?bKG3SMc!X7wa7XEf4*EQwQlgfd^LgLgOMg@wU(!|J(sldop z7a%H7$^iwnTZ*|%gl+Nrq=ku>w<3qg%>zL+CMx|ze?%P&?fV$`PJR*PV)GKkpzwAfD1Ja(nZkN)6 zS>*>|0A$wcyulG${}U)c@jw8@xMhi=cF1$zH1(pdMW;YO^Pso5RCbK{Wf0jV6#{Aq zO^M*mBN)7xcnSC|RaZ6Gw#GB#!;2|q6#Qt5eU!`ZQ^Rb>-piZy3p%l z#eo0cG+v+^oTgB!Nx&-+|11}8MoAVx=)R?E$>2>sayFz_f9fX(f4tA%&e|^cgG~eH zTy>SKw-8(p1zicDe}dF!@e`o7mPzC%fOlfbtJ?J{1~WsxoV2BW7G69_7mna2ZUX_2 z5Oq6X+rEH%Ydt?2riByebEy#>Js;~9sNc;NW{OrrAxO%QNP86G*y>_=c!3F=k}}3H zmg|zs`d01Nh#A~VO?r{2aIc7p+>!dv zfDE7)J54yz45(B_m)+ex0m}z=19NL&39}?03E=7={u9%6j+HVKl1VZt*ieUxkE6Xy zvI5@kC^DD>SxPVmMx5UVJinXF%lla{%5=;gbga%1X zdm1UJ0A(s$i~k^agc}k`y~l~+^!xM>L?4lJ>yQY)mTD^oC;$Qn{(5`S9Z|CPCKV1& zFM<&$9w}%=_*Gu*5@kDMbOVxa24>F{lLs&3ErbkT9YwfYk|wQPI^0(4{3PQb^VFod|yrW2dX`g0WcT=ENo7ShyED~ z@vMnHhaT!tgC3_BMxZbOvA6^fD}**4MB~DGD5Z;&t^s~b8RQ<>xQ3!E>il50(5Kri zQ!2I7pKe}&3f`^OoZD*k!7&5r30($xOKQ``@8dOzJcXfeInSgjigP^EOxM@6_v_T5 zR{gcZ6j(=L+nqAj-lIsEUMZH0Kau=M5W&qM1&h`r#g~IB(tRk4i2&ADcF*_}k!XTA z+HKzRgL$fzS7XME1(1hW|E>+}tZ!EiHJrX)p@d`s8^=h*Lx@@-3K4zABheptth~#x z-pm?EBy`TC3>LQ)1I9cnc?5ZLY z)I&&=m7r2HdZf}y+RuQY3z8|L6?3LX4dc0RFfOI|tz(q5Kjd{PSL7k%QNa$}TdWFy zuJGvU40?s6aP6juWOYo^x(6W1CLJnktvT>#@zxljhe$i3JP(W#jUaz zoY@GAgj&-(xoFQxQ8w*6%14}1nv3YjZd00Vfxk`ru8B>WLv-x}IQAVU74P`vf}Yl6 z4s3D+$P6~$Px4Rob&zYIuiU_@qR*~t95`lFL=*(a#aS^g7nTS9 zP4y3U#ZZUo7Md#kDWsC5q~#H3h*Z8@c<#%gZVJW6%uJ-yzn9t z?6GX)I7T;Ld!GZKa8=NocSLw-P)d~#f){m)ILROgLY0!&_^hw32pTKb##X&0fuigg znm%GVq-|9FQZ@s{-GN%O+USol<_X`V*Sn1Zcfd6b2s@N;G5o*AYyMxM+5&`0TH0<| z8ewcd-ZU$WiEpZ__VI~pVz}SBXn8B_Z&gJ?!4tH~D?G@xl9oLikd}eY4l+kQFA)<9iOUF}~c-FEM-&f@ItLOC5ZmrtvH!4%q47@NLFvGV_(cqhM zK3vhA*ycp@XIG=^s z$vR8(DyTn~lqbvusYD|L4J}$Qmg1| zWgLF3l)xQ#2l#JDxq%!L?$WCIexzQ^s=#k`Bk2Rrg&Te><~SAF+H>e!f(bKd5v+3#M(!yJG-W zOz^z|lLu1jYiOyg4>;E~Ai*>#UQ1HYy992Sn$`6e#K#4Q%n>|b?Xy%r#pH;ceB6lf zcuR?X@o7KycsR4YC=vttT-0jcBoRxCJlMa;H&`U2nZUPf^iEM>9#u#XA#h}y%Q%(s zKOl>MO@?2!8b&5b8|SrM@a;d(<;ppp1G7;^L*a;VXiw9jBRhL5;0Bn^6%-?YFaFAP z+-=SDym5u@F6xnJIcbZBPk7F~F8+8u=U!DU znbRfnYbSiYud<$)e!EFLU^0k;0Pxb4c*k#K5rVc}Lz4!A7T8@OA@=TScp6S--gH76 zXWt`OTJuFE;B{PZc&Jb(l!jL2U%UuEM4!26o2YZciLcl+tg(ZYAMZ#ji zI5&?Y);K_)JbPLyQjaDOAfN1i(NZmZxTO!rVQ?zcTtuP!kci#?l;}G`;0fBay+WsP z)kn@fSfWj>nnt>`1UYVuA{xm zZr~*Rch0}$2*LH@a##^wR-`J1ryC~W%kM85IjA=l*Rg+9+$}kvGJVb{r^PQrP7To> zHO2Dd7<49`iRsQW#v+qH5)q~+WQ94am>D03`~m$Yjcm8netEr*H*(Bj~Gra{z@ zQ^0B(oeNMD#_w$SrdnPDbqqYu^tWq6IX>*|1`ZEQd%Y$aHqGOJ=lTL)YRscuW4s{_ z%T0(qpWAHoMSJ!8QvZHVq+s}N%VBuvj3KiPd=SKd_|BNOwC@bSeGQxCU^%tfL@8uJ zdE%!DUtK$}zdx38&JXUQys$ing2=A-mIe}O=+eM;OcRY6!LN(OTIC=-VCm|2R-;zs zOcn=?t~WylC(ejjn2m8|jXdxS_ z+(GVVUlo?VaWg%e_kv=9B2ifgnDi9I`~<7iRm<*>xU2DdDc&Xn zC#KR;p3ADr_&vA;>!|?ai5{QayCTj1gkF@XbpxhdO%S98Y#E4p;>jDj^YDz-zL3{5 zSBU<*&Dk;Yevz{nPF4i^)zn8CcDbxh!Yn>k^a|;pD>%IpSs@{w&Amt6hi!8_9Pc&7 z%tlG@p)l5Qlyk=dVM--dNcu%!c(E-{a1x;$;1QfI2k$I{DWkw5s^S`$Fo6*VNRBs_ z95N`%ahqsWdFV3YF~@7@O@i8u#sPqE$tmLd8L4 zV`>31Tg+ZxS7LM%qFcdv2V??;?dLkc=D%u^nQ96uAH0BuRfTtfHgO0#XSp(BuBpAK zOlTOVhS~NLT7>-(jCLb+R(QebG5m(En8sIxhCYu!VEmlwuY15n#?$r%Ey88nobT%) zxfb$KZ0x&XTl@Y?3B3^`Y``?U7_cq)>xIK0K;Ruuz2Pqb8XE}jH+cOhI%3j*#{tDa zt+m$>s%cot0?%KeeDAIo=Enr-ar{Vf3n4dLuooKIX7c+`g(zc6=9c<8)= zGmh+AYC_{w*C8Teroo>ZeYHFvE!7CJw7ikfFxqOhaZvU(m{fi-gAI9PHmOurL}kaw zID2WZ0}fSCsPsKsQ0-p=<$Nqb#^SBuT&9%xA`*g>3lIPqoWK>nl4S_~L7{=Oah_hD7Z+&ZUgMu6T@T(e|Qdf{1ifq#e?GkXqR%zo( zxV%6x74gAODLSbEFAynC2QH|V9ueJ<^Wamg(Xjiufxd^dhC9UP;Ye)75?NcOhy~$i2RmLYP8yJW zDy6=NE@I;P0=jeMQ{8D%BS5Z&Fe^J2WV*Lzp)BMOAcK?#q-b>+l!j#s*))Q)L=9QzG@JE$HS`n6%(;k3j6%M^9mQ{k z>I8uo`KivNqrDXjFkZ%h4SH>NZkp)*E2tSwt&l!27ECTPx^z zVOlm@-$J$y)?N%|ndj%WX7Zctwnt7cYX~tF?rksN7}CvW%z~Jxyf#;D6xNrgNr8gY zSN>KFYHWq{z<*tbAAUIh<+8BPuC^NYzcFTAzx4xZy8h*E;i*OQKPeW)e*j z|Cm~&&-JQ(5CqkME#~$Qi_z5R7oU@BPrO z3FrlaQHb1*!BbXe`eT?wRAnx}LpQ;$9g{Pt6^*HR4}P$1%6)!TW=LSvM%49ivn>VT_lkKs~VrfGOW%VnX(;Bzb zRd0TNyg$4-WiTwWhlI9HfbyP)z5yi(i{};`HI?kf!{SYU!YGtF97G8I zEuOoDJw=Hv$Ed70P5pJcz0u7Xc`|+NuzLIyLxLCit|8x5+g_1l*9RCvM`}aZ$<#eD zVC>kPL&`Vr>~0=-HNFlCH4W^xo(qdn_16Q7i!WDw1GObQ?V(gdhFZEl-LEuV?vZJn|5RAvY!V{&!J8U;Bv@xTI^IhO)JP zaK#7t=NrfSnm=?8d*pnU^@GqI2`+Dfp)50zF@f3Nh$(gE!GHOWtzOL|tvvZ>3@?;{ za!*WO6$94CU%sx~2+FTlw^sY70H`s9qB!hW>8uP08^bN&i>c&og;*TM&|UzK8LC#8 zG?yG&5x4#!zXtn6%(~FW;>AG!tt4T4^U>ZPUfcr`a>a`miwBm)kH+XU@GHi9lq`R- z9uwxm9tmEu*B0LIX1S}^*3{3d@+j#R^%y3J;)(ODi_|xVPlmGb74Si*6h|34%&Q$| zfDv$LtabRNOoqfW5-qng4<%sZHib{2ciLdwI7fO@k5d{@*WlfNvmCiA#b5M^lUTn>cXX$4BK*agYdaAX-9EX7cG9+2BR;7pkJE8d`uDS3WW!Xv&!u-2vkT zt{yv?;2WT1`IG4wEMjQxFM<$4IJG%-my0DcABlDyx&7Dx-7BKb;fZl1G%tbFIpkaqP<2o70^Hp~ z-RcpF{3-yfB^>7FqT>_Ba%my=0zS z{fiekelG$8(;v@i!@;;WGgq)NCIu|?i!z;rj#_K6(zVKT*9QG#`YH~RGJBpFa~tiP z^I#YZRSg;UniGvX)`!ZxpkHu~hq-Kn7l8&aPM|v8GVTbXyoekYmraS~TXX-fU|q0e z`fxD5L9|FJVZEcGOzXm%i_%Fu@L9#WtL}k0lFdXy;pDs;o`{iEQ32nG92`(2*Fsfat3}}O9}+=L6JwsdX-7!$3T~l$WYOGw(?Q} zCcG%~#dKihZs3In0m$*^`wQ-&f=PI(uui`)>EscUFa*M^@LRrU05(8pQP{06SpKh? z5;@a0+Ba5{(6c2;-cYwu3SsJjq~%FWhQ2xB+BvwWSCEC)mHyfuzZfBbIJhefX;1Ab zW<)$ru>-k4Go2eSHK#9F7;TP|mFt(i;0|@?<)ceHYO3#iu0bGvA%}Pzb8p5>sV3Pt z>>ZguhVMdvBF_3@>ki>)soPl`Mfg8KaixMYoJ@x>2Ewuxi#q)h?F)xla}rbxcPyy+ zahKq0#JVpJ3^|E^(e!_f5VskO~);T}nipM_(5u-ZJ?H9MO zsu)JmE>QBdU+yuf7STKdAsX-rnHHt(pfJ-HG6_PoXGb_Z?xWZ#*qk?asT_e_dnu)I zQ8l!-9t4O0eS;+PC-^|!wEcGDD?sk};=F>d#zP}Oxo~w@_&X^q-vYPK*GGi4acT*6 z(USS4=1d&7311H%vf!}!8ld5P(wVx#-Q+v2>V~p1cFo@{b1NkEeDcE|y@}NdmU&5JVF- z9G3GWa_%lHfqMPC|50mw+F+gHcfeIi+NsOOxCJ0ZM{dLT;Hbf;oIm2##w5 zdU@1ts#*Fd!p=rD;Q8B77Vb80BupLc{oPNHnc=RGR#R(Bp}johx`G+H+Qb;2~>25L>iFpSDSqqe!%V*gqW z3~uuywflU3%&QWA(ISI>Cgxz0BxTipJyv19)liV|(BuuqUQMHLbfbMf^IHI#^+_O)l$w5t zs%VH^)R=uaY-stD?jKj>P5(CPVWka?-dlm9;{AWMq zH|_taX>RHuXe(k7uG6o_(%IST;<;pKan!T(TIAH>c7F-YF!RT?Hn<};>F4^Px^z6A zey$!KZqzUp#qq7hM|!;Sc$IWkL2EPiLN$b`@hPG?U-sB<-4cUceb2quC;7*a1O%qu z0Y+}{>q%WYoRx+%A6>#(xkk|Dz~nO|Ih)pz%N!aREBAkF?8s%!wsqvDaB#g*Lj?$7 z#GGA8^oMK7?oRnyExC=j947~pWm-%N8_F0P_(kjx+b{4SK$k}FKxZmEs~DG3`fjnK z8pLxg>pqyLMQP}L9fl+32eY=sefDqw6{TWdFi)M!*m|?S$eQ|_$z%@c_> zBOe~{{zzH40{i7X)*krH9xC<7fC-;W=%!7cILIPVV7oaP|6^;o)1rOR6nl{(v9S`y zst|~G`3a6jV+cem%y$E?o@FeF0&vJ%|5Sz4cTaT(-W##_i+OfU&=uz+Km!~8gUx02 zisQZbE36B|diZ_3k~(Hu0m2dA!s>zfCE=zzU%a0+w`^c|D=uqZIb$JQj>PI_B*sXL ztld@oRd2}UMUbH`V;n03*!j<$QO_AXzgZ2Wl3n6!ATW3eQFsItVZ651S09zvg5C|U z?3DH72Vy1rQaqVjy$p-wU$~{?P8O`s9@TTT+IA1a@Sf$HGguIkltGs4d1##pDu2-X zf2`*74}=`9`U$j~*P8R^99R5Gdb=VUj>o4e$Bt;k^6Dt43!M`6_;1REfAtur7TdQH z+E5p(o@?4;>N8dt&y~kVOGJ{2-PFg`q-1P0&XlRWh?>d)%5(2H=NdO&Quk&hJlwv( z_L@L7O)s`sPvD0b4Je6X`qdxI=fhZt@iM=5xY3*0tsWS@gN`#?*7nh`^7?>pn~x@Y zbKYYjGL-v_@a*l8ZsO*LJMgMG8C;_V(V3rUkuxm5*Pabnw1;%d4yKYI-W?0mKs1!! z%DDHLh4Hx75ay_f&MHvh=Br3Yn5ZR1!;vh;%DW$9=tFi3e(gbTIZAnUiSF!`5RVS{ zNoIVb3q|tfkbfF3$|RACpX96g1qkDSJKlyjA^N~rNFGJk?@B~S1_{y~O%P}=jt%Oa z(8Om^@)|3FoXUF_*uIwp>*B3wM)dbme~wD}Jc+Rnnqlyr$UTua!8Ylr-O4*0lkD^R zh(O6QJSKijMM;dS)YqC;coHIzH17{8h)v|CxGk-+;CAYqB4yO zJqS@2lVl6`z59+oTrD3_@UnqH>n0Vb%EiNT0udK6jT7q>^rC&E)SGnoi^%;h<8NF? zQa}8t(}`!#XeY^@d3?}zyci-_TNjC5@pk2+asls5H~Q+R4TSOF5dQ^~6G0|UgrI~W z*X`;OM0~y@gTbFFIIOedkP^0GELC?vAqfO)^=GvY+hxSka3idI&`*yW8QZG$X>;S! zzc^BFGj~cmN|Puzh%5;s)Hw9A1!1~dL_;7l(;Wa~^|j%5atg~_Xi~;LY#GTZRZX%E z+2_!Lhpate+} zj?_eXARbXvBfvWTJc+|Va*@@FOZVzK{tOBV1)+ zw*X1`KCA2;Q$NNdVl8TAG+^tJ>ECW%#3{tzsomD`mhP?Ed3=WctG@<5v)G+wyqr8EVdzm zkOsZeT=XlULSZw9K-0y=JXV`JrD`OVJt}7bI$jbSB?vttSo8U+lLLS*3+6%4o;H$_ z5E3Bi41)ab9%0CvOn*EX+<9QkYxze#dNmY#je~r#J;i@jOIZI&*7`q}*6vC${ZYq? z%P$B!}K>s1JH5<+$4<1KLOeOJjTnusS=+W zjk$5nm|S6>2qgDz3jl1mfz?+co13~2(VdQtx`sf8PU?dNURi^d=GH2ZS&OrQ`{vp4 z!6E-HvS%-NYWpjk3q1yNO#D3j%g*C_XS`)N)p)+!tJYKmpO`33(3lDqx#`up5|IVH zxy#BcRNRkWMz<6Ofu#p2YIA_8aFM#NRZ6xgv;ElO;hQ>tScWBj;CF`cL4mCX6{W-4 zz5l(hFWnJ8NB|TU5AqnT#P(L=1Vl2}Hq5BsivegPQ8G0{_2w<$?9A5O(ZtC4Cl|Ra z7+4LNJk%Bw9&H*v7Far&8=nQLWQxkX54{TC6O)Acp(If%U%k%Ax%0hjgG`%j5WLs~ z@W+P1AsESrPzvFVWb;Gjmv1gcTP16G+GB=-AcwQXy_gAfLcuqh>p30sr-I0%aFLJ+ z^2=98i`nU~#|jBl$a7vnorRgF+(w-bR$JBUJybCjcf$Wi*t-W*Rc7zwGfigMs9n@9 zYEIKM-ZG~gH32~-E5}kwkpPjb91I0YL;|@?T2fltl$S{b#4Cz`fk=QJYRWDk98@lG z^K_Gg9D(ErM>rn%KF@mhKH$uJe!qYEe8$5$d+&F@?^@4#*0a`v+nuyeU?_2FJGM+B zX((AMVP8_>d}K6m`v6AAxQ|KIW$gv$-a{iyk^+<;MAtuo-eg8GMv#P9lPJ0smN#iQ+aN;0A?&~> z&$|kFQ-&9d;ipq}3}Ls*8&>529{a-r2nPI~zf6vu|Ihh3J@F&4!0(YWhFfhbd|x?S zSuRqAetGR9;QO^mUDj)7tL3Z42!3|9%W+2c^TiG%1KI-S48R0a>IO zdnUry{Hsldj(~ZyErZXc?G>{LP84H=c|yOW1N-HfTGE=*-T;gLbWzyTZ+PtZQBn!- zo&D6~is2{-RrOyPmrMLUP;=(Sd6@i3^TV-v0__p!^FdWv#pH6@Y0L)1bMOuNF;{tm zDW)}9#)HCb3zRlMd-_h!f>Te=ZM({n-;8(}9A4g8>)5&M$UXYKY>Oc8^< z6XJOMhF%7)Wo$52ctBvGa1_3x!_dmSD?D_0RoW;*WN$qNUj@}y)J8CNyqg^>mCfm= zpA#)|VqR`T9nTTQPC0LcyeKwAANo^S75QgpbbxF>{k8L3I{8O$DPWcd9M>nARy07e z4UQ0$ycLcbkZS$P1nQFyr?e<3oZUytAGU43@RN=qJ`@ z?(dQc1O}vS0FT#%!Ei^&4EvFB=hN= z>bRUYmm5SwdfH3X$Dl~>2O{UFJpy>iCK6Yr((7QODC?#@JoPPVxG5uZ?fB{n0K|77 zAC#jrs1c*ysV3u@obX%KkZmo_h+XsY)h;YK((#cG>);mJkE@19s>>wv!qvo-9?-$C zqw!)aIHIJTTPsBCtS}Yt0s+2p#`O7Y_?-NBVZaLa-#UcNAoP=H;&hzuT19)rWwbT5!ae9M!4K{xh&mqV$s)MH;THh5LqCQXy>{ijw(QA zv^2Wrj~#XPIsw+?CSYF()g&vDWd z^kjnZ?@R3^8?Z%?5rJKD@`FNrsGpRu7+zDoZP};Eo+7F6X1h(?g4ctkwHSl?o2v+> z`71`zmM+U+TFHqCIF%lY&$lRp4^<7TxO2aomZx-HKm z@eW7(0?0(JdioH-u36u1%>`m28+pDOOnvV&C= z@wlaw>jl5xn}Qw`8J|Bl_@XUS5 zSc{5fiC>xq2k>Ys(F4Yp;aEk#gO&*%m__#NN!tqMS);5uZKX~ zsp9{E@|+5S^J3Ee5(;nNweAyK4&1yDd;B>L2 zoLef$_l~Wvg?~&v+a<%Z(wY)&{T_){(hP%OY_NhW0lUBp{kEzZ5S9>>K7y}X zXsSN)MIZF(cK!4)JQE1|bp9WBN?=V`r;jNqKlE&Evb<|jjbNx3WjffbOp&>^gORc1S!Db8p-HnQgpkksGF23b zWQt=DZWwep9n%r7LW)aZEkz`vZcwBXO%$5~%F0WWt%1Xt{8QltC5BO|JSgkbT33OB zlb`ER;-t6}xu?4kDt|tUp)x-4!9i5vh;ZZmE-3mY?e2X$wip$ey5@r1QuJ`;VFR&k zaOOcz**hhH!pwq1u9^F1)J`kM%Z))pPKNKq)<4B^gayJB+fj6$tcNnaY}j?(PUdbsD=GAd@z`y zX*?cW#rj7PJH+^`;n>oB3=d#QH9HeaI@pAfrjpR$ZA1`fA#D=UASA zA16!M-ynpukWM6lSJ|?mwBED>>*1LY&)hjqR&c*Dk1-BUfu~Pl87bF%%%kObf*oGPyn*_?Y0X#5! zKMO_9b{cUzjq`sIF3K+55E_xz`JXGoEI+o1wzYPJ`AW)4(Wjw|h!_13=X8HkQQ-Rp zlpaa>g%diI!py+LUf@&BCu31}ulXa=j(j}uP^CDTEM0gwpoUSGjYn>=s!;p9k&8_dLubA*HY>9KKDl9ui1@fny1 z<*n=M=O0SU+%?v29cx_>=Gc!Sjk-nxxJ#|Yd!WYw1fH%#;I`UiO}Y!1@F_Z`9mcS| zWfPu)>S6WhoSH6L!mjC*f@oOQw#+7o(%xr4G*NQ1u_UH(P~Fv34CF|9JT{(U-dEz! z#oi|hi~Yy}0OGm+qw*9!-@3xl3$NLQtwsEVW#yoUOCQ`xayJ%k3tEbW?>h229c6O2 zs}oCdK}~S#-iJ+!-qj>}7!0Zl$-B?gG0)_+w4J@iddc0~4odW(l^r)^)Znue%fA&Z zSrRk|0Wwo}quj-t7jA*L)!P2Y3R}d>S8EvIi_}T>*oCjv;h(BuHXi;en_@S9jIHLF z`sNYQ;;XkxK_q}*&n=bHkYVFzLJWaY*xkN7CQlXRM0|vF zr7PlpHFh_N;myugsD8jrDV)PvG8&sV1J_`sK?`Q?(#Jlc9!2`V{_ghaYSdag6uLe` zbbABlUzb+%YB?hNB%#zIAABrlit^D(a_243qpQuYh=6DWXJmYy!Sb%+0hQxyFb( z*=M`!S29PKVrP0n+3<0IHDjioV|I2c$WPHfc1`@5(y#BN&=&}?{?a+d1ez>NB=w1U zidHA4)aF3=)l;~cTd6XfkdT>A4aIcQ)yRga>Aw6`Qq)PwR7OFjR}ltPlwqsC>!H%E`gN*0N&_i)!#v*fq3NgMQihfRMp^ypo?HXoL zQ=m>A!q<`g%zYA%zME7Y$}lOI8JSO3n1%|xgRnrdoUZ#C?p}h)#=CY=YTg9KxX%Gn zha;jx(Yiu@7YU^&M@P~dSX$XWzn-|rLR>j`jYyedU!={NjEKWH4pQvzBEtvBRr zEWbSVDO|S?W<|D#+gvXN8++cscvPze1FnD{*Va;7E;8E`N(m~GH$(X*HI4ef2KeeY zk0CEMo`n@f?nJF4_6H_~^ZdkIkoMty?w;2|!|c{(*8m9f!?3SDH(rMC0u!DfGBGi zja^UKBq;%km{S*|vEGZ)2il91C8@0YY$EQ&eBx=zTAhvdUDQ;(ch(u_Dx9lcwnfW9 zFnbVpLMu$DYL+^h8+WRZ$s<8uWt2{tP38XrO#fIS#m2!wVjTw0i%@^q*Zk zZU6F1qkn;J!LM=x{?Dwdkr&1lxg^9j4rfmPS~)mVFo8%n|AfO-w_|LP%Z_RH9jy%m z|4U2h(8=BwM&J# zN1^>aTmHkq$nwpw2!pAK?K z)PQ4Q73jTas=nicI0Fb=d6|e!iB-ifznH7g8bs5?%88z;qHQ@EIHyo=q2;f_g63tm z25F>=I%jZ(!$Hu}bT0VXe4CSrlCPn?vf0xl^glQ75wC`qAPZ5YExqeWE}dJ^m#DYt zZOap3Ch^PhxD`#%OKxPIx2yOo#VIHN(=AE?a-M)@Bz&JpxB#)Vq<^%< zg$|5tlanyvKeJjJj{_w;o>r>EQSbX62*dVVh(EB9lYiMTe~;*CV4ShO@|urJ+?#GW zVU|jhT`@rJ``CMu~7o zs`3RT4S;(OLr6hBJo)jEBu?@CfW#0rf&#xxT7hvX(qc%u9?q2oWL6$DrzS)RBclt= zgQ%A)xhs`~l|s$uFqB$|2=5draY2}R$>v#fF?_jXAGtCL;=sCqZ%Vy`Glbw?Co;f6 zfrBKQ$CXFah6}GdrehN5Y|?Tj@HD~(vGSN@Xcu+>E%uCYUBA2jpCj`^Pyc#L{(k?@ zNB{PNqhbuaPiO+@G@G&Q;YdR^!mzHRj>xHNJw}Uyi0OYlyJ2E26zOR1jh2~ro22}@(u^55dik#U zs7c1)rHe4r_X~~fy2s00sh&HVZCC1GB=Whvjtu>21RCw-L(tFY(>wsPsSt};OH{8W zHeWyvW)bQPKIL-Bny1(1Y6rdIqE(Fw9E>v#%fz9ij9)H5C@5nvCRWSnzI18fy{(|> zXx`6KP9$^tWJ#Fl{}!qpK}KRvdT=vQGovyVzI^pp7E7*HNrtlbD9=@G%Fzx3iVPG7 zfF^9xFo|ria-17-Q!hf8dctEa@R=x*Wtr8GII$Z=1JXtvISW|peDA|dcM;@on>JFZ z5G^Q>@l>6i3;*;~Z8#zW+=^CI#`<3Mcw@^{1)_v)#283tGJ{}mNg!8g*BK>1$okG=0I;Jid zfc4w?0(Z`fk$Qiv^3!2yJ8YINEsQR%#QHX{01}OBo~Eu0+u97j8ZVYkdWw*)iJ^j) zr%+9TG5)mdf=~F*o!Al$kWlx&i~P_{Vegp-7$(l$d{wGC3#z9rYylK7>sv9vh&;Zh z%u7{6=r;ZoH5|=O0Da|Vg-j@t3@e9DKnsm#QPVLlo&2WmvXzD=4{gs7w)~%q!wMBV z#yd(@z$(>Vd!Q0B^g_y#fX|HoZA56I=QYO4*>6V0RpKm3bX5`16TqjJ?c1ycS6Y@~ z+*hJ|Xv$+3$zGe5S_uU-$b!z3&Ca)gV}zLEB_jgxiUO2Aa0mx&pf*7ZmGtm%9Hs!h z9e6640WUjBT4Ttz`K-2)-dx__#lFz^-(8ETsQUk35J@pFRY54BC@686Un$0zVrWP< zj2~&-fij(T5&N(x6@Pxr;oAap4ntV@QtKG>TtN`oKccZ8b^RWm!^TKhdF94>8UN6HO5##NP5A7|^_g+0M;SaV; zhxS6+8{2i;*{2WfU43E6Tf0J!)<(_5FlI_HyVkB%$T+ey@{_%oEM~Y2E3voISk?J2 zh+t7wb1C+|x(Q%%vq}$+%D-uOfE{B)Clz{Y`UT%rudpNy<6W;K2S2C0I2;Ot(Wk%} ze=nVvHc&~sj05Q)i{P+2XR8NRv&ECk`PaLZ)1I`Zj6YmaiJ{D_jl*CM(No~V7dLG$ zt=jZGW;~Z|dt?QFc|k^d_AmTd0_U9N0N<V-5G#Vor}T&!WL4;{Supi+~b$A0Fj;njGVK%5C%L&IBigRO~^sSe2FV`{kn z1`*S4+Tx=ZV;)oEv6XJ5*U%Jc?Z9HiSz|c$Sj?L?v5|OT354I`;eDQR(!SD=B|4W@ z6t>b0{;$s$S7Y+u>-Y>~?!?u>c0C$GMjQPKp2UzpIWqCT)8;RGzXvLJ2~GfVn4Ee^wU*~21nabp;3fr^444yqjnfHP>@?ly zZz5UMr#f&iXsR%DVvO8mRt^c-#43Wlq5zDB^2fA__ixFP;l*mTV65W z!R}sPvkga}Y=kBZ5kXo+g%~e7fUmY;RI$u^@qT$VD=;QQ?E|xkt}IeEAswzV->;$f zp3D+NdLf8XwfPD65b=Q3L;wOr zZ4?-{pt-m33~kfO$$Ky9Nknt`@#smR@Hz7LsNeVpXKl!mC|t|d1e!Us?@1{?~ z;8zexk;8?7l$~DiYcpLe6v?~+H@!}&CPd1>>%6u|gGzc`t3h(jJ-;Zll8cvpU+oP1gBS22kBNGHPR3bqGM2?~{+N*}eKj6vT3r>S$w$*d?DSTrM1`$4T|o`j8q z67i1FLy%t=tE*57Nl3I1Bnix|&OH_MN!ta`El6SEW*>h3X%0QZei*ShA4&|!zBxoMT9o`T}$g)Piq#PlN$*_cKuYr%rwiAES zf-z7NaWgC#iGR)E5KrceJ8C423dbR3R+@28B9%S|NP0DH8`9XGhZ0_t+Mx1m(J}H9 z+?!M7bg|!#GAc~DXxmHT#y*ln*e=`&8s&*_uavyB>}OT8HZVe!8UF$vA61odj%_G|6xxCG9q`6E2I9>^%vRdMQVO>%e@tL&)&aJ*p zI+;NbvmL(ZTJJv1*Tm(7vwulEAkH~*pScKwYn*TvG_N}f)@I}XxIEZ()PFX|71#e3 zeR+#bZ%wzlbD{*DaPh*WS8lrlYKGQ?md`O@dAxPq5tVyosaksS)#*8_c66rituq4B zlBrS|kN<$X4JM8!gBb?u`fxaUhk-|S+<|wfem1wV*)n^(x#*Ffjre&oG{|u8b!YfExe)Vy1sZtgX|^1ex;jwMG2w5Zn}MXCwfOJ}$&=mS zO_?}hD2Lrc&I(O`5e&ulZ_3NYfy4V&j0xZ=3h%CBUhWGxP2z@`DsY;5^4jbgjYP1@ zX~jx|HHPu5jz(FIzeRdPwu*=eOZZN^Ny+wle+^v77>sX3P@_k3hL3ML#S>2ETq}D! z5-DYGAZS#2&2=9knyBk|{vcw!T^o=qxpP>~H0b5ADEHWiNcgx)FZGR;EQ)Iq??N-V zVFbF$>9NbS!1Ucemn75Q>ohQ1YC0nWuC9~D3psoT!InT^kz?vp$dJ*+ z5O5T4jQI0jbneDcl1C{0f_C%l{AlT?adh@vA>K`Bi=gv8WDd1)MvGurWR@rFA2AE; zhX;B>i#OogLNxfT!m_TFA*Ud0JvH(6R5eyEyxi)m7Kgy z_Ksw7T48++<;%Dty~!QM+?o4%%WP%}=fnEBqIcx7`pj9op>v1zHA!i@)|aPL+Bjgw zv>c(PI?j_6B@Nq&!0$-%+Ic+;26_JhZWays3vL;bJRY!&EzBY>KEt9nfU}`83imUR zZa~}eW`jMhtZn+`8KLct0IIJI#tGGkN}kT%U9W_P@)S9uLPiU|?id&dK%Jun?mkEp z6wt{n)G|&7t?4r5>Tt!U9wvSIHqS$_QfjIU?=sL5k~Cp@QN0-kTqZPss;rJ>n>mcl z`Z=$S4NnOjVYa+ZX=>(hOQ*cB-pyhu^dV8%vbIU)rRD5Zb@#3fI8rnu2!$y1nK3<* zQg7dbF<~F&iSTg1!R%+(0XpL*KJ&oqRhj$1sjoPLRP1s@ufoOk%~ESPPWB(mf=GpP z6Q%uI6^dfu44ZIaWLUJ?vu{YTB7|>Di~#QN$7;G`VmIk=GW+PEeVI_`_?k;sCt)+= zJaTK%xs5zRziF%t??*BeQ_%qCw-|}paK6|Sgy)?xP!~H&(+GJ30Vq?TNPrLwK9;T( z;$l{jlvDj+>eyH4|HJC0YQP^lNQ&U^ABVoZg2WStG>UFTvLlpZVA@|Rgu*5=#*u6h zTgql)D%v|iT4K?ot%`L}$BSqLn)&cs1>uT`Pqk}Vf|cKw}RA}$DLn{>L^ z7CSle8sbE?srqbchMd%E@@x-enm}xTS}bPSp7KDDZaMKpGNWyM>u!ys0pZ;VoW)R6 zt_<{o<$2kJgY;IElsTO<`<^JI`UKcc^F>P4fN+od zovY?N(oJGzrFR=G&pY2IqncK8nC*EVK@*~hVt61H{oqiC2!k)*WK)lZ&E_B|d;x{i zC0VBJGiXs_eV5In1PV5!fMweVKIKfhpyNT`bBQ=ZIa)KvWUJjmI4j-N{hnug#FlHg zGn2kp+X|!tR)s~*$Ae4_eg%6lBDcL0tc;#8n=07<2Dt0|4ugNzYXZi@K{^*pYx~Lk zt!T9wE{Gvk6UW)|lA#wHP*9L8tR03-egn!@odKLH+$_wBgZu*T02Pw7x2&z)KH$pY zYUL*eTt$x|33ilOrze%+NT&G7ooM}j!lSU!BO>l>e8 z<9K>VW%Ghmo2{c2w*J?{g^SPMhD2r6>VMlj12ZmNuZj=sSp4{z?=YNgEyiE;8NBx6 zTK-wL#kP!-->xE?H!Pv8@aw-t@6#r;L4ArjL_O{HEX<8F?KlNPi}`Q({nlds*R%kG zZqRkhQN1>>qweSSKlZqV6(X6BMB>}fF7(4h;Gaj_6@>~2SjK}pmE`A+;5uo~qgw$DXKHcpxjd}ac2^Vf}>gI1E9G97K7*EIV zW;)8kzk}a555Oq9?NR0a9!uSy1nl|Mb1Rfc_{&X}6W<-`wol~1CU2Q&)%Yh&-Win0 z30T^opSs^UywJBElVdXfoga$vFpM)E4JpT?&Wl2r9mEIC<@!QALgU9vI@}{bChH&s++9B|a2)6OW0r;E_0NFYJnW z2yGD_-e+lS24>Y1YqN*=ZT>E5DB!v=I=mI73u;!Gk3q)bvdE}W=Dd`2$=-4fXF562 zE-so2fl}I-<(TO-Ac6y{Opl*d3KX^WgtOXHss-ohIL@^aT^-nVS54c-*OvP;M{;c) z?!paDauW(B+6+9Y>362VvCq4P%@xJhj|+MnK3JY5UJbDr+7mNMhW3O_ie#ST$X}Ai z4~N`nl)Ra+PgV_D))GAk^EBU#!_>W|&G>KErl0adpkWBk+~v!4!`W034vZqwiQzWG zQ4Wo=OItHGlVZmj{0Z*PH1TJqkW>RCPKkR!wu4Z$Q(|O76PP&oH>sDv4lDEstG1Dz zWbR2l%lcMK{&|j)EO;}JR?)ez>9%EWMYo&`l)gIrGmeJhUvWz)5Wsp$c^%qhI`WC^ zf0;1~-GM-Z$`bCAcS9a~(_%blN$e!|khH=|Y@L9HH+?yExjv&O0LlDQuBt@v+^_AFajFcOK zu^o8oWg8U|!EY?&yRP{aQ!)cQwhmdYwG)+DPIl|YQAKs_uJ2>m)>x3Y&Skx@syn^`fdxwE8#{iN`ywtCW*182s+GR}a45$Hv5*?cBpdfzA}R$+~4R*(sS%aUioJhK!IMz<~F2_#6y z!^}@<3*jY%sF}7j;30Gq@!J&OJC~bktws`fLAd8$# zSB}RTD+Au)Bk}w_-^=hy-4?GlJo?)7Fob@qhdn*iB{Dv+lIHI&K$>zmlni?|@)pc% zP;SccYSm({bDwQCTVmAc%mpGv)pi4@d?WV~z}-t?6`A*7#dxx(eDUc!xz%v9G0w~f z`&TL-fazI9lDFXs@esi#EKs|IhP-`(vMh(yqjIF!)|J?sVkxb)vP+~FEM+=<4bf(q z^u-MCf9)TP46J)&5X}6h3>k@terTBdd3b~R9}H=Hk&A}4t_U#mcEaaGx^G3VnEFMV zuU>nAdv$dp$LRvSoT_~@px~rR(9;m(*Q zOpD>4T+BcyuDrYjv-a9|Y;vrm9Tu~O0|u+Lw3%lw-!knuj>(SI^vzWcUt~S#Kl{#E zE5t}^bzK4l<*C%B*6naVW<;<`trLpT02NI`Vto%R+G1V9p@skvs@o_W0Hxj4wLE(1by9qNv|@}K<=o>A@ZxB=@`rH8gF&FaK5RRN(% zt4_4Rl#Gc!^)54sqGN}(ZVe?Y=-oy`Xu>B(R``Z%Bl;rXs)|oX)Z!FX$Z$1`o`VcW z;1D*EyqLx3BV@-SiDY5aWI@ICkN*bByQ7A3dTY2-Q9>vYVE7OEl~yFe^zwkgbB_ zf6xpyMb;z~lzV^=RBE{1xtCL8ZW1ds^yPZP&}YnNNi5e59-AK%wzm;=avW!QG%NU_VVxW-%eL^P8!_VWPz*l$}#au0-$2qoAB&VsoC z&oVXM&mzBWe;m-d#I~%zgf>bafrS4+aKso2fmv#U7^b>hvh&}<&`0+=W^ zXa^Oq1{_=FUijZ10Tn@^KCQ$?Q|6Q({MZ2QcbWTsl*qLvuy&9Y*1271AxK(Q+D!9Z zrmMzUZTZd2(~aUU6WNh0bK;R%&LJ9ocpB6UHj?;?h?o1;9s%upE#VK}R;4Kq)a(s( zrz0=xWSiZ=rl8}!Dn`rFXj#WC1eUn7)Df2+oBu6wi0X(-1Sf?A(?g!w_TN`@T>H!Q{0PEwh2R#YZn0{z>1e|j>w6cCZ|(^9OjmUoyf z{`6y946XW0(qghouqU$+U}}Y?TjVk}`D5gp(VfxRnB`7T=u!6k&EVm;O`D#SEH4j9 zf7o|$)DcnjB4KhL7w#fIspem#E_&Bo)L>6}XisUn)+-FRVf62^uar{6zkN1HrFKRk zcPsJ;%d~~CGt2;6tl5k1MfS33pQNV3IkJ|e8GBiq4UrbLjk6_V!5tltj6xihb3~#^ z6HzdZe){33knN21Es-2JL{MaOwY6E;phlnsd%tK*5q(s%w)s-+%w0IAu&`MOKiZSz z$~3s~@#5@15_66V0Mau|OcOl(3G@<@-+Z3+W=cT{BpoA*5K3B^O3$T6==eYzs(}Is z%4ARfL#ELkIdh3+vQ!&a`I!##Wp+I1$|0Ll?p1LGFJ@S;ArX8l62Wku&?-K% zBtlDCxO-UYzh>#7zANImU%ep|)0C)SINT*6TA}eoY{?3LMrvz^F-3?)_i>N8aOe`m zBWhwy!Rh?^7|aqNAzowr$)9s)igvS(5-&Y&J(?J^FNr3n<(tJo_(}>%NV{N#B{eJm zZkCqHp7n1k7DnBr^qDDW0xyOHRi#>=m&usQu|ov=9EQb#)59haZMc{k@P?|%lG<7V z=MW$|50=tYQw%FKrS_d(HU1Iw3uSbimt4=>0}eqnWmg09AkKsUS3g|H#q-=icEYTX z)GB$mL_l}MOuH;dzEd1RiGSLb%(Fk*@&4olaO5@A1`tOIUp4i-FX_z~Xho69uwo5y zBFOCO#~Q?xT9Pi{6iEOFFiZ7dB*(^#-)Ig2TgL{|T6zn!jM7>`axTP#chSSLOp2dJ zp!qg6H-(2XptMlbH9P57Vjpi;q2f+j-`m(6#8`epOR)?#ekhpNjgcIsLprSC<{k?aO#SFVfz z@hI-g-2(;Baw1T7raGC)o@cuRlIhZIWvH}NBk$sT4E;N#O%M*N!$6Ngk04#5p_^wj zUCe;V3x}>Ldiz-JaikcrM>gnL8O=HUWGly^f2ZObtc(@_;3zmBSS3rLVS5C~1Qfe^ zwa>3bn|0U}B+02~pzKen?eT&%-+3ZbQ>sgv6j`282ygha+X|@Q8&BA$tgfUTd;>I*wtFx=exwZeKf_G^Z>sGsZQoMk0oBUb@0R1;vYg$ zXCc@X=IiNPA z7Hc{gzdRE@U@_h1f~P z+xsT51!rpc599tBnY0W=5@xY|K66)0SxUB#msII(WGpcSc|YbDQ~RU3xoW45uwLk9 z1lsBTU2#xcl3YY_CLB#&yNP|G(RvREFZ#~&b6Si4{zmfXG5KfgLv*pfhJ@itAR>hn zSd|^fcupNnah?4+u@A9>Vbr<;=|+hB8edKT_o)&#e%MF;N(hIttJa7api9Cf-8b%i z%7KF<0+6Q;sG=f3Z~2g3@J65Ap!K;>=EyQtQ_rbi?FGCz|ERcV&!2uN_kp?quh(`Fz!4sVvuB2r!)rd4g-k2mZX^>Z-{mAuzwXtCA z_Lnv)4rz(N3Bn_gK!@$;RlpOk!irNzbH;o8%acd=o*5M>!{MCvAz+) z2<4>+bhX!t*oIFnuM-%IQOdx0XnQ3M26tY z7h8@Qc!T2(&6)GCgCH5l%rH7E(NvPTk@%;z_@?$ct>eZg&z}br<}4<{n*8Bp9Ps@9 zxu;V&eGkD2nlWdy;h0VgLo>;+NR@A(N9yD!p_~z&93P^Jr7w_B2!f)T50l_bH@{kCt<&NDq(4-6=1Qr#Q~nG1e|Y7@e{pO{6i~w0jir_!8=_A3%?n? zdRv)eshwH{f1SGMUUAH_08E_Xx2Zp(R9L){t`OwTRvKsWzwM#yCIsAIL`@S}Q2aeb zp**k@bz_@J%04De7>!OMM zD0-v-5*H5K@fAhnFdcTb!d4P(dzQpMaFyH_*IAyB{p=^ZUe)3py05}R7tlOaod|AV z?uoM%*gK@>w)ss@8c$0hp-ci2vOLyi4Bq|*=^C!Vwhfq7U|ImVfvgQ%%21yu(Xpl$ z0eYImc_GTtk*5JRVQH7ZmOmr$q*OgyT&Xv(b9to!1{xqi`61F+LL9l={Kk3*+iGbwoa0;Np!7nk7BjH$mNs{V~rQR9T zm@1`Bn(q3^no=3J_ELsLRLajp{nc_9lUCBXQ z9f9gbKz1?vshTBP1i+>`jUbdUg7vAKz()o)>Fjy0T???0pO_x82n3$Qg+Uje*%A+4 zA6uws@meltdnj@OBBe!(_YSFsLI^7YQBfG@OR*%4JEyrSgPaDe!Lm19)@BqDB7_{+ zR-W~53}Q)wP&xQX6-w)!{$vcbq+ekPx#G%wvf;JB&}^l$4a!Q9t_TfZQw2%fF#2K;#Gdn-^IRD#S=0Y#4ABV;NE0CMclU zSd~Jd4oI%xK8mGEur|279nM@GpxgqctCZp=zN^p5zXcp$Ay=SMnF~G^kVLC zkE@6HEbzDJz^Oq zJ$Jir4n>l>D!F+?&6xx~ zP6c$cC67m-B9HStfbZK-YKAafiYz%nM5|p;4HLx1ZnWqn+?=w~TPmlQaGw`oEZzH+ z+XO4g0vpht!m_Gaak@@N&4flVpwjw!I7OP3O50k!d$0^8TEp7xM=TtjSs{V8U^bW* zk8Sr(k5OH(3=e#xwfmJ+Enr#ftcTH@pH$ZBbM`C`O%dVSdm~g(=!)di;me@FeWacR z^N6+QE0rnDfwNMX1Em^OhZ?D6`31%ASR|2>@-v~lG4M>04@;$_U9AVt#44@c9jU9Q zJW$hy8Hpk(ibsjs?p*E3^>#DJ%i*A?AJroQn1gpL@!hrY*X@N4bB{f<=bFvjbA3xs z%rKL+r%lA!k1XgWNvNs<#~(FhJ_RYqg&htU2cgU{>w>+;8Vkp|?%G|vt^WIY7r(gs z^;aydzu9o;)z1^B#>U@wSJdY}%)04v-7RjB;ud*6GxsIoiuoMe@vTo z!?L4zI6K(=O3WCS@7>=vdpd%5nhz~Y?(@-O_*?6HQK^B?xkpAl<7J-n003`h`2HNz zPn}*>P2JazH{5OYYW+iUf!kkE6Z_%(#EPB7@iiAG9j|~LPWiI!KEK7e|DH9!0gj26 z^Q#J}DjMC8k`Z9swq%>J-v0Q~l&9SbA9YxhG@W4kIqKkHX+fP+m~+ZFoBJ%GrJt z;NQ}`6N`|&(RN5{N-ewB`js`M@g?3@=E10zHnt7ndaf{_NNssl91eCFpAMm@2_JRu z$*kS(e>}ACNXgw++?+MI{Uo;5VT?yD@%&=L39JTh8S4`D@&iqN_@my}{@&T0<{kbk z<-HD!#=;1Yf9YY^xFB@6x=X;2%h}&2O{EcSeSnOYGTCs_qc@nxvPTC^$nd7T$v$X zEw=);^AwzUt@A4woZ!Yjmcn~&#!C-u9K=;=!p2oi7SO%L*58qLZr;kPi@$IiGU7E_ z9~@p|?;GsI6ore}ExzgQp8hsGrDsA8E2)ybj338<=gxi3zGTvIl7>x}UvlRgadG{@ zT{lnB@f#{}nz7m`t$qkzOUG%uTYGq%n=&7K3!qr-!b0q5{A2YOEua<0xRhH{mQ*;L zTbSb2rt%s$|DC=pN(-uh83AgJ#|F2rcgGpQ6$VYg|2_K!u8IIfo$A#%SL^N#v96RY zW?o|HhMWpEZGNixZ1~0EKcchStg}{Zu|solvb587(Xl3)QGMX(r=0&7z!N%alRLT< ziFH*6rR}~NF~cJ(1yj70s%!3j3cAR@_%AOfjv`vMnJLkKN8jzmu?>4H*=VN2Q1L*4;|HXzW z$uuENm%YMKm@zXA=V{|0H{&I)yqJU%2_#@Y@q9>xO}z+h-0~=x&ng!D_~zgXz}lxY^UKzt^6c4+iV% z$0`Rb^_+P#+}mppUc}yCzorCN-4kGa62>DcNnBvy!jPoEwolcKT-~O%0g)XVQaEtR z@y_daZIo@@bkeUR))DNNtGwX4djo9v$wQUc3mXTm;enBLxeG(d$G)nrhE4u`^wuc zwze)iJUMx5!V4?hFRg7V-)Stdl_$J@e!bajU*D3wY((dNx2+?K+_!pLtGj~hf#EKr z58s>at8ZOiAB+Em<1=>ffy$T{9{5{&N%+SJo5lLu=0uIjY52I!3zxl^f*+k(iT>^h~~RQCFk?1&F>wC*a8 z`UUsD8U3p|ryL>nTF#f-Rq;#sj)b?PALzWE^)4R}k`mbdYh^o?1v13M&!b}-tPlY# z{J-!4;a)>*^@HdvuQte(R$I{ANi_gA?S|;MK6uD7jNjfeZ^w3?yz$8xBolj9Ul>Wx zlszgQ8q3pkR5KiBr=43-_(AX~kAg++?|pM??8T3}@lLAEzs6SI`BfwRSE8SIn{vXU z>fG+>uE+bVX#<#GYziJ8e>=-5Zf$a_Myktk;)?C06AR{q5~9M2-T4r0!(-g_G-G?$ ztCic5iqq5S<+Z1|`zyC0xSnMA_xf2wGK1^mVl_xNLl77(qGurO*v3JZ!^PAh@8-Nz zUyondGxyiR+LNuGffa;?tB={UUz5*g(CCyP&cPz*q06%+0CFf@J zIO6TUr{^jRsd4l4H)GK*quU!y)6N*w-ND+$_sqZT38h!K{F3!LUYBSWE+dTOrgJ1L zKWLwHgnk8-gTW769%{L}U-6t*)x2Z&WjYgx5+?dqUMsqik`o0%)x0k&X-IEta{CTn z>Hc!&kAhWPT)7cWt&eFbW#crDZ!s-_xHWO)}03 z>7WP{*+&G!0Z2YM@gd@4Z2j!@{K~2IE$R%mDZNnB(He$L>JFY%lLdR36{I9Kvr0CF7U0^;+OOuP+h z7Q|!)BI*I^+9h{tt`I>wkt5H>DC}o`1I|3|wXZuKqy?!-Si`vRJNoSYSf^khapF8| zoG8jv5EZGtkQ-HuTbjqW?$x?S!CbMcC*bI0g|$8NxeZ|!Vw>*isDOKVVMx8K)mMBU z=88VnI3*o%RN}}ZKwV!}ROSzyVBgKivFqI?0-5mJa$WK{;IBt7je05HtjvG`KWHbl3H-dG;s zY2GL<*f`=6x9mVa?V5Wc5d7RUV@m^8-sNdOcMm`#;=d06>q+?xq)mfw`_1$=;97)= z*7HP98wb&pH&XWW8s;b%GW8x63jvFTrihOW$sszsb(l z=r{MvM@|O;l`$j0&L#D;)m~WI>2yc-wQDd@naKy=^wxf`JJt3KW@NI9tZL~RzgkXA zqYfta#R)j2M`<%?cjc~doBwmm$emg`EGWZd;Z#J21XS7<+!f?%J?s8Vrex#Mb8hp0JlNkxfGe=31SIiRKWp{z zwmD|c>bGJCnRX-+J5NZto?Z)!6CJo+eHt~!^_cO;&a$z4BKjg+0oDai0u5#vmp%aU zKhe9ugAjM@;AQ=-b0Dh-ZtHxl8W0yhYl}MZ_TGrO_^GYtzbz^WvZTrXIA$FB$EWOf zTuhmiS}_G6c27mzTr=q~%=VsOU;N<9zkJ+Qc3*k0bxzc+a-Vy)8Ml9QJalSQE6zJNH{3ECX`Je}d-DY0H~7%H^G158z)@a-YLZd)mGLj=>Feb(E&|d&e_2d@18VfAGnXU(H;!n3eP`Z`MA`(_f;_oNpeU) z4MURHYFzbO{3aY7QIcFO#ofb>h(kMg@-CjwQEQOBo^dVW`5}l@fg3y!Zwf(6dsDRH{;8a$4~ef6E1!W**~; zo$Td8Y(OiwaoERhLsl-gR^PRe#H`LU@>9R7p!T?@5iyb4BgG|LaUve=7iy2O+yB&k z$8y9O^ub>iaZlhopiSuQ7x*WmMasO8*o@Wb{OuG5|M+*VEm!_sW+Vtt)R^ z*6jJkKc}d+WYsAWr5yf`uYsV0ErypC?pQx3?*2P9j}G>N$vipC2K*(_z0hmcV1ALY znKJEo+46Kmrnle@1s?W`Ncsgw8F7%!lYxrxavC6I7i-5%|6E2}Mule9<$AMPwwQ7PGqyD6_ zH7b<*nNt*m-!wHeyBStQV54Ng@4*QzkE-uoX@C_xkY^xX>3^*YLCJKVor?hJ)VknM zUH)qMbTRb!A$aEJbjDpy9D^T#JpBiUC^kY)N8Qcb9(J$g7FgJUBNu50d9)o~*)(N> zi5TYm0TQSALT<y-Ht*8-Ekzd0+b{bg7e*Q^%B@g_wHK2qpmP`sBdCBy~Qt~C)l&( z-31!#BSZ)Ivt!za@11Q!f`(}(8|f95jG?K;Sn^^qz68mN%I0^#cuq%q6*@uPgwV1r z7fyz^J{iw^|M6nHotXtO{0A=Kx|;$>HPG0lGfqTaKzMEtIUw?;lNYY(T6_ssPJ+n} zhpn(YI^*)Sawc2~34cS*m)d8oz_;Ex(SkPbOp?%l0H7g*2UU`3N599k<8Sg<(%Cv% zoh#sge<}haH)<_wFu?dRssUjt69a!g;CM;)!&}?0{~mFTF+r{n5u6hf=XW6t>4$gE zHV9YTb@|L|&7SnY14sU1wP^bmOSD3~V&X`Zn@Jp*)N{?))1BFK-PF_B)8hz?@3HoD zN7g@~9@N9&QNqQ2rf-X5v@cnX^te~Y_&TyIequRq2G9Ffal}Pw-y7e;l z5PX7qQCjSzjup^-f-n~u2czO*uXN)C8DH|Oa-4w2A{&0R5*Z4Wk=pw^WBBY%LP2x? zaz!Mas61pJ_c?*qH;2YlR*cb1G8_!)1%X5<8f_o{IJ3I+F4$Vg%gSlL{HI_NS_2Rr zi=R%sS7rQ~^4eZgv~XhlEqx#dZv!dc>f_9N&hFn91v092u-oWYbACxVIxKmQV^`3k zP4mmTJKt_Hfza)k<~Az-=Ho3I@2hdAzxbyXnX3STt!3}XqZPibfb6cI^TA0ND^3V( z&q6~ykZXaVkC9ItdB#cBCPXzNgj`gDY}*;qw=cQxS|m8QV_Hn$8Z1Uy1F$OjK|RopJ`B;e+NnR_3N8k05!Q2Z9Z=G@ipHzVm( z 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 literal 0 HcmV?d00001 diff --git a/skeleton/!Список проектов.xlsm b/skeleton/!Список проектов.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..a4fdb4007f8aa4abc853881c23e278ee3e01e1a1 GIT binary patch literal 25199 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 Jj3$5F{U5dMC0GCe literal 0 HcmV?d00001 diff --git a/skeleton/ConceptReport.xlsm b/skeleton/ConceptReport.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..fbf27207d4c82b686b4b036f90be9c54480092a8 GIT binary patch literal 9600 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 F;5*c%cx3

0 Then _ + row_ = row_ + inc +End Function + +Public Function GoFirst() + row_ = FIRST_ROW +End Function + +Public Function GoLast() + row_ = data_.Columns(S_GD_WORKER_ID).Find(vbNullString, LookAt:=xlWhole).Row - 1 +End Function + +Public Function IsDone() As Boolean + IsDone = data_.Cells(row_, S_GD_WORKER_ID) = vbNullString +End Function + +Public Function RemoveRow() + Call data_.Rows(row_).Delete +End Function + +'===== Propertiy Get ===== +Public Property Get WorkerID() As String + WorkerID = data_.Cells(row_, S_GD_WORKER_ID) +End Property + +Public Property Get Year() As Integer + Year = data_.Cells(row_, S_GD_YEAR) +End Property + +Public Property Get DDate() As Long + DDate = data_.Cells(row_, S_GD_DATE) +End Property + +Public Property Get Category() As TProjectCategory + Category = CCStringToCategory(data_.Cells(row_, S_GD_CATEGORY)) +End Property + +Public Property Get Project() As String + Project = data_.Cells(row_, S_GD_PROJECT) +End Property + +Public Property Get Duration() As Double + Duration = data_.Cells(row_, S_GD_HOURS) +End Property + +Public Property Get WorkType() As String + WorkType = data_.Cells(row_, S_GD_WORK_TYPE) +End Property + +Public Property Get Description() As String + Description = data_.Cells(row_, S_GD_DESCRIPTION) +End Property + +' ==== Property Let ==== +Public Property Let WorkerID(newVal$) + data_.Cells(row_, S_GD_WORKER_ID) = newVal +End Property + +Public Property Let Year(newVal%) + data_.Cells(row_, S_GD_YEAR) = newVal +End Property + +Public Property Let DDate(newVal&) + data_.Cells(row_, S_GD_DATE) = newVal +End Property + +Public Property Let Category(newVal As TProjectCategory) + data_.Cells(row_, S_GD_CATEGORY) = CCCategoryToString(newVal) +End Property + +Public Property Let Project(newVal$) + data_.Cells(row_, S_GD_PROJECT) = newVal +End Property + +Public Property Let Duration(newVal As Double) + data_.Cells(row_, S_GD_HOURS) = newVal +End Property + +Public Property Let WorkType(newVal$) + data_.Cells(row_, S_GD_WORK_TYPE) = newVal +End Property + +Public Property Let Description(newVal$) + data_.Cells(row_, S_GD_DESCRIPTION) = newVal +End Property diff --git a/src/aggregator/IteratorWorker.cls b/src/aggregator/IteratorWorker.cls new file mode 100644 index 0000000..fb8c852 --- /dev/null +++ b/src/aggregator/IteratorWorker.cls @@ -0,0 +1,81 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "IteratorWorker" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Public row_ As Long +Private data_ As Excel.Worksheet + +Public Sub Init(target As Excel.Worksheet, Optional tRow& = FIRST_ROW) + Set data_ = target + row_ = tRow +End Sub + +Public Function Increment(Optional inc& = 1) + If row_ + inc > 0 Then _ + row_ = row_ + inc +End Function + +Public Function GoFirst() + row_ = FIRST_ROW +End Function + +Public Function GoLast() + row_ = data_.Columns(S_E_ID).Find(vbNullString, LookAt:=xlWhole).Row - 1 +End Function + +Public Function IsDone() As Boolean + IsDone = data_.Cells(row_, S_E_ID) = vbNullString +End Function + +Public Function RemoveRow() + Call data_.Rows(row_).Delete +End Function + +'===== Propertiy Get ===== +Public Property Get WorkerID() As String + WorkerID = data_.Cells(row_, S_E_ID) +End Property + +Public Property Get WorkerName() As String + WorkerName = data_.Cells(row_, S_E_NAME) +End Property + +Public Property Get Active() As Boolean + Active = data_.Cells(row_, S_E_ACTIVE) = 1 +End Property + +Public Property Get Hours() As Double + Hours = data_.Cells(row_, S_E_HOURS) +End Property + +Public Property Get ReportPath() As String + ReportPath = data_.Cells(row_, S_E_PATH) +End Property + +' ==== Property Let ==== +Public Property Let WorkerID(newVal$) + data_.Cells(row_, S_E_ID) = newVal +End Property + +Public Property Let WorkerName(newVal$) + data_.Cells(row_, S_E_NAME) = newVal +End Property + +Public Property Let Active(newVal As Boolean) + data_.Cells(row_, S_E_ACTIVE) = IIf(newVal, 1, 0) +End Property + +Public Property Let Hours(newVal As Double) + data_.Cells(row_, S_E_HOURS) = newVal +End Property + +Public Property Let ReportPath(newVal$) + data_.Cells(row_, S_E_PATH) = newVal +End Property diff --git a/src/aggregator/Main.bas b/src/aggregator/Main.bas new file mode 100644 index 0000000..1749bf4 --- /dev/null +++ b/src/aggregator/Main.bas @@ -0,0 +1,86 @@ +Attribute VB_Name = "Main" +Option Explicit +Option Private Module + +Public Sub RunAddWorker() + Dim iWorkers As DB_Workers: Set iWorkers = AccessWorkers + Dim iInput As ItemInputWorker: Set iInput = PromptInputWorker(iWorkers) + If iInput Is Nothing Then _ + Exit Sub + + Call iWorkers.AddWroker(iInput.workerID_, iInput.workerName_, iInput.path_) + Call ThisWorkbook.Sheets(SHEET_WORKERS).Activate + Call UserInteraction.ShowMessage(IM_ADD_WORKER_OK, iInput.workerName_) +End Sub + +Public Sub RunReloadWorker() + Dim iWorkers As DB_Workers: Set iWorkers = AccessWorkers + Dim sInputID$: sInputID = PromptWorkerID(iWorkers) + If sInputID = vbNullString Then _ + Exit Sub + + Dim xlApp As New API_XLWrapper: Call xlApp.SetApplication(ThisWorkbook.Application) + Call xlApp.PauseUI + Dim bLoaded As Boolean: bLoaded = ReloadWorker(iWorkers.Access(sInputID), AccessGlobalWorks, GetStartDate) + Call xlApp.ResumeUI + + If bLoaded Then _ + Call UserInteraction.ShowMessage(IM_RELOAD_WORKER_OK) +End Sub + +Public Sub RunRemoveWorker() + Dim iWorkers As DB_Workers: Set iWorkers = AccessWorkers + Dim sInputID$: sInputID = PromptWorkerID(iWorkers) + If sInputID = vbNullString Then _ + Exit Sub + + Dim iWorker As IteratorWorker: Set iWorker = iWorkers.Access(sInputID) + If Not iWorker.Active Then + Call UserInteraction.ShowMessage(EM_WORKER_ALREADY_REMOVED, iWorker.WorkerName) + Else + iWorker.Active = False + Call ThisWorkbook.Sheets(SHEET_WORKERS).Activate + Call UserInteraction.ShowMessage(IM_REMOVE_WORKER_OK, iWorker.WorkerName) + End If +End Sub + +Public Sub RunReloadAll() + Dim iWorkers As DB_Workers: Set iWorkers = AccessWorkers + Dim nStartDate&: nStartDate = GetStartDate + Dim iGlobalWorks As DB_GlobalWorks: Set iGlobalWorks = AccessGlobalWorks + + Call CSE_ProgressBar.Init(" ", maxVal:=iWorkers.CountActive) + Call CSE_ProgressBar.ShowModeless + + Dim xlApp As New API_XLWrapper: Call xlApp.SetApplication(ThisWorkbook.Application) + Call xlApp.PauseUI + + Dim iWorker As IteratorWorker: Set iWorker = iWorkers.IBegin + Do While Not iWorker.IsDone + If iWorker.Active Then + CSE_ProgressBar.Description = iWorker.WorkerName + Call ReloadWorker(iWorker, iGlobalWorks, nStartDate) + Call CSE_ProgressBar.IncrementA + End If + Call iWorker.Increment + Loop + + Call UpdatePivots + Call xlApp.ResumeUI + + Call Unload(CSE_ProgressBar) + Call UserInteraction.ShowMessage(IM_RELOAD_ALL_OK) +End Sub + +Public Sub RunInfoProjects() + Dim xlApp As New API_XLWrapper: Call xlApp.SetApplication(ThisWorkbook.Application) + Dim iProjects As Excel.Workbook: Set iProjects = xlApp.OpenDocument(PATH_PROJECTS, bReadOnly:=True) + If iProjects Is Nothing Then + Call UserInteraction.ShowMessage(EM_CANNOT_ACCESS_PROJECTS, PATH_PROJECTS) + Exit Sub + End If +End Sub + +Public Sub RunInfoCalendar() + Call UserInteraction.FollowHyperlink(ActiveWorkbook, URL_CALENDAR_CONSULTANT & "/" & VBA.Year(VBA.Int(VBA.Now))) +End Sub diff --git a/src/aggregator/MainImpl.bas b/src/aggregator/MainImpl.bas new file mode 100644 index 0000000..dcb9d1d --- /dev/null +++ b/src/aggregator/MainImpl.bas @@ -0,0 +1,70 @@ +Attribute VB_Name = "MainImpl" +Option Private Module +Option Explicit + +Public Function ClearAll() + Call ThisWorkbook.Worksheets(SHEET_DATA).UsedRange.Offset(1).ClearContents + Call ThisWorkbook.Worksheets(SHEET_WORKERS).UsedRange.Offset(1).ClearContents + Call UpdatePivots +End Function + +Public Function UpdatePivots() + Dim iPivot As Excel.PivotTable + Dim iSheet As Excel.Worksheet + For Each iSheet In ThisWorkbook.Sheets + For Each iPivot In iSheet.PivotTables + On Error Resume Next + With iPivot + .RefreshTable + .Update + End With + On Error GoTo 0 + Next iPivot + Next iSheet +End Function + +Public Function PromptInputWorker(iWorkers As DB_Workers) As ItemInputWorker + With CreateWorkerDlg + Call .Init(iWorkers) + Call .Show + If .isCanceled_ Then _ + Exit Function + Set PromptInputWorker = .GetUserInput + End With +End Function + +Public Function PromptWorkerID(iWorkers As DB_Workers) As String + Dim sInput$: sInput = UserInteraction.PromptInput(" ", " ") + If sInput = vbNullString Then _ + Exit Function + If iWorkers.Contains(sInput) Then + PromptWorkerID = sInput + Else + Call UserInteraction.ShowMessage(EM_INVALID_WORKER, sInput) + End If +End Function + +Public Function ReloadWorker(iWorker As IteratorWorker, iData As DB_GlobalWorks, nStartDate&) As Boolean + ReloadWorker = False + + Dim sPath$: sPath = iWorker.ReportPath + Dim fso As New Scripting.FileSystemObject + If Not fso.FileExists(sPath) Then + Call UserInteraction.ShowMessage(EM_MISSING_REPORT_FILE, sPath) + Exit Function + End If + + Dim xlApp As New API_XLWrapper: Call xlApp.SetApplication(ThisWorkbook.Application) + Dim iReport As Excel.Workbook: Set iReport = xlApp.OpenDocument(sPath, bReadOnly:=True) + If iReport Is Nothing Then _ + Exit Function + + ReloadWorker = ValidateReport(iReport) + If ReloadWorker Then + Call iData.ReloadDataFor(iWorker, iReport, nStartDate) + Else + Call UserInteraction.ShowMessage(EM_REPORT_INVALID, sPath) + End If + Call xlApp.ReleaseDocument +End Function + diff --git a/src/aggregator/z_UIMessages.bas b/src/aggregator/z_UIMessages.bas new file mode 100644 index 0000000..0847225 --- /dev/null +++ b/src/aggregator/z_UIMessages.bas @@ -0,0 +1,70 @@ +Attribute VB_Name = "z_UIMessages" +' Messaging module +Option Private Module +Option Explicit + +Public Enum MsgCode + MSG_OK = 0 + + EM_INVALID_WORKER + EM_WORKER_ALREADY_EXISTS + EM_WORKER_ALREADY_REMOVED + EM_CANNOT_ACCESS_PROJECTS + EM_MISSING_REPORT_FILE + EM_REPORT_INVALID + + IM_ADD_WORKER_OK + IM_REMOVE_WORKER_OK + IM_RELOAD_WORKER_OK + IM_RELOAD_ALL_OK + + ' QM_CODE_DELETE_CONFIRM +End Enum + +Private g_UI As API_UserInteraction + +Public Function UserInteraction() As API_UserInteraction + If g_UI Is Nothing Then _ + Set g_UI = New API_UserInteraction + Set UserInteraction = g_UI +End Function + +Public Function SetUserInteraction(newUI As API_UserInteraction) + Set g_UI = newUI +End Function + +Public Function UIShowMessage(theCode As MsgCode, ParamArray params() As Variant) + Dim unwrapped As Variant: unwrapped = params + unwrapped = FixForwardedParams(unwrapped) + + Select Case theCode + Case EM_INVALID_WORKER: Call MsgBox(Fmt(" : {1}", unwrapped), vbExclamation) + Case EM_WORKER_ALREADY_EXISTS: Call MsgBox(Fmt(" : {1}", unwrapped), vbExclamation) + Case EM_WORKER_ALREADY_REMOVED: Call MsgBox(Fmt(" : {1}", unwrapped), vbExclamation) + Case EM_CANNOT_ACCESS_PROJECTS: Call MsgBox(Fmt(" " & vbNewLine & "{1}", unwrapped), vbExclamation) + Case EM_MISSING_REPORT_FILE: Call MsgBox(Fmt(" : {1}", unwrapped), vbExclamation) + Case EM_REPORT_INVALID: Call MsgBox(Fmt(" : {1}", unwrapped), vbExclamation) + + Case IM_ADD_WORKER_OK: Call MsgBox(Fmt(" : {1}", unwrapped), vbInformation) + Case IM_REMOVE_WORKER_OK: Call MsgBox(Fmt(" : {1}", unwrapped), vbInformation) + Case IM_RELOAD_WORKER_OK: Call MsgBox(" ", vbInformation) + Case IM_RELOAD_ALL_OK: Call MsgBox(" ", vbInformation) + + Case Else: Call MsgBox("Invalid message code", vbCritical) + End Select +End Function + +Public Function UIAskQuestion(theCode As MsgCode, ParamArray params() As Variant) As Boolean + Dim unwrapped As Variant: unwrapped = params + unwrapped = FixForwardedParams(unwrapped) + + Dim answer&: answer = vbNo + Select Case theCode + ' Case QM_CODE_DELETE_CONFIRM + ' answer = MsgBox("Are you sure you want to delete ALL macros from target file?", vbYesNo + vbQuestion) + + Case Else + Call MsgBox("Invalid message code", vbCritical) + End Select + UIAskQuestion = answer = vbYes +End Function diff --git a/src/aggregator/z_UIRibbon.bas b/src/aggregator/z_UIRibbon.bas new file mode 100644 index 0000000..1504b33 --- /dev/null +++ b/src/aggregator/z_UIRibbon.bas @@ -0,0 +1,16 @@ +Attribute VB_Name = "z_UIRibbon" +Option Private Module +Option Explicit + +Public Sub OnRibbonBtn(iControl As IRibbonControl) + Select Case iControl.ID + Case "AddWorker": Call RunAddWorker + Case "RemoveWorker": Call RunRemoveWorker + Case "ReloadWorker": Call RunReloadWorker + + Case "ReloadAll": Call RunReloadAll + + Case "InfoProjects": Call RunInfoProjects + Case "InfoCalendar": Call RunInfoCalendar + End Select +End Sub diff --git a/src/common/DB_CachedProjects.cls b/src/common/DB_CachedProjects.cls new file mode 100644 index 0000000..fb7aec0 --- /dev/null +++ b/src/common/DB_CachedProjects.cls @@ -0,0 +1,105 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "DB_CachedProjects" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Public projects_ As Scripting.Dictionary +Private substitutes_ As Scripting.Dictionary + +Public Function Reload(iSource As Excel.Workbook) + Set projects_ = New Scripting.Dictionary + Set substitutes_ = New Scripting.Dictionary + Call ScanSubsitutes(iSource) + Call ScanActiveProjects(iSource) + Call ScanArchiveProjects(iSource) +End Function + +Public Function GetProjectCategory(sProject$) As TProjectCategory + Dim sFixedProject$: sFixedProject = ApplySustitutions(sProject) + If Not projects_.Exists(sFixedProject) Then + GetProjectCategory = T_PCAT_ERR + Else + GetProjectCategory = projects_(sFixedProject).category_ + End If +End Function + +Public Function GetProjectManager(sProject$) As String + Dim sFixedProject$: sFixedProject = ApplySustitutions(sProject) + If Not projects_.Exists(sFixedProject) Then + Exit Function + Else + GetProjectManager = projects_(sFixedProject).manager_ + End If +End Function + +' ======= +Private Function ApplySustitutions(sProject$) As String + If substitutes_.Exists(sProject) Then + ApplySustitutions = substitutes_(sProject) + Else + ApplySustitutions = sProject + End If +End Function + +Private Function ScanActiveProjects(iSource As Excel.Workbook) + Dim iData() As String: iData = LoadActiveProjects(iSource) + If ArraySize(iData, 1) < 1 Then _ + Exit Function + Dim nItem& + Dim iProject As ItemCachedProject + For nItem = LBound(iData, 1) To UBound(iData, 1) Step 1 + Set iProject = New ItemCachedProject + Dim sProject$: sProject = iData(nItem, S_TP_NAME) + With iProject + .isActive_ = True + .category_ = iData(nItem, S_TP_TYPE) + .name_ = sProject + .manager_ = iData(nItem, S_TP_MANAGER) + End With + If Not projects_.Exists(sProject) Then + Call projects_.Add(sProject, iProject.Clone()) + Else + Debug.Print sProject + End If + + Next nItem +End Function + +Private Function ScanArchiveProjects(iSource As Excel.Workbook) + Dim iData() As String: iData = LoadArchiveProjects(iSource) + If ArraySize(iData, 1) < 1 Then _ + Exit Function + Dim nItem& + Dim iProject As ItemCachedProject + For nItem = LBound(iData, 1) To UBound(iData, 1) Step 1 + Set iProject = New ItemCachedProject + Dim sProject$: sProject = iData(nItem, S_TP_NAME) + With iProject + .isActive_ = False + .category_ = iData(nItem, S_TP_TYPE) + .name_ = sProject + .manager_ = iData(nItem, S_TP_MANAGER) + End With + If Not projects_.Exists(sProject) Then + Call projects_.Add(sProject, iProject.Clone()) + Else + Debug.Print sProject + End If + Next nItem +End Function + +Private Function ScanSubsitutes(iSource As Excel.Workbook) + Dim iData() As String: iData = LoadProjectSubstitutes(iSource) + If ArraySize(iData, 1) < 1 Then _ + Exit Function + Dim nItem& + For nItem = LBound(iData, 1) To UBound(iData, 1) Step 1 + Call substitutes_.Add(iData(nItem, S_TS_MATCH_TARGET), iData(nItem, S_TS_REPLACEMENT)) + Next nItem +End Function diff --git a/src/common/DB_Projects.cls b/src/common/DB_Projects.cls new file mode 100644 index 0000000..bd5f8b4 --- /dev/null +++ b/src/common/DB_Projects.cls @@ -0,0 +1,69 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "DB_Projects" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Private data_ As Excel.Worksheet + +Public Function Init(iData As Excel.Worksheet) + Set data_ = iData +End Function + +Public Property Get Data() As Excel.Worksheet + Set Data = data_ +End Property + +Public Property Get Count() As Long + Count = ILast.row_ - IBegin.row_ + 1 +End Property + +Public Function IBegin() As IteratorProject + Set IBegin = New IteratorProject + Call IBegin.Init(data_) +End Function + +Public Function ILast() As IteratorProject + Set ILast = New IteratorProject + Call ILast.Init(data_) + Call ILast.GoLast +End Function + +Public Function INew() As IteratorProject + Set INew = New IteratorProject + Call INew.Init(data_) + Call INew.GoLast + Call INew.Increment +End Function + +Public Function UpdateSorting() + Call data_.Columns("A:E").Sort(Key1:=data_.Cells(1, S_P_PERMANENT), Order1:=xlDescending, _ + Key2:=data_.Cells(1, S_P_TYPE), Order2:=xlDescending, _ + Key3:=data_.Cells(1, S_P_NAME), Order3:=xlDescending) +End Function + +Public Function DumpData() As String() + Dim nCount&: nCount = Count + If nCount = 0 Then _ + Exit Function + + Dim iDump() As String + ReDim iDump(1 To nCount, ProjectTransferStruct.[_First] To ProjectTransferStruct.[_Last]) + Dim iter As IteratorProject: Set iter = IBegin + Dim nItem&: nItem = 1 + Do While Not iter.IsDone + iDump(nItem, S_TP_TYPE) = iter.PCategory + iDump(nItem, S_TP_NAME) = iter.Project + iDump(nItem, S_TP_MANAGER) = iter.Manager + Call iter.Increment + nItem = nItem + 1 + Loop + + DumpData = iDump +End Function + diff --git a/src/common/DB_WorkerData.cls b/src/common/DB_WorkerData.cls new file mode 100644 index 0000000..e306222 --- /dev/null +++ b/src/common/DB_WorkerData.cls @@ -0,0 +1,109 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "DB_WorkerData" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Private source_ As Excel.Workbook +Private data_ As Excel.Worksheet + +Public Function Init(iSource As Excel.Workbook) + Set source_ = iSource + Set data_ = source_.Sheets(WORKER_SHEET_DATA) +End Function + +Public Property Get WorkerID() As String + WorkerID = source_.Names(CELL_WORKER_ID).RefersToRange +End Property + +Public Property Get WorkerName() As String + WorkerName = source_.Names(CELL_WORKER_NAME).RefersToRange +End Property + +Public Function IBegin() As IteratorWork + Set IBegin = New IteratorWork + Call IBegin.Init(data_) +End Function + +Public Function ILast() As IteratorWork + Set ILast = New IteratorWork + Call ILast.Init(data_) + Call ILast.GoLast +End Function + +Public Function INew() As IteratorWork + Set INew = New IteratorWork + Call INew.Init(data_) + Call INew.GoLast + Call INew.Increment +End Function + +' ====== Actions ======= +Public Function FixDataGroups() + On Error Resume Next + Call data_.UsedRange.Rows.Ungroup + Call data_.UsedRange.Rows.ClearOutline + On Error GoTo 0 + + Dim nRow&: nRow = WORKER_FIRST_ROW + Dim nLevel& + Do + Dim sText$: sText = data_.Cells(nRow, S_W_DATE) + If sText = vbNullString Then _ + Exit Function + If sText Like ":*" Then + nLevel = 1 + ElseIf sText Like ":*" Then + nLevel = 2 + Else + nLevel = 3 + End If + data_.Rows(nRow).OutlineLevel = nLevel + + nRow = nRow + 1 + Loop +End Function + +Public Function DeleteHolidays() As Long + Dim iWork As IteratorWork: Set iWork = IBegin + Do While Not iWork.IsDone + If iWork.Project = PROJECT_HOLIDAYS Then + Call iWork.RemoveRow + DeleteHolidays = DeleteHolidays + 1 + Else + Call iWork.Increment + End If + Loop +End Function + +Public Function CreateYear(nYear%) + Dim iOut As IteratorWork: Set iOut = INew + Dim nDate&: nDate = VBA.DateSerial(nYear, 1, 1) + Call iOut.AddYear(nYear) + Do While VBA.Year(nDate) = nYear + If VBA.Day(nDate) = 1 Then _ + Call iOut.AddMonth(VBA.Month(nDate)) + Call iOut.AddDay(nDate, VBA.Weekday(nDate, vbMonday) > 5) + nDate = nDate + 1 + Loop +End Function + +Public Function ImportYear(iSource As Excel.Worksheet) + Dim iOut As IteratorWork: Set iOut = INew + Dim nRow&: nRow = 1 + Dim nDate&: nDate = iSource.Cells(nRow, 1) + Dim nYear%: nYear = VBA.Year(nDate) + Call iOut.AddYear(nYear) + Do While VBA.Year(nDate) = nYear + If VBA.Day(nDate) = 1 Then _ + Call iOut.AddMonth(VBA.Month(nDate)) + Call iOut.AddDay(nDate, iSource.Cells(nRow, 2) = PROJECT_HOLIDAYS) + nRow = nRow + 1 + nDate = iSource.Cells(nRow, 1) + Loop +End Function diff --git a/src/common/DataTransfer.bas b/src/common/DataTransfer.bas new file mode 100644 index 0000000..ce19c69 --- /dev/null +++ b/src/common/DataTransfer.bas @@ -0,0 +1,48 @@ +Attribute VB_Name = "DataTransfer" +Option Private Module +Option Explicit + +Public Const PATH_PROJECTS = "\\fs1.concept.ru\Exchange\! .xlsm" + +'# _TP_ +Public Enum ProjectTransferStruct + [_First] = 1 + + S_TP_TYPE = 1 + S_TP_NAME = 2 + S_TP_MANAGER = 3 + + [_Last] = 3 +End Enum + +'# _TS_ +Public Enum SubsTransferStruct + [_First] = 1 + + S_TS_MATCH_TARGET = 1 + S_TS_REPLACEMENT = 2 + + [_Last] = 2 +End Enum + +Public Function LoadActiveProjects(iProjectWB As Excel.Workbook) As String() + Dim iDump() As String: iDump = iProjectWB.Application.Run("'" & iProjectWB.Name & "'" & "!GetActiveDump") + If Not IsArrayAllocated(iDump) Then _ + Exit Function + LoadActiveProjects = iDump +End Function + +Public Function LoadArchiveProjects(iProjectWB As Excel.Workbook) As String() + Dim iDump() As String: iDump = iProjectWB.Application.Run("'" & iProjectWB.Name & "'" & "!GetArchiveDump") + If Not IsArrayAllocated(iDump) Then _ + Exit Function + LoadArchiveProjects = iDump +End Function + +Public Function LoadProjectSubstitutes(iProjectWB As Excel.Workbook) As String() + Dim iDump() As String: iDump = iProjectWB.Application.Run("'" & iProjectWB.Name & "'" & "!GetSubstitutesDump") + If Not IsArrayAllocated(iDump) Then _ + Exit Function + LoadProjectSubstitutes = iDump +End Function + diff --git a/src/common/DeclarationsWorker.bas b/src/common/DeclarationsWorker.bas new file mode 100644 index 0000000..d45c1f6 --- /dev/null +++ b/src/common/DeclarationsWorker.bas @@ -0,0 +1,44 @@ +Attribute VB_Name = "DeclarationsWorker" +Option Explicit +Option Private Module + +Public Const WORKER_FIRST_ROW = 2 + +Public Const WORKER_SHEET_DATA = "" + +Public Const CELL_WORKER_ID = "c_WorkerID" +Public Const CELL_WORKER_NAME = "c_WorkerName" +Public Const CELL_WORKER_INDICATOR = "c_ConceptReport" + +Public Const PATH_CALENDAR = "\\fs1.concept.ru\projects\10 \02 \01 \ .xlsx" +Public Const PATH_MONTHLY_TEMPLATE = "\\fs1.concept.ru\projects\10 \04 \01 \90 .xltx" +Public Const PATH_SAMPLES = "\\fs1.concept.ru\projects\10 \02 \01 \ .xlsx" + +Public Const URL_CALENDAR_CONSULTANT = "http://www.consultant.ru/law/ref/calendar/proizvodstvennye" + +Public Const PROJECT_MISSING = "" +Public Const PROJECT_HOLIDAYS = "/" +Public Const WORK_DEFAULT = "" + +Public Enum WorkStructure + [_First] = 1 + + S_W_DATE = 1 + S_W_PROJECT = 2 + S_W_HOURS = 3 + S_W_TYPE = 4 + S_W_CONTENTS = 5 + + [_Last] = 5 +End Enum + +Public Function ValidateReport(target As Excel.Workbook) As Boolean + On Error GoTo GO_FALSE + Dim rTest As Variant: rTest = target.Names(CELL_WORKER_INDICATOR).RefersTo + + ValidateReport = True + Exit Function + +GO_FALSE: + ValidateReport = False +End Function diff --git a/src/common/ItemCachedProject.cls b/src/common/ItemCachedProject.cls new file mode 100644 index 0000000..ba6fd5c --- /dev/null +++ b/src/common/ItemCachedProject.cls @@ -0,0 +1,32 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "ItemCachedProject" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Public category_ As TProjectCategory +Public name_ As String +Public manager_ As String +Public isActive_ As Boolean + +Public Function Init(iCat As TProjectCategory, sProject$, sManager$, bIsActive As Boolean) + category_ = iCat + name_ = sProject + manager_ = sManager + isActive_ = bIsActive +End Function + +Public Function Clone() As ItemCachedProject + Set Clone = New ItemCachedProject + With Clone + .category_ = category_ + .name_ = name_ + .manager_ = manager_ + .isActive_ = isActive_ + End With +End Function diff --git a/src/common/IteratorProject.cls b/src/common/IteratorProject.cls new file mode 100644 index 0000000..468348a --- /dev/null +++ b/src/common/IteratorProject.cls @@ -0,0 +1,86 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "IteratorProject" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Public row_ As Long +Private data_ As Excel.Worksheet + +Public Sub Init(target As Excel.Worksheet, Optional nRow& = FIRST_ROW) + Set data_ = target + row_ = nRow +End Sub + +Public Function Increment(Optional inc& = 1) + If row_ + inc > 0 Then _ + row_ = row_ + inc +End Function + +Public Function GoFirst() + row_ = FIRST_ROW +End Function + +Public Function GoLast() + row_ = data_.Columns(S_P_NAME).Find(vbNullString, LookAt:=xlWhole).Row - 1 +End Function + +Public Function IsDone() As Boolean + IsDone = data_.Cells(row_, S_P_NAME) = vbNullString +End Function + +Public Function RemoveRow() + Call data_.Rows(row_).Delete +End Function + +Public Function ImportFrom(iAnother As IteratorProject) + PCategory = iAnother.PCategory + Project = iAnother.Project + Manager = iAnother.Manager + DateFinished = iAnother.DateFinished +End Function + +'===== Propertiy Get ===== +Public Property Get PCategory() As TProjectCategory + PCategory = data_.Cells(row_, S_P_TYPE) +End Property + +Public Property Get Project() As String + Project = data_.Cells(row_, S_P_NAME) +End Property + +Public Property Get Manager() As String + Manager = data_.Cells(row_, S_P_MANAGER) +End Property + +Public Property Get DateFinished() As Long + DateFinished = data_.Cells(row_, S_P_DATE) +End Property + +Public Property Get IsPermanent() As Boolean + IsPermanent = data_.Cells(row_, S_P_PERMANENT) = 1 +End Property + +' ==== Property Let ==== +Public Property Let PCategory(newVal As TProjectCategory) + data_.Cells(row_, S_P_TYPE) = newVal +End Property + +Public Property Let Project(newVal$) + data_.Cells(row_, S_P_NAME) = newVal +End Property + +Public Property Let Manager(newVal$) + data_.Cells(row_, S_P_MANAGER) = newVal +End Property + +Public Property Let DateFinished(newVal&) + If newVal > 0 Then _ + data_.Cells(row_, S_P_DATE) = newVal +End Property + diff --git a/src/common/IteratorWork.cls b/src/common/IteratorWork.cls new file mode 100644 index 0000000..a82fe0b --- /dev/null +++ b/src/common/IteratorWork.cls @@ -0,0 +1,136 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "IteratorWork" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Public row_ As Long +Private data_ As Excel.Worksheet + +Public Sub Init(target As Excel.Worksheet, Optional tRow& = WORKER_FIRST_ROW) + Set data_ = target + row_ = tRow + Call SkipFillers +End Sub + +Private Function SkipFillers() + Do + If data_.Cells(row_, S_W_DATE) = vbNullString Then _ + Exit Function + If VBA.IsDate(data_.Cells(row_, S_W_DATE)) Then _ + Exit Function + row_ = row_ + 1 + Loop +End Function + +Public Function Increment() + row_ = row_ + 1 + Call SkipFillers +End Function + +Public Function GoFirst() + row_ = WORKER_FIRST_ROW + Call SkipFillers +End Function + +Public Function GoLast() + row_ = data_.Columns(S_W_DATE).Find(vbNullString, LookAt:=xlWhole).Row - 1 +End Function + +Public Function GoUntil(nTargetDate&) + Do While Not IsDone And DDate < nTargetDate + Call Increment + Loop +End Function + +Public Function IsDone() As Boolean + IsDone = data_.Cells(row_, S_W_DATE) = vbNullString +End Function + +Public Function IsMergedDescription() As Boolean + IsMergedDescription = False + Dim iDescription As Excel.Range: Set iDescription = data_.Cells(row_, S_W_CONTENTS) + If Not iDescription.MergeCells Then _ + Exit Function + + IsMergedDescription = iDescription.MergeArea.Cells(1, 1).Row <> row_ +End Function + +Public Function RemoveRow() + Call data_.Rows(row_).Delete +End Function + +Public Function AddYear(nYear%) + data_.Rows(row_).OutlineLevel = 1 + data_.Cells(row_, S_W_DATE) = Fmt(": {1}", nYear) + Call Increment +End Function + +Public Function AddMonth(nMonth%) + data_.Rows(row_).OutlineLevel = 2 + data_.Cells(row_, S_W_DATE) = Fmt(": {1}", VBA.MonthName(nMonth)) + Call Increment +End Function + +Public Function AddDay(nDate&, bIsHoliday As Boolean) + data_.Rows(row_).OutlineLevel = 3 + + DDate = nDate + WorkType = WORK_DEFAULT + Duration = 0 + Project = IIf(bIsHoliday, PROJECT_HOLIDAYS, PROJECT_MISSING) + + Call Increment +End Function + +'===== Propertiy Get ===== +Public Property Get DDate() As Long + DDate = data_.Cells(row_, S_W_DATE) +End Property + +Public Property Get Project() As String + Project = data_.Cells(row_, S_W_PROJECT) +End Property + +Public Property Get Duration() As Double + Duration = data_.Cells(row_, S_W_HOURS) +End Property + +Public Property Get WorkType() As String + WorkType = data_.Cells(row_, S_W_TYPE) +End Property + +Public Property Get Description() As String + If Not IsMergedDescription Then + Description = data_.Cells(row_, S_W_CONTENTS) + Else + Description = data_.Cells(row_, S_W_CONTENTS).MergeArea.Cells(1, 1) + End If +End Property + +' ==== Property Let ==== +Public Property Let DDate(newVal&) + data_.Cells(row_, S_W_DATE) = newVal +End Property + +Public Property Let Project(newVal$) + data_.Cells(row_, S_W_PROJECT) = newVal +End Property + +Public Property Let Duration(newVal As Double) + data_.Cells(row_, S_W_HOURS) = newVal +End Property + +Public Property Let WorkType(newVal$) + data_.Cells(row_, S_W_TYPE) = newVal +End Property + +Public Property Let Description(newVal$) + data_.Cells(row_, S_W_CONTENTS) = newVal +End Property + diff --git a/src/projects/DataAccess.bas b/src/projects/DataAccess.bas new file mode 100644 index 0000000..f101361 --- /dev/null +++ b/src/projects/DataAccess.bas @@ -0,0 +1,42 @@ +Attribute VB_Name = "DataAccess" +Option Private Module +Option Explicit + +Public Function AccessActive() As DB_Projects + Static s_Projects As DB_Projects + + If s_Projects Is Nothing Then + Set s_Projects = New DB_Projects + Call s_Projects.Init(ThisWorkbook.Worksheets(SHEET_ACTIVE)) + End If + + Set AccessActive = s_Projects +End Function + +Public Function AccessArchive() As DB_Projects + Static s_Projects As DB_Projects + + If s_Projects Is Nothing Then + Set s_Projects = New DB_Projects + Call s_Projects.Init(ThisWorkbook.Worksheets(SHEET_ARCHIVE)) + End If + + Set AccessArchive = s_Projects +End Function + +Public Function AccessSubstitutes() As Scripting.Dictionary + Dim iSubs As New Scripting.Dictionary + Dim iData As Excel.Worksheet: Set iData = ThisWorkbook.Sheets(SHEET_SUBSTITUTES) + Dim nRow&: nRow = FIRST_ROW + Do + Dim sTarget$: sTarget = iData.Cells(nRow, S_SUB_TARGET) + If sTarget = vbNullString Then _ + Exit Do + Dim sReplacement$: sReplacement = iData.Cells(nRow, S_SUB_REPLACE) + + If Not iSubs.Exists(sTarget) Then _ + Call iSubs.Add(sTarget, sReplacement) + nRow = nRow + 1 + Loop + Set AccessSubstitutes = iSubs +End Function diff --git a/src/projects/Declarations.bas b/src/projects/Declarations.bas new file mode 100644 index 0000000..6939aaa --- /dev/null +++ b/src/projects/Declarations.bas @@ -0,0 +1,30 @@ +Attribute VB_Name = "Declarations" +Option Private Module +Option Explicit + +Public Const FIRST_ROW = 2 + +Public Const SHEET_SUBSTITUTES = "" +Public Const SHEET_ACTIVE = "" +Public Const SHEET_ARCHIVE = "" + +Public Enum ProjectStruct + [_First] = 1 + + S_P_TYPE = 1 + S_P_NAME = 2 + S_P_MANAGER = 3 + S_P_DATE = 4 + S_P_PERMANENT = 5 + + [_Last] = 5 +End Enum + +Public Enum SubstitutesStruct + [_First] = 1 + + S_SUB_TARGET = 1 + S_SUB_REPLACE = 2 + + [_Last] = 2 +End Enum diff --git a/src/projects/Main.bas b/src/projects/Main.bas new file mode 100644 index 0000000..93e617e --- /dev/null +++ b/src/projects/Main.bas @@ -0,0 +1,45 @@ +Attribute VB_Name = "Main" +Option Private Module +Option Explicit + +Public Sub RunUpdate() + Dim iProjects As Scripting.Dictionary: Set iProjects = ScanProjects + Dim iActive As DB_Projects: Set iActive = AccessActive + Dim iArchive As DB_Projects: Set iArchive = AccessArchive + + Call UpdateProjects(iActive, iArchive, iProjects) + + Call MsgBox("Update complete", vbInformation) +End Sub + +Public Sub RunSort() + Call AccessActive.UpdateSorting + Call AccessArchive.UpdateSorting +End Sub + +Public Function GetActiveDump() As String() + GetActiveDump = AccessActive.DumpData +End Function + +Public Function GetArchiveDump() As String() + GetArchiveDump = AccessArchive.DumpData +End Function + +Public Function GetSubstitutesDump() As String() + Dim iSubs As Scripting.Dictionary: Set iSubs = AccessSubstitutes + If iSubs.Count = 0 Then _ + Exit Function + + Dim iDump() As String + ReDim iDump(1 To iSubs.Count, SubsTransferStruct.[_First] To SubsTransferStruct.[_Last]) + Dim nItem&: nItem = 1 + Dim aKey As Variant + For Each aKey In iSubs + iDump(nItem, S_TS_MATCH_TARGET) = CStr(aKey) + iDump(nItem, S_TS_REPLACEMENT) = iSubs(aKey) + nItem = nItem + 1 + Next aKey + GetSubstitutesDump = iDump +End Function + + diff --git a/src/projects/MainImpl.bas b/src/projects/MainImpl.bas new file mode 100644 index 0000000..3b441b4 --- /dev/null +++ b/src/projects/MainImpl.bas @@ -0,0 +1,48 @@ +Attribute VB_Name = "MainImpl" +Option Private Module +Option Explicit + +Public Function ScanProjects() As Scripting.Dictionary + Dim iProjects As Scripting.Dictionary + Set iProjects = CCListProjects(T_PRJ_INCOME) + Call DictionaryAbsorbShallow(iProjects, CCListProjects(T_PRJ_OUTCOME)) + Call DictionaryAbsorbShallow(iProjects, CCListProjects(T_PRJ_LEAD_ACTIVE)) + Call DictionaryAbsorbShallow(iProjects, CCListProjects(T_PRJ_LEAD_TENTATIVE)) + Set ScanProjects = iProjects +End Function + +Public Function UpdateProjects(iActive As DB_Projects, iArchive As DB_Projects, iProjects As Scripting.Dictionary) + Call UpdateArchive(iActive, iArchive, iProjects) + Call AddNewActive(iActive, iProjects) + Call iActive.UpdateSorting + Call iArchive.UpdateSorting +End Function + +' ===== +Private Function UpdateArchive(iActive As DB_Projects, iArchive As DB_Projects, iProjects As Scripting.Dictionary) + Dim iOut As IteratorProject: Set iOut = iArchive.INew + Dim iProj As IteratorProject: Set iProj = iActive.IBegin + Do While Not iProj.IsDone + If iProj.IsPermanent Then + Call iProj.Increment + ElseIf iProjects.Exists(iProj.Project) Then + iProj.PCategory = iProjects(iProj.Project) + Call iProjects.Remove(iProj.Project) + Call iProj.Increment + Else + Call iOut.ImportFrom(iProj) + Call iOut.Increment + Call iProj.RemoveRow + End If + Loop +End Function + +Private Function AddNewActive(iActive As DB_Projects, iProjects As Scripting.Dictionary) + Dim iOut As IteratorProject: Set iOut = iActive.INew + Dim aKey As Variant + For Each aKey In iProjects + iOut.Project = CStr(aKey) + iOut.PCategory = iProjects(aKey) + Call iOut.Increment + Next aKey +End Function diff --git a/src/projects/z_UIRibbon.bas b/src/projects/z_UIRibbon.bas new file mode 100644 index 0000000..df1779f --- /dev/null +++ b/src/projects/z_UIRibbon.bas @@ -0,0 +1,10 @@ +Attribute VB_Name = "z_UIRibbon" +Option Explicit +Option Private Module + +Public Sub OnRibbonBtn(iControl As IRibbonControl) + Select Case iControl.ID + Case "Update": Call RunUpdate + Case "Sort": Call RunSort + End Select +End Sub diff --git a/src/worker/CRD_NewYear.frm b/src/worker/CRD_NewYear.frm new file mode 100644 index 0000000..2ca4be5 --- /dev/null +++ b/src/worker/CRD_NewYear.frm @@ -0,0 +1,51 @@ +VERSION 5.00 +Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} CRD_NewYear + Caption = " " + ClientHeight = 1395 + ClientLeft = 45 + ClientTop = 390 + ClientWidth = 4710 + OleObjectBlob = "CRD_NewYear.frx":0000 + StartUpPosition = 1 'CenterOwner +End +Attribute VB_Name = "CRD_NewYear" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit + +Public isCanceled_ As Boolean + +Private Sub UserForm_Initialize() + isCanceled_ = True + Call PositionInMiddle(Me) +End Sub + +Public Function Init() + isCanceled_ = True + + Call ComboBox1.Clear + + Dim nYear& + For nYear = 2010 To 2030 + Call ComboBox1.AddItem(nYear) + Next nYear + + ComboBox1 = Year(Now()) +End Function + +Private Sub BtnOK_Click() + If IsNumeric(ComboBox1.Value) = False Or ComboBox1.Value = "" Then + Call UserInteraction.ShowMessage(EM_INPUT_INVALID_YEAR) + Exit Sub + End If + + isCanceled_ = False + Me.Hide +End Sub + +Private Sub BtnCancel_Click() + isCanceled_ = True + Me.Hide +End Sub diff --git a/src/worker/CRD_NewYear.frx b/src/worker/CRD_NewYear.frx new file mode 100644 index 0000000000000000000000000000000000000000..756f596fa5e6450375e04d46fd8f4c66112a9567 GIT binary patch literal 3096 zcmeHJO-NKx6#njeSIeBlu`>H1-lBzw49=8bP%@4glE#oowSA*wY0kVFXHi5ni(0hl zXV=D{MHHJO?u-; z0J;_Zk;aJRStq520bcFEb)e_~)AAr#_RvE8{kwC~=>_)o!0Xd$7PzO5rxa?3-3wmM zr3kV<7xtTqyH@;UeX*QMQdS8e?Y6RTn~q$QW((dELmqQG z%d;heVL52ynO`o;=MfH2^HJ(PraScK1|ThsO`hLGqL*eQE4ppWtkBPoW674JR5^>QV4{(kMqvG_kHg>=bn4+xdHzH;0U(b z4Th(!37_`y#qk0xouByqV2r?MZ;$V%tX%_(@-7 z|3nlwu_U*j`)CP8SN9NsD@gK5!^8*@)G6F{j&eb|h8g3SmwK>fHNN^>^QLO)5uV`c zI}E_oqG@ZceU9va!wBYS(YYD&*J~T`18~u8<`Q{oyY-+Bbws)>No{!C#YL zu^AX<{NuQZAVQe6C;#E?*~R*+$e+mBI7BV3i2u&{mzrNj;f;ZE%0Y_MhYIS$6uCx@ zQg{XEc~4Hu`ipIUMF6TEmnu*pd7ylN zkK$3|s#SF=pXyS6Y7>L(53tw6v55}V#!;4llLnVGboAdGVy~-I7sQUdE9upjq9TJ zyNx&xJ?d2XzV?$js6FnambLWKLO(qn(zedjKCLdq-wWEtDcTt0i3{tK9!1l(xQwg9 zxVki##5#z1R%(aML>E0Bq>nyIJAITWOH@7`E5yfY+%Sv`Y2jvk*7?u%a~$OMfps9W z#^Gyz8=j6?p_IjM|LGrbYNsYU4B17UAvlh}bSN5YweW#+6JGhf0pAE>CCf;11Skgc z+@DSiPbb3B7%Xfw19zHiY%Z@eQUQfGLUB91Z8ooP=beF!oDIPWw{o!U7A9+;{m92k zH5Kd>rPRT8Sa^Tl!PaYk$(fPr+d(No9RmKbL^v6b3a8F;*f`lCsn~*ZY22u_5RGWN zHtzTO<&+DqOyh#{X(8nL#kPHND!_w?^}7bL64)J^!5hHMB}vu$^X?a>2`ijR&LwBk y=4dh%pEKLMExM;KkCAvN8i_o?h?rlo~YPc517cIJIMZ{EzjHlp(w+wb6g#wn zGVq7K%K6DK8fUqJ-0!&hpBWfNk-rK;NT5Jo!lh;@x5WckGgtG{4`!U+H=hHO{znh+ z9H)+&twzS4oVk1R^hc!=jEXX8#AC~T8tg)?DQMTw_l9Dz-33eNaepN}P+}54mQb4q zOX%YbL?O=n=W!k;(iokm*Un_qGU8uL!-cv1!4vfSZ`Qx`eCY@L$Efqx{C4Ekl>r!G z4EcI|a`r}4?l7>PGOhq$62MhrP11*_H{8EB>3=xQ+D^Vct|ovnH5gOqI%%CN<}L3U z-4OljinB1ju{OGas+7kNhXy}ll|tMqWb7OqT!t1xFJHK|ntYyMyAd-E82!dUqtE!g z1u$hLb$*fYo>pluIz@Rx(=pCMI$UzB96@Nox}BO^<0hz@N&k)$fi~A$vVJqpDpjQf zod#|V0``F5LG+WcW~wvf6MPr9a!$JBa0cuKZtoXiXFXPNQBoNd$cxoXQuP^K^z{Da zgqE<6Lm`NiebLUPoN|RZc~9&E2Q(kHlKr@*;7W*#kz$4FJTSSH3wy6DKIUXf#d2|^ z5;{^W<;$VHk-oYFe!n4+Putn7oei1kQ9Dz?Mq+ifh&&^E@N?khg~fL5V5=nqe*sJ) BMUnsj literal 0 HcmV?d00001 diff --git a/src/worker/DataAccess.bas b/src/worker/DataAccess.bas new file mode 100644 index 0000000..c491419 --- /dev/null +++ b/src/worker/DataAccess.bas @@ -0,0 +1,42 @@ +Attribute VB_Name = "DataAccess" +Option Private Module +Option Explicit + +Public Function AccessWorker(iSource As Excel.Workbook) As DB_WorkerData + Set AccessWorker = New DB_WorkerData + Call AccessWorker.Init(iSource) +End Function + +Public Function AccessWorkTypes(iSource As Excel.Workbook) As Scripting.Dictionary + Dim iWorks As New Scripting.Dictionary + Dim iSheet As Excel.Worksheet + Dim iTable As Excel.ListObject: Set iTable = iSource.Sheets(SHEET_OPTIONS).ListObjects(TABLE_WORKS) + Dim nRow& + For nRow = 1 To iTable.ListRows.Count + Dim sWorkID$: sWorkID = iTable.ListRows(nRow).Range.Cells(1, 1) + Dim sWorkInfo$: sWorkInfo = iTable.ListRows(nRow).Range.Cells(1, 2) + Call iWorks.Add(sWorkID, sWorkInfo) + Next nRow + Set AccessWorkTypes = iWorks +End Function + +Public Function AccessProjects() As DB_CachedProjects + Static s_Projects As DB_CachedProjects + + If s_Projects Is Nothing Then + Dim xlApp As New API_XLWrapper: Call xlApp.CreateApplication(bIsVisible:=False) + Dim iSource As Excel.Workbook: Set iSource = xlApp.OpenDocument(PATH_PROJECTS, bReadOnly:=True) + If iSource Is Nothing Then + Call UserInteraction.ShowMessage(EM_CANNOT_ACCESS_PROJECTS, PATH_PROJECTS) + Exit Function + End If + + Set s_Projects = New DB_CachedProjects + Call s_Projects.Reload(iSource) + + Call xlApp.ReleaseDocument + Call xlApp.ReleaseApplication + End If + + Set AccessProjects = s_Projects +End Function diff --git a/src/worker/Declarations.bas b/src/worker/Declarations.bas new file mode 100644 index 0000000..bb641ca --- /dev/null +++ b/src/worker/Declarations.bas @@ -0,0 +1,28 @@ +Attribute VB_Name = "Declarations" +Option Explicit +Option Private Module + +Public Const PIVOT_FIRST_ROW = 2 + +Public Const SHEET_PIVOT = " " +Public Const SHEET_PIVOT_DATA = "" +Public Const SHEET_OPTIONS = "" + +Public Const TABLE_WORKS = "t_WorkTypes" + +Public Const ZAK_MAIL As String = "Kuchkarov@acconcept.ru" +Public Const DAILY_REPORT_SUBJECT As String = " " + +Public Enum PivotStructure + [_First] = 1 + + S_P_DATE = 1 + S_P_YEAR = 2 + S_P_IO = 3 + S_P_PROJECT = 4 + S_P_HOURS = 5 + S_P_WORK_TYPE = 6 + S_P_CONTENTS = 7 + + [_Last] = 7 +End Enum diff --git a/src/worker/DevHelper.bas b/src/worker/DevHelper.bas new file mode 100644 index 0000000..200b1f5 --- /dev/null +++ b/src/worker/DevHelper.bas @@ -0,0 +1,21 @@ +Attribute VB_Name = "DevHelper" +Option Private Module +Option Explicit + +Public Function Dev_PrepareSkeleton() + ' Do nothing +End Function + +Public Function Dev_ManualRunTest() + Dim sSuite$: sSuite = "s_UndoWrapper" + Dim sTest$: sTest = "t_BasicUndo" + Dim sMsg$: sMsg = Dev_RunTestDebug(sSuite, sTest) + Debug.Print sMsg + Call MsgBox(sMsg) +End Function + +Public Function Dev_GetTestSuite(sName$) As Object + Select Case sName + ' Case "s_ParseDate": Set Dev_GetTestSuite = New s_ParseDate + End Select +End Function diff --git a/src/worker/Main.bas b/src/worker/Main.bas new file mode 100644 index 0000000..21686de --- /dev/null +++ b/src/worker/Main.bas @@ -0,0 +1,142 @@ +Attribute VB_Name = "Main" +'============ ================= +Option Explicit +Option Private Module + +Public Sub CR_AddYear() + Dim iTarget As Excel.Workbook: Set iTarget = ActiveWorkbook + Dim nYear%: nYear = PromptYear() + If nYear = 0 Then _ + Exit Sub + + Dim xlApp As New API_XLWrapper: Call xlApp.SetApplication(ThisWorkbook.Application) + Dim iSource As Excel.Workbook: Set iSource = xlApp.OpenDocument(PATH_CALENDAR, bReadOnly:=True) + If iSource Is Nothing Then + Call UserInteraction.ShowMessage(EM_ADD_YEAR_NO_ACCESS, PATH_CALENDAR) + Exit Sub + End If + + Dim iData As DB_WorkerData: Set iData = AccessWorker(iTarget) + Dim bYearFound As Boolean: bYearFound = XLWorksheetExists(CStr(nYear), iSource) + + Call xlApp.PauseUI + If bYearFound Then + Call iData.ImportYear(iSource.Sheets(CStr(nYear))) + Else + Call iData.CreateYear(nYear) + End If + Call xlApp.ResumeUI + Call xlApp.ReleaseDocument + + Call UserInteraction.ShowMessage(IIf(bYearFound, IM_ADD_YEAR_AUTO, IM_ADD_YEAR_MANUAL)) +End Sub + +Public Sub CR_AddWorkType() + Dim target As Excel.Workbook: Set target = ActiveWorkbook + Dim sWork$: sWork = PromptWorkTypeID(AccessWorkTypes(target)) + If sWork = vbNullString Then _ + Exit Sub + + target.Application.Selection = sWork +End Sub + +Public Sub CR_AddActiveProject() + Dim target As Excel.Workbook: Set target = ActiveWorkbook + Dim sProject$: sProject = PromptActiveProject(AccessProjects) + If sProject = vbNullString Then _ + Exit Sub + + target.Application.Selection = sProject +End Sub + +Public Sub CR_InfoProjects() + Dim xlApp As New API_XLWrapper: Call xlApp.SetApplication(ThisWorkbook.Application) + Dim iProjects As Excel.Workbook: Set iProjects = xlApp.OpenDocument(PATH_PROJECTS, bReadOnly:=True) + If iProjects Is Nothing Then + Call UserInteraction.ShowMessage(EM_CANNOT_ACCESS_PROJECTS, PATH_PROJECTS) + Exit Sub + End If +End Sub + +Public Sub CR_InfoCalendar() + Call UserInteraction.FollowHyperlink(ActiveWorkbook, URL_CALENDAR_CONSULTANT & "/" & VBA.Year(VBA.Now)) +End Sub + +Public Sub CR_InfoExamples() + Dim xlApp As New API_XLWrapper: Call xlApp.SetApplication(ThisWorkbook.Application) + Dim iProjects As Excel.Workbook: Set iProjects = xlApp.OpenDocument(PATH_SAMPLES, bReadOnly:=True) + If iProjects Is Nothing Then + Call UserInteraction.ShowMessage(EM_CANNOT_ACCESS_SAMPLES, PATH_SAMPLES) + Exit Sub + End If +End Sub + +Public Sub CR_DailyReport() + Dim iTarget As Excel.Workbook: Set iTarget = ActiveWorkbook + Dim targetDate&: targetDate = PromptDate(GetActiveDay(iTarget)) + If targetDate = 0 Then _ + Exit Sub + + Dim iData As DB_WorkerData: Set iData = AccessWorker(iTarget) + Dim sDescription$: sDescription = GenerateDayDescription(targetDate, iData) + If sDescription = vbNullString Then + Call UserInteraction.ShowMessage(EM_DAILY_NO_WORKS) + Exit Sub + End If + + If Not CreateDailyMessage(targetDate, sDescription) Then _ + Call UserInteraction.ShowMessage(EM_CANNOT_CREATE_MAIL) +End Sub + +Public Sub CR_MonthlyReport() + Dim iTarget As Excel.Workbook: Set iTarget = ActiveWorkbook + Dim targetDate&: targetDate = PromptDate(GetActiveDay(iTarget)) + If targetDate = 0 Then _ + Exit Sub + + Dim iData As DB_WorkerData: Set iData = AccessWorker(iTarget) + Dim theWrap As New API_XLWrapper: Call theWrap.SetApplication(ThisWorkbook.Application) + Dim iDoc As Excel.Workbook: Set iDoc = theWrap.NewDocument(PATH_MONTHLY_TEMPLATE) + If iDoc Is Nothing Then + Call UserInteraction.ShowMessage(EM_INVALID_REPORT_TEMPLATE) + Exit Sub + End If + + Dim iReport As New MonthlyReport: Call iReport.Init(iDoc, iData, AccessProjects) + Call iReport.ImportData(VBA.Month(targetDate), VBA.Year(targetDate)) + + Call UserInteraction.ShowMessage(IM_MONTH_REPORT_OK) +End Sub + +Public Sub CR_UpdatePivot() + Dim iTarget As Excel.Workbook: Set iTarget = ActiveWorkbook + Dim iData As DB_WorkerData: Set iData = AccessWorker(iTarget) + + Call ReloadPivotData(iTarget.Sheets(SHEET_PIVOT_DATA), iData, AccessProjects) + + Dim aPivot As Excel.PivotTable + Call iTarget.Sheets(SHEET_PIVOT).Activate + For Each aPivot In iTarget.Sheets(SHEET_PIVOT).PivotTables + With aPivot + .RefreshTable + .Update + End With + Next + + Call UserInteraction.ShowMessage(IM_UPDATE_PIVOT_OK) +End Sub + +Public Sub CR_FixGroups() + Call AccessWorker(ActiveWorkbook).FixDataGroups +End Sub + +Public Sub CR_DeleteHolidays() + Dim iData As DB_WorkerData: Set iData = AccessWorker(ActiveWorkbook) + + Dim xlUI As New API_XLWrapper: Call xlUI.SetApplication(ActiveWorkbook.Application) + Call xlUI.PauseUI + Dim nCount&: nCount = iData.DeleteHolidays + Call xlUI.ResumeUI + + Call UserInteraction.ShowMessage(IM_HOLIDAYS_DELETED, nCount) +End Sub diff --git a/src/worker/MainImpl.bas b/src/worker/MainImpl.bas new file mode 100644 index 0000000..01e1ba2 --- /dev/null +++ b/src/worker/MainImpl.bas @@ -0,0 +1,106 @@ +Attribute VB_Name = "MainImpl" +Option Explicit +Option Private Module + +Public Function GetActiveDay(iWhere As Excel.Workbook) As Long + GetActiveDay = VBA.Int(VBA.Now()) + If iWhere.ActiveSheet.Name <> WORKER_SHEET_DATA Then _ + Exit Function + Dim nRow&: nRow = iWhere.Application.Selection.Cells(1, 1).Row + On Error Resume Next + GetActiveDay = iWhere.Sheets(WORKER_SHEET_DATA).Cells(nRow, S_W_DATE) + On Error GoTo 0 +End Function + +Public Function PromptYear() As Integer + With CRD_NewYear + Call .Init + Call .Show + If .isCanceled_ Then _ + Exit Function + PromptYear = .ComboBox1.Value + End With + Call Unload(CRD_NewYear) +End Function + +Public Function PromptWorkTypeID(iData As Scripting.Dictionary) As String + With CRD_WorkList + Call .Init(iData) + Call .Show + If .isCanceled_ Then _ + Exit Function + PromptWorkTypeID = .GetSelectedID + End With +End Function + +Public Function PromptActiveProject(iData As DB_CachedProjects) As String + With CRD_ProjectList + Call .Init(iData) + Call .Show + If .isCanceled_ Then _ + Exit Function + PromptActiveProject = .GetSelectedID + End With +End Function + +Public Function GenerateDayDescription(nDay&, iData As DB_WorkerData) As String + Dim sText$ + Dim iWork As IteratorWork: Set iWork = iData.IBegin + Call iWork.GoUntil(nDay) + Do While Not iWork.IsDone + If iWork.DDate <> nDay Then _ + Exit Do + + If iWork.Duration <> 0 Then + If sText <> vbNullString Then _ + sText = sText & vbNewLine + sText = sText & Fmt("{1} - {2} - {3}", iWork.Project, iWork.Duration, iWork.Description) + End If + Call iWork.Increment + Loop + GenerateDayDescription = sText +End Function + +Public Function CreateDailyMessage(nDate&, sDescription$) As Boolean + CreateDailyMessage = False + On Error GoTo RETURN_FALSE + + Dim iDailyMsg As Outlook.MailItem: Set iDailyMsg = Outlook.Application.CreateItem(olMailItem) + With iDailyMsg + .To = ZAK_MAIL + .Subject = VBA.Format(nDate, "yyyymmdd") & " " & DAILY_REPORT_SUBJECT + .Body = VBA.Format(nDate, "yyyymmdd") & vbNewLine & vbNewLine & sDescription + .Display + End With + + CreateDailyMessage = True + Exit Function +RETURN_FALSE: + On Error GoTo 0 +End Function + +Public Function ReloadPivotData(iOut As Excel.Worksheet, iData As DB_WorkerData, iProjects As DB_CachedProjects) + Call iOut.UsedRange.Offset(1).ClearContents + + Dim nRow&: nRow = PIVOT_FIRST_ROW + Dim iWork As IteratorWork: Set iWork = iData.IBegin + Do While Not iWork.IsDone + If iWork.Duration = 0 Then _ + GoTo NEXT_WORK + + With iOut + .Cells(nRow, S_P_DATE) = iWork.DDate + .Cells(nRow, S_P_YEAR) = VBA.Year(iWork.DDate) + .Cells(nRow, S_P_IO) = CCCategoryToString(iProjects.GetProjectCategory(iWork.Project)) + .Cells(nRow, S_P_PROJECT) = iWork.Project + .Cells(nRow, S_P_HOURS) = iWork.Duration + .Cells(nRow, S_P_WORK_TYPE) = iWork.WorkType + .Cells(nRow, S_P_CONTENTS) = iWork.Description + End With + + nRow = nRow + 1 + +NEXT_WORK: + Call iWork.Increment + Loop +End Function diff --git a/src/worker/MonthlyReport.cls b/src/worker/MonthlyReport.cls new file mode 100644 index 0000000..5c0862f --- /dev/null +++ b/src/worker/MonthlyReport.cls @@ -0,0 +1,199 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "MonthlyReport" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Private source_ As DB_WorkerData +Private projects_ As DB_CachedProjects + +Private out_ As Excel.Worksheet + +Private start_ As Long +Private finish_ As Long +Private projectHours_ As Scripting.Dictionary +Private projectCategories_ As Scripting.Dictionary +Private hoursTotal_ As Double +Private hoursIncome_ As Double +Private hoursOutcome_ As Double + +Private Enum ReportStruct + S_MR_PROJECT = 2 + S_MR_WORK = 3 + S_MR_DESCRIPTION = 4 + S_MR_HOURS = 6 + S_MR_DATE = 7 + S_MR_PROXY = 10 +End Enum + +Private Const REPORT_SHEET_REPORT = "" + +Private Const CELL_REPORT_WORKER_NAME = "c_WorkerName" +Private Const CELL_REPORT_PERIOD = "c_Period" +Private Const CELL_REPORT_INCOME = "c_Income" +Private Const CELL_REPORT_OUTCOME = "c_Outcome" +Private Const CELL_REPORT_TOTAL = "c_Total" + +Private Const REPORT_ROW_PROTOTYPE = 6 +Private Const REPORT_WORK_START = 7 + +Public Function Init(iOut As Excel.Workbook, iSource As DB_WorkerData, iProjects As DB_CachedProjects) + Set out_ = iOut.Sheets(REPORT_SHEET_REPORT) + Set source_ = iSource + Set projects_ = iProjects +End Function + +Public Function ImportData(nMonth%, nYear%) + start_ = VBA.DateSerial(nYear, nMonth, 1) + finish_ = VBA.DateSerial(nYear, nMonth + 1, 1) - 1 + + Call FillHeader + Call FillWorks + Call FillTotals + + Dim r As Excel.Range + Call out_.Parent.Names(CELL_REPORT_INCOME).RefersToRange.Select +End Function + +' ======= +Private Function FillHeader() + out_.Parent.Names(CELL_REPORT_WORKER_NAME).RefersToRange = source_.WorkerName + out_.Parent.Names(CELL_REPORT_PERIOD).RefersToRange = Fmt(" {1} {2}", VBA.CDate(start_), VBA.CDate(finish_)) +End Function + +Private Function FillWorks() + hoursTotal_ = 0 + hoursIncome_ = 0 + hoursOutcome_ = 0 + Set projectHours_ = New Scripting.Dictionary + Set projectCategories_ = New Scripting.Dictionary + + Dim iWork As IteratorWork: Set iWork = source_.IBegin + Call iWork.GoUntil(start_) + + Dim nRow&: nRow = REPORT_WORK_START + Do While Not iWork.IsDone + Dim theDate&: theDate = iWork.DDate + If theDate > finish_ Then _ + Exit Do + + Dim dDuration As Double: dDuration = iWork.Duration + If dDuration = 0 Then _ + GoTo NEXT_WORK + + Dim sProject$: sProject = iWork.Project + If sProject = PROJECT_HOLIDAYS Then _ + GoTo NEXT_WORK + + Call AddWork(nRow, theDate, sProject, iWork.WorkType, dDuration, iWork.Description, iWork.IsMergedDescription) + + nRow = nRow + 1 + Call IncrementHours(sProject, dDuration) + +NEXT_WORK: + Call iWork.Increment + Loop + + Call out_.Rows(nRow).Delete + Call out_.Rows(REPORT_ROW_PROTOTYPE).Delete +End Function + +Private Function FillTotals() + Dim nIncomeHead&: nIncomeHead = out_.Parent.Names(CELL_REPORT_INCOME).RefersToRange.Row + Dim nOutcomeHead&: nOutcomeHead = out_.Parent.Names(CELL_REPORT_OUTCOME).RefersToRange.Row + out_.Parent.Names(CELL_REPORT_TOTAL).RefersToRange = hoursTotal_ + Call SetTotalHours(nIncomeHead, hoursIncome_) + Call SetTotalHours(nOutcomeHead, hoursOutcome_) + + Dim nIncome&: nIncome = nIncomeHead + 2 + Dim nOutcome&: nOutcome = nOutcomeHead + 2 + Dim nPrototype&: nPrototype = nIncomeHead + 1 + + Dim aKey As Variant + For Each aKey In projectCategories_ + Dim sProject$: sProject = CStr(aKey) + Dim sManager$: sManager = projects_.GetProjectManager(sProject) + Dim dDuration As Double: dDuration = projectHours_(aKey) + If projectCategories_(aKey) = T_PCAT_INCOME Then + Call AddProject(nPrototype, nIncome, sProject, sManager, dDuration) + nIncome = nIncome + 1 + nOutcomeHead = nOutcomeHead + 1 + nOutcome = nOutcome + 1 + Else + Call AddProject(nPrototype, nOutcome, sProject, sManager, dDuration) + nOutcome = nOutcome + 1 + End If + Next aKey + + Call out_.Rows(nOutcome).Delete + Call out_.Rows(nOutcomeHead + 1).Delete + Call out_.Rows(nIncome).Delete + Call out_.Rows(nIncomeHead + 1).Delete +End Function + +' ======= +Private Function AddWork(nRow&, theDate&, sProject$, sWork$, dDuration As Double, sDescription$, bIsMerged As Boolean) + Call out_.Rows(REPORT_ROW_PROTOTYPE).EntireRow.Copy + Call out_.Rows(nRow).EntireRow.Insert + out_.Cells(nRow, S_MR_PROJECT) = sProject + out_.Cells(nRow, S_MR_WORK) = sWork + out_.Cells(nRow, S_MR_HOURS) = dDuration + out_.Cells(nRow, S_MR_DATE) = theDate + If bIsMerged Then + Call AddMergedRow(nRow) + Else + out_.Cells(nRow, S_MR_DESCRIPTION) = sDescription + End If +End Function + +Private Function AddProject(nPrototype&, nRow&, sProject$, sManager$, dDuration As Double) + Call out_.Rows(nPrototype).EntireRow.Copy + Call out_.Rows(nRow).EntireRow.Insert + out_.Cells(nRow, S_MR_PROJECT) = sProject + out_.Cells(nRow, S_MR_WORK) = sManager + Call SetTotalHours(nRow, dDuration) +End Function + +Private Function AddMergedRow(nRow&) + Dim iPrevious As Excel.Range: Set iPrevious = out_.Cells(nRow - 1, S_MR_DESCRIPTION) + Dim nCount& + If iPrevious.MergeCells Then + nCount = iPrevious.MergeArea.Rows.Count + Else + nCount = 1 + End If + + out_.Cells(nRow, S_MR_PROXY) = "" + out_.Cells(nRow - nCount, S_MR_PROXY) = "" + + Dim iMergeArea As Excel.Range + Set iMergeArea = out_.Cells(nRow, S_MR_DESCRIPTION).Offset(-nCount, 0).Resize(nCount + 1, 2) + Call iMergeArea.UnMerge + Call iMergeArea.Merge +End Function + +Private Function IncrementHours(sProject$, dDuration As Double) + If projectHours_.Exists(sProject) Then + projectHours_(sProject) = projectHours_(sProject) + dDuration + Else + Call projectHours_.Add(sProject, dDuration) + Call projectCategories_.Add(sProject, projects_.GetProjectCategory(sProject)) + End If + hoursTotal_ = hoursTotal_ + dDuration + + If projectCategories_(sProject) = T_PCAT_INCOME Then + hoursIncome_ = hoursIncome_ + dDuration + Else + hoursOutcome_ = hoursOutcome_ + dDuration + End If +End Function + +Private Function SetTotalHours(nRow&, dDuration As Double) + out_.Cells(nRow, S_MR_HOURS) = dDuration + out_.Cells(nRow, S_MR_DATE) = dDuration / hoursTotal_ +End Function diff --git a/src/worker/z_UIMessages.bas b/src/worker/z_UIMessages.bas new file mode 100644 index 0000000..e805c30 --- /dev/null +++ b/src/worker/z_UIMessages.bas @@ -0,0 +1,74 @@ +Attribute VB_Name = "z_UIMessages" +' Messaging module +Option Private Module +Option Explicit + +Public Enum MsgCode + EM_PROJECTS_EMPTY + EM_INPUT_INVALID_YEAR + EM_INVALID_REPORT_TEMPLATE + EM_CANNOT_ACCESS_PROJECTS + EM_ADD_YEAR_NO_ACCESS + EM_CANNOT_ACCESS_SAMPLES + EM_DAILY_NO_WORKS + EM_CANNOT_CREATE_MAIL + + IM_UPDATE_PIVOT_OK + IM_MONTH_REPORT_OK + IM_ADD_YEAR_AUTO + IM_ADD_YEAR_MANUAL + IM_HOLIDAYS_DELETED +End Enum + +Private g_UI As API_UserInteraction + +Public Function UserInteraction() As API_UserInteraction + If g_UI Is Nothing Then _ + Set g_UI = New API_UserInteraction + Set UserInteraction = g_UI +End Function + +Public Function SetUserInteraction(newUI As API_UserInteraction) + Set g_UI = newUI +End Function + +Public Function UIShowMessage(theCode As MsgCode, ParamArray params() As Variant) + Dim unwrapped As Variant: unwrapped = params + unwrapped = FixForwardedParams(unwrapped) + + Select Case theCode + Case IM_UPDATE_PIVOT_OK: Call MsgBox(" ", vbInformation) + Case IM_MONTH_REPORT_OK: Call MsgBox(" ", vbInformation) + Case IM_HOLIDAYS_DELETED: Call MsgBox(Fmt(" : {1}", unwrapped), vbInformation) + Case IM_ADD_YEAR_AUTO: Call MsgBox(" " & _ + vbNewLine & " ", vbInformation) + Case IM_ADD_YEAR_MANUAL: Call MsgBox(" " & _ + vbNewLine & "! ", vbInformation) + + Case EM_PROJECTS_EMPTY: Call MsgBox(" ", vbExclamation) + Case EM_INPUT_INVALID_YEAR: Call MsgBox(" ", vbExclamation) + Case EM_INVALID_REPORT_TEMPLATE: Call MsgBox(" ", vbExclamation) + Case EM_CANNOT_ACCESS_PROJECTS: Call MsgBox(Fmt(" " & vbNewLine & "{1}", unwrapped), vbExclamation) + Case EM_CANNOT_ACCESS_SAMPLES: Call MsgBox(Fmt(" " & vbNewLine & "{1}", unwrapped), vbExclamation) + Case EM_ADD_YEAR_NO_ACCESS: Call MsgBox(Fmt(" " & vbNewLine & "{1}", unwrapped), vbExclamation) + Case EM_DAILY_NO_WORKS: Call MsgBox(" ", vbExclamation) + Case EM_CANNOT_CREATE_MAIL: Call MsgBox(" Outlook", vbExclamation) + + Case Else: Call MsgBox(" ", vbCritical) + End Select +End Function + +Public Function UIAskQuestion(theCode As MsgCode, ParamArray params() As Variant) As Boolean + Dim unwrapped As Variant: unwrapped = params + unwrapped = FixForwardedParams(unwrapped) + + Dim answer&: answer = vbNo + Select Case theCode + 'Case QM_CODE_DELETE_CONFIRM + ' answer = MsgBox("Are you sure you want to delete ALL macros from target file?", vbYesNo + vbQuestion) + + Case Else + Call MsgBox(" ", vbCritical) + End Select + UIAskQuestion = answer = vbYes +End Function diff --git a/src/worker/z_UIRibbon.bas b/src/worker/z_UIRibbon.bas new file mode 100644 index 0000000..eff0211 --- /dev/null +++ b/src/worker/z_UIRibbon.bas @@ -0,0 +1,26 @@ +Attribute VB_Name = "z_UIRibbon" +Option Explicit +Option Private Module + +Public Sub CR_OnRibbonBtn(iControl As IRibbonControl) + Select Case iControl.ID + Case "CRAddYear": Call CR_AddYear + Case "CRAddWorkType": Call CR_AddWorkType + Case "CRAddActiveProject": Call CR_AddActiveProject + + Case "CRMonthReport": Call CR_MonthlyReport + Case "CRDailyReport": Call CR_DailyReport + Case "CRUpdateData": Call CR_UpdatePivot + + Case "CRInfoProjects": Call CR_InfoProjects + Case "CRInfoCalendar": Call CR_InfoCalendar + Case "CRInfoExamples": Call CR_InfoExamples + + Case "CRFixGroups": Call CR_FixGroups + Case "CRDeleteHolidays": Call CR_DeleteHolidays + End Select +End Sub + +Public Sub CR_RibbonReportEnabled(iControl As IRibbonControl, ByRef returnedVal) + returnedVal = ValidateReport(ActiveWorkbook) +End Sub diff --git a/ui/aggregator/.rels b/ui/aggregator/.rels new file mode 100644 index 0000000..3107a8e --- /dev/null +++ b/ui/aggregator/.rels @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ui/aggregator/customUI.xml b/ui/aggregator/customUI.xml new file mode 100644 index 0000000..fb4c53e --- /dev/null +++ b/ui/aggregator/customUI.xml @@ -0,0 +1,42 @@ + + + + + + +

+ + +