From bc7fc71faa4e0b3e8e08a5d16a430327c5beb3cf Mon Sep 17 00:00:00 2001 From: FengZiYjun Date: Thu, 3 Jan 2019 18:59:52 +0800 Subject: [PATCH 1/3] * update version number in doc * update fastNLP.core.rst * refine all docstrings in core/ --- docs/source/conf.py | 4 +-- docs/source/fastNLP.core.rst | 14 +++----- fastNLP/core/batch.py | 18 +++++----- fastNLP/core/dataset.py | 21 ++++++------ fastNLP/core/fieldarray.py | 18 +++++----- fastNLP/core/instance.py | 15 ++++----- fastNLP/core/losses.py | 62 ++++++++++++++-------------------- fastNLP/core/metrics.py | 61 +++++++++++++++++++++++----------- fastNLP/core/optimizer.py | 23 ++++++++----- fastNLP/core/sampler.py | 22 ++++++++++--- fastNLP/core/tester.py | 22 ++++++++++--- fastNLP/core/trainer.py | 64 +++++++++++++++++------------------- fastNLP/core/vocabulary.py | 19 ++++++----- 13 files changed, 196 insertions(+), 167 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index e521b3d6..3bf42c53 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -16,8 +16,6 @@ import os import sys sys.path.insert(0, os.path.abspath('../../')) -import sphinx_rtd_theme - # -- Project information ----------------------------------------------------- project = 'fastNLP' @@ -27,7 +25,7 @@ author = 'xpqiu' # The short X.Y version version = '' # The full version, including alpha/beta/rc tags -release = '1.0' +release = '2.0' # -- General configuration --------------------------------------------------- diff --git a/docs/source/fastNLP.core.rst b/docs/source/fastNLP.core.rst index 5c941e55..b70b6798 100644 --- a/docs/source/fastNLP.core.rst +++ b/docs/source/fastNLP.core.rst @@ -13,10 +13,10 @@ fastNLP.core.dataset .. automodule:: fastNLP.core.dataset :members: -fastNLP.core.field +fastNLP.core.fieldarray ------------------- -.. automodule:: fastNLP.core.field +.. automodule:: fastNLP.core.fieldarray :members: fastNLP.core.instance @@ -25,10 +25,10 @@ fastNLP.core.instance .. automodule:: fastNLP.core.instance :members: -fastNLP.core.loss +fastNLP.core.losses ------------------ -.. automodule:: fastNLP.core.loss +.. automodule:: fastNLP.core.losses :members: fastNLP.core.metrics @@ -49,12 +49,6 @@ fastNLP.core.predictor .. automodule:: fastNLP.core.predictor :members: -fastNLP.core.preprocess ------------------------- - -.. automodule:: fastNLP.core.preprocess - :members: - fastNLP.core.sampler --------------------- diff --git a/fastNLP/core/batch.py b/fastNLP/core/batch.py index 1bb26129..442d1154 100644 --- a/fastNLP/core/batch.py +++ b/fastNLP/core/batch.py @@ -5,21 +5,19 @@ import torch class Batch(object): """Batch is an iterable object which iterates over mini-batches. - :: - for batch_x, batch_y in Batch(data_set, batch_size=16, sampler=SequentialSampler()): + Example:: + for batch_x, batch_y in Batch(data_set, batch_size=16, sampler=SequentialSampler()): + # ... + + :param dataset: a DataSet object + :param batch_size: int, the size of the batch + :param sampler: a Sampler object + :param as_numpy: bool. If True, return Numpy array. Otherwise, return torch tensors. """ def __init__(self, dataset, batch_size, sampler, as_numpy=False): - """ - - :param dataset: a DataSet object - :param batch_size: int, the size of the batch - :param sampler: a Sampler object - :param as_numpy: bool. If True, return Numpy array. Otherwise, return torch tensors. - - """ self.dataset = dataset self.batch_size = batch_size self.sampler = sampler diff --git a/fastNLP/core/dataset.py b/fastNLP/core/dataset.py index 52dac2fc..c798a422 100644 --- a/fastNLP/core/dataset.py +++ b/fastNLP/core/dataset.py @@ -118,7 +118,7 @@ class DataSet(object): def __len__(self): """Fetch the length of the dataset. - :return int length: + :return length: """ if len(self.field_arrays) == 0: return 0 @@ -170,7 +170,7 @@ class DataSet(object): def delete_field(self, name): """Delete a field based on the field name. - :param str name: the name of the field to be deleted. + :param name: the name of the field to be deleted. """ self.field_arrays.pop(name) @@ -182,14 +182,14 @@ class DataSet(object): def get_all_fields(self): """Return all the fields with their names. - :return dict field_arrays: the internal data structure of DataSet. + :return field_arrays: the internal data structure of DataSet. """ return self.field_arrays def get_length(self): """Fetch the length of the dataset. - :return int length: + :return length: """ return len(self) @@ -232,14 +232,14 @@ class DataSet(object): def get_input_name(self): """Get all field names with `is_input` as True. - :return list field_names: a list of str + :return field_names: a list of str """ return [name for name, field in self.field_arrays.items() if field.is_input] def get_target_name(self): """Get all field names with `is_target` as True. - :return list field_names: a list of str + :return field_names: a list of str """ return [name for name, field in self.field_arrays.items() if field.is_target] @@ -294,8 +294,9 @@ class DataSet(object): """Split the dataset into training and development(validation) set. :param float dev_ratio: the ratio of test set in all data. - :return DataSet train_set: the training set - DataSet dev_set: the development set + :return (train_set, dev_set): + train_set: the training set + dev_set: the development set """ assert isinstance(dev_ratio, float) assert 0 < dev_ratio < 1 @@ -326,7 +327,7 @@ class DataSet(object): :param List[str] or Tuple[str] headers: headers of the CSV file :param str sep: delimiter in CSV file. Default: "," :param bool dropna: If True, drop rows that have less entries than headers. - :return DataSet dataset: + :return dataset: the read data set """ with open(csv_path, "r") as f: @@ -370,7 +371,7 @@ class DataSet(object): """Load a DataSet object from pickle. :param str path: the path to the pickle - :return DataSet data_set: + :return data_set: """ with open(path, 'rb') as f: return pickle.load(f) diff --git a/fastNLP/core/fieldarray.py b/fastNLP/core/fieldarray.py index 5fa8276e..c1a2db1c 100644 --- a/fastNLP/core/fieldarray.py +++ b/fastNLP/core/fieldarray.py @@ -2,20 +2,18 @@ import numpy as np class FieldArray(object): - """FieldArray is the collection of Instances of the same Field. - It is the basic element of DataSet class. + """``FieldArray`` is the collection of ``Instance``s of the same field. + It is the basic element of ``DataSet`` class. + + :param str name: the name of the FieldArray + :param list content: a list of int, float, str or np.ndarray, or a list of list of one, or a np.ndarray. + :param int padding_val: the integer for padding. Default: 0. + :param bool is_target: If True, this FieldArray is used to compute loss. + :param bool is_input: If True, this FieldArray is used to the model input. """ def __init__(self, name, content, padding_val=0, is_target=None, is_input=None): - """ - - :param str name: the name of the FieldArray - :param list content: a list of int, float, str or np.ndarray, or a list of list of one, or a np.ndarray. - :param int padding_val: the integer for padding. Default: 0. - :param bool is_target: If True, this FieldArray is used to compute loss. - :param bool is_input: If True, this FieldArray is used to the model input. - """ self.name = name if isinstance(content, list): content = content diff --git a/fastNLP/core/instance.py b/fastNLP/core/instance.py index dc65fa82..a2877a8f 100644 --- a/fastNLP/core/instance.py +++ b/fastNLP/core/instance.py @@ -1,23 +1,22 @@ class Instance(object): - """An Instance is an example of data. It is the collection of Fields. + """An Instance is an example of data. + Example:: + ins = Instance(field_1=[1, 1, 1], field_2=[2, 2, 2]) + ins["field_1"] + >>[1, 1, 1] + ins.add_field("field_3", [3, 3, 3]) - :: - Instance(field_1=[1, 1, 1], field_2=[2, 2, 2]) + :param fields: a dict of (str: list). """ def __init__(self, **fields): - """ - - :param fields: a dict of (str: list). - """ self.fields = fields def add_field(self, field_name, field): """Add a new field to the instance. :param field_name: str, the name of the field. - :param field: """ self.fields[field_name] = field diff --git a/fastNLP/core/losses.py b/fastNLP/core/losses.py index 057b03f2..04f8b73e 100644 --- a/fastNLP/core/losses.py +++ b/fastNLP/core/losses.py @@ -13,6 +13,9 @@ from fastNLP.core.utils import get_func_signature class LossBase(object): + """Base class for all losses. + + """ def __init__(self): self.param_map = {} self._checked = False @@ -68,10 +71,9 @@ class LossBase(object): # f"positional argument.).") def _fast_param_map(self, pred_dict, target_dict): - """ - - Only used as inner function. When the pred_dict, target is unequivocal. Don't need users to pass key_map. + """Only used as inner function. When the pred_dict, target is unequivocal. Don't need users to pass key_map. such as pred_dict has one element, target_dict has one element + :param pred_dict: :param target_dict: :return: dict, if dict is not {}, pass it to self.evaluate. Otherwise do mapping. @@ -265,27 +267,22 @@ def _prepare_losser(losser): def squash(predict, truth, **kwargs): - """To reshape tensors in order to fit loss functions in pytorch - - :param predict : Tensor, model output - :param truth : Tensor, truth from dataset - :param **kwargs : extra arguments + """To reshape tensors in order to fit loss functions in PyTorch. + :param predict: Tensor, model output + :param truth: Tensor, truth from dataset + :param **kwargs: extra arguments :return predict , truth: predict & truth after processing """ return predict.view(-1, predict.size()[-1]), truth.view(-1, ) def unpad(predict, truth, **kwargs): - """To process padded sequence output to get true loss - Using pack_padded_sequence() method - This method contains squash() + """To process padded sequence output to get true loss. - :param predict : Tensor, [batch_size , max_len , tag_size] - :param truth : Tensor, [batch_size , max_len] - :param **kwargs : extra arguments, kwargs["lens"] is expected to be exsist - kwargs["lens"] : list or LongTensor, [batch_size] - the i-th element is true lengths of i-th sequence + :param predict: Tensor, [batch_size , max_len , tag_size] + :param truth: Tensor, [batch_size , max_len] + :param kwargs: kwargs["lens"] is a list or LongTensor, with size [batch_size]. The i-th element is true lengths of i-th sequence. :return predict , truth: predict & truth after processing """ @@ -299,15 +296,11 @@ def unpad(predict, truth, **kwargs): def unpad_mask(predict, truth, **kwargs): - """To process padded sequence output to get true loss - Using mask() method - This method contains squash() + """To process padded sequence output to get true loss. - :param predict : Tensor, [batch_size , max_len , tag_size] - :param truth : Tensor, [batch_size , max_len] - :param **kwargs : extra arguments, kwargs["lens"] is expected to be exsist - kwargs["lens"] : list or LongTensor, [batch_size] - the i-th element is true lengths of i-th sequence + :param predict: Tensor, [batch_size , max_len , tag_size] + :param truth: Tensor, [batch_size , max_len] + :param kwargs: kwargs["lens"] is a list or LongTensor, with size [batch_size]. The i-th element is true lengths of i-th sequence. :return predict , truth: predict & truth after processing """ @@ -318,14 +311,11 @@ def unpad_mask(predict, truth, **kwargs): def mask(predict, truth, **kwargs): - """To select specific elements from Tensor - This method contains squash() + """To select specific elements from Tensor. This method calls ``squash()``. - :param predict : Tensor, [batch_size , max_len , tag_size] - :param truth : Tensor, [batch_size , max_len] - :param **kwargs : extra arguments, kwargs["mask"] is expected to be exsist - kwargs["mask"] : ByteTensor, [batch_size , max_len] - the mask Tensor , the position that is 1 will be selected + :param predict: Tensor, [batch_size , max_len , tag_size] + :param truth: Tensor, [batch_size , max_len] + :param **kwargs: extra arguments, kwargs["mask"]: ByteTensor, [batch_size , max_len], the mask Tensor. The position that is 1 will be selected. :return predict , truth: predict & truth after processing """ @@ -343,13 +333,11 @@ def mask(predict, truth, **kwargs): def make_mask(lens, tar_len): - """to generate a mask that select [:lens[i]] for i-th element - embezzle from fastNLP.models.sequence_modeling.seq_mask - - :param lens : list or LongTensor, [batch_size] - :param tar_len : int + """To generate a mask over a sequence. - :return mask : ByteTensor + :param lens: list or LongTensor, [batch_size] + :param tar_len: int + :return mask: ByteTensor """ lens = torch.LongTensor(lens) mask = [torch.ge(lens, i + 1) for i in range(tar_len)] diff --git a/fastNLP/core/metrics.py b/fastNLP/core/metrics.py index 07ebe3fe..388f3e84 100644 --- a/fastNLP/core/metrics.py +++ b/fastNLP/core/metrics.py @@ -13,6 +13,24 @@ from fastNLP.core.utils import seq_lens_to_masks class MetricBase(object): + """Base class for all metrics. + + ``MetricBase`` handles validity check of its input dictionaries - ``pred_dict`` and ``target_dict``. + ``pred_dict`` is the output of ``forward()`` or prediction function of a model. + ``target_dict`` is the ground truth from DataSet where ``is_target`` is set ``True``. + ``MetricBase`` will do the following type checks: + + 1. whether self.evaluate has varargs, which is not supported. + 2. whether params needed by self.evaluate is not included in ``pred_dict``, ``target_dict``. + 3. whether params needed by self.evaluate duplicate in ``pred_dict``, ``target_dict``. + 4. whether params in ``pred_dict``, ``target_dict`` are not used by evaluate.(Might cause warning) + + Besides, before passing params into self.evaluate, this function will filter out params from output_dict and + target_dict which are not used in self.evaluate. (but if **kwargs presented in self.evaluate, no filtering + will be conducted.) + However, in some cases where type check is not necessary, ``_fast_param_map`` will be used. + + """ def __init__(self): self.param_map = {} # key is param in function, value is input param. self._checked = False @@ -71,10 +89,9 @@ class MetricBase(object): raise NotImplemented def _fast_param_map(self, pred_dict, target_dict): - """ - - Only used as inner function. When the pred_dict, target is unequivocal. Don't need users to pass key_map. + """Only used as inner function. When the pred_dict, target is unequivocal. Don't need users to pass key_map. such as pred_dict has one element, target_dict has one element + :param pred_dict: :param target_dict: :return: dict, if dict is not {}, pass it to self.evaluate. Otherwise do mapping. @@ -177,6 +194,9 @@ class MetricBase(object): class AccuracyMetric(MetricBase): + """Accuracy Metric + + """ def __init__(self, pred=None, target=None, seq_lens=None): super().__init__() @@ -186,10 +206,9 @@ class AccuracyMetric(MetricBase): self.acc_count = 0 def _fast_param_map(self, pred_dict, target_dict): - """ - - Only used as inner function. When the pred_dict, target is unequivocal. Don't need users to pass key_map. + """Only used as inner function. When the pred_dict, target is unequivocal. Don't need users to pass key_map. such as pred_dict has one element, target_dict has one element + :param pred_dict: :param target_dict: :return: dict, if dict is not None, pass it to self.evaluate. Otherwise do mapping. @@ -230,7 +249,7 @@ class AccuracyMetric(MetricBase): torch.Size([B,]), torch.Size([B,]), torch.Size([B, max_len]), torch.Size([B, max_len]) :param seq_lens: List of (torch.Tensor, or numpy.ndarray). Element's can be: None, None, torch.Size([B], torch.Size([B]). ignored if masks are provided. - :return: dict({'acc': float}) + """ # TODO 这里报错需要更改,因为pred是啥用户并不知道。需要告知用户真实的value if not isinstance(pred, torch.Tensor): @@ -269,6 +288,11 @@ class AccuracyMetric(MetricBase): self.total += np.prod(list(pred.size())) def get_metric(self, reset=True): + """Returns computed metric. + + :param bool reset: whether to recount next time. + :return evaluate_result: {"acc": float} + """ evaluate_result = {'acc': round(self.acc_count / self.total, 6)} if reset: self.acc_count = 0 @@ -308,34 +332,31 @@ def _prepare_metrics(metrics): def accuracy_topk(y_true, y_prob, k=1): - """Compute accuracy of y_true matching top-k probable - labels in y_prob. + """Compute accuracy of y_true matching top-k probable labels in y_prob. - :param y_true: ndarray, true label, [n_samples] - :param y_prob: ndarray, label probabilities, [n_samples, n_classes] - :param k: int, k in top-k - :return :accuracy of top-k - """ + :param y_true: ndarray, true label, [n_samples] + :param y_prob: ndarray, label probabilities, [n_samples, n_classes] + :param k: int, k in top-k + :returns acc: accuracy of top-k + """ y_pred_topk = np.argsort(y_prob, axis=-1)[:, -1:-k - 1:-1] y_true_tile = np.tile(np.expand_dims(y_true, axis=1), (1, k)) y_match = np.any(y_pred_topk == y_true_tile, axis=-1) acc = np.sum(y_match) / y_match.shape[0] - return acc def pred_topk(y_prob, k=1): """Return top-k predicted labels and corresponding probabilities. - - :param y_prob: ndarray, size [n_samples, n_classes], probabilities on labels - :param k: int, k of top-k - :returns + :param y_prob: ndarray, size [n_samples, n_classes], probabilities on labels + :param k: int, k of top-k + :returns (y_pred_topk, y_prob_topk): y_pred_topk: ndarray, size [n_samples, k], predicted top-k labels y_prob_topk: ndarray, size [n_samples, k], probabilities for top-k labels - """ + """ y_pred_topk = np.argsort(y_prob, axis=-1)[:, -1:-k - 1:-1] x_axis_index = np.tile( np.arange(len(y_prob))[:, np.newaxis], diff --git a/fastNLP/core/optimizer.py b/fastNLP/core/optimizer.py index fddafbad..145f117c 100644 --- a/fastNLP/core/optimizer.py +++ b/fastNLP/core/optimizer.py @@ -2,6 +2,11 @@ import torch class Optimizer(object): + """ + + :param model_params: a generator. E.g. ``model.parameters()`` for PyTorch models. + :param kwargs: additional parameters. + """ def __init__(self, model_params, **kwargs): if model_params is not None and not hasattr(model_params, "__next__"): raise RuntimeError("model parameters should be a generator, rather than {}.".format(type(model_params))) @@ -10,13 +15,14 @@ class Optimizer(object): class SGD(Optimizer): - def __init__(self, lr=0.001, momentum=0, model_params=None): - """ + """ :param float lr: learning rate. Default: 0.01 :param float momentum: momentum. Default: 0 - :param model_params: a generator. E.g. model.parameters() for PyTorch models. - """ + :param model_params: a generator. E.g. ``model.parameters()`` for PyTorch models. + """ + + def __init__(self, lr=0.001, momentum=0, model_params=None): if not isinstance(lr, float): raise TypeError("learning rate has to be float.") super(SGD, self).__init__(model_params, lr=lr, momentum=momentum) @@ -30,13 +36,14 @@ class SGD(Optimizer): class Adam(Optimizer): - def __init__(self, lr=0.001, weight_decay=0, betas=(0.9, 0.999), eps=1e-8, amsgrad=False, model_params=None): - """ + """ :param float lr: learning rate :param float weight_decay: - :param model_params: a generator. E.g. model.parameters() for PyTorch models. - """ + :param model_params: a generator. E.g. ``model.parameters()`` for PyTorch models. + """ + + def __init__(self, lr=0.001, weight_decay=0, betas=(0.9, 0.999), eps=1e-8, amsgrad=False, model_params=None): if not isinstance(lr, float): raise TypeError("learning rate has to be float.") super(Adam, self).__init__(model_params, lr=lr, betas=betas, eps=eps, amsgrad=amsgrad, diff --git a/fastNLP/core/sampler.py b/fastNLP/core/sampler.py index 766d71a7..67ec2a8d 100644 --- a/fastNLP/core/sampler.py +++ b/fastNLP/core/sampler.py @@ -20,8 +20,8 @@ def convert_to_torch_tensor(data_list, use_cuda): class BaseSampler(object): """The base class of all samplers. - Sub-classes must implement the __call__ method. - __call__ takes a DataSet object and returns a list of int - the sampling indices. + Sub-classes must implement the ``__call__`` method. + ``__call__`` takes a DataSet object and returns a list of int - the sampling indices. """ def __call__(self, *args, **kwargs): @@ -32,8 +32,12 @@ class SequentialSampler(BaseSampler): """Sample data in the original order. """ - def __call__(self, data_set): + """ + + :param DataSet data_set: + :return result: a list of integers. + """ return list(range(len(data_set))) @@ -41,13 +45,23 @@ class RandomSampler(BaseSampler): """Sample data in random permutation order. """ - def __call__(self, data_set): + """ + + :param DataSet data_set: + :return result: a list of integers. + """ return list(np.random.permutation(len(data_set))) class BucketSampler(BaseSampler): + """ + + :param int num_buckets: the number of buckets to use. + :param int batch_size: batch size per epoch. + :param str seq_lens_field_name: the field name indicating the field about sequence length. + """ def __init__(self, num_buckets=10, batch_size=32, seq_lens_field_name='seq_lens'): self.num_buckets = num_buckets self.batch_size = batch_size diff --git a/fastNLP/core/tester.py b/fastNLP/core/tester.py index ef3780a0..48e1f090 100644 --- a/fastNLP/core/tester.py +++ b/fastNLP/core/tester.py @@ -1,5 +1,3 @@ -from collections import defaultdict - import torch from torch import nn @@ -15,7 +13,16 @@ from fastNLP.core.utils import get_func_signature class Tester(object): - """An collection of model inference and evaluation of performance, used over validation/dev set and test set. """ + """An collection of model inference and evaluation of performance, used over validation/dev set and test set. + + :param DataSet data: a validation/development set + :param torch.nn.modules.module model: a PyTorch model + :param MetricBase metrics: a metric object or a list of metrics (List[MetricBase]) + :param int batch_size: batch size for validation + :param bool use_cuda: whether to use CUDA in validation. + :param int verbose: the number of steps after which an information is printed. + + """ def __init__(self, data, model, metrics, batch_size=16, use_cuda=False, verbose=1): super(Tester, self).__init__() @@ -49,6 +56,11 @@ class Tester(object): self._predict_func = self._model.forward def test(self): + """Start test or validation. + + :return eval_results: a dictionary whose keys are the class name of metrics to use, values are the evaluation results of these metrics. + + """ # turn on the testing mode; clean up the history network = self._model self._mode(network, is_test=True) @@ -60,8 +72,8 @@ class Tester(object): _move_dict_value_to_device(batch_x, batch_y, device=self._model_device) pred_dict = self._data_forward(self._predict_func, batch_x) if not isinstance(pred_dict, dict): - raise TypeError(f"The return value of {get_func_signature(self._predict_func)} " - f"must be `dict`, got {type(pred_dict)}.") + raise TypeError(f"The return value of {get_func_signature(self._predict_func)} " + f"must be `dict`, got {type(pred_dict)}.") for metric in self.metrics: metric(pred_dict, batch_y) for metric in self.metrics: diff --git a/fastNLP/core/trainer.py b/fastNLP/core/trainer.py index bf32fa6c..3e8360d2 100644 --- a/fastNLP/core/trainer.py +++ b/fastNLP/core/trainer.py @@ -27,39 +27,37 @@ from fastNLP.core.utils import get_func_signature class Trainer(object): - """Main Training Loop - """ - def __init__(self, train_data, model, loss=None, metrics=None, n_epochs=3, batch_size=32, print_every=50, - validate_every=-1, dev_data=None, use_cuda=False, save_path=None, - optimizer=Adam(lr=0.01, weight_decay=0), check_code_level=0, - metric_key=None, sampler=RandomSampler(), use_tqdm=True): - """ - :param DataSet train_data: the training data :param torch.nn.modules.module model: a PyTorch model :param LossBase loss: a loss object - :param MetricBase or List[MetricBase] metrics: a metric object or a list of metrics + :param MetricBase metrics: a metric object or a list of metrics (List[MetricBase]) :param int n_epochs: the number of training epochs :param int batch_size: batch size for training and validation :param int print_every: step interval to print next training information. Default: -1(no print). :param int validate_every: step interval to do next validation. Default: -1(validate every epoch). :param DataSet dev_data: the validation data - :param use_cuda: - :param save_path: file path to save models + :param bool use_cuda: whether to use CUDA in training. + :param str save_path: file path to save models :param Optimizer optimizer: an optimizer object - :param int check_code_level: level of FastNLP code checker. -1: don't check, 0: ignore. 1: warning. 2: strict. + :param int check_code_level: level of FastNLP code checker. -1: don't check, 0: ignore. 1: warning. 2: strict.\\ `ignore` will not check unused field; `warning` when warn if some field are not used; `strict` means it will raise error if some field are not used. :param str metric_key: a single indicator used to decide the best model based on metric results. It must be one of the keys returned by the FIRST metric in `metrics`. If the overall result gets better if the indicator gets - smaller, add a `-` character in front of the string. For example - :: + smaller, add "-" in front of the string. For example:: + metric_key="-PPL" # language model gets better as perplexity gets smaller - :param sampler: method used to generate batch data. - :param use_tqdm: boolean, use tqdm to show train progress. - """ + :param BaseSampler sampler: method used to generate batch data. + :param bool use_tqdm: whether to use tqdm to show train progress. + + """ + + def __init__(self, train_data, model, loss=None, metrics=None, n_epochs=3, batch_size=32, print_every=50, + validate_every=-1, dev_data=None, use_cuda=False, save_path=None, + optimizer=Adam(lr=0.01, weight_decay=0), check_code_level=0, + metric_key=None, sampler=RandomSampler(), use_tqdm=True): super(Trainer, self).__init__() if not isinstance(train_data, DataSet): @@ -141,30 +139,30 @@ class Trainer(object): def train(self, load_best_model=True): """ - 开始训练过程。主要有以下几个步骤 - for epoch in range(num_epochs): - (1) 使用Batch从DataSet中按批取出数据,并自动对DataSet中dtype为float, int的fields进行padding。并转换为Tensor。非 - float,int类型的参数将不会被转换为Tensor,且不进行padding - for batch_x, batch_y in Batch(DataSet): - # batch_x中为设置为input的field - # batch_y中为设置为target的field - (2) 将batch_x的数据送入到model.forward函数中,并获取结果 - (3) 将batch_y与model.forward的结果一并送入loss中计算loss - (4) 获取到loss之后,进行反向求导并更新梯度 - if dev_data is not None: - 根据metrics进行evaluation,并根据是否提供了save_path判断是否存储模型 - - :param load_best_model: 该参数只有在初始化提供了dev_data的情况下有效,如果True, trainer将在返回之前重新加载dev表现最好的 + 开始训练过程。主要有以下几个步骤:: + + 对于每次循环 + 1. 使用Batch从DataSet中按批取出数据,并自动对DataSet中dtype为float, int的fields进行padding。并转换为Tensor。 + 非float,int类型的参数将不会被转换为Tensor,且不进行padding。 + for batch_x, batch_y in Batch(DataSet) + # batch_x中为设置为input的field + # batch_y中为设置为target的field + 2. 将batch_x的数据送入到model.forward函数中,并获取结果 + 3. 将batch_y与model.forward的结果一并送入loss中计算loss + 4. 获取到loss之后,进行反向求导并更新梯度 + 如果测试集不为空 + 根据metrics进行evaluation,并根据是否提供了save_path判断是否存储模型 + + :param bool load_best_model: 该参数只有在初始化提供了dev_data的情况下有效,如果True, trainer将在返回之前重新加载dev表现最好的 模型参数。 + :return results: 返回一个字典类型的数据, 内含以下内容:: - 将会返回一个字典类型的数据, 内含以下内容: seconds: float, 表示训练时长 以下三个内容只有在提供了dev_data的情况下会有。 best_eval: Dict of Dict, 表示evaluation的结果 best_epoch: int,在第几个epoch取得的最佳值 best_step: int, 在第几个step(batch)更新取得的最佳值 - return dict: """ results = {} try: diff --git a/fastNLP/core/vocabulary.py b/fastNLP/core/vocabulary.py index e8cc0e22..50a79d24 100644 --- a/fastNLP/core/vocabulary.py +++ b/fastNLP/core/vocabulary.py @@ -41,13 +41,13 @@ class Vocabulary(object): vocab.update(word_list) vocab["word"] vocab.to_word(5) + + :param int max_size: set the max number of words in Vocabulary. Default: None + :param int min_freq: set the min occur frequency of words in Vocabulary. Default: None + """ def __init__(self, max_size=None, min_freq=None, unknown='', padding=''): - """ - :param int max_size: set the max number of words in Vocabulary. Default: None - :param int min_freq: set the min occur frequency of words in Vocabulary. Default: None - """ self.max_size = max_size self.min_freq = min_freq self.word_count = Counter() @@ -78,6 +78,7 @@ class Vocabulary(object): """Add a single word into the vocabulary. :param str word: a word or token. + """ self.add(word) @@ -86,11 +87,12 @@ class Vocabulary(object): """Add a list of words into the vocabulary. :param list word_lst: a list of strings + """ self.update(word_lst) def build_vocab(self): - """Build 'word to index' dict, and filter the word using `max_size` and `min_freq`. + """Build a mapping from word to index, and filter the word using ``max_size`` and ``min_freq``. """ self.word2idx = {} @@ -111,7 +113,7 @@ class Vocabulary(object): self.rebuild = False def build_reverse_vocab(self): - """Build 'index to word' dict based on 'word to index' dict. + """Build "index to word" dict based on "word to index" dict. """ self.idx2word = {i: w for w, i in self.word2idx.items()} @@ -146,10 +148,9 @@ class Vocabulary(object): raise ValueError("word {} not in vocabulary".format(w)) def to_index(self, w): - """ Turn a word to an index. - If w is not in Vocabulary, return the unknown label. + """ Turn a word to an index. If w is not in Vocabulary, return the unknown label. - :param str w: + :param str w: a word """ return self.__getitem__(w) From 5d8f6960a711ea04735f6155061a3136034a88be Mon Sep 17 00:00:00 2001 From: FengZiYjun Date: Thu, 3 Jan 2019 19:25:22 +0800 Subject: [PATCH 2/3] * fix README figure * refine code style --- docs/source/figures/text_classification.png | Bin 73437 -> 73948 bytes fastNLP/io/dataset_loader.py | 22 ++++++++++---------- test/io/test_dataset_loader.py | 9 ++++---- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/docs/source/figures/text_classification.png b/docs/source/figures/text_classification.png index 183aaba9ed8cbd45cdb31f6675a6b304cb8b262a..0d36a2a1a1819b56d32d378ae9e11a3e56aba2b9 100644 GIT binary patch literal 73948 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�J(4HFjNiR!-(B|v|8q9*9*vIqhsBT)Acz!aY^)F(!}Ue6kf zwexs`fyrj9)3y&wGvK6XyA)2Pw9)Au}=o{c*9`y~_Pmr$h97^?34YNVg$}K{klG z8T)!NY$R*9KZ%ND0g)eojT4U;ZfO>`E9#8c>C2{vR+JRXVzXOh?E-U?2~NQ`NsoL+ z)wCS%MDOMlwE3csqsfMcN$Ftn^aW2q)ng0$Wu4@)vTkH)!XbD}xcf`@10@BkU@-EcEUW30bhjqfRmuu=Dnsn!v>D$@1E$ncu7NPpUYSX?!G#W>HJTdt}5!f5S49YRD^x+{m#>+y14is)()v%>4! z;(^ZC=z8!dlROZ|=N*KXo?Wp9#xV97YPGn$Jw!KkVfjs{ktnjShfEpiuym8c_F!^D z%eG3D-}35d6Y{;j?4Qg}BayxzwH|%T4SMcg%?nRYcD7^lv%&;3BTT!Yp_ycS|u`r1-dX#%^5KyQg;8 zcf0p#J$wCx(0L>DFhxW;+~RJ#;-t$lV=+wiYB9q~=vlJ6(Xl47KqtzI&zQtGUVcJY znC4LYCq8Oe5JTge^gBXMRo%{X)tXvdnW5y;|Ne6&JYw;EY4)KD+1hSeM73vSI_)c< z@PI3WBpO0JtbP-V%g2a*HhHkh<8xh`!mP$~e_D;JlW{&A`%fXGFagXsW zWT^%ARSheXWfTAT@;pXqBrvh0n)<3ml^HHQ@M)%`A_qn6{%AZfM`5Vd;7shaInC5B zViE6ipXS8~=owu;d)QC+Eb8nJCyLF(uA0?vNTBq#I?;V#ZC^(1Kn`{h<~y|5);8r} z2GfCum%X?e8+IaNraM(=JIDD+$QE!C)J*qI#2YXePnlEmA!ap{3(bmFSu9d_J-cn< z5&Jw8zg_dN3+tri=r2I6J`cK`nzNsZ3nh9M?|B4JM7Ym^Z)L-y86dvj@m_KN1&_(J z?Qw-ghIYU>+UpWaPf=b(b{n|KWMxMk$7S?piXmh8vw%^;V!VBWa^-scDVR6th#Y#Y zf57pC^J+3ipzYJ;4M6=$vy)g?&*fS@!kansQJ*eDhxqqj$pOn-IO5qg1i7ujMfTiq zce#9juiso^u*>xU*6f;%K}IQ#0#(I>Xmj zAk!E8L^4b?R`*DDezSqg0;oZNW@g&k5Oi9jDaN=byKI7cqh}?U|%GApD& z&-;+N=Ws;*JoD?@(J3QUpwhp%@qD*8K7!BKB5&zGW*^GO;(K`hRa_4epUxi!N=wGe z$~Nhq(x4NJt^X9?{Jz%Uqcc5ujL*g-M5l}7tUwaa!vdR_K{LJ4D>O=nOX%1X7P$p^ zPxpAKp(O`L2a=pe#8#c1?Pc2iAt5H&PyiMv1Qz*}Aam^&WNk#Lmv<_Rogf7sOsH(O zSL?qX41kHQ4b9sM;gyYJ*y`g%4%ULbNf%<3uecDpVi9=LeFay^^Y*AWg^2PAIj{bS zETn0~5gzoK**ydi8Dq-vtqj5GYSv|b&jYR^!0z^^z+I;v-)Zfs&4?^-vmGyyV;Jv8ca zn!!Z6A;=BStyu|LKXWGax0J5~#E`m=8*Ld>BMvZ4uKuej!wwUnRLz8%-5Yz`<+(VI ztux2fBMe2YwjgP~iFyRL8#lT= zbcBhT=q?-QE7e;#LX!)?rgPe`+W{&3@6H2g#DMzkk6n<8iMC*r9~dRjdVo}6XLbd9 zsZh#?ihk^Z%xCI6hUD#O;Sv=&(tlm8ivT2o%_&3**(r7-2|H)rwC*Ma4Bha{VZ0>Qu{4b8;169sbHBKrmxyf_xD& zmS}LvCNqcx0|1WY!defX@Z6?c>3!6lVxopqjyIS<@(p{Q34U#`{AH~AAjc)g1GYT8 zox|OX+FjgD70xE^-pJI=kzJfkU0k$MLWSp4V7J>98Add8KGt$DmDyil3V{!!B6|#OqGmUNNUYM#+*;-B*61e z)h-xx==rYs)m6v1zODYTJW2VH8HT0%4_4z6Ssg<%JqrJVXz5(n!I>p#dEH(e7J z_{iVM=-z>}t+|rPkCmeuwH>1JIl9aH3ZOyNHGjvT;u-#CM!XzlQ3dMpZHMNrZ{gB-|n*^`FQneV8UuVXj+Yf+%p2lf(I&seaZkUP@E`0kq}n+x!0f&e_o zI8_D-xCe2j=ne<};r*Df>&R&CoV+95i$i89g4vSKZ<3L}I1XYDT;Q2+5;J+bw%Ye$ zDbHQuLAE!mKXN3x&(6VTWJhDJdJI)~&j3fatbB<) zSL?ZX<*AWdyz_@P0<{0!MW!C#zc7E6{%fO-TAv7cio7*%58=%_qf@HA4exZv&9vuB zZ%3Q%^ma3fT1nPRt@M8(*U^)t^YWowujKr>;*Y~4U{mi*T> zxvqY^%`8*d+vYbUEX`u_wu?|L1$w&;BF7X=zpeFe6#s@e*LEeGLuN8nZHJ`coCtNZ z2Ba<$sfRQ{8o!qcd)rpxOhg>*MbWHp15L}T#`|7Q{cU0h@J(E%mR-z$`EAWA4HL!4 zvUGAkELyu169nC=Tzpou)cfWmS$Zl}`LL?kh7Rw^C45^vAhrMBSxZ)b{1Afq!H)dl z&Iau$&7Im+JY2a{?@_?TV&@vKrhYZ*M9))0k00|mk8WaGr@AZv%m^yS+wTQ|IYOUD z_c*-LEkwgN7`g_Y3O1eC193341}Dj@egekxwBg&WD1cjGOa6Ymm50kCHO%Uz!IN0K zWi>})HE|JWk-*mRn0!P}w|dgb=lU2DgC6T2+0d)fu=l^{O>=kN037j;@Fq>qq~8UK zS)!^ygOkqiW$Xpwqe)7p(;!T*z}(0(k~F^&)0%scEz3kPDqH=gdl z00yZM{)y|;))eC3t`^JcGl>GW5)o(YqMW)H@A&3Rmg3z`P6E+&KXSQ(nJB(0ppmOt z8suc%-tEn5%$jHy-INlGHt_cZy1!oHSN9P1w#kbps>gm)N0MGg?_ddAwzO7ErL6GE z)Bz(Lyh9>LR#(c-=T;F`_8Tv&5S$^$AP z7Y}+7H&fJ1#q>8X>X(yJEQ-Xz?Ko?Bws^DEdPBVVp9!Rl`n&&52{les?8t@?@5*~Rgy<=oW?I;v^w{NCi>Mbei#`HpjFl<7S`pz zLEC<%(q-OyFF)h0^If+Lq3heyih**@IcL##&n|)j^bvM}!fAjx6U)5Pa z-1YP0zB0Xr2o?aVv*-L=z+l~{)?2)`i6)nkX+_5CnxCQcKR&BQ) zjwPU4Lpye@1xq%@@JCoZsqsNqd}J!DLb2`KjS1$2;llgCSe8zu9NwIb)EdV*Me-gZ@EAOWC&h56@^up{pO>%W_6 zbt5H~u{vc{Txm!Iz{ctS2GFR7pUIEs^m`wV^$XRZF zjl|g9&^Gs6zw<0<8UTm=cNi^kBv3MipnC++w2BBPs8xR`JnFh8Jp{c*pBXmvxAqdw z$<9Px0zI2v1N*m|@G{mlJPZjKr2G+U1}j&mWxh99GpfrFYwQ}=B~a-U8lS~hC6ciO;D3n@$r`^XP4ZCy1D+5 zUdWc!<9+p}n1=h&4addfX~ii-fzC}+5rE+Qaag~%CRET&8xGB+Zd~BUo$U}! zz?bXiw;Z@X&4LoK98c_snZIuUzTE@hgUVWV9>OyRu78iB{7$wb1anUY)W?q~0CdIu}yac1## zy$*x|=hfa}x}JN=^fJdE4`jiw@7Q@alY^nYRO8et?*WRC*#yY*==V9$@OF?sP`CQq zt+vXxo#2E6pQjC!hAVyi?;Kv1C5(`(7Is_|oy_6&ORtWhs88ZZ{(3q#9a89Jz|=b( zC%L0qD9`Hf=Bq^rcEbGaGC*0jxaOjfaAe&2!Ic=4f83ZVhbu2C$O-dwgIcpwj_NnO zGBna8S@`;~z&@5~ZzQfCI7|+)1&XZPU5}Ul#4CPx9i=Nq2uL|0qa&lSR^4josC=Tq zh%qK^&oSKl1@#5%-$n_?FQd-u^c3hsmD_7V@FANJCScfeIiT-}n5v?CS1mRpGtqok zh7bm;$QEi}#dZLrm6FZZ-*Do<+_W*DjtO5>S)aw_+;Be2wmH_lOJP|})>ibnT2qQH zfGA|(`^@3G`7N^H*uRrTUQM*W!X22Yw=Z8qFR9>DfbS8K?m49-YFi_k99dv3X!ug6 zeJ<7?iL}@UyPtVOA#&XIOWiK3Fwra?6#lM|Wa1@#?=RgUwkqR{dUnPZJ7wBXcWP(7 zs`W4|HR~Jj4>1z3qn*KcILq-wb%8&G^pXuYY;Kt0uZLkNC>9wETVxH=$~7{+c~x_` ze&&_khR{CeaRnEehtH3th zP8;+vwwo3ZI$3VoDApC~gCLVDs$Bl`uWxrgLvagpsQhP!@T(ni&R7VEQ}jqoXjhLn z{5c#09w)^)bjP(@W)31wZa|>fZ$Igynghe^<2NezUrdd|B?D7d?C^z+GujPZ%kA}{ zm5Bxo%)oY94F`}6O+pXiVq{H#vi1{DR*7H#I`%BYcHrNc#xs2vFW+(<`S1K@N50W` zLv?0Bow@(mDK2U35``kxpsB80<-IZv5M5fYh=;_J9+}X>pKxZ{eI^hxy>hF{Ba0$L zkgXX&9JaJ>j47zMwAPtfpSmXf)@RTmRy~K&9XBW-#>!5IkV+065H70^+#h~%T^!)g zye5wVzpLEF-a+wph|T=%qmKaIR9*g-kt!o?Dx`Py^9nAo?Sk7e?2VbYm$1kb$v%*E z_;J3H1vUe;SX4(q+|L4#SYfh_1^`Te6CJBvs(GLX&9ggO8MZqw5kNleg_#sfdTRSY zw6;^ybtG>8lY$*z+olHM>o{RS)W{mI`yka@jan8zhbQP37I@Q6%}6xlMU_!Ew%=L6 zTpg?qK39bvu(ZIQG1^mAVGhrFLDpFNyHsQ3W~Atny;j>$U$*SpqPY^G{!7Lc~?a z2;x9>6fisL7eZQ4pq{&mWGD*QI3=BLOcLiiZ=Qo}L z)eIW^x;0>avc9v8namxU`LodG5aIQSrL{lE<5K*FzBW~~@HQUIdb3`VRJqoxH?sMh z5x{l}PL!;GY>-g6$QnkD=bldU@3%j9Z3(TKYm(fxHqf>*{%d*evgVgN!C#V-eAz5%kwkjwzk|2OEA3e zrycgd%+~M1zOx0xe(O5-^uC!&TB%-dC7ZD@S9>=3cGu- zzE)_K$W8-fY2=>+V&1AxUn4T^^}OIz6wSe}?xTL+(tPKL*vY}^A;BppJ3JyGxz%2& zj9@^+$#S6r@wsn8wEtLEIj`-5zNd|r3r?%q%!C=ju|#`4h-9|>i?Nupk5v3%VO7S& zv!L}?_f9@&^z15h)#l{ahT>MODnTr;9@0nyy&4}1X;ja_h0IZM16ZUHav;=;Qkq7@ z;{P_E3II5L5TK(1Gwj&;yX+?b{^5!@eDaBv2)pCx$>c$QVzp-o7#f1zewOO9zD?t* zQDt(d)R9+BIG%=1y0Fsaelk?QRStyV$`;<1aer^qxo9c1Fv0)W89V3Vhz25^D+LWM^?5 z^<7BSEZn)si0;h8RGSV5;RFMitw^GQwH33&TgkIqpZfsC>yW2zRX8YY^}l@NF8KG} zjjdjl%|&sb_{l z?s>kQ!|~PcvgppuwtYeT!EWQ!dQ;du}5go<(K>xlf&Cx#~{Diis-CHL95nW44~@ z{^A?}DpAbj^D|XhhzeYEJu~Y!!8E@5NNHXo+tytgnmy(AEd5q+dDSsoj6* zlz4U1y&PKsrKT=|N~af9#1kjZ{Je5{4e&2l0&n(}=`YzBuxMUd@Qd~qT5!pX)$Jo) znd$)BxAUK@PK2k8{+ZDYj!;)msL{#;tmi@?ELN!36w~41sL1LRJ^(4%`fb$0fLHg*G?1$iXL8z1 z0E(Y{3!K$ApgQ2CeoYSrF1a>NM6z;Bt9S(7xJUnsYHeH%Auo11as?hE+6nJAj%09C zk2zar)qde;Th^z(1ycWmBSndRi~a>99sd9}PEow1vrVHd2bb~DYc<7C*w)5Fb7V!W zbnuFPH07M0aKU~9n!VWsU-mrwdt|lw`syx+Lp!2Cg8H7z+IdIeXHkD+6&4&)*}LL* z!&gXM+o7Y?q6A%K4nRZtk%etON0wAGU)5Nds4WIFU2n)uUo5J8Iz;yvx?j9&sDDvG zAcp%0swsB`k`pA1+_Y*s5l z47b%y$>@2j3fNR-+XX8czNe{16TSvaPOXcg4X<=-_tb9>PgD;UM;j(}xRfpyY(`v9 zq6nenB6c#om%X;?+UoGd)#f7a#apRNvd;8E(uX0#S0JSMgY1D`o?G{WXTXQ)_mE}G zuk0w9Se92e*w%4o$Pdd(H>bPr{}IJy2hpO(ScnQ*3mo%RBhxkzRRH9;{jVDu)sTH| z-}c$m5ynK+H%t|nUXdUT;o(z>tm)+iIqfdRPg6||p_##HwX?KTIa6ml@aTuf1>jRA z4qBO4y9%vW^G50R|8N_z-S+m;ExE!%AxLOyFEh;sGI*Klys^7Mi)6F5`Zpu6CHVDx)u4G+7rV!X zeu%}NLvYH=W1mlae&mRg=j9+nWA+Ld@(p!fvLU*%ka5ktvgMFRMLyL*tE z;n=QfFPvTkoS8YH*yk`Pim4yC$gUSy91kGNO0UuW`((r zU#s|dKl$8c?nBEjGMZ1%fvkjGVaduqeriWvNjM+#A*vd7ODjC?D#Vs`bYHbp|KIy= z79Yp`WxukHQp^S7b*9Uy;tyLMnUyl)95@a(VZ8toG;G4WA7-RKLUU&3Vokq#jOCx zFI|oFu>A}*=VN&<8_&{Xp4ur_?uX~j5ehIOfQVEHA|KyPW}W)kMtjF7fC;}j{?vz@ zeW!?X{Tc=-T6!cu7b0$EuQ92VV1%Bvc=mWJQ7+RibF)-NxYGBIP5G5RUq0?4=m1KF zmn?K?#aynjVPF%PY^PBfCaSsfJ}Xa~=k_OihuWj^x3a~+g(!K?51x|z9R70#JE)q$ zoT9rvH$A!`YV%1;fHGbq&DGLO=T?om@yC$Eba39$Je=rR)k&OJW8(`b;JmFYN! zh)X?k$?shSzbJrR7jTzNMX|7N$qtv#|DU3__ar}K?=-6D`e@HSX08&$d4vA8Mw6ZnI8cw08%|6J}49os$d+9EaDQ^6X^}QP10-7 zuCmyt`@M=2_PvVZApMiTb3j&s`dAGfGZy8gQO-IE79YnXmsJp7SuRhy2$m!x-%c5k z&t5N4jb+@t^KP@eE|Tq~1F|>zaU&w2$j`C++z;s+JA4{>P9EGc3M?FZH!Db>=JtJ4 z|GiELxGBdwCaGy4>%elMH2;Zn@mk7QUYU{Qs|$q@3DK_r=h^Yl5AcpE5IWK`O>&O} z_k3yhzfvv&e-^kM&uwG&U-7(&iXT^C5+C0$*6O}&G{T_a&Uf+&!O((mXSwjNisP$H z?*FW*a)WZ#l0EXvZJ0z&=#xINi~Rx@G*G!UHs#L5+OCJ>)jqfB@o$s9Da^@OB+SFL zZ950*ir|%5*cu>YFN3D!23cy=o}TBC!Ygnlu}8d338i$d_0|rRp`XQlcPhJUAkV=8 zHg|to!F8j#5(zA#-%p+Y+OBumgeH2T1(3Vmg#SXM5>IU2xEIKPcy#2;&h`O5P7o;t zwjv&q7C?Lg>K+>`so7m?yeabyFPDOL0};ly1dur5l%iP_#HI8T7+Z;3(i4ee$OI@H z-&f&e@$nOSt*<&eRQEWoqF9YkD z>~nVB_!*S6f9p!z?WWQPFT(V(L$VvAo*-gaIO>}%nJnSZUdiloxN7{SGHJNSU!m$@bMiEe|g7hXxm!c>jUAj_&LlG$f zks2Tb$A(nt(xo>cf^-PM0!R>|v_L395CTMqln_XOd~Z;voblXy?(fTAPTpZ>ziY3( z+Ftv4#Ln*mQEzbpc+%G=g6;z(2+!Fnp2m+i6W)A0&8f$U_c>L?j}H9$OMIRR07a}n z(tsOpQ&IxWqe++Wl`J5iq1V9{kf?Kj-x(j51~8+#2jRzlN*JIC0M11%Jj}VRYcd%W zh##^WfJ>pFzzM@(KILiSpXY@VKh6s;j|r4Ub@2U)?F8V^8G33eAJ1GO=Z)*Xj+S{^ z`f+_;+$F@qMJ9q(o_G)m%E2X4Q%uBOhr@C`})Z@k<86%Wce zP|uu5mLr|CAB!so5Ff+eEMmK1mT zwwa&&f>X&a<7wO!O|HbWbOD*&_##49dB6nx79ToiucDay=b01{px_3$HwI$sq%9;I z7{!k6zUo}I=U$CeiQOanZk>41%{WU51Z=z1{f|4qkbfteVqz||=q0WOk@L1k>ww0V zk%-vK|FXS&0B%#7`W8ifY-q1u^oxqpTmu_3gZ2bmFi#M22FvzS8`K@FdF-O=O8IID zdjO{7zcF$A|DokVEdZ?;Khj{I*Tg5s8SsW=HsR`riN}k27x5@Z!lxjd=Nxu_>hJS5 zGp4Mb8(%e~35X3}*DHTg)Z5FH17a#83Xf$Wh}Qvh8|a@D9l&D!6AtO+5d-DM*&0P& zBB7#j-y`dOZ13Dh z*cd)tFo@+h%`sPzMovU&c6G1$BQ;R#iGOe{%_a$G1p0dSK`0UxYJs##fEJ)CaE^`7 zmQlNjENcD+X_GeovonS0cSm;nT_0g`yh~X;wyy)+hh@3d zhW7UK4U)`!X`ZRTJb;o74q2GmmiUV>%|s(YM`5n1*@Xvm5&sWI%-Fj71u@hiH|E0o zb#n91@f>Oz~=vx2KZ7uf)Y;k?jhHT!HK zHPA)Ae++q1sA-KygaIUU@z(u#m*X~vA<{; zp)eMr(RRoZ0F7!N-Rfo|%H zLX1A|sWS`^o*10E)5UotLiSEbmdGdS8VfwH7Q!deKwMdw5N@fF>v7Uc^0onh0A{(i z%pNmSOM|}x4Z1x4A`(4d0#H}`_4|L8q?Xo>CA=0$FolFJOd7MM@T3RtRt!EPRbTc)Z{e#go8T1s3ATl~HLNUObz3c@R9HI^$fTI zkp`jHYZK@kv4qYcz!&Jkt%073Gt)a5De(;|rJkzkmU;j|Z1|{?6KDE~fUCbG4_7!; zdjL<#?D!flTdOOtV&rT{TR=eUZ8oUWhtjRcxL zpaf47qI{bT96vKG!!FQ=dysQ(KTm2wvY+<=LBRSQQ@+|gr<4^!OQSNX4Sn&22az*c zUhA|;c`EJ%1Ug;miz+T$A2-Dby*$k2<_7_RO0SA5jHCgeYi7Uyf?xOwgI~CAw(NWq z&Qj}?pu1gkzFrA~lULJm&d)Tnq>v!LA9Rrm2)pJNe+Rg~{eHnK%u0R9GjzKb8{U7- z&6+JKUg!?-gG9}WQmHMvMCBuKevn^PJL&g*pljMo?`>jh<&;4Ca~HV=&WXH$P!~d+s+0f5s2iZ&LAZ<{4Ubb|&9>a4~QVjQX0=4}prIjDgsl>iNa=Yf5u9|7>%TGsyRglV@1oU9pl#Xn>P&`>_9IS7{ ztgZCPwkC-W2%7T%!XPjud=hZtPA z0H3$_@eizmH^|%CHj~PyMh5($vRS>7>y{RrKwrA~rKI}?Qe+NDN6I+Yet<2n{|IFZ zumZIV*ZwqecbMpXz`OhysT=f6c>IyHY;d)FQdWX!jg)Mb`RDv?0OwMh?S}e+re}{| zo?#bE%?y*WdIH#~iR%N-7DAv_^WjIT%mC}_IcLT$-r*VM1K7Q@hMt*NT#G1sP+b5v zn<|d56+rt!t`1mSgmP(=o&nXe+RO9O%j_rC0V?;cyollE)ojh8h_?Hh~f4K{^@^-)R zaA3*#5?t;AeH7a$6i+t)w_0mbN;5L%iaja%fYxT=R(t7|jYT$CpKPkppSI%iP z`+=d6>Q=JlHf%|r0T#RhDb;8=gktnlgx*8Ptd02j#&uw70!=eRk%GU zAh@0^W*M6*k(RT{E+b~dwy;=i@XG8k-Z#J8g>Y{v+xy$E z*uuZFe6Lmx$6M|Nq$Zzu%-QKGlxMnpEp1Y)c)7AzwghxjJzqv2MFVak#{Gh_Jgt$z zcwHFF+_8!@h|bJ#JAFzy6nTW3thkpG+xf-zvfj!7u}@5fT-MRA2>K9P-Pk(=wK{bA z7o6kyC1o+djVWsVZn1K3FRirW?uT}{k}|~QQzqI2%<39GVpXM4Ma4l!Kr{EIZgRc? z=)!-o`GsP;ADSy`?~95p-i=oL=H;#+_Jl|?hP(-vwT{H}alh>+(Co*9@IWUcWFSR- zKd7%`Nprt1=Yghw5BKLKz;0Fx9TPTrn5|Z#<*p56vhF~;0cYef=RukLkR!QMe;i^u z$9JO0L%qnxC*nKZIDk`n?m+G9;^CcE!X5NNMixHx=Fo-X%PW^G)Ppqqvd>PH7TaI6K@bhSx7O_u$7-<2Uw{X1moW-@z#PyHN9tht)q z)#71_fpCqFd}4R=?R4p%_f6~!Y_!}iDk3|^RHh1k%;K+P>N~Ud5hZ|dVreqVCz~xz z2c|paYKytFGR)pQ^RFK-Rr;N^eI_BQz~YcKQ0E`lL!>tX=DXe1(C~P_!lcthX!_gR zW$HhF+`_>9k15*$KH3Xxz zg4_QKApcU}xZ`q3V@F|xSV8HL!Uj&0!jdx<3eRnwO~y+xKO4T;`Yb;K$;YJamBm2k z#`y!l@ruV~0|C!H472k`yX|@!MH)Vb^dfBo#b4{R$AtWiZXSgEf1aTM=Zp247iS_+ z6y#I>5Y*XJ=}&6$Ghqn>rem;I&Bz=BalVvgOW4mcU+FW;$6}Wt+~PAeXIz@YE2z6b zC-?l7X+A$z5l($bX!c&(sq9})?*%IRdCyX26e)*Ae{rf2F?l73l!xI{0UygJm6h%b z@j6>ma^7_&3@avjj|YHO#B?PtQ%X7Yf2tYKDSfm}o@=pek%{Azf3w)XUi{xT5x(~V z{^BNrNyeRhPmi3iS~IuMYABB?u4UV2CRo0^Og7(^$B)KAcOF)dU-?XoF)ky@6n|MGr}Nyay1wt5I{&%-DDS~es| z-Z5ueT@yc#j0wvNb%rGQpZ)3pzbaelmwx#dM4v^AOc3aDuMoR&(qD&ITokqHz{wk4 zqM@BgDA2pOOHRQxD~*(}1~vnzOMcZ#4bW4dy)~0|8TAC|H!idLXtqa;6bN-G{GK3M zTKo|cWE4c`?uZt(FhBKEs{w4f9QW0oR2uhTr<_yj${AU7Jf2bKo=jO6bOGAq zHGaSe!>WFLjskQDl-@DDyQWBAA&80Z?@izG@;R<(c#G(MDjmvzUTCx8IscQC0_ZIk z3xUn!B-1+qv&L%(u=~7V`9Y);fcK%x7LWQYzS8V-dC?o97Eqoit=j&p!y_|gqrk|P z6h0*|*{mYsO}NT2!Aclh#6qtif4~F-Cug=<;T?Z6w_C)x9#a@&>ly+o`p<*Y-Z_9~ z_kRzgHNkh=qO~qI+{Hv*e*1$*J5TyohxY&3Uyt^F(~e%Thi$s26%QZ*THe}>ytD}= z6)A;T^rOU>1YUS211)j@ng3^HpSus8&lcUn3mo2q3elw)bek_zYw_nwVt#W&$Q5cu`31Lp$7=wnuipMSqraV(fBJD= z-gn>^ghqM4KR6|?0r1XR?AGg5r?bR*iBfZ?m zZSy5Eg}$mE$-qJBs-=&tjQ=Jya7=R{sl8fuZY^Y7*2iwX-TkuF79gKi|JUEs0i%iS z1AL;pJ4>4WYtQ}^qiOZutpsn20n##{DX@4}Am}JFLe40VNnID;<@+YwO~>gf?91AL zG6^m$WGQ$dn{r)_ct$la)nbQY8h$!6y2)ga| z#_w=}O{At(11wxX#I*3@4(>ls^KYLlxYa+RK`&^7;o)C3x}0UpWlO;HfY>eG@GJ&% zTT)%B4>=~GriBm}Uyr+c)N&=IZrqCd{M@F-_Sebklx&ZS1rF)z4;m93txu)TPtzL9 z^#=kWbEQBod~*M!Le#$RjiE*px!92B2hV<|Tr+1Nt4zvk(6$9Wuf&gpXOGefUPk8= zA{6X5ZP!C87&Ferj$dD;(*X|x_v%`twqQ^b_F~gmD$DJ(#s?2v3u;d@#n)Sm2D-%} zWb8|C8(hqnFFDz3AEuNhCwlN9(e>KE!N)2_{d-N@_jf)yoiL&4dO^-&+LBjuw^DMd z^_}2MTg5}!R6kXcF*slYIfx6+uAvOmG6^4Yxe6d#zwJQeei9Bx}=%SQ>r3-6OrAkg_B^egk3={?>ix> zI%l?bX+(^QQeV11*Fu+uQ@2CbCMh8cO})B)f1IAtsdkmZ)y3IkII6ZJWyFBwS>bkF zC5LU~^*`D~MuRuoq{kG`qPDla^f&@kdEwtS6tkfLlr{~TaG#vD?cs8*GW^yXg0X9L zU=qZhQzb@8hzI|vt%_R^XIaF!h;NUvZ2GF?82$FHDqKNw zmNnC@!yMmV5pB8XRbsLMYULf(OxJE=o_K#f>J2g$MV;$oUKklC!{*)?u_Lwehj{6? zA}w2r3s7APghw$t9R*Vt8fSffHAB>90|q`&OJ8+?FIF37hltg=e%4EzVWofL%ifmi z`z__rKnb44M}I#CU!SxRa>p-C7AA46xy_^xvJRfQX?JKH0Q9tv-y zWYeOX;M=IJH*+L9i9>zEVs5f*GqGZneaTp3^L~*WT6kpqFi&iZen*`mbv{QKb^lmq zjK^~J>9rHy<%wC50d35IecABZD&3c9UCkcfvf7E*G)iE9p0)WdHfwu3 zg}zQk=y5PvmjjyMG!Wk=vhym6y{}k!vnIKzD*VjmWPt@Uq4vDKIKyq$cUk-u14wIY zO4T7hhxG8aVjM|xA6%j(OL`mQ(BGozH;;#YE+TR0Y`>?3&aWaur4O$lS5TX6G#_Qb zZL-&T5AYr*`K(3aNwB%kqM<83C_gG{laEe8WU(hE8qw$Juj>Z*mmOs0myf~r(Sus# zH9nuBUBKpb7#r;ZVQ-p`)VtK(i2_w{M4Hr7?D(i9fQC(xGPf`pRm( z`anLtixfK7bw86olfCK+ljXF+L-yyZsyC`m7EFEeo?F-E{Io0l&{FvLyTGsK(>H~~ z)!M?Tm4yX<(&^WPYo9bknpA$vM-asMBI&Ft%mXEGdJ}xn`~ZIYH408md00HXy~3Bd zW@B;;MR3O_85Ofm39#pF6X;vrElV1~cPUg2YIGlJiB6xF-b$jOx*+gb8~Q7^mbjR< z;;zRyIT-nNzZO{%Xibgq9+7W)=(zU|lCfz5;27f!&)cZgmVm-Ym6~v4$)reK>x;{6 z!Z0y0eU8n_@bxPeA!xTwhs2%z!{vJA!1IjXVv7x0OGWe9?74$fl`@-i0W$OU!6O%XfyE4Y=a6{&k{B-?iC-UYq7%An z4bhOLk|NYvUv@KGRWti#JRfb=YTTpEp?~`F)&m5L4u_Z8Qx_C)=Rrf`;~hBy-=0|h z*iBn?^r5-JEvh2@v#&`J`;vU{cJQ?&F5~T*5S&!Y^L{E-9X3B7K*!@7@Iw0RdA_PD zQat#p0xHTiz>?f`P+d#iQ8tGwTi5%3Y@v4zbAi z*c(;iY{Lq91ZFK8AIBUqKYOa^w3J0pwpG zXZ=)6U^$$g0{v}7+W>cbq#Z@EgVRn7JE>F}z5Bzgq4>+l>OjbJ?fR-&!vX=m1Xq&; zyPD|HIoR{0_?AjUT0BpHq>8v7@4n7LX4Zds@?r2&XEA(rTO(0wzFKotv~V51d9HeX$S(%hOYr`(6i+P5MKKjUCB#_aPb7yt+<3vEp7c!mv=Rs zRYdARlR@BmR_2h<%=RsFcI&YDf-|*D10^rUj}hD8t1x=s7#2pO-=WaP$>%Z+ga@Bo zzk_Cvnvv3ObEHO>1R7kAY78khqyczV2eX%fgImQjGrD2Q42@pzF18QF^BHpZS(`|y zKan=l+Kj}6Og~O{jMLo=C^%6B%yQXr+KSQ{-&QOD{Q4Dx2aktbzPs6DWJg1NB6!Eo zN@&~Je??|0r43?NU61Ky4}LQax|J~ZPDRE|Mlbt8uW&Bf`1+wpla$!JT33vEU?6~C z6Q&%4qr7&m1Z0LM=VYtM^J}b3sLkaXiBA&Os^6cmA1QiRB%9e%Yn-UwQj0Js(h>oT z&OyLTke4Xx@b7BLIfi49PV+is4}a0P^i@>5KUQ9{Jb3tlN~Ph;lYX#DivQ&8sx}e( z2Zz1KUv>IAWS*=!S@3-%hSpX3r7O6>ZBn>EAln1f-*((NZJPzY+#kM~L_o>g^}A|? zlxKw!Iynl_zSJ*?vkB(IBt6l>XRk!aangJY@1oetFoE7NKo`2gG2Yx9%nxmw2Y;W* zrQf<7NDJ>itvi_49%P$rcKIO~x5MlOQXDpQu6b*9ehs@ogwL$yLrgy>@vTGM&+SU+ z`i|QRI%Dk=f%qz}F?=EiLFyCEo)o8{@kza!X6(7m7&b!@WKy~yrV&qd{3Vb(yg10$ zeOUhFn=*$f>f7^0#?kNVkVIOqRwnp%&eceR}kTmTaW8=);+a_Wgb|u!~?73Bt z@{dci^}Zp&E0pcmTnR#NF3YWcUz|znv9j-0{Gh{)9d*gxD8R^b{5cng*H`I-wT3sM zN*_8wSx4FjA-Li#h@B^>75d-8Er07{+2G@nO3tn)meNgo^{gI!u#4*TekU`x9wQYa zxZ^&wY|F6xF~WfN0Djlj=7RT$AG&Z;W?sR8r~v8Tu9Z>*y_owe?8sW?(O6F?O2>6% z!QqYdeG%(pBCfFLtdW=-n)He<5J{ErR+@n-w$esuAl&8`H=L%BBLrw&*RvI_^H?Mb;lmW}sI2 zp+?D;2R2IDAZ%otNJ!EFJk82ju{H(2($S}tmG=OR0A%#y^KqWApGHF;*q?2TSa0#|N8grPylw#gDi_q;9IN8^c))=te(1dBBbM-yU zLOw>9@66l1{>p*VKYY>TaljP)Lh5@fRd4r!CYC*OBxhL5K`~KnBKa*Vmx0LZ9%^+_ zBTj1VtD3oIl6^;IvcB)#pC&}gL}TzoM**xHjr zN59+penbfM6(t&7gxcVl`vU{MJRMy{R2n=^8#4VFxCqX7q)i3_AsGKr4e zr5gZx2>n>Nt9AMl`<{`UmfsJt=UpQg!N0f|N24jKl-ItWTo5_SrK4i>G^tOs?LWMM zZEolb(SNHkF!BKiaOzzzxC(m-=vgtf2EX}cj4xzc$C$Z`1x4F4_XabrIc*N5w+3%d zmTbB=UdiM7;S;@|0Fl+Nbx8-(mj(Owjlsp@!(BtV-{l~4*bq+O(D1?6Z`Kg-*;1ed zLGu=oGBmPw2%G$W7oX#wI}KESboC5luCvr76d5(Dcn(g7!6obtHu`QNDM(^Vlo*Mf zS1t5zgk+n{t$!v-|5BWxMnkR|RCyOONQou;b{qKP<5nPK_&r`@C1rc94hYsV~}4xj$DAxwZx9N2D$U4E5< z__~6aG25uH<97d#v=hj{>TCTcMRqJbFx}Ylk!lm#NaH9dY~`b;qjWucCGhIc1l7+J ztbY!GpSC-V6RW0+bk)H5#ojIb@2~6L_)sC*pQ|+vaG}GSiuo;s29|LcH60%(#a_;a z%UIfiRFOMrSkzmHp_=Z9clq~j5lSN z0(Wc-loLxtt+CQJ_mDOsi|&rbE3N%ZtNx!1)5{^m)(pqu_G;|r*RAMp#PJQnA~+Po z_rpfXxVnmHOqXps+T##wa9u{&0O-TgPp|ePY5p(zpc9*&u^UwJdJwWCIQm9rcRd&g zBRx>dbC_`$;c@8l_M>%q(&kD4erq(lkv6nKLea<+xLIRsKa-j<#!4M6y*wCNjZzDj zg^2z?n3>Q$I|=qV4SE+Uh%ymOpWlj>nPlYI0UE1|ETfE!4@p}O2JCPF1-Y_F_S$|M zfZCF@hf}TS*eP6vub%x(PDm0x>&kHLiU0d1t#$?7f!2LwU-=Q>KcamlzzK_v+3QJ7 zr1g6!DE`>>ftqgE6w!oy@L@kqeE&7|BG*>s}NU#f$YXFbh)iBJJ3# zLz5!jl2wiZ2OSJ<+6=p2{Ow&m5MLdI$h_p4=VHVY*Tc0r0J{QwTFZY2p8x{qeG*sl zn1KJDc>kx-IVT+e}8T(;m#e7hL~G9I+vi%J7I07v*S5B<4dfzO{vXc$r#=D#VENDo`r)O+9^MAP zNq0V@oHJSsJKm}(*U0!H=IihQ7GvPyxdSV?e_w}`b8ZrEp6v&LBz`ES#OhA;1pG~F z@=q;%BWzvC@m;TXM(2KCeCV`LJZR$jUxDw=gQHGARlRy-h^a#BU#o%r@>dkQ^B2G} z$;Rs%g8rumFF!KMOFK$cE9WM={Ao(K2o&aihlxr4XKm*{r1&gy_s$++`t(CELyv8q z6#=Qtjt{wchMfVB27K1;K{;<;=vVxkJ^}(zKWDth<1zISurJ??oyVy9@I8ys4p8%g z(?&>$PAhvDxmzdJ`HRfzas=e?1b1jTd9vIKMjZ3Os0C0y#fGkSyI|)UqY18j1u5X5 zl7=mA1ZtZq3ZJGW*ELUvYE&XPz=59^ldQnd^M0N^(7A``H*XP>1tufu;AFof~f;*C!*rwh^(wyI{}NpM)MkHan#6 zR_Yiv@_QiUBY&{?lOLCBO>FP`dzY>W+cO!)c}dG%EFKsrAP7c|J0xl{-S$ah{d#!9 za&)T!tzE)>;}rQBpH72a9P^QW=qe%U zb9TL3rs6{aiO}Y_c;%JKlN;)-<=4g{i0Vzo$)sl%K{Xd5)Fi$Ja$V1J4EHyji*?c) z-s0w7SeJ6{zy3gmd94^5@U;e*yEHKO_$OY`D0E1b|7#lOjV9U0b(fG!*}0pKfTLWA ztDhbh+o)ihIl%VXj)l7w5!g@VP{zJLmj!+tXc(iy5Ha?S`kf=8<%X$8%n#r$3{tz zXMH_iU&nQ|xa_!rH@r|j*VqMxJG$8ACxgXP&i(C>)MaL!WA2m#DN%HDA-)Slk{~|3 zQh4>ud`u``WR>{N{9d~akpi>zI;;ooQQ^? zob&Ix&TIQh8c6SL?vB4BX&jb*o3U~-TPZvMtOcse4ai`?kC=3@sUMx+%0fgUX8YdsWNc3~ETDUr>>C38S3{4%!W;AO z9h)jV(W!?=RaF{kegB-5QO6Mev%Jf<-?Wb&*)-GiVNWt&49s$fDIjzM6QZ}Ql-Q3< zM0!oXIekYwh@$J|xTZ84TP5nY7J5WdM~apez2jhmzrgZ+XpdTJ8j}4l%-6r^xa89U z5n!)e%~0NY?K6^8Fr~5NwWJh8)8@-voTXHXG&#uK61%f9JG&T*A9`iYR6&y9@`x2>xuuZZkioe?XKKjJau?rBk+FScIKN7qaer6 zKgEL4voG$kO#d7oqn?4lGWF`lM?%B-b-yTt$Ag?qUVtyjylE3#<|5UkNYxrdB1H8955u<>rw(3-@x1$!Pg zTD1G=DeRT}z6b6NsBw8KQ|qKpD^|1ga(tqwXl8G)x{6eiaLaLt3y(g81BN0uap1yM z8TKOW2}Gq%?*f_I30j=tt>)UK5d$bvIkr{>4jwFAtvG-(!XUw_(so#z>p|n2%_8qe zRZYHu`aQh`*2jAe`AKd znE{fI>fRS@w*{WUnr%>%KfAu7CGm=rGJ}8v7qGaoVZOy)Odh+y9boxPlGrZu=ox2g zl_$)znQl;{g_ta|thH8}bKea1i{%sI+7i)C0V;6h%8P4nxtaJTOVVrqC{y^JE5%m3R%zcU@7LF7ORy>C%K1sd37mf=VW&)d^K#M6uq3`;)W>q(7~V zpVZ0ON?OpKCG#L(d|EsJufVbL1aG3)kt=x%$XZQT>*+TNK&0E0?6^wJqfSoMi&DmK zyYNF0+faJ}cdMCiumP&1JoqTjp7v+GM&i~hkGFBFU@H`Mo%{vr^x2g#jG$@+w`UST))erT?A*$aw&36%pKa37?2!W)HVP1J!1>yZ#tygvxG{{Hn&e5UO*_E z^RP2(>F!dU)((e#Yb?V09xfmv2W$M53_2ZSmQ^fZy1ThgGbpVFE`-!@;k*O%a!<-I&Yv2+4-t*aTP3|UIyQ#?)cD#mf*y7) z6RRw({s6;K+U{iSM1@{w?0tJ1fr^ynptX-vZWL`Pqi$ud9!w;Epo?<)^FyDKscMQ@ zMWDfn`*6Fm8u$K@$1m*b2e*`)6rsF6^S7f@?3_z$1jQojv}#}-{#xCMj@OA9Vs0=t z=3+HFf2qPmWJ-Hio~#Sv6`BAuDCnxd4Dsf;%j;W>Plc&1xnGYPFtNj`50(u)F(K;% zNqt=5pl2c^Z_VB`ZO~uZ=LQ(=`L0(vYWZ2!nkJpH!X1~X^MYi}?q*#veexA`k^&~X zyE(Mzlh0S<_ARw&4_18mOe-ZrWZfbsp%FmadRkRCf=opFWFtM1+r=wex3FejO^MD{ zPSaL&9LY+bLf|jw?;8m{%Giso=!j3HQPZu>Uy`ij{0?4DwYqVv&hxZv@FJ+VkFO*D zqfBjJUNZ9X;EG$O07fT{S^b?oUP42SeS}P{6N-X;lH|I$p6^MrUTXH;b0;*@37ao| zKwx@0+^v6FU#7jnl| zxDQZ#_U~@V249#0T-6`gHe3;Vb0$S@>Dlh<_gTJJW1AMa^zx{214I*w%aY2ovFzsP zR5Km-&GFGL3?(!3z>|fDG|`TigUSnJi)MNXnN*aBOe*B&s9sbQD@qZ*P&-suj1)SK zy>rDK)jGI|^FYd6Y&Lpv1J!J2(rB4l&BtexxRnXUR}L(uY?WCz2~01gG(+5KI3@|& zabvMBTikCHyEY^nSKlJH5uN;5SUwS!jLJ@k2W_ca zwLB@!c(v-DPidqgg@Pr6N80*C&`_nKDk{(w*SQduLT5A;_w5iu)_aNJxYw z$}$Mcen&Kv2RmMWyxAym>Rue6^|26Sqae;cUz#M0tbJvnxYZB=zOdk`-|`;sz6ZUv z*6YYq2b|AIx{(EO@n3nR#tBQcg#nngAL?#>T&4EznJ?i|cKA)}Ypb~6rG}YhLvu6g zi`OHYUxVf$9L9OGcC4Xz3DU6H+CTJt(;=%WtRL-eRKRX*Z&_8&75*XXf-=x@Q#d|x zB}7xxWEoQ4?%hM2geEs{2El?hZ%xi2RgnQ#A6SEZ_Vb%|>1fXgRvMb5`5a9Q$d@Gk zA^qH$6eP9bG`(YM8jFbLbi_krr7Qgvm4h{cp_#WvbWD`1r56O&tRBVaXX2DqQQ#2* zpy9UFtTmUeS2In2F_hG}nRxeO5z!tNEqWhyZh2b*e4q<5NlQ1=(V4A*A0J_pM><|# z$ylSt`=FB{DVCflyc5E!J=?5y4)Ak|vm`s4)`E3E)rUotwIK5?F%q-cx(|BW2(jQX zU&SLi~cp`PC$i96%MtC=FV!YsN`8 zzH^KaZ8n%DtIJBeP8T^wK&VXx795-Mo#<=U)`&YdwpAz<9G^~);WP6@@T#Yg#Mg*E zNd!ld{xmrVag9sGCF~rfc^?oz5ePLQ0hPuvi3#tP>UUp{#M`UMiS*Wt1nX?Rr@ac~ z`LJjb6zYM+yPKUdSM;N=-NoYShAN8Zc-{^Y`b7~}%TW5rg)f%Th3NT*+tD3`$-0xuhp}A<3q?Y*V6WI{yrWwZQ)^#tMIyP4u=`b| z^QwJ6=I&0oTH@E(PAOOhLivv^1Bzdfhh}a|sY&DJH3qA3Yswqs#bd~YN!P+e6#3F0 zqBNhH5KS+dayudXt*hNl0qI+aeso$S80ax9wBVR&=|UuNtaT9$NI~AAnWAVTe^Sslg8h7uXzcGj zOVVmyKpfM9m$W@vy*Xw(oqI#I0yLOQtf)QBmP30~G4?gvT<0VbfCkCkpuA7M1yPmltsm2Jvfz%-GI7j32(Y9ElJI=1`v0TIjzpT+Lwbn4XfwoR zh)rRwJ;p^h5WKy90$f-?IA6USZy8$S15j=}4780)%IQZl(WdcE@h}zXxRW# zm7LeJv=6bJ!H=@yc}-$s^R4K~{d1gnt8yiRWuJ zPz0UTt8&&2SCxfp@!CeuQAS+k9vCL~=3OWP9{}SSW7(HWiCgX8AP-bXcy>dMH39)LhB5^&f zr4f*oeoTpl)XhZqjVtc`NiSOZTS}#=&xWrftmw@MnHnSPdW#z@-R91m`js;J^**-| z!WV3l&T4IBQL1TZOCgI@-Vf=dkkT;Koc9K6O-WN^pV*~?zTDmh(>f_B;ms!`eZVP} zS>Wxj2gLPjUMHn=TsWt{{w|G_*B+Z=pdl;$1QOAkfxQCN!Bt7EV`U6WP{^Riux0o1 z9Z^B-Y$maD%GgL2Yjl9J;pgd$l}(_sLMak)wjUr6N;f0ap8$o;cwZPz`0=LtSL{*) zBlaoYN)CYov1mKT12$x^17eF6gD4C*Vv}vASmZJ6?^>`#EVfFXz=+b~0r%k210BK@ zA9}8DeD?R$dZ|~&2b}nkZ=y@>$6ZVeK4U}yK1cuB`CFuh0zhWv%L5Y1*{!zNUQZpn zl7W{RX^5XC~_F1n&^-rm}dv`V`XcTQ0##zFv`$s5=!Er^ME#&-uG~jvO zBnJEcWyyS`Zn;j&*L|iOqAhEmFS_^5xZ8=A862haTsK^)P&E5!_!BlBl*63Y(+^NP zYiQ|_%5ud{Go!-|f~_jhx!aup8uB%bYCBH%6)iu-(TJxz5G-aKOX=L?uK&|NkkNx9Qsr{vMbD}}&Jg%O>|4`Su-)NHplFz=@Mu3!=Cn~Ph$Ewa=-Wp+H>D$QygD)Es-=t{ znvYH1q<*L<5~c7P=MfvNwg+t|6Sww}I7DRs+Roh#&kB-KtlYHxeGay~$zU#q1-tWK zOgK9(3dUXJHXJ@pq)Q?n?!lBf8@(Mvn>mL=ko$+bvJ81?M7+(=GO=_Nk!=QX&otw^ zE{b-CIe{lf^nJhymUbT-zWEH7qOy#W8BPTZI2CZfiD~(<#@cs)tPvcf=W}TgyD}r^ ztf1(Wy)?m*R5N-gez^QMYtjaDgZ z%X8B;KJ7tiuaz21m7TXUs!Sq<5?3|lKF~exqaSB!vRqq|l9HlZS*I{%2{btSOLh#E zNsp_S;EzLY_%L+lZUr54on7$l4kKICFw1u`4_qfjj#lnb1$}AthE(mcK2}hB!O-HmtOudYuX9YsG`U z+uH9XzA0>_rk^;MG&Hj~+D~UddI2+Xz5p}-d|A3LDN(4_1>#cXxt3)UQ5|6lHKNM(!qQ;OkW7Wb*fakUW|ry1@MJKk#0>$QJ#x0TaEb>h~S<>{JtmweKCvod=St}qysJvwyvJ0zq7-1DcJ&2^NXha~L7gefKIhEt&Fq_Hn;MPD zP~7B2TaBD>epq2~ZmHcqhoG$vZcw#bIO!0aZ^B#CnUr@;z%0vn%bvL+#+Xo>aki7w zaY;@Rt=Kz9O18|}PHU4XK4YGmgh1a&Mv{Z(pjnm}a&y&6VrNfDMa>I?@jEU&IdRZ7 z1ufl;HifM**@6}qg5HK08gi_r`K1P!;>$cwuXzvl0_q34kFVwtk~dW>c&A&e<7#Z2 zUAo_9+tdmi=CK-tLQKF*n_x8`AQF>zR0kiJKY{? zeU&cvA4^zAM-;g)Ve7G1YnE5tFW)a*ZvUL4U9E8PF1Xh6oxE8d1nF)yvXxfq_d;$37Si@%cmlQs?mx<`X56rE*mQ zDa^71*8>HuiY(Y%j5-XVfr6$}d5)fyAsj<9jr!i<5Umh#Gce zLX=KGF-IXnkRBj_au5qeB!D7KT0lwwshSXMAVCSeLr{sK8c7H(1il68ecv7L-SOTS z?;GD=cmI=-z4zLC?zvZ)Yp&m%8`g%x&%l_!-xxtZDGO^|i?Gl&={Qc;g*eIM-FucR z<0n@#Y-EP(*{yOIZTR^H*x(_r1p0)QS?P;`P;a?TdB+?Vc8yNF%;0Jf`jTE><@qjO zrRE8CevfppSm%_}!lrQ~hH(1KnPNMYORzQFXBc?bUVTP~-Un98x9Eye0yMo$kc5-Z z5g*{1C3xu11<%xie3XeGl{pRXx5uwA{JI9LNygkK=Ivi!|4>U96V}lNCW0*$teZy? z?}XQE;k=smMb{p)dL!d_bNYdj@yM2M5Bk9*r}4(5bWxDs1Yc2*$^3-GEo&++Z-X5< zW-le~UK9Wsp>@L5ta{%SXd^hnPEn$YAyPjw(R)4fi)haeZU06Qi(VFO29f;fZuSS$NfZ$LI zAeR+I8Ry=2x}bcv=d`BHs1Qg5Qyy>aF4UynJkIqlQE+-dK8!PF6ei65Bf9h;p7i=6K0ham)BOWcl`$k4j{MZSZd8729>sRbY z`L6pQ5#7edY1G~EpGd6#8Z3g;X?(bU8StsU$QSW}pMZ$l&R_gX4Y}$q1ahd+)bP}W zA1sXWrOoAikRt9D^tVmUXkzo7fO|&*WalT5WmR=qW#Wt*xcH`2S`U7KM*jgxZXWn= zS(vhx|9}=ZO8`jb%8{fr$p7eo+taI(y1KtOvL6dCAf9PVSlHA1(|#UjmH(vCV^8BETeiCE>KCRrw-;Fhg!O2ZBZ26QP4UhIjvyEXRue(2c7&D>=*O4I-4l-BaNaT=q*5 z*RZ)Fo^$@~uHnnHEPjz1ca)h@n;u>g;t7>v z?#kfJ5YU&VlNw#9snrW$e6yA;nlX`0s9V2Br}}!sM=1{gyhfW}4L--+u9u>Xqkb~ZN+?+` zYIi5YJj_A}=NM1vy>HRqr!P;Tv)7}|I|HgyE6z@)hwL*R|I@6PzI3A~uCxCB>|Ahh z=`MXbT$zS@ky&lkHY7i5hfj*{VBPiQL0+Rq1MMjrNQ_PF>N}mm7#zR7)M%0sn6|+hP{FS`|*C zr|d^Slo>G3jEYgF>jJ5jwH0R{IpQz4dK!0sY)9Jp4~up+tv|0hJh55?<*=U14ms1k zF3yg2%k%muZ@kgQvI!UW(F45(1{uKt>1-5WtYmm^35JFFMGMq2P5p_oTZ6Xdd(;^-HOBsG=jtlXLY%2TOUw++KrG~p-p ztRi?JKIUZ2{crKH))&Vf` zjnYi9<)s_w$H*_%)qf^RXYQfvDx}sRu)VByQitt3WM9Y|nV(PWz4Y?+-l@G;$(H^L z0lz`DbI$YYncD@iyk1&w8FzwqL^&lhx0e6jedY$ax8Z9XV) zHRMB=#eq6GjF%gzhf3|-0S;faQ2}!;%fdKiabO0CC36A{J+8nJ5ygSAuUOsG+!YDB zc+{dkI|PB)J^Q?;Z;y)Ig3i4algtG2BQ}l9wWwFdif~m*yb|1n=8Vc6>&X>asU9C+ zI3RO%C5=*2$zzjM50ZQQsu7vWP8XOrs&Zv0`J7!#yJW>Q3 z6@A1RD-f40WJwO~9XKSvG-lkqyTH=-4tbI$m++DQ1o4YJ)zm&^q;;sZSp2tS-sirJ z$vZ$wow}n_u(uf1CvN^UOw~9y%~rCA;EH;jx}u^a#gULoc*QX%uHkA-24^(beX2vs zqcJ_&$cz}@$`{Tvx$DuT%Nl*f%}((~U&m^PR~h)G)d^{LE8!$Y zSCp^=RuwN~&%4=ah!CX8;xP$2ZKd;2NFgy)IT%L}S6niD$ag_+Y92|=?B%~qtUOyE zOba{K*=inDb+%ZRKN4OxGZJ!CGCO&)wFPv1-WlJXOzoL~LlKGDfs$-aJ#)(9U`kS) zH}KMNODhF0iuN$V=;?Cm3N0n7mgz4=!Fpz6A_n?p%V9(`aR6x z`H2BtLxm+0vKA8Vh%A5d(qRYf8ukqoN>#}I4Lax&7!6K^b(m!M1YkoyMLlIo_>iS) z*nDPWh0ZBdpQwSwK8oGBiwf(*gw>2duyQfRWH|~@iZu?XA==2IN9cxJ992H9QwVbN{2SLgbnl5O#qYT zwEf%sSWI^opq!B&S`@taJcxTJuKK;lDXcRmMx|UfeQ{fXD4#Wy z_)dlx-+T`gXMy*Zwru`>^Y(!g4If%U4F`|D`b6I!z5rl~_8RH|tz6EPNh6 z$#Q3fg*E24B>SPmY1#acNT+cU@8`v{7^d;!Rj)p~i(9Sej$CY-67yjZw={91K8=y^ zIqf;vcyq95l&mNHIFy^=SKIg2Z?CsUc%w}kd+Z)nQCMiekPP z@24aucC52f6ogP5dlVFFvij(m4m0t`YpSOoM(z!RaV!Tlpp$AO8haMbz<{h$j z4=&c@X-D=eB!v2Vt4m*m)9OJOPbx^z0fF@Ikc7B$*k0S)e(%&WoeH2Bt${PfK;J&fSJUzT=lL z)*WBCDT+iC%Hq&e_$;?bi8aOEXtc%>QJG>13X~KzydoF7_F$0`LO;dTrC!y(WChyn z(6qf_fV(Fg&cKvtRC=#`w%5+|6Gbiz?xPetKTuwt&XuLqONJKD{?^;c5CX0B`dj`Z zr8_GHPk2stCnn4iTN2?oXWl#ga4~;2-x2u1{8n<_t2-)&axM$sG$kK&lVO?WM)efm z^Ek{^w494WnXgX)!Tn^?pFr1k4UhACan?EvDMRckw74D9aA85}u$dGqt&8edOnqt} z@&_WTGVqU(;nuSED<^d_`^)AJNZgN?>nw_uN1AdJyOLLRfhl0Spe39Lp3lO8PW%>E z@?=z4wsLDxN!(Pm!uE{ynSN|rYcj1zY;g+`n9LyR=bp-{ta@R)`;_AJh$kXOZ+f*g zed9R@;t)A3sZ&18prCNai7=n+^O@DUd#mv=@5#9!Z$^fccbJqEtj(cep$wSY5 zRS#@|GsqvV8&C~Qis)Ync!g_ZWuN<{+NQHNv5A@ z*5TFR$-wU$Xf%GY!L(?#n{XNt4{$VNFB{#?e>{!~cjTEJf{5L)ZKCmxVl+fq&lfd3 zvwxo88)~bZAE&+|)-Sp_hz1dohPMYaJ`ak%8}vRjNeZSz8?+i|p&WL)vmM52H^{g9 zDu?!XY1Q4$>~1U-w?{lZW#RR``3i6hS+z=Ef8LIPEnbc|V|l_|Q%7JA7SI>W&d%!GKK^vlVJPc{oDgtx(_ zFP6q73k4j%reC^X1nOte#e{$v*r0rdxx|^gDa99g%KW>kvH(zqHQ6`{smFyN35*8H?Fv7|)lXK|Yz; zC2Gh6@j?1WC~=NEP)|)344Xd>|9i#c1$`Q>N6!ocV~2CNA}qa&;Um=+(4uTR`kZV7VJF z2-NxI4l8$`n~aoWT+pV4=aepRmUS;fMMJ*NgxxCzyDJt^+(vwvNIr~2+_28Mj;rC-r*&2TV{ z!a;ZBk*eEs@I|l*6t%37+qm|gpiC15lZ;3w;41{3CMeXFEO4y4T_!R_Kt+o60*llF zAy+?UbQ_2Hv+WY)A3yx|?Zm3i~u7)?SzwHiOleWJe5u6^`^Z)fv z`5qPGeCK8W)OIehpg#c^XJfxlDDc!(l@8uk8anBwFl-Gvt-xE`gn@86D`pU7ui~0Z ztqVK*w+CGSyE5EvfjM_}e8cWY^Py*6{gp)Cn%5Hhz;ssTksBykn2Y~yth2^btmZl+ zved@}oZP=n+8#XW)c=#)%)tF$Q`Z)1v)0y|#8BxvMTBb}5P&I`>Y*YG}9^ z-w?7m>_-{Fg|<44`huX*tk3K|SAE(v$EHwmGZbqUPs^3$PIyq|&y44;lfajlakE4o zlk2eg!mz{>Cwq&~lS}^TWJ+r(>nSUT1>A4S3g0NH6AEb8KbhwhCl%6%?55Ze!|%iG zuugQX%v_Rd@Tce&x{#I{-s;9jlOda8%AbP@czsX(dHVr)&o$R)s7#Y8#Ir0I!ktt( z8{53^XtGp|QRr|dxwy}`UN&f8=k&T?b4g>`%BGqHSZ(u2JaM5rvfvM}XwwmS#C%W3 zba(NYEIrB@&h!qS?qwBzK15*&ktYVnnByXn4#Ak6EJwOdP7p}c*ZAUdCLzGp6q7B7 z*~%_*G-fA8)>)p=%;daK+2)=GL+_ZK|t@}>9F1_uU}i3?@|r%JcZ%6Y|{ zUN(Gb*M+3y%+5EPrP{}KUQVJXMU&ymTehUOXMy~Okh<~-L*yKrt_8NW+D+0 zac&R93^z}MN;dL!K(;>XVqND3c>?AG!)gzqsfd8;V z{XW%fkSJ#8K4&fkb2NX^f7I?gbdZF?TYQM0QDCp=x3y+%#ELz>zI&v#l!SQ_AGKA^ zSpjbaze=>kdfgJXu3UH~9wV0!I|Xy#uV(bSI`HqS4ty%k!OmWt!4125Ous9v^jh@2 zI_tx*z%~x996tc07x^l2Em~*fC}YXw+A*7kq_Xty=VgfF5)sjSW=CnTz_sVE;^_IW z%u@J%OgEEI;q!tGPP0T`%2z-8EVdGMAt@5QvNZes&1?{H6x`sv6L*vZ7Ag z_8q#Ogrt$FRb;u1Iem|WXx03+^SdYaL3c6l-jhSK`S$*(4IVVw9_iAXF5h2`V8Qgj zt)xy+q4%4@@(Cm4pVGmuuk^R7zQA`+uh)$lqBhq4rb(4n0oYZ7m8qb3Tp!NXMY-9s zG-Qfha*jS!5cav;nczEGRyAlPC(>u`q-2af>3q9_2CL|>r1fOi=Cia^&EYTa=}<;7L) zDb45(On#|wZrBjkN@v+{soRfF{B9p^R0ef8BPai&3HPHP@x{SP&EcZ8Cii=pzN)2F zJ(s)FSrV%jJTS_EV~(U0&`~iaaU*JQNc{4u@U&;~7 zGHcZ64EPq1bF@>=(GhL=@eN}3OsSXWoRv-T*RLWT&k2sr4AkxJ@G7DR+#CAzuK8oQ zJCH~Dh|b4*!U2_186aqerhRp{)KWO6T~$*>l5mBV;B_x^v;m1;u29^j4;&xmJ4hn6 zu@ed(Tcm;|n^|Hbc4323LqSR^`YA_M zH>TT=CT8f3);kTI>AJTTZ>%CC|1S-|Z|CzkKhd6j-Tk7S?B{u~ZHOO3wjn^RB$|Vv z`Sr^n4_v^6NKKr}9shd( z`+%{095`d_fuRCn3Qk>XYEW!n95{cXgRP&2sMp2_FT<`YKd+J$M) z_g_4iz?|wZd^mcbghxdGwg9AYVRdvwEeC(WGTYK2b`Bc9xX&2WOhx16gk{QX5L&w+ zO#YOIx=f_BZRHS)rX|~b>nc{(K?z{X-m$E)pb(mqx~Z?`ZmVnZ z8H38n$f+#{k2${V1*7nc!9NstwSIq>lk;5A{9n905&UpuWsZ3N71|=fk@x71_qurP z`_`YMPDU*H7NkG8ykS@_tip$Zj7J*wcTFpRPl?gQTtH7GCKL)V%y%nrIMHv)>niHQRC6I6 zFvlfDF4G%!(;=O~rjrONBi}S^# z6Gv63@Xm^rElDegfd*`wOnNnSMwiD#^O@HTqAoY-!850UM<(~F2nj`zx6fCcdtqFX zI7d!xv;iyNnnMV47O|d^h!_a$Z3|t#9qFj!CNS#=@}rmYj-tIM1NvQ5tR$;s)eSm+ zyT|Ow&PjiJjmW7Huaia5a%K5V=7Mb3d_S8^Cf9a)u0!uIUkwbu1B1QNU@D)5wKqk- z#%kFNqJlU=U)0w$smPtEeE-Y#|;o_l3B&hp* z5321UyDINae#*S|fJVOz(kNbGh_{`NN}CyJ1S61GxU2Vp5jz{w6*JdU+-znNU%oXa z|9WEKA9{V%@gxBLAgl1cm74b_vUvJD{f7?2m=|8!G?*$2R7(y#dS3)pa9LRWy&Bd) zO7l%DjNPwa%}fii)N@g&(&|IT+^nuf>VeUGXRyo*glCLP!PlaoVUKoeOZ97G+1nDe zB|>&Ysvny>70Ir0!Nf$LY zhKH}?kE8xDOMa>T+ZEY%AG(pAhfzg5-0*sFUzd5I&u%B2w-ru@(C vA6Y^+{ulq6ME(2E5B2BPR02L8uq$^?vB1NPLNI)cjC_SM!MX3T(LJ#1eq69$&0cnv?5<-bc z00~tcL@7dOk*;8b5Q=n2D8DD5GrsfA`<-)s|9szda$Pea@ygz7uf6sv_qz9U-`G%> zXSc|15D3I`QBT_x1mesFfp*Y$asuCk7_8HQH#R?0T`f@Yhl4cW!!Iu94bFo=CGp&A zS2%#ryKd@P`GG*fJ*@xOgvd=(Akb#+MeXyjAp6Pn&59EUWjY|d-nbWnDedom7FVUkI!OWDc#4I zwC@oShV3}tDWq7`;SLjtx_#g|`DA!+U>&~AW1cn<*j>y>$JZ3NYlwN&^r*PZ^uZT< zT_|Id>%nNFZZl^<%@n^vlLMF`6 zAuWDzL4M8DbIE+!sgfGH`h)XnwI}huZ+MjXnst^ROr5=_psuu~a!0#wGJ?Qp@AmN= z_EvHdzD)q{LwF9?A{$!^-S)R8;xEYIp8~SMYRnZwrLAiZYSd2G%DIQ$*xJ2%(kD9^ z;MWh2h-ePoczb527{5=VO#Z%ZXC)Y1K`nQ81J1dr?UCuC^&ko1@iI(BU{Lw%Ran1M z)Ru|#aLo7u))je3o4v*9&^4n)yVwrN5BS|CU;($K2T5}31O)aj^NYAfWyzNk2_1w{ zo5QM#`sdsGMHR6 zXI$h+|Fo-J7kJfSeCAE1w-uUoDb)Khr}FWb*h2@%OT_7MIZ}9n_A>lL1#W+9Oot?s z7-0aNy4ROs7TXa%UP)nKrp9MguREpRL(s=7Z^8`lH3*k=-25UvY1 znawg3qsJafs7>nkl0{Bpn9VTT`@3~a7OL=S5bZXL&P7Spub3T1#2fGqN=l!Ibm=|& zDgy^p-w@_^6Mre!;Y8o8Q~GvUdjTo;Z8;E4UJP45>3o10+li1Hc6iR;6+xmrmh^I> z9_H2J+?g0oni=^F{36#tnyDHFp%^^mOO(`stLvgn!}l7rMWnqp7nusoiAU%Y!x(B- z=5qRVQRz!?QL&KPR6gq_G9(eDM)rmGUY65m4&()Wbwy_%O@%gU_1C(ZeCB28>cMwi zxjqjtF@eg%FpY{AyGe?g2c-$OoKc(=*{|qxXAtitb)f7c`qpRZrfFAUhUC}xIca_| zac-E`T4MA>*WQK2^4O~|_?5DYn2|>}zOI7XdQeIEP0leUDt9EX#fRaD$+G)#zp{*J z_m-~&Y|7CS{z?ze*{^sr17djRfvYCT>#!vyL{gUES_9{JPBN>2^VoWu!%ebf4NxZJ zSn2iR4q;`+I-FmbnDN3@MSaYTtUXLGA4fbA*k4o~`=S@2AFPr)QFc)JK-n;cnvJli zQ6hR(7&#Q!r%}t@dV!w|H5ehg{rIH?YYcPTneeWjyk?6coAvY7-(auuC(10ljbKGK zCN`ambc9$apk0?dr<%P(d(f}=RYZ{mGiz#MmfCw2S=iY`hvV&=$uHn-Pqdqp zDMdSUiMG~zE<@`qPDnRFp?UbR0{rv+`F#OT#+L=89T0oy%NEc!qu^kur))vr41Up~ zsA>Yiic1U2?^&i~>Ey}f-p`kOT;wt#wfCsCMewSG$Tvf-sbiij!;yOyzi58H?^pig zu$}EQhRyVFbzS(K0~xiRWYvP0Q`Vc9v08mGIuTGif$C~Cb>WHY>KrM1IKi16ZW6kv z)-hk)I8i31&eazecZ}cGe+@3`4R16&-bcY-hcer*t&Rr~LPf1%dS*7w_@%1pvi;Hy z%T+)^P#;2{Ne~4DeEt@5s}Ii>#v`HIOu5flLgySm0ZvRbQ|v$9&C*+zKz5%i>4R$$ zD*NiKn4MrvqRNyN%dn6viF!#ppv17?K{Ea7Q)ql1$1%6i8wz%T3kSRS(M5PYE15G; zW)a0KV|=l^Wtbb7?rmFLH{v0}N+hfwOn0Cutqp z@|ds^brD`vI-wGaIUi9JYLfLFI7Xa`)4+1_1jX&y; zGgV@Om`ny%zMvwZVJNB5sM4tAU){4_3~b5sAqMjr7ch5W$=u;0Q^iOJ#lsm1&U)H9x^Ec^Z3_gOvtq%8fwcoDP-mC0V-=ZM!{G{uIPNwe}>TQ#C{#rY_!>nJGV2v6MUU@;*^rDfJLD zJ&)zdoG9z!ti%A+$g{QQV32mRELe${W%fu>QqT1%w7&@a!T$*OoGUst6HmZrSbJL~ zu&v-1X(eO`bP?S2PQ=t?C$HmM*)TDQ4}UjjpIrpLt`LhViriN#QDB`!nh zFg9?=6upFc{fS<`Q#Os1z1}_J^9aAgd$lZWp7dZTe>#u{2h;7e>m(YYl4J=s@v^enNCKw(NwP(?m;twfKn-W&mRNIS zh=OFtM4558?E>RLrqfoq8UO9O_obe<&UFVlV9t+{tn@{UdmNu15^P=5gJ(EjW^aTy zq>;2N``MPuyUJbH5zOOoXcYcD^CbH>@)@#YEi8jkRQ&1@L)5kFTv{Vm_Rq8|oP!Y9RRb9g|R8O3J( zI2)zk)V-+`PpbvBe5M^c2;^8}vX#(>7$3@kW6m$Zx}|bYk`Mb?-+Ye8Tp-E9*+<~) z6p_ieB%@N-!=b-=X5(LWo)k$WbX)_~PE@)jj0eYZ&h;Np{k5}E^@MdfD~#D#JiC_^ z-&6E^r?Wk;%$fUf2{QIJvO` zNRsE8WpwV_^Qu6Px84M!!k6J>rEH8>cX+vqQXgOT@#R2Ui+hjr8nt4!@`t`>Tcypy zvvYa{3X(b(({B0l>|`oj&&NMKPAbAbG*P^Fi07(>T{PH0kmwKs>Ek=n6?YQ5>xL?b zfOIu|X!=U4S?5j-?yzau4Lg`)=O})mrco>dd729-o4zd!7oq~Nh?19fqO7~`G*&``fogqV9(X4FF9ul&a*deSzEn>o%` z7%)ZnMGJtu6)>Z257})WHT>l)*{^V{X3g5zW>GCBCgNAmQz1Oblq`w^NmSMX{>3c> zaNB+cIgQ$@frV4!L9UEcw@|5j)3O?Q|KcuK9t;Hf-(MsbpSY2gZ$@3ez+`8tiAAwF^3v)g%6Jw&uxp9C46!|%&Bl-yBBdgjI zIs++Xi3R)_+m{I0Gy95F{MA34eagYI7$67f%3HW{kC#>YfbPb&NxcKc2mZ`f%H_Qf z_8gelHGbK+e(q-Vk)KBKvC{{V)uo;*H`j79LSsM$<$D_sFwSrP@@@1HRwi4%cZMst z4VCq&?4B)OcI2Kl=miq^&f$(=*%}3 zI1IcTg?g@}-z|{8B0fSn@@d zWCLS=0+MRbIQxto@V4(W^5{?B{-r+6FC`bEQJ{KD*1V^Ue*x9syiA)pv-Km;9$~cA zLjW9lcxw|-m*d(0LR)`s1u&sdnIuwZB#KqcMjjcJ=l0#o_Uds4v^V?2CV_AJM%DSA zpF8ONv(9ak0XXVe4MOOkhTB-?(RzH*o7ubJ+t49y_R3CH)>!n0d46dAszi|V(JhPH ze6S4*pWZ`1eb$f-bm5i9uUr0L+@ECwz{Xw?ed{KK+HpF7wG-9bUxNM{3a?RFSlM4{ zGyPGcDtsoR^c11abE&BSqSPNi<8o<3HdLWBG8uR@qH3DrYi%EYfCR5*`=+!@_)^|c z_X9_A(mn+t?UTeB<|woSdSUw&5( zTX+{Togo_bjr>577q#s7v|}v#q1-hvruZ7kPBs&&$}p3pLGdneyZjiIMa7V?Pd?kIX-=TV5A_tXNu&| z?6x|mO0+ME(5v=t{^AK?MAaR=)^61>OBSyf8@6A@-hLR@fzTi?GR*Va%7X?sztY-{ z-S$s`#M^*ClYd&v>%4)g%}^+=PtYn z6$4Jm9jW1(&Ck6ag!P5$`QW7_4`<~Y8i7midc~tT@&;Uy)`XrJPq(VR4RFy&oyow4 z>o@enBMpS^{F|W|HiVX*J!x8;WIqgE>=huWiCh-H{RP`LDgfA$YtT#-a6H@lTxLk# zOD$6~>4E1gysK^o++3EtB9~v_y51L8v05lf;b)c@4lMnT$8BP2Y~%(<`_XzXIWyZ- z6{QX>@_QQfFG5@+dhYZe+|t8JnJT}Rk-{^>o$oJE*0m{gn_Ni$2tqfCcKhMlLht}! z+k)OFSR5G>p+>%)6${Z4$qNv^s&3+Z3b(gQs9Q%6eK4;giBf&Hh zdOQSK(B)!NJ?(lrW8Y&mYx6Ya7aD#zGX>v`1CTQ_u8?Y{K+D6{0YtGO@u}gi$|CY7 zjUyLg916@nFKM$++4oQYak14~7F}=%>-eA!jf9WZ z@B+vCwN~b@i?PYIo=bP^uy^ic!Kw3AhO$eSn97U7rqkp9K}a*|nB>-;L_>Ch%)Lb! zS2u{)tP!xo^AH)jh-tx!H(!OE$eQ>yy;%$XsZ6kvyVks_eNA=QP3wHh{-JK4vWUgvGgtX$7% z5UUKlp{5}P;*st%nwlvMu(gjHSo?2_j34{-2Zz*%U z6Xdw~lW%AT?A(8rYr3N-`Su-jmJYLEy=Prr?j;jiSUDBNZ;>=B(KNFKfjG`$_S3SdM5d+0T0aq-)35O7e`y$G+WebAXKY8jzZQkA^S#TD@ z`10LqE*GK4P0?)+D55-hzzOdh^Wg?X&MtGZ;@fLEue!1R2C;G%?@H&bvsU6VP7e3j z?A}|3<^2x>{xHK*Y5Tyfy)Z&IN`pX4AG6*-L5_tII-iBqWSPdZ=O^w?jorPIS)$D( z1mM(>mJM8n-tt=pv+d%cV!D#y9|^E z75YgC`dR?AnYNTiES~?M<{j{Qmv{?hwhId>v-D0|{A9@`7DgP`GaQ)f={@FxJ}40U z_P43c`!++S#Iajq>gD9u(}gUTMAqF>P!1WM`j6h$~bgsNc92bcQwZU%uii9rQ`PX zaUEq(UIC$&q^DYSk?eF7to)XE#aaAUn$NJ8W1O3Va%aDuMo=eH77` zL#eDlJs>=#Ah6>g>00C4V=kqQ!)sNa&wypD?8pd<-GEehwN%%NfQQAFl|XMwJR? z&WDx~!sq)N+I%;8BNUi~8HQ%bK&O$4-%_B%YKVy~cv!IEjzpGF8R>F9?~ce4>*(5* z?PT>W5K;mA(w9%07>9-0n-61Q>2t``RpLEogEFf_rM-)xGg7LLD!c(_HlaP+f*oH7 z0iSy>8@>|N+qSWRYFOT6H1x;We8A3i`cjz(Gu{%WH%QwHQDD|CzMH%iu}XVugsRMr z-*S9w)}r_UCt2XsHNSU8nbfV*+FHZsO3@}QBF5W+`D56`w3t_zMO&L0aIzT>P$pol z${_zw=%OUlUdTv!HpR`9ZQ>gj;Z*Hr!}8vP z73tj8V9O^nr>2KrX2QJW^ruX!x@u(*v%?abqh^~5q0=+S@PJl>;TsC4r{f?$j0Wc$ zUjxJ*DRDQs33Z26#^i>W7&ttMpuTX^^U-^j?iJJb)S!jZEbNwfp>^eBU&USewb!bF zz@9VwQs_kLRF1H5E#cfHaE(!Ej&}2k60`wq@@nD@`YZ#I3@lL#%?T=~*o%~l@IK8~ zE%3<0tpNwc_7t4bq47o3&Q#BTI5q9SCri+#JbPVYAKcv-WB4UWJ`D|)Rd29gg$O=4zsMTPw!X zX)B*bX}AKp>Td!F{0RO06VyfUx!eZv)|i;2(gmfqoZnj0O^<*pgmRZ~cJ2NZ#+?ng&)3G+|M-}QGBK?DA@p00Y+n<} z8l$FVNr6GEajZ4+?*aL>pTq3*2yfr5QhPp@e4UfIl&Fpy5*Lk{vCI?dq7L0Orhiq8 zk&LZp-p>*$9-dC*`e)51O|O2AY8=FNe!K5{F}I@NEP@_bYr$6tyZu{?$(#4>%=;zz zU>y}1{Z&>lzF6n;N)JmZApIvH57@~~)ZfaMztJwec|KG@V!Z2m_#p1tw;a08s*)g1 zA)%=v|MUsBBd1vX<@kg5`vrJDe94PPm^ZMG4mm5V7`=NqLcv1`bh(_cNhtfoH5DH@ zeF`dOx?&u1=W5qCj1yRO`rVj|QABSU6vI?XbEzAVMU6p#bZh>*Uxcgg5<@FwbI?Xb1P{P%PCa< zJ_xxiuY($9myf@ZC-me)Yz*gh-%(`{8EL1xITbd{ySMdw$*@x9PNs+KkrWFBGBYbf z+gLpKq?JD!@RdQq9~vs68%1d|>Tgl9Rennc1d(6$ytugl-2n%2YOQZt<5XNJo?gZV zYUijk`X#bN1S&THFlx}lfdIqCbHLi56iX~DC$NY&2bQ135QGtJ#mRS}8Kgv%(PIH@ zI(m3{aRkzumnxfVYk>!+N$Nb9O*M(*dfoax!6O0LPh#k{`hYoW*0A&5DqmCj3$vEh zJiid3ZCCo@bA!nq)9Ie8QB|4MQ-L!(f5>-kbU}UI>BexyA<1wt5XgV(dzJM7BUI)+ zT)T>l2`?^1(0f*2^l?eCYEbh%VPWoLODuJwy^NqI(d8`Kim$3C+BFzmE^A$!-pZHl zrQ)YcmMJ4#QelT)2ihsrTQ}#wCw?+Of=fNLtw#wR16lFuuuZwfVX=+(8Ul6Mwijjs z``)=-g2k#*yB(xVYwhl{tdOP2@sw`2(}=M39)8`;uRw`*xjPXOaivnnB=#|}eu0%3 z&G{o!RjAZNXn%u=g?)q#`F@yVqskQ%tW2~qBy&@!y;L3F@1R5q46LpO{J#0otdHJ+xJ)?J2UXT zU|g_$_8K!G;12slPMvXVYCzaPCbOqbHm;;qfCUKMl^T=hKAbJ7LxY8ir{8=XCJfb} z^Mza6LvdL3DYwP}0<*nkJN|7Y^Al1rFI|t<%D_}qk!Zu#F|(y7gj4+2UlbF#BGx(xyTe#j#pH9tK z!#kmyNo(G+;dW=A88WyVaBhu_Q|y~_ovS`es}Y}Ivp|WO>I*3aok_i#h&%k`!$bU~ zZq$t>11v`ePU+jW7h z?7im8e~8Ar8gMjdV;5nX*eIHov$ucmgJ1_IUm&$3qkT?923y%ecAAlAcDTS$hwjeO_`rRrROD zEMQ`!bN>ErL-Lszg5(KAbMAW}4vBgt011%SrSDE?0``(sc3By+j8Zi(bK`}_Si_@a z+l`9SwFotZ5X;fbW0HTHV*HV@wWnv zt)j?(k_J-T;UP-nOQj4fw63jf~fjYjDw_|pE z^g-t$TfOgP+PdSDgn((u9ff_W2ffF+8YEh#Y7h?ON4C|A-B)~EZkVWbW!6*-Rgqu& z`00xM9TY&tpF)4oCl?;_Ij^swEUg!eq)!_tPop)^sJR)#vx)~{;>kVV`MEXv?(U;%OBF-Pt|>w-e0-pB1PUP5Or^R#TCDyi%d2L za-F|U+n*@HtPi!9y{+mCcY}q4Y?FN6%dh%=ZdYbvDZ}cUwcyQ-9J|lYRFC8!2e40Q z3P{zVE-V{}0q+(xdap|Sb+mp9hTE>n$WI5JuMa$bC!gf{y~rE)|DJOEOEpVGf1G_= zmnNupPEFtTq3Uu`M4b;e9(NBrX4sY-V>)6b3|}3#UnAW#&e+!haYHAW$_+N2#M0R# z!{Lh!W-s=7{&L!rFZ*U}|IBK@Z1hyGP4QFF0i?d=`1gAC!W8WdcnB2q4|TqqM#0mNDRI${M}vkNfuYtqHU_nwY9Igx-J<{j6N@Kor@>{AX&P| zB%ax_I1`GXQ3J5_dLmHc`pA$bzK+EAclXQeL8)JeU$Oz}(S_^(p^OI>zFedmbE{9V z_A9D^;(s!6w`ryd^!!8+9FU>7->_!V_0~+qCOsL|znH!WgtN4Dz|no!7_OV`-`<4| zi1ce31N1Bc#Tb#aWJO@5zd-<>{woNeY5g`g*u^$@!CDubm*V`}N;uEBpfUU+v#H}X$tZUhXuJng8??J8>j5Ya=&frJ zYL+@1#9m&iu>VZ}c~@kL0H|RYyM>efI|2brj}j-W&NxWdCZP;7X$b=6dHA&f?G7`c z2@mUgzO#lZqfOaS!?osr!U|trE=n1nkbcPyYKJ8NK*i~6e}Xb)qok4e0k!fBF@f;A z0#n$f<){6_R{t54kzC$io7coYv)UK-ygbbFiT_~=<;jaV#@ibvHn5;M$-1UH602fp z26m+Ol9DqtU*h_AAfgR3+7mYEo&=DXJ=FuoZ~h7rIu&DrTj;HtPK$WX_y&~BY_1aI zjbMkeVdQ*y())ivgn-GxIM+z?$_e&iiCXt^m=*jyzPeVfz~hqjy$;8KN=GacssF}f zbFOy8L$$euRh$ACO}?6!nW_$w1mTYZ!rNOMEmZ7T>{UMZn$1y%)WFjY9}(7;JFO9r zI{LyY#62SU3jgMV5v6Uk<|i=Xx5fQ3FTy70xljZ!J`p92p%;yZLmMRT_b8hqJZEWp z76-Jkt8;}C>dD~{WDMj7WHJ%gzh(KLx5cfYVuyj|33m<64lSvg;!?ff3H>Y%-dO|& zKXj`jM)b8w{)2P7)MezFm%uG4LxQy){I-6m>1PqRXBiV|)8juDpyFvqM9$ z`3ZN(58S8Q$EKlC9ys&>g{f<)hSw25aNn(Zue__y7H*Pcc9_k(ZRUOOeDJ;c%-CJA z4f&jy5D&vc+8DFT@D3|2GUF}S9pw_0Uqri%O(az1()CuE3w+2Q(5rUi)KOJ)L^}R7 z(4aYeQe_4S$`ZQs_S^;i;KuU#H#^8LFjJupd5~jG14I7?xZoMP+9t^@V!T~>l)K>2 zZp5aslv!D=9Ju0yy7ZNVF|FnmJ|y+&4+}C{ed(!HDuBG9TPn&1n)-F{ zVyDla)D^DI3)Y9v`sH4=4YGVTlG*6)#zx-=gs|dMN z%ye$+^BJrjtqkeEQyNuev6L zy#_&oQE7gj78dM(#GUL`-SO0zMq@PnB}3C^t7p_s_Z^_V-pdZ>1nBKLvFuwtvi}46 z-;nd)LH{Qh_x;V|V~pWo1qAsSk^5#$t&z(`=uZkWa5H!5tlbN` zSuMjD$=WLXfUq;(^@>X@W2$CxsF#>Jt6lnEMb)$J+uUaF5j)NeWeJV+y15*fZz z_`>&QnKmra=ln&Eq`5YftIoq@LRC*!J1(Pk$t*!DF_9aQX=ehzhYIHc`d=@E-5eTO zk*?-nrfkh>M5he;Hg2#GtaQ8Jb!sxu!*lb<&&X>j`6Fg+`7a-D6cP+#iw-{#z-0RLMWm@S zTN)_2T~1-vTIk1Z@~7~eFS3W(j^tF`NOHLwQhp5dtg@Ifa^!~&G&zTWUh_BC!}jv} zr^CUA-86gT!_PTAYXud#?2;reCfxm_L8**D3yqyC#4V_FEQ8*@zvH%Uzz#ax@N)-u z&n4CUcRLR}aIm(N6TAVtEm^>*nrxIHWp?bNC5Ctv*f$ysIgPK970VXR)(tgtoCA&K zjM}W0zC+PV(i2BpllQ_4VB@Iy};FGj5qULo(L~^H7HAVG}j2-sWRWRFK|B|+{w1@1g z0Ytjz`Ua2)wqIEcO-CZe%4Bb8_S-i0650*)9F3XtKKcmHWQcP&7^S2Nf5vS>vWN9z z%7ePwAfyi0?&9^*@q(I>J>k6xD9IQowBFQn%P?eV7gzIqcFh^ml%l!*) zj8!`w`LVUuuzQb5J! zw$CGd2fszThZFdHxsAbhEg2!jq`Q2PZgYE@TNgq>r{RC6C+vym9Ot`?ijmqF%;OLo zwugAy*`)eV7X$5H`oFqS%CuBG)x@-~6|Gmu7o!!_0Z6vZ->46cLFY81X|ws`O{K}U zlf9GB^_oMu1@w}YL~F3Nr*pd{R5>H*5*>_=X)7&03l)0~u}wE0-T?~gP>t<8Ex^HQ zqq7MI0m;Oh>{lurouk5Czd)xmx9N~WQGsU`F3e6J=w)}%Dow$rZtEm( z`O;!gY`hVru~6?H$GQcKm5}+E&=U2+&UXI2{BvT)LSm$6&K+Dj5?t4aOXdH1^vN{W zbNi0YMLGH3Ks{VPvt>@7JCyQ9VHJj;nhm)fE^n@Dmf3I(_2f1M3k8=yjxkl~D1Z5h zZwh5ZuIM%6+aV;rs64^0WOj}V6x-|+y;qPevV_Gh8TW1H2DS6>G)bnMbcnj>(7YB{ ziRv{G=~}!|Fqc0&G2Rs}qYY(#gfR|f7k~OPau7St-jj?POD_fp;!ZBUlfAu_%VNYUL-`rGZ#NGN$#?dKBmLZ zYBfJ^9e1lWV4SVvk@5@gyDKETGyCeBhtpxi2G1_Y%{W=|Fi=N$b2`DQ%tH zBMe-L@+5he-jM~3j&%m(>#pV<2X1X}MmV$e0qX*RPM(kQ*`3$Skvg}SvUWvp84*kZ zw`rPUUK_0@hNnqu-|xrVqT*j&7pzO!#ikji-*!@71@Ie6&1kF0@~yLe@g^D6NficB z*(@T2<~*J?_p(9MpFOru(7z+j3krnadrXuzxgxEO6a(F3h_!u@5~Q;^+O4SbMQ-?f zrvshdC34&Bw4KP!#Tgapjg>bKT?}a+$xR&jwYyE`>Muk)V{5;TmlFri@F>u0Wn3cJ zgfxIU(Q&Zo&8L-%YRi0V=ANQ)$_ra}+fshvc`ccuBzUXCN`K?@m#c8Gs1lhSlF2o6 zj~dTLN)#TfRJopx;njS~!MdIO9^x1Jxx42|H3cs5hiQoe!6e02^ITvWkA?vl}F|+aAT@;=I$ua)aKC9%aju z&RFN8&8Oeun;S)1znDI@xc>*iA0p_9aV^h zvawp%KZ55cgI5c|&*0cEs2st$ncrhB0LDQxbEv$T^J+-O@aY(`*xDh4QB+JY<8ZX@ z*w9)(0V<68H+giUymsdqH3+R2(_;({-5Z>ol*stnbO+~eY!OwHc?*uPu2DKir~M&6 zBy6ATOO{*%LNE~U3e)~=q{b*OOJ0=oE&y#|mf05LwGwknc@@mS$>rGyR~z_@oWDCn z`i&$5q`(@$(fViF5$gn{{l56=ym^L_ETbx2Aja331NV;FNcWGlcF=CFbj&FxaSXt-(EG;$f;%^-V)laxSH+U7IM<{_U2KJWT@7w!2 z$>@~@{N9W5s=!OO<=&-KmMHfRh%>xq_0~#hR0ISRn$5`W#(qgg6BC>(>BgY7tm}+s$Aq~}Z2Z;1(%HR^podXF905fZ zcOf@+Ol%Rl5lY}=P}lJmYnoWH*qPqZYv{nG3?yWxTE z6KDk01AfxvBd~%rljT)z+}1VW%fEB=0{$FlwQ%Jf^dx@-ew;7JS_g`5wYO-XoBG#a z?=9I;syfcl>Tgy`%e<6JW2<*wwGK^_e92yKEFGe;^O@QY{uwaTW{Ewl9T-ZF;|OoP zP6s{TU(xAs#&v%FoO2R|W-hr+l-vb3_I}&w-5~r55zW{Q0syC|(JfY^Wf|h^P&@Bd zLgK$5HkexTSSQLue{~7}R5FFLHNbuD$~(#>NkIfdLi;HfGTUlrEur{bPOn)=VUm*o zd!$Uxx;_PY2vpdix+jkCSJ|=cdb{TeAD_IU^Pad0#DCkOQOadfy8VGeiEtAbPIx~l;S4Q` z&VwGPIYb=jp$yj~Y9;0$rfPj$_3pO_>t3QeL+^{d$v?^FFFlpaNEO}Ma zjk{{z#kgnq%7PkuY9_Nzr?`@q#?7r|M=q2WtWSjAk>`I#JV z^V_mLlV!!pw^2XyGlk+@1NcfYJ*Z6?dLZF<3b*o@ z6#lZzwJYyRAA~W~Hw(33mCv(21+6V)`!$wfVNQoHGSxY|CRInLCAjzZatZC+yHh z@{1$Q)3%nbbFsM)F1s3@DT`HWb4kIRfh35b*f?Up7UMnarEwdA4vKx>#klJDZo2?b z^-4KgH`1%d(#&&09i<*V&w;Qw6=P0 zkp+ryy;V4;h}h(b|dD-AOy`CZ@mvpeuOiq#gC`my2ZM(usaXzdCmJd=9#x zA)#}{YP&0K9;xNS&tY&^trQ!o4r` zcQ0AEu|UkFe`i$bYGiGGkws$&w8^6y#dPi^2ft2b)S{9)H4~`#!8tS!3Wub|%y)w6 zg4>09mOFV5V~%wFl}KfkwGAPLCjqEfWhMxqx_zGfG;Q|!s;LE;Q6}m=Z>3gzYRL&+ zEd~&0|DE&(aG6&40%bngmigcz>n;)dWp*G`KH;@eocSa?QCA~oE3@T)OFW4cxzY5U zP-sL!_8H^65e|OE4t#*X&4?*$c{rq+J^0p4%ZO*h{x$9axLH(;(q`yldg?N9y_p{^htV2!N? z2>Pb(&158oFi2K?wVYmM5dJ5r-xjSpM&Lhb-)_h4BU(k85VzHg*>D<;!Wy8?+I@&?Qkg<8FH_1L z0$UK0b~&c00_FIX?|eoY-sk|HSpR{g=@Hno&lWlSAVvYKMcYu~I3id9yWEs}-o}BMPkUCx74l@f z(#M8B)=RDUX+&k1R4g@G(&=`?XcKU&4nS%|L^2aNEM+jZ7XpgU-?{qs@KX>-18V_Iq8pz@}p;(twiO{0keEsuO_hkjvw%+be(5<(xG~L+n-^% zO~7Yz@jc0Yc!-Y=Zfa6OFs9GeuZcqn-Q!L6%T@|rGEXyOi}}9erQ9Cm>~ zJ#D0#<@136Pxb8bw8q&P*cPI{z?yO>u*^w+p!naq2z^WY5x@r6IH=NblKfeHdx`F1 zi$YT_X~LJlwlp6ZN5x>Tj$W8&@!*f9g@TF~_V`rPSv!D4LU$P)Vm?zlbxKDXV8|d? z?MTc87Jz@{)pxdSoTSgc_nR-Jg=;~N^M*|L19$teUPuVsp`XpnyOidJBYIocwiZgv z2KY~$a$^jP2m9PAc01qny%*&cGGMq1u(s0*^pAq<1+QoC0@V8LPAvK9xzJ|C?Z&~6 zRwz#0?DIctZ{E6gh`uVnE#CQHcadyOoY{fQlAKNx>5)}hSByhLm=C` zR>e4#I^)?i1pykj{aBr{kid2+?f3ti9{d7_b~U@_{uq1_3R ztxFxF3ZWkInBNnZ3aU4M^a%tO-OTc?)-ciK$ipCiH&Mn2Vk0!_%4gsL5?}(`r!JK* z8{iHrhXRlMQFWLG7=-;V$AY-_9!#+dU!^t{T9Dh62X4NZ%!*Fs*})=irF#O8;aMVL z)unCY%jL~Oy=yAQ^;p+Dp4ZEl;{g7^kj=6u@wr;TKX>z?KtET)(%HX*e&OQw=@giS3Rkcio`b8qtT4|95f#~1YXv{^@EJQFGV`P=VK zwvQUMY~qj+%iOO=3{x*8Pks#ga$^Y~%PHIHG@K|nWxYQ4nG1CtRvj}9Ea$UQKGJS3 zB>CT(%G+eAd>}$TGa{NefQNWy0G%*8X_GVZa714|qdFb)+C;k|RJf=r46p9lxm+*~L+IBL zzvW)-P8k3?FaTNd|HyczS7KrZ3@AzE&c)mkDg`2LWOKq8nXesXK;a4ivYY+@8N)OfE_&Y)QC)5gatizSo_9Rie6tAM9pk2qAEly(v7HC zYFy=ddD<9Mio8scw#&QNb*Svp6x~$N8{|Kcg{K>7f4`jZGlMoE{c0CV!?$@dQw(yJ z`Mxb~?_C<}3Kn_pS|zLD|MlhBPU_{XE@#8;F=1nx6EbbLrYDyj-5K@-opy3)-Gary zLIg9Ki=}&jYZM7SUk8OOgKu1azVD+<7EHgqbuCN>pnheE zOUp=uwR20K!s@O6xRc|$N)%Eo7dA3r^~D;*h(MRn&-OeP48M~zQrjPAkG;r&dm~m| zys{xUtafw2SH?Bpk=k!t-I2e(P=lE{VORXqiaR#jz0RDT{+Z)xbTSem>1gt92B%g{p-#zV==v==$UUk+B7QD4_>QDbc4MOAHo0ljqx zp8k;GHFJBvVanz}&f&z&5O0&uO&y*&%rt>=zNxfgX*hyZD;GkAi=BdK4*ELJn^AMI zA5RT0&ogW72R0Ju!Z!f!f#z z7rY}e%Mc(d5sT7yJdQCADU30#RZ3V=AA`YUZn&vmH|T%td*z0SAwyPKaO>KF@5qjh zVNn|Ti}*y_292x1Vsp)5c=6WiGL>l`^kIgd9?Xz*5va&d$(^YQN6!2X3sIvft29ml zXy!$~m`xyq`^dT)2hhB8v0vxgP`l5AErWxLE;ZysFS^*fDZ#*Y4kG-|{bMxvTi)L2 z&lLl13;_M+T_{!fZ2p4n<<#MgKR!Ff7^U*_OS^1XHJrL{NE;J2qawPXf3fSSY(7|b z$AQ1tcE&##skX7d@h65=IiGcNP8=`rrYwVDt78h7Md<9?_sWO-85pC~@)O-ep~ZBRx9ry0q5jbzVRF8y0t-DZIXor| z6WjR1v%xd<#FLHmxBcxc1#`$8G|N=5oeTNHCY!)D<-9wprJf*=E6@r&(PsE0 z*f1Bih6n4Z^l7xd23H{Vu%HXzddE-9@P=c8i5;DDwD5~Yr51sVS_zc~i89?OQ|8?~ zcg+Dw-q@-?Q_DZEMchZ3sCL`0)(&qhjKwhVF-BB?s@|)tp080cLwR%T<`wO>ZQzu-Mbm)ywCL$$Z(cFOp~(f|rshr9ndN<|j?L{oo8J zKNLHAV1MAzcutNCQVZb#KVK%$OBnvTsaYS zLg>x7-@o5Qln$|rKSJHU_W>-B+Bpq8%r99dKG{Ej-^##$3N!w)`9XZ=cx_2;Tlv~s z=%(M2N7bg(!OP;!_qm}aChwPNU13xv%o0x`9ONfqeixw0syd_BW9rf!%=YT~kRZSo zy=S#^0Pe9qVKqnVp*KOz&VjK~yZZw8vfE%^9qz1Rp0H`A@S;(bgOC7X;wYGJ)y08p zVpe%`TCO?&;qlt93CZ(_+=&qnV?}9O6@tvP;JV^)G ze=3)kPqm`#{l;!Iiw!7lu5PN%ByFt;QoFD)HJRx=Wm&Ruv$ zr(?AnaAx-F4M(Z{o1-&p@Utm~NeQ(vCVUw4G$OBQ-D81V{}>WN_VpyQ=h*z%u@C|W z$j+4+elr%pO@z3B#9y)LYT^wbaSpGG(Ie9sKtqp}RlhBg8=Se`{Qt4`o?%UGZM!z= ztGHA|mlRO}#R5c%2%^%WVnC1DcHh@^UL@Y>Qlzh<{AttOM>6C8j{%d?s1x%Mc{y^4C;6AzW&*F=KrV)1ar))}V7$D~f) zD{0X=_#GR2;+)QiY7;T~*?X*qi(NR)d!+#84yz{{)KQj7cr+K_+Y(dM*y~_()||Y~ zpkmyj6BxvD@{jW^3>RkQJ0>1i03SV&uJa2@uw>X~(fE*h9h5kEM>53}>@(q{Dc_9f zqD`%{+u;3GoKruxP@f8^O(?ZZ9zXO{O~9y5`e7(DFi`<*JaF1@nFU%;ulJaXGmR=4 z?Qp47-&kM6{RDD>vC6yE(i3Sob5{9qxS)7pQA$2Ku+zRU3gtWMZ7rHFQQYBU9d5WD zZnxX5I6HVk7d|2f`m3p)zL-e_(0{EkqJ!UMuA~lYNCr-kI)yZAM1}EcS+M!pP?%WG z4uiS6hT%z@NOKCRF#Am(-|rXt$pOm}JqLG&BW{{MFhHEb#r`7A$E~+P7G`#w{P`Z& z9FsPpCuP3;%>lvHHoVD;c%r4CibsvKj@__ZCtpp~U{w^qD?EL?!;#;aA~)+R_MCVq zmA0alS(3S0k-E+$*sTVf9`8t^LXGD=cT{7RPt&TEX#mXU6|B)=BnnbyM_BG?Wy zcLhFWr~_5s@~<4i!}&K~WfH=kWY927@j7mxnuO3I)AbAiAi+g1#)Fp4dNabeu`a^t zmB1zcB^zI`eJ@MLMz2wRUZEntMVaD%wztd8mtmR)oW|l+-_o{6j(+@|yxiIZAi#Xk zS+F9?l*U^xaP$T3`4f>fmMm^TAn!Jp7;oGmtUPE9&y2VvK{MI0HR0WGM>=;bB=QoTR?s z4B#aYlCo6dl3tKeyfy4fdoY926WLK~i;@)ce@n}7}aj*`c$FEw`DA+07<*}^$^CRBd9rojUQ|2KPuiWwUO`hE{yN>lf;|5CDJRx zLk9%&k2+^rRc&!U}XHmdL z&H7X;__5@7W_vH_V;SQ>v!>PA`$#4G3ku{tE$KKld9{TKOG7mmyOf3EQzo{E*Ug|+ zAl~++L~gl4RE{y*12G&Plo!ibj9lxBQ2_PF6s2zV*=n;NR(P26)Tkou{l;;fy$Z|? z+Monk1L_paCAIc%YGhf2@1wh@_sk#Et%^a`%HZ2*C+&9`%#}Yc98xovI?_fvNVRg) z_}o#VxUFm!92{1(%=*yFJr~&RXcTMkf|JRz?zeCDxG#|yeUBk8n$aRwn)mKKkkcL5 zfT@~$5tO<$tk=$`^#km-*G$R!SLdmp(g1}ZN7CYVCD|;3*=EC44~LE9L~q)qllPy3 zG2H86+r?kxzRQ)%+3yy}F&4C;7iEw)#e96zM3E=XaF+}Wm0L`N1o^m%b|dMcJFIAV z@eDgT|4<>*Xc;xGYdHSWr5*N`OV%o}G`e;r2&?4o(>ZaNrhjr`9a33{F zBt?fw2h!e>9MR^B085%v8V*LX4+mdcJ=k^DlAXsPZ1ZRS3z&hJ z*@7&5pw+Bz;4EO>%1Su3UT=V*c&OYVCi@7YI7NL`u5kwuGb_Jg=8)pa@&Hn_vq`{@ zn!WKox>5$I6M=XyPaWT}W$qQfje6g`9i#H(<8p`b#1aaHkC*UKnD`6|7xNM}MTCy- zB^@@;qW3qS3mGdTd0#=?Tut}gT#TT7P8%)Sd28UN7G6fT-(}ir86goo&Wu&ArJMbc z$Up2&1vP-Gvu1TFfwbHp`Y?OEydEY$^T!26!}0)W(WVutcY)oe!RMEQ9r$1jmysG% z-y|zvt^8z0A_oD3gfNjd>o37KIeA?8r?U&JalV|J>mb|0b6FGfKA(z*XOhGWN{6lCXeZSS zyQ?fu>GFbk^6_u^Wo9IfQ9+I)&|<#+*}JnRlo*XjcM6vCBrM<%#Vl`dCqWBkD33S) zJ)U!q4_7l(VS>{DjFKm}cyje)By9D;vA9`NcDcfTshcVxSMTaBI0=gfnE?4~bPvfT z=&q`@s+Uy8sD>H|wV`h9m7%oXXsdU;2ALelZP z#_c~162OIG|Jz0r9Qt@=l;G|hg@nB=v3Tuzr}d|XcU~4REY;d>gwBJg1qzgU?2G+b zD1>1;fMLX(h1~#?2gjzJb!O}yrKJsad##+>fP{Jdk^$#VtSGvh{p`I2d;qQdTLMrz z!3++&@xXT#Nhc!(r&g{SKf1+V$1Io8XNl%+Gxg+6dx|nxA5PaixpJDqEV^l&g0FD= zsY6#AZa(9B36|}XNt%@uNZ1;L`V#h2CV!^M{gi#h%)@qWp@|S4hJn$W{i=lB);^)*Zm&adk3D%kHTsSrc&;^OsmcU9OB$mUmG3~sXOUQvyul;-w z`!F4wvP=!|<|8Pz{XTcpa$4B!t;1H}_-MuI`S8<@ zJbxDgeUkCf2Zg2^@do9MEWnBCrZ@Q&bC6RMh2OrpqNUaU0Ul@MK#2WN{^kzuNYH2? zUju}^A{)2P7JRfyHHGu!qIk*v5;et>88n)Wn(9vn)8x}b>blB?*{0K6^sEiGr+W)f zaHNLv3w7z9jT3Pjpj%5g-Pp^s*J@Z(qmqZa;NfV3f4{yHsb*wV;b78qe$O1KfMs3E zz$%jZXUgP(NyoU{pZB62X4$DVF%QrzvF+f*qYaL5bE8XukVj&$$mZT+sXXd`hf)=R z(!UJDq`7aV{AzRNqiB!bj|H65lSsz9es?Wb=|vO=y$0SX27DhV#96mOp&x81pmDGo zjt)pUH=HF`oW--grDRGQT>4pOHHh8H64+Q*QTmQVf)tn5lk4EQI6;W7{_4-|d(@4j z4}ptB8)@dAM6H}p&ulP7n;zJH`<|v1|2|O&kQ||Yz4yGGN|VYj_|4@j7Orxxb^#bH zsv>2?8B|q^lK|gXm(j|)ebJg1@o;K-^S>k;iP)Egu_Noit8)G$aA)x!D9?9=1$K|> ztIKKxeP#ka+-aIK#@lY2_q8p8;@4a+#^%|&9%TP)@qw4+2U#q8K9;474j!w_ca<(u z9w8ilRYTI92o~Ix{>msr_;u8xW`xc})Hh)4{0b>KD#o6bPO2VBFnv$hJ=hml9q3mp zQFEAH$obNK+ix_5GxHH$s5}-lJgQlVvI>u4{A82`YUfue<$>Pw?tj@yt_T_?@|!r3 zxz63Ae9X>Mr<2qzyL3MyPND&*ENUO({$#34>s6Nu3bSS?Q6xG9Bdg5liCc4#-b4xV zi=Atw725bnLbT6>DU>?GcNr##jF>M=hr-seb@v;VE2CMFYc}(K;;z~Rd){#mLPGBU z{82u&82tMN{iQcnY3D_ zIPRt7d0>=Ix|U~BBcys?#&ytd(u~&*%UY4n|hP!YXe2wIS&N*sfcPKpymW2u&raSQ|XtTo3)q4~a(CR2{MyV5RhjmR!FWQaW z5vj7oF5Y)s)vifKAal3kCfJQs?3R?N;>3|PO4|F$A=P`q&3o)>jvzXx%@VnFy0?Xr zrTCzvkSMUz5)s`*ZBQ~S?`~LdUU7xDZ5a>6tUld+>zTC0*TEl;xqySbAif=?9SaKqJ;j$#=h6_lhCRlGAN zmmG13YGK=w$D{fLla6xIsqRHPy)fZ}Rk=OIH8}Lf4~)4*>caHp4p$y^^trY2I=mi6 zpRPStM5E5Z*oS}t71&ya0&n5@78^snz9Y6*a`Jh$RGiq|5uB~DNuK2ZCntyl3xiO* zn*2IMVyZ%`+E(OV$C>6p3|+T(InmGmHINoCkWBtSVq5h*WtToc>jHcWm{ua)^W%|D znpj>Yk)wg^0#j)t{$#_w*;l0TX09vr_8lPGKL=KUl>$}@$)Yiu$HK0B4}DFu7libj z&%o&j-ObUe7v3#uG;YY43+bt>o%1CH zP6_1T^o#>I$S^aZM zOxSGjDZUA0XlTXRt;=qr%y*NISO9Kc#TH0#o9K}J0X~? z?keWcY>pGWwUImY6kXuFTA;y9$uPTn?1GrH%~wy>To>WnGB5AeL7juqoT27t9YbR$ z`Ja*k!}sY&?g9#{6+F2RYOY0%y9B1%%4K$3wm7BWGw(5&WEWG@1h1aE!#5?}OV~$9 zksqAPdC?GOcg1;fUa_Fky|>Lu!<>(@AhT5MmbhtDvp4!+s$p!-Y_Cqv`hNUYoMW|8TPqdI#kX6>O(>@HS|(v( zd@+mz_F`ypcV)r+<;Huveh#NKCsDNjfTmjz;^yS2oTzihrwi1wsi6xoFwpwY6c(BYM zsAX?W>z*Kf3gY$11fFGU=m_Axamy>QR>o^4lr9uVhHL zt0b3-5u#*<$qRjqMHcTZ6%Z8AZPJI=bG{RSii5U%^CHhF4R!JTJj02hB>1-*8ZmQ;;ZRln-UE^;?#$^90hZ}24{qgotaSa3@|lJ7mT zY6AuXfrRO+Vr@6psj)CQr<(hKMFtjw*W0#f#$6V|98$wp6pZ*_rHmrD+q+j64%N(X z%BH@$w}?5xRy=~tTyupRavV+IhM`-kQe4`y^Ht`VarU;%g5|kx+;#h$9XM>PlfD>W zU8_=tLn}4UNd;W&dP5!8+O04it{Cc_&gYAiLYCI#Jpnt{GhWq7)nw-rkDn6u3i30r zXTXatK`@u%ozJ+oS;XV5g6t4|O=ok)XOs^f~te4nBSXiOD(`NVSI}q z@IW0qhbc2F8hUjfZ`_#8R7kExD4hztTBKF^PBpfERb~o0!?#uRepQ!GaDT~sG#371 zy+Ec@AxxgP`)b=`N-Jr?0*js_i2islRN~yZtAo77fq%OS-fUXrz~vl~V(dF+>s$D?Ge$e(KzWOfcuf1 zP#&ZyFEV;OVPHaK5(uFa$0jubd-ADabN=z_^oJ-d7B6QpaKj|~33B`2+n7FmvBz28 zR9~{QRE}7uKiA(!iVP{X8l+-bufB8D8#PWc!pBigV5>Wo2j2bEDA?)H&GKVSGWRYt zVvGyx&$p0GTloa(C%Jr%v)bT`eYw)2kC~OqD9h}zTse!$ccib=m*m86*?pg)CR9h; z-g%hy38*>uE3OjAQZlUW*X`CAD3PO<&(EI!zIU6Ev@JG>L7-wMzpgqhpKAn?(pU{< zYcg*Cy{$B=gTGOKoC_opl899Be4S!y&M3cb|q{VTh-MTS+q2b{A z{TA=6aPSN7!M+A)+51W(f3ADD_hAnO!xeCXuV< z3fQ>0kUXoJ(kP2Ne~MD7Jb1YiF+L?C0$;7*aIz9_P=cqu13Vo$y<*|oEbhVR$p^q) z@(!KW?LNYBi&_!9G$tYNPf_fON8763%$QzJlsDuw26Hn5l)5W9rIGu;9yvqd@LSZQ z0IP|aZIFgmJbj%z?@&5S@o6tI^O?Uv`+!~eexsH;h2I^j%cuNBT6Z1wd3UczWq69k zy-WAd@o29&AKgLnbKrDQMH>{h@U0+{+5#IQ1rwg6XxSPx3VI|vn09;4Li^Nm>KT|} z#=Vcx72hK#6e%ejeH4V^k-5oH$!*vMQBD#E&b+>r6xIjWLUCuP*v8Dkf$xJJ@tmG- z(&*85mu4GYK^091bMvSwKyzajdJs65dOd3&6hNW#)xEJ>L=SR(yX|W$)@3*%%jBke zE5F>^QVfqYj)VKqL+tg3R6yY(uw1TD9qad1I?`G%OtR5(j6|Prs0+2z!gkFH^^a8^ zOIIh+n=TMJ3Mq-Z8R{5m(YSlo9=%5uW+(3WEKE(jVMJ9lGlzpS0`5KR#xNJ%w)YR} z(Z6dnIadDtRVe8l#pBHR2UeHFtgRWuPgLGaW4m(b!gP;Lqt|U|_JB&m!mR8@jPq;* zN(;W2TfjPMZ?f>NCM4U6IJ}i53;uenrA!F43|g1oX-ZxiLU0*p7S7xx7Y91VW;f|=y< zwPq{Re??EQ;6UwlpRcHfa;wL5e7`zwUxl_k$+KCb*vRHZn7qI~EK2Q9t~AlizuIdRl!!AhPkEfaGJ3s{EBtMk3>{KEZyqwY(-HA2ad!w~mO>~^pWH)pq)6#KXTyha2p-rB-wC`?NUeJ749 zuy^n@P>o&O1`5OxDLM)Z+H1g7_^iqd8!UP9yh(p9WQP&;?s_rTD<|MDb}IgvCAYIb zUWZj4Qki|MmyVNZ)>C;|8kp?*G%a$h>}-q@Nd&FsMUd*1dEjw6P9A6UVywUH?4Rh} z)fk6xjc1Xr-`=jy_Ig^&NLDVLT#SyJo@j&}$+JZ(dCG=h)v-#-B>L+bX-{4D*Zyc1 zLOrxnvcKDXVZpU9BLCI=+o?Vs8WLbV?V_i^;a8syXqgboDH|Vi#QV*i6Lf`SWIFMq zG8W6^l+wPTvp)6qi%@l@#y~%^D{@L9@BBWRa>^s#s9!q!%)MEQFp^Kr-%lH@X^c0Q zt?B8k^$zT|R@MQJ`%$Q$$|-|5Z#xllmFy7P@~?dXXJYWS5I2L?DUDXt6<(xta`&0v zJYc;o3|UU)BELNvAX)Xb6*YSCjkz23Lw8Ee$COalIn_9w*@YX^B`%pF0;yfT(%J_m z;u8Cy$)WB?9;HMTt&I{3tCtr)P(PQQ)l0z7tcI-;-?Lb_e#5X|W!F6?wYzvVln>y;^~1rz48mM*TQ7 zlL;uf!URrLpluw0blpFP6jTsMP3S&*o|6tRAmJ``9IvQFRv1qee6SxD)jYQ&HkrMUQCxdxog_pm+Ct?1y;E@!xHbLPZ%XZVJqN4! zVuG9`?SN)h8Q0FiR`0B(fAVVV#h@y3Jxpoe`s?Z6$BiA7d|m&BzRvHld#e zK30Ti8X^R~OCKgF>OpLthza#;A_BIxAJh9NrC_maN~5{#{zZsX_IITJhb%Q6ZGu!( zSCIi#g*P*+M=C-e zmBPAL35+Z-bB(>5Ld%ctFzPl^)74WwhgkdQv`J^%P1;^~W2)VKIdPfjeNB$y=(<`l zbWWAsHfW|v1;Mo{LZgdH=G;xeGiS+!=Jc^yFW;i@Ia!F_0;svRp^)KC7>_iWVd^j? zL%uY)wN`HRtKuOwjM9m~t6eqCS>GGg`_D(4=nlS&a+M%tn!qHKZMp4tad6)bu{4n} z63$R(Z|YEVu+pjW0ECiWAh31X438NmV$e~@9XE1556CpS)2$IV5292@#_g4Vtd}Nf zgYMcft)gjmM<67-@FrR&a2k|3fy>VGeG3u%XR!f13vupb^|Y|0y&3#8W6FIr+A{PC zw_2yl|BA*jfO}wl5yNylJ_a|Pk%UCb(TOPW{`P|ThRX-4bFu{bWv)?1O4LcGqFma& zjuY+fm{oL{bh@%|3^U30lyz5hwCw`p_r()NJbKH?`1M--j%kB3)zypMJ{m8G_Y2_) zQ-@0G8T(1IYM2ZRSv#z2^Y8?5(VL}d;Qd8iJ=V6>l_j#l5~)JAyLpg*ky>8$PG)DN zHPbRwBZwy+oFo;UHf<&mAE?P6D3;gDXv9{`_tmimi?;T2$PhXHWc+al{j>T_qS)in zx%{K75NywTRsM-?fZ!`6E1sn0ZBY0~t=9myt8K!yP?Ig#`sKIE&tD0`oOq z{2OtQ#M}|w9T|-E34WGT3RfB}|Bjril;@cwc~$0Mg&Wl??sZq5E#t3cGSN$Q=8jCD z=>4E>7zZaifsDB$6yva6+B(S@eJd?(zL?wXm;#2~H15o#v#Um!{M;EfTJ-6ozb)r_OQ9!{}>au1|;*WfgWGSS$!+hcaFyXt9s8>!Ol z#TPy7{au_H0P0mGwKn@zjTb4dD@+5+4^cITzE9}F>lh;vKZ!^HF^stMP#+#|co`^W_T|lomS(H@3PN(}| zAd0l~t^Mt%`+WmBN;1QKjT*(+PT4N1S3N9eiUlhTMA0vbE|uvwSHJPbo6VA>Ih90v z&^Z|5pLx0Mq)&L9&M*fKSo7IUj*^{9reFNLCkyj+9X0lz4Gg4yWc9xi{y0&vUysxH zU^e@g7jz9=PeZphO`r;iC#8?s$(cVTDPmmadJpLiQ$5(&$!eUvO(}(TTT*fGxS9CN zjw$&}pM>M6xP#T;f~YW4jmDXM1S0V*;I5(_N_}fwjo2g+AUWyj`-Qtnb;D8=D}Z7oJi#uW%L3Ljlr9rJz-eKcHrUKvz;Z_8 zjd5%A>6cX+!W5h5YzQ8L0y{Fe>WU|Z8MVBz{e`sZImR@$48kuREZ05WM(+ke3+H~V z(Elu3fRfd0Yay0VCUfsR*E(z$O4Sgt$?Myxf!d7Q(n-)aVKU+mm;u^O*s<*0s6*T9 z8}_?48r0JpFEq&@k>Iif4&fh>{6h6x4&aj=3)T93b0*EAZ`dD2(TT>L!rG^YrD(W* z19bk{RRo8~_4btfD5r~owtUWsf(5s6&n0$+o_H3R^# z|BwjQVvx1=Q)%H-hu*W^{O(3t#Un;e0&j@APvWpnXXXmHyX}2Lyq!+<*?PKh=?VeH z9>|GoXn_W21SviLrb=3AFrDY+Jt?6C%9a;LCtWxA;wTHg`9AfO-M}O;gt%$%DA&6i zFuDqJ)q^yb>dg&7_PO|dq>=63X996LkN>)e@(Xs(Fr>ZhJJ@c=M&N_ZSNj~V#Gp6O zzaPqIay*28N5`)-0y??PO!bcUB>>!I!5a?UXx5^f1G?hU(968X?Ggnw!Q3)6Dz+9S zw%jVo+$5Ub#IS6&-;&d?!7=0_2=4kv=gW60S8@gn#{CSSkp5#Zw+mX+j~i0Y;}D`z z=G*$174@(^;y3GgcPHwiX$*Q=-J@9=qjf_T1aiVvLUFx-1&K@JT};g~JtJM2wboH- z%6(r>TYqyhgzq%!`K46?N=i<@eydipI>>JKj{!)l776zy7nrT+-<2cva~L)Gg9bK5 zxB&I2ab@vai=UYym^1#{s(oUSi2FDbj%*`vrWe_$HLnwRL$*8OwV6CFEmU8$QQO3T zeR^(EHf4eG-~apW;I9uBrdfwIsX%{wp}{$_=oQ+W&95!re<7$WaP|;Wx@nt>Veg9E zsWGIg#Q~2Xp@2_M--W&pzF!zpQ3(=k=W9j}(dCJC!(12X#cocc4vR9yJvpILB^>KkyH=$8U+> zd%>+5x(-!Lp#y8%7O{Xg54ZbQRk_sRv4cS2YAgBU6mauMDRmbuz9SRA^em+uNu`VCR{|G2lelC?h}Sg zbUN>n+2QRSKU*WM!Q$a@|L6c9=ljO=d6SceOBNfK+eLpfsI3q2r?n#ogaW1}2ogqK z=7LVKGt8h_ST{&}=!z{WbnfMeXqT&MohBz&W!dOuZ!>BgQ@WYVE5X##$SW<8woPLP zG}k?Ul*Mc69xYm%p>w4WCTGB=Wj!Z&{b;FM%z$o9|3A7lNbKB5q&T|MtApV@HvzP! z^BWFzpg=M>YHaJuWtL*owLCAa^{bm7Zqyoqj%Iwg{a7`>Dww;iQ6a73ni=(M(@wW! zG6R}{IOes&D0`b)o;%+3k206%q5`*$adKF-OwVG<1aYln${{i~pi!gq$0yTL?f>G) zKO_fsF$B({cwwhyNSVvTl3A3s;ZVVmXEhxYg-YGFMHkjCbp{&AiITP8=}e7g7JdHA ze06^f#PkQ=#{n~<-H1_=QcSqphao2(-|LUzd^>-%Us0OX_9m~6?2ez+jcmoPcy5-> zLo|Nj9ZAiyYH{3b_+^f4nyaZz_^Z_yJaPTX)P&mK@{V#t-l8%zB{}FD8>fzXHuLbw zchw>nXmO3Q4$l1kEC}G`g0y9Rkr2MyiCkBZtqg*;|{NNAX zlEi(8*N2HE^E3I!?FF_zbQFDjk}(b4pf)D_^T{X#O*~WhceBK8xn&LFCH+u-Z*o9< zAI8h-e{6hYSeb#FRe^LPnlHn|hv2f%MZxfX#lsC79( zESX=G&HukD*<6$1Z^qdN`IN#0zoBtI|%1wRJCt@ey)cH}$j%6Am(;um?p zuh=NCb))FUN1})9eQVPo!=cnTQ}K)y#@&_!)<(#}Br@Vdrq@%oAWUXqNymo1AX^Oe zn1Fz-$|=;?q-zx`+a|*f4EIc0i3}N3DPIt+|Rz#p|^H;pK(k< zY0({=j+9!SW<->;f~$4&SGR?d%qmLJu|ANXlTxv>)#pC4!6h)mb;bUrl+T8iET|FQ zj8%b?iFQfsiX?{~uzFqdLq+|VdF@}KnXEbC?vS&7!?r03hVqprp`D}2^iXHMw(s1z zY*%JLo<8F=tpGrOE&yU*av3MZlgf82T-dnw-&voy8~TIKLi*lbOaDs_*}(V|RLtEq zN#Un%a=z`lcc~d6b@RODcLMQClbXd=J0E8VVN+Jc*})D z7K~x#O266gW*+@b-i+3koZ(^eVihlu1dZI(bgqNxdLfnKCkK;*^M)uz1~m?~zx&P1 zK*9!PaGXqy$ADBq2j35}12y9RMG@$Fr9wO6_j#s-L;S+8{8-v0-VI}uC#kegK!CI{ba z*pMT)mm*~_9@@p;W@b|`tKaQTP5aN)> zvp!tSke-WK75P!{thb<+{g)sYKyx#v865KXK7-nGB|D&d+z1rCS1wl(~OxEsm<1k|+0O*reCzXWl z;n6s-iL%o9j*DVvMA5d4fOq|&wi{9*=rumgC31MD0M||%6T0>59~2tCo)|Jd&-5SH zZ;{^kcdHNrOt+s3Q?f(+)Mqy9TE;a4E*m>v# z$Qsjj=yqBI7Ut)N2UZm(O5W%6)|7ct@=HiDhJ?gSKsmDnr-GmGqv0!>7m={6U1C8+ z1s%`~G!#Tpvkt}1>1>t4!Cm?m4~JarY77ae8-H@FXw(H-W!h1b?QQ$7xK=>N2{?o3 zRM?AB&VI)dD<4Yd=%Q0xe6mxEIyE8+Was=DTUHpkesnO5>dw73?HWPUjrf>A_Q z{^T(M0#{BZ#pM!A&YMs-ydY4d@|v>s5#-)se#r2Du(*)+x^5C*-uw&7BsQ}pWfFlD znYy$~D0f7}m+!u^Io1^9y$~H}%l(?)!yqz_#31eCny7bY^T<2<)e#?3r>2*sx6Lr= zmKYWB$9uHLT#zV1fd{*0YB5Lu5p{hcgAbsq@|LL2ULZeAd1lJihIyd=^*I9DiqoI2 zo6PSziN>sln*$q-)|S(?JA}WsC6DLdGgY4d7`fxogtKMUIC=0*VP%os>!onTweP4- z>{O+!Pw6@;iYKy7x1Zi@SVS1SjA#Z<;BJ|9v=g^S(?;)te!9wKd_2wOVfmf}e z3|`hjZ8W;C-hdmVuIG8}=pzs+KEz1FHCa_U9_-!tvv%6wSdk9473OkiBF_kqND z0QuzNkK0U*>Hp%Z0Y)fJ!TePAfLidoxonq~z2X5{&Gk1b(4agUX{tPQtyPKl3PpY3 ztTW^uUr4tBi~eamA?xG`YrG+W^m8mk4yJu?LOle`k0t`n9%p`f)ert$_gMeFEXH(3GMf}l2JNY^0J;HQ8 z_ffNq9sT69D$}K=n2+jezWuxLJxkgV(AU`Ge`P^3bbFWSn>b*KR3I{2ytjqS$PcRx zb@=Ww)LLt!vlrE>kauT2NNrJnI9F4}g`o3K54T$xYFsd4r_$?TPe?VR9qs%KwArOJ zEq*re-jU`CBG$BSP6Th(6S~%n%^CvLlt>+R&*LQ{Pf3h}Dz156hzfGo5sT;eoXT^L ze?)4TO8+kNc^SrZm-UBGzT2@T*mfbq3bXXQV@1`>9bV8qej_eNTcgE3|HN_oLrN&vpIGmY9MaskV3vP)8 z?ScYXZFL}9(+b!XA8F2iO{kK*$3uo%7iu%-yHyRmCq4>ha)|r1LJY+?JRsLMML3xxFUGX zg@DfrtjH#D(nk{i6;J&vsZS(ri6c}wcw6`*h>uN!g#&UfK5!T@Uy*=I)U%D99$e?~h+^VAzUn`G7l!3MErZ<`I_lf?QT`p}l8?GuJy|&@Lnx z03O!9GabK@XwG}01e3c$=np*s7`nZUwZYQ4vfxQp@&RK%qvO>0N}e8-n#IYqZya3Q z1AZ*zWeM1vXhXa1Fq$0C5DP=STgiMt&GvtB^}mGZ_}72xo?z#4@V zO$@O`${8tk^8-`-_jGr2u0JV@8u+wVQ(fw4qBeJ+TPO~G<=qJGOijrAi}Mnq1w^)Y znqQf*TleR3#edpeK~m_hcdPe(@M=P*%Aw7$Jm zBGm|3x7X+v=aDU#@lN{#2=!vg1Jo+JqI=JhN4`KRb4Sbo84Dv75mSa|}lW!c}ci0d`sVxkX1 zYHIXgIYn6+6Ag2o>TdkJ#)#y97sLG(iRONAEBSm>?99xg_p8YL^xaaI9YBCd zQpue)Pqa_xDAi!Up>F?YVso9y!*SlXNGINmy|i3xFd#5}+%%VWM%q@p=8Y??%@!` zx|4HJ{k3&5f_tfeF0k#8v~X4GN+cyc7SRIll21TxO@AD5E|IeIs)Gskl&9 z6dxUBuMDZ^CbC7qQ7)TZls?Vs&5nNBtg#(;8X&tR_XhmH5&Oyi098Sa#C+*x2R^(V3C1 z5Xm725ga_nz$U!Ol|>#u?W`%!vQ}frS8LK5Ta4c%k=*O_b75{7)RNtvEAjk#I;4R)}Outq-a=#gxh=o0#D2O>ps zhOaT3Cv(#y)M=00(u`F`fWjOVwiM+3RYVlubRMywQwzQh(Ne7&hO|gr>@Lne%)}Pa z#|Qz`;L7lnEl}~K6yam2CQ1PLCnX3ZZG;U{dOE>p`!!cQ43c6rZ=uX?pxIA6&2V7{Q1jhXcjw%N0osu=G-%sNkn`-;bKSxxs2U^( zhq&n&nD*<(Zm%{y0*nrFCswy$p~~p>^8%mVe1hKgJGXSWl+%0s73%UUA#6-`i4dl} zpe~xZNAV(T@{+tfHP!w*iMc+=aC5MT zW;Q(J5-nw?1;nG5 zTAqdk>4<&^G!bBCFCO*5{q()B`-T2h@g^#C);Coubb3OnFbQC!C}Kbx>6<}J7Zc4R zrmLncu6T-{7dqyHqBRO0wom*?QU(Ikh`AWJ z&}x7978tOyGG+8*djV>mR_L5O{S7d(n2CTLMgL$CKl>xk=7xdbNGCUYUTAcvr5Jk@Cu?rm1S^kpIV$#TWL|1i}?o%F>T<6iEZrC?fhkR+TxY zlaoqJGQCTdkrZH}C0XaWT>@J{c8gpUAKexD3D`S=ty;42rllmAC{wz)Xaqm&drAk5 zY6j$b3u7nq81II7O&r*D>_>WpjQkot__E{B{99cHlhqFv9nhUEgR7vRD|T~BkurE*I2y;z^Jw))oR z)L8AQHdak58V7Z9W+KqqC~FPQIq|&Gq3p_n5KdXY58?7yR=@0ES+d3qW5hqUwPw|G zjjw>%{S*+pU&he7&nzBiKfmYwl4xS@BPqMEK%;~hog-HzIhowW88-T6h}DKEp?6n6 z>m&4+_SB_c7kI47?SK1qa!{8)VdG4cbqI0ia_N6Xl__ggC@D_rI4DO~ZPnn+5|S=J2C_MCwET zZsyYq9#wfR2R+*%>2#d(h7b@3xnvB=*`&+A@vl% z^@gQnDR?O-2mxgz`l#=4!Y=|u+Y*8 zRq$}%4-lW?*NQ%r*nOYWAhIc=)z6F z76S!c*q#L-FuK(sm!OSQNFyRH+sji^nlzfO$5Lo$bEUJt?i4IxhB{Av=x=&TmelkBbTauo22Zru?ZyYW z3?H@!VoGg2QZE3Z&ZiOOVw7}aDcAO7Rpm^TjCGS;$Laa z;C4x9GjP@PmbXF0(?UNOcYi6%I7-Dey|0gUwkcLj%}(tvi8XDdr7Lb0rE6{9g)~F0zcpPEIkL_ilK!)lnF#piGTPcGI#vvv zgx61C?z?By%84c;ZcZJ%x6a&(Qe8T}U*qA@wGs#smamn;hi#7h5+?uG1LN1J(i>Bq zny(`|S+7+ecyVpJ*%m3HjwzC@nF0HhF26co_(KePRuTyO`GjtBHak!EJH#DSJUJYk97}}; zZ~sZe5t}(~G02sz&X-z-X8#N%3Z1wSQZ1HtKnG-mn*B!tw=?8#zNJYReTxu3JiRHM zaQV0)ECwc)MT8O=~rhRWpdepxaBr%i=eS} zP>`7kRq$-gfAG)i_#G?p{33CX@**kW=n_E9 zifoo2ADKsBSsk}boMWcT5E`3yBukxU%nCgHSp@_56_IR0AGjdh0{*=oUrz9iZ+!GQ zz`rNq^DD}S%s`gMIjhkhG2m&+|4WH5lXG*8hIX)A>CS!&=Arm=F>c;0?J-g;vO}zj zxm7gEO97yyOLqU{?Ig^)TJ&Ncf^}%?b>AU8Z3gTT!+dtumrCB(Md2@e=FECNEQ-d? z_hZ)5t$v5x$uNd~W2n16FC6oYe|;l^)q$}2A6vEk^;(+b|Btorj!U}z{>Hl7J1d*o zHZ!%Q=5A``N^#_*GRqNe+=$&xwKOxeT$HAWi`xNi(8?@LNkvE;n5HC%<^U4}o(rve ze7nET^ZUJC&ws@WK3<=5o$H))o$-D*`M>FO4T;oK8m)KhG+y|-u*zVz1*c@FE$bvQ zgMTg4Rc{FdX?u?txJ}#xdAi{zP8F(mmeF9AUI4&}q0s-9l>%nkwbRsP;iE|9^PSKW zc%}X4ns4l1e{b?Bp*STphp0v?Hvjw{bC5#II~f5OS0+qqpB}pyZ5^GLM3jZs|=qO zb#eb${Ac&)N4ukgya>jZ-``P@Dcs-I|siw99(b*lhqA7u0S5>$^hCxB6v|F0!9A3+3RfdXKSX+n)u9(y^@ zs`CWZ=Q4H){8S^`JITRvs_W&QeH>UPRPfUXApo()OW{^<6Ad4*#Yp~W#81j?ap7$J z;^fDi2~fWvPniiSm-qA>4*D0mdBCo5lzn#oi^xSMbE(WtCY!b44Kc1E9Qg@Xsm>2M zU`T^Ps9?TrbX|S1m`MLwMgff53T7v|jvV(DoP``G{zdINN4%|TuhXCDskl_n?1YP@ z*-fKafCJ^m{kmSk|F#5BYudLkXIoT1^&5-%&-hHl2S1nZx+R>GJPmzJh-{n}p85Fd>InABkx9-MSa z+mTu2)H!|mri)DruUe%sWextkhvzRf5(lodZl+_2F3b+=I;Ky9wQkRC<=GlJ6Rj+h zPd+t8T6!1;+rCo6h@yVtuMPD3yICBxW@Lw*MXm){Ht7;K1alJ z&)H#@+v2XlUur}Z!}1o7#`&T2Y`@+T*UJi+aErPlsXhd>uKIpmga%|7F?Wn#)^paC zmod(W7fU3`8byAT0~NWyFrv1R+dGw0wsj%TU({ypx0T?p==ut@qJ$UaJwkqcU7qy* znLuQc!*1QwCn(3=N{$1LG1w27nKs&9`x+lRzs(0m;|khZ7yMPmUYChkBFQSMEts#<|r5nVgi`4|B48O=>HcICWPK+u4|3OkxaUy0NZF|mT*MtJS{00 za8!{+gN>{F9Ph9F$(*4}$a;%Wu>{md(?6(>{z;1YzoXoy#-s23x)CGtRl2K^h~HFU zH|&2iZ#jEryAq>4Z=bu}I_T$fjg{Mit9UrYpN=&2hVcq;st@jka-yJrOF#U@v|V+? z=YI{wBsm7mUBBQJ68TF~PoAHTX-Lp313(_ZaMK~$-N?(frICilU6OSAD2az@1kIX1 z>5Fnr?J_4PLmj5hKtA46;MF<*eTCaXzqNGq*o~$-e7hUdtd*7WPkf}o%VS~6Q2xy7 z!*`9&P}EMIRUf)_eU}2dLU3f0gv$=`jz_0D_g^i8$#bEx# zrK0uU^^kBW8J~RnSkhl}_n9<-blt!2+32#-U9XMg>}R}Lkw$6jGutM)T(r1Hzk4{l zWVM8Z?EsPIjZF9&aD4HQGW5CV-5I_z&Snt=nQRWTpQ~|6W-fp5_ZI7#;O~xobLCrn zpDyks!a{Kt4$B(m7Z~G)o;1>40^E%twM3pk#Y22zOo!$o^~X|O9T@sdFy!m&Uswgx zuiRQlUT30ELe##`I%yKzpu0ZD-1T$LsFd~k7bQw7MiN{HZ%&=U^l)*F!HPIB2xH3JfIJ))sC!V7rR!@TbEh<(ir@1n! z$bet4Q&17T9`eK+Bw-rzi4iiwUhKEo}XK>{^|ro_mgDNG=`AX@6q{{&su~Afb{x2`t4hZeBD@ zezOabEKjtnydihAj7?+qki$@p#{j5dJmE|uKAJE-|V={Ltr`2(EB zR?bxl!zu~czYu#C>zo!K8G3D$_2Y71giW+&bjFz60YDZdVau1#{|cq6&lV&;-qtII zz~@k$);C4^Jl%%Z1x&uAsfxA{*N@yi)?GFSN(T@D@GdZWpz-bM*yNAKP9Hn_vQ~UP zy|G3+8?gPb`=40jwK}ovn-)ncC3!0KA7JHKm zyAl9qclO0-C|Bxhlt{knhr=gs8n1M)A*Z4Iu~p*$0n> z{R3@N(pYJ5=ePB%TU{;~D=?a|_p*#J#qNM+6clVb-_6G%K}Gf?AlrMJ(?2kI5%Tps zeGzumf^db4fMOhABfh;!+vx+OfA||?ALO9+=8Moj9FMvK@woV+ zS18-Np-UWBd`~dNGojzw*VkH9jS~UA9mL@RDP8xRaA~o!l+pWNsYU^e0^O;)?43n` zroNC#N@#)PU6;?aKWbi)w5Jz($u-$5)(~9vaOoD?Mz`F03#sVsNSdQm{e=YB%ea>R z?ZbTaSC1Tgw6%e0t6${iWBSQ%E7rN4KF5!}; z3}vwvS|zUwHCI0CN;U5U^YEtdg&__u=Jxxd3Jg2G@Xa9?>V?j2#MO|u*T4wFKS_Yc zp6dcY91Z0ei>AQyi4n6vBF#uPLnfw$mgU!==xIoca%-R^w7SmQ6CCsT_oPIraJAM= z$?&LQNciVV2bR`+n%y@*g?ravK71+lmT3#-ce8fJ003Asx`j`B`0|-~)RztEr#oBw z*R5|)Cj@SS&xg=~5w{Llp#?a9|Ej|RCgBq*fJr#;xE#Co&R%5x{@$|Z6hAAA{o88t z6|cE!cp4l@^tra}t2Y9^#xuih!$!yxtll`*pmRe5pwrH=KwgvDAeqDHC7D4k1s?sB zbxG&tovg2~FKGJiPrRl*jaa|pi`#Q`olKa?j`J3mS~UTG2LBSXZCbT_!+Oa5C>~2i z!fp%+FUlbwsM$G()8kTOTsv8Q_RC2q;Pow*(nU5FD zq!D(;$Ay<>C@SA4Ly?m=AqTGlGeTSme{<|7C9r7A0?6I^GxLm+aqa6I9>I#Uw08jx zg#G2KGZAP21d@beaQ#Drl~Uaf_T9YJ^mtzQlk1-T2qi6G;}9FSVj$r!dS`Fh0CWn> zC~0pFm++z6TS}cJF|!wcIcY+}6hc4OcXGK&p$<6(xcBJ@*Xk&G_NGgaOZz|OdR~Cl zf#5GM#{pPCMbi3Acwp-0ulbvM+kKQl6>aeZLV>;1Gfksz`C^FX z!)*S1?x}UzQhCL{ypDl{t^VAtJibsL^Je1G4Qosz^s|D_0!I3?g+1zfl1{YWWjJNO z%jBNH^c&(<%)f-ptn-4AS3(Xt{F4y9Y-70Vxa;@yD=}haFi2&yU)%L=9HIT?YUiZb z0b1`h-Yz6C85fVf8>6L&j8@;qDTnjb?-?)pmJwZ)6(-p*ToJV zw#RZF+ubixUTQuR@}OeV1>J{o#XG{eFP#{|`Da`qkUxxuu5Wn0LNZA6Lv0`cSL_z% z1kLB>S()Kc*6T;hw39b=aUq3|eT6wbcA?!lKHiOY_Fp>TPFq005PT7!vROQtP*c;|wY;V*doj)l zw!jY<3uks8cn(0dnZ>bsT0i-n5(M%!L3`V-=`GL1RPOiOWv$tmV|-%2Thw)f_^7M0 zk4E}zZ6I%VaB%xh&j$1!-pVk zyV}!Gt2v zoTzOH3*Hhw=8JkU?}z$Z~_DbK;ysAEo2QXt`qtDhr51zP`_i{M=8kbntv?DP*bv)w%%89 zVWp3opX^`tfhu(1g^#Q@^&LP$DY~xXvZrv~pboF#Tl)~`W`AOHxE}+A?0<{>T@C|c z@r%mBsbj_IS+z%yt*_#ultAS>ht!yce90}#Ry{hDr?f&-9T{UrOiNg1p}B2G_?S5w zBYK`g0v_@rJ_|(1hyN$Awtg4?25Y;e!cvm&4gTx?M-F8STL*M+>@m3eZ2!QkNE01Q zt<4_I6%HlDL+jE%6xWpCqSCgsZO6-I)StJl$?cP{Zl9A0MQUy99I$x~TC`4m8~`m^ zGXHCaZ;P=@d8Qi7SBC9*=yATq2Xiz1m`#nYTO1zQPIf(wGL2m3H{gCQKB)Wlqp%_y zXk;sDg?? zXoc>I-ryjIIM)LdlhkWPBjpMcsu;fAL)s60z)SY| z5n`-o5gTM9f2K~jUk+qTIspC0sMciO$R{0vXhi0Ntd^iWKcgP7){rG^9I#R_0hF(( zx9Xp*T_8CNmPGU-;ly|st0#d-C#BQRBqZ;qBx{VeR)Zc}5$H@aPWB&(&*;EQ$@ zLt(xpHI$dzGYS0ZwR(#XH0oSAVyrM;vHETIMS(I<)h1q@lh;44O?RleAv9$1bq^G? zs$W8eJ4Z@;&fyH3=3muxol{ouDF)F;_=R2EoM!s6P9COLSNt*u%qI9Rl@ZdGtKiSr z9DQwgMqY{8aY1?T3}*Ugqj$fPqCs#lvCzJMCFHKl5x_bFxP%U^tlAJ8_5YYZ$dhyp z{+d$E;V+T7Y#(ZV*|i0dztmK>I$l;i-e$r6w^(E2h1u;MN|Z%|UC69IHF{zeb)UsKhV!rQo2nH@UH zIWAcimN#8V^$> zt>Vd}n$@3Fz@NT;_P?;rtObVVGXlfWqIAaEs$(AJTHbB#+gdY;4oM>;XZ;u!LRa(?jE-m^mb1U7@bgR{$4lum)l%U*z|_QF zBLbp#)smdNl#5GCm>UWWutu+l1tpQ{kRQBV{}{X~M}PbPS=G#c;x_>O5V2IzQF(un zQEfV*?A^Mi?2qIM(;!B^!7^x)ne&elH95VX>h~Z`KqaX}8-rRS#Dy)H|Ay3D{7K^d z{WxNXYWV6E`9g-UJvAd_cV=MaU8J2O2ibAF2~I-YOg5KI}**yu8)H zw;jCF1Mm{`$1KUue%5@VqU|Qeuui4+M&R1LF)C{mDe-~FnybMm+Yfe{KfC)I_lvgF zaUy?VJ?Sz9-GMl|uOHPk$jZWD$N2{Kmg2qemhA*^x}KS1{roALta}_nxvGE4eQ$k! z)Cj9_wryZz@m}y(!OeCnGdHYpBO};ytuST;&YqbEJxi0O60U*SY@Ht_<{^}^4 zD{UtL82mOvx~U5_dZ9}x>9b3%f)3YSGd%ZqLyP;5{g6(yETyoKCw_0AF14)S)FpP? zgmSU`G*OZJbqO3phnP(>Nfx3^i2Jr$$lopjx{xq?pHOg}c(&lI8DLS8Ohu+2DgS#X zKH1_I7Wc*_b=gCEIPymgkKZZ*FiKw)1|-Ras7}>O?6xVT%{9g}b$@tgy3N(#=vJnQ z{hJVx1o~T4iw;Hd0F@|OMSx1-QN1ptu5Q&u)Wd^=b8L?{1e*}EuZM%-E1$q*8%l!qr&KE&Qno*cTknO@3phn3>2$KQ_%DtSaIv7BeiE~Zs@ zm>k-~4S)$EFo*RU-%Mu^q&bS;*G_B2nb_@3PfrM7^JbI>Tu!puM}-&_xh-|1iD{Vn zRtuSvH)61A`{33BO=B2&kyltp+;Kh^6^zg^Qqpni;5D85sc3Vab?DH61{= z?&*2hx|!e7OIl4^$FZ%J;RNc>XZ2~f?9HI>rkKt&l67@>Dx!8W%J!PuNftw}3pMUq zO&D?6<}GsJ=9oOc+NXft=|akXEM`jURo<80XX`6Rbv<mplF`k3gX^p zUh`;WT}SoRqp9z|w7X3Ayz?$`Y8Xp3SDZ?rtAXI=q&?I=J!~s>8`RHE zvEZJgZdybZj~g;ws*5?3mV7QxEWC%BbggdD?3-y}Sqdn}ccLS6Zk0}_t|v^>SBX;- znZC-R4BX7bYbmg1B3N^rsbAJML!@El!kRHY;k&HPt3&gqny#)hC92gKM5%+w&&dGhZ}+2|1Lz55hF->X{nweD?8KWO>9(^z;Z>Xae2)Tvt#}kv`CFThn(;8LBJW)NKn^tB=wHfS< z>|?{Gzd>i-#R!Wr;(9SxJR`&`$;?YcO^CCUlOwGX-e)%&G_GgSCZ=!8*974S-_!n5 zFut8=7hX6Rzf3L%_P zF;bdtJ9mhs5Z-*3I5SkgCno-Hx(1a;wjYE7~)JNjF(HAA*CHC&A)z_ zH6E*(jFW{U4wWx}q|no}*YqYmebDzlgftSPgK%MpGhxS4D9<8!*vzoQ3esm0;|l1= z&G|G+y={r91>V$#^Xx&x*q1V&P>f&XZ_njcdmd6f*hA3RJR{SW)VGe?e>Q~OGkewv zM*4WhBR3eC_UbAHQKu3lmJ5Ok8&6YwiOno}XQ~o!Ya{i2Hj14JJGk|N3?@cx)B0zR z++xJ9$l}K`;?XT|yU9j6CQbAPEgngXDSaoO*Vn1XFITsF_Mjs4WwWSt)eO#*t4Qh| zWKTnmy}Irw9)?1?_Di%c9yZ1?RX0P6ieN`(-$pfrJN2CIsojnnXdKU$KJN=-B$_%1 zhxNqR#KtS+s}|An_3`~$nL6{&RAZ&aHVA71f7%8punnC2kPIN_v`>dOweL+$m~_5B zp)ZUi&eVu~7kS{SyF0Fs3lA9UBWv&JPO09H5Kp=juOEA=937#yDLw*&b)LQrB^`*n z5Q}5y#+07R;{`qiuP`GJ4~V~8l$zIvg377a=*W;LY67^7IO_cw%B7Rnl^sPMluN*V zyST;Rm*j*#&e2JDpP4OfqjdOvys4G5`F?SXPMn$Ev~Npv{)$&AJAH~fJdVXgs~r@L zt8QK{TIOxsQqX?Q&w+7r65)CDxpK3#-QJ8Mlf5tbF3u(5Dew|+v4W3QrUs23O3~U0 z;_tcQR_KF;ZFPrQ_NMU9WmX)3HPKYu(P6AaBza1hk9nVKbbdg587NVU?)m|?zErru z#}S)Lia_M9=m&fQx$o_-&!v{%4~@hMNy3#BQ*i-fx7U5gY{$*bOSAv{5p$ zzOlZq9Q}Z`=&Hw_aSx^(Umi!g@paB$l(^$JInYX1BfGaq?C~2aN9dGVZbV3Wk_G6bhWn{$<&`t_S$T`5uWoKaTlgb z^o1{(E(aa9N@J29G|0agkH{8DTS=Bwi0PRJw6%Oy$TM*KtWk|S_N2n5v z&Liu|+h(mcoG&$oz4(YJ@&aTmkKDtpAAG2w=BfBw3Ut@_7Sh)(cjGh-V%_&V6ZvnzFB&yM3!Phpu^cf3s3@)K9k- zsNMh*YT@!XFZQ%Or8jFb(;aeYZk`fVU$%o+hcA^b9aISw$26IoROM8~%$>ytOg%XtkDQ%WS+3o5mCKSUfoI+kYRt^+2Ama+?ix}r3o4y8QX6+=H=now8(VmTV zho&)p5x+hE8Hnrwfe3x}@4VO`-fGnoUPlM9C}CqVqBI%3=`FgR$7+2QV})e!?*0_Z|S9i zV{F_b=Ave>PJ(wb;;hfR$@!;wdf+yq@oLZ7@SpBJ5ri>rvo{f-fFbVkCPVLh+Ztq7 zWP!EU$8tA7HVapHv1hKW^BmXF`!m+Cxxvxo>I@JKd{lrrQvqK^p$>BVvMJnszY&AQ|hbaLke_?7#-rR^=8W6 zuRDJF^0mO1&)zmp-bZ?~{QD>a4z02Et$$x?FZ~_zQ{&Zjo@2Mr{FcOr4H)9^vb)l{ zw9Oq1!l*`chJ9c6K290v%>?&=5_hg+i6q9BY!bFJ0-6|b&Op{sG34k|AY3^EsvRWU zeb>}wl{mBI!f3s3GU(0mxDYaJr984gwTJ{>TU_nBLO2(&`{(yW`D+883@!u55L(`> zapj?RPOi@2!~iYpe;2$A;syVrE4jtIKz-k(H`bR(8nr`jPGE?8a9d4g?Cq}V6_ZHA zAVhByF_M41CjMz19s|#4#RK}fxKJ-TuM`5I>5seyM&Rirc;Y=rHDy#EQf{LO#KG{Y zm`=P#8a2}*{>OFgzX}kPg6q6=SzCY$xI&ei_C-xN&!3 z*njv$g0Mm4tT$@o{-@{tWruLHRuSyjJ+;L@?17ik-0jekIG!w;Y`i;YODw{Lsls@p zDavCWPyF-#H2*69a_Ye%|2*<{-9Ou21>2oR)!h;Qeb&7H)>6K+(^KFRVR{-5M?-(c zV1M4v{vQXt@SJc3R-!b-@03Jjtyj_4?03APZo;ZW{=;m7(ATYV>k3I+8He)&^> z%1ZtFtV$+yHyg>E99{+ATr;3^(k_oA<&pY+pPHbNF?C8MY+69%I?I1=2tiFm$q8$i ztK?%$)+^|Bx^~Vu!)6wtdHv?}u$2G(dK>j-V$p$PTA~_QXvZ2+q{>XUitczFX{gRr zbeFuvWH0C8lSChASf>>snFBNLO#JV!@FaT1p~1fgbo`#YFMMG;Pi00&g*d1~64urCOx*-LAri-N$u?43g>0&!fQwJ%Tn(W; z=d}HIUvb_bE&1=q;^SA(aJ%b=BjdiO$$b~7%o;-H`cHl8VJ+%a-;uy|%P_`>DyT6B z*f>!}a?SYO*9POcJI;LZ{2mXkYvLg7#$re6Xye&(1#wadQVa917IV&J|L39n7&^!$ z>n^Ct2cgS3;nx^3B`OB+sK7$o)rHRz)ty87a*5MgsDczz;&+UA_=x9|PzQQg8dOK` zWY@{AsFuPdJ4~c8K0mFCA6B=9#MIS^_sfYcaQVv={L`-8%osxSE!uq_Zsnd_9_kuPsof`45bv60wV2t=Ke z=5e>{lN98J{Jq~N%ou_ z^2J_F?N`Sh7VeX{x!D|+kQ)D(gU3V#Q>gC>y{)n@h~CTN06Bfv zQT0<0NDODq_z4Y_A3@)xMWcYy3hc*9@C%Q5;XiEGAGh>nz^DHs`ON*;#Oc7&GKA!X z!CZsaZzRJdkUzS2J!k{ndlHND=>*tT z&HGcBe`?C?<^o9$U3>Qspn!QbbrnnEXb8lE{=XCBB`uA0DKY%Ff78ex8(cdUP%VCK zDwW7v%zfze^uatxZ&vxHd62*xF^^U?1eMPPrVF$J0rD(RYeeAfT5oBH{W99l**!g4 z0Y3dzfBr>2b3gtMefsWj9um%xy`1v);yOuKSGy9-Q1mYLSq^$tzeN10c)h`0;MQFa z3hG~u;7~jTh(|mSZ!Ks_{!^Gg58UkLN+hX%%3~O)tovZvooXX}ow8C8kgCitsI6oO zM-pjYffrqE!H&y2);5c|D{#hHxHc zvXSF)=uktA4FAthrc&%iSNV>nFu$b1$%h;jrw$A|Pmb5NFC34}Earc_r#typT=p`g zto+!(p#$;l343}q2z%R=4nIv!4p#uHujtSpeWJe5`0U9*0CvY%afUli)sPRi8xbK@VS+tWke#jdRW6c*S~g z*UE^tvU|x zeW>El+3|~Lnt||5dsmPlWt<&^Ekr!mIMkD;UB} zsL%3zhem$s)g~g%*UPejr~nJ*ik>vOx28=ouJl{*fsKTx>owA1gF{xSZ}0+rK4#!bNh7N6kHo zDW+)^4>j-v&joLhp!cv_^ki4pqx$j1)4kPOopSplg5^pkLx`4wNTSj3 zjrWVtodv_yVzxZlLq{d}$Ktq}I={c)Crj^H*yq^u(C1;oKbM#Ari}R7y|L+(Z^M>b ze1#WEapyZmc~x&VgplnxsI^={Gc62$Dm9cXzwoo!0m-t;-zJMBf}@2k_w@*3+-%I& zX!Z3yCEK`bc{HQ(5J597d+LN85uRauWkADjyp~B&3>g)theg%rmwLurVDKuqVR@X8 zzQy{Afi59i7C#*EcB|Jtztf}kubs7f%&I24n*=#sXrx!D1et_@t}>j_r;r)E_#7pm zAwTtOZk*@zQA>fAR7^Ux7NqS`{6BA{6Zd4<3l4oKA3!cr&KNvPZdws^Am*TnuS)$V zR^UzqvAXtHGAkVD^mRSRy@45vDTtkieDs@KVVGQjorI0bAa zotmTTNy$3ku!^gR9O0TbHXx8I!M^FJL}Vk`N&HXrI!e6@*|?^~ryuQ(b1aRZL`=fn z1z(vwGB*fo-9p2eeF-9~;z#pmN|t0y{Bccu#lqtuR*m_DSu!-iv+A)>?!a{#bWhR! zRqz=a0q^5j2-l2*v+yt$Omgr7;T+6hppoll~fF4PFP%iA#9&t{;)+|wD#eCvRWxND| zI?zr^a(_UNS7H$o#uFU7V}8TL`B%un4D&dv*zU!X6;xuDqp6VHY2Xk*fejQAM?d%` zj89>O&swR*NAVA^$JSemZY5V{^CM$#7ZvD5Vt3=M-aWC?N-}#nZe&?vYnA&4G;9A= zC8u?U@lzYthNqA+CsNM7?%J!XPY>3Rx524JBCpygy1RBlaSntw>bbS%(jv2$P@Bhh zLnga6cT8ozl&`n)yrLhgc_C&8t@jZ^??AIcM*^0@Nc%%1xEp%6Q*HmXAoN|m+|uV_bs8xJT!Sz%u` z9($SaPaiD_i{PCJcBt)1R#-Iw0w_1E!b(ADo5IRnR+o;Xe~3f7^x?_lC}(%$j1JeD&HuoZbD6G_pJ*caH2 zj%}(%J+1CK?JL#Y8$P9zOrYq)$F$nt>d?|AHgKzU?-YCzp(`{nE02|Gc8buw{tkjs zb86Tw4w8+Q9%|%=At(W$Ba~^osFQHmrjv(NCNnr=nf9J0i~y>SG*atHb{rQWW@+Ld zywe>V#X5Z@bJj3RWDSw|0;dnYIZA>waVcUvKm~5!q_nmpOfeUwvldEouuJo8Y4|{b z23@>TV(N8{Lr5m>ZooAzHvfmI#dMce!)EZ0K?crAl4CwyX=6AYmFDJX3LR!7> z{SDJwyFY%8A^V}_P-y`T~WM61}FN#?hD{$X0_{jE@%_>N= zrCRhmPPzNtFw;uekRjA`wm}5p^b9lzW}AdxK4p9Gm@cePn$KE0*7`(CTqCxk^$QnA z`)W}gk=IGx0<0!ovyR&eBdd-F(yO5+CU6Z;OJF;*_BLinC1v3=@nksJ(5tdQqdr?* zTyBLaXrb#q7=M+)XPPlA8b6sEU?@nkt}%X3MI2jkQ&N7WWKH*U3sB>!h00J!#=9A%t0n0P=0HRc^m^RUM#ZUJ0x&q_@w|p}s7U?;jqyVo{ zJ{tFF_&oALv_d}S`e4h`;iLOJ#1#%mrrzc`tgN8FiKd2?g=;BVW{ zp|rA2M|+#VDf*+2@|~MfGi*(+_)V}*U@hi=B5T|+Ul9xS9b}#4 zl+Y+~{LKY6X!ZqIsZy-JlOJ5okaMHj#1vV5wG->B>YW^UBZPd(NypO=X>Lh2Ovl1$ z7F!%Ur|Bd3`n55GNrHj=5rz7V8qTxZKu=c+>fhYq*g0tKQAH7*k!*tBa)Y$COnYZn zMnXb;mu7i0y(kkIkwlA*&Q~)0Fn}-ggV$zK*nzBvipKfULSc;p+gij(P-@SA$D{L+ zs3MAgb9)oN>y5dV1C7&uPL!$koH5eM|MoSDW$13Gj|`-wU9JkEV7hysMzp_?p}M@;qTOq&D{d5c1H3@W;Shv)f`0&;dd`6~LT=UC zorEnSblrbrq2UemU&(NikaFuuHY`@HMc40#Sa@0;^8G6ZfyT~^U5)#UE9jg>e(KYTCGMP)dVxnQdv=u#E=kER zn7+tQCfbYNt5UmWR58Qo3~Ftd4TS^8W?=sKr{sMai4P@`$CEZy6L)bnkjXu=rU$ww zRUGWR6u6p>83nLTHnbf_^t_m%iy;Rj(3{IEY|w&~Ll5{_HDThcVGZ=RY+HvRw&Avr zuYzwb^T(0Z_N-#}xyxK9eX|BpDQH5qa#E);%^Op$PR)OBlT4>QAXJxVQ}dwh+_-vc zyT+foeJIoC2nfBQjvw&mn65os2WugL+UU#A!FtX%hpZi=u}X~$iAE!h^#va*>w~$A zS?nsm>eC*r>`LFY!sJC)h9rhY1D7~#%`2q}PSZassV}x8+d+X&=P>c80Pk&EhZaS2 z_Jiwrlk_n=2SFi4gxB|o^x-I1?-D%``cgEHu`1h6-a_nFP)IN_#dbD`zKDHe;qvPC z!O|b{%Ym%zMaP^A;0*H~bGbr^DRJkaMsEG)POvtPZ#$rbDsVbKaP5P`B}~;*_e_&= z!$AUaWMLn*q`zZ}kPS_2>KL#15dVyJ*{$Op#ot{cBt5}W4wf;})-%!ZA%4B@fN^Sa zY zR6EHXUDMG=kJ&@(rrfrOn%q+EZ-CU#KN6CTyN<7F;kgNA+gk`Xl=TM&wM))nhEH)6 z4Gy&v+Yvuxi7)XqY;^KSt!+Y)#@L(sFusaXrIqB|+^)I}C;b=LWsq z1w?3wG^P<(;$zNQ*frR(+$DD5I!9E>m2OYsSV9Mm8aATYPtD6W`O17!P#LtvLPs8# z!_k#D%TzgmJbf{r;_M4LLVcYF5l?N^4&%FRo71wL+v{oBf|99FHDBjC`yeRu+SLN( zl6vV3j$^B#1R*NN z0ZV=cj4o3b)80x{Qi>@@(EB6sERh~l`lVg-{1j-VGKL=CL&0~+8s@3yz!Zvg2>$4F z9eFdxhZ2h(%Get!(v`h8hpwEjlQnyLQ;@3)$S-)nGOSj~WpuR>b<#z(4_X4hsX|IB1!u48}Z&*$pDWvvH5K5|Btht%S zo-q&Uc*21(ml4-*pOa9a23^o(ABPRec#owAP&6mHL>g{E2rXl{lRlyZv>e!aEXV=H0Za)0#D!R{wL)Gq+yUD@=fb_Hao8a z1#7GCep*>$5_E`mzMJG8cC}#5Q#-01KTt?@s#+j%L_&kaDHrEGb8^cQ=<#bCdMHhn z-RPv6VY5Y4mRc6Y=_?Ib#}<%Wuyc%?b3#JRELCm*w#Pe_g(vt`PY$MO1;Ec#o1lHG zDai>U2NQRSuxos#nwjsR(y|3<3DdC_T2G#_O9(s~bMU*Dp%0Q~y0Sg2%(0%#k$9XN zrPigTnbFadC7<7zqsxHbQSxkPJ(MCyv9jaAC8iKdYiT7O1x`n~12~-yAKBg%Izof* zS98`*&nz`3tUYBOwfWnhQOW!ST>}JD9|H`1r(qekD zL{{z46&`WU0TC!F+IEqF@M?FA62cGMn1wdxzD2<+a|qgpoQF0xBTaHMk#@GSzHCa$ zm8R2nIx_j3JbKZa$4X48W~^hqA?;dIzrdgUgqu6~yN%~LxSXJBZ#^a9p~SzJPj)%l zskgX;8|IMq)U6Ohw(odo$SJkeyJ#tp$rU~#z3Z-h&l6Oy8@|@DzQ%i@WasvXO^jI>!)B9? z7FyzR!z#Hc*E+g1^3|;(M7BV=%@U^wReOCAJDBNdjpcm1#!a&()^jKr>(+g4k~TRT zSxFLR(k1rAzBIRZq+`g#DPCGBvETtk4KP+18<*e*mK;0D2}mrM3KsIzjqpSr%&g!M zrG!Ivtgr79csZk57^-KZG?cpawFcQ0cqexr(j%45+cP+xwbfwT)r|vp@p*e@t!s5O zlb%kA(0tL#T!qPl;hV^60{=|bL_rwIE&8Y?@lVl%tAx1?0=<_0ps{SwI|&MsF!nhr zc;xw>R(g>cL)Mpb@&=Y{$RcFq%|uvqnJsEjUzs6QN_=db-)8+s%OOgUzBCM4pd*!i z>x>2sI%<+Tzcix7-8_+u#f_QY)3(0G`6L~*O>p<9cyv*!!RW_=)N@zdNPMQ)YJcBkLfK-gte-I>6`!>&+F4AAmZ zo=>8JM^iU;Gq0x7<@V~+pi1sJV$PIKtZpESaHlu3p0j_XMbu4Ss)kG2hr@b?eYAV|rd>oz>K8LTMsuV$}l1WrR(TL1i zB2yR&f*^!R8HB_Dl8P80fJ2p1f(QhV5I_l|5F$f@i~&WFFhn4OhOvqv5DZ`-Ac;x7 z8?CDDe%-5Ae`~$ffAs3}S60>?_C9Byd-vYwx6id~%!VHJ_K)K4k*ge6raYdEb~v)zVP|zjEi~WyOrdZNv}w<%z(E?gzgfl@Ma;i=^$0wg60kzbS(h znl>=}dX6ybt1f^dpV_CpG3bT&su9C|FS z4MlR@Y2JVqjs~>3LhWdzro9vxw$6)a-56!BVpiiWG}jNM@QhjYKz!bXOSIwX_44DQ zadG|n9#I~9U`cO`i<-mSST-C%nz-k4Os*ZFB{t6!GzJ$fyjWRx7?T4!o)-zuS-43* z6fO|F3|dGdOR*YnCsS}DDIK;MgQo$l>rOQ*ME}|e8$_TbV`Wfim62qv4l2r3+K9Z_^ zqQpl_x9V-6Q{Vc~YVu?3FlS^W=?4d^_DV?>?ZT}s9j0dEkH6(Mh7r#NJIr&GqV$*W>RW_L{P%`q%+NUZq?0)8l zRXmZL+#|r}WrjjHkvSX${7|j=c^|ZNJckqFf}N;m%&$J%2_XyorkkL*G$0%{S8Vp1 zJ0{~s8buIz&#w_BN^%0?by4*bV1kt{5ofur&6d+Y zX-&#Y`vh+hn#cG3ynpAoo;X--ri~E+1$F?g0`p=cCOEj-wdUT9!VzBc;$QC;wYPXg zmWO^>Ov5aYY|dGn@C}J4o;+5U)*KL36KQ1C$YHxU`S%(C$~Ye=Px!jG+Rj zBJG*>aJpa1e;`(f?yE@0F}COUbBrNn*f3{tqyD{La6dK)Oi8>4WT=-iB)fzI zmW^7CIM6h@43IdBXAeu1v-71aC_ZxF2==6=rZ!^(mtvKflLDW(Qy3CPsb~*ZCH4L-Gx(*4iRCcJ~2)9>3Dku!Nw8 zbJ5--tGE%K9128{5Gq0GRJqLDwP0!CLd^siT^tuFeNva0M0*g!X*lCEUYIpC*U#!N z<*fnXkr~OKghX2uvS-PL|16x!c~v~i6q|7Lm?uMw8b1g1wO}!|Bobi|^?O2Q6g6HB zEOZE0bmw2d&4}$!4HwAihdA~Es4CLNPI_Lm_ZoK!*@8lsaOf3i{Tbe9!!c&u6)1bO z=zVGK^bzW4$oS28M*uQd_nNq|5c?TlNj5WNxJFyG8WCQ6sXb^!o=_7VT+Jl>(sS^c z|Gdshvfw;yy*t6b-1lf52J6^ z(S~9OE%k_#LF*^gX2uR$W{SZV^Kkeq^;+@ONkgq)w!K~W!T=pDpLwTzA4)qEF<+G; z{Prj0m~+6UQH%8>j9`=PyRJoLxi5$Fw?ZSSb|xP@X;60B-e{vQL=hl0$2FSpsolRud4-bj1(VoJ zU;ymO1^|A{GBpS*uk(e%$_iQ5PfhxC9h~VO{s6J0k;IYMeEKFj0$8xU9|Dk1ph#T) z51{1kwXZfF5pw_Lbz+GM_(Z`tX_#*6phO$i0dUOQGsJ%a|3>fs7peqcK^B(3nmX~S zSV6aKzxF_J?*9x(ow_+ux)t{sK_JaeN82-=!~GA` zEdV42-*j1l(*i(KLwvJZOt2E@X@SP}0efulfBRRcAjd|mo=<-Kle&+;Eq-;(8DO2F zhevm80$Ealg2tKFzu6rHkM)IjntY}Vs`&+x0e~`{yY~45|NbBK)&ByP>iGIE7VBT& zC^Mi6T3cxQH+A+mA9hsuxsm|XNC()nphsUR5V0>E`4z+#3HzD~oeoqtJ90L;Vgf?ZwKgzYnOH!K@D~EMkbKcq@wX zmgpbTM>pvLr~MBHN8SG~TtZYNxA@<><^&aVFcPL8Cy!6QjGmGx2AREdS{dVEGhNd<#50o+kArzbh`7aHoE()z$13@OfC{Q@;VA<*%8qS52ph4nh<3tpL?39c#xqKFU4= zJsW~?X|>CkLCsVfXlLAxbY!bpHJ%%|xQ)t{^Hll>WUvHmnhaHyRjydACxD*W&j&A@ ze&bhST#%peda~ccNA3EPTh>tQ5}u&5z?4~ad$1A^Cmv_MKFL2ev-Ccg7NBK-h)|iq z@w9IRAz~hP9duJCc@u47YjM50b#ADpP?#}!n2FhsRG<8g6tSKwu9^L2YF9sA>eM&J zBO3-Ac;7{+AFhxtdnQ>l?vCCL*w^)YIziY=nbXESkmB}uy$l^V?k=k{10ST<1i6$` z7xQ8~3USC?pzkegJ^3s{C@#6Wx;TqZ*3F?mguD`W{;Cm7cVwbG)1#iWHU&dgmE&^K zN83Y5Xa-7(X44ODayHoOvYYW&{{BuO0R6|7o%bKnY^#jZAX?^n<}V@ zBjm&){sgwrbA?0=kRhAAV(xw#)7d?@@*Dm|DzyN0Du%w2aRXR199(M=co!wlZhR)zDLzp0xY9&O zXdbW7qMIWzfB3%IE>4U(q<>R8FLm>z3;bqINLb`iqFbssgyi;IeB;ic9uENES%d#* z0bYK?v~AcG#?-lH@PV(&lD&niSjYM~njp-G*ol}cBFmXm@n~91D`@#O+@=-BS>56; z?eOVG+t!6)ou%q zmB)j}!U7R$(pnL`<|Lg4_knIH1vN%OS|(_D#ZmX%%od-PR&xtE$8K=lN|*8v6N?=9 zk_TKR|KST~`mIz@-Cx-QZ{Uu6CSb9<3IklYVv(ftW@$)y%}7;GKql49aa&e`t`B01 z3AVUV@57TVM@4VNHwdM5IV!IWyT3!z#3GJfJ81cco*xM!4$IB zZsaEFs6v&7X`MmZRCviQk5y%t{Tga*$IF56)zh(sLfHlk zcV<_kRv+-(eTUcC2l|MiXbF@C_*;kYn;x5=@{%l=|CD{E49pMmqy>U=FW@g!c5`T1 z@g+sKD_zmnYvD6GcC!K9Z|jXkX40U`@s_nGmcNRwg16YfVe#loC4n@n!t0CA&I+_S zI9Aov&J-{o1rJQ@5B|qS5{!Bx?@RAPuqrtrp$2>ljCfNv-jd|l1%!5RqcgC>5-$Dq z1j1P$XV>u`L1}XI^TWzvbl7jW!9u8hPq7gUbqgT$k6?cm_qHeP7ZK6#_8HWZifH+y z4fj6L5{zE8smdPLYd&I zy9BZ|DXFE201boeZlsc{xMC?4;S+zUrj;VuR;~x#JXs3W`=u6KnSZEU&jptG0`B(5 z`E^?2kwiBiq?D-I_lahRP(B8-taBzXWmgZ?xfXn?kcJm&la6H@GrJ{;33NYsz&f(B z^)Jc7O_V7oHgK^oIOJZ)-@@4}y&-d_l#}Br6jGHS41hDOL)=cpi-`e-!AP10x<#=~O=!WT>LA9SLS^L; zbP6R~`e0ej%>p>0j;k_sr5@`hEF^bTGAbt;TSfMcyn(a8j3iDW6mrtHCEI%?1s{;U zAKKdIXXC3+;di~piIoe@=b*GdYGjKq3Bc2eHY-dGuxfW+w(PDPuxGm2&VXU`Gb7C@ z8Knu~k%47Qo{oL>=WaYd!UwP8QOK+DmLC8qec5*s7bt%&g9uKAZxTM;0`7!AnT_b4a!23gw`DTfS-^SUJjS5Bkjy$_qJl z!WJdun9Q;vrT#laCXc`y{i>uo@u*HZrH(!NJ*dN~3j2O&8Zx23E)6eu>wEkz6qVc5 zlUoXSQy0ae#%UN>e}09Uk+V`VY72by4sFes>E{Ta$e^Cukd2?PF9z|O+GX51)L`?D z$pF?h8)*-r)LMj_+J%bxZjKedf#Wc(;r;nwcoO%O#vl0Z?L+I-I`-;F^wvBTP?Sg1 zKvq|uuA7gS5>$LUtas7@APCyvp5tuT_?0Jt}eK zr(Rz!xpY%y+U*e)p)GdI z4(N9m*SVps;btki(v7{93#+`t;!W+PoxS)wdg}sK9cb~q;Ox*ML-YeWQ+KfOWw}Od z#rh&7lqIVe@8(GT4{3M%FMW{oG$8gLuIL^wI(ur5LWv>$xV#QE-8>(%>tgD*ANZ5c zhrZ|`+iwST92*TfWAioxZSNT7lB!CK#fnnK!;|V5A`M{S;j!^y$Jub2xFpt-Jv8}G zkYy%**jYrzRBN4pq>2Z*jI#8liE0(BX2zTnwyvLBo*t9=i8c#16id1IDAo)l5>zW(cQb)aOX(%P_lkj!ae*WTnVxrivyClrbe>YEtmIX=&H*vvH68haSE zU!!s+ZM7#@WkBcJyYd|eSX)m>Or63con_Ug=j|@x{7w?3j%or8N_TGN^SNF+%EQir zhY6r1;50ZQyIXdkWe4%5TD--o6kWXbj@Xm3+J-K$T_D?IZ0{Xe5(S#(#*DPjOe9(u zie*?tJ8SoQU7WFYSS@ec2hv)Wx2uecjvZB4PSTFLYny zKzp4`IQlT6L-FzK|0s+zIh1*qbsPDOkM+KX;cQ%nL*1!3jyuKED~C0GbdS1mkEsW4+0NfV6czB&N_H3GLn1OXir0D!VnYy$QF}<8g=Ksy+x2Vz z%b{eJ!9aI-H0m1z?U5?-{M_h$y&e@}a8J8vL6lKvmzCw>zh`p1w7&)^K3LaEB}3QC zB8H1B7T;9Qr>j7*G1Z3J-KOBLSyu#8&{-Tb^;=-umVJN*53{Ea-uf2&14IR93qb6s zEU>+^-8pI=;0%fhU8p|eXddp*ebJrZCBcw}QYYYU?2-)BG#L{$RUTHIQASYqY z6Yyis`5O-ooWl;_J6m?V3YAc*amP*KcB&Y}yF~gFZCO6Z1tKKaa3nR6;+p78k+>X2 zFrJ-_Y6yfat=NaAiix@~@yAM8btM)_3w+19HeUXxUO=9x%j5!c8$9 z^3VB|j++T!*L>$ZadV>{P4I@@uj6d2dJ4HQ#NkgbV7bkZ5vy{jVrTcoB1Nqn=)wax zd4qCx7jt(d@9-Qy$}CkcpKt4`ce%{k$CCr8mXhwFPR(opQpy0Y7|4BnD^z}DzA1}b z*~?*3Dr|l#eC_=qZ5qKBqgNs-yy~r z9&zFa@NWrE4i-IV_9{0AzTc6!L8qpYLS5D!_AV{RpROudK0o`Jecf!#z5 zik*M-ANF2xG5aiu^=Cv z=Ci#6Fii!Yc7me+Iqd|pJRsGw1d_L)IR_xoP}Y+Tx^64Bxela&L2ojGHiMkA4sTk% zyPC8Nq_shhv^%$g9_o2-p8R@VK8XRw<+S}xWzbQVnynq$L-NiQMaJU(R#i|C-cLE% zzC?bDr?ATX%6g!V6HO|hbO*VTBEg+}9&WOl;+F8oeC;PmAy9euas;TY%k34)y#ukL z2+RtQZm_bFE9&xkMdKR-vDQ{Op@@W4q87H7>M^b;zsr@>zbdzp&hOCzs^JQ$fxSJ! z$Up!v8qX;?Dq*p)>p;cdE22#l!pDr=JYlxSOyA5D)Dg-`lxCnxOFxyHdgu5lPm2AU zSuaY=8Nni zYvuRe!wiXwu`&Szb6?d+K=QT#?O=u+Jcd3#p`V_jgKx9`eL=}iJZ+LPGw1K__>mt+ zEFlB0!IAKIX^WC>edMAthCjWw^s!Q6o%>Cgy0qm^9HqMQHrdC?jz@ROdX{_a@ zjty2Kwq~h)-7msGKHs0M>%I9|B5zR+H=7>;@B6Ug;}cz zu9SQOze6`KKU0T9%6+K5w_?ddz^U4z=Xf%gxwT4uFv*1pBpW7vVZofXR{=v_Q{8&D z+HfKLa*5tFf~^E{g#e=t*>H=hInt!kA+m^-d*_x$!8}Ifs|75>wWPcRM6Y;Ct&)fB z7e|-;HSVRc!wn)8RGCUO-p??5&{;P`+7gz#svHw#Wboclmxu}tl~S+tx5VbIse?{= zeHl{D=OHyG)XVR!UPQhdz3p|rC`)!Uk|H08Y0qzR!*`nXbbu~|8maLqii^`n@m*k` zJ}}J9M>OW%X2`o3F@g$Zg_tRa&0Zm%M0|_)9(>i{@Gmk?!j5H*ZEDj+S z3G{4G%~@pN3a~-oE`WNkcABvt}Uf>+!1={?SGY2t&|rLuF@3 zfN-5a4Y&kcDn9dhIK$CWzq2n+VD{IoDc$RK7Ky+;sncIk7=_2r&w_bQuwKN%eLCKv zT!e}Lv1V)ZJ`@s7roKS2sd5A>u_`+jxZl_vtHE3)UPC*3^YWY7%*O#PKhHX6H|ZOs zt`TglW3@uE0#DXrM1g1x8=6;h15IwMgTVn|8iV^(@;+5v(l-D7UeOz$qPq0UhCYr6f;yPdt%2GRS1NS8d~onttFw~ zDN?qkn!k)Ztts2IysYRhnDMd8HGTLaHEKZ)Dr`1mcbu1~+dP*}7g8gO8)q!1yBkKD zVfsY=hZ2IWVaC8U6>{4eR~-UMM!n6{R#@sRy_M}3(HrD9K4|659{tb@n8yo1ON9~u z)@xmD2s^F@m5{_?sn1@@$cy%CNom#Vic0AS8ryZU^XplJHK_ICpQbrWuimo5kubY$ zhp?vD{QKb~&$h%L4V2&d`S^^pT~@_)Wg#5^8hlW#z(OV~@BnIwq3|EuaUVB>%1t@s zKlKhk)G&ER83u^Ok26jn&czziqQdNF>F@P_ndQn?&rrzo6RpwrfQOK^Rrk?y&EP`Q z#=z)?4g79U)CH$spC~NVFVFD-{APBDp{iwDYgKt5Ik%2)QE2BFCJVIbVHR`r9}<_s z2h6cCO=y!t{6~)Wuks6grHS$7svyFI2Q7e=s6b*k_`~PM#^<0AgQ{6G!#D`f6EI{9 z1c^RB@`o8DbXL}E=q9m&bB6WV5@9uGJxgH^%4L=4V)<4!GcMX_1*`=ce~R029{et^ z-ZM;ozuZ=(u{ysZB~;HrO z<-CG7NE+e~!i5zuuvf*rp=jZ}poMoN8$)XH7+bOxX5(oMJl;fedYiASY*F!ij;bWp zz~e11SN5%jQjDESq>Sd2!P^X``ge*q1Q5VGhQN@t`hIu$SGgwxS2j)VL}WfL)3Zde zad}-&wQTpE(~B?L=8Xr3>PA#$IcO7aq+4fx3Ts=F1KZsl6Ae_lA89iJbzEhyF1QG2 zylR7$eW=nor5>?^QMLf6cbHX-TP~%H6ba9_yo{6tN*+`?(5R~^Z-LikagFI7WWr`6 zWc%!v4t2KPS@*0$GZ?+EyEp4JEB1h{k27GnRbH9NGui_12S}blOLo0pXX^Xm3WAu0 zMf$K8kY=*?u=|vvt&k?i-*UI*f|7%g^BhE=^<_vN=i%W{X=0IZ6gRQ$ExSIBS@J!Zn(!UfN=R?kHTID1wxHuYZtlVL>7;s>QxNqqwQ#Iak}7AA@fGCls)k2LJ#7 diff --git a/fastNLP/io/dataset_loader.py b/fastNLP/io/dataset_loader.py index 76b9584d..fedf8058 100644 --- a/fastNLP/io/dataset_loader.py +++ b/fastNLP/io/dataset_loader.py @@ -417,7 +417,7 @@ class PeopleDailyCorpusLoader(DataSetLoader): data_set.set_input("seq_len") return data_set - + class Conll2003Loader(DataSetLoader): """Self-defined loader of conll2003 dataset @@ -425,14 +425,14 @@ class Conll2003Loader(DataSetLoader): https://sites.google.com/site/ermasoftware/getting-started/ne-tagging-conll2003-data """ - + def __init__(self): super(Conll2003Loader, self).__init__() - + def load(self, dataset_path): with open(dataset_path, "r", encoding="utf-8") as f: lines = f.readlines() - + ##Parse the dataset line by line parsed_data = [] sentence = [] @@ -444,13 +444,13 @@ class Conll2003Loader(DataSetLoader): sentence = [] tokens = [] continue - + temp = line.strip().split(" ") - sentence.append(temp[0]) + sentence.append(temp[0]) tokens.append(temp[1:4]) - + return self.convert(parsed_data) - + def convert(self, parsed_data): dataset = DataSet() for sample in parsed_data: @@ -460,11 +460,11 @@ class Conll2003Loader(DataSetLoader): lambda labels: labels[1], sample[1])) label2_list = list(map( lambda labels: labels[2], sample[1])) - dataset.append(Instance(token_list=sample[0], - label0_list=label0_list, + dataset.append(Instance(token_list=sample[0], + label0_list=label0_list, label1_list=label1_list, label2_list=label2_list)) - + return dataset class SNLIDataSetLoader(DataSetLoader): diff --git a/test/io/test_dataset_loader.py b/test/io/test_dataset_loader.py index 9bee175b..cf38c973 100644 --- a/test/io/test_dataset_loader.py +++ b/test/io/test_dataset_loader.py @@ -1,9 +1,10 @@ -import os import unittest from fastNLP.io.dataset_loader import Conll2003Loader + + class TestDatasetLoader(unittest.TestCase): - + def test_case_1(self): ''' Test the the loader of Conll2003 dataset @@ -12,7 +13,7 @@ class TestDatasetLoader(unittest.TestCase): dataset_path = "test/data_for_tests/conll_2003_example.txt" loader = Conll2003Loader() dataset_2003 = loader.load(dataset_path) - + for item in dataset_2003: len0 = len(item["label0_list"]) len1 = len(item["label1_list"]) @@ -20,4 +21,4 @@ class TestDatasetLoader(unittest.TestCase): lentoken = len(item["token_list"]) self.assertNotEqual(len0, 0) self.assertEqual(len0, len1) - self.assertEqual(len1, len2) \ No newline at end of file + self.assertEqual(len1, len2) From 07c2b87caf002275b8ef6e07867f30ed76717ac4 Mon Sep 17 00:00:00 2001 From: FengZiYjun Date: Thu, 3 Jan 2019 19:52:14 +0800 Subject: [PATCH 3/3] fix version number --- docs/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 3bf42c53..e449a9f8 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -23,9 +23,9 @@ copyright = '2018, xpqiu' author = 'xpqiu' # The short X.Y version -version = '' +version = '0.2' # The full version, including alpha/beta/rc tags -release = '2.0' +release = '0.2' # -- General configuration ---------------------------------------------------