From 58a632e25d8af72665153fab046e3836c4f986fe Mon Sep 17 00:00:00 2001 From: wvangerwen <41104904+wvangerwen@users.noreply.github.com> Date: Fri, 23 Jun 2023 07:28:20 +0200 Subject: [PATCH] 2023.3 updates (#72) * MI 3.28 env * styling peilvakken weer werkend * vs code startup naar MI 3.28 * pygeos weg met gpd 0.12.2 * migrate sqlite before loading * fix datachecker gdb to gpkg * HR luchtfoto * styling 0d1d watergangen geen verhang pixel naar mm kaart 1 bovenaan * fix sqlitetest wateroppervlak resultaat werd weggeschreven naar verkeerde laag * update env * raster edits deps * load local hrt before htt. Otherwise it leads to unexpected behaviour with htt using the installed hrt instead of the github one. * datachecker env * ThreeDiToolbox 2.5.3 * deps ThreeDiToolbox 2.5.3 * Create environment_services.yml * remove local htt and hrt from path instead these modules should now be installed using the bin/local_install.bat file in the repositories. * remove localsettings hrt htt paths * update env and version * update envs * update env * Create mi_threedi_toolbox_upgrade.PNG --------- Co-authored-by: Esse Co-authored-by: wietsevangerwen <41104904+wietsevangerwen@users.noreply.github.com> Co-authored-by: D2Hydro <43996424+d2hydro@users.noreply.github.com> Co-authored-by: Daniel --- .../vs_code_osgeo4w_startup_qgis322.bat | 0 .../mi_threedi_toolbox_upgrade.PNG | Bin 0 -> 78472 bytes hhnk_threedi_plugin/__init__.py | 41 +- hhnk_threedi_plugin/dependencies.py | 2 +- hhnk_threedi_plugin/env/environment.yml | 24 +- hhnk_threedi_plugin/env/environment_dev.yml | 18 +- .../env/environment_services.yml | 65 + hhnk_threedi_plugin/gui/load_layers_popup.py | 10 +- hhnk_threedi_plugin/local_settings_default.py | 2 - hhnk_threedi_plugin/metadata.txt | 2 +- .../layer_structure/testprotocol.csv | 12 +- .../qgis_interaction/open_notebook.py | 27 +- .../hydro_deelgebieden_(hdb).qml | 1751 ++++++---- .../peilafwijkinggebied_(damo).qml | 2884 +++++++++++------ .../peilgebiedpraktijk_(damo).qml | 1408 +++++--- .../hydraulische_toets_watergangen.qml | 887 ++++- .../sqlite_test_tasks/sqlite_test_tasks.py | 4 +- hhnk_threedi_plugin/tasks/task_one_d_two_d.py | 13 +- .../tasks/task_zero_d_one_d.py | 13 +- hhnk_threedi_plugin/tests/Modelsplitter_QT.py | 9 - hhnk_threedi_plugin/tests/w_teststuff.py | 28 - scripts/deploy.bat | 2 +- vs_code_osgeo4w_startup_qgis328.bat | 58 + 23 files changed, 4934 insertions(+), 2326 deletions(-) rename vs_code_osgeo4w_startup_qgis322.bat => deprecated/vs_code_osgeo4w_startup_qgis322.bat (100%) create mode 100644 docs/images/installation/mi_threedi_toolbox_upgrade.PNG create mode 100644 hhnk_threedi_plugin/env/environment_services.yml create mode 100644 vs_code_osgeo4w_startup_qgis328.bat diff --git a/vs_code_osgeo4w_startup_qgis322.bat b/deprecated/vs_code_osgeo4w_startup_qgis322.bat similarity index 100% rename from vs_code_osgeo4w_startup_qgis322.bat rename to deprecated/vs_code_osgeo4w_startup_qgis322.bat diff --git a/docs/images/installation/mi_threedi_toolbox_upgrade.PNG b/docs/images/installation/mi_threedi_toolbox_upgrade.PNG new file mode 100644 index 0000000000000000000000000000000000000000..177c4acb47cc1159285850a53ed8bd1f8ce151f5 GIT binary patch literal 78472 zcma&O2UL?=&^BsEL_kFaqzOtKmk=|>FO0yuLL+FTth=LRY2qXtl zN@yZA1c*p4A<_aN?SIkZ(eL~3UH9&_6cgVvduH~`v!9vGV-q7?_Cu!*?b@}AUGLiE z8@qNLfbQD0*Yn^3;G5YQ_OHN?-F`Q8wRe?u^Unhx_BmfNytHdq1%i!sXFu?n)%%*I z->zL8%{zZ~w|c#D+_j7OQt$Gmo56NVjjY)=<~cQla#ANV2N~qQ?@CkeC4no)PuQPq zoi`o*;sZGvwJ&+sopWjL#PT~o^&UL<#G1{;=Jvk*H!q*PxL54{k%QL9(j@dV4G->i zj5=!CvXnJwNBmN%i*1^>R04m zPeg&-2BlQz@*`Vbx;9rsN7kw5{5;|&_6pH!55vDrR(1vUK^KEyCPm9ihU1i6k7)rC zHKTzjKw?MPP6>t?B*Qkx^sTU(+|VH^`G~asc)%Hc(Wx^-IF{e{+WPQ%fI|UrZEX0|86i|= zo(@!t(mv*%Re*jn8b;Xbh!+S-=Ols57_eDQ1uzdK(FLz0M0b2=mq?<0xruWl&?Bh} zTkXaXASCDJ?0KDXSHf5j!k)k)6#foUI#5|oZzPXMX0~pr<|%nty%Vxu8ySYC+rF8Z zH9?AWW#~-yFDv>XTsoz#Bbf9}M7$5dJ#3iX6(*4-~HDUIa(# zxk~pqVM9wZXA;bMbsVuIL3-NVNTUDXSb-O|I)%N;Qwv<(&aIf$>LpFw3|m%4ubrvC zg17P=z7yLn94mNUVRPJgyk@L=ix2}3%YzAI!D6pc14mrNLr7r+H+w<>D$AwYynvW9 ztY;l|W%l)^Cq~zwrZB~9ge&thejLV;C&RFTW@J=^cQJA`mq<>~+*G|t9u0$2t8i({ zguqr!j~wPE!x)RX;*o(OdkXL@xoM!`$((IQ9k@d0aeLaPD&7tyhSI zoLu$sqx9UY+0o&yJRKM%es=W1qn|^CS73W62!0V*3IC1!n!`xUVV3_s@7i^L9OUTv zbZ5EzHyWXB;X^yi?!U2~CcO3;^xsF|A788w0*mp_5W63*gA~vGV1KLZ!)?zxs(&4E zT&N9(usH`0-41HE`*S65?*$I%E&3+A@A81z^b0nn)WkKWD%qJSMNnY|tak19O6^GN zP9!i_nqFM^`#zp~v7jDZX8lST2|LsSFASe<7_!7{R}FP2N1%~oP7y{m@U@RM9dv|U zR{y@g?z}%z(D{T47qi#$GNXL0E3aY9EsRa)#+IjuGpnr_vn4E378puhIO!`qUG^$9 z?hLoPD1sg#Rl@$)L*#BBW@m5z`cgkxH>6X`tVrg)HWIA478OpPB_%-M4Uab}r(4_B zdcf&R9&4SM#Z#S^cohd}gyDo!oEZY&ErRrzJeb*7nsXfd&_SLRl&JMpGx+pGrb_Gnk8c$hq0+F(n z+vLF^PidRUn_^+%qxl~X9Bw{y47{W*(WiJ`o0p4mxaNi85~9XQ0T73t9m ztkGC2Wt&FgWgiP_B)gwbC9Y~tDL7x5K9f!ei>MrE<>bB>!^0KNae4K{rEA*+rHy!T z`<`zbu4Tcd7GL{cLs;F{M*e!)eP4sEq!_vF*`oeKP^0?0_7sE=y7$9(<#aLYE4k?9 zn<3wamD`wcv@F`n_nx*jJvqPejl9&t=ansz@D1B~X@tR6?nTAhUu>8JlFOq@82j9;`1@4bg4^v&N-{y-c8~vI4 zu2&-L5H)tk!@%T8%+({R-#e8p%k4uvE6t~nFP%FknJdRA^g29ND2*r$4|R#C-jH2w z{;cab%}rQ|to7zlekIqWvqgqR?Sk9rIIW*SVoOGNcS(P;Se(IM#2=%QIl;kTO zPruQRs&7%5ckNtH#TW$?Q9-OL58_!_CTK(J%v*FKF%0^t)kI8f|*i!Pj-D|_G(AnYNI3~DV0+;y{~Lr7Do-s>JWBD>oXQd5gnXm zs#kL@*JfYr-%-prV$~%BU(xHO=C$RkPZ?F{e#lthk3+}IlrXUB6XD`Z$PtUoudilsQv1h@z)?&e6VFH>a0leKB zn@hlru6$DfiGpy6b=yM*ck#5EbA>b_GSjG<>-z`g_)JfS<_CdQN@L2s&>+&DO))sw|4)0%g+}@nmli2&$7rSJl{zpdR+EsA) zumApM-^KrNx!mr*9$rgZ=Qa_)pql~dRCi2sp+?Bx6Jy-yPQ zYq9Lgw-}a$GG^fnmZN`-u(>Z0R3i89B>pRvkNM60vzPPm^2N)4#;0Y~Y9@oq5_DSR zlvl&bRm*CZ#B2b-{kmi4@7p?6MIZd%ETz#M2VhQ&%3ihj&s~x$)+VRB)^rxrRxvUE?{*qObkOlJ~n=qd;Ar z_JND^A*?XBM;aTH0|VWwx-@Iu#>HH_d@Inu{kkd%Yp=d>)W`d5${&r-W!p&j{j-}z zg|C`m6P~{m&|L~8`Pog@QgM9kmxeH(SfN(w<+2J9TTk9}2DS=FD4=}{+^HoB(QsW;@L^c5^Ko-8$EHu@tD>H zak6o)cS&|w*O>1F`zAJ)G09&ylSX|AJAIdFrJQ0}>s^rTi#=C)_wykN(F-n#p>%mo zRd&cElfq}!SKH1Y&b|z7dQ}}019g-NIryJ+az+tMDxpJh$mR@~K5tAs<(i1u`Yh{? z0~x3`0!Ht#Q^;Yr^85Uh)iGk_pU1uk`yz z3G@?DTu8Ax`QZrmKfx|;25-+7LvfW*-x1eh99Rv!(Qh_wP1wFQ1GwmzJ020SekO#r z(wdxk$G4!TH7eEILnfJPFX|_3HrnMH?LSLlWkT^JF-+wj3&79)O$yjh-?T%!q9UUCzdh z6U;s|`}JswZ;l1!Wd{seD*4M>U^CtubD>{6=$uZsmjN6ihutIe7&aT;)4Q5eajxme zRXm5IU`n~H3k#?u7QPvZb6wu=iwl4>p^sEB-*90wND1;aQj&N5{rkl_1R&a(1!>ig zQ(T|=8*u>YMv6#x zFF`bVAmO40KVI|x6$E&Mpaq>9L-w-9T9g+WfV1PwK?1QL1?Q9SUZw!2OjiWj|MPq$ zfl|(T05nA3zQk+!W6|L>WYo>E!hLgqSsg&$#z{`a)a!a=iRaeeENgrjDa*8vXlS4l z!?3wtn>yUuyq`R+#8X0mwY|h`CvE$oKO)xPNnJl_sj3IHY2T0MQy57qxbUbK{P#{M zUp+&yi%q8XG@D~5_ckGT^4Tg7xQE{xt-(Mu>du`OO8(*0%1TLSI41n_1swDB2H$>A z36p^&b;RXGNT5%QJPc}^>}~Q;rxvfSFh7`_B#cUBSVqwB)5KQU9tM6~S0ZxQa4`yW zAo)lZJ_9Mcp$sSsaOtn02c3__b0yfgWtKEDDlA&hHnCa!wYm^LFmr@Ae&eBwZ&4CNl^xH9NB1)?L1~rKJ6!3G1|I+9s3spaH)8DBN+J+Y#IF zbUJ}FepcKrxIUbQkx6p%tdkvf9-sCN4~>p%ygL(YnM*vAa%rh3K!>+EQ_;=+uKQ0< zi>reoS??O0hCJl;%c`U7b!BKC`-pW%Ky`c$V+6J_Ee!ln=Zm3;kUopVE4%6u}v ze70eSpqIdnzAY}xr&2r@LnQo`J|a3=F?Ghe4-6I7CA?_7@A15E1ty$xCkU zYj6BncOS4MI5VtnCev-I7)&p*JtO_qMiGKdyMvuq94fG^a#H21PG>Gi)zKgDP3I0^ z(#mbM%uv+trjv&ppJ;qNpn$+~UV1DG89H__wf}*lqQyi?uA5LI{FIaSDhmYR~@!s%?ggjQf^pwH2-LE-4>JBbAe79!l)?W}tj@R`# zb_v$)Hr3a`u#C5=sG$2Y*V!0d1E2y2s77X~<9RRpz~x-fRCsJ$@90POYh;Zfn!%2{ zvHpn+yVQz(B>ZqdzH$xf>C{Hr?NfNa2ifMg$?xlFn>K=u<^^7?Ec!pvZdnw_RZd|e zDvw1c?So+8$m+<0!y-lvGi=*`l5@U7=c!UVKcY$sGK8T!P2f<~lXpjPZf%3 z-!xYfd$P~O=6uiqo;lE;w?X8ahA@2|&}IrMWw&%cy??3dlW}3l#wqp>cpAu5GzTZh za|nda71TW|dFsh5$o8gOpsY^!2?S*aRW2#|8p^rMf3l6IL}&Y~NH@u!{trZnh?KE$ z2>7-MHwi!mw+8Inw8UlFqa_tEXqB3-mFg@gA-Sx}gFvk9nC^di5PIYf{PP)mUuZIu zZT}|Woc&fb*PA83ukTk^dTdVD=Xpn0+18JZvQ68v&{b;aTx&8(CnSXqlcWF0{HRuD z*i-_dG2ieKM1RT#-7L40u7|Do;sVKam8Zq4<{2`B0*w`p=}BzbH`A_c%z7t=;V z;V9;ltmQNa26H)H9r9R;t_Ya-&nTnDOQxLb+ouo)r=Q2&DPwh9W=p&D2ghE{mLf}~ z$meb)zw{mR*avzPxd8BjF*`EABuMz5%3;x^k2e+<92Vg~%|!il8hSLdpp1?tivN^# z*!dXt^j(i%e!9)6&AapXPfdv?2adYw|6BuK;771O4a5;21$uPb`e!n^&xi!B0EUlu zXEbPssqD;<-+NTNWIO7cn-R|r4z`J)Oh3C2kojZDuLnB}>6n^VgkMMPfR>9#fd}o3 z$TNUoY71Ns%T@1WB#2g*8<-W#^k_1(vp+03sLm}sn|dY5xFQH!Ksy?rfPg?6XLWQc z-u60H#a)-grKxFv(w3g`@Fh+Z-097-84Zk$(S0rryF9(+_VsNb@E(Vc!YM!1#m^6f zvtHA@BjJ4}Mdu6`M(M-8s#^;d*lfI=SXH`*L?J|6JnS`3YVU_IPo1K!c$&s6**#q3|4-DQVvYcHOgzujL--m`ZR>L@8bQWYN~& z?zwR3r^*{2{H0v#a=n*#!7cUGXXS0O<#je`qqVgVS$=vQ|K?}eeE_(AU#um(MLwTm zNf~}t`K`Mg%NpbkQG5`$^6CViGd|vGP(yf5)IG+QIBvckuTj|TynX#4kAnW91UWsi?jSECMZR9Elm|f z9b~V(C^p4vVU*}RNK-9I6=##qzVHtlpOm5w@+%3kvRKk;B$0CLeECB*zK1WUlQ7)o zPzL#VtL4@mA(pazhsdS9kb}=!i5P$Pc_Ym<>`!^P|C7f}HpMddC=gJEUK<}oHy(m6 z!^5M2sC}k9xRl>VKYXz=A=a+4gdYTVE~3_OL#z(_ z0=EBglcbOf!KU|^^C?je>-EXk5oeadUs$}`w_r&NRO7KWWdhFd#q8fu#L~*4gY;^9 z){(xiIqjw7$&PecoW532Z|jsbn=?xXkF0HQMff5faDRHyFQe&&e0z+aZdtp&#KVX=qb^r3oErPGaH=1 z+ck@W3OeC!`+G6-_Hhjk7pmdXDyZV@d#%-vrFhwvTF2{Tx*OpJ0s@d{1TMQ8VBNi1 zl1Nd-*_^AA62gwweowD##g!+}%WfNUGz7v_zdcFsSXyI>T672FK0ckwB50i())Fbx z++c00@zO?q7V3xv6&9Yq{N>UmiOXLeT++JPcCAd#=VNrmQQitfV9*+7u(>y z_jn&q?m_hTPc|OM(hX569_jl9pooE#Ez$cdrcat0UaQ(f*h$umML3%@k&t*^qK=Eiqmi<+4J(YzbOQS4>;Sy$o?7>DRpUc;6aoAz3oCjd;`5 z@1B>bJ{x>9r#lakRCl-==Af0cGLTn~8t5@?tb4U$Lv2k_Z#m`BuiEl$R56@*MnvSh z8U!lg_o;ZM&BtD2a7CX$lcj7M&$j7-!C0U4K8A46%gzXkx8h;UZ|rrI_8N;0lond~ z)QD21)&|cJpYQ$R`v`V1AZ|iHlHc+{%KOqHaYeu_cb$fcXe0eARID#|pKQiI9W0K| z<{9D}8!YLwOSm<%t+=p#Qs#NO^lEw*Sd8G=qtiQ#_t=N{TrM=K6hC`LS+M66YMc~C9^V6qdrydIy+8wbC->x30O4dYTS25JMd&KiFehR}5{k(4I34>8 z{n@9SZBi1lF0xRZ&hRT6?aad%Xi+A)I|_;$TU~)r^0M{*Bd&iVXB~3|KQ$LElxSI4 zF1^vuhq!icX95?om!m*9^6Pxzo8>MA^+sdW?xs2J8j0*DDOHlv{7+9d*I(ddK>AvK zpnM-#W-D6+I(i&`R(N)wUU^c9Lc9aA?RDMyB6OOMzv|p%kL`o$9@A%aulnNQ2K)WY zw9@{Oztt7;F3&_A@c3F8D_*Qrolk`yUVbtcOcSR}V4J6M2{P&GLbgeiI(rNbU^v*8 z!Gq_L)7)$+cacF8@pY(Y`ku8Tyn98AvVY~>jx^~iVSO$`fgSPZ*xeLUdf6zuBiX*X zQUex>pk{s^@407fpPr=QTT`UREn@cBX2!m_8kn5e?9ZuNS$FbHB;1mdr#{t6fWckzH8(l z-gAeN12)ziP?>t>WmV!bvhGL`0AnA~OMrmaBDB1NLGtr%mlhaI?7>vNGRXOWJ`u2f zf*t2kP+hlwn~ zf8hNC8R~>D42PU2zw{d2dRqz5>o)%NwjTZ}0A%zgcEy0!pswo}N)v4C>w1ON$<7UU znVWdP5vmSM`^PW1JqI4VCs9~l=3Vwf4qtjQ->tt3C3;K7iCaMbZazS2aeAcBG`W?I z<&NL-xADMFJ`2#vJ~jDD;9ziTPU+CHq=1eRN{YWkAt;wUxA5zZDE37QKChku7ABif zHy#28UVILKLHiFxx^E}Zdf(o3wXz(OBG22}5|POkf6L)1!L=wG-+EHk-A#Wn6zb;z zo%9JnG!KwS{deGrV>S9~4jr#PZ@Jfx6qT<_fU@>Nf;$B?h0OhU-xMRndsSmNw2^Hi zJ*J;+ZlWfI%)arIwtm&RYN43>P_;aw5x{ZZKe))GAXg_gRoSWwOq>uxwB)7t4tsHn z57XPI@{Llees9>+#8Pf4@5R#`3BOz%p+)rSB9Ucl*!8Z0F ztp_>3-+u)FkYA$G#eY6tH1X!T*zBi3l?0L`hQbZoA(hdX}pxs; zrm2HLX1A8ZFG`cP=j>43W7G(>VKG37-yM^GgIEAww> z?=71@0se(g0LPfoM&<;K<1F*pqd{SeA9;?1D~q3Nq!xc1;x*gE zoD4TW2T^P+y_@HasMCPe$v1%IW2l2X@7cI<>n9bfdxHl%ENMr6Tpk>TNG17@ z!Qp+Nko6|&bYfVmY(X|giCepH?6Qpe;g#uB|K@7~y@S0-Yv z;^sB!w_YvTkS`&iwl8a+e4v z0}I%3o1B|l;m7$csAQkVMYiRJn#x_S(-2fjk(ajhxMcYf(yI zshtD{k$^pe&`5HBD}?2NuMrid5?Pkh>$Mt+Y1;v$WNJLPE>NPddB5^a2~Oyeb|WSu z4;ce;78AZ-2et4`HAG3XLcc~c9FKyJgI-WaB{fE1!&)0}KlayVqbpZVyh4Z*)m0hW zlfDCMZtHtFs48sGQS^6mV`;L#rui*|nDd@f)4cpfcV(E3O1Ucav{xj+)9Ui`ho zt(Y{Kp@qe#k>U(l56A=nab?LE*bG?2g2eoBKCJ@N9rlb$nEOFnQOGL+Y{N8Rx=eta zYW_6h9AFn7tZjG`xnu>Pj^31dgx;qU)e9=4xhO=hyzj8l>^8|IpD z?FFzJK*gl8_bOleQ@eGMouZI+aB5tEr-WY*JVGym9^)}xwh6njJmM)-Hc)KwKKr2hi|I&pAVr?W8fEG9B2dII2?FF%d z--Ey0p?17ELq1g#D;Vfq=219rhS+^n+z40-0|jvt>wU&GPX}4}y)RCfgJM1ubVh>J z>~AesW9VO*EZth=mJ)u04QKDmZwnh}rTCoO_J9RdVBT^-M>a-V2ZST*=kg9{>p3LY z?oZlxxn({0;UrcFA#_=lp1SYI%Sr5rQb17&WkXw5vxP&O7w+jnu*{l0E|h)`%vUb> zl!237+#uHQ@nt##L52ZD{T=Y>;Qi__^oWmd36T9FB-Td#dfHD~yC0SH)Qu@ilJ92+ z*u7rL>OZctZ2}~mp&*(#7*k+S*_KOsxP-MO6PN`5zU@S>B^ZD|-GdaPsg2d-tE*5Z$E3dt<=DnQgeB)bX&P zHc}VvSN;aQak8Ee1G1+Tjc!g;00wvRMt$Qp8484{N6EUsDl7M!b_g2*U`;3=$MSR% zJCw%!`@R8|cx^J%JHXjC#?swY7Nys?xn`eiZeb%@TK2(eS!>;IwQWq282EFUeM0?P zQ;*#HFDK?@Dq(iTRKky%1wI=@eCOqDkCZG_tHDqRk<=Y(Pdw{?-vO{_qu$LMN{+72 zOSr5q^5E6c->1tE%c7EC9|!53?mc&c@qYXc!{o^3Fb9B5=5{d3Ow>`UgLD0{ zUUil&S|N{U+wAy}{FiB_xKvXCGv)sOa{4dpwnc-?ijCN1`bEA^nE>1HdV!yi@cY)k z1U3)2M|0%`En>W6wGB^BFqdU)-VnmCNQ8WU=hc=;y(RvBF&U^oYi)h|rY$XE!~y6o z{bzcrVE#6YkXVBJrH)7)=HP9v?hC@)SZ^xmQ~O&Wd;(zyK;I1JLT}RAj&3jwhPr5r`q~a^5ASbst*xsRx_}P?0XMYy@bWn>$lk z6a;`d1Oie6iM$?tL&7d0{XDDLVswvA=?9YdkFr-+}AU~7MsT-TpCd)gt{ zZs*dr5mS$KbhC*VSkI-vFw^@G^3ZQT0OkTbJD)jsHieguHA)W3QR7&BS|8vDfZSI4 z>XQDZHj=g#1ASp6({J(nxy449VOERv%}+0O$58}%VWI}TZ@Uew%>h>HXV&;-vUMS@ zW7ylxY_yzcP(}0G=WX{*T7DH>^DSuew9-nG&o-ik@)j)_M6s0K1>yPbQ%w! zrQeLM0T5r#Hb1xk(I|*}FPAY7IKhrCOrlvWfpXKH%;SF6Rk6y*%>6QA`5}zD*{L22 znW~AW9FXem>sd$sc#Kb

jJ=${oLE_OmlGRHwBdjuM}qXi623UH%@i9_)WPCg(H# z)5ZJ84nb)@oI1ndhNUV87oajazX~jda(6lxEJ*x^ZJwaqN{T|g}WpWgltsCRA}5D7UQgca&xL~FXbGPeq&S3BR=w6FEhM9+nm$!D28{r6<6aS!1Q^%)mWhm zM;bDVnoY#c{P4mka?ACz31eM+6-|1BTU)L|Unoj7*Hv7`Tb)t*^15SdW;Wd7S6a6h`^&9hv zk)2f)u^g31K>IOY_#f?M`Mlm|yZu0hnx7d3T8MNb3v1F-EULfcpIhBL>tS z)_OH&wkXUa;1st1!q(N-VQWXiWp3t~Q+G&-(8qPF)0iMi9Nma_4JLnXTgeH?0jyLb zr13H)XDM_$)aW$if^b(iA>wi8FwE+mpa?k~a7+AClNn=f8xP}KrHt*d)zM_*_BCUM zsbI+1aSAbvGif#tHaPyleSmFo~>1Ux-BR%0QK=YFkxK}s6N+*ogRy~J0?`Ms#Y&wV`BtqL=Vau+T(@C@ta zf8p4gP2k@4UItq<$)9@CGA-mbvFFgPUH^Rh^30?tR35X%X{jAh1rK98NKR*{d-B31 zl9NcKO9#u*)d?c@o7OXjuf%xWkXWMMQ;kTLel7N><6@?XiABnhPjSIOP zd2WD)?i+12>&-g3A!gWUikQ5h*JF0dDe_H5Cj_EFePos7?|}uD_>A z*;2L>lmf#LV-JaEzK@vgu(e0A8k=*It8HltMAmMHvM5VBVBj-exj@;65k{FT;l{qk zjEkvPyxlGh0`#ci+Oa)%C7iljwooIb;^~2V1%y^k7GE|RBlfCSJs0BzM2{sSO%cJi z@EO|2S^40~KCh+u*hzPeenzl;yY}Ts)YrT|h)=x277$S7Q|0v`}FfeylpJu z(5LditRk;?=^!WO2sS~c1o4~7^q>!qmSFKp)YefG*{D}K5#gewy?aQ8AL(gPhtG|< zOWqXwa*J_$(Z24xhO@0e*!4LqAHDS&(WAi_;D_%&{uFLuaPkceP6{mZ*VEwzzX@?~ zEgT6*F(-&a<|I;Zlq}iQ`PnjA7W*x+R?TjEFgG?lbRIm5B}RT9_gi=cN(S<*7%IFmL|WRL~Q0?9f)^-E9>M zaUz(0;Wgf9?_PVe!P40pA$Z#@p&N~y9iFNicW!T#gYTru|IY^`89>KJba=cLNh0QXF2_|&%x8aXh^VYKt{|)-l91}POREC-5BT+ z;i&X5@3oXrfNTDLk({`Vr(Oq9h+pIrF+gH%ORLpcT%N1#Q5_5yAn7sx(VhvG#GPoG`E2hM!B8~1YZ{2WkUaY#TWn6#*kGB(YR zzRsd56V43h^=*x?LbWFk2~=Id6kj)w1_IC+rESyl2=)c(arNuQ<@hmCm_2vpLIB_s zK(FJIvhb2pR`-Q{pctUpzhfC}YE&QQBokF436!XQ#{0&DP=@cU*VIH;P`WrcZxp?R zs-G@MhZ``|)sBv|Dwn62GdJlt*5!gZXCOKA7oJ&YelPTKN(Z?f=|pbov7R&L<#R0w zY^6uNPi$<->1CkujQJ<~p>|M=AG*JFVGuTlh{OU*mR*d=tn6CrJ z*edbL!Lh)%@>f-;PjeLjFWz0mS6~o7M{jw>u&eK+iNIZUgEzgZK`-Q<; z+Q=o%#9Qx&#ww_nNjiIb;1joZ%r3Tz>s5xs6&C3L`dDu3Acy1Oy*${?^p{Rk`m-#k z^0fVa8>pCW+avGgx|PlkOfETg+Nv0RI<`|=;x6dyWAmyOFE?k-YOZk8!5iWsQ_>1k zH9{&E#!2vA__4vMHW*L8&_dF#kG)j6W$CHn7i`wITf@F^f~j#p(f)YqbOyfWAh2cTx0k50x>c@JXAltyx8XSWevw5d{k);X+T(I}srm?4F5CvVhJ(zd z#40)?n=nwy-DU$1D>QkL75Eh{4w)a=Ituw^tGEe-GxKAN+zv8XN#AxW^eAQA;|uZc zK(3CGmaX4`I_DvB%cZpS-b?Q?41)Le+@4aoL+g zuoBn39;DG4@@)&phHNbJPuZ)1N6UEauMS$|Bfe#%W5cb-$IziodullDrVs3tx1vEY zikJ_&jNoqVkcECW+aCVZ;_^E4T;^n6a?*};`Meeqef|I33j=cc-7V~+P~po0+7`YU zlLu=~aPW?3x%QSE`h*3cs+rDt+C!gD=G zDWcvSta}yqNjL#Fu9a4&#D0E(#fSE*w?fJq)fppYcp>1Yq{_g72L*mR2_a(%v+&Z_ zfTYs*_{-Jfzj)wZOC37;Vc=GAfq}r&GK2YXjeV_9E@Xy-_u%~6&WWBcv;Lw$@c`Ea zC3G-_ftH|+9e|gEp&vt5gw-NYlpi7-*ZKqbKE9GP6q&p`<6Mp|9G^{J!w*?>M`3kG zPK%57d!h|l{A`@UbZcC7mJEQMm^9scXEE(^i=HVkSo=(#xV5q;MEBCg>7WsR`IN_U zHAa3TtDVt0(KTLdE+1ci)tSF)4OH~cd!87Kt{7so`DpR=c zu7L!=)&u>}7Z_!k7pY|t5=RNwrO?qC94eta*t6419e4lBR=qsg zN@s|*hi;r$8&f+oQ}68yd5jv+O3PSzKLFtP>$woGdR3>jQL&BJz#d^g;Y{BYmOtRq zjza%YyX0KZ*;%qMJLXtSYP|L@HBSwZO)JSOS&L>qF!^}k)B%CO7kBhNfY~*$+U$)z zvfO3P50PY#mi~z3JumM(A%gqMm{sr%!!Y$4+2+SL0G#!2KMx}Q-%kDvZ?!|vK*~Z( zsda3Yr9b{0=!V+XI)7ikoK%!IiZm@pbvE&NCg$KJ9i$P-?|A0IC-)aV9@DiO<-yl znZKG@cFC#uAIE0koVC+Ns>F=L*;^0h_ynnyI z4zn_>`yW361gqlFy7X{jH|I{>EYrkkNER*pyCdO$lLq`i?2xG^{j5AT{qr&&*sK1m zJpQH({x@gxr{c4dsdr@M|I?2A*ZrAXEt@B8&ZOH%gq$(V`LbsZKtPDZ+yCZ&3JOh} z(#tW|1GT236J-~MbBriqNKnwC1NG5QBHiBaqnxn5i#@W)$Yrh3oS^}L+D^#>TvKR8~D7}aG2>k z0gIni10CHlNqcy|d$<)^E6I}$znyvxXyXMOgnsT<+v`8yF8<4HSc|8q&Sv{Ly0~1M z=|m>GpW}pTy<5X6dDoHlv|9z*@ zEuQng9m-20C4@nlP0ky!Xr~bgjJG>Y*6o9#GuJb+?6yoT ztD9t2Ib)?$ON1z8jWEko*iq)gpsV=w=@EIS-B+T*%=JSgCZo=(+30oJo=ZL;W+(T& zIj0i#0po8_P_YjWl&o2WfYOwRk<4%Mm<1pd{ej{QKx=1wfwl?+rO3i59pnmOe}K{k zx>q7rJebI6*_nk5A#{I6$n|s_QLFR7%u)_d}TQYG&gkN9L}Zi+0+%;&_o)!1|!{Yy~RX1MfJ{_ zv2zn}E`qUH3>URtib#AzTijGB=%j*ujNV09GpTp6XtNnTS7htYN~uczf2;pD*QAyr zpB=G1PsV2K2?7y6a$lopj&vRiDc1zc@EJmEVkFj5cp1u$3yx@;tR;sgqcq zpkW48DT>m?3@xVLfWO5BGTFvO3;CAC;P9xJM8t(KCYuw za@~?BXmKR{+Ts)Lj&4F&g+ZRG=`rLhb(mukNWAoqMU{jTiyc6}X$z$mp(n->8AaSGOhx0Jvv3kqkpERS$8bl1GgT{eOecCPkcid4gZ@CPk^3{kiBQL%Mcav}_KOgA4m6tO+Oz?fNG_fel(@ zl#^-wVr*jzIEg-l(OnK-A88Xs5_q$|?*m<}GE7(f-Y2a(@x*re%S+kRoEgk8s)ibO z4&*UXW+XJD&vag<_~0Ojt$U{~+o%J2BLN+5|1S;KuqBpcJM`0Pp|rt4*rzT&VtXJb z@H;_vNkD+!%lE_SmemQ?wkWlfm63xSWgmoK;maZ~?Gj`-tk+cpa#s4YvdFhP!&C?0 zO`o`BK5<81j-D`8ZsE53XK2lByAupFBc19gRg14RD77tiEC^{>n~ooY!Bh^+7IrVb zKd?P)&KKS4^yQKf2uzt3zD$RF>8a|oYYNVh=Z%f^gIu^tH=3LD-T-q_T9cl~mpFJn znLWQA#+AX0TcsG_1LJ{R6~{&?LeJDM7qY&UvXK9DMuevE19^OxgT|CLvYA6&s^*%T zHqvWc!}g?>x35gpIbSk6QzEQ7FhLgP%7SBNcV(N1O)UeynU__cyi_M%BdcSR^{>u? zz$hCI^mgh>h$Airq!#E~Su8g5Y~FjlNjg;LgC|<=g4frOy*o!$JVFJrucC+E7`S8= zIN`p0&lA)~9W3D%2+(D3c|pC-eNzX2$dovPRpN;a3%_oA&CGkLdryf~u!olg=|sH} zn)bX#A^wGMqxATc?7rDN3(exD*(=YK8y@AzbyKhi+n&cvMm^4F;N>gKw+6?#E41&B z_P%dC=Vz5@nQVg=J(mVZQ62>KUAD!IlFaQmQ@`Z(#U4ZNGVRtQcd#eHCqBHSC zqtPiE`atV#xgH{MJHT91xi{@$h$5a&0FKJLXd7!Ib!1>UOX_YcAqx)#rlyinvg}ac zcc%!_gDfc9>49mbx-^LH@gk-ULTvg$GWc zeAk~Nteok-XToGC{gp#)z3K2_Pjy;SOd9rbT5eq!e@@gYK(C{o6IW2HLodMMhVi9)G}HHQtPii|`HVs?KsW{TbH!Tov1y)e zWPT-P&Z94DsRA~1$jYo3*g`-fHtnJOz8;|httZ>;@2zhtRof11+8t)lW@kiHhJbxB zJHWH#p=Y{wI%yKv9KtzOXQfw#^2Y3PVg4+Oj|szc}TG*HWl3kVaL;l3j` zfu(q^(%$U}fSAP{dmrYw<5W^gwvB)Td!Ow7ZCt;l6<8=$yH@J^Q2>9tZ>`-_QmGpy z@c#S2>d!{oCvsjY$;#_9?2gOq_o}_l(h5G%V=lm&c`+ef*bL>qZoZlINS)O+7b<&c ziQRhBIRawLN==FG6dde$b||P6x_x~-UtMTno#hzdthX)ZT_wyaCDN@;JWQ0TT}EXl z(XpTtjtGGOw7Ro zYuy&2`MQ|4`2U3-`Lg#1lYxtMR1Gjc+P5%yV~Rh~6p9u674Dhp)* ztcxF@_dYmz6GYTqY)4zXnT?VgiNw%lL95S*l^0vKz7W;1Z9_o`UUBZS_VfkvY9mFx z&9ay%!6rLwn#Nq6G_vISKXkokSW{cKHjKIz6#*4#(ySCIp?8RifOJp+krEUF3WNwq zFHsRtDN*Ut1e6Yu8hS*9Pz}8#RDnX7%{kW?<1VAU zbJR<}1Y!Aa&`&^r)I(!B8@)p(Yc6lS5YKIubET*DAGaTucY>epN_jvdYWj!1Z+uh< zciiG5pSdkn>>Q#9?cLAWf%d2L&9His!|Qy&+76N1pXz=pwYzIm1##gG`2%x>8bL{CBn+69-q1Zw;!(ESro$-UeyG3 zR^+v4BV6un^pw}#EwxNY?uf^dN;@SFAweIVA?gcgg_LxN@@Rc-_!4yHN7_id8*&qS zR|VI!d;B(CZL)9{6RAS}&DOIot$$i4hN*A9Gn(CLCUi6) zCsO;L$iOdb@i|j-WCN!kjel5FqK-SzS`FA1(G7!PNJ>Ow*acA?n*QR<@Ue!S0z~Aw2yY6*94QCm$>~vGlx<=&@&%=J5 z0T7S1lxR23tJit{?z+6j5pzwv=DQ!!D<6O-KzT17Ks$mS0&^kUJ-y8RPMDvGI`2n6 z+Nm2mF(kaf?-zW=j9mK&nF(8|1Z3xx`JC;Y!(+kfTP!JUA&ak*X)%;HHq^++-M!zn z*hf@$V|dYEOHffOOb)DDWOvT1OOwy3nwszfxzuHA|A5UmgJaT>NC3HCq^Wp@Y>E!q zH5UIYReZ!<%6RiLWJ+<&>D9I|^()@SCpp%u3&B@#>Prxr?D40nIq;WVAv7n5Miu-{ zpC_@a;!0xul=np3VwFC=vVS2rD`tael?a5F#E7h8W^QIwFy?KX$9U`uu5(L?tdjIf zY}N!W3YEcw2sEP|d>&a4?ldiG`&8{s^&7qGVl_(Rza718VE z1KA89UI9{@*Uq@X(dHqHtvy$;;x&I;I>TEl`D=(4i7TEJHngRMA;4T3+>hfTfD8LY zKxWijf2iiUz7YNhS*l=J+Njq?Ow*fBuaqDS+5Dcrq?+h94NotiB{35=pB`wP;RyJ6 z;AV7y@ZQ7NWpUSUHSaHskpb_t3j+rC9 zZK=XwNoU|XZd^dzeqw!@bgzH9H{>;58jPMegN4U+EUpoGfM!lv55ZLUy5v_V^g7{$ zLPt2)J`lI*W$a0H9rHm}*@JmyHQQDK(OMWp;WNQPGlhb=o+P!nl4#U}`^qB;2s;+8 z0&m+bK~3c&!Fx5^)B~!isBYI==vmF}t{8EXdyt_4SS{|EV2Ysb=Bec{A za*CM2wk0@X7FDyi)ZyN>c!NtFJwm+NI-AHc&_~$Ym7*7!OJ_6AE5iyjJMfPeMI-T7_*~O`P6d7d5@tZs_6pF| z=JESC6J>K}$j}Iz^&=`FYd)S69O%mmge0YiOr=(GG;}XUHekANLU|Fp$XY>*R4vyS zPpEoCXd8dCSPLbcEugG*@YG{}@a^t#)6h%W%JAxoTWY?Hn^t$VTD?XkR@Bg(-PMHj_7OFX5%U$ z5kF$Cfx+4bw8!Q?Q+zM%OG@Jl)87~tMOf3+Mz?DOic3G7NT;&NE210uZq7`a-}29Epu}+cHf+cTV19)rq?5w zlY@ti%OD-3Y{S5wSI2dh9p(b>b*{{i?TkO1S}hD*D*Z`#9bcJAF)n^s=vTx^x`$@*Bm<@o?}3u3A6IYd zLm8yV&U(RPZ85vY0qG_XYN7Q|bel7BOp2#|NAocurfhyrC=r$M%R}YY7n9abjU}7& z+0iJ`wxc#RrxEuNhG#$Ag+1rs0EG2B&e@9&TeqwVP(Q@nF7_S~KhDR+S!u3l0atJG z=_`9V_M1w;+invyq*t@?dUdGeefr;k6QIhx>nx2(UZrt{P*K!l2L@Fs?XP|sJZ7x* zIk46eEan=yaYnlgmxXwvtO+3DA$2lFXk%= zzWpD|ne@>Mj%w5ZTHQU2RlLS$b}~x0M#Q#eleA9YjshwU-~+`mTYk^%)Dv+B756D6 zhN4DHeJDf&PnhonB{QmFvbm=H$SL5GN&K6&Mq~cdgE3W$+a-4OL8lIhFo!0+DOM4B z%ZI25O%3WLm+h;hv}GDVuBde(JW5C_)?Dp=XpQMByx$pep^k_^#&cx|d4b;QJh?G9GonD)@Z7Qpfc_*E+TC*pq^&T6MJJHHhoE{cH04V-K%Gx^sdC1=Rg z5|#vUpHlwvfj1{uFS{$4l%RiW5c+1^Y<=3)M^q)};z&388ePOaTdXoYOPx)S?S^2v zYE+fao^`v7L8n6>g0gYLN`46FvMRs*uSO`xsrFI7xyzp2=KG>v?t#gjc4W`pwlas% z+2_LNBRRrv5MlrkrfJJD`3Jc4l`zF@s4)3s_f%P-szsKn|Bs&! zAZrOI!0rbWjO?T~M-(yJ)nxvyUY3PVF_WsaKq0ZIPnzjXl+rbGzGlnZq+jP*Z426c z9?%|7Q?k)<#YnqU8oB`o&(^c=y0e*LWFwgSq>&J zb;L9O_Gr12o2d%X)>#0UGWai+@@L1806k<&S2>hi%;)&bu+>3o#Ll9)R&6+(@9_)y z`&Un2@`HA9ihKA?9_D}a(qpjVlJZNfC<*1yO`#=yZ0Dcf*SROMWPMnkTsj2*)*2K3-QHL(Mqp7UQj z4cG~{;JkIWh&EKb{kiNk^gOL>@%;Yl*LSZKCumQ16#)_w# z?f6gYgoVj3>{m8nU!U*}G;(O}+}HXt>HD#t)ucc$C1W5dtogHt99-_na(cX% zt)hwcw4oqe!N^G&?X3kgsAd26NoU~qYorcx!U&5}tjc9HD8;*HX=Wo*^IS&@*AYS~ zUOU8_Q=jX3lJwOG>9=~H-z@%hDnzXb)P#%Rwc5Q29+tL@eDRenm__ck&i0(9V(?CI z?Nocz!ov2n-?LYmgA0ABK6{!h$T9Te5?b)C40nuNZ%l5U3DC{%90A1HKy#FxwWBp@ zd*g;IzJ1*FM5Rt_bg=P=O>wdR2{UJjv?w$;c6iCZkF;HjQY|9M$S+`oh=4xhnX4<>#$BThi2YB#>ypUl=+DNB34W85*=nqaL$ml7`p#oACB)u5oCCI1zjKuob%#r9szzqMvr8L8baKGPp2f6 zgv<6huUyI483(sEM%qa*+toEL2aW*LQ9ac01nuwie-z)qsW8>_U0|Ml8mTC?^-+AA zeGq%COf>ElX1k?ffEU=#gQZGGnhU z5G~2aCAud&D~9#lCXb}YK4nW9?=lo^)bidHteHMKAU0AulD2r4186p7aOk6g@}GHi zW|rRQ7mIzn46npb%X;Nv7wGQs_2C@H=hT|UP@i1jeAO@i~0D7>k@%T+P z%t!;xbZLDHaD=Lt0iXaXLxBmD#|-rIWg3BIDs1)ATzuZ=zCxf)DFp3`V2kVGvMHp< z8dY$obv6FHDtzA8#=B){h27y`hEH8pbe>&Z^21asK7mc%B(#s$Zm_W}=*HSycfQca zrqW$l7`{ZNg+Jc=Ao>%F0NSo|$bqF&=p38qJ4F_x5t?^L<$_Ye(QW;tEA>OB4<*9i z$;^DF4y>A9=ld;%$Px#^c0%Er>m53w&=tv3hU5-SSgvn-%BGg86Dt)6GfKp5sH^cuoL0nloqLW94D3uW1Cj4s->AnXX*$zn}LIED|{1%P>bN^ z1cQUmgkfB?(WISfPs_+Nl_MV^2*k*=srB?&Mq^bcG9C(Kw}Z9-I|9fzVhz(aR#MeM z=2qQ~dJS*wi!$3%aEfsws|8y#(-VIFpZ7L3d|3Vv6942CfgJ5Sh)?cZx3>- z5028`Ro%KyIy046yqJBBFv5A!%KojCY@ox+N0U0q&phz%S(c?mn%zXEs$f@4@l0tZ z;8UHZO7VCMY4f1Y%H28oF1doE;C8>$iu3+1+;}Sf^7|~A7r(X>HLAc=>?9_LI+dY3^|; zo)w2)FdTV!;^JcasX)%QoAny5S+SZV#Xk4br_WRlc@V}Gg>L7>IusHh13WH+dhl2A zbfxTqkk1GXS-%5MC5NI-TUHAXZIZqp#}{#qe%zsU2u9#t>L=K}&ty`>pj2SP3?2aB zO(IGJY~!Cax+rPJyH{owU!c75o`m)8RcRGU2^Q3X z1;9o;RXbmc?i(lPp=|sIbf)eORCUX^?9o0U#qGYCZwO2!C?%=3@y|DA&B+Tz?M|=T zIRM}EkRdj+6S|!tnmeW;w=E!Bo`|s_gO|EwX}{Rpr<58mpuzEg?-iKQIKTII25x_y z!E3+CU$ahF*JNKN|(Cb?Dx8uXAyq<(C0w z;xRo#jRut7*!L+5afry(Vh5H@A+U)ag6?C#5QoLu%ybtDCMUC>tKq~T?} zc*J$s5j=V$e=!_8np05^n;@XDk3>~l&L9v2(@#qJ=$_N4khIwtv0xdM;2ILo21xGXE-uKX|odgK{6q!$0dUdviG~#SC$fTkOO7*09k2n@6(z@3DC2m z1#3KBc|PEQ&@`CSrEb+HWhfk;);;mJXc`C<6HOPJdBRX|Im>6n{A}nA{xhGiGT36F z`al2^-2*ZFUR188FSB2~CPe#?J69h=76EFm{y{EX+mbwE{ve68Rd~i#nCQn)9-3ER zr($RFhsmSNkpF+(p-F7#6u38oddh3R95244|Ak>d8v7QY>hgjk_Z9*G2zV>)Gj!ie zF;=V(ELCSXrk8^gV{?c0R#wkfYn&QvXks=-~JT<6t(uDw}g9k4}frA6TZRmH_2+j zUdcYg%(I_e?H2x$!E3<-@|Vfk+-*gdL2rXW)({_!1@orH^&?*+4wF*6ivi-Jn3Cn@ zSYyHuB`7C30U~#);ZXAB5n?z`=GAX7@fA5K^ppGrdEN;?Z=ay({`7RE3Z`LVxeqPk zDx`bYT9FUcQvv8#r!4`zS7h-UtsJKz?tqkx%^lhk8~N>AqWv$_4G=UN>(cj*tIV_{ z;y=%R$$(v{6Zmy1xr`c9HrGR#`I>aW8t@6N3z>>;BHPk_oxi{;vPr7%#2G()n*cg4 zve}rGQAzjNxEmq1HZ1{IF-5!gamB#J5-w?3+0Iot9!RUYWt1{y8cs;O&jGwWd@pE@ zg17g)JQvGCXFn7wy~{4y;r8Fmr@qth7Nf}OZ_K{U1bsabPkQkhl=~!)^0o8YH~u;)cOrR ze$|IgHgIfNnbO2_MX>*vp1H!g{h9;wNBGauf2?X&ql#A7q@T)hxZOf?u*H&T7WGla zd$azb{z1VTj2C#?OZM%*!9&%?c6V|aEA+|ojH3zbyEo0pw6b6q$)()we;o|%8T4B* zvOQ_I6BpxQn(x2N*cu%F_{JZJD0v}U$B%hMi%GHq6Yh}JiMFz|+pCFUa%eOdr#=Po zI$+oe^fn&t*(y9^#5q&F^CtWl*9ooE$?q=&7Bp?8CY;=~Cp3;jU!wwKyk8R!mo_q# zEQRdb{|(XE?ff4Q-O*E!;9Ei7ui2nL<##>JK8u@1KJ=Tn;Tl^4P>#WN9(j03i{Bz8 z3SI0T1I?NT(LA6exR-)>lS%xJ)%NYO`!5BIoDL_*Mdq0$w?iQ)!f}8 zxrA#$^aCFlW;@9$=Ct~h<;@1}wp43~aPg}9`9Ajj4;99NDc-B_dfS}k%3!Id$7=pV znS@ShDMv|P(+PsULQj0W^ytgf=xM`57PQqE+CMd1`mOQJ+qv#(nzY~-vdSUAE<#&o zcD7^P;|}|Vm>X9+@VN%qDZ4bcj8tV?)Zc6L8QA=&!$dujzpT&A*?uP>`ZKiGIx4^H zhmXML{-eTYxA`6-KGM#s(x3NT?RL<7n2Wx_BB(oRQ3!2hvcT!#S6&86G%3n!V@uH7 z(ctsL5rHXaZ%`+&`{voUw0JjGJ*X3dZ^#qQ)K$;<39_a`{q*vd2RV!8f#$^=5uOP) z?<*x!cJmBkJx(mjkl)+=n7UC~qHgI*RX*Y^s5Nb8X~)6T&CR$r)(4`2cOhob?tJ-% zFXU3h1V5q&a|}w}`>IxcctA@E;e8*F6}M5!HpD=24Z4sEeIYxtyEFA@W@@`Nmu4RJ z2du4keKC?o+V1*}K3HB9bB{!fm(}6>{xL4TxX0q7*Uhtm5;*`>HimJ5GOA>vq?aR5 zB?ImV`64zd+P~el6C(UW?@-1hh==lypSv?sdWyq1DeUDYYXTcb=QoSf=lp~oq$xq^ z7j)0n=P9(jCikV0LHx0row&u=t%u^U>^)_C=1T%x9WXV?Tx)lnCwT}pt#NNn32+0a z;6=VryPxu^!WnG>HF_}NDJ!!)TVr7izm?t^ zq~Ptl+q(oEGNBbND=uj@g#b=R|H9afUxAwZt!2G=O!ehPZ>v@<(8!$_NPWX7b*D?u zC@eVi4*5Wz#GVK>6lyMQzrFPI@-dEsTgMN*Ice_T*54RX6w|fGU$3tt5HXP;Hupl? z1#zG6EUMu|!x-pxHqtRr^DoBDYJ|Ja>m61o6UZ_-RE}`Vqzizk7th$D3o>4ig}VJn z5%^vK=Bngv3uEg~)P`-CQH&fu8@1!z5lHnU#Vv0m^LvsysUUMj*IXUMh}WHUJH;%w z5HDP|+;;PZxg7{836aiSptkoairZP*f?I5ajM9E%@7p@wA_vHutb{X_L7(RQl(Xo(}35M{g3kjqvX^qVmo4VJ}EnZo;reU zTQXQJ^mcnT_sJSdj4J=R3*SjS$n;`fIZkEvN5hP(Z^#!bX^p)W%T{-4kRh4Uj?rJ* zM7Q-1VjVGZRy(0(1WIp*uYuJFsL=N>{-+WH>x$et63VV@T8N zWf!g=0sJwK_NACQwbHbrvYHER_=q&)w!jFRv3DWM-yCHm{M~q91H8H~(2_$I4>4yW zgW2CD;3^>=so~v8ZW?GI^u%jgZC6QDzA<8jexZOkBoczmZLv1fyle@I@XuIi@ZIEg z&`4F>Qm&WTn&C-<38)KkV!19o5}}UT6MhNh!Ymq`VzIW=vG!P3@K+7?Y7(D5^+Y!c zXHKuQ8V5rC7E4QYTG9=!V86HsUIKhl2WcWyLf7oJxuCTf;o4dLlnIMG(piVUnDPvM zrJw2yey16FlLyX-aNu%r(nedOASPKhY>=KzKayi}RLBOD!o7X*4pg<=3%$P7uwl z$%c_!?Rqq8^Kg%RYm;o6u|<`3xFW;=2xmSiWk#WG;o_7UHgoTk3XSoq0y1G+v@Ni3 zl775^Vwitcw});za%E4|h$5a{kap4s6R?WU1JTlzkachPHDZfjZs<@UO8?FAeN|AfjU%t-Y$2lpt#Vr9r}^$By^Kew#Qz$Ao9>I&U!NH2c<+I(XcRk@)cfUR|Z^T|!SP_61OO zdu(WjHWJ96U3wf)rV+5+Rbx)s)ADCx+Q7nFjd_D~shIrxh_Dye_K? zK_2&YG^ZQ-V^>x!c}|eu!Ca^(yLawlMe%VUOb%49fh2umGkqEN%52p#nEDsh^2MU% z)+0u=h^}&t zI0BIJ=O(-=f}Gv-A5T^M%d!U`I~m9(LZ=Hv+3zSf5vly(Jgk&JPhpHun717C5uG-z z!kG>jkA<9=hKZvwP1Fq2Kuz=DoSBxM#|ZtA#xs~sKT6-7N(b(%4c)CPmR^F(g*puf zdkY=Pv`3;|0|)1Ih_OeNw_lVI1xPUddH$|Is2Ze_uEe( zTVK|Cez((>Jq^bd_>5v6DIH6BjbEyU!Bdc8eQl)!B-9V!;UE0{`rNW?`;l8Oy{;`# z*C&Pm-6pyVxCxyaN@t`-9j3&eb;ie!$ly`73L5zb8ot--bE^7tH>JZD^v)ux76w^lHnpt3r4s4NTJn~Apg)JR9TJ_~?BNCFk z>Cv22K)n1_5-#n1aKrX#F=R=-JLge`>s-xx-dRg%$^cF~Y3FX*v7|_RU`#m{ z4w@-PcAgD}<>!w3 z-MDqA)?l58Z?xJP|IA37C(13flHHmLi_2fm-X1o-Zl7Yi*%$mVvOL79@+iClag0|Le}U2U*jLEhIVBb`@RGgVMy5KhjGB@OUe$ab*v<3^W$ zmRNpE_mGS2_4P@;ibB&E~~tui4bAKYiBc;?@McWHk|*L*&xK6jTWP;&lQOlS{W5&^}u#`JLr)J4*bn=Rn&PRqz?{#61C^Zbf3eBj3ZD|i_(`MSWt8}J= zvn8DaYe%H_ba;8mXz$ji z>WGEJt~tAD`i>U19QgRF#OmB9u53vLOgtigIQ_r5{x1PnG{YNabq#jPER_?5nz7Q& zR!pe6E~)fFnb{T|P>FMs(Q7d!_0uHDrYiFW=?p0+j`kA=Jz8@z`j&USlyto8Hg=01 zoJ+?z+TH6}P1+BfLV};DyHa_WAH)P2qKQvy{(9;G`0V{Qz)&;G>|BgkN#tAMk7u@w zKD-V1UtV}X(8)BceItJwG`e)ybNk9Mc;-M|?FH*MCnOCQU_a=NQ{aAMGpe`Py>lCA z%gx)W%qquYL`ZTe(|5rY4+kylf%5U-WjhIzC9Fe1eeGo>$gcKIZPIk!A}&TIC8fZ@ z=;)8^f+c>fHrI}edq%D8eRas}?*#;xg^{!ko@WixFBwOg+& zpSJYUX--kD=+du_JJ@U_Xt!p-B~b}wW{cUgx$~?31$n`N?Nn;VUa60_)QPbG$wOc6 zMf_u3;|sWTMp*9a7~9n+cGkLRsr=-&ZY6Eoa!Xh)KTvTJ-x7uv`g=Bvh2(Vdycc#} zDgz*!K?fxuE5PmLznwYGTkKXz@NNKZ%nQEc`ZxYD6SOF z@0|FAy?eF9ruN*(@tkz&F8E^43WNxhMZMhdj|@?K8uSe$P_YEFjRDH|c@Xw9^_-fqYAgVWNe z2J(4b2RPW2bhh8C?__ZOir*x;m<%% z@Ni2;195qnhULT+D?wz;QD~-TH5K0drQ|145^0!(1NJ1XKbsE#jH7++E->3}AsORc z+Loc9#0&{F#k*1uPnRj*zga=zp$@-byAoFl9eX;xykPgRuT}M#o>_A3eSYMRWUv>W47P(V72Sjv2OdA##t<5o- zOZ@QCw4nf&wrO5F{BTh?@?#b0Y~+(BnM*9OL=F2KNXxgX=_CAW7arWg3HiDQtql`s zyU+&umLdX?7j(cUYW#tVv`uT?PO#{b^=e@Op#r7_!pjfKw#lT-$s~j1EZ2}u#&`IP zDEzDRnM%B%uKbTlo{QIE-p?muf^F6VShuVzVX#$p+3^|+jGA{T>5_MQ3uH_AMxNmq z?0tc16U8=_g^9IY#~jg(qbT$x?bF|sAS+%)X92y6{IMxMQ#ROTgYi{;Z9l(C+|d9AZo0jq-VzvHOt z9qrvQV2;!K028TTz-A$pYMD`XJSMQjNNzjuUc5oMYpR#RoJk_$ov>LHGiK@A;Tr$R|dVOYP+!3;QT){Ec88oseTq%Ld#Rm+s& zjx)*IQhR_P&-Ha$>Jbjppqp7n27xl;{MG^LWaX|F`$>y(6Kc5M*fBjC04-1s_ourOECSOB31}hn6Mube^N5Sa zEPA{&<*h4r9M?Ki73)?Gzyyv(JdhEaqy}3*$wOBW-2t4Nap=L4$)%sud;VQr3zT)@;&ySy5e8E~}NO97Q_pYL%_ZM%8 z-bN!Qc_Q6SxPBEqTGUVK9u7EV$2jk3lCkJC=w|#IYrlefNw=t4v%!mTZDyaJ5<&c~ zp3`p9%wn0PKuq&MUI34(+V8Ct3}-EByoNn<*5PHl=UVl$Dop30_4QZ>_O0S2Dpef2 z_|8rsR#G|lPIRd;xYn=-CuT&BnAc7@rWofMeFG(CKG-iH__k-Veqhhe768`) zKFR!hZ;1Zfhc{o=W@1#b_<~2Cih+GAs}9fgBT`qv;9UPbS@)YWX5A(y5mEGwWP*^N zRQpXL&^|v;r6&%_|aUHDFHy-8Xn4>Ps{FJH6L*;D#KN?YB;YgwTwah z3=?*Cee7Hp{Jd+*=7a-n)@n!~i)f=e zlOZCP^KN4I>i!Rv8>`zL78-1)RZaT+8~kS|1$`~bb6Ja(CzuXt>t;qByDhaxG=P16 zpzblAGX43}1%Q5FI8relHerLbKT?WgxK;vie}|=18Ds?V< zFc^ko!?~fBn56D&VX`%4SK>ZXvz1KmaoGR02>5}rN?y+lhnw+YR?h~<#gq~gH&d8I z_)H$U3CA6a<_6dd)He4Qvf+LnCdrb*pIAI$Y2Ge*w?8k4##Ngb4;&?P{ zC-UL_*T^Q*9+MmXH0he@V_hEh)*`{5yn0HwL!>rl`>z-82VEW`wm1~Y*PfK+s_3eiF&1t*&StrX(DJMK0JhsnPGo_2rl@1+t{-n$|-4YSKolgwiOxcF#y)1`%j}I5e_h7E|B7d>`sPmo!&#{GR>%}k9nr1=lSqE<0zd+%KLA~`Rp0GB%Q8|f;EjPfkJF@! z?XE&FChp2}`>hV>2CKm$!I(X6tBr1pxBDjaC#!t0hR8XL^svYU@bmjW;+0Nr8UjNEtXwv`HJTKEyA~GyQFm%(n+j92=yLS-@iK`stx1Gr)9)m?6|9eE#76*GE$un4d2Dd)dTw0vFjDfv-fg}@@mDG`f*y3jpo zB1b}bNFIr#Get-SZ7%s=D%IIA*_NO7Il*;h&ImQzbgN3EkH;KF3Gu~NTM4a7r&`aE z86!&oc8$|+d)Ru70a%pTrotm%#I^?USrf>uemW-n;Ya2HbbLm3vR>bX4+)VA>?q|6 zsSn|A-J9xM_JNv=Zyc}+7!OcV7Dw+*%wexX)RQ8a|5T>H?mwl5HWQUoyzouyTW|U5i&bx` z(E@tSP@b|=NPJL+GjGSImm3rKzt6#8xXSw{=U}$ZFbxscC52(JdY=PF7`$A65%-6O z;!;3Cu0%<0m^&)22Q41Bz5;VxlJC2y_>$t0K@5iQuoQ{y!!60<`vhvOe2h`g);xoKL?%a!zqC4E^2aeXC zVpLD`_E*Py6$Pq;YbzO1o8MB666T;6h^qZMC_E|7y-LAqelXR%vJZ}n1`FD$0hc;3 z@f3Rz#mGuNxSJ|5H+yEC?%6fl~GNI13|_ zf*9|5s>nr}v~%pNfAY&3w#uGDAGJ>@Fe9#71!r^8Cc$eO88O86-(?I@2I^y-7?(Xy$C~;z9_w+8n>$!v+U-vCr z%-J^)tY1R`JXOUzGBur}dzyiqMz3q$3rnSxKFQqn3+c5x+j|KNdYI@*F(aYuK3^S3 z5of^*=ynOuo?suV#|^*haYWyDbG%EEBXawDLc?{xa~+d9&D!>P zMEdMja)MkEwidqXv7qdU?I}^h_j=a{RIyi@AakF7b*PMLYkl0*=onROQP-HvJeHou zZCbw`6-v%e zA;W6Oc{>6g6oGdME=AcB4UQ-iCBhX%j6phTCdoA|<@DJu?*Xqz`GOe&*Jn5S9{*S* zrWg* zDBW*cXFVbw6f5EmF%hgIg{}Wu$5h@obOBhd!)({^2VVLf?%bPy%X+7t^a$w0N}ESb?eWVbaq86k4ImlmBCvj;P1+zB^y}^C5SnKG&n4VXAPCHgPaspFGDE zwfS=-ucH6p?b@61D`?t$yeYdg|Fdc7nU(}Tle+zfp;0FSBOL@kVO^H$96rwym>sc6 zlJ3GR4lC0?r%SPfN&hw>$c>eqL(@joUyEwk(`E|kCwJ$Hn)aAmmSQr0>~U{e`aOwSji{-bX*qprUdd&YHn#rQZYbQePGOST3@>Afx;4Mg2L@kW3m8aD`Me+SN}hbv8_MTzXo*t$?g9^*U0Gn5OBK z{uO;vFPjOS^gN^T>Vz}0ESBT<5)1~E3#!7%iDu@Fj}TB~A^!ON?ZW2D0>$^s?D0k! z5^T5%%YK< zF`#Tquix=!xOs2zT_*U?C)I!ujEe^Yxyc-cJiOZ+Q|_ zcgDm&2EyWTu5BB$+h*ipdJ*>hJy{)$hC%4i?Ggk^5@G!r!xT;3YPZT^ttFf_jutD-h$_P_)H8E4tv8$l#qEf5^yZaTB@tRTz z>cYebA)YspJ_Db53k9{0l`Pi^y{BnaNsd)5bgWKz&<}FH_>Puwoyd`RQmL=k{Vvd^ z5+zWrj0TlM351#lN0_btXZ$$YKSr83J!`kF=m8{Q!LrLCUd;w&zvh|coDdbT8@8Md zs5iW?(C7{y>6lu=t#&f6>Ie$G3-HY>E6o*z!V46SZ!;6`z)?ogGA`GrdtQ*|TJDxj z~TKuAU{)n%)vxkhR^+s!%x6L_t5Bq5@N+a=o# z!9Z2M)sP8tGx(w!Oo7|H$0>6dCoT2XfXV%|BO61GC+Kuj{|r?qll^rdeR$|Q5geYX zyxR4k5lk$#-Usr&0E3wn$F5NL%m49qOTSl>xko1_o*6Ic1co&2Q1?5kp!gG8oQiC^ zvYWm&J7{SG@(3ziEXYPF?p5cN_rG+5doXxGg|pT7m^~irs3)IkH_@v zn}q4&1aj7`6;0}?rq#GtRY`|$27_pBDRv+A8*yL6EEQrVzupRx2xyWkiH(b-w1L7Y zun6CLDkPA*f zGTl+h`Icbe_2X=pfsF;ObYoTTsE3m&-?8YC)VgN{((<)Nya7jyY zSEowvz0+>&)?^$?60ShNff;8||1c>|#^F(K1i10#XsM;q-31=LABZ#+v6TH@x;}Z! z^T+aDHO?yLYD&$V!pO>Gze7o+C`~|b4eh;Nm*|G;sjMnUpO*Ul097o5t~ySwkKklGE0Te;2_N#^9^>(=ARx3RT487y$>?EMgnbY{?-$hpBV-LFH-hK zP1%6GFW|O})!?wb`?DQ0uLwgOVfS{q*-1K3omaG!$?t(<>TR z<42Eld%B(**cC6cLTVRme56sg`pk77zTyKVT0os9P$2(jfFfiSvw~V~{9O(?@ADuK zMtmjjn!Fi9ApXOpqQw8xPvvW$A8u<)KRc|1u;V!m;{&8HS1{)CR07Y z+>6lw0$L0v?mImbtr;u+-ad6@5%8c=R*NVl+6>AIEnYXJ3s^GBTei$!b!ubZM@uO0 zHdm2MGhQl}{;q^IM<@1oVCy4cg!Z0DO_#K-j%YX0jeIETZ8m8C^O(=hW%%3MaODg6 zr!F*J&rz0>7JA-$^<#mXNdNAePuNMharQ^hEwx8#rr5?BL6gVkEq+KLKq0VxU9_C- z%LOMvqT^5dlFXD}0SB4#J_55WJD(?e(ZRdlZ28)?lxh=Dr_w~aHM?zg({T#m+3oU~e96km^Ms~=|PJ#Cnd)clCAnV|M zj%J!~WYLNpV}laK8R`|)_Y=GzqeV?wGQwvB%ZDJpcE+sxRItD!kbd>IJPYzx>Vs(yV{a>m6x^(2u zr-{S|z;c^|QEt?ZU&jwV?@8bYalHSOmF-EIkNrvdK@)`|sA9hpTNK>ElT-~EJNwu{ z55YM?AK>RXrLQ^piy(K#_WsPaxnhedc6lpJ5TnEpDZKo5g#eK#O4v|l;!x}nSto0t zf71T3DJtLKT<9?3KM(vkb(XGcw`QU8Ght^CdY-+(@irh~C3~(;D~Tv@DxN!b_`H}? zCU`_hqVPErL%pNddNOZ_O}_rz`IkyZL~a!HAWGP2)eDWA%2^qq_Y)vkd%%6A>xk3> zPX|R`Fj1f!Vk}fAlY&@n2kdm1{_q*k0XBHo-%mE%9PlE9fgZ~fdI6M&`deVX6+!(Y z`)<0b6F52`6z`nAg-Xh&r1O-|qn;lXQI_7xd@6*$@mJNhRNS%6j3q6wdl~MDjN7;9 zO^pA#cdCbqL;roFHs$u15fHaJJ!!K&=jYs6U^9C5l$*BDQ;PP3+4ky7`Z^qn`+StB z8HPB*xgHQMk{((p46hh!+1YKli=J=x`aoE=pc>()ybm*R0*>Lyfy309dbry;FomKM zbt=U#_#YBecNNwhwQtMhI zI+mJVEt$`I&c8f`7H{bT4d4AR)ga^Jj+qT(3Q;3nx&|A9xBg_8wc2fcoR`(|fdbmk z+P_J_WgE4u1IvOceM%&;nosMD1qn%eer$BS?C%YX0Hr%X^3SIgScl2O?H`9WX52dmGxA zmPgBG-bd=Z!v-8En4dejKtDxe=A6Qu#F5p|%3I`FviN&`D_<7}UV$c@zRK; zyyBd<{loRM(ZwMqkX|SG+I4V?z7+vg_=P{kgGdAcihXIaDa{_^O;kdvjFXp|H!~^< ziJF`DT;)xUg?TT#8soI~YzQ8QkqXk-5jwfCSB8turqjP8kVmC*e-%iSQSqVi^R>6| zygmGo9)e1U_u@>%kUX5VgY(;%UL#oG9tF$J-Og`cF#!tnhdRBnps`Ijjt@m>}-16d6)t6x*szBAB+OrsyfzRz%gOI^^X_IW)L3rOR8O*Y@B zhkc&z_4-7Rpp0a-oO?@?GCd4-?WbXx z=|e8(cLQh3&&5lQ&Tz#a1VVm#0)Kjuu(oTI2bJnAz`x)pX!d9-;seEL7oWtyrv>|;L(0%xfjYaTL>EfY(t z8u-f^1Wd$q#dkh)Q5rU3-iRyY*pFdlFZ}i0)Vs)>DtE<>D#l7yxn`nDw{Lz?P|8JH zz70^BToLwCdjaOiCDVS(*XZK4)Pq-XjG@Df2_t}3i@_XWO6!w|)8lgPEU>RKO_C~z zmpIKuh*_Pk|tF{)nZ%l~5(+&{MlVi1wd(BJ!-z<>#Hh zUPk2=o?M2&k>3gB-tV)tQwt8Kb<+zd^r`|)`5d>tX}uo8@$D3!*u$l&O@_JCV#}Bo z#SCM788}hmX862LN{%6E*F{G?`}0p9CAqHm^&YS5`C89sP4@!o!|}+9N?LgJ zG)rf|F{`Q!!&;T3^it1!KAinGkhT>-2*2-X+HX(D28rIshl7_Bz))XiX`kCUfR&45 zzM=IggVHK~w8^>v>1?zH9N9u1ukZTP?-UZjI%A0_s+s<__{7NCnjIl;_9T`<27 zH%h@ssyXlbzKoa4=qGjk#p zYl}J)<>hoFsLORw?(D*fd{@FC$HoX-xcp+7#$X=$>Me@)A*kb(9HwuMJB_(JoPIMv z`{eSJXo0aPVtc#x?Y>>gWY76>HOwmbN%zMmsO-L#d)kyj>BY*CqHv*aU_dr5;(~4t zbg(3c7{00H)bl|GuL1;J1iK=>!?9D+C*mT(BKxKfqmTFnXg9};sEqd8zkG#7nnJ(m z4&(FQ*J1+@13ZrK(#I4p9IUd}VW}V5D<5y;1Zi{uD9cVn;u`Qm8Qn^P$9qH5^F6P{ zM2-X>ZRyJJiT`FUa6GDH!K=7s>1oCmSzNyZSLq%uQ8lT99*gSn9cl6>osO0GK@brf zuX@4Q z;y(pfLxFV3ehz9=PYV_2K@96BdU+Z7M`_+3wDf0a!iRW`5`pfm#M3*wP3UZF)k>$% z)VqB8?U`YcWK!M2^lA(Qy}xZ=#pkxy?Q(4+p5Xyb(4*S9r3n8MUuF@|(^;7C#thHP z$B<`mowIsE*8$#Q5E8vj5@$Eo0mi|g}9I0 z1b0W#W4G*w>lEUzr=A0%aa=nq`~QRX!1dt7em-@8Am7O3SnYezs2s;SAy7_B(M}!n zR_0an_qMV33D9j_sk8zl8cd(2Z3^EMqNQ4mNCQOP4K)j0x^c_^X=gqF;8 z1KQ1$0UC}Sz}3#`WhuZpymI1qPYi8=Ff6X`MZFTVJ9Q(GfpC$Kxk78(yw-FG?Edsf zzlVzshsgl)kfZy^2Cggz2Y=UcKtLUH4hkb!f3uc_BBO4NT)fo_ETFeDM$gyz}FZ_X4@0k$JCy9S(>^pgW!2SSlfZTU_XL5n=eJtg0aweTd zGHgTm`h)ts@aC}cL#Br*Q8Q=R!Y34}m<|KSiQ1W+5pH4dBR@PS40R|2`szuBf{9W& zq>i-5sBeW+fVp{$KMV@GboVZyD@N2WPeG4cI!ZiG@RIbX`w`@b?v==BnTt3(Rh;~z zl#=1+CHhTDrvQb55@IdRsXUHkv9#H$dPvck;kvSARA>2iQ#vqG%Y_*Tw1JD9#_V1& z2EKn@Gm=hQcO86tJn}dHHi8$s_6uSb`$p*NR1%U+9F%t!`?If}+caUTd^P3h#9_`FRKwYuL9hnb#k*GpFt}v5XQSPuI z{>;2|tCTYn>OY=zT$$?;T|6I_YkR%IUAdRkV-@hqen{_n&0>R_pHmPBe6qPaLCrWR zFCdR1D&lw$+A~0#CmQu?#Lyr_Rl*H-n)hMSB#muf+m$CY5V5<3Zp9l_O)S%X^NI)b@bY|7U->cDrEr@#`1%XMN&3N~L4u+7XL zaWlS2!9G$3`8I{JUOr6m+RH5nC;PbyC9OpsHi_ll-B! zlejILb*nU1AK&}f!)Dnwe5}04tlW9@Qr1EVs%t_8B)H~yu;O+v&=pbYli|q%@lXwH zof=w>>d&1&zHUe*f_pU!X_kzA){k?|^j*qS62d>ce7$6C$n zp{HX*b&HO=HoOsBn>tCo7sB%F)93x1JvJJi5S`42Qmj`xUk$aAnliLG#s=y=D(_Qr zHx^HFzf6=}$ym-3J|2qch`b$g(Wk)E*A!bAgYq|-m4T?!02}uJ1!U4zI94BrMG8_0 zs_)4CWS`HMjZiTPbVP$BUG+nz1MFp9Ng#>yek&VLj86&kqV_MHTOoNKvq9wxZDEE+|I`3=?M5lv3;H41z_tB?Lo zA`mB(<*Z!SK{uD+Kl7^D8quGYb;^1l)6-}FTz0?*uY-^pI&Ab>2yM0&>k6A&ne1On zOM*Uo7MOf{lW1{fBA8{6bHW!ZxJ?Fk!r3a?xvjrK0m-)3kn#L=BkRp_OYj?$M-x0* zMcfC}J!|+ce=Lau`ZxptMp%HaS{T^(Eno^h2tw^28l14KT`uT>+e{>$ zbtX>SUsKq0?c5a#OUh99z|AAP&u4Eh`lu7Z* zwHK8JGmaSh$1Zm9s@fYD%YZDt12a2VOPnyj2Fa^FKa*4l=#* zmgi@vN|kF(oq>gKsx#P?-SvwjoM!{JNj=U^SPh8AO1x)&1_%wt*Zh%mX});~H6%93 z-!E=*TKY=iu>lV8r$W$Nb)Oo!k3*iEQu$<@7RR-oRbyC*rE0(~q?IdzdChumTuIY+ z!h2!M=;%G$NiNz}jbsZ3ie=er5^-Xpd!|A;gZc;6vB}Jvv@Qj@5)im9*t1g{ z5A?EZ*P8k*erIpp#R)Z^*8(l_7pPqAF$-|b-!^zWx+%euGvWw9vz{(qv1|80{*Auz zWoL^+kUk;~u)S8iPyh2y-_{jB>*);Cx_dIe{RVx+^!N)1EC+s!Dk{+nl#CezDw~+@ z9oQit+QE6i4YoZxnYS8>XZ z71ql`e9Tre=m}59x2&7)PICcDad!aP4xRaS>_Ro363uA$aB_8w79EI)V5#YvTz+X2 z!sAzD_Wd;5tXKxl=DTP?q_#*hqg6B;J7fPkEnREP^x``ZT4fM-g6W;+&fNY9OxO7V z%%N5MNk%Kut^9*p{GY@yK}Ql_$bB)2qH(&<#qG+?t}YwzODDSXC({?! z4l{i_w==*Ue`PU5vSlK`$3uN_J}j4h(?=wGHE5Yym17aq_J&N3g7f>%a$E!ev&!_xCz zcO*4$L*3$ZYw9vL7av8Q;!9C0hI-UiLs9%{&SqmLRf#WXcWXyqcpPp{HUK)ZizL_P zJsHwRXL}x&wJe!9`PLt{RJ7Iab=5c?m0vl+^K7#V>bN}Q-f76S@+A1y3rmbgHk^hzp};LtpZ_>96WxAUCoXHWP4#p5NVc1J^mrh<4`wB#3PQm$Hb1xHctByC@)Wr zg@G<5cU}c8N6ioF*R*G2@$tQ#6wcOcaU&OQ;J;L<13qx(F!h3hExF2Z7~IRlrD}cn zwj3#1-rIXWp%} z&9yjgx05)zbFJtTx64MXd)+8M@v+%_F;a^TcI*agM=edccS-M zteMX@^=49xX%2bK#>Qa7-n-fm>b%DvnOQQ&e7eCv*41N3au%wt(tp1e>QxOSVqdNx zz6Sh@Z5Sd`Z~U%r##B0pfg>lB9uYNjgg3&+!jYWtqIgjOku~zfP;jr$qUfV z<+YIgq34XErd>c-2nC3LAH~%&@_GXrC)W{iq@|u9`n(l7wm#}o9vlfG-Y0vF6Ri%$ z6%N_LoV#2x(N`VU4L628hQTd=E~NDWM_mU7yX7$#l|QywC>@!MS~G?Q9b6RW&JUp9 z@$e^?SvdJ_)xjc!pHsQh_*EgIf@l+IF}3?OeA3MWvlS1&5oshhTAWHcP{g>?w6skT zze9Ka?=0KJTK20X*L978(+2ig_$H6x;wGrul@UAa-fWlE>`?!s;m#(aeez)fzPA$r0R6*e4mqSokDXOavkTG6VQkQP96Ks zsr!?C7+|gBbQaMRr{sF{iOZH|wCBXvX++jc(Hb*Le9!6;>$wpgIk! z@veiVOdMLHg;j^f6MF;mBxL8#iD4aBag0|jeq$~b3OsJe$P>UrvseIn)+m{~Vc^Xr zncTIdC-tct@b^8{Gqk5v|6K_FUPKSPsXVC`^=dS1igRqea+Od6QIONCD=dYjyOKBs z6q<* zykTXi2bM9_)i50K?v`p4H;_`F4=!N_{^q^jB3Zg{l2<3NN7LTE+`>Rp${>AbJ;QC+b_t?fr!$vPI&8YJp-FV#yv5o z&a|goW8AXXnvwBcv&9xPxy%l^eEaURlJa$(6}$ZPLZ>zPmRF#+TOu^S+e;(2;4>gZ z?>KBp(&$@Huk-Hnh)LJP5HT(R`IKd?wiL!Z%~o`dlt+qYKiNWha<#P?h#E89nsXMm ze#D@8ax6IX>Ps+YkQgrKis5R9l8%8>El6JR`3tFJ@Zwd5Kd4qXVL=xCn%lQ=(j8$; zPPbE{1+{eO7u|9}G1A}~{1IpiRifL`BLjE06olWcR~XZVr5E8&ku0n;A6IzfsoeEq zPzz+OTR{Le4pkxI?!WEG(bzxEWRr3i=B z{bB)SI6~BDdDHc$ql?HlE>gZ~^R+Ju=FO~I5m?bvYm;k3Zp{v(_p%wcR`42xY!}m1 z+5CVi1O8-Bt~Cv1MUI|qC`!Y3ro+|wsIG~$hGDR5J1}#+J;JdjDS;duK#x*49;<~3 zNEpSr0krB*Jr4doHvdW#W90;?jTTiqQTX`FrIo@qRX(4V?8jRZgy~VVi=Kl+t-+@U z&)?Xj_#ayeKI3}N;HcjD z^i^Xu2!fcAPiTJYfbH=Z@B?UW_N5p@FImN^hyTLDiIY`bCwUt-fiQaCnVlEDFKwLu zOvpLm9NgF9^6PFsFQVpjk{wONb~iJX6ydv?U_!AwU;#I|_Xms69S360Z45JB1CVn& zT*Pq^e@+b<7pOZEZ$0>7l8DiPUq0NGzyKP6nUb#op*h~}X{;7b2GqRZrp7t81(<^EI z=;+7S-M!Z?vjq-$Bv;s7ecwc_^K^>>F8c1!o@0Ni!!QAH!Ro(~#b_WwXcSrdz%9w} zF_1MB^M1jDdZJjh6pD#XPL?}v&w$*udV}46JTLs#tu3q1g?8dq`fWZ$+9x4L4NrRV8T;;7_#F*r_1<43WFh>1Kr_@W-l2QT#cP#IdMe^Gk-u_p1jE={$csU?69+ zyxp6B?QdF{9o;CbrGKUDzq+`A`Chm#yZxAYyh|9VXu z2x*eEhxjayUw0p zWXDKmMc5yJ0?K7D@R!#+ZLx|E|Ln?T0hZ_3@zw!J!qP^Y@X%Gh{r7jl{%9W1|M$mt z0=>X4&@fw!<7+&Z*&jM0a{Y(#>AB3+o2DqioNyN0yyiZLjohINyP3PKv-SD{Y)0tE zRzZ1{goHkE1y9&pQVE->#)mk9tV+I&6Tc7ahI7#av(e8+ogPD$H)uG)zNLJ?2&;{+ z8TYyXO&m}Ua(+L?zO=B{A*w}5(UC=Q9MKL#=0IqgNmHY~_Oe%i0rDB^ zerojO546otC?|FD)5p3l9@wx(O}M`m=FyCHSD61jSV1qOje7A5UTEkwOnG)Q@@pDA zFTf3|ISZ{I`4WUMrQUj~$H=ZLt{88(=6;*4#o;OY;q8uQ-MhaIa3x6c)mXjftbtL# zn0tPZec9`!;A2{;dFpd|6u1-0XDi+beA=coY$cCf=>77LILp(s>xggk%o3RkDHBd% zQ6K$@8h5(>a8k^0O3%o{S}wuY2GEOec^6~orhCn{c;G#|oh;g)mHe|RKq3E;mEPS1 zb;@urue=CHTpLH48`bFam^B$hT&r!SX`3ssNp#+<9a_RfHc6Iw*hr)d(DzbCNWK%3@3~?gi>-pKATq%PstqO5h`g zxry$TaATjqMxDr2QjOF^{-NRdXQVoj+kjG9^Bk7GAXbV7N&eu04VEZQ>N=A@3`x+w zcy!cz!dw{yQkgm~KCZ9xCAb^xfLs4My4pl)5Y!bH_VnOhbU5C8q72+iobbLMA1xg!?f9uN)y`j<9WG76Z!*r6_i#QIbbL;>5|>QJLdak z0qN1JKptRIWz9`mx=T|O$8A4tFB&Z`zGG83a`k3OZ z&%o4A-}8iou^J6wFvtsrLyvM6Uhyh#cOreU{Viuz2gtEhdLy>wSVUhR@@^NzwB;Fl z9l+#rw&ofLKALVF>@mLlpdr3+riG|i6Tt79q6avS^sC9a;iw4} z?!6A;LD%gUsm3^oN}mO=n;^ez(_#N}^#JkI4PDUAdC8MKGX6CnaK z4qX1duWGR7D-ZAoP_y8QNhfk+28p!wKW{OB=!HSs)(H5fM&66L2F&r>g8#O7|KbeZ z-mpStf46{%#SU)qF0uZ7^!_Bg{*~HSbNkxue_y-GVCK^vc9wsBX*;m@0QZki*!C5e z{2kx?PixXI2W5x8SA$nYJ3@vZ*2!3(YXtOHgHm1B}f6 z5P%wf;C{$HPKP6|kGEMmkFAW;7t!%;pFyZQe`au<)VO#RjZ@_We=JzM;{!(W3X(@jaI zYTY_*t@I1q-^=KCR!%p9%P`OiIFqY08e;fT?)6uf9>P3&rK>Q$iU#`b zd>srOBHm&U%wXO$Il_}Op+mAtl6UTi6JWX;!OTOe#YjmJeVenxB{MjQ45zo-W0BtB zZ~PC?{+}E_U4wTG&%Vm>FE>PX-yKslaOZ;i%~`LxX%&CZh5OZ*)ZcH6SgzloTB$-4 zL$nw(o;GpU0qmrSkruOMJI8_63E$*YnVo>_mT7+KG? z5(a_$zXMW_z(0Uu#Li(r_VX|DKbi29U#;%nw}*@13W6D>dG`U`z*gNVe>}SPmT>;{ zO+4l24NnlK$B>*MX9{muD1XzV8Dv*7HXPzey&|V-x*j6KGq3h4#Yg;n%)`Gurff$0 zL{u+3WP$YQ#Oay&$SYThKdYMdy9lw~iVh*=z0NG%=P$pv`5_eqN)jO0_$z!4sS$@! zOIPW)Hn-@X618tn>)=Z4e=gds-xtllGU|VkrI8l=tjggdF!cU3o7uwTczk)O2t>E@ zUE3gQp0iQkA->wHFZ>@iOtuGc=qXxyOQ)@hQ=+cW@GA$3-n-W4f>XGCUtJBJ@D}9- z0+LMbKt;$ea|q&J?BJxO-(Cx&GgcRRv@V?#cDiTe=O_()ZkFe_k0)fbH+iKVXL(Tm zvxs}oepX*;J;G7}0QH`p|C_jVCtLX6rA(gEHAni|TLF3`CZ@XQJBa50G+6)OL%PR2 zu%ycq|HgSZ9hm|J?tKlrQ(*NEL-?u~i%%HQlPT$4$SyVEX2r8A$q3(Gvo%Ie3Etcu zFx!q(@DC#?Z}jeR!JQW+Z|>I=YSl|tsd34=hvLp2vi-Sm@6>jDmz_k$AFWT@62n;% z_Fl*;6o|b&&4U5G*b6V`;tO?Xet$;a%tJ5~Vr1G$H>mm~XT(o<`tY8HMofALu66ji zb$fFGW;W1ZHWLZ-_(Wqkl9!?p8m4+CxXW2MgC%Zq36RA36u1MRf8lN#v*IM~VcwMf zs>)IEmB0Q@Ht%H{(1gwP>!&Kq_ase7ZhAhpHbBQbBux)VmQ$U47UUmiXx|W40uu5- zQLOim7Z;&zB92kg@}1^jTQ(vOuo%}+JG1zo?$)Pj)wy7)#DkWsSKa>(0sjH+ zPUGWR2k#vB3@kD~6f7C^IchKsfeRAxjN$(=<#PS*R;uLqScV-a!YGKhlfH3}X!K<* zelaS_FzOPY7f^b4VjkoYHuFs$K=!~YU&HQHocu2;Fz$fdi>bdb_mD%HIse6eue1wN z!P`Yufe1~s1g-rO$zb!;koV2LY;X)>B4|j)w^ep#uny!0EL=tmrKkL zL~J4QR5X{}G!mYA+6GFB0LE4yD0x}9TxPGc3o z2EBZF5(w42xE|GTjNADOf#i1HdiMq8tG>QcVy?jX|BrVLfZPAe_dpKi+qA-8$@}`O zp81wI!loO<*K+mPf;ntG-eeG9r5bidS1Fqgf$LcJBq)MK zFV1!&mGEkhkv{mfmF;b^v|}azM@bph-9O?42nOmw`;ruH+*A!NFFGWai8i@s#qT?= zGh|sVE{3bPuNLY<%YLS=G^*gCs^Zw|Ddl-$chXbA#V!{+rOAT?!|UNvoGbNCx}C$@ zKse`bApEyo|0(KYgBpgB8f06JAip5Rn7zNL!xOs1DepviYp!4;Ew;#<8+FU4519`a zXNy`b^ZA0F-ctj;x`Ej9`l|uT^5t=dbCt@>rn@n;t4>@egdwz#)y9+d3U<$MXL$Ap z@og7_2>rJk|91_UZ@Xc)?^!t$;^GSrAAU9TjpFg6u<;e8@UYrpWDb-wLWkeXZ#t|h zS%~IR)KThs9D$Gen5zdUj{~=H`J3Hg$GHFLC|whd8THXQu-l;<@MGQtv&+ccYN=W^ICQQ+b(C+~lP|uGV=)Fv+rbX4A0nODX`41(}Ny>>sCTHzChe;DY53vv; zz*JFUxa0Ny2d@3^Dl!U4%=cZ|enFul&T6j|cBzfIa=aACGYjoVblx5D#Fs<+IEnjX zvnei&PV|)ha$)Y=NKU=k`F`7RxmOrz5Nd#sVfInp?LB&eUuR=rdjv_p`Xzv7<1d98 z6?lc?Vsan^-~dgWzWG}q0Ep1eb{=~HL}-8d<6vqLKzCKQyBUy<+}^xi|LqY0=A76r z3(9r*u}lW4j>>p5Rlx4A!q~ev_NL#F+h;Qc?tB_Z<~Jx(H8^@S;IxW>=79Xb)nv8e z&q9tbMAfy!JBXm?GtD>23Dy_h?U6k!G4?h5nY3p(`+k^-FJU@tWnyeEh9^=U&$J&i z(CJo_mtT{Po6E_ovCFZ`_q2r17B0AZ8H4&+D$Izk3B7(2$7!fntHo zCZrZi)9i;In<;jvv6r5)_@dN{ss8!>Qxx@i!xEZ5#!ijFx7c^xf26pJ1tK8WbRbYk zjY})~Jsl#f2J6^=Wxqty8HI<`IHppxp4d_B zUt2{L;6dTJ?@!KCGc%dvVwe-Wl#`Wg@t6+UIh{)?l`6HlYxYC=}fsw9w$PpJANUpcZ*bCXI+T;J0DvZVW)j9O8mvcd>m*3{2pB>?WeK-I>}l>04V7E@}A>H;DjF`aC^sr`!mpts&4 zkP|~21k+9Fsgh`8nrcbb|$n~+7$G-Tgeg>@VTsB&a@JacNNJM??ZFmE+h7lHQ|a? zRu(FrbX5-u@fGGrL76{Td;oSX75=fD{+zS~wsuYpQi*DZwtelq1;vjvk&7)g`{}03 z$_4FE%@0FegZP&u-@3>-g%swEZa0B0lcDAf`4sBf_3vlbuvrW899vrzuqfYkRCfbj z8wG1yphiLyYha>`q=)_%VSVgBcD9EQ8A!8R1G~e69pZ^-CV!CLlQ740-lt#ZYHU(~ zvV%gqNfzaSHAa2l&39-?&D zh(Qce>?)k7nec?$rrC~lO;nD$Y$sYp%m&?yE{}A`9N09eKi^~>jNk&_pDRY`>1XGVAW$q=92bt^h#Z@++ysL^j z)Y{Y*kFd_f*UNl>%%q8<#<*J&!0SXw?Y862jw7(JcyZ?*tpG;C=9=VPf4>jq?ZYze ze(WLub=^onW6XU;ACNAMEvcp%sm}l*f5^lx!uv2R+8k`QTQ2Sn-D`!VtZicaSVSx3 zS@K_F1o2*8tRs&ue*jeHKjcB~u1x5N2T$tr9_p%FE}P+CVj9|>^-F3=b4$;Y{I3jd zDOw+H6Fb>jeiiF{TudO6fnTyPk983>ucz~#AV(yl{OJv@=6&!5z$ zt$23zNx`mHn`TdYT%!0SL6gmF-@BV(=w|E5@#e5qnxoh(n!m(&DdD?9nMZF_+kUnl z?1eH;Y@?v1K8{>0!=N-bBfChAUu{rbh2nLWygP$114{a(ox1mV4@|(a+}ft7KA-Es zm8>6@Xonfxrj-Hj9tfYiaN+9dDdPj-4qxw7!}A@IAa(2f;z8VzwX)_L)1Y7-7e%S9 zv7{v#vgjS!q#&hs?&Agt!Y`%pCPgs}Z>qmma>%XiJ%7&Sni}uO+$nwwqL#x$MY49k z<1VJ)X24V=(`sZHIjc?wd$xR^lr6hLy2V%Z9r>hqzrRmizh?WuXP4*j%&n;4X@p@bKO+mkWW*p8wGRwdTf+=qw;@H^P%rf==4jCF1nkc_q@zSgb~8(Ep1b@sd?^Z zczV8jZT3X9Ms+SsrXISD;eyJ67UjZpxy zS)OtHW~U)JgdDJ$(9pzQr^KVM`l{G%E2~2}tellIp6gn>imjWJN|Ga3pD1x?nh^~V zTF~vgoo=8lzpgG~P9)$i<#diZ z_xO;({Oc>ePm0&aU|CJ~yDu2HXkK~0_wLSe6*>y94TOd?fO!LSD!2NOy%x(|@PZIY ze!11;N1F)&sCt69^Cs~TAm4pOC-%>w0d3r6yfU)LEJpJC+BC|SM;{r-;ilP8VX0^q z=+NBFzc}N=NlB|ak!?56aDZ8G%2PL%=*pwn6^p2=j}|>!iQ}-W9D8BI zI^Xkr8XYL>!}o&zIw;7ZjP`T-Bgg1-C?smw)wAq| z7DmNt0t52ZrGP&IqpCY06aD#C$UO9GPYn9IXSlv3n*G8Ec%<)bV6#x>pr(QVE~k)u z!cs>%(19;uD?z@=BOK{LshqF4RKw5oRM}3raW0QS-k8E>#OPtY4uvzAx2C)#ig#0^ zJn$`D0~dH&zwm4IZI(R#qzWu%^!8#Z0CT0{<0`j4)&>yk-02^s3yp7b4$*hTvR;aw z*mVPFSaZ5rvfMQ}9ew8J=k;?O(Eu?}^1UmuAE%H}NbBl(pQq8z)>Qww$!xW_xW3zU zWp=BKT~7_0{)KJ;%rjGR3_TBCWY94I=gc3wZ*@aHh*eL68jZc`mABeL4|M zfvpci>te_6Jkg~sMt`Rqo(B)~ukutl2={ov1Z(Q}qTla%Gmko7AdAG;+bFMfRSYZ4 zi^reR-Nl55Y$M9X`+pr|U}s3Jxah;AY8m-(5jLBNqODa-!yi|-?&#<5 ztBF3BONJHITh-oZNHSd*2Ddqb+YHY8pd*1e9n16WU>!@yUrXAblF^PR72K0Xu9_{~zrojjFCP0TIypN9MnwFCiBPVd>1HV53KHJN zp3ag2f}L|>6mKSv$d8b-`ejAwUaaeZzq~JR^0H%6V#d{FHeMd!PQheprtPi)sCg}W zX0&78#*9r6M&*pDuBbG!J41ej!qnIB7Y=uO%+B;pC0O$PL`Hk=>?J_}#n~a#^8g)> zg}_4FntnQ4(jiVqa`VTbC_w5fn4@t9hWm73$MDEk9blT}SL3?VU860Nf2RHJ$u5az zWRwd4Fa}Qxp;Q9A+Vs|NvvivQLs{?6=T%;NW$>(Lj1g@9ksafQaA0~ ziVu34Gr0_UNhzDSso$Il6}LE^UISf0 za3Oi)5q$~)w%l{1yC105AJStY`=3avEHQ)8$Vo^RHD(Fa)}`eE>ZdTn=TIQ3pEEeJ z{|#e_=b!IKem{mU;K0n^2Iej^qn+fb{4FZ|CSD@7)Eb2zqUW6pi8b zB5dvtK|ttc@DCg3*WZOlEl<6>p#Z3YqPtiwK-@&4$R+~K3yI_)@Ys2}&SX*S9@jTjNp=My6-k`oYQOaBo7qXs%LhFmZAPF;c zbrqqoKKY7wL z%y4dhw@hqkpM^uJTG9su)kf6gz6|Q5g~dJRsz(^22MtG^_xk?6q9C6`8C19lr^ZZA zh7AuQidMITvdRf=U3IhcNT^GheO>4YvPD5X%H%u@ebWzoXKRR~HquzMqHvS8+2w?; zFJcU@_-Ic|3vm?Yl(%OR+UaBi_M4d=`XT2wtId!u-2tufAHN`x%KP8#7;3K8o6!P9 zao{LzqJ3`dKXHkl716G!ch@JUefQ`EDF!e&b;QeGazO19lz>*WEm!O7i(6?4Uxy8{ zmp7`=1$y!!)VU zsC<90z9kOPNuc^sIhOF9{f6IHPk}Jvo1WrNc(DQHmu(#TWRZ&vT`ieJFMn(@mbYR9 zcT8?}$3D|ew)!zzV66OgYqgI)^TH1%_^lutWKq=KiOHF2eCea+X6}X)UdCXU(p$sS z@KoB$COU#LH0^RSwcr*XWT4KaF`Z@1wcGT&d^;yV-YtA#HVmyomIiHy=rX*Uj@FBf> zva%o(VbdL-PFKNNa4K9i1Ej*5RsXUl7@g)lLAF)%zJ>$1iXduHvCDZZzRE)ebBZSF z4g*wEB8@AY9SbMz5D2u25HGyM7gati+e=jV-ftkyTYVg1w}^XR?-9g+3MEg^kVLMv z{&gTQQ5o&Z?AW7XwUeBUe}PoyasEiZ+>Oe`yfdxb4O}km`^9^xdB+g5^**PMsgOD! zHE~aVZhPWiMy(0C3K%(RQU=T0nLgK*dP_UBA`ivsE2i@Se#09pJDH(N>EwRuy#u7G zgC)r-kL9+eaWF-5QWG}cw~GMJ{R@c>jwAb!7VB00A$S*GAV9R)tQPCm8PK?;XqvaH zeQ+r}Safn%yL|dfK0{;F+Dz(r46%RH;5-T(Eim^3z%@Bl%9S@Q>bR{I&oxw!j(C9?Li2IQOTHmkQ{k-KVKFBD}d#co<|ObvFAy+8G-cBOQ=Vxy!7lZ@643lRgpEbtM< z^>5g5s&$z0wU8)IR&n1Tjz?!rMu~}djCY`Tu0Fw=HTt7f!1wgMg^#gY*zQSQpj!Zn zHK<$B0uLEd|AG~L05OmI`UYWq0$z)ddmUP{(1$$~rSb-4oedF|;!5*78=$Eh02}8O zZz;~c9Q%-W1~5JZm+j7_%RGNQlqK+Auut1zwWQm<;$-Z=%YZr99R10sJ0sYYjhO&` zi}PC1l-K{lI@@r6W3sK2J%o*6T3IzkZB}J1uyEHqe}#K9bWOGp6n)FAF&(>=*I9(3jWkUQYDKd>{?{{)0^1k3 z$B_TOew&s7gfH(fBxCPadN%YmYYd#MsOTAXSJ)hnxxY5=5=h{e0qchzEV?vWE<-AvFZm;cKA;|({TrnWMzTMpS!3ipmfVd z3teQv{b{Ti*(s#QJ=|q`O0^E0cw-=MN$TZA$@hDHe_ixB%E)mcD~850B)(*{civhV zyRUR|uyXFpMq9%^(#jupabb&-XEcPme|0$d3VykZ&) zgsdI8x3^6;(j}yWLh2~4>)Dd8heiER3u&o=n2HsPuO$uuqkEKfYAc)% z)}Pf<^Elc=uikn8xiz)dwoi^@`7fC%V;Ab}zex@D%~!2aAGA!)gxodr`T(zTGsC61 znY-SUzGPZ|_etHLHAme{VTx_nZGZ6zT>An2wk4EnS^syM|E@7BiC>U4{y3@;LXog- z`DDFfVC&c8q%5^^+IDMT6PL(pa~_}W+wLxWtOBQ&G?VFrR)jdL5TH?^@Ao9kr%Lq# zy*!Mrc%1{XYt3qb4Np(|j{3a&qi&Co_o7eIIz4l)8cnsXw&>L?F~*xNC&xf9Dcb=V zg0q{B9biNHP=a?yi(?|SnpVZJh}x**RQkF}?uRqeSd|Xy$!QWt~v$8_Cos z3mpcwK5q33>-beSgiF6==;-)m-n8&?3oD>_VdktKEpev7-{T0XDi_Sk)Vx%B^S~AL z6@`l*aF?9hYz|&2ZAaXlK;H^soAftwS;{2-AbTm{EXBa)AhhEm#i!T9n4^&Y>7KS< zfPX>T0_T=~u*lkyY3Km~{K?jK7d1iO&I&e&?F^RdcI78NZ2b@QjlpYKri>|zQ$#o8 zJ;_@m92NEkS1$SJ&Uxc8tB}0AgMDwNTzd^3loMnl5G5WccPB@@XHlsi!ewF_uYzm4 z+eFsv>Ln8M@Oh%9Doh9Be{o;#MKvtBY9+I1^(n?C`TOUMUN{Df<`U;X!l_}KX8tgu zO)e~5*KZfBJT0~5k*$N$L9MHu1p#T0V97zIbBHO#OjJI2$=){`r6^bh`;3TBa}!U9 z;x~&H$Nqj(Bv^~ zKLpEZw`7Cp1r}~hwrb3eYoR|ul->Gr zCRYWUQ?WcO%j4}*x!eY4Nf`CC-S{kpg)W-BSI9_7T_=JlV4m~1_o4H|^0!8MdPey% z-za*kQ@{8SJS-uV)oOkolEBq!ba-hf6!wN;8Z4Q0 z>!Vl$s4-g0tubVQzLk3X12a*5GK@I4kI}Nm8K2JLnk?huwp9pXDjw1uxT>Q;O_A$0veT3JZor51rfX$Kd82Us!m|b?*U#si} z5VevlDFQAF?q6H51+JL^ydc@~=2L}M(9e38Y+6QL_cHlg?*vKkQ}j1Ei-#EN%h*6i z6mh27;k2O#5TLr{QnNmg->A7LS7VYX!1w4%V`%CiTG(hwG%0|zo;xRg=8}@9C-x@k zHcOdTZg>J_D6emmI!?|)zfX@D$)MN=Z|mmQr~6vfkDmKFG>0U zg4ta0AtpKKFJTUaD%ir85=sIU#Xw*WCh+jW+)X})IdAqp>P>ZFXFQ&G1_WWG1HX=5 zFyt{eQV8Ze*DEev7;=vI$9eydmi79eu983>xgVm2%Al<_ZL|JQ~V#a==kEvjCNYVb-A$Tg9?%X-EWFhE-k^cA$< zt&q!cK7UAU9xN{Mh;$xwpe7d2mH<+`IEMi8E#pm28i)fGKj%N_wz(n6B&Ylfcu}Z= z1N?jFZSbN3TdA`BSSP7szKiMP(ckb(mp_%VjbF}ry&VxPNdUr3Pw)SN=R6)Ww&T0g zA&k@J#cM;I&Xu@m+t9l0$ze(PiNVmr1~dAMb^S0-2SMI&Af~zVirEe~C33f#Kl;3{ ziMb-0P2(S_p|={_uj`12VhL{{FFMhg;1tn!yUjQtxmW3p4Y*>Fz1SVF=*2V^`|CBFjZtRB zr}jDpb||OqJ=yw}Z5!}>X^fr6QyZFZ2_?hLjMS1K!Lm%Boj>TlU+NWr?nl`BgBu0MZni9OXg(yG4e;C zF6$GD>58MHsWV+Y9*Cu~RlMi|+=d!Yvm~TaQl-N71CX5Q)9xMo>+xyhGZ`fWq=We& z!ewS<%$pxF+HD3d^Q!9Z-`%rImDD3w=e744W z(H^UtZ)xW4>zW|CV(v!0=#yHA%~wXa#drabU#RQXctuUGa%>VC`|9V$bv!AI0fa^; z6d%q6p90cIRpaV{n3*|}dX&kP*tt{BbuAkuyDa?Lzh?T!i-UYvH{Ck?Ek?>`Jr+kd z$Zeu4HTP!%a@u7ZNbD(8CMJzvqc^~_gi%CTA(^{0hMfK|;A?H~Q?646lQYlgDh&%8 z6?!V@h8{T9#v*b)>SM_HvVJ)fe`{})BX_Ilklo5=Bb0?^oyH{^g5R*aK3f?QQ@td{YHH zhwRAc6Xi{^Ei714NZDu`TldreC*kEzDgmsPB$WO{beOiRw=p`24%>Ff9|Ac-XF`WT zcDb&ru;Iyj?RDn_VC}<_-HLh>9{ostzA`GXHonarBppa7&hoLa6f%Mr?pDg$15IIj z<;hS;FlMkN6=B&8+07T3&9Kh(Y}?_-@4Gr1JeZgcMDE<1UoB}#WfMN0<(0-MRylcM zJX)N7cVos2W$HKV$Ip(tA_SQn{iCQdf4#ESp(-9d>R}>hJx5#s@nUM?@A}pIq^n~? zWGy-B?_xow`r`=1bj*@^{c!5|E7?dsUlQ65|3+Yr3D{-TejAsIs$ZkN1kvaEAGW+b zYpQP{bu*FM$EipmmP^D1ww^fm`2TC~&BK~Lv-e>-oz|Hu(vAx%LhQKU1}IceAc?ID zRZ!dz*%B$60wGX9)(~3-swgO{$dU@85`-vA!j`0h5RoMULWB@f_9cW6$iDub;4)~P z?{D7kyzd|Hb@jUXM;qXG>qhZ{o?Mhxcy<& z=HP$&Z=~vZpAeK}RNZMgw+#Qaog)0x)mrP`-gR8svC-Uk^xt*+`3VDq@d$&Z`qJ1L z9UB;^kP|%-DwKI8xe)b=b@oDUEpro0uzEC-pKy?)7GLgr1ykLRDy9P?@(Z%SR@nC`ugDsi{ zVfbu4xzE0;qFEfEM>URQY-FB_De(qO<1qn+@3(ac z47M|}MWBCRj>#Zn^CnT-$wgi#h$eH))6TF+j4fI3aPr+wtA!T+&g9HM{lI;=^1N~^ zbg36i^xK`l@h2Ha7MT{5RE}^5_%!NCSDTo2xKdI&NjbObxQ^D~VuhZqVmdiQ*|o#N zI(wA~QYCp9p2`0$Ur~vle2jv0?P7w+&agLeIEYV7M09$7e^MK_)VQ31rMssQHg};IS9J&rE z0h$E>96x2VQb#`qQ#m{?$!|XF7CvVZuhTE<4rKG`y4_|q$Kb|m)-Lal-Klr5MQ8C< zaTn(o1{`k?&|(5NaJ4hgH9@YazLo{`Ic@&%RurWpxD|C$5ejlZ7p|$Ym*gL2GAc?Q z49-gDMw<_iip!(t#$+rjspZB)mf;`iRs;t?FqV-DQ6S$D;iB;yE^v64X}D*=Z>Sz; zpQ`+w4NJWOAKX@r?zwYdw$j%vAsv!Nj@nr0T!Px%DRK=aY*AK6>K+y*-fB|g0NPDJ zPjgC`L(D<0-{IWg_E{rrK-3t3d=@=W+zpuJnFA&~pdie9<#?q;QhLZ%$BQCJ?}{@O zV%n{akH&q{PP*^|ntyEI!7}?8LjGB|eX;zxqeQ4wQrbQCoVZ0@9XX}P zUfp&mZi5?>@wnsxpV&ayi1FX`w=B$E*SXMdu1z8+Tzcz|O}~SkbIBq4#Mn?XXr2AG z^(LFMr?3ddF>m0vjK%MZ#~Qiz@qr7|r>LHJ;)1nUyCDn+ntu399d*8rrKWRn$VnEC)ppH|yRkNt))Lh6f zEe4E-=$CypvGwC0DFID25BpN(kt83|B90c~cUTyTm@qh&aJ2-}=~ zsFIlSwgNjCvISN+#|OE#7XX2pPtSG@uit@(6Z|#@tJlZZBeAOD0XjOy!H2(Yxoa&*vJEM#A6G$TzN~H`rjN(?L@V&e_g2gNHHYnW zPnwr_0f#Bk#M7|?u@QbK&a|01#@L}$5q3X&)w2d`a$23~G$sx*ztz)MpA)7iL0`UJ z#LEh;Pe~AWkswDh3Zp^{% z{r1Q9E`s3AW~Ocz2r=onkGNGU;Z8wNI}9@?jx3~ zXA;|e2YDv9HsPPLTMuOTNI~d{kmJ_WXRxq#%$3k2eU2Ro>&m1QE*IICVr-|flE>w67sh_M`BCw4S8^gO8sfuzA?>yQ zPMMf~;L{AZC0;+;LUpuuoOy5EO{_tZ@htnbVK9<~xhMkS2We;0j1x(&JCa(9w;{bP zIN!(pwY5RgbnH$jxookZ)4ek!GyO@+2|~mb;n9pMc!VwR!_GZ=8f;XCzRISz49nr- z$i%8Nv%)Bs`*`PTm(g zbC|YwUCr-q(c-6l7xTDz@-t(Wc?r_8`)vU(lM&$7GUDIPa6&ixWos`xnD+T5>5tOi z^3thsb$*kpoUgSa#`uKeRg&MqpAb!tR5aj1t_bpxr;CFmyzgpFW)1IFVSYeieS*&EEP`WI`w9mD&V%gVC zPgF~A>~y3jnmpeBIC0`as>vvWWE7cOU=-fk{4lI(ERpTd0lo1HBZZexN7=&d+|M|+ zX&31_AH}c3NMT2FgLUFfYgXeo#7I0}xrY9FQs<|mgL^)?hOU zkcAj-Gk!+ugGG@VE1P1a&I3P7`)aIKx_KhKfqx^v8B1TLgX_?>tj363H|7u`GKDJ< zCwqSWX}`cV1$8Tc88ZGT>yDl9MhKZZ%0RAtE*O^Yc0<7hEe8c>%U$raORojf!%HExvR)y7DX<+8_#IGczgyiMoU7uV&0e4JjKETd6)Ks(g zf<Fm zkFG9scCACP;k*p&7FWfK=K4G934gPq!F&74UP(NSpwfpX)>92mJ>!23imJXHKJyQC zRWepv>k*=8iPu?w^L0I0pB&V&TV$zUzgg>|!Q0rc`%MV@A5oN+zch3&SoUbvMlU-% zJVz6i6?$#153plnlBq7za{=9G={$$y%FmPeE1gwl)Jc|UXG+-w_FG35QD6Jmp!;Fj&adW*iVa+}FM6wE z-QASGc|%i>ORRh^{IHvX_S+U|V_yy(NecJ{jr7v{lP)al@q}gWlVmkE}+2fwUiTx1uE(h%sdEYjg?#pZ(4kpsd za?e4pL|2s%%H+MoDq+R;-h*1duQPowD-~&$S~aIL7H_(~i*~gDx1JSE5rq73TzgkK zaIu~V+{}x4Pn$A0vg#1z1k2cs6s9>D>;3?%K(Nt02L_ZRrT2V_sXwflaJgt&kw3$_ z5AjXUwul&e_R#;A^-bC9s^;I0~vxN@@AZ^{)Fr;ul1DsIE8tKw zlw>w@1)NQRh6%{dg6tyy&cjSL4L88D%t0&$9@6s#4DZq33$YeIn1yGWlTUy!)iAwk zrbl!u&G`28&B;BsRBS0%6@HG?3>ipb7c3Kz@6WT4al*@|x72|6nA)sQeHi`gB9}gJsCOnXYzgkgs;8_AG05 zE%%LT*;4ttgWI!hZk2vDm@Ng2pi%;N`BWCmvJgYsRLp#tk89`%PE0y(>rbmDS|E5Z zZpv^}#ki(>D-5EZ$HXxnC5<7P+fMU&Rg*r&F|JJW3?I<372V5_OiHb*2LuINMPbgv9pEPwJr>SfV^;3xOiAX4ucS-Hf5L^|>- z`pSgvwB>5XRP)38$^91FlqN%lm+}Xd!q4(1iIRUFch}315$+cCs)`gV?2MgJNhak- zCi~)rBG85_l9Rl_Y>7Fy zQ*3ss7Y=4~tgrXB5z?*vI>Q1xV95+iK!oL22U^#_)vJ+@qQ}J44iU!Sia5x>eXflK zXO4C=I?hO(%TR@4@$fFA-u@21DVYIdrFzLrPEJ&-gOtNLa_H+{~@kV$)5WRx#6<3ZDX`vw4;~!Sbx)cR4!+c(6&Pse9H< zE;bojyqTqoYSg{ZsO!?G>vK<+VQE|on7En376UW#s$JwSzp47wyhiJ#?AC;ztw~@* z^VD>eeVu34V2&FB?i|KEKHIr*lDoYvq`xZwn&hi*sVtt3y&nguE;4^5lp z!|)?)_08z4AA*}L(j)t)R5#lgrlpb!BFa_~{OI?cS3YA89T3x@VFQml8Km(lyh95D z9m*E?od4kp4mZ3fg+cD42Xm@7ITPIr)cX4;8MRY%PM^}lO&(N=X)?E8t~o;+Iz+eX zxP0*rcB6z}3?DNrgPv>^lZT>?og$DhS+sPy>JiY$yf1kP-fL%Edu^**+3ig2ZTFJ= zj430!QIiSwtsXu{49cEH-b32xhRxFKNLCcB)M6{F-FdRqwAotRwArovIeHuPUTI5d znuJIUHM%2%rN?X<4M2wKt%Szp`RS)QOq=wyD&6Q+XB_r$R!C?l3jLJGn_)O#J1;oW5pr;l<}zAVfx;QJ)_gSGmQP`p=lkn zw$QO;I`y1eCqdW0K97*_>CZiuy6W0=;!XtP?r2bf*H$6dc8cygCi5mS2%}M6%#a0Ca4SlGn^4y7r!osDNP~WxS>`uc3=t;R z*M*Tch9YCz{hX9?2Wni04ZPuW6_kQXle<8ewf7Ei@Yj=Q1;{1TUb_9j9$lz9FSHA3 z{8&2&nUqAb)%jevxTd2*BmMYZ>O*~msY(|XkTO2EKT-@YYJK4?Ak!IUBq+ZW#VmW4 zH=qHlS>uqu%S#2f-A=5`ILR=cSg zzajwVLX5bcvgkSyqx#D^+K^v6%r1nLtD3qd_M3aoIGQ5 zfge@D-m(npGsZBI2L#mElrodY9y)M*i9zkNIc#-0>S|gy5}YKX=1@xdO$VgkY_K`S z9lW~iz~M;@Osc7KyT+Q0BTIZ&qEvw%i``H>0&nycMjvg4{l^Sx(J-}ig6H{?)J zJ^MIlM14IK(Y&8*N2D|j*>Z~ZlNd}>F&UE8&nV61b2j^f!tqokJQXKylha3K%QUShP@81B)`%rS+%{xmlrZq3h7G1izBIo%S;=xE=f71iw z-$&GG;RRe#USv&VCH3gdG!Y9nF=T$cJD%4yA($KV!F9fsWNK((%A~bRu~I2}X$FQb zp6m~nZ=1Z+vM8~3lj{XZu@I$;nHCPnnEh_9F+l+D*f1ez1yZ43RGeuAyxFbhq_ofW z)f|Y=k>6#+Z2?bWI9w_U7oXCFMpaRdUYW*(`3i!vHgoF5lOeJQei?nD^=&)`6c^L+ z=%p4IPW?bHnp{<~=GiHb9dPJm8bd{sfg`&8$6aHbl|i0E%O0BUt8;)*+c_^S`svH^V-N6ug;(B3bzGBM1?E(yyc9Y1~>dK2g7!%WPTZrmy#Xg zOx>DkttP>ZBVpc2KnB|jF6a*g2OzD|4RZAmONH!h+&43dTnecb77tK{a5x|{GS1NC znas&XklgL79)%dgCztWAsS-*LZ~(*ZBcI%)4~>bclx!my0Y;Z`jWDck$leo(L&lEX zQ=KVmqNT7_mxK@H2@eB;AkgLhkszozcF*9(!-=70d{~p+=jOtT-tCdVK8gU9c|n-+ zM(U9RS*ow92n+%Uuv_39r*08i$qF2n3=BpNCaua+A5ft-kd=fYHI0U7%PYfw-(yM~wn;S=jt~Q?fOLKFd|F zzt*DdrRv1W?B6BFHC>fM_N-OO=Fr;Mn7Ja$8kHzaH^XFJTDq!XSmnp6tgD(8P zfO2>P7dAiaM38*Lsiinwlb44rS1r^PFAV42alRK!6vzv|zGfGyQ8Y*55TFz;6i~kv zZY)@lg(?5HxXW9G$$|-aE3sU-xs-qi!Y|OR=ig7fJcf`s1%uimsQ35Z|3pvnH1tOS z^~!_doY4}@qp~!Z_--qAsCE76Zv zT^vJ8KfOs_H80L-{x~P%KLV6ehc8`YEj0%Ny6C?1Jy1duhCe$gzKo5OpzA)8MVu#P z98cCZ#fLoyRLGu;cG}e=aK=>ltNv^jrQ&39{!ArMI0r|{hglXwW6a*(YXL=`%$wUm zg2$PoA(H+!`~Ey?vVbvy!FO3eveF(1vaFfg)BILHXu0yaLD%oz(?Qa`8|0DYEfVq5 zYdEwjtnq0Q1nwHjV*YhRad5a>y@zo*hSOSyAIQ5pRx zS$ltJSXs;GFw~`#Y3_sm$0tqtLy?^7PqaoqIBl>hHR(Qeb-%icv0{;FkYkJ#1vGMV zVJ&wrT^nL%mATuRY8Aptx9f+WN-B;sYWV4U_i$5hfL{nMy>}kpD98dgr$pg=*@99^_pXmxhd-A=GrX+f&%9?mgsvbo*bUvYx$;U(JXwO;s}=WJyY z7YukxUDFBWS?`p4~sROYFZjHC%FtZFd0^@NtzsSmmW7E;XRBwV^xIWJ@c?{qAC zXB^Zrq}q@FUGd#Z$LFgZG$}m{4Zg^Ls4fLQY4fwH8OXK0y%E$$c?}BP(raAq1_o>D ze`x==r=I(xP%GY9jyIBXjp5j7kt!X6tA+++oewR_2h|Q19_7(EQ(d=^I@-2!CK0*h4HwbmGIsauox!2rg!uIZ1Y4uITL(t=WuC)m zoX%I_;HvM_7+pi$dwci)kt+i$j^CFFbpjHa6MNq84!B`zAe23Qf?}QckMIrCkl{8# z((?45o*Cl9ipnw8PDDFpTY7qufgjlfVMCFU+b9 zn}Ir@;sbj#pNu7SQ~T5}1{m?SiHY#)hc9C-)IUmoFGg#N_0`cq(4oPBXQoIWQrEuZ zkae?7Wm#VzW?-5k%f^0LWRk;K<)Cvtj{p{H<@+2zjbwFVoX@OpKt`Z~)-4O`DW)zn zz~*uF%@X2vNEtmSKvMn&a)cPJpRY-Uc3gemP?1+ZkDf5%=skalO^o|z)0bZD7`|oR z*aHY@N>&87S7GN?fjLV2V2-rC8X?FFF}p(~jJgJW@UKr=35$Va6;^+9C_aI+IzxN^ z${0}J&>+<=24W|A)h!cBohY`jH(+%g|?Nwk4}UuT?w*ZV(v5!MS#)mvTL{{UGp?6e$Q!+*%_z0XyZ2mPr2H_5e5l#kzffBzOz zm6BcG-RS)a)^8o?c;O&mr9_o-m>x7zy*Hcqcdb_z?|HEOG1-0Cu|j!$6jfpSh71*P z;ME>g`)ID0!>6g?dv9XNdJ~o)gCBRjm3#K{zi0`5dT$amc_-RY>*cD+8JD^d5~XmUlo4?^~fe}NP3Xwk=eFRdrhdDDG z(ZTqe){?aMdk;KgS`uRIQmCYKV(-0|6(seca8;~NRzdG}gI~+p7JA7qA;-H*U1fZ) zp%L#(Ng>doub+AL@b_+9o&2&x7!SAt9tYJ}kLtXG6GTrbf6g9q5*lMUe28R(xvurw zu@5%pe?m4+_Wy0C#iMgogf+PvsD_)60ix;Do*Vhe#bpL{PsK?FkGqz9_l3ACFN|PU zwDMel3AuBl{?stDI_o3Dn@*8qqhwhFN+iZjV@O6a*ei3fkAWf4-*?4LXZ!5P4?P&+ z3r~xEnRVRjd@JWXpd7zT3Pt$|D!@c#e_%)Zfoeuk@3s_J3W&LWz)J{sR}~?$Z;Dcq zWMZ3^YZ960`Fn?u?^VF`!E>8|$7n%y>lw^DD87Ei?A-e_AL_m8fOGUP?-%J_>+%+-T)>_mbPccXPVk6>`KVe9ctIk6(hhSZn>>Tr7-Q08zP?hv98Q zJV*=Ku^|8S-vvGzZZw&PLBDg2ik7Z|OH^V&qj?FgkOijrUHPYf7p7?fyI5Vsnc8F9 zCeCUU{0mK^rk$S`8*hHs`+p~=eb4gkOqHrq)N5doV-W*CTOqzOmJXt0(J|tp2HFT9 zUS1CbfWSQxb}+|%Xeucl(x>5;4rvcut;v($17KNaBpaXBU17l?AlQwK(ZPg>0?}-R zZSvid9~^c-VvRDOY;+B$nZzYPA|rN(4C~gx*GiA^gMyEIzM~!0wQeZeet*&y^J{ln z9)_X`fKLU~A`84a4bkgAS9ey+SUY%2aM}H*wbu?3n9kxG9)v{@PCo*Gr{(X>x~7)G zbc|#)u#*H^`;qLuW6Xel!w5}-M0g0=ZVl&{^~~Hc_}vbs;*@sF%?Ixs{V|GZ6}VEz zD>>=wB9aMn8t=*%k5iPCG^SUZ`S4q7&;0nFJ z^JALEua=pcdRR2Mv%TiHGkfF76$HXebb(Np2uCnh zOMknEf~V#Js$R~UI2FVZycluKJ0XE))l(7;s8Cl$8e=7h{4!WFs{y{@VcxCtaXWEm zc7#u?eZD+S7jPtJ-CsNi@9~6Aco_0#udul%jSa4O?n@>LN#v49>GgJ1_&(WjpPVE* z0tft-k=NIQ#_~v#)Rpfn4-k3G6_CId*#xmk$38s`dv;6v)F_f9Kz?{pa_17TfSC4;xKOfxD>eI zCa;4HU}Y2}wTON7tyV%a#Gxb;EBIPVh2Oj|q~`ZgMl4{w)(kx3*Ea}Xj?^bs*UkLk zp?K`dqJoz#9&8|mX>V%$^v1+2P%`GpCqJ>P%^jsk^tUw(GLm%;Rd>S;%I%1L)@QF~ zpwo}US(ee{5>r6id#%=ZTTKPT6LvyS6*!;?6lH(9ENLa<>qE&Q$38$h_M}!x2dG9% ze*o26>a4Cd1LnK_@E=c*hI7rKQ+Fw(t%S)b8I$eiiU3gRx<7dC0M@QCeGr}6mHc>HNRJpMcee;$KBkHP={k3qS% zMrFA{SSDdl$C-9~VlrP98zjJF8{vfju1o#~sNU~>ikSFqM-yPS%iJso3O=F@G;|Xe9W8g*Y49gay;Shy`AUGfEUNAJ$vqk58s;^rAnjKVm}{25 zr!8HQqQQ4SZGFun32T7fw&N2*$k|((Oz8_asOK)9t}*Gmz(ft4#K}_AAM`rfB(B{u zZ3{BrTd{DSeY1+JBH6?k7|X^o>eQhgH@XqRGEuu6hm-I5CiUjhaOt;SYl@`(iaiWe zLOqUT6t4g+Ys!zj zYuUpJ5zRlq>iC$WJEUB|l@+&=fxPJ(zOrU`0N8`8rSyvL5{&!5PYyAa$|JBY z-kVRlZNN@Taklc)LNh??ny-1TK_fve-j;r#C^_Wp1HQ{nU;W%#u2?+aLsz=?l0N)) zFOWSq{4$2a#_Uy|l$hxG#Oh%4L)cBr2_*R*JO=Cp(7k$vyvkQfwPm_6*mGPXSroZ? z2f}TGdZLW(=dNDfriW3NC?h8*EMj7)W}4dGvC&@-)h=}BVAWXewvdy%sg%v7<3#1O zCuu-$pxy^{`Fa^_E#+pP!NT_Duy9-pyU9>49^KkZOX510RHFr9L45+=ND8YT-_`wi zoF|;D3lF`i$izVz`2qMvD;R5CLYOfmCh9?YmO3*$Fp}LwDS=I8b>U-1-y&ZCAitsBNLA$&=Kx`wDws)`IMhW4bj3GMo4h&vlRrGA$B4?l z!xh3u2YNkFBnPZP&a+%`CLe>_LxA!1*F(n=YfAAHTg1#XO> z92*O+FtWh1ecH189T}E`1YM=edQC@Hljir8BncN`u8`ZubmzlP>Z~lW?7iS39Bb#m z#AZYCfVFBXR5bf>U{|Kzz!An;Kjd_aU%j$Z=&esSuRUL`19!l(DoUm(o>jHsRY5q* zuu`Q|)R4ppr*x0t;WqMn!8J$SK0YD#SXt+Ht)E?w?+s|?L6CyoJhOZ_WG(ib#2_n0W^Pc%0qU7`B4dKj$I`Q|F;b`21xoI8OA4|*Ju z%4~Avnd20q<|zYNXy`+a>ZwA4EEAlhf637Aqk!eQ7CxHk^99B-n-t_-Ir>D?3S@mRM0vG=#a4M#s6u@Hd}cbe%tf6|n!-qj zz*`_H(m|T#Z7*FV8G&4-ZnCex0)cks!}L{i5F$#N?uULKf{52mkrk1)*Ky1L{%V`5qktl?+)KaN{US0m6}Hd9OKF_HmPo zQw$r%1}qs%Jeo}>@2uvI?;2=nKg8K(V<@&)Sxc)U6xYF@RnxUCHgSAi0!}f8IAi`* z=zyvc{Kzb=k<`Fkp^l&|SnMvgZILR+wHmxS#CyNaPb3y#c!F zYYKYym46j}{gAtTb%}(J;#jVM3GPMf(T^~o#WS@H@wS@N9}=R^O$wzqwo2=C-^IN}_0)Qn1lGH$+T5 zSX5GS6mOdZ>8dWl`&+fuT3UZu9M&fZ&5jU$+QV&~>u!F^bm(scK3VeJ(9{xm77 z`%~e?AF6c@vTRazK0D9<0XLF8^H0Q zZVo*cz`hR*EAMw20lPpK%3ke=AP*Cta-QLeI92u^HEPr^mF-C}`IQFJ^1DnJlb#g*bIuE}pppk8+ee9p+FW+#0izFOb)#A-?xJ zIUl+bJ?cAlbM0S+wjW68TnAjX4okCCrxLP^q>+?sh7oUwlZihO76yvO+2CGF8_Fwvkq+{QyW1?s zv*I~bMGKpwreo-F&8o5Bfh&;gzp)ANW*stoOd}pw0e+kt$j`@-B|hzM9PZl5%b*ta zA!U&OO^TYXy00SaD@x+N7{p_|)&XZT4EU_LbY&Dq-tWT+Gdcw^+*n*Q>0<g$V1ygcw}+6ytv%HXo|sd=q0=fzW}LG^H=wk zM23AgF<80Mkz3OND=tNbAt}f=0m7Tn#JLI|A2*>$@-7^&;2oBiKaXKyq%pf*M<3t5 z{>+*myFQ!IMTCD_a}Ly{E5Ek#O&IXDl>k#~iIk2lS+P}HXAtxQSkv<*l8bL9P?J6Xf1H_WEri<=tf{vOz^v-V#LPG!X6z#>g2inT# z;CjU#7osc`PWJVB&&#>_lAu-`A&WaE;xQvZp`vdbqxZgBjnGeOt5>PYa7uruevNr{ zMbPO=(U}2CHU0A3J+ULU|8HZMdsRHMvDoX^fxCu>(~ErsujXK8GBvHPqU*(2ug4IR zL)+E-@Ubt>XwCD7q0~(c@<$;q4A^b9T2C0Gk8$Ivqsg4&KMce5b<>?VRR|RNa*5Vq zao4VWKgA!!<}PthmgB!}9j6N;Z^LQL^kVg$NUfdXN@&UaMEkJ_hgx@dm3UJxOy{3d z8)9>#$tuih$A35Hz$NSMyu`R{X3@5UVST2OFx@#&+oZ(7O#HJo-dH62(!gyqi@FG0 z0HtI)DQ>Bd+kdcwb2xbLAR6n6aKP{>WKAH@Gf+Mv{{ukt}GOKj8rEbo(})^@9udsa`aC2z`h zGJ(Sddm>w_dM^IJ(|dXBUNB@t4tJ(+Srra!%#%l zgl$%g+rT@%aFF}AAM*~E3nBG2li%7+P?UuqUH{1V?kUlxt;3M?$Y-fznq44h??#^J{bQ&G5A56}dD*bOB{E!tF~2u;UKg zGGBI@=zJO|Sog+6{%iQ-tYA7+ShEbDbiD)o-L73XGCip!rC0IhYlRwU-I4ApZ^c6Vl5;9 literal 0 HcmV?d00001 diff --git a/hhnk_threedi_plugin/__init__.py b/hhnk_threedi_plugin/__init__.py index 7607ed81..b1696fb9 100644 --- a/hhnk_threedi_plugin/__init__.py +++ b/hhnk_threedi_plugin/__init__.py @@ -36,29 +36,30 @@ except ModuleNotFoundError: import hhnk_threedi_plugin.local_settings_default as local_settings -if local_settings.DEBUG: - if local_settings.hhnk_threedi_tools_path not in sys.path: - sys.path.insert(0, local_settings.hhnk_threedi_tools_path) +# if local_settings.DEBUG: +# try: +# if local_settings.hhnk_research_tools_path not in sys.path: +# sys.path.insert(0, local_settings.hhnk_research_tools_path) - # reload hhnk_threedi_tools and all modules within when reloading the plugin in QGIS. - # Does not work with importlib.reload. - import hhnk_threedi_tools - for m in [i for i in sys.modules.keys() if i.startswith('hhnk_threedi_tools')]: - del(sys.modules[m]) - import hhnk_threedi_tools +# # reload hhnk_threedi_tools and all modules within when reloading the plugin in QGIS. +# # Does not work with importlib.reload. +# import hhnk_research_tools +# for m in [i for i in sys.modules.keys() if i.startswith('hhnk_research_tools')]: +# del(sys.modules[m]) +# import hhnk_research_tools +# except: +# pass +# if local_settings.hhnk_threedi_tools_path not in sys.path: +# sys.path.insert(0, local_settings.hhnk_threedi_tools_path) + +# # reload hhnk_threedi_tools and all modules within when reloading the plugin in QGIS. +# # Does not work with importlib.reload. +# import hhnk_threedi_tools +# for m in [i for i in sys.modules.keys() if i.startswith('hhnk_threedi_tools')]: +# del(sys.modules[m]) +# import hhnk_threedi_tools - try: - if local_settings.hhnk_research_tools_path not in sys.path: - sys.path.insert(0, local_settings.hhnk_research_tools_path) - # reload hhnk_threedi_tools and all modules within when reloading the plugin in QGIS. - # Does not work with importlib.reload. - import hhnk_research_tools - for m in [i for i in sys.modules.keys() if i.startswith('hhnk_research_tools')]: - del(sys.modules[m]) - import hhnk_research_tools - except: - pass #sys.path.append(local_settings.threeditoolbox_path) diff --git a/hhnk_threedi_plugin/dependencies.py b/hhnk_threedi_plugin/dependencies.py index 02f5ee16..9656e613 100644 --- a/hhnk_threedi_plugin/dependencies.py +++ b/hhnk_threedi_plugin/dependencies.py @@ -281,7 +281,7 @@ def _update_path(directories): dir_path = Path(dir_path) if dir_path.exists(): if str(dir_path) not in sys.path: - sys.path.insert(0, str(dir_path)) + sys.path.append(str(dir_path)) logger.info(f"{dir_path} added to sys.path") else: logger.warning( diff --git a/hhnk_threedi_plugin/env/environment.yml b/hhnk_threedi_plugin/env/environment.yml index cff1d1e8..5524e08e 100644 --- a/hhnk_threedi_plugin/env/environment.yml +++ b/hhnk_threedi_plugin/env/environment.yml @@ -8,7 +8,7 @@ channels: dependencies: #QGIS preinstalled - python=3.9.5 # equals MI python version - - geopandas=0.11.1 + - geopandas=0.12.2 - pandas=1.1.3 - scipy=1.6.2 @@ -41,19 +41,21 @@ dependencies: - iniconfig=2.0.0 #pytest dependency - tqdm=4.64.0 - xarray=2022.3.0 - - pygeos=0.14 #required for geopandas - - pip: # 3Di packages are not conda installable and are therefore installed by PIP # - et-xmlfile==1.1.0 - openpyxl==3.1.2 - - threedi_modelchecker==2.1.0 #ThreediToolbox 2.5.2 - - threedi_scenario_downloader==0.16 - - threedi_schema==0.216.4 #ThreediToolbox 2.5.2 + - threedi_modelchecker==2.2.4 #ThreediToolbox 2.5.3 + - threedi_scenario_downloader==1.1 #Lizard API v4 only + - threedi_schema==0.217.5 #ThreediToolbox 2.5.3 - threedi_raster_edits==0.26 - - threedi-api-client==4.1.1 - - threedigrid_builder==1.10.0 #ThreediToolbox 2.5.2 - + - threedi-api-client==4.1.2 + - threedigrid_builder==1.11.4 #ThreediToolbox 2.5.3 + - threedigrid==2.0.5 + - threedidepth==0.5 #ThreediToolbox 2.5.2 + - cached_property==1.5.2 #threedi_raster_edits dep + - rtree==1.0.1 #threedi_raster_edits dep + #Plugin - - hhnk_research_tools==2023.2 - - hhnk_threedi_tools==2023.2 \ No newline at end of file + - hhnk_research_tools==2023.3 + - hhnk_threedi_tools==2023.3 \ No newline at end of file diff --git a/hhnk_threedi_plugin/env/environment_dev.yml b/hhnk_threedi_plugin/env/environment_dev.yml index 8caf57bb..219b830f 100644 --- a/hhnk_threedi_plugin/env/environment_dev.yml +++ b/hhnk_threedi_plugin/env/environment_dev.yml @@ -17,13 +17,13 @@ dependencies: - ipyfilechooser=0.6.0 - jupyter=1.0.0 - geoalchemy2=0.10.2 - - geopandas=0.11.1 + - geopandas=0.12.2 - tomli=2.0.1 - tzlocal=2.1 - packaging=23.0 - pandas=1.1.3 - pluggy=1.0.0 - - pygeos=0.14 + # - pygeos=0.14 #required for geopandas, not for geopandas 0.12.2 - python-dateutil=2.8.2 - pytz=2020.1 - pytz-deprecation-shim=0.1.0.post0 @@ -35,9 +35,13 @@ dependencies: - pip: # 3Di packages are not conda installable and are therefore installed by PIP - et-xmlfile==1.1.0 - openpyxl==3.1.2 - - threedi_modelchecker==2.1.0 #ThreediToolbox 2.5.2 - - threedi_scenario_downloader==0.16 - - threedi_schema==0.216.4 #ThreediToolbox 2.5.2 + - threedi_modelchecker==2.2.4 #ThreediToolbox 2.5.3 + - threedi_scenario_downloader==1.1 #Lizard API v4 only + - threedi_schema==0.217.5 #ThreediToolbox 2.5.3 - threedi_raster_edits==0.26 - - threedi-api-client==4.1.1 - - threedigrid_builder==1.10.0 #ThreediToolbox 2.5.2 + - threedi-api-client==4.1.2 + - threedigrid_builder==1.11.4 #ThreediToolbox 2.5.3 + - threedigrid==2.0.5 + - threedidepth==0.5 #ThreediToolbox 2.5.2 + - cached_property==1.5.2 #threedi_raster_edits dep + - rtree==1.0.1 #threedi_raster_edits dep diff --git a/hhnk_threedi_plugin/env/environment_services.yml b/hhnk_threedi_plugin/env/environment_services.yml new file mode 100644 index 00000000..177c7c0f --- /dev/null +++ b/hhnk_threedi_plugin/env/environment_services.yml @@ -0,0 +1,65 @@ +# This is an environment for hhnk_qgis_plugin installation +name: threedipy + +channels: + - conda-forge + - defaults + +dependencies: + #QGIS preinstalled + - python=3.9.5 # equals MI python version + - geopandas=0.12.2 + - pandas=1.1.3 + - scipy=1.6.2 + + # - attrs=22.2.0 + # - apscheduler=3.10.1 + # - click=8.1.3 + # - click-plugins=1.1.1 + # - colorama=0.4.6 + # - exceptiongroup=1.1.1 + # - iniconfig=2.0.0 + # - ipyfilechooser=0.6.0 + # - jupyter=1.0.0 + # - geoalchemy2=0.10.2 + # - tomli=2.0.1 + # - tzlocal=2.1 + # - packaging=23.0 + # - python-dateutil=2.8.2 + # - pytz=2020.1 + # - pytz-deprecation-shim=0.1.0.post0 + # - sqlalchemy=1.3.24 + + #User folder + - jupyterlab=3.6.3 + - ipywidgets=8.0.6 + - pytest=7.2.2 + - pytest-cov + - pluggy=1.0.0 #pytest dependency + - exceptiongroup=1.1.1 #pytest dependency + - iniconfig=2.0.0 #pytest dependency + - tqdm=4.64.0 + - xarray=2022.3.0 + # - pygeos=0.14 #required for geopandas, not for geopandas 0.12.2 + + #Voor DataCheker + - flask # oude datachecker + - sqlparse # oude datachecker + - psycopg2 # oude datachecker + - fastapi # nieuwe datachecker + - uvicorn # nieuwe datachecker + + #Voor Daniel + - spyder + - pip: # 3Di packages are not conda installable and are therefore installed by PIP + # - et-xmlfile==1.1.0 + - openpyxl==3.1.2 + - threedi_modelchecker==2.2.4 #ThreediToolbox 2.5.3 + - threedi_scenario_downloader==1.1 #Lizard API v4 only + - threedi_schema==0.217.5 #ThreediToolbox 2.5.3 + - threedi_raster_edits==0.26 + - threedi-api-client==4.1.2 + - threedigrid_builder==1.11.4 #ThreediToolbox 2.5.3 + - threedigrid==2.0.5 + - cached_property==1.5.2 #threedi_raster_edits dep + - rtree==1.0.1 #threedi_raster_edits dep \ No newline at end of file diff --git a/hhnk_threedi_plugin/gui/load_layers_popup.py b/hhnk_threedi_plugin/gui/load_layers_popup.py index 6f6d68c0..ccc0e314 100644 --- a/hhnk_threedi_plugin/gui/load_layers_popup.py +++ b/hhnk_threedi_plugin/gui/load_layers_popup.py @@ -20,7 +20,7 @@ from qgis.utils import QgsMessageBar, QgsMessageLog, iface -from hhnk_threedi_tools import SqliteCheck +from hhnk_threedi_tools import SqliteCheck, MigrateSchema import hhnk_research_tools as hrt # new @@ -226,7 +226,13 @@ def load_layers(self): 'klimaatsommen':''} if self.sqlite_selector.isChecked() == True: - load_layers_interaction.load_sqlite(filepath=self.caller.fenv.model.schema_base.sqlite_paths[0]) + + #Migrate sqlite to newest version + migrate_schema = MigrateSchema(filename=self.caller.fenv.model.schema_base.sqlite_paths[0]) + migrate_schema.run() + + #load in project + load_layers_interaction.load_sqlite(filepath=self.caller.fenv.model.schema_base.sqlite_paths[0]) if self.grid_selector.isChecked() == True: sqlite_test = SqliteCheck(self.caller.fenv) diff --git a/hhnk_threedi_plugin/local_settings_default.py b/hhnk_threedi_plugin/local_settings_default.py index 2251bea9..446750f2 100644 --- a/hhnk_threedi_plugin/local_settings_default.py +++ b/hhnk_threedi_plugin/local_settings_default.py @@ -3,8 +3,6 @@ DEBUG=True -hhnk_threedi_tools_path = '' #None crashes. -hhnk_research_tools_path = '' threeditoolbox_path = os.path.join(os.getenv('APPDATA'), r'3Di\QGIS3\profiles\default\python\plugins\ThreeDiToolbox\deps') project_path = None diff --git a/hhnk_threedi_plugin/metadata.txt b/hhnk_threedi_plugin/metadata.txt index d040bc34..76654760 100644 --- a/hhnk_threedi_plugin/metadata.txt +++ b/hhnk_threedi_plugin/metadata.txt @@ -6,7 +6,7 @@ name=HHNK 3Di toolbox qgisMinimumVersion=3.0 description=Plugin voor watersysteemanalyse met 3Di -version=2023.2 +version=2023.3 author=Wietse van Gerwen, HHNK email=w.vangerwen@hhnk.nl diff --git a/hhnk_threedi_plugin/qgis_interaction/layer_structure/testprotocol.csv b/hhnk_threedi_plugin/qgis_interaction/layer_structure/testprotocol.csv index d07d18e7..c2399b89 100644 --- a/hhnk_threedi_plugin/qgis_interaction/layer_structure/testprotocol.csv +++ b/hhnk_threedi_plugin/qgis_interaction/layer_structure/testprotocol.csv @@ -38,13 +38,13 @@ test_protocol;['DAMO export'];Aquaduct;layername=AquaductLijn;folder.source_data test_protocol;['DAMO export'];VasteDam;layername=VasteDam;folder.source_data.path;DAMO.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');DAMO_vaste_dam.qml;;;;;;;;;;True;;;;;;;;;;;;;;;;;;; test_protocol;['DAMO export'];Vispassage;layername=Vispassage;folder.source_data.path;DAMO.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');DAMO_vispassage.qml;;;;;;;;;;;;;;;;;;;;;;;;;;;;; test_protocol;['DAMO export'];Sluis;layername=Sluis;folder.source_data.path;DAMO.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');DAMO_sluis.qml;;;True;True;;True;;;;True;;;;;;;;;;;;;;;;;;; -test_protocol;['DAMO export'];datachecker crosssection;layername=crosssection;folder.source_data.path;datachecker_output.gdb;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');datachecker_crosssection.qml;;;;;;;;;;True;;;;;;;;;;;;;;;;;;; +test_protocol;['DAMO export'];datachecker crosssection;layername=crosssection;folder.source_data.path;datachecker_output.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');datachecker_crosssection.qml;;;;;;;;;;True;;;;;;;;;;;;;;;;;;; test_protocol;['DAMO export'];DAMO GW_PRO;layername=GW_PRO;folder.source_data.path;DAMO.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');damo_gw_pro.qml;;;;;;;;;;True;;;;;;;;;;;;;;;;;;; test_protocol;['DAMO export'];Waterlopen;layername=HydroObject;folder.source_data.path;DAMO.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');waterlopen.qml;True;True;True;;True;True;;;;True;;;;True;;;;;;;;;;;;;;; test_protocol;['Peilgebieden'];hydro_deelgebieden (hdb);layername=hydro_deelgebieden;folder.source_data.path;HDB.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');hydro_deelgebieden_(hdb).qml;;;;;;;;;;True;;;;;;;;;;;;;;;;;;; test_protocol;['Peilgebieden'];PeilafwijkingGebied (damo);layername=PeilafwijkingGebied;folder.source_data.path;DAMO.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');peilafwijkinggebied_(damo).qml;;;;;;;;;;True;;;;;; ;;;;;;;;;;;;; test_protocol;['Peilgebieden'];PeilgebiedPraktijk (damo);layername=PeilgebiedPraktijk;folder.source_data.path;DAMO.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');peilgebiedpraktijk_(damo).qml;;True;True;True;True;True;True;True;;True;;;;;;;;;;;;;;;;;;; -test_protocol;['Peilgebieden'];Peilgebieden (datacheck);"layername=fixeddrainagelevelarea|subset=""code"" NOT LIKE ('%1000%')";folder.source_data.path;datachecker_output.gdb;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');peilgebieden_(datacheck).qml;;;;;;;;;;True;;True;;;;;;;;;;;;;;;;; +test_protocol;['Peilgebieden'];Peilgebieden (datacheck);"layername=fixeddrainagelevelarea|subset=""code"" NOT LIKE ('%1000%')";folder.source_data.path;datachecker_output.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');peilgebieden_(datacheck).qml;;;;;;;;;;True;;True;;;;;;;;;;;;;;;;; test_protocol;['Peilgebieden'];polder_polygon;;folder.source_data.path;polder_polygon.shp;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');polder_polygon.qml;;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;;;;;;;;;; test_protocol;['DAMO huidig (WMS - HHNK)'];Stuw;;;;crs='EPSG:28992' layer='28' url='https://maps.hhnk.nl/arcgis/rest/services/ws/geoweb_ws_kunstwerken_en_inrichtingselementen/MapServer';arcgismapserver;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');DAMO_stuw.qml;;;;;;;;;;;True;;;;;;;;;;;;;;;;;; test_protocol;['DAMO huidig (WMS - HHNK)'];Brug;;;;crs='EPSG:28992' layer='12' url='https://maps.hhnk.nl/arcgis/rest/services/ws/geoweb_ws_kunstwerken_en_inrichtingselementen/MapServer';arcgismapserver;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'test_protocol_v21');DAMO_brug.qml;;;;;;;;;;;True;;;;;;;;;;;;;;;;;; @@ -65,7 +65,7 @@ test_protocol;['DAMO huidig (WMS - HHNK)'];PeilgebiedPraktijk;;;;crs='EPSG:28992 achtergrond;['Achtergrond'];Legger waterlopen 2020;;;;crs='EPSG:28992' layer='1' url='https://kaarten.hhnk.nl/arcgis/rest/services/od_legger/od_legger_wateren_2020_oppervlaktewateren_vg/MapServer';arcgismapserver;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; achtergrond;['Achtergrond'];Landgebruik 2019 (Lizard Damage);;;;contextualWMSLegend=0&crs=EPSG:28992&dpiMode=7&featureCount=10&format=image/png&layers=stowa:cover-fun-2019&styles&url=https://demo.lizard.net/wms/raster_169853de-8319-4a7f-b076-f2ee0ae5b8c4/;wms;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; achtergrond;['Achtergrond'];Landgebruik 2021 (STOWA WSS);;;;contextualWMSLegend=0&crs=EPSG:28992&dpiMode=7&featureCount=10&format=image/png&layers=nelen-schuurmans-consultancy:functioneel-landgebruik-2021(STOWA)&styles&url=https://demo.lizard.net/wms/raster_59064cc0-a0a2-4509-b790-e112cb718100/;wms;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -achtergrond;['Achtergrond'];Luchtfoto actueel (PDOK);;;;tileMatrixSet=EPSG:28992&crs=EPSG:28992&layers=Actueel_ortho25&styles=default&format=image/jpeg&url=https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0;wms;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +achtergrond;['Achtergrond'];Luchtfoto actueel (PDOK);;;;tileMatrixSet=EPSG:28992&crs=EPSG:28992&layers=Actueel_orthoHR&styles=default&format=image/jpeg&url=https://service.pdok.nl//hwh/luchtfotorgb/wmts/v1_0;wms;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; achtergrond;['Achtergrond'];Luchtfoto 2006 HHNK WMS;;;;crs='EPSG:28992' layer='0' url='https://maps.hhnk.nl/arcgis/rest/services/Algemeen/luchtfoto_2006/MapServer';arcgismapserver;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; achtergrond;['Achtergrond'];Luchtfoto 2009 HHNK WMS;;;;crs='EPSG:28992' layer='0' url='https://maps.hhnk.nl/arcgis/rest/services/Algemeen/luchtfoto_2009/MapServer';arcgismapserver;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; achtergrond;['Achtergrond'];Luchtfoto 2012 HHNK WMS;;;;crs='EPSG:28992' layer='0' url='https://maps.hhnk.nl/arcgis/rest/services/Algemeen/luchtfoto_2012/MapServer';arcgismapserver;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -87,12 +87,12 @@ test_1d2d;"[f""07. Testprotocol 1d2d tests [{revisions['1d2d_test']}]"",'Kaart 2 test_1d2d;"[f""07. Testprotocol 1d2d tests [{revisions['1d2d_test']}]"",'Kaart 2: Waterstand']";Waterstand_T3_uur;;folder.output.one_d_two_d[revision].path;waterstand_T3.tif;;raster;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'one_d_two_d');waterlevel.qml;;;;;;;;;;;;;;;;;;;;;;;;;;;;; test_1d2d;"[f""07. Testprotocol 1d2d tests [{revisions['1d2d_test']}]"",'Kaart 2: Waterstand']";Waterstand_T15_uur;;folder.output.one_d_two_d[revision].path;waterstand_T15.tif;;raster;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'one_d_two_d');waterlevel.qml;;;;;;;;;;;;;;;;;;;;;;;;;;;;; test_1d2d;"[f""07. Testprotocol 1d2d tests [{revisions['1d2d_test']}]""]";grid_nodes_2d;;folder.output.one_d_two_d[revision].path;grid_nodes_2d.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'one_d_two_d');grid_nodes_2d.qml;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +test_0d1d;"[f""05. Hydraulische Toets en 0d1d tests[{revisions['0d1d_test']}]"",'Kaart 1: Verhang kunstwerken']";hydraulische_toets_kunstwerken;;folder.output.zero_d_one_d[revision].path;hydraulische_toets_kunstwerken.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'zero_d_one_d');hydraulische_toets_kunstwerken.qml;;;;True;;;;;;;;;;;;;;;;;;;;;;;;; +test_0d1d;"[f""05. Hydraulische Toets en 0d1d tests[{revisions['0d1d_test']}]"",'Kaart 1: Verhang kunstwerken']";hydraulische_toets_watergangen;;folder.output.zero_d_one_d[revision].path;hydraulische_toets_watergangen.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'zero_d_one_d');hydraulische_toets_watergangen.qml;;;;True;;;;;;;;;;;;;;;;;;;;;;;;; test_0d1d;"[f""05. Hydraulische Toets en 0d1d tests[{revisions['0d1d_test']}]"",'Kaart 2: Uitzakking initieel peil']";waterstand_begin_regen_vs_begin_som;;folder.output.zero_d_one_d[revision].path;nodes_0d1d_test.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'zero_d_one_d');waterlvl_start_rain_vs_start_sum.qml;;True;;;;;;;;;;;;;;;;;;;;;;;;;;; test_0d1d;"[f""05. Hydraulische Toets en 0d1d tests[{revisions['0d1d_test']}]"",'Kaart 3: Streefpeilhandhaving']";waterstand_einde_regen_vs_begin_regen;;folder.output.zero_d_one_d[revision].path;nodes_0d1d_test.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'zero_d_one_d');waterlvl_end_rain_vs_start_rain.qml;;;True;;;;;;;;;;;;;;;;;;;;;;;;;; test_0d1d;"[f""05. Hydraulische Toets en 0d1d tests[{revisions['0d1d_test']}]"",'Kaart 5: Stabiele waterstandsverhoging einde regen']";waterstand_einde_regen_vs_1_dag_eerder;;folder.output.zero_d_one_d[revision].path;nodes_0d1d_test.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'zero_d_one_d');waterlvl_end_rain_vs_end_rain_min_1.qml;;;;;True;;;;;;;;;;;;;;;;;;;;;;;; test_0d1d;"[f""05. Hydraulische Toets en 0d1d tests[{revisions['0d1d_test']}]"",'Kaart 6: Herstel streefpeil']";waterstand_einde_som_vs_start_som;;folder.output.zero_d_one_d[revision].path;nodes_0d1d_test.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'zero_d_one_d');waterlvl_end_sum_start_sum.qml;;;;;;True;;;;;;;;;;;;;;;;;;;;;;; -test_0d1d;"[f""05. Hydraulische Toets en 0d1d tests[{revisions['0d1d_test']}]"",'Kaart 1: Verhang kunstwerken']";hydraulische_toets_kunstwerken;;folder.output.zero_d_one_d[revision].path;hydraulische_toets_kunstwerken.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'zero_d_one_d');hydraulische_toets_kunstwerken.qml;;;;True;;;;;;;;;;;;;;;;;;;;;;;;; -test_0d1d;"[f""05. Hydraulische Toets en 0d1d tests[{revisions['0d1d_test']}]"",'Kaart 1: Verhang kunstwerken']";hydraulische_toets_watergangen;;folder.output.zero_d_one_d[revision].path;hydraulische_toets_watergangen.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'zero_d_one_d');hydraulische_toets_watergangen.qml;;;;True;;;;;;;;;;;;;;;;;;;;;;;;; test_sqlite;['04. Testprotocol sqlite'];geisoleerde watergangen;;folder.output.sqlite_tests.path;geisoleerde_watergangen.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'sqlite_test');isolated_channels.qml;;;;;;;;;;;;;;;;;;;;;;;;;;;;; test_sqlite;['04. Testprotocol sqlite'];gestuurde_kunstwerken;;folder.output.sqlite_tests.path;gestuurde_kunstwerken.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'sqlite_test');controlled_structs.qml;;;;;;;;;;;;;;;;;;;;;;;;;;;;; test_sqlite;['04. Testprotocol sqlite'];bodemhoogte_kunstwerken;;folder.output.sqlite_tests.path;bodemhoogte_kunstwerken.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'sqlite_test');;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -102,7 +102,7 @@ test_sqlite;['04. Testprotocol sqlite','Gebruikte profielen'];watergangen_diepte test_sqlite;['04. Testprotocol sqlite'];ontwateringsdiepte;;folder.output.sqlite_tests.path;drooglegging.tif;;raster;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'sqlite_test');dewatering_depth.qml;;;;;;;;;;;;;;;;True;;;;;;;;;;;;; test_sqlite;['04. Testprotocol sqlite','Areaal waterberging op streefpeil'];DAMO Waterdeel;layername=Waterdeel;folder.source_data.path;DAMO.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'sqlite_test');;;;;;;;;;;;;;;;;;;;;;;;;;;;;; test_sqlite;['04. Testprotocol sqlite','Areaal waterberging op streefpeil'];Channel surface from modelbuilder;;folder.source_data.modelbuilder.path;channel_surface_from_profiles.shp;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'sqlite_test');;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -test_sqlite;['04. Testprotocol sqlite','Areaal waterberging op streefpeil'];Verschil oppervlaktewater;;folder.output.sqlite_tests.path;1d2d_B_channel_surface_per_peilgebied.csv;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'sqlite_test');watersurface_area.qml;;;;;;;;;;;;;;;;;True;;;;;;;;;;;; +test_sqlite;['04. Testprotocol sqlite','Areaal waterberging op streefpeil'];Verschil oppervlaktewater;;folder.output.sqlite_tests.path;wateroppervlak.gpkg;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'sqlite_test');watersurface_area.qml;;;;;;;;;;;;;;;;;True;;;;;;;;;;;; klimaatsommen;"[f""Klimaatsommen [{revisions['klimaatsommen']}]"", ""Resultaat klimaatsommen""]";ruimtekaart;;folder.threedi_results.climate_results[revisions['klimaatsommen']].output.path;ruimtekaart.shp;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'klimaatsommen');ruimtekaart.qml;;;;;;;;;;;;;;;;;;;;;;True;;;;;;; klimaatsommen;"[f""Klimaatsommen [{revisions['klimaatsommen']}]"", ""Resultaat klimaatsommen""]";peilgebieden;;folder.source_data.peilgebieden.path;peilgebieden.shp;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'klimaatsommen');peilgebieden.qml;;;;;;;;;;;;;;;;;;;;;;;;;;;;; klimaatsommen;"[f""Klimaatsommen [{revisions['klimaatsommen']}]"", ""Resultaat klimaatsommen""]";geen_schade;;folder.source_data.peilgebieden.path;geen_schade.shp;;vector;os.path.join(HHNK_THREEDI_PLUGIN_DIR,'qgis_interaction','styling', 'klimaatsommen');geen_schade.qml;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/hhnk_threedi_plugin/qgis_interaction/open_notebook.py b/hhnk_threedi_plugin/qgis_interaction/open_notebook.py index e1a0a9db..e971209d 100644 --- a/hhnk_threedi_plugin/qgis_interaction/open_notebook.py +++ b/hhnk_threedi_plugin/qgis_interaction/open_notebook.py @@ -17,7 +17,7 @@ from qgis.PyQt.QtWidgets import QAction, QMessageBox from hhnk_threedi_tools.utils.notebooks.run import create_command_bat_file -from hhnk_threedi_tools.core.api.read_api_file import read_api_file +import hhnk_research_tools as hrt import hhnk_threedi_tools as htt @@ -33,19 +33,19 @@ def __init__(self, caller, parent): self.load_api_key() def notebook_paths(self): - notebook_paths = [str(THREEDI_DEPENDENCY_DIR),str(DEPENDENCY_DIR)] - if local_settings.hhnk_threedi_tools_path not in [None, '']: - notebook_paths.append(local_settings.hhnk_threedi_tools_path) - try: - if local_settings.hhnk_research_tools_path not in [None, '']: - notebook_paths.append(local_settings.hhnk_research_tools_path) - except: - pass + notebook_paths = [str(THREEDI_DEPENDENCY_DIR), str(DEPENDENCY_DIR)] + # if local_settings.hhnk_threedi_tools_path not in [None, '']: + # notebook_paths.append(local_settings.hhnk_threedi_tools_path) + # try: + # if local_settings.hhnk_research_tools_path not in [None, '']: + # notebook_paths.append(local_settings.hhnk_research_tools_path) + # except: + # pass return notebook_paths def load_api_key(self): """Load api_key from file and update textbox""" - api_keys = read_api_file(self.api_file) + api_keys = hrt.read_api_file(self.api_file) if api_keys['lizard']: self.parent.lizard_api_key_textbox.setText(api_keys['lizard']) @@ -74,7 +74,7 @@ def generate_notebook_valid(self): if api_keys['lizard'] == "Vul hier je Lizard API key in!" or api_keys['threedi'] == "Vul hier je Threedi API key in!": if os.path.exists(self.api_file): - api_keys = read_api_file(self.api_file) + api_keys = hrt.read_api_file(self.api_file) if api_keys['lizard'] != '' and api_keys['threedi'] != '': return api_keys @@ -119,11 +119,12 @@ def generate_notebook_folder(self, api_key): self.polder_notebooks, { "polder_folder": self.caller.polder_folder, - "api_keys_path": self.api_file, + "api_keys_path": self.api_file, + "extra_paths": self.notebook_paths(), }, ) - htt.add_notebook_paths(self.notebook_paths()) + # htt.add_notebook_paths(self.notebook_paths()) def start_server(self): api_key = self.generate_notebook_valid() diff --git a/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/hydro_deelgebieden_(hdb).qml b/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/hydro_deelgebieden_(hdb).qml index 00512ec3..ab37e232 100644 --- a/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/hydro_deelgebieden_(hdb).qml +++ b/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/hydro_deelgebieden_(hdb).qml @@ -1,446 +1,853 @@ - + 1 1 1 + 0 - + - + - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + @@ -448,54 +855,99 @@ - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - @@ -503,181 +955,225 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 0 0 0.5 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -685,45 +1181,38 @@ - + - - + - + + + - + - - - - - - - - + - + @@ -731,8 +1220,8 @@ @@ -741,8 +1230,8 @@ @@ -751,8 +1240,8 @@ @@ -761,8 +1250,8 @@ @@ -771,8 +1260,8 @@ @@ -781,8 +1270,8 @@ @@ -791,8 +1280,8 @@ @@ -801,8 +1290,8 @@ @@ -811,8 +1300,8 @@ @@ -821,8 +1310,8 @@ @@ -831,8 +1320,8 @@ @@ -841,32 +1330,30 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + - - + @@ -881,58 +1368,55 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - + - @@ -963,8 +1447,51 @@ def my_form_open(dialog, layer, feature): ]]> 0 generatedlayout - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COALESCE( "name", '<NULL>' ) diff --git a/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/peilafwijkinggebied_(damo).qml b/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/peilafwijkinggebied_(damo).qml index 7e41f368..723ac674 100644 --- a/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/peilafwijkinggebied_(damo).qml +++ b/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/peilafwijkinggebied_(damo).qml @@ -1,784 +1,1709 @@ - + 1 1 1 + 0 - + - + - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -788,54 +1713,99 @@ - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - @@ -843,181 +1813,225 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 0 0 0.5 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1025,54 +2039,57 @@ - + - - + - + + + - + - + - + - + - + @@ -1081,68 +2098,62 @@ - + - + - + - + - + - + - + - + @@ -1151,18 +2162,8 @@ - - - - - - - @@ -1171,8 +2172,8 @@ @@ -1181,18 +2182,8 @@ - - - - - - - @@ -1201,8 +2192,8 @@ @@ -1211,113 +2202,103 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - @@ -1348,8 +2329,57 @@ def my_form_open(dialog, layer, feature): ]]> 0 generatedlayout - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COALESCE( "name", '<NULL>' ) diff --git a/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/peilgebiedpraktijk_(damo).qml b/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/peilgebiedpraktijk_(damo).qml index e3c3cb4e..f2ec0f0d 100644 --- a/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/peilgebiedpraktijk_(damo).qml +++ b/hhnk_threedi_plugin/qgis_interaction/styling/test_protocol_v21/peilgebiedpraktijk_(damo).qml @@ -1,246 +1,490 @@ - + 1 1 1 + 0 - + - + - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -248,54 +492,99 @@ - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - @@ -303,181 +592,225 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 0 0 0.5 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -485,184 +818,161 @@ - + - - + - + + + - + - - - - - - - - + - + - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -671,8 +981,8 @@ @@ -681,118 +991,108 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - @@ -823,8 +1123,60 @@ def my_form_open(dialog, layer, feature): ]]> 0 generatedlayout - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COALESCE( "name", '<NULL>' ) diff --git a/hhnk_threedi_plugin/qgis_interaction/styling/zero_d_one_d/hydraulische_toets_watergangen.qml b/hhnk_threedi_plugin/qgis_interaction/styling/zero_d_one_d/hydraulische_toets_watergangen.qml index ab6fd17a..09d4c2e9 100644 --- a/hhnk_threedi_plugin/qgis_interaction/styling/zero_d_one_d/hydraulische_toets_watergangen.qml +++ b/hhnk_threedi_plugin/qgis_interaction/styling/zero_d_one_d/hydraulische_toets_watergangen.qml @@ -1,177 +1,800 @@ - - + + + 1 + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + 0 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + generatedlayout + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "code" + 1 diff --git a/hhnk_threedi_plugin/tasks/sqlite_test_tasks/sqlite_test_tasks.py b/hhnk_threedi_plugin/tasks/sqlite_test_tasks/sqlite_test_tasks.py index 22675caa..ba53d811 100644 --- a/hhnk_threedi_plugin/tasks/sqlite_test_tasks/sqlite_test_tasks.py +++ b/hhnk_threedi_plugin/tasks/sqlite_test_tasks/sqlite_test_tasks.py @@ -232,8 +232,8 @@ def finished_custom(self): class watersurfaceAreaTask(BaseSqliteTask): def __init__(self, folder): super().__init__(folder) - self.description="oppervlaktewater bepalen" - self.layer_source = self.folder.output.sqlite_tests.geisoleerde_watergangen.path + self.description="wateroppervlak damo/model vergelijken" + self.layer_source = self.folder.output.sqlite_tests.wateroppervlak.path def run_custom(self): if self.os_retry is None: diff --git a/hhnk_threedi_plugin/tasks/task_one_d_two_d.py b/hhnk_threedi_plugin/tasks/task_one_d_two_d.py index 9fd4035e..7dcbc97f 100644 --- a/hhnk_threedi_plugin/tasks/task_one_d_two_d.py +++ b/hhnk_threedi_plugin/tasks/task_one_d_two_d.py @@ -4,18 +4,7 @@ from pathlib import Path import os sys.path.append(str(Path(os.getcwd()).parent.parent)) - try: - import hhnk_threedi_plugin.local_settings as local_settings - except ModuleNotFoundError: - import hhnk_threedi_plugin.local_settings_default as local_settings - - if local_settings.DEBUG: - sys.path.insert(0, local_settings.hhnk_threedi_tools_path) - import hhnk_threedi_tools as htt - #Reload hhnk_threedi_tools and all modules within. Does not work with importlib.reload. - for m in [i for i in sys.modules.keys() if i.startswith('hhnk_threedi_tools')]: - del(sys.modules[m]) - import hhnk_threedi_tools as htt + from hhnk_threedi_tools.core.checks.one_d_two_d import OneDTwoDTest from hhnk_threedi_plugin.qgis_interaction import load_layers_interaction diff --git a/hhnk_threedi_plugin/tasks/task_zero_d_one_d.py b/hhnk_threedi_plugin/tasks/task_zero_d_one_d.py index c3cf3061..109b307f 100644 --- a/hhnk_threedi_plugin/tasks/task_zero_d_one_d.py +++ b/hhnk_threedi_plugin/tasks/task_zero_d_one_d.py @@ -4,18 +4,6 @@ from pathlib import Path import os sys.path.append(str(Path(os.getcwd()).parent.parent)) - try: - import hhnk_threedi_plugin.local_settings as local_settings - except ModuleNotFoundError: - import hhnk_threedi_plugin.local_settings_default as local_settings - - if local_settings.DEBUG: - sys.path.insert(0, local_settings.hhnk_threedi_tools_path) - import hhnk_threedi_tools as htt - #Reload hhnk_threedi_tools and all modules within. Does not work with importlib.reload. - for m in [i for i in sys.modules.keys() if i.startswith('hhnk_threedi_tools')]: - del(sys.modules[m]) - import hhnk_threedi_tools as htt import hhnk_research_tools as hrt @@ -29,6 +17,7 @@ from qgis.utils import QgsMessageLog if __name__ == '__main__': + import hhnk_threedi_tools as htt path = r'C:\Users\wvangerwen\Downloads\model_test_v2' folder = htt.folders(path) revision='BWN bwn_test #5 0d1d_test' diff --git a/hhnk_threedi_plugin/tests/Modelsplitter_QT.py b/hhnk_threedi_plugin/tests/Modelsplitter_QT.py index 9b6063d4..1b60ee68 100644 --- a/hhnk_threedi_plugin/tests/Modelsplitter_QT.py +++ b/hhnk_threedi_plugin/tests/Modelsplitter_QT.py @@ -3,15 +3,6 @@ from pathlib import Path import os sys.path.append(str(Path(os.getcwd()).parent.parent)) -try: - import hhnk_threedi_plugin.local_settings as local_settings -except ModuleNotFoundError: - import hhnk_threedi_plugin.local_settings_default as local_settings -if local_settings.DEBUG: - sys.path.insert(0, local_settings.hhnk_threedi_tools_path) - import importlib, hhnk_threedi_tools - hhnk_threedi_tools=importlib.reload(hhnk_threedi_tools) - importlib.reload(hhnk_threedi_tools.core.folders) from hhnk_threedi_tools.core.folders import Folders diff --git a/hhnk_threedi_plugin/tests/w_teststuff.py b/hhnk_threedi_plugin/tests/w_teststuff.py index a3a49f29..d6b3dce1 100644 --- a/hhnk_threedi_plugin/tests/w_teststuff.py +++ b/hhnk_threedi_plugin/tests/w_teststuff.py @@ -217,34 +217,6 @@ def __init__(self, func): #threeditoolbox.result_selection_tool.dialog.close() -# %% - -import sys -from pathlib import Path -import os -sys.path.append(str(Path(os.getcwd()).parent.parent)) -try: - import hhnk_threedi_plugin.local_settings as local_settings -except ModuleNotFoundError: - import hhnk_threedi_plugin.local_settings_default as local_settings -if local_settings.DEBUG: - sys.path.insert(0, local_settings.hhnk_threedi_tools_path) - import importlib, hhnk_threedi_tools - hhnk_threedi_tools=importlib.reload(hhnk_threedi_tools) - importlib.reload(hhnk_threedi_tools.core.folders) - -from hhnk_threedi_tools.core.folders import Folders - -from hhnk_threedi_tools.core.checks.bank_levels import BankLevelTest -import hhnk_threedi_tools.core.checks.bank_levels as bank_levels - - -path = r'E:\02.modellen\model_test_v3' -folder = Folders(path) - -self = BankLevelTest(folder) - -# self.import_data() # %% import hhnk_research_tools as hrt diff --git a/scripts/deploy.bat b/scripts/deploy.bat index 4d7767ae..9745aa21 100644 --- a/scripts/deploy.bat +++ b/scripts/deploy.bat @@ -1,6 +1,6 @@ @REM deploy plugin to appdata -pb_tool compile +@REM pb_tool compile SET PLUGIN_PATH=%appdata%\3Di\QGIS3\profiles\default\python\plugins diff --git a/vs_code_osgeo4w_startup_qgis328.bat b/vs_code_osgeo4w_startup_qgis328.bat new file mode 100644 index 00000000..9a3c6f60 --- /dev/null +++ b/vs_code_osgeo4w_startup_qgis328.bat @@ -0,0 +1,58 @@ +@echo off + +REM Vul hier het pad naar de OSGeo4W installatie in +@REM set OSGEO4W_ROOT=C:\OSGeo4W +set OSGEO4W_ROOT=%ProgramFiles%\3DiModellerInterface 3.28 + +REM Vul hier het pad naar de visual studio code executable in +set VSCODE="C:\Program Files\Microsoft VS Code Insiders\Code - Insiders.exe" + +call "%OSGEO4W_ROOT%\bin\o4w_env.bat" +REM call "%~dp0\o4w_env.bat" + +@REM path %OSGEO4W_ROOT%\apps\qgis-ltr\bin;%PATH% +path %ProgramFiles%\7-Zip;%PATH% + +set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis-ltr +set GDAL_FILENAME_IS_UTF8=YES +set USE_PATH_FOR_GDAL_PYTHON=YES + +rem Set VSI cache to be used as buffer, see #6448 +set VSI_CACHE=TRUE +set VSI_CACHE_SIZE=1000000 +set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis-ltr\qtplugins;%OSGEO4W_ROOT%\apps\qt5\plugins + + +@REM set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python39 +@REM set PYTHONPATH=%PYTHONHOME%;%PYTHONHOME%\Scripts +set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\bin +set PYTHONPATH=%PYTHONPATH%;%PYTHONHOME%\DLLs + +set QGIS_APPDATA_DIR=3Di +set PYTHONPATH=%PYTHONPATH%;%appdata%\%QGIS_APPDATA_DIR%\QGIS3\profiles\default\python +set PYTHONPATH=%PYTHONPATH%;%appdata%\%QGIS_APPDATA_DIR%\QGIS3\profiles\default\python\plugins\hhnk_threedi_plugin\external-dependencies +@REM set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\apps\qgis-ltr\python +set PYTHONPATH=%PYTHONPATH%;%appdata%\%QGIS_APPDATA_DIR%\QGIS3\profiles\default\python\plugins\ThreeDiToolbox\deps +set PYTHONPATH=%PYTHONPATH%;%appdata%\Python\Python39 +set PYTHONPATH=%PYTHONPATH%;%appdata%\Python\Python39\Scripts + +path %PYTHONPATH%;%PATH% + +REM below is called in from o4w_env.bat - "C:\Program Files\3DiModellerInterface 3.22\etc\ini\qt5.bat" +@REM path %OSGEO4W_ROOT%\apps\qt5\bin;%PATH% + +@REM set O4W_QT_PREFIX=%OSGEO4W_ROOT:\=/%/apps/Qt5 +@REM set O4W_QT_BINARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/bin +@REM set O4W_QT_PLUGINS=%OSGEO4W_ROOT:\=/%/apps/Qt5/plugins +@REM set O4W_QT_LIBRARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/lib +@REM set O4W_QT_TRANSLATIONS=%OSGEO4W_ROOT:\=/%/apps/Qt5/translations +@REM set O4W_QT_HEADERS=%OSGEO4W_ROOT:\=/%/apps/Qt5/include +@REM set O4W_QT_DOC=%OSGEO4W_ROOT:\=/%/apps/Qt5/doc + +set QT_QPA_PLATFORM_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins\platforms + + +start "VSCode aware of QGIS" /B %VSCODE% %* + + +