Hongyu Zhou
commited on
Commit
•
604cb3d
1
Parent(s):
faad385
update license
Browse files- LICENSE +41 -24
- README.md +2 -2
- medomni/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/common/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/common/__pycache__/config.cpython-39.pyc +0 -0
- medomni/common/__pycache__/dist_utils.cpython-39.pyc +0 -0
- medomni/common/__pycache__/logger.cpython-39.pyc +0 -0
- medomni/common/__pycache__/registry.cpython-39.pyc +0 -0
- medomni/common/__pycache__/utils.cpython-39.pyc +0 -0
- medomni/datasets/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/datasets/__pycache__/data_utils.cpython-39.pyc +0 -0
- medomni/datasets/builders/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/datasets/builders/__pycache__/base_dataset_builder.cpython-39.pyc +0 -0
- medomni/datasets/builders/__pycache__/image_text_pair_builder.cpython-39.pyc +0 -0
- medomni/datasets/datasets/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/datasets/datasets/__pycache__/base_dataset.cpython-39.pyc +0 -0
- medomni/datasets/datasets/__pycache__/caption_datasets.cpython-39.pyc +0 -0
- medomni/datasets/datasets/__pycache__/cc_sbu_dataset.cpython-39.pyc +0 -0
- medomni/datasets/datasets/__pycache__/laion_dataset.cpython-39.pyc +0 -0
- medomni/datasets/datasets/__pycache__/med_dataset.cpython-39.pyc +0 -0
- medomni/datasets/datasets/__pycache__/medcaption_datasets.cpython-39.pyc +0 -0
- medomni/models/.pyarmor_config +25 -0
- medomni/models/__pycache__/Qformer.cpython-39.pyc +0 -0
- medomni/models/__pycache__/UNet.cpython-39.pyc +0 -0
- medomni/models/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/models/__pycache__/base_model.cpython-39.pyc +0 -0
- medomni/models/__pycache__/blip2.cpython-39.pyc +0 -0
- medomni/models/__pycache__/eva_vit.cpython-39.pyc +0 -0
- medomni/models/__pycache__/medomni.cpython-39.pyc +0 -0
- medomni/models/__pycache__/modeling_llama.cpython-39.pyc +0 -0
- medomni/models/medomni.py +3 -518
- medomni/models/pyarmor_runtime_000000/__init__.py +2 -0
- medomni/models/pyarmor_runtime_000000/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/models/pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- medomni/processors/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/processors/__pycache__/base_processor.cpython-39.pyc +0 -0
- medomni/processors/__pycache__/blip_processors.cpython-39.pyc +0 -0
- medomni/processors/__pycache__/randaugment.cpython-39.pyc +0 -0
- medomni/tasks/__pycache__/__init__.cpython-39.pyc +0 -0
- medomni/tasks/__pycache__/base_task.cpython-39.pyc +0 -0
- medomni/tasks/__pycache__/image_text_pretrain.cpython-39.pyc +0 -0
LICENSE
CHANGED
@@ -1,24 +1,41 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Non-Commercial Research Use Only Software License and Terms of Use
|
2 |
+
|
3 |
+
MedVersa_Inference is a software package that includes original code created by the Harvard researchers listed below (the “Software”), and third-party code that may be obtained by End Users under separate terms of use. The Software is designed to facilitate medical artificial intelligence research. The Software was developed by Hong-Yu Zhou, Julián Nicolás Acosta, and Pranav Rajpurkar at Harvard University. It is distributed for free academic and non-commercial research use by President and Fellows of Harvard College (“Harvard”).
|
4 |
+
|
5 |
+
Using the Software indicates your agreement to be bound by the terms of this Non-Commercial Research Use Only Software License and Terms of Use (“License and Terms of Use”). Absent your agreement to the terms below, you (the “End User”) have no rights to hold or use the Software whatsoever.
|
6 |
+
|
7 |
+
Harvard agrees to grant hereunder a limited non-exclusive license to End User for the use of the Software in the performance of End User’s internal, non-commercial research on the following terms and conditions:
|
8 |
+
|
9 |
+
1. NO REDISTRIBUTION. The Software remains the property of Harvard, and End User shall not publish, distribute, or otherwise transfer or make available the Software to any other party.
|
10 |
+
|
11 |
+
2. NO COMMERCIAL USE. End User shall not use the Software for Commercial use and any such use of the Software is expressly prohibited. “Commercial use” includes, but is not limited to, use of the Software in any manner to generate revenue for the End User, including, without limitation, selling the Software or any improvement, modification or Derivative Work of the Software for a fee or as a service (i.e. Software as a Service), or including the Software or any improvement, modification or Derivative Work of the Software in any product for commercial sale. If End User wishes to use the Software for Commercial use, End User must execute a separate license agreement with Harvard.
|
12 |
+
|
13 |
+
Requests for use of the Software for Commercial use, please contact:
|
14 |
+
|
15 |
+
Office of Technology Development
|
16 |
+
Harvard University
|
17 |
+
Smith Campus Center, Suite 727E
|
18 |
+
1350 Massachusetts Avenue Cambridge, MA 02138 USA Telephone: (617) 495-3067
|
19 |
+
E-mail: otd@harvard.edu
|
20 |
+
|
21 |
+
3. OWNERSHIP AND COPYRIGHT NOTICE. Harvard owns all intellectual property in the Software. End User shall gain no ownership to the Software. End User shall not remove or delete, and shall retain in the Software (including in any modifications to the Software and in any Derivative Works), the copyright, trademark, or other notices pertaining to Software as provided with the Software.
|
22 |
+
|
23 |
+
4. DERIVATIVE WORKS; IMPROVEMENTS; MODIFICATIONS. End User may improve, modify and create and use Derivative Works (as such term is defined under U.S. copyright laws) of the Software; provided however, that the use of any such improvements, modifications or Derivative Works shall be restricted to non-commercial, internal research by End User. End User may not distribute such improvements, modifications or Derivative Works to any third parties or use such improvements, modifications or Derivative Works of the Software for any Commercial use.
|
24 |
+
|
25 |
+
5. FEEDBACK. In order to improve the Software, comments from End Users may be useful. End User agrees to provide Harvard with feedback on the End User’s use of the Software (e.g., any bugs in the Software, the user experience, etc.). Harvard is permitted to use such information provided by End User in making changes and improvements to the Software without compensation or accounting to End User.
|
26 |
+
|
27 |
+
6. NON ASSERT. End User acknowledges that Harvard may develop modifications to the Software that may be based on the feedback provided by End User under Section 5 above. Harvard shall not be restricted in any way by End User regarding its use of such information. End User acknowledges the right of Harvard to prepare, publish, display, reproduce, transmit and or use modifications to the Software that may be substantially similar or functionally equivalent to End User’s modifications and/or improvements if any. In the event that End User obtains patent protection for any modification or improvement to Software, End User agrees not to allege or enjoin infringement of End User’s patent against Harvard, or any of the researchers, medical or research staff, officers, directors and employees of those institutions.
|
28 |
+
|
29 |
+
7. PUBLICATION & ATTRIBUTION. End User has the right to publish, present, or share results from the use of the Software. In accordance with customary academic practice, End User will acknowledge Harvard as the provider of the Software and may cite the relevant reference(s) from the following list of publications:
|
30 |
+
|
31 |
+
Zhou, Hong-Yu, Subathra Adithan, Julián Nicolás Acosta, Eric J. Topol, and Pranav Rajpurkar. "A Generalist Learner for Multifaceted Medical Image Interpretation." arXiv preprint arXiv:2405.07988 (2024).
|
32 |
+
|
33 |
+
8. NO WARRANTIES. THE SOFTWARE IS PROVIDED "AS IS." TO THE FULLEST EXTENT PERMITTED BY LAW, HARVARD HEREBY DISCLAIMS ALL WARRANTIES OF ANY KIND (EXPRESS, IMPLIED OR OTHERWISE) REGARDING THE SOFTWARE, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OWNERSHIP, AND NON-INFRINGEMENT. HARVARD MAKES NO WARRANTY ABOUT THE ACCURACY, RELIABILITY, COMPLETENESS, TIMELINESS, SUFFICIENCY OR QUALITY OF THE SOFTWARE. HARVARD DOES NOT WARRANT THAT THE SOFTWARE WILL OPERATE WITHOUT ERROR OR INTERRUPTION.
|
34 |
+
|
35 |
+
9. LIMITATIONS OF LIABILITY AND REMEDIES. USE OF THE SOFTWARE IS AT END USER’S OWN RISK. IF END USER IS DISSATISFIED WITH THE SOFTWARE, ITS EXCLUSIVE REMEDY IS TO STOP USING IT. IN NO EVENT SHALL HARVARD BE LIABLE TO END USER, IN CONTRACT, TORT OR OTHERWISE, FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR OTHER DAMAGES OF ANY KIND WHATSOEVER ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE, EVEN IF HARVARD IS NEGLIGENT OR OTHERWISE AT FAULT, AND REGARDLESS OF WHETHER HARVARD IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
36 |
+
|
37 |
+
10. INDEMNIFICATION. To the extent permitted by law, End User shall indemnify, defend and hold harmless Harvard, its current and former corporate affiliates, directors, trustees, officers, faculty, medical and professional staff, employees, students and agents and their respective successors, heirs and assigns (the "Indemnitees"), against any liability, damage, loss or expense (including reasonable attorney's fees and expenses of litigation) incurred by or imposed upon the Indemnitees or any one of them in connection with any claims, suits, actions, demands or judgments arising from End User’s breach of this License and Terms of Use or End User’s use of the Software. This indemnification provision shall survive expiration or termination of this License and Terms of Use.
|
38 |
+
|
39 |
+
11. GOVERNING LAW. This License and Terms of Use shall be construed and governed by the laws of the Commonwealth of Massachusetts regardless of otherwise applicable choice of law standards.
|
40 |
+
|
41 |
+
12. NON-USE OF NAME. Nothing in this License and Terms of Use shall be construed as granting End User any rights or licenses to use any trademarks, service marks or logos associated with the Software. End User may not use the terms “Harvard” (or a substantially similar term) in any way that is inconsistent with the permitted uses described herein. End User may not use any name or emblem of Harvard or any of its schools or subdivisions for any purpose, or to falsely suggest any relationship between End User and Harvard, or in any manner that would infringe or violate any of its rights.
|
README.md
CHANGED
@@ -4,7 +4,7 @@ app_file: demo_inter.py
|
|
4 |
sdk: gradio
|
5 |
sdk_version: 4.24.0
|
6 |
---
|
7 |
-
# MedVersa:
|
8 |
The model card for our paper [A Generalist Learner for Multifaceted Medical Image Interpretation
|
9 |
](https://arxiv.org/abs/2405.07988).
|
10 |
|
@@ -76,4 +76,4 @@ For more details and examples, please refer to `inference.py`.
|
|
76 |
`CUDA_VISIBLE_DEVICES=0 python demo.py --cfg-path medversa.yaml`
|
77 |
|
78 |
## Prompts
|
79 |
-
More prompts can be found in `medomni/datasets/prompts.json`.
|
|
|
4 |
sdk: gradio
|
5 |
sdk_version: 4.24.0
|
6 |
---
|
7 |
+
# MedVersa: A Generalist Learner for Multifaceted Medical Image Interpretation
|
8 |
The model card for our paper [A Generalist Learner for Multifaceted Medical Image Interpretation
|
9 |
](https://arxiv.org/abs/2405.07988).
|
10 |
|
|
|
76 |
`CUDA_VISIBLE_DEVICES=0 python demo.py --cfg-path medversa.yaml`
|
77 |
|
78 |
## Prompts
|
79 |
+
More prompts can be found in `medomni/datasets/prompts.json`.
|
medomni/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/medomni/__pycache__/__init__.cpython-39.pyc and b/medomni/__pycache__/__init__.cpython-39.pyc differ
|
|
medomni/common/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/medomni/common/__pycache__/__init__.cpython-39.pyc and b/medomni/common/__pycache__/__init__.cpython-39.pyc differ
|
|
medomni/common/__pycache__/config.cpython-39.pyc
CHANGED
Binary files a/medomni/common/__pycache__/config.cpython-39.pyc and b/medomni/common/__pycache__/config.cpython-39.pyc differ
|
|
medomni/common/__pycache__/dist_utils.cpython-39.pyc
CHANGED
Binary files a/medomni/common/__pycache__/dist_utils.cpython-39.pyc and b/medomni/common/__pycache__/dist_utils.cpython-39.pyc differ
|
|
medomni/common/__pycache__/logger.cpython-39.pyc
CHANGED
Binary files a/medomni/common/__pycache__/logger.cpython-39.pyc and b/medomni/common/__pycache__/logger.cpython-39.pyc differ
|
|
medomni/common/__pycache__/registry.cpython-39.pyc
CHANGED
Binary files a/medomni/common/__pycache__/registry.cpython-39.pyc and b/medomni/common/__pycache__/registry.cpython-39.pyc differ
|
|
medomni/common/__pycache__/utils.cpython-39.pyc
CHANGED
Binary files a/medomni/common/__pycache__/utils.cpython-39.pyc and b/medomni/common/__pycache__/utils.cpython-39.pyc differ
|
|
medomni/datasets/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/__pycache__/__init__.cpython-39.pyc and b/medomni/datasets/__pycache__/__init__.cpython-39.pyc differ
|
|
medomni/datasets/__pycache__/data_utils.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/__pycache__/data_utils.cpython-39.pyc and b/medomni/datasets/__pycache__/data_utils.cpython-39.pyc differ
|
|
medomni/datasets/builders/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/builders/__pycache__/__init__.cpython-39.pyc and b/medomni/datasets/builders/__pycache__/__init__.cpython-39.pyc differ
|
|
medomni/datasets/builders/__pycache__/base_dataset_builder.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/builders/__pycache__/base_dataset_builder.cpython-39.pyc and b/medomni/datasets/builders/__pycache__/base_dataset_builder.cpython-39.pyc differ
|
|
medomni/datasets/builders/__pycache__/image_text_pair_builder.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/builders/__pycache__/image_text_pair_builder.cpython-39.pyc and b/medomni/datasets/builders/__pycache__/image_text_pair_builder.cpython-39.pyc differ
|
|
medomni/datasets/datasets/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/datasets/__pycache__/__init__.cpython-39.pyc and b/medomni/datasets/datasets/__pycache__/__init__.cpython-39.pyc differ
|
|
medomni/datasets/datasets/__pycache__/base_dataset.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/datasets/__pycache__/base_dataset.cpython-39.pyc and b/medomni/datasets/datasets/__pycache__/base_dataset.cpython-39.pyc differ
|
|
medomni/datasets/datasets/__pycache__/caption_datasets.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/datasets/__pycache__/caption_datasets.cpython-39.pyc and b/medomni/datasets/datasets/__pycache__/caption_datasets.cpython-39.pyc differ
|
|
medomni/datasets/datasets/__pycache__/cc_sbu_dataset.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/datasets/__pycache__/cc_sbu_dataset.cpython-39.pyc and b/medomni/datasets/datasets/__pycache__/cc_sbu_dataset.cpython-39.pyc differ
|
|
medomni/datasets/datasets/__pycache__/laion_dataset.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/datasets/__pycache__/laion_dataset.cpython-39.pyc and b/medomni/datasets/datasets/__pycache__/laion_dataset.cpython-39.pyc differ
|
|
medomni/datasets/datasets/__pycache__/med_dataset.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/datasets/__pycache__/med_dataset.cpython-39.pyc and b/medomni/datasets/datasets/__pycache__/med_dataset.cpython-39.pyc differ
|
|
medomni/datasets/datasets/__pycache__/medcaption_datasets.cpython-39.pyc
CHANGED
Binary files a/medomni/datasets/datasets/__pycache__/medcaption_datasets.cpython-39.pyc and b/medomni/datasets/datasets/__pycache__/medcaption_datasets.cpython-39.pyc differ
|
|
medomni/models/.pyarmor_config
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "models",
|
3 |
+
"title": "models",
|
4 |
+
"src": ".",
|
5 |
+
"entry": null,
|
6 |
+
"version": "2.1",
|
7 |
+
"is_package": null,
|
8 |
+
"manifest": "global-include *.py",
|
9 |
+
"output": "dist",
|
10 |
+
"runtime_path": null,
|
11 |
+
"restrict_mode": 1,
|
12 |
+
"obf_code": 1,
|
13 |
+
"obf_mod": 2,
|
14 |
+
"wrap_mode": 1,
|
15 |
+
"advanced_mode": 0,
|
16 |
+
"bootstrap_code": 1,
|
17 |
+
"cross_protection": 1,
|
18 |
+
"mixins": null,
|
19 |
+
"plugins": null,
|
20 |
+
"platform": null,
|
21 |
+
"package_runtime": 1,
|
22 |
+
"enable_suffix": 0,
|
23 |
+
"license_file": null,
|
24 |
+
"build_time": 0.0
|
25 |
+
}
|
medomni/models/__pycache__/Qformer.cpython-39.pyc
CHANGED
Binary files a/medomni/models/__pycache__/Qformer.cpython-39.pyc and b/medomni/models/__pycache__/Qformer.cpython-39.pyc differ
|
|
medomni/models/__pycache__/UNet.cpython-39.pyc
CHANGED
Binary files a/medomni/models/__pycache__/UNet.cpython-39.pyc and b/medomni/models/__pycache__/UNet.cpython-39.pyc differ
|
|
medomni/models/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/medomni/models/__pycache__/__init__.cpython-39.pyc and b/medomni/models/__pycache__/__init__.cpython-39.pyc differ
|
|
medomni/models/__pycache__/base_model.cpython-39.pyc
CHANGED
Binary files a/medomni/models/__pycache__/base_model.cpython-39.pyc and b/medomni/models/__pycache__/base_model.cpython-39.pyc differ
|
|
medomni/models/__pycache__/blip2.cpython-39.pyc
CHANGED
Binary files a/medomni/models/__pycache__/blip2.cpython-39.pyc and b/medomni/models/__pycache__/blip2.cpython-39.pyc differ
|
|
medomni/models/__pycache__/eva_vit.cpython-39.pyc
CHANGED
Binary files a/medomni/models/__pycache__/eva_vit.cpython-39.pyc and b/medomni/models/__pycache__/eva_vit.cpython-39.pyc differ
|
|
medomni/models/__pycache__/medomni.cpython-39.pyc
CHANGED
Binary files a/medomni/models/__pycache__/medomni.cpython-39.pyc and b/medomni/models/__pycache__/medomni.cpython-39.pyc differ
|
|
medomni/models/__pycache__/modeling_llama.cpython-39.pyc
CHANGED
Binary files a/medomni/models/__pycache__/modeling_llama.cpython-39.pyc and b/medomni/models/__pycache__/modeling_llama.cpython-39.pyc differ
|
|
medomni/models/medomni.py
CHANGED
@@ -1,518 +1,3 @@
|
|
1 |
-
|
2 |
-
import
|
3 |
-
|
4 |
-
import torch
|
5 |
-
from torch.cuda.amp import autocast as autocast
|
6 |
-
from torchvision import models
|
7 |
-
import torch.nn as nn
|
8 |
-
|
9 |
-
from medomni.common.registry import registry
|
10 |
-
from medomni.models.blip2 import Blip2Base, disabled_train
|
11 |
-
from medomni.models.modeling_llama import LlamaForCausalLM
|
12 |
-
from transformers import LlamaTokenizer
|
13 |
-
from transformers import SwinModel
|
14 |
-
import torch.nn.functional as F
|
15 |
-
import math
|
16 |
-
from einops import rearrange, repeat
|
17 |
-
from einops_exts import rearrange_many
|
18 |
-
import open_clip
|
19 |
-
import segmentation_models_pytorch as smp
|
20 |
-
from medomni.models.UNet import UNet3d
|
21 |
-
from huggingface_hub import PyTorchModelHubMixin
|
22 |
-
import ipdb
|
23 |
-
from peft import (
|
24 |
-
get_peft_model,
|
25 |
-
LoraConfig,
|
26 |
-
PrefixTuningConfig,
|
27 |
-
PromptEncoderConfig,
|
28 |
-
PromptTuningConfig,
|
29 |
-
TaskType,
|
30 |
-
)
|
31 |
-
|
32 |
-
class GroupNorm(nn.GroupNorm):
|
33 |
-
"""Subclass torch's LayerNorm to handle fp16."""
|
34 |
-
|
35 |
-
def forward(self, x: torch.Tensor):
|
36 |
-
orig_type = x.dtype
|
37 |
-
ret = super().forward(x.type(torch.float32))
|
38 |
-
return ret.type(orig_type)
|
39 |
-
|
40 |
-
class LayerNorm(nn.LayerNorm):
|
41 |
-
"""Subclass torch's LayerNorm to handle fp16."""
|
42 |
-
|
43 |
-
def forward(self, x: torch.Tensor):
|
44 |
-
orig_type = x.dtype
|
45 |
-
ret = super().forward(x.type(torch.float32))
|
46 |
-
return ret.type(orig_type)
|
47 |
-
|
48 |
-
def replace_batchnorm_2d(model):
|
49 |
-
for name, module in reversed(model._modules.items()):
|
50 |
-
if len(list(module.children())) > 0:
|
51 |
-
model._modules[name] = replace_batchnorm_2d(module)
|
52 |
-
|
53 |
-
if isinstance(module, nn.BatchNorm2d):
|
54 |
-
model._modules[name] = GroupNorm(num_groups=16, num_channels=module.num_features)
|
55 |
-
return model
|
56 |
-
|
57 |
-
def dice_loss(input, target):
|
58 |
-
input = torch.sigmoid(input)
|
59 |
-
smooth = 1.0
|
60 |
-
iflat = input.view(-1)
|
61 |
-
tflat = target.view(-1)
|
62 |
-
intersection = (iflat * tflat).sum()
|
63 |
-
return ((2.0 * intersection + smooth) / (iflat.sum() + tflat.sum() + smooth))
|
64 |
-
|
65 |
-
class FocalLoss(nn.Module):
|
66 |
-
def __init__(self, gamma):
|
67 |
-
super().__init__()
|
68 |
-
self.gamma = gamma
|
69 |
-
|
70 |
-
def forward(self, input, target):
|
71 |
-
if not (target.size() == input.size()):
|
72 |
-
raise ValueError("Target size ({}) must be the same as input size ({})"
|
73 |
-
.format(target.size(), input.size()))
|
74 |
-
max_val = (-input).clamp(min=0)
|
75 |
-
loss = input - input * target + max_val + \
|
76 |
-
((-max_val).exp() + (-input - max_val).exp()).log()
|
77 |
-
invprobs = F.logsigmoid(-input * (target * 2.0 - 1.0))
|
78 |
-
loss = (invprobs * self.gamma).exp() * loss
|
79 |
-
return loss.mean()
|
80 |
-
|
81 |
-
class MixedLoss(nn.Module):
|
82 |
-
def __init__(self, alpha, gamma):
|
83 |
-
super().__init__()
|
84 |
-
self.alpha = alpha
|
85 |
-
self.focal = FocalLoss(gamma)
|
86 |
-
|
87 |
-
def forward(self, input, target):
|
88 |
-
loss = self.alpha*self.focal(input, target) - torch.log(dice_loss(input, target))
|
89 |
-
return loss.mean()
|
90 |
-
|
91 |
-
def trans_seg(sample_num, bsz):
|
92 |
-
labels = torch.zeros((bsz, 10))
|
93 |
-
c_bsz = 0
|
94 |
-
for num1 in sample_num:
|
95 |
-
num2 = num1.split('-')
|
96 |
-
for num3 in num2:
|
97 |
-
if num3 != 'n/a':
|
98 |
-
c4 = 0
|
99 |
-
for num in num3.split(','):
|
100 |
-
labels[c_bsz, c4] = float(num)
|
101 |
-
c4 += 1
|
102 |
-
c_bsz += 1
|
103 |
-
return labels
|
104 |
-
|
105 |
-
def trans_det(sample_num, bsz):
|
106 |
-
labels = torch.zeros((bsz, 4))
|
107 |
-
c_bsz = 0
|
108 |
-
for num1 in sample_num:
|
109 |
-
num2 = num1.split(';')
|
110 |
-
for num3 in num2:
|
111 |
-
if num3 != 'n/a':
|
112 |
-
c4 = 0
|
113 |
-
for num in num3.split(','):
|
114 |
-
labels[c_bsz, c4] = float(num)
|
115 |
-
c4 += 1
|
116 |
-
c_bsz += 1
|
117 |
-
return labels
|
118 |
-
|
119 |
-
def trans_keypoint(sample_num, bsz):
|
120 |
-
labels = torch.zeros((bsz, 2))
|
121 |
-
c_bsz = 0
|
122 |
-
for num1 in sample_num:
|
123 |
-
num2 = num1.split(';')
|
124 |
-
for num3 in num2:
|
125 |
-
if num3 != 'n/a':
|
126 |
-
c4 = 0
|
127 |
-
for num in num3.split(','):
|
128 |
-
labels[c_bsz, c4] = float(num)
|
129 |
-
c4 += 1
|
130 |
-
c_bsz += 1
|
131 |
-
return labels
|
132 |
-
|
133 |
-
@registry.register_model("medomni")
|
134 |
-
class MedOmni(Blip2Base, PyTorchModelHubMixin):
|
135 |
-
PRETRAINED_MODEL_CONFIG_DICT = {
|
136 |
-
"medomni": "configs/models/medomni.yaml",
|
137 |
-
}
|
138 |
-
def __init__(
|
139 |
-
self,
|
140 |
-
config,
|
141 |
-
):
|
142 |
-
super().__init__()
|
143 |
-
freeze_vit=True
|
144 |
-
llama_model=config['llama_model']
|
145 |
-
max_txt_len=config['max_txt_len']
|
146 |
-
low_resource=False # use 8 bit and put vit in cpu / have not been tested
|
147 |
-
end_sym=config['end_sym']
|
148 |
-
# self.tokenizer = self.init_tokenizer()
|
149 |
-
self.low_resource = low_resource
|
150 |
-
|
151 |
-
print('Loading VIT')
|
152 |
-
self.visual_encoder_2d = SwinModel.from_pretrained('microsoft/swin-base-patch4-window7-224')
|
153 |
-
self.visual_encoder_3d = UNet3d(in_channels=1, n_classes=1, n_channels=32)
|
154 |
-
self.ln_vision_2d = LayerNorm(1024)
|
155 |
-
self.ln_vision_3d = LayerNorm(256)
|
156 |
-
|
157 |
-
if freeze_vit:
|
158 |
-
for name, param in self.visual_encoder_2d.named_parameters():
|
159 |
-
param.requires_grad = False
|
160 |
-
self.visual_encoder_2d = self.visual_encoder_2d.eval()
|
161 |
-
self.visual_encoder_2d.train = disabled_train
|
162 |
-
for name, param in self.ln_vision_2d.named_parameters():
|
163 |
-
param.requires_grad = False
|
164 |
-
self.ln_vision_2d = self.ln_vision_2d.eval()
|
165 |
-
self.ln_vision_2d.train = disabled_train
|
166 |
-
for name, param in self.visual_encoder_3d.named_parameters():
|
167 |
-
param.requires_grad = False
|
168 |
-
self.visual_encoder_3d = self.visual_encoder_3d.eval()
|
169 |
-
self.visual_encoder_3d.train = disabled_train
|
170 |
-
for name, param in self.ln_vision_3d.named_parameters():
|
171 |
-
param.requires_grad = False
|
172 |
-
self.ln_vision_3d = self.ln_vision_3d.eval()
|
173 |
-
self.ln_vision_3d.train = disabled_train
|
174 |
-
logging.info("freeze vision encoder")
|
175 |
-
print('Loading VIT Done')
|
176 |
-
|
177 |
-
print('Loading LLAMA')
|
178 |
-
self.llama_tokenizer = LlamaTokenizer.from_pretrained(llama_model, legacy=False, use_fast=False)
|
179 |
-
special_token = {}
|
180 |
-
special_token["additional_special_tokens"] = ['<ImageHere>']
|
181 |
-
self.llama_tokenizer.add_special_tokens(
|
182 |
-
special_token
|
183 |
-
)
|
184 |
-
self.llama_tokenizer.add_tokens("<DET>")
|
185 |
-
self.llama_tokenizer.add_tokens("<2DSEG>")
|
186 |
-
self.llama_tokenizer.add_tokens("<3DSEG>")
|
187 |
-
# self.llama_tokenizer.add_tokens("<2DPOINT>")
|
188 |
-
self.llama_tokenizer.add_tokens("<N/A>")
|
189 |
-
|
190 |
-
### transformers == 4.28
|
191 |
-
self.det_token_idx = self.llama_tokenizer("<DET>", add_special_tokens=False).input_ids[0]
|
192 |
-
self.seg_token_idx_2d = self.llama_tokenizer("<2DSEG>", add_special_tokens=False).input_ids[0]
|
193 |
-
self.seg_token_idx_3d = self.llama_tokenizer("<3DSEG>", add_special_tokens=False).input_ids[0]
|
194 |
-
self.na_token_idx = self.llama_tokenizer("<N/A>", add_special_tokens=False).input_ids[0]
|
195 |
-
self.llama_tokenizer.pad_token = 0
|
196 |
-
|
197 |
-
### transformers == 4.41 (not recommended)
|
198 |
-
# self.det_token_idx = 32001
|
199 |
-
# self.seg_token_idx_2d = 32002
|
200 |
-
# self.seg_token_idx_3d = 32003
|
201 |
-
# self.na_token_idx = 32004
|
202 |
-
# self.llama_tokenizer.pad_token_id = 29900
|
203 |
-
|
204 |
-
if self.low_resource:
|
205 |
-
self.llama_model = LlamaForCausalLM.from_pretrained(
|
206 |
-
llama_model,
|
207 |
-
torch_dtype=torch.bfloat16,
|
208 |
-
load_in_8bit=True,
|
209 |
-
device_map="auto"
|
210 |
-
)
|
211 |
-
else:
|
212 |
-
self.llama_model = LlamaForCausalLM.from_pretrained(
|
213 |
-
llama_model,
|
214 |
-
torch_dtype=torch.bfloat16,
|
215 |
-
)
|
216 |
-
|
217 |
-
self.llama_model.resize_token_embeddings(len(self.llama_tokenizer))
|
218 |
-
self.embed_tokens = self.llama_model.get_input_embeddings()
|
219 |
-
self.embed_states = self.llama_model.get_output_embeddings() # cannot remove
|
220 |
-
# ---LoRA---
|
221 |
-
class CastOutputToFloat(nn.Sequential):
|
222 |
-
def forward(self, x): return super().forward(x).to(torch.bfloat16)
|
223 |
-
self.llama_model.lm_head = CastOutputToFloat(self.llama_model.lm_head)
|
224 |
-
# ---LoRA---
|
225 |
-
|
226 |
-
print("Setup PEFT")
|
227 |
-
peft_config = LoraConfig(
|
228 |
-
task_type="CAUSAL_LM", inference_mode=False,
|
229 |
-
r=16,
|
230 |
-
lora_alpha=16, lora_dropout=0.1,
|
231 |
-
target_modules=['q_proj', 'v_proj']
|
232 |
-
) # 8 32 hyz 9.21
|
233 |
-
self.llama_model = get_peft_model(self.llama_model, peft_config)
|
234 |
-
self.llama_proj_2d = nn.Linear(1024, self.llama_model.config.hidden_size)
|
235 |
-
self.llama_proj_3d = nn.Linear(256, self.llama_model.config.hidden_size)
|
236 |
-
|
237 |
-
# # Detection
|
238 |
-
text_det = nn.Sequential(
|
239 |
-
LayerNorm(self.llama_model.config.hidden_size),
|
240 |
-
nn.Linear(self.llama_model.config.hidden_size, 256),
|
241 |
-
nn.ReLU(inplace=True),
|
242 |
-
LayerNorm(256),
|
243 |
-
nn.Linear(256, 4),
|
244 |
-
)
|
245 |
-
self.text_det = text_det
|
246 |
-
self.det_loss = torch.nn.SmoothL1Loss()
|
247 |
-
|
248 |
-
# # Keypoint
|
249 |
-
# text_point = nn.Sequential(
|
250 |
-
# LayerNorm(self.llama_model.config.hidden_size),
|
251 |
-
# nn.Linear(self.llama_model.config.hidden_size, 256),
|
252 |
-
# nn.ReLU(inplace=True),
|
253 |
-
# LayerNorm(256),
|
254 |
-
# nn.Linear(256, 2),
|
255 |
-
# )
|
256 |
-
# self.text_point = text_point
|
257 |
-
# self.keypoint_loss = torch.nn.SmoothL1Loss()
|
258 |
-
|
259 |
-
# Segmentation
|
260 |
-
self.model_seg_2d = smp.Unet(encoder_name="resnet18", encoder_weights="imagenet", in_channels=3, classes=1)
|
261 |
-
self.model_seg_2d = replace_batchnorm_2d(self.model_seg_2d) # GN is much better than BN
|
262 |
-
|
263 |
-
text2seg_2d = nn.Sequential(
|
264 |
-
LayerNorm(self.llama_model.config.hidden_size),
|
265 |
-
nn.Linear(self.llama_model.config.hidden_size, 512),
|
266 |
-
)
|
267 |
-
self.text2seg_2d = text2seg_2d
|
268 |
-
self.text2seg_2d_ln = LayerNorm(512)
|
269 |
-
self.text2seg_2d_gn = GroupNorm(16, 512)
|
270 |
-
text2seg_3d = nn.Sequential(
|
271 |
-
LayerNorm(self.llama_model.config.hidden_size),
|
272 |
-
nn.Linear(self.llama_model.config.hidden_size, 256),
|
273 |
-
)
|
274 |
-
self.text2seg_3d = text2seg_3d
|
275 |
-
self.text2seg_3d_ln = LayerNorm(256)
|
276 |
-
self.text2seg_3d_gn = GroupNorm(16, 256)
|
277 |
-
self.seg_loss = MixedLoss(10.0, 2.0)
|
278 |
-
|
279 |
-
self.max_txt_len = max_txt_len
|
280 |
-
self.end_sym = end_sym
|
281 |
-
self.prompt_list = []
|
282 |
-
|
283 |
-
def vit_to_cpu(self):
|
284 |
-
self.ln_vision.to("cpu")
|
285 |
-
self.ln_vision.float()
|
286 |
-
self.visual_encoder.to("cpu")
|
287 |
-
self.visual_encoder.float()
|
288 |
-
|
289 |
-
def encode_img(self, image, modals, task_types=[]):
|
290 |
-
B,S,_,_,_ = image.shape
|
291 |
-
device = image.device
|
292 |
-
image_embeds_list = None
|
293 |
-
if self.low_resource:
|
294 |
-
self.vit_to_cpu()
|
295 |
-
image = image.to("cpu")
|
296 |
-
with self.maybe_autocast(device):
|
297 |
-
if 'ct' in modals:
|
298 |
-
image_embeds_list = self.visual_encoder_3d(image, encoder_only=True)
|
299 |
-
image_embeds_list = [_.to(device) for _ in image_embeds_list]
|
300 |
-
image_embeds = image_embeds_list[-1].detach()
|
301 |
-
image_embeds = F.adaptive_avg_pool3d(image_embeds, (1, 3, 3)).view(B, image_embeds.shape[1], -1).permute(0, 2, 1)
|
302 |
-
inputs_llama = self.llama_proj_3d(self.ln_vision_3d(image_embeds))
|
303 |
-
inputs_llama = rearrange(inputs_llama, "(b s) c d -> b s c d", b=B, s=S).to(torch.bfloat16)
|
304 |
-
atts_llama = torch.ones(inputs_llama.size()[:-2], dtype=torch.long).to(image.device)
|
305 |
-
else:
|
306 |
-
image = rearrange(image, "b s c h w -> (b s) c h w")
|
307 |
-
image_embeds = self.visual_encoder_2d(image)['last_hidden_state'].to(device)
|
308 |
-
image_embeds_unp = image_embeds.permute(0, 2, 1).view(B*S,-1,7,7)
|
309 |
-
image_embeds_unp = F.adaptive_avg_pool2d(image_embeds_unp, (3, 3))
|
310 |
-
image_embeds = image_embeds_unp.view(B*S, -1, 9).permute(0, 2, 1)
|
311 |
-
inputs_llama = self.llama_proj_2d(self.ln_vision_2d(image_embeds))
|
312 |
-
if 'segmentation' not in task_types:
|
313 |
-
inputs_llama = rearrange(inputs_llama, "(b s) c d -> b s c d", b=B, s=S).to(torch.bfloat16)
|
314 |
-
atts_llama = torch.ones(inputs_llama.size()[:-2], dtype=torch.long).to(image.device)
|
315 |
-
else:
|
316 |
-
inputs_llama = rearrange(inputs_llama, "(b s) c d -> b s c d", b=B, s=S).to(torch.bfloat16).detach() # add detach() for segmentation tasks
|
317 |
-
atts_llama = torch.ones(inputs_llama.size()[:-2], dtype=torch.long).to(image.device).detach()
|
318 |
-
|
319 |
-
return inputs_llama, atts_llama, image_embeds_list
|
320 |
-
|
321 |
-
def prompt_concat(self, img_embeds, atts_img, prompt):
|
322 |
-
if prompt:
|
323 |
-
batch_size = img_embeds.shape[0]
|
324 |
-
p_after_embeds = self.embed_tokens(prompt.input_ids).expand(batch_size, -1, -1)
|
325 |
-
wrapped_img_embeds = torch.cat([img_embeds, p_after_embeds], dim=1)
|
326 |
-
wrapped_atts_img = atts_img[:, :1].expand(-1, wrapped_img_embeds.shape[1])
|
327 |
-
return wrapped_img_embeds, wrapped_atts_img
|
328 |
-
else:
|
329 |
-
return img_embeds, atts_img
|
330 |
-
|
331 |
-
def prompt_wrap(self, img_embeds, atts_img, prompt_list, num_imgs, seg=None):
|
332 |
-
bsz = img_embeds.shape[0]
|
333 |
-
if prompt_list:
|
334 |
-
img_idx = ([], [])
|
335 |
-
for i in range(len(num_imgs)):
|
336 |
-
for j in range(num_imgs[i]):
|
337 |
-
img_idx[0].append(i)
|
338 |
-
img_idx[1].append(j)
|
339 |
-
prompt_tokens = self.llama_tokenizer(prompt_list, return_tensors="pt", padding="longest", truncation=True, max_length=256).to(img_embeds.device)
|
340 |
-
idx = (prompt_tokens.input_ids == 32000).nonzero(as_tuple=True)
|
341 |
-
prompt_tokens.input_ids[idx] = 123 # avoid memory issue
|
342 |
-
p_embeds = self.embed_tokens(prompt_tokens.input_ids).expand(bsz, -1, -1)
|
343 |
-
if seg is None:
|
344 |
-
p_embeds[idx] = rearrange(img_embeds[img_idx], "b c d -> (b c) d").to(torch.bfloat16)
|
345 |
-
else:
|
346 |
-
p_embeds[idx] = rearrange(img_embeds[img_idx], "b c d -> (b c) d").to(torch.bfloat16).detach()
|
347 |
-
return p_embeds, atts_img
|
348 |
-
else:
|
349 |
-
return img_embeds, atts_img
|
350 |
-
|
351 |
-
def forward(self, samples):
|
352 |
-
image = samples["image"]
|
353 |
-
bsz = image.shape[0]
|
354 |
-
img_embeds, atts_img, img_embeds_list = self.encode_img(image, samples['modal'], samples['task_type'])
|
355 |
-
prefix_list = []
|
356 |
-
tag_list = [[] for _ in range(bsz)]
|
357 |
-
placeholder = ['<ImageHere>'] * 9 # 9 = the number of visual tokens
|
358 |
-
for j in range(bsz):
|
359 |
-
num = samples['num_imgs'][j]
|
360 |
-
prefix = '' # Can add some prompt, such as 'You will be given an image, please describe everything you see'
|
361 |
-
for i in range(num):
|
362 |
-
prefix += '<img' + str(i) + '>' + ''.join(x for x in placeholder) + '</img' + str(i) + '>'
|
363 |
-
tag_list[j].append('<img' + str(i) + '>')
|
364 |
-
prefix_list.append('###Human:' + prefix)
|
365 |
-
img_embeds, atts_img = self.prompt_wrap(img_embeds, atts_img, prefix_list, samples['num_imgs'], seg = None if 'segmentation' not in samples['task_type'] else 'yes')
|
366 |
-
self.llama_tokenizer.padding_side = "right"
|
367 |
-
|
368 |
-
prompt = [t for t in samples['question']]
|
369 |
-
for i in range(len(prompt)):
|
370 |
-
tags = ''
|
371 |
-
for tag in tag_list[i]:
|
372 |
-
if tag not in prompt[i]:
|
373 |
-
tags += tag
|
374 |
-
prompt[i] = prompt[i].replace('_*_', tags)
|
375 |
-
|
376 |
-
if 'detection' in samples['task_type'] or 'keypoint' in samples['task_type']:
|
377 |
-
sample_ans = [ans.split('|||')[0] for ans in samples['answer']]
|
378 |
-
sample_num = [ans.split('|||')[1] for ans in samples['answer']]
|
379 |
-
else:
|
380 |
-
sample_ans = samples['answer']
|
381 |
-
text = ['###Assistant: ' + str(t) + self.end_sym for t in sample_ans]
|
382 |
-
|
383 |
-
prompt_tokens = self.llama_tokenizer(
|
384 |
-
prompt,
|
385 |
-
return_tensors="pt",
|
386 |
-
padding='longest',
|
387 |
-
truncation=True,
|
388 |
-
max_length=256,
|
389 |
-
add_special_tokens=False
|
390 |
-
).to(image.device)
|
391 |
-
|
392 |
-
img_embeds, atts_img = self.prompt_concat(img_embeds, atts_img, prompt_tokens)
|
393 |
-
|
394 |
-
to_regress_tokens = self.llama_tokenizer(
|
395 |
-
text,
|
396 |
-
return_tensors="pt",
|
397 |
-
padding="longest",
|
398 |
-
truncation=True,
|
399 |
-
max_length=self.max_txt_len,
|
400 |
-
add_special_tokens=False
|
401 |
-
).to(image.device)
|
402 |
-
|
403 |
-
targets = to_regress_tokens.input_ids.masked_fill(
|
404 |
-
to_regress_tokens.input_ids == self.llama_tokenizer.pad_token_id, -100
|
405 |
-
)
|
406 |
-
|
407 |
-
empty_targets = (
|
408 |
-
torch.ones([atts_img.shape[0], atts_img.shape[1]+1],
|
409 |
-
dtype=torch.long).to(image.device).fill_(-100) # plus one for bos
|
410 |
-
)
|
411 |
-
targets = torch.cat([empty_targets, targets], dim=1)
|
412 |
-
|
413 |
-
batch_size = img_embeds.shape[0]
|
414 |
-
bos = torch.ones([batch_size, 1],
|
415 |
-
dtype=to_regress_tokens.input_ids.dtype,
|
416 |
-
device=to_regress_tokens.input_ids.device) * self.llama_tokenizer.bos_token_id
|
417 |
-
|
418 |
-
bos_embeds = self.embed_tokens(bos)
|
419 |
-
atts_bos = atts_img[:, :1]
|
420 |
-
|
421 |
-
to_regress_embeds = self.embed_tokens(to_regress_tokens.input_ids)
|
422 |
-
inputs_embeds = torch.cat([bos_embeds, img_embeds, to_regress_embeds], dim=1)
|
423 |
-
attention_mask = torch.cat([atts_bos, atts_img, to_regress_tokens.attention_mask], dim=1)
|
424 |
-
with self.maybe_autocast(image.device):
|
425 |
-
outputs = self.llama_model(
|
426 |
-
inputs_embeds=inputs_embeds,
|
427 |
-
attention_mask=attention_mask,
|
428 |
-
return_dict=True,
|
429 |
-
labels=targets,
|
430 |
-
output_hidden_states=True,
|
431 |
-
)
|
432 |
-
loss = outputs.loss
|
433 |
-
|
434 |
-
if 'detection' in samples['task_type']:
|
435 |
-
with self.maybe_autocast(image.device):
|
436 |
-
hidden_states = outputs.hidden_states[-1]
|
437 |
-
token_mask = targets == self.det_token_idx
|
438 |
-
target_states = hidden_states[token_mask]
|
439 |
-
with self.maybe_autocast():
|
440 |
-
det_states = self.text_det(target_states)
|
441 |
-
labels = trans_det(sample_num, det_states.shape[0])
|
442 |
-
labels = labels.to(targets.device)
|
443 |
-
det_loss = self.det_loss(det_states, labels)
|
444 |
-
loss += det_loss * 1e2
|
445 |
-
|
446 |
-
if 'keypoint' in samples['task_type']:
|
447 |
-
with self.maybe_autocast(image.device):
|
448 |
-
hidden_states = outputs.hidden_states[-1]
|
449 |
-
token_mask = targets == self.point_token_idx_2d
|
450 |
-
target_states = hidden_states[token_mask]
|
451 |
-
with self.maybe_autocast():
|
452 |
-
point_states = self.text_point(target_states)
|
453 |
-
labels = trans_keypoint(sample_num, point_states.shape[0])
|
454 |
-
labels = labels.to(targets.device)
|
455 |
-
keypoint_loss = self.keypoint_loss(point_states, labels)
|
456 |
-
loss += keypoint_loss * 1e2
|
457 |
-
|
458 |
-
if 'segmentation' in samples['task_type']:
|
459 |
-
if 'ct' in samples['modal']:
|
460 |
-
masks = samples['answer_img']
|
461 |
-
with self.maybe_autocast(image.device):
|
462 |
-
img_embeds_list = self.visual_encoder_3d(image, encoder_only=True)
|
463 |
-
img_embeds_list = [_.to(targets.device) for _ in img_embeds_list]
|
464 |
-
hidden_states = outputs.hidden_states[-1]
|
465 |
-
token_mask = targets == self.seg_token_idx_3d
|
466 |
-
target_states = hidden_states[token_mask]
|
467 |
-
seg_states = self.text2seg_3d(target_states)
|
468 |
-
last_feats = img_embeds_list[-1]
|
469 |
-
last_feats = last_feats + seg_states.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1)
|
470 |
-
last_feats = self.text2seg_3d_gn(last_feats)
|
471 |
-
img_embeds_list[-1] = last_feats
|
472 |
-
seg_preds = self.visual_encoder_3d(encoder_only=False, x_=img_embeds_list)
|
473 |
-
loss += self.seg_loss(seg_preds, masks.float()) # +
|
474 |
-
else:
|
475 |
-
masks = samples['answer_img']
|
476 |
-
with self.maybe_autocast(image.device):
|
477 |
-
feats = self.model_seg_2d.encoder(image[:,0])
|
478 |
-
last_feats = feats[-1]
|
479 |
-
hidden_states = outputs.hidden_states[-1]
|
480 |
-
token_mask = targets == self.seg_token_idx_2d
|
481 |
-
target_states = hidden_states[token_mask]
|
482 |
-
seg_states = self.text2seg_2d(target_states)
|
483 |
-
last_feats = last_feats+seg_states.unsqueeze(-1).unsqueeze(-1)
|
484 |
-
last_feats = self.text2seg_2d_gn(last_feats)
|
485 |
-
feats[-1] = last_feats
|
486 |
-
seg_feats = self.model_seg_2d.decoder(*feats)
|
487 |
-
seg_preds = self.model_seg_2d.segmentation_head(seg_feats)
|
488 |
-
loss += self.seg_loss(seg_preds, masks.float())
|
489 |
-
|
490 |
-
return {"loss": loss, "modal": samples['modal'][0], "task_type": samples['task_type'][0]}
|
491 |
-
|
492 |
-
@classmethod
|
493 |
-
def from_config(cls, cfg, finetune=False):
|
494 |
-
model = cls(cfg)
|
495 |
-
|
496 |
-
# load checkpoint
|
497 |
-
ckpt_path = cfg.get("ckpt", "")
|
498 |
-
if ckpt_path:
|
499 |
-
print("Load Checkpoint: {}".format(ckpt_path))
|
500 |
-
ckpt = torch.load(ckpt_path, map_location="cpu")
|
501 |
-
if finetune:
|
502 |
-
current_model_dict = model.state_dict()
|
503 |
-
weights = ckpt['model']
|
504 |
-
new_state_dict = {}
|
505 |
-
for k in list(current_model_dict.keys()):
|
506 |
-
if k in list(weights.keys()):
|
507 |
-
if weights[k].size() == current_model_dict[k].size():
|
508 |
-
new_state_dict[k] = weights[k]
|
509 |
-
else:
|
510 |
-
new_state_dict[k] = current_model_dict[k]
|
511 |
-
else:
|
512 |
-
print(k)
|
513 |
-
new_state_dict[k] = current_model_dict[k]
|
514 |
-
msg = model.load_state_dict(new_state_dict, strict=False)
|
515 |
-
else:
|
516 |
-
msg = model.load_state_dict(ckpt['model'], strict=False)
|
517 |
-
|
518 |
-
return model
|
|
|
1 |
+
# Pyarmor 9.0.3 (trial), 000000, non-profits, 2024-10-28T10:25:17.968530
|
2 |
+
from .pyarmor_runtime_000000 import __pyarmor__
|
3 |
+
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xb1T\x00\x00\x12\t\x04\x00\xbe\xe1\xbaxzwT\x97ix\xf0Y[)K\xa3\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xc5\x9d\xf1z\xce\x98\xd6{\xc40V(i\xee\x0c\x97dK\xc3/Ct\xa8\x98\x19\x84\x08\x1fR\\\xdf\xef\xdb{\xf2 \xdd\xb6\rz_\x0ed\xed\xe7\x06\x16`\x12up\xdci\x87\xa7\x00\x04\n\xec\xde\x00\x1d\x7f\xe7\xc4v76\xfa\x11\xc2\xd3"\xad}\x06\xf6VF\x8aPf_y\xc8\xd8\xfa\x13\xef\x1bf4\x91\x1c\xc5|\xce\x08R\xf2\xaa\xbf\\\x16>F\xbf\xd5\x85\xf1:\xa6\xbb\x079\t\xe9\x7f\r!\xcc\xbf=\xbf0\x03E\xab\xc6R%\xdc\xf1\xf1\x83\xa7\xacIT\xe6\x1d\xa68\xdc\xf8\xb9\xd3B\x07\xeb\xc6\x0e\xb1\xc3yuR\x83E/4\xd4%\xca\'\xd9Lk\xffW\xd1\xf0Y\xae\x80<P\xda:P\x85-?\xbc\x99\xdb\xe4&\x8f\xeay\xfa\x0e+\xdf%r`\x98m\x12\x06y[om\xdc"\xf351\xa9e\x8aw\xed(8@M-\xe1\x0b\xa1D\x16\x9e\xe7\xd6\x9e\xf7(\xa4\x99\xb9\x1d\xc0\xdc\xeb\x80\x11m2\xd5X"\x8a\xb2v+\x9f\'\xd2\xff[*61\'\xde\x99\xd4\xcf\xed\x084\xed\xfb\xe0\x86\xae\x8b\x82+I>)\x97\xc0\xe4\xd1\x18$_\x1c\xb1\x0e\xa6\xac\x14\xda\x1b1\xe2\x13\xe4\x7f\x99\xfav\'\xfd8X1\xf7\x81[@\xf2Z7x\x91\xf2}\xc1\x8d\x06j\x8e\x88\xa5\xfd2\xa7\x9a\x93\x028\xbc\xc63_\x91#\xa1\x1c3\xbe9\xc3\xde Y\xed\x938\x82\xb2\x0eZ\x1e@h\xb4O\xa0W`\xbb\xb6\xf4\x89\xf1\xff\xc8\xbbd\x16\xf9,\x1d{\xda\x80\\m\xad\xccN\x94Y\xa2\xf1\xfc\xca5\xae\x0f\x12\xff\x9dxdk\xb3\xcc\xa5\x81\xe9F\xf4\xd8\nD\x82o\x16O\xb9M\x92\xc5\x0f|2>R\xd1\xcf^\xc9\xd4\x96cGcc\xd3\x816\x11\xd8\xbb\xc9\xd1Um\xb0\xe8-\r\n\xd7\xb8\x08\xbb\xed%\x16\xda\xff3:\x96\xc1\xcbb\xf8$\xb5V\xe9vh\xaf\xbf\x8c#+\x7f 3\xad\xd5\xce\xe2S\x8ec\xd6Ct\xa5x\xd6\xdeq\x00\x019\x9e\x85K\x93\xaf\xeb\xc0\xf8\x8dX\xa8\x1ad\xee\'X\xe4Q\x92\xd9]S\x128\x00\xd7\xf8[D_\x00\x02\xb9\xc3\x99\x10\x84\x8e\xc6\xf5\x9c\x127^\xe5:n"\xd1\x1fs*o\x94l\xff\xdc\xdaMq\xd6\xac\xb8q\xa9+\x17\xbf@\x01\xea\x04)\xcd%\x81vT\x9bc)\x8e\xdb@ \x95j\xde\x0eXy\x1aH\x8f\xfc\xa6\xf49\xc1m{\x9d\xc6^\x94\xfb\xa6\xd9\xae\xdbv\x08\x07\xbc\x90\xed\x98\xf9\xa6\x9e\x1b\xa9E\x84h\xe8\xd1\x95\xd0S\x9a%\xb6k\xdbmW\x1f\x8a6\xb9\xa2k\xaa\xfc\xc0~\xaa\xf0\x8by\x96\x85\x1fF\x82\xf0h\xfc\x00\x80\xb3K\x81T\x7fNB\x14\x8ej\xe0\xf4s\xaa\r\x8e\x1b\xee\x17\x13\xfd2\x8cx #\x15>\xed\xdf\x8c\xed\x12\xea_\xc1\xe3\xf4\xb4_\x84u\x01\xfd\xc1\xbeOm7Z\xa1g\x1f\xde\x86\xd9\xd6\xd1\x8c\x89\xae\xe2\xff\'\xa9\x11\x0f\xe0\xd6\xd9\xe0\xa3@{\xdb\xd8k(\xe9\x85\x9d\xb2\xd3ki\xe7\xe5\x1c\xa81S\x99\xc9\x90\xf6o&M\xc5\xbd\xfd\xe0\xdeM.?+7\xd1"w\xedR\x01\xde\x9fg}zZ\xf0$\xb4\xcf\x92\x18\x97l\x8c\x18\xb8r\x1c\xdd\xbdt%\x91:\x1a\xcbFwJ\xf8\xe3<\x95\xd1\xaen\x02k\xc2>\x94\x7f\x1d\xb8s\x8eH\xf7\x9a&\x19\x0eq\xe1\x96\xcd\xed*WN\x9b\x93w\xa2\xecu\xd0:\xed\xa4\x90\x14%\xb3\x86cX\xf0\n\xa9v#54\xf5\xe6\x83\r\xd0\xd6\x9dd@\x9e\xedLH\x19\xeaJ4w\xb0z\xdb\xcb \x8d\xb2\xca\xcc\xc0\xa8$c\x05\xdf\xbe\x8b\x1aYo\x10\x86?\x01\x06\x08^)\xe6\x03\xfd\xb1\x93\xec\xd6\xb2\xb0.\x11\x9d\xd7H\x00d{\x16\xea\xa4T\x93\xcb\x8eR\xa9\x1b\xb8\x81\xce\xdaG\xae\x08\xcd\xcdFZ\x99\xc5\x7fVI%\xca\xbb\x97m\xce\xfeJ[\xdfL\x80\xcdi\x88\xa0\xb2\x8a\x06Wj\x0b\xf1O\xbd\xac\xe5\xec"\x10\x0f\xafl\xc3\xfa\x82\x85\x83\xc7-\xe9We\xa9T\xf1\xbf\xd7_w*\xd4?0[Vv`6C\x14\xc5\xa5\x93\x05+T\xe9\xa2\xbb\xfcf6Y\x8d\xff\xec\x1az\'\x98\xeb\xb4pl\xc8\tn.\x04\xe5[\x8e\xfb\xaaLXM\x93Jw\xa3 \x9f\xaf\xa0\x07z\xab\x8c\xa4+R\xeeb,\xab\xaa\x8e\xe7\xd2l\xdd\xaa\xc3\xa0\xf3\xb2\x17\x01A\x02}\x809\x01\x1b\x86\xbe\xc0<\xe8\x88\xca\x1a\x95\xbfL\x9c,nO\xa8#\xa0El@J\xec\x19+\xbf)\xb4\x89\xbb\xa7\x91\xd7\xd3$P\xcc{\x97K]\x0e0\xe9\xd1\x9b+\x93\xc3\xc5\xa8\xa3~\xbdSIIv`\xb6\x0e\x14d\xeb\xfc\xbf\xb7z\x97\xa2\x1f\x08\xb6\xc9\x8fT\x9c\xeb\xc5\xda\x88\xab\x959\x0c\x1c\x9ey=\xcf\xb7\xc7m"w\xd9j\xd4TW\xcfv\xa0\xbf\x9d\xdb\xda\xf4f\xe1\x18*\xa6\x8c\x17Ov\x19\xda\x01\xaf\xec\x0c\xf8a\xeab\x8c\x01c_\x9d\xb5\x02\xb2\x0f\x91\xa5\xe6R\x1eQ\xe71eY\xc3z\xe2\x02\x10B(\x166n\xcd\xdb\xd8\x852s\xe5\x1e\x1e\xb1\x9bm\xf2y\x8bw\\\x04\xc1\x08<\xef\xe06k\x8e\xb7\xafJ\xa27<4\xa9\x03\xf3\xaeS,\x93.\x0c;\x07\xd2@\x9f\xa2\xa98\x87]\x1b\xbc\xc4\xf4\xe3\x8e\xff2\x8a98\xcaa\x1a\x00]\xa6\xd4\xc4\xc1\t\x07A\xa4\xa1\xae\n\xb9\xeal\x8c-\xa4e\xcc\xf1\xf1\xb9\x03\xf6g\xfc^Q\xd3O\xd4\xf7\xb9\xac9\xdc\xaatkv\xb9j\xae\x99\xce<r\xb1/\xcc\xe7\x85I.S*\x10YbYK\xa4\x97\xb21G\x13i\xf8\xba\xe7w\xea\xaf<Xw\x02\nTHQ\x87C\xe6I\xf6\xcb\xef\x8b\xf7\xd4`\xfa\xda\x90M\x0e\x97\x15U_?N\x8d\xe6/\xb2\xbe\xa0y:x\xf1\xdb1\xd8JR\xf9\x8dz[\xb8r\xc6\xa1\x82r\xddS\xfdZ\xf5\x04\xe8\x00|\x1c\xce\x10\xec\r6\xfc\xf5\xc7+\x06\xbc\xdb\xd20\x10t\x96C\x12\x87S\xe6\xfc\xda?\xa6\x0f\xb9\x02}\x7f\xfb\x90\x05\x10\x9d\xda\x7f{\xb0n\xff\xa0\xf5\xf2\xbf#\x98\xbc\xb5\xcd ~\xd5\x93f\x9f\x15\n_.\x03\x88\xee\x05\xadN2[\xa8\xd4\x88*\x937\xe8\xd7\x83i(\xb0T\xba\x15\x95\x1a\xbd\x95\'fj\x9d\x02\xc7Z\xe9\xd1t\x8d\x8d\xed(\x9cMX\xd0\x8e\x10\x8d@\xf1\xb9-\x84\xa3\x9b\x80!\xa5h\xfc\xf7m\xbc\xf9\'=\xf8k\x96<\x1d\xbd9\xc9;\xad\xf4.1j\xa2s\xf2\xe0\xb0\xcd|\x84\x04P\xa0~U-\xa1\xa5\xe7c(7q :!\x89\x18\xa8Q\x15kD\xc9X\x14d\x88\x1c\xd9\x8a\xda\xeb^\xea\xbc\x81\x06S\\\xefZ\xcf\xcfa\xaa\xb6\xc2\xdd\x8c\x80\xd7\xeess\n\x15\xd7\x1ax\xef\x0ek\x95\x02jM\xb3\x7f\x0eC#8\xc5\x96-L\xb9\xf2\xe5z\xa7\xa75\x01\xfd\xc8\xaaU\x81\xcb\x1bPp\xaf\xaf\x17\xd1\xf6\x8aq\xd2eY\xa0dI\xf8qC\xcd\x19\xb5\r\xd6.\xc8\xdf4\x0e\xf1\t.\x0fG<\x93yFw<\xdc\xf4?\x98\x97\xf3\x83{\x0e\xda\xa2\xbd\x84\xab\xc64\x83=IX\xdd+\x91"t\xf7!\xd7\xfa\xcdR\xff\xcb\xed\x08\x19\x87fT\xce\x0f\xe4\n\x8a,\x16u\xda n\x07\x8e\xc9^\xac\x82\xab\xfc\x85"z\xdb\x83\xf6\x9c\x91\x9f\xaf\xe5\xee\x94\'5[\x7f)\xb9x\x12\xa8\xfd\x83\xd0\x1b\x9cL\xbe\x19/\x92\rUD\x88\xcfh\x19\x88vF\xf95\x95\r\xab\xe0}]\xfa\\\x06\x98:g\xa1\x1c\xf43\xfeh^M\xf8$9nY\x88\xc3)\xe1\xe5o\xba!\xba*\xb1\xb91Y\rCO\x83\x13\xa3\x8c\xbe\xa7O\xf3\x04\'L\xc1\xdb\xdd\xa0\xdeK\xe2nh\xee\xbb\xd6\xfb\x0b\x11H\xb2g\xc5\x07*\xb1\xcdxK\x93\xde\xf8\xf0\xe0\xde\xe4\x14\xab\xd6t\n\xa8\xb1\x9c\xf79K\x1a\xe1\x81\x890y\x7f\x1b\x80\xf1\x8dtyz\x88\xe1\x1a\x1b;\x04aVX\x16<c\x8c\x07\xda`\xf62\xb8\x13\x82\x05\x8f\xae\xd2\xf3\x82\x8bh\x95\xc3l6\xe06\x1dO\xd9(\xb0\xb2Hz*\xb7A\t\xc6qCw\x8f\x01$\xc7\x16Nk\xc5\x1b\xdc\x14\xfa\x97\x0bz\x1c\xb7A:%S^\x08d\xc0\xa7\xdf\xd0F\xcf\xa0r\xce"\x86!%\xcf\xd0\xaacAX\xa4K\xb4\x1b\xb3\x9e\xd2\xed\x10\xd1OWX\xc4\x9e\x8bv\x82\\\x98\xe9x\xc96+f\xb8\xedX\xef_\x14\xf1W\xbb\xa9\xd9\x8e\x00z\x8f\x01O\xb4\xfe\x1dd>y@\xe3\x00\xe02]>\x96\xdan\x179\xa9\x14)\x87g\x15\xe1\xf7\x97\xec15\xa2\xf0\x02\xd1s\xf3\x19\xac\x9f\xae\xfb\x18g1\xab21\x1dJ\x94\x92\xfd!\xae\xbfKB\x8fe\x1a\x14z \xd6\xa5\x18\xc6 \xd6\xa3\xaf\xd36\x04F\x82\xe4\xbe\nx\xb8Wd\xd3\xc1\xd3L\xc2\x06\x01@N\xff?\x81Ja$}8Mu}\x82F\x98\x87\x90\xb3L\x9e\x95x2\xfa\xc0D\xaf\x0c\x8b\x12\xa1^\x9e\x02`sC\x01\xb8+\xa7\x8d\xe6\x87n>c\xe4\xe6$-g\x92\xb3\xc3\xca\xfe\xc7\xbe\xdaU|\xfegJM@\xa9e\xa4\xfb\x05\x82\x0eA\xef\x91\xcc\xe6\x8bH\xa6\x89+?\xff\x94/\xab\x94\xf0\xad\x8c+\xd0S\xf8\rz\xc6\xea\xec\xd5:/\r\x94&\xfc\xb0\xdf\xa5\x7f>55\xc5T\np\x9e\xa5\x1f>L\xf4\x19UR9\x17`\x94h$\x8a9\x80\xfa\x84\x89r#^\x96n\xb6T\xc5\xa1\x85\xc2\xdb\xb2r\x9c\x17f\xfdyF\xf3\xe6\xc1\x82{\xfd\x81\xa3e\x8c\xb8\xf9H\xbc\xe5\xd1\xae.\x05t2x6\x9a\xe6\xa7\xc6\xc0\xbb{Uf^v\xb0%\xb6\xe4l,\xa3\xbd\xc7{\xe0\x1f"E\x91+\x12\xbe\xd0h\t\xa7\xdcj\xb5\x89\x83\xa2\xab\xb9\xa0\xe62\x922\xc7V\xb7\xc0\xc1I\xb1\x8d\xefqK\x01\xf4,\xf3\xff\xe5rs>\xcb\x16\xe60\xe25\xd2\x8e\xc2\xb1"-\xb1\x1d\xffp\xf4S\xe9y\x91\xa7\x0c\xbc\x93\x07\x8e}\x13`\x02\xd7+\xab\xd8\x03(%\xba>$\xb7#@=\x84\xb0\xbe&7\xa5w\x1a\xbc.d\xff0<?\xd1\xbfzr\xde\xe3\x89\x14L\xe8\x01\xaf\xe1\xc2\xd5M\xbd\xc2-*"5k\x9d\x1bI\xdc%\x01\x9708,\xbe\xb1R\xf7a{\x15\x95}\x063k\xe0\x96;\xa5\xaf2;\xa9\xf0\x0c\xcf\x93\x92\xed\xa3\x1d\xde\xbf\x12\xdd=\x82\x1bp\xb3\xc8\xcff\xc4\xa2]T<4\xc2\x17\xedc>g\xea\x14\xcbP\xf7}\xdb\x99\xf7"7=\x06\xb4\xbb,\xe1\x0c\x0eH\xc6\x85\x8dj#\x01^\x10m\xdd\xe36\xcd\xdf?8\x8c\xa9\xfaB\x90=\xb0\x85\x1e\xb9ib\xbc+\xcf\xb4\xfe\xcd\xc2j\x99\x99c\xde\x81z!\xcdl\xf4\x02\xc2\x90\xc7\xc1\xa5~r\xf8L\xe6\xb14\xb8n\xd4\xf9\xe6k\xcd\xcb\xd9\xe2Z\xd3=O\x86g\x89\xcc\xd4.={\t\x9dX6\xb3\xce\xd5\xab\xbb\x177eO2#| \xc38\xc7v\xd7\x13\x94hyQ64\x9c\x1e\\\x872\xaaC\xde\xff@`\x9d\xfb]\x1e\x1a\xe9\xac\xbe\rNl\x83\xc0\x02\x96\xd6\x01\xb7}~-f\x11Y\xd3\\\x00\xcfr\x03\xdd\x8c(\xc6\xd6E\xc13\xcdt\x8eK ;\xe4\x8e\x10O\xf4\xaec\r\xab\x07\x1dv\x882 SC,\x9a{\xb3\x9a\xc1e\x14#P\x93\xe2>\xf4\xbc\xae)\xaa\xedt\xb6\x07`\xea\x13^\x02-\x16\xf0Q\xce\x8a\x83\x0e\xf9Dwd4\x0e\xc6\xf4\xa4\x8ey|9\xd5\x98\xca\x02\xad\xf32{\xc4\x18&\xb6i\xab\xe9\x91\xfc\xc6\x8fW\x80\xb6\x9c\xe8\xdct\xfe\xfbK\xe4s\x1663\xd1!\xaa\x7f\xc8\x1cm\x86\x1c\xa9\xa9\xcd \xfd\x1a\x120\xd39\xe1\xca\x14\xb9\x82]g\xe0i\xe5\x85\xa0\xabg\xd6\x1b\xf3\xe1\x90\xe0\xc6\xa1N\xdc\xdc\xc2\x86\xaf\xff`\x0c\xff\x95MW\xe1\x10\xca\x8e\xa9\x94\x05S\xcf\x15\xef\xb4\xc8#"\xc4\x1f\xc7\xaf\xe5bc\x9e\xfa\x07 \xc4\n\x19s\x04\x9c\x18Rg\x16\xc1j\x84\x8b\x15\xc4\x8e\xe3\xedLMW\xad\xda.\x98\xcaY\xa6u\xfbrc-\xb9Zy\xfd\x00\xf1\x80Y\x850d\xed_\xca\x97\x16C\t\xd4j\x1e\xdb\x0b\xb3\x89\x1e{\xbaCV\x86\x1e\\p\x17\xc2VGY\xd7\x91P\xb3*\xee\t\xd0\xd1\xf6\xbd+\xe1\xc8V\xea\x80\x98\x85\xe9\x19\x97\x08/\x16\x8dJ\xaf\xba\xd7w\x04\xebhJD\x8d= \xc3.a"\xa8*\xf2\x8a\xa2q\x975\xfc\xc8b+\xf8S\x88\n4,\x07rC\xf0\xd3\xff\xa3\xe7\x1a\x05\'>_\\xk\xd6\x1c\xe1\x8a\xbfL\x18\xc7\xc3a\\+\xd0F\x978\xd4\x1eo\xfbK\xa28\xdf\x03\xb8\xf2\x1b\x9c\x9cXb\x0f\xcb\xf2\xbf\n\x94\xee\xaa\xb9\xc3Ro\xf0\xbd\x01\xe2C!\x91\xb4:\xf0\xab*\x08f\x9fd:\xae24\x17\xdcW\xb2\xfd\x90\xed\x0b\xa1\xfags\x10\xd5\xdd\x0c1)\xf4G\xedU\x93L9|\x1eq\xcc\x98\xe2z\xe2\x94\xc4\xfc\xc1\xd7QI\x08f\x84U\xe0\x8d?\x82\xf0\xabD\xeb\xcf,~\x9d!G\xe5O\x8f\x86\x85\xb9\x1a\xe2\xd8\xbc`\xb6\xa9\xbc\xa5s\x18\x94\xec\x89%h\x1a.\xce\xff?W76\xbe< oV\x01\xda\xe4t\xeeCDh\xad\x1c=$\\\xe7\xeaf\xd4\xe8\xfd\xd1\x95\xb4TY\x8ef\xa7\x1f\xc8\xea\xeaH\xb2Pu\x19O\x7f\x893\x98$\xd8\xfb\x0e\xba>`\x06K}b\x82j\x1b\x93\xfc\xday\xd0\t!\xd9/Q\xd9\x89&3\x85.f\x9d\x80<\x88#\xa5\x02\x93{\xe3-\x87#l\xc5\x88D\xd0b\x07\x1exV\x8d\xfd\x8dJK\xdd\x1f\x91D\x99\xc9\xc2\x85\xf6D\xadu\xe0;,\xa3[\xc5A\x16u:\xb73,\x06\x17B\xae#:\x07\xf9\xe5\xa2\xb0l\x87\x97\x07\xb0t\\\x1aW\x16/\xfa\x07M\x1a^\xe9U\xc8\xa1h\xe6\xc9\xbfL\x82\x84\xdc\xe7\xea\xd7\x99\x15\x06\x9e\xd3j\x8c\x8f\x08\xc9Ob[\xa7\x9cQ;{\xe9\x8e\xcb\x9eW\xa9\xa6BE\xd6\xf66c\x96\xb3\x86\x0fF\xb6\xf2\x97\x80\x93U\xcf\xd2\xeb\xf3\x8e\x14k\xba\xa5\xa5\x1e\x05\xee\x8a\x94\xc5\xd9\x87bc\xae\x1a\xb4\xc9~\xdfF\xabF\x817\x02e\xd6\xad\x85,A\xf7\xd0s\x99\xa3\xe7\x84\xf5\xd6\x8d\xc0M\xb6n$(\xae\xeb\xa5\xe80\x94\xe1)\x89\xa7\xdb\xb2\xb9Z\x9f\x9a\x0b\xe8c\xa2\x18C\xa8\xe8\x99\x1c\x9e\xdcgN\x92\xaa\x04\xd2g~\xf2b\xd8C\xf3\x17\xe3\x99:\xd4\x95S\xfdz\x17`\xa1K/\xad\xbd\x10k\x8c\xf0D)\x8a\x8cA\xa6p!\xb6\xa9\x94\xd4B-\xec\xc4\x85\xa4\xeb\xff\xc2\xd5\x93\x9f\xef\x03\xd8\x8b\x14\xab\x06\xaf\xbc3Y\x142\xed\xb3P\x83>\xf1e\xa5\n}\x12\xed\xb1\xf8 \x96\xdbF\xfe\xffE\xd4\xd0\xaaK\xb1\xfe\x81z"\xf2!\x89\xb3l\n\x85w\xfe\xfe\xd7\xc0Qe\x0b\x8d\xfd\xc5\x81]8O\xe1\x10\x0f\xfa\xfe\xaa2p\xa9cz\x11\xf2\xf7\x89:\xb8"}\x8d\xdc\x8e\xaa-\xecY\xb4Q\x14\xc1\xae&d\xd2\xb8\x7f\xc8\xc3E\x1e\xad}\xf7\xe9\xfb\xc4\x08,\x89\xa5A\xe3u)\xf6\xab\xd7|\xcdnmzul\xc9:\x8dN\xfdk\x8c\x04%\xf2\xa4\x088\x87\x10>D\xc6\x93\x94r\xbbF[|\x16\xfcsZbn%\xfeN\x88\xd5\x91\xb70\xd6\x19\x85\x8c\x94=\x8e\xef(FU\x93\x8f\xaf`M\xa9\xb3z\x0c\xf7\xd5\xc1\x04\xec5\xa6\xc5\xae\xab\xb7\'vj}\xa1\x04\xabwp\xd2\x1cC\x03\t\x88\x8c\xf8\x0f\x89\x00\xb5/\xa9\xa6\xb8\xfbE\x08\xfb\xb7\xba\xde\x1f\xf3\x91&\xb3\x1c\xceP\xb1\xacB~q\xf5$\x98\xb7a\x10W\xf0\xec\xa2\x96;>\x13o\xaeG\xd6\xda\x96\xaa\xa6\x7f\xc0\xb843\xc8\xf4r\n\x19\xbe\xdfn\xfdgN\x84\xfa\xb5\x8f\xc9R\n\x0e<7^\xb5\x86\xea\xda\tl+_e\xb7IE@4m\x13\x9b%\x7f\xae-\xba%~$\xa1\x1b\xcc\xea\x0el\x92\x828\x9a\x13\x9a\t(\xa5\xacFog!r\xcd\xa9\x03\'\xab\xd3\xdeF\xe3&\x03\xe7Cn\xbba\x9a\x86\xce\xf2\x01\x11\x7f\x02d\xa2\xf8\xe8h\xf0\xe9\xf2Hn"i\x90\xa7\xb9\x16\xd7\xd7\xc5GZ\xb3x\x17\xc1\x90=D\xbb\x86k\xdc\x13`Y\xe3t+e\xd9_\' \x02\xac\x7f\xca~=\x0f\x07\xf9l\xb2\xcc\xd2\'\x8c^\xdd\xa4c\xb4\xd19\x87\xb4\xc9\x1d}rg\x11\x88\x00\xed\x0c\xd0]\xb3\xe3\xd0\xb6\xedv\xc6 \xcc${\xab\xb2K\x0bC\xcbq\x9ey\xa3\x07\\\x16<\x08\x00w\x0crS\xceS\xc4CE\xc4\xc1hUg2\xe5\x11\xaa\xc63\xf4XXC\xb6\xa3\x88\xb0OY\xd1\xfe\xa4;\xcd|;\xa3RW\x05M*#G\x82]2\x98\xcb\xff\xc8\xfa\x7f\x82\xa6S\xcd\xb6zS\xd2\x1f\xcd\x95Fj\xd8\xa6U\xb6\xd51\xc5\x18\x94\x81\x050a\xa67\xec\xd1\x00\xa4\x88\xeb5\x17\xb4\xd7\x84\xf6\xcc\xe9\x89s<0Bfn\xb4\x18\xf0d394\'\xfaI\x7f\\M\xd1\x82\xb1*\xa8\x94r\xe4\x8e\xc2;\xb2\xdasw\x85\x86v\x14\xf6\xe1\xc2\x8a\x93\x1c\xac\xfe?*#\x9d}\xfc\xc5H\xa1\xdb\xa8\xf3\x11u+V\x04\x9b\x9eg\xe4Rc\xbc&\x94\xf3\xc8\xe8\xc4\x92\xcbj\xcf\xf5 \xae\xa0\xa4\xa2\x10\x16\xa9\xa3\xdb\xf0G1\xa7Y\xb3\xd0\xab\xcb\xed\n\x83\x16-\x7f!\xb0\xb7\\\x85\xe4h@\nG)g\xec\x14\xf8\x00\xf5\xb3]r\xe4z\xc5\xc6\x86l\xab \xc9\xee\xb1%\x8fY`\x90\xca\x83\x13\x8e\x97\x85g\x8b\xfb\x08[\x8e\xab\x87[m\x9bVb-\xee\xe0\x89\x96s}A\xaf\r\x96\xeb\xa7\x9b\xf2\x82"oR\x91E\xf5\xb0MQ\xc3\x94:\x86Qd\x80\xe4\x11\xb07\x1f\xf8ph\x87*EH\xb7\xc6\x964\xde\xb4\x8a\x01\x88!\xb40)(\xa4\x9d\xf4\xe7f\xd1\x8d\xb3\'\xa0S~\x9f\x9d\x96U\xb9\xfb\xd4\x03_c\xde\xc88-*\xad\x0b\xe3\t!\x83\x8a\x88\xb2\xbd\xf7\xfd\xb9\xb6\xb60\x9ae\xe4C\xeb\xc9\xa1}\xac\x87\x9f\x1e\x8c\xcb\x87\xb5\x98\x19b\xf79\x9f\xa2 \xa2<S\x96\xf3\xd0\xfe@\xdc \xba\xbe(\x00^\xc3\xb6m\xb3\x11\xcd\xcf\rz\xd6\xf3\xa8\xfe\xa5!FFf\xfbk,\x8f\x8b\x07\x7f\x1e\xac\x18\xeeA\xca\xc6\xe4q\n]OH\xe6\xd2\xea\xdf\x9aV\x1f\xdc5XJ\xd35\x82]\x80\x89q<f\xa0^\xa7\xae\x03O\xe5\x08O\xd4\xac\xfdT\xd5\x03\xb0\x11\xbe^5\xb0\xc3\xe9\x11\xfa\x87\xe5\xaf\x0eC\xb7aF\xee\xbb~\r`\x89\x06E\xe2\x9c\x1b\x14\xba2\x16\x1fS\xab\xc0Oj\xdd-\r\xe8\xe6\xdb\x10\x95)I\x85\x8cn=\xe5\xe9\xb3qX\xbd\xee\x86\x17/\x0e\xc2\x9d\xda2^?\xd2c\xbd\xbc\xc5\xf0\xd6R\xa6r\xf6\x96\x80\x0cA\xc5.\xdf\xd6h!Z\x0e\xa4T\xb3~\x9f\xeaoZ\xd1\xfc\x818`\x98\xc3\x13\x99\x8a\xa1\xb8|\xda\x0c\xdc9\xda-9\x15d\xf1>\'\xbb\x0e\xa6\xfa\xf9g{T[(\xd8 \x9eK\x83\x15Tjq\x855}!R\x13\xd2N>\xc3\'\xe9`\xd4=\x8f{\xdb\xa1\x93]\xb2Br\xacc\xf2\xe2\x1d}\x96K\x8e\x8fv\x16\x1a\xa7d\x80\xe9w"\x05\x12j\xd0\n%I\xeb\xbe1\xa3!\x08\x0eNb\xec\xff\x14\xd7~\xdc\xdco\x17\x10?\xbc\xa0\xbdu\x11\x9dX\x0b\xc1\xb3\x01 \xd1\x9fC\x13\xde\xc4f\xfc\xa8G_\x8b\xb2\x0f\x17\x8f\xedBa\x16\xe6q\x96w\x18\xc7\xb0\xc8\xd6x\xdb$y+\xd0Z\xa5\xeb\xb5s-\xee\xf0dxj\x9e\x9bV\xef\'4\x90@\xf8\x10;\x8by\tc\xa9_\xe7E\x1b\x8c\xb80\xbdKD\xaa}\xb6;V\xf7\xc9\x04cb"l.\xa2\xa1\x91>\xb6\x17\xe1N\xeb(\n\x9b\xf3\xf9L\xa1\x86\xd3\xd6<\'~=\xe3Wh\x99\xd8.\x00\xed\xa7\x1e\x10F\xdf\xaf(\xaf\xba1\xb1\xbc\x9f\x89\x1a\xc8(\x89\x93T\x8b\x17\xecwR\xda\xec\xc1\xa8GAt&\x0fZ,\xd3\x1d\x86p{\xcd\xe8\xe2\x90\xb7\xe6\x8c\xe6\xe3\n\xc4!\xcf\xe5\xe3\x8b\x8c\xa7\xa2\xa8\xa6A\xe6W\x8e\x19U\xc1\x9a\xf9D\xd6\xe4\xad\xba\xcc\xa0R)\xdd\xc1\x9du\xafek\xe0+\xbb\x18?6\x1f\xf5\xaaiZ\xb3^\xbbb=\x05\x8b\xee\xe4hY\xd5jTMS9\x97\xfd\x9c\xd2)\x05\x1c\xb7\x10\x12\x9eg\xad\xaeq\xb2\x11d\\mS\xf1\x8e\xf8]\xc7M\x8dO\xe3o\xfb\xab\xbf\xe5\xa7\xe6\\\x07\xe8\x1d\xaf\x1c\xcf\x9a^\xdf\x83\x95\x18\xbe\x0e\x10\x9f\xa9\xedxO\xa8Z\xec`\xf5\x00C&g\x00l\x9e\x7f\xe0\x14\xe1\x88\xeelncY\x1c\x0e<;\xcd\xe81\xc9.\x85\x8d\x04q\xac`\xa4\xd4\xcc\xee\x94\xa5\xa3\xa4!\xff\x8d\xcb\x95\xd2\xd7Q%L\xe4\x17\x1a\xabw\xb0\x03\xc2koP\x91\xd8\xc3\x12\xe6\xf4\x0f\xbf\xf8g!\xde\xa5\x17w\xbc\x89\x0ek\x9a\x1b3\x1b\xa5\x80\xc1Bl9,\xfaq\x04\xbd\xee\x9e\xe3\xea\xb5\xe0\xa5\x99$\xdb\xe8\x8d\x18\xa9\x17\n\xd8x\xcf\x98\x8a#\xb2t\xf0e"\x9e~\xbeo,\x86\x80`t\xb7\x1d\x19\x93\x11d\x01\xad"(\xc5\xb3\xd7\x81\xb6~Bo\xceA\x90\xa8@\xa5j\x8aB0h\xd7\xfc\xa2\x8d\rt\x04\xb9\x98*q\xa4\xe8,b\x15Y\xba]\xb6\x8bX\xb9\xd0E\xa8\xd5a\xdbk~p\x8f;\xd7\xd1\xcd\xeb\xb3\xfd\xc6d\x9a\xddz\x80;\xe8\\\x0b\xb1\xb3xe\x87\xf6m\xffND\xd8\xa0z\xa2\x7f}\x81\x8e\xe9\x89\xacR\x8eB%\x9eY\x8c@\xb3\xd3j\x8c\x8f\xe8\x9b\xdd\xa6\xde\xe8\xa2\xac\x89\xe8m#s\xec\xa7\xf9\xc4\xb05\xefb\xc5<\x8dJG\x90\'\xaf\x06F\xd1\xd0\xa4\xc1R\xf0r<\xe2\x1d\x98\xc6\xe5\xce\xcbr\xc4y<\x04\xeae\xeeV\x89\xb6ES\xb1\xf4G=\x89\xf3\xd0\xdb\x06\xd8Y\x88\x9b(\xd1B\xffL\x8c\x19\xea?1B\xb68N\xd5\xc3\xd4\xafU6\xc6\x05\xc9\r\xe4\xde4\xbah8\xd8\xa4E\x0c\x16\xdf\xb7,\xd0\xd4\x94\'e>m(\xb0\x8a\x95\xe2\x8e\x1d\xa8\x15l:\x94}\x02\xd3\xf4\x9euIb8\x93\xea\x99Y\x18\xbe\x98U\xe9NX}\xb1\xca5(`\xa2dK\\\xeb\xeb\xe2^g}\xa5`\x1a\xc3.\xb4\xa0ZH\xfe\xe28\x08@\x11\x1f\t\xbe\x83D\xce\x0f\xee\xfd\x15\xe0\x81\x9d\x97\xe2\xd2\t\x18\r\x99\xf2\xbebo\xe6\xa7\xbd\xc5\x1b\x9d,2\x12\x9b\xa3\xae\xbb\xedj\ri\x05\xdcY\xca9w\x95\xc1\xc2\x88\xd4\xbes\x06\xf7{\xe5V\xdb\xf8\xaf\xe1\xb8/\x08\xe4Ya\x08\x14\x9c\xf2\xdc\xaa\x9ap3s\xa1\xa6\x9eD\xb97O\xf6\xd5\x03\xbf\xba%\x0e]\x89\xd6\x89\n\t\xb7\x07`\xa3\x00\xe9\xab\xddo{\xbe^\xf2\x84J|\xa6d\x96\xb7\xf1_\x1c\\4z{\x1b\xb9\x0b\x18\xed\xfb\x04\xcc\xd55m\xcf/\\]\xac\xcd\xac\x9ea \xc9\x1e\xab<\xd4X\xe5 L\xf6\x1dY.&\xc3\x1cA\xb4\xe1\x9a\x81\x92@P\x17\xdby\xef\xe9\xf8\'\xf0]\x8e\xae\xf1\xc9\xcc&i\x07\x0cU&ca]\xf7q\x12\xf7\x86\xb5\xc3iiwO\xeb44\xd5\xbcT\x1a\xb3\xe7@g\x92w>\\R\xcf\xfd\xeb*3\xbe\x8cc\xd7\x15?\xfa\xe9/\xde\x83\xe6\x87\xfa\xd6\xa4?\x9ey\xfb_\x85M\x87\xe7\xaa\xada\xcb\xeb-"\x92bJ\'\x10Hc\xd4X^l\xc1\xc2\xc2\xea\xbe\x11\x9c\xa1T\xe9\xa7L\\*6J!\xab\x1b\xc6\x06<\xc6\x03,\x85\x1dk\x1f\xeb\xc8\xf6*Q6\x05\xa1\xfa\xa1t(\xf9"Q\xe1"\xa3\xef\xc5\xc2\xd8\x0c\xb8\xca\xd7$5\x06\xe9\x168\x89\xba\xdb\x13t\x1b\xf4\xc9\xfa\xd2\x9d*y3+\xc6\xb4\x16\xf1\x8f\x12\xac\x84\xd4\xeb\xea\x9fu\xc9\xb5\xf4D\xcd\xf7)\'\xcel\xban\'\x18\xd0\xc7`\x02\xed\xf8\xbf\x86\xb1\xe1\xd1\xe1\x17\x80\x96\xf3\x9f\xdd+l\xcdT\x84\xb8\xd4\xc4)c\xbb\x84\x1e\xf8~\x05\xe9\xc8\x0c\xfa\xbb\xd0IF\xa6\xffI\xa6Z\x86\x1d\x9b\x9f\x88\x14\xc8\xd46h&\x83\x98\xc1\xfc\x13\xb2{\x08\xc3\xb1\x86\xf8kv\xd3\xf65K\x1co!\xea\xf5\x99:\xe7\x17\xc5\xfa\xe1\x9be\xc0\x9e\xca#L\x00\x1a\xddO!\x0fc\x1ds8a\xab\xb3\xc2?\xba\x81a\xa7*Y\xc8T\xe5@\xc8\x05\xa7\xec\x17WN\xf6\xb0\xc5I"\x01=\x0f\xaa\xa4\xdc:\xe0\\d\x98\xe8\x11$\xfa\xb5\xdaNP\x83\xfc\xee\xa3\xd08\xaf\x93-\x94\x9e\x0el\xab\xc2\rh\xc7O\xe9\x82\x9a\xb2\xc6\xe7I<j\xa7j\x8d\xee\x9ck\x06\x01\x9e\xe4\x81\x8e)\xdb\xe6\xb0\x1fT\x87\x8a&\x8b\xf1\x0e\xea\xf0\x8b\xcb\xee\xb0\x0bg\x93Sbu\xdbH\xe3\x81\x1b\xd0V\x90\x13\xe9\x1d\t\x07\x80\xe8\xd5\x94s]v]\xa8\x02_\xf8h\xf2*\xfb\xd0U^\x04\xdfZ\x97v\xe1\x84\xb1\xa0\xbd,d\xe5d\xe2C\x04\xac\xe2\x1d\x06m\t\xb4\'\x9c\xcba5\xffW\x898\x9c\xb8\xb9l\xe3#O\x17j\n\xdf\x9a\xe2z`X\x1d\x05\xaa\x7f\xdf\xfaO\xe5P;+\xdc\xf0\xee\xe8L\x81\x07\xad]\x1b\x06\xdf2\x8bn\xa4\x9coV\xd3y~\x05b\x82\x8az:\xe9\x9dwx\x11[\tE\xd7\x1c@\xdfF\xea\xd3\xb3\xbd\xc1\xf7<\xbcbmG\xf4O0\xea\x1c@\x02] \xc4\xadL=\xb0\xf9R-\xba\x93\x00\td\x06}\xcc@!<\xe3k\x8e\xda\x81``\xb4\xc7NR\x1e\x82\xf7\xe8\xd8\x84B\xfbf\xbe.\xe7\xa7\x95\x86i\x83\x04^\x9a!Z\x8e\xc9P\x02>\x8b\xf2\x0f\xe6j(\xb6\xbe)\'\xd5\x12\r\x8b\xfcp\xdb;\x07\xbbs>\xa9\xfb\x17\xd9\x9a\x99@\x99j\xa2\x04?>\xe7a\x0c\xb4\x8e\x1d\\\xa9\xcc\xf6\xb2\x94\xa2\xaf\x93 U\xbe\xb5[\x9e\xc9\xff\xc6\xbf\xec*\x84\x11n\xc3\xcd\xf3\xb6\x8b\xc8q\x17\x03\xa1\xa1\x8cL\xc1L\x8d\xa8~7m\xeb\t\xb0#\x0e\xcff5x_\xc2\x16\xe3\xab2UFq\x02\xb9\xb20P<lM~\x99,H\x1c\xea%\x9aG\x9c\x1e\x02\x9abf\xbd\xd5z?\xe3\n\xfep([\xb9\x8c\xd5\xc1V\xf8\xa7\xa3wE\xa1L3\t\xab\x82\x93\r\xa2\xf8\xd4\xf9x\xdb\xb1-\x8f\x8b\xf6\xcf\xe4\xe1TJ-\x90_\xa2\xf6\x88\xb7c\xf9VP\xf7C\xba\x1fdJw\xaa\x92\x90\xaeh\xc6t\xcc\\I\xe2\x8f\xa1\xe99\x86\x91\xb1\xf6\xb3n+I\x1f\x1c>`\xe3\xe5\xe36\x81kY\xf4\xd85Q\r\xfc5|c\xb6q\xf1E\xf2}\x0e9\x8aO\x86\xecH\x95\xf2\x13\xd7\x99\xbe1\xba\xf0\xe7\x82\x04\xc8\x03\xa3Ha\xea];Q\x03\x01#\xaay%\xd0\x8c\x98^\x0b\xf87\x84\x19\xe5w\xa0\xe5\xaa\x9c\x02\xe9\x08\x95\xdd\xf6\xbe\xe0\x0cWB$HO\x1e\xc3#\xe6.$$\x96\xfc\xd7\x01sS\xf2\x87\x143uL\x13$\x97\xfb\x18d\x9c\xc41\xb9\xa1\x8bVO\x14\xfd\xa0\xed\xca\xb2G\xc3\xbd\xc1\xcc\xe7\xb0E\xc9Bp\x00\xc5\xb2\xe9\xcf\nU\x84)\x03\xef~\x14\xed8\xfe\xd4\x05\x00h\xf2\xefQu(\xbd\xd5\xb6E\xd3X\x97\\\xb1\x13m\xa9\xd9\xb9\x8aDMN\x1a*\xabQ\xec&\xbc\x9b\xf3\'Q\xb5\xc2\x88SbfW\x08\x9d8:!>\x11{\xa1:?\xc3bO\xd3\xbb\x12\xc8\xf9o\xdbl\x1fK\xadk\x0bd\x9bE\xf9\x11\xa1-\xd0\xe5\xa2\x81\n\xcc\xc1u\x1c\xec\x8e\x1b69\x0e\x92\xbd\x8bt\xda\x0c\xc5\xf6\xe6x\xee\x1c\nf@\xd7\r\xb4\xc7\xad\xd4\x1a\xd5\x9f\xb3\x95\x8e\xe2\t\xc3\x1b\x8c\xc9\\\xe5#\x02\xcfJ\xc4\xfd\xe5\xb5\x85IX\x9e\x03\xf5Z\tHDMv)\x9b%H\x03)\xa2\xed\x8e\xb2\x9f;\xff\xbc)\xa1{\x17\xd0\x18{\xe4\xa73Y\tb\x0c\xb5\xd9\xb4\xe6\xdc/\x9f1\xbd\xec\x81\x92]\xb3,\xc0\xe8\tT\xa7\xfc\xf1\xbd\n\xba\x88%;\x1d\xe3\x85\xee\xa7\xe6\x8c\x04b\xa2\x85\xd3 v\xf0\xb9\xdc\x02\xef7\x1da?\xc69\x91\xe5\x13\x83\x12\xacH`W\'\x1a\x90}\xc5\x89\x1b\xb6\x87\x19V0\x96\xf9Wp\x00.\xc6\xa4\xd0\x111 e\x0f\x1cW\x95\xa8\xa6\xea(!\x01\xabR\x03\xe0\'|\x89<mT\xf3\xdd\x97\xb0\x89w\xe6T\xe1#h]\xc7\xef\x8a\x82\x9b4\xc3\xe8\x82s\x88I\xfa\x93\xb5\xe0\xa5Veom\xceS\xa7\xd3i\xc0\xfd\x89Z\xaa\xc5\x00\x98\x90=\x122\xb4C?\xee\xd7\x16\'\xf4ai&\xff\xe5\x1a#&\xf2\xff\xa1\xc6\x0b\x01E^.\xfc~\xff\x8bf\x9e~\xc1\xad\x9a\xcc\xe2\xe5\x01x\xaby\xe3?\x92p\xb5\xd8c\xf3b\xe7\xc0\x11z\x11L;\n\x8b\xa2\xdfwD\x1aZ\x1dsr*\xdd\xcf\x85J\xe1/\xbd)5*\x8e\x84j\x849\xfe\xfa,\xa6\x1e\xde\x02\xf0!\x960@d\xea\xab1\x12b\x95\xf1\xe2\x0f\x17\xe2\xc0\xb6\xb7\xbe\x12\x88{Pylx+\xb9\xa0d\xdeD\x81\xc0\x18\x80h\x8a\xe9\xc9!\xc9E+N\xc1\x9c\xf5\xec \x82\xe0\x90\x96\n\xfd@FezT\xcb\x1eB\x06$\xe5\xfeb[\x96:\x088xC\xef\xb9\x0f&\xfb/\xcb\x13\xb3\x06\xd8k\x94\xbc\xd1\x8bT\xcb\xc1\x02\x9d\xb3|\xfc\x0b\xa8-e\x8b\xdb\xa6b\x10\xb2\xe1\xd5-\x10\xca%n\x87\x1a\x10\xf5\xe5J9!\x04\x97\xbb\x14BJs\xd3\x9d\x94\r\x85\x90e,u\xe3V:\xd6\xb1\xaf\xe5\xd5a\xb4\x97\x81\xf0U\xbf\xd1^~\xf0\x1ak\xd5B\x0c\xee\xac\x7f\x88\x0bC\x0bF\xc8\xa4F\xcb]9\xee\x96\xf0\x83^`\xbd\t\xd2c\x83\xd1_\xb6\xbb\rG8\xd5\x1ej0\xb0\x17\xe9@\xb8l)\xdc\x0f\xb8\xc8\xb6\x1c\xa1;\xb73\xaf!\x95p\xdc\xe2\x02\x90@DrF2\xec8\xbbk\xf5\xb9\xddG\xc4\x0e\xf5\xfd\x1e}\xea\xfc\xe9\xd3k0\x8a\xdc\xb0\x8e\xd7AX\xf3\xaeg:\xef\xad\x1b\xad\xe9M8@^\x85\x83a*T\x1d\xceq\xa6\xe9\xa1\xdf\x1a\xeb\x9a\xe4\x15n\x0b\xd0\xd4\xd3\xa9J\xf7\xfd\x0c\x11+9wZ\nZ\xab9\xaa\xf3\x14\xcf\xc2}\xc3\xe1\xfeM}nZ<\x86\xdc\xc7b\xb8.\x91\x91\xe3\xee\xbd\x18\xab\x94\x16q\x88v_X\x87-\x1bf\xb7\xae_\xcb\xef\x85;=\x12\xb1=J\xadl%\x0b\xe5\xf8\x1a3\xdeS\x9d\xca^\x16+\xce:|87J\xe74\xa6\xe2\x9aF\xa7\x80\x85\xe6\xf1\xd3D\n\x8f\xdb\x1d$\x1d\xf6\xe6\xf4n\xfb\xaf\xcd\x90\xfbpJ)\xf8]O\xc9\x13)\x88I\x81m|%\x80[09-\xe3\x1e\xc1j\x10;\xf3\xe7\xf3=\xac-\xc2v\x8d\x05Ht_\xb9\x7f1\x03\xed\x81\xe4\x80g\xe0\xf0Rn\x96Y\x02\xccK\xb3\xea\x99\x90\xbcS\xe7\x7f_Qz\x8e\x07\xc1\x80l\xdb\xec\x13\xd0\xcau\xb1~\xe2\x87\xff\xcbIW:\xdc^`\x0c\x12p\xf2\x018\x8a\x05\x99\x914N\x18~v\x12\xa2\xe0\x19\xdfjV\x02\x10\x88"\x8d\'\x8b\xb4\xbb\xd1\x05\xf9\x1d\xea3So\xb2\x14i\xf3S\xab\x08\x8a\xcc\xfb\xda\xf5\xe8^G\xf71\xea\xf8a\x17X\xfb\xdd\x06bi\x10K\xb4(\xe1\x8e\xcc \xe9f\x86CQ\x9e*\xf0\xedG+_q%<\xefdD\xa9\xc2hk\x06\xa77\xe1\xb4\x00\\\x85X(6\xf0\xf4\xcaz\x037@\xf1\xcaT=\xf2h<\x07\x14\x066d\xcekwO\xb4x\'b<*c\xb6M!=Rsh\xb0&MN\x0c6\xce\xd7\x88\xbe$s\x0b\x86$\x96`>\'\x92\x9a\x1b\x02\xc9\xc4m\xe5E!x34[\xec\xdb\xd7\xd2\xc9\xc1un\xbf\xebx,\xaf)\x03-\xc4\x9d\xe64\x031=89\x18\xb7\xde\xf0\x05\x98\xde\xb5\xa9E\x81\xa8\xee\x93\xca\x8bq{#L.\xbd\xcce\xa6\xc7Z}\xeb=\xb8\x1cj$\x10>\x7fp8\x86\xc0\xea\x8e\x9be\x0c4\xf5d\x05x\x9dol\x18ZW%\x07\x83\xf9\x06p\x17\xdf\x1b3\x8a\x14\x8d\xd6\ru:T8\xfaCw@\xaeGvH(\xcc\xd0%\xb6\xa8\x90=\x97\xac\xacKP\xcf\xd9\x03\xaf8\x0c\x92*W\xe9j\xbb\x03\xd1|\xf36vJ;\xb4\xb6\xaf\xb0\xb2\xe2W<\xa7\x86\x04\xfd\xf5)\xad!\xb8\xdf\xf8O\x0f|\x13j\xdc\x08N<Oo\x8e::\x9b\x9e\x8c\xa4\x11\xa6\x0fP\x85\xab.5\xad\xf3v\xe3\xe9\x19\x03\xb5\xc7\x124~\xa5+\xf0\xca\xd1"\xfa\xe3\x11\x1a\x14\x049\xd6\xa3\x95\xe6\xa0\x97\xf3 T\'\x9d\xe9\xf5\xa4\x93\xb5?c\x96\x90\xc0|E\xaa\xc2\xcaQKiJQ\x05\x02\xaf\x06\xb0\xb0\x03\x0bEW\x99\xc8\xe3\xf7\x82I\xacu\n~U\xbeS<\xf3/i@\xbf\xea\xdd=\xe4\x8b%\x99\x8c\n\xf3e\xb0\x0f\xe6\xd9\x9e\xce\xcbY\x982\x08\x7f\xa3\xfb\xe0\xe6\x96\x0f\xd0U \xce\xb8\x8a\xb2\xbf\xb5\xef/z\xd4\xb08N"\xe0W\x18\xde\x12\xe1g\xd4Y\x08~\xaf5RP\x8b\xces\x14\x8e\xe5U\xcb\x1a\x8c\x9a\xac\x8awx\x9fx\xa7,{\x01\x93e\x1e\xcb*\x08\x0c\xa8\xce\x92\xbc\xe75\x13\x83q\xeaG\xbd )\x90\xb0%\xd5\xa1\xdf\x80\xa3\xe5\xdf&4\x1f3\xdc\x0c\xf6l\x8a\xab\xda11\x82\x90\xfch\xda\x92]4\xf9h\xdc\x0e)\xe9zX\xe6P\x05Drn\xcf\'o$N-\xc8\x803\xe4\xb7\x9c5\x0f\xe6\xb2z\x11b\xadHLb#\x13<3\xf4\x0c\xc8H\xe5\x896\x1a\xfb|\x17\xc1\xe1\xa2\xc1\xa9\xa7p\x12R&{\xc5\xc5\x85(\x9a=\x16\xe2(\xc1\x9e\xb3\x17\xe5cw\x17\x17uY\xf1\'\xde\xee\x8e\r\xda\xc4\x19\xf3\xe7\xa7\x08U\xcc\xb0\xda_\xaeI\x9aV\xa0\x08\x80\xc0\x16N\x9e\x1c\xc5\x1b\xce(\xc8@3\x10\xb0#\xf1\xebd01\x0c\xdd\x12\x95\x8c\xc1\xdb#)UI.\x1chR\xc0p\xa8\x13\xf4zZ\xd5\x87\xb7\'\xfc\xec\x7f\xc0VE\x13\x95T\x8b\x1d\x08\x87P3\x17\xe7\xd3\x1a\xcdb\xc2\\\xd2\xfbB\x15\xc3\xfa\x01{-\xbbv\x9e \xa4\x17up\xcc\xd7\xa4\n~(\xfe\xc4\xc3\x9c\xfe\xa6\x0bF\xce\xd6?\x1f\x83\x99\xc2\xe6\xefM\xe8\xd5\xed\xebU\xc9\x0f\xd9I.\xde\xf1)\x18"Z)\x18\xd4d\xb3!\xda1\xb3\x15\xe2\xbceG4+\xc8\x16c\xa8i&@\x99\x01\xbb\x07F\x83\xa3f\xb9PE\tc\xcd\xea\x97y7((w]\x1fap\x8dP!p$\xbe\xcc\x0e\x8aPVsbp#\xf7\xf7G\x01\x00\\\x01(\xe0\xa4h\xff:\xf3kJ\xa1\x0b)\xfa\xfc\xc1\xe5\xd1\xf5\x8cS\x84\xd1`\x9ei\x7f\x8a:\xcd\xba\xbbK6 $I!\xf1\xd9\x0b\x9a\xec\xb3?\xa6\x18\xe7\xa7\x86\x04\xfc\x87\xfc\xde\xed\x04\x8d\xe7\\\xae\x12`w\x94\xb7XA\xbf\xfanj\xb8W\xdb\x1d\x08K\x13\xcd\x871\xd8\xa3`\x18\xdd\x88\xaez\xdd6\xdd\xc2I_\xa3\x8e\x98 \xfd\x9fV\xa8M\n_\xe3\x0b\xaa\x0b\xdf\x04\xb9w\x1c\xe1\xd0\xaeX0\xab\x01NX\xbe\x15\xf4.I\xc6^\xbcy\r\x10"\xb6q\xad\xe4\x84m\xde\xb3D42r\xf2\xd4\xc6\x01\xb0\xda\xdc\x93\xa0\xfb+\xc4\xfb\x9b\xbbfr\xc5\xfd\x0b\x03#\xf1i\x9d\xb2\xd3\xe4o\xa5\xd0\x08(\xbc\xf5\x91\xf48\x1f\x05\x00j\x9e\xf7s\x0e\x05VMUpL\xc2H\x12c\xef\x00\xe7]\xbdJU\xf8\x86\xbf:\x81\xa9\xcc\x0c\x94\x0b[\xd27\xab\xf1Z=\x05\x98\xc8 \xc0E\n~\xd4(D\xe5\x93\x94\x04\xcfq\xec\x0c\x93\x11\xf5\xf6\xe2#\xc5\xe0\xabb\xb9\xd8\x18qT\x1bL\xc6\x9c\x87\x01\xff\xc6~m\xad\xe5g&\xcc\xb6J\x13\x9e\xa7\xaa\xde3\xfe\x9e\xa6\x89\xb2\xa4,\xb5V\xd7\x96\x1dW\xec\xb7\xcf\xb1\xb9s\x1c\xc5\xed\xae&9A\x0eVu\n7\xf2c\x99\xd3wDH\xa72Q\x14MK\xe5\xd7@\x01\x89@+\xdd\xc2r \xa4g\x0et\xe7v\x93\xf9O|g\xd3\xad\x8a\x9bc\xedv\x98\x14\xe6\xb7$o:ds\xe5\xccy)\x96`+\xbe\xa0\xf0\xa2\xc6\xfc\xa7\xceei\\\xff\x92\xb8\x8a\x1f(\xad\x92\'1Y\xc3k\x14`\xc9wqt\x03M/\xe1\xb5/\x97\xdb\xb2\n\x80\xec\x06;s\xe5\xac>\x99vlc\xfb\xf9\xe2C\xdcvu\xd0.}\x03\x8b\xfa\xf0,!5\x83\xdfe\xeb/\xc9,R\xbaW\xcd%\x11\xd4\x1a\x8b\xfe\xaek\x05>\x97lp\xfe\x193\xdd?U\xd1\x18|X_i\xdc\xc0\xbb\'\xed\x06\xd5\xca,\xf0h\xfc\xc7\x06\xc0\x95F4\xac\x8c\xec\x90E\x17\x17\xf7o\xca}\xecp\xce\xe3\xc3\xc7{W\x15P,\xcb \xd7\x97\xfe};\xc5\xf6\xbe\xe6MB\xf3\xe6FrI0FAZ\xc9\x120\xdfnp\x94\xd0\xc6;[\x91\x9b=r\xb0\x94\xbaM\x1b\x7f\x14*\xc7v\xcdlI\x9e\xac\x9c\x11H\xa9\x17\xdd\xc9qr\xf4\xf6H$9\x91\x02\xf6n\x82\xa9\xa1\x01\xa68\xc9%SBY\xd9\xfb-=\xfdp\x86\xa3\x98KR \xd6DE\xa7*\xfc\xa8@.\x88X\xbb\x99\x0e\xb9\x12\xa7\xd2I\xc8\x93\x91-\xee\xd1\xec\xae\xce\x03\xf1\x9aoF\xef\xce\x8e\x08\x16%\xa3\xcdhi\xbb\x91\xba\xb37r\xfam\x85\x1c\x80\x04\x80\x8eO? \x03\xa0u\xfd\xb7\x8a\xc2\xca\xb7\x92\x9f`\xe0\xde\xb1\x0b,\xd8k\x8d\xc0\x14\xe7\xd0\x83Q\xd9\xaad\xe9,2B\xbc\r\xcacCpO\x8c\xcc,u\x13\xc6\x02\x99\xf2\xe6f\x17\xfb\xb1R\xcef3\x01E_`\x98"!\x0b\x93\r\xe0\xd2\x89\xa5\x19.\xb8\xcex\x85j\x03C\xa4mQhs\xdb\r\xde?\x8a\xf6\\\xb2 ,n+\x04\xe0\xdc\xea\x8a%\x8dzL{\xc3s\xb4\x0c\xfd\x8aD\xcf\xd9E`^\x91\x143\xa0:\xd2\x03\xa1\xd79\x08\xde\x02\xd2\x8dd\xad\x9c\xec\x1a8\xb9\xf0c\xe3p\xd5\x1d\x03\x16\xc2j\x0bO\xe7\xbd\xf80d\xe7\x9cbM\x15\x98\x0c\xf9\xb9\x02F\x96Sv\xb5\x06\xa5Y\xbfZ,*^C\xecD\xb80\x1e\x18\xe5|\xab$\xaam\xe7~\x01\xb7\xc7\xe8J\x98u[@\xaf4-\xeeO#\xc7\xaa\xda %d\xec\xb8\x1ahe\xff\xb4%\x81P\xe8\xc5\x06\xb6\xef?\x1d{\xb0\x81]\xfa\xbdc\xc2pS\xdf\x88ca}\xe0\x1b`\x16"\xa0+x\xfd\xd5\ng\xc1K\xb2b\xe9~\x87rec+\xfc\xb8v\x14\t\x13\'O\xeb\xed,\x85\x7f\x15\xee5\x9a\xacZ\xad\xe1\r\x8d\x02\xab\xe033\xd7::@`\x94\xc6:/d6\r\x16\x1f,\xcf\xc3\x8cX\x1d\x1b\xca\xe2\xa8\xb9\x0b&\x90\xf3P\x8b\xdf\x9e\x8b)\x1bG&/\xeeJ\xfe\xed\x8b*P/S\xb7\xd1\xe1\x19\xbc{\xcbv\x03\xae\xad\xe3|\xda\xa2\x97\xd0\x11\xb4&v\xe8\xcb\xc0\xf1\x18\xc6\xc9\xf9H\x82~F@\xbcH\xdd\xe6\xe3\x0e\xcb\xd8\x82\x070\xd3\x8f\xf3\x0e\x9ag\xd5\xbc\x87\xa7\xcb\x9f65\x9am\xeeI>9}p\xff4\xd1d\n\xe0\xe9K\x9a\xadc\xf12\xf0\xa1\xad\xf0\xc5\xf9\x83\xdf\x81\xa4w\xf7\xd1\x03\xa7\xa69\xabySW\xe4B\x04\x90 \xbd\xed>2\xfa\xc5\xbe\xc4\xaabZ\\\xaf\x7f\x91\xf8\x89\x07\x9bp\x15O\x90\xbe\xf3U\xf6\x88`\x9d\xc3\xd2\x1d3\xee\xbcT\xc8\xc1?\x07\x0f\xf5`\xc2\xd4\x81\xff\x15\xee\x11u\x8c\x0e :\xa6\xa7\x9dm\xb9\xb2\xc6}JyP\r\xaa4\x1cl\xad\xc5\x9e\x8d^\x93\xea\xe8\x9b+2\x85U\xbau)\x90S\xf0\xc4F\x0cK\xfe\xca\xc64\x91\x02\\\x84`!\x12\xc1\x17\x02\xe8\x9d\x8c\x9f\x90\\\xa4\x8d\x9b0\x0cq\x19\xfe\xf0\x81\xa8V\xb9J\xef>\xfd>\xa5\x92H\xf3\xd82\xdae&\x9di\xba\x1a\xeb\xe3\xf9\x8a5\x7f=\xf1\x8aS[\xc9\x91~D\x07?\xf7\x1a\x0b\xe7\x8b9\x14Sm\xed\x8c\xae\xde\xc7\xc97O\x88e2\x17\x95.c\x03BEt\x171\x15\x80+4\xf9no\x17g\xcd$1\xe9\xecl\xaf\x8dM\xd6\x9d\x08dU\xb2\'4\x14;{\x8bK\x8ao\x03\xaa\x95\x7f\xea\x9a\xe9\xf7}\x13\x14\xa9a\x13\t\xf1Y\x84\x1a\xd5r\xae\xf0i\xba\x03\xe4\xbe\xcf\xf2\xa5W\x10\x8bR?|(\xa5\x1c\x1d\xde+^%\x81\xf2\x93\xd7\xaa\x1et\xb99E\x7f\xb9\x98lo\xfb\xa2VEW\xf2\x8b\xa5x\xe0\xb7Lw\xed\x1aT\r\xaaF\xf9\x8b\xffU\x8a\x1f\xcd\xd9\x89\xb7k\\#L\x15}S\xfa\xbd\xa9#\x7fo\x12d\xfb\x1c\x85\xe0\xbb\xd3\xcc\x12\x11\xda\xf2\xda\xbfD=km\x1eY\xdeE\xc3\xfd\xa2\x1fF\x00}a,\x91\x00VH\xccx\xac\xacY\xee\xb0\xf8\xcc\xc6\xa7&4\xf6\xad9\x15v?\xa0\x7f^s\x82"\xe5\x88E!2\x18\xb1fA\x04$uH\t\xcdv\xa0\xd7}\xf6\xbc\xd3X%\x9b\xbd\xa6\x90\xce\xbb\xd0\xc9\xee\x87\x8f\t\t bN\x03NOCt\r\xdf\xdd:\xd9\xba\xfc\xe9\xb9K=\xe5\xa3\x93\xe1j\xf7\x95\x93\x88\xbe|B/\n\xab\x021,/\x15\xceY\x8e\x12J`\xd0\x90b\x18\x12\x01\x13i\xb5O\xc3\xe5\xb8\x9f0\xfaDpM\xcc\xa4=]\x97\x84\x0ch\x7f;\x08\xd3\x8a\x84\xdaJ\x12#2\xc4#mh\xa0Y\x94% \xa65\xe9q\xf0\xfd^\x85\xf0\xe4{%\x88X\xfeL\x18\x1c\\\x05\x1e\x98\xa1\x8a\x8b\xa7`\x05\xa2\x0f\xd1\xff\x17\xa2\xd1BU\x86\xab\xc4\xbf\xc8\xd5_\nh*\x1f\x9cro|\xfc\x89\xe5\x04a\xa8\xe9\\\xda\x1d|\xfc\x823C2\x19\xfd\x89\x1d\xf21\xd0f\xd8\x90\xa2\x08\x13\xa7rk\xa2\x97)s\x84g\xe57\x1eRU\xe6\xf8\xb4\x92HU\t-\xd2~c\xc8\xaeU\x8c\xccx\xd4\xe7\x8b\x8fqa\x0f\xbd\xc5\xce\xb6S\x1a\xe8\xf8;n\xfe]\x0bM~\x10<\xe4-\x087\xc7~)\xde\xbc\xd7k\xde\xf5Iy\xbf\x88\xbf+`\x11\xb0\xed\xda;K5E\x92\xa2cq\x0f\x87\xa4\xac\x9f\xfaJ\xebCQ\xd1\xe97\xfe]\rF\xb9\\\x10\xda%o\xd1\x8b\x82\xcb#\x17\x89\x8d\xa2jj\x8aO,C~\x03]\xfd\xa7\xdc\xb0v\x10\xc8\x9c\xcb\x9c\x9f&\xe0\x18v\xb9T\n0\xc2\x14Cq\xdb\x0e\x17\xf8\tQ\xf7\xab\xbaE\xf1\xf8\x9d\xe3UMm\xed\xef\xd3\xf0D\\\x07n\xdf\xcc3\x08\x1d\xdbv\xbf\xdb\x16\xb02\xd0\xad\x0cE\xb7\xee\x08\xce\xf2|\x89\xe2;\x8f\x80\xac\x02\x07\xee\xf6K|L\xef\xda\xd8\x1f\n\xc1\x0c})\x14q\x8f\xca\xa4\xb7\xcc\xc2\xcd\x9e9\x85H\x8e\xe07\x1a\xa6\xf2"\t?\x0e\xadt\x1a\xaab\xf4\x18\x0e\'\xd2\x1az\xce\xa0-~>\xa5\xdd\xf1\xaa\xc6-\xbd\x1a^\xa7\x0f\xa0 \xf0\x1a&_\x7f\xe1\xa4O7\xbe%dSrV\x99HI\xb8\xfb\x04\x89\xcb\xe9\xc2(\x01M\x93\xbf3\x1b\xb6\x8a\xb04+|\x9bn\xb1\xff\x80\xfcAa\xa4E@\xc82\xea O-\xd0P\x91\x1fV\xa3\x9d\x87\xd6b\xcbV\xbc\xa8\xfb\xdf\x05\xb91\xbd\xab\xa0XV\x08\x8b\xe0\xff\xc3\xe1X\xf0\x10F\x85t\xd4g\xf8{\xf8\xeb\xb6\xd31h\x92\xfa~\xae\xaf\xf6\xf1\xdb\x18\xe9E\x80Il\xd8\x82-\xcc\x91\xc4/{\x12s\xb8\xde 3>u\x9c@Z<\xec\xe8\x07\x9b<2\xce\xc8i(Wt[}\xec\xddqN\xed%J\x93\xe1.J\xd1\x00\xf1\x8d\x12`\x87\xb6\xbc\x0e\x08\x9bT\xc8\xc0f)Q\x90\x86>$\x10e\t\x01PL\xd5G<\xd3\xc8FX\xbf\xdfd\x02\xe9\x9a~\xd09\x0e0\xf1G\x04\xd2e\xff\x89\\\xe52\xdd?U\x05TP\xd0\xc9\xf4u\xcd_\xe4\xda\x06N\xdf~\x9b\xd8_[\xc0/z\xd5\xec\x88\xeao\x01Y4\xbdL\x1c(\xbdZ2fI3\x10\x1a!_\x0f\x08\x82\xfb\x81\x83d\xd1\t\x87\x07\xd6\xecS\x1a\x1cb\xfa\x89k0-\xc4\x91\x8dr\x10\xd7X\xefu\xbf\x1b\xd4R\x97\xb5\xca\x98\x165\xe8\x96 J(\x97||\rwZ\xf9\xdb\xb8:g}\xd6R\x01_\x90\x1f\xad \xba3sQJ\x1d\xb9\x1b\x12\xa6\xe81\xb3F\x90K`\xaa\xe9\xb3\xa4\xc1\x85\x9dsIP\xa2\xd1R\xf6b\x03\x95\xff\x07\x1eJu\xdc\xca\xb6T\xe80\xf1J\x06s\xcfQ{=\xaf\xdb\x0cx\x8e\xa3-:\x06\xdc\xdc)\x93j\xe9\x86G\xe4\x06\xd2\xb2\xae{2\x98v\xf9]\xe5\xaf\x10\x16\x14\n\x17J\x85]\xf5\xac\n\xdcM\xa2\xb9\x15;HIf?"\xd9\xf5\x97\t\xe8\xe1\x92\x16]\xfc\xd6\x1c|\\\x92w\x8c\xfeSh\xcf\x0b\n\x80\xc6?.,\xae\x12=rs"Me\x06\xb1M\xb4?\xac\xed\xd4U\xf2\x89T\x01\xa6\n\x8dD\x9a\x0c\x0bx\xa7\x01\x180\x08\xe9L\xbd\xcd>\xdc\xe2\xa5N\xd8\xcc(o\x9b\xc9N\x07~\xdc\xf8=\xb8fI0EQ\x0b+\xd2rS\x8c\x7f\xc7\xf1-A%}6\xd1\x86N\xd8\x9e\r\x18\xd3K\x19\x91\x93C\x06E\xdc\x9a\n\xaa.\xda\xcf\x13g\xd0o\x7f\xfe\xddC\x92T\xaay="\xec\xd5\xa8\x12\x130\x84\xd0\x98zgy\xec\xa7\xf6\xd76yv\xd1\x05_\r\x95\x16\xcbD\x12\xaf\xe0\xa3w\x06\x01\x03\xa8\xad\x84\xf2i\xc6\x033ba*#\xa5\x89\xdez*\x16\xb0\xa2\xce\xd4\x83\xcf\xef\xd5~\x13\xa1\xd6"fR\xc8\xbb\xd6?g\x1an!\\w\xaa\xaa\xcb\x8c]B5\xe5\xc0+\xd6_\x85=p\x90\xcf\xde\x92\xa9\xce>H\xec\xc8{\xf7\x19\xe8\xd8\xf2\x8b\x1e\x9e\x8d\xda1u\xfc\xb3;V\xe8\xe0\xfc\xb0\x86Sy\'^T\r~,^\xe1\xfd%\x06\xb4\xe0\xef\x98\xb3\xc6\x8a\x11&,&\xa2\xa9\xbfd\xb6\x97\x8b0`\'\xef\x80\x99\x94\xf2\x18P\xb4_\xe2m\x16xo{\xe5\x14-Qc:5h\xe68\x08\x99\x85)\xb2?_\xb4\xcd\x1b\xd4s=\xf3\xc2\x95\x08\x02[e\xe1\x19\xd0\xaaF\xfb\xd3r\x96\xe1c\x8c\x00\xdf+3\xc8\xd2\xcd\xff\xda\xdb\xa8\x0b=\xd2\x1b\xa8C\x89\xf4\x94}\x12\xd3\x86\xa8d\x86\xd1\xcak\x8e\xac\xdbY\x04\xef\xa75W\xfe\xa3\xcc\xed\x7f\xefQ\xbe j \xfa\xa6\x9a\xf0\xee\x88\xf1\xa2\xf2P\xf8\xab\xbc\x12\xc0\x8d\x86n~\x8fyz|f\x1c\x98"\xcf\xee\xfb\xc4\xf40L\xc5\xc0\xe4}\x1f\xfcJ+\xbac\x03\x0fr~-KA\xab>\x1e\x80z\x9eE\xab=\x1a\x87\xf6G\xbf\x8c:\x97S\xc5\x81\x1d\x87\xf4\xbb/\x00\xac\xb9C\x88\x14+7z\xa2\x82\x18\xe6\xa8\xa0Hj^f9n\x00q\xc1\x0f\xe0Wh\xd59,\xfeW\xde\x88\xf5\xe5\xbc\x88\xb4<\\\xf0}\xa2\x81%\x0b\xba\n\x00"\xae\xf7\xa1\xc6\x7f\xc9\xeaT\x80\x1a\xb5\x15`\xc5[\xf5\xea\x96\x0e\x12\x0cP\xbfjl\xe4\xc4\xd0\x06I\x11"\xe7\xfe\x18Q\xccovU\xf3\xdfc\xb1\xdf\xec\xdce\xe5\xa4\x94\xa4\xad\xe9\x8a\xaf\x8aH\x93/)\xf4M]*\x0bF\x1a\xf4KUOq(\xcc\xf0\x87\xa8*-\x80\x1b\xf8\x94\x05&l\xa3p\xe7t\x17\'\x9f#\xb4_\x04\xfbB\x9c\xeb\xbcR\x82Y\xca\xcbv\xea\x8fmM\xda\x1a\x13}U]iI\x08\xc6{\xd09K5)\x10\xce\xca\x81.~\xf7\x1ao\xa0\xdc+\xf9}\x9b\xc7bP\'\xae|\xd3N\x86\xd54\xe7\xa7\xe6g\xe5K\xdb\x1d\xcaWoj\x15\xdc\x11\x9b\xe2v\xec\xddqtE\xe7\x85\x0f\xc8\x80\xa3\x98uW(#F\x0b\x07\n\xe4\x9e\xfe\xd5qp\xcd\xc9\x97\x0c\xd8\x8d\xcb:9\x14r\x8a>=\xbe_2\xad\x99\x1bz7\x17\x94\x8a\x8c\xc4\x89z\x88y\x860o\xdb/q0\x87\x04\x9c\x83\xecV,\x0ev>\x11\x9f\xd3l\x1c\x0f\x02yU\xc9\xcb[\xa7Q\xa9lV\xd65=\xda\x9a\xce\xdd<\xfc\'\xa2\xfbw\x0e\x01I\x18\x1b\xc9\x9d\x11\xdf\xdc\xcb+\xddg\x82\xc1/\xf6\xd6\xf7\x8f0\x91!g\x9aR::\x1b\xd1\xdfD\xaeI\\a\x9a\xb1\xb7\x82\x9a3\x95$:\x82\xb0\xbd\xb5,c\x80\xbd+\xeaza\xf5w]\x96\xc9~\x86\xe7\x16\xb8\xd9\xb2F\x1d\x88\xc9=\xb0\x04\x12\xe81\xc7\xad\xc3\x0b\xce\x91\x92\xac\xab\xa4\x1e\x16\x8f1@\xa8;\x8c\xa0\x0bAF\xc9:w\xd6\xc5\xab\xb6\xeb\x1e\xce\xf0\x06\xee\x8by\x98\xc8grf\x06\x10\xa1\xce\x0e\x05\xb9\xb5\x16k\xefb>\n[,\x91\xeb\xdfeJww b\xb0";\xb6\xa8\xab\xd1I\x85\x0ed\xc1n\xac\x85-\xa7E\xe3\x98>K+\x17ul\x9f\xf5\x9ehD\x04<\x16\x8c\xb7-x\xaan\xb6\xb2\xbd\xda\xec\x80\xf4\xb6S\xd5\x1d\xc3\x94\x8d*\xce\\\xf9\'S\xabT\xfc\x8a\xea~\xe5\xfbgO\x85\x15\xd9C\xbd\xe3\x14\xa9CB9\x18\xf2\xeb\x9d\x8c\x8c|&~]\x9d\xd1@\xecl\xc9\xc9\x0e\xf1\x8a\x96Q%\xd3\xb7\x8c\x9d\xbf\x02\xa3^\xe1+V\x06\x9brB_K_\xdd\xc0z\xf4\xbf/\xf5\x05\x06O\xd7};\xa6\x91\xa4\x02s\xf5\x95`\xde\x1f7\xa9\x8e\xbc\xb3\x05\x0c\x80\x1d6\x87u\x82t\x14,\x81)\xbc\xb4\xae2\xaf\x9aD\x1a~\x173\xeaY\x16\x1a\xbc\x8eX\x06\xfa\xa8\xae\xe6|*\x83,>i\xa1T\x1as 8\x1a\xfd\x11w\x10\x0b0\xfb\x88\xec\xf0\xbb\x1d\x97\x95\xff\xa7\xb0=\x05\xad\x98\xa7\xfd\xd3Lc=\x9c\x18\xffeIh\xe4\x04\xaf\rw\x82\tj!VijS\xee\xf5\x08\xce\xf9\xfd\x83;3*GVY\xda\xc0&\xd4\x01\xf6j\xc1\n\'n\xac\x07\xa5\xc7Ew\x84\xbe\xa2\xe12\x8d\xfa\xa3\xde\xf6\x11\xfd82\xae(\xa9>\x1aN\x0b\x80)\xc6\xf3n\xcd\x8f\xc1\xa3Uo]\x81F8\xc8\x96s\xfa\x00\x92\xbel\x8d\x92\xb9Z\xb2\xe3\x02\xa5V\xa6\x9b\xeb\xfe"\xc8;\x904\x8c\xdf\xdaU\xd4\xa3\xb2\x92\xc9\xf9\x9e\xa5gqrX\x14\xfe\x8acg\xf3\xbc%\x04\xcd\xba\xcfB2*\x90\r\x8d\xf9\xa6\x17\x08\x93\x8cg\x1f\xb1hB\x94\xeb\x9f\xf6\xf9\x8b\xa3Ga\xe9\xff\x02\xaa1\x92\xe5\xf2\x8a\xde\xa8>\xfb\x8a\x05Z\x11I\x8b\xfc\xc7e\xee\x90\xed\xdf\xae\xb3Z\xb17\x18\xe6\xbd\x12t\xc8\x82\xb3\x89\xda_K\x98VM_W\xe1\xa9~5\x81q\xe2\xcf\x93RD\x116c\xc2~\xf3\n\xaf\x01!g\xb6\xfe\xe9?q\xc6\xdd\xdd\xa7m\xc8\xb4\xf2(0;\xf4\x19?8\x80S\x13^K\xe4]A\x9e]\xc93|\xd0N\'[\x1e\x9c\x17\x8b$H\x8f\x7f\xa4\xe1\xda[\xa3m\xe2\xa1~\xb64\xb9\x146P_b=Z(\x1d\x85\x0e\x0f\xea\xa3}CsU#\xb4\xf6\xb5\xbd\x0e=\xa3\xc1\xbc\xd3\x8b\x81\xb4\xfe\xbc\xe7\xcaKH\x96\xd0\x15E.Ov\xa0\x8d\xcfC\xf2\xc4Rh\xe6V\x98$H\x82\xc1\x03\x9f\xcc\x7f\x17\xdb\xa1g!\xa8\xd7+\xed\x84\xeb\x04%\xa4Z[\xacg>0\xdc\xa3\x80\xab\xefY*zf\xcbp\xd1\xe0\t(\xbc\x8eKN\x98\x1f\x0b\xb0\xc5\xa3M\xaf\x08\x1aP\nD\xad\xf4\x9c\xa5\xe3\x82:\x0c\xfc\xd59b\x97\xfc\xe8\xbc\xbau\xfa\xf6I1J\x9b\x86+\x03P\xe2p\xb0\xb5\xf9\x87\x0ex\xb0\x1c\xcf\x80N\x8aN\xf1\x02\xe9eq\xaajkR\xc9(\x07M\xab$\xfc\x07\x84{z\x9c\xe4\xa3\x95\x90\x02<?o\xf7\xaba\x80\xa89\xfcu\x99\x8b\x0e\x19d\x01!\x14b\x83tx\xe6_\xf4\xcd\xd3hx\xbb\xf1H\xb3x=\t\x8d\tl>\xa7\x1a\x9d \xa4\x9b\xbf\xb5\x96\xe4\xcd\xff}\xb2\xd1\x13\xbe(6l\xe0M\xae\xd1\xd4\xa6,\x9e\x98\x03\\\xf7R\x1e\xc9\x91~\xc8\xfet\x8e\x9d\xac\xa8k\x1e)\xb9\xad\x82v\x9d\xb7\x06\x1a\x96\x1c\x8ea\xeai\x98\xb5\x83\xa6\xf8"\xc5\x1d\xa7\xc8q\x9d\x90]\xc0u\xd3"\xf3H\x17+\x04\x13\\\x95p\xf8\xa0\xa3V\xd6\xe8"\xe3ov[\xba\xd4\x19\xa2\x0f\xad\xeaL\xba!d\rI\x02\x95Y\x80\x8d<\x03\xf6\xa6\xaax\xd2[;d\x11\xa1\x94\xe6\xb0b\xb1\x160\xa1\x8c\xb9\xc8*\x15\x9d\x16\xa2\x99\x17\xf4\x90\xfc\x7f\xb8\x02b`D\x97L\xd30\xbb \xe8J\xe8\xb3E.w[\xc1+\x05GBn\x92\xee&G\xce\xb2~C\xaa\n\x02\x82\xb33\xe8\xa0\x19\xa5\xbc=jjs\xc6\xcb\xc4C\x80os\x9aY\xc4\xb4{\xad\xe7\xc1%\x0fH\xcfn\x7f9\x9f\xb5\xd2\x0f6\x94\x08\xfc\xb3\xa9R\'\x0c\xb9\xb9\xf2\x0f`0>7&W#{\xd6#\x89\x92\xbfy\xbf\xeeq#-\x90\xdbx\x9c\xe0\x92\r\xfc\xe8\xd3\xe6\xaej\xa6*8IY47<\x1b\xa3\xa7e\x85\xcf\x84z\xb5\x1c:O\x1b\xcf\xbb\x9f\xc0\x1f\xd9\xed\xef\xb8\xc5`y\xf9\x1a*{\xb6\xadI\xa2\x82zIdI\xf2h,\xacz~Q\xb6\xcf\x18F\x1cD\xd7 UB\xf1\xbfi\x80\x9er\xfa\xe7\xfe+\xad"Y\x0e\xe9\x85\xa6\xaa\x1b\x1aB\x1aX\x04a\xb5\xf8\xb7V-W\xaew \x94\xf0y^\xbc\x9ee\x91\x1f\xef\x97?\x11S\xa4Z\xb8sa\xb1\x9b\xb2Ib\x8f\xec\x1c"d\x14\xb0\xfd\xf4w\xf2\xc0\xc0\x83\x03\xed\xe7\x8f\xdb\x06N\x891\x02\xf2!\xf7`\xa2\xbf\xb8_Y\x13\x92E\xe0\x93\x9e\xddN\xf3CB\xfb\xb7D,\\\x83\xc5a\x1c\xaa\xcf\xdd}\xde\x8b\xe5\xc8\xc4\x98\x8f\x9a\x8cZ\x18\x08\x8f.>\xd7@0\x15\xb6D\xa25x\xa2\xe2\xf2\x15\x10\x95M\xa1Y\x0c\xe3\xce\xa14\x02A\x95\xbeY\xc5\xc5\x13\x8f\xf4\xfaX\x86\x0c=\xe3\xba2\xdf\xe0\x88H\x93\xf6^I\xe8\xe0\x8e\n\xc7\xf5\xe3J+3\xfc\xd7\xff\xfe-r\xcf|5\x1eD#\x00L\xdd\xbfrC\xfc\x17y\xd4\x98\xee\xd3U\xae\x01V\xec`\x0b\xcfT:\x00\xe8\xb7#\xed\xaa?\xc6\xb1\r\x92\xaf\xeb\xc7\xdc\xa0\x17\xf7F\xadF\xed\xa4C\xfbm\xdf\xaa\x1f:0\xe7\xa2/\x82\xdb\xb5\xe8\xbb\xd0\x08\xf0i\x99t\rT\xe8\xe4\xb6\xc3U\x90rCFb\xbd\xeb\\\xa2V\xda\x9c\xdd$2\xe2\x86b\xefZ\xc3=*\xcf\xd82\xbb\r]2\xdd~\xbf{wM@B%~\xcf\xe3\x97\xb0\x14A\x90\x8f[M\xf8\xda\xb3\xf3V\\\xec\xd0\x84~\x16\xc5\x06[U\xd0\xeb\x1f\xed/\xd3C\xd3\x8e{\x99\xc5\xcf\xf2\x98\xdf@\xd1\xfc\xca\xee\x9f\x16rd\xacj\x07\xcb\xf6\xb0>\xa9\x14\xe0\xb86B\xb4`\xac\xd85\xb6\xc8\xc5\x90\x0e\x83\x9c,\x19\x8fk\xe5K\x17Y\x80\x06\xc3\x99U\xbd\xd9_J\x97\xfd\x88\xd5\xa8P\xccA\x04<E\xe4\x14\xa9h!\'\x7fNO\xab\xef\xb9M\xd0\x0f\xc5\xda\x06\xa7B\xb0}\xb1\xa0\xae\xc7\xf2@+m\xfe\x83\xd3\n]\xfb\x81\xcb\xe2\x81YL\xafO\x81\xb7\x88\xcd{C\x10-y\xac\xd5|\xe9H\xba\xcfo\x19\xe6>\xc4\xd9\xad\xbe\xa2\x08\xab\x0e6\xce\xe4`\xcb\xe3\xe0t\xfeZ\xa7\xa0 \x86|\xb1\xa4M\xf9\x12*\xda\x0c\xd4\xe8X\xd8\x94\x04>\xae\xcb\xcf\xb8^\x9bT\xf3\x0fj?\xee\xbd~\xa0\xa4w\xec\xbc9\xe9<\x884\x93\xf7C\x1a\x96\xb3k\x9aG\xc0\x1f=\xf0*\xc8e\xbdU\xf5$U`\xdf08]2c\x0b\x14\xa4\x82\x0b\xee\xc3G\xabc4F\xf0\x1d~-\x0f\xeb\xeaj\xfd\x12s\xe8S\xf6\xb8\x8d\xe6\xa2\xaf\xab_p84BUk\x86\xf7\xd4\x1c\xe8g%J\x87R\x80\xb1\x10\xe3\x05\xd9\xddm\xf3\xbb6J\xcd\n?\xb8\xac\x18\xb3#\x8b,\x97\xb3|\x80\xc9\xa8\x8174\xfd\x9cY$\x1a\xc3\x05_I\xd1\xcc\x03\x00\x89}\x1c[\xa1,vTh\xccC\xefH\xf4\n\xd1\xb3B\xff4\x9dg\xe99\xf0!\xf3K\xc5\xe7\xe1\x83\x94Mu\x8aA\x04<ShW\x95\xbc^\xe2\xc5\xdc\xc2\x0f\x0c\xe9;\x07z\x9b\xc0$\xbf\xdb\x0c\x99\x98\xf3\x80\x937YrT\xf7\xe8\x82GCI\x9c\x12rH\x18\xebN\nqq\x13\xde\x91\r\x8b\xeb\xd5\x02\xfb=\xe42\xeft\x1f\xd5\x18S\x8f$s\xfa\x1a\x08\xa5\x07\x07\x16\x00\xa5D\xd32\xf3\xc4\xab=b\xf9g\x1d\xfd4\xe9\xe7\x94\xed\\\xae\xce\x82\xb0\xa4\x8fQ#\x92\xbf\xb5Q\xe7v\xab(\xfb\x01]Xa\xd5:\xa19\xa2\xb6\xb6 \xc3\xb0"\xa0{\xf3IR\xac\xab\xe3o\xa0\xb0/\x80/\xd3\x15\x0bY\xea\xfd|\xb78\xee(}\xca_\x91\r\xe7\xb4\x9c\x90\xf2\xd4\x1b\xbc\x1f\xb2\x8a\xe0\x81\x91\xb4\xb6\x8d\x0b\x19\x81J\xb0ig\n<\xe3\xb5l*B\x03%_\xdf*\xe5e\xe1\x83\x99\x91\xa57+\xb7>\xf4B\xddK\xc2d\xb5\xd638\xf9\x90Q\xe8p\x9a\x1b\x036HFw6\x89\x1f\xac\xba\xc7gb\xf6\xc0\xd6\x7f\xd2q\t}c\xef1\x93D[\xc4SD"w\x88\xa7\x0e\xac\x06\xfa\xe3J$\x9ez\xe7\xbb\xd5~4\xb1r@`\'SN&\xb1\xac\x14\xba\x12\xa5<\xde\x8a\x1e\xf4\xe7\x1c\xef\r\xca2\xb1B=v\x9e\x89a\x97lU\xa1y\x01\xcd\xdf\x93o\xcf1V\x93\xb3eR\xb3\xcb\x8aa\x95\xc1\xf3\x1c\xba\xa5f\xfa@1\x1c;\x96\x15\r\xff\xdb??\xf0\xfd\x00\xa4\xb6\xacg\x86q\xd2\x99\xa4\xe4\x7fA\x16\x0e6\xb6/\xfd\x98\xc0\xddl}]\xb5q\x8b\x8c\x9a@My\x95\\$\xef\x01\xc0>\xce\xa4\xcf`\xbf\xb0\xafBNWO\x89\xe0$\x9f\xed\xc2\xe2\xc2P\xd4 \xd0\xe9[\x8c\x13L\xad\x8e\x00\x81\xc94T\xd5[\x06#\x9a\xcf:9\xaea\xe9\x94\n#\xbaM\xb6R\x99\xddV\x8b\x1c<\x1f\x0f\xa5\xa8\xf2\x15\xbb\x06\r\x12\xee\x86Q\xfcd\xce\xef\xbe\xe5xZ\x8c\x05ZS~\xcd\xce%y\xbbMy\x9e\r*\xd1!\xf1\xfa\x07dH5\x01\x976s\x063k\x92\x95j\x81f\xb8\xabm\x8a\xd7\x11\xa9\xf2o\x01[7s\xea\xfb\x1cUp\xe8\xe1\xdd\xcf\xbe\xd9\r#O\x9d\xf3\xab\xd3\xe0T\xd7\xce\xc8A\x16\xa5\n\t\xe6\x81\xe9\xf1\x9e\x19\xcc \xc7\xb3Y\xd2v\xd9\xa3\xc7\x8d\x89-\x86uO\xa4\x1dH\xd4\xe3\xc4\xdc\x07G\xd8\xb4\xf0\x05B\xcc\xcce8N\x8ci\x9e\xfc~I\x8b,\x05\xfa\xe2D\xb4["i)\x80\x7f\x1d\xf6u\xcdL]\xe1\xd7\xe2UNS\xca\t\xe9U\xf5S+\xa3p\xa4\xf3\xaf\xd6\xd6x\xee\x0b\x13\x1a\xa4f\xc0"\x9f\x8f0z\x92?\x8d\x95\xac95\xda\x06p`\\\xd7\xf3+\xd4cN\t\x06\xcc\\\x987\xbf<\x0c\x92\x87\x05\x80\xad\xc1\x8f~}\xff\x8d\x85;\x18\xbd"bT\x12n/`0\x89V\xc3W\xa4\x9biY\xb8\xf0\xdd\x15~\x86d\xb69n\xf8\x0f4\xd3\x88\xfa\xaedX\x8c\xb3\xe3@\xb5Fs#\xadB\xdf\xc9\xbd\x9e,.(e{\xbf\xdc$\xad;\xb5\x80\x12\xf6w\'s\x17\x91B&\x16\xfc<\xecL6\xd8[.\x03\xe5\xb7\xe0/\xf6\x89V\x06\xeaA\xe3\x8c7\xabX\xde\n\xb2\xf3p\x11g\xfcL\xefV2\x96\x14,h\xff\xe0qks\xd2\x93\xb2\xe3\x91lA\xfej,\xce\x98\x84\xc5x\x8e\xcc\xa0\x8e\xaf\x05\xe0$.d\xdd1\r&v\x02\x95]\xcdixT\xde,\x19\xa8\xefXW\xc2~\x95\x92Q\xaf\x94?\x9e5\xc3.N\xc8uw}\x12\xe6\xa79\n\xb6.Afg\xcd\xea?S\xa6\xd0\xe0\x8d{v\x0c\xf6m\x83\xf6\x8a\xbc\x15>x\xa4\x88\xb9Gg\xeb\xa5\x85G\xf8\x02\xd9\x06\xae\xd0\xce%\xd3\xcd\xe2\x18n\xc1|Q*^a\xe0k\x0b\x128\xa1\x80\xd4\xc5\xc5Q\xc7:\xba\xb34\xd46\x8a\xae\xbb2\x8ch\xe0\x90\xf9\x95(69k\xc9\x97o\xc1E;L\x9a\xdb\xa1\xdc\x91\xd0\x9b\xfcs0\x95\xfd\xd5\xe4\xca\xbe\x89>0\xfc}\xfa\x8f\xed\xd9A(\x0c\x9al\x8eK\x9a\xb3Y%j\xf9\xa4=\xb2\x94\xefW\xf1*K\xac\x15Dy\x1e\xecFd\x0c\x1bigZ~\xd0L2\xfe\xfc\'/U\xd3\xbe\xc6\x8f\x8a\x8cv\xa2\xf1?\xac\xdb\xa1\r\x1e\xd6\xda\x0f\xf4\xfa\xaf\xb8c\xb3\xb9\xaaF\xfav\xf9\x10\xfb0/\xcf\xcc\x15\xe0\xc1\x98\x896\x18\x0e\xb2\xa4\xf6;\xbe\x8b\xa1@3P[N6\xd2\xd7E\xcc\xff\xce\x9b1\x89cf\xb2+yu\xd9\xd0\xf3\x12\x10\x04lb\xe32_\x8c\xa5\x166\xc4\xdf~\xb2V"\xbf\xd9\x0bla\xb8\x92\x8e\xa0\x890\xaf\xd6\xf5\x81\xd21\xfe\xf5\'c\xba\x91\x9b\xc1\xbc\xe5\xc7\xbe\x91\xf9\xd6\xf0?\xdb\xb0*\x97\x99\x7fm\xc2\xa9\x9f\x02\x0ec\xe6\x91\xf9\x10 \xfd\x11^\x0f;\x85\xeb\xb6[`\xca\xc3\x01]\x15Y\x84\xb3\xf4\xcbge^2\xe5]\x04B\x16u$/Gv\x1e\x9f\x8e\xe9_\x9d\xd6\xa5hH\x17\xb4\xff/\xcf\x18\x1dA\x10\x16D\xd3z\xf0/\x1f\x85\xdd\xda\x11\x9c\xf7\xd4<M\xab\x01r\xf7\xf6\xd1\xac%Z\'\xa7\xa4\xc7:m)Y\x1c\xab\xae\x0b5\xac\x9b~\xea\x92\x90\x81<Pm\xa0\xa8\xc2\xceV\xd9\x12\x18\xc8H\xc2\x80\xc4\xdd#\x1bP\xef\xd0u\xa5ME\x91\xee\x8c\xf0|i\x12\x8d\'\xaf6\x98N\xfd\xdf?\xf7#\x1e`\xc2\xf0\xad]\xce\xbbcG\xb0\x91\xd1z+\xc8\xea\xb7\x92\xed\xec[\xd1Re\xc1u?\xd2\xff7\x11%+\xf6[\xdc\xfb\x1f\xf7\x0e+\x0e\xc9l\x03\x04\x03f\x00\xdd\xa2s\x07\xac\xa6\xaex\xeaI" \x8c\xeaS\xb9i\x02\xd4\xdb\x03\xecu\x86M\x8b(\xfad\x11\xe1\xceb\xf6\xc8\x83E\x95\xd8!>XY@\x1e\xfd\x08\x85=N\xca\xa81S\x84\xfc#\xb0\x94\x8d\xb3B(H\x9b\x97\xdc\xf2)\xe2m\r^\xccp\x8c\xe7\x90\xe9\x83\x007r\xf8\xa9\x8b*\xd0\xadF\xc1\xd8\xf9\x9d\xb6t\xa77x\xc91@\xa0\xb2a0\xe0d\x8aX\x8c\xfb<.\xa4ur#\xde\xbb\x99C\xee\xd4VI\x93\xab\x01\x0f_\xf2\xa8\xbaS9\x05Br:\x04?\xd4`36\xa8(\xb0\xbd3\xed\x10k\x0e\xdb9\x1d\xf1\xd9\xd9\xdfGH|\x9d\xad\xce%\x8c\x10U\xa3\x97>\xbb\',\x1a\xc8\xe7\xe8?\xf8"A\x14vN\xc2\xb4H"\xdae\xd7\x0bD\xbcG\x01\xde\x9dJP\xc0<ny9\xa8\xc6\x97\xe6;\tA\x05f\x86\x86o[\xc2\x9f\xa1\xe2\xb0;R\xd5\x92\xe3\x07\x15\xbc\x00)B\xc7ju\x16\x05\xa3\xfc\xab\xd9\x02\x99<\x1c\x9735\xf4S\x976\x8aZD\xee\xb5\x071"\xabr\x90\xf3\x85\x88\x0f\x12r\x94\xf8\xef\x9cB\x13\x93\x08\x80\x7fo\xa1\xee\xad\x1ak\xd3\xa7\xb8\xeaZS\xa4\xbe)\xb8&\r\xf6D\xe0\x0c\xe6\xf4\xc6i\x10\x0e@\xcc\xef\x94T*\xefE \xab\x9cy\x92\x1a\x8b\x80\x96\x00\xbd\xed\xc9\x9d\xd8nN\x99\xa3\x1e\xba\xa0\xcbD\x91c\x99\x9cn\xaeD\x11[\x0f\xe3\xbe\xe3\xc1U\x84\x84\xd1\xdc\xe1M|ap6\x82\xbf\xf1G\x8a.\x12\x82\xfa\x8fTYIm\xea.\x00\xec\xd4p)\x14\x94&\x8aD\xe1-\xb8UM\t\x06"{\xc8\xb8\x02;\xd8E \xad\xda\xac\x869\x10\x9d\xcb\x89\xa5 L\xdc\xb9\xb9\xe7\xa4\x80\x99jt\xa9Wt\xbc\x92\xeaWT\'\xc5)#\xfd\xd9\xf4\xc9\xc8\x92\xa5N\xd3\xa7s4\xb2\'\xee\xd7\xdc\xb2\x85\r)\x96\xec\x15\xf2x:\xcd\xd5\x84\x19/\xd0\xda\xab.\xdd\x9168\xadA\x9f\xfa0\xb4\xf8\xdb\xf5\xe7\xf3\x13\xbf}\x05n\x1a\xfc0iD$\xee\\\xb8\x88\x01\xfaQ\xb4\x12\x01v\xa2\x01\xcc\xde\xa7\xf7\xe6\xf50\xc9\t\x90\xa4\xef.\xff\x10U0\x8a\xc6\x80\x9a!\xb9\xfdJ\x9c\xdb\xec\xa0)\xae\xf5\xc2#\xb3!=+\x1a\xedHUC\x97\xa6\xf8\xb8I\x86\x8a\x89\xae\xad\xa5P+\xea\xece\x05Vp\xe5\x18\x8a\xb56\xbc\x0f\x08o$\xfd\xa0\x1f\x7f\x1c\x9f5g\r\xc6\xaf\xa27\xb8\xfdG\x03\x83r\xaaTD\x1a@l\x0b\x16Ii\x146c\xf0\xc7\xe0J\x83\xb5\xb9%\xeeT\xd2\xbb\xac\x82\xdfj[\x9fUrJ\xf4\xe9\xf1|+ \x1b7\xd4\xa8D\xfe\xc5}\x98\xa4\x9b\x94\xdf\xa1\xe0\xbf`\xa0o\xdbpt\x9b\x8e\xe1\xb8\x1e\xa5D\x13\xd3\xa4r\xaa\'\x84.\xd9u\xf3\x9a\xc2(8"\xb1M\xcaG\x89G6#\xd5\xfdk\xccH\xd1\xd1\xf8\xb9\xbc\xf4/\x18\xb9]VR)\xa3\xe2\xe1\x87\xf9hQh\xb8\x9c\xc7 Z\xe8E\x9d\xbd\xfb\xe7F\xd1\x03P\\\xfer\x9d\xd5\xb4\xfe\xaf\xce\xc3\xd6\x9f\x11&e*Q\x13\xee\xee\xa0%\x9eM\xbde\x7f\xaf\x83\x1b\x03J\x99\xf7\xb5\xcf\x93a\n\x83\xc9\xb24\x05T\xb8\xbc\x99W\xa8v\x84!\x13h;1\x04p$8(\x99zV\xc6i\xff-\xcb\xc6\xa6N\xfev\xd7\xdcY\xc2@XL\xa5_\xcf\x80p\x00\xa4\xa54M\xa4\xf2\xd60\xdd \x95\x1dB\xf0\x83T\x83\xf7\xb7W\x89\xe7eu\ni\x9a\x84Ao\xb4%\xc72\xe6\x8f|\x10*\x00\xccJ,\xdd\xc0\x0eEU\x08\xc6\x12|\xff\xdd\xc4B\xc9\x1e\xc0<\x96\xad\xefi\x85\x02\x04\x80\x18\x9ek\xb0\x0f\xf1\xfd\xeb\xcb\x8en\xba\x82V\xd0~\xb5\x8ctJ7\x1bg\x1a(y\xad\x05\xc2\xfc\x1d\xc4h\x14\x8b\xf2\xd6u\xe4%\xbef\xf56\xe34\xc2\xc4\x94\xbeK\xad?\x8eY\xd0E\x06\xa1\x92e\xa0@\xe7\xf6\xf4\xd7\xd0\xea?J\xb1\x00\xb0\x96\x8e\x93J\xb2\xe1zO\xd5\x92\xef\xa7\x81\x1a\xcf\x1f\xc2\xc3\x13Z\x17e\xc4a\x9d[\n g\x97\xd4\xb8\xd3\xf1\xb7ub\xef\xa8\x05\xdd#k/\xbb\xdd\xe2\xbe\xa8"j\x00\xf7\x18\xae\xe2|\xce\xbe\x95z\x83\x9fG\xba\xb1\xe4 l\x8e\xd0\x96\xc7\x01\xf8\xba\x01S\x87\x06\xbc\x15\xca\x1e\xecZ\xba\xbaV\x19\xda?\x1e\xe0\xd2\xf1\xe1[F"8\x8e\xed%pX\x91Y\x82\xe9^\xcbq\x1e8\x81\xcbfgm\xf7\r\xcc\x02uy\xf0ID\xa8\x85)\x05\x15\x12\xc1\xc8\xa7\xe5\x08\xd7\xdb\xcd\xaa\xdf\xa8gC|\xea\xb6e\xcd\x0e\xfa\xcb\xe7\xf8\xeagf\xc5~\x9a\xd5\x0c\xed\x06S\x94\xdb7~\xb6\x9dE\x7f\x17\x1cd\x19\xe4\x04\xca\x17e\xbeb,G+\xfdm|\x86X\x8a\xb7E{\xcc\xdc"\xa4>\xfc\x1e\x0e\xf0V2\xff\xadU\xed9\xd4\x10\x15\xc0D%\xb9 u\x10[u\xd4\x0fk\xb7\xb2\xff)Vb\xb7\\!\x96\xc5\xcd\x1d&\x97\x9a\x12\xf1\xecU\x85/\x99\xa5\xd0\x03\xb0\xc1j\x89\x1cQ\xd102\xea\xa0\xebB\xbf\x17\xb4>\xe9\x17|\xe1\xcf\x9b\x88u\x84\xf4\x139|<\x91\x00\xf0\xb5\xb4?\xbb,\x9e\x02\x95d\xf2]\xc2\xc8z!m\xe1\\QW\xba\x8c\xba\x85\xdb\xa3\x10r\xe6z5u\xda\x04Y\xec5\xa6\xe6O\xf4\xb5\xf9\xe2\x9d\xef#\x16\x96}X\x1d\x7fe\x82t\xcbV\xa3\xc4\x8a\x01\x19\xf8\x17\xce3\xd3tu$~\x9c\xe7\x80\x9f|\xaa\x13g\xa8\xd8\x95;?\xc8\xe6\xc6\xda!{0\x93\t;L\xb7\x8a\xa7K\x1e\xa1Q\xa6\xc0\xaa\xf7\x90\xed\xf1\x94Us\xbe\xdb\xc7\xc7`\xcd\xe0\xad\xdfv\xda\x8d\x0f\xb0y\xca\xcbb\x975\x12s\x1fW\xeas\xb6\xb6f%\xf9\x9c\x13\xf3\xa8\t\x19\x1f\xff\x16g H\x1d\xd6\xcb\xff\xed\xd7ED\xfe\x04\xd0Tx\xff=\x13\xc9Ra\xa8-<\xcf\xdbK[\xb2C\xbf\xcb\x13\xfc\x16=a\x9b\xbc\x96~\xa3\x07\xe0K):\xa8\xfb\n\xbe\xa2k\xba\xc9: :\xc7g\x12\x8f\xdf\x8e>\xd8\xd5\xfd\x98\xfeZ\xeflz\x8f\x05\xd7\xa9\xf6\xc9\xee?\xc32b\xf80\xe6\xef\x86\xd9P\xacB\x00`\xdc\x9b@O\xb8\xfd\x83\x16I\\7X\xe3\xb8\xb1\x8c\xeb\xd7=V\x80\xdd\x0be\x15 \x1b\xa2Z\x88\xc6\xd6\xfe5\xc2\x0eT\x02\x87C\x93Of\xe0o2\x0f\x1a\x06}\x9c\\N\x92\xbbT\xac\r\xaf\x98\x05\xa9\xcbthRk\x13\xb6\xc6\xc5\xed\xdc\xbb&\x9e\xe4\x19\x8c\xa9\x11)\x08\xf1}#\xce`\xe0Ff\x1b\x95\x93/\x88\x05P\x1d\x91\x07\x9etX\xc1\xab\x8aY\xe2\x83\xf0\xbe%\xc7\xcd\xe7~ \x92KO\xb9\xf9\xb7\x97\x02\x10\x11\xa6\xbd\x1b\x95\x00\x8fc\xf5\xf4T\x05\xbe\xf2\xba\x9e\x95E\xd6\x1d\x05}\xbfh\xd9n\x1a)|\x04\x96\xcd\x0cL\x82\x80\xb9\xfd\x9dp\xa2\xf1\x1e\xf87;X<\xf2\x96\xa0\xb4\x96\xf6\x1a;\xef\x1b6\x16\xa0,\x02\xf2\xd5o\x86\xb4\x99J*t\x88Kw\xc2\xa2\x17\x9e\xf5U\xa4\xe9Ef\xf0\x127\xd8G|8\xb1]\xbe\x90-\xa2\x08\xf6twJ\xf3z\x1d\xb2\x96C\xf8@\x0f\x13\xebxN\x90l\xfc\x8d\x9c\xf0\x1b%RFTs\x8fw>\x9a\x02g\xd5H@\x99\xe3G\xa8r\x91\xc2\xefA\x1b0\x05\x01\'\xf2\xef\x13\xca\x04\x84a\x1d\xc0\x05+\xfa>\xd10t\x9b\x13%\xb1,\x0b\xb6\x06\xfb\xb9\x8c\x06-\x8a\x96\x98\xf3K\x8a\x81t?\xebJ\xd0\'\xe6\x8b?\x06\x99x\xad\xa2\xa6Z\xef\xd8v\x08\xb7\xb1W\xe9\xd0\tM\x89\x16x\xe9\xb2\xa8\x93\xeeQ\x16\x89\x86\x05\x9e\xa6\xdc+\xdf\xc8c\x88\x8c\t8\xb1~\r8\x9e\x1d\xce\x17\xe9\x0c\x7fP\xd3D\xfe\xd1\x0e\xafo\xe0\x16\xf6\xa2=\xdea\x9b,?/<\xc6bnZl\xba\xca\x03\\\xd0]\x10\x8b\x08\xdbG\xa5O\xd5\x12e\xe68\xc2\xcb\x93X\x10.\x96\xed\xfa\xd9\xff\xe1-\x0f\x85\x07z\x80\x9b\xabNY\xb4\xf6\x8c\x1f\xaf\xbb\xdd\x08\x8a\xe9\xd8\xb7\x93\x1d\'\\\x9c U\xfe\xb1\xc1)V\xec\xd5\xfb\xc9!\x9f\xe5Z\xaf\xfa+\xf1|\x0e\x96-T\x19\x1ae\x11/\xfd\xac\xab\x05\xc0\xbb(?\xb4uM|:\xdcO\xae\xeb\xed\x92f\xea\xdaJ\xdbi\x17M:\xe0\xea\xab\x98\xe2\xa1]\x0f0\x9b\xb9{\xe5\xc9\xe9\xeb\xd5\\\xa2\x12,RB\xb8^\xfa\x8b`x%\x91L\xd8\x14\x04\xbb\xf4\xd4W:\xdd\x17m^j\rq\xf2\xfcH\x1f\xd87 \xc9EI1x\xbd#\xa8\xb4\xdb\x8e\x85\xa53\x9d\x82\x13\xa0!v{\xba\xeb\xb3\x9b\xad[\xf5\x9dU\xa7nZ!D\xdfC*\xfd`bhz2L\x00\xed\xe2\xc7\x83\xb9e\xbb\xe12N\xae\x8c\xf1Y\x95iY\xa4G\xbf;H/Q\x98I\xcag\xf4M\xc4\xab\xd8wv\x82L\xe0Ik\x91\xd6db\xf8\xa6<2\'4\x8f\x8e]X*\xb62\x15\xf8\xfb\xf7\xb7*\x08L\xe2TI\xe7\x1a\x92\x9f\x96T\x9d\xc6,/\xa7\xeb%7\xee:\x97wX\x95!h\xa6P\x9e\x93\xa7R\x9e\xaa\xe8\xe2\x1bE4g{\xe4\xe9\x0ce\xfaNa\xbb\t\xf4\xa1~\x17\x07}\xb7\nh\x18\xb6\t\x13s\xddB\x90\x98\xff\xf5\xec\xea\xed\t\xab}\xcf>\xea\x05EQ]c\xab\x94E\xb2\x8a \x1e\x8aA\xc4\x9fS>cwF\xbf\xe4\xb5D(\x0c\xe5\xc2\xa5\xe6\x0e]\x03,\xc11\xe6L\x94\xcc\xa9`-B\x16\xd2?\xcf\x0cX\xdbi<\xcd\x96\xcc\xb1\x86\x983\xa3k\x91\x91QK\x00\xbc\x02\xb4cM&\x10\x97W\x11\x81\xe2\xdeh\x9d\xb9w\xb7/\x82\x1b^\x83W\xa4\x89\x04~5\xb6R\xb2\xee+\xfc\x82\xd9.\x7f\xeb\x06\x90j\xef~f\x9b\xb6HT\xc3\x06\xec3\x04`\xbb\x84\t \xb4,\xc8V.\xe4\x83.|\xd6\x84C\xd1\xd5\xf4f\x8a9\x03\rb\xfe\x97\x89\x00/\xa36\x85\x01\xa0\xb08|\x01\xf9\xd2\x11zR\xf4\xc7\xa2\xe3X\x07\xa51DQ&\xec\x90\xd9Y\x96r\xca\xbdX(\xe6\xe3c\x12\xb2\x1fv\xecvY\x8e\xaa\xcc\xda\x10\x19g\xaaf\x1d\x83b\xa5L\x02\x962\xf5~N\xd0\x0c\xad\x1b\xa8J\xf2\xc0\xe3\xddR\xef\xe5\x8f\xf8\x07i\xa7\x8d\x99ej&\x01O\xbd\x00&\xb8ur\x95^\x8e\xae`\xd51#NZ\xa7\xb15\xce\x94\xcf!\xaf\xab\xbaD\t\xf5\xc2q\x08r[\xbc\xc0\x98[E\xe9&\x84-\xdf\xd8\x82V+l\xca\xc9&`F\x02j\xadEf\xfd\xde\x02\x15Ao\xa9j\xa2zxT62\xd3\x9cnV_g\xef\\a<T\xc5F\xf2\xcf~\xb4qa\xe5\xa0]m\xd36\xde\xdd"\xd7/D\x1f\x9f\xd0&\xae\x0c\x1e<z\x93\x7f\xa8\x07*\x84\x87\xa2^|y\xf8p\x86\x88+I\x9b\xdbc\xc0\xdfa0\x18\xde\x05\xebI\xa2\xdd\xdc\xb2\x8a\x18\xb6U\x89\xe7$\x8b\x82\x051\x16\t\x10%\xb4 4\xc0\xcaF|\xeeR\xa6\x88\xb0\xa7K\xff\x89!\x1a\n\x81tu\x8d\x82\x03\\\x8f\xfa\x92\xe59\xe0z\x00\xf5G#a\r\xad\x9f\xcb\xde\xec<\x9c\xd34>a%0[\xbc.\x9c\xcer\xc9\xcb`\xb8[\xf0\xb1R\x0e\x00\x97m\x0fm\xffT%\xef\xf9<\x84\xc7\x9fg-p\xe9\x03tGN=\xe3\xdd3K \x14\x86~\xd8N\x81\xb9\x19\x98gpMU>\x037<o\x86[ v8/h\xfcZ}\x007t\xc9\x7fM\x7f\x83\x07\xe6\xbf\xce\t\xa4`\x98\xf7P\xec\x96\xcbgOK9\x12\x9f\'\xad\xec\xb4$r{\x99\x0b\x97\xde\x0ek\xa8\xb8\xe5\x0fA\xaf\x8d\x06~>}\xa9\x1f\x8fh\xf8]z\xb6\x89\x02S\xc1u~i\x91\xa3q\x8az\n\xd9\xdb\xa0\x04\xd3\x8c\xc1\x15?1\x07k\xddX\xa7f\x81\x90\xb4\x1d-Z\x92\x1fH\x01\x00\xcf\x81F\xbe\xf6R\x98F\x00\x89\xa4\xf6\xbd\xec\x06\xbc@\x95C\xaa\xde\xd1P\x1bs\x1a\xe8\xa1R\xda\xc4\xd7g\xa5\x16\xd7\x05#\xc4\xc2c\xa4"_V\x83\xbf\xc4\xa9\xff\xc3F?\xad\xd8|\x00P\x94y?v\xba\x04\xc8&\x18n1z\x1fQ\x07^!\xac\x1dw\xca\x9d4:\x83\xc6\xda\xf1\xa3\x89\xf0w\x1b\xc1\x8f\xd9\xb8\x87\x9b\x92\xd6<\x0b0Ak4\xf0r\xf9\xd6Qr\xf2&\x80aPx,\x8e\n\xd9\xd8\xccp\xbcN\x03\'L\xb4\xa9\xd2Q\xe66\t\xd2\xbci\x1d)w\xce\xec\xdb\xc43s\xf6\\VS\x8e;\xa9\x1ck\xbaG0j\xe4|\xa4\xe9\xa2*\x07k\x82\x86\xe4\xe3\xe7\xebt\x14\x83g\x9d\xb5\x15\xad\xa8\xc9\xea\x1a\xb6\xca!\xf6\xff\xcd)Ix\x80~\xcc\x9f\x8b\xa2\xd6\xbb\xcbd\xd4\xaf\xa0\xe4j\xbdo\xcbSb\xc4\xbd<\x0f[\xa5\x7f\x025\x9c!b\xcf\x14\xfcq\x1d\x98D\xd0\x0c\x19?9\x9b:\n{PM\xcd;Tl\x0b/*\x91\tuGllPk\x8eX\xc0\x84\x12\xc3vG=\\>\x16\xc3\x97\x90\x8eGj\xb7\xa7\xdac#wJ\x7f\xb7d:\xfb\xd7\xe0*\x97\x00\xf9{hH\xe6\x14\xb7AO\xb11\']\x921\xab\xa3Pc\xc1B\x8a\n\xbe\x18\x17G\n,\xc7Hf\xaf\x9c`Z\xb6\x94\xac,\xd1\xd7iV\xbaX\xa1F\x85&q"\xedC\xb7\xb0\xae\xcf\x84"\xc6\xf9\xfeo\xa3\x9e\xd5\xb8}\x11\xb1L7h@\x81\xf0H{\x07\\\xb9+t7\xc4\xff\xb4dsW\xed\x8f\x89\t\xd3\x03\x04h%"\xf2<\xec\xea\xe5\x93\x1e\xb1\x1e\xab\x7f\xf4W\xcc\xd6\xdd\xd5\xbe\xcc@=\xd1\x1e\xc6Y\xed[\x86Y\xe4\xae\x19S+\xe4N\x049>Gb\x89\xac\x06\xfa\x88\x8f\xd2\xc8\xfe\xb0d\xf1\x0f\x87\x92R\xec\x97Fn\xf2\x80\x84y\xd9b\xab\x1a\x0b$\x02y=\xf4\xe7\xdb\xd9*;\xf3\x9bL\xfe\x83\xb9\x95$Z\x97]\xb0\xd6\xdc\x92\x89\xf0r\xe1K\xbf\xff4R\x8d\xa6\xce7\xa0$\x99\x7f\xbd\xaap\xff\x05\xcf\x00s\x18\xe9\xae\x98X\xafT\xc6!J\xf8\xfa\xe9\x96\xf2\xf5.o\xf4\xfbsX\x1cr\xc1x\x0b\x92\xbbC\x97\xd1C\xae\xb3\x06\x80^\xbf\xf3~OU;\xe3\x89\xde\x81\xfd\xb7\x81\xa3\x17\x07HR\xba\x05\x18\xed\x8b\xc5\xee\xd0\xc3\xbe\xef\x9b$:\xf4\t\\\xbbm\xaa\xaat\x8cn9\xb4\xa6\'\xce\n\xdccQ*9v\xfc\xd5\x84\xb3\x0e\xad\r)\xb7\xd8n\nr\xdf&P \xadG\xa6fl*`\xde(ggl\xbd\x16?h\x1fH/\x13\xad\xce~`\x9c\xb2J\xed(\x1d\xb4P\xeez\x17\xc9\xe1Cii\'\x02\x11\xf5\xf1.\x13#!\x91\x80\xd1\x02\xd3\xb4\xe4\xedD\xd7\x11\\\x0b\x99\x1d(`B\tM\x89\xf6\xe6\x8fpC\x1e\xba\xfb\x07\xa2@\x1f\xb3\n3\x890]\xb5}C\xe2\xe9\xa0-TDl\x93\x86\xa4\xea>\xa6\xfa\x94\xff\xa6\xd4\xa1o%4\xf3Ej\xe1l_\x8f3\xfd[Q\xcc\xdaX\x01X\xc3Z\xa41`\xaf\xa7v$\xd5\xf59\xea\xe9Ol\x1c\xfc\x9a\xfcJ+h\xf3F\x1ag\x13\xde\xfdep\x94\x89\x08\x14 [\x90\xc1\x9da\x19^+\x94E-\xca\x9e/\x93\x1d\x16\x98\x07j\x02&\xdf%)pF\xad\xf8]\xe0\xa0m\xc3\xe4\x85\xe8\xbbhf\x19j\xff\xec>">\x91\xd2\xbc\x86\x12-\xbd\x83\xc1rJZ\xb69\xd4\x0c\xa2\x7f\xc1\xa8\xcb_]\xbd\x167\x03\x9a\xf7\x07\xb3\x1e\xdd\xf4\x14.3r\x03\x87\x1e\xb6B8\xa5\x8f\xb2\xe1\xc1\xef\x8b\x99\xe3\\;\xd4#jx\x9eun{\xb5\x17L\xf9\x8f\xaa\xa8<\xf1\xda\xb4\xb6Ti!\x11,\x94\xe5\x9e\xae\xe2\x02\x97\x97\x01\xc3M\xa6\x96\x8d1\xc4K:\xe7\xae\x00\x00<\xb1\xd8\xf0\x97\xeck\xe3\xfe\x97\x0f\x1a\x8a\xc5\x11\xd8$|\x14\x9d|!\x1e"\x03^5\x16\x91\xb8K\x99yj\xa2\xaf\xd3\xaf@=\xc2\xf4@\xbc/\x19\x9a\x88#a\xdf\xba\xd5"q5\xa0z\x9d\xf1\x8b\x1f>k*\xf7e\x97\xa9\xeaC\x1e+\xf85_\x07\xe2\x94<\x80\x98^\xc3W\xcf\xc5\xe6]\xc2F\xe9`\t6\xc9z\xad\x0b\xf0\xc3\x82_\xc7#jdW\xaa\xbe\xd0\xb6DB)\xf7\x0c\x9b`\xf6\x06_\xf5m\'3k\x04\x9a\xeaY\xcc\x9f\x04y\xfc\x87o\x9a7f\xbd\x8d\x98Nd\xd4QU\xdb\x81\x89upN\xafK\xb5\xa0,(X\x07~\xc2\xdd\x9e0VI\x9e\x83\xe3\xf8-\x8a\x1a\xf1`\x97\xe1\t>R\x8a\xe5y4\xebv\x14\x8cR\x04\xee\xd7\xc5V\xa2\x17\xb6\x97\xe5~\xa7\xcaE\x1f-\x82`\xf4?\x9bDK\xfd\xef\xech\xf8s\xb3\x0fB\xe5\x96au\xc0\xf5\xe3\x8b\x96\nr\xb1dvJ\x94.\xca\xb7\x80\xe2f,\x91\x8c\xd3`\xa1\x18\x95\xd8\xef\x84\x95\x0ej\xe2"s\x8erF\xb3\xc4yo\xf4 \xa5\xf57\xc5\x8b\x81\xa6\xd2p*\x1d\x8f\x1f\xfc\xe6I\x9a\xf6\xf3\xc9\x03\x98\x10\xdb\xca~o\x1fEj/"\xcf\xf4_Jf\xc0P]7\xadd\xb5a\xab\x7f\xcf\x05c\xcb\xee`\x8cf\xe8X\xa4SK\x9d\xafc\x0f:\x9b\x1a\xfa\x19V\x8e\xcb\xb2\x8a\x85\xd4T\xee\xd8\xd4\x00d\xc7$=\x15\x87\xb7\x8f\x8b%\x9bBU\xdav\xa0\xb0\xb5\xb5\x90\xc2\xc5\xae\xc6\xd8\xcb\x84=\x85z\x98\xf2b\x84\xb1\xb2\x88|\x07\xd0N\xde\x02\xd8H\x95\xabN*j\x0f(\xc9kJ\xad\xbe\x94\xd5}\x984\xcceLM\x18\x07\x02\xd0\xaf\x8a\xc6d\x043\xc2e\x13\xef%\xd2\xeaR\xe5q\xf1\xcb\x01\xa6Lk\x12\xd6lK~\xf7\x16\x00i5C\x9c\x9cb}\x07pL\x06~\x1a\xf7~\xaaJ\xe3l{\x95|t\x8cp\x80@\x03\xb5xX\xbe\x85\xe8lg\x9b\xb6\xb8\x92\xb1\x86\x19\xf2\x01\xbei{\x85u\x1aG0\x06\xd34\x9b\xe3\xda\xd9X\xaa\x81\xe5\xac\x1e\xcaSL&%\xc9\xdf\xd1,\x94\x15\xb75\x97\xef\xe9\xd6\xce\xe5U\xe6\xfdD\xa1\xfcH\xc6\xa2z,\xba6\xe8\xde\x1aR\xd5d]\r\xf0\x89\x0c\x83\xef=\x07\x0c\x0b\xc37\x97F\x19\n*6\xa6\xb1\x9cB\x1b\xfbv\x1f\xb4\x8d\xeb\x15\x84\xed\xf7\x0b\xa2\x18f\x125|\x17At\x84Y\xcfa\xc1U\xaa\xb2\xc5\xc6\x06X\xf1\xc22z\xfa\xcc\xf8\xe6\xf5R\xfb\xd9\x13-~$K4,F\x94\x9dnj\x1a\x08\x1f/\xc6g\xbd\xcf\xbe\xdc)\xda/&\xa1ni\xbe\xbcJ\xf6\xbe\xab\xe3\xde\x17}\xb9\xefc\x92}\xf0\x13\x05?\x1a32D\xb3y\xb89\xe4\xbdhD\x86^:\xf7\x92c#\x10\xe4`DdCl\xafX\xd9\xbe\xcfWb\x9a\x08\xd5T\x8e\xcd\xdd\xc0\xb0\x9e\xcd\xd8%\x08+^]y2li\xdb\xcb\x18)\xd4\x97\xc7S\xcc\xd6o\xf5\xfb|\xc7\xc0\x14\xd4N\xd9\x90t\x1f\xd5\x8b8\xe2,uPu\x99\xf4\xe7\xc3\xb6\x02&\x06\xf6q]\xf7\xeb\xb9_R\xffb\xfbHn\x9a\xb8\xc4G\x9a\xba \xc2\xd8\xc1\x86v\xfd\x92\xb1\xc9\xff\xe0\x857b\x19\xf8\x1c\xde\xdf+<B\xd2j\xebm\xe5\xd9s\xa8y\x00\x17\x0f\xd2\xf8\xe3\xf7\x91\x03[\xd4\x05\xe4\xdb\xb9\x10\x91P\xf9\xe5\xf9\xb8{^\xd7`~\xbe\xe0\xef]\xbf\xa7\x91\tU\xb7\x83\xc3\xba\x84\x84\xd7v\xbf*\xb8\xd48\xbb\xb1Y\xdc\t\xd6^<\xba\'\xc5\xcf$2\xd0\xd3W\x16}\xf1\x14\xf3\xe6:\xb5\x87\x01QE\xb5\xa4g\xb1\xd0\r\x1b4\'\xa8\xe8\xa8\xe0\x90i&\x1dR\xa6\x10U)\xf2@j\xb6\xb1\xa9\x9f7\x07\xf9\xda\xfe\x13\xe7\x01\xd3\x0f\xb3\xc4ji\xaax:\xeb\x1dt\n\x84\xaf\xe5\xe3L\xb6\x84\x9f$b\xba\x85EI\xf6\x91\xd0R:\xa2\xfe\xee\x1e[\xca\xff\xe3\xb9\xf6\x84\x86\xdbg\x0c\x1f\xce}+\xce\x16\xf0\xe1\xaa\xc9\xea\x99\nSe\xb9\x87W\xe4\xfb\xc1\xc6\x08\x8cw\xebl\x909\xd2\r\xf4;\x8c\x9c\x96\xe4\x0b\xbe^\xac\xa1\xacyE\xc1\x96\x1a\xfb\x87\x81\xca\xf4p\x0e\xab\xd1\x7fqe\x831D\xc1\xc7\x0f\xa0\xf7\x84.q\xfe\xb5\xdc7\xa0\x13\x0cO\xa0\xa2A/\xbdZ\x0e[\xb7\x1f\xc6\x9cf\xd9\x87\x84\xc3<n\xd1Y\x13\xda4*\x1di\x00\x1e\xa1u\xe3\xb9T\xebzR\xef\xda\xf6\xc1.8L\xcf"\x19H\xc0\xe1\x8e!\x07\xafc5O|%\nC`\xa4\xf5\xc2gN/\xc3\x9cz\xa9\xe5\xdbSY\xceFH\x97\xba\x8a\xdb=\x84\x8a\xa0\xb8[\x15\'\x86\x8eO \xf0\xc4QP\x96\xb8\xbc\r\x17-\xf7\x84k\xeaX\xc1\x88\xce\xd8\n\xf9\xc2p\xa0\xb4q\xb3\x02\x86\xa3\xe6U\xa1p1\xbf\xe5\xd6\x99\xe4p\xa9\xd6\xc2\xa4\x89)Y\xce\xd6\xc4\xde\xc9\x92\xca)\x05\x1e9\'Q%^be\x9f\\\xcbx[\x10\xb6\xedQ:\xce\xe2\xd7\xb9\xf1\x95\x8e\xba\x8eCo\xf4\xd4k\xc3 Q\xea{\x9c\xe8\x9dLiimY\x8b\xe5\x9c\xf2\xf0\xd0\xf2:q\x8a}\xa5\xd6\x83i\x9a\xb3\x00N\xa0l\xc8mCDJ\xc3\xf3Z86kHm\xe7\xa4\x1b=\x03\x90\x14\x10z\xea\x04\xce<\xa2M\xfc\xeb\x80\x90\x89\x9b \xa47\xac,xy\xf6\x08K\xa8\xb2\x1cH\x8a*=\xfd\xf8\xdcu\xc2\x8d\x1a?\x95\xd5\xa5\xd4\x07\x93d\xdd\xdaHPf\xeb\xa3\x1d1\xc804\xee\xbd\xd1\xe3\xfc$oi\xb9m:V\xe7E\x19\x8f\x89 S\xb6\xaa\n\x19S\x06\xb5\x9a\x83b\xfd\x10\xf3n\x92z[U\xdc\xe6*,\xa6\xa8\xd2\xbd\xcd\xed\r\xbe\xdb \x02\x9a(\xcc-\xd1d\x9c1\x8a\x9f\xb9b\\\xf4\xce\xbe\x01\xcc\xdaO\t\x15(\xbdo]\xcbEM\xd5\x93\xc7\xa4\xbe9\x8e\xd6O\xf2<)"j\x88\xbc<b\xd1~\xf8\xfe\xaa)\xd5\x94\xfc\x1b\x84\xf0\x06-"\xb1\xf4\xbe\\u\xde\x10\xd8\xc5\xf19\n\xfbW\x04\xf9\xd6x\x9f|`\xda\xc2\xa9\xc6\xca\trE\x07\xe4S\x99\xb4!\x92\xc7\xaaB\x1b\xd2*\x10\x90bu\xf1\xc0V\x0b\xb6\x11\x0e\x14"}\xd4\xea\x82\xfb`r\xd5\xceZ\x95:F#\xa1\xc1\xa9\x10\xe4\xa0ml:\xd4\xb9r\xef\xf8\xa1\xe0\x9c7\xab\xf8\xe2\x8d@\xe3V\xda\xe6\x9f\x86\xf8PEw\x8e\xb6\x02\x7f%w%aX\x15f\xc6J\x02n\xb7\x9fA\x8f\xcc7m\xbd\x96\\#\x84\xb8\x9a\xa2Vt\tPmJ\x80\x83\xf4\xa5\x94\xe8\xc85A{\xb5\xb2\xdfLU)\x06\x19c/5\x97{\nG\xa0\x1b\x91\xee`\xe1\xe1\x9c^b#\x07N\xe4\x12B4\xfe\xa5\x9a\xb0\xee \x16\xa4L\x9d\x07u\xdaI\x95\xa6 \x9e+<\xfd\xb1\xd2\x8f\xf1\x9ca\xda,\x99Jl\xda?\xc56\xc0\x0c2\x17\x99\xb5\xee\x0b\xd5UB\x08\xd8$\x88R+$\tf\xb8\xe4Np$\xff\x12\x01\xd7b\x06\xa5\x1bvw\x83Y\x00\x13G\xf1`\xad\x9d\x94\rz0\'[\x9fn\x8d\x95|t\xd4\xd6\xe8g\xc4\xca@\x98@\x90\x999D\xd3\xc1OQ\xd8\xb1q\xc9\xce\x98Sp[\x81k\xc4\xcb_\xffq\x18A\x8f!\t\xe7y\xd40\xeaD\xac\xb8\xd5m/,!J\x08\xe5#|\xce\x96\\U\xcflY\xba)-:\xc8\xb3k\xdc\x11w\x9e\x98\xbd\xc0\n\x12\xe5\x1f\xa0\x881\x9f\xd6\xf0\x17C`\xdc\xf0y\xbd\xf7\xbdf\xe7\x87\xb9\x86\xe4\xdd\xc5\x1f\xa8\x1b%G\x8c"\x93\xf4\xff\xa8\xc0xw\x9b\xf0\ng\x90\xd8L\x83\xda\xd0k\xfc\x9eQ\xeb\xd2\x04\xe3\xa4E\xf8\x95\x1a\xbe\xbc\x14\xc07B\x96:\xde\x8f\x98O:\xd8\xc7/!I\xd3\xde\x8a[$\xe3\xdcJ8\x8e\xb0C,H\n0\xfa\xf9;#>\xa2j\xa0\rG\x10 z?\x147\xd5bj6\x8d\x14\\RtR\xf90\xf8\xf5\xec|Q\x83\x8e\\\x08=\x0c\xa9YfNCg<@\xbe\x10\xec]\x16Enu\x85\xcd\xcb7\xe6\xe8\xb9\xc15==\x84\x9a\\ \'\x86\x9d\xac\x0f\xac\xfe9\x1f\xba&coN\x1e\x84\xa3\x9e.\x85\x8b\xb3\xbe?\x88^\x18\xa4\xdaa\x14\xd2\x1d~4xUh\x0e\xb1\xeeDl\xe4\x17\xbc\x96\xa5\x83c\x00\xa9\xf4\xe9q\xb7\xbe\x8cv|\xe3\xf3{\xb3\x1f!z\x1eVF\x90`U\xea<\xe7\xf3}\xdf\xcf\xd8\x8d\xb0\xb0Y3\xff\xfa\xc3\x16\x14\xa7\x9f\xd0\xd9\x0c#\x90\x95\xfa\x0f\x01V>\xe06\rZ\x92\x968H\xd8\x9cq\xd4\xd7;W\x05\xf0\xb7\xa1\x0f4\xf3\xee\x8e\xca*\x19\xca\r\xef\xad\xe8\xd0\xaaWj\xa2d\x03\x8e\x1d\x88\xbb\x03\x8b\x19\x82\xa9\xaem\x8b+Y\xf3\xc5/\xacp\x81\x05y\x1f4\xebV\xee\xdfe\xa8\xfdS\x8f\xe7\x11\xb4\x08\x14L<\x06\xba\t_\x91|\xbc5\xda\x10\xc1<m\xb4\xa6\xd3T\xc0\xf3-}\xe2p\xc4"\x0f\xc5\x8c\xee\x9e\xab\x1e\xb2&\x19\x0b\x89\xc2\xcc\xf6\xf6\xe6\xfb\xa5s\x13\xc4\xc4\x83Gi+\t\xd4cK8`\xb3\xfaI\xb0\xdbS\xe3\xc1\x00@&\xfc\x10E\x12\'w\x91\x8b\xb4T\xd1Q-\xfb\x81\xc1f.o\xa4\xb1TlJI\x17E\xe8)\x02MfNN\xb4j\xd7\xfcr\xc6\xac\x11jQ\xb0\x82+\x86\x95\xe9\x88\x93\xbc6o\xd4\xe6\xdbOHnu5pr\xfb\xbf\x87q\r~\xdd\x8dX*\x13\xf3\xe5\x14\xd7\xaa\x02&+\x0e3X\xba\x0e i*\xff\xb8D\xde_c\xfd\xf0\xc8\xbf\x82Di:Z@\xdf\xe5\xeb\x14\xe8\x96C\xbe\xa6\xef\xb2\xa2\xc2^\x83\xc5\ts\x86\xd1Te\xcc\xda\xb6\xe8\xb2yT\xb6\x9eO\xb7\x16<B\x0b\xe8\xf9\xbap\x0bRp(\xbd\xd6\x82~\x00^i\xf8\xd8N\xe5\xbe\xa0M\xaf\xce\xbf?(_\x99\xdd\xb5*\x06\x88\x02\xa7W\xa6a\xca\x97\xed\xbf\xae\xb4T\x96\xdd?\xb9\x80=\xdb[4\xde\x8aiw\x0e\x14\x93\xb8\x0f\x80q\xb0\x13\xff\xaa(\xde1\x05yr\xf1>\xadO$\xd4t8\x0f\xb3z[\xea\xdf\xb3^v\xe3\x14=d\x13\xfcs\xabY\xd24\x84\xd2\xf3\x80U\x88d3\x1e\x83\xf2\xba\xc50|\xa5\x9a\x90G\rS\x8f\x18\xe3\x8c\xcd\xd89\xd6\x0bP\x9e\xb3,(r)5\xc2#\xfbI\x08\xe9^\xe1\x13\xce\x80\x18\xf6\x08`O\xae1\xca\x81\x1f\x05:\x95\xa1\x17\xbb[\xc5q0\xb4\xd6\x82\xc6W\x15\xe6\xac\xbd\xef\x8e\x1c\xa8\x06\x89&\xea\x07&\x06)\x8f\x12\xde5\xbb\xd8\xc6\xf34\x9cUK]\x91^]\x86j\xdea%\x03\x97@\x96\xdfi\xe0\xac\x9e\xc1\x02A\x83Q&O2\xebg\xddeM\x8b\x13\\\xf9\x86\xff-\xa4n\x83)ulQ\xe2\xe9\xe89\xf9\x18\x99\x8a\x96`aE4\xed\x9c++]\xbe\xce\xe6\x11\x02\xf2,(\x1f\n\xe0\xe2\x12\x0f\xd3\xd1\xcaI\xba\xf9\xe9{\x16N\xe4\xcf\'\xcb\xd3\x90\x82\xb1\xf5 ]\x8d\xef\x95!\xc0\x05?\xe5y{Z\x9e\r5\x7f\xee\x7f\xb0;\xe9\x8d[\x13o\xc7\x1b\xc8h\x02S\xe7\x90\x95W\xecMRv\xea$G8\x92\x1a\xd6\x11\xa2\rR"\x0f{\xeb\x16AD\xdb\xc2Km\x85w\x03Y\xc8"\xd0\xa8\x94K\x01\x0bg\xe1\x840\xe0uy\xdc\x17F\x8c En\xd3\xf9\x8d\x92\x1a\xaf\xaeZA-\xe0\xf6\xd7a\xf7 \xefb\xd0pEhB\xa8\x8a\xb7jp\xdeIL,C\xde\xafm\xd0\xd9+= \xaf\xe7d\xd8\xd0\xa2\xb8-\xc1Y\nII\x17?\x16\x8bq\x1b\x809\xf0\x03@\xda\x9e\xb3\x08\xdd\xdchw\x87\x97\xa3\xad\'C\xc8?w\x15\xac3\xd7\'\xef~\x8cO,aQ\xd3\xc4\xe3')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
medomni/models/pyarmor_runtime_000000/__init__.py
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
# Pyarmor 9.0.3 (trial), 000000, 2024-10-28T10:25:17.919106
|
2 |
+
from .pyarmor_runtime import __pyarmor__
|
medomni/models/pyarmor_runtime_000000/__pycache__/__init__.cpython-39.pyc
ADDED
Binary file (229 Bytes). View file
|
|
medomni/models/pyarmor_runtime_000000/pyarmor_runtime.so
ADDED
Binary file (805 kB). View file
|
|
medomni/processors/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/medomni/processors/__pycache__/__init__.cpython-39.pyc and b/medomni/processors/__pycache__/__init__.cpython-39.pyc differ
|
|
medomni/processors/__pycache__/base_processor.cpython-39.pyc
CHANGED
Binary files a/medomni/processors/__pycache__/base_processor.cpython-39.pyc and b/medomni/processors/__pycache__/base_processor.cpython-39.pyc differ
|
|
medomni/processors/__pycache__/blip_processors.cpython-39.pyc
CHANGED
Binary files a/medomni/processors/__pycache__/blip_processors.cpython-39.pyc and b/medomni/processors/__pycache__/blip_processors.cpython-39.pyc differ
|
|
medomni/processors/__pycache__/randaugment.cpython-39.pyc
CHANGED
Binary files a/medomni/processors/__pycache__/randaugment.cpython-39.pyc and b/medomni/processors/__pycache__/randaugment.cpython-39.pyc differ
|
|
medomni/tasks/__pycache__/__init__.cpython-39.pyc
CHANGED
Binary files a/medomni/tasks/__pycache__/__init__.cpython-39.pyc and b/medomni/tasks/__pycache__/__init__.cpython-39.pyc differ
|
|
medomni/tasks/__pycache__/base_task.cpython-39.pyc
CHANGED
Binary files a/medomni/tasks/__pycache__/base_task.cpython-39.pyc and b/medomni/tasks/__pycache__/base_task.cpython-39.pyc differ
|
|
medomni/tasks/__pycache__/image_text_pretrain.cpython-39.pyc
CHANGED
Binary files a/medomni/tasks/__pycache__/image_text_pretrain.cpython-39.pyc and b/medomni/tasks/__pycache__/image_text_pretrain.cpython-39.pyc differ
|
|