From 3bebda69f161a43987c73b9c46445caccb38bd78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Perceval=20Wajsb=C3=BCrt?= Date: Tue, 2 Sep 2025 09:10:30 +0200 Subject: [PATCH 01/18] feat: new attention span_pooling mode --- changelog.md | 8 + docs/tutorials/index.md | 6 +- edsnlp/core/torch_component.py | 40 ++- .../embeddings/span_pooler/span_pooler.py | 240 ++++++++++----- .../trainable/embeddings/text_cnn/text_cnn.py | 6 +- .../embeddings/transformer/transformer.py | 105 +++++-- edsnlp/training/trainer.py | 4 +- edsnlp/tune.py | 2 +- pyproject.toml | 2 +- tests/pipelines/trainable/dummy_embeddings.py | 123 ++++++++ tests/pipelines/trainable/test_span_pooler.py | 277 ++++++++++++++++++ .../trainable/test_span_qualifier.py | 8 +- tests/pipelines/trainable/test_transformer.py | 40 ++- tests/training/ner_qlf_same_bert_config.yml | 1 + 14 files changed, 742 insertions(+), 120 deletions(-) create mode 100644 tests/pipelines/trainable/dummy_embeddings.py create mode 100644 tests/pipelines/trainable/test_span_pooler.py diff --git a/changelog.md b/changelog.md index 92b294b1ae..8650169a6e 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## Unreleased + +### Added + +- New `attention` pooling mode in `eds.span_pooler` +- New `word_pooling_mode=False` in `eds.transformer` to allow returning the worpiece embeddings directly, instead of the mean-pooled word embeddings. At the moment, this only works with `eds.span_pooler` which can pool over wordpieces or words seamlessly. + ## v0.18.0 (2025-09-02) 📢 EDS-NLP will drop support for Python 3.7, 3.8 and 3.9 support in the next major release (v0.19.0), in October 2025. Please upgrade to Python 3.10 or later. @@ -13,6 +20,7 @@ - New `eds.explode` pipe that splits one document into multiple documents, one per span yielded by its `span_getter` parameter, each new document containing exactly that single span. - New `Training a span classifier` tutorial, and reorganized deep-learning docs - `ScheduledOptimizer` now warns when a parameter selector does not match any parameter. +- New `attention` pooling mode in `eds.span_pooler` ### Fixed diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md index 9f563e8fce..9d20e11042 100644 --- a/docs/tutorials/index.md +++ b/docs/tutorials/index.md @@ -4,6 +4,7 @@ We provide step-by-step guides to get you started. We cover the following use-ca ### Base tutorials + === card {: href=/tutorials/spacy101 } @@ -85,6 +86,8 @@ We provide step-by-step guides to get you started. We cover the following use-ca --- Quickly visualize the results of your pipeline as annotations or tables. + + ### Deep learning tutorials We also provide tutorials on how to train deep-learning models with EDS-NLP. These tutorials cover the training API, hyperparameter tuning, and more. @@ -123,8 +126,5 @@ We also provide tutorials on how to train deep-learning models with EDS-NLP. The --- Learn how to tune hyperparameters of a model with `edsnlp.tune`. - - - diff --git a/edsnlp/core/torch_component.py b/edsnlp/core/torch_component.py index e78b4fc6b6..0d50538a36 100644 --- a/edsnlp/core/torch_component.py +++ b/edsnlp/core/torch_component.py @@ -339,7 +339,14 @@ def compute_training_metrics( This is useful to compute averages when doing multi-gpu training or mini-batch accumulation since full denominators are not known during the forward pass. """ - return batch_output + return ( + { + **batch_output, + "loss": batch_output["loss"] / count, + } + if "loss" in batch_output + else batch_output + ) def module_forward(self, *args, **kwargs): # pragma: no cover """ @@ -348,6 +355,31 @@ def module_forward(self, *args, **kwargs): # pragma: no cover """ return torch.nn.Module.__call__(self, *args, **kwargs) + def preprocess_batch(self, docs: Sequence[Doc], supervision=False, **kwargs): + """ + Convenience method to preprocess a batch of documents. + Features corresponding to the same path are grouped together in a list, + under the same key. + + Parameters + ---------- + docs: Sequence[Doc] + Batch of documents + supervision: bool + Whether to extract supervision features or not + + Returns + ------- + Dict[str, Sequence[Any]] + The batch of features + """ + batch = [ + (self.preprocess_supervised(d) if supervision else self.preprocess(d)) + for d in docs + ] + batch = decompress_dict(list(batch_compress_dict(batch))) + return batch + def prepare_batch( self, docs: Sequence[Doc], @@ -372,11 +404,7 @@ def prepare_batch( ------- Dict[str, Sequence[Any]] """ - batch = [ - (self.preprocess_supervised(doc) if supervision else self.preprocess(doc)) - for doc in docs - ] - batch = decompress_dict(list(batch_compress_dict(batch))) + batch = self.preprocess_batch(docs, supervision=supervision) batch = self.collate(batch) batch = self.batch_to_device(batch, device=device) return batch diff --git a/edsnlp/pipes/trainable/embeddings/span_pooler/span_pooler.py b/edsnlp/pipes/trainable/embeddings/span_pooler/span_pooler.py index 5e58cd9bb6..3032c574f8 100644 --- a/edsnlp/pipes/trainable/embeddings/span_pooler/span_pooler.py +++ b/edsnlp/pipes/trainable/embeddings/span_pooler/span_pooler.py @@ -22,21 +22,34 @@ "SpanPoolerBatchInput", { "embedding": BatchInput, - "begins": ft.FoldedTensor, - "ends": ft.FoldedTensor, - "sequence_idx": torch.Tensor, - "stats": TypedDict("SpanPoolerBatchStats", {"spans": int}), + "span_begins": ft.FoldedTensor, + "span_ends": ft.FoldedTensor, + "span_contexts": ft.FoldedTensor, + "item_indices": torch.LongTensor, + "span_offsets": torch.LongTensor, + "span_indices": torch.LongTensor, + "stats": Dict[str, int], }, ) """ -embeds: torch.FloatTensor - Token embeddings to predict the tags from -begins: torch.LongTensor +Attributes +---------- +embedding: BatchInput + The input batch for the word embedding component +span_begins: ft.FoldedTensor Begin offsets of the spans -ends: torch.LongTensor +span_ends: ft.FoldedTensor End offsets of the spans -sequence_idx: torch.LongTensor - Sequence (cf Embedding spans) index of the spans +span_contexts: ft.FoldedTensor + Sequence/context index of the spans +item_indices: torch.LongTensor + Indices of the span's tokens in the tokens embedding output +span_offsets: torch.LongTensor + Offsets of the spans in the flattened span tokens +span_indices: torch.LongTensor + Span index of each token in the flattened span tokens +stats: Dict[str, int] + Statistics about the batch, e.g. number of spans """ SpanPoolerBatchOutput = TypedDict( @@ -45,6 +58,12 @@ "embeddings": ft.FoldedTensor, }, ) +""" +Attributes +---------- +embeddings: ft.FoldedTensor + The output span embeddings, with foldable dimensions ("sample", "span") +""" class SpanPooler(SpanEmbeddingComponent, BaseComponent): @@ -61,8 +80,14 @@ class SpanPooler(SpanEmbeddingComponent, BaseComponent): Name of the component embedding : WordEmbeddingComponent The word embedding component - pooling_mode: Literal["max", "sum", "mean"] - How word embeddings are aggregated into a single embedding per span. + pooling_mode: Literal["max", "sum", "mean", "attention"] + How word embeddings are aggregated into a single embedding per span: + + - "max": max pooling + - "sum": sum pooling + - "mean": mean pooling + - "attention": attention pooling, where attention scores are computed using a + linear layer followed by a softmax over the tokens in the span. hidden_size : Optional[int] The size of the hidden layer. If None, no projection is done and the output of the span pooler is used directly. @@ -74,7 +99,9 @@ def __init__( name: str = "span_pooler", *, embedding: WordEmbeddingComponent, - pooling_mode: Literal["max", "sum", "mean"] = "mean", + pooling_mode: Literal["max", "sum", "mean", "attention"] = "mean", + activation: Optional[Literal["relu", "gelu", "silu"]] = None, + norm: Optional[Literal["layernorm", "batchnorm"]] = None, hidden_size: Optional[int] = None, span_getter: Any = None, ): @@ -99,11 +126,35 @@ def __init__( self.pooling_mode = pooling_mode self.span_getter = span_getter self.embedding = embedding - self.projector = ( - torch.nn.Linear(self.embedding.output_size, hidden_size) - if hidden_size is not None - else torch.nn.Identity() - ) + self.activation = activation + self.projector = torch.nn.Sequential() + if hidden_size is not None: + self.projector.append( + torch.nn.Linear(self.embedding.output_size, hidden_size) + ) + if activation is not None: + self.projector.append( + { + "relu": torch.nn.ReLU, + "gelu": torch.nn.GELU, + "silu": torch.nn.SiLU, + }[activation]() + ) + if norm is not None: + self.projector.append( + { + "layernorm": torch.nn.LayerNorm, + "batchnorm": torch.nn.BatchNorm1d, + }[norm]( + hidden_size + if hidden_size is not None + else self.embedding.output_size + ) + ) + if self.pooling_mode in {"attention"}: + self.attention_scorer = torch.nn.Linear( + self.embedding.output_size, 1, bias=False + ) def feed_forward(self, span_embeds: torch.Tensor) -> torch.Tensor: return self.projector(span_embeds) @@ -112,18 +163,23 @@ def preprocess( self, doc: Doc, *, - spans: Optional[Sequence[Span]] = None, + spans: Optional[Sequence[Span]], contexts: Optional[Sequence[Span]] = None, pre_aligned: bool = False, **kwargs, ) -> Dict[str, Any]: - contexts = contexts if contexts is not None else [doc[:]] + if contexts is None: + contexts = [doc[:]] * len(spans) + pre_aligned = True - sequence_idx = [] + context_indices = [] begins = [] ends = [] - contexts_to_idx = {span: i for i, span in enumerate(contexts)} + contexts_to_idx = {} + for ctx in contexts: + if ctx not in contexts_to_idx: + contexts_to_idx[ctx] = len(contexts_to_idx) assert not pre_aligned or len(spans) == len(contexts), ( "When `pre_aligned` is True, the number of spans and contexts must be the " "same." @@ -140,52 +196,96 @@ def preprocess( f"span: {[s.text for s in ctx]}" ) start = ctx[0].start - sequence_idx.append(contexts_to_idx[ctx[0]]) + context_indices.append(contexts_to_idx[ctx[0]]) begins.append(span.start - start) ends.append(span.end - start) return { "begins": begins, "ends": ends, - "sequence_idx": sequence_idx, + "span_to_ctx_idx": context_indices, "num_sequences": len(contexts), - "embedding": self.embedding.preprocess(doc, contexts=contexts, **kwargs), + "embedding": self.embedding.preprocess( + doc, contexts=list(contexts_to_idx), **kwargs + ), "stats": {"spans": len(begins)}, } def collate(self, batch: Dict[str, Sequence[Any]]) -> SpanPoolerBatchInput: - sequence_idx = [] - offset = 0 - for indices, seq_length in zip(batch["sequence_idx"], batch["num_sequences"]): - sequence_idx.extend([offset + idx for idx in indices]) - offset += seq_length + embedding_batch = self.embedding.collate(batch["embedding"]) + embed_structure = embedding_batch["out_structure"] + ft_kw = dict( + data_dims=("span",), + full_names=("sample", "span"), + dtype=torch.long, + ) + begins = ft.as_folded_tensor(batch["begins"], **ft_kw) + ends = ft.as_folded_tensor(batch["ends"], **ft_kw) + span_to_ctx_idx = [] + total_num_ctx = 0 + for i, (ctx_indices, num_ctx) in enumerate( + zip(batch["span_to_ctx_idx"], embed_structure["context"]) + ): + span_to_ctx_idx.append([idx + total_num_ctx for idx in ctx_indices]) + total_num_ctx += num_ctx + flat_span_to_ctx_idx = ft.as_folded_tensor(span_to_ctx_idx, **ft_kw) + item_indices, span_offsets, span_indices = embed_structure.make_indices_ranges( + begins=(flat_span_to_ctx_idx, begins), + ends=(flat_span_to_ctx_idx, ends), + indice_dims=("context", "word"), + ) collated: SpanPoolerBatchInput = { - "embedding": self.embedding.collate(batch["embedding"]), - "begins": ft.as_folded_tensor( - batch["begins"], - data_dims=("span",), - full_names=("sample", "span"), - dtype=torch.long, - ), - "ends": ft.as_folded_tensor( - batch["ends"], - data_dims=("span",), - full_names=("sample", "span"), - dtype=torch.long, - ), - "sequence_idx": torch.as_tensor(sequence_idx), + "embedding": embedding_batch, + "span_begins": begins, + "span_ends": ends, + "span_contexts": flat_span_to_ctx_idx, + "item_indices": item_indices, + "span_offsets": begins.with_data(span_offsets), + "span_indices": span_indices, "stats": {"spans": sum(batch["stats"]["spans"])}, } return collated + def _pool_spans(self, embeds, span_indices, span_offsets, item_indices=None): + dev = span_offsets.device + dim = embeds.size(-1) + embeds = embeds.as_tensor().view(-1, dim) + N = span_offsets.numel() # number of spans + + if self.pooling_mode == "attention": + if item_indices is not None: + embeds = embeds[item_indices] + weights = self.attention_scorer(embeds) + # compute max for softmax stability + dtype = weights.dtype + max_weights = torch.full((N, 1), float("-inf"), device=dev, dtype=dtype) + max_weights.index_reduce_(0, span_indices, weights, reduce="amax") + # softmax numerator + exp_scores = torch.exp(weights - max_weights[span_indices]) + # softmax denominator + denom = torch.zeros((N, 1), device=dev, dtype=exp_scores.dtype) + denom.index_add_(0, span_indices, exp_scores) + # softmax output = embeds * weight num / weight denom + weighted_embeds = embeds * exp_scores / denom[span_indices] + span_embeds = torch.zeros((N, dim), device=dev, dtype=embeds.dtype) + span_embeds.index_add_(0, span_indices, weighted_embeds) + span_embeds = span_offsets.with_data(span_embeds) + else: + span_embeds = torch.nn.functional.embedding_bag( # type: ignore + input=torch.arange(len(embeds), device=dev) + if item_indices is None + else item_indices, + weight=embeds, + offsets=span_offsets, + mode=self.pooling_mode, + ) + span_embeds = self.feed_forward(span_embeds) + return span_embeds + # noinspection SpellCheckingInspection def forward(self, batch: SpanPoolerBatchInput) -> SpanPoolerBatchOutput: """ - Apply the span classifier module to the document embeddings and given spans to: - - compute the loss - - and/or predict the labels of spans - If labels are predicted, they are assigned to the `additional_outputs` - dictionary. + Forward pass of the component, returns span embeddings. Parameters ---------- @@ -194,38 +294,26 @@ def forward(self, batch: SpanPoolerBatchInput) -> SpanPoolerBatchOutput: Returns ------- - BatchOutput + SpanPoolerBatchOutput """ - device = next(self.parameters()).device - if len(batch["begins"]) == 0: - span_embeds = torch.empty(0, self.output_size, device=device) + if len(batch["span_begins"]) == 0: return { - "embeddings": batch["begins"].with_data(span_embeds), + "embeddings": batch["span_begins"].with_data( + torch.empty( + 0, + self.output_size, + device=batch["item_indices"].device, + ) + ), } embeds = self.embedding(batch["embedding"])["embeddings"] - _, n_words, dim = embeds.shape - device = embeds.device - - flat_begins = n_words * batch["sequence_idx"] + batch["begins"].as_tensor() - flat_ends = n_words * batch["sequence_idx"] + batch["ends"].as_tensor() - flat_embeds = embeds.view(-1, dim) - flat_indices = torch.cat( - [ - torch.arange(b, e, device=device) - for b, e in zip(flat_begins.cpu().tolist(), flat_ends.cpu().tolist()) - ] - ).to(device) - offsets = (flat_ends - flat_begins).cumsum(0).roll(1) - offsets[0] = 0 - span_embeds = torch.nn.functional.embedding_bag( # type: ignore - input=flat_indices, - weight=flat_embeds, - offsets=offsets, - mode=self.pooling_mode, + span_embeds = self._pool_spans( + embeds, + span_indices=batch["span_indices"], + span_offsets=batch["span_offsets"], + item_indices=batch["item_indices"], ) - span_embeds = self.feed_forward(span_embeds) - return { - "embeddings": batch["begins"].with_data(span_embeds), + "embeddings": batch["span_begins"].with_data(span_embeds), } diff --git a/edsnlp/pipes/trainable/embeddings/text_cnn/text_cnn.py b/edsnlp/pipes/trainable/embeddings/text_cnn/text_cnn.py index c1de49a562..92fff74928 100644 --- a/edsnlp/pipes/trainable/embeddings/text_cnn/text_cnn.py +++ b/edsnlp/pipes/trainable/embeddings/text_cnn/text_cnn.py @@ -1,4 +1,4 @@ -from typing import Optional, Sequence +from typing import Any, Dict, Optional, Sequence import torch from typing_extensions import Literal, TypedDict @@ -87,6 +87,10 @@ def __init__( normalize=normalize, ) + def collate(self, batch: Dict[str, Any]) -> BatchInput: + emb = self.embedding.collate(batch["embedding"]) + return {"embedding": emb, "out_structure": emb["out_structure"]} + def forward(self, batch: BatchInput) -> WordEmbeddingBatchOutput: """ Encode embeddings with a 1d convolutional network diff --git a/edsnlp/pipes/trainable/embeddings/transformer/transformer.py b/edsnlp/pipes/trainable/embeddings/transformer/transformer.py index 4d830858e8..74205369a8 100644 --- a/edsnlp/pipes/trainable/embeddings/transformer/transformer.py +++ b/edsnlp/pipes/trainable/embeddings/transformer/transformer.py @@ -34,6 +34,8 @@ }, ) """ +Attributes +---------- input_ids: FoldedTensor Tokenized input (prompt + text) to embed word_indices: torch.LongTensor @@ -51,6 +53,8 @@ }, ) """ +Attributes +---------- embeddings: FoldedTensor The embeddings of the words """ @@ -101,9 +105,23 @@ class Transformer(WordEmbeddingComponent[TransformerBatchInput]): stride=96, ), ) + + doc1 = nlp.make_doc("My name is Michael.") + doc2 = nlp.make_doc("And I am the best boss in the world.") + prep = nlp.pipes.transformer.preprocess_batch([doc1, doc2]) + batch = nlp.pipes.transformer.collate(prep) + res = nlp.pipes.transformer(batch) + + # Embeddings are flattened by default + print(res["embeddings"].shape) + # Out: torch.Size([15, 128]) + + # But they can be refolded to materialize the sample dimension + print(res["embeddings"].refold("sample", "word").shape) + # Out: torch.Size([2, 10, 128]) ``` - You can then compose this embedding with a task specific component such as + You can compose this embedding with a task specific component such as `eds.ner_crf`. Parameters @@ -131,9 +149,25 @@ class Transformer(WordEmbeddingComponent[TransformerBatchInput]): If "auto", the component will try to estimate the maximum number of tokens that can be processed by the model on the current device at a given time. - span_getter: Optional[SpanGetterArg] - Which spans of the document should be embedded. Defaults to the full document - if None. + new_tokens: Optional[List[Tuple[str, str]]] + A list of (pattern, replacement) tuples to add to the tokenizer. The pattern + should be a valid regular expression. The replacement should be a string. + + This can be used to add new tokens to the tokenizer that are not present in the + original vocabulary. For example, if you want to add a new token for new lines + you can use the following: + + ```python + new_tokens = [("\\n", "⏎")] + ``` + quantization: Optional[BitsAndBytesConfig] + Quantization configuration to use for the model. If None, no quantization + will be applied. This requires the `bitsandbytes` library to be installed. + word_pooling_mode: Literal["mean", False] + If "mean", the embeddings of the wordpieces corresponding to each word will be + averaged to produce a single embedding per word. If False, the embeddings of the + wordpieces will be returned as a FoldedTensor with an additional "token" + dimension. (default: "mean") """ def __init__( @@ -149,6 +183,7 @@ def __init__( span_getter: Optional[SpanGetterArg] = None, new_tokens: Optional[List[Tuple[str, str]]] = [], quantization: Optional[BitsAndBytesConfig] = None, + word_pooling_mode: Literal["mean", False] = "mean", **kwargs, ): super().__init__(nlp, name) @@ -167,6 +202,7 @@ def __init__( kwargs["quantization_config"] = quantization self.transformer = AutoModel.from_pretrained(model, **kwargs) + self.word_pooling_mode = word_pooling_mode try: self.tokenizer = AutoTokenizer.from_pretrained(model) except (HTTPException, ConnectionError): # pragma: no cover @@ -353,6 +389,7 @@ def collate(self, batch): empty_word_indices = [] overlap = self.window - stride word_offset = 0 + word_sizes = [] all_word_wp_offset = 0 for ( sample_text_input_ids, @@ -422,23 +459,38 @@ def collate(self, batch): ] ] word_indices.extend(word_wp_indices) + word_sizes.append(length) word_wp_offset += length word_offset += 1 all_word_wp_offset += word_wp_offset + word_offsets = ft.as_folded_tensor( + word_offsets, + data_dims=("word",), + full_names=("sample", "context", "word"), + dtype=torch.long, + ) + out_structure = ( + ft.FoldedTensorLayout( + [ + *word_offsets.lengths, + word_sizes, + ], + full_names=("sample", "context", "word", "token"), + data_dims=("token",), + ) + if not self.word_pooling_mode + else word_offsets.lengths + ) return { + "out_structure": out_structure, "input_ids": ft.as_folded_tensor( input_ids, data_dims=("context", "subword"), full_names=("context", "subword"), dtype=torch.long, ), - "word_offsets": ft.as_folded_tensor( - word_offsets, - data_dims=("word",), - full_names=("sample", "context", "word"), - dtype=torch.long, - ), + "word_offsets": word_offsets, "word_indices": torch.as_tensor(word_indices, dtype=torch.long), "empty_word_indices": torch.as_tensor(empty_word_indices, dtype=torch.long), "stats": { @@ -480,7 +532,7 @@ def forward(self, batch: TransformerBatchInput) -> TransformerBatchOutput: max_windows = max(1, max_tokens // input_ids.size(1)) total_windows = input_ids.size(0) try: - wordpiece_embeddings = [ + wp_embs = [ self.transformer.base_model( **{ k: None if v is None else v[offset : offset + max_windows] @@ -490,11 +542,7 @@ def forward(self, batch: TransformerBatchInput) -> TransformerBatchOutput: for offset in range(0, total_windows, max_windows) ] - wordpiece_embeddings = ( - torch.cat(wordpiece_embeddings, dim=0) - if len(wordpiece_embeddings) > 1 - else wordpiece_embeddings[0] - ) + wp_embs = torch.cat(wp_embs, dim=0) if len(wp_embs) > 1 else wp_embs[0] if auto_batch_size: # pragma: no cover batch_mem = torch.cuda.max_memory_allocated(device) @@ -520,26 +568,29 @@ def forward(self, batch: TransformerBatchInput) -> TransformerBatchOutput: # mask = batch["mask"].clone() # word_embeddings = torch.zeros( - # (mask.size(0), mask.size(1), wordpiece_embeddings.size(2)), + # (mask.size(0), mask.size(1), wp_embs.size(2)), # dtype=torch.float, # device=device, # ) # embeddings_plus_empty = torch.cat( # [ - # wordpiece_embeddings.view(-1, wordpiece_embeddings.size(2)), + # wp_embs.view(-1, wp_embs.size(2)), # self.empty_word_embedding, # ], # dim=0, # ) - word_embeddings = torch.nn.functional.embedding_bag( - input=batch["word_indices"], - weight=wordpiece_embeddings.reshape(-1, wordpiece_embeddings.size(2)), - offsets=batch["word_offsets"], - ) - word_embeddings[batch["empty_word_indices"]] = self.empty_word_embedding - return { - "embeddings": word_embeddings.refold("context", "word"), - } + if self.word_pooling_mode == "mean": + word_embeddings = torch.nn.functional.embedding_bag( + input=batch["word_indices"], + weight=wp_embs.reshape(-1, wp_embs.size(2)), + offsets=batch["word_offsets"], + ) + word_embeddings[batch["empty_word_indices"]] = self.empty_word_embedding + return {"embeddings": word_embeddings} + else: + wp_embs = wp_embs.reshape(-1, self.output_size)[batch["word_indices"]] + wp_embs = ft.as_folded_tensor(wp_embs, lengths=batch["out_structure"]) + return {"embeddings": wp_embs} @staticmethod def align_words_with_trf_tokens(doc, trf_char_indices): diff --git a/edsnlp/training/trainer.py b/edsnlp/training/trainer.py index 634e2296ab..c480e12b28 100644 --- a/edsnlp/training/trainer.py +++ b/edsnlp/training/trainer.py @@ -849,9 +849,7 @@ def train( for idx, (batch, batch_pipe_names) in enumerate( zip(batches, batches_pipe_names) ): - cache_ctx = ( - nlp.cache() if len(batch_pipe_names) > 1 else nullcontext() - ) + cache_ctx = nlp.cache() no_sync_ctx = ( accelerator.no_sync(trained_pipes) if idx < len(batches) - 1 diff --git a/edsnlp/tune.py b/edsnlp/tune.py index c7c46d6810..0f56e0194c 100644 --- a/edsnlp/tune.py +++ b/edsnlp/tune.py @@ -595,7 +595,7 @@ def compute_remaining_n_trials_possible( remaining_gpu_time, compute_time_per_trial(study, ema=True) ) return n_trials - except ValueError: + except ValueError: # pragma: no cover return 0 diff --git a/pyproject.toml b/pyproject.toml index 1ccd9df4bf..465d996e94 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,7 +69,7 @@ docs-no-ml = [ ml = [ "rich-logger>=0.3.1", "torch>=1.13.0; python_version>='3.9'", - "foldedtensor>=0.4.0", + "foldedtensor @ git+https://github.com/aphp/foldedtensor.git@indice-mapping#egg=foldedtensor", "safetensors>=0.3.0; python_version>='3.8'", "safetensors>=0.3.0,<0.5.0; python_version<'3.8'", "transformers>=4.0.0", diff --git a/tests/pipelines/trainable/dummy_embeddings.py b/tests/pipelines/trainable/dummy_embeddings.py new file mode 100644 index 0000000000..c1cd3d3fd1 --- /dev/null +++ b/tests/pipelines/trainable/dummy_embeddings.py @@ -0,0 +1,123 @@ +from typing import List, Optional + +import pytest + +pytest.importorskip("torch") + +import foldedtensor as ft +import torch +from typing_extensions import Literal + +from edsnlp import Pipeline +from edsnlp.pipes.trainable.embeddings.typing import WordEmbeddingComponent + + +class DummyEmbeddings(WordEmbeddingComponent[dict]): + """ + For each word, embedding = (word idx in sent) * [1, 1, ..., 1] (size = dim) + """ + + def __init__( + self, + nlp: Optional[Pipeline] = None, + name: str = "fixed_embeddings", + word_pooling_mode: Literal["mean", False] = "mean", + *, + dim: int, + ): + super().__init__(nlp, name) + self.output_size = int(dim) + self.word_pooling_mode = word_pooling_mode + + def preprocess(self, doc, *, contexts=None, prompts=()): + if contexts is None: + contexts = [doc[:]] + + inputs: List[List[List[int]]] = [] + total = 0 + + for ctx in contexts: + words = [] + for word in ctx: + subwords = [] + for subword in word.text[::4]: + subwords.append(total) + total += 1 + words.append(subwords) + inputs.append(words) + + return { + "inputs": inputs, # List[Context][Word] -> int + } + + def collate(self, batch): + # Flatten indices and keep per-(sample,context) lengths to refold later + inputs = ft.as_folded_tensor( + batch["inputs"], + data_dims=("sample", "token"), + full_names=("sample", "context", "word", "token"), + dtype=torch.long, + ) + item_indices = span_offsets = span_indices = None + if self.word_pooling_mode == "mean": + samples = torch.arange(max(inputs.lengths["sample"])) + words = torch.arange(max(inputs.lengths["word"])) + n_words = len(words) + n_samples = len(samples) + words = words[None, :].expand(n_samples, -1) + samples = samples[:, None].expand(-1, n_words) + words = words.masked_fill( + ~inputs.refold("sample", "word", "token").mask.any(-1), 0 + ) + item_indices, span_offsets, span_indices = ( + inputs.lengths.make_indices_ranges( + begins=(samples, words), + ends=(samples, words + 1), + indice_dims=( + "sample", + "word", + ), + return_tensors="pt", + ) + ) + span_offsets = ft.as_folded_tensor( + span_offsets, + data_dims=( + "sample", + "word", + ), + full_names=("sample", "context", "word"), + lengths=list(inputs.lengths)[0:-1], + ) + + return { + "out_structure": span_offsets.lengths + if self.word_pooling_mode == "mean" + else inputs.lengths, + "inputs": inputs, + "item_indices": item_indices, + "span_offsets": span_offsets, + "span_indices": span_indices, + } + + def forward(self, batch): + embeddings = ( + batch["inputs"] + .unsqueeze(-1) + .expand(-1, -1, self.output_size) + .to(torch.float32) + ) + print("shape before pool", embeddings.shape) + if self.word_pooling_mode == "mean": + embeddings = torch.nn.functional.embedding_bag( + embeddings.view(-1, self.output_size), + batch["item_indices"], + offsets=batch["span_offsets"].view(-1), + mode="max", + ) + embeddings = batch["span_offsets"].with_data( + embeddings.view(*batch["span_offsets"].shape, self.output_size) + ) + return { + "embeddings": embeddings, + } diff --git a/tests/pipelines/trainable/test_span_pooler.py b/tests/pipelines/trainable/test_span_pooler.py new file mode 100644 index 0000000000..932a974342 --- /dev/null +++ b/tests/pipelines/trainable/test_span_pooler.py @@ -0,0 +1,277 @@ +import confit.utils.random +import pytest +from dummy_embeddings import DummyEmbeddings + +import edsnlp +import edsnlp.pipes as eds +from edsnlp.data.converters import MarkupToDocConverter +from edsnlp.pipes.trainable.embeddings.span_pooler.span_pooler import SpanPooler +from edsnlp.utils.collections import batch_compress_dict, decompress_dict + +pytest.importorskip("torch.nn") + +import torch + + +@pytest.mark.parametrize( + "word_pooling_mode,shape", + [ + ("mean", (2, 5, 2)), + (False, (2, 6, 2)), + ], +) +def test_dummy_embeddings(word_pooling_mode, shape): + confit.utils.random.set_seed(42) + converter = MarkupToDocConverter() + doc1 = converter("This is a sentence.") + doc2 = converter("A shorter one.") + nlp = edsnlp.blank("eds") + nlp.add_pipe( + DummyEmbeddings(dim=2, word_pooling_mode=word_pooling_mode), name="embeddings" + ) + embedder: DummyEmbeddings = nlp.pipes.embeddings + + prep1 = embedder.preprocess(doc1) + prep2 = embedder.preprocess(doc2) + pivoted_prep = decompress_dict(list(batch_compress_dict([prep1, prep2]))) + batch = embedder.collate(pivoted_prep) + out = embedder.forward(batch)["embeddings"] + + assert out.shape == shape + + +@pytest.mark.parametrize("span_pooling_mode", ["max", "mean", "attention"]) +def test_span_pooler_on_words(span_pooling_mode): + confit.utils.random.set_seed(42) + converter = MarkupToDocConverter() + doc1 = converter("[This](ent) is [a sentence](ent). This is [small one](ent).") + doc2 = converter("An [even shorter one](ent) !") + nlp = edsnlp.blank("eds") + nlp.add_pipe( + eds.span_pooler( + embedding=DummyEmbeddings(dim=2), + pooling_mode=span_pooling_mode, + ) + ) + pooler: SpanPooler = nlp.pipes.span_pooler + + prep1 = pooler.preprocess(doc1, spans=doc1.ents) + prep2 = pooler.preprocess(doc2, spans=doc2.ents) + pivoted_prep = decompress_dict(list(batch_compress_dict([prep1, prep2]))) + batch = pooler.collate(pivoted_prep) + out = pooler.forward(batch)["embeddings"] + + assert out.shape == (4, 2) + out = out.refold("sample", "span") + + assert out.shape == (2, 3, 2) + if span_pooling_mode == "attention": + expected = [ + [[0.0000, 0.0000], [3.8102, 3.8102], [9.7554, 9.7554]], + [[3.6865, 3.6865], [0.0000, 0.0000], [0.0000, 0.0000]], + ] + elif span_pooling_mode == "mean": + expected = [ + [[0.0000, 0.0000], [3.0000, 3.0000], [9.5000, 9.5000]], + [[2.6667, 2.6667], [0.0000, 0.0000], [0.0000, 0.0000]], + ] + elif span_pooling_mode == "max": + expected = [ + [[0.0000, 0.0000], [4.0000, 4.0000], [10.0000, 10.0000]], + [[4.0000, 4.0000], [0.0000, 0.0000], [0.0000, 0.0000]], + ] + else: + raise ValueError(f"Unknown pooling mode: {span_pooling_mode}") + assert torch.allclose(out, torch.tensor(expected), atol=1e-4) + + +@pytest.mark.parametrize("span_pooling_mode", ["max", "mean", "attention"]) +def test_span_pooler_on_tokens(span_pooling_mode): + confit.utils.random.set_seed(42) + converter = MarkupToDocConverter() + doc1 = converter("[This](ent) is [a sentence](ent). This is [small one](ent).") + doc2 = converter("An [even shorter one](ent) !") + nlp = edsnlp.blank("eds") + nlp.add_pipe( + eds.span_pooler( + embedding=DummyEmbeddings(dim=2, word_pooling_mode=False), + pooling_mode=span_pooling_mode, + ) + ) + pooler: SpanPooler = nlp.pipes.span_pooler + + prep1 = pooler.preprocess(doc1, spans=doc1.ents) + prep2 = pooler.preprocess(doc2, spans=doc2.ents) + pivoted_prep = decompress_dict(list(batch_compress_dict([prep1, prep2]))) + batch = pooler.collate(pivoted_prep) + out = pooler.forward(batch)["embeddings"] + + assert out.shape == (4, 2) + out = out.refold("sample", "span") + + assert out.shape == (2, 3, 2) + if span_pooling_mode == "attention": + expected = [ + [[0.0000, 0.0000], [3.6265, 3.6265], [9.6265, 9.6265]], + [[3.5655, 3.5655], [0.0000, 0.0000], [0.0000, 0.0000]], + ] + elif span_pooling_mode == "mean": + expected = [ + [[0.0000, 0.0000], [3.0000, 3.0000], [9.0000, 9.0000]], + [[2.5000, 2.5000], [0.0000, 0.0000], [0.0000, 0.0000]], + ] + elif span_pooling_mode == "max": + expected = [ + [[0.0000, 0.0000], [4.0000, 4.0000], [10.0000, 10.0000]], + [[4.0000, 4.0000], [0.0000, 0.0000], [0.0000, 0.0000]], + ] + else: + raise ValueError(f"Unknown pooling mode: {span_pooling_mode}") + assert torch.allclose(out, torch.tensor(expected), atol=1e-4) + + +def test_span_pooler_on_flat_hf_tokens(): + confit.utils.random.set_seed(42) + converter = MarkupToDocConverter() + doc1 = converter("[This](ent) is [a sentence](ent). This is [small one](ent).") + doc2 = converter("An [even](ent) [shorter one](ent) !") + nlp = edsnlp.blank("eds") + nlp.add_pipe( + eds.span_pooler( + embedding=eds.transformer( + model="almanach/camembert-base", + word_pooling_mode=False, + ), + pooling_mode="mean", + ) + ) + pooler: SpanPooler = nlp.pipes.span_pooler + + prep1 = pooler.preprocess(doc1, spans=doc1.ents) + prep2 = pooler.preprocess(doc2, spans=doc2.ents) + pivoted_prep = decompress_dict(list(batch_compress_dict([prep1, prep2]))) + print( + nlp.pipes.span_pooler.embedding.tokenizer.convert_ids_to_tokens( + prep2["embedding"]["input_ids"][0] + ) + ) + # fmt: off + assert prep1["embedding"]["input_ids"] == [ + [ + 17526, # ▁This: 0 -> span 0 + 2856, # ▁is: 1 + 33, # ▁a: 2 -> span 1 + 22625, # ▁sentence: 3 -> span 1 + 9, # .: 4 + 17526, # ▁This: 5 + 2856, # ▁is: 6 + 52, # ▁s: 7 -> span 2 + 215, # m: 8 -> span 2 + 3645, # all: 9 -> span 2 + 91, # ▁on: 10 -> span 2 + 35, # e: 11 -> span 2 + 9, # .: 12 + ], + ] + # '▁An', '▁', 'even', '▁short', 'er', '▁on', 'e', '▁!' + assert prep2["embedding"]["input_ids"] == [ + [ + 2764, # ▁An: 13 + 21, # ▁: 14 + 15999, # even: 15 -> span 3 + 9161, # short: 16 -> span 4 + 108, # er: 17 -> span 4 + 91, # ▁on: 18 -> span 4 + 35, # e: 19 -> span 4 + 83, # ▁!: 20 + ] + ] + # fmt: on + batch = pooler.collate(pivoted_prep) + out = pooler.forward(batch)["embeddings"] + + word_embeddings = pooler.embedding(batch["embedding"])["embeddings"] + assert word_embeddings.shape == (21, 768) + + assert out.shape == (5, 768) + + # item_indices: [0, 2, 3, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19] + # - ---- --------------- ------ -------------- + # span_offsets: [0, 1, 3, 8, 10] + # span_indices: [0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4] + + assert torch.allclose(out[0], word_embeddings[0]) + assert torch.allclose(out[1], word_embeddings[2:4].mean(0)) + assert torch.allclose(out[2], word_embeddings[7:12].mean(0)) + assert torch.allclose(out[3], word_embeddings[14:16].mean(0)) + assert torch.allclose(out[4], word_embeddings[16:20].mean(0)) + + +def test_span_pooler_on_pooled_hf_tokens(): + confit.utils.random.set_seed(42) + converter = MarkupToDocConverter() + doc1 = converter("[This](ent) is [a sentence](ent). This is [small one](ent).") + doc2 = converter("An [even](ent) [shorter one](ent) !") + nlp = edsnlp.blank("eds") + nlp.add_pipe( + eds.span_pooler( + embedding=eds.transformer( + model="almanach/camembert-base", + word_pooling_mode="mean", + ), + pooling_mode="mean", + ) + ) + pooler: SpanPooler = nlp.pipes.span_pooler + + prep1 = pooler.preprocess(doc1, spans=doc1.ents) + prep2 = pooler.preprocess(doc2, spans=doc2.ents) + pivoted_prep = decompress_dict(list(batch_compress_dict([prep1, prep2]))) + print( + nlp.pipes.span_pooler.embedding.tokenizer.convert_ids_to_tokens( + prep2["embedding"]["input_ids"][0] + ) + ) + # fmt: off + assert prep1["embedding"]["input_ids"] == [ + [ + 17526, # ▁This: 0 -> span 0 + 2856, # ▁is: 1 + 33, # ▁a: 2 -> span 1 + 22625, # ▁sentence: 3 -> span 1 + 9, # .: 4 + 17526, # ▁This: 5 + 2856, # ▁is: 6 + 52, 215, 3645, # ▁s m all: 7 -> span 2 + 91, 35, # ▁on e: 8 -> span 2 + 9, # .: 9 + ], + ] + # '▁An', '▁', 'even', '▁short', 'er', '▁on', 'e', '▁!' + assert prep2["embedding"]["input_ids"] == [ + [ + 2764, # ▁An: 10 + 21, 15999, # ▁, even: 11 -> span 3 + 9161, 108, # short er: 12 -> span 4 + 91, 35, # ▁on e: 13 -> span 4 + 83, # ▁!: 14 + ] + ] + # fmt: on + batch = pooler.collate(pivoted_prep) + out = pooler.forward(batch)["embeddings"] + + word_embeddings = pooler.embedding(batch["embedding"])["embeddings"] + assert word_embeddings.shape == (15, 768) + + assert out.shape == (5, 768) + + # item_indices: [0, 2, 3, 7, 8, 11, 12, 13] + # - ---- ---- -- ------ + # span_offsets: [0, 1, 3, 5, 6 ] + + assert torch.allclose(out[0], word_embeddings[0]) + assert torch.allclose(out[1], word_embeddings[2:4].mean(0)) + assert torch.allclose(out[2], word_embeddings[7:9].mean(0)) + assert torch.allclose(out[3], word_embeddings[11]) + assert torch.allclose(out[4], word_embeddings[12:14].mean(0)) diff --git a/tests/pipelines/trainable/test_span_qualifier.py b/tests/pipelines/trainable/test_span_qualifier.py index 66a75abc65..19be040387 100644 --- a/tests/pipelines/trainable/test_span_qualifier.py +++ b/tests/pipelines/trainable/test_span_qualifier.py @@ -49,7 +49,10 @@ def gold(): @pytest.mark.parametrize("with_constraints_and_not_none", [True, False]) -def test_span_qualifier(gold, with_constraints_and_not_none, tmp_path): +@pytest.mark.parametrize("word_pooling_mode", ["mean", False]) +def test_span_qualifier( + gold, with_constraints_and_not_none, word_pooling_mode, tmp_path +): import torch nlp = edsnlp.blank("eds") @@ -60,6 +63,7 @@ def test_span_qualifier(gold, with_constraints_and_not_none, tmp_path): model="prajjwal1/bert-tiny", window=128, stride=96, + word_pooling_mode=word_pooling_mode, ), ) nlp.add_pipe( @@ -69,6 +73,8 @@ def test_span_qualifier(gold, with_constraints_and_not_none, tmp_path): "embedding": { "@factory": "eds.span_pooler", "embedding": nlp.get_pipe("transformer"), + "norm": "layernorm", + "activation": "relu", }, "span_getter": ["ents", "sc"], "qualifiers": {"_.test_negated": True, "_.event_type": ("event",)} diff --git a/tests/pipelines/trainable/test_transformer.py b/tests/pipelines/trainable/test_transformer.py index f2802c3342..d9d9fd6b9d 100644 --- a/tests/pipelines/trainable/test_transformer.py +++ b/tests/pipelines/trainable/test_transformer.py @@ -1,8 +1,11 @@ import pytest +from confit.utils.random import set_seed from pytest import fixture from spacy.tokens import Span import edsnlp +import edsnlp.pipes as eds +from edsnlp.data.converters import MarkupToDocConverter from edsnlp.utils.collections import batch_compress_dict, decompress_dict if not Span.has_extension("label"): @@ -89,4 +92,39 @@ def test_span_getter(gold): batch = trf.collate(batch) batch = trf.batch_to_device(batch, device=trf.device) res = trf(batch) - assert res["embeddings"].shape == (2, 5, 128) + assert res["embeddings"].shape == (9, 128) + + +def test_transformer_pooling(): + nlp = edsnlp.blank("eds") + converter = MarkupToDocConverter(tokenizer=nlp.tokenizer) + doc1 = converter("These are small sentencesstuff.") + doc2 = converter("A tiny one.") + + def run_trf(word_pooling_mode): + set_seed(42) + trf = eds.transformer( + model="prajjwal1/bert-tiny", + window=128, + stride=96, + word_pooling_mode=word_pooling_mode, + ) + prep1 = trf.preprocess(doc1) + prep2 = trf.preprocess(doc2) + assert prep1["input_ids"] == [ + [2122, 2024, 2235, 11746, 3367, 16093, 2546, 1012] + ] + assert prep2["input_ids"] == [[1037, 4714, 2028, 1012]] + batch = decompress_dict(list(batch_compress_dict([prep1, prep2]))) + batch = trf.collate(batch) + return trf(batch) + + res_pool = run_trf(word_pooling_mode="mean") + assert res_pool["embeddings"].shape == (9, 128) + + res_flat = run_trf(word_pooling_mode=False) + assert res_flat["embeddings"].shape == (12, 128) + + # The second sequence is identical in both cases (only one subword per word) + # so the last 4 word/subword embeddings should be identical + assert res_pool["embeddings"][-4:].allclose(res_flat["embeddings"][-4:]) diff --git a/tests/training/ner_qlf_same_bert_config.yml b/tests/training/ner_qlf_same_bert_config.yml index 9d9aab8e96..060131ec2f 100644 --- a/tests/training/ner_qlf_same_bert_config.yml +++ b/tests/training/ner_qlf_same_bert_config.yml @@ -36,6 +36,7 @@ nlp: embedding: '@factory': eds.span_pooler + pooling_mode: attention embedding: # ${ nlp.components.ner.embedding } '@factory': eds.text_cnn From 0d395ed9b0a9761ce34f6fb8a77d2dbf60e278b1 Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Thu, 12 Jun 2025 16:38:01 +0200 Subject: [PATCH 02/18] [WIP] add TrainableDocClassifier --- edsnlp/metrics/doc_classif.py | 106 +++++++++++++++ edsnlp/pipes/__init__.py | 2 + .../trainable/doc_classifier/__init__.py | 1 + .../doc_classifier/doc_classifier.py | 125 ++++++++++++++++++ .../pipes/trainable/doc_classifier/factory.py | 9 ++ .../embeddings/doc_pooler/__init__.py | 0 .../embeddings/doc_pooler/doc_pooler.py | 105 +++++++++++++++ .../embeddings/doc_pooler/factory.py | 9 ++ .../embeddings/transformer/transformer.py | 10 +- edsnlp/pipes/trainable/embeddings/typing.py | 6 +- edsnlp/resources/verbs.csv.gz | Bin 200566 -> 200675 bytes edsnlp/training/trainer.py | 2 + pyproject.toml | 3 + 13 files changed, 372 insertions(+), 6 deletions(-) create mode 100644 edsnlp/metrics/doc_classif.py create mode 100644 edsnlp/pipes/trainable/doc_classifier/__init__.py create mode 100644 edsnlp/pipes/trainable/doc_classifier/doc_classifier.py create mode 100644 edsnlp/pipes/trainable/doc_classifier/factory.py create mode 100644 edsnlp/pipes/trainable/embeddings/doc_pooler/__init__.py create mode 100644 edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py create mode 100644 edsnlp/pipes/trainable/embeddings/doc_pooler/factory.py diff --git a/edsnlp/metrics/doc_classif.py b/edsnlp/metrics/doc_classif.py new file mode 100644 index 0000000000..81d1f0138f --- /dev/null +++ b/edsnlp/metrics/doc_classif.py @@ -0,0 +1,106 @@ +from typing import Any, Dict, Iterable, Optional, Tuple, Union + +from spacy.tokens import Doc +from spacy.training import Example + +from edsnlp import registry +from edsnlp.metrics import make_examples + + +def doc_classification_metric( + examples: Union[Tuple[Iterable[Doc], Iterable[Doc]], Iterable[Example]], + label_attr: str = "label", + micro_key: str = "micro", + filter_expr: Optional[str] = None, +) -> Dict[str, Any]: + """ + Scores document-level classification (accuracy, precision, recall, F1). + + Parameters + ---------- + examples: Examples + The examples to score, either a tuple of (golds, preds) or a list of + spacy.training.Example objects + label_attr: str + The Doc._ attribute containing the label + micro_key: str + The key to use to store the micro-averaged results + filter_expr: str + The filter expression to use to filter the documents + + Returns + ------- + Dict[str, Any] + """ + examples = make_examples(examples) + if filter_expr is not None: + filter_fn = eval(f"lambda doc: {filter_expr}") + examples = [eg for eg in examples if filter_fn(eg.reference)] + + pred_labels = [] + gold_labels = [] + for eg in examples: + pred = getattr(eg.predicted._, label_attr, None) + gold = getattr(eg.reference._, label_attr, None) + pred_labels.append(pred) + gold_labels.append(gold) + + print(pred_labels, gold_labels) + + labels = set(gold_labels) | set(pred_labels) + results = {} + for label in labels: + pred_set = [i for i, p in enumerate(pred_labels) if p == label] + gold_set = [i for i, g in enumerate(gold_labels) if g == label] + tp = len(set(pred_set) & set(gold_set)) + num_pred = len(pred_set) + num_gold = len(gold_set) + results[label] = { + "f": 2 * tp / max(1, num_pred + num_gold), + "p": 1 if tp == num_pred else (tp / num_pred) if num_pred else 0.0, + "r": 1 if tp == num_gold else (tp / num_gold) if num_gold else 0.0, + "tp": tp, + "support": num_gold, + "positives": num_pred, + } + + tp = sum(1 for p, g in zip(pred_labels, gold_labels) if p == g) + num_pred = len(pred_labels) + num_gold = len(gold_labels) + results[micro_key] = { + "accuracy": tp / num_gold if num_gold else 0.0, + "f": 2 * tp / max(1, num_pred + num_gold), + "p": tp / num_pred if num_pred else 0.0, + "r": tp / num_gold if num_gold else 0.0, + "tp": tp, + "support": num_gold, + "positives": num_pred, + } + return results + + +@registry.metrics.register("eds.doc_classification") +class DocClassificationMetric: + def __init__( + self, + label_attr: str = "label", + micro_key: str = "micro", + filter_expr: Optional[str] = None, + ): + self.label_attr = label_attr + self.micro_key = micro_key + self.filter_expr = filter_expr + + def __call__(self, *examples): + return doc_classification_metric( + examples, + label_attr=self.label_attr, + micro_key=self.micro_key, + filter_expr=self.filter_expr, + ) + + +__all__ = [ + "doc_classification_metric", + "DocClassificationMetric", +] diff --git a/edsnlp/pipes/__init__.py b/edsnlp/pipes/__init__.py index aea3f0f088..ee42396b39 100644 --- a/edsnlp/pipes/__init__.py +++ b/edsnlp/pipes/__init__.py @@ -82,5 +82,7 @@ from .trainable.embeddings.span_pooler.factory import create_component as span_pooler from .trainable.embeddings.transformer.factory import create_component as transformer from .trainable.embeddings.text_cnn.factory import create_component as text_cnn + from .trainable.embeddings.doc_pooler.factory import create_component as doc_pooler + from .trainable.doc_classifier.factory import create_component as doc_classifier from .misc.split import Split as split from .misc.explode import Explode as explode diff --git a/edsnlp/pipes/trainable/doc_classifier/__init__.py b/edsnlp/pipes/trainable/doc_classifier/__init__.py new file mode 100644 index 0000000000..549d2fc779 --- /dev/null +++ b/edsnlp/pipes/trainable/doc_classifier/__init__.py @@ -0,0 +1 @@ +from .factory import create_component diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py new file mode 100644 index 0000000000..a47e46e22d --- /dev/null +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -0,0 +1,125 @@ +import os +import pickle +from typing import Any, Dict, Iterable, Optional, Sequence, Set, Union + +import torch +from spacy.tokens import Doc +from typing_extensions import NotRequired, TypedDict + +from edsnlp.core.pipeline import PipelineProtocol +from edsnlp.core.torch_component import BatchInput, TorchComponent +from edsnlp.pipes.base import BaseComponent +from edsnlp.pipes.trainable.embeddings.typing import ( + WordContextualizerComponent, + WordEmbeddingComponent, +) +from edsnlp.utils.bindings import Attributes + +DocClassifierBatchInput = TypedDict( + "DocClassifierBatchInput", + { + "embedding": BatchInput, + "targets": NotRequired[torch.Tensor], + }, +) + +DocClassifierBatchOutput = TypedDict( + "DocClassifierBatchOutput", + { + "loss": Optional[torch.Tensor], + "labels": Optional[torch.Tensor], + }, +) + + +class TrainableDocClassifier( + TorchComponent[DocClassifierBatchOutput, DocClassifierBatchInput], + BaseComponent, +): + def __init__( + self, + nlp: Optional[PipelineProtocol] = None, + name: str = "doc_classifier", + *, + embedding: Union[WordEmbeddingComponent, WordContextualizerComponent], + num_classes: int, + label_attr: str = "label", + loss_fn=None, + ): + self.label_attr: Attributes = label_attr + super().__init__(nlp, name) + self.embedding = embedding + self.loss_fn = loss_fn or torch.nn.CrossEntropyLoss() + + if not hasattr(self.embedding, "output_size"): + raise ValueError( + "The embedding component must have an 'output_size' attribute." + ) + embedding_size = self.embedding.output_size + self.classifier = torch.nn.Linear(embedding_size, num_classes) + + def set_extensions(self) -> None: + super().set_extensions() + if not Doc.has_extension(self.label_attr): + Doc.set_extension(self.label_attr, default={}) + + def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): + super().post_init(gold_data, exclude=exclude) + + def preprocess(self, doc: Doc) -> Dict[str, Any]: + return {"embedding": self.embedding.preprocess(doc)} + + def preprocess_supervised(self, doc: Doc) -> Dict[str, Any]: + preps = self.preprocess(doc) + label = getattr(doc._, self.label_attr, None) + if label is None: + raise ValueError( + f"Document does not have a gold label in 'doc._.{self.label_attr}'" + ) + return { + **preps, + "targets": torch.tensor(label, dtype=torch.long), + } + + def collate(self, batch: Dict[str, Sequence[Any]]) -> DocClassifierBatchInput: + embeddings = self.embedding.collate(batch["embedding"]) + batch_input: DocClassifierBatchInput = {"embedding": embeddings} + if "targets" in batch: + batch_input["targets"] = torch.stack(batch["targets"]) + return batch_input + + def forward(self, batch: DocClassifierBatchInput) -> DocClassifierBatchOutput: + pooled = self.embedding(batch["embedding"]) + embeddings = pooled["embeddings"] + + logits = self.classifier(embeddings) + + output: DocClassifierBatchOutput = {} + if "targets" in batch: + loss = self.loss_fn(logits, batch["targets"]) + output["loss"] = loss + output["labels"] = None + else: + output["loss"] = None + output["labels"] = torch.argmax(logits, dim=-1) + return output + + def postprocess(self, docs, results, input): + labels = results["labels"] + if isinstance(labels, torch.Tensor): + labels = labels.tolist() + for doc, label in zip(docs, labels): + setattr(doc._, self.label_attr, label) + # doc._.label = label + return docs + + def to_disk(self, path, *, exclude=set()): + repr_id = object.__repr__(self) + if repr_id in exclude: + return + exclude.add(repr_id) + os.makedirs(path, exist_ok=True) + data_path = path / "label_attr.pkl" + with open(data_path, "wb") as f: + pickle.dump({"label_attr": self.label_attr}, f) + return super().to_disk(path, exclude=exclude) diff --git a/edsnlp/pipes/trainable/doc_classifier/factory.py b/edsnlp/pipes/trainable/doc_classifier/factory.py new file mode 100644 index 0000000000..a029815b5b --- /dev/null +++ b/edsnlp/pipes/trainable/doc_classifier/factory.py @@ -0,0 +1,9 @@ +from edsnlp import registry + +from .doc_classifier import TrainableDocClassifier + +create_component = registry.factory.register( + "eds.doc_classifier", + assigns=["doc._.predicted_class"], + deprecated=[], +)(TrainableDocClassifier) diff --git a/edsnlp/pipes/trainable/embeddings/doc_pooler/__init__.py b/edsnlp/pipes/trainable/embeddings/doc_pooler/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py b/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py new file mode 100644 index 0000000000..3f2edcf6cb --- /dev/null +++ b/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py @@ -0,0 +1,105 @@ +from typing import Any, Dict, Optional + +import torch +from spacy.tokens import Doc +from typing_extensions import Literal, TypedDict + +from edsnlp.core.pipeline import Pipeline +from edsnlp.core.torch_component import BatchInput +from edsnlp.pipes.base import BaseComponent +from edsnlp.pipes.trainable.embeddings.typing import WordEmbeddingComponent + +DocPoolerBatchInput = TypedDict( + "DocPoolerBatchInput", + { + "embedding": BatchInput, + "mask": torch.Tensor, # shape: (batch_size, seq_len) + "stats": Dict[str, Any], + }, +) + +DocPoolerBatchOutput = TypedDict( + "DocPoolerBatchOutput", + { + "embeddings": torch.Tensor, # shape: (batch_size, embedding_dim) + }, +) + + +class DocPooler(WordEmbeddingComponent, BaseComponent): + """ + Pools word embeddings over the entire document to produce + a single embedding per doc. + + Parameters + ---------- + nlp: Pipeline + The pipeline object + name: str + Name of the component + embedding : WordEmbeddingComponent + The word embedding component + pooling_mode: Literal["max", "sum", "mean"] + How word embeddings are aggregated into a single embedding per document. + hidden_size : Optional[int] + The size of the hidden layer. If None, no projection is done. + """ + + def __init__( + self, + nlp: Optional[Pipeline] = None, + name: str = "document_pooler", + *, + embedding: WordEmbeddingComponent, + pooling_mode: Literal["max", "sum", "mean", "cls"] = "mean", + hidden_size: Optional[int] = None, + ): + super().__init__(nlp, name) + self.embedding = embedding + self.pooling_mode = pooling_mode + self.output_size = embedding.output_size if hidden_size is None else hidden_size + self.projector = ( + torch.nn.Linear(self.embedding.output_size, hidden_size) + if hidden_size is not None + else torch.nn.Identity() + ) + + def feed_forward(self, doc_embed: torch.Tensor) -> torch.Tensor: + return self.projector(doc_embed) + + def preprocess(self, doc: Doc, **kwargs) -> Dict[str, Any]: + embedding_out = self.embedding.preprocess(doc, **kwargs) + return { + "embedding": embedding_out, + "stats": {"doc_length": len(doc)}, + } + + def collate(self, batch: Dict[str, Any]) -> DocPoolerBatchInput: + embedding_batch = self.embedding.collate(batch["embedding"]) + stats = batch["stats"] + return { + "embedding": embedding_batch, + "stats": { + "doc_length": sum(stats["doc_length"]) + }, # <-- sum(...) pour aggréger les comptes par doc en un compte par batch + } + + def forward(self, batch: DocPoolerBatchInput) -> DocPoolerBatchOutput: + device = next(self.parameters()).device + + embeds = self.embedding(batch["embedding"])["embeddings"] + device = embeds.device + + if self.pooling_mode == "mean": + pooled = embeds.mean(dim=1) + elif self.pooling_mode == "max": + pooled = embeds.max(dim=1).values + elif self.pooling_mode == "sum": + pooled = embeds.sum(dim=1) + elif self.pooling_mode == "cls": + pooled = self.embedding(batch["embedding"])["cls"].to(device) + else: + raise ValueError(f"Unknown pooling mode: {self.pooling_mode}") + + pooled = self.feed_forward(pooled) + return {"embeddings": pooled} diff --git a/edsnlp/pipes/trainable/embeddings/doc_pooler/factory.py b/edsnlp/pipes/trainable/embeddings/doc_pooler/factory.py new file mode 100644 index 0000000000..fbed45a685 --- /dev/null +++ b/edsnlp/pipes/trainable/embeddings/doc_pooler/factory.py @@ -0,0 +1,9 @@ +from edsnlp import registry + +from .doc_pooler import DocPooler + +create_component = registry.factory.register( + "eds.doc_pooler", + assigns=[], + deprecated=[], +)(DocPooler) diff --git a/edsnlp/pipes/trainable/embeddings/transformer/transformer.py b/edsnlp/pipes/trainable/embeddings/transformer/transformer.py index 74205369a8..f1d0e186fb 100644 --- a/edsnlp/pipes/trainable/embeddings/transformer/transformer.py +++ b/edsnlp/pipes/trainable/embeddings/transformer/transformer.py @@ -586,11 +586,17 @@ def forward(self, batch: TransformerBatchInput) -> TransformerBatchOutput: offsets=batch["word_offsets"], ) word_embeddings[batch["empty_word_indices"]] = self.empty_word_embedding - return {"embeddings": word_embeddings} + return { + "embeddings": word_embeddings, + "cls": wp_embs[:, 0, :], + } else: wp_embs = wp_embs.reshape(-1, self.output_size)[batch["word_indices"]] wp_embs = ft.as_folded_tensor(wp_embs, lengths=batch["out_structure"]) - return {"embeddings": wp_embs} + return { + "embeddings": wp_embs, + "cls": wp_embs[:, 0, :], + } @staticmethod def align_words_with_trf_tokens(doc, trf_char_indices): diff --git a/edsnlp/pipes/trainable/embeddings/typing.py b/edsnlp/pipes/trainable/embeddings/typing.py index c044cb7951..94d4891164 100644 --- a/edsnlp/pipes/trainable/embeddings/typing.py +++ b/edsnlp/pipes/trainable/embeddings/typing.py @@ -30,8 +30,7 @@ def preprocess( *, contexts: Optional[List[Span]], **kwargs, - ) -> Dict[str, Any]: - ... + ) -> Dict[str, Any]: ... class WordContextualizerComponent( @@ -67,5 +66,4 @@ def preprocess( contexts: Optional[List[Span]], pre_aligned: bool = False, **kwargs, - ) -> Dict[str, Any]: - ... + ) -> Dict[str, Any]: ... diff --git a/edsnlp/resources/verbs.csv.gz b/edsnlp/resources/verbs.csv.gz index b05fb4eeffde8d7c4d8403757b12d2445c925f9c..b74c8587c2beabe5ccac2bf63bc76be271418663 100644 GIT binary patch literal 200675 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

u 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 km#adOEt0IqP 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℞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 F0{}Ei5h(xw literal 200566 zcmdSBWm8<++O|z_x8N=b4grFDaCdiicP9iVxI4k!-7Uf0-KBANdz$RM_R3oK`v=}H zU0t*CAvJ3DbseV+2){!^;|@C*fWA5#+3P#d88|qDWaL!THe&sZKK+RA~ zy_Pg?`=+2q&`dWJy8$bl;528ynv3r8VS0-j0`h9fA&RyI1#@ zW1D!AtJA)|NI{p~j$h(tvZk`rg(FilKAdolukw$u=u5APB9_y03Y{-~W0!qfH(OZ3 zFKpR^5abO`qgV|GF8#AHzPJ>N5|BJgoz(-c&yV-dSPl<&c6=1@6#S;R$OL6l-2(O1 zh;x(^KRNLB#Tid^yno&uUXQ(A-nn_77%EHE%2+Z@@HE`qDJ|)|o{p`YusS~M|41eG ze(v)dy?S-%xZA5sYrm1%!1f*wpsv|KNEm+6I~XsBpmqN7^Xq^)h|WiJ0$r>9hV%R`*T+U!oH?RpApqu5)@&xi}^H^>;WwTawcopcwrGYqElEgpqrv1I+nS%|pQ zQ^DyAxcdsFvO~E009s|o(H0ef`xK$d!aE&_pLfB1A19{ zs&(NnR@)3}NQPcxiteQJZ6?&Y5(`Hk4fZ4K*A0mUp`>TOi6oYL4d~z zlN?>Eaj+m)6P%o5B5EbBEggd5sy#t&PwIChjlwusSLywF{V>lv;#i~?ml%^b{dCC7 z;}Q?&_noSdowHT>i<$IyKKv%%xt}FqnO^G_?GQ2Cb9vkW_VMu6_PDvs?w_cA}Y{IhJ+82b=b! zfua6jj_`dF2@WHAK6ip40q^(nhknOMNXe7^v!Lv?5!dpECDZy#X>MBI_y*oHKQDAv z^)6>1f&cFLq^Prh+ep7tuGVP3uv zq=1{~3_ZJgu|U-VT?W`0iqAZ;SYOH$OD)xTy>@V+{0yE!=i83gPUy+Jj-=)#CHNlc zbi*+K57DUir!*4GOW}-bz5ba?Svi6W;zO+xY1o&Dq^^8uugwc5STM+k>5mZbS4|S3 zX=kx2URayfUB2BD*)7!Nc~-@C5gApS{vZ!p9X{B_$ey8Dvm%vFIkoM6AsSiNw372^ z;iq~|GP<)^Yd=Hb(w-=V#I{;gQRdS@z5HtvyweJ{q-1(1KJ9*Kx);}Grh}&|Uf(^U zAMv&xjjae@?qu3n>@*={8@Uv}fMRdhYb=ZIlCt)z6}AZ_=yZGmU?{R=@YXrG>b~@Q z6erqm`Ze-31viD;4^|r36LcO#-!jS8yKQsl2u!RqpB5ojZ!jEB1ojPc)|#5nDRAbK z`1!csog_Hh7r?BCnUn^aZftO;m4){x2TD@_I|F_8~uVkhT13FT_Y?U zciPwtjsp6T)54#xC<2*KFJEEKXBmM-mIcSw#1!Q^~cORFJE&EAAF*e=WfXxa(a{W5^!g9=QNk#6$IQF)!VUs4amu>}G#FViGM< z7wEp==J#48mK%bJ&>EaPZNbdPve5#}WY>=3a%0y$LIRTP+JdtRj{W`}M4!vbd-8BK zV264N@K|y9r_2>1@KAP)=ei6;^!)=wBDVnuk%Ud0DgtO+f#CdTT%q9lY&;RunPrVj zsCqHM_0Uf8>`8`ZPSp%dDgzs>gtFC4TZ|HttdW!hoDFV@FvlCab|2kX8zN|!;m9vb z4J51vwXG>}=CvoNoelhstr=Jr>yWo@-Bt-@K3^W<#YR=P&zAe?eU&3;wMm?#Dmpd` z2jsY1siQvt{92X2`B!(!`qo+jEM5Ippe+u@ueqZz=eO2$*P(9aT|P!pyJO7ZRyacV z`F@jo#|mps8ad!jbm%cVi|f13Z9u9uX#8nG-6al;9FCa7wi<)0+3{Gydsj9{luHY> zM}YYgE(tv~=^<$f@bpbec5DFx`L6D!x)?0r^9R1zSaQKF(1tqvKf#g{(S*Lt?i`^7 zB1c(;5Q7`4>(dCSDf`fET2J^+Omqi*mbW%CvyW-7lE|%8cc7BM9h9k>>CewipXkrs z=AP`&&Rvlo`;j6vjK}R^u5e*59@cpo$`g%?ZRipjB{$gA?CQC46Irmg?jmBsZVS>% zOh$l3Am!~*@o2AIPI5h*R*r;DLB8wgg{31sECzb1);~C{P|+;ts-eGyN>EmaAGBF? z?{E0Nt35?V%()KDWuj-Ntu3v#*EQ*^aBImQx4AOJn}Q%4YRrSv8Hw9Rx;dykIwH#@ z@xlM@TPP24dw$xYT*(89Q_wffll^!DZ9I|LpdZeb>7_M*XjmUHb8V*}8G&}LStv!$ zNuHm(N`>i`J2U+_g96c${=7`6Vcgtiy58xW<)%y}x~-su84) z>&*Ry>w*u5@SP(uybU9l0ifnCFf0A;kU}h&#}-2EC!>6XTO;Iw358HR zn~)QCg09W*3=Y=`jeRGVs=TF`#uvNSn^vbmtevi<{OMBtECab679E$5eyu4MH^F^Y zx&!Fvjp@`)8}Oq(T$;z%V^WfktW5}$IBolGAVYh+FsM{ZJg?YMK~TF>4PTndS^-g2 ze3ijf;ktuKUit)``VaNw4FkKA4P14c6N>xC($3)skubm|y}O(xG}YYE#ejzWG}Yr$ z5yr|Q#OI-*F!!YvaE2kJ@=MQxF+Y|Ud2uP}+mupvTR>4UeZzXgCocPq20DcgKW#LQ z5Wk3a+NkVCeO)UaK9_Y%jZyLXYw+@UIb`p@4PIRTakkYs)3?DZ@_5`|8@pg5l)ydW zjmvm!y{i#r2*cdt`52wQzO&^)T2;K|LUe@+%=aR;93Y;lx4sp)-@L*va zO>Qm2P3G30_KR8EMI7>r!+HAC^2-5NB0`XZgn>A?tGcY+DIAVoNZSGXV_~3Rypld< ziomhbj~la?q!UB*52WLEvycbQmF*d^Q+XB*S08!&oz4ONV8paih)6oE$Cz8TX<}5F z#GhxfBVK{Q7x{S=k){_LQW<3lJy}S}oBLUEtL;qh>fPg1=(UJXNbU%XLtM|ahH->8 z90n}Kl4NT+L-vOhOUiI?~$Bf;A7#_da{uk2`7+|@8h-z!j|wZQsZg;o-Uq= zH78-ak9cO0OgaapEqT|*1*$)XtF%w!DBajU3a`5fW%h@|S91#WQ#8f>;(e+7j$~+B zY5y+YXM2zk8U{TCwq{{vo8$d!p%B@+DiG2>uB*lm7=0i!Ek?bFRA+#Z?-H^KpA?~S z$IlK>z>o5o&ZcnfuR)|t5ep^HOVH#H6XX{m;jfSAv@7l*%r?rEl{b$bCSi^dXZxCoEoKb z+yuj+czO;a7Xx7e8%Z=c25UA7Oae0_2P%P@>R>Q;b!9NhcZo(%IrS<#l_vVe!f!L< zPYT{v%Qe?f!&>}`k1!o9&g5okjBscZ>D{GLKX2h{s8Ck8OWg%u3x5UEOH!d|(RsVg zKm6#(25Ya2a6wvjr@J1?pN;c`jvXbq^fm3i0%(v#m?|=i~R=G z1pV&rv?6BU`BN6`>WS40lXZB%Sut-y3;v()&EKXQ_Uecp;`;}#fM-r z!qx2sb9TIkD9Q{1oMZI}s!rudXIc>j;6~CJVi4i-r0qi$IXqM7kGRnMxsnZ*lM{esGHt=G_?IB)tHUd1iObY4@uKak{=7J65ABir_EjTg&ff5Q z68ml)p4-1Qfq47rsLQu{2TA^R`Z@v~`L1<{21Fdv%y{bC+5G}@36J(lXG;33kY8HTNz6_B~lLIYpXhAaw2f?TL>>$SZFyBqwrPR-K6UcVup*>l{NyGb9 zvgO+Nd(Ki;(%C@ZZT(tD&@?kZ-*5UOwM7Aqc-^bi!vCvEHLM(}&XD@pHI6BkY3=-h zzhnEH{JLeE{wEsW3scq_b#kxNZZ6xT#G3NQA8ubtDyNcNYUw;OoTMx`A1y?qQq>FQ zjkRVD`fSQ>R|XnRrcg?I+Vhz|r=vxJ=vZMvLj)(ym(opc6q3qN5qu=w|1j-ap(SOt ze>9b)+2GE+>lYeiKT< zinhn|!J-#sB}X$HHV~jyYFyf9AKL|~OiqQPnoeyoT&l(G>wz_wZhT=D^J~-j;6}EB zwd@j8iH@y_CpCz{IvurI^n7A5M_a2H(X-w+XaK-=91IO0q79(}K$oo!TtH_V)Lfwm zLK&M``idAu+Fuv)2S^JcQ1|ZCR0TPYnC?rk*dcyC<~qvKqE?T`MJjTFPY`rI1fltU zK0Bd;dK@lLA+lPG?uh5YJ*kw%qDHW+Qahn>?CA2NZcfn|@O1sa=IyDSTB{}-`J*OH zRoRBPZz7tjpY#~dbsZ-VQPf)QUwn^RXJgB%Wr%V8!0(CGwV<6d-%F};iG7& z9nc6(q+n-9N(B*2@|g-6nv|Cc?rs!BSXAI6sGX=l0I1zl&<^OpR6)|W`mcrea7Um` z?mxsWiX5f*2smXelhbA(D+I!iM& z8F-;!$s9v%X2LW{xVCdoivx4VCn)HCtv|7;+(<#4t|%6;@} zYFLYbfDVcVT6<}3@<+s#REfMX;=%`qqH8g<8LdHBzW2EaY_tB|RA^FJR_N7rsh9%- zwg);$1)5@8Pvp1T(wVK}>KFOCX&br2<-_narnA2X` z#g)%G5Q)6ApvA2oQbj_7-d*}t+85Wc8j}HbN!?EBtpT~VhN>gnf$jlgyuDjnW~OOtudx?qSK=LHNehPvfp%=< z`vZ|Cb=hHV(J@a08Wt=Rc@ffI#3J@As_dxA#0pjFsLA+LoY7{0w&b(qAD(9nX$sYU z3{P{!dE2DN>-z{uAV3Wq5#}R$9n9+oHEH+_n15|jSNYZqx^1ig4%#%2H^O(a1CaFm z`Ng`9Ym+EZT_0yK{U9ZxMH-S{7~e{`AWf9;`N)f8YVJ(gfk4Zzs~XE>o8@xUV4Lxf zz;K)H(mHpK>KABsdqyf+Vuz+99DD_!%ckveCE#{-XiOsKFn$fB37#TN76c3dJRGv+ zzJ-<-A)MBa*%8b3UdmKaXUXZu6AshCr$Zb$pCkNh6-S$K+&n9(z*VTL{-=_)`4_fY zMfMP?aoXA+{70vYXiW4>=73&VCr?ISBmj)MD)EhrX$oko#yV(GBfnFs$XB{30Ll-G zpLr9N*>kGFH$#=gmsbPGHsKs_6Yl3ib5gY*yO&Ts(eVk&0JURC3Cgy_5iV-=>f{O* z_Ly|dmBQkh&R>E%8_&K~7<}Ab--MIz@7lr4Wh+I~4SrsU{RK5DqVSb1Us*4>mzr#{ zW0Qd4L!>zTgloEBc+$5Rt*|fiX2?XajDL`6<>q`V z_Z@SmrY zIe3ygp{{=3841`3Sz~pW6Rm(^mUfr|tS_O*AyBzN9m5-$aFnOl=-J}38D%oz&y^pK zyOFy)G>Hz$7Ew2>VA?|wBb6N&_n_cj<@JKklmdM6_@+~q1H7|{gv757!5KhvbjVye zmH81Lguda~k5`~jA!B%Hsgho-h9UjzdS{v@seKreM}8&_^KQXA?$P-9c;)h z>W6cXx?^?TW<)3Ly%q2&M$0r?n2=VX+S>m-Bq~jxSMQ&vTS$+S3yAjE=i&*Vf_^|l z^Kg3#=lLjQH}tX@6ihmP*9jf^5u$dz0Y-5XsybqgY`uV0d?^LK4GDnaoyhlgNK&9$ z=zs(}DG3WH)_7e;Sw{11VKJw(EC86hp61M?1~8s5NzaaN(wv=K#^nax(0aES(^D{6 znY|i#I37C4<;D0@9~Mx=GAq0f5D{=@U=-GS}Fz2dTA9(x>ejFX3anX?@{)Ie|tLF_3ts{*YGd^NZUa ztK6me_W@yO%r%QHRXSC`%^R1cYW+l*Yh21ZW>}`$a!%YusOX0wDYNU4(CO92Zob;$ z<&NCD-9sAlVBnXQmq%oQhC@V)z-Vimx~`Mth@K6}gXyZc)-&VZw=n8wgM-5tYw`OP z#Cjioj_4Kq0(FB32P**b5EKBOjqEHpHYR!*pJisdZmYNv-qVcXC{H*~&8c_2m9To*C~BPUjmoV7>>ttBY* zmfU$X-oTUvi$+Oocvh1*;@-7VY8iH-ntpTiURL^&==B+a^#>1A*14%Ry$!>RjI(e` zkET3RT@Rs(`EZ2#mS6LxbNo-oBH}Y;trhbA2^VdX#b2_%$mOuesLZAGmzi;!k}4mi zcv<}v)~adKKbjaDG1D0TM~=dW`Ie*n{GFpj&g4@c^ZlKp_y<`UjWw9Zn(B|$xU0mt zNq8%z>t%cC=Y-re)%8^@Cg2S!W=+XJt#HXXy}<^P zNy$HCvaV1982~91zR0DuGv(4ZSMjPay1GF;wz!aa5EVXHaA<7Fp^_|2yJx|G)w<5Y zX8u?o1tOKf*Wke`CQI3yL5&7MXF6~rsH{{Gnh7rl{a%F%6GQ)}pQkA@O ziuBcff|jo}8>-`a)CF_ZV~ly_rP0TmlPVq~?7}{Ma`}IDP1A$AIo+?hI6K@VxN^!Z zXSzf+jn1MpZSzm)Xy}ZM16EP90I4xBRUY)Qp+d_?MV1P9q+#-FQ3;LmewfOC_%-rD zwY3AgF;ux_K))sn(#-B3ehoTd-GBX>tL_{nz9P=W*?;*p;%yV5K)*&2*9z#@bgJhl zY=4Uv-V=pB4CCMcCw@1JrNs|gO5glbKvSo-^x?n3%E?!Gb;X&tV1*Srt11y)>6(Zs zGSXOT!j1ehb!fRqikgh$>Po43_5!MTpppcW%$rrt_lH$p4pHml^>p{FXUvF@(;7E0 zZHx|w|DCGgzPZJ?jj2FQrO#@edG4Swy=7MwWWi5kQ9)ICV4bYti+T<#HJJ_@0DX>Z#Ar3sx1tMXl=IF7Dp#`ichK~99>$EngQkgo z!`bxVe#2bu5#YBKsWHRikJIqnu|*1RK~vNpL6hg<74t`4pPC^Ogs36Wdr7GO?dmlG zt*`bzwZ%POFMmxGBl?fH2*aH@qPP+dww+P||IdHzq3C__vry7ZNtbV|N z`15@M6UYg)hF9t%e}DHi18_fXDr5~{M>)o5)E)R9xWonO=qnfrqD4v<9*F)?;(|iR zD1!%kvn+)cg*fTcgwuPgkh6Ml9ibo*YL4SeKZr|ml5Q3B;jBXS*cLv5kHX?n5(6k$ z+X^QU@ljwGRLJ&x))1TYgB888?_FY%(jxOg>?8+kCI4E{b74c%A!5UJ3;iwI>9hT9 z;~5s)Iu|D;d%7!()(IIw*OcyVMxsC5g$l;Q5oI0+&NI|z-XXXyte?p3Xn ztH!Ge?NcjSEV$!#YjLLSa9u|_IIQ=|*)jQU8WV5OZj}D|@yHmmdldeDM|R)dkv)~N zV{s~?zu%EzFxBPDqFJ)kC5NJkbklX?aNI_lW3kyIY74OMN19vqo22Ue zQ?mA$onWr0j+dGHK>G=nCo{UM#s6@A7q-;p7MyPi>o|LYg? zgnAaL!^?w5I7rp^VSCIl?|~D*Y|i^LiNq^y+fSk z+F9S%4@S%=hl=Dd*jyB$S0JUja14QGz5b*tC3p`qiz&u*e?~TzFuXAyG<@c0qXp)cxeS8?Xp3IP*&^QNR*i@1rA*>Xgyqm;FW9yjX+c0*8bbi6KLf zcabcivYXpx&;b3e{LA=Y98x&+qX;! zGU7rKsq^%Fr7_4Vbqsn&jiWw;uhlUj5eT`y8^13GDU=QB?qbp;th)M%2eB^x7 zJp{_dGCb9^KS5>o;A;YGx;F=4H$)ksa9=N7 zT1|B(DA`=ChEj{a$zSO&tW2aOI>3#;uKqW#%<!BKI{*4d)l34>Ua~- z#!9$Va&wmDSRQx|4zMLSm}$$i>;}ulYs4Bu1l^#aH`P#;zXf#IqN7#EzXUY9@SA{U z7yd1v8H)cYpbe7#63`J7wn+w8{}#~f!fyhaUHG?v#sUgx_FkZXj@bAupd+e)0=iEX zD4-es6wr7Ae+y{%{|acVHvx_HCZMt21T@xf0d4Sq1hfLfa!@%Cnu{CM03vRvv>C)3ViJfZ>t~3P%D?nVCdlJ>5$~8q^Y*E_PQRoO z3=;!{L=lKN*f3zy(XKdt&U}Q00ptZEqmFx^5L0!lkXr47IpuY#7ULgY*$Ol#56W(R z;1)0me#gikB>JTqgP#Bi_&OLayq3;=oWw9`V^Cw|+{zORznezgY8z<%g8NAtmO$&N z%%$V;Zq=vF_@?@BzxjLHS53&3UoUspgkvjwU|({&tY54T+bUs9Z@Z~D;2T#VO8~Zr z_y@F=aIKo}(t@3_Yx#p30O6DMWIerL?uJcwtXuu$LwOxS=l~37Ob@d%l_;>kJ%$CK z$ME)4$XeH>s=?Y9?q|#V_kV8XEjnijN~+%;Lv+i0Nt8RLhX(6J0K)VFTx|bb z*#_Ioq2x=DZuzb?vzPl!eS#vu*aZCkdpp}NFPWrP(}ce6FF#7Dyw|ZVL0{7KXXp+n@KboFTH-TH{A6>AL^{*( zADukufErYaMb7x)L9ijRSod#Dlqz$vS@b`kv#j`BYgu4)rN!{OmOrG37DLazp+C;I z1#GfKa+Va+Obw5xVk>F_)57un0zc~vKmZtA`7}c5B|ZW$pov-FmBfFTuKHCz4Mzhk zmWkJO7K1xMl%n^OAeW-`=U|t^zY6Yw^;MAUxqf%~w=tDC`E?Osa{4~G zJ+MI=Lv~8HlBPGA`Q81ffiig7El~{t(OP(^`PTuUHKhbc-}JPTt)c5GgyemgeoEJR z>rET?Xaj6A>XBi;v90kRY)jV6RFJIv#JA@W-mI({E~9rp^yvo$$;_VtF9CG}5Q$Sb1U zugpi(S_5;_YsN0`>_nRSWvc|U4Qv12*lM^zkmT=O4Q$+TH(}SXfKCk@C$&i|SZ)Lk zA5cI^WAHn!8`8Qu?k_g9FiJTE|D5{Bz%^YlY)LYhm+bYg(p|WHi1B;f5|Jj+8tR`~ z;Gd>6NeEhH9m2EE0g89kwZ@XD6xzf)}ee!ma@LT2z7~;tuGa-JkEC_g*|xIv7ZS zttt$>Qo&lF>(PQRtGIy&yGJ4(hygCM6ARBx@f_f|@v9mqMj{vc&q~#qy_y!#h*BBC zfz`tdul8?aSK3vW@0>5J#x-z45AH@fik8c^WqK_-?BonQbf#2HVqm+q$m({vJ4xy( zlKGtdlroYxiR{K9)Lb(7X|WKxTv2pZ$}!mgR_Kn3Lo;+jOoxD8v(C0(vIG{B?nBCm zv_Ku4$2OzcL75q<9D;z)o;fmq9lRVe|24c^Tp%;Tp#ho;E)rTK%i2n;H?|42L&Pfc zE%cY>7miWoU}zeK#bPsx(*bx}3QG8QRJ$SzR4xMY1NeLcApjoSSu?mm4gpM847 zm4v{oV-_c@0yqU@T&yYNDh~+1;D&PLn(p3-X;_POY{o>7M+Zlhk=mvep9|DlJ{i(B zh#H4y7SCAcI#oXj(xOa&`e9lcFA88XOC%VCug({YIA0EgZDyv;xP^0IFK;L9^Z@H7 zVwj9CVrpOdO1Cm&W;R0Z0py1J`?E>rH)re*14%Q{XZ_ik!RI0v&rD%`AMau-TlKff z?e%QsAWE_*vt;|YHGDdknFVJuJExsJ^JQg4sP7a1qhk3X~&QhK){9qH&}tUfw+{pRR9D+>AMBM4*`| zJrxh%TGSL*U8|$&%WG3E>acK%NZ)1=wYbXPdqFZ%}*b0uh3hVIvT>s zUm0mF-p~#uI|RMT2=t&!J=*+dS*GN+%L%x`=u^JnuV`kaedvH(s_>^Z5 z0;7j1CA;~Qu>EZ$|BKDsO~-hOPckV~!?b4*gJ@0b5^?OP-I$aSz!uThPl^dqAUee~ z=g1wZlqEbTkhm1M2#uUXD)SRgY$Cr;$1>i@ksEqsE9bu3Xmwz?f$lKFxZN$;h4t`Q zqTWA6ug!Ph|M)PqUvGSPD#o9#Tim_{M#aV@O)8S8zm*RmADNuka33q0BpdP|yQb9X z(XyDP19&&W$B38Lds3fzU4wW8U%@H-%XZSPdl_fjF^=^jezY#$Tz{R2z)H?V*lA)8aj zbT}2IY_y6=W@1-5tvn0~xd?&CBGP%O@;17iR<@@B#L#q)ik zQZopA{9=Zp0)WpjwvL}dSGbenym3etp0-ikRZR8Z?RC)Lq3f2}x zi~uxJ8X81O5gXMHlPgU)*}4;=$l1E*qR2gVC<8B+zg7~UV+Cu43S-6f#3cU81KP%O z^M2<6YL4=&O(UDJrbw*cWd~cDl)|dj*pf}q^DGr^>?I~TZ$h=JaB(eNzE@3@2i!fP zRD?X+JuB(8ujK$}$n$*A*|TAST-Iq(r7XEeC!E?ld#3|nH7$A-gU)qiNilc>{q-5X z6WWMdYIf(K*KNsi{mO1x-n@+;13EFt&LeIE2uqFY#&m-pQ5?82|c0V11%yr3~`7(%NWTlR|yfNrv(V9rteQ#7!@LBMSV_j#HG*q zNyPp)HZwB(h8+Z$kvw|<9j932*$yXG7`4X!%Pj0V{kQc~KMUHn=#YkZP8u8Iu4 zYq8TR>Q>{#8SpCseH&MvU?Cz`x?qvdt_1x@z@&fUK64)>XwN%8DRAs@n;G9F9o|2T zV=-*BpmOG~yG+O6^~GJfYGI$pPS4W&xEep7e%bZKZ^u=Ga*BZv^g8@1ZGS%`)X;er zO7Jwxxu)fM`m9c|$35FOG58spT}Ay9=#(39p^nFCI{l*wPzrc&QcpB6ru?FDqE?=7xHW0 zw#iHUNqDWvOM+Qu`@Wc0xNnf{kUGMm&e|E|(su+}=@y5X(%gnJ?$@49QV(xeSfUA8b7eQH2Mu&e-} zw^VgGH(=o&s|WA1-E7&tx~1soza2}H4tX{NaO8w{$|!_8beb)wh9W;GM=YWjvR62M1*@cl56xRQ@~SrSe@HC-5ZIC< z0bE7=D-LYvq_c6EOHGaj@-hWz*P8cD`0?Mw2(`o}h=I#&OvS0EL ze%C{>X2FbT1-EKAx2PfC4SatUcqn=>xgPX1zK%$}R&giMf9|T$q{Y8>RifkA?C)JA zdOJRAo$KMc#xluW>vy=nI$ub3dF5CUyJk(Cz2R~tz5E-V7}C1ZY!ZF5(975cR-xYlDT>G>D_qw&k-gq>_x9eA*5Yo zPi*T@OpZD3FXZ4l{uVCKpdjtwE{Gs^u*>WZl$h(@aa*DsIM6r<^~sqLK%v6nqWpXl3KWhL^tbwJf?W{;hZnMN4+j0dOs1>{R zYGk|LVwX5f!ZeQA3_S`skrir8&mAxI-sXy?P%7S~M^mtJK4=z6E(`z0yD`Lpgcu7G zII=}C>olwMkP@>t%Nw_TIP*56Ss~>d?i>>%pXa@~v6U=7zf8o&=8eNIChAT6^&>7! zZ;qeIEBy@C`#y|Tdo9bn0draFP%C%YpiT*W2~FAGUEkCifpfbcm2T-s&Q^Hm5ZgPF z`P#;<|J)q;zF^jbBam4pVt9uKV5DB+>1!^f@IoFr)G8<&Y+Z0#jTq+Cy6-hy*-go2 zo>*({yUuRcvYpxHbO&f0y1Pu2onD!ryf_J7t}En0(|TVGmf@h`pfQ_YI>xWY zN@7>(?|UUN>gP;8RzPfh5>RmP7Av>y8n8$95{8$)>1O`~Qmdkr0^id^pYjWQu1{P>QbSa*dbFUabNva3r~kVn zd7y{?AA{JdD%qLfP+|n=mg|@T-SRue*f+Oa$MFBS<@eT!yeC0kzf`|LQtNzjW)=>B zK{PHIR=_~Pfim%Z0?LjYG#bJ`0nqgPb;r*~upy6O?d6>jw%Dj$zoJKbw zmS(u`$SF;r#FVg%chmPmaT^#S3J?|SpG9FCRfCyeu~$&l|IpG;tCxps)>X>t|4dBR zer-<=r4q(?LLRJwd0Kf$mz z=%r)is?XDUNX@;9Gu=ID%h9?sbRh0-xbdw06djQ0aSrgexp~OZG$_}7yEPG7biZhC zHC}TA8I}&F*pjb_+vv;0pX}mNh5xIy(PEKxSfgbgQD18zzWY#irMcoT(grCx{w@OX zN||GY+jPIq6TAgKGILiVaFhYY_J*Y4P!~&gdSGP9=sqld@z90F=qe)NRAmt0N261Y z;rN1@{PiJPP4ADpf%HD#hw0CHo+zs+d^Nuy8O8P5(|~>b$7QDdcj1%Jk_9GAzw6@+ z;hX<(wG!tr5&!FIDe4%&qa3dbYYi(xHWOJkPzoCsFGGz}di*?D=OS z_+ew!EaQ~2(Y3^{q@Q=05{P=}qn0SIYs z*BX0Q6r|5S_!jR=*_7)8n!-2+GP94b7LgB0jT7fRTk%q-@;FcG!h@9jp||eK35*fw z?x##!Y2B9_7$d0Jip=J`n&jEj%m=jgCwm&?_H2!_UZ~~gZ=OG&3WoNcH(Uu5ffbt5 zP5HkoG##|%vlodF1XcR?HZWZJITve4pIM%hU6~Ux!IJ)n>e64ZfCZY@C-Z?gh_B}DkWC0)5R^H8OeSv?7#gLY;HjDrd|Y1KQn6an_$=_>%h^5}%CULICeSuSX^}Etre}} zL}olN{oLGoJ}J!Wk=cL6++H!#4zgF_sfOg@_DuuD*3ej&f2hTP8CwBFckN~%Y4oEo@%4_f&~kdR zC<;qI;@+hiBk7*9eO6q0Q561=J}_j-&aQ}$Wd-ygBH4MlQm*cc_Ch3$f`OeLdSyOt zjcM?+{p@m(1Sl2U=;v7ElrMf|cCZVo-sRV50@{ox=|PA4bI zw-@Oj^>vg8Mh+!Iz+8f`kQ$=bokT1z2=}7tgI0L#6?{4|WIr@M3B-W2d=anWtXiJY zYfS{Tm`0kDq1nn&n1KZIrh-IRj>ILTRhkZ!tK)gY>hsB#$LoGJiimVdDw zf;&uj!gtRb!R_}(#F-xHO)p2OVg(O2sU zu=H2QlbevFVMqDagpE0$-0T@no|~AE;OLQ~4@#D+mv|d?j4{QGr*|L{1Z45LtMQ+y zRSe3f+Nlc^C5=nMIFyy|qlPz`>u%-6JyfJqx4S+}^(sLR+<3xuBSyq2l7Q+Tg5%_J z+!3oWm9zE->y9-}{cx_vsnIr!8fK~F(3wJUpT4{KA)gS(Wo4$%vIGoni^lr)7>e&23SV*3eeBj>S7U;n$8>5KR%k3HXK~l z6xz(}lAo^?_I2!eseKVac;QYLt{k|4@5l~cH7{rZD{IsK{CfMEF6qtX(?-yTG^RGI z#CIaFIE6V*i32_Xh+BDisGQ?Z?y5CUDN9KM>mdqmCScNjzfG^nN0m~ zJm*>WNY6d`ZHUDBJ}n?k$!Y4C8%e#0+Rru^QjW=8kX3FvucES(Aiuz)yiPtL)dQ6b z!J^T1V06~Zy#UP2x6g$mYW7Y8qg0zBWQ|i;)QfBFP#`Hhg$6dgb68IOc4AH7uH)p3 zH*ADUX;i{TST1@_^ya8c*ra-KA$e>`7fp#H!H7^FjwfL%)Q*!-p;EM!)5ys< z2+j)}m|MZB*3SbEkpJEUfB!L(Lj{(SIf41VN_-|lpx&h%T|Ts?7%bCDcfnA7v~WgW zSdmE4e_EJ=Ykh%uL0)|k_$ZKca`flS2XwX=%s9o({x5H&Jhv#M!|M_Rir~$$eh^pz zm2OrxFZZdUv}Xf9Y4k;}n1L*U*0tnq!-<5SM)-*hU)o&vIL$_`hA8rmz+FSdYxxuyBlv6cEGFo*d_ z;8(fMw_!T5#HpooxfW6jNh1aAT?QiYUR;NouXo}7ax_{p?VmQ_d<{2Ha?XQEqjl3A zh#{D@U*I4h;zdxk+NsWclRg0R$Rp><#cs~s<1V$>j`;XYEbSOl8Sr+w{rK*RWHt`d zn{Fm)dWuqrTSezUjvKYB7apMy(cR94(?@j2wIP3Bcg_SBn*j18jT5uw214Y63 zphn^Dr+64XI)e;>`UxwW4;0dXO}wYSCO`^AkBf>YhSbd+!r0=kJMHbe)&CLVF>gYg z{Y{8#z6o*Z-$LBs{|a$h+Mk&n+L=LHD)(U9jQX2%|GSMKHIxVHRtEsacV)<0P~G`X z#9ds{iX=9q9Dg+TPzca*B0RgdzNkPn8+~wXW6op5LVyp)X=YHw&y*z6#wD#fEbB)g zEhBxa*o$eo{PP-uu>)dW;qVl>K_bUZYRZ7ofRc$P2LjlLXT9VvD;m7j8~fCat%lg&tWt- zu~9s4&Q#u!fSqd=am-dZToctcumgugHrEL}#vq^j4fC=>WXS{yTOcj4Sav2Ur>*3;(t4{Yq0iiRZPO zwK2Y<#OcP^I7#qV7+1@;Pwhv_zZgduyL~gh``@sWPHF*S*_4kA`(wYlkmm`x9BUa$ zav~Vwn~ClKW5v6l^BL*G7@PMmXc?9#QxUT(aOBC){V)_ANU24C?t0Zm`$oZmr|Nzl zc-}14xn~RH#i#NgZ9vg3AFx;*LfI6Y{wGse;O^?Ya6Zn`?_oiX5E<=1@>sF@!BtMY>4V#embH>TeDw$6+l9G&TyLx{22L*3SN_udk07d_WfSX=QZM{~4nz*2!XL08QUSWVf_O&kHp zotC%(4MzwqfxFbw7j}O;VJ#s%2u-n~BD$Y_8kl;RBx>`n%wwXf6qk{j*zh}i-4@bi z+I(q!;)BZ*4?@}^5wiGBH8|_&>;PkUw`?ZkYCnDn5Ken?s&4l8H`Y}z9P)=0ZI&#a z?C|oQl4^`r2AqFazi^v=-ibXGXGNNjFKQx^i4?=lDj}m46DmYp_EI5aKyCUFiO&LbL0;&p{_q>Tv%T*nHWvt5$L4;pLd+RvrD78CiD4C20_ z9mYe6%_Xp+`B%;c{;yX>)-w3{b#_PeFA z^GiuWkBHsk@VBQkZqU7@j;en~lfUHX`FRmvBR1zgwC}oB8^@d2hJ=GbkbqvG$q(bB z+V?6VUY6D(XYp{S#|1zcrOVQZSp-it;l{k8s#nHxEcIJsW`9D8Jm`1HuC@C#{<&KE zw8l6Bfx(m7_Zfh>@m8%ug73UoEHHCNJE&9{M`W}Xjn+5amQsnqZ&`ZI!Ak|J1LWHh zL1yty?S=UdTE<*U49?th&*0+eS~Nqms+O2Qx9p2zv0272TgoZGF7dfITfT3AmKAb@ z{#MM!IAW1jMB-UMLd)g#mphL1uen~CmB}tg&cCy!jzk6IH)8L>SyQt}aMpB~v=8zN zj+WVJq}cDQDbkSg7nV7c_LjAPu|Tch#%^xI@l>QX8YJ%GwJTxBb$8G= zffqz;08oTozMBSFem(n_xxNq^@(tg-N!!Z>nCZedt92=b>R;to?6J>#Di?{6{xBik z*ms=y_17@h^5g-A;d6F*o5HK<5DgNI&RGc-lR*JiWCK?Iu&8-shh0$eT#ESzM?C7r zKTY>rq>-KBEEMtlxa)KNb&=!@iV93?7 zL%g5tOBQXD$?^(;0AtKI<4jUzA%glKmcFV;mu&wk_z)p;p@(hL57!p#$>Hi`ggD77zvSk>m zo#)G-l#F9sHo_zi-{00@9Q`OX@a^~mG}Y&j>CP2=-sTf|;UsfMKzJM9Lo3{FCV#Xb z->|E$sgj;NwVL@;C--30q7H7g9mTXp($k=W>C2%PP1SZ$=C)R!;<|NpjVfDoZtWvB z+dahbo2TTRVYS@kO50LLbPT6&JyluzLzatw`agG#Qe*mUGpZEvM8Kw|PdyDhAnS!nAem(ul)r@XcgzyihYBWQ;|b;)w;uU* z%yWSK`Y4x}h$C@&Q$kHU>c0#|eOmR|wVQ%A#F%#nFN-E}K(R!c^f#OpTke?LeW*7d zL9Q$T>C9Y|7CSmu4^vRjbGj!;;h=T~2Jv7(O=~G&ut5P;DULwZFTz_6YqD z9bc|$q?q4xswS1XMrG%GLYPaT%ApgpCogc`UD5|&&lz7LD+dTTS(UFVcVJQ#LZso? z0I3I3P;7#P&jur*NQo8~03+!oib_p#nxv2Va-K z_sKPT>o#Rx6=QE3p_Dw0c76bOG#v0nf$z<=IR)pwylFPac&aG{$No`n9{Us!=Sm%& zq;Kj;Hp2S{aB>v3l3}r&i4ikNvW6~ZWnz;{iJ(-fbaeTA^xkb9nos_UZ(L8d-rEnk^cZrA0$!_=6QW_j zMouqE6(xwll7-8sOUaT$I>)m8HaS-k?S3cSP|pj!3SrDC;_@IN42MwBMmY|^z=1Q; zR!+h#z6;M+4w^-%8H6iz#cXI;4Tz}2iX>*ggjPw+ErnK@F7BLH#Legj4SnYk41e>TQ-AciV{FtozIVKffeZW1Ve`=h;RRtI_LTPR zb1z55<{aep3Dt{=2X51_QDlv@z{PF0&R3G&q9?;8SR8`P+oMYaLRH32T_MH%E{4D0 z?*qyn2-CXfX!jH5F;Ro*vxteJK71gE8T}`Tb&*hDeuIBm_3c{`Z7MZY|(=bEyhU*xS)UV8Wi;Ik#VP zeVI&Fu%`KQ!hTmu119V@zZUR>MG}a~1tNR@OxSc~@PrLW)&fshh`hfiED@;U=Y-9Y z#q5DinEQ9a`pAGMEU}gac)~)-028)D8kn%KF$drYOZYqyn6OVlz=SnW(wwLW7SRZ4 z+v2F$T$kGW=^B6a=-Cw5HLeL8k(<)P<6d0e+gC#wQ8GSJKwfShM_f~d$RW|w{wMNA1O1s!UOh+&rL+L>jw7zg zMIvH#CXtge1a9x3_&(G?v4w{(BUwU2wi9lu_&r&qh51wi9L^CJNqoEYP!y)XvA0C% z&s!;j41u*rAXDL{*Ups)YbG-JxN5>pe9+9q%TRsv4G(RM-Y!zJNJvc~%P;rT0ZX>> zOL^;=c9ypMsHEBfmBy6=+nMt*-o#+6C}GAGR-&`MVpziZR;+%fl=31|BB*PkcELpO(DOd8rKmIWO7I=c6mP{M0u!CUlNUU^M|V z4Nwz!1OPQ5#{FJR_;4dd`f%zj@&#?tj>9`!RhS=WFa6w?TEux0%d?b98rIk}$YEHz!WoYjXxD2VTN&=T5JVCSXd&YsGbb@AgOB+!*UfY-+WL#{$M;N48I*9u- z`|HQfyt)=ZF3`B(cP_B{p|pb*1Yme=GSwxlb(qmXByr1?aYI1N1wnNF_0YJnP0krRxY4mUpv&o^Wo+T$6QL7XyA0NghU7Z+y|wybGjoJo`60Myhq7KQV zjMd-Viz>3<8YPvj-6+zfJ!s6v2qk5^q9k(}-&#t*F3zVl21+Al$eDhDy;>+;Q1=wT zUO?|NAw;67=|_{X6t(XhXuxxq5oO`n8>mXKBCXGb9{yJ5a-%KS&$&V0gWWnK76v%+ z?x7b+7x+0T(?x4E$MvQFZ|tg?jz?{vPE$>{hew>b^bx#D=?+H2nAfXP6vADtm#vG) zXIP=Yu0*<{q$beI074rkwI5}B+4Jrjxf~Y}1^LY6n&L2fKQYK__>r4;sf{PxTt(ir zaZP`|kx2}4AHyXdl@v=Tzt?Nv7Lo=_q|?@%7@(DXXHvy%Zb~1ix~J=QbF>Owvz0*Wief)cbmGYPi(~$*&?6R4-e}?* z0GAE1_6wKo=8>~Ovp2)ipT*2nuNT=3PH-I+guAJIJ(_NNTy*Rbo$2Yc!pw4cs#F@i zr~Fe!2thKqJKZZ$IUElVygO-gzr@VJyztRU*Xdl4;5M0cFle*5+|0(j=vc2n+N`GX zc*5OgA0-f1H@o#94oQ4hYjQ*_Yh3|(N$2#!fL`b;-FV?Su8Rw@86Z@~kVf?pBV5Qx zG4Gjy9F(l%9inYXa=xWXgTX?J3n|_w>Fzi2AAL@zjDp_HafK^QDoBF!durGlnV$ZT zX2+O3hVbu;^V2dq-@ZgT@|89V<6;7O)+|(Ia>Vb?!(FS| z@ba<#Rlp5d4w(Lt@JEDHYsV(1Lr@-E@Z2*WCb%ThQHv zzZ)b`{x-if54Y>z9leVE?cL`mlmuHQaA8JhYff<0zhc6GS zwQmY-Sj&E-mJb&D=P~#Ghi|5m_xk%?xT95XlSzi1tVol7#_wIohh&{Ohfl`fT?ktr zco*Uq2^}3b%p_D&Q}Wj?#IKwl*o6!jasj)L?q;}R)~PQ6e`DY5z6)DE%neUMmH@bK z`zf$Pe<3DIXYhXsxw@cH@e>aiqkocbk6UWf!OIX^1{{DlpV5dg9T;Fki;_vxkk&Rs z`-pT$9uiP;=i#z75ROUBN1&B7ALY$rD~SzZBjfy}zkPeYK;}Pfl2m?#gYrsZ{}qH? zc-0Xm$}5?52`>xOCp~pC>HnkT)?-bN+#R>-T}l=K9uMhQr87*9pK+ZdEyx`1;s;I( zFnX0G@7!waO6#$NE@c76L-(({V=9!!aOz5Me@&%X?PKJ@<7bMNjpLAiY(oOK8mL8! z!usIQNSf}Y? zANb-p5t?nfxOg6&t0gitik`^x?@70p_VlLi`~G^*NZPwNL8z3?4Rs+x*3WGx=BM*+ zi`%}nq?Fqn=NXXP%N*y1?!&Ldy>^+Cx}ycn9|NF{&TdLREk$0WF6D`3Zrz7>7Pm5H zVAoWWG~VHjU$A!od^k^wTwMlY(oVn{>1i;i%IGQrTkhU8dctJy=k>Amg6$$H zd-`je`&U0Uh%-u@VfaCHLmJ*Py+9`!vnRzfFFX+RJ-M;q^v4)o)}f9(g#}&|2A{95 z@6r>-3o}8M#M`c_= z@K;P1NCR<6tt`4i$iBr~B#BQ#Tl46NzjaY?CNA<-Xk z$+2-SaVg-x`yck39#0v7HOq-ZDgxq?J_vrBu7of+GC=y+h&q?5sid#sRRD?$|)L2HrB3^ zAO~vVf3~kWs9%5v6n*47i(qd>y_Q5WE=fRUw%K1$CcZlO+NCt0jhj?fA6U!AC*CTC znVWfl`Hgg*L)GN!BfbwKN8m8*Nta4&^H>E}?uP?iv zXwFYBfPdSU*Yn(O#_UhjJ1#!?IIUc!rxO{k|NX|{${fs3p|&xk7pkw#EcP)UTV+fH z0It)&h*o$bGbNHkc6Y>=NT?$*G$wXMfGyjKzx1}lug!tpN6|1S7 zy}n3?Mw7I^Cuiv`TOgz-h278~*?3EV*l8GT5=IUCfhk}u@GF_b`ngj71arN;co>g9o5h~d!P`7PDLwfXk z!-!bom1=*_BdxpVkv2^I!y`5O%_A)bc%J&!c$e|e;qhKsG= zUEm>Cn?c?$7ly? z*)7kz1*~h56ihL4DXsOgfF1Y+c9w9!-P?ztao|lEhDqM^-|@dL~rSPL3w^ zWbmD@Bvv-o1UcgSU|OaO$IPPHxM2vnVO((*2g?Glpmw3Qd@p>6smPIGVd7A-_!zP2a55mSU&R(j7N6j4=}GH-1GA)S zcO4Ddi(~J~8i{bZrDzC|?iZnWi8|OKkU12<^}0a|DO|uPcv}({yWI-X{bGeIUN@sp zJRi=K)c!`2@F$-Tj?NCAE}z77yWZ%z++Ydfc`(XLjoYHu8=A7jDP}A!Rx|D7JL>@8!9w0G%9aZ$cu{ETR zd?Q#4hM)Y5?60=ESU)|5|DIzBw*6r6?-cK1fBnPvvjXM%0)u-8F#cqKd>Ejx+j=Go+5`xSrxb{ zsTsaNg`3t}8+)Xt!v@Y%Xy}4mI}PP>XmeMkrC-bS=u$(GX1(Lgl4+-~KCiqAlGX3f zW`36q0(VXgT1dHXvs#i2xkYH+1RhJMHD?(EJG2k>(K`R^&_)n9ulPMT-1>+3vZA7* zlWl=;F&Ib%XJuiBR8s`0i|oD4kxnnN+XO@5?ixX_4oAT;;8^k`|kxlXkD6_thyW!g& z|B+$qG13#2PGwh9`VU~x00tPCl=0b1BTbp)I^||7i2`{omMn`Oc`aYu*hU8qhW1cI zU&{E`UUgwl%D$=m4$qF~@%OQ3w0gqzeb07LdY^4A%Ge37YmSX${vxAzPXks)BMuL(pAD7>@zk>+vYl*{63qvT^M}UcI;c(SFk1{uC+L1bT$xFxGA;g7OY_?=>HW}BK8gMhKAJMA`#L!(~ z&}~Ea@Qe2^NB{QD8SHfrymt$JKSJ4e=)LhG`ynWaz)N_1>j+TjNDQG!VY4kskg|-! zVhEiv2)8MF2%&pG^>&iwpX(>`X1Q!nb zoXLj#7DxJ{#Wp+`YuP(`8zpZ9+N9SmC& zEiqs5*+9uGI`P?TOBY|@CJ!9wA6_&-|5bYO;uapj6@=_;gRLxjQ44BJXaAI*xQ0Ko zi5kjrj-LcJBRO|66_!>mvMyDttlLP8iPK-Z(M10PM)ubgWW$+XMNj_AD|p5H4D4k& zqPTB8xsw8T4$hHao`dL%d!EA^V}R#y6bbMguHJ3@*1DhD;{P(U5Y&eLs6FwF1W{KW zV`*Np-|0nyoSz(HJOkwJ!8@^Wj3#$?WQx)qw7M{eS7~iHr0OreANE}JEIZ#JME0}7 z-=IZ~|LRk!4|TO+7N4vJRwVR!mRZPb*s}U#1tgv@{g2`PDnBV8@bvN`&V6xxPuF=P zWj%-;_)qysy<|3+t|LcwPuF3J{F|;5*VL1N6zS4H;U8de^h7M$P5ky>zvZT9Bo)wN zVc#L84zyS-u~vxjxpegc?I(}POMn&&ud5I^(uaD?WSvUxjZz+eR4bVp|EyNJ&C-36 zX$j6DC31xo@n*fA3apX@|Js=2G$vIZm|(Q{L@9S;Gy1RnNH$%%^Ic6OAa^sEdnjB; z9$%YAPGYf^YwBiaCSU0=K!(4MRPj7}XZz@xb-}`xZawve#UO{{asMF+Ri&x~A^pCC zl-g(Mf-5Dmi;{)gNLZk}0Xpw^GZ7gV?s4FQS-iIrG{YWJ)1ltuSN0yTIGN7niRD-k z@_$)>s-?~s>jKE56rvcgYBNWjFNVW--hf|u`<1V8)~9JnLol%2TV^cTC%r~EPgrm< zU5HR2FkewALSs5k^J)?atF$Euc;~--62@3&aMrBjmhn78S+OJ7uKwwnZsTI+Ic3t* zfCRPBo03IiMR0qA>e~ddSA{2RA)nRSO@Q_Wk%23nTS;L_uT8gx_aCVSeC~odT?l`&iFTi|N#brM$7IgRAlUmOoV~9fau^>@(?kencn2Y$&nwZUc z@+m|?qQ<9A**2>^S*na*SUhp{25Z|my~ZHt2@=V%83&kb9)o!@YWu*o(l7^awZ|xL zK&e1SfoV0-i#S~C@I>@($ay^zK}~c*p!B~}u}t6|2fAR@vMU#5pQ!aTR5q_4u&F)9 zHN6pRaMMuzEIaHr~Br2SYha~m)hMmL9Mv7DAq3D=(0B&{cmk(pc zD9&yL((p?bpTmeikv*t^NkS_0qZ`v%UJJ!k-Z# zHf#~6K0^VW(R4<)IsK(_X%r6l)gX`qZvVipP+2wAYZK^tNnZ+u9Mvu%{{m{Z8{`g= zR5#XlO5*)EnLp6r&Quu2ddWntTest5TV}WF+4ywvV<1dr{ABxWu>?J1PTOK(z5U9u1(jbi*yb){a69T#l=qV1RVJukb#V!;!5WMO zVGi7QxkNlHmqP;`d}6=b=Y3UEk6&av3)0j>s$f{5pWCT?)xbMCXZhN2lQ^8XM4cKD zDBT%|`dzv+uuoOc++v$)er*1FL~Kl;_td}7d-(VF3>|qKP*k#dJZAM+i4`7?<_ag;M#g3XO-R5V zE(UZp4MK-AF5Z4i%`pMSRU?IjZ+By?s+ilSiXpIMESfqL+hK@|y9OFFXVz7N;B>2+ zVM-F_6T9vj;9g%xxZJ72 z$o*{jDTR_2p{>z}>F1vP#g~W)1H9i@(#BKDe$=2hadj0%mKmnF5%-9xnt!0Wb+T_E94;PUI$3MQBz$gMI|2vVq3zRdr6ary=5K+h~3UzNqR~ z;|KaIXa{cdTI#JAy-@;}7h}r+8rVaC2F4?)gY}qsPLZlcQDy5eigavGGQpAb zqHuxJ7DyEc#I98CoM?y#c<5>DsW+(lj?i7mESgSZFl|~cQYzCCAC%x~+?dWxmA|)- zW_I?A&T?;}-!MG9Tdc7E38nX{$PaNVXDcizzW8DJ4b>r2H$684es zt!>6Lc~j4YiX+fg9^=`OsmJVl{tO$9wCWAgI(K&k3V;&K7vK$;CD<3xX>?`n)S13> zS|&i);})du{#t)8ouxy7sBkzRU8h3%KlW|z(f9pSVIw9z5A(;H}fD(Q_G9{RCAoQsCvkFD$KHg$Qw+#N7 z{ML;{_0skRvjxUxqA5F4nE25z_4Zi;8vh0Q z6BgIK?L&=c+&cwn$@Zhlg51a*d7d7dKT)2!@}7HUpB%=&#he7v*7ILfTD?GX(5p$k z4dN}nm_$CPpH>zG5<98493yqw-O8<;VgO{1;sbDFPgNN^!puy(bSJ(&8`-SOZ36G9 zc-X7Ik68Y4+St2!0GNy!`Z-=LrXuyKG+np)Tuj&x65wFJt&v!{t^4ZWNZZ(~_x01? zli3xb!TQH!jurPVy(TyV+BvTy%qllu&WifGXt7^wjWD&DBDYL9;B<=mGM(!@A!-;@ z?#YK%fawwI*zudZK|s*{uyUy6+fli^QQz_^a8}B3lG_xI`H}x>Zcmg zm1l8_2e`ZV#~b360iTTwccJ7U;kw8$4+X$zq(}uq2dQFxfXhZ}ToUze;B$t)KMcL+ zS{xoGg$f1Tps90|fLa~?Ssa3fy4QFdyoS2TcrDzM&eo^(+Go@f@d!*7meD2Uvrd6T zr^nCGsBU^&$@=KTxq9+m*Hd~VQjuqnqmpV%rl;ba#O-{#e#l%aWfK;DY{BI%vv217 z$pg^}3Wu>QETf}+-8fK#7zTr_HW!<~Z zs{fE$7cLN&mGIDmriTsfR&01rN~2<@@@b3l7_1#1bGyRoX=qquzhApJX3@JX+hz7< zvwh^c#_asd=A_)lD0T(SwEFUtkGE~sb5DvC=4X!#-6vxih)wa+DsxcuiE5b6>3LSn z_Fb;pinrNG^}^3)<~^S^05x$8P!^3y{tyx=3r)JY!c2#+lT{B1<&26fh>h_KAvWnN z9&m^KdRz|qfyd>xh$Rq8KVt|EBUn+ss=Mm5$d8nl+!;<0_NiwyZZT?|KycVt&cUUY zeU%XROE%O@C~AjxBbnNkY0?^Qv9-hZIH(pJ&#>D~`r^U)lmNaY#()kYw$6#n_DyMQ zgGyLz#tsr9GL?oRTx3iZ5iD_&&{E}ik>}6Ib5K-frRp(axvX`6l;(vSY*_S^0oa4} z2q{pts(?R7beeskDkM1G1s4Rkv5?>!a}+UD!{d1+Kq>(n0Cl_50ccu`q5=A>#AJ9H zZl%88F6&=jKoV}St%*ayU#H>!dV@QPIYFOtPc=M-lHXR@=S=SKcT}o=c;?VaABpTb zvwMQttTVYn2M#e6_()sCJ#2_k5#;w{wOUPUW5Nm;+D5S@s6fn=?fBI6pO^MNhP4^ zj*yrdI4b(o8c}Yh58!V^`;^#4oUt^GW|St^CAqJ-vqSev4{-5o{2a$NwSpR)K<^H- zcARh^Z?O~O!&!%7M6%AsnL4`6*WHV3Okw8#PUPLxmv^npH>*ecWyc;b4#;R@%%aPo zA+ZB%Ixh=?-A+-chKT3ssO(1w=jj00IRV8-HdwE5&KCo|t)!K5Y)td}8Er#<1q|eLQn&KoEu|V^4e~8!`Yy3$6J!<;8?p zhR$xVb5ZZ9|@%s(*RS9XB6Ayy0{oD){U+$%px zcHAWuo0lq<;#V8C|ETu@*!h|mV&uDq8AcaqRcBxqPOf+9HXG-Nx_XfGp>Jb;%^Z2Q z`^{@7`y#c@naFuTM++#rRkZ~D0=K)>Y)rE&u!mtbn)&9ID_-rC;>h6Cb6fNNXD<=8 ztv-%uHW_Gno7rlWpx#w6&@5df=iKL${vSMd`V#`g=DSCv_hH z*=_)I%am7Ns9VYmnI?|z*812)=2vTW7^+V90OYUhx0G3L;yKSVjG_qDG#^t{La3=N z!r>u2my^SVQ+e*d38fm9^~5g7XU|-7EuBou9`A$qUUIA)#<nDcNaH`>)~aIOueJ zB<4NPB%@%0k+PZn-seZm>#pd|jqMS|5ZnY2-OCZ+XZNxLBwSexe|&VVT+m55coVLs zD2POE+%?Ji0SIGzno@zFBtwKTFA&fIYh=H)hS>^M1X%98bOAY zigQFnBiarY@*k*VqP{MA8Z>6&m19NNdxcGA*N&?)b~D}p4|)7B8?ATzO;%Mh~@ zM-1otF7ge5a91%D;pIIuB-*bIjRirhn2JSOT!(N+ocy!nD`jTlJ`_Dq?pV0e9V~Zy zzefEC%O>ib_4&I2RedC&Dx})vS5?SmD(_>dCp~3`ZC5(1RwM`ff@1MG5fa(fJ?R~i z!0vngz2OxE`A0PI9z|IVZyaEKesND4Vqh(C4?!uih=jMi6FQjNQ@*Wi|r@`q{S0X=j)2WKC>tBFuoD-ot& zPZrVYq<5n~q0B$tc=X7E*SSZ!AA*BWiaR|O>NU=kz0s!7#HI>?old7!GTqaO)Tql+ zUrE`%YWpYF;KK{21t*}G?r{K$X>}r?m^x`)g*N8Qn0o{=l|Fi=0`P(P3o?Oa14j=0 z)w~0p8h~!XGHN|TB}DiMZ^~^yc5MmBEq?(Td}EoXj~NDvep5)TzqysX^` z!GCG5i_~pE{rK2bD(u6xRj^5%Bw{*aiQd{7zhP5Vvr z$?1SbSi6V2ND_+{x-*6nQgIFKEedE?++!? zpP%<*zqyIvX}$jpM$| z*EN;^sU}@CauFv{e6q6lr2ih}$|`UntuEX4{DG6)LplP|buT)}{>=1oyH~*dI^U%e z1M&kAYg}f3Ug^(c9BQZvlx8eYH%Wj-TRg4RTLGl6Z8+%2fc5SNGGM(+M-Hra3$wOR z9VAO5<|1_DgCbo@cFpeQbu#C&99-Mm1&K>A zxp{esOT#&NIrP26dE1v?ApIroOH{^}4#ZN=0ydyyJhqX$3td;fxd?u!$x(lU@}p8_ z>=W!3G#}Bi;1uVl#m`I1$MTL&9?J#(Kqm4nP&{OGRF}$ z=bM5Nuq}c-aX7f6#`qDnKFamiZ2t*O?`4@i;M$me6}dI&wJHZ9Dt_pga?jHo3K^*GHh^; zp<@2MHfCFT+O&Ee3nHJE}aY&%D{5c*sA-H}wD0Tt8Cq6sQHZd~Kh7e{3Ok@pr~(!O7v^&GL8!Zqna^79GmyPK{I z9QJ+*%oVy;c{>7VGiZb>pw*R-L;r_K{MUNCFVK-O8m3FOiSDiAO&+7HveY|DytFCl z^oJXR2&Gkph!jUy1T+MU4SwWu&J&>y=b=y)RI`Iw@kQL6_`}$>PF^WhDOy)ELGw9I zZYgDUc+N9Zx;{5X3p(m`%y~k!d-S&ysiIv+(KtLuxR|Yatyk-J&S#S8;Jfv!z2A3h z^h^kl#QohG9(=dnehXLWw-gw?`dKZoz_ z6LeH>C#)3k!k1X)MAOlwD6>O=nL)!66;+_npj>3&V$i#)msDk|1(lPs7hXRRzaQMVFB|Gvgj zz>Njm99?Or19ndPBgCA5j;1I&fc2mBO(NY>-8Ob-GemV!_1ITjBl#86s5(9w9NH`ILHGwqttVZPtRefKq*%WQV+(6E_ zy*k_jc)}pKPdtzplj*HuGp^h!S`@9WxRVX2I$Hf{d#&P^!l787dd5`reDwPXWZncU zbLxmb-%mv7NX&g~GYOcFd!7@=UUI5A@^mETWE$-l7LQM&UkQhOv`5I7bFqQs2>KLR z_EPvU8>7y1H(7XuDFUbIZe3_7h%D)v-4y9Zsu!Q!9x{#eeJIOZ7U`y&64Qp0plo+W z%JSB@M9FeoX$;b1!tOI2j?rrbK1ZDAWN6Y(42;M9ro3e*K4M1hbIElB6^;#L5=1Xc{FB%%| zq(llYPK|xa_rbLvbnUYDiY4pbOKmM52bF)}gR7m^d%@9s;gbve-dN5KAKxQ=2C!SD zU6*_Y0mQbAF(IxlvZ;!ly{sd5{FrEM=Sy+qZwL2v7^yZxHxA8LwwJ0+DS%11+5Wdl zc;b*VhhN_&%i`F)VN_yDpw}@h?CmLiC_=<>h0>=Jh(^@us*HKJbea>y5V}WeZKZS; zz{@D~Ze7c$f#b3F4^m!Yk3n<9)%sH1G@K4`ZFd-xN$m{px>h>D(*!Wipnj!1M_Zpc zq;iN9%{Hzx@OdLmNyv)ZTK5;AXkB3AlNC3?Wdvy|*5el962!7kKDGh)FrQH}8ds-7 z18n@!D`*<9hi7PI0T=93TEBGs)odMvV;{?XvLmef6wgC)eP}ZcfM;MQm0dMg;`O8` z<4d%5G4G0R%2)%0Jir9GTlQTXulri;+PT1by;jY-S83f(PaF=w0vltB(`~e%7`tJIa zjBjXrCX7wqTW0y+(7{gh{)nV!XFOCV$WqL5kMS{o8@$xD*R2)h{%p9Yx;JiPT+7ED z{#|i(k2=3&_jB#O+Gkkd+9{uNh&Yscm_Gn%I}dhbQCmVZwr6&aKdU0gDq^O|eSV2M z^@yB2UCYZDQ-ypdg+T^o>Y*cirqJos$f|7wI$f+Ke>AICMC6U z3#Qj3+q&VwZW9sVkBZ-B*g6PM^kaM&_wWkC4sNTu9!=j*bXH>0QNMIduvk|k0oF0q z_P{!39BkIbk{afZ<{d!CwBqA(#bwn}#BmiCZiFV)kPboR1dg~QW8^~HfdiSV;spYH z5{e163jSi2x>98f8E4?qS|fOY5TtNb$JuQ^=mBgpK&E3b&ev3~6M9B&D*b$+7Z)d* z8|cD|hLR?Zuopsoc*;T-&<$+(|6}UNrl?T=RxzuieyEtzU=>pZP%&vr0Tq+E>R!d% z*!#cSnctMye!smKDP1Qv)s*OcCQUa8W7zKXaV)b|p`j&DntEKPoPqS3Uy?zF#$yBt z*Q`E+9F$aceL~vGx@3r4{=IF?Fu@S6?YgW<=+Q^gJ!pJT3nJ!E{8Ftq(jKB@4z^7; zu77r%O_3$WyBrsCVF14r1ja8NT_2DwMdJ;d;6=Ie=9q8nNyv5?koIgTJN5#X@+U(j z9VYlm2m@>MjbUX7ORJ_@PxU#PXS|_~NQ?^PpAEV_Q z;wTLpY`irdH~XO~)KJICVhFZxoG~|Sd|Zy!HeFw>a!6$RNYcm~}xyDKR_aXQydmy^>dtpLC6Y#C(I zIf=O_oq(9iT-U203#qsc`7w*v?_poyJn7$P};FnlkmzxoH;# zQBtb5c+XnCHo$&Q6TBjR*JuLYDAmt3h}4Y*r$aJ_HlIg#`qepwR((ZNjWyE!Yl;bG zTyNZRAKAoa03jWhq1Im?mURPy9UQG)5|b!JHzV{$;&eC$qRqbFTZ6(e~Z0RiE+hjU9j% zvp>Danmq&ip3hEijQKV>`iMACUTb22`0o3s!(%>rar4hzy_2^~9AF&Z?A9Jbb4;Yx z89i?BaBz+~3r38Ya>7!B#?x;tau&m-y0rIkW#FaWCi*I_RW3?+%kMZ1|kq2Bzgp~Ej&86Ut%h~*i_nI!@hMjVEL z*VBkTXL`oX^mPZ))7st>-;A4x<8?_c@oizY;`NytHUs~-VCK5tU0mFmER87vVwIny z&Eij^-yYHOLSnc2ghsiW3P)I2gQP>(tn1(qZL7u44+c2x#1?-XXSf|uGf-t{TnKqL z=Xl)tGYeJCG2b44>7B(H#B}MJr!hRE}$icw{3BLVwcU zZWW{GWa5U@M_*HfMseL0tE@&+w973 zNJgtT-)-O-&EzI5&X&J^$MwoG@$e#rM{{9l%6S)Kd_XwX&rKZPWBMK`Gt`Ra@%`+( z$6efdx#(uR@0Xp7s$cN8Z`IVbam#M(hlE3|=jL;;32!zv$9Cfy9z`$faRA3uAg*n_ zb4f&lFmdbz4PzJYSy~93^&)yOs#(9ghPVA%B9-a&x}ElBazf7ZDTgfO9MqhwWWoS} z?I0kqoq$NB-EeWp>JR#{M7muMrOMna@Vy4L{9Dk}Us+t*eZxa@(RPARvu&BO=}1-Q6fHol19# zbf$(%tyJgUx+^7;tn9z1O|hUTdxyJ>W=lkwDUy;M44}TSB4QJN$vb z58xtQ2nkIS_vJp_vNYkwBFCq9D9R-^5TnWcEXD-{eQ^au0?t)cS)A*)M@KWwyUB}X zdpBu7PKee32htNnxUlEVZsTtCEG5JjU)g%`DZ)#FE4OuB>uF@r7i%HypD*B=hyzPh z78+nncxgoz@zvoG0sw5f8xhh=!c5fl$5iFINHKFsIgTD!w8E=T@-;_8hiqwzb0Q4X zeT}h06s*)bk`VX@+boD{s)t*#eqD+i^s3=H=JD4p?I|vh#HTiE?S;cR)yjyTX4*N2 z8U=uEx{^>aTEP(4qoW%b+A>ppx!!P|lm+3NnooihvFj<&*F79Hsb07RQX0ehzx>!j z6HXgiZNd2gpV?f8(io#_`Uk?PNeoN*V2k2K_VcomsCQ#tR@vM8w)P`+D)w+ot8sb( z`+=69NL2y*st+CZJY7p1p<9l~&iUoLXqhZf)gO`thGnYwIb<~brf2(~U_p&|sw(TN zin$EVBr<+?!i~)sk;|%O4ZA%8@hT4`kSHLuTGB6XgkG4eUh?P{4_&;+Gmn#t`nS4$h(h^P!l=c z^2^rx3}19|!KAv^7K>d}Ypu8WfdYoOKi`6j8eN{$z_gr8HP71vj;md5=0EgZZ0nfGTxuM#5nsopC zzHTDG1s49~XGtjh3FDm0u#_`pVp_Gv5SP(rhLEa5YiGtO8TH<`Ctneh-joF%mm3->k`lc-8w2aCRjqblYBVkZHj2*O8hjTH4UGsjepzn5y6AwWvXl+;~&r)`1VD&%91=jCkLqMc#X7)(wbsov;mG6zjVoh@m#@Nfo91lC;7 z*px;kmZDu@ezLYtWzWn&L02ud%IYrV4Rf_^c-}WaMqkZc$u^jSiYvkSD-RjF+VcnP zj|RljzR+=^#8Qz_=a9e#29ndJTW5UvB~STgTtJ}oYwP@yF|VFe{3u$UVn4Z+3}ubG zjSTU8Hyz{A)S+&T7Rt)~m9wquS6=t+y)&~~1cegJ)%N8mMH{7j;6GJj^YMVG8c&7X z$W)6hS9(sh4X<$DHCXR#$^ie^52KXn#AK-bBm&VFa#IfOUB~w zPjhPc$sZ@`(k||>#njc@WE%s<;FV_V9_IwSD-r5pxTg{An{AogIO_fW~0#1QlfP>c-n9-e?Ye+-&qU8YOV`@qwsXpjCeY4dLx6Zr9Gp`+X`{AbO zb3Y5xiA-O3bI6lUQa`t-(Ru<*JE9VZ;D_>sFu?-Is!-0K#JG~@Mqx!6eB!i2Nm?oE zAyYM$b}?44N8B7dN<45++iTxFt#X{Q_{-#>Tf?+(qL&$8s)oYf*Ps*LfuDak1kmT)ur+r%}U{ov82t^${vj6+E<=+1vfdM%=je z*yls-R{Z8$64tL9QEMRDgsxgdp6uwEZIzCX7iv*I;kdCMq(<41meon2WFbJd|Bu61wa!!2VX3eXNAc+4IAPJLd@fP(SwI#BtCfQbXcrarPH$X z3!C@=9p)?VZQ)?U$L&tBRj~0U-zz2K?Sd)`FV3`gW>R>x++KBEQjN2g| z<`$(EFF(!_Dz5yCm8wHo_lXd}{K6i1cAO(du=gmSY`oscFR`?mm^OIPt~k-!J1=V| zXiXEncd_{tMM#$-`C-}63=AO-zI{Vso$ZV9`OLeC@MvtK#j-A}BfE{bz~+YgK}wsK1PH}AyQLt%1`Z$ zzM_btb$$FSe?q^`q~;XO{wsMbNoF9xb_d9E{?L?DdzmCw3m9B=sb6~ph z&7lAS^$w)?E?#FscJaCw{?m?>W`Noe-T)R*JMuPj`h5y6KMfKM#jFUMv<2(_J1zpm z@RxT7BYk`S5-H!8kz;=!i>LKXUGV1k#JX4w_YaO!fox+Qpc)z6TV2e2AGZp+M;W{9Cn8;+7ezREQ{#r2KKetTfY0e#Y8r}56wc!T= z*Ql^Iqhil|j^(7~Mhl|4rUBafr~9F>5y5+m{W=W3VrlzYfPcz4G?smBk`7o{F9H_U z?>UQ%RpJ)R%mp8PKi%i1IAKks0h3IjN6ZlR3p3`RM3{-BPjcmNvCdt#jcqYCdf(dm zFff_K#!JDd&nImVh`3gGNM`L54JLt0M3C_?x9_qJ$2`rPX%XM^I4BfAlP}-tA}Q$I zD0h|tCS|vzwJg=Bqe{rChEwOmcixc$H8W2X}qECg&$gd5!Dzj{Y(T2I9R5t zT?Pn5n@=@!Z=4ZXSCT}`z~J0feztF=&{U5}a$IqyF*vkeEOH_DcF zwU+e-gmDkfG|+x~HuUabV&%o@8MDCEY51p4@l9I8cRU`L$k5N2Psju|uPosQ*eG72n`1i^Sipk)P(F^CPp}lPVl;QuS z-)d_aVE?4wT3IPS8Qv}ab|2Tzo>LtYIxiZwEc^y=;#wV)i{nuilt}b-TxDZQ0Z!Z^ zXF*o<+t+!Khh^5h%9_7i8^T*g3-fJVWTu-@@aajy%<^sTNbNhE`98_xO%W2aHak~& zK64WvLkb)LPTXDw#eICA9M9!~n7gA=qCx`sC6^+5t?92L#8G-E>Smd50{G5mC=3C< zvvjN82T{Tvqi5DkchW%LdD8`e#4><-BTvv&7&wrlX77ZXrjaoGpa<+Rcp%dBBcJMO ze#dUD(6%VasEw~|oFD7}L=8V#;~yf6B=zswdm`I*@Sw-yW9Fy7&(6V8HyXhIN==>( zPD|$#B|U=kL6AwQzygldu9U{tjjk1^fK2eH^`u8(k~B6PyBt{1SawzH$pxsIS5sF) zC8e9iD$na7-x{#@b1*qgI~6fTfqZA_ou)&Ak0L!r9SoIRlVXzu@6o`HdR4>rzLyV3 zT4JuQs`}gfF-DxoQm}E7lo*<6xi*Z>sI|Fp%Y#gscahv#Wfpx0X9-y5XE#ncfeqx= z&N5J3@iZ=|jDnwa_qJwJH&elt@s;_Phv)?M^U%>Q(mTo5Rdw%1p82RdWE8fVwURKg za6JN?5ixE2(E7eP-zJ-MEiT|UiDoBzO#qPvZ)dpt(E)1sW)YjYWXGFB$n=ls8de;V z(Y4-*hLlDo28x{^|F3Mek+1 zMl1j`YdSaqQ}f)FO?#w-bwEF}Tdw6Lm?6vm7P7uLk0HLn;n=Rl^=a5hZc2er0n5AMI+Hz{O$%O_i962WH& zHvnxL4RddKYvD1n)T`dl>Lb>MlI|kXvWC0#N~mZnxoLsaA8{l$6}M4tIMm&T z4g&1FgJ3%9i(VzVqN_9v=0lQr=WEP3QYMEUNjfaO%cVl6TW^f2l4gw64dsi8Qt3xTx`g z>bm~1vb~G46}X8AgS~T&D(1{}6)C0**9_htlhd6O`;f z;FI%C0SJ7e)wBbFPcvo3?9C8?Q!SHu6*zi!Ph`Bm`iHZ=ayinjhySR@_IkqMm3kcz z8tO_TVAQw76dY{Ep44uD1KJ>N;Bsgk;VR6B;W3hP2(_+1b=AV7Y1?2@i%mKVHIIv5 zi$9FqE;C2Kc9pDIWr)fdF~=4?&nW`1C+bhN2K+C*_jV|GHvj$sr_{g$RVCFQxn{$igWj<25Rz@+y5asc+ zKzl%zZadHnWZNW_YroD%P0y|eim8y~JWbkEA0LIEYBSq$a zaLCtC)$iAk0%|2+3FQ$C4+}*b$+@`;MIjO#n%CeWxO5@O28lTBjzUas%j0v{y>;|o ze3DDD{3%!34E>#Kf<|&H>cdnz7;*?6O%!W#_X?#6;aO@9I*ym;&?4-$9DRwaiSr+A4e;G(hGsPMpc`A1%y_KHi1W8&@Yw?C@Bpjhsc`p92FlvDA>GA2~kg}MCwD(9&^Pc^=puBTY;{;8=0WKEgaT5Ph9zum9 z^EOsOxvN;Pj36YD*vgBRb7NR@0*XOK^m@_&WgXksiPW} z0G2x-XO31_X)bDCrlRyFmA6lOh@G~XPL(;mY8b#870S%h?)MAkrV#Y6*!y-Q_&a0gY!I^-N6R1Ln<&W*TjpcP_7SgzYOz+|SG7j=r(ADxD3s|&W609b z{GJu#`a`d$LbVl6Sm^MuFBG{I%2;xjpL%=~eH?r0YP}_UBgRkq0e%?Z-g0@aU)K$! z?p)Jp-b{^wpLGUw@LolDBf&xhVa`D3Y;1!cJ;V=-3h_84hAdZ@PTu(DTyF&*0w4Au zjD@RXR#&*P9^d+Ugh!$5;5Fhx<}d=stqC4E+ZsRMZGkLp)UK<};2T8??fUg#z$z=v zphsLvSC>B*e;^(<+2y0YfbC&<}X=XE6kd0r*RJKqKDkiLsI zgc#E0M;|9j^qnab6<4G(OE=l~VY2_nZOe}MF5a04@A?)tvu5F^=#%`uS+g@-Knp^gK>1WbuW02?eOC>&gVb$HEX7M?|p1^W#mpYw{r&Dzb z){fG+n_kIuXzJVDNcCT&0t)5ad}fT?z>dIdZzW(5Qu3w2{66xOdA%72?e9V8dw3V{ z5PyG?K^Cit-&`7+;DybtH&&K_TZbvgI>ZV+OP0tO*%skNj>9<=0t z4MH9i^3|!0vMZMf^V0**3hpMM%Mg8F64Dj}2>q9C`oJWlEm{Fg(aW_FxQD&M|IjE& zdz>6igF%)`^nazq9&iJ;j%s@Chk36;LV7aU^+v3@!V*;IF_LD-*?*{llF^r(Mj^7u z?r5b7dMh~}Z+d>e$M6p^6@ky54+$&ijg~w+^T8&D`Wv~f!EU4b(U}aH1$$F6i{Sl5 zweSm-w$JV$10Xqx5P6_8@nn9~%U9O1I0ZM3X$U}ae#{+JpLIj%SD7^QR{lV8G|av^ zAl}Ku#PPTpT%Y%+3S6UcOpuFGuoEJK8C(<23uci+0FfKRB)^9x0A2mT%yRBcs|6tV z7{km~ek<@cL&PGbWcQ%2*u<3?&_{_Xk4)ydFsTMpcg`ja7yQ$sJ*5KmXr7=Rt(4w$ zr19qIzdf2+FsMf}3%={o^hW>b(G>LFKexTyNmGAj8Zz`oP4D<1^brn^PWJ{u4!qmO zq`n`s2&gq-76G*;qnL`19x`_%_3?!)Z2;48T8COJTONIElCNnnNA7Y-lvlXCXyQnI z$KbCcVH%RIPNx>T9E`0u?*x3Adkgw5n%;i( z^slIzhI$3Frb5XfwQ^g*H~^{LG%SH!RxQk4a}`ec2djN&iiLW!8kdg-=*5S-cCIo@azOYs_Xi%?_{JQJQy4v@s1!(gYivejNm8d-FUFp&A>vz2?~ z7E$m^Hr7C^P<@Blo(aovhS_Pa0H7`KZ9@d`cLSlevl#LBA%l_ZHGnLsT`GDRI!VDq z#?dQI0>%F`e)`4PX3b&f3QjMzOCDc+>1>7H!Df^73r}sKh4}mOv1{i`B5%F+(mYZ_ z@}+Ot2o}wf56}>w;M=(-zG*{e8KflxYC{1z%zuI?MQ9PaQ0Y$YOa*Cnq>KdwCbEnLDRvGcg~{Jw>;y}#zuiYr z4(Fb0@69y{QS!fyDIKiG`K|1xeR|;>Cn=Uz@^BT9XqWV?1c^L1u4h==(%gOMeU}7l z8`54Pc>JcGaINDRL2jXLq{NW4HI9mDcbx98fcw1MN7p3IB9@;dfbIGULeX%@V&ofe z73+W2>!xi#*Xvs~3c9P~g$yO~q;C^(GhNlDXXu6kie~MBc>8ZXnySLwRs{35!VEAU zR{{;6IX1@(MU?3;6|0zcx55^yX|+1M$i~8Ph=F|@M4^T!9perB3*J0%h(kRwR#hXv zTe3TOpv{qg=`B1@(VbTpc0k~`v7cwc+l#^1RMLtUHW?cvv*xXSu_+yt&4 zxVt)Vk!J#J{unsKPb*@hxrJrka3)wOm%J8kL@5_cj{!)+me@TVg=uDz)=p4-yPEI~ zTeMiYu#C`~qRCgepzCu2W6{iNbN~9Jq=T+c%@XMP*dg4%K0?2*4<*TS=q-}}UZ0}U zyX#Zj4!SzZv}+0qUrnuQO^@X?81w%rx2=+=6>;X(;V>VaeCm^T249IDp zoW3lq&OT+322mbs#YQ;_m&!hWyC?5Jkj#A)H3bHnV+jEdNfwm@2N9Ubp6C_XH3aOB z`7bJ|tmKZV*x_S1?EVy5Md3`dpTPduH{rY87}jbJVE!)L1DL;OcLV0{km3iP?@Qx| zNdEg0H-{~(nS8nyEqli_FPK34_?~#@fiE`~3j_`M_35vl%sqaIAVx_xd(nG-7a|d|rb|ZsR^U0= z>?-4gD2C;}@YWmj?H!XC3Za7vD2(k*5z^kT;4bXyt~vxpFCcf83^;zeA&tFok)>DO zoN|tuTM^HRj4b6EQ3CH&V751pJP+wh$aU1q%<0xz$WpZ29{+}8Yv0eG!qu>WVTrjeHD@pt&Ipur-82e%oZfL!%7xkYC zLCLIncg9+}U5J0u{mFX#CJQSl)Bu+DA5){a2TCAQqbslkkg1V`CtzwM`5=}muoQA1 zWNOretpk`ES$hJeMib!Ce@u-c++)kAewrG&9lJbKG9%+%Rk`l~A?VRzy} z#?^MJUW(_D+Wi$pUr{d5s9)$i7ncaGx`|0XzlM*uh_ssOxMr`)lcrsQCnB*N*>e2M zMs2%-_v+yat0l7+9juU`P9h{#(D`C>m2rea7)+W^;KzV3N{e(bdn8d{ob5RQ=zsx$ z#?f@wM>AT6hA&Ca7A(c_hi)So(Uj-y4F5yZSDBB<@$TJLntyNTTSD}1Pqr->VIilZ z;gM_YB{87?_u12=Bu8p`SG^+`Kt4 zMdJ@i5BoY-O&??A_06wp1tyYBym>i|b5%37%Y!BFN+gUo0TP3T%JWd|^vQ4}9|)sD z;$?=GrssVNxY|GotY2X^FIq-+vW0(_$?1fg8AKK<9Bi4PW{vSN@Zk*ED$US3i9>cF zvvOnXh{!i@47nomnR<6`THUSF06V|(lGOKS*vq#839f$N9gwInhiU68`Bo=F-u8&< zSJKV-hNN1}J4Ww7rWzxykA8V~TU>HiJ-mRDpYsLWb_MKkpcCC6#^~JYIglJaK}bd* z00sI;`p!WGLx0b2SR#9V?YC?B7_Qeba8i9FiYfRX**m7}6Bo+IZH_5o^?)8ImF)Ci zN33seh5ddyVwoah_#wI1i>*mlfgU?obUggRjj{n)SY89%r>-hX>%pG^<@<(sW;FRw zr3gKEW^TwlAPRb$!q!6$#cdOPMCbZ#QuUAg@?t2{U_kszwUsz$<@9{0B0&6$)0Fc= z^4+R&MzON>m$F3da}$mTQ(ViISh7!NkTkWhBJ)Z%P@NTo8&v&GB{1q;-6{uIsRni0 zgIW|ae_2)!pHMpJHMv1L2eaD)f*Z3o^!K1m^JM}D+0hm$S^Z{1HzD?JEctP zGlB~@winqOYjyjSwONH_`p;~iJ=NcW9#sUV37f0ipadDym^IxQ(~xNYYfSU{jNzv- zjeVu6*Fn41ePbH!4P}rq4M!=+n1<#kBOXF?wVeT_zN`1nmDi@SSV?2%>b05h6=83{1T05tz-^=Zc*fs^p7*j`-?f_k=|OTyGSuVN zpkXx{8!(+T9i^5K?}RmawKoWZLDUjJMbPyWXY%hDahiG#|O6+9@O2ysnM4F zb7~Y;U0Bz8Fn~i-;80%Dlf~iSdrm;&V0O!h^7om!%@qTknN%XsnK`e1R+~kD_Sc!Y zMd8M2j$J|TEJxg|R1RL!~54QEA$eY9a#7v1)iQlIS-tTjQuMt9{l< z&dtPA%B@sC(ADL6j}2X$1?2qfdB@zThin}p*T}afP-+y_nq#G0d{4|^X1Ig3B_mhc z%$Fx3QUBZW@=nxx++412S>5*DE+&@;WhtS^{gFrQ2JpRSA}}v}-^ER8URd{;n=u?( zy$?ddWHJ`UL(ni$U!#WJV>GY4TJ~LZT{%@t@QA>KB*vpzoJJZXLoZ`!^GZ(xWPTF>WbY*Lc!pC4|cCO&^@8z^nlXGVNfGAb*>NZMVi9w}NiuA+e&t2S~S zMDt;vbv1U%k!>d_C%DXC*Q5h7ZVCprx_gj0E6rSyfrIR8l_q$!Edd1}i6T22MTHLJ zwcF#%CRG1RK&DW=@yD9x*)MCFIFL0>BFLI11!PT=ac50K^O%$3(tPcH!^LTc({U1gOZDvB`!g$0r=U zVjC`Yg~Ynu8Lx*gB89cnk3K>)a}F@F>{4Jn!cZ>bNZ_TII8G_%UEGb#nD$#v*p(UP zGH@gAw|~4iTdq@VyVbxPaFs*8}StRJ^Ym-$i5*`if9N>(Ud)%rX-Z)(bwb zMYF0_LR8lndrCPr5$Pf9kzLq7l=T*^t{Zu?Dv`yjJT?$x-E3}%cy)18-yb2RA1aJp zZ_$+hmAa7dJWT|0j!LpEvPN34IEplnYgZ+?4cj)+G8Z+TMxE^gmUnM17~sAV2?&2l zxRN6$UQtvU1k#TJAkbJ9p7N7~Ml0#2k4%WnQgglGddc-d;=?h0FuTbf8(*78x^=ug!VUu>MkG#`E zSuEbHY~1kumE3qJqGnq9+J_wQlbZ)utU|2#_`N#qD99ZqkJf?WZ}QyQ#8v-+Wvbz4 zcEC|0?X`4V$Kh8xuzx&AHq}S6fgRdHf+b)=A_@GKe?7vQnJwZ4pUu+*Ag3RU+oBE4 zCs^K>0!^!rD0}wd?-XwuA|WEXn>qJ8o)>SD1bwZ|;Rcpy-U|s@fZeB=b6<9k`iOxh zVN|=4nDTi-8C4G3`-<`h&x zvfNC0Fw&LM+$?!GtbQ`=Y+_wyJwyBorz!}D*7hYiWUF9A^upw#&;jfkoI-ge#dR|% zx{>}h(C`YJ;$pSm^f{{Jx;K-Oo@c3d7{n&+vdM`}f4~!c-0f1gEJtL*S{sH&fiJT= z1qB;(Ul3w1`+35>>GXWZ?mcTQigje9X|s$FEJA7vj@LpC*1G4>3#C|+=;quY1K2i? zr#5O|F&`psQ1#-Z!kBBc=%Sn~wa~vJe=F8PR_@Ag(dzY$dC|D35HAEiIE12sUWL_5 z?YfnI^Mt_URMP`3%hAgtEFbACXl)*;J}6BuN%M0v^3AP7@_0)qW04M6ZXDYBw+l(5TRY`&G`GfR^MKqrz{%#^WIYLGzp|g5fI^nz zs3@%A)1w{{@ZAS_i0sTbKz=*i+i>hoaG5?}b98OYJC|h7a5c47kvk>Jk~`PuS`rT! z*}Ru!9=Q+a4Syiqn<2kK%>&{bxu7WiqR~weSFdGqqlTbKiaL{FS4 zOmosj*6SnFjAt7p#K}_d^?Ww(K8gAKI`47Rl&5UCDTu|)nC19LAXiL!3ND%0z~MQK zm2K?k$InA13N|ut*TrN0Y)$(8B=UdpId*i&$L`i9$<)j{T;rPxz4-dcw9G()JB;EK zKCYsH#)8-c)I8nh)=|#?Qq5yx5hMF zF#l+txaix?EO*VrE)^paSre5XdF3Xr?eSY|YFH>KuKHCB6%l9mRz=MkY7KwItl6G= zIXwt-!5RiZzC;Wl$X6ob9^@37G0TOZlI4&wf}xW01;}%0LN6FF z$P~tGK{)*auu>`#e zE;rRuL-Rw2l<^sE;j3rmkjWk=QhYb^>bieFB1VmHNfu3?i3{XhuyI!8$e~_|9OUl{wY%msxtD9ynNz4`^q7FEM*W{<0k@| z4X!7RfrshSP^9odCb2AFb-LIoYWDaOV)(d50ha*9AC*}qkEp_L2kL>ypQC}*Fz_-V zM*DCNyJuBx$F2!xZzJ1ux)w$M$HbCH`S|R>9+x(ST%cDpFjocsF?=9)wNrhMsMCD$ zDw1qb`KyaMnWA#}3*&yQL>ZgL#NPOp_kV$$GDa28<&GUV-ZE3hYCacrT+eaEuZH`F z$lM(<`$60`0=G@GA#(Of=zRY_H)w~?qV4Am;$>@C?1`ANyT^u#AufZJGJI>jZO07k z+VJiA7?8N;6O0%gv#O^6uybi>Yy`!xQ(2ZBo02Bd8w)>gU0>H-#H1D8zYyJZHWZjs4fqWK5JlJ>6<>L`y zt^LM$7i7B;;{jomU)!Qur`)Lzs# zIZg8DnJhP!ql_{Xs1MGYT@t#?9Wb# z4%jKt12NPNF62NAwWj9d^m_%y^LK%{1PaXge+!KBU4e1BD=>?o0^9HEiR`X~(|6*Z5L4E0x! z6oZVQ`oMPpULDsL8NeREW_x^Yn4`7C@$+oCOey965%}`Dvm-c@16FDbgP@pb^pQwN;r8e_Id*wN^I2sYIGO?-JEk$jg89l5s98+~rD80lx#TRT z9x}9Z8C_JEqZHj}DA%(=*tg~vbn3J)*8a4J>KK=3c>9%hA6*v5ZQPSDOKh46zMojT zhKzKJOWacABHwxVIbUUMUFX=6^vn#`lRymYNo>W+aWqp>FO9(Np^+2NZU9c<3z&Ol zev=-H8&aj8SRY`fZYrN!A|W7Oe9L8B4|_$2%Z97$xLjrliKk@HA71M1%m@c_!QpQk z(n{n?GWr(K$Uh;i7n+J zHS+TSU6qwo@%~f3O-cmR!#gJoSTB1&E5y6{2F{OJ`L2*oj&Yh;5U(-@sarD zWC^h8%#&4>PLqpwbMWgHB&)~mq-d!U1bzuHgUE0cKCfphf=bxc zF9;m&tQ%*+!%d0Wd~J?l+X%BdUVg{C6GCKezi?p4T#Ptn${c;+z}ncA56B>n4|5Pc ztuDJf{g5HK$d0d?^?_y3-qn}%f0L9KJO2DjYm;+H>)vhenNjtN4&4LQhB+~IPCy%iuZQZ z9uE#YnB#*}gVd_E$-qfPL1SjVj7l{kgL2oyp6|Qle7BV<27k4>E#JT811{~~6LYb= z1nAvSO+z+CQGNw<|KOvB5%|3%e&cq{#RMXxdJvlai-X@Jcd`7$!FOsiXuLhBu`AwNdsrpxHgw%}3}4!l44z19>7y_1=5gO!E_K460=}MBi-enisWP{9ncu(0p0fD1zl=TY zFBg$oI}s!A+bXwq0#%HsaG&4jZo5P#K(3h42Hg%997=p_4|sdpK1&CJA<})U@qIf{ zPGi8O;}oqvTOn6k@gxpbfHGp2kQJ>tQwM*nmpC%yW=)C(AAd?Q!&4;NZR+5E*9U~H zSSjh^+z(qh^SN42?RB?k+oxfgr9Kit zD=MX)FM-el$yLQ!APveBNQ1&mNC=9_t}p+wT5{pB(j^(`VEzU)jC#?Ck}f#UIU;nk z6#!aHnScqff=px3jfYTr#zpKU@p&7FJ4icxA4`?Tmh;hvB7{M2xx`xcjXdPmU`~O+ z7$_CBK{BvF*{1*$c7PQFzCa!vs5{RXEaA0>@BA*Dn!s=?h93cB?J4lb+OvuD^HmMk z?c~DVgk>}s;NOzw2l)JA-4Fq3@eD!doZ%GB-UE=eoiQICaY!I>Q_3A*cj zY{P%`-7B*V{Se9XK({v@(?@W0D{RR1^%yn|CXTYbUXkTP`tx_h!)B<%*KwBMdzk$* zA56(Haj&u+fj~(w_M}rL(w-nenke6{8S-I4Wi7mnr)5omC*cp}3_3_TlST^*H_j(y zn4nySnGxH^53W4arSV)klNtVLUNp~!hO|JMv$r_(s63ryW?%tzX5EZqnq$=ke#&u5 zgvA$j=ZRM0XPcKf5f(_uYSvZqE?(R-WUc$L=Fxh_Hsi3BLm*&AK!-E=7(YpOd7o(S%s*{b00DG6SbmJX7s~0 zNj9rFoi1TivzFPZHNtm&ij@gxL){s(KUYwL?3AO*%COQjgS6KFqH}Mr^$Ii~G%ni4 z8poxp0`Jhi@&|DQQrly<^BFef}JwYb8916fM30u?MC>9iWPR_%0Fw`&Qx*__Urz0Q$ zai`^T1oEI&z_Y@%Hk1>YSQ38(i7ZJZyeKgnSgvOW@&jV7d7{sFreOjQPdq=10@}iK z{IGM(Tw{73sYx2A zzb8~en)&TwwvZxx`mwBjuZ9Ok(`|P)5aadx&M~SkD}!|ym2@WZvk4s=1y5_ZcX^uY zm@7?%l-I+M@>>aQ$l?@V(9S)Yr%$SF4Z~f~(jI!}H?WT$OPfnS_Lleim7c@&2+6!m z0D5-m1eajQ{3CO$jY^bg4b{I7t49I7CN2*cvJ5v4eyh*b}RWUR9!;cz~Wguu+<`LHG4Xh*U()^x*rQ#PjMYZh5jDNET;wtV9g z1~1ez*!(gcqb& zA&*>41k4Vik0Q;Uj^jlvVIJ}%3WVK*Ug|vbt|NH{6LDJkV~c*e&50+{%P+1XHIqi9 zZcc0_cJ-}TRTqjC#b}{kpzoqt9KYb4!!zEg#$7sh z1Trx9QkH#i*u}jB-%rBJ*KdYso(J&*bLNkhkcQd<)NR;HFj~FZ5$)f~2Jx8{I;znhd$d2mrh2J&&<7&n&Czc zOFg)GqvQ^FFe{8rOxw}H(S2K4+c``jspjrO)^riwdy#HNu)_W1Su~07<17oof3pBQ zKv@74d!Q@;iW1iO)yMa;0LI2aSpctyftj0j?B%^I0JpVYSpd~EKo$T6@%{d<>@f}~ z3*d1uC<~x~7RUnVkp!{;zFFU80n`9l02I_f763)z-&p|af3g4)dVXX96p#a102Jgv z7C-?RkOe@Qcb5f_@}De#Zr;co($G`IB0x^z9(khdp7QRO-u|}zh;n>^tGpv{RhzTC zLu6H(!^r#+`I2&cUG*QBlULZIS~~-+-AIwDK`O;{HRrlc%=eGZM5`ihMO@7iMe~_# z8xT_M()y$v7YL~a$C0iID=uz+Ig=8G^;1u9X;a}%Dckeyo^F~_w*N7JavmNRVe<<< zNKGq;gGkLdFn^Sq6%QiM^T;R0vbh$ptTJ8eQxE)>eX69CoBUc6{E~h0SS@pgU5r`) zX5FN(U0Ewqn%vqiucbeAKdD2#FDnR|_+IJZ!s#AK4(RO(^sWEs?HL#WVxS@*x7T<< z;mjGg)eV_+Ybmy~Dl7bt+P)bDq_)3tlLM*k5oxojzaNABtG2)Rlnqkbr>egMsqMq4 z|5e+cQU)3PRNH@VRe+2pP@BH5w!bb@0IBU$l@mZ}d(jv`ZJ(;NCI#&wX9ZH*U(*`^ zYWv)1Ky6Q;(DP?!K-Qd|$C8w(jroX(`E)^6>27IovE2PJDxNpF$R**Tt@~rc3*JP1 zU~MoS_T1^d&Bqx;U~^Lw!S`#ESO(BFq96Hljqq=$Q#!OK=7(Hn?RMUN6x9%z;wa&h z7~%M9#DuH~!~tB)$KS9%e3ya2-gq#7Opi&1iS{NlEyoFN9M)+eD0v=QV{a85bF6pH`Dm^F z=vu&oSA6`WfN&p5NHZF`u;)KWtC68UNvnEg(S+a7r5vF+SFRlKuzQ{ysd#I?HaQDG z#dgb{3;gecS5HurH!+HU3)^^gCO`F=s~)Ny(dERU#DQ;uB%Egpgg-dM z4CEJ!h=LL%${%F6M7*cioRu;1{@H$NdLOhgdv4@)t<{M)3w}7bz6Z;Q`LDZR9>AWx zl9Z$buql*2Iip%2G;{RaOJjD5*0rrdynN~6ajN>Y>J>E)R@MLTCT5C`(oNbRV4@z2 z7fWFwzBY6Wt05vDu_;qYH`BR+Q@(_2W*?v0_yg{F!q)>D|Mr;Z?ZwQi5Bt5PwPLqLGLhUR^ZG7y%3t2b6*kzBWMy&RWA1lg+rNY5INfhF2j zg|?y-TesD^3hPq8s1ZbrXyUW6BNbWZ4O*{V^eST2{kN&Q*F6K5<{-X2v;Jr!qSm@F}wt_3FFU zK)oxDf|vV}lXTv(Wo-B0K4DFGRUl ziL2cu^4pOEBH1}^ty`F&g@Ts zg?$0LRTyxnMD&Y4n?T)KvoigzSbud(lKZ>4%JK^$_#NA~*8|_@QNHzDzT2j#2Q*o@ zymfBw>2|?K-TuajNN2A$3a_OT-uqtOvt_&&j?AC2QE$OfE76Qp({HtQ@;NvrhP%Gb zQwyV;X%w!{=G+s4+;{N!2Tyozu7j=)#%+x|-1SV_%h0@4B+3vM&&!6;mvmX^VZQd@ zmfk!Rw>Ai2_!D?_M3>4MtG|%lunRjw?N_a09>POVS>`@HQcyJ~!cRkAl<^?Eq6x|ZQHIcO z!hTZH=rj=}u_wXX>|~L-I#J_--i-dF1S^=deyJ5-J3U!^+bRN@fDk~~w4f1kAUb;y z_0qvp-oYwi;BiPMeU$u#OR&5*o7(n)R+Nump?@^5Tj#a-+XtS<)L)8XEl{3!og&<~ zYdRr0hojzQavuby7QJcxvo3zA(*$$^g}VX_+A`lJ@Ogv8-mto+cPD-f&`tLoKT>r~ z2i{0p+uBq`p&dM11AyZcop5-_(JTP~(WbrT3y{hdpWT3c51) z9kobjFjVqXEZuFc9?V`Qn+)T5o`j%giR$J3fe6VN4G|4o1rH={GT~{mFt$?}bq@-H z#4oKm-h}T?3&Ev&QFN-?Udf%T)ao^LxAmGJJ6tHq8a4>L81&>WaM5XDM>Qm8jUTzX zPG%9ky;BzTv-ca-BQMyOxM_w3EaWLDQDuS_>BLQWL{r`} z9c<3;v}IT-h{b@vanva!KSbu%bnoK|d(LIz z!#Us!dd3qFc+^O*s@zX&SUVtQwa?e?JWO7^d~!BCN6W3Bf1-JN^Y%K!_#Qlh(GY;m z#Z{A#P*L~Q>GV`ca@RAM+x>DRWLPOo^02lEZI^W$w|OmGkWEFZ8lnUujA{Y=gnTx1 z{Y@UjQHV^$P|PyC2c(z;za_tJ1W~F!F5!7O$!OQG{esR`?s)w)XRf#7b)C%e&RL1@ z87oWF`GH1vlO8dtJp+%u9rT95rpavV9JLpJA3~^>0T|W47}6PP2xY+qOg=!;0rW{A zkHc}muWyTShyU6p!j{tSFqi9sHTgrbrNfwCtmM+n#T;FOR- zDS}FZt5Ije)MjV$qRny^m{h~uD+;CCu%*)bTt<93kF4j^L>7@}q~QWacl}J!E9=5p zleD1slox$TVTDwq&9e{T&Ab?ZM{%#k~w#o!&hx0siSp!XKjH9|=f#7p>hi&+3w`;6ESE};9&z0H_9H{OBo zgcS+1X+gLPG%+9`ggMiZ8FV$T$C8naJuA2q4yV)&X}JG5M3=d~+i$`F@?1ryO%Bg1 zD~R5A*ez;aATT3*7(LFioxQ^n5bIeW ztmtkxGIuz=K0+%eVBR)m@b@Nz@IXnO>pUi^MbZxXdBp4p_w5J++CEK?uU%5R8=L8} z&8}=D0(#j`DJh<@iuX115YS^%NYV{Ih`|pfEwzzLeDy5~wo$OHZgWC6;Dl44Jg z!ono_WYSp-j6ByjA8sxq59d_1F1Ot6rsK+3>cn&LXye6Qx;smj+D|h1Nbk*j@|Gw~ z2hMRk-W#*h>JKlUCg^diGbq*lK;)7VZWoA!EL+i)12ckrDnh4#v-;9 zQAf}L_YwKG*0T75cyds&kYKfqZ8Y%wQ}1nT{(EZNoW`u$*M|i=+pQEJt z+{#C9OOLZTz%O}yS_WC;_4An-#`owZv2Z!h>i$lp@IOQ8LaKwaY=BA8z|G{fLrCee zQqtbzYvLE{YyCQ0U{6)dPjL{xQiR@5Oed*yKwj8XrPyL{kQcvv4(0P53U>^m$#yE1 zo9o24EK}pVC=tEqxpIc|v5^iN4WcNx4J(ozkg)+#4y@@$0%dIh??B4*vn#IWAMNys_OpJSrpaGk7DHv-E= zn?reT!2h)Sqm%^4ca@Pfg<15JGB>N|ofvrHX26P9NVcaP;#P(LYbMJf6C~`ouMk5X z#h#IW_exbDAN==@=VL%MZxKI;Qz|w;=9;j!J4mo0t1Y@C$GB zmD)+*g!W)zd8>;NFQ>JZQDeVDZQ| zli(kZ;V z&k)fG-&4*q;?ob`jC(gecRZ=&E1J|C=jgz|lRA>(jP0{2xLv&rUi_+93l3P*5cF2- z;Z)$X4A=#uzBZHUQw`O_(QBA0_>qlGWvtxI%(Pc##;BxlaI7Oaa$HFg5*;2Lfkauz z^_HE&s`5)cXPHIi*Lt}AjN_g4y*sI+{=L|-sEUiTSEp`&%$LjApjOxcT59+KD!z-= z-|A5Ts7G$)qYdCcg2szGXjx&#`?+X7gJ|&}!At(~K!9p&=b-V)XvTvK0f8&{u$tXi zeGBnjCLO%2SgcabxtJrScZFAuP&!j4R{jF^EOdziTy5u)+|?53QtYEDou-&|%!}@9 z=gSzPgWT}tQ3au^arzS9S9El5ulwz4^bKk%Yq;d%@I1-_X_%}*f}57=p+wvh1_^LB zT%Qrcj>ig#rFoBB5*FCF8NLeuE;`ZBpFNSKjYninkRKO$k}^OqPT|<-C@0%HQ^6DW z|LSky&&Q#)6J)mRvD5H=I2JA4nSQW0x0!1MpZZe4ATW7OOOM|pcg6886;8%Jm5E-Z z*0<}_N*B;`xIbOyA@V%&4Oq{zI^1)5eQ$WL#)HY|X+x6L{Vj)^--5YVa?RnI8i(O@ zSS{dmG#Z@*kGBrz4;!MM1|~!S{e3$4)g)PCxMf@~hOYDb-1(f;7~2XB`nR{Zu{E|& z=6<-+HSi(dcJz@P_%8i^I-Ur0CP`}K^mWq~6Mkx2=!aBU*lCnC*Xn549;qpu15NU> z?4dZ{7lMQ?FOEp|F%P4WH;TK>1Z6;0X^wSA9yf$>0BqkkR9YVljeCHq`>MjLBlH5L zj*}p(l4gSB3Q{Gh`YdEv?qWsY79TH9FHd`GCqdQW%2%Ahbz+7;lW@D{duwOG(6=Y; z5V||Kh3)5VU$P{xQBiiJw~Plwo(HS050ikZ!K{DpQeDZYtAZr?qyP zmaow>UUieO4qo};i|_7tL3AsHF8oq@vNX^`71!;}eVv~&X+_y&Ou2t;D3j+Gd-=aC zkNh*HU5D#o&nu$>a^FBtlKJch_>`vTB3A7{`wd&He#>%qAnbE!jK!lqvXU zltn0nXBNdM#AlQxxumfHJISe#sl$J9j~zl;)XN+5Rca=^wCuvPJUIw1GXpc%DTehu zE*dChZqKw{&w+`JgYGE@f}-l!BY!;o#nch4+fH5O@Enf2(3o>i%$Gik%o4sv*^exe zlMX$6aeTD_fcFviY7sp6zQ{_jNXFn$7H^M(U~0~k95sl6^YYo{fe?@oMHHaZwuVyn zpKu#ECN;VR_J8a~3yVrUT@Zo(%un;WufUb zPw!dcgjC;T+)KsG0;)d_{e!H?$RyjvSYl>K%_NvEVhJ6M zn$G~LQUf-<~-ZnOiS{y;;rh@SUi3;HrQg;X@&ys zlz=u_ar}hm^u#ScW?!{V3s_z!T^LIxUm6iLEGRPRmRn3c4vHu>_f|4AU?q@??$)+~ zsn@y!i8O~-WHc4l-!=xwR|B)7PzKe^2#ZOUby+);N8toFa30|Vb+AHd#w#Q*i#E{d z-+}AGfazPHu2|bcg9FYYJ!1#v2YJXr{g4N)aZ#|gKI;nwps?KuNFN0q`Gu$2Uk-=V zd<`MbBfM@W5$C{ljc!gaXOCZ;+sol%ez<9j&_`oOGgP}ur+GRheCO?z|7drQmM{}s z8>B2Gl~!8?#x#}(RO>hpuXM-3T-xVA6|J9`^ie6v2)n$cep9o>fe@Y$R2K&*b}H>< zsw^A534^j=ig-1(DaBSTsI(hlf$JlHDxm&iG+$BP8@VLIt5u`6y0{hC{IfI1W)rF7A18LU zNAE>=`Kt)(-m6bPw{+a+sYFh22qa7!iqLWz_<5v59;TJ8KDX!=$CY)~>UP7u&iQ}( zT*`7QSa0+sOdDv0>xh=rg5UBsifEFq#8dTZ$I3jF-sQwJm-7tUfshYv2xW=dGZUze zxTf4-o{dqgT=NFgPUYyM<@~V=*?lb+N$?EWYc0u!`0N!xOHEG#@o06s|5yr`dg0=- zaPu>4_io~h?$95?X@$og6Y;B_%%bkr0(SmzOQ`qFV!gJ*#~qefI!7GQ8C{ctXI0)N z!rkSwZ+0p6gTqUuZDm?>ef|rAO)vgBLzcgnb7dFf)|w^ANa)@krAoms28Fd5(RrOT|mImkr z$sNZ)Ri%!GDQCy?!3KoLug=mJfhw0~gL_11g7hGm$geWO>oyVhs6wvzL$bq0H7KhrvifPfsz<#A$6oW!Zl=UMd^{Eqvh9)$Z z+a{7w-*>-9NM%pOOTv}qjb`UuHEx}PmoPacki_NrK)aJ0*QKe#NZ~iVz)a!WTw&$( zbB1=yXz6Iw<(zjwfzWkNHedyV8+ zpMywTaZak@vFZ*eIMe&M+*Z%5+~i!FyvDz0NbcEX760-)bpw=88P}54 za(42yV%ztLyR*cQws`8_TiJm^y%byGfqXm1ydrH>NyXLH^44;YaVBKl2X%%0T}s9$ zV}FXuvG8K0s_T4Sgc{MpMibtT2s&}g>2?CDPjbCal+|{*6@Vi%5%zVrhhrKA+Lm{h z4N3rH!fzqk$3BY%AN%PG-kq!SQs44v*RD^-o$8-QCT%$~A2Qd_Lf_%F(n>U1L9prON60IE0?o^7wqTXx+^^Y{on;`7^E=h7TjyYpo0puI z*5kQegoI}^?Fus$=bVmKO=x0jBo~Y0E56rgn6@fk*K0ry_ug->Hqju@2G}#*d>pac zaP+Hn@M=0X)ZMq4A6*JRX;ocm6c<(MnDgq8bHBS?l4(~2z{JI?6hFt=U!q!uxA=PL zp9Cf0AzX6r<<+ppU2g76>h{e5ZwzbmPmx<2*9+iuZeU`-RGauUVd_s8*jkT&!x`Sg zopdiVk~iB|ou4muJaH9Uc@Zu+P;c{ypgksvsC1lX8C&T(|H`{w;KT-b&Dz4X99{dQ z<-*6Xv5fSo<@HYajD^1Qnrq$~bL&N8{?p7T-{-;L%up4R8nbP!zwut+qK9#fM8BNReZa zYmh2c;2EDOt7PyAD+6Uxj0^pdBhuCC4Gzih@2`5v&WJrr5TSu91<2w zgq5XxJS$?kE=|uspSt^Doh7?kXrowI_ZqwGP)l6lRmgSdIu->0^{9pbP!B5z0QFvT z-l5)1$p1jSgQ~|J%3nu=S4ZUF;hJWqN8O~{?6&OgxA!u$#)GJGoEx+LTgC_ODK^ii zo_Lry3DGE4JiP70*542hdv8BiIroKUpl5ma)fvI)Vakd0giiLae2eq1g||{ZW5&R~DVYN#BjZT)hTWUV6?A!rXT9?lnloPdxg= z7YOTM!_H<7;tig zd*2vv$#g8N_SPz660nymd(su<8FflqqxG645D$37Z&>0S=@{0;m#0R~NUdGqoom?Z zQdXW;>ueY%WloI}+k5I=blvw%>Qj*#f=Z!H5BOeRkF1$W;bPPaRQ_I2NH%GxJ)`m! zcTWvz@{x_BDuR<%jrE{klEi_3-`4C+ltZZ03H#|7$V%zQnMcaZx|4Yi`LOvQx>$io zvpF8J)dZ8}X=SCdPm9=WS$1NPmHhC^oD~6Nqe{kDiPoq+Zgsjx%h%eb119)@WU2p% z7(HWozH_bgI7iisRviu}p+clC;*2jDEN%JLUedQtCRLG*_>3xjm!eV}bhc-Sc(< zXARWE`tJ16`g7;`PqHq+D&N4__}41W>0X_X;8jNokSzEmx3ebJTlMwz=eJSrY3RV4 zBiKc)7B8mC(PvA2OWO6_9J^bF>rx(a?4gBZQ)C0DSczyX9eM;CW0fDY^HRj9xmog) zoz?bQnKa`$Sz9UZ%0G3QuPk_|fahcaySe04zJUgne!g>dTDpZ8b^B%Gm{o!5hi3!| zYLp9X1eOQp3_b*t00qYA$CBcEN;s9o+0UO~le|r+(A38qPkYOd?wl$WKE}!!PUq@J z`zB*aJX^U{et_5j5r@t&F-*MheQ=nx!aO=ox~w!NU5*(x>DftnTJtB&Gzop19ayK_ zjyqK0!sz}_z`gL-Us4zx$_q2tQ-i}Oe2o(~*3COke^BI|uRh#vp^tQUej(^i^n7sx zcO~>oa@!p!jajd#9>zv4Z^8@OqH>ioQ10%C6=g|M4{Y5JVO7>fa8+|rzqHs{`Nq`} z9O?A|KZRmlmBVS0`-waysG>Q;$AB(EDHinO;KyMG^tnil`7eV3Xz_O$({4RsJ9W5~ z!C%HgY!gW8XEsXeBU?xcvT^Yjp+mpSU74Lw_EDVphhnnjpgK`9=EgbEU+1DaUqIOi zU~~Eg31V}G1nqq0ju|x4SqF8TQKx|X2pu%9;MQT~Of~3$qY5)n%%jtpzu?GoDRbE^ z)x|YzybHD-!kdK0PVrKZUz$7t-MJi4>B55yrNg0lMGk&`6)LaatbBL%_~!j~YNwl~ za&c+ZPyWXSN8OmSuA-Xmn4y z0e;>x@nOm7s_WI&)AynzmunwsZ5;?Q z4l*Xl@Wh|eH(AU4VTYdl%G495GEl3L3(~QWI>3K_c#APE+P`Ja*s34{<!oC+cM9*~XdzS4>YGWwwKi3nOT@-sb&Q$8PHXEOkLk z8k#x z1May)%0IQQ7Q~VHW4f=Z6*Ik0O9Xpnp_scVet0m}Tc6P{LSY}pO zb}2cD)vv5{C@`cpRna+0be{+2)mOn|*;wSi%}Gaf5!%ACS@`2d*ZD?+%CjN`$@Q=r z%dBhhiu1OjCmBdo>>t}7oZ+0y3EEB0YNiWCu+VXdr*zD4Qemsxr-MoBc%I#c)5IAq z4`Vq_Q>zDom#82px7hN#*P$djAT%*Od-1HsmnnoV#8xYt@tg83=QM~Z9MBi#8^Wog za5>#KliA7|f6`%K=rp&5zQOnhj}p4P!Z)wYVBD&^_EjRsZ918qkW!jb&?FTpft3^Z zmg@f_79|sO@8{#w+rdGmRRTYNb~MEP2knSYu$Mn;c@_6Iiu`%FwviBYG5Ra^s0q}cAljg);k;BiQQcU>^PyDlb2=X^OP$_N9I#_WHi z9T(;F35J~OTwv@n0JLMY&#EXqDd8_UzmFrn`>R8(K@=gzQO4(#&@qK$>5Y+VIp9m} zg(4XOIXx&w>2Ts2ROvL(WyvxndF2^SEkdl&ey3@s{&6Z*18{tmxTSUm0{6P;f<095=6O-mCJka zCt!}n6%Bf^z--}%j^Jsxz16J?kCHL7*BVai6VaGWE8A~rS>}*#^iS2JU~Y%iX2<{; zrVjeJTHwQ@tS7+^ImN;K%jHxCe>Q8_j6;fQ3?kO!t9dZlfp*ADXJ8&gI*(cK@z`=0 zrkK>2y!y8a{(Pi*_>qLATTVsT{@c0HNeeY>;Tb5hF#4^li?ID3u3;wq5T>2kop@dUWc7e z`<>AP)XEAEWN*err_Rs)SYKOhjVsBkr^Uz+vYwh@%j*3JFU$UXW9ep4?w7fEcLKY~ zpNf18Z|bhliR6EP;;I9ngfQ_Xxiu#S=pYwe-aV+?Qz=x!gbxV}4Gd$^;&{Q&Dc6DT zO2u&RZ%PIKf0POp*gupC!*n3}+W*lh##sNMQ#b>3ilKL%V)u8Q!u4IJpnKOTqQd1e zor9#)#u20hvpwqnp;M^;p;LVMf7B`Bfp4E)AGatNBlPQ12Il_ST|cI4Nto;4pl~Ta zFGjN$&6HwFP0Yz__EvT06E-3r44pmWwba{bE6diaObn5$vbh#emlx5j14*EcApIcs z&ySFCIaHot&POjMpCC142JEiVaw-4XUF}i7{Jy*D(+J@WnhqcShk=$6SyHjeMlx-W5vZDE4kX&ZyZgDb74dK}VdKVq&MjEficOZnyQ^BYscuoqd+a zuO~-mg>VRIWl4IoY~Q@duYSv~MiW-F0r@KMYVe%yGtu+OwZG`1lf3im{N?;4h|F-} zX{(PMi!ef$l^MoG7$#H1=A|S^)rXt=K>h-{L7x>zDSb`IQqQP&q)-C^Dz6xd z5GgR#w{S5+ej6P50va)d1S(j0KQg-PzO0C)wp7g&P1bHJlVND7=7(u~`UjL8H(uQl z^4LKt3an`AfH;^k^T0T$q4{1J(2{)xOD^alIxpcR-f0~Upbe2;cQAa~#8ULmw?UOB z-F@wAE_OM=_WcK%&-bDY-Du!!AeoVeFS0e-;U+K?b(+B@64tv-1N;Vi@QLt6m`N!B zQgrRZ$uVC6-Vpq?*C+yz=+Fx7Z}yt!janP;xfO4s1o8xUi_|2t8(zwb<}WABa72%*3t8b7aIIG^fsjA$H28WH*8-lF?QQJW*b?buKJ`mQ__)DProm2%RIIwJgBq zn{urN$(u#7q@a?E*6hn;&yosGC!5iPZ55`t2}&yZ@sa^$#zdU~zyA9Bwqr&$=a|NA z61oy&Mor3pcd&#j2Xv*F+!2=svy%EISYEY!A&E!L?-;&Y3QFC95z(NTMe>3O9vKo5 zy^p3P41ckWxU=|qcDKzp_wWxzM9KI$b`HOZTD<)E<#p#b3ePDgygd2k9qY9UYmBA| z54(yNIVyDsu!@zqWez*v?oG((iqB)*@O^3N0PUnhp)p=v7F)KVh;~MCZPFp3;Y>kBI6K=WcL!>$b*?y>+n*wZnJF8mtc6+uDa{yS}nyXwPvhMXmA6Q{y zMOx#(xOmd{`sMER@!{g!S`&1qEy3t^``vSC*~eqq>}>Wa@toC=>HgGIfm`&m5_+Ey z*`r{iTJ+PN@0?L+qmL(6&vh=Lq5Y?BBxav7ir zNEEYjJ$`YgKIl`!E_3x$GVc4tUGO#bnUVdMt@`chZw?kwS94x#Fh5TYyuoFVl|rYV zsd98aN3DIE@u?BEj43!qIIpcc+Z+Ilng>gRkO#Wz^F{4y!`?TwRRkH`KbVrn?WuCD zhGk6Idgo<*9e}yBRzaxqhY?;MsXpUZR{g3XcToq}W#}9oOFx8o7MvM4g$YC@Hh|!1 z3J^S%bi6JCZM}x%d=HI%@U^54g0QX92%hH~mzPXJb89ycReYx{^@DMYgS_q{*drmF zXMDJTGjLJlATw}dk>N6M?Qj$dS-3gsq|9CHOhODEcV+R$T^on{hAeUoRvY64|2!JZ zoE%@@kH+F^oSGN_a|*ISkX|(+zd?=f&8i>RJ`r5I;`$o6wLW)i6o1`akThTAhN8%2GWLCHJAw zOMr?fXitYt1Yq);3SbGW_*d0ULnE$9jL^Epm=Tj<&cz$8leHdB*vK6(0qm}g9j_IZ zqjZ|Te<~pvT5z~Vm~$J;db2n*CvUy;zAZ9vPDy%jNf8i9`q6+7g>X=n7-@)M!34rC zoX_AG4U%KPFw_rs2W3_^a(d8V-I9@kapjP{W%onFAD>BMhQSiHlyVP z6W#cEFkcW>Qm+R@<)&{7+kVM?G;4LxR;G@zvn*Gj(xNtOoN+4OHE%?S4La+0y($-y z!klQeQISh{saV{RI0!1$hA=`Ikc+Erc!gD1P(Ey+1z6xGA5%QffPK8Sid6 z`juP3=oVEqk(iwi0qRkH@y^jd7HlY)j?W)n>$rpSF9LIwqPGw}dg^5(h0!733(&ME zFKN_n3isMYu8?DoDm!_Es#L`84Aiyje08hnA61$3HNe(6DKSrSF0PJya#_S}<%o8^ zs*Z!_P$7avq}=C9BnhMQZdY=LAFF(oxmyu_{Hc5wc6+V*IypquBEz6Q+OAOyo)2so z_JdgZJH@K^z2!?nU*z|PAKvN|yXvN{*>8n_TeL9}4ac|TqgR6Mcb(o4*3^-4u>nQ` z5Prg%sDs)f%o|;bMc@F!_z=>(&NZQHS3= z(?Jw&2<$dVFLK_-LDJS$WeO#a&&z9}!&!ScaCDd*zco zy;NQ}lnR0N7A|rH@3+r`U`2#R_g^KFoXqnY%`Iv~gs80s^;{&z+?By!B*wfd61M0h z99^E0VUqq$KIX&+CmKA++L5LLxW_#4)%L*29`q(2|w&_{)=&17xa!_%M#oPT6ggkyRSfpm`*M9M5w7@cA zpr&caGkgNZectguu9g!Y_|oeZhJ7V^^vDii51kV2q#AwmvkrWL-xAap@4CccZOJ!D zgOz1A^FrCVs^Ub9j?4|OBRy1RhWK$ThSWMcMsGN>jwL-bAsxKmR%L7(a05Kq(h zz6{9$KN~+W#iI4l>FbOYHF?SQ*u>hfZb|nvV6-U^EK#3^VFNUbs!!%+rn?Axus9qH zio$SdxFy5`GE$$6#vh+CWd9H`rWc#k#vh3X2NV$I#JzJT7+WHvt@J51$uqC|t(4V8 zQm^(RsTx}lyt)-gXkKFrMXeu&Kdm-loo;rPr=edHTZiC_a@ zfexd#cT*qrfGa7#b68lgKOOo5HUJH@h-%8HIrue&OI{vda_Zk$*_qlcgSBRpEz<9; zi@JBMN(LXh22lOx_zdgmm)O!m?kK}r-`mu`v#9|8l=7uM9kx3x?A_#e`?tyQz=xf; z(-RZe&}9aT_kA6*=+l+c$_}z3+Jk66{6u5UnirYL!qwGlD~3KlASs#6c36A=>A_`w1>AHVuO=8ct^UnGR{`T?D4&p?DZsS;3S)Vn zI#-p^Oz;)fcVG@0o-uILAA+No>|1tOHvDeeif)Q-!?4vg2Q%LE!!$AD3-*xuzHS(W zVjm-gv#N1z9FOKAHifsU3LclANp}*UwIGFEJE0&4S?BKY2t^f0sy{7{tWHAt0pbQx z(0|7bBukb?%o|K3DC)k3zPqEj<@gP?H+-H4lZFe}mLjSv5b`d3+X!o4-_6n7-ju$Y z44);!d#(?-z)&G;fvs@sNGB)U2u}_ML*<~PGBat6;#!s$5ixt^fYadpal4jPgAWCM zJXB)+WgYie&ieScGw?r&CIX(K_e9g|;BSd0pk_d#2}=l&XfhD{EzuN&3~-K5k^mA- z1mXj2L#?6|{Kklx6GaOYc+rPoW%2aub<>am-rNEE7iP``-3Dwele3RHRuJ_3YNDfH zP&QM2Q>RrLZOgTdkg{&80DGgcHy0=U{i!uN2C4%RSsCYFlss>iXkQ%}?vs$zS}}|R ztRZ&ot!6wtGc>ctA-Svq?@1TrEtny3EdUWRqO8-{bdxb9{~Hia*CYhXw@ol92f3CS zGnAo>eSK^i_KLW5g69a03|4MiSquSZ!czvAPm-=|>M@*s$3!FI2|;H_=!g7!-mNEJ zMF@9&;Gp~T;;F`y0!Gj72<;`o&mnK*%nn z9QljjNPE3prB_cZgpw1FpdOf~Hu%WfIr@t%b7JZ$=n^Y~!r|1})M-4|5>BD&N49e3 z;*{!}M>#4=V++N<>}zu_CamK-Liv2vM)*W#(v*I?b{1j;mWjCnz;IDxqsdv7-qw>b z9Cln!4#RraryL%ug?E1&*cPMUl{`EOzs zfSm=QpgPC(aB>jQnV&*tZVKaGIl~eFX)JBNh@N|z zsJbm+NFOd2H(ZK)9bfnNo$x__X9Z9oYy&L-YZ>JAx1>l=ATK0^*m%B*tTrE*$yFe~ z5Wi(0HU#z9LLS7gJbUnpP*R1jzAVrpn<=7jl#rLV_!FAQ@_}>K93p%K?-9suEmBd4 zF|MV5gp=ss62(DpV%7M=@sl#?0Z9|S3`YG(L7Bzi3=k~IDnI~|?>r|EDY~nu8qJV_ z`P23JwD{C=Zy}R}(T?eFF_R*_dPB~P-Y4UL25VSbjQqM7@BjL7{*j zta4MS?W|0MNfCs3Rkv1##@qed4xH^z^UHKpmfMF-jb``)Xrt8C9O(s2TXR=;#Kl+{ z6Hl4nRg4zE zrx7-72X?Ec)h30#Q~W3gsLW2ai##A3%8Th8;&NI4XpR;T)gOc%Km^8%Ug?kYDBp%6 zc_nz|`45A%P9*oAt<)Pq*i}Zj_5U_g zdz;StpkKE?y4WiTk}CcZhD(i?C2YCIjE3-ZdHRfo$SUx4T75>R0WYylL}C9!ujs(# zEi1BmvAeGV82oDE=E}=5@*)1ESd7UiH8QSgI#szb7p9b?m0SJGu+<1Rr1JH866%Zg z(K4bEy^KcGe>{FY?5=CJyb|HPi-G_jy~|Ix5Y0=ldu-?}tW!RK%dg9RDKQ%8i@we_ z5pUR<2#>51YzWqJrBHwD#$P_a*P$tNb(gWx>&=V_Z574`k9$XH`!6PyrK!#$t?E7F zmolb{|MhKc;qrOEzTPW!sI@eYff?e_W)gMrqYBpcT3s1U+S2g(JW9S+*{{Y48PLAIMi8oun| z*QFePb8QNYv?`fg)*Cia*s<;dd&i_^Wwy)1t+(G7hTEr7PIh&kkIfHsza}$}PV^T2 zkE<_b;n&TM`{s>&{)cjJ&5!vQ@euK}W?{@q3YWEYhMNGQ&1@lp454KI2X({in*&DU z=SYTssGfA*wCDgb<%z2pW4UH&$^WG0P%B(`W9{WPjLCB09j;eq#_G1fw-w zS10*Suy?({VoPHlpo>(y<{o%~(Em%~$IkuqTI=-oxcU4FCo?De`Q_FQM+$X}wOKfo zX4shaQzaIAL;)Aeb0UdXEZMlC>=T8^V%E=UKz#OZ5p<}NiW5$g=vN9MZ8XC3infVZZQE3e^{lC7|H z9ExCmW-&pEJ3ZZ!e+nE!o(j6VVRXCWBQO-Vf^brBTpun;uTHNlKF&|FMlw3Db2^2g=xV_4;_!^zTeI39yJlL% zf1i2L&8mr*nN#LI&hR zD-Wr`_lUXB#XyIEmLPmcnGblG&G+X$^7$AHwZ|4y0M_#Mgvt+q^m%TL-(AP`SLL&3 zPmhM*z2)5J+ohBpp_Tub&F|*&D|8R^y!C#}OBR5;+~I9K9P03z2M|D?cXuL5qzbNB z+fhK$Y8fMH@G={dzy0Wg~EfIf03%D|B$7=f;` zn}}zm-|;OdMDhi6IgFsI0yg}_G+$iwu4TR<;IxQ23jbN8SQds|$Rndu>u0nt$3W+(-~RN5t#=mTvI!4T$;M6o~vjOyAVBCuULGa6wI zxbd(ycLx-Q`^%&7*hQC=Rkf8RGIiB6*T_QngT$rdUG5(vhr7Jb*hjm3Kg>)I1bT_} zBGXYL=v=|g$GUDtsz0)ke??T*lOO4Ne*Aehx?#mgKT$d?Pt95_q{`Y%yP$~$Qr{E_ zBzX=bS*c+cLhb1ZzL!?9#}cmbk5NQtY$NEnvbTB$kj|N?jt$9Z`TjMCxZ|?53sSih zh|B{@8CRd%a;BeyaMk58 zV&JyiTq5{U`lEqaYCMq*<{c*!T+-wQ#D+pyX{4JZUTXY;6IguNZ6C7!)q z;z_8{0Ub}1J=5uGzMc+)$KlO)!PkhC4Fm3a9X892$cstQ&Au-OLhx^MU#J_qnY%6G zH0p+1URn|w-xd=b1WqQ*C7(%8Do&_dEYd3ZxIpx(|G3)YJ$FyDa)1N(T4j-WAwj58 zr6AB=g`dr@yRFOG72%h#yR2pdSEV4>j+8VZgCGa^P)3fj|GmKtsu8RFakYn#ai|FT zjv{hI)amt+w03v`NfzSCw&Bc&!vDkGTSis2c7LFRh)4;D(g;X*cPQNr(%sz+5)w*x zcc*kWN=bKjcQ@R%@#xX>{=eP(@qXE34~EKcjc3hg&R@+y0VrDMzzBiNP+KGpGh3j6 z>lkAE+$JlS2Ka;Crccq9uD7I4Jp(EG@B`vy#T%0axBu$kE_j8C@gqD09FKe0 zzz>fIFrcS0MpPJZQT94kl$gfH103aJ;TfGBYc%#x|0>nu%buRJp!tl0^Na77@+Fg2%suRu!+xAYU{HM zMy~unUZ3g^4Q^aNk0=_ebl>P7fxmBMj{4@9nEUE16zB7LO1E%>5R=^4PN23<|5;oA zKXXF@$m0JyH{_eBG0XTg>I#2lIs(ZEb`#8cKG*_I_T!4BTV$1_C&DV|NiT&p2$J3k zt5EJS7=3vAqZB1;=zkpL;x%(~oKWbA_m#x$%et>8eC`7JMEZJ54dA{(Pn z3U{*G-5VOg@`Z<(VwXOVS3~%gyoMNdPyB4&_oTB+`IWz0l+gn5sT;Eg)}FUd(?WKn zm+zNVzjW@K<>Q+Cey)mB3yO1h46_bZ?gAD#H06n2)%!D@iw^nSEv-JDZPXRfZf}9` zBhL+g!8(C}<4E1ll(?3aB62WW;`m4l!SboSIIa z_Q?JEZ9$lW9@j!FDeQ@bh#nG*g-|6(YccQNQ`C_lgpmaNL%+w1gR(Owx*;TH~G^Z}jyIJP|uau`u2cOJNK>@3sC?%1~;m zInzNA$6E_s7B~F4AKZnsGIhPhQf1@|8&8up7;u&7OnQ78-CQ}nc(|S9jeqd~ccg>k z%DMXNqY*T4=?(*zZqR3fR2aJrIzmkhI!js+O|tj-Le(E_eg2hOq#uGIqf&BwH02Ko z0}P=yZw_!0&=NQuS(dSeixC`*U)O8HN5Kouf5_02RrY;B95dSdH8a*km&f2zOozYKV=; zK5dSx_^q%P@VK+o{w-6&l@xn4%3j>*DmgV!lf*D~-T0Oj3iK;R8Uu{+Rj`cOe?;~G zW4w|W=uyWikb_pVhE_ECi%9RkH_OWMrVR7G>3zwXTh3k*8yiwo^F#qwOxiLbm7uP` zar5byfJvS)T|m30J7+4w;5=0Ol;F46HPU%gUnYI%iyS8DP%5CUpbGeY=-b=h-$%uM zGoh$OG8+!B_$7cF^3qapfaxhhIsEqNqh}c26CjMQCE=W6&ER6;VPef53F8?+v)9Em zUh}jp2q294pr^j;rF)yMAkRuw(SEm^H)F73n4ySMLq<^XyfH7ggnrDYy>G zL%~)ntdp>{E!xJIUChdNQ{9*oKoKnO3!gd@k(d4TSO|8$MrnS1<}h!U-z&1JmhG$- z(NHfJGuB-zTshSOXGtYfBzq6IsXzYfrk>DP<+^Lng^w?6(pfFP$G8kYOdW4CrAb&2 zyZg3FU%k-Fb!0X2v(TO~mrAbq8 zHq^h>)+0B%6dNaHFOUS80q}3h*xSGSi_8+m{fEqIGC;s)vbS_Sr%wdQD1QsvbUMEq zaL*WhX^sGtZL@i;_%O5S08T%fu*8rlrc{H=3w)sRb`Ul|1HXB!qK2W?)N5`q94*%R zAcIqLpODW@SM!)rOb;n|uJILs)H^73F}BZXwkjf8SbQ_Mk2Q9gA>-IIu2z9xrW zoH29^X~|f#0US%`dprA74! z0J(LPAKg0E|KrvX9lkm_I&G!_Wx2fe{g>_xr%e9DsL}zjoz{F51@wf>s(5i-DOqQd z)M9@qg7vP|0j@KyP7$DQPGET{Nj>~`{yH3e)Nqx2^d|0Fn|&liYQV4g>vTM{Ek64x z3SNQb^*(y-J6{5_DknC&It~jmA9)5g(=Y&3=Y8AYH~N#I*H3YT2VXx$3IjeK!)>VH zfN&dXI3T`+8t#v9o1NEBMfcq*pno*_>%$4ZLEk9U!eZhxVgZobW$d@$$o8T5;cZsG7mF|DzSR z0cpj5us>?WFKPg-xCfvW?|S#B6}LtLwBoLOfL5FsJp(5<|5Hccu41}&x5Phl9wEay z#p9gE#a7#6M`&}5Y9?-D9lf)yzd<<%47^G8r~mEP)8JF-13g?_1j6IqQB?xTurP=c zSp7JSjU%?0FM>98+D3hr%s67>E$f1wLTMN{@j9b10|3`=2aeK)YYEt0dH;3V3wtEV zAOS1US8x7~os*0cptXgOOw=Fg!dAX!Nc_uw<7-W(!6?0hUigiZ`Gh=QKkI`H#~M%4 zDf2c(#?G@XBHuQ>W2L;;@_Z3SdzFA@r`|_0qT{eSRqB|Yry~#0f_HPr8$7v6e zGy750060`+2yWzSBAnOP4eegjQ7CRLx$0X5>zDNtX5VZj)>+>OV}EGB8uK=nFV+C|WVI7^6H5kqxT`#Z$9g$2}cQ zzjl~M;xm7(FlT~QO?_+E{x=9Mz_daBPlyRgM23g}K69t|IY_(GC2h-Bu{_r#K|$b| zL1rz7zBMBUILyW7BZXjOnJFRKJ18fC5EISeY+tO{vOFs^VpE;<)w#8Z)p8Y2*6cOo zU@nLGrX?K4x3bCWn~xy0_;5wkxcJa11aj<(Vrw2hxMe^BDB-8 zC5Rml`4G}(eT(Mxi{>&g;0!%G={f_Yedec(fZZpd0wvic~e<__&-q~Ox zhjAwRfL98g(&mDg{nVvn>;pxGf%9?ZK-_1r9eF{PO+~%R+aFdE4j2Cep-s0uH~UT` zF$#7iGxOHqR}88dMIfg`6@Vu`qhU4;IUYYbui8U6{c3J8k5G=OqlPWC0O_QaG^yi~ zo6+G$=Be6xLO4Aa)Y{Q%`VkYFvb($-r^`8+dZ^ffx57|{S*17T8o?6R01^+{lIazG zUFdlv_0>#U-p`=9b7@|>B_>j<@jmO1DJ~uDiZQIN<^8D>*t`lazjCd5%p{DXX2l$eJErTpyc*Wi zJ3S%P3pzc?>NVb47u5-=ll`XzeN_!l;^hV`LyqZ=CM4e&4qkF(U1&1m>rgIaP3 zt|cg=OEpDPc3Gd8Ucuds%D;$kZNY7!q3v8b{H~=Kly~CkikHni)PkvPF3B0nOJafX z$zc6sZAXo%CFTl6Y335-lmsgZ>b+j~8obxL8hx?zNp+NLWgvU`bwTrf|&^9i&*W!JUK+{e9cQ*@Oi5 ztNR&sz8Lrcjqd0F_RUx*63i-^Id4xSl+rgky?1P-9fXmB6-WsV5uy>jM3eB8xJtiG z2G@S5vY@0e);KR!(nKsRHTuL=o?;w(pu0{np4sBDJ0fp854i6EzhuIgCpa{$ZLm68 zdq|W6v;l(Q{d91dPj$si)lt@vK9^jh!-?hzIoT}3K5)qO^w6Vdd>?pkpyhV5)_cj? zrB~G-Tb9q|ryu2txLV*|!ss)XK+{)oH9w?y6CemZ3`Pf51^x!6uNJW{{;CQ1Aq=#C zDp9e%>H;I#Upctj%Ebs%sHP}zLSDPYakrn|_Y%c;VV$inb?vFOJtcL|-z<3O z(0<;82=EZ6d_w>a;e-$H5F>n#JVf%_W!V>;f*m@ruAesx?)bE&0&-2Y`f9GP2V>4` zgiIczZdUrzsCPC(if0ou=XH32AY4TF0JMWf+K%+blcqt%JEL}(C@S$g8xCS`VdlK*To*8%L;ERZ*&EEGjrM~p6LYP|4 zm+&)Ah~=owI*V>_iO9haDzLr3B>TbuCId|eQH8(*bD>;3&0AoL$Dm>uWiD>WtF4xG zqIeGE>3r7GXzGxyUU)dsx%i}TxaIwAx&(TMzJ{whxt9rG4L3X6BWBpV5v6Ll6fMum zRZ|i)_31vOoOD)u?7xa&i=Z@wWsobnJ(n~m{E$P=WcGyI4mEe07_v`MDUXuGjwC^j z_6Wa0(CYFS^Pf;aHJPdxN^t)0PKe6MEt)~;5mBRKk6RBy**r&T#SOrn#ZAH?$$264&I!jcZ0i=Xh z9wov8!XukMg-6Hbp}&LG?sD+|Q69a@29!syd;#SV{0N{tLL>kwkMITlw3O)_ z2!kBp7PrpJ;(EgG15J!z5Hde+RL5~e>wmrPmjTn>TaOz|lt@MGkz3=yru}@#WtV7C`*KmyMwg|UP`7p!GC?86=X_ox(%h#v1?RG8u46=~B zH5jw~C3Y3}SRhM}&pm@1UrxrfP%kyUTq5U6woa9}#4cb*)lE|mF zs{Iw9j9X$;8{f?q6T8nj4y9mzFhvEJ$Ppbq$7Y>+zEG(Cu)#S?r*ipZa@2C(Gi1z+ zXNstZGQ6!9YS8SCI2$ud)4$_DIH8Rq>Z2Diqun=Fk0EMRpEnfB-r~%hffrNbjJpD* zTD(lLwkM+C{YMNz3@kHw{!Ei<#T1a)I5pQu>y+c;ns%AJT(z3mC>~C%q>~smyP};?mav|f zSp?k^gl{-4$~{^FQyRW}E8$I_KJ@gf5tLQ&yy`{J>?~M z;{p^h{gtJ|vDD(o5iosf@AVZ(BI-;(%V%9`&ZA#hkDnYMh1UCEJkbJMr4m5{tNnru zDZNkk-Q{;8gK3oY&lJlF%Sr3kf`|gWv74(@6O8@cY87@ry48xw*w#HIKFvB7->>`V&S;P+j}h9GaC3PeKjWiVZvkT zOJ41$tFMVjNU+8wpZqOm3YG_}9Q9qFbIg$AlQUJ{K)Qe<3-|P8J=^64K+mEWlfH0o z$tT$SfL`$Q8vc+I&-@u*Gn6vki#r^{BJ4xvcU;^jIC)W2mDZW@w(56wG^tB&VS4p1 zC<#^++df8{aOzPWxsx-{!5&<^r|&#;r)MaG-*Dj7Kl-M+QO!G^Rl;oC({j~wlwZxi zc`q==Z+!RBMZd!Dfma()j6uM87AOg-xEu4Dk$g~t<|8`9FDeZ%{r;%H^14{6?#v79asl8I_$d zrB}n2evrYhdx^10Rxs1_y)K_5#eaXmqgQ6_{<@kMX{LVXEwF~3=>uRlKf!><%@hWw?4ZA;H$<#S-v@-d8;qV zclbYoK4vDC40HitJ33(OJ)|&p_tWyLzQjh2=b{6cWf->S<#+}32F>bkXwyWEV0NDV zk+%GDq(VDBNZXhRz$+t3E5qqo|6mRQEL)mrRD_|N1QG*;R??;DH$ev@{J>$k9*ml; zFr5k_cKs@uvNwKVn%zzlfqobNm_^nLWRcmT;C9i-Zf)+`#iqdlS!AJc{z4FR$mn4_ zM9WM7jveYmA^S=fOH}oJoB(F26Lal9Ft+?}82gN(EfNG&O02(8d`_(MVFHd=HnhMm z2~VysXWCw0O6~UZSGV+LYp|vu--~A)%3RPLqAqKM^qdXAm{F|WAXvbi zkG+9J+=QpSf)2XHTj$&Y$9_Ncfts>57M$p*KI|--p$HKn?x1^5+tUEk94u3&fTt_* zo|S1QQ3L>#kdt?WDytv3a(=7Am!hjsrTxktxpUS9qi2uIyWL4Rj1w8N7=Ms_$jPkb!R7osJYKe(5 z>KQhSwF6b~)v9f#1z?;u0Ttp`gsUu9QB6&3SEwJjl1@d`g!Xog3vq{u*lV|w{Q=Q+ z>8M13a}cMpw{B#?h9u&pK@Er>Q;Mdu;wt9{A^6)yA`Q%q?riw%3i}?+eDn2Pl4|)4 zd(AH=1aaYh8E#hw_o5uGCbY-2oxD9z3KKX|~LOOf1) zHQsP#{RFy<)`lWcCZI>xDkIURf`Wxgdd}%piy@-b< zSr|XuI}HU~6K9L(RBr~2G!e-jKsxi?ThRh3N>@2hc@T4S&C60oSHa$Y7upjOgeZLG z9|x?DnW3+-tyO?H>Nl)1o*`kO0wbT#6O{Q#)i=-!+8f3^WObqrC$O2!%QOfY)p&!` z3DQvy&h509N;t|tW658#BZ4ABuZJ`EMNZQMgIYG(B`W|~aq0nwbJsgu=TjEA=99r6 zp7}dzEIQ4(Lp8VA|Ar|&i1&>NkA7GwyXX^CGitQp((F6qy3Q>qITdIg;nsX4R4OXee+BkSzXZCVb))4f>E_gAq1l+cVfpTvqr1nS2(c(tX;C>32FhBw(SyswGvAh-6Tr{O& zDZs9-FC+@*JvD@ZqNV@R@Wqp-u}EqVkUxB>Jdq6EyRB}_c}9FJ=aqb2@v=*9rC-^% zSjuZvqB|t-d8b~k?Mbqoo{bHTUXTq+vR&m#c#=LWb4RbO@kdZ*D9In0p{6?zSC>mE zOZkJkWAv(7zcD*K?t7&V7b`kS@MQIerG@>Ga~I@qLqrm@&Maa7-T=YZ%7D4HyF5&ZT&-Fv3@sfqiCK*&EwySykv`8s+rXz9TjoFe0&=^(%>6nxmq3GBB-1umd|^y1}ZMV~#C zyC}#*GlmAi#i3)?H^DZgh=mUzH6-Ne@5wRAZRWG+LA*6E9~F?s)RapC^HHmUdRz8i z^AY~zeAEG&k67DD*k3F96Z+}}n!(ZQ%5-vk{1(X@2sjja2=syeEk;$l=C9y7x?kxz zSq5lw;Ol5MSh^vA&firItBI(bea+`1EA*0UWJ`liKK?9(b%^LH#8oFFvKQ9d(KpXv z-n^E6578wU>F94APP=`w|23d|%Cj4sklpHc%zyby(13Kgxk@$>^`l#{g0Zh#skk5^ zsoEA86z%ti>laa1NJAT}bKA_GPwJp%`&eH|a~7Of{mC!%`<;5oB}-(a4l-hZ^o>*zpWYF?+;A4z_5Q{K7k71-iv>gNXR0E@UgpkP(o?EdC#)~7v(`AYl{+%5JV z`aF2nNfHQ6T|K|adtpDsVa@QRH;({P0=b{4L3nc9%V8VRMGr?X{@Wnoi5#*8M(v6- zi_w2jnBJiG`2orUnw0ys$>c}ImqIAG|C5_~S%XplY_M|O4j=~{$Jp+}1Qcu#Q0dHU z&rmI9;iNY|ynHUb>G%@BU_wU||8N{fVf9V?ljG+!Fy-2(n ziTa^02}MyCFdW+)f3EwVEmnweu6I`(2NUfc>L!-yzSk`Zq}&7*zg$t##6rqWZeAUc z5{6FB9g*(DTWfttP*K!945?gby1#Z=J+8~E)@6gceS;g04rpqBFjos`Ie9(*mqDv; zqorAx$N1E8dUZW+D#LtpeLrp~2lfYJbO%HAi$MeJ%R?__{SRa0owAY+TD=2Z`?$(V zxY(qFH^iD$`Xy&CstG_EoifA#1lo!!U@sl83HoDUo?B|~@7+6&>AgR9S>bHS01NZt zr~n3S9{4J{kyQ*@nCFyV@V^W57794M)fcx;L}-;gt{WotzkpJgMn@tYan07wXDOoD zy07~wUj1m16u&&?u;k^IGl_=w(%JkjE$ErIlQz@Lfjp};2H8u{$_qIMvnzh8ESJJJ zk@jm%f)wyadgggc`17N7Sx@HyC3kU2T04@98v>{AG{Nolo9io!=7%#K#7&-4dLBu| z!(^s;zJt3YY^KK6vUzS*Y#|NW)u4+(OdtUM2+LW~s~)1sci!6vrp#&J8luS$#|T;6 z`I6|`Zn)iGsKg4f`HT5x{&&u~dy`pqzaoM;hmV-&hbx;Rn+_U+8bl2@Y;|SYwTPJ- z<5UMhr;iEn^jn{vw_bedn+Lv314Hx;7FF2H?X;TvxVZb?G{Md*Zof&4qgy{a7ma3$ z?z-9%wGiF8X+dV?IOg*+m&+eB*Q!4gcU=wb17OCfcj+uPGU~4u`&@0QaT}sS_E)`` zkArS57tLHxsJI+aaOc{gEtV1-4r`eY$5hT{XD%S*82e)!$tDhFZ7gOnFZODy_k!xr z6BEwY$DH~pU1%-O*O&Zpu-l%J{dl_G=-glAd@I3uBGBl5m*kW%Un4ruAUt5UNr&C~ znL3-`!*-02x5AaXMY5a8d=33T6K%;{jKM-Q^FdF!MNfvy@vh48W^ltKypuM%<+vsK ze$uxDXm^*feTQX!^NxaxC4TdE69?e4&E#T{-@J9lVKHhW>vL`Mt&T7#FVrvMk1A6% z=bc+$52`Zu_K#I&2dFX{9&gTgeE+U8jgM94{_e5LtO8Z06!*VX#{IF%JbU?AWnTOj z>*dBqmHsE#ASgnn5QB^2Tjzg+4RE>mzL8O8z~g2u_Y@WLLg$}8`w}egxfz6@_z3l~ z8Gd^IlFj^+HVcO>?ar;*1?kJ+jB63L+LWzZc4Wv!p@nLB4%0Q_Zwn( zRl>+dIC`&zo>S-eNyIRXZbeMoiyeW3hcdi4Vug9StA%_J`Xp%Z zEZn4xMU7rT!2akIyMLk^mBu&Q;Yuzrf-&j!&Ucm%^o3#GkON~CEGwZ5WZJ=tweeCp zG^Q;!j3SdCH;f}M0|v%Usqs@Dx1}XM&A6pmQ##glTfvj&-C|MHQ31B4CD&~jpR0{< zDrW3`*{_Xv^E>SytAKxBvyxPhH#?BpQn76iEX*PF4L$M=_FDRK$O1vLIuI$j&3I8? zdv7-kV0i3A7gc9m^={l8-ykU*;3&Thq+L3ss?5JA+B?fH;m@XVda-4Mi=)=!;KW@~ zxijB8lcvULnNr+Rt(715VikFVZXKZ?-8jVuykv{*7R)YXOMt^Jx1@4U#uW*y*Q_2D zSFaPy$J9{Z0(Z!jp6EV!QAcPR(HNyuam5H*7g2IyNn2jEiPn^EP0+KXTQa!>*;O{V z5Xsw{sy9SP`_Ww&Vwv-XBemef#gQjwqjK{Z^JFtM@i-K5v* z(QViofN)m_yPYxR~&$A&x0#TNNFy)UAR`}&KA*try1_j3(I zi?OR`STFYzLkAIIW6n*1P%mt67k1|q@0+FkWJ6ASJyK%iO$~$r`Bdz{ipf(b7n<=( zt!bAu=?}q!j9`K7);`6Up1xj5*!w|er!)|tcmy1*3Wf-7>Qzp5(OF<)`!2`PE^=YZ zotTxkH5l+8HYIugUF@V2MrQ(t=mLJ%<95mGDkqJH(8YIbG#KDC1P zMj^!N-Vx)i-?QX*=Cqx7Mur_?t+HKd5`Z6MBQ)v-1R_2;;0NK`U*PBBWP@RIVSyK5 zk1$pFc}&{3SrSY^$E2!`IISXKh=BL)%PC&q^SBwh#u9Pd(DXUAeAconxmdw?f6LxBAdSxG?h8hBNIwBeAVuv{ z{I;g@euR|!nQE88qHEM5GS|pUT8do90gPIysboszbT7^@gm*$b{Lbg0AA3%Ak6yf5 z-zva~1qsV;0byBDhtAAlruz~Nknt?HP`U?7AypqrG9y0e*&}g@S2Q%3nM*`w??c)5 zl~v6VZzcXdz;oP<=Lt>9q63kcMv;0_t>ONVlhSP)cw$U65-(064s4`A+9~GJ(TJa6 zKlhynAHUdvZ;U9Qp0G&0wKQ>o?|lUbN8e@UxJ^2N53FrWOU*f4<$*SF_vkvSOid#F z{aD1ZtGD)Li0JEO)#m8qxEQ#^P?FtZ*Eux5eXTQ~E5_?+Cb-3l3hRagPwf6-2jIVM z{3r5OSJ8vEJ%|tnbdVbbPYmcl&x9mGiQsjQZk3QfU7V2Lo42WA`iL+j5x{x+p?jS_ zkn?D%N`{o8N1yQ}K7;iGVp$0y{&^ro<$Jp7L>aqA>cBU138E2>C3BWIu>>#4z!cBb z2wn(88O!fagm|4ko@rza2i=f3W}p>u!KkbJ3;;vg%IAnwR^Fk{^Zgzil_L!woDZwk%C z+C(qH)o;wj^S_*qUu=rlSa@vJ!~1^e59p&}+Zdl%DB2rvaUl}B#!l@N3XExF55_&m zIRQExx7M<$W>w7f(SUEkxTpIxD)5)A2U<^XpP$B710w|K0Wd=NHQe=&N@8&?H@Yux z!W=MWw?a3}#P{d?OwE&+@T(W!8<--tc0;sS={6sM&;|lIlXukZaSlrN%@B{(x7F9-AK2z?A*MUyNwi)8=S<=w`bfI7XmK{UXwB|n~5`kYVW;e_qDus(EW1j4;^wBnR3j0i+A~v^T$1GNbqe%4j2~hl~cq! zM}LxtxIVoU=E=8{re%JbW+=&U-w56-Auv7|&Aegv-Lda=dVWstcX*1;<-2Au7`xx9 z@o-R0Z#WR?2u=8%9^I7Lf7hi#VO>vXes-9BW+H|-4r`8Iif$x>;|RA z8FZpWPo7o$!0Sn0PD)sU){`f>P2GL|%^+55^$_~35Z zRSqkIi{X8qshawE*8Ye(!czw=>erArr4bQ*W(HRM-F@4kK2XWVEp~JjWLCa}zQNY> zJ24*W+&I-CfN$jX4tF2dM?p10aez^j;%zijDONc9eR7?3#}^%sy9MV_a_vnU`AdTz zgW|B-T&Z$Y?++aY-~UwF84+w_vHc@$7SW-^1}R42m07ST`OZ0Pdo};)z3S^~ zwXMZFap;-Bi{>pe>_yp?8SQ@Qtu!4l~% zE-%<(_V=AOBd-^v(cpe;KB>oz9dfewSnH4Y#*T?%lFHJibEjxu_0P=qiCAF9qj-NF)$*(2ZdEP|RPgq%*4^C%%Hgv~ST-(>84-(aQ1K+sSW3#3gX>FA#}0K3u>MH-@tNCW(xuis;WM@p`%o4C=QJ zU}@qu&d|4=yZ3^(J@gMO+lxOi7md-9s# zBZwJAZ8&{REP;DH!sgWehH6g5iK^TyzxkL?U$(GbtaD67mbC#sl@C~6@$SVq6VXzZ zi*V!G@>li{hJwp+M9-N4M z8j@1Ym?Zggg+*d9@xZ@jXSCJ`ycGYtlVE>LQYX7*)84yzs}ntDYlH+v#MrBT=@Yiq z6i|d5vEX6n?k(I>`Ngq8Wi!`9%{{u~^G`ga8Ta8VV2?eLOGiDWM=Rj#7>P22Y+VbH ztAY=t^avT&yfPS+80GGqvAzDx#j>aJ-d@9!ZxxpgI`})^{hW0?gx@FkiiD!IPQpM? z=mh5z<81?!OD}?V+--dd3~;CIm^-iFTJLpcu&VsQG~Te{w@e6i;UA|zxW1zK+}of- zXIk;SME9+a2d>Tz(GBvJ2~6$hVt;wp=?O&Ghk1T{Yx$*xnpmY?%d~~c3ZVe^UKs+K z>pQaPQY7oa133U9ZWiCNLc7OdY)*8oa}9U3hnj2|O-bNzNpA4aaU2chaF;taMMgGJ zJqLCTJ18G05`5io=6;!1UvjcCcqmr4c8kN1y@?V9Qf(I^QHDQk__C!B{BVDb^IV-F2H3egZWCbc2V+G2TNTm6uvP~6OW5d_hZ0bqx z(qj0LdDx&fWxJ|2O|0?s^1f#bFB>=E+* zZJV3$*Uj)iSyq8o2Akk%_f|BmDS_L>cCf#FM=)wbfn3^SA94m{xwv(I8MB7k)sk&+ zWl-4Krvh3(`Fa;Lp!IuwpiY28HQ&fDt=hmoObUlr<9dPf-V*$PGa3V`Va6d$GDO0w zA4kGlx{PEXoOlNl5zzg5#H}@mn}D`mHfLT`(O)w*MsW_8Y&Y&jo2wmchgo(O?W*Oh zqC}>)oOIKMLCab{<&TX%-sop{x;{DyiBVZg0G%P-anF&*$P%0*^IlvUcBuznqZuB{ ztD7t{NS$5{YJg>cszW*Je3BrcF$A6CCfc1q~|lwJHfC}~k%c}w%@ zk!JAY5x@IE-@vp#XU+?6(jysDF8Eod1=Qu&4l#V@>AYlrdDV672&DGP zLbO{H92MrN7$FVOE_qx2!e#eD+*kKTA$+U(ZQO^n<<8rEvcnD>y<5N_2u)go}>nWsy~m-r*HMJn}E+{th#; zXAps^b6-6dlQS@xXsQf0FdOdJ3tz0@E<88F^)>Wwdh@jC zOv<|l>S|rL?GqpVd_W^j?jP21Tk8B(<=0bMe1R7X-Q&p&e%6t}S562_k7uxUz&?wW z5G|1|+Iy_*4y_$T?Y-XaoL=H?1I3Tv|=5YY#-j(v2&F*gHG8 zZ8Kxn;3i{MBvJCPi&>S==$G}`s;=9Rcl>7pu4~e#i@7>rQ_frWUqYPAwx9Wz#8C`F zYw3Sz-0CNL5&5j=1>3W>XB2M5i4NPeO4wrU)3#pOtBC+$E% zY$1J4#cmV_p2(_gKoRu3b)e6HUC?M0Jza3&ObLKSuW-2+?xjy*M9}X_=l@CECYU#K zi}(t@C;fipsn?Ef&)Vs5u9JXDj4pW>4jh!$PWLDwn3S6_d>Yq7=1HIuFJ?3wcXVFiI3JJ6oZ!dGq;WUs4+}PPF&``ECR|`^T!`k5 z)gkx)=ak4SRNcmI+}GyH1}c1Mn;18h26ZdW2^c9EB?@ligCe@5%qArIivTgBBv+Hs zoIBt3x$WKWW7134<}EMCqwpg6)uuO(-JFUn={CaeOZ)B;?-#@FeAwqrhA)F>|8(^TF-F8XqQU{!;? zQy)7$^S*eVZNeU{Nba^!pGdbw@R43H@%dKN<8jHMbI$62!Fg@oId#wCad+gJ?8&>} zt(w_VdLZFwxomm9xsp&k^R7bRG{P{O5YB>lP)w9%u0NUd()su+-rbA*?i}hX-a~Mg z*t^#_NoTWKuRpGoC$nKaUBX-LY!$R&M?_e9yJXtt=VL~Gnb~xhd#JONfsO#fjV7U% zu{0R$8}be=!2eSOFTVC($FBDLX}$!~h|efH$u~iBIVWxHaat>7N!B+J_r5>M>WV|n zv`I~IQ|we-pHmj}vC&9;FXHtJ2{b`^g^Qt>!OX>kvj>n4mzy;>>4!^JoW7Wyot@QD zk{bAw$WyPEyyXf+YZW*@A(-TzTHg0^2=0F%(yNNy$0byBFn^$7oov5bS=~0@$00eu zq1vw%?74|_Ym?#l>Sissix-)sMVq##?*DMLP~EX|&27Fdm>M~R+zj(G$DUw*uTk}> zl)@Js$kvPJR;HS}jZ|_UIs)EBnsua&D4w<&Eg+ZOcoE>Iw{;A~`aALfFH{^1PUU=F z;G=B#cV|P3!fwppPBX$bPl@J5nU|sU<=G)rI01xfkPihuwKCId+JE{QXQECYP5jOY z@pHoA31n+jHKc;eiV|F4g-|R|b!psI^eNl_S|Q}{_X;5a4PZ+xXoV1jsV1;OX!>OJ z4znHDlbM`T%LEhfbA`|dutI1Wv_fbBSRrKUOf**(QO?Srk_!hbmxA@u*^=Kt&fkR0 zqoq;jV@kN)=b>%MPnBbjo@(r{;+_;WQIorbg0xbdwShw4@9(0Ti_Bwh>79&v5iR`v`NX&_*Uw09 z%Q{`ss`HIql-ef0>g2e|S1*9A%oj5YWhai@cV;f37xfEen5^8_@}Opz+TE^;8_)TP zuVnCI$kY{jo56uz+U-f_2shq5sXzg%fLUcKL#nB?U}gbbb5>=43Gi6-6hP2Kd9Bv5 z4MiVgA;^IL`{s^@gwbV99J1EgP!iGup-)T5tc# z8rlrbD)7yGbro$4QokueXB6+jXA=pHi`9!;f5YHeO5+0TT4#Z)rFl3l;0`qsuwVkk zD_9E_*1M#u*u)vh9)KO7Go4B7C#yic)G#oi)*62+8_VH;T7k$;y;yt6#GZdc)$}6` zr-pkZWXRs4?*&K|!H%ZCnTT=%fiu9MTd}p@&*xJIU{*3=w0~h%dT*Ql!K{*_#K2>t z2idxCfE(^Azs6P6kZlbbd?X^^L>>a=B^^H;tdMk77gTs8C$bj<;V2%!ddmZ>w~zwB zdJjjHZl7#DvfdkDk%`|*mxS-yw4~na45(nSKd#=b+hvc7XfSk%k7(MhPe^L9m8`+E ze?F44h_Yhv=4v&x#rtImM1#FXt(;dBKT9a1d1og;-K8h$xFOfq>T|vy1h)sQu z!6vq5V}rqFl4|4EYR_J^zTx@(T~JaXbXfAa)&>-ZhPkeS+=W|hz|<(@#njs6xPpZb zBxr-(u4ZhSjl>UF#~)Pf)l740_DJrwId%D}UKYG7?F_(bS)+bP1-OFFN{4|L%L_>E z!95N8^H71k`#RWw5rc0Ti|Us4k(kv$AJq7QYo7FvAwygwGq2u+X9qn3MJigN3@2>J)nx}Ultps!`$ zR=#h0-k^>73}=j@6h07Jo2 z7-{!+TdO2mSCy_6TAArmt@-R!dDw0eAHvmh6&M`}@V<1xDu_=1s;-WdTSU4O;rsuc z8heWg=YY1q%tY7$X#2~Ig-gPQ^9dXIH4CC`Gl91MLuKYgsLojU{K{A0m;KT9$5m!h z{+b$pmuJfVGDM%%;<`;4FTY5y+vxY?U7g=YA&JL|4fY+UM|s!CJ)z_9$NTP zJ%&n3koRsmBTOLi74VQ;NR3B|i0vLJIAdF;1PjlZI!7fiSIwfh7sMqM0Rxt7LWf3P(m7+!V10BK6tukB^f<45rz32XtuU_pSS;53?l9Dt1!l%rl9N`)VhHxz%V5Q5q zgVS8XIV5WJ>@OvjUQL9#_^QbG9pI?rCCymV&5)~wKpyJYx(X}~*@!cH zaCoe?Xy{^mce*Q~t(@u@?kMZVF5Nd~`Vg-|WeC)nzI!-;DL`L%O4aRdWbv>`-}RCR z5ubCfy&u-GDf1L{%uPe)DjTO};J$8ndOPJM*k4?MzK6JxSzY}uHE9O>nEYA^iP@hV z%GqUofWfn)gJ;}=diRZ)uxK8X=sRy*0GwyNVELFbZ7UMj=V&4<_(Wd&R!=t;-xum$ zUKg;aP~)2ba1A_+EwIP>mb~i~@}dS$m81W|^^gK54JZ`#3J66#XGR?P#TuMgU}s~4 zJSunOoplkl9!rxK3>PJsJNxT*dKu1bbBFi&(*Lc(mei>`_vR119-QuvE|qyxZ6oce z)!+{f7lqa9bUWGe;PWA#>%^~&$RpiH@J%H@0S z)W_lhC^LUt4(Q$_#^V16%5+J)Jzv@Ab;~J#*I^9v-C|=v@h8?jADwQ%m@Sr{mjCX8 z52G$wUQx*n^DS5NuyT4XU^=#g>lvRkZI(m))~TSvi2Kc8TrS_dpCi2@k^ z&Nr#y`u_h9X=fQ!)%yN@=}F!cOx*O^4Zlt?Ic-F>a z{{HWtH(O`)%yHJR?{#0__*}e}%no_}--ab|oyce4-7pAA#?cX`bOGbFNe8k|-*=}c5_Il;F$4XiP6b~XKV zmvyExHI0{$(CyskC}%<3PHDhHT~slrO9xeRxX3m(_s-R8t5zgT0h8@=pjKyoJs$Ej zhYNvUmY70tlMvSQS>)kJLlWFeOL_Gqj+R}(Vv~4${nwAjc_-wgw^$RzDOSK;r?+Pt zn)U!FqzBb&aBpoMr$COuC5Z{$_Zp%PD+k$yf`8I?Yh>Fbx4ajWO(5LhV%ho%+F1m;3Rs_|!*dHf6!f3HgYYO$uPBGLKWtZ{NJ@#9$nz z*Y!3KZ=XFn>{}DHNAfd}h`bE%@Lv1S!$?$<^I^iO7}%D=EZftNX|03iZ2ufmJMj7B z+fdQ$rsow!wbTabYWO!W@CuAXl|=$^QDUf7+K^k=!F_~sZ4m@nW}1}1mS)k_;BaUZ zPLjLKu~2tcUuvVrT@&v;)zj8oz-CkA!#K>es5c$8nj2r4EFvY9KQ#oG{$R8YDgDX6 z41&v8FQv$0W{V`TRYpx3vQ-B0F>h8YGaUu%!sF8;=E<&=?ASn|0kj>WJD=!}^V`iUjef5aJ{B5OBm;R@l#38$sU!7ZEBN8&wz zV7b|ijB~o3hz<-_UI1YR=5<{_)VAzizy%297y^h(X0$?P@e@_`bXtg!@BK)Pyq)Mo zh#4YucK{IV^+(Ll>+n-;Iq$EGv|5G1be!cE=M9dA8=+l?8-JN`?&47ZvLmU2JH+2l1N_QK?aBNw9N=_B?MT+ulAa1Ohq zCX(Ic6fZqDB6W$8a@L*%GSF6hIJa!Nb%RQ=Hp1FC%f&S*3&;-8kL1#sA1|HEu8D47 zJ4O70QO9;FU4&7y(41}UXl!Y>g#b`3y+mbhzMwibj!_rq?cd0MuFr?rFU!SMQFWbu zq!plztqarkB-utsqgnSnO3-w4USEbI7>F`N=i<%`T{1|$Ki5t;@j!3eK8o`C`5NY3 zAA$Q*0;0s)2N{lnh^M^kPd9;u)t6Ciz*|@W5xDQm zaFi>h$~-L3wHCN ztWOTGsdJ23E6xdQL%$-=cYD9rL{5+o3;dJW%13y6x)^ zfm&@+sbYoMhKWadJZ`qLtMwXQ%7IooDbjl%{9xxpGG|E_}FF zqGnCOR)ATN|M#pow7}u~{qjm=?Q4Gr9NghI1M{jDAz&2?$&9{pc0u`tVb7C2RP(_| z?3n;Fq)7A4>p3;BYts+ViH%xF9kpzd&h#wsJGwUL(5qi~Sto<}1zQ$Z%tH3e#UFv- z%D=u-SBXi5$khXy>$o7N=)k(t6Mo5zXzkI!gg|?Y@pqS$QD#4}dO;Kxfm0zv%#wvo z+<(7T1y!7N9&dOiOq1IPIfO171^_GyCRY_j;NotuExaJCTa^tG(dGI8;1yXqR37|J zlkqJXt31SnhFht4R*Y3ZF`?^&_ZD24_aAdhMXoI!E$Xsw5)98ot5+L0-u{nQBtO5D z+B9Dy=hk$)!Y)K7ZxWFt_Di*tSpM*GYy~Rx`4jr=$G8&g>f)Gr)dhTv;VKgC%cHTs za}EXKj8IFLT|H=ePw|PVS_S*Fg+m@zp7WBLskV@hzhPF)@=I6_mo33xV8sb-FhWAm z5f!3I!bL$gB{#r4$-z7gh$G8dcuC1?o!N|p+V;xr(y0e5{`7@j%($J88LEW#&E-2} zLbCD#Hnk`I&#DmdsNl0i-YDY23RxXCIj5R`1oLdghxdOIMp#ASAN)WCSHh z#I^S|Lj=VgbPF@?KU;Bk>xT}+)qdjnq+A+)T^#!@mL~Pil+UYN{Wao5i1S^ZhN_2l0fb+PEFX7M^=cxnEOlKhXsc(T+_TS zPjevdA%{&7o3?q)Te5jq4nNzCV;iJ8ViBtj2$tLhl z8>+8H-``0a|GL{;N9r4!H@(q`_PQBW2I_vE^(Coi2(j7S{d5v1 zJBbWW@X0N3sbSq=4jFMz%B9*u+Spu208}RZn@UK!NnZ|ko$hCTW;lH@-d627&szMz z@xLIKz~UE2SRvpSS#c@w*}nf`a5c1ClJLBGS&-FSePi?igeYA#>xk3qL4FoEw+J!M zF*x!@nBk2#*9Bq7T)>#9V!4qyj+95i%U)=ayfUS zkJY@NrDs))7c;pM252iL{2lGfc2|?7UA1%*^Ja^FnNcWk{ zIYlOe*^bY73&APf0_Z1-55eJtq?z)wsz z?6@|}4r(-B!C-W5naU&zxQIFVBHc9iz9YY&Hpb8feIlTY+OW}!Sf-*>iY^x|HgnXy z>pTeT*8ehF=Ksjv316w1?!dOx^@ElJW-8&-^eeNMbx!JG31X`6yFXc)dQ(2D$v&FC z8BtejlU!`1E%eeY>6or^)N?pD!(L6^OAv8({!E7}cNKeJ{^r$v4v$$t!av2Cl#25{8}oV&#gwem&064$>}a z6*ba4c*17!+4Keer(?gZM!ZiFs$W}9vMgL>(lSU%_j0q?g`2GrfO zKBd}x&K+POulnAI6c9A91w_mYrzRJ3v-a+a;3C~%HW}x69%HfhK^RSxLF8I$HA2%( zK1tv$+10jSFs>xi`oM302nP1H6(@}U)0bB-!s&%-6`J0Mvzuvhi{hVS`7!x7)}9zY zgjqWsWUb*;Z*0y3To&8Z2Pw@S`=c`scGFZgbcxXeJ#R6_iSOOg%n6VC+_=V#bnoDX zNrYXjA>I212A}de({CuI44x?8zcB(*cla>0g-t0K(PYuIyRdezr9+}7oOIfUrc11O z+hwnCsd_!bLn3p%#BF#u41Ugx5cKovj^A=Wd}=#Rk^#+(B5bqOW0?USe?60tlD^P< zw-Lv_>G*GJZcob){&*<;dw#S$KO}#Oj^&=vRj+89f1b+Ga`($JR!C~jMpm8XJCL4p2P*Ca)>*!bN?z;x%{pHb36L@?lu!m+HKl`fK zebGkGDxlizgUFXQ=ORGvHd8oxbRfot&X>F5?1nDyl2O>ut`;e&eM~qq%8Og;v9kiP zm$zSk$?fN~bk`@=K@pt=X&qpLZ3DCMq=JQme(9`FiY)Jjy9{+AefuybH5lwzJK=n{ zjpYQ4x`U;H$sA;pMrOlJPLLvNN(wT2^Y;1Z?y}gR%4}k zGk49Ug){f8rKQUb9PD3@sxP}uIZCB^0U=Gs_1_`QnqJqPtDO@~zVA5CQKOhlqCbM) z-a!8-=p!Fg&b96HH~5r%0lQ9Bw zH<$9=n>?p(tY(!)$V|}oXC%*r>uJcwB~e-Q$nFg7G)}StK)iH*9?4;b4A#hRE#y%g z5&nuLq9IMJnS$;lwEGJbb6`UF(;}1BiGSU*A`1afDCnB3uRyyr*f$`tBJ^lhKXp_o9|m*Kw67WuobGO zAeJG*d|yB0yIhJ&eif)vl6M8*DX*-LH7AVv=cFEW$oAt}$a(r1_pY};g83Tb6XT`R zs}eLrQE%#~G1T|!7%wJ@WafmI65ggs|NDBl+I6D!tV#U`dpZf>D}QYZ3aF}aIGgsb zL$0DPi;RS9!on9^-E+?jED zD_}e9L_c@Kx2SNC^99r;tv>(dB-O=AnbJ{rjBzzP+r>GNI}}4fp&eyb#F}^gX{-4| zG~1uq0a0nn@M^ zDW<}MY#5jS0(C6nPbHDnygerV=u$`>9S<*kfK=cwz*md(c=A!uy9Z?#8A*vuHiLpn z`sofJKPYDMKPJkP_Qa6T&i`H{s<4Fe53lY$_bXiOVist;KbDQF3?@OG?yqA91>0Z!~~F2BF%& zU1;mAjPeOCOi)DL83W|b&!RsgEAET>=0xAK^oMwN{6P{*$$fo1F6WIy{62DJj&&;H z-wFAB#7eU9SGDZywIg%0mI#%9dC}i%(+pdIG?Y_tdo|URm5ai=zJKJqM!YHQN}R*- zW>7%hmR?qv(3bLDfWfA4+Jhb4>#;)~S_EFih_C=*W~%Z+4$c(&vR^Zx+apAE{ zU9iY#8CH^(;DA0pxY$||Tbf=EJE(2Kgdoy?Rek=>(;4{WuHm^zcm%%EOP1qptW4}m zYb6@suQYeii$!@f&y39ddSz$B0K1J<0dK)A7o02wgM0R}WGR$ZN4q{4Ie`+{va^jj zl4P0(H-T1aMGyz|<728$@3jPYmCgo}c*Q<`%8SsR0J+`i=%>KeV>Lq#;^@1WvD)pT zI3H`rT>=WpuijI&@Y?cZQggn@S%wTuUP1^WZsDb_+0Agqgdxm;n70{x879wlcec(< z82LIL_bG}*;s39Ym$Ev!l@${mpA{p?E3W3lf9#P7ZYlV+>|AyNY(hT%!g#ADqSUz9 z<8n8MxL@Tc`DTcbP(l4`6S|@TPu55$BWmORB$vEuo0@Hlvb*clMQLT-^#wZRxq1y2L55Msa>cJ1 z^8VXp_8d4nhh_S(%+VqevXaq*IUnaBn%tPsp@SwVly*=&%uDUCfrep*)A#3NsA~{PH zGs{u4*piENaD!Bra=O7s9Imx6v-Hx_ggWD~WfGa5S)qDf9Jdxdv!5JvUDeQcOk^Du z(Ra2b9i{Dj)@OkI7j6n?vlf>(X!Ei44Z(1|W1N4vi->oiSOpP9C(d7-I$3*sQK>#w$gK z4D4;?Qb}E|JmnQ}Z=RTwQH-9=k)p6g9nZs?-5N7|6u*WrlYtM5_w zy+qZ%@w@8=yJY0#B{|%znYedp7`UzHW4lP5$5mfH6&Q!;rb}sTLkhjAp*JgaPDxM*r)4>q0 zaZr>FUOAhYh>?4pSoj4OS=?R3=&hx4A9o4M`QQjem6ZI>HFKZ^^Gzj~cXpNG>4_tw z^-f=_z?>$1%UW7KRfn7xuT`l7afiss_W16AvG!vYNiVA0kYRIVTwH(bnJ(BQ4Qau-_(T4fj# znZKIRTXP0JG$2j~Ga~p@`=zyi#tTt|rcEGCM@Z{U1W)S2;F}p0?y3s314oD>T#*~I zdNeOwKBoxyu_`*TAGjZ#&_*(;N;-`2m)mfO5iYbPqdndGW)Ch3B|x^I)Z!4WEm*&P>t08#BlSL-s2w!j)H}q$Un1UpXE|b`06dMT6i1{7<@K~ z>-e`(NK}Y2vCwsO6eNW+n{!w-4KF2KrKV{A@zS6pBK82EIS#;6niWi<5!ffQ-ybp~ zZ`+GXcWY0Do#nffL2M2iKEn1C8O(+p3tM#KD%Siy`U+AUyMlQ6(XSav(R!P|a9t0W zk@8pcW}BzvTg1HdwTq<3T20yhi0dN1O)&)$FnW$f#_+fppS0LjCB*pt=}n*`7*gXv ze=_N+g%bRt%$D?bzT=eB4=l5~kBh8L*mR7Glt}F;yzt+EhZ6wfcPmm&kt7-PcE$Oi@?gQ_3_rR*zq*F7KDQ7bEk7|$NP@MJR-+2 z$^T;SROFwy3YB?~cWX4DUfEsPeWE}d%ul%KmmBNgtmp)(?cc1yc3y@9uJ3niomRpEmw;%V_Kuf}uSv1jOE#ahcZwU{3 zYd{sqrUWi2x*y?jn4U1A{Xqc;%gU9(1yJwjz?!a zYQJibt9WX&h#-U z$H;s0UkN)Wq!N~@M1N2(^l_x`LihMH|7X>6H1vCWJy|b*M;cDnD;;0iEyhxBNCCy_ z{p5>Erz_mQZKm4Tg;`sNEw}4kU?6D9UGVGhGj1(I8cl*Jz`P>ekm(dOSqYNS(w`dDCDj~uJ z`1SgAzmzT&vly)>r8$-;LRTDnJ>7nO!)#Bz4lR1k2C}JfJC6-DapTvz67RQtS&wXN zJI0juYFLWfV_y?~r9X02(oZmDKFUM5AS-|{euVv~^HI1jTQz-uV!YNE^w;Qkl~X$V z7nNBVoV!}C8NjB_nq%A7J1Tced3$TK&l5X&42>uxv953RBPCv1418PP+*4@9pp<-q z!)}O~1F6nf^W-BK1~NZRb0)m#qa^7{nWtvgE2xmO4gR!7nZ-MdsSny(0f(}^y~JwS zMRr}aZ+v5-stQb}PDok6N!PyFB2x#~vln6K=P~LuDc@!i?XX8=Jj@98$!|6@9h{(t z7EEb_zpn8!wAts#YVVyZ;tD~>6yVxdNZj>OdwfwDU_ z7^s8(Usr85d-F2vvoh`rG(JC_dHwSo0rO9T2%CRd_$_&ig|yG0p~d%vVZ1M8}qf^0)m~@ej>c}hSj3tn+w7VDX5xfj+Run z)z^ve&;tvK6#vI0z&Ci?=;ja^43IS?n4NxEwDYL*3B8huPB8BWzvMeuU(8XZU2>{A z!1^uzu)L&&L2x4}4)gGR4pF9*g991ySn~FE zOki;Ok#@o%pw?}GQTvY5k{lrr-Qg{7OMiYu4vyF-9g@WU}urdX5Ws}GB7rT?z zUd@gso$4>n??UD{x6Xf2h~tGy#o~kLCijEH&sqwG3-?ut+q~d&yNz`x)U_56peLI8 zW#GS+fEqu4P2M%aJFJ4)H6pE72w9#fQJ4o`KB9y1r{gH`JP+E->diKv9m$aFmlgMh zl9)Tehb@&}UNHs<1(?Sv=+`?T&33O>E$#E`3ZpJ|Ab@?Y0>D1kLLYzH(d)ZdtVLW9 zlwb%pq^V01In#DgjbM6xG`9W?t#UIy+t*$Z-Kec+fRT@dew_ncRkW-cX;)fGU7XQ; zpsoaxTc3gl9a0iO#w;r6P}0>;HU+sjftI?y!wJ5g#O?f9PV3aP!+kLGtMV2anQPZi z%Xvm50%9@SV(AkPOFVQxSc(8Q#y9S2tQDxLZc40Y%%=|XkXOu(e(qqQ z-HY9Ahb`KZPfD)@bcx(42w1QXuDGtsArN4bNw-7RwGh@&R!dv(g3HFFA8U3wa7wY@ z+?SsoBeoFF4WNdA^@9O*&a#SkKD+50rUA0eq;$uK0binrQHW7m$b-LKcY%hrE0Y@V zjv-R|)F-_9EbmL44jD6zLvV3z2aF)`VDy7TBvCod(RMNXp4xsBMIhRoiolUu?#{fj zA}kwEn?WJk+rqr7E@VKS;N#T#W6@DiiRN=E5iXjDWgl12l z0r`fq#`GNr4G;Wz1OTppA8cnHcdlWCHbGwps=J^!))xURl5DA>Sm zr$T~1kW@(#h?*;!%iz6KZj404ZaSlzAHh=bN2(!Z+MdR-wDBn1Nc$`{o<4r!om)Vm zTW$GXuv;x~e7jYa0|nSpMIMy>>KggvkDxEn;O{Td_F(136r{AZjI`(`d8A4m0vULj z6#g*XPH{m+!}l%|<5Z*X#^b;N{QZ@kNNnm5^-!qP8{ns(2Ww}BVXt9`f`%{Q1y*p| zv9sd~K+5Eb8hf@=f(!XqIyyTb#9Ka`{zyZ7w@o)eSk^l#Aiio@pC2!c+9|y2KR(IuE_jQM0 zhR?VoT6d-IiG-P*4DlXUrZbAzEXll==#9k|o{$L;r>eIRH5cc72?x)eii_&V@Z3<= z+n6%!{q1eoZR3Jlt58~$oMtVKhZmWzfgjJxe2nr7PFc5;V{*=gnu5@@x~JSMQ%VZblXUtJ9bkTVw!CNlsgV zc8`6v+_y{+RfRn0!*P+9OiA^S9fvh*;eT}+v#C*9>D5c@B3%PcE4W&XR0cYSpOo8%rU?Zz6AkIipL3R94E+${k+i~Iab5iffj@`3wu z3Z#h7t%4NsWJH3Hbr<&Eig z=qPaL0LsQ!;Lth$LaD)v>>dj!yryFs`$fWLX_%0R1hDFCo&Q`aX zq^jv&RoV1zIi6w5!2_R!QKNQ~-EBwbUs2rcCZo-ab?JiM7YMZuJ;P!GPj_I5G4fq# zJp^5cPsuufrj`REka=G0Ff!##WsAp(H@9V1*X(Af;4@6^I^(GinPid#8T$jy%({Ro z?!a8h)8)*iI~|gA!TbrP&t(H4>Rq>?I|Ho0G|}lctidNGa{!uD{fC z>0Ft$7rLXeDR=MiI(Ah2lrL8Gr)3QSSxht~vf+kwUn`GV0D{b2q@txcUoYX`m882- zMax%h&F)DF0EJ-4EoJ*}MW#lKKN?G*yt+> zJ^I}Q^!In}+GP0)H}`T>)I@}=gt{w-wGvOXnmdQ;GH)D#)5hX$dLWm`-M?az^8GO^1YyyS(D8D>iEIPtO?hZefPJcYA#JV7t6-}f8u4%N9aIi z>!P;<5l}|Frd2AH{t@zw+s$6J@xwuZ_$MhUeSg=4oz9Ve;!lKy1q9e>wg2t0Jk zC00h4)_Z`TLa?d_e0pN(@Qw?E=BoYwsrBS#jPRR^^wkFkITVN9p zb%i=78B9ljfeQqL0pC&uD*=EoVrDCogYX6hq(sW-l6`Sfz5Jf_!L3m+C$FB9BkCC( z6%~d+{Oz$Yhd~$v3d8x<96G64vcxFMe%g z)=w5g79+LqZ>PL1UGYuDp+}y(o6r1fBsF@Dz3gig)4d9(q`$(?TVFuo=L~I7_?fD6 zYF7NEz_0ML^r}X)K2_V)tgU-K>?%mLqi&DM*Lt`K?39Q*U<;-q#y;7w57AqvUIa-QSKr zYqE+n?Uo+k=u@uh0ggVJrM&Fh>d#;m9}<7vUjRnV2b$4w;Qms|KMA_OC`sXlWWOf- zeSgtw2)|IIwF2%h`LBsV_ZMYx+`sQH8pOjd{tG^5a<8DZj3XPn>cz@v9_v)7fjLj1 z(GwsP1+qi6Z?~`_cLU==9`OqPkt~nU^S}%fe_+steHs0<;^~KNLX#4-*DrDZpd-?H zY`*y~_PkBuw)qAWdv=OOicTK>?3}kBp)oF~UuA28Zy)B(CH=LH_jzg>Bvgt_XaINI zM`nuF^57;uUf^pK91szNcKfvm1wV;BiRbzt%l3XkZlPn$`U!5gHi&m0-?1$VwpOCM z$ZNh=Tq|}g#6}FbeQ62!N`m)N#s8$9*L8^gBQ+Fl=&AMH>0ADfvov@YUHljzHQc3J zVpSm~pQ$e5YZnsSL~WXXpTXP#%%zC~R~7$Kx5H7L>Z>5ln?G{T;=CKGXK0)S=_74d z^t;M@qoCmPY1e^U&j8-ly3BkV3Ey|hI>)7|rtRewjit^ePW{v`Xh>$MxaiKX`i5^L zji@WA+?qTInr?S;HQ#w;eoj(R4S0$v13pOS?lS3`FTfa~63|-a_c)3PErsU;y%L2j z*jqI{riz4M^1qroG+Y9JN2#}mYyfzaiiH6cv4K(;zb*a@%??<(=j0Qietz(r0sG5C zyLQP_e|L49ta`#d<@fQTQ8U@$Ut7OaLl7@0!;KJkmoQPcQ|=R};XX$~Qx06w*`aEO z%JdGHWyq+NqhQM1mSZ^1#F1a50O~qa6h4ADpQwFS`3mU1Ha5CI>y1!FLI~(In_x>V zR_2cBB0igf7dDn!d?@VHCnz$Y9#Sb_b9gGJ!5hFxCsQ5U+Ko~wzf!mi=nde%?AC7a zQ+(e6mECb{xHEgu`<=2vE?^9Bk#sO7Qqq`9Ii_&D^qou?Ig?> zK7r9sdu?3qkXabHCo(Lcha@TYu6paUg+XQJ=>ycwzIM<6?S5%`gLM|@xwG`f0<6kz zOr|^SvUHZ6OY;7rl$tQNJ{rxcueMdjeZxp`8bE6{$gMmomFBuezT^3&puT#^6-$kf z8e7Z05l4f?wrl8}N1e0(c9XCQP;y(1x*#E46tCALh^1}2nU^!eAD|C?-uQ8Rz%m3X zFm3QTK1UPXgg&}6gGpvn@!uxGyD7u>kO-L^2^U7#muGhslYUk=rrW$nB zyUuQy^VBs-TyB`^({)KVu5zbZd4|p9XW(~1^hX&xtg$w!2P;)qbgOiWtd_^>9XySu z3oCWOTrOTrXo$TU&5Q8@YA4?o^yg;lHYXO)tIHhvZyc1D8W%8G`mfMS^af-kXp5Th z8iE#w>cB5f=-jvttPj4a+YawrAFO}XuB4({4CY8bw(+3seD&gp?gD?|tL3u#0A4+^ zfLS;OTq;`lhxS?_A}~@C712l70T}3VD%K^5_OT9w`zuwubO)h$w0eWVjbOJhwPbbLS}80clYO5Ee6y} zoNXrSSuc8bH2K`Aw-Rqury;Y0ueqjwdzQC&1rTS&T9pWpu}#j?0FLUmP{M0HRgg>W z-rM4@tB(6AE;|nDRp$W6wY;7;t&AbCV@QBZpgnz>m!B%N^f(mq`v9xzFvF0g8YtL# zbD(PTS8qS)F6i}t!OmfvCcTKKcX&bnV_V+Vp$Bv+`M8(q09+Iwx8f1v=hubez(Np* zPez@>0O(C-iwNdBTXv`RW!>1HzNLG}@vmg(C3;Vpm}r63^v!p%dEVPjFMAJm>5MNa_Y12^YL&c7^- zBB&&ecW}kP!J~X2{ySLHa$8rD(%o5$qd2grtDa1myQeI=P+zUOlZ`9+U%z&@RuO5P zC-8$YZ%-mBC|9HI`I&Y-BQ`WEK+hW&)zj(Pqe*da(?r#LcrN3ydBd}>+23(g?G_;-hX z5@&YIs=#%vAGD`J;R+ma@xbOd=$IAVvV~O=GJwHv`UXE1w5PNxI&WQ z(7rpcJ5t8D;5aX=Jd-E2yq>lul`j)4ZO!a$v)FTz62A+cNprlo@!QU@wm3)Xmsy|M zCHP*9nDX$9WOnk<$Fy85?E5S#htWi))ihJUY(8Cn>@YOslCTLw8bo|NMVK~PMqHG( zTE--heo|(k+=KZ9X(*5$3olK51&#ORjmXWj4_}|Jl){~}YM9=aO42`jK03=pZb&Q=@XbCEp!( zb^JWgM}GVAk3OdK^^t2H`p94LPzlt{>5hJ2#((yaBOm(6OAmcy%F`TY`d5FM znMuEsXRd4Yhq1d(;!+iPk+ZTPTTs_$9Xz90rHS_!cZsGm4}c%jbZ!F0eM$~t zyeF8+sEO*f1BJy+s$AAjI{zzX$Lq4pbunK5LAv9x(HYYta%Usxmb$RgHIGHD%4|6kzJg}_y37#G_2vm>MzPbu`v^)kWk-BN$@5uIhe zKkC`#VteW`SP#$=%&IrkeZE$4`J?#a0TgS3q;py#0(y4h6^Rt!b#z1<3DgV>Mg$5k zVl2{rwG8x{mPGsXd{u@S`l5Ut0C8Bt%;@iTQOurD@CwsG+>>X8DOU_cakq#6O2bf* z#ALweEg4b`s5PFDV!&QsDPXU!XiO`pVL&Pk?Dai`1NQm~4aY{x#L9deEPABM`8?Np z@4tS5^hMP+I_Z2k%xJZo;UM&e5xYxK8 zy!c5|pKridv3ZLCf?b?gf?yXL0PNxdfL%2H1-p=Q0KqQ$K(LE%0OMbpitsn=0=oaK zFIPBmf4?s~4@k_=hT;6h8dCkX_Us2oeG7XO&EpEC&}(;ii#nk=u(!%PN5SnW178A= z3SoFb47_+e>WzZb2+3zih`Rg)@PG}q$Ar&GJ#a+>{3w7Oq`%)f-A(}DW{e&e`Z>$F zS!W68rNiks&=|?V5n7qcan;{gH(euj;a#V_!Rq>NAY^ZS$~|fw_x)hKl>m6Xk;V*& zBK%(Ra4*jd@eALT2}P=r^Y-|V^x8q~-5J!P`>E|$gHg=gmNx*q@xVt|+qLe3fG2@N zn7bR`uHJ^6j7%-E!>H+~u~mCn#mpEJCb{1YI6`?&-lm@{5WR8kk=TH`j)!=EjhL%_ ziOpo7au4DcYOvr)oFuENnd#yc!e+c_q!mmiUtR>~_6VUkYs%eig9#DRK?kl&_- ztB02ba&D=lU*JfHvBCajJmpi&8$lK+h;eSqJ2=yezJR9kDDw%2U{`&NteSJyfRg;v zF%U+trTh>yH2kk)pypx$attH}BLK%hcDV*{3`%VP$Kch54#+WpA223@j7}WYp`>AZ z@yjv5305&2DEa9-$>|Q1fPAMj_&!RmOl1w}d6I?|>mG}(sF)qVcS>rtcKsjU$;ajH zdhY(k&GU6=a?-I3>xOyg|NNBfCo-nRcJD!c%9(@Yo={8=7d+JtC2LwtFVmj|o$&D} z&L7y=wbKL{I* zr6m$q!{Yth(P{a*nFG|Yt8wu_zCU`_ED1i9Sgw$qVies3KwbW_#sF5Y)2&zQ!C{HazqIyAV>6!+kxbWmfHW3Bcgol?yN9~V_4wc z$107IBSHy{5PyVV>bx-N0T5~GJdNh^c?I~3m9KIN2uMjYp)$AGmL&jCg>`QwX}CLR8kIp)z<25EC*TqUFBM%cyV6E4$}y) zZPIJ;Vb}2$NE=3FY>g-r6)rGw&VD?Y?9@dncyGz5k26H5&vVZkAx0ICpc0Fg3(03! zVI5KvnuK>D zY!6qSdh2tjtK{NFQg1@1-*|U@dxCl2IR%7^iqGF9{@U1p5kcKwp%d)^c<>6uc0Mg4ncgMkvUYT`Z}H5vy9fM@#Z z{I7^ngLRhae;6jka9nUA@29?DP6*gX%~+aQn~3-L7#D{+X*k z8@_R${G9nl*{kQ3T)}7Nb)8N4?q@CQgTN}4yg$T;`VCcvei6s2s!xjZS@Mr7vK29h zerXQ`hq2q((ein;395<$=?X|+4@5Y;p;zT$UH^u51xw(u zL>b`4vTtt3-{h5pg^}iEdHRdyMR`7?>PMiCBVRp#tf%%N8-6>mKeronv$Yp7eG9B5 zd0^}aj8O<`Z2?eu1&uAR5{38AVPbgNs96c^k#gJlOOpER#UDoz-3d+IrT@Ox7M)S0 zD5s?0e&=9mwG{>b?e;oD(d{#TNehNsYD<7p~n;M?1hw2w>pC3wO&#y_?4Q~BiS z%2sw5#O^Q4udjBn5XAQ2zXC4()a8mQCgw!wVyNA)9Aw~Ur(o{+DJ25p*{^JZ&}B{L zDd;GDA_H&m*~u7yvVowoO_?>CNNMx~ap>mlll)d;qAa%JX)=YlthbHad%6ji0&MVj zN>K*$6z|5ym@l-oNif8;UXtKPXc3X*lB`Gi_yo0+KYonCX zEjuV6eq9VX6XKp2PqPNc2g(;5CyfHf25s{y#id$5AIW646U6~7n&gSx!s|ScKn4HC zoKiW>mQ;$AWGxPMY!v1e5U7+JOn~l%`tdgKNcJY{KK=PfN*C9xqkcRRE9cKGm)oyX zC(R-$B}Zs9Q_dNsT!>bwRS>e@cE*;~I(_4gz5xw+(t4q=9 z#WIZB5kD@vA`OlkQ68Wtvo(bX;3Rb0W=nbt(Rk)l>%G8#x_A8Um0x9oYNa`SGWbOnmOQ?98kTqBrA76L6-yWP0 z+yyKG2XAkP^Do(D-ZYOjc3gKGZ>d3AvLUi=(i=Q*Xk@0hQvc&03xpv3L$@1)JQx7R zrXd~Y%)TDH&YwZ?)p*rVw)y#Z8F`0KpH&e#eE$kV_YM6DLpM`Cvf)$tCnc^$_W}U! zXx#||o(dSpEJh7~N~MTEc%ly{BoWw}mbmC6$5<33xgyrruDp0`R%~2{xE>#+IDW!4 zci%?pJ_Mnyvs}q-j)~1>Y^>8=9m-Bp_u(Ac1{|-^Ty$=qkf!3Iybu4tOvaD14|Ph= zbaz>tYC${-%*)1-f6U9Jz`SeV(8JXB2+b2{y*zxZ8sW*~kSaUF=?RRqk- zC&GWv%f{lMd0DLIf!`(f&%B)YYhJF`TVkM%|94&cB=nwJMTAMgbOVjQ4(nH@AQzW~k4Y!CDD`2Wny^u_S^ z$2Vu}W%m~-;DBh!^!>MJS&usBd9C;bw4x$jYZkgAM&twQ8{X5ofNO&)sodgCuhGWm zdKXY4LcBNJ?^wu=mp4F~rPH!oWz5AQ<6oL(yQD!LIzpSI@p}L@TG{UFOH160DH;lU z$cj?xUvD%m-TtGBKD-@|g!-WyN%LQPJ_Dr=&_r(;^G~dJf+-q4CJHw~$^-7DM>z*r z`ur=90*Ioi{J6qmXs*8veM*k#-ylu5^&cQjQWXHCnWYMVG(XY-AWem05J*$H`F}y0 zQQFr>vnO^=6?oJ_1uDHq7JbkkUDk}cX5~){L}@L(m00u87+Y&OPwFzHUf0*En$oiV zsmJLje*)=o35p;+E?R(wHak33I_ssL5U!VpcmfgqI5m~-8`V2+6$1cxHywx;v)ugy zcz3Myg8Cj*`qRA8TI8K=XwopFvqElR%LGM7lTMr+Ki!}mtp`1R^!nqsXOlOkwehQY z^_o{dcD#i2TsY!UrczQ3lJhAjhRSphzi}%r8h1%hBL=qhI-F{_RW597B30MF zQ{%2=9}wis&nt%c%Qt??1SHOGT+9( zyU&BVe2We$pQkpD=mHVk=UN4(?G+aS=_O60G5{O9gFpjrEV(_(pPf#2hx`{g|3GjY zByKVZc2{w7^s8&1EmyQia@1d-wV zp6D!5pa>*7a}+Lu6P@*wClwB=p8QXu^GO9b(K*iWG0}O$_>V11mp;)yiO&6FK%z7E ze-oWgY`}@mj6;u!&i&q@; z)>X)?<zEkU|^!9tQkE=7p*Cd3yO|4GZNcJ=A;xO13iW*&Wd3=R7%5@r(UPXLzpS zpjHigQQB!sZcS`74@A&PciP&Y5a|?vtw~+jJOBGmo;BWVsa%s_z?*;mhOG{f0*OL( z94M|!k_IWZQ3n&6!bSv}_7qkUzO5=Eo!W4NZLNzYSPALjaH@BW+23=jXjo8Y#(ebS zxV2|%ivIaRUSo5-uGGs3vCXW_URcbXis1P-Eq|{eXH{Kv|1lmuwU6Vxa*bnYMtcmK zI^nLbQd=TPX?GGS(UN9{VMPR}ooJ~BIXrE_$G$)&EHoA2R_bFSyz+*SR{#fYFuUESmNQ>m-g#+5;6FWm^4Xti z6Z$D`+Azj5Fyj%l$RDOj?*yeCAbW`BU1#@e~{g*Ru869u zH1?z8m`Opy7`dcG8)Sk^F?sV+G2$jRhAgMSmB-MKa<@;Yg_hB8g}H@4vwy_PU581Z zhZ%cXE)E(Y8$fVUlIKncjq^gtoAXXW|rE zj77;jy5TB6#OI}S500J(Ad2oP-O>A!BImiGs+O(?ZYa+;iRl8Bk-_XjAaLotdXp}e zRHgluuQK!wS-E+$Q_8ul+z)vHW(iqrnQ_@>V{(Qy6t-q| z(%Y(-W;zM&vA~q12U_rT3lA`9vR5OXs~|zkkxsCDp5F9{@%SoLh-3YrJcn1 z@K9xy6}}ioKWpuWgaUF;6Gtw1JrVK>B8ajK$ugq*+HZZ~Mer3E&R7Y&T5O$loMBC{ z$8A=r`QVyk%c7#ER?u7rvj{s^l8=^yd3Ga_CtMe^2%cNJYg8<`35AKSdm%u` zT|%ot7HmmmCx@Ee z#f~NlFM{35R2t(CE7_ruPQi_hZvw=pIIt?fy*#ujKo>o_n&zcD-hYg5&1RZ?sjM2w zWr|<_9wFaGYI5??aWK@Yp(uD!QBWmV_fx+(Khs{PO8IsF(O`cSts|^yf6K{W>6<07 zZlZ#=j6|rN-SXn4hZ7q*=a<0cInI=E)58~KFzb6)1mp}Ry-*PvY-3WTatK6tZ|ehD9E=-)qc1;jdDc+P8(RN0CY| zH&fR(yrn;%B-rxS;PA*|pY3<|d7gv!aKF@i5r&-P=DWEOJoWCJr{8De86b-0ZNGA0 zhwSYKsbxLw_wvVHh01y>i@!w>1|96M62>Ipe-EK7RU(Z;#E+HX3mXQVYl*J^*7lUd zc8dP0jaMmsjU!Qg>td12t`+ZQx;zrUbx8LnWyRX|5-#38^0Jsu_AaYX>Fm zJU{U|yhDGohnPL=90oFvLGk6&bicJm;eN%;F8yx7(qw%d8ZuBUsGqgY2cL%cLB;Xz z*07hn!sU{wV=4RcctTQp-ER(NT=J0Y?*r2YYvpz8GN=9H+0~UDg{K;WeXj4&HWBjc z$QR{rL7ywU%aNU5p!6qE33%RF-+W=o!*^e3$J+-E3_EaO1mC~MmT5jPy4o(m8%-^Zr+Bvl5xe)E|rmE14_w0V0aTjp`O z`B~NGSp_MBlgex&)2n7FXT0F!f^+)YaUt2cIXVMk`#eEdEN_*C`qH0$8vZ`KTcX-9 zV=aZ48U!!o2bYrGI^tRSlU+)iVI5X_rSV;M=w|R(6PfG*l+$}LhqiFZ?=~rU{MAw* z7SW;pHh!=<1q8{mUXJX-FDd25A{vfQ(Yi7KiLJ(1uvH}t&C73<0ZB~qGB^v9X5(>sj&1-f1{3i*CZwSRUP@YoX?clil&y>-L(L)jGzU8 zWdYTE2^d&H1HiHo0G72=i5!mh;LcBG&a72e4} zacZ<^aZn(OeTbienxGe@y@%mLf>i+5jT%IUjm0|YZUQhJ&%Nf^dN%~6L`!BXWINZP zN3`O36{Q(m#+2*vIRAChzas-0-AsG41>-=p>oVmW6XT*pENZLmBcb z$l~s`6tv`qQ6{pyCnuR4;N5qq5$_vh&B&P~D}k0<|4+OhwLr}BXdnp35mGD9#7#W7 zx4h3yfZ*dWSV~|W!~c={{nZf8nWO#m_nF<6HIIlhcFuXj`eCGxM!Pd1>5rS3?dL@J9kgIu{u-|GklwC|3&saQ^qsiR3X~P`ju|-n4SeW zPY~LbB-I`q#GgmQ-zDekD>nZ`BW47()Qt}V=Hc)z9&5n)5EQ@@r!t6Mqx^L=l&Z$5 z;;u$<*k+2ud5c~Oji8NuvA^Lg?Z3@c3{UUvPxDm?tPkSeMyCu`+s5+@c6l=noQ>uRLv$#B6PZm#j18>`KqpPxV9i{N#009 zzIzplll6N#A}8${vvpkfrUPn9_@+{rKg%JzRCCgBQ)1XYSw%6~E*r)yHb$8<+@2}i z&qD9>Oz#tkw&}0luO^+loZgRLgq)OI9uTY=+oK5aLCjhhGxcXe}Dd6UY}c3I2Nn4MN3oTd?jY zf({zyW8-DT8y79OT~@~m#>yqj-B2h5lEy8#?QFF%lf&Ve5j!Wk(jl8}V`1I_W$0)F zex1vvj5l%;2rg*HEmu;l_Aevfw9#yGuCe&0;fK>Pps9Z$Fh+d}W5agLLZ5mQUhIjc z5zZ~>wn)eh$If+{NOsnwry9&nhNX& z^?MhvK>pV0RtTsEIFb)fbmhq!yMwZg0PWaY3W1oC&x#@^-d$7B2C&PUpsx2M`~Gk4j@! zx7yxtlVEnUR0NDs;i$6f((8pv5RbSR5j2sNORiVYSDA4R`h6)?XOcq$d8)FAA_9Y) zshGDavnR}3Ee}%iw~evLctoROU<@(ovO~iHAd%13bk6LEa$`^lmA<@2}6#pw8c~4N9o>6pikLP1Y-NI9oUPHo5kL1)fqv%&`QlGykK-1Q|78(2VIiphd zT>8tDW9K%##aTgs{AWiD;{SclXc2YfbxT8AQx;9G(1uCohNG{^IX#7Ol&{eyS@XDs z_a+F_^<)n^F5s{}-UkQB6t)n^j?yTma9J#U0y;sRN7uJsn*ch@o`%z}lRZtt@jI`z zuD4Cewe{kd`v%){0vAU(sihjNOGeqSD}<;lMb6>}h;NEp7Dm46RJd83hAutanO5h# zm#ZqF8CPnAKcP0q*4Bw5%vaRZ3BPz*wrF2#)mNEiXj$Kl1tejZf9J5O$Mpm41Nrl;6}(Xli4 z2WUU??Did~GwwUt$-TJ7O%<{qBOF3v133^iCKIx|LY^>usxj%`$7o-ynW!Bz6T?yD zMB%A<_rrCNk*KvVF=i9S!sNn5&W~{BC|65q2#gDa6LUY1*;qNT_a|alNg}yqV`=jH zWYXv&&rRf>cxPR6K`$vaDb3cv8Ab@S#hZVVl=QqYt8~Myu+_4;qA)UTUB;Js?{+|V ziOneOc69e->FGXIyA5Be=9;4BO1R;g;!-Y>&EPx@jvxd z1$p`P?!3ft77T1%FMOhio7J#R!1D}$f293TKj64(X?$}9D8|a1obw&SRyU*zQNS^d zD<{sLSvTu(Ra(avM>Et65pUyjZ$7x$lVn390S5ok5{*aKelWk#vFj&&;ps9s9wAQ} zmk7ft)1257LW<=jgE83MP9;Uy(F=YJ)N&UvZvGqz#?5-cZA@KlkK4{*%V;H;Lr?1L zwJ-1w`aSDN+c28w`OAX@En|k4HtlFKz7-bA^8CaKtGIa#JmXe*%1~Ky)_TCMGiBK& zkpM#9;DS~bI!oqzpd}PWZf>v*vT(X!qGk6M=7`V>Pk2`Nb{OHL@e+t*G8VUQ836|G z7kN10IGrzT1V!Sw#rF%$chOm*s=Rx~03gI|J4$LkVG}{>s&2zbYVK1pmQl+8%zBp~ z*Sc5>dUX4%E=yCkKaY}bF9ls`V&_-xp1D`RrI1QN*jZdeZ3E2|Wc)usVv~6-^!P83=(=OB&?@<5;0Rn=-5oe$_4HI* zy+I7`wg5*SH66B@iWM`0RsbbXorK6qNi5*orgo_kuuw?#>!?8eOoRpKgItu%`Vlh9 z@FbW{eXyka43e_JQ@=XkOK&p%Y5eHOK?$LxO21f(trK*T457@=JXuq!7LHxz=9sKs zBP?Km8sh58b76YvTml~{qgmAFsh2AdIiV?UZn2?H@^)JnmoZ^U%vBe}O&=3%vzgCF z5fl902yqBgB^inUCCz~9>L}M-s_J{zRGLZ+_dQ$keV;im{RfA=KjxUkwlOq$K6z&8|HbaCWx&uZg-5j$do| zc@nRQG^9PX>frX^hVQFYdsLMDwO2UfpB!rM2A`QBk|8qN@?xO~zjR1;d~mRFDe8z% z#Q|)TtF2P7VNU1iFnf-e{Gs$Z2X9$lHi{#IN{9zI zOR&S{Z5jH95wwlRBNN%L^6YJPT%{5`3UjDqxcy_#Id775C@WX|yz<;MsfrSzP$J>u z7V03iyo}MwFlmBil1QnJx{_G^EjM8LJqfyCGWZJwUVLUO1d%VUghb6o> zUbP^VF{Ooc9M~C3R$KC8OI6qr*yLIZ<_OakO&s{Y2BPp#*L3-;_f3(9O^s;H<^6Uo`+Jb=# z3>jhuyq*_D6=7D8Y~(|{U>ZW;Lm;96Hs(&1zm#Q2O@pe~wpdjv4UKAM$3YcJAS|?6D|zzuLI(K@?Re zx|=?nk$j@J1uE(+EOI-@qM!AVRd>Ya^L?f3*sDJForjoQ>c+PU$Zrm5_UMC#&1_gu z(hj2(14W)@pzxq*U0F50{a`y6(}xuApv7B1lKFMQS>mz7uZp2ROoZ^{30AqPx(a}v z>nHV@v*YvTcSiq!&qP!84qwFXahH3jY&t}XwdRi)JAXSX^|BJrR+D2wPNa3zP8q=i zE?XmYID*DmnV^8flxXT(pexjtE+*^=olEWacP^`<_-Fj`G_MWxn$a=mD(SM2FJ@?M zfRw7OZERT-aNynIeOZy-{u$jA%Ru831NDUlDy=*KM<1Za&O!r|zvtS&lRrf@5wH8= z9TQ2CPK6W6Cz`)XJ5)1rt+2Hz3$fAg(76<7iI`s_=c%zcw62jxX4WjSm;em~kE5KM zAE>ZFpzL#A*|x8Pa{(0ctzN>?#(f`e?8iW@`M1)>Aq`98e01@HO-!9l{B31FLRePeEW#q~b4zE%!uh%@b6 z&T+F+NnfbmL+11MTtU_?WD<;-Yf%E-Wc7x8uo`@I?x*AQE$X3wwUHgpYYmyXSuanA6Xu<9f0@WrLU&+f&rjFA! zHFQo*_1-r($ZcY;^EdCV{haF7beq|d@K0alCa7%`oqoY0(R{wU9+Omc8-LYHM(#Bn_Qx!Gd2a_SPZ(tN2?7f0le!_0OV{a&_J@1+!Ixu@MZnjIutOOhT9XWU$Q? zRG0c$P|Xx5mzW=)IOy4}$q?MM=I!xGJvu`~XkA&^#M|M^&QqV3L1Y z+;V(tTF`g1N}P7UixFizuKz2w0N7Bea@Ifr3G#$wYECngo~4;7EJ}mFQVU3&Rx65o z#&0}`!mVw7bdy_UMZ6iNVd6<0Ei2G@47(tclI7iLfj#{$Mw0WqR-5d3f%1>frY3Je zfpR~fUJJcBWI!J^QW+@^^^j>8WK!^RG}U`ujxHfOUDM+R984sRFCqR44RccgK4US; zA41+FcGFj4*{A)UT7U#tCw@yUc+UizSLC-6boWhgHJ;q@dfxHI*LggQ+lpM0Tv|7{ zPvcEyQH6#K^rRYHql}^^`3PRLNO@wEsm%zNiXU{IJ+i{}#^-Y*QrcWK!qXGX%Ogpk z{Y3+_y7_)gAR^QZ(=q<@zIc)`w~ry@kf)C! z%)CjLy%LY0IntOD$m;!Z`Z=q2^E4tWKJdy|9QD@yU<8YNa~?sljY4+37H1z5^5E4j zyJB18IjZt3cl`|_e(0*jMSdSJy3iaqPJc(&o>{9>vi|wWv_rok&I;BcgiV&#(va^> zYOHEu!&4!k;KV8+gWPq~@kw8Y*iH_pKGyUdH+@Qkr?lM$6e_sTdk)8-J0ryLNgyQ$ zj(%Nj)QkQNIaxZ9wok!;y=;h=`-VHUW4O*0{|GbgmZ>dL@tO@S?+Hf0e^$ERKZ94g zRt(^kE?g(D(tW-PtaKyL9#^_X6fYq%@PL(WPv>td-DCCkk!9XF9}v*!{gAx8`IwnV zhdcGP|LRLxq46Mg(9X8O&o>L`Am5~-Q(Ex8<@LY&76A@DHwm?epCXv?1=p(?GDa_Q zNoKTIo8zor-x@ma^@IT;Rd|9vK%{!pC~&-cKXe`f77A4&^+r#ha>^mBi`=E`g)@q- zH3rHJB=QO5k*@#b;EZ_I^K9msr&V1$ai0E3mr&({La;{0h@oV(Itd#aT3JrE@Hb?-j`1$d&2=T&qSjPKs>34?3t0_3PNBu6RP$Wbm z!$X09nURn77*8gP`dT|Yv24@u10!uKG3EqXf_jmUp3RY8bHV;N7&#>J6zcow zae1?I)Wx^3-Ygq5iSD6b^46Gt=3AAptYOUL=xBEI_mCu4V-bS!nLtIc{#q5awv3L< z7u9G#yZ5dM>ne3RS)?iz`>Sb{*y7N=G;C;7pZ)QQmias!D2GA$AvKHngjPhr-ZxOD z%K$sG>1^HJT(#&&9{(v5KZ@k33t-gKPQ4#Q1}G@y1L7j&aa)~|_V3y)X3Q<)o>4!F zp7gY%d-7kG2r`B7KgE;HW*2@%D@%}p78C1>9>AM*0($IC@*5#dD9K#P71z6FX*dgN zo75_M)yW~!QFqL4++mAkg&t_jQYIT{03o|1K^xz<^wR06uYJgmrSVImw%jx8RF{Wa z5}Ws50p6^SS+Eu<3(g>6{+oC*&tjiw%G@X%kMmqKZ%=tPi=5aba#V?F`4*I&Zb3fO zmh%fbe@ZT`AFvGiB5-T)y<$0sYE=y2dY4bDsicl}lTgZ%aqyUsW0b1eVC2k*WhM8- z5UASz#ESK*F6^Af9WJNcg!>&!mY)+5Q+|t>Z!oyt<()=QG)XGT&WiqMOTU2vfSV22 z#9nT_3R|W?L($^^>RsX_02)z%zcU@EcR9-`eXh^TOc&N`!agvJt@56RBkUi{oQ&W& z3r@L{5X>kHl2FJf4wo>Lm~pK^XG=lruG(; zBQK*Yz~g>EolIHFyf5_kp# zxCLfXXny+*9UhZP{>?h`XdYKA-=eEF-rRltI#R!>sZP>}|L}EUwD!7L^>u&gN#+RY zfmSfC!y<>mdIH>xmwarL)rXUV3*zFNgNt@|TCE6CnzIoP!9=uiFATqOpaqRty-1Dd zeWUHni1+e(r@l}m*I34Ub-~Ip(Vpjc;3y%m6S4S=ve{n1Q)0hXI4cKnEwq@=gV{zK zABxhyVnx{eSZ}!a+RU`o&x65WBmHSPPMsdFcuRudehse_eG*RID;No6c{E+}EbQ{E zW))Ov@o^^@Q_CUBNF+X;mM&T3aghhXBz+sgmkZyeYQ%VNYasF~f>>|ALnwl537t0i zLrXSmp->w~(qWG}2T*;8`1xPL^LTmau)82?4;D7uu#C!(+{j;s;iSOZziQVUkeWCz5n0Z>`>l{k%F){Bb;7P64Z%rhVO6%-rdem}0IAXFSFiliM zmXQQ?ba8Wa7L#yc`(;F>Y3d`*qm~NGc$)yDumbU!=-Q8a{V%`+W&wD>+$pGG!5{zu z6bY#$b@>jPFo7Zq{1bW%;eL7xW*>W642_V|FAJoN1w z92}tKx|vecrkIbQR16H@gSz}Aq`3iu%tXF@`Un7!JliKcuO$&3V{wsUk>Fy{!h!k! z1%`?aTDQk!4Gd!nzwY*X*tkLcZ(fK$(dVTMm^y72&6zEk=cwb<(Q#FQeJf_1JCcpF zq`Da?4s}~nWN`sicw{z(X+&gdL4IUXtPOrFgq`4M)-5plKRNns^pD|lyT1!122GBD zebGWx|G=VhKU3o^Em57WK~UvuE0LB^&P;8!(> z5fLo+$hG*1Gq8Su$^+TXC3I+E;)1d~?o=zaxpQRNd==Ae8+5YGVr6*5;Z@!Pezjaw ztS{EP@$s}mQQPAwe?EA3h}0d;#y)ZE1Re7si@sKTG?JH^(_`=jQy0jDB+-ku z96$W~qo@b8Ecn)eUvW;o9jb0#A~59eb3NBoKixbh3(#=4|AOJ*~pm(z@)z+G2U%Hw)NMfUvUIX z`X^4{Nna-tJn6%I8;yY0{&&(h<7PDwc%Rvg#6+$G7AcIqvQh=~2`@NgJVV371joLd zLy&)aUVIWXp}klq@j8*Y)H3o8Z)+9L>Nz1=p+j{s1_HTM`4<9tc0U~xntcJ|C@f0p zSDAuZQ6E3x0~G@wb56s&BHr*Iw^w{IkXTgb72&PNoF1l32~cz0Z*XnrF%jNR2~taX zAIw7QED}>U>g0&6WZgI~s_vR}YpO&xU}aS@@*j~x^w5E4vDl55@S&@57k^)29Q~n4 zkI^^MIi9h_;9_B#^2Oi-p*xGu3)i6Whx>&>IziS)7W#~XIe(JR6}hA6jE?BK-dm>;9fwYwXzF~vu<`fSaW&@NeG2Fdv{(psHKB9&8?JONUTwXcN-*zEB1K_g|63mas+qK%Ee0^mbdAu(l44{jO zs%*8)YU@oSmT6F$@iGi;B8s}1qS4-=guR%aP{E}&%4mTOCGU5aQYM7wRZl566)`o!dl8ZVWRlPb9RO5sLNC$j3ZB zM)t%6v+UCKlHL_6E(0wP*uz934W%1=Y!ypQsPw0|yMrvwU5{DSVoq z^=3eO9Zj}z=3}~vNg%WBxh)M1kGaV1^h|B^_qRzrP95KE3Oh*gR3AB%kolseG*v1x z11Ndtj-cJowvm*ETOSMuKc_OMA*PuND9vtq`+-Q;sTze@!bdSpJ~ACd6x#f*)2(u~ zvivpAT>p&rY@heO1{YR%=r_98a7s-Dv?8BGK$MR>8AF!=WV(8!qE8_yd+-MMdC`r; zl2%?|)QVY#`KsyQ^}fB1{hOl~j6r!*_4j7?o}uF}_=wvDz{jgj06se5RY73NfgspY zlcDMV5pwf{VXygGfVnh<11ZQ_o#bX*pY?IL|KVS26QrMsrDTH)BI{((=_KZ4$q~{02nPL71j!J+ms0c^sAb9 z0RSY2}z7umijUBWUS}UBwhKYxG)|i9}(lFGf=oo0J}8QF6+cU;$<_< zHIOUy^eCJ;@d`+xiMe+UyCxxy&NkKkZFAg}Ozb}-<4*R3DvDhQ`b91vUS4vo3wD9? z3h_ z-P})Tm8OG5&>qv>o`Jb??Kmris?OMs6pdQb#v;hiVD*^r!VaH!&w{N&+P418HE#~d zTy_EE8nbQpErFD=u;Abv;P2iofX-RR z_gL-IKy0QMUp}DMKzER!&wE&bS6A~c=(1QKo`4!}wq#Is(}7KW+#Jw-K5bjK&@Z0N z32$C|F+xOtf&R^?dCQKeIswEsYhJe?kRa}o`Kda7Eq)oqd^FKMXHd7$lr_6ZHnyj5 z5euqr!5Z6}v;%*E0lu8a0AJ2W_gEJn?tf10*f{^VIzaB_{Bd*u^H*~O&7zqzV+G`0 zhm@!vT(zPA4I$3lB1~i3j%w-GO-VQ)6#8Ek=VXjFeuzt16WkmiuUZauxfnf9WD)p7 z;(OTD=uBw^ZO?RPov`HZ2peymnWn9c@3htvx2*R!~rRhy&RUoDpv+C}>^;>>B_= zE7#O|+y5-gk!o&FjzWcHCV|^AL$C55v&mcw#k#8+4sbi_wubTcutL&qa^4^e$3S=i zFcDu@oltlQ%27LM2NT9k$s;5~e-loie zjUZEX;EyMiZ1Q^UuUpX|WFlXQauVl%9#Ew+`5M4FhpH40FcBRZ7^P`U%M5-VSM0I$lV1)V17>;g=0Uwp7X-AXUS)*+M7D%ymFzNR*J5AWI7127BogV4ZvDv~BXt ziqAUQo;k*}c4^EZ)Cmnwnlx@)A6*Qo{y6gWwbXF0OT$V4id_=su}q6Jgw?;yxsHQb zZLS=o+V2wy*>pdw+8rn@VtVm^(}Oq7lWRyXoUfA|krBlXB^w#(pM^tukoxKenIkgk z$#ijhbnF`YDr6<}5gFhNf#na!@QoeAR5+3h zL6%`WoUZRrq%AMw`}d_AJY6J+wFL&EW zU$+Qh(;lJn)eZ}~Eo=2NIg98){NuW)lC4rPUKx6m7Z+eWF<=Dt6pvC?U{66-&b99C5r??!64fGR zkoRgHk}*zn4Kl8u1^u%a+4zfRa4#aI1t7ciq8$7g;~2J2_DcfFXFQE5qQpA?;Z=t8 z2zYR4R?{PU)D#)XBS$8g$s=ovKz3wfG|L9labgFb?Sr!Uj|bD>mt12x7#gVOfk!Cqvx>pqOR z=Vk%kB#x<)*yaWoyJ>0kwwp<@;fTi z#IglCJJwwSt_D92rZ+eGDkh0&J73X`9TUEod+KILe77IG4^dIABHMTj8U4_cCKEKt z$Nrmh&sf=gvoB)0G(JE(z$@=+>I)6WnezO-R@>iTfVjl2Clw)Qwtj6;z68X0Qz8|( zoif82MHcn4Lj0L1e$wG^p&s#blW>z)H;Kauqy4hHWPjTBTt0ky)b09_Zz2e^2ctY| zY%XulLQ$H$@ymy@O~Tpj^z(u#AJKAQ-2@h#Euk>4AX_D27~@+}U><#Y#0b%p$b6VU z+@U)~jxOiHUws`o3r%QBf3G+mR)3GfXxb7Am8o=EQAZqeY;Vp+Tg0ZO{~f ziO0pISwMGKw>YmdaM3d2IRhm`To;iLeHWo1bg7lXJ6A}IUCxTL)H{3g7*p`i0C%*P zkCfCHa-hDq5_h%PDG%_D>iMr;rKu`3`bJR(f)u{WVlCvp0YX&8D?_Fm64c^>3}=v0 zBk#oDszVdCIFlZ-h%U;5EIEL7w9lY5^|j~9Q{qWh43q|HUYP#mo4G4Ymyxzn48g#D6ozti{CwGUeB17Cg_P{ zI*{|GvTY<0UEt)^qd(=NOKsji$53yUU~tie%_r%?YO3%utzt)7m`m#vx3Tpj3Ln`cT+Rx9=3R6+ zOoCeX9qPNjLn!P(T0^}{go_;&{nU6LH}~Vllh4GT2;0elGXT#t@qGVucuM0y1*HVu z8QVE$r_{Q#i(Y(oU2UJ?8tlE%nf%RrBQ#H(jjhR-?5P&qof(~6h}8BE!{qmod{(KH zMcaXpq>3!DDE(b~%#Y#lDvfEE>#(J##KV4D?pg=bY1(og_sWn^l-}y!8QI?yaUl3c zdY8jlpjTD?NV;y(&{ihEd>2!~9KsSjpSEVX_FW2-;geO)7aT5z##k1TB!nC?6CSV1 znx7Pz2@^qyA;H-MIg$6loPC>|0(AjtpW<8uHQ1fCp9MDeYem`RCE_y`0}@3P0`ItA#g`>kh&I% znh)?Ep)0y+*+H)t!X~x(Ea|edwjRm)PIFD7c`0a>s z;|wTTN4L1PbYlZaeCb($%%PYseZS~vd1iUW&oBkH0!QT{MY{f%^lsI@JRR~Lmn9gS zokSy}XhoE>sdiRzuU4sPs8uyG8{acE(5FU_Qa2Irqhdw-% zQ+$MaA5<55-M|Gdo7J-7zr(F8YZFYB&5x~<8<=(! zSEr;o_9c;hP$kai^G;Bay9z zhpM7yi|ZCv=AS@rrk;_{?TcKw;+{BQpL1Y0CiN4&P)#trcsOak=Qg+F6GaRK1tv0hj~BimIcFtSCFJdSKfQozW@1B`5=q5q6*JrL{V-syiIj(g>{k;iyd%3fPi z>*MF<;?^=>0VRwf)uR%o_mV!k1_>%L~2lyFfR+iag_C=vvNM2)VaHdhiX z{@1y^V9uK9YdTzZpU@l37-C{rnPyt9-ybU7lHp*++ASy%UK@LWFhN=EoF0)~ggxPq zOj{LUF&Aa`Yi%S`V4CQL8?psn?P^^<)Bh0G7H99}Fe;N-bB^t1r-f zFYmBB-ij!^>2!6#?6_Dy)95FQ{q|#btR0P~&Id`+g)R83{7l}6XG=_t=~%i?s+5}l(?mhZccWK)Y+3xy6i=& zyoBaN+k<0IglW1M73Di0Zy{!4Jip?eU0DvApcHJ|L=?A@T3y9W^{38=)oaT^pI~M6dpj#Rgf3| z7(kO6r@x5u#REb_yEMv}n(~L|QewFZ8Ze1KwDlvy4}MGQe6y9SRu`*!NfawdbxFac zXzBmQ9-*QxlyN~#WzEn!FE^&rt>*v8JL|71-{x&A4bqB8Bi-H7oeI+3-6bI*(nzF-5uY1^Ra#Yfp@*XZ1y5tuDz~%X0CJ2Ii}Uu(AN+z$rZO>$7rUW`22f< zzL5o!e^=Fn4Wj%3X9Vb)0E-ydpKHzXvf&ZaxyI(gRJ@~FM6KebunzLVPljQJ0Rk^o zWaxvzN5r_P*t&tgQu9Ud{Q7qRp~PLt>KG&-ynJb+-jUEPs0u7^Uaqd5U>C3Oiq|Hk zsCzU^p9I$N!k5D3)x)>>Un8ZHT^)BrG;8j#reHfcE{FIa*$iDkaFH7N(~S))Qdjp& zammX1Wi1NpWbx@wxLu~$K}JY+)e+76p-~3i zDj^20P9fCPraoum;lS0YEjj>nbt=jD=jvq3>*9W6ea&`#_1f<-a~YFXdk@#=js9mVCDK6p zIbC8n!f3k1De(%v2&5GYvdsfS-RG%~jOPwR-+gZ|Wv>x^hLe;S{|f?xAgO2o%xY;3 zeg%5_U^yR94|u`Sgk(ZnA+P}XHl4`?=AnNOri6^Mz!AY7ZX!e?mkURl-iss>hf$U{ z{!bO&t}fk=_HmGhmNRhpht>;oY=oApOo|N@i^l3^38($j)ZeL@-aA{`Drz@SfY!$; z{y6duWbt~VyFE0t&^y_4;~AIXJ3ke}B!T8X_l{$$ZAfO}(L}Wy_syrT<#PM-s4Uq1 zB3q<#xgND;Zv2THd?E+xg&LDARmdP%q}}6e^5mSWcenE|)asr%y|=WI`E0aKaiw}% zE6q~LosIlas`II0#$-?>V2epK%n!C2W6;T0r@{Pvo_ea}C9SEisT{yU=2~TA6sK!+acunb$Q_SI8|x3MufVWX3z1 z$-P115!bC7x=P9oHLYvG8;3e0`f#XfEKP(!g(~onO5n|Ontg17?fA~z98Z_^Biabi zRP14;jD@H1`w5Z?qlmTj^%Z?Rpy9^l`<~i0+;Gn{+wUO`S(j%|Cerv%9*)5^h=-#_ z3gY1qr+sB4Y`&+U2YE&>Pbgc#OH&AYH`$hz3qbW(IIV^dRp~hyrjzl%s$X!Y}mO330hRWUBgH zULsLeJjvtw-N}lY0XSKqG5{y*A;`%(d+%f=ANt413JClv$yE(dc))T6y&N<{P(s8S zAA0JHR}h7w)rqrg>p;X>Ocer0l4*yIV1{zU9&q2ipF+~AjcxJd5~(X_ay2R5dikk4 zJ94B9hTs2FU`i0az+@d`qe7<_W`?Sma=(!{p1LWN+%r0jv2D_THxVIzU{W)u9UWuZ z{e3Vq>I2-2C3v=4&=cKSRp7h~jLYC#v>toB)f$Vl4|f_`>JI7K!`$%9`JvUm&U$cJ`M+&j1fw;q zqA_^cnp&v%@@s0o+M9X?0=9~lmx?rb1&MifoWAFlCT<}I(~G4B)vC4#arx1S!(Ywl z$Q#WPom5J9>k=nBd^i_-n~ePu#-&hz);x3r6IM%Ypa&MX`9S(o$|P0hGCp(OHy5Ib z+=WQ*vT(*n4@C)x2=xddIyW{s<*vxCjELj(Bi{xZlszvqz_sEmbP|Ct6W)uneUiF@ zopjv9?Hb)}$OZQ~Xy6`OolxiEIOv)GFEMph-ZDKNar#~3GJ)yZO{`O723sAR{*2qV#2#RzCj zgA(}z=U*TcKlXzY>c7&-No12V3MsCeu_3BoF4^5nreIP&IeWE3#w`e9g_^lBu25Ym zZb=9L83pzY6+kmzzJ%*Y#&G%aW$x2!zey;42{UJ$T<^m+$fX!apZ2%tIdSancXAS) zeO`8dDsg+sCjJJa*Eh13!t@)LS6L?Y(7}k^xNMjGQPXAH4emBxNT(a0XD$z}vY?jc zc>c*JS6M#28f^{kn;=kGDr#T*fKQFhtW#)8A<>M<-cKw09WB_R1;GRpUAiskd z_bxGJUC#YZucI#H^j%d9GNe?!4>?9~9q@NiU$1V4N(~$v+)?vhJ+)f`K0O#T;yCf@k(Z+}b6<8s(44;$*Osim1~2)-iu`3wJ!tmC zF-UvJ!^Q?o0`MXsbi#PyK2uA@a8~NK1k4=k&ztOlCC3nBu~2x3X1}ysbv#(6AHx7a zA`hkRp=)Qz^QDK5NDnkd@%I)Q^qFmNuk)VLoh16+=KehoP>ygE1>R6X@^birA*spF zae#8_oY%7z>F^s~aaES;qPu=ZL6i z;VH9L#<crego~q1`-fapp0Y;;_s$~8djeea}czIKg-r_24ZI$YCnXW_I2da!% zII9BFq@@R`5@~iVcx?zSEID3p1Y-Gz3{7Or&Xz?_Eq4N(g}w3Rz3G4R0*h6#QvhS z$hGXJAh$;^;%aWMVVCg8pRU_!q{Oxf&S3DERaHxrriD7+#iKeE4fjZ6008h~9JuP5OGChZYK8Wo z+EMHF+TWIzlIKw97Ye8wT#3_ta=OdTb`2>$2cT(f^~Kegx;VaZJYASrdr0jwdUMuY z_+RI=^PKu9`<;8I?BXJYxP?7xydVRXO_Knf)Be7gv375_S{Hw> z^{lQiC_YhM9@Tmuh~u;sQ%)})<=r&yz588qvDnh?1!h~{Z$8%7uO~+DcggX{*5~WZ zhD1g&_gwiO>f778eVV3PFks_(W${n%^bqIp#PMdIbqw>Hk-cs~w2CyQba^)QpxlMD zlK7S(zkp6#r!Swt;-}8G#z!O#7txECQJ|&nKi%&a`W2vo;13p$^W!;LJ5^*R$ie=M zGZukg2u50}$XVhByK5}`nEx=0S$a5q4>P)3c}tE|=wVYCD)gQ3gv5 z*y!F9heT=El{*uo* zYcQgZaLAGyJ<>jro(l>w2)Ubw0Mx}};V0DP2AjTVhw~<37vmrIN(7n0tQE76=7Et#yqa!1eHP!Q`Qj<3y?4Y6|TKO%MZ-y zS>OU0o~|wBo?B4aaJw7YZhCmy#Sal~k3GKVW4^8b#>-nD1q;%UX4A@uzLb&a-mOgU z4^D5~SZlU%3crC*y%5QBeWd-iGA>kM7s1h6gBB>*M&k7~ZgONlfYQybaaWzgjhpj( zXeGCcI|fbiz4w;9<+TM1%o^CN9ZyIq#GD6xg`kVoXD9YCk-(-F_lR&~d1w=ydK}uH z$FRlFS6KHVzfFEt?5x3m6t@?wTb0V^ny+4%=Je&PSsjSnh|pekM&f6zt**>4?!x;E z;iu(n3+M0S(BBeGHw_t9J_CdU_$^6x^8E~E+SB05te!+uU?QNf2;+~50Q3npU?QMH z7?=oPh#zw#ofdv9@VWU7`tVs34&?4Ih22+T(O`!r9AXlxrF4h79{Yo%!b+KF*1h2P zF8(z&n1sXDf5OHgdA{uq;zqdw+$a{LR6&bBxlv;vZj}E$H;M@0Mk$B>#f|d1=SID} z=SHOq{l$%%gwFN*KL4BNo}d$@HQ3T7b!wU(V%jcaCs?*PQ~#1GmbZk$My?4vAP+D# zrOTM4L-{dJ}$h$=V|OUKRduG@ZSARd{b%PE423 zG)}C2R8aMDH>0Tj&8-kH0KAPISp5&4uHJFieUJ8zD;IDf%&40E#4u25J~y?#fiUjC z(YjbR>L4z3(E|u<5w_GtS13=vTQWcre-~0Gs1=kPRs%%c>Brmp`g@Ol>jY&Nt<7qJ z8bLK~!wDvv_6+a(zl&Aeir+P?%B~jQiUq1ADPc8oEZbe#tI7lsCCUId`Ml2UnTF1o>8SWI}+xd znU(_&s39$0((!nH|FvOqVHL9fLYfmSq*{CNTK-GHl3*mi!p&0ZRp)-JK&34Bwe6tK5vwlzYDyp}6Vzi0n6zGZV^n;ESq zYqFPH*81SZ*Hi!7-iPOJnQBGm2W*`BZr~}hb}hho6S7k>9{wUMcYWR}sO7G*0KB=i zB^KhzdQJ-JeE%QFCToqC2llsT2PaGWb194KDz79Go-Hnl%}=aU^u_V`b_jNgTAwVS z^~x-65}w-zzJnvcmCU39{|iI0-Uz}_oHv3n6tK@|d4`Z5zj~Bp{u_oO_8vpgcaNbU z3i=yEG5rfe@eROGghl)h48{IEhJxwUJ%-{Gz)+Cm0T_yd|1cD&MgWEa4)Xwy*y|4r z1rqpA3`LdBcML_iFo2=RNdqtxutWfcf+-w?p&*U;7ek>haK?7$>t38K6Q~e^Hu4id zO%Y#|QMOwLBA1-1BKUh!)a0W}?k2=6I#Yf9y-ulmrNK9%Q6(@7u|?9iBv6ozo%!(3 zIt3TY1enu1>IY;4#yw}f>_53B`Jq{01APy;IO%&~?XmG5W8Ng<0O_f8mPZXId#gpO zt<968TNs=hn+a5?h8~Fr7UVvuxa9~xk*f@~OTA3WNvx7Ejr}T96$_KRV zxM20fLHxO6Q%9_nPTOan^G5xe>;7W!U4 zO+ReWXLcS3Lfw2+ZGmZw5gTG_#|5S&F0$EN04Aah|2&|U^a4|QlK0K_7_kZ%9ouEZ zS=x1m4N*^gqEB7vMb96qleh-??lWv~|8T$o?bHr<5#K8_^lH9GK{pJ>|Ml9{N$O}E zX4MBf!&hgBU6rR3YSL8`))d$r#8|0(=AzEmrio^Jbpw-|S?_q<-J|BTYBa^5TAipp zHhyNG7jJ9PVsKek5cjtYL7;^@0JQMApjJ@tPtd{+2(*xK4_b(oc|$_~7ihsB0|Z)V z`460VyAV$Tg$-6+*zz; zIx6Ez7>l8-G8V&Pqjk7j6`EqDbvRpPX0_Dlo$dKhuB*}8E9G^sJ&CX$c$n=>)EafI zu56Fjj{Edi*X>s%CysZRrGvjUQX$m$96$eS}=4f7YP zXcIwBCq1!>dbGelpra9%7^~P&bnbR%ea_PWTpUlX0!)9}C^zkcGb+{BjM{Ou>RJXu zCDiI_55Q<*tfLR#?BoJFIR0ys2}aY7St-a>xK??7_J>~mToa(GT$lSy3$zXEhnI!E zCaW@PW3|*YKm_QNby9!pVdmz1!Fjd6ee~|Bz}9WEg<@C-4Ry+b+oH3(0YTW?7?ZKukO29+?K=^V$?Ppq&c4@3tr*`tIzp=Hm1E#LA#w{jwYD z%3oF%LhJt?uUVN|03(I=4TOEs+;Jakd7Yx52 zd{-)D9+uhLTbPkiMD33QjCzN&Wq(#Iij4(~^j_NccZKiL)VEr*PbNjNVd{XVFoUvg zU9A@74@+S>QwDkt$?I@_DdSc3*O9yM=o!HP3Dk9~Yj3iAx<%e&-S8c5(z;VeqqYkF zUs2e1qy624(Yp>9@+S3%ufvGJJOuTE4Db)VwQxCYrV5So7}`<$i?2vNPE!ZEd;e-6-0HeMc` zQ-;&X2Oi-oQ~Zp*rUIXyoIQUB`5#-j;IpDt;&4VSv`t_pTQ&W#tX8)3gQYQLHR+ja z`&*WaMo3P^TzzWR{*spBz>*+sAIaCd4<%PIWT=OBRxYG1Uoy*g`NaLs6}A@l##UGI zHcSVrGFas+cpn9I()6D}Jq2V?=Z+fsD(;R6V1=Wu?EsaY~7d}S9M)$_`> z&@>@=g(@#Geo0QX^0`HTELaO*`QrWE@nJcsLqRqHZ!EC<$@-rt(Jpo`UBPWWt=cTG%w13xlU8S3gJ z2r2&Yd2I3yk1-Z(0I7(vAO&QGGnR7rgZY!i^h0*ycxWXo@K^AF=rw`@Qgg47C}72i z9LNuQq|X#1>cZJxQb(^pc5SYvGxPwwpNNjKe|SGQyzZ`CxA1xl2urm|9m7ARxDgH7Zv|rrRp9xq z=Iz9Vrw5Q~Bo^eB+7tM{MpzH^t3lE9W3CiHKhkF?$fwzU@CW@!nPdpCd?}OM6Q>zI zuKsTMI%(JA{O>l1rc&(;Nf?3g*Jt4s)?t?rf(rZq6h|cu{MG0plnI}A>wzHv3$+

ipqZvs9^^R%D)#}WukKNVPP9G(|0A4_ShA)46 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 diff --git a/edsnlp/training/trainer.py b/edsnlp/training/trainer.py index c480e12b28..81c7fb8c06 100644 --- a/edsnlp/training/trainer.py +++ b/edsnlp/training/trainer.py @@ -695,6 +695,8 @@ def train( for td in train_data if td.pipe_names is None or set(td.pipe_names) & set(pipe_names) ] + for td in phase_training_data: + print("phase_training_data", td) if len(phase_training_data) == 0: raise ValueError( diff --git a/pyproject.toml b/pyproject.toml index 465d996e94..52d77ce724 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -258,6 +258,8 @@ where = ["."] "eds.span_classifier" = "edsnlp.pipes.trainable.span_classifier.factory:create_component" "eds.span_linker" = "edsnlp.pipes.trainable.span_linker.factory:create_component" "eds.biaffine_dep_parser" = "edsnlp.pipes.trainable.biaffine_dep_parser.factory:create_component" +"eds.doc_pooler" = "edsnlp.pipes.trainable.embeddings.doc_pooler.factory:create_component" +"eds.doc_classifier" = "edsnlp.pipes.trainable.doc_classifier.factory:create_component" [project.entry-points."edsnlp_schedules"] "linear" = "edsnlp.training.optimizer:LinearSchedule" @@ -268,6 +270,7 @@ where = ["."] "eds.ner_overlap" = "edsnlp.metrics.ner:NerOverlapMetric" "eds.span_attribute" = "edsnlp.metrics.span_attribute:SpanAttributeMetric" "eds.dep_parsing" = "edsnlp.metrics.dep_parsing:DependencyParsingMetric" +"eds.doc_classif" = "edsnlp.metrics.doc_classif:DocClassificationMetric" # Deprecated "eds.ner_exact_metric" = "edsnlp.metrics.ner:NerExactMetric" From c439c749be86889f7a51ea5cdd089da2649543a4 Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Wed, 16 Jul 2025 16:27:22 +0200 Subject: [PATCH 03/18] remove debug print --- edsnlp/metrics/doc_classif.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/edsnlp/metrics/doc_classif.py b/edsnlp/metrics/doc_classif.py index 81d1f0138f..38ee71bdf5 100644 --- a/edsnlp/metrics/doc_classif.py +++ b/edsnlp/metrics/doc_classif.py @@ -45,8 +45,6 @@ def doc_classification_metric( pred_labels.append(pred) gold_labels.append(gold) - print(pred_labels, gold_labels) - labels = set(gold_labels) | set(pred_labels) results = {} for label in labels: From d16de733e24dcb834b15681c8a862294f2c43105 Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Thu, 17 Jul 2025 16:48:19 +0200 Subject: [PATCH 04/18] add unit test for doc_classifier --- .../trainable/test_doc_classifier.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tests/pipelines/trainable/test_doc_classifier.py diff --git a/tests/pipelines/trainable/test_doc_classifier.py b/tests/pipelines/trainable/test_doc_classifier.py new file mode 100644 index 0000000000..22e6a0aef8 --- /dev/null +++ b/tests/pipelines/trainable/test_doc_classifier.py @@ -0,0 +1,33 @@ +import pytest + +import edsnlp +import edsnlp.pipes as eds + +pytest.importorskip("torch.nn") + + +@pytest.mark.parametrize("pooling_mode", ["mean", "max", "cls", "sum"]) +@pytest.mark.parametrize("label_attr", ["label", "alive"]) +@pytest.mark.parametrize("num_classes", [2, 10]) +def test_doc_classifier(pooling_mode, label_attr, num_classes): + nlp = edsnlp.blank("eds") + doc = nlp.make_doc("Le patient est mort.") + + nlp.add_pipe( + eds.doc_classifier( + embedding=eds.doc_pooler( + pooling_mode=pooling_mode, + embedding=eds.transformer( + model="prajjwal1/bert-tiny", + window=128, + stride=96, + ), + ), + num_classes=num_classes, + label_attr=label_attr, + ), + name="doc_classifier", + ) + doc = nlp(doc) + label = getattr(doc._, label_attr, None) + assert label in range(0, num_classes) From 0abf40874bb6fd70e63e47b32f2c1e8734f5b57d Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Tue, 22 Jul 2025 16:24:39 +0200 Subject: [PATCH 05/18] add string label handling --- .../doc_classifier/doc_classifier.py | 165 +++++++++++++++++- 1 file changed, 164 insertions(+), 1 deletion(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index a47e46e22d..4d7da1c682 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -1,4 +1,4 @@ -import os +"""import os import pickle from typing import Any, Dict, Iterable, Optional, Sequence, Set, Union @@ -123,3 +123,166 @@ def to_disk(self, path, *, exclude=set()): with open(data_path, "wb") as f: pickle.dump({"label_attr": self.label_attr}, f) return super().to_disk(path, exclude=exclude) +""" + +import os +import pickle +from typing import Any, Dict, Iterable, Optional, Sequence, Set, Union + +import torch +from spacy.tokens import Doc +from typing_extensions import NotRequired, TypedDict + +from edsnlp.core.pipeline import PipelineProtocol +from edsnlp.core.torch_component import BatchInput, TorchComponent +from edsnlp.pipes.base import BaseComponent +from edsnlp.pipes.trainable.embeddings.typing import ( + WordContextualizerComponent, + WordEmbeddingComponent, +) +from edsnlp.utils.bindings import Attributes + +DocClassifierBatchInput = TypedDict( + "DocClassifierBatchInput", + { + "embedding": BatchInput, + "targets": NotRequired[torch.Tensor], + }, +) + +DocClassifierBatchOutput = TypedDict( + "DocClassifierBatchOutput", + { + "loss": Optional[torch.Tensor], + "labels": Optional[torch.Tensor], + }, +) + + +class TrainableDocClassifier( + TorchComponent[DocClassifierBatchOutput, DocClassifierBatchInput], + BaseComponent, +): + def __init__( + self, + nlp: Optional[PipelineProtocol] = None, + name: str = "doc_classifier", + *, + embedding: Union[WordEmbeddingComponent, WordContextualizerComponent], + num_classes: int, + label_attr: str = "label", + label2id: Optional[Dict[str, int]] = None, + id2label: Optional[Dict[int, str]] = None, + loss_fn=None, + ): + self.label_attr: Attributes = label_attr + self.label2id = label2id or {} + self.id2label = id2label or {} + super().__init__(nlp, name) + self.embedding = embedding + self.loss_fn = loss_fn or torch.nn.CrossEntropyLoss() + + if not hasattr(self.embedding, "output_size"): + raise ValueError( + "The embedding component must have an 'output_size' attribute." + ) + embedding_size = self.embedding.output_size + self.classifier = torch.nn.Linear(embedding_size, num_classes) + + def set_extensions(self) -> None: + super().set_extensions() + if not Doc.has_extension(self.label_attr): + Doc.set_extension(self.label_attr, default={}) + + def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): + if not self.label2id: + labels = set() + for doc in gold_data: + label = getattr(doc._, self.label_attr, None) + if isinstance(label, str): + labels.add(label) + if labels: + self.label2id = {label: i for i, label in enumerate(sorted(labels))} + self.id2label = {i: label for label, i in self.label2id.items()} + super().post_init(gold_data, exclude=exclude) + + def preprocess(self, doc: Doc) -> Dict[str, Any]: + return {"embedding": self.embedding.preprocess(doc)} + + def preprocess_supervised(self, doc: Doc) -> Dict[str, Any]: + preps = self.preprocess(doc) + label = getattr(doc._, self.label_attr, None) + if label is None: + raise ValueError( + f"Document does not have a gold label in 'doc._.{self.label_attr}'" + ) + if isinstance(label, str) and self.label2id: + if label not in self.label2id: + raise ValueError(f"Label '{label}' not in label2id mapping.") + label = self.label2id[label] + return { + **preps, + "targets": torch.tensor(label, dtype=torch.long), + } + + def collate(self, batch: Dict[str, Sequence[Any]]) -> DocClassifierBatchInput: + embeddings = self.embedding.collate(batch["embedding"]) + batch_input: DocClassifierBatchInput = {"embedding": embeddings} + if "targets" in batch: + batch_input["targets"] = torch.stack(batch["targets"]) + return batch_input + + def forward(self, batch: DocClassifierBatchInput) -> DocClassifierBatchOutput: + pooled = self.embedding(batch["embedding"]) + embeddings = pooled["embeddings"] + + logits = self.classifier(embeddings) + + output: DocClassifierBatchOutput = {} + if "targets" in batch: + loss = self.loss_fn(logits, batch["targets"]) + output["loss"] = loss + output["labels"] = None + else: + output["loss"] = None + output["labels"] = torch.argmax(logits, dim=-1) + return output + + def postprocess(self, docs, results, input): + labels = results["labels"] + if isinstance(labels, torch.Tensor): + labels = labels.tolist() + for doc, label in zip(docs, labels): + if self.id2label and isinstance(label, int): + label = self.id2label.get(label, label) + setattr(doc._, self.label_attr, label) + return docs + + def to_disk(self, path, *, exclude=set()): + repr_id = object.__repr__(self) + if repr_id in exclude: + return + exclude.add(repr_id) + os.makedirs(path, exist_ok=True) + data_path = path / "label_attr.pkl" + with open(data_path, "wb") as f: + pickle.dump( + { + "label_attr": self.label_attr, + "label2id": self.label2id, + "id2label": self.id2label, + }, + f, + ) + return super().to_disk(path, exclude=exclude) + + @classmethod + def from_disk(cls, path, **kwargs): + data_path = path / "label_attr.pkl" + with open(data_path, "rb") as f: + data = pickle.load(f) + obj = super().from_disk(path, **kwargs) + obj.label_attr = data.get("label_attr", "label") + obj.label2id = data.get("label2id", {}) + obj.id2label = data.get("id2label", {}) + return obj From 14ef979ad415860edf4805cf95d4cc67a61dd13b Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Tue, 22 Jul 2025 16:25:49 +0200 Subject: [PATCH 06/18] remove old code --- .../doc_classifier/doc_classifier.py | 127 ------------------ 1 file changed, 127 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index 4d7da1c682..7a05538ed6 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -1,130 +1,3 @@ -"""import os -import pickle -from typing import Any, Dict, Iterable, Optional, Sequence, Set, Union - -import torch -from spacy.tokens import Doc -from typing_extensions import NotRequired, TypedDict - -from edsnlp.core.pipeline import PipelineProtocol -from edsnlp.core.torch_component import BatchInput, TorchComponent -from edsnlp.pipes.base import BaseComponent -from edsnlp.pipes.trainable.embeddings.typing import ( - WordContextualizerComponent, - WordEmbeddingComponent, -) -from edsnlp.utils.bindings import Attributes - -DocClassifierBatchInput = TypedDict( - "DocClassifierBatchInput", - { - "embedding": BatchInput, - "targets": NotRequired[torch.Tensor], - }, -) - -DocClassifierBatchOutput = TypedDict( - "DocClassifierBatchOutput", - { - "loss": Optional[torch.Tensor], - "labels": Optional[torch.Tensor], - }, -) - - -class TrainableDocClassifier( - TorchComponent[DocClassifierBatchOutput, DocClassifierBatchInput], - BaseComponent, -): - def __init__( - self, - nlp: Optional[PipelineProtocol] = None, - name: str = "doc_classifier", - *, - embedding: Union[WordEmbeddingComponent, WordContextualizerComponent], - num_classes: int, - label_attr: str = "label", - loss_fn=None, - ): - self.label_attr: Attributes = label_attr - super().__init__(nlp, name) - self.embedding = embedding - self.loss_fn = loss_fn or torch.nn.CrossEntropyLoss() - - if not hasattr(self.embedding, "output_size"): - raise ValueError( - "The embedding component must have an 'output_size' attribute." - ) - embedding_size = self.embedding.output_size - self.classifier = torch.nn.Linear(embedding_size, num_classes) - - def set_extensions(self) -> None: - super().set_extensions() - if not Doc.has_extension(self.label_attr): - Doc.set_extension(self.label_attr, default={}) - - def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): - super().post_init(gold_data, exclude=exclude) - - def preprocess(self, doc: Doc) -> Dict[str, Any]: - return {"embedding": self.embedding.preprocess(doc)} - - def preprocess_supervised(self, doc: Doc) -> Dict[str, Any]: - preps = self.preprocess(doc) - label = getattr(doc._, self.label_attr, None) - if label is None: - raise ValueError( - f"Document does not have a gold label in 'doc._.{self.label_attr}'" - ) - return { - **preps, - "targets": torch.tensor(label, dtype=torch.long), - } - - def collate(self, batch: Dict[str, Sequence[Any]]) -> DocClassifierBatchInput: - embeddings = self.embedding.collate(batch["embedding"]) - batch_input: DocClassifierBatchInput = {"embedding": embeddings} - if "targets" in batch: - batch_input["targets"] = torch.stack(batch["targets"]) - return batch_input - - def forward(self, batch: DocClassifierBatchInput) -> DocClassifierBatchOutput: - pooled = self.embedding(batch["embedding"]) - embeddings = pooled["embeddings"] - - logits = self.classifier(embeddings) - - output: DocClassifierBatchOutput = {} - if "targets" in batch: - loss = self.loss_fn(logits, batch["targets"]) - output["loss"] = loss - output["labels"] = None - else: - output["loss"] = None - output["labels"] = torch.argmax(logits, dim=-1) - return output - - def postprocess(self, docs, results, input): - labels = results["labels"] - if isinstance(labels, torch.Tensor): - labels = labels.tolist() - for doc, label in zip(docs, labels): - setattr(doc._, self.label_attr, label) - # doc._.label = label - return docs - - def to_disk(self, path, *, exclude=set()): - repr_id = object.__repr__(self) - if repr_id in exclude: - return - exclude.add(repr_id) - os.makedirs(path, exist_ok=True) - data_path = path / "label_attr.pkl" - with open(data_path, "wb") as f: - pickle.dump({"label_attr": self.label_attr}, f) - return super().to_disk(path, exclude=exclude) -""" - import os import pickle from typing import Any, Dict, Iterable, Optional, Sequence, Set, Union From f8ab6dbe113d6a6f93ac44b2ffe788ec4e36b0c9 Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Tue, 22 Jul 2025 17:26:14 +0200 Subject: [PATCH 07/18] automatically set num_classes from labels if not provided by user --- edsnlp/pipes/trainable/doc_classifier/doc_classifier.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index 7a05538ed6..8dd2e5e04f 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -42,7 +42,7 @@ def __init__( name: str = "doc_classifier", *, embedding: Union[WordEmbeddingComponent, WordContextualizerComponent], - num_classes: int, + num_classes: Optional[int] = None, label_attr: str = "label", label2id: Optional[Dict[str, int]] = None, id2label: Optional[Dict[int, str]] = None, @@ -60,7 +60,8 @@ def __init__( "The embedding component must have an 'output_size' attribute." ) embedding_size = self.embedding.output_size - self.classifier = torch.nn.Linear(embedding_size, num_classes) + if num_classes: + self.classifier = torch.nn.Linear(embedding_size, num_classes) def set_extensions(self) -> None: super().set_extensions() @@ -77,6 +78,10 @@ def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): if labels: self.label2id = {label: i for i, label in enumerate(sorted(labels))} self.id2label = {i: label for label, i in self.label2id.items()} + print("num classes:", len(self.label2id)) + self.classifier = torch.nn.Linear( + self.embedding.output_size, len(self.label2id) + ) super().post_init(gold_data, exclude=exclude) def preprocess(self, doc: Doc) -> Dict[str, Any]: From 22bbb9095cbb58152eb10279437406a318acadee Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Wed, 23 Jul 2025 18:43:02 +0200 Subject: [PATCH 08/18] speed up label mapping --- edsnlp/pipes/trainable/doc_classifier/doc_classifier.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index 8dd2e5e04f..fc46f684a8 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -76,8 +76,11 @@ def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): if isinstance(label, str): labels.add(label) if labels: - self.label2id = {label: i for i, label in enumerate(sorted(labels))} - self.id2label = {i: label for label, i in self.label2id.items()} + self.label2id = {} + self.id2label = {} + for i, label in enumerate(labels): + self.label2id[label] = i + self.id2label[i] = label print("num classes:", len(self.label2id)) self.classifier = torch.nn.Linear( self.embedding.output_size, len(self.label2id) From 614ed54e5c0fbb588044291b58f63f376d36785f Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Thu, 24 Jul 2025 11:06:17 +0200 Subject: [PATCH 09/18] add possibility to pass labels to doc_classifier --- .../trainable/doc_classifier/doc_classifier.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index fc46f684a8..57f51426b3 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -47,10 +47,12 @@ def __init__( label2id: Optional[Dict[str, int]] = None, id2label: Optional[Dict[int, str]] = None, loss_fn=None, + labels: Optional[Sequence[str]] = None, ): self.label_attr: Attributes = label_attr self.label2id = label2id or {} self.id2label = id2label or {} + self.labels = labels super().__init__(nlp, name) self.embedding = embedding self.loss_fn = loss_fn or torch.nn.CrossEntropyLoss() @@ -70,11 +72,14 @@ def set_extensions(self) -> None: def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): if not self.label2id: - labels = set() - for doc in gold_data: - label = getattr(doc._, self.label_attr, None) - if isinstance(label, str): - labels.add(label) + if self.labels is not None: + labels = set(self.labels) + else: + labels = set() + for doc in gold_data: + label = getattr(doc._, self.label_attr, None) + if isinstance(label, str): + labels.add(label) if labels: self.label2id = {} self.id2label = {} From 94f1d5b88fe8ad5e88e29215072028894eea547a Mon Sep 17 00:00:00 2001 From: LucasDedieu Date: Wed, 27 Aug 2025 11:19:41 +0200 Subject: [PATCH 10/18] change doc classif metric --- edsnlp/metrics/doc_classif.py | 100 ++++++++++++++++++++++++++-------- 1 file changed, 78 insertions(+), 22 deletions(-) diff --git a/edsnlp/metrics/doc_classif.py b/edsnlp/metrics/doc_classif.py index 38ee71bdf5..db08b7dad7 100644 --- a/edsnlp/metrics/doc_classif.py +++ b/edsnlp/metrics/doc_classif.py @@ -11,11 +11,11 @@ def doc_classification_metric( examples: Union[Tuple[Iterable[Doc], Iterable[Doc]], Iterable[Example]], label_attr: str = "label", micro_key: str = "micro", + macro_key: str = "macro", filter_expr: Optional[str] = None, ) -> Dict[str, Any]: """ Scores document-level classification (accuracy, precision, recall, F1). - Parameters ---------- examples: Examples @@ -25,9 +25,10 @@ def doc_classification_metric( The Doc._ attribute containing the label micro_key: str The key to use to store the micro-averaged results + macro_key: str + The key to use to store the macro-averaged results filter_expr: str The filter expression to use to filter the documents - Returns ------- Dict[str, Any] @@ -46,33 +47,88 @@ def doc_classification_metric( gold_labels.append(gold) labels = set(gold_labels) | set(pred_labels) + labels = {label for label in labels if label is not None} results = {} + for label in labels: - pred_set = [i for i, p in enumerate(pred_labels) if p == label] - gold_set = [i for i, g in enumerate(gold_labels) if g == label] - tp = len(set(pred_set) & set(gold_set)) - num_pred = len(pred_set) - num_gold = len(gold_set) + tp = sum( + 1 for p, g in zip(pred_labels, gold_labels) if p == label and g == label + ) + fp = sum( + 1 for p, g in zip(pred_labels, gold_labels) if p == label and g != label + ) + fn = sum( + 1 for p, g in zip(pred_labels, gold_labels) if g == label and p != label + ) + + precision = tp / (tp + fp) if (tp + fp) > 0 else 0.0 + recall = tp / (tp + fn) if (tp + fn) > 0 else 0.0 + f1 = ( + (2 * precision * recall) / (precision + recall) + if (precision + recall) > 0 + else 0.0 + ) + results[label] = { - "f": 2 * tp / max(1, num_pred + num_gold), - "p": 1 if tp == num_pred else (tp / num_pred) if num_pred else 0.0, - "r": 1 if tp == num_gold else (tp / num_gold) if num_gold else 0.0, + "f": f1, + "p": precision, + "r": recall, "tp": tp, - "support": num_gold, - "positives": num_pred, + "fp": fp, + "fn": fn, + "support": tp + fn, + "positives": tp + fp, } - tp = sum(1 for p, g in zip(pred_labels, gold_labels) if p == g) - num_pred = len(pred_labels) - num_gold = len(gold_labels) + total_tp = sum(1 for p, g in zip(pred_labels, gold_labels) if p == g) + total_fp = sum(1 for p, g in zip(pred_labels, gold_labels) if p != g) + total_fn = total_fp + + micro_precision = ( + total_tp / (total_tp + total_fp) if (total_tp + total_fp) > 0 else 0.0 + ) + micro_recall = ( + total_tp / (total_tp + total_fn) if (total_tp + total_fn) > 0 else 0.0 + ) + micro_f1 = ( + (2 * micro_precision * micro_recall) / (micro_precision + micro_recall) + if (micro_precision + micro_recall) > 0 + else 0.0 + ) + accuracy = total_tp / len(pred_labels) if len(pred_labels) > 0 else 0.0 + results[micro_key] = { - "accuracy": tp / num_gold if num_gold else 0.0, - "f": 2 * tp / max(1, num_pred + num_gold), - "p": tp / num_pred if num_pred else 0.0, - "r": tp / num_gold if num_gold else 0.0, - "tp": tp, - "support": num_gold, - "positives": num_pred, + "accuracy": accuracy, + "f": micro_f1, + "p": micro_precision, + "r": micro_recall, + "tp": total_tp, + "fp": total_fp, + "fn": total_fn, + "support": len(gold_labels), + "positives": len(pred_labels), + } + + per_class_precisions = [results[label]["p"] for label in labels] + per_class_recalls = [results[label]["r"] for label in labels] + per_class_f1s = [results[label]["f"] for label in labels] + + macro_precision = ( + sum(per_class_precisions) / len(per_class_precisions) + if per_class_precisions + else 0.0 + ) + macro_recall = ( + sum(per_class_recalls) / len(per_class_recalls) if per_class_recalls else 0.0 + ) + macro_f1 = sum(per_class_f1s) / len(per_class_f1s) if per_class_f1s else 0.0 + + results[macro_key] = { + "f": macro_f1, + "p": macro_precision, + "r": macro_recall, + "support": len(labels), + "classes": len(labels), } return results From 4abade06a5d25e26715cb77d8ad6fe3d331a1198 Mon Sep 17 00:00:00 2001 From: Dedieu Lucas Date: Tue, 2 Sep 2025 09:47:53 +0000 Subject: [PATCH 11/18] feat: add class_weight handling --- .../doc_classifier/doc_classifier.py | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index 57f51426b3..724689ae62 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -48,14 +48,19 @@ def __init__( id2label: Optional[Dict[int, str]] = None, loss_fn=None, labels: Optional[Sequence[str]] = None, + class_weights: Optional[Union[Dict[str, float], str]] = None, ): self.label_attr: Attributes = label_attr self.label2id = label2id or {} self.id2label = id2label or {} self.labels = labels + self.class_weights = class_weights + super().__init__(nlp, name) self.embedding = embedding - self.loss_fn = loss_fn or torch.nn.CrossEntropyLoss() + + self._loss_fn = loss_fn + self.loss_fn = None if not hasattr(self.embedding, "output_size"): raise ValueError( @@ -65,6 +70,27 @@ def __init__( if num_classes: self.classifier = torch.nn.Linear(embedding_size, num_classes) + def _compute_class_weights(self, freq_dict: Dict[str, int]) -> torch.Tensor: + """ + Compute class weights from frequency dictionary. + Uses inverse frequency weighting: weight = 1 / frequency + """ + total_samples = sum(freq_dict.values()) + + weights = torch.zeros(len(self.label2id)) + + for label, freq in freq_dict.items(): + if label in self.label2id: + weight = total_samples / (len(self.label2id) * freq) + weights[self.label2id[label]] = weight + + return weights + + def _load_class_weights_from_file(self, filepath: str) -> Dict[str, int]: + """Load class weights from pickle file.""" + with open(filepath, 'rb') as f: + return pickle.load(f) + def set_extensions(self) -> None: super().set_extensions() if not Doc.has_extension(self.label_attr): @@ -90,6 +116,22 @@ def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): self.classifier = torch.nn.Linear( self.embedding.output_size, len(self.label2id) ) + + weight_tensor = None + if self.class_weights is not None: + if isinstance(self.class_weights, str): + freq_dict = self._load_class_weights_from_file(self.class_weights) + weight_tensor = self._compute_class_weights(freq_dict) + elif isinstance(self.class_weights, dict): + weight_tensor = self._compute_class_weights(self.class_weights) + + print(f"Using class weights: {weight_tensor}") + + if self._loss_fn is not None: + self.loss_fn = self._loss_fn + else: + self.loss_fn = torch.nn.CrossEntropyLoss(weight=weight_tensor) + super().post_init(gold_data, exclude=exclude) def preprocess(self, doc: Doc) -> Dict[str, Any]: @@ -171,4 +213,4 @@ def from_disk(cls, path, **kwargs): obj.label_attr = data.get("label_attr", "label") obj.label2id = data.get("label2id", {}) obj.id2label = data.get("id2label", {}) - return obj + return obj \ No newline at end of file From 18949d7df7b731fa35865a9851c7f4527f409794 Mon Sep 17 00:00:00 2001 From: Dedieu Lucas Date: Tue, 2 Sep 2025 10:15:27 +0000 Subject: [PATCH 12/18] feat: add class_weight handling --- .../doc_classifier/doc_classifier.py | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index 724689ae62..0ce9fa4421 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -48,17 +48,17 @@ def __init__( id2label: Optional[Dict[int, str]] = None, loss_fn=None, labels: Optional[Sequence[str]] = None, - class_weights: Optional[Union[Dict[str, float], str]] = None, + class_weights: Optional[Union[Dict[str, float], str]] = None, ): self.label_attr: Attributes = label_attr self.label2id = label2id or {} self.id2label = id2label or {} self.labels = labels - self.class_weights = class_weights - + self.class_weights = class_weights + super().__init__(nlp, name) self.embedding = embedding - + self._loss_fn = loss_fn self.loss_fn = None @@ -76,19 +76,19 @@ def _compute_class_weights(self, freq_dict: Dict[str, int]) -> torch.Tensor: Uses inverse frequency weighting: weight = 1 / frequency """ total_samples = sum(freq_dict.values()) - + weights = torch.zeros(len(self.label2id)) - + for label, freq in freq_dict.items(): if label in self.label2id: weight = total_samples / (len(self.label2id) * freq) weights[self.label2id[label]] = weight - + return weights def _load_class_weights_from_file(self, filepath: str) -> Dict[str, int]: """Load class weights from pickle file.""" - with open(filepath, 'rb') as f: + with open(filepath, "rb") as f: return pickle.load(f) def set_extensions(self) -> None: @@ -116,7 +116,7 @@ def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): self.classifier = torch.nn.Linear( self.embedding.output_size, len(self.label2id) ) - + weight_tensor = None if self.class_weights is not None: if isinstance(self.class_weights, str): @@ -124,14 +124,14 @@ def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): weight_tensor = self._compute_class_weights(freq_dict) elif isinstance(self.class_weights, dict): weight_tensor = self._compute_class_weights(self.class_weights) - + print(f"Using class weights: {weight_tensor}") - + if self._loss_fn is not None: self.loss_fn = self._loss_fn else: self.loss_fn = torch.nn.CrossEntropyLoss(weight=weight_tensor) - + super().post_init(gold_data, exclude=exclude) def preprocess(self, doc: Doc) -> Dict[str, Any]: @@ -161,6 +161,10 @@ def collate(self, batch: Dict[str, Sequence[Any]]) -> DocClassifierBatchInput: return batch_input def forward(self, batch: DocClassifierBatchInput) -> DocClassifierBatchOutput: + """ + Forward pass: compute embeddings, classify, and calculate loss + if targets provided. + """ pooled = self.embedding(batch["embedding"]) embeddings = pooled["embeddings"] @@ -187,6 +191,7 @@ def postprocess(self, docs, results, input): return docs def to_disk(self, path, *, exclude=set()): + """Save classifier state to disk.""" repr_id = object.__repr__(self) if repr_id in exclude: return @@ -206,6 +211,7 @@ def to_disk(self, path, *, exclude=set()): @classmethod def from_disk(cls, path, **kwargs): + """Load classifier from disk.""" data_path = path / "label_attr.pkl" with open(data_path, "rb") as f: data = pickle.load(f) @@ -213,4 +219,4 @@ def from_disk(cls, path, **kwargs): obj.label_attr = data.get("label_attr", "label") obj.label2id = data.get("label2id", {}) obj.id2label = data.get("id2label", {}) - return obj \ No newline at end of file + return obj From 49cdf5169300b95b47cd8350461fd0571a3b140a Mon Sep 17 00:00:00 2001 From: Dedieu Lucas Date: Wed, 3 Sep 2025 12:31:34 +0000 Subject: [PATCH 13/18] fix sum pooling --- edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py b/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py index 3f2edcf6cb..f1c16faeeb 100644 --- a/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py +++ b/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py @@ -95,7 +95,7 @@ def forward(self, batch: DocPoolerBatchInput) -> DocPoolerBatchOutput: elif self.pooling_mode == "max": pooled = embeds.max(dim=1).values elif self.pooling_mode == "sum": - pooled = embeds.sum(dim=1) + pooled = embeds.sum(dim=1) / embeds.size(1) elif self.pooling_mode == "cls": pooled = self.embedding(batch["embedding"])["cls"].to(device) else: From bd2221e7e3307ecc6a0670d2ea652bfba946ebd0 Mon Sep 17 00:00:00 2001 From: Dedieu Lucas Date: Thu, 4 Sep 2025 15:40:46 +0000 Subject: [PATCH 14/18] move classif head model logic to doc_classifier instead of doc_pooler --- .../doc_classifier/doc_classifier.py | 54 +++++++++++++++---- .../embeddings/doc_pooler/doc_pooler.py | 32 +++++------ 2 files changed, 57 insertions(+), 29 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index 0ce9fa4421..913bc4c5b1 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -3,8 +3,9 @@ from typing import Any, Dict, Iterable, Optional, Sequence, Set, Union import torch +import torch.nn as nn from spacy.tokens import Doc -from typing_extensions import NotRequired, TypedDict +from typing_extensions import Literal, NotRequired, TypedDict from edsnlp.core.pipeline import PipelineProtocol from edsnlp.core.torch_component import BatchInput, TorchComponent @@ -36,6 +37,8 @@ class TrainableDocClassifier( TorchComponent[DocClassifierBatchOutput, DocClassifierBatchInput], BaseComponent, ): + """A trainable document classifier that uses embeddings to classify documents.""" + def __init__( self, nlp: Optional[PipelineProtocol] = None, @@ -49,12 +52,21 @@ def __init__( loss_fn=None, labels: Optional[Sequence[str]] = None, class_weights: Optional[Union[Dict[str, float], str]] = None, + hidden_size: Optional[int] = None, + activation_mode: Literal["relu", "gelu", "silu"] = "relu", + dropout_rate: Optional[float] = 0.0, + layer_norm: Optional[bool] = False, ): + self.num_classes = num_classes self.label_attr: Attributes = label_attr self.label2id = label2id or {} self.id2label = id2label or {} self.labels = labels self.class_weights = class_weights + self.hidden_size = hidden_size + self.activation_mode = activation_mode + self.dropout_rate = dropout_rate + self.layer_norm = layer_norm super().__init__(nlp, name) self.embedding = embedding @@ -66,9 +78,23 @@ def __init__( raise ValueError( "The embedding component must have an 'output_size' attribute." ) - embedding_size = self.embedding.output_size - if num_classes: - self.classifier = torch.nn.Linear(embedding_size, num_classes) + self.embedding_size = self.embedding.output_size + if self.num_classes: + self.build_classifier() + + def build_classifier(self): + """Build classification head""" + if self.hidden_size: + self.hidden_layer = torch.nn.Linear(self.embedding_size, self.hidden_size) + self.activation = {"relu": nn.ReLU(), "gelu": nn.GELU(), "silu": nn.SiLU()}[ + self.activation_mode + ] + if self.layer_norm: + self.norm = nn.LayerNorm(self.hidden_size) + self.dropout = nn.Dropout(self.dropout_rate) + self.classifier = torch.nn.Linear(self.hidden_size, self.num_classes) + else: + self.classifier = torch.nn.Linear(self.embedding_size, self.num_classes) def _compute_class_weights(self, freq_dict: Dict[str, int]) -> torch.Tensor: """ @@ -112,10 +138,9 @@ def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): for i, label in enumerate(labels): self.label2id[label] = i self.id2label[i] = label - print("num classes:", len(self.label2id)) - self.classifier = torch.nn.Linear( - self.embedding.output_size, len(self.label2id) - ) + self.num_classes = len(self.label2id) + print("num classes:", self.num_classes) + self.build_classifier() weight_tensor = None if self.class_weights is not None: @@ -138,6 +163,7 @@ def preprocess(self, doc: Doc) -> Dict[str, Any]: return {"embedding": self.embedding.preprocess(doc)} def preprocess_supervised(self, doc: Doc) -> Dict[str, Any]: + """Preprocess document with target labels for training.""" preps = self.preprocess(doc) label = getattr(doc._, self.label_attr, None) if label is None: @@ -166,9 +192,14 @@ def forward(self, batch: DocClassifierBatchInput) -> DocClassifierBatchOutput: if targets provided. """ pooled = self.embedding(batch["embedding"]) - embeddings = pooled["embeddings"] - - logits = self.classifier(embeddings) + x = pooled["embeddings"] + if self.hidden_size: + x = self.hidden_layer(x) + x = self.activation(x) + if self.layer_norm: + x = self.norm(x) + x = self.dropout(x) + logits = self.classifier(x) output: DocClassifierBatchOutput = {} if "targets" in batch: @@ -181,6 +212,7 @@ def forward(self, batch: DocClassifierBatchInput) -> DocClassifierBatchOutput: return output def postprocess(self, docs, results, input): + """Postprocess predictions by assigning labels to documents.""" labels = results["labels"] if isinstance(labels, torch.Tensor): labels = labels.tolist() diff --git a/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py b/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py index f1c16faeeb..d8977734ca 100644 --- a/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py +++ b/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py @@ -52,20 +52,11 @@ def __init__( *, embedding: WordEmbeddingComponent, pooling_mode: Literal["max", "sum", "mean", "cls"] = "mean", - hidden_size: Optional[int] = None, ): super().__init__(nlp, name) self.embedding = embedding self.pooling_mode = pooling_mode - self.output_size = embedding.output_size if hidden_size is None else hidden_size - self.projector = ( - torch.nn.Linear(self.embedding.output_size, hidden_size) - if hidden_size is not None - else torch.nn.Identity() - ) - - def feed_forward(self, doc_embed: torch.Tensor) -> torch.Tensor: - return self.projector(doc_embed) + self.output_size = embedding.output_size def preprocess(self, doc: Doc, **kwargs) -> Dict[str, Any]: embedding_out = self.embedding.preprocess(doc, **kwargs) @@ -85,21 +76,26 @@ def collate(self, batch: Dict[str, Any]) -> DocPoolerBatchInput: } def forward(self, batch: DocPoolerBatchInput) -> DocPoolerBatchOutput: - device = next(self.parameters()).device - embeds = self.embedding(batch["embedding"])["embeddings"] device = embeds.device + if self.pooling_mode == "cls": + pooled = self.embedding(batch["embedding"])["cls"].to(device) + return {"embeddings": pooled} + + mask = embeds.mask + mask_expanded = mask.unsqueeze(-1) + masked_embeds = embeds * mask_expanded + sum_embeds = masked_embeds.sum(dim=1) if self.pooling_mode == "mean": - pooled = embeds.mean(dim=1) + valid_counts = mask.sum(dim=1, keepdim=True).clamp(min=1) + pooled = sum_embeds / valid_counts elif self.pooling_mode == "max": - pooled = embeds.max(dim=1).values + masked_embeds = embeds.masked_fill(~mask_expanded, float("-inf")) + pooled, _ = masked_embeds.max(dim=1) elif self.pooling_mode == "sum": - pooled = embeds.sum(dim=1) / embeds.size(1) - elif self.pooling_mode == "cls": - pooled = self.embedding(batch["embedding"])["cls"].to(device) + pooled = sum_embeds else: raise ValueError(f"Unknown pooling mode: {self.pooling_mode}") - pooled = self.feed_forward(pooled) return {"embeddings": pooled} From 7ca95446b3789f1511a7527a0139dc0e1a5f26a9 Mon Sep 17 00:00:00 2001 From: Dedieu Lucas Date: Mon, 15 Sep 2025 15:04:35 +0000 Subject: [PATCH 15/18] add focal loss --- .../doc_classifier/doc_classifier.py | 81 ++++++++++++++----- 1 file changed, 60 insertions(+), 21 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index 913bc4c5b1..3ecadee3e1 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -7,6 +7,7 @@ from spacy.tokens import Doc from typing_extensions import Literal, NotRequired, TypedDict +import edsnlp from edsnlp.core.pipeline import PipelineProtocol from edsnlp.core.torch_component import BatchInput, TorchComponent from edsnlp.pipes.base import BaseComponent @@ -33,6 +34,52 @@ ) +@edsnlp.registry.misc.register("focal_loss") +class FocalLoss(nn.Module): + """ + Focal Loss implementation for multi-class classification. + + Parameters + ---------- + alpha : torch.Tensor or float, optional + Class weights. If None, no weighting is applied + gamma : float, default=2.0 + Focusing parameter. Higher values give more weight to hard examples + reduction : str, default='mean' + Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum' + """ + + def __init__( + self, + alpha: Optional[Union[torch.Tensor, float]] = None, + gamma: float = 2.0, + reduction: str = "mean", + ): + super().__init__() + self.alpha = alpha + self.gamma = gamma + self.reduction = reduction + + def forward(self, inputs: torch.Tensor, targets: torch.Tensor) -> torch.Tensor: + """ + Forward pass + """ + ce_loss = torch.nn.functional.cross_entropy( + inputs, targets, weight=self.alpha, reduction="none" + ) + + pt = torch.exp(-ce_loss) + + focal_loss = (1 - pt) ** self.gamma * ce_loss + + if self.reduction == "mean": + return focal_loss.mean() + elif self.reduction == "sum": + return focal_loss.sum() + else: + return focal_loss + + class TrainableDocClassifier( TorchComponent[DocClassifierBatchOutput, DocClassifierBatchInput], BaseComponent, @@ -49,9 +96,9 @@ def __init__( label_attr: str = "label", label2id: Optional[Dict[str, int]] = None, id2label: Optional[Dict[int, str]] = None, - loss_fn=None, + loss: Literal["ce", "focal"] = "ce", labels: Optional[Sequence[str]] = None, - class_weights: Optional[Union[Dict[str, float], str]] = None, + class_weights: Optional[Dict[str, float]] = None, hidden_size: Optional[int] = None, activation_mode: Literal["relu", "gelu", "silu"] = "relu", dropout_rate: Optional[float] = 0.0, @@ -71,8 +118,7 @@ def __init__( super().__init__(nlp, name) self.embedding = embedding - self._loss_fn = loss_fn - self.loss_fn = None + self.loss = loss if not hasattr(self.embedding, "output_size"): raise ValueError( @@ -112,17 +158,13 @@ def _compute_class_weights(self, freq_dict: Dict[str, int]) -> torch.Tensor: return weights - def _load_class_weights_from_file(self, filepath: str) -> Dict[str, int]: - """Load class weights from pickle file.""" - with open(filepath, "rb") as f: - return pickle.load(f) - def set_extensions(self) -> None: super().set_extensions() if not Doc.has_extension(self.label_attr): Doc.set_extension(self.label_attr, default={}) def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): + print("post_init") if not self.label2id: if self.labels is not None: labels = set(self.labels) @@ -141,22 +183,19 @@ def post_init(self, gold_data: Iterable[Doc], exclude: Set[str]): self.num_classes = len(self.label2id) print("num classes:", self.num_classes) self.build_classifier() - + print("label2id fini") weight_tensor = None if self.class_weights is not None: - if isinstance(self.class_weights, str): - freq_dict = self._load_class_weights_from_file(self.class_weights) - weight_tensor = self._compute_class_weights(freq_dict) - elif isinstance(self.class_weights, dict): - weight_tensor = self._compute_class_weights(self.class_weights) - + weight_tensor = self._compute_class_weights(self.class_weights) print(f"Using class weights: {weight_tensor}") - - if self._loss_fn is not None: - self.loss_fn = self._loss_fn - else: + print("weight tensor fini") + if self.loss == "ce": self.loss_fn = torch.nn.CrossEntropyLoss(weight=weight_tensor) - + elif self.loss == "focal": + self.loss_fn = FocalLoss(alpha=weight_tensor, gamma=2.0, reduction="mean") + else: + raise ValueError(f"Unknown loss: {self.loss}") + print("loss finie") super().post_init(gold_data, exclude=exclude) def preprocess(self, doc: Doc) -> Dict[str, Any]: From 8c6d78d1cc8f99a17878a7f5dc1b008b805d9108 Mon Sep 17 00:00:00 2001 From: Dedieu Lucas Date: Tue, 16 Sep 2025 16:18:50 +0000 Subject: [PATCH 16/18] add attention_pooling --- .../embeddings/doc_pooler/doc_pooler.py | 57 +++++++++++++------ 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py b/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py index d8977734ca..11571dcb3b 100644 --- a/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py +++ b/edsnlp/pipes/trainable/embeddings/doc_pooler/doc_pooler.py @@ -13,7 +13,7 @@ "DocPoolerBatchInput", { "embedding": BatchInput, - "mask": torch.Tensor, # shape: (batch_size, seq_len) + "mask": torch.Tensor, "stats": Dict[str, Any], }, ) @@ -21,7 +21,7 @@ DocPoolerBatchOutput = TypedDict( "DocPoolerBatchOutput", { - "embeddings": torch.Tensor, # shape: (batch_size, embedding_dim) + "embeddings": torch.Tensor, }, ) @@ -51,13 +51,17 @@ def __init__( name: str = "document_pooler", *, embedding: WordEmbeddingComponent, - pooling_mode: Literal["max", "sum", "mean", "cls"] = "mean", + pooling_mode: Literal["max", "sum", "mean", "cls", "attention"] = "mean", ): super().__init__(nlp, name) self.embedding = embedding self.pooling_mode = pooling_mode self.output_size = embedding.output_size + # Add attention layer if needed + if pooling_mode == "attention": + self.attention = torch.nn.Linear(self.output_size, 1) + def preprocess(self, doc: Doc, **kwargs) -> Dict[str, Any]: embedding_out = self.embedding.preprocess(doc, **kwargs) return { @@ -76,7 +80,12 @@ def collate(self, batch: Dict[str, Any]) -> DocPoolerBatchInput: } def forward(self, batch: DocPoolerBatchInput) -> DocPoolerBatchOutput: - embeds = self.embedding(batch["embedding"])["embeddings"] + """ + Forward pass: compute document embeddings using the selected pooling strategy + """ + embeds = self.embedding(batch["embedding"])["embeddings"].refold( + "context", "word" + ) device = embeds.device if self.pooling_mode == "cls": @@ -84,18 +93,34 @@ def forward(self, batch: DocPoolerBatchInput) -> DocPoolerBatchOutput: return {"embeddings": pooled} mask = embeds.mask - mask_expanded = mask.unsqueeze(-1) - masked_embeds = embeds * mask_expanded - sum_embeds = masked_embeds.sum(dim=1) - if self.pooling_mode == "mean": - valid_counts = mask.sum(dim=1, keepdim=True).clamp(min=1) - pooled = sum_embeds / valid_counts - elif self.pooling_mode == "max": - masked_embeds = embeds.masked_fill(~mask_expanded, float("-inf")) - pooled, _ = masked_embeds.max(dim=1) - elif self.pooling_mode == "sum": - pooled = sum_embeds + + if self.pooling_mode == "attention": + attention_weights = self.attention(embeds) # (batch_size, seq_len, 1) + attention_weights = attention_weights.squeeze(-1) # (batch_size, seq_len) + + attention_weights = attention_weights.masked_fill(~mask, float("-inf")) + + attention_weights = torch.softmax(attention_weights, dim=1) + + attention_weights = attention_weights.unsqueeze( + -1 + ) # (batch_size, seq_len, 1) + pooled = (embeds * attention_weights).sum(dim=1) # (batch_size, embed_dim) + else: - raise ValueError(f"Unknown pooling mode: {self.pooling_mode}") + mask_expanded = mask.unsqueeze(-1) + masked_embeds = embeds * mask_expanded + sum_embeds = masked_embeds.sum(dim=1) + + if self.pooling_mode == "mean": + valid_counts = mask.sum(dim=1, keepdim=True).clamp(min=1) + pooled = sum_embeds / valid_counts + elif self.pooling_mode == "max": + masked_embeds = embeds.masked_fill(~mask_expanded, float("-inf")) + pooled, _ = masked_embeds.max(dim=1) + elif self.pooling_mode == "sum": + pooled = sum_embeds + else: + raise ValueError(f"Unknown pooling mode: {self.pooling_mode}") return {"embeddings": pooled} From ff77d53c0db7ee4f93f2f24bad8a01375e6d52a8 Mon Sep 17 00:00:00 2001 From: Dedieu Lucas Date: Wed, 17 Sep 2025 14:45:48 +0000 Subject: [PATCH 17/18] doc_classifer: and are now paths --- .../pipes/trainable/doc_classifier/doc_classifier.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py index 3ecadee3e1..1d36a4ee1e 100644 --- a/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py +++ b/edsnlp/pipes/trainable/doc_classifier/doc_classifier.py @@ -2,6 +2,7 @@ import pickle from typing import Any, Dict, Iterable, Optional, Sequence, Set, Union +import pandas as pd import torch import torch.nn as nn from spacy.tokens import Doc @@ -97,8 +98,8 @@ def __init__( label2id: Optional[Dict[str, int]] = None, id2label: Optional[Dict[int, str]] = None, loss: Literal["ce", "focal"] = "ce", - labels: Optional[Sequence[str]] = None, - class_weights: Optional[Dict[str, float]] = None, + labels: Optional[str] = None, + class_weights: Optional[str] = None, hidden_size: Optional[int] = None, activation_mode: Literal["relu", "gelu", "silu"] = "relu", dropout_rate: Optional[float] = 0.0, @@ -108,8 +109,11 @@ def __init__( self.label_attr: Attributes = label_attr self.label2id = label2id or {} self.id2label = id2label or {} - self.labels = labels - self.class_weights = class_weights + if labels: + self.labels = pd.read_pickle(labels) + self.num_classes = len(self.labels) + if class_weights: + self.class_weights = pd.read_pickle(class_weights) self.hidden_size = hidden_size self.activation_mode = activation_mode self.dropout_rate = dropout_rate From 81698837faad2671511d29ff79e57fdaec39ecc6 Mon Sep 17 00:00:00 2001 From: Dedieu Lucas Date: Thu, 18 Sep 2025 12:01:48 +0000 Subject: [PATCH 18/18] fix tuning when hyperparameter path in config contain list --- edsnlp/tune.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/edsnlp/tune.py b/edsnlp/tune.py index 0f56e0194c..24b2ca891d 100644 --- a/edsnlp/tune.py +++ b/edsnlp/tune.py @@ -260,9 +260,15 @@ def update_config( current_config = config for key in p_path[:-1]: - if key not in current_config: - raise KeyError(f"Path '{key}' not found in config.") - current_config = current_config[key] + try: + current_config = current_config[key] + except KeyError: + try: + current_config = current_config[int(key)] + except (KeyError, ValueError): + raise KeyError( + f"Path '{key}' not found in config ({current_config})" + ) current_config[p_path[-1]] = value if resolve: