From 037518a0850401f1af18a4d3a81be42a4d2f8b2e Mon Sep 17 00:00:00 2001 From: 02090095 Date: Sat, 24 Feb 2024 23:06:49 +0300 Subject: [PATCH] no message --- .idea/workspace.xml | 17 +- .../SAPFOR/Json/SapforPackage_json.java | 150 +++++------------- .../SAPFOR/Json/SapforVersion_json.java | 16 +- .../SAPFOR/SapforTask/SapforTask.java | 65 ++++---- .../UI/ConfigurationSummary.java | 29 ---- .../SapforTasksPackage/UI/GroupSummary.java | 15 -- .../SapforTasksPackage/UI/MatchesSummary.java | 24 --- .../SapforTasksPackage/UI/PackageSummary.java | 2 +- .../SapforTasksPackage/UI/SapforTaskNode.java | 27 ++++ .../SapforTasksPackage/UI/VersionSummary.java | 14 +- .../{DoneStateSummary.png => Done.png} | Bin ...orsStateSummary.png => DoneWithErrors.png} | Bin src/icons/versions/{Group.png => Package.png} | Bin src/icons/versions/Unknown.png | Bin 1363 -> 795 bytes src/icons/versions/UnknownStateSummary.png | Bin 561 -> 0 bytes 15 files changed, 125 insertions(+), 234 deletions(-) delete mode 100644 src/TestingSystem/SAPFOR/SapforTasksPackage/UI/ConfigurationSummary.java delete mode 100644 src/TestingSystem/SAPFOR/SapforTasksPackage/UI/GroupSummary.java delete mode 100644 src/TestingSystem/SAPFOR/SapforTasksPackage/UI/MatchesSummary.java create mode 100644 src/TestingSystem/SAPFOR/SapforTasksPackage/UI/SapforTaskNode.java rename src/icons/versions/{DoneStateSummary.png => Done.png} (100%) rename src/icons/versions/{ErrorsStateSummary.png => DoneWithErrors.png} (100%) rename src/icons/versions/{Group.png => Package.png} (100%) delete mode 100644 src/icons/versions/UnknownStateSummary.png diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 8642db2e..9a9bb9f9 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -7,16 +7,21 @@ - + - - + + + - - + + + + + + diff --git a/src/TestingSystem/SAPFOR/Json/SapforPackage_json.java b/src/TestingSystem/SAPFOR/Json/SapforPackage_json.java index 4382db51..b0ca0b68 100644 --- a/src/TestingSystem/SAPFOR/Json/SapforPackage_json.java +++ b/src/TestingSystem/SAPFOR/Json/SapforPackage_json.java @@ -3,13 +3,12 @@ import GlobalData.Tasks.TaskState; import TestingSystem.SAPFOR.SapforPackage.SapforPackage; import TestingSystem.SAPFOR.SapforTask.MatchState; import TestingSystem.SAPFOR.SapforTask.SapforTask; -import TestingSystem.SAPFOR.SapforTasksPackage.UI.*; +import TestingSystem.SAPFOR.SapforTasksPackage.UI.PackageSummary; import com.google.gson.annotations.Expose; import javax.swing.tree.DefaultMutableTreeNode; import java.io.Serializable; import java.nio.file.Paths; -import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Vector; @@ -38,7 +37,8 @@ public class SapforPackage_json implements Serializable { public LinkedHashMap> sortedTasks = new LinkedHashMap<>(); // public LinkedHashMap>>> sortedTasks = new LinkedHashMap<>(); //-- задачи, отсортированные для сравнения. - public LinkedHashMap>>>> comparisonSortedTasks = new LinkedHashMap<>(); + // public LinkedHashMap>>>> comparisonSortedTasks = new LinkedHashMap<>(); + public LinkedHashMap>> comparisonSortedTasks = new LinkedHashMap<>(); //---- //--------- public void DropComparison() { @@ -46,9 +46,13 @@ public class SapforPackage_json implements Serializable { comparison_root = null; comparisonSortedTasks.clear(); for (SapforTask task : allTasks.values()) - task.match = MatchState.NotMatch; + task.matchState = MatchState.NotMatch; } public void SortTasks() { + //-- СБРОС СРАВНЕНИЯ + for (SapforTask task: allTasks.values()) + task.matchState = MatchState.Unknown; + //-- sortedTasks.clear(); for (TaskState state : TaskState.values()) { Vector stateTasks = new Vector<>(); @@ -60,119 +64,29 @@ public class SapforPackage_json implements Serializable { sortedTasks.put(state, stateTasks); } } - public void SortTasksForComparison() { comparisonSortedTasks.clear(); - //раскидать задачи по состояниям, конфигам, группам for (MatchState matchState : MatchState.values()) { - System.out.println("match_state=" + matchState.toString()); - LinkedHashMap>>> state_tasks = new LinkedHashMap<>(); - comparisonSortedTasks.put(matchState, state_tasks); - //-- + LinkedHashMap> match_state_tasks = new LinkedHashMap<>(); + //- for (TaskState state : TaskState.values()) { - LinkedHashMap>> configuration_tasks = new LinkedHashMap<>(); - state_tasks.put(state, configuration_tasks); - //-- + Vector stateTasks = new Vector<>(); for (SapforTask task : tasks) { - // if (matchState.equals(MatchState.Unknown)) { - if (task.match.equals(matchState) && task.state.equals(state)) { - LinkedHashMap> groups_tasks = null; - if (configuration_tasks.containsKey(task.sapfor_configuration_id)) { - groups_tasks = configuration_tasks.get(task.sapfor_configuration_id); - } else { - groups_tasks = new LinkedHashMap<>(); - configuration_tasks.put(task.sapfor_configuration_id, groups_tasks); - } - Vector tasks = null; - if (groups_tasks.containsKey(task.group_description)) { - tasks = groups_tasks.get(task.group_description); - } else { - tasks = new Vector<>(); - groups_tasks.put(task.group_description, tasks); - } - tasks.add(task); - } - // } - } - } - //-- - } - //рассортировать задачи в группах по ключам. - for (MatchState matchState : MatchState.values()) { - LinkedHashMap>>> state_tasks = comparisonSortedTasks.get(matchState); - for (TaskState state : TaskState.values()) { - LinkedHashMap>> configuration_tasks = state_tasks.get(state); - for (int configuration_id : configuration_tasks.keySet()) { - LinkedHashMap> groups_tasks = configuration_tasks.get(configuration_id); - for (String group : groups_tasks.keySet()) { - Vector tasks_ = groups_tasks.get(group); - tasks_.sort(Comparator.comparing(SapforTask::getUniqueKey)); - } + if (task.state.equals(state) && task.matchState.equals(matchState)) + stateTasks.add(task); + } + if (!stateTasks.isEmpty()) { + match_state_tasks.put(state, stateTasks); } } + comparisonSortedTasks.put(matchState, match_state_tasks); } } - public void buildComparisonTree(SapforPackage package_in) { - comparison_root = new PackageSummary(); - for (MatchState match_state : comparisonSortedTasks.keySet()) { - //-- - MatchesSummary matchesSummary = new MatchesSummary(match_state); - //--- - LinkedHashMap>>> task_states = comparisonSortedTasks.get(match_state); - //--- - for (TaskState state : task_states.keySet()) { - //-- - StateSummary stateSummary = new StateSummary(state); - //-- - LinkedHashMap>> tasksByConfigurations = task_states.get(state); - for (int configuration_id : tasksByConfigurations.keySet()) { - //-- - DefaultMutableTreeNode configurationNode = null; - //-- - LinkedHashMap> groups_tasks = tasksByConfigurations.get(configuration_id); - for (String group : groups_tasks.keySet()) { - //-- - GroupSummary groupSummary = new GroupSummary(group); - //-- - for (SapforTask task : groups_tasks.get(group)) { - //-- - stateSummary.count++; - matchesSummary.count++; - comparison_root.count++; - //-- - if (configurationNode == null) { - configurationNode = new ConfigurationSummary(configuration_id, task); - } - //-- - groupSummary.add(task.getVersionsTree( - Paths.get(package_in.getLocalWorkspace().getAbsolutePath(), - String.valueOf(task.set_id), - String.valueOf(configuration_id)).toFile()) - ); - } - if (configurationNode != null) - configurationNode.add(groupSummary); - } - stateSummary.add(configurationNode); - } - if (stateSummary.count > 0) { - matchesSummary.add(stateSummary); - } - } - //--- - if (matchesSummary.count > 0) { - comparison_root.add(matchesSummary); - } - } - } - //-- - // public public void buildTree(SapforPackage package_in) { root = new PackageSummary(); root.count = package_in.package_json.allTasks.size(); //-- for (TaskState state : sortedTasks.keySet()) { - StateSummary stateSummary = new StateSummary(state); Vector tasks = sortedTasks.get(state); //- if (state.equals(TaskState.DoneWithErrors)) @@ -184,10 +98,34 @@ public class SapforPackage_json implements Serializable { String.valueOf(task.set_id), String.valueOf(task.sapfor_configuration_id) ).toFile()); - stateSummary.add(taskNode); - stateSummary.count++; + root.add(taskNode); } - root.add(stateSummary); + } + } + public void buildComparisonTree(SapforPackage package_in) { + comparison_root = new PackageSummary(); + comparison_root.count = package_in.package_json.allTasks.size(); + //-- + for (MatchState match_state : comparisonSortedTasks.keySet()) { + // MatchesSummary matchesSummary = new MatchesSummary(match_state); + LinkedHashMap> task_states = comparisonSortedTasks.get(match_state); + //--- + for (TaskState state : task_states.keySet()) { + Vector tasks = task_states.get(state); + //- + if (state.equals(TaskState.DoneWithErrors)) + comparison_root.errors_count += tasks.size(); + //- + for (SapforTask task : tasks) { + DefaultMutableTreeNode taskNode = task.getNode(Paths.get( + package_in.getLocalWorkspace().getAbsolutePath(), + String.valueOf(task.set_id), + String.valueOf(task.sapfor_configuration_id) + ).toFile()); + comparison_root.add(taskNode); + } + } + } } } diff --git a/src/TestingSystem/SAPFOR/Json/SapforVersion_json.java b/src/TestingSystem/SAPFOR/Json/SapforVersion_json.java index 6bdaacca..1ee9b71e 100644 --- a/src/TestingSystem/SAPFOR/Json/SapforVersion_json.java +++ b/src/TestingSystem/SAPFOR/Json/SapforVersion_json.java @@ -36,6 +36,8 @@ public class SapforVersion_json implements Serializable { //-- public SapforTask task = null; //родная задача. Нужна для построения дерева версий. public db_project_info project = null; + //-- + public SapforVersionState state = SapforVersionState.Empty; public SapforVersionMatchState matchState = SapforVersionMatchState.Unknown; //-- public SapforVersion_json(String version_in, String description_in) { @@ -46,12 +48,12 @@ public class SapforVersion_json implements Serializable { version = version_in.substring(root_in.length() + 1); description = description_in; } - @Override - public String toString() { - return Home.getName() + " : " + Utils.Brackets(description); - } + public SapforVersionState init(File configurationRoot) { - SapforVersionState state = SapforVersionState.Empty; + //-- + state = SapforVersionState.Empty; + matchState = SapforVersionMatchState.Unknown; + //-- String relativePath = Global.isWindows ? Utils.toW(version) : version; Home = Paths.get(configurationRoot.getAbsolutePath(), relativePath).toFile(); files = new LinkedHashMap<>(); @@ -288,4 +290,8 @@ public class SapforVersion_json implements Serializable { project.db.Disconnect(); } } + @Override + public String toString() { + return Home.getName() + " : " + Utils.Brackets(description); + } } diff --git a/src/TestingSystem/SAPFOR/SapforTask/SapforTask.java b/src/TestingSystem/SAPFOR/SapforTask/SapforTask.java index bc325f7a..8fafc178 100644 --- a/src/TestingSystem/SAPFOR/SapforTask/SapforTask.java +++ b/src/TestingSystem/SAPFOR/SapforTask/SapforTask.java @@ -3,8 +3,9 @@ import Common.Constants; import Common.Database.DBObject; import Common.Utils.Utils; import GlobalData.Tasks.TaskState; -import TestingSystem.SAPFOR.Json.SapforVersionState; import TestingSystem.SAPFOR.Json.SapforVersion_json; +import TestingSystem.SAPFOR.SapforTasksPackage.UI.SapforPackageTreeNode; +import TestingSystem.SAPFOR.SapforTasksPackage.UI.SapforTaskNode; import TestingSystem.SAPFOR.SapforTasksPackage.UI.VersionSummary; import Visual_DVM_2021.Passes.PassCode_2021; import com.google.gson.annotations.Expose; @@ -35,8 +36,6 @@ public class SapforTask extends DBObject { @Expose public String codes = ""; @Expose - public TaskState state = TaskState.Inactive; - @Expose public long StartDate = 0; //дата начала выполнения @Expose public long ChangeDate = 0;//дата окончания выполнения @@ -51,13 +50,14 @@ public class SapforTask extends DBObject { @Description("IGNORE") @Expose public Vector variants = new Vector<>(); - //---------- + //------------------------------------------------- + @Expose + public TaskState state = TaskState.Inactive; @Description("IGNORE") - public MatchState match = MatchState.NotMatch; - // MatchState.Unknown; - //----------- + public MatchState matchState = MatchState.Unknown; //для сравнения. в обычном режиме всегда Unknown! + //-------------------------------------------------- public String getUniqueKey() { - return group_description + "_" + test_description + "_" +sapfor_configuration_id; + return group_description + "_" + test_description + "_" + sapfor_configuration_id; } public String getSummary() { Vector lines = new Vector<>(); @@ -77,26 +77,24 @@ public class SapforTask extends DBObject { //-- for (SapforVersion_json version_json : versions) { version_json.task = this; - // System.out.println(version_json.version); + // System.out.println(version_json.version); //- - child = new VersionSummary(version_json, version_json.init(configurationRoot)); + version_json.init(configurationRoot); + child = new VersionSummary(version_json); if (parent == null) { root = child; parent = child; } else { - // if (!child.state.equals(SapforVersionState.Empty)) { - parent.add(child); - parent = child; - // } + parent.add(child); + parent = child; } //- } if (parent != null) { for (SapforVersion_json version_json : variants) { version_json.task = this; - // if (!child.state.equals(SapforVersionState.Empty)) { - parent.add(new VersionSummary(version_json, version_json.init(configurationRoot))); - // } + version_json.init(configurationRoot); + parent.add(new VersionSummary(version_json)); } } //-- @@ -119,7 +117,7 @@ public class SapforTask extends DBObject { super.SynchronizeFields(object); SapforTask t = (SapforTask) object; id = t.id; - set_id= t.set_id; + set_id = t.set_id; sapfor_configuration_id = t.sapfor_configuration_id; sapfortaskspackage_id = t.sapfortaskspackage_id; //- @@ -141,12 +139,6 @@ public class SapforTask extends DBObject { } return String.join("→", versionsLines); } - /* - @Override - public boolean isVisible() { - return Current.HasSapforTasksPackage() && Current.getSapforTasksPackage().id == this.sapfortaskspackage_id; - } - */ public LinkedHashMap getSortedVersions() { LinkedHashMap res = new LinkedHashMap<>(); for (SapforVersion_json version_json : versions) @@ -185,8 +177,8 @@ public class SapforTask extends DBObject { return; } } - match = MatchState.Match; - task2.match = MatchState.Match; + matchState = MatchState.Match; + task2.matchState = MatchState.Match; } } public Date getStartDate() { @@ -198,14 +190,14 @@ public class SapforTask extends DBObject { @Override public String toString() { return - "группа "+Utils.Brackets(group_description)+" тест "+Utils.Brackets(test_description)+" конфигурация "+Utils.Brackets(sapfor_configuration_id); - // getUniqueKey(); + "группа " + Utils.Brackets(group_description) + " тест " + Utils.Brackets(test_description) + " конфигурация " + Utils.Brackets(sapfor_configuration_id); + // getUniqueKey(); } - public String getPassesInfo(){ + public String getPassesInfo() { String res = ""; - String [] data = codes.split(" "); + String[] data = codes.split(" "); Vector strings = new Vector<>(); - for (String code_s: data){ + for (String code_s : data) { PassCode_2021 code = PassCode_2021.valueOf(code_s); strings.add(Utils.Brackets(code.getDescription())); } @@ -213,12 +205,13 @@ public class SapforTask extends DBObject { } //--- public DefaultMutableTreeNode getNode(File configurationRoot) { - DefaultMutableTreeNode res = new DefaultMutableTreeNode(this); - DefaultMutableTreeNode flags_info = new DefaultMutableTreeNode("флаги: "+this.flags); - DefaultMutableTreeNode passes_info = new DefaultMutableTreeNode("проходы: "+getPassesInfo()); + SapforPackageTreeNode res = new SapforTaskNode(this); //- - int total_versions_count = versions.size()+variants.size(); - DefaultMutableTreeNode versions_info = new DefaultMutableTreeNode("версии: "+total_versions_count); + DefaultMutableTreeNode flags_info = new DefaultMutableTreeNode("флаги: " + this.flags); + DefaultMutableTreeNode passes_info = new DefaultMutableTreeNode("проходы: " + getPassesInfo()); + //- + int total_versions_count = versions.size() + variants.size(); + DefaultMutableTreeNode versions_info = new DefaultMutableTreeNode("версии: " + total_versions_count); versions_info.add(getVersionsTree(configurationRoot)); //-- res.add(flags_info); diff --git a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/ConfigurationSummary.java b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/ConfigurationSummary.java deleted file mode 100644 index 18b1629a..00000000 --- a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/ConfigurationSummary.java +++ /dev/null @@ -1,29 +0,0 @@ -package TestingSystem.SAPFOR.SapforTasksPackage.UI; -import Common.Constants; -import Common.Utils.Utils; -import TestingSystem.SAPFOR.SapforTask.SapforTask; -import Visual_DVM_2021.Passes.PassCode_2021; - -import java.util.Arrays; -import java.util.Vector; -public class ConfigurationSummary extends SapforPackageTreeNode { - public int configuration_id = Constants.Nan; - public String flags = ""; - public Vector codes_descriptions = new Vector<>(); - public ConfigurationSummary(int configuration_id_in, SapforTask task) { - configuration_id = configuration_id_in; - flags = task.flags; - Vector codes_s = new Vector<>(Arrays.asList(task.codes.split(" "))); - for (int i = 1; i < codes_s.size(); ++i) { - codes_descriptions.add(Utils.Brackets(PassCode_2021.valueOf(codes_s.get(i)).getDescription())); - } - } - @Override - public String toString() { - return flags + " " + String.join("→", codes_descriptions); - } - @Override - public String getImageKey() { - return "Configuration"; - } -} diff --git a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/GroupSummary.java b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/GroupSummary.java deleted file mode 100644 index 313f4a8a..00000000 --- a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/GroupSummary.java +++ /dev/null @@ -1,15 +0,0 @@ -package TestingSystem.SAPFOR.SapforTasksPackage.UI; -public class GroupSummary extends SapforPackageTreeNode { - public String group_name = ""; - @Override - public String getImageKey() { - return "Group"; - } - public GroupSummary(String group_name_in) { - group_name = group_name_in; - } - @Override - public String toString() { - return group_name; - } -} diff --git a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/MatchesSummary.java b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/MatchesSummary.java deleted file mode 100644 index 55f60b35..00000000 --- a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/MatchesSummary.java +++ /dev/null @@ -1,24 +0,0 @@ -package TestingSystem.SAPFOR.SapforTasksPackage.UI; -import TestingSystem.SAPFOR.SapforTask.MatchState; -public class MatchesSummary extends SapforPackageTreeNode { - public MatchState state; - public int count = 0; - public MatchesSummary(MatchState state_in) { - state = state_in; - } - @Override - public String toString() { - return state.getDescription() + " : " + count; - } - @Override - public String getImageKey() { - switch (state) { - case Match: - return "Match"; - case NotMatch: - return "NotMatch"; - default: - return "Unknown"; - } - } -} diff --git a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/PackageSummary.java b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/PackageSummary.java index a25c4f1d..6888a041 100644 --- a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/PackageSummary.java +++ b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/PackageSummary.java @@ -5,7 +5,7 @@ public class PackageSummary extends SapforPackageTreeNode { public int errors_count=0; @Override public String getImageKey() { - return "UnknownStateSummary"; + return "Package"; } public PackageSummary() { } diff --git a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/SapforTaskNode.java b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/SapforTaskNode.java new file mode 100644 index 00000000..04ff2168 --- /dev/null +++ b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/SapforTaskNode.java @@ -0,0 +1,27 @@ +package TestingSystem.SAPFOR.SapforTasksPackage.UI; +import TestingSystem.SAPFOR.SapforTask.MatchState; +import TestingSystem.SAPFOR.SapforTask.SapforTask; +public class SapforTaskNode extends SapforPackageTreeNode { + public SapforTaskNode(SapforTask task_in) { + setUserObject(task_in); + } + @Override + public String getImageKey() { + SapforTask task = (SapforTask) getUserObject(); + //обычный режим + // if (task.matchState == MatchState.Unknown) { + switch (task.state) { + case Done: + return "Done"; + case DoneWithErrors: + return "DoneWithErrors"; + default: + return "Unknown"; + } + // } + //режим сравнения. + // else { + // return "Unknown"; + // } + } +} diff --git a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/VersionSummary.java b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/VersionSummary.java index bd0739b5..30b2b55a 100644 --- a/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/VersionSummary.java +++ b/src/TestingSystem/SAPFOR/SapforTasksPackage/UI/VersionSummary.java @@ -2,21 +2,11 @@ package TestingSystem.SAPFOR.SapforTasksPackage.UI; import TestingSystem.SAPFOR.Json.SapforVersionState; import TestingSystem.SAPFOR.Json.SapforVersion_json; public class VersionSummary extends SapforPackageTreeNode { - public String version_name = ""; - public String version_description = ""; - public SapforVersionState state = SapforVersionState.Empty; - public VersionSummary(SapforVersion_json version_json, SapforVersionState state_in) { + public VersionSummary(SapforVersion_json version_json) { setUserObject(version_json); - version_name = version_json.Home.getName(); - version_description = version_json.description; - state = state_in; } @Override public String getImageKey() { - return state.toString(); - } - @Override - public String toString() { - return version_name + " : " + version_description; + return ((SapforVersion_json)getUserObject()).state.toString(); } } diff --git a/src/icons/versions/DoneStateSummary.png b/src/icons/versions/Done.png similarity index 100% rename from src/icons/versions/DoneStateSummary.png rename to src/icons/versions/Done.png diff --git a/src/icons/versions/ErrorsStateSummary.png b/src/icons/versions/DoneWithErrors.png similarity index 100% rename from src/icons/versions/ErrorsStateSummary.png rename to src/icons/versions/DoneWithErrors.png diff --git a/src/icons/versions/Group.png b/src/icons/versions/Package.png similarity index 100% rename from src/icons/versions/Group.png rename to src/icons/versions/Package.png diff --git a/src/icons/versions/Unknown.png b/src/icons/versions/Unknown.png index 7b7d2bd339de883f5fb5b88c8c75ed57980b77c2..46950ecb68e0cd72ab51ee1de0615f6364f79b14 100644 GIT binary patch delta 742 zcmV z36yQviEKMaVW-MO4-@9azrYPPH`rmv9b|4I17W3Z!n%VNN~wnzUf$1#hv)l+7qwc= zQLR=nK0Xf9G%+?dHfk8gW1i;^e^{3N&a&)LFc^HV>-ws$>lwo^Fg-mD%d$`^m4MC7 zO-H3tfoYnYBuQmL$Qgju4pv6-4Y2QzbK`zD5Z}m zrA3#^wGE)r;;O2?wJghL+cr?GR$-cExdpvm@7G8qV)XU(Ar^}v7K=eqe-uO_kx94P z{j=qz)9H2Fwh0y%77|XU^EZGd!!V6hDmAI9Dw4@0_51zzL!r>!nVA_bolaw5VBld} z%f{T?TpHPI_DSoJ)Q4RaJFzVqyY{qQreZ z-DAIa%E+O!OqSO3Wb6v91g$f*zmb5 z%LP#sM|qzA(9UF8-d|c;^4qoz?CtG2EX#sn7;Z{wg%DEjsQRbv-Vg-gMJ|`~7mLNq z&$PR{>)6`b!c|oSJOY86l+rbpWj_)^eh@-VIF9=)isExcQL>3d0=Zlci;IgWl}h+O Y07Mr56vM&*m;e9(07*qoM6N<$g6w)(x&QzG delta 1314 zcmV+-1>O3a2Ga^5iBL{Q4GJ0x0000DNk~Le0000P0000P2nGNE0L1BqW04_4e+1b{ zL_t(|+MJb3Y!g=)g^y=EGZ~Lxad2WMG}vRu@gshgm?1`L(U>>^94WR82(?us8j)l{ ztVYNrWn&=~s)Tmos38);8jl^3jT=P*sfA5drK(i5Kp%^u@@Pp4Qc2rgD;A}T0xHHN zri)*9anCv5z4yO&2C^(uvMfWEe`U0g@ykm&@VUv14_8eSN!qK3~pcGA*+# z`!mBZ_gR*`+0@kZg~#KWjmP8t>2z8%H8llElCZF_fKsW1$C zNt?|Ep63~}+3e72wHbv%e{rwMj_yrNOgQuT{1XT{H8n->Jb$@Ttk>&5Zf$MVTPzl| zx3}Z*Xt&$3Wy=DKL?VG$EGCd7`B!B|S6A2Qf6UAbFgZEN>U6qi zZjs$?ACJXiaJgI<9v+4u2qI0>ml=lnmSx$G`uh58M~)mpG#Z5<2+(LW7pwH~r{l+u zt1&Pz&{Jjdfz@iYQ4|FL@caE5mSyk%SEJME3QngJJkP`7aG<`v{@rR9;o!l8No?P~ zJy$tF5X1wLBrgHDfB2}DD>Vj#A?Nq|;dDCTa=B1nUq4w5;`8|=SS*(17kv*5!>si8 z_wxe-14twi=;`TEavXQ9nzpgA@d|W0-K`gd+;F*E-l3r(3=a=O6h-hn|H1S0b#-;W zK&4XsRx3cQR^ROC=&*;wVGIoo;qc+ZFdB{TujipC>UXHsf9l&cexDu)g78Wzl|pZC zFH)%#+-`SfBcD>Kyo=`M=Fe+^D3!_;x7%IkbUG0Vh2Z!5)g(!-ZsgNwG*=M_1U{@0 za>HV=C^|bk5s5_LcDuc`_$(Gn0m)=CUgL4yZfhjjgS%h(@F6?CczQf1Z|Q*|kh2(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-w@E}nRCwBKQ@f7aFc2J)YZ(w+IHi3#BQCDED%Jf-ejz`T^r`Ycsazj|bb$fE z0^$gkEsErFnZ_h^jtLA_+Q(=HTB`ki|K)T#efG{lX$=6VstQV}Urp0|s;cTY5kX&T zT5Bk!007Jkn$PF&-z}HRwrydwhKQh=&G2EneOW9PKQ5QcPh(6OQc4wcUH6?r2*YeP z!{cUyd{Rm{9*?N&dR^D`I_EPx>wg%IGqhjR|jx$^G4M+gDKFl@C_>MSBiDIp6K5ioOUo`RVXW6V8g5|NRJ zkWxa75lSgAGeQU@PM@baYwbwhdzVszh(K#yh_Zq#e~PT8?|VnqTF1-~5vZ&GsdsBF z#&ImZV~oW@jL}iobJ=!w?rahiJ7f2rZi8N zDdXN=6oL@K5M%sr)20OXNUr&TthHm_^;?1*Z|&q7082*euJ8MD+wOh+W~ki6)oOL7 z&BMdjr|0Lt>-GAHncooHs+k@l`g1rOzWo~jK5h{+l38Z`00000NkvXXu0mjfWt8uc