From e222abbe1d34eaa9bb867a764fb3c5ade994392a Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Mon, 30 May 2022 15:58:58 +0200 Subject: [PATCH 01/22] Add option to export mappings as Tiny v2 file --- build.gradle | 4 + jadx-core/build.gradle | 1 + .../main/java/jadx/api/data/IJavaNodeRef.java | 2 +- .../java/jadx/core/deobf/Deobfuscator.java | 95 +++++++++++++++++++ jadx-gui/build.gradle | 1 + .../src/main/java/jadx/gui/ui/MainWindow.java | 26 +++++ .../resources/i18n/Messages_de_DE.properties | 1 + .../resources/i18n/Messages_en_US.properties | 1 + .../resources/i18n/Messages_es_ES.properties | 1 + .../resources/i18n/Messages_ko_KR.properties | 1 + .../resources/i18n/Messages_zh_CN.properties | 1 + .../resources/i18n/Messages_zh_TW.properties | 1 + 12 files changed, 134 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e98643345f4..eaea6be8279 100644 --- a/build.gradle +++ b/build.gradle @@ -49,6 +49,10 @@ allprojects { mavenLocal() mavenCentral() google() + maven { + name 'FabricMC' + url 'https://maven.fabricmc.net/' + } } } diff --git a/jadx-core/build.gradle b/jadx-core/build.gradle index 10be4575584..3b8671ea62e 100644 --- a/jadx-core/build.gradle +++ b/jadx-core/build.gradle @@ -7,6 +7,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.android.tools.build:aapt2-proto:4.2.1-7147631' + implementation 'net.fabricmc:mapping-io:0.3.0' constraints { // Force protobuf version to prevent Java-7 issue implementation 'com.google.protobuf:protobuf-java:3.11.4' diff --git a/jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java b/jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java index 6672e4b351f..77fc6c9c4bd 100644 --- a/jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java +++ b/jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java @@ -2,7 +2,7 @@ public interface IJavaNodeRef extends Comparable { - enum RefType { + public enum RefType { CLASS, FIELD, METHOD, PKG } diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index d1b97cc8bad..06cee4c9f40 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -1,11 +1,13 @@ package jadx.core.deobf; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.NavigableSet; import java.util.Set; @@ -17,8 +19,13 @@ import jadx.api.JadxArgs; import jadx.api.args.DeobfuscationMapFileMode; +import jadx.api.data.ICodeRename; +import jadx.api.data.IJavaNodeRef.RefType; +import jadx.api.data.impl.JadxCodeData; import jadx.api.plugins.input.data.attributes.JadxAttrType; import jadx.api.plugins.input.data.attributes.types.SourceFileAttr; +import jadx.core.Consts; +import jadx.core.codegen.TypeGen; import jadx.core.dex.attributes.AFlag; import jadx.core.dex.attributes.AType; import jadx.core.dex.attributes.nodes.MethodOverrideAttr; @@ -31,6 +38,10 @@ import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.nodes.RootNode; import jadx.core.utils.kotlin.KotlinMetadataUtils; +import net.fabricmc.mappingio.MappedElementKind; +import net.fabricmc.mappingio.MappingWriter; +import net.fabricmc.mappingio.format.MappingFormat; +import net.fabricmc.mappingio.tree.MemoryMappingTree; public class Deobfuscator { private static final Logger LOG = LoggerFactory.getLogger(Deobfuscator.class); @@ -107,6 +118,90 @@ public void savePresets() { } } + public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappingFormat) { + MemoryMappingTree mappingTree = new MemoryMappingTree(); + // Map < SrcName > + Set mappedClasses = new HashSet<>(); + // Map < DeclClass + ShortId > + Set mappedFields = new HashSet<>(); + Set mappedMethods = new HashSet<>(); + // Map < DeclClass + ShortId + NewName > + Set mappedMethodArgsAndVars = new HashSet<>(); + + // We have to do this so we know for sure which elements are *manually* renamed + for (ICodeRename codeRename : codeData.getRenames()) { + if (codeRename.getNodeRef().getType().equals(RefType.CLASS)) { + mappedClasses.add(codeRename.getNodeRef().getDeclaringClass()); + } else if (codeRename.getNodeRef().getType().equals(RefType.FIELD)) { + mappedFields.add(codeRename.getNodeRef().getDeclaringClass() + + codeRename.getNodeRef().getShortId()); + } else if (codeRename.getNodeRef().getType().equals(RefType.METHOD)) { + if (codeRename.getCodeRef() == null) { + mappedMethods.add(codeRename.getNodeRef().getDeclaringClass() + + codeRename.getNodeRef().getShortId()); + } else { + mappedMethodArgsAndVars.add(codeRename.getNodeRef().getDeclaringClass() + + codeRename.getNodeRef().getShortId() + + codeRename.getNewName()); + } + } + } + + try { + if (path.toFile().exists()) { + path.toFile().delete(); + } + path.toFile().createNewFile(); + + mappingTree.visitHeader(); + mappingTree.visitNamespaces("official", List.of("named")); + mappingTree.visitContent(); + + for (ClassNode cls : root.getClasses()) { + ClassInfo classInfo = cls.getClassInfo(); + + if (classInfo.hasAlias() + && !classInfo.getAliasShortName().equals(classInfo.getShortName()) + && mappedClasses.contains(classInfo.getRawName())) { + mappingTree.visitClass(classInfo.makeRawFullName().replace('.', '/')); + String alias = classInfo.getAliasFullName().replace('.', '/'); + + if (alias.substring(0, Consts.DEFAULT_PACKAGE_NAME.length()).equals(Consts.DEFAULT_PACKAGE_NAME)) { + alias = alias.substring(Consts.DEFAULT_PACKAGE_NAME.length() + 1); + } + mappingTree.visitDstName(MappedElementKind.CLASS, 0, alias); + } + + for (FieldNode fld : cls.getFields()) { + FieldInfo fieldInfo = fld.getFieldInfo(); + if (fieldInfo.hasAlias() && mappedFields.contains(fieldInfo.getDeclClass() + fieldInfo.getShortId())) { + mappingTree.visitClass(classInfo.makeRawFullName().replace('.', '/')); + mappingTree.visitField(fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); + mappingTree.visitDstName(MappedElementKind.FIELD, 0, fieldInfo.getAlias()); + } + } + + for (MethodNode mth : cls.getMethods()) { + MethodInfo methodInfo = mth.getMethodInfo(); + if (methodInfo.hasAlias() && mappedMethods.contains(methodInfo.getDeclClass() + methodInfo.getShortId())) { + mappingTree.visitClass(classInfo.makeRawFullName().replace('.', '/')); + String methodName = methodInfo.getName(); + String shortId = methodInfo.getShortId(); + mappingTree.visitMethod(methodName, shortId.substring(methodName.length())); + mappingTree.visitDstName(MappedElementKind.METHOD, 0, methodInfo.getAlias()); + } + } + } + + MappingWriter writer = MappingWriter.create(path, mappingFormat); + mappingTree.accept(writer); + mappingTree.visitEnd(); + writer.close(); + } catch (IOException e) { + LOG.error("Failed to save deobfuscation map file '{}'", path.toAbsolutePath(), e); + } + } + private void fillDeobfPresets() { for (PackageNode p : getRootPackage().getInnerPackages()) { for (PackageNode pp : p.getInnerPackages()) { diff --git a/jadx-gui/build.gradle b/jadx-gui/build.gradle index 4f8fdaf016c..77f0f674942 100644 --- a/jadx-gui/build.gradle +++ b/jadx-gui/build.gradle @@ -7,6 +7,7 @@ plugins { dependencies { implementation(project(':jadx-core')) + implementation 'net.fabricmc:mapping-io:0.3.0' implementation(project(":jadx-cli")) implementation 'com.beust:jcommander:1.82' diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index 29d884cc508..aa7b98d49db 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -83,6 +83,8 @@ import jadx.api.ResourceFile; import jadx.api.plugins.utils.CommonFileUtils; import jadx.core.Jadx; +import jadx.core.deobf.Deobfuscator; +import jadx.core.dex.nodes.RootNode; import jadx.core.utils.ListUtils; import jadx.core.utils.StringUtils; import jadx.core.utils.files.FileUtils; @@ -133,6 +135,7 @@ import jadx.gui.utils.SystemInfo; import jadx.gui.utils.UiUtils; import jadx.gui.utils.logs.LogCollector; +import net.fabricmc.mappingio.format.MappingFormat; import static io.reactivex.internal.functions.Functions.EMPTY_RUNNABLE; import static javax.swing.KeyStroke.getKeyStroke; @@ -349,6 +352,16 @@ private void saveProjectAs() { update(); } + private void exportMappings(MappingFormat mappingFormat) { + RootNode rootNode = wrapper.getDecompiler().getRoot(); + Deobfuscator deobfuscator = new Deobfuscator(rootNode); + deobfuscator.exportMappings( + Path.of(project.getProjectPath().getParent().toString(), "mappings." + mappingFormat.fileExt), + project.getCodeData(), + mappingFormat); + update(); + } + void open(List paths) { open(paths, EMPTY_RUNNABLE); } @@ -807,6 +820,17 @@ public void actionPerformed(ActionEvent e) { }; saveProjectAsAction.putValue(Action.SHORT_DESCRIPTION, NLS.str("file.save_project_as")); + Action exportMappingsAsTiny2 = new AbstractAction("Tiny v2") { + @Override + public void actionPerformed(ActionEvent e) { + exportMappings(MappingFormat.TINY_2); + } + }; + exportMappingsAsTiny2.putValue(Action.SHORT_DESCRIPTION, "Tiny v2"); + + JMenu exportMappingsAs = new JMenu(NLS.str("file.export_mappings_as")); + exportMappingsAs.add(exportMappingsAsTiny2); + Action saveAllAction = new AbstractAction(NLS.str("file.save_all"), ICON_SAVE_ALL) { @Override public void actionPerformed(ActionEvent e) { @@ -993,6 +1017,8 @@ public void actionPerformed(ActionEvent e) { file.add(saveProjectAction); file.add(saveProjectAsAction); file.addSeparator(); + file.add(exportMappingsAs); + file.addSeparator(); file.add(saveAllAction); file.add(exportAction); file.addSeparator(); diff --git a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties index 63cdadce4b4..bb9e9ef7433 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties @@ -26,6 +26,7 @@ file.open_title=Datei öffnen file.new_project=Neues Projekt file.save_project=Projekt speichern file.save_project_as=Projekt speichern als… +#file.export_mappings_as= file.save_all=Alles speichern file.export_gradle=Als Gradle-Projekt speichern file.save_all_msg=Verzeichnis für das Speichern dekompilierter Ressourcen auswählen diff --git a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties index cc57cc3dfef..b203b6ddbe1 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -26,6 +26,7 @@ file.open_title=Open file file.new_project=New project file.save_project=Save project file.save_project_as=Save project as... +file.export_mappings_as=Export mappings as... file.save_all=Save all file.export_gradle=Save as gradle project file.save_all_msg=Select directory for save decompiled sources diff --git a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties index 2a5d7e38f95..5567dc3ad80 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties @@ -26,6 +26,7 @@ file.open_title=Abrir archivo #file.new_project= #file.save_project= #file.save_project_as= +#file.export_mappings_as= file.save_all=Guardar todo file.export_gradle=Guardar como proyecto Gradle file.save_all_msg=Seleccionar carpeta para guardar fuentes descompiladas diff --git a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties index 8f03028220b..75cd25cacd3 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties @@ -26,6 +26,7 @@ file.open_title=파일 열기 file.new_project=새 프로젝트 file.save_project=프로젝트 저장 file.save_project_as=다른 이름으로 프로젝트 저장... +#file.export_mappings_as= file.save_all=모두 저장 file.export_gradle=Gradle 프로젝트로 저장 file.save_all_msg=디컴파일된 소스를 저장할 디렉토리 선택 diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties index e00d4f09681..cfd4f258102 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties @@ -26,6 +26,7 @@ file.open_title=打开文件 file.new_project=新建项目 file.save_project=保存项目 file.save_project_as=另存项目为... +#file.export_mappings_as= file.save_all=全部保存 file.export_gradle=另存为 Gradle 项目 file.save_all_msg=请选择保存反编译资源的目录 diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties index 1a318d9012b..17fe4d833a4 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties @@ -26,6 +26,7 @@ file.open_title=開啟檔案 file.new_project=新建專案 file.save_project=儲存專案 file.save_project_as=另存專案... +#file.export_mappings_as= file.save_all=全部儲存 file.export_gradle=另存為 gradle 專案 file.save_all_msg=選擇儲存反編譯原始碼的路徑 From d0fc80d378db9fb9e86fbf6cada3db0e5c0182e0 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Mon, 30 May 2022 16:26:30 +0200 Subject: [PATCH 02/22] Comply with JADX's import order conventions --- .../src/main/java/jadx/core/deobf/Deobfuscator.java | 9 +++++---- jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 06cee4c9f40..953e83d7ff6 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -17,6 +17,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import net.fabricmc.mappingio.MappedElementKind; +import net.fabricmc.mappingio.MappingWriter; +import net.fabricmc.mappingio.format.MappingFormat; +import net.fabricmc.mappingio.tree.MemoryMappingTree; + import jadx.api.JadxArgs; import jadx.api.args.DeobfuscationMapFileMode; import jadx.api.data.ICodeRename; @@ -38,10 +43,6 @@ import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.nodes.RootNode; import jadx.core.utils.kotlin.KotlinMetadataUtils; -import net.fabricmc.mappingio.MappedElementKind; -import net.fabricmc.mappingio.MappingWriter; -import net.fabricmc.mappingio.format.MappingFormat; -import net.fabricmc.mappingio.tree.MemoryMappingTree; public class Deobfuscator { private static final Logger LOG = LoggerFactory.getLogger(Deobfuscator.class); diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index aa7b98d49db..e73e5700915 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -77,6 +77,7 @@ import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level; +import net.fabricmc.mappingio.format.MappingFormat; import jadx.api.JadxArgs; import jadx.api.JavaNode; @@ -135,7 +136,6 @@ import jadx.gui.utils.SystemInfo; import jadx.gui.utils.UiUtils; import jadx.gui.utils.logs.LogCollector; -import net.fabricmc.mappingio.format.MappingFormat; import static io.reactivex.internal.functions.Functions.EMPTY_RUNNABLE; import static javax.swing.KeyStroke.getKeyStroke; From b5c7ad91d5f632a7b93a0482c68fd2ab5f82c5d6 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Mon, 30 May 2022 16:36:51 +0200 Subject: [PATCH 03/22] Only use Java 8 features --- jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 953e83d7ff6..af1907daf04 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -3,11 +3,11 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.NavigableSet; import java.util.Set; @@ -155,7 +155,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi path.toFile().createNewFile(); mappingTree.visitHeader(); - mappingTree.visitNamespaces("official", List.of("named")); + mappingTree.visitNamespaces("official", Arrays.asList("named")); mappingTree.visitContent(); for (ClassNode cls : root.getClasses()) { From 21cccb430a8066ebd0d389a73bc813f87acae70b Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Mon, 30 May 2022 17:00:08 +0200 Subject: [PATCH 04/22] Only use Java 8 features (2) --- jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index e73e5700915..3d8f232424e 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -356,7 +356,7 @@ private void exportMappings(MappingFormat mappingFormat) { RootNode rootNode = wrapper.getDecompiler().getRoot(); Deobfuscator deobfuscator = new Deobfuscator(rootNode); deobfuscator.exportMappings( - Path.of(project.getProjectPath().getParent().toString(), "mappings." + mappingFormat.fileExt), + Paths.get(project.getProjectPath().getParent().toString(), "mappings." + mappingFormat.fileExt), project.getCodeData(), mappingFormat); update(); From d14c59a962749e6f5405d14658fc09fa02d7e120 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Mon, 30 May 2022 22:59:16 +0200 Subject: [PATCH 05/22] Export comments to mappings file --- .../java/jadx/core/deobf/Deobfuscator.java | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index af1907daf04..3a99ec7bda3 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -24,6 +24,7 @@ import jadx.api.JadxArgs; import jadx.api.args.DeobfuscationMapFileMode; +import jadx.api.data.ICodeComment; import jadx.api.data.ICodeRename; import jadx.api.data.IJavaNodeRef.RefType; import jadx.api.data.impl.JadxCodeData; @@ -128,25 +129,30 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi Set mappedMethods = new HashSet<>(); // Map < DeclClass + ShortId + NewName > Set mappedMethodArgsAndVars = new HashSet<>(); + // Map < DeclClass + *ShortId + *Index, Comment > + Map comments = new HashMap<>(); // We have to do this so we know for sure which elements are *manually* renamed for (ICodeRename codeRename : codeData.getRenames()) { if (codeRename.getNodeRef().getType().equals(RefType.CLASS)) { mappedClasses.add(codeRename.getNodeRef().getDeclaringClass()); } else if (codeRename.getNodeRef().getType().equals(RefType.FIELD)) { - mappedFields.add(codeRename.getNodeRef().getDeclaringClass() - + codeRename.getNodeRef().getShortId()); + mappedFields.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); } else if (codeRename.getNodeRef().getType().equals(RefType.METHOD)) { if (codeRename.getCodeRef() == null) { - mappedMethods.add(codeRename.getNodeRef().getDeclaringClass() - + codeRename.getNodeRef().getShortId()); + mappedMethods.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); } else { mappedMethodArgsAndVars.add(codeRename.getNodeRef().getDeclaringClass() - + codeRename.getNodeRef().getShortId() - + codeRename.getNewName()); + + codeRename.getNodeRef().getShortId()); } } } + for (ICodeComment codeComment : codeData.getComments()) { + comments.put(codeComment.getNodeRef().getDeclaringClass() + + (codeComment.getNodeRef().getShortId() == null ? "" : codeComment.getNodeRef().getShortId()) + + (codeComment.getCodeRef() == null ? "" : codeComment.getCodeRef().getIndex()), + codeComment.getComment()); + } try { if (path.toFile().exists()) { @@ -160,11 +166,12 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi for (ClassNode cls : root.getClasses()) { ClassInfo classInfo = cls.getClassInfo(); + String classPath = classInfo.makeRawFullName().replace('.', '/'); if (classInfo.hasAlias() && !classInfo.getAliasShortName().equals(classInfo.getShortName()) && mappedClasses.contains(classInfo.getRawName())) { - mappingTree.visitClass(classInfo.makeRawFullName().replace('.', '/')); + mappingTree.visitClass(classPath); String alias = classInfo.getAliasFullName().replace('.', '/'); if (alias.substring(0, Consts.DEFAULT_PACKAGE_NAME.length()).equals(Consts.DEFAULT_PACKAGE_NAME)) { @@ -172,25 +179,38 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi } mappingTree.visitDstName(MappedElementKind.CLASS, 0, alias); } + if (comments.containsKey(classInfo.getRawName())) { + mappingTree.visitClass(classPath); + mappingTree.visitComment(MappedElementKind.CLASS, comments.get(classInfo.getRawName())); + } for (FieldNode fld : cls.getFields()) { FieldInfo fieldInfo = fld.getFieldInfo(); if (fieldInfo.hasAlias() && mappedFields.contains(fieldInfo.getDeclClass() + fieldInfo.getShortId())) { - mappingTree.visitClass(classInfo.makeRawFullName().replace('.', '/')); + mappingTree.visitClass(classPath); mappingTree.visitField(fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); mappingTree.visitDstName(MappedElementKind.FIELD, 0, fieldInfo.getAlias()); } + if (comments.containsKey(classInfo.getRawName() + fieldInfo.getShortId())) { + mappingTree.visitClass(classPath); + mappingTree.visitField(fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); + mappingTree.visitComment(MappedElementKind.FIELD, comments.get(classInfo.getRawName() + fieldInfo.getShortId())); + } } for (MethodNode mth : cls.getMethods()) { MethodInfo methodInfo = mth.getMethodInfo(); + String methodName = methodInfo.getName(); if (methodInfo.hasAlias() && mappedMethods.contains(methodInfo.getDeclClass() + methodInfo.getShortId())) { - mappingTree.visitClass(classInfo.makeRawFullName().replace('.', '/')); - String methodName = methodInfo.getName(); - String shortId = methodInfo.getShortId(); - mappingTree.visitMethod(methodName, shortId.substring(methodName.length())); + mappingTree.visitClass(classPath); + mappingTree.visitMethod(methodName, methodInfo.getShortId().substring(methodName.length())); mappingTree.visitDstName(MappedElementKind.METHOD, 0, methodInfo.getAlias()); } + if (comments.containsKey(classInfo.getRawName() + methodInfo.getShortId())) { + mappingTree.visitClass(classPath); + mappingTree.visitMethod(methodName, methodInfo.getShortId().substring(methodName.length())); + mappingTree.visitComment(MappedElementKind.METHOD, comments.get(classInfo.getRawName() + methodInfo.getShortId())); + } } } From fe104a1037ed8b184fa441c1516672f61aacb527 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Tue, 31 May 2022 17:13:25 +0200 Subject: [PATCH 06/22] Method args test (doesn't work) --- .../java/jadx/core/deobf/Deobfuscator.java | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 3a99ec7bda3..29ecd356713 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -28,6 +28,7 @@ import jadx.api.data.ICodeRename; import jadx.api.data.IJavaNodeRef.RefType; import jadx.api.data.impl.JadxCodeData; +import jadx.api.data.impl.JadxCodeRef; import jadx.api.plugins.input.data.attributes.JadxAttrType; import jadx.api.plugins.input.data.attributes.types.SourceFileAttr; import jadx.core.Consts; @@ -39,10 +40,13 @@ import jadx.core.dex.info.FieldInfo; import jadx.core.dex.info.MethodInfo; import jadx.core.dex.instructions.args.ArgType; +import jadx.core.dex.instructions.args.RegisterArg; +import jadx.core.dex.instructions.args.SSAVar; import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.FieldNode; import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.nodes.RootNode; +import jadx.core.utils.exceptions.DecodeException; import jadx.core.utils.kotlin.KotlinMetadataUtils; public class Deobfuscator { @@ -127,8 +131,8 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi // Map < DeclClass + ShortId > Set mappedFields = new HashSet<>(); Set mappedMethods = new HashSet<>(); - // Map < DeclClass + ShortId + NewName > - Set mappedMethodArgsAndVars = new HashSet<>(); + // Map < DeclClass + MethodShortId + CodeRef, NewName > + Map mappedMethodArgsAndVars = new HashMap<>(); // Map < DeclClass + *ShortId + *Index, Comment > Map comments = new HashMap<>(); @@ -142,8 +146,10 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi if (codeRename.getCodeRef() == null) { mappedMethods.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); } else { - mappedMethodArgsAndVars.add(codeRename.getNodeRef().getDeclaringClass() - + codeRename.getNodeRef().getShortId()); + mappedMethodArgsAndVars.put(codeRename.getNodeRef().getDeclaringClass() + + codeRename.getNodeRef().getShortId() + + codeRename.getCodeRef(), + codeRename.getNewName()); } } } @@ -201,16 +207,43 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi for (MethodNode mth : cls.getMethods()) { MethodInfo methodInfo = mth.getMethodInfo(); String methodName = methodInfo.getName(); + String methodDesc = methodInfo.getShortId().substring(methodName.length()); if (methodInfo.hasAlias() && mappedMethods.contains(methodInfo.getDeclClass() + methodInfo.getShortId())) { mappingTree.visitClass(classPath); - mappingTree.visitMethod(methodName, methodInfo.getShortId().substring(methodName.length())); + mappingTree.visitMethod(methodName, methodDesc); mappingTree.visitDstName(MappedElementKind.METHOD, 0, methodInfo.getAlias()); } if (comments.containsKey(classInfo.getRawName() + methodInfo.getShortId())) { mappingTree.visitClass(classPath); - mappingTree.visitMethod(methodName, methodInfo.getShortId().substring(methodName.length())); + mappingTree.visitMethod(methodName, methodDesc); mappingTree.visitComment(MappedElementKind.METHOD, comments.get(classInfo.getRawName() + methodInfo.getShortId())); } + + boolean wasLoaded = mth.isLoaded(); + try { + mth.load(); + int lvIndex = mth.getAccessFlags().isStatic() ? 0 : 1; + for (RegisterArg arg : mth.getArgRegs()) { + SSAVar ssaVar = arg.getSVar(); + if (ssaVar == null) { + continue; + } + String key = methodInfo.getDeclClass() + methodInfo.getShortId() + + JadxCodeRef.forVar(arg.getRegNum(), ssaVar.getVersion()); + if (mappedMethodArgsAndVars.containsKey(key)) { + mappingTree.visitClass(classPath); + mappingTree.visitMethod(methodName, methodDesc); + mappingTree.visitMethodArg(arg.getRegNum(), lvIndex, null); + mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, mappedMethodArgsAndVars.get(key)); + } + lvIndex += Math.max(arg.getType().getRegCount(), 1); + } + } catch (DecodeException e) { + LOG.error("Error while decompiling method " + methodInfo.getShortId()); + } + if (!wasLoaded) { + mth.unload(); + } } } From aee948d7638a0520bac82d8a760bd534e54e3cb5 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Thu, 2 Jun 2022 18:26:42 +0200 Subject: [PATCH 07/22] Make method arg mapping exports work now --- .../java/jadx/core/deobf/Deobfuscator.java | 48 +++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 29ecd356713..d7dcb6ca262 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -3,11 +3,13 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.NavigableSet; import java.util.Set; @@ -22,6 +24,7 @@ import net.fabricmc.mappingio.format.MappingFormat; import net.fabricmc.mappingio.tree.MemoryMappingTree; +import jadx.api.ICodeInfo; import jadx.api.JadxArgs; import jadx.api.args.DeobfuscationMapFileMode; import jadx.api.data.ICodeComment; @@ -29,8 +32,12 @@ import jadx.api.data.IJavaNodeRef.RefType; import jadx.api.data.impl.JadxCodeData; import jadx.api.data.impl.JadxCodeRef; +import jadx.api.metadata.ICodeNodeRef; +import jadx.api.metadata.annotations.NodeDeclareRef; +import jadx.api.metadata.annotations.VarNode; import jadx.api.plugins.input.data.attributes.JadxAttrType; import jadx.api.plugins.input.data.attributes.types.SourceFileAttr; +import jadx.api.utils.CodeUtils; import jadx.core.Consts; import jadx.core.codegen.TypeGen; import jadx.core.dex.attributes.AFlag; @@ -40,8 +47,6 @@ import jadx.core.dex.info.FieldInfo; import jadx.core.dex.info.MethodInfo; import jadx.core.dex.instructions.args.ArgType; -import jadx.core.dex.instructions.args.RegisterArg; -import jadx.core.dex.instructions.args.SSAVar; import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.FieldNode; import jadx.core.dex.nodes.MethodNode; @@ -124,6 +129,29 @@ public void savePresets() { } } + private List collectMethodArgs(MethodNode methodNode) { + ICodeInfo codeInfo = methodNode.getParentClass().getCode(); + int mthDefPos = methodNode.getDefPosition(); + int lineEndPos = CodeUtils.getLineEndForPos(codeInfo.getCodeStr(), mthDefPos); + List args = new ArrayList<>(); + codeInfo.getCodeMetadata().searchDown(mthDefPos, (pos, ann) -> { + if (pos > lineEndPos) { + return Boolean.TRUE; // stop at line end + } + if (ann instanceof NodeDeclareRef) { + ICodeNodeRef declRef = ((NodeDeclareRef) ann).getNode(); + if (declRef instanceof VarNode) { + VarNode varNode = (VarNode) declRef; + if (varNode.getMth().equals(methodNode)) { + args.add(varNode); + } + } + } + return null; + }); + return args; + } + public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappingFormat) { MemoryMappingTree mappingTree = new MemoryMappingTree(); // Map < SrcName > @@ -131,6 +159,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi // Map < DeclClass + ShortId > Set mappedFields = new HashSet<>(); Set mappedMethods = new HashSet<>(); + Set methodsWithMappedElements = new HashSet<>(); // Map < DeclClass + MethodShortId + CodeRef, NewName > Map mappedMethodArgsAndVars = new HashMap<>(); // Map < DeclClass + *ShortId + *Index, Comment > @@ -146,6 +175,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi if (codeRename.getCodeRef() == null) { mappedMethods.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); } else { + methodsWithMappedElements.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); mappedMethodArgsAndVars.put(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId() + codeRename.getCodeRef(), @@ -219,21 +249,21 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi mappingTree.visitComment(MappedElementKind.METHOD, comments.get(classInfo.getRawName() + methodInfo.getShortId())); } + if (!methodsWithMappedElements.contains(methodInfo.getDeclClass() + methodInfo.getShortId())) { + continue; + } boolean wasLoaded = mth.isLoaded(); try { mth.load(); int lvIndex = mth.getAccessFlags().isStatic() ? 0 : 1; - for (RegisterArg arg : mth.getArgRegs()) { - SSAVar ssaVar = arg.getSVar(); - if (ssaVar == null) { - continue; - } + for (VarNode arg : collectMethodArgs(mth)) { + int ssaVersion = arg.getSsa(); String key = methodInfo.getDeclClass() + methodInfo.getShortId() - + JadxCodeRef.forVar(arg.getRegNum(), ssaVar.getVersion()); + + JadxCodeRef.forVar(arg.getReg(), ssaVersion); if (mappedMethodArgsAndVars.containsKey(key)) { mappingTree.visitClass(classPath); mappingTree.visitMethod(methodName, methodDesc); - mappingTree.visitMethodArg(arg.getRegNum(), lvIndex, null); + mappingTree.visitMethodArg(arg.getReg(), lvIndex, null); mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, mappedMethodArgsAndVars.get(key)); } lvIndex += Math.max(arg.getType().getRegCount(), 1); From ce78a62f7241955ebf2eb55b58c955c930437ddd Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Thu, 2 Jun 2022 18:41:57 +0200 Subject: [PATCH 08/22] Use `getTopParentClass()` instead of `getParentClass()` See https://github.com/skylot/jadx/pull/1505#issuecomment-1145064865 --- jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index d7dcb6ca262..4cc92ce967b 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -130,7 +130,7 @@ public void savePresets() { } private List collectMethodArgs(MethodNode methodNode) { - ICodeInfo codeInfo = methodNode.getParentClass().getCode(); + ICodeInfo codeInfo = methodNode.getTopParentClass().getCode(); int mthDefPos = methodNode.getDefPosition(); int lineEndPos = CodeUtils.getLineEndForPos(codeInfo.getCodeStr(), mthDefPos); List args = new ArrayList<>(); From 235991fb9c35136f0f8489125821a5d6c8e2999b Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Thu, 2 Jun 2022 21:28:44 +0200 Subject: [PATCH 09/22] Remove unneeded method load call --- .../java/jadx/core/deobf/Deobfuscator.java | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 4cc92ce967b..e4a9f5093d2 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -51,7 +51,6 @@ import jadx.core.dex.nodes.FieldNode; import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.nodes.RootNode; -import jadx.core.utils.exceptions.DecodeException; import jadx.core.utils.kotlin.KotlinMetadataUtils; public class Deobfuscator { @@ -252,27 +251,18 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi if (!methodsWithMappedElements.contains(methodInfo.getDeclClass() + methodInfo.getShortId())) { continue; } - boolean wasLoaded = mth.isLoaded(); - try { - mth.load(); - int lvIndex = mth.getAccessFlags().isStatic() ? 0 : 1; - for (VarNode arg : collectMethodArgs(mth)) { - int ssaVersion = arg.getSsa(); - String key = methodInfo.getDeclClass() + methodInfo.getShortId() - + JadxCodeRef.forVar(arg.getReg(), ssaVersion); - if (mappedMethodArgsAndVars.containsKey(key)) { - mappingTree.visitClass(classPath); - mappingTree.visitMethod(methodName, methodDesc); - mappingTree.visitMethodArg(arg.getReg(), lvIndex, null); - mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, mappedMethodArgsAndVars.get(key)); - } - lvIndex += Math.max(arg.getType().getRegCount(), 1); + int lvIndex = mth.getAccessFlags().isStatic() ? 0 : 1; + for (VarNode arg : collectMethodArgs(mth)) { + int ssaVersion = arg.getSsa(); + String key = methodInfo.getDeclClass() + methodInfo.getShortId() + + JadxCodeRef.forVar(arg.getReg(), ssaVersion); + if (mappedMethodArgsAndVars.containsKey(key)) { + mappingTree.visitClass(classPath); + mappingTree.visitMethod(methodName, methodDesc); + mappingTree.visitMethodArg(arg.getReg(), lvIndex, null); + mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, mappedMethodArgsAndVars.get(key)); } - } catch (DecodeException e) { - LOG.error("Error while decompiling method " + methodInfo.getShortId()); - } - if (!wasLoaded) { - mth.unload(); + lvIndex += Math.max(arg.getType().getRegCount(), 1); } } } From 9ad0f93a53f6644b6164e5821fe722eb0e2d0f96 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Sat, 4 Jun 2022 19:08:55 +0200 Subject: [PATCH 10/22] Small code cleanup; initial (broken) support for method vars --- .../java/jadx/core/deobf/Deobfuscator.java | 145 ++++++++++++++---- .../java/jadx/core/dex/nodes/MethodNode.java | 4 + 2 files changed, 117 insertions(+), 32 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index e4a9f5093d2..cff301f05bb 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -3,6 +3,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -14,6 +15,7 @@ import java.util.NavigableSet; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.atomic.AtomicInteger; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; @@ -33,6 +35,7 @@ import jadx.api.data.impl.JadxCodeData; import jadx.api.data.impl.JadxCodeRef; import jadx.api.metadata.ICodeNodeRef; +import jadx.api.metadata.annotations.InsnCodeOffset; import jadx.api.metadata.annotations.NodeDeclareRef; import jadx.api.metadata.annotations.VarNode; import jadx.api.plugins.input.data.attributes.JadxAttrType; @@ -135,15 +138,18 @@ private List collectMethodArgs(MethodNode methodNode) { List args = new ArrayList<>(); codeInfo.getCodeMetadata().searchDown(mthDefPos, (pos, ann) -> { if (pos > lineEndPos) { - return Boolean.TRUE; // stop at line end + // Stop at line end + return Boolean.TRUE; } if (ann instanceof NodeDeclareRef) { ICodeNodeRef declRef = ((NodeDeclareRef) ann).getNode(); if (declRef instanceof VarNode) { VarNode varNode = (VarNode) declRef; - if (varNode.getMth().equals(methodNode)) { - args.add(varNode); + if (!varNode.getMth().equals(methodNode)) { + // Stop if we've gone too far and have entered a different method + return Boolean.TRUE; } + args.add(varNode); } } return null; @@ -151,6 +157,39 @@ private List collectMethodArgs(MethodNode methodNode) { return args; } + private List> collectMethodVars(MethodNode methodNode) { + ICodeInfo codeInfo = methodNode.getTopParentClass().getCode(); + int mthDefPos = methodNode.getDefPosition(); + int mthLineEndPos = CodeUtils.getLineEndForPos(codeInfo.getCodeStr(), mthDefPos); + + List> vars = new ArrayList<>(); + AtomicInteger lastOffset = new AtomicInteger(-1); + codeInfo.getCodeMetadata().searchDown(mthLineEndPos, (pos, ann) -> { + if (ann instanceof InsnCodeOffset) { + lastOffset.set(((InsnCodeOffset) ann).getOffset()); + } + if (ann instanceof NodeDeclareRef) { + ICodeNodeRef declRef = ((NodeDeclareRef) ann).getNode(); + if (declRef instanceof VarNode) { + VarNode varNode = (VarNode) declRef; + if (!varNode.getMth().equals(methodNode)) { + // Stop if we've gone too far and have entered a different method + return Boolean.TRUE; + } + if (lastOffset.get() != -1) { + vars.add(new SimpleEntry(varNode, lastOffset.get())); + } else { + LOG.warn("Local variable not present in bytecode, skipping: " + + methodNode.getMethodInfo().getRawFullId() + "." + varNode.getName()); + } + lastOffset.set(-1); + } + } + return null; + }); + return vars; + } + public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappingFormat) { MemoryMappingTree mappingTree = new MemoryMappingTree(); // Map < SrcName > @@ -161,7 +200,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi Set methodsWithMappedElements = new HashSet<>(); // Map < DeclClass + MethodShortId + CodeRef, NewName > Map mappedMethodArgsAndVars = new HashMap<>(); - // Map < DeclClass + *ShortId + *Index, Comment > + // Map < DeclClass + *ShortId + *CodeRef, Comment > Map comments = new HashMap<>(); // We have to do this so we know for sure which elements are *manually* renamed @@ -185,8 +224,11 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi for (ICodeComment codeComment : codeData.getComments()) { comments.put(codeComment.getNodeRef().getDeclaringClass() + (codeComment.getNodeRef().getShortId() == null ? "" : codeComment.getNodeRef().getShortId()) - + (codeComment.getCodeRef() == null ? "" : codeComment.getCodeRef().getIndex()), + + (codeComment.getCodeRef() == null ? "" : codeComment.getCodeRef()), codeComment.getComment()); + if (codeComment.getCodeRef() != null) { + methodsWithMappedElements.add(codeComment.getNodeRef().getDeclaringClass() + codeComment.getNodeRef().getShortId()); + } } try { @@ -202,10 +244,11 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi for (ClassNode cls : root.getClasses()) { ClassInfo classInfo = cls.getClassInfo(); String classPath = classInfo.makeRawFullName().replace('.', '/'); + String rawClassName = classInfo.getRawName(); if (classInfo.hasAlias() && !classInfo.getAliasShortName().equals(classInfo.getShortName()) - && mappedClasses.contains(classInfo.getRawName())) { + && mappedClasses.contains(rawClassName)) { mappingTree.visitClass(classPath); String alias = classInfo.getAliasFullName().replace('.', '/'); @@ -214,22 +257,20 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi } mappingTree.visitDstName(MappedElementKind.CLASS, 0, alias); } - if (comments.containsKey(classInfo.getRawName())) { + if (comments.containsKey(rawClassName)) { mappingTree.visitClass(classPath); - mappingTree.visitComment(MappedElementKind.CLASS, comments.get(classInfo.getRawName())); + mappingTree.visitComment(MappedElementKind.CLASS, comments.get(rawClassName)); } for (FieldNode fld : cls.getFields()) { FieldInfo fieldInfo = fld.getFieldInfo(); - if (fieldInfo.hasAlias() && mappedFields.contains(fieldInfo.getDeclClass() + fieldInfo.getShortId())) { - mappingTree.visitClass(classPath); - mappingTree.visitField(fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); + if (fieldInfo.hasAlias() && mappedFields.contains(rawClassName + fieldInfo.getShortId())) { + visitField(mappingTree, classPath, fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); mappingTree.visitDstName(MappedElementKind.FIELD, 0, fieldInfo.getAlias()); } - if (comments.containsKey(classInfo.getRawName() + fieldInfo.getShortId())) { - mappingTree.visitClass(classPath); - mappingTree.visitField(fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); - mappingTree.visitComment(MappedElementKind.FIELD, comments.get(classInfo.getRawName() + fieldInfo.getShortId())); + if (comments.containsKey(rawClassName + fieldInfo.getShortId())) { + visitField(mappingTree, classPath, fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); + mappingTree.visitComment(MappedElementKind.FIELD, comments.get(rawClassName + fieldInfo.getShortId())); } } @@ -237,32 +278,50 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi MethodInfo methodInfo = mth.getMethodInfo(); String methodName = methodInfo.getName(); String methodDesc = methodInfo.getShortId().substring(methodName.length()); - if (methodInfo.hasAlias() && mappedMethods.contains(methodInfo.getDeclClass() + methodInfo.getShortId())) { - mappingTree.visitClass(classPath); - mappingTree.visitMethod(methodName, methodDesc); + if (methodInfo.hasAlias() && mappedMethods.contains(rawClassName + methodInfo.getShortId())) { + visitMethod(mappingTree, classPath, methodName, methodDesc); mappingTree.visitDstName(MappedElementKind.METHOD, 0, methodInfo.getAlias()); } - if (comments.containsKey(classInfo.getRawName() + methodInfo.getShortId())) { - mappingTree.visitClass(classPath); - mappingTree.visitMethod(methodName, methodDesc); - mappingTree.visitComment(MappedElementKind.METHOD, comments.get(classInfo.getRawName() + methodInfo.getShortId())); + if (comments.containsKey(rawClassName + methodInfo.getShortId())) { + visitMethod(mappingTree, classPath, methodName, methodDesc); + mappingTree.visitComment(MappedElementKind.METHOD, comments.get(rawClassName + methodInfo.getShortId())); } - if (!methodsWithMappedElements.contains(methodInfo.getDeclClass() + methodInfo.getShortId())) { + if (!methodsWithMappedElements.contains(rawClassName + methodInfo.getShortId())) { continue; } - int lvIndex = mth.getAccessFlags().isStatic() ? 0 : 1; - for (VarNode arg : collectMethodArgs(mth)) { - int ssaVersion = arg.getSsa(); - String key = methodInfo.getDeclClass() + methodInfo.getShortId() - + JadxCodeRef.forVar(arg.getReg(), ssaVersion); + // Method args + List args = collectMethodArgs(mth); + for (VarNode arg : args) { + int lvIndex = arg.getReg() - (args.get(0).getReg()) + (mth.getAccessFlags().isStatic() ? 0 : 1); + String key = rawClassName + methodInfo.getShortId() + + JadxCodeRef.forVar(arg.getReg(), arg.getSsa()); if (mappedMethodArgsAndVars.containsKey(key)) { - mappingTree.visitClass(classPath); - mappingTree.visitMethod(methodName, methodDesc); - mappingTree.visitMethodArg(arg.getReg(), lvIndex, null); + visitMethodArg(mappingTree, classPath, methodName, methodDesc, args.indexOf(arg), lvIndex); mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, mappedMethodArgsAndVars.get(key)); + mappedMethodArgsAndVars.remove(key); + } + // Not checking for comments since method args can't have any + } + // Method vars + List> vars = collectMethodVars(mth); + for (SimpleEntry entry : vars) { + VarNode var = entry.getKey(); + int offset = entry.getValue(); + int lvIndex = var.getReg() - (vars.get(0).getKey().getReg()) + (mth.getAccessFlags().isStatic() ? 0 : 1); + String key = rawClassName + methodInfo.getShortId() + + JadxCodeRef.forVar(var.getReg(), var.getSsa()); + if (mappedMethodArgsAndVars.containsKey(key)) { + visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, var.getDefPosition()); + mappingTree.visitDstName(MappedElementKind.METHOD_VAR, 0, mappedMethodArgsAndVars.get(key)); + } + key = rawClassName + methodInfo.getShortId() + + JadxCodeRef.forInsn(offset); + if (comments.containsKey(key)) { + visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, var.getDefPosition()); + mappingTree.visitComment(MappedElementKind.METHOD_VAR, comments.get(key)); } - lvIndex += Math.max(arg.getType().getRegCount(), 1); + } } } @@ -276,6 +335,28 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi } } + private void visitField(MemoryMappingTree tree, String classPath, String srcName, String srcDesc) { + tree.visitClass(classPath); + tree.visitField(srcName, srcDesc); + } + + private void visitMethod(MemoryMappingTree tree, String classPath, String srcName, String srcDesc) { + tree.visitClass(classPath); + tree.visitMethod(srcName, srcDesc); + } + + private void visitMethodArg(MemoryMappingTree tree, String classPath, String methodSrcName, String methodSrcDesc, int argPosition, + int lvIndex) { + visitMethod(tree, classPath, methodSrcName, methodSrcDesc); + tree.visitMethodArg(argPosition, lvIndex, null); + } + + private void visitMethodVar(MemoryMappingTree tree, String classPath, String methodSrcName, String methodSrcDesc, int lvIndex, + int startOpIdx) { + visitMethod(tree, classPath, methodSrcName, methodSrcDesc); + tree.visitMethodVar(-1, lvIndex, startOpIdx, null); + } + private void fillDeobfPresets() { for (PackageNode p : getRootPackage().getInnerPackages()) { for (PackageNode pp : p.getInnerPackages()) { diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java index 430abaebaa0..899d6452147 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java @@ -461,6 +461,10 @@ public int getRegsCount() { return regsCount; } + public int getArgsStartReg() { + return argsStartReg; + } + public SSAVar makeNewSVar(@NotNull RegisterArg assignArg) { int regNum = assignArg.getRegNum(); return makeNewSVar(regNum, getNextSVarVersion(regNum), assignArg); From d0ddba555b58007b8e6bc495f5c6a0a6518ebc9e Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Thu, 9 Jun 2022 01:04:18 +0200 Subject: [PATCH 11/22] Fixes regarding inner classes --- .../src/main/java/jadx/core/deobf/Deobfuscator.java | 10 +++++----- .../src/main/java/jadx/core/dex/info/ClassInfo.java | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index cff301f05bb..e42d5e96f6e 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -250,9 +250,10 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi && !classInfo.getAliasShortName().equals(classInfo.getShortName()) && mappedClasses.contains(rawClassName)) { mappingTree.visitClass(classPath); - String alias = classInfo.getAliasFullName().replace('.', '/'); + String alias = classInfo.makeAliasRawFullName().replace('.', '/'); - if (alias.substring(0, Consts.DEFAULT_PACKAGE_NAME.length()).equals(Consts.DEFAULT_PACKAGE_NAME)) { + if (alias.length() >= Consts.DEFAULT_PACKAGE_NAME.length() + && alias.substring(0, Consts.DEFAULT_PACKAGE_NAME.length()).equals(Consts.DEFAULT_PACKAGE_NAME)) { alias = alias.substring(Consts.DEFAULT_PACKAGE_NAME.length() + 1); } mappingTree.visitDstName(MappedElementKind.CLASS, 0, alias); @@ -293,7 +294,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi // Method args List args = collectMethodArgs(mth); for (VarNode arg : args) { - int lvIndex = arg.getReg() - (args.get(0).getReg()) + (mth.getAccessFlags().isStatic() ? 0 : 1); + int lvIndex = arg.getReg() - args.get(0).getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); String key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forVar(arg.getReg(), arg.getSsa()); if (mappedMethodArgsAndVars.containsKey(key)) { @@ -308,7 +309,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi for (SimpleEntry entry : vars) { VarNode var = entry.getKey(); int offset = entry.getValue(); - int lvIndex = var.getReg() - (vars.get(0).getKey().getReg()) + (mth.getAccessFlags().isStatic() ? 0 : 1); + int lvIndex = var.getReg() - vars.get(0).getKey().getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); String key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forVar(var.getReg(), var.getSsa()); if (mappedMethodArgsAndVars.containsKey(key)) { @@ -321,7 +322,6 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, var.getDefPosition()); mappingTree.visitComment(MappedElementKind.METHOD_VAR, comments.get(key)); } - } } } diff --git a/jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java b/jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java index be8839a9d45..069d00e8ed4 100644 --- a/jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java +++ b/jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java @@ -180,12 +180,12 @@ public String makeRawFullName() { return makeFullClsName(pkg, name, parentClass, false, true); } - private String makeAliasFullName() { + public String makeAliasFullName() { return makeFullClsName(getAliasPkg(), getAliasShortName(), parentClass, true, false); } - private String makeAliasRawFullName() { - return makeFullClsName(pkg, name, parentClass, true, true); + public String makeAliasRawFullName() { + return makeFullClsName(getAliasPkg(), getAliasShortName(), parentClass, true, true); } public String getAliasFullPath() { From a6235f340c4e7c32eba2cc1fa184e00e2bfbe422 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Thu, 9 Jun 2022 01:07:06 +0200 Subject: [PATCH 12/22] Add option to export mappings as Enigma directory --- .../main/java/jadx/core/deobf/Deobfuscator.java | 11 ++++++++--- .../src/main/java/jadx/gui/ui/MainWindow.java | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index e42d5e96f6e..048450de4aa 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -54,6 +54,7 @@ import jadx.core.dex.nodes.FieldNode; import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.nodes.RootNode; +import jadx.core.utils.files.FileUtils; import jadx.core.utils.kotlin.KotlinMetadataUtils; public class Deobfuscator { @@ -232,10 +233,14 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi } try { - if (path.toFile().exists()) { - path.toFile().delete(); + if (mappingFormat.hasSingleFile()) { + if (path.toFile().exists()) { + path.toFile().delete(); + } + path.toFile().createNewFile(); + } else { + FileUtils.makeDirs(path); } - path.toFile().createNewFile(); mappingTree.visitHeader(); mappingTree.visitNamespaces("official", Arrays.asList("named")); diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index 92ad0bcdec2..19ac389c95b 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -356,7 +356,8 @@ private void exportMappings(MappingFormat mappingFormat) { RootNode rootNode = wrapper.getDecompiler().getRoot(); Deobfuscator deobfuscator = new Deobfuscator(rootNode); deobfuscator.exportMappings( - Paths.get(project.getProjectPath().getParent().toString(), "mappings." + mappingFormat.fileExt), + Paths.get(project.getProjectPath().getParent().toString(), + "mappings" + (mappingFormat.hasSingleFile() ? "." + mappingFormat.fileExt : "")), project.getCodeData(), mappingFormat); update(); @@ -821,16 +822,25 @@ public void actionPerformed(ActionEvent e) { }; saveProjectAsAction.putValue(Action.SHORT_DESCRIPTION, NLS.str("file.save_project_as")); - Action exportMappingsAsTiny2 = new AbstractAction("Tiny v2") { + Action exportMappingsAsTiny2 = new AbstractAction("Tiny v2 file") { @Override public void actionPerformed(ActionEvent e) { exportMappings(MappingFormat.TINY_2); } }; - exportMappingsAsTiny2.putValue(Action.SHORT_DESCRIPTION, "Tiny v2"); + exportMappingsAsTiny2.putValue(Action.SHORT_DESCRIPTION, "Tiny v2 file"); + + Action exportMappingsAsEnigma = new AbstractAction("Enigma directory") { + @Override + public void actionPerformed(ActionEvent e) { + exportMappings(MappingFormat.ENIGMA); + } + }; + exportMappingsAsEnigma.putValue(Action.SHORT_DESCRIPTION, "Enigma directory"); JMenu exportMappingsAs = new JMenu(NLS.str("file.export_mappings_as")); exportMappingsAs.add(exportMappingsAsTiny2); + exportMappingsAs.add(exportMappingsAsEnigma); Action saveAllAction = new AbstractAction(NLS.str("file.save_all"), ICON_SAVE_ALL) { @Override From dee78a6c9f360adf6f8c69e64349487b669f4d74 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Thu, 9 Jun 2022 05:24:16 +0200 Subject: [PATCH 13/22] Add option to export mappings as Enigma file/directory Temporarily move to my mapping-io fork until this PR gets merged: https://github.com/FabricMC/mapping-io/pull/19 --- jadx-core/build.gradle | 3 ++- jadx-core/libs/mapping-io-0.4.0-SNAPSHOT.jar | Bin 0 -> 247547 bytes jadx-gui/build.gradle | 2 -- .../src/main/java/jadx/gui/ui/MainWindow.java | 13 +++++++++++-- 4 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 jadx-core/libs/mapping-io-0.4.0-SNAPSHOT.jar diff --git a/jadx-core/build.gradle b/jadx-core/build.gradle index 3b8671ea62e..4781f3e877a 100644 --- a/jadx-core/build.gradle +++ b/jadx-core/build.gradle @@ -4,10 +4,11 @@ plugins { dependencies { api(project(':jadx-plugins:jadx-plugins-api')) + // api 'net.fabricmc:mapping-io:0.3.0' + api files('libs/mapping-io-0.4.0-SNAPSHOT.jar') implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.android.tools.build:aapt2-proto:4.2.1-7147631' - implementation 'net.fabricmc:mapping-io:0.3.0' constraints { // Force protobuf version to prevent Java-7 issue implementation 'com.google.protobuf:protobuf-java:3.11.4' diff --git a/jadx-core/libs/mapping-io-0.4.0-SNAPSHOT.jar b/jadx-core/libs/mapping-io-0.4.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..4999fce2b1567869cfb6f4f31ba78e04c968c471 GIT binary patch literal 247547 zcmbrlbC76Xvn5!z?Yd>#wr$(CUAJu8wr$(CZTnWueer$$x_@taqTkHyh<*ObJh|hX z%#2(s)|Qt727v+qfPetFBp+7>_`87q1p{O?BjUkzmhWF@L_zx*;QW8V0Q6-C@!bK2)mZZah`mM(GuP7uJow#0 zL9k?@(cvU2JFYFBY}ZR;Mp;sSRKXuYMsYxBTH3=`Xd?^V64RBt?fm(lq1AE!c}9@G zp>0i^|8czkY6JUk8&d;AM++kxqkk9+lKu0A=>OH&#=zd*!q&{f?jLUdH3t6wvzvjj zfxWYd$V$oxc>DHIw`{&Vg4y%Uht77ms zKgc`bc2TBtq(%?Ic5#{51Pyhf9zn)037)-UwYqV)XQm{%d9Fv$Q^jj|ahuUL{NHIomX-DXEyE@Jh?fyZ|@!+9Ar4ioJ$mH9l(dI6QG#h%Y?QXev%pfJzuwsLv ziT;HR6`cUIDCG8)SwL{7?ELG3`nL{r9vHNj79%tG)=cB%?7??5C8 z8|APU;RG~g$Uno$*Az@(QSANZ(#UIgvKY}S+redhf}oMgTY+*AC}y(19*GBD&lI!t z`VU}M)412sTPwXb!jE!Rb3b~+p5)P zEK?FTYZ7V_61W&mV4+4!Q;ASU-zY(({5ue|{ZRcUIF$ZWladPlO6P@ge|G&Su`syzV2 znb|@YMGoO5m(O!x1~C#U1lpmNIGJTUViS5|qKw(gCvIw~!y~x5rx<=q+LN;x+cMy* zJU|>#Op|U8P!AjBD?L!)7S+gL-N7lPxg3H$c>4SaU302O~@6C}N|jh0PHWP|x6 z8m-=o1VW_<gEgV}Z?FN4S2S6_-I+tY{bEjpm^PKR4l)@~gF;{Y#HPSbQh z-QdhsbpRqutTNHwsKWp73pJySo2_`G{7o(OSQnfyK3ndNr&sz&#$;>5BkLzU$d=kc zSLTkmJGB%Fw6StJHOf-cNKvF8McG=p%I3P=lHGG=M;-2#?9!k;D^)Z88gJ zmJyb^Dfc&iXku|6mKW11=G0*ealN?@&OckbeFK17%najkEiCPdOZOFb<`igE(f z$OOyGnZ%r62GrV|*gY|(ww*U3(liSCx>$x%YOk_pf8D`L1px;z>YELB_=QNrSS45H zeLbBL0W#^YL`zl8qMZymRX&x%&RrS@RZqhJ1#@1KN!e(cmW6@I&@v1+@j$In+LED* zqMpliLAJ~lz5bSnxutwOFET|P-lb$F=71vun!-eRzji16oK3JkMK2}lRIg$LP2CN5 zWew2*D$4wjb|#U0xzge~>QXmh3rdo9bPP8XawyPEGlkfFNBOQj83hr+hqZk8V7!d% zJnuOFth1*juQ0;q*s*weFC*B(Rppwxd{eJUIc-v@b?v{rAfnh(S=};ksb#{IeROoV z`Q#hkvtiC1tJ(UB6V&R7Gg0YyL*a=&C~ymEzW~|_0PT>`W189M0JaNgeA^k6GBt_r zQP5577rke9@{W}RO^)O~e8M54$eoaCIn&_YO?}!WXw-N_ebU64xCj$~!r3aUC^FWi z(FWObZ#K%53D*SaZrNzBFCmM?AtlFgl1LMlsxD;oE{tiQyUc=4KMUwdhhY9N(+e`o zp0cJ{>oDVz6Z{HfJ6V`v)*@2dx)H*F;?Z3Y>d8H(v^r5vrZ9o;rhd7_?E@pr5Ccm} zI&w{t)dv-ktYZA?IW>5#9tB1{iuGX?1b;~`xnh)NJ5gE;OKiDmN8}!TCipUP%e zLy%Pn;fRo1%^nL)d=9&L$bCupEWPm>?iwy?7578nE!f`xR6(y}^Yj%O@>s62ry$=? zd^A2gX@SP#^M~~LoYK~#JdxO`t6XC811GWTn#gCfh!=Xgy@i)@r{PKA9{A$eqarwMtGi zB_JE5C{%e%rtfBea6{F0aNA-;#}-)A7Vuyvw%CDA;`b2^Wy!o4FOW5-!6lLP-(b>f zFNiH;u=-vox9V$f2*J~QtDVj`o!xA)MzyWpIQ_)@W|VNIliD2ox9o3jfk+bt9PH%7 zUNWRDZ|!f8$5C-SJE4!pu>|p_W54*ChxnvXPBaC=b13}2**_Zm>96hSx^D~fdhv_h z{aHuAEr>W1Qsz)u7XOQ#^HugJBO1 zWhPR=NJ(!F<;O56fIF^>yAM8Pskd3!=brw@z0RCQt9r8NAb43NrC#(mY8U1JUpD z25|0r()n&lIGBqZ+T2~>;4^V@7&&kzM+}&uL%W~s9j{v2Sm@c5Dhq?v*+Nz-sV^pb z?j9-WsJp_*Tyq8!?NUk`dU9BW=M2<-o6QB8SiX2@r7iqn~ZN%r;`#BPyi2G1jQ#*u5<<;i&&!^M!o zkai<(A&~KeiY~+H8!a(=S9JEwo`mKjQ!E0zdMU5@7EM^hSeL>|DZec*lq`t63^DC| z0)DQ2L!^dNEOfxI5k)s2^M+=F^OJ`oZF8!2Mcr*^c8>ZrzB8kfrpmNIH%3xBM>hjU)pP1<1h)C5+ zZBrDX+X@=y1qs-LjR4lhJWAq#S3Dps0X%jDG8P2MeBp_pY8Y`WA>LTPZhEe_`t}@Ds+B4@ zdD=$d1+$}6X7kAmBcXl%8SjbyX~Si*!!pu`FPfQ=!ajyK%Me4p^0LPwxRNJCsb;M@ zvqs(Z%0zR7K3&V2jDl5T#e21hYIwd(iSC0TZs6CbMV3KYU9jHT0-H{wHVt}(XSL|1 zbZH*8=QO&lLBGT9S&hI*vA*s0lk~0wCNn1I;PWs>km`>i*r`2lFfuY4xGKYw za!{}SIqHJ`FLYZmiAGZIV2^Yoam$@!D7m+V2Zm7<7$)Nv;xVCo>;aXI-lWD{N9{of zA=PQxOO^fQr-ol&@!HCLqyr+0kCBC!NQazaaD^~FP(~7OMJct3X!Q^@p#}6K?6za% z?E`5p)_QA{Us^bz-ZODtK}ohLd( zz>Ozf=gQt|WhC3n*#i%2z$VgnSQ-s4eYZ*4!e1J)c}X2LZiX=hC1!6^MW)$sH>LJb zaU%i=Mi(TFLW-WZ91Ek4QwTj3^09QK%3oVoSq9rxDRx%ij@wpFxNu40`ekwbyqvWu zX35%#b{1e;O0`@FrGv4dL>ZaN*QedwG^c6O`Bami!bw zC94~;!QDwH4kuYhSY)AeRwLAc^}sf>`}V~~1Rs(ONb=j=Nlub##JB^COfZ+AVceLs zXa6)B3nx+>^db-1F~5OEBhhqrA(pE1R;*1iL@4ON*58DTrzjxe@0k(;v2G@5ri<2L zT9@l*8kGNp)WvQDzY${g`(O|as0sy13I~O|hioc@6#w+|SMwUX%d%>i`XuZx9A|>3 zEfJzrMiAn&vyy+@VU=Xu4zflgSrS_$(ik&I`bm^5g3gKjtovJ^6}bAJ*FbEC6kx+^ zV>@eH1v#&S>7b!SCs-1PH=`YZJB&NiWk}b?NRWQ8L)PmuQ?ZhwW-b%H*CH>OMp>$? zP}l8cvYpS%&x&)O^IejyOK;lp&7T zN(roAb+Vm_WyG){dWfyc5;^eOElRz8k;!& zyNxFAs$q+ujP@piq)<=R4yjfNmj%kC@Jkk_Acg(nV`i0UDlf;&Nts3|CGB)@TU6ZT z9{m|$)APRJc#*Fd@xDFXY3KU<+@19Ut_!1c2|`#w zV3-T_4Z((kXMC;Jky~@&QfkG5-M@llGg7G*?dzUux#Vf+qQtbruT}}716nmY(?g7b zaD*{!u#XTwO|hdD8Ft7LVr8bB zmmCz>J*ZPVLGd1d{svPRY_tJ%oUrVGSZjsBb_Yf~|8f7&ajFq(A=P^WDV87nC=^hHTao&e;Kirx{kR^R=5^f696-fo-6C<|( zlb_wCERIRfAZ6>7^`b3);-#$qF^!of79xNwn|zykBejdyeqzE$i_sSHiXn<8`BtEE z>O0ubP6xf@Q?#8f5q$}^GYShPWHHuAfEm)Pwi2n}q8kj;g&`p+YS;<}rx@ z*@L7UG`y(jE)qGR4!2uM)ZsW2V$ilWe%E#%Sop@5S!0H%h#Io|2zB$si4@`v&jpP9 zG`Yy|p0jOBsIh_9Bc#$>I3F?*VB#k;uSIdG^~q`nGT`D3o2w{XEa3mH=oP$wvVQGh z3H#LdaE63^VDKXjJ3ngyhoBr%$Mnm&vXXQzu0JlN%%JXycEMjaE0E{5f;&t)O?i~ zMtcNfn-M?GkZm;(e01W7&cjk(|NgIUSY;BAx^gb^o5ALkZ|vKCQBF*W_nKJK-O zRiGkf3A^<1zENEVQ_UPsZy>EGW-$-fRnbjj8(Sp~DEYl-T<>JX+R6r)lGO!1qDCFy zTHvdBEa{rsCG-rvocF)0c89hA(d2TrT+Ewn5Tuy(Y@HTXSaopR(h2zJbM#onyQz81=rO|2dz@Bn$sx{!1B7paKA} z{kMCHtdo$PjlH$WUn2ZpEu~q_%2|0C^?PP2d&~GFVRQ(vAiN08n31^X7i2R3L??)l zAS@UpZ`+i10(4?JI}>D(<}gsRWUgTIuRz1iwGT?lehhpcODnC{v`N0F zQ`usq`Nr+4ep6dMvqpYierC5mFFucdQguP=Kz{B9KwIIa{lP_mA`Mk598%kv3_?E# zqyL=r`Qu(TA4Z!F;fQO5kI0R<7)WEuIlQ{c?1Slp! zVwfg*8ktVuH6#F;fTB$lqk?^vB}oy*%eXR@nVGpw-{nK8 zU9?T`vsi+h$XKQN+lfnJQ!^31yMbRO!8*Y#Ndf~yQdz>4nsFg#R-tG}rSoe4hQCa+ z(#NYoO=IX6z&pURYMU%LNA2(6KIIT5`dzk&$XEyPjOEcmM|fWB_kaZ0JuB@R$JPGADRF`nK*e}bU|Q8$?{sQQm1Q|UPc5H=eIrRC9*r*Z zRu*tsA629729u$HC-aNl!%HU?ezIOrtTG^We7TszYU8@-i3}&USeh$ksa`UVk*%9D zo<8&#i%!)rI%=sINTr`Uc6F#wA#m*;V^Hd#itWw;^1yUz?3EQ5+W~lx*y6TzX}ozn zanm>tI2&X#R`7HVRC{x|Kn|k~QKyM6LE0tl52G|yYb!d^JfVRt<6Lz0(k>M|If8X& zpcp3n=1~V;fK@4>Wd+ToLu7!K1NQ7>j7XJFb|-DWV`dC4klG2UElyPNm9N!yPaVrI z$c1_(ebxNuO7Ls)!WC#_L<#$h!W+Z55Dr)Cv8avs4ekWXY@G6F602j<%|6>J0|@)I z2oVshz(mZ7Oy;A$7L-E0JYx+T>YR#ZBS|A|OB`}}W>Asf2#f_y8}5APA{ZFMFtXH$ z(p1!t7Na!uR-;^JuQvbXsQv8*UGIgy>^BsvBuXGkB(SMEm{1R;D~nu=otT(TSe!nd zDU)I%B|`O9+H!*iTyR*NgmY_hT&px@RcaF8XC|& zDuJcURBJ1)6egpvS$%`ZY%ZDHFY8;($F$?qL}0SxSUMc3Gn$a;kmJp+3tO1Ygq(QC zH(Mhr>8O`T;p|Qa%t_6$*l$=pIr}~~9T*T*U%BYHs2b?aA0GT{^mbY$jInBW5IJ-A zGQhh7iRnn0RNmZJHmSJLP$0iI$xa7Q*7FOFEP!YCG&rlOT%zm)MNF2PqH8Yi52$k% z@4EufjrWp|e`T+wW7a3Q4n!EIUrMHz3&_{QfN7$w{Ce_HofS59wgdrtV=N_zHwG$xUc$o`wZO}#KmJzTTMOTCKK zq00ceBPY ziblFPj$v1ikM~jPh~u*b!-@-(;i_((1O=Vr)*>zIBbioi92Z`wE}i>+;WbS=DJWAJ zxb@%#Bi0aFUqAp(FKgB#1olxjbkX;j8m)2b_@%_uNY4gr#aT@bJzgy|)t*$xTJTej zZ^B*M05G=P;e62Nn@0pQicW?RzxRD$ZJ8ks_i#lUPu!7v#yn!yrzH{+i+Jc-dDaG^ zLL7?^M1PoS>hNd=lJ!Z%I>kMRa+|db}=hJ%6#FYxt)%H4VgGBY?m3-Qz0pMqt^0yK;xiENzV=uSfYgoc6Y#@Hj^@TC0$;0^mQh9ehed z!Oz={z$^P_o!o}HXB)grt9r(n+m*Q-UL7qOeL5iU6%>slPY2-@<2z-`FJ!(!78b$F z?Uib$qI+82m}PlI5dLT0rX{_(B%^m_zX>VBlM5 zf3OG`;9eIvan&W2TbtvQWV<_;L=SXgufo9`^r?~1^eSIg)imRz$e{vwrQ~~fZUlCH za^p}|IeJPgo9!e69D<;a6H^vJ%NqcUTc|}*c$XKW1Aaapm;W8K@d=o>=4%GbuVgZZ zZ)u-bQ(=oS$Y6uCl0DQxRcrszsP6lf5l@-)ge^%+BH{fCqWp3TcY$~DaEA$@Vxh5y zrP1AUkq+V=XW^s{NGD-80R(=h1ATsUaJ4)Sl_5^arlj?WUNIy=?fc&{1vdhU>bhEplao>m|ucq#4BH83vBBZWtHV zPG8NXaioKzYbmkD89MXX-xrCu2loa;K#3pTJhs8G(57S*doJ{rmV*?UJq7g1RHg#b zJd*1uiPd{nQEu=OeKdD)9GSe(a+h7Uaf0_HBLc@G%ZwSvu|Dc16?-`HEhG_7u6U6s z`-Ddtf_~2@N{A0{Z&Lwn#i*+mUofs!3>e;?A+`>ZOk)PmfPrVYz$3$Fz~~Bg#{TCJ zB5_yOcMayT@Pyt4w|{Zzq3XZ^7!$SuqSFrVaytBLWKCcQX zNo#4tRIX#1pA@L~IB46@XPId`@&+h~u*7+1+8=!7F6iCPr4+7L!!OhnryHrIaR!>N z8U^o95N8{Zj8BiODNz1+O~q<`ZhK6sb>n?I%a7Y1(0>l1X9ciZS%1N8GdKVM%m0f( zRMEuNz~+C9q1h^0YS=0$-?EIxzhGdCK(VQ8G_}S+!_2L;0?AVf=9%?>3w-{%jFUbu zH$XBY?S7N{0_E*Yp%q?reBT=V#=)=H#T+0ZpjPK4Hap$)%I)s;;qZ7qiR}g08e&rj zLSQveKNAw(Yccw4A9Y+*S-!Tk)nd(@SXYeBsv0k`>uf&``PA-U350)fMm?tJ-G>rB zNiO^X4Un#IA0Wx5eRnR#{{ti>Td6C@>9{Goz#KsiCZmoPVlS(IRPIgcM5DLtM3pIb zU2zMU<#dg&IngWyTPmy;z*TOjubMiex=HN^Lh(skc(OPe4Mrb@i0lA;>LBpT4eH(X zo8&gXdXdCJDK`kzaClG}@(7$Eq*YqGDXwpmcs(DruEpAKSf>GhQgxdzSpfUIzi)^O zXmDFwMjMUY55sZZ<#@8-;Y)znVR?uJ`u2d6%EP>%87QRGw+VEh+?gQ4LHevbjW~<4 zh-!n)hTwM{_;&=ZU0s%4(8IrjRp{i??7z z_VJ!S6im``3elgG$%d_qtNSkrHXISO2OziE4n!TMqC@OgEEcWURL3htE3ZY@)g#kv z@vgP92~Uv@$sgO_AwR-RHbbeW&?Y~T2^Oe+d%L`Uu!?+i5P z6Hb-je~x>WyJB47-Ck2jT&_-!;Ytk%rLuijJHI@SD!90nUre6894*ucJ%2=&Z9gjZ z-APwo+~R}Dt8mN%+u3cvyhaw2!&0zmS}p0QaBZ79bD1`v8@+b~y-ze4|McB!@6{sk zo`~5u^6j^a56%Aoav!E&!3`;Iec=LMrkC#`d@!WQ02UbCn%r|R(31U0{~dPcoA@SrqBhj9t`ik<&qka4J@nS9 z)Y(Q@_Z!;@Y&fY;Td%+lT?vSfps@HgxFtK180I=VjF|BAyYr1c=sEYtCp%phgDY(@ zD9V5C_}3PQVOmj^DJ5nVL8J?>(5?aLuU3DE`$+OVXi4cC{}ZqtVp5>;Fz_PeK}yM? zfi4?Fs-Y3`UG7SDE{;YfvQA2F7S2ZI|0$GGTK_AQLg7iA{+CWFso38l zQP2vinC@2*xy&z1H09L0IdJCs(2?PKqD_k2A*NphLGrx*u|PNM!FLEnP?JorIftED z8ee}#R~h_mtjqtWND4XruSg1L6ia=?A3ik3?dVN3lG|Wan*l+$>C~N7=p?9<2$9h` zX(DvG@q}lFATkR`Wst)hhU-WCh!tOyFbo>O=%cU?>3YulR9IDS*U-I8&Kqj3JmkAG zoca=W&e~6<#)}JR~wdU**BVi)&*J4I>LX69| z%s)@YE>>~(H=2Ll0k5~^?MrU8?Ub>&ku+BAR~R!^Z}dOPO6#oJ3n^X%dFrhDk)CH_ z+5VAnqxyt$4*6;_DRrZ+3M2R&a>Sht&l#EMfGMxAgAREwIShX>pF{2kylo$%X7-8f z)WKs%%1v-G9jb0^dQqy9ZRx!cm(TJb&Qt_pDf39V41H=RDd@4IqQ_|YIgP?>3ONnW zyLg~SG4Kt(nYQU@q}GdL6Z0I}>Ze?15i}wm2iElk#P(C-6L=@zZJ%w6yXX?LqzjP( zSyWOdPD>xK0!gOOCP<6k2mj!5R3Ad3&F5!S9k1C3#Eah+0PQrkatBPbMj}aw4$H5PJK3K%Jg0s$@3~I1(~Evz6Ndm;Dp~+|?yzstZ}Ek57>$asokE>R@jKr;A>VU- z{KPF}NOlmxLckPM^L70>kR#y8-KuVkZFC72*Ggj+;X{Pws=+EMI;rt{S6AW0MCI-U z?Ux~QJMu!zD4UB2(j;#M?;jUA0FDgP{QP}K6jk29^p^+WKKa6FiR%NXmL*Vy9i#j` zg88CMX%WKME1?NK+9>|vn1O}-{aPy9OwqoSj10()D2`r*`Nj#6D5lQQ*GIyQ)R{Jh za3>EsQyZzS%5G)5isT(jmh1AC1u%~&5rg4xeIeqEM`rA?77xAlsb1^GM@oYfVa zgCBXxmaOuXb@q-D4IKWS)C_a_2a?*!$A4nh^!Z5Q73$rmHrlid6jVYMS0WBGnU*=R z&1V>yvD9r1K~*V_%m5490&uQO^P zsjxWpBiGZ`^o!Hd%Hzm43=VYM*_8OHkkH7$1-sEClr&r{;EaWfs1k~-JRj!G`$78}vYG2+$NHt3$x=9;qu7Z~fYL2^>#L#B#lff0ij>SZ#)jmpJ)m+O01u@ERR z+7t|C+~cgkh!ip~`(V@JBhv=1#I5bfu^>~Gygd{r>0(JHP5S-AGvg2zU}4l5MtXgL z3M=W-9hI3+1JPuyC}W3}j^oo(+SG_|u*t}6u89NT>Zp@Oku^th)8CxFK$+N4X3fRJ~*Ug$6oi-aILzyIyc{1-$K+R5Ahlw)ESH0+Ht2qi5N<(KU*N@j+0|I zSP6}$JY!$m7=H4Q#uVAuwI*~+j3;=>Y=zD;1iPdZJ&FP7(TX)3{$jjgbC6ctSYlj3 zNqAEcdVwzgl^R~ktMlDIluDc;fTZpGF%s~ZUpM8qJhXb}k`fv9-U8ymTUych=m?d=d=E>3%#lBoGjr#g{!tQcH=cyJy-DFB zYRqSIfPa5&z0N~G`mR0EQ+0Qn@s=YFMXZ!BYLVw zW|rWpA6L}v87Q5L6e;ozFT)*+zEEV|x+r7tT%;3^dK0Gk$9R@YT|1MEF}!=B_rV+A zYks_I6FFjG^moHNO@8|u8z&EM8fEM)?Jg>QRB+;P{SyH~U#xv(-j^FP-?U(Q% zqvr!|2lUb&U9rqRL;k zZ%99$Hx?S~+x&p=*>E`1;)-f5i>9(}R9jvE6V(C}wI(V8GV64G9a+X=hfr?>2NfB&`V0pa|Umj3e z|5*8XNd`gu<7ERKQ*a4oLOKpt3LuLVDz;@y`H48xEXHb90|SKCxcC56C#nK7?89)A zzOh`?Ac&HK2kT8rIm(b~4n2+Cx39{!5K?t?C{25_u%YU!{tqoxy+}p-mh?e)J~_0e zurF6)kFs7+o0_)lanTlmx}9Lm?i5vm^Tm^VO9L>lMet-}YKwI7CR**$;&3;c<4Sy^ zKcDWV73RI;o1W&UwRQpUvFrRLk-F;irKMbd8D?<%ACwaK z{JIibh+&q;P~NqC!piC>3&%N>weRNQdQ=cFReeW=5n`PY$hM%Lx>K z+(T@S)`}B@DZU_Y-U%`J{5ySxX`-^r3Kufbx~1PX&14SG5Smx>mS#`CK;M{$sLsIe zTCDVGpfJ-p)I*1_ylMtKnGZE#U06|P`UzEPb_xJ%8U!kXaWb>&cM-cP_F(qWIQwgk zq;y?zS8Wz+Ku%WOL+ey~PLQqkAy)2*SMzrB>32Lb-+XY5TGFXE1kJ3M!=$z14!KEQ z%|>}v1<&1>C>*X0-h4)F=C`3nLAAj^Ta2(=jl(j}(~dD1WN47+5Wft2PKMJn%LTee zIC{yOS++>v=uHHL5e`18@FOW@c}Z}B)8qwb%Vmcu0h}b>hc4@f3##iCT!Iua#&wDqPou>A``oN#oH-{IvOo~ ziWPb)t`?l^{lsvRy!RM5mWL0A?MlUgVt{swhwqM3PD|R3R^8F+L@=OfLj<3Xb>cK2Fxt$GrGt@u3s8p!lYa3 zLko^0sW&e3DuHC#qLDs<&K$d$Fqp)q(7>&r2G5&h4xh(MTM+j#(r~kb@(IJOTMQqtCt3b&R z9e1-2k$bP-A%D+d*Ifsn2$5Ho(0hUA*Va{rW`R_<7HvdB(}U@SdH43c?V*JCJAH&T z)1#6Gx^xgdK586!?`mctEPbS`7&%^ zeD2|O417N)4E$`ILj}XGTnzkQBeTed=s$WG9_Oy~c>7s6tTKuE)Cf@~kLoD0pJBDS z{3)>e;Tax6?1=$QN$(Kc;zeX>yYL2(cq5Feb(Id3hw4_2^Q`42Q`*I`0vw|}p2TSG zI$KPQ_K$+Mdw3;kLv&W8{W`{nIeG`!{Yt)pwD%?gsmSkKm~YpQHwp)SFwN}KPB)e6 z0(vZqT9x-jE&1~+7aMgUqpdcBSgRo{9oY95@#=?8)f6)gCmL)zttO>b{P<|Pr|zDl zOgfQG@VSHwr38L^X)(9Dye6e)=!*ZAl;j)YOHdy0Yn>m!CyFLMZL3&d%~h` zRwQ3P2ZN9rUU&DignlS|8@f*i6kqCHKK8mk_ElLlhAe*2cz7dehC5*wyXKumK?f^BhHnmF+!colBp;hcRB&->(1ZhR_kK8lNXE_dHFv> zqZjO}w8Msn+h%7bybbo7VReX4^L_7kZ;C9+5tw z2soKI4(9cmtZ1L9tj9@5Youd=2{>-EKmxy@qmYP<0`gyXPt-jt45 zeMA0}&AF-6c5MR$0C4}y=CJ-Z(6xn=(_e|Fu!)nAsD<@^iU^7oW#l&b5qvU1I@8+Z zdn_o90{#8ze-Xn8Xy?UKlGux*s%){o071v#R;R||4+kS7f!B!tQ9y0P1_>m$Dc*SS ze3|ZgH5L23eEkFLPm{!b6z8TuZU_K3=t}5pKcyuZa!qgkC@V%v#t7>^#HCr5mr+4g zLkM)at*vCLSQ^p49v{Bc33FVmi67sZG~u|I=0|RbfcM+YVy^l>JIuoo ziMfeTwHRH4ml0@~(3^tC+SiD$XZ9SOpV#Kz>b%sGnXtF`T{4 zyfx^fUyFgDu$lSDA(6`BWmaDxcOuH5ao6J$OC>Bb%t{9Q&!`4NTRIfH`{v66Q@HI0 z2K^iC^q|uLpWC@lC!C1bB=fkow+Tk0b;FzQTS9(?sAs;Qz#l}DhSEb8p#d=7g}&)T za3=JS6~v8eBuo3!E=O=zDFwJ(^Ji*Kq2yc!$$8^eC?kwkN;pyoqbIlx&BEuzrpKpO zHGGD+UW(ePo&N6nl-dL*VH%Bb#nv~Gg;A6ei8)~=l;g3Dmdib8P*BO~h0~vTyR+_H zpm&<@*xjt`@h{|m=7L^nOfv9are%@wzjX=i-&Y_7oc`lR4v{;EM#5pjla&}beqle^FGV*vxWIF zOs;!W zSY<`o%f4_}Nl8X}(3xd99%2M(vamXT8mJ(-)GV#+~}Vrh^O)NcYaCy5?Txy7RUANur=^#M%wQ~5YwnBo<$n^`tEiQh0zTW+{%@fCe~IO z&CarRqx?QZkA-P;r5d?DZQy89*&zv_VoZ&~EY}xdq<;ILJFkWNO_ELZ&XD&^Gecf9 zd0Hb?H~Yx~_W}}Ymr!;+=XCW!0vhJ}u*3VJJX$N=X5;qgT{yz%Jor3r4M!Se2w^^OxvD;p>lNz9!t5k zVh*;@QzkK&Mi$$u0ShqIOn3Z7PFgR>=Z@xbwlx|euHSY&q>=j96&Sap8elW5^=PLM zOHpx3R7+bnHbrqMAw&d}>%lhAoSY!uM9TsrEYVZLoXFV_B;h5(V}xkx8cd#ig+<|y zfB!4`X}9!AH%&Q=wDj7L$6B1^s^|+H{jCkaxC$iBktj0a6EX5%0r%dGLh?dcgrT#L z5q7=DrZM42mr9Xw9Sbe6!37eI-fdZ@km~w7DXUX>dr=s@6nfg(XzfMsI>M>0NMu95W3IWQ1Tmu ziou4+6EVWuI)+t2^E1H8I3QK_{@Yhsc&r3yYh-xg?U~Lh78z7phgDj(6)0TgIBJRx z4?f#HB(-!MIL;JS$5z}r&Hf~%4I`R4iY@&Fv zlRFsjms~!HE5f>4)0te=T3}Lt>Vh@+#6z$YUdg6=1qGpOR_dUjM zNnT{_Y|@n296IW_Y@LQdoctDla}0TPwH>6Lt8zu;Fa+XM0w52dpm5c)4n!=~$dfr- z{`fhKh2yx3aZE%TcyA19J~mz>Y?C`=NR_`>w^i6Zw^xkmUliwF!Z`#1YAW< z2#$A0R%|W#SLo4NH)qY%@c9SfjAhVGhY|hRA|1?*2;7lidL884e8nkPpV6t~g6~&8 z66JI+v-N6sls#@$1g*^_>B!`EDo;u#bPRV0v$&CoR=W_%iQ5hZ>glEx^Iykt^7t2z^xMDV%H`+T0N>hkn7!daa{e=ATLTXza~ z_s5>OTNjOg5BjNuA&0L3*qIj}`pBW4)018TuXD*Gne(;6NIF`tDn`tpgIl%oklE!c zEu&WfukyTy_Nrj_^Sml}1p4gk3WwlnLvZZvp3 zcpO?GS;dfd*gyUwE zKkchpuV+6BxT|s_?8xZ{plg0~WgP! z*9R1|vj5`5Qa9PN_z(fi4wuI3jlL}tH)0-fd#Ip>9q_;p6$D&@-`DOO!?7TAW);wl z9A_tkEm0eMvP{#3U5qqimIfD=Kua)t6(eNIK$i%MQx7us(Iu8EFTqBX0NGU$pDCSS zJyRFRTJp-)O>LEjAS~tT9Ah2hqN_*0)R27>tUvqC6;+XRK0oiw#Lw##tk(w}R(RPwweg_==z3*I6Fsd3cYkg&ZEDvk`Gz zS;Tj88j|nwgG8~O@L%8?0m;Vnk#Zq&O9#x(}2jQEJt<21loW|H@7)KQJEco z5VuH&JTH+7BB)UvqfA_>8>dWNsT+GR+52_2bHj9L1kG{HX9s^x_Evz{CGVvWs%o4K zc+jj}#~^ed;ms2=@i7_2h_3L!atd9#Pa3_gIXEn{x^~Sl!nVVbiVlzHYuY2u9vZRV zwTrE~*4d*hrDg>cY+e;V-6e2pnLK+;GCrTFE_PZfPB1PL`lPmE$j)~eIkLkx-Xk{m zjTcX5oA!@dX&o6XSqU?5%uA~*F`+8^H?!6UsxWcfS;>^EtPUs9>Np9tPJ@ufWFg`E zN=ZZe!l=GU*2CgvU#*aP>xhC#s2G+dGgqA9chB{%gR%&P%(yknXK7f_`o?J^uHq7% zywepyNf}3>)a|4MklF`rl$9>fMLJm$dS!|A{-Fm(gM?Z;Ez-K=SE2UF zs6fr=MVa+snEM55LQPi!qCBFsQqx|Bs1(>W3Q{P!i*KzG=gL)yA<6`-fN1qj98zIG zA&%WYUqI|`DQ;v%O>8*o%xwB6zc|KOw;e^2g1C+;KvPSCs40FwDY_um{)r@vUcH$i zd9&mQ3W+8U*(wjZILuy)d{C0{3gBzO_=`CeIBoo=^q~)_!|!;GoDuApFf%bKb#&lX zdN4gNsaY z%7vtJwSHf3Vm+o#dY{{-3fB$D++XFVul|^xwS2&>|2E3_?m)T>o9W72&Yy&pBi?b^ ze7;gEZy&fL8I}t_z5dva+qq|aie7a?cMZ9XYb7r=MC-u45ETTot_U{Ig;vVc+*P8v z7yxwyC5};uc4WwHQSxc~oQv?H$}s#g-es3U9x^0dsq5DoM~$3cmPY)8#GeuZQSj7W z&1#GMS?a1?##Dp+)yu({Q}{}?JzF20NUCMi3qSV>p~~+j0{Cc_Guz-{9$dewTnp@M zBmOJxU$R}tB`;z+AugS!c>EU|Y~T+9o%axSpCP$UgyA8oTR1b_yd5hY*qs1c#sS58 z(A)vagQu|9Bo%LZy8+p|&Jk}!UFkh%A=BYTpLbjzt(!1ySh{O9xr|7|ACb&I{QhbY zNd1W8NR?{hk0%Bget9@p{q~lKRDi_u=rHAF8M<}2u(^jz&#b&I@FDV77|XmGwgWY> zXaqM-5)UVd$J2!K#A*jvGoC`7l*iE}Vzdt8jj+FlKS|P&SW%3P3!`3krIF`!bH~@y z$!nO@7%1`|zlhG>D!+jKE5N=YhAMvo|M7#4_UdS- zi1dRGTP5R-VIO()U02rTOHu@M=U}~;l;H_4vQoSV;mpmg)-y{lD+my*TBAVYc z{5*o+hKB|2B*S@B4#TFuDPGSQDmHzhG4&bbOKxolY?7doTXxm{Uoghe}Em9 zYI~5rgLy?LVO5UzCOun+v)SD2vDivEVF-BM`uz|FSX$a+3d{~th=p1)k?$JDtEPwv z_@slG?Buv9M#cQHz%`jwxDK|p@&2)W@N2Z~J(p9((KJg2)Yo1n|Y zbBOSPgK=uci6hoZdTSlOD5BTHvLe{P>w~djHMpf8`Pz!2)P6m|2@CV4W30t_Mt_fK_sPl*L_y+N=c4v7zbt0Lx%=d2RH#uFkhP<)$ zLKdq_%1}2uK}XU_j`5!k;QOX*W+rklo=jgJuR;0_oG-yHXyS=DqjuH2Qm0{yM)ysd z2;J*k|7LMHWbB+)w!X0fE$Pi)I3UdxPe2QA@)@qagG+lHrYUuuJxd*(&KNB2ADwFT zU}vXivR3*JI%bIw8V*Fn7GobicVOSI6x$d4xdw}BhV~s>YTy@xGk9$t(%zi;zeK#5}oKG0_Hx%?uVvk|Kk|e5}mU zfNrd@M60lKgW{hLo6c8QTm$R24MfNEHdv9eypgx!ojhh)dv4d<1$yIHFC37?m)P22 zpqh@Uy6cy;(>7w8QDW^WS3M*43c>*K-T!G`kP&cedxh_22nS7-M80BC3t)*1tPFL(rz3hr# zvPN7!I;gS4j+4eod)Urv{G0>_0!*egv5r0U*^|*Q8t`syerP zKEkTX^=567(c6&7PE=j848e+z(~zz*ifYIPkgE1{Fn6w=w*sA?aX>a5PEJZ^_LAMv zZ&MPXu}JzTx0IL0d(u+N_s9Kma%Gk9`q1=dnlWP?jpMAw#V_FI{{Cuuwn)CE5qQy_ z6fDhz(f>^)A%!QL(8g`%JGMnP!XKAOtRiY zA^)>=u*`O*s(J9{9p(NMx7`$Ulfg8sH=Lq9a)#$d)R<4s`aQl=RCa8{IhfOVLvV^UQEQ-2;E1ewr| zsBwXDokEjdYuvTsJuZH@Br884+tcpZkw#3Y**P)e1(fApxuTEG z0yQiENP;})p9`dd04N24e}Cav9@3fWlyKRfrlv6OwIWK5Ed!K|oyt7OT&;Y{vI;$v z!sN2NDcAC2p0Yf?#?r7^8r7NnO-lFdj29;5nKvcjB^wEphiwnZ%Rs};j%zw90GfB# z&-LbjHW6Eb)<@dz0Tx_QzAuRD?3|L;R*XmP!p$rMA3nrgF`M`l_{5j;fXV!i`Y=x14k4va^Sfc&a7+|}>}ek1SC`lC zm|Ru z1pGcnG9h74NBoa{Tl;e7fbnJ?_!7dRlM;i%VP@qHWGTJL2)q+xd?Z5RgV=b?*u(H7 zud1f`L%Xs|B>m5SNet`&+VIf(I2YC9qXsRE7BU0u$#U1l$z2dfzs(_anh)A-L&WE5 z5bPog^HRtD2S{Et=O-|z-1NX1!6n{C4OhF(nc{Xa3Oa?+@Pu2!!hbR2;uOTiOA88& z6q@@x7S7r~LiN1Q{{DY^sQ+Cf68FE~Lz&pvTj~E-Im&-L%?YXMgAD!SN8LARmihns zw4jZpla=*%qRUvpSpPps_=##zwn_^apE8e^n?@}V>D{-Zw8SMb)V-822oU1HKbcuV zeDZuGlFnh&m(K?`VBi{55YEcYZ)PNZcZ){CmF1A;>W(-e5j^1$8tdj0(3OV7^oK4AI5;<^wH)GURLx_(Xm%qqev+Iu5r zAn3aC8tJSl(!<1;6k?2ttfjnA9wrw;h@=CRuSYR1v7Bn_VdO=*xVVCP8R6(OfQV%< zV(Y=UfH4w~9(Qv&*&nC2uA?uS=NzVY*0#20EC*;52S`vy1j+UsM-;G9l$fMa*U^iR zcHF4-cGkB!bY#Yvbp_g?%SI#sA6m?;D(Ikg$~a5c(?c9U=C9RXCpxPVql^%@XtTH> z^cx{5QY(ejkn}}UHLvZC)YFhF(qshInbl=R-0fr173sHzQbH|&!#K>1N`q6%w88InVb41w#1SLfLbn7AuS-pheoE7{mezO^~3{_6{hSI1q1I(ODdg zlr>0COb{LK4Y1jUhN41A+LiW>f61gsQP)^GKij{w6C&lu25vxbZJ?giq7*56A$SS- zChNC^qM)km+6T_|z)XZjbnyGhiAfY#b%r5{{;*=LkLi0Hqk0-)Lq?c&D67j{Q1nu(Hf-VA2K0z|4qNGJoYP-+b`1672EfjNg| zgie~iMqEWjGJn@YfXITCiGWL58xo+m`MGJB1P7wC&T^$1Ma>zOi#T2L#9CR6R9Qjh=BBI=DlKvMDmgq*B54K> zlycxUu?g)`F~vq?!if@8nIe+Lr9zf6IM0XEgm~OYuN&=ZqFN8qv`FMIB#Ag8x`=>Z zROKO)-c>H^@3KN|4PJ0Ow0#R20nKpIoJdTNz(|SvpEk5kubb`Au1_E**&k4w)qB`h zhrUsJqH(DgfswEcq$WY`Jh8ETj$qO4Ep0 z)8gc-qO3<$XUFQ^#x&xrVxP;zC`qp-3t~?~>ACZvRx5;m}#=r+LIYBVz|7@GkIjcyreBjmM0w$7!Bh1r%x9>v`pkDix{ zhE?GtYRMLtso=MarMu{fCiyJkfa-?mT83gVw>Bo2)#_mY;@}+*S8sIfN{~R z)uh*^c;l4VE2cfgp0o+)x>#vr{H{`{BcX=wNo7bQDFPfI*KSd*PciC{ZX_i8FrFlP zqKZi_$+D7uWL$BJa!oNz#%Id&we6pz<4Xr#@$R>syjf2SWriFFrkUV36{S>6eHgmy;%x3eVGbXX8`0yn0os7|Gwz zJO6YiRw3s>S5b*XSJ4&_5=LxDeHoOIr8Xj}W&2SsJ}`u=RMhusxLcoE*5M zPD_(s0aJBGth7g4uL5RzwUhB8w?$`i-(OgOhvp6%(PDkUf^A$J2Y)ntL!1tzXg#_O`Cjwp=yHK*DnK@^%Z_~2o4lGMB*`gqLYgb$rD94c zWh4`K%S`B)8>fs9+5V~MMUSTvx4ZK}Oo*#U$gm;NHagLE#S0|1PDw30s5Wz63<9k! zVL7aX9wwwY%*|{2&@^oiRVnCOl7c+AB^F1~-E;+pDAz`OH*9j~*2}FekvfWp_egmS@p0?K)dRY=K z3|v0orO3w9Rta&;NN&O<{iN=+QSOcg1Qy*S&9JHjkrsedwkVp6mC+fPt9~}08wQEZ2A&7NfHajwJ5%H^S>-V(C8#dxykAl^=3OT&ppPv2hw-61n z>^f6oi%gn$OZ(*o<78sIYz$$UEf;FOc((gR?ZU2c$|HiMPR9os6f+aCsriLk$_Z?J z9GZTAcPOM^6+9z~IT%Yun5CVXNL``A!ex*|V|VA~f6R><=E;rl>G?ptqP#9lfv`u? z4|U2iSo=I%o6^~a>1K=u-CU<)!!5ie(6L-!=yO-l{Q);JQ!589G$TJ>OEJzaMyn)V zOrfr+*v8eq>V@Hg6f1AS)&LEf9vz+;-J2d|3Q+mkRouYaj1|ZaJ6xURyJip1p#XZX zo|}Fh>MdS*b7iP7Wh;cuTzWn(s5RX?VZ zJCHNx2u&vu`vpN82F=uIT8qv)c9-}yndyp}|#;FajY101lDuPID5h{PX zdp5t>{z1ON#Bni6dn4N7WMkI5g07Ck#HG0r4-3|C&JM_Zd144aZHl8)6!{8jy0vrO zh90ha;Bl;0=KX_jUK=pUu+}GXlR>A*RwHIKI zBRPq08B|fkyLNlpo4m!H4_fIIh2UQd)WTd>naV1r%5--Q9 zn1QGMi+v!7SyBB5(Do@zWcy|t5hM9DOz_~k9Tr0n11u>>U?`1;xW0{PnYVQ6F=OL~ z_lmQ&>QOLxm3r}45AZpRHIS|Lz^ljd3}1e2>TUBH(r{B<5&XAL+Viq|OWo^}-^NSI z{5?MFovrU3;^UQq!V{6t;8PM>;C>ZMfpG25N5We`XUBBB8)6oIqL&QwpklgWiOSwk zWE?D46ey`JViE^6b+8&|ou|en^Pmr_W3n~WO3HKCV;{3v1p(NZ^T?O~1>-h3LEZ*= z%6v%>guCyn>6M%QQ4ooC^?mm>SVaUui1jadhH{rETXws{on8dE=*4ollh6Id&om;F z3*p2V*`?+e4$XrTNa!2;Hbk)g5*_LTS@&g`np2(Ui$yQtuSW)5E2Ih?9?Lu)n zk;U7gDJ7&ZHLkO^2!-={CcG!Ov3!emI~(m24+p+~1Y_>@TlRmKFMqBgiG>eult3SN z?p8E&MQslfEl+Z}(b3YlI0ujZLW^!W!e|jhf>Hgw&OS5!HU#Tni+{EKJA2VY2cYbd zvfk*1sRTCTy-v_!A$w`hHFag}1p5*x`pcVlpR~=71d=!?xWwF2o?t!KWEYnO>gld*GygD0c40RqEu3v3@VT&T?y@80MrSDC ztT-Pgs4_w*PD94#5a~+W88fsV&E_O!>|xu<8CQG(_c12<;o-Lc6WHOAlJo@Zo9i2k z8%qgx8bzQh$y7Kdj%rSQ1psgB#4heycplE1;)XrfrFPOh;hw!LIr`(*e~(c}{;w#* z*xJn0O8>ve(*FahjFg^N&wN+qA%1Iy{SQ3Le+N4M{u1GTdzX-z{XYTAfAB0Tm91Qm zl;ORtv05jba|sHBg>%ds+|1fksB%gR=?c)L6)h#;mG(^>;%Q0Sc-qoOyRPfLfH8wX=5MNvwRRKzGdZ>ME(kW(<|6H zHUZ{xYC>^6EUrQbgB2oyZj57FP3xCO$0h=e&OSj;$mVRd1*;XUUuG-Cer8p=&N_aI zE-clj4s4fU*jxd?!D!roHyN?MWbVfdJ&4-N1zoH07Y^z%D&zKJh_GO{*@kHs&&A{M z3jei+j3!LUgY2eAA3>%Vs8e3y=-AV});vs)-F(rGfrxX4wlZy-y5rg8UTDk~B8QU< zk2Tl^ZK*OE|E=fs3z@Z$CWEq1s&>hcPV6``MV7FTzzW~rENFa$1-3<7(Iz03>d>Z& z4(ZTt;Mhe*e-e}4xPe7n{!$)au_b4Z$g@I!vzx5B7yb-3tt21$gR8N?t3o&H$x*AX z7?YPNW&o(KCBHDnI1iTlEF@b+qap2Ds9~cBx^BeV7%G%#L*B!@Tv%%fV5EmZ1?^Bx zkA>48A_~;^u}>g!+{RYToA!61moVE~Du#hfZn-fu|xi?oLbLW zm1@1w5)N)XH{_}L4hh~)pmzav99l<#b*ytXN$a1?#NZM?jv@1A-UWSakTq*%!9e}b zu6glE=ZAf7Z>tN_eH>BOa+u4v-XW04MRM(4|C*F`kDnU(I}$Fr>$!ii&vL}^&0^1q z>Pcr)y#V+3y!H3vy!ZEt883j!zV%yI0uT9b_r1eb5lUp09s6bm?*5L95Pr1hk0)Jf^dE?#R@lem_O@Xa6w_cvhg)mmH`MSR+@YcA0l;{MM2RnO@vjW(<6>LOWWZ7->knk1|s*>(-FEPFC|*mV_B!;VT*N<06!@&d0>gtfu=L| zZOgF;LBhTusL~*;po^^bhWMWi(^KpE)nk2Y(P{0Bsie1|80ttoh+G%RK|=_`3i7D3 zIC^Cg@a%LR&gitb)9N!R1T0w;cllXijFQV4SGq*x-qTT=CRs)pXg#rv$&G!eYOq@G zGzN0PUhd-d9S^Wp%pfwd$E1ZpN)ZnN`T)*i#-l3m5j|C2mVSO>V7~h6<9kR7d#}CofYrs!9F3B<+a-tG zyGx}L2amacQz+uRzx8_ZN3-E-PhPnyJh(xG{fH9=(64B}=JsUIpuJj*Fjjou5tdEu z4N?kO%vi~;V^oTpj% z1x11)L%7AhgQzdzo65v!_T%%jrhf&^xC937B3NVZ9m?E5k)k_KjzP!c%1Na83_=Jc zkGd#MNf?WN7!nbNlkE>g6ps!4rNYbqD;D{ROd=RvHDa`f_Fvy&i_+r zQ?)nyE% zgmE(6oUL|%z-z!PFC9054MY9l&|({WpD^$TDXqQ_fivR|LDg8vz?cTf41Ijw#fTsv zOh$$XHgwK{?D(Gt;tA0zZH=n+Ws4lZHjL1$X=qfvG}riHW5<`>%3!RegEr}|zpfCi zC~=-3p^FF(Y4cCpD zUA6EEwZ%q|o5x5f*wJlBx0l_?4sSwzHA#5~Orcd}@{V!cyZgcHASr3&ho#gEuJNxe^b z^|F^~YCSwZfQMv_Zq(hCGiZzoQpebbrojdwg3wV1hov>T_pRYh_BYRPeK zKW7PgEh&C^0V;K6vDi2N)+!PJ-DlyT%j+i&!lUet3G7bU*0iRX$S?B*`S`P-T@smcBSml;l2~ zE-MepQytL{B(UlzD-{9l^Gvo$Z`Y>H<*K>6?M>nU^w9oJp#Oy^m?WNKS7k0oVHOi< z9n>OHQcHvlDFRK>7`sP#KSBK6OyW=?We8)1rAk?DqjWhol=|l#iBVq<;PT5=II?UA z*%$z#^lCzeM5Xsr(0bQbcESDh4VtAO)Yc%^r<|C&*Pxc4a0Bc$U_@xt2b1+r?P8)- zFY1=%`WVz2D78Mh7g05(8WAC!s>72`pWNAP2LkEA2r{kZ&J=A70D26gz?);aPj|I~ z3K=e|z~+8}St=Y;B@$j(oYDPKB{@K#dBpR>j?P#Ljviq^jY2Om0I{M-OoH1)?BSOn zw+KyDFY2USWq?IZl+vT9qxMY1X%04NlhMF4m~mx!!N~LoHE|cR4dS&4gbhE2zXj^r z!mJd8tDgj&-CBkD&p7pqa!Ydq+bNSP443hts^n{xsx)|TEGPSFj3t|R+m2FewWsv5 zTVMp`5>z>&9)B34_>(fG5PiYLNZaz!_>rBom*!sQ$$c;g9ZSMHFqF#h__)OO_inOW zR42#ntE2}B|DMxZRF&|8Z=)LS~@m6<5)n}Mr!n4ZIpRnz+tp`C>Pvms&^~Wh?}961;kCHOM1q&!IR5jca%*# zCSZ-DQLxXTAjIUyM&z$s6be{t%X(E}^~IBIHH~pXT{7k*>r_XKZ6qZ{O>X@jV9=j= zxDfpJjLQ+z0c3UB;t~CJ^u)PvP19c51pDhU1ea+aFHHK(2 z1fg?&rr@XtaXZ?T;qZLIXPKC3aUPYgh%oH6mQJG9lDOD6lk^XIzs}Dl@#Ue&wD^pO zipseFc-5L6So_k{_7`r;t6kRDZp&CJlWA`Vyx!musD%E}-#nmll+hMf*z1uVAf8IS zL#}=k9q&e;8l%PZD6}&7b`aU!KM~8RItVU>gQ*B;PPrN>yz?{SH|chMdd9^m!GaWF zu*(cMVeZ>LZwDk!%pF?u%+tAmK(Gg00|I1s-~~DD%);&;y zH^2xp#ZCs%(fbUYA|Z;5$H}J5;XBNu+6L&W8_*AfF_2W zSqKs+jI2PJRn|$xsxHBw>g9IxhH$kP>5`L$M=3vc_Jkk<$w;t;)HNBFEwErTqQO7& z9lJ+XsEph+f$L-GT*{|88t#5%Qb?fCvvhMpl1QlSk8MyM~R#GfgmNi2Rtym1^%aU4{Q z^<+NhJPMSFFP_TzxQ_4rkV8AUkh?d*t!gI$e>u<#uPFD#*{a9fpahjZ!8$7-rvjFc zV*nR{0CnXFaSE=;yp3%?xyt24NG6sMuu|*3BD+l$ay=uH{o}%Ale?QK|g(`$1NG7i=>~s?jR` zhnP`PCp?Z?3)`P<(11-TbGfLY){+dNx2xmyYyKW)lQUBwNl*y*bOD5oYD;=hBUy(5 zO7Fl`%IYEtckWL>kN|n$Cr0emi!MZ(`k$;Y-RVm@Gbg$U8s;jeIzzq7JO*%RLorkK zun6H_fRbT*AddWD9-r~Ny zq2|4%XBfT7X4LVF4xga2dE}NA`HJmqmbt_-KOggPVVFb3jj;g{MGA^R;;Q*@hWvff;dfx2sF8Y&7!kCX zU2@DGr{EQgICWmwShzm;KP4rFQ)za{Xm<=@qrlCr>|v2L3xk5^dhdFM$mvXwLCc>8 zW8|k)s9SI~%eCxbq?7o2>>6uPxsle^BkpKkBKUaxXwrGhtY9=Ghlz~kbEBn0ImO$& z-}t?N#+#`;J0#o?ElPi=G$pbh0t+SHEn`vKCW|*}!|`mfR;kzt*<*Az!%V)tt5OPm zD5r4#5WoRC`>fBN;nz2a(!>Y;mJpntZv@!W~$?bz0Oha^WsL-Z3JnXWZ|EyPf z43FpYM~AksN8csnzPFZRa-P96K%)Hu9+h2jkIF(1`l%?#>3J5ap3M~cDK*^Nbd^2H zArKaps9I`!?ED+W6HR0ge-ISgj%GfDFgYRjiQcT}@3+?R$|4mzK}RdnW_6>9+SM;y z)E8xTtEC%*45hDD5IsvMYMz33E;5JNT$hCIuJw@ zFk$}mqrScY;AmX2*%SzD`otkGivcK8zXvg%Lq*8~_0V(zN2!+w&*!f=a%zOZYfz32 zmlX1~eCgMOaIRGD>#Wc9c$US}o>zF5CtwvcU*WBd`LWuh!`SfvEXsQj+KBYWZC1UvB10O+V zZ^1vqy5z$$a?Rf{KV{UHx*vD(giHyPS^n(lF6 z?Ab-RUT3r;$^7~tso;!WIArtB6lLlWdLt(zje!k(Q?UM~7A2>IEkJmjX8BVW+L zjkJ9IFP#|wu|?G8%<}g9Zh0ev^FPX}|DVoM{m}t zb2hH+sPXjAl)1c&WT`(Ll6I!nH$~xAheft7w^(XaSbeE&^y+=A@=OXdN$03LS&M5i z;*Hm)ikeha^D?Dhms`_n9!`I* zJ+#5p0_1wFIIxA4{7N znu|40E-ofjWomM*S+B3IuB1X0-Oh#PCThoi!xc9 zF6P8LoEKngoEiebzR`D0uA#+SQX|%?rpqRvv%I`vteXUKhC^z^)askedpTkBgi^8E zoBD$`NHa#;aL1mR666<1voz=-qpvf_HCOZO@A$xm<}gj!EXYTFtK$k0n^lrni`@^ zvGsFqz?G0t#TLuc*-~bQP1_f}@6zK_t&PfSQd-5^R@P*3aVQt4oYSRx1s5GkDQT#Q zek^`69M%9^B5Q?f$t<>F1CG_tWezgQHFe`L?8^)<%uokSYRdsudzlOi*&?f7{y0Df zT-1(G2}MD*ESdDSb-klZwdQ`Z{O8@3sMdWlsMBiP)=#mJI~+AB3#}=?w}?Q^7NmXv ziFLCA#(J%5Y7JU{5G9Q_JU$*gVTe&Gp-F129WHhlz>HAlx}@ugB|nln2&}C(gV3ar zKIPS{8nvoktJwaH46W^ zvP&CC648x;+@O~o*anKmlx@cg2KenDj<4MhxZIh_E0O@gaqAf$MDYZG- zQ#V$#laNf|s_FXYx~M3QJEay!cyIdAw~#CWvV502(0d? z%+=%-!cH&^c7HGmkjx_|M7`ZZ;jV&G%b=0{kOcntU!{bv^S;zd#h?HA-yR*jyNGLz(rV-(F_qn+p*GNZ(Rnvmb0O>#+7E&E}` zvYO9%ApJYfBBALy@5QLNLr4af3{XVqG=Qq@oZcA+(+$nvmtO}fb|afIc845LOFIy$ z9zDI`&x~W$b3z%?P*&Rp`SX#BNmhVGv~}^Jrq!MBLv;qhHkWp z1=Sj^7`pL_(tl;I3UEBOMx&0Pt3z!7vK3t?7qg|a%(O`v zzG{o5;yev@6CH8(x!rKo@0AG=K8kD3v(BlXxq)3n(Q1bZk3JKF<&H;hzfL@>C5|k3 z9iTo+1ON701l~b@EPf{n>gsVH8xN)YP>eQ(iZ>9?#O;d8c#xtC8wYB|-RPv;Z$09a zoLAC`SE!pftrwW@cwHKOjc=w2Pe0qffL9xg2&Msqs@M z7gRdm_Fx;@Tmj${7$7E_RYqyoC@^i$T4RWYU1KeQ6Y0*s4C7*Jm~#uXF67kcS+w3> z!wA|uPjAa74^JCpSWiZWc3tcnbB4%L2`IFaPE4yDjrRimgYPDFlw6zaS6nqYtxPjF zjjk6k)I+trZ-a$uyp)ke(uFOc((CF*F;YjgYA{k;W{XVn>a&r&(ziNVJgMo@6oIYc z2KUc0TgNbO40s?NPsE_6+qYy$kIj7{k^xCA_<#N6ZsADZKQOj1pOrk_`-XC|cDn=r z?pDjnF79T(Sa1M6b9na@<0U?m6dK)txz^AAZXVS|iHOLt6cGIVwnM2Q*9U>oNFbdS{PtNw-7?|FXK= zY7XL;@7H{h>h2PD%e@$@lkA#fY+Y$ON0Ycw6+&tjwf#(e!co&4_1#H;8J)u6fgNm1=^v7dFjCqU#AdD=WqfDU;R$ zYs47^mNOL!qrf3JYw$+jF(>yY=8~oAGVX0wK^a;N(LT-q4J~&e4Qf|4k=Sl!D7YcU z0Az&-&Ymj+?E$D4Ox59s7m_I3u0-#0z#2z_Ay8Mi zS3hwyw{ARWZ)C+(TYy|yFxG1@8L__PlgVQ-%Jysv)RAMN$Sa1w_Jw1x{vAfTjoS7O zjno`ERCtBdlI2=Uwae_^1|#$)YBYpm*bGA#W!>~;wi&uQ81HMxmxOla@J_tuEkX7! zxZy3)0&Rz*WD~WfA*;DPo~dTu5BC@?WJ>vx_&dFE?7)V(Gmy0=zQCVIGutfgiU;i$bkmbx zQWm|44oeSb^~C%t)Sl&vIYZ!jnhBR)Y9huGP|lmTq`4Dg3KASNKWn>Sm~mpw4ChdL z3h-1uBo2%OV_8HO-NwS~(hMHMyM=;!XHvH{0)x8u`%R7y1;m7go$19-kIWs&xL_0r zB;7-xKsar*kmBD=xK9H7-D;^IouZS{D6`*t6e4%`ATHz*m*! znidAiPIO+U&I&|9Sp)}fveRQ6xW&t7ZEyWV)uP|DzNh~Ku{gL9@r0}LT{r9YYh`Ba zHI|f$=~x7>a5JrSuX^(+S$@jEHcC_~+8XJKaMftvxk*%M~D;HVB$nxZkwk%G+ z|AmKQFP*QwwYxONEKz~|$^`1yUJq=slbCwkU}7*;j?(YcU=N}s%Y}@7@r($~67m9g zX9U`@ve>HkP*AwQXFd{-PNupqUVGQh7 zT%+xjRgVSVsHO~US>DgPMoCFOcV)$1%d19;M((cRk{&v7zI6~>m6n!wa@DoDX4+17 zUbPkKa<#mD3>XYtPd`8A@gs${`j$ets|6L;!0YadpJA}x=(FA+G+xMS`J1L@=o+N) z277Zy4_yP{^=xfiI)aYV1sJ{`?UcX{ zmB*GOJc&=z&F*-nt~@zW53&KUw}f~)1IMndF6J>!qvL=rlt4p^@5NBS8;XQVSmMD4 z_DUKo!!DwC4MEqQ#{Qz+wovCO62h12!9CwR(nFofa=Nl#i=JYvhz~gWvhJbO-g~4( z<85Fj6(+{(_27#3j$5bGx{Dt>l zlZ`oF#3f4qNREFe9RG(tS^pI!ITuMr){WN z4vtHEX5D}_uHUe7M!Wt(-x)xQEDeSGXL{V31fQTs+T<$J;V6s4=2o`fIh7|CCW~Ue*dctKj=Q!zOhi2>YQh$!hQcOLDkY>3yrrgXQukJEQ&&Tc3Nen ztX*!H1!oBbajVf;M+HJcUu1~d8qpE`Ci=re2-BJiakSbS|1YRM!IL0%m00ApKExys3GLwqw>%r+Px18~3g`_)S=w`oLWW ztIaA0*)lhfK|dbx!fI_t6twI=zWjB(%XwI0OE*Zvis|n(HCjBO@b36t7(z|zj+s8t zePMPlYg6ro9YB{2Li7A18r>I9_4H)|rvm5!os&WyA!s#aurgpnXbh{4A49 z(v47Xrw%*)y&(2D+${(=1*uH!qT5eCDJ%3?j6%!X$VlVg(O2G>arI~nKG18D>~&+= z{gN&S+#-sZ)89cN$L|qP>$YqSEvtexM{{eI`!?X`z`26FcZYb97WBw1d^Hfn{L{i9 z)5sv8<{854KM+{~&`_z0_L5}wlJ~OH;=AtT-^JoZ!Bb*?kx@UN;r{D~DnL_eMjPah^*U-u17KeQs?`mTFyezPI`mJ{3{wFqCx zs=Lj<5X53#F%uO8P^C|CQn5U1Y6J^{oBf9AO)>3emJffyq#aq4c@wb^WJt%AZHm@J zLRxwM(>UE(BZu9T;mnndgVVH%bm}C?aJD=^RT(G!zc_oRAYH;}NwnR&ZQHhO+qP}n zw!Pc7ZQHhO?B?w=xHIR@!x#iVDqFpF(>X?GGOR%em=S*c%SHZ93H$~}x97Bq za2Grp##`cekxqeu0VrjL+m(U?!x6H!`h1Etk8Tz_e0je~+g4wijB|mM&?JN-8~^wW zvEvInPZw#{>|8?b_i}l1sQXWOu0p-Gg<*=jnXzOn)(BWt>KZjfA$T_!BI&#RGW3ni zhXMT14r^1wgjVACN>R3W<{M;l_T(p#{JM&lBWqUCYTebCUPh~4GSt8k>X zoxBX`@y2X<)ayI_vh&C3>Bu55w4#jP>+@a5(x@7P zX;W7yI;Du&DLEC)NX1Po0^u9Ef;~s-9%gG3GLF`3mI2cAi%G+T{|=f5;??MoACNG-e|F|;}~S?%CtW9{mqtg2x+v^1>q>#4OK^Wif*D!%J&wKI2<2P zWr+qNY%IJ62zaExa7z^yNlC&csGdTaZk;x-2U1rwVA3wkW^)|%(X7W)8*I}_tD1%^ z&#|ACL3i?KI4EToHYQKgQ_s!4=v^9T>lDqv?qVa(@mXg#HeI?v4KI)L?AEi%hBxXS z7L7)-*&ser_S>1ef1|xl$0{FX%iL)FbsrL5vw+a+a_WH)PSj#l(Zq@oNKefLfEZ>e zV|BImY*XBbT19TgY?uhp1(%0p!xJ_Sswk|VWkWS+M9j_G16>N4G~BeE zmSQey`kMYYjPZp%7FH2jYk+I`@Fn_B*SG)O9&hy3hG>ov$-ygRM(UeFNq4#tpYYQEX~ z%4gkxMQA`VoBX!=FWS?dupHbGm(SNn zJ+8mOkbRJ#b4RqP+lzNTDPRe{{yHEY4OOD1u1+H=jbVp)2NZJClyrTe!7L@WdB?9I zQ^O)E_skQJFx=J1s$zQ>+?V~fsd${;Y$IPv>{@}EemBUek#*WTHeqv`#nuSR0BH{% z7y@*sZAnF!H4jboRc-T1)C;m6y0IVT1Is^Q5VQNExe%Z| zAvyDHyfy>>av|!8+WZYu0BIAz&HL~P!tB8)@Fxywg*7~oXB+F7Nv;czloHX8@(f1g z?v!|kqnj&=%0~6(PaG}OE!x&}Xsqt`&2qu?G=kvh|U?kSwH z#R|0AK2|6W){AWA=h-3e^5}zjy_Ex*VI_~VFs*yr}Hi}-!}GsyrfmT zHtH6wAZnEdIn_5uI!dMR$S)*MjB~$xsB3&QSPJ=KAI@5hpCEKyh{|(GZ(6l^F7-Af zB;Wd>_WQ7JsiN5yso;1D@5aar?}7`Vask~R*Y0gt_|}+669tT%?j;LtuOUQ(5CwFj zTStMMONA-$VKbE28;Ox4Zp1_p3fR^rUE9PYpWo12TyfILJhzGna*rqwm&H|WAuPT4 zxc*fDD1`&13>#>m>9axbnKkQ9x!Rcu1i2{)+w=(7nw+uQeL7C7!Ty g! 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 z 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,!Mhyv;NOzN&Ms#=Di!GO za|Sh*B5&ewwLV(WkYFwZI!flui0^FUZkU->G=1ab`nk)jWp#Kj*9 zH#Lv)>n|H+_XS}2uB+mFp%lO3lgGY$7@4JYN~0;fDQOsJQf61)D~5_ECOAvOG`vp2 z_5yzsXfMb81xvrWu{+~XIeY}+w!H!5<1qJV$XPrxqYz7vtft zvva&+h)?9LQgh;OX3k$fjGeBBNy_3i8+hEhvj&aWatrjHzwB*|xvHCHI`^{Un7mi; z@F4K^J8;&aSJvms9t)~<6-RVK;?+v>Zw192xnl$qLsEW@Wo~v|_9rbvM1Rrd ziz7ncXOay7Zv4{VZc~(C;FBIdp)sVX;wJHRtnF|638o9iF}^I)7d^tNrq3Y%SP7Mz z^V}u6OVM-6S&8EjXQe%pUKZEXD65X%GCvND_3q?(7&sUuNT2@L{zdBUj=YJy8}XlQ z5s5kZfiB&Kn5#n1fowHrLaY^$^jZFJ0_BTo2-L|DJ2I%26V9|8|34=WT(dp4neySd zT(D5zim7&+$>DR}4!d}7Kj{s*vpuJ%kwD&g5>|Xi0b^g<+SL5V_=VVxo0nlGYhddT z0X~D%+EwRTqj4ExkxL#fk>I(Ic%4s!`Z?xK#UKkes8y?2ag-AK@(Q*i7yrrE^iJk+ zN=;KBK(gwA1L6(?;=UBseh63yYsw!n7yD&BY-XBUc$Ny#?X{|7`HQDNO9kDy52jM| z`8dp3ku9C75 z(zroN)$wSO!7Hm>;XSi8%$(O@tYPG*QULCoNmCP*rOcdbhbIyzblS%7Nu7d#T6K<5 ztizq6t<7?;%MN1RHS^1(0d3{$*Kv#RV?(KWZj|P!pf1(6@DI{55O+1$z%2kaXUBez z6^pCrbFKM`vBc2Ok;gnY*EU|tm0WXZ(JxR~GxrVxY)ZjAv2^IVqRP!SpzTToXJ_njGbfoE4>~UyZtR068C5f zJ2V92lsBCGLE$fW3`h4Ky!r!$-aPN_l*ta5;#mz=@zZ~q2g2@we@UU(2E4k;dJS< z4lG-VT;RYC;W!Dd3A<4BmnE8-e~MQOPd!dkUMB;tX)j>^l}Q$xzLy5pcV;UcX&jiU z#Uz%zz(TUERg@QoNKia^%jXMF!Yern9QN{I?5F<3WJ}5zbD)n`27$Lh;-)U0C(gXd zwvA5R13Cik76j*P^!{?TlvJNKv8O0BEv>)lBV+ zwT+L-9ThEV@XDJ~I1!+;_Fy9ZGK@OiOMRRxJ2@ad=b=I@m9-s|&wA!GReM1LuZ+iZ zzMJg|Gx05tQA2u(w5}LRvd;egQE4<37;r5VTie_sDS6o7RD$V-(zM89Hy65;cz~P3Uu$ zTkKPOR;VBFi@{ny4*PMX`aGGN-fH1zN-+cpqsKtI%gM!jGKMa8{n6FUF{@LFkw1(X zL1gWN>jN+%+S2MeplB+W72B4%%HpR->OJ$yD68W+@^H8=Y`6Rk;On;6#j(9!F3@#9 zK0`X>oj-bxU5fgS9e3`Hxg&l{@4rZ=^=ZuFZHdE6%7J>r`#&{0Q|O0~d_kbCbl0#N z-k9t=)h6Xnq;GpYNdA$yUM8VqYg0~=ycc+O< zUq6*oi)1b9i4auNGIqziNhT`h^x)E*ljVLR4sm_-G-zIY!C!2HJU0P2C@$nmW2 zUb$iv|BA#{HC293B)@l~$ysPl^O!8DYk!SOSGAtIrx<4;Oz9=^O)7&y_VsuE2by=P zk}zGe`=X#a_`B$JCzl{!{-AqKJE7>H zWMa2-4NC@_QX5jjmT=}p?in;cFKbyuMXLTbq`=!!OgLXLOE znUA0Eaq0Qd!NF!DmtK!^XK=oOq>^*+)+ZYEZeWzbrh~0jlva+JYrlzK?g?m0O>yq? zt5v7GhGP0J>!w(SC-B~R)@Dk*68h|cO0HbCCE4VWo)-7C*RDA}3hK;xqyN{{nb2GZ zU@js*24IDHSkEq%9&wCrALkaYkiI8hOukSgH+ZkwL3ow)^$S+6T$tG<)HRSjbFLNi zS|t-`AD6}+;OK#swdjtq!-YC+#A~ip#g2O)?O1H(bdwQs?9KblA3~becH`ayqZW-C zdKtvh4>?9LPjjW)ET?xV{v!M@$=o^BsOmRz;m0?A;eTG=ro}((9L*U)fBZkkApB>H zosp%fv9p`0(f@1ow-)bzzVW}J4V`TMw-!Hs2>poP5N;{?_O@#JX0uZN-?k94wY76L zbOzelsso*X&UTLfSJ5>xVf&logErjFA(if`Yf(=vrrV<|7&pVdg9xV5+kh6a0D@8G z6O)>50w12f=~7?%Qn3F!XFoiObyuMWTM9chmV@9WA8)#~JwBm;#e?g4IP3j0!|AH^ zeQ&$_>!&@!FA&O(9Hob{=SuCDOf~v3^?FTLUB-mm%hq46;|QHZ@Wf0$`d1@)q?_Wm z!Hx=~)J!}F9Rt1~Qm5-6c_cA0JRrqO5<3ZCL&-MF2#nALj)}ZM$2XEyV~^gh~;GLbC(e_pOIk3Pzydky5VBwH)xui8CE%EI8;nbi5Sn zy~T@ei+Xmuw#~3sY>f+TcwEAzT}1npOiJ|JHq_UjJBb?3oKz!Pp*zH0rM8Lxi>{T2Y=DT6WKu%GeVQbz* zYk9G}`MR>FqSZW9tb(#|DOZEF);|Ok9=w0j+53=5`W9&9?&I(q((#GVlYsku_hVWpyVV=x(0jsn^9ju;haK>X1?I8P6J(1^{oBfV2f4;dj%F_s+6H~ z{0u-O2RG*v+R>8=-saXIvvHM7yKctS-ULHZR&2jW*d_E9ZA!F5SIrF;<{R_WJtCAw zs3*M4iXb>gseALuIz?AONp~MU`nwLA8sk&D!v$|UlrOpeI?vP|?48+{>@K5@J3?j% zE3B^f0wkd-0vk%HF^>MVpNVG-9D|ZeP?}FfoxkG#Pz(+DA83@EZmZFr+lm_mY` zRDK~<(1~ia(E}9(`d(cdS%ABDwLcI0kqhz3t%+hE~nE4{cNT`4Rv`>Y}u}ST(kXD_Sp>t?xCuSdBL|Zk2Re)4pfi`#2G&lHE^V+5LW%>vHm# z_R4zxmqqCNvN`;dZa4%4*623Nv^I*iKl4a!H_9|u^s8>o0$>(AAxXD}5uLKz@{_p6 zo}_IuR&*dDRuS_iiofe&Y$htE2Rk(L6Th}=Nl`*y)4+CK)0ZCTe-BoKK-M>z`_F#) zNO4<`lbEOprbUGM2*j!Greqx$%;7{39zS?-BKQ^Lv-{6}K~Ihf|<(P`eSN59=wPk1ePU8jT^O;pc-ZPOC zIx%m9M&kiBPlSHL9G=J`7HQ>^iyAzMm&j=a$yQSVn>$(&h%(cR?qeZzzG*zxR`rJKl>YI=Ie@lvU*vN-OPSSrKbMO;4$$;(~KMRVNqwN z3Wn)XrLAK?r^55;>oGl$WKOPDTua{=)vlG|UNs|;VU0(FU?^thCaaY7rTHIxor7~7 z(7)~5*tTso4Nh!ZC${Yqv$1X4cG4t`ZQHihdgTLXT@FK{%CeR8ek{!q>HONXyXb2M zTWjG4_d0N^4ETMwZnT4br)|Fj^@@o1QuI;7>2QBqUPg;`84uJD$j9W5o|dHd2Hsh) zIl%ML{*o}(XE2ebibiK$jb)ak(od4bL)ef;H)XL5Lo8F)18%X9rmj1N9V- z0(uMd&Aq&Bd5PB2pBTO9v=a2j9MK;TkYc9A`lz8rb&tYeLkR|UQu!e%4C`d7$#QcH0rvg>_IW}+Cf zEy6Df&Psx0x90v-n-$MJY^*UOL|1r#=}!P{hLVQ9WHR7DE#2c#1!hG843DInw2T%+ zz88O#R_iU?fq4T|2;y!gq<>-i|8=8Pmtt}zboEvUWDMgJd>JfWz*A1#D%Ph@uS^As z8EmcGR~N!v2HNn7qjRB+C8$__A%qcqbY38`cMaw3V~uA+3$(5^>a!>~lrv>>U?tmE zj_2QfQv1?Q_t4T?mgqy89`5tie^+^=hb-TuS~M9~9}x6|;!be6H+9ll;p4Fs`1>`% zNPXR@m+X@h(t4r<^4A*++#)_Y{Soh}m$FdDh>atJOGHLyy;{at@j8*E0W;Awr94R+ z^jQC0bI}Y9#IXQ|oeJ#?4oELpNm;u(`9sWz{TKaj2mg}TZwxlEg59Hl&lradUn^|( zL2ePBOp)8Lto6vNloi3QpBp%*@Qp=Q-sE6V`lQ}ePO22d;b-I21#frN!?jdAD(uIR z3X`Sf*Q(7N+1FD&4iB~`4tHMNJr+ZSX{WXSLht(AQD}Y!IHsSyqzrB7Asj*8TrMC) z{Pq%W2+WV)-b$*)Mv1c>J z5{~^1CL<{XNK@5;r-?UKD$Yy_q^8ZR|I>Ho?eDxMPJCz26%-xwWN7n1EIdk5a<4L! zI}Oy;UQD#WE&AK8lNN`srjRFg+1!kHifU(%JK)`{Yi@6k`)50v#06#(O9?#O6IyAs zdJFXdvCjeFPkyahXv>(0Y5IX)fcG#iCO1hFs&FkEGG_>Nb2LKo*&3k< zCDCk-*&5Uj5wxBsMCE_sbgCNt<*JbuNTO8j0KCxYTlZ#_T9AjX-m%YI|L>aQMR6_V z+W2nkTp5IHZvG-$(w=kZS!v&8g$a90s-9}Bo+2~xTOT_~^n=dnzIJBlEc115?V&%k zND14~SUvd8JFR0!>H8QA#GY9@eQhB`zGpHdD~qAx0ellqkD+CEz9L?2e8*Oa^!-a6P-93YKI@PL2J8ro zrM)tcYl(MrZ;g2a%x~~=1~c7baQCVEdhh%Cp&YREFveH+bqB5~U(zl59UUR{(0;pX zUJTOj5&04um_M@UVTay0-$H0t?7NF}OQ9t%tSO#4(jfzrM+t@UApiuQY4wc8f3)L_faB3kWst(7O5^pk@bCVorx z0&We7GLqJ`KuaUKqex-Za7#d_d<#%^x-9rySM0PR?(}YiJ#+)hSf=O(^~t7>iS&Xih*$kjwz+ObAinG$#5D&<A@HSuOsNOnl79 zV~~`^u%Vw{nOUnYpTAns7D|LHwqYgNrHETwlg(!qW}a5ntw!VwGQ6RwY) zvy4@|Fis=Q8Dh947k`?^_`+pCo1XK?74hG09Jv42QRa_#OP0L@xe%Uf_Hg)E-rc3w z9;8^f-$K4XpE|R6V!D_*J`1~;dc14fWem?_0^iv%rMu?ODulxe7G$3)TC}6zmyG^q1c(B5?xhdM<{zND#XbPBX*J z7YWt6+3qY{=uFb}|iFNvL6Dd>par__R+IcPzes(fM_N_6Icp|k^_w7ji$Id^P zo(^H(I(D5$4IB`&xlwP9%D=JTkQQm-#AyS+wXuTrQiA(G)RsqH%e@P8dJ}kRG?nHl zW=0rQe`{QsfdJ^2V;VMd5Mo>WoGJ6D7os1cvZZ2LHZ#mT66pj6)&V2*su6tF2rg!h zcC~EzpRC{=3R_UzEY0`6P4kr{(>L3f4o3b^Dc=-pR;Ov^sfWeCY#x7=P82dQz}I(W z6}{8w;m{Z9&qJzrpB)3g}80pLW{ZO-PU)n)zM&K2qPeh1IIk*l5!< z=0tURo3fKg`w=E&A*0~8wU;~Q5%IAy{Bh7VJ8sn5o+QGKkxWs9@iJxqdHr+VeYQO| za{an5zvGBS&3xKDH>K5PHs}(>n5b@ zokVc}3w`Ah@xo;It_Q{WeeSo7r=1l)U!o@qJ0JVc@!mPR1d(GR6%VpRT4}65uKZ)F z-wDibYYr|i;Fx)?~t0=QI#^hw(+0M1S%L-VC=b6xa~ zIydAYhE}PhnWl?-a;qAoKG9z~qX}r$qTJ#?hEzJ;bwYjUc31;ODov$|16#Am0@YvX zYF-^7mo2L>Dgvl#H=9e#nToATC@q2V%H!T6%AWDEKH{?n>32?g9A?E`R^xN<2^on9 z!PoTiKdLPo;*}}q4;pu;&rAzRwpCPd$yGU!Cu{L-Z~h>MP+aN&M2OWE_2vZ=s`Fz* zlF01ltO7rxY)CpHhb(?Q^8^vH`L*oZ&kE!s)_J&Vptf2v6Nwf=R`2vU!vN#hA`X~o zFfwDl1X=L5#ZLIF+AkyQ3++9fzn)R;@VkPv10xydGF4CvWFC}NGh`-@PWgMC+=Wjh zkbktF9DS>n#Dw~xx|>s6)kcl8DITOe5@!n<-td0M3}2xRoluoqDJiNJZR7%97=;ku1vxTeMPB{VWMsKm7}_u+isEAbE?&uTH3$He;=Z>+yyqW zzpQd|uRwKJ@b%_!OLfeI-u_}$;SN1TT9tBwC6o`?Mng-DJNU@*z6STSUEk5oD=NJ# z+7FeI*k6#mir}Xh&N4TIj@NiHfzA;!nMO5XW*N~V8`3il{OvdZIV*~eRyRmV=qM$z zQN%~;O{usU*k)X~`~msD^&uDSXkzz&QgF~eTnOp^f9w7Cwo{jJ##qMuyz25avk0PK z3lzf3R422fP(;wck)ja>n~0n3CyGPpgXJqsVKZ8&erQ4RSq@P+&tuiS|D+aY$>=MIbsh!F0xl|M+$Z4J?Z&yu z;7(PRWFkOtKv$m~QtO_58d6IuQUpwEv_)sWK+VEV)}YmN%Mn}vEd2w?(4ChkB+Rd8y+4#C7=_O9OYVwyZNd zBcg{e{9{Sx>8wMrrTbfsLx|Hl!=VYE=WMDd)-VJp*-BGU6*0{4&t-6M1xE6SqwSb z!e*1*9MEd|md$f%jbqk()&4`Ffm|wU@VJ%cuJ1xHJ{MYzDqlwaW#k=VP(6wVa+zk6 zj2r15G#ba&q`2~3YX2#tE3^xOi?DN+B3UG%kkXz{tw9}ViM65*f7lu2?9O8bcTO+X z=`=_KoX98QKD9DAm>ur*kd?lbM|Ep%>EXNbgkG2Kni3Qd8s>_kbbwT+1sVJL{sY(5 z7`Cf#2B+rC3Z>03=*iqouoM2mNhqH@1%#u+Vja6C=&Df=*aj&C8mr#%88WO-MV+dS zw-opHQl9=E>A+ZGbQ^UUF9sYPHg#FxUS${$)uWhc)D<01stq&X)^HI^q$A)KCydf- z|G?6mC^=gS&tkXVGW==UZncPpW1Dm^b(Vbj(D$V_Ebi-4)tjPPGY0?rh*crr7;iHh zFbOBqBC;;B8C{csgl&BX_WKVCZ(5@cp<5RvsB)xh7mvG}41Yt@TTQSun%7qz#HOhL zTVxpJ<*vfrH4SCCP!sFLzu=r= z%3VP?5=agIl%c|EDl<$vN4P5?h{JeCIie)lO+@l_+fccU`g)c(MdSdAf5#w9SPfmt zy!0V1&#nBqy>m_F`CZ)7FQ$9wMs8}2&ze6oX}Tz)k3ZUH<@)_X#o05w3;QLaJel@T zm&Zc?ZmO23$=wwFHpwPB1(2RxfU}($!oi&bP+(tpg%zD-~-!ufS3| z(zcIPUzmJzvK0wHqfZ4mSADcyWxTG2{?xLVgg(I z139|-z;3|<5ASKhSPCQp#QXT*5jMnJen%UtGb|ba@-7Naze9NI(V>rUL|gqG-(}$Cad~R6MP9y`F;F>sgz>u zJANKG&JVx9_XI};NpNdrI9?MrnR6;x`R=~2WZSY+4nXf}9P>D}oJ{T!R?9pu^fmNk zmy`15uT2kU{mtfnfjJN)7zDnq(bB2dNvZm!neziQTApzz=Uc;>m)A1q%2y)eEJRd`P_Qpo zD4$3vpDJHcd6~cOU;bMTifXs(7|(`x>jiDGaidg&K1mvGv{%M-JnPd}xmn{ayww;@ zl)3j9QCKi$Eb%dro@)b_E`exk1DmTZvPeBxPuN=-h-{B#A@uZrBNIRRFEG&d#Mr{W zUtpKUqnbNNBkTp@2AwH;-){4ojh?OP@4w{K+s@!A&la4`k``!)Wb z@7rv3TL)EjTwnR8t>2yF!c6&`C=KudA!rQ5a1<~X3kPAjjMx` zAy`dgP3db|wxh^|l`l#cY(HZ_7K}S9NZf_M;xoWLvFnG$Um`#5v$FlLX|Ct1&0wg4 zK9lDh=V_0vW1p?#uIH;qKfg;nf4~qVS^I~mv)u(LkDB`mk+rJSm; z`+fewsfjaHdbS0B(GuDDAbACvkC=H({{RKP+@@&;H*o+^RQ2I~%y z6EO^`qkur%W%*zUEbC>xVw5c@g4ZY;7B*Y&o}$wNQI zAi$*srkF&_H;!4 zE^s)i)<$TeJAW8GvqQ{Bge7*^hZV2sbfv^EEPy@OD+OzrH-<@NFlJei_4Zf9J(wFPMm1A z{hlXgjWMM6Al-Ud7{w~DG(_}SY^sS7$D{o?1w%pFim7`#oz2T-n|MA~en8GDe;dN8 z>u8Vy6}s_g_*{1}b)3j6_sA>v75ryR#?`FDKmixWgiH!HVJw?Wu}TNC)a&9x+n_?h zia*Ghlwi;cA|)ELy{(-7Q>0ttwy7D4XmCNp3B0LBLoYn!J|~ z;IhOI_{nZ|44t^aAU0W?ke+YC&p3Q#aw2I*mD})K{FCD!R1UAx6!L4Oj^wL;{H762 znB%8!jMKs(X5hArvHGhysE4R6YAkheh(aJWphOHkpMyNgEXolB#L+w8vLF^E0L4GBD`t$HW9gfCzHvjreAsCKg18el{ohq@xS^NeyHQb-Gh!aYgj>AOt?QPG9pfuqeOsmQ zvXy>|inv)eS+i@oEK!#Ouu+{Nwk9n3tP#3WCCNqo{IkTB#(5r17J@LeSZdmux$1fC zY)#Hbw#1Jm?YJWuHQ(BLLfW7PO`)Gn-YJH);_W3&zIQ`sCOMexfII(^Yn`3h%`|Ny zXwM?s=5@_334y%JCf%Nou%8H58*1HJY*<}%V*ip!;jdZUDSv}|9+mARRQpSr^0{77 z0kaL<^;*F7j4F%$Imdu2AQa3m%dcPrpVNor4Uz5MA$w>S>)Lw$%|q?FqHA8o<5y+F zC=R~vr@)>@$3@*i?hL~uji~{~&lzhMnao91xGA-P&Is<+Ht-T-OU`5TeWAp~hkY)h zLWNrc9g@Q7xIgBvC68Q3cOFFN$BuDG$y~17-d$NpUQ=8b+!A_=m02Gr>Z_I?HfpP< zI;%S#ClTlQzQZE$2f&9Jx@nOT&5o|b#;mUHfiQiliMmkaM2j_7&NA+Z6d*A=XU~0)<1cuZ{$Kgu*M&4 zQ_gvco^|J5i7r9ehaQQHr|;fGf4@=R^fx3#yO&41a}Wp>YB!*6oTpr*sW;fwn#e^} z&S6?_x*TVLn|iK78JDEiv@BJ5J&Xoj5s=BKAKpWmy^<($q~Ytlf7x_A23;8z^eRYx zl*+!CC!HM29$`NmFrS|2E5)?Z%&sS$EaME>JD~NL4!;sk?LPB%`t>%x7_XjY-2+$ud!h_4oB{nU=7J;bI3X6cTjR%W{$BtCoZW7?dDsoMH|m(dq_cUY{cJbCl1 zpOuI}3o-IEc}Qt-k>R|fbdibG5%nr8))!Lfvwv+quAjThBz^;vRY(8Y*x{`p&}^%* zddKWKpQ~azvhQ-N1pZ}1y}`cwq>p~&%t`2(KmN+g{v1vCg17x3U1X%2q4sXmw*WA? z$ifJ~k@^253mfM8N`l$Ptyi^d$$cd%MSGu>$VABdg&HV5e4i6@T>j}lcWcSdo}K8r zrq&caU1NlOz*ACa96Z^~JGsYSZY&&0@enq#F~?+NU3i!(jFTcnDmxx03}M>PHqM%Y z&$&=$MD(e-$$4H1wam!(7Q-z%^ymotYAIUuHUQE<FMt{8`heQRCREBV)uc*rrl@ z7KADVQRQFsU{r`1mlOz$O9E;ONm&L9vzj3qLYjJP*+c$2!Z>>fws(}jG@UP@r`rRv zPo1-_5}fZ(7&Cn%=XV>;4#6s6=UjQ>R==_1#Apspin~YI5|F|5X#65kc!g66)v8BA zG~(lk?2JcwT%o)Y!oGftkOPny0q8Pr@>V8t_b1(RR{|x(;G<_E6vC?8NYLDsZ2D!4 zc=XVDZm5v^V+Z9wq%P2eT_V&9WY{9@K8+-AT0yY@iYGeo>_dD5#@Ix*xIgEFV}iaM zH?fuNB*aqss?Ogn!wSmX57VUe2wgn!YLU43V0^8taTMsZF^hQ)vo zL?fKZJ@-{~>Z|NXfI>|Enp0Nwy5+c|*z)i>-ZkYrmvSO?g_?R56%R$^+UyjJt*z)$ zzL-98ll5Irt@!Or6a})lf zU_`A!8oAB3F2j?XIgA!l=nMIOYZ#f6@Hgw~-@XOZeEUZJA0I;^Hipj5%BF@U|6^}i z_zi8KCiW!YYj%|4Hh$hNMN~B3C-coxNF-hnaSmNDA|Z~K1ScU40!6)EOxKH91Erq# zy@LKbl*1?0Kb==H>gm%g5`pxa;HudnUt%}k!hiS(a8bDgIqHiqZD{@E+P zfm0?6n)&P}e1D8g8LY@qAH+f|v(e%=u(35&nV--wb*)l@6eg*waxy*iUmNS71TP5> zq+^klqg%>NCCN)B)Z_NqU9sFBLMJIk$n0I~kR;&rou~@u4Mt-T9ScgQR2fRWr3m+T z`#_zSDT$GhelUQSHYXJG3y+@OR_oc^VuwwXZmKOT4 zQzY1_>@ zR-V(PE~~Z|drjqT1UK=d44#!oo}FiAX5iD~mkea2E~!($+%VVjF4>tlRoO}1D_;zR zWprd5DM1{3yc)kvQRVG*HZ@(_pgWN$K*RCDNKVRF*MUIl(XFwh995JQyC@mv=wru0 zZ&Wg4X0%*`hhc~7u5YI#LVoCTBx3z*(CH{GBERag#ck?sEPcq86b~N-H2)-*g|IU^oq4e9P(*S|V9+)Ecr!Qdg2zMvC03eX4Q4Sgg zVwM=nBPqw57J_J5lE+;#U{6tY3vy=-8P^X~1y9|6UGe&1m4+LqAkxJW846brW=N1c zBb(R2!OM>L%j)gYKwwR+q{aMfFE7Hy*KI1`8Zx)B+XFruLFE7Vb>nkl!V4p?|iD%Ini~XJJI9sW2ljNc3 zP~lvZ%AWI(3r+=cxE|rt8e5ejp-Z}jl$Q7kTI%*km{DL<>hNbV4>*t+Yt41p_I8Jl zGQ**rEU^c8_#DUn$Vbg+Gs$>$IKG>a9+=8_G6L{*R7FR&{#a7f)(q~GnIz_E8Rr5K ze8`150f>%${pvY*>!4s;QZc}Cb?mJJ5@AGB1~SHhob1CX(^2e;wH8$o$!zW351U^V zrvsU=rM>0cSqO|w8?x0pG2S5^eX|Z;TCa0MZ)(YrR>pK6goY9PE*Pez-G6jb z^NWh1jH5KzR7Vp&WTxSy!Djl5l#IHR{!I@D$`}P_p90fvltDo~#O0d{SB?CNmTp+7 zs#bcPVOssr!wUM$_D`K4HAn(SnR^hV`o#t>|%+_ zr$&wPb%Z2pew1i!86D?7 z)TLu?5*DvNSb7sdyWNIJa8;F3jWX_DVgU99j}Eo-EJYSw(qA{q1-5Lm-gvglQzKMj zfT7w2H*HH}TW7ngBLJTIytgXj28XwXG=N&xJ#7D({3Z$ZE6B^^1ed^zU<8&uT5d9& z?kO+rhG3)b{h9ZSCSPrgn!u(n@+rt&Do@&!UH&_|UJLs;{YD46VlU%2m{ehL-l zALS;A+_9IjW97mb^@B2c!LJL$N`~=Lm)QyN6#{S6-oZ?E9K#p1q(II|e$LRr0 zU?cC41cYHx5z?PRWrSd8exZ$%G~JklE5(DK7gn9GCjrbjPsHx@mFF3$LmAc;yf^H0 zF4_e9Mv*`UTt6GtFN+;4|4_YY&5ICfu2ba+>1lo9=J1kPvC%i(l zyBb;41*f$oA$8fQ?TJhrfr-;(MC`ZNQ-8`zV*|n+guy7v&;?+3tFYu&oI?e3nVKw@ zF_gmwX^Zv-_6rSTbqh+{;LJZsFI+F<9dPir)Z9EOPbvB!w-F(kUqIMpQmiu!V!o`7 zPT>TqN>gyu4kNi|YRimfi3IYT%f;*b)36wBLT-Ag&eTeymz`3caXDEI%)>E6`uO`X zA?LN2Aj;o9qe)Z!hdNdX{6Rd@5QN1p@>TnR47D~oeVF>7RPsIPtVCLp;4E1Ii0=}X zAhCZIREU>{B{vBXFx-UpWIBu3`yD!k?N;65~!$uav*EqN=q?T1S!p7YP+N(?I zDpU$2_8~&D#zY+lQRnf#%GN2l+x)!?dF#Mwbw&CsGoGN3&@V}wOOZ&>XeTUJ)v`vB zc)36ulWN%CELE~PI5N|=H2Gz zoo?E9Kya3)t_c-_QfjY8t8&CS6Ntfr9Yi3uY^PRv;V7hs#9~3yDs7mhP*$xI7;WLL zFqCfPiQd|fEm=l2N+;b!cy58yeyWvdz3)H=D}(Spvk*)eC^*|DKt58Ow%+E~+0Qs% zcq`bFpk1MEF8xkx&V;Qs9$mt4ZQxH4V(B4aEJov_eF?ZV(0z|`v=+mA61XYh%du0f zl~vBX+7hIO|A&YDp>J_Dlli19>CSS=y+UCfv??p_lH8dszf;HLP)yIaKB&_m)nt4; zdVtX#s4(dG_g5bs*Cgah5QLl)RA|pU?Atul@dj$U)Kr6}06vced1N=-V zBk;3S=DQZM$44zsXc(Nj+&1;xTR2!Q!se5fV<B_M1fy7IgP5@FBP0#qPwh4%Ynqs6*i|0&%`c4y@Rk@ zv^&}%p)_)cn5i#j!V;zyq>htNi((%fJ*wIp!7SKwEuce{g>NIWb zt)dWC)rGz1vg1okT)l*cFDm8El|7vP^sQoSZ8bTX{R5*u>+5!A6cBJx1E;WhYQOaT zJyNxF&az8?{`E2eNp-g0m1cSXleN8si9_vz2@rnh?N{8+xYuiJB_uty{WY6KYOuK7>`{-D6lEFP+{kOfs3dhG6+++ zvTY`zfvb@!dNns?x*6ZvJe^=7Jik(0UQQ4IO>EbtngG#m?LzVl%rMJ4lIN0Ext!KVx`q zQDB4vk5u4gHTAk?4v@Tm3hRAUBb3}tv1BQeLjTtUNA>PFa^A`ljW3LjYpB73V0Z?nUxRi=YRebHq zZFKYo&1S_s^uVZ}5oI&8XQCZ-KOh`h*T4}2IP`f;Y<^|<22=Z3RvE%`!T{F%bx1Vo zS5p{V;g!Yzr`;n#P#-#g=VpFuGkpaM`e?`u;;__q{Q&oY<5RTy)^$Q@joxAy>i;q?cP4DxtBS2T& zDSP+yj%EtC;3Qzoh3J|{e)n(I8W#mTvQEWMrNWXJYp&rUgxZSoe=KSH41X-c2Oj)M zqm+DhxW95sa)4L{k&On7W5l8f6HNx~!q5f++3My}lh(f?bz`0|^X^eTq&bgsnhHzn zi?cPH8AS$~-HLTp%snINyrxA^j?u!$%$$tk<$B z{KgiJZy~WS^G9^lovL@fL5=w2$B}Z>zyZJ%5c>AEreT^rc9dsBl_blAAIl)O zMNM2eZFF$^nI(+@~E-OF+Lj_~@Yvd?R-(*Lfe>x`#3C%8^=TpW0Q#zSov zq?D(z9=sSPAgOMfZ${+aqs<;4X+ zwt7(fA_7EL%T<02NF{%?i$6Ak+-)qGKj9*Hjx22P(St|6a74Ouo=bBFmMYX4Hovp|iJDpM)~bFaI`Zk*Q*ZV@ zhpRJKIdzXo9YQne>P(w*)&uNc%)t0I;mKkk7kw9&{%|{jY7?)8X`5pl`=dn-Pnt4o zM~6Wg07J<8b^yDEI>#tY}_Fh8q5!N+=Q4h7zctf%y(LG+&jczbi2U)}2O#&(&1riLHfH$^ z#{N3%GmH9;A|CU}XuFQ(*A!TfGD|J1hUY<4ruW{}p{--Da_@JjKg50z;S6(LE`S7| ziJl)9vL(a0Z&9pm$Q5N5&h;JdAXotUN-FnzpwD3QZO{Q3*o;^JAHi79se!WtVSdAP zTk#Ltb~FWSSKpb{=L?B$drl^p{0tR=(?325{eH;kA zucfRr+!l|)`Qu71;+=%>L+bXM%P#|E-k^GxB7+lnevw^tZw$ef8^Qy99I!7FPDGh+ zDRL5LADf6Bk#0~X5pF4oIgDe-18-a_;KG1OvM#2WczQ;z~}aa8MXmV8CB<|D;xr<>nRo0 zktJh#XvCY1rZj!m3)_PK$=EJNl|rT_OJA4tr>#{`wTJ8 z^i<4>U`|z!uk5A=Ds`ADt#MPCVXNMKT}Vl06UMpzPCSjcxvAOU=86~>I@~5GSZTZw zOO~M#w&J2l|T^78d7L!9zsqC-4edjl%UEsw1oj15$$ohTIbO8wj+Qg!&Nl?42&+{OIe!B?%6S`yLc;C`wfrCM+E$O@$UMOG>3F`B4-I zAxRD!5xyKjziXVO8tG_tx>9izt%fNSYSkT71!NG4vU zd*Uo0!juDQfKxSZzhV=Cp5sr2JUk+0QT#-aX(csQM$Eh;J5x#R%QQ5}qA|pw6w;yT z2rBb7&ly8bpx{@pKM?ReRq;gh<5#5l&nzleJ9fi&!WH8%1us!@`P1W$cZYq8)aNGh{vDPMSzcQ;UFuz`3Ji2vhXxP?&~Yt_a5| zq$61cjKT<;@yr4z9KJAX8~nccM<>!)6w_KZskyrzzxs87lmhii#Q7Q&<0-SaJ%jGRARfajW9n#^w zy6O-XE~L4UZHEdXiXrog6C;Am8o^?`xHFSgl zx%whN2}xLS7oIN)-WQ!tpDAe4A$LBNRwMSD1swYvypFOEv&B`f8k;ObhXQY^K9XuF zBH-jL4<+$Wk0d7fZ`_u(qQ};_Xq|7bFN`-ZH8B#A#bK&#s5w!R>G->+VJ4B5hcnn*yoIJX9E4KWN$5qDB&k50j~un znvufV2uTli480Mu$`_P_{K^;RV&8!nCSs&O3^Os>su8lmHpMv&C2snNx&phRHXf!f z>Pho*7=5za;F(r=BYk@OP}3a_`ogym5PS5b z)++D`=z;#BaS_|!oS&PZ1vj+YHNz|gy9>xdd7G4iF%ssq`E;9AW>`p3WuZhmG!%Y9 zm9Zia4}z7Uvm7MFqiT?BM{6hyj%S!s5iK!6pN()PkdLlI}~t%b@=g@sjgRVc-jZ1Bt3Xuq{1Tg)t>9B-)_N zK%dYN?h;$XhomJ$QJrj}d89=XsZ}y*P8DKe*len)sU8>sr6|Z|VfxrQOuH_J+-{5T@|T1*iwn!L>-Azjh`X{Y-COJ4cpX}ihT256`FtuBxfiE zy7vSee4t^b!HWRZ2se6^iyr|i`Q|m{mXS9q!G56RGmw=vL34v|>nT6E8w;)g*s-bS zsq6&|n4ie5HeqY|g<>Nnx*MhoXvpm|&h8u10x($Nf(*&aZ}LP9y?N4tN%8AJ1|vh2 zK-PN7addmHrLz_+Pw{HIKxG-uvpCoYt|eP^uC6leu1gtc=%1)V+!%@+@#P!BAb68o zFil3yQAo2eFv#j6-hjgg`jtQpUvw=!$D72=KV+?fNbQ7gaXfj%?dTy1euA*=@Fj7b zhWzc&F=St&UORdk;X{vB2)U9iy|f440ns+0J&B<^Hg_;t5=6h?N6{T%J>ZzAr+br6 zaP>s={2vb}+j6=PIODS&;5`uSs5^Iv4;b4*yAU%+d2S#)koCx}`!f%~-7~!*a^qrW z%|0R4MoKM+{X(8@jwzzOg`7rHiv(UH2xPmdLKFCklDtJq675HM?+7)8yQzoch)3!V zB%I)0Ik^%)M46}r60Jv=Ddc@ApX0VifOk9|5f_xq`9_|<(C+xf=wn##2$M&yRZGy+ z%3>?nMETf$Sv7GkS_)Xr{3@3kR$QkWO|;EvcnQo)gHiT~M=IbsHF%>U{8!x-kvl7L^4ye`?gBWMlc@W3V!@G= zQWx)nfG;!L(0}UA5h-sVG1I>i?}8RNtK1SLZ#sS|yCgZj;@FgxEoxrhGtYHF<_Xc6 zG-a$l2WbPIJ-ycyxG7z^Dqs<1TM)Sl?gHx-wN!_FGHZifZE8Qu{lsN!us!SfgwB`p zS2|W=_zhxIWLc8mvmi-YA;syWTsf&l^6$y%9L$@WB>|rZT`{&~;wj}Ef@iu5#BUw$ z2t87@`Q|xg&*J~0>zslsVZyCFv2EM7ZA@(2PA100#*S^x+vtym_;;+Bz zT%4Ombzi>K)zz!ldOSFLr0ohXOU=*Q7V-ZY@#h)Q7)tWUYR~`iKRwZc#;T(5b>@e;v`=+@=-3HX3h}5to zq$z=k)T?Nj=_86~awleb+?VnH<^>Ut8+HFgoW!;QTu^oUFPocCsbpgCaj4u96^`;# z$G5{r^YXgj>Rbh$!Eh~4e1XHXZi6QIc3Go&1?NlN^PV3wLqeX%1_&0=YuA5A{YL|E%IO z$7OdhtWRM#MUU|`yrs-}+zs({Pw<>UEs{*cfHpwsqRHR~GeDRO2^W6wc+trXF+$v> z3?ytjtb$t)*by_N@?y?7r>6O1S`>*T040K0^CTS!jDv9>w}k=RUAwPsBO@}F?%KTp(q$5dxn{;85yta-ML*O?N5q_J3+o2! zT%9!Z$r$>X?hCQp_-G|!n8;d(MFyb*(nZi6s4~Vj>s|3d_s{`My~s#!7)a3QNYGND zWKMg90Yd~w)ZJL^A>9K>SU2+~Yqs;wP~=5gZkB$bfjfnLBe#>u+6OUT_=?UMmcKLL zTOk{lF*_7pSqHQ#rP69qtwRLRZ15v^F-#dom>4o;T{B^&2kVahdT(x{m83by(pq}V zRlu**&O3{i?22aw(wJ1Re1gHBC%UkH^2C*j4A8z2#Fh08QA(TOm#{{%@g~cmnzM7V zLnT;3=Z2B~q939f{&1l~=x<|$?Px;XnizB;Q3$SML?X64zk`hJM_`2TY*KvrZ8?y^ zNbuB1_>yousLY76p@UM~luw!VNREbR-QtgK86YR3B^%Kkcx3XgAkGQ~Am>0zXB|4O z>cCoMAtB2}AaAFGW@|Du?s{e71}zYl8@`XQ2J41JAos6n;fPvG+{x5@eA|I>eRLEc zvu=8%t0iw_k}_`Z!0wayldPbn>WG0m{-eJ(Pv*R?2-Vg&>)u78{@y^I&M(iA)yMa)O?rB?=j}g;BwT+ z9266Bd`bGjnGD$U4){N>$OAxb$Pm)O7()t0YSZ{ls5G})R~VK^R6%qk+Au1}Wm6mJ zUy-P<6IFna@>yBVn%VxXIaAhsziBcc1V{>_Mj!+`Bm$uq*R4O}2~AW%s&Zn-a#W>d zEo`3**_M4a+hEXCXP`5M$^@6Ml+LEr^=_t=f8Q3ry)C2FEE{<%X+x5m;w3*!dNDxU zE-{(jO(X*!4}P~85ZNpqou}CDW}9Tafa@dXjt5CynIsst58a7e&MmJzEHg%BXZ>I z?2SlS<>Y;~Wq!d?ne~7b`E%h3QV2P8f#kpGVG@qiY=NXp5*jh(rY+(D`=eV0o6gno zIhK@LcU>`QvE=+u2Pzb-cZx3>(Wax#*FaEIWf@#2F!=#$Q8y5f{gHWk--iId7n>=nI+CwdsO5!#Gj3i8XupnF^L$ zPz=X|4tpofABfl^#hlz%l4SF|390Tx39aF&?H1Ah8jh>5jx<4HI847oM-msy2S|C= z;NLR)Z&26};Y?uhOyR6GVkI_sM@{C1IQAj_?cnfh^k;KgL!zF7h^F=?kOFAPQs#E# z0#H_s>ZZc>!6j>Wjj5kRT8$k0lAhSPv$GKhYkV$z0yy>Nrvo!r{(mA3f6IEK2~IFa zoUUo!!FS;sSzqoEc`|j+)rTstL%+lrCdzt4e2hCq7_T#hHR+=vIa7#v!ko|EQ0iVW zFQ#luz^`vxka`Beb`=l~wkM&trzu*XB-uI$WK9uMBCHKrp!uaTnkOdtK2h3Q%q44H z@wt)v<>!tXk)AeZj9Xq=Hs|+<*IPG`llLm!m^YBo_bL#ZktC0;I{^jXqq+x$shyjY zC!C)6Ub6$ldM%ArP5de&1Ag|{Ov9`>N5%QsLfe=4*epM%!Cup-`X*5>6(y6axFKeD z&+&~qqgoYia_i%2Jrqgd_JJ)Dsf7>Vkt0IGhjNH=(xO6JqaqpebWj2W*Z^I`Kgk82 zC2t4JaU zG&;KB0k+QL83W{w@PsH`;% zEiMFrdG*H3aP?ayQ=*j4F2~dHp}%cixUB~qt;f^RSqZo3vv$Xg~AabLPL0=kTV}&Rb{S_;%8oiAg zK4h5(2!di>`vN*#jTv>G#BjKYvfnFnhv09kCV7Wbdr&_1^ zH7Z?3Ch|5lEZcN5i}=>eTt+4;YuTysS2d(g$!dxWh4>@8s^~3Jt`z+;tRrGutaW-K zg?5E8z*y} z*}aUxM)}+ha>@Qo)Ru^d+E4){t-d5uZgnYZ5y>On1EVh4sa!_Eb%S(UDyP)%yh)8g zNOeO}IfZ-4z4ZMIYVi|fb`Itn-um;m3l!)#myPI`LM9*_`M*avT5s)sSJd>u8t?=O zi+G4Xbg+Tkdl9J94*f_arY9#mN#i{$GiB3YTbRIJh(Bb&Xox?i{7W-s5Zea)i~zr4 zh%qu`Cpg|-dayBVs=XI_U^~QE2KC+xIZQ$*h_MNyun_LA^pBPp9m%J_zYZH(;nd@_*Ziq%LNG7eiP;i-Y{u zR!PM{oH)fo>cfsWNxoF1f9E4+;w`*P1>~J63ozRcLDE1zawZHM2L7x%ZnKu+rzHwC zLeJm4;U!-33i6x$&Gf;YTHrnEP`*KUO^}iifTD^rF70Hts5JRpM3j_?Oo4`K@YP9hra+1R`ZzLE;B9HDig>h6C8L@lRWi0*Y#85B8CIkZzc#tw9Ia^O zR{R{zi@(!3Tv?@i*$W5Hb`VQDd3v2L`9FzLBukuX z*Zm!9EH-7q>6~;sPt3bL;{*ANsRzq8lq>M)!=Bl~G|6wg-sDwvt$xin3Rr*V$~HI4 z^l}qQNaA$>9*}v63^NNTws{`L)$;)`l`~IO*Eo}t&Z|!}D<_lm@eDPs|D6ewF&rsb ziZ^h*Je(tZ=ZDCct~J7|^v1{9+H@w1oGXKx`jJ7o?oJtF7&4)(!7q{phV7 zSZzk`8;1s1q=Z?pOe6)AMqbf;9{s>0hnXmHi&9J)viO@TK4}rlnEYRuU#@iak%wCd zAsLe!k6Z6no&mLW(&dq&TT8Cg7oBy=`>_EqHCHA-qr{@ZK-6>MbG*wf2pBAwbOnf| zO@UEO^k;pXjGX^1m|Z?a#i>s$5jlZzM(dxLqHwO^gPupGT!L_X?h!2*`d`+};(zyj zA)|aL{iAgdB4Pp6ToKMV!dV#*0J3|f^=;`++9A`P_dCMfrerDKJf;G%`OpO@8A%(b zB$hjmPn~zU34Kb|ml#j}^hoTE`64Az2+Gjrpe7kZeD$`PplS4Yl}x89nD(8bX##)c z{AVnjf|NdIHgw#g8|{zGkTz$|ag4AA{wm(C(woVY!D7j9q_E}+3eoS*<|p$sTOYr#DF8pOe)W3T zrWaU=OwKj#9$8aSi_la7ACj5-C|{3>)M7rGQ|bDsk0%-sAoc=j!({S?qCC7|-RSy$ zr$qz;9N|j`?3yJr!Lf7Y6EMp~>1U+5bYoA#T42Y7_{Kc43LYA%B$VK;^4>pTS87U zB3v$YkgW^%o`j4+yv6&JZ_ci0;VeKsMEOMhmat`!IcQW737cZdzezU@E0WqoG#Cfl z@9+f9ggpl9zTV>TXARDvKOenZ3b%S)Vz5=Vh&WqLW*)#xocg_&;HYPTbRuB)W1oaQ z_5~|Fc%-@K^48&B33SF4lNm~chAFrWQ}Wp2RV=0&Pzqk7;xCo1o)kdU##U_v0yOVK zaK2`Sff0}7CgOj-BDE9cAQu`s-(Eg${puuzvi#${uj9wsM9?*$cj)xAw1eOV^s(ak z#nAf|bh7_F5}COB&AZL^PgksVuOnFz*Yt8kxKNMSa@&6m+(} zOb+1X6S4Dg4S1-T8KNgYq2_m0iXA@Kf^b=?ps8SSP~Odw%{a6mH{MhW*V*of=IW8( z5`uJ%|FUrvTM4Y-yY)CFa@~=d^~-z^Uh^S2=#I_vLJ%I?b4N(*khQrGULvP+^{yp~ z)0nEMt*YPin(YCfHPB)suP?dvAgjZlF${{e;6JsY@v84X@3k7XNkM6= zw_@a-j`rWIdw}8UMDfc$TBSx`f#*s(h^ESK`C?W#5AB#I&08M2 zTnA5Fg+q_rxBGg8_dd)vOM(y!;khIbaYEy-|5;G#uj0$5v$r2!N3O`zSdQ|0UaGiIaZdmw2oJo*!l( z`31v|RDrV?-}*Pnu~gxu!17}bC_eS@Lzdv2P4J(AO%-|jq`W>tzRf=M8_(33kgG>b zHBUdULECvKME>Izgd$FC4{T3-O(70{_69Ua!oq`u;;9*VF#YkvJUoh{taCMxq#|dw z69HZHsT*n;h$^jj9({HvLt%=!S#`i|$C*q%xUH)iq5ma+2k9mi#LmlrL?(*8s5{M-PX0pYf6MeE;xGUE?J6t??bY-#t5nW3ypBT+U- zy#LB+DQ=G5f;r(F*C1pLsH8hyaNP1iKuS2`)h{nmlo#F`uo)irEwni)S{!|Uhh-v@ zxp^4pi9jlu9 zuNH0AvB_Gc$*psXN!Rv?Nw`4*g8oJ~aEO{iSaH7K)Qe&ZwIv2|G2xJ^$>U z31Bfx2oOuCCs&RiSw-4f8#xWWTJLfdZCVF%bJAW&Y{cVH9+!?;BHALKY-S>_AX<=j zbs8j|R9MrK68aOoGBjC(onY#!thGFKfpy;L2w@@ZYepL_ikIws9v*Yt1I{pafi@8j zawyXtu{|!ZNg^=u(SI~^sOrIEaE6ei5UMrujJK6T+IYfqUZlw0()~U2xQAp!K;!qv zW%HPlU+K_7+s}<*n>3lY2STI;mDCTs(uF)4N*2;H`e;iJ_G6=mKiER1>5yl&|7Af1Hd_P8?6^`7WgUvq3=S^iTxoo%e+FK-HIC$2xhmn0Sec zHCI{+tHZ>0#`-LTJOKq2TxHy2&ApdkPMnH2+aH8hUv0v|0VV950nPQ16CZ8F5z+`0 zrVKqIyN5HspiO05jTD&Uu_@cVA4;{}P~rKD9mp5>Y#s|8Ey@t4Xm&i+DZ?>tvE|T) zyEccrx`x$joq|Mje^KTyF2?I@htY)(ABqUaF6k10cr&5M=jBOSLhPgGxF#&saz~!u ztk()8Xcb(;EuxjlOJ)DH7dtTc5h2D~v{`iMt`FL0o=9#z3JB2!kLgizE)@LgogT+F zwvyH2PS=64Cpsky#*umgdc0ZsQAJN2Cb3*ZW6HTU$o@NI1wXA=A$Z;R0YRawb^E0? z>pOl-R#n`$;x444N(^8i>?_wMw03gFcJ`|$O^#d&XSvQ5`$$aFXB!_Z`_SlS8kOnb zLuZ~vC$b`ZsJ%i`i7s_>7 z8}(bul)@6atl}Cr{dp1yw*`kjgr>SQ$o_CN(&XkI|jQ&~SbrQQube;ZDn>baP z0Y%O{EwT)5vSd-~Sjx5wm<(zJHiI&OF`!alHK-U^4k`z-oVy=8X3^e`Cj;{x=x?X+ zCSlz2fzeyauZqM~{>;i6y-755#uFTA4aattiQS4+K)19>Bs*CrwIQH9m!?r&`NUWa z+N)$+j(J160>l35_~;oHU#Vo!J6Cc|MqaQVn?Kqd+qY@G>KfL6 zl>ei1wCky^LaH_vlK!clsOi44Vn_1G`|G!Fw_a_2VS?srW!XivU6yaUZ>n$mUr8Yu z!}|Oh?wV86Dh0Mj_DBC;L|;8xJ!(D3-yLE-Vm)%(m7^=~E1S#L7uOdh7ep887kL*C z7b456%U#PI%Uvtm7eW`-7a}VSD|Hvn7ZAi!+b3|9n?j!}GJ-?Pb@_mclzh4ignYgW z`+T1Z<~h|1f_(Z%!qbK+wJgD2>D>k4WP!sulE1j(n}k7+J+ z$7614CqG}iJK)~%Z2g>Q&u2woyk$!Nz-LJSY_}}GqdP_D8>sZ~ag=xXy52Sa5bM=+ zs(mXz=e)BdKdxL{xqJUTzZ*;NDv4 z4A9z(wGHnzZw>4{Z2RhUZv*Q^VD-=9p6?JNIOvi|M$sS1pKqtq<~75qC2 zQnY^(si?c_E2{$r)zv+H*MBmR+K<5?I{xgh$isxSV+tm`ZteeZ4eBS`zze?L*oEL| zq}v~z)R_q>K)Z}%bvgn&cJgUODKuG zF;w4DFY;IIHQdcgFC5!-mx}1SaB9sbDt_T7E`IeVA%4{-I)2S3KEJ^`lScU`F~8a- zLG{9hIKwa4yxJ6%SS1PTGe(aD=5XfK<9VXL=o{5FMc24Niag@Zmpk)*zN{bsF?=X7 zvL7hbr8*yb_8-N5uWyG-Q9c@RgLOp3o*#62R>?C0%lvz!_65YCJt%bW^el8J<3eI+ z^+IYN>1|-2>5Xh(=I#?R-A9Q9>2@9k<#v%Ka(AI3%A7w+(U6GVjQ7+M4}M0`CyEy4*v zkpO#@xLbODogphDb~}U7Dd}=!e>sc%$iXTjlwR2W*u=I3!(2#w>0p{9NV-maM`e6# zqU|7(UR0Lsq-l&-_ThW!BjC)sJK~KeufeMlaTfb99fKcT3HvaIpgI^Uq_2Bk zUWfkW5{(}(!QywPkc4$Vp=(FA_FaIDIb>Nn7CszLlur`T4Z>?k2C*qhD*NO+0d(d7 zZUtd4H=v6e(8UhuntFX>j3o*F3)8z#GAu^7Pxjo8vjiOrVT}EyMff0J7~W@sUiusH z>rTcb=x-8sV9vxrKM&6b{9&K=QEdTrKjw+Kgrj=tj#Nfyefv}n=JE$%l}Ng=u4bK?(@J59kI7G2b1 zbS=bNYsRo5%#qVi9YSz@`RZpPSJ>QYCr+6bRyDbYX^wg`Ix{E@JRG*zh97fghyJ5M z=ao4XJG^;i_ie|voJyAGIut|h*$e&T{e4X-FLU|)BAu*ruM^>^gEyi1Kb%dUnLzWM zIXchmaUI{ZVTlgSvl6BMs5 z4=wZyZH?Qk&RYD@9ll-_(yJ!7N?{tGN2NPuRQNv?IJ48wwgvfjonq>SIuE7X)JM*{ za?iiqAphFh#fs|!#(_07T85bFuk^;Ne%&2kr^`|2@_xnJ(c_5Fp zXYKQEXOT$$xphOqieG_SB){kv^)ao^nfUpeBKb&42@Wy@uIA9N2r&bPS^o(GIT%|8 z<3~30om43UQ!5(1fyxTBTRlr7v{0k9k$5-pz5Uq#+?o3%OzCoT3d|sMlb8Z*rNVK2 z-eDjcrT$B1Vp@Z?Cx?D(QDZpl-smGK94^W!qm9-p6{;AKIOyxcRNc%NvE)So%h3YW zh%Pk@lrjKp6^J4c^n(3cso3D{e%K`f3f>$28DOm^vMS<8kZ>UO7*-Ea2EDSwSYQo zoj;9RMZbSPt%{UKo)s)Cyq$V<_vRDV2Qg_)LJ#jD6m`tQL3hHlhbirSbDzVGvS6Jb z(cn(QPnfV)u6FjC4~i|L+tdTJi}D{aD)Ea#!xHZA(o+B23#>@F^K-c#deL8^JVn~5 zum6zbfy4C8e86gq$TSavA}k+T7wczB1O_z^2Z!syU<2WaVHiqGHlgoi5ZK=iMPWvr zeq`;;nwyEYeeXj^$5pcOo58KEwoLHR9oxi_MY(B3 zA#7n;!s)|e!DFaSCa+t~G-#9vheAjMSW($RTxMC|=hLiHp>3c;V~h zr6{>;KIHi2zw>WE)KtXIf@vD(?0pm80QdYE&U#)f;a!6fU#9sGZmareE3QtOieo+y(1M#bY$U;qidAjc>nMCBYeFbJqqaHWtvo7ns7G)u zKcZ*gzF25J>&}R}PI`Z(C3F5DJC3p`9)aZ{U4(<6W#jN?A<{{s1XTWscvZhnD(ksK zZb6o$c(cuZRNRyDoC<7~y=yiD6TEx{?LApYO!0n!K;=O`AI_wJQWokQS@aPLYVHbn zAXv|*IAgtFIZU!m7F+AC!+nJRCm{5G%{O%w0V^6F}N21AVJzVG7NV?HS z)}cROR(L#cx-*hSejx?%*v28Gt8kr!WXuh2orDAO{a?B>6l=Km_F>(*0Y6g*7-g8D z6-~{<4QRi$$sBDfm0`c}O7m#rLud-O^3|_-s^#zYLDGjyFa@vuLHh}tW0f3?>*}ro zdf?4!rn{UtXjLKWX!(JDV{((fA~mk(?FSdu4u*F}PkHVMg2``sw_V))gHZ6ie|Ouy zbbrA-I(zH{eIK^}t?er=EO1AQnXCS)WMkQyme*gm$Tf2P*Q$IYm9vh>XyuoW{H}ZPnGu_kLsqw;|*pMwsfiCSHO038lb?vGMcmk5JX8U%pm*rBwO>==^DV z#-U38c*ll4tHg)t^b(v;iA7mYHr1w}uQQ3WA?(xTPd~=Z92h6~cYvIJ zft%lf06UQzBRCXYHlT;$XjC4;IH3fXG*MVDH(`O`kV7bQ5>`XT%8QY*Dx z!ccbe%Lx`!kZQ`eu<>a&&ddQ9Qbjqlotebh*gZ-EW6J7uY~f|2@{DbFaWvLD z0EkOpsck47ZKjh|aHc-PRqNMhTMrHaSL%jKuZuUy?cCWV#8b1y&%06-zP|87v=|-= z%w3pjR}n~^I1Ai9Qd~$^NiiH>N^kw`xfaZ(v ztapB{Nw=sHyAfFhfxv$Y;RZI{^2}^T6d43vAJL8k2D90&}pN>`>F&w%BL+`0+dP9?LQ=AkWu zgPgb=Kg%=ud;J+5-gK++Eby$N9=V4caCMRb&xyRxfDQ27;qSy24{`(;@ zfh#;TZFZWqekIP4Vd!+ybU97z(6XN5IB+Ln<@{8-9w}u0WXY1H`c$sl-^+%u{*3!I za>at?{+lujf@+(PvMe*StddXiB65Gg3ZUVDoFbhaDQiAsW*ft2knNn1ik(GKI&wl= z1-*1Jv#==NBB|$?kfy{rCTE>}ST;2iy~yt#(mEih_!n)-iGxP&IWtm$V1{nd$~_y@ z$fxN$$e5DPeJU%Ucuzoc2UohVUHKn4`UR217NSXUZpls= zQG##92g#a8pqv1-zdGu8b%@`@srvjM5i5FzWY%VZJzaMyMEI5mHemE;nV*P)9bjDO zYO$HObQA4#%nV^Z;mBA){-Z)CHdVZ6RDWF$d5>}i%*6?{)+66O7o>jO0sHWu%6hkY zeV#{RbR+8HQZseBGJeX>_I`mx_BV%G(1jkf%l3ued_h|1!XMol2XwK#Wr(q zIKueSYBLRCVKfD9t_vy}aU+PXY7h;MrNSL1in&Xm*UNekToA?gN2Y=(cSeZQzu&6{ z(6%QF^Gmhi!B#|ytT~0t24L#bX?L|gg57rcKf0zd_8}f9U&aNYo-!*2y-sZJx_tP- z9&U$O=P1P<9Fk4*C7Ng4<(35#2`!9drL%AVY$sF}-9C6(PDV;rIrbA~5Aw~^-Pw#h zs{rZ;y+sEjn)G2)Uas;a;VUh_Nq}bbZpW8MykUTg<_OmJbmlH-W2E zET!_dQNZFSFe^-n! zyx23oxR0ab^elcx=Ys%{A%Q?&3 zDv`zgMZhPF>FY%i!9Eo+DvwNKcT#73e665clfi6|w2i7O{egvaiDHOCwJ1>?_7|xg zl`0_qq{73PVn@(lr*Q|~66u2q8||OU=p#X8z1QgUVA`KdYou)`W3Loh!CJ zNhO+Z1%8Ey#)@x7w)maKC!l(Tq{g>Le`d*V8OgUnuTVsl>8+qzGpPDz{(botWPO41 zW?XG}s~z;Opk@V9qza|-@lBykEU3(A#ki*Kt#G5PPqhnfr{cThiJ&rc^Z|YJ89FN} z>X6|e`R;Q}>b{Oz)47dyC}ThKhZ+`S9h&(utm5NpOf(P-5vNkpk+M<&F_S6t)N5+{ zk@mR&)oV`eSJh>rBnPJ`BAQns`k9;>u28Tq_{svo0XPH@?WIazpeY8iOk~Wed$9Z+d z<)o;Xs6BJnq_NC{0|i7ktij+9mLF}1cm6@h5Z&;KR(pKl)U5pso0$gbNZV*QTiH(u z8mPG2ORC(#a;9R;;lf;j$U#gN>~}xu61a79Z6k_C5yyN^bf!7S_Ql=7FJ@p3oTLxr z-O1~@OI-3M_Mz2-jk6bQxXtISMh`qWh@Uf48mBc5gx%Tsr|G=M75hu9$p2+lt8CNc zhsy_c^zC%I{{1|)C4Yhp;Ry7IY?|siu9K|t__>oAC-TY?WzQPD3Isb|k*yx0b4`~8 zJxT^-#SSVtL>U1RM|R4)7r7g}_>>r@AfKx@G{`qk)E5>s)Y1XBt{0ayo}j?Rg)U7! zRVf21wt>F zr9bco-5CdVaH{8M-wafeR5YfQV-90&Ef5mCdK}79bH{flnwIONe|#vhbQ4CK9TMuK z7W#j5g)f_kjDoe7G!MNsWm>PdNq2;%Qb=7H46&6)Vwa(-t4Dk5(xd%i39gPpe>LLY z$@)2RQ42K;^2{ljV;jYc6){sJBM3q9fkZx;!a5qH>W{WE{>n0O#EHmpBq)JN zVGF~i9^ZeP9+$!bJv9s;%*e zaYJM2j@G!>LB8qS2;#$${Fco~wNwXqq#hF2JsMwQ#{0OV_+Gdfe%bpg`@}eh2_|o0 zSz#@nxaOK@9a4rUb8Q2=TcXN2{t4d(y(|rHfaZ=U2vck&FusZ+z@? zVIoO`%o}saX)}q_`sk()?j+>OAnpWt9S!?1k*y@e2E%lOO~I?MxlB)>lxd^fFBPS} zPjV2@U5AHcqTZdy5mdfTlHwK;5Zeh>A8)Pvz_1nsv5d$|&5}!s!%l&5(}$m3Ylfn7 zV%ZR;gyzCLR}Sg!2Pnt0volcJR2T?ucwWVS%NqW}=9=`1E`N0OhjVdW1yx>(#H11? z?s38&x~iS2qp(_j(Ug~cs_6O#*1)S+ifd${uI!<%oZJ;Tc~p*)gk1OqR3=YAG4W+T z06FIi*7iwO?TQC5=UIhIP5otu&IFNi!xk1;GlXJ6ImdK9QwIg9mPdY}BcUHWIG?oa zf_xw40|0#zB*26ic#hasI=N*FR0U2m*_P~QG=PpVjAWeXk zjZz1R7ee6)OpS`)$4$fdd7|`%+L6z!9sFN{^kM>?sDXEgsq+_PXpV%9g8wQ&X`3+^K zG(o+NPRPwX8nlsj2WYsf;p~)8K7QIgw}bXR{<;+?Lw9eEWy))vUisWzb7HQa&p-Ji zwzkP`;_=STO3oVnj&4V`-auHeVHp*Aa${^k+F$<9nI*mJKAZcL^y~V|bL_9@cfe_@ z4Gwj4il5I{CC1Hz*Z8cudDeHZzRgWKn6e{pNxt7Jm(tl5&bT0m-ka$rBW-k+1-0Bl z_9r``ncOou7BTX>@HXGhp(UQ4vFGD0P#ek+Td~_TrJ-H{|>eb z#H*Q4P`A3IaH#16bq`t`l3Q;5sKCZL5TAMsub+W3;&^4IA;&^*olzs3o0qPTd zF;@IxLOWLwQ^(KzGjy@Ei7tknohL4f!d#!?-7Ix}!2EqEPKP~LS{4u$kX!1_C3mlv ze85cT+@S~9`Mv8?i2T8eKTCv|X9{kdcJdwpN9)1DYmil`;ewnGEK8JWHXS3W_C#|6 zZrtqPQ@U-UCs+t9kc-yDH;s3m0x3E9Mjw*66U^f$SPf!7l?Ru&pxvL56~3)UeaIq2 z%rUT-JmIO~9!u4ia%`L2Zejf`N^1R)3uvHga%dYU9 zH!TB`4%7Ak829V0KMPJ{j-D_#%>qr!H-jYCB6o$Kur*g>-m^EO44x?5n>}kzA_J#S z>R4?BbdJxFz2`7&0_bVao$yN(Y(52ZMS439ahOl)#|93$|Gt`l2^eb$B;x|i#e6}9 zxmCxd8vD8uT(ly-mDBOWmKM`4;#GAYl2Knc|2rEv$*|iA8~n$QKmXyynE&r=U=3$y zMN>CxODS)2OBWAYXQ%%MJ5rlb#t_5&{wY$pEM>!_QDj$Ce66L^rr=l7JnfceZ)H}C9GrX@ zdQgZ{JlWwSshXe)ODX8`s6n=9fVJ%yD&KdqQHQvKi=HXs;~4nV{~$n~J1QvAZD6bW zC&mFE&wzqpNlH~t7xarHX9N>_JpB2c{EW5sKMZbMnlv&Of{(%KBoD5dJTeQO+p#OW zX@=_jS`H#Yiox`Ecb+u36oRcmmKb6UHskcg8M1_U&pkPG*J~d_d6S-D(FIP)+_{JU zJSP?Y<5fWp_A?Bm(z0b_LT5QnRF7B#)1bu8(+qf-Lf1*F>!i#GD3~y;-uvb?WXCja zAPSAa zT%O*}zww(DdVae8S0L>F{ruzU00(?Cckm#y#brd%Z*@AHZD=N*XbQjHZ^w;kj!u#c zlD`3WYEvVORAcxbM7B?rH@R}Y4?vr z@aUpZs$79EQ$8(u`@)iX4yEhwl!fjv5Dr z{^>dk*0B%E(?}CcqV2RqYnqRrfw_}j*<;x6^!kZ<(W&NE$nr?FD(T`&JRfStUMs8I zZqQ%RDDkq+v+Qor13K7zS` z@nftN`;1mp1Wqs9P{NLXcj(3}H~c0~vNe^5SsV6kb&Gy_M?5-dV|&oTa7e*dY=rd> z{E9|rUZV0>68F!);9Ye{dBmN|boy&@tm*n@lG1+dU2O!39RAx75u@U7C1X+qqGGhC zE;cF*PU+VHxq5@iiPO=HUL`_NkLoPHxwirtSX~Ot`?Ovq*P;lqgw_z2L7L(O`GxC^ z?nAQ!KNu&`R&1td7fX(e9)cpKazqiU)$uJo2D4za&Ji+OHA2UZyCI)gbA(b(CsbD7 z&PC!|@>@s*L7<$_oZu!`tZ!-#hZUK%&lO6`NO-HU{wBfbbldg52_lQ#pYyJOtTBt; zg=l4V%gwZ8q?+Q#xYANJ<56wOHSMZYijLr21wE$o-3|=+`CF^8T!Wpa^(H86VvmwA z%A#4HpBQ(2%g^)9w%%B~soi}N*I0cR=~>6FKEKYu-UG+?F~l{BG&=S!U+O9EBLuzU z9GdFQVFKxe7D4HRYSTirBaJ0=wE+5D`U#S~$mAn^jY-A=mD=n~@?TrCHZRfLublf8 zf?f%Hc+v}Omg^@Ts_758MfkD8$EERCJ|!j-y8|X$B63PPx*W}U$lgK+9AqeVdT2h1 z58ERt90~FM^>?c&-O^n5L_~5inyuejOg=etfAEEeM=)Oa>WG8z`BO1$+>6 zYvs=wyn2HsaEbM1&oH@n+@0H_Uw|V&T$1%iVq^_I&-=B=9*SQzz}$tyzxUaOz$ptA9s3s?h5}~EbjNaiQhBA zgcU2LwHR?#y1ErMQmJXhE5)_S`%7_R<2j=JZ{XHbuZF@rKYNL{H3t>bG`h0y$jOYz zo3!mp&#RNpi^FKJvY6q0)Z~UBgnx9(kta_UCYPUT6;5i)x#RLziVQ$c}o*NLz4IZ;+*|)U&2X=(FNu6yXZ0 zl&4wX9vRSIxuUy=*x!EsjJ~ZzT^|7FuaeK@iT>e1rXu=`w&9TML0Q}|j9t|pG^_h7yhj4-o$))UR?fi-s!{(x%|5ixvIZy96I? z>IBob9C^>!A(hg+C{~5SV1^cW8bC(MJ;LXvb-EG9yjt^#^7cvN`lXpNF$?cRQ@{Ur z@+kg2ZO%RZ_+jJ?_{y{W6*=&gF%TF9Hi}^+%mR7r{y-txHC4#M71FB)L$CKge7$pU zX2I7k8r!z*WP*up+qRv&v2EL#*tTuk*2H)-!QA=oIj8RZo%+tH>Z)C}clG|KS3hg5 z?)9u^ajM_FJ8Z1qbQ@;t0kzN&PRJ_-M(8(5CoFLhd4+b?Wc}(T4UvS}GrD;pRX|kq zo0z#R)%{DM4LVRFu|IUHjxC@EG1MbgjQhZG-4mfR%)pk0zA-}hjxui?=h^=TJCp2BG-Ts&Q#HcQ; zuiEOW;CbI08+-yvG6DlMOJ8#85A43c1xs`Zlj64J!Xwg zYg?r{y+*Q_qoouxtxqi3Z=f+w=aLTyT0z+C&BZ4 z*W1qXQQ`pL1u6&*vju4`v11i6e*GR!rL;qwS^^?9-uRq73^iJHPVuBv3N(tb5|^rm zIQpVl?imh@SDpAN{;*~!DwL-_CvTQrv<4S7Ie8VCH1Y`v#tX|NxB*0n1=)sc29rUX z%joAc_IzIp94I~Fkm7=i>KAD%wlof zPSp~6+4858ygWsc)&feMA_*`VzZjMlCs=T?hkL2i(4~YmxtU21JqzD49#x=!S-8YR zpYmlzJO^zOa#2du-eb%~iZ&MKBhtyngSpeqnWB?a!BMoSM%{GIM37lwmN}M#OG7d{ zeNBDL1dk=8sU*(;+PsLz(ub`ndhb}SnFOucI+D7$(Yv#ZO#^>ZVkFOCRKfF{s`#bR zsi~8;nD-CG(X2d2669jInxcb!X;-KJcbgeSS(^n(h=IaZ45!3KvK6?+xXFXrPuhro zLQ9!Mo?^r&#VWYn#q@ck`kOTyeVxmx#+z1V3QhROt+R-zqa8W=&a)&|?~PJqohzvq%+9C6$8_%HFVw=`3;`x%y2aOA1TTh(V*IVu-}XE(j!e|<3|tc>K?oR8si zjhmvjEwXBpSjxFHU`wT$sZ6AW68Iq|iJeP1hj&r~?%MF%XWO8=N%@n7d$t`}-V0hpV zYI9M6jeT2@Ai@EbJ;72ofqPvd;drUdW4B4kkAbM-owH+!%SMvvwnX=d-MVCFEMqq; z>t@F@DaZ$Oj36H#Fg_;^!oJZdnfixerVV>Nzih5uMN6R`&SK8XUsj#mD3M)5Z{&R zEh#2LMNHnDOm*I7zquKwOlwCx{|YU`KK?UvzQ381{&C9ZfW9Wr#~!C{!auH!t&d}@ zXxb28dWBt_E9G02ts`O0T0665wk_pSymGh2m>uIsJ2Z`d0k`q}0M{h8Z8n*)KuR6o zGN(n-7ejJ#e$urxCqZb$*FB2wbU3R_sAz6S)k#S3n9ie5W#x>R8Hf049Rgsj$;m|& zYsRv6Dskw6X6X9|9naJHFaf&Q(n9~Z--Oeb8;S< z#a3E{_(1h|S2Svgl-D0v{?qL{d512KIT>EoK)*>0pNb~EztOnIRR^{!_QWvdm)0^WfL)t`>L-0wmhF`kd zo_oRTzz4!bEbEP6nC9(Z|K~lZuazju+>(80tNh0LEn`+&NSM8>zfw&w*`&eJLdKm(WQpF2BotO>fiAp!rHQ9gXA zq4yrhcTNPAT9K_-iLKZoON`ku|BZb~GbpF2?pms*ta;M9QueMB^1sPf1;ocg@@#WO z-X5x|0N#DK@tTqx%c4H;>DszdB`wTd)TB!HUvVMMFjh>2(H%FvQv(OW$(I?C9Eq;+BS~1;?`sPZGoBC1s zbxgw*#K8lesd`v?Rp$_T`&4E-BIU@^_I#XCwZ(ZrNpRfinI}}HACA~UQf2=lE}i@U zbKN4V%ABw62xbtOeK?{M1mftdp@nZRZk*9MBPy0d{19>}TlzMC01T7a8xgB!7wUQ$ zk0I2?POpZ(z>Mx)8(_-tCEu^G6U5Kw-hR+eI&p)Fhk1ckFJ}2Alb?$(*aneLU zketad&QNstY^li5=aW`Whf({R@{_lBc23?!Eor-)Y}?Y8O~5a_zGxN6;w%prd`~oG zyrS(kZG46BPG7$9FSV@*c=(^ z-+=s-MpK^$?|90B!)O|7`r%&topO(7iC4aExPYM7I(DNc%tkiJ8|FA9;1 zS8R#T&yucaXQXyii0ReZc_RL-nRRh_si;yc?g$|^v*vDyDeXQuX{++#p4(~!-^rP- zy#Q>R9&9&;*nE3GnB}YdF9#iI7U|dNpaTXH-i|}M+}g4RW-i+fvU!?(#)g8xiHAbu z-i-0*$AuAYP+cr=L$D{VQUq(o;70k;pF^NMQl!IdZFi|&>;b_NiFJ$Tt0VY$R@NH3 zaTgDLlf)CHgM8uphncRSrX#3r!{omEann{t$8TEQM4tk<{y*_k?5q_miJJOa)S)J0 zP1NYRYft7)F8?S=n72mc@~dl)5+5dPe))?`M6FL@!k1aqUFAz>T-Hvht1r?XF!gbN zaSG7FI|1QC`OM#+^vo%V(HBQW`u}L8bjeDzF~P6f!L7UU{3fgAwf~GO_DMe3srmC9 zm#V>pFm97|(&8##t?l=vw|jXLr6%~LS6O!&^63d=(7ktcgPhl zHY^wyY(6p|85KuQt7I;GoL*nUNc7siWFoFLMzDk|qUWU)D>vIW&%Pye2XK62171oa zGafKCAoQQWSM!hyR*=l-O{^?nz}c{79jY81N&$Hj6<@sA1AHnh=3Ni+sFEk3O#E(m zO%IG=xAv!QfBO9A{)v&rb66WB>!GjjrT>MtWs0}hAN^~5b7u{`p0VRvD_3j&9Hze` zHdN1JnazLr7u$aVsF)Ii;vY{>H-*cg5f`@HM~FO~MK* zOLCtH12yqkfT6iRW>-!TwII;QS%=j?kh-)_sobtIfa~Mbn6#I6x_Oi${RB*TaAC5; zyFAx9jm|5}^|)1!&k!R{Jbj|ye<7eRrJu$C-9Zb}A^NfV_GY~^#c2{02M$aQ1P4m^ z0+O>Zb1HxUqW6-2{beuW`*e|4NFX3I!w>RN|9;*29pS=K@aqN{{NxAB`J`o%KT_z^ zscWJ?(%Mr53Z6gG^4;)@Yp8$x%Dl4oo)t~{JnJ9arFpb3hA_5whV|>QtMi||{yqK$ zh5OV)kdNHbg7ijBz6wcC;oy(NGKmspi`$YyYhDBBL&YAM?<|TK%a`lS-G-qAKPfGg zstdBAnyp|b)+DuSlQ-PtZxk8=|5Di+&;)q!&LE}{MC>4C_EW7O!RrpB&nA0xbYNm3 zw|Ec*8jvc|GuQ|DgUi2LOmR6*6k6g(;Ej#;cm4xJeJ-;QWH5G98*oMTrOU6MP~5m==E z+&4VOx7{W?1U0QPw2s!&8&$7d={Lmbl-b#rr&H>F8AESM8g`)7EnzLxFdDf{vM!-c zYm;%bH$US*h!8f|%Jb^!+ML{3hg|C%{%LXg%A`mSiaJea;Em0eUIm%k{PlJwws&>s-DzsWd?j`ZJb5z7 z1?&7t2=+6jg;zWnhPD_flC2UywKlbHN-CnJzRwB7Vc7}G26|f7T2y=HH*S8oYa#NS zyO&P>FfHh06%TjT?H$g`H4BTJ1P$B^j|e?sSuww^eue3q&p%e>abrAWH>=F zdP8w;TJfRvwucfjtYLP$5bXzoPPT>hE!>h32oYhcy!)H9B$)H*P2D!rJI93 zfjn#W>FG!$#1A`#W_l91y%4JVN&W!!i|x5SUchD!0ewa=!I3cG*c8$N>k?vh+8pp~ zolhNnJNVdwx?L7fr4r7Dc!a(Wh4Mn3J=E^3Njt8+KUR{aCs1@$VyYjBI~bK;z{l5n zO}uuR4J%L*vh)E~nwm@7n;%Esz(#k`YTAaO7jZ-!NW1#c^G%vExmt&mYg+OgSll0A zO^ibzj8MdmT3`n|BLzF()7vNY&qW`YQA1GU4*rNez$M}Z5B?o$1Wnozjp7@Oa&rSU zc*h>RKTPZ&%tAq|v4;L7bAD!~=l+7U8*pXC9{a)^u1?VC@4p zNNa2;ZK)yL%d}AWm_0U%2zEQ`leYZP+duo;voeC<_;(2IwhOQLDKD*sZx-LP15Svc zGxrDp`s%;NC6q{8n{f$$Hj*5ONQ?jq4h zG&2SIVu&cHcK(&-Hq1D=MC7H$2NaA$;iZT6LIh;#M0iYa=o5-c*3?=xr<@bOZ;JEM zoKS;j)LjvrXn&dai_&2OE87F)AjPG;t)Nba1K;R&Q$yH3639NGAY>=riUDZ0LE@rB z*HonEJC)!kKb!=`jsZpY{~W&{jG-3^g$`n91kLZkFYVM0WI-qp<#cW0KM7vYC)HSm zW-&TFs<8eL6?vtGX_Y@gHI(Xd))W}eoY?D#l+Ok7gT+j3Ic@yGHIG!T(kzQa*?rQe78UO16E6u^`4#PmD{ZG+42YJtStb-agPsy(C5)i@c zD}n4=0i8fsmED+ar|-PPa!H`P$DJV5Ajt5>emMNP<_SjS*{I9?D*`RHZ7%hWx8PyA zOJ%KpyP<2bA@45Xz_tP0`=4gU-U*R22uA;QV0RD69;nWM}Gatkq zQJ7}=yN*JC;RRF=(&TFPrLzu|Irm<8hK+VSz43Z&LD6U*!>>4}Fy@2l{$~T4n}KYO zs(OI~+wr)BCuyaX_?)u$kZ&+MtKpy9u>2a+YCHSkuo;KIiFBO-b~mV2V6{#0S#P#!Oa|)jZ?mc@v@QcUxfjMJT$2}80oCT^h->S-V60e zD8;5~&k8=W(gPNTn~gCSZ)a=N9_kAz8Fwx|^Yu|e3Res~Q2%blT9#=BZe-WIDc|4~ z)`>)sTMym0Iwhd=!{J zZO1|tet2Bro`jxmebKq7sxm97f_K{7zAzy5>z%vEK(Cz46#`}MNqmUA@jlcS0&pCq zHisD8 zlWi5t)-3>f(K9x+MD?X8_g1Nn3e$*ZMC792Pz-$1)2 zAiqYqjM|TXLz^#icaP9c^@IKu!d|i*96P^AeJ4MC3@C2C@#2~OMj-V~LON1qK{X7f z1!Bv18J3;>CfftVrqdN|@9($D*#i!h=^{3mfHC^2FJ zl1HbGiSb050XF5x6fuzUDA1p}5YG8O6K;jY0Z}-i8PS6s3J8OEtQcI8s5sc=l?fC!wJw|WM*JObQF-#8I%Y!LRW|d8yf`6~@o|&@6~%Sbid8W+>fIz*i-al)-rB85i-HMFc68K)qqS-j z4fR*MMWdV^y+)*;$*&Ia8Z^&^3$D@e5#tBv2T|uNU|5Gu ztoTSK%~dRI@m?k=CyuMwiWUPWF1>h&bEOsgT2v+~mUD@M9VcfD;~3JSnI1XXSlkiZ zF;?Shhp63;KB_kST9b%}%#Nj>q;+ihXuNUz(baM1qfE!<&T$W1joScCJ=-2;0qe6E z#jKJMcZ;kITaC!;*{q`5 z`hPWoIA^V6*ZDh$mp;}Cor8un$JX^21y$`hSRpws(meLcunHL-ZloX(xu_1Re-hMh!jb_ z#((5|4eGq&t>wFJgSp?#GxAnjas<8R{1E!m0xWvreIUPPKC)c1Jqmrv2dI>Z+b1$l z(FmU~tXZBYPtBTRZ0~>$0~1qpKz_dM-9%Td$QWC zhPiCPK=rF@ai6VV-ODZO<+;5WO_gdcnD1#YKWRMCXKukAe4Fu)^w2~!+izB2d0+t8 zvuI{?hQE=oy>Imco4Xv%9w|ZLE zSdUMOir7EBUIs)LF%8v-{g^hxqL=JIwhP7C^8vH~illD{zmX>;nr{T*2QUOQ<{>9I z&e0=E8uWl5*dy~y27@5nqk0zI9ys_BTc<_z$8V@4IGtgW{h|Elqd=(>0 zD@xC3Jv=VEn$_2F`i$=z{bX&ZBmpity<*%ehNOhT+1d85Q{2*qXGmH6pvClMzsflB z5?vCdpv+D0Xa5c!7+5%{@NlSbIHV~8aw@(-rV-Gn=`eyj91%WluVG^%jIIQ^hU-t) ztraR`Q%3P`bU^IC-y&GxpL9K%S$je4a?Y)LvUdRvkz4PHSH@ zan8ERw&T6+y~0F_Uw>%TSI(}i_>$@q&QNfyiBFv;J{D;jFrq5{EM*IvtoEjAz1#&| zUh&@}NUAS{bbm1M&S=7u<%Ax=Wslay9=>icg9co= zr}{FFatgk(SZcv;ShLxwZG79{Fe1DWn(>akGgWiB93a9F)S<`nhia>vH3m2vizdjO29Go7fe;tRI%#qTh}02f?pf z^y3zlx2Ok|N-RA|Yld3#5oLKtCcV;%$gHgejCwQ$07V2^!}BMarNCR(=NpXoG4;e< ztQ%kvOWpxp70F}Iqj^HT_0c9YScP!UsdV;b(G?{A+@RrqFNhOIEaixU00DV`1p%S{ z@5_}O9bDav9o)pc9E|O)P5(zFoS*u&D!w|#Uwa~k((UAM%j`7~(X_CrQg&Ql z^Y^*?pEgng{(d~622NKv{`JV;D@)BWtd5!6~DE3 zwz{eRpu6NYW+102S~lews-*~(GDb6br>Zd0?NY`~L7{EdnOs`8Urt^yV3+T<(B1lj z(5yMz6#C70 zsw`UYb9D4`vJL&@Tr_>O!Z=3^=p;D>3f@>caBk)KER+ z*BTltOSV(Zr4%!k&iX3WCF-6qe%TFE8J}+!i~26@W`_;3b%K|3D_&UrNxi9hMB`nW z<~K^Ilfu7N(5>PnWwk7~)Ti4D22sJ^pu8;c3bKa-?As#o(UjqOw`k$G>8OjGtSXOW!b#JXEQS+{^fRSo~#+#_t zjN!(KZi4sh(3rkUVv9N>EXRBAp2=UX1hW|=ju7s&_4syeeHvzK!5THutybwRSIHKa zdY;4*a2C6CjkLW}R?N^=d4YYbeaceN4}N3{TU1A-`XcABzGB*|A80mQ-9 zGI3Di&y2vtpE-qzKMPQH3r4v!!+{ssj`%tJGsC~T4rTJZ8n3UVDx++5$WgnN7g87E>fpoQ zRx9d}2XZYL^zz=jM~Lr1RDUI(kEpK>=W$4TH?!SJIGW=I{dE^WB>oP4K7#k0h#AKA ziU=Zwjauz9-Tp){*iVTX&~%FGi1H06VR>_oo3l7rlsLdNCj2J;&jO6DmSv}M zco2{STo4e_|0|-o{!c8+ga)8XVvSomC82;Jl#QW4I1g}gLM11n;1B8OY{OTl6`PQd zDz80`8IaZIu133zzwCXS4yEax%P@I%nz$Y^=}qc;-<^8j^%^q06=-{TQs4^&6qN4I z_&DzMc>Qo3d;7d=+lD38y%3hsiGH>6bOshCc_QHt?|NJJ@anY4#5-{R0x3#mCtN|k z+=bl5`>o*A2vS*M7DU|=_0k+3nm#9`L&Zf=shyQPT2-IvVYiI;yU6UjWh>Eu245Jh zv{WEFa`LA7XK=VzDnn@2MZTV%%o&?XL3H1{wdA}Z_Bu7&A16=|cpBKrk75_L5+fxj z$;Yu!(;<&UhTxuJYZp3f^F`48!qQ&nlCFBWQ9mYsEHXwN~Jr9l5x2BP=y` zr|_d_pRxFJTFw+w>8fm8y@t~WQ@E5<{=}`hti!BN!Y)Xn=0YiKo2fJYIVI`0srEnH zvy;6p#W*q3T)*I+1X7vOfA=gpvaOS+GE_g0o%G!ZDePq=wX&ZHPoinESRiCbo|4BK zr?Hffa3>^-R~1ikGveP3x6lb|S7fIbrHw}*cB7@guoO`hCr49C(aPEAcr@zFT!)eF za%P!{_v9s~wH|$>sAw~mjGXQy zCTnD>OE070RyJwStC~-nNUn+@ffX^TtNGwf=}XeiRtZ`E8eV!Ds=u*U?&&~W#A zJeQ^>H;lpPr4_la`ct^;5_1s@*EM;emts{cKGjb_&M??~5o4@lSTpAxT+eBq?}93mq0JWC?<+LuM^w!<3etVgsx(tLc+ zwt59zUkC+U{p{)s=`IY$+ON^{ZoEk9f7hzaA}R^Nu$$3_MD1Xm+SOv9NoY7W-Br%gCg2 zcN4&tA=RW3k1jS#LL{%kW3Z|=UQb}gZL9gGwWey#3SyV&-G$04VI1%6$RI(zO?kqP z2>Jf|!|&`18Ti=qS6B~TZ;o~muta!LbS2?g8c~hEdq`C2;5P2tQkEnupiweMN&JRS z>G(`tg}=L4Py?JLn*-9OZy1f_9xhk3`-5mt|H#K=ERyFE&_#V(|IJ-vQg5Awq|#ki z>qjH!FYk{&1pBPZ(E7t7UCDK&c?YsFB>iMO_S0R(T2Fw@c!P#6y#$*^d#h~C0M%#9 zxeiJaF`}UVC;j#oB<|h@I#mEwfHBf1X1S@nW#A{_a(G`jTToE-3Vp^T%RBYEX5?qc zXZKb7)hpCQfbjq)6`VH_RQkWjr8yf&>_sY;Z&`lp+uY(g;}#pNJ(OhdqdMC61Jjr% zVl8ZfKqtY4onNrEA_0f9j`N4*rN>LCH96vdX7tDHqfWD*c{4~62x8a;UmHQ(pOH}G z!HBv|-^@j|#c`6SOR&sBcw-avdMV-PZKnm=u3+P>*hpcJG_%W^c&H0D2CTC*HknT* zy0k)@i{sRmf=%q^jan^q^Kr~DV)~0I6nzEdBCPvVWf|%1pJsRwwAzcD)ku#?b;Z@% zX39Bu&JPR?kxcnn+B6Fej+CwGE8#uurk2Rvtm|j^aJ|-tQ^uE&T-8|fGp{7#VQ{2} z_T??>Zev3&ag1+I7_C;CIRT_RWAa4TTyaAatZy=|GrevEuD1RyKLwOq8ieD$m_zp%iGH? z#$3d2=|Mk*B`Bq=hb=|^2V(4bM?~13;5>tYB3Dq#Vup#xVm=n+ch0R*W%9iN05p25 zb8KBH5x&G5lv!*XB~(eM{h83c0f$@yVj3$bSlcL_m)vW2>p%=(Apzu!A{f$7=xx0? zz~vO+WxBjYAuRMMJBDpH=_-NOCMa~KYU2^($UYcP5Gd9{5_C*s>CG+ELavLC(Ne^k z?^cFyA8#!F9csPyd$e7HdaHH|E8Y3cEe?L}BSTS@gs zY@LJ`;1E*AsWHxR+y`S_zlW|RwzO%GOuX8Ooy|^ciqe#V&6i!J^Gf1T%9+nvk}RT8 znM_|ld=$Y`zJr%v%H6KRd6{lYv@RgCt--lGAua6+H#n-L>PO5*ne3`|6G*T84ytg8 zj2ep=XA1XCnf#*}q%{So$0^h-sp}wV(D1=K7&8PHY!A*3!@bHqTae~~4_2vFP`-=hX41RGM^#|(}`_`?E! zf%PMNx&#@5`u`fJ2kX~4SPwL$zrP-+#|9!EaKU|2-RD61!vkx<`Vl`pg7!iE%Lnej z`gIT90{7|f5f9#AeaV3x19#8?LI=pff)w}i2gvZBsP~eP-#EZyumG@6=^({GLCX8` z!2(oZ^Fa>eHvteUND%ouc%VJFpXNSezz_>ae;^%HK0pomO$X!*QVi;+x?dk`hxf(% zjLZIfFB{kg3+Sfmze54?9^AqCQUjTS?x6O`?|TnEAo_?u0|$_UiP3<@_vB!LaQ<=! z`_yzF2jxnsqEjKVp`l$m3JQF{YJ}ZlT!7Isc2tAy~ zDc*CsoRdGxtyNXuD1JT6rL-LW)b4gpp5qrk|6NdgI48ZeB8PqKn#`0}%1C{Q$Ein1 z?0`Fiej*M2Xo~u13i)V)?-GPa>>N>u+Lhkj_)it1*2xG}TT$CQOO%IRq08^Qv9pO< zesofogcW*!m~hr@nBwTgGin&+0!YzwnHf4 z2KuW;d@QmLO_FO(^6Pcd?d`$sq|;ttFL+ix$#%-bBYo1UT{>@)Ob7A;-~1q^86#m4 zRQY;SK0N3P9FB+D#4{P@(Lc={_ z1Kj=>b5GY1O&CK!)LMBYJ@{3^zE@3`#rdUk45E@ker*Zn5?--+xIs?eV&bMIqu?|p z3i%r(AoXG9XPHpcB~^~&neTq*-22PNxFQGuavs)>o)DU@>tx3FOj&5zc|m3Ap1BMp zROmg~zgSqroWL!&0z?)<#^7sS;ZU+X&fLp$P;VzRtiDmiHZNFnf4dk%G!Pj&sq4ucff|L zjRb@T_DGw}vQxPf(#Lk+*?=^kp!(7eIu>Q3C9JE7g*Tun6h9HfMat?Pk>G zS9X3O7gjgja%{W!&>`gs3$hUAUrd_7FNZ<<2=R{NhLbx_QBuwFloC->tVVh!4`+*H=+D`lmBNWCQ>XrPjRjfe@+hkQ7?7&druDu#0{j z_JEep^%k*Q=NtS#GsdNeZ>j}Q5Rk}!q|pBZWzXHk#oWP7!o}F${C^l!n2NpavJwuz zVor;#MxK7_58bz74SRZ>QLcs(k`R$1pgG&3qjb+oY^moC#oQPC-)KWlrF-ZbNyLI3 z2~Dk#Ac}JV=JVY1Js;cG6<&2LJXC~H171)3?6p{>-B;^4}lAI3H7h>gqjdvbHbREsf;*UWH=Alf@C)gGzI5(=yG0s zn9)Y(Z0J)*Irqt0C{Vu_t%MK1r7xxm3v#^fI)WCk>P;zI0U=?cMO1Q~-BxAqZIG8) z@5<+@nAH`!GzV11lPQwaqLjnAe%TzqsPMF8eH@6vVtsUcjVF(IS+cheaYdEx%^4`aLb? zWpV)xrszcjeyMtp;Rp`%hJy&GCEt~_toU4b#|mI1v>z6Oe#7Nx5`dr1{uN4B#|ph< zI^EId>K^sC_EzGl(LT566@E<8WRJ^Yozt!v5Uoqx)#e5Fp;9@hKj5l%59Z!8LS?|Z zZClHe`S7J`Z%l}<(;7xq5-gFkA);Jje{-MezTyP!nU!%bbe$Oh@}CxQbjly@@y{Y8 z{~^pjE(eICizTz8iH*6bo2R)6v$3l^v$&b%|Fi^mrD=sBAq;*|Wr!*gnquINbcqIb z9lHYz6^?tuN#h*890r{ z^O8+|+dQ|H^Ft>ou=W15k%-3QNS0L4Vc(Cp3C{Mg_HmZOm~yH2A8LOSE0HS4-t_n5 zkZ?TKb^m66z4bV-T3x%#N}~QESfaU}AWsp8Yvys2qhl{Og@X(`yCg2=*E*V`v{3-N-7mxZ)5y{cFUy|NIpQ`9WQ%Y5iR%&58Qb(0mM9_xIoK z9sEbU{qJ|MgtfVy*?*93^VIDB>j>N5K?>Fm8)iDEDUen}T7{&xZ3CMMTuaMaexEn)d9S(Y z-TuGt$BH29_uRv=zf;jY4oR825&)#eD@bTLRQ0JY7PD^l)DUAR{#FEdQPIX}=(=dQ zBFMu|)DFr*INq^UlLJc#LA|2kQfI!enBjZs%WS(G;YRF))2w>&Wq+q>(^ZRv)KLaN z-a9`m;>aX>j~jwX!hIHyp9>WkNE@G{PlL6BTUa2CGVROL>eK+66%=_cUxB&~R}~Z0 zb=JD1a%^%f&f4p&wU6GrHK{*WEo27S!z+c}YIJ&aS_v~U$kc+Rhz&|sVr|lNDZ|68 z&e%s~Zf26^yNZv{EFd4Q5mePuU4tB94ssCu>VEr~;l$;;liFdh2F3k|bx$FW;i?xJ z2Mh6U1IKSucSW484NEM<8TB*x=zrV_cgrAGe7j9)e74XJp)by=*=^2yFF%>vHt1B@rFNwhffmX zeM}H>?Q{*3BmFIN;OW7Vws73P7%mIOz*4I*6+KZ{XFW+C==N2Vi)KzMyY3Ogf$Ej$ zNR=qMRZ%8ebja%YWa9OM)+IaQ6zyO1$Q4*mV4swttu8f@+&KWbT^!wOkUil|Wo7g) z_g6ZYizoFdF~2ERp2Ur(-TM-yv|Z05+h?ce14O}GWH0m3LB-b;;&5>yD{KNL~AR z`y}{7gKmjB=e4o`)w+Bos>u=@QGIc}n#TBX!YQH}AQ)53suW*ygP#|^N%n%vY{?O8 zuD7hftGhVY29oRIxSZ72sqiANx9Ab|)><|3Gr7a_1;^a_!f+XvN|&k5vOAWBj^M#Q zWw!EQfe|2;K)2jIKnCoNiD}Fz!=t8_>Y3>HT*P+MBz|=bPU^HDgi%ly7#-N zH|Xdm({bNW#iQ^_Xl-s{_BjDpl|FD$qGqx-Dwp!80IH*Lv%h3f>hq)278_|7@PEPn z6F^i`qZiWtfrsrs);{@v3;6#pfc*bid$St0b_AN3-*uk9{oFn$+7z-koPSfa*g6uV zs4Q`MEK^ZQw|B@#9=o$9So9EWr_@*u&Dr6#AGBHPOqK9uw^e#QPl}5Ck`cFO@DD^8 z3YMv0>_^2!4iX|kff0kO0^a65%xvuebVE@DJ?^r2&mZz!`(4laKF>V+;EkyJs2Vnz z6rMLq#^ZW?%2~HccvbnKvY*AW$PO47o1Eh(5K*@fUCroC^sT zI6;VMkQiU8O041iP=IHT$5rUF%BKJXln=5}Gwd>AW~ixnZM*30y1055wX|&NED*j) zO}fm|ic-yM`7lmt|J*m5CpzWnXvq`|L4qQ0 z$?J;8Y3z!o++y7Up##QYwXT!^MQdLvwZ^8#YInSOWor8My@}X)ybjA=t_glQW7C1A zN%??O%E9gp+QrW9wd8?#&1W5PqH>{ZB-tf`hFz;sAMR;Vj^NrlaEiSgeTWyNqna!? z%!CWv?a&aN3UT6(IabJ4FyG5~$>S4Fcxy>?qmI)oXG%o4obQ9lWLD~reV(rUQqwk? z7W=eKF)rFG$8Z2X$PB95m>|lSSl64m)+UYEE(II=FP`#mBK7v9j&5 zDMXCnNu1_DJl;U_yWwiGzUrEOBK+cY1utn2 zw`6=BnT$Jsu&wGmB@MkQu#!SKiTyf*0219{L7wdZA7#Lw%?oEzI96^D!pBH-^dbm%u{|?hxY_TXi-fb`~^xbahlFk~d zZ!Gm}U`UF`V%lI+T7@2#!Z3daR}}6JHfav1Mw`{9v^z1n$5fTa+p;x@ z0DBeNxE_N_j??-csEXE2!}X7AsDRUpGrV(0be#>Cc_nX1)H9@;JDFC0d`&m=vxUV~ zo`_ogtXnU)Inw2{O&oQVx3Mkpm8V7x{#UyiT`_dx>$8Wt45wWJkN%1wzUjYA6z>7Z zS5C~!9SMo^EWodgseFZFP`z1+J}l%z{?b|3m7Y!TAcJR6ndC`$%H4ryo75I)F0{H- zhhhx%B?FmOnXL%_G4$uoeMN_G9u>h|o|v<`x{QUS!~H?X9Uiub5bWSQ(Y?7Mc+hXo zuyfR{0@G(n?Il-+^JA-VFTGK96Nfin=*(rfG^Hiuo`igec%y}Jm;4Qix!bb~2F{8F z#_jG-1jYjoDB>=qHm;-JaWxRn6#9Ilt^wJW?-=lZ2rQp88}h0l+~TlFKvv?AQF@e? zpdU!pM;sv8iYZ{(rrwCh2n8l|E67{%%+#N`W2FTy4jVaXrq3sf9FxkNpWn=%#dy3-8_fhsl3fYAVXtk zl!^wiV@Qz)jbyWPPUHOHBjRhL&$f=A>M&SXlT)&BXu1?6efxS7Ui<+M*a$Gt@VE`w zOK4DYD|@w)3WQ!9{9EAc{gr#;Pq==Z!Ejc;G16~Q84yDHiPe7Wd2)8=)%pp}{4*dl zPVf-pdj{=qSjcHT0ZqU$$U865nBYdKW5eY4B+)x|Ul7+rF^U!n2QWXd}K^I+bsoH8}-JN;<7xVuC~n+(|j+5?q~Is8$t92GuC>`aXO8C3hXBSWZ`vx!nI&XE6 z)l7Fr1>qmh!or$GG-F8C@pL{%$v60&rZ@4qv;=X=J}VWcq0gGZL(}m8@byj6nE>6E z>2z${w#`n`v2EM7^~JVr+eyc^ZQD*Jv+kXTf7YFOs8x^kQtMQmeKra^+fU~5C03>0 z?9vh_t43;)QDF0O@=;VK=qZ$$#CTIHe}?(-ckyTOA9L}8 z!ojSI4HD%>4R{Ia@(e#{1J=-=o6J?AW)8CmB}pG;b!h=%VRLz(wnA>ic%%p6MGFf$ zZu_H3uclHTh|m3ja&^=si@)sV`L#h1EC`dnGLV#0LE3{wuPG{nv7oO-_Yo*Wp0GqJ zi)j)piP(x`S`DmfXciHKMpDv3AmQ?Gu(PF^S%?;4YnV@|1q-P<{fBuh(iS;k zPd#GQ5Y3ZHK)TSZTrOiHBLZx2hACh@J&d)DJgM+pk(3g?m;J0#5wFW{f!E>zn7#2& z1vJOs4LNuLau#~5sd^oa#KOIp=(YaS*Hr1m+WcGUy-a#(^g9bgS1a=BTh zn%_Bg+bc73&U}hD|AF zJHgBfnvw;zeLrn&KPY>D6|a_$awF@)hTcDGh`?zaEtxsL_0y5riAh3INJ2{`b6d=| zg7?&}gDK~Jyp{8S&Dv=cC5*_0CV)o1KGUo~fk+PJD6DIrc76XQ1g7`N1l`Wwckmp| zEvW)F_)czw%P~ThH~7Z9X{3^i=|6p@3smg<-gZ0hT7$zeF@`h1^{Dn$(DnRBx4qME zpFfr`3(M2C(b(R#TMN58d`_jsPeLzo(Cs@uTyc-hNgh*1C61WlFaU-NO((+XFsyaQ zVoLdIJ|$Y(@+Qt1wQ86bU&B1c3Ib?Wv0q2&UEZs(w6FRcgee~ouUT?2h>z{c{!3n5 zI9^JlCuueukTD&4=sW_nQN2fi6DszPziW?lFO;CkVi}oykV$K_l&ABJ*#J|Lcgi5d z=D_(C3@ZqhqZYPCR?v(B;q&tV+BtU28)kGK@B{Ts1^Xp;EF>!!iRK{ObQggHjoD_0 zBBw5omHfha+pvdatxQ`*GjUzEdcU~$f|LDX*o;+-(7%P%8#mi`GfutZPX7*N zG%Vx7OI~A6CGRDte2jF1mk%I6P@|A)SA+gq2Ot8nr9n;!zr*;-i3K;uemSr^8vp{~{W@xEAR#0LG2|M_*@`D%^&l66860WI+ zf~2NVQd>PJuVQ%pKM!^;=5?FiaDPbsIIU@L{MYWp2<;~HKBu_z~9+=yQ%ACF2M?hx6F z(|;GY+1GOB#uPU*EnwAg7Ni|8i61hH_a3-OdJN;jpH>yRf*oBZB@8|s%Renk_PK9+ zP>80~&QndYmG-Ps2C_X=ZaQqb5k`|-2N#SKWk!wv;a9)VI1SoN1%>BgL>^wbA6)@a z_YSS+=_Xsyl2wGLhF@wD4$BlB@_C~48c$dH!h~gMwI>4g#ddkYG}TWSH|+scKw%jZjS7n+zP9TNH?%x zm*92L!>h4$&~5UWk(9pJnRqIRa(<6eH}1$m`ErPAtjkeWMmDa|1j4GMp5>em?G_WN zFv+ywzs}2kwI0N1e&v459>6E?JC$J0tzSW}2}V68w(KdO(? zYhD72<-OI(nnMgaW_13zB0qdOapu&QKLY8<_(wA~J}bC)D0!VBSwUy6EP(!c+88VR^Uzbv#g#^G~nLaDMyo<(PUx2W$2)%M)@&C3i1K`QL#At5699T5uR2&=!50PW z?#P=%wobr}1~wjnS1@c%!L|nkl^ZEbsYjA>NTo-Ua*e-;GP}An^Jtv2S`&QU9B@j) zK@Osll#{fNzzu$2DgQl1rS~82Pq%2F_du`Z@6f4Z{!<#CNdAI=3z{fjB1OW$? z0}%b+R*gnm7NZmQrg;9+qWTGy>oI~IIk>@-NUIJg%_Hsm6iy=^=khC5=hi>dmC6?U z;L9*~EwO^%naMeS2|y{&1-NWSc7P8Uz(BPkxugmPI2n67Uq0@3JOW0-##DhUeOl(j z55|g3_#oM@gTJ!-CdhY=Y*yOZA}BhZ0#a_Yhj*iGR&0UNIgwiKCKui3h7s+EGAM`Ukwa4bYdG4V-Mqgsad z$@Hy#cl7<|8cFbjDkaOU>Lt;lc_*k-tIhQo_AZm0bVVFQ^q)^z1#+vWn98S^il>;W zr<4>^&ktLgE6d)#*|;@lCUc0;#+7pN%#WL=Q%b`5H3S+SpTHP+bq^^NFCBafB8pkby&RvnnO)>qECXxdG3u_rxi&nR)Tfv zq*PY3vDBjqA)lLgR+p|3-E3wVUtafht}0~3HLp=KIt&V5z--AgfHR>o7~t3H5UTqO zPX4Le(M|y_)u23UVc_PZFBqnR!R_#H`YmumpzVn01|;nej}&Y&LnQ0`u2_Vf_9=Tc zXa-R^(9dh30tcGnIaGEXU}jM*VCAtOEr*;jhAL`7xoeXg_9?E0n#M-pW>2>a)6fbm z83J`pXqz)r2~h#_O3*&p5MDZq5V6#fTv+dj(D7Ale#^G#9$40UzXto7! zjKN{Z9Gk;j1&OypL)pVG?CF&Dd(VWr{`2TWZr;@<`Lz-QzAKtIGY(rxvOFhd z^WdzI6wx=~_5$0PmwEPSFY4Z-Ku2{VU8DdhZaRqapxK7YQq!^HYQe3r^Lzs?xm$yH zMO5vo7Cq$vQ?ttr(q`f85fYtd*g5pFe=`iF&JW?+h8{0PK$4;qEimT3Rw21I zn(9;8JT-q^zXBI~B~l2r_KUQ#2Q;1~i-ZEUN1Xeb)uKwz}w^XXZYE{PZH7vPUyxgIG!;JHgb4&c>y@JF*tca2W;KQ+e5B<>o0I0lWRk+JJ&be|9iu?z$Sh8H47rY zt%6;ipspoZA`@Mg!IT%XfI*4!>Z*oljw7DraQM`ibAcQEr8&81?V#2$d+?sP=-Ghk z*iiPIZ2FIOdMh~rymvP(tGi8-=yY}7>pgL=rBHG&KHR)}fWn+A=+l4idmZKb8-~v- zB)Y#NHrO{pR24t%_h9?=Uz3U=8V(rv%nfG$t8J6v(Mq+OVz?L?~U3OkMfZ@=SP1s;Uk{#0X28C&4APc zfONwmv&5R1Nlm}_i{(XpBi(wIS?i zHcstN$X{8Rg6%3kjlfECOg=}>f=Hg~r5snd9A}@olMFWlXO{|=;0i9ocTc!9bXt`uHIwGv@ZP2?!>;|Mk<1{I6iBoky{x| z_)gZpTAP9!8B==2tPvv@e-5FE$Z^4<;LD0wR3Uf`t#gAr+;sYmy`Enhz-xw+#H96p zr))oia93%Tl*&r7UQ%COy05fq$wD2Zd2ETAf(rI?S|5ELUn!}|)V;v z*a5zDnA4>`Fhd+!ToNp6mXY3)O&Bc{va5E67~31CXn^Y_NR1?3Ae=eyEJrmSH^X#V z^y}i2-SiQ=gB^fg<86SO;aSw*bP>ziyu@6+195X$ccd7I`42*6LU;O|j;q=Lae!^P<1kLc9maSn>iC_!q*8_&#)}AB>o+?XogC;xqg9)F`KnmOMTCq zhL4YW_9=&oOS{XBbup3g{^yZRYgF5PFY{V!_>!F#n0ZuKcr3pRb|NBDs?K$QM&(l4 zYhmGc`1?jebzb?3$FQ9DeefM!@!5#F_;sd!_S<{mTHzJrUv7aJO!G-{G;GfzTWiVJ zY>NXG6cv(F$)Ryf}J9^Ru#j1!eE&TtB0f-1&2e zw=)ReswIxvL#ZWhUnqeeZq{6L#m_Z6H+Z1CpMh4Iz{pZU5zU*s&;4)A%?l#^2 z0Vuzg4|J*Lp5*b{MAL0s2z$FU+O7+|Q;lIgWdj`YVjR>U8ZuAmb(fYj{#BG^Q`Kd< zoG=wz(m5}P_;7x>IN^|d<~7wcDRC(>rW|W-s#VZ|*PKgM!xS|GVfASOVVDdY^A}DoBF0f zejG*DVx8BwV90S2QdNkv*X_oM%5#8B!lEK{#{8XX_*xk1OQ147b%Q2wkNQ9zfJSiw z8h}Q1LK#4(I0G4wXs|O3LaQ>PACTyl!4 zi#fX()?%xUq6+v01u3+71v6zKDp3&9DTY#$74k!hJD1U|j`Pt57F>ziy zrz!jduv*yGi#Bc7<(T!D%39jiRMbk)HK1n#Xk|s&VG%CnB(6gu9bWcT{82@zXu$ffA77nsdfhasxcZlW}ZT4?zK#t zQe_GZNsVA{@ZlNT@FJGnQ>{1Z4lcT}wgT#jaDVy5mWpp8^a8&s_XVVVCR@w$MI(7k z&y4>KjXlM0Li}QSA^3%gP07M0!Le$#tM9{@Y89HLMDSdxfelBX~gDs_BJJlel{t zYw)vDoM)tOkHZp?eD!dTa)~P25b+i%B3xBH!!581wa4&$FlPnq7H^$`&qy_NdWG!P z)}?4lt)seOvOPn)$a4kFo1#O5Kg9XuxWUqif4w}$aQTeWDuXZ0dbyzT^@40`n8nMdF*%Q^z;CE4SyL&VsH9{b@~I$|L&< z^_%8}@+bWT>nHD%dUgv!-8w_^47JF=2rmLOLs6d`ojxohZ(U(8_=6oY=$?$ACdqR=RuX6j+ z*(ROS^HK2bfLlubVS7IOtC53auKHK^=!nrhVJE&h`G2C^60O_vV+}aUUXg~s z@XytThB+->-9&%q?5IuByJ$^0;>h!j)`iJBTkX!{EZ^}AS9!JX`($5pjGA&~9|%V) zcCOq)`;_go@{Ql3}Wf(0rT7T>^Gg>h=m=>h%;FHEB$MI=+d@_V7Kx6V9M*uN$j3@r(z*?5Czp+(d|DONUH5wkwB$a6u=`x+mkgEJ?yMHNRdi#K0UBNH6pmuO zkFC8*kmCfwa;^R6>Ts$tSDa_4J4Vsj!Yh;~Ifu%!q#15-s@HEi_7F>{^sUHU01sN; z!mXxewQ3P1L{HMAk#6glQEo-6y(GrjhOwTNlqKmG%H$r`;& zYicDg$61g^`~0*NjEW_hWr|Y^X+;`Uw};CB-O_A@CBjrf-RFt!x~2{!1ucbeNeO#O zO2D$bCGrD?G>Z)#IYGw6A();Qc z{NZtuJI>=4cV6V2gSwV=8d)w3|{e@{TBm|(AU2E7ewa(e&F_P z!VQ`))Yh?VKlumd!V4wJ2YTv6&T!rbD9(`Xfc!@aN1ECED>X+*Px#^otJainu)vq4 z)lpBc^at#Qp!NETZPF;;uiuoq24ix#c9iZh&S#c`;T%9lc--hzZ5dnagG8fzd_2itRb^iEr|QKfaD(HAdQK^bjF2UAzNQy}S& z1zr#$RIjl*XciHrm4`JyVt>Li0Cs09ub()~_8js%o1&5;I|X&FxjKALVscUdlT>@z zWQeEvFmwpbi52>QiGM+l?fV8b|B&QJ@fBA2VvQuhPZ6%WAnMf%n8_34$W?01)p`gt zCW6HJ3uT4!d)I;y#0EuZS0)bXT^Nh!Puxu_23*NN+f4umybj`V|N0)Vn`~r|Z>YST zMx=*fCIERpwyhVDxlUt{@H!Z$w zEhQptE%*RZ5!arPXfHI<>elm{~uzxqM8<7k-aJRL-h%@DcvAo&`}6r~%YhS_Hs zD2ee%k5*~YCbujd>Pj$R#Lg7e&e7{2<61AP^!aljY+wzsGTlg`DCc$ z@K`l&wpV5w)^JfNb7B1}8sR#tjIY(>6yR8U{~+n0RM4Mmvp*sKZThJ*axvtI6m!oW z$Nx)S;#CsUnF2he)Q^M_9W2Z}mW)cjvov5dAFDV5RE`EsFih?5Qxgc)ph7Bra<8!g z=R!DEeS^kJG{ir&I^b%=$684c{TMaz<|Ux#aOIm+h~5SR)(@>pLQl&eRbk{#%Jf}i zL=gnqk%2?AP!(fE+(d}NUbRluOT*vpL;YhGSHbrvlaRJZPAebHl3Vmg^Avw~o<~$b zm_EAeQGd(7(u;I_vu>4GkwSJWeaZbHb=rpyl_lr@h`qA`y9j`ADVxQ45&DQT=2unZ ze?>=A9oe8DwKmil;!~r)&%mKWCVfR`k*nA`F)39t4EnHLIt!dZE~g{3orw}fbLo4i zL|J-;gnnKr98^x& zm@`b*YOFo-A22cvv0X7F8iJZ}KnjAIL4Z04T1IZ>jukSFlwKa>kgB;kMN(odRbE!m zD4&=Gs68qNg}rM;MK3XzUi^v#nFlRO==lh!4LNcbUUE2guE+)mqCImZDtE5-MNq{6 z-3pye2yWupHsw>i`BmU`1osH;7G#XV+_z#Kej7)qjXgxdAn(ukJHk94Sv2%|7j%yg zhuFt&e*oS-{sr+U9DiTx76>gOq*e>3*F7H_Jb4Mn8cg40{lHtnz+j zhG(YqODiOyoc~|Wp5mD=jSix#tE!rAD@0$(E#_-T^N$u)fh_U`y6iW?H~fDxRfMf0 z$1Z;e?9dQEKzRQnQ$ncwB?nnb+qUaUC|@>6$+VYq$#hPJBr@v^&Czv@ z#@dn{f0p{#l=D5)5;n;2$~HOaJa>~+vtwrvLZJrUkPyTQlT!cOjNu1!Jg+%On2-$w zdjI4_cpZBkhkPFE_I!Zt5ZN$i)@7NDR`c#SKO@#8MNY|_7VERF@%$Q!_0aP&N?Zdh z(pZb-faJsUXAf7l8ilrtB={?1puEQo;sTtS;5+uYiWg~^2WSjKm`h=|%D9iJEfe-@ zSIgAsT$`h~wCiXAFP-LTS490yUWcm`--m^@qYMrgZo$`Foi?qV0wiPK>}M+aiv1BB zWkdlisQb+maQ$kJ+wG!l`R?${`9uJDSbGuxMAl;LKJ(Z9{qftr6(h%2>ATQ3iCSb70C@C zyaJ<0Zs>}x1q+7xHFlTJ@nC-(t2&QHaDrLtASLIzl>%qmAoSo)oCfmG;j5qVFSWe3 zV<}heFl8{TJ!x1~JAsW(A@+PT0J8G@-nl0?>(vIUMLzLqxi@zn90NKX_}Q44{Kx0-wU9+6GWNMzvze?@wpIP6&%t_T;?gf2&s%n#?s4+q+V1(l5h;)?_|6%ybW zxFajniv>lvQ`Vc#4-YyI-v|CJv6Wx-9R7w(QD<`t|F_!@=@QLX^dR|UkA?R=6}?wH zYi(F~7Egg3PTnKZF<+;itSAW)G&U(Axuw`!f=e3lB|g+k82Kx`SwF|+0-NZO_S3by zA1QkV3{NlO!kJTFoOUJB(=CdR{0-XxwPv1M@U2Mi3Cul$DI%aL_Z?$&!MS&*n{IXL zH2z3SG6m#V2x&n2|QTj#XtH^piA4Sno4;TCS@+q~iFa=^p2B>mz46)%VN{aB~>qj~KA zDHQ*+?(x40g~NZz)T)%Pe`cu|J~Hd;$qt7lxPia{`F+;vEu6>y=7nTbFOQCarjaCyR46vTwZi0IqJ65n>WE*Zo zf-t>D%yw&tasz4QHFPq4OF1l{V%0Yv73edla_hIRzW>VsFb}^V|27gd0XFtdRG!A1P-OCep@!l@Yrt;b>7#~GME%}mw~c2jw5AwPSQoSam0T+ns?GT0Us#ARB5J*6 zAV6cA&|*z6shQC7CyR(khCK`0G2=HID(E-}J3kbMey*ZGR)$QAX^bKMbVJXR)%V4< zbfpKL3j9%A}!V>zG?V%d}rGxE3gg6fm42>nu-baJR z`V6Y&+2xIk4TP&r$AALyE&2})))`#ou|!(lg4~-1``bqz&@vk120>#Tov&zP1v3WZ zL-U(p-XCyXX9kXv>Y)?vJ!(3DyCV8;#M>%omS6%WE1)n;9ki za1Ev(C#)c=;ZwB?BqtwevAyFS3HLRPk&%%Tv;VYa$pHcw9SWJ8vOcN}ViQh%qVjlH zSjQVpu4E~Ht4o+f!W74wvobL)l$cPIrSp}V2)e^w#x;Xd`g#|%V=W_DH1_aUoWVH0 zH%;J?CY;ECqe^a7AbB<-enzCv0ZXf`j_XZFKNyRN>%x$6 z)J8HDPF<*B>k{1*ng2Aps`aC-{6&MVi2ElWe#uhsAV|M)h66C+?n${cho%AX>b$WE zAqy;=2I^T-j!)t-m;i`oK6 z-QD3p=4J>)b80q4zD8biRzp#Yra=fo!Cn=lFu7lb2X6%6%_QiFaNITmygAN3c|8Ln z4eeY;!t9_*qeh9dt!zAFJJmT;Q#&wJw_)6~hW%((s4y${pwUw~g6n!*c}Q(E5}Bp} zP~AQNxgce4IY}pSN)DixdINCO2^+f5KMJSQMx5wI(QWYd*eE2WDK~qx zpYdOF(AH{hk-U_7osJqh%(xvQkGofFKS4-5GPyUG2q_d zJnYuv>- z*qbnlm0-4zm`&)oPo)V2$eU;6XmCBk>AHlbc$kn(bwJv73rU!$(riopB<;9mYIi!2 ze#}Ipwynlo+#H2JLS$j#jlvCyluFgBM=2T((s*STWqn}q@2+~KmlxFJGIJ{~SQLB; zj=5M|Vn+Ff?uzUUku1R}(+Ao0Pi(G-A77eH5c2B}SE)^z8ltpaH1)fDB)+@h&@*kY zN$P7~`;0iR%(KtL{F|@mM>6RqK7rl&e zMADE^pC&`f{I9_h2XzIifCW--Exzk!tRUt@<0?K^MaB}pGZaYMGXm+T`vn+Gg$F7EAA5RYqxdf_rPbMmVF z2Df#{`^jWm*t=TQGhEeUJ4}BAmh+k3se>yUHlCpv!$V=dIB;1KK~w}a;@x3Y|LjcV z-5EY6gr%LdDM2=BEMy)LmOPUzRaQzG$ka7jUI&CWV~B}=J4_ocMn@NGO)^axdr6Xl zGEzj6f;s{he~dPANHR?wdz^5QX>bhyZVNa71$7`5XGa@RCQ(HnVI`rbiA9f-f)(gw zvlYaB;rEydZ6X~Kdv2MT|1C6PBV>bczC%hO62s^b6{mw@phb2Oh+c}J3egtSEoMvo z_Rc6iZf?YqzIlApq&i^gBkJpp*K2VKE`-ZRxSG8lv<^E$T{p&13rSYj{Es&p?Yx_q zf-|Ox_psYh%{NTRy5ycs(wsaMeXtVpex)9`0~)3S&g!2?zfHt1D?H3qCs37V3@b0L z=#z2x1hnqpS7@op@eGS$TtL|~B*zafo)v@Zzp4FrfH^Q!n|4r5ZM5Xk>jI{&#k6^t z*TC@ckmqKD71)KeL}n{mWW4* z2JsV)1ggoQvOp%sG3D8h#&(k)1SuJJtl?|%gDe*2B78hC0Wc0G~X@Kgo*Tr1Eyo!Gd@(v@q znqwF6iCI(MvxD?b&1dA>Ut)C3{Nx%}=mT|*P;>|h<<97QWGZYip%ztggPX3tGfe1} zVxj^M3jYV5Y>xzR~buU%8OPSiz=*2?ANlguUvPC;-gkpv z?);OUu+K4gOg_D9YHC-n@Dv*nR~I(lCO2{HuSUsUpZPPR^ObJz4$JgwM5u3sKpPE4 zDnq+3;&S*jSrCgDeI!*QV$Bu4)2nDi3U7phG>3H&x3rIGgzF&17a`@pO3=7>)(}u} zS2ME65PoS(jq85}+Kfpt7m1;Y+(ShqfOal2B#K4y{l+fy&LF`nw-ZVoyD}PZ#H{MP z=E6aVc8JmB;QIouyu&a;u302*jZ^Rr-{=Ac&tW}^_ob5Z9ik*k!6LubnKdb*ASuID zIfa{uWgvpD%yC|rDS!J>el;X7+#u&B>e@bJJMFKv%%Ugk(Dqbi_`Hq+jBb0)A#%H z7W$tM4P$Aa}uJH)=o3f3IwrVx!E9t%BJK)2?UI2CaH5Xfz8BNnVCU_?g@_?EhKjge$r+t0hY^x&wgj)i7<;|9 zr!y!kcLtma+)E6*&|JY1k0VT1ID_t|N*MwxlC-LN(jgEXkDQISp%jaU&)PUH8&HUd z$xo-fQBpxw>x%%oWl)n8S_QB{JB5qD@{h+D()jWHQd=0w)9zsu7tN}c#m ziFp~EnHs3H_!%~GZ8&i2$qIk>t4+GRs+275Y*o+N_4y-`O(qK z%pVMw8WDtH!uW$>PoJO&L8-q&1vT8k_VLbdmwm+wG(?Oy@|Db^4~zoSSn@O8USX)# ztHv;B=JIujXGl2Z`9df3|=Y z5kHyA;V$je&Px#t!Qht0hN) zCnaJeXB06$KI?C1ugv(p6=hJCaEH-GPNOxp%#gmi>hgy9HPu|*;H`ZgGnoH$+oc_* zHiDxzXy)>)N1?N9dlF_eQ5u1HOe(}ktTXJ2qCi-{!;57w@DbUVr!R89UP1_&09qkr zLSau-@B#L{hbJP+_ENIh)H*Cos-z-?m1JlLT=ypoDi+YGEO&`ZbX5@l54NcI9Wmk z;SIo)6)A{Q>w{Pl2x=G9fY^R8TVM!`OlFZ%al9?0G-SrT0%pFUFM!ye^ ziiAQ&d?hXz1B`0cHm4=uG)ZDA8y64{XsSrvn{g6P9}t^`rQQbFknPF5fiM6Eis)s~ z^DVF;u^JFor{OiLCliv>;7d}6pJH%L2@kRqKpa1bqqmun;S++Hz!~Gw7sTuHoy{0> z`7kiZX9d@WCcoXDMk233NO19YMH=$7rFu1P2$Ro=^Vn!0u#-*P3qgTIasZcV2uL&J3&?L4k_7p6OI_D!oz`b zB1QDS482D|SZXXsOz1y5Lf?Tv+em5X=7!m)vK;W2pbC@4X6)oc$yuVN21g@Sn-~#) zqON_ulSf@?*Kv*!iwSK84_1*x{T!JRgf8QNdK#i@KdMLSRp~AyPW-LaFjBVTv$rEN z=&*_vY}~l750~*@j&i$#vKa9 zjIFF$^BIYAi9xHz5Cg%PiTA!D9!TN5VF`+A`IuKw#fO09+|qo7ribR&+PT&=KDu3O zRah zr={VHpWC(S8!AVueSmo<+^_gs%%X>p?1iP`B?XLmn=w1A4^*{SOQc-5ap}lN!wDDt zc5Eo_cIldifF|3{W1Knw^8tS$DOk%qpMS2=rprvYy!w%|@of&!ZfC;XKIP6elBJl+ zw8M(V@fvcS!fmAgBAyMtBjdvDiSYU3iaMX=#J*O!F{qJMlHek}*omtu_S|-&qEo=S z2FnU~w3|y^`KHgFZp`RaUL;}CADqlUMcUb)8kRakYs#> zP9p1*DF;lMnN_1O_${m0n%Lm+fr$?UztNE*<=^juT#Y z-S42eXzW4>PeeeUGl)T++J*_3_CvQ7-xt74+B6X_4eL(xZxuam$YrwWS$1x2It?Cu zF@Z`EmvW&P`%ALt{?51GmlL|#HOjQiBmn4W}PX}h+Y)AXFSb) zNPC+3d&-An@laYw#JR%bcELm20JVUhyogNOXsoVuW~jtCYW>TpJgK}di%6a`xtmvS zjN=RLnJQ*J#ffz4?UJdlZ?#q4cs&7`Fvr+0E9eZ>XVvW~z4g&JecBLXevY?I=rDt? zS`8^%l#Pq=jC=f*U1SIxKkL5v`+nJ<)0!GPd{6{VI z587e2P|>cTN~zsd<-oJ(-1fB#^r{1ZwE_n@ovHVAvyVuXUn#kWk+s5Ip$9rpi)};P zT;+Jf*~sl9SuEnzqbyRpTVjcpDn96^Ie6he_$^Z=-@O^` zAo5@9V6Mk$cN_-hVMra;Jb8Rj#1L{n{uf>66q^eZuI;+3wr$(C?e?v0+h1+lwr$(C zZDZB_SMs0i>|`gCnK_%2nasoM22q!eN4~h+M!iT<^Mm4KNXpVf;*4?13sI5sg)UQW zFNr{sm>#0Vmx6A<>$~5ZWIhD@Te^3ZzC9XyeR^|yUmn5GCA8x<*REUEEY1xb^d z4rA)iwi!n^K`4U3m!0@m3g973BbnKqKT#4mEcJA<AC?XQj68VVgVeaPHk%K{D-{~ znE>B%Np#)(y42h7Lzdb&%UN{29L*4;vfE*ynJ{f#=mVG;D1QFmmKu>4stm+Ze&NI| zo>VXtn3y|10 ze2)VKn<^KxWo(7bCt8ASO1l0Q8F(!+NSgmwAI!T?igBPqVR&O#dG?MROnhbLMvn_^ zSDbqNjthv)g7~XoXdYhb{}_`B{2$!PX`m_4_F5+^Dbzrh&Z*EyC~}K2Ijz)Fxdp_p zv_^-XnKOF%Me9*m4NCS%)oqnFJt-1b7hWH!gqjL_;(_}O0bw_+1HZc7VBMklK6nGa zqs;^UB)$q@0=w-hWjET_n2`THz&Fl&b2TEiO*bLx6;3|VRi<6ZRRQ*%DR+94Dj!_W z;45vtf^TIP_)J;s>Mwd0b-hW{j8=MhmKpxW<%wn*OrkSy>O5LJSrn*C$TWky1h&S@ zFT@tZZ7MAnv6;l*wn+Y6#D5OYehykPYw2ODLlL16aofKb5CA;H$ipCE|~1jR!x0@lgdrE9i#olwpIqoBdtsCKVHC zAR&=#fu~;MX4wR33%N$8l#R|UFb8kc-hXJ_=c@9ZA*Z~1)vF(}1>V*|bg_mPTI$i` z`c_Sez(8nN`+P6fQ;<;DLvBlt^RvxyQB6tJKu}8FlSe-x4|ihuvjeSU7ewifn@Z_1Kx0&1@b&vrF5XyP zFIwTMidK9M*Tonol1^cf`kLIYPw^M<#-^@U)9`2o$1NM7Phv8KK|-G;68!@-+TDFX zRLi*&gFC2izng8Orfn-!Q`DM2nNcVppL$Iv`N~eZg)jk6h%{ldK_#c1+>>geC&SDT z&QC?@E%YoUv;k8%2R*5G00_Wz6zUlIETcocTTl5yl=chedELWxzt*L(>?wpE@m?|; z71$Dde4NNQ%Wvd0hmY^mB=lFqc>lHpeD`e;NdqZKlX;$KX@AEJTaEqxFXqjzHp{{MMzkX1_T^P^bdL?HlAoh z7;j?)EmuPMN{=4+=Z}RVZ9Zu}Ww}O!VUK3*4fUE{?M>tw#4i_1)1BR*GXL-0`|oFZ zhG$tW*Z1_alRoe3x*yPaQ3<1DZF%Nim(i}UztRlyZ})ER<>M~OHyaFfWSK_F>RT19 z0W5cR^<4AffqetRVSjaIX62%13)@fa`wupZECf{9xkuhF*VI13ccDuTp$=R7AW_GfKzC8rL z?3~&CI#~*ZX(BT{M`4F6sCD3$%kzCh1-fx8nC(cq1R}+Yx-WYuelYwfi34*zbe8Qn{|LtEvWw2v+JT5@v(FcG_F~!q#6P&PIyr zKojd_&emn9q#VUcA^~Ev(u(oN_R~;3xV}wXth~&8=oNI#_?MIppVwzwgqZX(^zAV% z0ruCkedqO0SvRZ|VC*vk2HCF873yLRw92fjOzzEciREjE5HebtG)<8kYmV5CKB|O5 zLh(&G)DC2rSDuwfKj)f>Q_Qeot-n(5b7!mT5=akc%1R#$Qu4xPc|!vA&6aI@&R z(ZXfh%_K`IO6av5MeMVcNu5bHvE3chzoxxeO<9$`Pg)_()ldgjsnMht3bRQ<2%Rz_ zYm1?sq!cbov&KBCrJ=_Nr;0qh?0*?R$o453%bgw*(MD7RRa;IAyAd>U*BFvZdMka<_U3egr!1ATZghx zDsaWv&2T9>=1R>}qf|M0$uISbsY@yhG~$#FL{rWKx21Sct62@$G}}-)4QEqw5}bAx zz__>qL+0Te7VxD++N6iR7Qa`bC-2*RV=O}pd#DWdXOgbsEIOCspbJ`}PKSkH2ZGv3 z0&&P`#Y!I~k2mClXw7Ko@M2#m9>FZj)=*)s+n}|)=W^M#163C0BUkRkQ(~06iXfA! zSVrJ*k9V5dol{=Xy9@zoxi{c^Of5=tmqGXreMxUpqEhHwTR} z_fVn*i;zi(bzAaJ2e6%!h&k5=fa7>_vF2PWThxHAoez2y2_-tjaoL^k5?q;*tq`k& z3Ryu$i-LR;$X)!PJcd%KgfgU;&_&tpB@?`)c!5|J>9)0Cm9bzkJbKIlFz}low&uQ*&haq&fOv$Ix*GMd`Ym{cJAb?1`sD$#`Wr&h%Zs@!-AA4F~ zQ7I&G4=Utlxi%8VO$2m8jii=174G7g>0f9=J000FRZ-$(|IkDWId@F)EN>T8>z)(z z_ab?ITE%`}RyJ3a;In8Sit|6=Et@P@2noTvX_lQw!E+Jq9~@>erIbAh^z*@`8>&Eb zz9idhDGCl=7)Z;qxemj4up98^*vWHZ{m2~-j@~5|Ct_Lo9`a8sbkYC*MlY}k58guu zxt4Ko{E{I4Xehm67hJn?L?`e6;3=sG$tXM&K{Z&TB9`mPgA=odHK>EtO-fE=NOf~+ zPF{A|VUo+-6-{ffUv1Y`Apa>_jZglQ`W{Wi3>LbWNl=6Yr83_PqbiM+5G_gCm-umH z@*Aii8RLH$df>DxqM#>uu5ze?Ilc-IR#4Um8Ih>yi(vg7vS;WKbRQ0q%&ABiFaPjQjTVzFVI)oL5OFZ z-<*IcenwR`sG*%4P|kh9?BZ`=nlbT2W=xk<>ybU0rAa!oF(t6pgF7$vr=CM)18J$7 zUaUt}IuXdTA2k1$!-b_ub6UV=yd6*BLxwJq7tYlr+umol8Y+70v&wGq2Tbz3KdFZ` z;gsvVw!vc+{~IiIKUB&olN8l1G1c?j=QA?6nRRP);}^7q01Q*(vY#6{I49m&WZwib za;F-Gt2^6OOwjQpqBjIhZHe&}2^+{45_c=-MG!K!B)Mo1GThaXnOY-+ZH}7KMcpHKWDt$qlUhZJ^syH4lzS7I4V9HuD{Kj3k)u;h zP(yE)F69=zlL*JTe3qV2PkhT%Lx)G=W~ju-D~iZi_@ z!fSFdmh8}>FN!7tDi)%ycH9njji*JK*nN3R#SLnO0 z&Vzc`&UEWfgL@HIhK7=o$Y{5+vWh&WR`;?|dy-jD_7Yrj%Hn+vxDuV1kFc$0$*_a+ zFei-%e?W8g+A-za3_hW0Pb^m5J6mK143j`fm)KhRa!#SFt_?jmfr>kc9Y(Ee{d(Van8$&kIfWQz zPi_>pIgJ~H%aPUPsQE+{xj)o`Kc!33J?j#()8;WwO=as#$5nw5#9x z#4wB4c@%h1PCs~fWT#)q7b{0O_GWg`&rGlJwttPdm))A&FI?`VU-28Gil&PF>Dd4_ zq|W%d#ez=hmE%a{2Xvxo>SyX;rwWzWDoQj)J`=87CBQ8V7^#(C!{y;H0-|VBY5Mu8e&VEOZY%+QJ z^*p+5dBg?B@O`hUPq`>#+SAXyV8X(=-~=d+!uDA? zj%UPPtTv@ysUu3kZC>cB1__u8GL^To_X(_Kbg(+3B9I@l*&drM@^%}ilk#@b>(^wV z4Sg5b9}p0WE-d1&!%S+8i8ZQ{B&fC^Zz#p*E+TiaB6~+08PG_bYQX z${Y&F(ZdPYP_e_}`HTZ9*LcR{Ze!HDex{GuT1z)lYFEWt=Zo9WT;#l+?Resc4bYJc zyOW>?G(eiwwgN<1>&&5n|!-vZ;uKl{n;Ap+$-Xj7l?-T1jXRwUk{Ry?ck}V{M`&e0?BmMcAT7 zU4I;umk>GTPK_6QoTGO>^9HlHH#{nEoC@DC`GLuJy$_EAv7DWqA7Qq6H8>G)i{90X zDV=1htQ)6-H(Z{i8f}?_(%&y>X;A+>Qk|EO_&r|mk4MkGo)K*s zjKGS@cM$a8L5L{G#3khrCBh7wKWsGLzN0>o3^xmLv*g5jXq9nfyxm~%oqiX{XbN5?1KTv@xJJkU9=R8RbcEm1tvy6dY*>$a)11IoIY7cxRR!v~+@pzb(kiVO5-hk#qW%o$n_3(O zMoJ%37A%5+PeX^Kp&!Omzr_=Z;~$1m;cn;FO_bsB4mm$rm-uzTqminI#tnY&^iNhi zh+C;LkSJbNs???q1TmoPwOX;~3a#pQ0IaN_-{`*76HB%n^eM9c0DSOnOIQgB%G%$( zlHK*j?g)KvVWMlxbxIEh_IrfcbTh>@RdD;{A3h`hHD}Bg51nR6aujR!dK3zAv?d%= z`=n>tA7(Ml?z>y|Uxp!3=z|HHn^l9$EEj>V2zIuE3qV{FkOT1KT zj&kL~Ne5}w{1^3%&Vb9BjONweNUPY?udf0?b?aGzxEgy)XfB8S8Zm^+ozL-f=wJsH z0Kqa$^supuHILxnK$VR8s>dmvT(ryX(#iQrRs}nQuYz`J;IK%@K_{9!S1IEC%e%oQ z@sHF>9|1V0%@PRRR#;#s5(R9nN=~C(S7Zsy<`I6}#Q8ks-W@3rQC)mY zo??=FBLP8@VjV-xr1?;CAWw!eKIvvAT{KOs=<^W{7$q4Mb-F|ZI5ar#Qh|XV07H%lAi(5DML^;p#^ljxN9pgXva|(pssfgj2TAQZ@ zDqD+#i5Gqw%XG_w{8MI2hKde}{>%E6m*}Vefowgrk}LTn#XqL%?le=s!xV^hssrW| zEQj+(RiV4pkmu1m$_!;)bcu*`_)PN^FLeDtlbsp7vBvC;zrhcI1t)26X4Ad{;34h<;|yEcccdR>Q8jb{0zLt02aZB0DrJEGh-Bfu8qC4WwaZdk;PpzQz?N#}z`jS)H zyR_mS`f*#*>s@u%lpi<#S=mjHO}Bbgw>qPGkDz!2QRx??%CEVC5Kur&P}&<-b%#{B zCz)bi;VMz#SG4jMv&F8pk^tsNlwa?Ji#jj=pFiYTJ4sQ=tI$7n0T($=G1NhvSNQ0& zQYUz#BDRb0TRPxk@MVvQj|&lmuQ!BI(QtMXpjGj?|Apn9Uk`j*QpzUiXjLsxgoM5# zq-tcdQRy|0f}l1#3xrWJiZe%4w-!W0w~Gizb2t;k zNWHt=hZI_BvpggVUfN)j4-xO&)IORXe3&QrSCYoyS$AY# zq;;wws!q61FBX;Ikl*ofmnhT&g0=z8HzJG-seo*9t04^rSt6cXvZR%ZQYVf~DCG|5 zi$NsvLvl#TjYC~AqZ12CQ;R6<_4=RGSk>iQ_jv|QdJ3f9 z(y;K=Q1)pC;3$3QhA(ExMLnZc1xC*qQ{{2?>f8Eio^9NGo`HQFB~f-Ep6R1^^z+d+ zVeUO*AZ~5?eV}Aud+KA8e(n2KgFRT_VsdG);@F$JegV|@rUrzT5#m8WF*$3$_ltqb zk5Kq+!|>x5zvv9S!xJQ8X4v37(p5D+3_<0JF`mm83coT9p14c=`Lujx&~Ez?$(#@^ z(SBji{l*W)egp)ka0^s$l8e%1lxSv3AIg+|_WWO%O4koRr0c8x?1)4#ACAH8|7@22 z;P*mqK1mRz2tf2O2}B71gTDD;P9pSc{-8o!D-6;8B(G~!1}|-_*}N&=ShM?tv>z9W z@{sO*S-*+j)Z=QG*Wg6Xxw|4tM8ArFeuX8!BfRVv+!bAZTKws`k@CJ5p;TuOq4|Ms zKB*Ie{NZ*v@yFP2PDtY3clpQtyDvumfpK15v=oNFXJD;SMYs!wf^`Nv)p(PGXZGGeAa!( z6tg16!l}+~%W9E%zKo$|T3TkNt4nDIPjoyqsp}XuVdWmOe%YDgRsa|m=<*PMc)ZZf z7f6+PkaVv}w2QWRxnZ=hHsYo<{T8^aligg2`z?kN+Z_B@{K{{)T5ocuAa~J62$F?v6to zou=5q+p&obiG zxKqN3YXtr<8Z(1^+qUJv72EwzRC7<4-daMSQ$=L<1ASZPD0Ysb(J^HDasIIE0wDB1 zRMew$gaQ8GSYOtdLwzAsUp(ovePLo>l(a{`A!uJ3?a{vw9FKboLGPgW2V?t6%LSio z5Oo%~yQ{2k5Kjbbpg;4n=v7$Nc;agjnNhCug__u*qZyb&@JoP(hs-cE0}qYrkp|@& zHW&jJ^@0{tnP$;eAsI7wOFT_b2)@r2`D?<{ux9#ex*D2K$*a-c;V+&V$WNuKiJy68 z&*s$8Evt)e(9@k}Jzg=MsJ|;8_e=nNetDj(Gt2LHT3aCfVz@(K+dp+Hp^sC|2VVeN zus$iA3HufC2cDJ%pQhBAHtVBz5&*ov@YKni70SB|0N-CFYq)Qf{3);Dt1C6`z$5^@ zCZ~+df~8s2wp3B+uko^T(c^^d^TOeVDrYG9y=$~0J51lDd9<9#1=_grQaOPL+H`5u zqF!{oD9tCNm8{Ysle{id7SU&c-wdKFIaN=-{L13Gr?QlhW$5!~J!{eoF-lm;hGtpR z;=86fkg>Bt=wc7SJ_pv|C89ODGF3o&rpt~{I#u%(`GHP?lWmQvLExw+2~BNS?65mR zQ(~}Q$Ph9a!zSg+czC)A*>L~2yAY~bS8K#|zgfNV-}=S));pPl5Ozp_MaVoLD~tt0 zC{rC)qy-tXY$i-<6NGXeeGs+=76ibhYMBxXM*!JiQ{d!Qg~y^YgASF_=~na4Bf&IkCX2783qrjiKCjV*C22-u)Y67pYFS~F=mL{&mN86l!&0@<;12bT z-K15z1~G5KD4$WTQ17g=adgd)G@Y=Z)jc|h2JXat(i|LdoL+l))0gaU0FZ*YLI zyQ7y>_6x!=*Y#8k#uzl?htO)kBz z2mEA{N3o{o3=Gk^pN3H=Q1?huG=>C;tsH0K!WJ&%n%RwutLGZpt%Q5X1JYa&GV$T` zb1qy$<9c%-v|p%u0SwBXLqwQIf?yN}9vVM(Euogf3@|8BIno#QP$wkn2Nd*h$6HAO z>q$44E{7Ph0k#|s0kILz^4xEhJ8$6~`_Im)5mCUUK6GAKCmNg=xEi>}r6K)0SP)88 zZpdCBjz3Jq#xHDz8{oFtm*4eDWnz&xzh9bfGoxZfy@x*#T32BSN$Je~_1cDZqvq~$DfM8=X&2Yb1pbY*}@ z{u9YLg(q-sRS#uaubgGCC!J&89MHH%FJ|6o*WR#=oa8ugN0oOX1WD;RU#cUpAs*uI z#Nw9fd9~=Kg2IoJ--j^n5C_!Y???^6nxU9c3UINc!?Q$Vpd@Hm)!qX}9}i`5Ft)og zN=3OhLL?nD_}W)AN~f-zB#)6vo!E#Lz@n9e+=XCzz?;{0=B4bRd|xau3%m^q@gc#z ztSMJ}>SgU=s-E2(Vs`QER#6O^a>4#y;_VyukX*0u4EgnBiRAL2QR&n}hc@wqR5`&t z8{>>HE%ik5y6n66BQ=4>rsMrV2Gc-8K2a(Z z?x0h&;}Cjxun3`?6HNXay85AoSob$1*GoXu+aI&oTsW2=2>L~cQJ(;o?E|r0lK?vH zYG@ze3s&ftEcj%zed;5LGR~%?O$KueaA**w&pEAejqh6J3I@<1N{#DIU2eDqY`0wN zJ)gLQhn-yWk38_KeP#&!EnEX=F88@187WK4ub69J8B$&Wujn${xYBxK!IAnH=uv9mp=ymPJ$(^~&`NF=!y2a>vw@ z2bu1oq z$jA(qXnDzT#LFUwUMDlw36Ir1j>j%mVpVEO5-7N4yZ2(a5XCiu176shJHi^xK6pT( z>^O_GB-3;Gvw)-VO4DQwDn9=o^52WT@d6dI;!Gr04@l*uLa}%*IOT)3T{;i4?OaT; z?9(uapTO+`CSOS(4Dy+ovsxdB;9TuKrx!E!Qf6Pnmx}tuv^vF)NM@12O!pa$R;@4C z^wN6W;hULVsxMn^t>Vy3?zz^XwtvAQFWN+%HW{+Xml(X@^?w;lQIWQabHOCmX*ExE?-A16*Nzx!} z1Nh*Jv}tW4>9W`X)Qar_tjiIC8S9AZ+K*6`M*-F7o#?>cAW-u3BU{2ve$A6J~b*L=Vgl5y%L2li^&vU zvx=Q7J^e?g0Sz!&jONT$T_;)Y8^(I!SHjS6O%K918S{c+>YJQ`V7 zRxc#;bB{yo4`uY?Uy?Gun8*jM`-{0ECm$$~52AKSe{j2b{h*hRt9mhi(ALW^!>}Lp z>*c)wh;LmFaeoB(i@Tw{7ym);52QEcUogLUfso(JJQm&Gz?S7cvxX0j>Y5)qndLqa z`mfxQ3xP(z4+Wd#9~hjnUuM z1Ip#!dJZA(6MSbB7bNg#oTP?(eos#pX4g3|rxusF^n8L;OOF`t3L3teB$N1MGO1vN zMrL_6@u<4>V#V|2?J4*V)Lc!vodz?$kdr|&+_(o;zZ@6rAJG&CTtE@;2o5d;HhH%7 zI^&FkPy-TpR5W`1v;~wkEP{^la6g_n?KLZ4NF@|Qk9D)(TAasYN)mA#FU|r7-tHCn z!-|{t*r_X?P=k^g z7D4pgN+SbIh^a$J zP&$n$HR%`Rf+YUJqFER-lLLWWv}I~#D|J-Or1FHY`88XcU?Zmtp3T_SLC`SL#aP9;rwJF&HhAIQNGayC@76iH2E4(^knfWXr!v$5p*4`8)iZRp}$* zJM5Y5GXqZz^G#S+KrQFL0K5dI_*Gm`tWV2NZ16m+&$e*mP|pj!9*h+;kC$FK_PV3f zJvq54i^jjI(Ad#T?SC8E|2nq+ePA3M55P4Bk!70&7D&aw@^lDbnt+m!Fl_JD3Mo>X z{izz(%b@%Y6oSSe+iZcz_LD4iS&%G=!cW%mu4@!&!n4~U;zP1DUd-fVx$wmLWGUG! zSUR%9(kr?%U_l!~d?c7A_g%wm-t+Qo4iPsh=T)VL@5E*GZhAjl@mZ!VMRoRBUB1GM zA`D~#S5xM1W`@oWVuI_$S}MqM#5b~qkYzU;)S+cyG$T2i4mc4f(y@BWpG}9;Pq3lK;DDO)Wx$K?r*yEAYpRZ z+~~`w40n(JwJ|ymE=n2JG;%aV!Q0Bf+@lmph02eu`44{-e157t@Iagm6;mdEUK8I< z>dcw_(D~NL_gaI9u*Q)1Q!Yp2>vnsRzj&B9%V&W85rRGTyCD#B!ckBg=xSi*ZOOCp1o#6QdM26h5z&7#UoEjf^&_j=+fEv^UCU?V( zDD2zK71(F(gcG|k`cZC4v8eUAcF<64_rk)>b4qfZRbXFM`-*il);RQAk`w@yD=Q!y z^I{&H+X;bMuvvlkwE6GhOoN}ati715eGul6okf^ucLQF7FGDfT*025Th$n5FikAsP zxIYRK|1{?x6(o53wcg>^{2n6U+UfdGKFfGi_?KkAW`i)(J^Q%qk0ycc>UV|C}e2YfAaZdg_{ zhC$E+u?>q};LRwJ$G8U;c8tb8+L4;amIoX^C7;O|UD4_um4M285jX zZxITYUq#+dqDWuLbp?zP3#=`JE44vSBi;lGD(XUfv@vxYwA=|33Xe_Q;7;h6toAb( zPhFGkkKrvWJq`U3S6y^9xdy`EwUsFGYR7^_KQg}E-6)`hiP%U*7__R}|U@ zu4I(soXs~XchNulOb%*Ze_j4?I|iPfgL}Jg;ov8xyQDrxH4?oSv_&r@bp?@Zu!BmP z6bF6QgQl!3fZeFo`aT|PwR}wM9QyuN?yZC8!5RABXep5yM&5H*u=uEyac_?ptj|>`-|It=<(}Se{NhD|Ip(z z@9>2kxjSaSr-$H4sL2&b4M!VY7>H#*oaHW3=3z`gz(PW$Cvh?`c6V^bdjC)?0T0K1 z8Rs9~v(xc1Wn6f9D4sRd3ICXSv$zpG{t)*T(@sRt^6;VVeJ1E*mQ%g*ff zO90-Z%+H~f}Q2cPO%=Y0UBn(?nsj%ftQ3mnwI(1~eS0{l?{W^ICC@_3dtkEc#>~6%eZ^=1L zxnzD8d>u0o()5V=71>bOCQw*ro&m}xmTY6U04g&LN~SK6k_?a*GX+hn(jjUVP&+1X zp_~jToEcz;HZH{0te|}&=RdqQ@F9Gsj2?ryzzmsM_qANm{Ol4#Wv7~NqqvX)=|>0d zEMa08!GYi_z3NqRMkin#^hDOQJx_lln!KX zo+ZuV*XfC-LEn+Ja_-3|YBu0~K(P`2C9UxqQ10eDS))}{dWIqgmf*l;`q4B}d9)-- zt#p(ZFp}96iEpO~=kTiwFu#8g$y2f1>+T zg?7Ow)s+#UvG(+dcE%^*g+t#+WLm_g{T+LXUEe%urcIH2&#-C6zn=I>w{_enE+y-( zNXM_gmP5dVBZHv9^>pkS{^`$_#ZQzin*dVd+MfnQxHA~8A_A;ziep(31&7FZ7Cckx zSbbv74}i?4ir*Mp*W)8MeU>>n{wHV5)o zk{~*H2&r=9MX_}3q$D&W*y-$R~OIb(=?#||?} z@DqPrH4N<<1x1?`_}AT-fo zTWrP~b>gkX20YbaIQOhBa38($;}k=iyGqcPs+XZyw4a$n|urppqz;P{hng<(Nh0R>i)|$O28tgm`GMxB++tVJlExS~&%M zD`d2OIQ#h?Kz+&u9)kCt=&5EfcJ=$Tekr^RhZ;P7`(P&-iN877@thS{Ts5#deHxft zw&rx&nvj60)3x!I^Sn>hCq2sDFOVF^`qe|#Wc>fc!vuhKhUyT!GbFD#>Q^PnQn#;@ zhbBb{Aq1P*5OeYd;!WU$L}5j&;KG_}kPN@J1jhTGMSM-wR}VuMs_*SU7J5RVMgL-_ zVtbWs#u=b2=l6?w>{OIyD7J^~iPA+h5*Hx;$`ng?Hf=QM=@cBrdvR;#gV?HGsa0bj zlqK%cs3_bQ4w(%1KghB;@*R7_dF46IJ{*nx4rj-2uw2La#jtR{VSxUYw4nthoxf0g zZvuUv?NyMILHy)*8}pHR#=OkaBW>`~Pp}xltmh^a?lG9aIxNUB&QCWFGiZe0Eq1#F za%PD#Oe6OjwL$^@++Pm#j2a!9(}wk&!V}*`y_pAm?NNT=Kt1aP$BkBP+LROwmcpfRRO7Ms~q@QLtHnS4cb|=f6Z_czytU_CNd%G zH2pkwG7;{yO70t45c!+X2iDZNzD(5mm8udmR>7-l)JBkNtX2mqO>-LPM*x$P)hE@f zo$+)n^k&x8XxCoWWL*=0nN_W{dbrgRo2Hh~9dq4L{Q6phIBkta(AAY|@GI=sMpruT zoz7UiRyzX%07oOqs@yfpmDy`hOX~MnXN>mhO?OI5Y}-GBU&A`c`SqUWSzQ2x8`?Ld zd5M885aIe_k3N$Kj3KiPjXQKmxK)9dU?o42Z_pln(~QddzdAB)2#lti!}szC&fb9q z!4<+EeVTj`5NA_A&DV4a$2YkuaTUU8*CR%jD zBo|i)RW(T1|4Ks7`-@D&rGAfVK@1?n{ewXsmvRqXT@OR__L?a?bxHQ}ckzn(z@M(p zYk-^@LtGDiE~L^K=KjV1ThVIRTaBi;(MCCV4%)Dh&iTrRUklm&Q9HHcgb1t&VB2#4 zV_NkaZ~A8%Usco-upIMfkDH%GT+!{jKgL`xoAHClm$7Rv1+yP%-v;D9|G=f%hsNr8 zrPUj;G?&Pf3gYfX*5-H9Z-a%p`78duY!JhXgEHYeaGL-k^kkkNGlk~{D!DNWcJfZy zaJY6*t2bfIJ>`lRmsXEKi9ZZ=n5{53d?MCXWMK7;osp1!R1h-Q93AX^LvVgMo|}3l zygxyq7vdOqKA_Ar1%`01DBo)I4SHW_mNokZoUYv4w?9Dbntp;^R~_3y`|cV$oRgiI zAVeN1&AFcU|5kuD*1#XOKH`1(34PXl0Y4byQ1emxB@2IZm(wKI9Acz|TKGybUUZ!A z-k^qY_q%glbL(PFr!RxWX|4AYNXb2?kHB>kiC$S;8jSsCI~F(wFYprX*dKWi6G>+L zhHuIDuD2?JRrBPibUhbVe0v(VECdr55fVE1$@i*w@?m2Vq)HVl&Aycq_fiAeNh*y{%z6q>ElG0S6?*~E| zmhsZOK9V$sk_%@+)RitG%)gZxrIMVlkPbi0RfPNB)nNSPlz3eO-NEc_OY^7e^d;*0 zSBv)bDd_eo?D|Q#Zkrbraz`rrTx_q82va|0`6I->w681wv=D?Saw9#`>#j$PmH-OGfpnZ)W z$89U)KA8_Ow+(V&?}q3;fe)6yEo><6Rg%*#&Zv|xQ*6svGn+5ArERQf)(!s3@T^hq zRg`^U)>!45$|f{tF7gIM-BQ6gZGCA2@X6ac%b#c4cvkP_jqg2AZxrLkadrR6Qt2Y*biT-)` zCiVHWf9m3F7-d1!3ExN;uyUcqJA?9a_1H)O-FaV#rRd1l@LM@X1#h;h4Pk_Sqwp>j zZR&=Tt9lf3CZg(K*So!{2#8GENEd4)aPf3thq!qnu$t7xPWf=B!3=a+adPX2*Qr7M zbD;|NVREm7bRBoeki2D{%H~OOyeR<6*s(d`H^Nam^NUCoQPnSuqOv1*oV8h2r4qVs z?T-pbM(CRyCKbp^{;@OgdAo+XR_ zWP|kT`Vow_%m9*Xi)aZ8L!l*N7Is47$n{lzaKX>G6gMVcjYjgZ^&bFxW{18RbZ3-!H!PRwds zB1jtX+BfbRU&QHHucI=l+Md1Xp5&$eix}`t3cB)d;>|0UO`Af)4nJfU>A29~7oo(t zP!!=9FY))XuGM+%ykg>4evM#ot0OK(E~NE>vQ8-ap_625-G4%_YK)7$*ri)*{hqHc zj8nb9U#~Is{k>S!*DZ>sd(c%kTLv*b@U;zB`(B^$mo81VzzZ6*kIzs|W=@W#MxAP8W%*|~>PKBMqP0Hlr0 zcU~Lgdkb7y5eQa2k^)l7HW)wcZHm8Xam)qAN;l?;Ts;%eHp4VSzL~2U^-ZU)*EUjK zajvmH8M`+8l6DOHMs6GT47aY`H{d_{TDSZN=w`yMp*~4oqraIxhxrG48wCs{ZsyjR zKAr70_3u+()4E%}(G*(yPR%#=?wfAx-xWXie44-U@(ldv=Gy%CpRRxJr9Ub3Y=6f! zHU*xhZi;+zzG3zZeka>D`yTLK@4lEm5q^@tDSo?rqx)_^ehQ)<=5(@uuNU74=yjvq zumIIli-)?cs}m=Svrb}`pgMHTxM|v1=aH+>IyKE5^l|FJo)I+aH0~poGP*S_QH=T* zRzJc_-NUbIx#!GP*%8Fgha7Bbsf~Y&!ZU*ai9* z*#G2%Cl{}Di=OdnnLdVUZN8b-G{3>uIKSD}JifzeBz~t|V}ELBG=5i7FkngF-x-B9 zjiX#otb^g$H4%CN)-ryruW*_Go{P4tK5#sfZw@+qK5vMI4-9~};Y8BQ-xe^Wt(ip* z%ZNeyzZOz}#>Z)j%Dj}Z@Vz(=tDNDxNhbT#jIPpvn@o88HBZ9?^>p)E*VWGb!PZqa zkMLrBQem+9DC7N+u_7~z&0?%he#_7RfASx#H}j*sFn-?W6Qn$P&?HJ}zb?=zN&6fKz}XHyv)ncjzui0-Cx1zyTw#d0nHg;J`RG$PSNnp<%(AyGcrrL-7^ zOqc3HT*_VAOEFPcNs;^5ntZjXGrW=fdZ(`ClSGVfl%+Xr~%++k&al{+hz~)`VT!Dpd*U zS*4nE^IU)11qxjwoC?I)#MRg)E@;!NwH>hfKIdHxEMS ztxzZ%{$O6Wyz}=hs?=Sj@VD@kBcZp>VrQ8aZ1T{|6RRQsRyxwlc~{4_h8A^+c?dc?GRC zP*n(u*m>+a8Z~ec7HqI!p0I|~n%07K!d7dCI9Io`(+9}Ki^ap5jA>?E?<%JEeIMWW zZRQq<9)vND$rX<$$MHSS^QPn7Ghfd)5CB-ppD9LjlpPzs@RTne8*_ll_$bq>h+LI= z<_?z)h+y`;w-hTaUmuliBm+V5WOykDp$6z9gZ6<>+H{AtcoYe*hLNGqsxj#rv3L^~{FU9;F*FoPX zCz6-&1Uo1pYiu-joywd7w<0Jf7^t()e0@=dp56NII>4Co^w*O2yNRml-df4kLo7@Y z(g(Ggz;|GsRRHd7`BPjZ+y|TMvIkaNt1h}(<@NVY;4S6mBbbS73aspsJt#6XkS0k{ z^W#JfyKfrM#Xl~6^!Qj{Wd@8j~Z$YVCZ@6 z1nk-`=7v)GBX|(G9;q)0IZV`&^c&%(d*tR~PbGmb>jto}Yxb|ui4Qm@zUzf?+3KgK^ z11#in#s)?erw-`Cwf@9A|8nOfT!0WhfGr2&Ye9?e0CxB`!(GW(>l!lYx(>ffeDHbM z@d!BnIHYUZtb8J3u=xA^>X)JcxtM)3DSEJhG7>lTuM+$qj+56?G{~*HBsc-q ziBYhjN#xWKdf{4xm=U${_bhS*dFN8yHg%mil5>3v2qX(kI5Fr_W>@S7^nZ#M$zm&@ z#^1kwIU)SFKnnj;y!`J#3PmdBcABcFU)4=((~{I&%1C4}8ULn|_g9sz^y?FeN%P=h zu=j>turvrIYn~*H#*(u$3!R`_gPj6tnT;{Q??6)We8&eV5(#=Rmh~}x=qKgC$GdHf zS3~l=T<1IqlaNhb^miPu+Kw}?Gw-+FADVo7oWOdeUuyX+yXohW@cGP3wice;RLj|y zoXK-2j4$T`_Sb_Uf_kGPvoP%=Vls~N{P+!vHkuR4))IT;_twg8y`GvE-Ih&K`&LFU zpWrW0%u*E?LKGCA_-PGu5D`G4@?GJL6p@AfNvon)gYy$+(hMb`pQOepR)@a4D2|~P zlbzAjNY1+(Xh8}gv&3oMC!M+h$=XCBsHHQq8*O(kVids6MfoYhW5%Eh!5@_gw}^?( zq^UARvPGm;h7=XU_G?PxV~?haLk@*Ev}DJvY|vH~9Wn#p;Na_`z@;Fd0oI8$mBZ^E zpmP=kQDV3jwbOz$XN3>o(2pAHX8PgDtk8{G6+DQIkf7^M2W~v;bNc!e$>KXQ(DF3S z>Spuv(r7lb^DfX-jfLkAG$$Bx=dTa`(joO8hMk=zIxEV=} zTuL?>{FT;ncU4pwBQ8T9hhWp}L$=M!~h7S8VzSjtZZ(mA;m{Wq*M z*em@zwd-pR;AG>6fzQRGEOmjP2U?}4pGt$1u;$3$tIRxFv}L^i?vVR8Q+{HW^7;)! zC3X?w~&}?CQo{zUF`IrU9ld zE=c+?E#!wWu2Y-twT&m(ifd(suY!v^rSGo z+zjF}-}OnW$A!P~FmKRTu0y*%Dt*XyJ+@#N!PZdPO=b+u5k$ILcS;z9STOx_tifKB z_Do-3tU$|$$ujb+?uHU8P9HllQhy+^(-kauR@pn;y#EefJ#!2XfW&+hCmm1G3ejVF z2;#{NEVn7XoSE2VhT-J!EM;b~L7!YHH>b~$F&0$-6FoC&@L|`bEW8AfSr%as6={sR4sG)z8D5zodXqcz@ zsv5@ffz8f)U<8J+?_%0syd$)Ua;4Vu?lcC%-m^rnrND!x)sy_VH{*LEY^MEz26TBh z=tuYTVmOWTrYrqGf8oo!D_M=SU(PbI#@uTTKc=-B2KBX(GC;@a_9C+fEwTGu@0N_m zgGI6(gzFb?#1k?AzjomODHS6e=DiBV~_bxw+jFU_qKW* z=bh@FDb1vMaHlgx38f!218(t5Qt>bt`=BwWoZ!+?`T8s<%qHB@AVA!pjqJt za{6|~ChnBqv;0@=r*u>&I-aGPXe?UG;YNZ9MLbYvN9}}&oe@}PXCPXLQ^v8U%*lz4 zc34G+W`&q#`*(t#k9Qa9j9!%73*oso7ke+hprEOVq9wsGl*DJ^hV&CLHK$ zH)DUw7ycoX#FE&yqP^!hbw=EYNj2%~$XKoHzXNo10(XH!-cUlVgyWy2dx()#B6nvz z8*62nP0mGk5=Wzp60JFj?%&wyeEc0Z3)xWDy(r+cOBI^Ao7fxh2W)OXv)f> zXr0;)cig6ZAXEr5$ohYEu>?q&qV#qFYkJ7iRZM@hD~?gu@BnFRY~w!%#>9A!by(;=2^&1mR^481-b_f zZzSEAx&#B=<48TzJ8?UI3cAH(d@|6_xKJUF z)qq`G-Hb1*-Xor2lRK;xrqFndodnD8;M331?Ndm^usUH2wU~~Y3-x0lW$TMzdqm}p zFilzr&11x`)0bytUfi@#8s<5qupBU4u9X$z0#4~2;z?tjOxBx`4AYh>*BzW|D@(_H;fgwcj8F!WsX z1^5Np?zv|mz>~G>bLY7h8WtEAcx0Yo^srKl2ZxN&+5FU_#F&pW9rb zy&QHtx4J&7xxaIJcFtFnYbwesy6tzq?T%@Slp=j}E5^FKsnR`Dsw!RKDy!%$uTFHA zE~>6Bv~{j!sj8M*lW;9L(>u64RG2+86ICdx((@C|om4A!lXWx8l3WxlS``RpB+3x$ zva=M340*_k=IgRE6kzMJQxu{L$@p8OYSttrT-GSoZS+tTJW#gMl*BB?mQ|mZxVXU2 zCXOvxwx1~vqqHa1i|VuLfVndAy{be+*&>pAAi9(^Eodl`6huSXQPnLpN=^USz&%RM zF9`8a4ebwlu%0f<%@FVqEjo(tKZYtF$E6o3m#;Hs9atsP5Fghb&>q(x;2qZ;z{MJj zeNLHUVi8#aZoRdPP2-@Z7G5YZz@T6iFQw8S zfVq(3V6kv}%)?jy@u~-kRwO=d#jph(76$4GaL?`iQiH}(J2Sa6o^h6`ZO~wm8>L#S zRxuO@H=cOR>MdJWBStCp0DF)JXrPH~H78|Rb>Oy)uq;ZrPqY-=Rj8~{w!A-#wwHd? zYFCDoLaso)12ST;R}V9j@?=8FN)0QfMugIS)$LlGcu&BIVkte4ZnrmnK4_8udHAGIbH>u+%OBVyLkPH`P$AuK-m!`?(PxAt5WF_R`WQ_H9)=Lv_BxC z@EMzCPh=#}b-WxBvGdAgWi~D45DizG>u@bN(xOqNxIrrPpINFzQc+E|HM-LY54J@; zT@v!IVM3ja<{A0|JisifF23K86qS{@bVz;9`sMrE5#Qdz#2cw2JB2$+4fuJE#&+Uob zxaqM9PzN_A{W0O#O8$c;#+jf8c0#5$)SJ|aG&ZEh@sAr;5@A|}y))6GD$zpH?L#&! zd_iWA=+82ly!@>E-k8v+tE@nA&*~nUBU`p5nvkB)^X8f7Tx-do2 zr|>)x|8#+zZ=Q<0M{U>k%4s~-3H?yigXB>34Q70XQ+a;tXM*xi#rqkdJ4~@&=U%cH zk9|n{>EiwA;ydhMz19Tzc@p^P#rmllK0DkiE@(Zrr898*odwy*!|FMbRNY8@?u~nf z>^Y+Ahw`0%qMVE91|GOIQuxs$;pp;v@p8IS;c?wTdodIE%S8`zRH_b`6F6fN>JAm> zWnC(v2dLB>`XG`rs}O0>$gFh-!>kPlK{SmQ{XtdK9J><9o2$y3*fV!a)NS>aYIm<5 zG^jZgcbpwD-L7Uf2X7E=LAJTEeBF+QpkBwM9=n;|+@~4p9Uobn{q4PEb5)fa96p+* z96p|@1Gijeno~SLo*qDy~s+$PEid!ZnEFN>F5cVx~j^q^fI_rQ7GD@ zM16un9-ahXRjJ$|>wlYTaC^Get*%rKWdo<)eXJ{+enhR9u-DPRjV zHHce7ElEmSIF`Dwl+omQG>KcoqUzX76}Oc5<`$UdN@yGE#p8>;gsb9RV4i3w*SI{o z(wtXo^6+$l;DTto0ax$@?%1c!3#!U);c7KiZlgQ>`AzfE73iJysHN(P`{ju7S*wU& zI`%>!+5^3#WYmP+8yz6(FA8k~9E-?}))@-02iyjb`8_K=Kr1pz*Lb5J_@UK9i1f8mqA{JH51fCs{-bc1p$2MqLv zLh}N96#~owCVdNiGy$4@OrSHMGf3Rn+@d#HH{5-q{>RWdzj!rn7yyP~bfB668@-r) z>a{fNzirSne{+H3o8AxxLI*_Zt?11F;sN`8#)003JfHzofO5bPfFvL#Ko-G^@P)XK zEKn9v3nYiK6{K?#Ak#O|=iFD~uZpqn-439=k?1q^>j0|(e#W?8pmJk*k?QjX`1FAQ z1Ppm98I}h$`b_<2SkHJyN}sg~w(p}nX4uZUdP|=L`_6mOA-gfW!sV}vM7mNiA9ZXN zBXLun<6!5U4V|`7wAn;gXy%+Pox0{r_bCfvDxx{78O~alOZPbqH>=r(FTo8rZJ38I zNq=svN3Upx*|w-&*e@=9u71}jUg$42eb0W^EZy(#pgZtB{5OGsP*6S?pT9Q+fDuqW zI3K~A1V9O>EeN0W#r{UL_XnmSzVGttNDkA}?QyiXS7=>qkKV;T*UyOX&&b&7h%W2X zt@beQR|G({uLjZw_ag+r)@KXpgZ&W$aP7N>^uhly@5=%5Rk=Ct%|ZVFyFmx@h5Rt? z(*^QXzFFzjMgM@kVFUAp{;=-b0rFM7dG6go{{Xpx2m6NjFzn+4`c}G`>E%QJfWDyv z`-b|k?CSygR=K(E#fSLfd4Ui3hWJVV@CAMozSIDEAiua?@B_Xfzfu6cf!{O)bb--$MRmc^xk_zuxD^1T0aF1jel1YlNYo!u-B{Egk=-!nuvI`v0L$j)rPt=S7K&3`m~ zGQV1Lb7o};@8Aft9#pYD*oc~h_&T)t_%i9}q5u<-M6Y)a>2x*BH-}C3`VZ085nne? zv|n4YbGoc670ks3)Wv#)#d^9hpZ*wc1M~+PJtG+#Vc)?2si%X?P6Pmc2$R8ojQ_O% zS0V-lV?$d9BOzOBJ6juL8>j#90u(7}+hQvt@UXe;8SM{GbK3h$M__m3u!U=q7g+-j ziEGoRHWHU@pvaqB>t@1EUs-g~9)b;0g|Q*T9+5R7IhU(Y+H&6%ATYVMxFo8{BQ`U; zK3z?698XVf^?bYE!Sr%$qK$Iu5M3*|8c%(TsN9=a()AEn#;EE#K5304H|y4EBwxER zK=>b2yU$FrNq5BcR67`iL0|+jC9|vjF=$WrBZrJyHdbVn(uF!0ryK8}rmr_xOaAuf zXVy%wfuJ^)q|4^j4Hpv98bFXi2sSdm9YpjU<_dR6ClsZz)EBlvi5fj0u~|l z9KUPvz>pbQr=UwzYUrKi^ex$NKnNE=;kG8tZodIogDM_Mmr+|devjq^gv((f9O0<5@J zK!K7m#65BZTKs!Ven@jxPcLrWw-MbkX6sIR!*=K&SzBtMu+{`6o%(DWMP-THyVbm*tdmkFWQOLxBei~^D511^M1yr zg#QG{w6`gO3EwG)77mqL&hHozm5K?KsRk_)c|Ir#1j93n1m;LCUQsK$RPhfIfQBz7ZH%V9krLs=4hV?c&e&@wKuipKux` zA2J5hdw9dhQ5@-zQscS3*Yt`D1h!MgN+#za>3A~D%7&-%sdZX;yvJHu+Em1;`Uj4U zMTX2q#h9gvqKGW=uPy6(MQ&rj4!JM*Xo*-)dMWX-c}~T6T_`s(I#<4*`;Kn z7bfc6yZ{CgR8SWp*pS{W!Uco8h*?+0MySn68Jr5NcX=SHP|g(~Ag_dr-SUKtYZUWM z61UUlgwECOj3Vl?Bz0?hgo0xv2h2sslgS}>-vOKkAquSCkqN=`qMuW-ouE< z;vO0d10GnAzi)*=YMYdjRMP%Vm%VQyEseIC8^OC25_SF$ELZB_6;O0p_Am$VvF}TMHl!|_O@+CE|5H}9KY}RYf&WotN0tJSY1O|mLVibZPCl>?``NfEVhAf7lHP5sljzzYWSMnPoBe!)g5=?nK zVLaUP~iPSHlXG86#snbTGb6xK| zzv#JaX^E0QDwDSJYI6};ee?2a!CDbHVrj-uDT*=hP$Noe1}3gd>gj+5Vbz@D%A_(6 zN1!$EVF+jCP;{b;2>&2hxq=3%`6&_TRkVu9gTRmexSXi&tueK_r9QA6%92Ke>x>a% zUeRoW1sn~;;COGd2h-`5p3-V>QJfQ!rVkezvuRRKIV##Mf9PjpY?VXhZ!GYuq&U2? zP@2ujv!i!T4Ct-h=u=~%oMCl+;BgqB9nJiVR)B*5A-p%$1%*~X8-;L&IvK1GLr6_F ztPYZr@1LZgxR?-Er#!%G0B?m@8V(8?Nu?INq+j{BAOK2f{Ff!FQd?J8fV&Ny1ozXw zY(z7-QBJw;14`mUA~_zWT7GsilCw!w#JCBGwFS#YmS3-Re{kA_x3AWV^?1vTfip@& z`^Tw;3+i- z9P|Ok>0RlWK@T&zFb{O9h6pil{rH3Pvc_ms?8K%M_ZcL#r`o6;4K7#}xO0f6y11X> zH-$3CH{|RMdoSi@EMhQYcd=$B;s4p2VnZjB(7JxebK{X>P?oxk$ITQRpK9pUzgm5# zup+%6yD2O`QCuAgrnS32O>n!1hA_&gG)=PjY4|4zT)D)oYtZ$Sd8=o65CFzoAtG=7Lu3kY|OGiV=4u zt8g;!UHt{zgTnpvWjaruX${_tBBKJ>^%S!KcP=4u_Bu~YRnNGv-8Uo%6hw- zN?~3wmw8X(F-mKuh%K4KWxcbm;T4TX?L2TCm%E{U3YCwL?8I99(?SL9aj0_2tayiZ zH4l5q@4}v^zHM38J|R_ps! zCWrPyc>+CTL50IQ&P$t}hR(c18_)#Z)jVwJURzJIZ_AK;W9<~&#U>ZUVWpYBB+1uT zZ)OEUm0#z)uf`NoY*smR%1j3-oll6RiR8d*h|h7Q1Ne480xKmK2)K!dN$Y1c^MZrb z!+k!A%-lKv2e?859*hY4Ppd?!c*eHDpCYohMVk6+PpwDbJn{i^ zyT~egM~cYp{=zaR?ank-oMg43eO$IO*c<0Dms7u;vT12+b~~d^UuZq%j%hl_6ARyQ?jsfK{Nt&F1qm}V&zj!5WO`awt`VJtyR1g^ zA6iDvim3Q>Nv+0WKcYB%#YXjT=hX6Y|al>Il2_@tkHwQ^{s?8h@Owe42 z&}^!#C{(U|wZ7_aauf-+0xh=#VH9Wc!hzEEp5RC}(jU02y&g@TcaR)DGiV@kwQQ|3{f zf8-8~UV@QKR9Cnztf;gAgB@3n*{m@}rT*x&%{*X`Xu5_vMIKco9#V8HfwDNR78%}s z-(I$ANHR^2PtoqKMN3ef$W+nM&Y2t!V;N^ePSRA3(bn!Q7sE(gXR$P`iw`Z8$+@ZB zCDsrdIirvuV-i+$JZOCcXXZ}BwS0uR986T2_I@^&2xhNI!lcTh<1SyRrBeScK`@^z zw!tEu5u-&R+8nZu8zMfpo3eOXo`;!UMbYk}>b?D~3e!N+q`-drVi^*2jNg{SGzeTG zzUU6<&_2uX@uH~8J%63jgt6Z-??`mqF@H3V!sh_emTnf!JNBK|7rS!nM&C49U7K%Q zK>eCY=(@ymUt6yhZw=34-gA@9Pa$UshU}!A8FpkiCtiw3)qrOMVXCfSxi#vVlQoJx!EFugCW} zD!u{g3ezlc9W+hRE0Xu0vLoHN_4MEW-84sF!X?T)d6s>R_31Kjxh_+1cn9YMm!&dw z>X9i5zo1gG!{c9;1pdxTdcnMf?*bD@>5I5Bg&TVHe z^kC!~#ARV-q{|l-=9g;4RTf&R7e@j>k zSaP^7@{9A{1h6i_G{gsZ)-P@Lulf6Pv>2zg{@XLNPFAebbbnu)Aa~@4u5eAIQ=y1% z;V2Ivt8u=)=1$&T+}Dp^9e0O74tEw_ex04^7`fzhWWQJ6c{9HeKXo8XKP9@nrM$fa zKVPG#zg;;O_)apv3cJ38LB`2LENu+%Jx=tQoTmE2-m@WyuDH=eHa)qcTHpU-*nf*h zNYIN^v!st$W+wRZzhY00GNa+=aq_3}z0%fmASZiEK=Tw(-MN~HW69vE8?<7ZkbQyu z=NYyKk@EWc!&u1%_UjkL|H~Ox(l@X&CKk4Fa&Z4&uAr>=8Jl%}gy9~rnpb48T5$+a zGeNQWAI8)q56N`NMTx(qp$hi8@u=)9%|gLds>Ky!`m(XBX-1VkD>(XiqKY zX`en!`}ll4-oI~R1WC5-SHZ+UsU(H4C`fcWh3j*ck*62 zwU2jRLfNif1^e&A&Zw-lon<~?PJi=#7v>1zVXI@1AN&(w4Ft8KB*Ec8rd+(WIp7gu zL=n<>bZ#} zJ%(&YdISXXq?*d&Tcgz*k==r4XVRIQ@^l_GA-vF|fyWn1YoaBFs!lYE{=`u-Hx~=! zQBx@9D)Y;|GB8iz40-+mZ`DfKvIMoDU-C#*t*Yt)9fj}w!@IqPNIV?vZc`)G0t+WAz8mQ8`>mu);b~nYIjyLZ|{)L92q&g1$*1%3N9{C&9b0DWX0ss%{}_ zm@!!|4s%DuKZRwvf}CQw-hi5FxSm;1fy&s*Y~R#z9}~0W#9VZkM2IUxGP6Q$pGB>+ zI*ZPU!sWthWcq(znrXLZB^XlE^mYvR>r~LrxY} zH8K1!;r&?fgxT|fxJ!U=`1F63zwm(o8a?@`P*ZY`O2lz3(7*nV2&96N7xWy0U%%?b zfBho*|JsWGYZF#!x_c=JH}jUfJ;hIxn8#}gCctsUJ0bn^qX`jajr$YH|4V(*DV{W( z6qoe0cB&OF3Ogo>ixvY7mX;|W1Q$hkE_9=niZiAo=KW=H?zW3_Zzm2IVkMJa?T z%im2uh;GMz%l-oF{<-zJ`$K*<_RPVl0om~3^p%djU_hdD(8F1Xo#e#) z(VJQ!rv7Z^)qRO8T&mw}OHo-<8z&(bx=26ENTxAduDXZeOJ?yAN!(HLTQNCsGEw1J z@NqCU5rn!U=W`4BvKD?-5yv)!BYRgF3zm@Gy^wby*lsH-h01xe=uu-k#X1tSs9^~k z3kx}8dl$UE9+bku@(7{iNn7~qbeV-kMAKmUK*h0$fwMGAL=;_F#;QbQl`gJ)jj<+U zARt{0zbaN*1ViHnxt>NV06zq-gdPeD1730k^^43)x3xEMl3g zv<;K8)NYE1mZ(fE7NUrf4rHK@fyre>qKXy93V#f^>vzBvw98M?i6%o_5$EJgtm7X3 zwUL2Ug(7HBgqfhnIK#e1OmN7Z1jZCSTw@bm*IUfW7CJ@|f?k=bqNC$xbv~;Pp4or@ zle4kl;W%(EwULD!zC3*9lxkcp+PvM8#;%29T~-qOF1S~L0 zL$1rvRolUJLJxm*|FVF{9j`GodCN)7%!N(>1F`bYIenOiZC(x4TnB@ILnMF6C#x{Fx7KOB}!|W$?JIRhT zfgL(8$C{n%d(lk#Cyz)_K%nM_N;wI^#6npD#W6j*cYJkW#GDQ10bZ9@$P$gd|lA=IO zRb?`afeNR}JeR>zYOPurVtsg04Ih?mS#`#iHn!TFlPw?58VdGFAy47uTpy(7Rx;>I zoU2}bQd&H&B{R1?4kaIVkty$P&2zD{+N;9j18LzRnvypR@K?gSNUH=gMKS5LH zg|o+n_Mx#|o?&EE`q2;bx#-$(^iS9T#LGq`m($k@m8QR9#cR=!R4vaQ=hpBxKBW*V zr1e^ay6)!%<2&Jb)SePzlNa;mZ%on^)zECNAtk4SLfWlG?`UzIgwZLqvCDs#RUzxO8-!QiX;gq9Z15H51X`W1@Wgm>Xc2)_g}P4BLkAKKdh{Ws@Ho6U;H*zAvc% zkaP1VifGqlwOFV+jbPpB#5Uv$H{5RET@uj-1r^t&?{ab-*J!SBto>A)#i*(yO&9jc zNz3lxL_VJGJuaf~*{u(@r$kPYba;BRf_O^tI+&;O^c~?X2>Fgd9%xzdppntKf6?q) z8j^;jNWUJeIc0g+d@Mms?K9rdMQ~+HhxlQuq`fJvlgI>CX-3@QCz?M1U0f}QzVMIo z`bk6xqjB>I=wHqUhR27}w6(z3X<QtyfR8V930jt2HMP(dj2M*u4XeN^ z211d$8XJp35#lvp^d;LcV)s%KpK0{#h7;agg#NfvO$dAWn#l(IG-@xY80Cp#m4E4% zN-rw}uNe!HvKLF_xNqqpZ)`DOiw*<6@pk!f&W-b7I`J=9-MitwWK3Zq%Q9@<65UF- zjM1lMcYkY|yG&EfcxB*g;8a&eT7C4fmJ?F4WyF=Bro$-ht(voqj>2=-8qyRY>Wz7j zcUpIMj3giDR^#o2sDg(IaL{}U{lL_>`Vjhd3{R~BVt{dtU`h#$oM?waPDE1Bx1`uQ z?uVQt1a~b2w{4{MDI@Smu#paBRv2)d={)M-Aty{ctR8G8AM#_z)|&q|uOL8*ZlwzM zS2N;sp3UMg;E_lobr%cGmD=sRR_sLe2n547grv;QHrwq%E+>)VFU{PmS z43iYEj5y}1^ugJ%B83E^aeyjkG80jQ9jiN-^OP=jkp;~04QGR0^;q55l2^mEQ$uXq zynWu9D2tSbcjV?^xgATi_GAbfG=-JwLpAfscEd;Nt0io9--edR*dO8HE2yEZ*8WJU zTcuFht*8xg}p~LCPVIqq$uX)M7y>oD=*mA>QJSrS+p{bb`0M!Q__05 z%N#+x3pV6bdT+Y;mwsh3Fo|IInf@cMY_45!IsK-a?eZg*#KZ#`P9HQY zzim2&M=B_?N-Q= zVj>t>#O!H(e~uWuG6ler9NC2&7&i_M#IrvV+nOQGLkdHfwT-@EzQSKUo1aZB9O{nU z>(DXMdwRh>!GCyT9)O9_YtprD>WBo*=_H3}t-3;Lm^6KhA=2lG6Pv&L&$}sRsC~27 z$Z5K#w0a8mjomm}wiQXaiY8TEp=w7jmsZ;eMQ8Mj1 zNIvhB9+zgMigR|4C#TRM7Cc&B4Y~R}KH|sZgH4EW?I#u5%6ygK$%8If!0r=k%HyAN zD7(~mt9?@(MqLua~O{q{Z6b%I*(Z^_mF{lfhM<3q3&L{JLmLIi(A!R1P#&gAYB4lDb8O7xNt zTUbd%7Qw+Y8J`cRSFI$!uD%_VS9b6XisDiKpkeB-s|`Oi zKKuo8u$4Hf;HoFVV-w%~x=j}g|Cg^pBSEyi+~V{zO}~xy4VrJl&M&PCUGz1gig#14 zhajI8`K<^-?$GNhDP#OXiU=7b?dVUu&-hJYeH@11t+*UTy1X#B{Faho7Vr~+%8^LA zB{H|! z1d=w!-KcmJ>73?Df&!mm`{O@!_BPX~H`=6gaj9=Z8ra>R1DA$~=eFIs^8?gAo*ap}#~ zo8!em8uX^8UPa&4x4RBR6tKpRg2D6aH^xQS{5|x{K*5mp1y{HTTbsSQ%}@OukM@d6 zh?&ko_^h^?-t9=Eb`BrYrUKlHOh4`@)4?~J-c`X zr1=B$Ty6-H8crw$WHOBDZz;0k0MESE!C4qn92sq_!jiaY&IE5Po_7M%v^rROj#M5>907+Ep&azZ`=v9-*$)8YJ&5TBFV|F^!-uEE zB*bIfeq>}cv#Bx8(Ovziz<{A!*~oRoK!5>JRu9$5hB}2NuAK;%S0V;VC@QX<3s(EuI} z%(EfT#gM{kD4Com_nXEZ5!!H!ki_*Ma*NQ8ys`kd#|-H?W*Q)mvc?AFvpJ@V z!zV*$bWUH#3v6fXPXF(I5c~+I7qu4vavXGyIDAK3fB$jgyQDbQX`@G;MHVz!d?6!$ zNm59f_iVsQ+yUdN=B)$;AKkllKUY~%XM#os#S6qJnoKLwu);qG06g&}O#COr-XWz0 zN7;pY81XlkUEkWvudy$z2nc12P|MS*P!roA>EhT(iybypM&T54W`>5F;hS3mb8_6!9xF>LVa&0!L^opbNK>}E zVXul)vd8~1-EONRJESr6lNb)lU^O=k+F{YgAcim z^ZO$Ym$l;OBfM zUXfOPhIAAR5$UnVADE3@An_u^>cHP+hlE0!(7#I$O+dsju$xu~<(gN+K&M{iF*P~G z_Xy0b_{~pp$CVT5jqF_F=R+>*22bMuf=|$#9{r-);TFs|<9(gw5l?_tl<|SVlVy0d zyBjZ}Amam)EgzdOvxIw_hC8|p6w2Iyb3}Sy&~d9vh=sumNazbE3q&swiw~SKM;o&W z2bF8afVQ*nrZ@x_CAF>PCW)ofOpshMdipKVBpQEA*Esd8cCQ<_vh)F^fZBjezPGf0 zQ!IXr8=61DyJG(0g$~&oUw+MGO-`UU2ix1R7|NJJ%C5z4NNl6W=K~z2x4g{m)w(!> zb6to^d2R2+m^G9fSW#ME6AV)c!k2Bh!JpkUt6K$YrG$-P8;`GPG|%SR|G-h|)j!vN z7N4=PX6=ZCrcYJX74oBQVECQuL4Y0AwF1cu>aMYJZ|@m)uGazT* zD@JNQ)F&$#ytD;}jpN=oB*I@cliE@SM3{(x@Ot@11Nr0bBL=Y{?A}l|LB8>9pian; zy(u{<^#{;S)Nwm(sS+zr?2TODmI0{oa?^d8aV|C?T;mn;<^j%4*q&joU5QS~aZ^AWla8`!m5NaDKdvcrHlVjHHH$3Q0X1CxIjz_tJS5x9=zQib$6G(!r` zX()7M_201L?`lq`?j1q^x+$xEEFIUQI^ufrC7%yOq<-|RDM)4hpyBp>IHB;Xg#BWX z!Eq5_fz;bZKrcc3BwN9a3{Qb;!l8hXs(+Z&9w7qMn^=9Up&o~-1)uhlvHJ*DSjFujL-s~Ek*yVfos$Ob zrEp|(X~Us<#+&=uvE*4>*kck%kKa43AF|gK$?dMjo{K6*PVF<>My%xc zrZSpPLuNbG9oz1i-zE!YfZvp6P0evq?sJng339-z5(B3TXVf3c@@LA~vl~L^PJyh{ zmi?pGR#8Th^VzGz_ut??mWYy*uR;ytFBT3CXZTsa!aG0I=jR>e0%iupUx1|u_}PBz z1_-|}E+W-N?o}kV#P$k<-c%2+>}q^4HSS{1#`qHCzLGitG(pLCND*Ft5@B5_Y61_z90$g7py<&6v`5;lg!g7f4x7u!OQ$up}@IR0oZ}{e7b@lOlq62TR zaYB4Y;$CRL%WP4;gfwQ2>cc}v)20XR$28#j#DFWT_IBi>IuYoA{e9}&BX3t2|IRem zKU!^uWf(npL1n9u^2!U7%g!Ftp7ly51SIfl+MP*Z;dNvF>pN%c)RNZ_W1X2kgngTj zh>+yG88_0vj8~b(F`m1-n+iM_pJ0P`AfdC#Lo;3YQGFx6IPW{+}zyGXK1i)FFa!i> zYpltZ)bW(K__Xnq3&^#%Dg#R0`jRoUhLJk<#PL0zGHRbgS+&kTm6i(Wx#Vqu)tzvg z2~wrYBBR!b4#)&!oZnW$i0PFO?txeO@AkG(8dIzqE-Pzd;vo$E5+8y2kBkh`*dghi zy*`_K9H}$SWv@+SenHmjN53o(Aj|^0Hy!`fo~~z%{%Ydc{IpJ6_IXe?_p|55_|v(# zbq1Vq*M?EAxhbcCI`|4eLg&Y~C;0iTq}R}bDKa2Z-?AM&qmARjFugOm%pI<;#-czM zc;}JSh!3=KD{CYMcc$8vYU-gU_@h#lM@`|Y_$P4T$4kk}KK1$s0+N@!$Q zlZ&4Eis?aw|7m*53AVb;l>X#E`^}O3=1Bc`ET*F-niM2DWw#RwI@PIrv_SU$kiYl& zVxVfCLtS*az%flW$P@H#Lly781$c5{dMmMiFY=^*S*8UG)g zT?JHDS=S~+x;v%2ySuwfK#7;`1{LY<4new+4hfa+l9G~ckd_qx%Z&4l%&0T--vzwy zVy*K$d+)RNK6%gCX%WR+oSwvziiz+(XXEa`&kTDTjrQ^0TX*=bP`5>sL&g`RAN|HU zpewYmF}FLVI3@H&dPGS1t70Q;@veifjS2Wd)E&Tn@u`F5f-U&&Nv`kjCO=N7=+H2R+}A2h`(V(pGQC&O20amV~JtVYokLwYmqvD>^jTm}-IcDr7;Z z*ibd|?{}SLW9T0$f+mC&o=Ur166bGQex z?mdeAV$b67Aqm&{I5F>G9`t0VUyph4%II>HBJh66<@mekf;zJu9Uu z9SZQX?$#f=jJr8A1o%^m2S4Y$9d_FH_h!GA_vJ>LZC0YDihQm=!-#yp6g!YD@)=Qb~aL^86OJrh8V(%a8kH1x- zomD_NIa8f}`l_+3O|m|Yl=_KiRuN1{2t+=me7UN=Wwk4Ov>ACM+{~`g=8iT5RAgT4 zMF6G9Y=S}?8r&M^YCvQ_5*$Obdf@@u1C+FZGm3n-5~sJgMa=O`P=SvAPu?lNl-+q7 z{T!l@x=f=`aLWJnb2_K{&z^;a@<^&8T+qUf^BG02o7V4mw!!t8U@pkA4rQb*!3 z*}=bV;uq-6G}`9VJrTX`W=ZMUP6_D`4(b2;C>iD24}LA`i#n*1C#t;l^U8C#GI~V? zb*z=rKGGh2XoLs>hs;uXd8L8a1PPh5wq=o&ZN!MVl7dhOk3)rdIk=P~!g}v12Raj; zI+0f^oXMLXz^e)Pddpl}A-V}yb(^wU9SX|AKUm9{Rwo>BJ*<3It>I+T^);q4{VOuP zillW#U-0QTCuXfgueo_fI5ItX(wrzUGH95xJzXwCnsFvxXmqAIX>eorq_ zDJyD)jWuPMhQ|xsnD9{>dAF8*>WUTqy7%d75%AdSc_s2{R0A3KyS4!CoGRDT3Gkz;0=~q z6^`66m~`Nt$Vh6$Gej0YJw7RwCVOfB4s0{J{vjSo_LaX@?pRZbeZUCC8UwS&Nlbis z!M1I^$6&8er7CTP%SB!|S*6KZsy@ zCz`p_cB@J|9-i66vxt6jm5!SV+CLg}zaKX|3oW&aIc<|@Ws~%(cAkr({7EGPNhD`j zjT(}m4JXcwg>vSg&r0oUX3aEc^x6w%CBF2UDlpnjkJp;uW>#TYnhzm1%=?M+%PNQ! zVFF7YzFoY8_9;Fr`#LK8;(T{YFDZ&2d zq~+)f{Y?)T?h}<^ves}!=amJF&hX+C*bw*L^kE5NX_qo8H++O#gPS@YCXm-dCM7iZwOIQ- zg)6-sFkdHw zpY=-5Qo)7SC|<-LGU3DOV#ToL2`uH1Wxg zW9AFS$PLVFZA+b{VG>2XzEQYiqJFk|-ypKq0aLq-ZF{eTe6$+E4n_|Twj!FbOtx(? zykv;O_|ZFxXePyI>@(lzErs%%2C3bdCM_iqG&A-ulI;b@VTz+@f3q)V{&P;0ydRg$&!Fj`R0%YRd7nEEz7g*#yGD9N!~Hi zbc>iF^7n!gmro=-0~(up>*9u{Xw{;>e!v2&W;mM0y0DhWc&KLbVlm*A8hlx<2b#w; zHmyuc4AZXkpe{}KZ$CkrM@0!AHR&eC_#;8D=QUYtFv6ah!9RaJY4q*KlEqdbfm$qB z?E{ASi!@2)b9A;8Uhc2hceff%?^X=WVt|3=(Sd;x{BVDVx`#dJ+wLMA*r)1iwO^l~ z4Vjp>fhGAE%8@d9_nN?jp+JeUm)xroMuRXMm5-HS4Mr((`#(t7b#t@ zHNvm=R;{1W+EJY?cryu=w0%51Gt=1oMaN^~=~@4v0&B<((c6VVfsLjOzJ=*G)d);a zPtW7P5<^{mQVzv8mfd$emg>d>mL@y1OwN|O!aUm;VZc|KM}|h0&8a6}Hz=w$WWu|j zKLLM^X3svMkpLe|n|?0xPD58qOJ7B`pPI!!zKo&BOq;Bs=5?j7q0y4H_Cu|Oo?tQI z^5TTdxJkN_9a-{N5&YsE%VEb1iDFB zI5Y3Cln=5;ea^L5LR;WP*G@JTZlF_t#b4_zp6zu zdP`wjqkQbMmUrW^u|0%Lna#F=o!^f9P2%-hFRRvE2{u_a^i z(PBPH(^j$3pU!Vf2;i|+qDDZB1=d&er7!uzuQCMTLXC9=?{s3ZKdHd&pm+d3Ei)@K zYFL%;o;x4l#Lt~1gOyC4g$kX}wK8f?y)K#ty(jNdEHlC4tFk3QBa5a_B%Vw@OwRM@ zaic=+D`nF0M5B}@fnXN>S29yYQ3=)#KTc8;x@SQ*B^SOU zpAqm?0kIR2N@72;haJ18klHWVqffYjbCn3K#oS98mmBq|i&;j76<0Br^iW%Z6qRbJ ze5iwi8Y5Z0)eJcaYO4(-&+J)=J>}5xY&Hxnp7q2nzHKHuYo7c|xHAiR#rq*%)K9^x z>NE#^a*UT()PNINH} z2!gV$=%e^R{BuX@(P=&tbJo!p4zFWh1ey8pB)#ydC47(~KuNtm@#aK;x!|s5VYD%|mQAmvskA$v{1>Ei=YT7g( zYeC!9+-fPuR=Sw^sZlRuLw-xv**;u(6{I80mk}~ZPUvq1bUe(!NbD>HW z6*eBejdz^^rMs@!K~ziP=hkqc*=*P@HekE05Kl|MFx}9XhmUkulDOry$)vYr#t6^W zwKJH5^}w8-`0M1=)LRe4^19b*nS{y=gi3?OuP(`~Euus3XFsYecC+BSM#n8|9*h_gn`oX|VPji)xu^CdCnrcn8xb1E2ecMPetsw zC$S9D8CiD&^@alVNGiz7rYNHWtDjeq$H3^XVw&~P2$!;#sOdB}Q4y(Cd30J1;p0oh zXqohWQXK(K47PPj&SdE;IjZBIMhL&p!zD{yl{Sm~a7iw)V`gxmYa!M^g(NPium-N= zbvJFP4EjrUXM~jCxp(Q(N)MX_tT`WOKolU+HPa;S?ro8fwC%YFEQw3kO>26gbEIS^ zigA#=;x>uy6&qbGTz%}yTXI|%o3X)C+aWb{7#fJC!9UT-vSiIMmd(f}m9IyLmq-ER zlP0?OUD`Oarm&f8OUDd)GA0Z;jzjf9A#3T-qKO#ohPwKugktsJBO*BzJ9vpS(GZvw zONaFy3CGOKMT=nPE>V+d=C7nE`wBGybY!E<3Nv^SOTt*|#E{ny2as-1p={d(IQioa zWH{&K&Q0(I0}hHf=ZK%CBA%fN&Ib+?&)Kz`p$YZ}4pTmjM0_cyorpM0$=@CLQW)dd z`aHz{rGFg5Q^CjS z2p6bq$Wgr%`>^KEvn9Y~k5d3$Mbz0Re4tW_w8|gK0seMH<;6wj_2{-`s2pLqZ)P4@I2Jarr`tsp6OZz^-X;$}5Vsp>CSB}RWYL$w-GE)E{W&Z_rj+yxR z2jh@5YG3c1+%=_MO{Hk)4DyEp5)Oy#7gxAP`@=n=!?9dmks9NbSZX`EJ{!sbkBlHQ zq{s~3aW)4#9is6b(7gzHMCPMqjrAb{e^g#KNV0S{CqWZe!{t3ES4v&h8y#spE}6@D z)Y#OzXR}??5&KJZs4qO$uCO-JC^lvj780kq7xK7gTRxA%3|-N9ol~i9KOMi}J>ruB zZYG&&k?@hC27Az&T8ee~WIdR;C*I_xO6D_0ogw!6qG+esko`E44UxB)>i7vL$C08| zNSl5Q3m;s;fI%s8!4e1A9y1Y+ph;->FcS^uSIM)_a%sEA2gaBVLX{uNRd*3h?c`0wWGpI;@C$f0^ntnm6A-(+Saty@agCdM|6q-xYIWXaZ{vkbB0ME zyv#VE#KgWHwo0_)rHg%pt`$m!X(NGSmZ0yluDnMT4C=w|F9I3(Oe{OcE9WTFOg=8- zM&Iew`9LmPArYUg5uX*d{iK{5KPj}fL9(=6!ARf@S@GdB6*2}5B~9Llj1ACsW4v{z z^8LE#F$3b@v5$Lwd3gG<*dPSn1O3JZM%|*^k^uwY3?tDmTC{tFt^IwE>QROyY{4&f zYPYYcdd)d5lz3;toIZIoCC9z2-i7g+9VvLQFLYyJe?Hmwl%BJlrtWd9c^5(@CeMkW zgmsb;ba0Uf?xh>;3ZpXDu*}4UOS25AA}Ntw%;Qv-;XymQ9xz_h`C%3C)1gi8ZE1Yv z?ovL-{Jxzy$avz958`Il0?-Bg^}(VxD_PP?OZx`8DAPoqN(bUH3}mqPb`7o+%sj_V z?^@^XSHb8}74b-g?G46YC9U4Hkz74A#)ttbfJ0}Rl_=~oO6cX9Igd$tQ}n7|Lu!T9 z66O;YHN7Bf2Z5swL~UBz4%td%iDgrosSxMSs+e+5%{u2)p~lrO-DG7I7};J0XUsA$Ic4{SVXw_e9)(0VfFm=Ow0ji@OMr=PHoR730K zdmnF2%PPIdusNCQ(TMFQ!xnoLp$Gdq*l}+qyL(NUl3$6KF0DFUoE6d}$y%zZmbv%x z5_O_Sh#!<u~W?1EyJR6wX0XhUqJ89w!HU`!57{lp5GY1J9`BA<}2>OGoHmO%f&)rr^m|X zer*og4aKjs%X;6yj~x}j4`(JfzgEhzy4JbLWWFB=N0{_lgr!~E8UrD8T2ssrwa>O<2!93oV*Bi}eZ3a7TE1wRnZ*Nv(T zjY^_t8>VK)s?NX}^$ISx=5IE}!!K{CM4hgwn~FVp62F;j3f(l-!!P{IA8l%M2!c;n z+vH;O2^je25krS;6#;5R+&pZa9&Lqwi)OacBYDO1RCuDn2!cVs06drM)G5jvBs%C% zwelm`+f7P@j}%-CUeK<*WA&H!pP_H4olY(tti*i!(gH=6ASJ)uI{z?&H6rM1j!60? z!QQ&60jsm+n;5xE8%m+ose4w~0y>)`@abL!3l1nZ5?&is8n{lZ+7*ISd96`2=GZX` zk}w_+Y~zX~Bpb%Xbzp2Y0WjtTMzAgLwfrR~_o78k8+4EmDNOlfmdn)-IU&OeRo@oL zB1`4TydBOiFjZ4&5mC=~d~GtqcMyGa^-T7)YM!3Lh&tnQf)?MPPFA(@%owV&cXT3o z>05JgGLq)~GEJDd`XpH91!ONj%GD-ti#-hBn6Z>=hax|;SlvWO2?*k?Qk{r-T`9X= z90N?dhgSf!J`E03f z&S4=?GgKU(mly8q(>~H6W-pr#ehd~r?R>VwtsigTY! zhowqkM5xx{*~NaYy2DZbvZ5`a8yRJ!m?wUY!6!HxonNHyui@Ri0>u+CMA4h9K?`+j|?p& zTCQHv5;MoaU>z7o(PxL~9=og34hP-TK$Mu(@3*(yxB?DYLm=L54zJ_v0qyV%@08)mk`!SSk)~L3sI#wm7=Uo z%3Q^dDAZA!re9R0CigjH)NbRpc|6MV>T&4tFqf}4Osp4kPV)+P!QU^G0zEy`vw(&dmdU4~0l_Mk;E5*RGZ zKfOP&E^1iL^TNYLm!@?HdL{w1Qj(9_OmZQJGIe+PAk>+$PxxW|Tsd zD_;geOFghXKQnesRB3qdMx|qGwW@jAhbNxP#oYxO&jq_~lW2E@Dof*Kxa%|8#uJO+ z?Xl6EVNuzaVPU7%CtJq{v0i8f6G~kVFP}D-Kp#922u41IxK?@Ot8}skaS69Hsf2Ct zEH62$oaoK8(WWUnIcH&7i^@3Nz74sZ>RK0r&-K-!GeO_;`!jp?+d)S!12x$=rJ$rr znd@E_@tk2e<i$G%;uYK>>-5bqsbs(pt984MH_+r%}nZg=DaerX_EtmjMkIWmGLlD@N~lE+W8M zXxak9Y=fYK-dGnaE$CQMPAg`B?ZK?-YinU(L;kpNazVFB=2hECT~<+Ml9Ed=&#N(+s4 zZ$4#iT^ZJ}ZXXP~aZ}9n7LIW(q>zll;|v}Q4%^GH_Z9YYEvzMODoW13xv*`|{YV1+ zgp`XF!Kr=CF~Ajvv3<@dK`%=oaQ2`lK>)eW)6k`8wYVtWMlq9FTRg`FRhI@kuo6*! zv+JS(fhF5Ej%VcJ`Q1rTTbpN;xxl-ZvT$Hv#6O)BRW@`s|9xUKK*P#OO#?VZD=IKh zSS*YGaXWjRRK*iwf-N{WcyO)H0W-P}A?C{<2h)Ribps|S!M0dXHU;ga!C=U$ zOIe+CbX8^4!l+!te9GRY;9U3(jgHpX(o&lTQ>~byW52msSJo(pXeuwB@-r%RX!k)w z4qasMN8I7phDy@5QC?&=c2HIR=<0;Djfo-YQmvpQIhZVtNMk?x-gtXO{2;);6;~;8 z6CEzp5gME<6?ZI-en7x7x64zWEF+xu!3QHNIBH2;Y3(MpN#ivd5lQBM3ujMApV8Xk0|@XcNAdVGNoORbdFSZ{)~ zV>kt0QAvHUdem?9L63O!>L4>X!o6Z5bPt;(D^H9FizJF#TWB9cy1+#&`T;vaR+b1C z`(Zrq2+a$qN(W8Q=9auKzfA*;;6j8+)o6YEhopR+W(y_73h?$3N=$2PyDyWxe7;fv zLul3*8`3l5v8LsTJ<6XW6USkMBy0#62vaIa=3%VFVD+iVIZ7!!Imj44^W-#9C9njZ zemV3X8nsx_28XNgc}@^79m*33n!{%N(DeGzo5%Z0UY)*QWGxfpLUxQ;lFnUvPc1!j z8$w5<5ZXyy?psZ4_iL9YK9by`z~yJum%xR-z&BdHf^ioj$^lhl2C~M7i3}u2=kz2< zo2;bL4&+Ufoq0b@Hx0Ci2NqM4vV=4IDT=#~`m$(6(|G(fH6O1`rAgT*cHSrS3$wpZ zF{In?_KKIOPFfWs>q8z&dKfCY94VF&e%-_1J`gF^!EU2x1lM5pHv5Y{iAwVZ-)-q> z1k0H(pXpssr_*Tr1lxFOmvi-djrI+sLfU7a->18FC0dy03Q%JQUcewT<5u*eMHqUq z1cS&YBrYU$HAG79O7~!)JM^;V0yI0FC^M$a$I)hk4DK@u2 zdIa|TfZcTocelOTywwTgy-eM;$H@xRraP)dv%j%>N=Es?nMQM%T5_9J1F%N`)^5?N zIbi>Q)2oB;Jfh(FqQG^;8OSPC`jUk}I2zG`wclcQL$T*GZvcKQ=}j1}L{r}ZAJkk| zas3kBj79ZWpHCcmC;f`}Dy-`sxN8}e>U#Jf@tm!TwR%}k_Sp+{u*TA;r!Z+31+rPy zL~rYb!rI9zhxW@VH50tbEz4-HAy%^J?>C<&2B=%*dT!D-adKSw2!+LX7^R(Ocvm-n z=pLV=(hgF(u-j&fJ?AOEfGW4o2+&*f{(=@Hqe1XUrE-jU>j?r|EOCMstz@`(lSw6& zBdzQE9M$*BYim-d36PYM2w~x{U9itJzTjq9(#+9Vr#@*LN;a;j^CFIA8!$Pr{~{B8ZKC9&TLUjilQ$@Tm8PwRgq|kTme9S&@{TJRkOYhOG}Kivq9I<;szO1{aocaaOAzvA3)sSqm?ZN^ zm;%=*V}G0R$F;M&wO(xim8_gX1T@ z>ky*E_F^r0lCs5u4`kT1u-VaJCb%;)1@G~$^qNz$rKP7tn^I-VI_vex!hw@=t%M3^ z!Xp}Q#qdJ&hV1MX-;*2Dq2Y+l>H_nrKzHCw%#e>zjw1FElv=No3l_E#O^lV_?E*Et zB?VC>U~ssiZB|4$$P8(yZj+9*4~EpR5-CiY&M9Ov@a5+gXcr6IyY6)+NOx3`i0q0* zt2H1+QO}k4R1J~iKv#ii%G+vSk4YFS(zOlu)=~sjjjHR(QWa7tX7W%dj4r`UGG}z@ zfLJpW=#uS3Rmo3s{D7>Q(?i3_EZFd z;fqBI?wtTE?hU`O#Uo+#7gEqxSq<`;LKn%Oi6|GVXz$afzbYFaFv_#f>Si^EGiz>O zCUWhsGSt2I*?!#LvN$XixVZVa$NT!8@~#gB9{rBf3@ug}5e{45jYH{IBRq!5VU`vfb*W8s^<0h8B~UiKw0M`FO_0-0 ztR`@gc5~BMr%x4K`9&YMUiv}CdnPnOElKKm6BKO`RMgiRu7siI)WGU-^r zp&EaXr&hhI%pKX#ec7pt~&W}tuDg~3Zd zpcfv6KemUo3iEO9gU$=JLA8?u-oagi%rVk!+h9ml%rM##%&=`^Ma*fM^&0KTi{&g& zEY_$j+46m8pzY(-P^waAkK4>e)B^Ub9OtqsZ+pVGt|NlydP^G1g+aq$U}d!U0!>#` zCMPq|u~;WJ6~6^H#~Q0fyfRlr=;Ip0i6QcnOvHmVnEh-^2rkR0%$CAgs6DY3xe>2% zLSLjzBsgAw&-zS06*t&Me3z)qCn~_XJvbUKGtaWU6i2R<_pwjF$G`Xr246;JBIgK_ zZsrt5!Fqz7I*1@=6QP|P7d}EcfgMK`c^iD0o2g_7bzq^mFlFA}P3KiUhK)PKu~hDM z0N%|1;Y>iUVfcEX-A?G4N$aq?;M+x=YdHK9O#Q<^!v^WE&lfi_>q4Oo0;af+=_OIF zPX+w*Q|vR{PQk_BRu|7a^BD@*gv;t*8cB$_ zfATh9FNnCeUdT3X$VnBNEUyib^J|p%*5e`-`9^S4(%lz`7A39CLoBk8^7*Kg+J3!` z1G&%gS$5$)<-M-JUQk~JK%UM9oQXwZX1v3YcltOEk&YLLBu54}M{p0K5{1IFO-c$p76Ws)7H+*St{nwdqbmID z09w?Z4%xMxz&zpcky)NdufFxrDUFB2h=Dy~Ng;U|U9zecOZ5^p;;BU6s#TTjr#QaV**!Dp*Zm7_&NcVzbsjYj zH2+8+(4h z-W z-4H^mygW91t05(9p=}XY0SjxckJ$oVh`sZ~fMVuNi;{lcrfhktvI{PwwoP&fZJ;B` zY836EyD@!H0FG%>v7{CY?!gUvf-Kd{L(IOAD~iaf2l%D$oWmde~ZhD-Z>!DJ)BLsi%Zx z$U;YzyFIil1|-615s@Ft)uU$cb8reaZ^Q~=ktQ6i2j{<%|Llq?B?A(8xqjg2x2V1I`vktQk z*E)|zHq9Ye-QtR}f?)3hrk3(RI?s#wSRSr3|Aj`A6-vJ}&68rh9-8??jmr?|aT#ov z7z*2H-8c6n z_^?JW=p~^Q`Yf0CJv%DE`B2-4oQ;{X-LYCWsjQe#kM8Sur8ORs#Bv8fI}jl+k-9D- z@1hA<=G|z<-mq@lvUtpf^I1^Ed|AT~@ixl(xXR~_=r$(6g8Vkb088bCR^hP1_?MQ| z!4Z)8&?&Z;C^x*U$8&{=_>*nXHcoH>+5PT7)O_~+R~U5ueE45E@$ZKz#zEqvZoH;B zwcW5q-=|^P^%|ND+8UL%A}nJFp!ih1KPUM7tLT!~Dw^YyS5w2rd{A7U9FSh8cg(rU z+VFBE7$))ty%5Y!>|CY8C8})+9MhcufOQYRs>PKQpW|mIF4@!=IN>MZbE{cU{YH)-6tk=weuM)KZM&tDZUB0PmYLq>FWrRIf9WQXL^G z!pD7ao`J?4Hs&&DC38>E_43yCM1gcCyb8%FUt*Xc>?9#*M#9T-Ng!m`ie|T{4=!<=VJ!Op#s~joGITzN;_2zfgU_-Hx?P|1i{v z-v5|B9Nrq;%LI?Hikz|1<~(KZ9g{WotBRKM1cAtsU772ljQr_ElU=e)L=;pmw1Pnl z2`Em~m9kYaHdl;8o>Wdjt|0qBQ^lNFvh&Dw;hZAU&`?~T52rB%=zNM6myuOoEDV%A zyRa-4Pi@h%9oOG}*J9naIrr+2?@=&%a(GyrXo*)wC%{sYQMe+IS{SVETHtuTgSr zIb%QAy0*Rq_tnz0B0>1lvY1y#HD!J3w0=MsSs(LrURV7#t!D!Hrj!1NhFDkW#gOVEvj;c_p4<( zG9?_qgGot}8uTdFSV@v_80cY{=Wv1n2u zpe>ka=PuuH9cbX5y;4rl{i=II2Z1!GF!|SgN44<5W>iww*vTMw{Gt)6!nR6a{#5LIteFp7w7N$C_ zzsZ%B#R6UVPDvzDXTG|$SsJGhYCn0qA|2~^k|#SaFqe@@pt%U!cFBguT@cUKt&jSl z(%B#qR7En^Xj~(M+g=(Pv%&ER=XwM~0F^JY{Q>m5EfIL2%_NZH7W)XUWoM4dNweXR zmf$YluD*ffLXA33k;aiw&oH%;sI`*MRMI<(I2~4H7!ta`o4bDRsJ2Rf!?gUxD>j|l zX9bL*fiy-_7Ll8Mqjo-wBm!vX$)zy*gHVk*kbE+q;l*6xoE#A>gyi1f>gArISG^(2 zhxxK^s%S4Wwa(kKHS-jDw$b&qAMhv74^h8qMnrN7i?^Z3ipjO&1S1R?7?HHXzOtB# zIt=v+KVbp(aC~9N`5Hb*MQf2V*?*KmjLITgA1M%D5e0{IP{gZNbjbS=Y+O+`7aG>i zsEqD_p;LUn-`g=Z(t9|FTKlCh>SA3saHyg)upv@mb3mzp8!wa$^Mxx9&PPJXX*h{D zT=$QtFiqF|(3d44!QDtav%tB{>2rq; z>(%a&ujJ}qTSj}ILsgoMI15mp+Fjo_z^)}o$)VxF827YkZ>@qH{5_)SCU0aYmZ%{d4(6TBlV-I@T7%(E?8mGi12oS@P90O$y#LUc-j$mU;&fZfp{Nq*+a*V?x-kd!A*EeHcw7_6QGu7TJih%x)-|7Pnh}Vzo->utj49bX`csY5X?@*>g)Qxr<3xRK>~%TYOlieOMl<6^g21Tkb`A#1!zsnM=e3 z?=VIhbUH*Wb5rr$cjX37(lNq*C40gjVn93^w%GyV{7iv8>P^a9CnYwdWz*BI_o!$l z`iaBKj+B_h6WA9Sj{Q8;s850Is-vhhu-s%&6u}3DjTsg*r(hR)KhW zL{WXxn*uWjms{i$kG96}X!ax9n?<0lRkyGbyd+PC^-mFsJck}@9+k;Nka4ZqozPGjti9koz<%>iMEFoRWOwW52%zSiP?Wpu2g%4iOt+A;9Kz=ZGc?E@0rn)?^R|AOzwY?+rG@P|OH<^uI3aEHwo z>7Uu`9Ni2ZO@K96Kf zND%+R4w$bG6F8dq4ht#HzhzN$y1fm@8U(n*k5$>sMx1*As8S1@U(Rudq=fX}lc<7h z4Q+l#F@)BLh6T7?9YDi>ha#2o-%_aAxi}hw6rI%EES!zaf97zUFK@u_14~SsK&bHE zVS)ov#6LLPw|cqD^kbuaD$#Ro07Awc(1`O6k2&BD|HNbAB@RfP0mg$bsKGY!g7r{R!K@0sm_z zygeiT_vbc=;;Q`=+|8jvsUMgYX)e+en^ z8?v~C3`+< zeN6N-jlAF{ANB(*erSKyNYm>7$Mj>3^m#M9o&rsWB5(`v-E8aO@}GEqAdovh@60hur8j7J@?QV2qjX$WA5tF+4rAG{yC)X8b5sE-%zmr&G^M~ zd2f(_w3!9O(_NuQ{w3nAWmtb@{OX4Jr8yvBdI0?swm%#O_{{ZTS^0ND|3;zVZ1L?D zp1*qhzCC}?4&d1$n=6@jgw?RtwKOJtp{>9NhQv4`N>zEmJAppA%0As7WMp^iG zfa(D1&#Zo%+-bjZpLGFw#R^F9x3_Kn@#Oljf`R|c#WCL8kDQ978@^?49 z#eV7wUSkS`(kQSdPyGil@R{o)4*5%Lpx+F1I?eu$dYibi3nrgg01_(!zCwQo_2B+L zq5f`(pY=g1v4BI>|s8U0Hk#TJo~O4;xPXS_s8!1 z8|tuz6((R^FaVYAjeMb27XHTPr$!UeQXtL?H2%Q zFCg+=1HXIl?~wm)U>(4~x7z>FHUbIi+jARs;N(BWb#?@S?&P^!qzuJ~&*DHRm;y1U z@COj^nd>9)4@hFxhE7f*wuaUoP8LqLqrU%*$jN{EuP5NtKQ;R;H9ahnMLD3wI1nvT zcc^!1eyzkWsDY8hFG*i<oBWa|d*K8t1>m>@G`icDMG^e>JPIHiBhVi+dOtSZq$_JuE=Iqe+d7K>7R2Z!*=L&0&yV#bT00WmD%+E6X%aZAXY z1qg+^gDWYse}D(s*g1N97vVpPZiv}fgmz%0{{@)1zMI~U|BnpF z6~Ew{%@#u{1~P=T%wL=6!kYic_g$X2ZI6Gjpbn(l@1C4d@ZWa3|5m?0DFLjGe)n{L zEAi+4_+OO;s_eVx^lxQv_tt-3{&rtv+?;4bA&}APfK)*9U1=~ds`tN3`zQBpc@bM% zJ7+^@3p?Atk66B`^xG!?n10+xfG)hmcL&p8U|2v7{ri^xKVkniaq}H2#6-;|Hz4dR z5OWlFgl$^=A*!>pqlJ-+Gl*ObKzDy2Kat#ldX)$Q!$4IRxu67I$z``fzzvGQ517UypO zTSfqmNdBj!z&CfbpJM;gjSM~QU)Tb{iX`?|_1z!-6!BLcB!QUA5dlQyAuz*8bw@-h z_a6e<**ZBJ+B%DS0BhcIbP1E&AO$p$q#Vn2RIu)~B5S{(tZf|bGu2{g!kL zkD#OtZB49yVmZ98r(8-%l4BM`2)CyI_Z0kVC+a{&x2@coaV6hODVk$;(9&;ncq9|22Cj)2B@v%luV z&%uA`FCU-aY83JV!`o+n^}zF`pF{r2VctZnJ|zIOUj=IBu8_+_kUub{f}M$rH8A9N zviNBmAeV0qUIRF_GtjNQ8zv%TKZpF4knv{q0#-ncdjr*d*L}F?euSuGZ)|4*`boNi z9O?I61pN9wpz+-nWr6cYV5%TvV4v0PysMopkZFFYdgCdi8WGSr{J*K74b=d1ku?!! z;|qftFWs}CLXjI7vZ&dy#1Wg(!Iim5`8bk2`knQN+->2C+boP5?9tn1==YB!j6Lj5 zz*y`>H~N9s2m=>qVlxnN{587M&`*g$n6#q~mq~~-W6(`QKal`o+N>5_rlFlrfNUiC zvR2eu>TVY{BN2N}kxc?OWzqJlA{-~#jo&1!yI0YTN8gx)Fus2xk;dcALg+gq5a#Di bCDMGdeKxhw~cUm?Jn1>huha}YS literal 0 HcmV?d00001 diff --git a/jadx-gui/build.gradle b/jadx-gui/build.gradle index 26b14f3f9dd..a13d6114f60 100644 --- a/jadx-gui/build.gradle +++ b/jadx-gui/build.gradle @@ -7,8 +7,6 @@ plugins { dependencies { implementation(project(':jadx-core')) - implementation 'net.fabricmc:mapping-io:0.3.0' - implementation(project(":jadx-cli")) implementation 'com.beust:jcommander:1.82' implementation 'ch.qos.logback:logback-classic:1.2.11' diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index 19ac389c95b..6b86016f5f6 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -830,17 +830,26 @@ public void actionPerformed(ActionEvent e) { }; exportMappingsAsTiny2.putValue(Action.SHORT_DESCRIPTION, "Tiny v2 file"); - Action exportMappingsAsEnigma = new AbstractAction("Enigma directory") { + Action exportMappingsAsEnigma = new AbstractAction("Enigma file") { @Override public void actionPerformed(ActionEvent e) { exportMappings(MappingFormat.ENIGMA); } }; - exportMappingsAsEnigma.putValue(Action.SHORT_DESCRIPTION, "Enigma directory"); + exportMappingsAsEnigma.putValue(Action.SHORT_DESCRIPTION, "Enigma file"); + + Action exportMappingsAsEnigmaDir = new AbstractAction("Enigma directory") { + @Override + public void actionPerformed(ActionEvent e) { + exportMappings(MappingFormat.ENIGMA_DIR); + } + }; + exportMappingsAsEnigmaDir.putValue(Action.SHORT_DESCRIPTION, "Enigma directory"); JMenu exportMappingsAs = new JMenu(NLS.str("file.export_mappings_as")); exportMappingsAs.add(exportMappingsAsTiny2); exportMappingsAs.add(exportMappingsAsEnigma); + exportMappingsAs.add(exportMappingsAsEnigmaDir); Action saveAllAction = new AbstractAction(NLS.str("file.save_all"), ICON_SAVE_ALL) { @Override From 414b5becefbd081ee00306a5d7193a1c41e8c729 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Thu, 9 Jun 2022 23:38:12 +0200 Subject: [PATCH 14/22] Fix method vars' lv-indices --- jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 048450de4aa..3bcb35d7fa5 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -297,6 +297,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi continue; } // Method args + int lastArgLvIndex = (mth.getAccessFlags().isStatic() ? 0 : 1) - 1; List args = collectMethodArgs(mth); for (VarNode arg : args) { int lvIndex = arg.getReg() - args.get(0).getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); @@ -307,6 +308,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, mappedMethodArgsAndVars.get(key)); mappedMethodArgsAndVars.remove(key); } + lastArgLvIndex = lvIndex; // Not checking for comments since method args can't have any } // Method vars @@ -314,15 +316,14 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi for (SimpleEntry entry : vars) { VarNode var = entry.getKey(); int offset = entry.getValue(); - int lvIndex = var.getReg() - vars.get(0).getKey().getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); + int lvIndex = lastArgLvIndex + var.getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); String key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forVar(var.getReg(), var.getSsa()); if (mappedMethodArgsAndVars.containsKey(key)) { visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, var.getDefPosition()); mappingTree.visitDstName(MappedElementKind.METHOD_VAR, 0, mappedMethodArgsAndVars.get(key)); } - key = rawClassName + methodInfo.getShortId() - + JadxCodeRef.forInsn(offset); + key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forInsn(offset); if (comments.containsKey(key)) { visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, var.getDefPosition()); mappingTree.visitComment(MappedElementKind.METHOD_VAR, comments.get(key)); From 8cb764c68b93adc994ae6fff12134419eb609cc4 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Fri, 10 Jun 2022 13:16:37 +0200 Subject: [PATCH 15/22] Use correct offset value for method var mappings --- jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 3bcb35d7fa5..975f8ab5be6 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -181,7 +181,7 @@ private List> collectMethodVars(MethodNode methodN vars.add(new SimpleEntry(varNode, lastOffset.get())); } else { LOG.warn("Local variable not present in bytecode, skipping: " - + methodNode.getMethodInfo().getRawFullId() + "." + varNode.getName()); + + methodNode.getMethodInfo().getRawFullId() + "#" + varNode.getName()); } lastOffset.set(-1); } @@ -320,12 +320,12 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi String key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forVar(var.getReg(), var.getSsa()); if (mappedMethodArgsAndVars.containsKey(key)) { - visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, var.getDefPosition()); + visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, offset); mappingTree.visitDstName(MappedElementKind.METHOD_VAR, 0, mappedMethodArgsAndVars.get(key)); } key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forInsn(offset); if (comments.containsKey(key)) { - visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, var.getDefPosition()); + visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, offset); mappingTree.visitComment(MappedElementKind.METHOD_VAR, comments.get(key)); } } From ed7b09180a73e0721f30d289c977f2073b78e3ea Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Sat, 11 Jun 2022 18:56:21 +0200 Subject: [PATCH 16/22] Also supply lvt-index for method var mappings --- .../main/java/jadx/core/deobf/Deobfuscator.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 975f8ab5be6..50a3a0666b9 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -297,7 +297,8 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi continue; } // Method args - int lastArgLvIndex = (mth.getAccessFlags().isStatic() ? 0 : 1) - 1; + int lvtIndex = mth.getAccessFlags().isStatic() ? 0 : 1; + int lastArgLvIndex = lvtIndex - 1; List args = collectMethodArgs(mth); for (VarNode arg : args) { int lvIndex = arg.getReg() - args.get(0).getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); @@ -309,6 +310,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi mappedMethodArgsAndVars.remove(key); } lastArgLvIndex = lvIndex; + lvtIndex++; // Not checking for comments since method args can't have any } // Method vars @@ -320,14 +322,15 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi String key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forVar(var.getReg(), var.getSsa()); if (mappedMethodArgsAndVars.containsKey(key)) { - visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, offset); + visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvtIndex, lvIndex, offset); mappingTree.visitDstName(MappedElementKind.METHOD_VAR, 0, mappedMethodArgsAndVars.get(key)); } key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forInsn(offset); if (comments.containsKey(key)) { - visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvIndex, offset); + visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvtIndex, lvIndex, offset); mappingTree.visitComment(MappedElementKind.METHOD_VAR, comments.get(key)); } + lvtIndex++; } } } @@ -357,10 +360,10 @@ private void visitMethodArg(MemoryMappingTree tree, String classPath, String met tree.visitMethodArg(argPosition, lvIndex, null); } - private void visitMethodVar(MemoryMappingTree tree, String classPath, String methodSrcName, String methodSrcDesc, int lvIndex, - int startOpIdx) { + private void visitMethodVar(MemoryMappingTree tree, String classPath, String methodSrcName, String methodSrcDesc, int lvtIndex, + int lvIndex, int startOpIdx) { visitMethod(tree, classPath, methodSrcName, methodSrcDesc); - tree.visitMethodVar(-1, lvIndex, startOpIdx, null); + tree.visitMethodVar(lvtIndex, lvIndex, startOpIdx, null); } private void fillDeobfPresets() { From d29d63155198c3dcb058fbc9c0139df73ffe4fae Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Sat, 11 Jun 2022 19:04:10 +0200 Subject: [PATCH 17/22] Clarify why we're using local mapping-io fork; comment out Fabric Maven for now --- build.gradle | 9 +++++---- jadx-core/build.gradle | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index bb7235286cc..10495e89234 100644 --- a/build.gradle +++ b/build.gradle @@ -49,10 +49,11 @@ allprojects { mavenLocal() mavenCentral() google() - maven { - name 'FabricMC' - url 'https://maven.fabricmc.net/' - } + // Commented out for now since we're using a local mapping-io fork atm. + // maven { + // name 'FabricMC' + // url 'https://maven.fabricmc.net/' + // } } } diff --git a/jadx-core/build.gradle b/jadx-core/build.gradle index 4781f3e877a..b68c4df906a 100644 --- a/jadx-core/build.gradle +++ b/jadx-core/build.gradle @@ -4,6 +4,8 @@ plugins { dependencies { api(project(':jadx-plugins:jadx-plugins-api')) + // TODO: Switch back to upstream once this PR gets merged: + // https://github.com/FabricMC/mapping-io/pull/19 // api 'net.fabricmc:mapping-io:0.3.0' api files('libs/mapping-io-0.4.0-SNAPSHOT.jar') From f53735209191d912664181e9d5752efcdfbd9c6e Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Sat, 11 Jun 2022 19:06:33 +0200 Subject: [PATCH 18/22] Remove unnecessary `public` modifier --- jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java b/jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java index 77fc6c9c4bd..6672e4b351f 100644 --- a/jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java +++ b/jadx-core/src/main/java/jadx/api/data/IJavaNodeRef.java @@ -2,7 +2,7 @@ public interface IJavaNodeRef extends Comparable { - public enum RefType { + enum RefType { CLASS, FIELD, METHOD, PKG } From 782a56c482a0a382b1d0f2c9c6bf4b38f4593145 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Sat, 11 Jun 2022 19:21:32 +0200 Subject: [PATCH 19/22] Make an `if` condition less complicated --- jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 50a3a0666b9..8fba1975e8f 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -257,8 +257,7 @@ public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappi mappingTree.visitClass(classPath); String alias = classInfo.makeAliasRawFullName().replace('.', '/'); - if (alias.length() >= Consts.DEFAULT_PACKAGE_NAME.length() - && alias.substring(0, Consts.DEFAULT_PACKAGE_NAME.length()).equals(Consts.DEFAULT_PACKAGE_NAME)) { + if (alias.startsWith(Consts.DEFAULT_PACKAGE_NAME)) { alias = alias.substring(Consts.DEFAULT_PACKAGE_NAME.length() + 1); } mappingTree.visitDstName(MappedElementKind.CLASS, 0, alias); From 71766d21db30d9c9646c00aed1f9f5635a66913d Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Sat, 11 Jun 2022 19:43:17 +0200 Subject: [PATCH 20/22] Move mapping export code into jadx-gui (for now) --- jadx-core/build.gradle | 4 - .../java/jadx/core/deobf/Deobfuscator.java | 258 ---------------- jadx-gui/build.gradle | 5 + .../libs/mapping-io-0.4.0-SNAPSHOT.jar | Bin 247547 -> 277418 bytes .../gui/plugins/mappings/MappingExporter.java | 285 ++++++++++++++++++ .../src/main/java/jadx/gui/ui/MainWindow.java | 8 +- 6 files changed, 293 insertions(+), 267 deletions(-) rename {jadx-core => jadx-gui}/libs/mapping-io-0.4.0-SNAPSHOT.jar (81%) create mode 100644 jadx-gui/src/main/java/jadx/gui/plugins/mappings/MappingExporter.java diff --git a/jadx-core/build.gradle b/jadx-core/build.gradle index b68c4df906a..10be4575584 100644 --- a/jadx-core/build.gradle +++ b/jadx-core/build.gradle @@ -4,10 +4,6 @@ plugins { dependencies { api(project(':jadx-plugins:jadx-plugins-api')) - // TODO: Switch back to upstream once this PR gets merged: - // https://github.com/FabricMC/mapping-io/pull/19 - // api 'net.fabricmc:mapping-io:0.3.0' - api files('libs/mapping-io-0.4.0-SNAPSHOT.jar') implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.android.tools.build:aapt2-proto:4.2.1-7147631' diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 8fba1975e8f..d1b97cc8bad 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -1,48 +1,24 @@ package jadx.core.deobf; -import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.AbstractMap.SimpleEntry; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.NavigableSet; import java.util.Set; import java.util.TreeSet; -import java.util.concurrent.atomic.AtomicInteger; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import net.fabricmc.mappingio.MappedElementKind; -import net.fabricmc.mappingio.MappingWriter; -import net.fabricmc.mappingio.format.MappingFormat; -import net.fabricmc.mappingio.tree.MemoryMappingTree; - -import jadx.api.ICodeInfo; import jadx.api.JadxArgs; import jadx.api.args.DeobfuscationMapFileMode; -import jadx.api.data.ICodeComment; -import jadx.api.data.ICodeRename; -import jadx.api.data.IJavaNodeRef.RefType; -import jadx.api.data.impl.JadxCodeData; -import jadx.api.data.impl.JadxCodeRef; -import jadx.api.metadata.ICodeNodeRef; -import jadx.api.metadata.annotations.InsnCodeOffset; -import jadx.api.metadata.annotations.NodeDeclareRef; -import jadx.api.metadata.annotations.VarNode; import jadx.api.plugins.input.data.attributes.JadxAttrType; import jadx.api.plugins.input.data.attributes.types.SourceFileAttr; -import jadx.api.utils.CodeUtils; -import jadx.core.Consts; -import jadx.core.codegen.TypeGen; import jadx.core.dex.attributes.AFlag; import jadx.core.dex.attributes.AType; import jadx.core.dex.attributes.nodes.MethodOverrideAttr; @@ -54,7 +30,6 @@ import jadx.core.dex.nodes.FieldNode; import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.nodes.RootNode; -import jadx.core.utils.files.FileUtils; import jadx.core.utils.kotlin.KotlinMetadataUtils; public class Deobfuscator { @@ -132,239 +107,6 @@ public void savePresets() { } } - private List collectMethodArgs(MethodNode methodNode) { - ICodeInfo codeInfo = methodNode.getTopParentClass().getCode(); - int mthDefPos = methodNode.getDefPosition(); - int lineEndPos = CodeUtils.getLineEndForPos(codeInfo.getCodeStr(), mthDefPos); - List args = new ArrayList<>(); - codeInfo.getCodeMetadata().searchDown(mthDefPos, (pos, ann) -> { - if (pos > lineEndPos) { - // Stop at line end - return Boolean.TRUE; - } - if (ann instanceof NodeDeclareRef) { - ICodeNodeRef declRef = ((NodeDeclareRef) ann).getNode(); - if (declRef instanceof VarNode) { - VarNode varNode = (VarNode) declRef; - if (!varNode.getMth().equals(methodNode)) { - // Stop if we've gone too far and have entered a different method - return Boolean.TRUE; - } - args.add(varNode); - } - } - return null; - }); - return args; - } - - private List> collectMethodVars(MethodNode methodNode) { - ICodeInfo codeInfo = methodNode.getTopParentClass().getCode(); - int mthDefPos = methodNode.getDefPosition(); - int mthLineEndPos = CodeUtils.getLineEndForPos(codeInfo.getCodeStr(), mthDefPos); - - List> vars = new ArrayList<>(); - AtomicInteger lastOffset = new AtomicInteger(-1); - codeInfo.getCodeMetadata().searchDown(mthLineEndPos, (pos, ann) -> { - if (ann instanceof InsnCodeOffset) { - lastOffset.set(((InsnCodeOffset) ann).getOffset()); - } - if (ann instanceof NodeDeclareRef) { - ICodeNodeRef declRef = ((NodeDeclareRef) ann).getNode(); - if (declRef instanceof VarNode) { - VarNode varNode = (VarNode) declRef; - if (!varNode.getMth().equals(methodNode)) { - // Stop if we've gone too far and have entered a different method - return Boolean.TRUE; - } - if (lastOffset.get() != -1) { - vars.add(new SimpleEntry(varNode, lastOffset.get())); - } else { - LOG.warn("Local variable not present in bytecode, skipping: " - + methodNode.getMethodInfo().getRawFullId() + "#" + varNode.getName()); - } - lastOffset.set(-1); - } - } - return null; - }); - return vars; - } - - public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappingFormat) { - MemoryMappingTree mappingTree = new MemoryMappingTree(); - // Map < SrcName > - Set mappedClasses = new HashSet<>(); - // Map < DeclClass + ShortId > - Set mappedFields = new HashSet<>(); - Set mappedMethods = new HashSet<>(); - Set methodsWithMappedElements = new HashSet<>(); - // Map < DeclClass + MethodShortId + CodeRef, NewName > - Map mappedMethodArgsAndVars = new HashMap<>(); - // Map < DeclClass + *ShortId + *CodeRef, Comment > - Map comments = new HashMap<>(); - - // We have to do this so we know for sure which elements are *manually* renamed - for (ICodeRename codeRename : codeData.getRenames()) { - if (codeRename.getNodeRef().getType().equals(RefType.CLASS)) { - mappedClasses.add(codeRename.getNodeRef().getDeclaringClass()); - } else if (codeRename.getNodeRef().getType().equals(RefType.FIELD)) { - mappedFields.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); - } else if (codeRename.getNodeRef().getType().equals(RefType.METHOD)) { - if (codeRename.getCodeRef() == null) { - mappedMethods.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); - } else { - methodsWithMappedElements.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); - mappedMethodArgsAndVars.put(codeRename.getNodeRef().getDeclaringClass() - + codeRename.getNodeRef().getShortId() - + codeRename.getCodeRef(), - codeRename.getNewName()); - } - } - } - for (ICodeComment codeComment : codeData.getComments()) { - comments.put(codeComment.getNodeRef().getDeclaringClass() - + (codeComment.getNodeRef().getShortId() == null ? "" : codeComment.getNodeRef().getShortId()) - + (codeComment.getCodeRef() == null ? "" : codeComment.getCodeRef()), - codeComment.getComment()); - if (codeComment.getCodeRef() != null) { - methodsWithMappedElements.add(codeComment.getNodeRef().getDeclaringClass() + codeComment.getNodeRef().getShortId()); - } - } - - try { - if (mappingFormat.hasSingleFile()) { - if (path.toFile().exists()) { - path.toFile().delete(); - } - path.toFile().createNewFile(); - } else { - FileUtils.makeDirs(path); - } - - mappingTree.visitHeader(); - mappingTree.visitNamespaces("official", Arrays.asList("named")); - mappingTree.visitContent(); - - for (ClassNode cls : root.getClasses()) { - ClassInfo classInfo = cls.getClassInfo(); - String classPath = classInfo.makeRawFullName().replace('.', '/'); - String rawClassName = classInfo.getRawName(); - - if (classInfo.hasAlias() - && !classInfo.getAliasShortName().equals(classInfo.getShortName()) - && mappedClasses.contains(rawClassName)) { - mappingTree.visitClass(classPath); - String alias = classInfo.makeAliasRawFullName().replace('.', '/'); - - if (alias.startsWith(Consts.DEFAULT_PACKAGE_NAME)) { - alias = alias.substring(Consts.DEFAULT_PACKAGE_NAME.length() + 1); - } - mappingTree.visitDstName(MappedElementKind.CLASS, 0, alias); - } - if (comments.containsKey(rawClassName)) { - mappingTree.visitClass(classPath); - mappingTree.visitComment(MappedElementKind.CLASS, comments.get(rawClassName)); - } - - for (FieldNode fld : cls.getFields()) { - FieldInfo fieldInfo = fld.getFieldInfo(); - if (fieldInfo.hasAlias() && mappedFields.contains(rawClassName + fieldInfo.getShortId())) { - visitField(mappingTree, classPath, fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); - mappingTree.visitDstName(MappedElementKind.FIELD, 0, fieldInfo.getAlias()); - } - if (comments.containsKey(rawClassName + fieldInfo.getShortId())) { - visitField(mappingTree, classPath, fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); - mappingTree.visitComment(MappedElementKind.FIELD, comments.get(rawClassName + fieldInfo.getShortId())); - } - } - - for (MethodNode mth : cls.getMethods()) { - MethodInfo methodInfo = mth.getMethodInfo(); - String methodName = methodInfo.getName(); - String methodDesc = methodInfo.getShortId().substring(methodName.length()); - if (methodInfo.hasAlias() && mappedMethods.contains(rawClassName + methodInfo.getShortId())) { - visitMethod(mappingTree, classPath, methodName, methodDesc); - mappingTree.visitDstName(MappedElementKind.METHOD, 0, methodInfo.getAlias()); - } - if (comments.containsKey(rawClassName + methodInfo.getShortId())) { - visitMethod(mappingTree, classPath, methodName, methodDesc); - mappingTree.visitComment(MappedElementKind.METHOD, comments.get(rawClassName + methodInfo.getShortId())); - } - - if (!methodsWithMappedElements.contains(rawClassName + methodInfo.getShortId())) { - continue; - } - // Method args - int lvtIndex = mth.getAccessFlags().isStatic() ? 0 : 1; - int lastArgLvIndex = lvtIndex - 1; - List args = collectMethodArgs(mth); - for (VarNode arg : args) { - int lvIndex = arg.getReg() - args.get(0).getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); - String key = rawClassName + methodInfo.getShortId() - + JadxCodeRef.forVar(arg.getReg(), arg.getSsa()); - if (mappedMethodArgsAndVars.containsKey(key)) { - visitMethodArg(mappingTree, classPath, methodName, methodDesc, args.indexOf(arg), lvIndex); - mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, mappedMethodArgsAndVars.get(key)); - mappedMethodArgsAndVars.remove(key); - } - lastArgLvIndex = lvIndex; - lvtIndex++; - // Not checking for comments since method args can't have any - } - // Method vars - List> vars = collectMethodVars(mth); - for (SimpleEntry entry : vars) { - VarNode var = entry.getKey(); - int offset = entry.getValue(); - int lvIndex = lastArgLvIndex + var.getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); - String key = rawClassName + methodInfo.getShortId() - + JadxCodeRef.forVar(var.getReg(), var.getSsa()); - if (mappedMethodArgsAndVars.containsKey(key)) { - visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvtIndex, lvIndex, offset); - mappingTree.visitDstName(MappedElementKind.METHOD_VAR, 0, mappedMethodArgsAndVars.get(key)); - } - key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forInsn(offset); - if (comments.containsKey(key)) { - visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvtIndex, lvIndex, offset); - mappingTree.visitComment(MappedElementKind.METHOD_VAR, comments.get(key)); - } - lvtIndex++; - } - } - } - - MappingWriter writer = MappingWriter.create(path, mappingFormat); - mappingTree.accept(writer); - mappingTree.visitEnd(); - writer.close(); - } catch (IOException e) { - LOG.error("Failed to save deobfuscation map file '{}'", path.toAbsolutePath(), e); - } - } - - private void visitField(MemoryMappingTree tree, String classPath, String srcName, String srcDesc) { - tree.visitClass(classPath); - tree.visitField(srcName, srcDesc); - } - - private void visitMethod(MemoryMappingTree tree, String classPath, String srcName, String srcDesc) { - tree.visitClass(classPath); - tree.visitMethod(srcName, srcDesc); - } - - private void visitMethodArg(MemoryMappingTree tree, String classPath, String methodSrcName, String methodSrcDesc, int argPosition, - int lvIndex) { - visitMethod(tree, classPath, methodSrcName, methodSrcDesc); - tree.visitMethodArg(argPosition, lvIndex, null); - } - - private void visitMethodVar(MemoryMappingTree tree, String classPath, String methodSrcName, String methodSrcDesc, int lvtIndex, - int lvIndex, int startOpIdx) { - visitMethod(tree, classPath, methodSrcName, methodSrcDesc); - tree.visitMethodVar(lvtIndex, lvIndex, startOpIdx, null); - } - private void fillDeobfPresets() { for (PackageNode p : getRootPackage().getInnerPackages()) { for (PackageNode pp : p.getInnerPackages()) { diff --git a/jadx-gui/build.gradle b/jadx-gui/build.gradle index a13d6114f60..5dd054b8421 100644 --- a/jadx-gui/build.gradle +++ b/jadx-gui/build.gradle @@ -29,6 +29,11 @@ dependencies { implementation 'com.android.tools.build:apksig:4.2.1' implementation 'io.github.hqktech:jdwp:1.0' + // TODO: Switch back to upstream once this PR gets merged: + // https://github.com/FabricMC/mapping-io/pull/19 + // implementation 'net.fabricmc:mapping-io:0.3.0' + implementation files('libs/mapping-io-0.4.0-SNAPSHOT.jar') + testImplementation project(":jadx-core").sourceSets.test.output } diff --git a/jadx-core/libs/mapping-io-0.4.0-SNAPSHOT.jar b/jadx-gui/libs/mapping-io-0.4.0-SNAPSHOT.jar similarity index 81% rename from jadx-core/libs/mapping-io-0.4.0-SNAPSHOT.jar rename to jadx-gui/libs/mapping-io-0.4.0-SNAPSHOT.jar index 4999fce2b1567869cfb6f4f31ba78e04c968c471..c5cf62872025eb472af471632b554ff539c4d875 100644 GIT binary patch delta 43079 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 AumAu6 delta 12884 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 collectMethodArgs(MethodNode methodNode) { + ICodeInfo codeInfo = methodNode.getTopParentClass().getCode(); + int mthDefPos = methodNode.getDefPosition(); + int lineEndPos = CodeUtils.getLineEndForPos(codeInfo.getCodeStr(), mthDefPos); + List args = new ArrayList<>(); + codeInfo.getCodeMetadata().searchDown(mthDefPos, (pos, ann) -> { + if (pos > lineEndPos) { + // Stop at line end + return Boolean.TRUE; + } + if (ann instanceof NodeDeclareRef) { + ICodeNodeRef declRef = ((NodeDeclareRef) ann).getNode(); + if (declRef instanceof VarNode) { + VarNode varNode = (VarNode) declRef; + if (!varNode.getMth().equals(methodNode)) { + // Stop if we've gone too far and have entered a different method + return Boolean.TRUE; + } + args.add(varNode); + } + } + return null; + }); + return args; + } + + private List> collectMethodVars(MethodNode methodNode) { + ICodeInfo codeInfo = methodNode.getTopParentClass().getCode(); + int mthDefPos = methodNode.getDefPosition(); + int mthLineEndPos = CodeUtils.getLineEndForPos(codeInfo.getCodeStr(), mthDefPos); + + List> vars = new ArrayList<>(); + AtomicInteger lastOffset = new AtomicInteger(-1); + codeInfo.getCodeMetadata().searchDown(mthLineEndPos, (pos, ann) -> { + if (ann instanceof InsnCodeOffset) { + lastOffset.set(((InsnCodeOffset) ann).getOffset()); + } + if (ann instanceof NodeDeclareRef) { + ICodeNodeRef declRef = ((NodeDeclareRef) ann).getNode(); + if (declRef instanceof VarNode) { + VarNode varNode = (VarNode) declRef; + if (!varNode.getMth().equals(methodNode)) { + // Stop if we've gone too far and have entered a different method + return Boolean.TRUE; + } + if (lastOffset.get() != -1) { + vars.add(new SimpleEntry(varNode, lastOffset.get())); + } else { + LOG.warn("Local variable not present in bytecode, skipping: " + + methodNode.getMethodInfo().getRawFullId() + "#" + varNode.getName()); + } + lastOffset.set(-1); + } + } + return null; + }); + return vars; + } + + public void exportMappings(Path path, JadxCodeData codeData, MappingFormat mappingFormat) { + MemoryMappingTree mappingTree = new MemoryMappingTree(); + // Map < SrcName > + Set mappedClasses = new HashSet<>(); + // Map < DeclClass + ShortId > + Set mappedFields = new HashSet<>(); + Set mappedMethods = new HashSet<>(); + Set methodsWithMappedElements = new HashSet<>(); + // Map < DeclClass + MethodShortId + CodeRef, NewName > + Map mappedMethodArgsAndVars = new HashMap<>(); + // Map < DeclClass + *ShortId + *CodeRef, Comment > + Map comments = new HashMap<>(); + + // We have to do this so we know for sure which elements are *manually* renamed + for (ICodeRename codeRename : codeData.getRenames()) { + if (codeRename.getNodeRef().getType().equals(RefType.CLASS)) { + mappedClasses.add(codeRename.getNodeRef().getDeclaringClass()); + } else if (codeRename.getNodeRef().getType().equals(RefType.FIELD)) { + mappedFields.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); + } else if (codeRename.getNodeRef().getType().equals(RefType.METHOD)) { + if (codeRename.getCodeRef() == null) { + mappedMethods.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); + } else { + methodsWithMappedElements.add(codeRename.getNodeRef().getDeclaringClass() + codeRename.getNodeRef().getShortId()); + mappedMethodArgsAndVars.put(codeRename.getNodeRef().getDeclaringClass() + + codeRename.getNodeRef().getShortId() + + codeRename.getCodeRef(), + codeRename.getNewName()); + } + } + } + for (ICodeComment codeComment : codeData.getComments()) { + comments.put(codeComment.getNodeRef().getDeclaringClass() + + (codeComment.getNodeRef().getShortId() == null ? "" : codeComment.getNodeRef().getShortId()) + + (codeComment.getCodeRef() == null ? "" : codeComment.getCodeRef()), + codeComment.getComment()); + if (codeComment.getCodeRef() != null) { + methodsWithMappedElements.add(codeComment.getNodeRef().getDeclaringClass() + codeComment.getNodeRef().getShortId()); + } + } + + try { + if (mappingFormat.hasSingleFile()) { + if (path.toFile().exists()) { + path.toFile().delete(); + } + path.toFile().createNewFile(); + } else { + FileUtils.makeDirs(path); + } + + mappingTree.visitHeader(); + mappingTree.visitNamespaces("official", Arrays.asList("named")); + mappingTree.visitContent(); + + for (ClassNode cls : root.getClasses()) { + ClassInfo classInfo = cls.getClassInfo(); + String classPath = classInfo.makeRawFullName().replace('.', '/'); + String rawClassName = classInfo.getRawName(); + + if (classInfo.hasAlias() + && !classInfo.getAliasShortName().equals(classInfo.getShortName()) + && mappedClasses.contains(rawClassName)) { + mappingTree.visitClass(classPath); + String alias = classInfo.makeAliasRawFullName().replace('.', '/'); + + if (alias.startsWith(Consts.DEFAULT_PACKAGE_NAME)) { + alias = alias.substring(Consts.DEFAULT_PACKAGE_NAME.length() + 1); + } + mappingTree.visitDstName(MappedElementKind.CLASS, 0, alias); + } + if (comments.containsKey(rawClassName)) { + mappingTree.visitClass(classPath); + mappingTree.visitComment(MappedElementKind.CLASS, comments.get(rawClassName)); + } + + for (FieldNode fld : cls.getFields()) { + FieldInfo fieldInfo = fld.getFieldInfo(); + if (fieldInfo.hasAlias() && mappedFields.contains(rawClassName + fieldInfo.getShortId())) { + visitField(mappingTree, classPath, fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); + mappingTree.visitDstName(MappedElementKind.FIELD, 0, fieldInfo.getAlias()); + } + if (comments.containsKey(rawClassName + fieldInfo.getShortId())) { + visitField(mappingTree, classPath, fieldInfo.getName(), TypeGen.signature(fieldInfo.getType())); + mappingTree.visitComment(MappedElementKind.FIELD, comments.get(rawClassName + fieldInfo.getShortId())); + } + } + + for (MethodNode mth : cls.getMethods()) { + MethodInfo methodInfo = mth.getMethodInfo(); + String methodName = methodInfo.getName(); + String methodDesc = methodInfo.getShortId().substring(methodName.length()); + if (methodInfo.hasAlias() && mappedMethods.contains(rawClassName + methodInfo.getShortId())) { + visitMethod(mappingTree, classPath, methodName, methodDesc); + mappingTree.visitDstName(MappedElementKind.METHOD, 0, methodInfo.getAlias()); + } + if (comments.containsKey(rawClassName + methodInfo.getShortId())) { + visitMethod(mappingTree, classPath, methodName, methodDesc); + mappingTree.visitComment(MappedElementKind.METHOD, comments.get(rawClassName + methodInfo.getShortId())); + } + + if (!methodsWithMappedElements.contains(rawClassName + methodInfo.getShortId())) { + continue; + } + // Method args + int lvtIndex = mth.getAccessFlags().isStatic() ? 0 : 1; + int lastArgLvIndex = lvtIndex - 1; + List args = collectMethodArgs(mth); + for (VarNode arg : args) { + int lvIndex = arg.getReg() - args.get(0).getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); + String key = rawClassName + methodInfo.getShortId() + + JadxCodeRef.forVar(arg.getReg(), arg.getSsa()); + if (mappedMethodArgsAndVars.containsKey(key)) { + visitMethodArg(mappingTree, classPath, methodName, methodDesc, args.indexOf(arg), lvIndex); + mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, mappedMethodArgsAndVars.get(key)); + mappedMethodArgsAndVars.remove(key); + } + lastArgLvIndex = lvIndex; + lvtIndex++; + // Not checking for comments since method args can't have any + } + // Method vars + List> vars = collectMethodVars(mth); + for (SimpleEntry entry : vars) { + VarNode var = entry.getKey(); + int offset = entry.getValue(); + int lvIndex = lastArgLvIndex + var.getReg() + (mth.getAccessFlags().isStatic() ? 0 : 1); + String key = rawClassName + methodInfo.getShortId() + + JadxCodeRef.forVar(var.getReg(), var.getSsa()); + if (mappedMethodArgsAndVars.containsKey(key)) { + visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvtIndex, lvIndex, offset); + mappingTree.visitDstName(MappedElementKind.METHOD_VAR, 0, mappedMethodArgsAndVars.get(key)); + } + key = rawClassName + methodInfo.getShortId() + JadxCodeRef.forInsn(offset); + if (comments.containsKey(key)) { + visitMethodVar(mappingTree, classPath, methodName, methodDesc, lvtIndex, lvIndex, offset); + mappingTree.visitComment(MappedElementKind.METHOD_VAR, comments.get(key)); + } + lvtIndex++; + } + } + } + + MappingWriter writer = MappingWriter.create(path, mappingFormat); + mappingTree.accept(writer); + mappingTree.visitEnd(); + writer.close(); + } catch (IOException e) { + LOG.error("Failed to save deobfuscation map file '{}'", path.toAbsolutePath(), e); + } + } + + private void visitField(MemoryMappingTree tree, String classPath, String srcName, String srcDesc) { + tree.visitClass(classPath); + tree.visitField(srcName, srcDesc); + } + + private void visitMethod(MemoryMappingTree tree, String classPath, String srcName, String srcDesc) { + tree.visitClass(classPath); + tree.visitMethod(srcName, srcDesc); + } + + private void visitMethodArg(MemoryMappingTree tree, String classPath, String methodSrcName, String methodSrcDesc, int argPosition, + int lvIndex) { + visitMethod(tree, classPath, methodSrcName, methodSrcDesc); + tree.visitMethodArg(argPosition, lvIndex, null); + } + + private void visitMethodVar(MemoryMappingTree tree, String classPath, String methodSrcName, String methodSrcDesc, int lvtIndex, + int lvIndex, int startOpIdx) { + visitMethod(tree, classPath, methodSrcName, methodSrcDesc); + tree.visitMethodVar(lvtIndex, lvIndex, startOpIdx, null); + } +} diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index 6b86016f5f6..d62c78f4658 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -84,7 +84,6 @@ import jadx.api.ResourceFile; import jadx.api.plugins.utils.CommonFileUtils; import jadx.core.Jadx; -import jadx.core.deobf.Deobfuscator; import jadx.core.dex.nodes.RootNode; import jadx.core.utils.ListUtils; import jadx.core.utils.StringUtils; @@ -96,6 +95,7 @@ import jadx.gui.jobs.ExportTask; import jadx.gui.jobs.ProcessResult; import jadx.gui.jobs.TaskStatus; +import jadx.gui.plugins.mappings.MappingExporter; import jadx.gui.plugins.quark.QuarkDialog; import jadx.gui.settings.JadxProject; import jadx.gui.settings.JadxSettings; @@ -354,12 +354,10 @@ private void saveProjectAs() { private void exportMappings(MappingFormat mappingFormat) { RootNode rootNode = wrapper.getDecompiler().getRoot(); - Deobfuscator deobfuscator = new Deobfuscator(rootNode); - deobfuscator.exportMappings( + new MappingExporter(rootNode).exportMappings( Paths.get(project.getProjectPath().getParent().toString(), "mappings" + (mappingFormat.hasSingleFile() ? "." + mappingFormat.fileExt : "")), - project.getCodeData(), - mappingFormat); + project.getCodeData(), mappingFormat); update(); } From 1a4d69390322aa2789c84ba906683be8fcf00d40 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Sat, 11 Jun 2022 20:53:19 +0200 Subject: [PATCH 21/22] Make mapping export async; make export menu only clickable when everything is loaded --- .../src/main/java/jadx/gui/ui/MainWindow.java | 28 +++++++++++++------ .../resources/i18n/Messages_de_DE.properties | 1 + .../resources/i18n/Messages_en_US.properties | 1 + .../resources/i18n/Messages_es_ES.properties | 1 + .../resources/i18n/Messages_ko_KR.properties | 1 + .../resources/i18n/Messages_zh_CN.properties | 1 + .../resources/i18n/Messages_zh_TW.properties | 1 + 7 files changed, 25 insertions(+), 9 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index d62c78f4658..fab5c72d257 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -185,6 +185,7 @@ public class MainWindow extends JFrame { private DefaultTreeModel treeModel; private JRoot treeRoot; private TabbedPane tabbedPane; + private JMenu exportMappingsMenu; private HeapUsageBar heapUsageBar; private transient boolean treeReloading; @@ -309,6 +310,7 @@ private void newProject() { return; } closeAll(); + exportMappingsMenu.setEnabled(false); updateProject(new JadxProject(this)); } @@ -354,10 +356,15 @@ private void saveProjectAs() { private void exportMappings(MappingFormat mappingFormat) { RootNode rootNode = wrapper.getDecompiler().getRoot(); - new MappingExporter(rootNode).exportMappings( - Paths.get(project.getProjectPath().getParent().toString(), - "mappings" + (mappingFormat.hasSingleFile() ? "." + mappingFormat.fileExt : "")), - project.getCodeData(), mappingFormat); + + Thread exportThread = new Thread(() -> { + new MappingExporter(rootNode).exportMappings( + Paths.get(project.getProjectPath().getParent().toString(), + "mappings" + (mappingFormat.hasSingleFile() ? "." + mappingFormat.fileExt : "")), + project.getCodeData(), mappingFormat); + }); + + backgroundExecutor.execute(NLS.str("progress.export_mappings"), exportThread); update(); } @@ -420,6 +427,7 @@ private void openProject(Path path, Runnable onFinish) { } private void loadFiles(Runnable onFinish) { + exportMappingsMenu.setEnabled(false); if (project.getFilePaths().isEmpty()) { return; } @@ -433,6 +441,7 @@ private void loadFiles(Runnable onFinish) { } checkLoadedStatus(); onOpen(); + exportMappingsMenu.setEnabled(true); onFinish.run(); }); } @@ -844,10 +853,11 @@ public void actionPerformed(ActionEvent e) { }; exportMappingsAsEnigmaDir.putValue(Action.SHORT_DESCRIPTION, "Enigma directory"); - JMenu exportMappingsAs = new JMenu(NLS.str("file.export_mappings_as")); - exportMappingsAs.add(exportMappingsAsTiny2); - exportMappingsAs.add(exportMappingsAsEnigma); - exportMappingsAs.add(exportMappingsAsEnigmaDir); + exportMappingsMenu = new JMenu(NLS.str("file.export_mappings_as")); + exportMappingsMenu.add(exportMappingsAsTiny2); + exportMappingsMenu.add(exportMappingsAsEnigma); + exportMappingsMenu.add(exportMappingsAsEnigmaDir); + exportMappingsMenu.setEnabled(false); Action saveAllAction = new AbstractAction(NLS.str("file.save_all"), ICON_SAVE_ALL) { @Override @@ -1035,7 +1045,7 @@ public void actionPerformed(ActionEvent e) { file.add(saveProjectAction); file.add(saveProjectAsAction); file.addSeparator(); - file.add(exportMappingsAs); + file.add(exportMappingsMenu); file.addSeparator(); file.add(saveAllAction); file.add(exportAction); diff --git a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties index bb9e9ef7433..30db55ebc76 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties @@ -37,6 +37,7 @@ tree.resources_title=Ressourcen tree.loading=Laden… progress.load=Laden +#progress.export_mappings= progress.decompile=Dekompilieren #progress.canceling=Canceling diff --git a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties index b203b6ddbe1..7e9715ffbde 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -37,6 +37,7 @@ tree.resources_title=Resources tree.loading=Loading... progress.load=Loading +progress.export_mappings=Exporting mappings progress.decompile=Decompiling progress.canceling=Canceling diff --git a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties index 5567dc3ad80..7c380f8d034 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties @@ -37,6 +37,7 @@ tree.resources_title=Recursos tree.loading=Cargando... progress.load=Cargando +#progress.export_mappings= progress.decompile=Decompiling #progress.canceling=Canceling diff --git a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties index 75cd25cacd3..2e6978832b4 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties @@ -37,6 +37,7 @@ tree.resources_title=리소스 tree.loading=로딩중... progress.load=로딩중 +#progress.export_mappings= progress.decompile=디컴파일 중 #progress.canceling=Canceling diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties index cfd4f258102..44c3af12dd4 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties @@ -37,6 +37,7 @@ tree.resources_title=资源文件 tree.loading=加载中... progress.load=正在加载 +#progress.export_mappings= progress.decompile=反编译中 progress.canceling=正在取消 diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties index 17fe4d833a4..5f641c61f3a 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties @@ -37,6 +37,7 @@ tree.resources_title=資源 tree.loading=載入中... progress.load=載入中 +#progress.export_mappings= progress.decompile=正在反編譯 progress.canceling=正在取消 From 86a6a506634a65e77556147c46abac0d4877feb8 Mon Sep 17 00:00:00 2001 From: Julian Burner Date: Sat, 11 Jun 2022 20:57:07 +0200 Subject: [PATCH 22/22] Fix export mappings menu field declaration position --- jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index fab5c72d257..c95c02764cb 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -177,6 +177,7 @@ public class MainWindow extends JFrame { private transient Action newProjectAction; private transient Action saveProjectAction; + private transient JMenu exportMappingsMenu; private JPanel mainPanel; private JSplitPane splitPane; @@ -185,7 +186,6 @@ public class MainWindow extends JFrame { private DefaultTreeModel treeModel; private JRoot treeRoot; private TabbedPane tabbedPane; - private JMenu exportMappingsMenu; private HeapUsageBar heapUsageBar; private transient boolean treeReloading;