From 54ac34d927834130e99924b325f044765625d2bb Mon Sep 17 00:00:00 2001 From: PK Date: Mon, 14 May 2018 14:25:53 +0530 Subject: [PATCH 1/9] Adding regex search function to the RegexMatch and adding toggle flag for full span match. --- fonduer/matchers.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/fonduer/matchers.py b/fonduer/matchers.py index 6a7be511e..f396d9ec6 100644 --- a/fonduer/matchers.py +++ b/fonduer/matchers.py @@ -228,11 +228,18 @@ def init(self): self.attrib = self.opts.get('attrib', WORDS) self.sep = self.opts.get('sep', " ") + # Extending the RegexMatch to handle search(instead of only match) + # and adding a toggle for full span match. + # Default values are set to False and True for search flag and full + # span matching flag respectively. + self.search = self.opts.get('search', False) + self.full_match = self.opts.get('full_match', True) + # Compile regex matcher # NOTE: Enforce full span matching by ensuring that regex ends with $. # Group self.rgx first so that $ applies to all components of an 'OR' # expression. (e.g., we want r'(a|b)$' instead of r'a|b$') - self.rgx = self.rgx if self.rgx.endswith('$') else ( + self.rgx = self.rgx if self.rgx.endswith('$') or not self.full_match else ( '(' + self.rgx + ')$') self.r = re.compile( self.rgx, flags=(re.I if self.ignore_case else 0) | re.UNICODE) @@ -242,12 +249,20 @@ def _f(self, c): class RegexMatchSpan(RegexMatch): - """Matches regex pattern on **full concatenated span**""" + """ + Matches regex pattern on **full concatenated span** + If search flag is set to True: + Search regex pattern in **full concatenated span** + """ + def _f(self, c): - return True if self.r.match( - c.get_attrib_span(self.attrib, - sep=self.sep)) is not None else False + if not self.search: + return True if self.r.match( + c.get_attrib_span(self.attrib,sep=self.sep)) is not None else False + else: + return True if self.r.search( + c.get_attrib_span(self.attrib,sep=self.sep)) is not None else False class RegexMatchEach(RegexMatch): From b74f34300a045feb9212aad433847f852bb827eb Mon Sep 17 00:00:00 2001 From: PK Date: Mon, 14 May 2018 14:27:56 +0530 Subject: [PATCH 2/9] Extending style parsing for an element from inline class in head>style tag. --- fonduer/parser/parser.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fonduer/parser/parser.py b/fonduer/parser/parser.py index bd460833e..01a610c62 100644 --- a/fonduer/parser/parser.py +++ b/fonduer/parser/parser.py @@ -260,6 +260,26 @@ def parse_node(node, table_info=None, figure_info=None): '='.join(x) for x in list( context_node.attrib.items()) ] + + # Extending html style attribute with the styles + # from inline style class for the element. + cur_style_index = None + for index, attr in enumerate(parts['html_attrs']): + if attr.find('style') >= 0: + cur_style_index = index; + break; + inline_styles = root.find('head').find('style') + for x in list(context_node.attrib.items()): + if x[0] == 'class': + exp = r'(.'+x[1]+')([\n\s\r]*)\{(.*?)\}' + r = re.compile(exp, re.DOTALL) + if r.search(inline_styles.text) is not None: + if cur_style_index is not None: + parts['html_attrs'][cur_style_index] += r.search(inline_styles.text).group(3).replace('\r','').replace('\n','').replace('\t','') + else: + parts['html_attrs'] = 'style=' + r.search(inline_styles.text).group(3).replace('\r','').replace('\n','').replace('\t','') + break; + if self.tabular: parent = table_info.parent parts = table_info.apply_tabular( From 7638aa002ffa5e7f25deae8b6de0b80d9bd07f17 Mon Sep 17 00:00:00 2001 From: Prabh Date: Tue, 15 May 2018 16:36:00 +0530 Subject: [PATCH 3/9] Removed trailing whitespaces. --- fonduer/matchers.py | 16 +++++++--------- fonduer/parser/parser.py | 21 +++++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/fonduer/matchers.py b/fonduer/matchers.py index f396d9ec6..ddb7cb7b2 100644 --- a/fonduer/matchers.py +++ b/fonduer/matchers.py @@ -228,10 +228,10 @@ def init(self): self.attrib = self.opts.get('attrib', WORDS) self.sep = self.opts.get('sep', " ") - # Extending the RegexMatch to handle search(instead of only match) + # Extending the RegexMatch to handle search(instead of only match) # and adding a toggle for full span match. - # Default values are set to False and True for search flag and full - # span matching flag respectively. + # Default values are set to False and True for search flag and full + # span matching flag respectively. self.search = self.opts.get('search', False) self.full_match = self.opts.get('full_match', True) @@ -250,19 +250,17 @@ def _f(self, c): class RegexMatchSpan(RegexMatch): """ - Matches regex pattern on **full concatenated span** - + Matches regex pattern on **full concatenated span** If search flag is set to True: - Search regex pattern in **full concatenated span** + Search regex pattern in **full concatenated span** """ - def _f(self, c): if not self.search: return True if self.r.match( - c.get_attrib_span(self.attrib,sep=self.sep)) is not None else False + c.get_attrib_span(self.attrib, sep=self.sep)) is not None else False else: return True if self.r.search( - c.get_attrib_span(self.attrib,sep=self.sep)) is not None else False + c.get_attrib_span(self.attrib, sep=self.sep)) is not None else False class RegexMatchEach(RegexMatch): diff --git a/fonduer/parser/parser.py b/fonduer/parser/parser.py index 01a610c62..5a8eb6a65 100644 --- a/fonduer/parser/parser.py +++ b/fonduer/parser/parser.py @@ -260,26 +260,27 @@ def parse_node(node, table_info=None, figure_info=None): '='.join(x) for x in list( context_node.attrib.items()) ] - + # Extending html style attribute with the styles # from inline style class for the element. cur_style_index = None for index, attr in enumerate(parts['html_attrs']): if attr.find('style') >= 0: - cur_style_index = index; - break; - inline_styles = root.find('head').find('style') + cur_style_index = index + break + styles = root.find('head').find('style') for x in list(context_node.attrib.items()): if x[0] == 'class': - exp = r'(.'+x[1]+')([\n\s\r]*)\{(.*?)\}' + exp = r'(.' + x[1] + ')([\n\s\r]*)\{(.*?)\}' r = re.compile(exp, re.DOTALL) - if r.search(inline_styles.text) is not None: + if r.search(styles.text) is not None: if cur_style_index is not None: - parts['html_attrs'][cur_style_index] += r.search(inline_styles.text).group(3).replace('\r','').replace('\n','').replace('\t','') + parts['html_attrs'][cur_style_index] += r.search(styles.text).group(3)\ + .replace('\r', '').replace('\n', '').replace('\t', '') else: - parts['html_attrs'] = 'style=' + r.search(inline_styles.text).group(3).replace('\r','').replace('\n','').replace('\t','') - break; - + parts['html_attrs'] = 'style=' + r.search(styles.text).group(3)\ + .replace('\r', '').replace('\n', '').replace('\t', '') + break if self.tabular: parent = table_info.parent parts = table_info.apply_tabular( From 37187c23ebe79645bc662f846e9c1d9b09cd2a9d Mon Sep 17 00:00:00 2001 From: Prabh Date: Tue, 15 May 2018 20:01:20 +0530 Subject: [PATCH 4/9] Fixed nonetype issue if style tag is not there in head --- fonduer/parser/parser.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/fonduer/parser/parser.py b/fonduer/parser/parser.py index 5a8eb6a65..f70073d87 100644 --- a/fonduer/parser/parser.py +++ b/fonduer/parser/parser.py @@ -269,18 +269,19 @@ def parse_node(node, table_info=None, figure_info=None): cur_style_index = index break styles = root.find('head').find('style') - for x in list(context_node.attrib.items()): - if x[0] == 'class': - exp = r'(.' + x[1] + ')([\n\s\r]*)\{(.*?)\}' - r = re.compile(exp, re.DOTALL) - if r.search(styles.text) is not None: - if cur_style_index is not None: - parts['html_attrs'][cur_style_index] += r.search(styles.text).group(3)\ - .replace('\r', '').replace('\n', '').replace('\t', '') - else: - parts['html_attrs'] = 'style=' + r.search(styles.text).group(3)\ - .replace('\r', '').replace('\n', '').replace('\t', '') - break + if styles is not None: + for x in list(context_node.attrib.items()): + if x[0] == 'class': + exp = r'(.' + x[1] + ')([\n\s\r]*)\{(.*?)\}' + r = re.compile(exp, re.DOTALL) + if r.search(styles.text) is not None: + if cur_style_index is not None: + parts['html_attrs'][cur_style_index] += r.search(styles.text).group(3)\ + .replace('\r', '').replace('\n', '').replace('\t', '') + else: + parts['html_attrs'] = 'style=' + r.search(styles.text).group(3)\ + .replace('\r', '').replace('\n', '').replace('\t', '') + break if self.tabular: parent = table_info.parent parts = table_info.apply_tabular( From 41fda5ce5a738b79d55cec316483005325ecb1c0 Mon Sep 17 00:00:00 2001 From: Prabh Date: Thu, 17 May 2018 11:06:48 +0530 Subject: [PATCH 5/9] changed to affirmative condition first --- fonduer/matchers.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fonduer/matchers.py b/fonduer/matchers.py index ddb7cb7b2..57ba9e5e4 100644 --- a/fonduer/matchers.py +++ b/fonduer/matchers.py @@ -255,14 +255,13 @@ class RegexMatchSpan(RegexMatch): Search regex pattern in **full concatenated span** """ def _f(self, c): - if not self.search: - return True if self.r.match( + if self.search: + return True if self.r.search( c.get_attrib_span(self.attrib, sep=self.sep)) is not None else False else: - return True if self.r.search( + return True if self.r.match( c.get_attrib_span(self.attrib, sep=self.sep)) is not None else False - class RegexMatchEach(RegexMatch): """Matches regex pattern on **each token**""" From a6f2a8eb710b5eed7cf1d58485d4c2c247f3b229 Mon Sep 17 00:00:00 2001 From: Prabh Date: Thu, 17 May 2018 11:33:54 +0530 Subject: [PATCH 6/9] style fix --- fonduer/matchers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/fonduer/matchers.py b/fonduer/matchers.py index 57ba9e5e4..06801f394 100644 --- a/fonduer/matchers.py +++ b/fonduer/matchers.py @@ -262,6 +262,7 @@ def _f(self, c): return True if self.r.match( c.get_attrib_span(self.attrib, sep=self.sep)) is not None else False + class RegexMatchEach(RegexMatch): """Matches regex pattern on **each token**""" From 2107c628552a704cf9f2fb3d99d22b6c6b361264 Mon Sep 17 00:00:00 2001 From: Prabh Date: Wed, 23 May 2018 21:04:11 +0530 Subject: [PATCH 7/9] extending current styles if exists --- fonduer/parser/parser.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fonduer/parser/parser.py b/fonduer/parser/parser.py index f70073d87..eb68b1331 100644 --- a/fonduer/parser/parser.py +++ b/fonduer/parser/parser.py @@ -279,8 +279,12 @@ def parse_node(node, table_info=None, figure_info=None): parts['html_attrs'][cur_style_index] += r.search(styles.text).group(3)\ .replace('\r', '').replace('\n', '').replace('\t', '') else: - parts['html_attrs'] = 'style=' + r.search(styles.text).group(3)\ - .replace('\r', '').replace('\n', '').replace('\t', '') + parts['html_attrs'].extend([ + 'style=' + re.sub( + r'\s{1,}', ' ', r.search(styles.text).group(3). + replace('\r', '').replace('\n', '').replace('\t', '').strip() + ) + ]) break if self.tabular: parent = table_info.parent From 7e2977bae6f464f9f587218ff2c766a9c4b7c278 Mon Sep 17 00:00:00 2001 From: Prabh Date: Wed, 23 May 2018 21:04:39 +0530 Subject: [PATCH 8/9] add a test case --- tests/data/html_extended/ext_diseases.html | 90 +++++++++++++++++++++ tests/data/pdf_extended/ext_diseases.pdf | Bin 0 -> 74075 bytes tests/parser/test_parser.py | 67 ++++++++++++++- 3 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 tests/data/html_extended/ext_diseases.html create mode 100644 tests/data/pdf_extended/ext_diseases.pdf diff --git a/tests/data/html_extended/ext_diseases.html b/tests/data/html_extended/ext_diseases.html new file mode 100644 index 000000000..8600336ce --- /dev/null +++ b/tests/data/html_extended/ext_diseases.html @@ -0,0 +1,90 @@ + + + + + + + + +

Types of viruses, coughs, and colds

+

Here is
a line break

+

I don't have Brain Canceror the hiccups

+

See Table 1

Below.

+

Common Ailments

+ + + + + + + + + + + + + + + + + + + + + + + + + +
DiseaseLocationYear
Polio and BC546 is 55OC cold.

-Dublin to Milwaukee

2001
+ + + + +
I don't like TIPL761 or Chicken Pox or pizza. Shingles is also bad.
+
whooping cough2009
ScurvyAnnapolis Junction and Storage Temperature −55 to 150 o ? C
+ Table 1: Infectious diseases and where to find them. +
+

In between the tables there is a nasty case of heart attack

+ + + + + + + + + + + + + + + + + + + + + + + + +
ProblemCauseCost
ArthritisPokemon GoFree
YellowFeverUnicorns$17.75
HypochondriaFear$100
+ Table 2: Three ways to get Pneumonia and how much they cost. +
+

And here is a final sentence with warts.

+ + diff --git a/tests/data/pdf_extended/ext_diseases.pdf b/tests/data/pdf_extended/ext_diseases.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6af968ab9f0071d76b61ab7cc1a975e91cb21508 GIT binary patch literal 74075 zcmaI71yq~g@-_+tcc(=|1udT7S{#Z)X>kga1TAhsf)=MOQrxw;JHfS(0tJc}in}}9 z^!$J4o^$UfEY?c)?0NRgGc)_0NftcUlvCj1;|AeBpV-;@jn4<<1vTyxdjBkBHVmJyg(iE_vX&f ze}L@xJetmqmTneSD9bvwP;(xXgFt&hLDa^-Jc2qp$eFuZ0omk4`FZ(-dBOYwd|-aC zfCwiqFDvR7rKjd-`F~fDl*G4ku>8xD|37>cpmwe(qdW?BsN?0VEF3MZ@OfTYIas?w zfP7#PVM$4#iz_N7_V}J@y>AS^{ShSe%QXG8@v^ObkcKT}Bu(IEo*&7Cbf>{LoY{K_ z8>*(X{VcLNah{#_ohA28b?GoGyF=CGMO*iS%IR>0sk*5~GzOTN`Nfi-)ZOvIF{^fZ z)s%vxEHH6F!_rmt=H_a3oT=Sc()SXQH0J-Q)u?+V?LuvtHD{*2R%&_tWbgEMgy@R~ z4OUjsE6XRC8|E^7b4e2YF=_Y6m(4~_Hp!flI-aR$|$R_uhuRiuib zrrL#F=No$&{`^*-^$7b2bfpb2h06IzO!n(7( zfg$&}r35OARPftpIBy2U?ef+>OFZp}-HuDWo7rD5UJQiC=lCRb&znU}$tBsAJR}vO zBc3S@O>jA9);zOy{+JD+mNLg<@zx*eHumf4s9-gvxy4}@D7k-hi3IulJ*1t4^X8#g{Cx zjqhwY-onT7t!sk65~ZajWO9Z*`%qo-p?11Gl>C z8FCdQL#1Nr9X-fBk|P7m2F63yW_ahwhd(0R|M-@-Ch7QeBSR2}ZX7g#fH7zD$6m`{ zjeXoH?nVl}RWHf8^JCdSHt2mm`Z;YbTHfT%Kj9A9I5u`?nG494`155Ek^TAYM$TzR zC9L!M!{N`MqO(!u8GQ2USH!EkYSpf~#*iX%lW%K!fDvYN5+9$i1Z2H;%if-B`k|*|z%Ku3{vAoiucHv> zWdgr0z?3coPuvsc9W~e@EERyR5X%0i<`E`gTKZv@OQja1{g-De$ieIY?KK+K?JJTo zCn}i;xk`?P*XJ&Ct9l4a?H9Zr@j`hU{=sZM_JK!js}Z@D-_0^KxMtnH?!dU54X2vw z6muhUUlQz+$J-Y9GC*EdTi#s_5RfnM+~v4m#tpXcFQ;!k#x@KmRKXc4asyVmQaz1) zR8}#ca-*dZeqX++I@AS}2;1OBXXKfwk&H+h?n%V6j>M{Wrgbe2 zHo5-IUxW21thbU)B;!-`3(}@t8_cv?RS20y)nT^YOX_5vQkn+Bi_M2eT0v1JCUwj^ z*=ZJ1@G=6cs&X`4fqbC^W`2^LO3I#@u&-BHcq377g&!;L{vm^dekSdU3{np9HffZu zmsrEPZ`%%92uR+I%_T^}CSH@b&)+Z*mQ&dBgC(7#@U)xIlTm@f@kW&R! zdt(I~W*uhKE{S@J6Wui@#lJP4v!l~LUai?h51VQ>XPPxch%C(6OJRq@t}?3N4Z(Sv zifFe>b3&POIn*lbRttRrQBHUq$95KJOTYRg9s7+C^|FJD>u~!XpV0$*(L)`h&&ChX z3F=CoEN(HqZ)Aj_E`wDx379oTu3E}-qSD3DHx96L58B1o8Cda&Zo%_EEXAVnec#F? zt!oL1)lVYrjFd`&h`*J#ExoQW?R%hq=d7!g8$Glzi8Art-`=0>XfGhGm3-E)wzh>%hsC;W0CoWV^gf^Q$m~?-?r`w53o`--{C??^7>=u>#2U{ zpk7IFVAIQW_=|&LVUZSNx;!^ejfBQ;u=$eDe%g9onoI4g1?hV{t1mq6&7^mhoX=Rt zJJ6>Lu=4)4o_`w2KTSyBKTSy2>w^`LN7mfc+|JP&)e6n6tz3X0)V}tAde-0NKRxW0YLAX?4z55xd>&P(r3=sy{1;{XAK2gZ{{qA3(YA7NbaS>qnL+h@RO_|Sv2sPB z|J8PRbgevHfjr9gC^ugI^D6t#tFkdZkG!X=qK@m|Zj8bz@&X0_ag;~F5#W zq~UC7<@}c%+rP=7ggS12M?3q!(dPY|A^pFpF%;zG<>nO;5)?H4n@K|fJ|S*lAwFIa zpn!lNw+J7I_wR-XkY5-mh!XG%@PdSZ{30mD|7;7OmO?_PWB5eC0>(hF0P0i`5VtTt zh@amWC@6@kU*5k(AjrqhEhNG(B7`~$#4RKU78C%2K_cA3ydXi5|B?yvfl-D)0>VH6 zFh4ghm{;hp@qZ%(1q8T-ghhA-f&4-!Uj_Ji|K2&U5NZJBR742G&By3Ch8L9?J|PhSZV*@q zb=L*>xk3DVD8~N-LrvFKsC)l682@z-{rIIkw6KBOgn%qx;NjdanWO1^8sAb|*rKP#$d)VS2 z(u5zCNXe+>NVSaQtUl>sV!f2J)QW#5u~bpw(?x3b)A8cw;9^gxGqa+kdGx}h&HJbE zf-E_i2n3(6L~7*+jv}b;HaHmX`^QO{?rVwTtbHG*_PwB>uGFK6{#C&v3jO zi|Yt*@Pce!!p~5jujE~G1V4GqA;?H1_>b55g2MZF5NCCOKJi2)5>^mPO4RjpU&PZp z1qgwMpVFjM7~47hQTuRP#)H?u)B=ed_$C?ldc{9e(v6*4iO1Ju_Q$W`bE=%%oM-&Y z4~dGWm`@7*woZmU#C(#s*8H7}JyndPrlM_r03(3OMyKKxGDkyISrN_w*vDzklDuIb z!SS@!XQ%D;;jc>)*p{l(6l}h4DL0|Fjlp!$N?#-7jHCi@IoBxSiM(|ean<#6k`Yd3 z?3EY;*q#z6aDBK4;>&;!^wx@IP7f5DvyaE)Or9NBuqR`g>&_gxL zy3|khrlel(8j_d!GD8~~15y#O)O3>^7YFHxkTsSv=0~@x4?ngkQ_ovh;>2o;jSabY zdi50T>9|lgHtZ*4mP4o@-FX$EwMO;S?w5w4SMzcD zKu5xc#U5FOe0Opt?eAG{E4oW?SaXoznt49@nJ%aDGsk#Jbu|- zwHwo6NJ3u8u5Z+dSdd5Bg*eePF`&hh)>i2Pa7Xo7A^X;Q)SsKF=T0dz`q)>?uh5G1 zyWkI|)=ZvDKL#_{YiA0c`=7V_B?ZJZMab5nkxN zy7gK2irKkepBicOio?tCqXbVLxl$KKja&*M2a6iG2909UlBkLW6Nux(#PB8P-+nUK zm|(M&h@xn{n|Lv18^&#bqI_$$FG{D7CA;)JziHO+_n#P7uSW%Rx5U<+VLIWpAul3 zvT+YE?LBIX@y4&k+%DZ$xc4_JHGNqaw7RPxg76(u1>qij>XP)xm3*?_>lT%?Ln1~} z`ZRVv>|Eq}T+&ByuLj)RxP)lk53u#Bq|1e5Vr>~n9S)>D?ZO5T!zd=4sQDlQtVwG0Z$Sr{fsC!9St07?GuG zL9kMt_JHrcYA_k)Z&39c$#m$2yk@H_P8S&)`?eHVm>O*SxEMx28*dzPKMz^Nf@&`P zQar7#Pp_}mC??y8&W~4cE?NaxL7rk<+jX}#Jbh63!BZP@CJ@O`@M5!p;Vy>M7Ljm7 z;FDvOa{N`pJ!&HSxFbsf=l0{-lZ7{c1`d+(Kg+Zwl0Ll-wqwXu75$X*d4-9(RA_U` zbGs`ox9sHUP*_Wq0(wFEqD^^=`W4quf`4xR8&Nm2B^}l#yggl)Xs|GD9rgBcB)=nm zJH2dr7^G@8MxpXWX%)Q(dK_5`#hsmu26`-eCi87_mBTO={3*R1z|(qE$c2k_jrG)# z$!;wH%utUd+H=)^^cnFKW)kvpz?$khJMJObh60*F^WfC*q@FOu%;fQ+kLZ@;k!IO96;>{gf`a-6I#znZ1v1Y?GixI#WORS7x^g z{%%-Nq##8?yNWKhf4eJdC7$q0U2Q`A%(h)BB#$&5{1|k3n1Aq;c&Y7F9N9n6pM4Y8 zj*vFHP4FK63}0yUBMIQQ(m@LgxBQ}x)|ax!fL(@XMxwcnBN|#Ogn&rR6i6#&Vy!=U z5Y8Ev0*d2Ors&rbdsP;*tMYHNeG6%atP2ONE?J(ool0@^`_TKc09i7)4jR3W!sSHfkixiq##Mb!@*g4s>wB6`Mm7RU2Q=B3h2WxhdF( zWlO4Y?|&)jz*dKLVBdEd;P@d6Fu5UPI5D<7m@)4%zIFPdU8n`Rf1HzZ;JGqd*`YF} zxU5@d4A>yMXE{D>3#c@%Y?x<>@I}A%cVgIicJVeu14(@sBtb5SeJ<~noOlSTH2(m zf6RC6s)Ze27!EG~cpM+e))M6nIlzu_u}N$qI)TYudFy1Z9|~SBek>!hd@`1b@G;<% zC@BF=@e{AgrKixX_IcL&XkNT60d)M~USqSe9aQRH)br(TbkMZVm$0Ls#ohN0Zrj*< zT<_Cx__N7(!$)BBBoy@c$R|+pbJqI3v@J$M_~G;$TciEfQ3{aBz#Vm- zl)B@aOc`UbxCgM!`*8kQnfu>Udak&(voER+F3GCB>BJi!Tcl$(y}L~eolLBFYt#_p z$Aqnx6_Y|#Tio=R#3t~%FFQ83-raZ!l7(731AuQ-y6 z4w82a{L{(<1&ofFrWCfHs}5S(rj8AZbMqy)A;IEd-|s&d%iXLwYZThpn3lZvqFo)Y zQkdn{Fwg-QibZ9bFVcF0dS-E3J&A2qp7*qjx6Lk9Zdk-??dw~0Rnm z570J)#{~oX-q20Bbh-z%SLbN!%oKEVzJC)SM09)3yyLayGIcVYL2DN(`e;u*=hmM;fk`=+^AJ+Pbx4|7;%0zC&0sH7bdj}9xCf+Pa>KU{@qJCM8(7z8{#;ZSPI zNV=%Y-<fTO2U` z)6C;a=prB0fkAZ6$3`P*-MEOoM)5~SBwdbxdF;~^t^uSNAaR9z#WQZ;_GqX>-nJ}q zlY01@Zqm(KqDLpeeqn>G|8^%eC4%MHmvWaYa}MVB%UefiSSstFxTp}<`vcwg>a?u> zV2QAfNAnw4XNYF(D??31=7X3=9vV^pgpkipV=^_GOj!-M(=sWs_2Gv?ePA~hdmV!b zK~>Y)g7n1FF8?JJ`#L#qs_7cAlmww+v(_D_#J6{DKXWSAkHk|UY3HP8Q`&I{8OQb2 zKYt<%6HDbY$1A8pdGejyAGKxa&n z*b$uDlf8ZfETCcM5kG@eVi zxg84@21n6Ol5NSRiFID`C49XbD0TkO;30ko^^OMKmA*=$#@4Q3+b&?w(?t z0n3ep#XGX)TZv3?9FqWdH`~}V1PG114a8gvAyOY%<ud$cr4PVhc4l!2#1O0fMR==)uRxvvuY7HTfFF_bH=T}*V}jb@H!QjWy7Gv!m#6N z3@H&N5t0g=PJP7Z&`aJwIBPKC!2Svx?yzrYUPeLrN*k+U?ru^+$1BVHtuchc421NA z2{HqBXFI=LD0m`#U^6Z?cIIC~Oo6a?hS1oYwkTVTarG<_nErmtZaj&m%dlwPUN7zJ z>rkxA7kAv)V`Gw+$%U=|mMXtd4)v7tDj`?(u!=vn&B*4sCVDQ~MG;=^#p+o&^( zmP6zI&H}Zcl8PCxhBWQtt+oRAld^O=zHUiLTTAvBSQkQ-m_qCOvu|}vlUD2agCjpR zP`+XHgWOnWW!r59FI> z@xP&Cw0D-Ol?B}0Upd74k&O=@z7MBF9mQ&spMU@2$K&dV z)c2}2Q1{*q-ffyjKX9MRoBjT;tI$=jE8FJxA~7Wz0#V7}4C_^By}Y~$nz!)OiflUd zWij>X1O9BNbRHBomPE{CA-eers1&p%)GWzhzlgoKsL)_TUM?h^qWlosAcnq&armkK z_=ak2`3N`y+U-4uf)T5xGOJ`H<7U^<ffUPIgV!aHMVEGVz<&`+vs(n`weJOzFinot|sp=tKO{Vm&fKQA{&`Vq8w zB>6q!yg6tJBM|h}FL!65Gu7mg1{0d@0&Y`ErEUebv{k8Xzo^q z{-J}{MsZ$&s2T~N-=dDUXQZphvHXYdhI|`52AMP9G@1lX9f1c&?OB%R0EoUtN2d*W z_(sdsv&b7QqLGbd!0(eNnz0#S+QW_NwXt3SNV0PrKj!6K?1tvP*zR4TS%rScc7oK> z@)(Hr-QM>?pv)}@1{krhvc#N9Qwt=gVc&cdqG*?~*G%=P-}CIs|XUHIcz zM4<5{w3C%C_>SD)9f{pYFzqkX-tsEz#d)INR9a|N2SRb>s#%9<>SN#V^O*;)PlcRA zY1xz}H2!{1jzibC&>n_Ix({@Ys*bF+Y&?bn2&s?#4h4huBJL%mf96@h1#*^(G|J^X zRM01xR6QaNh2Z<*+zf?2kAq&ReCL}F=g*9+iXx0bKdVa+!yG+yLX0&rHP5R{hKnaZ z61!&4%vIRMvw6nmZxX_PD05I2@S1+@;%n5#jN!`+ucW1=wr#ua1EiGqI(+Hd`q*rR zT5s|os-Dd7``uF=bc>#aO^RVZr%#LENj&$f0Itui0}q!BV@ee#HaW6 zvAMi=?g?>+$5i%hvhCqwzA|T;Z;?{V-QweqOJW2^g=2Cbyl}=E4{LDNC2E#(sSfr+ z=IPq@Mev<81~pW!T(tZI(T=e#nJ;K-wdP$~f4oigr@0Hd_I!#ju@fz_Fe|QevUo7~ zpiq1Js{a5Pam*n#b|hB2BC!(@fADsuFrF>L`c43I%)2-bgLdd`ZJ4sw$zaaCT!iPn z8$%IRBk`O1oO#8(x7$y}Dc44<&xHc($<8`tsBO`Ur@rUCrDGQVNI5JVZz>mYOWlU{ zB7OL#r{VVw1%+uMC9Mxb>Mi1$TveST?i zY<%bxaI{P2vs(6OPW;G@Z)U^n=6%~k3H^g!(``%N-Pm<`I|bX?SXi$S3pCU-=0%Y( zPi0eU$M=`l5*Su~L}}IHw5aVby)M$14hR+#Y?uT=8d^KZZR^=#o3N}06Q4VppW+UJ zWZ(v~Qm$4{24`rj4s+s?eswIt10D7GsvFxNs)qCwt8jWX){5m=9nYxp6yVGJAzms> zFe5zjC_Jc5hNA-GlHp{3#i&d;l~W=%ICitye}#S@&nY%8vu>cCR@(RW7Lq0WXCy3Z zc&*|jH5*W7rj{a?FRq-o>%%tICEoaA*fwf(ap z4!<`tob10g2cAb*L+^?c1f!d67N8aRf^7xIHx%IK?|r#7BU+2Q>Th3+N}vBZQ6Fh@ zp~Ue)Hs8`K`!s8OC%aH*HNV@V<>OWx@cOYeL+_Qr1^Gj^hwqxpw z%B)Dw>c8h&ZL6rfe!yoGl+BdvVLWjvAvE=%y4Bz`BRhY`corbBPb9T!az)XsdjE{{ z8#v6-jbMR6{EPiV{;l2l9doS|ay*KJFk?ZmTQ)%iB<2~au-h4L7HuvA{zYsaC(!3Y>Mi^|V@i*IMQ8jq#q~o_RUO5~7}ztEsPR zQ^7_RaVCEDuds$r@&RpdH|Eo?UTwr5XbwFbC<0^=k@`dYXDS^cL#wyfGn`kDv|sCu zakaa27y3Q=sTPaxmrIVUO@HgLbqrkz^^8p89^J?s@IplRD`FyBDG1~H`%M;J_ud~j zM+^4c76QUCn zl`7#-ErVwu+t$}SQ`^Un;cD7?BU?hkn#4P`x@d+{q?5hH-tkg}9T>am3bt=SvqNLd zuW@nURZ$ypZKwQ&%y-xPwXq1!l{WmGAgb{PT#hL>xj8#D+euag{2^MDbHy>c@;twn z-cH~gZ`$@jCE4uK4C~g!he;3NE+7%_K$6f8cB|#B3SYdM;C17~eZC;wdusb3=tvrS zRfKe(BudeEqmpEf4s%)pj)inWPZ`c00_mlh$8QPMWY{7mepW!x6mk9UZKS=$YnfvF zYQL_UPKK;ft%Q~JBsw#3V@gyAX$1X_m{#)+&a}m33@P(Jk5J=BsH>`}neGJvfA$U1 z)Hzi$%M2}b7Dq^6{dmro=?+{XP9e)v;o2e^8Frm3s}1b_WHsIdA~sj%%+H58_V^wy znM)bFDp2y2bss1T_L^iN6sROzCJt%>i)se_|lhr^2`!+>%x8R0V$`8$EMA{gq-)?XGg{ts*|&k7T%Qshi&ee|PvSs6*Ws&G z8|O5+hf}Z2QZL&R=TmVB?fkB{N)J!+q+>pc9-6Mjbq!KxP2Orvx2qF6nj^PodWg86eyEmlfr$fCfQf)jBVSmk4@^|t8KWAzbk#IuZhK`&=@Ns znc;^I{VC1FcY_Q)SRJv&YILXDlw39pK0p@)cmU2SzAXMwN^(&2W`<}Wzhsq33z>#b zB-xRa>3nl$R9+=r3cWNu)~}86Rjc@xU#qT~SNMvt{E`9l%I;;ea?8iMRng1U+qFAN zUk1Wm8DZ@$7E95^xUzWcYZ}eXlswujrdO60QYnsg=4$?_CRIei^t3KgN)bJ?=Xjfx znsl3%6iMjq>K=gIS>oThcD$BsXBb?|hCDqt?VIeA zS1b@NGXW$rPXfK21cG)AU<0hV-C@St^tHdh)TRMqK+Fr;EY4FKCVmoL@M?{{s&EY5 z2?KU-Qb<@&eSsztP0?U>BwDXnQFOn;ob&xfKa6iy^7z2|IEKx6sJ;J&Xi>TBu^nshCICU&@8*)fGqoUCZGNqlK&ZP#LCI3eZmoG)+-2E8kesAR6!Y4XwxYw)=Mg*vCeSMC~ zpZiO8F10;`rp$qC?0*4A-w@)rhta`0(xrsnOKJMwGYU(k_Kto2*jzs@x5g8nEiV6d zNG7GURhh(aKkr2X*;|vm>>+M%1(Arhq2b1R0f|7*#5Hr;VE&+5t-R%9T8 z1{$O)7?dE{h}}R|C99k6KUI^5C|2fkzTGaEva0Fy2Na@;v%@FBI$)mDttQDjE@#Fg= z>*s@q-&nO>oD{aJ*=c%PnHC>IYt)98#vGMTnuuSw3iW0B+=oj{`9JTuXXO- zCd-em2+`-3V@uBo{k}jzZ?Ar7KE8Rr{C3UPJ18j3E2Vl+`Y`py$_=-pmcyaM8(STl z_k(%VQ+mh*dr+5i95HkbTIj|v0ojt4Ev=~}fhaN9$08-aasILUm9*KN3L5u|Qg~}? zrv9cle2U}4+jQWf8r4A&_L4~3q6gVM+n-2~rgXls%*P9g7^K~?Zn+l!W zWwGRy5hxd}13}!da~jL6v-DWtwM;BhZun;TE{(K#G;3`P!?5do?TZeB^3B&wcMh+~ z1fo914ZfLT{Q*Y$mdfZ1>F{gtx%K0|md`6~{X9{p&Y~&wE9t)+zq8zisDto)-4?!GBZD0^YsKT zoS*i+GMceQx0jK9l<*M8)99UgldM!Y*9?v^Xt*_6+~YBHn+yp%Jg-j9c)z~E7F^aA zuJG}24y1O4WXpYKe)lHiP;^%#=u|S4i)C;EKn|x|s$@ z$qGkr7rO%z?Xh_~cA%_TnW!(0&D!jldBdj^LAhtQ##(+U3MR69Ki_PZGGw34s!dLe zlY48??dXmDc{QsjJ_7N`%x%JWBA_6C=fiB?iPbUN}(N}r#t9OMsuE1uRn$R}1@ zBs}q*Ty80v_998>Xc*d|TEkdrTgX_s8_WgiIgqm@;^0I)EI1u8{$T(mFyK>il1=vo z9Y8o}JTJ%kuUb+MEm#)f7zs-Cu;~uuooQhmpM3+*!?HU3`A3&pCOIA-m^#za7kbi6 zC=algkHj~M|QkC2OjxeJZ9q9BVO^*0sHXND363I&%h(wzTOT2zAn!&5nYWQpOQW3 z?}M$0j#4J7Q+UU)ts~-KEsM)P>oP^yf9wKn<%T)(WV)~SX3}Wt;%WQxY@_E`GnM}| zt?w1bGn288`e`I9zQ5f-dEzEAv6n3f14=HmvB))}yd#ggmT{vs^6mf?6c~e zcD?x6YM>^KZyCWg!=}d&MoF-wKE@vQ?4CERRab8Q_f2gKHa13xe+QDJd3k83bJ4LW{jxAD3$S-ZF;NZL*4#?e(2RpPkPu1UJ;#N z13&gv-^b<}ua;I5buY>L`%VAZi(ALgYXEHS=^=FE2lUM4QUVa=SXgaIJ5Yj?Xu~m{ z(tTkk-SS)iXydA85_Y-p4I0#(WHeZ8{wk z@>zmexj=t)tfp2xxGcG2X>k4^H7mJdm|sM^JBeDeUlD6$bn-in_2rqqEs(ovARjrv zJrr)R?o!ab6vS-!(s{u6A$4Hy^&uTz_LAlDS%@F2OkOVRa1M9({Y>e8r5F=ke1C#( z);zVZeGiw@yu%a1R7kP)xbUh$rMSk1px*bMH`f#DdwM|zBnW@SlqqsHP*=UBQ47}5 z9GQd7xaI%oS$RonF?#Jpv{(rmTBXp*yEPmJ`_+wS5rdEua{$M3Klk(>oVFY$vJ3n$4Qjsh))$CUu z3pM)`ZU!Ud-4F#mTK`HNC~`Xo)V6=(=dTLu$HqN-TycDXOXG+=r%c4;}eCvfPiZCA2p0 zSuGD-e){rwfC;Sr(Egq*(Jp`%X})Y zu(?rJPp~rH1jVB2jDA_q#@X}B*-OzY?@RBi{j;+pwPX9^y>o_RhO@iPmdy!@8VW@g z$uEshj>>wF`N?KnNOAzvcFU3kyVK)E@MG1G*{SIJxbdg^qzu4GcB{Abzu%{OYBpalBc(BQML-9^`udUBw`N{`GkCpYqRo&nuE(ddF^q$)5ul^KZ`jPqigT z*$6O${hn#Z7`@1Qwd*hi&~A^7Hlvu)i8~gsOYr_OtGZV>`kG);Vq4~{wE$Z0%+3l; zemUgJymmCpXy3uUc9O`DSd(bVyvEABhT4cs9}_dB)*kg}--q=#0kju)#5Zq;5>`bw zKZy%!1QvcO%q>i{4lA75Iezcm;>mO(x%Zt++ksB(g}VyI^B$H-rJ_tEt9dE=8V$L- z{!^x_699Jkz1tk^TAJk?+3Pddu?7^H1bBtdfb1Kt5I{f;<@S(MeBk9RG8X z;P{%)?^(GH`>$5-2Ja2-wbr!#Iv=Xo*R}_Jb&C3iXvKh5?0TxvN@_vz2Z8ZE1?Q^1 z+-|blH*v=o#Tyf~ARmMGv$eIc%xlA2@r>x~B-wj&MbFgO z^~2&lN+rL}i8fd`ymn}qzi-mm;2y16*Zcl0Ltm=G-ejY7-|Lr`&hh&Vu7Tmfn=?gG z4VtZYYD&o}?^MWD975s+R2_JrhU59qI{s)5E~%;~#&74bZa+Qci#v8S8iG^6J22fb z>#^_wbQoChX}}JKEr1iii7||!3Q)y}1k?Zo00I~j0AIibPBYFvu_d+vwgILC-aKUy zT@gjmV`k;I?Z%Tn~w+5j0|Jti12qp_wvz<7@si zWQ``#AJRW_UE|BOHrnCad3$0xRz|*Tl~U=*(v|2ke%cWb1=x?RlWc%;GFMC@c> zi$~qx@A}IGojQ-`-R>4v;YOz4`f2NgMrMYu_xe_$x`vpCjf*JQru{ z2jG(CQrzW))6S|%xDTI${5*lv@M=b^54Qt!KCqG5DQFeD&n0%{#=SlcwZ7|^IzvgoEEA<<7L51}&TV%O9pX6!mIB#*B<3+T zvISm_cKY!Q%^L$BITwsQkCWx_9$f*=0-co?U7G39b$13v26hRCi<&M@2D%CMErO%* z8GBZ=v?E5dg-|tBElmJJ+%XYE%8aF}P}&+$q$6+0ab32LVT52ryAc6D7RIGS2M3%W z)pVB9Q3^95CO$V7sm`cg$l%Um$_?Xg~w~?4<9+He~=a zdU5VE0r>ZjN4e*8UH!jH_RxegM+2R2qip%IIxv#R$`$_DK?7pDub%NznGf_{#iJ96 zy9O?ezQvUl94#b*6la|fLclUKfJ2Tt5OM>aL|P8O|0T+-zxN&q#s&>cCtFLmP=T1< zM1HW)+@(sN`DUvovxL4V|H#?t-HXu$Tv_T-3GCVznumj4Xy%*66t^E3`7ZY{JJR|| zL)#m(9?CDs7||lc%e8~E#TYkhaYVDs3-{r~o{dpIGFZ_eki+SqcJD@RvwKgVj|NTf zuyhOhz_3)+vdoe=l5dz-bA*RyyEXvFWHYA$tIHAoQmA#a0&B5`#?2Fl?)dQK{o&;3U*crF{BbVt&NgqC*vgPcH1MJf8GO=`(Ig4*L9qhz{nLFOpGKgWDZ@Ry5<#fmD z+7t?XiN_esgwZSh3L#!2NgQz%r%7X8o2<#yNb_4h%NOnRJH9b$OZ`z8?`10QkAO1@ zq%wBtvPPFHU`j*A6isvVT3>U3!z`~7&@W<(hIVWfK$MH;V#0rpbF&ll>Zj0zV35*S2&IGsv z$@ZT6!Feq|ee`?&GL}JAI+pH(S&Vs!Hu>q#Bl;o$niPFSfIIK9bbHN8{tJ<9rWME7!er|AWZm58 zTj)Lp?y2?8e)X2>TK4DIRp;1_dD)@k)wUc)08{I|)MVtMZ8*&wg?_)yY*GzDyBr7#xW;l<$0hQ`QMR-30)tfpS489)LWyv~>G#DH{wdr(d=8LtF zb+6-NonN-LFZHdf5^Vk*iI~@7z@3P0-bQf$^onDn{Zc;q0q|qlZ9y3DqmsbQ7dxl( zrWqOC%tl8j0?RdTapp61 zuF8<}$BwvP&q;@j3>#evH!bU&E=ijUx$wp2R<*Cc9BulV`(xQLgDN0B`W~HfN15?} zZYov$l#3)P9KN__ZsZlGPxvPZhb{x>S093S-MoDruE>Wx5RVcd+3S##IJu!26M;q{td!y5@$BgKE5bU_Jpbz15Sc^kYbUy8$r42%4_L*uo?tLW#oBuzMFSwxT^{qPQWLVnMcpn}_7o{+Wl zya7lk!PaSDGEVq=Eb2hrrH7uc!}R+O=8}p74&vg`NILmxF{TSUwyh!Fx(?oL@S~9= z^3ygq&gbAyr? z4>iKZ^1B&5c}*C0@?!Wi6r};!;$|<=MCq4pZ^oX%!Q|atYfXeHxLJ&jR-cg!Tcnn& zYQU|-GHHvdP}Q(hjLlpRLI_I$pEqkjJr(f45_yhxy_t?Ni-kx#9>x5Qu32?q^|}3$ zJODKXf58+o77dH>91AExa~-?^K*-U2BkBTK2sBF>Kzaf17_y+!*j;27bGRx$y4g%Yb+~&_~;Q6f5P57MY-wSpyx+?ocF8~QV#+u z{Mt&-qhDA)r~5Ssm(YJE!X9DtrvMVcOyb3!$e~5ASHPj0u<{#rM5h`4rt;gD%+FOy zKeKd8l%c#Wbwz?v#>ORzXIm^oS=g=u;5@@3vIUjsVmxsE`^hu|P1T{ixgx3s^|E53 zx_oz6oCW2*Vt`wo`egEc&Wq;MW=;KVg$qrOZ5fGTnzI6*Ey-=!iwVGFQYAH#Fh#ir zO3anB0eN1QqYnYEjnfY0PD8lXCPcl{7qiZErRg@+ydwpFyq|sPI3egAwwS+1oXnVS z=N-rB&IXDxDIf#&Xen7hKFE=M&sig@7%%$hLMAmX3le4P2-X z<&;ncK;HD&6dU%KKBY!J1r3__`nhtb6CnxrRew9 z^`h;Mv0hIL5S@_Lwn>>7hW6HzCve8kl8qj%NK#$#YR`HkjOLET&1)b_GZQ+2F?;-Qv#4N$J~ zBL#v<%3BZXrNAEaAo5Iii9N^T+MP}oH%O%Ta{s#pHp?Fo4c0v zgOWK-+HPU~E)4(XXlrhg$<5t?{l=V~vwdXL6i5x-Yfh!^^9WWHIA<5ZrC?1VGM>t?c=|GK+YSKcL&6FRnvWAb~82Jg-O{K zGG_Eh+V&IQ)s=WFS^Jj_N&fsLlkS^S6YJ(~#(o3w2cJDn->c}895K6bt+#GAT%Z_R zjJ0ZUt5>!5|M5#beGmD|M|7^d#>1^%&H7-|?prF=sFD_eTm9Oe$0V1ikBwE*VfMT^!JngWc+1uPkOf!wNb*%j?M(zxlzyzlFLKb z?6@9$EZb;n6W&UfUI~g(T_~z~HowKN-D2sow5c_sCH~AtC`fOWt{9< zCk4=ON`a-gv>prtTNTadMQhOLl~vV@>oJnrW-+Mhcj<21GkJ^aO{9qDOt`eLMv`)V z#}!&%5EZvJlWFZ3PwJY&VzlSe&4T?Oyk;TKYao>p9wrM)uAXWhQb(C7t+OWfCQ8dE z=D-=PCl+v5hs%p68VJsfAs~mERPmHlkg2Z{v*Mx?yN9INOi}Bc1y}l!soaru_ypN8 z4fCJ=0*NCOu5^|#-YgKA%T*bQ(&FdLs0A?N(HGa3AXR1q_AHm6~i zd2?i;=AmQCds-o8Z2}bga$HsK@%xguQk|Xtn5t#A>Sskn$m%MeXor@W27*iS1edEr zX{Pi1$N<+-1w@t8Z;dBz9m}WhE@nanzltMPkw%sdD^3;XO)0G^>z8-Aj!u&`%3T+2 zaMg<@G>Tg6d`4^W6;Fn zRMOO}F8sBv1PIc=SE>0_J+rxdb>zWRR1k7~>N!(+Fro68DKvlv z4<~X#V{WWMl3EoLFv=A%W}4VtD#;ZglDjxMUd|jdVd#V&1vkazXjE~gI?fsf3 z@|4cM!TMZhpLO%UNX23qMlHwqaMymSigiHR?&9S~rsTX7t&qtF)JZMTgOZL3XfbTB z2zN3ho-p5{rf$`NwTOkpWzrahw(87k;!(9}tc~U{l$nV#k{Bit4w9S#Q3(p89}BCQ zBrUsj-|w=u2pHXV;>bL05LyE|ixe6XGY#Mu*$RPM1=Zk>NpkDCXs-{T7xhEcnIG2! z#PG!*&5M<0JJNVJ!koKdyF!Y$fQAzBxtF6{fh;Qbg>RBOw0t5)I1 z^X=vBgEOwc!!8R99mrrrwpAO};-I5hZ2T>|`=}&jpzDeSlh!qVZV4S^bdirXQLAl{ ztXx5xhr`u>W<(5DuxQ;<(^WakdHC{GT`w)BHTjBZNx*_nAhu z-d8bAvlTtF2zZLsDuGH1!{7M*hi|;*g+6#mXzZA8HmM>6z6{XcuV_d#9$_nY5- z`!&oWuU7`AtcF4it1=QPFDXt9s5mm#$o+S*4gzsixhf08#yRkSp9e;WJ77TXL-g zPqdRO6|anFBu+aB$%?e=ha44?M8(?KVARysz}6#f>up2xEI!9Cm1Hb&Z*ZF4tySl* z`zEo-b%bC|PU6m!P~(8cxE#bY)QLBG|7p+^I-ek_bbeu*u|dH1i$Hf19f` zBV;mLTPk;J>Pd)<$SC|y6x>J|E<)*$Eh=FPG?0XFjboQcUOJwXLiDBp((7baN46S` z;U**QN308Lh2Jh2jbAh{F#{bE%V_A${z^{$88fYO zYMYuPEkC53sR7Q5Rn#cWQ&!o=&u3gZpvo`fL+4L4RnF2hv79TtsGcrYS@kNBg9)Dc zgKjx1Wa;Jz@8b-bt_hkY5We`u5+OQm?QUiv#!x5NCF{ zs5+l)>F57b*qLB4Ry9AlK+ni6k;|vZI&!QKSGFK-qYf|J0=ZpA%F6Od4L%mA-7Lvp zlHK_h(6f5WSN9Uo%X-XCuhDYUQniea3#?waQ|xD^8EEq8sfDGaY_lCz=Xxt8Z7~vy zOiR%=QZn2s#>Uqh8)`w`9uL+f{r!^aT^K&V+m|R$ISlO!B=Ed;h-UV zngyhn8hJE(jJZ3G@RpI%{8sdsu2!*_p)LGu zxQ=t}6P=RoT_)CKR@5&dFI$$RR4FTa-D~Nnq&625AubzpM>Zq|W>8|($&V|WcTGH_ z>uhdQ|HDs#f@B3}puEtYrJip^>71)F0?%aF!UbJ>Urx^6{*aWS|K(aIt6m?J1_|r1 za9~wLSJ1uQHIKpfa6G%N4Y)W^Y)%6h7H@Unqs_^#j3$-N@{^Tui4{f2!JM@$|V( zBUQO{tc^vnY&0`tsGzE*r=0=Cl54!&P1}ivaf2I_BenAL@@#efQtz9j(p2cwIVP{v zuvCfExq9TfGLwfor zGt4VqR2h2{8^A$iAqk}HqzqGv+jzSw{L+j86-SEWvnN-)I!VVMtB3q*rYhYrTs*z|aUXQvTIjnIj)TF2m-CJ%L z7G1#2V^h{FDQEhb_v_0R=fdRvkr`KBS!Q3d^ft_IhS}cS>h_WBAPOZ_} zqHgoz&8lXwZDgTz2}?VK(*;zyrz`uv(>8HT^bzA6D#KPrMyZ-^GHft zBj&tD*&V9{ZDj0P7y=7Mpcc6{Kp9W zHjz~AR>rOFdYtUB7JvD;m`+bpsVt8oDO5m`tmTHgm? ztnQl%Z0ph9ucJtFMNR5N8)owIQI-qBZl>i!R>|Rmej_@{vInac$Vp5}R5L_Swd_z^ zc{+|Lquuw{CStMaS667%xq;FKq~@)sZpL2bSH12=>FjJQ+b=F+q@?)0J&m?$9j-d` zynuHB)ty}BKIPdGCAX%h*RJbrt^z)#Vf`c`meW20eEa9B_a$KeE_S26+LyTN2nSEs^3_2YKK%B!|0I^y2~_hhw_w@E|zdUaJbHFN3t zu4e$XM$dY>Ifb8;;F7?+1fZP?>07ZV7ZzDH}75}Sud&$@>1 z%wUtT1{3h(lIS8syb)IOfJ28P>}x_NDQDWgv^@^Bd^YYpALvMxb#7~(C9wrf1rRi3 zqhd1HIK`A+BpDtI7Pi6l)XqM2i2&B#8ov|pKp%<}f{o$y! za~9ispbBmMPCbuv{jS&8ev;G)Pg_BTTG=(Ggr}P#MEcHGy(aWgO0%)~G2w}1FZmL8 zN&F<)1RWYJ@~5$AgLbuhwHF&rva6|t^GzmV9m}G$!dn%wl6@7BKGydlcW-JocM}QU zGu7g?RMrM_Ep1c_Xmq>&@xULAg-4B}bg(V?6{@sjHc_MDF#(5nuxfb?4U3C@ELJX; zhV`ohm_kTQMn~jkq%q>Uu^9nA=cGQFIO2_h%z<=n!Z+LDd2a9`5?1v_N7&1-__)0M zO@F3puN+`uwa_E8Ymz|Tp5v424nTKzNHuKtU26LFrZVfIY1bFw7kqYaE6oGi!EeG% z+LcYqRn<-80l(TxtM5>%wG|vYy7F7h)2OQqjKm_`^`Ni#M5!Z-dP8YF@v(88*&}Wn zOKW04*G&~X05Z#X+W5+NoA}dsToht5F?G)O}10+l$!jmujDUcBcM(`pxt`uj0ZnQz0i6&#xZ|)4qNc*wRltbjRm#!jO8_; zT8@^f{L4Zy?L^CTo3+-b`63s?L>P^!+BqmXg;X}9sK=r-q8kZHv*?x#J>Yl@6-|3x z+E~+RqryG^}CF6*W@=3MI#8m~*S2@>U7Oji%KNHd0uOcwd5ovQL2zn~8 z&ZU;lniW|`HkOy(UaFpP%O`_T0SH5rE1RJRO9sl4jGm^UrlP|U+!NeTWGE(J%JXww z1(@|~gg#(=BrhdG#Z*OI1-+VNQSrDCDD6RDr3>({$F4El6kU56#ZBz2jbcUvukd9Vc!=}M>>F*e~jRjg1wqE@Eaj-}fm zwBKjA=u?M+&)%4`7l{(QE%!k$9Zv?5PmB^hl9Id({b}=~? zwJN@iJ=bM`Gn2cn)mqLyOM^D|tA{*KC{KJt(o6^SYCk)kPP0uWK`nla$!De!(xT5! ziGuIoN>#8$2=;Kbcl;JGH#YHA!OQ-&+79gS6g~tE zFCdc(@Z>-tyfXgF7fEnJsRkjW9+1}tk^ zDpjSZ+e84U)E&j6rs9p3NYA1P9oSuz_I4qkFy6AYR;Yi&?GN^4VuPCL8?ejB=Bpzm z3EQ~J!#22FNGI&xAE8%6^*|f2dLP5CS~2btJ2W`7z&FPymXRM+$E%-IDq6}`(^X8; zc)!Z1*_W)Qw4<=1DL>)7b>mi2o-=h-Hqf23D&G<}Vx2|RY9(f@3!6=0RkUkdF|;}< z!FMOODsQX>x*Ch#=A9|hw_qISx-9(CXw_<4{>52G6e1QKPbSt$K-*Z6sHz1+#2@y| z#q>=BanvgQMg4<~C#G`U4WZ&Il2>`>P3U#e>j4s_jHJ?Il9x`S(o)_!VNg&yY2U|sm?g@IUacg;Fq2&A`MT{Y^PQ7iu7G|LnuF8k51M@`3v;j@>DD5zE8LzFU zWn6Swxm36QoO$AKD_HT%O7w?D1lXD&`!M*=>w`%iAu=*C3jV}-4fM0L_Q-lZ^|2n2 zU1;bI)q!4?_u+P3J-A{P+n80ADme{t4_d905}2my{%aWweN2?ocBUx+;b_)Am|mIj z8c8GvJ?094PL^qKm}@5&<8V8vfl{Zhhro59T7E?%eBS>X!HB3ZHdXT{FZ zO`5o?@%1tItS+Q;hUVL-9EtB#BQHFu$_{#Nf%7?nUoKrut1EboZ9O z;M4GW`NDtmC^xUR{x)``QJSd1u4+3lKc1#lIFNgVP^tFkW$Ez?pPfGIM<`p|57HKB zfAnl6q|~Lxf^{Y(KXk%U4{3IXXnBj2=TJkhBimPPn0=15{#v!Jq7AX(1lj)Qts&zB z%P8T8eQ%tnnqP=+`|~gaLcVA}WRQaiqB!IwHq5>-pyXgf;Cy{XZH8?fqA5={Wq0RE zPkuJJ5AS;2OK10V=tJD9qj025V!Mm08Ot2-e}Yo6*F$IOic?6o$?*;;@oU!Xl#9pY z|8}MI?dh_EL+`?#E-sa(d6+Z?C99Gwf@4Ra74>It1uNQ6f&Ry37$jZZ&WC&WSO1%TGo*L&epF@C1~Sy*LXZu_19V9T zxHM_W;l>dPegREKoOzF)HG!AMY&PFL8xN}t1-i>DfFNnJ`GuJKn#{7HnT3ke*DB}e zO@w?E3GVMfQgt_^Cxsh+F(dwInaCZa3gz{bWT|^ja+V#Y{iIX6O~CcUCRBDbBdRr< zIBL>!^1$rFNEIB#9L=Ne5zeSkdAT$o7EoM)dQ5Tb1_J_`v+&2<#1pC{QquPD4q0MJ zt{u+)sDrlm4ApKVO@2|0Z$g1|VUiNAkzPeLng`OqG)B}NyUT(ulfQLQJpznuP*z4L ztcW(gAvXfZh~Oo|fzT_ohgDlWXB+y*)(C=iXbK8!Ek)l`lvJpICP@tov%?3mO?iqE zZA92h@aG%9Bwm#}O`~8GKQwwp;JFm;Zj;EiQ+q*$jYs>n42*Yz;wWe@ii*){Zg_(Fwc`7^%uap)e5n)09`pNEn}0}GxK zGX0WdKMW*L37-a-(w5QIXh0+T(mS)E(yGT(0|(MrbHaus%mm|@%Rr~#i&M%7t7^Im$-0EN|6`D*++w7;v*dMJGR;Kop;uxm^4LKa3a$Hi%B^Jy3 zc1-8J&uC6WgUZb4P6Jd?L~*Dui7XY2R+;7D@uj)`d13=qo3*ytTlrj=l&SMM(F}ro zOFI5++0Gu;@u2xv-EX>{Qmkf)t`24O{zsBB3n!>5Khiuk_<0Me9OD`oGO8rXL;rAV zP4vkY-f?{i@YriOWyzD?9oIkgOqK5}hSyNzLX^(X?pbw<7$~^$JIOeZp4iBjr58j~ zQT;B{MV$&lSWcsKEc=tu2}_$_Al^zVD_yy)+D6O;jeO}bqq|%&ij`#b_$RkTQ+|%c z%sJDBEWXB3UAaT7ig5{*Is8ECo^u9IX`fIOt-S20xI($figk)p@#xB4Q{!mSA#8FO zs~7DOvqwc=M*#nDh8OXc`uW)b(in0F)m%LNIrQ-w8o#BJ zl!6p2?t!_$npo9X7zc6cqx%yt{uSchewyDm)7NwRgO~6^{{)hPKnteEcI36=Faq(G zy@0*BNW*?kI7ioJA|4p_B{=RbEM6EL({8R`-s+c`mQzi5AJXA|T;Z3`ykEFmKb)&@ zQ{nMW1B-1c&C8nA7#Ypgo5Z;C%zQpoRYg;VSTD?fdT|oGT+pOIs^;`18uURRp{+n*IJ+Cfm*yMtZi$dkB)N?=qhS)iuft2nIo*Lm6O-fld{wE zj(85}PPfZw^p5Cr4a$0yC0YWu1L#(3-a@reS;3%Z zvzf1+<%p4V%UmHvFOHY4McIXhbqu%hIx_4{%T4peFy;Xo z!k3}eAR5*_;jGA`#MGZ&ucb3elNDVB?%%9H0rT9|a_oqPTKj^}sr!P~#qRQL@rc+= zbM*)iEz6&smji>m8e5RpQ>bg-CKIt73xDEcu~tVFrJ0wpdc6$9xFs`?uz5-p>$ z%&Pj&QZRTXwZk;-GO6dfoPUkBC}!H7woKa;pP$Z<-gs7Vh0)uz_E+3GSv)yyyBA5F zARJ!?Lw21|qU3*HJ~7Sm8SU@fphVG1XPTRAo#Zqz#Lr~9FiU5u^^i`zCr@W$tn1;F ze*qMz%)4y7UV)+)RkMAnz(~s}xEGUb+=fjP(MOoSi?eZSJ;tNY@}4Zr#ER8RV{r=(&nS^kNoO41%62Q?MIsPgdI6S)n%Jw zwsTKEpG^o!vxh}~y_Ai)y46;W#h|l;+cz$lq^=Z2J=2P%&UP*(yFQz`{f=;=z9G_y zhc{xqb4-P;`cb|%Xr#CPfVk{wXSc8RdXKf=tnZ)P61tmV=(-H*lHS;GXILSotHp2T4#6k4%Fe0R0(J(ELm6t~M5TkU{JC z2b_+|8!X**Vy*8~q*&vL&WSvDvpe9$yAnga^k-`Zx`Ug%%iE0vyoV?J_CH@2wQue~R zE>qMRxF3)3==Th3^-)SIzZeQ6g(hWLeEJEvGD#b&w7j|`i&y#>*(zCbyIR=nXZ`V- zB5UxwxuJs4LC>eqa0((&;vs{e2!cZ;I+58hMVttalz3$7sER-@6dK_-%5QzcN)?Vm zad6*bd-@HzKSmktl$83pjcf%EMKPF_$kL(ID%Uhq{Ej`qh{r=Vl-&z-%G^`v;a0(O ziEV1>;Yw-5Wx{kb&ABomB8-ncg7NfaYmwZRWO&F8jNBv|Bk1TiCcFrq#--TypOa0E zh?^Aoh-xxj2Q8|DyNaYo3P5j0PXyRY_O-QZ7Ql{MI$(22{DD+O97cmk3HzfsF2Fe4 zM`H55><+dJoti?OAWvIbp~NT|KRWm$ehfkY?2u~<`(E+u!OC%)*V@lP`_=v6^o~}yIqlc__9M5;0Hd<=-;XMNCJK1@*zWTD`KzeRu zx_$fxFB(`T;ePf#EVJ4B{5xGHgxv<@xwXpyq;L*&@59PwaWuYLN4?+n)eQ5S6N`(V zDE=@)$7U{~_6iC{!Uv&_sYC8{ZY~6C0T}%mQ@``;Rg@tgD@OvhPl;Z#1Uj+E=Jt0u zfT5uY{cgl|eVqF$NB2!Rev^>=dV_W7_NiF>=A3Xx2Kz+o97($kH*&UfZt@AF zGNTlN6vbk;ufl=Et_P13-Fw?gP5YalP7WSy=?TPZc-0LBwr)lHYM*8>tv_TK7}Q4? zC9C^>LU>*#9ua>bEQxUP2jDB`X}cLM>_wkPO%aE@LiLOIL?cjsn&{3tXwOZ;@Cx)u zpZX{tT8VbjHt_)}S^;iRpH@AT?oODZ9@$8XyooAGSybh;fznb1$@d$dB*D))Jlail z|M5H}F_osr?!oOv)xzY_uRqu`ew1B{sv%S9`xTOaG{OgVxacTmHlehOj>flx)ITtH z_tFqilq4E{G#4Q?rOr*^gsbQIl5osJmz!c=>%YqLDuUnF!dD~?p=;%@fO#A+)eXPH+QTmyW76mrrDjr{qqS5g==PYzCjlYQ7 zu!wsr<}g~lo_h=ND0*@JEcAV4uf7ebC-Gr5} z?(s`3^mXo!`1b6++?m_DLcg6(ozUd1A2}c1m1CX&eYD)}^uC|z3?*Oa!VMe=v!|PR zv>Nj5*m1tWiUa@n{&%3@AMy477ct$;jPD`we=9jUfHB)Xf^Q;so{(csNZ@b#wKX)m zl=?}9Md6T<_i{92e7n8CGtbMv3GIvxaBzqy%J+%h1zR{QF0 zn$n=eS>^Xi->Y~XtD_HqSiT%sEyGvPa89mmAAf)D$ME3Q-V8IT)(v349mL2UB6Dzb zJ;VN0cKe+ShQF#f}>_|Ja9zu&R{ zpOOJH+dtWWzmn;hSQ*~of_LEHUrNCHBI{qq!TUD^Oz$tY_xyeaf_L9ai=Byyj**T1 zFPPw+v*P4rV&v2zc;^RLmmmz|8UP4X`mV{&hOvWrKfK`^VDXrPvr5 z{v)LSAM06J+34PVE9Q4m;GgB+d4%^}{8uCIiyZ%-<(!XlI zI|=W+gVy`o|0W^+8SOY^?9l1P3eQyS4B?hzT6;9fs+>5dvCf2Il{;8Qwb^2MgU_ zbOg)$M}~Krf{}^!zlsU}U|jz8OWwQVzkUt=CozGMjhUVOZ!zH=NaOe~zs;xZ&~8c# zK#KMSzJ2o~XBJ$oI1`Da7;Zl*9vOki`k0Ss-N6 zSaK7JFvY(Gk`)LGX}u?aBnPg+*&tKcrzfwi1WGMUuaNX#cHIKtf{VQFI_^5o-(KI^ zkhMHCJx+lOx-)D0`kw;7@nRC;P@Wy1A3e=4WLFXPUvLmQ&9_Dab!-^Ld}EWAp{G1O zY=-vuoSTk55yl4Rw_E*6cD3efe1sKZs-aS@*5+<@-`va2?0tn1a$>L42G0Q;q?vs) zlNn76fJ%!GtK>D$DAFd>^VWyK+vo2M#5g7`INepMbN>nE7Y#MxC$uzp7!E!lq+QWpLNkM!;u*!WhptB(I`q2#_f{sHMYDRiB+CeMC zkH><%l*r3@59agceSnDRH%tpoc#b%dr~|0Rh16C&+6QC0Otxw|0mGiAJe z6lLCJSDf6MA;)uEO z=9+$5RB7gg_U4@$$&Olh-B(y-Pdu5(HzTFEF3ypc7CORAM3OsVC*jfF4j2NvPcU6w zM1<0;+b>bjcPDjqUlWPV81~~l>E%Y(Zc3E^eOxApgJdfZ<4Woi^Jy99gYEI4JH$(x z%{yZ}EyQ?~AohwEpEznyL5;_+objvjOvS_7Va@YOkqaqZ+2i!&4vHLUM}5? zwhRwA1AWNp=_5yr8Qg&JD+vPdgd3pG?ScJ4tG{HFu%#lSpnh`@XV-+c7lV1#=+eh% z;u>(+zdn{)#pGqci7&n*$=jnh>BA~_)FKI}?SG|uoNziD#962iO?eW%GUhbK#B2ugV@V9c*X1s+wCix02I$T6U$u%5l@y=i8Yq-VLb#{ z?hYfjI`6ou+2~LKAhQa{ovksKxkVwCwFV|$0>6u%X4IrPk=#%xgSiQ%i^xv3la4;5 zf~+$vkrm2S?~EN6 zYZkhOV7kL6iRywl-RvOlTVekRH&bq6zMr>4R+Txvqa_Z3A*}g*f+KYh7xzKCInfyE zJl4H=kUr6cjf{MX%~DKxRh(JtPIJfEe-fDAsFP3h2}?2%^Fe^4@J}y&1~Cf5q_P{E zP7h#Xxw1d!-VYIaQZ24fV(kIUv8hDF&>3}kMKy`+0xI9&N#4PniE!-Cbq~7NP;?iM ze&h`_ajYbDwJK$bmRc$nZKy6>`FIWeWlR4033ao@VM}0HD@hvic_CEzyZAgNBA%*e z=$2M&HG&A=Il)c1p1#*Q0cKftE_`=?{-lD60Unvj%9n<(wlwTWPbIiJW_dOoIoETP zouaj2fl5w3$UjS#5?e}y#0B7e;Ec9zsK-fQoU0+Ps!|hUh1K?;=W~)r^@-`l&bPVSH_6_`t=1pwy`Dje-Vxt+?o_3z9@#X;kRxd3@Oy|;Iyuvb zyI7#EAf&|@cWVP{AkseIOjQK0m+V7a;;ap@gv7+wd?Q48Kp7@(%Y!Aa)iH+N1@$9G za5g(0G-VNmFy6*8B2s0R;bIreK9hb*dmG%2(vH#*-@&?O zvlg(1?}qsBIeU)$fyoQpNwluG{?a+bY*9otlVCB@V8+GFo9dqGH*Rh!W}2M+DAFZI z#*_$ON3p!a!l^S62fK4|`NKVmhr}+~F8Ms+Jh6)!KQ3mJKhB3JJ3%i|FL@onKb)0< zJ5n`aJE@zsn%S|3@)%|x6dhTE@&z0->mxXGFed(T9{YGI{<6Aq=hk};`aXJJuXe53 zQL0-l+yzg6Qx$VPJN!7-7fi34R~B9 zyg{i_TuGJFgD&n42v_G|y2Oqgam zXD3cLnDKEsUW|8TKWwMoO+KHEA2L^Gak}qen0Y(wJunYV;BeKyjaM+wOiFVr*^|9V zucca#@g{W~d7yGWB0Y3n=dQhJrNrY$(-4nIkRKAQ8bfMG{2HdJORFHXy7=4_eZ6I2 z%X>%;VH|5sfIUK1mugMO4yfEQy<~NO1qc6fq<-Lf_yU%-CFUNMb>MCZI3a2q$=soH zUN(xG9*5yu^Ohm3aLl~+c~6SR7#awGsY!r5)BwE>0P5;n$#c!8H;)K+}lb$oVk$j?N_>r|?AFdc5NfPm927 z;qLGm#9j@-`V4!s-E8}&oNGx=Y+CY=Oo!^y@e z{UcD{KIC+NMEq1D0FU+CAK_a6195>b^bdvr$O?T3Zt++ci;WND%>=kBu^;jN_#-m) zAZic@v+W4b?FjOH&iMe73*|2lx1IA@hyhPB7j8876P3ZIKm#Ia{}Fi+wkc?HXJ>0_ zzZEySp~nNvtT>-%zXFy&Zokx!ShHS%Kg6#41tLj;QslA5`-Lj{MNfVZm6AkpgvK}j z_HUK=a*=a-0g&Dz*Z4sO{+#a?C&sWx4p|V33Lu~)+ZKn023!;*Bmf)~1*t|pBa5bU zhe?yEkO&pUS~4Zh#%d~x9Z4ie6VHsmF~yG)!5gz#kT?!&GsUm~9*jR~h^LJZO$(vN zlNKb>klGYvIuX1`!?@;s_C_%|HAtvc@m_L&(B@VD}8sZNPTn?g47FQ?)>;m^)t7Lx%xatsiAak}Qd;NRkGeLN`;%+O)8 zbe37`EOuuZgJAf2(}@&5T1`DQEoR^^$pXvEg0M~KM6_L#!tL+?ks!zxPOw7~|IEHb zeX593xI*=eG_ zVJIP&^$(a50-{wy{s)=jWa#K_RxfLdrC42e91Y_ZgO@t2uOe%UB85CslviNMfl#z; zL@_t38P)ms>APo@QFAuhE#-|JUoLQ`j*A|PT@GPjhmkVzB7V^fIJ|g?5x6o@K&EMN zZ$gn`5vQ{ajsS5pYX><&KvueJI|YND2KDeR(L*97v;@Yv*%VE|!&8HT_|-LHNOG4| zcWsifC5T{IAG4vjz3&TtMy@}BZ7!#gsSve1J~A}tMRzmyyE?U>d}M5Bx@#stSCx;B>+6xNzd+U&s4z2c*gyK? z!hg0G=?-c$Z0D(*(Tm_&TSdaw48Cj#w+YgVEc86Od~nqmUmM*Zf}D>~mN`DT7!0&F zhKA>jI*!s##QtS zo0&bJU_&b>$|_Yzwgb>#P}1Zqp32BZ60<~>PEFCtic0y~piWW9L?&BE?{$D)>E4Lm zB<*OX7suxZ7xV2oN8p0?M>;H9tJs1yhRL@2&Zc0DOe^R%u*O!@I~2P#qt<@&+B7V; zNo{8{+F=Nv$q|u=KQw$dAi^nSXhS_UdpxN=79bUkQoVLx0Eh=3UP=}he`Fnz#QPRhROuHkCj(R__n9hkk+dpLxBQ<;JN?pMc;lbJ3S@KEx$=X!wI+4IW zrRjAyGvzfX&W~bg42)61&1hGcqq;4?A_)a2=;~U?AC1L8C@it$+Xy7#7l*O^Y=|<% z&Nh#rusI26OK3!PkGyT0Umm&L-xHyB1=1Tb$&&0qy#{>0Cnt7&j*t1Ef@#R*qvkAq zUTu1+Qqe&*Rb_Z;nE)4A2?J}pL^}WYmZlnN%fux6RJ||7yDwz6|HkKJ>U{wotQR&j zGJB}+2J!bvWUaC1oJL96{RZ0!%uV)OT{-d>4~fbC=yVk_tFZDceJSirZpJvi;@#o+ zoNedfJ$V(9&41Va+XIqEPy5mT*1Pr;7VF{DFCVBPqb#F_yYFsUnJ*{9^()LFWxPd0 zO}w&*{0Lq#!gJdMd>dXl_aCdyKi!SZ>BK(EIK7BnUb4&gunXu| z_pLTkS=m?>__{2{17Sm)#h1~AG1K~p6hoZAriZ(=SKf?-n15y8PND2-h?#Njd)s)C z#fEeIz;wTxujdfb^|=m}ND4UEY9n<^F$rVUHjXqfViqSmfeWEMBIToWrd?}~_)St>wl`o7eIyhu-4k&W>>yF$$Lb~QW z8XRD3<|Ugn>H=`mGR~bcGIg2!yh8GA!&r4$&?#8rC01ps=A1v%Wg(sq3xcACGZ1vb z2Z-O~`T6zuUi$e7=raf~Kqetj-1zmtt7GGQC-Lj<_Wcw9O&#FtY>f*Ar*9Dp$3OzX zz%UF0Vf^7~Ako95xqY$=c4>%82=71417hy zZ-wz$R2l-^wy97QY`o&)T^ZalcXeF{Ch^!3dB^`=y=H@jXOG*-GUGM}x&s^w`a6g$6y)e03( zjr49l->l~Af%>sK_kqU^+5f?uRdoU8*g%Yrt07}f(E4&IgUIs5i#G-|sa~wJ*pvQWx2S_2^mtVIn0+923~Zr!{9jXv z59zpbbhFg{*?qMAj0j<)PAMJkvB;tJjA4%oGZm5iW4c}@ z$H&(*0*c^TBba8^@F%CrIuhQ(GQI=yg~P~hgek1@7cIF)1U(!zX-yL?7?ot%J;@=A zi^AfmpBaJvlm8W)R9tYP>q%2yaow$m8N8VjkiO`H!&Z$QZYg zR^CtF1W}2E^1ETFDuYWzSXIh_R77wN793_0Din)Yb;?3Di83_BOJ0S$rp~1}d2&7+ z8JBiGf$3+u$&LDgSa->(S3cDoN^#MS?bNdyIOx+TVWFl|#(1d8Y=ZI@p-BOJQ+Y&g zE}_3gTa#fDmd1tXyQ0?n@b~n#AlE98Xt1G&6cS5R6$R%bZL;m=Q*i!Qh>k>m_8lAaWjjwkQRm!*3j|67k0 z2)#AO@J0@DFM;>$i?r2*E<;#@6%$7 zY$!bx&BMnVhpJ@4Mm4fN3Z1y8*Qwn4g<6R36R1r1xad~2hO+3=_~~!#&LgYZc9>Ve z)nx|kct0@LJ2uN(e!-whjl|Xngs0H)uAe+(mfPES?%s@wC$si`-8;j;hLakM5GhQo zDht|0*bkgfi_AG;b)L?KW^7shl^QMW4{nZlHF|i*Ii+k-)1unQ+Mu zN!BOFaDh$K^8DAt1X8zR#bq1J1a6JS$IY`&Vs??e^%o(tzI;H?$McHkJkIzl<=m_= z*z+Tr2>LYDO*my^)VbltZso%AkkXj!5iL0M3{ zVIC){NLdL>3_sE2Ppl}J26r1It$dr|#s&2H(g+(b^%XmA8*V$LpMwc55n#By?sPcI zPMNRhiiHO{DvA(4C+E|J1*I$tiBr&jqMg6oTVUFgS#bIE|m4e=nOhvjZ zk_v|7@t|l7xcb@sup#ehLY@&M?N;q^Um6k|9MaTVX|}o8U@@cp{G>LmlhU_!f9Jmc z#{j)CejGsmnf-D_K)WFBnJ=!%@VV%sfxCgRfw;dC$`(cum_fBaoY5#CgTB9`K1fS8 z7z)sgw3f4-!^#siT134K4A=y3+HCS}_8B;VVOG=9TRI5`dd(!}Y%0~yJ&8Ni$yCK>5 z6Wy9i(I~l4gxspx2pUAx(l&TUDqStkL+_#^)Kc3l1^@_6M7xlj=y9eM%-hNU18*gmeww-Kj z+cqb*v$3s>ZQHh;Z0uxXC;#j@_rAaP+;i*J`PbA`O?N-+dAeu1`svSi%HkQ;`(9~z zf|B)kEZw7+uA`W|!mw_e^QIO-;5AODNi zzS<*t+_L1mGBLC}9ySIC!|g}a3g5hyc6HPh`}NHx(rIn?eGKz#+cCh9-kUoC$H|nh z_j&gArVc;jmGoOICo!u?ZH5N19@MzPhj6@1vM|||Q_msGNTW^DEUjt_Em)Id?0ByX zO2Hr=@X?AATb$c!`S;dSv>5z14V$tD>#1#1^T#MC5YSiD>6$LziM4po9D8W_J~IKs z7>)9}S1-$!&ui!Tc}GX!%PCyI`?U^)07sYCp+9vfwcTn5*HNHQ=rQs3^Top$^>%(@ zAZ7d3?vF-z_-=cK4{2yy2SZm>?n83nq;M<8xWzb1@Qkg)x?F18Swu*ZQJJvzO&Q`# z(MKQGiOF)Ej`71hy2||EqDHGmRMZW41?k zC$i~WZ@B=js$4YoBi9yi-ZU&q650TLhHUnLW%bChZ8IJNl#ocqiC9H_8Rcrrd3#~= zJsL^-KyX<1uC5#fH`)$`kvy=_kY%bnr#ehz<;WWuf^eE3BFs}#EU8*j!;|{+=06RC z--g(b&CDZ8Le1NwW#WH=&)Dl)qx!}GzR`6QRBT}F#w*Rb>O$NuA6srJp8jn~j!>Su$y9 zGOksc&T2}gZ!7WnJ-j~Oj%yztjIN*jL9Upo_f-_UAsN?g!;X&E{8Ba zu7`$(_pbBB_SCX7*{>uJQt=3{p2$(SFNwv7o6C7><{?RN8%}70o{T=`eNL|--c>%> zKH0kMSA3`BM7o#t&aZB-?xAy@diNjoucUms-kd*4`R~QZMDhkdM9=a2b^<~LL6c^y z_kJUGzc2(uJ#hx8W5DTF%39P~u0@H~mu)VQIZ!UK0TeM%s3!(oC=L>KOsA%#Lahr)cEe9i4Z%tifT!!GYv8z1q5VGE%Jexy+JL$Lj2eFoACNX@t z%$5Y+N}qtqWUTGTE4R4qEV zkLHjh&M7B4pdW5(9I0ige_5$(7mXANOu>plwi=jFMmCu}kP9}ZBYCc`XMD^!lfKcr zanYIra2K*oZ@W1A7Wl34+rc+^)B9%HJ3n&R1JEejBtxHB29;gMz=@k|OOw;tC9D>8 zBpCfaKh`t}Eh;OFfYnuQ#GPnGg*+>;8g)6XGN3Qwh6Z~>oLRFabcDD=+sNKewuhV> z+0E#wXpZeFPEs@ZT5p%Knq6e8T22PDltRFhP5OkoWyWtc-xAQHb5`ULDY7?QUT=u$ zOJMWJKI-?jywn_Id^DWAK3d9}*13~;=eTF}0a$S{x(m~eiHzJsH;d_P7kIRbnp!2b zvkb;7c25I6*ei^2lBFan(zLQs1vk2H7Sb0|xRRS09z^#E%2B~q?3T`%NlkG<)cxvrw9iqeEJ9nx#n%e=KK8 z7hOh4X_Jp(EXwZ^@8Sm53uwY_6r)%ua1*vtf@-7!Y8tS(w-cUjkvhU`{UlPXn?zno zc;cl76@@KRo@`lHq(x;i(hKZ6G=}}lqU0PQ_kNguDDcT^Ya$cM_O;R3;QCZH76=>j zV=x&uv@pZQ*a96KFEz0c$^r#2r7Td(SJbe@Ie2bixpblGJ=1#JVI&G%3O+4vDo3(Y zI_w(VH2~IFj{aCR1RaETR}BHCz%I>5(5E@&M4I*`ekEigWkrjbL+@(|*g0sJW2y}+ zWY;@r;2bTKp1w+kN>WmyNMzewU{BVYe2*?< zB+EB;66-)f9(+qK_oRYxYD_**;lyO7Qmns1Zjh-Y%WUTDeezUzJxpR%;$b_wv6UW~ z?hk>!p{%6W#lhd+X1*2BL@NUp=jUzc;1HGang&ojYS_6dP!WsTasaJ*J>#e;D)}^&q^lC!Dd5df6AepI|5E$Y$0HM{oToP)0s11O~qm z;zEYpkai#DRvZI^*!v@OC2}4!e+-u^7Pz)Yt0x#6S{8j~H$Ys_NKmi$BS5`347gE8 z%Wf=G>Y4bNB`1n$?}T!jfm=)x8EZ4IwO0}aE+q96ilACjGfkW{@GwXQFDiWnb0#w~ zLBV{2Ey;rk9Sg8lq?SoKA6}=mvGv?)G9TEqV{>6&P9UCeTKwvHX+>Rf?(0$WUftZA z({`15#GVm4Y{6o}yM5>r%SHMD;%-t)x>;3?6KQk#d4kIf*eL0CCPr^XyG%KbqbBZ( zI{pcJE}fa+%5inyA?2P~tb3G+TML&qkXgYQAY2xrryAWQN%BWiVz+}@Z~bs~kCvS* zk@iS)u4p1XqkV615_P_rcdPAp@2Pp$@hDWmkuG`|PPAopDJK;`L$omKZ5}{CNq#^QeMiF2V9{AvxDlfrw9>d$+Ab zkyg3G%&|pL-m!Wb^!OhH!G^ib2<+8=oCs;@B2n1T9#AjoBT=&{l#$t6&SbEDnq#pR zvt|y>#@aTs7sPk0lI5qaim&7eNxvjqLuB6$TjQrM?7NE@{BQ|?C>7ZtF?p4TAQ%N@ z29Q&Eur=0nG#%gZr`&lpyV}qferxfi-hJKWX8N)CF;j8gVQwI0Ryu0Js{K;&`Lukd z{j$*qJnvhe;_Ew4#^(ZQog3R{!Zha5 zKV4svx>oH?;som`Lh=sf^Dt9q464~kVu}ru_l3%HxHSCOuyNV2|D87`29HfVHzw7S zcu2xc1`{qWW~{$htlGijevI)Y-}5hNkQ+mH>gWU1pp<>Y5KHGgNJAw`nsO@oQ35f`ViCFVKk+ca zJ}%YLs3%o$C?a}h$d@Sw888<&v2T!CZ4ef&VPwUW`Ptl2W^BHyA>F-Z_N^Tt+@ zslqWBD4Y)B(C5k3i=)OFxI_~OP)&7vatuN1k#u(6zxWaPn=0WehJhnUlH{2b6saVg zPf{KE>&LC6bl&yAW1R*GVqxYVJA4X39pE-8v=IV0W^?c!i*qK63)armHP z`cl`pgAJ|UZlI{3i%{*`fX#q5Q#*+>%BBcNsmS}}x)Mq=iSQs|g@rtz z3&tg+!gO#sKitV*3#T44%REZM%N|WV|C(LC%%At3_dZ=4>bM(PJq@B~Ra2!}mfbB~ zLb}f5OxlzVm9JegIz}9jv*M2+9#GmHR6RF-c3uvT^-iihC_SC+cXo;93WOF4W5KFq z`gKE8g)(#fqS%woLq*vfHG!HB0?wh?ddNNAxtIjj2L0g^Q*3ze+U9uVG1qfQYv1+w zp1;TTb+!NLkGiKls8mP02gP&ud@6CRw-08shrT#CZIHT$aMe!T>47_{CG&;c=XklFsZW;cdum3;e5b>sX04ojX>ybJcdEs$a;c{PKkx@FeF35F4Kw&bOh*=p1SefIu1f6%%iJ$An|)0mpcBmL z@wObJ9$^k!)%6s;FT?DYV;U{)EhRWFus)H0e9qEUvrcdy) zR$NMQ^6<@D1DXkAPOeZyw2df3{KhArc0%9>36qcwSR?6TywOgq^C1rNvQZEY>@kZh z?Ba6SQTfRu(CH%dqH>m@VyTjH5z0M_Iw;D5q5QX`Ur550h%lK7A~CJM{h*uLF9EY)Rkq8b=xTewqbi4a^zBlRVvql+iI%GN7Z@NL=l-p4N+gY|;SXO1l;5i)w$=YUzs zWfpW9`JS11kt)39Ksvhf^j?Bn?YmxAdy>sK0si9vTc?R(u@Iu>^ET=-M+v%@R_KS? zIIYAkGEtnV8z4o=ZKvL89ltv!NlG|6KrN{QTnL7l_H!vTT$^8|aZW^iYn}EU=48*| zi?W8at0Ci9KpdX__^;1+5(C%8g=0~48UT>6b`;$hIYJ_H$jrR;ZUSA~I+!=z@c>~} zO#~7;LC$phZ@y*0a#l%6kV(pK=xE5gmfq_nLXt1#O{xbB%^#Mx zbL9^#s~E@ld*i^%?yZb&11TV+$JTB*Dsj1-J6QMinC^~i0 z?)t{|1^#^Dx>!0Pei7xhS-x5xzRS#p%=FxNDiMQce208@=S5#oJ9#|jM19Q}U2e!I zb>8Q4iGM-TWl;$%TOqcID;bc49t;hKXi4?*B8G#NdSxg5FmhbYf)iU5xIX zl#3W<&0e>KX`&PPgGX8}WT%zkE~q&O9|i!u($n#$f#Ff|sh{E90VDf+zmP!-F^pFK z3~tC61L%sISn9`1KSKw4h?0Ro4epM&!C34J=FXsj=I9}p3r~0|rfwS-Or=3;ZtOi_ z#yw5O{Q-kF0#GR47QPAtpWi|@OgDbfYhO%o4m4oBza}mYT*jaTuK$U_IFy*UCv->s z$@poKp&4=Kn5mGTTN|wk8qjk1*q^d$s0Y`Ldx&S8Xy9t*#xSu+Ilp(Dj9hST%&c-CiKAV}D#aScB{Y1nkwF&~3<(UDqV_Z$ zt!#}{#9W=YrciJx$8wG-txarUEU$Of5Cz(Vh#)?1WN;$&OLQ>p;Dg>PjY)`M1MiG4@mnLJ8f=IgxNp)~Twx_C#s^V=0I&p+u91OX;!AU{UpScE z^5U>Cgc$Gq5gm;+#uwe9wV^BD>ST!)fl#DuHaU$LB&?84T5oOuS#hAL{!5;75NkxT zoljf5ac#J@N`>^+ezW9O=9FU9z&_JP|VJ8LFux-X!B7$tog|?WteIGk%4hWwcN$j zA^9gXJ|r%tHGc%3Sv22OIQ$a9pctqn3#%myBzxuiV!X$eVZE^iN9SOCKeZsa+90r8 zdfbJ)p%DC8?|jpj7~?ycsYJiA+O8h78U-L70+MA1;&ey5L54DAKATH3hMHQ zOD7v9V8N)mARW!mPqa!z%^fxF^SA6`e4k3gyyM{!DVy`P=UY?p@l&42S3Mki%8^s zGmE|77u7p2sEHE^iXG_P``)YmM_4{ftl&jT(%gY4zDy>pZ4R4Bny!>^64e|fDt?1Q zbPrW-P#2f#+4IpXJUt38go%Sa5>h5X&FXv%5ie1)+!QU#i?ZQVz;1O6>i0JnSiMtS zAicn;yIm?@^ISVwz&P-wsSEUNuh~0)mrXjONDl4@bCzP}@7#vdr>Dm4%&U}votpOp z1>X^8`))FeeQv~ZA>b%bIBN3>f}bvNj_G^EIl_^eLdx|z?_{3bqbJ5zQ$MaYEQwRcH+!w*05-vP?)m;Y4cUdl;Fxha7 z!4ko0`ml7KnX}cy+-#(F1nZysuqI*2AtSK{)&5u^sbwTp3`o^`%2bblTmnt714=Og z_cdfggVp2tY=y~DM)K?z3cIcS-;|v0?iO;|x@D z`<|og+>yiA%|NA6HnjCz)tnobQ@N`q5G$S4rYLFk*l6)@itRGB^cgb12-amT8xk>* zJ47^eBT55_w@ppRhQkGeE|JkDSC9&BbleNlo^V4<7Ju{dF93X z9rsIPJNVM2OQnZr)?`^f%FXs;-h?j^B*?{xw@bvMisqmwsb)2+>BOq?c0g`|dQ(=ujGM`0`@LU5 zX1`a5qaejdS1||#1(Jt8lr=Pfc`?QcCI=)T+GV6q!*4mBQ%6e7$AqT~t=){W zogdpdTN)6Aw!JB@Ew(JgQ#-!-vJ-KxWpQ7>zyw#;+8j4;lGr5^@o8nk5(UsozgE9# z2KEbF&GbXzvXuAq1_lO3fi^IpL&O|6u;G%WmM@=}Y1y!qFAl9hIW=h-DV4K=r&`r& znqtDT<*g~z}_809pq;F=6 zK*trC3WZauN?DprU9{c=vk6E%WW40FuOutEJo-4{3vc)J=4qfBNKCUtv*So_<)Gw+ z?4&Q5pb#W0berU}K9H6LWTi^Gb%jh}T@&`a6ug8ANhA_?>|+UIam`y{L_Rpq^1Zr& zzge(5!$5hgR>*nDYW;u2fI^d`4oL&=&Po1h0(BKXmkH;wNEg13m&$uB9BIZ6(~bKr z1i6*)8x=A;*@tR2lw^gtR~2$evPL{W14&s@p2A<%QTz@7{t_pg6RR7m8`lzwQc+%5 ziIhb~8($&?C2kPb|BP_KJr|1fUVBFs2yS8SY=?r#_}wy5KbYy1@PzVY7^&Y)WUhfw z+4y6(1SO4=UXyfks9w)_tl>C64AMnPI|F4DB7;RY&-`)>bABt4PRfgT55x@>4JScX z@=9vsV?SY2IfYzvLUV@_@_{PGtrJOw+8YyGX(6v@2;8(GF$J76BZ@t(0;>`aCcGvz zwWEGHP$-Y+-alwz&)w~uR?ttx;C&2vi_t9bEC%+x&g(=ilLA=E4kMOB5p*ym0Sgu8 z>yD7nWG)hbBJpWBn>Ih(+a%eG`uY@-IM?3t&slXTLGx+W(Nb@V`P+W-c2_6qhc)h7 z(be*mBWypuB05#h#kltZ%Uf~5kB_(_Di@tVhY39ee4Pe*CL-}d#mcY8f51FTJD2#j zr;fA?>JMC?7t?MhktgOSJ7g!&$$!p^=oTA@c8m0%Eg&zG{>Ofl6s5SZ$yiQOd4xLSHLH%fmI>tZx)QN)k{>t0JXKfxpka4RL~O#QExOU zgNKe9${xLbft7R-CT)n3wq5YV;#!p;sl~J0=^OIr;2GTGGC7XjrynDen@1sjo*@}G zwk_x2o!r0SjGUWaDbJNZ;WA`fCE}MHFJNe`4dH@X=|nN zglcJuT8n7S(T3mta-Nq@JBmLiB7DK0X&rQ?dtFn83?e1^Y8ODB=1K!JMZiQn!^x~EUHVxZtW z$$w}UU5)+;ny`0(ADyAK8z|-EbiC>+(G77m2Jg#?C%n#dih<#nwLY*gmRI#L9q+us zd#-tF^O9J)^W3LumDwWWr|KrjNmyJCC$5u>cDff?O?dh_kpy2Gn!F`WRjw~+I!*aF zPQHJ8LtZCZ$upX`(W+oFG~8Tc@1VR`a*U8tE9~*W5Q`NuYBZ+SP_i{P|piQx8*}fI-ki z#+~WrW7y|=o5HYm?J8Uorlbd9U`0unu>cfVaUeRdz!Z%klnll}jN0}*QR3Ut^W-}? ziJrVb%BK`!1&I3ZdwiWpo5y~#5EIS9DRT>=MXmsSmo2uxAXQYoTo+Q- znYi|rF|%8b2Ez1uG(65-0Z260w}*O(Chkjs{RLc!0}H2lEl3>>0oOO$TXMLs`V!(A z_&MJ-aJP`5e;~VB|RU#WiL#%;?v67Ar(uk7T`)|@$qhGCw3r#F1GE|hjD@)Y z2;L-iE;g_hsy3l4ekme}VlrtgKm0yd|7J-MQS%_Z*!i5+vQvOjfbX{Rf)1YaCOItnc6^Fr%5(+?c&M7UY&C`g*W?F%QS1L zV`eGKDb>EQpw$8osKs6vPcd8S{nY@z#KwDd?u8dxr!dEEWWjIFL=OvMJd@-3je22D z->~YPAoG^z3i|xJIlKq{;(3GK#qP%iS)Xhg5X4+IjiR8?hjQQ5QD}bgWOu{R@zFW~ zMRVJ_3L>_(IGXZNnT>Q~4I%3ePK~8_lrA!jr39ysD&tjwa8Q{#Ym&~g1!K-&X;tX+ z>Wgd5iY$2w0}}y{w^63{Yt2|1012?pD3jdHj@nnDbER||s&U$y*21+i9bN;RpR7hzI>(gn(07KD8H_^_pT@q;$%j}@cS}J0# zB#xYHmH=*jq41lV0hY)q^d@C>$#6?f)kur}%~*G0_X0KZu&ME1wF;{ z$i>+sA2$$e%i=5<-MzR%V^8H9c*naAh|W89J6A*pbFs?uRMs4ejZ0v&Sfl`@Q2I!ML9o)sI-|lpy2nOU^F$p3t4_vWGI#*WG^SSNiI| zdf>Eix#3#JUAlip4o_8m0I}(7D>%5%K2>L5t{DgGv8FMp?eOP4d`crBF*X0_Wh(hC zEAT+kazs4916HPhIm%`vpJtN7# zgrj445N3FXbYkRN`p2lM(iWSwO@aHW|R!Ap>7OvUJFfBAYr+I=iKE)MrNF>Rbvq z_HK^xgl(SoZ|kBo(TNO%CoZ8vDS61-d)BZd^N|%%$J?+gGE0u%p9w06;KBU5vynFj z60xk%G)Uz#QlqTvjce9D271|G3ve`_7TF|*nl{EY!EN45 zV3$BoBVf8z+l43LJ&t$crhG1pLxFcsxKB;l z4Pdz;HaZ!Mq4}2od2uD~T)yafz`*^msz8zlb0W|{+Ju*R_?<^i*Ndj<8BHV;XCVG`Y!yD)7tbZr#=u_83~FxHc|SM+8!DbBjFIBt z+*y-NSt~)nr!I?LAi3C=yVJkW;dCeS3X>1TdTHS+6yi;?wHf&$i!YGT zVMWRR1$|-v=UY*Bw>Kf6|BI{q|3F{<=iUp)S55!bdtqYyyXxP}iN8ty8@2JDz{Wq| z1_2}I-)#R6@8#c`FC-!Sw?lus#`Gm=NC+$2iAe~{7}yigOBkEjI$1cm|Ho=2cYu?L zjfAbK9RUvyy`qVk1;EMCoq$5n*v`;|5{h2V(fEtFu{9&0_}|&SRw_B$+gqF1d=*3R zWnMths}X2@fhqrudiiSY-`8Jv7lrQpyg+S|HY{^$K|DY!S0$cu}TmEh9zY{C}q4k1qYQ?VnozruzH-S6BbnuKH*BUu2CA0S6-i z$5%_fl5>2u;h#eOY5G6e{&&IuYTthr{4eq43s_-e;b77E@8Zkf@%7(^;XecL{~^A7 zZL&5n0}!x4(F+2M{tk@)5%$8y@gIr~>zC{D{}+20uu_kf2@GHxDW-Q#ct6Ci;OvONKwHF?N`KiJKb~v zy@Un}g4ASL_S{^H^mS~**Gg{^ zu7B^A{~x1qU-6%;vfpvHW;(kbH&bM~NsJFPexPJ5yKZw4;43O40$Xs5xl4VHU237W zFC)ZrMj+(cPQL7DZBMvm^?z|M%C6NK^Xpl=v7bN&{C)eqmhhj&)wTmSj|@qbT_$H# zY7$2DgqMgv`q-;x({hi`jP}V8YL{J0kN;#BuSiFa+};4X}?}L9qrb&g{v-#d?2D! z<$=aRU?jLEj;6nhO}cSqtAATamGJFH#q_WjdF23SZS)C85t}qM!-3&i-(hb9^QvA% zjhunz_@Q_a>jqw(>XyV3G(Q=c0cL66LgWF}$8u^&&BvZF?sCSk3BtBh4v)}j!b^1@ zZNkt-%)4#{^NR8_-Va84V-ssV|63e=4yoIBKjS~fr%cJs1bB!8ar#sCS)uMI>sIle z3_BS3m6;xx^mgF^&fc)Kf+?_?G0t6nX1gByOM;eccSKlyfW;6B0l zv#H|fakO{jr558LgThkGvy$~!ke-G)0tX{+;wgN4paKBAMQ*t`E*X9w-xR;B zWvfD7?9_qA4MEfL+3A2mB2_kgetp>N>n&2%+RHAyS#HR zu;DimOCvYB4n{E_gQJP#em9bom1^^odsIFrF~v1p3!c+w4RD z)wTMr7pc1$ldDnm?X*CuZyMh%$+TF!r)3LbGs!e|LA_ftC}U^niI21^*;?^O`13R) z*h(gcX>pC&X^{2!0;KKM0_4uHQn4|2@rTBf{VB?1+RLMb&TtG7y?dMhr`QUaF*7QDkb`5>x}T58+LvDcoJtx*gd^f z@`0bFl262!RvM1m)A6ekZK+Qn@!sMyHppX)^&or={E1HF1_eF_yo|b5_(c}U3s$;p z#nzA-=?%~-Km1Zr!4(JN|FD#ra)?`rjEIU9vd9vyLV$!h@QdKvIlNOJgFNQ+ejT#3YMGVq{H~X!hxHjtLH>=7`qQlB3+T;5rzPGqDpfX zpmPx5A8Co&%b=$Tr$r08f+e*2jnyefKja)X)e0J=VPf{%R3~^h1QUnn2iR%J*$?L( ziC3Ma&5ih!NtEV9yCT01a&tt5kEO&TFOR$cZiR8pJ}6h8{|A1 zn18Vw@NN{R)P`6=^d~H3;stqNpMzulzR}$;X*_c1eY-xOonifa<|4e_CdpAzk{2xo z);&##!j}w|2w!B-oz~Kr;G^Sg;dDB^jP2Cl7sB}C8f{HipBAs5vOl)}GA{#Ojmlq+ z!mf-XHyNgPM1@(Hd-BcWZ%Ao)nImy}us$!`c?D^A8p89~J_s?Cv){!xXy&nqPozbI zUKj@i(x%r&;>7j)(Aj-1aiocrSjm4frBb*3JqqD&>&2Iy?gZVWeWX`Y>tZ2%z5+Lc zZl4d5DtYt;9t_ulD`p+ZN%%Z`kBigThpvI`0##a&^_AAkJ!+x1Z*PHUsdlWs)p-+2 z<7WCiU*Mjck~T|bUe`E>;V|Pe`@%H1j@XU}kCwASbppnZ>ssoxSF4EBiq8<2nKf9X zk_*R~jMM6^HKHpzX!KM`%DKyzWj6EH4@3s97TrXuM>7s(9z8n1wiK^uu4uOquUxLY zw;(#;J-bhN&v{SZs~$bKl(y75i#zQ+eKUBexifV#aL0AiI;mch$M5RwgJorE#RDUW z9&%<_UWf-i(0{(W417dvEdSMBa7N!|D7m7hl#7-6x&}1dQD3XyVIMB4I@M~Ii653K zCP*G?EASvakG6aHJWyXdw-m1G)oMTSf404T!E(b|_Ta`JC z@wXZ|zV08&iIGo9XJ)&3?>2@FliNPuqx;yj{J9S9)_ywf%c0lq`qK{G-D$tm_Y{1K z?&EH7*O!HE+g)=Iuotis;3n82FkBs(gXe4b=6~JecI|fQHq{azdmZU8-*WxdorBN+ zdHK9{+k3luM0A8T9XzFyRnCFVqvkl}It8HH%RInweYjbbGW)zZznaqJd5x$yo9gm- zSXlMteC@2?=Jb3!->J_xL(j}|b-7#(sDC!QoifGlGIkUHAPtM@lKPJf0qDM7Y7qh$Ry1cH)#yrnq*Dd9JfA-i*e=c zZ!Of?8nGdBNw_`==SaUQaY_7`pkvJL?srb8M*<(;xledQdc&|PhDZ21nlcJ>L%}JI zM;wz-9ZNovV4Ucc#3Rxr3K!=~B$rT~U^c=&QoqmXnCg|_6~QC7`LcJI{t=u>M4x~kho9g}S{?f-s7uOESRJ=KYT+32miQ)j z!+Znop3ouUBkLo$Mb=Gn6N( zKMJwW^o;!FzhDyIcE`qyb|-Xy88A7q)cZom2PZre z2o$Lg%&bm;I@bfmRwKk^EI`K514%am%Y;K=60i>)spmu=e9f<=7k31SQRs*q2@9YI3oi)^F_(av zC1gJi^T!AaOAQMyh-Wb*Wiu3mO&4Se196UtFh;zi`k7*!fD}f9h5d5$*!r#r?O+~}sF5patR;D7$JYc3Agfs=TrzK#$PI5l)wrmJ zJux!MS*#hqB{x0@pK^CyILX>S;nz2R16!D=BX4*$2N`9p+$k>=W;1#`=Ku$9UW0_NpEzl)aY*NTUa(W2F69&``6dWnskedgP z7T}}x5&ewUGN7ahc@7FXOKEOmq1UP7Xfxjlc$T?66ve_mJv&^Of?EzMGgFzYsGy*S zo}zd_M@8E|H1_1Zq)8#3EI@ar)NGV2jU5Ng&KH0>-GpT{gj9c7FPS2ysAwE#n^R9#&bCL8=2{!!2fWUg z2UAa^r5yrPx2uXG5vVE9VjO4lOADNP2!N$wY_{rE75wu4=jaj@zy`oWB^Ye~r(~1} zYw~XEr9W{jHgKr`;LHp!S2)*Xe2CM|+f|OIt);PR>e7*xo+cGr&S6hkMUMk7rs3eY*X^5bLso zUH5lYdCcodg^W~H)%@LRJOX-$xsL05@Nbuml&$WrLhe#_d22`=E)R#+J&yF4c0|&+?a8ok&^_l`oTkVZ4tl};3 zqjX#AUb(1s6$96k6uExkztqbQ0?ybXI`s9YOJsvOVCw6*!OF08?DVI>QN`abK_ooZ*%iH4s}G%YE_|S&~0qkCB-vE@T%gD zK1Dz4=i){-pPBZEXx;A;D+q$(8p3wr()b$(qITn9u)2G2vqJ1*gWHAnGo#VzLskn8 z|N0sNylc|vulY$(V$Hws)R5St~J+| zmTy1HrK+bPmT_xKU%7pgB6l+mkchQCn|`kjH+1)&V>NKXPtX)i%<`ov$EJWRX(3{) zYaTOiI~}Cx#p(=Y{c{#_CfT9aM)QdD-Br!^4N!$tDR7Co>bqZNx zRz}St#%$N7HqXuRO{>gn`-Y^8s5r4a$9N2+$po`SFP#f4L&CJ5(Cx+4k*U|G*ehyOz*rt6`)n6C3M9RUPV}GAtlfQII;`2N?*773t|&#qX2I{lsm; zPuK{kEw*${oGu-TK!Jp*N9dTxNd)+YU+zBp2O#Akr`hIJJ7Z9WiOUX+y zOaZ5h(v2^5x(W>GfOyf1QRA3`m}>06=2-tR)mw4g8V9%rY=o88+OKm4x9#BA)0%Nc z2;l&tQDa~uqaw2~vGLn^iZGr(wyx%VKeD%TU$gf-7aXi-Yi)*GR+xWz4qd}U@u7J} zUV7s=#c<<2@=xJ7VX`0S6Q8NN0k92q48+iZ8=FzN*RXDJ zhWv6x1dQE57aZWKLbL|%0q~CGoUMiuEc3M(^KN&JiKl3sXwT?7aKrtZGIW{dTRk0d z?i(8+JYog4eYsXnEHBt{?Adm2zZ8}hzsv0w?>vVjz-qS;PH!XFjySOvh@I0W`?ZR| z9Ba-rn)`pVxIQa#QZ7E5vzd3`y8Af(3HE-3T=OV?tC&-L666I%n?SUN7y7!pRd~+b z(LzhtPA{vuwx$*H&CB6An%7g@MpUW8*ush@xweCHD=?UWI#OS7g2Rxoas2BUdhc^E zK72Ix9rkORzM`pIVd85USLAI37}&U6!aucqr9WwnM~2fips_(X>Ht4$=$FnCeyLlS zQ&cLg1a>(Hmx$WA3%qpk&2UBHF?SVhb$@s|ek_oG9voi)bi+J7G0b?Qx-Re{UAW?L zVUL9#4Nx8*oPYE8Je9~%iOlBspmk17`{IgTHPJ$%3;Ev7c7vb~Vq9Si8QAG9H{lTv z@gAFX!!k4Q5zol+31hZH8#N)Tr~C7L9CesO`BcV-mseSMhw_NJCb-`bsp6UNF35>Q ze&U77X1ZfMwjP~Eo4rpKa5LJHVu)1;e)^c@NtArtr3iE0n{6y+VE{Iw;znqfBcJei zMh(0MS&ex9u*^ktzRhRdd~Z(f5;z&?S9kwTd>ksy{(I{L&z7we`OaP&n7ZX5ijlz6 z_huEFI85u$J9zO<7eOcg0pEey?rTb4*-7(;-<2KZrMy=`hlqQGWG+`Oog#nbX#7^_ zik22ZC;gf5COZEo?P0jsy~c||;N&r5C8JFG6~nfHMI(;PYvsM_naTS1uI6MMlo|joVbKMVu82%=rQ-f!gyk)o%4!( zoIxVazFJd%R{W&##GENEs0!X+t|y&zo#oM7$0(Xlj9|>DpGU$e%-52}i15 z(uV97sUyddnJGCSqYvGf&$}V>dj@KdwQs|i9`=}&Hy{FxF6Bi<9GoR}1Kpd50%K`L z#w43fMugUK9f{z_W}8bWDX$}{b*M@qJJ9~P9>bOzEB}8%Hd=aoDODUsA3MeGh#Dhs?CRDka zGT==MSWWzKV9K6|HjCr^y(dvZ>7Mc%I#tMvCbMPzU1LPb5n3awSU{QywaZtib}tGR zZXueg@0@Qsl32l~f#Dm!Kb)Gahg&+RNFPWX1EHm57iZ>htBOOa{;l7$+` z*ZN%9F+D|AGz83z8VFza)`Ui9g>_jy^R>`-1U3iHL&m zIT4;K|I`Y+22}#9K&kGC?4bJNBlN9bM*p^cgpPsQMrfHFbyuPGSnZ%EQS~*@&@xs* z>K~+q6jn?}6X5}t?7>rx-|43%ZT1--Vcix{1)P zs)!~`$P}XmHH*hI4Qo)DqWSebrnF92c1>t4k)mq;Nh&o7Iw^V__k6C(>OUF=MB2J9 z5EQ~z|^KTHU@BA=4-eQ@tkAYpBp}E466;5 zdnqG@EZv7<{Z4CqrOx{R7GUviO9&T%JVz!j%unJr+H>%{Jit7$P977%alvN`xw6IvIrinj@r(<)y0Bai#w7 zg=gobHfc;*3NoozB3sje`jDumYz3w88>Ltvq-e^?of|{EFQ*k<+bgTwBTcVcljTf3 z-*eM{yC!BculWP-F%Po^09QVT<)b)nT-WWAMNE}YKdj2_*SC0xtM>aX`j&mX7J}G8 zg%s33RlAtn6epQd)*{6}{FxnfW0Z`|j@RDUVV?7esEI^(iLmG*P@~bJ(Qn&8u26>m zVR8_VPB4muahf%Vo8l?LortN!!gFOow*_0vi6k>BzmZnlCJ%DpR`M03LODVZh-Z+( z&rI*8y6eLtCt^sDxt{Bortl5+*@D9Z)KqNvnw##i@BcOhhxAt3nT{lTWbis1N0c{5 zVR)PFmFCrUW+TIJn=H;glrnuQ(Osx|sU$G&Dm1ReK@!ZJrn8#|j`a2m zhvUR=QkzEABw%x|VYX>)y%FNu@>x&L%9%=Pe^X%|N}Ee#;d0bB^*TCC^AhA|OnVz+ z%bZuy3@MIDZ9GCM8<-Ejapy%3049q&6M;+45rZ#8lD)x9R!-eMLogtb@8Px z%<_84d!Gk7H*AXe5|~@Btf|s1;%RSv2-tGsbXitZ6nB-ocv5&TL0`?DkuN8S_waGL zA5^OWs%soi9(%ScWE5aj)_q-iwQx>00o%M!(WHUV(@x)R557gbknpX+z{lfFzj6Rv-}p!Jn`G)=8*75jkA9#xqE4d6APy8uBq za>%|LUoR{T^iJMZ?ok!+WAHNG6BtF(^RHL}Q9reS8zhkT%^pGw8i0^WEu{oZpgtgg z4f1+d`Jrj2jQ}p@V=rs;Z6~WT=nD2J3o7R0!08|-um${!mSg?c-;9u5_TZ^$_So;2y)=NoNT~t|FED+Jt0-}Aj%N>O!#aw$S#yZd2j<) zgtx%;m5ATS+Cj)6J$7mbJaVGQ$d~Z-DxBH?*X^W@F5(k_qIQ$sS{I8R!^S%LDIkDe z9n}ip(4I>yk+ANO9cO!5KblWa8u&zzmA*CRDd^*g03I-la{)EKN8lD95McNxBp`l9 zR{@t3IY>z`3?k0GZU7S&!aYEPg##f9VkBT+unjc*m|n2Zz!rgIQ33&FNNg6f@8ku# z2yM@I(sJ>zWbZ(v z30EhbW%4EfStb*Hh7_>VCGmys{vvf122__?uxfA*!p`xKkj?^n_6Dp34qsDnKbpvi z2TtP6UX@8%oLA`mk7Q#Da+qnyDe=HscW0yj9>hFhb^OV~TXshVQJUtRl7;YSx zVX@NMG@h07y5sCl3`f`neZ%82B=Ch4H};qYtDyL)L2k3weQNs0uMT)VVu<6cc$i^)%|VK0M(q z6R+$#m6rKu0xcG?4jIM1|8nslESHEd09Yqk2(3VNgT+~MuIT?0ZlNe133i16$B2rr zm!{?b&NUZ3nw$cksxg`Xc-RWWKgWoYG?bwqX9VLfkw z!19U^f-)B( zOmOi&BLJr3Vd9{g$xR9Sz2#7 z0?qO>}22f8PpEVozc)79&i zzWvsQN`uW>1Cjb;Fg`ECjSczpa`{qulq6wEo!Or9Ksjf1c#i%B=qn7H%ohgW5K3#d z#du*Ooi#E*)8ur%FC+s`Q-{(BPv(B{{lj)v^<^}@wv8Qk5_2nR3wAp5NcLQIzq4$I zlkxH0=wu6%0dTA@h|&Nv5Ug)WFD9P>ZNNj@w^2kC1*hWW(p(UUfjlm9N0+MRR2KN! zKrx9V8$=_I2r3O{f=5^ouooNn{AltdmAxR)_CjuHsG%d&m_*bSxgzV8hdKMFt9 zUFebPu9RdgMQW}Co+%k1-{nixk5%m+$*QgxgE~j>n&?0;_f;L6ld`820H>!Fin0Qb z_(2sVxa$PUNmCAlWI50?+Zg_Er*mgdjIHNm5Gu4lypm)%x>^{z3{ys_AnhVLgb(6p zMUisFb1{#hK;c76y~y-7KxA7m=>^cf2utIA4#n)J!QH3xtatNj^W84j1U|i2WaMOJ zx^+7oZ)P~a6BF|^Tpt4#b=tBN;nVTlQzk6k_7<*j(mzzO@x1mXZ@nrYckk_b*c=FX zW-1?nftu5mx4;0bX<#*bODd(AoGe%q7RuSf?!)Ej`+S=^*J2TS$wK6*9T{$V-K*PM znG@glxcV^fge4#9GzJ6xS6re!^-AWr+zrQ-A}e97V%$t@c;3G+Eti%GJ4Hbw8jJ=F zi5XR^5BQkTF7sKsA;V-OBgv9GH`GZQt^ScIr| zeWBl+Um=XIzX;YKi!kwJb!RO|$1^=JGG0 za?ZaQ7a+d`8~UP6?Jpr z>y5n=C~O>aUvVFHoV<^gAb1O8b=T4#Vc$f*gIapl5mn|wli5b_$fwY)$9)>JrDSDU zoGC`;r_WsMk&q|8-aw`B5qg{i!AlXUqDNA1KN31)GP}sG+uHVr0wM-g4CCkqbjYKT zIHw%^@xP3(6O=}bX5naEdsM%#zSX^sIQmOtTMl^x@L(tu&EMv;14C1t^i);LL%{6~r_E^uq)3VP-!uW^g7k=4s;_DNC)y7^BiG zG$pFCQdK)0P5%bXhsKE@w2opD1NhYz!rcRH!(|FmB{#Iq7$i!R%M(b@1ka_8c=v!R z?NqhA6%D`wZ73yhFMJz6yY-)4fNwx^IKKk!L`|hWk7yur&01i1*R=3Z!>{LZvTZ<0 z0-Fo1O^%&}z_LC!8b=jFF7DjbUkB$kQ|s7dG7X&DNN#%x(r23p4Jrk=B899BN- z7VC-8%LcoG>j}-r*2mWM8m!Ge>yqmbY+oc#irDuV;?}iO;Bwebt9~m2jhcpkPV+Mx3xY6_d`a3e=S?_G8@y8r_mlbfBr@+=cWKj42yl30UO_Za9ntBWrmpUn zOtG-<@OS==vb~)G)?FVb$54k7V_iztx_y&MOwbFxeTgrESe#xZ(lzlVNq>k`s1z0z zHlt$qhm`s=uUJ`Kn;HR)@Or!Pw&x_ z6pVMZg3u{1l$;6g=q2TTvyExzcJiqa@(BQb$fq67bU!51$BX?}HFZhJ%)3(dyHoo1 zE2iXo#M3b8s|TF}h1W6Rr+pMJZtcKR7~H@lu4?&j1?(b9Dwn#z#-a{qo1TvCuBp#l zt(y+ZjmX-&!uP`WPOWN3SA#XB&uLw!*W=n@qtxMYIuw(L}|6 z&w^9SCi;soIvyl_x(jpAo~C0?2h99M&HAzQ_H%WF!%r&|v@<;CB#t9kv)0i#$kDqw zZ_g4!cN2L3@u**1|GT22!^5??lewU<>bAaX8(XueSFTy_a2oU91rH~`%JIl~hrE

awaJB;yzvM!f!U?DVsf*S>?Q9WKBLhU8T=;G*ido7>nFGfCOgX_=n36!!nCQ$t6!oWLX0BbBz{i_3|0D+?N>+7Z?bg9yk8$%( z=1Hz0%+IAE!bWuGPKt=tAD{cQ;8 zv7Z<(kZsrmBc5|V$Eq(^vstgRHgP_jWoHkz(OEwV=(a6+)gJB~jYx}|UJVvSooIHZ z*=X)uDbD#AAT;Z4=p1AB)NuCiDgVq?ANg`l!b*_M_#;bycL?}Hue2+_ODQv6%0`&uPLw9_LKUg68_>?&S)7zmCh!Zyo$jP zEc9<|ActY_@_W_H{wSc*D^c*hidEHS9NMhXZXUWowX|<{y)ttFdfje5f#Wh!B}~I0 z4mD!+$ICbbQseeotlf;3dt5Y6G_st=YuAzj^`>bsMqp*#ygl1COMQS6RuB9wFD>n3 zE-K#u$6N%Y>+YZxzgHcrRncx1JT<}E@haP%>e>)+NL4eKBUT<@0O~$Fj@mHZ`dFVN zJxSBYg_tfIgB&Hfh*2A(UPfGJpUF{g^nIVB&w^9AZgFuf6Wjv}E7ZbKd|3ju~s1HRiOp=Ku9w zJ{TBM&JOa7^SE|=6T7?$7oGLVY}Oh6>%$~^ujDuD>z%xNTCa`4QVQrY-lM-?MpYhIrR@Ki4$v zhkBSmujMf6D=f$84p2ueXhfOJ>d3P;v2|JV9Yg4&cxr|ll>)6}BSKTSg_9le6uI`@ zCPqw6?Z?AvO~x}9j{wPS($itE*Q}AIj;w`x=B1XN4hD<4>Ftjx z&yHf_<*)vDDT;ODxKvGmdzRBD6{`!O0rgvom|=s# z%NhMt0lk3_JbEFD_&?!MPRr}XG=?O=oKyr_f7LP+%q0$#?*1+kad1FO>rKqcI*cqX zNvQ8NOqwQ&q?*!DfSpzEo!Ve6?wK=4pp$;|vy02(Kj=toV_DGtaFVCM&Ckda5X3lv(K>WGVKnyzjnSMTvsR!4m7p>9=1tafa- zmjE?H-vXVfrCad}r?gjD>IO7d$|jsk4%w@+QGtL%b(CKIOg+7L8)jP%+995_F(o4f z78KXQy6pjp=gp@bw!5)F1BFZQV4;-a0!r;-#st&s)HhK#vNboPIBumZWhb;C7(bLK zlv$}decPXK=!3QOEd;s@stmdWu2O&Ner*-o@Z;GMedaHbt7eqkkHJ+-b%wI zSf~;8$|Qp}N#on`WE`MwodwJwP7`JD7KR;o9UaFp))|W9^tx)v%FMVg5U8Hr->J-MDqYQ{dn`><_cO~E zrHn!pSj`TGWQpl*${2uT{O)U3_s=-m%TKfA(1K-g`)M-+pP%qE8zBn&xVt;$8&ho$ ze!mhU-ccXy@t$sS1pzAp8_{Kadx2sy2HRn_lOvpr<3?b*(0~PRQAAJUIKMiRMN>90 zS`zYdq|G1>bVsX(pDw)%uKM0k2|Tn2YQkJ4d~KUV)tX!eiEt8Ig>wy`6DKp!R~me6 zw6#xVU%kKoDEg7-+PK}-B*5G1R05YYZNEZ#W31t>99nBni#*R*flanzbyo$A{qnkv zX#JMno+-zL5f84=hgz-A6jxn8XO{dw_;Bbtw?QGIa@nrf6eD@p<&rFx8ao@s7u-Z$ z2J=+8R{|sQ;sWLZCcw0RF2p$=iK^qtP0>fV5jy06(U6=yj%O-VP-s=QNMw4mTHVX$ z)Vo=DEZ9A=Of8J)3|G^e{HQH(A)EoRt;W01WumI_J%`OLly6;?#0@wFOD0{T`G3S=K7{G zFxCEF_Nb$c{y=jFX9u<$yVpTT%0}-|T)LM{MD#gEFCRO3^xAp{**pu}d*(aocbyUN zoQ^EP^o_)(&a)%+G;5<3+R4tnko_=XT<5@%DK;J&S#sn}fpF~1D?`^s-o35!n2wRn zluhWl%fYkM4EY7%0ygI!l8#(saA$wgRRq`MAlhLimoQ2Jj)bH_ze))UVs`$yM*pw$ zn87Kiu>%i5qirE3U?Bnbmta-b3N!4WJB0sP{mE&_kMdK7Vc(0oPx3S)t zl^8EpkMk6y)Uq^Ck6B?liz&Cb9EVxOyfoQr3(g;is2NVn0#_vf#SB3S&A2xp6CWKyBYaat0%(gcv3h8d7Dj7F9m5?09PHi<6=C-Pq%s!FPj9m5?0d}2GCpktxb64S?qntCHoOS120j&M2~m&ea^67I zL9mI2l53)(*Ikuo8t1zQ0r|{p!qJ-(>0m8CePj>XVqF(vPzq=<}%yFJz-?2CFApcVjO+4 zRz2c)!86-Kld?lRr_I~#DQi>ZYBt_bO~t)T)^vt`hKuX^QdA55cJF6}t!EqXYbe1GU}As z91AkV>c~bZav#xA>=DQq`u)h=$o=d1+{eVLvID(L_g)x3{-9Ub(SX30#MhP=ot}q2 zH8s)Cm#Ab&dzKhCKR1!s1?D5peaz=k6g*p&6pqP!a^NJB8FYYic*Lv2Pj3QuVX9jR zWTo#+>$pvd?90SGN0sHr02kqSG zErrWLl;0QuqjjHj7%u~_@PqH*~ zXf;)F8Tc&&huQI1oZ97|EN2+bgSbZUKJ;i5?`4y9{d-}FC96d|G{B*-TIG@Td`zwc z)^wnph_D2nOQem_a<1{x>VS11vaOTE^7c;1de(;7L#s|snq}RA@!4Y|WYtd5b$kii83|eEa_<^ri*w;a5_TVAU1Hi;7kxohs9g&Vi!a)^2?}BKo zpA`QHL>80 z!r!Ax2M&nYDOrhG$@WZX&3Zrc`^zX)?YO`^MxJVUO-l+~2wcdM3!WI?TXj@v*Y;hg z)*|Z&P5F&_tWpqZ;8&gv-!a%mFQZB)xQP_Ib4lYMsEc^49;U)h!d5VtK^P-VOVX4i zV!Mj5ClMP+fuzt?qiF?P@kGa*O>;DX6z^jQ_v8wpwG-x(3CSx>gXCG#d(iWiGN*}& zxj-i6GZ1c3Wv-IJtcY)kAbb8n$9|C~l@i$?jmaJawc2D)wbc@Aa+~E9v9UURquI*g z?kRiBTFYes)(tbe5gn~q?#q5Jw#-fQW^{TCP_wHc07&?aI3p|R65<#vw)h16#k@Yo z<-qM8mHQJ&P9LWRH3OW<(^1S(3`|!jE+))Rrs&NMQz-COjXW#$P{vh@Ei>_~v(uO= zOZcGr3H&3^NJcCY<{*g|3>x_6b&2!$`9+Zdy?SJ2%QoVtWmoG3PejzYG$qnoNj%psuWcX98oGAoLC_|Wq z9<&%?ROn_olJF&mkOPkkHD5khUk~yMzRwO)H7Gajr@GK8N5DS@&=MirAi9v&0zwXy zfcn|`S*lEPUx}NbUZh`qp!mT%RkOCj56X~Fp}LTBmxL=g0f&SXaDRi%T_9nRR(gCg z)vuxvo*Nr?x(G2~1?3_02}|Mp$%BA|KO_G1K=)x2z9>KnT__wZ9>0(tN*ltw_kwqnXGNc$mfp_tJ5Pw7sfB4G^I`x%0_58azFxNq!bt|P226- zy}1e@0HTA<<;^`$euqVp)mFmT@3D~1Fo5o~AzUQ=sf4bAQ7|(EY7$Oi!9<5pWGkfN zlG-qCbOYF(86OnF@C`!QX{t1^es!>rXWy$smSRMNfC~}lxk=0h3kd#-20;~|%FSou zk~WjMKL87gFpnvkth8&JPcau&R8(vg(NC6-7+Fnm64i}ZW0M-LK7Tvc%;EjraBG|1 z!B?{1PS|~(Q~avs*MpmRfx3N?h}UND+|xd5K!(eAL}P7CdE3?vKFOk`$iFP0_2u6u zr&n9Js?Czs0qBC!iEr)!jW@xy`K6(NRR&)lOx;!rW#xfyUs#Xxbr7 z4aX_Bz>3!CeCiM^HIXv)RY|AebgohWe(~(M0k+6&bJrg!;@?cIM=9pk$jGHo7Jf1) z*7U~9+Em&V+S%(V`<+t}soQ;rpoFJ;8fWX|?WN1$ZZH{Hya5C9or9rEe=OV1kMx_+ z(bp=P*!+OfJ`A25ZJJ{kmnnDv)A`&ge+^M~j6n;Ek#uF}9yho8T!$dXNde}I`MQM8 zThQ^oDO=uL6@fRW37b8DOtAG_V(Bq$A))qt?6^Np3>dY74>_||y;hPR0PRAJr}R7N zm&<+Zt@7A_OM9#$CRmhUSfqZUn5bGE^%<7yZ6%tEy~=!%?8Jq89Jvm|PC#v>&JvFE zEhD;w4&_#U7%9<$cv3#^xJLYpq^=Z)ubSS4*Si5Ik- zN)Bxz5-6>rq&p2ar_te~kFb&2I;V3oo(hZRV>23))S~e>#7K;mOhA*+ZANcNxiv?J zWig%w3x6p-kgPEi65Nmj=GkydXNV>LfOKlhW0MxXTB6_WN7UZ_(LZ;7z{`fT%w|`v zW~mIFH{7d%HE)ks)uSb2Gfk$?UT$ykJnZqp0h@+*rPSn#Uq3B2`c*vF?;rPqbo0E- z)^a%f9wdp+V{WN(Cz0Ng+Qa64e%3};YH)yG6*v?bSN3ny-LQL{&sB zjuuJslbRukS)`XnVmXZ`mYS|rn55X~K{@pf3x*?n#UP!o^1*i3m|2T~d-Sq1^Ws$3 zdpXymsrU<~VO^fw*wM?|{5FRx4_~w3+cM5n_><|D)gpD?ZShKt$FrIbzdzwulYVIQc zuKMnHqOCu~sflY-o#H@Tr)brAm4$nqG(sUyS*L`r@F?>{rEC>-^Z@y4j9iVuJn1U= zl}+k-+-tr-o}_PUY@%W;W71@Ki(FbaLLZ>?y>@d*cXfJON1y(#v1M0TdU-Nc(^2+W z-2RbYB>d>?I&*itzV<6p>+W33)~0F(LR3~yDO-~qx~GGj*VSHn>>?m)@#di6ziRcTcwD_K|yI! zM3#(mS7dt39y(@OB+0-;N`zAFeDZBbq#Z*8*=;jr=UQOTJ}V|h(8W?ifO4rLkkxOI zz2lJ#rsK|BZdc!+^8AV0)6(bbzTEIyJJd!@rOLvN)w`A9c#1uPym_ixWz4ifru`sC zZdE}(Yaiao*oB~zhc&7@O^j1ok~KmDx_ovF%lQnjxL7z$0h5Y`Ck!{KhO{_56!V?4 zTuXd}(fd2fRVo;fk}e@`*liCSAGaa9PSJAj)W>;{szo#jlMAy&#H_xwfbz%!5uPNw zc(s+$9)hK;3b{weZ*b{hEV6Qeoq$ACXLV80-f{??u-4=*HX`aowhGVm)h1YGmPV%< z`SiLnI0vs0Z5q8{9xkoPTh=Lwb$2_V?AiUP;tQoVlzCm*Ql&##8(Tx#JThNRP^(op z#(`-oKng2s<<_V)$7Bp=wv0E#tIAj*0|JIh{TFC@B2|K7S$?fZo-&KW;-GzEfFe{H zQm$Y{EJaeLlmR-s8xgOrOE zM;+36$FiuBYF`%A0cx~RXEGil($STL)`KwHJcQaUBecv!rPf(kqB_9uVS8OWS z_d&FFY{yf*iQ+Bv?$}1wzP8%dm|xCEsA5YIE#VNNXm1~UnGpsy3A1#wsQtNiExo*? zIH*1pp9kkMZpi&th}}f9P5suttWo_Y*!+`@=GvS%4{0e^Dd8w56y01F__T&J4pto^ z*hFPA{pDCrZx#(CBj~>KdNJ_takdNR(pfa&XcS=1#L|XI5-dP<6Y>u!PR5;bjl>Iu zDi7L~aaGLaWU@HY`BF>_ntZNm!8KXBup%DK`X`zkL9qT<&|sA>+Hv8Q>>3l*xzRW$ zo5GN5`nB}hPl%&&0sXlqYE3#!a)Rlb{YHLGCF51%)ZYyLN}5WJgd7T{?fv50j{>8a zd>^9@tL3?9;U*%dWzfg0i_&bRgW;gX@EaGwOtNT0iK2}Ar4T3tk+^&UT1=n>GH>t> z^7Fx08tK;lj%tJz@Q`$(bi466KSO~5+Tm9L07c3Hh3TwgzQpo*iK0a+R`xi^yhS?G zJ%E2?30xu6Pm$`cA4@_1`eMH)(>n`Ih|T%ud|$K016hHQGpj}RMCxt=ahdhP)I~i; zzcdDZRWnMjvEfahFBD%mIV>j<2_~)Sf>p#r;Wmsb3iJkz)tb?uDZ@-l3s;&MWic@} z*3_5u5c4o9A4*J*SX4F^Fa^&rmMV)iHZC-!ngd_pL7KJ`4Kr&inQ8bt!0O(6Hg>P< z!O;Zq^_G1c5z2S=8gh&ZXjuoD;PLy!djg4i=DErLE_l(aI`fIQcBOHg_ct315BU7T z^FTXe%Zu;XYU{Sc2)MZIy~NXBP>O`GTk`GN^Ov@Ip~idD&Oi3CFerlf8UW$AU&nKE z_V}6_tK*YTDj6Hl;JrbcrX>`$eZF}5O?uAj2eN(Jd7M|{w!?wlxP9LknsM&W1W4t< z10<1-5X!v|aPu%+tX}0!@Ko?5dh7@TI(OSn^61@s4)UHGUy4nye>;cG`Xil{Gcz?)57N_0(;N8S{JbCSBQpIQ8(cDY>%P5zESTn^Eql+BAD-sorFP_2vHuKBlFro>Jhcy$k2WMCFz+vShh7%uSOyuH2r&Rs-pNyC@qV^9$I{NW|QPdd6_2KTg`JMj8jrG-MpGflwVgs^DS^n(Tax?$<13e}Bq8DA|LMqBGq{!-1Vs&EAHc0q zd=g6|oy@5Sjva4;XW)}c1JkFWC@p!uc9TCz*^&lJcHntP$QiXRIMh<>p&o zNyvWxOg5o;SFJCTtTc*SpJW{Ka9yW0MsS+&rQw1ROPo?Ef_p|nim{KH;6Ou5*i{H| z4|ysU_KRkU6dR!&Qu@Nz&8F|80W+jflm4hH)i!yUY4nw&Jb7{7szH)D89gp|WsSVg z)d)-M#O74bX4!~OV#z>@U*i$5Oz!vw(G34orOSLVsgrh0LrF*HN_To`FV-Fklj+D_ zN#iixeTY^9%5Z>lfqRC#v9YdnkjdZD>@#+8)E0@x^&XPBIlbF=mA&=28F-%gSy7EI zk8sIXFSG`&)d^5o^Mj;G(tKOd!=Ads!0)jHBk6o4fSCfSE;eTuxKC)DzAiQYfjuNkW(lkLn-LJM3Zlm; zUR>bf7}hdJL`+0V@%w(wWPRfA-TS(XL-}aZPBGC;W%*qs9N7ql6(K1rV~w3~(^NGJ z1^~Y@QPFoJD(rZ;qh|=zq#OZ8yo`?g$;%}2K-%o%+#tbN78?&+;V77zyj$OX`O%Q$hyXwHbTOeusy<$Dcx(9DXt+`kx)Xc!-u5? z^UY2EdHnPBUNczK20@~KkhA(?8+{uE!~*Yt2Z7qFGT{=Iz$H~J`Q8M3?` zufH=`FD%Kn?gVFz414<=)GRoTOm&ldeq?Yl>A>dV(IGqrR};S^nYr}C=b5VF_o{|&o_nf2RfBKTIFObo1{-7exkM$|K^ing1}j_Ghp<=-!+N0Zt1OZ+G!{f!AX+tzw1EaAnhYx665*0Ost zDNAmOP@78&(JxxAe|KKxw5Rt)bPUqBCYT6604ccS+>ukd&t@JsAM6!l%|}FRdZF|7 z?zkcNXQMJiH+S0RK<$zgpj#Ce65m8~u*<7UdW+n>+ASx51f?M;qkWkLUPZQ<3H`3V zm$z+H?rMye=}k`;{7+WKTSvV%Ui%%vZ^7wAKcZQ@M20c(Vg_(RbfOZJlR*@4nK{HD zWW!7Z{M2|SLe%1z#Q2D*E$yO;k#`v+xS}BZ@2LW{5l-|I(&ZsyAIep}Gkh~CqRg@> z&PLxkJXaJ}C{7eX?5qcb`$K24-3`=0pLCROLZy;Hj0yHcRa;Gax8`~Cq*~;12Te1p zQ;)YWKTY}JC)nh8Gs^!G}`Q^(_kt8918!$Lk`Xm$5K3aWHVQu(eV8 zhPO;0>iC7lecER6o!;usV2f0Uzd_(<7S#m2(O*4TuA=|2eF|0a(8k6Zo=_4HrF zF(#J(Joevho|3bn)Bm8<{{O_szSS5WkjgFI(iIG$1TLk;x{IG9H>py;DnD|H)&qar}Stu^5>+={Pu;I2f7#8$cEp_*x&ChqGwdA9oc~M6Vq{@rVfo*Ool6gQZDqCOe{Iiy`^iwa6@|L;X%IAu7{UZ8 zR}l*+^aTP@grHh~D29<)5KGD!{zfjyYD_CcZg?b;_leUa_-pX z6h+yVE!3LdYMuVPo12&jpN9zh;L})cEnBz=ut!9U6r^>x7FXKuPI47RSp5upfYDrb zwvBhy?ZH262>a#I)ZC6OjP;Y=c8?u{8Es&z_~J&?&;XbbGZ6(rr0#1paIV(c6PVN zP`WgoOCmO%Y&_RQL@~>U)5`vf616NH5D!$1C|Gws*C>feWbPdafv~6`OsRLHiwus* z;4f`F3A>uxl*r(uv=vGY@F3(-TZML~{1fhh|Fgu;pi>-#v{$hgey~7}5dj9w0d=tq0J|hPiJ}eo!O01m4ALzTM||O7(Dz*67P>)hzHt_!0JVa$YV1 zoyWX53~qeef6AgXVajo&TWA&K#v)7>>0sfOPPhb@1&uKio?pJei*B4spBRVF4iVj= zWKUo<@&h%!KfC1e1Jwk3O)r8A=J&G$?bRY^V%`T7B6Fi}>=$->s#Y1=by9mvnRI7h zkFLY4Uv(Prh3cg_B0i71yhFzw%7iUSn)>aT=>WCYbOnzYfzzKQaB0}Bvj<{du1F9! zun5^GS7`8`RjJWI(P#eI?;-9@NhtL^-}9=ujS zE0S9#|0quG_7A4oU#<9V_>NaK{bVl%AvlMLjF{&Nf9|5ctW8?{6VYK!#${{St-Y!i za7TFNDQ8}m8kvb8U`^9&rs=J>tTWV)rA7%1tB;_TxHr|tJAjk3^1?-2dV0*2`P7fT zMRv|rD4%+vACv=~z~WPL*SrTPRG2iI`nybJS^xGil1PVBE-7@bc9M39lhdQ$T!t@= z(*-;POAHqDhh_Ibu;3G#@$-3Ej2fwS1d|1ojMzUaSigxLnv|=2!QKN#l?cUg1%s`; za2c&isQ>z)6I?fO_;PhOV@D?XGUBO#!)46HI?qn2bT4j;EC>1&57Q{V-ivIoQP~*G zs8?7m2UF%i>!{#AK4cg`*dy0*ahn>#S9k{2zH*_KGa@(l6q$Xt-KF^v#+OIU5N;Wm zTawAa;jOf4a^_z_86}cl_NDrY=FRJkksUSN!i&byj9-&4rRfjORq|Bz;M{7-qnFw% zEmIchRN@cp8?x-H3E`0h_SPW{GjXrslT+wJ^2#lNX9 zrj@=AtL&0>b*(+DO)tO&UpPaZUzvaUWr?TmiMJ**V4Hd5c&Ld-OB@r? zk1xkjKJYCtt5ILvw@2(9Nr4-~F5W&pa&$R{XaO!)L*44U<=kzkK|){Kkq?gkrVGvq$d?>@V*{H@KkQ-0?K3H368!)9 zFF}PR6x|}bK-evCh;|kW9P{lE{Gs`w6RQV({;W0NV^(QE3T}A)BeIT7uhi8Lmm>;8 zRPpEV2jl_S&r0MRm@wwhm5EjtHl$Y^atBQ=!MqPb4_LD}eF9{4xWa*9@B=YyUcrpr zY+W2-e`SInyc|W@v17jUg)&Lfd~I^BBD{gm@&0!w(9OY@rqJy7DKFGs6751~2`&<@ zlC~#UPV7T^$p4CPsKm!_9Re~b%*Nr}n={F0k|Gai@4D{1?|dq@uxz61$<&dnPM1)Z zGOC`*Z$O2GB!tw3jD@TMNC`O!N%Ls(82haE*%GFJBYl&2#_X%a7mQDoPi0Tap3S^7 z-Ah}R+rVwpZG&y2o{8>lpV_a*Pt143_ll>2rvh9ndeSDn@!eT zZ;H;GOoZ$Et)$sX5Bh&$&q>Hz*Y(#8{2aTVw!5ENH$G26&sT$gOE5akBJw-M3wiPr zsW6R}qpWeyUtP9O>gEaxY@@pQJl;>%o~zyHtq#uP7Krtty*M3!2L*8eaWSzFak;2Y z=6YM>`_V&UY;hW51L9)DPe^<|W-q6gm|fg~nBB=;ivh`jFOdQJ0mOk_@-GL&m%$El zXt_zAI1XhtWiA%ilm0vnVdl{K5XF#U_#rq^ILW{gaC!JIi<^SJXNYYq9=4aWow&YZ zh#X8Whnu>-&%k$ZdaO)-b-q+C4sQl`21YB_6}o*J)|~9(e?_4a|Fn|5V@0UTpj`Rb ztMbu+L$I2%mgclo1GF``&s}nw@;V23HfsXBjd5&qMNXJHa{L249RbbyTiTLpbAKC? zs`D&Qxz@y%mGG@ga2peBah||qaIYoV=?UJgQJAVMjEi!uGe&hY5?vfli1w4p*L~a$ko@|@{2|3Z> z5*%O=`X_fi_x|wHTLOP>6 zbODPPH1RNo8PWnHFEa!2z0ntqA6PvBTR2z)f~jF1O;m6LB-&WMI!mNMf(8w910_w& z5Hn0dS`sM(cER1x=c)86{0pQJqtAAJZyq@(>P9#*{I7Ee>1cVg2fbQ1Zx8 zZ5vGv+ubS(3AmzbkFAJWygC$QK|z)OyBETTPOneS^Z;L~pLo~`+N{g$CLf2t?T<ONcfeU(tQCh@>>n?KbU(Ww z+(5iaJo3qOKwj1bU4OFs|3fSG@VD%Z_4oPdCAlXh!}LZF8ZgpK7YY)$Qztt%_haqY zKQ}Bq^M`ICIdDfIHw~+GcIp?7rrx2pKHH1>EDxL)^ocec4}7Bph&c8g8r;UOi0;v6 zV1rt>Jc#)Eoe$iGnDJlB9VNj5Ry%IzpbU1*{KbF>pHiunKOJ+B3|R?|DFhSq zYCeQ!jp4lD%_G2LFh~C(ms+ehkGbnCH+0`!+X{iQZ@3N8jg8_s7n6CMAz<&>80pmt`;ZGB zb07I>0f%!x@)ZRhvr&&f*DLzo1Eve+OM0RJ_W}GpDfqs=6Rd|1+*w8@Gcot&$TUi_-^nu?133e zo8+rJ>Y%Sbvaz3fE`~)(T>~E5ttUxIj!&xX^89X;83FNY9KW1{zd8uH0zi&P2hcp+w@DExSF zn$yq2S(@>pRVTvf5Jz*m!-Rw*g`cR3h^R_XNs5?B3tr{9U`~j%g`&!mk>6Vz6Kr%VLt}9NL4yE*xRrb$ zVY<*@iyU#pjvX3v1N`HR?d?XM9H=$b4c`2cx_DmqdjEuXt{JJ4-aND|n$ZB$62i42 z)EcC+K&~*1#565xXsvE8ZU>I-jf=w2YyM{J>8xxlY%Q(T&t~?$%It(OJDwhI(?5!u zjCyEXw2%ycDr*LeTMgFJFse%K zDPR5}N>wARtVgyx1Qdm9<0x*Dcw$P?zMws|xTJPL?bG$u7s#uc#r=~k_4(6ZAEeK{ zWR>fEwXsdcEZnp!zN@uvRjaMFxpma4X{o3v*)z~u6o`mgPSzD7RHML3 z*#fm}(Xo-^(P}&57p~f_7?5r~6`iu^Q6#o_nGo^*R(&5*?3Q3Hx^*zI6)QNixuvY7 zP{%H+UZu`7CpY9O%T%)!qb0CyA>?XB&d;khf0BT4QM^F1f)vzJQ!_}G^3e8%1(CRw z#I|aDehz>>JEsu~Dyv6p0#7Vy$><{GKI+&6QuDSLc`(lr^pE2KX z{GPJQmio^@dvSVj9Aw|2Vt9m!QDDh-C?5l;7jSWoYdBPVMOxKc{6dq~=umT2V;jc` zwNoaE_zZU|rnY^RY6&ar{#}wQK}Pno($K~94R~j`>M??r8A1Ficyj~<>Sp$ba@h;& zhxMhv*LIXgDeklx)EZ418xx-$$}C41$QSbDe;Qf3S~w8|N?L84+caUkxa6Y82zIjCUgNc5x`@|Td1*4C1>+eB zOvX54!!ZFy(SpfrAgK{0` z6Zx-3`KrUgQfOq7ojIHH^SA{|?{_*n^=Vdyq67J*j+4o9^-bFFq%kwZ@TW?{x0Yi# zG5h_9bYwJ>npffFSl2{7C2piR_tJt{%7ih(;X^}jmsvlAmP4Ye@kyTe?`Wf4s0)IW z63#97rrknOtbvz*u_9zm*ysn}()jdi6QIT}^@puonl*u`!|7~Jri0E%)zzbuhqXJWLv z^+db6$li3rV24!grb=g)e%UbFTs2g;zGF_w#4MOe*67DE{WVa7 zeZDqB-j)_glws13+9SC%l%+|G|EO)2K=MB^6bHSe-Xp|&N2XHh`0iu^n8K=Bf}2`MM~wO*T&PO3I>xAc2@{tA8(of2NwSOg{0Q#_u1Ah02nX3cGih|z70P82K=$cCg${BVQ|CAX zmP=pxcPuLmh8>6eX6QbmfeP_7nsx6 znM|6(z1SztX?XHR6CNG)rs;E*DL2;57N#zxTeK>sHvJ5g-8ZXrLiy*x3w z^KBw)rUFV_HN3zrF^NW5lb_{D|CNWfnK-=|ur=)I;|oCecdgqbM;F-XwXP^MX}qHG zGgh`v0Lk}}f`rOV?tqW`2TVFC9E_CY)72C8U@v$~Y8>!&X;aB&Y>~}O#{hzVd z`4zenShIu&E_OaJ%0W#F*+nbg|MMpI@_A2UI{FwMIC7umW@| z+R~S5sQ7dh6(9fRVrDQ&NSPZt!HFmq;v2K z&X~j0+9RQnzHd%>3bHC+X6iYQ_vV#7An$(VKW97R@N;o|`3w8wxN7?gem~k`^wKi> zAz5awboVod0~Y72IBiu>ku@@;99ugrF%PbYTL~N$NKyPDzeR~r7@p89ng6t_(5Jr` z!>B#`*y|=FTfarNIJ@owQ^DYb|W*loiV0rc|z~hZ*qi)xt)BR&d}Pyk6zQ9rM%vM zmd+h;m(D5o)Z(mu|F{1$zvHsLlkqUb$vh#ZPgdq^|M+b88yt2VkZx+BaD#=vfm7wA zK1BJ^WM^SuNTAqOddoNcFSlEKxn!P#T7pu%W69AxL#*~SugxNBrNAFH*d2y({si53 zo1SH~0#>8quNEnZ3xk_uB3I%Ltmc3lU#@UAqirK9~@x}hP9l=&!NaI z6Zt+)!B!~Qo+6(rG9u%chmW9?t5Y6Dzr!5BSrkNlqR+`l+Y|jw-&#@1+xk%~9lOxj zje&!nb+n|4u@u5RJ83MU`qdK=bl2hI#v3FpnuF@1#G62ER5k`J=+e6D$*-0zqT?dx zv!tY!nM(=N*yuF4LFt}@|I#~A+r*MiNgV^q8K&3lu3Bne%xcA&cn!~C{JeaTS*C6R zZPNfr;+%njndZ>I>c%S1!j+D;`{n5+%FGBMad?DehBc!48n!8-nDy z^Qssdg2-r7f$GNMnDvPLa#BhsT3|3@DN7rhmTKk9cJvEL{nC-=>^Eh?Vj?xBj06{U zr&o<-N>n(4Uzg?u{af*R17GIc(Tlml2^CFO!NA}uMdzrWXw{9o)tA+?`}Ju1`}MYf zZDjFq#Mj#fW1%yq9^uQnJ6Ye$W6S3*fCXQWChnBW7>I5R02_Q+BFo}euvdBtaXpq~ z@iD3Rm!ECKRWfxH2~o?(PdTs|#4&SBWcnTAKti%8_$+FA8i)&5PFV=uIl`G!7%A(uX<0z7nl-e8Tb`vk8Z+*E!O%3XJiY@6P=ZY)( zEXR2e#@hUIwCqi{MGD96jG}iNaZ~Tz z34edFlb&rx2GrTnto~{ScsEGd!%8^ub)6#MDWlC?9EmeI+7*!C+T`*|S)kT!QX}~; z`=pdvWQ;$OH0E%T%rj&!&ogxK(vU#9rAbQIggjI@BQ&-;|1kOiq>^p;EW7MlW#q_% zk(WnZI#oKM?5PP}RaKQ<-Gj;R7YciNZu&&jnTj~9Yk%mTNEul0almzk!%{3ahs zZ!UWH$oa_O-}?+NL^5_caiH}!H|-t0N*vbBc)SZGYh=D{fX(u~lt9yD3FEU5J_y)_ z_*JGmW!Dvy)fHtvDt7a(lGDGCU4?32$Q!uYNIk7D*FJ8GuCH@-Vtc&!`G=O+K=EEJ zCC1J^Di9-n(C*kr0HG&RrXIN^`!~w|f^M9~!1nDbG>k|-k%s`q?s5AJ@Uw+(ip1nW zc%*@R(nnzd`@JERl5lOUwQGtFDKUq1< zsp!!#>hvWe)8|$rd&DHd4xC@Dq$1JHJ_8HjFG~jJ$>ARu46$vcsAQd*lKg_aXHNPt zu(;yoEjKzMg3EfC-TfhYYIDySUDjY){3);Y=`gDLPK^L@-m)h|9-UdoU|Qv?@GvD8 zU8GjIsCM>wok38IY2^J|ce2^KdZG2@)%EX_yo%b2g(}g_N+{nN%#%DL6lO}=`5>ch z)44|FZVjq66_f(l9?J_H&|5L5N%r5!Etr&is_)?Ky|f+`70m|8fgDag4Q5)=VqXKC zF4@+VnR}toGsc7lQjFPVZUGp_1rI7;+0?i{g>}|}Y243I@^$!)sWQ9dfc5patDY?! zwI|106(~fgS9yAGK)nad~oN-o!luc;ep zs)LMa>;5in0ni#*Ril=#A?p+Ai@N2Ryty z3%wwox!xXC){c&_LFDH#2M3qV{obh3Ift;*AA5USo~LIQYH!dD{U6-M|I@S&00RH- zzub>vwd`BOs6v0sgdzu9XEap-!j~12^gA+SK^qru!qljvo#+woCU9P_`3;{mhfT+E z%q48*SKPS}#Fy(!CB|An&Q$YWp7|L7nX3L>IaF}L0y_ZYz@AiJ{&@estet2z9vt1&5UV`2_%i;eIj@nI*Yn`|u#%nxx1MKOem-#6 zGshi0SS$tc+4Phjj}>u^EHTbVlu8p+(S}F2PAD}HIzLQ{$|-m|{N23gZZ@_Q{}`K5 zi2Zln0!v5$C2rZ?`mZKV1PlIIx19g00f+``=QMHXKLo~~apF)2(LnD{4IuUp;&M&{ zNcNOX1kb3X~9Iodf53=+F{J`N0$5I=tw zFbMotU%l{|AMnxUv8M literal 0 HcmV?d00001 diff --git a/tests/parser/test_parser.py b/tests/parser/test_parser.py index 40c46e128..93b8189a4 100644 --- a/tests/parser/test_parser.py +++ b/tests/parser/test_parser.py @@ -185,8 +185,8 @@ def test_spacy_integration(caplog): session = Meta.init('postgres://localhost:5432/' + ATTRIBUTE).Session() - docs_path = 'tests/data/html_simple/' - pdf_path = 'tests/data/pdf_simple/' + docs_path = 'tests/data/html/' + pdf_path = 'tests/data/pdf/' max_docs = 2 doc_preprocessor = HTMLPreprocessor(docs_path, max_docs=max_docs) @@ -204,3 +204,66 @@ def test_spacy_integration(caplog): assert session.query(Document).count() == 2 assert session.query(Phrase).count() == 81 + + +def test_parse_style(caplog): + """Test style tag parsing.""" + caplog.set_level(logging.INFO) + logger = logging.getLogger(__name__) + session = Meta.init('postgres://localhost:5432/' + ATTRIBUTE).Session() + + max_docs = 1 + docs_path = 'tests/data/html_extended/ext_diseases.html' + pdf_path = 'tests/data/pdf_extended/ext_diseases.pdf' + + # Preprocessor for the Docs + preprocessor = HTMLPreprocessor(docs_path, max_docs=max_docs) + + # Grab the document, text tuple from the preprocessor + doc, text = next(preprocessor.generate()) + logger.info(" Text: {}".format(text)) + + # Create an OmniParserUDF + omni_udf = OmniParserUDF( + True, # structural + [], # blacklist, empty so that style is not blacklisted + ["span", "br"], # flatten + '', # flatten delim + True, # lingual + True, # strip + [], # replace + True, # tabular + True, # visual + pdf_path, # pdf path + Spacy()) # lingual parser + + # Grab the phrases parsed by the OmniParser + phrases = list(omni_udf.parse_structure(doc, text)) + + logger.warning("Doc: {}".format(doc)) + for phrase in phrases: + logger.warning(" Phrase: {}".format(phrase.html_attrs)) + + # Phrases for testing + sub_phrases = [ + { + 'index': 7, + 'attr': [ + 'class=col-header', + 'hobbies=work:hard;play:harder', + 'type=phenotype', + 'style=background: #f1f1f1; color: aquamarine; font-size: 18px;' + ] + }, + { + 'index': 10, + 'attr': ['class=row-header', 'style=background: #f1f1f1;'] + }, + { + 'index': 12, + 'attr': ['class=cell', 'style=text-align: center;'] + } + ] + + # Assertions + assert(all(phrases[p['index']].html_attrs == p['attr'] for p in sub_phrases)) \ No newline at end of file From d435623f62ce51130a2b578208860ab76669a435 Mon Sep 17 00:00:00 2001 From: Prabh Date: Wed, 23 May 2018 21:28:06 +0530 Subject: [PATCH 9/9] reverted to original path for test_spacy_integration --- tests/parser/test_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/parser/test_parser.py b/tests/parser/test_parser.py index 4b7a68486..67138808f 100644 --- a/tests/parser/test_parser.py +++ b/tests/parser/test_parser.py @@ -227,8 +227,8 @@ def test_spacy_integration(caplog): session = Meta.init('postgres://localhost:5432/' + ATTRIBUTE).Session() - docs_path = 'tests/data/html/' - pdf_path = 'tests/data/pdf/' + docs_path = 'tests/data/html_simple/' + pdf_path = 'tests/data/pdf_simple/' max_docs = 2 doc_preprocessor = HTMLPreprocessor(docs_path, max_docs=max_docs)