From 1f001c7d1aa4f4efaabad8aa99b82d60d42f08b4 Mon Sep 17 00:00:00 2001 From: tlk-dsg <467460833@qq.com> Date: Tue, 14 Sep 2021 20:49:39 +0800 Subject: [PATCH] test --- src/deepke/ae/regular/module/Embedding.py | 14 +- tutorial-notebooks/ae/regular/RNN.ipynb | 761 ++++++++++++++++++ .../ae/regular/data/attribute.csv | 4 + tutorial-notebooks/ae/regular/data/test.csv | 3 + tutorial-notebooks/ae/regular/data/train.csv | 7 + tutorial-notebooks/ae/regular/data/valid.csv | 3 + tutorial-notebooks/ae/regular/img/LSTM.jpg | Bin 0 -> 121078 bytes 7 files changed, 785 insertions(+), 7 deletions(-) create mode 100644 tutorial-notebooks/ae/regular/RNN.ipynb create mode 100644 tutorial-notebooks/ae/regular/data/attribute.csv create mode 100644 tutorial-notebooks/ae/regular/data/test.csv create mode 100644 tutorial-notebooks/ae/regular/data/train.csv create mode 100644 tutorial-notebooks/ae/regular/data/valid.csv create mode 100644 tutorial-notebooks/ae/regular/img/LSTM.jpg diff --git a/src/deepke/ae/regular/module/Embedding.py b/src/deepke/ae/regular/module/Embedding.py index 83074a3..a55590e 100644 --- a/src/deepke/ae/regular/module/Embedding.py +++ b/src/deepke/ae/regular/module/Embedding.py @@ -19,21 +19,21 @@ class Embedding(nn.Module): self.dim_strategy = config.dim_strategy self.wordEmbed = nn.Embedding(self.vocab_size, self.word_dim, padding_idx=0) - self.headPosEmbed = nn.Embedding(self.pos_size, self.pos_dim, padding_idx=0) - self.tailPosEmbed = nn.Embedding(self.pos_size, self.pos_dim, padding_idx=0) + self.entityPosEmbed = nn.Embedding(self.pos_size, self.pos_dim, padding_idx=0) + self.attribute_keyPosEmbed = nn.Embedding(self.pos_size, self.pos_dim, padding_idx=0) self.layer_norm = nn.LayerNorm(self.word_dim) def forward(self, *x): - word, head, tail = x + word, entity, attribute_key = x word_embedding = self.wordEmbed(word) - head_embedding = self.headPosEmbed(head) - tail_embedding = self.tailPosEmbed(tail) + entity_embedding = self.entityPosEmbed(head) + attribute_key_embedding = self.attribute_keyPosEmbed(tail) if self.dim_strategy == 'cat': - return torch.cat((word_embedding, head_embedding, tail_embedding), -1) + return torch.cat((word_embedding, entity_embedding, attribute_key_embedding), -1) elif self.dim_strategy == 'sum': # 此时 pos_dim == word_dim - return self.layer_norm(word_embedding + head_embedding + tail_embedding) + return self.layer_norm(word_embedding + entity_embedding + attribute_key_embedding) else: raise Exception('dim_strategy must choose from [sum, cat]') diff --git a/tutorial-notebooks/ae/regular/RNN.ipynb b/tutorial-notebooks/ae/regular/RNN.ipynb new file mode 100644 index 0000000..4ff8b9f --- /dev/null +++ b/tutorial-notebooks/ae/regular/RNN.ipynb @@ -0,0 +1,761 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "## relation extraction experiment\n", + "> Tutorial author: 陶联宽(22051063@zju.edu.cn)\n", + "\n", + "On this demo, we use `lstm` to extract attributions.We hope this demo can help you understand the process of construction knowledge graph and the principles and common methods of triplet extraction.\n", + "\n", + "This demo uses `Python3`.\n", + "\n", + "### Dataset\n", + "In this example,we get some Chinese text to extract the triples\n", + "\n", + "sentence|attribute|entity|entity_offset|attribute_value|attribute_value_offset\n", + ":---:|:---:|:---:|:---:|:---:|:---:\n", + "苏轼(1037~1101年),字子瞻,又字和仲,号“东坡居士”,眉州眉山(即今四川眉州)人,是宋代(北宋)著名的文学家、书画家|字|苏轼|0|和仲|21\n", + "阳成俊,男,汉族,贵州省委党校大学学历|民族|阳成俊|0|汉族|6\n", + "司马懿,字仲达,河南温县人|字|司马懿|0|仲达|6\n", + "\n", + "- train.csv: It contains 6 training triples,each lines represent one triple,sorted by sentence,attribute,entity,entity's offset,attribute value attribute value's offset,and separated by ,.\n", + "- valid.csv: It contains 2 training triples,each lines represent one triple,sorted by sentence,attribute,entity,entity's offset,attribute value attribute value's offset,and separated by ,.\n", + "- test.csv: It contains 2 training triples,each lines represent one triple,sorted by sentence,attribute,entity,entity's offset,attribute value attribute value's offset,and separated by ,.\n", + "- attribute.csv: It contains 3 attribute triples,each lines sorted by attribute,index and separated by ,.\n" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### LSTM\n", + "\n", + "![LSTM](img/LSTM.jpg)\n", + "\n", + "The sentence information mainly includes wording embedding.After the rnn layer,according to the position of entity,attribute key,it through the full connection layer, the attribution information of the sentence can be obtained." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Run the neural network with pytorch and confirm whether it is installed before running\n", + "!pip install torch\n", + "!pip install matplotlib\n", + "!pip install transformers" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# import the whole modules\n", + "import os\n", + "import csv\n", + "import math\n", + "import pickle\n", + "import logging\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from torch import optim\n", + "from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence\n", + "from torch.utils.data import Dataset,DataLoader\n", + "from sklearn.metrics import precision_recall_fscore_support\n", + "from typing import List, Tuple, Dict, Any, Sequence, Optional, Union\n", + "from transformers import BertTokenizer, BertModel\n", + "\n", + "logger = logging.getLogger(__name__)" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Configuration file of model parameters\n", + "# use_pcnn Parameter controls whether there is a piece_ Wise pooling\n", + "\n", + "class Config(object):\n", + " model_name = 'rnn' # ['cnn', 'gcn', 'lm','rnn']\n", + " use_pcnn = False\n", + " min_freq = 1\n", + " pos_limit = 20\n", + " out_path = 'data/out' \n", + " batch_size = 2 \n", + " word_dim = 10\n", + " pos_dim = 5\n", + " dim_strategy = 'sum' # ['sum', 'cat']\n", + " out_channels = 20\n", + " intermediate = 10\n", + " kernel_sizes = [3, 5, 7]\n", + " activation = 'gelu'\n", + " pooling_strategy = 'max'\n", + " dropout = 0.3\n", + " epoch = 10\n", + " num_relations = 4\n", + " learning_rate = 3e-4\n", + " lr_factor = 0.7 # 学习率的衰减率\n", + " lr_patience = 3 # 学习率衰减的等待epoch\n", + " weight_decay = 1e-3 # L2正则\n", + " early_stopping_patience = 6\n", + " train_log = True\n", + " log_interval = 1\n", + " show_plot = True\n", + " only_comparison_plot = False\n", + " plot_utils = 'matplot'\n", + " lm_file = 'bert-base-chinese'\n", + " lm_num_hidden_layers = 2\n", + " rnn_layers = 2\n", + " \n", + "cfg = Config()" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Word token builds a one hot dictionary, and then inputs it to the embedding layer to obtain the corresponding word information matrix\n", + "# 0 is pad by default and 1 is unknown\n", + "class Vocab(object):\n", + " def __init__(self, name: str = 'basic', init_tokens = [\"[PAD]\", \"[UNK]\"]):\n", + " self.name = name\n", + " self.init_tokens = init_tokens\n", + " self.trimed = False\n", + " self.word2idx = {}\n", + " self.word2count = {}\n", + " self.idx2word = {}\n", + " self.count = 0\n", + " self._add_init_tokens()\n", + "\n", + " def _add_init_tokens(self):\n", + " for token in self.init_tokens:\n", + " self._add_word(token)\n", + "\n", + " def _add_word(self, word: str):\n", + " if word not in self.word2idx:\n", + " self.word2idx[word] = self.count\n", + " self.word2count[word] = 1\n", + " self.idx2word[self.count] = word\n", + " self.count += 1\n", + " else:\n", + " self.word2count[word] += 1\n", + "\n", + " def add_words(self, words: Sequence):\n", + " for word in words:\n", + " self._add_word(word)\n", + "\n", + " def trim(self, min_freq=2, verbose: Optional[bool] = True):\n", + " assert min_freq == int(min_freq), f'min_freq must be integer, can\\'t be {min_freq}'\n", + " min_freq = int(min_freq)\n", + " if min_freq < 2:\n", + " return\n", + " if self.trimed:\n", + " return\n", + " self.trimed = True\n", + "\n", + " keep_words = []\n", + " new_words = []\n", + "\n", + " for k, v in self.word2count.items():\n", + " if v >= min_freq:\n", + " keep_words.append(k)\n", + " new_words.extend([k] * v)\n", + " if verbose:\n", + " before_len = len(keep_words)\n", + " after_len = len(self.word2idx) - len(self.init_tokens)\n", + " logger.info('vocab after be trimmed, keep words [{} / {}] = {:.2f}%'.format(before_len, after_len, before_len / after_len * 100))\n", + "\n", + " # Reinitialize dictionaries\n", + " self.word2idx = {}\n", + " self.word2count = {}\n", + " self.idx2word = {}\n", + " self.count = 0\n", + " self._add_init_tokens()\n", + " self.add_words(new_words)" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Functions required for preprocessing\n", + "Path = str\n", + "\n", + "def load_csv(fp: Path, is_tsv: bool = False, verbose: bool = True) -> List:\n", + " if verbose:\n", + " logger.info(f'load csv from {fp}')\n", + "\n", + " dialect = 'excel-tab' if is_tsv else 'excel'\n", + " with open(fp, encoding='utf-8') as f:\n", + " reader = csv.DictReader(f, dialect=dialect)\n", + " return list(reader)\n", + "\n", + " \n", + "def load_pkl(fp: Path, verbose: bool = True) -> Any:\n", + " if verbose:\n", + " logger.info(f'load data from {fp}')\n", + "\n", + " with open(fp, 'rb') as f:\n", + " data = pickle.load(f)\n", + " return data\n", + "\n", + "\n", + "def save_pkl(data: Any, fp: Path, verbose: bool = True) -> None:\n", + " if verbose:\n", + " logger.info(f'save data in {fp}')\n", + "\n", + " with open(fp, 'wb') as f:\n", + " pickle.dump(data, f)\n", + " \n", + "def _handle_attribute_data(attribute_data: List[Dict]) -> Dict:\n", + " atts = OrderedDict()\n", + " attribute_data = sorted(attribute_data, key=lambda i: int(i['index']))\n", + " for d in attribute_data:\n", + " atts[d['attribute']] = {\n", + " 'index': int(d['index'])\n", + " }\n", + " return atts\n", + "\n", + "def _add_attribute_data(atts: Dict, data: List) -> None:\n", + " for d in data:\n", + " d['att2idx'] = atts[d['attribute']]['index']\n", + "\n", + "def _convert_tokens_into_index(data: List[Dict], vocab):\n", + " unk_str = '[UNK]'\n", + " unk_idx = vocab.word2idx[unk_str]\n", + "\n", + " for d in data:\n", + " d['token2idx'] = [vocab.word2idx.get(i, unk_idx) for i in d['tokens']]\n", + "\n", + "def _add_pos_seq(train_data: List[Dict], cfg):\n", + " for d in train_data:\n", + " d['entity_pos'] = list(map(lambda i: i - d['entity_index'], list(range(d['seq_len']))))\n", + " d['entity_pos'] = _handle_pos_limit(d['entity_pos'],int(cfg.pos_limit))\n", + "\n", + " d['attribute_value_pos'] = list(map(lambda i: i - d['attribute_value_index'], list(range(d['seq_len']))))\n", + " d['attribute_value_pos'] = _handle_pos_limit(d['attribute_value_pos'],int(cfg.pos_limit))\n", + " \n", + "def _handle_pos_limit(pos: List[int], limit: int) -> List[int]:\n", + " for i,p in enumerate(pos):\n", + " if p > limit:\n", + " pos[i] = limit\n", + " if p < -limit:\n", + " pos[i] = -limit\n", + " return [p + limit + 1 for p in pos]\n", + "\n", + "def seq_len_to_mask(seq_len: Union[List, np.ndarray, torch.Tensor], max_len=None, mask_pos_to_true=True):\n", + " if isinstance(seq_len, list):\n", + " seq_len = np.array(seq_len)\n", + "\n", + " if isinstance(seq_len, np.ndarray):\n", + " seq_len = torch.from_numpy(seq_len)\n", + "\n", + " if isinstance(seq_len, torch.Tensor):\n", + " assert seq_len.dim() == 1, logger.error(f\"seq_len can only have one dimension, got {seq_len.dim()} != 1.\")\n", + " batch_size = seq_len.size(0)\n", + " max_len = int(max_len) if max_len else seq_len.max().long()\n", + " broad_cast_seq_len = torch.arange(max_len).expand(batch_size, -1).to(seq_len.device)\n", + " if mask_pos_to_true:\n", + " mask = broad_cast_seq_len.ge(seq_len.unsqueeze(1))\n", + " else:\n", + " mask = broad_cast_seq_len.lt(seq_len.unsqueeze(1))\n", + " else:\n", + " raise logger.error(\"Only support 1-d list or 1-d numpy.ndarray or 1-d torch.Tensor.\")\n", + "\n", + " return mask\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Preprocess\n", + "logger.info('load raw files...')\n", + "train_fp = os.path.join('data/train.csv')\n", + "valid_fp = os.path.join('data/valid.csv')\n", + "test_fp = os.path.join('data/test.csv')\n", + "attribute_fp = os.path.join('data/attribute.csv')\n", + "\n", + "train_data = load_csv(train_fp)\n", + "valid_data = load_csv(valid_fp)\n", + "test_data = load_csv(test_fp)\n", + "attribute_data = load_csv(attribute_fp)\n", + "\n", + "for d in train_data:\n", + " d['tokens'] = eval(d['tokens'])\n", + "for d in valid_data:\n", + " d['tokens'] = eval(d['tokens'])\n", + "for d in test_data:\n", + " d['tokens'] = eval(d['tokens'])\n", + "\n", + "logger.info('convert relation into index...')\n", + "atts = _handle_attribute_data(attribute_data)\n", + "_add_attribute_data(atts,train_data)\n", + "_add_attribute_data(atts,test_data)\n", + "_add_attribute_data(atts,valid_data)\n", + "\n", + "logger.info('build vocabulary...')\n", + "vocab = Vocab('word')\n", + "train_tokens = [d['tokens'] for d in train_data]\n", + "valid_tokens = [d['tokens'] for d in valid_data]\n", + "test_tokens = [d['tokens'] for d in test_data]\n", + "sent_tokens = [*train_tokens, *valid_tokens, *test_tokens]\n", + "for sent in sent_tokens:\n", + " vocab.add_words(sent)\n", + "vocab.trim(min_freq=cfg.min_freq)\n", + "\n", + "logger.info('convert tokens into index...')\n", + "_convert_tokens_into_index(train_data, vocab)\n", + "_convert_tokens_into_index(valid_data, vocab)\n", + "_convert_tokens_into_index(test_data, vocab)\n", + "\n", + "logger.info('build position sequence...')\n", + "_add_pos_seq(train_data, cfg)\n", + "_add_pos_seq(valid_data, cfg)\n", + "_add_pos_seq(test_data, cfg)\n", + "\n", + "logger.info('save data for backup...')\n", + "os.makedirs(cfg.out_path, exist_ok=True)\n", + "train_save_fp = os.path.join(cfg.out_path, 'train.pkl')\n", + "valid_save_fp = os.path.join(cfg.out_path, 'valid.pkl')\n", + "test_save_fp = os.path.join(cfg.out_path, 'test.pkl')\n", + "save_pkl(train_data, train_save_fp)\n", + "save_pkl(valid_data, valid_save_fp)\n", + "save_pkl(test_data, test_save_fp)\n", + "\n", + "vocab_save_fp = os.path.join(cfg.out_path, 'vocab.pkl')\n", + "vocab_txt = os.path.join(cfg.out_path, 'vocab.txt')\n", + "save_pkl(vocab, vocab_save_fp)\n", + "logger.info('save vocab in txt file, for watching...')\n", + "with open(vocab_txt, 'w', encoding='utf-8') as f:\n", + " f.write(os.linesep.join(vocab.word2idx.keys()))\n", + "\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# pytorch construct Dataset\n", + "def collate_fn(cfg):\n", + " def collate_fn_intra(batch):\n", + " batch.sort(key=lambda data: data['seq_len'], reverse=True)\n", + " max_len = batch[0]['seq_len']\n", + "\n", + " def _padding(x, max_len):\n", + " return x + [0] * (max_len - len(x))\n", + "\n", + " x, y = dict(), []\n", + " word, word_len = [], []\n", + " head_pos, tail_pos = [], []\n", + " pcnn_mask = []\n", + " for data in batch:\n", + " word.append(_padding(data['token2idx'], max_len))\n", + " word_len.append(data['seq_len'])\n", + " y.append(int(data['att2idx']))\n", + "\n", + " if cfg.model_name != 'lm':\n", + " head_pos.append(_padding(data['entity_pos'], max_len))\n", + " tail_pos.append(_padding(data['attribute_value_pos'], max_len))\n", + " if cfg.model_name == 'cnn':\n", + " if cfg.use_pcnn:\n", + " pcnn_mask.append(_padding(data['entities_pos'], max_len))\n", + "\n", + " x['word'] = torch.tensor(word)\n", + " x['lens'] = torch.tensor(word_len)\n", + " y = torch.tensor(y)\n", + "\n", + " if cfg.model_name != 'lm':\n", + " x['entity_pos'] = torch.tensor(head_pos)\n", + " x['attribute_value_pos'] = torch.tensor(tail_pos)\n", + " if cfg.model_name == 'cnn' and cfg.use_pcnn:\n", + " x['pcnn_mask'] = torch.tensor(pcnn_mask)\n", + " if cfg.model_name == 'gcn':\n", + " # 没找到合适的做 parsing tree 的工具,暂时随机初始化\n", + " B, L = len(batch), max_len\n", + " adj = torch.empty(B, L, L).random_(2)\n", + " x['adj'] = adj\n", + " return x, y\n", + "\n", + " return collate_fn_intra\n", + "\n", + "\n", + "class CustomDataset(Dataset):\n", + " \"\"\"\n", + " 默认使用 List 存储数据\n", + " \"\"\"\n", + " def __init__(self, fp):\n", + " self.file = load_pkl(fp)\n", + "\n", + " def __getitem__(self, item):\n", + " sample = self.file[item]\n", + " return sample\n", + "\n", + " def __len__(self):\n", + " return len(self.file)" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# embedding layer\n", + "import torch\n", + "import torch.nn as nn\n", + "\n", + "\n", + "class Embedding(nn.Module):\n", + " def __init__(self, config):\n", + " \"\"\"\n", + " word embedding: 一般 0 为 padding\n", + " pos embedding: 一般 0 为 padding\n", + " dim_strategy: [cat, sum] 多个 embedding 是拼接还是相加\n", + " \"\"\"\n", + " super(Embedding, self).__init__()\n", + "\n", + " # self.xxx = config.xxx\n", + " self.vocab_size = config.vocab_size\n", + " self.word_dim = config.word_dim\n", + " self.pos_size = config.pos_size\n", + " self.pos_dim = config.pos_dim if config.dim_strategy == 'cat' else config.word_dim\n", + " self.dim_strategy = config.dim_strategy\n", + "\n", + " self.wordEmbed = nn.Embedding(self.vocab_size, self.word_dim, padding_idx=0)\n", + " self.entityPosEmbed = nn.Embedding(self.pos_size, self.pos_dim, padding_idx=0)\n", + " self.attribute_keyPosEmbed = nn.Embedding(self.pos_size, self.pos_dim, padding_idx=0)\n", + " \n", + " self.layer_norm = nn.LayerNorm(self.word_dim)\n", + "\n", + " def forward(self, *x):\n", + " word, entity, attribute_key = x\n", + " word_embedding = self.wordEmbed(word)\n", + " entity_embedding = self.entityPosEmbed(head)\n", + " attribute_key_embedding = self.attribute_keyPosEmbed(tail)\n", + "\n", + " if self.dim_strategy == 'cat':\n", + " return torch.cat((word_embedding, entity_embedding, attribute_key_embedding), -1)\n", + " elif self.dim_strategy == 'sum':\n", + " # 此时 pos_dim == word_dim\n", + " return self.layer_norm(word_embedding + entity_embedding + attribute_key_embedding)\n", + " else:\n", + " raise Exception('dim_strategy must choose from [sum, cat]')\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Gelu activation function, specified by transformer, works better than relu\n", + "class GELU(nn.Module):\n", + " def __init__(self):\n", + " super(GELU, self).__init__()\n", + "\n", + " def forward(self, x):\n", + " return x * 0.5 * (1.0 + torch.erf(x / math.sqrt(2.0)))" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "#rnn model\n", + "class RNN(nn.Module):\n", + " def __init__(self, config):\n", + " \"\"\"\n", + " type_rnn: RNN, GRU, LSTM 可选\n", + " \"\"\"\n", + " super(RNN, self).__init__()\n", + "\n", + " # self.xxx = config.xxx\n", + " self.input_size = config.input_size\n", + " self.hidden_size = config.hidden_size // 2 if config.bidirectional else config.hidden_size\n", + " self.num_layers = config.num_layers\n", + " self.dropout = config.dropout\n", + " self.bidirectional = config.bidirectional\n", + " self.last_layer_hn = config.last_layer_hn\n", + " self.type_rnn = config.type_rnn\n", + "\n", + " rnn = eval(f'nn.{self.type_rnn}')\n", + " self.rnn = rnn(input_size=self.input_size,\n", + " hidden_size=self.hidden_size,\n", + " num_layers=self.num_layers,\n", + " dropout=self.dropout,\n", + " bidirectional=self.bidirectional,\n", + " bias=True,\n", + " batch_first=True)\n", + "\n", + " # 有bug\n", + " # self._init_weights()\n", + "\n", + " def _init_weights(self):\n", + " \"\"\"orthogonal init yields generally good results than uniform init\"\"\"\n", + " gain = 1 # use default value\n", + " for nth in range(self.num_layers * self.bidirectional):\n", + " # w_ih, (4 * hidden_size x input_size)\n", + " nn.init.orthogonal_(self.rnn.all_weights[nth][0], gain=gain)\n", + " # w_hh, (4 * hidden_size x hidden_size)\n", + " nn.init.orthogonal_(self.rnn.all_weights[nth][1], gain=gain)\n", + " # b_ih, (4 * hidden_size)\n", + " nn.init.zeros_(self.rnn.all_weights[nth][2])\n", + " # b_hh, (4 * hidden_size)\n", + " nn.init.zeros_(self.rnn.all_weights[nth][3])\n", + "\n", + " def forward(self, x, x_len):\n", + " \"\"\"\n", + " Args: \n", + " torch.Tensor [batch_size, seq_max_length, input_size], [B, L, H_in] 一般是经过embedding后的值\n", + " x_len: torch.Tensor [L] 已经排好序的句长值\n", + " Returns:\n", + " output: torch.Tensor [B, L, H_out] 序列标注的使用结果\n", + " hn: torch.Tensor [B, N, H_out] / [B, H_out] 分类的结果,当 last_layer_hn 时只有最后一层结果\n", + " \"\"\"\n", + " B, L, _ = x.size()\n", + " H, N = self.hidden_size, self.num_layers\n", + "\n", + " x_len = x_len.cpu()\n", + " x = pack_padded_sequence(x, x_len, batch_first=True, enforce_sorted=True)\n", + " output, hn = self.rnn(x)\n", + " output, _ = pad_packed_sequence(output, batch_first=True, total_length=L)\n", + "\n", + " if self.type_rnn == 'LSTM':\n", + " hn = hn[0]\n", + " if self.bidirectional:\n", + " hn = hn.view(N, 2, B, H).transpose(1, 2).contiguous().view(N, B, 2 * H).transpose(0, 1)\n", + " else:\n", + " hn = hn.transpose(0, 1)\n", + " if self.last_layer_hn:\n", + " hn = hn[:, -1, :]\n", + "\n", + " return output, hn" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# p,r,f1 measurement\n", + "class PRMetric():\n", + " def __init__(self):\n", + " \n", + " self.y_true = np.empty(0)\n", + " self.y_pred = np.empty(0)\n", + "\n", + " def reset(self):\n", + " self.y_true = np.empty(0)\n", + " self.y_pred = np.empty(0)\n", + "\n", + " def update(self, y_true:torch.Tensor, y_pred:torch.Tensor):\n", + " y_true = y_true.cpu().detach().numpy()\n", + " y_pred = y_pred.cpu().detach().numpy()\n", + " y_pred = np.argmax(y_pred,axis=-1)\n", + "\n", + " self.y_true = np.append(self.y_true, y_true)\n", + " self.y_pred = np.append(self.y_pred, y_pred)\n", + "\n", + " def compute(self):\n", + " p, r, f1, _ = precision_recall_fscore_support(self.y_true,self.y_pred,average='macro',warn_for=tuple())\n", + " _, _, acc, _ = precision_recall_fscore_support(self.y_true,self.y_pred,average='micro',warn_for=tuple())\n", + "\n", + " return acc,p,r,f1" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Iteration in training process\n", + "def train(epoch, model, dataloader, optimizer, criterion, cfg):\n", + " model.train()\n", + "\n", + " metric = PRMetric()\n", + " losses = []\n", + "\n", + " for batch_idx, (x, y) in enumerate(dataloader, 1):\n", + " optimizer.zero_grad()\n", + " y_pred = model(x)\n", + " loss = criterion(y_pred, y)\n", + "\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " metric.update(y_true=y, y_pred=y_pred)\n", + " losses.append(loss.item())\n", + "\n", + " data_total = len(dataloader.dataset)\n", + " data_cal = data_total if batch_idx == len(dataloader) else batch_idx * len(y)\n", + " if (cfg.train_log and batch_idx % cfg.log_interval == 0) or batch_idx == len(dataloader):\n", + " acc,p,r,f1 = metric.compute()\n", + " print(f'Train Epoch {epoch}: [{data_cal}/{data_total} ({100. * data_cal / data_total:.0f}%)]\\t'\n", + " f'Loss: {loss.item():.6f}')\n", + " print(f'Train Epoch {epoch}: Acc: {100. * acc:.2f}%\\t'\n", + " f'macro metrics: [p: {p:.4f}, r:{r:.4f}, f1:{f1:.4f}]')\n", + "\n", + " if cfg.show_plot and not cfg.only_comparison_plot:\n", + " if cfg.plot_utils == 'matplot':\n", + " plt.plot(losses)\n", + " plt.title(f'epoch {epoch} train loss')\n", + " plt.show()\n", + "\n", + " return losses[-1]\n", + "\n", + "# Iteration in testing process\n", + "def validate(epoch, model, dataloader, criterion,verbose=True):\n", + " model.eval()\n", + "\n", + " metric = PRMetric()\n", + " losses = []\n", + "\n", + " for batch_idx, (x, y) in enumerate(dataloader, 1):\n", + " with torch.no_grad():\n", + " y_pred = model(x)\n", + " loss = criterion(y_pred, y)\n", + "\n", + " metric.update(y_true=y, y_pred=y_pred)\n", + " losses.append(loss.item())\n", + "\n", + " loss = sum(losses) / len(losses)\n", + " acc,p,r,f1 = metric.compute()\n", + " data_total = len(dataloader.dataset)\n", + " if verbose:\n", + " print(f'Valid Epoch {epoch}: [{data_total}/{data_total}](100%)\\t Loss: {loss:.6f}')\n", + " print(f'Valid Epoch {epoch}: Acc: {100. * acc:.2f}%\\tmacro metrics: [p: {p:.4f}, r:{r:.4f}, f1:{f1:.4f}]\\n\\n')\n", + "\n", + " return f1,loss" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load dataset\n", + "train_dataset = CustomDataset(train_save_fp)\n", + "valid_dataset = CustomDataset(valid_save_fp)\n", + "test_dataset = CustomDataset(test_save_fp)\n", + "\n", + "train_dataloader = DataLoader(train_dataset, batch_size=cfg.batch_size, shuffle=True, collate_fn=collate_fn(cfg))\n", + "valid_dataloader = DataLoader(valid_dataset, batch_size=cfg.batch_size, shuffle=True, collate_fn=collate_fn(cfg))\n", + "test_dataloader = DataLoader(test_dataset, batch_size=cfg.batch_size, shuffle=True, collate_fn=collate_fn(cfg))" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# After the preprocessed data is loaded, vocab_size is known\n", + "vocab = load_pkl(vocab_save_fp)\n", + "vocab_size = vocab.count\n", + "cfg.vocab_size = vocab_size" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# main entry, define optimization function, loss function and so on\n", + "# start epoch\n", + "# Use the loss of the valid dataset to make an early stop judgment. When it does not decline, this is the time when the model generalization is the best.\n", + "model = RNN(cfg)\n", + "print(model)\n", + "\n", + "optimizer = optim.Adam(model.parameters(), lr=cfg.learning_rate, weight_decay=cfg.weight_decay)\n", + "scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, factor=cfg.lr_factor, patience=cfg.lr_patience)\n", + "criterion = nn.CrossEntropyLoss()\n", + "\n", + "best_f1, best_epoch = -1, 0\n", + "es_loss, es_f1, es_epoch, es_patience, best_es_epoch, best_es_f1, = 1000, -1, 0, 0, 0, -1\n", + "train_losses, valid_losses = [], []\n", + "\n", + "logger.info('=' * 10 + ' Start training ' + '=' * 10)\n", + "for epoch in range(1, cfg.epoch + 1):\n", + " train_loss = train(epoch, model, train_dataloader, optimizer, criterion, cfg)\n", + " valid_f1, valid_loss = validate(epoch, model, valid_dataloader, criterion)\n", + " scheduler.step(valid_loss)\n", + "\n", + " train_losses.append(train_loss)\n", + " valid_losses.append(valid_loss)\n", + " if best_f1 < valid_f1:\n", + " best_f1 = valid_f1\n", + " best_epoch = epoch\n", + " # 使用 valid loss 做 early stopping 的判断标准\n", + " if es_loss > valid_loss:\n", + " es_loss = valid_loss\n", + " es_f1 = valid_f1\n", + " best_es_f1 = valid_f1\n", + " es_epoch = epoch\n", + " best_es_epoch = epoch\n", + " es_patience = 0\n", + " else:\n", + " es_patience += 1\n", + " if es_patience >= cfg.early_stopping_patience:\n", + " best_es_epoch = es_epoch\n", + " best_es_f1 = es_f1\n", + "\n", + "if cfg.show_plot:\n", + " if cfg.plot_utils == 'matplot':\n", + " plt.plot(train_losses, 'x-')\n", + " plt.plot(valid_losses, '+-')\n", + " plt.legend(['train', 'valid'])\n", + " plt.title('train/valid comparison loss')\n", + " plt.show()\n", + "\n", + "\n", + "print(f'best(valid loss quota) early stopping epoch: {best_es_epoch}, '\n", + " f'this epoch macro f1: {best_es_f1:0.4f}')\n", + "print(f'total {cfg.epoch} epochs, best(valid macro f1) epoch: {best_epoch}, '\n", + " f'this epoch macro f1: {best_f1:.4f}')\n", + "\n", + "test_f1, _ = validate(0, model, test_dataloader, criterion,verbose=False)\n", + "print(f'after {cfg.epoch} epochs, final test data macro f1: {test_f1:.4f}')\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This demo does not include parameter adjustment. Interested students can go to [deepke] by themselves( http://openkg.cn/tool/deepke )Warehouse, download and use more models:)" + ], + "metadata": {} + } + ], + "metadata": { + "orig_nbformat": 4, + "language_info": { + "name": "plaintext" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/tutorial-notebooks/ae/regular/data/attribute.csv b/tutorial-notebooks/ae/regular/data/attribute.csv new file mode 100644 index 0000000..b364e74 --- /dev/null +++ b/tutorial-notebooks/ae/regular/data/attribute.csv @@ -0,0 +1,4 @@ +attribute,index +None,0 +民族,1 +字,2 diff --git a/tutorial-notebooks/ae/regular/data/test.csv b/tutorial-notebooks/ae/regular/data/test.csv new file mode 100644 index 0000000..3daad05 --- /dev/null +++ b/tutorial-notebooks/ae/regular/data/test.csv @@ -0,0 +1,3 @@ +sentence,attribute,entity,entity_offset,attribute_value,attribute_value_offset +柳为易,女,1989年5月出生,中共党员 ,汉族,重庆市人,民族,柳为易,0,汉族,22 +庄肇奎 (1728-1798) 榜姓杜,字星堂,号胥园,江苏武进籍,浙江秀水(今嘉兴)人,字,庄肇奎,0,星堂,23 diff --git a/tutorial-notebooks/ae/regular/data/train.csv b/tutorial-notebooks/ae/regular/data/train.csv new file mode 100644 index 0000000..69c5369 --- /dev/null +++ b/tutorial-notebooks/ae/regular/data/train.csv @@ -0,0 +1,7 @@ +sentence,attribute,entity,entity_offset,attribute_value,attribute_value_offset +苏轼(1037~1101年),字子瞻,又字和仲,号“东坡居士”,眉州眉山(即今四川眉州)人,是宋代(北宋)著名的文学家、书画家,字,苏轼,0,和仲,21 +屈中乾,男,汉族,中共党员,特级教师,民族,屈中乾,0,汉族,6 +阳成俊,男,汉族,贵州省委党校大学学历,民族,阳成俊,0,汉族,6 +黄向静,女,汉族,1965年5月生,大学学历,1986年17月参加工作,中共党员,身体健康,民族,黄向静,0,汉族,6 +生平简介陈执中(990-1059),字昭誉,名相陈恕之子,北宋洪州南昌(今属江西)人,字,陈执中,4,昭誉,19 +司马懿,字仲达,河南温县人,字,司马懿,0,仲达,5 diff --git a/tutorial-notebooks/ae/regular/data/valid.csv b/tutorial-notebooks/ae/regular/data/valid.csv new file mode 100644 index 0000000..880d24a --- /dev/null +++ b/tutorial-notebooks/ae/regular/data/valid.csv @@ -0,0 +1,3 @@ +sentence,attribute,entity,entity_offset,attribute_value,attribute_value_offset +田承冉 男,1952年生,汉族,山东桓台人,共党员,民族,田承冉,0,汉族,13 +冷家骥,字展麒,山东招远人,字,冷家骥,0,展麒,5 diff --git a/tutorial-notebooks/ae/regular/img/LSTM.jpg b/tutorial-notebooks/ae/regular/img/LSTM.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ba1ad714ef2c9915555e728d8e9880805e559a3 GIT binary patch literal 121078 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

