From 0d007e573724728f806c85f41021d9ca3df56cbf Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sun, 24 Feb 2019 13:15:30 +0100 Subject: [PATCH] tree construction improvement --- .../src/org/diylc/netlist/Tree.java | 11 +- .../src/org/diylc/netlist/TreeLeaf.java | 5 +- diylc/diylc-library/lib/diylc-core.jar | Bin 262375 -> 262463 bytes .../components/AbstractLeadedComponent.java | 1 + .../netlist/AbstractNetlistAnalyzer.java | 352 +++++++++++------- .../diylc/netlist/GuitarDiagramAnalyzer.java | 2 +- diylc/diylc-swing/lib/diylc-core.jar | Bin 262375 -> 262463 bytes diylc/diylc-swing/library/main.jar | Bin 610672 -> 611909 bytes 8 files changed, 234 insertions(+), 137 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/netlist/Tree.java b/diylc/diylc-core/src/org/diylc/netlist/Tree.java index dbaf7246..33dc26f3 100644 --- a/diylc/diylc-core/src/org/diylc/netlist/Tree.java +++ b/diylc/diylc-core/src/org/diylc/netlist/Tree.java @@ -30,6 +30,11 @@ public class Tree { private TreeConnectionType connectionType; private TreeLeaf leaf; + public Tree(TreeConnectionType connectionType) { + this.children = new ArrayList(); + this.connectionType = connectionType; + } + public Tree(TreeLeaf leaf) { this.leaf = leaf; } @@ -43,9 +48,13 @@ public class Tree { return children; } - public void trimChildren(int count) { + public void trimChildrenLeft(int count) { children = children.subList(count, children.size()); } + + public void trimChildrenRight(int count) { + children = children.subList(0, children.size() - count); + } public TreeConnectionType getConnectionType() { return connectionType; diff --git a/diylc/diylc-core/src/org/diylc/netlist/TreeLeaf.java b/diylc/diylc-core/src/org/diylc/netlist/TreeLeaf.java index f6135947..c2308e31 100644 --- a/diylc/diylc-core/src/org/diylc/netlist/TreeLeaf.java +++ b/diylc/diylc-core/src/org/diylc/netlist/TreeLeaf.java @@ -92,7 +92,10 @@ public class TreeLeaf implements ITree { @Override public String toString() { - return component.getName() + "." + component.getInternalLinkName(pointIndex1, pointIndex2); + String linkName = component.getInternalLinkName(pointIndex1, pointIndex2); + if (component.getName().equals(linkName)) + return linkName; + return component.getName() + "." + linkName; } public String toHTML() { diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index c61dc1915e95e94ba91d6cccf3a4b5665c10d069..57a48d4cc7e608051a2f4dd8d721c96faba7edfc 100644 GIT binary patch delta 8975 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 aEVvXRFt5}&j#g4gCXYJr)nqt$*8c%+y7>D5 delta 8835 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 WvjHAyvi>0@K=3S@W{^yaVEhM=Gcv~j diff --git a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java index 5fb28ef3..0bfd69f3 100644 --- a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java +++ b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java @@ -130,6 +130,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp : borderColor; } + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); g2d.setColor(finalBorderColor); g2d.draw(body); if (!outlineMode) { diff --git a/diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistAnalyzer.java b/diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistAnalyzer.java index a9fb74f9..b4ec4a2f 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistAnalyzer.java +++ b/diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistAnalyzer.java @@ -1,143 +1,224 @@ /* - - DIY Layout Creator (DIYLC). - Copyright (c) 2009-2018 held jointly by the individual authors. - - This file is part of DIYLC. - - DIYLC is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - DIYLC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with DIYLC. If not, see . - -*/ + * + * DIY Layout Creator (DIYLC). Copyright (c) 2009-2018 held jointly by the individual authors. + * + * This file is part of DIYLC. + * + * DIYLC is free software: you can redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * DIYLC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with DIYLC. If not, see + * . + */ package org.diylc.netlist; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.diylc.core.IDIYComponent; public abstract class AbstractNetlistAnalyzer { - public AbstractNetlistAnalyzer() { - } - - protected Tree constructTree(Netlist netlist, Node nodeA, Node nodeB) { - Tree tree = new Tree(new ArrayList(), TreeConnectionType.Parallel); - connectNodes(netlist, nodeA, nodeB, tree.getChildren(), null, new HashSet()); -// System.out.println(netlist.getSwitchSetup()); -// System.out.println(tree); + public AbstractNetlistAnalyzer() {} + + protected Tree constructTreeBetween(Netlist netlist, Node nodeA, Node nodeB) { + Tree tree = new Tree(TreeConnectionType.Parallel); + connectNodes(netlist, nodeA, nodeB, tree.getChildren(), new Tree(TreeConnectionType.Series), new HashSet()); + + // System.out.println(netlist.getSwitchSetup()); + // System.out.println(tree); + // + // System.out.println("opposite:"); + // Tree tree1 = new Tree(TreeConnectionType.Parallel); + // connectNodes(netlist, nodeB, nodeA, tree1.getChildren(), new Tree(TreeConnectionType.Series), + // new HashSet()); + // System.out.println(tree1); + return tree; } - - protected void connectNodes(Netlist netlist, Node nodeA, Node nodeB, List concurrentPaths, Tree currentPath, Set visited) { + + protected void connectNodes(Netlist netlist, Node nodeA, Node nodeB, List concurrentPaths, Tree currentPath, + Set visited) { if (nodeA == nodeB) { concurrentPaths.add(currentPath); return; - } - + } + Group groupA = findGroup(netlist, nodeA); - + if (groupA == null) return; - + if (groupA.getNodes().contains(nodeB)) { concurrentPaths.add(currentPath); return; } - - visited.add(nodeA); - + + visited.addAll(groupA.getNodes()); + + List newConcurrentPaths = new ArrayList(); + for (Node n : groupA.getNodes()) { IDIYComponent c = n.getComponent(); for (int i = 0; i < c.getControlPointCount(); i++) { if (i != n.getPointIndex() && c.getInternalLinkName(i, n.getPointIndex()) != null) { TreeLeaf l = new TreeLeaf(c, i, n.getPointIndex()); Node newNodeA = new Node(c, i); - if (!visited.contains(newNodeA)) { - visited.add(n); + if (!visited.contains(newNodeA)) { + // visited.add(n); Tree newCurrentPath = null; try { - if (currentPath == null) - newCurrentPath = new Tree(new ArrayList(), TreeConnectionType.Series); - else - newCurrentPath = (Tree) currentPath.clone(); + newCurrentPath = (Tree) currentPath.clone(); } catch (CloneNotSupportedException e) { } Tree newItem = new Tree(l); if (!newCurrentPath.getChildren().contains(newItem)) newCurrentPath.getChildren().add(newItem); -// if (!currentPath.contains(l)) -// newCurrentPath.add(l); + // if (!currentPath.contains(l)) + // newCurrentPath.add(l); Set newVisited = new HashSet(visited); - connectNodes(netlist, newNodeA, nodeB, concurrentPaths, newCurrentPath, newVisited); + connectNodes(netlist, newNodeA, nodeB, newConcurrentPaths, newCurrentPath, newVisited); } } } } - - if (concurrentPaths.size() < 2) + + if (newConcurrentPaths.size() == 0) return; + + + if (newConcurrentPaths.size() == 1) { + if (newConcurrentPaths.get(0).getConnectionType() == TreeConnectionType.Series) { + currentPath.getChildren().clear(); + currentPath.getChildren().addAll(newConcurrentPaths.get(0).getChildren()); + } else { + currentPath.getChildren().add(newConcurrentPaths.get(0)); + } + concurrentPaths.add(currentPath); + return; + } + + mergePaths(newConcurrentPaths, false); + concurrentPaths.addAll(newConcurrentPaths); + } + + protected void mergePaths(List paths, boolean backward) { + Map uniques = new HashMap(); + for (Tree t : paths) { + if (t.getConnectionType() != TreeConnectionType.Series) + continue; + Tree key = t.getChildren().get(backward ? t.getChildren().size() - 1 : 0); + Integer count = uniques.get(key); + uniques.put(key, count == null ? 1 : count + 1); + } - Tree jointSection = new Tree(new ArrayList(), TreeConnectionType.Series); - for (int i = 0; i < concurrentPaths.get(0).getChildren().size(); i++) { - Tree unique = concurrentPaths.get(0).getChildren().get(i); - boolean canMerge = true; - for (Tree t : concurrentPaths) { - if (t.getConnectionType() != TreeConnectionType.Series || t.getChildren().size() <= i || !t.getChildren().get(i).equals(unique)) { - canMerge = false; - break; + List unmerged = new ArrayList(paths); + + for (Map.Entry e : uniques.entrySet()) { + if (e.getValue() > 1) { + List pathsToMerge = new ArrayList(); + for (Tree t : paths) { + Tree key = t.getChildren().get(backward ? t.getChildren().size() - 1 : 0); + if (key.equals(e.getKey())) + pathsToMerge.add(t); + } + unmerged.removeAll(pathsToMerge); + + Tree jointStart = new Tree(new ArrayList(), TreeConnectionType.Series); + Tree jointFinish = new Tree(new ArrayList(), TreeConnectionType.Series); + + Tree unique = e.getKey(); + + for (int i = 0; i < pathsToMerge.get(0).getChildren().size(); i++) { + boolean canMerge = true; + unique = pathsToMerge.get(0).getChildren().get(backward ? pathsToMerge.get(0).getChildren().size() - i - 1 : i); + for (Tree t : pathsToMerge) { + if (t.getChildren().size() <= i || !t.getChildren().get(backward ? t.getChildren().size() - i - 1 : i).equals(unique)) { + canMerge = false; + break; + } + } + if (canMerge) + (backward ? jointFinish : jointStart).getChildren().add(unique); + else + break; + } + + for (int i = 0; i < pathsToMerge.get(0).getChildren().size(); i++) { + boolean canMerge = true; + unique = pathsToMerge.get(0).getChildren().get(backward ? i : pathsToMerge.get(0).getChildren().size() - i - 1); + for (Tree t : pathsToMerge) { + if (t.getChildren().size() <= i || !t.getChildren().get(backward ? 0 : pathsToMerge.get(0).getChildren().size() - 1).equals(unique)) { + canMerge = false; + break; + } + } + if (canMerge) + (backward ? jointStart : jointFinish).getChildren().add(unique); + else + break; + } + + if (!jointStart.getChildren().isEmpty() || !jointFinish.getChildren().isEmpty()) { + Tree mergedTree = new Tree(new ArrayList(), TreeConnectionType.Series); + Tree parallelSection = new Tree(new ArrayList(pathsToMerge), TreeConnectionType.Parallel); + if (!jointStart.getChildren().isEmpty()) { + mergedTree.getChildren().add(jointStart); + for (Tree t : parallelSection.getChildren()) { + t.trimChildrenLeft(jointStart.getChildren().size()); + } + } + mergedTree.getChildren().add(parallelSection); + if (!jointFinish.getChildren().isEmpty()) { + mergedTree.getChildren().add(jointFinish); + for (Tree t : parallelSection.getChildren()) { + t.trimChildrenRight(jointFinish.getChildren().size()); + } + } + paths.removeAll(pathsToMerge); + paths.add(mergedTree); } } - if (canMerge) - jointSection.getChildren().add(unique); - else - break; } - if (!jointSection.getChildren().isEmpty()) { - Tree mergedTree = new Tree(new ArrayList(), TreeConnectionType.Series); - mergedTree.getChildren().add(jointSection); - Tree parallelSection = new Tree(new ArrayList(concurrentPaths), TreeConnectionType.Parallel); - for (Tree t : parallelSection.getChildren()) { - t.trimChildren(jointSection.getChildren().size()); - } - mergedTree.getChildren().add(parallelSection); - concurrentPaths.clear(); - concurrentPaths.add(mergedTree); + + // try in the opposite direction for paths we haven't merged + if (!backward && !unmerged.isEmpty()) { + paths.removeAll(unmerged); + mergePaths(unmerged, true); + paths.addAll(unmerged); } } - - protected void findAllPaths(Netlist netlist, Node nodeA, Node nodeB, List currentPath, List> allPaths, Set visited) { + + protected void findAllPaths(Netlist netlist, Node nodeA, Node nodeB, List currentPath, + List> allPaths, Set visited) { if (nodeA == nodeB) { allPaths.add(currentPath); return; } - -// System.out.println("Finding path between " + nodeA + " and " + nodeB); - + + // System.out.println("Finding path between " + nodeA + " and " + nodeB); + Group groupA = findGroup(netlist, nodeA); - + if (groupA == null) return; - + if (groupA.getNodes().contains(nodeB)) { allPaths.add(currentPath); return; } - + for (Node n : groupA.getNodes()) { IDIYComponent c = n.getComponent(); for (int i = 0; i < c.getControlPointCount(); i++) { @@ -157,7 +238,7 @@ public abstract class AbstractNetlistAnalyzer { } } } - + protected Group findGroup(Netlist netlist, Node node) { for (Group g : netlist.getGroups()) if (g.getNodes().contains(node)) @@ -169,75 +250,76 @@ public abstract class AbstractNetlistAnalyzer { List res = new ArrayList(); for (Group g : netlist.getGroups()) { for (Node n : g.getNodes()) { - if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) && - (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) + && (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { res.add(g); break; } - } + } } return res; } - + protected List find(Set typeNames, String nodeName, Group group) { List res = new ArrayList(); - for (Node n : group.getNodes()) { - if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) && - (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + for (Node n : group.getNodes()) { + if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) + && (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { res.add(n); } - } - + } + return res; } - + protected List findGroups(Set typeNames, String nodeName, Netlist netlist) { List res = new ArrayList(); for (Group g : netlist.getGroups()) { - for (Node n : g.getNodes()) { - if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) && - (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + for (Node n : g.getNodes()) { + if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) + && (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { res.add(g); break; } - } + } } return res; } - - protected List findGroups(Set typeNames, String nodeName, Netlist netlist, Collection> belongTo) { + + protected List findGroups(Set typeNames, String nodeName, Netlist netlist, + Collection> belongTo) { List res = new ArrayList(); for (Group g : netlist.getGroups()) { - for (Node n : g.getNodes()) { - if ((belongTo == null || belongTo.contains(n.getComponent())) && - (typeNames.contains(n.getComponent().getClass().getCanonicalName())) && - (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + for (Node n : g.getNodes()) { + if ((belongTo == null || belongTo.contains(n.getComponent())) + && (typeNames.contains(n.getComponent().getClass().getCanonicalName())) + && (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { res.add(g); break; } - } + } } return res; } - + protected List find(Set typeNames, String nodeName, Netlist netlist) { List res = new ArrayList(); for (Group g : netlist.getGroups()) { - for (Node n : g.getNodes()) { - if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) && - (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + for (Node n : g.getNodes()) { + if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) + && (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { res.add(n); } - } + } } return res; } - + protected List find(Set typeNames, String nodeName, Netlist netlist, List inGroupWith) { List res = new ArrayList(); for (Group g : netlist.getGroups()) { - + boolean inGroup; if (inGroupWith == null) { inGroup = true; @@ -249,55 +331,57 @@ public abstract class AbstractNetlistAnalyzer { break; } } - - for (Node n : g.getNodes()) { - if (inGroup && typeNames.contains(n.getComponent().getClass().getCanonicalName()) && - (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + + for (Node n : g.getNodes()) { + if (inGroup && typeNames.contains(n.getComponent().getClass().getCanonicalName()) + && (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { res.add(n); } - } + } } return res; } - - protected List find(Set typeNames, String nodeName, Netlist netlist, Collection> belongTo) { + + protected List find(Set typeNames, String nodeName, Netlist netlist, + Collection> belongTo) { List res = new ArrayList(); - for (Group g : netlist.getGroups()) { - - for (Node n : g.getNodes()) { - if ((belongTo == null || belongTo.contains(n.getComponent())) && typeNames.contains(n.getComponent().getClass().getCanonicalName()) && - (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + for (Group g : netlist.getGroups()) { + + for (Node n : g.getNodes()) { + if ((belongTo == null || belongTo.contains(n.getComponent())) + && typeNames.contains(n.getComponent().getClass().getCanonicalName()) + && (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { res.add(n); } - } + } } return res; } - + protected boolean allMatch(Collection nodes, String name) { for (Node n : nodes) if (!n.getDisplayName().equalsIgnoreCase(name)) return false; - + return true; } - + protected boolean allComponentsMatch(Collection nodes, Set> components) { Set> extracted = extractComponents(nodes); return extracted.containsAll(components); } - + protected Set> extractComponents(Collection nodes) { Set> components = new HashSet>(); for (Node n : nodes) components.add(n.getComponent()); return components; } - + protected String extractName(IDIYComponent c) { return c.getName() + " " + c.getValueForDisplay(); } - + protected List extractNames(Collection> components) { List names = new ArrayList(); for (IDIYComponent c : components) @@ -305,13 +389,13 @@ public abstract class AbstractNetlistAnalyzer { Collections.sort(names); return names; } - + protected Netlist simplify(Netlist netlist, Set nodesToMerge, Collection nodesToPurge) { Netlist res = new Netlist(); res.getSwitchSetup().addAll(netlist.getSwitchSetup()); Group merged = new Group(); - + // merge for (Group g : netlist.getGroups()) { boolean needsMerging = false; @@ -330,28 +414,28 @@ public abstract class AbstractNetlistAnalyzer { res.getGroups().add(g.clone()); } } - + if (!merged.getNodes().isEmpty()) res.getGroups().add(merged); - + // purge for (Group g : res.getGroups()) { g.getNodes().removeAll(nodesToPurge); } - + System.out.println("Before:\n" + netlist); System.out.println("After:\n" + res); - + return res; } - + protected boolean intersect(List groups, Node node) { for (Group g : groups) if (g.getNodes().contains(node)) return true; return false; } - + protected Node intersect(List groups, Group group) { for (Group g : groups) for (Node node : group.getNodes()) diff --git a/diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramAnalyzer.java b/diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramAnalyzer.java index 98b81cda..58c8e350 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramAnalyzer.java +++ b/diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramAnalyzer.java @@ -164,7 +164,7 @@ public class GuitarDiagramAnalyzer extends AbstractNetlistAnalyzer implements IN } else { Node jackTip = jackTipNodes.get(0); Node jackSleeve = jackSleeveNodes.get(0); - return constructTree(netlist, jackTip, jackSleeve); + return constructTreeBetween(netlist, jackTip, jackSleeve); } } } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index c61dc1915e95e94ba91d6cccf3a4b5665c10d069..57a48d4cc7e608051a2f4dd8d721c96faba7edfc 100644 GIT binary patch delta 8975 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 aEVvXRFt5}&j#g4gCXYJr)nqt$*8c%+y7>D5 delta 8835 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 WvjHAyvi>0@K=3S@W{^yaVEhM=Gcv~j diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index f7145a038723979ed10f48ebca3db238736c9798..c6e00727891feffc4723484103f4a9f2d52fcb0a 100644 GIT binary patch delta 30276 zcmY)UbyVC>&p!^cEbQX$?pEBbSaElEcXwOd-4=IkX@TM`4n>PQ#U0vGyja_Z4}0Cu z`TqE4ax%#)nPigpoF(Vw^k3@f(bbiJ2qV{jzHfFZDlZ2B`Z-AQIaD zYd2FCfdR@%i44lb1S0sZ1&aUw)u^tJkcs~vZ&l&`pFd*gEHj8W^B#!)B9Dw9 z{Ibd-@V%^|2y8Fw2iV%YiO`4eAEUVp`7hcFQBE)pd?DOOz&OayTdFBi2xJoS8W{;lH9~?cvBmtiEFKAHSQTN8Gz+T?{-@WfbVX=*h9nm*5C>)T-knbx74!g8WK$WA!lpLsk9I?hl`xWe1q)+ zPccGc%VZ`^l9C!-!1?1(D$BtGRODv(p+aDd8S{{3O12`vn&Wrn>RPxC6! z^rKi&`A6mCEY;Fse9Us-eD2F0>cZ;uf+Ub$7N zjRtF*-ST*L?gZ_dR%_Gd_m&E4uvJkW2VgI|;|6FqMw5T^$^R~A-Kp-f%>Pt=H*&v_+K+*`w$)=)XWT|ced{s zba$ii2PSqnZR408WQnAid z4(geS)yg$r%_@?#j3~0Pc_GFz(5tYHEv3oIprHza1MPM{U}wvT!w02~GH3Y>aT%8e z8J^O7x9*L*p6N-FKgL#*oP_i(Fl(P+5qs&EL-t~c*=cZ3>w>%|u;`ht0fwP`UJ)mQ zkPbVi4jQkK#Ti>-jd8z#+%c=S(!~RewLw?;o)O1fmedvRsBudklnXtjfuCzAs5eDH zB2PL+s@T}f7V%iw)B`^CQP-eDDO8exeNH1K2>Ac{FzlA~NVZY>k;B3LmCEebqJ{pt zMZ$+v38R{4E-oIe2aiE3&CDE>a23<#vS;A&3sVWy6^%;O*Q8K2)wwDiNRbp&G_kHr zQdL$CV?IqXi>WWnP6}nS0Ad?lT$PJdM>bEZzZDh)b#!*#hh3C-^>Um*Y*qgmkb#yg9Hrt=(xHy6acvmEtXvsWQhI1-`SfT-1RYBa|gQ3AYCV|w8&XLXl8qAU* zH<1gGJCnb`36hZ1f?r-cP+U27oM9pXadu3?+S4Z&x=KaDIh~m9PU@;F5y;} zU=tOd4b_bO)cYSApa)!vKMV2VgC!8JE7ZSF^a8!Ri_ngM)szO#gI?VW0o4vTvxBka zj(aw@Cvt(_qeCCYzksdnXmMerrRU>JmOw1|xAtdCep1;y5W4<79qQdNs{h>Ub%lw) zm%@{I%hXo%`!mlzM0E#;9z%m=d~|I{kRtotzuz(Pet41O zBJ(iVJGUoUp|WJ&yDlntr)O;#YsVpRNCXT9(aidn*4%4C%=`Ly$6A_PIPo&L(WEDh zviu=wbg#eDddM6NSK+q1P$_H^QzFlGefZFMgwqk6@fkAjxfK=#8SrHvWF`%$=i=tX zisP3CiZOF*CeGpBxX5%2iC9u3R`i7bEfwdlad54^uS&yC@i#wP`+AdNZ*A2_IW4?A zC#^q4GeM^s%k};&0z!*uHp(AK^4EqfB>yBS*`ObMA^1UGr*nfVN$)n?&Fn zy2=S!f+XB+&E{!hNVC^!hk|?2g}pWIPiB6}bgh>DDN=9hJc(;WngXYQ9366`-}SSf zT~DQ~-M-2_n6^n}P&?33bntHC-$Yw=rytu!X>o_&;#7n$fW-Roywh>`qk&u>nT@T} zHXQE+G|#bt&GVIM-cDScu~8!16&z70neONs>9gK<*YACCAo{UAvuLCGY+09Xe9`b- zS)uZ`DMU)a^mW22(xQ?WIF{5OefPvn7#TKO-Ob-A$OLq!y9WnQQP2k|Wp0XK;htAes21+$+Si@fWsg=eahNs^ zY!x1jKPqvX6{-=+5$EA^XvKE1+H$>hb^LX>iZE^vksv$#82Px}^UZDyzA~MvG_2o| zv6!We6BeSmi~T)$n2=c&iXB$4R&i!%af(VCe^R2&wp^#54I{CoO*Brn1dVWh$u#5+ z>boXT6@Q?OETcH-i#b!YdeFgFGHw0z2S1JXdSb58ub{oED%wI&$eY0`uIumg@>P`R ziTPNzCOl;3gHa0wp3t{60nnE+8bfE4>j%)Ai~YX}#N5;AwRkCo-0F_JgBb$XXEa0x zfRJ@_<#tp8jW_j?6*0w$T!|-KAJ=m;${aQ5SSoUr#chMchZJk<813?j4M9F*uZy!I zqb$74eK-j!-?dSbr5xuWYw+;kR=HWXwskTR9Zf*;$^iy`g**)OKlVP)j0rLl%eU&2 zpwn+E<5W6SCpFR%ospg2(@z|18f)aKg!w2DzpB%jwjiO6B>St-&h{ziYhqH1P2erQ z6?#k%yfpxcp5{^^938B#9L({)i_jlVcw-oUhS0W8)gagI zwbUrXfr!#}C)H13CR)Bsgmg8`jk)o)U7el8lr&B@=lh2iVdMy&-z!L)V+Kn_XF=R4 zxJ5DF43ak~lvIRP1u_HvL>XUr(KY)GD+j&mhE%xOwA_zLWU+GZ%guFNS)IJ2uWPhn z$06Z9xhJxbYD$4J0GT`Jn~YZo0{_Wb&(X)H6MVoB3_^(!XjNFIkdyQe{P6UJp~%74 zlT*%bP{sitFG%7cX*XLSGo)DDdO;#(%AC?ftTG^~Ex_c4!T2Ys^^(Wg%GWVomp(#t zcZl|AElXihdVj5WBh#qgk0^~Hu0$@!b0$$)hLW=ql3?7kdFj^LG9Rutkzfn)1E&03 zWV2=SToSHCIn0aN963y{D?V3@zGWScPYkw$lIS?=WD#<_Twn~Rb2i6ww5KSBj_^lh zH75v^j$SFxJo-RDy+Eg@n$^nHM2+^Erkkaq)7#SvO=~o z3L6segF~wrgk_)%y77x7qSNM#_PfDNviKYM`mdH8cHuqBVtfSUD)K7~1|10`US}wD zd{m-UF{WE`+O=#d=H^ix@xqsmk!Nz7k5Y3s$7WrMGP|~?kw7aaeVu=dA3{x!kNLUfUCGQI)|}!PrZCm7y=C3~h1mlk8#`*lqG$aKG_+&3xhTwtztc=R>^H5XN{vUtu^8-+C0a$`5PYTbg*t9?x!b z)}Yg_SBDJla>BHeApSe;3q+M4QW>*8yMZd}aH$TviMvYqcifZx0xR1`>Fe93zS-dI zS{B!ZA-y4${0@U3OSPWH%J^doviBtnuGsAv|5AJ`YIpfn*4b}scQI7fnQuRKoXrhw zSaJ*`rQ(n=Up$QNfGn2e5_<6N1nW+wXkH~#6LkY zB|-XPZK@#hKKQpsXj`ipx7`NT<-LH1)J$VzC*Qs7DFs_z>9-H>EdqFcLflYf<2mOF zQbo5;k8+Dm2NdCL;A$)rG`ujRn#2j>zI+P`yxVl%Rc;T?3RCIXb#a_~XQp!4z?__< z)BupB$g1y|kr2nP?MP$aIY4(>5@_*db>Q5y-$p;Q!_1?mdv&kqHbH}Xd_C!P)3WH@ zv0jjf#;}5S1={OZujjw#g-l}hnYiW#spO} z=U|{+%QBa&lEk~d-5^W4*NO{_42je@(V7UcFry^(H8DK9#ZI}z)xWg)?4-c+Zc|}d zDYbZns&H>owesV9(aEaTke8j8lb4kqkHgw#%SVfg-5h?DwCD$CB}kBwCVw<7Un6xn zvcX{;(B=C65x6Sjeu!~jN*wq2NcdnW37NA}?6zI3DW($Yr(Dfwl@!Y#<+kDciV1M2 zb_k7rMU>v>S)%+eq-FS5r1ilM3g^9Qf38(D`>YX#L~)$?KXFq=mXZl&?BWiLuA&6j zL>}IXZEQArcLbCoHjsd7@Pwc4;oQ<*qALnfYeD=BvjHRbv2udF0@cbg<9k+O82Auul_+QK_>Fulf#?i6a`7C)ARWyd~e0RKsXB zj>+{AoO4zf?Tc#N4&9cq4*mWf91 z`m5Y0k)U-yL2%FNVzkdb%RuCt(f#it+~H6|8;Dcfy$uC4@77xU?+S_GwA=C7*NgL_ zJ!GcTiJLfagD$(*|BjnzwxO7%Iu%B7_kX6WL&msOHU=QKYnzGcvKR09ynz2`-0Rl^ z@O5@8OD4%mhl8_sk`aD5yYVMrijQ<9nCs`EwfFyoQ%Bm{aqR$O^(dOb--bt`+L4HK zu%x|SME>}%`UgIHmd(GgSuG*fYo_BGE=xy`(cBn*95bvSmO_Y39N~6}THWwBF4v!P zg$@)JYY4hBm1hYRJfReJYteNp!l^kkYnV+VkzpAGJ!g=`kt59aToPPlh{&a{Vz-Q) zb+zMo+7Rx#A}LZ#hm_eTcXZazL7FD4W;yuv(7ABMY+=D?K)1**)NE?GWRbwiI?xw!F8U-No2{mS!g6v~ zb{Y%mcg-7o&&>$P_TkT19SZzB5*jsR$TMhF^-Bw5ppyEV4{v@KsojjJzzNgdwo1^9 zj*8iy12aHt%9AXnZo|9WQQ$<`l>|OE^w2`E^{WN?%?~n{d)|=Ful@fp23i8`RN%XA z0$RjEh~EB+xFjJh$?vhE4LL)igf}eF(CQ?GkPUKrA!);lz5=xJQP{z&HeBq_van5w zAvBwK#q1;@1n(*cHj6=qISX%e+%^4f#l!+J4B{EZ0X{ctSlWmBI>>dp4U1$EfouRT zT+W8!3VQ6xhOTITi*y5h)1@1VM_PAwsqQy+X?KcT@?E4}HPzO0%~x23dPntLh<}D4 zQxSp59rl8ZTQ2Wz1#ueP?I?p}OaPPoXR-q6>ctH=IQTa*i##|p+GfE-`JXWd$^-RK z_Ep=juvmQwoiBe0zoUybo?@T1Q^I_s^n3Jg`fD3{kqJeGJEiXvqUenx+PkqyhQ{^t=_l7yK?Hzl`XC0sDH+W(=jrqzQ>?NS1t5S76SrtWj zW(@Yt6ZR}c1qHS*IBW+KRS5MK3(=y!N8foi=JFFq+HCXPLn&PaNckqQURm4dH9@Ew zsw6sH1<*Vf7Ir4$41RH|bX@seXvcpuaG$5hWxDaWa#8msVn4pk@?TLe1n&$`yN?k= zYld>`IOs{(-*UXW$YL-LNgiSUVj^qhsr3hUYzoJ{spWng;m$w&-czCVtGUk11IUC} zsH=gu=6CkT-`PnAA@qF3ICWk$mSPaCM$++0z}J}*&Y2)4lzZHnitn8r!+ZWj@at(4 z*9TNJthg59nOej9S%*|LW{fpq2w!-YalZFIa4!!(c<_ENH*%od&_`b3McAuFB?o+V z+Dj`$p*Q#P)bppTrM07ZG{3bVqN41HN@burP0+~P6P;wBG8LcFIwY3M1%HQ3#M3Tv zOG8UPr?s9jtM%oWAg=`G6l8~&U+1tyl+DJ$ld4@h~Nt)Rp zzMqE^iDQu9j?Fn*e1QKB)j8J6T_|S|Uy$O%kXj#~KgEwe+m-l#tP_g~jUP%{)gcbUMu`|t%-&49n}H>-!BSHL^-NL5&ucLE~bQ~W^g)-XZuKzysPqSBs5#rU&bMNi|N%4 zpAGtx?n(64E7Bbw8ve(`L(9kcPo^OQ?3f3*Po zO}))9%q+j{-ti#!fm4YV-7?Ff7+oizaDC#egGoxj5`L{gyJgP}goU-yG*V{id*jLj zQI3A9dEN~lYrDa$i&w>nZajXQgJ3^D?kg81kMj4JYE34onJ#7n%x!=4ZA9Yc1;6$8 z_Bqd)Aa=oVXbNko-p`~mvn|RWG2R^%%zX>V>idfjs+czwa{X_5`zTG0Xt8+y%5M?!#2HpI)NFzk`M}g<%HcfK1p_lZ0z>(IVltEYy5Fs8UI%w zs)`!0ySi6od~Za`ZN&Nef9?1%QFRN&=PXliWvE?ms8vYKO~{;s{ei}nMK;#aZW72R zqv((bfwC;#g9!0VlbrM?pG`#tRAD!I-B>O?+xO+2y>rHOE)Ztch+b^#)c2UxgGRh> z`zV|kpUD3LFuM8!NxD?LR4+apAm1@+IbP`B5^1Y6t=p@&Zg86^*6QamvPVK@N2}0K z--WjW+K*S{Gf8*IGc<`$nhE~`e+>wJ#~!$$=)yc$T1FZM)4dX~%aNrRuds42+3CXJa8hGVIc7_5OlwErWzp|Z+f-Xy z90qb%Kdmn}kpaIw*5*njtQG$FM&OT#WSZQn#jIa#Z4uSn$fh+hFvZfDT4H3!IbV|t zQkQ_p7&qHhD0lsu%04q8dSu62eT*;P{)vL=eo2;utODW)hpN`6-FO5qsVNu^l?eU7 zho4yIg^Y8x@7EuQHax%V!PKUo(oeNxVlku3Ic$+gpWMecMEb``t7-prt^}1yi}Py? zyA)Y}odb_t(Y0NV+)B&31e<`wTIL^m9_z@OL1VGAwEytOA;I}$q;lPXXbC#3ZX;Ie z5nm1{`?euOmcagA6W+HATGXk=_}eMz+A9;p?>~;I;cKuk-+Ho7c-`jDUfQBq`i@%* z2`Jcn+O&=+gs(a3-n0%Z#Ng(6O#$c>*ZHl2U^Ma6 zXigJZ8{36-qVRgCY4nLcysP_`Db1k;^$vX+u8V=wO_trlXeH%!YK+_Y2EVxv3aoF& zyMReGB@Wl~5?rg+PuH3}qMaS)RX2IRbd9yr7OrL2 zjFJmO@ZVD`T4jEb>+Y5%z#enH@;+SPy24gO>(kCSjt1F$NwMa$gf7N?^ES+`N}NH`PJETwrs!GngYpkDeRR$!KVC3(sT0zpA_wht$kDxY&|Glf}Px5UW zQBlQo0RKG57};&^%N4O#Z=9eU+$F2vBaSn;Xt z>de4Gjl1^0pn5DW2|}69AVzMFjJw`7Xqq&r5fWXvm-8%@h49fLU7N&CwN3x8T?&Av6@}x7mo0> z(-Y@Iz@MKkatsH4d8Lj9>aBPSfeB*53zJcaHivby-#7DHxJ3bG{#Y3n%5oPz@es?x zP^KzSDjJ2o)FD?iyof%EHMayie`-W=S}jL)vEQYZ^ep!M+2=&Fz!N6~hw!8~nChk% zRCwEs@x2+We-)LP6m${&+0ieNjsmWmsbn<>JgC1I6kTCNdKvkkTad@&U*ePE;=RYr z*Ke)TZyjTDv|Y@}aKgpU627)sxPk~dO%A%7RA2Vmz&on|+QyYP(N^+AUM{goQOgtf0@0mVI6UL9J;Y}F`NzGc?b`Baoro&L63f@5$g z>&q$kXxrZ!74^xULS(+1(&UK~_JuNbzS21xj}V5|>4I$*<_<*yV|v7PauEnx$M+Mw zEwraQ=Mv6XnoIONSr5EIZ6R)yKR9DbWuq0Z9?+46)o6IkXabn6Uum^%ncL5fPrK(C zKMhn$JLTY@SB&zWsh)oFByH!(Oofhhm=S;Jh?V1V-4~bUElpMU^N#V&>u{qYEh0mP zj%D!_&Z!z#6;})Uyn#DhcqbnNYQ zNTz*C?%XJ)%6tee?=iy;41w^Wlwfqqq`1&kITgNP(J4c##8G+G{%2eE;2u= zc>;4~t}5nIF$`FHB%EwQa`UCc@hfB>gtKveT?bjcRe;kSFTKPsXD%LRn>^Ia@aRuC zVI+e|7U@3m<~*R7B@4HG92pfiDuW7&uqdG*ejvqE73fXEtI^Sk zCkR=I`DOzlURU^ox7G=E1u}gcG(G)gxJ}LVt6!uJpX0XG=IHE9Dw%A39;d_j7kCWF`=BJK+^x_ ziJ(ycWWsi0a=;k)MFhI@XJi=&2X_mGVoM^DLOEps=+N%~WaM^gdcY3wMTVFuQLE#5 zq)7!28t(c(nRY>Dz&y+c3~qobj4~4j)V>_A9YqGP0^=R10Ekfk^RUeTzzcIwz!-px z_JT|#VS)*Ohl7&^zBu?|z1`OyK>iY&_8dpR(aQi+dzd%iJ^1CEoWTGo*sf0~U>fs< zCzk?9fI%;$1GZo>YAXhOeFD9{j8WN`ZrB6ud49w8|_5yDFpy7$u*9mwF|aK)ei#^?CH zc=N1+-0npQA3*kk{YwPi1OG+3B)dZb;Tc=)f7l`D$jDGCbY!IVdJT9C7;1G!OU_7Ce^?6jDHGk!~^~>G@Rb>2<;r{ z@YgV5hAj9ySQx0^!W+VPq4n^#FhfTT@WMndPScITTf=q}$KexSYNDNZ2c84xWmoA6 zUI$i0ALNr5#&F@_To_^3;J*O0f4hO-#(fd&K?XX#ly5sL2G9itScnA#!+6zrzy%mD zgb>I{`=Ze(4Ag`{A1oSL#Xi^P5*xI?7(kk%4Fp3sgn=0C60d%NA5WYi;$6fQ$&$*af{DvE6I}m;}=}n*;{I^5Q%TtcCFi z7l1ghK(YP?{)W{M0~mo0R%Sml(GBlN&13nm0ucWrNbh0u-h5^i5% z1YMZM^lJoStpCOw+rO(I^uRh(y*5G=;>%elzh_AeJda1t;y=&fkV4ggh)B=^DrEe2 zUqghiFnAdo1Ra=@MRo|^$Y0=tq7iVgUZ}Ke1XY-mJH-h9YYh{%2#&B;BiMxS2evEt z8Nm;h|Bgbr%}G)?xJuzn4Lz92_U&$jOVSsIs>nURl0Szo4G1m6hkx0|Z^v3g;Dxy$ zw~hdSol9v80Su#bb`iXZU!3{+h+qWkNi0A_U6@8BBH|#7Qb0n?g`L{w<_}NNbNg(= zfpTR%8%YyGL~h5$Kpcj7y-t8g2s_;^10oCZOAQueDEz#8{ucazZl(jsUNoSsOvt$H zHk^p?u$ViFA?Cp>fg};RVL230M=XQ|V9fyW4Q!Xn7;z4!apQ;>3Oj?ZE21H+0sDGS zeI|JhKA!`BW04$c-CS_T5Kv@?}}VqoEG zssPo)+P8TZ=mu88`hy?^n4XeBe-6^~dqEHcy&wa#K$8bS80|-2Kt!+}sc<*pO8uO! z)aQbFhJ`+l`r@}MkAYsn0ueX?8iO@m*_C2oCNXHM8H06#6_04Q}6(1iQfG)a1bousHiGfq7vC)u0VNffaj!G1wVq1H}wH z3yayN6}S{;Ej$p+0OP$41tY_#wg_+l?5qh{y1WC=c1O`)S~Zla9*hE2kU}PacIASR z+QXv3<1iOglK$@?!zo~1nBhO!U_Y2)zg#dbjF(&jc7yT$m4O3cyx=-;5RCWm4tx#6 zyZ8w9fVqITbDkUZ?1Cyf?6L9U!iem1Rn@nGQ()4syTJb|oVPt-S{Ulg7qBY~RdN(; z0^^lU|6eGu=D^=!x_?*x&wB7Ta3n0;w=TUw5zkk%4i#2l+X~2NP(8)xekQjEPJ&&{ zrDL!^3}53rm=dPPaWh%(i}gIWN&E7>*d{?jY%jh9=fc{h5D@7dOydXqzXgLT15HO6(}z+fg8n6w5ktaKej*Jgm+Ym4hUpJWx<8#h|K{$wQX>+0dKN>2)TwbwAb4any5r;l+V7tG)TX3^k9ht#fq>0~4|;s79e0u*mBh zAa8X$qv#v7I%rCKLLnS^)ot7teaSTE9~O&}cTlx50SrhJRph1kQ6?!mq;w;yEh|P` zRC&RPdGFuxH7Tt^)-m|wQ%VL9<)CYpn}jyC=_9AAY|Uted*eST8)gnf*tEebGUa9-4#z2rla zSrpI2VDmj1wO>l?^nR!52ZG^uo%#|-W7Qk}p*kP0s~AP?t&mZG?{j0s&(qDX;FXeD zyv#UBv2T7}C@eay?KMegb@lrv*v|#LI1?r^QQ9s4dd#8=&GHLVBFUw9rUqWKUMla-fZc zk2+Lg=^Tv}tc5w77NSwzmD{D_;B1n=KeS4c=-U!bXGX9~I7Y%xn5fTHF)Z zq^d~arT+iSwkr-VN^b-YWwEuA*We>g?@RI?5N<*>R^=*kjfhM$0>zcty`xgqi~O6+W_Zh93LWK z%)X_)e+ue+yi}wr;VcWD<7yC7GRIs1egg;(VtNGEFxwfgM{9dC1JNxFVf!jsbAvbQ z-#Il&wr~;?$zjnCzgf{u;?i z*ld8S=o@i?@V*DLo4GKvACM`^j3G5y*bQfB@4<_nnUozmf-h{wJYxJs?|WBX!|c7G zVb%Ob%V#LkDbR()jH%Qp!>LXWN7#%p?!(c0;jKP_)8I_rNao$f4+`ErdEdMtJu(#S z3EOQK!eus}r`qF#U606xx5B|bbAX~>c%pASSK_8b?%9)jORv~_jE**f+lPa^dt!TQ zFQDEJ=pm(7-Q`f~yd6hVIi_`1>n%poUq|4X?v%NE$$+4^Uokp2_;`Gw`bTni8VqKt z(@R3shb{4x^LG=%;!|dl!G(knX8?DvTuQLi9-~iaLW!)6!A1nu_HWMYo5vtHEe%Yq zqYnl(yK<7Bw#xR8L)s^@N(heUHp>`@G<+l9ak=hVNO-cLx)K!l`Fi4Smav_#e{=>2 zqE@c!_!~uDaDD5=822pNHL_ zzY`Y{Oc6GW=i0IT=^T0_1m4t2S&{QIRmLSwPQah&qd!isW>D(H7AH#QK5o*{m?6JY z_-;v}W4Po8fR}azld+JPvO>%FhJU`oco!|zRBP)*JJ~<69qUghm)!4rDwUp?%wp&6 z;Nr5BVEw~moYFZmaF`4eq8N6WPlv))RH*dplthWj3&ptSeQPW~Aii6tzO}N2{~a2b z2uFcuc5cpit2xksfe9T{I(xC|%=9gQeYBkmD<{$Jr{?|Zc9}6={Ej2|_01)~n%YD} zSMLZSeIN@2--}<(*U~@5xK|_+>WwfkM>rJmy#fl##xB_`@h%>OJhrGmM%=h~l(I*d z)T;?wnlvKf2`Xm$f-651QaYL>(hD#tZjK_Aosv*61bQmQ_ov zG|qdMG}X7jrCq)G>9W%&3;e)@i=-8!?Px^XIGryM#7Qe#$!iz+(V!%FhubO=rxH7~gb-X4uyjzr7rpB>6^;eEVmA!EXXp9Y$XY-D3)QL-cUh6;okPkK_U*`&qqF8GmqleW4pfkTg+kjB}g3-7mMvv_@40&w=| zd^^jMlX$!WZuEqQ@hq4bF884yDXC(&G)y%N4!pcIi@8pQ_9f?XD5>-qJ3~^smxvLq zN4&_+OQdXg4T|_C`|OJ8D+nBQj`ZdXQ7mebmMpACdNjPbq9xPcu*lcHC%BZau%roX z`FN_qaxN4c05REbn*A73`Yy98bh3t=W<;!HNg+^&@Zg)hA4%?XUCyUkI5%(|RutjA z$>BO2L+`hvvvSMfHa#2Ov=e%g{oi+@McTW+*X)kzKTUs=iOi#@1al5Qr9IlmPCKQ1 zwy!NRt(pXnwXf%kN-*AEVa`$Ud4%dCrY>V zJOO#<%=TYJ)rZKKcz^7>?Fz*Ev*t<3%Q-Gy+BKl3e&BVF5&|rZ{jUDTheOSK`n>a# zJ+Bq5v?Ut(?|H?NiA@EMm%xyivV3= z2T@z&;S@;7%umv5+`s}^2_H**LFDO^#zEG1d2!q$~*7=ZZxK*@o8OB!O)leu)I>bMtlj1wAVIc{iH9^R)Q z*o*GnBY8AO-#8*w$VHB2!7_l1xS;Am0+-KTjiH{0Ij%bk(su{ARF0f*i~4*OS1364 zyo6uo@kZ2r-BO4#pY4s``6WM-B0T*Bn<(#j*}>-il+T}tYwnHCG^$nMBpIF=bLqP# z1zGMFKMfGFZYAFQym&5@IYlZ_BRQ5_I@ITz8UNF;UU;%dz~X3fr85&HF-5aSwjJ%Y zYz5yZoeCGq`7sigWPbL-Qj<%oSJKj`?H1)&rQ}eCW$@*c%_+4m_qBl%~|&l(W8iiaaC?I!0v~_yNCh+y+Ui-3~>}V3PJ0{7$73CI{u$_SPUST;1`? zog&Lg_p~h#SF6|m`WM@i;nS85|Lb4@`~r3=)wx2d*aNswyX@&znS)Eso#nT5F=RB8 z=~Sr*DT*UUCG|4Q9|p?w-F*Bb5}P&JV4Z-cn(-f=(Q%$`fVk zA96)`77=1Miwd}HjSUyP8!9NZ=p_1)*nZF%P*A+D(#&XYPw+f_!9yHe8!HLrJf5;X z$NS<%IEhD+p!_Y5`F>})yY);(^`1AkdHf&GQy^x{Yu>FRos&LgginSFcHZ6);flkv zSzpDOe)wrEerM6LXz(GV-wk0ca$ zOuI<~62AuD2<+2KS^H6YrpOtWM8t`qbA=F>+w;&o*h*iq#qECMTuaP-LYJOf=DY%! zjF^5ZRx5umn&P^R>`m)AJtIL={J;5)4tdnZjbP<%^yi#+dq=Nwic1X{Pv02!f(dvHuKo@ktuNQ ztfuD2&2>u%`p;H5hmt=iYi_;J9>*=EqFch_us?i(OMk6SKT?(*k(mbeb3x)vy^~6z zWEI<;xF`4{%7Kequ^2)Gvwn2{E=0A>C(;^zQ_TzZ|8)Np+Y|T1U939;)xKqx(oH8j zgliB(JOUgwFTO3rz{j#`aKs?>4n-|by-Qc&c?m%{9Ez? z1*5Rnyl?ezRs=-W!NR-!Lja;#2LOM_@ak)(k|TTQMS8l5CvP zd5s?kpBGs0hw8H4+K~rXP_v0}LhN4xZweey>9hC|ytc+{Kuo-H3x>QEW>E0u__(7% zlK9ktR@Y?2;-4+-W@Dw|`A)_3vjbWuH+13OBZ7Iatl7`uu}+B}Afy@pv0307?<5f8 z)j#FrVy@v0ZJA;c(B#~rWDqix_h|cN(VChYCkuh-!qJj}G zhy*^mT%CTC4+B1hpB#iFcKsjvY3V?!woIm3avp6I%>*c2?L=JZjcRTcGvoMNsoF@! zFRQm|Qm&723}jVx!=8qK66<9(0#x0UMy9J-{|v%juRA8n6;#;_nzFgvUNf( zAlI$UH&N%oTb_?erPkHg<9<{(&=yti_*MN6nqKSAQj%1(-ahv_VisVRE!OM-J^D{} zHp6BA@b{T<@nij=q)^~~{zz2vmrpRyuBd0HJuBYmq(OQvPB zwoN=&)2H}K<;v%QEJ&lTalL9KJ3ld6`9Zw)nnV4>%z@=JV?ShEUT`7Nd>v4o)Mcml zYD^@@VTl|v!FydzGgq+qKJ`y+)Pc)hlqb0ME@sC)7&~;s^D)y|hD=9cF6a}Hp_31n zojjq{eJ+CzG@>>={lw}63iFequ!AaNk%Onu+e;mmtdq|3Jx69a@;TdDDV2oP57NI? z_r%6HZ_?G@41i1U z40-b=ESMCCU8xyZ zJLbA+I6Qi10J_zyGX$=3h(JvjK;qdkIHB(45u5z=EC7L13_JXcO<0P5(hBr$cwv zkJ=o28L@k)bsPs;-|d>uM6~>(>uz>O0lsiqrv$)D>U(-cW-U zAO!>q)Dj!@>?5ttZMcHEGefej#ta z-)T@`Pe(7kEo;61|CMze;8=fO+z9X2-eePAGa1>kGNQ~Bku;1VMdDZCEuj)pZ*`+c zWh51;>`{q!M!SrXhDx#`^MAj?%h%uY^gLhZbMCq4o_p@O!#y{>BVx@FzRUCby>2B3 z7bG<0@t?PLT?QimY}%XJly4o)T*JOd_!=$r!Bj!>{bS9nRY40+We=Sk@7)&kzPz); zGCw1#16WTtwr!0#TX9Kh{l3;oW6cqhkge0jxs&y$|MGeNjye;2@m61>L*BS_X`6Gl zZ&|jlLHiEQJ#K={DxUYX2OQkpdEJ*d)LzniP<)Kfz4x=Gzw9H!J+~K9qlUN2N* z0-6lf$?1_G)o#oE6)m@RKO6VFxX}Xwem8rta#yW=MVMP9FH$njim8i+#`^ucYn~HfSu-DE49jue*}n)uesm z8opb)_b+$4q4xX8X;bCarn}mOEhY{!-m3pHJzjS-JiKyu=}x`MLq|vU4~qpo=U%K| z`2O7GY^mP*iA1#s3Rj5YYKfQwc1!KG!^5jCUT@o9s-jw~qH1wdjN_Kj*o27fUtvw* zGkObMXno!;eVbop|9Ep}T=G^TyN4EapTuDOj+n$`yPSvRZt*^wB5oe}J)$-eVE-R$ z#i)+N6UnV=J4zHyMN705eGZ3}W;K3%k`VgvVl}}qfos2ber-U(eo)Bw2tSlJ2F?ld68bA)f0W{Vw)i? z+2)J*tD*3uzYi{dr9XQyEtx-kVCsSCWYZlLx9xiM_IaxVm2%hd6=VoI1gwyE_0^Q1 zyMFxgII!S?&dt#}(eO@|iVb#0|Lt9uw5iDM@0X;|<1x3D#%+%l+S;`uBN4#TGM zbLRGeepAsjUz^iQ_R+STu~EDBbY-@Ydta#TX2&0=?ysXSoj#o(T6C)<@_4k#>NDKd zG+j&9gkSICwyX&MYsL18Ev!&;n^{x!VAz(80b7dBF-w+PT%hd@tP@YtiR<#;l$kkX zq*6maov(4#MStV9oY&jb{W$I$ED~$8vfd+^^7X@3nZ9hcXpW`*nZlnlU*3&s`4VmL zqpW>MuI~c%pUmDPeYt)8lS47FX&s*redn7{5etvA8~AKWue7Qr zi`!UX5}VGLWQg!9`5&j(7XM(P<+pYoP%5IjsfyVh$%W^$Toi*3=?JyF%~~F@ zxR%-QRgx1}n zt!TQ?Gm>R{Li5SJ70yjJ0)Fr7yWUyTS8EX4YhL8T+MGa(zrpj(YSe`yyQcs65*EWZ z`;T>P<{33yCNFb-b-$l@*(Z6L_T)~p0_TK3TeSz%`Ii-T?TRy%ZR9k)*wwNmqkqrc zAvWzv8~H&c%NV2h2lvOrM4aPqh&tEoB%JG2>qedcP4PAp) zAJ4gr#U+W=m&X@z^&Ikuwr()+h<0o!^N6-vygHP>>z_a^<^9u#1PS?CFNyXMCFNP7QWuZ*IApL?K6x*KcNv zdH>L2`a+c*XMLsb3;mk)oZB{Q+6gZh%gm8a&M4JB=XiceoAzXULwcSi^@6uu#2eww zG@Xx`dN(=Ou}d3>IA_q;D1=I8(fk8yMyJm8^!%1_cdpo5+4TC_Bh~s`^=*&;z+sTE zwsD>4-ooqy+^ooh=en-~clGF{I353e!VDKYEV5u-E)w(a}~G2>W|{PcsBRFi$C7K@`329?^-I9_o-C3*8h_3B&VlOUZ+1f9C5V&vcGs> z^1YXhZ2cZ>5!)U2TV7EtYn$LJ*UOGVXEa z$3MyiFXpxjJhYdU_$N{9^;rRtD$LT|Qm%UM+A}sM%Pp=|ZCd_k!e6*+`p4uxF?_5w zF0}s3`s+C+pUQ2c{hIFlS4V$tSh{gv&9y4UscVj^0j>^l75-sdT>mvqZy0pBk#Xf) z-f>#5&d-X9c_ zxwA|DrbE4a`j@{|hVdMea|QUXW4w{v$TwQSWrX?@e3E_rAK2 zw&L%pKXX#9$`S|EWG!a&j+giV0r& z`}pr`Y_+eqMRN=n6tpL2->I&+(rRN^=v(u)OEmm%rr(EVp{zPfhib{M@0?8{qy3nh zO8&(hU3))aEwz;Orv3HQ+pBBW7f^?P6^Fg1gXT-7!68OxXqKkYUBX-k+ivgGDe&_M z`IM2ybF_x$YFKb+vp@KjP;+}*zR%7VAJ*O;?i`I&le|_QIQTf|eO7fsiZ*N4Voj;F zOGZ!oJU_1}BDLn(ua1buvs^d z((CDkMFRo)5130sUR$2`_Yl}*6kifxyg6NH!N(4zuh)g!X;y~{JJL!9)Dx6UUDjkR zvrstv{^ZUWkC5z5TZ_&`rS<7ob8sK*)NJ&wkgH2SdXqM#rB(5A$BhSn{yIjD@BVN+ z#WVW&M%KE3vI9}vFBLRWU0Y2?ZF~=grtW*(X!0$^I%iMoV8v10uv(GYgV%IjuG^ok z8of%VYgZq2)@<6pjP~oRx25^t(Rn<7!F2>tn-_ zmNx=&)aDqG1N{pZ9QqL8`hf3+h2jz}kGu54oN76LMvMB8$Xm8?y}Fd9ix=2OeD;3c zAbrozLL#I~a!76Y@Yx_g6ZV|`^?Jp~lb!oN%dPR#SeX;_Qap$k8v@o zyTl*x)3G^2;zQnzt5mt3FDH0?8~)Xl2vKnuD3=F6i|~ipYFUV+iP5~ z<8UqaW+k&!g-0F-vvNJHX;lAij)yN`$V+udixU3aeqcm^$Hpz;zp}0~$x%xBUA}J2 zKYR|3&^aBrFZw*$C9M_SzP7van9t@`tuH*rZuwSg!>nwqSQbrXUmm)VxXh`WUL=*f z@{EqLfM@P4=gqsFT~0{HT|K%WuwS1|tk}fuo4d)G>8)3LT-m(cb2Kl~oIZceYWBD) zeQZJCpTAjS_A!cjN28W7U)!E@q@(i5_FRQ`@q3qT*SoXPty7W5lpY%~ zrroS)_~C87TBCNjzW3(gB{I<__r-qbEiPczlJ-5Q$IArZ%2ws z2AA9H=tUw4l}afeS}>wW*6$Z%4L;A9U1rL;U_xKv zk9))QG3RuLk72IF`bSx9vZ}Nx# z=ZLoGkvP7GR{uWIm`RJMvY2EFH};TbS#kx%VkvrO5j6d#7^1I+0?s~)IeL>8tn8y` zVIQ%56r88Dk79%|5A;ziu#csGD2~`iO+Q5vWc{INV81yJz~8?ApD}%kz|j)n#!4t54*3mGeigh>YRHfd zFP9#$Sj#980k0x!j#98p1z?27$S@{VP`U+Um;6W3#_a6;56U>W6@-mbWI)mkwHBqOhA^n&^mifLKzfYOMq>=Z zw|30JfHp=E#cIB$w6tl3029+KD$I8w)$9?@;O7A!$0&lbXg5~Mw_W@QyO9kVPn*R5 z69|k`EHI{q*FF6CuqitQ;U!-ZlLXi~PQf0<1=q)+Qe0_hC9-t$GyyO^PN>T{0TK5T zGYGtxJ3*1dw9S9J__95${TH;AIZ5#MlNdWFnxHJk4D}Hek^*LgAV6u7g5B2z#*+{+ zypAF=^x*3PKz)+Jjp-fkWA0W5H$b*9Z$XzNz5v{qq*!4($kcyYtO_0B4P;U$F;(2d zW&XOy2P~$D#yC&G+SH%ni0?BIaDE24jw1A?8H5M?ogy^knubW~Hw;1Zg`}~H7d8$} zzT#qHIw?NCV#8rvNboQpD4r%Nu0w^aVFm|S5OF#`3kMjVrpTbCIVFWiviKvjKsv%K zdMXsbJoi)#1gZQpAO-mFGs~WOM+}6B?q^4&pn)8q$B>84CLvN0-cvycJ~n6bm6(|H zNalJjHB*EG&0t!Db=wtYSbwJ?iYTHvOCosF8QDtnJ7!u1WmN)3s?7YrUI4*6@>HzE zcl5#LWT+>(BPn1%3u1-!w!cUIL0{OBC&lKwz8Cn!f-J*op6c&$H~}RMKvyRB_5vGR zNi!Q}1cb2S<^%g!QT+lNtxU&F*|Xb_pE3N2NSJ&VVE_ zXEEY{)Z#3hx|aiyz`D!}c$TC?gFJ-&N>-M36=!|RLG+8WOPpRgWV--E8QD*^l;NzI zWy}Jze#J;JgQ}a7)ZPwuQV@K)uBAY&np!{@1<}`8yg6j!u3hsxNjbl3FPf_63FVlO zAK+~BeRF|^J;)40VBrFj3JHVY?kep60F9+Tq738n0r zVo-Tzr3edqgqK4pSK!2KK++{m1RUUny6|!#*u83?$pxikisRIo{5K)Y=-r-I9#%m; zRNz>#B1sXDWbjKeoO?DsZhrr3$THXw5D1gTF!7IMJfBL4z~nnP2FZr+F~Rw-aT85# z;f6}Ccg3kQiFCr46yu*gSN_7pu|_!4k-e_WoxzX0)>$4Xg*h0fng_G+f<7K%h)o=Uh$Xo-vP%cAY9s$z| zpRf~kS@6NSPDP@S4mie#;FB;Toe$PUo(6lt9X`Yf>v92pSXAyLxXXtafzXpI>|i@T zAvGF>B(DHw0c0t7&W{LTgFJZaWp#Ggh4~)7RHiJ0TQV7BOYywgFh~X)j9KwhK zCQ?HfLdv`-Bm=I9vGRdPVM5&$6gtg62YSoTDhz%tAu9H;v7#|%I0RrNuutMLR3@Rs9E7mt& z;t-lX0$Rio6*TJ-_gA`YxKIU@oeDz^Ie2dd&Emu)Kbwj&U_v=<`QnCH>sqI2jl zS@!~r#pFp|l8#nN1yu_XeDT=45UMg#gi>Vzw*-Q%sDP#fq%JREP&vUa2_kZxm(!`L zf))#g79+2JWFMk!l>soXQvgH>BUqLy_<@Sjc*1~WfeaVX**jH(p3A`oS3+ZwgU9!0 z41Qst^_-O-Xc!RAc~=t33us~B0)R(~m|B*g3qgUG42U1>lOmd#hC<3CCB*y{5WDqGJAx(@(Q)x)GHqQ3y9CvkVlKA&pa?NH5@;oqszP6iV_#3n)VizzqxIC+C1S*eQePW8PALmM>OE z%gcjrGDM3eQ0h)&TrDq?v#;{P`)45 zyAS?b#HbnF1b$hCvwo5#O!NE6?2tbNK7z z5quQ>mWTBxogzbQKudw>XIBM?f5@7H^POKHGQ07;f#MC9=it5Ya31Ry?nMyNxq(9# zix3rz8jMk^<`jUbydt1_5z*k;WZ(HS&ea-nAxY3FPZ-!p5mwdoj)98+m;lTJjwup& z7K&T8k#Tm=t4J(QO%(;6l)ypz7!F$Ue%z*Wexc;f1)N}m5+ONM2}*YEn!}XVwSepY zCZZOUt#Nz~n}jkVjz#B;Ug}kJRhIyl2;{>IMc}H8EXVwIt4_Kmt*kCm>@}FU#g{ud~PtF19CAjQL6=DT1q)X*S zS4s7-bw&(Ebf|4vhO)|m^kwi(1ua#==*v{0hD???v`-ZdSoEkOA^h-=3k*2}P%CnU zOI>i*Z7ys=nCoKvr_@uDM&Y!$4c1DYOJ927{Kz^sL2yKw*g1U?tc^a%3q!H&{KyVZ zIn;=$rOQ7i%mhZP!!T;7kebrB4TPz|2sNZeL=A3r*ovK@C{+%uP$vSyc9i;TFHQ}O zVdDibi<<)Os1t2(LUE%Q1}+TbGzdsb140_942T=RoNl-Qp23fyxLi7pKh;2}m>ItM zOZeY`8cV30S7rE8b8&9 zRjXH_W|ajSs@V9j4Jjt7rLg^ZHXL`UaPLcY?M1Z=eh%PU%f=3NEGC*7yBNyjx{u;w zcnY`eeYS;QgCT+Up!n`bIKE#Cz6_$Jg<$#XV5Js>C{Gy>eq4GDrKY}QQ2BwmHo^<0 zwTQ5^Pd&kK6?9QHsHqjnN*!R>OFNnS0EG64ZyxNe!|VrK(|+Jw?a*~VzkQKg|XlJ^b%taJFe zbO_(m(t%Z{vCo12gA}Zn0NuOtDx8NNE}K7C>bV&FT>lp-X4CTLkC__4uS<-X2G(Yq zCTOBd{})a^=%KRJL6$BN+$wdUhEvOM>N0bfWzOhwX*~$(+Mtj!@Y6%^GuZto)y^I; zFNI6V20cUyi@8m-2=`1u7+~NKB^%QA^itvsq^(QwEP7;I!aZMgUEsHrP<{3V0463) zQV%cl$2I9$N(^^qeW;0FC{8^a3SS*SPmeL<8k(HhuLAo?8Ac-V@xamuoPTEoyBMg} zC%pR!DylS+0r3MF1H!va3?SsTmjUsC6a!*qdRZwnybm_W20ltbj@s*v;rw3=5E)FN z*>?!$&xe_(aaQ;!0ltq4HG~x&IEPcK&$07@x|u=v9EEzba0ot5AObp85wUc!$b#^V z@LaP3F67Cvw-C4*A?BDCe>GwSGoiw5um{MeXzQwRp|6b)C2Y=`GD4eOk5l1$2BNd^ zW%jj$`3s7y1_nPbC^Mc3RmM=%#6ui{Zy(^B)qqK+$5C)C>j$+Z2fT3ufizEZh|Cr}fZ~VF&%x`K6RuOy6z`%6EkuRe z8FIY(cVP~{)Ecj-w5f7g@l-6=t_mSKcL6o`X%xhw+abPKIF6Axx`+iNZ`_ z;v$xTJ^*$c_7wT->t_jrpA*1$Hv~ZQa^mdhh%Kyt!)-E-|EZ%Fg$$~3sJWIy98(Rm zl8YULa%vfn%xr^hpwQz62E+~4*u#Yhe<{+ z_Wx;u?JHr?gM4UFDUi1kk;NK3Zu&1<3_8zl=se_w!7cbUAj;|k=R&}yzSgD6~}+le@`8bhI%E9XG`t0enLN7vo4w6C-{LP0QGn_} z%3|Q{f^cKJiJR?iJ%d(Y@nvFCBvos3oB~pkDN5j>3c-6J=%MvA+~!P#&*xoTO9AI9 RAn!U?grEJ?AlyJP{SVVnim?Cy delta 28872 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 G#{U5aG1+tg