+
+
+
+
+
+
+
+
+
+
+
+
+
+## Features
+* Table data editing, with SQL change script preview
+* Edit table schema, indexes, primary and foreign keys
+* Compare and synchronize database structure
+* ER diagram
+* Light and dark theme
+* Master/detail views, foreign key lookups
+* Query designer
+* Form view for comfortable work with tables with many columns
+* JSON view on MongoDB collections
+* Explore tables, views, procedures, functions, MongoDB collections
+* SQL editor
+ * execute SQL script
+ * SQL code formatter
+ * SQL code completion
+ * Add SQL LEFT/INNER/RIGHT join utility
+* Mongo JavaScript editor, execute Mongo script (with NodeJs syntax)
+* Redis tree view, generate script from keys, run Redis script
+* Runs as application for Windows, Linux and Mac. Or in Docker container on server and in web Browser on client.
+* Import, export from/to CSV, Excel, JSON, NDJSON, XML
+* Free table editor - quick table data editing (cleanup data after import/before export, prototype tables etc.)
+* Archives - backup your data in NDJSON files on local filesystem (or on DbGate server, when using web application)
+* Charts, export chart to HTML page
+* For detailed info, how to run DbGate in docker container, visit [docker hub](https://hub.docker.com/r/dbgate/dbgate)
+* Extensible plugin architecture
+* Perspectives - nested table view over complex relational data, query designer on MongoDB databases
+
+## How to contribute
+Any contributions are welcome. If you want to contribute without coding, consider following:
+
+* Tell your friends about DbGate or share on social networks - when more people will use DbGate, it will grow to be better
+* Write review on [Slant.co](https://www.slant.co/improve/options/41086/~dbgate-review) or [G2](https://www.g2.com/products/dbgate/reviews)
+* Create issue, if you find problem in app, or you have idea to new feature. If issue already exists, you could leave comment on it, to prioritise most wanted issues
+* Create some tutorial video on [youtube](https://www.youtube.com/playlist?list=PLCo7KjCVXhr0RfUSjM9wJMsp_ShL1q61A)
+* Become a backer on [GitHub sponsors](https://github.com/sponsors/dbgate) or [Open collective](https://opencollective.com/dbgate)
+* Where a small coding is acceptable for you, you could [create plugin](https://dbgate.org/docs/plugin-development.html). Plugins for new themes can be created actually without JS coding
+
+Thank you!
+
+## Why is DbGate different
+There are many database managers now, so why DbGate?
+* Works everywhere - Windows, Linux, Mac, Web browser (+mobile web is planned), without compromises in features
+* Based on standalone NPM packages, scripts can be run without DbGate (example - [CSV export](https://www.npmjs.com/package/dbgate-plugin-csv) )
+* Many data browsing functions based using foreign keys - master/detail, expand columns, expandable form view
+
+## Design goals
+* Application simplicity - DbGate takes the best and only the best from old DbGate, [DatAdmin](https://www.softpedia.com/get/Internet/Servers/Database-Utils/DatAdmin-Personal.shtml), [DbMouse](https://www.softpedia.com/get/Internet/Servers/Database-Utils/DbMouse.shtml) and [SQL Database Studio](https://en.wikipedia.org/wiki/SQL_Database_Studio)
+* Minimal dependencies
+ * Frontend - Svelte
+ * Backend - NodeJs, ExpressJs, database connection drivers
+ * JavaScript + TypeScript
+ * App - electron
+* Platform independent - runs as web application in single docker container on server, or as application using Electron platform on Linux, Windows and Mac
+
+
+
+## How to run development environment
+
+Simple variant - runs WEB application:
+```sh
+yarn
+yarn start
+```
+
+If you want more control, run WEB application:
+```sh
+yarn # install NPM packages
+```
+
+And than run following 3 commands concurrently in 3 terminals:
+```
+yarn start:api # run API on port 3000
+yarn start:web # run web on port 5001
+yarn lib # watch typescript libraries and plugins modifications
+```
+This runs API on port 3000 and web application on port 5001
+Open http://localhost:5001 in your browser
+
+If you want to run electron app:
+```sh
+yarn # install NPM packages
+cd app
+yarn # install NPM packages for electron
+```
+
+And than run following 3 commands concurrently in 3 terminals:
+```
+yarn start:web # run web on port 5001 (only static JS and HTML files)
+yarn lib # watch typescript libraries and plugins modifications
+yarn start:app # run electron app
+```
+
+## How to run built electron app locally
+This mode is very similar to production run of electron app. Electron doesn't use localhost:5001.
+
+```sh
+cd app
+yarn
+```
+
+```sh
+yarn
+yarn build:app:local
+yarn start:app:local
+```
+
+## How to create plugin
+Creating plugin is described in [documentation](https://github.com/dbgate/dbgate/wiki/Plugin-development)
+
+But it is very simple:
+
+```sh
+npm install -g yo # install yeoman
+npm install -g generator-dbgate # install dbgate generator
+cd dbgate-plugin-my-new-plugin # this directory is created by wizard, edit, what you need to change
+yarn plugin # this compiles plugin and copies it into existing DbGate installation
+```
+
+After restarting DbGate, you could use your new plugin from DbGate.
+
+## Logging
+DbGate uses [pinomin logger](https://github.com/dbgate/pinomin). So by default, it produces JSON log messages into console and log files. If you want to see formatted logs, please use [pino-pretty](https://github.com/pinojs/pino-pretty) log formatter.
\ No newline at end of file
diff --git a/apps/dbgate/beta/.env.sample b/apps/dbgate/beta/.env.sample
new file mode 100644
index 00000000..b62e5791
--- /dev/null
+++ b/apps/dbgate/beta/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="dbgate"
+PANEL_APP_PORT_HTTP="3000"
+DATA_PATH="./data"
\ No newline at end of file
diff --git a/apps/dbgate/beta/data.yml b/apps/dbgate/beta/data.yml
new file mode 100644
index 00000000..07de7789
--- /dev/null
+++ b/apps/dbgate/beta/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 3000
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/dbgate/beta/docker-compose.yml b/apps/dbgate/beta/docker-compose.yml
new file mode 100644
index 00000000..2243c71c
--- /dev/null
+++ b/apps/dbgate/beta/docker-compose.yml
@@ -0,0 +1,18 @@
+version: "3"
+services:
+ dbgate:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:3000"
+ volumes:
+ - "${DATA_PATH}:/root/.dbgate"
+ image: "dbgate/dbgate:beta"
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
\ No newline at end of file
diff --git a/apps/dbgate/data.yml b/apps/dbgate/data.yml
new file mode 100644
index 00000000..d5ad15bc
--- /dev/null
+++ b/apps/dbgate/data.yml
@@ -0,0 +1,20 @@
+name: dbgate
+tags:
+ - 工具
+title: 基于 Web 的用户界面,用于管理和浏览 SQL 数据库数据
+type: 工具
+description: 基于 Web 的用户界面,用于管理和浏览 SQL 数据库数据
+additionalProperties:
+ key: dbgate
+ name: Changedetection.io
+ tags:
+ - Tool
+ shortDescZh: 基于 Web 的用户界面,用于管理和浏览 SQL 数据库数据
+ shortDescEn: Web based UI for managing and exploring SQL database data
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://dbgate.org
+ github: https://github.com/dbgate/dbgate
+ document: https://dbgate.org/docs/
\ No newline at end of file
diff --git a/apps/dbgate/latest/.env.sample b/apps/dbgate/latest/.env.sample
new file mode 100644
index 00000000..b62e5791
--- /dev/null
+++ b/apps/dbgate/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="dbgate"
+PANEL_APP_PORT_HTTP="3000"
+DATA_PATH="./data"
\ No newline at end of file
diff --git a/apps/dbgate/latest/data.yml b/apps/dbgate/latest/data.yml
new file mode 100644
index 00000000..07de7789
--- /dev/null
+++ b/apps/dbgate/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 3000
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/dbgate/latest/docker-compose.yml b/apps/dbgate/latest/docker-compose.yml
new file mode 100644
index 00000000..5cad8b16
--- /dev/null
+++ b/apps/dbgate/latest/docker-compose.yml
@@ -0,0 +1,18 @@
+version: "3"
+services:
+ dbgate:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:3000"
+ volumes:
+ - "${DATA_PATH}:/root/.dbgate"
+ image: "dbgate/dbgate:latest"
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
\ No newline at end of file
diff --git a/apps/dbgate/logo.png b/apps/dbgate/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..216ebdb3c544babd0c8e5eaab4328dc682ebd7dd
GIT binary patch
literal 58795
zcmbSSS6ow1us%shLNC&LKzdc0AT6L$MMAIA1ZfHg(ghMwnh25JiPAxOZvqO^i%73Q
zn$o38zxcn;_vOyZ$vNkjJ-f3zGvDkt8-aSHN=D2?3;+O`y4rnR003S81Ob$=>kH}6
zm)zGE0(&JbB>1Avw2(Uf(00sOf3}fFBP4pkD*P>GdP@F97ho1pw<-0B|=M0O;M)
z8+GKaU%+fMRqtQ@Cq%}_v)51HFV(dkz*h-aVC1(fbpq6`{|u<#SJL;H-psH^kLpjL
zv*I4k^nTIxGV$AK(S-kI1yL!{kOW5(2e()$(aQ3^pkli#bFrv=B_?mbb;t74W885nAkSd$gWDBT8Ac=Mh#S&Er~LBiN_$JY*sWV zJ(V6fQhq*m2cxpbqN&8x8&*lczz5BN497F>-Nenn9)60??b>{7?hl(=|&)zbY6QZ$=m#5S@k~h)x+N2(eTn#%xfFA4Se3$m0Av9tlA7M%{+2 z(sm-jZ=lk||B)iN5-D3!2Al5o?gvMzJ=vndis-8FfO7xbqDtn=x8uVmeQPH0nbed+ zq3;v`KAXeets>P75Na?jv;nC;D^l2ywJ>}o*!AgHdog{zK0FJl_nR=8o=ibCL)KjU z-@Gb@>^3gLrfflhgGE2C4O2rEpK}^bfI7=9Oa-{ylLwYkdqI;>~Zq0Ayt@y*Fq_+`wgNq< o<6od#Bq8+pw203WoK> z>=EJZE26+ysRM8(PVhoWL+2WjXlPi50=a5&hHVZ-I_$qR>Fh8%m9JBgWKOZL`+LFq zP?rib>$Q9k1-PM5gBm5vP+%I&Rc>+@2s5y!busr~O?-Q?cKe`wLp~VH^@P^s)Z^6J z+pYfYwc10z4(WIq-0$|XgKyeph;MS0i+@UtM!WFZr4Wpr;k=6KaO&bPHWW5-gtlN%%@@wcSMrOTCZ|;{cx6hhf-Ip7bKjBwF`CmB3ykKl zZlJk*ANqmSt3U8|6R(O>seP=O1!&?iawNLgjo*<8&5pufe&z!x%h(8jcsFDdwzn%( z2CNk#1+5Z<7De#SQ`Jcjq6_Zq*et(lz)L4%3URWm<4DehRbs)Sl_YkBTYQ-vM3-{7 zu}QFMg6Q4cMmEAC#u2ve#HZ;%4Q6iL5TSIKOQgm*P!Mg9Hy)eS&_8B20#YLreCAk` z2)_G%1k}AMl;2>>V7gEd67mnI;jvZ8Uj6d6yv1+g_%FO-&7|_5JFd{!P6 hLGy@0;MoE7IPS?tjRs(m9Nh3nCYvIdJeiPcN=^gT5dtL}Z z{Z#IPL6TXvZP>hZl8wK$9LqIECe^)S;xeV=X1aGLyJVhaT@fL=p}OUC?Y*@-O2! D=t?{k3eN7?%$yZ6t^-<^l mi<>I6Bfkruh0KvSG40AK>R0{Z~o2iKl$2v zP5u6>oVaGm>3?1WvH#>s`T9Kfb@9?Qn{OHZe>Cb=L*?&l@b4pG#UY{06ln3!7Fz$v zduw6G8=P xIu;o%1cTHQsayeG=ql5NxFjM zzi+gHj>N`wQ)lc5k~8sjm!0@KgI;%A*lrnEjxhkDRM!PB|JwwWss$e6X*>Y_!Jbaz zLo#Y>m%M>dyTKp(Bmci5J~A7@z&+ihJlwa!xm8uH!LsdI_8G^4@#&jU89>bN>FPnx zrN=)?RQtvQrRNg0Z DEJ9IZlhoXRVBS ~r>7_j50Kb~HpoBlN#p{E*A0 zhJ#A*Tw^gW;V7D-zx}LR^X`nk@^5+WKprrOVmuk}jWGTH&`y-bo1m(Uo@XC%w7_!1 zVPYAqMk)jowC9~`PFVbMCi$#yH!+ACS9i%FPruEhW0f|y>2rO<{^4yDH~B?uE&c67 zvL@Yg^h^g$DPK!gtzW*YWst}vI43s+4z3~E0Qh+O_ZRF8OIP5GZocl9DRbf KNE7GyxN^ zlAHoyA_giF{ixah6bcsm_OB(S;2H0$T%9*acHo_|Ic2_fzCLREtjJF>G{$|?%@D0k z^-r-BzI@C({Qvl?WVV2CI+ (vaBsIiDbwYq~zyu;AJa02XfII?#%508VFee@l=5Qb#y!7u_Q=V}C zcYgdWY-!hc-yXvMa>#ZbNRX1xudyxjv=VcADZNg$VxjcaR`t{nK?5gYRyj7Q`_%LL zwI1dLiB}Y${%g8%>rgS8XuLcCZ8B>yDZNfoFhaI(WLNd(@~N{a8Xt!Xe^miMzk+vR z?IBK#Tsg@%8&_b@A a?o3^$+sQv1x1mBg@%^M+2 z@Iesri3!eChnUvEn_0JK{sbyyf9?Y6C}t5$=moj~qwM) 9WF{!jb#;vukw0gFd!&F2d+ZVp|lpI>bC31)EL8SVt}x>E(o zUIJiE*%w5pTu+{}CBR~!A?u|ieL+u!A)5anK@{*Un~Z4iit4X&p(}BGcs}@zYn+Pt z;kL;&q*Ws}X$sCxNd!6Y_8a8_9)cSfX7HYs*m;2M@auJ_!q9qOzpivB0$sBW1L=h^ zr|<{E@aPf@@6^!WuQ!48qct};c?-$QX3+%7%x1aaJB$hrHeaao4`;g33IT8IWiaL} z$|~vJ|0|0yrFklF9n3oe*YQt`=}?I&L|}|M#YN bN%loTuI*z-oprzyu9S zz~r}w{Pmki2#Uk&sSMUY7|CZtA>R9qE>RF` EfymaY_tmxK&P2G*w+1 zM>@`E*uMd%ZW1g2lRlp60SkC2sc}P?Lj^bTn3agj#_qm>Q6T%K9B`(ba6d92VMEYg zZUl1QTqT$=e~_134 FJ9-qc|_U*Pn zoQ92|_$OXQ?*QT_xGauJ*fnP%2jZ2?PXWu%jybhf#)!cQrt_zkl_o!%(co3dj7Y(2 zV1?pk3@}(}ZwXinD~)5#7;H0K&^)p(q9;i3-pbFbD7A6^?4?39nuHM$P|;h}@QLq1 zOqKXnV@AT^%6X?nVWRQtQ^ZaF_VNCtKUu&(&l_(yT)o@~lwWAY&@KUABx+g-)?xMx zff_w|S+s~{ZTRO+$ W>*%WpVtj6Q4cKGjRfTF;)dHqw^+;g!x0WIZt|Tzr==bA; zQLspnUs55!9_j*~zED}r?hUebX%utKA_)ZFJz%EwjsN%b7~sPV#qpx?R0naKWOhRK zkP|iLv}>&XU*E}>%OZ*39to~|tAv_k=MfVd+!LrN&B{^YytK5Os zl; sw8qZRI@ zXR_g~70^ZxwM{&YZo@8UY%+MrPjJoNzHXAz>NK=u8^yDFN*U;(gj4d;YIASx*xHNX zjXz%~EhW|} C~$nm7s#?_r3MI9S1i= z$zZgGby0(@kMsOVX5b$x@B-zP(~unYB^CGP59YydJ&{`e$6w6#F}yIUu}8!AhaNf_ zJLIhMVps*}BAPCFii* Y02 r+@z$uMC4tY6u#yxOQJ};+x zGvv*Gdt0Ic*5Et$u76y%S*6jXbQum8ss8f3L}72BAb8bvMm`wYu>gWwh+97@CSQL& z`dHdKZpos!fal2{v_;6v=W^NtcE `1R{>;X>59-0Am5~l|KD-|BxH3@;`o76ZqBe9u~i(iR_kTF{?6zTT_ ztJVK`X_bBQxx98k$#(smANv$q!H0>Ly`KNJ@hkS9y!U@rz7nb40j_ S9Es@XDthigu)_h#Hvt`hQQQ7({D4Bs;oM%i92=|&B-dDIMfpv+fO#j? z5RDkltLOa5{2a2Uh>e3E<9!cU5j~RK)Ith08Qp~vRf|EVCaVNL@6@&`m3ewIh5GAT zn^Dn~%MBz<^giYPMDMM(*(gCTbyN7^Xl =Ib0 zxixp5kDrsBC;eRdz1a`0Oeu_!?@0Csr{34rQiV_TRZINi0*St9KoWf#_Jav6wAaUr zTW)kK2;iVl8+2eoI|+T3$5ThoP7=6*&0-L0{^|UO-Csnlh oX~E#AiZjVCC#9lQ*<|Y13Ir-vkmW<*PoIkE6RSz z7{*Sj!kb@(<|R!n`X(^h4aCAhUd0sYP?r0*80(*+;> ^Xm_v#TTFY@VlNY8Mz4e@}S4y%WS*!X>C=oO*TyyjF3j zmc*?p6%`KME8An|sY|di!mut8{hEWNSBg7-zaLn_pIR>JBR<0=s5*M{7(!O-`yJb# z#PI18X+|K {PJT!q* zm$-K#9PiXmh+EeTh8e*qSRnxc{O#E5v)P^~#4r|xN-*UFVHqROFe{un&5c-O^pXpr zKOkWd2WeC|{s5=qZF1C1!;2Zq+??)!muYWBo^zPb97})FC)ZQkDK*zz18(Ye0C(7e z07Z0iz#@brnmP9oD8V(g_7J-SP-eIHJVE{td!@9ugQ44`o2NHD*X7lh=WC0^+S2x7 z6K@jid+}aq&4Z&AjS{BcOh`XvSf8N3Gq-6CsM@>uMW}naUg|G+l0>z{vP?yrnGXqI zmb*#lC&|b!xwBAKgtIl!g9w1W0EW8_f$q4XjzSo7By RD z=7DPs?TmV4t*a1-@*n%F(KFncNOs{`TPimGuECUNK@9%B=LdXXc)tV53$%(1ojpEt z5*RteTJo&Qk5uG~Tio`!{NoW@&nf3)$W;KJz8VR5_j%WMyu?+7qd0=H)
xT z{|Mit{R9Zou4ub#dtUw7$)YuJL5i}o>V9PYk|>*haJ>o wH?QD@GYw|k@_jgK SPsPNep8Er9@{vfuetYrJbs*GUV68CEt6<4K}#1%HZ;N&uqp9YmKmJ8{f!@oLAK zL6AX^R9^N98@J1Fn2?e72{`f5R^AE6YwVNIFhTkkN>^sYs0ltzQzC>q5} znO&R>McdrzH-Dt@o^pL>^})EoWA2oLI;^5t{PG>j)9^(<``awU+(7Q39e68aqQqRB z_ZC_T(FBr=>MN+yXSVp!B9im~^l?{}fq9Eo1Jz!c&&K|UL?BpahPN(I7#1wZEPQ|I z3>=mRYhpCDYoqAUkx7l6RGCw|h;veUnR!?ZHog3XqUm?I{od^BKAE_`K6@Q9Qb|05 zu-0F+8CcU%-Si)9dAg7<%i%WkX$^W1iGP0ftq(JM&{2b{>^Ax+^OeGW6^3K#gu{F` zwud5~Ek^()2{-S 1hroNrwX8}i~SZqPfaa%yTKe@vIMVTZY(=|6DhQ~V5UOzOs;F~|S zCuaI8=n$O@9&oDtHs&Wwk$j672UKfyS$z?xIbHP& zbhWIf+}F|Z|I;LbzezJQsn_xGi@3ItyA66D(W_CV#Vz! J4{|1Rr=Fx-8& zw!<0ps`|TwAhM;orCFXHY{giKP>D&PLrk5gqaz_%4Uj>3KYu`5xhxI0HwRJ6@+-bo z9$$lfeu?Jr@lD-{#c4U JQ{3uIkc@$La5n+RR4Zwq_IOqN^LR*+9H`zmJ!_( z-A?p+R%W@pVK&=5*zuom^?rauuf*`Hv4>Q=mDQL!iwU`9RD0M)`dtzomQ>2Q(r;Fj z&4EySz#g)q171xDA(9MeY0LgPd6z$XJr*Xx8Gk?T-st+OD!r2!@Rp5%1o6z%f=Mf_ z!xx8*Gi(DB#U%3&OvxAp7^} >u6|={H2J9|&*Y-}K-36j4fwPd|M$B0BKW20Ic&`?rNj2lXYEH! z07o~;&abX_jG?`wgegk!ZPhsdr(Vb`juMl;S;u*o_?@5#6h1}}Jo0=#fJIRhqo`7D zAB{GRs%bzbU_N(?0yH&$aH$5?|7zrz1JdW-!1@fi=p>-ohg4LZAQxaihhPl-0MfrPU~LP_i<`==uCWp8lT$8JayTTt@~FoVs- zK0>B@&UyYU>_$z89W o8HiCdr?G5s5F$NJf-D`YpO* z=q~Qf{c7lf@CK|IjhR96indI5t82?*4ebIYN&}BI=s;#=K!9aTZ-9efPw*Nm2Usa) znUG8rr&osssP&hp`^;M-DJxumOhP^uZBO;hf$GG~b-RBL(8pRWtkrLAfo7iL0l!s2 z{`-J4x>M(0MjvN-g{q2Da{W*`Bwd-D06o&$6C!>x!w~UwCUhXEbmYoRMva{kampn5 zzOSdZGEIHWh!8Q9Hxw%Cs>nS;(;|zp%3nY!gwtX)gFNhQ;jXk=(@QQ=IF2RB6*#6G z(p+}wjNv4o@8qL7_LT?KyN8RM*pyrXr2jfz9;a2{NR;S2*$T)NM}pwN>mo#O0wvrO zK*G`n8kq7_QY-!BRP;D{$DO=YZfMwve)EF73;3k8lQjWN=}H#}qtCvioz@8R=@D0+ z%5Rr`6S#OWQEam7oQY+OSKd)DqQREia-PBO6S~cCBy>dogk)vgGi20eNM}g@^tp^r z^%1)x#lgYR;wekqV^`uZxmx(zk>7W^=NFe6?j_KzF0F+z=c$g#yo}NLF4(aXcQ05@ z_M*2_^jyXjTqdy {82P z*YyG2`UW&NuoRGUQK-?yajX#_P|ocTg8H1Qz}jeeZ)JEYS_{+?h&Z%t1%FyLSL_ x&)NMG*F2?ISvr%IhfDseHHQ)TwO&AbL2-7H|tlU1x~4nA#u_V`KgPV91x{^ zT9YK}QD8}B8a`mEoi|?=;@Y|F?eWvq$l-+>AUVvtEr`)e%FaGlx`7Qw>gry9(27jz zEl!ZtXxr-a{-Pa>W%l&f)pc&Z{Oi8ZA$0b>9qbFwHMBvZ&xn>Fzs|%gp|pbP)MC-g zK-X#Vj>9XU1ApSZv=ykopq(DG9skT|jaU21bb^E3($x~EqOGFZ8R}7Vopdd73>r7K z(s`=z>_v(d#32k6I7{^r(a(nihDY9uG0% *Iez0O7A?TxCzeTDeeov|}m9F>$RfF(NSSYYIW<+uX3_W9Zi@9h8^*&B}Y1#N65h z6)c4DH%GvVZrb1OCyqjD*2K<3hVIYxiVv-6O hIVdz;EMX=GNxWJtQ>C^jH2jLj=e+?UiWw72b z0+OZ5y2g9}bdpk{a4Ha@K36hKDkXOf&ElZclYbXGiKmxx;>-rHf4g%y@q!nRDsKW~ z4cZuY4XX>^8lnWmFJ82KaO$HsmBd%aIiB~!59a)h8-Ym->SWT!Kd!vML8IWbi3}f# zSpQX&8=h@En^CADw@o`LHva=b=%t#+mWi>5B{|(pqt=I$@yh6orPRl7j0hKYm7>^2 z|F86Cl-symaaDoSyMJ;^8J~ Klp7-OiIS ;#xB<)dgCw1w31VhK zVW$Hb%^&m7>;G9BZBSDZ#~f*2g$2TVk=%iROu3p~K8idQcviy%>mW0JV@Q=W>p;9D zrI;I1HWlGr+y=F5_At1LL%>A@V(5?{&l-+HSNR;pUFK&GIqs_OwZ-02X8gW`ZU2Ff zCxvbX*oUzUuE@F0oh0&I3e;G}ar|R2OAU8wg1(4qkVKbfhrPGiOUJ=D!23SMQ)~cr z1%~fKZ6U2z;*N;VoTOe~TosTROe&%cd$({_%U#2Ao(cx+~4yLgvl_!r4@=);A%- zW>#sA$kwBGM{)cNLM_`eeU!^vzeHI?mwAPj+QtsuLbU5cMr{E5TGBwRH^v}XamG31 zM=9Ox5&8kj#LpS%6yBowO>(V* ng_K1`i~!!5rBkz+(t4HcJ*09 zxQJaTPRlSx!cp^gehj1h(b)*(p?k}35)|#I2yTvHtUmF?E7%L+&> eW9MKk@-2iC1HT4g ze;d=+Dl!WH;IC~gml(}=#=n9HzOJBJD0kJh&PFyPbplkS^-9 UQ_i{Ctg%v6s=490%4SuxA!L=&QS{GuLGJMevd)m9>3Km&QA+TXm$YqI zQT`povQpO*G&iB(g?{nA!gdd(kTtm#*2}aGD iriiz@__(hE1ns46IICxKTp&<^z^Z%;On{T`dTSS=Cr9A37!S;t{BVqq`Ql3ycv zmI>U$_3CJcm6{$MX^2r+hPEp&D`~C~NwtWrSeTx4g}>fsX9BzSYd|H&WB|?K#Q^VD z+|&jJiW TvvWrdOeczz2*=N){8ecX@~2saZd z`-=>!ps}ha?i37b8T$K{-HB&xeeL+;)9UPdjNbG#H1Hz@dc_IAqhGuebcJwwQ|KA= zCA|E>_!^OI%ku%AqBcE@*q^>_j{_?%W7}dIb8|FMwZc8p0Dot?&VhesanHb7R(jI2 z6f^4mp6klypG1EFIMhFix&Of=H>!AuuPK;lmdysm{*}u+Jc-{vK;IJ(lv77fEzr@! z(pXRI5&v!ZQ#141$Ao5 -<1i4zgq S{tH&JR?CmwNpFdfG9h`l(4PM3?oE72rIUF >qqAY0(cm@;k&>a#c6YBkNahU2y2burn=RDj+W11}K zwRA0$bS_Y11FzV1G9`jn{#jhRf&MInO>Ku6{F?1;hF!s>X4MktntcReY>fAt;^xfb zgG>p}bfUTu*+y|d0xo7u*AvD`xWG^&L8M{r6o!Z@5lLSD{6JQ{4}|bwdr5JnvU@)+ ztgrToUdEjlilLf5~AZ6I9SWfOneWse6%cee`pG{k6q$yFWMudy&RDvGznQGA`;B zSqIgK%ZU6Ih 2KO{X^&t z0PdE4h^%pKmO*Dy-|9fgzsYg{VYbTD$LySCxWuKbuMw{+Xh)GR>?*_%#zl)dajI6X zpJme_^~C;6ANGSO$8@({NB^Tc=7rv-o|HEiB|$8chcL@NbC&Ez4e^$#FPn@~p_b*I zv%EN!^?b-Utd9?C8(Ffg`EGnW;WzZ?_mc)#+?0~8;@bXW*RAwlUkP)my`3t(q;?Pm zAFd@O!5*WQ!%Wu h1&Fm-?sE0E&!;WO*?bD;*sYr6s+Q=e0wK2 Q!k&qR-U$K1qMm-*1TV}7kL+kVYY&7a2}0UU5smXo8T$M%=M{3de^SBY@ICJV*f z^SVe21Y^GI <75Jd{~zL(!?@Mw|dFMb bHaVHkLk0`b7<2MVFcJCaJM*y@;#AwcOD>%b|3bAM6Iic6 ve@to zLs%*R^Ccs~qD4+j1!^{tW{cj;vbML8wRH%*391QrtqT7*Z8kq2`dP&!|2cSN>$MbM zR^ChdHG(h30;euY-4O&b=wr9y(9NXJvMm5=za&6AFJhIH@gBroz?> -| z^CiusMXK$BCgbEHi=$NGYx?@wl1U9(kr4m3LOl3H1x*kKV^S~29uGa@@kvl7vcY9> zx!<>+lC~yVx@>hGCR9vlCdQBDPi8OFIU=m3$0=0iOQW@|Ut#>fIwn#p_?7R-G)dJR zc$P6BkudFUtPwWkLdz=+eYAg+To9mlvd h^FxeCZCfrcuyb1}H?RQ8J zViaIVz$vG*d?NA@GdooW3Kkf7Lh(Zfs3oRGoH7;A0xF0}xB|3Rd5}dPKtKLa=HrF; zjW*79Ejs+p%R`z_9}6ocwukSKX@e%$M>WtbQi|fW$d=u4;I{g)6y%2M_4IHUb&66s zxIwc!!3Jq#TkxcR&lZ?r#P5`96?bJd-SPQ7*A)NTHKGq3M_E@f`Hw7aEVOo2qLZ(J zrb<9S)sPnW>SE@;dy3x6S7~|R`$Xas1XlYWf-gF3A^w9W&r?X|;9r|Y9yv%j-Qn1J zrCzJv==&|FI{M0QHZM4h9{TK;9I0LDMAxd0xS2#TdaL42J&3-xg>!h!{4|| fz|WS0W2b?LzQfpoJmtS=0dGV)G-yKm`ljXsID2 j*X{uCLaNC4KMA7y zWxn?+IhFDJCInMH0T&EsH76}s+b%8*1IPBFcrU1;*aDd4StYNL4*xQ>usx= zBpyT>*Dogh_t(UcsfPpC64^ynB(&}*tZ{l2RCh2v @RzpAgn}^xwnI9V$NOg1b)g3d)=pX&dY;wdAQeJF0*)^H@H1W!xn* zUV1dYjm#=gsr++yCU*IOB$%Z9nLeCSNzM+GPxo} 3;L_jhjm{S;YD|_ z?Do&;=kdQEZx40qZXa+2xG6R0u$?(- ph$}K<(U^~d>3_4N89s>m^5z>f!>llgXwb0K_O1Q|ZSffH8(H?k(Rmwuav+;oC zeTn_zJ2q#f8M#9+EU$vKF-(r3AXkWmm%OuO5bq1gn(8d>2Q$FDgtj%u`;z+a;#dtw z0uck%p(Elm?nmkg3#Ruw9hkDUjr01rM(QaW(CVtC+7&3rgsdbwF+8f#H#V$~?*DNG zV^8>#K^@x<^46gPYQ+jq7yWLgL5o&>CS<(2#`SVEj+S~Ef5c~`W#p}?n)U53BJW*A z<&>95;*_sCI5Fi4A%%dP^W0X~J2@kt`7I0ab@N?D@$}b50Ec!a;o&oOYOZx@Q+sC1 zZy8=e=rWQ#zlwyED4fmtA~na{aho))$|`_*YnT_jytg)8e@u{$^~NKoY-k4xLMKxM zwsO=_aFCn5K!TFlE(U*I!8b6bj>$6ClDr8!E}^o(EbwYYEYDBoPxGsUdy>@73x 85ZF7&&f{s F1D;UJD~AP?jxxZhbg2MWt}oy;IOq?_4ynCS@rJTej?uA^j+EA$iUoTX z-b|m2C#hEu2?oJ4$Z2Ry(qylH+No%cWK!qv5l^G}%hG_)!MNDNPOoy30ISc%UyH4x zySnP3l=Fq@eN6>@Vj<=I!)nl1tgjaUI??$YJg$+(5 l1 zNC?)`A%PO6ub4n)7fn@3Fs^A-owp6_*og&bP7%{3u%x!ZY~QvF&LWaT?>9w7?gajy zlL)UHe$+OzAV{I5b{iHY@^>s-Tx=xccwOe}@m(DdQ@~qhnOc?PaZ~h&{#798)73Y0 z9eH~tnq%od<3qGKzl5FNG<4yQIJA^pBb729SAJu**?g@jt0LVz4DY?DD7vLh@N3YN zgcy@{%~+VX>7~`1nlkm Q zXMgD(5F8(#EpLKncm?$&2UmsX9?zJ%+v&L{U&@>!1P(OGKJW;Tks67?6!h;ne9vEW zUX13EsX)y=)<-Tr7{HIM^e0j=8(tq8+VzfZ*wC1-wRX}_Q`c}jp|r=_Ngt3@S2 Jx$+izs$d7uu%HS8RZ}oRJ>I-es$}8irsNVm!`PMr}aT!=^#{+=P1~J z-syN{X#8VH575ltZ&ogm^Y`Cto5%RBv$*5}zkfG 5*IS_ z_NFC+x=S^3E86vIKU4`=r`MtPUgZS{g2>s6y%@apI$~o-KgHcg)?a&Ith|~ND;a`B zhV z!kw;dgS2CJAn3CEv3XgbKpjj*{ gSNr?7YB$|;99}PC z^shcMzQ-#-|G@~2DPO7(M=d1&!OP{#zke5-Wmt}v*ip!#P#UVgTw$;O`;>E@YQ&Zm zeX}eFqG>Y@)ig9p{9Lh}6?QzimMXf7ZZ2cH_nD)Q;Yf~?sR$60Zkfaa922=zUpi zqWvi*c9b~=pz$o~YjC%j<-X{^cRB3|$A7!taK00=W@UK<1M;+s$V;M;UR2OheU8di z-QVj|BTP@qShVRh6_wglGPiw7b%kwncl$Ke27TNF?Kc`;-`7l4dv0lLm*uur&wua? zamG!xP0EDT0gf$NoPIW_?ZFx!cj;MkJ-Z6dQY-Sif3*;#VWCzWfgrBC4*U7q_r!G# zB4+%1j%%V?EG+_n&hVbJ*)D{pUAHj`eW39)E)HSchACb04@o+@C;i%q<^34O0e%|h zOCb>x-;@$i+5EmG zH(1h%<>n3WSvmde$Hk@|#8=x#yiEFOhVsw1h5Pue_8QIH42=1XjqbmOCBgotntRIJ zpZ0=2Xy4-vDN&$p*;q^W^bS2Z9GZ!fur! iQK4ypCSHVeoeL zr^;RpdutK;A`z3HYGf&t@fzIQ$SQb0LJxR7Iu2-cC2Ouvmrn0vymDtiDH%?`c0i^c z226<)o*P#p+wdYw_?x2_zey+R`bGjMMlUF#Fz48w=LgKTIyD;Bn=T9+l?iG2w=!?$ z=g*r9g#Ps??memY@r++B`{M|GciyYNhF#g-o%-AL^iH+!wxrgAwsdH0XF!=u`qv=w z=+*wMOH@V%-0N^lxo+!v^}JLjUt?f5n`8Xnf2Gn_iQ*yDawp)*KyZ7C5AZ**bNz zun#jR@JTEcB0qYcgHes%FsQYz0%yB!A*T-wn7+XHG<>FY$6 0a`u&RndCDjc zm7x&02~M`-%l+y8{>wpR5<7)EDQ?Wd<;IG*MHY9Q)C Dwq5 z z^EV(}iG5;vOZicYw}ZH9u!oRZI$VP8MnI``y{V97jVW|zjg@C$jaQl!dJMabd~f_} zl4g7^qU6mStyvA>`{%gQMA}4Ec60M{@i`vlZyF$BcQNe>;6nByFLkHHB)}U{(vZ4h z>_CCLmj;; gRD0gYw}jg+Egy@Jbn;i+`t&({`Bhezxju}C@a;Jq272d zo)@rVeS9@lkrxI1C!iMa)J1TAJoU@|_;u9+*S}n+wf}XJJ3M3dyD6G=X6WJdZLj@~ z!~S11$4%xSKx7GrSL@y9wxuD3cDQfnN!lfrtx)^9hznntuhR#DO*-hkQqP2+=?yr< zVsB-8!_N;WAt2d|C54o)A$b>)2@#+=6sNspE}FSajitppEn6z^0>*dsKV7X1=tDM$ zsE`t8TXYSAeT5Z>XY*MtguFrXFn;wK vSX D&Dm%|(F+X&Mv2-37#XpE0oJ2(hyM__Kv#ME*MHv>WX&?1)^GY|Xeb(F-4g zIcf^dWK}*=yv`t^l=ls>?sPrTj=m=p9U>Y)K66zzbg^j$eOF6ha}JU$E gF4lCyNsb;L_wh!FujysPtE=}FT%rhcX3f`^9(-0>z1qTK+u^_K6zkL`{W8D%LY zoWg*EO@{@@9J%y^kQRPw!|x5D!M*OwNhe+UkoEFB#U5zTY|ktiZe$?WN1%B7BhPnI zfV?8xZ-8Dt>2Zuk!wvGH*~jY3?HXNnkAyIBmGX)*njBo*$YM^dw>JtqvY7M&h<;cw zD1dUik?f=2^4g9It)AE!;2#&w`|wRPsyfLVkvBK(AFVncM)0yGNn;B0PWWcIo1*Tf z`hw`Q$nRSdTwO;tODAE?_qh a`Q(?2$xyB#A-Z-PqiZ{9jD8VvzdOi; z<9|dWB=I)7-V_Lt`?yzngShtX1BD*dAdycoDUjG{?mj^0RprMoRd0?1gI^6Ex%= c`zZTQGIO#wu)5G0;1|XN7-Lpy46>7td=7Z>ep&+7zMn}4 zb@P6=@~Z$rY_24$G5)I7S^G+JkV7Bh{C>AJ_dXh|94 l;jrGLlm_#?e5Yv_Dha;Q4gOlR}2ohO9D2TM~ zWL*WrHkeBgH5aw#^N`icSBg_6vd)8v^5|l4gXJ#4mgb1g^tkVIOF-*gQy&AVrw*Dn z9YQUg1VGG+c_j%BUK34K#09MK(E#w! ju4>bi>s-^*M2r%dM)PPw1w>LIAfO+(U0t(o-nr#J ByOZNnMq0fOYXmc!Nd>F}|V+J6=kH_ci5iAEn)s0VQ>n=X2$6<=uwYf2ltLZ _P1RrEs}KjHKyHCJDYG<9 z&~j#)Vj8Vj{wnZ+44MK^@SOYrku+t{4pgRIr$vESTPcf#Y>J+1Wxr?#3H~U8X@yZ! zf@TMkvryUWD6kd Hk(I zpItDK^y7b@h8u&PZxRUsPaIRXP?&SF9wZqnp_Qj|2p;i(5Nn^~>QU3QV4OSQEtm1< zuo(f(8ymocwmBz7lAebO(S-M148CmmCk1y-oRaMTzkaa2Z U6p6HLcWp$$m09QO z=5d!0_)j(FmUG?lR_20v^SSe>8en0=ckVa%)o<#3V_XF}8%9ICg#NfK4Y-s5DP;uG zau=>ipC&ei;Yy%RGFH9$S6S-a3npnoem+(#d$Hj>4g(@ts`p-)@lYuXMo`RK;&k(x zkT#8) %Rn<9Z$rDr~la!3&y+&-S{GDah_bwW2KeLcX`93e0 z3owkGCHYGxTjkTx!25)hi&)6KXB1zH?BL6FjYqGwvD7bH)(Q3eDzyMHf*-GV%}N_- z!G4A+bp&N{kXad*x21tN{*2PY5c)h5D>khp>mo1*EE8xDqAs`?CKzvVDq`fZU>S&K zKxf8hA3B?5e9F7iwJ#JNCYbs9ZD{xCuOwXm=X|GZwszh>C?>2o2011~42D_YzQ|W_ z*e=IBkghR_0Tu6Fm un_66X=byRt;|=n;BQ ze%A@u;FP>OSpsV{1(>>b_&J #?sqeN z>1w`ifF?lG?z1&WE9OtgLhXS|#M5?5i?)G$Vbd^zRv7wMbzT-fopF^9SS1`N*<~do z{qOQ}93V8M_!s=)7ntFFo%H#=vn-%YAveU&OEgH3irAwzglea`WObFI%0Dj~%NsaO zHQ8TkzVAcp(~RynDf;adRgBD-T@5$=K&*G1Q?C{~d#a4L8(AglDc19IDLwy=wRk+` zmUhF+&!8Lq@9WC0+3qr)?=D)c<2@xaNsF%Si@WF=pAp61FCS8l5Xsen#Y3jx{@2vj zlCCtXuJYPcLBJdgQr=`eN`%m6KqincUQG71UuJZmZ#eG|Ao!QKL-dk7#hF}J+bnGG z3j=0cI)lCX&)XU(e!UpeKq7QZVT=T7F2Q0rtZUxMs>lp0f`<>|nu|MohnDcgwDh+3 z`>Q^gQVo)uDR-15^XZTpGsrmrucFB`26~91L(2o;p?hxIpZSVtMB88bYL>bLFD#^h z!pRHtXzWqjOgFM ^T_CHvLa z9tZ8&3DyF1ll@5V1h{l-&{wOsi~)~wbMSkNJM7WPbD)6Xya%=sUcFKcwCmHPyZ8>r z>ydXTvz62cne4sS{!~VrJI^mekI>b5_YjX#4h<(_SATa2-?3kvoeN&$+{L~yQ3-n# zbcpPP%>~2=-5_T()1S6(pTYD!lvO6 HAx41=4ld<1}fqqG1?J %t3DYn0YoB&SXc^3nN3{zkXR^%H2=SP@d;4ItI$ebfeXo zUHDw3+i7=LD7pKHQTVI9AI5}mu^*LysT6U5>!ADE{CN7R=5NF&brwY2L@->S+-3<} z1D;&@8IGTpai^b&{w0_6%=PZw8cmXym?WA}zqd}P;-3DD^w(iJ6M(4%NceNSX#;>K zvk2+PM=8Dn9+*mS%I`tsxd&U+04igTlwC+B7)z!*=|l#T{l(#~Fx;<^t!&;T{**OE z3q76fi4jdeb0hRop5CtkQ~S`7la)as-cRY13WE53C$WXnk<)&K4mj^eTrbi#wY*eK zZ9;^Y0`pu&EQBU<4+GIRlBi4@JBktrb!1f#&A)DDD6z!5S3LID$c~5eo6_G#AVXRV zgwsMNRiY=+5TDbF0Iu)MLxs#a 4~Gxx0{g<8M! z-S2B{Aq04e-jRzqW4znKV;x^?ZMb~YAiH**?BZ}UdPQ8IoK@L5sNX$@O6JKo`s5mR z4S5_STf*}vqC1hQ%aCu!&!}$9gxyeVwvlCwk>>(qCdnwU#Nx`u0OUnBP2xMtdz);w zZ}xVC% 8PmN`@n|BqZQ`DDNA;0B$Mug0 zE?1Qi-W4=((@GcA$VN23aj9DjyQoNYqygkQ#x~IcmrLF35uZ2Ey8&B&!~9uoLoO=O zvhtU`aCg+Y I>)ro`1(mNsH_kFd8S;TMMhbv7ldXkZsfPpW@zN{W?7US9VOh z(WBt|lhs^8#)Sr3Y^Hs_0e*DRa^3~7PP5UK5k6kc_E8*5H@APtZDYx(JR{rG2UTYF zRQtTZw}RD!eno!NrGUS+!a?AynE|L9ND!pJ^ar}fT{QGNPaU9V3NGZ2WwmAK`f#LA z;Yzp`VT~#+jNxp3O2ren9xyL7kB_2qU FItf 36%WY@t|3-fo@sdOOebhP8lZ5g(8CIEcvw z%O821q*z5DF%uRB@>+MdRhy_Q+Dmoharojd0jdgO&idyYs*$Y>4ZeCDJGf58&p);g z^Ypr>HG 8f#-E}-Q`sKs$Z}zS9z&*}6eUvWh?|G3Bno8mT=^B2mHq19$ zpb6j}$%Iahuk@iR=z@j@+%9HRRE!_C=m~K9VR8ys`^H`jD4qF=IRztonk#K`1OC2Y zCkr=Y$%{u4j=W>xP5(XvNSh!Ro=CuGKt7EL#qM!?fbI0g!f~}<0#_R{1L?EE9K`e3 z007HE<(D#g)X-?{n744Z=xHLhFXjf|LZwY^6way^l!*`jRtCnQLlDWFX0#^8@eaTp zye7HE_7Ma46_b^^Oye0rFN49c{_$-d5K1t>1ju6oiYPprMkJ*aF=UsDM>`9<+rT)-37-o9Jh}vG|qSLmhGL#`>38KlJr49oF{T zwc2bSxd(XNv#zkSHz3ZT%aU4Bt+7Q*H0Ys?=W_rp1(ceQ^%ro%LG;W;(j>iv>_X!? z_3>pL3H)gKFQR>F!k3DA{aIe5+J}j_lNKh*H7N=oHU{Dt=R+_9S}#eF0OmRHpoTWV z!d)c}8Xq7!@W-^^CunV)^*D_8BmvKI2UiH>R76!N0~L31lLW+Fj4^1?*|t(xTZamc z2!9O_+)?pB_TU^x9Zrn{L-CA4qmbOee{d9!YuIp%xg0NlRB9Dy_>vtFmbn&fR4P|~ z5uNgyX(n!pc_?df<*pxNmdpS9lz>QIc71ylMZjv)8-A;S>(!0pXHunb7%x-MCPz{R zm})DFeITO-8uom)%#I12sEoN-8J&<6`u(A+_Ul34;)rI Mmh0SH0&zHkqB z-x)F;tX 76+P7hiZ3KzV6g7a7FKxN7sJ{A7`#um^lm ^zfOx^?FeSHb|!I9#)8l2G)_eX7q zkTY>3N(=}0(b$mq4PgA}>Jsub5F!Ie09Na9CICs&maae&ZRuVF*XbXIt*MHN!li-? zwzD2+!wgvs^0d?8Tn3H`q5Z;7g5%k+K@sJ^= jF2gb?{dUwWUlS<#XyWGLFMu2sL#lD<4g5hQQ4%E)tWayU^&ISz!`UZ#!=5X1 z?v2?ET7k2&42UEWHz4N()uoZZXbG8A0plSVW_5%%uf$e9cp7g1sLj2J9%$UL@rp*R zz;(dY)x8L;jn+DA72wB@pG!UwlTDDIP}L+Yq46Nq ;KutHvUTzPr-0S`S0$nS_$bF<_*-YPu@`>v>pj0`}`Po$#w~vhUZw3|jzP zD)`AE8%WnJtO3ePKe-E}ti$Vk2^>F$bP4?ooQuM($o=5x8n!0lK9DsozdHq(Ak&O2 zz)4iFx?u2!%5e?>=YPPzmrTMzoDyzrhSFzZN@-gt)}`2%*tWnlrZTmtJMRL##%sI= z1v~Of EaQ0Rqv~PXINz zk7t3Z+#wGGrRgF!fFwv0+5_=4pd}DV1*!vXVu<5>UIs@n*wYAla?YoA4m|b>AKrxt zm!|Wztb)qzLS8vj7H%k2ccUX88f>rMwEml5Tw}cE*baKD-mHTN_=oImQI{`9VB2q@ zr^0&EdfgfeAv;5E3^k#pyTyWLWnpM+=ex_k0IeIBs*o`cxQ~In3|O2c@()?y#|OYl zegx1SdIf-f$^?*W9A7vGfXfk`SZo1=|6F=nMFXNUs@AGq5hA`VcV(4uaPN+NC;nNG zDvl_}N5CTOqxFEpe8q>H6Fl}{U$oc);8MlHO97C )jH%Xq=q2u6ylth+ck zhlN#)*ac2s#D`JugQI=e?1(-fD_q&`!@y+u(TE1ZDMLj7mhe3QyVwjsKDigPWH-s+ z`pGC`eFCNT#FcmMfruIr4@d3*y;iT)Ym2(G{xfn|4$EQ47?=^BF&1{bbgWw51W3Ox zb!+Ap@D@v-lCl-NZ>H}_nFiignIE5B48D}?2QyBA@7kOfGwXrBYhKx$4q&Dhtj=o< zRxi)a{L!FgeSU8QShM^i{cFJb#a!#Z612Xx*BS{rNi(fQz#4{WA7GP?;cg& Q)* z98l_2aFh=1621$hwM>`gzyj^46@WB0urm0K_F#X>VGDrE1x2xdd_AqlfK=A81Smxp z`huJ=?lg9T(bHWmqz5>^4cikr2b>Kf8%Om5$LnEFM0NzDmOC`029Rld;iv^P<~^AU zz-Cqh=LN!H_5$b}szLZ|&Y#W2kXS!9Iiwf3HRSe?!@xu)GO?&T=K{2)DRm)bUh1sW z9dID>>{rI^pjG@Etw%u1dWU;@fb~Sd$%41Qd_C{p+$rFnoP8wg1Mnwge~?iUd{G&d z(`tfu=-CHTtAnTN+4*O>L%~mJQ%+mp8JfEG6yUitW&WvDD43Yq?9_AMS(*0J>9SC; zIc?YJw%|!it9bfd@H}<))70C+s~J|B3BHk;jneM}-; JR2o~u0bwPQT9jD@&RP+rqUwR{G+H`716`^&Y75XU`n(PUd}NXiTq;Xw zHW$QxbX@LO`0xVR>|+OzqH9 Cg{I~n(f%T>TVgE0nSpEFtfG%cf{Q$xTIZOJ7L5a#SizAAI^DXBS&MCkG=KKla zMSqyW^1k}4-k=rXRC0 *MdS8>A*?)GZTn5PjM6!J;hPrc5=x2m!rmE1oJ*522%|;#sU0*$#UQ=KH?=P zmmcd%8vxa2Rp?W1IyfpgiaWP~wbg21Z7J$rw)x8`6aq8!Go1>_i6y(1ss`;Q)q0@V zaQNZ7{ax}i;rMGg+aorEjBvGa?gz*FA;Uu71jpL&(vbqLW)TCUZU)DTVR?~vgHg#n zFys@EYmL&z(?C8qQU^H8CRPDiT1xu^N2Lv&fMnXrcp&1OXVISFUxwHM;O~kR%$c3V zUbX?JS;jmdnU3@ZnQA;?xIn5H-#W$vb)9wGjlt1}XLL5`z1B3#31(OG4(kBK+!+z! zDGo7xqicnyfmD=r#uuPB=rqmb{F>gS!j)Xfm0+&(5A~mf6RlGcv!_COGtWv_3E+GB z1-2 ~{Z7lz5(%=LkMtL)_*VQFX$Hk_D;^QQ1-PBJ z=>p7Q4s(jSlWmF$U7!ne0XTnj{otAlwLY$TW7$qnt7fTF2XBM3x91P5 c3srn5o18U zk!_+}dINtUH*f dS%)zP^UxQZ@xD{7PfGcsC6%V_Xa_pB+n9!|fVxzu+Uyx&_>j7I^e z7u+3jsd0)}a9C2qItHPiyTcsoz!+k@;aCc6V;kFw+C-a61?{fgwHriKkDMGC3ni;Z zB$zjWYY(lxE?|`2&r~2?xA6;Los06fUG_G%0I>N#xSv>^3K4Z(4l5QyqeEwgHV5{w zn_We1+y!Vt6PkcO!@t@;5%QXQGp$d+jMwop1%OR_9Bfwsa3(kd3Pwl&&*hx|C{9dZ zG#jM>=rz`2y%re9OF9||CG=m)uGsw3*})EWfTOSRgz*WuUUV$R0Y(o>SsB1Ce75V} z=09P_0N7j*d643K4iU#)-&t`GlH%^|-Vd~57rTK5G@xNoTlpI_q#+H#_r3QK-xkOp zZ{6i=2u5w!*3ea;&+1Fo9l)EqRG$L9&l+hp0=Dv^-Vgk&?X@ &y~fX#)uN}|~e zZkO?xJ_(Mpj$_6rKsxEc?LL<#b*Muf@HO<;_w@nKT;t2IufX+gu^GijK*;L2s1n1# zy*jRV!Xpr}GA<_J0dS8m_EN%TaGi=>9RD4-hDFaQ_7FG^MRku|4~`=d%OY2UV{rJG zh%R9G!v=@vfzcwQYsh0D)16 `@VWgX7}_eulfUf@otC^rz; zj^zSs@wmJNKyAXn@6+zm7fvtBvaE5CyE6BaoQFZ)lSwkEs5{r@lHq!;=X&tf@nw1E zLe3KJa6-VJNv C6;uHrf z$0~2df|+i8Dt7`M<%qEzq`z#YHOPJ*GD-oJoHxoq;3>Lt15k$Hv A4>`Uj_f2lyU6=rVyq}gYUhRi*?x)3AP8o=EC>^H*md9#Sb*sHhLA8e#+St zQb++K+Q7&F=Of1J`Y=di@^n6EE=M^Cr1A?(fy4T>P5}<^DHDL*Oyn702e0X)z)}5H zrvg5*$N<79K{C)>CNUQnFE1HeKz2FWI%a`nJ6?1E#v{%Y*JofPyWe$B1IM_Ktzjj> z_&7vD`+y@cv~~CzaLfxo9k~pgH%ERJy&YU*qMwib0uI-*UP}HHwngsWd!i5c9`mMp z`hpCQfikeDJK3hl&~w#BPp}J)Z#psm)MPmLUVdC`b1>HtZnOhRU|iCkI-4TJ_5j#i zm=&5sb@1g|d!+%G4_H&JJ%Gsw5{ufn3$Th+tOB>!^}72rh#26y&WZxYaW88DKl(q) z-@t=cu~5JtOr@O9X^sQg9AFoa#U8c*XM#D^4gHc3z$5MSMFRO5x&xW)mTo}0zN(J^ zXQdt8KwLCnD5MPVt%!OAmaaI^?)YA4+56~MM_+^rS5%r>xg)5lrkdEPfd45JR=0dt z-jnyB;N$#tdHJw0Zr}FPOX1)Pz9qG$fPBq;j0IZ2|B>gy<{ymh0kF9sI+-*&L*5a8 zH6sCh8+=v#F9KyLOWC5f?gA`h8Oy-E#l6wB9>O1TuC?9=W1bAu!@wy#f3RrEpG#As zIRxgjJm44y%lo9}CpUtHjn_`x@df18&ABe;UXU!w6%Xgj&D#8}k!XpQXpreLNnVFN zo%giZQx_J^IMykA7^EN9>M_kgA}FKvi`rV7OC4JP*j$+R$)P{wb@i7rK7|5j!R-Z` zfx6VCZc!WepV8;_d3_#2Du#{^jfN7lBQ4`jaBr7({&v7bj?%cOt-Jshih$fqZ*2g_ zzxT~9Rsb{K-StN3Kv?ct-EQqy;P30(?;8k4lo4yh7q!tge-;udp%Mx*TAr5Y;AEc@ zhmVbfIo8^&!_#1G+k)AZ-vd1>QARZ&83(CFZMDs%jx7LeF3c28OG_viWMk;In+~ z{o{aCQb{Xn<1WC{Jk8S(Vup+hs|%%z$IWzK1Cio5>B$9cp=-FKsEzzDNW@Jxunjk@ zVBKxm&zDVt4_;keHUCyvGJN?vD-T1?=Ij+&Gr$;W++*AfMnj{K(HNwM^pGCdO9Yo2 zCMG6GJ83WNLGF;- n697QvT~{q)27Utrd2r|+xs8D##V6{5O=cqyr^z%I3G z^WR_#0GkUFf`K0jo;1T9T_7)|;6_g#@Hj*0MPN7krTCy($2!)5^Jixh=TA_ nFc)pBPqp?;6I_A9f#oOzUeC~)rD6!FRAVQ89sXJtH}$W zhxJM8kFNg$(i)`9K9dOkBfh%c5g^-ThCB|&4r7P01B}VWWMeWIR~c6sSAi^%C9(wM z5qU%&0U0ENWDrPmX)et{5+zX*IiG^o=He18@*_iKs0;;TqVb+F87!wc%e)@;?%n;w zt_tu;^Lh8I9SR?HJ7QFhhNI6}KO}zwQk$|QU=RE@zY9AE(B{I7po*@C%+=mA?%UvO zQsy_gaiFL5Ve4zo&n*3c8UvRK>Q%3LLB<>7jqy;fYni-~bD(Ccn8_Os!}iB>@36*z z9;Us-f?UeW0dOv8QNEO_yaT>#w2EUQtP0CsUm**2ciVP-ZZdqg;XvY `+*#uv;MH@z6P8{lIybv$ykkFkUwn z8pXkAW!r1V&>=Cu0)GI(fzD0 kDk`kdKyX` zPMnn31)8=h=X7j_h2zh3%KZvbD*8W*N&qqFqL;%yX&;IM hvb;UphVe- zxs-+QDEFP*3L%4?Q;Z)VvRPPH=NgDw7~01941`Szndv$XabshOMf8Wbx-nNpzX5Um z; 5 &lzwG4jb$=i`vNljJ}{R=nD|qGxV3RmeBOcD;Adz zg$Bmn-iHRl{CcTPBewy2$s-;v>8*|bc47nun iI958KP&2eNSR}; zDw7P^M~RR86wG^h*zp?3y9{L<7;UJi4mjuTx3T#H*aE=jg2)3@W<7Y`)Q-;jaC}L| zCUYv}-k-ZX_YDY}82)ACm!Ly+s9uWujV&xJ&{lf2_J*q0Rq 2 z(AlryP+!l;_`_hF $;r0dq%YAE-M9q!`!mCD4er(i#{ft>_8*4y|Mr=tA1bFJRTDqOle9D`{># z1L~)jd 9S))2gk2Th89H`paYwzY;J~_+ z+g9BLAAYyDZ|FEkd(PiA;v^WW Rp+FLCbtKS= zcG4Q;W7=vrAW7P?AE-fFrUUJ`g=@jTLF+jlhZ7FJ#8-gt_NBiZ_Ymw@xBm30V{oKi z>dKXo&^P<4jQSx^W^>t1 `vX9^SVB@Qa_b7EPj<4a&?Cj4yV z-0v#~Ih#}?8i5>;(z*~xrk!*LlBrB5kXNb35@4xxqzOnh`fv;+nYKC;NT!v(4J1hg zS_0*0D=&dsD78V7in<4E{*Ku3yfzmmc!%f^j>||m;?21?ygD5F@zi%Ik)Wm3ue&%G z#eB&UTzl3{x?a~pvae)8sR-!bq+`ex`OvRIx$h76h2nc$ujHHttDTOObl@=g#1fDJ zm#b&suizSD*aF5x>8U=j4#wuy>NzUGjDK;I4yrRGb2zty-{u!+UUg->GdUmw{B3 zno@^LE{OF1V+cbS0$~-xJrP@=rn~ggsJo!V5o1aEbHG&`<2jJtM6eR17ZJJw FA(umRcW|v)H|u8I1X4>{OK+&$wn}1Eh1*;9`l0y< z7`d>~Ga09#%}>P+9jpxzGmLs3Cs 9q9(isU J=)R~ #>dp zfE0X0^3N3pLD#s{m!{eT&X%%XihdA&dG`2ltq5s7(nh7c8w?7JC~9Lbz%x9 Pl7x)!yOe z-JB1bzT7Ab7VM^7wF|J4!zdIVobX 0p?2m&iDcL-Ip^jY6+YgaeCL8Yk(`LLYbmA@&W`?Ogr{DVjS%tw7qMov;yZ_ z^f2APO3kNcQ5*R;z)1vAz#MI;QQ%L`PR)D-m}yPYz5qlLUDQTi{@4QG;!%c*po!*N zRvFMK{_Fgo0&a>)aX>IG#|&uyA91)S08M5apTdU2XIsRNhLr<0r|w?{1>_IPp9b=> zjFquPZR{VQ&@+&xX_^Ms7HgBW9%Q(DBwHc=-r} (u@&MO@jQJ31N =F< EPZ>a5j1kCdKkz*%lDXAhB@Do2tFW?ECKqAPK^kYBpnB2fLkY^}If8cse zr8?*;xtfYVQ+yHwQWJ~ze_eOVeUiXD$os(hJR}S s7`9}ImB Vy`xsegb9L}(^hefdCAU`_k9Zxar~;sd`--ZL1=wJNu~+*Sx*8}UozdeDYi zU+eMrsU}zGAqW;7D&(9nxJM!-7Q&W=zaH^Al+KPA8JP^Fwag>sc0 B!HGW$c?nzUJGKY-KWY42uU0jCnrt~fIePV~(9$@>(X9+Led3m~O&{;Q6) zkecne-u(<@rTC}2AB3z*{_&y1AnzONYu7RG9?-j8qrmfy`dr1p{Fy {$t>u=D*Fq2;6fWC!B4H z`Xc`ZUc7jLdt?j~!MWTKCiTE5$8xI%a0owHMQ!9|f&vag2?ILH_v{4oD$lX}*CD6j z;g|P42EOd9ni+=xq#vIG5MmGf7Y|zi{22sPZCNS-eJ!rB7@ko#Z z;*(OK$Mv`#FKXleL<)sLre @P{Y4fhe6IzZ*hr)j4qxxq$w19VMZATz#nhj zCtpIoWz}`Ag}fX6`<#`)`-FAWNCf{&^mCjBYo6AUs=yd#OApY!9F JHGn3-`l2@SlE%UU5@<>XpsL(1qrg8Pr&?Az h-z|%!SqmR(Y@{TLo4R zux_(9YFqGsX$~;&0pAvLx4${~@9>{BmxAwZvyIgSe24sL{+(c6VQ$e4pfBhi&4T#3 z(I?^sjHis6j@y9S7|rCOzF5D38#ivy*BGTYgMYI1qmBS`9oHE(fR)^HE|{}+Q5$ {w8RQY?i>?QNKC+jFfP;{r^1U?u z1BF(trWI2mca*u*T^r`CJ=`n)7}U6W`K=qDgzL+8yDIK02-_CEBm5T7E3}qY=dvvi z`==AEKmY48%Q{4d=#bxd|C2n=YalKeD=v^?#=}w!Ts@6u?)~7p+cn9(7pO-)ZimS0 z<%nDl3}q-ofr|XX6hPQUC@`7nECk}oqaP5%HADivNarjthsBHomav#5z!?tcD$tGE zi>bg;zM?LWM0xcA&* CKf1kg@s#P&9z|G zDwvr6Er{QF$TtFv1+GaUFM~96Hgrq_;<#IO0Zs`E&M=x3^$GnO{$L8&(Tvota4;c% zYO#l4`qItAbHku)i=-;+M?>p&E#^1h1V#hLK*#f-pXqe{luN%F+@(%%p!{`A!hd}G z5j~b3kJ0LYp?}C z(NP!-SA|-@cAnSrp!fL?`gVcY%bf0i5~Q;8sH-~|lU?21RX|!e9&sK886erT20|%L zGH{7(2$KpDP6p`H#4`ZaB%Ixwd;+FUT$Xgmg5o2Ko!s#l)HbiEdBwFLRi&y_1>K{2 zbPu)=xLgR9S^hQutpNFtT&e?qA=Rl)b+EQrGtKM4n`6GHnP7$!>v$iiFJn0a>}OC> zoBF2`OD!6JTqW~l59kz~tJi?PZQj6~pTN`NY{!&X@IIZMoiYThr#;6!-2r4sV3&mS zl$(IUSSfqpFA{74aOn^poY~i+J}_G|^(^RYpXIFwW(WT!Uj)b|M-68&FiN=$cQ(ia z&M#a;LEe|nk^&TyIy3 i8AcF~%4exPo8}y|t^!_3I9X4cLIs|5}shk2Jo6LWE{r3_>8~}A_ z4E(HZv^41B{w2O#Fz4hq%zF*Y8oA4|cY@j2^F~2U(B=NQ{zPE4-mTq%;xwWS5KB$! z0}cuMONy2Ff=dE*>96-frsbE=j_`TpfkP$Nz^66m_uIG{j=pwu_>npwb)~k{1c{e; ziRaRv3EKQ4k^AL-xgR{w6x1l#2xs5OA7Io6|H~|JW&pj2U{z6D`8&|y|6D{83smI} zc?9SpE95lrgSOK$U}hEU&ASc?mY#8)I0@N#2b%Br9 OQ7C`RgQQ-F`?vZmI(!=Zp(C4@pfCBQ1y3_tX*aG0 uFNnzKyNuFfmD@y z*$Mv2!#0yk*7 zRoy=Y*r-qH?H~y>p*;{!Lun1Ti6tK3UtI7PV*vJ|IKUXrQ0)q5yxvNYCE=4#_nb<+ z9;Wr2`{3HiaCG63Nr$fkaf^r_q@q-mir7NH=F;MMp63O~d^T%&RtTKBt6)Zmg83z0 zqbo=PPBMzx$O{lbX(|A9c|s-t*T`}?11#q@?EvNro*@M_!BZz~W6BW7>2`SS-VDg@ zyZ6oQKS5s4V`C0f1OJs-k7Z;66|LvYC;<6JwgSj?+z$Njnfd}tORA4@D==9W8^yu# zV))UBg+NDHD2D;?P*BvJdHG{60bD$eun*)G=Pc(?kUJdZolU{=d#89l1j4N0W+q^9 zg#7>{pWFZczj+7(nFpapF!g9)p!`rz>35*`m-@DXiT@X$0W9%+ZF~<>*HP8^GZ-yh zSGqhPPdVRr{s 1c!RNx8%ML8})u6kn(56}^gPc3L4Bk*CF zosaV^`0HBJ*EE6wpI<%AHv}r2t(ae_3`jTWCfz~5)o=A1>|FykMMGh1%4fX6qmc4x z>csR`aB8TxXXH`Pa(HDY-~#<)LjRB93cBpe(vzD&TFNJ~7>HsEUxIeAdRhy?Jm&q* zQw98vyzMzH!S_V=t(jxN|3L1p>`Gv5^49be1D5GV>jnUZ$m0N#LpGcr@B^^`f3Rl( zequI&e#0kV{1WO5dl|y-P0lX61mt$-QD+UvZn^)%oj(CT@xJy0IJZm6=6}Ez02dEG zevnvdNbF6WCz I2R~4}}!E?ppt*m2NRG!FY()+6#_ndN##OgAd-= z)yDA& 0+I 0_q@Zu!8qn)}ulQC1&uY5027t0M z6hL|qXk#U?q`5Tcf)D*SyZ(o+3_hneupB@~=|GUy&R(uI5V9uDTVer(rYF`dRSuk; z!=oaj!E0ttO{)N8(k|#xg?@k1#r_9jF9BRU0=Kn=A0Lp#KDLA0E|ErSFrr+Kgp3A9 z>9A|UcY&n4I=im|hD!_MA%MX9fm0j U*xq-wFP;xht|~g0De#z09@Xdm*P-)^;!_=AX=~57rUyKu>p2kJ-Uo49w9hHJre% zge0IWy|@`jqAlGBcoM1+*dH7Lgy6sed7cs47S3GjO^BQUABXHKSLSti^Q&)5?o5Ey zBUd+F6Ahkzo~;G#z_`ljVsz)c0I-(`Z2kh|xSWuakbO($J((k5`zI%_@kT@X2iAz_ zn?PJt)vNxuLn8!c?y*1u&7=cJJ)Y%#kj}D5jsjQ6Bl0@vtJWH899TZz2i{5G>zVyj zW>qNIcc$yf=8*I5kqP?_LH6PO#?A*I`_qFFyZ1x>(UVP%z6m~m)~WQ4pe=lUZ#Zz0 z@AWePSuUpm &c`5Ktl!s4egx1qS_(L8%yL`-?uX*CO7w=Phby0|H5DSBEH|z4 zU~t|R=8l*L>|{Jo0jaEGDgPQ9U~>_$yYkPX&}Hc1teye<