From 57f47a9aa4f6b066063761fd69384d5bebdd9869 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Tue, 6 May 2025 17:29:20 +0300 Subject: [PATCH] v. 0.1 --- api_app/__init__.py | 2 + api_app/grpc_client/__init__.py | 2 + api_app/grpc_client/client.py | 90 ++++++++++++++++++++++++++ api_app/migrations/0001_initial.py | 33 ++++++++++ api_app/migrations/__init__.py | 0 api_app/models.py | 25 +++++++ api_app/services/__init__.py | 2 + api_app/services/scan.py | 66 +++++++++++++++++++ api_app/services/vosk_recognizer.py | 51 +++++++++++++++ api_app/urls.py | 8 +++ api_app/views.py | 77 ++++++++++++++++++++++ api_project/__init__.py | 2 + api_project/settings.py | 69 ++++++++++++++++++++ api_project/urls.py | 13 ++++ api_project/wsgi.py | 14 ++++ manage.py | 20 ++++++ media/uploads/audio.ogg | Bin 0 -> 98293 bytes proto/text_service.proto | 18 ++++++ proto/text_service_pb2.py | 40 ++++++++++++ proto/text_service_pb2_grpc.py | 97 ++++++++++++++++++++++++++++ requirements.txt | 9 +++ тесты.txt | 13 ++++ 22 files changed, 651 insertions(+) create mode 100644 api_app/__init__.py create mode 100644 api_app/grpc_client/__init__.py create mode 100644 api_app/grpc_client/client.py create mode 100644 api_app/migrations/0001_initial.py create mode 100644 api_app/migrations/__init__.py create mode 100644 api_app/models.py create mode 100644 api_app/services/__init__.py create mode 100644 api_app/services/scan.py create mode 100644 api_app/services/vosk_recognizer.py create mode 100644 api_app/urls.py create mode 100644 api_app/views.py create mode 100644 api_project/__init__.py create mode 100644 api_project/settings.py create mode 100644 api_project/urls.py create mode 100644 api_project/wsgi.py create mode 100644 manage.py create mode 100644 media/uploads/audio.ogg create mode 100644 proto/text_service.proto create mode 100644 proto/text_service_pb2.py create mode 100644 proto/text_service_pb2_grpc.py create mode 100644 requirements.txt create mode 100644 тесты.txt diff --git a/api_app/__init__.py b/api_app/__init__.py new file mode 100644 index 0000000..2126d76 --- /dev/null +++ b/api_app/__init__.py @@ -0,0 +1,2 @@ +# api_project/api_app/__init__.py +# Пустой файл инициализации для Python-пакета diff --git a/api_app/grpc_client/__init__.py b/api_app/grpc_client/__init__.py new file mode 100644 index 0000000..48f03f0 --- /dev/null +++ b/api_app/grpc_client/__init__.py @@ -0,0 +1,2 @@ +# api_project/api_app/grpc_client/__init__.py +# Пустой файл инициализации для Python-пакета diff --git a/api_app/grpc_client/client.py b/api_app/grpc_client/client.py new file mode 100644 index 0000000..2b1d7fe --- /dev/null +++ b/api_app/grpc_client/client.py @@ -0,0 +1,90 @@ +# api_project/api_app/grpc_client/client.py +import grpc +import os +import sys + +# Добавляем путь для импорта сгенерированных протофайлов +current_dir = os.path.dirname(os.path.abspath(__file__)) +proto_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(current_dir))), 'proto') +sys.path.append(proto_dir) + +# Пробуем импортировать сгенерированные протофайлы +# Если не получится, используем заглушки +try: + import text_service_pb2 + import text_service_pb2_grpc + print("Успешно импортированы сгенерированные proto файлы") +except ImportError: + print("Не удалось импортировать сгенерированные proto файлы, используем заглушки") + + # Создаем заглушки + class TextRequest: + def __init__(self, text): + self.text = text + + class TextResponse: + def __init__(self, processed_text, success, error): + self.processed_text = processed_text + self.success = success + self.error = error + + class TextProcessorStub: + def __init__(self, channel): + self.channel = channel + + def ProcessText(self, request): + # Эмулируем ответ от gRPC сервера + return TextResponse( + processed_text=f"ЗАГЛУШКА ОБРАБОТКИ ТЕКСТА: {request.text}", + success=True, + error="" + ) + + # Создаем модуль заглушки + class text_service_pb2: + TextRequest = TextRequest + TextResponse = TextResponse + + class text_service_pb2_grpc: + TextProcessorStub = TextProcessorStub + +def send_to_grpc_server(text: str) -> dict: + """ + Отправляет текст на gRPC сервер для обработки + + Args: + text: Текст для обработки + + Returns: + dict: Результат обработки + """ + try: + # Создаем соединение с сервером + # Для заглушки это не обязательно, но оставим для совместимости + try: + channel = grpc.insecure_channel('localhost:50051') + except NameError: + # Если grpc не импортирован, используем заглушку + channel = "dummy_channel" + + # Создаем клиент + stub = text_service_pb2_grpc.TextProcessorStub(channel) + + # Создаем запрос + request = text_service_pb2.TextRequest(text=text) + + # Отправляем запрос + response = stub.ProcessText(request) + + # Возвращаем результат + return { + 'processed_text': response.processed_text, + 'success': response.success, + 'error': response.error if hasattr(response, 'error') and response.error else None + } + except Exception as e: + return { + 'processed_text': None, + 'success': False, + 'error': str(e) + } diff --git a/api_app/migrations/0001_initial.py b/api_app/migrations/0001_initial.py new file mode 100644 index 0000000..1cca455 --- /dev/null +++ b/api_app/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# Generated by Django 5.1.3 on 2025-05-06 12:35 + +import api_app.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='AudioFile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('file', models.FileField(upload_to=api_app.models.get_file_path)), + ('uploaded_at', models.DateTimeField(auto_now_add=True)), + ('processed_text', models.TextField(blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='DocumentFile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('file', models.FileField(upload_to=api_app.models.get_file_path)), + ('uploaded_at', models.DateTimeField(auto_now_add=True)), + ('processed_text', models.TextField(blank=True, null=True)), + ], + ), + ] diff --git a/api_app/migrations/__init__.py b/api_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api_app/models.py b/api_app/models.py new file mode 100644 index 0000000..74f9482 --- /dev/null +++ b/api_app/models.py @@ -0,0 +1,25 @@ +# api_project/api_app/models.py +from django.db import models +import uuid +import os + +def get_file_path(instance, filename): + ext = filename.split('.')[-1] + filename = f"{uuid.uuid4()}.{ext}" + return os.path.join('uploads', filename) + +class AudioFile(models.Model): + file = models.FileField(upload_to=get_file_path) + uploaded_at = models.DateTimeField(auto_now_add=True) + processed_text = models.TextField(blank=True, null=True) + + def __str__(self): + return f"Audio {self.id} - {self.uploaded_at}" + +class DocumentFile(models.Model): + file = models.FileField(upload_to=get_file_path) + uploaded_at = models.DateTimeField(auto_now_add=True) + processed_text = models.TextField(blank=True, null=True) + + def __str__(self): + return f"Document {self.id} - {self.uploaded_at}" diff --git a/api_app/services/__init__.py b/api_app/services/__init__.py new file mode 100644 index 0000000..ae36dba --- /dev/null +++ b/api_app/services/__init__.py @@ -0,0 +1,2 @@ +# api_project/api_app/services/__init__.py +# Пустой файл инициализации для Python-пакета diff --git a/api_app/services/scan.py b/api_app/services/scan.py new file mode 100644 index 0000000..513ed6f --- /dev/null +++ b/api_app/services/scan.py @@ -0,0 +1,66 @@ +import pdfplumber +import docx +import csv +import os +from io import StringIO, BytesIO +from PIL import Image +import base64 + + +def extract_text_tables(file_path: str) -> str: + result = "" + if file_path.endswith(".pdf"): + with pdfplumber.open(file_path) as pdf: + for page in pdf.pages: + text = page.extract_text() + if text: + result += "
" + text.replace("\n", "
") + "
" + + tables = page.extract_tables() + if tables: + for table in tables: + csv_output = StringIO() + csv_writer = csv.writer(csv_output) + csv_writer.writerows(table) + result += f"{csv_output.getvalue()}"
+
+ # Извлечение изображений
+ if page.images:
+ for img in page.images:
+ img_data = img["stream"].get_data()
+ encoded_img = base64.b64encode(img_data).decode("utf-8")
+ result += f'{para.text}
") + + for table in doc.tables: + csv_output = StringIO() + csv_writer = csv.writer(csv_output) + for row in table.rows: + csv_writer.writerow([cell.text.strip() for cell in row.cells]) + table_data.append(f"{csv_output.getvalue()}")
+
+ # Извлечение изображений
+ for rel in doc.part.rels:
+ if "image" in doc.part.rels[rel].target_ref:
+ image_data_blob = doc.part.rels[rel].target_part.blob
+ encoded_img = base64.b64encode(image_data_blob).decode("utf-8")
+ image_data.append(f'pc=KxD=y4iRzN&0^HdQx?RG^<$W`^QJHxj` z?w1@`2rRXD`9CDrLhe;G<7Hv$QsIC3UWfY8*k9VA^RJ5qiNaL@gv^|==+ z0)M=O9=>urAurnUs(qQuc=m|{`pF|xAD5If1Y|cqZt1y|+?j3OB^l{UT!0S_#88xr z*~FM7cCIV{4hlJkiZ4u7^jVQKCT$e11aT{^a)$4@vAn(jspaQzIH~B3g`XY7LubRc zNA}fxLSC30UDa?gfQx#`gOURCwW=gko3Es4k;3_H-Xwh8Q=K)%g57e +w2UyWF)lC#NOI;WU->Hao@6Qvk40Q$=Q41(ycBe$YgflZPR2OvZk@GeI z#9-&pXLyq6c;|jOmvH5D9T000e0nz)&u1Cw;IVD8H!n+Z
8v!^nbG?3nVVOk&TtCaFT&m-3 zLr+b2z}KGY(C1-Ep!8*bcf|t0{14lq@7PgoFuGONK43nCc7EA1I-? 16zJ87BTzX-G`U^?*^H;1c8QYsQ{!d$= zYiji{3ug!(Mp{DkQ;;(Bx=Tgus3`ogx$t2VSJ*wJT?R#oR}cH9X796jLmZ#wEn^s= zeQex8?0fHt1`Cy+S)$vHi2mWURdovfqgDV;hUf~RHIdqoV64+bK@|E22 $(4`M+0JH0;kW}@t4WOS_~FsZ zD?MUVNCoYm5WO{9WFsK#`7yfZOH0fWC8qbpZbM+V$gnR`a#Y1`7lAfek)OpJ561 z84iMXwp-LDf(pNGH{aLcBJ=NfM*awfaxyzT*7#u|o%DTIwz}T=iMI{LK!6$6oz}5x zOs#L!IgJB`Y@_J`Mwo@K`Xn!#xEh)>;UBhbxD6IPobOdly2vP9+3#4K={pTb*P0^1 z%ClqJS4DgpB2d4SFcH@conrGR2PgSZ+7U08fvjpW=s!Hff#aygJdjZ9g3`@8k9*u- z-+r{J&J;jC(G@`c2;G|Gi8(EFblGy1F %9r7|cyS5Yt6eJ@@cH z;Wse9Fb<8d=mfG;zWQLzi9_;`&<`uwub3*i9YDm<7KqGJGHs4p1DQX6GOufy5vbAa z9yxO7D$ER=?!d_;FY7pKZb;mTdKQm+YK8gzl}MBWv!FF1ln?Q5n0N_6RP{p({9tI2 z$*+|yCN^}NO1K~T4)^rg@9dd`U$^ ;LFyI|`KuiyY*aB6@@j9Cpy(; {#(Xmrohvo{`FwVacj+o@gwO)oF~vWOlTVH=US&? z8;JvC->p0uHq&Br9;k-fa@xSneMwBKxaCV7Q@OEEDW1ogHAEBt>9uI3{#dXw(>HQN z6d2`(+I*!3jX@u?Tn7f0fZ}%m9J%2!QibYHmcyBRDy1^zGCkj2JqbilE{8zPIT*Rr zW4Roj2}J^}c~gAM2}|OZfEhG|biCpyIV&BV9;xo3*|H)maqtk)i`7om9cnzRZ_Ih+ zmacf|)=Q8^leyxi!oQ<#+OprrLL5xad zVQp@LdsEbDf-t3fe;kK>PZzQim6S?JqR7YrY2a5CN!+*JdL|E4vE@Oa%O6^#i;2cF z=$*St22H82>X}o(M6E0xV2I`-k=;A7=P{x&k?92GWL2HP*?Ro2G79M_8Y&K5r5g*q z{PliP%+LrDw(Z^xR3Cg@3D%-qEb-2;nY$9w2u!tk-Zwd>4*D+N`MM1Ig8b!}p!(n- zR5_d3CGlC_^mCz9`6=KR-Jr!kYlz%$^=*$4O5>zM11Sfn{^)>1Y4;9Z S`yDWfq(XSm+za5 z^dBVhFt8Dz`VqZcMB){?S<1?WnpXx%OyT{@yc5ZcK81RVEOwp`s)L17sZks+DG)4y zFY;3WV%nlqP=Igkqh6eGHE&gYycDRmIMy&NrI0>#tyP1iT9CdF%rjzVYoT_^rW!tn zi~21h%x`BGwS?HiNsDOI*gZ>=#0+fVtx`&I$5X?$JB_8E_0}RrjQ@=aIKl)f60 MPPxx**cPX$~ukCaS}_x4y#Gf^2FRQ i1nqQQnb-L;R`s+N%!lt_PD=36w?KjC2zH((LWK MEzPW~9$=v>Q*M#a3O-bD@H*-|wc=X`%f?*E| zB1gLz5G+Yt^LBWlKvt)PYUC7f{xV9*9cP`&3DO_@l *F_YZHCSzfh5l;rUfV5JDcyJck#2!lXEOaDqY2{F>=;r$K80&% F~;xpm*kNU1bkmF>4IBZ&r-yNTw=aO?VVk!E5f|Uf6Q!? z++nPFM$>JLj!yAr$b=bBhU7GhSti6y0iEo|2%wlr#>Uu1E1PxWao^7zS)QI`$yuWu zY9tcU5R5l!mxTX5h~NO-ZrkcyAXqgATBJ%#b|>w0g|n3t _` ie9#nNw1+T6QJN7V@$65X #f)+jSu)FXxFb t7oeTP-+k4OCbk*}2d zv*6(=eFxd2$w >sRXFV- z>_TF;DGwZth-AU4JVd>WQ9Qjlh&^jmI?oSmi|@?%Iv}3{7`Id&e=K${aBaTIX&|4% zku=NKsE(5Vth!s@Wu%}2e?a{HIvAkDXbDoq*S|b>%MKi @s{aKh4LEA`!?szS8+LGolpmA6AWpo z>x$Ik*zVJi%wvw~ ^U3uf(x6jUKsoIwI0!jmX1N!g`@mJQn&Q z_X0<6;k96mtQ}2|s_xKKmySmYbZZ#HZMyI8l-HvVTt014KETZ#MZz;PD@8dxaLrrT z$%%n=p2Cq?r*f#~Yvs)-xgv&d2Ean8uE94I6=FEDJNt*7g#4%%)sM3{Vx2{3)%r8| zF^MTM|8VRiZwmGcW _gOGnZX5ELT?zzCLdAJkwn3aGu>@yqVnN3_YyAg>PKd?WHQ%EJ} ze->Qd{1yXtFkH*TcF8GbAKcOU=@6yyQ|G4~sfV_^l9df}Rm6xv<-}Y(+{}*Oy-OY@ zYRL5ur5iJw*J{RnOxyQ0IOnSO{9e1ovNQD*G(Ww;% nrX;Z@HvV*oF~h&|F=Va& zWLHwmlvIMARyL;kH`|?N^vjJkuVOSeAdm&e>sdmNIZt4F$M8>5(fO0@r;wbAuIrhX zPdY{B=|CWMBJ8EZh(`%YpdhpDMdSjBwQ8;ECP_*TCKhE@??+%4x1=7dGcI d>3JArhbB|tEHDA_nyf8L2{Zwq#}++RK- zgMve>VzA3-rIiC;Wr*tM3aRp^v=x2#&0&vbBIErzuaL19zu>lf=Id6TTJ$#l`RttsKJQKi-Qi$kw7ECB~B^aUmV~r0^OTfWQ)q zF9BT`NwgW!#%Sah!HHzaF{KY4BIinT>nM3=tvX(^hM=~GFN=&|_FpBKt)m32@kuY0 z-;kpoz1MRu+Hu9tYLiP2HfuJm?8A_^;c8=eCLrc|k8s{Xy9sQWf$#kMT5RN+$#XuK z_I xWJG#Qk3|*1%F0e;F8EoII8QC3F|!D|$ |_QQRG~9 Fjk}c8OMQsQX!;XsoWRzXh{CP_(VE zG-GXj15pbOqTI?;R$ds8-G&ASiU+3d=NHvk3M$=96#^Z!35W|Kj-ATfn24^4ag9H~ z5yp$Yc|C}9^hY-1gZ7{mNBXjJ6^RpP@nU|F36U&>dS(tZ4(-n1WNvGhF{zp*b1-`C zUPUn|1&XXwRy>}lvc7-`hiKzhy}2ieR&5RPnq5iF3O%0Dgi;vC|2%di+a*Z68PKPZ zy_2vn4^-5LhxaZep=rdGq7C=0x_Pd$e0dS3@iXD3U;ag+2#&lwwJUQu4-|apbze|A z($1@;@6}q4XrBv?`Im%7Q%+ak3j>^v+M&h#9>1!nv*!#sBSu&J?%r`9UELeE6=0!@ z*>Ig$rulQN5ND@L1r3T)Rh`{Dh2K>+45^!eyqNqhg `7^&zn|7~-q;0VTW^p| z-g>hh`~|*d9bfz?0wQv{27bTH7;Mj(`wJDhW+MW7kzH)a#9q%#p3($uA!ax?kQq}b z`Y^P{!M%0M?^8p)zrppvClG>(er=#O^0iVK2Pc{?m;&MCss_}Jf|6Mk%WO-nI)}Aw zk7FRxLGZO5!k({6e;4Gc^e>|?&Tqha0;8Ar?b+eHxA_* 1bIpukqdATD$FN_@;o%ACaI+qaTd9+|7f7sXvdl7-!oR&1u}QT?3bjWt*|cA`Pz ze~-LxI;vKRzF!V>IYsTkQhvPZPU^LpRE*_TX1y89#q4 K-rp1wu%GyR zpyWZb2a1Lq|7)hk=;+!)W6RfRkqaM $Vz;%^+RQY_qDb%k;=KCvgHFnyQcFXM*)c`Kv z1b7Gi2ZNbB<{Em}ne{6->8qBS;$T^ypM9R7F3&`XvE0j7DDcdwaVS#XwLf`Ejeg=j z8yFjevpn4&U!SAgZ2}ea4NmxWdmCpw4TcQBAz{33n;)Ftj3Tt8a#~gVe!G;!K^VTp zUV}v!2z7o!4lP)GtDb&*=hvKUkt(c(0{fj8m_ h&c6jN8EsQ>=mO##-4e(o zWi(b%1k~dd(jZ+@ZhGK-XPP|m^`C&l7;1D!hGGXF*D9GOH~JR>A1rMu9ottj$Xh)^ zvAKq^Q>Y+JK~>KqNhh`IZbpwrB7$mLe%wW_#0XI9 D6lR~WAw>!Ym|6coX~c&{ z-VGD{h0Hph(lPZwJDm#3AWbS*Iw?XUsLP3@kc*J*wdPzF&!9u>2NQx`#mM|Z(A6dT zNpu=BMmB2b1{f8w6=_^13a*|c8K35o5jS_A%(K0J`F6#IGqe5t ?D^D6MRk z++Ka7@vQLdFBYxmCGJ12i?g3&g37}I=M`>zgxDWJDlI&}5PetYG!|DJH+9OzvFGDe z(UE20v{P<73cYXYx5YCy+-uz#nLYdGLbDO_`*exr=a9^Iy%vL+7)Fodp7=5@=ZkIz z9o$+ X a`z5 boe-l18YHo0XgeH5)suk%9 z-i#~95Bf+cWWm5i`GzE~LT+%i&Kqk^Wr)LeJmpVmdl+_5?Wc8WJGIe6O=Xouof$c& z(}J&`hW^f%fuls=*^$d+Hh2??*{QTc2u$A`qA~hTS^YhG&8Oh3B{_F&Iyx|HapnFu z^yjE*Rcz8BQ7PfVr{w!u|GoK28G2To%NJlop4M`fW59xvci@KlezuW=0?z)|tYG~@ zNmsiIj1%d%8?4zlH`%9k2BP2A5eYihk6GXAn8EWo7WBY<<%;uBPeW1q6*3Or!`>UQ zBEGC$Gpk*23<<3%*IpqNQ+jiJer-2=h;@Fk_37qOYHpOv7xIPovw0QQ 3#gRVR+4mF{8U1^?Y!*QsatXRW3aGG`ni;}Czjr@>S|8!s_avHfPUxfaHmA#3W zwJ9dYnCMUC54`d;rX|zuNaZD=J-QB_%kP0`7WP!Jb7Tc%0_v3G9m6ZCP@l#mZ>h0{ z*!(u`5n>s<2h!#q`>n5(gvhw^s4S<;eA9BR@;6qrPteiRq `p6 ztH xMuUVjgm4j5K?o+PPBv&{4$gZCS39dk zdj_RNGO?#qig#iym*44tTU?8NJF$T)v9qA@f0M1}|0mvr{ERn6zKf}{iAzZ;h)9Tt zXlfa1s%q${YiStiYip^isO#t}DaeQ$=xA$dX=`iiD98)(@e7NJNb>(%Jq8JN5QT~K z6DuF&=jjLB`7UkP9Fg`tT~7`|{gsEWX8c1rncNAZmW5{9JdcsX8-_re^%o|18O7-# z)->7wY619bVdl45zPoCJNn5l$Jp$})dG;kvX%3Y1r-Y*_=K0|Rs#D#}Ks8(UZeEbW zsAxRQ#FSa#3zHWAH{8%Zu5;;f>c9kRfT-90dxL*zas97sBvKr^{#S+g_2=*039gy4 z2K&(?ABwRt%+8*)# `GMDq z@A3yOEmT)=WpzxPhT)LIpRWgz<7&dQ`sja%-cE;vEU0GO6#APDJmp@-t&s>LJIo;x zdf$W6_Wy;WJ~UDydnz$XRBEh&`s4*os2VNJke9l7p))OuGi)>-Wl|dLjyle&UfPbL z9j*JZON+a+E0dVJ<%_zaiCRD)hl>z393x_bkI&r{_bLeC-C{0?Y)yGE&`dyP?O~Fi zX2LYaRrg_%U_&Z!c!K#Yk3LJb6Jfy~o`P8zB-e6}iQ@ikDq08xa Rm_A%%rX76SDB}oI@R 9x0doJIJauwUy(7ku<(l3MJTUU{bEO)L{JKjD z&;6CA#KjyL)V1* 0mf)y?3d1 $*xWZq_qbgt zj37pTakxO+PB_epuVcB2Hr|-H{nhB)GIK$b3!@RNLwGpG ~yQfYC$5kb* zpv&RVq)|XFh^=g 4{9y5;lP{6D`EWT+1EB`bwP8 z@o6f{rkia9N9bn)r{AB8UD4&_X?cW|GY+;Zt|Jp#alB4EymV=j{YH=)#{3;u6 #XC(p=EFr21o>pKtU6r|A5<1C45eZnD&Ei7dG8MXQV>19*d zORHlib#uF7u0*sQF*{k^?gbG`M*r m}O-DfGw%`{3MQQ8<4B>1MCk9Cv42DPX5lR@bGaxgF~hJ*7w~%kXSHHA=&NK zL{q!PDi;VSotd$e+_z!@jaUt-dIvSbD<{S;ZLbsFO(ibd*x>Y2pwly>x=NqAhz{B@c}7AY6U1h`Y@?;+jCx` zlZ6(KED7Wth1t=+l>n5)xqpOvKE7M4_K;aCV6^omntH1@My#GG6)4G@k#%j!l*XpK zVXtT>w66bYGJ*+s5DWB@U4_MXN|%wtG0=n2xs{}Mb$iM4G=6s$psc^}@;#*7Ca;5j z^7LEb=@3oZjWA5 ||6Tw@ zRwnN>HF3ya3n?cS0Af{C{@D0+`BHpyqA|7t6!(aI**$b|uCFkpa~&riao?Qpt$i!% z%j!;P>D@P2NLNd4pvms1{)t1vO}+XUq(=jx-aH}g2D-iwy~pV3dV`M!gb3g&mdIzl zy)&3G^mZ+Vf@~^=Y}3?z%j?Y&SXy3AErIsF_>GM-U5dyv^TCmy{Mp2Pv62g@B|L^~ zjX|#aW5z28y(EkmY`Za0)@EfOVuz3OBpu+}zzO*WOWWH_m}+0fI-XyR98)SSCk3`} zwq^KR{w%dAL?(85ohz(HZ#@|j$>uY4=XnuO{hd$*4mB9H&%Ma0-DJZDl3TwW2;yu} z1}{p?7)~bQ?&Eg0hDmClf27@CvTRCA7RtLTIdIu)W3-!AyUO xTM34vQ-0%YxU?aMH9O zlDn7$Yv}Ix`Ox+6;HVY(?ISdO4O_} l%$UyCa!C2%2o}19 ze4fVh> $rYW3*RH-H46c$rzlh!&K{InUu>nh znLMLETu%%|4@4AIZF%fh(}Wx8_?Uy%jfyqijV5j}Y)ujMxAlir_=>{Z@h0ZfRfS{F z7sfx|i~Xp!5XyV?`Q^ G+}@;LmyA1 z?!FH|3i^~A1L6FCH57P6FYMZcQ;>aU9l)P#JMfNHzjLkI@-3HuR>`qCpvXQ%maI4s z_TH#$Je|B#xCCa$Mi}FSuAMq7E!g+>Mr7mdY5-vuS8^D!iXUhv_yHEEtxhl*$4=As z_(D*ei}TBmXj@=Ia)#CAV5>3Fr9VfG-Zd#PeFIMze4ejrEe6q)M~T{}w1Gg36@^}N z)~}2F^J-a&P0lZ}tm@9b%SAb9BX)Mo)THn#)0iv-^k2E)P6fZ>KRIhUPL{<%%Tg82 zV_%kD7-)JUppy6zTh199SJh*9JDIldSsGUkBz$wNTPXnoAE3-P^bhGc*q-`)IpzC< ztJIlx+@m^*D;1*%(GY9ZStVD$;r7H&oCOfYbMjYjcef_Sx8jDgOl$1w%82Pwa7-A0 z|F~ES-i{pLy!irV|FnZlX*om%RDjT^<<=*9t8DGfzbo`JpHL9HkZAKzR7s)pCnpo} zV_lysVdg2JV(UENLs$SF5HMB3Zok)3(lBSXM9)5mIQQ41o-pMGJi~d0#(%c7MP?QY z3BwlvrJAm!UOaK3m!Y3bcV=M8CnO=rM40D|bk+zdA)d!LM*Jh14)jUr|2(n#xI;~A z80SNAYWG{^gPqN}XK-7*R>y+cw1C*-zi>Ru;gPsVC+5B10!lp@(<`|p1G8& NsMgrF1RvHpj zr!&{oIl5t?*3X)Yt2#r7MDFr|$}{ti@tZbs6FWvV<2z=PP5xzaY{A|fb^n0((K4B9 z-yev{+>(`{j)6=ywrDp_$y+#R3Txl+Ob?<|?d3VZNMq-_CZD~tt=`To*whORLQ$e+ zQ5egBlKl?R!(ZX*Fr4}BsBv-GFn0cpjRs*6`K|EoI5QA$hEfR|oyxC?u*;c?gclB3IuPj5UK%D_f`FxVqc2S F?@GqFj1)x^8&)j`j$r1{_H6Aa~$LGxyr-32V{# zjtIfk5`0T1;||ra*L|@9@I!UgZ|el|Q&b;4z-g-V>IJ7a)YK#1t>fSw4Q&f&74*0o zL Tyv!vaRB{Ae1xKnsjI!l?E2G?0bS-f^_ewI$4X zP-rUb!AX!ed*KPxN%uh2-88>NVl~NRGUV|qAO0g8141&B-Tm143^f!Zo~iZ_+7f?I zhrJ@QiHsj!o8|448Hkw&49L7S(Iz_J?#BW?k3u{T;@=q}Uw_j3{bL+aA^i)WzGz4I zT~fJg2s`Lk*a&`$t8PH JNXJc%;X^!%%rev+8H4LWcXny&CJzUjNp*O*L&4(e3vq9g z;`oof;Ry6Jqzek)D+v-2!-Fb=Po*ZrDwKfdr>2wl{Fu~%PrqAopS1t|gPj~~<}e^T zf(S{KwI)z$e73<@m#)1dVZpo!4-}c `6LsJFFh|2Om~^kc1~c8 zJ9zMQx|IKB=~6Zkkdee5hWT6`HpRq?x;eH+n93`pbxUf|%o7M(@711t2R=mMKLh46 z^w>kktU$6rhi~`*tr>rouU1M~Z9%8N-Vc(IAvZ{q{rWF1t+TKrbqa~Ka^QbdGOedL zE{?W4!(&9HVTKASvOX=$%*jhm`KFu!5!J@Qhu90xrxBTy)^_pB&vijpdxnUhN49Rd zV}jkd-@whbF!r2Vs$BOkt2w!mTpk CklqhWhqLD0X2-Rr^Y3+I2BCMdgyAU_8~bpNNlA%OeO zwcElBW R1(xYPvYpTb&3)`7!2$eAR23kX{nHn3MA7!=1aDEPY2z zFJqmCIz2$|7j6b>I4a?=i_@7`(FX|)haTduky*2RGi9+xvum)$3J>(#VBGJ2!jSAY zX9xO!l9i@ZgHJ)k$j6+yZbzLPYH1{7vGc;G+W8Gcp)=`sjFhG-3JUi)7$@afH=v$Z zxbij2iL}Wj8yg4eL7&pg%>Oi6Xwz!kV;Nu%yFtPhb0EQL47h=p3y5oKDg|v(;O7Z$ z{57}(sxc@l=rxj8`*Oq8s&6L*k3$i&{LeKZn?cD6ENYj2$2EILX#B3qe7S2=NX}YY8vd| zc!K<+Tm>k6X|Qp1*tQPl#^NL$+aAths@Hb?`0UQ@4W|Mxolneaba8n<&+1KgrWAZC zAgu(6&JuF47b?MtQ;b(!Jl?HuZpn?CXD4}g;10#h>B2H~!8{r+&v_ANqGeM<{{w&m zzEk`pK ?q~^6nz$LQQDHHh7N`3 zl25>~@SHNkbPI87lgXZu*P)?o!BRQEh}M-5Q3 97Pos9y7`|e+P(j^c;vZD zhTOzn=5yOZ4eu;eCLwQ_=_WL_TmNGP*`UYVRd`Ujh^B9W;u$mUPE19T z-^a!=I_ z3s?eQKX+i51VKw_#cLY%s|henQYq9vN%i 0X?PmgjyEY|o(b#A9Oc&MuetBT|hCn$wm$sK((T|nMkjU9 +G$ev9v@ZO{K_4BDn;bC$wzU2w^cufG{sZ7 ;X0Bfu z xx<5Jv6b2>@&`#@ z6@e~2K@{mvM*!~@xe6JnUiQCHV7$Y4?$}@8a8U14-A^`YEHz2)a^S1WZO$qyPBNz* zzY{}C&*pU?RM(RU5%7+MT9QFD1N}S(b7ZhMK4JGC8$j`6yiPz){z0d_3>} ^#Gf%XxXG(58#B43vn_#$v{!k1TY0qUB6Ky zD@Q^iReTS>?WjrXz+2vKbo@$n2nQ0=OYN9RPrNoix6f<+u>d`-9bSv}$}$mJSheN1 z8j%dKXZ$ILQ;Ck8$oo+GBEA^vMO>O_OqIAypfB2E3HvVq_V=OZ!3t?@G9)B9eggJ@ zYe5VzsI?|;kvc@e_OdVKz=THd?_O4BGXy07Gu4jwf%ayuo;n1$G(CL6)bawSwvXjU z7~V_-{~7|P!qQLSQ2%K7rS-<-FCW%u>$53GSG|I$wZ)``qznSqBOkgz?SFvK=dLC& z{>HU)Sq-vgMe+h%flEsZB$h)2e6b*5LL`$y7
NA zoFEq|u(F@G)yt~rl$jNRlc}(eY9pwQvBi=27}WtNV-t|D3n<=SKrCP>g4${T&!<&O z-UcX^?T~kvPpdYw2o4#K5XZ|Nx6x$$P)fKFBiqID5$W~qFu0EDc+^dXrjXXx%=iX2 zm(`vy1y>l)614clvvXr$>=vJr` >OlkU)1 zU`}rGcl?*02Y8z*6LP8)Cuox7Tka5@5_mcijM*v-gR?M2bJUJ}+Ln|FZj8?!d}7F6 z>0NrsV`d{&sr>O!$1n6@ 1&&Kx_*K)Jj6_>&_k^-PAgc5 9&TIcG+HQ_tK&h9r#t<>;3o#1j8qlE&MG+5LY944Ggtq|a-cjloAN#ML{B+{ zGaxSk1j>B_X5F_mig!u%q%ZTN#}WNSupI8ALxtlHE~U6{w5tIq*IB; rFGcDHMfd7_ePSGmwNu;QYQ(=(8ds w*QmQ_xILYHB+~0s_w0GPxt9LPxtfm z(Q |F`?1L8CKtA!cAu^MUKk-@HRi9*+@BI4 ziW2~3(AEzAwSH_C%?$a8YUt?R?>Mv0lPO*rzv)2lbEb3kvDmR|z;h!Iutg@l*?!Kp zHkP-CrK5psyic@*k1`zajv~ixN?-!FIkF~f?Kp7c%|X}6yWkA6lcicgvo0#IISg$p zX&yOJXf8s7bNq3mhsxyE`F!7;l~N;Q?Q@7jNqD*!qgMZ_eEqZ7V|O{CF&6z^+s@Vh zk=0t#a-SG!mAaTHrtYKOD84AxJS@iXVTEk8xMz&5X{mq{ %6R%_i~ zocRBfjGBFMW&a0&pn%s-iRxHpVPPR5;73pdh;M+BQDHtYK|vrU0)B->1b}5rQDNZk zVn8?~EXpS)Bql5Z1VFO7Q=R88d )h>${W>u`7Rlk#7=I Z zf~Nqwo2@rB@g?3dSf7{UPV^iCb>BaE9U`n|_}yHnh*@YwXfU`)kdYciWgE*Cmsem# zEw<>UacC0L5B{bk*7PX=-Ck`*-(zxpeol0JiIrR`IMs2_kpPCW=m!wI6Alh%{<> z?xRB_R4F0+q{lybFNJA1_u}5(E*lZJbv6EB#z6XAv;>r?sm1_arwPH@9JDM_DbM{v z-n{@Wxqo&hPL}tKA)5XuFxt0KlZI%Ct|hsGAY6P0XvD$^>D#VB7S4 Fqe}H;hPSK=6D9lpk$%0EcT2hu~8`lpz*v&DU7UmaRg!F6aRVQzl^J6 zN1i|sf=9De2}{gdgWTR1+QjZs3=w`VsqH1!qX7fFx@CszO97{cSWS!MzZT>HMhBDB zfBr1t-;K-yM +<&FELh7Q7jlR=pZX9Pr$)tbno!5OT`MWg+Ev#3_dV z?wlUuSPxiv<`4E5Ko4GDsTvxAnHvC3gJI*wc{dC`Q8KL?SFZM=eW-JD06$5jPk(C` z6!)xM()3*-|3-KZy2%b~BUdVhQ)LxT_lM**nWOs>HN11-*T0;MKS2~np87s` hPRU(J&arc2Y}PiyhX6a!M7-`|g8GRg>F1=%(2CAzCpluWKgN7 tdQS9tmNhW$eu9~E(>nR? zf6>)kv=1=?UIky~7@0kT<_$|duuTjkgxIkzhK8b0Q4h1duli S9VPvY9dzM#~+_EeB_>hJ{ng=(K_bX9O;0C9cSqaQHF0tx*;`98b{aV!nl@?pm2 zC+%J==zoi-?pU@iBG7YSNKeTHyRC5zh=A{(FY!|;HOgKD9A{aGVU5~b{zo}+C}Rj0 zyM9v+1ZB$Q^+SVD$Wdn65sBA-!_!lvCg6+<4C^Q}Rym*tlYNP}VFeTV9?d#T2fq`l z+B8t60RRKLt>UHFj}f0Hh{=Ktt!3yn^k*#u utqLXy$nbu*K zu5Hs+NdA@yc_6C1RDELGLKZdxdQ*mL=f{m!qjQbIcIZ>$B7rxLy|94IAJA_ZOiY)# zw=Caq7>meJ8r=E4Pnf}6Wtf&He0~@Gi&>&kpfuV&vHGGAxs3#f^F_DC(7+-x4sXFW z4JCHJWd@%#P>$Csz4oWU^VkaYo+3+hjxI>Bs9fP$7+}^(e-9DyxK8x0^=>!Qn*qiK zqwqT&fD$CLbMQii#u~V=Pc>;!$&+b_IydJvgo#lkV#ngD46n@T4*v{lU8eUboL=WQ zak^5DTW^h{A3#&cdI^wK&8wVKC3dy-hR_v|B{hDNa6jwHr!;bEg0WOEb(>fxaENLM z&vQ1$gbF&asi1y5$V?n6N!R`nnjOLcoQh&>W1jcDCfR^QQ |>u-)`mH&Ttjji`n`z+O%}0NaKkFjz>@X=A*~%y@d!SdpF>^G73Q3%Nan=> T#B8~3g@o&$o_pR>Ut?K^4E!TE61u&*!7xd07(!DAwqab^P&@Z00ALTfxBAQ zkJ>w;kVA}j=_)XzzrO@-qWsZAmPf7PR+UftzIAzdMB%JpItrR|Vy-PGz{l69heMMv z)bN@sfx77xTM%$?Dl9E}%Fzf4ii$j?V*qE;7|CU$BcZkmn_^+EY$I@|UqM{!6IzKe zqq;PvRV$Ln)$oTMS+(xSkk!9MIas28k)&`^@5NBKMd0X797+!A{AU7u+4pcp 8N-pucgh;2V3VZ| z#JQ{s)9p;`S0{`&e%BFMe`9VFW?5PMtIL6vl2!}tFSIUT*CNRD0Xn4bhXypFk>Bwj z)(U?d0E+vLw-i zoiP+ojO5tJalla&4qAYb(Ovwja&Kw9!yEa8gJ@`^uqkc~AZ7>h;5ALQ# 7y|WIrBw5u ?E z6L~)=!?*>{)|;@4uc`KTMMeqO`27egXV(5UMZ$h%6A7$tS|dl+5w2n49Ftd3Cu=mH z#}?47+~P(V$n10s(k;DfjSC60G1O$)+KHWe$wY$|1H%(H8u8cYM8mfZnzcm0`0|x* z*&$$62%%nZRlm|Ba*K)&38vKMbkRv|!geuS99jTdnMhw~S;K@&b}bo82_zUCr0ds< zPtricS4kH3st`D#fIxAu6HI?G|1VScLze2FPr_8rYk!|^<7{9Cc_q1GF*!|Y?i|=!L)0sQsZV=KAn&NgKx_L^%LG8ah?`6spt^Y9L zfFM1BeW|a7Zm>OFO2LF%fhIV*{94k_x^y(W1t|1U_jVmqh~J(sT;@w5C T3BAhpYvyI9q`m; zIS_Q!S0vz**9+A^a>CuLlt4idto9f_XBo+ab>4tK0^)kV=P@yWe7Q^lIhg!(<*q4` zD34WjBaCp*-5ufHEnG_Rzdt{e=v@0oaH51#Xd7PFen19XjOz%tSUa6nvz`na0bj+$ zEx0Y&8{s=IfT>YrbaL9oy)7;Ca4Whh-?p{=_20Jy&(oJPWD*>_u?iNnoxGcXz`%3c zz~#!@iI>3*D9!)gqn3TzZ&ZvBy{Q3erP?yL^ej$3glQ9d_OYZ^1}&t;TnB6qJ~$mR z)>7=GeE7Yt3f0YsmM(6DJ@q4k$C(C*2Q;lGC0b~A4Z^=$SIlcaw{g-Av#fX^?N*a@ z))s*Wb9D;hg&LM0a?}w<33hl))AV3MlT#@bLg_b*aL@oO|F1+u_{Hx0A3}l#UcsC3 zr-s)HF2IRCVO!)udIlwB(HR6x8)})z#FcfX#G(Ac|i^P*gzZ zD^?6EnvXV;qLcl`Pz`qpZi*eV4{_@0JosKU=l?Ti8Y!^HEXRRk&{k~a^ge}Gtciuj zVGj>S|6+4tV}8~Z2kpzf!UIpk+!fPyFYv{?NCJ7XJE02QtL<>D7DMo1u67HRlDC%Z zlPe}vlvTz44&gGPo{fSMnBoKPlr{ebeNVG_A#8E9nAB`M0vKdK^;D}x)2|X-Ga8+e z4-(fEwcJJ8GizuOJxoS5?K#)S;5nhTlgPxw%=rrfG>FEpM(JwZ5YSg%t$=Q7NLY0( zz<7DKzSU;B`OPXfI9N^Fb!*}TNf0E+^|*+uHwbHSxzctRNJHAP(g?&?oEu`X`FqI| z%nvGyOs2UCQ>Jf8TlTZ2)mV4i)z*9=ZeYrRUXnQY+-Jr0u(wP1fY}CJR8%b+arNi# z?Q&py58i1vo8MU5jN10;W;Xo>D=3@4a4S#a2{)BI%$)z-l73+R_KT2Pyq1I#{6X`m z2JckH$NQ{(?b~aW=?rc)UL2JE>&hH=459+Z9M~(wtG`|&5tBAQWb%&jc99KRLemW| zKeWG |vWg}z9@=`S zY>dM7o}MQ^_CV$Lr;|&@4mOaj!D)y9UZ2kd$A|}Yh_?XX<*HA3c8!jaawX~KUxRaW zK;?ew>tMO*9~=SoJj7Mo6cT8BSQRhPK0MA<(TasX`#JUG?S1nHa?k?VK}42*kbml) z@p1oOkd-4TplBG&sl1l09E-sFfj|l*A*>BI@Q#^~H7>1UgS!>wFjN{$0oY@~mRKvW zFyFNHNjKAMK*y)+kJ1%P=!TXglgkL-Y?T3{811U>N1ZeD@69}lh}#aILfJhz5PCq_ zce}~8B5?dw+C@KE0$p&-qh$*rfqG|?&H{D hM0OZ!TIK=*m{`v~Zg1n)}!FBl6`ED+uik5qi+@7LHXqe?qn;Ln?B9v<_tICu=fP zoXHQtS K=leHXItniss|{6`&`dsb&426U?3 ziy6+?#|!Y%2BH#x2gtks6Z$lthdl(@lK4t}85WM{(B`y7VZSV5?(UTZs`aO~^ugBG z%eksCeo~pC^@(=!W?QoZ0r_?=c1QfPAX3Kp5B(OdmJ8lNrKD%LgOtG 8^qGNfl z>JQ!uvudFtr*YX_8bY$$VZ5|@Nu^$y1}=DuL}#Z!+gifLRW+l~XQRZvoy`oloN?i; zF!mY7 p#aWw3hNV#(rcS1|X93T_ z_k43b04w^zC*M#m-<3XZc6(qy?YYQKYtyB7I^+>K-$e_4Ak1sX-ifuRJDNhN_C) zxYB*KQ5T2@t^lB*s9yAY=oxNEkuhVbAoFWLI_S`nkeKXMw?^rLx?2ff4&%=)*OfSU z ppN4UD#_S+~iPWRP$OEHLrh)!XNuPueJWcQ^ zktW-FbEJ&l1nxMdsdEqS`2u@nCI8@-E+CAZ$h!-ms5^wDjjXsgtN=L(WtZ3;lBs)7 zJd~~f(ybkcsujZcHj*!8B(GEC>4v$!;S6zV+LmZOI2lmnUF7_x3Z;?S_xzOgM-Eya zic?(W6%}N3p|b1!6Pe}3$VaPezLpGKTD;N`56E@Xb14+^w`c%`&2J;!Oem%vUCwEW z1*}Uh5R~2ozVnT_KH~Oa=^fd{H0dW;7r>Vm{QPtsDGeUBAkKSfp3O5Z9G-m*5zGFm zM+nG!{?Y${W-;6eDYr7EU@2ZJgpXoX5Z?t}^SDPqIH)H5!t~D+LvvIjM5Z({$Hr*= z)dZ#26D) gqUAR4SbYP^7_8QJ)$iUMIB9kl>sywxC<57yKsk zfP5Yuis>8Pb=b?&`)5k4eJzyLgG?L~>wHA(&D*PsQb>|QgO@fS*$<=4y`R^TX{p2V zSxIZSEj{rj6Hw%E<6#dfZzd|Gt%$CY(
L#5hcdVTN9!{HtYA; zx+gTb2v{Q(z+;UmM$*WyhxdZ-?Yr!h;;HAVX0Ikat1n761&11_Sbj v&QtJ@}p&9%7%0yN02CwWIGHS&zJ9=-z0%pZ+{ zJ~YO?ShKqtnIP+dz W}t|rA(sn`iT%L9;6ve6kJAcwG4hhhE*Bn zS&pw+&=F~T@oEn}W(ax>M7;kQHCqa1hJGc(>LC6nD+>e2#rR#lhf6swFo`^#3G0pz z?qGcx&Mnfpy56sYoIl2!!a*kG8#$BC)e953vp0kR>`e8MiWQVKXb3_fcflc3-~8Q? zyd0Oe$-}#ynC^~&Celz}ljyf )k1fkZqY57{-b-rGEr690FrKH%xrFcq{TeXip zM;{dIZ9w`$AMzOpv^}Y+O AW0v2JY=YPTYipg_h^n^vDPZ)_y8?%HT4LlW-2BXi3U(8 zlQ>Oj%_NjA;E2~VRrQwRUg``%>S=>Kg#$~^5^j`=Ba5;+D}^=oGj8qHzKtdejs*!K zju+#lO*jFclcaoR_@Ttgkl;@I8p6)qYU77TrBk=YInzK&&Rrv*h*}p4yeQtvnTgKy zba67axDT~c9GZKLkILVQmTDSus3Q`#1;RBaBu `)n7_Q&Gdfz#AH^clKOrE(_W`yQnMAWy}N z!`oir-=H2UW66!y9S`Kg;fRGIGr#C#s{LoWvo@+zj4g&h{|MR{y5zUt6ZV`VNz5C6 zl&O0;?ca29py|~T|MGCSEFVWC_c$?c7O{E=Vwupw($L)3M+0)^7h4#ithijw;SI(3 z{Q|9zQZ}022Mbzb-31hMA8pdPz{r# >B;=eoF;Uft{y7xm2N_TlI0!WCEJ98o{JqG>%jgFDv0v0hZ?{H z&v6W-$VEIL9YhED tZ`j2 z?B_e2_*}EON9n8KNL8q{n{I`>{kt*N>wL35XP_Bhi+p {k71@>^(I zm3+`;aZlz2%nHDUZykMLi*i;Y+Y;bs0lyZs<4-4VQKz@=5SW5V3Tpf3;Tk08HuGR( zAbarHek{R)Boh*bq~co3f$r@o@=2hvVK9^4VNTd-I|ODkwv8=gC=1vI2 !FWYU%6lwT03F}}~h&$jkM|qO5$HKreyvDE)r+z3t>LJe7e1bvBm}AE? zUV>}@GfO8Pd})l}ClAa&1PklSWK&4%Zc4B(!Phhor6T^E40tJDb=EY|>u3T6E2tJN z@A=#yCr0@-P=J|@Z6@SEXTG)_{%1Nl1J4pD^P(C9^R-F71GNT?! ~H3?-Z`SE~y}L;pkTlxKDO0s)_#u(=**Y1Un8>!~)YH zh?xy%*6PAZ-P+!4`+xvRrph;??!y3b6-4B_g7?PeW&$OxrBk<4p2|}WeqprHUm~1o zVgUvOp{DkcUJk5bb(y8V%P&@-lux!_(9ZA3>=epc^^{6GdM#^+6BD`s`vR5sSkTcs z;Nsmhs|yF4Jl_8WGGfA#mT_%n?0vOqN*wn5Cp4RSdgCB+J`iCU)6<9k9bsMf-zK+O zTU3WxmAIqs lW$EWzcMK#eNWu`p=jG1UshLy1cRg?c;&$o5V8G8P0iQI_HmY9U_b9j#h zfByX`@|FATzV7lfE#Nay!mF9kb$OgpL*g|=1!r&LeFZ}uQFauTUkSq~lja( P(> ze)pRwVY^kke`RR@{cSxZY7251QmD=nu+VLMWo#tRRUEF-Jl9w1>^vm2s)FHPnePK< zr#;;~sI|o(KyEp#9rC_}%HB7msz-ol-{0o0_VcxOGkW=pjQ9hf@nWW=lyJCtU-fUd zDu`zWq$DpKrmO6!SnW@`Da0^2{w K5B>lFR8T>b;! f 5_(Qh}~ojP;lq9YdC78w&9KyNkLP} zL+YxyWR{;aI1a0=lY0EXYnBtnHZQ7gz5I>1^?^+5@K)ZQ`@u1#WjWp@G}(NZTTHC? zh2U-)(@;!xsjg??I&~lgL15&S;z~Q{-g>Ic%aZnc4z<{SQQ@UPXD_r&m{87tHv})m z;kUWu@V;!Lg5sjT2ZMYd>CZg){b|u=Lw(leGsJ_?b2b&4<)BXR cW1|M zBT*OHdtfQj7=^fD1FMy$E+_yIMBv&2l;vFD%q>aYAy=EsLm1J+M77Wc&y*csaYsM8 z?yThf#_2v6{Cgg&Pe96lt0@eO-XRp3Lbv#jObc9VZ &t fi&|OwU#m}dFa9M0eo!F}2YIk;C>=3W{4T?1P;rm+?aArs?ZDSk zN!S27p^44PK}sD9x169jpG-rm6x0Z+F;Ot}lpbpa&%5j$w?!=ABbkJLUvuV{tBI6m z8Zz#2oy-7X)9VPDr$hQ7FuQEnSk77q@oe{YhAhu>#{2P@delael2x)}fJ^%n=$95f zcOEBHXz_9&2p MMGgaWE)b^O02}H$r%aW zw!o2+#pA7|wV~veUUbTFd}OWIxoE>2>>K6=Ps4p{B9wtF5C{ic1scjcfHBD&-` 2GG&P$4T?qnj5W@wTzQ&>C8P6Wr*>f4Y5}3zC~(a$%rd-h3A4_e~-?D$Zh? zEi~Z)u47=;Mc)1V%5JWwFf#*RS^bChk{s^@x* xB?Q^7wt@9E^hof*mrwh7hnoGunYlOcdHOtbnV^8l z2EX#sOr(k{Jg^|o7_dFx%(tsN?Yq41W6?(-juGsY2>G#bChS%Zs|K72BY*IM$f|VO zeFJ2+XEIqW@NLwB { zU_Ho@52@yXx^!S5bPN%%diI=PtklBTrsGK>q0&VOZ0J)Dxg$Q6b*p;s8XH8GdT&`w zFmJs4yYJ=SSz^miPLo~hw#NdLwSTLK2ql3|I=~^H**VRd+I}_P`8hr 54as8MkpsCN$(x-cVoWW??=DjIXE|8Q6&}M#_V~bT((|4|K`NbC63aF{4b&k z>bBDRwiCxaMi^9oACE9o$zGakk_)qV9Gb>2`AOo{TgG42ArSC$J@ps<^Zp$NdMgM? zWxUR3==m^k7J$Xi%y4)37o`s^GIem@@(6X 3=ydjiMu!P+dYHZ?OT> z0AhRJJYS`dU>TX1iSC95nO^^D>y$6%onNr*@?5nfRlp0)MA67cSQVUZ&&X{^pgojh z20x{kcR%Rxi;m1syWg@-;3EFzJ6ADjR`Cpqot812S?WMv29lfQHJmwiCH{aoP}W{f z=3WSnM<363&7+UZymvPFU|{-t#LbSOb=gcFZ_k^pdMd$k?oJX*q=$$b%+>y9OTcir zH?|rJl*Rp7rF-Tl_(lOkq5MnPCj79uvv6BV9?m>|Aw-^HFuLhFmP`{0CI0L2*s~An z(Z>T4Fd!HsL9mlt28GXO47Wce1yt@HPPBgK(z`7}wbqRBP!Yk_%yK!2x86ZlYCW)c zw(C0kaI<>mVC&J}U)U+E4hGhnOu%~zEslwg@U21YjKMs5!o4?x??v6n(Fx`C5!;b7 zsfj8NoSS}zf%Kw%0J|LDhnLNX>-Jd&H@Tv|X#hg%F}4Iqcrc+s-@4WM%hd9R_?FrH zC33NoC<-5B*&K6abgZ6#)!qt2KhDXw=xWQVoG1*M!e#vPIjkmweHGC9+lJALyGGaY z_GqFCNCl@=HS23e&7o&b+j&}uG2QTav>7fW)48;i4VlZt7e8v=Houl@4Q7S8H9E zr*lrS7?}-h*P(d!U70rtO}&*YWUP*2--=sBz>pEN9sn`rV02$@35gjj<1s*w;?iIQ zq?yE7mJ&S11<0Sx>RH$3_t3V@n-tFt>0p-DmlJxuV$zeeOz*yiaylLG!O;h`8ANPW zRWqr<#*86J6Tka|;?s% glXcNqTTjxA*ZOIYoOk`v!?4IUq$;x8scPT8(SYfkcj=Lj0OYV9Ky7vfa$EkJ zIuhH 07JUxESar2UCuXW( z>5Ff1 &qGq@HbL|B6% z*+BF(q8uA&;qP=kR;XUO8`S?%8;lPqu6b8Ua9alidVa>5-YhoGM3Y{#a`Eh_I8^0K zyZw2Sn~ryN_0|Z%%!)nc#fuj}?~BMO3%(W<{PRpUQd cE>7*l#mG$KR5cLmM1t@3W<^ zD%Z_xE$aq^eMb6ueD-< zp5V`xx0z0WQ}-N7k7U I4RFv7n(?pD#K2wx_#r#mK>^&0Um;H_o$AOz+X zpQz~cSwf;%$i3q$0>c{ARDYXu*kuF@U@Q8K*8cD-_ 2e;lAo{VHdrah;p-WAAytgFo#nz3^SmJj>m^UJVBPv?plpu z7 6wxMg(>HmLL@6qK)empY+T$x+z9 zhqy^1Yz}V#MTcahT_Yve0w#YC2HbB~4dX3PuNcCN#T&eZTtl#2)#iWLRDHbrKO!b{ zRR_wQ7ehSz3=^D76<65eYpru!rt`g&2y>kqc$BR>+XhC>96}LLURRCpJm*E>`_lqC zKMScUyt@T3GD`{UVGn7a$2$hNZOMX`CjfQ!QV8YhBvz080YRQ z^3)UJ?NSd1y@|Kgu$!O8+jOqo&;mE+|5pS~{!$12uLukayatT_AZJ!IR8x`H)X|oe z7UJdsmU@9bWyQ6$^|gS-Uj v{^OHX2qNzQy01L@=e0TdoG7grzRkU4mO^S>KCjv1IucIh #efKMvr^JzL>B6yBA%~H3%a%Csz%)5&{AIrQMs|@KW|6IfH zh&j8RXMFMDTpUW*%Mra6$xuj8GK^Z?JNyr7jpggfTYq9TVL3T57nZ+`8?XrI+tL=3 zF@&v@Was68azlB~#ALoFC{vOtZ>C@oNnDbA?O89L)wDei0XfXGQ>Y-^!Z{zoeZ2JW zfRB`_wY9~eJKiBSHZt0w<~BA64__GsGdBCp)o!m3AG!TOwDev>Kv_M-yTmKmXQnPI zTsBCmft-*O_f39_nG9ufF)xbxuhihjj4t0 L-u z@MAMZAzCOm49e(#1?K(a 4~A>im0WSn$E)s-A)PggLEeN&9^8njYCygr8!uje zBEKMtr4B1=w}Yoc#*ZDR^AJ`A7l|}#_j7I$D$|N-NrC=fMox||A_>?J9JEA?-Dq8y z+i|MIvC0hLwtJ-kpX>B(0aUp&hURV;T_$(ZrGRWVrN1akeQ(=V;=y)yb8^zm=gd zP1Z@~2Q=E#PW{df%4{ q>g{CkC{6lfdzi9EAJ=TTbiWI?iw-cTIRBpl&?UIB3^Z z+Kd2%PNMQFDKxOcl^!8adJ7)c;Pu7(2r2gme)zyzBx3bCr7|BrVOLyK7M)*^29!xP zy)z_bK C8xVH6<)`h^U%h>=ziA8*fCi)Ku4_@ymvK3t_#`EFE=1x={ zzi+FW8hStEFkZ(omP^{`Yol;o48$%oK4kb~ef+e9iz|24%OlCJJ#vMn$xgh}0N||% z&hoYbR@@gh;z9fd*Dl4;hNwXIxd@K-H5&9*)`QvOR_D5{$%-G)iMO}^%|F6 vPtYZsItX7W zmYErCdirK)YuIN9k%81+9L>*ZA_Z&+{$Jwjbo%d@-!J07dt&3etUdAut@o?mN{~ZXt#~Gz@z5`>BLo0y zt s zEUrbj)i@VlJw`{Ye_F^I$zjJz551NEEFV9m@?$GXVZXhK8VPGX^q%@_uWhF+KDUpm zR1ok9@!6Jpao!craer3Q9o^#2?icVCo;v#D$pbA; DB8AJtSc%(N6i>k2`!M $VVcr-1IU^v%H~0Pp8|yE~>y_kysl6FVufO!yLba5{FK)&n=S zF+64DP~4|D^+W BNo+b3Mdkh&ANZesXTr!eg(Yj+melK2wt;X_iCYch!|G$p67 z593G>?pw5c31MLJhO_R4^k;E$xX=N^hUv9C?i{uCN?T=g+@)f~&_&l5u64=}thv zk|b`5IBISAQ@hfETa>RQU_BOm#nKjZ1h~$-B rNC amS6=3EyKvekb{rPFfNDZN<`;`%=lC`y7TJ6| z;nwZpLbz}LupC)pVY#zS%(O<^d~(Y8rhk%xaje4~1)P|qGZ3AMWzOLnu^nVS$dCF- zVJ~(cUh5~{OMF)a|AcZC$|E& )kHYK(>^Xv!0dgvk zxj_!PCNGhB5)(TBB_QS) 8_cvTF9}kz7$zY|obt zimz%GZ#c@ud*Jymggo4StVA%ECu-^0vzQfJOZpJ5NoRAK(`Edaa4~8aAVu65hV?ok z0~8CNrHe=HjtdIgj7u4%vDbenyslx7CFfcz{pI!LUEFxasN!{N#cL5enqW9;x3-V# zD)Zt0g-Cfdw`7%Q``aB4un<`*cK2CO)UOmwxfT8EbPrL1WFILj5#V1 ?X}j;?^8G}I-4k{ zxc(Se;7c{sa-dN;630bNDA`^6c9V~f5o23vk8gmNFlYRX-uc#7TIUrLWzgkMv n>(4^NS?1vk3=$uuZtc^ab404*$ZA>V3?OuX7e7l^1 zogSM{uDom$APNFg1lcU!{f~czv$0^(N>52Ie8*HR Eu<5o;1``zNc-%~Wp9 zyr)J^x3r-9 haYB&^@chp2_$GiqjGISR&Yk`L zSX%q}enM6nj0s5gf{#=x9HP*;E8SJO%Ae@tl3o1;oUUK$Cub2D@fmoA%X^y4MVLgj z+_vE6;^zq9(D&<+BQ2@|D6etspQjtt)ZGLqB;Ey3Y%M@XlLNK`e@@nzb$NT8gepB* zi3#RHQ1dY^Z2hx5RpMrn=aLg;SNMeG%NIP9e^&)&s{;rF&r|84VMmP3MFpE9pBgmE z#XwUk4@b)LhwB)XIz6XHaG4e8k-!!n=qbqzeA{Jzqn|qhFz4-{2)R!jTAog0Eb-fz z2sR-7AgVgS7EKazjui6ih$|Rrf?Q~DYcPE43N$mrs~dKWd!$#w*zDA51IrSY)d2n| ze^D)P$-Ip~oZA0xMr?IHSt5iLyhglV23w0RiZN5La>IEMDvg9mb37fLz(1Tv2cOg| zR+?%q35-y1^v6Xj+l) !Uvur jnEz4T;ov^URWdn)L=K zGc$46fjgrT 8o3uUlj=891xQNViO-ZBzeoyVkuRK$t_MbvFC$ z78@+FIo6K(L!!u`Qm$utuG(Qvje!$NYj!aF=qG1B0$^8OVH!`!)pZg3(x*>I!uao^ zKaTinC?JKlKOa(5h*$|@&_UOjSp2BjqN3ujrNW+fPogMWHZR=#O6B?aGaX!} 9CEh#&bA&fJn5L<7+5S2q>mP<@$QUNH&?!hP(Pi-oVxn;vLvy6CY zpZ ^IkDptqDmloDnWr(* z(LPmA9J|%K^|yf!lwAN>Tj^WN+yi6NS2i}P4+NZbwOM4?utEX6+)fF%H(A~Lu;`HF z4{Nzu_s80EF_Jc#CotC%1~3(n-uknsFe|3O74x >t5GiSaKUj9XpAE74W)1U7EmG#zK#t5HdNu$nU6T3V01aec#GVo1|&VG(tis364 zry0l0JDa4(SLX~xEUrk9b|t4t9{rHt_9HPBZ-_;|)N|M>GNPsiM-o 6(;`s}xf zSITy`&|$)vi5eO$P}>45I= )fNH=o4+G0ghP@L`Ttqpb>Pe=@SckvJUoS(JdF7 ~` zU_xgi{i JN6SH~{WMWX%IZIgMzx z0$IH1(pDoIYU7PpjdWGW{evffjb(_enx}5d&nnkfz=Gd}>B~E^5A5T3OZfL*=nHv6 zS&_xQMo+?KxtWS1G5 TpE*$WB-maa>EGQr#ECi%43k&iH35ke^@bQQU z2#bn{@(J;aii(R03Ifjz6%!T`;1!V&5EB;W6&C%<(9c7t+6_6>MTuB>$2nhWe}=R1 zL73zzDNC)HA1naa{-TyUpMow(ls_N D5I6il-J=v+CN%;V37i>wIcRC zLazM1KP`W%tPgs+*Ud??lZZrsdwk3v!r;5wC;*I|f7XYm$tQzVdJ!+wp;C|qxqj)p zI3u|86@xL*pJmM{ZRRwqCkLr8hl&U>7g1WQ^V{v24_l{dHeCeVHPEbsx>)s}Z6~BP zabp!#KcP<0;L23_>bE<8gMD>fF>HbH5OSl9$%dh*SzV;>mkQ$GmS>@BgEzi ?k1GFD9|GcKOEKQnDC*RrbOpsn#<$?Y|E$41$&L6&kIb+KT<60xXcP ^IiOSXuxu% zVH286edpr-c**(VTp0OnL)f4U*48$qo6Kf*^K}U>jgu$sUo#UI?^6v1dz6=@YNugx zY+g!u55`G%W=~6Cr;P#==A%C_^fvEMMVA?jQ$z9sFiMnxuTmhNdfD 5(OJJFTL3h7U3Z!+YUlcjt! zcrllr<(eIFP+fxcIc;78fnnXqE&yNryzG}tbMC)YE#);e*}p0N5w2&*P2|dtrSwBi zo|W=h{PoH&0ka!jTAY3uFR7yzl4|YTU!(=YoGW3$Qj5KN%4qWq2d?G%vu&XO8mZ@B z{*L{L71 eLNeZ=c)RBlBWja$Tj$-m86%X zugP1-<~v0Sd8YWMjwl0v-x#^bqVjT{mSg7E69C^cN?m#PnU7ECO~P(uYwhQVe5TyB z#ac4+C0!}(|18YTFqDlb=g`-Z9ni!2Rg_B=(j)eGa$HB)c3u-5B1gq6i-%^}4%gS6 z%t((hA9G&$@rqbiCuyYmcnw@bGPk^T&h%+?9;HI1A?KTvM*M^LGQyMA!Zysci(}IM zTI%NCh~s_P*`b*=bj)Hu3v|O_+9awjLRaUu`z+JF=DyZp6PANUr24G$AJ@Z%A109m zAmK^hLXoZ9>UdV-M&Oiu>uAIlsTq;~I^|E9{$V#cHV?Z+1KW{Kj$~%MKl@<;jHbYo zYkikMIng^tArsw8UEH0gZ9)7?A@mjYNCE>7<+`bRGeVGp^=or;Mmq`rA5q^JURl$0 zor!Hb6HUyCZQHiZ6MJIYwr$(CCYmG@+sSw4exK|5{+#`5@6%n~)!kLAdadi*eM$QG zyo^_Kb^EK&g!;<;t$*bI#tz<3zatCSO%ahO9}OWZKwRS+9E1>{gwLFl1vBw_#sV0g z^^KI<;}>IpyHYN@SY;TH^cNeQ2?YZWI1nL{l2D^&m4+h0ozkZ5w6s7Bof`WOL`xtw zQ CJO<@21 TUnTK}re5zbC$2?y$^ey-S}SOgq8ONa{|kCo(zJ#n5$SPba}$M X_xt3HCHjNsp03@xs<`j(poyIH663{TtOk{(TuU AFIz;&zOXrp-%Dxyy2sArK08yGvsO=nYOp`K3H`d-5{`Gp_VtyqJcSNG&{RzW zGmo*~4+8%xTP=EIb^hxKTCi&=m7rlh?xd@o6xx!!iCltH+cy-?LK!V~u?-o6`&D+l zR`E0o=pTcJO==s^7Qjy;S(+A-F|2r);Rh8#rd)U6Wh*2!3k?_`$+Hya=s;2&p zPr9kD zltHOP-OSSH0CAD1sd;$j{ kaqVahFu;8rdkSqngzEkrsV@ydl+0^76DE)hIVS`zAi-A^I &U}dvGf}^%`7T+8_z+*tSn* zR5{TJBp^5ChK|{#V6VKIGH^x$@8hGjoO8m>2gR9mwjQIg%pv)Vv15Biw3X=Uz+3CS zr})oV*_^LvA_d=?(_0_grXFnEX@W3f{U{??$*THyLJA}y8(=fp6y&^0)9KswW7z77 zF_a)TV$VIOvP7~SfV3hTF#cf5OghsDZAXg`%=+Z;AtjQ=aLPnlA?*QvAOJon;kP)7 zmR=C6SlqslV1wmm`g^ys0@GE<05*a`n?Yh2`Bfk>R 6d=~Z$dX}lo$Dbi2Rche5vXc;Re5^-R+198~@eHmrb z=L%~{`eIvmC3-V@#9@%L>KoaQ)H4cT>w#4?gk_<)a3e_tgxVtm8d`jpazb{$i&FUV ztP!$%!zt?;dn5hs9EFI+a@b^yLQz>O(hR!nq#IvFj;_l$lfI^q@qoRMF@x>9eej8> ziy(g$K0XlY%?t3KHt3C^ht iDkbMB!V>0vDlp;`U< zZyFyS V9)6$OVT*Iu-NRe$5p`mBa)?T1u&wrFuE8GyPYbF6y1 z(`&<}(ej?iuoUhmf}c}hrESS0%7#mn`TyWO#D6zC|1bK12R>aBEKz{kk-~gp{K5jj z@CR5iDh&J)65s)rj*5#K=_p%h$xBEHt83|KD5-1c$t$YrYO4U51!T+uH>eH5?@tRL zAj%MrAXp_97M{ke0{b{?D+d|0?PYhiXa~ )s4d5h_6HF8N&n4g!4 zu@c{D=uF!>mgI5S2Dn12`|fzy{OI)Y>7XlRx29JYE?;1@sa)}UBog7|B!Pj<`Z+gD zALsSaJdi|lu7J5OK`tQl3E$g1N;`=xci4{&9Mk|IvS7f59LHFR;Dy2^Q97@fxd+ON z?~A$kRX}7Da&=WRW@Qm_?H9VeYi|eksgFMcM&akU@vIdf^1pR1zycGAvp)A{VJ3_n z=l(%u=@dBZ0SJGv`skQywbq#sLomlFj1`h6R?92P=SBC~PBc|xt2p&(JLc|)=mHG? z_UV5P7E)LP@Wi2>SNEbdz)%1M|AT)Axp3$+zaen`B^_j(z!B>Bp`=FF$Lf3GXXGFx zFPOUwB0jYDq4{4U0?qT8ywF(aRSyVCuG&wZ@QNFLl<14Y$Ka*WFLjzMNDox$?R` X23&(S`D5dIb;0XZ@8GyQ-E!dWm4Lj~F2L~b6GZ1J0B=tH#tP2j7 zL-7MFoPkUP#vT%e4CA-8p;c`1!j-BTsW~wWBrWMX(qCXG@r@?fKzwmVh?<~$4FxK> z2H}?XAqvrl*^nzo)W)Z%0T~+aqe!n9v~cP}-EIG^D~i+7-4#Q`hrS?fyUhZCX`G(l zk7&AW8RGh&p%)#O-9x_ed*vW(WgE^m BY#m-&?X{u zCvuYuNs}H7=W_Q`9{(h(Jy1RU+bR^YN6{i>8Roc9QQvjF9n>qKv|(Jtx`jfNPxOd{;gMDe?Re5ym|xf>FGFx2|)| zEw ken-!upvErEJuJoORF@|S4_K!R!9s`}5v!DXN(|7wCACx=67zpo ze(OrYW=|e%B$=&j*nj3OH-ZCi&Q@mK%2;? 3lFNmdQ6zt~(ZfEHrwY7+pW@ zB!9Q})fMk&pHjzG9k$aB4kM_yhYADI^cF0ASkAZjDYoeaHv>md#;iHgnr{~&H0JIK z
reVN~$tzAm?*kkSi<#c8okE18&rl@UInO~@AL#>K 2Xvd)M52 rpFix!--!stnNTYkiDPN-j5LhsJ z=9DR5Bv8eulTE|xdi`39KeoZAtbpGz=IPw=g8hB=*PZaEdWtica zs-utl;RdEVV>e?Chv~!Ng|=>DqQlbhSj(clsR3)oBje4WH0!Pc0L6i4Q69|tvol?C zOs%5`-`Pu;=Uavuq73rUY00-J6_$sr4CcVI%;(el^%yQx;W2V;1M= l6 LsuiC!^zKhn7qL^8N6U}i95(QBJvc&nFFyZYBI z#p<0ea!H2 jbcLA!@tPDkdGZ@j_VJSs6 zAm}3f_Tcj8=ZVn;C7V2@jUb9_cN9@uHH9L9o6@c!qT(e+GS-LY_NC%8l|!jc*)wY@ zJbioJ==|SiEv1#Tx@rmqB2PdebmAzYni0V|^>+YI8$5;M7s-==i@4huXSeDipm)Eu zU9L|uA}n bpI88fE%kFUPwT$t3Dl9s$2- z*?DgS+47dL{F^PK&TAKPpAwM3;twfi&?5Ovmxu#fs}0gp;kcST7}f=;F4I0c)Aas% z-gc*s4n?S^+9z9HHWQDWyfde@Xy_ja7ykBxyJxmOTL9BILp2(P3dCw@SJRv6?|JmD ze$*lWkZ?z+d?zJHh_^?HgaAE eQ!waH;)oxL7`wP2 zo5xb!Tq87gTpgGGrzSf8XmrhDE<|l!Qh|< ~B4I^ybZ*FU4C9h+;XCAl7*5qE)&Nxa4b} z0TS2^vs)s0=jmhpes s;$H?tQO`L73X>$=$*@us<<4a?EK{jEcdpEEZ8aD=mAx?$v!uT zcjCW@!X4ZXL2hn*BUPM=9>tt#0_phz;Cx)zCcU9HTFrXkwJ=e7Y>?0TZtTENmus-@ zs#Fy$;$Fn47gLsX)y5&CY@=Lsnze-8f>9HMSOHbVbNufuDeIu; dY*u2fWJ>Yt9oNKa;zT2^6js>+(@VTNNCD*v z8-j**yKq5uij5he0hp~Lz6tdz_t*rLE>Tuc)*y} &b_*=e1UETw@9;kearM zKILf02FqCeXMYjR)<7xbg;gKdo}F%+f*3$i9ASF}84diD3{>ImZ?G=J`+=J&?SKbl zk3@R^Uvt6@>frPm8PJ5tJaKRo{H{LdBZ>4rX0=YlPw|}K;z3u#{T|j0zTHE)mz*!@ zcb#A6P9Ug?1yH$&8cLhRfJ~3%C_ZT`sNk066lK2ftoOo~C7gpO2eji93MKTjh5ndG z59wYx$m*}I$G_;MKc2{{%Dxp(Sr%r^u&|P!Fc6og+Z*P~*5F`3lgq6GGLS7$)O!K( z!7${VXJLodt9L&dCN@>vSJfl stdEAjk^ z&~Drx%O~L-${ 1nXD5x__CM-MB8G;xtm&RwoC1k7 zRRMup##mR?k_-I?V+0tRCm*<>X*tVZNL;w|F4JO@=1ocp2`7sBustc>UKAxuxBj~0 z)e!oit*)UL<_ma%C>?v8c-Hbl1$Uv1mqDtDAPwNpNMdo( $6`+nf)Z>5U)~_ZO>gakK`S!6u{>1YWWkMMrncL)fc4e7 z90~W^^t=6FY@D9(^igOViKF^Pa4!@AGtM=G zX;F2Ta^NWKphNm zegQz)Z!-<{v>CF4F13mcfn4;^W<^{4^NvWvtpvPHxa1q%EF9ce+nkL(#-F{~g`Qd0 zNx`(v6)Gu++8Gq|ck*F3`*a2rF h=3 X+}R1gNa&$raU4P zP?wAr0G`$k71szNn*i>esrIwX^@Dw##&LbdIS)6jH&@mD7FkcGk)MnnIC|CD)n-eo zO6ex#Rk$wYn}V9{VWmj6G!3hPIw13mt9uiXMkp_FJsNkR_Z?qTBm;3lkjQKa&4EkD zC0qgBdl+f649mzSaDXJo;wY#i69P=}H9~KUu+x`c!8$AHIGL_ Z*z;U@1?BJpaWF;4$08+R+`vGh){98(VvDl9ncysOJ;#^a$y)ZzD|qpSr A zq10uU13%kDvmj&!z$>u5wG}&7K`1;@2*gvd5I(&N#Ut@!v!}9acB5&!qh?P3Ks>NC zZYV$yOOWHzDgN6XMlX 4l zo*?6SpFbd2gtSFNt=?|)V}V-3wK`8>IoxLhm#_qu#rU6O!@m-Cff4t4V}L;H
RtHfB;5IW&aq1svXvcGO z^h0wUr;}e}SK+n6H#H&dYQg2y(|fS6{+5%^j?&Pfo_I?TAJA!|YIi6|!FQ+xCdo9c z1?Tg9`V`I5@(~0qMY&b`pk5p#W=yZ0%GXY%4Q%?s>(cFyGq2WjJ$^~udpLB%aGBy| z+TYdA&g6&c#o7h@myVE+y{VNdj5{L2x<;ac7B4o7&(?t7&pcvLr4iB**VADszTmRX zI *Bp)IN($Q_4f z0tlNT4=T_Ah7rgpr(AEmtGu&4#T#NIS@`}RZM{i~t;5z)Rt9z0x!qA+_UCcGV3jxx}Q25!4 n@3%*`5@P;vRyiytTA@90Uu#8dt4EaYD#82*BT>bN}h7WJAPDAW!Mo~GWl zwq5-Tow?!>RiSogyK_&_Q~FxTBv aJ^XDLo)!Ky>X;O=E0Ckq>zpQ!Mn1&s^ 3kUbqS5%=l@5! zsQ`g4WmL?|866V7<0}Ek{GK>85`pvQHt!4`=MPcDkaRk$vgEQ!^DzewE0eqn64Dnu zC1vhQ>jBVsMx>l`$5LZy3uQx?3xhgVbw6zr6yAmeZ5Oys3q#f|F++lr#Rlh!%Gl(* zEf~JRkj=zRXH+GQr=&oRZvh#ZfdsT}*q=M;Wn$HDfW2?4^`+l2KzQOq=IKY-K8=2< z8CKd|!~Y ef C?k~)uPQp+&b*DykZ@Op3jC^^=m+MGcb!nKF8kyD8tgiHpesSUl({dQd8k+im_ zFr!o1J@krya0Z_>#CZ$~l)!zGqj|mN%;3@^u*HMqWISPxI*L~_1t?E-+~3X-oOUG< z{|mv*)ci7*&j?#HKn(1IslS4>?%^zBM13u046Es(P&xQ*ABSBKy*y22u)$2jK+44H zX7Ao6)G_dqgu~yau6p}{c^tz)N;2rbwDpG>(yX0#{Mo}EMK@WO0eLmy{`!I|Fj48g z_e6SrlaeDwKO&?h=`831?6 a%N{RHNAjqR=!_oj@>X% HF_+(DsYqn)9CUTFVbWB!22fku==U&xs3nP!0+=X )~c2EdJ}{k@YWfY1zd(F*2PrE0}NC;higmcE9=G zXfOfDn~sR`(K}mKMd18bmw^l{VT&uMs_9iYZRXwUQj@yVT4-!$t9YK9W##aR KT j X&9 42*MP2&Q<84A!?Z)F=v*PY8Y6i(}Pxr4<5HWTdai}H~qU55@ zRHW?)R^U8TFD38PE0d%+R~+&;-Dy5IX%frvs^?S2pZ32E@}E8?bvO5ay?F-HI-PgB zlE_WaIXN_T%;Ay5?icqYy<5y}b^MnTJ}~)toc~F(f$d!h8bkgwlKEAejzgE`3aq1h z>sJtdqCBy$Ri|#ki+cK3^43e72k0f#YK|j4%V>cSFqbA{<;moB-_OW?d2?&6|H%+! z;b;FEYrWP5K|z4t|J==bxxL%2rZ_%*pDI#QnEW2r_~o!0Pv`kUZW$KMVkScjGfn zt>7WH)9&~hZnF{@?J{=r$eh?BK*#1)T6;Z#TWv!f>$rQOtI{Q!FwA_6i4n&dU)g@B z&FgX2Rsgb5Lxi3L90p{*w=}^%dxGA+kpVstD^Dbuw?} *v`|=K=@O*ukl$xcDzv*N~OiLPW@;OjW1q=CV``v_Oob++V`onMga@ zWg}~(SHM!pMEFn$NZKL84?85c9AcwS;Ol`-C@h}pOMc;TYnDkoZcsVR3CN4w9fiTj z a+-dDo9b_6euLuDZrvFlbV4YrSeV|t;ItoFrfIDdJ zcPpr21gOk31+e6gJB>EW8FTErsh)zX K*dN)ADFf8Q*?P*69i48 zA(np|;e4OC+EE>jE*-KuX_Yb^^&0%y-!z)pd#A$CMGIQC;z1F@`)#8Wh!&1<-NZvK ztur(m0+-?Hfay%X7GUQM6*4w!CMmwh-Pm39Sp!q{-j{~qC$AuffB%38!)b|Eatwn& zfN==W^j*Dp%f8vQmHWn1 W1_!W*sB9D$W#Z9@X3DouQ;+e)SqHo|3d$XP7;ze z3HKo)1hSqr>K>YE(KsCHkhXW E8)&e-RmmvF~bb5Q@d4 zO{3$eZtp+ctooL12aEb6fD4I?S#Yiy*QTO`_v>_&xE= WafD>N}Mgt1b@|DL?~U zq@}f-&n1tJZF@e+v5`EVO$YaTAF!kn9U* p`|1#rywJ* zBr9*GBc~y+rl+E=s3jxH&jT!;