From f8b6ded049aeb636746069ddab9e69ac7249dd63 Mon Sep 17 00:00:00 2001 From: Edward Yang Date: Fri, 19 Mar 2021 17:07:04 +0800 Subject: [PATCH] Spinalnet to Release/v2.0 from v2.0rc. (#1326) * Added spinalnet gemstone classification module --- .../SpinalNet_Gemstones/README.md | 118 ++++++++ .../SpinalNet_Gemstones/gem_dataset.py | 53 ++++ .../spinalnet_res101_gemstone/README.md | 21 ++ .../spinalnet_res101_gemstone/label_list.txt | 87 ++++++ .../spinalnet_res101_gemstone/module.py | 255 ++++++++++++++++++ .../spinalnet_res50_gemstone/README.md | 21 ++ .../spinalnet_res50_gemstone/label_list.txt | 87 ++++++ .../spinalnet_res50_gemstone/module.py | 255 ++++++++++++++++++ .../spinalnet_vgg16_gemstone/README.md | 21 ++ .../spinalnet_vgg16_gemstone/label_list.txt | 87 ++++++ .../spinalnet_vgg16_gemstone/module.py | 188 +++++++++++++ .../testImages/Cats Eye/cats_eye_3.jpg | Bin 0 -> 3004 bytes .../testImages/Fluorite/fluorite_18.jpg | Bin 0 -> 65860 bytes .../testImages/Kunzite/kunzite_28.jpg | Bin 0 -> 38587 bytes 14 files changed, 1193 insertions(+) create mode 100644 modules/thirdparty/image/classification/SpinalNet_Gemstones/README.md create mode 100644 modules/thirdparty/image/classification/SpinalNet_Gemstones/gem_dataset.py create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/README.md create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/label_list.txt create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/module.py create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/README.md create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/label_list.txt create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/module.py create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/README.md create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/label_list.txt create mode 100755 modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/module.py create mode 100644 modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Cats Eye/cats_eye_3.jpg create mode 100644 modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Fluorite/fluorite_18.jpg create mode 100644 modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Kunzite/kunzite_28.jpg diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/README.md b/modules/thirdparty/image/classification/SpinalNet_Gemstones/README.md new file mode 100644 index 00000000..432711cb --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/README.md @@ -0,0 +1,118 @@ +# PaddleHub SpinalNet + +本示例将展示如何使用PaddleHub的SpinalNet预训练模型进行宝石识别或finetune并完成宝石的预测任务。 + +## 1. 首先要安装PaddleHub2.0版 + +```shell +$pip install -U paddlehub==2.0.0 +``` + +## 2. 在本地加载封装的模型 + +```Python +import paddlehub as hub +``` +### 加载spinalnet_res50_gemstone +```Python +spinal_res50 = hub.Module(name="spinalnet_res50_gemstone") +``` +### 加载spinalnet_vgg16_gemstone +```Python +spinal_vgg16 = hub.Module(name="spinalnet_vgg16_gemstone") +``` +### 加载spinalnet_res101_gemstone +```Python +spinal_res101 = hub.Module(name="spinalnet_res101_gemstone") +``` +## 3. 预测 + +### 使用spinalnet_res50_gemstone预测 +```Python +result_res50 = spinal_res50.predict(['/PATH/TO/IMAGE']) +print(result_res50) +``` +### 使用spinalnet_vgg16_gemstone预测 +```Python +result_vgg16 = spinal_vgg16.predict(['/PATH/TO/IMAGE']) +print(result_vgg16) +``` +### 使用spinalnet_res101_gemstone预测 +```Python +sresult_res101 = spinal_res101.predict(['/PATH/TO/IMAGE']) +print(result_res101) +``` +## 4. 命令行预测 + +```shell +$ hub run spinalnet_res50_gemstone --input_path "/PATH/TO/IMAGE" --top_k 5 +``` + +## 5. 对PaddleHub模型进行训练微调 + +## 如何开始Fine-tune + +在完成安装PaddlePaddle与PaddleHub后,即可对Spinalnet模型进行针对宝石数据集的Fine-tune。 + +## 代码步骤 + +使用PaddleHub Fine-tune API进行Fine-tune可以分为5个步骤。 + +### Step1: 加载必要的库 +```python +from paddlehub.finetune.trainer import Trainer +from gem_dataset import GemStones +from paddlehub.vision import transforms as T +import paddle +``` + + +### Step2: 定义数据预处理方式 +```python + +train_transforms = T.Compose([T.Resize((256, 256)), T.CenterCrop(224), T.Normalize(mean=[0.485, 0.456, 0.406], std = [0.229, 0.224, 0.225])], to_rgb=True) +eval_transforms = T.Compose([T.Resize((256, 256)), T.CenterCrop(224), T.Normalize(mean=[0.485, 0.456, 0.406], std = [0.229, 0.224, 0.225])], to_rgb=True) +``` + +`transforms` 数据增强模块定义了丰富的数据预处理方式,用户可按照需求替换自己需要的数据预处理方式。 + +### Step3: 定义数据集 +```python +gem_train = GemStones(transforms=train_transforms, mode='train') +gem_validate = GemStones(transforms=eval_transforms, mode='eval') +``` + + +数据集的准备代码可以参考 [gem_dataset.py](PaddleHub/modules/thirdparty/image/classification/SpinanlNet_Gemstones/gem_dataset.py)。 + + +### Step4: 开始训练微调 + +```python +optimizer = paddle.optimizer.Momentum(learning_rate=0.001, momentum=0.9, parameters=spinal_res50.parameters()) +trainer = Trainer(spinal_res50, optimizer, use_gpu=True, checkpoint_dir='fine_tuned_model') +trainer.train(gem_train, epochs=5, batch_size=128, eval_dataset=gem_validate, save_interval=1, log_interval=10) +``` + +### Step5: 微调后再预测 + +```python +spinal_res50 = hub.Module(name="spinalnet_res50_gemstone") +result_res50 = spinal_res50.predict(['/PATH/TO/IMAGE']) +print(result_res50) +``` + + +### 查看代码 + +https://github.com/PaddleHub/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/module.py + +https://github.com/PaddleHub/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/module.py + +https://github.com/PaddleHub/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/module.py + +### 依赖 + +paddlepaddle >= 2.0.0 + +paddlehub >= 2.0.0 diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/gem_dataset.py b/modules/thirdparty/image/classification/SpinalNet_Gemstones/gem_dataset.py new file mode 100644 index 00000000..5e77a899 --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/gem_dataset.py @@ -0,0 +1,53 @@ +import paddle +import numpy as np +from typing import Callable +from code.config import config_parameters + +class GemStones(paddle.io.Dataset): + """ + step 1:paddle.io.Dataset + """ + def __init__(self, transforms: Callable, mode: str ='train'): + """ + step 2:create reader + """ + super(GemStones, self).__init__() + + self.mode = mode + self.transforms = transforms + + train_image_dir = config_parameters['train_image_dir'] + eval_image_dir = config_parameters['eval_image_dir'] + test_image_dir = config_parameters['test_image_dir'] + + train_data_folder = paddle.vision.DatasetFolder(train_image_dir) + eval_data_folder = paddle.vision.DatasetFolder(eval_image_dir) + test_data_folder = paddle.vision.DatasetFolder(test_image_dir) + + config_parameters['label_dict'] = train_data_folder.class_to_idx + + if self.mode == 'train': + self.data = train_data_folder + elif self.mode == 'eval': + self.data = eval_data_folder + elif self.mode == 'test': + self.data = test_data_folder + + + def __getitem__(self, index): + """ + step 3:implement __getitem__ + """ + data = np.array(self.data[index][0]).astype('float32') + + data = self.transforms(data) + + label = np.array(self.data[index][1]).astype('int64') + + return data, label + + def __len__(self): + """ + step 4:implement __len__ + """ + return len(self.data) \ No newline at end of file diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/README.md b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/README.md new file mode 100755 index 00000000..55fdee68 --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/README.md @@ -0,0 +1,21 @@ +## 概述 +* [SpinalNet](https://arxiv.org/abs/2007.03347)的网络结构如下图, + +[网络结构图](https://ai-studio-static-online.cdn.bcebos.com/0c58fff63018401089f92085a2aea5d46921351012e64ac4b7d5a8e1370c463f) + +该模型为SpinalNet在宝石数据集上的预训练模型,可以安装PaddleHub后完成一键预测及微调。 + +## 预训练模型 + +预训练模型位于https://aistudio.baidu.com/asistudio/datasetdetail/69923 + +## API +加载该模型后,使用PadduleHub2.0的默认图像分类API +``` +def Predict(images, batch_size, top_k): +``` + +**参数** +* images (list[str: 图片路径]) : 输入图像数据列表 +* batch_size: 默认值为1 +* top_k: 每张图片的前k个预测类别 diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/label_list.txt b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/label_list.txt new file mode 100755 index 00000000..d6465942 --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/label_list.txt @@ -0,0 +1,87 @@ +Alexandrite +Almandine +Amazonite +Amber +Amethyst +Ametrine +Andalusite +Andradite +Aquamarine +Aventurine Green +Aventurine Yellow +Benitoite +Beryl Golden +Bixbite +Bloodstone +Blue Lace Agate +Carnelian +Cats Eye +Chalcedony +Chalcedony Blue +Chrome Diopside +Chrysoberyl +Chrysocolla +Chrysoprase +Citrine +Coral +Danburite +Diamond +Diaspore +Dumortierite +Emerald +Fluorite +Garnet Red +Goshenite +Grossular +Hessonite +Hiddenite +Iolite +Jade +Jasper +Kunzite +Kyanite +Labradorite +Lapis Lazuli +Larimar +Malachite +Moonstone +Morganite +Onyx Black +Onyx Green +Onyx Red +Opal +Pearl +Peridot +Prehnite +Pyrite +Pyrope +Quartz Beer +Quartz Lemon +Quartz Rose +Quartz Rutilated +Quartz Smoky +Rhodochrosite +Rhodolite +Rhodonite +Ruby +Sapphire Blue +Sapphire Pink +Sapphire Purple +Sapphire Yellow +Scapolite +Serpentine +Sodalite +Spessartite +Sphene +Spinel +Spodumene +Sunstone +Tanzanite +Tigers Eye +Topaz +Tourmaline +Tsavorite +Turquoise +Variscite +Zircon +Zoisite diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/module.py b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/module.py new file mode 100755 index 00000000..e4a67b7f --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res101_gemstone/module.py @@ -0,0 +1,255 @@ +# copyright (c) 2021 nanting03. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +from typing import Union + +import numpy as np +import paddle +import paddle.nn as nn +import paddlehub.vision.transforms as T +from paddlehub.module.module import moduleinfo +from paddlehub.module.cv_module import ImageClassifierModule + + +class BottleneckBlock(nn.Layer): + + expansion = 4 + + def __init__(self, + inplanes, + planes, + stride=1, + downsample=None, + groups=1, + base_width=64, + dilation=1, + norm_layer=None): + super(BottleneckBlock, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2D + width = int(planes * (base_width / 64.)) * groups + + self.conv1 = nn.Conv2D(inplanes, width, 1, bias_attr=False) + self.bn1 = norm_layer(width) + + self.conv2 = nn.Conv2D(width, + width, + 3, + padding=dilation, + stride=stride, + groups=groups, + dilation=dilation, + bias_attr=False) + self.bn2 = norm_layer(width) + + self.conv3 = nn.Conv2D(width, + planes * self.expansion, + 1, + bias_attr=False) + self.bn3 = norm_layer(planes * self.expansion) + self.relu = nn.ReLU() + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Layer): + def __init__(self, block=BottleneckBlock, depth=101, with_pool=True): + super(ResNet, self).__init__() + layer_cfg = { + 18: [2, 2, 2, 2], + 34: [3, 4, 6, 3], + 50: [3, 4, 6, 3], + 101: [3, 4, 23, 3], + 152: [3, 8, 36, 3] + } + layers = layer_cfg[depth] + self.with_pool = with_pool + self._norm_layer = nn.BatchNorm2D + + self.inplanes = 64 + self.dilation = 1 + + self.conv1 = nn.Conv2D(3, + self.inplanes, + kernel_size=7, + stride=2, + padding=3, + bias_attr=False) + self.bn1 = self._norm_layer(self.inplanes) + self.relu = nn.ReLU() + self.maxpool = nn.MaxPool2D(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + if with_pool: + self.avgpool = nn.AdaptiveAvgPool2D((1, 1)) + + def _make_layer(self, block, planes, blocks, stride=1, dilate=False): + norm_layer = self._norm_layer + downsample = None + previous_dilation = self.dilation + if dilate: + self.dilation *= stride + stride = 1 + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.Conv2D(self.inplanes, + planes * block.expansion, + 1, + stride=stride, + bias_attr=False), + norm_layer(planes * block.expansion), + ) + + layers = [] + layers.append( + block(self.inplanes, planes, stride, downsample, 1, 64, + previous_dilation, norm_layer)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes, norm_layer=norm_layer)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + if self.with_pool: + x = self.avgpool(x) + + return x + + +@moduleinfo(name="spinalnet_res101_gemstone", + type="CV/classification", + author="nanting03", + author_email="975348977@qq.com", + summary="spinalnet_res101_gemstone is a classification model, " + "this module is trained with Gemstone dataset.", + version="1.0.0", + meta=ImageClassifierModule) +class SpinalNet_ResNet101(nn.Layer): + def __init__(self, label_list: list = None, load_checkpoint: str = None): + super(SpinalNet_ResNet101, self).__init__() + + if label_list is not None: + self.labels = label_list + class_dim = len(self.labels) + else: + label_list = [] + label_file = os.path.join(self.directory, 'label_list.txt') + files = open(label_file) + for line in files.readlines(): + line = line.strip('\n') + label_list.append(line) + self.labels = label_list + class_dim = len(self.labels) + + self.backbone = ResNet() + + half_in_size = round(2048 / 2) + layer_width = 20 + + self.half_in_size = half_in_size + + self.fc_spinal_layer1 = nn.Sequential( + nn.Dropout(p=0.5), nn.Linear(half_in_size, layer_width), + nn.BatchNorm1D(layer_width), nn.ReLU()) + self.fc_spinal_layer2 = nn.Sequential( + nn.Dropout(p=0.5), nn.Linear(half_in_size + layer_width, + layer_width), + nn.BatchNorm1D(layer_width), nn.ReLU()) + self.fc_spinal_layer3 = nn.Sequential( + nn.Dropout(p=0.5), nn.Linear(half_in_size + layer_width, + layer_width), + nn.BatchNorm1D(layer_width), nn.ReLU()) + self.fc_spinal_layer4 = nn.Sequential( + nn.Dropout(p=0.5), nn.Linear(half_in_size + layer_width, + layer_width), + nn.BatchNorm1D(layer_width), nn.ReLU()) + self.fc_out = nn.Sequential( + nn.Dropout(p=0.5), + nn.Linear(layer_width * 4, class_dim), + ) + + if load_checkpoint is not None: + self.model_dict = paddle.load(load_checkpoint)[0] + self.set_dict(self.model_dict) + print("load custom checkpoint success") + + else: + checkpoint = os.path.join(self.directory, + 'spinalnet_res101.pdparams') + self.model_dict = paddle.load(checkpoint) + self.set_dict(self.model_dict) + print("load pretrained checkpoint success") + + def transforms(self, images: Union[str, np.ndarray]): + transforms = T.Compose([ + T.Resize((256, 256)), + T.CenterCrop(224), + T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) + ], + to_rgb=True) + return transforms(images) + + def forward(self, inputs: paddle.Tensor): + y = self.backbone(inputs) + feature = y + y = paddle.flatten(y, 1) + + y1 = self.fc_spinal_layer1(y[:, 0:self.half_in_size]) + y2 = self.fc_spinal_layer2( + paddle.concat([y[:, self.half_in_size:2 * self.half_in_size], y1], + axis=1)) + y3 = self.fc_spinal_layer3( + paddle.concat([y[:, 0:self.half_in_size], y2], axis=1)) + y4 = self.fc_spinal_layer4( + paddle.concat([y[:, self.half_in_size:2 * self.half_in_size], y3], + axis=1)) + + y = paddle.concat([y1, y2, y3, y4], axis=1) + + y = self.fc_out(y) + return y, feature diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/README.md b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/README.md new file mode 100755 index 00000000..55fdee68 --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/README.md @@ -0,0 +1,21 @@ +## 概述 +* [SpinalNet](https://arxiv.org/abs/2007.03347)的网络结构如下图, + +[网络结构图](https://ai-studio-static-online.cdn.bcebos.com/0c58fff63018401089f92085a2aea5d46921351012e64ac4b7d5a8e1370c463f) + +该模型为SpinalNet在宝石数据集上的预训练模型,可以安装PaddleHub后完成一键预测及微调。 + +## 预训练模型 + +预训练模型位于https://aistudio.baidu.com/asistudio/datasetdetail/69923 + +## API +加载该模型后,使用PadduleHub2.0的默认图像分类API +``` +def Predict(images, batch_size, top_k): +``` + +**参数** +* images (list[str: 图片路径]) : 输入图像数据列表 +* batch_size: 默认值为1 +* top_k: 每张图片的前k个预测类别 diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/label_list.txt b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/label_list.txt new file mode 100755 index 00000000..d6465942 --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/label_list.txt @@ -0,0 +1,87 @@ +Alexandrite +Almandine +Amazonite +Amber +Amethyst +Ametrine +Andalusite +Andradite +Aquamarine +Aventurine Green +Aventurine Yellow +Benitoite +Beryl Golden +Bixbite +Bloodstone +Blue Lace Agate +Carnelian +Cats Eye +Chalcedony +Chalcedony Blue +Chrome Diopside +Chrysoberyl +Chrysocolla +Chrysoprase +Citrine +Coral +Danburite +Diamond +Diaspore +Dumortierite +Emerald +Fluorite +Garnet Red +Goshenite +Grossular +Hessonite +Hiddenite +Iolite +Jade +Jasper +Kunzite +Kyanite +Labradorite +Lapis Lazuli +Larimar +Malachite +Moonstone +Morganite +Onyx Black +Onyx Green +Onyx Red +Opal +Pearl +Peridot +Prehnite +Pyrite +Pyrope +Quartz Beer +Quartz Lemon +Quartz Rose +Quartz Rutilated +Quartz Smoky +Rhodochrosite +Rhodolite +Rhodonite +Ruby +Sapphire Blue +Sapphire Pink +Sapphire Purple +Sapphire Yellow +Scapolite +Serpentine +Sodalite +Spessartite +Sphene +Spinel +Spodumene +Sunstone +Tanzanite +Tigers Eye +Topaz +Tourmaline +Tsavorite +Turquoise +Variscite +Zircon +Zoisite diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/module.py b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/module.py new file mode 100755 index 00000000..a3ad0e3d --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_res50_gemstone/module.py @@ -0,0 +1,255 @@ +# copyright (c) 2021 nanting03. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +from typing import Union + +import numpy as np +import paddle +import paddle.nn as nn +import paddlehub.vision.transforms as T +from paddlehub.module.module import moduleinfo +from paddlehub.module.cv_module import ImageClassifierModule + + +class BottleneckBlock(nn.Layer): + + expansion = 4 + + def __init__(self, + inplanes, + planes, + stride=1, + downsample=None, + groups=1, + base_width=64, + dilation=1, + norm_layer=None): + super(BottleneckBlock, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2D + width = int(planes * (base_width / 64.)) * groups + + self.conv1 = nn.Conv2D(inplanes, width, 1, bias_attr=False) + self.bn1 = norm_layer(width) + + self.conv2 = nn.Conv2D(width, + width, + 3, + padding=dilation, + stride=stride, + groups=groups, + dilation=dilation, + bias_attr=False) + self.bn2 = norm_layer(width) + + self.conv3 = nn.Conv2D(width, + planes * self.expansion, + 1, + bias_attr=False) + self.bn3 = norm_layer(planes * self.expansion) + self.relu = nn.ReLU() + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Layer): + def __init__(self, block=BottleneckBlock, depth=50, with_pool=True): + super(ResNet, self).__init__() + layer_cfg = { + 18: [2, 2, 2, 2], + 34: [3, 4, 6, 3], + 50: [3, 4, 6, 3], + 101: [3, 4, 23, 3], + 152: [3, 8, 36, 3] + } + layers = layer_cfg[depth] + self.with_pool = with_pool + self._norm_layer = nn.BatchNorm2D + + self.inplanes = 64 + self.dilation = 1 + + self.conv1 = nn.Conv2D(3, + self.inplanes, + kernel_size=7, + stride=2, + padding=3, + bias_attr=False) + self.bn1 = self._norm_layer(self.inplanes) + self.relu = nn.ReLU() + self.maxpool = nn.MaxPool2D(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + if with_pool: + self.avgpool = nn.AdaptiveAvgPool2D((1, 1)) + + def _make_layer(self, block, planes, blocks, stride=1, dilate=False): + norm_layer = self._norm_layer + downsample = None + previous_dilation = self.dilation + if dilate: + self.dilation *= stride + stride = 1 + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.Conv2D(self.inplanes, + planes * block.expansion, + 1, + stride=stride, + bias_attr=False), + norm_layer(planes * block.expansion), + ) + + layers = [] + layers.append( + block(self.inplanes, planes, stride, downsample, 1, 64, + previous_dilation, norm_layer)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes, norm_layer=norm_layer)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + if self.with_pool: + x = self.avgpool(x) + + return x + + +@moduleinfo(name="spinalnet_res50_gemstone", + type="CV/classification", + author="nanting03", + author_email="975348977@qq.com", + summary="spinalnet_res50_gemstone is a classification model, " + "this module is trained with Gemstone dataset.", + version="1.0.0", + meta=ImageClassifierModule) +class SpinalNet_ResNet50(nn.Layer): + def __init__(self, label_list: list = None, load_checkpoint: str = None): + super(SpinalNet_ResNet50, self).__init__() + + if label_list is not None: + self.labels = label_list + class_dim = len(self.labels) + else: + label_list = [] + label_file = os.path.join(self.directory, 'label_list.txt') + files = open(label_file) + for line in files.readlines(): + line = line.strip('\n') + label_list.append(line) + self.labels = label_list + class_dim = len(self.labels) + + self.backbone = ResNet() + + half_in_size = round(2048 / 2) + layer_width = 20 + + self.half_in_size = half_in_size + + self.fc_spinal_layer1 = nn.Sequential( + nn.Dropout(p=0.5), nn.Linear(half_in_size, layer_width), + nn.BatchNorm1D(layer_width), nn.ReLU()) + self.fc_spinal_layer2 = nn.Sequential( + nn.Dropout(p=0.5), nn.Linear(half_in_size + layer_width, + layer_width), + nn.BatchNorm1D(layer_width), nn.ReLU()) + self.fc_spinal_layer3 = nn.Sequential( + nn.Dropout(p=0.5), nn.Linear(half_in_size + layer_width, + layer_width), + nn.BatchNorm1D(layer_width), nn.ReLU()) + self.fc_spinal_layer4 = nn.Sequential( + nn.Dropout(p=0.5), nn.Linear(half_in_size + layer_width, + layer_width), + nn.BatchNorm1D(layer_width), nn.ReLU()) + self.fc_out = nn.Sequential( + nn.Dropout(p=0.5), + nn.Linear(layer_width * 4, class_dim), + ) + + if load_checkpoint is not None: + self.model_dict = paddle.load(load_checkpoint)[0] + self.set_dict(self.model_dict) + print("load custom checkpoint success") + + else: + checkpoint = os.path.join(self.directory, + 'spinalnet_res50.pdparams') + self.model_dict = paddle.load(checkpoint) + self.set_dict(self.model_dict) + print("load pretrained checkpoint success") + + def transforms(self, images: Union[str, np.ndarray]): + transforms = T.Compose([ + T.Resize((256, 256)), + T.CenterCrop(224), + T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) + ], + to_rgb=True) + return transforms(images) + + def forward(self, inputs: paddle.Tensor): + y = self.backbone(inputs) + feature = y + y = paddle.flatten(y, 1) + + y1 = self.fc_spinal_layer1(y[:, 0:self.half_in_size]) + y2 = self.fc_spinal_layer2( + paddle.concat([y[:, self.half_in_size:2 * self.half_in_size], y1], + axis=1)) + y3 = self.fc_spinal_layer3( + paddle.concat([y[:, 0:self.half_in_size], y2], axis=1)) + y4 = self.fc_spinal_layer4( + paddle.concat([y[:, self.half_in_size:2 * self.half_in_size], y3], + axis=1)) + + y = paddle.concat([y1, y2, y3, y4], axis=1) + + y = self.fc_out(y) + return y, feature diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/README.md b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/README.md new file mode 100755 index 00000000..55fdee68 --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/README.md @@ -0,0 +1,21 @@ +## 概述 +* [SpinalNet](https://arxiv.org/abs/2007.03347)的网络结构如下图, + +[网络结构图](https://ai-studio-static-online.cdn.bcebos.com/0c58fff63018401089f92085a2aea5d46921351012e64ac4b7d5a8e1370c463f) + +该模型为SpinalNet在宝石数据集上的预训练模型,可以安装PaddleHub后完成一键预测及微调。 + +## 预训练模型 + +预训练模型位于https://aistudio.baidu.com/asistudio/datasetdetail/69923 + +## API +加载该模型后,使用PadduleHub2.0的默认图像分类API +``` +def Predict(images, batch_size, top_k): +``` + +**参数** +* images (list[str: 图片路径]) : 输入图像数据列表 +* batch_size: 默认值为1 +* top_k: 每张图片的前k个预测类别 diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/label_list.txt b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/label_list.txt new file mode 100755 index 00000000..d6465942 --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/label_list.txt @@ -0,0 +1,87 @@ +Alexandrite +Almandine +Amazonite +Amber +Amethyst +Ametrine +Andalusite +Andradite +Aquamarine +Aventurine Green +Aventurine Yellow +Benitoite +Beryl Golden +Bixbite +Bloodstone +Blue Lace Agate +Carnelian +Cats Eye +Chalcedony +Chalcedony Blue +Chrome Diopside +Chrysoberyl +Chrysocolla +Chrysoprase +Citrine +Coral +Danburite +Diamond +Diaspore +Dumortierite +Emerald +Fluorite +Garnet Red +Goshenite +Grossular +Hessonite +Hiddenite +Iolite +Jade +Jasper +Kunzite +Kyanite +Labradorite +Lapis Lazuli +Larimar +Malachite +Moonstone +Morganite +Onyx Black +Onyx Green +Onyx Red +Opal +Pearl +Peridot +Prehnite +Pyrite +Pyrope +Quartz Beer +Quartz Lemon +Quartz Rose +Quartz Rutilated +Quartz Smoky +Rhodochrosite +Rhodolite +Rhodonite +Ruby +Sapphire Blue +Sapphire Pink +Sapphire Purple +Sapphire Yellow +Scapolite +Serpentine +Sodalite +Spessartite +Sphene +Spinel +Spodumene +Sunstone +Tanzanite +Tigers Eye +Topaz +Tourmaline +Tsavorite +Turquoise +Variscite +Zircon +Zoisite diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/module.py b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/module.py new file mode 100755 index 00000000..a0ae5b77 --- /dev/null +++ b/modules/thirdparty/image/classification/SpinalNet_Gemstones/spinalnet_vgg16_gemstone/module.py @@ -0,0 +1,188 @@ +# copyright (c) 2021 nanting03. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +from typing import Union + +import numpy as np +import paddle +import paddle.nn as nn +import paddlehub.vision.transforms as T +from paddlehub.module.module import moduleinfo +from paddlehub.module.cv_module import ImageClassifierModule + +import paddle +from paddle import nn + + +class VGG(nn.Layer): + def __init__(self, features, with_pool=True): + super(VGG, self).__init__() + self.features = features + self.with_pool = with_pool + + if with_pool: + self.avgpool = nn.AdaptiveAvgPool2D((7, 7)) + + def forward(self, x): + x = self.features(x) + + if self.with_pool: + x = self.avgpool(x) + + return x + + +def make_layers(cfg, batch_norm=False): + layers = [] + in_channels = 3 + for v in cfg: + if v == 'M': + layers += [nn.MaxPool2D(kernel_size=2, stride=2)] + else: + conv2d = nn.Conv2D(in_channels, v, kernel_size=3, padding=1) + if batch_norm: + layers += [conv2d, nn.BatchNorm2D(v), nn.ReLU()] + else: + layers += [conv2d, nn.ReLU()] + in_channels = v + return nn.Sequential(*layers) + + +cfgs = { + 'A': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], + 'B': + [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], + 'D': [ + 64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, + 512, 512, 'M' + ], + 'E': [ + 64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, + 'M', 512, 512, 512, 512, 'M' + ], +} + + +def _vgg(arch, cfg, batch_norm, **kwargs): + model = VGG(make_layers(cfgs[cfg], batch_norm=batch_norm), **kwargs) + return model + + +def vgg16(batch_norm=False, **kwargs): + model_name = 'vgg16' + if batch_norm: + model_name += ('_bn') + return _vgg(model_name, 'D', batch_norm, **kwargs) + + +@moduleinfo(name="spinalnet_vgg16_gemstone", + type="CV/classification", + author="nanting03", + author_email="975348977@qq.com", + summary="spinalnet_vgg16_gemstone is a classification model, " + "this module is trained with Gemstone dataset.", + version="1.0.0", + meta=ImageClassifierModule) +class SpinalNet_VGG16(nn.Layer): + def __init__(self, label_list: list = None, load_checkpoint: str = None): + super(SpinalNet_VGG16, self).__init__() + + if label_list is not None: + self.labels = label_list + class_dim = len(self.labels) + else: + label_list = [] + label_file = os.path.join(self.directory, 'label_list.txt') + files = open(label_file) + for line in files.readlines(): + line = line.strip('\n') + label_list.append(line) + self.labels = label_list + class_dim = len(self.labels) + + self.backbone = vgg16() + + half_in_size = round(512 * 7 * 7 / 2) + layer_width = 4096 + + self.half_in_size = half_in_size + + self.fc_spinal_layer1 = nn.Sequential( + nn.Dropout(p=0.5), + nn.Linear(half_in_size, layer_width), + nn.BatchNorm1D(layer_width), + nn.ReLU(), + ) + self.fc_spinal_layer2 = nn.Sequential( + nn.Dropout(p=0.5), + nn.Linear(half_in_size + layer_width, layer_width), + nn.BatchNorm1D(layer_width), + nn.ReLU(), + ) + self.fc_spinal_layer3 = nn.Sequential( + nn.Dropout(p=0.5), + nn.Linear(half_in_size + layer_width, layer_width), + nn.BatchNorm1D(layer_width), + nn.ReLU(), + ) + self.fc_spinal_layer4 = nn.Sequential( + nn.Dropout(p=0.5), + nn.Linear(half_in_size + layer_width, layer_width), + nn.BatchNorm1D(layer_width), + nn.ReLU(), + ) + self.fc_out = nn.Sequential(nn.Dropout(p=0.5), + nn.Linear(layer_width * 4, class_dim)) + + if load_checkpoint is not None: + self.model_dict = paddle.load(load_checkpoint)[0] + self.set_dict(self.model_dict) + print("load custom checkpoint success") + + else: + checkpoint = os.path.join(self.directory, + 'spinalnet_vgg16.pdparams') + self.model_dict = paddle.load(checkpoint) + self.set_dict(self.model_dict) + print("load pretrained checkpoint success") + + def transforms(self, images: Union[str, np.ndarray]): + transforms = T.Compose([ + T.Resize((256, 256)), + T.CenterCrop(224), + T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) + ], + to_rgb=True) + return transforms(images) + + def forward(self, inputs: paddle.Tensor): + + y = self.backbone(inputs) + feature = y + y = paddle.flatten(y, 1) + + y1 = self.fc_spinal_layer1(y[:, 0:self.half_in_size]) + y2 = self.fc_spinal_layer2( + paddle.concat([y[:, self.half_in_size:2 * self.half_in_size], y1], + axis=1)) + y3 = self.fc_spinal_layer3( + paddle.concat([y[:, 0:self.half_in_size], y2], axis=1)) + y4 = self.fc_spinal_layer4( + paddle.concat([y[:, self.half_in_size:2 * self.half_in_size], y3], + axis=1)) + + y = paddle.concat([y1, y2, y3, y4], axis=1) + + y = self.fc_out(y) + return y, feature diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Cats Eye/cats_eye_3.jpg b/modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Cats Eye/cats_eye_3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b32a8aa53994a18d34f927976f946f2b09853b2 GIT binary patch literal 3004 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 TOXW+0D5s^#AZhacjfsB)eYzGD literal 0 HcmV?d00001 diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Fluorite/fluorite_18.jpg b/modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Fluorite/fluorite_18.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6234cf9c889f002bb589fdd2ff754b62f11c84d GIT binary patch literal 65860 zcmeFYbx<5(_a-{H26qTLNN|_n5M*!&t_d!|-3bH;1e*Z{hY&1y(7_?N6LbQD!$5Et zLeP-q+pXQLx>9xP{_dZ*yPoRPZ@+!IpVP0LK7IP%&wrZ$5)D<5DgX@)4e;h^1^n9r zG^zx-I069L+5m0<0DucXi+2HFK1pa#pnJlT1c?LSJZ;0C!26#9BOQ>k?kg1lKp9{F zPyr|c3<0`N(n|m{zzJXv-~+e@Sl_a^#Mq6(bCY;Fwj^5=%i>Eq-g&J0ZdO8!}=e(|6{EGENJK$m{{02xOn&k zPZe570O)8K80eT7SXh`(rbY{YIu5`j#Uf)7Qp6_Le~ZKFO(FaqT#U=6)bO3sVD=m+ zV(Sx)hfhUKLrcfb!O8W4TU1P3LQ?9b@+%cpHFc22YeOSr6H_yDJ9`I5CubK|UqAnV zz@Xrem=CdW@gEZsA?X>J(5&p7+%F}iW#tuLE2|otnp;|7ZS5WX1A{}uBco&EbMp&} zOYon|D_h$;yU4x$Uk8U5sLS71f39zC@BYIJ4S?~#O!j}ti}Z;XIwmFtCeD9&p`i!< zhd3!F7K;!znW8?Ac;|Dg>^B#%_60blaERk4FPG3q^SbVn#W zXxZ4Le!aYar*!+yMLkzh2A=mP1LsC4T!rT}`Xv`an%ePu6DX&xZs7gKW)}4%2SVR) zc>at!$b_oSq#qMGQ;WKXRtI*#*8N3I@+5|A(1CGc@XrBKBUuz@^D)zET06|)FSo%F zJV9JVS+6I^lWJ@F{D(zOma;@6bHaa3EtU2ncS9dE-O3hkADzndEuZxcrsA%N;9h;q zqLJ@TaUPc1=fpT#>Y(=|`y~;1=pQb7XZM$zefq33>bMjV^2XrxrvQUb;ptl5)jAeB za`_Vv*AmWOmrQ?p7-QN6gpwW-dynpVk6uxn4Ace55)oI_niT2mC2Y8RwzND~VP^ha z_8C2q>%W38kGglT+s8K)hVLec0U?)#g%ZycbG9v$x9I_O9-*oQEN*cbMiUlRNSe3GMUhN#!BXl_RpiSw#? zwlQD{w*&cugx^hjf1HuLEO6VgKWhKd+}Mbwu6jAO(6!GbluVw#`_^QGwb9=;bN)7b zt*A2NaF{^bYOe9pEn-FFfR>*%AyBxn!lBvOV@pTe`PWGs+{A8a^Nvy6)ku(6 zG7mUM%x$Kq%bBfwW*~%O08Iw0*>5td-R8O^UVf;@K5mpjQt$>&crQz50lD|F|?X}*+5SMcB#Yb_( zpt-Dwri(fjRI^4hgO~$&793+2Y&v&HQ`gz~uN|Bq91Xp+_rr;LV#T-I-pJ9)Y29mn>=t zx@gLPTpFsdn)J45CGPxVShA)1vIF}LppNL*-9SjS0B7V4)8YUzT}#=-3k~?(gw@i4 z+ppgnlXuj^8w_IA?Uvf1q2i`>)&aLl4B{r&N#BRXGo71$@yz(0eKe7PNfVy1!PYos zM7$f`r)9b?V+!KP{H8p|uDx(I2A4Vux$j}ReR}bcJCK=hkc#`mSbHfKz`8_UERd1l zCZ@)fyy&>4wGhQ{($sFlubFMuh_HvMZx@tAD8wQ&vkNNHcxW{=&Q|2^uba-U4>o$b zO>gE0w(Oe?^xW3xEy7kJtV7)Ge!qkdnTXHguK6H^al={_u~KuA>eiFm4mUJb=DTd^ zUI9T23YR=N3}MUk-Y|@`pqc<gpd{Rda36il7*+u34anFlaA9Zi+A`)xIwy#TXPQ zazc>3h`%+qDod|?5k7fN`;N0^!Bil-)&WTEJ6t5f{|oHk(}tBdnT(G#T9C9|k6w+$}?l zX1B`8NMzmt0g348Mp0<%JDGXXpc3V#Y?>3J)Qw^i%_2OfAMk8jtD&LPmX_n34JxJQOW5dtF60pl$f(dHgF?Y0D zozM-_cD0NN^Cqf;i6vPq7%jX4(K#78+_?!7`0GinkotrmI$*HF>f~ILh-wstMXPwDa3jn&8qZiZ2(ysqVovw@r;i3S_6|8ekqD&K zq;MU8*IJ|~qk4Dq(z;-CCaH)0yi*CflDfitOMwtAwC62hL5ydy7&_4yRIGO=()=1@ z=R&+{?XH9N3iM9&Rx2|g%T%6cb^EtwMf5JtEC}}H`{p}=5fA?WLOS(DU6dDR11rCU z)M}V#>+)Q0YldoozWD{ao-n>>CE>Q|2v6Oh=xyn2NDwf^)E?~%RGcWOMwmvp0rSmH zov`nT)oi|fJ$2;FsVwf8wza_BV~%5@;=|t;E*tPu2P_JGt^d1W8uycYx$MQGXkH%t zHZoS?;kW!;y1dQkKR_%%5)v|Z>S=>~q?r60$@WO$bacyf{uvKL0)GAvfFJM>zNvT@ znXFt?zZ?0r>@!|W%%NQK=Usb4iVr*KeOEI07p>td5g3<2WZN*=!U&-dm`GHI`zi}Qe*1PBjdl_V; zzd$WC1G^#=a)XWMRvDry_MVAGrR>l!TvKkzG5;;$KPBCvOEPx$3G2k>=h@h$oEugrQb18PWLXV$~B4tfH&(rvlo^VOQ8=qV0&cU#PK%oX!_`9`Hk zsCSb&|50qOV`JEp$mK?$>^! zj8PkxEJoFQ?lk;U8!)Sv!B%d?*YE^+XIUkyS%fB05&14F;^7kG=ji^P{>XKS+|PQl z#YfJmDv3LtVwuzN8p?uQ$=%jvdcts>MVxvq?~Cc;odmnpFOGgI5|m(=&?t~0l2{TS zjjhG5h*3+Q$|Y0JL3MAUqo{Kal=Mvz{(fxt4Y?&M)2!AaRIFFK^B+Jv(a5Eioo8*i z^nO{Qr|A6oU6IztgR1Emi4+@qb~(0pVIahEADlh|#2Bqpdwubc)GIa+mv$bf6-8su z0#TxT`S+oTVUr&#Y}R{+;DzH@JBJZ4nw?B7_RVLSk55DBT0Vo9TlNK068-VqtC}oa ziY)w~H*I64YTBJyvbP8Ca|c$mMN7*(u8%6RX7;Z&DwT80RwNRe0$ZysZbKq-j$Q{% zAKO^z@_t4xzljrflr#cDp9k!c=lh_IP)@o11CZ2_;h^?}X1r<=nC~l#u3}B3L5h7d z&qpP{pEKQnJnC5Z?M)+tzL(^DA^{KI2&=01@^h<3@T%LsrcqYJ>@3j=oiUXIyr)^b zA9!C=879P`tsyIkgLWX?7XdR_sPnQ)_PPa zPf6GNov%dp5nUHmnHGR5!NHe2_g;FShyFsttd!2UBR4M7@2&U+&ZNPpy@XIIOG)7> zh*tfY(9^*?{yS~G!#Lz?5s!%n+`KH5V|@vQQk%MvlS{WA&*%1wMG0 z3yhOqV`LXM@y^nc0q#kz=rp~0o3aUNpKSBC!8c-gE?>jL|681aD zckiOyVGY5I42LfPnw{?N;JPzLtrcT)NmUy7JUQJKR^m!l2R*?^z$ftCR-a)McKgZsLDFZa70!Xr1R+&0pn@#0n0w_tWZ^CTXx337+Ha zbxDBW+F!PRNRL-Z@Joa(vkJ9~bWQ-E9tt>|wCLs0s6%9FH`I*UF{~|-dW{EZ9qfP; zg#WGF7Ll6G0MDTl1Fm+>Uv*yfZWW&x^i7pT79NELBUBDxqkqQ2^hFZr$SJ{z3g1Td zz~cM2retkK-)Tt80b`pe*QUeV%(G0=4kZliK0c;9NF-bnf;tb_+>c2joeDa1B||^9 zA#OP@{>c0ua>IsZ&y0P5+V!97`j1&{!&ge43f~qPB(qp%BhJ~}E z$nmwS$GQ-~evMpr6>}ad>nzQQh<^Y%s9NdYy3=JwV@+{H`zP804s;<}8I8_FLFQL> znEqe+xh`K7Ko)wk~N2 z_?|C+w@MBr)WG0imU5OOSb~w#euF*6t_iiz)L>Kn`?EP}-=`SBWsHF<$*Z_Sd1xNd zAohtZ%S;(S3u3g8iS!$;xJkrX|I~K62A8Tgd6wv{ajEI_5QFjsm%- z+{XSzN${V40QqDE%RdKa{{Tm&M7}e>xX?!#}%#oaxPPh=K?F z7~V(g2ukgGKk{E($8}M={7H7aw2#$PaiJGj*#nT_ztSBi66$eE@cogVk2ziHQs>e_ zQD1Fc6j{8QrC+G3rVk#0=f6MH!RZOAQ?tC7i5KM?3ydVtYM&GuO`4d`lIkaVxEvPB zy)uY6XY0k% z(V7&&8!m5zt~KBK1dp&WJ1tc)UY$`pz$>)2OW=Hehl>Qpg6qCf(`FXT&UHRZtr?( znSW}6iOJkqXP1kV69KShf^H|nz)L=;ZH6F;&^`%{5q`l(AW2^JS&A7pb<)QJooN96 zuFr2_B3rfMtxCTQjdC;w3WPaoZH4QYz}_)j1XwdmkWca3qgZd>x-5bn@FQGivzsVZ zWlGbk@MuK1zT-==tAg&w{~B#n=#HGpYKXm+vv!0ux*9K@z)ug#_ZQ}Fn%AU)_vMTi zQJ;x>XK>_Yh9aE*d}HchBWlNdKjj+|pQO$tLfVoDE+`h?q_hO51v%&!d_LLhk_uCw zz$u)Ib=-iu2ug?pMjzQ?Pz?jVaN0UGvkRG8^cr589V{YEwtQX(@1&Rn+7yv_O#d$w z>{1+=5LeWJ8=u@6-&xNGqhTfLq>9?5X#`^Gk@xzU^2iuzUxxGp0*zOuy9+Ay+$+>R z^fLGI6S#(G#*)GIr78bRCp_ir%Jdn3yYC1^J>tZBV#Cj<(3vuKm4R9wOa+8D^% zXdlJsP3q_|FLHPMpWC<0K!JTmt7dtGhrM2uE1ikaA)5eMH#N=7wljAAJ2StQj_X^q zLcfcJx|T@lLiozP|Icgnuy9~ZT$NZ<5k^vHyYE~MFO@~QI_m>GizrwDihllr(mei^UuY2+#Dj#l?5sdhC^ zUv)X1_%rqj9PF(Itl6VwSO09Bq(+v&1~K6VE(;%r4@U9yg)xQll&+Lb&eo{^12{FW zE*B!daPfQC#=Cj6sztsqLtLk*Wi`K;@%OK-3_|AaZJ$v2=d;{0a-?zRuz4*jp>s03 z8yS$A_&U*Y`yJK?T)?{5tk-P<3T#Zgd6fe@ma8Sopjqx~^Oct+l|R)v*7T;^a%Sr^w`GbZH=P4i>$De~iGI~?_lRV9&{B(w zU!GfNXWMW^xmgZN;`E=#fTRguPiJd;GxKR&r!;H&u-mlud--7-O!|?#wU)h@sts+1 z#+J#BXMgyaJ3qbqrb)ZV?i}_hn9L>YW>8qrpz#Hx*$iIQ<3xnW`JV(JeBR~U#rRt3 zagCofUYE>th!+Odjxb*_>>{9_dR{x!wTBlGWH86qCMzan>Jlo3omuNperNp;P^7$A z=%Pa-)t|KLG*+U$a%VlUeS$d`p=dv)uC)W;wLy^zJ&98M4S%GiCATjfdEsQz!e7cdj@7VQ zgClIKNphw&@)I9vevm7%9ujbZDR+VvxBZev#ZSS5E=WNstHaq$c5>OHZj1XkSg2pZ z+g5&zK8P^O+rhW3AGN@$1dXb`w3ik^Vf=C$mR<9nq17rq9TqSf{@m)5-`TtrT*JaX z*SVdGp7u+BH?GQ4nz|r^9TwJW8dZ;W<0zUoMbuywI#fkES~#E3{x+|{d~7@KgGn^k ztaJ>EFhDhIW_?@SQ^IRzqM7oJeC(rR0KJj1==g9I1yVVD(FmW^&`bQzH{Hma_mY|G zh{5ZF@z_s8v}qkhPKMJNn5>U}xnx^$VertwKbO0bqBTYmBPRlp{rTm|K?Tz6y*RR7dJ9&MRgQdlIDo1s;vyM`FU zi?hO7CRK-Y;GJ2LeH#H1x)K>mm3N%oYcs~!%k z65;{we-S9W9RcUnm4l$WBe&X6_rGi%Ma|w`OP1p&Wo6C3t=t<6C)f=+- zKbL4cS1JYA1Sip`h+$f;D_s(Rwpq<^8msSbY&QQ3xyJFcC zPt3P%aV*qP0|DjeJ0)?Ya4i|HwW@(})SksJClx*pSbNIu;2yuXv*V6swGqme=fcJ$ zJB6rBFK5O>zXq2X7|$x3l%3pMEuB5m7A7;We{I373+!IJ6KJoEq?%n_Sso@rQ&_`U zqmO?LAzoj_4sTk0b5LGER-!P4&zfO`ALA#?0uY`Cf=JXSv9XajQ2qQuOIH_QQd;U7 z&t?vO0!`)MdsDP5T)jfUI0YK=DU)71v{f)s*-w!8a*3*BxgL<<&PNYAy2fyut}IZ!%UiOo!M;vk2#SY>vrr7c|L+x<(*Xb_67R58O1DLqTD<$Kx|z zl&ie&IaHkyeo<0fHE4(#>-Mpu#6{8%8Q9K>qn-lM=nyoPwFMD2eq-@>Cv3pnyGc24 zbZ3a-QP0F9+Am%F5}j$DTsT~{-c3MY?$57?{4k!IGvo+XVTJ$m$0FwBSL6QxqCs0p zPVJ*ehPvae;LX38<%g{=Yij~qMN0o%0>*!-(PALI^GgI&3DIy`rRw|LF>JbL`7L}t zv{;o+FcdEdN~K>rS756;Jp;q&6~W$Zf1S>IcUu0Wv9%cr*k7`DK`*r!31T^SS&f8) z-}RA5aE>aZdK=MRReo=)2>)ww-&=<$4{8Z7qm}0Azq1K{w+_3U8#!q89g(-*h~@K< zqr8Yn-=30_UgK~`!?KaX;ci-KLN|Vq9$06nf!(jB6Lb{B5V~`5^w&8=nwqwOcdqoV%vmFV1Y@X6uEPA;H*kLiqf zE>-X!ASgWOU_)-8QZ`Oka!5}&3Xk_Q00i7pAZSA-0Nw`w1F-fG|1Iuy5vs^b#l3mC zTg4pI;%<&-5mxcntfhrJP>n=-@UkYa%r3cDH+zbwx$~CB)?4&E18Gox5ZVwP&{Gf+ zzTfy@{I{f80Hh(WiF8+-_#Xfd9kKDErOv4RD<;!2$u4H~ zTDrrjaB*NGsKKaIWu>Zwa9K(wALp0vOnsSmpd2gF7MT&ak$w+D#(wu%ABmUlqij+l zvW5Pq`)6VGF?3#e=Nx4CRw@()01lge<=j=U5Uz@v9Oqs~pY7@JI4SE!EI)PazdF3) z?zq!)ft{L~zTzh^>)d~UJ~caj7&~%M{c;qsJDC`RL{VxA1psNTC7|FoW2UZmF~$xH zMvuW}P-Yz^GJ45DZ%LVs&&-vW%)1|eOH|-5mJ`p0jARpv~XGs#ekKM)aO6o`qD`q6=Z9Wz&}iqvfPTuV|fdEB?9pmfwf} z00Po9p}`C3Zn-OBeh*#8-I3Uu9Hr-oS9X~?zsxK}JSHAWGw|BWXlV@;m`$idt1QR- zhQ9mpH^j6ZgH_R_Rz{+HM{M5Zeq(EGMm%4;APW{6+Z%G<-_;&7HqMm*dl~KUAd%Tf zSBnB=HKA1gm0+L}oiKtx^wXs(8Ne=@^o3Ousq9a-jivlyRE5~A5GMuD~seEfCw zb*;F#ZG|fDa3IWy-}CkZ4e(=C70?EJcIX?-L(T@><@hU(g@?*gX5uW2_I=Fhi)`qcP_ZM@HwjQx0`xoQkK~8zIyHu>HsnJ#b?<} z$jsSAS?mI8gHOe3x$_f+I>Y8N@7)9b0iGGhH>qfl{7LZTKXNy?-|%aF=-vPoP|-k* zeq!oa&lk>LnBi4`y$P;p-j%HdI&jF*{)9P=8n**Mw*a-uBVz z4+Uk$m4v{fx7jnHPPpIVZ4s7Gp=#k^?^5rA6nho@&cK4XZeq{{XRQALZ`u4A|68}v z;cuNSJ;^1Zp+&-eq#vmn-{u0>P?&CB;;_3(6R)%xK75q*cZ*P+V0bdsyqan7!y=HEHSuYIoYr%I>ASP(AYrUowqVjZwqLqF*FGGJh~@3>M=^ zrduAPXzWTskqc`Kt5br$yBC`_&oN)J2G}a5m_)P2?(w;XPN~B6M8+tD%`Md@JeCeF zIZ#y+^*np0a(bj+UFIFVg6gHolm76%2p#LR`kS$0qFdGhyDd2o3=Z4JF&pyrDE15) zNARs3*JVzxukGTKPX?+F12_W-pR04JZxmGb?I-QEV0w=>$V0aVU5AX6qCaO6DgzR+ zg;IK70P`Fy~+Jukr8Q6>4+ zH|}_4X8K0%gC*9uZTaIH^q&ZkU_nb&Mz`Yo$-K%pD2@r?=Us!i651nz2qy z9n!jv>qM&#n)bg}@$~z4D#UDQ>@RVq@&S`Xf&~hCYPUy4=4Hn%o`H)NRvrHUHaUk| zkpT;KSQG9@rsk9I@JQ?ZV)1sl`W&SC$r4+(`ECQ+p5W|Mx4xQ^MtsA*0oddISNVFpZwic<>fOUKbE&U+mezxH~ zlFjD$_L89or5a)D2IC&+nDgf-;+{7O_d7$(8~LtG2+j`c7M88LxRlJcc&vxp+_InC zS>3G#$L-nsoMdZp?TNzPeTyd~;Ga!h-)HcigPoMY?vKy~wH{G>Mp7o$aYC$0jc@Ep zdk=Cil7%%t8WH-+D9g*_%cw+lC}sXsJSoh-v=Vix6fR9!56>#t)3E>8<)!)&BR=B! zhmuI*G>qL#8(kfNoFP5|N^19j-xk60uNP}$_V$}2_>G>6%{Ly+{R5m27bVE(%66q$ zD6%#bES%>2K_hi^@xp&oi8X98fn`CDyX$bULFP1fy2h3#-XKR$yvGYxgMO@XP^y0R z*?rWi-H2A|(v!qZe8r#8EW)Hd;zt+M6|R$EeERH+M%C3#E84khxuWxBTJAlJS0 zgO&9LQ0-bJ({P-2FN;hdhXIc%_ZQk~MLnB5DDHCxYhE{`Gi15brEW&2=HeoV=DW`r zC$1UHzOYif03H#4^yJPkeUj*SCvMH&+zsY)dP}b?{+!d&Gl#+vj}FVhIWi2=2GwKb z1lv^f;9jhQcRrE&zJ19)sZr$G#MfcU5Cci>%cWww_8|=CxlL}pL2$-TrGRZGS>{dq z-sg&u4?rel@&eV<(;9BSwZE}<40{;vS-)Yw*wJrpOEsG3-|%mMg_eS}vO&XwKXyHn zf7(X04eLmX+IrQ!7~`xhn434OzdU_P4cL$}j@6R(C-Wf78t`mfzw-yx!b7j*{ctKQ z4d6KsVmGm+H}@b5gp_T{6`4?|Vv~lU1~U=-M~W8H+;%s|C&+kUNgw}hbci7Wy%8}s=VW7 z*TTpgjb3~m1x!YeZD`n{=Jv+mvVXWa>NK>H-c1t<)fXZHt-UgmrXth~PRu);((TONh=$>?K!b}6eQeWZ6R*A(oVr?G z%ly6%k~3fX1DiF0%q5XJYRA49KW{tAo@5x0xbpAd%x@P1I-d#@`V2GVQ z$=MY0kaJ{Ca>vLIUF?+A35^4MdjY9YraCJ8yp!sCgvhi7o&h<8Fy8P{a+uLcC zgQDr$8t>3>VYk2T)t2dw_^WFbZo6hbQ<$yD*8DlT;iDz?s%pfk0sPhTE zSJ-nA=?tJE=G%dp>aTI8l6kaeK-g#)UL>ar)+Ztb{>LBK*mEXz5dWRi$sHA8j`a@Wul$+-O;-kNAl{dG%48O&IE;er(UY^|i{AhJ`GT&=k zX;LX6CB8!sJgLpq+~2=(^L@EOUtQ{uNV9Db^|9_`Z+xd9fgY_rfQ%ZW-6q7N*6DA8 z+eCWU8DX+$P08_W#JL*s6&`z;0ejf9;vmize>sLGJ$I*9?yU_%#%=Vh(mr!KPiaJ^ zq?jpY_7fDtQaF<`Z+)^lzNz!`qc=~U$&dSJ6)L@q`v)+hS50PRk=9pZqn-B5ZLzVV zSLL2_D{Fob6D^|=Z_)3nuWmhY?RxsGDKhpDUWZV_jA~rdxu5-VNyR>PoAl{Le?N+} zio%KejLFfI+a`fng9a za27tGQL>l@w>I>j%I?3HA@wf%&R^lnpC@x?G})1vnODTIaw^1}2?0exket2D;{E;X z4o1w_yp)N!l6C!a}Ku-l(^%yt6$QWBm!HO^48CEp{1z2>dySeJ}N8+b+$o0MLO}_ z`vN|Da6-b-M_lst~G9NO+UX4gxM&q^_lBu-k^iMBf7$4j^53_>)!gC z(MhUxFK~_`y%D7XG3|%}?ywgQ?R9y0IhAvNw7Ci~u#{y28$qi?1EW`?u~z2;zqb_o zcGx0bkQWGVIXU{$3G;=QA~iJh+$DScWd$fb{cTXKch|g%HS6D>mBkg86}QDXC41C5 z^4qn%bHAKzOlI)GK<2QMZH^{6PQH}|DC3)#@J1Mn$_%Eyg_zMQVC8uyA%=I!YLbps zB~%67-ov^O`~B6eQdTmfMkvTJX4O~`c=X-3q~vzqfP8#J^TKnI;@qG>=qMq2oLy4E z_mWLQEF(Sam+2-wxnUt7t$m=dRp zDL?x1nQ2(E?T7@Wn0>;1a}h9bNfgl6r#N$2nM5@p`ty!64KV+=j1x?rqe8Z}qi5hN z7r`X%H{H15RjzHFqM+={nQ?B&VaEfiQKiCSxplK_KiGbpgq`<%m{khv;r%p5wK(o} z)1Nu_HM!iCe}K3@S3S7}H(DZ&{k;%u)P9!x?jA`l#%m%lLz^FtCZ7vN$Oitp|+qjC2knqKa&>JFMAjq2#% zUNMvD%qi_|C2n^}6O$pv59lYM@qxs?&8oAba>j|q^!AA88d~x_9PY07-BM!}ZU@!I zO$YP!6OT;G70?-z$+D`5p^1#aM1R94GjaWUiKo5tp;h;m`Q^~RIajQzl zd*v;|n1=imX%YMIeZVF|O!^NKwn{g2QR*~n-tigMCW~g$ueN2Wqjlrej1oe;?FP7j ze7KNrn1J!y0REGlG^#>zU9RK%;vJ&wS8Weewk_B4+yFIw?X2cNFs!fF2|l`Yc1< zh5WnlglH9`-zAKiCtl&TFMR-C!Q^L%_(c-kCNNL8v$vh*^+b-SaLn;{dR=JT2Kb@)I(h+_3k~&i`=7|ZW zxZI4u_bxd`8Cb!bhjBQWO?)VmOC~ZUmMH+`V-g~o+4cC?d3$mgqFT#d1O5_40&e~| z5Stkn)|!n}1+i$Vf`&oQc|5Hz*ry6V$uxTK>}u(GFpB^XW&l8=2YtH%4L}-B;1Z?z}|H?F5%dVG+4K`{!&w-fpXBgR%*gP)Ln`b@shz`_m zVPvE>wV~7l8+2~g1Pj2P`8p~T$KRnzeTf3*6w}#^@SG3syn);Z{bDlr933zGbQH?< zWnFu?*ivOMRUW;SBL2EAh9ZGz84?dUgsETb+#BJwWrc<_POlyE=Tn6%*#o3e6pUzq zwXZ|t_OODq)HZy|lJLN^0P?o)|ep@AX(lS`LsNLs)9+P<$xyaE{RKBbbhw^7qu1?}}K zOz|5eex8iKz^)yB4Z(ff>*fh|E_~(O?U=jdq|>AqDfoqo7`HAzWHiG)gWdm@ykkz0 z=N|HHsmJ72%hsM=%JRyZ^f$Iu)$(Mpgmr(H%NLD(couYf;j&rc+>up_qHQP<8A4O(pqzxje0RUf6uO^nB6 znWn2Fl6(IEF6Hzm#fVc($ihb`9v0nd^ikaHx?s5yqs@sx#~`_8KvW zy>!b|%dF-z?&Lf|dG-cGcqUG98+$@^W;Lc{Lqeq8+#a2Zl_R|%m00??V;lUSzA@$r zSWIC|J@dKbZ*B2Is@9yfg^W+qR945nk2Sn*Y4qhAc~Uz#tX&mab2Te_QtWuFEPQEb zv}V-2rWgDa-sF@gsT!yI`N7!hh`)?vrIke0@k-+8BxsC(01Qq^iT&N8$IyBeH}++} z@P`g2d0xYPbW)lU#+q@{ns#k^P{_zEQ)st?oN(KZ{*5Ya1cs`ucI*z zs(r3Oll(N-8cYG-i!2|QAH$)69DDFEuV7pU6CFCOMpd9zm5}>>Nd6eI?wrUi@kY1C z{6KR%RP#usQ(I~L75l8k@j56&cG4TfP`x+kA%h53C+xI%OEk_?vgn{G=@dO=Z(;Yf z?~JMFa@8V%J%|N@v_nmnuYe3d29&`$UnZ#5nzoyqLuITCcN`bodo?BQiYgq$YN1;n7ZBfIxafgfM(w_n{8j|%}69!l-pq0!n=%mg2aVOTVw!0G{AfFBQ z58cy4CXXuRmY5K}yFU)}(TJUgEs2I9y$sB<@O^uHX?$ zJG~!ujBX&l*$dx@q+Rr?gg{bbY?+;$0MIGmkb5dmvE<{K^(*L>y#>hKL7!|D7{!uc zO6F5_#&LX-7I9X&vry9hk}vsWCfnMiP5tB~ky&BWkyemEebzz=b$g1vEblWDb!5#4 z5(`#o=Q+-@dUFCJ7w?&8@VS+bl$o~Ps&51akh?gh zosxK9wxY3==_$w%l3L5x9Y~OV=Mge3Lk}cojfrl^SoKCVn@X~z0`lLs*MBxx{adG+ z`ALXmGzTYoQW?adiN%X}O6<+NFDdiscueFB{xO->IfgnlvL9YW<|?BqB!yz)rln+z zX7x?dT~B4^JpGy@qks46r96jM>%5RX^drQmA^m2l+w^!`0gKgjMa1q|c0TVO{wc-OuQ)^yo3$eBPv zYX@Sxym;X}_qyxtd(PbnCT!I(2abl%Lt@7rH3FDZJXjW{_58?&X7cav%EhSenI>bu z^{Ekl*iwx+IhTmHCMW|~PEdV%)-|VwM=FrRRy*)T!wB}Quj9oTeYpfbPb$5baRwxF zdk(d}6v^Ma*wZ9cY>@x0*}0wHoTTGZh!i64DGc~{S=ulsu%CHqf@Un1UuQ%Lv}H|d zjM*Jj)}%=i!Qegt)UEv9z&kL{ob2)24F9AZAi~5GqV=5gA0W8*+84y}LlJA-&gb{g zI~O^cI14F{)3Qs}@IOCd*I19)gfupUy-6lY-dXpGOWzY^Znd<`f3ZDR+P3OD`RJMP zMIA%2e@_fdoa;LQzz$*(NXT5VMDSaPtxQBJGxYK$R^n+(pCY9}HfxP5OK_OBpL!o{ zEMZ9LGxBwJ^=*6qTpqo^+Y3BHJcpIhSEaZ+mhTsw)J|Ud(LY7BoujL07HI=nn>c=; zR8Z>Zj3qSII5K%F8KhcMz`0QrB>_1I2pPjKryl2HW8yPvM5t2lFIoc7`NvAW<3c8L37gBKA9314x<@k zHglq7rMXOpb9>K8#M8__xgRttWgar-nmfy5p;A`cYZb1m-rSQYDkPfFtq9EL$J->& zwB2=L339yejMe6-B-3{H+*j2aWNj+S$l|6P#m5(v8b7)9P0BaPM!0@?bWD?0#jF8k zf(&rqqAo69Tv;YvUDZ;~)m<6=#J*%$57U}tCbG3-NFYp6B1B>vQab|uDEDkx=iOcJ z1S|qi%Bvso{HjAkheLsuqx2I%HpMIwg9S{YypDbkQEimx|b{r-Ft#r$8 z2JV+Uay9$`WztvN6((}aF4{zQA`Y=;; znXk9IEVilRJ?h-2i_16a3c*5U#~Chpem7$1oXV}m$@U+4(B^lBTxH4$a0BLDfRW~wxyazokI^%Ky?LJcii%8t#& z%v|c41s`yUE|ra>#!?AsP1wGt4|QlQc>d-mGw4+UKM6Yeo1$i!AX~i1JRIPk`Yc|t zP(JR*Z5$W=S4&Ow&f8gDDXLtD4#_26gM%6+L~l1(cJqz%7Wu=aA~X11n++X zu|Q70@#M&fhFf*GAz30B$Wk^I&&itm%2_olMcU5Gm)*ZbZ!LV!(P-r~=A%(Y&7|GZ zwcVcEZ}?uv(Aw^k0av-SD>BZ7;Sg;l8Mf_IKf=txM$yx^dh(0db?qW+Yr7}8w-8+{ zUQNJN*&4Ged2q?Kf}nT(=nWILMhm7!mWQiDtC*pXPKt3!xcCKf}UML+BD#V}ZQf^Tpm-KZV&UUK zAlo{|z^YCO3ydfPWWnQA@I{})k*{2MhCOS>8pX_UXxcWLlP`uWt=PV!F0&+vJm$O( zuv*6+(F{=;TXVTZ`NIDIQPpBBZFPsdMTsPX?JsdGw$R;1_XI^EGPjX1lx~RQD~@x; zaeg526xyAncGl4t1)aQ>w)cx02}{c%lVqgiOkE>qZ8iwsg_E|U0Yc>Q?mSB*8;419^fXtDuK3rjX zb}{&;$9B3MrG}rN-Cx*CsoqU>b2K+>tR$A*V~JD*+7Y3MNh)Llp+Ov1C8Yd7w(yRr z4z;c639P+?NiChMw?Acu=KcKt0J7Xp&1ZHmZLH@{I^rUV9WXb6*Tprz9@==8?*2VV zAhUa>wp(f9*xzKHHkn#~v!|BG3Qr*cO2sH)fw}{quEJp*TglV+AeOhi-Ies;e?7L) z^6|KLC`wK%*(DXt+39^P^Ln2{>3LyP^L^ASG@QNTdVYiuB4KCF($)vYjBr0k*&OJMAF$N!11UsJAC%j#OUX9EIVuS zA5PUZtv6nK%N0w7jpGaCI;zVVRf$*3kQms2hAqydu{mHeYwVAQ-XoaVd6!7BwBe;; z4CdA}w2a4^!U5DFc`i&WhjhD?N(72YLO_T(E_X`Hxew8P z0M@Kq>@8uaw9-!ME)btDHxP*r?sh<93%QvlismO>fmh5J0e&0O^{WMI2@Bp#NSe#+ z*4xqE86)$};}?03*`t)&Tq^vqh*cFG8JRt&z&gQ>Q*Wc)Ta>qwQs!HKvISKN%H^EN z6vUFtAPSiCBz}wu@#|5SETq?ME$Q6&dO3t#xq0@IO}DmQaaE@CMh1`@IU-n@5 zwlzygd?l>hh9qv&WR^p|JB2^Jv~Bs?zjdPr4dxdFax2BCtt(pIeb1-B;*_l!eXd<^ zdugVRzp3{96wpWA9l7T{GJU;xr&J!OQAHF0QAHF1_;>#R1sM30`WJ_EjRG0=NNsLz zrd4vM%)MoZec$=#4Y(sX=0@#b%|DL3Quh~EHxf>l63Fep_k~rD1SumVDBRf_dgCLm zKUP2BsQ&;Fq`3H-d!j_xI%Tvr#}YQu#yHOL7$@Z3WC}Pt0UVQ&_)Ds5O!rqyB#uIs zY_JL&s)j<@9I~D|^dsNw_pt;sy9|$bklz>s>TP5 zb#_VC;aP%hl|0Sh>?o?+M&XWx4!p12hdZ2$0J#jacr-8;N6= zTxWrRag)?`s|?aetM+HXXJI3f?ed%z$=-oRbDq8aW1LqB6ykJdY5d6|1zJ3Xk8tD` zmu}Qd4^qVK!OckquNZKV&$=Q@x`VM%?=U?F~_laH2z1x5T9)qqip4tcU?cy>W?>d9~ z&Q*Fh%sZZV#(4u7uNczxIE}=Nj#eYH%8f=hmN*69aRFJ1j=eBz)7Ix~HiLNvNTis8 zcb_g017n}VcOWo19jR5IprgwkcPn4XwdL1$>Y4L+jC7r64N{D+y|!!cT3_`{>04FP z^qb2|nV#X{l=)W?z~N;m=*Yw?sgE(pQbdkLZR~)2rwv|%;w@@a&^$A&TiX4ZHCXjF zK7L*q4x4tCZRM*3C(CIiP37b<>}OUW>|X-8xchvXXO<)~O>#I6Qw#f-3eqVV$dCeG zf<96(O?q_No|OlM;L%{RxouL@R-WqmM}!nQYr}68A{kY;!LnE;TbpkzB-2Z8Adrpm z*UD#jC02*lV+QI*afF|Bb#F`F*LUCU{Ue1lcvMo$d9No;)TExRStk72*57m5#mHu3 zGjV)1U2x?Ci{tg6A!lvizVdPUxua`4$(%JE)I?QX|w5hR;8sf9jC6&Q~w9tyju zPm~GXqFYH5waha_ zpF7+vkR+=v5ZcHtS}&o+v^V zW|9a*QJC8sMkcqe$>IAO>nQHU%va@p%r|+F!7r3rV2Zc zC_*uN**@!Aetvxy%=@cK)T}Pyx4&si!rojrB0-6woxm#6L_ldWpt+MCUf<#wz{>G0 z-GmWbU&}HT%-`tIvLv#{94x4y^3e%EDqOBXBjr4b_~Jhl_^-qo#8c@Dc^uGPTiEIL zu}ICawHf}&Y@T=S)e=jPE#nd_ibD{%BQ@RVJ~dwvPyYZ2*NSxes~ODNgjX81rsY*# zIv0-XWw=t3JX6i(7KU(H;gNiDQW8 zwUS%vwb47ZZT|qzPgnRg;Y~A7*5`D!K2aA}1dQFz3e4$d()j?GW{=LdNAiSeD=Rbb zHy@~*L;F74lN@91R_4;?-QZL$BFO~t&Mp9FBHDQ#HEBWf1hYAC3X1uc_Ibb2?=+oX zP||K%Az1c3mBZb%FEz1uk%y9sGr8;SdxLKv)1BBfh2A3j zaARrYfmh58Gm#ABqKA`f(u2cu%4?c- zT3uS!+WUF>JyGV;_#ah!gXBlLCIB3amU0Q)cp=K144hyZzh&VKLgw9VZy`32DC+rR-)2qy}xNjzs59>1gN*3-!vJdqHM87mpX<(qZ@$R~gS?}N``K7;VxmY;X0 zZ!n|Vu_2c$=3+gk1O*%dNh-{8NzWLpwSRK|03$_#g>QzYk43A~YySXUeNWEc5cmCR3^LZcu2&CI<(P{GA`esiheB8~>_NisjnT6BC1aW<8BU~Q2(;2xTB~%r(S61axn-zZ$!fPK zC4yU7BwM(n*&M8!H%TvB~XTtElQ0*8<^I%_VsRgv#?VXw~+JS~M(HBD*Brw}PYs2^k+b_{Yp>t|gU2 zMF5gSZQvO8sa@N%xbA51fC8*?2~1@ASQi{lI+LgGD9)AkYRcE&Md$OoJ=_%IiOeZF zPnw@JB>QtKU$1Td0O8M@we5Z@ZE{<9SgNxXZSEr;N#3CXpdxGnIrCGY_OC$E^&L_z zIIIvvEiTp_+n|O9)msv>LfeVT1jY}Gc}uIye>KsHITrDwvhyVpOFW4) zszz6OG+AO8GXjz>RRAE9>V6--HrCehOKL^DTVW0uvduFepZ8J$xrx9bT#S1WP$XwChpYn|dT7+G@VM&))!W*`OFcLS5a74$!Y z?=76Aw5rP+tc>>fXk0oEmwadL;f@e)CuwZws{GOWTiiiw;V(K_B8tijs7^4+_Yu!s!l3#I#7BB13Zp)fnvR1pZNxz?(OSh5L4-oyERF2=x zHxV5pONfQcit7!4iYe59q%*WGPVS0Rl6PZIQq?s3?+sgO_OOjQ;ibQ~y_Q826L676 z{{X*;6bU4eNPwtCApjtgkzN3vE4ORE3EgcAHU9vFyfY-B6o66Wo)B61Sq!YIHiZrb zK{&u3r||Q}MEp1Sv20>nyNw%MdwVNeyBKfanY96NW(!)}#VxX%aTIeM!Z}(ns1PvS zUcB%!PK4A__n@WISxK$EBjvl)#=Ip7Dv@q2&M|hgUi7!+{{Xjid#&G7&wNFHajDvo zC9D^=N*U~=)1+4si6TWWv?rfyu2JN^xF?a*USH2@%N9}gdSW6w}kt7yNFt@|Uh>2I7%52)osF_<; zRE#IgN%Z;Vj$0gFLS?m^{Zw1e+pUQ^Tq7)rF*AY*ByE#!HtmIjdlc(b!OhZbS<1~d z_H?(;&1>rS@N<0DI62hAP3Y5h*>r2mPm|N+cx{d5qiJ*!3#pL_cU9hs%In0dBNSy* z8AKp+(n4{be!uWWwQD>QUhC4uDOeggV|b!g9&`g~`#^~^3I+1q$f8lZ5<47M&sw*H ztn}+>@3edCJLf?w&!Wui`hqt(nGVruasV4=Kw*)Uw?zpA3dOYX{;Q|lrjZ?myii-b zV3}aJw~FDsvI4tLlM~I2ix?Spl}l&KZ1vW{#~BF9lfNoWuSBou{{RQb`~!=zldPpK zZ5FyDw9?ksx8D6MeuU^+oxFDt#wCl+fGomAh~`*YGvur{3fp2;jI%z~k~i}TwlSLa z9}C`Eo0)D&+^sdj6xv6XDQ}t4_k@)sjX`*oNZ1EFX1)~CJY97-i7i$&i!DI=anW7%p_74ttvhov&d0jvID|YYCEQ za;1s_QNhWK5&?fHwl2-NKW+Fc#%-is>AIbihZ8!=+gu4Ec64DWA--Y=`|MPl5JAbW z$_*F9k++lff?iSyQYPNEsFv_4^75G_upMFHgADXF^ryoQ7_^0KH5=Ip+R~y;yL@pY zaIw2C>9V;wA1+5h*1lI0hH6dgqu22D-1}U&7^b7HmW$WA-)8OW_#e|3!f%LHe-Jz` zZ>XaIs9PdKsYDravlReI*QC2M+YQHXPpSq7IL`!*oyS`IdHtFGE?oFe#a3`$%zv^q z2-3#-9qS*+2rD++xFG|_DsmW=WEtEx{=M7EvZBu$E5|aVk;tu-l^H=<2RI7A?ou!a zJFo$-H2Z8Ne{BsN++we%hoK47K$jK58`M3 z3MZ*t>OUR)c*@Mi9dA*94p<1{V3C8+fJ(9Jj(}r|{H4{SWO-Ue3odd&e5#Om+n#rH zAau#kdi`wuzx25*J~{a1CW&3HbqVGH#|0*LVZVYIN!@@*8C>?wephRja!n&38H_iU z#jpb`g?U~#V*m|`K)}vGJpKOw4nN$(ufwABU*%)*?l#)8y|2vd-LI^E{{SP+Cla$Z z$fT4W6?bsV#9VB2sl)b0lUp%#`D86QW@!xZc)I3DC zspVS$lE-g~wVpK&p2RTVu*?@{S;1U;k+IW88Qf$T1Z)6&qdxtOVrVHO)~r>SJbqHE6NQk?BuV?w z+)cEv8DJvL@sh^9SksG2IxV|vf4k@A+42?P2vT)tCm6WjUHV^rZRh2&^#+@Emn$T& zOCnn7utXY9G$55$Pdt(G9gO7y?j@B&6~V_oy`yR;SBA#!$=#y2@Wd9oojzBR`u0SY zLOkACrHzbyf&-qQ3~>Jd3w$pYv7zeIPR%1hrpjP|Hu&bax3svCRrdb?6K;U`Y69m+oAh2^J`x2~7A z?*3=ySj^iF>EqoRt<<56jvhLEN>Nk1dbGCY^GkEB(X@+^;;k1?GWnKv8b6t+%I?E- z_c3f#R18LAFsc){kn0{XUXy3yJDmpWRJ4)^Ca~5M$-DU$M-o^p@>&NZ7LYu*8)l3U z3;9j#Bhx3dj`IHT6i)M^K`sgufIyEKSwJO$+~LZQ2;2{?a(8#}T(r)L5SM7w5J+@G zg2f6R`2qWZj2sH`@w6$rbtzgdGij*Vb0(U4D_`WcX4wZ4VlY|07a1G1MMg7?^pskP zlDFD>ecq*?3@kPf>Kcq!iad@XB}>i(0UcunP@8!YAmyA#AmER@JjC@mwf!RdLYnJz z)9SFu(7_np8{Q=DW&2!rB6llwZN509^OcRnH)|th(FpS!O%ho&ePdM8C6@~o;wE&eGMZ~s*2ZEZ7Z)U zY3Y8uKJUc7BDmDr(#?|I${QO`vZQw9#`}Vy*xW3E+t0y`nbZj6X_=R9aM=1#NnuG* z0dX5JN6C3wJ;p^)QCEPk&|?kln&hta1AlcPMG)J&mq`)$MQyJOf&n`MvgJVB4-yuU zMmDVV28P}%^ALF%VU^(p}?21o@97h(5@R{Xq=Wa&DZa`HP_t81sG%eSt_pz)Pu z2&%ehmDQ7LM6B)GuDhKjma}UPk*Hn910=Fq+UoY%3b(fZ0B?%&-zyemg61F$33dZ* z5|X%J4S83_jcZoW{AFoxqg=L)q}h0j!d8~^nS`I&nr5|ppJ*0D$K^{6%cQXG#vFukTJH5WK4a&uDED@ONvZmg|+SK_|(@F$LD@LkN4>H3Td zs9fGncX4NAS|fKJqN{fSC9hX1eh7;@)j=|-s(EEx_#Tgkm6R9gVn%~{Gx=rUF~~{? zZDP3z7ULR68_bOECHt4)#pF6ag_2p!Z*{9dG)P2_@Tx%}wRd=Vc%~>rqM2kt9EWQh zV0^|q3mRB{ck$V3lC!EOX`%L}mEwUk zP(^KbxHG(s({SFr?HE;GEIQzWp4|p3(%|uJ+$6u4hDW+Kshouoz^G$)-gCXAl0aK; zL6R^l)`Bm1vqt*+MIxAH!z(>!v}T!NCu ztqks8%VcBbCd|Z}fDVpw8P&d1g#!ed`j5k35e}QB*_kI+`%6r20=okmtkA@}laalY z7WUnqn6JzYCjRKok;ih9x=2)goIFw@GdscpsVGD)(gJt@H>Pv$@#`K`T79rajZ)bs zn{tK9l7@~%@@67LKmd$+jq;qya<|dDe!AIe{{SB6+*+54bi3_Aixp;h<&d&i3Pj z>(;qzwQ22pexLB?R57a&Nvmkpm!6CI@2m7UZx?u7d^>jcHf!c-Q!p?BZ3Bu$~i0tc2t zf;f?C$B#JPAks*TLczxIEog%fPw9`($huLIQ>A z*E43`NS%{(xRduuBkdwIQt`7F3e4dAroBSr#IjE}+HBymlGNL(HOz#UjwyFZB*sNe z;TLvHjBx`002j{L{Q3A>;u|}iZ^xGCZW`3y#MbL8`Imv7>R=J&3mA$wkY+|1!^q)) zUz)y~vDFqPcN z$$4n3xBNP3-v0oP@x~??Y;>GuH#DC$BBaId%Yp5njZtdYy9Es(qp4MxC z(nLX$DR5*$gXtX_?#slwZ0o7Sw-d?>dDd`=CurcxTqH6KK@x05yHrJy#H*7yS5n-O zbHP{97`|{caO(O|>a=E$!sjqS19YeE{5Pvq<+>aok!TEv;@M zgfxotu2v~wka>$NEUb(R%Bo{0%yLN{&*5Ei8B9fOrbV|hZT;ee0o8nx3gED2-JG@* z@BrIfRg@N{18;X4GEHkU!zqYNW@!kKWR6B?(3cTz5wgsgc9r%M<`x@Y?!><`k~2>kT}~-Dd(vL>QS|g(x77IfU~0;YO(#5Rj0kAY%h))ukGYk3n1RXzE&d$=V(x+gKY=_$T-03U%7v? zm&927ci@|AW}7;WijiANgyovm@Gaee#?qc#uFzI8+BH zf&99BK+syzuLS#JjxEfRG20|+yP3DB!2&>6Ju(zB^*Q@48LRwSQf@q!vRdix+izE* zyIuCTMyF0}-ccO98+U;v+-1z&%H*EKU*#Rty^4vRZZ!%DScBQk71CpJ| zIBX8Nnsv+~YkRAgWid#~Bl8Q1knSy!fS-b&=l$et-+yQ% z?p*B*s(9dxIlmuRAnGYamNRzJahU!6*wqKO8P4| zrM9)V`_umbgZPGf?5a^zl1V2R+ShI9ntf7RUEc4dk1qIyro*V}a$82t=e(X$Wk%+W z${8dhBrua|sT?1XeOkGT9SUnVOLl;W=8Ypslzgt=IWmHFg*n@`aC#i|0=+itPJ$cq z($2<4VFWRTEM}YL%!|n=gL*0Fj)e8kQ{kIfuWwgNHmVlWdY0Sf6DeqwA|L~XSlwBj zvOzsS7_WOQt0`h587R%Sv(-JV{cGC#Yw+AjN-)c3?9xt^3r_CRPDyKTTX}h&ncygY z;U3a0H8j48*ukh>*-p2YiwqM%b88$xPZrfFm0#V;3z;2EYGQJ`>^;g0Uk7PgLlv{J z)t27viDfThs|z78!d6e6ce`(9!V*SUVzaz!;g@|2Ns`H#6y051O>Qz0YnEGOgcm9Z zNRY=ll+&aD5`L2(h*c)3 zr5L(OH{B)hq`fY`Hh(|U%cVk}*4*7mVyo0{n$K5IRD_p#a7YHwiKg9`4JQXOA%S^sI;DIM#aaT(GQyrfpL^M$>WicpHt3j zA`L+d9(w@(X<0xLI^mcgSAG?9u}_%a!ZLA;)EZ^Ln#H9>UGmEFaG(NZlX8r)CnODs z;DseiU{}u7O08zxTjkxSr%e~%`SobtlwBHes@0_Al$-9FZCiamKIfo#Z&%cGo7cFt zZRqfbCbkapCCm~zX(72mw96Bw7{vT5r~s96Mo*0F>?|#!^1RuOuAga!=!R!cGT_H` z0N&+gF-x`*LL+$}KHi{O({e$5fk&3*fX?L#n@4_dbK9>z!qvu@nzD%8nHk(VNDdk) zB#US6!BTds49XV=Vut&`lk?d8EG1Xl)4VFfn)+EuK3=|7{{Vrp`zHYL1|tszgv3qN z!^%md_NKMzt?ruB%g#|c*!Gq{{Uw-EsgcW zeo4wqoJSH*g@nk*{aJ0wFvUqdnB(cx3k#Ee8|D%ia?RA)J$e@_YWinM2S9m80DC6P~WWH6Y%w( zpP@k=jPcziy{MU5A`5LvT_IWETuEvBsM~r=^RYrmB;bB&X`c?E(>znFc!EorWU!L% zOWR91Vv=cWe9NJDo_tRBh|bKyAs*;AeUdo}yG9LtgQ9rGcswsN2a*YM1(LjyySoVC zm(MdoqC*Ve%x7DCf)vXloGx4B^N2eB&NQ5(6x3>2SzXyLy{EP8uYW(Qp*m2+R&unY z>8VA%ouak7d#mf@y-%c@#8$dIa9vC;FD1Fk!*3BGQ43ou-MA#HLljTE%YZhk5Dp2i zOOoQ|(#m_Adw4~JzE0yCf$f6?^OLCi*WBM3ykx z=}I)scSY5#B)GJZZY42I6qb67K1I{oi7h3SM60?LD;LP(X*yM71!u{7>vwm{uWp`Q zUdFggW2r7_w4CM38(!D)dt14y;2AIVZA#)zIc?~ea%%&%01lO7T zH+y|AS=D64<;I^J7kaIw%B-;I{{U~ZCOaQ6+uR7t%R57GWRY25I|?eW2DD}Io`tEk z{;8+w(!m|=nnx>3a+0!ME5F*M{p4W05xSrBWeQ)-Sz~ornQIwE&R**26z{$4zppDE zwveaqPnJ$iNnYyOE!LLuI;%&0L8gev@W(5N*hoo=-Se_ST(MSshQR_gATj6z9{R?? zw9P)|&`ZAK%t&3!6%14n@?#{8#0dBsfh6E`@kST9!*VUCa-N{-QC*D%=K`!UoDihzv8X8 zZjaAn-5}OpRAv$`=u$9LIavUcz`3ov?=bcVn1ZId5aVFnPZFh!rY>}MqKd(GB9G>-waR?2RW&IZ#*-zNMn@9 z#g<5kC6{)2Q-d0U!>A+3kMFxQ#A6#$+X8aQrSC36&!uNj*pelfbWcCcoAp zJ))$Y-iq3Om;7z1^*Jp!PZ5Wnmb%vWT_5~E`Jk=Z1Z%TnOY_R&1v50?YF9bHF&qUK;-ZOE-F~ z(9UCpEu;+FPS#@Yv=1n@LgSt1jEoRSucI{WE+^CAhUURbMH-kcZFZ}&&9f26ckE)` zSZ4s^c3WU3zh|Q;M+-(*=9J^5_Eu5rXR`A3^8L3DC_@cGZ{CxO=ADPHtqXd8k3Be86{0sYjg}d-&yrwx8($iT;t{p=b5u|4i z7zpLDkmF}8K?Q~ee^xv-;luWe$AJ8c2}KuZxCk&~`O({wOYlb4z#|?104BfSq%vM; zx&@Y!>2!kgRzMyp8ExAU7hJMOA}LbCbCy%FoOyB(0`z5kpW2RBdPAoF00!N!vmO$0 zmTeZD`IK#^=iBH0WYJuzXdeqrm_ZDl5Li_$<5*GPv%9givvwr024A!^`F7nNWkm!# zZLQ(m6!^=-UmA3%8qzzI@r{fY!v5i{EhW4b`i!wTMJdZ*P~Kq?YS?Oc)zti*QcqcMq(gRumyhyO%AM7M!&I z0GF-5O*&sw#>}d6DzZ{=X~s8y4z+IX@1sgD^yq#=cq;CDO=vqsp(pbc9&MO zK=G88E4!fWmRzj9ZsnQ+Mnj?8K_z_~PVokzboZ9m_c23o{$XhxMAA4YyP|uUN|?lJ z9&O$gc{iQpD>l*eX0`B-Oz=(r0K{u6i;*tBtLmDwYSTk>u5s%0Bg%le-r8N1l>Bt_ER66 zz)uu62%=f7;vYTrJeC6mo&M$mN8MSIfC_ z!bB1(1I>9^gre&ya$3z^%Y9Yt*QWOTk@&SdMWtCOb938SJ$F}s<=uWhnPsEHcV~BM zu+M90EM|9(X(MKU+9K_iK>{R+GfZY?m0A@m6GpyjnOS-p4F>DUx4AZ3P_42vq=96O z0%A9bQ9PDFh{+^IRapec?!=Q`q2YZF!&y3Jppn|&U2Tqe=JJ)JigFRNFg%JBz@vfO}f(cjY>#YP}9tKw`|L{))*9q4LlJ#v?%zqAFCXUwOh4tOM=j}$+vcW2C1IrP4z>ry*MsbfbV-~CF z;hC&m9$&LOkw#MAGQ?+)Y#SZjq(5k2!DBF(qj=Fxb%>w9VHc3uP5?H5qA`$TNb3}8%x zM>8>qGDuQQ#2+ZB&cuDM6Gk$wtbWJ%TjG^%d3@lpA2lXc-{pr-m5`wXD=dNCgMgv8 zD<~k7U!T@0ws%q_artV~#Vivmx@{K!04zT?>_n)?c)*6Z-i`ZksLJ4$TJmc}w<~x2n&0|ox0hArsME4dMJwNQ*Yvgd zAJLz}zZ9>Fybq#kCB&By+oh%93?#+XqAYDBgRb(TDGy)ufR454D9588$NGIM;!oKR z#fIxl)ifC<4&GEcgi2Tv9xb-lIKqHhLFGG)V=*2`1fR84^TFW$mB@Xz8g6t`e-g4u zTGm!ye(v5(w?#r6fsQIrLFqxU`NQKqBGX#ZbsZ-9FEYiQMCN2$dWJEfmYVU)U)X(go7 z$k@t3S>d{n?q9Qw-lkEB`nEcpq~EigqZuud*(UqhtMu*b^L$N~ymnnx(u#Gd#mXy| z?p@b^nf%A=`g+H1Ebh>?vjd4`i9w1MaUlUt?SM!W@YrIzxCaBpH6IE|Z*MjAtiZ(^ zDeJR`}~m^0$Kt68X=(NW`Gp1Z@(x@NJKA^>7P!ubMnl zdnJvru!3d{CPqmaMaZVY6}bGl~(3xr+35^xDJ zN)?BEDLCm`{sOd|+PsZhe$5rIm?_GGO&xo6C`|2qx?Q4DSroSWd zmrL1T@bs3lQk_e+X4A7;eaY)@z~VKp4{4^(V5rbdI)NF1LoOecTrM_)_gf#skU`B+ zweaIbV+z||FbJb*Dn4aS827%ZJ5MwMz1OdZ@WN#v2vE4I>OxBD%DkN1q1j9FPW$sYLQ0i+0+ zh^Qaxow+=N!4*!y5up*xnYbv@46n+n>`)dbj#)~K^MyG)aogy2@jOvSO+#a#vJlGbRSXU)vDa(&$3!+tJz)rto*KhoAQyv&Y9u>9{axl90CANgdk=sMNe2Q2dK0;gEt4BF5ZB+u|H`^ z93g=8pAt0-JxwjGEvL7))wH?dj(F}Yoh@aO;&@&wu-jol#)gv8QB&Wln=bsEJw>NWN#kSJ+e=5ZzxwtUR5+O^6fe)J< z!pnCww(&+5GW2+kNv!pY4Gv)mx6yPRF4k}@<7kdzwp)8PcwRlRN{mkR$VS~MK+eLx zQnnq--qCZ-@}|;W>sssIwYyt$)vo=VWjRHw#X;)ZOTT@8OCL@ABJtFBq3m__f>>^) zme$H^ln^D^kr`ySn%tR6#)~-EcNKgpIFHIryANY^4~j1I%e_YK;dE_E(mNeC>E2M9 zEN}LqC83rVFBPORB4r&mC`A&5K(+HXg!L!9`#jP=+6&$xmeK~ejbVx*hz-5cnG)@O z%M?F?yL>Nc>XlE|jo*hlvJ zWxKp3$R$&2NdEvMnPFu|5h=snQ|Q-3m94V7dgzWUCMph8>0g@F7bV{O&1ttywAZDy zK8f&r+Fiee{8=sjk*nR!4diy~sy);&*y)zBJ;lN#f^?EgzqL!XmI&6~Hd}9=U8}V5 z)^f-8TbY*CEgt*LxodPr5J&clvJq7`mx$U4UO1;n(i@bNnADC<)Sk-I&$Wix&HQmR zI-E}}!AtqpMx7*R)RhvdJi(^H3QiQW92vX^rb8sMSj}r7O!;0+D69pEDI}s*o>&sk zbPeW00e0BfP{Bd3DK?)s#P54;(Iu_kw%1eaqfS+)3T`q`x^mU&vsYI1>b^%uq`WpZ z@LWzNNUd9C#A%m?D9bDXB`64)_&!8sMpr$n)$KLZzPf~I>attMa|OIbK}h7xfDQ7r zL6}F=<>c-sIjGxvd`FB)Nh)epfP0`{{_|kbCrIzmf7vbp|?yY&K>T;#zn>@BKPaH`qqP#?+{L<}_xWe?taC6$3r;!7Qwvent zZ6NP$oDHYfZad^D9Sw6=_fcHx_iqfW*d|nE3Wg{c?NkT}lX}Fd<`%{dF`m|KFJ=zj zQ49eJS+HbC(;qPBIX&@_gX_h3^%j;|TX)|}omd)n=7Z@eNjG)OwESM%{{WfoT0W%q zLT&dm+d*=rq_;rr9muzdj4?<_k@%G-esoN-%iV;_}wHm`Rzt;D5dflOzXkVz&b zN0-csIU_1oR1X%^IOha;o}YO#$!~J1WN6Ap@qxgMxH15TD$eQw&j1YPkTb2Wc#h{% zx@(WM+&UBy#@8{bu#N%b8+=9tBgu{9MG@qWFOm0a&ux46y0n$P`~Lu!;n4d0B}yL2 zN^xzjRF`+Bmvwiicd@hQ!5hl~aLlRzA@`%JfY2@vK^%D z+5uteN%XJCAKTx=9e>2 zQj2z0_gb?2`t={J_)={$_T3@40^dmR#(}5CWBC#|E%dpXSy;>R#-Ai*rC`A}?rqz- z`ZM-nir3(u!ufS5Y#EKlpQ~!tR}nfwmhkDYU(LQq<&8*aqQs))Iu$#5;XuLhZ;SM; z9>YxW1;(DgXlIt*5YZ%@TEl5zk8f?+n-vR*6UUHN8=q0O}1t5 zUx{umB1Zc$&C<%p6uLfo8s^=B%WSVppOr%lp~t*oVKu2RV4 z%`Thc9Wzw$M~yU{8&94qZ}>;T^;V6Ww?}`LzGw39 zh_zuyABakKRHGOxyI#sK&fD~F@;;mJz4eS`yruJP-UVqM>9FPG3lV%SU1BOv&-Wn* zb_qEjO!yM+=`3B zA=hTvV_8bGEQ%sfK){D;{`46`*V$hPHRvy9xRw@ZE+D#85lHbEuLD7e?eQZ)&c{;s9F$&{{L;T=zU?25VX@J5C3*KsJ>Jc8Sy?x>ombEAZvozz zZEa$>w2RJo6~)t|B%i!V**?z9K@%B2cJS{)(MpROE8y4C-V~13?@qG~=G@AXlvv1! ziDl23E!s0i!g%410~$tgB*tvBq>wnT81M`_exqq+cW-ZJbA4kKo#R?G>2iU@1@2?= zQcG{OMpUB1<)p5t7;Pkg-*>G1x?S5jBnk#G53YU^dJeHVG z=3*td@&sfskk`Xzbrdf3Pns*X_Fv_G+aFh!MNXul6x-zH-SxJ&+Wu#lYMvgpxD7ly zZPlWA*GrjIZdl8)mMBHdyRKMZiGTn{_s$Gt*PG3wGEX59G%{jMfEJP&_OlEp-C%G6 z{Gjkb_phh*D{uHjudZzF?d6#7y17I#+a2%-pb^}~0A-nFcL0@(0b*A&O}OCsCx|7} zuGZe})#8Xow=EEalxY=&Z5R+R5|&93zHQ8=4Wu5m;X032*Tv`B*64ba;^|9Av$U71 z(_bxD&$iwjc3rNLDXoRf0!ZQ@VWSLNWFeUH3p)@)DdBnN8TY@2xA)C+_Iog4SOfXi z?=*lIR68q1SPwV^K4ZnVfS`gm8u6`K+DIXi_B3{hKY1h#wHPF4f0(%pe79*c^8zwC z83Mfv;dh7((+Oo)jgj&^reX303Iv{1kqK4Hk`sje**p?!3A?8Izts9HEYh`>_IKM| zJ0^b0{>j?hx@U{@sH9-2c*fNH*jGt}v80N65dL^LOut{1!Yf0_1KWUmQEPW@M{m*wl%)Yw+%lgHEi1x&4vr=?Oy&j*rE z2l^lKeJXWhkPqkndeS{3HyEDI6XNP=Ni_Vxf}&9bCLlWIpaL! zfJq?pfr@(Woto8p-3@lN)7?JZe*^i8{kcD8EANN;#pj4THx$Fen&V9N(xUH8HgU8a zI^o7qUH~PM+D1_GLNck8U_T!VsI=o*fLuGuBtov1+Y%8skPGBxPn5ik^)%mRBXqTKhD4HGy5;< zUkvs6+`{)dO~cOi8j?U(DI*|Eiy;RQP8Gt>9_A?710$!~@Ya3FI#_I6^oz7q-s!&0 zbh5W&@*X(hX?rY2I|D}k(Kh83s!Nvo^tx>)uG^oII-G0frJQOVOs@_Ck@o^DEB^oj zX&XJVJvwe^wr5X`7CnuDA;$a-;Df-yDB2PEN7 z8Nod^r{vtt<+8}F6mTH`wstNH9{Fr%j{N5WxQ`E`J=M+OVy0&(m>)2XGSU3JV7L#t zW8sScNh&su^5~>C)5^*=MuoNkjD;Kr=jP5i3xY{FBeu0-o`#b#W4+U8bMAWadU3_GDnkT^A=F;3Myi);>F@9b6 zJGz0i4m+27O4^S{q;Pttg6*>X~+I6jFzbkQw*{{YK#+`Kmh-P{oD ziKMucLWno2LoUL_xFkl|0I=M{AY-_%Fu#{N#q&%N)EQ#q?yy{fLgOGXz!)1y8;&zw z{gcmQqDGcYyt1hCGIJ8ZLpWFJrbce3ISK}A#x1XY-Kc5;Si;O+NXBq6g!(sX}Z3R;!8EPwA3z!xRC2>3cL~vSz$LCOxE&7 zRSfoiN*58TfS+m-#VnCDb>jXF*KE$IWu)I+dH15?Ic>qrz)B@&6T~Dj5e%<8CiZvo z*_17DI$;dghZYF9H|lWH32qDz@KNo_m~BUgz;MoUQ2bxl?D5^B&D7Z;Z7H^|Z{vYl>%P^d2)8>;-Gmet7<+J72?$tAq);Yg*NXLsxAEMS>jvmo>;qy+9iH}!rB(C{{RV{ znx>>yb1X8OsU%_MTa}6;ttyGt7E4J3Nftx@BO(oo@w1WyasXH4%UwRw)5V&(Ym0QXYt@=2CwzAs9@a?Xc{WC# zb)z8>g;kd?ENdWFDn4Tqh^;rZb8T)Ug+Q0fB~Eg2yVSL9BEws? zuz*ai*6wDS@s@Jvj5kR)meP|Y+iZzQE&`$tH+~kpPg>IKEN*dRHroZ27H8Pa`@y}# z1d)ht7nAo$!DI7Riy0+1ef0aTte>u%?bQ7$P@WxoNHpV85q7d~;Y&x;YiVMQtkJE_ z(=3c4b%rQpnqS^5Q7PHwg#bp#@uMTC4y63b_`vESb%x#<1<#x#ndDaCQOe4jkbJ}z zEIkqqS`t~{KVjQYISibgauATn-ewICo zPq9ECp2}$=H&#$ek%U<#1R-!Hk+!kiWRV+^RK!65auU^`Tb+VcNl>T`kG&KCG8pFs zw^A2(InO4z{V-qL-$h|9y!O(Ft3_3F2Nb%+{QHdFpL=sVSpOY!tvcq zCHW_X)XuR-v@4WCz^>!vvY(Zdh7GrH0Jk1JN+~(r?a^+olGm^G*5`dHwHzYa<-3x; z-wmHjU;Z8Hdsda^v@pnt{9C$bcmycN$^riX>mQ|b8iY-#Zn}yFD-=OpV?=o`d-dHSyKF83>~+{O zzc%Rq0EGu!gV%sg$k`=R%%K*DDJ7V8v7Z<-2euQsh~y;mYkM6qFx0xgWw#19_js30xcj zp8R~)_MREkm+j3MySrlc%NPjKh=Exb%NS-MP9tDO+~j=NHNAOcbr|BEghS3PwN>!Y z=YR-axIE_{ho|hyy*x~C&zF`8EhoOIC3U8~-_F-RX{U&WE|wdbKH`Tezg-ev*G+or zddGk@J1v@xj;TM`g-(&F1qmL`%=iDqO5KfU|0x13OP0J6`Ma>_?+_b)WX|A0 zU`M5Z!_%ocl2TmmaaZZf87rse<9@%5$ivW^#dFe{j5_V`#?IbN+kV>aeL>^>QW&(q zhZeVzeWn|s9PfbAd8;kzT}!?dU{K8sq)g^k3$Q*LBNdhLTlSH;(Ek8tzm2-qfu_ip z-Y?PH!gkXM@%@Viqi=RK7LFE;1@K!)RwYgL<n;L z;MHig)m-`P&Q$7AuAAnKOhbaRc9P~(TJP|<-%ZoLr{$Nze-sw*4U`v5)`wd0Mx@tz zfqY4F`f{uzWx)+2%%!juw(la|AVPv`+_X(+PPe~XOWUUM1=BserYP3xSa(DP-<2eu zTFn?DJco(PT((%M*UV7(U&R^^fIKU09*L~O8c(TRPLtX?wT0E)+=Yz3Uf~-ALg326 za1a%Us+V7*{t{^h;v;t*jn|zBcx001WiK=No@CL9t`}v)TMeXx6nl||WMV#Fs^zB+ zX*wv-rS6BPui5ml zvquCUX+@4n8R4Dbh%Ka&4T{?eHXT75cJrFv_)p^-iS@zfO#;JZo4e(el_5x=kIk0Q zM(O*xZiGo{iL|po-!M|eM+@RB-5XSv_V&$TNg|NN5QYH~%(KYQ#tcg%L`*Qmiw~3l zourUEA?C3oCM`xet?o8mO7`My%jLY12Mm10LP48_Q6W|&1yTseJT;=ZB^I=4-{%{@ z_-`Zes#vK`9?~#ymG7@jowe(yRp-*j?N7n49JR?v+Es~7y{vZY3!){wj3b&xw^*BK z5$(2&IAsht50cAYquvS^aM{}G349V3+`ds~5}+zY#8FIKNd$QjuwBdwwssKQ{u6u~ z@i&*RPZ!$ah{+^zTgRB#+(MwNijbJqkfy}k(UPk2m-6SG2zc^Cu3j!mR)wfdkUspEzd|~{!N{9^7?pS14q#I!}<8WqW z8&hUB1|)4};w@WP3esIqBTZ=&?8sppmjK6|_VUQARren~5q!YQBBtD()$%ud(puSB zFD*aekEZ8ISv}h3Z+Equ>%Hx!uf4VMZCg|=r|R)tDY@Nl*_uX^%z#F$+?~#4##j>} zETbPV=xY2l)Rshn?IdWPS!G$kBu6m$L~5$83aA)jN{&hET>k)z^_U~D)*xur_Qvu- zZ~=?tkx7uM5c&H?a8=l{G*8YLV=LiY{#)7s=3(3}*)q7x$NQxxcgmsUIXF1mo`*V4 zF|z4*uKOPL583j@$?eyz?YEcwHs|Sg!+VJmdsz#N?oM(@8=MRrlCIB^uAgJeh*_(DhB zbt=S5$_>ku>TCBW;AQZ;_-odz4ZRj8A?z&r#B@BWDAs#|NC_p1%J8iN_y?LN-rR!N4cqu_MzN&t5T} zwRIbhQS{_=9RC3IzY0gNc#Y+^4sd#L_26_o9z8+!u0K$-B)`d$e}}%@4tW0n4^ho} zMDcUC2LNX|N<1C@5OnZx1gkpCe#?gZG)nmVC}*7qu#$XWYt91EU#;Ae_c}kkur@rr%tUk zQk0WZi`&ahov!rzx}VGU?J@f+YMuy|Ys(mB)HHm|_IDA);KhZ1-AsIiEyUiN;vdyM47Px_UVdXOJONiSC z_imnPRlsIpUulqWT}&lNQOCJTj**PHn|&_jrq|J3wXyi;8~A%1W*)XDD~w|{rzulv z?)HtjJGaqCU77forfK&UbH=C(#T%l1-dAIhB!?sYVzTbf;mESWRT)f$k^rf<9cmjj#nAa>XfsLJ|;1An&g$P)UK7%(OK!b+pkT} zNSRd;Fxc+9kg{P#3pZ_F$!}$^-}AZg zbg-5Fu{bp@UTfc7QgQOrPo1xz>nW9Bby8A5cT5}( z5+s^chUtVbnUWc1C>>)A!v(=*EC&MvkZ?~*@eNkWZ6n1u;4&L?aOF`lqz&!mIx`Fr zFblf_Zv-E2WbngBaivQM!s2bG_k)A55X25QWeDSpXRZc({{Z40l#pCDpo{XSl^e=1 z0KgkT10=EQkaOF$e59vR7_L;Vrq+!v>svqg9$TNYWizI*Rq3^NC~I#>>#OR#x9rYO zRlMB{o^ddi#@sP>c0=*oyV0D%VjLK?{@aHx&~9=9yZZz zt^6^rc#7`b8t%p^Ev;ummX2LXV)H}ExNUT|SYg^m-<0xAc$dQe03B*x8od`*S(??1 zcGosnE#}$X+X6Oypen8!HeAChe)1=Bc@^bU%hoPF+L}tOE$*zPwePj}?S9ABXIRP$ zEW^%x(UhU=Y_?5Vb6dN%{{THt(XS4-#4Q)XiFCH|-p^@qBzmeR`efG5u^FPc1taqQ z$8j6^h#7$gc*|FL;2#X>o+z@_@AYsbyIB$zw=&9-+suI_`%JJZksOn`E~sR479}K~ zELT79!^L*Gv;$i3+!Flp$aSp>;$@MBBP$?6TsCD^@{)LBegNHu2Cf}W>q@`4)I1{d z>6(0!z?U|pENYR)k0rcQv0H^!D{V6Q%21F^vg9^v^W55vUvD_d5r(#ml1pn{yKjDv zb+RzZBTg?3Qk?#=1fbknZYjQ3vrTNDpL6J@*KKrNK6`tzBP(w4TZP@`T|zv>Rd+&A z0{&L%Wq+LkkmG3;<@e1#p>KG=#cdqTfb78;W4l=2X4uFi873Y~h;}+FoK^jAUePY> zE&l+tR_Z-OVdJ%pU(1#hDfWou45eZoWXt7XjFX+X>4^=;+N_xk{OJ|M@L$|WiMb=S zba^(!?!Y{$ktiXfRC3{*X9MQyLQ#@(S9?1x{e0c7+4>yuDy^ersq)9&kJ-^(KHa-5 zyv}ac+IWnM1W_%$q6?KNlI5fs;za@FUC>D)M(SH^YtJMeis-quk=c?&mfBWXqY6oV zm>?4v>4j`$0k?n;UTxKFwFQ~n8RbWgN0>6D$J$`JjxhdO@o=C#$~SzdiI(|>dYGYt zZ6a^80$f63GHvowQw(nun}-UpG_J3>H{6m#A(w$&Dd?WsdTC){psiL>X~{-zFRyst z^m}~LEc`swCDwI|o4r<9?mo{97V9CM-e{IMVh^zAoZsVHAoV=4M>Clw$)JuNe4suD*?bESC2U(!{~0)9xeA z;D>M8E!{|0C`eXUg$T?C2XH6e^rjkx=(sYXLoM2wZTE#DgTU535{{V-5y4!6q+r|t#noOy51+gap z4<=j?q#j3aP(^P;XC=j}kg66#3m1H|0M5WNHyc(^06lVX&{t0#yb{=ngaS_`RZM0! zSMr%o;g&ntf~OeH?0mb0QPS;XXPP25#)4W>gr;=O#eq|^$`Rx&uMIl#q0ALgHf(A!Hj!4HC z10dF&jl8BklkO@v9nTocDv#aCmH9^T$?4qtp4Lq&k;czyI0&+6d`i0{!3+&PE&Gd|r&XUHH z`7I!WbUQ#+QVigNPC-`apb$-bJ)`J)ZO6tR4_Iz}mav<}J4t0onrq1m#~~_6SYr;2 znIix*Fa%fD{&2vOIRFd?67DW6sc7W8Am^NDC-d$*ybmxcH~0{4ekih1PL}oq-hX;qwUyE!-46ZI@7GAxRNR7mM7Hp7+=d0let|* z-r{y1j`1ku<6!{p13n%5W_WK(@mGf}yg8=I@2Xkq&{|vBvaoBIbh}tBWVeEC#e%q! zDIOv}c_eZJ{{SBhSL*VbbmvwB#>YdMF7?zL;Uh_`4Yxso5Xt*kJlh`^~*vCNxf ze>K@*Dhk(<$Kvf$_&vUkscME)xhrZ~C`$-Jv?&Z_r6FTga?+3_BXg*1itqK`3|wiN z)wqeHS6ftyb}qYPW9O_;t0v$ik~rJ#JC(!>8b((wmEb%*qCuzX6Ul2LE%a>8<8c8Z zk~vJuBABcb?oxpnX5F-a6F3$0e$JYV=O){iyprBGw@uW$*&oC{B4#ye=D4WFExvk| zzNzikzxnzbdR$kQ_Ttie8PEd*37yn1Ef{E7BywX0TmsO$XMvM~YtuA4NYhcbx4f}y zyMJ`sY*|ZP$!&N0x7fr8)z4fvAJy(cur%`)}sH;Zyceb{*pO%mGJrm)+v#DBmp4wAxVQ=j? z?ks?58dVX_sWggMEP)v|8B{h7c^q^5N#LzBTh@)0^|iE<*@uVCkg|wlibI3v&oSDl z*xL(@#{+2`Wd2on2FAkbO)6NeVAUkFxfc@LMrMxYcM=)*OS{ZxgJhUkj@6M7yw>4d zewFxp;$_14e$PO%EvM<4Ok&?-G+$`A5A)4+HaFy?$OuCuf%nNVapnadp7BhZtwlrO z<<+ICwYxj@*}W`%_XE`Sl&h+aT*>mQH?Ljyw%z_uZ?AsK_Dgm9cDbe7Pcc4Tml^Y9 zF~rFXK^PE<1`LvUfO0aU2cI?ZZ-}hLw6-x`+Q}?R%L5sRXs%V`h`Bj1$FT`n9yZFe zM0*qxE@RXtj{5ComIgZn z%@lGpkwYnL?Uoe1&tAb$uIjd5u*g3+=)yKW523!*AHB|@qBK}0_=z+sRM z1zXatAhD7nAOoq>%WB>p^Ryk639|fZ*i~<%#Y;VLb7Zp4CP~dO175yFj z7qxvi;h%%xkvzE{NK2O(!T$hBkXhjjFLF?KEH>pdQ|WbTjjtfj&tAF*WVu9@mRMus^!A-+zy!}eFypc$OnjO`XWxQ ze4GuqAwbJ}ka}eP9-jUq;(rE5a;`kDn>=G*W6Gf~o_lrqZ-kPa1(0ggY1zvu6tN(ADhz3o;07OuT~{XgIzlYbch0A{}r zc)}^BdtdC`O+zd?ot?Ug71=hc+#-}0DV|wz6olmY{NlePJ}~~zz9aAz)UA7_JlcCs z%?_()5&J7MIUq^3Brv$g2_^|#=NL8pMC)D@j#QKPO4$3v4s-s|IUUD94{G`Q#vcr< zwHR(K?rk8J300O@XN6@+qa5MY!48-uLbp>}6#c?+fG(KeROv@%+RDc2yHk83R0e0YLza(_8+b@j&0I`j&)6J@QFB(nY zGQ7Gx%EwK)k%?sTrUP}9n?Wj)EUBD?D!2#p7sp=-yhGuO>Gb_?N}Eo-QeESCWK@%B zExrQTSpgW`^P)FtHxi5X*>@4c60KHh5>CxM61A6GU3|OuKbm-#!rX34h^Z)2m25Ph zxmFNPI@;H2?P<}yuC`4dIKge^%p7B8;KfKEc}8$^-=CM9cFqQCudv(_X&``XlIjJK zir}up!zsWlF`fIi;Nz$@c25r&6=W(_PD7G5DuuxVAU1anryLB7@sobu2DY`0JhEM! zxe5TmIL2}?Ksdm`Bd;T`tt?Wm+@mX|lTV}C{aW<(K4%A%&k0sBlx1tHww)npJtlTIP#UHhF4O>0sZ7?Jhtf} z+afyvNmMy(WESeQJ9fA5-leHZ;c)l>552H_>)Zlxeqb9o`@H0EUlDF*mqF7fnRm@Q z2X1hY#HjmRNO=mGkI!F~q;Du>DiuCl>L-e(^}1TE@>9$O$nwNNScPdL95R^OaQ^55yL~#AB`#8TALW z_*tr8Hp#WCU`%mskg;!>8UFx`D&r2@j|U2Kk@8Q3Co)Tw3?XI+0aLiJbMq1o2_61G zG0+}s>Yv&%BGWz{Y4)ig9%i*~YbF~Kyz3X*ZUZRYkpyoV2P6&tU|@2)eroWVq<&HX zfU43-jk`%>)kzJ27!Y&L2j!++D^aTLbtbKUm*b~Tdl%;PpPe z_<5-6T12qk>Gu-ZUD{zIc-WHYS~n{wz*!gO;Ry8^0#Inid8JSZ#&3sGX*d&!vqM0R7h#O%iY=u`SbCV&$^-uuM zP6j=0#&K^fagE$b4a5%=WXTo8WCg^TMp$G>-^`3*56gknH^gUjp*qv|eeLvD?PvPy z<>q-g7GYBgsYWyAgK0he+bG?9{cg{Fxzg?nLvtLm9Xv?@w!hmnt#35U%^8+EebX$` z6;N{`fXn6M4Z6B^(XZ?gx5)D-8(@^jg}t^8T4}BKJI2i#msYlUe|wCpI48@K;pdC3 zr_^ zqv~^9K+wczxs9bsT1Y~~rXd)Fg;`~Va2S>nv!kh=Jgc2QhgVvTqa^qD_RkYqv`cQu zXe79O%_~R{Mn1)PIF#E?fcXrvO)NfYi;pcf^?R!i5a^nP_LVFze{tuF`&gA@7WXld zl4d6+O_|+vC1R;+lbBdY=*-;hHE2JH#>=(s-}>10@Z7VZIl}8nOMhoVxewy0dAL@1GlBGN|lwhb zZ2tgfmg*?dPbtjvLSM;6mL+Yn5&PDWPT$Ro;n)&lhl4aB2X+VbJR+ip4Wl$uFVYM9tJ`oI3?OZbe zHn8X`)qER#k;ei|Q7^2`!$^@Nb6iOk{ETEoF|(A4DZrJ8D;z95jhO_ujYe%^A?Ew* zy7~2fR?z#5s*}A;dfy0H$Fb> zYQdO{0y|^qLh9PqCAhgs-%On?{P0PPC}%C^6!Qqq6qO`AYz_#{Yu{8<+-9|DtLv_o z>h-?*-1=&ejpHT0t?#bgb-ulS%*FVHZEtOVqSzP=u$W%rSmTUBRPBksesV_SkT~ZU z2N=zHOqUUjK*0=g!~?F?Q;orncB?RA3C0h~diBOldcVYLS>MGaWStm6r=u*)`2OWIW+3Ap6waw6y=!Rm;<`qDo5=j6S7{+>^PkQ@ozAx&O+FLiw zufI1gmU=sD`q}OF`FFX3qh-C@x0+7xO|QCUPQBtSPe{^a`z4jWt7RmU8@)d9ciT*; z*>pp>rH*AI<&rUwPE=z!_$x*628FErZPx~er`>6-qj+;y7s6|noJDk&O%~gJGZMzq z#EuCsGw$3##eK2k&lRSdq!VRj6jsg~a})+xf|LkwaDRFkn7BW}GNhc><*&j&65s1y zC;02H#_8wj`ebu%WgClK--B?9R1(iLaGj))_daZn58Pz*Q=wj?cIQ!y6|VKNeut?= z$JpZM@Toylx0|$IlJfrmCeLs28`uLqQ_v;!MZ=0l>MxL84S4~?Ll65@uR~!uf!W~3(aFJ_ZJ#QfpM+s z-)am|ZkpcCAKa2~=2)%nLIPtdh#NcepSsGD!%}X^zh~^zlK5q_c6}|^x_ciVj`phw ziIq3Z<4RV(>rHL4+if;JQ}MLPsB6~Rgb_^~m%4ql<(v?yaW-yP62BqOof&Km(tO*Q zLbVzepKEb_CEV)rh~^MTj}UO1S)C5f8KhQ6Yz8W^uFy{z?&i}C;#yr>JU1yWodvV2 z#HlP7QN@V_OgAg3P2|haG1>+&2REWwx7)6xm1QPHR={RMl2zbxKo|_Fq!ELLV8^Jf zrsr$9a{Tn^)%4rR_CJdF!Va!G5UM1k5r)`26mqIrV~iZ*601ef|3NKF@@(?+wlFwFysF?wWU2(|e}< zERyJGXj%>So2|>G8)t%8Y^@`fNnsZ9<$}7$3Kf%Nh^->D%I-YHA2H5r-((^iSWH&Y z+q5c#D@o>0FcAfHic@bHed!PdV~hlLV#hcK&a9`s5L>;~^Ic17tppbr26u3>6(&8* ztn9H%8pz?8^cdO;1KQc%tHClh*=`ADC5N3emR1g=1Hwg|6)Y8Vguo|19agVA+KRGY ziqp4m>7(?v+_@6gDJ#C**7E+JV@=u{&}?j;SC7o|q}t88-K11=7Vu8@h^Z_}fLj6f zj8cd%H5=yK+hT>4AaNQ-C5klw%AhC;hn8mCL4DXHlUZ*1g{=PoXo;3L7L1uz^B9Sd zV_@JcZ64UkSmJ*(XktSgR^E`e-b6)yW^J*?2xtA3@ehqWE#bW~GS@o3vtwvJU-fa# zbqsRIq#TXN<)kcrSjx6YBro*YrbP{ft(BAjn`=90ts%kx0G4*i91#8Nf6F-3wmPvr zat(ev{{X>1z7olIuWCON^;k1upvE-)4dp^b)~R;{vD{4#<-z*}w&Y--7P-B&K)|2_ z_6FV019la$(?7y^#(SRs0Mfk2@ycBv{14CmA5-k`6dfuywVPbuf^GHR*P+wI=OYII zXQ=-G4Dp_yk9=cV7sfNtae;%xF5^$^yymAxFleVw>al4 zFb;oDZj{c##K;Z@Uii;B$o`$j)7Gok9OJjt{!{_Y&j@uqbU#jq{QjQxlRddo$@DnrKl;bDXHO5H&PRVvI^^VZ>BlF&IRNA?EyE$m$?iu^y*-X``D3mt0`9~) zakL&kTzej;^8Bl}n%_CcCo8}i{(PFunjG!~9=vqy2Rt8B?Z>?Ud8Ou>PVba-Aaov| zng0OmR~f13QQWHrh;IAGl|20j^gpK<@9gtgFRd^pnTm| zIl$!Op1;$v>|ONH`hUX#^5(zbxaUXR5JEK5AeP5(Z`b9&iGKsMPZe0pWvl5{ z_pmE&PqajeZR8-T$poM@&`HoF$YNDx!?TZ-e@Jh%&B9NUa5!9^ykmo(q4XZTYlhW) zGZnyWN660@;F2&#M}J?#zdQ>p^bbpVjoasWWWeTy4NKIM7aZ-)6R!QvA z+4Q~7=WpWg?2oHx!h639dAfzNd6G4p$&2_ESQcoU?TYbwkDF<3x$0};U0=d?dTgz0 zcW*ROz;--NjTFl2`7d3O-!6aX1Hplb1{%-AI`^_Aq(9Tsu*mn_p+iCc1Tg zdVR;h=R5;}#wpamDABDZG0iht6EY;BIyp7zIm7 zw6+@{XOcL<@Xv_4wzF@n+G$YX?44X=%SKgXf%nD(Gl^XuQRYg=k~S4SSQYw5@iX98 zi+mQXb7gEbT{;5$ZmsRel0Dc}d#C{OA}Tjzr=1ZznH1n3&fgvBHwmiAb9PK}n7p-- zxQ^9RRD&+JkD$)3pOO`F&>Gr>; z+s}=MPMwflPi~PwNYtTC&Hw(`+PD4)EE z7s_&=w)9d<;2)b9+s$5z(&qC^x0J`YWfE0IC?zsR#fzaIy(+D_7;rKPAY!@;eIX!V zu#pUl1QD>2u!}P?Z(YEsQ(Us;3m+ zGEV%vH_PkQbBsq(v$%y*I;@~45vkN6w{ zuOy%@=S7S#0D{HB;0$H50q4{5?!Rkk3u@jL(^L128{g_PLV;uv`L~wVacNT8k=Ayb{hsUzQv4mid-SFeC}!pc`&9{XFR{(Xt#C^%%;7{z<{ zo%X(oF3Q%`{I~7(M}%4{Y&$4lE-3#1c1VqjZ5dz(FP9r~2*6@JE7C0HGR%nNA(|x& z#yqMiB3RfnWbFuYWZ-RF0h3-);prkOk-BbRfMa(Aus?L;Ddl7480RMy=vKE9`Qch7 zAWLq1*x0m56u2KZ-P*B$PnEkJ@&$aJWaR49dMo$V=~~+CxBmb$;Iew0lfYhB+llThqmZI1t<*DZxrveEBYaVme5-ICJPxM4Gs613 z_BONcziZoY?jwk?66r`&%`v9Jku))!N8~F+tBbHAp zDJHpP4)UVNV*5gc8yJnvyN1Sc?+$6Yj7C7MGRG)4S4_TXG1{mOWRd}ekh831S-AnF z>49H2R+6aNma6@`KVGNkSX_IhI7W-S93#8GD@kAE-nY>D2T9eT)nhiXOZJ^Uc|?r1 zGJTrz*5N#({h_9_6=c1LM6&FOfR)lA<(5*-HSE&p&2y;fQCeyO8)uSRq{9tTM3sKn z+Ks$%$1D^1OijhBfTTa#2mpm2IKlRv8&sO-Our30MV7+eJ?_%W<|&&E9vU#omA9L$ zAU~BBF;%I~oTlMBZyv7NK8tOC8|kUx+o&!L!ML_dXPoS0X*|f4Q6!29 zA}mae8#KOQF|PR)1We2}mFrVip3_!}eHQUz`#J_?ge)+bCRog|O0xiFEa)SWCXQb% zq8N=^<~f!cT(=ie+%>W)x0eY>l*I~pjO!5!;hTcT9P%uvZFW|dop^I8Xh%Asc7%vs2;V#mW8j-79Fa?l48BdYzB zO(O{gQe>VZ``c+EXI+j<7W>Qcf@^!iTC!S0acQi<=Gd8pW9=J?zzkt`BPm7MjIx~d z85!wcJ<0FG?5nMQZ7O6_V0Pk>=TDc{tg3w{cN1-y%s6WkONN#G8*2V4SUa zbl1AooJ(=x`;mQN3?5{V6cgO8=eb{;hEFmD^4Ay&?slp%1lMJw_~kX<58YZ_TfUur z7T7$NG0PZa0bW#Pb0c%llPCt*a;3A+zecL%<+sDiuDbJESEu|F>!FCI;}~+uuW>1* zb$KM0p3dKUIh}6$-c4Ung3jbm9jXg*?I)T%*x32oTXFr`^xL}~bDourXKy6Zox=h{ z#y1o5AjmoX6S(K6x20t1@mt$#nvsIom=<**StHmk1_Z890l&>~uewp53C&u&)UH-} zT2?@1n;}y>cQDArV0?u2{&n}5YetnQEflFix3!x~TU+q^&(Nqs6!4Uz2fa8uyIuRM zqk49}rNrO0jRml=$Fz~twq z?wkcAoC^4N_Ii7}PZW5I!qMr?4b9Et+_ncY$g(ORl0B`lOK)K^G0blwkT#6{u2%h? z67hV>GJ|hbvrVqQGI{0o995R8QEjfO>9=cZrk^97TTl3>r87q#+FMMEPgq_jEpA#* zDn^NVD=WM?+ti=lGK^*~6>C<07x;bRpAidmmSoW+wz+~_ByS_ZaTHeHI6RXk@DqP6 z&;eex29!$1c}CW4d>-G!u&zgbd~r=sY&7s z2=5}F#1dKB#deQo+m=n8XFOZ~`~O2!v{kA_saT~;(V7)R(AKO`v$htsYQ)|#s!B<0 zr6gJuwW>90)F>4@_TE9n-XtQQU%vla{~PCS9_O6A&o!Ud>w;Y4G=1;YC;WO2_Ataf z@466R`dO&e%~^r+?_NDiKR;$!iMh!Hxyswa`M_9q(0rxv&k{xjkI|bDRpu^0(Bm1vIO!dGcuez+JhD1KmI0WVk>uX<9zdhq*siGk4>b}Q)$(aN+4ak?biy-t_tivFYj;Lfz%1V@&uP1fxR6}--zNJJ zA|ZL<5I&tCADY*nbO7#$HubFZ^_{LwzS}bHuHU!i5jpc^L0Eszb#n zxJPO^`__zPHjUwnNCe$!`aD2U4;a4!-Xb)Oe&|uS;hSiGzdGlWw0ki(pYxTZ2vq9W z!*`94j|#4tQ!CrKY~0dEKNFaxEV~pv|G~d|v+IC8J6`s9Bv!Nl;pO!>1|(@ z%OteXJI#CZw@Q<0x>{yryNfRZne^Qtr}0=09OS@dyV`y1usNfEdT{u>Cs`%M2vKjH*r)lPst zV#bz+ICc@UdE3WvT9(6J=B~Bn^BHeKqeVq+9=v#Q8VpU|$omfvIej=Xc(}Gby4*0) z@m4g<&fT+Hwo)kN-D`IH?CWvly9=1s9LFV_*i8zopxrj^4$@6sKb?1%NDhLSZGXFv zWY%x;z=x$_*_YV}VDb6%)$WevUV3%mTD?qh`s(^q!H~+8XPjQ+h8ilg##!+J&u@~- zj54ei#@KXY4Z*Caz!_7ph2CBk&FU!Kqq~#m$5z=$8?JJ7ich{>e?!S2>A`lo<^%a^ zaE6HAfmJZAgUjj-jMUF|RIvDEvE_b_QTKR&ZdlN}wAOTC_c(3Qjef?07-V$O?NV)z z@X$g1HZ6>Hzmu3*(0RdLP@~tmc2K~bF&H7Pa{M0vd}a!D3A1fs>yc&R7hifAh3vL) z4?dFl1@r;coe)ya)ez*-}52K)Rl7@;^)i?K+B^V`dORgk2a=ZIv+lT zeA+nWqt1lY(V(I@g4@KdQa&6V^Gykj8LL?kc3bApZ6RX$lX6))G!71Nd>B=QrD9Fi z9}xbcoh~^(Y~c%>(3_`RLSUpW6iRzU70UO#Vk}Uo2={g`3WcpG1K9TQb76&$-oxKQ z;nVwvrKHyz`%wq>ek91YryLIWE%>;MWCxR&9?qHdBc!00`Q1T_MsGeQ(?_8eAq+n2 zYEql(*75_O$I@I66B*^hgODsLyfJr+N+$*ItCk1Z_I63gJm?u8OrB`};qbx!Ar?kU zrwPpn>&*QYJ-K5%nwk@{p$u*uBdoS;#5=}&$>aG|vV%>0(z^+(v<~wTv-cr3Olrr< zVmg~Y^^Cv^!!4Q(PZ#4}q--H47MP>ZGw|VR0Q`hgJ1Pwe{T0s=*w2U{xBHe_00;IhGMr)ytB~R3?lmw`-1X4z6Q@L?>#M`r!1tVv=0O?d)rsstnFpA|IpD>mzn-dP<`v18Ve3j z{;p){CL%@5#=|N+p9P}-EKInw#YXEsj@YMBX=b&;@KzqROAGsIdH^{s{S0aQ;o!;R zS`xyXYrO46`(L9HgLpiYcc@v%a26&-3fP0S>~MrAWNyh=L8BXV9u#cliz#K^PkN~> zkfwcg6VU7a+8)TYsd!$M(-+eJG|bGPphx}grxr>l(}mi24F|=jUn2fA2yFf)<@T?U zufO9gjMDEL4{79oQ1tktwPi2ldIFVC`WNO+d2^oFxBS>&i7n+!3;wAu6nIZ%PB&u zzA9BpZLhnB@7T9PxTV{6If};}SlE}-Vt04*;YS-r%Bux_POR?|;>z4hOHKGPXYzfW zf=-Zq##KvUHxEU-pl*}Lej=DhEg~UZjUwIOHq}|oEq?yjNiw{qeEeW*dguPyBdwps0iI6wGt9<$@2+08oBvNisn(I8FBsb`K?LFjuDi4d<|Qe^ng>#!ppNol9&zf9_dX zX-N>(_cKsY_{3b|y?-z;c2wns6aEo+E3_cf_@wUd1;;6XXrz+&!i$yPRiMp=u}uNdriELHsN5rfHHd2m{t15!Z_j1{@zV%O)2RVh-WnV_QY>x z-Z*y?33)f32!^veu|-{%d7n8ZKKnkUaBnSBww{AaA|!PQcj{N(}+m5_u_j)lA|T7M^63rw*Uzj??7%&NvipETq_>F2#tWf?34YKdo-=-p!fxQHUpDjiFk8EFaV|O%r zLPoXQeziImx%f4`ipZy_LE1arPVm#PO;_#j{JdzX#=ehBcORE=eRpu%Ntqc(lZ2S; z{l)MmU;mM0} zcz@L8GkF`i#V{ymMDkm`+U>Qb8one^oeEyw?hzCix8SR>O`Rp){P+(%U87NIuHpDh zc|ZBKN$r9DLYjgK$#X({4r*&I9IqIij|4~R^`z@Ff#httST3P23LkOg6oi)Aq|XW6 z(;XFyPP9+&Tw#%fzdZ?kB z^?v|D^TyHR7@2c}p(F8f#RJ7kQn!Oc)(|mGR)pU4q+l>h=)L3R7zeQFk3cH#Ui=l% zr+St@o*&;qI3tao+!-=6?Y*|udugz}8=_2!I;g>vcKLprcCO_!54)oY>srp>TSQqG6rmfYpbXrw?cDNRVPANJ?wTu@&ZwmYpH~A+0 zu_r-y~r0{eJdSmJR@RX2af78%zuj66>TNCm$j*jRgW|G2urF* z`z2m@j_-Xl^->&d{;e^hmZ`mYPq2K)!~{*4jl(_t`v!_mj`6`&MWuvXNwL`*1KlSVE zQIJf-c3RmSVd7Qgi|k^xcoI>wSgvf*HAK&}PgR|>Z*m5JZxH`GRK}Rgx1!0e$1>{Z)cU4H_1z+JGefK@{Gz@#vtxl?NV-mmOY+|>>G+oo zT1;@MYc|}k^MCPw+7FJDeCE0DB6Y=}n={Ak#e~jv-i8tPHhF-S#-xxFOI_PVIxscn zU0ha-Y@*TE^qOBQD4V)-!UmV)&8mB5YsG(QUSw9MsmsF+%3FOuM615>f8gab%MVNK zTenIs8rvmq+Fni5&z#F&iRtP0wz(A6XE-xQ(b%1#XSK^z7Q4JL1dpb%db`KsQz1ibcc|5!QN|6D!Wd|YMnp3873lzgM3F3)K z^Hr*tjb(efHDB{Ux%u3xZKXwM4G4YxZSSOnHfWm7imYKF;2lTaWC%sFco|qC^KT80 zPF4p)gSJ*Cd<7Q6|Mi93FK}$o$sY>KIVOFU=PagSET|72*O-b`g$<94SX9?+ka+H(ch&e6@@(BwT=k&4m)Oe(ZdqL9^!e z%aUR8i1TQhLE-Hi5UXy3>O2;ct+^R2A+Xx%mFGm<#xw3NLyH4i^)Yb$h_oG`TTu|8 zr?%UdR!~ry;lDd^jt-oAUL7axs-QJ|71$8VRWxCV?c_E@-9TzvglcGq3H>&E`hia^ z;I9U6ukw$#Z(p`Oc$DDzxydpDQ+niaQEVjX$#T8A_)exE^U|IBS7-9BJ-W~S{6m^}(m3r}f2pg*4(W?A*oaC>ef)rIW(26&8*ADuG z)lIu?z#%ZQy-k=KuO%RaNDriYT~;UO#7y4dgUTPdh>s1*ZVi?wkZcNYGPS>MF!zZK zIj4L4;aqw3yN=KNQ~9;QC!)ekk(E-Bnla(rP3CKd+-3fycP@XdEb8pNIqljbIw-Hk z@Jch_7IK!d-~I1)_w|DZ0>`{J7IgmnE2}9i4oEj1dh^RlwN3lrjq~AIE5lG|mPMPZ zupvimbp78H(ZrhPm7SiTTqk}e8rN5z9IRvIA?|A-<6QPO5$JYF)TZHa$$=VodAZ;R zj9lQr%4m|`c;D;FkyIW6vaHa3-rqILo=I&cm`@KA;E9l@r>muh-XQxfZ2)*rgMD zwHe&qwKRt0XF}2UdY&fViY)3bHC>%xmtv`HK{Jd=L&hwM^T!R=?K9gt>JthQH8}*| zQzhI7%0~8uLXv;>NNWqCx>Yxus$HFxP;ma^)Soi#S~jhhL4o;3yjnat zle@?kt)4s$PBijvh_Q1=sFR?vk+?c?`9bi^^Ld%hqe_N=^MS}F)_Q% zqw#Xl25s^-P^%3l%h}LOcglG3&vf2lxXgfy)4+Nq>Q>wJ?EIfso6M`UOdT4PFS0zf zXEt4H{<{-%(=_UByNQ0R`!@6Ib+XaF_EiBU0`ow7^r*pAH6w@F1o-_sS*GLu|5M35 zQtG+ze${d)A-THx=T1dveVDrTuHm9}%I=0b=U6dEM};pt|CD*G9$Ga5HThLh+V6YV zHi)cgoWg~|6udQJG@xr0u7I=%?=mtD$lGD;`n=7b6;6&Cp*|5-@VvT&&K6QEPY@ja zpuF0u^bzDT_LRJbRKSlVYsudp-&+s9FPyB^<>X^RV0irc;t2srIWQk|#8CWqm#Mb@ z0mvnH0IK1LhOLb)^IdA494)^ILliuc+3F&NYPLWF_1_;` z5hO{8PVycVk>l1neU8Sw2f@yR0Ec7GF{)6Pl5bw>*7!pF5!sh=v5eF5VE(Yk48ce| z;!+H2u5bZ#CNW;*TK1ma#TJ4cq4Idf@12=q5fsaBVGc)Kibs@Rag(;5Y7qP(Rw?^G zK=^kWQ!22Eg>2tV zsFaoHz(FIBIGz#@>^hf}JHfHvjsgmV2I0xa$Gi&rPQdJBI&{oPFhD~HI73^Vsp=9x zcHV;J>N@)qx`%_FS6V&z%i;xDe@P!Ihg)fB#Sh#p5an&@2tsQL4HqI>@bkjq-g@rA zgf*-ORq>G~e(u+DHH#-Z+XM?s-~!^P-uJk?Ts!PHuM`%suQw8GeBX_{1?CS^pykQY z0Jz}<;|w<)5P4(Oy77pR9p;O(B5Ds@*}(NgWYdkWaE4xG*;+@=%~MY=(YWq-&zd-0mgf$SQ{>}(*N`P$r%3Vc5}>G z+iH)U;t63@u}1g7x^|hI?TWf?VHCRY$Jr!5t>3$$&24*?ZLMV+>%HbZ46M07dtzHP zt>bY3gHRB=4^{VWC-h^!I~|+ny!-dACc|$~7iq)oa1DDaPu%|^gF}(&$dtYaDHI+07})G3ghph2@lZNx&Ht+PbF2Uw|+QX-;%nEu3VjZZ7xM9-Fw5K zYL<9S^Wf7PjurJ(?OaPU%b29F{xTsoN89Hr#%Y$lFX2pQL;H-a=-)Eux~H{^7vASF z@9H=*{LqMYcpva|u)88cL{X1Nt+f)B%{I^2bm6q(j57dXVOBU8vcocS|BX@ghnWe@ zX7{HxZo&fh&q~FXqm4EBjLx&akNU0p>$sN9R#n&d)w*wq>AmZdW8qBQz3zJ-JExCn zFi=pqGrK&WH-*LX_J0dbR16Obw_$6%bW_Z*?U*VsR3?;Z_+r>V z^PP+OwXU;D`G>R0DeVSaixEIRIR1Wa8$+Du7Wh+aQYt7sn$Z{sgnRM0q>+qur8JGT ztlZ9bPL&Xdq`jA$nCsESH$<+zE1t%Gg!^fctKIyo``^gkrLyIy9}qU|c$2$v9lO*W1{9Iv{LTY;tO z*^;4GWsLKsJhe{;?12$=Jzz&}$hOM&dUQ&NcwT*IJm>RA7cG43Md z?);N_zCX9z9i2Ja9LNpmmUR>mz*%p4YAi(6as=^s-;_^Fd2l1MUQMvgjxFO=grK|G zG$8Ufug+tYUkBpl%;_tc1&*pnBl!!jBg(?b{YHuHw}AaB+ycvN5nH*IpVL{2{yx5T z-}2rCrfW(s*#!Td&(O7Wut;HC{BN}j-j^v-{wyrQ-}|9yRiDX7{3DtKQM}pA5bVel zAo(nL8zM@P3P;4M3)odWKdMMA)_mw(wsU)X{W!F_O#Xx{DyEhCC7{-~$Nq$Ps#H;! zVI6O&?s*g9xu*&V5qxiIyLK4gQ>7^Zo*h4 zzmXXei4V+*a?N`DGi8V}%QGArQvS^Uc3($zX)51~syGZ=kGo9fOh)S)dtcr&rtVb8Hz>ys=<8}5#jq$edy+Qk6BJqyjb^pREPp`(13b(d_F)<)0v&$)3}V9zg&Hdgi-n}(mR zZk(~MwaJPp|6;m^D&El9do!R87H9%tH^lodEh>xphvbKIRlHc72OerRs<`22ufIS( zxJz5TZvJ-9s^gkNQ~kBenan@r&9z<9J5N}wmb~(Mpx(#W_`K8GUr){Vc|r}_`EF$i z`~0p8aN810Q>?qJzH&p8Ui(jm>kk3@U&pX)d8=MG=cQTG#o8E*_8w!7QYzs^I`NyN zx%I4N=-10dd}_6k_peQ+J}(oE_GC+~P&($}kpHa}_vlzVOV(}nU%7?2$y`0cJZJRR zy^)sJ>~4Ja6@9h3sIuc`8|>x-)=N_~2#iSO*}IefReE&L`0zKSwU}!s{cdesAU%`Y z7XE@`eKx0qu!@WNj_GKl_{4kr^S-bMfYe(Qmd- zM!dVzMKktqxu|!{0|;%b-)?WC?0qK=V@Ac_3|p@V{T!)SNQ-~o$!o41(5oYzthRS? zu(8hgV$ZQx`)fg*S+@~UQ$3wn?rv>gHa8vU9%k3h;WE}Hr}o0+V}|(Ws+^&k?WqRW z<`&nE?3WryRLVwCA~z3;wPf|i}Vo&1wzv$K38&p&X!y7wMB`7>+IOh`hC33htxzM0`ioz~`Y>08_h3a>Y zO;dD47?D@)eO2kR>!azfckjGm(o>AUp<>%x3wVXP|2*_)F#UQoZ#U3tkD5BD%3mEG zwYsx4Hsu~#=dtH=8YeU4RyBLvVf3Nv>i(;Gc%=q%jw@H=i)cwDYj#M6HQgH*^21gP zYc)TAQ_h{dLJQ|0&P>)cr?(5iZ(|bsyur-&2iiR`n(iFauNT0~_fQKln?0P!8vnUl z^xH=!cV+JxwO)TO+$CLiP6C7*v)Ku1Rdz8pt0~@JICT?>l@*}rXmarMTvFQZXB=%g z%M;Y&7BKxNS6?w}g0gnKJJho?dvt~>ZFBfh=&V^Q3`2n7m2b+ncy{L$)Y`aJ%z;brfMpTEMO!**TCaifV*B;cQiS3y=qg7Im z;sDrW!T3iIe2tzh6vajPp3)YP(6~1&ho9yr%+;DpO?p#t4Aer<0lrYiY>6PJl*K83Pew`Y+;XZ!tKEOw*tG2k=U^$n!M4OG~-=GrVz% zOTP#|K{<_nJoS#>cy=6ju>`BPiN(tiSnr&<35r4z&Pyady`8OE+pc+5=|8{&FF5)% zmxYg@YnXnI3ymGF>;x%A$t~-O^5fNVvuC)g-J2<>(AJuAq2|mZ(fVmB)w({4{Ih8 zND+>dn5JZrWkaPogbNXiZMJYUBWttu=tp?LuCgu@;1GXsOg<*|0YY9Z@xSLBr&ktJ zP2@^0c`tB$&2G6<&Ldf+Dyiy-|IX>zvE^<}v+%g7yy#`Wf3?2xURv~CFtZ(>mou_~xfm;)BYv>Z|J6Th0k@Ga}m)Rw1<>duIk9#`1*1UQM1!ST7a95-)HtiJ$w~v8c&S(&&F;=fuRmjM*@jwh|6Zc1vh| z+6XWzA+43j$V3M691lRi;KVA{O z-u!cmnrc-wO-M89G*LK%?uRZcCATjNiKR*?(UYD$iuZ`?b6wOrf#i# zp!>LG*v$MQkCb#Z34ID4A2OW>9c=)nOEbHZ=NqPPW%DU7*xMfpuxY0RgGj4UiMddf9*zvE^&X>oa`F#r-4l3v3*qiDn2iN zsV*(8YWB`_Xz=_fX?2Z!J0_l@UTlUfY32Lk25mPvJ~8DpT950GesSl{bO^CY-60DC zv}0;vRH(=O-8ggpQl%sitnle8#y9^CV&#M1rj`==R^5F|p z(N+)p`S|x2$c)38T^Mfw!f@!&b?wc|Uhh^(wcQ@}f)%4_N&fq@>Y|UdIXgCeI1UJ{ zdUv#8yicw@a@8*5m|EJb)9(<|VYqYE^xoxbmKqf&0k#r0{vq0RyR>yJkB>8=^M=g# zZts^89ZEhybl;Jqmmmh76b&h9rMY`KU+EeTA#2|iVi)G zByN4w4$S-#HwSUgxSELwy_eYWeDK00iKl+w-7Lr7BDZ3rTTJ((ZrMUt!>&viX#7sURklwFv?YO``42ELh!=Z ztb40G-N}kij^p>9ozH)$&gIisIbX?XP#1dkutzRd(B4GdA>hek8o&EuqFy(xhD7gL zYYvJRmkIcil>b><*01Nf+AmR;md1~F#_T7!$8KMUkkW2`HPM!{2a58bIF?A8`eUM-37Rrf z#4ymvQA6cEPH`VsBiHVw<9=ghpHd{mwj*8`@ZqA83Ef0E*ZJ)3uVbaXnm=yWHwN3j zv>b@;Th1tp`$EzT?LA3aPefV@#(U5R(ZHA@9@oR#Mc8KRA_nx2?dR~*@h?WQ1p$#3 zW3Ak@9AJ?lB|0Lmh(xnT0Tb~)>vhsQ{=RN9gP}d-A#7i1rEdPW^NE_R8nWwfg>h5E zuY-(*`OVOB*Z%-^&3nvVYqC6PHC@-B=gSuFVmc#a%YGQ-2L7u2oAXr?1S^@p90qdY zWBK_W_iSirN_uj&uUeZ&@{ulGzw6pV)({wS(vBV+*=@11khY@P z|M&udE`l%j!1`aoDg4zl68l?dssrlz~#@4Vz*wG?_yl@^EG=K zDUj|r*p{WmXJ@YVOT-J+Xu>)IN21)fi#q+#wS{DdBf|l@3SjbR)sr>NenzP{fW~0j z`?>?NBcb9HMYVCk~qHSbiD{(Kp1Xw=6)mq{O{9C!V=1QJ%!F@f9qN$W%Qbs=zCuN0lp;0P?hs%0_OC=di*7J&;3pUv1>F0t-x1J4 zi{_}jF}l#Ye(wr;x9My&99Ia#5APBOfPI>G?q~-%FH4c`(c>V5n;C0 z;oL4rMjulPvu+;xYOl0_kD@(XE_24mVnW5+?L*@H01`dQ_*aGDK6sy10FTKih900) zP&#&Ocat#KGUdH}RyiOq0`29!bM6GZo%>=ReWUoTJw`7h8Fn6aWTL_1#V9qLOD2q0 zJi!D_Nze!3XF~DQ)8n<(%7b>Ip#C6qCPl$69;fOmy^!Dpcv zHd?e=F$^JgIBRmTh0QOk*V4GAVIioV{%Twa=br9A=tmOH1M!D^66X9c=JLi zqdbOSHLcvXB5%J~LFI0!gK%i-hwTgYK)8@M+KgHNtw_ki=K;mfo(OM{8e7>F8J!qO~3&HIMP z>~I3MR)h$8+-eZD8!qaQz`56fkileAe#F8(`zZ#dw(Rha>#TENGJH6Gd|0gDzVN04 zWUcfi-ycRPGO9u*O*WaUwp;$_E~q@n7q>W+<@WaGp_|f%T1Z4OMWQMtY{N6)E>j6Q zP%+*Y+N`x81BQI!t*LzIxqj+diA%! zEp)*71QZ)`Or*li4gwfwk%~pww@FE-QCMa96S>uDK7{JfPg)B2p~}kGg?#y~id}V7RHxBlLDz z`+noeRJ`9C?achwT>rq{TIobOTecVe+f0w`_iTRTEglLGy5HH`Q(_ZU$cIopnJ|93 zzhCIv-^Kd?!m?>OsmM`!Hrd(NLr+1h`PyysJj?HvmGy4oW#;3gG6gG4>fH5nq~ha3 zJrC&k@%ut)4Yx!q`L^ro0@IRAVneLi7wDoab13e2Q*883r50o(7AMlh9;p5N5&PkQ zbF7=|c{07;r_J2PiY|r8kN#aU$JMn_gMjuYLet1b?`h)JmKASd%xjdp5NJh6h>JIr zZi|d5DqXp++i&1j0n^*RWsv&0frP;LuLf|&?(Q=wHvYZrjY^FnB)7JTrL@2n{{^LI zE;@bHfBMumq@{?P5Y;?_=f`mn^_?$sSydL@g#~!3d7ti0*C|H2mYA59jf1cq{ho_aS#z3!X?~X@I}n0y5>% z7SEC$DcNJ;@9yzFQp%^kTn(4}TBY=9tCJTh2h(j_uxoPJe^Lu(ZLz1mJP$T*kGdPN zlkEoZr?r2Mj8kKrmjUvGyO6_;;aWUVnZqs`1zNGOjHeckQ$&W;*k4HuC#wT1NL+;d z56GLt;!?rZ)pq!%-?X4 zRA@adjwFBQ)O*WDMV#9#nqI0|0(4@nNmR8@YHC*iFYY5XK)blZB0hpT4mLB|~k zYe~5IGdVnj<|wsdGo~@LGKSb!rA$5wn2IS}iHpcP#10TBunO}riDU?Yh@n<1@7eD| z|F9^)Td2+701|V8*;j)i1Mz#h9Q8qwF!P8nxJv+N2Mo8S=RR7#hq2C?0Hb;ssM&TY z`i+hP9NTh4)ENOBc9%TBD5R{m;1}=D04Gsq9DieZC5*G?%U8H@{DlBJUT^Gzghgql zoB-W;p;C^n7tMQM%p;as`kDC7Y1l<@q0+nSJMsD;n6NNj!0pAvt9suS-e&TV)uN#0 z^l-MLz&Si=8W}|1vtmfh=Fb2u><4TOgM<9O|9ld^%$w^SQDu7qWoIp-NM!*CQ*=1q z2m(599^>97cewP+LJ+hpwhyDg)erp`DhNd1ya5XKhaeO zavkBGdqR%+CUaTb$}}Jh%#P#ynLyG}C%I*8nZDhQ7zx|MM|JIN_4y=R6kr4;dnaXQ zJAUZ|6?%kKTjefX$+fGHqtq$Q*ioE-nE?``tcuslY84$5!)z$QLnY9xWNp?Kq&jrs zIw|OA!%BOaCEpj%+u+^sWx?mWDl7eN5i!l$>O2U))dOi%u2>4PsK1W-6C z(Ltl8!y`ve;(^18=PE+OO)&Ef^O4;`KUOG!uomP!KYj3_WwL*^ho%;dI$I9nf1wPv zBgT2r(pJ#$%x23%4OlMN^IM@Xjh zQY$Ss)N!+Am^9sAUY=3)qaVlJTM`SQ0;uWcpU@3w2RxI)-onKX=wCeM;zo z>7~U`BWXo$qr$OgWTnTs8cj<$Cu16OjY#t5Z{5L0)>K!Zo_1?dD~} zrrwDbOTrgH1RBIe!wkri5BVE}kXuQpLQC4g?4db17V*-uQ-=*eCEJ zi^2uluuO5l(Q*XxkWTr@H18Q^80oxpjfoW6fFhvUk4l!Vu`+pYV0x1x85Jm4QrwS3 z35dh853qSLQWH-KRb~vLY1X0I{{uwyS!hW0gK~k2C%EU?p>S-N%X;fb8h+hNPtT^U z-20yeaz3|}?~g*5joykf`_j8)#<{>9R1XxUd-R1}PO(B|dgd5k!Cy?%#sCSpEu4dt z1GtXPU6wtsfu&VqA2z8vVlo9q^ zaCBaK6mT}Pw}Ym=_dDh4Tx$Sj?+!XSLbD>((t9qPQq)={CB1+sx6;&bwD56 z^8JxGrLrgG5~s%}g2FQSsrB`-!@xBdj*tadTl*RZxJSG0M>EQC!4j0>0Pl){(o>Z> zBCL0%>8?D=#R4%Mh4+amB*f8oc|eSv&jvCFieO!NF2ZX5OT&n-IR{`o0o6M-68+PF zvZ2E$*!S8-!n}`GCc7L~$TIJVYioPT`kixW$br$RDl?IK044`3%PoD5h~ z+SynK86F87ZN754$n5|i@CQ8P*Zs7ylXPm*^}$OXfp6o+0;qwwnhQ_u)>w|Xmbbg9 zRw$2e(0f3(vh%dcmP>G2@Mn+e*)K|{>(F8?UmTuJu|ONV?_Q3oI^W8R!tquPqw6|X zzdFT;jiBMR9(Uv2xh|tBj&hkfYvpDb0WevX%`;n{b;uDOnFdr@V|N^gRJWdmZz?tV z&AEEEugEheG6ur7fXN8?m`=m&2M?7_6&=Ha{sTy=L4fRZ@5VO6c6#xov&c}1Qxk%8YI=Dkl|eLFbjjcp+;GKPzXI0~zE8X{ zs*Sd1=TbBeb7RuTZiT9TKn-mc(%F~Yi{@*CWuD*)U1rW8SF*tiiArzxsKoOC3eBlH zLMOxnu{$ao&QP7e*_p+%<=~&IznV3sR&;UtNk1O>9Vw1k{SVmrMWuUs*=B3(Q%*>~t3m7!hfYG0%)_n=$NW;R>uuRD&?Z6)sL`9csQ#Zf&2JwMPc1xnG_$W=Nv|!CuE_z zaJ%QU7;b~+rX=#f07*JJ#Jl+AWWT8X0N%=(*PmDDRaz-8(KKt%L}*sZDbfEc(GSNQ z>xNdwefUeaa2@L}3!2}Wk zH54wXm=u4ZtCf2Our=<9TMy_H{9u;|S$-7`aBS|wE)K_y?+0|uF~a}a+Y`!Z<)yK2 zpMEdf#fRb$d%4Vc*9e8f!j7<$@go`-rY8gqzN+rAK3crO>T$OGVkK1Kkcv4EJEY58 zj%TYK=91$_L5_)};SgjtFk%e^A&*t0LYsH8Z0?7`RH*E9>4LM_EZNIf5f!I~l+uOp zNw6Q5R~|Tg7fj{&vK%!))w;jLZ%1Yw7+~~BoVW|*<^{U*Hopt|&0itO#S+kCH!ff| zFT$#)r!}yT(nai)B5vKMnh}uATahqHUD5K*~t20cqUXMw@G!|!v|ME;&qNCpNWnDAL?ult!8&Xozk zVP3?gnp*_9%OuP|wowVUoE-OdFzYu7v;rPNxkvxA-Fqh9M+i7QJWmmE_z3nr=H8gU zOJRhrx1dI-HhQ#fZ&2p-Y1F~#0K;WIkS%C83b#Qzf`*>v7)Bs3X#N0Zhw&CKYOdX* a17PV3jIqMrlx7@Ws{|Q5Tm<}Y^8WxaW6)~= literal 0 HcmV?d00001 diff --git a/modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Kunzite/kunzite_28.jpg b/modules/thirdparty/image/classification/SpinalNet_Gemstones/testImages/Kunzite/kunzite_28.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70149bc7ad37f9632200e28826b1c07b21ac2142 GIT binary patch literal 38587 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 a?C3R}|JP^Wf7V$1pLG`hU%heu{r+DSt=cdE literal 0 HcmV?d00001 -- GitLab