From ceada3454b0fdf3f78276d1700c7561886246136 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Mon, 13 Nov 2023 22:47:53 +0800 Subject: [PATCH 01/15] feature: add clip_similarity_filter --- configs/config_all.yaml | 6 + data_juicer/ops/filter/__init__.py | 14 +- .../ops/filter/clip_similarity_filter.py | 152 ++++++++++++++ data_juicer/utils/constant.py | 4 +- data_juicer/utils/model_utils.py | 21 ++ demos/overview_scan/app.py | 3 +- docs/Operators.md | 5 +- docs/Operators_ZH.md | 4 + tests/ops/data/cat.jpg | Bin 0 -> 173131 bytes .../ops/filter/test_clip_similarity_filter.py | 187 ++++++++++++++++++ 10 files changed, 386 insertions(+), 10 deletions(-) create mode 100644 data_juicer/ops/filter/clip_similarity_filter.py create mode 100644 tests/ops/data/cat.jpg create mode 100644 tests/ops/filter/test_clip_similarity_filter.py diff --git a/configs/config_all.yaml b/configs/config_all.yaml index 708db5c22..0ed0b134f 100644 --- a/configs/config_all.yaml +++ b/configs/config_all.yaml @@ -108,6 +108,12 @@ process: rep_len: 10 # repetition length for char-level n-gram min_ratio: 0.0 # the min ratio of filter range max_ratio: 0.5 # the max ratio of filter range + - clip_similarity_filter: # filter samples according to the similarity between text and images. + hf_clip: # name of used Hugging Face clip + min_ratio: 0.24 # the min similarity of filter range + max_ratio: 1.0 # the max similarity of filter range + reduce_mode: avg # reduce mode when one text corresponds to multiple images in a chunk, must be one of ['avg','max', 'min']. + any_or_all: any # keep this sample when any/all images meet the filter condition - flagged_words_filter: # filter text with the flagged-word ratio larger than a specific max value lang: en # consider flagged words in what language tokenization: false # whether to use model to tokenize documents diff --git a/data_juicer/ops/filter/__init__.py b/data_juicer/ops/filter/__init__.py index c9332eea0..40b1e9327 100644 --- a/data_juicer/ops/filter/__init__.py +++ b/data_juicer/ops/filter/__init__.py @@ -1,8 +1,8 @@ from . import (alphanumeric_filter, average_line_length_filter, - character_repetition_filter, flagged_words_filter, - image_aspect_ratio_filter, language_id_score_filter, - maximum_line_length_filter, perplexity_filter, - special_characters_filter, specified_field_filter, - specified_numeric_field_filter, stopwords_filter, suffix_filter, - text_length_filter, token_num_filter, word_num_filter, - word_repetition_filter) + character_repetition_filter, clip_similarity_filter, + flagged_words_filter, image_aspect_ratio_filter, + language_id_score_filter, maximum_line_length_filter, + perplexity_filter, special_characters_filter, + specified_field_filter, specified_numeric_field_filter, + stopwords_filter, suffix_filter, text_length_filter, + token_num_filter, word_num_filter, word_repetition_filter) diff --git a/data_juicer/ops/filter/clip_similarity_filter.py b/data_juicer/ops/filter/clip_similarity_filter.py new file mode 100644 index 000000000..a62d3b320 --- /dev/null +++ b/data_juicer/ops/filter/clip_similarity_filter.py @@ -0,0 +1,152 @@ +import numpy as np +from jsonargparse.typing import PositiveFloat + +from data_juicer.utils.constant import Fields, StatsKeys +from data_juicer.utils.mm_utils import SpecialTokens, load_image +from data_juicer.utils.model_utils import get_model, prepare_model + +from ..base_op import OPERATORS, Filter +from ..op_fusion import LOADED_IMAGES + + +@OPERATORS.register_module('clip_similarity_filter') +@LOADED_IMAGES.register_module('clip_similarity_filter') +class ClipSimilarityFilter(Filter): + """Filter to keep samples those similarity between image and text + within a specific range.""" + + def __init__(self, + hf_clip='openai/clip-vit-base-patch32', + min_ratio: PositiveFloat = 0.1, + max_ratio: PositiveFloat = 1.0, + any_or_all: str = 'any', + reduce_mode: str = 'avg', + *args, + **kwargs): + """ + Initialization method. + + :param hf_clip: clip model name on huggingface to compute + the similarity between image and text. + :param min_ratio: The min similarity to keep samples. + :param max_ratio: The max similarity to keep samples. + :param any_or_all: keep this sample with 'any' or 'all' strategy of + all images. 'any': keep this sample if any images meet the + condition. 'all': keep this sample only if all images meet the + condition. + :param reduce_mode: reduce mode when one text corresponds to + multiple images in a chunk. + 'avg': Take the average of multiple values + 'max': Take the max of multiple values + 'min': Take the min of multiple values + :param args: extra args + :param kwargs: extra args + """ + super().__init__(*args, **kwargs) + self.image_key = 'images' + self.min_ratio = min_ratio + self.max_ratio = max_ratio + if reduce_mode not in ['avg', 'max', 'min']: + raise ValueError(f'Reduce mode [{reduce_mode}] is not supported. ' + f'Can only be one of ["avg", "max", "min"].') + if any_or_all not in ['any', 'all']: + raise ValueError(f'Keep strategy [{any_or_all}] is not supported. ' + f'Can only be one of ["any", "all"].') + self.any = (any_or_all == 'any') + self.model_key = prepare_model(model_type='hf_clip', model_key=hf_clip) + self.reduce_mode = reduce_mode + + def compute_stats(self, sample, context=False): + # check if it's computed already + if StatsKeys.clip_image_text_similarity in sample[Fields.stats]: + return sample + + # there is no image in this sample + if self.image_key not in sample or not sample[self.image_key]: + sample[Fields.stats][ + StatsKeys.clip_image_text_similarity] = np.array( + [], dtype=np.float64) + return sample + + # load images + loaded_image_keys = sample[self.image_key] + images = {} + for loaded_image_key in loaded_image_keys: + if context and loaded_image_key in sample[Fields.context]: + # load from context + images[loaded_image_key] = sample[ + Fields.context][loaded_image_key] + else: + if loaded_image_key not in images: + # avoid load the same images + image = load_image(loaded_image_key) + images[loaded_image_key] = image + if context: + # store the image data into context + sample[Fields.context][loaded_image_key] = image + + text = sample[self.text_key] + special_token_dict = { + key: value + for key, value in SpecialTokens.__dict__.items() + if not key.startswith('__') + } + offset = 0 + + def remove_special_token(text): + for key, value in special_token_dict.items(): + text = text.replace(value, '') + return text + + similarity = [] + model, processor = get_model(self.model_key) + + for chunk in text.split(SpecialTokens.eoc): + count = chunk.count(SpecialTokens.image) + + # no image or no text + if count == 0 or len(chunk) == 0: + continue + else: + text_chunk = remove_special_token(chunk) + image_chunk = [ + images[image_key] + for image_key in loaded_image_keys[offset:offset + count] + ] + + inputs = processor(text=text_chunk, + images=image_chunk, + return_tensors='pt', + padding=True) + + outputs = model(**inputs) + chunk_logits = outputs.logits_per_text.detach().cpu() / 100.0 + if self.reduce_mode == 'avg': + chunk_similarity = chunk_logits.mean() + elif self.reduce_mode == 'max': + chunk_similarity = chunk_logits.max() + else: + chunk_similarity = chunk_logits.min() + + similarity.append(float(chunk_similarity)) + offset += count + + sample[Fields.stats][StatsKeys.clip_image_text_similarity] = similarity + + return sample + + def process(self, sample): + similarity = sample[Fields.stats][StatsKeys.clip_image_text_similarity] + if len(similarity) <= 0: + return True + + keep_bools = np.array([ + self.min_ratio <= sim_value <= self.max_ratio + for sim_value in similarity + ]) + + # different strategies + if self.any: + return keep_bools.any() + else: + return keep_bools.all() diff --git a/data_juicer/utils/constant.py b/data_juicer/utils/constant.py index b2f3a362f..401d408de 100644 --- a/data_juicer/utils/constant.py +++ b/data_juicer/utils/constant.py @@ -1,6 +1,5 @@ DEFAULT_PREFIX = '__dj__' - class Fields(object): stats = DEFAULT_PREFIX + 'stats__' meta = DEFAULT_PREFIX + 'meta__' @@ -29,6 +28,9 @@ class StatsKeys(object): # image aspect_ratios = 'aspect_ratios' + # multimodal + clip_image_text_similarity = 'clip_image_text_similarity' + class HashKeys(object): hash = DEFAULT_PREFIX + 'hash' diff --git a/data_juicer/utils/model_utils.py b/data_juicer/utils/model_utils.py index 3ac0d7973..e67b416f6 100644 --- a/data_juicer/utils/model_utils.py +++ b/data_juicer/utils/model_utils.py @@ -169,6 +169,21 @@ def prepare_huggingface_tokenizer(tokenizer_name): trust_remote_code=True) return tokenizer +def prepare_huggingface_clip(clip_name): + """ + Prepare and load a clip and processor from HuggingFace. + + :param tokenizer_name: input tokenizer name + :return: a tokenizer instance. + """ + from transformers import CLIPProcessor, CLIPModel + + model = CLIPModel.from_pretrained(clip_name) + processor = CLIPProcessor.from_pretrained(clip_name) + logger.info('Loading clip and processor from HuggingFace...') + + return (model, processor) + def prepare_diversity_model(model_name, lang): """ @@ -222,6 +237,7 @@ def prepare_model(lang='en', model_type='sentencepiece', model_key=None): 'kenlm': ('%s.arpa.bin', prepare_kenlm_model), 'nltk': ('punkt.%s.pickle', prepare_nltk_model), 'huggingface': ('%s', prepare_huggingface_tokenizer), + 'hf_clip': ('%s', prepare_huggingface_clip), 'spacy': ('%s_core_web_md-3.5.0', prepare_diversity_model), } assert model_type in type_to_name.keys( @@ -236,6 +252,11 @@ def prepare_model(lang='en', model_type='sentencepiece', model_key=None): MODEL_ZOO[model_key] = model_func(model_name) elif model_type == 'huggingface': MODEL_ZOO[model_key] = model_func(model_key) + elif model_type == 'hf_clip': + new_model_key = model_type + model_key + if new_model_key not in MODEL_ZOO.keys(): + MODEL_ZOO[new_model_key] = model_func(model_key) + model_key = new_model_key else: MODEL_ZOO[model_key] = model_func(model_name, lang) return model_key diff --git a/demos/overview_scan/app.py b/demos/overview_scan/app.py index 378b8f502..0c9383f0d 100644 --- a/demos/overview_scan/app.py +++ b/demos/overview_scan/app.py @@ -89,7 +89,7 @@ |-----------------------------------|:------:|-------------------------------------------------| | Formatter | 7 | Discovers, loads, and canonicalizes source data | | Mapper | 21 | Edits and transforms samples | -| Filter | 17 | Filters out low-quality samples | +| Filter | 18 | Filters out low-quality samples | | Deduplicator | 3 | Detects and removes duplicate samples | | Selector | 2 | Selects top samples based on ranking | ''' @@ -140,6 +140,7 @@ | alphanumeric_filter | General | en, zh | Keeps samples with alphanumeric ratio within the specified range | | average_line_length_filter | Code | en, zh | Keeps samples with average line length within the specified range | | character_repetition_filter | General | en, zh | Keeps samples with char-level n-gram repetition ratio within the specified range | +| clip_similarity_filter | Multimodal | - | Keeps samples with similarity between text and images within the specified range | | flagged_words_filter | General | en, zh | Keeps samples with flagged-word ratio below the specified threshold | | image_aspect_ratio_filter | Image | - | Keeps samples contains images with aspect ratios within specific range | | language_id_score_filter | General | en, zh | Keeps samples of the specified language, judged by a predicted confidence score | diff --git a/docs/Operators.md b/docs/Operators.md index 78abeb495..6f4b56f23 100644 --- a/docs/Operators.md +++ b/docs/Operators.md @@ -11,7 +11,7 @@ The operators in Data-Juicer are categorized into 5 types. |-----------------------------------|:------:|-------------------------------------------------| | [ Formatter ]( #formatter ) | 7 | Discovers, loads, and canonicalizes source data | | [ Mapper ]( #mapper ) | 21 | Edits and transforms samples | -| [ Filter ]( #filter ) | 17 | Filters out low-quality samples | +| [ Filter ]( #filter ) | 18 | Filters out low-quality samples | | [ Deduplicator ]( #deduplicator ) | 3 | Detects and removes duplicate samples | | [ Selector ]( #selector ) | 2 | Selects top samples based on ranking | @@ -23,6 +23,8 @@ All the specific operators are listed below, each featured with several capabili - LaTeX: specific to LaTeX source files - Code: specific to programming codes - Financial: closely related to financial sector + - Image: specific to image or multimodal + - Multimodal: specific to multimodal * Language Tags - en: English - zh: Chinese @@ -75,6 +77,7 @@ All the specific operators are listed below, each featured with several capabili | alphanumeric_filter | General | en, zh | Keeps samples with alphanumeric ratio within the specified range | | average_line_length_filter | Code | en, zh | Keeps samples with average line length within the specified range | | character_repetition_filter | General | en, zh | Keeps samples with char-level n-gram repetition ratio within the specified range | +| clip_similarity_filter | Multimodal | - | Keeps samples with similarity between text and images within the specified range | | flagged_words_filter | General | en, zh | Keeps samples with flagged-word ratio below the specified threshold | | image_aspect_ratio_filter | Image | - | Keeps samples contains images with aspect ratios within specific range | | language_id_score_filter | General | en, zh | Keeps samples of the specified language, judged by a predicted confidence score | diff --git a/docs/Operators_ZH.md b/docs/Operators_ZH.md index cf3421d94..e59040fd2 100644 --- a/docs/Operators_ZH.md +++ b/docs/Operators_ZH.md @@ -21,6 +21,9 @@ Data-Juicer 中的算子分为以下 5 种类型。 - LaTeX: 专用于 LaTeX 源文件 - Code: 专用于编程代码 - Financial: 与金融领域相关 + - Image: 专用于图像或多模态 + - Multimodal: 专用于多模态 + * Language 标签 - en: 英文 - zh: 中文 @@ -71,6 +74,7 @@ Data-Juicer 中的算子分为以下 5 种类型。 | alphanumeric_filter | General | en, zh | 保留字母数字比例在指定范围内的样本 | | average_line_length_filter | Code | en, zh | 保留平均行长度在指定范围内的样本 | | character_repetition_filter | General | en, zh | 保留 char-level n-gram 重复比率在指定范围内的样本 | +| clip_similarity_filter | Multimodal | - | 保留文本图像相似度在指定范围内的样本 | | flagged_words_filter | General | en, zh | 保留使标记字比率保持在指定阈值以下的样本 | | image_aspect_ratio_filter | Image | - | 保留样本中包含的图片的宽高比在指定范围内的样本 | | language_id_score_filter | General | en, zh | 保留特定语言的样本,通过预测的置信度得分来判断 | diff --git a/tests/ops/data/cat.jpg b/tests/ops/data/cat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e131e8ecdf32c3f751ab0f7b2e5f002683babda2 GIT binary patch literal 173131 zcmb4qRajfk7i|K;-6<}?9SXF#7I!G_g+g(6mm)vhol@MPh2TL81zIRjLJ1JG6n8?< z%m3j%+{Zg-9_D;=X6DR%XJ+rU_Bu~XPwN0;^*3s706-uRp!$3Pp5OpQ06H4l|MGJJ zJ!cGT3=9wm0~ZSm6B{2FA0H1F508M5l$d~!gb)vpn39-;jGTgk0-uPAnv$HFl$?V6 zf1Lo)pWA>ia4;}%$O-TW$p637(;$EZ8@P@Zi4G(IppgL4Nq|qI0D1rbi1GZkK*0Y^ z7-;AqOe}050Oz?{gBXAYL<6B?qGMv9qoZK}@PN^9CsyrU_>IBbfU6;v;WsqKB*IYh+`o;#xh0?^R^pRt~AK^TDN(VlB% zNdQ1}AO|{ zu_<|H&OI#y@SmHZk)V?RWC1(*rV1%(f`l-RT!gHE1y^MhRYzmqUT!|FnG?`Rj$5p4 zg&_bySPa!PA*Hd${!V{t7>~y_P{OYYC^>W+7`Z=+s3FFuG}yH;%+pfHYz59unmFsK zp;uk+JOLQ;ZM`J#92&#O%;S&ue$P9&iT$43TtP8dmjZXu<00xcwH$2Bb_$0u$z+1? z@NhWleDo_Zx1K6SFqcu3UIay+o)pTPVTlFkro+dW!$Q@B){+oefdrLR9i7}>46fDr zRj~#PwCM$fvg%cK<{2|E&ob(i?WK~T-4wdWQ?Y#3qM>{{YXz@IcgdRB+3}EKvSiFx z_wp1bQ%!uq9Mzr!IOGSOU+i|AvBV$Vxn$S%Q`foBDT~`+{QPWhqq66+UjDijMA#L4 zt=&&Eq<;L-_f}ygB@SxMZ(WM<(;0K`sKQgpvDi2bjoyL6kJN0jV@5#wcDmn z8BrpQoBq#QiDYmNh=%OyzaH4W+_^$x((JiLgI#9W=9HM~6{$lDKCufD_?lVULDYBiEZsU!X@qKD0SqFUi{#;;;u~swiif39aW>+ z-vjqrd>k#7ccEe1n%bb)G;XYi**Xx)0n=nG?osCtLg?pb_<=hM6)rVsnRdno4tRCV z=sp0q2<-^zzE(LjRv5iYG~k_)!0|fv;D2qc%dob`@$fEe0ogP)hGH@S5+EPfoI#iP z+Imr>K%(G3M0~6CnGz${aFqPLLnN3URdW3h5m3w}9GblbZpr86ZmuLXY@8M+ zs1Ib>U{Uo^qP`yr?a{_>haNp3-ln$tGAUaN|Kf z5Vv~f84 zNodMLXt#Y#Ed9M`FZhjJ5`|^hOMr97u~rY_5oa&5Zw^S!y_kFC`i9e@BmRxcDl7X) z6$GNAbF-6>Nw3$ORM5e%yIo|tgqJDGnO+)hj0$Z->jGsyxcpMd)Y+-E0UXq+?Cw2= z35u5cOLm-RA)PRxNm7Xp9TU5r0pQzBIhOcD_m@^LorWjH=sHmz^E0IH(&kR^Qpg*UmUMzp>%^OXoYGni-KWxooT5@Hf)>AyK-%2}7MQ zmf?HI?PFJbM$$k2a-6FgBlBL;#U&yE>-2FYTO+%FE)IX|z6Ji`qls@@Su!!-y}KHf z*W?ETy3l0@cw+nOL9|ui7@F$M7LKaAJk?1cyT6l|+lPP$)TSzCdEx49T^H%1Qj4oRw9dDS6+71q>-=4DQ)P4ry~Wz7-^Fs|A2n12+s zA6>^(Yi^x(vG`CHO-37N&-)r-Ed09Y`2$j3&ad5QdACTL4b(PQ^VrGcH`eO5u72Q^ zegZ&W46~UH(3@CQ#JT`$bRo%Z(1>b4XTnggyqZ2tvwjpfTVlL&N&5tV?4?G|Yq|Uo zKJ~0eRTz2u5=gF^PY_o6?7Be_r1=?Od51*PTd^^GFaJdizHt(A(T zC5u>vLQ9#7Yj!Qk$qG;FBPTJD3qdQl7duC(to+r+q@c%nhZvQ*mW}P#xjT@*va*`K z(}U{$YOexHytEKQZep#i;*=fG)(0U_Zh``i#BW>kx(0b8UI^2%+8W$~ped~FU2cZZ zHy3H-g?ZGL#DVpKLZQuQJ$D;HcmH_a;qBE3ZNQ^exaeu4=-?)2Rc<%)S23g=JlUu1 z@(B>C#h$SvbX;s)q7BLy8S+SRAxCIu0)p zJl{mu{#@Fxx1~!pA^L_wl^)&1Y8ZZt2*q2X!*)v08su0k&!jd1=>~Ludo0bnbxU*- zAsBDTzZnT;?|sZp*yrub7aIkBVdyn48(<<`S98^244x0DFJR)F{w5elFud21S0=gk z1dwe8ejy$?`5QZNu13Ik-qA*~5=oFcGSzZ2PajmSR^5*Lj_vzf6v3Mq(lXYb`cbEizGa;aInB1Garq-d=dNhcp3XP7)9rn5F_^oF zlfQV}eXJs)VBn!!<*sV5v63>;(H-Vbo#B62CaZJESr}W#t)Rq4QrGj3XgHuuB*j;Q{=!_c9& zSL>UnK-dM?M3?;1TSy|ASR0O)5wUvWAtj$D@h;WiUrHqnTV=`C3(EDibxuH5gbcK* zd)-}QSJrA@4d<^*rkWuqIvVyxXW8QT?Cr)Hv;5uG&cbB;MZc+k(BbBGt%39U3*SThoLn6$pP(xkm)xkaLJYduVH^dQ9Y+a#WO9CGOtF2o#C^j3IVREk;k3k`-OULj zkD~ef*4ZtD7TmvUZ7S<8+9_bLZ1}YT-1eoVpx^Md9bX4IHS;r}QB@dh(KG`FnnO+= z5t_U*|5!W^T0)I+leV+lO*;U-_2^UXA!Pr89s`-&Gp_#z&%+qmz<&+gkyPTk;=0r~ zK^7~tL?=;bN;D_mivAgDZuT$o)?)mYw*jne!*?Ope~QlJ&swZ_BH626UeQoffZAO4 z?IR>ZJE_qQS~0Y{a`=7U<>qLM3ii~9>irVkXO`M7^AJXF5i`QqLJVFSNr5U zaX+7?pioCsFyg;!%p>TkB+U)g`05&}bARL)JlZ6kFP<%S|0z?J#a&2qg;ED4%jlAz zIM{o6KLN^%GPeKi5OlJ2 zqt88`z`VS))!vJ>6>4{~kr zy?3`?rvHKug#!8@?*&$4cW89OKMx-V{N~P~MT6`I=Nc0|kE+8+~N} zqB_y1nvA{oXI9-7J0DouSE~x6!putY=lt5gL~C&qkEGhYyKiH%lh-1M*{t`YBaq4+ zNoTBv`*6^i>ufsw8#jBb-l;QO`a#*rIH)RgEpDPI1loP6BF$vk=eYFx^TfI{} zf!>fvfL~^RD31_x5%Ksg@PI^F@ZZ&!!ZEuspf7656DraLcS>hoTz94I*B2t6MuxC3~NNo0M3G_nU<4h-)|Y50=qWw zhi->?k12RfGgE?VvFLY;FTNNOT(QejXdZTkv~4nF)~jdyz~8cLmM$YzuP#`vH}ySc zHZCD05XtcTecSjRelQKibvYeNTJp%O`D~cii%6ap{tuplnP1v1Vj7pCf6RN#x6II~ zl8ahcy+PAoRAd51St*8C?_HqqedY464T6>R2S~zHM&CT6&k*x!Fq%w6LLyq`fH(~V zk!1#dJerv&Q@0u~kW<1p;0L-Z`RsOlER*$EJq4>Ir1%ZV_Z*VpYvh9e_~Cu=lL=o# z9HjyXhQI}2vZe^~Ad^+X>H|BE-5KQM%_b|E^gXoBoh4RJ@NjvB!Ul(_4I+6Gk?|ni z1}h(|Xx?Kt{ubuiyBha%q~HpA649vW#p$62c$c2VnR-agnDl^ojWxd;(=Wu@SeuWx zxnqw@Ip%KOG=6sk*-HSuqRb(cBPK5{6XhkQ;_(JB-Jx!a)?=esO0o{c65}%)eT||W zbco-!(xh&sQ=t$@SLx7!Pp*pKD$GN458(W{1-~m-f3D5jFn=3z!UQ?kjx0K{bX<;#$JA+)g0V#}Tqq#GCMTp~3qzO_%x2 zZgApT(Nnxk2pW?839z|)F_cFm+W#mx=7*|P&n(~PU7T;o=kTW5mbD2g1`RPUdCHXi ztkS1#cF^X|Tb}-X)(sk7d znxG2fI`+%NyK1bGw&N!8u3jaQy_gNQ(Ma&^EIOMqQsIlOsx!6Jm;l;N5X9d|vNnnRfB1c0tyTjCZPPgZ{GP++b8~3b*`D zD}A^WUk?C-@T?^5i>)Y#X#WXmKUJOL7CF$Q}x7*x%LHie`j(bshM ztS$OPkds`@3;8_!5Y%w;AcuYJ?C!8@`BKXDPS|6_@{*_DpQM9qF2V$6z7OA;c|6F-?z^6d+d}l8fY16dp3zjvYG|cm=)g8JhM@Zg>U8tBo7+pb!CP_48!dCDtitK%^o_jOr;#2f zA+7<>U<2Frx4c(Ii!#H9_KkcYahH4u$kr?*z|WAl_Ys_F;wLToqs zrLg|VHylXz-f2nH0u2)L3D9C80EirL&gB{W__kuYM`u$^d}ks2B(?IlVjy|-5`{Rf z@y>}y*nr8a%E-#WaZr_h&%?XV{`?0z{I!#?d$8z{)m_gewVa5B?A5@EKxI{zLVs(I+)y6$iss_keqL#FuE{e=lk} zhGqfUEdifL<=568BWiXNV%Tk}(eMkbNqIM?ekI~fEF-=|_4;P=9L?M$ImQMHBvP?l zGrV1U2)hmci8GiR)#Pu%qNYyho6b+fvwRH^KtM}h+1WD~99EK$fY}oW>kTnF;q*iB z%LgKJo8}S4iqg<6i_BtR&7RntJ7H0V3)P+vq@{eYOPRH9RxdPM_p|y)29^#B+96=) z?h!c}NuZJoRa43bvsdQ0^21J#d?3@IXZ#ey`gHraXPTDEm$~*4-f&{^ok&2;j9G;q zA4f!?+vSAGK4%`&tp`+!enaZ@_%Nx2i+R?YeGHTdE&Azg$R>fhp|am@88}tT+r8$q zJC^my6F{nML6ER7z1Y!jTpnYp!8iX${*6B?0^!R4#VF6#El&2sYMx_HQdERYL@pgH zBXQjPA@6g0XFqYO0St@BOcW60pBwc}*ub_9OVW1q?Z1`aJ>Hu~*TtGk}=vSawK-T1^(-2kp1khe*DDsBz zLrZD+3;0GXrS&G_m@Tz(A_+%J?MB=ZWRDWl9qLkE#-4=I$HNFF@1kY;Ql2+-{#M$@ z9^pL}(J?;Dl294pZzCgq;`f6~VS?_tvj&^eUA5$!{ighjSn3@u?(hGGxvO-tMKceS zksl_VU%fwB_?*KTZgoGPaD%zVawG|BRFFRE?s!RYpPN!JJ!lME9>plSWuO^rJKG}9YZpT_zT6m5z_ z8!5*!O3-~2$)CG6WjHf{^R8nKvkx|0&XX6g>UPteHEUkOI>3$sy|{>>8)bp2Z)S4< zQskOHZ;CIioVTIYwW^rbtFM@<_;d+2m~L9CVcm~qmMLejQ!0f*JqqhOdp+_z;YKNN~0&O2Z=YJZp$cA7}_e_y?n!v-0 zkM7`WORmNy?0Ljqs=_%Ty_oY|o{PKvkKy419{~(@Lagl>NjD2hwbX*N)?rO;|1d{j z;U<*dqsZwV4A;;qQPphIb-5Gd-F$6y@SK?%e(T&D;#2cr7Z~g|YO#r&x^^mGDx*HK z(ri09rN`&tVlW0RKKMh3uROAb?R*lAlBPpCPggc_4T;?GP>jB}JC+#PkQdPFl$R#_S(VmxKCn$kFS34=mI_k6xx`YYFBKUxvv#o)Zp?w7sN!iv20Cw zFo*RE3Q^E|$+}w1-q`tdmJ=i%M9hOY*=p!* zDhp&-qg{o*SRI-~d(7t`_rg#cUe^0tOmb>=%f1I}I1G$35Z1*fKsEOFnGMe38flxN z0#gS`fSNeSBMfr2hYH@*BqK2dlW>4?dou~EC6iHQ9#cC}05WTx*e@VYHKSkNMEO9i zLAJ_;D|xP#usdX^Pf8xI5HDNLGNxkFvl=LHg^jE?mZeLWP1|EUfZivvp z@bl~wY|Ou6v3&hgb4v2t82UhPChRcWS)D8KN)*GiCY#e+`FbDj(TZ>n7{O@3YmWZ3 zNQ6F?M1rYT>@eD(r?sv>jl0MBxj^Ra)#yYah5PW_;)J0=dqM8*)NBsiYl5H^Ozhx( z2oGd7sTGMUT(mI(Zb+8CeRirseT%P}4}O^(X@x0p&}(|EgRK_-gd0BrT)Yv$Y@R28 zS7kE&>50wny7Axx$DH6)UWm9Wu9 zKc}OjbJQYIwxj8&lexTjza%(=TPL_G65VArhQ8>03GNFL7v8 z17{B0`QCc(&XB0~&8NP6Nb?<(uT^zggvT?PA_A#urImUDuO$BEgLpVuwpWrbptU>U5f<9sJZH_SWZqFvfO*}94Owky zE=ILEGv9D4nQ-cne4Eh$L`UEx@zX0k^e8k>J(KPQ8M4Qw2{AGB`&%1yZ=>%#%nx*7lBuHf6f8=8Aa}rI~JhCSrj4s$_yN=asDNReB63hD#+DgOeBwFnj`2*Vpx1Snl^E8e z=!|6ICp9ObFUVAML!Jo{fR3`UOL7b((Zgl=FX9B6IF$tc0knc=%^4%oQ5>(^vYP~wcf3^83dV+I$OjwG$8!@Ft=y<~p@O20b`nGw z*fVmU01*!SO=Or2sEW~4vw&`}6+(a)?+HNXxz#eK7ub)(Ue40%JXda!vD5zp_23pQ zls}}r3C!8jCQ~E0QTyZOZhY&O8p-n40G@epZ=fZURhbUyUr07bJapf;QGrI3ykH%q zKPsuMq}2eVc!VjQqUJe?qd>wH6`~VAjP1nOKh3!N%O$#&%6)xfKc77}9H08dLU-hM ztQ9iwuh8H43g{cBCE_~}=9!Rl`1F5jRDFPXvnq0g$iECE#D3FffjD5#PF7$QNi7VV ziajVy>ru-(F1cHx?0Si@^ z$dUAz+wsa0T|=s|^ILM!`wbt)@yQ(D`{M5uBp)k=T1tcu4lvDm48=14GVG{-mlFSV z-rk$=9y)lwEq%(HP~AJ4EzS)$-ek620m)Ztz#L7wW#MWrD=`-fYQW1T3YIqF*z?#}yOYR=uKd(*B zG>5}T3?S7>AI%E1%wkYwQYNKQdM`;l?(H^>N-LY%iyE85@)gD;hxz8@SSI|5WLdNg z?_?M!{f9ZwbEz04Xqt$nll&9e1+RfvD8**t)sud!Ud>Qtbs<)`BZNXjJ!`A6w}1E` zTHcl3e>z1x$c($>$|5EOKF7HfI-QJdM1P*2UAr|s{ z1YJ|l_DI&K{R;&r?R!+b(+m>V@trw3mt`(;(nM|?^}(Ve3Kh|>k7qD2-e0?kW> z%s|bsb=oG?ucntCZ%v3&e%@%}^kR3GESldQpCa|nvc{=lMZ1f~h{`snASz?~eO=(^ zR5iOuXY8iaOr7CgMv{A0W6NB)`8OI;i{S`fUEY1EYIS=R#qtP<@GP+iU_9I}Z(F0cl#_`de3cbxv6zs_ z*S>$O?mMFW6P0$w1MoWU;xV^```+iHcwwBxZv5pn)~wZTbCToey6H1 zstd|F<$c&(AEPmNrH_p@MB3ZFJiLg|^O??a;81h_Lg1?{6Tal3zi9?`7<$im8}MpF zYVZ9|mio+``W)^wf6*6eR0#lg4YG2k{^(4%PRzBjX^=QW#t9fDrbYQ!0a^pS0@5%JFw+9d1;wjxRXA>6rXzq6=?Lt*95xtpJ3;W0Gv`V(ydjD$TRH8%NX6POe@GP8)^D2j9!@9BC~18vaD~)L+L+*dSRrPE zcL)!y`!fo&YjfLCmNv(Rmm$fbAIChU#V>YKGreHLbMAA`K-JaHA(Et(i6|D2I5?R0 z{CxaX4-*expr|{}4L8NtrKOHRJ+HfMnNXAsc9psh9|oGYL>!oUGS2**2|g8pD3#1B z?Pr#_lgns6_+hWr2%s$rx`0A&M#)rD0`%vAHD~OmDTyvCc$89uSdU)(M9J`uKfHZv zq=nAS>d^|NHXackRn3BJ{E~T8WZwhlGe5o^Ts!nBS1R@PcXB@zE)AC=1?+fnn3j=C));|>48|M4LDR!c`oJO_Qco^=fW zDOs@+>V_>?zb;$$mdH6C%WnhSO8q>b7ClRrWMG6$XYg>lj0!K& zdd%I8BW3u*!6&caCJdDS(Ao^ckZS5k+?OdH>)DEuHu63L8-hBfv8^IG+o+b|7h=%e z7|d)~S^Y`3nr6qFJg`_5-4%V4y?gG}Ah8U#SC&Cv0FQGohWR=yv0EV{(3W`;;y)}O&FZ6-CR9Z=XsfHcmsTg64}T8@R^;5hchzYwYAU3 z_-s5-fiNqcn6PJAS%j-5DK=f5Qo!Fz_4E&K-D2FeVW&%v7HzZp`RAHMS)k1U=Ra|& z<#_1T+bf8$=kV%0sZvIWRgyqPpD$7eyei5_5Gm1piJr$_X5nw=xus-#8DA2fx7>`o zwv|pBhh#8+R9Gq$oqf~G4@&Ph#RaG&Ew&+AS|RgIr;IuFmRLvh|HxrZ>cZbT-?OjZ z^SBg+k3qH0Sc62Cg41#^29xKH`|qyuo!hyKylJx*g2J!Ib#aZuAABnWdbEHeRvHrr z3tV;^>X|`lJcxOps6Hk%!Nn8h;RUrUE4(dzUO#g^kh?T=YcFP;FX;C3T_o(~?plQ% z@8VoQTW4v-NG@#rS$0d(G;W^Vxj-gj_^UakFP~r%QFe%ksHt6K;jmIwZXGsw{}Q-7 zZPe1%ktTV5f!Ox~FiuH3ScBPD(1GB;rKE}&YlD#h2#?#v&OvmD&AccgR3+iSw7L+Y z>!#()6V{0;HKF!mlIU44hoc*u7CwS0;id&qSS`=e7Ice+h*nIR#Y@;)vS`kA=OOma z?(RIS=Trz{>foUb#5{n3)pPlif*?)uSfzaTZV!g_LILfJv>>xd)rBt-n3C8g z1G~7m?qoTXEWL!7iG!y*B2$>Nt=8NAr_R#!0+ovmGm#IqXh{Fe@UoEzFU^m{B+ft% z>VEL4(qZWB?!}|EMm}_JeI~`Naq0Z(82k22hdVTy1! zZZ^}H89H<1$|d?tmq6do6W~YotwI(ooopKn*7=7nB>t-}O7yAS2*&+OY+%sVm)1zD z<`PN16bD}WQHzI{;By=kK#{ro`cd4-&4TAor=Frr?$okrWo?Z@G#_^}Gr%>7B_PQ> zz1yf;yhr25AC{gO&~@v}sFPmVxdFq|WBHu0W15U7!1sS!Pk`mI+RpBGo+;o|8Fo%J z3FQ_hs@}FSj*rwnqjQlbM<=wyU-|fxKbs+xtu|LKVukOK2_G)-=bq`#+WpMbvd7$U zxlB3PeG`s2qFBCToTX(VA1KWZ>+ABWDT7pHmG+Y=%!`+bHx-LjO5VDck8y&0y4-=-|Fcr<%S z;{Ql+P8bk#tySOshv6Rnz5Y*tL9|G zx}{J@Vy~GXg}bhZfN6f7`~}kDm#rl}(#~i) zp2VTTZPZDcsE2^l&6{Fm$rMBwX>g3w9{g9EtDKEQ=_HGcamg&%_}^={=ySv-QZG#6 zM#n#k??sDj8i@&(+NJaC=zib}RRC=6!yla5>F#3E@K6656*&m15s0rQCXvgv#Su1O zV>DXp&5f-Mr9#9~STV$Mtv%JMdpJ7(OcOi#)${(0N&b-cGNT^bxsV7A?rl;6W@PF; zr)s73)i|6|iS;*bQyIUr451x<}nV0sP113lu|$ zseZ^5@b@C}WSdz|`A?e#VhpzXoi8cpOril5KWn!`-~;?10i6B!ffpT3#fY1(x*dal`n;)GZb2Cu z0jI-lUrkz`ISn$XC=##sd|TdL_s7J$Q$qf`g)`js2cr~jm`L9wk4u~t+}fxOfcZ=I zp{c3b;?I7S%9v4xFfu!U$;1O%_kgnPTF;mH2LR&;~g7qg(2kwip?a zV>SCO{sicGk^IrL&dV!>Jn{p7O33-jZTNlL=#33%jD%a^jE|>1Mgq+>fU5Q3 znKBJoPyXW1^#k7c1VGiWZc@LK=>4}u=2N?T7wIlNZmmgys(W<+vUhQ5^|aC{X zB-WX++XdMR#VfW<7%^LmUH+Qsly9-X1^Qlj+1)W-@=VmlEy&j`_GdpF{S|FA&fIlM z@Xdjj9OI_(p}dE_ens<D?=j)c0>DmlV@u*k1Gfq)gIrCO?d=^9O z|Mh_E%)OeHdI>2tfs>GwzK6Eas07Wsioh0SAH2xk=25(8>CkcH z0O-|E?C>3Y4%_KiugG^jp&+uoyNCaXd-D%keBC;FlP=#AH^ek}^P6flP1Vd}($i7V zf67WaJtKd=j<$Kdz#9=jjYhK!`1sK3XE<7Lii?wNtwx7D@GyUlx93NDkYjxSXjbcx zFzIVxb*()C@>=(z|NF+p;YMN^o~4p70p?kWTmH6qYX=|(%K4vi;<|NZWYdyW#@O*q zoXqb)c!}Ls=2ou&oK$rsy(_t5E(G8Uc*)G2ouZ8{=kvC?Qor))G@K($$1J%;h4xFI zGJiFAJgiQ2`YozKN>ymScf5&Flyj};gR+6YvwnlKO-kPx{f|w(w6s?s#i601{&Vcw zyrIE&nsdg)?4bXI?)bjY1|2ea3nuoOzdzS}0+7>oM4zt|9nD;JuH`o>dkHtDG?12P zPVVRoPof_OFj(uH>_v`_{*rPdi|1nLZqypY4*;CNY*Fjl!d{$ljbc)n&;$&Oq^mBD zlH-8qoo+$GO2G#~YaMu>=JGbk={x zqWjpt>z-qnwWI-vt4?e*RpQ>0jxJbxGP^^KBDy^+tm$Y5{YCxpvK{xQnL<*+YTegp zZ;+$;o{APz-|i!W85+*|5D zkyu8}8kqv8b=>L^=fT#!Rcs=YiiVSf$;bTmrxld#xhC6qReq#N1$>`UjA+ef|6x+T zU&eCFDQ43WQ{X(w*YD|2r(oc^*9pRY0vN_0?1n)&=%&O+i#cl4XN+dVwN^tL(|7Nc zzfn{~e}H``V3^)mo^m0V`|R)UBGifGevN0FitpTaN9B;78_FK38D=IKF5ukK%|4t0{{VZQ*W^$c~Wq7e%#~9wq>vwVswZwT?>*Ccv?r zt)07Cog1YaKPCr6C;RPN+jVWcPwh8cuX^Lx{A%M1D{>1>th=<#`22HzTz7%@EXM{p z3|Qi!mj?>hxnJkv0}eh8H+*g1s^mRL3ZbZXr>gtOwfA>&uRTe1PqKa-hs|R3S7z1D z-`b?}gzv0wY)0Cd=1!)0Uz6Kt7Q@~uZ*J*vQ@Gpny?M(#)82g`+*KXKUf3z7r)w}Q zitcUPXSWLXu^~RBqsxRc@o!?wdAC1laeLbEG#KlkJZK^3xpMxeVU1^-Y z5ewRWtUfLBurXJ^7aujn>icLBW48SoXdUNV$%rj2q$sJrK~u`~IWsf$E%C#iU5csv zqvas3o6C}m9Y&O+OOf+fhz?0_Nl?PoLXP7P7%;BPe=4KjN-uX&AUcaH#g==Gm|%M!x_CZy?Tu7K=Tm|sj(P-z0-4qQ^ugL+Yi!9vA zJ%>f7tBTk^8s76lU$5WK$FamZVqbdy?CC8SV3QLSvYi{zdQhc1)#`O(t8M8S4J;vz zGjP&{&MC)t=T*yM#mZ+&W8zb7%ue3!?9J<*s zex!+bAodca3cVT^t_PPH@%b35O@H(jt85Y}zn|hth*H(kG}Z(AbPp^wyC@%An+q?h zQp396e5zzj(XJTGVcEV7kN6Um+!fb3#SAm$I@8C#GDSQ33FBxcFmp?H%8$MGEd&C6 zW4w9ASXPcM$6vS!a}CdU>NHy=V9&{O=%SCMcwbu~`fu;HS_?0A{ohUxsy*U1OQ~Z^TAZUjtJ?boCx?VM z3BS!N=rex&>>0|i?gu@&yd1S^B&3Dby|-~HAlIwj=o)S%p^%7bdw4wdG;X2UYVtCg zng2shv&i;F>NP`?QlN&LeKh;O{uU!6IJ#PNh1!S%&}k{=nE|?k?nU;CayJYV)86Qb zt%&WLAY1&?i+Frk?`_*ex!&*nEtiza685}k;|p>PT}GVETns*1WUjVmdU26@Zr3;B z&tcMkEff?zFV`d4(~mK;79wV*>=RyoLMlGSRcrH%WEoXKk@);X zi63QRT)kM36j=5U2alYysRKRtcWl8Qz~T9%W+Y+B{xO?ZR*e+Zenr2F~E*l z0nxJ)0wDl*!kc_1wq6%c*(jy<`;Ch~YNgusVD{PDi%+KNvH}v_ z5x)G-s5d5rY%5%*d`g7(Gk2!C#2yWK_F+TS*Dqx5axoXQw$~x_Rpous-uvlC&DdF> z?PP<8qMHrMcJ(B5ZLXYVlcijcE0%c_q-!r!gBLHRGHO5js6xu%LG$#)uHeyG%UqLd z%dCypvn^NdW&M5-(R4khjPc&I%q-?VrWyAgGXEAF^k(kW5m|=;<{#}V%{&?gqp#;d z6_b0J+a=AG-JIx~c5(pvA!_FLL|tBq;6Z?gs{iu(oXWRe{>Z~;p5r5ukVX@l&?`4H zLtN$RXvWVt>EQIaHbF@5%`E<19xP0yTjzCGx2sfGtEp_=< z-0R;3p3V?m+g}%Mx@LW}O-{Ycd>%(a*(XL#7ah-OE33^_2M>G=DZYeVf4P_>(#*^?eDTqls7g zBI&Q#nWfus|9`3DuiUF$hf8((R4@}QaSROJ9;V=yJd*z(0E$3$zd@)2@as}+>;kUQ z#h{X4jv+Cu4l!8a6YjPut{TX4=<>QL>nW;o{JJ>IqCe&}RY!P1(HOW02%S?_`eS!D zCc>kwEZoU^pm6ovIe8}%MGm#uS^oJS7*S_6FwIP6qH$3SK}!mFkSUT)DlSkv1Y6k1 z+N>;WZnDw4M76Fo8-@dndZc~Q*e4U|=CPhU>|JXm6mXTIk3gw41H~#ut-JYZCa_a8 zfg_MFp;TXy!fipb0pJrkXSp)Z$Kk>?uO*CS8A4=vq?yEUEI`Ed6rIkZw96xRal7); zL`nz*-^X)e+adDyTnB;aj;Na@j;Pm?DVNc%T}UL&V2xB${qj*E0kzCQQKy+@kMREh zsPqER(>@l*Nr4@cEh|%9dv8;zGgx4frmwq}7R*2Pv86x#LmZ+&>~40tyQ-a!!)>`W z_BVhSk-uHZRT}m*5s^}}elUF2nkoutySho|iRz?A2U7)Qgee@#1p$8uD(rSqh1uAV zX?TpkxshH;mX^Vw2#&tt6wPyrGWjeHgOZQ4I;=Uru ztYx`j$1WX3M@1HnHjKXN&rfevv*zO~OuAZhL73!ls*1xil@+Y4#6(#NNEruAr!bJ2f(_VNnyCv8V$(B zU8c<3zAG5OnEiEKWI#7T*F6L?i{Yisa_Ro;(2WZQm=ZuFj-DVS3wv55c^VQFUf>BH z;Z!-iu(UK#kT-tu=8Q-Z0-|R;XEhozo}nqIj1K;KIoW!g9h zxeaIU$X_!NrS9$>aJO4dqtZx{p5^lsx$>hZ3Z>aNeVA@Q>xx)Qy!ZIm7`#^ ziW+Z>Y7EXfaZVtXkUW(G?E_tr({L9M<@C|dG?G#))EyyINYVqKovd2Kw_Op~0nF*P z)C;X;X{u}8QgCqu6Rl#XJ&<;n4L1)*L0DFv2+3BGKu>lob+x&c(m8S#Tw_|;xv%hw zYg~7&Et=W4F1c%bW5(2+MUggNmc+{K7N{a%JQfH;Tl(4AK)%34z<$lepg&EFA9IYYs!wo$$Q%cfR zF#cwMNWVJ+$k=|kIFW)-c?N|M$+&khtPw17%JR&&3m1yX=6;=jJV0nFz}l^tDB`wC zPQ~)vtAixXvpmwR>a12ctg*yTLR*@@CrdEuQ?NLj4V4ft*oJ{ zbXcTFZ?}CJQo{QZFt=HZmk+309MpLDf>mLvE&74B6l}r8S!dMV+(MHV5iNjVRC#V~ zh`GI5XVjaRg(58RB(Mw$f)1ADx9^rB2v*y-we$r`hP4P9G?B~8`)!CYu31|)JUa4H zW2jv!PNv(ZUAcK-a0UwFEd)ubuF^m>Aq!;$ZhwEf;e@X>V`k9MVHV+PW1~5n;nJ$R zTdnrCInICr*7`+}{{Z%vjsw)I-c6O6C?UEH(RCK*<}kPb#QJ>Tz0S$A&4Wy2j0zM@ zM54Bnasd|oKX>VgEFzh$f3_MhqLS1KSOI2bvg~=2*Z0&6aA_h=y#D}6-)s{BJh^Z> zZl=I;a9Vh%gK_)qJsmrrYn#o?CB!-^)J~g=_5GYd z1*YyLal3mImx&xO0D?#@tMKj1VTK*%wAb-0v>F7|l;}Zn1-BMew@#n0?%0u=h^pr` zvCTB}$*W*&J|Ye8^}A6Lg+wE?}C4>rkT-Rw4nty?@VN-#!f^FO|iNmGjYA2n(t7^S3*7 z`ET{dVoOl{ph9KnKrW$qo@v)_(`VZA2g!+UKeAzgz)mI4Cw@)d{b; z#w4*D7QVCc-rrkd3z~ZCst>bTsPC63w!j-)wT|2S{{XfH(i}uW17bR+Uo9JyQL*yA z+^|)NAtl>50K$yQIw0M;tw zoNZobU3jYh02c6!L9-f?%@q`CHMO>42qd4Cx9N=GYXV>R_1`m~o=5-#LagIT2To+4Jv_JB)-PcWv^ak8fuovDv^Bu7D=6)Ig)%$>*#**7w=IYYuOpa5oZAMt8Jnz ztt_n%;}Ej!wsLJ)=8SPgdv)#0BJ9V6^IXR@su57pMI}{HiM)N%=>Zr0Ztjt&>dv_H zR`!=g=#!A%emAd0V#4nL>#ghXi?!}I%)4UkFNnC$IRZS(I;?uRAwmkmr)c6+{V0J@ zdMNY4+Dk-CtrM|>jS8lmta3L}M~38i;IAP608D1S{t$0vx%WR@b@eAVBggehiedgt&Y5d{deID!9gh(u=?Y#1t06a zC44AYfp!Xfx5r*kEDTh_`V6*unvUiOo_Tp_jSDd+U@SV4K=(K>WhKomFuT*T9u(nD z#&WtEc{4p+MV3(1*Jn`EwTPFv)X@{nvgrx|*+#1il1dAj9@%Yq#-&S1b4YHrqNtsy zcI8#XS=2MqLSu$%pS`4VHnQ?*R@C=4*z)8x4Y^@Xvo5^hPX7K;o zRWjxoEg#=xjhq&iUCM%W7k07U!@{Fs&y~&U85V9cgyOBXFWup%w~ zsSn?TbH-lX`mBB7?+;UQZGDh#H^4EkX(8smoH6xLXx0Y!O$Rm8nVwcVK$?0AyuDv4 zrHU$5q=e{>c$z};N2GLiSdgA&b#LXkz->*}1FXFx1wrTSg6$6a;;Xg2lG5>)2hz(; z98u-#G?kSI7feh$!XOM6cLq4+aD(D$BOHQ}Wt%Gqxt@k~)+(U4h#*g=s>1m9vMwO1 z%CjgTgw)E~vr3NO{{TLwR=SFGzWTN68ji{mz%w1IosrFl6VU4(3CCzKT711}xfkrK zuv(1kAbPy&l*3C!q6p!QfqK_bBg#d-1bO2~lY5knP1Q&9EZA9x8`rSc9bl?G{v`vn z9?jcIqw6XbawV_@5LPLe>q&|gezJJ)(V*_ zAwewLx;tmuI;A6FV{M0B`2oFqR(K0WIZx;-O|%8V_8e88wuP1)f%CB-Y6OuZrG`z(e(W)S z^);+XJhZv$0d0tFqea|v%7VpIk=?pEH~sx7r!%e z()h7(mYcq6pnYRnD@m#2DoSd|E6YzLMN$ak)n%7Y;7e}T-sf+O8x5^o*-Jw)jyj%7 z*tPLQ_NO&1_~vLU247hcv`l5FmKepsk%<-{ZWIlzxg^+IQ6ep@-s5{Q-(HFAwQZdM zuCPbAJBybt?FybbSxnT?_jYinL+IT}8w+0BY&BZ@Vy&QclLOifcw^mKZKe0Y@>1ra z$n#z>H1)70Lxp6uLHJ88?=6qS!HbmykQiRuV#TB0%P{OK&};iDMZ*685Comt#aJ^A z!14^*infqMAgwCOvVr1=F;-`B%-Y~u;`h_-a?aET2{*fbrB;1|EeX5v*=3*pjI)jd z%vA*nR%K9*?Q1lWt#Wj!09#kW#O?tr(%5Tl1B9~nhqiLWWvXLmfmC z)%PW1J<|9#wt=hRCzXc$$Rif)&C@3zJ{pBZ=P0j|=H4x-q#3O9$D%fo`^A(4DI(l~ zKP|}f^TSOlP!b)2r>2_heF4Xw{0I2d>Mp2fr%V{4?$%#$+0i<;D{rO@=nKU?a_+I;Fvma@MZU}b&&-0HpmtGl*j`Ctde>tDkIwoJv^T?n z1ACiZ{#&1x{czD{V!gkMt`+y)-&U^>ZNWFNK77wT{{VdY%iPDbq~A*xf;~ zyAm(tcm3`3aI=V-@gJ`wBvvqAQ{}VPS~^%{sB2k7NX*3CbOX~2v)HZQ0?m`e1BYx< ztt}g7Dr1=g)mZZW$hgBi7o*{f&Qv>V`?*y&->tm8x5k4$leN57%#N||?6PhCudrB8 z-M46tBAu15F8eC>jhV-`L-$n!f4x+qTKuoi*XikpkD}WH4s&{$^jKEk<=;lJ{{Z*W zI0CGhXV{mGt3dn3Zc|1Y<4efQZGRvI&Aoc!(E2r>{o3{f{485v^RK2e@N1pXSn~e> zu$^@1tyjhLQK7OhrGU3xw=K@+^TWr{wpPPS++&1%teao{pjh3TEu5aA6RZ0X}7-?V!GpZ#) z_E_xBEV?|&xSGDUib%wwq8D8O4eUb!*2iIo52fslkSvc^dO%d|Kl+8XvA_#9iQOk$ z(MdkbotIIFo>{X=R(TQyEjx`;9m0S&w)ZEH!T$iEvot}m2dTr^A>Zd;QGKV|ZQ10P zFWJMgDtY2bDeL5BN0cADNL#y4iI@%4c>~VlY&2{(AjjBmojmHQfBNI5e|UbLm%?4M?5+fTmh|~t-}4WugZYliG@oN`&h-BP{xYNizyAQO zKF7}feQ+ma*xg524>ZsJ09k!l2o4>B7n%Kxcm(&29Ch(A8!)S4I&aU@0_}@qi2Fcy zPjC6B)aS(qqUJxe4`7vDkVPJAMNuVoMAB$>bNt8&_(32GgZ1AYW9nNQc5{Bno49L# zMen|i{zl)a54UVCyjGcoiY{Ocf|Kvg*17%s@rOBNy^C$Zh{b$n*BX{9Yul(N(0ZH< z&1W=a;sHjg?ud1{<>lU9^_G#f-iYPn0r@NITRRDr67RO`i zN9Tx=90px{hd#?V{YKmpNh?h3+M|d270Tqu=`w0+T1ubhHFRnG`DVE{k&gD>$~FLP z)RK1lb6sXEfr#iQdCpGqyjR!$n``y966YFVGVHGTu5nAmxk@rREnHTT2X2H|?tQ+N z9zzt_Z0k2n!OUwl@-L;^+x;JJ7IuOGFmXmQywK)3CSIyRu4i`C%e9X+vE{!*j@lew zY8u}E0LAv}7Pbq98prs9@zoTyJOw2@VSCET^~+t@?5yo$zf-m=mc670J}Vg?Gc)9! z{{Wb2aK~I19OZmXMHTRa}MkzWYQ=+HVj?!ufqm{{RKcCNow(y=Jbr#4cETLLf>2JUYyzTxmE+cie}> zZr2s5vNeMf`u=+KT;zdOCr}n1!=L%bRv{R%6EUrG zN)(_d7uDo8#D(8z5dx_XMkCd#%fB)0Zg`PdgbuI`tCWndhwF2y)uqenCakM{#Bd=j zK;}=D-=-U9XK8Fm2U%Mp3yTo>&9#t#9M(8RVHjAn3Iew@!;uZ=PEyL-3k3nklj z%nVHQ_*Bj#;VjFA=M?#!43u(TV&cO6Y?e> zhQ-pkuQM(yeBlnjvmC+<^E0akk@9MJB$vD*;G}A?Q=;{EGN)6`N%+>|XJG3>Y`0fG z?y8(^n8!~2%S_3>&sEfUeA$j$RQ=>4HFlOm-LZIqb|7;)_Xn<v7I*?$X?NVn=;1*&3$2f{tgKsQfcX7tiB^QXLBSfS z;(AIb<&Pm%%IM^wSyEfs;X)cQENih3rMw)1h}50N+-=A$ZR~5V2wPy{FA+Qt&*E7n zH7#vzEHUNs(?=YU8Jocrk^vMEk<5squ-kIX-AOpEcGd=yh#R?47_fCWC>$?clW_M7 z*VH9btt~_Mbk9@aXo7}Sn5fxG#Tq@WeNvzRv9>vu%!2;_SnM~bHZWo!4R2YMe;IJ* zb(a4C2?khFx@Dam<miDY42fW>bz5jz+|=obRd@bclFjR(x!B=G)vpAwQAh-mN&ahsqEY4F z!l`n(WQbaZos5%PKzEWy029=JTO`jOgsMJO5px7uc6MPfhs$? zI8rn+4Tho_m|trH;<-G4CvLSZEEv#4^VhO{@<5EW*ShF<;7&8jog_!C6rJ3xts^Ls zHg$PG^LNq}oQtSs0>;2uv9tx3YDQJx&p;}6mzrc#^s+wHI3}kx%)f|)gj0&q-KZBy zs$2$|R~(ziDypb9-9_wOv3^`fgnaV;s(|4qTH>W;IbBT`2+x?Aw-ZoMOGxT}hpWS1ROrhWdJ$C4XuisL1`hQrb^v|i)jd-81ZzuPZdQoUWypZ zaw|K7G^DX-chX4=&-ia~%bn~Fv70d18sepvhRxM0syi~xqvEa(j;@guJmf2}T`cwm znVQ=GE=`5^Zn&vpZ9GaAeV;d!HmvOxHwkEr-pGpwem1)du^QpSbY2ORCs zmZQt3uIFnka5dkl6RHFN0AbkvyuH;@zl1nrKZRt5omFb%XJUync)qF7ox-e^-;x&Hu@*L!_z{oBHdo2*>Ql~1av61CRqci(HDrW8z~0u-Er zqq@xD1v|uZrIdBR92SPfY4+{gxY25m(ckIi>LYHsFl*UPZGF1E=BgJkRNdxIh~6 zRlc0a*mjqH{O8aub1sG$vbs%4W)UsyHX^`(et+?Y7P91J%U)~gHVtU9U>ky%jS?u? zY!~8D`uzHTj6-F_4f_78V&L%vrD*(3-RlG5RU4nDKi{@E8pyzKj=F>dj6$$*M+9d* zq45nqO_9>IRczx}XKN&C2)vBng+Q^tKbf{P_AQdvYk6yE(NawQ>$qpRWc^R-dq2{w z4$-u_8atDa0}@XK)EqtbIpKVYju|+cGoLi7e-Cp5cM%iJg#*OH-0jZ89;VM>*w`+y zh0&RxOow`}gZ)eY0H~W=-TwgWwqcFRWS-b93xazQ?9N&*z2zJ`MN<+;VKoyekh3YV z+?~k9)Bga05Wv&G4~bqz-~6NM`%3|Jxd7xSteKIa;W;Cx%J_LClf1D?T6G#D3#p_h zqK;ehJcb<4xoL~wYMl5lJ8kt1qSnwh(e6D@olyM0i!+?lh^sQ{N+?c>S!P2Tn?&G+ zMQ<~G`R`$aeS=!i=ewU(pJ#0ATl3K_KjYa(U&S0nEE=fNiur97V_r&$!dqJfzLX?# z0`}$05?N;VGRddJO-RUm`X#pA?Xz>lCBx;WYe zm<2{_UzY4tfOfGL=Z0+-Y}sv^Mir(qH>R=QduNwA3D=rGNx*s5RI=w#$||cWB?`2# zf?}qPOADxOOnfWk1^S!ee{#jngHAijNNu%^kqyL^YoXvl#aucdt24!!3GwGlG*}}%u!Dyd2j7MF`S$lcInY-z;9Sx7uwi#id$Y0U+WD7#+uWRW{w4&cfW; z-VVA*1bb=}sion%YV%yt(=|xYrl6p04EEBxk0QX0x!8|9GWE5~pqTakDut|VrQiB0 zD9$)@ESlm7q7|Ls?@|-0Q62S=HzW%mew@ZR!qwmjoGClhv+b7<$Ok@)+=D#Ir_BEV zhUN6j46PU57{US4q>wd{a2sQ_@3uP8mXR*NAhCNM4bTKv`^8zl=roo9f#qSgD-&2& zW*P*jm3ewRFR(ikuspwgFhTWQBM_nHbnMX*06LU4@ATgsNJQ5hy%#tAtulqL>|cx! zp>FDhsuYqoWFg14Pz*aR(GuLkHa?q=rBVshkx>A6@+R#J0=+oN2E_cAr_ZWQm?j zR^bi-uHkMVXldw`(SGPW%$Xo?m znmgK`Z1ugP@YYdDm}S)GiL%Ovo;uR}qC;hbT=<-@LhO1*dcFyce0YqHI{Rb1l7g40 zxtBl7>T+2jYSd(?n(pl&H+!4vC)W6}6M|zc4UvMpfRY8s1CS&4&j}{0e#*ENGB}z= zx|^PNBbS-PEA4F56*M4?RZk`j3i{P7Y2O$`%*ScnECh3(H`r|FK0ly?Bcdnn~vYLus^MtS9Bjx+}4iyHxcR=Kta zG`PT2t)AO3VRl~wc6UYD{{Rm~MGQ>R5~8Z5A}rMs^CbEW>^cF+_4gKA7_zerXcL`x zW^ktHUJ~DEb)(Irf#1k*(JIpKPYfsmxN_lJy-gr^K{xd_<>}KF9BXJDQO22lPElNmXGYNBegH4N{H^3Xt!yBMmwmSh4$C>sF|&8>S-TDV z@H^#jzY=BjTrI@ejz>BdsiU2sCgSV|Bl8wNJb5ciFSlr0xoZuwn0cl#4vpAzM(DSz02O;3 zz)%Uk*H`JzgPy<~Clksy=jNXT5KLsSSvb>1Xp8fuGr!{?#0nTgi&*yqq{ksK?G6>9q$WMDPN-B@#;E~D z8x|1~MjN>6JXUM18sl1b&{-5RQ}Inb9F#Qb`K4Bsg%H`C%D^KkEwA0ij^Jz*6&JCv ztM_5>3<2%W*&Bp|6)Jn>6j@eVRXqA$I!9yYgIC<%KqMl5yIAxsD{n@6KSbh)-vpE)BY)CES#@D@tdqU<*fT`W@y*Z@2 z^2^G7B^TmO%cRR@qN5X1q*XKNNokJ35dyQ^+=N{-Z`4H1(|8Uf7dE{$o=M<=PP(cq z*%uzP6V^kR21sisYIN`80YqSfZ8zNbjhB_xxA5;sfwPl$*Pf*ETnTxYsq$N25b%aw z#S@IirdW<%B$MuRu=A1?S27Slwy89g)Ikc3BUqkq=H|rs^ERf2w1$art#@?wRv5rx zt`V(dwB9PoXsLJ>x=MJSS!$Ja7~>z!lE5i{^s1<`{{Y%7Meds)xo+RNYhPW_CJYK? zTm*$`(#j0$TbDa_allmB#Z^UTaV;extc=nU%~2wNY%VN9pNDH-NjCu79XIU*B4f%p zXXKC?VxwJGJ@%naYxvSyJid~sBvJ??fZM)c4S+;nhW7I(%%No+N|9p9cz6dV3oZ#tLiA zQFy0=DtM!atLIvjmTcOmOGGXaAx*7&+>3xcNIdKS>sx!GZrAtMo(c;Z;z`ej9*W;j z!t^{pl+aQOT9Z*=+eX#^62Nme>#+C2SWAWS&`v!#>JZv6G#~D}t3_T*M=_=DVoFC? z!?bqhSZr7hLga1FU_8myWvMLyW$V9&xGeid2r=*45lokdVXStLLeB&#q2(#!(s`R& z!H+(J-rHYe1KdEwP}GkTTy4|m0ZGLv$y?k49 z#fDk3?6zu#_;@WKd(*1Nv%mfw95XnYM9pgG<#Jq|K&)eKK#jWd!J5|}FO;IoJf&81 zU$917!jK%ok3E{ODuTWGg;gY65_$Cpmn(VVAK{8n=1dRTx3ap<$@j!ldBsq3Zpt`| zhG|}Usu@ixMkHBGX6+a|H=>*0dtc>m>&)WTPOs2hf_T-Z5D6B5s`zdyAaxTa!v)V8s&v=2| zg-nPGBoVfVlmq5OkIL67Pr@Vn_vP1)^hWn~gK zlT+*!&xSZdH_B>ryvvK~;;d@cSg5ICW@VtITWZxOHg|GZ*m*6;0~T8E2(w|6B$`uz z90v2feE$IJ8)nC~IDfBab%1Wf@dL}vT=+s$U6Dg5%8pMGmRfp7K&M5>4X35~`R{iWg5NU#c^ZcZ-P*;t*N+CDEy znKj`YFycu|vvsTX$aLI~WgEAi4&qKe;Cz;sfn|u*Qb#_OrK}La46mRG8%@I%vw?m^ ziQd*Rv%QRUr`~ip#Z1gDb(npt9b_e=a?z;rD%xHPq=)#7G_q1GsVz*mXw;P`AJ|k*KxK(M^(j?vSpcskoR>teLX-cpqB7E z3twh81F0hn7Ncf2SqF|a;EApKtz)g|==0o+Pr>;Nb&yLvJSy>jGAP}@mZVr}3wv#0 zxx&T0rPCSr?wCVM!^y5G2@efrS+lamNey&_#?m)1cDh{h8;gPFFOGGkv#i9EbrWtE zkUuXq4=LiDfYsB{&_%nq!P;5d56)@LO_^)K`(aucN`Ott z^cUOH6#*G01GzCe-5FT(TXXXmm{JWvP-@jgR_34qe=c_1;E9@)VuC>GxeM*L+IClv zc72)fg$&D>aZY~`q=JH*`LZNt+TE3T4LbqUk+rXkox5pktj&uKIIZud**v^BiVa}6 zpR>HHFW_wEl9xQ;y0@-Y1;oHCq%a3hi{RUDF@BiyM-l`tTweePoo`*MH)Z)h9Prql zdYXzlXwu@AmQLkKHXr~xau(GD|IM6x1xk1fsgYHoW1Nw;5~BE`RShh@}xQZ&UnZE#hX{W2xfVo(Gs9EMdE$As$N0GdEQx>7;+9Do`QA)pRH#P!j)yE zjwwtvkl2X``C_%ZTWluDveSs6o>3#8E$ZEwy680bK{(4U&p0C{ej?!5 zhGQKwvCOj8B!++?kdy=Q0E6D+%;6S$JP>T?M_D6z>rYfWMYZ5Bfm}82slBT98^hhR zb|wD+t!XJuIjVqW30D@Bmr*3D-^)`HN1-Q{Hk*3w_c{+nk8Syp3x%i6GaTDGpC`<` zd_$K10P^~|b!t~+KN!CD#)yAuG*$W4OVd3v8j3g)qG{CWMb&*M3H&O6*lb(Ge6Ut+ z4I6?NmlFgk9W22aLzc6PsZ_oR%{Yarvh6}{Jk=P6OPjFMaeXB1Y$4N_UYgCosqhWK z2bTNT5IS@9z(@jtXjzG_N?dUQn<&$3TyyfjuRqTnGf=KIvM3XwF2Hlz`bj%{yzvnf zDbdw@A|q9Z3u0{Frr$5FI0#*KCtixd*(N}Ei?!|!%fAG${SKz#(HR}-SmkRT?Aqq`Jieb?d&Y)D(s9T1zJ6^ko4ImLRz;Ol zRT@f)*o{&$s6y8$%ngA*)v?>k_pre_fEa_XWUsyp?%tET(N#FIuO{JYnO=C$ecjpT zR6Ylh>Y@8(n=L-eslGk+3!Zpuu;lGWx9NC>S!vsc<;|R znX0K;o?1My9zzt+J%@P|Is~ToI#e^wb~ioRaxY_l?YPT^IM*JTb5t*pQ8dn))+kD5abMG1kLpTRs7Aj@m2 z^2%{h3~|$CFuIM5(m7{H+T4~nT)Pc|=ux;J(=9fDIw&gC6VoK6H6m7>tz-e8{Kn0+hy_(S>^gkqp3O=tv;%TJi=&c zsM?m6ntF1vRn#j31p+yWAP>Y^M2Bk)PG+zG0cF}W+Ff8EPIdisM#FKkBUKvav%{XvUH!yWPf?{nC&*Y_y^S#USpi>vKhm-G+CaQwHTq77 zq={-0C+_O14ds!%EQ$ri&m{m6WgMKtR5U-s>GNrjwLLk$nRZcQ zd)Raw@nOzu+5<#({rYuK_Lfwd`Rk0&C7xAwnwxH5*7rLKF^m+iyLv4i9Ci zeSSJLM}rypu67YJ~kRmEMVRPknJixycNn&JD=3#@`PU3%?n4_od=&DyQL;4B8Y z@*Cnhp|N1TUPcNZ`!DRCuB$7DFrb;f^(WO{A=v8QC_GLuo$5!O{V5?oAfc{h!%xw+qRe=B<8!-HN1BU-Ie?Cp*K!l!n(!}-r? z`2|K#6Hw()PX?K4DWfvWppZ(a*bS@+>3y)fD^|MBBV9AzRh^sfSlS0!yA5UMZym6ihvAKM(%9BTM0KT9)a{mBqFieKUI^*2HNO-&quhCw> zX~aE?a71WhRa~+#z}#+26Ti7XOnd#H{{ZM@WH96x<6rWD{{Z!^sFVKyXW3pe2_}vQ zYIt5yELZ?F5qbiNVGi0EliIRC?zm7#)od=*odE1?^`#V6u zVX|w>no0250_Rh9{c%y~IIe=5ibVujXn`wBm8)A9kRs|NfxV9QA6?El_D?o~&2{=m)B0_I!) z0JPUxjAM@OikI0(Wtrz^5pkwzUH2~fxndL)G@*=e#|%Y7Fg&iuQ3J@5Zg#h~?RI-p z*cx+^Pqw)!*{t8Q?8S~17L;T+oF*`kg^W{wtOy!DY`)2C@xdOynj`~RH>b2S#sxW z^E|6gt{{Lj6Bu2=Vu_?*%$=~?H*EGmHO6Qp;U_qmARZ`wsOvqd+`D6K)=eiIF{MAf zRGi0x6{wLj9we4DXk&(^LQz^kj2lQN-~`_GweD|xb9S3H&@(z$;}x20%ibKqNe~r# zh&ZpZz8S5GyEo!m6_N%lkxN^x6^-t6Uvs(M-Efy}&S1G9c2`@mTE5fn2AT5n*HxTn z-)+9ccrIzDq|6estKlt40dj0_q%rC9wkbdAO)ZB#T(kO4&`s;NdaUD#zxbeV^)Y40 zxJxk1Uu`C434beE{+Op}w!s0RXxaTC-~RF4mPf_E{7CyxtfrbwtA%N@h(l@bB&U)_ zTk^f_zsnWhw%Wx6dF!IG-=$c#q?MS_eV~5O-MMG5v%?ViD4-^HHmvO5F&J7ryw8EbROwBn9B%m;Z}p3V!b3g7)WwHx%^ zk27tCz^2yOjc?m&JWN!TeU^6wifg46OYLvj4HQ{iyjhaaRo7=K>H|XDm#G7g0_WG) z8BcSCrRacjKM9vZo5XTd-oblQelVe@$m?Qgj3HvuvJ&$Xu@~5dwyUu__>Yz>U3KQo zK{$MVkTb*K1x@X5hBGb^&eJl;c!be~a?(@G{{YAr0D{EWTa|$5Pg@)%_dgLZH+lns zUH0R}72#cL1kY!^w`Cd5Sx>`!OPa?~n6hYz>CU4o8<%S?!H+%8!sP5PhKjVbf`49J ze9!?DIC1hvvrO)vvuZeKvPfz(m`&w+SWkFS2Fj(m+?$J@X7(EZVXknrKWu_E8pNR{ zl%}{V7YgQlWyF)z=9ScwWO;c*{{XaGE2tJAo%vqk*1yui*V=o57Ke-pjrdnIw>%R9 zy5g<$+)Gmp63v%IO_|2gw|%V&OQ2tI(T@9^?({a>zZSv@Gn=J*>aNY4Zj4CK^MgUCtzgXXoUzGh{!Nm6Bx{ntaOE{meVNr$ z#2KrW8Zk)xmO)_bPpaSPez?&rEqS#ck@D}ER2^x3tz(SiUI!#&woVa`g+9$(MMIK* z?IQb>l?V|xRbwQQ2-l&~+j$d$wsYJ_W+z9#C0WEY0_?TLeniij(|`I)6}eq9_qpCu zd&DwSV=a|3sZdV1MAmBB>x>z7pxuBC|66HBo zAysJ3`J@diRbZ28UpfwVupE~6+x%mMRu?#4z^!}ial@lG?f(ERl&zM6g0{NsMV8U`VXRKpGGlY; zOb*%ujzFJpb>qIa;b&mr;fm@!pN6tJ&Na$WIHs&1uR|0CLP?lQ<9_I~c-S?IwY*wX z@&u9X+yQ9&f;HZYLi1Hu%@LotYDFOLaLk}zrmJf< zZ{Ng$`HmE0nfk+wy!{5s<=VS9q0 z?R;2tTFXhTO%mAna4|!#;>38fvtz^EoW6fZ9hWbwB6?uIfm-_B+wZGZkzzp|HpMYy zOJUlb)$%IE`jQrTOF@|CS%oAptkOp$aL!&)q3>gJ%foFpwYI;@8J5oj@e$XL0#(}r zTrXxbS4`%TvagM@`C}p@Q9u#mXSwhqy90gz;6NY0TZP>60C`&oZJp>3sUr!V`@Fd; z&zmp|O=oxMQTX$Ut1>$N8CM&@OB}K(NuOJHy1TySpT3dx20zs(lINN3$R1diS%|-SE7!aj!6MGn z5=Aw|TWPq_vRtL!u9fQ|3?3wrg6v6cHvW)GT#@*R+>vHAtpvf4am*om!C;JMhsW`I z!r8qAZ8adwLL;-uRRujQ%~eqcN=AbF$s@aiCd#3Wt>7zK@NNfQ?mw8^t*+L-=wS|Na52&+x1X@0 zkS>uKRcX9Ez-F$mG8 zKjcPq9BYY8YveXDKI+rLG;r}IT}zlrSp_D2m`VI%R#YtT%T`R05pGKyPVS%`$#3cw zZ`{6N)F(ed9(bl)nvHtvHK_2;MNbZ8oacSp(B(OKr^>S0IMcqUXkZJeP<4@?zz_Aw zBY9zl&L-r;K*A<-fqmin>?#A6uQ|pgA zblJY?H%yvEcw#)FYelfz%@dN)YFVl2twf#aQ@m<6_b2K5IKIoI64Nxxe(L&fG;FeMyxF%LVAI~b6fB?Zk4Z;IEj3ped*)aH zYu?&OzS|GqN^UmxVjEs21aKd@LjM4#mYKR|h+8*jUucdP;ykd1uSizpBzmmge77W! zK4kg~O`FRkxIy0?zlw#f#^#q3MSGizBH}t#rKGM%wGu)bHjq4rLT_uG_r-&?F~Br~ zuD`U8vj*_4xT~ZU1BLirsZ3*a9A0K}JvJ1w^7gO`ryGgrn8Lk%A3_^ zfERatk+_PRiMuAIphgC_Cza^riHOt&qUe1ttS#(EOnWO^VQXh+Y|}yn^8zcZ*X3{X zf2X@=`n{#G6tsdVjz_ZCYbi=o&aj6`ii;LDH|j6b%jR&P=^}7nGPk{Sfr=Bud2N1K z1fw&o6?Ih=FDk4nb%9UA5Wg@0__>mB>sK++_QU`?@kz2jYyj+aM8=3T%xgCl?+EP2|Euw8#aenNNJupr9R1)jt@Ab9FK-_eBrZ+9*&N&RG^Y+1&|d0 zkS+kY0AHQ9#5-xVb3WUQjZrXIG`zWuB%TFVGY-}}GT_RIr;~`Xsv3r{l1OD%ciP|+ za(+VCOYN--fAlotlC@>9TZ8`qotdt=tka7A-o20T{{Va?&yHYFfFh@{4Pkrwj8p#r zYQ>_D9f?{j`bN@C;{#r6DB_R)D?A%QrE+c`tIQ<)CQB-gcR!XYziqQ0jGrZ8zeY8` zXtEwC{{Z5##ns*7WV}B|My+tIAuM{^Z(JeUeEtpd{X)HG^sSk(dQXzbxS#Fu+b0z( zD(5dn8(+go9*cbaHy`5_j@fIGj*9C(pI`;nSggxD?Ps*EEG4rZAkFG7EomoUH}t=k z_QD-)X!1!iR*NslWAY4Arr&p9+&2bUP8b8(i|+&gTznZq4C_uvLo~7h-UyWIP$e z6!etRaP=f5LacKi79C*TAj-O04KX& z7UbXe=Zay(fahb!cR`AO+zbE_uVtNQA7=cwF3u}+5vvnDQAdkrVwY-NjQHO@A4130G{#(op6 zEJz+9PM*8fPP^@AN5wf*^jVw)SA<~nGPadx78-5HE&6#5d*hxhomR&E;(7V-Ld%Zu zfFX0=W}Tsq3hiGreCWpnbut;0(nd5AcL1C6w;{`yrY}e~1PbfZvdwgT%HXzq*R~!6 z;<+TE;telEt|XRe*nwhiVZP+tUfXVY+X-tN2yu$<9}xi?;$@@wt=*e;F~B+34%N*^ zrWj@eRPZ(CaK`=Ie8?9f=g!>}<3`D$z%}*d@sJ#G$y9U)Wv)m^d6xDc+67iv)r4jJ z!OTTEm2(2e7(}`1Z*3#Zu1MX8vEOXVgpsJj@T?{m5OBkCUzeR;Q@XX*h(-SDNLyRZs}e97p*w zN2m~vcIjbZxhI*nE56F*US#@w>jZ5TyN6U)idvqcMa?OmNOMl}xs@RoNi_nXk~;6T ziMJtp;~vrNdAb3q&OD>P1*E}+)2(q@9|iHmyh)Q%*5(FUI_gPK_IH~>I5j=(9O{a!E_JH`W6Jxe9=OXkzyL(^8b0b>W=SB> zdoRhJ!E%(JwOTyAXs=OKp3&trF{+kSjpTVHRhb=v8^t4 zIdWXboyiqVWOT7rs^z&I8d5_#iwUK+rX&4D*z@ILZ+u;7Et=wdl~ONLAd}g2kwc!x zBnTOhDHrhqdf&^JuOag%Ran`q%glwnRraA6aF-JZ-|B#QF$S)~1|@pfmGH4&`tW04tUD4-To<$hkj+W=q~3twm19zZeQ z)(}ccH%QmTZ98cIkOjXkUo0<~UZTpxwY-$%hUAlD%oQG-xBBC!{#CZK8A*{eh9q4s zHc%`)#lN;D1VV=jWecT$_Z_EISQvB}KyAovtFWBOaIN!XEM| zKs%q-3+BJ%)|XnwjQ$Vlb$12OW^(buNjC&j(GlM)*{F$7Qzn1}XvK@O$iyv{)==7r z8)Md6hYDVi%zS%yUo+X>=Qx{2!W)?<6aN6}_?nYD%O|2q6xGWlx}UfOwTO`h>}(WV zfCb69#5@AXZ6{u6_H$}2$#Ic7!***m&+?|ss&nZoiDk_7M;kM462VW(_O-m%9%t%% zP-E#p1a{S9g5TLTL1``~rwU>00<`u4#I<}m!;};>@v(ve>l#gFCKbMw9-5lu0n*&@ zh4LSwNhGpH&8tyn0W}XJt-fx@o-Q`j7YfYlRasV> zIcNlrbti`SZz|6CONjD%hSfCnHB!~c{x1_pvw45?#fO;(7Q^J0^7B<~7#i?K5uxm} z4m#i}o*Jl%uAY?|n=#BIQ68Ip-Yq(Gvwjc&U`guj=X_P#tl}*!#YR5y)6}gUmF;s) znKjn4RoCFu0_l=sV4hh3$tyVsV<6Tg=v@RO|_|D z4WCpmwywx(IHM`d^XgcpR23B=S_>@75>#;@HnyUQs-O!fDgY-|E)9rto4KlY6Lx!5 z!Q47>oW@xzD$C1Pm`NfQ5mQDg86Z7b)krKhB(n8jF;dy231O#Nb>qvLu*@rp4?h9c z@b-L>W)k-kO_WCSvPxCq6G{@6ls%4?vDYJkWzxW0F6kC-WLgX}#y3HyrYWv_i%6AL z%lO8(GO5c^kWWzcWo5(B=Fa641O z7}l3m*AO|+UMk&;+LLHT7=Hr0a7?KatP#c*ngX=wk&O}DS-Z4eVHH+8lguiuyhI9? za@LFDCzf~!;ybGjv%LOw{i~I0O&<@{)k*}?k{T$@?Z3ha^}eJ2kbkQV1{(K@({}7L z-j2zjxuf=*;mICIg7=0;PG;S0%>KXejOznKVS|ky}b>_(#9){(SJZ z+JR}|5v|+$(FLWL0;=7Tv8fW;QpUkTo_F&jrZp_XOZs3b4=PWrZ{zsNVC$qMjlp&mFD^whNL<}w*LSSXM5oLIEj+{n0O9SwP>GyHv)PQDH9iz3b0srxj|q}Vjo0S$<; z(wmLF@#lnyXxEqNY;DA|={D})>=Zr-r0%;ROADIJ*^|uds=E)F#g_m`1m?27fn^^; z5sRLEg6a06hB#4CED>~zfyixh^ymKoIJ_e98tKJ-jvzo39n&n4meN58YzVmD^ZDTd zM8Np3S)!N`B{uOyQ&0=HEx8lR*Qf7nK_)~GpDa>d#*nN$2gkX$W*Pa-@;aZpyMmKb zx?VYw`ztS9`rmA8?E7J`1&xB-#QJdt{@eoPhVmT(bWF5w~PR2XAVu{{S(Aw4N&=tN4>Not*0b0IJFX zKDWhtOM7=4wvImErLxcQZKc8hj)-XNS2eDERh2ao7ToueFeG1|{{WToR`H-XttNkn zS`jWf=B3ki3N8yP0d8%!{H#Fbzw3@7TQF7IKk)lGldg!BKVfi3U{PC6%XQ{S{@eXe zmK5Q1iCQ*);+8GQC)2U&NF6*NhBp?sA_(REzL=O31WzbVALEuRG6IngXEbogmtPP% zLXmr4$aTG~zh9mvXAq42Cug&%`C69(eV6k-C`K)oecG9d_jM8|*psl+ef{?2PAm%- zI7E(eK7JRL`li#eY;Cz_W!#rZ_E*>!5_W%E91lG`MqI=Nx?P3F;DOJt(QxZFo6ucN z)$+<$&n@=PxMj<6&GHP}Dak5pDF`-3a;!HN_UX10YC~Cgn(MD+NLm6#=Ft!A^NnaY z(mA22R5QYWFe`5C-{HCIweXg?q!QZY%Q)Vw+F7efe)CBe+@Tx( zWZ*3Tdu6!sLuNrTRVuTM8!gS2nxZy^W_5+5VS8MQ8~u0mzWAqSd=d8rPVPNE6}K_3 zZQ)&ZSZ8Zi;Z7zaEo4f1@n-?K+#8Z_u?GJDL*z~}oo9B@%>uF5daKq?E@&iIhQ3z~ zcHc)nSH{%~QBNOo@+)`ofC5~2Ks@?>Ub|>)z}%^>u*(ITw2~b$$M6%}cr8kz3CKQ9@`*$oSH#3WYuzWdZ6ZXw$%1e1_yHvg|H4xsqN-;z{T4zj9ds9|`lP zk~_oMzIT~%QJ}2JVa^vpjH?o1bxwyT<03<*$JSSetD8O#|e^u8d z%CfEyr_7<@%(g7cJ(dMgJd)_#z09*WBvQ?AHzvSz0~SNCG_}1+!>3Pta7rP~#)@Pe zwq;b=bLD(-l+$Gl7^+UR@7+2k!Gk#2cen?{Zb`NU&jK%3x0bxrw&-nhRUXhgNS7wf zp|8s7>N9=}mN7ApFO*)H>^rqD%Vjqv_7}fQX4*+}g!Iej_Ow{+g;ufIPaeno0E0T$ zPgxP1u{xvFNYbnQM*H8$4!Fl{u-R>Ku74G%&E|P6w$R*9bc=Q&QpKu2@zXzX^$8Fm`%7@RfS+^ec^--4Rd3I5g%#BZ0 zYNBMCONx0Q0Z=N9>|XA?#TPPM#0Vdrpx8^Z6C9xKMdG^69**Lm$T$h_r$ybqASHwGv zo(W7ej8FdntVq|n2k}`&*zy+x%;MmY6N;|Z-WC3)xHg&SGg>(#)@3rrq^lbeSPNUI z-`5Lqnic8xEsd-LdeAttGECQqGbV}5l(JSlif^-p3W|C3RK5QI)^MV87%x>}vbH7F zLsFS;x^B1L-bViWf4&tYRctcMH(G@JNUC=nypG*3?QO9*Ox0OyV<;Rx zNgHzd1NHXDep5*ajgV>Ric@f&Yg@ zYVqL^yCdue+3i+UlJ=1D)S7y_rlF-1(|l1`CS#?#8#gh^_s6IDU6`@6CBqYkA^Tq; z{{S?pb?BH&8i3$Crrv%V;jOs)!f7w#k#K+aTmvOALHf{iMRVRt0l z+Z$Gf&eVq4it--I=9X>y4JOg_;<5fUgM!UXK5>xdRXK%CEn>zfqnxBMNXWrm&|2X} zq61hCU>jcw+V-24Zgs1CL!6$NN#d+*J1YyXSZC2?x&D1Sv6+pQo+Nj3w{k%QpKEd+ zxcRQrZu?nlj(Hi59aqq-tiIS8P;SLoI6FU@o}VVr6<9|w1x>Xp6K|kkx9Ca6F|@R^ z0ptkdJi1RsbhN#o4SXv;eMB>;zV9561q3j{qaPv5y zf)rZW3qVG{Xr}|^)LB;*W-?DaqAJB!ia3ps_d!7x=nAghhZ|N7ZSz1RL4!V&1G!i> z%`I#Xe=Wm!nKmw{uW$#ZFFWc$r@xyRq4Gd8VSSO!z>ScB5!{{Tp{ zZ%yFZNaKot2>_K-tI6{0!!e|(Y9myyRIaGen@aji$jyFZTLy13NWF-}hrPhaukYK_ z1Wo`D4!$}n#~F4C<2vrVV)j8eAyq#G82tj`12C4R-$ zc5V(d)>$kEiTJKA2;!{r47Rzm3M`@Co*JpkiH$=7RtU>8jV9!lB~`D_U{As@rXRCx7$|ec zzI&079Mbrm+CRmrR%G*W2WmO3YRmjPC#RMgYJU9LX`zlaxNGfojTTu6xKkigsfb)! z+H702?H7#$KpOSnF+|V*0B5lPj}>Q$^3QVF_! zn}>3F7O^CQi#E-(yvDTPB>wZ`CnAN7fL#1Z)i-=A-E*Z)H+2&K0PV-ate+cs{#^ZV zPj%rf!0wMJR;<}}rxevJ4G>sk3c#LVTh|G*5FiYAD-s&nnAdesY0^w605z`(w^x%($8gG)1de+gLygGLBns zzW)HPrZYaJX?4GEghX%VebvpH&8_hfJr>j1l=4BtaI}l4Hz2#|+Sc^O57XM_RMx$_ z{PtI^h%Uog+!YVCzA2=r%#Ad%v{F+qc;vX!px)ktuIK#YTWPX);!kAotrVtcJjMg}qGI8U4{0kgb`AsD0Wza)7C zG#R7}W)X*qJZEJsgJTw3#Qw%*;TbTBU$!PSM zyly})2s>)%dSSt^A{ApIZz)xAMO2}h#Z>a@f5s3*_&`o!x`XFDJ(p&brV5xNYIg9r zW%!Bd>(d<9xue3G9%OG^_1ah1ud{9L%u9B*k;gt zj=ffukJRn#jFTfN`5E(EU)y&9XFq2iD59aOsgp9v^9YO6G=jv1HZi$30jzIx(Cy0_ zq3*L_epqhw{x5m-->rShlZINSqQH3g{ok_s6%VDRsGaw?zUsF=cDLn^JwRJZ>(Og{ zblv(k=_g$j{s)C6?Bj$#fOuYBQqovUEne%58to>y8Anrkd=7 z>;f@N)MSu?KnHQBNjsD4>*w!F}IdAQ+~AZLkK`<+#8Q;L<4( z$6nHp?X={+2vseiRH@Whoq^lw{`bT z&g9^(J=GtsT9xNE@2J^q%q8Rnp=JL7WPV!^u9$<-j%HwW)Sb#&TzQWK~tIs69Q(spdm&-lLz_4q+~{2Qnr< zORbH=K}B5cwkc9SFtxEt(#8V{{XZwweByPfm2%X&UnRDrw10umBgQD z&JfLV$*MBU%DE@1rI<7~wy7djw%u$GGJ5PeVC)>g@&-BcRJMkbSm~);-%(Ud{qO-L z-&p8;_Vvb!&Qh`mr(D1qnR}RA6W(-F*KWI93~|9o#cREvHd&HqRQatAXk(I4BWTt1 zmogKnRNBA=vXTL@K44%;$OSHdBxJSjH~T|H!&y{NWpGmpx`zJ%+#<(tv5TsxzT`HZ zeA>gM?*x~V(v$<1>UZ9y#1Ru!NZ?K&?JJGzBCW{jVWyM4){;#p^3}qT-svXIZkrGe z`;&0?*^@BuG=e~)+44+-J>p0kBkdO^T<<56e((5%0I+Ekc!sTwhl;^RP0uVepA6(X z?z;20xe)R+k5lJrLrwHKtur?hfg(&v^LOM7auBX z%^jutBV@VdMNb)h_VoF5FPKS8En!hi4}_kY*2Lcb00<(&_!sQNS(~P{r|kF1J(kRC zgRMN5EN~@!)ip_^vD>mxF+^uVpcRe=6iyJ4kp`wxN-6GoF$hel3p7DPi&Ds`g zMq#E*yDOuFM-3>j-ut%P$*}rui#J1Y#O8}-W3BB00-C`|%BdchhC;f4_=WC1d*N=C z?zVdv5wCS&%d*MqNmyW#Mi#gL+kRL2;4T+Q16ty}1&xU_bQ2quriZiI+1XlRkkT}o zM1TX}zU)UYUzqmAhV0j|FtqHpSCJ$@R@|Sn3MeWf6`|^ki*e%EAMeZZKG?d;CbiQO z*Wwn9mc?caILfu2-*>-?S7Ll}?mP+<>~DV2?KXgq3}v5DmjREG`3}>y z*z7i8yFr`Aoi$aMcHP3Xd@aND)U>qJIaDy!w60(Tywcd+or$|`wax4{9$3cu%gEUa znq*RulG*&s zvp;X{*@=zA4jeeb`gNPd;>>ld6|03QqEQ_i%wAdzaYfz>cuT*E!uqxWa>$;@YuIf~Eu6+$=DhvB&LmvMHHyFHjZdCb(N{8ebF@~CqdGv2HBqF0 zq{;~Y0L0<8qrw0=s_b!ShYfN~p)aE?3 z^aHlC&KBc#Q0p*2l2LkYB95+>N_x2vrAY4pBf^YY{Q7_b1OE81HoLb=g-@m!O!b9S z?1UU~t{)0~S*1jbVOGc7KI}U+}x~LsX0(}Bs7XIs8>Kfy!D)yFSS;-jpMtH^=Ma+^)rUjlqyTGhK zMw&@H1&>`i3kClGO5YZm_=0H~=&DJR80%e?D~mG>vVwfg7&TJ0`|CR z+ctKCYQs2WF^o0pf!jOZ0InMC0x9GEF)c2U24OOadUzbNLX6Cm(4R6Pi@hLP!9!l= z!oB9W$;LSM?xoa?`u1HF_Hmw;iuw|CF2#~{NPHqI=4 z^60>Ko$?m-gKx6vTW(X9R#EXZc|~Pftv*{CEl`AarK%N+G)hnXNjuk*Q8&DVlm7rs z7Xn4+eXC1I8Nm}g=D#^73#1E137#=bKZ{7}{%wo>maHOzn;0G#|c7Qa)e zu5E_ibL}Of8fiEZGo+s8r7*YtMPtcp=AXZb0$2qW+m-!su*UddCFM?`rLzL|w!n15 zSwkB2OE`X!kgKHX{{W0yZE;nNVP@QYS4#nOCf*ajJ9GW~@p{Y&gsHr5zRy#3LY(XcG-`jEJzA|>Z54~wQXOFjdqSo2$Tw6iiOyQ5T-d{(R z!5q{z4y0;r0`^g;0kO9B>437?t~52`K-L~>V0|Ld=I~hu9OwCmXnaFHVLN@&o>^5!1K&tHe4(?N6jeq5=U@n{7U(V+K_B{spCo)NmQ;ABn`em60RGMMM znIkJ@dF^dHYanEfH}Gl)kq4ixy>O$l*|nwsle_2DWm|m}ufb@XFZQ0|ZVifp48tZ` z*N;}J>UO&#n}7lyZEm;UpIkw*dm9aO&pdjS<@T?lJ(vnEqwIg}36t^N1sz*vsZTio zJsU`-L?Ynp_1Nvp6{O4>A6{RjthZ)_8>xvZ;<-TgPyyR}A3eHbjZFuZwTg-wlPmAMCn8G{ zbucG!``>>oOPU%fhP5k*Y}I`7p#?$E0VLdQ^!K(pOF;s=tFM*N36zsGdh8q4-ecv` z_y~A_49+_FUEw&U<*ALXG-}%XzL*z7s^Nwdp4uu4fKlblDZpY_SR0jJ#BM+yT>k(} zb?O&9$QspEN7}QJi~>_l z)pi$Txn&;@Qms8y$t1Q43oexlzaiu~k8_Pz6Bm6yUW?%W08{##w(C;qhVEN_Txpc5 z#L-BDk`@xtkv-)|MT=hFL+kJ7fh`YwkrCUHWr31Ldep5ef@x}D%Hn2-%BZE855z6K zfb_8#H?^!YI@aY5wR7A=Q0ubuj_7jkE8%MVz1*_T8B$2Gg!}p8t+2e(!-^&n*SAzy zZ)G)=+$~o56+{=629&B(;V2Hva+s=D>x{d8Y}`SMfwrKV?B)yw1OaIGwUC$lbj0y4aYI^6?3-VvsdwXD!79!%l1P9%5xWw8V|-a_uL+q{ z+%A}fQE1&1F$5{xADJK6;M61eEg7yzgcEmDl2AN^Dyv&<{-*smC#DIZ0imkXV&G02 z%QF7};@m}^G}1>BI@1+4sU&GZVdC9JyL4RvtX{xN#c3y6ltrWo->q(1cLrw1I;9hE zof^Q=2w)LPme%ElrBi-`yVO9iRj}r5Ch;=!iPUC;7(Rh&+*jJ#@E;G?)Mj;2%Cv$? zcwqy=`lA*_>xa2^U*L;BW^8`Xj^KF~YgUB=xic47RceDUw>6KoGkuU@R&J z;Z?HObSKQ?HqeW3e(PpD`b|0&yJrLc0LC@yfpIodN10?*QSmf!QWPYmQVTjN-^F3b zivzdkfZ45n%kB{q%n{0HLM^7qIhT!2wF?*FjycG)Y@<2hEdKztIXHWVGbtJxxS~+C zGr&9|H-EsbYdKzPbv6Xw(K6D+LtG4Q-4b49P3u$~!l!tiJ8( zGn8f)TUlD)zt0CG;F+`iGS<=3=B)!F?9RMNPSYa5k04(Sj`sKb{qP3O&Z_rYAJMHC zTOu{B>rBYIH>9Adj!7c>!UZI}hkaJq@3H>?Znwk!%WTb8vatGfotXrQ=C8RvLmpVN zDn_x1q`IoDj=+9E?_AL?V#DB89vOI~I* zy@-38p9lwTrGV&hmTXw!<1q%6kv;RmC2LvRL_(XE<+XBV3p7FIqK*hFBY6()0bbL&@O0Dl>hC0FSEG%r3zJNzmKYFCh4tniGdx!V~G~zBN%P6UVNV5qfq>4Eb=0;nc zRz5`u^0B`{F|GD|P5Xq5r_}r`%Uf`4>6d=%OYHvuglY2J@{1^{ku=35(g_h-%p(#g zI*1zoDR6uCC&I#yI=SEUgThKmzKZiw|AR&oiqYXKk=I zgaZ&Kt$isg(`?QkY)-vBl`gBac^f*Vp$yt1aT}y$mMTSn^t)Jnafl|aZgDu!bsmQr ztJfP=fRRPpvn5N^$2$Gmchu!gj{12YD=1Od;yrM~v|0y4UA)r`$wtD@G=%Mn3JQK%4R7s5;-1+e&#Q8( zscQ>m)D;ZP6W-5p-Kw8-zWl3bCueNCZ!&=x>$NNHNeWg||Qe{C!QmreM zYliNaZpPph48)%@K{gu{+CJ5+yz@gr{U6RNtiu2Spn0tGwVpbuso}UI;r5h8PYpdV zO~S0CfS{9a5odWz9<6(LMlEc%4kN{n4^bPxrHhf!tdMlo$INN{_oWaH;NsI*&V03czV75j&HS+gA1?@=hI zdJ1z1a>ZbVSvQhGN08VX+}h)IB-pb*a@1OikzLg}@s9LOaRH+t=NpFQa>$^kf~3?% zFlf_bHNh4DfuwQ(006ax?grPm7YAD2VVTZMboZio4s&3RD^<#vEj&r0#HcI}KX2cu z#?6P|0mW6csi8yyX`C&Ewza&yF`yYhl1&%YlWB~yk#WlZ0P*{_Cg=r2K{Q;;_Kf3c za*at5meY2#G}HBf{%gKbPk*XT$1!2-Zz4=$5|=?iU*5r(zB z7KQ=1R8J3w&fK^8_4(fhU3v_H2H_``GOXRmYr2vn33j*ykXrpV=6UQk`Qmr9nKagQ zTpC2L1SrZRjc=@Mtza#_=iG0JBQi6I&yt(Fmxhf~Nw{{>RD*G2<$vESHOw)1jIpo1 zB`gW13Jp$49Z1onXaeTLnD_nuScbHWq#aLO(w}6~DuHGkJK>sGZwX)rc^=PiExH?9 z+W0cSL_9|t5w43PXxJ?6fsj4b^RYhIv#!c>h+xegt2N1_ChYQRngeUxe^=MYZ;E!C zIX07IK0N{QUPo{G58ZEv71+EV+m2VpyfSl)oSK+B?(4b<;|>n@@*}PJVA|HX#8!*J z?OPSCgYJ+p)KzJGJD-jsK&8YirsM|ka_Q;nIpT-ga|9TUAH8I#f-8Q#6>qd$qa(}W ztFNmN7Va8DEkXDe$5XKmHTcw4pJ+|s`>&1v~;wo#nc7^(Nv3SnC)QTP(qfEKs(;5Yox=PXi0QFeuclBUP zoB7+z1@;=|0TWZZ(~l)0$)J&+4>Wx^QVEul7!hJbm`5tw7A(9A z+ep_TJd?i>im;~%P}XLM>jDT2UJi;`zgs9>{Z1S9*-}M!ev}(mfm4Eu9|=<}CTUP8 zzxNF6@Gg)np+Jp(cGdp?mJ?}U-?kb+laEvF!5FqT#F{1(v)T!1a_G%IuKGxpcfE>% zyW7Yeh5rE5dYn)C)@9{{NXMS!F18`A$cz)!-JRv~X0+(E+9{((l2ID$?&K=2{S+%7 z{Dv3)yIu)!6yFuhpJf8w(K?_(hi7!PmDO=Bx^-6&#HzQs8?$`LAaw9zzxtMUZx+<< zFhCw&>A!G@Akhp?2d6nDZf3Fr5icw-ivX|-g}MzAW8y4^Zs#tk z3Xkxz#G$oVZVBbg`B)rgn-=2JhNgXSU!V5hs6T16FLns!7iB%5WTH9WGFqu`V*wgL zZ&EF=1K)l8@hz|*_#a+c^I2}%0VENxC2q?rIH!W56;;&I)YFg}Xwhu(o7md@HXGs{ zW?Dgzt=MJ>9h~vx+UjYazIj)`QMp)uN$dMKXd&an zU3HGBmZ7A`F})t+8ak}r2rB3UK(nri(ocnlp51wG%N1W_TyB#?j)LY|HKM+nrzMnS zIeh#*o}~5fXx3#yR9&9-z0JR1bH`YImg*TDNps zI0}#fo_$vz6w_XRrO4HM2Q^g;v-e>HN**`}02U#%20L=IU+3;_hvZdPS%X$< z;ZrJTtGG`$aaj%IjJnv14McMuT@U_vwO}HBeT`Puf)DW?3Oci4a%tDi3ZE#)6jqK5l&Z{lgi93$E zplx-pm5kPAx&HuZS?wh})fE|?bg$h&l0Ek)*Yh|q+=6BmD^t$?&$$l;WU@(}@r^v0 z;>F$!x`b*auWwVJ9&c+Mt%Uv7xz|}yJAy;)o_R`JAg9h9rVyVW@%$ z*xX-rB%9jft`})w%RxH#PO`QvAWucuTou~T?N@>;gqeJiW&$FFv?sbPW8qdd)omv1 zNb9)8dpj3d5Xe4QaHO84YnQe5MC;jdS8F^A4Jye~9pk7hB$msvA$uy@p}8damS5@K z`$!@VJXH%TF=$IYlUysp&?ns5DD^s!TUV;{z4qO{XWJ7_%jp{j)0t)%S}GQcMUul0 zd34tqT}R88Pd)GS=ZAoE*Cp&M_GY$KhKd?!)k|n~j@Ds*g4=qHhy0unAVp($OnEIv z*?<8#D+MdYSr=OTdb~_;@9lo3-Eh!g%wfcIS`Dofzv56UDkPV4U^ltm!sL68&jLt- z4j9b}VQ`pV9N;7(f4j)a<5Xu&u5Vy0dLQkM2EID_{P~sF{mtn7Qk+1k7E$PAkw{J5B$w=OR22eK;B#;sM8LnQPO%M{KjWF@7Hx!1k-1Qk)x-)=)5 zYwBJ-rSL)4?0d{Fru{zEmb)V@8VDS99_v7tf}x9pGaS}|Y|t@C^E+Tpf_bpG}-rO$8=fPm|Ns#9^6BcaI|Yb*+Fl3WmpEtVdj5 zAO1?54Lc;;7X}N4NsinV@v_MBeCH?4WtKTADC(+$t+cZ%!edzo+S|(3{{Xm=($-yQ z0JK0$zb=`s22Z*Etk4bb2-mVql#n({F(CzRSe@ce9ALAks9g~IkcE$^Q{{^9+HV(Y zF6qp%GeNCNnO~Dlm(ns&BS%j)JAoXHsoqfzf(`u6Ut@wA*ha+UrV716gN@~the99k{)(AzLXzp*005tS$Ku8`zV3EzRwLWr_Qe22;DXe9%791=XHZ_GiSE z8SK>2&hnv=5|}OfwNi-8R_A2^zvwr{ldSBT%c8TM0&<)_VN-3htsYvA<=J$+L0$JK zA`d#wDjl1`lGRHlgp7HJk#)0fegHQk6qv`ggg6RKIB(Ar)j7=o##-<4svKRynlm~o z3Mt?CYC|mRD%l!IUsN%ZZa|hsJnX9}7t?ck&F1yzRM1wqW3EcGfg=y^bThHe56tT` z3Z{~YO%TeYG_?#ggB8h>yIXjfn@!kXazMStFWNMM9BIi=8rNmBakpo+Ik#riSp@)! zlCLq%>FBCWJbI*Nn99Vd>EVq<`H<;$P{gcRKI0tg!;UqaHvn^l4rp=1vKPbsidXPI z5-mnsJP}V&VyDY1Dy)0Dcw|_XL>q1Vwq-W68B5rOKu>DBX6A>UMBq;RXA{L9&t&H{ z*Ox%{J;O_sW_iO)B)Oh#JnYFPi=`qn5Vi-LtO_b8H3YL8v*4KNw{+!WvBd-t!5s`tf0GiE7$jVfqh@2biHX|Sr29y1#vBep zoAEOzsD*aQ$;~&7UB3@Mg<;EuK9n)qC1wl|d|O-Oqn769+ZDyT93{E($BD^VEPLo{ z3h9(ovK=;HFS}agpYe@52N6ONts5dyHmYyD1k|IaJ;m{{9vi_W%>k?2-mxiYWN>w9 zQ@4=w!rE&IO=)qe{P^wrjE-%@b&(^mRGE}6_auAlZSuvdQY3C1*Sz{x&2fO{vKkmQ zOfM$43<+f<>b;nNK6d5jg|;xwds`+e1uO{*Bw$^Dwyu{Wm$j^Zn6)q<(_E&jL97)D zY;oxes0haVhWxG9nA?}n3}_B$zI^M3d!tf_0fKZQI_qocPzw@nId$8wr(8=SAh*+1 z-nt_sgrsz3(#zriJ&%Z+?moBo-x3>mn#2vpDUlzfHFgQ~N#qF>Xr}%HZT9ou=V68x z2ATphsKj#1lIW9Ij%iIybe&+7BwX_#avOgAaBj0@)8P^$zh5!tR~E>s_)s+HZL3o5 z6*_Hy$YIW~H^hjY&^26;Ig%+rR(KYb@)Km&1O()b3&;Py9!Q%AQ2k+uCU!)t6jSAONF zc3Jk9&bVHj(s4x#<^etm%2E;9`|c0Y_^SPp#lW&i<*y()73B7x@yEQ)nSV;bjKl0uErEH`Q&FS$8KFA>p8gfMcz4pW&3xrT+kr4UzYs zQadXE$x^IINRf9=Ap#ataJC%%SdpvdF}PrOqn@}gtWmN8`h2bySelksr>0KrsvZ9T z`f(cpx%^gAZPV18O~=TQho40`LZ3plF=i0Q8)`=^U1jEtYuNA3!9}mkf#+s4NWupS z4t@A8aU?560jZKnVss3VD2zHijn9aS^dM;;Uo3PBvOlrs>XP6nXB9Rmsw-$jtq6^n zu^MlCn*zho571&uLtqUAvvrOlQ&o~pL0cSs$vTRb0CGWd^*jFnz63f+&{Eciwn5kF z38~{Gig$uaSsB8s_lQP@Yud_py|=%v-7p5$M4v)_HCz)u#2iq0_}YS`PSHrBL3EK+ z?ya~W*m)4XfSfEF(BV<7c3nXroD{K|(ba)ULjBr6x}qRiqv)zP@PIAz>P`%kH_yJk zREEfm_3EbPZyU(7SUbgbL9h{>xAd}tE^pV%2G_K@hNnMWQ2-toN}ve&l{2boaSfMH z({^VEVa(sd^cVv3W-Em_pMmDH_RXQ2J(+!>qS!bSBt8ECdmvb4Qci^CNjEHgPuHeA z?$K&4-3#GAS^As4qib+}BUH(3G<4CWB7@_Rh5dQsCDw*uV7$-`EdY&qRW(&lO$;H` zMzkQ__apag58NQv$yP0EfUdmI+}ACl&$6b4;8~UYEvK4~@66!HE_F>1ctG%q>x!*# z{{UuiWSPQEPDrLJVkBFhmcRS$iy)S^HLfXT<;$9M`pn_V+*@FZ(zxc&5Y9>Gf zierRgXjVOzW*>Rt1_qz*${O-YmcD>V(|=R9<%6?$dumR#`&I}y94KXJaRsW$Vy>c- z?=;ssqU1N^E&Yd=JQL-nwe(d0B>1vePiWblT{jT2k932h;mBa2&&=?nywh@Ug(h$Oo9Fop?T^%jXZ_P+Z5d5Ue?*?OmH2H z^^|u!Cj+lltMGg@nT|=9*2^SQ)J>N|4D`gU&vzc;-7GbHk6YgwCG2~g=ngoXXVxVH zEJGR&UTYTZ0<$LIVVP%>tz|RI0D>Vq6iSD7x}-q)lccd1viVySuL?D-iRK9&QOC#> zz~;1gN}JoaVw7B2Pn2;+RP^~x5fQ^8#Sj8`*bOch&i1f9K3H|RV;(D0fYu6H()b|Z z*>k69{f@Tp|;fcn#+>l|q*8bV7($O`d#%kn)Kg{Q< zt*#Wv<&0`jk`Nt-(4Kpndf*LAls|}uty8f~>xQ^nIEH#yW~;9o$tm$RlgSrrC>>jU z&8=W>4#I<)n&MWw!}Zx6Hgio?R}@jVdrwtaSdlM#RWR1)Td?>QjA2JF3lp*oRJ0|v z%XVqt2?f;$Qi^t!+aC(>6!2y>G&KBGRqMS7GmM?QaMk*s`i@?({^z2 zYD|!u$Rdd$F2JUc3oCOR$QJS&kFEqzc)b4rTHd|h$i@cIU2>Wz9y1ijyr`RzQ(i>%d9blI{qoxmAQ1;#%Fz~0b8bR? zGR+l_Aw>jPP+GtaX5N05>wFX+$Q)_<#|0sP92AJMzx}?r(PENdrL4oleUH;&wi^`2 z6t>I(hALxaaLDnplCh_VARCWg$o~L-n46D$mg`%SOCpUl*7YKml@Z*Q)Xd>7*0K@) zKRg|gpTJI7=eXz9OJJkal+hRf0ZyB;fH@uZA77o0G+5%&2r<`PlfyhPjKO4EGwgYR z=D>mf0PTH!@nN9T{{WVac&Q*3%uFt@>>G&kUIY6*aQw`dWkHm zEq3sy&|Kig&9rU1PuSVoT<91KqHDVq`9u8MY_QqBtF&8f4h?L9U;hBaQC+ytFrnhk z%X6xTb99@BswoU+NTdY_aCZlyjjjQ)zf3O5#O(W6v$SM9Pi5fWZp&){X=LeSi08n5 z>bZ-utd18~yPeY6%A>?8N#uXmx(6k#iU0{K` z4=+`uWz|_d9&J~Y$k8oZGBQI;Z6U*1QAaB%x{LJ}Juo4~uHK3s@qQ>3uD3Cw$}_rZ ze(`0Ffnpa^c;02b!9UWh8=pN#%M`8MbmIe_vZ{TH9`HkJ>Zu9DbTQ}Irdmu+Glh1U zpYa9?mSFVP=^v^q#2IvTrTc(nLlm=%T}uLG zexN8_T6vycSiNUz>uV!-$f|#ASw0<8yZEF~);3zXl{|t~3tC`-X8!=F%X04a-^E~V zdKLh47^3jzn?ma@pcv9G1bB{B z>p`hhK@NCxbN-YkIGogF)$vlZIwOUY$aLDpNNu{a7B=Xkd@X?0q}Nkk3D<*Qm6UeG z(qz0FnNwwY-Z3VLst|;>rV>vln7*k%9Rz9Ao6*}WZxnT%?TjyBS74Y_9 zC*^b;oH+(rmqmU?D439m>BO0=E~64 zkbg?mz@{iDspzR`B1)-am9B$G3%Ge*&dR?TEO%{y^gW5t(7{qpS!m~l5-n_{#l+K8 zg(jk$in@U$j`Yv`iRze@X+n!=Qg;!k7Sg=@S0Eb;mW?)-jPu>dL}i%niJ$<`2N?G} zcW&I0loT^mm7!TBCczY~wjM+9kEcFo8D+LE2kf2{KO&sPR;8Wq`oq8VSTgE!1d*$S zAqAB|<>&qIEH1OIAZn#N2H;9PPhK0r7zc0#`Cu4PM`-& zY?lJTIBQ?EMeZ*ls)xiJYEp*3P-az)ta{@&XWEPH%NC9ViUwzItzU-G7$Isb)17x$fARH6faB*PHSx6$2HX4j;>Y4Z5j(KuSov0)B;HeDi&5x9ZbRRF_t^Bc zx5Jy@1Q`?0tx=Ix>O@MA%+BOq_qp@sZMk8F%&>g>>Q@BdRf63FCBmjR(o0695&>az`~LtKv1CoFzT{178}j3a z^+@oVB7z93A!Kl*k!B}x%WL1KA%?VrNfDJb+s#R1UId{zmO~{eGD5e3n3qjQN)u~) zpF0dk*^*q+LFhU0o@bJ(<`!ZkD75h;s6?BxsMN#}zh0d8{Kq^~W18VDAoVj^^wuga z1CpB55J)^~w{I5U3+xwvmn&lQ5a3*AnV9AK?uoWQ_)5_rn6k#vfU`R^nsypNOAY*h zTjKbEKt>yt*EVrPDOM>V5jv~Iq9S8k_=UxX&clBoeDE#=;op*7L6OBuiU|9~@R-WE zmO#6Z_bgZHz(MZt+T%3x0OF7xde4{X1ZMCziM( zWw9^5Fs`Fmtp5Ova$xR;4KPZc5XWH@U=gHSkpkY@k6bCh6FdCtuSKn7@>zCqS<%Q8 z)g%;=EiELBz4J&kwSX8O=HzyZDlvaslZQ`(qgTxCRL(T=$ykYw#VZ8EWo?v_I^ z8_dkwHn`hL0c#DnK1UMPi4G#9@#=S!!H^!xZe$jWHCY8IXP&|aZ;YeqMJD@d8P^Xjx-2kmc)(i(EvOVh@lCN(D8ll@;lo=3}k;`h@YE`RO3I399Hm9PKKjh@cekg!{rTi2fh<=YV~QBK`?hk-uJu?+_ZM;rR?O$|Wgq zW-&i2c{%J@R3b%K;U1ASw3w? zK{jO)N>-g-SC&bmxj+E5_8u#nf#veHEHUjOVqq7L9CeBXoxW$5WT*HoWo0FEDV`Xe zg{442C6?mDak;la&y{Oya@h=Mk*s7y`KPswwDCJdQ}b;0hqh|P$)895p~)dx>O^3n zVnvr`0Gsq4cthOFP+Zxd-5nDc!peN>S*qGcn|4)3X_8vJ>n51L-g5GFwKCeraz}>y z+n+3Fn`^|`fjqfqpK7ZYAYN#$yR6yb$?~2oq_FdtVCa#M4cdRjy;gOoVO5va(RYXv4-8@*-+zez0OBofLgx_2J?@5*2Ix9IX?C_ifIwW2 z#++AKMAft}PPNd^rDJJS_i?dptTqP2dvYgxd1|y6j22744k2bIFRHDnDpNwD?$)qH z9e+R11qfsXWy-kX4icxCGKd&dvk&J;b^u&kZg;uAy@oiMYy|)u&@A7KGmP$clCHjI z)^1cWQS=yCXc;CNnN~_}&SZHg+cK{T)e0CZUv5O|ZR`cfod-YUnbGdH9qCDr#>drN*xn#eo+bt-rSDv=4l=P-}O}u-CPQAr+L%8>-GG=N7PJVba@DK~Z|-1jHYY$1)a61H{^sXoQx{9V@dq0sQ=O<2Eu%BKD) zK&QJ}qj4Mft+n@Ks{0Ov9kAOsF{CxrI_2=brLg^1WVHgdI4cDmH{JBGgsRxFW@`%{ zUb}T3UYN5X+s}XE_SQwDNWm1Ro4X0!NJ4G0ivj8K-v0nDxHg=%`&XJk!AvqoDJ`da z9}8{(=(inq{{3;+TL8qzPd|O>=CcXrkh3UKciO>!Gw;vo%Mt*10&A?G_nA^Mh3d*1 zVhbCO4ezL%fw$%V05~>~1RCd;btLC1RV-RS(`71bRY(N(}d#;S=Vw<;0^R*rd$@ojL(ZaktMAVr-bE1_Yk>z=w zSv$tLChX4c%t_yS>;~UC`nT7SIbYEe;FOBA!D zlEBX@&mh!Q%lDd!-*d8(NwKi>!P{+;Ac)ToIL8z=doUCR7rAd~G*tBTo772BBsPe< z569qVKCIzI`u9TEY1*7Xa1u^r{0QZe7i`z5kmu_t&lGl@Pm*y0Q`62Qqj@7RJwO9a zl<#DdN%*$Xcjm*c*n<163?{kKpq$KQ&`MiuFR zb}U*nSyDA~)l`7z%!>hFF`H>%)|Q(n70dcQO0oA1$4)xttyB~=@$qJBX{MCaymd0o zs?98-GaOs=R8^VJOOxg?a5bgaV-q|ujmo)rEf{XDJavkq_Nl`(*>y%q#dMV7D*Z<; zs#F#N7t&E%{Y0yLhfGo1rPc<}9}_q3IP~VOY^L+v$)r(B;yT>JKg}w;s1}x;8NT^a z#_upFOMpD~9)O)ZfyH+{_Mln7yAoV!s2ysXWX4&xD_wfk7)T<>GC3Am`^Oa>%F7TW zi6MyVBK*MB&&=O*gSg8k7rEF#-CSt`y^*l}*MbM~P`cS4Euu`#;qT<0Q5;?Og~JH` zI}MiC9@bu@V>$l-aliXT=!{Ky#vPUWICF~uh~4~AD!WIc$m;2+C>&;@ zDJJ$%7g^>`*RZ}9{@G>QqOlxfjLlAHj?5el`-B$O% z^>a7mG=JE$V@2#v>UYXF2(@fNq6b32sTL#*XqJ~Y1{&Ou({zHl_qOc% zmxTC!wj`9S^Txmdy}ARAve`wGORMMc-FjV)^|=x#7YoTC%(GdlONYL#TN^)5UWIM% zi;Qg77~TC|`)6SkI4dOrlyyJ>ZJ6I{Z@$Bo>jyl(MC9mO7Ma|BFcRw%Pukynnz`oK+D6-#%ylaP~M_0$6B!d830dj=Ye5BFI@7 zR?@2#Yq1x(ur~AB*Xx8@SO<>=AW&dEJvt=4w<2nGHS7PCc9_e{NGbyCW< z)Vz;CaYohcd6}xb#+J4U%==l$=y-!Fm1(9BRjMBDMPeD6`&{F$mx#llN;ZM62P2B+ zWa7NfhpXkwrZQ7kB9nJpN2ETLu{_D!mo8qoOSX%QyZRN@>hM;Y*1Pf7^NLFGc56>d zQ&m?>H9@NX0QI`*9a~E3B@|m=7nwf%@P|3UpKZf*lf3SlVTT-(T4d4;VGEVG@{5cz zt~8U5crvPbIeW*73W$Lsq+EhDu<-(X?`z*7iD$f+A4P zNB4NvdFiARJvz!&ZloOrt>L=`OLG98S2(X>XkJNmDM`Tah!}QFc)A7MYpT#`ID(Rs zE`|)sww5`W1TL_Z3S`sc2!EgpudT1P_!odp)(DJ$RKr*%UL*6*SRnZgWp5mD%z1WF z?@5v@Z!$=>0!ABMmy)TmJO2Qt+_1|gmXckF;fEY`xj}oLU{H1QnMSw|Bsr!-$F(`l zM72n;s`vAfU1VkODE7VVJpD!(=QLU0X&f>Vd1FkwO5oeV^Xso9$7nR)$GC6!WU+U( z*<}=S%N^{%$r_7anBBvC$5DpZfL(hoxaSleiB{lU62Cq>R?erc&eoPhNaLpjBSo;0 zN!XsgmOl0u#>~hPu}sZXMQYx5RGLRAu+qLmpvOuW0|e$_Nem%OGKXjX0O_sHpP$p7 zB!QCVnMXJahvv;Q6`M?*!Y~0M)80(`ut9!9z)LaNRal-_mI*7IMr&BjDB_NRD(L8D zIlbchxi^zcvH@obP4y7kg~vA+vD6ga(vT!zv#u%1>9`}hT8X8v&)Hapad_c6>|1@w zxO;k=oyHbGh)fdVqVTO2WyIBnuDW@oqFF#yjH%lMa7t%DhEA@vfIS3wIr8o_vV<}atJLkD*phM_UXeP zb;>CCfJF?l(?qFIkuwPO0d7LT014;f+t>>}<&ENNuB+GmKm3Z@V>eAg&}p(7OwyV; zXeSd$%C1YbybZXp_O|%FXK2TMSmpXY#4o7*H|w@LU=V7BgfU78DpysB8(3^@?|yh> zpU9rmuSM*v?E~thvna*99(-$wUK?u;t9!`*hrW2d^u3ZY_!Ro?jmbqzVLDfR+kd!~g)1w@>yP z`g!8ZEgJT2o&I{NYejHV^EHv^>NG9b##C>yVtIVLAP-+`XxX;=n!__q-#jTkn z*VTR+`oGh5KdV~}qiU;xCmrTv&0(FZarY8OS2jcc0Hzj?hpA&L4MiMm5{j7=EM=VY z)S*-W16+-)4hFz&Y_xCS9>vJ9)dD9>;s-$r@5KwTX zWo&&7xtB|1D#sV+xrS-P z)NkE1G<5(bzl*voZ5dVG#O_YsgJN-+wpzB@%0x-)JPmhc3e}B+?B9ko{^}7r+A*7d z4w_Ij!c|_Nt;i^>6cOYu2KsGShHG+w~orzW2SP`Tpm%OIv31CA->}JmU}a8EKSiQoXmSxKbzKTwx73ejU!dg zs;Al)4LmSE++Xfg)irRIs22=7#Ja1o7f`nhdV(*|VxHGv*1R^%$4T|CJ^WRR8%I1w zJ-VoTIaN)V@wQITM)eR)IjD^zjO#trYZMU#Jk8cu2svsO+_>&OVv^Z&7lN7pc$qn>VJ-7TesHLOna$J;EGTTP;qm$IF~Ii_cqaRSlTNh)R{vE>TOrk)V%rU-z&%LS2LiQjMr z07NpXnM@BK6&m zOlt?RhJ=&H`Q2yQi{=~vQ+PIlikF14lbT4fG$d5XAhHJmO0+`4;1(xQ=0G0BH-Hmp z>hwJ~k7VZ$8T(?I*EL=V^`zw|K#teC+_Lar0F9@X21Q1bAPNrEwNS3Bl)vngvgnD03;O_wDFnddf z+i(X6=yK;DvZrKYnCY6VgEj3EyC=@F%$7)IWU66B6p>x!l35*yzo}q0=Va-9u^z{Z zG4{c8aWE=pr=rwjfpv5h+lDi`tnwJs8`5mcnCr7LYJI27te1)NY=?%kXdz78QB2W_jKepQ9`bv=f~-J` zDYcbuED2^iY6mb{TmsI_-Z|x{?s%(LT;qAw-L2}mLs><{Ya|(VV=9?h3Oh(c>9NqH z6MJbF8m>sOHohoZTLDVCnAS&A#aUxSP_3u4o*#~YQ#-89AX|5i`?lVH->&|6v$L_Y zCZ{jn9q>$XxJRnfD{7(3={3COCg=v>{{Wn9{gy@dNbY}W7l|N5qTD;gkmgjOfw>({ z-zV?o3QhOmly?&-Q$x7apQWXU06Sxg66e-g+|#)G&3^BW7;kT(AS7_8f~ z69-wuO7!+Dn3Zd#?y2Hb0AF6gO_yWT_5JQIhZq8tGpgjY+5rJif>4jITKs<=)>{K> zbJ%V3`eC<);#y~q&$pUuOw^RNoko*j+JDo%$1m=Fcq_pF0Or#me{mHY6w?&q31mEo z*2FOY+TO$E^S0PvB$8x|Ffwbba#ImSCLE?aL`&imGt!NjWO2o%(Ji=YVPXziln?CXa2mq14D}H->;NY>P zxDG}D=Y;pKH6V!&X_V?bo!T$pUA!r?3*4XeZa=mgX3)?BMmX<0Xil9Qj||{cz@pB*C1&XWPvf@dzjn6!5cCvsO~4c!Nt7>2E7_`T5~Ctu~DX zq7SzmBg$1r*@m0Lvc6EoA#@uTXr0-Yp)6P*ZIl7zxU^Y$vQD}Ar?}2O$%?=!HL6+l&3%!gKx zB`1~G1HZk=v9xkucqhgdh@j9vy5)sUBDmd<5}6 z-oA>ZT9W5 zvmmHwBIBIG2VB9Zay6SxO`)2=+v+&0$2-S}nGk@u?jAJjIZwYknT z9*e9yHsXAWk1VC6%cY7aRy0+NHp&3-gXV2*y>4);XSu}5!(7*zx#A~WziU93Jf?;t zQ6%GGe({elVbc_DmWdgzFC)a9q|Yg9VUd<)RMX;AI+zbKeDK3&=Cl>pz{g!s_Trj& zl!XD5oeacSFOd0TgEJ^^ObVUK&y(l0)fDkGAQmN)!gvYF%!OftAfnAm`=E=HGgJR{6AYuoaPGBLlGB%ld8o^bl3|LIeFii#fIB9 zOB!pc?n?V-7X{LNo#*tClj#;-OL4U$D!WV1oP?ViljI=vv+PxOl@upF1u7n(lZksulM=U+ux!S;>3 zG1m{`;*Qq4JI(0xO4^sFCY})Oc++K3q%XfS?Q@H)b?JqdX=diQ!pxzic8IJ<;-V|c z#@vtrzsqxm#U&#&s3^@vc~Gp7CCfFeLXKqlU;E-9s8^hmG&Gq_B^F2C3ar3A5Pbnv z6_-rSbGtjO*U40nH#lgLBP62S%D8biX)C}IQ9~6LUt62S5|vbuj8x1Of|jxVWSX7i zX1E2M4b=ua?pAR+*7d=Xs(qjKU!3-)vJ+hgO)*pTVeDf=#?mM>Pkj6ab!H={1^^KQ`fc zDYz)qW>5+$xng>*=#wigG-Zp;D|A)5qT0pT_P-{N2yG1OdN~+27Xr?n|b@;u7E)%zWpgE!Gv0owYVo!8-TjD z0_NBG0&#hkjBA71Nt$LjozdMiE4ODEGVwoYydRYn4HaH*OpJ!xqBnfv-}Xk=9=@j+ zET3_Xw44Dr@G-1+uQUEjwH=%3n?uGoU~_dn*KKy7qbAKVt|h3=Ge}{Iswn>ehEVCX zO93MY*`LE4WP)9VnXI54z{PEc{{U+@Y|LnrTgM?vz{Ktg@-Eyz*Ld0-Ns3+7IPb|} z-Mn_Jc$M|N;o@z|NGVI2NLK&fUT}n-ji2#GK6cg>yCddB(+U*+V zh?D5ChRG^;n=O(=4QgjMnokYcw+*(}+#f)8>yHEVr`(4&IOIBtd~shy`cQ^Bj%*UF z`4tqog)Ux{5eI>iOt!c%)g))SB+5Ufg|_tz*4Ux2fbR(7=f)2t-K+-9{1N^kqoS*q zEc>k->gG_DEFQ&K7{<5q-$1{om^huP!Pboi2|3}0K+yW3+3noY=Ew@KkecYYgDgqG zmQ6b0zx_DkSpaQvf~fI*O+`Li6mCsbHf1ccnz-)!a@3ZRYE+y{EM#kl zcQP}dMkw|tZQk86+cS&J(rO8>#=Mkm002X(uldarWtmMzc~>eWTvdrtOH7Ib1_>Iq zfwh6zNjvFO8(iaI+d=zIdxwyacl%VV!DKBQEaR%ra_Tv$GU|NgrfGAhsHm=3-9Z87 zVv(^Y%02JV8sH6B&2z)chy6OHm5N3gW1x(u zl-2UXOG^X;Q!`Hs$mDEIf`tJ<=N10j?7-aWPPHUVsMD9Rw5<4`{F8doKag9yV#Pi!o?G4%(SY}BB8NkN~ra+ig z8(`)*kyr}7#`I{p5Oj%<=qs1IfBM5mATDK)-ti+Otn9~q0TcmpaOQ>vK|UO?kvZql z2{7UTB>8Jns+4Sn@5jgPlUd@(QP&h9IO2u#v zuM})H=g9e3bnA!!zcU;)MDari+z4JxEJHB606|-mu_pYl?QOQh1DODWt$!7;0wR#y z09Z@7I<7t&jqT5;E?BVygEifjx79j8#HlgB!uBN!3z7&IzW4m@ea0JR8)({-Pkgs_ z#TVmIuF6tU_{x=4ONYC1<>mDG-^&kZV4(&$;5cOI@>3Z?ksUKMeEXGc%G%_E)710W zdf@SxsOudD6a5M<$bz1V6R4>GFg(Tf9c}bKPi!{nXf1Q8T@#lb=&q4aoQ|7ZYzVj^ zZb)8)TPo+MV49Cpe0lByLw=Zlm(WGEKR|efqtvPp6R5Ms# zNZ$L}-@iOV+8h8b!9Z#n@l0Y&zwr&K)13v z+(my8Yk&safY)umr_&5Ax?q?dTIYhMU37>zYuPoL<%+hwyMUG?3vcjR!n}O_F!`k=3P&kR6ez+>cNCayg6=9BLs7Vo78Nyx2HeI?8J195;3Zg+| z6NKx{L5k2vB$5qcJxCQ#h>f=QX1)C|PRMW9m#TU35F4-HPBf^X8wo=lh4y2=*6a_p z@dV8^uE-$r*Ti!{bIH<{ILz{a8C$)Y_aJHp-EMAdIoM;34}cS0e^Xj$N!EhO<>1Qh z(X;VKc_}h@*_yBUp+gcuD95R=0NcvK``Zs~nl{jY(Zkb^G8fFh$v&n-MS~r7a-{WL zA;bNQy(`eH@FL9VDx=Mhy)?N$`b!ew=phy!l`yH*%d}P`=w~egC@87KBsWN0&2hS0{Vl6@juAcZl&GGfr7oy0*sN zhUBx(I_%4ZC^I@C9aL&6WsaBv>#TDmgJN!PZKf`R>FceVbe1*KR1T zL)i^24P0$SE5i%9V6aqQuOKaQd>|5eTg>e)AeeZG;64JDg4&EVzt7be;k>#9%&TcL zG&5EG=It!5ScMylZ?NQc9S5zt(#yivG|*=UK1tSY1eUqA>91uEG|3x+s55z}A(m#H zODutI?4f=U@)qaM6qsCEFctUKD#Mss$r|O&6zu0T>*&ql-ApWQf$Ow2>4408e`b zx#zPexi=&e@3<^QwC?jW<->+bn?=^%iC0{Ugy^yyfpYpaDGDi!Cp`n1+mN|9y4wKH z5ur54=RQ4>+~7>>)~hDZ};I1ay>DEC z+L&wUX`Ith(}^aitJ-F%39JtwBfh2sZCXJ#Q+^E)Oy%eNL}vGdqt%=`)e$vHL!ycG z23Z)fscj(0?QQ=6rHC7iTkp0O`!g4b^RIDEYlWoeAJh_`h9#}zdTi1A<)q7`o4YUt z1(QMW5&#w#B-_HIs2Z(&B!N)?#~O{)S{p9VY;At^o?49_2;E)5YN+Xr9W#wWJweD8 zHVjGU%gFk4!>r!t3OicjzWMZTsW)w~1e)fRNj|-fki-UHr=7vt$JqXOd^8)~HA(G? z^^JUmHD(Ho!%0)Ml-l0Mr=9%93h9$I2V6>ZGE$B`C+Uyy`KZ^ ztvrEJj=L)FK0EGOv_USmAMW^lVQl;QP}KkLFas4ZKGRiT-`9^Lpuw@w{O4Ay9}eAY`V)4ZTZEA9!6o3Hv>#2#9? zo*Ol;$o~MnviRHPIsA^R^DotYm20z;VYM`fz>QPWilO%LmvHw5@O>^zmB&p*O4Wv? z>FFZ@rISHsl0$M>wuJ?b_6jes7_(_==h?p2*wl>uA~M{(?!v~mXlS!C*7Q}%X(_UP z$@EJ|VyT{9^&OB6aj*oCI$qlY(;g3Lt&|^q{dxuO?1^=-4Zv~!ARULxQ47VK3bOQ+ zh|FnXQL0uK+=2L*u(wMeA&P%Zv6nf+_5Jiyx4!TVIGt!MDL7J$Qr6SSGwZF8vQBq2 z@;L=>eXaqKu5Ja+G;JC8Tplnw#{jaKYYhz}4{iyrAmOZ*r;8?znvztGo{~kSi8U-J zKbi|WTKnm}xsju(+U?d70TST@EY()py{sjt6P$T}AR;xKFH>Jbm?UYUIhvQcWnDT* zYsy;O!3z=rwU#EsTK2YscYo))Q$Ykcj5(^ldBd_&aGW%B*@Dzm_sLE7y8>uw`}QQS zn==_3rR{D)*vq%HvKD2h%Zc5fw5&-srR2c%IVNS{dVUSzIOEIH?$WV%ns;4#P{k{= z%YE9*aI4gWC*n9eJ)X(7fB81M^XJhZ+d9(H9f!xtuJIQNPg_fo(9%ggPIV<3RLn`# z6@X&B?a8*eq+l1B(IGb&Q|vFE|keDck@9MXL+UWRv6id&@505Ad{VGX4l#| ztRcCYich^a@m5;r27w-xR=V0)j9HFbMFzPm9(>C&Y5;{mdcV4jOG>L6sPE)sYpF4z zCcwyK@Sg10gJ?qttxTQRXB^{|Q8v(sbG7U8i*|FGK^F?uS5gQX8uog63Y3RsRE)E@ z)xGZOZq~Kb0djFnKGMKBRl7gtc{Q_|B#B#e#S$)?&B!QBD;M*CQGzA>!va~2l|+a8w2$XS3~Xm^eHE1MOGbG%Cg&v>G$x_3I=BXB#!4X9jg{x-#n?;r`+ z45JBON7;5(um~S2t(nv7igN03@KA!Q^k z=XKP!{H=c>z8pkTGBBTvQwKFQYyk0=B!vJCx$+$O-h>2Ew*Ye+KFQIMGA1`)SgAlrUjZ+|oTd*QGPK_Z+< z9)@If;gJ`-zb|=4{9#Dpdih7*r(V^7u z$PM{_ae@s5lHonRQHlO9P0J8@9g2;w&}=%8PAoVQK^P7i9;<-f68n@XCGFj@(rk7j z_vht*(%4vYi-TJv>$*6RDFw_EG4U$90!jFZ>V3UFxFH~420XfN)GiVZ^?S(boey z8SnV{;F4W+#0_Qgh15_PE1EPqg3J)ew$!Y^Gim9200HQ57H|ZS`}Flry$zh>-AILs zr+!p6qDv~h)vmgl$DM|i7xEssI3NMrTI`^T-IPj}v+fla4y@!U0{;Mm;%&NbZ_CdD zV2hwoXeBwHakbG?*<)h}KsBnfgkiOYkQk44HupG#6?Q}UPRhKIAgJ>q!d5^?g;ZFO zJVSC#yt-T8%MeHinn|W=rNooR4J*{oCED_e0FY(gWG?WUw_Rlq&S@y6%if)J)k?zM${j1c_is;6*Apc8 zV;%KMEg58~aQ1XKW~Ms&nuykEB-XG*EUW44J%7$D3qn8hX`O0_T;fc^)_6(jn<`Xk z(pPJdzd_dtwh}xeT@x&B#wbq^)yJ1g9;N%3OJ7=>U(@DsU9W2>O;NqACZ}5RLdOxp z%+pi4XpCKKd7tV&enZ~`*9X?};@1Nd1p52>ER(bu<(D(d>I{aavNx2N+>)*QvUmBP z%hwTSY6*)ol}D7$TB2iGTn1d^>(NNbYU%6M-laq$T1M{DKzVr%TL4!706qE#yoWTj zXS-dp-lE~BHG^@QF9y-RN0H8xMLdzy)g%degt;#yfv!A6lVB~m`ed6%xV4f%w}fsw`QfdDd20<*Q+?ibSgEv&$}hH%2R0}pDvyU zSFX$JY9*y&d4^J~w>-Wh`V1_S7n(Qa=Q;FMt!!LzZne#4yhYn}O?ycqRd;likgAkn zZ2`fzwTQOA$ioCls$ttDp!TA1(^U)A1!lL+`}~*)(W9rMBG!vl+`p$^iWMP`^3sDrO4Jn_j_`;JTmEMrngE% zxcn=eF;(zJLsulxtIUVJWTsJdBgD*9_0w<4_;X?_PhO^pWY)R)E>Yu-F|Fc$BB`2s zim9qvV)24O1hKt+vC&s_~nnxkgZ zVA?NkR<~OpmNuJa+oIr|_1{hyEc-_W(Zy~Ry@GH?O_Apje?IVA! zgFBvf)Vmv73U!^EA&xxex~}D9+C~`gmCxK;#d)U#@ntUyW|T%+x_U~16+^K!^O;F$ zBSUWp2S6-IZ87q>IH&^};eE3d7<2N+axfhioA3KmcxQ?7jv#pQ`c{gvs)m+P+)=fR zwHp>fPQYJH&npry!yn4|7KxOC&^ix!F#mxVa|4 zbKBDvSoV`7>s^=Jwk@&NwuPthfJU@cikbBwQDrvL0vnP?I}`Qx7_!rU@%HuHw?P0( zoRXA{cTr$9SoOav^!a)HSYBFgx@7K*F{TN|Vo6Waur_qs+N&+A6**jn9~v{p;F#Rr_apHTIe)0%rZgL9_C9RrJ$%GhKUL=b zsr0KYv4l8RhCTijpMy(rzKCiJk6F2^UiFv-Bv>uZ)+gm-jK8W|i(u0E#y3|y1eoQ$ zd{=AOM#XOE8GkjBy>Yh^He*AUO zifAsfxXF1nrWNY8{>!*di-P!fDTbOPshVn$JzVFUr%MnQ$X>vC0qu?JD<*91xZHa6 zI9G=S=dIrBdqX%YZf6ZPSxEvn^P!#5%dY6sUiy9RssQr#I7_fDXpT|(s^-#@UYUAv zPe++jN18_QK$D|GBCK*S-HH|^hg-M+{{Y;_pu&U_9BG#x+_Fq?E^I|Lxec$)8fDB< zib-X83ZNXr0HidY=FHy2`PeGkXp7AmNY7Nclj)#>>*=~Qd#`wqNd+u&KqQ8)xJOG-q=3$Cua15L{U zQ*1~e#Z4&~W4q^om14#L6Hp|_>)5MJO$gz75br!HXw9@M2_|_SNTijIMI%BguH;(e z;g)P=lMT}V*Y(99J=WHjN0;ej+<%^b0M7E}SQa>;S4IT`MIA|u1RU<&&|aL_{{X9O z?W{SF_Vvq<$E+!ROR^{BP0}+f*$@tz{w?m3ZQ>TcGL$ZatXKq zV;Jp(v{|%dF`q%dGd0|_&48og4Nre`?+s^gP$g{y&hG^jQr6Z-dj^a-Dy6#X(xs2$ z796jKUb|>4+z7;xg*Y1HzC|dO7%qYb3D@x>Evx?k*DILQRL2c11janlwdNL%TbV^X z3Zvpx1Qi}yWZedrp(r)P-|31GT9=j;VK-mDAy~dr7V%d z9g8YG&ZlF|nT(8mS=(|iiq3QGSX$@+bjN*Q@>*6bA?4MsyPzCNoMx2p)3p#Lk~MDW zK;6k>c0R)FeM*m9V_UR2vJESsKS61L)|H}mc-2!-!tDt}U;s%8yI*!=*LEk=-|0I$ zp6?TKfyD2_-k2!0jH;}BZ=EJjlvP(rR}B(D5h+tB7FQ!?RoD^*>@VhgiS>3>hyMV~ zVMyy6zpFdI1u@pQEFXn)v6#u-(|40vKJg^6X1+}Z3!(P;Bpg9L~(qPI3JoZA`6WtDtq zS6x|5^3G*3FLfi^!bOeGspKwwJn^zaoEq4|bXT$2wnngSL+Kc-heKH|N|G&Ow$|zI z?Y{UXi;(z(+u?87h-`c(Wrw^3>Dcll_POsxdUPH_a_Dz(IO;npw|PMAq}WfshG*# z5CzD;i;%F}_tytz>!J++%Pw`#)iQG4r_%ye7@bNKa~^!pEw69!hOwc*HJG10@lQeB z9KoiBxGAwit=CqSMi(cd3yc0+Ti4GQM7ReqNzO!5bitn`6% zykj^|JTlpam5z1R_ZG697W}RUxWGCHt{L%_7n(6N{qRYsr%HIFjxg4Z0w7bdOB?*i z+va-Uq~q|6651b;P>5&?mb*PJBPRDn+`>`M&@tFToAf6HbILbnmbrL`3oJGH#k`=)r3pEzfgu$alaC9!PPw+svK(6 z>%RPe9z)jxNUbZwUo=U8<3TZ^to$e1o98*L9#u;sElj~ovKy0YU7OE)_1@O=#IV`g z&)Xn@uDz;(>8eef4udi12sM3tWBoM}_S8Pqhi zkxe9W-0F!*DvR+Fc?BQaY)c>a2?xv+;MruFDVg_bw9S+{=5VV(0g_2O&`fcQ>NfKh z{O}KB0KDu1fF2;UthbJ9<&Q6eGU5EnqNbj3uC%*?pn;@X*EcLS=Wdrct8B|lIJ)T_ z>B0wdG*%gC;s|i6lf!+faO2GtK5{C=#zv34mNJM505^-u!q)XT0OmQ+;dGgdH{&Da zKJmK(lfg^vM!qbwhNw{;8`zFUz+#DW9Nz)Xq9R0Z#(MBp*w!?efvy>q zU(2$-80|}sTP&xlh4NgfmU_uzwyLHe=tVsfQi4xV037kwHcn-cw0VjgY2{PW6g&$@ zU2e6-0MC0QY?^uG%e$(ETHqpq_fSLF+~1+}>E(*nR*fbfk0LuyvU{2vg>|j!fyep( z02c6H98y%~QOi9FH+|p2w~32+TK*tEdt%j_1FF(zuDPglp4SNzb{{XgYgDiZ(-*a!@ zJZy%x%u$iZbI*?Yp>ZJBvc@yc)@93DqbHVF?$R`H%M)*5u_njVeMSMMTXo+bI;zy! zwkO*WcU#tDQ&Ur%qM4a}_E+V?znQQdGL=dW(=2-@2E25;P(4Tli2O(|uB=S3I z-rECWG0XwS!GP4PCw&UA1xd+U=r}mYhO(xbUhYJVq=^YqSbzOLuHQy+COY{mmY?EZ z`4@^DP>TNEGQ6t!Bs@CM5ariS!@N{usX+e#TPlI%zPRhxyeBSG$ePcp@EbzXvQpCNvoxt+G9b~}Q-EgkEbxO3o5foj! z*$)#}aZr4_ET?JmxMy8*RS)HfK_DnQ>w5&@%`&1@P zHB}`fsZ=|^xdt}wsqFezH9w51B#y_a1DLim_KRt3G<-WilXjCfL?wtmhi z=xJ(arl@f%P*g}5NgT{}4Ci(hJD)OrF`R9j&>Nqo@l*TguQtfq*6QNE9ODf0vK}v~ zimEn_wwie<>M7w$@Y~m#44xSzxr9(InMBL@kB4$R&WWOW`PaNEN!P56 zMURkOI}00H_T_y0S!~Bsuj;zTK?Z+X;Z$VMK4X!sOfbt&G)r=mn+8jB-<^lo(BNz> z+}A|XyknT&zODX0^$-BEv^=%)qtHp0xYZwj9s_JQvh#pLk-5Arc7K zgQVPr+r)PGjk0AZs zDT1syyRcm@WF&LjNKglC2|C{}eOJgnyuxj75F{5El_>c!% z-xXd=7Lg}hy%mvH4ad;>m6`E=XJq@QP;vydX~2{wpE$7 zvuVANqVF%($echG-s;U$q&f09O|EdVg5vGUspyRmPtG&SsqZJs`FNqs8CMn z9C9}{OS@(+eTZ|bBNAhP>Df|wv-_}X80&`R1|B;8C7#peVIHQTB9^TJDOF8<;8!QB z5fLKiV5PYW;=3&^?3~s(M=U3g&I2`Mw#+oSu7r9nDX7e!ET@?slPaYKrh0~m1OWgd zLV1yR!(7-O2Bho>!PRCWz>1k57E&}OFd-O2@4HT z_l#s~fd$UiNJ2ZenLS)!O|AW&-~`^ndEq7#+6!$7nhg`(R&yQ#t<3XW(m10?WXs{w zwQ@bABL4u(VamYwdvfG@T;mYz)|PgKkr7%~tY^_^i&mBbVyFgZDh?^8S$^)cwYhvW zFC49K>I`y7>^a!9V&vNP^4O@_7Fo9O;ZHt%<9c<-Fix^Ws(?A-Nl#8M_vV^M)$yT5 zDd&454Z2>|8(O>VgNw4=Tt`&PJ1_{meHGTLFN-wGrJfB-8^k9qYcsZ^sQdVWk1u>w zb+_CuX$DA~CVI{TahO-yF3^cg(D2NXQzEN8?WJK1{uD)B*}l5IgUDgbvS?v@PyYb( z@ja7C4KfWiMWJx@G;}nb;tuh|N>mZBB=~kao8RYrTG_1XU3x@x>sl9fP(V9+?05O{$E9lvKylnK9@u$vUi0YIZZ<&LH_=ilqAu*kbq(C<++N(5%N)`` z@Sh_;-r;)Yw9dSdSVQcNK=A6l!O(x$eNFty!^krvM-P&o8-%G$fuPgSSX))e{I}=V z4TAIGB*vqMRO5wx)LCG?h))&QNWT2{9QXY;`C)EjVBHs>^QS57lIDdC*&{mKH}sRI zt%-~-x*HAbL^^bJMnV`*1fs_r@ zuv>yph@0ByVe({jvMpm zz~qh;gByr8H#%>%iT!!+hxh@P3Z3|V)B<8Ftz^E940{2g$AsJyr+$3>@WBEwjd$vZ zw7E(}aUP{hCqymqoAo_q!Ve7&+#Kp4|n#Y&0|ZKRDN;_7{XAFlrZv4b8H8t?jC zKq3lUnOAs8R{-Ar8}3UTukyYMMG4nGYACxVLW49j(Xxh8Ra)=nPTy1c3=^4m@E(XT zDNs~K>Z-$iO{{(+ZhZF~`Tqc%3tnQl>YKdLisq$>6=D|wjrOpxxg_-VKOyUa7iS40 zujxsh>hCtGR%Sp_R~kSA;cl#X@+QO9=N14b!qZKE6t2caBll=#j45#&HKS`C zTQ5JVC>?jhK|hpNU(_xV;AdKs!4`}WFM2H6k${#%U_4uXm-!Do004qHdUMGj-~w@= zLZu&di9(VEwP{gt=r-l@>Tw{5r^*oHh|k?2!=CG1k&ryD*B{H+etLEm--R+N ziejx#PU&^=0jQFEu}rz{k;Btl*POHtC-$_;Oyedjl{CsHB^9);?dUx({`jtM!DPZu zgheQ+ynmL(#5Bx|A*C(w1+$U2JM!BIEiN$mBXHFFrUw>@0aLOL%(6}!?kkpk+55+y zQ@n=v({Jg&PF&6{hl?Wz4kZYCt8_-SRkHAUWwoZE>FXMHV|F+2fz%J*mIBeFGJ=V0 zi_q*>m6VxG&f%%yvGB9Cu5NY%)BW+#_QZ%nM4BwSiue;IuZpmL0B9CS*-c!Q38wsj zzhCdy9ca?#R~|pAbWO5*qz!v4f=(c&;VCJ*iRkkBnlMh9gd_!Wd2ez_zW(;LwxeqA zw9$5%XI>cj#|3-_Izgf6zM10UOudsaf|!Xw?v^2>D*AQb*ZZ7i3s>8CNXMb{^`g2g zoIf3WA^cmE<^qvbJ?HOh&D7}syo#`F5A zvqMc5aYG$MZvDZTVjd%A{cWPCc4Qz4H z_tA>-&>aPtK~-H>+zX2fSZ#+{k_Gn|f_QxXlPttq5HR7Querx(apl!BO%7u`&EAsm zMZSVvrO7F>e4a@uqE?Mji2wk=Snanhy}a>$&7#N>&`220 zJ;nop2uYIyoAsKZ!^Tuqxm{}0OuFJMtq^YsweMl|$2HCj!ld$$pJ!+H94N6I>nu#m zGBt4_kH4{HL8z|eY5D{D;^P|v@BsPoUr73X##+fCO`^-%Qm$CWLGWokd6VQo+TPZ| zv4jpf>DhWaI}sRbUP4Md-v0oV&KTxSLY*<-tbeW`2vV}{5lO0) z81<250f1q3=kf#tzfgW}0`!MABV2GtXR(RAYYOH3HaO|KyRp=F3-J?s{&)PnF#iCy zY=I@S+gyOBC9Eug7gkxs{guO8Qf7`cS?)+6Sl;5?z5f6^^~HCwvjFRy=&vcY{T;Th zy>_ZM4bf-4o*Guld%0<;>RPZvIU!zU*%-Gor0y@U)J?817j8qFfWtpo^Vo&lkZ*3(jF8IY2;pD3r0UY%u?%xcE}0EJmVJjn5WA&Zs<&fo-B zuWZLqymryCZ8lGbu=Y^?**TRb1@>*3aRocYEnQkAB|Nvjspgi$#r-K10Q|@GVRqu{ z3=P~ozE*GqkPfwi{MpZVf~q{kP}5g^?v|3F`>Br0D_+|7<$qr@=5dhYRcWn}Rl0U{ z_NmQyN=jU&vPydTRFR|m*#s$KcXjE^>`3ZQmJ;?C9}9@JY)Cd7#>3AS>S(QmIADNX;dUk3F?+IR)Psn@oM%uze%6FOvTNlrkdG zzL{pWT-Uekv$LwWXws0$Pa`8hk(-rth$v(3);oIj+ZErnGQqDyJ|ACA+AT)WW?s`X z$#qD;Dvj?G99FfPQf|gX%@w;R01KVvl7U}OSxd!~yh9{W{lYC(6jY2tHC}=c%EOw( zC2?!+d&ORjZ0maow06+pAZ3pU!h(CzUl0EP$k;a%iQUyjtKtZAS6t&VqLp%m5>HD{ zAB0aJw2BG%oL%YJtN{LHje#m{+1VRtgCdlm^zFNXsOFnCU16_WJ(UuZwb-k(>bI7? zRxGNR(`nRVr-CIVd)XX=r*8Bjj~tFyYau4nAAQp7v~sUFuO&szmXJ*G^jThe+Z`l% z)Y+R;%O+Cqb%#;CgiydYKN_6kDC}K~0f!zF{6kSB9{&Iz zwRzw^)9JHL7)tu;$#XS|k|l~7W*|H2(lsI7wMnh+d?>Id#7c&!WVQ|ihNrKRv3swHBKI?iN@K^O~F~+USpVOnx%WPuN-~rFfpjL&fB%m%hwrp)&-9f zSQwAyyw%|FMd6n@_fj&<-GB7zX6~{)_8Y0rOqe{Q`I1iV_2G0V9JDT(&30V<+b+3APa7^e!{XUF99n+ z;ryy7@~t65w|8T!;8H;$nbDOvh7Gzmg`~I5z7?i(25bKGnE_JgFG>Gcqu+48O}!=C|kSP40H{#erZQ zbj0~|#=P?Cw?3a@>t_M(xz9ANeAca{X`Vr*$_cwFoq=O+WN+?#v7jOYV3V$xc`v2x zwnECxQWuDXuB5X9Rk@Nj8v*CbZ*kJsU?2eDQRV8jTLP+V5d~AI=U9`fb;H@6Qt43l1E4<-Tc&Om5{Gq94IKtd|Dti+q!)1LhOF`;15FKKMgV;Bh^ zvaCsp6*3qV!gtwkk-C z6hZ*CK&dyd@Po@wFYWWb39*i;*Fh|SiV2)#F9fEdom7FTu5E22)BbTT0qi$Po_^_W zX^{wh4rCkoauz z5zL%gYmCUpUHDhBH#8YmItfbD)c6X?b!}1|*n_6$()y3e_@Bj~3V?e}Rc8R;3Mmzm zBCH6C!S@y^81XUru~0p*M;-d7REd*1C-fAH1e#4=9c;j{s4Pm{{SfZgKQiaAiFLBbPr^irdh=q8`IF!tVG7h-Xe~PQS|u-P zxh-{7B@$M|YUU$UV|L}guv`9^Z-l(C;m=VyW|UZ4E-Eh=c7K?0HF_>xnokWCNH@~= zvW`c{U)K<9LyWkX&-;&(mb?K66p1qKEa5nziVV(>QpAd)E1Q6$c49C7=KJn3Zu1^N zCV3?oc)?4biTIAME@!5mmUMXRSq+-@zl3z_w?0?G-Ep&f0bOgVF=h=&{jA%xp4_W) zJ{-$xY4eCBqne^SMO4;xd+w*H8(j4pU!F5<-UX{(48>#T=MYt^J3F|-DIXtjKWKR# zWi@tFO;wtxA|U_{?IEze$02KP%YQsqw0N{&4H9I3XLcUS>lkOkXq>0vh^lKSXr2KI zM;PwWfz@kkW6zKU03M^L+Jl(yyAA~RIAS?&&{spJ#MqRa=1FoK<{CPs?_jGAh30NY zoxOVfF-Fw9IlvOqcbxdpPT`jIZIEaJYLkZYlaS90qAva!8bu9aFMHg3`kUbFp{*uh zjc+sE9l&4#uXWB{q-OPS@!`$mk?7^6jw)!Rhyc$R1i2@d#NU@q&NNv1Jkq$pF~j%h zvfRK-#YY9Aa0d~6@|rfIs4Tj|^1b#T-`xIK=RLwMiJUX_o|~49lT1i8JkE;NBgqze zG^$wR65CNKqUZeL%WRtW2eri0QYkgx35O6rKzkvJTi$o{%OW9_N)7gHxA*rLY%$=m zjvOmV=|XqHAlEsfDdxHBi}KiVT}Xw5}y=j99N);0ih*P<^?M`r<7#BZgF z@3H>Ft{4lTS1k4XS|O#O6{Dsm#@a=Nfw<}a06e|$%Y(x+tTHFdnO4}_v_C25q8P!2sA5A0@OVQO2Y$T%fPAraj4q*wr+xU2l|(@XO%h}UVrYUx@dwbc*ZR%RNfMF+g@yn)rDP~O^yTw!gt zPXrP?Cx5|{-}b&){#Rz;Lxx=uPv5()x42Q9nJLu%6rD!&rue?q2_U9nx3kd@f*a> z8qiS_hH7IHJi1!83ZV+DkF%gvAfHWFEPCz+D!r!Av4Hh%Q>!0>NxpS(PmgG&}1ZN47rUh zB0#ey{lskS6L3n#06LFL_S=rHLbrAzgAuD(D(w2Eggo>X*``i!p72*s{G9b$LX5aQ9WM!&>@PS96}n_#-Zb zrd*-q%MW=`NdbK^G8m+VWn;0iGEM}qVnlPgs@!7BteEk40o5<=xZ-NE&$ORlRawmx zRP>pI6e5kPvmDPcnh_dY5v3I^WmRtPVl+qHqS>CxD!#-(EN(oz>m=sdn3rR{Vp+y- zTiH{LqK_@BpEAqnRMbZVI)o9qBs`bhNLGoNjmdWr00214V;_F_HLZV@_86knUK+}qr6nO)viJ{7GlVoTKb5$#bN~7Jh*Y??bSmZEWrqL zU8UAgWOX!jUF;6XQH;~M4G)bBRpuVn?UGzH5%Nss(k9J zv|h;a<&u&a^GvQ~R_|0PC05{p*6P3k<<7?A3u_BOvdia=X`hztcGNcTI#4pQ#(yOjLQ?vZy_C)Faa02wxV!0%xGZ(4A-W&_Jqb-U3K7f$!wer zlkq1GW-`;%R?y1=#FNB`c8*uLNK_7b7Tzy1ZPeom%Rx!&Hkwq`l47lmZ*rvXg!l*e6kmf*C*mBwk7j0FmS z85a9rp8o*f+Z$hR!*(^zQkn4|+5^TJwJuqc)XvV|cY#i}Pl=E8k5kNnzb`Cl*jWog z8J@M0md&l8WLH|1!=0-3kx$0im;Tl&iX}!0={3nB;@}RPhBRIFUQ&1n#+*ZHXS{#5Bp*b zoPsZTSAOxxs~{MdQsdR(U;`I$s1)oEUt9kGjj+RL=E;3|;pdMmH>O8)@lvueVWV;^ z+v&08`C%&^o%S~-7X zAj(*gRDPB9vbkbNyKFbLw>Z*cEgl1H1lKzE&YX!)5YdV+N~ck40vE(bTlD_`j-J?i zS}vBk(=+_x@3}BgQArV*PK&A3HEA9oFYJ2%0FIbB0C`~_2*g27{nVG$;?lV;Oi>f2y?n{R(_^MfFfHg%0-MIa@hI*Bf9!$?!% z)Ni-!dSjenrg@szT-Qbm*ova52SB+O8+0S{Jh0GjP^rMFG?hAEP`Z+DV4!ud1I*jo zo;piSN3ZP`AsM8Xy+W)ADhGvyz#H}Y`&?n6#MI!0?L#<&ghfL4&|Mf@og&=N_W5RBX0%eF~{AQi$*%$>_@$Z{P|&Qb@_1d4kysao^b^Uv;>J)jGH$~ zs96zofKlZqkla~+GwpMHH~yrboelm;kR4G{t+{<#)YH{y8vF3Br1K;(u_L9tHeV}a zyd*X41lqdtIJ-yC2HY5ck-EHIi--@I04`@l1*(%&9l>qMIajdXn*R}Q}j((n)tF-M5 zv4*m){_|ct>pxpN69}^X_Eb2#SD<{svb?(}L0>o@&8#+#=kYNn_7>dyhCJP^qpiGP zM*3yn`J69}TkTKUtz7$KB%N?q?$2{xB;bs`s&o=&0zlF-(?z5+lduE*{{T!8X|rK# zT2CB*XPz6DSvQA|_2i0WJ+JZgHE@?Q%kvs+rFRPP018`j+x6J_?SvOxVROf6r*s!s z?7Awi9CpjYy`$292&JU1ddFpm_cY`*j@xNd{W}xq%YE&N7L68yEa|%l>jg8!)|ydf zarO_z+#{Z*a+NZ-bWKFfF)t)>+m?~BZS7&!!;KqOzth;jm8>Vnz+#wZPS+4tw9HLx#HA%thl;e7k$4K_;aD%zo1xJ=zJ)sd#!i zip<7%3$%#kRZidq9N1r{Es5KnE4{9BNV9D>oP54h7+S$3#4M{I`%>{oXPKg8nTA>S z*=a1RRWgz1eRl^@-rpcEvBcTB(1>kBbxe@zm9y~uUP;^E3e{CX!ZF2I@|h))SgbB} zSycI*0F$vcHs!ir-vo*~ok^_cRbt2hNjM=q8BpDrSJmZNhYwWK&TTZcDG_uVZD1~0 z>|5IBrH(3Dz0D?|ihS24bOwM;ByRMo)pD-U;p1rObLwd3t%{LaB9JBIg{}^wgW_)` z_BdUosG8tlZ}X@ey2>GOt(K3KUgBz6jP|cG&zCV*fo~zFnfyX9ELBDJHy&L4v6pJ! zw(IX3{I_A-oU3dw0BN0hr)sjPGZ<-V>0RT{fn5{ujjp75+!6A&El``y6ydG=sT@;X zelf>bDsLL_1R3nK(X%{ru(4Gh6kc~dK3ulxg|G`Zh#;Rj;on=AHp)b+7iay9ju?#? zvk3kxu)ALT{-3DD{{Xi4kRBsF589B{fJCbfcg4|Ul?y>Uz0{ywgRr*zzJsrpE;Pxz zY41)Mld7gMg~mp@ewKOKClJ0%!^>4kQEIs)(u%EcR02r!`EP(_n`-!jUQj(cQF;xJ zWp%6WmdvcQGv_tUT;qC`S8H3u#^JBh+uzsFTN)v*1H?U7(Dp5qS+)S8J3&O+U-1R; zIk!KjmrPl+5ZE-1{MV$jv+%+x4Kp-S22&chh$|hp^Yq+b*8W&)S{@;wVXk9-3czkk zS|)<)a9ZbkY)!W|>C4LoAi559;a}b!$$$`uK&2CPy6WWDC75md{oI-ahPHyUQR(ng zfW1Sla#G7QTK@nUTY><(kM`JYgBYBnj31Q98HCLBEhLJ}bt>xQd6CxLdH(N(63@gQ zb?Pvw_TsvL0Fd&?#Ie~**r!l0xg*-Ze|$Nu7op}s!j$jqx@1v%JQo)l)D{W1MYl_D zdk@c+*yjfZk_Z*$P7;>jNq~o?ArQ8e9u)%QSQ{v?9($fw>M)~a0JItdByitIiQ$GY zk^qQIXH*7CEov`f$9?WjpgvZ)-=Xt3ak9QkCb|Cq08uKQ(`WZA$Xs8Mc4v}9+D2)^ z{6SSMG&I3wfC3QCx`S!IOQAOF^R_c~dpkEi?X>zY%RgG#U-a#%_AMA1ay3N$(jzEI zcxHztq>7%7l8nZ#hUBg86rQ%+-+p6!TKa*rH$K>a1atX?=k`$WTwZFaZwC~1Z6M3D zSgUfBsf}e3vk+`lFt8kn1#jdrmirRJ4;5M#cEHtzX?c$dWqqM!)LHy56w;Is)W)C( zR{-w79$dM4;;?aPEg^fKrtH=qQDi(zg7b&_7^aSR@t(%27Mm(khLWtJOx8f(){k=T5u+VQnpzG(7`VPmjH)m)K6xQW+rG!Ki zSymPtw*ZrIZ>Ah%HVCHhM2&9URk*;Oio`&KS}>vATbT+Dk@LOJO|bhrPq;~VkT^~o zz3~a5m#E%q&B0t5QN*=vB;&Zt;gx&#I~fSOIA1IBCi@RlwxxxgNg|U--<*=E+q_wh zDu?!{;&0&9d@WHXHfh+)P_->#<>^WXBYZ0s!E z$Jbg5G2xl0_+v6!>Q-8erlOJRWQ+^5FN*tnfn_^epvQr?Z{2YYq+usqd9RyGSytg4 z7j1op`{ZbrrC2Te zjmiH2?E|hVU%P5p^G$TGHD=P!{{T77R_my!>9bm=I%Th#3wO5-7<;SA#{Cc?i~4)v zmbQd|K>3D>5mhkwuKcF5oyt8(6V^Ly_iuH!d(pBQ68C zTvCC1Y|C0GOyjvRRm3@KSIw7FGA%TTGEb#~g%>Jr<7L-pTQ2$|dua=Y{oEMLxdJ(4 ztNo{bU`i36ah^v_T^?Ieo5fvO6yl`Q(yFKPmPY;41s0%4J0F^RZ zO5c4Uw$!H)YFf*_8F}NE8iB0R+6$%88rKzpXK`kn8O8ax4rR`nu1Q7|LnP1!CEPJZ zk8Rk1)&N;SRzDC04{JdHMDE|^=3-MKym)-Vq;XYJ!IxB3Wr9NePX&uY&2{mc zkQm*p7WNO%VsXWn-7YoVO>{(D7|4#lC|?3`9(}@dQrAfGMM%{Ou`EZtDp$p%T=={? zt~mf!{Kg^dW55wXI*o8b9S6nawJ3Q0w~6?Uk29fqYFVlss%uu1ccmm6Rb7B1Q3%at z*j>-53$?N~gT`~#2&~>kMtt?`x6aG6oR+SZIvOm>uQ1K~x0XqlOGpj;P2L@ufhBbh z4Z#4NCktlG*W_;<#C!ZL3q7Vp95vDw^^*7PQx#JKm(oUvDTc7jkgb(Szcywh>NmM! ze1;nPH~#?qBQuW~s7t&{4Gs!?DW^<|84EV<4Z`nnZ$ZEBldR>` zbb~aZ*P=M8SV<$&x{EEzx{dF9TK?D~TTyh^ta8;9i652sVA>9)1D&NbkzJ|uQZp8VF;t~F>nf(vnXJ79r=2D z3@)=l#~(z7kkdtG%fx7b@42~sTl5#?eNMw`d+(sjE1*1SQcFJay=b2BCUf5HyREZLfRt0DXM@`eJ_AW2vE@Kh+X5OJy)HuvT@{ z6mtOj`TqdNEKS(1y_5(s3*~hH%0M;0Qi{yF0JVX*8{7Mz&|u39-io3GU_$jtM$~l@ zz%l4Oy?^5n8UdZu*1E2eO=zalNRX)mQ3JwTNFe=o^!a0fb?GD2QRLTafg{%PVlu0UU81c<04PbT|pnS{_5h(bP%fwwTm-oxC@> zu{Y^*#@^o8)U$9b1RtGyA|5FLUFow`F~-c!KvaH~Xzoq_08g*34DK4&RZ;DNbWmO( zo*2~ksidd{QC`e-ZbA48ZG> ze)L`>n^3Vkj-ZoneQ%E|wMn*?Nt}O+;9GXkZS6~*=@pGpS+Y*c=sQWu;IGO{<@FAs zW00w0IaptpHNM_h7g&K-Q(e|Q{7zn8s=<*|@yBI3%oI7LAkOlpZ3#3Y?5l2VeUGh< z6w=fG0Ga6Vn1rG!!nN0 z=yQG};SBMa<03JWKG(vD7LE-BK;P%0iMD0lEVa34@ODo@!Mrs`lVxmE3C5nZV^+S9hODJ(Nc+shO_=Rb>@%=UgE&$6MVNl9-JmQh%sh zdk{x0_w&HTrHi~qN2csGHB2qOFR@W_UI5H$vwG^R(`TxizB`>jk+|C8+P_17cpBO? zIi2Q*mj0$Vqq7H`>LFXQ+EvTmY9S=5(XN0&uu@I;w=?_baYeV-=m)XQUSmO~9TGAu zroNV;rmU4_fEFa!4I|U{^4}NiT=tMafm~v1=ktZoK{05&>$k3Ife?}NAtye5Z# zpYj&Y#k0EA(UQsFsjSVTS*oRXeJ0VnTn5{4FUr=pkhU&avgi&NjZ^l%g|TdHvuH7` zc`GdhY8f1A3d3eqw#Mg3+pj!Xvu)RJpDpt~>(SY=1wuVe3}g+XP{fc9!%sh^-!bWY zFj|q}z*iF=J>t2mtpXqgGC2b3HXyBm)9GziK6b$}>x6?bkTvLXo(b$^c#4%ux}`;K zr0OJI{Ymy0{@n%~*13}E0mF)I4hnn__h_X{TSx>I^fvP6zTV$Cak}7LPQFH{gb=-v zT1d}!;0ujKd_&gXr`H77F@Pt0?lf>An7* zrvx1%!fBq5Y9$s;FhO(b>zN^fg&=jDw1#%jJtZ~+2}$Hts_#JqV8 zHAZyuRjTSDp`$mEiSZKOzGu%5wYGh*6MzX;c5Snps`uCuRKqoKYP-^yl0gFayhV=o z^8|CnaL^nac`tYVEqLuma_DS|l@&E98!^}|!L@+i-kzW0)Yj{(UOEfz+dC;L)dC3P z7CtRJ$rl!}{=$w+wXm`i ziRQE%`#7iJoU%wMB1Ddw1ql&rDBDvOH{9+o{{VLWnyz)xUqwZ&rTas_^&A4>-?Wb! ze;%ln4MNojq*hWt69u-d_BxMGrG>HQcB^l^ZkJGHmbkB({{WP2R(7^Uw4$lx97yfK z2+QG~HI$^lTV2>$clG&m^f>eGW!qp*7%!Op(rhO^cU>RYXWF(-&AT_rIC4rhtE{Jr zM-zZVqgsxK`a_f(@2dM)3|TI;4RyoHb%M`rn0dVLx7^q5IF!-TCSL)S>J=4xz1+Wd zumh>N-+pJNFkNitNzpz30DKnHEEpiVs%1agB5De_KZva05K+tgJ>v5opbLO`Ui`3+ zziIhA&+j8t*I3!$20OoMv6%g(a_B?`u18ssWJ-uwZ?C#(6;Gc0$0A#PSmz5{M?s06 z`{uFJJ?b1R?4;+(Quxcael6mR=CyKcqIz%Q64Jx`M2`=DBvFkQ>1HDL+UhT0F>1=q z*3G>pVktWH?5J8=F{0#5Yc*Kxjq}bd;riLDDymGM#Hq4q5;rO;D&&Zf8mJ(j<;NSa z+Q>m-i>QmDz_v_D9{S@INH)y?4E?xq=8abNS)bEGQzltD*Jf0isx@_7tVA)!JEvxF zptp$05{S?jV8nb*qYVE5SlV6=sE!>@{v6RAsg`6pgC4$v_^es4XX(NDUlvyhYjZP0 zOJ7+oaWjD}eByZ`kzz$UV?faqBp!;Y&0<)F%3B4n8Zjdo2~4*ZlOm^&>O9bn6ka3Y z?i`}xe6=pJ!y%%qtdzX9P7o}!s@vfWbWMo-OU((QEUi!eh0u5F4re8z9b)(Wwu{Hf zP^IG&zzvuj+JUMwT-lnQd6eoj@G6aQAv~{Q7~keV0I{~Vk0*y-xOS=wTN{J_08IB{ zI!#x+Yn5gEQN#4f!?}7zkyAiHj1Ac>Ww;guo3opAD8GyhShI6nZya@sr)y?f023O) zRPr9jpNWNDS(evLm(|4o0CD@A#5af#wE!UI6Hb%JGXl2)_9j~Z{{Rzl&XP|Os=CeO z2&xmq{g_u}{83w#Q;NB>Drqj%HvU^gx~vYtNp>N5Z+>1ZTC{O#j1IV@fmn~{C34`} z4DW%sqcVERZtPApL=ldJOQ+&190gBzSvV;;x}Wt!<81x za@?K{$}C6&P1(u4x%B=20EZh=#{fy3H*%ldQML&sJOM+iac}Bl&!zc#>@Y>9M3Ee$ zwNFx+AX7B*6D(%lHwQ?#x60oy%jbb1uEdH(ar6_&^x~S+Kv106E8aaeCe~stYm>RT z+<|?Moz4y8?Gow3g>d3(IjZIjV-%W75ftv^8?$QKz#EJ8^C0j3*b6H*mj^WQt{oRN z8Wd`b#+qUzTb`hs`IGbVBYbE9_Sy>uHR63Ir4)$I6keSjyd{RPdK(*_n;pE4E#3o` zt5m?;ljh|JB(;rz0_5Le?ayK5^TPoog3K}28qIKE6ol_~4>q@iUgvI_Y^NB7zeMbPGMrkZd6;c4WxlnooZ;R=Pb8tHB zmI;!Q%CX6$unT(?vFpC#-n_~EaWo(p>VLnaK*mega7bpdGZ4(j+>!ZM^uY`_`gTM{ zFqIh8Pc=6dRvdu7{&u(?e6bS_mYT-=P>DFAP|DPd$)uYQR5k1t{XI_n{P#E}xB=p+ z>8{F0ilJk9jRe$=v8nGQWmf^sxqi;}-}K0}ZO0iCmhaK>Rh%w~LWN|MQlSh?jtY(K zs{8H!eeqGQAOO+UzE$Z3S1v8VSaRI{IKUFUqKs-(R^~t;T%EV(2T#u$Ha5m0X_uz3 zl_uDVYhFtElJOI!p7i&cP)1~P_)o$tclf;bvY$L`Ht{4rhmjtNt*+7<2`KX9wcKl$ zRY^n$MF#RnPNuN1Ep5j;h4SV_@SU#O<7i?q)_hmW{{YDTq*~9i#>MPTvE+d8c3(k~ znKF(iSj3H}LS~NI*z8Fpi;xE^3tP(`dd#uX$3^45zIcU{Ss{xgeP&>1jBXB1VysU_0!G}|OA5F1A)^2Gf#+%}F75f(B;ig4hY3OrI z-zX(cJjHt;}8D;oB3-1l3W3e{S^a^^Qdwtq^y<|%b<*Z(~Jfn4nuEFmh{C-TPC^- zoB-7o+aq+A;;7X;eUfH$hN6XmpP9Mb@6O(MsBJ@hAfGPvr|Da3OkN7RQ^d42l_9&p zRJGUvYwkX$2?4k>9y8=K9O{~0K&bMjwJIWU6>e)yQ3XDdWMZY1TmyZ*{{Y4w`%poV z6RvUIiR^2fY9m>0UQL$gc`jE|QCARxkS?PwLjl*trB9gu05`>pF#9_)UL+n~SgV#z zGj|?dZQA!@bn^DUK3s-0SQ-QZe_Q_mOWLx`fQ-_>8ZAVyx`0@l6Vs=q?eB&G;3i|G zBbnZ>wT0Lsw6x9Mf&gS1ZuYq3ZU!vfKmPy~D~!(xnBo(gT9qz1OMVe$1ds=vxs%W5 z=k11FYvNl$$m8ogDidM^DR7}uH%p6>zE(He^56Zi1QO_sJ4YXEHzQJFMc8S$Q?<`8 z-rm>4Dq<>od(+i0$V*s>Ta^l^n=0&fHv@j3?T)$yO-}(ncuI_u)X@dlDHi~EM&CRB z`Cx`I`|at$Ni~d=)D7XdEHrAcTkJYtd-J!yOhEys$Jh`&ho&fL6ryjsV+#UKyOn0W z_v$Uw{`{~+flRk`)@o+7!8r^IFc%|9znLgCZ~ce+3=^O@k;8Ohs8DE^Gy!1@0a8ge zknTV`ZSp7Od>94QI_sZQG6BT^&9WG(;4#<+F%U>w63$n0dL1_(Gwv)yjDv=$PAaa^ zVB2Qhc*S#fYrT?E<94`rivLBsi#K1y0lx++OzJz88j4!#MS ze^2>1%3mG&lby5!7$e*Zl}p5sZ}U!ga4D zb*JH&C^GbhEV3FGhBPs|$GS5_0=fRDYaO|6$C(zQ9xYqGbIZ5xt3m9OB+l>Wx)Itl z)7Hw+(!%ga^G!+-BMw#-P+3%UzL=KhnRdS*F$@-M@j#v;IAQE*#Ubt{NZ08M?Blcg zJ~Yi@&R!EwBg;`pM9X%Lp~|dg%t(E=xwtp5AwjmKn**E}N0Gy!00~+4){xRj6Rt~Y zld|eA2#+eI$tkKHi6lVMNvWOuQLWbd>SD}G9$NZX<4{<(llgKUm@LcpoN4EVvqpF~ zg|d#%I5Q|(DrBU~DHge-s94Em?;ZhFR_sT{?a7Y))ChoHQUmOo3rr9z&(|cUk{nqI zo7v|Q<=ivc2NGwMFwGwh8i?hnqlH>d>UwB|;oOUpp^Qx1ol?OX4P{BiVQ5XM00_^2 z9OIuv$5}&0^%IDAilz?E^DMS}kY%}EYa~(C=5>x4DJWuOV@RWtolX_r=lPO_T})Ig z+FCfZ?f}$N2!pI*6Pm^cG))Je6whc}b6sCi_h=}ovIsbSk~rg@t~1?J#E}56Yh9(g z0I^$Et9X2=?G1D6+SZB+(>(piu9`h^ z#8**yQAi-V$fT$sj`ZB@g3H;7X}@WQENg_08DoO4YR0|Z15?LBsxz<{#O2#U0!@S$7uAbq+**>>0&>HSb0eL21qR8@@QO});(*H8 zl^$&b`JGeL*IqbaXypyL1)1!F#6lHYjjr1Z0K}PTXlDID^5$pTy6at;fueCaXrerC zm*$*DlTyB4m5PQ79re1Ryu_UjxmN3{z_>3h z;;uIB4=<}s;$b{9tz^zMc>A(d1&Q#08H(@BleN@~jWS|2y->B224t?v;l9{24jaqh zlT_7^M>wH)JMjJ7w>p7q00Jm1?P1GG*j(YZfWdRgrD=||H>)-l;*BG&wZUHak2jl) zcsNVF2-C8xNc1m#9u1HSE60vRk)kvJYXQOvB=g1po{F6JQ5jzGLceGk)|L;1891 z3-l?zy1zAd)@00)ryVc=dDUHNwPoRgW#iPSy?{8#0EY&_4FIm{qk81M&u zYCbw55^AAO5M~O9bb)fpEI>TP`d}>p4)7c~X!Ah_0-ktn6F!nj=nuqgZ6l_@^Tmb+ zw)dC=u%v#skc5&1=A5FGh5$&fW-ZFs=5Kwr>%TlY!LSR1O)}}b-eo`)sYfY+R710P zK>?3V_w?(Fb9#-Pd8af9Q$%c`bhX!>n_A=hbRKrWcuqR+IP!vvB=m5+j8^2>kAzzN zFJa4*bHRcbE9M?t7rn`E@BR10322|x^}$5$2`25N zfW)xykH!5Y+;zXF`NYXTm_ry{_s(--??m zXpdIt!s=B|TYqc$^F1(aa3q$&9evje#8(6_i1;(Pkaug}D#ICA^mvJ8AxEboZ|Q`- z!LKeE;UjnJk9a^xw8Sj0iSjne<&r6+W+62VBX-ztx6FB+Aoa#Qy9JYkj=6D(&&g7> zq=S;KEbU2Ay9HHKc0Y%Gmuu~$Z){dzFOuOWTB4-lTfl1tXvp}PB6Nw1YFF;YjhlUs zUyE`F{NrO~v;YP`GH}K}OFGztCFcq*gY5H*VyCBqg{q^V6Uk%?XOY|b2KFuLJn?qk z?Vv1lNaOko;-BOe&9vG)E|}p@FI9BnpR=}E+E;TuU3A^@3#$eys5U(|JiktO^N(m@ zz0#i^i_Du+W=ERT_y@Ap;T{z3G`$@ED1trZ6CD<-t`$Tc3XW0I1 zGmM&s3bg}6%_AL4=$yscz9eUdhX)WmiZm`B?N2nU;+*QIEX?MmR-%-{PbED+ za+L}!*U+PNB!hFm!*Xqk?E;aSRKS&{c5n70;w~Vjrq7;HH0dl-$3%ljk|j`0+ifM9 z%B#!;VtI@>%Ukyuj~q44H|>(%9bt9v1@=wBeWCDHRhDsmB)Jb1&}&MnINwx`#E@Fx zSgAla^&oO50chrJF!q{^a0Ynr<62;dHP&Yd9$sr`?B}yeZq9OeWTW1UNEIV}iA{yT z{q@CC;?{=ct-`$mxJ-aGO>kQMHgR850jA47>q4hvBMY}Jjs`)Nx=}s0gkEey=WaTy zs;8*VX{F3$uc@V|Q>rNq$mU70xA??cG}#O79=r1%_yrq0yh}uTtbdCuYdFe_x`Q&U z%VxVMhDGqO-q*O?divus*4#bv2;+~$XQfsUVx8V{r|IX7 zs}{h4URpH^>boVG4Qz#Mprct5F{E1F!H&Rl^&GuDabc_mvOW3Wdmf8zxdIU=VgW(X zV%E9bo$p|Lj_2v>FyUn|>^Y9~^pKp|iq%X=fh7us)pMkD9W8G&VSgcj`*2Kok=rhn zqO&uKbqkVip`5V|q-@;3Q}iF1g4!HU4f@O}iKO}`O1*`wpa!vSL;bx5*qg2%AV50R zd8T24lCim9h)%?KiQmtcrZ|agUis(npo-NvyGAst7B)JVdfRV3jrQ~Df{KX~hb6>T zs$4)ThHI(tmDD^o>woTg96D(y9YPq$DG`ApfX(p(z3s>YZ>b!;aV-~247cO13MveQ zmWxsa3PsfE-oOhJ&*lFB<%kk6>+uNXN`*kDk;!c~ZHGky!rz^S8e4zDGvV#-fSSU3 zdS(&?VQo$jx0j#2uWw&X@gQEQ$BKaA6S+r{9`+#YLKa;`O}ryW0DS)dzpf;P%m$y7 zGX@kn@_{tcA&FjnE<)+DrH-3z=0boyJuv1t5B&twuaWpmENg(ghgR@y4Ro~(^zq7u zRC|TFl&Y2{{YCZtalkMWeWO@moMNe+hQNxnc27mZlr&K+P{G}VchlW|Hr5c>`mwdo zspWuo+KB?3X~c9^EUYZr0BG&s(MnvJ2$@iT6+<&J5*6g%U~S8Y#y-4M`;c1HDCR~zN?z*I|@_mZNx06OeQAFr*3DQ#{4 z0M2tg{{TzII?L^C7f7Xbu8XMq6U|<~Gq2AxD$!L{nN+;y23xkIU=>)O!_BYC$IBRd zQwvN$pwD+MYlsd6jdxoXVO3I*Rx6rmYnofeBnW=8wan`gB^32D*&)0ssnECg9Ywn1O3aoJ_W)XVnolgx zI&oRgZR1UOLg{`7%)36#+rG;yA#os91pVr}t9WX>~L2L#08N(pUGx?yVbjfnsN?f*| zE_0~QR#+A>NN==nE2g2TnaeeJ#^+6|jh(jQTn;C;9XVq=lTOs@A}(dGHIH_u z!*FGsQ^EOOTI(f!Sgfr{m6y4uqlr?*ufBp`;{0TQHdA_gUdk+NiD`mQT^=|sODlIh z;JTWp4oHs(@g+WA!ugE^ayv~mESYgm_R~~2B#2ZGgcSwd{NzQ)m~)+c$fo$GDIP-+ z67%yT~qE5?Mr&%d!7QZ%{pH+Qvlev>YliiAsH1~1;TTL3lT{)zgHIlmAr|&q?`{78&9}bJ$XXa!9m6l5OnIsn z^fevVA#km9`9EmxJyG}YBp&r=md&*N*E7&8zy1+?=do9qtc;`NiShqioEByJqN z)d1Kb*oCdf#95F2h|NV@lFj#8Xry$eEX^amh()&K-Q!W`am##5EX!U=Ib~X(MSYJ2 zppNuaZ?okL^|}1D)lyFck~e|}AdsN`SNe79k0rO-7uyD~L{Mr5x2>I=HI_vCdFoeL z<~(ad!&yGMr!hriq>mNxr?HO+BvXI$_@&R|U3FYr+Xrj;FBS1zv@pvLdW_m#2J(w? zAZ`Hj<>k{Jlx+>0y^dqfdG}t|{A=nh4mJlA3YK30LVQ+RjTheg{{Xqeni${4X`Z2d zRfa?<=)@usqzl-Q*8M^98;n>6L7aD-xMwMXn3TO`Txz^v^FI8E_O<-+40D=K%}nmZ zN1r5Orv#Rc=tx~I#ND?HTU}t$3n2fR`Zx4MY;V_(tHJ_a_g6 z%g&DUr&=F`E+n>vB7)5Ab`lF4Y6i=<{CfLf>>5jho(S`&Tn6ftkSpQWWniR@yPY95 zNw6UG^112K{{Spm6)}L;hUEG*(N9aDX9TvzZ_ttFeb4K$!(0LIihA_j&jmQ(pIC?l z2HAI8+>cIPcKonbWbW4wCy3#1af zl9yN}#NOw?FR&k-&(z{eiKBewK`?4{=%Q3BEG%?ey9Y_ta6q^mhb_s!TyqJMT5;CB z)ELb)tg+PC8>>E+>RGM5$Cp4h=Y?Ln-aG{{)mIP`l`%%9KJIp!)augriUpkR!9nOY z0G@l>Yhp=t*>JA$<%JKbQ(X511tN)HDKSk5zkwlB2XVfhZ>rWb;<%RP;3E%<{^y_%2w1d!I|(`EwrlZppJ=cx_15Byaw& z7xim%V`g{jfAx012=*xyd0bNmQ&zTE?Yg12A?NG9ENwRT3^YWqiR~8ewzhSnjOvO% z7t?XC56HBS#4$!>*&(Hh$4@SO0Q~(injRi}Aaf}Vn7jpb#U0@u(X*_j5{ony6T-&g zp&%gu09ag~U#+jc9Q!ufSN?`6PHkzgG%vR9$`iC)o;jk^OeBwA^GUhnd3v6>$F;Ly zbTsRCd}xl%?gHxP`fsw7zPgf;f)Czm4P}b6Hwk&OXbgqzDmI3v39uv$e>eS3fQ(=tvJ>t{DhcBJV$!lBqW6f#Dx5}#A znwqDFGkRexTB@R?{Tt?gTBdZ!MYu>C7c7mtK{u88dWD9O0G znK=4@JXKkkL00lLorpjz!{`9%?|dTAeX}fYh1_CQ&$k``Dcr4oWP*A+NX*MDBwb2$ zu;hQR_s3r(hJ&qfN^k&9x|~%%iaS}$I3khhq5HFD6RH0I+sOVPw%psu>^(^X9O4@x z)dITqgdm$hK&Kp5AC|*Y#d+pund+L7diOH4Ewaa9U@dP?&l&d5Wxb(jm^-~pZsbbP zv9lHo0N2%MoG;n5H8pTo<|n_acdEEk5V_=%1{&zB{3qG0 z{3#N{9W0fojLqIT1e=@R%l)m3tYKq7^^I!GzH8ZiGiQ5T9%=hoMoSPeHk3TVjYsf~zda}G z*4WV`G|4sV?}rL6qF8|x3fV;(gcbx{1&Qb_fA{|YoHe&xJR^=L%~kB5G>ks>{iCap1lRHx2PN7Lwqz8 zJ)r}PLXibHW=37m8*0)wv9S4b^}$_s`s=+EIMNf%O{_@BgtH&V$PkwUm!9}BAV;RC zpg#dA?&);|Cgs}1s5|Tcx$Aw+_S)FsK&P*=i7_Eag%Bb&^p|Z(7~5cUi|uOxW;i0# z5a~i@p(bWfQG;t!Z7L0}1+TxA{#)SYa2fXL=(qx&rijTS4M$VR$6o4nTXHtoTVdoc zZdidAK;5iR8V(6W231wEhhw-F1hKFu<#X&XZXt$a$wn1A)(Mshz9@pp{I2m34+(Fbu zn?;g7bx^vEsN=XZ6MMHH7ted2To>DyP(aqGIV8T@>^7f~%jH^gO3Hkyh(>@yiuw>M z9f%kAKkR(4`}b;AO_LvL`^K_8RxR2uADE3qNg)atcX1nf?swa5fcL&LHj8Gk5Z6~& zQym3%(c;OZX1UjiGkNn$wm{wG*!cBsNdR1)M{n)rj9Cvb+V=i=d9N$9TRGA*}#RYr3svv$doWjLVk895-RCfJp#Yv9~Rc{9!88quZ21u z$ny-xFv}_^QeV6YBc`cnDuf|)kux`W$$lY!=?c~t=Jr^;8aEB!qe1V%E%uW&*OVuw z%R5u-<1eYMpw4QaE{dWl5-H@hzl%vQpR_Yi!_#rdMc{zBY2xs@*52!4{fj9Gnba` zqcniW4-1DqW~p3F7Hz}jpfwQZFC%H6yBC&MRwuhs0kH7_fByi9w<2)6V)mCf8ONCO z$3a-KXmGnx8sMTXQ=eDTrByUq<;^Sp?WEn%M3>UqNg9J5@PJLUvRqk!D6-leXu?6jD9F zv0(*6fzd!D-t0-tcF$`-KmstF<974N@hC(7;|Vk>M;SEvR(2?7m+pEfBBP&ZSy=C*pdZFznwr%ChMsrm9MYmKTT( zR*_#)X*{Zzadf=B19j0nd^f+5Z3%LD{u@GSpSxde>?D$yl^) zb_c_A$OZsk%ceZG)w3I0K<1e(K^?4#I-%6O*U}(j7$=xn6kMR)6o0v*BW)f zQL)-zVQ4KFV2sya_DLRh#+{zQ#S1|rQkg_eB8_a!02j9A$EE!Iv1Z25+RH{QF-Z^S#F*$Y0Y11j`1$Yp@a$N*L5=TX|ol&G~+RPnQ!W zr(SA6O&OJ$0DI{M`gc5y{+GV^pAZ1YJ>Fi(Zp!w0PWmKLnuMwsPcf#z9=nT=mn?Hh zAISMqK!XTY(9V3;$8tJP6vLl+<EzJIGFt{R_qif^BHK@3<0oW(k<){AbOMOissDh{TR{x5_& zNe4eQEO=n2!t*uBvW%-EmTbehGfgVTBfpDP>@=6aesRQ^ z*^y$(YhXK$OCr zc8*jnszOIy$6kJBz~Y0guei0*?+asRu>u`G)!4Z%Pf3;0QBhNP7GCm2MH)cdSli#v z^2JM}xK{y9SG5xyaU=;E#ayz<1JX27C|OWxDAwQ9V(4g)=9+5-T1}uJ*H|nEwNA>Q z&9k|43Rz{2NTx3&a&O)p?Qc77eJ^`qR<KjPW{JD%WQcUPLGtT{kO2Or zf+jQ8rDlDhtv+MJ_4KcDvP8&A^KGrM#97%j(j#0JzQp)@Yo5QW^R}W|n6s*?Ic1V@ z1e#08!~thF>w8-N0Q0^r*vJhggzF9~>RS*LEmpj|YYHP-kAYZT7mrPu3;!M-m z<$9|c02-|nmeQ;gun%ykIf2j(x_~hET3NNTjbLx>7%fIb6hZ~LLh7RI7f&)t=kLh- z4f$cfm%3Vgy$^Ym@NiEg$H3(HfnB{hkNEY(7n`?m&YrwVU=lbdiY>R&LEBaRcjfcv z{qR$Et|T3F=SbqD0Ui}HBd$x21;Mcc!Y{V_{_b#WgI313XreR;;0Ur?b9DvRk>_%K zKgJs~S=TRkQWVu!F_NluvvNBd0zkO_-Eq`4KRWJ*s+OQe%yv)|C_{0YRnT{xUldKnyPhvs0GzuGgf)4f^ z&i?=_9C2vGiPo`F9KBUBLnXDCNZHRj9j-o?C)Wfd5&*|skdq`%DVbxL>RLPal?Q=2 zAON#m@&tefus)dRG2y3Vz*+_EZV5&qHi$rG?*PTkP&v3T$Cjvx~8t>+!Zq#M( zsYP;pk+UX}NlOZ4kb>iVWc)_ZTK@{Y*XX;ltcLSqag zfJu{gjbP_k*YedCGs-m*?Ql^EzB>w=m zbEdl|UoI}I7}Ub*dU&mU&yX8~f*6B2aP>ZDoXyqju04(RT_RKFznOswv zX72mRHTb*7=de~Jb0m)|<3DWL?J5msHOYLM&cYfT_`^h}7lvsw zY8kT{siI8Icy-As(y&rO8)&0ZYv=)WJ%!j#HAp~W0cHlq;@M?@5Z0V=nF27SFjmBq zBeKwH>gg)@l8y>f-z6;TwC#CXX)GFfnRWs=khYZ<-ZU1z%(t^_w#=D~x15bmTmhn+ zGWN8(ed)TT3GF{Jm}QS$Fph?vqP11~=N5*YZ@XUl!cE-3AXj?Wb4ves2WB{5m#o;q7Fc|%=dUH1fwUiYeNU~@dSMUs+t*+LLfKNm7=Bw~DuVp`TY&S@Cyo-3MMM=f() zjoM`{X~Wz{Uy^2#$dxpXblj3OkQsUN7CUs`%MY}(xNeb9kmnL$r1n?Yes$Vc6j0IS z^feMwNirn$5XMTxtZj4o<3DNI8ME1!oOdVKSi04~Wt#o7>_@U}pR=ybs5owpiBgFn zI?(LZL zVx^s+67zxIj~)kq73(k46)G}JA(Wp0Ao95K1NYO@7VPf2%(0?lahdk$iuGiiQfDm5 zBkTfhHor}P<$heT0jxB^!wO?N#~ubk=R%K8+A0R8QUO01_%|OexAof=7}zDQ8~O9X zX@{a#HEOfv?2;oDV89S9%ogN+e!nj~UAu9jL=ErI# z`Va4g5+}n$-_zY58OlV5x(ZrL#M|k$i5ELt_sqShAqdD`7C>4z4@Z1`@f8WCI&IHW5nww_lZ zcImeJ+TWi3_^wR>y#(*$*1eYj7==9vE2*^=Zx{glSLN;3pPo5{JMqU{k;GIjnm4m) z1h0nH^EbIS^amDstP&|DITYe0@8q;=8x{cdwfy}_KTJuJM7K74BQ;Iqnc)5%+?d#; zQ3&Kn`L@?9ew($g@8yXP7INZgq1$?)w(SkDvUA+%22hR}T;2?=prUAKDWz`qqM>XU z?O+3R9Jykhv%~`FrdUb!EA#&V)i#H1dsCb+^P)ABc4?GxEp0t)*^||*U^ItF5tFg7 zza#Div5Rk*CEYdtc9e@ttcnq`;=PV5OvpSnn9{ zPacfQqdLnZB9aEWK+G24Z>aPGpRWAzS+<7GpyRFyh2g^J*F~9eAKH_QGCExujVmpQ z)!iw%3;0x8!++{NT=&48rcKhyo+NcD0Bd>jP$2tkedxm#d;v;Rb zm2d(}Ng_O11G`jOEO5L5z;a!Cz-t7mDruD}W0IXwBnIloO_+hpslu+^mX8oR@2Cq* zlXY4%8z+wJCR+nzW46Q#bi~=&!H{He_V`s^agBQ=(B@S?c0J=MmLqlA`j>7006ToK zajgO)A6;%$943PeV1dP){{ZS)Vui^=-vGh9!TkB0Tl-*|jSilQ8~*^AkTvMF`h2)a zFp?Vy592dT$z3|{6yQ5mg zR=Pn-rpzLwCZ1^6puUH2Y{TCXdc4y?I1qqwE^FM)p`+4`vXDoJV#GPkipm&@{{0p` z+U|cAS;DmwK`DxBj|=a$?|)IZubwS78gthr=)Rc4YVo^Tg~fTDbXmrEQCS-TvOcX# z1^9dt1SZP ziG|$RY}c_Du<;*z{&;h2=0o4_=Y*4j&>1PnrI>0Bq=H+0hnXj->Gj(U4K`r4#+d6l z@=gGdok+iyG@v@gy-2v}>OXs7ZF@_N(}eNRO^Q`YAr+cNBK-*J0N&R6dEt=f0$W;P zG(-(yN-L;XTvl6!(R_^WEi_=3F6{1K z@hBH#>$R=ta(d!G5nNXof>nbf;lVN_vX>DOMw9V1&gTBMJNjYmY#OZnqiVWH82KsH z`KnOD3~I5BY^W4~BSGO(eYZbML!C*LRhA{^#khAhI_9!2G2=Zjw{+#0FbYBC%mRM5 zzrHEjytH1a*0`-=TV;r<#WVcrvl-oDeM^5Ej$U^Cexn%#{nJXv505-nHNCXW)WsH2 z-Nai(uXVoP(t3IBFgGQ#2%l})N~+r_5>cpf;S`Cf3!vPyEw64@_qqL?83awiO=liT z-`k~BxaqVTG1S9J09a`@Cf?+A>3(<@h^PnA6~lsMsI^AMTWU5E5;-;Y8*jGa+=)GK zVXlWdHPI=}0lqC2&|hclpyYj=c8|m$FWx@u_c#D;!dp=y!((<)w_AJSEm}a4GBKwL z8sn*79sd9;x4pF4SmlpZj`nle%66qKHgP|9NFq}lca$ouahtWT@iP$WPf>nD9&xOF z^3n`c%n#qMlJb_XYhn5OtMr^1#TgD+NmKkzdfH8B?&b9>GqT-KbqWQpdL{05vhA$x z8)tZ$MgmCe1ZyQNw6k-jVamRoK}xkS(&x=n-qch};fvxF$XmtrJDrKx4w$HaD1Zko z{j1ETI&zO*s%H{5QC*PJ*X6uBQ&zFjh#-zAbf8yjqV5NXk~Y}ybFesNrPr`DHUOH^ zG0v6MQUgt1PPbyKdB#a!QAhkIF5!7;XK^gkPozKcL?$FvzQ7kUY3jsCNFiCUZDduf zCENc1LV$7YHu|X+&49+q<;8f(0)Wb`b!UD-Oj3t^&g;F6i0 zp`7dsHGoA2uKmL1flA~s@+Nq6Q0Z(>W$JO45ajUAx%OEWKw^oZi!_XCr$&v3jkhI{ zbcE}27%tX0U8S4u+;NZ&}7gZFFj z?y5rC*8`&B7~7{IIhm;3Jy6|ncZ*#=t5VCj%9?=E!6H%jF(Sz<%r1q6fYez02u-ee zwd}j%=iXx)))z^S;G8L$9HAxlM7#H@pgpK%1C274%~r0dVT>t>p>ijkfdCV43Mky3 zc2EY_whhI$;969)VII9ykZfB)g2!^MIH}6GsyOQO<@A(ru&57Zo>d?)aD#D3>7Vf3He~ArQX~HW6qY*4EFNhPy`;6j zmYNv1L)|KYvBjGQeak7zYsV@?Zrwyyg5bJocg z#fbF(0Bd34@3bMUF*@Ja#4VfiQoWX>NHntz?nzyMH}by!0H*lhUe;bGl_tBzB08hI z34oXrqDX=>ppr@0b-mBMzF#~yXS5~KBAd1Ef?J3gt1eMeqD6l3NZf)t5P9|b<57=e zL<)EG-@qm|Tp;VoSn1}xTHZhaBJM~x@)qbncI$>Xw{mz9M7o(nSPhtf+K(j{-1}eK z5ZQ{Ugv~5roN4E}*_P!^$1&zfACTA#2|2;^on^n8>53)PUD3tKnbCri%GVqJ0Bl&s z36ME!$w(WMR4lQCQ2J8VxjXH)=bxGL`e0h<1o~m?(Mh4Nnk!c_%K(^oLN2S?-k+hv zng}7THP-kYlEY|3s-0-lQ6k(~TE%ud4ZZM(4;FgY6%i6)O-Yu;0)S4E0T;6GYm4u{ zE?<@T6>W!s@;0H+KVmroi&)^~F1PT{lLx(R`!)mu@dfO}y~v=)9G zN3UOGH->);ps8wTsVG{Gs-_o57jE<7VX(RX03B~^P<{7!n%p}m9w7wBPj!#>%h_I0 z#?h;5ik6WSxhjAbJAq-)`4i{qg#EHbREG(q!CXJuzuB&K%vm^Mq&$$w5U!)UShbgH zmOI&f4=#8gwC0x_gyrS?tfpRV2}Aoc>|=)ohk>8RERJ#;PfHe7aK`2&XeL!277W}`q zEHu)hB=XT&?sUEyV_g+hIC`w-P`qTM5Qb(Xd`w2IzI{K&EVj^Dwn-l8je{p%t7plx zTF<#g@hmbvfP7^9@tQ~uCmmt^R;E}Yq#|`FnXCdzh!zQzO|` z7B@*P!-T1`4kS@>2ihOBAHEOZ)RkTH!Bc64`VsJ(bLMybiGt{;gQGP5uX*&%oVK{m z^_g(}Gcu3GZw<tq`4$8JW#-y_${4Q=5fWD4OrK1%aQ6jGvKhr=Oaw)VZb zpEJ4kvBQ4?=@CrwjO+6Vfu&Tq%Lql9P#OqQ)e1!$ zjqF*24S*M006f3B#K5CQ9CfS`jwB_ksw8qLA~>Y)6;G0rr*DxX>xq_;1kbNk1WbdT zze&S&X*<9Xi);n0sgyOjbl>DL-VO8Wpi~Id7)e<>)RFE**65>SaxZi1)7%?!!>R~? zq>6#vHK>of=}{V$3XzS-(l++zbAK*Z!c5G~695$$@lt7FCHz3UH{#|^_ao+67VRjjsuxMy0{OCaMeH5D>47G#M7&!IvS(dh?{ubbom*s#x*glW} zTaJErJny*M*Xht?h^7fmvcgfAXw-OEvZ|4PHY1<*{o4jS0C;Qdzx1qqxT>EWFpI^e z?gfUBcCokv())gxhlaVu(NRpb=o5oObW^`}2gb))y9G^q`klRPhBnM@F5^@spqVBI zWV4t3`!~AO8S$&L}g? z(-y0cgt=7&Y0@q?=WBHqCzdGf4!Y)xK>|2>`{TuYH~g93cj__)M0?Nkg2aByc{NsR zPXu*2q)$N&Q!+D~&nW`r*c+^4l7r0LfCFO;HSe?mh5)ZWSYA=@EMcUsq0O?$DmZqc ziUmO|F}s#kzL8=@fbzH-o__bmvuAiXZ^tE7mV`R-G+2KM@UeqDk_^EVq@*l_LXL?#CkGVQPHV8`=C(PUpxeJb_`L4Em zq{)rcj$qdgrj=Ig>_C$fI^QX0fvGrtf=c|xStKNf9pMMSE>s^f#D;5n0oN4`t14b+ zf4t2*EgL%`NDUpm(8^vblPAm#LpOMy5l>GuUrRAy?8BzYJ$ybx3T30MPlQOzAT&1) zyXMx;&S*8y(KnUm`NtdO(NxiiYUmniBza<6chhSzsU&W|X(w%stS$yF*^7Hgb6Wr! z<6c<#DlZmxM~o=B{{R5wIn7N)CStap!D76`xFb@s6XwiC>^CIXY)&pd$*u-zl+tAI z$aKXeh3$s}8mhvx-pi-S^L*Ysfel2|(<_)9*`{G23>ck=xOOC8`bS(gx?Oc+FA|L0BOub&lx%Y08<@cKO>JF z9?JsbOpY0NzOJ39rTdXk6S-iIBPcG;TjJkydzL4CwivSeS49L4bI@b(6;HAQ$pgxD z=C!)$m3VTBYI=E!4-5AWsAL~>sRGAyvlRpW;cM@UpH6XoiFFJbp7b-9EO#Vr0nM}& zqT#;PGmOfnvxoCaifFPr2Cc428ht?)7-IXpZsOaQl0fC8-JZY$VPNxh_Czwj#Z1d> z^&u}4@VrHyV4S9VJGtiYWp3WK%Si}fcL$RdwTwN?y}=Mw2u;)Q}Z`HVW!&+mH^M@-`R8ly!xrnIO7a2*5z}8p&^2 z+K03`wI^DY7mxU}H~#?FnHEV)Pcua{nwm(7A%MNXCzm1bY)!FfvIVtt_uyMeJF@Dn zS>9u-pAUprJ>woMs-;Y?hYS?6Drjoy(_WLd!FB|E{{T!)hSQA{~0z-Oc$8_OR$Jd~E$UYPD>anv*-nE}3r0HM?D= z#{29s+CEl$+7H>|F5xM@@|mO3P`UnVy4pAti>i~>`w#qwmGS9E{>;4EMqD+GSEI21 z04{3?WwTE`>mK7Aq8=B@qRgrD>I~y5C8K)kX#tHG9ll2#MsUxd+05lm+Rk8 z+9K_so^f6)NTJQ*VWmlwk>NVJ5M0D`?0meFTu1;+}aa%KpOTovyR zg?VznKskT8!8Dganh$+dTZy4gQdP!PVs1c^Ko;mWzdi1Kez@RoP1ri(5k%Krl&YB4 zc*-KSrgLDw2vO#G`+5FEMe0p?{-H%bNlnbfh2)VVbx@94!Y75 zq@$-5X)RJm0&-%{%b5V%mgMX)o3uEWKt0#Qe!S_myBg>FQghA|pv-cH`-;NNr%(=d zV{!gJE8{4WH;q8RuNdP7zS`C*Zw8uf6sJ-tZpj|~+Z{v?Q}x@<_^|6nk#_Yv`g^1i zBo>8K;t#ZrXEkj3W>1vKB|{dCbf1Hz@ASf0!)OKIWFCD$%q2zAASwqF=AEZy6td@u zK|HObcX7&Hf}3n~jhTSGk0Gl3#s&7zvT>X^0sS8dun3~7j^DVJs*;l^&A#_dnbo4p zBDe}eGm#u>FJN?l+C|NqdsyPX-D9gfY3o9I@IrhpkSehr)H_<@-WtuSq{_1m6m59Y zdV3Jw6;g=bg+Lx6H#_fZVymrO?-4$eTy-5$hJy$P0DYnJe7sR`y*sqi*VNM_^>r<0 zd0J@3f_BjuKu{>ycaBNDtu1h+o&s_C&`fJfP3ErE>}R#?leB8g;);r{D&t9+)zif? zAO@x-Vnn)poa$lzn+|;Q?QHKf0x6#n)_4Ba*3R{2tD_`Hgh~^Vk!{E8 zjNtIs5-KsRX~Xq~3m+ZU~LY4ytHr%ou#Gs5Y>%l97iF7pjI&zGr5&XHqyHTe@k5L>5BsEgq#Mms^Mm3 zq-(uaE!wwe6HxGtRFKpO3@!{>+TG$YAyk9?{#?cq+hXzoI2=Y`bRE`>j?P~ED!IZ8 z;PF0XJ#9eMJo2-%o||9Sd)w!~Tv!)d2RZWUBCF|tPqGaHFxHB@uQ)NB{_=fv^c>&XW18o3ytjpZ}AlxNg&8pz$n;lYjYpFo<|lK>oDmxjN}phJf#uaY?{zXfO6i5 zN0`H@FCy!T~$~P z!dPt>X*9QjX>so&Axzi!zy_s+FG%VCB{9~s)mM}DuG-udCiY}!r)vVg?f`? zhCpcDuFEFU($d|;MK^q%$YyQDP*PL0n(h(qP3|@Tlk2^{p150_Fp8aP$v)3!B*7VL z$z~tEWi<_8~zQzn0#kf7n=H2IjharL~ueFHJ?_&{UQi=>u!u zt^9@zG>1giFp29*d8Aw={P1Ux}}W!xe$H@FrA@5o%X{)4U_)*0{^HJ{oSv;LP$_D3xab=Zw&REaFC zYNrmaG>J8vsZ(vi1D`?b%QJ4Vi+Y^3hob!X{zzY8^%CO(po5P(E?)aL7&sra{wd3I z7#l2}7yG&_x>RXqV%klvUAF%KwLrf3^TENEtpxu7a;_iM=Pg>>X2SuDv{z!~RaCKM zF&1!DnPPGl?EXp#>C5N8t}nXuf_(n~OE8B-090Nq%GWW9sv0OMqO3xfy7-ZIHWvP( z2j}U95FJMzTAgOOgtnxt=QX0KXecIyrj9Ajpuu$PejQipT(-la^0CEBOU(s(9wY-cU~}miY#nk0Q?H4 z_M{|=I$GSKR*q?5k1vQ=m52fks{y_F*!ge1D%;y#q|dq6BCfK{z<77>Sms09y=`uN zB`$fEEqpUnv{5WcrQ<*^t8YR#3$(Lr2SLNHD)Gr3m0VAxF4av;uryEWE$6+oy6hBH=fD$lLi39>(ypGp+djLa%|yM;-;@3 zc5qm!1g+#I$6=<+{{Wc55(Sa90FWt^=Z^2uP;3gF zDto&Vw!?kxWABWuoq@JRu>{nCL%?$?<)a8V`FZhNmG*+|Iy~!+zk^X`amz^vRg}|0 zvBq0oq>d5SasEiQHJ;Mez{`dmC-$>q?Wc%qcCcGN+5Z45sE30pC9Do8o`1Xqs0|uv zUx};+rZ#7@AH>4f*j~ckBhi~0){kyxLZAVfQFp)DZ?bxx&A0&`d@N! zm9*@@x&WvXHP^o4we0N+SQ-ru?G#V=L#<4W8jS=7JANArTjhV5#x<_a;RH}X%OC zD66R&rE1h`RR{TG>;OFV8?ha6=yq+U*2--~2*~an&*@|B7HxQncU-YY*fv|kQs$kU z&Y~Jbsh2j&rFOXyXpz>Nd+L7n=WXn_+iUJV*^Uw_*KZ<+--no4KswBjGhTLU_I~VF zEy(FOlRV&BoYOi+RC88Ypt0TN5d)>1n}r7F)2=g(#}ncJ4qvkz`YZQeLv~K>c`QS> z+=iEfJ4CDF&d>hm+=xO+!?n<>#F1M{q)To?TDoe5c*OM(R0}%F1?5BP2`0c={I(c%jiW(=d|iO}>b{fo z53N4TGiPy@>sYEDU&hkZGzc~)#9VU*_pvwWd|UqjY0L)jo}*t2>I~X1L04)Tu{|np zshI`0z3sP_!=Kdi#-)|3h`qa)uDGo(6RzsZO<2;QE}=o#u)d&nu^Zo&@nw#PY|n3n zH(Ejkn7D$a*j_!zQZ02-J}tff06a_JfDU@!t;tu5Ow1mLwH|0AmKz30$_2H)5$Cs4 zU@$gv88cZr!vxrphjAQCE7Da1b_{LEFyuGet?qEkR+q3wx{u-#E|5w)MMMNj%sHrQ z0u6<>`S0(EuxTvOM5S3^mf~cmLlA7J(2^0&0H`G+v zTb8132KX^vjN?0m78YFx&{M($^R z13_Q1XWS!N^jMeKyMTC;vM$~-+8ovv6qPS3caaa}Ytlgi`)oiL-m~AUFL?7NZQZ(;SRKPiLCC|r5Am>o+CvAhxq0kuD*EZky@ROohO=~ z#64^``Hwtb+3bGh97LLH6s-|jC8kIS zAxP93;EP#O#f`p$+~U|IkVZT`*SWBU5YdM3g?`KF`=0^O7?0-faHD3i^%n%5T{>Z< z&23+RUX`V-X>l+S3XIA)qeZw9Fj?eh1XvMuCj6G(E>|EaKNYakb&e2Y&b$D`4l zBP^A*Z&NV5X%!&&TGp{|JM$xDalgj(pdmV>f zn424SSvZi~cY4rby*|hF_uG)kf#>YC-X7u)zfi{^W{fi20n846Qg-La4xH_W7etEJ zAT{p3i?UlAM$YwTr>-d~hdLN2(HJD?ALN@8&!?5J_#jJ1T56mYrQlSdRC}-kDJx)g ze@H!V>Tm_k5OecP6~rkYc}9|O<#hLeNV=?Tu<;Y?b8J8`*&J((YkKH0DattJtMIH$ z&dNwo4a*bH+uxn&`l83##7#ftOhZ?}f~dSUHknLUlY zYm8Y707?OC3k!1R^%zs_8U)O1P_(ReaNKcOrhCQhQz)m1w62VxZ?f;PKRwCY8HU)q zDH!g<9=wS~X=vLzHx*TG{=Q!NP{i}NJ6oRKL*>)0hAO$i*k|Um-1k}#UGk*T<=z`9 z4xzUSb_Un!=ts;SY(tzJ15UqQN?O5)M4+H(lfu18Dn~9{{{Ve3`$q65m=VfGd#TM? zYewW&8VmRh%z8;;Ii2AnHvK^6 zPx!+a*9@R`F~+{~j5aYuDRRQy+B&NlRJ#Qu!i&G^0QupqYiUS1(EOqxDfIb!B#JGh z_d&0u>K$0}<^_k4`C`lfXPfS>t z1kA>_drDD~D6Tz;ae7l{wN%y9cT|k#c1asaOBMjy{{SKM^f`Z0vjB%hMt`rB@bB`= zFm1z{1i_8yS8jcY!^S*9ng0L|Rmn-7cY>i6H`8-)81w0NJpsp=w%K0i7un!wXh){~ z%fi{)-C$#>t}8v@ZrV79v%VwAsJQVahleR7n7wL3UPWfG4DGd$vlX}stA2uAw1G7E*+rKm@qC>2l+5A=db!;O7g#QydQe04}nv*bHT1xkXf*J)BZd zRTS>2^Aj0hHu#HtiP(AC$EnAi+QDu37({yX9=I>)eka7B(!m< zNZEDj)JPWT*XnR~Z#IlAi5QWr`5p?@lSP|{6_@sz+AJ9z928XUv?etZARuWZ_-;qZ zxAnI}imVNJ3~n4dWt!PHS|%#AuE2X!%DBg~D)q|Brx4Syrmm!C)bTShJ?`AoOp-d0 zw(2?TJyyv9jdQ96IhptLURP^l$s}jZWc{)5l-vVJL0jLn6Ei!R175_UYJVbpBwUXQ zMl3HX+NRvl2iyk}!yL_bWD;6r#74NP9$_q_fb&X;QRI~=SYxQ7Fy#VMe$JjmQ z8rnx$rbkpu0Foqj8ci*aKmbsAf7J8F=EwB$XJu$7 z7?LrrQ$z5mZ7z4-4&CIrBZ>H*A>&>+i?oV_zYalJPC=V)_qx;}g)hmZk)a!IBZi@m z!HKr9`=QNorW8waS{-J0>Q%G19@-a&xDtw0bg!2-r*?x-LwnIjuK9mCAjFQywktdn}$xKfEvA72Q=y(xtiBbR5sN*1&CKGQ`du zmR*o_qv=AwL%VR|I<6Dox_q;TV-&gFWDOKyRH{-&bf9x!Hd5PLnYrY*HbcdYo%ZXk z5kAbmMAC|z_G|k#QCGER6!8T*%|i*19#c)knRO(RQJEwak&T$ElEzj&2E~~27aQ%0&$AYwo3iG`H}I#a!i8+u)ZLTt zgYb`QLyEX+I+_Z&>ZA@8qt+Fddt9$Rf9DxrY2y1`2Otd$^2~9NRo}K)L07z=isa5{ zmTM|iu98N;oyCd&0B`ewv1_W^M^s};KIt}|BL!P(bBKmZ6-7moSeEP!mvAf%{p@Y+ zjh&vw&t+-RV>}zs6<3LKjFUOaa{S6f(VS(j(yZZ0dyrR3kT%tDFU<7CrZm~KwBgZn zSogd(JoWoQID3U^Yj`4cs$oS2kB3pxIoWnTR_pWM81@z)b;Y1elQcDxzY`n|HK14B zY8c@))@wJ)yD_QF`#`0NzL^XZaja?_1F<7qj87{K`Hk#07(=#a*)^fLb)Pw}qPJ$| zKf-DhP8;J4vx56AeBzkHmt@mNUr$d%GkB({4J=Bi1 zg!?7}a4H34f<}~~7aEw7ZcmHP<2xjkT?Xk566t8~p|zB;E$SJ@=xT43RoptP!n& zy~6`>ZLXksSXlnJa~W_~TK$F3B4u;;57V}1R~fB_ z2-MEGFF&6Su*R5uF0>702i1JT z>YGio&D%D`am{L(c0)~38hz%gzAQDfsL}x(fb5&z@}sqWRYsCbu)@Jq4((J8{+M-~OmFGlilf1Z zD<|XLHRCQIrJfA0FKSv40z?p5n#X>db3aULS=m{{yvZfvwXqJ8^N)IKlGEAZMeTfZRgCBOW?@rLNl1t)sN{|N#apoP62|uH zbNS;f%?%;VZ~|cJ55`Mo%+4ZxkxtM<)6l_Eh^$nA&N-%%d~Q`dpEnt~T9}A3K*e2es^hKgf6Dl$YWB6wF;O+3?TtC(g0R6gZ!QZ|%X4Uc z?9PwffQ88d*W2lTTv=#!pmRZwF7ux(cq;ay;qd{kC_Zc29W`9hWz;2Fp|yBWY@~Vm z{{U=S8#4jENbOZv+Mb97Omvy&4Z(VX5@{r8-EItkF!6cWpMU#Qa_I!UjSaFeH_sj9 zQ-35-3#cV!9jSIn{{XCWEY~#q+^;<(G9+4B%kY~EU(And3+ynzyJ=}?_e~_$ny2w| ztiWtdV+{q$9C4dwot~PElA67$tIUkr^>2Mw<nDtE)*ir<$X^zI-C`Hhb_+9N#@?xfcQ4H%Ih=7LS^)|1TUUfws}FPHw_RIc z!7@R_a*nWmRiU-9wvBPZ51t)WpD^MT%JSGMW{qA-*JPohlx+wlY}<*V$!H~xnZOgZnUc)%vAxJ7+}_K-!bq^# z8@gK20-a)KeyXr9x!;}&i=A;beq$?B&=US9XzxFj_bB)!=aRHS zX!81a#W)a0GJu*lbGhrz_8k35#dTM%8QXdgbL;}PM0086%r%zlA;OOs%EG03ln!+UpQsg$; zx3ZICRy~8(8^a>|tr0b?KG}pb8?<Ye4Y~`+207m@-pUGbJTCEL9!Nt_926 z$b0$igEKHS=!X+p!mQ`{v1um=;+>%d1C6Xf)XWc2@gMwe<%wy;3{S_xuW07PO0DEs zlymW)-H~Est(a2kZemncAT7t?1Eu#D_n~Uvxp}1JT1oO0;=W`4S+f^deddqE`fDYj z@s|_lJ(R^uSx9ED%bMb9Sdhs)OJyU}^d#~G-+l4t?Mtj48ZbNZ?sLm_dB$3k#Wy?}Sh7-<+OI*n<%RiM+&hizKzGx+t zWO{?%tgm3#8}q+F2`3pg_6@UrKkArv5uXW&TCB96765BNAj#StR}E9kB{zDtYD8}n zSc1UrZOf1c<}sSqT5Qu=9uz+WZ<$*S+HCC`B~iHl0JWT(jxy?sMA05%85HXpOI%ne z>PFVL>xghao3qS*hCXWDo7mw3Ypjr8vriXQaF1?TJyn=e*Z%7AN8UDWgsX(N zp+0!DHjvUD>~+tX;)Co9T)(TdJ7~``N^Tjft<8!%7>Y*ZUqHAZFR5)OY z^hjgcaaOw8%>Mw1DR_j@#rH^Z_Jy*(`FwXnd!D3_qhJNgA5o5L?hm(iDOm%^ndzFa zTP9N(7IU0Sl+^KML^99(UFV*qsiQV`1O<<6$pl*8Gke<|V&V76d5lEo5r-}HSJ@9} zjc{D)+Fxk-&lK7m#(h6>k+eK_I#dIw4>8Pb%&F*c>f3hBms^IptpQ@tFJv+ID|X_J z9L_j*v;G?3x~9lm7sx9W6RjQ?!?`D^YFWIKOqwvuMS} zr>-7Bc|zvf+M8z&4G&46{{Z-pl&*Z^)0eJYl~d40&%#+!81fnk<1tH{9sA7Asdh2P zBWf!du_{Dsu$9V5Z5lti)@tRR$oCuW74+xC;~g*+%=7HiG0$jGGYOulk&LQae;*^a zAT6*1U;qNb*b?VmsX=eEm$Xev+5W^7w7EAF=9Lv_t3UE#rDffWj98yis-ol#iMBHK z);YvFBsQc|rZfCiHa(ThE)EO4>w74r%=2cf%%L@vh9#0&s^>bVu<)<7$i0QFu*HVi zi&E0_UE?9>IVyWcgiA#=!_^$2r>>@!pCg1vPe4I__MJ#r*{ld#b7FTac2zuq!(DCm z8rHFfH()v89VoNgV`gRU{`;eSpYYyU!%&;ZVbK~5Lh4?PB{{T_T3sKinOK9pyViVStC99|_8MrqjpwxFfw!_%KUm@ItYJ01DFVmfB=w$TGR(N}WbM7>&T;GT#MKQ-} zYA6%Cf}IVHn9yvX05|4szBDX8oa|g6avwfx>OV^QII#lJ@jBqOY`=%8vWWY&Mbs<` zs2sK;`+WER065pNuxMZtJGJ{>y{rrrO;=Q{H9LYefCvWGvsmr^E#-c=vg3wCXy~pq z*1VAMn0?|^P{b-fgxC;5o7?Mz0_ZK7*TzVQtgjJFjv}*JlmadZ2dF07?AHGP%Lo4e zK)~Ub@ARMvnxpwfTEaAD-{AnA$C1BFpVIfktj2oRs$n@fSYU~1qYL1;+^FYa%#Yuf zt}cd>A}3fSIlu`C62EpBpeoVa9)x)Tzo`0P9gsTb$v|;9;JM72?5)}uf-6g<2$Pd? zHexw}*WVsMIN9C?ho0`3cUZReLBdGZw-sWWws~P#>DqZ}Dd86r5OvKauM^t#QT-|g zzzf{m;`4T(tVLcAFzyN!QBUyFTN0;+(Rc3VN*$mP2Q?&4D-TZT;~tA>hOv zYB(530{o2|#8?^WaN00#)?>x#^? zT-P|^yvj)ApYIY}=(hIcZ|pyN<3`Q11>&0ACUV`H#k4MN9@>Sb@LwD|_Yp^zR8~qr zjocsz8?TF&`<<`1t}eRapfum}%aW)p$;Vv3t6Y;Whds*DDWQc>jpAz?lgny1N z_IaA{3S>~{RkZZ=(`YjY#g?9#bVnRZ=ybN?*SmjH5(U$0&=0q=vuAV*^G#>2i&>?H zlxNddMJqBiQ6L7^uo{U!Hs9Ct&uxp#oao)Ue1zk_6|eVT!)fWQN(b5xY7y|YXK_^% z%||+g4x;O@^Y-idVBGK}u4z4EpCph&u&%vTPlB_`TAI45jJ~4DIKF~*0H2oo`}D?m zWDprqz*FX9HD!dfc&Iq74=JpVHA->!u}_x53d>Rt#6ch`?YXx6te{-s5&wo3BmNqpd)i zPB|_FIsnH#Lg((+_}`5CKCAvUmcMT7}0xtHvpc{c=Ya%X1!|b zu(6U~i+Gl+GpQfVnoooiYiY3kM=p2ihFO5t_>Q@S@AeIleon3;5w(3u&X~toueg^pY|}Uy+{pSCD8v-1y0q(EP{cWM zLYod{w&rfoz+P<*I*e9DrMsNa+2^m~AzYvOODSBxN@f|n>eJWA#P@#|myEEt^43El zu^Y%^c+}eMi*E(6Yd)u2@!+TeNHx~GEYCL0IKcOdjV~_eLe9PTyjKB*FuX>)bxmFnkXVFXG` z6JdJ~ExP%1#hW%h*~BnTwYhz-=}dE28U*rPHNkz6)K418olo~zkoBbTuBz~3dN^pUE>`twv>B+7aWx=CE$ zK^q{{ZiY3oEC?k7)SmRN%=d zwJuxYQpCE*SO;%TyY%O8Y&coF4o7_Js$pyjB6RdE+%Zd=rNC2TYivFDKT~sy1+5e& zHLeK7B0?!omYqcGE_@+REAkiV)2E&#qC}BCeRA?BOMo(t(PiQog6K&CCE4`&KpeL9 zHa{!j?P#fK$AYT&$(1TXuq;f>PN0q-soT4^p}P})KwyRy`AQ~9rvCt+WE(WkQYhVG z*#N;nKEIM33Kq(!g++)ycYFO0mO0F66Z5Q-8qg%T@hY>KWGM`f;3kU>b9Vy*=^)52|UfO%!_y1zHiPM8u>*z z`zpjb455`AD_bpe>qQ&=?mrwh+DEE#tb`5iy|(w}InUXfLP6I9881Ke8x|dz{{V3K zVx?}KtMH!@S$~n%ufF7HMU40GRK6fo2xiUc&njaqU}AxXe2FdausE zb(f8sawZST;`*p#shX=c%M968f0tAw233t$MC!uPy0!0eEv3CqOhP!fJILoEV_?9YTTTd80?2WJQF$osw0*ehy#Ie5iRT~XhbDV84uDfayU^LSn zc%=%Fz#K++i-l`uXpWgAqt|%DUsmI&0I0V!VPV%9c9Uk{cV(Za>w3LnMW8KqJv~;B zOUEOM_*gv^Q#6#wFI3BC*2nQL^$;6tSOe>cd!1|pZEGG~vEfRoWVD#jPiA?0=kP;O zG%=WFiFLA@7|9KCcey%9Kaj*1h!;&y3iqAe7hD0vOdcM}E`-8)g#%Se?K zannNKfo4`xKvf_ckc5^zz$f9~2o}QVF0S~(nd*s#Z%A}4d+h1hoSBbn)!%r}Bd*D^ zntE)?wIn5_D(pm2p&a!xo11(p$8AFu_M0!eWEeyp)0VP~RqGv~*u2S*w>tW2-q85U zmNsv^T%NLEWoI=| z#@`L3d$y8E*lHVo5n+okY_07t7@nAMKM9sjbAWI^&vXYk>;jW5?Q=KGDPlCaR#h+* zbJVYU8L3boyzap9r828jNG;=arl%Xs20dW24lQ8a(z>q&XKmVCc0j?4@!SXR0s2Yf z`cq#nX;EDgK}PJQ9W-aOzl~Z6Wpq(HE z<%K=8jAL9^t~)IvJ@i!~yCVMl~osGHbwxVIsSqz(ScjjqTt8t9$jT*AMBc!GyG zqhcnaoJ*le@vW@NM=jTGm|d-ya3J7${Cp}$Wh|=w66{a4?7OyZBg|-8Min$r$2>%^ zP$QE5A2Ln4`eGhG5Yrx;s~<42w!NHLSsS$(t*)agsD^^NhK#){PUsC>fAtkX_*Ub> z4*UNAvBJPCi=!d|UQ*Bi?n+b{4qcIDby8G1Qcy=HiN?}RD?Q&x-08i^=FE3C0Aag5 zi4KfhaXK|8_^R7lIrJ0BaCh2wjN(lB1cU*R88FS+&J z*srnPb)&C{nvA2$W6^uBqV0obwrznDH46f*$)kp28Hj8O-Rz-{ncHvozAh5%MjPi| zbzfL(0ihXdiV0Pfr+J};jfXHsk^V2e$EEQO@ep0Ye{_VWSvLh*%(8Tp79JHl>Sp-% z*m>`4E@((P=Ckc~aN~x%s-(FR)K!RS*IbNGhnWNW`g`ChJLkXgW7=$??tnd3^Vvsc z>y^{f%POkK>!^c$Ny|^?`3rU1cVpS%mz*iBR*TpDH((YbNL#8w9V{Xx7E1u&+hw>M zt+BPSvcX*BZuwq>0hS0|U1K~gbk(H;SR3^5H`I@NRjZsD8sUz6>(*2@M7Whr;{FZ$%u`GjO-va1Xt3seIu5>@ z;*Gw}#|e=ppWlqqEv&=B#(1ZOCCle0R_?c8$Kmw9ovnLv>&qB+)(>Pi-$tF6oZ4(0 z$snr_WAj&x>L{QMO(L*Cq}blq^4yMh<W+Ibw1XT4YgS@JeD;8a@B0=ZKvz>iL@S;NTay}ZF5X{X|*>H`hW!P*6J&56&uylvd-GG49YQ<=3&()rb>EwExSFA z{JE3*VzaKv4nI4D9BKMim|>FS^=@gO=T)+0J>%vPDh)m7#mt-f4TnCW;Ouax3*sE# zo=J>(4i(l*Qs7P&r>CQO8JoF8zj;#IC@;Gk`f>xv4@_k__Z-s7if{OmuP`;>!n`*P z(@m2_N|QI-kuBVZ($=`~G3mDCd7n+HT3bE#uyxW0%&V-iXl?^`ze((mvN{Z=IrAE9 z%B0QRn3)l-z}V>kbg*Io{{T@u&KqWJ+yt6o1W&9Jo*k4r%FVb6g;e6s9G8ePIjE(j zt6;>iC2yo1htFbfd-BER{zmzc$M>41<`UU8T!EPO6~tKvZ&V}7YpQ7j7Vm@x#Gj`2 z9$d-kjaJ%-hZtJFPuXnS<0NY&aWePee5#_Rx(BCqh=fTjr&YP{zV|%_*7U`uxCpyV za`F{ki)#9Xp3P)h4qAnfW*LmR-xjJu<<7uJeg)Wq$It*+`B|_{GVTlKJ66)`XO|VE z_I*0>E^R#oQM=In&q6B=1j66&KCS>HUUVpOcm zo}N7`5)cv)#M?-)D;#|67?Hm6@%J1{YZ0!0)XFvjqSVio(aSAOd6KTA03)J?PXt5B zr0U1g_PORrwP$^{0u4^H#G{uw08v*ns{6WkQAJ5k?84C~u{&&=l58$H+i*@MU{A^@ z7)lYER9Kl9_loPMy>eJy_aSZ1rz}=*Zf9JnRCSyX$_h&UCCrkCEu@yNrdHZ2WGwCS z7+4OpbPAHLZ2LW?((z?t(n;L9yRnb4u4OyNTgB2gSx!fKD5;2Ph`7GD+$YNCbLEYD zAE(@O+ZyCPXuiMnZ}DeY0c*9G;4$jD>xFn9hxi7KAj+sL{7;J$}tWZNcOvTO|m?rFr(W$UIguBaqdO+c4x1q8R1$n^ZME^u*)*0`(e zuydrG;Zw8DEiyb^)ZONXVn*dnw1vLg@+TGV7$6UQdn@*KA-LwMwfUs7f~@7Q&h2~c zd!H@I-~3?#;?Rc0cnX2nE>cmKh8aWVEl^p$AWiRogr2`k{_TpT?Qw<^HJQLyA^MeB z_KtB(B?*zqCs5p~*jNj5u^W<3InrHpj1KctzQ3ff&}TGKlP1#t00=;$+K&5NTnlr@ zS=qMuaTC-I)WbnES&Wg)za}uLAr?jtd)s2y{RW}=V%^5Mw2?ghar8z&s-GTG#CS!* zu+pyE9lHGm{kq|yw?)zAsqf7&x*-&&%gabzL0}Gr56#Vu!15OxpI=R-tps?htz?wq z0M!w?Y@8M#_?3;6lW;iYk&1ub);*0lN?Bp>N^<)&BuoJu|9SN z+hKwvgNQ&$CO0putHg1w)DY4Lf`hm_1}ED4-^$pUUV@ay{QN4;Z=IPWnk$t8MMr%* z_gk?R^CrgLrxlBUH+-fQwzP;NMF23=R-CT_h^%j3Jx3(cTr+ z-RQBf2jp&ih56y9#L{ACJP;OwBUM%&&kkRZ_J_l{mSk8{!B-rzU5PubgPn;WST6j_ zHsbh~w3|1@37%fiywBG*YfYo+_Leq6vHj}{U+se+qvK4$>++n)<(yec43X8Lzw*fV zPnb68*2Ej*%ec9-2BXWT%KY-{7c>6=$SGXA{?{4yvy#ch97|W4cXZh=7E$OIM zoFXhrKs?5iV0SyQ=1wx7YAsFhAm<;s>WEp3F?SGf0;>tkct0(y;#zt_C&;sgAIo_` z(Im`#JA>gCB$9XM(+q8+;!Sm|kU4>dTdtK)@TVQt@TPG2esw7Di5M2z3Y!8|m4G`~ zsj%FZUqOSr_eS{Og|gVa({jIM6|2Fu&78+Do(Ur@G%Pf$#zl_9m&Luev9`qHG|LES zIA^cE)IT}C=CK8>Ec z^5g7;5%`U3b_$D_(#yqMaTL)i$y-lC^aX3BAfvOOnnIx4S&XvW8~*?^Nbsg5uW4jK z8OE}eS>JKaBYtNMa$0v~oKOD%rZ}I9q-`qo^{Wj{N<;quN}d#QLfBY>S?oCyRCE`t z9d^;KBfcBynLJgX!WcouvmYx!tL+ux&LufoI#Ez%5>MVn6o}{2ph+e9g(R)HTzZ0Z znC7&A+ULG~ePk;C0B*NjWo6J)4A|AwcZd1j)V|T>&5G~< zM^&$68W|GG^xsOfw6`YB z#&ME2k163m65D5gY8H7O-Lv<@30#@l7ZA;wR0yG(KOAU`^l0M5+U7!AY`WkPj#6uK}>0~=83?Oc6}_mN){Ztn~qpxE!kq=;aP%p?ux=xF5^ z4mn(ozwR+)&6@$kT~)gaS6RAPYrcz?J8|rtxMrB=`D{-u428u^@;EIU-u4US%$ss7 z1+ejI(k3getLz^}`ncMg_TNWjHKMuxwzvbP>^>`wT>5^;m^d?NV93`WmFe8@e-r|u zNh)O;F79_xy};k7`Tc#c1=8sl@%hiEWlYr2E8k~booF%ERzyuh*o|BJ3m-dk>ONSv zvsjBl9{7&F!mC?i`hD26b|q~2YE$Kkf+YzW+WsqTu{&FAZWfmKXUo%ct?=8egfBPZ zIB3(yG6Je~>f28%dS2Um;f;n9H0^?}`#=P$b!QbxUjG2gXH}C;h0X1MFCu>-bBaf5 zA;cJp%UtM z&!#OH0tH67_E20$PUvs@C_*!AoF zaf@lQ8zRy%SfYT=)tIOJu(;llK?T@j1?zKMiNt;Vq zTF3-(+-VlyW%BAzUA-|{(V^1eh>Cvwj!L^d2w2n zR#GJ6$ZN@Jy{2|&mE;*WdrM6m64SN7umqc0 z^W9%)crP!glfz3FblU`Vxw#%*r_aj|FC!ZHYt2**a54!8nyT?{*_VO%!U@wd$|-B* zlTnsgV+6Bv*m4%cImVZ=Tv|yIWpPJu-~2u(csni3GfokC9->`k;HhHdsXioLstE9& zeiBDphL_Di`AfNYm^Iys7LTTg=Hn6q2~e8P^780Cxz$A2wLfL0dL6OK&4qW|iJ@>_88X9jm1CAfwl9X)^{FUIQ zl35CX+8n4hCf5GO-kW^zSDI+!8Rh*HbtEx zB4ne!&4Hz=SSz|gqH*11JHWpm;q=6q5lBF=cs62Kn$+hq&EO7 zGbv);g4Q0`k>UlXRQ61e5z2g_V~}^(2^y(=OK$N+*eM)<04YAU9S#Ytx+G)IMJ>;~ zDVmmOR5VR1D{d8l{7hHGPo1{>{Dv4?cmjYtnY*pYm$RvN)D+k-Cv#z~kFESGe>OO2 zmk1pcU}~V$$m}XL?K6^&SlsHA4ZRgq5`7e4Bry0-Zr{ZZYhB?ud?`Ff#}z63J29fG zb*qAzAW*!nqUQeq)K0{nm$0@zef5{xY`a5ZfP;)@!oF+c-&Xp2EN$&9`i`g;Yexrc zTsH+&6B-UApeECSV&nsGTdt#ffy@haxTbBHYybwMg?JrwqVX2iWOzmszXgGD@j1{r zet$rzo1Ye;9faqmk$v`Sk@Vy+(DLDXez3(-a~ue880#gA@q{^!K~njCZ%X-&Ti!Y> zk`}yeVA{pG=?7u&&lha&nzvomOGqcgi}0rv)pmPF8&yjr*=dkV3RNe32;RY)mHbBB zt>QSB*|q%jxT3Qr$jKOMde!(*cyo^PDDw^v&8xUmGLkDwr^O7u8(PG27keGKn{vfM z+g3=BdBU>WR=oI6x2mwo!yH)o-a(nycU5uF)GMu23I7068#zaCE2mcP6Q!rl_7t1Su4Z1lqgFM5DWm!l(ZL;VY_^ z{-VcXah+yw3JM%1Mz^c2@WGfTSm2n;;NuETGlMbV8c6dx7Vo2}h}79rO_sot~4uU90pmHuPM&RNO3 z8}n~7u=)T6t&dP|4+%KxnhWV{vkh%=NnE{4E}O`pTH|Z`dY*qVj-yBdhaLJU*9=Lj zW=ai5R_m;6ZO@?g=qxGve zdmmykN$f3jFO_YZJFH%8-$FH#cPyVQt&TGlE6-C4v}KhJyPb`R*e=+Hy~VeQ^jKDw zVYGzT67bUuy3sPy5DKa(1S$jKW+&%zdEw2H52@p>iW&o9Q~v<;zmWW~U6-tFOT+6=jS{siHk(T~2Qa}4gga~OS2y5}E0L(F?~_X|h-QU} zBYOotyZ%@7#-N87U^CbCE9zfP+lJc=Y4K;T+Ka;c3k^Iy%{{Rh+-rn{jZy|=+ z?9L>-jukub%in_b`!>qffJl{fOwtN9c$5IGa;1DKcD4TiUCGAFP0|`nLemz3qKc=V zcA*_Pk~l3Sgc87btZW6WH#Xbe;|YGy%P?9g$5o$2M$>5k!&PD`iv0GXN0FpOlEB>E zi2lU>{VKWEw(gUaI(F9N4RL(@tFB4IC^Q#B71mkB zF3E#-j$qGwy{xkO$PHSU4eW(As3hf*%dq;1d} z8(#fBSVNsHEhi7@{-Pv`sCO>%HjvcAWNxEUHIfeSgDXblB1{o zLL0GW042%rFHb|TzWCxqk_9HT#QgHaDFU;C-g6xk`dN>K7|O?~VhO*m{0?|_eoG?G zT!qa-nURgO7_V@q*S)QFx1T?4@z+P?6TX`6o*!~*s(Jqa57X7ER8Ea{G6ic3*z8F? zIdb&EZ9uqML{kc^f2dlECX*BV@+nX1ckfHJ)Yjc`yOC=ZH#vp2m}f3`t&>( z#y+KLZ5&KM^!C3-RMFUz;S^ zm3(q(f{G;n0I1g0uTke~Zs%_xb~sQBx3i!Cn(+PfN8)RNT@g#!enDB4!4x@F91kNa z6i9}Mj-6USw~4HE8~*@MC#ExYhLPZ(O+v88R;YGW*k=mS=DC(>Efp+TWh4tRl1Rfm z&Y-wvHry6%U+UDh*kYB|hF!a_m25nLBNL#8@h1`FnH?6INgzmGM@cQYF2sO6Y*&9f z4u=aYU@%WyYpm7gJ}UFy&wP8VE47X`ej#?EfH`Q?261vOLa;u!y|?ukQ-hscGACYD zNOPz0%IK!Ih-W0Kf-Go;fAFUh7bXs-de## zsHLf%iV9ib5}2=|!0KhT!}K@iai3{p1P4ip>NUWtLex!h^Vc*py_qweQNY7YZQeS9 z1X1nyhvFk(0qKsjvS<kFWz&F%Q&f5ZQ z<_DfHwuQVhjdUits*ZgFbT#I?6SK_WE7>aQ96YKBRz@K#P5E`)^FBu!%?%78f;Gmf zliczMm96ExX-NgrDxoC7QsGVaw>xzN`T66%*(8|efEO`B%(#a#f~r{}4B|x8BnHZP z*?yax33EWZJu11bGX$!!;{(K$lT*&i7G^j8V|YL(!}aC=05}UqhcFN)1$;1rN`s2w zueT>;XFbUO0QGiXM{Lh7YgM!(d13y)GDWUE&&rEjZ0$>2Bcu&`r(4+vGV^l9ah6NQ zlB7nR!+qS10u^hGCfb+O9=wU(_r5h7Ym~yyEsCoO@uXB@dQ7T>tw<~lz|;_2o02Rx zBwwfHhPliih^XoOQF2U?D*M?_+53w7U!FRe*8Ufg7X$B484oeH;0K+ru{&}e*X%YY zTMxME4Qg;+&*=XE<2zT>oF8f6v)`W}yGOGA!Z=&9x*O3_By&j+T8ha@d7VYcCC@AQ z3~Jfgi!Tk3k6yV|eV^(708QC`n$Negvb)YFsaI^rG>a@l5YnVFB(~bj#M}>12>II( zP3)y?*|Pb)+sRThPBAiu(#(=F>nshF8=hbIsbBfR4NQ|ktQMfLYXoaqs;y>oEba*> z!*Vq8z1Z^iKP|9}%5EKVG;O2N@)Y-{sD^`=E33 zYW6y2XHqWAZ5p?kA3r1d?5+i>903^`B1biZN^m@T!Y*=X<6Sm{$ux-5# zI^#hE0bO$WQb++5f{3Y7RI?DR&*3C&Hs*Pg^TFJM0-lIVvrcJNmT2x1x;HMv;RfGR zzfQi`Hi$EpytEV(01z=oviLOUviPGHRUmI-ReiA1)`?YK>7ma>STc1IiA!x_p*Gy2 zs2aU)PTwp$CY7ITNQlut#U`#{PY$&gcN(lNLXU@kpyj^!fFh}E1=_au*CHtTVISZiBZ71t!P;sM|KQ`VRyakKntf<+8AVz(iW zo!FZXL+66KbVMc1U}36uNqHjyl#PAjDrz8&$v-{rHub>^)gV`b;W&(xO1hOuSdhdR z${y`*#F63vd6pqZ{nx~TNxh73_tykhb*>dmR6rz3n1})*7!s#YP%eN2?5F*&u!$`M z<TQ9m>ASlO4dp0T$TW8?%9Y@e=-)p0nC$*1;Ae2p8=|&acdY!Gz0pk)$mnx zxkR*;3RZH>GuiGUC9mCs%-X?8>Ona9f7EuDZMN=nsL?SQ-=>7*&xa^IElcFm=ii4qPJtuo-Vts&kQWtxL02Q2wyb#*G4 z{zA%UrLCqnnXk#53vF%5-(WcmF|To~RAPO(<>r9dF~tqz9?q7RhEeG&lR3+)EZx&a zqDB|fV0}5>*6D_})Pn?9<5-kWYz(O>2jqRLL=qb8s?BuvFH^O8I_Qn9<2eS5UE1r7ZJn z20-m2peweWQarB1Vsw*pq++eT@%dxMls`Fd3hj;JL!4xMd@GL!_H88VKN9C0UnL$) zvAt{k&HJcP6c=qK=fV_i&#zmYV_A!5mWv`94KT=Y*ATYbYh>Ip*1Xnf$52h$TIJd1 zLlm>{-d{@EV$9vy^BG<3tEsEND;sn}bBq4~OSEU*wFR}0?Ps#| ze?_tu+gl#zejwA2>1LGCt3r-mW>~>2$LH7AeqWY78%(%JrnmWGzL434C1OIQZDjzK zP%ao+`}%)j>4F9g%u`5{RQ~|o%K}R5qjk5f{$5_Vme2@;mhUo*VkITA_6>gQl_P7N zfxWqYTmJxjEwmCwyC^IG;VLU-;gzE?ldAq6r=LHk@2f*@5KSjtI;EBfG)_g6_og#z z0VjpZ@>6S(`Hx~SapDXb^u+{>77gLmo@2bIJ_XXH9hRj=1S4KWhD&Q}J#@ z&^5mE8Si4$#@*$H`*ZfkY|ae<*aJcq{{YiIp#6f~wuAA`7Z~w|aW4nf)MfdEe{-G> z35@$2ZO+!V{YgJ9*PAwp-<@MzYFFF#f2mp8+5Ny|EVGC>-m5Z|qo)Kxzw>{qVQXCD zIo9rUwWpr5RjszmOH&P+CGhS;SD8!Tg<0PBk@o|x_wv2@+T>sw$3BEtr2BfS78VYD zeAdgtou2*G5$9bpHu{)yAa8sB0Gw{vSQb^p@;?(^%X-emtrW#yqM@XsiZ+fSJO{uD z-);Ux@ASryv+&liarVoyYg|F4600*s0LK{~A`wFK+;jf`xF}=j2sp6P0lYl?r>}TJ z2Q)UbGzUNhNLdRB1*{ZY^*iz(vxNX_jB9d|WJp4!j-se(VQ%oP^>Vr2PW-~J_rMoj z1`n28pkjoawd9?orMz*pwq^KQ+`eSx>gkUYKbgCsSv!&=2Ka9f^z z8pkBkUdlihCvS&y@(1+95Fk_0dEK0n0M;uyrs5yF$Rm_6*3T4r#mc3wHuJTOxo$CJ zLx&v7)p*SoGp1!krIS>01$98c*b)FgnKvF-Tdd9v{c+r|ex+n>EQoDR{{Y%fWdyV_ ztb#ESb8ymehP{QL#=8Y!fVIG#eEY6)&3Lbh7c`}M^H&`_@%`dBT0(TFh$4f1!8R?v z;4@jN3Vh?ZJZYQAi?gCM_7DlvL9%IKDMrWJm zGzL1AqNJ#3Sctwi)Im1`pI&Cd=ce^;eafLE9=g#{*CeBv<^CC*cgc}x&i$yqD3aHK&?T}6XP$F9Mf)cFo? zvu(%)+xl|d=%LRBfGRXUYs}Lj?H@5!iH=QB8YtdCRLJDt!g>pB%c=4fJ0}9t2qt%( z0F-2qa$Qr|pV}HO(2TIm9ywvv8G~zw8x{9ESajHQI3U~2FK4$t$C5Aw*lHKrrh7JD zQzm0YIF6!LiDU`l5sQr^j=qcPPS~Yw469quEpY0t*`Ec_kq&zg9dN?SRR}QEM9S#K z;f2@`N3N60^*BwtA%)EpI>XUlv3azkObv8joPDZr6kV8hr<-MnjMS?rnvxV3W=F9> zw?KLhdU4x1E^NG4F`%g0*<5wdwy(2?U{A#L>6_>Ic#AH&OAQ0u_k?U7Q}~VUY<#^j z=r%hL@*esOg8D!B{{Z;Atw7p#u}nbGU9m|^N0c{qr6Z0cQ_yIP+;Zj6Th+0!TunwR z>kMVfFvei3ng0M2GQjD6?6!!Dkz;>|+spyCxHrO_@C+Sj`7KK;ATa0bsF|*RB~@KS z*CpPeeyS*Tj}kJu6KkN3TIDzIp(w&z{ZB5Ei9D7JU1j!hwFwrE;BVs^d-~jZoC-wdE z#NN1kFgMW8T=^&hWRWPP9T=Shuoip1mmG$~T>koCZvaRGF^0RRLCYm78XHEg$zTZ~ zHowE+C+NF#+@e*mU*BR4oJeYy8w_W}DV6Fl;&avU;niBcs zh$R_{Ug%sKFlSNlf#Dxp{+1Yqfe;LYyVSgiROR7>Q6bXIr2z-w2FOpooBLaq9!s+L zRoMJV)_UxR%8HUXRw&G+(HEBL0-JTUi23^AMgftIxTk}?8g^LYwf+T2#g6PQ``grh zxMYD)ssTQJ$evv(?o(hjHQXJx1PwRn2ITu;;$l@>QBs#Kx{nlwUCSl z0gku_;(!3!4IKVEs1=mK8D(ho6`7-8$5&hFK7z!zncDzx4J+biWePU-*+;p@R%2S;je?Rl{?F{Dl^#&uB@%afP@`hBIQeajSk`O1<4TREZVm1l@zdtRP%Jvu|09RemhRDMO5emeJ?IMSf`9C7tpQm4t z#Iiu2*P=IWh2i3Q4jG8fFD+f!qt->^)37^@+>>Fp!uH(b$Nh6_agCPD6TYByGfr#8 zeQ#`YpZ=>(7~xa9E~^U^(X1B%Vu7e08Y3p%T1o}rU?H4WHr!m#zjz)R?kJ6 z%~T^wS7$LiL>1k9wk&PAIz_fPw`fhNnZi5w3n9#PldD7Kv@Dk=&9f~2NsNz2L=LEE zwAm*CnOASZ3vwH5Jn)j>+6;LA08;_AbAf?PYb0`R&9a`=IA<`W&rB2(<(0}|t*4iA zbnbwjM3Tbf@1&isFd^PE_RS9{glpF+#`S{g`!4vo+ui21`oL%&^Vs6WwK1d~L(rC&E=cHBVnO z*>HtvVT!V2uBSoqfDY=6Zg;iSb{4hj*|4~q&L(?y6g=<+YO>B@tu^PUR(=HSzlT48 z!If5+iZIYxDt3(n1G4Y90>|hu7Ml&E9}IHG$k&bwcE{;9U@`jTUecV5fsn*iBbUupRtAGHW`b~~lmpAZ0@zy$p5%=-1gv6s9I z!yLb~;GP?SDqK_~4IwqQoj{Sy?|*Uo^Tm&}1P3;UJP!?GrtDz7`-06H5?QT%1YD9> zTp!bX7-O4403$H~n94+n>BN+GL_&4)&hkLSGK-O?mz9UM*8Q9nz|tPqSB!jse9(ph zB&Vq|Ye}(K-Gcya;k~xouS;9Vdt$?biD+S`Ki8U(W*u4AvU0AGVM8Q3l0tPUMbbg( zdk$cbPfL$XJ+^MU;xQd*t8BD#$5m_1%LerYo_v z&n~!2ZEV0WBrjWbaFuLSW1zQXtHs1H4nqndT2rdDwYltoEO^Oj>n_ zkA>+r4Yt!~Fb{<9!Eru!_I}N~IO6K6T=h~|loz9#5K7LZb6cIaw#S!4jT<(7(|$y6 z*OK~g(r#@{`=b$n+>hl?PemlEgFuOGW47hM+svDC7|^nF8hkbO9XrX-a`p^x0wr1K z_=)DHjZoO@49-Q>RO-0(>&qHVw6YD6hFNE=$%V#h6ysb>dik;-xMO4R^789{EsvHi zmo?DXI^X?F1hh$Brn41^E?G-mj`lVO*5v8+#1UB@d=ye3rG4G%8p;D*Y+bn?Oi!;M zFa}};Jn_RnWjAETzEtXZP>Kbusg3mzHYVriefRPhU~SV(d1@CCCttZv$r7Y<1k#q| zpk0dWe!PdL%LEz-2e#?Y^;uEkCj_>PFjcauFqKH#ski6=zh5ij2`wN`zFz&*z%|7} zm{=DIBTILhd7J3DzpnQ5vBz991WfeKnxf}A4l8%gDUDqWk+W=WPoVPs1~~Ad^7bwa ze5@Cb%jK1|6QCwQgeINZ_9J2GfPJZLWC+$EVZMuH=35|Z%}d}+{K+LfGdi-_6$=mw zD(z+SxxbdfrSWWAGSl-gcvrs_hi|ogt2av5^62u~ntt}KWs*c-ZK!QyvF3SxR>mIK z99==3H6CGnXX1DGe>?VToBF5%^UHGRDK1yIkJqR{oi`mTYJP0&(4}=d!TNL4xP5Ao~kuGG=m7 z<<;U^S>#A3s*nJnDwirefFUpQ7|ZcV2E0|_LM2)I9s3m1@YZhyW^_`u>C&ROhXA6f zP_U^4A2xrc5?b?TdkG!5Eekd^hFoyg_2+NAF_lqdbp;_utU?ZpZ?P5^{{U6Vz4jiM z6J_?ylOuF%*&^A^y$v%wl{2t>mVfCY~C`~xC&B+b-5jz&)cf@o3d=4 zjJb_!YAH*UVXwk1U`Lo18xCXF3OhJsVY~N7S(ztAGVvz5;DBd;X6&itYPtiM(_dsd zfe0CP3P?8CZh7x-WqpfDqlxeH>WXRs!DD@)b~m5pRW!AWGfN!vaRUrOf5ZSJV!xBHwNCMYqh;i_uAE?9vW>d z#W)#`d=xacLteUTv7RrX&2kF(bJ!6o3o`^MWRFUoMDwt?zsr%uSM2SyvjyGok;^Yt zdA5#m9$NNQp2V}ddi=hvYG!7pioSKHg?AxLj#M8absG;LF`H`BZD!E?1{i_+D{Eyf zY>;Dqdh%Jf7x0`tuzjKPOxBW~DKfmeo-DQp=Ji&CKEC^6<%fhNhpy}o?mpoKw+t1#e727)y&^TzSoke!A?&Mf( zx`v{DUc>alZ*=B!9%0*H*oPOB-nVo5u4Jw9KS7QhTS{V)V?pJ?WhX=v;M zlN3*D1$L87><0JdE$g-XhThnitbeC0bK8DKg}VtQhJo<9qHx^FLFAh=D18a%&nX$xulGuwLx5ES49# zf~4*3ar5@T9oy)H7%|h$SL;x$t7iy==vM;mqhq(J++Wwz6z<8#<6RZj#7dVu&mAh6 zR37C?BwTB;9FNlH+ZKr=PAN?Qx*M7&lT22hLjccfGwQGg_bci}&Lxo%hP9fnY}qmq z_|YS!1&*dSCAS5Ok!yZl*k}Y9R0%G9H5%%htxIeGJ1}ojNhZVFZ;-%Z45G6+^7d4` z!S1mxp=AWz@+6VBup4^|b0-i(Nb0r2O;YG8R&dniT=%yOSnk)k7V_o2{{X%Pt|CTi z9N024L}aH~t6*kwtsxds%rhx0ee5~%78v0(!6Z5wM(=DjicfN&g;moN0L9e!LA}2r zZ=l2$%`o#*C#r!`>rpF6Op2ShQa%7!4bSy5{RQuXV7hMfO&$>%&^^>=sx=b1eJYGy z!wte%Hs{+_hqeT`oMykO6~&>0TFG;DXCH&ab$VsBNtJ|d@(p^fenZ7$w?Sfd$AQ}m z?QJbBW@O+D4cXwn8?|jNwA$Z%)RV8`JpL*;Z7_0;kAkw-LYT?dFMW4IfK_ObND z+Wj5YILmvUc5*>=G`gvrfs*QbklkDImItqJd9&BdK5%`VrmOe^Fz|3{!5& z_L>?*^79p(cS%@AaDhcc?E|s4s(JG0>1o;w#$=wdnI%*Z$^k`IU_KF~0(k%%ov{A^ zv|Hj61_n|)_Q_FonY5wHe!e*>br)mMR9#w%sqv7i zO}D}xOKk|8F~XY9yeMwU`V$e=UAS|HGc2B>DoUCW#5B-UOEh%zC8cRwK`z^A8#4j` zzN64`V=ZUG;UgM(Qf52KxsW+T6_)wR+;ktbyH`txvmo6xy!XI=O^Ht%ZQd-ma4n7e9YbDl2wunvIYX` zr;uU|w1IKV@)$PQ+S>T-MbVRe&Y^5GVyXKg@j33+ODV|sLolj_jL1Qf24V;R$v`&0 zxnl16nc2CM%<3nQUVvjsjDWpo)BcidTUxt5Ye&m?S>w|rY27;R%2xJrcQ(IWzg~E| zWo3AfM0EG|UcSb{<8HQ!%|XMR(uE9( ztQ1)~$E2c(7+9*Q7H9MP$IyFX(Ak@CPCTQGR}X#a%UM!k5{7~}km-zE1|(Yd0P{Y3 zsrqe)-7Yn*0}V%?B;e2iIVa5msB3H#fNXd0-s68VPuB!2;&UfcBlXEh6ARe#@(+hm zXJDa*`;Wo}w*LTpLqLK@$GDzqU5!_bOgsmwon=&CYuJ19=Zh61f-9tAy=qG$BAWyR zY)0FFe=GT0r>QVBNfgH~k0c?y6kNpU?_-Tdv&1O%>Hh%lSvj*@M!2uj zO6=lR%ixkG5_gs{GTD``JU^b3^u{YjGm`k0(#KiNAk<)?<$O;LX3}MWBU#nid&tGC zK)wF}Q-@KHyyGi8w)1esRcN>nnhwq zg<_+eOtI=6;m}!0zo=1ezJ8xGjZpliCwK27nrH-yBK_^gtwezt7B={*y>1!7}^XGEb+<;s7$HLggc7j1s}aX(s1Y`u_Ly z!3MS77nAI{+t-Fzyu<*_`!-v;IzIMS=g z0$A#-f3)1ENRoX(O6svG7dlD4$~k(HeJz13bHqf9@b&atZ6Wq#43-H6ZAL|%w9%Fi z2_RVR0XFJ++;sW&Aq-7W6f(BE^MxgEHXT%_c4NeZENm7 zU+;Wbd#>kSO=z!}{Z7e-P6!7Oc7w*W`ISTEFt~wiz2S`BN3ppl$Xjp$u-E~)#Zhee z4UBi={9ih^1DNRuZ69eFk7xNXX{f979Lh)g)m?0ht>l+`oyofvDgeHeQDSyui+0xF zK#C3DGlve66;?5^!CAOt?K_!qqtN7xlTgt~0A{BSe(^XiO{8vVsZ_giIs=>dky@F3 zoui2@tvl-=n#RP!(K9c!2MwfEIYcF986>htRXku?T9wkSiRdMG;^(_WSEcbu_E*o` zI2=7Q*Clz5xabPK#XY#>+%d#bQ&m-_vl1ldUdqPj^|1FIn8*YfY)>8EJtC`QI1_e# zK36>bqBH7D?h1#YlF?5p29hfcHyiW+0JLw*Z(C!Y(Rwl*F!NO2*IvCf=d2cm_F$o> z;%+9%Dm$X)Sr}CX7Tz>x18!avU#L4`^^J};qM!qq$6W$L%yZUrt;<2|(z>H9;ySt- z=`}$-brmuxQKc0wf3Z7Tkn_fci<~TrUL=8!J~f|jB$qS)0F6EQO64xzGq?W$)R}!& zTT?X*^enEes_shon$5@&tCuTV)MBgN4Xn2Tt#3fqn(ugD~x-NrJ!Zpn{OR7Sw)#kaa9MLr#uGHikK`}Pc6j&~s8v*ZY9l7GM4`G;* z%Du|evDn|VH^4gnm18ukuFfYlGf)Y~#2UEWrV#)VQUmI)9lwss&}O|5Hr0(yI6Le9muWZlQ1>j&jnKjK?! z&2ZMRPu6yS#g(%`E?=369YdWGFLsK@!VQJ40U(X-a7D2;mQKKudedFi%RliQyq1zc z9FNb!A(VDES(nh#Pzs1Lx){|`Na*DzX$9@1J@y4}sE-i@ov}r~PqDrWjOv;g?q1XB z-{OC5!P`^G;1!cEp~`qCEQXIQh9y|wAuZuuL5`4qM*jexyRNdt0MQ*gokIGC&9bt= zqRz>otq2BVp1kYglaRKhHr~V%0PAnp1os9K*Jd?^JxbD+ut`BpWR(Pz+fmbCIUh25 z3tyM1!d%A@dtRQ{Vv=@%XxgVKsEnEiGa;}APQ#t;(-QJ+8xczGBDt8&Bvi^JLzWX_ zR?)aE;v3lVx4o`*>M+JI(XTUyAD|V zN-<0kN_?SJ)qGbd0)^NHxF**9?|c+IVXq_lTwhA$i>6+oWfIv@+U!R*`ioN-W#Y>Kw?-*OzT16z>c!}gacRts_fY1my#z+aoo(g1C_AW|5c+2L=EgP_0>}|hSt!>{I*!itBv%VboH^@9Y+WVn-^~sK59<(MRfsb z;)%42T$URt_qESFESedor@DJx0uCglEjQky4#2WQ-71R@6Bf7|c^ebcm#!d<+U|n& z!yDy0ms31Qh{R}gvo(R(*c*DA92-tRu6uzpH>0r1trJTkhc{*cZguG**7UlM%LD|8 z3X6f8tw0dAjp&Sv00}EdRZ9SDKwDUP*}pt)$?TFdl5T|QXp7`FsWsV5_? zb3&_F#}h_Qq)QYhaQ-V3fBbEJR=yTu2pZP~VYuGb2t7n0sj4GzLbP4dt8BI`KT=8d z1LiI96B+U0-5CIY4O5wK2V`{f9LaJlx?9Mo^VHJ^0J|LvZls03kpq3LdT!Wudq@rd zozuH|#kbftD_320n3KY^#aw83_Nyq%qRX=Ux`v6wA~7^D0>({NCzuDra5`^}v-(!Y zX5;qS26#m8<3(6~8p8ho+$6^7j+&|&S;d*PT~KPOmz7HW+Cs+brN|6aZPUYlE8{_y zY+&$HKHKqD$J6Wp@U>NH^7C9F`_nTq4<5VeCADcEkZryH0H+q4ba+{p#wyse5p)F_ zT58&S>{L=n)U&I1jO$_plwRoyotsU`0PS!v7L04e8vJ|}M&DwywgepJR4m^$;!Mt& zTln35G$x(Ki00Vsc1v0xRB}Mz<_u^jj90yIpDm&yNUILs$H| z%C~X@om0J>lVg7t_Pv0=COdD6ZrB-m1$%3sl9zod#(=k4%Pi6Cw~KhsC!k2F^ANG9 zXEJ@=S(e92pCB%ITXLhA!dvwAijyWd=aOT=)05n~jT z@k34kZ5MJKn)VFst$cuukK?#k{{U^Xcr}0xB7d~PrDI$D3enb%v$CXm?#}^_H0K@h zrx!gn1sxq!SrWKrs)B({!x+%4dd;i^ZlC?kISf9>VPUA5-@}~df2p5N`XGDW`%^be z3S$`g`Ye`{vxb=#Nf6akc#nM{yAsFF`;&4>^yPvZD_DF~-@d%@A$waNr?Sbu5v^}V zsW>t^c12YP%0yr&8#Ty0yv4sPGyQfjP{$l2zq-?9ffb1NMBw4&O;MypZ)=`FEw{P9 zzrFEd>4+yC@_lG|oD+qZ2B8$C%0{5p7d9c7Tbo}008&r)Nf2-dzA z%SP<3SlBI;-E0`?0^GThPwZguAT(i~Ja?{!wLH|i+QmXFjKJwOw*LT~?B0jwaTUbO zclPqh2p||4B*{)*l0aCUN-blt7Zx7&x9fu@T@zk7>oM6EAfZd7EP^;rmSd$a=X(yk zjfwqm=^`6?b!|FZEr*8j~ldt>w07(viP;Flk8q>9YWe`Bzm8VXz93t=<4QK zqc&Ldd?>{1q~CIXD;yJ;T+jtQb-_@+(02|=&NZPg0Ez|+JFqIMcQ!lvTb9^PQgGK^ zDe~u2B9V>4MCc}M!{Duy10u4HO{{SeCaIU?RrJh33kX4=Z zmm`?mU)z`+Hu^M?2VXT@YE*+#>g51=Rf%E-!B0KEPx!-(INr>2uCYrM6-jx>gTSDj zh$?I^q;ezMpGggQoui7cxo{+4uN*R_oP^&9nck#8 zSO7ChbX`Kq0lBaozcI_q-w=EtG*WnLSRn#%%UEK!%4rCKU0nQIAD|xm&IQ06*O++m z4RKX|E6e`;jTlhUGTlfZ?hmN_+Z{dHAupsc78(9xqn(lk`&M6xIs*23QrHa9&0 zJM%c}J17-3-|4-0y`Z`MHJ0UThqGL=t08KN_`dTquZA{3dl7vATHsrA?}4;)fx10( zI6|fd2X?Bm9M9~GncibGw6$~5W_9uz98s~4xsPiCz-@9D)RiC8jH26~66kL!uXSWy zqKv;}if#v*ifW4O6!}VPqoZfCG>S_!JLY7P;T3x!W5X6A5F3hC_aPsh>VeFX|sawz6PzD>~iiwcO>?CE|SL zqDDrZIiV*>zLG9%2blxjz-`FOSr>sYdBEfjMOAOoZLJs!K|0TZ=ibwMJd2C+;2XDAxr_F%B7nxIXx9TET-ki70i z&$0UNi7gd*5_i=4QFg4!f?19YCR_m86swDlZzy!%E)P^su$bX9Ees;$=hJfR)bD+3bjLNL$JZ&XJf#P!Ek9IA7L;wNlcISVt5c7Se zL=D{dscWp6_|;bG^D4@@2vu%nwGq2m3ju$p*V_ms&Vty0E6qW-bEfSVkY$w;D@x&{ zvZ?U`OY{QXt-s3?b>*aG>BchRb4v{_66|{;^n5-YfB}KKrL1>9)JLs}x23QwYwV0R zy=#v8k18jI2&z9%!||l5{n$X_`a#)8A^M%X?}Na=uRQg`B+x*?5v9wSbg_)7R56S5 zFU;TTi2=kwQFsJSpDqwWR{HMBmlwT*UvuqyoHR554qC}2&#e^nrH$&JO4yOO9KbFY z%~x;&cqkPWrbxUX_kto4 z=Gz;Q>_}2hIwX=YPHS$N~jatgFlc?``CjAs9Xq4&+9YQJSIV z2Sr1);xq6@TI+BxYlR?sZ-Z+N6Y25ft2v>q0l11ze5aa^H8RJTOB}aj6F4{Lqz$d) z2BGe4g8X0%H9d3_n(1h8;jLh!v<(}=>`9V1%Yt_;X4WtBztCfyBpGZY09F#|=~fsi zk*%f`ERu68vAH+&ZfDHjn8B9J7HBJvn%7*JG0&Q~FU9BP9}}Bnn*W)VcyG^KH$D z>TYjtmbWv34rp-z>z;}zy-0=gWD6WJg&^r`9UuTjf&RkY{SEdHg;}vMM*F?%nfc*^GZa_ zYbxq$Bhs_f$x!Hx$)vWMU;09U>@gwtL=F+iWM~&yShm5eV?X42W8Bq6iztpNl)8c< zxHcOT;REtt-%*J%H1yY!yMM#YEpp^wvkU6Kh=H}dK%cF-V6N5$IGK&trF znpG+;0S&dkUzQ@(qGqwqJD=L%?39>b{#*c+FSWs6^!fF*{&*XNQy#R%MFi3lsZIov zYEgD^sX*Du=skez{l*&5bt|SYO`0`OvJe?8H74a)j$3(N-}UqGV8SUR(-ee< zLo$F_pOItDtzdmQe7CkI!eRJ~FskBDWg2K1m0CXznAMw6u(%wLy~o!J4FZ6APJ$@| z74-1;a4|t<)CIhNJ`ukytZn+?jpAfwGP-M2J);pN&CH$I_;%EJ*nLJ68uL?8*IkoD z14QLMNYh6vp8y3`H~6%uJb=GbYx$AsgSttPhiT=k6kZao`5sRd3_>JOj&4Y{=W-4I z0L~iL3YAXU(3+J4ifdd%;1w1-GK&%iKbN)%?*IW4<`UY#MBu3(W3RMTPYrR#ZP}i0 zVU<+YRMceh%GU0SF<}?WnDXCaaB<@{rZ&#m#tlxpuY-MOVtLvv9?)iZVU|0WcGS>h zd@+lyA+Wh3aZqU}Uhdp4T_I;dF@fB@; zTX9i7MVQoOtjyP7BRreekojV^($`tqT%2I@kt+3&0?0UOy|G!}+Gn-Ai-LG}h;pp) zQm$h_8j=Y01fU&HMUz9GUc`ntn&AjtMu)P*J`xz3ImTFV!t{# zYJBI2IEXz|vrJ`_ooy={Z_|FGmHj#l5wvrj22;L$`$GEP({@+2*GShdb=3K93&wJE zDPYV{mR?upFMHqoZI4l6z}S&A&-A@_+zdAky%3t}cYrx4V}!MUP)&f{N4c@T{n&G= zXS#I+LXM&tT2g?U>%DPBjqk#^BjYJ6za-dkgwvTus^y zdrs^Z0up7*d)*!6j6rpBM*b_C6Zvc}`r(n{@QwPx43n>9i0K0(wZqI;Kvip-bK2cM zTYV+K27m@1Jp9*JHR3}ml#{(?X0`UVk!uhD^8@l2>!A1!x}TU)AW2P2PiE4>NZaBG ze}?=0cRw+X4K1ulJh$%Q*eMcXt7eBY2|Tv=0tX6u@38gr`HU4wm5A#(0HoA`GleVx zm-%c5xhCHB{o4@+u!*MVoy#!oAB5x0AZcul+)`>^gb$7(;BXHP@S2%5Yv2>VHmcs4f7XU2$7i z2+|1ZNu#K9IYOq%t;*`Yl^m23H8JuQ>ugkOoN9aFt^s^oZrPh;`=__+R+GbAX9in6 zN>n&XcpOC~O-uM!o!OZAo7>T3W3a^97TQUk11^gwu*6Qik*vG7oSHhCT7Dm;lQXQ$ zWGPI^7WxMA)ycPo6#>!>u5JLnGVLr__RXWBG5FzJeN(KjGx4Ui8|;_mNS<Y2P(Pf$YM$@fI2|Nx6I<3ixzaVzM zwl*wVEe&-e3e&F-GQP30S&y^{6;~b`tfr#O7DQ!I#^ zKxX3^l(a%aBJCS6xnfTsPoP_o{?;G4dV`*ax@c{aVaF92^V<5j+Ua$2t7ki&gMG>K z-)sYjB*4SVJfKZ+$C`$?0pSWTj;g1-U`~?V+9I1y2@TXHI^-B8#pPYNsy@B1qCYlx+*>!&d9_Hovj< z!2PN4jJs2p1i;3c??#h{5uCF|14N_-1AT?a9$yc)GlRPn$q_98DfHP5q>or6Bam%j zb8UyV=j1RBYXS86JXGHxctV>+lb2}G1#!9~&Hfx>lD*$b@z6+|g1 zftWZJi$f5m<86xk&c^=$?~Zdx5HaK_)FnC8Q(&X+!o&rF9Rv-9$RwNl?SCL}z}RR@ zbEn0>QMfK4r9vJC){I?nwH3j;FTnXTDe%MTj&8?>=Yo>N%Qdw``gbP z*dl^XweExf&;UFAX|Ai;oX%pBJ=lVZLsHW@_j=odw;yERn)=2fXk~uG1?a%kq5hR#3ONoYNRH-5cMvm54 z(QbCRzOB8_Tt;`2gQy+6pJm~tcAZUxcj@LyZST+v-{pxs3Y*|JTs+fJcuZ^E?!m(7 zxgkMY8*@B>^*HGQvW?l9-QQi8siHXpu>?2r!(QO&YZK1LU~$)*iPYer$rQ@H#S}?v zQ5hou>nv8w%qSa=P3*Vy$2$9@riK$;PO7U_nUsOq!P@DluM6~^rBE(!Wy>w&u>^Q3FhObCQuDj&$C0ZNBNx$DS<8~ZbQ-^&f7 zO0Q{&o--lDwX_RBe*>6 zxgMMK#{*9dHPj-TrJ!nxQ$W!sk>LO_P^Q*fbn>|cN09c!G&l*?yCnw$jF9McU{(mhvQ%Z-my!G$A<(31fckg00aMz3qL5{$qRFt~h`E z+B`QPb~Op9Ol=&OvLJ-%)O=C_V`Jnw6Yd8?f|AkU5Qqab->r2~U%Qq$?k=qqYR8s^ zD8l~$LHXh@ImAK6V^EAX2m^|8n13o;9Wbm+=s?{-1dpHs!_xp=tPr|~iuphhta^LF z9l;>n>NfCS)RVaW_?kLS{Z49N-kcP;;P0wJwV57$1PfW3-9OR>uch(M!Vb7<5}ZJ6 zjmm9PvQS2vbJnC}hg%f7vWuGZePCoD&y{dG}fjlp67kr_Z1 z_(uH2`W>-9j1rz8;*gPlAztOKK{`p?TbIvo*u=>cG}fs^M-<$G^q^cWsV!@fu+?i1 zY;%bdA3FC?-^!_mji#AJnC`3q8?n%B`P%;0>wqLQVzGOkG&RDI)%-FU;wc4z=$J{S%f?8rBUUsY6G(BI*zh= zAPsMw?|e(z37izU@FPW7Df0EEL_ig^D`-7bT$_86P8uLKVN))=N#3M1;))3^CaWr~ z?c}#3)19q@12>FPqWKhA=N4uHDt9335y!hR8}4~}-{1RTHjV_u>zsLJt$+Knaa_fm zHD^sbS=V02%HXs3GYm571V`95%(|*hxD^Wh0$9l*g;lEF}KYwVM+zmN^sC9j} z_Ji5C8F3vC4`&HQ6?D-}B(F@eNTk96ZEP$FJKTbL++x1m8ry%k=7$&<{9DaKs@cGqJV_*aqZ*0OY``5?>Etr*H)IG=ZX}YT@di{IUw3N|9012+q;tQSX8K{S657{Z z$gEyYD?6@9GTHwCmv1*L*{*Ai*^mXra6=pEQ`@Q>3hgNhf3?-W~QGHa5XJ%vtz|!`}(s zJEF#iTHu(ergI58O3Xkj-J5E1+<+Z957z`pkVuYyC*cq@F;$@~WYmEr)F=<5p*Q7! zp!pw^UM-;4C6GwFMe(V4#FZLM(}Q5QHfB3mdUQWLMj{0Qo1nvH0vW|9DrgF^M-d>9 zmL41OE$hm_dJGd>Z-OW%u8QUXSDR$OPaMr$7m%yATf|D?kk+i@+lXL(U9%tqWBN=;87ETV&$EO5wdEW=MPJpqY50be7G%SRX4ZwtT?2XvzOR(HXiFP&yl zr7LwJ^c@1q_TfTCVTf_$7Sl+;oU9HUZ#+``*qIuKP4Pw5Dv$@m`?fh44 zwrRqKGH)0Je~bBkdmZt4wvQ%)M&e`N&$`=bbVh2+260nLYL2q~@wpqQ*xcWISZxQ0 zL>y`Rlwp^Q$WBRDQj+%&PF4nuISX5s{)XiI&n|drIk=NrVrR?QHIhU&g(Oo-?2cTx z+f~8w5>2iz%WGhZz&B&2eA5i$I@ijOnL`%c%Q;}`SXd3skITck>%JkRm_I(5az}6z zR91^36T%q))7}M)18!i8pDnlZwgbZ76M(MqLDGLnoWao*gCPb+REp~I3+lJQeSqHk zkZsqVIwT9m4DsE=c6o1HU{r2IX)+ZNX;o5YXDZznlK%k5kQj!Wv}mq;eflVn4R8ug zHc=8p-^*TnhTtzIU_HgXhT9w!(BUM^>Z%_4z}Dq19J{*^una;3TiWD}n38&vU@!f! zB)QIlHQUJvbjq6z8fgaMR2Fu>mHPX!8*?@T4J{E-I)t}4%yQRc?{Z@ZLg{@c`E9+4 zCsPyXIs01*z{l_QqHkioYJCuh!P<5x3D|;HVR6fEp!dOu{6;(%UXv#zprASxz1l4W zMfOlEJ+G*Ihn_j$xE)n@1Cjmfn)W!EPxBO#0+wO0)27>ccz<6!MCQ1-Wvc$vh;=lO zfT3GRP{DV*Fc#;|!{vN&rYU9sBbV7uP)rl+y##8hFgJM+r-zYp^~mx2^hG=YK3opqU8|bkb#1;9odb@+uu<3 z#0bSIJXFVD3Ee_681lBDPp4mDupZ>&px}oZYPyvaR3#G*@Ytrt-b-zVrO($B7qF^v z1@&&F3YMsdRcsG;O|3v}tTY>YT%UW7kj!^hF4lLSny9rwv=)hgvoP0gS1bkntkxKU z9f32y`MauP4o6rj@Cvh;Y*cF0nuWk55SR1VavZOOo50q-O4+D_r-()4JC$RsvFowl z>3@5UnCAFFFTx6k`A>B%J}E2MM|@^x0^vbLz5f8H0DgBT(0brN1lQGZq$xFsC3=F7 zX$u7xU5A9}QS&;FwXp(01PW_$OJsm24Sxb;C-YqmyQY*i$+42k2A`$>05P^Y2^e`M z9pf16rp+NB>0Nq&8i?dbXSwp}@3t91P+=*tI^Z?c3aXAJL@L2SMpf{Ov9hym3b4yEID@u-Nlp?dSrK zKW6+%69T%YG-Ei{?=+fVC09j{yNCr>Qg_v0s)NsAzmWIBjqk@8)pgB7u^ZE>zxx&; z?g#Q#L(PT3BwL=Nf5>5;Cx`;RUf6L_J})&YD0R+(j+E9UI?ne~akt2A=cfcP1PyC) z2RMeQC;4j55Q#%~V4IQyT!21I3G_RWjv$d-H3?NP38%tcN-%jsoh92&$EQ#|?oZ1d z5sHSzB{aual{M&A3mGG8>K0#Xa`|~;Mi^n)P6TTO^zOvzEua!De_{o_w)$hg0{}_# zT-b>k)l(9E^fjE+hz{*9}6F;AosP0(GjZXnQC9gWJrX%Mxjg zHL4+xH5l0;jb&qGQjF(*TarG%yWq@VF(-Z!i-=6ED>F!sr@Ufr0lJb%<@4JDB$8vu z_V>XZ=m3PcPkdJ3jbN?L{t{cK{x<#Z7@6F-h*IfkmRQS`8lx-)_X%OR^*i(T>4t#d z=ytWi2{2=NDNeo2Yak^B^nhCTCf+YowfwMQu~=2jOk=DQhFt<3tOGWp58<}N{IMi7 z6GSnNx*$2uV;Bz;ux7YzXJEc7?m6FKx4s3=Eb#*q%Xbv^Fq{@?##N4JWKERFMfU># z053~@aYfdJ%zvq<@93Ft;b;M7^i-dI%u#KvOJ7O0;`ZNT>wlQWC}@604;=s%8#V`= zeAhwnwoUvaElAeJ@!6L5K6mrp_xWRf!Hi=ATO)VBHFnaT5HMK>9H5_zo^2sTLPiTH zz4?n+av$Igu~TnsxH-84j|1BdDvhgd+V)biS_G<#V2@&}Wj$@q!>{LHVx)?I5s`57aTib-w8z* z#WlegxSPIIa%Ovg$1nHuvO-7ZwNNOmj3`; zO9oNDf1)Vllywtya!9(WgUfsDetf;~QUPu1bnQ$Kn894?LDHUPj#AFbWY7U8eMP(q2ap#&;2xNo5lnwo_(bp|Leo1P zrW4X<6!r${hB(`jf;T7VcJ{_@-05pV`A7M^fV#^-5@hW9TIqvUngs-A!1#na0_s2RaE8l=31HNc)*rYHOjFtJ3Vvb7GO1*Xd&2y|nqaXi+1H1aQZtHD5{J;vFx`*XxV+ZE>u`Qa_|qL3=-^ zS>DI^hGn^HBvDyxpbrohC$Ed?`E|v{x5WbmSVjuCBpa2#!bg{;=ZUTA=%~F0@X=CPLcFh_2JZ?X9Ii#y{$HT5>wzYabJnm+24GHF*EQ@Y zq1Dpu6lpidf$mMYe{6A=RBK(A3}o;9r&Rb#-@H26 z3z6ZtVi@hx`wwA(nIm7sJaxa*6hb({PDdmfb!zBB*pHWlf5sU(f~%7wTm9;uX^}N| zgs8W8rEG0|M&FhFOJXQ$fHeOA&o51K2tH+)0UUx)4zv*Hzr(4?KD>bWoC}Cn?Cj)- z-#%X`9cFN6T}A9anLF5Qx&Z-y`-+d)#9l22r=D8!R)w4za#Ql!V)27utteG88{JD; zn%zm--#=_cO+RTbbRJ%L4^=j^fU+Uc&^&hPDXDT~gf?Qz_%T zQHKUXRc3GxE$+LXgA5HbQ62pdAJ@u}ELy4DgRQ15DIo4i1OgAH#`qxE#A}KMn)0HG zv9wdDRlHH@U_Yp+VPUoWhs>NT5)COj%`!n1&);6j_A*06>Kg1K)UKzk_qV0}3xE*Gs&fvj1f(QTx8n)N~K3#C(20fCS zAcB~xCFEGtvUh8spO=Q;J^q+Ot3q|z8(H+7f1}XaGqd zuw@abT~->bNk5+C;h^39N>(CK1GMu3+MiKYBH)VvS-l79Y%wIjuD2w}AVAm3V5-6f zq|~-;$U1;FTMt_g*AigVA4o@6BuH4*g<=M#wzJaA0-s-u6j9UoQLa8c!L zFQKgA0*xeqpj=<|)4!3y0AdEU+k!ABTIQp)R#z9)71rnQh6EFH{{Wpzs^;~gQsJ*+PMt?%;oOnt zZ(;3S@M`Y*_%ft*bFsq@YrTRn>dWT$mBJ z=0&l;W-jHAq7ZL5tY3^^PvQ}_k`&!Z^WSS*p7_e!CIgI3az6NTU1-rDsXQHd9m8k} zz!JpiTUeck)87i&h%^=5zPQb5HxrVZI><=kIwJuGy8!9fo?`bmKR$n#TsvrR4JD>V zWA~S2;t3VSSvx%9F7iVNkg*oj3E4^VA1h+bg|x$8k0VpZ<0UQtimgftodqOTC0txT zGDnxb_|l3`?ND=M7O8cV(bcOzgt=jR^|gUsURV$u0RSrOb=Yo8IN}VN@krrWSx{&R z$bbp`Ngh~-*$hq<#a@s^ij`1~Stw>9Rik3Wi~b$?`rMVbLw(7`3-7b=+7n%J_uPa* z!zE(M^LX6?vMEB0%m-0%u@p3zFE=Ql<`b(=nfX&Bgr zzQB1C^6A$PYaq_0No*A9XyjNJC@BofDSKROtbZUj`JT9q{Gf01)=6e-y&Rv7yA*0mI_C_FnOg2PADNJHq=5TE}aSw!hc%#fG%B&ReOL1vKD71N5D;qjEXF4NY!6w$){z?zi4mX$~w2f=gb6q$i6m-TY zORekzl+tavAB1nxz#OHRSVvg1N~h804Dn3up2SU%Rkyvgv@G+ zTsq;@oRAk1sY3`qnj^zwb_gBH@vz!1RL6;Me&w%*>?=rP0q zFyfHr-4)cOB#2{8H{{Zp#!9c*_*IZOV1nwH5k=^%}U~W_y6dj9c zuo}HDZ+vq=26fRa7^g(3Wg&~lW|YX%067~FtFY;Ff2I7f8-`l`D8`4Ex?Ln`3&I(h z)pfC9wZ+BQ{SUqI6cxaKS3Hsl8OQM|710DmG%0BHt-eU0A1iK72-1Y>61bUh9DjeL zue+<*x|q=bCvS+~RfW0jdDxGt~N1%{fj4afVaiSk>%)B6e@hh#vPi z=!z(HapkUxasEVX1(<*}F+USAyIX!hEy?o7Nra!s>nuHK#S6{zQ4|w6w!I}3I3rL4 zVm`M%Sm0;?*UseYJ36YxUSMkKC0Lxaf%S<`HLxb&dhPVWe&?3;d5wT63)&iQ{kq&0 zQi$%G-HBpjAO6>_-q?Z*wEr34g}|dqikWP zag<%@K#0c9UCSsoJ}qAt>8ItV5^fD|}Epx5Z=we6U7a)BK zlhYi~2*C+yE!HX7)GCt16^ z?ZBTEB{POm@R3z$+d*BUWsOJls({XY4agV&02m_S5vs0fE~v!Uy$8B&Cf3GHj+@&_ zuqUFg%rQSK3#TMel4uo>v|x_sNEbYhA-MIm{{Zsz$4S5$tUPB$s$Wj#~H$q0=Pdytx$!K^^9kCgS8+l1=_#0p<<>_-fkDxlu^M zzpZaiQ-(@t1i~RssyN^TB*r*oYnDCLgARA^4bSh$ zVo8!`0q~j|Bo02wine1^stLDv*CYCL^tb(^>x7p%tud`|QX(p#yr-Oms~h)*)+DHH z{WibQW1M8eM-2+5#84?TtW_2vWp4BpYwW9}1AYBR%-iTuLX3wz)4U-`s085P&=S3r>oH1Gd}qu|HfyUOUQ`(g{h87OW_?p<;FxyYn9)Keh#p4WK#enj zl?i>UNfsM=T-(cR7-%N&%`BUQ6+I#iF<%agf(Y^(e76`O0Ap05;smcr@Z1%(^nwMp zQcb-70A~g&V9`LPx2Tm>VH7bPY__?vw_b8zO#-cEbuAWyrs0`bo_dHr z5o_BtNgT)k^B!d0*uP<7 z7y$I&%aU`+V*^3OSU84W>I-fkbFtW10n_)-7s&9Dy(-TYlyM|2CF~mF<6?Q9Tl2(7#HtwrhAvTKCdma_vk6HaLg>zKFe8V5|tX6h4k2-UJyBLYwflW_6xfH z;;iE73b`A}LfUM~O7ks!>_xflwXt8s*Ag(@yMM|>AS(u4op*qf;{=PHuA`O62grVy zwj2juddK>h9Agx9D^p zg*y$y6$j)8%hP;&OBTBf`*YvZved9J=p&A)@Ue~)pfnFN%B82Mm8KFmC0i|*+ejZ@ zTo%sX`p=YkuR&*YEOWL>um1qKNE+q4mE7{NBwO=8+Zr|ixRV<5ByL|u`V+<4DS1>% zB2Nij&Dpu1KbJ3-HrmHD0s)hc?tIR9QGEi>#R6!F#}{>L?6%fedj9}>SbY5PA)pA2 ze)ucEw5hbzfr7M(qgBaUd@7?>;@(#Jj5VMU0LHh?RLoS>9HgQvE1e(BZ9fn;0B%LT zV0^x&EW?Q5I21(D7f4tBps_Z23pX&klj<*UE$@zN02J1^pe87cu3oHN2x!N0K`FMt z4VUV7!(iY&y_IYDCk-5R2#Qy^P$Z44qe7?(HuLHSslgEHlZOmtMdAq}xO=DMr82b3 zpvLS`&G#VgMeomV%-^Os4Ach!2V1qlHzhlyX(VM zvlFK0pzxFVbHrmouiAjzj#Sq);O}XmR&^chc2EM^@?TIkJq7Q-GCeR(BM@=^D5ISN z4`l1ft~Vu}V0Bb2)sQuS9<8L0nK+3A$i{d3a6$w?ijR!>DH1<&<&<}g-so6|;$R53 zwa-5*`QSv6zu5p6g=tNBFJqjFNUVG2XS+SGdz%&;^5<{%#G9qkptreB*#w4x`=~K8Xjo=Ew&aRK=txeE66DXR{TsZ##RYx_<9=+mwWy zo&~6=g)AI7NeFw~jrTs_56;~0j)=rZmv5B>(p8=~S&cEXY3IJ=xeKKIK|YrQ&j)s8 z)YqD;G&myMJqkxoj19{oMs7J;zkb3(!nI@h8Z-vCvK)D}e`Ucg%7$9{Y6eDz>Ktc3U_4z0{qFaT{p%Ef~1 zdxhpb#qq|V-qyU6n`TXQtdp=zJFroLkQgQRI;28wM_X$7*m~kv(=Z1V1Wvbnrj(gw zO$l_li~`2O{t@m%mN(_k01a;Atx+>6B~Q>~P|kN@roj9?Pv$}M=ZP#JQh_FoqJf~r z6uYrm8aR~~VwW7>cyW^o;%cCu1E{#gA3dRZD<&{2-9L&$a&mEO8X^W9F43 z6M~D~D5#QE0F{lD23?9M@TeZQ{{ZsGT?T_&%%&F*An26zbipBrYqViZCAr^Xe_n&H zowu5w5&~qN{%DG8x=t6nWKg<^7Z&CE-`rt=qU|a&)}<)N;+c)WDc$@rY16*u+g$os z{`SPUQ(lRV2D6^MR9Ob99_*bZl&B0oCv8W6OPxp9VhOx2WvIb+4w0>3p-m@z=0<1T zl~TiNOh8|pi_seqP zK$*cy5Nco%E)ZyKzAGD#t6Y=mh`WVM>-mZs%jsR2SRp!xd9U#Td7wU*1l!vM9rZjq zsRMqur;*A!h>2lk0_N8O#2;%G-_H1%Gf!<|gn(x9^(ocnjxlgM%Y_G)$5B5|&k{_? zI^?490#vvaV2sMivkh$+CvrBw>C+O?C|y$ksYx7YWF+g>LEK#V6L0C;>+gc0s$7!* zYxb6)L?U*)iLU$GanN7V-o9rX1C%zk3ZimX)&R#u4xwUCZwSJ zV&p_hGWWOB%xrfbJ6L@%=L2-e!&=^s$mFxE-9)a+7s4(=f(`w;jAfZ1&OGz?-@QK8 zjRV<7;aXsG2^b5yvVg;HpD$7`{&1@YHv5B3Jc-XdQY^rkR@~;4wp}QUE!20)4|i; z7B&a6AB#7x|379UxrTZPauB08SftfiD%{M!G3@ zywX;s!Bd)q8x+$vX>Nx27^JUL9!S9S2&R0{rd%M=$z|$y;|1 z1QWTHd+FL%@#+Va?{6SH`F$~gZX`f37nZY&(rQ*w+RkY-GSf{NFB~f_lp6^Rw5bEj zTPgJ_0NVJ>v_EXr(9;}FRVzzos2~cJp5$=Kq8E4Zrl?&tayA2>vVnrJZ~y_jeCxEY zK+3=+bBAlyMjqKSYHeh~8Zu;WR0P`hzdl^|^Twvm@abu#bt~w9M=%DoRfi^Rafre0 zjf${Se?#YPyt)i+w(%c~c|_(XA4y+Bv4>%jIwTIEmD5{zOAUzL#@%)Y%M#1Y>({uA zWUk&0@RVyTRg^g(phmWkHc&|X>;U({2ABtae3O442nx$h;hET#vaOWpxVhivZU){% z7McsN8pea&Db;|AM@|dWjX*I)j1o0kX?tSfvkrg%Vs2Qaf8c0Oo0oipOBzW|b z;?g9r2h@;0nBj!CT)BCqPP!>Ds5)kq19xY_yvE4Hk9&|lXAngo8vg)0Z%c6?Lryq=2+VN%QAwa<*AR;(;Nin7^MQzJNehVCfYEO6a-13bt_uHy^7rVg2j)p z1051X7%1e-@7JUbX_@Fp-Q58y>l-Gfw#1$Nj^yBE5!Ez4Oq8jp*=`BeO;C%r zk#GUE^%WtRhqc0wTb`KU42jpGT-RC9e4YuZNokr#1x}#kZou4|dmrzKGy{_72t5-TL6*`TUD6`8xo^7x@*kh3 zAkHT=cd1P0^rC`$+J~5ssRU!f2gJir9+m-i{{U7bNioM-%`j95%%3W2l9y1XjNO8X zU_&b@0>t@|{{WL8%;SW*gES3?iePE3$(p#{Cy;7A_*WMq_P&rTJp+A7#DgXZCXhhg zPj&58S9eh17hiWEa1?@Ah9P(N+Wl{Q4pLV%0@*vgs;iaN&nBqQhmDva(m+8_a0T`kwBDF_USk9QQ_>IQ@04+o2aOQ$dDs{~& zw|!B{cvb{Ek)})O>)}yhZ#&-->eW(lyn1?+7ss;dhtTfrnnwOjg%jXU+Vz#h09ai~|?+H*{olAN@6C%V%kk=Eyzu(vOv^KsX#7kK?Q*waW6ItU``t$SgtjAD=2OK4jd4Syn9hpU zA;@R54S)du0Gn-vJ+f)MCjkXb%UPsmXKh76-B$J_HLY&GFPF;9Z z&=D#!g05TuM&Us`{z{kf+YKf+l%hpvT9qy)h{vWYs8kG#iH9D<*6bTRrSS|Dxk6pGFC3SqZ z{Ej#mQjc`8L_VO5q0x1>OZfm9l3<7#Md&O2C%Vtp^ zxZF17es>`HTMTI3Url)+E~;BhVyBRP5hAG5%U2>v`Cz1+2ER%!$p?aqFk?_|!&c(J z*jSUW9c;Qb^*9UHWZ|t8LV|UvP$ieVj#&~hBa-NsH}M+*e{u%>0LK$aai+a8-kK?e z5&#USj2chon-jh4ZE!kX$8RC@0vP!O&|{*D12d9-F(NFISQ!}WYq!LH5%dE804x|a zF0AlCV+@p;A`MJc3x6=!4emkTdwT)(z(p@11cz04X~2dxC&Uv;w%2Q4^xNl#v>1ig zrN)WGZ7r!#9f2waz#EPHjlX-04~k%}rUa>og(ViVIvqMe-0WL_r|W_N(Ku_OQGzO* zSin~Zx>3}P&rkst`3`uP$w8Bfb~aaLWdiqQx2>;j{rtLMrs)mbh0-XY)=a(GYup>j za&2M(TMv7I^BCz7K~!xJYJ=C+v08vE3IiUsLCR(*j5oIoDpv%>t9H>c5y& z5iHNA{{X3}wI~-h19R7FT=K#}z9Sk;$@KP40!F?Nx`!aRb9VqUvu%EtK7PONg#rvf z*P>}KF`^978pamYYpRPd799ybV{dE&p}>$NaP@aR(<$PL z&{V)n;mC^BYSn96-~-{Yy}#T2@VgRR;^&AX-^4P4upk?NI{yH^DwZ{-{Bh^iCFGP5iKdXo zbe$vsq>Z=V^BnxWumn0>;hsEromE$*30wVo$xkF|8ORd1dP&`g1AFz~YYbkROvjWd zYlDQH$}r9hF_n3*WeSX<_TR;@>&RaP0)``giYt<65me6O%p{T^Pk9f;r*>no3Ovou zAT}^6uiCmL3D2m+v&Sl`gb}e~4##2uzrFYLI9LEQgIFtxC8TSzV}xr@?9p4=m-H{HgN!JC<{k$Y{_Rm>Z9ay|@ zt1tApOOwxIzSsW%IMJ{M@e_DXx0UoSq%<{v%6Erq5=J9H0Du7vVBQ;>`U?%WK6l2o z=n~9z#(F~f4UQ0S%UCNkGm{x&0E`O;znI@mx8=)jxG(`AG<@rkm7v$r7Nna_n86^2 z)pa)@+irH{f6n~IELoo!I`Ys=21>PM)h0mg9Ck7I6+-g4JkOGQz-W9ejWn_uTp7NFR{HmcA8PIHHuUghtWx)uu3~WdI(3nfhW#tex8S zb|pAsChtGAdYkvk=9P>*;%7fCSG@*(n17&&rGL{Y0*H2NAT08rKY2R2{s4x4*UU zxCOC>wf#|YgQt;RETR-m$yxNm-Q}+DVibE^-1}hM2{(6Fcf#T%*DCv;(oIZ@B_!dP z#J$?H75JG*EL2;OVlI6x=ZFA@PCCz$CW0IYP9$-5HnCkDX2*y)vk1whC2@-W@3H55x>480gP%C!03KIev87vQeiO! zXk%skTPXa?b@Co~h$3~pNHqnz$K%yC5HQrw8>sIITi=j7GvC=&N6y%i0TZnhShN=5 zpghWMS<6#RBZYUFh`XPP;RTP7)WqA#Mmuv!!59$X7!Tchd6dlcsI@beCAG6!=FI;9 z%(mXX8=otC;sih&wYf-Xx;2skUsm-l=^J;EPdbnnlM>27zd?K04ubfC=L~TkT{GoH zZIA#Y;G^Z)Yu3b-G9d0zbt>Flmc$Et>ePSkwg(D<>*wu~;z&0^R*$%%i03PA>%1Bf zej}tP1JnFsZkEhYYZX*H;l4gpsNo<&g^2;fGY*{BbMAjEa6vO9Yc!fFWT!OtQFPKv zKI9U0DE$ffdEnp?Gvtl#y(3&y`Kv@QmA{B>q??m-VtvRrzpf_k3aDh6$uU(rR2fRJ z3S6qo&g!6ekDmIzg8~G^dTJ51rLj7ky%4IIbxAU+5I2&<-0RW^Kbgcp&Z^61l8RD7 zzjz8Q-GUU@^U}n(u(E-FGi*&r6P|*s=Nq%1$fmlcGkJtG=ECkZyknpu!B5PV`3ymz zE{^Gzc=q>IdFPT!sWhJxwXVCL6_~Q0J?-?xXx;1jqPz!$4O1kgfH{;F9p8vuPl?F5 z9{Z^JUmVgM`06^uDZFT-K}~r-m=AbEDI@|>EI-LN{{U75w2JQBh`WjAO^H{?mbt%f$EH1Yj17$y{QHZRigA_Wdfh&bzLjo8ok`F6wakpFjPB@qU0P%$2 zCtJ|fsc{qxn@MLweuUoEKEnS1^MPx?CM(D1e+1j0k_bqFg3^n4QBjVf*0Y0u@A={? z%tcPITzo}26iij5I(cda*0q=PB(e9wipAo6e~NH`r9==kc10S=T|G%=2K#dOuZTV& zL*It6ORQspTBeF)CrZ3)2;t}hI7 z4O*92ww_#%(0`0MwRO-k>X6uUDlZYtWqm*}vYQTIZ@=o^e6Wj0MGyDa*<{4+& zcQMPOaL-p#u*3UyzgbleYCk9tY+cm>J zd3;x*_tsScaaKxcm%3$;zl!H=$X$Tx>Un=_;i1OTGC#jwfoL|EqLh^l6sAQ%x{a(h zP&xW_wj3P<1FqEIoE#6bvr*1sH?pED7JaS)=_)Pfz5VfS&So2r4=B-6>d{z|W|Ag| z-D4$7+nHwZHT{=={Jk(kkk4JxL`;lP6_uGgz}?P}ZUu*R8Bk5VNbBW@6GCb|ebR^% z8kF+NUaCi6UQ}4wlb({s=)R`RxBmca76A6$!3=mn%Dz~iRFQHi<7oz%i%#WvGjFGH z>*6QSTb?>W6jK!>3~8@K^2Ero1LBb(EKr+Wwop%(gaL0*Jn<0|0~8V_nVos3=K#E; zQmy1`ejrz2bAKxzrXi$&59?BvC?|sYo+M|yjon5r+D62&JiT^OE$V#n1e>%v-nfz| zG1tmWXw3yW7>KA|?nhSqF5Iu|H@8b;s3;99`%@xGnpdz%X+*L*BkR@-YRY-BVw(PB zFjM5D^v7HVr=GphMbRfOiI1KzmL{0UUMmMB)lVW2*%T=Aus$zSi3De?^bp-_L%H?D z{{RvghDJsHVwVvr2DrMgHY3Y%zmPcX+sZMnsremVO$?5_yn3w?8eg4F#l* zx)W3Y7@QJ&p(_?X6+psO*e2tDkQe$Kbcpb-ChQK{)+_6?ODseZ@|{GnnihDHK5RUP4b4RSLU+<7jee@sYW6pt)mBMpE7&;p)lZB}5B z)FN2e2APQjZDw)@sj`4PtS}A^tm~#3r-m4vWIjp_B$8AZBrz44?cf)_k!2uxd`Hij z^u*l(!#!_Kf&r~Hs-l$nAA0VW*6_BJjC?y^S@OM#k3oBSrt#nN?c{;hphLIlBau=f zE|OPD6&rdV?{WEgV5^ApRf~+Lo;^x?y&;wsHuM|nw~+kE!HFVr_dy_jSV~`tCs4keCRBF0~NnuxDJP#@7>0|4;{o4`2HK4&Gk{g@mQJ=ar zayrTs$sunDQV)SgKf;8Pd6wIj;!WDLjboDQCcGDi3T5v-Ob!CLrgDnV@PQ@tBmf@> zH)eJ`y!T(r&jpSc_1Btf+XkEc0+B3brIiiju|yyqZN0ZX?Q{B^bQlB*@InscRw)cn zPbgq}#0?1o+i!NamCfuthB|>Di^Kz#D!ZK4Fn5gWZwfOgCj7Y{khi(OlSmrYvR5qG zoFSQP8k(6}(HQ_;Yirv@_SShLDmeQ@eSl-1**m~T7^|lC1 zVv_Cps(8t*96kR4m(N!ts@Fc8$J5sn6{nIAAk$EgZ>w@F97wn1gm1s4*8cz@jyS;0 zbZdU4e7YryB~sC>cWwEWJx^RkMCMeGK|E4~_jV6;vjU{_8hQT!__4RPBv5#Dt?CE> zYgwT+ZW1+BC3~Z)%t;^vu{ZZSf2RQI8s@Ap5^9G|_M{`>)PRwF)RW8Qf1SscIz~D4 z(M=f7s&+Um^$?}V60;JgVoM!D{)`6wZ;reO1AJTiGLR0~HNC_W^8#l_pAEr36XywMOyRGTkc-592DnQ)#es>^( z-p7}}z6_S{LP;2@2&>_Yn}-c;?oXE9gy4p7Dum7R64z+WyAF^T9OU1~uR25Z$cnQkj}z-V18gx{}*lU~Ozb#tB9R5Q^H> zd17tvCWd6(-&dcum%$Q8gLLrJrnRUYWkX7fX4DBGn^!Of%m+YAbpD(m+Elc}^8F`A z{UMbT_q8DYDEuK5_6at%Cw>>^An><%GG{n(5EC z!RZKrBv3DD=^IpyrGqOH00!r+{{Vh{Fybbd>!I{q2B@w1Z732jPz$+zKpR-t6=UUd zx6{`SYfF5RobC848#2HKhPf(RNc>H(-{t-A-~(F(Vye~CDmGy_F@-H;)VK2_us=&* z^1-r0Pb1JSXd9IqKB(^{k(k(9a(CR5Zk|^E0Bj=AkS>gMzg$(8P*qgx*IuEdhFymI z{{VZEF-7D&_^LI#_Y0gS#h)ZsB0#CDK+|!k5xWnH-8{ayv0}mqXrA%qk7W%4CnRo3 z9TWkmqiF$;^p6nf&ujd#V0gi4#=7C%5g|$}giaa8tst|6xC9-C@B55R)A=0Ih>R|%BBU{EuA-@X++N)M?e)T8jsy(j zx`7}7wVb;+il!yAffWZ^^;f~pIc zL~B83oNd8Ib)UE*a2fv)|Oe#!WFaffdiW@$_Ts9B!w z0Ul~kt?X`nu|&DQaNAY~Sf0?nH~v$zv|9^di@lfV9DGL}TT@F!^O*kbx}>oe{XM>9 zd1EQval}_0{CU-FY|`0x zB~PQy;I6NkQNed+*!A#@y*^!Ug0p*F5N2=`KIa|Sg}G-SH(tw>{?Kw5`&p-`3fz10Ga+C}<-Z|+L5tQdEpdsaTE%-`q&lLK68L(gN|!CA&9x(K*O9l7zvYclAcsyo z4ko=9(X1VKVO-UoDTGYIFXtTwz#9Q;fHw6z+so4yUN1IUC!fIg=PN;wDBy_GBNd83 zROsJJ4UdMv`(LIkQRfVLe16lJIApBUjPau;pi^Sj=FB;I9l`wYW5*YocxU{gcz|VC zAd)?5g~!FKZHeXx_rCY&FNT8WRt~+Rl0gPFuE@eW&s9HoMZ3j4((kpb0qSf3-{s2$ z0DyV#Nr2XX)Z>yRkpqb1Dx@|1OvR3;KEZ4~jvzb|DP3>RJ}LkZ4zQ=nl%-{z+C>qE zb&VI1SVEKKw!`IY4Ng2#jRXq(uW89Kus|cYNYstD*y$cxMThL*fg_1f?Z&I-AI!XE zbh9m-?5YcHes()~Z@wbzQB7kFYt1^J^(jaeSlhg@Bpp62&y~p}`U`Z#U@NcU44gNl z!1s(X=P_3o09kGEH@%7WAPjIB5~bMFB%8;m1+x) zEg`0-s*$ABU093z5^OKa$a;F>3B3^Aa`i+2ByJl1uXQX{0!CXZt;`&PyAEf}fpP9m zI18;Ub_yW4K<=8SsRCGa={g_zaW4CVW+eXr+({?X*9J+G8KZM3V?6ylvQieXtgj80 z$mIbbfNrWkL-}B3xMqUp4%G=w%;Iqf5*IS7hHj*r?oUgQ*pfp@19tT-1)#{n5@Cx_ zRqo5XsvQ7rsg2Eto|Wa$bHF$XjJ`YTCB@NMrF}k5JMd8`^8Wd0ncq=ZJ~aj zncbO*>OdIh0?}St)FwICWDWyfo@vT@0HRh!7k2KW)IJ2b1LjF%%bD~T83feps*>y{ zpFLsyL=eXV&dRs$_fH~DuKquyYXA&a^B8$pI z$^6L{FbP!d(|wKpe69!3;#(xhOBDc~Ysn;yA(2;dqyx3AO8_<>=@^^2<*jj20gz6# zReL(j6=Zg}cO$wZP48p41J>YqU@sPl1CQ^fi1I2$&#i#l z+m;YrdXDtR_^k*ek(CiFvVP&E)nJi=Q~|qQH6VQU7xv|YA;%ez3~{M}Q>|}RUT&N>{HJQCF@`7tm{qo2?3zIX=GOXRW+@69 z(Cl;d{wlp=uBDPSW3rY2+`W;Nf9Kbx5HYXE^<8K+8pThbq>7rInN)0pxMCenI6-v$QG|jlT>5GU}m4Ab4b%F?$Mj>cU4&j=W^XKBgQ0(6b|u3=kTADt5iPP zkz6lb!P@7_+j|TiBAWI>+yYEeGR8=|$s(!{1%bYnzqOf%$l@Gp;=@=4#tDtdYEe6+ zBq}Kcf_iFUzt;ZP=zs$1)`}a=Gaw)qkXgmKZT+qN@y&Ayq1LfX7eRucRLRXy2a%!E z;rw3^2d6R*(0SqoKrWD)+~p#x!e!K~%EeiV?{yXfm&@zrdo`3S}TME4ijEVbSq5hrP z5TN9R)l@8Z3u|}8GcfRrl10y3ZDIQzG?H=WuVl~(Fn22bZDC+g5USAz0{$)5%vH+?p^Y4xV;)Sqg!556FT!bNP?Y2>$?_DY%qmP9;VWccm9#rq^Z~fF9ho zKktDLBg8uj4!EfYGM5Aj)*1otR594uSdH!JUF^*bA5s3?lH#$mazV#gNmzWtX`r=xi_|} zp1a=uTc6hztpP9_h}NsoFqjAgy8Fn^?7(ccvGXTuZf-jC#c(_%iKiSv?mUv*NrU}H zXpqMCbuZxp#`{>?Z#xgu7HrA8EsrnKmat7!+L zO)Ho0-ATp)ss)@y-yvl;cREV}eLIj;Uzi(uZH3*vLzewfA=jotrB?TB&HXMfbIErn z`(rxMrIv%HUM-yiNEExJxzfRU~~~pLCd;|xK&%xEa=x;y6aPY?R~Ll@ux(ly7b0W zO0EaG43;vH;pOHoIdZln$slFwxx0{>k~O;nsaE%U+mLG?{{SmuKm=1hzp#h_o+wLO zy$E$O$fN+Rx`N$4K>cymnh4Im-qYx~k}6YFIlR=dO5xkOjZ!q!Ew`TB`u?3TF9 z3))Dk&wZ1bf}!?<+3Ynm?IbayM;+f=3;2!qx6BMdKX8yw4Hi0MmV; z)QO|CkVeI)k#@H*1-&;n{`kzbYiz6tW;7d*J}cxu<{k$!%wS~e^sL-L$527q8^cj6 z_tQS8qFt@I{RRG>SH=_V3ysVM{JP-2a==7`h(|N^rLKyuwO6@~;ZRU>(P5wIb1HNo=Z&oAoqzeBYp z@;9k`Fy<r z&wN-dbHkiPFdOFs!=de()MNlRqqK_7kh_*IvkMCy$*=>=pU50rv$K4V;RBz?o*k8z z)+;K}MNaUvatkuX`bZnt08f{%FJ73kBp7XV?3+yJi_tI(8c5{E`c%EHM~IR>d;G1> z4EzWnYp<$Xs)yIOjlRW>%UAusW5n=42q_qtq&2@-P1^< z*l&9;KO9@ja1R46+9^ahJV})n zDw7ngB%~PQjh*gqr!C1P_|`T`CMJR?QcAB0FM{CP0}0U&sxbl6P;p3 z3?oR)VVb~@rpD*Y-2Ux|Fexe{EYhPbp;j<2uSmMs0#4r`FZ&pgjcT~#C3_@`8*3x^ zWR@z&bE{BM^9WFL>C*_RS(Q7#WPDY5LijxX|>L!0aRP^w_Wg= z5edv-a19&3YN=N^W{tiWfHqO%d+bRz=5Bd;j02iLfsbl>M-wX0l83SxC2&}xFjQt? zeIc#kxc>l1xj*ra4!Z%TTER4lD6?Ed?x>+PHTL%3m;Iv>!*{|ljbZ&u&b&41tn~A& z6wxwxznK337vj=3=jPk}FyP>GRGiZ15O-_I56mWDnq$=J=kX3vhbmjH=bgPUCX#ia zn#!GH3MC~lk(T#WM@0*{@V=!3-rN5G$iP&e0mgKG6HBt^3{Bg@g%?n=ekMWbQ5vuskVV~j6yLNBXjiFlm2$Y1tRvkQ_)GLDh6OfJeRpyv_oJG z^pY+0H~QcNlURT{CNNNNM}#J5^Z{_`k zQ@!<_zJkZ!5JXZuv(^dC08pkWtj(m0cZ>j10X`zdhp-@T=5Yjo32hOYS9j_)!4gp; zK^&&aN(YfQBrqxp-~Rx&fAfYqaRP}Ho2OW&T?A%G!PFyFP*Zf*f^3&p~uVN z7BG3J#zIVrfmwl;_aI%oETh={HuX4+96l2x4vHj`nW|NbZELGvW*1-y`QP7cD7dg| z`i|^20%yWmmq@md2=ZlSEPa4KJK`eo@M=+knJd?1eNxGApoCQ$HMS&t*O9+maRlM# z@n6!BcvD)HAyBhifYLjUg>BVH=55Gw_UDc=O$-GXC+XFl;6@j4=tw_{asl}ZpZ39- zB`L%JNaCM_8KG0SV$F3n@eNkz({}u@LJeu?fY8F4j7sTW6Zd~6Cc$m*V~M1VdE%CL zE33K?^{{Wv%6vYNzb=59vB{nT|ZAzfV175&|({H87`eG>FB^fFN)gt42 zu})m~vAMUIAD$1IWJWk3Rdt%72)6~7ST_XRT%VslhszK_GF`}Z&-)3m0YWRP5>;)= zTlt~3*jS!kr1H1n#Zcl!V{&8`nJOuf=8(6-s(dAg+mI)nwy`7M5Mls#q1RBR1{tT| zgH-Xxz&cyR81g*G_OTydo+YN2XVawXl7k?~L}}^W+5o4;13}rmUS!y<{cKJfcJ?*b z57G%Hn$}4Y&Ke^3+fA96?kp|{`SQSmMSn=55E{8cFju<~xY5a)*SEE|`J5@wks^Y+ z{z@$1D*b+^9oQs?EvtJHMgD*T`R#;|KqS-4&c7*m#(TAbj~zKeMUD2bVYb|lD_``$ zmWL2s5!?3za*B$gG*OtszS=cel$$DzM@{YIZa!nr76nNlVaiVYQ3C=F3MiDI3dg_- zmV0i58}s)zxA?@`NSLp_xAt5JnZZM>ZEylw_5n`&mf!pN`FyZ66C7~S>w*V^I8{`$ zRqx&H;ncvgfo|-Qb{?F%ZG30i8_w{6V;#eM{{V5|mxcXH zU`h4d{W@U7CAUdDr{i}-=8}TcROupSwYe2zvsqf-kR3YV07)PkS5q_8uEMa79KJfZ zq7ejgQ&3UJwXL}F=eN%cds+mMPFwx_k^_qlF4h^3mrz1z}%Ox18;Iqm)8J5 z0tDB9!8wnUGp=eCCT~}fBvF}}i^@m}1;ZA<=zRRJOthL2LC0FnF~zhFSG=E(AJq{+5Z6I zj5+@Rb-1sMf0`M$vt;EfKH~hW$=h!ZLh7khT4@U3aUXSI*JZi4*Vi6V@aG83Z(ljE zkosd(POmwskF;jVW|7vON;j3HB=}KnbMN9UewQA5DWv$M)6b;xO>2O01Xo!?#(Q+) zN}6n&i1Ru)Zwn(R@Yq{OTaW1ja60Xb)?KusDYKuG8fy_A0g7x3y)`YpOCVFelTXL!yB1nrVR@MWpfjqVs zJhlV!`RTM>q01b;J1?@?GUxy+j!BkFQ80~`(#oXi0@hpaeXrN$*BZ7KF0QHbf8Vp?ZDCMH5g)+8GP$n3lN zZg<0sS~|bpql$oI#-`Ll?pjDA2=StvLb*En}Byb_8j*;TL{c`(fuQ7E*jTl>558eqbEp)_V5A$knC;supG}kIQVI= z+KFp{-|Uwfi1!A?35dILaJ=?Bg~;{V{PE7b;!AVZRrXOct?5eb1kM+A*edee?Z1&E zl6-=l@Br36XI&RWfK#LhOoLN0yo`*(xE%CJauBLGN`%8B|FI zq8sq7!2o*Oa!;lTfEJB!L@v~gYb1o$XiG#*&;$jyEyykZ0MpFaVSkld*>Q{hAefdH z24q$&0eHaXS+1mzIt%Uf!50uFz4h4;c#ul=VJw6x*;?09ZXNY+dvCUqaTlg!d8las zYXr?vlB7#3mr){=2cJF21IQ|q>P`Wp5Cr*m_(akh4c)H)00~bZ(pjMcyfG|#&n3R+ z&|P_T!9l!8KHVois0lGnDYS?hx#E5lC zf&G4G&l4wf>&ZcY5}}Mru@)MGNCv&YIvAg(q7TdGh#-T_-}8mzJm~JAQi*{W1@v!P$}uO6(y9LUwur(+W!Fk#QcYrCMFy!I?Xk{ClU$^ zRZ!Ja)M+fKy8^?WrXaB%fNVMst`h4(T<2PZ;M<@|i4jJoic#TB0niQEOWlpg>Z@;= zz?Oj0)88*Tq6TuW!fuwDPrL}#NgxF_Jcv`d_OpElo)lVL`BfW;ZE!^+Uh^wbfPnrx zwZSNQoB8WD_QS|*OGnR)Q~*5&-z+dVL}AyDPtxMc z@OSG)KJfen2Bu_Ih+K<}{(SHGUSSdiB0`mjFgM(t4EF@{J6qocQTUB(0Hv@+?P8qE{{Wjq6Gq?}HIUso z6%FnF*y_oZ&!eh0D9*|%kx0?})fPPV9$tL@SX}lR%^Xrrt=>wl0{s_KP@SR^D$iKI6q>vQZz{{Y_t;A6v6&0T0XsQFX(O=}i) zDx%|XHhT|KVh_JecZk%TYXnahg>{yyjXZV?ma$6!skmK>HNKyg2;*NhSR4+HN-aSQ z@vtLAF3aIN072W<)*JOF0$MZI^);lLZ$k{sW{5TJ(1c)iyDry0rodt^Oi?s6LFek4 zQY1|+XLPaHS#7O`!^>Cq$2RB?X{^rgG*t!xUckM~g@^wDL>S$hbG@#2>U=`}fMbM) z#7y+pCB%b@QYUvCEUF~&I`?1`sA@MO$br|_0vsIb2pvCPwKXbSQjsK0tZQ4H&er&c zwYhxo+k&79a*ptW5fQ8tk-|W5fPkv5eF6MF2 zHU#3;T<>*J{j&q=wBLZfKJoSZTRyGz@(h1ld z$o0LfHsyaagK={V!HU<*`kizcZfG5BhBb{;5K5I61b+7Sx4tV#Y?pJYYe97aha;^} zL<$jBFt-HibE&!C)AF_!SWHecss+M?kbg;HHkEZXt*2Qw_<`JeUe~?)50?hT8;U6c zgrXEMkV{Oy8xg4QxwtAhZ(x3dt_%P`Ey+Qq2!%5{OCO5BX*z|ry}{+NxGcvFy3;^4 z&n^j2B6*^8Xd!|)lodA63BQPKWAnBdBm=H`s#~gMF;zJc!z!+wOaLRuf&n7mr=AYz zB#luVV$z4zR4S}wY7vVU0CSG^wY^E&{&)+;rN)5jc`1pRK&xhCIvc`@`w(q#JiP2b zwiH8e7R^r$evp?%VL^BvRwcErn=?2!HnyfV>u>HbulfQp*0Ei98sxkYscBbmf*|a^ zZOo5t)L+vKW3PbW?XP%IS%HSPq7xx_8ZmC{iv`?T;GKUmaOM*e9P|mp1tS?k>)XCB zsE3PKAy5rPH@B|#Cj77tbDUwh=Y@Y?#Ix?8*J%PW=&7dK*zy1$5j}a5eLxt87r-tj z-`xp;f~rq;T|OAYNvEOfxxf9}^5`*2(dD*;4Dpa^cyG&*NvRT0Jnb&cH;Glnv|oFR zZNIhtn56c#t-dWz_+K6y}r0+#^y2bF+8y5tKTd& zHP%a^60N03+ykhMR|3QjKVRQGdiF)6G#X*7J~=A^)*LD0W&@GBY1qJ0PY~1rPw79f zaDdj&htPW^yjDUTT+H3uH;K0gt@g3?_5RpsY!cb?^xlQA)CRx8#aL)Yv#}?Bq70*Y0y#~Na(E8l_4GogIob-+TlI+*#7{V;G7yAhCZEg(1e48squu8$`Zx{ z-wTV2u^@k&`r=#zy*SYXoE3jL;mt}Jf9OXdus5+jclvYk7y=sd1BG?Krr*z9)n+Po zqs$G3^*AS_C{PsC8l$>y`=9QMTc#ovV}Plo?H}zq#Cep3O&&`arjAAABz3z1&{=l&_c-!) zwqne|?|MS6;Sx+s?HZmQ3z{{SVw&)*6bcbZM! zc#ltCWXmf?wgZh8McT$png0N18TAzqwM6uC1!W#4EVmZ(2IlyvY+lkFay2#nb1~$- z6WSeR0;gS9Id&t#8HGIz6IBvQ$*oY4bUeu(yAOTwv1MfE(bez#UrPS~8Twh-?8UXF zC3H^;aMYDj#4JXe4K^E{H{Y%LepuYHvxucI={-Hy(pbO-D@n^ZWoXLG0Z9TKZbzU# z+gtSOi(!KST}PT>v;@&ggDqMLLkNVV$i+fl=KF3>ozLZo4Vb3BIU>I%L82!vTMoS% zEsQA1gRDDN>{l^(^)IE%!~+Mp?{e^m=G@$Jr{k#WM}Q5yq1U%v5RQd zrO7t&18_Zn>FRMJrt#Gm2N{&xrRFDeRRO~`&ArPXQg^WE2d*SeB+g$Ql!HhZ>KD@@ zTE578$k4}T7a-e^^!P{Dd<_5>t13f}hB>6gCV??fbgY^?%kvs_GY>9G2cg7W7jf4u z>y1cAcmj8l$NZ}!EPE0~$llxTbzkX#jI-BnD8sM`pvoYqk|nT+v@xjM+%D&CrsI}6 z0q~QLNbic1B!F|pN3Em~=#5)Xa={q3_cpl~^u4zJpImV_T^VaHK5AO>>YURvMc-DU zDDVwYjmPrH3crwEp12AYlb$-~#WHTPQeccpIA?F>R7(B?<^WK4`3s+>BzOeGe4(47 zG74oJ24qO=6+5?3Z*8=VJNhUm+>?S50j+s!*$a$TREk2i2_AwDuLvX5^S4XyZ$pR! z%g?gs3#O_{AeuK*rouJ8k+!BcCf-{Qpv0M!x`GOMWY*l z;N_`-Am7hzy{(A4*B%@9>!RXLMSAkY^gZKv8pTv!eSxv}w!_N=*l4^BHQI}yhr$h= z14UR`OO};{z7e_Axxe`T0Bl!tp~fpYYOU3qTT)o=&>qTfE4 zb6Ok>Yl4S>B$Ra}XYRYe2AIm|V|yJpJNvgUEI^kwn&y!JNE)h%QcYBFEz6T4_=)C& zaeH&UuWwO^Ee@x)utp#fcp~+Xy3@xR0i>zhn6UV{d6GVuU~ptp*&(h3opM5G8z1R=f$y>W&J0lDkG{PX zF(vxUDwcgAda_vAJH`YkWM7}`b~GrBO|*Hv5WPf`nX^Tb?vFe|SwWMW8OqL`|?lW`)I777i^ z0Bk+C8~KksK_%WIa@L@!nGzGst2H!k4(>bqk3BMdY+C+XdSFbs(mLz-piuIncB+@V zkUg~>(1qlx!9x#nFvfy#A1i?dn#Dy?-AV$5)gvmGBg4pB@>cfu#1ct^QaOC1CW+{) z1Z8`%aj5vY5^PyX_aCUiKolDDK?I7aRN#1RW*0G#ITBAVZdia_FnOVJm_c}&?cQoS zkwM%8xg+Jb&jx9NST)x`yq&=Ax#IlWs~5 z);_yi&|u5pz!fo$iepA-EmIak#E_wM?0H$dBo3DZ50(Z00F?U9j(-WDfNF%)>yk+b zVCoK{MeM9(+%*i9P-Anw)+jtM{X;0%De1E5$F;v3uPYz@o#dwL=S19vn>?!DTN z8I!v}nu}Xfui^JQ50)Ed!uXcPu|i0}5RFVy$0<`FH*2ovShtIQdovH6@gR^cy8*6U zR1tbc1xQFr&d`EnVi|!4V{>i&Ks>##gNj}sv@;FdoHOffc5N?UO^G1gZEta7hKC3v zcDbmELWd<_PrK?OOWcwe0HVvi{-Wao>2pYf%QKHY-il%-s4TDELp*AtIV_OAr6X|H z*mB>dImYOMPnNr`lI-ZA)@eyukz#fNkNMX;<1R#lu*QUCu6-q;4 zdyPZH6frvz4gO%;^us`D6@oa9-#MZ26U7X0o!np|*lAQHt^npQ>!pv&6MGtCtk6Nj z*$=OXOAE1JT25{^ARCfE_S@5ZE#`kJAasH6lC5S?n8}ToK)u)tTgacteGVvE09pje z11TLvN2y8%xWcT|&Y|683|&sl4UO%~uTE#5EKxRv-~Ln5o#){Th!hID6pcro!DHeK z2#?GQUc%i!TVX74Yk>j=u*#~l-47Fv?QUH$!__}|rKOclkWdi9-@jj%TzfXU^8k;1 z9*aeoS6`)LppYfe+*me~Z!_h8EAzt~T}oG2u6U&ai&_*bNp%5tu(9y%wY_@zVDC5z z>(|)>Kr{#)S_G(&cZ#4ld3E+T1FgCKSW}uF&`9rE@2n{W7MYqjRlw5mvN5*6wfS=8 z^~0dJ)W}r~Hw?;^MOs-P0hlb2>0$=v<8!yAt?EuD4M{Z^e|PUj05nDFLRQnF9a@31 zBJ6EzX&>$8aDeCpx8+6HC~j|)EmTk8SCPi6gU^45&=YT$wj_#DhghfwdZ|{)oMllJ z%c~4B$xnINZ(sq_%jaR|^uXFQ-H?0LdGD+JHNQ}?HZBz2v>w3tJob6Rl=ZVKNiJnP zwKKCZXLn<J&s{2RRfSJy0T8(`QP)(cU}cw!n@S<=Xc%edxAMxNB;nk7bD1ENNYf*6RujKhQJbX zUP%7{czdqWgQO6*-@fX7{! z16@57%wm*BaL>&<$H0ws`Ou{ka z(1Af~0diFBCB-udq#JIY> z6b}@1*SSb$l1EK)X?YjA?|-3~t;qGT+uso}H%A?66hH$E5XOlbDPH$k2HK7E$M`_M zJ+6M32yv)2^-l()RbH$_64G6~QGvg}N(*1w=K>;dT_EAbe5lR@vZ}0(%E5rz#lQ#X zFMmu+XzU}O@l21z6wL6AY$YJZizbnBbSSppKt87c*c|B@c1#8bhM0M$DipLO9I$eO z!+u^8FY0gouud0zLldkJgIZvq$oidFfUw6ck$32v{rUb_h;hRm=!9XKiBO+-rUvA> zja-q>NagK&{&)*eOMxTasKiMb6g!9NmX*~UcWq}kCi-t}hsX?bW#XnsKUL2Yg0s}f z@w@D)L-_ zoeJ&&{qz`XoIs$a{yft0#S4;CSv9Y1ZGRQOSk$eE9X2E8P6k6A8OEpdnFbTgt2A;( zsv=hmy6ti-zAJO}ALkI*ZE^IkJYy9YRHe?zPcyf`7etzEayGTkw!mKyO#zO-1I~d+ z1=LEVA|p7p)zMXvM<7TbdHx_VAUVdlC?f-!D#{(DQW@k`CvC39MS%JKN^vxbpM7>o z6ao;s$X+Sb3&|MOcTu*08_UtQ19O0LuH&3*SY)2x5Rr{Lq3uy3CZ)Qw3mbA!5P(OQ zA@9GD#DWDt_9@T?I;ta0Duy9bP#4gnr~r}r7WN|q2yHiOhbp9*IjM;>Vw{jmM!qAb zo{?)O{#*RL@WCPvWCRj;rO6`2CCC88P1^ea7_E=e{{ZoVbBL>J>Vp(6NggzDq+TYE zy98drO}P$xlk&h5Qchpg`Vcad9;Hk=fdodT$HQ{N!~s1ALw=mFfMv5&hB!|TI%0?! ziBatlgG0KA)zynB+V<(}EO8__IJk)?=TN3|Nu)9~+E{6qTAd7R6^@g8?a_hd>(d1l zAYtw7ghknvK9vE1SbTlhR4vpC0NnN)Zhde<>8`yX^P-t2Bv@JA6Llfkmrd*i#n*0q z8u;V**M(B>;p&_3msAAUkT;Xat%USIZAcdtCY2 z{{UZ2+a7^1T;(*;wc!&FSfzC^Vk8u%wSA|BPwXqiW35d zKB!J%3QHm@*<)rZb{m3(*bT02Z_5gFMR-joL&+@HHAmt)Ss_JaB*qf@RNr82eYy1? z@r=7$Hv&vSH5htV;3Yg#@bgrPy7TwA^$@_d!L^S0n`AxgSjWn^S1b~ zNobGP>05LRSChZ;LKCvs5N&oRkp1$+nf$Y^Td_zniUC(4Bp~qvu-ju|NjLeAOeyXx zlm7rmcDo=Y!Xw>S^DwT?E@O59+WS~sfPDS1V*TF?M*Mx_wrM7`DlIFll1Ch1Xo}#F zJ{429%qhJTl`Fh7R(+P7+T57n12xOG8$t|{IG3iT>2?4w}_avKnSZ#wK(A9AiE9vu$ z(u#tfjv0?|C6Y!mD8F_#+kLP3T;c$eE}_FzE6;5|MAO3$k}VjBG6GYW_d zvKMIL?-uqdK_7dSYQaaL8D~vTG*6i+IJXqu=+pTm_?B9977`E1q9b49bjt z6kL>vn-xn7v1T1fK40&Iks`YIRY1){Wh#&1xkfey-0gjb z?{kPEYE#8dIHu4i+}Lwn&Zg;o&*#s~;%J*tSP-@^<>FQ%?2n9nsDZ3WA*m{xr z`eUGy3{-1e6WU22q}NEsrpHLq*9fA(w}nwppwr99dYlVs;rHj?_=Svy(^!+Qg%O=b zgCPucu7$T%)!nY%R=y^nUSms@KZe){i z0QLj&!8x-v^3{5AL_|?40pI@sCSG!*sV2mwpL6ba7wf2bV~s(0KC_^s@u*9D-`tEq7?5+;=~Hy! z#WgKIcCP}rbf}^`jf%3XHN7l!pOMEA;U=@?t_a0U@ASbtEK4g>#~PT_t9VC}#uE4F zO~T)xy}6T!J`>@C`%u#WmugJ@)R#toye~4!6kL2oxt~j$4?qq%r#A1_vrB*?SCgrZ zbd{{mCe+He_yO2?el@>dLmW===%uv~HKPhv$-2~T1 z_?R7;AK&6!z^w6rgc9kdz;CB^JuEG4{drGe2Yp9Qqw}y) z^Te3-OyCZ%`AvmmLjB+pNa+`*lc#@|G45~#0A!DKKlCFCrsk?xT*%}wS)|gugOh7q zbLGFw1WS$s&2SW_@eeYja>5BOq@%F|eIX6cE?558Nps031BSmz(nz8i6pd8rG@C|c zlTwk&><2T*Tc7)Zj(n4MmrTlRo@0!C3}+A{Eo?6&G(7jY?GRLEPKi0sA;` zEu?kb%q4*tB3V6>nm|-(Do~Xmf=Ct~qmb##0K zf0DKYKtw2NWRtv-Et#4_8gnA*LWA+pFB8FO7ZK~n!Pb-gvk>z_Io)=dN;k(v8B@w`Y z6v{OWtPjJi5=pM!TrWB#EKqP_ZDB%xNj8`d|C`Vj}1*2X_AeDtsnDGp;I4 zCShpxDAHBjuE3HsFjH@9kUCso!K{J`Q`io;q%^=mBynu93#yJ;ZL8Pb^k_3`qLpn#{W&{G(0ONO-}*b<{!3yZM>WAkfU4rnJ6pFMO5S9mE@ z(=3e%1V}=u0DMP#5J2l~hs)aodFKM8w2W!5l*fFAnF{LeoplZDNi5rSu+%``%J?!2 z&z?R?a3rXSE~x}|4eyw0NlCYV)-Y}A0@=VlSTD4St2GNERsT@o1UE@c)f3|dTr@^G#CI(gf~p!zEZv8 zL{8>l89?7yG5`g<+es(=H|cM^(MZ$NhGezKQ(#Y? z*7D_yJ4Qj4h}Ig#XYE!_AeOC@vJN1D_$HTIqBLQF4_#+2t&k$~gzlYlHC7$BSqB!q!8w_B zi;+^stl5PifkUU|Jhp;gV+E7 literal 0 HcmV?d00001 diff --git a/tests/ops/filter/test_clip_similarity_filter.py b/tests/ops/filter/test_clip_similarity_filter.py new file mode 100644 index 000000000..b17c3d613 --- /dev/null +++ b/tests/ops/filter/test_clip_similarity_filter.py @@ -0,0 +1,187 @@ +import os +import unittest + +from datasets import Dataset + +from data_juicer.ops.filter.clip_similarity_filter import ( + ClipSimilarityFilter, SpecialTokens) +from data_juicer.utils.constant import Fields + + +class ClipSimilarityFilterTest(unittest.TestCase): + + data_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', + 'data') + + cat_path = os.path.join(data_path, 'cat.jpg') + img3_path = os.path.join(data_path, 'img3.jpg') + hf_clip = '/Users/mazhijian/Documents/Project_2023/P01_LLM/C04_Data/clip-vit-base-patch32/' + + def _run_filter(self, dataset: Dataset, target_list, op): + + if Fields.stats not in dataset.features: + # TODO: + # this is a temp solution, + # only add stats when calling filter op + dataset = dataset.add_column(name=Fields.stats, + column=[{}] * dataset.num_rows) + + dataset = dataset.map(op.compute_stats) + dataset = dataset.filter(op.process) + dataset = dataset.select_columns(column_names=['text', 'images']) + res_list = dataset.to_list() + self.assertEqual(res_list, target_list) + + def test_no_eoc_special_token(self): + + ds_list = [{ + 'text': f'{SpecialTokens.image}a photo of a cat', + 'images': [self.cat_path] + }, { + 'text': f'{SpecialTokens.image}a photo of a dog', + 'images': [self.cat_path] + }] + tgt_list = [{ + 'text': f'{SpecialTokens.image}a photo of a cat', + 'images': [self.cat_path] + }] + + dataset = Dataset.from_list(ds_list) + op = ClipSimilarityFilter(hf_clip=self.hf_clip, + reduce_mode='avg', + any_or_all='any', + min_ratio=0.2, + max_ratio=0.9) + self._run_filter(dataset, tgt_list, op) + + def test_eoc_special_token(self): + + ds_list = [{ + 'text': + f'{SpecialTokens.image}a photo of a cat{SpecialTokens.eoc}', + 'images': [self.cat_path] + }, { + 'text': f'{SpecialTokens.image}a photo of a dog', + 'images': [self.cat_path] + }] + tgt_list = [{ + 'text': + f'{SpecialTokens.image}a photo of a cat{SpecialTokens.eoc}', + 'images': [self.cat_path] + }] + + dataset = Dataset.from_list(ds_list) + op = ClipSimilarityFilter(hf_clip=self.hf_clip, + reduce_mode='avg', + any_or_all='any', + min_ratio=0.2, + max_ratio=0.9) + self._run_filter(dataset, tgt_list, op) + + def test_keep_any(self): + + ds_list = [{ + 'text': + f'{SpecialTokens.image}a photo of a cat {SpecialTokens.eoc} ' + f'{SpecialTokens.image}a photo of a dog {SpecialTokens.eoc}', + 'images': [self.cat_path, self.cat_path] + }] + tgt_list = [{ + 'text': + f'{SpecialTokens.image}a photo of a cat {SpecialTokens.eoc} ' + f'{SpecialTokens.image}a photo of a dog {SpecialTokens.eoc}', + 'images': [self.cat_path, self.cat_path] + }] + dataset = Dataset.from_list(ds_list) + op = ClipSimilarityFilter(hf_clip=self.hf_clip, + reduce_mode='avg', + any_or_all='any', + min_ratio=0.2, + max_ratio=0.9) + self._run_filter(dataset, tgt_list, op) + + def test_keep_all(self): + + ds_list = [{ + 'text': + f'{SpecialTokens.image}a photo of a cat {SpecialTokens.eoc} ' + f'{SpecialTokens.image}a photo of a dog {SpecialTokens.eoc}', + 'images': [self.cat_path, self.cat_path] + }] + tgt_list = [] + dataset = Dataset.from_list(ds_list) + op = ClipSimilarityFilter(hf_clip=self.hf_clip, + reduce_mode='avg', + any_or_all='all', + min_ratio=0.2, + max_ratio=0.9) + self._run_filter(dataset, tgt_list, op) + + def test_reduce_avg(self): + + ds_list = [{ + 'text': f'{SpecialTokens.image}a photo of a cat ' + f'{SpecialTokens.image} {SpecialTokens.eoc}', + 'images': [self.cat_path, self.img3_path] + }] + tgt_list = [{ + 'text': f'{SpecialTokens.image}a photo of a cat ' + f'{SpecialTokens.image} {SpecialTokens.eoc}', + 'images': [self.cat_path, self.img3_path] + }] + dataset = Dataset.from_list(ds_list) + op = ClipSimilarityFilter(hf_clip=self.hf_clip, + reduce_mode='avg', + any_or_all='any', + min_ratio=0.2, + max_ratio=0.9) + self._run_filter(dataset, tgt_list, op) + + def xxtest_reduce_max(self): + + ds_list = [{ + 'text': f'{SpecialTokens.image}a photo of a cat ' + f'{SpecialTokens.image} {SpecialTokens.eoc}', + 'images': [self.cat_path, self.img3_path] + }] + tgt_list = [{ + 'text': f'{SpecialTokens.image}a photo of a cat ' + f'{SpecialTokens.image} {SpecialTokens.eoc}', + 'images': [self.cat_path, self.img3_path] + }] + dataset = Dataset.from_list(ds_list) + op = ClipSimilarityFilter(hf_clip=self.hf_clip, + reduce_mode='max', + any_or_all='any', + min_ratio=0.2, + max_ratio=0.9) + self._run_filter(dataset, tgt_list, op) + + def test_reduce_min(self): + + ds_list = [{ + 'text': f'{SpecialTokens.image}a photo of a cat ' + f'{SpecialTokens.image} {SpecialTokens.eoc}', + 'images': [self.cat_path, self.img3_path] + }] + tgt_list = [{ + 'text': f'{SpecialTokens.image}a photo of a cat ' + f'{SpecialTokens.image} {SpecialTokens.eoc}', + 'images': [self.cat_path, self.img3_path] + }] + + dataset = Dataset.from_list(ds_list) + op = ClipSimilarityFilter(hf_clip=self.hf_clip, + reduce_mode='min', + any_or_all='any', + min_ratio=0.1, + max_ratio=0.9) + + self._run_filter(dataset, tgt_list, op) + + op.min_ratio = 0.2 + self._run_filter(dataset, [], op) + + +if __name__ == '__main__': + unittest.main() From a293e710290f91813cbbfa6144b2a2b1a3a59318 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Mon, 13 Nov 2023 22:54:35 +0800 Subject: [PATCH 02/15] docs: pre-commit style --- data_juicer/utils/constant.py | 1 + data_juicer/utils/mm_utils.py | 4 +++- data_juicer/utils/model_utils.py | 5 +++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/data_juicer/utils/constant.py b/data_juicer/utils/constant.py index 401d408de..c3a68c32d 100644 --- a/data_juicer/utils/constant.py +++ b/data_juicer/utils/constant.py @@ -1,5 +1,6 @@ DEFAULT_PREFIX = '__dj__' + class Fields(object): stats = DEFAULT_PREFIX + 'stats__' meta = DEFAULT_PREFIX + 'meta__' diff --git a/data_juicer/utils/mm_utils.py b/data_juicer/utils/mm_utils.py index b67484062..6ed0931e0 100644 --- a/data_juicer/utils/mm_utils.py +++ b/data_juicer/utils/mm_utils.py @@ -1,8 +1,8 @@ - from datasets import Image from data_juicer.utils.constant import DEFAULT_PREFIX + # A class to keep special tokens for multimodal information in the texts # The tokens in this class can be updated by corresponding arguments in config class SpecialTokens(object): @@ -12,9 +12,11 @@ class SpecialTokens(object): # others eoc = f'<|{DEFAULT_PREFIX}eoc|>' + def load_images(paths): return [load_image(path) for path in paths] + def load_image(path): img_feature = Image() img = img_feature.decode_example(img_feature.encode_example(path)) diff --git a/data_juicer/utils/model_utils.py b/data_juicer/utils/model_utils.py index e67b416f6..516dc7fe1 100644 --- a/data_juicer/utils/model_utils.py +++ b/data_juicer/utils/model_utils.py @@ -169,12 +169,13 @@ def prepare_huggingface_tokenizer(tokenizer_name): trust_remote_code=True) return tokenizer + def prepare_huggingface_clip(clip_name): """ Prepare and load a clip and processor from HuggingFace. - :param tokenizer_name: input tokenizer name - :return: a tokenizer instance. + :param clip_name: input clip name + :return: a pair of clip instance and processor instance. """ from transformers import CLIPProcessor, CLIPModel From 80381f429adc93de6f619284c398cbd6cb4a27e6 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Mon, 13 Nov 2023 22:56:35 +0800 Subject: [PATCH 03/15] fix: update clip model for test --- tests/ops/filter/test_clip_similarity_filter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ops/filter/test_clip_similarity_filter.py b/tests/ops/filter/test_clip_similarity_filter.py index b17c3d613..68c53f25b 100644 --- a/tests/ops/filter/test_clip_similarity_filter.py +++ b/tests/ops/filter/test_clip_similarity_filter.py @@ -15,7 +15,7 @@ class ClipSimilarityFilterTest(unittest.TestCase): cat_path = os.path.join(data_path, 'cat.jpg') img3_path = os.path.join(data_path, 'img3.jpg') - hf_clip = '/Users/mazhijian/Documents/Project_2023/P01_LLM/C04_Data/clip-vit-base-patch32/' + hf_clip = 'openai/clip-vit-base-patch32' def _run_filter(self, dataset: Dataset, target_list, op): From d986ffa56f50f3f9095696fbafbebcadadfbf571 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Mon, 13 Nov 2023 23:04:17 +0800 Subject: [PATCH 04/15] chore: add torch --- environments/science_requires.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/environments/science_requires.txt b/environments/science_requires.txt index d17fe559b..d557ee9a6 100644 --- a/environments/science_requires.txt +++ b/environments/science_requires.txt @@ -14,3 +14,4 @@ nlpcda nltk transformers opencc==1.1.6 +torch From af7101d8a6b0e74fe12177affb1231e1599b9a90 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Tue, 14 Nov 2023 09:02:43 +0800 Subject: [PATCH 05/15] docs: add default clip model --- configs/config_all.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/config_all.yaml b/configs/config_all.yaml index 0ed0b134f..c85e7ec22 100644 --- a/configs/config_all.yaml +++ b/configs/config_all.yaml @@ -109,7 +109,7 @@ process: min_ratio: 0.0 # the min ratio of filter range max_ratio: 0.5 # the max ratio of filter range - clip_similarity_filter: # filter samples according to the similarity between text and images. - hf_clip: # name of used Hugging Face clip + hf_clip: openai/clip-vit-base-patch32 # name of used Hugging Face clip min_ratio: 0.24 # the min similarity of filter range max_ratio: 1.0 # the max similarity of filter range reduce_mode: avg # reduce mode when one text corresponds to multiple images in a chunk, must be one of ['avg','max', 'min']. From a7e2b2eb92316fcf28d5a146e44fff58e2c0b0e2 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Tue, 14 Nov 2023 11:51:33 +0800 Subject: [PATCH 06/15] 1. truncation text inputs. 2. fix hanging when multi-process. --- .../ops/filter/clip_similarity_filter.py | 14 +++++--- .../ops/filter/test_clip_similarity_filter.py | 34 +++++++++++++++---- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/data_juicer/ops/filter/clip_similarity_filter.py b/data_juicer/ops/filter/clip_similarity_filter.py index a62d3b320..8b7d90ee5 100644 --- a/data_juicer/ops/filter/clip_similarity_filter.py +++ b/data_juicer/ops/filter/clip_similarity_filter.py @@ -1,4 +1,5 @@ import numpy as np +import torch from jsonargparse.typing import PositiveFloat from data_juicer.utils.constant import Fields, StatsKeys @@ -8,6 +9,9 @@ from ..base_op import OPERATORS, Filter from ..op_fusion import LOADED_IMAGES +# avoid hanging when calling clip in multiprocessing +torch.get_num_threads() + @OPERATORS.register_module('clip_similarity_filter') @LOADED_IMAGES.register_module('clip_similarity_filter') @@ -43,7 +47,6 @@ def __init__(self, :param kwargs: extra args """ super().__init__(*args, **kwargs) - self.image_key = 'images' self.min_ratio = min_ratio self.max_ratio = max_ratio if reduce_mode not in ['avg', 'max', 'min']: @@ -117,20 +120,23 @@ def remove_special_token(text): inputs = processor(text=text_chunk, images=image_chunk, return_tensors='pt', + truncation=True, + max_length=model.config.text_config. + max_position_embeddings, padding=True) outputs = model(**inputs) chunk_logits = outputs.logits_per_text.detach().cpu() / 100.0 + if self.reduce_mode == 'avg': chunk_similarity = chunk_logits.mean() elif self.reduce_mode == 'max': chunk_similarity = chunk_logits.max() else: chunk_similarity = chunk_logits.min() - - similarity.append(float(chunk_similarity)) - offset += count + similarity.append(float(chunk_similarity)) + offset += count sample[Fields.stats][StatsKeys.clip_image_text_similarity] = similarity return sample diff --git a/tests/ops/filter/test_clip_similarity_filter.py b/tests/ops/filter/test_clip_similarity_filter.py index 68c53f25b..270cb6a4c 100644 --- a/tests/ops/filter/test_clip_similarity_filter.py +++ b/tests/ops/filter/test_clip_similarity_filter.py @@ -17,17 +17,17 @@ class ClipSimilarityFilterTest(unittest.TestCase): img3_path = os.path.join(data_path, 'img3.jpg') hf_clip = 'openai/clip-vit-base-patch32' - def _run_filter(self, dataset: Dataset, target_list, op): - + def _run_filter(self, dataset: Dataset, target_list, op, num_proc=1): + if Fields.stats not in dataset.features: # TODO: # this is a temp solution, # only add stats when calling filter op dataset = dataset.add_column(name=Fields.stats, column=[{}] * dataset.num_rows) - - dataset = dataset.map(op.compute_stats) - dataset = dataset.filter(op.process) + + dataset = dataset.map(op.compute_stats, num_proc=num_proc) + dataset = dataset.filter(op.process, num_proc=num_proc) dataset = dataset.select_columns(column_names=['text', 'images']) res_list = dataset.to_list() self.assertEqual(res_list, target_list) @@ -137,7 +137,7 @@ def test_reduce_avg(self): max_ratio=0.9) self._run_filter(dataset, tgt_list, op) - def xxtest_reduce_max(self): + def test_reduce_max(self): ds_list = [{ 'text': f'{SpecialTokens.image}a photo of a cat ' @@ -182,6 +182,28 @@ def test_reduce_min(self): op.min_ratio = 0.2 self._run_filter(dataset, [], op) + def test_multi_process(self): + + ds_list = [{ + 'text': + f'{SpecialTokens.image}a photo of a cat {SpecialTokens.eoc} ' + f'{SpecialTokens.image}a photo of a dog {SpecialTokens.eoc}', + 'images': [self.cat_path, self.cat_path] + }] * 10 + tgt_list = [{ + 'text': + f'{SpecialTokens.image}a photo of a cat {SpecialTokens.eoc} ' + f'{SpecialTokens.image}a photo of a dog {SpecialTokens.eoc}', + 'images': [self.cat_path, self.cat_path] + }] * 10 + dataset = Dataset.from_list(ds_list) + op = ClipSimilarityFilter(hf_clip=self.hf_clip, + reduce_mode='avg', + any_or_all='any', + min_ratio=0.2, + max_ratio=0.9) + self._run_filter(dataset, tgt_list, op, num_proc=4) + if __name__ == '__main__': unittest.main() From 74155022c1590c5d859ba90b7cfa2f8976daf597 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Tue, 14 Nov 2023 13:27:32 +0800 Subject: [PATCH 07/15] change num_proc to 1 in test --- tests/ops/filter/test_clip_similarity_filter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/ops/filter/test_clip_similarity_filter.py b/tests/ops/filter/test_clip_similarity_filter.py index 270cb6a4c..0e33bb6ba 100644 --- a/tests/ops/filter/test_clip_similarity_filter.py +++ b/tests/ops/filter/test_clip_similarity_filter.py @@ -15,8 +15,8 @@ class ClipSimilarityFilterTest(unittest.TestCase): cat_path = os.path.join(data_path, 'cat.jpg') img3_path = os.path.join(data_path, 'img3.jpg') - hf_clip = 'openai/clip-vit-base-patch32' - + #hf_clip = 'openai/clip-vit-base-patch32' + hf_clip = '/Users/mazhijian/Documents/Project_2023/P01_LLM/C04_Data/clip-vit-base-patch32/' def _run_filter(self, dataset: Dataset, target_list, op, num_proc=1): if Fields.stats not in dataset.features: @@ -202,7 +202,7 @@ def test_multi_process(self): any_or_all='any', min_ratio=0.2, max_ratio=0.9) - self._run_filter(dataset, tgt_list, op, num_proc=4) + self._run_filter(dataset, tgt_list, op, num_proc=1) if __name__ == '__main__': From 6c48771d3adce91b3cb33ba5120a84ed542166f0 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Tue, 14 Nov 2023 13:41:00 +0800 Subject: [PATCH 08/15] change num_proc to 1 in test --- tests/ops/filter/test_clip_similarity_filter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ops/filter/test_clip_similarity_filter.py b/tests/ops/filter/test_clip_similarity_filter.py index 0e33bb6ba..12fe318e1 100644 --- a/tests/ops/filter/test_clip_similarity_filter.py +++ b/tests/ops/filter/test_clip_similarity_filter.py @@ -15,8 +15,8 @@ class ClipSimilarityFilterTest(unittest.TestCase): cat_path = os.path.join(data_path, 'cat.jpg') img3_path = os.path.join(data_path, 'img3.jpg') - #hf_clip = 'openai/clip-vit-base-patch32' - hf_clip = '/Users/mazhijian/Documents/Project_2023/P01_LLM/C04_Data/clip-vit-base-patch32/' + hf_clip = 'openai/clip-vit-base-patch32' + def _run_filter(self, dataset: Dataset, target_list, op, num_proc=1): if Fields.stats not in dataset.features: From 000ed354af1c49fb6217461f3f56b066860e8fe4 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Tue, 14 Nov 2023 13:51:28 +0800 Subject: [PATCH 09/15] typo: merge pre-commit --- data_juicer/utils/model_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_juicer/utils/model_utils.py b/data_juicer/utils/model_utils.py index 516dc7fe1..5b242232a 100644 --- a/data_juicer/utils/model_utils.py +++ b/data_juicer/utils/model_utils.py @@ -177,7 +177,7 @@ def prepare_huggingface_clip(clip_name): :param clip_name: input clip name :return: a pair of clip instance and processor instance. """ - from transformers import CLIPProcessor, CLIPModel + from transformers import CLIPModel, CLIPProcessor model = CLIPModel.from_pretrained(clip_name) processor = CLIPProcessor.from_pretrained(clip_name) From 8288a4a96d2e49e6c56a5f8d8866c8a0f0bc2470 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Tue, 14 Nov 2023 17:30:59 +0800 Subject: [PATCH 10/15] docs: update filter number in Operators_ZH.md --- docs/Operators_ZH.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Operators_ZH.md b/docs/Operators_ZH.md index e59040fd2..4af9a6601 100644 --- a/docs/Operators_ZH.md +++ b/docs/Operators_ZH.md @@ -10,7 +10,7 @@ Data-Juicer 中的算子分为以下 5 种类型。 |------------------------------------|:--:|---------------| | [ Formatter ]( #formatter ) | 7 | 发现、加载、规范化原始数据 | | [ Mapper ]( #mapper ) | 21 | 对数据样本进行编辑和转换 | -| [ Filter ]( #filter ) | 17 | 过滤低质量样本 | +| [ Filter ]( #filter ) | 18 | 过滤低质量样本 | | [ Deduplicator ]( #deduplicator ) | 3 | 识别、删除重复样本 | | [ Selector ]( #selector ) | 2 | 基于排序选取高质量样本 | From 74a094ef8a8c0d350cffac90fcbdbfb6c235efcf Mon Sep 17 00:00:00 2001 From: zhijianma Date: Tue, 14 Nov 2023 20:16:45 +0800 Subject: [PATCH 11/15] fixz: set torch num threads to 1 --- data_juicer/ops/filter/clip_similarity_filter.py | 2 +- tests/ops/filter/test_clip_similarity_filter.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data_juicer/ops/filter/clip_similarity_filter.py b/data_juicer/ops/filter/clip_similarity_filter.py index 8b7d90ee5..81356386e 100644 --- a/data_juicer/ops/filter/clip_similarity_filter.py +++ b/data_juicer/ops/filter/clip_similarity_filter.py @@ -10,7 +10,7 @@ from ..op_fusion import LOADED_IMAGES # avoid hanging when calling clip in multiprocessing -torch.get_num_threads() +torch.set_num_threads(1) @OPERATORS.register_module('clip_similarity_filter') diff --git a/tests/ops/filter/test_clip_similarity_filter.py b/tests/ops/filter/test_clip_similarity_filter.py index 12fe318e1..270cb6a4c 100644 --- a/tests/ops/filter/test_clip_similarity_filter.py +++ b/tests/ops/filter/test_clip_similarity_filter.py @@ -202,7 +202,7 @@ def test_multi_process(self): any_or_all='any', min_ratio=0.2, max_ratio=0.9) - self._run_filter(dataset, tgt_list, op, num_proc=1) + self._run_filter(dataset, tgt_list, op, num_proc=4) if __name__ == '__main__': From c84d1fa9571de78d1bd5cce00a4f99437f1901a5 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Wed, 15 Nov 2023 08:53:24 +0800 Subject: [PATCH 12/15] style: change param names --- configs/config_all.yaml | 4 +- .../ops/filter/clip_similarity_filter.py | 18 ++++----- .../ops/filter/test_clip_similarity_filter.py | 38 +++++++++---------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/configs/config_all.yaml b/configs/config_all.yaml index c85e7ec22..f8fe3c5a5 100644 --- a/configs/config_all.yaml +++ b/configs/config_all.yaml @@ -110,8 +110,8 @@ process: max_ratio: 0.5 # the max ratio of filter range - clip_similarity_filter: # filter samples according to the similarity between text and images. hf_clip: openai/clip-vit-base-patch32 # name of used Hugging Face clip - min_ratio: 0.24 # the min similarity of filter range - max_ratio: 1.0 # the max similarity of filter range + min_score: 0.1 # the min similarity of filter range + max_socre: 1.0 # the max similarity of filter range reduce_mode: avg # reduce mode when one text corresponds to multiple images in a chunk, must be one of ['avg','max', 'min']. any_or_all: any # keep this sample when any/all images meet the filter condition - flagged_words_filter: # filter text with the flagged-word ratio larger than a specific max value diff --git a/data_juicer/ops/filter/clip_similarity_filter.py b/data_juicer/ops/filter/clip_similarity_filter.py index 81356386e..8724beec1 100644 --- a/data_juicer/ops/filter/clip_similarity_filter.py +++ b/data_juicer/ops/filter/clip_similarity_filter.py @@ -1,6 +1,6 @@ import numpy as np import torch -from jsonargparse.typing import PositiveFloat +from jsonargparse.typing import ClosedUnitInterval from data_juicer.utils.constant import Fields, StatsKeys from data_juicer.utils.mm_utils import SpecialTokens, load_image @@ -21,8 +21,8 @@ class ClipSimilarityFilter(Filter): def __init__(self, hf_clip='openai/clip-vit-base-patch32', - min_ratio: PositiveFloat = 0.1, - max_ratio: PositiveFloat = 1.0, + min_score: ClosedUnitInterval = 0.1, + max_score: ClosedUnitInterval = 1.0, any_or_all: str = 'any', reduce_mode: str = 'avg', *args, @@ -32,8 +32,8 @@ def __init__(self, :param hf_clip: clip model name on huggingface to compute the similarity between image and text. - :param min_ratio: The min similarity to keep samples. - :param max_ratio: The max similarity to keep samples. + :param min_score: The min similarity to keep samples. + :param max_score: The max similarity to keep samples. :param any_or_all: keep this sample with 'any' or 'all' strategy of all images. 'any': keep this sample if any images meet the condition. 'all': keep this sample only if all images meet the @@ -47,8 +47,8 @@ def __init__(self, :param kwargs: extra args """ super().__init__(*args, **kwargs) - self.min_ratio = min_ratio - self.max_ratio = max_ratio + self.min_score = min_score + self.max_score = max_score if reduce_mode not in ['avg', 'max', 'min']: raise ValueError(f'Reduce mode [{reduce_mode}] is not supported. ' f'Can only be one of ["avg", "max", "min"].') @@ -97,7 +97,7 @@ def compute_stats(self, sample, context=False): offset = 0 def remove_special_token(text): - for key, value in special_token_dict.items(): + for value in special_token_dict.values(): text = text.replace(value, '') return text @@ -147,7 +147,7 @@ def process(self, sample): return True keep_bools = np.array([ - self.min_ratio <= sim_value <= self.max_ratio + self.min_score <= sim_value <= self.max_score for sim_value in similarity ]) diff --git a/tests/ops/filter/test_clip_similarity_filter.py b/tests/ops/filter/test_clip_similarity_filter.py index 270cb6a4c..38db18aa5 100644 --- a/tests/ops/filter/test_clip_similarity_filter.py +++ b/tests/ops/filter/test_clip_similarity_filter.py @@ -3,9 +3,9 @@ from datasets import Dataset -from data_juicer.ops.filter.clip_similarity_filter import ( - ClipSimilarityFilter, SpecialTokens) +from data_juicer.ops.filter.clip_similarity_filter import ClipSimilarityFilter from data_juicer.utils.constant import Fields +from data_juicer.utils.mm_utils import SpecialTokens class ClipSimilarityFilterTest(unittest.TestCase): @@ -50,8 +50,8 @@ def test_no_eoc_special_token(self): op = ClipSimilarityFilter(hf_clip=self.hf_clip, reduce_mode='avg', any_or_all='any', - min_ratio=0.2, - max_ratio=0.9) + min_score=0.2, + max_score=0.9) self._run_filter(dataset, tgt_list, op) def test_eoc_special_token(self): @@ -74,8 +74,8 @@ def test_eoc_special_token(self): op = ClipSimilarityFilter(hf_clip=self.hf_clip, reduce_mode='avg', any_or_all='any', - min_ratio=0.2, - max_ratio=0.9) + min_score=0.2, + max_score=0.9) self._run_filter(dataset, tgt_list, op) def test_keep_any(self): @@ -96,8 +96,8 @@ def test_keep_any(self): op = ClipSimilarityFilter(hf_clip=self.hf_clip, reduce_mode='avg', any_or_all='any', - min_ratio=0.2, - max_ratio=0.9) + min_score=0.2, + max_score=0.9) self._run_filter(dataset, tgt_list, op) def test_keep_all(self): @@ -113,8 +113,8 @@ def test_keep_all(self): op = ClipSimilarityFilter(hf_clip=self.hf_clip, reduce_mode='avg', any_or_all='all', - min_ratio=0.2, - max_ratio=0.9) + min_score=0.2, + max_score=0.9) self._run_filter(dataset, tgt_list, op) def test_reduce_avg(self): @@ -133,8 +133,8 @@ def test_reduce_avg(self): op = ClipSimilarityFilter(hf_clip=self.hf_clip, reduce_mode='avg', any_or_all='any', - min_ratio=0.2, - max_ratio=0.9) + min_score=0.2, + max_score=0.9) self._run_filter(dataset, tgt_list, op) def test_reduce_max(self): @@ -153,8 +153,8 @@ def test_reduce_max(self): op = ClipSimilarityFilter(hf_clip=self.hf_clip, reduce_mode='max', any_or_all='any', - min_ratio=0.2, - max_ratio=0.9) + min_score=0.2, + max_score=0.9) self._run_filter(dataset, tgt_list, op) def test_reduce_min(self): @@ -174,12 +174,12 @@ def test_reduce_min(self): op = ClipSimilarityFilter(hf_clip=self.hf_clip, reduce_mode='min', any_or_all='any', - min_ratio=0.1, - max_ratio=0.9) + min_score=0.1, + max_score=0.9) self._run_filter(dataset, tgt_list, op) - op.min_ratio = 0.2 + op.min_score = 0.2 self._run_filter(dataset, [], op) def test_multi_process(self): @@ -200,8 +200,8 @@ def test_multi_process(self): op = ClipSimilarityFilter(hf_clip=self.hf_clip, reduce_mode='avg', any_or_all='any', - min_ratio=0.2, - max_ratio=0.9) + min_score=0.2, + max_score=0.9) self._run_filter(dataset, tgt_list, op, num_proc=4) From 57cc5846f119e57154e5fd73c1a81bd06ebbe6b0 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Wed, 15 Nov 2023 09:13:08 +0800 Subject: [PATCH 13/15] typo --- configs/config_all.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/config_all.yaml b/configs/config_all.yaml index f8fe3c5a5..e73dadac5 100644 --- a/configs/config_all.yaml +++ b/configs/config_all.yaml @@ -111,7 +111,7 @@ process: - clip_similarity_filter: # filter samples according to the similarity between text and images. hf_clip: openai/clip-vit-base-patch32 # name of used Hugging Face clip min_score: 0.1 # the min similarity of filter range - max_socre: 1.0 # the max similarity of filter range + max_score: 1.0 # the max similarity of filter range reduce_mode: avg # reduce mode when one text corresponds to multiple images in a chunk, must be one of ['avg','max', 'min']. any_or_all: any # keep this sample when any/all images meet the filter condition - flagged_words_filter: # filter text with the flagged-word ratio larger than a specific max value From 87a8675f1d54346b0f52c0a2f211aa16e84b3a36 Mon Sep 17 00:00:00 2001 From: zhijianma Date: Wed, 15 Nov 2023 09:59:55 +0800 Subject: [PATCH 14/15] docs: update filter numbers --- demos/overview_scan/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/overview_scan/app.py b/demos/overview_scan/app.py index 517f4cace..cfc41ce2e 100644 --- a/demos/overview_scan/app.py +++ b/demos/overview_scan/app.py @@ -89,7 +89,7 @@ |-----------------------------------|:------:|-------------------------------------------------| | Formatter | 7 | Discovers, loads, and canonicalizes source data | | Mapper | 21 | Edits and transforms samples | -| Filter | 18 | Filters out low-quality samples | +| Filter | 19 | Filters out low-quality samples | | Deduplicator | 3 | Detects and removes duplicate samples | | Selector | 2 | Selects top samples based on ranking | ''' From 551fa6ea896def82d928b7b01b2a9fa4d3aedebf Mon Sep 17 00:00:00 2001 From: zhijianma Date: Wed, 15 Nov 2023 10:02:25 +0800 Subject: [PATCH 15/15] sytle: pre-commit filter --- data_juicer/ops/filter/__init__.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/data_juicer/ops/filter/__init__.py b/data_juicer/ops/filter/__init__.py index 29a18f9de..e3ee77f5d 100644 --- a/data_juicer/ops/filter/__init__.py +++ b/data_juicer/ops/filter/__init__.py @@ -1,8 +1,9 @@ from . import (alphanumeric_filter, average_line_length_filter, - character_repetition_filter, clip_similarity_filter, flagged_words_filter, - image_aspect_ratio_filter, image_size_filter, - language_id_score_filter, maximum_line_length_filter, - perplexity_filter, special_characters_filter, - specified_field_filter, specified_numeric_field_filter, - stopwords_filter, suffix_filter, text_length_filter, - token_num_filter, word_num_filter, word_repetition_filter) + character_repetition_filter, clip_similarity_filter, + flagged_words_filter, image_aspect_ratio_filter, + image_size_filter, language_id_score_filter, + maximum_line_length_filter, perplexity_filter, + special_characters_filter, specified_field_filter, + specified_numeric_field_filter, stopwords_filter, suffix_filter, + text_length_filter, token_num_filter, word_num_filter, + word_repetition_filter)