SK$DAo!v_7(!$_gcf=0 z_6O?DbSjEs9>z;jP|hL?yBXLSBX2Z+clq)ZB^&+2N_y`OCyQv9=2}n>siw>XHUXte zjnwY;5BwT+A}1VQe~FlI8$>DuRD{(3Pb>Jw?xlRv5A=se`s3TaWa@)I=2{+eXE__& z`$uSinylSVlNT~P9-e(3N1zrP-Pk)vK`;jb%h#S6qe_X{<)%bcSiUILW6gOlWl*W; z3{$>{Tac0+kt+e*ssgXlDJe-PWq@bo!CRvtjM$dGcJVRCkMi~_vL_r5=-#Im7ws4K zXi?)dSW;-Zh=zWuCg)5cXzROU zC*wd+I$ZMGyZ7%ZhV)X2ZV$pIlP^z!Qx}m7HuY<7|hSD18!Nqby5D?d1W^u=E}TONF~9*JT0b+LKo%n2gTKz)R2s z>;sfACAPZT=;~g4tCDc^fn4gDYZPb)(@%4{-jij9{LwgL^!7!xrTp5BkBENY4Qmq+ItTvO{lwHDO!t zR;ozSe)F{vmgr7K;91(3UCOnBFagsKl6^%q^UBi`@8U;kC_k`Jr5BZPX3A3&v1fj* z0p|tZWyOw;c;Mdrx{Q^*eEk3T3#H_b*Oi?pim)2G&@n)Gq?9+6+=^ji+O z{tM4Tpb+%1rQmOwjmEYLzT67AFkXZ{EcB-g*yaTlSieCQ?JCG>TIX-;R~m(L+g-=x zJ(O1{0M{q8313J1wyD*oWSMP12EWiIdo^PS1Af*3VFLvH$(17<=(kh`QqY09yT>=O z9Z0nJnvy*qFetU@h5hY1Qvd~Xw%&@$?b|=RJ$i(7my5@we+t{kQ9kne2aeoq>??r|S%-X|VK~CBG~R8~to&hF6e-8zzhY#&wqYhwF@pRQV4h7zY`@ZO;$#?l^IC zw?r>yuZ+Uyk;%ixO`?_yeV(iWHtcr-603*NTK#uyG)FZ5^n)(r#=bX%3v)38B@Djc zH=x->WwHq3MtP|QPNB6f0a)#uT&M}T8cu?%x6T;QSud)vwkp}Zv(I0ZJ=BdcjQ+wK z@k|bnU`(48Pm>XNx(zM^p!e)*a&(|hJQI|>R?$%*=SD{l!_aaC{3 zmyliiIYNlrq>|OGTjIK#TO=R%9$EhK45)h(dOVpJB(7Rec1+{VdS$t}Wy8 z8$42P0X+T<6T^~qw{@r@{@HiNT>__50Ow^EXgo!A(Ch{=2}ka7p|_{mHnN$;TXGlC&_b&QZw_a7HMyVDowxh0(?BZ&7<> z+A9h-jMFT;5m|nQM%@huBt7IFcc?ZJX(*C{Kue4KelE)!^j`EA41Pm(NY=~@)kvDq zbGJU#TbrulVMHK@iYy1!36#Cuq=fnWN2N=51*;m(!}6cQc`S7CsftglZK( z^gPXPl{>x>B*Q`7D*AE(;iu!Tke3lq`(X(%(A^ytBHxv*HlJQQ2jV2pfzt=zwz7QY zlWlOv;2kL?dy|1v^#h7^I)SXuG3c&yY}yVy~X=)nnrOx^FLB7p)uGr zdw>5GlClae#IDb0*LqkSf#q!*dH;*N=fHgxCY4=hRCNOMaBn)uH@G|qI(>4b9oiZ{ zZ6Ut1T;HY9nE3Afb>Y+rH-UYQNAbt|CLdjX2=eclPDv-2Gd@M!^lYu-R>``+O}Z04 zLQDMsYL!!XIE1$9>0rGd!jddG)5_$_*)r)a(LX%L^AmBw>Eb74Q)$ZLaQ!3o?%22_ z)~w=UaH%l}t*uI$e!JX5@#y%lY-FKC<{Z%2ivKBh$X#>VRHaCCC9n3ZWMx>F_#8l3 z08a}tJP)7oJx0czS+yiPA58X~19k9j-Pl>lc}qqNZ(X*R`8)iIuiHmVmylG$bv5UJ zKlft0HYoRIn^GPj?>#;ZU*+w6+FrunZvqz`Sc7|9-7(lC`X(kmWx&50`sN&1e#P;F z6>W9;J@hAgdmsAdY;t4ulJn8_8{I1n(-&5c(}TnPZVpebA8X%Y_^8Ysc_+vnW3Ku@ zR$_tAEb`WyjLW_igJP=gc;sxZMPBr#qYLMv`=;JKbwRrAxLGbl2EWK&UgVu?+y4z<&s4)1=W+Ar?m$^=~@-gjoM>7Yu{!wH{TB_bnDQBu0DbsexSpMqC@sL@ zf6sDAnZ5I2j8#bvMCm7W__0us@w9^&c62qS&6hPVgoSeYMzC`4`wr|n5d6Y70AWjV z*K#BaBh0&I9S?siZ~Wx`IlvY|`b}k|Y&DquV#*%ZVh>Lw$2PZkNG7HuPRVifGsVh5 zZ=)4$kgG3fl)q11+KkYS+*_M1c<=o~vilRZNkrhj)?W(53#jp#L!h|!p_Mch7!aZYGa1L z*j8We+8%f&*C`?0&stPYPNlAS%S@HTryoTh*V8v;tdmw7Nx0Lmb6wNTV&U}iO!TY% zCf(IhJJaP3VO#^vNf(=3?zfIlmFng%A5f223@ob!EgWl~jk0rLF_?$l(`LxC4`V+T zB%Z743#7i&c;3)aKXHEhHz*bR$F8dnMn>ORlfVYhx;Jm zF#he>8F0c-kL5%A-%OJXrF$5r;gTdcITwcip*I@hn67-?I&JKE6CrStpR+R4%Mxtj zM1ys_opMJcxO_XwQKacu(euksbLs6-mYS46;4`*xS&0KlVr4GOR*^C26JhQ=$*qgO z2D7)1u{|1#peP+7gvTFJe3mo82uHL!hGIacGTmNsOs4yxgZV{8`@)5cxN8+&;x*TO z0Z5mug1}D7=NNa=pkOSoKiU>mm3LUF+D+Q9!bc$YxN@GOc9?}#Odjck{r2j`8x}aY zdDfvi?CNMI1r2gkOPc%knB)sbh3F*`{+|T)$d|W9U=0Q|Oh&g;HA=aPs^fW2kcByM2Mhv`f|RnBxy- ztGbfT6nelXlm#*L-h+D6sz#RYwRsu~%@4XA`bNL(G2V}l20ck5`7y73ZMM}_@=5;n zgvI~ozm30U@5mk7d_Zd)hGFfO1>Aqqe`!uRqb^SmFKA4-O|5b-=^}amZPrG7FQ#h|(^c6C+(=aaMj>NXDQ zv&&ek75l6NZq(-*uR*8OE9^qmZZFY7HYEN!Vq%=5i_z`I zoS41Aij#JSQr_KQFq^6=#B<$o{SpBaBhMe2WXpZG_%W#pNr56S#1!^~Qc8@n>Xu+N zv|hh$Xh);w%2k6sFNF&E<#_Pxy~%6#Tn{58oq}xN`KyY5=N|gs;&kN`p0wT=EfcQf z;$+~&c~mkb0hCq=0^~t8;|9GK-<|Yd5YBTT%zfdP9=uTBN_dN-!Fc;?VYWKv-lAq+ zm#eF{P)H*8=W`&%n6jhc9Ehw>M`KyKEH7eshPzL5`~0L)RohB?Pl030cx;x^Ec`GP z!{gFUiRJKhTI#u2hU8>C(lUU8@9Q-xHHOBmTyPB%ULifYx38(h?ep+EI5|o;2CL(A zJNIUDdS8d5_L5vnXg*4m)1`b*7k61IrZ}eEVBQoy;R8>s$m^qI;rhJGRC!p^gv%U9 zAAw-gN-TJcEtgp?NCTxHt*w}C?9m;{XJe^Tc?QBv?MT=cxh3Y=n>}a2M&_?Wm-V=- zx9(1-9n*!3G@Gaj$1Le(DkX1zU*A74Oal*3ElF;fDRogqHWR5&1kn}F4RS1`nsiT4 zU|BA^Plw6leLdX7stC?}Y88L!oXh?Abm{e{2o`ku_0SW)@|4*Js|0UFBfFNMzHbfN z*P5e}>`KO-qj%1MfvufOg08N%l(XHb1!y|jOVDrpfdKZ2yz#LYHeNk`vTKnI-79=# z`F(k03)>?fc@D6iTuNE--^oOgZJ?~;XG0Q5&H?f#_tM{_IEX4QVGn}A%}7Do9NUp7 zHV3H$@Jtb-yl!RxIS?r0M%Eg7)SDzz32qW)#6n6=W}inNHuCwmwm+gd_)e<&qq@S^ z!d7#vBF|uYFMo1}iz%Rr*ThzTcSM=vdCf-(H* zx}#X`^*zh&I9*9d3VvFA|Cg0Ax;iH4vV#Qpbr>P_ROj{Ap}KI+o4qnf3(PWg5CYp+y3i$tawcO_D}H-8 zf+zB;lPnnA^%AtOy!V-JnIlq4+jRx$t6j_}eqXJcDWy#7fAMzSQBAg8x(|Xh!2pU> ziFAOumUS9WaY{I-1pwszV>hHM?-wnZ8hiTEnH4_T%M7={;qYY_?3W`k>X`$kV(bA za1kz%xV{v%#AxLP2x#(+w-=^rr0<64-wMdWEzB~hB7A-X*Tdw4SXvB;qR8*Hu}bnp z-+dH1yD|og-6GbFa%wu@Y)*KLzeFk+-TBl_W>0^ZbtJ|>0O5qtDE`yKuwTRW85!w{-eGnp z>2yhdZC(`RE(@jEl?&CUX}+}kZ5Q)TQ|vW=IqQoqt0jFs*CG{FBzh3u(EW<_wn$ekbe?bWCj(gAv zwIxTc(&4~5*oY6@TiFJmk9gt!R1ltvTLi&Myo&|QPYqX&`O%k4@A;}@zkQpcGm}4A z?+?i5J}3~O4c`X>p}|u))V?2DaTlqPv*d1rK12BIc4k2n$TSK z(%-;U@?I2?>`g3a=6^`?`gihNRkg3x1VN_o1qb)c!HvlW6Z@O3pEGghsL(4zKjt4Z zxSAsQE~*I*eigc?)v$CGR_xWvVqBhSy&=P@%YtZupQ~%3F4yQQmaG*DGuMPdKJ$@x zntW?lNkF*u0n4N=_e9nDj6Pb;{ye&NDOW5QeRB$VJ8WUyyxuBXaR04n##2p$x6XU( z2EGp^t9d@yXW{Kmui_Sgl{In-#jG?1zxuJ81xN^XFYG^jZfP)~;`Ze;zvp@FV(Zxg z5}@WxxIsBv5Di+fk4?2K(rlfdI z`*c);P3sva#}kXC-A_VqmMTWiViSH{a2<{c$k-&n1o(xo@hCd zfr>PGjlJNp;?XjI@rrb13_Cs+rWk9QEyZcA+{Ovvy>@Lu`vkKpSXwuc2h+3ry|>zC zBv_^deSfnq(L($7ipc{OMrY)t|dS-}g-{xK9u+gqCj?2|$^AFPMg?PtA-U zn!5T?|BhS&<#B_>QB*9nVN}){c(Y)fz-bmYdB29ZH z?_D&9Q_^4aOT)e`4nnR3ujM#9mw33txZ3NF}iXl@2uNGmp~@xnsR?o*R*{*b(;I z4FiXptr<&?KU{_XST~DN(#5k8+;C7dn0i<4ERTi|441aH)t(Y_LdJestKVyF2*^l5 z$$Nf{?S9ZBaeS#2!lDAf9j|rnhZY6R@n0@IX)}O?A**6C7*W#H{ zW$1gp(n*0uLI>7#4hL>h1-}GGL#}w+Qn@UI;kdgOT5(a9)9!ns-rG6VQ-Qf(mPOYi z^^4!8GhDZ>t2JFd`c6TQT}BF+6IWCz2!g22Xx5V4Omv*GrI(AKzVN<{kX5p!kiGf3 zuld-)!Yk2Pl5E(Q^j%BeSO7u*UerXXgy+K+0VWL~3-t@guvwdqJ(=R^e573bEEU#^ zvJ3qBexV2?S;H7z351U|Cz+k@s^PhkpD?x2wFKq0-TMy~A5THOMed>}Slsh-1-jA| zUt54g+p;9TkZfQ)@)|d{>dJ#=gGu1VMKH5I%hH6k&nM*5wNPo`B`fpp={)hjQx-qL zp}fs*3wMtDK}nPTx8)ryQ2O7+Ev}2xl(3OGy?aWjk{_b$pZf3EJ>dUuz5SnL@)&Ve zy(zzuoHN3|8i^;6l@nB8T#xR4tysUgZMvAEes0MqWW zfvuAMH;ZtCYz;vY^nw%q?#=EGPlH0+mSXM7^8RvSNg`Usa$r8fxN2W(2(AN%=N zV@I<_!5_QR9|QTsi-T-DH5`oiu(X>{2@BIvunT~9rJaO6SFHvGxYc0+%{o0S{yZa5 zI^KgqG_lfpw^NSW$rvwqhxs$dWOZ7h>;eFw3xiKmdL9;eo3HF%0?%hB^He8dzujk5Nm=M7e$a&D!@av5vSm7+W z{dx5L)Ztp3Q%?$F#Q>J&cRi3d_7xCqO$_7Z2!2?yIJr2a!p~^7!~W96Y?*WNM0*JC z2g>#((BgExc25E`LELnQ+x}%lNeo8IWqdJ7B9My%ET$8Gjs!d>@!JAVoJePQev8kc zkM!BC3sVc0;JfD!fZAoFVWcW8K^kofhM5^mKJj*S6?pDG`j~ZpnqG%djr9AYkN*Uo z68hTifXzc0_F`{ggJWMx|1M;4rWxTKP|i>Cj>1@iegVN-<>8`PuVw$&1@|5?irrkr z_W01&nfU@l_ra6Op`wfJ2-7^*n;CDk`^9w@Mv;jRWd4p$s^cT@RuCO%vk?X3|e3`QUi(&be&V$ub&{ny;PgI}Q3LE-9|A z+|e=oq`5`1=fH(b!6fypMyXs!IxPb1f zju-7goc`*l5qm;^TCgQP63K=0$aUK9#+t4Z{kG5jgIA3fAQ$N&D$9Q_nk{xPWd`=B z#zrHG3|PimMvoX%CZsP2JaNdEad;1EXEAosq{bdZYjdrV*lSBxQ~CZZJT4&wuIq<5{Z2Os zdA)W8&P)y4(P$?o0?=d}GedqIb8zMr^C1_2o=F}+;UDP4Of`b^b?R&=V+Hv*d|Buq)N>Z@#I;Ph576 zx;V4BKpnE-r1~ptdsp{c#n^R`Y=f7Xh8AzHPO( z#x5}NJ6|>tc^+|TgF*6&SJ+@YY2CQ-M63Yazd#*;KmJ{|^iS)S^uI)TsP`Fle}Fm2 zP^qoZvqOY{TT620qaSM-r+(W5>|+KJAWzrmxL!*{yc!a_EnzZG%^irugKv*>sovhvXCv2rG<3T+4E+4|qwt0H^RsTl zQbW<&HHBFn)XY@+-6;nBivF26O7UN6o$8lD8~rYvTu{{TUnhqff6;)f!kyFMukfMsiE$) zd%Eg3h06^dP6;A>sM*aZ;YKABvx1J=4G)r*YGBtKr2;#X*ZT(q|4v@h zfPWJ7ZGk<3aW;PchtIz2b>PrsWu6bVJTALvRbjGOYRY)i2%&?e2BU76-Ud!vYBk{A z-VbCdBCz2MP^bFRw&Z`Q%KF@OA;4`MxW9ZpTc}MYo}b7(BV!Y)1`2vig0&2q=w$c# z%?hT3(@aMOZM44K8VxFOh@c><;>I~Tf$by>?g4Y{wP8#^?k;_u)GH#+kI1W@4gTZ7 z&oGEdI_<<>heBeJVhh{btGy+2-1K|wyluorvAtJ;)jiK~5m?)PR-D^Mgv~uCB8gz$ z@7cx2K)8~nx~GU&-l_}tjc+{VYX}kGNbe%sSC@41d(E| zmO;E{r29-qVk~Iv(}Z`&?aR%R!l=dwe;$dd7b>A@j0M{EuB}^ns8La^Sz;dW|vROUtg?;Ro?+~GW*ir zlF4I=lrdxq4aAaeHm1G*Wxgsq)Df{LMu2yoz0Kp{xKwA%`OBO$Y~eZrk?=fLhWca3 z?TSPY$OCj!;AWyc4)Fxs2$M5?c7fu{Nt(exCJNHfqA_K4h749K&YVHNGMe|Ae=1x4 zRFzx~UVBJ=D5c)LpGEOS*WJtAkIdIJwd(tqf|T)aA;Ap*a0D@aWR|mxyM3R}MaCWU zHA{KDF4aJTYVzRy(TY9yg%yHu5-s%Oa$g8kk;sA-=HPC6-zee`?7*Mm=fX*D;1@#S z!X0T!CMl1a3R4F0C8h)Wv${58PK7J$gDA)IL_`32o(tW`=qs*%)}+^-Ai_4OPVDc1 z0Z6l0mnvo3A|KLcvF{e8^vA62I@RTjP2j{_{j!#Q8VQK}fJ2kOh12$Ock5$5Z2GM- z%En0)6L{b72LyUYj0{m(sj=!?k;k})?f1{dHI0a{%6^;leZ{U=ckzAWhDt9V@~$d5 z;Bu*rCPVZE#~S0@#^1}$5mc#ksQnAx`-!SvyH!*44&*^xdMY2Q&97h;Pm#E|Mi?7vIU}r! zpX^G<>*vS(MSiy2wcopXkX_$_?z<#vpl8YnXRFsZA<~d{dx9)fYPSi*Qhg4>g#>-g zV)`-pi1Wy}KZp9VGZ7RfPm5XWvX@iZW?6j?8}K*e)F0 z{_sg382?dd=eEG5>YRl19O%v5JolT8^q_L~yY$zuc0UGPw)`(pwFId^3=cq6fx$MD z1i6xt$`|)mo;a8oGkK>DZ3w^8DN6T!&iL4euVtuRq#V`=)Fh&n7F9<%64)FkWcEY> zH8LrKh;d&g?J3~?`c&9it}mGOzL3?nPN2WZ^C-M5#ph`8waO;~M~qP(6QujLQZR~p z*nt%MJ@{Sh=8v!w+r8x%vxc$r$IhRRPzhFB0TBtGHP2Y04=xAh(HN^UXkHS2HE^lo zV^4@YK&7QllLo(C+rT9hm`fNksQcz$#!uK<)mzo#XN?aLwgc+cU$1rhP(NAJtM9)Z zsjIGvO@2<0W#5@Nh*PWU@JN&Illi$`^1htEkG zMq)sVYM!|X+FrRVSYAYo@J6!Msc*9WuHlh$RSEhXX1H0AF4_ScfoGxB!QKHEA#WUO&ZAJJ|3Uc>xj zbn;+R1B@5sOqIa#2DRxYeW*8n zL!VU%tX&x~FB_cv`Uq&kLybkRf(cJGaAtj3uWL4(9IBTd$)8u$J^RJgcIUTUUtV3* z-U(Vv@-b%DMUEkO#Og}Svqj=wKo%!(Aek`%pDk@2a%B&4MMWGIt{KVkZ~;r4Cl8br z(s+Mf@Q(rLXw?4nTECx2lj>F65hIELMjTOqXj$1)>~fx!1@{^dTrfpd5C$am&$>dI z5uf7W)48sj59X%7gR7?gI)smIgyTI3q|*+v3mqqCQKFCcC0@vSlGASA{INEB>Q@-ZKMQS#iz)m` z!_@m4(TZ_z9kfhRTgK4-59A_<)-3Bbl=%pk>De?4_i-S_#b>>Ol%P~gB*mhMEc&Ul7JiKifIX=7 zE%-(JkC1YyB;L7GDsI*TFQX;(%Tr=dFNRT?3X}1!zo2*OYvF3Y4X&GI8lbApy1Q0z z6q0j;U$cah@R2rvcB$xl(79xWK@mI3ikwR`d2wk`tioIP%~W(lkuse znt1BgT$50W6m?mdkN?RoM5qQ_d4<74Qfq@3i2&W`oHnT3Y!ghlo&z^oC&jF4VZh;V zZFF`g&F)C~YOv!r;*4&P=61^^pQtad;UCDnzW-o6Sz2xKjX*cb39gAj3~oL7ErgIOtqg?doTT=OQ&ONqCD3-E!i3R zgOoz+Ma$<5;&(5vT)9r31XSF@!e9Y|$SdQGsteb;g7~nEx!I`dyJJKKYwia#V%5-E z>E;y1%;%8~=5uuP@y|T#ne5(;1~?6lx-AZ_ULjDR#3C(;1rEVjexpgQ@e>hA;?}~J z5UB9zU~lAl>_NF5dnN0KdyK?xT)!xN)Vbem^ zU^Cq$c|iSXRX1}o^E&_W8BlmJULT`%CGyr`iTSO~X_&;rhnS>@4OGMRvnxIU5(=sk z#$=ih4~it5UcPQM+!+@UfI5tYfP)=ZX%jpHXmua7P5YQlx-Hy)9>8X}ta-_L>0X0a zrl5#)kFn@f&!;85BXcE1>}0oUqgh0gZCERRTosWW7cG+)^U|kn`|wu1pVf<1%ec16 zGPCe(tik&^Ymj&wR$L~adYx9`*or!1PJ&4Xl_SfGdP+*$CTpm8bmB7L z?kRdEjt{^5EOV*ZMJ4SEV)@rsO6*)wK>F?vxF;HwW%UkDs?Dqr5@|Qv{1P1OKo8Hv z6pYzE8P{DQw0*HB-2@C_xfHleto!=xJ|`y53Rj7?3S`pDyC11Ii}Lh$;CI+D==5Q#G2YA?SJ)E$Bk|ir|X}ZdnpZlBPd|1BX?L zb6t;DPc5cos-;d5IBfN<3ImoSqX>3%)N`MUc&0H`U0rrV<8k1Gfm|I9@6#`$kuZ~Albx5w|e$9-9Uz-5ZGQDfkp1sYL%D@yL@ z&-e++cqv4s!idCyzD!eVNqVB92>=qC)tG^{D^$Z8?$%8o@+U4_5j@OK+_Knw8pELR z?PkvVkn5N9Yks^ssr_op?%XQYuZk0-2y46|#H=!gX;9Czo+{Cswmx)Qq~l2>*Vn+@ z%~YOC-0Hl$-rkhu0!3%?q|^9CS6$&lrL;J4bC)`^1p9V~-Zxv;`6*11i`!aR*GyN9 zZoPA(b;52jkbx$g4%6 zbed1YZK+_vr!6=y%z_nA6Bm0{xhr>vcYpaUy}4x!bwAlba@iq=)KMR!;Z60@7^l@K zv%VjvWw^Ymdt4Z&ZZMsV&L5Dc6&f&kQhgQf#9iFNBKEt{RIx6|OW)xNq!;sIHSMQQ z&VNhgT`=8C+s_h0+vB|OFIBLJvntPn|IK0IUmAm#B9LLu-+aQz zX7b%(`xrE{dNw`yKG+g;tZa9>d66f*n(<)jP^Mh_U<=1#u}z`vcN3 zTa-4U=o>tB#7)-R129s9$_~>=f~7aqu~WSs+6ltNLAX(gcO)QS*8CPbhhXo zN{bt0RV6Chx&T4c9p}7y+dXW4OX_6z>jogv&O>DFL2xt&>%VF(zY}lbNPGExqm<-I zcU~$kEND^@#7qj!~gNSU*ZRfc(}1#w3`Z4NIlEST0u3^pz*7( zoR)vVGFj03;*K+wit&f9~(kH>~$=eW-V5Y93-UaQ>C~px}^+w*p z$+g7Gj;d0AFGw7f=aYEOc(U#lyB|n@KC4))JdPt$>*cxPpeXk%IRC8!Ff(k@cJkMK zvAwelx{BZ5EOngiQtUinI>N<--EHw$RefKGrCh+Q0xE}kum`}Dw2PJ6TWp^uTlA)- zZCVY~l?I-EtR9^rvEyqW8#FdR4Hx0kO2W5xjQ6MPY=8Srs*CXH`iAqFpXVXNFP_P4 zXIDyDOjIeU7p*$qsS5H*FClB5EWLXW>mabsP3EA_LLp6gyt-{ zq=gG$8nY4-Y9scn9!{KGX-VCJMf7*+ZMpNr@GgD1C;Vog`@`%Ebw$yO5YXQ3XcbP5 z8y8JM+#n$4fbyee@+6ZnE_H#WJHcyONO0>C^*B)Ve(nykvEi%5YTC}g{XXvZc3dnL zYvIXMoH+&_3hn(AAPvPt^^8SvT++6sfVuVRd$iq4R*RD&x!8Ht(Ro8=^=~)_|F(4X z&#h5U@)A!1Iw-nZzg3o{oX&|j;AQ>DQ5i39;h6wxOU{HEHY%nRt2{VX>RdnKQp$<1 zy>pFmbey9Np~l^s=$DKniHH7ArUR$kN}ek14q!)6*&m5KJ0S;?-*qc=I*+hrmkcCsuFR#~ z=6J9w0UC+-5A5iZGt%`UrASm`(c4z9czFA6!u5)q>~!iZWE}ai$A)j@#9RtTQGVu# zQ{K_hc&kLK;ik;O=(MHxVG=5(?y&;I8vjOu}wr<08 zKIG`z!HUA{QHowIIhKDf5U&i&EY7l})-8K*!SgBI%BWLs{Tb6%Br+4I0B{2##GPp+ z$=FV6G*{GQ7|-;ZTlE7|Y*14_?e6$Zo(HD#?=z++Wm)32n(w6(zL5p!Jf z&)gfWNl{4;>pawd^^reUr4!n-9GX#5%?AuZbGzrz=8~7o&p$`-0U{@f2Y`MevH|jF zQa{lW=QY4;y-|NLr#;zh14FYMoDKlu0(qtS^ZHra$-N`O@!CV0Tefo)qFS;2wSMQizB-0Qeoo zf{u>zCMGOAY2Qg~UaieJ%!=~jBFYOaPNe6bU5jUf%IA#NfS3I+ycq?PF>-qL1g~<6{uFG#BhcJw*@wITy(j|g= zee-0y1~#v0asD%m8`>wJVbK}x!u_gyXn0ruZDQ1uCZO)F*V@$5p4G#ziG=YS*(d1o zrmLU9ZU#`}z(lIm3f$xXksiC+Z+jhORA z7d7k5W9ms(7YHP8UPNd8A5h{6-Va{6yUSg&@DxS3(2DbTbWyD9LV<5O_KkXk76ati zc@ZTA48k_5tCgwO5d7qR#cr*0M%v0Qoz59kbF;)Cp_gum)Nik@D_RjSXGA9*F%%N1zxm zfK_JmybW>*R|;WRB(%zQO21x+w>#*6jZ0kFzPj>kku0~k54O;E{@`a1RyK|z2CiHV z3)*bvD{$vg99+@(snL2a`9U(b&+!d+6`43q*{vf%*D)kBE;5(_CTB3^)@2Y=U68H~ z>6y6YXp6gIZ(qH`M> zL*<_eE9yjA#0P{Hh>Qf~dYtvzeW~vB48xBG&OGS{M@D3b41}cgnVBTX2kA-0&n)Zm z>?Af3z>VzvpX8u_X*mBI_4034YHCQ)xfHz}fn&>w)5}SPd@M<8Br>ZrrftQRxNxm0 zX|}zK?1zZ-g(p7qlGk4bk%zFfJmN54*GZYX{gEfF3*<9gquZU;KU0euvG5V5y}RgB z{WDQ^c`=QB4zes-Tz*hY-_5vb+a%hC?w~jg#Ey=IdbcgR_Ayy{r<yAJ%`G)d)4@vWqq~X{dGY;biFZb zdWh4l=3R4S_fhIKPLg=VHp6+1_z!t1I31e~^53=OQviv@+mDOy)t8#WShl8=w(! zxJJ%tMeLCnj$b!|;Dj1`!*nMv?w3$CzcE&}Ah7a<*H2?ywPfQ<+qup+6p`jiAZ4ECYzj>9dD5VbVCwQ?p4Mhb5KDhTJ%XqNur?-SL>`XlPS!L* z?;6vVyfu`rm(xm=5&jw!VwOV?t!qDe+A;Oq*k8tfjc#b0&YnVjx;#<(33tQc<$L}m+PC?hKbx^v|-mby)+pHN; z2Xj@dIgK+lW*;q*3%FOwKSL;XeOXtdprR+2>3`CbBRbS46x&`)JSdvet8P4dLf>8P zz+JN>bkw#!mMGGGAMb|)_ZqxB?+d=tnAyZEy*($i;+j>;u&}H@^ssW{+c#LEbgJf2 z5$lDnUr`LJKJ)EcJgGqWKwsu}3Z5EgGl=%>GmH&xA~rECh!RYymv_$Dh9sX&ibNZ2 z8~PfG3ZGn(y~!M_DMjS(98jeVn#m)TzK%<(_-Vt1HCdiM_*`r`vf*sHVA4G6T+nEA zMKHn9R@TwiGZgtK0#czE)l(qc7u)i(TBDs5ldO z9xHG%H!!M6c13pm66tLc-K@yweWMl5-)-vYr5TUYBj&JP$18V9qCIQ z@J#(VA)wL*Eiffy>eYJG(&4PjRtDYOUzO`TZ*L2T!@u3#9QEVAH~ym~9@)KD*n#}- z%~7gV!4(aL)$*vmR;b#r+m7+MCP4sLP~@Ko_Y1Yrwm=g-N6uIM@`cft*8XK#5pv*H zAAoMIG>;nF0iwtxoN8^dB9d@@qG(~+cHIOouBbv>gBz9)LxR|xXBWQJt}Eh21d;vjKmg&? zoN6fRQYumD_X?Uc;`>qnJd@v+Cr<1pGR`7};J2n7Iy+h>8*7<%%@$^3#rEw30;+X> zqA*$BOq7~~)P*r__8M$wg}hH!+*VeJRNbh34iU3;-$W&PQga-eIaY4YTk+`uHX5+r zOaCr!uTz|W9eMgOk1_r->{|s}6E0sQHLX$*I44EL+?AA3XP+j~4bj6M$9D^vK2wII zCrdRRh7OZWLF)L!Pm(~yF_r6>fs#Ul{6Tkz>!oas5-Y>LUajZ@{UW6S3;Er}tLD}e0*&qGQFGgiE zZUTAtni72vwJM z(R-d_?cuD_Z#G1qfXdj@&IA8JY5SXz#6SB!z7b%rUj$u!heW$VBz`U1dB^>3AhEVV znXA(MT3pucK}fp1VmbV^!`a!K5cI2l{%%8b=>FCli3{fGYQ;zO)4%Z6W)I%pclBeq ze?4w|Jw;Op{82{uV_vo@!Y0ob+kign4xV?q+Zq5nsn&o7n8FfgBfku@m`o+c8$BW8 zPe8dE0N&>c7oc&A76q9wc;|HQK0i0!kPiG>?PRNkGpNy^iaF% z(Sotl${X#7L@%f+L@A(qVTm+liFAtE?BCuyyw4d`$6TWSdB}*lq%m+=_(&eF?x;j~5=&$dlguQp3*DanU?9Yhos}1r?>3yJH z#sSn#a6~XA{3d3fUMq_{6Y4I=-23DWxi3&S7_#nU1)X&CB-f)0mV}bAD;+AKDA&ai z_F(6Gg$u)miZut|3`*|rikAlK!~99ro^<2*7TYDBkDT!~GYFoTdVUF}^Rk(@amDQF zMrltLOp1`;W%Ho4RrV)~tPzmH*%FiFzZVz(SDyc`FjGi}35N6-o6lnLMG!3SRI_LW zg@KoBna=xy@UI8RRm;Vz3IY~xxph8XNIIm8kHccYst@tpokv8n)M`XM18hm7J zyR*q#W@E<<#n)_WpkTErps2}7-El)p?M6vKQTs}u!1BILfE|{*hv{K;$uef5)_fl? zn@?NZ-xgu z2rY`S_bAoHKjD9I$#alYo*j)ue448Av6A<>DTx*uF^B-Oe{UUTE8jNBxRvDLnmP>+ zSX<`Pga%Y}ooS{(spObMhaBb46nFy+{Ql7c4gkgtfUg8YjjWFjO?(MJ0Qq{ z=|%X!SJ*%|WrlEWYMRQAs3ld%is2lStgUk{o8{u&wx;H~_c zo8=_qm6nw=5I>%Dz9DeBK6Aa?E{k3mn0qcC74%zSW8+AFBiB%7Cm$p(f2o@5(tp>m z)}Gy$l6Tp40{5AMpm*{xuEO8yK|YUf)HwC!L^}efG0r4;wrY|$R-p*yXoPLK{iXL- zcsHPee5a6xaC0X+(_DW_L%nuDP(&M&1|9cE1iy3^8auUXv5GVK)%Xr+8Xrs}Nyk(; z^zqW;*FfOJ>34hK$!db+N#bh#YPgGn8_E>ghP~JjM!uPneyI2{9}&8lO8HPO2Ql>c zvgq7^d14ueCU<%iH#R_I$B>7r#=sxFZhr0YPJ2ns#UXh=QJ|aKJF)Nb&9VI9>XR%v zbuM`a?pxu>+J5|fGB{rJ(6ezQkNGxHKsIR$7<}b=qg+yf&0r8(Z}v@|_fZMw`&G&f zOeFvuQsK_Cm^=Zq!TPiV0-z2)jAQe{FHN2{H5Ok#h!sO#qknR-Dmp07@R4kCCv-o`TM;-uq=ixR`rkv`$EX6xF!rcD;ep0Aw|tEc9~egY`7iOY)COYm-aubMp=+^AmUD|Bu4o#2@Nudk&omF; zx4d3|zosTRhIoBd`Cm4xIo@wc5-OT_*Gy+f?Y?d>kf`jjwAU{0B_jj}ILnz{zN?vAO_ zwfcUo^uxi8pVPr@u0qLxvzWPr+g&?Z;4#DZ@s-2VlGS~i;AdD!_gQ^)@j}=RqUzPD z6$Z-B<3pVW6{R>!^E_t|YP2ZwW)KQ1wx@$}6<0!Nh?5x*>L4+k+2f?HTzw_C`x?uKtC#beAkJ-Y4{#dD&x)fBR`cQvI6~syF7~D3-1UN(4X^lIXwIv5GX3tr9dk7wUk_U4_j=tY^ z+DvhsZ&xVGHqcZmVlWIpU~2LLLd17X5l!t9i`CT$6%nzFY&sMVlvQ*5wJmx6uY4ST zM@#tU|0OiIuDNDNca!xQLSv@PPnc)B`Rrlpk!9Upy{!G4U&GG0zGod_4NXw~`?KEj zzY=Vg-Ks^+UZ!+v+)46K-=H6ozqMiXokel1gl(+EZ*vMDeF`oLd*bpmY(L+ozbJA; zrV4VpT@QvcrZImR>Z|))g2Q*8w-+ukAKK?m zCMW;lX^~XUleRP^CjF`)RhK$eQePev=o;IJOF>;xV4ayEyvT@sbqZBt`yBrIYMmSX z5Bvn9?L$G5Z9X*;5da%p%Vcnho#_NebF(#Ci?{9+HGTa?t^Zot%tfLnpxk%Uni9Ha z!;M88D5>SmXGxt*7J3{%0Us>i?G&9P7!AHtX4QRY+7Z>e0>Sf*WWS~QM8f{`sQ}07 zkO_~0<5tqMi@fJ4a_0lTvwsEzF;;3bYWz>k=2HFp+$S{L2MYo8S6b=tYTOSC#Ds|7 z{8qF5+r&bFSuswQ4X#uQWdYKLRGDq`xY%I8w#!>-jvhhlsP5|X`0TC@Dw916r+BM8|n654M>_J~YzBZEN z^;AOpp>Spk zKW!V5`Z~6%cZ`F{T%t9w`HkYK^C?3vm-p=MCFh%AL>xbA(1dKDD#KJLK=2+RGbC4Ep}~ zwPPC_Tz|NC2sDI}SNovHXmE8(Y+k652B?BD_Y1l&i93`fK^=qC8rsA*a(d{JDtbH+y2xE_*y;ILkH~KxnL5G+r2l3nySzRk+S<~2=av0POUNp4cLGugKofj&1X*7fH^H&P?dm`O53}e1RT?-F{>N2 z;LBy+k!C8kPp>S3KdtUz|9~iK67!gqtf2_==|b*%vFf88#o?Ks{FQpkih~bR)F3xp za;1iI=g7?;OyJ22|ss$Z=|=5l(GU%zdtO(p<*+vT=RBP7~x+Tm~ws|0X5S zMD8O%=1h`1%4O~bojXmx1^Y!KS=PWx$iJv-oPP$GrLCauEU#Nrhu2NW8l;<(KY$c? z>bTk<^RB19z~GMMyXyl%Ojv)IY~ZEsg|9|>XV|;>47C&o0|VQ>%~zS}fFeiG`?<>EDceT6_jtR|c`u`u{%+ zDQ!`O0O>BI=Yk*aI_UqE)uhd7#Nw*M`*?e8hRqFbZpFvzrsv6y6R>|63$^7~IlpS|9XQsEBBJW$G4xr5+q}@vI_mik{ zrwk48d!`1}xdTol$RCh1zijZOM((v$>MtHET+>rjB@eb%lq64|y=Cx9%9XNEQMgEe zvlS7zvFV5k+Z9;lAZ^(w%qL*Sx>(9e;C=MuD{7vj)6EeibHbc_K6s>q+ZI>8KI%Er z%j(ut@uD@dTvDBe@4!j)z(eYDUFcL=7klpI0KSCv?9TZgXqCD(LlzfV6_L8hgZ9ew zTr$7j2L~1j)l+e`l7sAu`|FDn zG@b@uqsD2TwoPnBou*?W5*qLGAee3>M#oy@lr=?k87c6j4^a4nE?jY{XtBuPYrp6# z;L1~L;`!tOS~1UB5OxdZ4e$P1KoCKhgJ#PcdG?wWeu=6vzc22Xq0jaz@k($_?B)_u z8Iu=phY8q5+;`>Hs^vYpn=hdoE>SZ;K_*4#cliNj?SeJKqG`hf6zVgwIaP~Rt6wVS zA`t?kk9x%)286uI4Y?{nYWm*|_y6AO>V1|uR{L1BR}y@rPqEemM#HXBi{CPd0-N!b zl~?;96YY!WvO(L(U<%=c!2}=s*!?tbS@Gvq!>#Kt)iy}ONIyRwyBqj0jCMS zm4sdfUBmGOWdL2LCZD5!InQo7kUdR6ns1=Z*o`Qg%t!=?HLpK}i5lvaXt*Ol8tS;gl zIz}X~7cOnKegH{*rv^1?`+W$yjAeiuWeg^u@uw3UQ)<$Z*Y;kZ)Q%}wz6H5uHxR6X zEDxI$^$!7jI-6^`uwzTC-URwqsh-7DD3{x1UqJ;HGJ8*fODBw71Q|>uVlDWJc0K_9 zM&t^&>GOC6z$vm!zG=KlYYK34R5}>|6#;P-k_%fmo*0V80}P{JM{BArJf-GoG4sVz zc9eRe)VqxX({&I>rZ(gH>vQ4GtAzV#_ZSXo>_som|H5pfeu_h&s!D(a`bMq1 zyc^!a5GhGX;m+>DAZ#oEyyHh^(A5y|U2HT^-@6+eZ??+P6m5z(g^BF%rD}h%{4Esu zPJNf#gM>&Yzmav4z%j6XZ$h|nw{2L4W&dfSpr|7?Z_c#Aj6q zj$a#>w6<*9&2j7g>791kE6F6zb4RIs>TK&zZvuOr(5BctxUcmr@&Im(SAnZf@qNbf zhu6qi#^m{{yniU2G{oa}G`snft#BxxBn(8c*l3mo1O%$lN#W{2Nz z?@~r4Qx&wWZg&>4V#;n-%=J#&^!WyeN`ClEzAK-?*v6?C#?)u&+XpzKW^KeekrPeK zHw3(0Gy+rSGu*$u|DnYGlyrE>D*m+%_r#%0HHFcH^o0(TZ|jI6RMikclX<|rBpWj@~pVLdR_(M0!sr;yipxl7# zAjZYnZD2A;jBq8Tp;@8gjX+y_%Q z>h>DzZAZYb71d|F`08Ua@89MV7Q&9QwWb%kQesfNY0I(0agRQgcLbcqtOCdGjYJ(P z;3l_due#2|ZW8y3dzxhp{9y+iyGhlxXpnVjg8d@MJ6Se<1_W#bR2(TC2_-Jxrv>Kg zfDjo|)Yjs=k%3{iqij)Y^$(PTwUplfe8U3~Hb<>R=&B-*qg|k!p6Qg|oDUv+V4#wT z+`)IW1yc?&3=OffMyVRqg=;w)I&FQZWaZMcx4_!GCt}nPB<7a|lE3A<%z6t&tq9O^ zLvDmSQ#5jBUz(A;y<&EzCKqwbN|yFqNe*;sdWyA|svlTkt58s6ZhzkBZm8`=lEnS( z&f`S!&(Hq2(>s50r~D~s7r3BfH!DqOFL1XNC4@2XrD|pRvFuyUyeZ6Z-+bvqLWc+l z-xt`EJ{@dy%s`5r`>uj;C$elQ!EY;u~{I8;ooX5^C87(dhyT%DoZNeqHvQKK<^32Wq zEaNX{a3n|*eeNC)odG)sn1r^fhXUzDJsSzy;>m=Ullg{u+m}dn?w@nG)74x@0d4+1 z_nDL3b;J<~z#EzaYIbdU#gGnw1$g@Gwe~=|Gu6TTg3R@inlCf+(Zg9i6V%BHq>54XS$r^I=^b#oYu8DEv z=|xX&c+XlUaq?1MkB%7}pY>F~cE$6>-_}9f>#(42?n6nhB<&0o_?v6v9WfA{lTU z_ni@aate&HHKHo_oruqEk<%u7!5MsDt+L|uH*aqfhD(tUGE*jTzQjxl8|U^~)Z7$R zphvXP5vb$-6Uff9Mv{}g6P23~mf$7Eqx+(qx4UU2^zVP&xEDBmGa5q5yC-Wdv71Ik zqG+pU!S1y9NwWJ{WA(uOy=c%cgD%(?>9BH17+O0}XkQlyA1~h9yX^v=9xAzp4RNcppg@1R=%3eiX-AlHG!X*wG)>T`17|y*jnXiFimWMlh^40nVg}(mJQV@)+&^+0mH1=MN}1?RO!~7;4s1 zCV9oEihpCQAliz4@zP83G`+86?c5Ii(-M`Uqe~Zz3Apzi9S-EP1}+fy=RX`Sz(Y?6 zxgLpsxE0WhaJqMDhP=ry*jr3plpoy`ruIp@dR#3|g0I~b3($c*!_PSNy`fO4#IWYV zg%c!OtEh;}Y{Sjec7+#>E?nZD#bPF)NF7qX^*p z`D+PDcSE(}Z&HVrL?kd+pndw-2!$RE+rOb3o|9-F*-TqI75fNRzNemwN|a9SJ$n>H z#QzOLx(;lDt|^MPtQ-xThd%Gi*}-flM{f%C*B^MSOw^w!ZP<0O3AsNR?;|I1SQSNP zUjUNbfj@es)0H1sEClbU)(77oBcmr_rf{2x1|95{yO8ar`w4};DqP#Aa+sHLRi{q( z2)jKtBw`hiN7ATkYE!XpLFu4)TcV1|7>KDOkEYk{iY6@y&$ZIzI()`uHob6>Qtx)y zfvih%rbUdOT7ZB=G%068hGrWW-fAO9kYn!|G_Z1@oB%Jn-O}tk<&VsVtL-r!9?1S2 zywFnzcsgGgWMQ5l_1ibvu~|5KJMOh3e6?rtx<)FurHi01*3 zi$caUanDGT-TPe&TISw3OUiRxY1g);JjvN7hN=wy3@Ppbx;4+@Y&Lr5(`ydmZ|3pr$ds2`+m*Tj z_;5WmE%=gAZn9peiug;D?HC)Pvb?CU%CK~9ScJktO@LEAWd5O{h$shkwne{myl zGu0yAd%hleP~vgbbRM5|8Y_(BP$kof67IfSiw6te4gGWBU=De5xD~JLZK|W`Cf?{)yEK*Yg+k3}0jnVg45l=sAexSzTJjC)5Ww;NrLh=W}u+dQ+ zyy_d1h^wDdw`aOM*{KfRY+8PkKh4ej1oQ#YuBH9)^ko4qf-CR(%jw7+xh7i#CJ%*~ zMA&7IZn+mHC93&F!*3WM(q>4Y_OHgMAY#_&%zm9{osX=8ClX@SL{sYBlA2QfxGa!7 z5wIgsKp8_9@8mfGBmWa(dW0=KYe%?)9?TOcZe<>^$cw+bIccOn0EBq~t{8RAOf!^P zkxP;NIWSu353mSy%i|fw0-dVEV5|(#a;5HoxePL*_mEMC0y3@NI3>V2e#`@WTF>&Uicrl+u_&>1g6KU~osW`nR zT%m5G-1F|NDaLT8&3CY)XAwWfsnI=`v>KI=E0)kk&Y|Fed7_1`JG%IhGwVSFLY;QP zv20A0){`)sTvExjRQf@lD6h9Chx520uVTY-L-6gH@VDdq<{j6`7dU&2^?`Xi!s33X z2e8N-{={(qY%O6Y28OP9JOP5IuF`2Zppqx=&ggnO3C$pM-NpuQtGw*%hdqbds_Mr| zlQpoo)n?Xj(d+HI0u3K?>al-L!fkYMZ^lguU|x9Rs_%zAUO7h&*S@PNO8wUT6vs2eckrh<@ z*_pm-M`?wC_V#t9G`_Syg@-#nlK}|YJj~9T26{@P23p557c9n*AyXCUC97gDv-krl zEQ;Fnb6$ruM3L}Q$>IRq+iYz9CFXcy3x^7K&?W|`+_%SI`Fu#okDiNkIjKJmQoTNy z-4>q&kBlf+#SAaB*vy`hJN#V$Oz5+lJ+7Ok&;4ft2hmtb=RwkUdvhshI&CZx z&SA8I_$lj(k;#H-EipHhiU1$>Va|Vm}kJi-v@1h$?gK)Y)&kPuAM=4nD+Za5 zP#@qlwOaT3k)Tu%Z4tFfIFIr9XtHO{g0jAND|Dwh-n+S)$SR3SCaN~H4k#9^+zAjt z@~qL(1dF_uQJeNg)Yyk{-<0-ULBqgT)%|K97pzdY>%c0L+kbH(tG(6I%Nhw+7{m#} zO7hZ_+IV|zL1p~?={1fILE>F1c-$WQc+(+dgn*j`d8HaC!nGN% zdRLjI>$G)VaDY8|k0+c!w2| zKssMmZ)>jHRr46aXGh|#6mtdnSp%<$kpiA>BgZSFiv(N15OXs^84#ezkQ#z*WjG!F zh!tkLS0(c&5R7-+g~*wr#>1H&ATOeh!Q9?9@j4CPgSQVKZ;NNKROEP9%itu7kvkPH zY1zJVvX$>$)xyO#0@PJ6pu!96A&29b^ZfIlt!CYiI(2r@wWWjkw z4Cr%Rxovxnd7OH#F{K|Bm%UffzM>>FD#D0 zSis<%#byGhl93ObpTb6@mu3BI`NzLi41oTU!(-%te8a9oVZIGmkgID0?b%8FHO(xZ zg*QX&+hCH-m%%`pxYG2Oc-p*1yW4offt)MI-}5WKWLY^7WcF!TdORVzyVn|fqdpND z!Vh5swl@sQR}AqtoT~(@`dTw+3LhbPveI}26O_DTlL6l)!-Z1@1ib!LAQD7k%;4jc zdx65869=9~#LIhg-Qbv?Lvq$bV+2f3eB3U)8%NFmS`&f(Y#v()B;?fePq`6=m=l6t zL0lf-e$mOiaC16v#~Ps9qJQfCq`1$5$WcK8Su`I}$3|&}Ha=O;{{xH+(R@)FBV)>6 z{2FjMf$yejy_-fSs~>0i$$WL>v#GH%^K&!pIxRVlARreL+U5jyaGpE>aEdF?$JMAA zplEBHauUp7ka$RVE|V348#mxFBu{KbBEoeQ^!((bt!TpmGi$rs^?GmgnO#yr9A(zf3y@Jw8fWtWo=$Zh z{-n9>Cm`9;XS?mC$ZQJaW2cWg8Vz4hS^=q}w^^s`OIt8&5bG18aL^%C`P0e|MwXj* zmN21rZa%n4>OLS{0g`Rf~?ggo5SHAp~#!fD(3lp}}zlIEg0Pd4EbqpN-;3uv|U{ zJX0`_v4avgPjJb;6(IfkrTX=qg!H6HdJfT6+(h+fCsh#&f*2^eG2alav#uJ~C#zkk z<)Ro1eGr{&N)0cJ<|YaIQs~MJj$2{^=3b}}iv8mexrArqhdL}jME1J7MISu5imDml z2y;Ii1|>?xV*1D&w{*}(xpfAI6oI2in7Sf4hD{OQY-avi43b%9GB_qy91>e&V&$-#+dmd+RaD5&95y|sDgdmgC0=s_{K&TuxK?X-5VKDSOsAPcb(^v zXDZMJj=;zQnO1@PN2{b9kW@E~+a4`*h#1cVx^EErUk7|h!ndDj2s!ROI#mn@GA8oi z@}K-by$8hQ{webn3Dj^Pg#^Lh+}4GjFOB1W2bxF!0L^m`$1G*K7Z--R@!4%Tfy^*v zX=z1`1IPfBhTx`nOi7`9-ACnE_%)!JS^cksPHzqmZL*IF!zI-+9^)sag3KC%nw^1O zqca*n36ZW(6Hr2Am5w=H(@6dY1X}GV^Go14kT1#rR`45y1Lj1Y_672yvP8JI+YuFN zCnt`@&sun$ZR}|YPA^_yOIsdG^91EVx7P7o7ShjyTF^S4kIey2X-@N9=e7Mqmob{d z6IVP)EcyG5;hnUqmY-UGhir!f$hP2rAloFZseh>Z01v>0(z?o=&9_d^Pius61G+n+fOmd0d_4AtUII8IJ>IoDccY$0{%b#F4VS#V$76 zsY>jCj1gS6m6x``U0uv~}CcFS3b zm!)vE!zujO47+6~n;wP{{ItsmOqU{vM|c}FVVSZK>Jy97`ztU26%M} z$arrD&ouD4AHUmG8t-T~5}y0Rvk<1S>j|klK5RaY&=~-`0#Hii#h;+;G}rD{`4_w4 zD>L&wN3Fgkw#k(~LM+Pu4M-jWAVX6g08DoL111mtdoYJ-9JTz%wLKMUYtkKr*c);=;#fES8@CXDgYy^+Fq-4$p}DfmCD#^8#1`z zd#&uRLbe}=*uRX{58hPMOA>7+q$g<&W?)fMW}U&3r`fR}fznh#sCrL!Z-BXn z@MGFFw3>-YVUA|`Kccu# z@r#~mtKN$)ib(_w59l-x(rmY=1H1SMqdwc_Y#-jd4XSgp?PA;M0K16ww*U zVm$l$7hBW$<1&GhpI|fx>^XwT%)w2tKKr{eP4s4VlGEW3vlBfIdyb>a;40%R)B-N| z8$@oG@pC-9%6ayo&pG5YzZctkhviT0iXTD>@|Mu&39l;~C0Ck03s8BUY0z97#*uuo z&YR}_EabQj3z*RU!F6itT?>T0eHf)DjM4Z{Eub@X_T5;f&MqV%c`yDr`*h5gVTdQV z?k~v_AN}n@oVuhLFScyos$NAL2rxqDb)6mwHG?7coR4xK+nofAxXwwHt82i#qSp&I zCDwFRKw@$2){j*=5MiKn{8Lw zx|Qr1v;^$&$ISdH{zVoA)~>|g zO&k9UeUhy%UwF2*eb~#6TnmrCltywzfXy zItm_Q_MBX>(~^x0IRJr?57i*nPfY-)V7|HK72fKFiSC6}ZC%pgcfX?Ex50xgL-q{{ z1SYNT>k}BqBv&5Yy{#7C`liCr^Gd#%TiJX{;g=t#3tAA-fQA>M6E=u2chIogj)6o5yrfeGe923OjG~ggmcS}oq3qJdeqYD?OI*6_$Hl%o;8rlZy_9%L@+#GG~rW*W1xT5}4A#Vp4=ylfn87@L-ym z`R-hNA!nE^EY7d^;JV^#Z%+=d&rF*rxbRRN_A{+D-gm=AFnNefTryzi-%}X;^Guvx zd;6DZC+^M}XU_VDU@c97%G(mpW@<%2bR9xy@5OO#vG z-mm<%V8ZyGA#?WR>{klcubEPtL?7-3W&uhCJ2xAksKdIIBatJsLX+0fhGTk@;XoIW-r_%yWI}bXbRjy%$iS-nz-e==w;i?X z+lD_iDA>+M1&7I)K-XR0=r``rH^98>f2N1F8GS_m=()6r1{)B0aeK$zwNHgqX&V((|xcphF~ zazxwE+Q3H`ck&f2cPD|<9~jyxWmtF-jwsb(kEdhZ-+WdK;ox&d%wb-+UALF^b#I7OE}7W; z1{FI(zYM6`zMe|zb{D~;sp>xj=Gs2<^uUPKykf5JEmYQ*MVbcWKGOg7GTasv>LzDZ z4iOa)T+; zJ{)a2-JLjfut){2y7^9f7+_twePcQcbtb8q+FxQX3^_jBv5x@d^63%cy9O4YaZ0M_ zPMwW9d^M9c1n6m|+#;eqjVL2p8k8|5WY0V+c(f+Y&=T3SV@$;S)`Zj)YBj2i@xjlO zK>k?9G}}~0KRU2={R@T_YV*{;&570O_`Cs3Y^blTwEeM=QRHvXi(X;LEL30wXb;XJ z9u*y%6P`c9e$g=Xpc1XVG!k0V^Zq)vq+6{BVtera7)yErD8Wr-PTTAB>1RCl;r8=!RW1 zq$pM*z*YbeempIVS6c$k7^n{+{khGmM>_lZDfWYimWQR}`oqKQQ~bgSheBf#W^8&h zgEm^yjcPzbbM%d<>zqB&pYhiQVy8cM5qBSkjDYf?VLqQmxU{%h#y&>5kq~WGT59QM zGt8`Sh)I_}^srF2x1a)xS7MZAJDBa9FD}y~4hx!QiX!nEYkkL$oVHSYsD|>h*l|mR zESxu2b{X@#b^_`Tk9xaq@pF8Fus#O@62mCUO-PP`zMu%l3`k9OLM=kwg zjD?2^i9U*pf@6^R<-O7%8l`m*K8R>=9uR6r$Ilo!dfR(3R(lGFpqh43O}(7)-wH(z z9Ao{jE#aqSjs`BJXsg6eCzhENieMbqUe-4(v4t)P#~Nln8bK0%0o2$8Lz|5Mz+{C5 z^ih}CTxTiV-|J*KOSMA6Vy(>N`l<&MG>V;p%f6kIxXrL(YqzWs3y3mUT4d0}g<}Mu z4q?%-wtkhU%uJ!KV%iyxq07fSM245GS5fwF?_JiBlDr?-y&TfzoJD;!*vFjGIPlwf$}c!`Pjzx(ZZ9?MG5%_lD3+!1K>sVS>%FA zF<|GXq16p*6Y{fNkWj>U&oPk$gw$1r6<8*Mn~wT{w4> z)CGZyLpW0XCd>qO^-KCUh|W9#&UOoJ(dB2Aq4@Rpi?15>`?PTaZ-2~ndq5>m8@<`akKmU#>7`v<`dYK}UjO;ggRr>N`!+m5 zQaRetT$KO$4*J!)u;L@61xD|($J)dB>P>;md2#nzd{eB5yfn@W%#T*3=)CMPR7?{J$$Ru6Co68*|oVh&>FWNS6at=;Kgg2k?pmP2*e4ZZwdJ4wp9 z61{ifz=3`B;}2m`zfamIgV)~CfrompSW9w$@Z)m(Y{RpA%e+bs z9ek5@!-`z;psn~kxRY>cY0I=q5umq99T(xc`4k7k^vS#_w|^0%CU0v*G)m=F*I@eI zNj+alGcok^(U|&39T6KH7(W1|0tZB(wdMK@R%x1M*G2CZ6pLs@K2cuJDgC~yNtcuwn|*MfGfe)TmV)v1hYn)& zMo%ENOIRQ`N~#kcr{4WM6Kp?f)8h2A?d>q>VS#+6D3x{Fthbmz{>4w+>pOHkaqcp= zRZ#qWC%4!S?ca#FeMfv_W;|PAGo1c;cz48f>Mk9vY%JyS(h!yz>T&*Lbr$uf3o4iq`5}eU|w{>B9b(>=6U__LaXccmC{~-g5!KBa&@r}GB!xJlz->7e6 zUxlohZr5d-_ejgh9F?!*p@-c=- z(uc%b)%+A`tE&o?1MG4SZM&|csEGswv){HFJg(d|v5s}RnZf*e|0A*+{}bHeF@}8( ztc%bIU&N1Uvzh!2a&*)m4&Zo@WBQDH{Fo!|MRK6Vg7UH^kBmg0pZ4Dz6m;q835Kg3 zoxLtG0~Ig^=)v@#eYQIt@E+Mw4YzyOk|4snG<1!~=K;-60W{k&7;JQ-Eg+gvnT^<7 zV*QxAyBJFZ5O}@D`37Q!o7|aCIjP3oWIT^XGxZhRFod2*Mhw&hZorTG2_G`%Votxz ziW%8(t>3G8jmd49ehH1{KhA0U$DY=|%~bvK_wm_!6Bcr<);TX3aHbZ0j;{sop~g%t zGno!fUZrApi{44aV6+$d+|h5s;2k0ULAB6hsnP%r5}%}Ajj`SkP{QEa-UUE1x8y-q z^qDIiXO4+?bvF>t4x!I78(BH+b@%zhpa+3;_nCEkV zE}?L}V#KPjm<6Ai{>kbO&6z~f;XBcg(f+nw1tTWU$bFh9(w2_x+4^iwrRm~1$))cS zKZu{Tn8W~g$ps7pM$2J1Jj@x0KsL-Pv^C1;rzF}1p`}Av89!OHoTjtg&-92s?-caC zFHF%h%V(dDY+D$^OCFwkIs&M|bZ>wD4I0+l_alobM!RS>OiCniEEC$qtW? z<@r6?UsvEY()3@~HaGEF@hMh4zk1_!rJ6+5C%*eF*ko3dW%q$?@ucZoRON!{E@9d7 zGM7GTuzf2jBu`0uPk?Se<8f~`P9Li{WUQvlxaeT`wy#_NdD3>_qqZ!y*s@`+M9sVHWdG$f zZLdo@s4Ot*NCD%Ww<9VWZ1^MB#f92*w?A<7g73LLu_7XhSA={{iJf;saw0|}24LZf zF0mCM{eJ2TKMCj(I8NBXvp8H~GGrgP4z0&!s$N$Gd*!10j~DsCk2`k(-OU@mM;z^k zr1520QS>=9hPBeGIF6dZk#j)`m;aO0@LxS!>Cx}^8-(HXV_r;ky)NBN4W9#fe>k#v z#Vop$h3C!i=9Pf}1g}N*G|uJbZZ1Wgwq%E$M2tzc>iiVqfnde>^oV1;ysQ6Hyzwwk zaQ36{l0X(vv8$Gcg|K9$@d*15Fz8{fvO%eQ6oZ|1q0}vYbk3#`0>a|ZPmoh z$LdCJhSlNS=^b|hBRUz~(9lu)qe}lib75q0=)ph%;?QA4rT(>2#^tu0-7s@fi~h60 zxx(7@s)gQjPgFvWyl!77ewzv+AaHfrRI7ZiWi?a6ZE3%HxydMSwu6sB_?1(Bugob$ z84uC-%ibGmfKug}+JXkQ{)P>c07Ui#T8QmHivTMZGO*0CVozGNPukl<;QZu$*1#3l z1HF)zcU-r{2rAZlvImq47ZlPz8Shp3NS>Og)qFUjmzX-FU*iPj)$D8F*Nxz^QFU~R%Bw*m+KLdsSC=39k%xkq7{-v&!@7Tcfn?3x?(yDP?e z{5;l=v};tQe#-v0eXWXBbm+wU5y;j&sc26gfpSK%1;1zdKH%n6l=Z8$3nwu+(`|#Y zHfu}2W4y#!@bKtxtF9%^CfwS})0M%<@a1Rx5Q6n+&^CsALlEekdRte;2ywTN)0xdP zD&YBp&nWySJ~M034I>cZxz1LQc7TEEqZpvvh(RZ~R$o33SXZ_G zTe*?{Nx}2a(j+)zZLhr{W!;r)o~vf;iib=x@5w7^65wVwaMP;3lEP4xMw9@NxdrKp zdP!mdS6A@ImM-SBD~aSooU)e&%FL)y#u2Irb*y)(n-spdlrxNJFSPu_0$)MhC(aZB z>NVt3@=yRgt`K17TQ}j)rFN(ty!|VzF}y*Oo+SHAFJbrnzUHcFvz|^Cn5{4kIs)jw zJfuQ3BItsIp3D36Ge+;u85gjp$#W`CS10&XZy6i)bTv%ozAH5FUQW{BBe_mm6`xCY zzntHM_2gpP-vHB5Aqo2}ioJ(Ax~(Q3 z-=NB8$EjC$^2kTmqJD$$V0LQ^5Gu`PX!l082dziN>y~d=vQt5r1 zJ=5`i@?aQApzy+buw#L`{8Z)lmZpt=L4-Oz^=&lh0`W-plx4 zl=s-$H#~yh&D?tjp zGelwy=%}&l09sx7Rh+;jw=HUq?n(p{+w&IND1n0R)2vP453nIi0dXJ2O95{fny(Si zaPWlnlwAW9sk=1`fJWITpaCIne&Out|Dz|pzCz~Dfy}w%4%&OCCr1?h+48f!k2OhR zM>>(!K=(}eL;dFj%pv5?AF4V^^2ome8+{1qv8FtqyP;M_NePoV+~A5XN`}ql;vUV_ z1SO47C$RqFT!#*V#h9}Z9l#J!n8DSn-=IlLKx?8~yAx1kD`l%Yj*v`w!;*VL1hh(`SN_||d7TGPW1%Ac|L6Y6qW;agsDFeo zoxhz>xC>FZLJ0S1!6^1VIo6+WR!3v&EPQ{r99hgo^7Fv)Q1-Mc%I>^HJ~!I(`6#?> z=qEnN_L`Zq+tY2iqV0fud%g?W}0M2i+MgvJP@Yvp`tK!5WHa7*h zKa;-IRFQa>WD@1O)?W@bJ-rn-@^2DMhr2lbcos0Y7NdJGu3TPb}I zw2W5tiXvAU90nGU{M%Z9DobT&_uL3++gMCJ-po^3P(fbl!`fdZ?O)obowurIUMA0N z?8#<2=|WT+6NK_sQxtc z^prY3{Tj?AwLkb(9kibM_^uijh?y+44>}J_l2x7e{sw&I>^O z>U7YdTXD1inBcSNA|!Khz8Gm0uk4+l4moXLalYfWyU@t8bQ|v0=Q?J%)~%?o?b-F%K!a;<^sR=*F-&u zc!kg=S~s&_1o(PQzP91V>yZ@WC%XFLCqlq;{r_*Q(*OB&|Np{Yw16Mu22KFFv_){a zH2`O)sKBTeQ$jl)dQ+ODTxI>meZf1T)jcdsj%bFVkMzGx9f0-olHg^19jUPCTF#~A zn)7%<^T$5C{6)9AX_HMFOTQK=8)dO-qF&YCTFO7DE7-Wlq>87Ki8`nTQtDYgnT|8 zX@QIi98FiCsmmSeK#k?w7YwLr32?XlT5gsnTc;`>n0S&+$^4@E(qPxh5ZY zV=PU<_ZQ38gjeRMjzn5%qJ9+Dq$+&nxsizjcllP-E=VP7E(dPzfqHc66UL1^$Vw8?Fz4r;Io0U{10T`$FO{F5a^) znm&v!`WCWvgS3_>w$9UkqSdma@p^PK@cldWZ}`@(BZvCRr|IDxbT@O15fKt)*PI)q z<=)a#iCWGD+Hb?6Hb_E`yr1*C+|aNc2LA@BCIimwR^o3Es^u~iKKPagNgm>vduy~r zsw6|g!X_N?kl@gTfrG}CkSSTdM5F8e7@n(~ALvB*tvMaK3?3kLLmr(Y6w{wB{IoS2nOsX-F#;|GZKU$jmUxQsj7ZAk6Z$+2L}XEI+&2tfFV&qwb-J)bmdx1 z2j4Vw-?`&G@ZhB=E>$Z|rJPMopaN7NWrL@eMW-umUc|`EOhT;N4Q%ev&n3pc`7)#^ zm1bE6D*@Na;0wUU|8DJ8=6M0?+vQr&2Kr+M+guyXy#-VI3-71nywRdH+(wV6IFbvU zhvf-*TzOVI|LN6A73TO)cB>-4w7JR}_V zdl;`&ROZe)Z`;i&uulrn{?M7pk4LQPjj{5*5Nia-hEANwP2kHQchpgzLgD<{;t0H! z9L_m}kac_ftwu72DCHW+F9V$W3}>Z^)OBo;3Y^I1=?+Fnydv@bji5S)`;KW{##7J6ud=$Za@BluG-?}Z$0MrCI-p@w0N9)~53^t+* z6Xtl|b~5acuJFcRgFt%6nH=EFRfib?Eakla?PGu!$^H8m`ElsSizEE7apvI6kyzXL z(2Mi|J%?82yV!@dk4tfeIC0;SEXXNu+^^zAcftY56+T8F<*i~=fs49q2Yj}w)e4ny zY9+8GZFD9FdE~Si)B{^d4eKemu2$UrVhq#@U)XM>pQ|F%&pV8src@EIs47G5zgh%eX&_|thoRhc(@5aRPt6kF6-0dfr?z{)gqXEYPSt0Us0cJ0Brc5y%F1MHx#R({$M zY$5Yz-@y%?byg5@Auhm2XZJQ%-DuKrR-lZ3s~J>M5q!OxF|I5#c%BH18W&C=@Mp9 zUo`gF$E_G@Q6DmAl>IT`N{I4{SYPReqbIYMqOOJIzp@ZB;T{(vs5!E+Z`2C<43%om zD{fEwNmyu-ece>Mkt9EGXEZ4^SHvo=K+(t`12TBSb;F0eh-QkhCuz|hKIn9^vSUfO z_KtdO;rm&%;L9>U0*2<*iSaxp3LH@opaS}UN*sGw7<*(mjR6rBH3!9>u*O7mbv+GXk3MgRGNfIA5>bD@%V( zX*k7uwXxn9ayA|c!^cn|5xyTAQZ%Ly->i9*M!68-h?*uPpQOJbH~zWa)5-W7FHa7)KiGOgaTY7cVz(gR88&6<_xb^i{yk@f680b1Cfgn0K z#tCGVm6D*VK`fU(m+o46wdX@NgVhbyw+1c>Xs@w;wDW0)EN@dJi^$FDTY|Iz|p@>Te6b@2l#zkN{x~VfBb! z)z@6fL(M}sqVBxc06#WZ{VE!QV2SfrD zTD*rbA{s25uYzFkY~pTCn=|RPI;Q3|d#khgt$dS=rXk_H1gG<3hsJeUr@ag1&Gah0 z3#+Sv!O(gcjJP=TQjxas9E5a#0*_F<1{MWxpfiI^%k+0 zK3!F8P`OrQdZbX@RfT4y_OegLo4NBVkW@NBi8XgFSp_3?*U;uuT7{aA9cohwiclMr za}~l6N{RH=R#%;nj8oBwdEPuPcrbOYEek&^O6JX>4QQPV_p_oPWS`H#&|QD&;Dy4F zX+;}~;fi>fPphYnt){n(pvq1zcbcQ`Z&~Xl-@gy}0% zwaL6$gyh&)RF)SeYH=6!k%lrg5s^JD2n{}|Mg$vPl=9>Eo8O&mql0Gyc=wy2APUW_|dTLZY ze1pMJFudVa8hGqZd7u|pwaaJ`1$m%a_k zr%BgnECJY7a=fF5D#|Au{LomC>P2JgJN$7X4e;)D4(Dn9`AbqwJB-bB_Ki4Xqz6DB z1Ep?eR%s@ke!5VhWAvJ5s)}bwKHJ(l;zkQrq?U$CG&j9#tMhshN9WJSTXE%5Y$iXK z>*&SKv>nA#GcAypW$-n(;az)0`oRYj$LbVU2=_D-K{SoBSpI#Scx``{DxiCN!QR{3 zJ3V)Cei&El+zcF0`f>>mC-S7m_G;>j@aO#CeX((7O7Qd-pd+MKocUhKX0nbF|Db@7 z4XU!OgWu{^aZd$a3KI#Prs%dAg&#vTuJ5Lrcz05&x|cnIoUx@UYQo6g=$2^B>@PXzCjIGyq|qJS)JpZ*Gs<;Lfk(@#wbn@b$hS!BfWRqY}Y?@ z)}4K@WJt>3sN!OOx!I&NBsx+Wk0pV1c1^RHi*v(o-^mcjY#%83Wr^im+2)#3@wMuv z5}_^w7q;tg&Lgpu;VP4V;mZC_0X^euWf3!;K0W&hfy6#9&cK;>O1E(YhJ8NTe4?x) z?ymYVyK>W_^L^GgIAOSPlTL4vzfhj?99SY<20F<-*H|zQ(Y1wf!hX$!5{0%1yPPtVuMsvOLPNiFcCnUiud zRbQvEe8f0zV+z8=-fM*qqWx%0aGt31?9?HY>#_~2k?ogNNKyVLXbe&q9x>o3yqL0q z-=Dy=TeIhFe3VaG5r(N%6(27&!q<4!5JgOV`k?Ei?fpPcY0>vD0k2Rzy@84-zwf&p z6sX5JWYru-!Y<|TaQ}1b?{~u4>bR0P8q5mai#qg(m0?7h=m}@&0OXiAqO@xfj1JPRLb*`CfC*fkR`u%5|x?q-KKcI zV@5;P*d?OHeuHd;X)&7fXXF5wiwHPzG>!;`YQpln%eXYLW}GV0crjsAEnjWjHUO&Dp?1FH8cN}4X;BQD&0O&*(SN3Oa7xl#Ll@! zfNl|5y}GjU#N24pGlhg$&L!FREC0~psg|5H) zq1cbTP7>eX%f*J`(&7zEEF6JttH^1GnFKR9P4=Ev--&%rVbyF64u2n9&8jaVOXtO= zWZ&?*XH3p*hNR{vPsM9HS%%vFm5J*;wtK%pp0GGCNvl8nv;XjAyT7QPTWRm(Csc*K zVz}0W)S-$kPtqtd(>P;KGNyit-_u#!QC0$_MWfvUv7tj?gx=_8%10Fkf4Z5Pwu_wNN*iLeo3G)Pg>EwTj7ybi5 z{An-IA$ zg~15r-L+TciWF#{$0&u2MVpdXU3cL2vqtmPI~h$5uWohSiG<<@s&|9XjvI8{YfMm+ z>#{&vN577QZHyEe=HyYT>3*ux;AF0L{muNzA5{Y^da?N6rv*?_2dG9U7BGz8PFRia3t^WpGu1aY*K_b$n85 z!gT*If?J(uCa2yznlJL7`%S*h)dfiR$;zLHmUlJkGscRUEI(ZHLcDv_lI1bPWzY|+ z4X^nOWkp9+295*@XXh~K-YtNaeYk(6np)V}N6zqSWSzvBiez0dVBF$f;4F+p5=H|t z9z;k7`>1T_U};?!yhK&*r11{z~p`0 zGEi@6^_C&4UIcrPy5wh7kgra7z2jL1j0hbUJa<;lw1%aBw2WezdFd80z@omKD0aP4 zzD5ZpL;E1u7z4k8x zq<4@ay^2Z+z4y>N(nBW{0g(g+0t7s3Kkv8qv-f`Y^PcaF@s0E6`{7tC$&it(HP@W; zzV55o(uXlJ1{tVzlE&PuzpkdlF=mB++_bK#(2qR0mnz!5XFxG1Sr#(0VRqE%m+&Bu z+44YlQZttnbD@n1MG9khXu>~ohq^fb1cNZXamn5Sq!JwmL_g|HBW+}!t231!u?vmg z{2Ulyb*vK;Ac;9!Ygwk-&0(*qZ$>vn3;q;jeRMUZ*&5Bu>2xao$ZDCL1})!zGvAvp z3z=IX5l?RW2771c{tL;V$y(K|# zXAv%kRrj6{4C4&dxs+%c2ohbQU5$(Cj~b|(l!ineTDwX65PNy_~&}?U*~J>+z^Gy0A3$jLzGZ! z$5%uV7mbqG#7KvPE{r36={lZ_OxIe*p=};nLWdP=gzN~y{1ZyC|6mIPU*Eq>gtIt1 zQXK?ajuG+2mbNhE$3}AP?;|krCpoCu8bIZVU_DS=lXK?+gr5se$HP8X;Cj0_ucS-g zM+e*vy^^HM*4fmG@|k9#2x8-u6T=c1gy7a8S;KWy{%0&YamAZJeCO%O)?>IMKP z-N^*{N-wk3e}V2lyySol!!TUo(XIS87lNuE%pGXFPQ4JLzd)J9$$d$80E3EmDc1P7 zq{@e2rxl1B%51JDmSA1yt*6#K_a27aY)@~J+F`|ckA0u{)*rr>p{v4al>Fpc3g5^- z1l9a_upxQa51Z#kHpB&p_;|w)kadsP=5rMLA)C-RuhdxW_ zbh@Zn%k5VTT&+|6o`@#sWXMkjqgti;5dNJ;F6A8U&om8;;tmELa*s1oErFJE_#M_7 z`d4p4^k(Hlh8)jP*JtX1JB!w4-;9;h~=K9+w2&OiSe(48L{-J zGGju}RgP=>->ZxxM zEnam~PRP2@qSRN3JgQx+w(PH@LF%)Ho_gr{eST zD2_`G{9jtUyby;d(-`a$AlT#VqpAO=ZJq23?Am-{bpx-)>!=<|hga!zZ@c^EnCpjMXbe3T> z@Qu|1ZrPhlV?=Gx?w#K((B9oGDRYiO?AtmuYWm-CSx@eBBCncWc;-=jgR($3wt($X zM@?PBp+KG8^^OgtyLc*JwhZD3c6$$Y(rCm->;xe&;O7`e|TW=$!(kUaXt!A$G`psqoXtqaGNIYMr^GdBcFY6Qj+5l*sKzf1nI&_}JweQ64M?ONO< z`32gg{7qpFB{sH6oGEBO`~3WRln;>V?FLR*xsH-*K>h+z*|AVhA{ZUAo!y3`gL0<#AWN^lkX>hyp{66Yd598AqcB)Ury zR+{vH@-?+_dd_F57Pp8{|6_AgbmqEOGCF*HrF6|n&(Xyr^T39`5lH_T(T&5hFw$`m z3Hic!FH-_|_Ev;Z*@r+u%H$m0mxG^nA^kK?ZJF~EJulT_)6(NFWt~~o-^ZA3@%Ezr zEWi1ub2a@J`eDj@B!W~p@O{8Dm3!khqux|r7EDKq^Bq~9s~Z>;FwbzWq02#$(5Iyf zVVz0DIJlm{VMP&UWjhl*klw}0+eOF0jc?tdy}!na;VI6|M0wwD!@INkJXEK8(8(=# zMipdsnFC;=E@4n=i+a@Zw<-*{hmJ6nq>eqiV;Aw5YUkqZ^`FGo9lkRP3JrBa3;TaS zeU4VMp;EbI@;Dp9kt{-AfPHcemEn15^I}_1&LiVUt%mWC0lb1>9VPLo%QXze8aVn2 zX98LU5I&k$d(bLDPTgJXIZV(S&ED5l@$!65p>;t~pwqv|k^X!=Ff@vo-c1qgD|v996aG^ZLXR z)e#{=A;4-67X?IYb}|Ozr-US5>4;|mx{FEwC`L8U9%Q+=@0Nc;X{vMi%y3H`4hvsl z$0ToD@^@Xa*p?sG*?2ajZjFef{&7b%*N78%@Xj@XmUJ1xxxA0dA&cpc@|!4VkU0(p zhB{SZ;O=pu>)l8%P^uJOSRD&tg`bopdwhxuLN3X`Euv2UGuInK3zSkZ=9dMTYA#C< zIm{g`zBBxUZ{aJ(WKhkV>b#|d+C6}T`bR3yBJn_8cXkGz~2B?==K6aacL8A zUqRLqO1N0@A)ug-Wo12aInRe0) zz)1=+;zJf8QI>8ZJ>aCT%@yT`9Pe94Ty6q?=8l^w@-4=B3< z8+Acgn1UBhk!q1{>j$?UHGes*P0#V;6}(L$SKQNCU1>Hs*ns!?oH!UneZC4#Vnyi^ zY3GQdoK6(yjGp)Bp6~GGUgiWU^kNv%4(n-s*>@EyJ;|!=E7`<%-JRk#L}XLwdme5n}$suxk%HSkqjkP$jLJNF9 zzqgyLhpOu-Glfu6elgwopf)Sh9lOhZB?)VB*j7X&ud5ZJ3A&`N?x2EfAy#Wm(BFWz zUm&A#3NlXqu0hwpyndn2V!t76ThyD1cnbWxtMu)RyEziIMAS>sn_#7mqwXU%{7*4S zRGYGvI~Kh1bFe2k0JZmzf6vFGTB+9#neA2=SfnP(Aj%fmt2Wbu1+J-5jB5#hMpUM?@b>8nOcQAc;%V ziKg5M5o)q5bti|R>u5^`U0AHJ0L=6D>v6#S$pJUGaEnObM-BPHSp#tlq>w2@Mu!rD zi{V8QGLYTEaA-_NKiBr&*0#I#NJxmwt~k-E@7N|Wnv%{kV+DvK=m5}qV!;YQAcDjm z4&U|ZDv@&K)R7~NIL9uEnHp z5*Mu{PUTDX1Ku}jT`-)z5L1+5;7?XEd%j}TvFr~fh)2{x_`Zp1<-s=ya>CjaqCgw+ z7AU}Nuty>aa8)*Zh~`tiDzi6uVvfI~$n&0&>D(YLe654P$3oeK2yj=b`r=_t{9)(| zf=4i_5z*Pp@cCspL7b|`^b-QI;+`55$ zsOvIJh8*iIK^@m1B%ePtt-(NF8Lk)8u{(PJ&*3a!cpt?1w3Imh%`u?9{@a-S{WadN z*-Pv{e1WcZg^SHi+TneTO; zS|lG&u`77O{AwYrKkmB_(YsDQPCQq-PPycy4{hJu2{5@-xi#wja>B70CSpF^{bGXQ z5$noFrpy23YCXJT#~FFuod?!-JC#2o$%okzh;=I~;Tuv@#&=a_=D~gVpQbO2=}Gh# zN#PJM#ZN^Dnb@n+H}J(KwCY3GB>z zr=@Ur_75?}0VEOpdxo!fMLTe{AAZ@G79qcc=kkxWQ5nv3D9{4iZzoD zb^c_FBm89h`+fb#Ba9idfQr_^%&ccCcFVTGP3=&7Qm1Lx6ldk1gcC>j(JnXK3*!FR zb;8Gkx4DWSS`*BvL)GZ$gr3+HIb7kqgys|J&v)g+TloVu?WDq(5vsa6Cda}-U>X4h zafsBEyp1Cbe;9?&k0` z#8?hH+?kGZbQP2OyjjUOD{KI3s0FMjOs1SXWBELqtJ@>FgP#FVXW|16-tUBLQQHv6 z6=4%<=6euwztmQu{1v^RrPg}`VM$A~Vm(gEC3M3!0lqt!HDDw_dZwLme1j~gU7&vY zn30wAp|gkCeL<=3V7bTHgHHyTRHt#hdD&u8pSVURkhR%X+`6IxhrF6c#BMe}RJ?hf zQr-u|-UNLwjC4Q9nsXtZSW-z|Y#wF`6su17ue+9a4`a>gr?4Dl z&n4S)NsC>4fs}QNUP9M_@GAdB_j$@UF|6VkfWt;P-or}dap4jsWmg0^D8@7(2D+2iC|rTo`gsDJq4s~JHJWW(y&LrN!zUcC2hM5*w+d=67)ZwOZ+R= z{%7nRpdlUVv}35z7V4KDS|#z?;~^GP@_H_msjK**268bT<3ojapSE$Z_RXAnx~`J< z2f4Hg`>&5j(0WbSy%`a9y8ZlN)qA{{SND1-k)IFFg1VSC0%e!wo>a}$UN{*($`&d+ zysep^D&E8i%mgt-p2UP~Gea2ZlNac180r#$O@kH08m12qu)@Nbg{!?EmWNMbWxcq> z5_?7h{Wq6$=<;NgbISn{nUxPP*F0@Y)-;weoGy2k_-XN#VNd2=t|O3O)66GR9OW}> z%cKdokPN*hy!V^G=YO1E|M5Be^Lz_zs7p|ca79{(%Q_i_Pa{#bc=zs`aclKqcY$p@ z^5j{GqxtGzAPP1XF|yXDN~~m8Q#rS$+Zp!*m@bP0m=}V4*C|t*>x$TJFYRg{y$DK> zuk01CO(y?6S#UPNxvf5C>Fxi2ojVD5=|IVvn|T( z=1d-c!ZkBq=|PQCg}m0JiqfA6+9Two0Fz&hXT$=fzHn5=&Nujm@rt&T#hp* z@E7PO!=)~)KOVye?a{$UkcFD?&N^97*Fq_|ji~LoO^7rilR|ift}A)&z)%W%f3}Fc(y`A(hyp z`j+bxKG^BAm{kmwZ?W6ld@Oc%U;q{qAPaeh3AzyXNn3wXgUOeU_7wCpss4gh&));T zNZblT2RMARXb9si4;EpU%6^-I&%`|4VH=Nd*pQCwuymn-xL~A&9X$l~OyatSP6%6D z<~?{cgSRhV6R9076&8qgX$&!??1$f@h{XHr!KB zK5utQ=3poO`SQbx=7D8`Gn}1tOuk<`k2vZSiU2x2d^H%W^+n;gSG=k4UUT6Yi8g7q z_9%X>M7NU@+VoEH!X)J2<` zE~W=ey7A*1h|m>2`Sv8cpp}6v229(EccJQI+O0r2S2rHXN(OOcnB8zPRY|d)fE76< zKAP%vvSz^j7MjvX$mFaSR(x6ez10aNhfIS*5r;~XC1`?h`MY-R1(>jv1uadI6u7uR zSPwA}jf;X&?&8Uo=H)oqQIJV{3wo2Cz~`X}fxbuTx((k<>^8dK+px-`q91K=aV zzb|gTz5XAP2=NlpJHfSz5$$9%kXsuv*kKZr>!Ik_0Uh4kmgLNI*Y)BEsecfBD@8iF zt7IBqX0@{q=ic(6jzVa-N4JR}hdep6-V!(NMl4(xD+gQ8^+D^v!IEvvKV1;w>p!7r zJq&SplX8}s-FpRl8K#7w^c?l?hzD7rd1N&_6^fk-(vu1t7&%QKwZU@rWvNmPo6J(| zBoboj65D0a@9I$b4{!(nc&mk<@23?6hF1Ok!OnEzht|fJ6h8-ix#y*%2Ab(-ZaIW! z%f9jWxHsxX-FxTUcUMT$jqFmtNJul3vL$Ay$eGK@%u`uENchsoQzjLf5Vp{ij}eDA z;~)AvIPKVr#c27t_W3ob7d|@kZ;v3<|C&e2Z{IyOrBxlGJ(aKJVEW9cAWF23g8ZdE z;7lS@HcsilkP}@r_|Z;Qa;)QZOumyK%gWs>(JuB1t1x+<&8@EfM>)LDTbNnbHSSj; z;B4n}QPA#DG@xyz^oIg=lM*^tMsq_nii`@p7`c=3dW>hG55G~zM63JFJ=wSvcQ*@( zX8g>z+EAwYIq@RE-mV7D`)HtSl5*@xW!1^@cwo8X9e?$%TR?B~E@ZQXlec-uOFma& zjxR=Y@2f8O1l?=ry z%(QPp?z?6lv;!YqrTGd1rE)GSsaLK@3cmjz=v27Bz2Dk_WCef$BmsOB*t%BCBMzh& z9~-(gG{>hGGh>|TaBt`i=QvCQMNJCSN+4|UqlSb#1G+`1Z_rc_%x>i-SH z?1*N6D31Hu&{xI{tZ&%8T5F#C5lfFr%)gp8rwS^ni!7XiXgjfD8*1LY)r_DUCQEre z8oN(MM*?=VW2n!D*%`dqPLy3X+9U6G!~b+@8KqAg15_0g*JJ;@z54y!w>D#?3CZ}r z48krm^)u7kwq)j^Ks;xJSF4xpT0TOVL_AChZeN&{lG#UVXwrMx5cu;`&WaXhtKSM<^^=#0|J>J^0+Fi%@CjOc*gS`hXRD>61!J_WB`>4|B9#oyHbUmkj zK`8%X4##bc-(Sjb8bag-#Hbx0DG#VLo4bJlC_7F4ylM~q4iFhYne;ot5#BK#F4t@k zhCL+Kg3unX*@3h8Ml38+k|98s$5*BasmtGQ=fYR(dhV$K9BIrIwk4mopO5rv84K)){@)GP*qwl!p2p z`alGdfJufiQDYtji#U)s%wKdch?qF*EKBI1e85Lpt%9uSTPr1dVwW^I`JblF->1_b zFhJu%@)I0wjx*CrR32EhM-i~+=lc?{>rB`=ng}nr7>Woa5*qee>Mr*P^>H2K-o+z~pCRTYlH?Ykypq4J6-$vc z4z7dx_sFV8OE4?;AV@l!r|L8~8iSSlzHXYq z*^bEMLk8qo9PIyaI{0@d6()-g9UW`BL=uJ&ncGp;lj!IYL zzCcWoSUE`Le6|HC7wII=p?KmIPgJYB*J7Y~$3xCcV6y8GFFt*i*yhWpS4Te?XhT}% z)^{yiD(lGnMSA9vt8%`(obSqq7QOr`9y9@xDQ_|L^CL2HbSy9uJeahIlfZdOah>`Z zDG2le$J}pYJPd_tc*ana!#U?sP*oQ2IQ!$U0}euS>8Z?;``}^F?!&G5pV8r|{JvHV z(PJr3-aR^4>2z&ru|((0>?jfi@L{x&w4sY&6jDsnNh0-4Xz0+}mZ`&+a@KXt(b-8H zmMr;U^qRUiHiZ<3<`Ij-o{F(pBaTqx`B>| zQAUt>7UP@6*)(=@C+Op^p`w z0r1d89VQIFhq*XPU={JkF|lHo*#iC>&q{zwEQYB%^lM*x2>@O;tc~}Q@FU6KZT$VR z=JP8DQf5k|+HKPiEsDdgE%(9u<#7(vrEC8DSEBJJ@%}g+Zm5fmvM{a36Z3m{Yk7F= z`tO5(KCPR|QgJx^X9z!RdwXSU#k8f#fRN3=m-96>1(ntN$Tc9X71(DgMzp>u*hbjZ zl96hTIEGl~zX``w!=)xgc7t|A*tTzr7#gvnGB7EvVgXLKRBX4V)g3ZF;A%MOe7>EM z`V?zgVE(LmuHd^uZInj;M5{QUEh4#(`syWW;#=ZTQTm<>dN|BJJh0Ppm-AGz_#=2> z*ML^G_#(o|iNm+}^$jARYn&c5*h#+uba-jzv8wH<3#}v-yBR9Btr~ z7vd(l56F-DIeYpu&Nxo)pmO`nNFdr3`wbJuSdrNZ>n7A#lw)yS4&hcZ6mdJs_=AI- zUAs-(OwN7j>nw(Rs}N_2?mpo#tft+DmZnt{ub|KYr^qtm5hw%k0*7afl2nhR@aK?MHnJmK?4tnW~H%ViStZ$57TZXrLv-PKIzu}5Kt|+!4 z&9}Hc>f##B>0H8|5~hs*ChEo?HW)a?cG<4`X+`!U?#Gna_IwL?Opo>AGlaV`t5bpwv-nvfr4T#@|y_3*PJ%-?g zE(b5Ocj{6Wt`Skx3-80$=FOk&%qkE=?zLc?*5u4?nKWywo3~{kb!Uai$s1&|vE}zh zqR8a%>Ib?u)jqeC&e#GCG=pnKmMnQQa?El%Q|wabPGtsFl%|#%ADiwyrou^HshCtE zAq?E)A=rKVC(G5}7mDAHe@W7e`YVF*L5s@04>c03v3bqd$dcTLEo7Pj(CecV;di+% zGZf^^v2@ev{cBL>p}7_2l&h__g-$=S(Ir&+Fw>cOSu7Z07!oiEB|rjH$Gshms@r7b zcCjbRcQ%>JnU@~0d*c!s6AV0dy+IQEOdq_^uz}5`Rbb^j|B?x%vekv!>`RT|YNS1N z+onU^jC6f00(!BhZ~*cr_!}CCV{W%rb6M!OK}M}Lk`b0KS?0T!ig2j=%%-?3R#YAD zOY+9d*BkDI*G6}ES zC`<8%T%srRbx-S5Gh3X<*n%8K?0vP6t)~-~NxrbRCf7UGT|(QbfRZv=k}=lsIp7(a z{G_?%{Z5VpoX&2c=(W-I{rN!|I_A>J1~L;+CEaA>j6Zxf7CsxqVppUEY+81D4lEu% zs2?{CBT*%IDd!yQUs!p$^vK_M{uHqHiN2CiM^^(|P!6nM^B1;QkIbZi6;8p%=c?N_ zuPVDPSH=r>>WE6NmgDlnKCNLXa?)6_)}JWHYk6QX&>E=o>iJC{#Uo&*KuSQZua-N0 zQlX$*z+S1(mg2;d8XbS)anp9?t*W?=yRT6p1%u9j&UHtne6k@TnDB|}>8o+AaCgo9cL zMxSqpnsof-x1q*kz{F68%)UxYQ@PIinWqab|BC5w(fd?XPp*7q-G+V&2>+YKz!FF< z;sx0>1OE@?dVfrZBQz?9tPTRzW?pM z{(pGk49x2h)wXlvd4!pIMx0UwFCMAAD9UranO$57WLX}9Z~yH!+x>PA$NxRVK&x+8 z>v!O+%!4e^NCAx8^YPR{uZ3D~Ch`V49Nz=B=N|YO7gD^hayT;xDAn11Yw2_z0U)a+ zcEG3BJf3==L)SLvoB7h&s7o&A;I`Bc79~0H>?USWu*=n;mttMisFN`K!~sfJgZm4# z2mp9B#+rj7`Iqb5v&6VQ)_G*p@%Yf5ZYS?v-5)}qK0d!6Ua{yv;9!)Zb86Ig6z|J8 z+roJ8uwSd*Vf5j)oR-JMmq+^yWTm1YLlRU^BkImOF18^WCCr-34@U3(j5DpPoBW?K z?i!cr@(+YQ6`R^;)PF$PnP}utrK&Wyr96<}3gW-rQ?XV-`s`V1e4|9H1Hie*)H&Te zCwbWC)P47$*tp_cI>J}Bt3r25?EYCiF{-J=IKGzr5)w^{F zuy^C_>q9;)nhYqff2R?#cDurcW};!b1IGnO0n0z8jp&G~#<^5m-FQ;0)|`aOnd7nT z!7-$zfKM*Z28#HE9F%jB^U z<=)Uacd$D_Y(7G99AldSqAgUQ&^0 z>EY`?1UZ>FN-Nd58zvXk9pVbYSoTX;tBq5MPm6gY>f3p42=g(~4T&1rmGGDwH&qze zDvSye%4Y)UH+Q_(4SQG@36NxOU!v1Oj^l4+swZif^M0|+p?@XA%U9+|9l;)Ut$S9U3yst|IonioK>BbXD*d0Br&gH^Vz zji;_c1=RPj$DzCGym#L=b`t$e;Lf{~3|vXi|DE20__Il06d*3v}X(3#e#`+p} z2aw+7tkFp0)z8>{aN26Me*A%DHDY+pzyV57b?q0Z{xthu!V%=HVjJg=5gFZpABMZ* z@ar#uW&S=T#Ws=EYW(4kmgCVoGC7frbGew1jX6N8_HV~n`+qye#wk5BdJnG=Wdq^d zY4KkpYBj!@bQN%xaFztS9v8YE=c#A-c!4qM?Hv18td9kbxf-UC=0I-GVU+&U zUm!DfG3g84j1xXgDN+~W0*&$_Llq!3qa?p5Cm*bze!oy2^9rN8Xo0SoPj}f|_$1~w zV04Z$0gtPh+r}ro)aa8Sn+qqQh8La}hc~lDbXXC=0=*-0;qPnl!I{o(13PX0Axgnf zXQdmS4F`I{QN_?u=>V2!_{#GDlU0EZJ4%bw%mD+vA0B-&{q%zheka0<{Z~*d*O~Tj zP5^iZZ}_*!u9*bP4{nr8wz~VRr%m7&9+W!Q(8nnDaGcTZ{2c6iv*`vloWN0qz>tez z#2ME3qau89l|+4gWB5e1+4$|cRLof}2gzd11akLF6IoTjiXuREUKbv6xsq05b(jQ; zVx{UX%Pi1NrC6O-)Mh&~5jTQn(CR`{?(w)VUmi1N?6K4iAOg<r>u)xH z!nDu~n4nq`RS3`QZds_b4EZyPfBP_5j%HDPB=xKm6vO z<{y0mz|6ToZexHR6x|HEFpoM~eLD#;k5*~~$JE#*@AbKFW(&x~DA!s9pcI@IzRFs( zd929lFlesdQ&nIdw4sfNvG^7nz_duPB<*rze0fYZc7A~4cA)GK|3>^@Zn*k>IT0?vGkCyJZB@aT_MBzQy0Dkn4$LK41pR}=PzUs=sy9vBY zj}?6?K%LY((7z0#c5_TnNx&3fLe*;JhDJV1Q>{Gn>HfdEX+0$FbopGs%9oPT5O4S>>N>Nx^T7Bc zmL|~2!ynM-c7eH80@M#mRTljhbyA)Oh&e7unLga8I%zbwC^gcu)rU=BMfB?ny< zx&nsjz3=6xeb-E$u)KS9;4kR!>r!I;+@98{n#gFym~oPvhWm&b+rq;c*qS^=eQt_U z=s&3sS?_E1^cKNzU-12)*bhSN3>~pv$XxFF-mm`! z($j-_{{n%f!^aZczlPQe7kp&C&R@4=AKIekv~h&4u}3nC#);~EKmF8Xtqnvyik9qo zoeN%7**JY%uGDZUZj8N?GOntz5F)A&Xs{HKtTqW4GznMxa(CvyLuBV!_}5S_mud&@3YaTly@Wtn~z6`EW>o){JdnUo&I^CGJ2WoNjYcW?l586|STxA6)Z$F1K zT&PnG0!7{HHV)Tg7}vz}_{bbi9-j;SJegyu#2s{>;zRNxKcGkPOalO~|J+yq-<{+9 zn*2vr+8=BRSn!qL;`6I9MMjUq_%{NNQ#L`g$%FKbvE zkUQKE0yGd=Zq3NkZ^%F{c$K?tFis#7tc`T6a)unEJX5^*EaIH9K)! zj96Kbt1sQbziE8E8cS+EhFx|qtghP!i zriO@TfBAWaDLz_PTqZzb6TdK-mA~Mo@!km{vu>zk;?b0f;(qp;OIe#l@q&BztEhRZ^CU-6E%INL~vn7K(WQ=`Nh3Aj>B#a9?_h->_g2W z18nCM;7rBq5Xlm($7O>857u**+-w(2vKbDSWoQ_sYYEb5N?>{0vvI$z148#YZ@Qod zbBxqMu)-Co6^O>kqKhVv6`3)qj4#)cpthIG*c$03})au1yuTFJKw(6BMwd$i99>ov3 zBS1>42Ess}^Y)rJxp+`x5b$6I?b*I~zNGN3rL?b|3}VDe;{hYLS69n?kPJWH&d(pj zKPsxGmpG+pNoILs6$#=O=^R65?8)10_i3qH(kzye&Fc)5{&!^kO8RZ&Wja9oh`eGQ zfy9F#kKZlrD*hN7*BdYh#0mV|8~lQ-`Q^@*{l#{x`bh{z-3d@qlmpoMoTEuy6YU$z z&6Fe9Z31hJuN61c2B<>;xzF<^OvxG*H6d>C@_roGDZ6T}SN5LK>1OLMAMoSJ5FU15?rw(=!| zDv>6IST#M^K~7pu{o8fb0K5HjmmV@&V2A$T*7M}`zY$_9v79U`$Eh={1&R)-DWpAH(eql}Ij+ojEN5-*$d=vLj>et~ja zgNZzr9_GnqJzK#+EiqWqoTP5$5K(U}ZEdDRT6^DHo=>${O0qAAbUe0Ve8vO7{;JgX z|J|?qQwGkTIkp(eU!W^d?~_P|N`T=Bi%NRictD!_2g6gJkr~r-zx@Ixis?ncH835h zQ+<>atX|wJv%KUtWe~UM!?r7f^*|0jWA|WNys3{c;MZ7zBhNdcxB zPm=v zjnh^`+|LN}4F|#z=~*=HxZA78$U1dFPLlT=Oi9EMg+hdnC}x~l>M*+(cQLRYR$v_2 zcEom&x8l5xtia?xVGxY_Fu)bBG2wybOtT`@FU}Gma-u&oQT28jqzVQi0|D+I{{mL( zGON`F&9BvLAZn*`nJe#jv#$3mxk+>4v~LnSvd$O!O%4^UiMe$l@zvWp|f(3vAuk}LNvgdfF{3-p;Vyw^(#u?o}2S}npvnCF@sTBR2Y zFst^C<}JuB*DGlX`9~D@Kc_F+$EgO?0=}*KK&O6v&I;YSN^vE;G(YTKiunaHZ*J*m zeqq4KZ>s>%QM{gOvfCA%k*{;;3n}xIpBVOaL_;as8Fm>;B3kKDSPbkT>Y&ElUU%@L zV91$he$rD1`Y=5?P7Ak-(%cj+8LOv3Kh4**nwxY8eG1@xIh2#~7R5!8Ru%J$;Lhrb zK^p##sn1B;()o$w`l=yL8xGlbW(7G^5a-{4VXykK>DAMCu?^*4Ao+ECN|~izJ+?}T zx9(ozB;NfQ+f`(v_;*$xzKwg3dH+zHtf)pp`;Y>b7ueZ(U~as|N@}|6b#hYQ726hk zK)mDLlB3lEy(P+(o>P?MFvEZUe`JvSPwbN4K5GIq`ADl^Le>Qhy8<|($EJ>L8R$WM zTjPAY2}&L>=pW0xAn|+#xJd)V`k1;lN;CJ9*XW-ut?Fys{I)xayRya{0KF;sEpf}6 zSJKKcpI|km8>@)YZj-q%;h(Gsy-wG|ISBchJq3^Au8C<9r$MJYn>Ddpx13afGT6XJ zy0=+4UY@@g(+{ulJ@+aH;-=gZ=w8PLD|tAU5~Difrg5fzU(^h}rtpm6Ze4z7u_ z%2t%dul4q38PmLZc8ixZhfBC}|EPJSt)}gV*_!lwifsv|Zy1w_U;%Z#t@6aetAQzSmZuwojj_ zpGqV4kUqj}RIVl_LA+0?!tcZgWi1A4}ydprMOY7+K<3Qb++DyXzEV&JX)K$g%t(8=N)s7#-!RrfK2iM^$PJ z^@W^abgANuIOM?`9K5dE&OwhOAGA8&6kYpM>zjz=OUtvWz~Hf(J`}n#4Rn&CQqF-(0g-O$OQ( zqs}=OLA?Fw>QrWw0Ov^L#PG7-zkW)WLqGUq6T`}5AwjvE1}Y| zaZ#nx|3~KF@7>IQI{qzM>W}K-PyA~>7+l2KwKB$jP65v&2Zi{1`LOLv**#6e^)%Ib_%f^=3QyB0aMucn=E<}A=Ny=qa@ z_vBd{0W*Kn+&=v&p*=3;uB>=147!QV6c?!RUaoym& z!}$7yvgzzuLrQ97{LTJ^00Yhhot?P0i~HDDX!$#H-Dcx@9|yww#CZaX1*)X@5HPtj1dlfA zirwK&@Y4RnB*Z+|R&RPk{a(zl^Cb3&ER*1Sg)F72Kk4fATGKR=Pe!UA69SHZ#``EA zU!Dc{pMTk69#2!WhB3B!vEC|c<+n!k&h*D)wfG(}4p*u8CFrjp@kKZistBCl1{O*B z-(Bw@S{?nU{b^5{;OWdEZrLf97oeVhU8V9~;rT<&?#(1$YwPW1VL}KKN-?+{KvM`; zVqX>te*54MI(6`>?v}=~xsITrJIm$|^Wtl*G*uDh6Sw2Kv)?XIr(_vO?Yoev?)fF} z8+(U{VBGz0I@j<`s0oT_y+!OYlPbEvHLpb2B{iH?=`uBHA0;( zHqkA`{^H;HT>sk89r+u=Wp_d=N@nFLC|8V@TC_cjYJk0w&yM@B?ar3Ed(xy7#o{&z zBdy>*^;zA8>E3FscQ<1qQs+8m=(`Ky>O+b`k;V4{cc9HND+VTazQ*_xY`uC+1oBV* z*U;P=Kk+bBw4Cld`{o>;=+(G?QPO3_x~e_kCrUjv?oLuh`Fv@p5>A=s{hIp!ag-XA z#E`)PCUWT@PiYf3SSd6=sy+4^B_?hB52HX z-xBUBr_@YxI8b2RB@Z)f^KP-?zyxJA5v-QKq0W8#B7&zenXmPla_y^Jo(kWNFo>YP zAoe`vvTNGYZ@FM&H|-Ul(8FFz%QLq-kEaJYlZJ;3Zbane)gt%Aa&qP@=b#o9T95KAG+S+>#TIf5m78@j#>&~^859z)OZkfkZeWo|fQB(fv%e?DZ&Z>VPqmzG9U3#+`->K}@q((#q1{M~wCMV}(g8UNLzk zbSkU(3*zg>VXicR3Sa*;+x|8K;|)sc5bp<2HRe7;J?DphSd!CrFRH=k`|d5D>b%NV z!;~6{is^T?9emXnjf^MVZ(v=RJq24&zq9)0te)tVzMl>zHoUAGVi{3|m|mFdE7pd0 zEzY2!Zy`3`if<)vcsczx8m*mGoVx{Tov@_7S2R1^$qpaZ%r3^5>%SlIi7qLd+mCi;7+R_@-RsLDX`R5l&?dHd@3;y z9nv|C@Av^gz)nou%SPjO8?>wfnHpT01RQK4k!jP zMeSVT6T~{dN;k@-vo?z~5_o#e{Q_0nzz=MC<`j5m1%)cUAF90a%+>Emy+LeGZM<$5 zb*t9tE*%G3NV3*D@4KtPtW2JV5rEMlmK$bb8@0kVEx>VMq$+i8Rr~3k0Owf)ztd7x zZ)@QFD&-%BFpNcaL%g3tzMrcniNUE0!g;}qM|Er-`6!V|Gr10jo3n=I)rddQLzH${ zwhKu?Xxz#&jm&zeidz9&_vfHa5HX10;kTE;jJ7>b*i@NACEhMDXO|fm?79$k!}k0# zYE-Fu{>eb&|KvTx)|$F$LGH@-P$9vJr-i9^sl;Su;QV-9_)O#u>(HQvG%%=LY+tb^ zpiMj*&s6v`#@v@KvFgaOeq4Ut^b@PBXrC4JX((j)LKng_t#I3iQV`m0m5&Y&DZZNe zVikR9=TkX;GvUT?=ryJN+aDeS1QhM3<_}Q98|}I1wDtNlr0J6?vw?QipZ`s&m^}LC z_%Ak7suChg-6yAn)xCTvz@{7sHVOuUr>70$mUhi=V<3%_2b*&csa&sRI>trnt8ab- zx4PTjCEmsf6@z?k@0YN)HD^1Z_vCN#u^Q-8Z#)1euGapxK-wz?nG0w=Kt`7ylG$gj z>a-jQrbK|-s9IiuG~Uy5gyD#oZ4>}VIL$ySrxHIk(oLa<)SDif34!CBHwZ_1a{%T*wei)`1v}fqYEz3uk zKj6>)%+ce!q}kbj7dB58`U`}MHO#|sKW;#`cL4gH&C(q+$LWgvC~jB9*U`jLp-)^N zlRnmYgd<=4e67Qp{}ab#J3B-lJzBgPF3C#glX`Nl4@jV<{ugIo9T#QSt~<0ycZamJ zbPtG>hyy4M0s;b3(jzTMHwXwwcS{T)9YafZ!_Ylrz$gRnd3^WY=j`u0XMbn^_8*GC zgEOpqt-IEBUsp*OB+R8WkLjj@bC?zxF+9wKd;_g>?m#UR)rL84X(|k_hE=Q;300CA z>z?_C9jY%)T8i#CE;OLkidJ86qh`-?kChA&&XZy{T&bR9J&XCvXwwBs)}ya*A7&wW z!p0C}WZ1&G1;y^C$$MGH$1fSpqBTM7Ng!Sj2z0j+yZkPQb&T4P*ooTab$${@5c9MfODLg8DoM)|z| zExEjs^|ZMiQ!UndTzQ>4fC=;lU~?ko0R~9AR0R9Ntq^i9Z+T_BBZRBUo%Z?TkzPx2 z$4MMgphdShZGf~NjFqoj-r3>FynciZB2c175%J_8VxbxLw39g7dL|WclJG6wJhhX& zGRWC0EwaZiuoeSUsRtVd1f3bU;s^KatbvmhDi;F+4l6MA&nZ@!ZWAKQ^#i+08y$9S zhE`Rd@7^Xxn^=S45L&G?Z3}S`HwOBV6kudh*TV-N2Unce6!g1oe}82ZKqQUm-(lDP zrp1Z(NR2`8>mRl{$!}zF-A)#A-%WyX0`R6^0eV%QX`9Y>W@{!MU!(-#@HyLt)+Yro zgqe5N^^nB{GYfMp1Uo_~rSgjLDK)lhSTL=0xa7P^w73ZxCQJl-$$mylti(v(Fo1+( z8XXK=TXiMduqtU%;VprrHHQSxl^I@fCweNgv1(ik1GJt!W|lW43YL;{wbcu4!XGy* z;~hu9jg(GLjq{!O7eaeY?eVWdy={}3@r~5!`Bk<;WjMMh(emzp z5>1!+Adr)o7#cDl{5vDU{zFa$XK*!a&2y6Jt#i7X%-1HYtDL`K*Uv0wBpkV{D)Upc zdO+ShAuI;xwP(&QC7oTFLT6ilOpW`uso#KbQXr3i$q#M9hTi`ex4b20eEz;UyM&9|uFmf5Fx0tj$dZ&Mm$qbB+i_Oh846)ZeKRpdxcXfa(KU<=4prdZ zB4GrRp~WA!%m{J}oo^|(XM>qpRD%BAt)*HVkKzTZDaa|mKK-|HExE(@+8q62(n#qp z8eBSwq8re+Gh~sWZHhulYsrN&7_p~hz9`7y!#R;38&i~ z+bC`YBH+qGe;?R{Rm(LuioE*^WM6~r7Nx|&V3;fVOs82^pi3*r;+To~Tyt1Kd*!op zw|!nLn6b71P<_v%Y%+E5P8T6Q64^5yN>I*H10)hh-&i1_*|5OKZ4rFvvmQT*7i>tM zG`C_$a~W_e6T-TiW=>GIpDpq-ah z+#8V3lejZoEz8VZns1Y*F4t1#(AB|b(4E0c=v07+hmEE!o6tIj_nh2sh+^-Ww(pxX z*0r=r+tb8S2gCcN4woa2PE7K5cIYi;9{9RdiPQ2{aHT3U{&Ug(-?9F`dM1DjjIp6R zyLZ`*zC!z>OrJc4kS`tgq<;DiGs#vo@EL}}4Xy^>N)KLy``HhIBN^*L-7bs2^Jd%0 zlcBFV;;5)YwvxoZb;;MvS>vVA)RMMBPs+c3i9z=aecqJ<< zNM6PKsjdD{4HO9eJ4VoG=+FIFX9NUGjoM-cN0+t76wd1h7!#@|;2?qu2`s<*pBLnZ zFKA~<7ZtS1RZ5O7`^6xh90QC8@6uo5Yi*GhBL#NBR6z^AFL>wok(Q^M+h01oYwoRb zp9rXxnz07i``mARqpq!97GJ&2&q8o%xY*%ask%e9;s&2Vx9i5GM?P-$3478!Nson1 zdsuvC+{?MYxe&rW|0h?X!|2S}BkN9kx1+s(>2-X8jqN%}oCNIbV_l}RGl%S%C2+dG za7T$;K1Q+DBNqq2y< zZb~FOnsQ{M`5@;V-*6T~1YO`u_S@D2fdcW2yBc6~)wL2QOYr6^y$=0*hr?S{q>3u} zWM3_pAeYc@GvN3x(dJ)kVuznK<#4`rP7^GqC9Vps>jV`V_-kvM5otO*zcllA@-jxm zgPuQ92{*tA0nuYu{~sQne@3+bH$Er$PgL(XlR-R3!4$AWlEBn$pB9&VC#3*qSJ#?> zQF?XX{AWq@sF7zqoS~|u`y;|TjiK_t44u;AA2o2C8YN+UNz-!4&s827s;H9CCCD5q z4$xzx=3d}J;bkIaVRy2uV1I$M=;#?dl{~K+{C3!czhZuFzINXnFI^ufd6K?ZM;(jX z!22f!$qmjM9{Ccn3(4v zLe>JKS!Ua5bUg5i^9evEe0SEeajI+53m92C^C>)-Y}wg;l9$ot9_k@_k`O2s0}}X( zkpv!YLM=u~icq0LCjb!1qDpY1pf!vF;_M;bWxm%sEGyLdO$w{&w;eUs1hi`wzPQ0K z=Zs+rCe5fBBN8h4ih4Ue!28Pf0=k}j}ixDbahVJM^8ZN$!rSmmJy`|9R zf$)dD8^r1X{I%Z;; zmACRkV=poQZoK_GvZllsIg5=BAWC+q*w?JCt-H-qE-ao7u59lAVg~fzkvp=S1cJ*u z8VIHAoprOm3@J+z@7O>h3m;XQ`LEarN!=j#rcf--0{*2R=kk?&I5G1W7J|3{9Ffp~ z0GoOIBHQN03+5nwt^3NX##8A_s+gk@er5LES6$3E*)Yr4KYb_Z(<{UUm2#HGd!c=) zX3td|sUnBnCNUKyUy^qpPS<=&pE<5P4m_$x_xEkEW(s-N7_Q9h>wO5{wUiyYrXX$) z0xkAi!uIP+98plS9gWcR+r>dv+O8P+w@uJv!3x6bYR#YDMW z2m3<;QhV!QK@0#zw;M7Na!vQ{2egLUn@Do?_SqkD=;5aeRt^{f0L9&>Gi9 zw^J+6AUoqhlRdxH`pYs3lr7%9&-=Lc@#BRv-aS)whDnNCfit(rJR%GcvPIp3u9s1P z(e{x@7OFz*>sVfv7IRa=TbZ>XoOc7hKY-(M#HcYquf%!0(p--qlF!4R#I8yBl-@3U z@1x6@#5zQM0%!?fxlh_71Oh!SROW;_Bz;*Tsst&8YT(nq>IWXMaW>exg1#pn%rraX zlS=n62FH7K6D}=bROhW0VCeq9!s8VRTn|ckExDDgFcv!>@29(isKI2EhTdX_yyq5# z+~kPSprqHukSJD9eqA;BTM=9Ppa#=ZP5IW|A8mlASpHaDG+w#|Jkt@ZFQr-OJ&23-aLzrzv zg+9nK2qX~_V;wjinRYR@EY?VnC@l`qCBJ6u(B)V+S7l3OZp8X7R{C@b;x^?~)5eE0 zE?L8gh#!Jmuo+A%sMtGhq3_vs&lbZr-4)7w7+y_04_vc~v)Ywi@qGKD@+=`E`U(4-=1qio7I{g zGWN8_XCcnl%nL&7{qO+UEao!>Y#H7+KOXa8cNVUdRNsHgG4`gsP(y90dMf~apBFgS zfXk~>2-8Ftc2k{u$0m}SbceFe>$8ZOBKCwu#rA{B_D4?QSlY#;*|ZBo#D6-#?*FJ7 z_HvwAxYe{Zds_k#liBBgD9Vn=`AO3TqvJtrCMFYtMFMtk zcdZwh0UriDi?#&(j{S}s`7w~B;^h`?XBUDSstaHgIb>6!}8Li2zZe!CM)_F9Psc;US5Sp8s_U@44p+(R5g zc_1)^gXfd`6!k6f34jCm4vF;B7$D)daOvWLhEAF%AP&1e3Aw1%x3nDW2C!u}i>HWs zoaHJC1A*a|%Q25!((Ue~9dgp7WePS3{pxF^OBB_I^SyTF4sOExszBM{6R&a@y+pf= zcl6Bht&ELXv<*av>mwiOai&YY)NGGp72Y~5;W&D3^b;Gv}doFa*g%hrC*0BA){Dls?$ zBw)d$l4S!d9*c0s-qz%F#KM{xd&tg98hX4)g>YtaSx)yll(;6kplZnx6(GELCPCC% zn|xl}4x`f+YP}xL|8X@)csjPw3H*vGpNPLXA@ULd&IBbvjCO|UqBRPyx+1^wH7gy^ zV;Ys?su?~Z0AnTD~L z^?}LtQf>zXYpuX5JDv}%9ShZL1X9#zhDb!l`tDA_5_j0n#4DQ9P*iYafCO@G_ucl% z{m|npJ=Q`Ow6jLpZ*>KC~EOz>xSu0 zuZ%>acM^$->`2ug?_#TB9Xd4@hCJv{bgNl8G^E|&YEQT}h`FCh~|KexG6DuMJdgnY=FgY7EU)~A-_82_*y7k-t$T?WGnf{@S#cDV)3*x zt2aveF*>cA{TwC5$xJn(xL5j!qxj+ zp8w3y+2i5v7S)vP&cYv3$B9|sbhE)%*I#~z(|VvewC%J5AGo-CGH(%o$&;0pRn+Xo zao}`6hkf+cj_3GILW+>rQP<=$b1Z>K$&~Uxave!qt6bvt5R(~q)Kg}b?$41PYJ-Fe zId^ftzWlx47PoI!<$%}WT+*e|1QG*$pXbrqK1St_-^*yj%_9YpqCzt>3%9wM0gGx$W?^<<$UH%04H3o~>2 z$gc>%^OXW`pe5e9!=xN)q~Cy)Dk4p-9b*Oh=^Wn?(cffk6#(z20!q?!wi@4Nf>17@ z?VmQH;xVSVE!6xizM^WoLxP>l&sw%aAnc@JMZn_B!m~66n7UaG88afhujR>zOe1b* z>(l476-T&sY`=`6LPU)mN921~0DlHVEG1?jVtFN32ltIFp8lLwoc1ScFpYKN*vw1* z9OSw*p?M&@jJSZ;h$Cq0w%-cg(w|7Jkha>z)r`+!Z{u2Fj;TYjluFEI8Dv?0Qe$cB zB;2ydEeILfwsvYJ+owx>o6&k0a$2tKg4dut(zC=X-nZrLT_s7Dk0f6ufgdE7wull4Pl+QMyYaV&74&U9& zb*+BT3RsOj{$uY+z%v&F( zqx0^}%N1DlWtUfro^3$=NZyAXb{khRuFt=mX8*9d%=Q5BibdKGMGWZB0?A4B(Up<> zkJg$Rwf2?X^j|EI8#`_mL+m+2GJno0)c1@6nR~DU?z;wHPDeAVX2+D;#Fw)coN@zP zLZ2!uGl_(E*RZyuddJ;28-@lfjE0oR+L8A0EowWKxH>o4l^XZHrra6P+~>_1XioDW z9J}ut2fJt+it7-_Hy28;uUuWV7#2%EV;67zX&hnEjVFoZJ;Omb1W^PSPk|jKLCYIY z7rRk{i-LO%9k7T?TFCn6EMr>5YhA4GY?++*G)a`%UcWZg7$6Mdc5Lg)2C~s$ynfd) z-_p);sSXt^?oQfXUPZtQSR_fKcW(W%YyVQ&!!4alREIn-u(~Sc(l!6M_|$@6cCK;tJx(@Xxhbf%`t>FXj_GinkV;MRCARuI#mj=K z0>0P=F-frr9Ru>g+;_fwE<7_tmON(0--1lICd_w0yUh^x@?TE*sPT+gn8@ANQZI1k z3T7maY_MmJ5o~}vc*E7eN@~PTc?UOC)rO!7P)h|WYEyK=SbvsxS!`Y59PDF(LHn0b z5gu7Pwzp~WIB35uFXpl+uf!PX7vL!vm=uUtLw!EO{raEN7r*9ikI38?_UNzzs#+CZ z=--EcW{qwlC>IugJ^K&9VAvyzQD(Ivl*|iR^lv zX@oBMpOVDfXL)LXwR8Y12u3zeeD=Nuqg8IlK0D?C^D|o4>Po=8(5IX8|7b}ZQ*3Hm zd(vi#nQbUMy_fRnI|UcNk2t$PD-O_+@Ut}-1=74*M#o_CABn`=dGMRpt1lMd4G+G+ zT4;~iV#t)Xk;{o&4u%;+60I94BR5ghLea2E;{)eSlN>$IlM50TJqg4(f5;d&}N9tDxw3PYzamS?K6mH2ljZ zwUXJE*rj*(oK48j0;nRgpg6!5D}Bw%o`GNkVri9jRn2d6pXP3RC#T?SzFoHL${qQr zUipMK61N;j8}jo3_kHb2OJnKIapVs zja!}h(Ax?PTqjQjyQ~4Mn3WRnjvRn8u2B? zgOugfgoccwau25?P^69WVc%bP6{^{e>V3w^=NZF$VNKIJyl2U$@a{3fp$=blkpC5w>}| z*WOIWf4L){gp)+L(+p8Is__$islpg-EFL0FE=qU~6oIo6zkv`gG0usI15QWmg=o1BLwE){!$wv}AS->FsKNi{8?4N-xLCq(qRj`;+JI zeV)YkuxgGwO)E1S^{<167%ktQRtIq$PdWMh@b8-TcDWNOJqG07?~+<^!*v7kY@ru` zMJk+FS@U{W0Uz<>#4P7`wX{^>_Ids&CTg>P@I3q9s`$~rt9VynDf{8KoE@k-zMzhS3qFvM z>}LT&D(VLa+UQCL;Jr2?!#kd|MdWeUWxBiH6N=DkOru|oqv^#>`qlHJyX4Py3y=WP z07qKC55d%u*NQ>=PNn`DO)%O*0ncfA(yrwZmi4w+FqKz#)XGpqcv;_>>#FiX0D5U{ z-7NNlDDj1I8T*5sl(G;F+;i4&HIQM0cI)X@!mV1?o{gShR6ETs&c2;K&}U$`-I-hL zVPlfmqz%AF9}t{LmPOSn@K!1|XV$E)sw2GLP1}f#k{Wc`>c`y;=p|3ka+`|zPR4p1 zOcJ0`^tzi2V-)P>ll6hj&E1~j`}xDx9yfmWZvyvw4Oja?8XO_=Z(Z|Dk=GmOmzOM8 z3#Hlu)o-WvpMTZgqUe+*2~pSZ+f!m)fu8htkrAS7UNp@Ez+Drb&QKayxHWU__P4rG z@${7Xuq|hqb18wPqS6!=jRjd<_sva zAElC9g8FaQ!O2#hqF)5~puWzcI}Fj-}-RM z$I=Q9`52w&X`lkjqU$i?<;!TXTNV+sbjs!o@qq&k>YU8f?j4{UXN@cd;#M%;GP(+a zY|ggZ34F+6W)UN3v2Hf7t0tJKP)SNaPe6~m8}g;+K*0d$1$UzIBE8870XO{=xn7i7 zxjgQ)KkoJAh&jh70srpSH{ZncKlQl4xDxB16uqkE?Jeh@_C)CZNl;dEbN4GLV3JFE z_y8f%u8mW^)f*AjgJpXEhDD~Z-lRDs*v}-sKv6!b#3qk=Z z_H3b)^C^L%EBkxrcVyhbdJ|;kRuoOCt$y62Yl=-34ky&7ahyID$F&-`wSWgyR}Xyc z$A>e~1@tEIXEZ2wjLI_KJm?`vU0ZTG8Wl|#rZZ@%5hi!`A2#KFTF7J8S0j|G1G-GUSFLWVx8*@P?E!)j&4Tm`(HcDQ_Y-5{n`0Ds9|Y zC-=V{pvLgmOr{XU?!3o?NW92+ugU-1#4P>4o0zBN`DEg#u7B0Y%=3?rz zlKn>`Q}f>%nXlPX7MSzW*4VP+NPU?@J+M}!FoD)PI*>l!OE4KsQ^F<4K+nb7^G>eJ zu$38~hpc&srWKitqCh=R(kn>2)vh=&2G&JiaCFZXzN0-x&|^OCeI(0F6Y~l64+<-B z|2+Ztz8!>cV&!2jdt(#Qi@ag;XvXxSHTPLNaicxItoh$POehfJv6$TTske4Q-|ly; zZs#VWz#6l42y{{1iqlofy8NmZkSZDeUCp1I%_W3q*Z3I#q8Y(dUUkuoLy`Kk+pb@n z@?Rqm(*CjS?j8|;7xVZEo=wO*TRHt5FtZP^a1kyOR~l-~!*-faWFN!1wy1^~WPVot z@wjHd{x(7cPSm?2h@_G7E0wCHM7qNITUZ(5KfzKEbF1*>0-5uQ5YON4!UBc87sRZ>8MvUL*H2(D-^ z$)UtQ+;tKBKQxy98Cio}a&rR=Ub$DiepUjjsg!6KyLUG#O6)8A2goQF-o=X=rlT4I zM@kUNCh&cyE%J&i()<2- z9>Ap_VeZ5KI!isdX1Ob;dRZmdiFYFcx?sF|Tzy9p4vy?l*}iv~hxhbq;r`f>bV|BK z=RoyEMs#;uf~hd}J96&G0)WIVJ6^Otd;2E%DM}cS$@yd~yq}=CYmw5=&#a(duxA0m z4dP@E^{E;SFzW90tHTHiV8zlc)56HFYh0C{w+~&N0rW^$kv^XFpr10kT16%{@&HvC z%K&bZ5`Z*T`ET4B{%_@v|9JNKPZsqdtBj1V;R9iUv;?~vVP#&evQNpSm34NNY7uIIGXD#>emxP?GFIjx;nrLt`fBt z(V7J1)n`T;(?3_GXJJ)*l0+s-Ka41<>+>oI7UtqEa?{)uqEoZvv#Y9~l01`#XT5%%W%D4ek+Y~m>t!10V!|VZs)Fqg zKa`dvi&_^yLW_b!y@Sz^Q+0`xFlN&^)$@<7nirs33^O4aLnK$~UVgp~Yn|Ey7H+i^ z@h`@<6i1N!r2heg?9ax=28zKYhn2v=s>-L$3+d&y=^B8f-fpTnvEeN*3SfeKXo8V1 z82Re+xjt66Rdu@TL%_oE`Xl#b_N}HEUv)+e49_i}PX@4&rDdK!t@5tW7?V96dHtqR zmemKL?C@c+$W5uKR$tvPdV3tF-{;IJ{|IS3c;Fe8bl>Op`)7t%ip$Zw6_QQLifX`2 zVe7Q}Qc0D=id5&Tm7o?I{DRk*CSaY*-DmlGVi3hs0DC&tW!@bfo{BPFkrInhi@vLC z?yr#^(#0N)>QI9R#92QShZa)Z3%5t@59Q9Y5jtXuM%o@zU+nC>?*k*#{HWphQ8`im z(YLrSn*~M{wAyWwfhXjN)hb&pbl+QLqG84}~7*!Tk$FPtZM5tVr zYO9tP#^C-de8m6cdo;0iC%=Oue(cY|C-2(jCpWIpPTfPoX#{8Bj9ph4nVj zlqQU*1O7VO9JirGH#tnMle48=Jh-_|{PoITHO^{;oqdKILgsWU#O8>qzOZ?TsZF)N zZ?NJ=RQ0|e@EMN;=(sgMSSPxb95FtPewF1DYey1aZRx?sXRV{J~Gh+(W*2xie5l*&?F&?({a!<44 zEa%7rwmK(pQI3Tu&$rCz@8Zr0twSy!i)6_BNH`#N@1YEv8w(*Unm;UzA^eBQ&f!Il z#nM^3#C{{g1)~Ed?)Db{j~cayJL&kcm+pyvi}^qD$tKvAyD#HzO1d4&P{mSG8iE@ zwfV60eQw)a6FS>a9;U`Qp!^F42U}Uv0;zS|)ewCE=T-I*$tDjjB0_RZ(Eo!x zsAP(=hls7>gVCN_bPz|->}G@g5E+gc#vC;lOclh8QJ(cuP?m|o*+!*mOJ?Mwclo4y##F zC26%aFi=b0bQk)JXC)Xo{ag}q201-RJk=xYUJA%-a{bnFDbl#VBL8mWCyUdT<#Oas z*#I4?8}1hI7l@vxa{(j2O>aBblt{bb=y6nd0f`Iac&bodnwcX2qZK&aP_hkhCrta4;1xlYO!7TF1CgXzFN}M*p#a<2eYVwXSTO zeJO!nM``Q`Zc^9W-tSCY?O;QgG&$JJ7CbN;Z0@&tzcJ2CNgb{o2RHnf-=*sg<0FOsVAWIT-= z4>zf`HDFlD4im+Zp*h>c3s6M~T$UpxF9u~WHsw$zl?B&Y1adwigQmct#(B@*yRF0N zBcNcF{`}?3;b>hD7OyvGq}v7(zeyb=Hja9{iO62MY45$|&Q_05l%t~QaB`NC(K($F z6)p}vg($Webzo$g(3@^MWGvb!_3OuN$hF184f;fghFO&J=hcP7h7ikhFQM-QvUi{V zfqid%5{1?{-zu&;(fJ&}iw1p<+&y>GTdsZR6>=Z9QL$yGewIV^STD3sF54qChD4&k zv@xE!YVt8l(RaoDjv;3;^C&4+c9 z7a>Xt=a+`7buJ!ws7GUh(Gx>VNEE-WQa+_-HRuBDe)9uR*8 z7cc{61#t3MGAYTTpP8V#2goQ^UZ@qlrt_n2^I|kL6YYSJYh5OLr6e8eKPHLL%a3+)kT%4@;myZu2ZuZKMY4IwGOx%VWA+mTKk=O z?U%3CZ_m|FuWe-WiE_!OZIKrd)e_l}-(3q61HX2EU)a~T&3$&kRsA(^+$%fYXpKLj zqQcCP(Qcy#x@y%Bp;fFD&6sZU>uz=y8)rc9O>uxmVZg&_fI|A6&zloqT1vA}>s8)C z!_;Y_kgr$Kh3Jz8jX@}{d@|by^bXR$j}-?^g4krnm;j7SQ9s?t9e+E2uWjV1_kBsH z%l8O-W^lpyjAQ+Qf#w3|r;vd!k^s>ehU(HSZj(A75M_25iQHwR{(al+BlN0mf%gl~ zw7t!n>3%odV1t z&esjvT&HrbS%$-0H2m&Q?&cvOi8R2tLB{D=0l=U(zdl$H?C$O%=vq7Cl=ihT0WWn6F`e zq}wMiAY02%f)r3MCfk0OTe><6dHw}Tv`3YObFKnm)b@YEZB5TA0CXa@8Igl^2sV)k zIhW!q4)Ddtq|bWia4SRKaEWKzlcY-yle{^S9X6909gC#es{ovuq z%D+Iq&Su@~-=Fye)-SZ>^riCireZwN>syn{z<<4W1-E1x1tv0^1!y{(WTfdb^nJFtO#2tet@}N2G3K@7$ej^UsG~37f0-=A-AN>L@@vCbaMY$b z9{b&diH9_mr5Chn3k*+;lNtx)=+Pk>5%!23RpfY;;~NWJ2>|%M`~R$i8}M5#)wB)eA<+)l=r28XTgdZ8H7$S$YZZ0Y=_G zq`b@oeP-A1^1CD5N*v3k4swV5Ked+>*HFp_Hyu_U+#LUWjbg(Y+e1&nS7nXnZS@j9 zt@P$${K4`5-g^I6A@&~y*}wW|eh?@5ML~Mo!qPJ0fkZQHqYktEt*K_zV_pp5XE5X8 z$z&JbU!dU(@1uidS70}s>A6lei)Vr6k%KY0Ovsyvh!lpb8EzA9u%8J;?D6KA=59Od zZq{--bSwHG2kt&dB>rHfvM5DM5k$kfZTSI=)W1mZi^!x44}O(Md_v)n!KwsZHR(*l z6gSW8W)CZ$YZ5WnG7ozwX^!U7$9!-I^eqXRVXPZabkdy$u;0PNBC$<3Jg-{XP$W0Y zvrP}g0uRqhHC=hyy)X9QoXl+Exc0GV_iJNl*41TV_f1BZ5ZZKA9i`w?dOmvfxWj*p zsT|G`Kq087#qjN$hlT+sPN?-%kOY)&`y#}vE&|+e5DK$o(<(75DTyaev|!&a*YNGK}dC9YhZlm*%!Ka(IqCtKABQ-7L6|0cZe`w zdnumzs_8Y+j>&@pw}BdIJ|NLln#@%AUdDn?TTa?wPB7)9i#HPhAO^O<%BV&G0e-9H z`<0xv4Q583A_0hZk+x#2=D~jIsiy*~_0<~y`@Utcan1_cV@sfiD*b z=lu)BI=S;hIFhPesi4RA?PVb zF`YtruDH+^3$<=)Nmy8rjG=$d!4X1Zpbi3gf!+utp*9)I!h8ca&%*K`XjJ>qtzzO} z+j##%>V4)iI9U{cC^gwO+hl_N1u~3OpRT48gNUzX8j7=K;C!A;Tw zW|mm5^Qb$-kqP_3Bu73Cn`!euWq#B=_SYouNExza|03|M!cOajG$$J$*Il%R8M=2H zoCt1_+-rd|MVFzykyc;Zg7WZk=C4-0%RfD`bMiOddwX}3xnRY}S$k+=`F9=yNOgzY zR(w_3(I&|5{>5Oj4yNk5<)6V6=umMdU!f15bnw!1^1x#ER>ozbXt>{qwNA?y`iKZNkb^`x8z1!Gd;)>6J4HAbLIhnU$Iz1xm3Wa|MTP2p z0?`Pb4OIZ=RBLl@>x2Ige-)X#1^)Jlrm;;8w&*PzG!9zT=jRG*DzY%^mztd;)RiGv zvu6wUNkeqwF|pD&s9X^sa!aWLKE2o)m`S&U zsqIMu90VMxr@dD$VrK-q6CMxZP&(*nl=${~H-`FqkF+l<_iRx!0QT@Mvv{(occ!iC@&4%1cZ~w-)ew%!X8QQzE`<0npDq z5m!g_2~?%E85gB*VMiGcchrM$T9fjVe|zW=j_5*Widvgn+QZMz3rz~$BQ$hJRZdm5 zrs%*50AtUcCdf)RLZojJh=;^=H5j!5^fSvac-Ou8>Kq_B5IRkYsv&{f6*&(Qj!hS2&1}~0*pI#>>&$61&%2j$O^F{ti^OYFWlC8}j9B7aIHosy_{J8LVO5#0W2&RV->r56uI<0rPCzml391%JLc z$=9BSM+K4dQm+xtg-#iQvM+7#gD-)%c}xWeE0St_#= zAsIt+Ckk}82!yqSWnee!b##uHK$&PC^w4MUbTE+FW5H(*#- z=$)I_jmF>$_Qm%kk~yP-_XAS;UAgx(SbNc{zhut)!V zb4!G(d*>!xQwZyb(RZ`@l5@@}N^SU^Eugx*D&?fUXpJdxLEA}NTf*UVTazO5(|g_g z_LQ%1(o-$2D}_1zqc*QA_t#XW1Ke|GJ?;Rn?vvp5L1wB=_E`7knAIs7J>Gw=qZ+28n)ir&90ovZ_S|w=qswJ0yR>%d$ zMy~PJNn$Z+fMuYGC zxKjL6v$9{3#(?>;5B7{OR1k!8ND)$cAgVS%)!OAADz~cgENfq8$ykS`RXddB-M45% zrrQga*NYgc?7>^I`3?gVAi37+AN~iBmI}{I56++iQC|E8=%%>a z9$54)S#*`_t-^c|iB_G{RcIitBjt-?GI9#0!&tM)-L)=NjL6OI3L*bWYs#l(wGGk1~FTVps>I1 zs5fq%h+tW4INCgJo)wA{@tIN>Q%JQOaV_M$Z>yFd;fVX1=_<~=632e_xt`iTh|RG5 z3yrzI>$GYS>ceP+CGqhFOERWpUWgYaELWGqpwoZ!Y2ggGueqgOWP-CYf1WRc@E{y6 z*VF($sahLu-l*##{suO8Gb3HIjg@hGuR>#c_4v6TcGjU}b4E1fWte+Pd?~0~3nF-` z@cu26g&HzU@x8AMjslkG`3!2sjfS{*azG?<6CX&b^Oo!pWl@Q}Kpanuwj@(f;Yh|d z=klOdcjNRi)}nzw9`S~) z=gFE|=fw2MW8RY^Y)GB;$3V2dNyW%lyl&CocwxSATqigyo1(>1XUCoSF-7ZKtFE=! zeXnI|u{Rj0gO78miv0W+sH_w67f72spR8;DOT-F;urRX*^<#_W1R&SY;sS1P(gK9E z>e3{?q^0P*L>%bfi(q)!>f>M#`O5goYmM^q0MGJ7ijCktEGu8-UfcOKFYQ-*E{!+W z332jjt)FNg25R&z;PaXO93;-;4{np6jTXvr0r*AP{|D`P0GHz$6`;NCV%a~&o3fHt ze0joq#rT}R<}aZ20uFx(wJ~SC2c*so)4wR!)QP8AKTmWE)=OXO4KpyUF`AhH!G!>1iv zgT3KY^TK+%qtRp12}kr+G%;*gWl(8)gKvZ1Rc{gsAX3TRN$_lA7(;b^6{#R}FPDb`b(aINm|Oh3C);e&*I0#_*Nx`KPvS%mTl6LBi^wjxoTGx*>wIbd3;!!;jp6jpfYN*Y=nX zCmgx)g)XXziNsYxG`lrzgXel$YesW*y6BBT-yWy@}fJyrO;FeX>(gmwY0lnEDY|MpR6kKs+WN! zJ^*~}VTo~#-2T~*e%AZjGDZQ*3TX)qUC|yfygeVBhJWk3M^RV|W)~CF=4=R+a#JJZ^!GDJbO#mUX zI(r!dC#DkQh4uc~A6Lx$Wj3UPA0$8C`zue3E(BK_@h?46~l9Cv@eP^==LWa>sb){rItqGbPVh=ZAZ#Cw2 zSb(ODSk)3dNltp>9`h3*?|v|U%Zd?3*(Z3h2*GMJRAz>DCkBDGK=RLfHLKR9!q)|hn9?*n*U~0exx@0U-KS-2 zDR0p)KkG#%Z2?aWOY!|cu{#^?jL{|pY9jG)vWKs4Kz)C>z5c}?QXGUWRdAo+@6HAW zo~eVDxzO^lCZ7~S9yOdQ1&&8Ja|>(IW*h*G-&-4ld%z3qMK1qz#F|5fu z2O1(45dDuDCh-nhTQxWIJ0FP($mfcM2`i<~{m5Z64LfZckE5H~Wl0@usMQD%<)~Th zcd@@~X8P#!0DWH}pMkDCNQOq5{~!hPv=!aaCLO6DjT}86WTQAX(krO#F<))5Uc2?##7AbxVXk zz-PYDwi{iA&`~wiSraqv=Tvc_o4z~JvJ?aQZNF7BG{Atl@3%>NUgIVi1+!4!U~myK zose#XwK}jT!N2Y@JbGo>q0VfTJaXP)4O|BINp9z8m_GXcswFCl6Z~yqdt&${>o?8O zu(gGa?V}g+mB%=PLEH%fHtmm)KfY=QlT74)F(-T8JVH<|mOCi?h-YGTJ0kujyx7#? zcwcR{daHROIBKxKBXDAEv0{NI?4@(H5fq++89zG|aIOBY00ubU%`TDX`v1k+TL(nh zZfoO1cS^T}Al)DgCDM}8AtE3xpi(k0gw#kQASf-}E!`nV_t4!iBZwpA@4@}P@7doz zd!Mtv{r&!PWW*=#dtK|g*1E5SoLI4)2@->bw2C@OLunkl)RTtyI)SpIryD-_p%uAx z*$U8sjrpp46iTpjUKf$emsDT2fPx)M16Daa_U37sl=`(W3W8YGe!gJ>CZV6e#D)Jh z*F4jitDO8QyQVynZo8AnR|Q1|b2Ci3^Z zd<~rPYQ@{P#Pf&=WD=eF&Zs4DYj&scGFWF)Oh!Zx=3$%0zm>9C28;)TQ zM_1XuqWqZ;TmUBGM+}5I#~xb48E~n&#v>!qWty0A$=;}(R$^&7|JcEWl}EUTaG@|1G+Ol_}*YQGwyDQzy!CEcZ5 z)a$(`%+5}2v-pJqE2e@AxKdHb{T9TJ9+I%OYS+--2AR;De2cxt;@x_eJC!m~`A1oS z{6}|8lE1!7O10ujcC<2n&hEntWNf=D8E~FXczK7#t)6KpG2{W=NOzso;;C1x3AnV@ zwG?RAo+!@y1riGAmlo77rp)B^PaCt00Xho6BuJ69<-T&b;wn`=(x|)coIg(X1EE*! zlFOuyWP|mICA0}cRVg&k;rReCBt;s-yBny{)u?}~ z1stf(fAsQDq%$>Xr1@(TcI$_>MU;-M;shyLsPHQ8^*e2j1Thn5qC{3!5$h|{)y0mo z3~C(lJd5rwsXQ-5j$`4xhNBwyIN7OXbrwHU_f8x!;Ug?VnoU0K%7Vu-L(gQiaF1M$ zjx5TaQ?i?{e|^_f$Vl^iC5XruD>>xw$?c;L!)*0Rd9h_~OT>s*;<325mqwEv?9v}K znnhS9d%3PXlhKwJ1pKIE{K%|z!Uc;2acc34U}PY`hic`~zi;Ko^$$}Uxuf&*jGd(X zdJ~J}>&27p#|Cdj76U^l9f20@wR(XySI|>NW$7rWycSz?#KZdOFLTdXnMLhx-4<#OnU~0WMlIC=&nq%LH-^mKVoF>+NYCU<%n8_Si)xxbKgvtR;`pJ%CI%hUoVdLdvjh7M;%@`MHkMDgy#FC6Y zrxaeA&$n#|QQi$;g`+VMe52nw}Y^qiDo5--5iOatI#(d z`)!B!oLOO4zh7(DtonNoX65n_h$T|v0b==(BNuY#db-VpE3>-g!-eT3wBhq=0!tg zpJc|9xwO9w;m=HFROw2SxdbdPx|RuKsY@yy=!o7KLgytaorRs5!4>lB!qRnSFGIq~ z@qY$ymYY_hwDZg?`9DqTe0kl%Uq)N@oO+kHX&I=Slq*yrdU6{`UM%?%FH(QYw=!RY zFs@wqO54=cD^nGG1uUzm;vLM7ZeDT2y=P+kuq=J;0 z4aQj2CZ9)Hi0!MDl$C8%`0hTqRn|uu(om1vL%^?f)Ih^peNFBCdS->Wvz!D)(vyCB zV!LjX&#JQSbM)-2&mcY)ZN&D+=3#&9ip#Iwra!COnJH>qY5hlASx^?lh5qM`h4m90 z*E6m2VngZc?m>1PIl)I@06OTy{$L8d5TlFimi*V~uN^>-+u1#rKE%bXkFJb3LuJEQ#q$&M71a(YqEI%X>5n9B~ z$?U}kdI(I_t~|EX9g{!uH@zN{DnDdILeCx`nIj=0t7&#BZAk1|dWlf@J*%l~#Ac-+ zm=8aYC28%!$tMHM_n+oZxM)vC;K7fP+C3S;mIURpw;;4g@x;{;98`{KOZEV54Jo%=Mrx}$sI@FR5HT&8T%OpoNP&)f~6Ju2Tu&-~6)NWj^ znNy<8oIsL^p&~6-P&MXLdF#lGk>y$GRh1a9SUD=GukSo)53b!Q-J;PcOPvt<_0a;~ z)Is;gWzPdLLcew-|Ysy0?{x#DagdcGyWo1w!f0CnyT*J$U3*BsRK84P=I0ZCJ=a9A#iTp?m z$|Q;S1#&(HT|NaS6pe)a0@d2JFEUg8xPj2uT2wx0}3b))` zdL-wjJ08&RGvb1Gk8V2U!tBy}`g;bRcZ|kZvyYF}oj9m(mZRbH#M|54vb!Ah2H_I# zX&>e)V9da-q=DYke?{y_{kZxH^q4{(b2?JbBk zsYVWplQL=gAQ+iOkh-K={<2#r@B&+}wMN`fM;hDni81FbeU1c%ylD7)1%}_F+ zUlD0ja8DmQKnjZDZ0k9$b7)NN7<%fuG<(!KA;DD9aCND8HNz?|l{Wku|4OX<-6^08 zUaT4cnNY6x`s&O)Sg6?HR>{~;k(O?9;uwa)d!Af7CaOk{f~Q+c{zvkQ{yz}ozkb%d zzt-0+Be4n`mvicSolg6zpFoLL@}!J;GgN4K>jhe$LIS*ns@Z6rx`U5;{gsqq+}e=V z5fO=IV%g*2(GsXb2EFd5*idO*4Nwu<;H{=y5LD*%R(&BV#;g@dRVi)mNEi9deB|!l z_&`ren}}sgMpb#w7}9t3PFkU*=9bfIWnM9cjFj96duk_eR87+jnww_@M(J^T01HT}O&K)@sGB;8SRtAOEx zQ=e(*v=gpseMB^PKSkEq`uoq1k?YwTXXV>G2Ge4EuEtF>-!($hug|?2QlI+UB`NcN z)h@J7y?%2o1R);1mVnyqE(uJQt&N^G(5=jw3U~AKBtWd_LT%E#hm_#300$p2l+|7u<&R3L0dXnisKZp>?#aIC;nH zeJTGyze^sQbLc&ayYLl(f%aJCmtQhT?EeT^fAuH+KYYgcyD1A85kTu;w<|V8U{ocd z*`ts@IiEHjjfXw{nTbg4{oa!9m0RsA=$anW$(}Q3vCAg?cj`YY#Y;R^WQ!~&c}nak zeJI=Ys9roZvBt|y2(ynH=f3_1V+rocY4H<~pd@;LBn2vG<(@3d7eu9)jVu>z!MrxT zuRlCsZn^%MXY9P!^FGNQ&)1<@cAsX=_fjK^T^;Oh4T(nm(37037CHlw+tYcb3q%+2 zWmAWMtHpax@a?3%)+I+Ihq>pus}ikZy;)9K10mR{@&$$)h;X#i51q@{4!>Ps+N2{y}jH8=DzB zTPy24GrsgRSH{vtJ7;&62ekJj4cci%lV5v;W^MYl!g(@ocgOt1+BNYx ztLOa(w$6tbFA5C?8Ti+Py%}bp`r8vV7sc-d_<;)K+GGM@G;D;{D!4LyV8f%wJd+rw zLyiKBhosv!u0}j7N&N`N>YFP!Ae$I?cLaj$H3f3d+75hVple&tU_xoH)`!_4Eu&m} zKjh9=v8n5BNPm(BiX$cwoTI*{WziE_69;s5m36SiGV?EYqbLcZUspeQpq- zv9iR!UOp37S*1!Tr1!p_7AsbLGmn$9`F@K-!ec(}>S>&U}xADyVE{n!%K{vi+3qlR2>JLOg+ag$qJs%IL(h`R{- z19xQ!5mGcxpzSQRnkg;6$Cp2svPR8I>P`F;7`w;gzz?)6o|sc9Pouq;Xk*nF0*ZME z0k?J1*TM1(BS2fqYDTy}eGSqz_*gkB*Yf$dJpA4GNZmjq{Ps{xQu&e$YKRVkIZ!N$ zL>>vO8=wh1;?9N4n}^Z84#LHe*%i7C?`*?q*-{Tnc@IS|><B+6p(RkId^-9SwE)3Lw!Rt2!vOG}peo>$5nTxOO zDjbB-yUy*_PS*DnjdAa4F)jD1Cdq3wx2HMBsgE^GnJGjYQ$J3Lf{dM%C0erGz<|a; zw;eqx3w>j286c_of8cAFwHvdr$NbOhu`sbs5rT4|k$J*y?_K zs-&lYb30Vwz|l3FnH)@wXj0TBLmlf`2x!N@syCr!Pk2>@ZU6v4UkGPDh}@~93Rqua zOng#s9{o7DG8v2fFi^0;VE-Xw-#T$1CMi2uXr|(Yce_qKaEAK@F%4PlYaPtG8NtV9 zN?wj@#&$|^j6Q@V!nkLwpS}ILP{iwNfSC`$?WwqCT^CS8{D}3DaX(Sog{PepHk{s* z*d2D<-iKZoC9Q3?H8~Bx?cL8N;>=_v|AL}bB=T%mo@nwr4XL*d zg1{_s$CkvX=nu|GrXE0iL~h>%ee;hWxmSqoF<{6(AUa-3B&!DZHdZ;rlr8wBewC8` z8IO$n#^ZwF_BYUg>K~o%6PyrOnkl)tEU1yiQJzWe492>3O};eZ!U(*PuhCHDJ*mrq zr$i?F-`j{|1xlwFAF4=ee;uH#@OJsMf^c*4?UB7Z3ZY!xKc@6fKXiW8A}%NH^Iing zJn)A;6?;4gM6Qiq%L2q;r@~{G(rnn;zUv28*5WVqfh_@pPhJgay1Tl1VJ6kP^NtSW zS}-c|+}#7_%-UnncP?>_Hao0dFjJtO9=g`FsLP4ty%P>IkNaVajY+D2iH_S*2JL31 zfZ(iJQthN;&wRJ3nE^jgt*qlZu-&%*nW$c-P4GD~9Y<_oetsUVz*t(MK`6wf{{Scf zz5)@0C<)=7881Ds4tr|!7EF)6eX=q1{z1qXscghn#)ZD=CJQj-6}bpu$1!gnLru+7 z>6q%rm@3-*kKJTFEZPqxf8)Y&QCeP_)stu9;$vp?VZv&g*?B)?Oe*eK@A+gBJN5a? zA!54ZNHo^U=^Y93c4Hfr$KUx7|0JfouUyidVRby-s41aaIW4+xVfirSIqz|{+G?Wz zeh+u3GE+CHlGIse-=jKTKA`ok*hi@Go{p3_v9duRPHGJ>Cy*4&fCh+dIye{tz^m>+ zVl#)t@AbEGeXf_dYghS$CMaq6s!60)!)37vL$b$<+DQD&aD2(4pEU^6f!%Y3yWk7w zEPnVd+}D!7z$IG(mTvsv>CZsC;ZfAE$h>6nO>ZZ5fFu;)&}5g?NR|7ps<+~MDoe&7r3lhKrYrpf)3%Ys+xrO6yHg7EzqhP70GGcHMXOPG7iAu zhz1=wRo$QlFd6m+H9#D1+*y-L%p&HLXWIT5U}%=I9GQHGVVW8OT60`u8~C^<7IwT08Wcg)+T;{N4)p z7vby(1_Al6*s6@x^2`K~Co?rM1padwBoLMIh0^r2Je03)`r0$hH&M5ndEGJ-`kvs) z6dxR8qXxSyNx>3!Ysa`tWkBo?75rNCrOBG&i9u(@?LbV@dz9Y{<0vdKMLfnZ?HK zcM}>hI&W6|`jDmhD1@{4PL|(lL+c2X?i0)^f%o%ZQ7Ek;t)8;NRxQL~-I5RjMl3GB zg;+sEueb+YKL{B?sGq>lGoP_nfV9ie3sJRE>o3{xtrouYr%2G--P zO9G^ZX5-W)PElU5gRQig`W^rcI>bV(g)Bk1Y(Y|V$Bt=9X;yi?qr1~%roBhw!ricd zCXc5Sgb52j0K2y}obGbWOTMwENSx^JV&ey#X?*cO&)6bQ(EX4olg7L3>mYPZ&sc4u zNwS6c&+&Klr35#GEBe{?xCw4pL+}9{U=2D)L{<94P46}s1ld?li{GKOn*qrR<90Ve zc}N|+N)E=GNiAY>;5JB)^~5W2R%`lEjkw!O*#38mN7|#OO+!wGX)Yzsx8v9TM1b{= zSeTP<^Br~}=c)4#1Q;=01QoU@7(xUhV`W5OH9PTaDlCL0z+hioz!x0wtXl#jGP*N} z71l{)S_wHTeGfT@K?u6LONjDy(QSFS>)m!vwwFM*>uRYodM zad~~RcZT?AwpbtVg@v7Jt17D|T;d0{fR6noxh4j6GHOmRfFlm|uRSyTM_azv7!f(I zsYZq~^seXdtKclWl&9tiKrG)R;7x!ldoWnKm}9GYwQmmkypZ+%2Wiy>03W(=93;VX z$9o^?JTshL%52uw=$c!QK8qtW*x(ipNVzUHO@w-n>Qm*ijHt_2pb*+2OD1cA_)L`O$d>_ zzKiV5Y<%`Uo?Tfl=C-h^TM@a~Gxn3wSD2?|=_6VbfHWp?Ks9FOb7Ye+sHAzcXi|Y~ z{DU*qY@dKpYp&!wkM~jOGJQ@WMpj4vK%EM90FmtVh(Sf&l<2OZuUUV*y^UofvOg;^ ztP+#V{AMxIK@r zp|Ub>w80e%H4jbEhX`5&CSi^k`Ws*%#sxkL zm5gOY*HVLL65kL8;6xulZwdKI_%A&G=%C7X<13vTTZZI+^glEM5tq2-G?bkeE;+#c zvn%reh#2TxdqAH3+30bk1V)fF+0ac;RK9^~Qq;U5$|Gm*%gZ%JVj;fG0u^jg4rQ-I z+*#hNy2=g~1|y9%0n(kNTchR88f)~4)f2B~Q+*@elaq_ma^mC3$>Yfsotk=PU~RzP zh>xjwxKU_uXOc@=Hqr)s>2p3UzNJX?RlwElEwA2PLuF9$-4%c?(1EsrQ@y`H#NI!; zJRkER64&QEO8<1yK`7up(fq zO!FgvOr{RR7*sv01GE(CIQz1Xl}a%wH| zZ1l{qWU0UNM19*41kAn^< z<@E`>$baye3d?%6%(m+RxOwfG|aQ>0^rqR7X4~5$AU0B-7q6qe?3)@n7uI@Mu&v_3e5xcvwA=-qmKU^Or=(>;)_ z)o73~ZW;ODT1>!q66VL30@YLT+P8K`2_g>8B=6E=IUn;>e3XjEAVJcI6CJL|}gAiT9o zFxh%J{-p|Hv;HlZ79z&Tzth;qr4q9h1*_m;F~lSr4YV-JR*zzUF){#K5|b$tR&Hl& zmv6?Alz|EG2SRptt_Qj^A?9d+yIdq77m}^X#Bn;Ft4sE0U%L}lVHRupm^Hl{gaE>00OE#(pa#2BkKcgBiaCzT zR~x{^C`!hM0`Z@o+v3kY(NE;Wd@{ZKw%KBJ86B`0>}lm`HY4KEl0W%6FiatWb%OyK zq##hdrnA{D+%LELhiBcGqRbePXgI9=HpUInmETQG+M9--Eoo@X#(Q&MJqG5x38!ZU zcTk`uueOoxwDONSLo`?Cb6Y0FxRRWF-cb@qjRJGO7f5lzbX(usV6qs9?I_Whu*T_< zq$QS_*p{?HHM~Rx7DfOFI8-gZ3M*iUEh=E%v=G+(ZXvwk4?xNifTh5nmOtV}oF!AE zXJLj-rrw{Y+U2)WqO9z@UJ5cV!)S*BAcK@*REArA1yEQe)U@C#=f)cTpd-+3bhB)v-({im?V|*yG7_$kq=V;`(-rJq4a+ zZTM6RZ^aFb6Sj9y?&8729ljpr& zo|@LynhD-AF`l1>1Wu|;CN|G0+2l>$Uw}k3uZJhD7q1G>>|5um2T%SEH9i_t{cb4$ z9Fy$=T5qGI*PvlDJxth>Mvo>;jlza-k#X$a3pe_vvckqImT2z$7}=ZU_U^TF>%FN2 z4U5MsW@gkXe&5oUS?flHg@-~Ihdh(SsibVH=637G;O%eX7*xs7I63h@Go)$^NpqMBiID{e63h``+Y*S}n3zrD%qb;_uOnGUgc^o)%6)MH z(7f?VEHO`OksGkOS{8mF%#;|1`gM7WU`+DO{972DjMd`-B9|I#nzuUXh<-#|s=TT* zefHs&CZI2MkiGuM#p@S%V3K;XOt_S~l$5U5R7bD`u}}hBA^S$&1a_cYgg@{|I&PFz z#x)re-r5*)war<1fGj{le!~T6jyo+FAIPqNIOySywK!GtNZU~@R7D<8H-mKlOWlM5 z86cAQ!gQjUvG`7|`|9rX5Cj(8s{f_}gTIJ|JQ4#CgSTqH?(1#%5DCO)-&?SqzvvF)xs6yl_AlmTIe zxC^KO6O?_oiRnIngAGiNh&EZ*8A@CA#CY?RqD~cat*QG#6qV#8cL4|_2x0_L8q^%h z949>TwNL#fDpUdxg#sUL<^r7Y0A5XALnQb_P<37JYhM5bVZ480_a$HxyAlI41;c*? zd>5N?cG>oIVAqeAsmlCA&?FXASZgZEx6Yq+i2dLv4utr()OX1-Erz~G>R_ww*<-{2 zC?V0lOz^77#jYE z3h0iEgzbHAane9+#rT%*dl5L~?~b;SJ(QK66XQC}Hfwmt z_Lb~GWbv4WH9K*8YBjt25WNz2m{e@`ly|yotro66obXk+jq0g=M3f3^k=rx?g_q#hv>r>JJtSk_xMc&6~`b?4FIy z87nZ>HY?%*Y=Po6mO0wPMj%6(V@dr6zq?Tj6{d=#jC8%)V2Au6X!6_$nqo-ord3x$ z$1i?G-j0@ct|?U>5vFh}o7}IXRgeD^piBfH%CgqPA!qvDIGpQQ1VYf z7cNVR`mnllX|NKd;2|Td#&nxYB{D2>_1z~}3GNR@Tp6Ct@-X$%3+GEyLs}fw2?d-i zX1m(*YG-HOSA(|I6Q%35^$!oD*>Qt`(4UEx0KiLhE0;IPYTNaVDo z2rxik^ZGWnzsYTDk=JX_i~=7^*E-mCzdO7CQ=S8l-zsM%!_)w1kB#gjE&D^2A3ux9#I;r~(SiVO9nWPv69fgt~<(pg0!X7#tSRwPIgbd#}|-$*Rw z-2|>7^>kI7FaZ_`A(I10jU#Qu67>^lgAWeQD|R$xTWf3ds_cyo?hHDGUeErJIzs^1 zC{KRmWFNJ5JL(x1xc$vW0mO#zY?yodF%igZndF)s#j}9$$ylI2)$Unpd5oC;c&Tf?nZ3oh$|4WCd-zm12wja0#DO0VJ?`-{18{wQ|!)q>0n3A5g9ki|L$O~`V2 z-!efiF``~eZjV8&yJr%Q_ON4Up)2=L-|9^cShHkeSu`v5#ij7-dPL%Y9~xE=!~F0a3p zxUhi|*O#>aDsh#i8t0@-gxZj+umH|AHyyZ4nUms4o~eE{o}Q!}zhl4SP3)%u`Q50S zUN_19EtAnpxwRn^QDBAvx#pQKZVJ1#Xo^8EKpGYXgu4lUlZI`8G}s2M0Z6e~>w>7x zu2x=@xc!&Dd6PA-r@gd5Y=?N*v`s=JB;ugtIfbDQtJe851s6*2^psUhXOJ0@mtu&E zE-%18z;9>bv>249JZf4 zciZw_$COq`?e{DU8Eca67fupb!iQ38w=q65s_z)S~~5&W&{rT%BttM<*Ii%7PV zOQN!S1f?1#Lns4NZ_{4BZN9^~BiPih#;}mBCX!V?Fs-qYATnX$J0Pb3%4Q4}gl}}B z+h2MzSz}@&jc@u!+2jpK1PHCrsu~!;k0u_c_X2!tO||a4BH4{n-)I5j$pa-tzx-K8 zH^1Z?xzvWfXNKJ7I!4}`l^jol?06M3AM1vf!`pl4$u%`C2cG| zI@bXJ1>iwxyaRVxsw{d~cjhSsJ{ef{l+4x}?qdwVOm&;6`QGZH>5@$y9VBw2ZQ|V4 z09qoP*Gh$p3suk(Lvg`DM4%T;n8+V*S~*aj0+c9D9lE4sk!B|VD31RG3XGXtrL{Id zd_pMaWbQI?O&SiIbk8_h=XdKa=6`-sMB!`*7akz^-4KY!t=A&i&LB>8M#hVzfVpa3|~*w@W`%C;}};|I`J zy0Hg3F8J?XE0RNL3$V0S)J!$=6**KoQWH2Qe4Q2`?_Wt=xZMFC^LSIR@c<#|Yx31Cb<+`6@9#6r2Y-1iTPye1ok0zv zI)8yK&@F#~c8UisJX=|i{>kfCkIo7aoZY^z7<NXn3V{SJB@nVDSe(Udy=%v zGK;C>d}8Ckpj^~y&1wTo!xLo63y}CX-+J-tGCi>DeqPG_0#!cW{%L76nSpo@j7@yw zXLo(Qn{k!4i}abbiD6?ga~Pjah2H zy@}#X`j(Kg5dp%Zzm;?bnwI;wZsecc?pHt%mfJYH=KTel6anh;?C8THZQla2lmbSqC@P7VHT=+W6v)2EMZ7}$cJG(@i*r^Uk zS4%uDRBh^E=NyUF@44bcrYx<6H<*a0*+x_6|7B+_2_EXhg$9HYB?hHRLn>NAiNCn1 zh8#HyJh(*(s({%BX2%w=dG-R0Y~_ZCzKGKp8hgY(oc6Q05kv2cc=cQpp^aelmgKSn zPUw8_?97(-CFOIjO_Ud+T{WwE?ZWonsh~z2YGyX0Cizf$rEM;zvl5ljOJ`VG*ypxS zp;KV6u(Z(QG~_p$6%-8J*2)MQOlscV-kiz~LHgu4l} zQ$NX3)Hcbrai6WfN)2}-MHgQXv)88V_$>UY08DTpVJ~ia{Py(FNH0b&Ns@0UBu5P` z-en$RQMR8nHq!H0ATaimHA{&fhZ5xW`Ur}Py7M^fF>6&lk|d;AoB56FbN?^Qu(oR2 zR}MBK%Rz=uCVB$2P?JZX8mpPq@8#hcH9)-br$w!|rxVSH@|o_Dg#Va^`$rXM~cyi7W3U7 z;$yF+_98_86nLa(+xtTMoibXlHswj*VJUKb&91AQ>XIM990C#Wh68Pnk8(JMb18eW zzxZw}b_q=!vN?<;ZgNvDLAk+@53p+CKVvDU+p%GVNsHwbYL4{W!D3Rjy~*ZkWsODOLCb{pPpmUv;2Qq|?eev}mH`?4^~13CaU4H_j%eyHAgabtiE4y!xQxT;l3%d0l1B z>eTh(u&uY%_v(G^F`TWNnS`_HDi17Yw|Y#WB9uTTJHE`V zO?#&e{?^c`Lg8q#81p2P+^PMN?ZU)=M_MPL4$%l>%rFof+F=r%J2bk@D?G-;`Y?mvUy75_Vc-C>6N zFOa3U+_@2@*HrtZ<}Xm3?D}=9GxW5K8+7yZO}?f`o1>kO1=eaiCjWW!5199#%PljX zqtB#6G*L|}a&PF=o&05*KUY_K#C3I8d-;Zhqi=?k=)J>m+pLg5NrF!0{(LXYwqav! z$92Czbl;eREQeWs5MfJD{C6rN5%05v_cF-Q-GRVeU zJiQ)Czm57r-JXWiyGfY>aCl$O3mV9JEhym*g*fXX)}`~w{?&t2fFNX zE$WxVtPCuX`Af$h3N*_{N_diVlwWKtwC+e{i8F?e=jO4}Ubg}1RmJAW^;>n& zspEf|3;qxPPLi1xc;-$W&@&p>E0(6RP8#b(lVx{~Wz>givVC)CB#^?2t+ZVbN?gZU z%(ysR7q%@Y`~oS8g8sS@`@f>g6pRbK?Z2&inrabpEn%nQ$- zf$0NkDU}nDNNg>k)OzHHGvf(=8E@>t)xK^^X7BiY_1YAE4#8g_+YYhGN@%e|iYP+% z;YUn-yn9bnX|R28E-8v=R1S>R0!Yy)8fDvY7Jq>>1Kd#zMjxOZN=ShNr33CsJyu%pP}zDRS>p2aS>My1W-9 zd%U24`EsF;p1Y2=<3;9xjo1Xl?q606c&3wyJN5Wsf<_bU7f1^j5>09`yLca0 z?e>cj9Lyl0Bf$<;%#?4?OA3oI=<0)FL7ZzUs(0?`ZW1=vwE5S|5bu*SC(cY%SRQm| zr??FncEAAu_-nZ^=VrfkIr9DUykICLa+?2G_d6{n*FX~T%jRJa%TV)A)v~W>&v-FN z%u!<(qTbBwVSzQ;n5Y=NsS^4wuh>00&wPj1fW=;80BIFLM0ak)!V5D_NuXu~I`Sh^ zdeKUNNK6ib$YBTDd3hDQ9|YGYpU}S@Offsw0G9@R^=1Sapy^|Qh>L>m|BDk*B>%=J zl)s@j#QGP=ih%iwqrP0FTyj)y!vPs{^@bM;#Lwozv&5?c2+;+|;(-`cE-469MmZ+{Lw$;UXkDAJ~w7bkEZs{wxX)nQx${u?weT8r3 z>?H4Js=e=Q_)nyBRHAYVc2DLn#Yf|{Q7SG1+4eS5uAEWX$@)n+Xh}3{p0Funo8x#r zoFnAV!V6M}&a~V!%Wz9-xo3DaM2g)^9M@CUnGOi$`wQlskEwh%<#4El=CC-|EdsjEoILW&HxN^5+8wBB7@*j9f_0=Kw{4 z`5d6f(faWvC5}8aOzKA`6duz#?Zi~M>f*>_ zR%lI6=ke&Q*d{LEBD0J8CHy{#m1VK%Ow=XqYKx`DC|I%F*daB&Za9gmUP4GwW}XG> zjZhPIY?-oWaAb_><@{CED}rVC+m*I%Z8G~?(kO}5#g8*|4`M67eYY^}=}w+ei)Igk zV10z8%m*iklfHBY%W!788X}%PCLUy@+a7hY#58iL%Y^~P9yHwj zHGdE|n2p=yW+VLx3WPFUYg^kq6EnbzkqizuRgP06R412QkHpefGRHCi9243Z@KJJS zQde2c5+(j$r^UV5@$AVV%)R6^mtLL<92<0I9a2Lbsq~_(o+g@ke#m*L}lf8{?3{! z>@{bnW#lr^cW9_o{##*Dwc}ja-t_mr%PQfnfcTGr)mvSp^bWQo^Y3s^GH?OZQ|Vzo zV{pCMfy(9g5HXi;AiBVw?EM8AH+y~R2>M6AhJWWXPap~qo>=|*t{^~0xNB|zEIg#d z^@EF;^Pj*H82?;=0SuXN>AP6}1(G-YSX9wP7`(5ea9y{4h5QA|tLcarqGuDQ^Y6=CIVLxxZ&#@1JYBX=yjD_-WJm}ok;mDP>srP}y4gWat4zUIH+^Z)AYw6fjlioLKq zvqXt_9+zveE9jRxzP8j$vmHt<{!Z<_D=4PrX;-0RdR7NUoGyS9u+ph>?v5^RU;i*Pl_ zHB)MYb;6exaSc@x`b3j>g2{T!q;Bx#g8=>6vaJD?ZZ|iDKGr6D5LdYb!mC#x z1WM{L^r-7G4)WQDvc1OJtl!|nTlaFqh-%`C)VS$4d4`9X;cs*er{8*n>+d8dW9?@ZR8T)$8{CEh4p{U$Nw=6gwI?(g0^v9hdMd>R%zt+&&+&icu}IG*>^Hi4_G-@Nbg zpd7#3K_Dpkb3&Ae+3%7YReNFX-M21r<{EuXZiZ4^OE6yVlce#AMTYreq6m8L$NC>IG$`WhBY$Bu&OzgHk44o zO(Wdr!JwrdO7o;i+q$FtYdMPhfsjTXg!V*79Abga5VLAa%d7~yGRm}iEQi!s5$G(B z(w(2b)EUdLtgX47U6*vU%NIA}Mvlvt`1C}u+jYJPhqlKRq7U@?EeFeDO!>2WpCRV# z8>M*E_i{I$dEzm+XKtn~1{Lfke8FJ%j@mvn%kwrfLfFQ11NKe(vP6}rKzGKx1V7K| zm+ky_(6U1h%tqMen>L2yi)70Xn-Yxf zju*t;3N-!>;~9i#Ak7{klA^K}ouo9+_tV*974mm57tDtE)$Z%8_`(w#~;xzlbq&h|Z`T8-q0%s0_y`(;XO8&B?<9 zDc{$PcKe2P$h{Q@=8!PYq0ajhC!3{`g-0+<97p}q_wMm6^v;>b>c@59%&r81sAQh~ z%an5Ze=UprV@g@Jtvi0Y_;_~CaXRkte0<6O*WPspHI;ASi*4xt+s5Rl##(F80( zY!O+F^i>u_5l~rrmVlx_L?WQFh!PQyP6R_0K@1%Q1R)BKB_Se3vLw_9Devyi?2Ki7 zyU+LU`y(^Sy)((&GbiVKzweaKClj`N(;h4m;vB)uplUe5^Ywmp0c%6ptAo$|I~eX#@8B7EaQ}Or_L- zqS5`K{#G5ZQFrMRs(U>hPHrieR@vdNiWn@1v_HYxf{`W*&C7l~L&HW>Da2(JkoJ2s zB|G9K07`;az^ySmtxuK=fAryRgWF$Cm~VyS;qzKExaD>M;J7KQPXLq=|4703@fdwv z$JHVMFaqbP-yGS+ug0yk^DpWPKSkK^yWyfp|3LJvA%uZHp=dM$TU+D*n_tbSLcHZ3 zy&K(i>w$%iNs%8Xhnb)n*n4RyN4kXZwqGUX)PgJW(@-Tr)gv~MJI!q3N7~Gjk4-2D zf#cxtH$Jq4*@g2(V_0L>{PaqFg;qeOZ`!-_uyAqb3BS$CTR&h_G+~_pA-e8iMZ>M3 z=*JQ7(zi8FF5h?Z`_2OCnBz?_YjN8O4bzINSf%uX9Lw z+*@?503c<-d4_nAxh1@9ut**Od8+q{w_Fwcs+TW^vi zNBQIokxaK=ZB=e*O%Mz$gbZq3@T*6pmuld11fCGc9Y#<=WEhKs;{1a*G}8nCew)u3 zm`#R6xUi#Pvz4X3VV%xSana)?Qt=xzffUBmMiEv51-)UKzn*21Aw{@wP^G9+{I=A2Z--8Crcm~*PvmTvH_-S!4RR8)f#y=8gJ1v)8Y}#M%SSIFU zh1YaJ(fe{f0*hhkwa$rciANX*7)w=!YW+(h%Y9V$m2v*lak+ru1(x z9mL7-wYg5LQ&$%QO({)K64#eL!Z|*AW?SIWosi)}Y7#0{k0XSOyt8n3faw(5Nvs+u z5I)4;dInBLUR~^+HDu&C(qC8}iqyLO&d~e<)#YFqi<}x+x%a5EcIu$4lZk6rq2<)f z0#OV{q6&an+YkY8zyJ5d`3c0j=a~EP8r`qG$6VwOAcdJA(j;BlHuo%P3G>qX`*|Jw zwET0~7l8)Pvlv}-J26lTDO-pp=83aCT!Y^#04j@kH)1x<#K0P;y@}QuXV#cCa(O6a z?cuAcI{vN%hg&BvIJE)m8tWU$gu|7!4>L1;>aLBSOb7sIMVcuI*^+MeW04jD;71}y z?;`(slTsBjsRm&Y7$zIIBb#{kR@-Pi2AcPT68yvS;@S=O*2M&wiN@S^-Xj#U02wE8 z<*o-bAge>Y2pZFDY}Fy$vy8O*Kmf#`c~Gh%1NlKR!jw;u6aaZjp}$AN;^39H0-)~& zfK|%l_j{`%%p(d~iDKIgSxv4ilOkW7aV%SdGkW6m52em?4iOCL3td~>cV?e7_YK1t zABqX*RmaE#5Fy)7vy>RWl~IHD&DLBKwo_U0FiP8kN!R%; z2zSEV(G3#P!B?1RlEu1+g8Nsop}u+vXP0n#Yo-prpn}c@<{rUz*MN1nyq*^s$+mk_ zogI7M$+K}xtr$bBF2|HHmf|+oayO>i<8giJPsUQ6OrJ-Olrpp=l=pqGa573#Tfd1% z6S)GMPhWNQCL*gM1;FLZH3zI1kEq3C=G`VY8V@q~vH`id$}opfU7R_hmJ2xEpK220 zTb%Zx-zq}3G|704jd;3tjz>o)m1XxtFvw|6gNJvf6tC<}w5fY$E&^{rH1E&{1rHtX za6w)#)euaGBn)WE)+p=9UW)VwIkNQX5{?JO}7iJ@Ugl58SRZ0Y>m4QlI%QQ51+1l?M@NtQBZ;o1sj@;G)JnbGgQhp zH~E3>sc8SRLfz2^sK9%ZM~sFxdMI1kW?_0Sk_V1bG1 z-4|$JpM7+w%pm_2Y;DXSUm-80MWf_RqM^4Ae^k}9rDMAuE4&3M7up@(kkuY#A*p>J zPJ7^Nx1%MtvZE}-3a=FWi>FL->IOD}ROS7eLPylCA!}yYWu9klr=$f8zD9Ay>V`n@r$h^_@2KcFY7H@@p0#=EJLjRs zwpV;zt{g`#_yi57#GxMQ0~;Ko3mJn;3QFm%bys_s;P|ywiux^EleLO8$;g`7bd~@> z^>J;-N%$dE`Z z?CP@c98Nfe*79)BwXx zrB?#%x-qhz!v|3PY+GoP8U5zX8|>8U;tPa0Tt)jOghT*~Q@zqMypj@HhS0loD9fv1 zi~01+tp?AAz;<>&m#VDvG| zsDqi_3;aa7@f|OnoQT-gy|!DA(6Arumho5?04L8sKCou!3dQ9r$29Xv6Y7&OsPLe7 zjih_ZVB{A6tJCn`2{3?N1)sxHl4H4{8z-FR88z>TIm-Gq^XI|?J_~xaF;xR`4LgWiPp*I*@%(lI+~6_Cs=sk^QBM-~_I}F!`g> z;;tZq`j1Z6S~F{H)zf}1{xuiQ|UZQhpK~iI|q!dO02JUovhlEw57(SLKcM%@f7{0nylhy zg~7QJkh*7S8T#%67d#JomN6k|4C5p8}C7czYZ==1!SwU zR+5-Lm2BP2fZ`E~=1uL#m-Y5sUzhW&R?`fMilU|dTD!z?Va;qW1U--uB6IK#KudGv zR)VBTzds2)&wcJpxG&rYSUh4O4%xW0pi5jcKV6Mf*WumsV^b4JShR6$e^<{>Lsc-L zA@p}z?uz=4spk!v=iT4ErIvj8MPK@3lr<#(@BarvEDC>jnK1teSZ>{=I5l|l!F2Vi z2W-d&cK!7m*VeZbC}8A&N$u!igUg4-0L7BOJ*jNm!yv^H#rV2lix<0qz|}5zKird; zV{BqFzOX^7A{6B^Utc2E>|rL7Cgw!)0EFV6Dv-a5HvU8&kbkfP`fKIV|6l)>_BAkh U{li6(|F`eA+4ryPCM