From 809478124d59ba962800cc7818a3d5fa48636d64 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Sun, 29 Aug 2021 23:59:52 +0200 Subject: [PATCH 01/74] fix folding range bug introduced in previous commit --- .../main/java/de/peeeq/wurstio/languageserver/Convert.java | 2 +- .../languageserver/requests/FoldingRangeRequest.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/Convert.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/Convert.java index b5739da67..1404f9260 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/Convert.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/Convert.java @@ -17,7 +17,7 @@ public static Location posToLocation(WPos pos) { return new Location(file, posToRange(pos)); } - private static Range posToRange(WPos pos) { + public static Range posToRange(WPos pos) { int line = pos.getLine() - 1; int column = pos.getStartColumn() - 1; int endLine = pos.getEndLine() - 1; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/FoldingRangeRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/FoldingRangeRequest.java index 9c75dc6d8..6016b8ca7 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/FoldingRangeRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/FoldingRangeRequest.java @@ -4,6 +4,7 @@ import de.peeeq.wurstio.languageserver.ModelManager; import de.peeeq.wurstio.languageserver.WFile; import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.parser.WPos; import org.apache.commons.lang.StringUtils; import org.eclipse.lsp4j.*; import org.jetbrains.annotations.NotNull; @@ -46,7 +47,11 @@ private void addFoldingRange(Element element, int startOffset, int endOffset) { } private void addFoldingRange(Element element, int startOffset, int endOffset, String kind) { - Range range = Convert.range(element); + WPos pos = element.attrSource(); + if (pos.isArtificial()) { + return; + } + Range range = Convert.posToRange(pos); range.getStart().setLine(range.getStart().getLine() + startOffset); if (range.getEnd().getCharacter() == 0) { range.getEnd().setLine(range.getEnd().getLine() - 1); From 52a26f3b22c8a091b4bbf8344f44be02299d8250 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Mon, 30 Aug 2021 00:26:55 +0200 Subject: [PATCH 02/74] update tests --- .../wurstscript/tests/DependencyFileParserTest.java | 4 ++-- .../java/tests/wurstscript/tests/GenericsTests.java | 13 +++++++++++++ .../test/java/tests/wurstscript/tests/StdLib.java | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java index f3b3ee616..e697017da 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java @@ -53,7 +53,7 @@ public void testDepFileParsing() throws IOException { assertEquals(err.getSource().getLine(), 2); assertEquals(err.getSource().getStartColumn(), 1); assertEquals(err.getSource().getEndLine(), 2); - assertEquals(err.getSource().getEndColumn(), b.getAbsolutePath().length()); + assertEquals(err.getSource().getEndColumn(), b.getAbsolutePath().length() + 1); PublishDiagnosticsParams diag = Convert.createDiagnostics("", WFile.create(dep), gui.getErrorList()); assertEquals(diag.getDiagnostics().size(), 1); @@ -61,7 +61,7 @@ public void testDepFileParsing() throws IOException { assertEquals(d.getRange().getStart().getLine(), 1); assertEquals(d.getRange().getStart().getCharacter(), 0); assertEquals(d.getRange().getEnd().getLine(), 1); - assertEquals(d.getRange().getEnd().getCharacter(), b.getAbsolutePath().length() - 1); + assertEquals(d.getRange().getEnd().getCharacter(), b.getAbsolutePath().length()); } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java index a88164d15..bf2fc9b8a 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java @@ -1176,4 +1176,17 @@ public void tooManyTypeArgsConstructor() { } + @Test + public void nestedList() { + testAssertOkLinesWithStdLib(true, + "package Test", + "import LinkedList", + "init", + " let x = asList(asList(42)).getFirst().getFirst()", + " if x == 42", + " testSuccess()" + ); + } + + } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java index 2fa9397ba..315cc154a 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java @@ -23,7 +23,7 @@ public class StdLib { /** * version to use for the tests */ - private final static String version = "51f3274640197f957c3c53fb8cbe97c4e96ae898"; + private final static String version = "4404eea032ce148e51edeeb95cdf99d5e384bfb4"; /** * flag so that initialization in only done once From 7eea302409bdf008494de58e27169f18616c1ae6 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Mon, 30 Aug 2021 13:49:07 +0200 Subject: [PATCH 03/74] fix to allow building map on Linux --- .../de/peeeq/wurstio/languageserver/requests/MapRequest.java | 5 +++++ .../main/java/de/peeeq/wurstio/utils/W3InstallationData.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 91a640bb2..c69d673ed 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -26,6 +26,7 @@ import de.peeeq.wurstscript.parser.WPos; import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; +import net.moonlightflower.wc3libs.port.Orient; import org.eclipse.lsp4j.MessageParams; import org.eclipse.lsp4j.MessageType; import org.eclipse.lsp4j.services.LanguageClient; @@ -379,6 +380,10 @@ protected File compileScript(ModelManager modelManager, WurstGui gui, Optional version = Optional.empty(); + public W3InstallationData(Optional gameExe, Optional version) { + this.gameExe = gameExe; + this.version = version; + } + /** Evaluates the game path and version by discovering the system environment. */ public W3InstallationData() { discoverExePath(); From 6b7b9df5987e021cf6fcbbf609c7d8876d3c70c4 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Mon, 30 Aug 2021 18:55:32 +0200 Subject: [PATCH 04/74] fixed global initialization code for global initialization, we have two places: init functions for packages and a map that stores the initialization code for each variable. The map is used to avoid running all init functions when executing code at compiletime. The problem was that the rewrite phases for certain expressions would not correctly update the map and this would result in two different initializers in the init function and the map. To avoi this problem, with this commit the map no longer stores the init expression directly, but instead keeps a reference to the ImSet init statements in the init function. This should not be rewritten, since it is a simple array or global assignment, so the whole process should be more stable. --- .../parserspec/jass_im.parseq | 2 +- .../wurstio/CompiletimeFunctionRunner.java | 7 +++-- .../interpreter/EvaluateExpr.java | 4 +-- .../interpreter/ProgramState.java | 4 +-- .../imtranslation/EliminateClasses.java | 17 ------------ .../translation/imtranslation/ImPrinter.java | 6 ++--- .../imtranslation/ImTranslator.java | 19 ++++++++----- .../imtranslation/StackTraceInjector2.java | 3 ++- .../wurstscript/tests/GenericsTests.java | 27 +++++++++++++++++-- 9 files changed, 53 insertions(+), 36 deletions(-) diff --git a/de.peeeq.wurstscript/parserspec/jass_im.parseq b/de.peeeq.wurstscript/parserspec/jass_im.parseq index 1a7437ea6..1f2128240 100644 --- a/de.peeeq.wurstscript/parserspec/jass_im.parseq +++ b/de.peeeq.wurstscript/parserspec/jass_im.parseq @@ -10,7 +10,7 @@ ImProg( ImMethods methods, ImClasses classes, ImTypeClassFuncs typeClassFunctions, - java.util.Map> globalInits) + java.util.Map> globalInits) ImVars * ImVar ImFunctions * ImFunction diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java index 62cd423c1..bffe0013a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java @@ -274,6 +274,7 @@ public ImVar initFor(ILconstObject obj) { imProg.getGlobals().add(res); ImAlloc alloc = JassIm.ImAlloc(obj.getTrace(), obj.getType()); addCompiletimeStateInitAlloc(alloc.getTrace(), res, alloc); + globalState.setVal(res, obj); Element trace = obj.getTrace(); @@ -322,6 +323,7 @@ public ImVar initFor(IlConstHandle a) { ImType type = TypesHelper.imHashTable(); ImVar res = JassIm.ImVar(trace, type, type + "_compiletime", false); imProg.getGlobals().add(res); + globalState.setVal(res, a); init = constantToExprHashtable(trace, res, a, map); addCompiletimeStateInitAlloc(trace, res, init); @@ -395,8 +397,9 @@ private ImFunction getCompiletimeStateInitFunction() { // insert at the beginning private void addCompiletimeStateInitAlloc(Element trace, ImVar v, ImExpr init) { - imProg.getGlobalInits().put(v, Collections.singletonList(init)); - getCompiletimeStateInitFunction().getBody().add(0, JassIm.ImSet(trace, JassIm.ImVarAccess(v), init.copy())); + ImSet imSet = JassIm.ImSet(trace, JassIm.ImVarAccess(v), init.copy()); + imProg.getGlobalInits().put(v, Collections.singletonList(imSet)); + getCompiletimeStateInitFunction().getBody().add(0, imSet); } // insert at the end diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/EvaluateExpr.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/EvaluateExpr.java index 26396c102..f800e8536 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/EvaluateExpr.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/EvaluateExpr.java @@ -122,9 +122,9 @@ public static ILconst eval(ImVarAccess e, ProgramState globalState, LocalState l ILconst r = globalState.getVal(var); if (r == null) { - List initExpr = globalState.getProg().getGlobalInits().get(var); + List initExpr = globalState.getProg().getGlobalInits().get(var); if (initExpr != null) { - r = initExpr.get(0).evaluate(globalState, localState); + r = initExpr.get(0).getRight().evaluate(globalState, localState); } else { throw new InterpreterException(globalState, "Variable " + var.getName() + " is not initialized."); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ProgramState.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ProgramState.java index a93ce4332..9b270fe26 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ProgramState.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ProgramState.java @@ -260,11 +260,11 @@ protected ILconstArray getArray(ImVar v) { ImType vType = v.getType(); r = createArrayConstantFromType(vType); arrayValues.put(v, r); - List e = prog.getGlobalInits().get(v); + List e = prog.getGlobalInits().get(v); if (e != null) { LocalState ls = new LocalState(); for (int i = 0; i < e.size(); i++) { - ILconst val = e.get(i).evaluate(this, ls); + ILconst val = e.get(i).getRight().evaluate(this, ls); r.set(i, val); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateClasses.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateClasses.java index 66a7253bc..7bb85387e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateClasses.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateClasses.java @@ -70,23 +70,6 @@ public void eliminateClasses() { eliminateClassRelatedExprs(f.getBody()); } - for (Map.Entry> entry : prog.getGlobalInits().entrySet()) { - ImExprs exprs = JassIm.ImExprs(); - List value = entry.getValue(); - for (ImExpr e : value) { - List newValues = new ArrayList<>(); - if (e.getParent() == null) { - exprs.add(e); - eliminateClassRelatedExprs(exprs); - newValues.add(exprs.remove(0)); - } else { - eliminateClassRelatedExprs(exprs); - newValues.add(e); - } - entry.setValue(newValues); - } - } - prog.getClasses().clear(); prog.getMethods().clear(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java index 5133b64e2..94d8376c1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java @@ -16,14 +16,14 @@ public static void print(ImProg p, Appendable sb, int indent) { } append(sb, "\n\n"); p.getGlobalInits().forEach((v,es) -> { - append(sb, v.getName()); + v.print(sb, indent); append(sb, " = "); boolean first = true; - for (ImExpr e : es) { + for (ImSet e : es) { if (!first) { append(sb, ", "); } - e.print(sb, indent); + e.getRight().print(sb, indent); first = false; } append(sb, "\n"); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java index 1e8c3e83b..f49b9b67c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java @@ -512,30 +512,35 @@ public void addGlobalInitalizer(ImVar v, PackageOrGlobal packageOrGlobal, VarIni if (initialExpr instanceof Expr) { Expr expr = (Expr) initialExpr; ImExpr translated = expr.imTranslateExpr(this, f); + ImSet imSet = ImSet(trace, ImVarAccess(v), translated); if (!v.getIsBJ()) { // add init statement for non-bj vars // bj-vars are already initalized by blizzard - f.getBody().add(ImSet(trace, ImVarAccess(v), translated)); + f.getBody().add(imSet); } - imProg.getGlobalInits().put(v, Collections.singletonList(translated)); + imProg.getGlobalInits().put(v, Collections.singletonList(imSet)); } else if (initialExpr instanceof ArrayInitializer) { ArrayInitializer arInit = (ArrayInitializer) initialExpr; List translatedExprs = arInit.getValues().stream() .map(expr -> expr.imTranslateExpr(this, f)) .collect(Collectors.toList()); + List imSets = new ArrayList<>(); for (int i = 0; i < arInit.getValues().size(); i++) { ImExpr translated = translatedExprs.get(i); - f.getBody().add(ImSet(trace, ImVarArrayAccess(trace, v, ImExprs((ImExpr) JassIm.ImIntVal(i))), translated)); + ImSet imSet = ImSet(trace, ImVarArrayAccess(trace, v, ImExprs((ImExpr) JassIm.ImIntVal(i))), translated); + imSets.add(imSet); } + f.getBody().addAll(imSets); // add list of init-values to translatedExprs - imProg.getGlobalInits().put(v, translatedExprs); + imProg.getGlobalInits().put(v, imSets); } } public void addGlobalWithInitalizer(ImVar g, ImExpr initial) { imProg.getGlobals().add(g); - getGlobalInitFunc().getBody().add(ImSet(g.getTrace(), ImVarAccess(g), initial)); - imProg.getGlobalInits().put(g, Collections.singletonList((ImExpr) initial.copy())); + ImSet imSet = ImSet(g.getTrace(), ImVarAccess(g), initial); + getGlobalInitFunc().getBody().add(imSet); + imProg.getGlobalInits().put(g, Collections.singletonList(imSet)); } @@ -1537,6 +1542,8 @@ public void assertProperties(Set properties, Element e) { Element child = e.get(i); if (child.getParent() == null) { throw new Error("Child " + i + " (" + child + ") of " + e + " not attached to tree"); + } else if (child.getParent() != e) { + throw new Error("Child " + i + " (" + child + ") of " + e + " attached to wrong tree"); } assertProperties(properties, child); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StackTraceInjector2.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StackTraceInjector2.java index 15cb48ead..97760e8ad 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StackTraceInjector2.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StackTraceInjector2.java @@ -87,7 +87,8 @@ public void visit(ImFuncRef imFuncRef) { prog.getGlobals().add(stackSize); stack = JassIm.ImVar(trace, TypesHelper.imStringArray(), "wurst_stack", false); prog.getGlobals().add(stack); - prog.getGlobalInits().put(stackSize, Collections.singletonList(JassIm.ImIntVal(0))); + prog.getGlobalInits().put(stackSize, Collections.singletonList( + JassIm.ImSet(trace, JassIm.ImVarAccess(stackSize), JassIm.ImIntVal(0)))); TransitiveClosure callRelationTr = new TransitiveClosure<>(callRelation); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java index bf2fc9b8a..181097068 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java @@ -1178,15 +1178,38 @@ public void tooManyTypeArgsConstructor() { @Test public void nestedList() { + testAssertOkLines(true, + "package Test", + "native testSuccess()", + "public class LinkedList", + " T t", + " function add (T t)", + " this.t = t", + " function getFirst() returns T", + " return t", + "public function asList(vararg T ts) returns LinkedList", + " let ll = new LinkedList", + " for t in ts", + " ll.add(t)", + " return ll", + "let x = asList(asList(42)).getFirst()", + "init", + " if x.getFirst() == 42", + " testSuccess()" + ); + } + + + @Test + public void nestedList2() { testAssertOkLinesWithStdLib(true, "package Test", "import LinkedList", + "let x = asList(asList(42)).getFirst().getFirst()", "init", - " let x = asList(asList(42)).getFirst().getFirst()", " if x == 42", " testSuccess()" ); } - } From 0ec731d3c072d24f7d4897939d4dbc0d2d32ee08 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Tue, 31 Aug 2021 00:49:57 +0200 Subject: [PATCH 05/74] quickfix for importing on module use --- .../requests/CodeActionRequest.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeActionRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeActionRequest.java index 84d818d8d..57ed034c2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeActionRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeActionRequest.java @@ -99,8 +99,13 @@ public List> execute(ModelManager modelManager) { return handleMissingType(modelManager, nr.getTypeName()); } + } else if (e.get() instanceof ModuleUse) { + ModuleUse mu = (ModuleUse) e.get(); + ModuleDef def = mu.attrModuleDef(); + if (def == null) { + return handleMissingModule(modelManager, mu.getModuleNameId().getName()); + } } - // TODO non simple TypeRef return Collections.emptyList(); } @@ -372,6 +377,27 @@ private List> handleMissingClass(ModelManager modelM return makeImportCommands(possibleImports); } + private List> handleMissingModule(ModelManager modelManager, String moduleName) { + + WurstModel model = modelManager.getModel(); + List possibleImports = new ArrayList<>(); + for (CompilationUnit cu : model) { + withNextPackage: + for (WPackage wPackage : cu.getPackages()) { + for (NameLink nameLink : wPackage.attrExportedTypeNameLinks().get(moduleName)) { + if (nameLink.getDef() instanceof ModuleDef) { + possibleImports.add(wPackage.getName()); + continue withNextPackage; + } + } + } + } + + return makeImportCommands(possibleImports); + } + + + private List> makeImportCommands(List possibleImports) { return possibleImports.stream() .map(this::makeImportCommand) From 23d48eabe6633b3dd927479ea0d8069d33b51913 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Tue, 31 Aug 2021 00:58:35 +0200 Subject: [PATCH 06/74] fix: remove "Optional" from error message strings --- .../src/main/java/de/peeeq/wurstscript/utils/Utils.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java index 40bd7d1c3..57d90e3ed 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java @@ -444,8 +444,7 @@ public static boolean isEmptyCU(Optional cu) { public static String printElementWithSource(Optional e) { Optional src = e.map(Element::attrSource); - return printElement(e) + " (" + src.map(WPos::getFile) + ":" - + src.map(WPos::getLine) + ")"; + return printElement(e) + " (" + src.map(WPos::printShort).orElse("unknown position") + ")"; } public static int[] copyArray(int[] ar) { From 77fdcfe698614c1c9c7aebe75dd34c0485c55f87 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Tue, 31 Aug 2021 01:59:06 +0200 Subject: [PATCH 07/74] trying to fix module problems in editor --- de.peeeq.wurstscript/parserspec/wurstscript.parseq | 2 +- .../wurstio/languageserver/ModelManagerImpl.java | 1 - .../java/de/peeeq/wurstscript/ModuleExpander.java | 13 +++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/de.peeeq.wurstscript/parserspec/wurstscript.parseq b/de.peeeq.wurstscript/parserspec/wurstscript.parseq index 2aaab52eb..750b26f96 100644 --- a/de.peeeq.wurstscript/parserspec/wurstscript.parseq +++ b/de.peeeq.wurstscript/parserspec/wurstscript.parseq @@ -609,7 +609,7 @@ HasModifier.attrIsVararg() returns boolean implemented by de.peeeq.wurstscript.attributes.ModifiersHelper.isVararg -ClassOrModuleOrModuleInstanciation.getModuleInstanciations +ClassOrModuleOrModuleInstanciation.getModuleInstanciations() returns ModuleInstanciations implemented by de.peeeq.wurstscript.ModuleExpander.expandModules diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java index 93eba3a18..976b30afa 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java @@ -237,7 +237,6 @@ private void clearCompilationUnit(CompilationUnit cu) { private void clearModuleInstantiation(ClassOrModuleInstanciation elem) { elem.getP_moduleInstanciations().clear(); - elem.getModuleInstanciations().clear(); for (ClassDef innerClass : elem.getInnerClasses()) { clearModuleInstantiation(innerClass); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ModuleExpander.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ModuleExpander.java index 5a454984d..c95742795 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ModuleExpander.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ModuleExpander.java @@ -37,7 +37,11 @@ public static ModuleInstanciations expandModules(ClassOrModule m) { return expandModules(m, new ArrayList<>()); } - public static ModuleInstanciations expandModules(ClassOrModule m, Collection visited) { + private static ModuleInstanciations expandModules(ClassOrModule m, List visited) { + if (m.getP_moduleInstanciations().size() > 0 || m.getModuleUses().isEmpty()) { + return m.getP_moduleInstanciations(); + } + Preconditions.checkNotNull(m); if (visited.contains(m)) { throw new CompileError(m.getSource(), "Cyclic module dependencies: " + @@ -45,9 +49,6 @@ public static ModuleInstanciations expandModules(ClassOrModule m, Collection 0) { - return m.getP_moduleInstanciations(); - } for (ModuleUse moduleUse : m.getModuleUses()) { @@ -56,7 +57,7 @@ public static ModuleInstanciations expandModules(ClassOrModule m, Collection Date: Tue, 31 Aug 2021 12:32:02 +0200 Subject: [PATCH 08/74] fix reconciling code for editor previously, we checked only the direct dependencies of changed files (actually, it was two levels of dependencies, due to some redundt code). However, this is only correct, as long as we do not consider classes and modules. Extending a class or using a module can re-export the members of the class or module, so not only packages that directly import a changed package can be affected by a change. We now had two ways to fix this: 1) fine grained dependency analysis to exactly find other affected files 2) include all transitive dependencies. Option 1 would have been more efficient, but there is a great chance for more subtle bugs. So this commit implements option 2, which will make updates more compute intense, but should be more stable. --- .../peeeq/wurstio/WurstCompilerJassImpl.java | 2 +- .../languageserver/ModelManagerImpl.java | 128 ++++++++++++------ .../de/peeeq/wurstscript/WurstChecker.java | 3 +- .../validation/ValidateClassMemberUsage.java | 3 +- .../validation/ValidateGlobalsUsage.java | 2 +- .../validation/ValidateLocalUsage.java | 3 +- .../validation/WurstValidator.java | 6 +- .../wurstscript/tests/ModelManagerTests.java | 76 +++++++++++ 8 files changed, 176 insertions(+), 47 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index 708bdba68..59cb94ba0 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -401,7 +401,7 @@ public void checkProg(WurstModel model) { checkProg(model, model); } - public void checkProg(WurstModel model, List toCheck) { + public void checkProg(WurstModel model, Collection toCheck) { for (CompilationUnit cu : toCheck) { Preconditions.checkNotNull(cu); if (!model.contains(cu)) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java index 976b30afa..9e6f599c8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java @@ -12,8 +12,6 @@ import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.gui.WurstGuiLogger; -import de.peeeq.wurstscript.parser.WPos; -import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.lsp4j.PublishDiagnosticsParams; @@ -188,39 +186,24 @@ private List getCompilationUnits(List fileNames) { return model2.stream().filter(cu -> fileNames.contains(wFile(cu))).collect(Collectors.toList()); } - private List getfileNames(List compilationUnits) { + private List getfileNames(Collection compilationUnits) { return compilationUnits.stream() .map(this::wFile) .collect(Collectors.toList()); } /** - * clear the attributes for all compilation units that import something from - * 'toCheck' and for 'toCheck' - * - * @return a list of all the CUs which have been cleared + * clear the attributes and module instantiations for all compilation units in the given collection */ - private List clearAttributes(List toCheck) { + private void clearCompilationUnits(Collection toCheck) { WurstModel model2 = model; if (model2 == null) { - return Collections.emptyList(); + return; } - List cleared = new ArrayList<>(toCheck); model2.clearAttributesLocal(); - Set packageNames = Sets.newHashSet(); for (CompilationUnit cu : toCheck) { clearCompilationUnit(cu); - for (WPackage p : cu.getPackages()) { - packageNames.add(p.getName()); - } } - for (CompilationUnit cu : model2) { - if (imports(cu, packageNames)) { - clearCompilationUnit(cu); - cleared.add(cu); - } - } - return cleared; } private void clearCompilationUnit(CompilationUnit cu) { @@ -374,7 +357,11 @@ private void updateModel(CompilationUnit cu, WurstGui gui) { while (it.hasNext()) { CompilationUnit c = it.next(); if (wFile(c).equals(wFile(cu))) { - clearAttributes(Collections.singletonList(cu)); + // get old provided packages: + Set oldPackages = providedPackages(c); + Set mustUpdate = calculateCUsToUpdate(Collections.singletonList(cu), oldPackages, model2); + + clearCompilationUnits(mustUpdate); // replace old compilationunit with new one: it.set(cu); updated = true; @@ -388,6 +375,13 @@ private void updateModel(CompilationUnit cu, WurstGui gui) { //doTypeCheckPartial(gui, false, ImmutableList.of(cu.getFile())); } + private Set providedPackages(CompilationUnit c) { + return c.getPackages() + .stream() + .map(WPackage::getName) + .collect(Collectors.toSet()); + } + private CompilationUnit compileFromJar(WurstGui gui, String filename) throws IOException { InputStream source = this.getClass().getResourceAsStream("/" + filename); File sourceFile; @@ -597,49 +591,64 @@ private void doTypeCheckPartial(WurstGui gui, List toCheckFilenames, Set< return; } - toCheck = new ArrayList<>(addPackageDependencies(toCheck, oldPackages, model2)); + Collection toCheckRec = calculateCUsToUpdate(toCheck, oldPackages, model2); - List clearedCUs = Collections.emptyList(); try { - clearedCUs = clearAttributes(toCheck); + clearCompilationUnits(toCheckRec); comp.addImportedLibs(model2, this::addCompilationUnit); - comp.checkProg(model2, toCheck); + comp.checkProg(model2, toCheckRec); } catch (ModelChangedException e) { // model changed, early return return; } catch (CompileError e) { gui.sendError(e); } - List fileNames = getfileNames(clearedCUs); + List fileNames = getfileNames(toCheckRec); reportErrorsForFiles(fileNames, gui); } - private Set addPackageDependencies(List toCheck, Set oldPackages, WurstModel model) { + /** + * Calculates compilation + * + * + * @param changed the set of compilation units that were changed + * @param oldPackages packages that were provided before the update (which might have been removed now) + * @param model the complete AST + * @return the set of compilation units that might be affected by the changes, including the changed compilation units + */ + private Set calculateCUsToUpdate(List changed, Set oldPackages, WurstModel model) { Set result = new TreeSet<>(Comparator.comparing(cu -> cu.getCuInfo().getFile())); - result.addAll(toCheck); + result.addAll(changed); - if (toCheck.stream().anyMatch(cu -> cu.getCuInfo().getFile().endsWith(".j"))) { + if (changed.stream().anyMatch(cu -> cu.getCuInfo().getFile().endsWith(".j"))) { // when plain Jass files are changed, everything must be checked again: result.addAll(model); return result; } - Stream providedPackages = result.stream() + // get packages provided by the changed CUs + Stream providedPackages = changed.stream() .flatMap(cu -> cu.getPackages().stream()) .map(WPackage::getName); + // affected packages are new ones and old ones Set affectedPackages = Stream.concat(providedPackages, oldPackages.stream()) .collect(Collectors.toSet()); - addImportingPackages(affectedPackages, model, result); + addPossiblyAffectedPackages(affectedPackages, model, result); return result; } - private void addImportingPackages(Collection providedPackages, WurstModel model2, Set result) { + + /** + * Add all packages that directly or indirectly depend on the providedPackages + */ + private void addPossiblyAffectedPackages(Collection providedPackages, WurstModel model, Set result) { + nextCu: - for (CompilationUnit compilationUnit : model2) { + for (CompilationUnit compilationUnit : model) { if (result.contains(compilationUnit)) { continue; } @@ -648,15 +657,58 @@ private void addImportingPackages(Collection providedPackages, WurstMode String importedPackage = imp.getPackagenameId().getName(); if (providedPackages.contains(importedPackage)) { result.add(compilationUnit); - if (imp.getIsPublic()) { - // recursive call terminates, because it is only called for packages not yet in result - addImportingPackages(Collections.singletonList(p.getName()), model2, result); - } continue nextCu; } } } } + + addTransitiveDeps(result, model); + } + + /** + * Add all compilation units that transitively depend on the units in result + */ + private void addTransitiveDeps(Set result, WurstModel model) { + Multimap dependencyMap = calculateDirectDependencies(model); + ArrayDeque todo = new ArrayDeque<>(result); + while (!todo.isEmpty()) { + CompilationUnit cu = todo.remove(); + Collection directDeps = dependencyMap.get(cu); + for (CompilationUnit c : directDeps) { + if (result.add(c)) { + todo.add(c); + } + } + } + } + + /** + * Calculates a map from a compilation unit to the compilation units that directly depend on it. + * E.g. if package A imports C and package B imports C, then + * result.get(C) would return A and B + **/ + private Multimap calculateDirectDependencies(WurstModel model) { + Multimap result = HashMultimap.create(); + Map cuForPackage = new HashMap<>(); + for (CompilationUnit cu : model) { + for (WPackage p : cu.getPackages()) { + cuForPackage.put(p.getName(), cu); + } + } + + for (CompilationUnit cu : model) { + for (WPackage p : cu.getPackages()) { + for (WImport i : p.getImports()) { + CompilationUnit dep = cuForPackage.get(i.getPackagename()); + if (dep != null) { + result.put(dep, cu); + } + } + } + } + + return result; } @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstChecker.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstChecker.java index 7aeaa26b7..b35ee3cdd 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstChecker.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstChecker.java @@ -8,6 +8,7 @@ import de.peeeq.wurstscript.validation.TRVEHelper; import de.peeeq.wurstscript.validation.WurstValidator; +import java.util.Collection; import java.util.List; public class WurstChecker { @@ -20,7 +21,7 @@ public WurstChecker(WurstGui gui, ErrorHandler errorHandler) { this.errorHandler = errorHandler; } - public void checkProg(WurstModel root, List toCheck) { + public void checkProg(WurstModel root, Collection toCheck) { Preconditions.checkNotNull(root); Preconditions.checkNotNull(toCheck); if (root.isEmpty()) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java index 8fc32dc69..269e3c18a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java @@ -2,6 +2,7 @@ import de.peeeq.wurstscript.ast.*; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -10,7 +11,7 @@ * */ public class ValidateClassMemberUsage { - public static void checkClassMembers(List toCheck) { + public static void checkClassMembers(Collection toCheck) { for (CompilationUnit cu : toCheck) { for (WPackage p : cu.getPackages()) { checkVarUsage(p); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateGlobalsUsage.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateGlobalsUsage.java index e489904d2..1cf5f9367 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateGlobalsUsage.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateGlobalsUsage.java @@ -8,7 +8,7 @@ * */ public class ValidateGlobalsUsage { - public static void checkGlobalsUsage(List toCheck) { + public static void checkGlobalsUsage(Collection toCheck) { Map usedGlobals = new HashMap<>(); for (CompilationUnit cu : toCheck) { checkJassGlobals(cu.getJassDecls(), usedGlobals); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateLocalUsage.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateLocalUsage.java index 1d2d6c5ae..43bbd90fc 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateLocalUsage.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateLocalUsage.java @@ -9,8 +9,7 @@ * */ public class ValidateLocalUsage { - public static void checkLocalsUsage(List toCheck) { - Map usedGlobals = new HashMap<>(); + public static void checkLocalsUsage(Collection toCheck) { for (CompilationUnit cu : toCheck) { for (WPackage p : cu.getPackages()) { checkLocalsUsage(p); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java index 5cd1f9491..fe5d55693 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java @@ -52,7 +52,7 @@ public WurstValidator(WurstModel root) { this.prog = root; } - public void validate(List toCheck) { + public void validate(Collection toCheck) { try { functionCount = countFunctions(); visitedFunctions = 0; @@ -80,7 +80,7 @@ public void validate(List toCheck) { /** * checks done after walking the tree */ - private void postChecks(List toCheck) { + private void postChecks(Collection toCheck) { checkUnusedImports(toCheck); ValidateGlobalsUsage.checkGlobalsUsage(toCheck); ValidateClassMemberUsage.checkClassMembers(toCheck); @@ -101,7 +101,7 @@ private void postChecks(List toCheck) { }); } - private void checkUnusedImports(List toCheck) { + private void checkUnusedImports(Collection toCheck) { for (CompilationUnit cu : toCheck) { for (WPackage p : cu.getPackages()) { checkUnusedImports(p); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java index 0a600ae37..c79bf4af5 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java @@ -466,5 +466,81 @@ public void moduleErrorAtInit() throws IOException { assertEquals(errors.get(fileT2), ""); } + @Test + public void moduleTransitive() throws IOException { + File projectFolder = new File("./temp/testProject2/"); + File wurstFolder = new File(projectFolder, "wurst"); + newCleanFolder(wurstFolder); + + + String packageT1 = string( + "package T1", + "import T2", + "init", + " new C.foo()" + ); + + String packageT2 = string( + "package T2", + "import T3", + "public class C extends D" + ); + + String packageT3 = string( + "package T3", + "import T4", + "public class D", + " use M" + ); + + String packageT4 = string( + "package T4", + "public module M", + " function foo() returns int", + " return 1" + ); + + String packageT4updated = string( + "package T4", + "public module M", + " function bar() returns int", + " return 1" + ); + + WFile fileT1 = WFile.create(new File(wurstFolder, "T1.wurst")); + WFile fileT2 = WFile.create(new File(wurstFolder, "T2.wurst")); + WFile fileT3 = WFile.create(new File(wurstFolder, "T3.wurst")); + WFile fileT4 = WFile.create(new File(wurstFolder, "T4.wurst")); + WFile fileWurst = WFile.create(new File(wurstFolder, "Wurst.wurst")); + + + writeFile(fileT1, packageT1); + writeFile(fileT2, packageT2); + writeFile(fileT3, packageT3); + writeFile(fileT4, packageT4); + writeFile(fileWurst, "package Wurst\n"); + + + ModelManagerImpl manager = new ModelManagerImpl(projectFolder, new BufferManager()); + Map errors = keepErrorsInMap(manager); + + + // first build the project + manager.buildProject(); + // no errors expected + assertEquals(errors.get(fileT1), ""); + assertEquals(errors.get(fileT2), ""); + assertEquals(errors.get(fileT3), ""); + assertEquals(errors.get(fileT4), ""); + + + // now, update the module in package T4 + writeFile(fileT4, packageT4updated); + manager.syncCompilationUnit(fileT4); + + // now, the function foo in package T1 can no longer be called + assertThat(errors.get(fileT1), CoreMatchers.containsString("Could not find function foo")); + } + } From c3f1e8f038c41bb128b8b05983fa2be5351bb184 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Tue, 31 Aug 2021 22:14:15 +0200 Subject: [PATCH 09/74] make cyclic function remover deterministic --- .../datastructures/GraphInterpreter.java | 4 +- .../tests/DeterministicChecks.java | 68 +++++++++++++------ 2 files changed, 51 insertions(+), 21 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/GraphInterpreter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/GraphInterpreter.java index 43b5f05b4..cf2895fc9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/GraphInterpreter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/GraphInterpreter.java @@ -87,8 +87,8 @@ public Set> findStronglyConnectedComponents(List nodes) { // It also uses a counter C of the number of vertices reached so far, which it uses to compute the preorder numbers of the vertices. AtomicInteger c = new AtomicInteger(); AtomicInteger componentCount = new AtomicInteger(); - Map preorderNumber = new HashMap<>(); - Map component = new HashMap<>(); + Map preorderNumber = new LinkedHashMap<>(); + Map component = new LinkedHashMap<>(); for (T v : nodes) { if (!preorderNumber.containsKey(v)) { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DeterministicChecks.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DeterministicChecks.java index 5dd69af38..5bd2aaba1 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DeterministicChecks.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DeterministicChecks.java @@ -18,12 +18,16 @@ public class DeterministicChecks extends WurstScriptTest { @Test public void simple() throws IOException { - exampleCode(); - File exampleFile1 = new File("test-output/DeterministicChecks_exampleCode.j"); + run(this::exampleCode, "exampleCode"); + } + + private void run(Runnable example, String name) throws IOException { + example.run(); + File exampleFile1 = new File("test-output/DeterministicChecks_"+ name + ".j"); String script1 = Files.toString(exampleFile1, Charsets.UTF_8); Files.move(exampleFile1, new File("test-output/det1.j")); Files.move(new File("test-output/im 1.im"), new File("test-output/im1.j")); - exampleCode(); + example.run(); String script2 = Files.toString(exampleFile1, Charsets.UTF_8); Files.move(exampleFile1, new File("test-output/det2.j")); Files.move(new File("test-output/im 1.im"), new File("test-output/im2.j")); @@ -32,22 +36,48 @@ public void simple() throws IOException { private void exampleCode() { testAssertOkLines(false, - "package test", - " native testSuccess()", - " interface I", - " function foo() returns int", - " class B implements I", - " function foo() returns int", - " return 2", - " class C implements I", - " function foo() returns int", - " return 3", - " init", - " I i1 = new B()", - " I i2 = new C()", - " if i1.foo() == 2 and i2.foo() == 3", - " testSuccess()", - "endpackage" + "package test", + "native testSuccess()", + "interface I", + " function foo() returns int", + "class B implements I", + " function foo() returns int", + " return 2", + "class C implements I", + " function foo() returns int", + " return 3", + "init", + " I i1 = new B()", + " I i2 = new C()", + " if i1.foo() == 2 and i2.foo() == 3", + " testSuccess()" + ); + } + + @Test + public void cyclicFunctionCall() throws IOException { + run(this::cycleExample, "cycleExample"); + } + + private void cycleExample() { + testAssertOkLines(false, + "package test", + "native testSuccess()", + "function a(int i) returns int", + " if i == 0", + " return 0", + " return b(i div 2)", + "function b(int i) returns int", + " if i == 0", + " return 0", + " return c(i div 2)", + "function c(int i) returns int", + " if i == 0", + " return 0", + " return a(i div 2)", + "init", + " if a(42) == 0", + " testSuccess()" ); } } From 87d078c4679262efa03e11fa7066a189367a063f Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Wed, 1 Sep 2021 00:29:13 +0200 Subject: [PATCH 10/74] Optimize compilation to Jass (#1025) some minor optimizations: - updated AST library, which improves removeAll calls - optimize replaceBy method to smarter search for position of element in parent --- de.peeeq.wurstscript/build.gradle | 2 +- .../translation/imoptimizer/ImOptimizer.java | 11 ++-- .../translation/imoptimizer/Replacer.java | 57 +++++++++++++++++++ .../imtranslation/EliminateTuples.java | 41 ++++++------- .../imtranslation/MultiArrayEliminator.java | 10 +++- .../de/peeeq/wurstscript/utils/Utils.java | 20 +------ .../wurstscript/tests/OptimizerTests.java | 30 ++++++++++ 7 files changed, 122 insertions(+), 49 deletions(-) create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/Replacer.java diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 58fc2c16f..c4f8824d6 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -75,7 +75,7 @@ dependencies { antlr "org.antlr:antlr4:4.9.2" // tool for generating AST-classes - compileOnly 'com.github.peterzeller:abstractsyntaxgen:ef7fec791a' + compileOnly 'com.github.peterzeller:abstractsyntaxgen:0.3.2' // JUnit for testing testImplementation group: 'org.testng', name: 'testng', version: '6.14.3' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImOptimizer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImOptimizer.java index e00ebc503..65de084b1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImOptimizer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImOptimizer.java @@ -10,12 +10,7 @@ import de.peeeq.wurstscript.utils.Pair; import de.peeeq.wurstscript.validation.TRVEHelper; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.HashSet; -import java.util.Set; +import java.util.*; public class ImOptimizer { private int totalFunctionsRemoved = 0; @@ -143,6 +138,7 @@ public void visit(ImSet e) { } }); + Replacer replacer = new Replacer(); for (Pair> pair : replacements) { changes = true; ImExpr r; @@ -156,7 +152,7 @@ public void visit(ImSet e) { } r = ImHelper.statementExprVoid(JassIm.ImStmts(exprs)); } - pair.getA().replaceBy(r); + replacer.replace(pair.getA(), r); } // keep only read local variables @@ -165,4 +161,5 @@ public void visit(ImSet e) { } } + } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/Replacer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/Replacer.java new file mode 100644 index 000000000..6d2b9bdf9 --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/Replacer.java @@ -0,0 +1,57 @@ +package de.peeeq.wurstscript.translation.imoptimizer; + +import de.peeeq.wurstscript.attributes.CompileError; +import de.peeeq.wurstscript.jassIm.Element; +import de.peeeq.wurstscript.jassIm.ImExpr; +import de.peeeq.wurstscript.jassIm.ImStmt; + +import javax.annotation.Nullable; +import java.util.HashMap; +import java.util.Map; + +// optimization for replaceBy +// remembers last position of elements with the assumption that the next element +// searched in the same parent will be in a similar position +public class Replacer { + private int lastPos; + + public void hintPosition(int pos) { + lastPos = pos; + } + + public void replace(Element oldElement, Element newElement) { + if (oldElement == newElement) { + return; + } + Element parent = oldElement.getParent(); + if (parent == null) { + throw new RuntimeException("Node not attached to tree."); + } + replaceInParent(parent, oldElement, newElement); + } + + public void replaceInParent(Element parent, Element oldElement, Element newElement) { + if (oldElement == newElement) { + return; + } + int pos = -1; + for (int j = 0; j < parent.size(); j++) { + int i = (lastPos + j) % parent.size(); + Element element = parent.get(i); + if (element == oldElement) { + pos = i; + break; + } + } + if (pos < 0) { + throw new CompileError(parent.attrTrace().attrSource(), "Could not find " + oldElement + " in " + parent); + } + Element oldParent = oldElement.getParent(); + parent.set(pos, newElement); + if (oldParent != parent) { + // was already moved elsewhere, so restore parent + oldElement.setParent(oldParent); + } + lastPos = pos; + } +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateTuples.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateTuples.java index fca20a886..bd9eec823 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateTuples.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateTuples.java @@ -5,14 +5,12 @@ import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.intermediatelang.optimizer.SideEffectAnalyzer; import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.translation.imoptimizer.Replacer; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator.VarsForTupleResult; import de.peeeq.wurstscript.types.TypesHelper; import de.peeeq.wurstscript.utils.Utils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.ListIterator; +import java.util.*; import java.util.stream.Collectors; /** @@ -52,11 +50,12 @@ private static void eliminateTuplesFunc(ImFunction f, final ImTranslator transla tryStep(f, translator, EliminateTuples::normalizeTuplesInStatementExprs); tryStep(f, translator, EliminateTuples::removeTupleSelections); tryStep(f, translator, EliminateTuples::normalizeTuplesInStatementExprs); - tryStep(f, translator, EliminateTuples::removeTupleExprs); + tryStep(f, translator, (stmts, translator1, fn) -> removeTupleExprs(0, stmts, translator1, fn)); } private static void removeTupleSelections(ImStmts stmts, ImTranslator tr, ImFunction f) { + Replacer replacer = new Replacer(); stmts.accept(new Element.DefaultVisitor() { @Override public void visit(ImTupleSelection ts) { @@ -92,9 +91,9 @@ public void visit(ImTupleSelection ts) { ImStatementExpr replacement1 = JassIm.ImStatementExpr(stmts, result); ImLExpr replacement2 = normalizeStatementExpr(replacement1, tr); if (replacement2 == null) { - ts.replaceBy(replacement1); + replacer.replace(ts, replacement1); } else { - ts.replaceBy(replacement2); + replacer.replace(ts, replacement2); } } }); @@ -118,7 +117,7 @@ private static void tryStep(ImFunction f, final ImTranslator translator, Step st private static Runnable transformVars(ImVars vars, ImTranslator translator) { - List varsToRemove = new ArrayList<>(); + Set varsToRemove = new LinkedHashSet<>(); ListIterator it = vars.listIterator(); while (it.hasNext()) { ImVar v = it.next(); @@ -156,6 +155,7 @@ private static ImType getFirstType(ImType t) { * - ... */ private static void toTupleExpressions(ImStmts body, ImTranslator translator, ImFunction f) { + Replacer replacer = new Replacer(); body.accept(new Element.DefaultVisitor() { @Override public void visit(ImVarAccess va) { @@ -167,7 +167,7 @@ public void visit(ImVarAccess va) { parts.collect(Collectors.toCollection(JassIm::ImExprs))), JassIm::ImVarAccess ); - va.replaceBy(expr); + replacer.replace(va, expr); } } @@ -201,9 +201,9 @@ public void visit(ImVarArrayAccess va) { var -> JassIm.ImVarArrayAccess(va.getTrace(), var, indexExprs.copy()) ); if (stmts.isEmpty()) { - va.replaceBy(expr); + replacer.replace(va, expr); } else { - va.replaceBy( + replacer.replace(va, JassIm.ImStatementExpr(stmts, expr)); } @@ -230,7 +230,7 @@ public void visit(ImFunctionCall fc) { : JassIm.ImVarAccess(var) ); - Utils.replace(parent, fc, newFc); + replacer.replaceInParent(parent, fc, newFc); } } @@ -244,6 +244,7 @@ public void visit(ImFunctionCall fc) { * becomes <{stmts >> e1}, e2, e3} */ private static void normalizeTuplesInStatementExprs(ImStmts body, ImTranslator translator, ImFunction f) { + Replacer replacer = new Replacer(); body.accept(new Element.DefaultVisitor() { @Override @@ -251,7 +252,7 @@ public void visit(ImStatementExpr se) { super.visit(se); ImTupleExpr newExpr = normalizeStatementExpr(se, translator); if (newExpr != null) { - se.replaceBy(newExpr); + replacer.replace(se, newExpr); newExpr.getExprs().get(0).accept(this); } } @@ -280,14 +281,15 @@ private static ImTupleExpr normalizeStatementExpr(ImStatementExpr se, ImTranslat * - Assignments: Become several assignments * - In Return: Use temp returns */ - private static void removeTupleExprs(Element elem, ImTranslator translator, ImFunction f) { + private static void removeTupleExprs(int posHint, Element elem, ImTranslator translator, ImFunction f) { if (elem.getParent() == null) { throw new RuntimeException("elem not used: " + elem); } for (int i = 0; i < elem.size(); i++) { Element child = elem.get(i); - removeTupleExprs(child, translator, f); + removeTupleExprs(i, child, translator, f); } + Replacer replacer = new Replacer(); for (int i = 0; i < elem.size(); i++) { Element child = elem.get(i); @@ -306,7 +308,7 @@ private static void removeTupleExprs(Element elem, ImTranslator translator, ImFu ImExprs exprs = (ImExprs) elem; if (exprs.getParent() instanceof ImOperatorCall) { ImOperatorCall opCall = (ImOperatorCall) exprs.getParent(); - handleTupleInOpCall(opCall); + handleTupleInOpCall(replacer, opCall); return; } else { // in function arguments, other tuples @@ -327,7 +329,8 @@ private static void removeTupleExprs(Element elem, ImTranslator translator, ImFu } else { throw new CompileError(tupleExpr.attrTrace().attrSource(), "Unhandled tuple position: " + elem.getClass().getSimpleName() + " // " + elem); } - elem.replaceBy(newElem); + replacer.hintPosition(posHint); + replacer.replace(elem, newElem); // since we replaced elem we are done // the new element should have no more tuple expressions @@ -338,7 +341,7 @@ private static void removeTupleExprs(Element elem, ImTranslator translator, ImFu } - private static void handleTupleInOpCall(ImOperatorCall opCall) { + private static void handleTupleInOpCall(Replacer replacer, ImOperatorCall opCall) { if (opCall.getParent() == null) { throw new RuntimeException("opCall not used: " + opCall); } @@ -370,7 +373,7 @@ private static void handleTupleInOpCall(ImOperatorCall opCall) { .reduce((l, r) -> JassIm.ImOperatorCall(WurstOperator.OR, JassIm.ImExprs(l, r))) .get(); } - opCall.replaceBy(newExpr); + replacer.replace(opCall, newExpr); } private static ImStatementExpr inSet(ImSet imSet, ImFunction f) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java index fd486c768..0fee1baac 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java @@ -5,6 +5,7 @@ import de.peeeq.wurstscript.WurstOperator; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.translation.imoptimizer.Replacer; import de.peeeq.wurstscript.types.TypesHelper; import de.peeeq.wurstscript.utils.Utils; @@ -17,6 +18,7 @@ public class MultiArrayEliminator { private HashMap getSetMap = Maps.newHashMap(); private ImTranslator translator; private final boolean generateStacktraces; + private final Replacer replacer = new Replacer(); private static class GetSetPair { ImFunction getter; @@ -111,7 +113,7 @@ private void replaceVars(Element e, Map oldToNewVar) { Element setParent = set.getParent(); set.setParent(null); stmts.add(set); - Utils.replace(setParent, set, ImHelper.statementExprVoid(stmts)); + replacer.replaceInParent(setParent, set, ImHelper.statementExprVoid(stmts)); } @@ -132,7 +134,8 @@ private void replaceVars(Element e, Map oldToNewVar) { args.add(JassIm.ImStringVal("when writing array " + va.getVar().getName() + StackTraceInjector2.getCallPos(va.getTrace().attrSource()))); } - set.replaceBy(JassIm.ImFunctionCall(set.getTrace(), getSetMap.get(va.getVar()).setter, JassIm.ImTypeArguments(), args, false, CallType.NORMAL)); + replacer.replace(set, + JassIm.ImFunctionCall(set.getTrace(), getSetMap.get(va.getVar()).setter, JassIm.ImTypeArguments(), args, false, CallType.NORMAL)); return; } } @@ -157,7 +160,8 @@ private void replaceVars(Element e, Map oldToNewVar) { args.add(JassIm.ImStringVal("when reading array " + am.getVar().getName() + " in " + StackTraceInjector2.getCallPos(am.getTrace().attrSource()))); } if (getSetMap.containsKey(am.getVar())) { - am.replaceBy(JassIm.ImFunctionCall(am.attrTrace(), getSetMap.get(am.getVar()).getter, JassIm.ImTypeArguments(), args, false, CallType.NORMAL)); + replacer.replace(am, + JassIm.ImFunctionCall(am.attrTrace(), getSetMap.get(am.getVar()).getter, JassIm.ImTypeArguments(), args, false, CallType.NORMAL)); } } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java index 57d90e3ed..82e5d4621 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java @@ -12,6 +12,7 @@ import de.peeeq.wurstscript.attributes.prettyPrint.DefaultSpacer; import de.peeeq.wurstscript.jassIm.JassImElementWithName; import de.peeeq.wurstscript.parser.WPos; +import de.peeeq.wurstscript.translation.imoptimizer.Replacer; import de.peeeq.wurstscript.types.WurstType; import de.peeeq.wurstscript.types.WurstTypeUnknown; import org.eclipse.jdt.annotation.Nullable; @@ -990,25 +991,6 @@ public static String printTypeExpr(TypeExpr t) { return wt.toString(); } - /** - * Replaces oldElement with newElement in parent - */ - public static void replace(de.peeeq.wurstscript.jassIm.Element parent, de.peeeq.wurstscript.jassIm.Element oldElement, de.peeeq.wurstscript.jassIm.Element newElement) { - if (oldElement == newElement) { - return; - } - de.peeeq.wurstscript.jassIm.Element oldElementParent = oldElement.getParent(); - for (int i=0; i Date: Wed, 1 Sep 2021 00:32:25 +0200 Subject: [PATCH 11/74] Temp merger optimization (#1024) Optimize TempMerger to avoid linear searches. Just another case of accidentially quadratic runtime complexity. Profiler showed that this takes up a rather large chunk of overall test time. --- .../optimizer/TempMerger.java | 67 +++++++-- .../wurstscript/utils/MapWithIndexes.java | 136 ++++++++++++++++++ 2 files changed, 188 insertions(+), 15 deletions(-) create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/MapWithIndexes.java diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java index 44b84b3e6..ab8ce93ca 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java @@ -1,20 +1,19 @@ package de.peeeq.wurstscript.intermediatelang.optimizer; import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; +import com.google.common.collect.*; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.translation.imoptimizer.OptimizerPass; import de.peeeq.wurstscript.translation.imtranslation.AssertProperty; import de.peeeq.wurstscript.translation.imtranslation.ImHelper; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; +import de.peeeq.wurstscript.utils.MapWithIndexes; +import de.peeeq.wurstscript.utils.MapWithIndexes.Index; +import de.peeeq.wurstscript.utils.MapWithIndexes.PredIndex; import de.peeeq.wurstscript.utils.Utils; import org.eclipse.jdt.annotation.Nullable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.Map.Entry; public class TempMerger implements OptimizerPass { @@ -295,20 +294,57 @@ private void collectReadVariables(Collection result, Element e) { class Knowledge { - private HashMap currentValues = Maps.newLinkedHashMap(); + class VarKnowledge { + private final ImSet imSet; + private final Set dependsOn; + private final boolean dependsOnGlobals; + private final boolean isMutating; + + public VarKnowledge(ImSet imSet, Set dependsOn, boolean dependsOnGlobals, boolean isMutating) { + this.imSet = imSet; + this.dependsOn = dependsOn; + this.dependsOnGlobals = dependsOnGlobals; + this.isMutating = isMutating; + } + + public VarKnowledge(ImSet set) { + this.imSet = set; + this.dependsOn = new LinkedHashSet<>(); + collectReadVariables(this.dependsOn, set.getRight()); + boolean containsFuncCall = containsFuncCall(set); + this.dependsOnGlobals = containsFuncCall || readsGlobal(set.getRight()); + this.isMutating = containsFuncCall; + } + + private void collectReadVariables(Collection result, Element e) { + if (e instanceof ImVarRead) { + result.add(((ImVarRead) e).getVar()); + } + for (int i = 0; i < e.size(); i++) { + collectReadVariables(result, e.get(i)); + } + } + } + - List invalid = Lists.newArrayList(); + private final MapWithIndexes currentValues = new MapWithIndexes<>(); + // map from a variable to the keys in currentValues that read it + private final Index readBy = currentValues.createMultiIndex((v) -> v.dependsOn); + // set of keys in currentValues that depend on global state + private final PredIndex globalState = currentValues.createPredicateIndex(v -> v.dependsOnGlobals); + // set of keys in currentValues that can change global state + private final PredIndex mutating = currentValues.createPredicateIndex(v -> v.isMutating); public void invalidateGlobals() { // invalidate all knowledge which might be based on global state // i.e. using a global var or calling a function - currentValues.entrySet().removeIf(e -> readsGlobal(e.getValue().getRight()) || containsFuncCall(e.getValue())); + currentValues.removeAll(globalState.lookup()); } public void invalidateMutatingExpressions() { // invalidate all knowledge which can change global state // i.e. calling a function - currentValues.entrySet().removeIf(e -> containsFuncCall(e.getValue())); + currentValues.removeAll(mutating.lookup()); } public void clear() { @@ -316,9 +352,9 @@ public void clear() { } public @Nullable Replacement getReplacementIfPossible(ImVarAccess va) { - for (Entry e : currentValues.entrySet()) { + for (Entry e : currentValues.entrySet()) { if (e.getKey() == va.getVar()) { - return new Replacement(e.getValue(), va); + return new Replacement(e.getValue().imSet, va); } } return null; @@ -333,7 +369,8 @@ public void update(ImVar left, ImSet set) { if (isMergable(left, set.getRight())) { // only store local vars which are read exactly once - currentValues.put(left, set); + VarKnowledge k = new VarKnowledge(set); + currentValues.put(left, k); } } @@ -368,7 +405,7 @@ private void invalidateVar(ImVar left) { if (left.isGlobal()) { invalidateGlobals(); } else { - currentValues.entrySet().removeIf(e -> readsVar(e.getValue().getRight(), left)); + currentValues.removeAll(readBy.lookup(left)); } } @@ -378,7 +415,7 @@ public String toString() { keys.sort(Utils.compareByNameIm()); StringBuilder sb = new StringBuilder(); for (ImVar v : keys) { - ImSet s = currentValues.get(v); + ImSet s = currentValues.get(v).imSet; sb.append(v.getName()).append(" -> ").append(s).append(", "); } return sb.toString(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/MapWithIndexes.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/MapWithIndexes.java new file mode 100644 index 000000000..d4698607c --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/MapWithIndexes.java @@ -0,0 +1,136 @@ +package de.peeeq.wurstscript.utils; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; + +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.Predicate; + +/** + * A map from keys of type K to values of type V + * with the additional feature of creating indexes for values. + * Indexes are automatically kept up to date. + * + * Assumption: index functions do not change. + */ +public class MapWithIndexes { + private final Map base = new LinkedHashMap<>(); + private final List> onInserts = new ArrayList<>(); + private final List> onDelete = new ArrayList<>(); + + + public Index createIndex(Function indexedValue) { + Multimap index = LinkedHashMultimap.create(); + onInserts.add((k, v) -> index.put(indexedValue.apply(v), k)); + onDelete.add((k, v) -> index.remove(indexedValue.apply(v), k)); + return key -> ImmutableList.copyOf(index.get(key)); + } + + public PredIndex createPredicateIndex(Predicate indexedValue) { + Set index = new LinkedHashSet<>(); + onInserts.add((k, v) -> { + if (indexedValue.test(v)) { + index.add(k); + } + }); + onDelete.add((k, v) -> { + index.remove(k); + }); + return () -> ImmutableList.copyOf(index); + } + + public Index createMultiIndex(Function> indexedValue) { + Multimap index = LinkedHashMultimap.create(); + onInserts.add((k, v) -> { + Collection is = indexedValue.apply(v); + for (I i : is) { + index.put(i, k); + } + }); + onDelete.add((k, v) -> { + Collection is = indexedValue.apply(v); + for (I i : is) { + index.remove(i, k); + } + }); + return key -> ImmutableList.copyOf(index.get(key)); + } + + + public boolean isEmpty() { + return base.isEmpty(); + } + + public boolean containsKey(K key) { + return base.containsKey(key); + } + + public V get(K key) { + return base.get(key); + } + + public V put(K key, V value) { + Preconditions.checkNotNull(key, "key must not be null"); + Preconditions.checkNotNull(value, "value must not be null"); + V oldV = base.put(key, value); + if (oldV != null) { + for (BiConsumer f : onDelete) { + f.accept(key, value); + } + } + for (BiConsumer f : onInserts) { + f.accept(key, value); + } + return oldV; + } + + public V remove(K key) { + V value = base.remove(key); + if (value != null) { + for (BiConsumer f : onDelete) { + f.accept(key, value); + } + } + return value; + } + + public void clear() { + for (Map.Entry e : base.entrySet()) { + for (BiConsumer f : onDelete) { + f.accept(e.getKey(), e.getValue()); + } + } + base.clear(); + } + + public Set keySet() { + return base.keySet(); + } + + public Collection values() { + return base.values(); + } + + public Set> entrySet() { + return base.entrySet(); + } + + public void removeAll(Collection ks) { + for (K k : ks) { + remove(k); + } + } + + public interface Index { + Collection lookup(I i); + } + + public interface PredIndex { + Collection lookup(); + } +} From 3d883adef2e43d9188956a302452258bc9e57188 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Wed, 1 Sep 2021 00:54:28 +0200 Subject: [PATCH 12/74] make LocalMerger deterministic --- .../optimizer/LocalMerger.java | 21 +++++------ .../tests/DeterministicChecks.java | 36 +++++++++++++++++++ .../wurstscript/tests/OptimizerTests.java | 26 -------------- 3 files changed, 45 insertions(+), 38 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java index 84aa72347..ba1f34ec9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java @@ -6,14 +6,11 @@ import de.peeeq.wurstscript.translation.imoptimizer.OptimizerPass; import de.peeeq.wurstscript.translation.imtranslation.ImHelper; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; +import de.peeeq.wurstscript.utils.Utils; import io.vavr.collection.HashSet; import io.vavr.collection.Set; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.PriorityQueue; +import java.util.*; import static de.peeeq.wurstscript.translation.imtranslation.FunctionFlagEnum.IS_VARARG; @@ -130,7 +127,7 @@ public void visit(ImVarargLoop varargLoop) { * for each variable: the set of variables which share some lifetime-range */ private Map> calculateInferenceGraph(Map> livenessInfo) { - Map> inferenceGraph = new HashMap<>(); + Map> inferenceGraph = new LinkedHashMap<>(); java.util.Set keys = livenessInfo.keySet(); int i = 0; for (ImStmt s : keys) { @@ -172,12 +169,12 @@ private void eliminateDeadCode(Map> livenessInfo) { public Map> calculateLiveness(ImFunction func) { ControlFlowGraph cfg = new ControlFlowGraph(func.getBody()); - Map> in = new HashMap<>(); - Map> out = new HashMap<>(); + Map> in = new LinkedHashMap<>(); + Map> out = new LinkedHashMap<>(); Worklist todo = new Worklist<>(); - Map index = new HashMap<>(); + Map index = new LinkedHashMap<>(); // init in and out with empty sets for (Node node : cfg.getNodes()) { @@ -217,7 +214,7 @@ public Map> calculateLiveness(ImFunction func) { } } - Map> result = new HashMap<>(); + Map> result = new LinkedHashMap<>(); for (Node node : cfg.getNodes()) { ImStmt stmt = node.getStmt(); if (stmt != null) { @@ -228,7 +225,7 @@ public Map> calculateLiveness(ImFunction func) { } private Map> calculateUses(List nodes) { - Map> result = new HashMap<>(); + Map> result = new LinkedHashMap<>(); for (Node node : nodes) { List uses = new ArrayList<>(); ImStmt stmt = node.getStmt(); @@ -289,7 +286,7 @@ public void case_ImTupleExpr(ImTupleExpr e) { } private Map> calculateDefs(List nodes) { - Map>result = new HashMap<>(); + Map>result = new LinkedHashMap<>(); for (Node node : nodes) { result.put(node, HashSet.empty()); ImStmt stmt = node.getStmt(); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DeterministicChecks.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DeterministicChecks.java index 5bd2aaba1..074aee422 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DeterministicChecks.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DeterministicChecks.java @@ -2,10 +2,13 @@ import com.google.common.base.Charsets; import com.google.common.io.Files; +import org.testng.AssertJUnit; import org.testng.annotations.Test; import java.io.File; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import static org.testng.Assert.assertEquals; @@ -80,4 +83,37 @@ private void cycleExample() { " testSuccess()" ); } + + @Test + public void test_var_merge() throws IOException { + Map counts = new HashMap<>(); + for (int i = 0; i < 10; i++) { + test().executeProg(true).lines( + "package test", + "native testSuccess()", + "native println(string s)", + "function foo(string p_msg, string p_pos) returns string", + " var msg = p_msg", + " var pos = p_pos", + " pos = msg", + " msg = \"\"", + " for i = 1 to 3", + " msg += \"x\"", + " return pos + msg", + "init", + " let s = foo(\"a\", \"b\")", + " if s == \"axxx\"", + " testSuccess()", + ""); + + String output = Files.toString(new File("./test-output/DeterministicChecks_test_var_merge_opt.j"), Charsets.UTF_8); + counts.put(output, counts.getOrDefault(output, 0) + 1); + } + //System.out.println("counts = " + counts.values()); + AssertJUnit.assertEquals(1, counts.size()); + //System.out.println(counts.keySet()); + // Interesting note: LocalMerger seems to switch the order in the return line and sometimes rewrites the return to + // return p_msg + p_pos + } + } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java index c86474ed7..ca2f02a41 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java @@ -1087,30 +1087,4 @@ public void testFunctionSplitter() { } - @Test - public void test_var_merge() throws IOException { - test().executeProg(true).lines( - "package test", - "native testSuccess()", - "native println(string s)", - "function foo(string p_msg, string p_pos) returns string", - " var msg = p_msg", - " var pos = p_pos", - " pos = msg", - " msg = \"\"", - " for i = 1 to 3", - " msg += \"x\"", - " return pos + msg", - "init", - " let s = foo(\"a\", \"b\")", - " println(s)", - " if s == \"axxx\"", - " testSuccess()", - ""); - // String output = Files.toString(new File("./test-output/OptimizerTests_test_var_merge_opt.j"), Charsets.UTF_8); - // this is interesting: it seems to switch the order in the return line and sometimes rewrites the return to - // return p_msg + p_pos - // don't know how this works, but it seems to be correct - } - } From d00b455ba914a6bd5ee6edd5f9bdca4b41ffde77 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Wed, 1 Sep 2021 01:24:20 +0200 Subject: [PATCH 13/74] remove old Scanner code for parsing wurst files --- .../src/main/java/de/peeeq/wurstscript/WurstParser.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java index 41bc034f0..8b388b3f8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java @@ -36,11 +36,7 @@ public WurstParser(ErrorHandler errorHandler, WurstGui gui) { } public CompilationUnit parse(Reader reader, String source, boolean hasCommonJ) { - try (java.util.Scanner s = new java.util.Scanner(reader)) { - s.useDelimiter("\\A"); - String input = s.hasNext() ? s.next() : ""; - return parseWithAntlr(new StringReader(input), source, hasCommonJ); - } + return parseWithAntlr(reader, source, hasCommonJ); } From 06fd47f45fa8cc514f33ecd041cbbbdb4cf38422 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Wed, 1 Sep 2021 13:45:16 +0200 Subject: [PATCH 14/74] cache parse results in unit tests --- .../peeeq/wurstio/WurstCompilerJassImpl.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index 59cb94ba0..f7496e018 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -28,10 +28,7 @@ import de.peeeq.wurstscript.translation.imtranslation.*; import de.peeeq.wurstscript.translation.lua.translation.LuaTranslator; import de.peeeq.wurstscript.types.TypesHelper; -import de.peeeq.wurstscript.utils.LineOffsets; -import de.peeeq.wurstscript.utils.NotNullList; -import de.peeeq.wurstscript.utils.TempDir; -import de.peeeq.wurstscript.utils.Utils; +import de.peeeq.wurstscript.utils.*; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.lsp4j.MessageType; import org.jetbrains.annotations.NotNull; @@ -701,7 +698,26 @@ private boolean isWurstGenerated(File tempFile) { return false; } + // a cache for compilation units, only used for unit tests to avoid parsing standard library too many times + private static final Map fileCompilationUnitCache = new HashMap<>(); + private CompilationUnit parseFile(File file) { + if (errorHandler.isUnitTestMode()) { + // in unit test mode, we use a cache + CompilationUnit res = fileCompilationUnitCache.get(file); + if (res == null) { + res = parseFile2(file); + fileCompilationUnitCache.put(file, res); + } else { + res = res.copy(); + } + return res; + } else { + return parseFile2(file); + } + } + + private CompilationUnit parseFile2(File file) { if (file.isDirectory()) { throw new Error("Is a directory: " + file); } From 143ea9777c4917b81281da53c668099c1143fffc Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Wed, 1 Sep 2021 14:17:36 +0200 Subject: [PATCH 15/74] use weak reference for parse-cache --- .../main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index f7496e018..b066dce38 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -34,6 +34,7 @@ import org.jetbrains.annotations.NotNull; import java.io.*; +import java.lang.ref.WeakReference; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.Map.Entry; @@ -699,15 +700,16 @@ private boolean isWurstGenerated(File tempFile) { } // a cache for compilation units, only used for unit tests to avoid parsing standard library too many times - private static final Map fileCompilationUnitCache = new HashMap<>(); + private static final Map> fileCompilationUnitCache = new HashMap<>(); private CompilationUnit parseFile(File file) { if (errorHandler.isUnitTestMode()) { // in unit test mode, we use a cache - CompilationUnit res = fileCompilationUnitCache.get(file); + WeakReference wr = fileCompilationUnitCache.get(file); + CompilationUnit res = wr == null ? null : wr.get(); if (res == null) { res = parseFile2(file); - fileCompilationUnitCache.put(file, res); + fileCompilationUnitCache.put(file, new WeakReference<>(res)); } else { res = res.copy(); } From 0fcf4e44536318c46b179a0ef8e83f69e83191aa Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Sun, 26 Sep 2021 17:55:50 +0200 Subject: [PATCH 16/74] add reconcilation timer for type checks after edits, wait 3 seconds before doing type check. This should save energy and result in a smoother editing experience. --- .../languageserver/DebouncingTimer.java | 51 +++++++++++++++++ .../languageserver/LanguageWorker.java | 51 +++++++++++++++-- .../wurstio/languageserver/ModelManager.java | 56 ++++++++++++++++++- .../languageserver/ModelManagerImpl.java | 44 ++++++++++++--- .../de/peeeq/wurstscript/utils/Utils.java | 11 ++++ 5 files changed, 197 insertions(+), 16 deletions(-) create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/DebouncingTimer.java diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/DebouncingTimer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/DebouncingTimer.java new file mode 100644 index 000000000..623dc4ea1 --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/DebouncingTimer.java @@ -0,0 +1,51 @@ +package de.peeeq.wurstio.languageserver; + +import java.time.Duration; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +public class DebouncingTimer { + final private Runnable action; + final private ScheduledExecutorService es = Executors.newSingleThreadScheduledExecutor(); + private boolean isReady = false; + private ScheduledFuture fut; + + + public DebouncingTimer(Runnable action) { + this.action = action; + } + + + /** checks whether the timer is ready */ + public synchronized boolean isReady() { + return isReady; + } + + public synchronized void stop() { + if (fut != null) { + fut.cancel(true); + fut = null; + } + isReady = false; + } + + public synchronized void start(Duration d) { + stop(); + fut = es.schedule(() -> { + synchronized (DebouncingTimer.this) { + isReady = true; + } + action.run(); + }, d.toMillis(), TimeUnit.MILLISECONDS); + } + + + + + +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java index fee5d0f52..f8d678997 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java @@ -3,9 +3,11 @@ import de.peeeq.wurstio.languageserver.requests.HoverInfo; import de.peeeq.wurstio.languageserver.requests.UserRequest; import de.peeeq.wurstscript.WLogger; +import de.peeeq.wurstscript.utils.Utils; import org.eclipse.lsp4j.*; import org.eclipse.lsp4j.services.LanguageClient; +import java.time.Duration; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicLong; @@ -38,6 +40,7 @@ public String toString() { private final AtomicLong currentTime = new AtomicLong(); private final Queue> userRequests = new LinkedList<>(); private final Thread thread; + public final Duration reconcileWaitTime; private ModelManager modelManager; @@ -48,10 +51,19 @@ public void setRootPath(WFile rootPath) { private WFile rootPath; private final Object lock = new Object(); - private BufferManager bufferManager = new BufferManager(); + private ModelManager.Changes changesToReconcile = ModelManager.Changes.empty(); + private final DebouncingTimer packagesToReconcileTimer = new DebouncingTimer(() -> { + synchronized (lock) { + lock.notify(); + } + }); + private final BufferManager bufferManager = new BufferManager(); private LanguageClient languageClient; public LanguageWorker() { + Optional waitTime = Utils.getEnvOrConfig("WURST_RECONCILE_WAIT_TIME"); + reconcileWaitTime = waitTime.map(Duration::parse).orElse(Duration.ofSeconds(3)); + // start working thread = new Thread(this); thread.setName("Wurst LanguageWorker"); @@ -93,6 +105,11 @@ class FileUpdated extends PendingChange { public FileUpdated(WFile filename) { super(filename); } + + @Override + public String toString() { + return "FileUpdated(" + getFilename() + ")"; + } } class FileDeleted extends PendingChange { @@ -100,6 +117,11 @@ class FileDeleted extends PendingChange { public FileDeleted(WFile filename) { super(filename); } + + @Override + public String toString() { + return "FileDeleted(" + getFilename() + ")"; + } } class FileReconcile extends PendingChange { @@ -114,6 +136,11 @@ public FileReconcile(WFile filename, String contents) { public String getContents() { return contents; } + + @Override + public String toString() { + return "FileReconcile(" + getFilename() + ")"; + } } @Override @@ -162,20 +189,34 @@ private Workitem getNextWorkItem() { // TODO this can be done more efficiently than doing one at a time PendingChange change = removeFirst(changes); return new Workitem(change.toString(), () -> { + ModelManager.Changes affected = null; if (isWurstDependencyFile(change)) { if (!(change instanceof FileReconcile)) { modelManager.clean(); } } else if (change instanceof FileDeleted) { - modelManager.removeCompilationUnit(change.getFilename()); + affected = modelManager.removeCompilationUnit(change.getFilename()); } else if (change instanceof FileUpdated) { - modelManager.syncCompilationUnit(change.getFilename()); + affected = modelManager.syncCompilationUnit(change.getFilename()); } else if (change instanceof FileReconcile) { FileReconcile fr = (FileReconcile) change; - modelManager.syncCompilationUnitContent(fr.getFilename(), fr.getContents()); + affected = modelManager.syncCompilationUnitContent(fr.getFilename(), fr.getContents()); } else { WLogger.info("unhandled change request: " + change); } + + if (affected != null) { + changesToReconcile = changesToReconcile.mergeWith(affected); + packagesToReconcileTimer.start(reconcileWaitTime); + } + }); + } else if (!changesToReconcile.isEmpty() && packagesToReconcileTimer.isReady()) { + packagesToReconcileTimer.stop(); + ModelManager.Changes changes = changesToReconcile; + changesToReconcile = ModelManager.Changes.empty(); + + return new Workitem("reconcile files", () -> { + modelManager.reconcile(changes.getAffectedFiles().toJavaSet(), changes.getAffectedPackageNames().toJavaSet()); }); } return null; @@ -264,7 +305,7 @@ public CompletableFuture handle(UserRequest request) { request.handleException(languageClient, err, resFut); } else if (res == null) { System.err.println("Request returned null: " + request); - if(!(request instanceof HoverInfo)) { + if (!(request instanceof HoverInfo)) { languageClient.showMessage(new MessageParams(MessageType.Error, "Request returned null: " + request)); } resFut.completeExceptionally(new RuntimeException("Request returned null: " + request)); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java index 9128fc6d2..c406c30c8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java @@ -1,20 +1,25 @@ package de.peeeq.wurstio.languageserver; +import com.google.common.collect.ImmutableSet; import de.peeeq.wurstscript.ast.CompilationUnit; import de.peeeq.wurstscript.ast.ModuleInstanciations; import de.peeeq.wurstscript.ast.WurstModel; import de.peeeq.wurstscript.attributes.CompileError; +import io.vavr.collection.HashSet; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.lsp4j.PublishDiagnosticsParams; import java.io.File; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Set; import java.util.function.Consumer; +import java.util.stream.Stream; public interface ModelManager { - boolean removeCompilationUnit(WFile filename); + Changes removeCompilationUnit(WFile filename); /** * cleans the model @@ -27,9 +32,9 @@ public interface ModelManager { void buildProject(); - void syncCompilationUnit(WFile changedFilePath); + Changes syncCompilationUnit(WFile changedFilePath); - void syncCompilationUnitContent(WFile filename, String contents); + Changes syncCompilationUnitContent(WFile filename, String contents); CompilationUnit replaceCompilationUnitContent(WFile filename, String buffer, boolean reportErrors); @@ -60,4 +65,49 @@ public void visit(ModuleInstanciations mis) { File getProjectPath(); String getFirstErrorDescription(); + + /** clean and typecheck the given files */ + void reconcile(Collection toCheck, Set oldPackageNames); + + class Changes { + private static final Changes EMPTY = new Changes(HashSet.empty(), HashSet.empty()); + private final HashSet affectedFiles; + private final HashSet affectedPackageNames; + + public Changes(Iterable affectedFiles, Iterable affectedPackageNames) { + this.affectedFiles = HashSet.ofAll(affectedFiles); + this.affectedPackageNames = HashSet.ofAll(affectedPackageNames); + } + + public Changes(Stream affectedFiles, Stream affectedPackageNames) { + this.affectedFiles = HashSet.ofAll(affectedFiles); + this.affectedPackageNames = HashSet.ofAll(affectedPackageNames); + } + + public static Changes empty() { + return EMPTY; + } + + public HashSet getAffectedFiles() { + return affectedFiles; + } + + public HashSet getAffectedPackageNames() { + return affectedPackageNames; + } + + public Changes mergeWith(Changes affected) { + HashSet newF = affectedFiles.addAll(affected.affectedFiles); + HashSet newP = affectedPackageNames.addAll(affected.affectedPackageNames); + if (newF == affectedFiles && newP == affectedPackageNames) { + return this; + } + return new Changes(newF, newP); + } + + public boolean isEmpty() { + return affectedFiles.isEmpty() && affectedPackageNames.isEmpty(); + } + } + } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java index 9e6f599c8..1ed14773c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java @@ -85,15 +85,23 @@ private List getJassdocCUs(Path jassdoc, WurstGui gui) { } @Override - public boolean removeCompilationUnit(WFile resource) { + public Changes removeCompilationUnit(WFile resource) { parseErrors.remove(resource); WurstModel model2 = model; if (model2 == null) { - return false; + return Changes.empty(); } syncCompilationUnitContent(resource, ""); - return model2.removeIf(cu -> wFile(cu).equals(resource)); + List toRemove = model2.stream() + .filter(cu -> wFile(cu).equals(resource)) + .collect(Collectors.toList()); + model2.removeAll(toRemove); + return new Changes(toRemove.stream() + .map(this::wFile), + toRemove.stream() + .flatMap(cu -> cu.getPackages().stream()) + .map(WPackage::getName)); } @Override @@ -455,12 +463,11 @@ private void replaceCompilationUnit(WFile filename) { @Override - public void syncCompilationUnitContent(WFile filename, String contents) { + public Changes syncCompilationUnitContent(WFile filename, String contents) { WLogger.info("sync contents for " + filename); Set oldPackages = declaredPackages(filename); replaceCompilationUnit(filename, contents, true); - WurstGui gui = new WurstGuiLogger(); - doTypeCheckPartial(gui, ImmutableList.of(filename), oldPackages); + return new Changes(io.vavr.collection.HashSet.of(filename), oldPackages); } private Set declaredPackages(WFile f) { @@ -486,13 +493,14 @@ public CompilationUnit replaceCompilationUnitContent(WFile filename, String cont @Override - public void syncCompilationUnit(WFile f) { + public Changes syncCompilationUnit(WFile f) { WLogger.info("syncCompilationUnit File " + f); Set oldPackages = declaredPackages(f); replaceCompilationUnit(f); WLogger.info("replaced file " + f); WurstGui gui = new WurstGuiLogger(); doTypeCheckPartial(gui, ImmutableList.of(f), oldPackages); + return new Changes(io.vavr.collection.HashSet.of(f), oldPackages); } private CompilationUnit replaceCompilationUnit(WFile filename, String contents, boolean reportErrors) { @@ -593,6 +601,25 @@ private void doTypeCheckPartial(WurstGui gui, List toCheckFilenames, Set< Collection toCheckRec = calculateCUsToUpdate(toCheck, oldPackages, model2); + partialTypecheck(model2, toCheckRec, gui, comp); + } + + @Override + public void reconcile(Collection toCheck, Set oldPackageNames) { + WurstModel model2 = model; + if (model2 == null) { + return; + } + Collection toCheck1 = model2.stream() + .filter(cu -> toCheck.contains(WFile.create(cu.getCuInfo().getFile()))) + .collect(Collectors.toSet()); + Collection toCheckRec = calculateCUsToUpdate(toCheck1, oldPackageNames, model2); + WurstGui gui = new WurstGuiLogger(); + WurstCompilerJassImpl comp = getCompiler(gui); + partialTypecheck(model2, toCheckRec, gui, comp); + } + + private void partialTypecheck(WurstModel model2, Collection toCheckRec, WurstGui gui, WurstCompilerJassImpl comp) { try { clearCompilationUnits(toCheckRec); comp.addImportedLibs(model2, this::addCompilationUnit); @@ -607,6 +634,7 @@ private void doTypeCheckPartial(WurstGui gui, List toCheckFilenames, Set< reportErrorsForFiles(fileNames, gui); } + /** * Calculates compilation * @@ -616,7 +644,7 @@ private void doTypeCheckPartial(WurstGui gui, List toCheckFilenames, Set< * @param model the complete AST * @return the set of compilation units that might be affected by the changes, including the changed compilation units */ - private Set calculateCUsToUpdate(List changed, Set oldPackages, WurstModel model) { + private Set calculateCUsToUpdate(Collection changed, Set oldPackages, WurstModel model) { Set result = new TreeSet<>(Comparator.comparing(cu -> cu.getCuInfo().getFile())); result.addAll(changed); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java index 82e5d4621..feb1e1b27 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java @@ -998,6 +998,17 @@ public static List init(List list) { return list.stream().limit(list.size() - 1).collect(Collectors.toList()); } + public static Optional getEnvOrConfig(String varName) { + String res = System.getenv(varName); + if (res == null || res.isEmpty()) { + res = System.getProperty(varName); + } + if (res == null || res.isEmpty()) { + return Optional.empty(); + } + return Optional.of(res); + } + public static class ExecResult { private final String stdOut; private final String stdErr; From b4f265ba24a805724b45de46334bdaf3d7ae6559 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Sun, 3 Oct 2021 19:45:48 +0200 Subject: [PATCH 17/74] fix ModelManagerTest --- .../peeeq/wurstio/languageserver/LanguageWorker.java | 2 +- .../de/peeeq/wurstio/languageserver/ModelManager.java | 2 +- .../wurstio/languageserver/ModelManagerImpl.java | 5 +++-- .../tests/wurstscript/tests/ModelManagerTests.java | 11 +++++++---- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java index f8d678997..dd19e028f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java @@ -216,7 +216,7 @@ private Workitem getNextWorkItem() { changesToReconcile = ModelManager.Changes.empty(); return new Workitem("reconcile files", () -> { - modelManager.reconcile(changes.getAffectedFiles().toJavaSet(), changes.getAffectedPackageNames().toJavaSet()); + modelManager.reconcile(changes); }); } return null; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java index c406c30c8..a8f63f915 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java @@ -67,7 +67,7 @@ public void visit(ModuleInstanciations mis) { String getFirstErrorDescription(); /** clean and typecheck the given files */ - void reconcile(Collection toCheck, Set oldPackageNames); + void reconcile(Changes changes); class Changes { private static final Changes EMPTY = new Changes(HashSet.empty(), HashSet.empty()); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java index 1ed14773c..ea4a71f33 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java @@ -605,14 +605,15 @@ private void doTypeCheckPartial(WurstGui gui, List toCheckFilenames, Set< } @Override - public void reconcile(Collection toCheck, Set oldPackageNames) { + public void reconcile(Changes changes) { WurstModel model2 = model; if (model2 == null) { return; } Collection toCheck1 = model2.stream() - .filter(cu -> toCheck.contains(WFile.create(cu.getCuInfo().getFile()))) + .filter(cu -> changes.getAffectedFiles().contains(WFile.create(cu.getCuInfo().getFile()))) .collect(Collectors.toSet()); + Set oldPackageNames = changes.getAffectedPackageNames().toJavaSet(); Collection toCheckRec = calculateCUsToUpdate(toCheck1, oldPackageNames, model2); WurstGui gui = new WurstGuiLogger(); WurstCompilerJassImpl comp = getCompiler(gui); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java index c79bf4af5..b8b23decb 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java @@ -2,6 +2,7 @@ import com.google.common.collect.ImmutableSet; import de.peeeq.wurstio.languageserver.BufferManager; +import de.peeeq.wurstio.languageserver.ModelManager; import de.peeeq.wurstio.languageserver.ModelManagerImpl; import de.peeeq.wurstio.languageserver.WFile; import de.peeeq.wurstio.utils.FileUtils; @@ -33,7 +34,7 @@ public class ModelManagerTests { @Test - public void test() throws IOException { + public void test() throws IOException, InterruptedException { File projectFolder = new File("./temp/testProject/"); File wurstFolder = new File(projectFolder, "wurst"); newCleanFolder(wurstFolder); @@ -90,7 +91,8 @@ public void test() throws IOException { // no assume we fix package B String packageB_v2 = packageB_v1.replace("b_old", "b"); results.clear(); - manager.syncCompilationUnitContent(fileB, packageB_v2); + ModelManager.Changes changes = manager.syncCompilationUnitContent(fileB, packageB_v2); + manager.reconcile(changes); // the change of B should trigger rechecks of A and B, but not of C assertEquals(ImmutableSet.of(fileA, fileB), results.keySet()); @@ -102,7 +104,8 @@ public void test() throws IOException { // no we fix package C: String packageC_v2 = packageC_v1.replace("c_old", "c"); results.clear(); - manager.syncCompilationUnitContent(fileC, packageC_v2); + changes = manager.syncCompilationUnitContent(fileC, packageC_v2); + manager.reconcile(changes); // the change of B should trigger rechecks of A, B, and C assertEquals(ImmutableSet.of(fileA, fileB, fileC), results.keySet()); @@ -250,7 +253,7 @@ private Map keepErrorsInMap(ModelManagerImpl manager) { results.put(WFile.create(res.getUri()), errors); for (Diagnostic err : res.getDiagnostics()) { - System.out.println(" err: " + err); + System.out.println(" " + err.getSeverity() + " in " + res.getUri() + ", line " + err.getRange().getStart().getLine() + "\n " + err.getMessage()); } }); return results; From c4f4c8b1fa51973ddba6ffa8d53819c526645609 Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Sat, 9 Oct 2021 19:44:25 +0200 Subject: [PATCH 18/74] fixed flickering errors while typing --- .../languageserver/ModelManagerImpl.java | 9 +++- .../wurstscript/tests/ModelManagerTests.java | 47 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java index ea4a71f33..4acb7e704 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java @@ -529,7 +529,14 @@ private CompilationUnit replaceCompilationUnit(WFile filename, String contents, if (gui.getErrorCount() > 0) { WLogger.info("found " + gui.getErrorCount() + " errors in file " + filename); } - reportErrors("sync cu " + filename, filename, gui.getErrorsAndWarnings()); + ImmutableList.Builder errors = ImmutableList.builder() + .addAll(gui.getErrorsAndWarnings()); + + if (otherErrors.containsKey(filename)) { + errors.addAll(otherErrors.get(filename)); + } + + reportErrors("sync cu " + filename, filename, errors.build()); } return cu; } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java index b8b23decb..686b310a7 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java @@ -25,6 +25,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; import static org.hamcrest.CoreMatchers.containsString; @@ -545,5 +546,51 @@ public void moduleTransitive() throws IOException { assertThat(errors.get(fileT1), CoreMatchers.containsString("Could not find function foo")); } + @Test + public void keepTypeErrorsWhileEditing() throws IOException { + File projectFolder = new File("./temp/testProject2/"); + File wurstFolder = new File(projectFolder, "wurst"); + newCleanFolder(wurstFolder); + + + String packageT1 = string( + "package T1", + "init", + " foo()" + ); + + String packageT1updated = string( + "package T1", + "init", + " foo()", + " if (" + ); + + WFile fileT1 = WFile.create(new File(wurstFolder, "T1.wurst")); + WFile fileWurst = WFile.create(new File(wurstFolder, "Wurst.wurst")); + + + writeFile(fileT1, packageT1); + writeFile(fileWurst, "package Wurst\n"); + + + ModelManagerImpl manager = new ModelManagerImpl(projectFolder, new BufferManager()); + Map errors = keepErrorsInMap(manager); + + + // first build the project + manager.buildProject(); + // should show the type error + assertThat(errors.get(fileT1), CoreMatchers.containsString("Reference to function foo could not be resolved.")); + + + // now, update package T1 and introduce a syntax error + manager.syncCompilationUnitContent(fileT1, packageT1updated); + + // now the errors should contain the syntax error and the type error + assertThat(errors.get(fileT1), CoreMatchers.containsString("Reference to function foo could not be resolved.")); + assertThat(errors.get(fileT1), CoreMatchers.containsString("extraneous input '(' expecting NL")); + } + } From 1b617dea897cb00bfa6ebbc41cc122c9d989bdfc Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Sat, 9 Oct 2021 21:16:46 +0200 Subject: [PATCH 19/74] warnings for empty code blocks --- .../parserspec/wurstscript.parseq | 2 +- .../wurstscript/attributes/AttrExprType.java | 4 +- .../wurstscript/attributes/AttrTypeDef.java | 2 +- .../attributes/AttrTypeExprType.java | 2 +- .../jass/AntlrJassParseTreeTransformer.java | 10 ++- .../jurst/AntlrJurstParseTreeTransformer.java | 18 ++++-- .../antlr/AntlrWurstParseTreeTransformer.java | 12 +++- .../imtranslation/ExprTranslation.java | 2 +- .../peeeq/wurstscript/types/WurstTypeInt.java | 2 +- .../wurstscript/types/WurstTypeNull.java | 2 +- .../de/peeeq/wurstscript/utils/Utils.java | 9 ++- .../validation/WurstValidator.java | 61 ++++++++++++++++--- .../tests/SimpleStatementTests.java | 45 ++++++++++++++ 13 files changed, 139 insertions(+), 32 deletions(-) diff --git a/de.peeeq.wurstscript/parserspec/wurstscript.parseq b/de.peeeq.wurstscript/parserspec/wurstscript.parseq index 750b26f96..9d6546f10 100644 --- a/de.peeeq.wurstscript/parserspec/wurstscript.parseq +++ b/de.peeeq.wurstscript/parserspec/wurstscript.parseq @@ -149,7 +149,7 @@ ControlflowStatement = | StmtExitwhen(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr cond) CompoundStatement = - StmtIf(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr cond, WStatements thenBlock, WStatements elseBlock) + StmtIf(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr cond, WStatements thenBlock, WStatements elseBlock, boolean hasElse) | SwitchStmt(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, Expr expr, SwitchCases cases, SwitchDefaultCase switchDefault) | WBlock(@ignoreForEquality de.peeeq.wurstscript.parser.WPos source, WStatements body) | LoopStatement diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrExprType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrExprType.java index 5a06551f0..e3b8953ae 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrExprType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrExprType.java @@ -218,7 +218,7 @@ public static WurstType calculate(final ExprBinary term) { return WurstTypeBool.instance(); } - if (Utils.isJassCode(Optional.of(term))) { + if (Utils.isJassCode(term)) { if (leftType.isSubtypeOf(WurstTypeReal.instance(), term) || leftType.isSubtypeOf(WurstTypeInt.instance(), term)) { if (rightType.isSubtypeOf(WurstTypeReal.instance(), term) || rightType.isSubtypeOf(WurstTypeInt.instance(), term)) { // in jass code it is allowed to compare reals and ints @@ -279,7 +279,7 @@ public static WurstType calculate(final ExprBinary term) { return handleOperatorOverloading(term); } case DIV_REAL: - if (Utils.isJassCode(Optional.of(term))) { + if (Utils.isJassCode(term)) { return caseMathOperation(term); } else if (bothTypesRealOrInt(term)) { return WurstTypeReal.instance(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeDef.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeDef.java index 5ad5efe09..016c65fb2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeDef.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeDef.java @@ -37,7 +37,7 @@ public class AttrTypeDef { return r; } - WurstType nativeType = NativeTypes.nativeType(typeName, Utils.isJassCode(Optional.of(node))); + WurstType nativeType = NativeTypes.nativeType(typeName, Utils.isJassCode(node)); if (nativeType != null) { return null; // native types have no definitionPos } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeExprType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeExprType.java index 017d21fd9..ed83d0820 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeExprType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeExprType.java @@ -74,7 +74,7 @@ public static WurstType calculate(TypeExprArray typeExprArray) { private static WurstType getBaseType(TypeExprSimple node) { final String typename = node.getTypeName(); - final boolean isJassCode = Utils.isJassCode(Optional.of(node)); + final boolean isJassCode = Utils.isJassCode(node); TypeDef t = node.attrTypeDef(); if (t == null) { WurstType nativeType = NativeTypes.nativeType(typename, isJassCode); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java index 50c285810..b87ac7e75 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java @@ -169,7 +169,11 @@ private WStatement transformJassStatementLoop(JassParser.JassStatementLoopContex private WStatement transformJassStatementIf(JassParser.JassStatementIfContext s) { WStatements thenBlock = transformJassStatements(s.thenStatements); WStatements elseBlock = transformJassElseIfs(s.jassElseIfs()); - return Ast.StmtIf(source(s), transformExpr(s.cond), thenBlock, elseBlock); + return Ast.StmtIf(source(s), transformExpr(s.cond), thenBlock, elseBlock, !isEndif(s.jassElseIfs())); + } + + private boolean isEndif(JassParser.JassElseIfsContext s) { + return s.ENDIF() != null; } private WStatements transformJassElseIfs(JassParser.JassElseIfsContext s) { @@ -180,7 +184,9 @@ private WStatements transformJassElseIfs(JassParser.JassElseIfsContext s) { return Ast.WStatements(Ast.StmtIf(source(s), transformExpr(s.cond), transformJassStatements(s.thenStatements), - transformJassElseIfs(s.jassElseIfs()))); + transformJassElseIfs(s.jassElseIfs()), + !isEndif(s.jassElseIfs()) + )); } else if (s.elseStmts != null) { return transformJassStatements(s.elseStmts); } else { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/AntlrJurstParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/AntlrJurstParseTreeTransformer.java index a86f56833..5121858fa 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/AntlrJurstParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/AntlrJurstParseTreeTransformer.java @@ -180,7 +180,11 @@ private WStatement transformJassStatementLoop(JassStatementLoopContext s) { private WStatement transformJassStatementIf(JassStatementIfContext s) { WStatements thenBlock = transformJassStatements(s.thenStatements); WStatements elseBlock = transformJassElseIfs(s.jassElseIfs()); - return Ast.StmtIf(source(s), transformExpr(s.cond), thenBlock, elseBlock); + return Ast.StmtIf(source(s), transformExpr(s.cond), thenBlock, elseBlock, !isEndif(s.jassElseIfs())); + } + + private boolean isEndif(JassElseIfsContext s) { + return s.ENDIF() != null; } private WStatements transformJassElseIfs(@Nullable JassElseIfsContext s) { @@ -191,7 +195,9 @@ private WStatements transformJassElseIfs(@Nullable JassElseIfsContext s) { return Ast.WStatements(Ast.StmtIf(source(s), transformExpr(s.cond), transformJassStatements(s.thenStatements), - transformJassElseIfs(s.jassElseIfs()))); + transformJassElseIfs(s.jassElseIfs()), + !isEndif(s.jassElseIfs()) + )); } else if (s.elseStmts != null) { return transformJassStatements(s.elseStmts); } else { @@ -895,7 +901,11 @@ private WStatement transformIf(StmtIfContext i) { Expr cond = transformExpr(i.cond); WStatements thenBlock = transformStatements(i.thenStatements); WStatements elseBlock = transformElseBlock(i.elseStatements()); - return Ast.StmtIf(source(i), cond, thenBlock, elseBlock); + return Ast.StmtIf(source(i), cond, thenBlock, elseBlock, !isEndif(i.elseStatements())); + } + + private boolean isEndif(ElseStatementsContext s) { + return s.ENDIF() != null; } private WStatements transformElseBlock(@Nullable ElseStatementsContext es) { @@ -906,7 +916,7 @@ private WStatements transformElseBlock(@Nullable ElseStatementsContext es) { // elseif block WStatements thenBlock = transformStatements(es.thenStatements); WStatements elseBlock = transformElseBlock(es.elseStatements()); - return Ast.WStatements(Ast.StmtIf(source(es), transformExpr(es.cond), thenBlock, elseBlock)); + return Ast.WStatements(Ast.StmtIf(source(es), transformExpr(es.cond), thenBlock, elseBlock, !isEndif(es.elseStatements()))); } else if (es.statementsBlock() != null) { // 'else' block return transformStatements(es.statementsBlock()); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java index 99c97a85a..e93e5686e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java @@ -216,7 +216,11 @@ private WStatement transformJassStatementLoop(JassStatementLoopContext s) { private WStatement transformJassStatementIf(JassStatementIfContext s) { WStatements thenBlock = transformJassStatements(s.thenStatements); WStatements elseBlock = transformJassElseIfs(s.jassElseIfs()); - return Ast.StmtIf(source(s), transformExpr(s.cond), thenBlock, elseBlock); + return Ast.StmtIf(source(s), transformExpr(s.cond), thenBlock, elseBlock, !isEndif(s.jassElseIfs())); + } + + private boolean isEndif(JassElseIfsContext s) { + return s.JASS_ELSEIF() != null; } private WStatements transformJassElseIfs(JassElseIfsContext s) { @@ -227,7 +231,9 @@ private WStatements transformJassElseIfs(JassElseIfsContext s) { return Ast.WStatements(Ast.StmtIf(source(s), transformExpr(s.cond), transformJassStatements(s.thenStatements), - transformJassElseIfs(s.jassElseIfs()))); + transformJassElseIfs(s.jassElseIfs()), + !isEndif(s.jassElseIfs()) + )); } else if (s.elseStmts != null) { return transformJassStatements(s.elseStmts); } else { @@ -933,7 +939,7 @@ private WStatement transformIf(StmtIfContext i) { } else { elseBlock = Ast.WStatements(); } - return Ast.StmtIf(source(i), cond, thenBlock, elseBlock); + return Ast.StmtIf(source(i), cond, thenBlock, elseBlock, i.ELSE() != null); } private Expr transformExpr(ExprContext e) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java index 04c90a88c..04cf5bf15 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java @@ -177,7 +177,7 @@ public static ImExpr translateIntern(ExprBinary e, ImTranslator t, ImFunction f) return ImFunctionCall(e, calledFunc, ImTypeArguments(), ImExprs(left, right), false, CallType.NORMAL); } if (op == WurstOperator.DIV_REAL) { - if (Utils.isJassCode(Optional.of(e))) { + if (Utils.isJassCode(e)) { if (e.getLeft().attrTyp().isSubtypeOf(WurstTypeInt.instance(), e) && e.getRight().attrTyp().isSubtypeOf(WurstTypeInt.instance(), e)) { // in jass when we have int1 / int2 this actually means int1 diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInt.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInt.java index 3e4d7ad34..7eb60e303 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInt.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInt.java @@ -25,7 +25,7 @@ VariableBinding matchAgainstSupertypeIntern(WurstType other, @Nullable Element l VariablePosition variablePosition) { return (other instanceof WurstTypeInt // in jass code we can use an int where a real is expected - || other instanceof WurstTypeReal && Utils.isJassCode(Optional.ofNullable(location))) ? mapping : null; + || other instanceof WurstTypeReal && Utils.isJassCode(location)) ? mapping : null; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java index 70b783c93..cff97a302 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java @@ -24,7 +24,7 @@ VariableBinding matchAgainstSupertypeIntern(WurstType other, @Nullable Element l if (other.isNullable()) { return mapping; } - if (Utils.isJassCode(Optional.of(location)) + if (Utils.isJassCode(location) && (other instanceof WurstTypeInt || other instanceof WurstTypeIntLiteral)) { return mapping; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java index feb1e1b27..3e996c20f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java @@ -135,17 +135,16 @@ public static String printSep(String sep, List args) { /** * is a piece of code jass code? */ - public static boolean isJassCode(Optional pos) { - while (pos.isPresent()) { - if (pos.get() instanceof WPackage) { + public static boolean isJassCode(@Nullable Element pos) { + while (pos != null) { + if (pos instanceof WPackage) { return false; // code is inside package -> wurstscript code } - pos = Optional.ofNullable(pos.get().getParent()); + pos = pos.getParent(); } return true; // no package found -> jass code } - public static String join(Iterable hints, String seperator) { StringBuilder builder = new StringBuilder(); boolean first = true; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java index fe5d55693..c95c5ca89 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java @@ -385,8 +385,10 @@ private void check(Element e) { checkReachability((WStatement) e); if (e instanceof WurstModel) checkForDuplicatePackages((WurstModel) e); - if (e instanceof WStatements) + if (e instanceof WStatements) { checkForInvalidStmts((WStatements) e); + checkForEmptyBlocks((WStatements) e); + } if (e instanceof StmtExitwhen) visit((StmtExitwhen) e); } catch (CyclicDependencyError cde) { @@ -483,6 +485,45 @@ private void checkForInvalidStmts(WStatements stmts) { } } + private void checkForEmptyBlocks(WStatements e) { + Element parent = e.getParent(); + // some parent cases to ignore: + if (parent instanceof OnDestroyDef + || parent instanceof ConstructorDef + || parent instanceof FunctionDefinition + || parent instanceof SwitchDefaultCaseStatements + || parent instanceof SwitchCase) { + return; + } + if (parent instanceof ExprStatementsBlock) { + // for blocks in closures, we have StartFunction and EndFunction statements, so must be > 2 to be nonempty + if (e.size() > 2) { + return; + } + parent.getParent().addWarning("This function has an empty body. Write 'skip' if you intend to leave it empty."); + return; + } + if (!e.isEmpty()) { + return; + } + if (Utils.isJassCode(parent)) { + // no warnings in Jass code + return; + } + + if (parent instanceof StmtIf) { + StmtIf stmtIf = (StmtIf) parent; + if (e == stmtIf.getElseBlock() && stmtIf.getHasElse()) { + parent.addWarning("This if-statement has an empty else-block."); + } else if (e == stmtIf.getThenBlock()) { + parent.addWarning("This if-statement has an empty then-block. Write 'skip' if you intend to leave it empty."); + } + return; + } + + parent.addWarning("This statement (" + Utils.printElement(parent) + ") contains an empty block. Write 'skip' if you intend to leave it empty."); + } + private void checkName(AstElementWithNameId e) { String name = e.getNameId().getName(); TypeDef def = e.lookupType(name, false); @@ -763,7 +804,7 @@ private void checkTypeParameters(AstElementWithTypeParameters e) { } private void checkExprNull(ExprNull e) { - if (!Utils.isJassCode(Optional.of(e)) && e.attrExpectedTyp() instanceof WurstTypeUnknown) { + if (!Utils.isJassCode(e) && e.attrExpectedTyp() instanceof WurstTypeUnknown) { e.addError( "Cannot use 'null' constant here because " + "the compiler cannot infer which kind of null it is."); } @@ -815,7 +856,7 @@ private void checkStmtSet(StmtSet s) { WurstType leftType = s.getUpdatedExpr().attrTyp(); WurstType rightType = s.getRight().attrTyp(); - checkAssignment(Utils.isJassCode(Optional.of(s)), s, leftType, rightType); + checkAssignment(Utils.isJassCode(s), s, leftType, rightType); checkIfAssigningToConstant(s.getUpdatedExpr()); @@ -987,7 +1028,7 @@ private void visit(LocalVarDef s) { WurstType leftType = s.attrTyp(); WurstType rightType = initial.attrTyp(); - checkAssignment(Utils.isJassCode(Optional.of(s)), s, leftType, rightType); + checkAssignment(Utils.isJassCode(s), s, leftType, rightType); } else if (s.getInitialExpr() instanceof ArrayInitializer) { ArrayInitializer arInit = (ArrayInitializer) s.getInitialExpr(); checkArrayInit(s, arInit); @@ -1028,7 +1069,7 @@ private void checkIfRead(VarDef s) { // (same convention as in Erlang) return; } - if (Utils.isJassCode(Optional.of(s))) { + if (Utils.isJassCode(s)) { return; } if (s.getParent() instanceof StmtForRange) { @@ -1045,7 +1086,7 @@ private void checkVarName(VarDef s, boolean isConstant) { String varName = s.getName(); if (!isValidVarnameStart(varName) // first letter not lower case - && !Utils.isJassCode(Optional.of(s)) // not in jass code + && !Utils.isJassCode(s) // not in jass code && !varName.matches("[A-Z0-9_]+") // not a constant ) { s.addWarning("Variable names should start with a lower case character. (" + varName + ")"); @@ -1110,7 +1151,7 @@ private void visit(GlobalVarDef s) { Expr initial = (Expr) s.getInitialExpr(); WurstType leftType = s.attrTyp(); WurstType rightType = initial.attrTyp(); - checkAssignment(Utils.isJassCode(Optional.of(s)), s, leftType, rightType); + checkAssignment(Utils.isJassCode(s), s, leftType, rightType); } else if (s.getInitialExpr() instanceof ArrayInitializer) { checkArrayInit(s, (ArrayInitializer) s.getInitialExpr()); } @@ -1141,7 +1182,7 @@ private void visit(ExtensionFuncDef func) { } private void checkFunctionName(FunctionDefinition f) { - if (!Utils.isJassCode(Optional.of(f))) { + if (!Utils.isJassCode(f)) { if (!isValidVarnameStart(f.getName())) { f.addWarning("Function names should start with an lower case character."); } @@ -1169,7 +1210,7 @@ private void checkReachability(WStatement s) { if (s.attrPreviousStatements().isEmpty()) { if (s.attrListIndex() > 0 || !(stmts.getParent() instanceof TranslatedToImFunction || stmts.getParent() instanceof ExprStatementsBlock)) { - if (Utils.isJassCode(Optional.of(s))) { + if (Utils.isJassCode(s)) { // in jass this is just a warning, because // the shitty code emitted by jasshelper sometimes // contains unreachable code @@ -1234,7 +1275,7 @@ private void checkUninitializedVars(FunctionLike f) { if (!f.getSource().getFile().endsWith("common.j") && !f.getSource().getFile().endsWith("blizzard.j") && !f.getSource().getFile().endsWith("war3map.j")) { - new DataflowAnomalyAnalysis(Utils.isJassCode(Optional.of(f))).execute(f); + new DataflowAnomalyAnalysis(Utils.isJassCode(f)).execute(f); } } } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/SimpleStatementTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/SimpleStatementTests.java index 02d84750e..0ff155222 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/SimpleStatementTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/SimpleStatementTests.java @@ -617,4 +617,49 @@ public void test_no_Next() { ); } + @Test + public void empty_if_warning() { + testAssertErrorsLines(false, "This if-statement has an empty then-block.", + "package test", + "init", + " if 3 < 4" + ); + } + + @Test + public void empty_else_warning() { + testAssertErrorsLines(false, "This if-statement has an empty else-block.", + "package test", + "init", + " if 3 < 4", + " skip", + " else", + "" + ); + } + + @Test + public void no_else_no_warning() { + testAssertOkLines(false, + "package test", + "init", + " if 3 < 4", + " skip", + "" + ); + } + + @Test + public void empty_closure_warning() { + testAssertErrorsLines(false, "This function has an empty body. Write 'skip' if you intend to leave it empty.", + "package test", + "interface F", + " function foo()", + "function x(F f)", + " f.foo()", + "init", + " x() ->", + " skip" + ); + } } From 0dac05db13964495bb680e0cd7bdf71da2bba117 Mon Sep 17 00:00:00 2001 From: Cokemonkey11 Date: Wed, 13 Oct 2021 09:58:23 +0100 Subject: [PATCH 20/74] Update bug_report.md (#1035) --- .github/ISSUE_TEMPLATE/bug_report.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index cb55d6928..79122d6fb 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,5 +8,24 @@ about: Create a report to help us improve A clear and concise description of what the bug is and how it happens. * Include the steps required to reproduce the bug (e.g. a small code example or a link to your project code) - * Pastbin and link the `compiler` and `languageServer` logs from `~/.wurst/logs/` (~ refers to your user's home directory) - * Copy and paste the VSCode Output (CTRL + SHIFT + U) for `wurstLanguageServer` (drop down menu) into a code fence (```) + * Publish a [gist](https://gist.github.com/) with the `compiler`, `languageServer`, and VSCode Output for `wurstLanguageServer`, and provide a link. Cut and paste the template below: + + From 16f30840f7e7c882390e80e834fdb5ec044abe2e Mon Sep 17 00:00:00 2001 From: Peter Zeller Date: Sat, 16 Oct 2021 14:24:27 +0200 Subject: [PATCH 21/74] wait with publishing syntax errors to avoid lockups it was reported that editing a project with a few hundred warnings caused lag in vscode if the problem view was open during editing. --- .../java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java | 2 +- .../peeeq/wurstio/languageserver/requests/CodeLensRequest.java | 2 +- .../test/java/tests/wurstscript/tests/ModelManagerTests.java | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java index 4acb7e704..e02f5d62b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java @@ -466,7 +466,7 @@ private void replaceCompilationUnit(WFile filename) { public Changes syncCompilationUnitContent(WFile filename, String contents) { WLogger.info("sync contents for " + filename); Set oldPackages = declaredPackages(filename); - replaceCompilationUnit(filename, contents, true); + replaceCompilationUnit(filename, contents, false); return new Changes(io.vavr.collection.HashSet.of(filename), oldPackages); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeLensRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeLensRequest.java index d300a1865..4ddbf10a5 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeLensRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeLensRequest.java @@ -36,7 +36,7 @@ public GetCodeLens(CodeLensParams params, BufferManager bufferManager) { public List execute(ModelManager modelManager) { WFile wFile = WFile.create(params.getTextDocument()); String buffer = bufferManager.getBuffer(wFile); - CompilationUnit cu = modelManager.replaceCompilationUnitContent(wFile, buffer, true); + CompilationUnit cu = modelManager.replaceCompilationUnitContent(wFile, buffer, false); if (cu == null) { return Collections.emptyList(); } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java index 686b310a7..17df22ca0 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java @@ -585,7 +585,8 @@ public void keepTypeErrorsWhileEditing() throws IOException { // now, update package T1 and introduce a syntax error - manager.syncCompilationUnitContent(fileT1, packageT1updated); + ModelManager.Changes changes = manager.syncCompilationUnitContent(fileT1, packageT1updated); + manager.reconcile(changes); // now the errors should contain the syntax error and the type error assertThat(errors.get(fileT1), CoreMatchers.containsString("Reference to function foo could not be resolved.")); From 930a304896174fe5307ad8e0b7b8345affe42d17 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 7 Nov 2021 21:52:56 +0100 Subject: [PATCH 22/74] Implement unit user data for compiletime (#1038) --- .../jassinterpreter/providers/UnitProvider.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/UnitProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/UnitProvider.java index 5b1e5f7a2..0ad91e1d3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/UnitProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/UnitProvider.java @@ -6,7 +6,11 @@ import de.peeeq.wurstscript.intermediatelang.IlConstHandle; import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; +import java.util.LinkedHashMap; + public class UnitProvider extends Provider { + private final LinkedHashMap userDataMap = new LinkedHashMap<>(); + public UnitProvider(AbstractInterpreter interpreter) { super(interpreter); } @@ -18,4 +22,12 @@ public IlConstHandle CreateUnit(IlConstHandle owner, ILconstInt unitid, ILconstR public ILconstInt GetUnitTypeId(IlConstHandle unit) { return ((UnitMock)unit.getObj()).unitid; } + + public ILconstInt GetUnitUserData(IlConstHandle unit) { + return userDataMap.get(unit); + } + + public void SetUnitUserData(IlConstHandle unit, ILconstInt userData) { + userDataMap.put(unit, userData); + } } From 3cada9771f0cce3c608b5decae4ac4bde2574e03 Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 16 Nov 2021 20:22:12 +0100 Subject: [PATCH 23/74] transitive imports (#1039) --- .../src/main/java/de/peeeq/wurstio/Main.java | 2 +- .../peeeq/wurstio/WurstCompilerJassImpl.java | 2 +- .../wurstio/map/importer/ImportFile.java | 84 +++++++++++-------- 3 files changed, 53 insertions(+), 35 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java index d24e7df9b..031af11f0 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java @@ -150,7 +150,7 @@ public static void main(String[] args) { byte[] war3map = compiledScript.toString().getBytes(Charsets.UTF_8); mpqEditor.insertFile("war3map.j", war3map); } - ImportFile.importFilesFromImportDirectory(projectFolder, mpqEditor); + ImportFile.importFilesFromImports(projectFolder, mpqEditor); } } else { compiledScript = compilationProcess.doCompilation(null, true); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index b066dce38..368cc4f5d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -122,7 +122,7 @@ public void runCompiletime(WurstProjectConfigData projectConfigData, boolean isP Preconditions.checkNotNull(mapFileMpq); Preconditions.checkNotNull(projectFolder); // add the imports - ImportFile.importFilesFromImportDirectory(projectFolder, mapFileMpq); + ImportFile.importFilesFromImports(projectFolder, mapFileMpq); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java index f72f0e442..434a45832 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java @@ -14,8 +14,8 @@ import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; import java.nio.file.Path; -import java.util.LinkedList; -import java.util.Optional; +import java.util.*; +import java.util.stream.Collectors; public class ImportFile { private static final String DEFAULT_IMPORT_PATH = "war3mapImported\\"; @@ -157,41 +157,43 @@ private static LinkedList getFilesOfDirectory(File dir, LinkedList a } - private static void insertImportedFiles(MpqEditor mpq, File directory) throws Exception { - LinkedList files = new LinkedList<>(); - getFilesOfDirectory(directory, files); - - ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); - DataOutputStream dataOut = new DataOutputStream(byteOut); - dataOut.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(FILE_VERSION).array()); - dataOut.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(files.size()).array()); - for (File f : files) { - Path p = f.toPath(); - p = directory.toPath().relativize(p); - String normalizedWc3Path = p.toString().replaceAll("/", "\\\\"); - dataOut.writeByte((byte) 13); - dataOut.write(normalizedWc3Path.getBytes(StandardCharsets.UTF_8)); - dataOut.write((byte) 0); - mpq.deleteFile(normalizedWc3Path); - mpq.insertFile(normalizedWc3Path, f); + private static void insertImportedFiles(MpqEditor mpq, List directories) throws Exception { + for (File directory : directories) { + LinkedList files = new LinkedList<>(); + getFilesOfDirectory(directory, files); + + ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + DataOutputStream dataOut = new DataOutputStream(byteOut); + dataOut.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(FILE_VERSION).array()); + dataOut.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(files.size()).array()); + for (File f : files) { + Path p = f.toPath(); + p = directory.toPath().relativize(p); + String normalizedWc3Path = p.toString().replaceAll("/", "\\\\"); + dataOut.writeByte((byte) 13); + dataOut.write(normalizedWc3Path.getBytes(StandardCharsets.UTF_8)); + dataOut.write((byte) 0); + mpq.deleteFile(normalizedWc3Path); + mpq.insertFile(normalizedWc3Path, f); + } + dataOut.flush(); + mpq.deleteFile("war3map.imp"); + mpq.insertFile("war3map.imp", byteOut.toByteArray()); } - dataOut.flush(); - mpq.deleteFile("war3map.imp"); - mpq.insertFile("war3map.imp", byteOut.toByteArray()); } - public static void importFilesFromImportDirectory(File projectFolder, MpqEditor ed) { - File importDirectory = getImportDirectory(projectFolder); - if (importDirectory.exists() && importDirectory.isDirectory()) { - WLogger.info("importing from: " + importDirectory.getAbsolutePath()); - WLogger.info("projectFolder: " + projectFolder.getAbsolutePath()); - try { - insertImportedFiles(ed, importDirectory); - } catch (Exception e) { - WLogger.severe(e); - JOptionPane.showMessageDialog(null, "Couldn't import resources from " + importDirectory + ": " + e.getMessage()); - } + public static void importFilesFromImports(File projectFolder, MpqEditor ed) { + LinkedList folders = new LinkedList<>(); + folders.add(getImportDirectory(projectFolder)); + folders.addAll(Arrays.asList(getTransientImportDirectories(projectFolder))); + + try { + insertImportedFiles(ed, folders); + } catch (Exception e) { + WLogger.severe(e); + JOptionPane.showMessageDialog(null, "Couldn't import resources. " + e.getMessage()); } + } private static File getCopyOfMap(File mapFile) throws IOException { @@ -205,4 +207,20 @@ private static File getImportDirectory(File projectFolder) { return new File(projectFolder, "imports"); } + private static File[] getTransientImportDirectories(File projectFolder) { + ArrayList paths = new ArrayList<>(); + Path dependencies = projectFolder.toPath().resolve("_build").resolve("dependencies"); + try { + java.nio.file.Files.list(dependencies).forEach(dependency -> { + if (java.nio.file.Files.exists(dependency.resolve("imports"))) { + paths.add(dependency.resolve("imports")); + } + }); + } catch (IOException e) { + e.printStackTrace(); + } + File[] arr = new File[paths.size()]; + return paths.stream().map(Path::toFile).collect(Collectors.toList()).toArray(arr); + } + } From b1431e1dfb6e0320f5e20a07d16f8061f57c2735 Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 23 Nov 2021 00:12:00 +0100 Subject: [PATCH 24/74] fix nested jmpq usage --- .../languageserver/ProjectConfigBuilder.java | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java index 1f51a98cb..d80e0d16b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java @@ -43,7 +43,7 @@ public static void apply(WurstProjectConfigData projectConfig, File targetMap, F byte[] scriptBytes; if (!projectConfig.getBuildMapData().getName().isEmpty()) { // Apply w3i config values - W3I w3I = prepareW3I(projectConfig, targetMap); + W3I w3I = prepareW3I(projectConfig, mpq); FileInputStream inputStream = new FileInputStream(compiledScript); StringWriter sw = new StringWriter(); @@ -98,28 +98,26 @@ public static void apply(WurstProjectConfigData projectConfig, File targetMap, F applyMapHeader(projectConfig, targetMap); } - private static W3I prepareW3I(WurstProjectConfigData projectConfig, File targetMap) throws Exception { - try (MpqEditor mpq = MpqEditorFactory.getEditor(Optional.of(targetMap))) { - W3I w3I = new W3I(mpq.extractFile("war3map.w3i")); - WurstProjectBuildMapData buildMapData = projectConfig.getBuildMapData(); - if (StringUtils.isNotBlank(buildMapData.getName())) { - w3I.setMapName(buildMapData.getName()); - } - if (StringUtils.isNotBlank(buildMapData.getAuthor())) { - w3I.setMapAuthor(buildMapData.getAuthor()); - } - applyScenarioData(w3I, buildMapData); - - if (buildMapData.getPlayers().size() > 0) { - applyPlayers(projectConfig, w3I); - } - if (buildMapData.getForces().size() > 0) { - applyForces(projectConfig, w3I); - } - applyOptionFlags(projectConfig, w3I); + private static W3I prepareW3I(WurstProjectConfigData projectConfig, MpqEditor mpq) throws Exception { + W3I w3I = new W3I(mpq.extractFile("war3map.w3i")); + WurstProjectBuildMapData buildMapData = projectConfig.getBuildMapData(); + if (StringUtils.isNotBlank(buildMapData.getName())) { + w3I.setMapName(buildMapData.getName()); + } + if (StringUtils.isNotBlank(buildMapData.getAuthor())) { + w3I.setMapAuthor(buildMapData.getAuthor()); + } + applyScenarioData(w3I, buildMapData); - return w3I; + if (buildMapData.getPlayers().size() > 0) { + applyPlayers(projectConfig, w3I); } + if (buildMapData.getForces().size() > 0) { + applyForces(projectConfig, w3I); + } + applyOptionFlags(projectConfig, w3I); + + return w3I; } private static void applyOptionFlags(WurstProjectConfigData projectConfig, W3I w3I) { From e3ca5712582d82c126f775ba07e4f8b140d41130 Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 4 Apr 2022 23:19:00 +0200 Subject: [PATCH 25/74] inject wurst.build config for lua maps --- de.peeeq.wurstscript/build.gradle | 2 +- .../peeeq/wurstio/languageserver/ProjectConfigBuilder.java | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index c4f8824d6..586249fcf 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -106,7 +106,7 @@ dependencies { implementation 'com.github.inwc3:jmpq3:0aaca2373d' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:7ece74aecc' + implementation 'com.github.inwc3:wc3libs:e10d2a705b' // The setup tool for wurst.build handling implementation 'com.github.wurstscript:wurstsetup:4c65824b40' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java index d80e0d16b..792036965 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java @@ -47,18 +47,17 @@ public static void apply(WurstProjectConfigData projectConfig, File targetMap, F FileInputStream inputStream = new FileInputStream(compiledScript); StringWriter sw = new StringWriter(); + // TODO apply config for hot start before JHCR transformation if (runArgs.isLua() || runArgs.isHotStartmap()) { - // TODO apply config values in lua script - // TODO apply config for hot start before JHCR transformation - scriptBytes = java.nio.file.Files.readAllBytes(compiledScript.toPath()); + w3I.injectConfigsInLuaScript(inputStream, sw); } else { if (w3data.getWc3PatchVersion().isPresent()) { w3I.injectConfigsInJassScript(inputStream, sw, w3data.getWc3PatchVersion().get()); } else { w3I.injectConfigsInJassScript(inputStream, sw, GameVersion.VERSION_1_32); } - scriptBytes = sw.toString().getBytes(StandardCharsets.UTF_8); } + scriptBytes = sw.toString().getBytes(StandardCharsets.UTF_8); File w3iFile = new File("w3iFile"); if (runArgs.isLua()) { From bc9a6ee754db5fd2ef1de1d54469a7677f7fda72 Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 11 Apr 2022 21:52:48 +0200 Subject: [PATCH 26/74] add experimental cache for compiletime invocations without side effects Use -compiletimeCache to opt into the feature --- de.peeeq.wurstscript/build.gradle | 6 ++-- .../de/peeeq/wurstio/CompilationProcess.java | 2 +- .../wurstio/CompiletimeFunctionRunner.java | 4 +-- .../peeeq/wurstio/WurstCompilerJassImpl.java | 4 +-- .../languageserver/requests/MapRequest.java | 9 ++---- .../languageserver/requests/RunTests.java | 4 +-- .../java/de/peeeq/wurstscript/RunArgs.java | 6 ++++ .../de/peeeq/wurstscript/WurstCompiler.java | 2 +- .../intermediatelang/ILconstBool.java | 7 +++- .../intermediatelang/ILconstReal.java | 7 +++- .../intermediatelang/ILconstString.java | 6 ++++ .../interpreter/ILInterpreter.java | 32 ++++++++++++++++--- .../wurstscript/tests/WurstScriptTest.java | 6 ++-- 13 files changed, 68 insertions(+), 27 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 586249fcf..282ec6a47 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -72,7 +72,7 @@ repositories { dependencies { // Antlr parsing library - antlr "org.antlr:antlr4:4.9.2" + antlr "org.antlr:antlr4:4.9.3" // tool for generating AST-classes compileOnly 'com.github.peterzeller:abstractsyntaxgen:0.3.2' @@ -82,10 +82,10 @@ dependencies { testImplementation group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' // Google guava - implementation 'com.google.guava:guava:30.0-jre' + implementation 'com.google.guava:guava:31.1-jre' // Better functional data structures: - implementation 'io.vavr:vavr:1.0.0-alpha-3' + implementation 'io.vavr:vavr:0.10.4' // Support for the vscode language server protocol implementation group: 'org.eclipse.lsp4j', name: 'org.eclipse.lsp4j', version: '0.12.0' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java index a4d7af24a..a831d97db 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java @@ -85,7 +85,7 @@ public CompilationProcess(WurstGui gui, RunArgs runArgs) { () -> runTests(compiler.getImTranslator(), compiler, runArgs.getTestTimeout())); } - timeTaker.measure("Run compiletime functions", () ->compiler.runCompiletime(new WurstProjectConfigData(), isProd)); + timeTaker.measure("Run compiletime functions", () ->compiler.runCompiletime(new WurstProjectConfigData(), isProd, false)); JassProg jassProg = timeTaker.measure("Transform program to Jass", compiler::transformProgToJass); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java index bffe0013a..cda1827e0 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java @@ -81,12 +81,12 @@ public boolean matches(ImFunction f) { public CompiletimeFunctionRunner( ImTranslator tr, ImProg imProg, Optional mapFile, MpqEditor mpqEditor, WurstGui gui, - FunctionFlagToRun flag, WurstProjectConfigData projectConfigData, boolean isProd) { + FunctionFlagToRun flag, WurstProjectConfigData projectConfigData, boolean isProd, boolean cache) { Preconditions.checkNotNull(imProg); this.translator = tr; this.imProg = imProg; globalState = new ProgramStateIO(mapFile, mpqEditor, gui, imProg, true); - this.interpreter = new ILInterpreter(imProg, gui, mapFile, globalState); + this.interpreter = new ILInterpreter(imProg, gui, mapFile, globalState, cache); interpreter.addNativeProvider(new CompiletimeNatives(globalState, projectConfigData, isProd)); interpreter.addNativeProvider(new ReflectionNativeProvider(interpreter)); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index 368cc4f5d..bac99eefe 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -99,13 +99,13 @@ public void loadFiles(File... files) { } @Override - public void runCompiletime(WurstProjectConfigData projectConfigData, boolean isProd) { + public void runCompiletime(WurstProjectConfigData projectConfigData, boolean isProd, boolean cache) { if (runArgs.runCompiletimeFunctions()) { // compile & inject object-editor data // TODO run optimizations later? gui.sendProgress("Running compiletime functions"); CompiletimeFunctionRunner ctr = new CompiletimeFunctionRunner(imTranslator, getImProg(), getMapFile(), getMapfileMpqEditor(), gui, - CompiletimeFunctions, projectConfigData, isProd); + CompiletimeFunctions, projectConfigData, isProd, cache); ctr.setInjectObjects(runArgs.isInjectObjects()); ctr.setOutputStream(new PrintStream(System.err)); ctr.run(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index c69d673ed..28f9f7841 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -20,6 +20,7 @@ import de.peeeq.wurstscript.ast.WurstModel; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.gui.WurstGui; +import de.peeeq.wurstscript.intermediatelang.interpreter.ILInterpreter; import de.peeeq.wurstscript.jassAst.JassProg; import de.peeeq.wurstscript.jassprinter.JassPrinter; import de.peeeq.wurstscript.luaAst.LuaCompilationUnit; @@ -40,10 +41,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -168,8 +166,7 @@ protected File compileMap(File projectFolder, WurstGui gui, Optional mapCo throw new RequestFailedException(MessageType.Error, "Could not compile project (error in translation): " + gui.getErrorList().get(0)); } - - compiler.runCompiletime(projectConfigData, isProd); + compiler.runCompiletime(projectConfigData, isProd, runArgs.isCompiletimeCache()); if (runArgs.isLua()) { print("translating program to Lua ... "); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java index 929a4a699..01f7cbeac 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java @@ -148,14 +148,14 @@ public TestResult runTests(ImTranslator translator, ImProg imProg, Optional files = Lists.newArrayList(); private @Nullable String mapFile = null; private @Nullable String outFile = null; @@ -128,6 +129,7 @@ public RunArgs(String... args) { addOptionWithArg("workspaceroot", "The next argument should be the root folder of the project to build.", arg -> workspaceroot = arg); addOptionWithArg("inputmap", "The next argument should be the input map.", arg -> inputmap = arg); optionLua = addOption("lua", "Choose Lua as the compilation target."); + optionCompiletimeCache = addOption("compiletimeCache", "(Experimental) Cache results of compiletime invocations without side effects"); addOptionWithArg("functionSplitLimit", "The maximum number of operations in a function before it is split by the function splitter (used for compiletime functions)", s -> functionSplitLimit = Integer.parseInt(s, 10)); @@ -354,6 +356,10 @@ public boolean isLua() { return optionLua.isSet; } + public boolean isCompiletimeCache() { + return optionCompiletimeCache.isSet; + } + public int getFunctionSplitLimit() { return functionSplitLimit; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstCompiler.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstCompiler.java index 3ca511aa1..3021e65ce 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstCompiler.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstCompiler.java @@ -15,5 +15,5 @@ public interface WurstCompiler { void loadFiles(File... files); - void runCompiletime(WurstProjectConfigData projectConfigData, boolean isProd); + void runCompiletime(WurstProjectConfigData projectConfigData, boolean isProd, boolean cache); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstBool.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstBool.java index fb5172cf1..2ef090072 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstBool.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstBool.java @@ -3,6 +3,8 @@ import de.peeeq.wurstscript.types.WurstType; import de.peeeq.wurstscript.types.WurstTypeBool; +import java.util.Objects; + public class ILconstBool extends ILconstAbstract { private boolean val; @@ -41,5 +43,8 @@ public boolean isEqualTo(ILconst other) { return other == this; } - + @Override + public int hashCode() { + return Objects.hash(val); + } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstReal.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstReal.java index 0d59121b1..da983b4e1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstReal.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstReal.java @@ -4,6 +4,8 @@ import de.peeeq.wurstscript.types.WurstType; import de.peeeq.wurstscript.types.WurstTypeReal; +import java.util.Objects; + public class ILconstReal extends ILconstAbstract implements ILconstNum { @@ -139,5 +141,8 @@ public boolean isEqualTo(ILconst other) { } } - + @Override + public int hashCode() { + return Objects.hash(val); + } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstString.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstString.java index 1721c9208..bb54126c1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstString.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstString.java @@ -3,6 +3,8 @@ import de.peeeq.wurstscript.types.WurstType; import de.peeeq.wurstscript.types.WurstTypeString; +import java.util.Objects; + public class ILconstString extends ILconstAbstract implements ILconstAddable { private String val; // including the quotes @@ -40,4 +42,8 @@ public boolean isEqualTo(ILconst other) { return false; } + @Override + public int hashCode() { + return Objects.hash(val); + } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java index ba9ba19e0..c42baed03 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java @@ -3,6 +3,7 @@ import de.peeeq.wurstio.jassinterpreter.DebugPrintError; import de.peeeq.wurstio.jassinterpreter.InterpreterException; import de.peeeq.wurstio.jassinterpreter.VarargArray; +import de.peeeq.wurstscript.RunArgs; import de.peeeq.wurstscript.ast.Annotation; import de.peeeq.wurstscript.ast.HasModifier; import de.peeeq.wurstscript.ast.Modifier; @@ -19,23 +20,29 @@ import java.io.File; import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; +import static de.peeeq.wurstscript.translation.imoptimizer.UselessFunctionCallsRemover.isFunctionWithoutSideEffect; + public class ILInterpreter implements AbstractInterpreter { private ImProg prog; + private static boolean cache = false; private final ProgramState globalState; private final TimerMockHandler timerMockHandler = new TimerMockHandler(); - public ILInterpreter(ImProg prog, WurstGui gui, Optional mapFile, ProgramState globalState) { + public ILInterpreter(ImProg prog, WurstGui gui, Optional mapFile, ProgramState globalState, boolean cache) { this.prog = prog; this.globalState = globalState; + ILInterpreter.cache = cache; globalState.addNativeProvider(new BuiltinFuncs(globalState)); // globalState.addNativeProvider(new NativeFunctions()); } - public ILInterpreter(ImProg prog, WurstGui gui, Optional mapFile, boolean isCompiletime) { - this(prog, gui, mapFile, new ProgramState(gui, prog, isCompiletime)); + public ILInterpreter(ImProg prog, WurstGui gui, Optional mapFile, boolean isCompiletime, boolean cache) { + this(prog, gui, mapFile, new ProgramState(gui, prog, isCompiletime), cache); } public static LocalState runFunc(ProgramState globalState, ImFunction f, @Nullable Element caller, @@ -59,7 +66,7 @@ public static LocalState runFunc(ProgramState globalState, ImFunction f, @Nullab if (f.getParameters().size() != args.length) { throw new Error("wrong number of parameters when calling func " + f.getName() + "(" + - Arrays.stream(args).map(Object::toString).collect(Collectors.joining(", ")) + ")"); + Arrays.stream(args).map(Object::toString).collect(Collectors.joining(", ")) + ")"); } for (int i = 0; i < f.getParameters().size(); i++) { @@ -151,11 +158,26 @@ private static boolean isTypeReal(ImType t) { return false; } + public static LinkedHashMap> localStateCache = new LinkedHashMap<>(); + private static LocalState runBuiltinFunction(ProgramState globalState, ImFunction f, ILconst... args) { + if (cache && isFunctionWithoutSideEffect(f.getName())) { + int combinedHash = Objects.hash(args); + if (localStateCache.containsKey(f) && localStateCache.get(f).containsKey(combinedHash)) { + return localStateCache.get(f).get(combinedHash); + } + } StringBuilder errors = new StringBuilder(); for (NativesProvider natives : globalState.getNativeProviders()) { try { - return new LocalState(natives.invoke(f.getName(), args)); + LocalState localState = new LocalState(natives.invoke(f.getName(), args)); + if (cache && isFunctionWithoutSideEffect(f.getName())) { + int combinedHash = Objects.hash(args); + LinkedHashMap cached = localStateCache.getOrDefault(f, new LinkedHashMap<>()); + cached.put(combinedHash, localState); + localStateCache.put(f, cached); + } + return localState; } catch (NoSuchNativeException e) { errors.append("\n").append(e.getMessage()); // ignore diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java index 2a4b901f0..9692e7955 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java @@ -393,7 +393,7 @@ private void translateAndTestLua(String name, boolean executeProg, WurstGui gui, compiler.translateProgToIm(model); - compiler.runCompiletime(new WurstProjectConfigData(), false); + compiler.runCompiletime(new WurstProjectConfigData(), false, false); LuaCompilationUnit luaCode = compiler.transformProgToLua(); StringBuilder sb = new StringBuilder(); @@ -477,7 +477,7 @@ private void translateAndTest(String name, boolean executeProg, } } - compiler.runCompiletime(new WurstProjectConfigData(), false); + compiler.runCompiletime(new WurstProjectConfigData(), false, false); JassProg prog = compiler.transformProgToJass(); writeJassImProg(name, gui, imProg); if (gui.getErrorCount() > 0) { @@ -554,7 +554,7 @@ private void runPjass(File outputFile) throws Error { private void executeImProg(WurstGui gui, ImProg imProg) throws TestFailException { try { // run the interpreter on the intermediate language - ILInterpreter interpreter = new ILInterpreter(imProg, gui, Optional.empty(), false); + ILInterpreter interpreter = new ILInterpreter(imProg, gui, Optional.empty(), false, false); interpreter.addNativeProvider(new ReflectionNativeProvider(interpreter)); interpreter.executeFunction("main", null); } catch (TestSuccessException e) { From c133d25f5631b3a781def66d42792d2829a032bb Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 12 Apr 2022 01:42:40 +0200 Subject: [PATCH 27/74] only cache pure functions --- .../languageserver/requests/MapRequest.java | 15 +++++++-- .../interpreter/ILInterpreter.java | 10 +++--- .../UselessFunctionCallsRemover.java | 32 +++++++++++++++++-- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 28f9f7841..0e18cfec3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -4,6 +4,7 @@ import com.google.common.io.Files; import config.WurstProjectConfigData; import de.peeeq.wurstio.Pjass; +import de.peeeq.wurstio.TimeTaker; import de.peeeq.wurstio.UtilsIO; import de.peeeq.wurstio.WurstCompilerJassImpl; import de.peeeq.wurstio.languageserver.ConfigProvider; @@ -21,10 +22,13 @@ import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.intermediatelang.interpreter.ILInterpreter; +import de.peeeq.wurstscript.intermediatelang.optimizer.LocalMerger; +import de.peeeq.wurstscript.intermediatelang.optimizer.TempMerger; import de.peeeq.wurstscript.jassAst.JassProg; import de.peeeq.wurstscript.jassprinter.JassPrinter; import de.peeeq.wurstscript.luaAst.LuaCompilationUnit; import de.peeeq.wurstscript.parser.WPos; +import de.peeeq.wurstscript.translation.imoptimizer.ImOptimizer; import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; import net.moonlightflower.wc3libs.port.Orient; @@ -54,6 +58,7 @@ public abstract class MapRequest extends UserRequest { protected final RunArgs runArgs; protected final Optional wc3Path; protected final W3InstallationData w3data; + private final TimeTaker timeTaker; /** * makes the compilation slower, but more safe by discarding results from the editor and working on a copy of the model @@ -73,6 +78,11 @@ public MapRequest(ConfigProvider configProvider, Optional map, List mapCo throw new RequestFailedException(MessageType.Error, "Could not compile project (error in translation): " + gui.getErrorList().get(0)); } - compiler.runCompiletime(projectConfigData, isProd, runArgs.isCompiletimeCache()); + timeTaker.measure("Runinng Compiletime Functions", () -> compiler.runCompiletime(projectConfigData, isProd, runArgs.isCompiletimeCache())); if (runArgs.isLua()) { print("translating program to Lua ... "); @@ -184,6 +194,7 @@ protected File compileMap(File projectFolder, WurstGui gui, Optional mapCo File buildDir = getBuildDir(); File outFile = new File(buildDir, "compiled.lua"); Files.write(compiledMapScript.getBytes(Charsets.UTF_8), outFile); + timeTaker.printReport(); return outFile; } else { @@ -221,9 +232,9 @@ protected File compileMap(File projectFolder, WurstGui gui, Optional mapCo gui.sendProgress("Running JHCR"); return runJassHotCodeReload(outFile); } + timeTaker.printReport(); return outFile; } - } catch (Exception e) { throw new RuntimeException(e); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java index c42baed03..7cbe6ccd5 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java @@ -9,6 +9,7 @@ import de.peeeq.wurstscript.ast.Modifier; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.intermediatelang.*; +import de.peeeq.wurstscript.intermediatelang.optimizer.SideEffectAnalyzer; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.jassinterpreter.ReturnException; import de.peeeq.wurstscript.jassinterpreter.TestFailException; @@ -25,6 +26,7 @@ import java.util.Optional; import java.util.stream.Collectors; +import static de.peeeq.wurstscript.translation.imoptimizer.UselessFunctionCallsRemover.isFunctionPure; import static de.peeeq.wurstscript.translation.imoptimizer.UselessFunctionCallsRemover.isFunctionWithoutSideEffect; public class ILInterpreter implements AbstractInterpreter { @@ -161,8 +163,8 @@ private static boolean isTypeReal(ImType t) { public static LinkedHashMap> localStateCache = new LinkedHashMap<>(); private static LocalState runBuiltinFunction(ProgramState globalState, ImFunction f, ILconst... args) { - if (cache && isFunctionWithoutSideEffect(f.getName())) { - int combinedHash = Objects.hash(args); + if (cache && isFunctionPure(f.getName())) { + int combinedHash = Objects.hash((Object[]) args); if (localStateCache.containsKey(f) && localStateCache.get(f).containsKey(combinedHash)) { return localStateCache.get(f).get(combinedHash); } @@ -171,8 +173,8 @@ private static LocalState runBuiltinFunction(ProgramState globalState, ImFunctio for (NativesProvider natives : globalState.getNativeProviders()) { try { LocalState localState = new LocalState(natives.invoke(f.getName(), args)); - if (cache && isFunctionWithoutSideEffect(f.getName())) { - int combinedHash = Objects.hash(args); + if (cache && isFunctionPure(f.getName())) { + int combinedHash = Objects.hash((Object[]) args); LinkedHashMap cached = localStateCache.getOrDefault(f, new LinkedHashMap<>()); cached.put(combinedHash, localState); localStateCache.put(f, cached); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/UselessFunctionCallsRemover.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/UselessFunctionCallsRemover.java index 20c7b2aaa..62f795b60 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/UselessFunctionCallsRemover.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/UselessFunctionCallsRemover.java @@ -7,9 +7,6 @@ import io.vavr.collection.HashSet; import io.vavr.collection.Set; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; import java.util.ListIterator; /** @@ -122,6 +119,10 @@ public static boolean isFunctionWithoutSideEffect(String funcName) { return functionsWithoutSideEffects.contains(funcName); } + public static boolean isFunctionPure(String funcName) { + return pureFunctions.contains(funcName); + } + private static final Set functionsWithoutSideEffects = HashSet.of( "AbilityId", "AbilityId2String", "Acos", "And", "Asin", "Atan", "Atan2", "ConvertAIDifficulty", "ConvertAllianceType", "ConvertAttackType", "ConvertBlendMode", @@ -250,4 +251,29 @@ public static boolean isFunctionWithoutSideEffect(String funcName) { "BlzGetUnitWeaponRealField", "BlzGetUnitWeaponStringField", "BlzGetUnitSkin", "BlzGetItemSkin", "BlzGetPlayerTownHallCount" ); + + private static final Set pureFunctions = HashSet.of( + "AbilityId", "AbilityId2String", "Acos", "And", "Asin", "Atan", + "Atan2", "ConvertAIDifficulty", "ConvertAllianceType", "ConvertAttackType", "ConvertBlendMode", + "ConvertCameraField", "ConvertDamageType", "ConvertDialogEvent", "ConvertEffectType", + "ConvertFGameState", "ConvertFogState", "ConvertGameDifficulty", "ConvertGameEvent", + "ConvertGameSpeed", "ConvertGameType", "ConvertIGameState", "ConvertItemType", "ConvertLimitOp", + "ConvertMapControl", "ConvertMapDensity", "ConvertMapFlag", "ConvertMapSetting", + "ConvertMapVisibility", "ConvertPathingType", "ConvertPlacement", "ConvertPlayerColor", + "ConvertPlayerEvent", "ConvertPlayerGameResult", "ConvertPlayerScore", "ConvertPlayerSlotState", + "ConvertPlayerState", "ConvertPlayerUnitEvent", "ConvertRace", "ConvertRacePref", + "ConvertRarityControl", "ConvertSoundType", "ConvertStartLocPrio", "ConvertTexMapFlags", + "ConvertUnitEvent", "ConvertUnitState", "ConvertUnitType", "ConvertVersion", "ConvertVolumeGroup", + "ConvertWeaponType", "ConvertWidgetEvent", "Cos", "Deg2Rad", "GetAbilityEffect", + "GetAbilityEffectById", "GetAbilitySound", "GetAbilitySoundById", "GetAllyColorFilterState", + "GetPlayerColor", "GetPlayerController", "GetPlayerId", "GetPlayerRace", "GetPlayerSelectable", + "GetPlayerStartLocation", "GetPlayerTeam", "GetSoundDuration", "GetSoundFileDuration", "GetStartLocationLoc", + "GetStartLocationX", "GetStartLocationY", "GetStartLocPrio", "GetStartLocPrioSlot", "GetSummonedUnit", + "GetSummoningUnit", "GetTeams", "GetUnitDefaultAcquireRange", + "GetUnitDefaultFlyHeight", "GetUnitDefaultMoveSpeed", "GetUnitDefaultPropWindow", + "GetUnitDefaultTurnSpeed", "GetUnitName", "GetWinningPlayer", "GetWorldBounds", "I2R", "I2S", + "Not", "Or", "OrderId", "OrderId2String", "Player", "Pow", "R2I", + "R2S", "R2SW", "Rad2Deg", "S2I", "S2R", "Sin", "SquareRoot", "StringCase", "StringHash", + "StringLength", "SubString", "Tan", "VersionGet", "BlzBitOr", "BlzBitAnd", "BlzBitXor" + ); } From 2a5c4baff163f6bb8b7c5d64ed9280540ff47198 Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 12 Apr 2022 01:43:26 +0200 Subject: [PATCH 28/74] use readonly jmpq instance for reading script --- de.peeeq.wurstscript/build.gradle | 4 ++-- .../peeeq/wurstio/languageserver/requests/MapRequest.java | 2 +- .../main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java | 4 ++-- .../main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java | 6 +++++- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 282ec6a47..a90031928 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -103,10 +103,10 @@ dependencies { implementation group: 'net.sourceforge.jchardet', name: 'jchardet', version: '1.0' // Crigges' jmpq - implementation 'com.github.inwc3:jmpq3:0aaca2373d' + implementation group: 'com.github.inwc3', name: 'jmpq3', version: 'b4ef7121a4' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:e10d2a705b' + implementation 'com.github.inwc3:wc3libs:cb9921f97d' // The setup tool for wurst.build handling implementation 'com.github.wurstscript:wurstsetup:4c65824b40' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 0e18cfec3..3152a09b0 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -112,7 +112,7 @@ protected void processMapScript( } WLogger.info("extracting mapscript"); byte[] extractedScript = null; - try (@Nullable MpqEditor mpqEditor = MpqEditorFactory.getEditor(mapCopy)) { + try (@Nullable MpqEditor mpqEditor = MpqEditorFactory.getEditor(mapCopy, true)) { if (mpqEditor.hasFile("war3map.j")) { extractedScript = mpqEditor.extractFile("war3map.j"); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java index b1958a90f..bf436102e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java @@ -18,12 +18,12 @@ private JMpqEditor getEditor() { return editor; } - public Jmpq3BasedEditor(File mpqArchive) throws Exception { + public Jmpq3BasedEditor(File mpqArchive, boolean readonly) throws Exception { Preconditions.checkNotNull(mpqArchive); if (!mpqArchive.exists()) { throw new FileNotFoundException("not found: " + mpqArchive); } - this.editor = new JMpqEditor(mpqArchive, MPQOpenOption.FORCE_V0); + this.editor = new JMpqEditor(mpqArchive, readonly ? MPQOpenOption.READ_ONLY : MPQOpenOption.FORCE_V0); } @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java index f4ee0417a..2e8529ff7 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java @@ -9,9 +9,13 @@ public class MpqEditorFactory { static public @Nullable MpqEditor getEditor(Optional f) throws Exception { + return getEditor(f, false); + } + + static public @Nullable MpqEditor getEditor(Optional f, boolean readOnly) throws Exception { if (!f.isPresent()) { return null; } - return new Jmpq3BasedEditor(f.get()); + return new Jmpq3BasedEditor(f.get(), readOnly); } } From 0b3415c256840b0cf67011eea1ac77a08142ee00 Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 12 Apr 2022 01:43:41 +0200 Subject: [PATCH 29/74] Remove nonexistent folders from imports --- .../src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java index 434a45832..d8a04d41f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java @@ -187,6 +187,8 @@ public static void importFilesFromImports(File projectFolder, MpqEditor ed) { folders.add(getImportDirectory(projectFolder)); folders.addAll(Arrays.asList(getTransientImportDirectories(projectFolder))); + folders.removeIf(folder -> !folder.exists()); + try { insertImportedFiles(ed, folders); } catch (Exception e) { From dec12a730d9c0fb37f671a548952780e1b4f2f66 Mon Sep 17 00:00:00 2001 From: Cadorn <108443457+thecadorn@users.noreply.github.com> Date: Sat, 2 Jul 2022 12:05:00 -0400 Subject: [PATCH 30/74] Add mocks for Quest and QuestItem natives. (#1060) Co-authored-by: thecadorn --- .../ReflectionNativeProvider.java | 2 + .../jassinterpreter/mocks/QuestItemMock.java | 11 +++ .../jassinterpreter/mocks/QuestMock.java | 19 +++++ .../providers/QuestItemProvider.java | 28 ++++++++ .../providers/QuestProvider.java | 69 +++++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/QuestItemMock.java create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/QuestMock.java create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/QuestItemProvider.java create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/QuestProvider.java diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java index 73dcee309..e93730bcb 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java @@ -43,6 +43,8 @@ public ReflectionNativeProvider(AbstractInterpreter interpreter) { addProvider(new IntegerProvider(interpreter)); addProvider(new FrameProvider(interpreter)); addProvider(new LuaEnsureTypeProvider(interpreter)); + addProvider(new QuestProvider(interpreter)); + addProvider(new QuestItemProvider(interpreter)); } public NativeJassFunction getFunctionPair(String funcName) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/QuestItemMock.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/QuestItemMock.java new file mode 100644 index 000000000..74c04c2e0 --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/QuestItemMock.java @@ -0,0 +1,11 @@ +package de.peeeq.wurstio.jassinterpreter.mocks; + +import de.peeeq.wurstscript.intermediatelang.ILconstBool; + +public class QuestItemMock { + public ILconstBool completed; + + public QuestItemMock() { + this.completed = ILconstBool.FALSE; + } +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/QuestMock.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/QuestMock.java new file mode 100644 index 000000000..7192f6ec3 --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/QuestMock.java @@ -0,0 +1,19 @@ +package de.peeeq.wurstio.jassinterpreter.mocks; + +import de.peeeq.wurstscript.intermediatelang.ILconstBool; + +public class QuestMock { + public ILconstBool completed; + public ILconstBool discovered; + public ILconstBool enabled; + public ILconstBool failed; + public ILconstBool required; + + public QuestMock() { + this.completed = ILconstBool.FALSE; + this.discovered = ILconstBool.FALSE; + this.enabled = ILconstBool.FALSE; + this.failed = ILconstBool.FALSE; + this.required = ILconstBool.FALSE; + } +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/QuestItemProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/QuestItemProvider.java new file mode 100644 index 000000000..82812e424 --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/QuestItemProvider.java @@ -0,0 +1,28 @@ +package de.peeeq.wurstio.jassinterpreter.providers; + +import de.peeeq.wurstio.jassinterpreter.mocks.QuestItemMock; +import de.peeeq.wurstscript.intermediatelang.ILconstBool; +import de.peeeq.wurstscript.intermediatelang.ILconstString; +import de.peeeq.wurstscript.intermediatelang.IlConstHandle; +import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; + +public class QuestItemProvider extends Provider { + public QuestItemProvider(AbstractInterpreter interpreter) { + super(interpreter); + } + + public IlConstHandle QuestCreateItem(IlConstHandle quest) { + return new IlConstHandle(NameProvider.getRandomName("questitem"), new QuestItemMock()); + } + + public void QuestItemSetDescription(IlConstHandle questItem, ILconstString description) { + } + + public ILconstBool IsQuestItemCompleted(IlConstHandle questItem) { + return ((QuestItemMock) questItem.getObj()).completed; + } + + public void QuestItemSetCompleted(IlConstHandle questItem, ILconstBool completed) { + ((QuestItemMock) questItem.getObj()).completed = completed; + } +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/QuestProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/QuestProvider.java new file mode 100644 index 000000000..f9e9e3ed8 --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/QuestProvider.java @@ -0,0 +1,69 @@ +package de.peeeq.wurstio.jassinterpreter.providers; + +import de.peeeq.wurstio.jassinterpreter.mocks.QuestMock; +import de.peeeq.wurstscript.intermediatelang.ILconstBool; +import de.peeeq.wurstscript.intermediatelang.ILconstString; +import de.peeeq.wurstscript.intermediatelang.IlConstHandle; +import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; + +public class QuestProvider extends Provider { + public QuestProvider(AbstractInterpreter interpreter) { + super(interpreter); + } + + public IlConstHandle CreateQuest() { + return new IlConstHandle(NameProvider.getRandomName("quest"), new QuestMock()); + } + + public void DestroyQuest(IlConstHandle quest) { + } + + public void QuestSetTitle(IlConstHandle quest, ILconstString title) { + } + + public void QuestSetIconPath(IlConstHandle quest, ILconstString title) { + } + + public void QuestSetDescription(IlConstHandle quest, ILconstString description) { + } + + public ILconstBool IsQuestCompleted(IlConstHandle quest) { + return ((QuestMock) quest.getObj()).completed; + } + + public ILconstBool IsQuestDiscovered(IlConstHandle quest) { + return ((QuestMock) quest.getObj()).discovered; + } + + public ILconstBool IsQuestEnabled(IlConstHandle quest) { + return ((QuestMock) quest.getObj()).enabled; + } + + public ILconstBool IsQuestFailed(IlConstHandle quest) { + return ((QuestMock) quest.getObj()).failed; + } + + public ILconstBool IsQuestRequired(IlConstHandle quest) { + return ((QuestMock) quest.getObj()).required; + } + + public void QuestSetCompleted(IlConstHandle quest, ILconstBool completed) { + ((QuestMock) quest.getObj()).completed = completed; + } + + public void QuestSetDiscovered(IlConstHandle quest, ILconstBool discovered) { + ((QuestMock) quest.getObj()).discovered = discovered; + } + + public void QuestSetEnabled(IlConstHandle quest, ILconstBool enabled) { + ((QuestMock) quest.getObj()).enabled = enabled; + } + + public void QuestSetFailed(IlConstHandle quest, ILconstBool failed) { + ((QuestMock) quest.getObj()).failed = failed; + } + + public void QuestSetRequired(IlConstHandle quest, ILconstBool required) { + ((QuestMock) quest.getObj()).required = required; + } +} From ab5946a8203c7802c712971d026f3db88e9dc68b Mon Sep 17 00:00:00 2001 From: Jampi0n <27952849+Jampi0n@users.noreply.github.com> Date: Sun, 10 Jul 2022 10:12:44 +0200 Subject: [PATCH 31/74] Temporary index variable for shorthand assignments (#1061) * Temporary index variable for shorthand assignments * Avoid additional list allocations --- .../antlr/AntlrWurstParseTreeTransformer.java | 74 ++++++++++++++----- .../tests/wurstscript/tests/ArrayTests.java | 36 +++++++++ 2 files changed, 92 insertions(+), 18 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java index e93e5686e..1a4ded08b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java @@ -10,6 +10,7 @@ import de.peeeq.wurstscript.attributes.ErrorHandler; import de.peeeq.wurstscript.jass.AntlrJassParseTreeTransformer; import de.peeeq.wurstscript.parser.WPos; +import de.peeeq.wurstscript.types.WurstTypeInt; import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; import org.antlr.v4.runtime.ParserRuleContext; @@ -476,7 +477,7 @@ private SuperConstructorCall transformSuperCall(SuperCallContext sc) { private WStatements transformStatementList(List stmts) { WStatements result = Ast.WStatements(); for (StatementContext s : stmts) { - result.add(transformStatement(s)); + transformStatement(result, s); } return result; } @@ -593,14 +594,19 @@ private WStatements transformStatements(StatementsBlockContext b) { WStatements result = Ast.WStatements(); if (b != null) { for (StatementContext s : b.statement()) { - result.add(transformStatement(s)); + transformStatement(result, s); } } return result; } - private WStatement transformStatement(StatementContext s) { - WStatement ws = transformStatement2(s); + private void transformStatement(WStatements result, StatementContext s) { + if (s.stmtSet() != null) { + transformStmtSet(result, s.stmtSet()); + } else { + result.add(transformStatement2(s)); + } + WStatement ws = result.get(result.size() - 1); if (s.externalLambda() != null) { Expr lambda = transformExternalLambda(s.externalLambda()); @@ -614,12 +620,12 @@ private WStatement transformStatement(StatementContext s) { // add as last arg in function call AstElementWithArgs fc = (AstElementWithArgs) e; fc.getArgs().add(lambda); - return ws; + return; } if (e instanceof ExprEmpty) { // replace empty right-hand-side of assignment e.replaceBy(lambda); - return ws; + return; } if (e.size() == 0) { break; @@ -630,7 +636,6 @@ private WStatement transformStatement(StatementContext s) { cuErrorHandler.sendError(new CompileError(source(s.externalLambda()), "External Lambda-block can only be used after function calls.")); } - return ws; } private Expr transformExternalLambda(ExternalLambdaContext el) { @@ -651,8 +656,6 @@ private WStatement transformStatement2(StatementContext s) { return transformWhile(s.stmtWhile()); } else if (s.localVarDef() != null) { return transformLocalVarDef(s.localVarDef()); - } else if (s.stmtSet() != null) { - return transformStmtSet(s.stmtSet()); } else if (s.expr() != null) { Expr e = transformExpr(s.expr()); if (e instanceof WStatement) { @@ -717,26 +720,61 @@ private StmtReturn transformReturn(StmtReturnContext s) { } return Ast.StmtReturn(source(s), r); } - - private WStatement transformStmtSet(StmtSetContext s) { + private boolean useTemporaryIndex(Expr idx) { + // Integer literals and variables do not need to be replaced. + return !(idx instanceof ExprIntVal) && !(idx instanceof ExprVarAccess); + } + + private NameRef addTemporaryIndexes(WStatements result, WPos src, NameRef expr) { + // For shorthand assignments (+=, ++, ...) the indexes are replaced by temporary variables. + if(expr instanceof AstElementWithIndexes) { + NameRef tempIndexExpr = expr.copy(); + Indexes indexes = ((AstElementWithIndexes) tempIndexExpr).getIndexes(); + for (int i = 0; i < indexes.size(); ++i) { + Expr idx = indexes.get(i).copy(); + if (useTemporaryIndex(idx)) { + OptTypeExpr optTyp = Ast.TypeExprResolved(src, WurstTypeInt.instance()); + String tempName = "index_temp_" + idx.getSource().getLine() + "_" + idx.getSource().getStartColumn(); + Identifier identifier = Ast.Identifier(src, tempName); + Modifiers modifiers = Ast.Modifiers(Ast.ModConstant(src)); + LocalVarDef local = Ast.LocalVarDef(src, modifiers, optTyp, identifier, idx); + result.add(local); + indexes.set(i, Ast.ExprVarAccess(src, identifier.copy())); + } + } + return tempIndexExpr; + } + return expr; + } + private void transformStmtSet(WStatements result, StmtSetContext s) { NameRef updatedExpr = transformAssignable(s.left); WPos src = source(s); if (s.assignOp != null) { Expr right = transformExpr(s.right); WurstOperator op = getAssignOp(s.assignOp); if (op != null) { - right = Ast.ExprBinary(src, (Expr) updatedExpr.copy(), op, - right); + // assignment operator (+=, -=, ...) + updatedExpr = addTemporaryIndexes(result, src, updatedExpr); + right = Ast.ExprBinary(src, updatedExpr.copy(), op, right); + result.add(Ast.StmtSet(src, updatedExpr, right)); + } else { + // normal assignment (=) + // only return set statement + result.add(Ast.StmtSet(src, updatedExpr, right)); } - return Ast.StmtSet(src, updatedExpr, right); + return; } else if (s.incOp != null) { - Expr right = Ast.ExprBinary(src, (Expr) updatedExpr.copy(), + updatedExpr = addTemporaryIndexes(result, src, updatedExpr); + Expr right = Ast.ExprBinary(src, updatedExpr.copy(), WurstOperator.PLUS, Ast.ExprIntVal(src, "1")); - return Ast.StmtSet(src, updatedExpr, right); + result.add(Ast.StmtSet(src, updatedExpr, right)); + return; } else if (s.decOp != null) { - Expr right = Ast.ExprBinary(src, (Expr) updatedExpr.copy(), + updatedExpr = addTemporaryIndexes(result, src, updatedExpr); + Expr right = Ast.ExprBinary(src, updatedExpr.copy(), WurstOperator.MINUS, Ast.ExprIntVal(src, "1")); - return Ast.StmtSet(src, updatedExpr, right); + result.add(Ast.StmtSet(src, updatedExpr, right)); + return; } throw error(s, "not implemented"); } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ArrayTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ArrayTests.java index 3da8ce113..a1811870a 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ArrayTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ArrayTests.java @@ -222,5 +222,41 @@ public void intArrayInit() { " testSuccess()"); } + @Test + public void shorthandAssignmentNoWarning() { + testAssertOkLines(true, + "package test", + "native testSuccess()", + "int array testArray", + "int numExecutions = 0", + "function getIndex() returns int", + " numExecutions++", + " return 2", + "init", + " let tmp = 17", + " testArray[getIndex() + tmp] += 1", + " if numExecutions == 1", + " testSuccess()" + ); + } + @Test + public void shorthandAssignmentClassNoWarning() { + testAssertOkLines(true, + "package test", + "native testSuccess()", + "int numExecutions = 0", + "class C", + " int array[3] v = [7, 8, 9]", + "function getIndex() returns int", + " numExecutions++", + " return 1", + "init", + " let tmp = 1", + " let c = new C()", + " c.v[getIndex() + tmp] += 1", + " if numExecutions == 1", + " testSuccess()" + ); + } } From 032764e975fb74015353aa478f4dccac462e6438 Mon Sep 17 00:00:00 2001 From: Jampi0n <27952849+Jampi0n@users.noreply.github.com> Date: Sun, 10 Jul 2022 10:13:34 +0200 Subject: [PATCH 32/74] Use correct timeTaker for compiler (#1062) --- .../de/peeeq/wurstio/languageserver/requests/MapRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 3152a09b0..630368864 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -158,7 +158,7 @@ protected File compileMap(File projectFolder, WurstGui gui, Optional mapCo "Please supply a valid .w3x input map that can be opened in the world editor."); throw new NonWritableChannelException(); } - WurstCompilerJassImpl compiler = new WurstCompilerJassImpl(projectFolder, gui, mpqEditor, runArgs); + WurstCompilerJassImpl compiler = new WurstCompilerJassImpl(timeTaker, projectFolder, gui, mpqEditor, runArgs); compiler.setMapFile(mapCopy); purgeUnimportedFiles(model); From db253e0d36bcb5103116ab2b01d3960b041d587b Mon Sep 17 00:00:00 2001 From: Jampi0n <27952849+Jampi0n@users.noreply.github.com> Date: Tue, 12 Jul 2022 00:51:22 +0200 Subject: [PATCH 33/74] Improve Lua optimizers (#1063) * Improve Lua optimizers * Improve constant tuple propagation * Fix stacktraces * Only eliminate simple types Class types are required when evaluating the type of member accesses. * Fix for copies of tuples and simplify code Knowledge may also contain copies of tuples. They cannot be updated by tuple selection assignments and have to be removed instead. --- .../peeeq/wurstio/WurstCompilerJassImpl.java | 5 + .../providers/LuaEnsureTypeProvider.java | 2 + .../optimizer/ConstantAndCopyPropagation.java | 146 +++++++++++++++++- .../optimizer/LocalMerger.java | 14 +- .../optimizer/TempMerger.java | 9 ++ .../translation/imoptimizer/ImOptimizer.java | 16 ++ .../translation/imtojass/ImAttrType.java | 6 +- .../imtranslation/EliminateLocalTypes.java | 53 +++++++ .../imtranslation/ImTranslator.java | 3 + .../lua/translation/ExprTranslation.java | 23 +-- .../lua/translation/StmtTranslation.java | 6 +- .../peeeq/wurstscript/types/TypesHelper.java | 39 +++++ 12 files changed, 285 insertions(+), 37 deletions(-) create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index bac99eefe..ece00a186 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -857,6 +857,11 @@ public LuaCompilationUnit transformProgToLua() { printDebugImProg("./test-output/lua/im " + stage++ + "_afterinline.im"); } + // eliminate local types + beginPhase(6, "eliminate local type"); + getImProg().flatten(imTranslator2); + EliminateLocalTypes.eliminateLocalTypesProg(getImProg(), imTranslator2); + optimizer.removeGarbage(); imProg.flatten(imTranslator); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LuaEnsureTypeProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LuaEnsureTypeProvider.java index 07ac6ed45..df96afca7 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LuaEnsureTypeProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LuaEnsureTypeProvider.java @@ -23,4 +23,6 @@ public ILconstBool boolEnsure(ILconstBool x) { public ILconstReal realEnsure(ILconstReal x) { return x; } + + public ILconstString stringConcat(ILconstString x, ILconstString y) { return new ILconstString(x.getVal() + y.getVal()); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ConstantAndCopyPropagation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ConstantAndCopyPropagation.java index d25730b27..96805b7ea 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ConstantAndCopyPropagation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ConstantAndCopyPropagation.java @@ -6,6 +6,7 @@ import de.peeeq.wurstscript.translation.imoptimizer.OptimizerPass; import de.peeeq.wurstscript.translation.imtranslation.ImHelper; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; +import de.peeeq.wurstscript.types.TypesHelper; import io.vavr.Tuple2; import io.vavr.collection.HashMap; import org.eclipse.jdt.annotation.Nullable; @@ -38,15 +39,49 @@ static class Value { ImVar copyVar; final @Nullable ImConst constantValue; + ImTupleExpr constantTuple; public Value(ImVar copyVar) { this.copyVar = copyVar; this.constantValue = null; + this.constantTuple = null; + if(copyVar.isGlobal()) { + throw new IllegalArgumentException("copyVar must not be a Global."); + } } public Value(ImConst constantValue) { this.copyVar = null; this.constantValue = constantValue; + this.constantTuple = null; + } + + public Value(ImTupleExpr tupleExpr) { + this.copyVar = null; + this.constantValue = null; + this.constantTuple = tupleExpr; + + for(ImExpr e : tupleExpr.getExprs()) { + if(tryValue(e) == null) { + throw new IllegalArgumentException("tupleExpr must only contain constant values."); + } + } + } + + public static Value tryValue(ImExpr e) { + try { + if (e instanceof ImVarAccess) { + return new Value(((ImVarAccess) e).getVar()); + } + if (e instanceof ImConst) { + return new Value((ImConst) e); + } + if (e instanceof ImTupleExpr) { + return new Value((ImTupleExpr) e); + } + } catch (IllegalArgumentException ignored) { + } + return null; } @Override @@ -62,6 +97,20 @@ public boolean equalValue(Value other) { return copyVar == other.copyVar; } else if (constantValue != null && other.constantValue != null) { return constantValue.equalValue(other.constantValue); + } else if (constantTuple != null && other.constantTuple != null) { + ImTupleExpr a = constantTuple; + ImTupleExpr b = other.constantTuple; + if(!a.attrTyp().equalsType(b.attrTyp())) { + return false; + } + for(int i = 0; i < a.getExprs().size() ;++i) { + Value aV = tryValue(a.getExprs().get(i)); + Value bV = tryValue(b.getExprs().get(i)); + if(!aV.equalValue(bV)) { + return false; + } + } + return true; } return false; } @@ -70,8 +119,10 @@ public boolean equalValue(Value other) { public String toString() { if (copyVar != null) { return "copy of " + copyVar; - } else { + } else if (constantValue != null) { return "constant " + constantValue; + } else { + return "tuple of " + constantTuple; } } @@ -135,6 +186,40 @@ public void visit(ImVarAccess va) { va.setVar(val.copyVar); // recursive call, because maybe it is possible to also replace the new var visit(va); + } else if (val.constantTuple != null) { + // Tuple literals are not always propagated, because they are more expensive (multiple values). + if(va.getParent() instanceof ImTupleSelection) { + // Tuple selections of constant tuples are replaced by the selected constant value. + ImTupleSelection ts = (ImTupleSelection) va.getParent(); + Element t = ts; + ImExpr constT = val.constantTuple; + while(t instanceof ImTupleSelection) { + ts = (ImTupleSelection) t; + // follow the constant tuple according to the tuple selection index + constT = ((ImTupleExpr) constT).getExprs().get(ts.getTupleIndex()); + // follow the tuple selection to get to the full tuple + t = ts.getParent(); + } + // constT now holds the literal that is selected + // Only perform replacement, if the literal is small enough. + boolean replace = true; + if(constT instanceof ImTupleExpr) { + ImTupleExpr te = (ImTupleExpr) constT; + if (te.getExprs().size() != 1 || te.getExprs().get(0) instanceof ImTupleSelection) { + replace = false; + } + } + if(replace) { + ts.replaceBy(constT.copy()); + } + + } else { + // Only perform replacement, if the literal is small enough. + if(val.constantTuple.getExprs().size() == 1 && !(val.constantTuple.getExprs().get(0) instanceof ImTupleSelection)) { + va.replaceBy(val.constantTuple.copy()); + } + } + totalPropagated++; } } }); @@ -196,14 +281,22 @@ private Map calculateKnowledge(ControlFlowGraph cfg) { ImVar var = ((ImVarAccess) imSet.getLeft()).getVar(); if (!var.isGlobal()) { Value newValue = null; - if (imSet.getRight() instanceof ImConst) { - ImConst imConst = (ImConst) imSet.getRight(); - newValue = new Value(imConst); - } else if (imSet.getRight() instanceof ImVarAccess) { - ImVarAccess imVarAccess = (ImVarAccess) imSet.getRight(); - if (!imVarAccess.getVar().isGlobal()) { - newValue = new Value(imVarAccess.getVar()); + ImExpr right = imSet.getRight(); + if (right instanceof ImConst) { + newValue = Value.tryValue(right); + } else if (right instanceof ImVarAccess) { + // If there already is a value, prefer it. + // Tuples are not always propagated, because tuple literals are more expensive (multiple values). + // However, by using the existing value, the knowledge of a tuple literal is preserved + // and may be used later to access a specific value within the tuple literal. + ImVar varRight = ((ImVarAccess) right).getVar(); + if(newOut.containsKey(varRight)) { + newValue = newOut.get(varRight).getOrNull(); + } else { + newValue = Value.tryValue(right); } + } else if(right instanceof ImTupleExpr) { + newValue = Value.tryValue(right); } if (newValue == null) { // invalidate old value @@ -223,6 +316,43 @@ private Map calculateKnowledge(ControlFlowGraph cfg) { } } } + } else if(imSet.getLeft() instanceof ImTupleSelection) { + ImVar var = TypesHelper.getSimpleAndPureTupleVar((ImTupleSelection) imSet.getLeft()); + if(var != null) { + Value rightVal = Value.tryValue(imSet.getRight()); + Value existingValue = newOut.get(var).getOrNull(); + if (rightVal != null && existingValue != null && existingValue.constantTuple != null) { + // rightVal is constant or copy + // existingValue is constant tuple (the existing knowledge is altered partially, which does not work on copies) + // update known constant tuple + ImTupleExpr te = existingValue.constantTuple.copy(); + ImExpr knownTuple = te; + Element left = imSet.getLeft(); + // go to innermost selection + while (left instanceof ImTupleSelection) { + left = ((ImTupleSelection) left).getTupleExpr(); + } + // go back to the initial selection and follow along in the known tuple + while (left != imSet.getLeft()) { + left = left.getParent(); + knownTuple = ((ImTupleExpr) knownTuple).getExprs().get(((ImTupleSelection) left).getTupleIndex()); + } + knownTuple.replaceBy(imSet.getRight().copy()); + // update value + newOut = newOut.put(var, new Value(te)); + } else { + // cannot update knowledge of lhs + // value of lhs unknown + newOut = newOut.remove(var); + } + // either way, lhs has now a new value and copies of it must be invalidated + Value varAsValue = new Value(var); + for (Tuple2 p : newOut) { + if (p._2().equalValue(varAsValue)) { + newOut = newOut.remove(p._1()); + } + } + } } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java index ba1f34ec9..2edb80767 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java @@ -6,6 +6,7 @@ import de.peeeq.wurstscript.translation.imoptimizer.OptimizerPass; import de.peeeq.wurstscript.translation.imtranslation.ImHelper; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; +import de.peeeq.wurstscript.types.TypesHelper; import de.peeeq.wurstscript.utils.Utils; import io.vavr.collection.HashSet; import io.vavr.collection.Set; @@ -146,12 +147,14 @@ private void eliminateDeadCode(Map> livenessInfo) { for (ImStmt s : livenessInfo.keySet()) { if (s instanceof ImSet) { ImSet imSet = (ImSet) s; - if (!(imSet.getLeft() instanceof ImVarAccess)) { - continue; + ImVar v = null; + if(imSet.getLeft() instanceof ImVarAccess) { + ImVarAccess va = (ImVarAccess) imSet.getLeft(); + v = va.getVar(); + } else if(imSet.getLeft() instanceof ImTupleSelection) { + v = TypesHelper.getSimpleAndPureTupleVar((ImTupleSelection) imSet.getLeft()); } - ImVarAccess va = (ImVarAccess) imSet.getLeft(); - ImVar v = va.getVar(); - if (v.isGlobal()) { + if (v == null || v.isGlobal()) { continue; } @@ -298,6 +301,7 @@ private Map> calculateDefs(List nodes) { result.put(node, HashSet.of(v)); } } + // no special case for tuple selection, as they do not override all previous values } } return result; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java index ab8ce93ca..7d0ddfcfa 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java @@ -7,6 +7,7 @@ import de.peeeq.wurstscript.translation.imtranslation.AssertProperty; import de.peeeq.wurstscript.translation.imtranslation.ImHelper; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; +import de.peeeq.wurstscript.types.TypesHelper; import de.peeeq.wurstscript.utils.MapWithIndexes; import de.peeeq.wurstscript.utils.MapWithIndexes.Index; import de.peeeq.wurstscript.utils.MapWithIndexes.PredIndex; @@ -116,6 +117,11 @@ private void optimizeStatements(ImStmts stmts) { } else if (imSet.getLeft() instanceof ImVarArrayAccess) { ImVarArrayAccess va = (ImVarArrayAccess) imSet.getLeft(); kn.invalidateVar(va.getVar()); + } else if (imSet.getLeft() instanceof ImMemberAccess) { + ImMemberAccess ma = (ImMemberAccess) imSet.getLeft(); + kn.invalidateVar(ma.getVar()); + } else if (imSet.getLeft() instanceof ImTupleSelection) { + kn.invalidateVar(TypesHelper.getTupleVar(((ImTupleSelection) imSet.getLeft()))); } } else if (s instanceof ImExitwhen || s instanceof ImIf || s instanceof ImLoop || s instanceof ImVarargLoop) { kn.clear(); @@ -320,6 +326,9 @@ private void collectReadVariables(Collection result, Element e) { if (e instanceof ImVarRead) { result.add(((ImVarRead) e).getVar()); } + if (e instanceof ImMemberAccess) { + result.add(((ImMemberAccess) e).getVar()); + } for (int i = 0; i < e.size(); i++) { collectReadVariables(result, e.get(i)); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImOptimizer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImOptimizer.java index 65de084b1..58e632122 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImOptimizer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImOptimizer.java @@ -7,6 +7,7 @@ import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.translation.imtranslation.ImHelper; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; +import de.peeeq.wurstscript.types.TypesHelper; import de.peeeq.wurstscript.utils.Pair; import de.peeeq.wurstscript.validation.TRVEHelper; @@ -113,6 +114,11 @@ public void removeGarbage() { int classFunctionsAfter = c.getFunctions().size(); totalFunctionsRemoved += classFunctionsBefore - classFunctionsAfter; allFunctions.addAll(c.getFunctions()); + + int classFieldsBefore = c.getFields().size(); + changes |= c.getFields().retainAll(trans.getReadVariables()); + int classFieldsAfter = c.getFields().size(); + totalGlobalsRemoved += classFieldsBefore - classFieldsAfter; } for (ImFunction f : allFunctions) { // remove set statements to unread variables @@ -134,6 +140,16 @@ public void visit(ImSet e) { exprs.add(e.getRight()); replacements.add(Pair.create(e, exprs)); } + } else if (e.getLeft() instanceof ImTupleSelection) { + ImVar var = TypesHelper.getTupleVar((ImTupleSelection) e.getLeft()); + if(!trans.getReadVariables().contains(var) && !TRVEHelper.protectedVariables.contains(var.getName())) { + replacements.add(Pair.create(e, Collections.singletonList(e.getRight()))); + } + } else if(e.getLeft() instanceof ImMemberAccess) { + ImMemberAccess va = ((ImMemberAccess) e.getLeft()); + if (!trans.getReadVariables().contains(va.getVar()) && !TRVEHelper.protectedVariables.contains(va.getVar().getName())) { + replacements.add(Pair.create(e, Collections.singletonList(e.getRight()))); + } } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImAttrType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImAttrType.java index 779f7bfb8..1c485bb6c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImAttrType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImAttrType.java @@ -113,7 +113,11 @@ public static ImType getType(ImStringVal e) { } public static ImType getType(ImTupleSelection e) { - ImTupleType tt = (ImTupleType) e.getTupleExpr().attrTyp(); + ImType t = e.getTupleExpr().attrTyp(); + if(t instanceof ImArrayTypeMulti) { + t = ((ImArrayTypeMulti) t).getEntryType(); + } + ImTupleType tt = (ImTupleType) t; return tt.getTypes().get(e.getTupleIndex()); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java new file mode 100644 index 000000000..a8ea9b422 --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java @@ -0,0 +1,53 @@ +package de.peeeq.wurstscript.translation.imtranslation; + +import de.peeeq.wurstscript.WurstOperator; +import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.types.TypesHelper; + +public class EliminateLocalTypes { + private static ImType localSimpleType = JassIm.ImSimpleType("localSimpleType"); + + public static void eliminateLocalTypesProg(ImProg imProg, ImTranslator translator) { + // While local types are still there, perform transformation specifically for strings: + // null string -> "" + // string1 + string2 -> stringConcat(string1, string2) + transformStrings(imProg, translator); + // Eliminates local types to be able to merge more locals in Lua. + for (ImFunction f : ImHelper.calculateFunctionsOfProg(imProg)) { + eliminateLocalTypesFunc(f, translator); + } + } + + private static void eliminateLocalTypesFunc(ImFunction f, final ImTranslator translator) { + for(ImVar local : f.getLocals()) { + ImType t = local.getType(); + if(t instanceof ImSimpleType) { + // Simple types can always be merged. + local.setType(localSimpleType); + } + } + } + + private static void transformStrings(ImProg imProg, ImTranslator translator) { + imProg.accept(new Element.DefaultVisitor() { + @Override + public void visit(ImOperatorCall imOperatorCall) { + super.visit(imOperatorCall); + ImExprs args = imOperatorCall.getArguments(); + if (imOperatorCall.getOp() == WurstOperator.PLUS) { + if(args.size() == 2 && TypesHelper.isStringType(args.get(0).attrTyp()) && TypesHelper.isStringType(args.get(1).attrTyp()) ) { + imOperatorCall.replaceBy(JassIm.ImFunctionCall(imOperatorCall.attrTrace(), translator.stringConcatFunc, JassIm.ImTypeArguments(), imOperatorCall.getArguments().copy(), false, CallType.NORMAL)); + } + } + } + + @Override + public void visit(ImNull imNull) { + super.visit(imNull); + if(TypesHelper.isStringType(imNull.getType())) { + imNull.replaceBy(JassIm.ImStringVal("")); + } + } + }); + } +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java index f49b9b67c..033b0fabd 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java @@ -95,6 +95,7 @@ public class ImTranslator { @Nullable public ImFunction ensureBoolFunc = null; @Nullable public ImFunction ensureRealFunc = null; @Nullable public ImFunction ensureStrFunc = null; + @Nullable public ImFunction stringConcatFunc = null; private final Map varsForTupleVar = new LinkedHashMap<>(); @@ -134,10 +135,12 @@ public ImProg translateProg() { ensureBoolFunc = JassIm.ImFunction(emptyTrace, "boolEnsure", ImTypeVars(), ImVars(JassIm.ImVar(wurstProg, WurstTypeBool.instance().imTranslateType(this), "x", false)), WurstTypeBool.instance().imTranslateType(this), ImVars(), ImStmts(), flags(IS_NATIVE, IS_BJ)); ensureRealFunc = JassIm.ImFunction(emptyTrace, "realEnsure", ImTypeVars(), ImVars(JassIm.ImVar(wurstProg, WurstTypeReal.instance().imTranslateType(this), "x", false)), WurstTypeReal.instance().imTranslateType(this), ImVars(), ImStmts(), flags(IS_NATIVE, IS_BJ)); ensureStrFunc = JassIm.ImFunction(emptyTrace, "stringEnsure", ImTypeVars(), ImVars(JassIm.ImVar(wurstProg, WurstTypeString.instance().imTranslateType(this), "x", false)), WurstTypeString.instance().imTranslateType(this), ImVars(), ImStmts(), flags(IS_NATIVE, IS_BJ)); + stringConcatFunc =JassIm.ImFunction(emptyTrace, "stringConcat", ImTypeVars(), ImVars(JassIm.ImVar(wurstProg, WurstTypeString.instance().imTranslateType(this), "x", false),JassIm.ImVar(wurstProg, WurstTypeString.instance().imTranslateType(this), "y", false)), WurstTypeString.instance().imTranslateType(this), ImVars(), ImStmts(), flags(IS_NATIVE, IS_BJ)); addFunction(ensureIntFunc); addFunction(ensureBoolFunc); addFunction(ensureRealFunc); addFunction(ensureStrFunc); + addFunction(stringConcatFunc); } calculateCompiletimeOrder(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java index 65425f25a..367fe4dd8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java @@ -107,11 +107,7 @@ public static LuaExpr translate(ImMethodCall e, LuaTranslator tr) { } public static LuaExpr translate(ImNull e, LuaTranslator tr) { - if(isStringType(e.getType())) { - return LuaAst.LuaExprStringVal(""); - } else { - return LuaAst.LuaExprNull(); - } + return LuaAst.LuaExprNull(); } public static LuaExpr translate(ImOperatorCall e, LuaTranslator tr) { @@ -126,13 +122,7 @@ public static LuaExpr translate(ImOperatorCall e, LuaTranslator tr) { LuaExpr leftExpr = left.translateToLua(tr); LuaExpr rightExpr = right.translateToLua(tr); LuaOpBinary op; - if (e.getOp() == WurstOperator.PLUS - && isStringType(left.attrTyp()) - && isStringType(right.attrTyp())) { - // special case for string concatenation - return LuaAst.LuaExprFunctionCall(tr.stringConcatFunction, - LuaAst.LuaExprlist(leftExpr, rightExpr)); - } else if (e.getOp() == WurstOperator.MOD_INT) { + if (e.getOp() == WurstOperator.MOD_INT) { op = LuaAst.LuaOpMod(); return LuaAst.LuaExprFunctionCallE(LuaAst.LuaLiteral("math.floor"), @@ -272,15 +262,6 @@ private static LuaExpr translateEquals(LuaExpr leftExpr, LuaExpr rightExpr, ImTy return LuaAst.LuaExprBinary(leftExpr, LuaAst.LuaOpEquals(), rightExpr); } - - private static boolean isStringType(ImType t) { - if (t instanceof ImSimpleType) { - ImSimpleType st = (ImSimpleType) t; - return st.getTypename().equals("string"); - } - return false; - } - public static LuaExpr translate(ImRealVal e, LuaTranslator tr) { return LuaAst.LuaExprRealVal(e.getValR()); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/StmtTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/StmtTranslation.java index aab612f29..37f40677d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/StmtTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/StmtTranslation.java @@ -39,8 +39,10 @@ public static void translate(ImSet s, List res, LuaTranslator tr) LuaExpr right = s.getRight().translateToLua(tr); if (s.getRight().attrTyp() instanceof ImTupleType) { ImTupleType tt = (ImTupleType) s.getRight().attrTyp(); - // tuples must be copied - right = LuaAst.LuaExprFunctionCall(ExprTranslation.getTupleCopyFunc(tt, tr), LuaAst.LuaExprlist(right)); + // tuples must be copied, unless they are literals + if(!(right instanceof LuaTableConstructor)) { + right = LuaAst.LuaExprFunctionCall(ExprTranslation.getTupleCopyFunc(tt, tr), LuaAst.LuaExprlist(right)); + } } res.add(LuaAst.LuaAssignment(left, right)); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/TypesHelper.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/TypesHelper.java index 09eef9c49..d2a711180 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/TypesHelper.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/TypesHelper.java @@ -47,6 +47,38 @@ public static boolean typeContainsTuples(ImType vt) { || vt instanceof ImArrayType && typeContainsTuples(((ImArrayType) vt).getEntryType()) || vt instanceof ImArrayTypeMulti && typeContainsTuples(((ImArrayTypeMulti) vt).getEntryType()); } + + public static ImVar getSimpleAndPureTupleVar(ImTupleSelection ts) { + ImExpr te = ts; + while(te instanceof ImTupleSelection) { + te = ((ImTupleSelection) te).getTupleExpr(); + } + if(te instanceof ImVarAccess) { + ImVar var = ((ImVarAccess) te).getVar(); + if(var.isGlobal()) { + return null; + } + return var; + } + return null; + } + + public static ImVar getTupleVar(ImTupleSelection ts) { + ImExpr te = ts; + while(te instanceof ImTupleSelection) { + te = ((ImTupleSelection) te).getTupleExpr(); + } + if(te instanceof ImVarAccess) { + return ((ImVarAccess) te).getVar(); + } + if(te instanceof ImVarArrayAccess) { + return ((ImVarArrayAccess) te).getVar(); + } + if(te instanceof ImMemberAccess) { + return ((ImMemberAccess) te).getVar(); + } + throw new Error("not implemented"); + } public static boolean isIntType(ImType t) { if (t instanceof ImSimpleType) { @@ -69,6 +101,13 @@ public static boolean isBoolType(ImType t) { return false; } + public static boolean isStringType(ImType t) { + if (t instanceof ImSimpleType) { + return ((ImSimpleType) t).getTypename().equals("string"); + } + return false; + } + public static ImSimpleType imTrigger() { return JassIm.ImSimpleType("trigger"); } From 18ca8ab9bda8e1ceb5112c75866e26bbfd5d08d4 Mon Sep 17 00:00:00 2001 From: Jampi0n <27952849+Jampi0n@users.noreply.github.com> Date: Wed, 13 Jul 2022 23:03:01 +0200 Subject: [PATCH 34/74] Remove type dependency from cast translation (#1064) * Remove type dependency from cast translation When casting to int, there is a special case when an int is casted (no cast necessary). This was no longer detected correctly with eliminated local types. Now this unnecessary cast is removed in advance, before local types are lost. * Unit tests for local type elimination --- .../imtranslation/EliminateLocalTypes.java | 19 +++-- .../lua/translation/ExprTranslation.java | 2 +- .../tests/LuaTranslationTests.java | 76 +++++++++++++++++++ 3 files changed, 91 insertions(+), 6 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java index a8ea9b422..9cdaafbbb 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java @@ -8,10 +8,11 @@ public class EliminateLocalTypes { private static ImType localSimpleType = JassIm.ImSimpleType("localSimpleType"); public static void eliminateLocalTypesProg(ImProg imProg, ImTranslator translator) { - // While local types are still there, perform transformation specifically for strings: - // null string -> "" - // string1 + string2 -> stringConcat(string1, string2) - transformStrings(imProg, translator); + // While local types are still there, perform transformation, such that the lua translator does not need to know variable types + // null string -> "" (avoids type dependency in null translation) + // string1 + string2 -> stringConcat(string1, string2) (avoids type dependency in operator translation) + // int castTo int -> remove cast (avoids type dependency in cast translation) + transformProgram(imProg, translator); // Eliminates local types to be able to merge more locals in Lua. for (ImFunction f : ImHelper.calculateFunctionsOfProg(imProg)) { eliminateLocalTypesFunc(f, translator); @@ -28,7 +29,7 @@ private static void eliminateLocalTypesFunc(ImFunction f, final ImTranslator tra } } - private static void transformStrings(ImProg imProg, ImTranslator translator) { + private static void transformProgram(ImProg imProg, ImTranslator translator) { imProg.accept(new Element.DefaultVisitor() { @Override public void visit(ImOperatorCall imOperatorCall) { @@ -48,6 +49,14 @@ public void visit(ImNull imNull) { imNull.replaceBy(JassIm.ImStringVal("")); } } + + @Override + public void visit(ImCast imCast) { + super.visit(imCast); + if(TypesHelper.isIntType(imCast.getExpr().attrTyp()) && TypesHelper.isIntType(imCast.getToType())) { + imCast.replaceBy(imCast.getExpr().copy()); + } + } }); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java index 367fe4dd8..5f7a10b20 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java @@ -326,7 +326,7 @@ public static LuaExpr translate(ImTypeVarDispatch imTypeVarDispatch, LuaTranslat public static LuaExpr translate(ImCast imCast, LuaTranslator tr) { LuaExpr translated = imCast.getExpr().translateToLua(tr); - if (TypesHelper.isIntType(imCast.getToType()) && !TypesHelper.isIntType(imCast.getExpr().attrTyp())) { + if (TypesHelper.isIntType(imCast.getToType())) { return LuaAst.LuaExprFunctionCall(tr.toIndexFunction, LuaAst.LuaExprlist(translated)); } else if (imCast.getToType() instanceof ImClassType || imCast.getToType() instanceof ImAnyType) { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java index f006ed194..9b508cfbe 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java @@ -40,6 +40,20 @@ private void assertFunctionCall(String output, String functionName, String argum assertTrue("Function call to function " + functionName + " with arguments (" + arguments + ") was not found.", findAtLeastOne); } + private void assertFunctionBodyContains(String output, String functionName, String search, boolean mustContain) { + Pattern pattern = Pattern.compile("function\\s*" + functionName + "\\s*\\(.*\\).*\\n" + "((?:\\n|.)*?)end"); + Matcher matcher = pattern.matcher(output); + while (matcher.find()) { + String body = matcher.group(1); + if(!body.contains(search) && mustContain) { + fail("Function " + functionName + " must contain " + search + "."); + } + if(body.contains(search) && !mustContain) { + fail("Function " + functionName + " must not contain " + search + "."); + } + } + } + @Test public void testStdLib() throws IOException { test().testLua(true).withStdLib().lines( @@ -157,5 +171,67 @@ public void nullUnit2() throws IOException { String compiled = Files.toString(new File("test-output/lua/LuaTranslationTests_nullUnit2.lua"), Charsets.UTF_8); assertFunctionCall(compiled, "takesUnit", "nil"); } + + @Test + public void stringConcatenation() throws IOException { + // Use local variables to test if it works even when local types are eliminated. + test().testLua(true).lines( + "package Test", + "native takesString(string s)", + "function test()", + " let s1 = \"1\"", + " let s2 = \"2\"", + " takesString(s1 + s2)", + "init", + " test()" + ); + String compiled = Files.toString(new File("test-output/lua/LuaTranslationTests_stringConcatenation.lua"), Charsets.UTF_8); + // strings use the stringConcat function in lua instead of + operator + assertFunctionBodyContains(compiled, "test", "+", false); + assertFunctionBodyContains(compiled, "test", "stringConcat", true); + } + + @Test + public void intCasting() throws IOException { + // Use local variables to test if it works even when local types are eliminated. + test().testLua(true).lines( + "package Test", + "native takesInt(int i)", + "enum MyEnum", + " ZERO", + " ONE", + " TWO", + "function testEnum()", + " let zeroEnum = MyEnum.ZERO", + " let zeroInt = zeroEnum castTo int", + " let zeroEnum2 = zeroInt castTo MyEnum", + " takesInt(zeroEnum castTo int)", + " takesInt(zeroInt)", + " takesInt(zeroEnum2 castTo int)", + "class C", + "native takesC(C c)", + "function testClass()", + " let cObj = new C()", + " let cInt = cObj castTo int", + " let cObj2 = cInt castTo C", + " takesC(cObj)", + " takesInt(cInt)", + " takesC(cObj2)", + "init", + " testEnum()", + " testClass()" + ); + String compiled = Files.toString(new File("test-output/lua/LuaTranslationTests_intCasting.lua"), Charsets.UTF_8); + // enums are cast implicitly, because they are ints + assertFunctionBodyContains(compiled, "testEnum", "objectToIndex", false); + assertFunctionBodyContains(compiled, "testEnum", "zeroEnum = 0", true); + assertFunctionBodyContains(compiled, "testEnum", "zeroInt = zeroEnum", true); + assertFunctionBodyContains(compiled, "testEnum", "zeroEnum2 = zeroInt", true); + // classes are cast with objectToIndex and objectFromIndex in lua + assertFunctionBodyContains(compiled, "testClass", "objectToIndex", true); + assertFunctionBodyContains(compiled, "testClass", "objectFromIndex", true); + assertFunctionBodyContains(compiled, "testClass", "cInt = cObj", false); + assertFunctionBodyContains(compiled, "testClass", "cObj2 = cInt", false); + } } From 68b6be74a5a5178ff2794d34712bd651c098acc4 Mon Sep 17 00:00:00 2001 From: Frotty Date: Thu, 18 Aug 2022 09:37:14 +0200 Subject: [PATCH 35/74] Update common.j --- Wurstpack/resources/common.j | 27 +++++++++++++++++++ Wurstpack/vexorianjasshelper/common.j | 27 +++++++++++++++++++ Wurstpack/wurstscript/common.j | 27 +++++++++++++++++++ .../src/main/resources/common.j | 27 +++++++++++++++++++ 4 files changed, 108 insertions(+) diff --git a/Wurstpack/resources/common.j b/Wurstpack/resources/common.j index cc79bd5d8..7dc4ccb79 100644 --- a/Wurstpack/resources/common.j +++ b/Wurstpack/resources/common.j @@ -537,6 +537,14 @@ globals constant volumegroup SOUND_VOLUMEGROUP_MUSIC = ConvertVolumeGroup(5) constant volumegroup SOUND_VOLUMEGROUP_AMBIENTSOUNDS = ConvertVolumeGroup(6) constant volumegroup SOUND_VOLUMEGROUP_FIRE = ConvertVolumeGroup(7) +//Cinematic Sound Constants + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_GENERAL = ConvertVolumeGroup(8) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_AMBIENT = ConvertVolumeGroup(9) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_MUSIC = ConvertVolumeGroup(10) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_DIALOGUE = ConvertVolumeGroup(11) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_1 = ConvertVolumeGroup(12) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_2 = ConvertVolumeGroup(13) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_3 = ConvertVolumeGroup(14) //=================================================== @@ -3712,6 +3720,7 @@ native SetSoundVelocity takes sound soundHandle, real x, real y, rea native AttachSoundToUnit takes sound soundHandle, unit whichUnit returns nothing native StartSound takes sound soundHandle returns nothing +native StartSoundEx takes sound soundHandle, boolean fadeIn returns nothing native StopSound takes sound soundHandle, boolean killWhenDone, boolean fadeOut returns nothing native KillSoundWhenDone takes sound soundHandle returns nothing @@ -4095,6 +4104,7 @@ native BlzSetSpecialEffectMatrixScale takes effect whichEffect, rea native BlzResetSpecialEffectMatrix takes effect whichEffect returns nothing native BlzGetUnitAbility takes unit whichUnit, integer abilId returns ability native BlzGetUnitAbilityByIndex takes unit whichUnit, integer index returns ability +native BlzGetAbilityId takes ability whichAbility returns integer native BlzDisplayChatMessage takes player whichPlayer, integer recipient, string message returns nothing native BlzPauseUnitEx takes unit whichUnit, boolean flag returns nothing // native BlzFourCC2S takes integer value returns string @@ -4195,3 +4205,20 @@ native BlzCreateDestructableZWithSkin takes integer objectid, real native BlzCreateDeadDestructableWithSkin takes integer objectid, real x, real y, real face, real scale, integer variation, integer skinId returns destructable native BlzCreateDeadDestructableZWithSkin takes integer objectid, real x, real y, real z, real face, real scale, integer variation, integer skinId returns destructable native BlzGetPlayerTownHallCount takes player whichPlayer returns integer + +native BlzQueueImmediateOrderById takes unit whichUnit, integer order returns boolean +native BlzQueuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean +native BlzQueueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean +native BlzQueueInstantPointOrderById takes unit whichUnit, integer order, real x, real y, widget instantTargetWidget returns boolean +native BlzQueueInstantTargetOrderById takes unit whichUnit, integer order, widget targetWidget, widget instantTargetWidget returns boolean +native BlzQueueBuildOrderById takes unit whichPeon, integer unitId, real x, real y returns boolean +native BlzQueueNeutralImmediateOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId returns boolean +native BlzQueueNeutralPointOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, real x, real y returns boolean +native BlzQueueNeutralTargetOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, widget target returns boolean + +// returns the number of orders the unit currently has queued up +native BlzGetUnitOrderCount takes unit whichUnit returns integer +// clears either all orders or only queued up orders +native BlzUnitClearOrders takes unit whichUnit, boolean onlyQueued returns nothing +// stops the current order and optionally clears the queue +native BlzUnitForceStopOrder takes unit whichUnit, boolean clearQueue returns nothing \ No newline at end of file diff --git a/Wurstpack/vexorianjasshelper/common.j b/Wurstpack/vexorianjasshelper/common.j index cc79bd5d8..7dc4ccb79 100644 --- a/Wurstpack/vexorianjasshelper/common.j +++ b/Wurstpack/vexorianjasshelper/common.j @@ -537,6 +537,14 @@ globals constant volumegroup SOUND_VOLUMEGROUP_MUSIC = ConvertVolumeGroup(5) constant volumegroup SOUND_VOLUMEGROUP_AMBIENTSOUNDS = ConvertVolumeGroup(6) constant volumegroup SOUND_VOLUMEGROUP_FIRE = ConvertVolumeGroup(7) +//Cinematic Sound Constants + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_GENERAL = ConvertVolumeGroup(8) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_AMBIENT = ConvertVolumeGroup(9) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_MUSIC = ConvertVolumeGroup(10) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_DIALOGUE = ConvertVolumeGroup(11) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_1 = ConvertVolumeGroup(12) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_2 = ConvertVolumeGroup(13) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_3 = ConvertVolumeGroup(14) //=================================================== @@ -3712,6 +3720,7 @@ native SetSoundVelocity takes sound soundHandle, real x, real y, rea native AttachSoundToUnit takes sound soundHandle, unit whichUnit returns nothing native StartSound takes sound soundHandle returns nothing +native StartSoundEx takes sound soundHandle, boolean fadeIn returns nothing native StopSound takes sound soundHandle, boolean killWhenDone, boolean fadeOut returns nothing native KillSoundWhenDone takes sound soundHandle returns nothing @@ -4095,6 +4104,7 @@ native BlzSetSpecialEffectMatrixScale takes effect whichEffect, rea native BlzResetSpecialEffectMatrix takes effect whichEffect returns nothing native BlzGetUnitAbility takes unit whichUnit, integer abilId returns ability native BlzGetUnitAbilityByIndex takes unit whichUnit, integer index returns ability +native BlzGetAbilityId takes ability whichAbility returns integer native BlzDisplayChatMessage takes player whichPlayer, integer recipient, string message returns nothing native BlzPauseUnitEx takes unit whichUnit, boolean flag returns nothing // native BlzFourCC2S takes integer value returns string @@ -4195,3 +4205,20 @@ native BlzCreateDestructableZWithSkin takes integer objectid, real native BlzCreateDeadDestructableWithSkin takes integer objectid, real x, real y, real face, real scale, integer variation, integer skinId returns destructable native BlzCreateDeadDestructableZWithSkin takes integer objectid, real x, real y, real z, real face, real scale, integer variation, integer skinId returns destructable native BlzGetPlayerTownHallCount takes player whichPlayer returns integer + +native BlzQueueImmediateOrderById takes unit whichUnit, integer order returns boolean +native BlzQueuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean +native BlzQueueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean +native BlzQueueInstantPointOrderById takes unit whichUnit, integer order, real x, real y, widget instantTargetWidget returns boolean +native BlzQueueInstantTargetOrderById takes unit whichUnit, integer order, widget targetWidget, widget instantTargetWidget returns boolean +native BlzQueueBuildOrderById takes unit whichPeon, integer unitId, real x, real y returns boolean +native BlzQueueNeutralImmediateOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId returns boolean +native BlzQueueNeutralPointOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, real x, real y returns boolean +native BlzQueueNeutralTargetOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, widget target returns boolean + +// returns the number of orders the unit currently has queued up +native BlzGetUnitOrderCount takes unit whichUnit returns integer +// clears either all orders or only queued up orders +native BlzUnitClearOrders takes unit whichUnit, boolean onlyQueued returns nothing +// stops the current order and optionally clears the queue +native BlzUnitForceStopOrder takes unit whichUnit, boolean clearQueue returns nothing \ No newline at end of file diff --git a/Wurstpack/wurstscript/common.j b/Wurstpack/wurstscript/common.j index cc79bd5d8..7dc4ccb79 100644 --- a/Wurstpack/wurstscript/common.j +++ b/Wurstpack/wurstscript/common.j @@ -537,6 +537,14 @@ globals constant volumegroup SOUND_VOLUMEGROUP_MUSIC = ConvertVolumeGroup(5) constant volumegroup SOUND_VOLUMEGROUP_AMBIENTSOUNDS = ConvertVolumeGroup(6) constant volumegroup SOUND_VOLUMEGROUP_FIRE = ConvertVolumeGroup(7) +//Cinematic Sound Constants + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_GENERAL = ConvertVolumeGroup(8) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_AMBIENT = ConvertVolumeGroup(9) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_MUSIC = ConvertVolumeGroup(10) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_DIALOGUE = ConvertVolumeGroup(11) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_1 = ConvertVolumeGroup(12) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_2 = ConvertVolumeGroup(13) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_3 = ConvertVolumeGroup(14) //=================================================== @@ -3712,6 +3720,7 @@ native SetSoundVelocity takes sound soundHandle, real x, real y, rea native AttachSoundToUnit takes sound soundHandle, unit whichUnit returns nothing native StartSound takes sound soundHandle returns nothing +native StartSoundEx takes sound soundHandle, boolean fadeIn returns nothing native StopSound takes sound soundHandle, boolean killWhenDone, boolean fadeOut returns nothing native KillSoundWhenDone takes sound soundHandle returns nothing @@ -4095,6 +4104,7 @@ native BlzSetSpecialEffectMatrixScale takes effect whichEffect, rea native BlzResetSpecialEffectMatrix takes effect whichEffect returns nothing native BlzGetUnitAbility takes unit whichUnit, integer abilId returns ability native BlzGetUnitAbilityByIndex takes unit whichUnit, integer index returns ability +native BlzGetAbilityId takes ability whichAbility returns integer native BlzDisplayChatMessage takes player whichPlayer, integer recipient, string message returns nothing native BlzPauseUnitEx takes unit whichUnit, boolean flag returns nothing // native BlzFourCC2S takes integer value returns string @@ -4195,3 +4205,20 @@ native BlzCreateDestructableZWithSkin takes integer objectid, real native BlzCreateDeadDestructableWithSkin takes integer objectid, real x, real y, real face, real scale, integer variation, integer skinId returns destructable native BlzCreateDeadDestructableZWithSkin takes integer objectid, real x, real y, real z, real face, real scale, integer variation, integer skinId returns destructable native BlzGetPlayerTownHallCount takes player whichPlayer returns integer + +native BlzQueueImmediateOrderById takes unit whichUnit, integer order returns boolean +native BlzQueuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean +native BlzQueueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean +native BlzQueueInstantPointOrderById takes unit whichUnit, integer order, real x, real y, widget instantTargetWidget returns boolean +native BlzQueueInstantTargetOrderById takes unit whichUnit, integer order, widget targetWidget, widget instantTargetWidget returns boolean +native BlzQueueBuildOrderById takes unit whichPeon, integer unitId, real x, real y returns boolean +native BlzQueueNeutralImmediateOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId returns boolean +native BlzQueueNeutralPointOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, real x, real y returns boolean +native BlzQueueNeutralTargetOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, widget target returns boolean + +// returns the number of orders the unit currently has queued up +native BlzGetUnitOrderCount takes unit whichUnit returns integer +// clears either all orders or only queued up orders +native BlzUnitClearOrders takes unit whichUnit, boolean onlyQueued returns nothing +// stops the current order and optionally clears the queue +native BlzUnitForceStopOrder takes unit whichUnit, boolean clearQueue returns nothing \ No newline at end of file diff --git a/de.peeeq.wurstscript/src/main/resources/common.j b/de.peeeq.wurstscript/src/main/resources/common.j index cc79bd5d8..7dc4ccb79 100644 --- a/de.peeeq.wurstscript/src/main/resources/common.j +++ b/de.peeeq.wurstscript/src/main/resources/common.j @@ -537,6 +537,14 @@ globals constant volumegroup SOUND_VOLUMEGROUP_MUSIC = ConvertVolumeGroup(5) constant volumegroup SOUND_VOLUMEGROUP_AMBIENTSOUNDS = ConvertVolumeGroup(6) constant volumegroup SOUND_VOLUMEGROUP_FIRE = ConvertVolumeGroup(7) +//Cinematic Sound Constants + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_GENERAL = ConvertVolumeGroup(8) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_AMBIENT = ConvertVolumeGroup(9) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_MUSIC = ConvertVolumeGroup(10) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_DIALOGUE = ConvertVolumeGroup(11) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_1 = ConvertVolumeGroup(12) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_2 = ConvertVolumeGroup(13) + constant volumegroup SOUND_VOLUMEGROUP_CINEMATIC_SOUND_EFFECTS_3 = ConvertVolumeGroup(14) //=================================================== @@ -3712,6 +3720,7 @@ native SetSoundVelocity takes sound soundHandle, real x, real y, rea native AttachSoundToUnit takes sound soundHandle, unit whichUnit returns nothing native StartSound takes sound soundHandle returns nothing +native StartSoundEx takes sound soundHandle, boolean fadeIn returns nothing native StopSound takes sound soundHandle, boolean killWhenDone, boolean fadeOut returns nothing native KillSoundWhenDone takes sound soundHandle returns nothing @@ -4095,6 +4104,7 @@ native BlzSetSpecialEffectMatrixScale takes effect whichEffect, rea native BlzResetSpecialEffectMatrix takes effect whichEffect returns nothing native BlzGetUnitAbility takes unit whichUnit, integer abilId returns ability native BlzGetUnitAbilityByIndex takes unit whichUnit, integer index returns ability +native BlzGetAbilityId takes ability whichAbility returns integer native BlzDisplayChatMessage takes player whichPlayer, integer recipient, string message returns nothing native BlzPauseUnitEx takes unit whichUnit, boolean flag returns nothing // native BlzFourCC2S takes integer value returns string @@ -4195,3 +4205,20 @@ native BlzCreateDestructableZWithSkin takes integer objectid, real native BlzCreateDeadDestructableWithSkin takes integer objectid, real x, real y, real face, real scale, integer variation, integer skinId returns destructable native BlzCreateDeadDestructableZWithSkin takes integer objectid, real x, real y, real z, real face, real scale, integer variation, integer skinId returns destructable native BlzGetPlayerTownHallCount takes player whichPlayer returns integer + +native BlzQueueImmediateOrderById takes unit whichUnit, integer order returns boolean +native BlzQueuePointOrderById takes unit whichUnit, integer order, real x, real y returns boolean +native BlzQueueTargetOrderById takes unit whichUnit, integer order, widget targetWidget returns boolean +native BlzQueueInstantPointOrderById takes unit whichUnit, integer order, real x, real y, widget instantTargetWidget returns boolean +native BlzQueueInstantTargetOrderById takes unit whichUnit, integer order, widget targetWidget, widget instantTargetWidget returns boolean +native BlzQueueBuildOrderById takes unit whichPeon, integer unitId, real x, real y returns boolean +native BlzQueueNeutralImmediateOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId returns boolean +native BlzQueueNeutralPointOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, real x, real y returns boolean +native BlzQueueNeutralTargetOrderById takes player forWhichPlayer,unit neutralStructure, integer unitId, widget target returns boolean + +// returns the number of orders the unit currently has queued up +native BlzGetUnitOrderCount takes unit whichUnit returns integer +// clears either all orders or only queued up orders +native BlzUnitClearOrders takes unit whichUnit, boolean onlyQueued returns nothing +// stops the current order and optionally clears the queue +native BlzUnitForceStopOrder takes unit whichUnit, boolean clearQueue returns nothing \ No newline at end of file From 68e0abc2f2c1913aabad4cc15e3623778db9e022 Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 22 Aug 2022 01:14:11 +0200 Subject: [PATCH 36/74] Refactor Object Mod Handling to use wc3libs (#1066) Fixes format version issues with Patch 1.33 --- de.peeeq.wurstscript/build.gradle | 2 +- .../interpreter/CompiletimeNatives.java | 109 ++++---- .../interpreter/ProgramStateIO.java | 233 ++++++++++++++---- .../objectreader/BinaryDataInputStream.java | 115 --------- .../objectreader/BinaryDataOutputStream.java | 75 ------ .../objectreader/ObjectDefinition.java | 107 -------- .../wurstio/objectreader/ObjectFile.java | 131 ---------- .../objectreader/ObjectModification.java | 166 ------------- .../objectreader/ObjectModificationInt.java | 28 --- .../objectreader/ObjectModificationReal.java | 27 -- .../ObjectModificationString.java | 37 --- .../ObjectModificationUnreal.java | 31 --- .../wurstio/objectreader/ObjectTable.java | 78 ------ .../wurstio/objectreader/VariableTypes.java | 13 - .../wurstio/objectreader/package-info.java | 3 - .../interpreter/VariableType.java | 1 + .../objectreader/BinaryDataStreamsTest.java | 107 -------- .../wurstscript/objectreader/TestW3u.java | 47 ---- 18 files changed, 250 insertions(+), 1060 deletions(-) delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/BinaryDataInputStream.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/BinaryDataOutputStream.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectDefinition.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectFile.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModification.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationInt.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationReal.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationString.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationUnreal.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectTable.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/VariableTypes.java delete mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/package-info.java delete mode 100644 de.peeeq.wurstscript/src/test/java/tests/wurstscript/objectreader/BinaryDataStreamsTest.java delete mode 100644 de.peeeq.wurstscript/src/test/java/tests/wurstscript/objectreader/TestW3u.java diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index a90031928..6a4660d5a 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -106,7 +106,7 @@ dependencies { implementation group: 'com.github.inwc3', name: 'jmpq3', version: 'b4ef7121a4' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:cb9921f97d' + implementation 'com.github.inwc3:wc3libs:a6bbe12d03' // The setup tool for wurst.build handling implementation 'com.github.wurstscript:wurstsetup:4c65824b40' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/CompiletimeNatives.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/CompiletimeNatives.java index 937c4af6a..d21c83cb3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/CompiletimeNatives.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/CompiletimeNatives.java @@ -9,11 +9,19 @@ import de.peeeq.wurstscript.intermediatelang.interpreter.NativesProvider; import de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState; import de.peeeq.wurstscript.intermediatelang.interpreter.VariableType; +import net.moonlightflower.wc3libs.bin.ObjMod; +import net.moonlightflower.wc3libs.bin.app.objMod.*; +import net.moonlightflower.wc3libs.dataTypes.DataType; +import net.moonlightflower.wc3libs.dataTypes.app.War3Int; +import net.moonlightflower.wc3libs.dataTypes.app.War3Real; +import net.moonlightflower.wc3libs.dataTypes.app.War3String; +import net.moonlightflower.wc3libs.misc.MetaFieldId; +import net.moonlightflower.wc3libs.misc.ObjId; -import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; -import java.time.temporal.TemporalUnit; + +import static de.peeeq.wurstscript.intermediatelang.interpreter.VariableType.*; @SuppressWarnings("ucd") // ignore unused code detector warnings, because this class uses reflection public class CompiletimeNatives extends ReflectionBasedNativeProvider implements NativesProvider { @@ -33,103 +41,120 @@ private ILconstTuple makeKey(String key) { } public ILconstTuple createObjectDefinition(ILconstString fileType, ILconstInt newUnitId, ILconstInt deriveFrom) { - ObjectFile unitStore = globalState.getDataStore(fileType.getVal()); - ObjectTable modifiedTable = unitStore.getModifiedTable(); + ObjMod dataStore = globalState.getDataStore(fileType.getVal()); + String objIdString = ObjectHelper.objectIdIntToString(newUnitId.getVal()); - if (modifiedTable.getObjectDefinitions().containsKey(newUnitId.getVal())) { - globalState.compilationError("Object definition with id " + ObjectHelper.objectIdIntToString(newUnitId.getVal()) + " already exists."); + if (dataStore.getObjs().containsKey(ObjId.valueOf(objIdString))) { + globalState.compilationError("Object definition with id " + objIdString + " already exists."); } - ObjectDefinition objDef = new ObjectDefinition(modifiedTable, deriveFrom.getVal(), newUnitId.getVal()); + ObjMod.Obj objDef = newDefFromFiletype(dataStore, deriveFrom.getVal(), newUnitId.getVal()); // mark object with special field - objDef.add(new ObjectModificationInt(objDef, "wurs", 0, 0, ProgramState.GENERATED_BY_WURST)); + ObjMod.Obj.Mod mod = new ObjMod.Obj.Mod(MetaFieldId.valueOf("wurs"), ObjMod.ValType.INT, War3Int.valueOf(ProgramState.GENERATED_BY_WURST)); + objDef.addMod(mod); String key = globalState.addObjectDefinition(objDef); - modifiedTable.add(objDef); + return makeKey(key); } + private W3U.Obj newDefFromFiletype(ObjMod dataStore, int base, int newId) { + ObjId baseIdS = ObjId.valueOf(ObjectHelper.objectIdIntToString(base)); + ObjId newIdS = ObjId.valueOf(ObjectHelper.objectIdIntToString(newId)); + return dataStore.addObj(newIdS, baseIdS); + } + public void ObjectDefinition_setInt(ILconstTuple unitType, ILconstString modification, ILconstInt value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.INTEGER, value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.INT, War3Int.valueOf(value.getVal())); } public void ObjectDefinition_setString(ILconstTuple unitType, ILconstString modification, ILconstString value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.STRING, value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.STRING, War3String.valueOf(value.getVal())); } public void ObjectDefinition_setReal(ILconstTuple unitType, ILconstString modification, ILconstReal value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.REAL, value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.REAL, War3Real.valueOf(value.getVal())); } public void ObjectDefinition_setUnreal(ILconstTuple unitType, ILconstString modification, ILconstReal value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.UNREAL, value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.UNREAL, War3Real.valueOf(value.getVal())); } public void ObjectDefinition_setLvlInt(ILconstTuple unitType, ILconstString modification, ILconstInt level, ILconstInt value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.INTEGER, level.getVal(), value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.INT, level.getVal(), War3Int.valueOf(value.getVal())); } public void ObjectDefinition_setLvlString(ILconstTuple unitType, ILconstString modification, ILconstInt level, ILconstString value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.STRING, level.getVal(), value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.STRING, level.getVal(), War3String.valueOf(value.getVal())); } public void ObjectDefinition_setLvlReal(ILconstTuple unitType, ILconstString modification, ILconstInt level, ILconstReal value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.REAL, level.getVal(), value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.REAL, level.getVal(), War3Real.valueOf(value.getVal())); } public void ObjectDefinition_setLvlUnreal(ILconstTuple unitType, ILconstString modification, ILconstInt level, ILconstReal value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.UNREAL, level.getVal(), value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.UNREAL, level.getVal(), War3Real.valueOf(value.getVal())); } public void ObjectDefinition_setLvlDataInt(ILconstTuple unitType, ILconstString modification, ILconstInt level, ILconstInt dataPointer, ILconstInt value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.INTEGER, level.getVal(), dataPointer.getVal(), value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.INT, level.getVal(), dataPointer.getVal(), War3Int.valueOf(value.getVal())); } public void ObjectDefinition_setLvlDataString(ILconstTuple unitType, ILconstString modification, ILconstInt level, ILconstInt dataPointer, ILconstString value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.STRING, level.getVal(), dataPointer.getVal(), value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.STRING, level.getVal(), dataPointer.getVal(), War3String.valueOf(value.getVal())); } public void ObjectDefinition_setLvlDataReal(ILconstTuple unitType, ILconstString modification, ILconstInt level, ILconstInt dataPointer, ILconstReal value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.REAL, level.getVal(), dataPointer.getVal(), value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.REAL, level.getVal(), dataPointer.getVal(), War3Real.valueOf(value.getVal())); } public void ObjectDefinition_setLvlDataUnreal(ILconstTuple unitType, ILconstString modification, ILconstInt level, ILconstInt dataPointer, ILconstReal value) { - ObjectDefinition od = globalState.getObjectDefinition(getKey(unitType)); - modifyObject(od, modification, VariableType.UNREAL, level.getVal(), dataPointer.getVal(), value.getVal()); + ObjMod.Obj od = globalState.getObjectDefinition(getKey(unitType)); + modifyObject(od, modification, ObjMod.ValType.UNREAL, level.getVal(), dataPointer.getVal(), War3Real.valueOf(value.getVal())); } - private void modifyObject(ObjectDefinition od, ILconstString modification, VariableType variableType, T value) { + private void modifyObject(ObjMod.Obj od, ILconstString modification, ObjMod.ValType variableType, DataType value) { modifyObject(od, modification, variableType, 1, 0, value); } - private void modifyObject(ObjectDefinition od, ILconstString modification, VariableType variableType, int level, T value) { + private void modifyObject(ObjMod.Obj od, ILconstString modification, ObjMod.ValType variableType, int level, DataType value) { modifyObject(od, modification, variableType, level, 0, value); } - private void modifyObject(ObjectDefinition od, ILconstString modification, VariableType variableType, int level, int datapointer, T value) { + private void modifyObject(ObjMod.Obj od, ILconstString modification, ObjMod.ValType variableType, int level, int datapointer, DataType value) { String modificationId = modification.getVal(); - for (ObjectModification m : od.getModifications()) { - if (m.getModificationId().equals(modificationId) && m.getLevelCount() == level) { - ObjectModification m2 = m.castTo(value); - m2.setData(value); - return; + ObjMod.Obj.Mod foundMod = null; + for (ObjMod.Obj.Mod m : od.getMods()) { + if (m instanceof ObjMod.Obj.ExtendedMod) { + ObjMod.Obj.ExtendedMod extMod = (ObjMod.Obj.ExtendedMod) m; + if (extMod.getId().getVal().equals(modificationId) && extMod.getLevel() == level) { + // How to set data??? + foundMod = extMod; + break; + } } + } + // create new modification: - od.add(ObjectModification.create(od, modificationId, variableType, level, datapointer, value)); + if (foundMod != null) { + od.remove(foundMod); + } + od.addMod(new ObjMod.Obj.ExtendedMod(MetaFieldId.valueOf(modificationId), variableType, value, level, datapointer)); + } private String getKey(ILconstTuple unitType) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java index 568a2aa9b..c7d50a999 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java @@ -9,14 +9,20 @@ import de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState; import de.peeeq.wurstscript.jassIm.ImProg; import de.peeeq.wurstscript.jassIm.ImStmt; +import de.peeeq.wurstscript.utils.Utils; +import net.moonlightflower.wc3libs.bin.ObjMod; +import net.moonlightflower.wc3libs.bin.Wc3BinInputStream; +import net.moonlightflower.wc3libs.bin.Wc3BinOutputStream; +import net.moonlightflower.wc3libs.bin.app.objMod.*; +import net.moonlightflower.wc3libs.dataTypes.app.War3Int; +import net.moonlightflower.wc3libs.dataTypes.app.War3String; import net.moonlightflower.wc3libs.txt.WTS; import org.eclipse.jdt.annotation.Nullable; +import org.jetbrains.annotations.NotNull; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; +import java.io.*; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -24,10 +30,11 @@ public class ProgramStateIO extends ProgramState { private static final int GENERATED_BY_WURST = 42; private @Nullable ImStmt lastStatement; - private @Nullable final MpqEditor mpqEditor; - private final Map dataStoreMap = Maps.newLinkedHashMap(); + private @Nullable + final MpqEditor mpqEditor; + private final Map> dataStoreMap = Maps.newLinkedHashMap(); private int id = 0; - private final Map objDefinitions = Maps.newLinkedHashMap(); + private final Map objDefinitions = Maps.newLinkedHashMap(); private PrintStream outStream = System.err; private @Nullable WTS trigStrings = null; private final Optional mapFile; @@ -75,18 +82,20 @@ private WTS loadTrigStrings() { return res; } - ObjectFile getDataStore(String fileExtension) { + ObjMod getDataStore(String fileExtension) { return getDataStore(ObjectFileType.fromExt(fileExtension)); } - private ObjectFile getDataStore(ObjectFileType filetype) throws Error { - ObjectFile dataStore = dataStoreMap.get(filetype); + + private ObjMod getDataStore(ObjectFileType filetype) throws Error { + ObjMod dataStore = dataStoreMap.get(filetype); if (dataStore != null) { return dataStore; } if (mpqEditor == null) { // without a map: create empty object file - dataStore = new ObjectFile(filetype); + dataStore = filetypeToObjmod(filetype); + dataStore.setFormat(ObjMod.EncodingFormat.AUTO); dataStoreMap.put(filetype, dataStore); return dataStore; } @@ -97,16 +106,44 @@ private ObjectFile getDataStore(ObjectFileType filetype) throws Error { try { if (mpqEditor.hasFile(fileName)) { byte[] w3_ = mpqEditor.extractFile(fileName); - dataStore = new ObjectFile(w3_, filetype); - replaceTrigStrings(dataStore); + try (Wc3BinInputStream in = new Wc3BinInputStream(new ByteArrayInputStream(w3_))) { + switch (filetype) { + case UNITS: + dataStore = new W3U(in); + break; + case ITEMS: + dataStore = new W3T(in); + break; + case DESTRUCTABLES: + dataStore = new W3B(in); + break; + case DOODADS: + dataStore = new W3D(in); + break; + case ABILITIES: + dataStore = new W3A(in); + break; + case BUFFS: + dataStore = new W3H(in); + break; + case UPGRADES: + dataStore = new W3Q(in); + break; + } + + replaceTrigStrings(dataStore); + } + } else { - dataStore = new ObjectFile(filetype); + dataStore = filetypeToObjmod(filetype); + dataStore.setFormat(ObjMod.EncodingFormat.AUTO); } } catch (IOException | InterruptedException e) { // TODO maybe tell the user, that something has gone wrong WLogger.info("Could not extract file: " + fileName); WLogger.info(e); - dataStore = new ObjectFile(filetype); + dataStore = filetypeToObjmod(filetype); + dataStore.setFormat(ObjMod.EncodingFormat.AUTO); } dataStoreMap.put(filetype, dataStore); @@ -120,21 +157,42 @@ private ObjectFile getDataStore(ObjectFileType filetype) throws Error { return dataStore; } - private void replaceTrigStrings(ObjectFile dataStore) { - replaceTrigStringsInTable(dataStore.getOrigTable()); - replaceTrigStringsInTable(dataStore.getModifiedTable()); + @NotNull + private ObjMod filetypeToObjmod(ObjectFileType filetype) { + switch (filetype) { + case UNITS: + return new W3U(); + case ITEMS: + return new W3T(); + case DESTRUCTABLES: + return new W3B(); + case DOODADS: + return new W3D(); + case ABILITIES: + return new W3A(); + case BUFFS: + return new W3H(); + case UPGRADES: + return new W3Q(); + } + return null; + } + + private void replaceTrigStrings(ObjMod dataStore) { + replaceTrigStringsInTable(dataStore.getOrigObjs()); + replaceTrigStringsInTable(dataStore.getCustomObjs()); } - private void replaceTrigStringsInTable(ObjectTable modifiedTable) { - for (ObjectDefinition od : modifiedTable.getObjectDefinitions().values()) { - for (ObjectModification mod : od.getModifications()) { - if (mod instanceof ObjectModificationString) { - ObjectModificationString modS = (ObjectModificationString) mod; - if (modS.getData().startsWith("TRIGSTR_")) { + private void replaceTrigStringsInTable(List modifiedTable) { + for (ObjMod.Obj od : modifiedTable) { + for (ObjMod.Obj.Mod mod : od.getMods()) { + if (mod.getValType() == ObjMod.ValType.STRING && mod.getVal() instanceof War3String) { + War3String stringVal = (War3String) mod.getVal(); + if (stringVal.getVal().startsWith("TRIGSTR_")) { try { - int id = Integer.parseInt(modS.getData().substring("TRIGSTR_".length()), 10); + int id = Integer.parseInt(stringVal.getVal().substring("TRIGSTR_".length()), 10); String newVal = getTrigString(id); - modS.setData(newVal); + stringVal.set_val(newVal); } catch (NumberFormatException e) { // ignore } @@ -144,15 +202,15 @@ private void replaceTrigStringsInTable(ObjectTable modifiedTable) { } } - private void deleteWurstObjects(ObjectFile unitStore) { - Iterator> it = unitStore.getModifiedTable().getObjectDefinitions().entrySet().iterator(); - while (it.hasNext()) { - ObjectDefinition od = it.next().getValue(); - for (ObjectModification om : od.getModifications()) { - if (om.getModificationId().equals("wurs") && om instanceof ObjectModificationInt) { - ObjectModificationInt om2 = (ObjectModificationInt) om; - if (om2.getData() == GENERATED_BY_WURST) { - it.remove(); + private void deleteWurstObjects(ObjMod unitStore) { + Iterator iterator = unitStore.getCustomObjs().iterator(); + while (iterator.hasNext()) { + ObjMod.Obj next = iterator.next(); + for (ObjMod.Obj.Mod om : next.getMods()) { + if (om.getId().getVal().equals("wurs") && om.getVal() instanceof War3Int) { + War3Int val = (War3Int) om.getVal(); + if (val.getVal() == GENERATED_BY_WURST) { + iterator.remove(); break; } } @@ -161,14 +219,14 @@ private void deleteWurstObjects(ObjectFile unitStore) { } - String addObjectDefinition(ObjectDefinition objDef) { + String addObjectDefinition(ObjMod.Obj objDef) { id++; String key = "obj" + id; objDefinitions.put(key, objDef); return key; } - ObjectDefinition getObjectDefinition(String key) { + ObjMod.Obj getObjectDefinition(String key) { return objDefinitions.get(key); } @@ -178,8 +236,8 @@ public void writeBack(boolean inject) { for (ObjectFileType fileType : ObjectFileType.values()) { WLogger.info("Writing back " + fileType); - ObjectFile dataStore = getDataStore(fileType); - if (!dataStore.isEmpty()) { + ObjMod dataStore = getDataStore(fileType); + if (!dataStore.getObjsList().isEmpty()) { WLogger.info("Writing back filetype " + fileType); writebackObjectFile(dataStore, fileType, inject); } else { @@ -191,15 +249,15 @@ public void writeBack(boolean inject) { private void writeW3oFile() { Optional objFile = getObjectEditingOutputFolder().map(fo -> new File(fo, "wurstCreatedObjects.w3o")); - try (BinaryDataOutputStream objFileStream = new BinaryDataOutputStream(objFile.get(), true)) { - objFileStream.writeInt(1); // version + try (Wc3BinOutputStream objFileStream = new Wc3BinOutputStream(objFile.get())) { + objFileStream.writeInt32(1); // version for (ObjectFileType fileType : ObjectFileType.values()) { - ObjectFile dataStore = getDataStore(fileType); - if (!dataStore.isEmpty()) { - objFileStream.writeInt(1); // exists - dataStore.writeTo(objFileStream); + ObjMod dataStore = getDataStore(fileType); + if (!dataStore.getObjs().isEmpty()) { + objFileStream.writeInt32(1); // exists + dataStore.write(objFileStream, ObjMod.EncodingFormat.AS_DEFINED); } else { - objFileStream.writeInt(0); // does not exist + objFileStream.writeInt32(0); // does not exist } } } catch (Error | IOException e) { @@ -207,15 +265,20 @@ private void writeW3oFile() { } } - private void writebackObjectFile(ObjectFile dataStore, ObjectFileType fileType, boolean inject) throws Error { - try { + private void writebackObjectFile(ObjMod dataStore, ObjectFileType fileType, boolean inject) throws Error { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (Wc3BinOutputStream out = new Wc3BinOutputStream(baos)) { Optional folder = getObjectEditingOutputFolder(); - byte[] w3u = dataStore.writeToByteArray(); + dataStore.write(out, ObjMod.EncodingFormat.AS_DEFINED); + + out.close(); + + byte[] w3_ = baos.toByteArray(); - // wurst exported objects + // TODO wurst exported objects FileUtils.write( - dataStore.exportToWurst(fileType), + exportToWurst(dataStore, fileType), new File(folder.get(), "WurstExportedObjects_" + fileType.getExt() + ".wurst.txt")); if (inject) { @@ -224,7 +287,7 @@ private void writebackObjectFile(ObjectFile dataStore, ObjectFileType fileType, } String filenameInMpq = "war3map." + fileType.getExt(); mpqEditor.deleteFile(filenameInMpq); - mpqEditor.insertFile(filenameInMpq, w3u); + mpqEditor.insertFile(filenameInMpq, w3_); } } catch (Exception e) { WLogger.severe(e); @@ -233,6 +296,72 @@ private void writebackObjectFile(ObjectFile dataStore, ObjectFileType fileType, } + public String exportToWurst(ObjMod dataStore, ObjectFileType fileType) throws IOException { + + Appendable out = new StringBuilder(); + out.append("package WurstExportedObjects_").append(fileType.getExt()).append("\n"); + out.append("import ObjEditingNatives\n\n"); + + out.append("// Modified Table (contains all custom objects)\n\n"); + exportToWurst(dataStore.getCustomObjs(), fileType, out); + + out.append("// Original Table (contains all modified default objects)\n" + + "// Wurst does not support modifying default objects\n" + + "// but you can copy these functions and replace 'xxxx' with a new, custom id.\n\n"); + exportToWurst(dataStore.getOrigObjs(), fileType, out); + + return out.toString(); + } + + public void exportToWurst(List customObjs, ObjectFileType fileType, Appendable out) throws IOException { + for (ObjMod.Obj obj : customObjs) { + String oldId = obj.getBaseId().getVal(); + String newId = (obj.getNewId() != null ? obj.getNewId().getVal() : "xxxx"); + out.append("@compiletime function create_").append(fileType.getExt()).append("_").append(newId) + .append("()\n"); + out.append(" let def = createObjectDefinition(\"").append(fileType.getExt()).append("\", '"); + out.append(newId); + out.append("', '"); + out.append(oldId); + out.append("')\n"); + for (ObjMod.Obj.Mod m : obj.getMods()) { + if (fileType.usesLevels() && m instanceof ObjMod.Obj.ExtendedMod) { + ObjMod.Obj.ExtendedMod extendedMod = (ObjMod.Obj.ExtendedMod) m; + out.append("\t..setLvlData").append(valTypeToFuncPostfix(extendedMod.getValType())).append("(\""); + out.append(m.toString()); + out.append("\", ") + .append(String.valueOf(extendedMod.getLevel())) + .append(", ") + .append(String.valueOf(extendedMod.getDataPt())).append(", ") + .append((extendedMod.getValType() == ObjMod.ValType.STRING) ? + Utils.escapeString(extendedMod.getVal().toString()) : + extendedMod.getVal().toString()) + .append(")\n"); + } else { + out.append("\t..set").append(valTypeToFuncPostfix(m.getValType())).append("(\""); + out.append(m.toString()); + out.append("\", ").append(m.getVal().toString()).append(")\n"); + } + } + out.append("\n\n"); + } + } + + private String valTypeToFuncPostfix(ObjMod.ValType valType) { + switch (valType) { + case INT: + return "Int"; + case REAL: + return "Real"; + case UNREAL: + return "Unreal"; + case STRING: + return "String"; + } + return "Int"; + } + + private Optional getObjectEditingOutputFolder() { if (!mapFile.isPresent()) { File folder = new File("_build", "objectEditingOutput"); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/BinaryDataInputStream.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/BinaryDataInputStream.java deleted file mode 100644 index e66841c5a..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/BinaryDataInputStream.java +++ /dev/null @@ -1,115 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import com.google.common.base.Charsets; - -import java.io.*; -import java.nio.charset.Charset; -import java.nio.file.Files; - -public class BinaryDataInputStream implements Closeable { - - private BufferedInputStream in; - private boolean littleEndian; - - @SuppressWarnings("resource") // will be closed in close method - public BinaryDataInputStream(File file, boolean littleEndian) throws IOException { - this(Files.newInputStream(file.toPath()), littleEndian); - } - - - public BinaryDataInputStream(InputStream in, boolean littleEndian) { - this.in = new BufferedInputStream(in); - this.littleEndian = littleEndian; - } - - public int readInt(boolean littleEndian) throws IOException { - byte[] data = readBytes(4); - int result = 0; - if (littleEndian) { - for (int i = 3; i > 0; i--) { - result += interpret2compl(data[i]); - result <<= 8; - } - result += interpret2compl(data[0]); - } else { - for (int i = 0; i < 3; i++) { - result += data[i]; - result <<= 8; - } - result += data[3]; - } - return result; - - } - - public int readInt() throws IOException { - return readInt(littleEndian); - } - - public int readIntReverse() throws IOException { - return readInt(!littleEndian); - } - - private int interpret2compl(byte b) { - if (b >= 0) { - return b; - } - return b + 256; - } - - - private byte[] readBytes(int size) throws IOException { - byte[] data = new byte[size]; - for (int i = 0; i < size; i++) { - data[i] = readByte(); - } - return data; - } - - private byte readByte() throws IOException { - int d = in.read(); - if (d < 0) { - throw new IOException("EOF reached"); - } else { - return (byte) d; - } - } - - public String readString(int length) throws IOException { - byte[] data = readBytes(length); - return new String(data, Charsets.UTF_8); - } - - public float readFloat() throws IOException { - int asInt = readInt(); - return Float.intBitsToFloat(asInt); - } - - public String readNullTerminatedString(Charset charset) throws IOException { - byte[] buffer = new byte[128]; - int pos = 0; - while (true) { - byte b = readByte(); - if (b == 0) { - return new String(buffer, 0, pos, charset); - } - if (pos >= buffer.length) { - byte[] newBuffer = new byte[buffer.length * 2]; - System.arraycopy(buffer, 0, newBuffer, 0, pos); - buffer = newBuffer; - } - buffer[pos] = b; - pos++; - } - } - - - public void close() { - try { - in.close(); - } catch (IOException e) { - throw new Error(e); - } - } - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/BinaryDataOutputStream.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/BinaryDataOutputStream.java deleted file mode 100644 index b86bba481..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/BinaryDataOutputStream.java +++ /dev/null @@ -1,75 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import java.io.*; -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.nio.file.Files; - -public class BinaryDataOutputStream implements Closeable { - - private BufferedOutputStream out; - private boolean littleEndian; - - @SuppressWarnings("resource") - public BinaryDataOutputStream(File file, boolean littleEndian) throws IOException { - this(Files.newOutputStream(file.toPath()), littleEndian); - } - - - public BinaryDataOutputStream(OutputStream out, boolean littleEndian) { - this.out = new BufferedOutputStream(out); - this.littleEndian = littleEndian; - } - - - public void flush() throws IOException { - out.flush(); - } - - public void writeInt(int i, boolean littleEndian) throws IOException { -// byte[] data = new byte[4]; -// data[3] = (byte) (i >> 24); -// data[2] = (byte) (i >> 16); -// data[1] = (byte) (i >> 8); -// data[0] = (byte) (i >> 0); - - byte[] data = ByteBuffer.allocate(4).putInt(i).array(); - for (int j = 0; j < 4; j++) { - byte b = data[littleEndian ? (3 - j) : j]; - out.write(b); - } - } - - public void writeInt(int i) throws IOException { - writeInt(i, littleEndian); - } - - public void writeIntReverse(int i) throws IOException { - writeInt(i, !littleEndian); - } - - public void writeString(String s, int len) throws IOException { - byte[] bytes = new byte[len]; - byte[] s_bytes = s.getBytes(); - System.arraycopy(s_bytes, 0, bytes, 0, Math.min(len, s_bytes.length)); - out.write(bytes); - } - - public void writeStringNullTerminated(String s, Charset charset) throws IOException { - out.write(s.getBytes(charset)); - out.write(0); - } - - public void writeFloat(float f) throws IOException { - int asInt = Float.floatToIntBits(f); - writeInt(asInt); - } - - - @Override - public void close() throws IOException { - out.close(); - } - - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectDefinition.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectDefinition.java deleted file mode 100644 index f6421da5f..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectDefinition.java +++ /dev/null @@ -1,107 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import com.google.common.collect.Lists; - -import java.io.IOException; -import java.util.List; - -public class ObjectDefinition { - - private int origObjectId; - private int newObjectId; - private List> modifications = Lists.newArrayList(); - private final ObjectTable parent; - - public ObjectDefinition(ObjectTable parent, int origObjectId, int newObjectId) { - this.origObjectId = origObjectId; - this.newObjectId = newObjectId; - this.parent = parent; - } - - public void add(ObjectModification mod) { - modifications.add(mod); - } - - static ObjectDefinition readFromStream(BinaryDataInputStream in, ObjectTable parent) throws IOException { - ObjectFileType fileType = parent.getFileType(); - int origObjectId = in.readIntReverse(); - int newObjectId = in.readIntReverse(); - ObjectDefinition def = new ObjectDefinition(parent, origObjectId, newObjectId); - int numberOfModifications = in.readInt(); - for (int i = 0; i < numberOfModifications; i++) { - ObjectModification mod = ObjectModification.readFromStream(in, fileType, def); - def.add(mod); - } - return def; - } - - public void writeToStream(BinaryDataOutputStream out, ObjectFileType fileType) throws IOException { - out.writeIntReverse(origObjectId); - out.writeIntReverse(newObjectId); - - // write number of modifications. - out.writeInt(modifications.size()); - for (ObjectModification m : modifications) { - m.writeToStream(out, fileType); - } - - } - - public int getOrigObjectId() { - return origObjectId; - } - - public int getNewObjectId() { - return newObjectId; - } - - public List> getModifications() { - return modifications; - } - - public void prettyPrint(StringBuilder sb) { - - - for (ObjectModification m : modifications) { - sb.append(" ").append(m.toString()).append(";\n"); - } - - sb.append("]\n\n"); - } - - public void exportToWurst(Appendable out) throws IOException { - String oldId = ObjectHelper.objectIdIntToString(origObjectId); - String newId = ObjectHelper.objectIdIntToString(newObjectId); - if(oldId.equals(newId)) { - newId = "xxxx"; - } - out.append("@compiletime function create_").append(parent.getFileType().getExt()).append("_").append(newId) - .append("()\n"); - out.append(" let def = createObjectDefinition(\"").append(parent.getFileType().getExt()).append("\", '"); - out.append(newId); - out.append("', '"); - out.append(oldId); - out.append("')\n"); - for (ObjectModification m : modifications) { - m.exportToWurst(out); - } - out.append("\n\n"); - } - - public ObjectTable getParent() { - return parent; - } - - public ObjectFileType getFileType() { - return parent.getFileType(); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - prettyPrint(sb); - return sb.toString(); - } - - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectFile.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectFile.java deleted file mode 100644 index f3dd6b72f..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectFile.java +++ /dev/null @@ -1,131 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import de.peeeq.wurstscript.WLogger; - -import java.io.*; - -public class ObjectFile { - - private ObjectFileType fileType; - private ObjectTable origTable; - private ObjectTable modifiedTable; - private int version; - - public ObjectFileType getFileType() { - return fileType; - } - - public ObjectTable getOrigTable() { - return origTable; - } - - public ObjectTable getModifiedTable() { - return modifiedTable; - } - - @SuppressWarnings("resource") // closed in constructor - public ObjectFile(File file, ObjectFileType fileType) throws IOException { - this(new BinaryDataInputStream(file, true), fileType); - } - - @SuppressWarnings("resource") // closed in constructor - public ObjectFile(byte[] w3_, ObjectFileType filetype) { - this(new BinaryDataInputStream(new ByteArrayInputStream(w3_), true), filetype); - } - - private ObjectFile(BinaryDataInputStream in, ObjectFileType fileType) { - this.fileType = fileType; - try { - version = in.readInt(); - - this.origTable = ObjectTable.readFromStream(in, fileType); - this.modifiedTable = ObjectTable.readFromStream(in, fileType); - } catch (IOException e) { - WLogger.severe(e); - throw new Error(e); - } finally { - if (in != null) { - in.close(); - } - } - } - - public ObjectFile(ObjectFileType fileType) { - this.fileType = fileType; - version = 2; - origTable = new ObjectTable(fileType); - modifiedTable = new ObjectTable(fileType); - } - - - public void writeTo(File file) { - try (BinaryDataOutputStream out = new BinaryDataOutputStream(file, true)) { - writeTo(out); - } catch (IOException e) { - WLogger.severe(e); - throw new Error(e); - } - } - - public byte[] writeToByteArray() { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - try (BinaryDataOutputStream out = new BinaryDataOutputStream(os, true)) { - writeTo(out); - return os.toByteArray(); - } catch (IOException e) { - WLogger.severe(e); - throw new Error(e); - } - } - - public void writeTo(BinaryDataOutputStream out) throws IOException { - out.writeInt(version); - this.origTable.writeToStream(out, fileType); - this.modifiedTable.writeToStream(out, fileType); - out.flush(); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("version = ").append(version).append("\n"); - sb.append(" original Table(modified standard units):\n"); - sb.append("##################\n"); - origTable.prettyPrint(sb); - sb.append(" modified Table(newly created unit):\n"); - sb.append("##################\n"); - modifiedTable.prettyPrint(sb); - - return sb.toString(); - } - - - public void exportToWurst(Appendable out, ObjectFileType fileType) throws IOException { - out.append("package WurstExportedObjects_").append(fileType.getExt()).append("\n"); - out.append("import ObjEditingNatives\n\n"); - - out.append("// Modified Table (contains all custom objects)\n\n"); - modifiedTable.exportToWurst(out); - - out.append( "// Original Table (contains all modified default objects)\n" + - "// Wurst does not support modifying default objects\n" + - "// but you can copy these functions and replace 'xxxx' with a new, custom id.\n\n"); - origTable.exportToWurst(out); - } - - - public String exportToWurst(ObjectFileType fileType) { - StringBuilder sb = new StringBuilder(); - try { - exportToWurst(sb, fileType); - } catch (IOException e) { - WLogger.severe(e); - } - return sb.toString(); - } - - public boolean isEmpty() { - return origTable.isEmpty() && modifiedTable.isEmpty(); - } - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModification.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModification.java deleted file mode 100644 index c8ceac3c3..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModification.java +++ /dev/null @@ -1,166 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import com.google.common.base.Charsets; -import de.peeeq.wurstscript.intermediatelang.interpreter.VariableType; - -import java.io.IOException; - -public abstract class ObjectModification { // TODO split into appropiate subclasses - - protected String modificationId; - - - protected int variableType; - protected int levelCount; - protected int dataPointer; - protected ObjectDefinition parent; - protected T data; - - public ObjectModification(ObjectDefinition parent, String modificationId, int variableType, int levelCount, int dataPointer, T data) { - this.parent = parent; - this.modificationId = modificationId; - this.variableType = variableType; - this.levelCount = levelCount; - this.dataPointer = dataPointer; - this.data = data; - } - - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } - - - static ObjectModification readFromStream(BinaryDataInputStream in, ObjectFileType fileType, ObjectDefinition parent) throws IOException { - String modificationId = in.readString(4); - - int variableType = in.readInt(); - - int levelCount = 0; - int dataPointer = 0; - if (fileType.usesLevels()) { - levelCount = in.readInt(); - dataPointer = in.readInt(); - } - - - ObjectModification result; - switch (variableType) { - case VariableTypes.INTEGER: - int intData = in.readInt(); - result = new ObjectModificationInt(parent, modificationId, levelCount, dataPointer, intData); - break; - case VariableTypes.REAL: - float floatData = in.readFloat(); - result = new ObjectModificationReal(parent, modificationId, levelCount, dataPointer, floatData); - break; - case VariableTypes.UNREAL: - float floatData2 = in.readFloat(); - result = new ObjectModificationUnreal(parent, modificationId, levelCount, dataPointer, floatData2); - break; - case VariableTypes.STRING: - String stringData = in.readNullTerminatedString(Charsets.UTF_8); - result = new ObjectModificationString(parent, modificationId, levelCount, dataPointer, stringData); - break; - default: - throw new Error("unsupported vartype " + variableType); - } - - int end = in.readInt(); - int originalObjectId = parent.getOrigObjectId(); - int newObjectId = parent.getNewObjectId(); - // check the end value, according to spec: - // int: end of modification structure (this is either 0, or equal to the original object ID or equal to - // the new object ID of the current object, when reading files you can use this to check if the - // format is correct, when writing a file you should use the new object ID of the current object here) - if (end != 0 && end != originalObjectId && end != newObjectId) { - // TODO should this be an error visible to the user? -// WLogger.warning("corrupt end value: " + end + ", " + end + ", expected " + originalObjectId -// + " or " + newObjectId); - } - return result; - } - - public final void writeToStream(BinaryDataOutputStream out, ObjectFileType fileType) throws IOException { - out.writeString(modificationId, 4); - out.writeInt(variableType); - if (fileType.usesLevels()) { - out.writeInt(levelCount); - out.writeInt(dataPointer); - } - writeDataToStream(out, fileType); - out.writeIntReverse(parent.getNewObjectId()); - } - - - public int getLevelCount() { - return levelCount; - } - - public void setLevelCount(int levelCount) { - this.levelCount = levelCount; - } - - public int getDataPointer() { - return dataPointer; - } - - public void setDataPointer(int dataPointer) { - this.dataPointer = dataPointer; - } - - public String getModificationId() { - return modificationId; - } - - abstract void writeDataToStream(BinaryDataOutputStream out, ObjectFileType fileType) throws IOException; - - public final void exportToWurst(Appendable out) throws IOException { - if (parent.getFileType().usesLevels()) { - out.append("\t..setLvlData").append(getFuncPostfix()).append("(\""); - out.append(modificationId); - out.append("\", ").append(String.valueOf(levelCount)).append(", ").append(String.valueOf(dataPointer)).append(", ").append(escapedData()).append - (")\n"); - } else { - out.append("\t..set").append(getFuncPostfix()).append("(\""); - out.append(modificationId); - out.append("\", ").append(escapedData()).append(")\n"); - } - } - - - protected String escapedData() { - return data.toString(); - } - - - protected abstract String getFuncPostfix(); - - - @SuppressWarnings("unchecked") - public ObjectModification castTo(K val) { - if (!data.getClass().equals(val.getClass())) { - throw new Error("cannot cast from " + data.getClass() + " to " + val.getClass()); - } - return (ObjectModification) this; - } - - - @SuppressWarnings("unchecked") - public static ObjectModification create(ObjectDefinition parent, String modificationId, VariableType variableType2, int levelCount, int dataPointer, T value) { - if (variableType2 == VariableType.INTEGER) { - return (ObjectModification) new ObjectModificationInt(parent, modificationId, levelCount, dataPointer, (Integer) value); - } else if (variableType2 == VariableType.REAL) { - return (ObjectModification) new ObjectModificationReal(parent, modificationId, levelCount, dataPointer, (Float) value); - } else if (variableType2 == VariableType.UNREAL) { - return (ObjectModification) new ObjectModificationUnreal(parent, modificationId, levelCount, dataPointer, (Float) value); - } else if (variableType2 == VariableType.STRING) { - return (ObjectModification) new ObjectModificationString(parent, modificationId, levelCount, dataPointer, (String) value); - } - throw new Error("unsupported vartype " + variableType2); - } -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationInt.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationInt.java deleted file mode 100644 index 620db2c7e..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationInt.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import java.io.IOException; - -public class ObjectModificationInt extends ObjectModification { - - public ObjectModificationInt(ObjectDefinition parent, String modificationId, int levelCount, int dataPointer, int intData) { - super(parent, modificationId, VariableTypes.INTEGER, levelCount, dataPointer, intData); - } - - @Override - void writeDataToStream(BinaryDataOutputStream out, ObjectFileType fileType) throws IOException { - out.writeInt(data); - } - - @Override - public String toString() { - return modificationId + " = " + data; - } - - - @Override - protected String getFuncPostfix() { - return "Int"; - } - - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationReal.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationReal.java deleted file mode 100644 index 599d166a0..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationReal.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import java.io.IOException; - -public class ObjectModificationReal extends ObjectModification { - - public ObjectModificationReal(ObjectDefinition parent, String modificationId, int levelCount, int dataPointer, float data) { - super(parent, modificationId, VariableTypes.REAL, levelCount, dataPointer, data); - } - - @Override - void writeDataToStream(BinaryDataOutputStream out, ObjectFileType fileType) throws IOException { - out.writeFloat(data); - } - - @Override - public String toString() { - return modificationId + " = " + data; - } - - - @Override - protected String getFuncPostfix() { - return "Real"; - } - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationString.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationString.java deleted file mode 100644 index 4c52cd53c..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationString.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import com.google.common.base.Charsets; -import de.peeeq.wurstscript.utils.Utils; - -import java.io.IOException; - -public class ObjectModificationString extends ObjectModification { - - public ObjectModificationString(ObjectDefinition parent, String modificationId, int levelCount, int dataPointer, - String stringData) { - super(parent, modificationId, VariableTypes.STRING, levelCount, dataPointer, stringData); - } - - @Override - void writeDataToStream(BinaryDataOutputStream out, ObjectFileType fileType) throws IOException { - out.writeStringNullTerminated(data, Charsets.UTF_8); - } - - @Override - public String toString() { - return modificationId + " = " + data; - } - - - @Override - protected String getFuncPostfix() { - return "String"; - } - - @Override - protected String escapedData() { - return Utils.escapeString(data); - } - - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationUnreal.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationUnreal.java deleted file mode 100644 index 42bdcc081..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectModificationUnreal.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import java.io.IOException; - -/** - * same as {@link ObjectModificationReal} but with 0 <= data <= 1 - */ -public class ObjectModificationUnreal extends ObjectModification { - - public ObjectModificationUnreal(ObjectDefinition parent, String modificationId, int levelCount, int dataPointer, - float floatData) { - super(parent, modificationId, VariableTypes.UNREAL, levelCount, dataPointer, floatData); - } - - @Override - void writeDataToStream(BinaryDataOutputStream out, ObjectFileType fileType) throws IOException { - out.writeFloat(data); - } - - @Override - public String toString() { - return modificationId + " = " + data + " (unreal)"; - } - - @Override - protected String getFuncPostfix() { - return "Unreal"; - } - - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectTable.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectTable.java deleted file mode 100644 index 064569e53..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectTable.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; - -import java.io.IOException; -import java.util.LinkedHashMap; - -public class ObjectTable { - - private LinkedHashMap objectDefinitions = new LinkedHashMap<>(); - private ObjectFileType fileType; - - public ObjectTable(ObjectFileType fileType2) { - this.fileType = fileType2; - } - - public void add(ObjectDefinition objDef) { - int objId = objDef.getNewObjectId(); - if (objId == 0) { - objId = objDef.getOrigObjectId(); - } - objectDefinitions.put(objId, objDef); - } - - static ObjectTable readFromStream(BinaryDataInputStream in, ObjectFileType fileType) throws IOException { - ObjectTable objectTable = new ObjectTable(fileType); - - - int numberOfObjects = in.readInt(); - - for (int i = 0; i < numberOfObjects; i++) { - ObjectDefinition objDef = ObjectDefinition.readFromStream(in, objectTable); - objectTable.add(objDef); - } - - return objectTable; - } - - - public LinkedHashMap getObjectDefinitions() { - return objectDefinitions; - } - - public void writeToStream(BinaryDataOutputStream out, ObjectFileType fileType) throws IOException { - - // write number of objects - out.writeInt(objectDefinitions.size()); - - for (ObjectDefinition od : objectDefinitions.values()) { - od.writeToStream(out, fileType); - } - - } - - public void prettyPrint(StringBuilder sb) { - for (ObjectDefinition od : objectDefinitions.values()) { - od.prettyPrint(sb); - } - - } - - public void exportToWurst(Appendable out) throws IOException { - for (ObjectDefinition od : objectDefinitions.values()) { - od.exportToWurst(out); - } - - } - - public ObjectFileType getFileType() { - return fileType; - } - - public boolean isEmpty() { - return objectDefinitions.isEmpty(); - } - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/VariableTypes.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/VariableTypes.java deleted file mode 100644 index 404117987..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/VariableTypes.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.peeeq.wurstio.objectreader; - -public class VariableTypes { - - private VariableTypes() { - } - - static final int INTEGER = 0; - static final int REAL = 1; - static final int UNREAL = 2; // 0<=val<=1 - static final int STRING = 3; - -} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/package-info.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/package-info.java deleted file mode 100644 index 6c92f9081..000000000 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/package-info.java +++ /dev/null @@ -1,3 +0,0 @@ -@org.eclipse.jdt.annotation.NonNullByDefault -package de.peeeq.wurstio.objectreader; - diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/VariableType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/VariableType.java index d31a229a4..3a31cc6d7 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/VariableType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/VariableType.java @@ -14,4 +14,5 @@ private VariableType(int encoding) { } + } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/objectreader/BinaryDataStreamsTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/objectreader/BinaryDataStreamsTest.java deleted file mode 100644 index 915bffee1..000000000 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/objectreader/BinaryDataStreamsTest.java +++ /dev/null @@ -1,107 +0,0 @@ -package tests.wurstscript.objectreader; - -import com.google.common.base.Charsets; -import de.peeeq.wurstio.objectreader.BinaryDataInputStream; -import de.peeeq.wurstio.objectreader.BinaryDataOutputStream; -import de.peeeq.wurstscript.WLogger; -import org.testng.annotations.Test; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import static org.testng.Assert.assertEquals; - -public class BinaryDataStreamsTest { - - @Test - public void testWriteInt() throws IOException { - try (ByteArrayOutputStream outStream = new ByteArrayOutputStream(); - BinaryDataOutputStream out = new BinaryDataOutputStream( - outStream, true)) { - int[] numbers = {1 << 23, 1, 2, 3, 0, 1 << 8, 1 << 16, 1 << 24, - Integer.MAX_VALUE, Integer.MIN_VALUE}; // getRandomInts(); - for (int i = 0; i < numbers.length; i++) { - out.writeInt(numbers[i]); - } - // 2 0000 000 0000 - out.flush(); - - WLogger.info("bytes = " + outStream); - byte[] bytes = outStream.toByteArray(); - - try (BinaryDataInputStream in = new BinaryDataInputStream( - new ByteArrayInputStream(bytes), true)) { - for (int i = 0; i < numbers.length; i++) { - int read = in.readInt(); - WLogger.info("read = " + read); - assertEquals(numbers[i], read); - } - } - } - } - - @Test - public void testWriteString() throws IOException { - try (ByteArrayOutputStream outStream = new ByteArrayOutputStream(); - BinaryDataOutputStream out = new BinaryDataOutputStream( - outStream, true)) { - - String s = "Hello Wörld!"; - out.writeString(s, s.length() + 1); // +1 because ö takes one byte - // more - out.flush(); - byte[] bytes = outStream.toByteArray(); - - try (BinaryDataInputStream in = new BinaryDataInputStream( - new ByteArrayInputStream(bytes), true)) { - String s2 = in.readString(s.length() + 1); - assertEquals(s, s2); - } - } - } - - @Test - public void testWriteStringNullTerminated() throws IOException { - try (ByteArrayOutputStream outStream = new ByteArrayOutputStream(); - BinaryDataOutputStream out = new BinaryDataOutputStream( - outStream, true)) { - - String s = "Hello Wörld!"; - out.writeStringNullTerminated(s, Charsets.UTF_8); - out.flush(); - byte[] bytes = outStream.toByteArray(); - - for (byte b : bytes) { - WLogger.info(b + " " + (b >= 0 ? (char) b : "")); - } - - try (BinaryDataInputStream in = new BinaryDataInputStream( - new ByteArrayInputStream(bytes), true)) { - String s2 = in.readNullTerminatedString(Charsets.UTF_8); - assertEquals(s.length(), s2.length()); - assertEquals(s, s2); - } - } - } - - @Test - public void testWriteFloat() throws IOException { - try (ByteArrayOutputStream outStream = new ByteArrayOutputStream(); - BinaryDataOutputStream out = new BinaryDataOutputStream( - outStream, true)) { - - float f = 1.234f; - out.writeFloat(f); - out.flush(); - byte[] bytes = outStream.toByteArray(); - - try (BinaryDataInputStream in = new BinaryDataInputStream( - new ByteArrayInputStream(bytes), true)) { - float f2 = in.readFloat(); - assertEquals(f, f2, 0.0); - } - } - } - -} diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/objectreader/TestW3u.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/objectreader/TestW3u.java deleted file mode 100644 index 22cf61d31..000000000 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/objectreader/TestW3u.java +++ /dev/null @@ -1,47 +0,0 @@ -package tests.wurstscript.objectreader; - -import de.peeeq.wurstio.objectreader.ObjectFile; -import de.peeeq.wurstio.objectreader.ObjectFileType; -import de.peeeq.wurstscript.WLogger; -import org.testng.annotations.Test; - -import java.io.File; -import java.io.IOException; - -import static org.testng.Assert.assertEquals; - - -public class TestW3u { - - - @Test - public void testLongTooltip() throws IOException { - File inFile = new File("testscripts/data/longtooltip.w3u"); - File outFile = new File("test-output/longtooltip.w3u"); - testW3u(inFile, outFile); - - } - - @Test - public void testEbrUnits() throws IOException { - File inFile = new File("testscripts/data/ebr_crash.w3u"); - File outFile = new File("test-output/ebr_crash_out.w3u"); - testW3u(inFile, outFile); - - } - - private void testW3u(File inFile, File outFile) throws IOException { - //read - ObjectFile objFile = new ObjectFile(inFile, ObjectFileType.UNITS); - // write - objFile.writeTo(outFile); - // read input - ObjectFile objFile2 = new ObjectFile(outFile, ObjectFileType.UNITS); - - // compare objFiles: - assertEquals(objFile2.toString(), objFile.toString()); - WLogger.info(objFile.toString()); - } - - -} From 4d008eecf3b414904af26885afba63fda279111a Mon Sep 17 00:00:00 2001 From: Frotty Date: Fri, 26 Aug 2022 09:46:50 +0200 Subject: [PATCH 37/74] fix removing wurst definitions --- .../interpreter/ProgramStateIO.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java index c7d50a999..976a68077 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java @@ -202,15 +202,13 @@ private void replaceTrigStringsInTable(List modifiedTable) } } - private void deleteWurstObjects(ObjMod unitStore) { - Iterator iterator = unitStore.getCustomObjs().iterator(); - while (iterator.hasNext()) { - ObjMod.Obj next = iterator.next(); + private void deleteWurstObjects(ObjMod dataStore) { + for (ObjMod.Obj next : dataStore.getCustomObjs()) { for (ObjMod.Obj.Mod om : next.getMods()) { if (om.getId().getVal().equals("wurs") && om.getVal() instanceof War3Int) { War3Int val = (War3Int) om.getVal(); if (val.getVal() == GENERATED_BY_WURST) { - iterator.remove(); + dataStore.removeObj(next.getId()); break; } } @@ -255,7 +253,7 @@ private void writeW3oFile() { ObjMod dataStore = getDataStore(fileType); if (!dataStore.getObjs().isEmpty()) { objFileStream.writeInt32(1); // exists - dataStore.write(objFileStream, ObjMod.EncodingFormat.AS_DEFINED); + dataStore.write(objFileStream, ObjMod.EncodingFormat.OBJ_0x2); } else { objFileStream.writeInt32(0); // does not exist } @@ -270,7 +268,7 @@ private void writebackObjectFile(ObjMod dataStore, ObjectF try (Wc3BinOutputStream out = new Wc3BinOutputStream(baos)) { Optional folder = getObjectEditingOutputFolder(); - dataStore.write(out, ObjMod.EncodingFormat.AS_DEFINED); + dataStore.write(out, ObjMod.EncodingFormat.OBJ_0x2); out.close(); @@ -339,7 +337,9 @@ public void exportToWurst(List customObjs, ObjectFileType .append(")\n"); } else { out.append("\t..set").append(valTypeToFuncPostfix(m.getValType())).append("(\""); - out.append(m.toString()); + out.append((m.getValType() == ObjMod.ValType.STRING) ? + Utils.escapeString(m.getVal().toString()) : + m.getVal().toString()); out.append("\", ").append(m.getVal().toString()).append(")\n"); } } From 19a6ef00cd4d634d4e92a30ae18a7c77209919bc Mon Sep 17 00:00:00 2001 From: Frotty Date: Fri, 26 Aug 2022 10:30:57 +0200 Subject: [PATCH 38/74] fix objmod wurst output --- .../intermediateLang/interpreter/ProgramStateIO.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java index 976a68077..82a5485b4 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java @@ -337,10 +337,10 @@ public void exportToWurst(List customObjs, ObjectFileType .append(")\n"); } else { out.append("\t..set").append(valTypeToFuncPostfix(m.getValType())).append("(\""); - out.append((m.getValType() == ObjMod.ValType.STRING) ? + out.append(m.toString()); + out.append("\", ").append((m.getValType() == ObjMod.ValType.STRING) ? Utils.escapeString(m.getVal().toString()) : - m.getVal().toString()); - out.append("\", ").append(m.getVal().toString()).append(")\n"); + m.getVal().toString()).append(")\n"); } } out.append("\n\n"); From 06aea7b86c3cdfc3e868d8eae67951077688f328 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sat, 27 Aug 2022 17:22:36 +0200 Subject: [PATCH 39/74] Update wc3libs and write AS_DEFINED --- de.peeeq.wurstscript/build.gradle | 2 +- .../wurstio/intermediateLang/interpreter/ProgramStateIO.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 6a4660d5a..79d367efb 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -106,7 +106,7 @@ dependencies { implementation group: 'com.github.inwc3', name: 'jmpq3', version: 'b4ef7121a4' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:a6bbe12d03' + implementation 'com.github.inwc3:wc3libs:aad9d96c49' // The setup tool for wurst.build handling implementation 'com.github.wurstscript:wurstsetup:4c65824b40' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java index 82a5485b4..9fe3a3427 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java @@ -253,7 +253,7 @@ private void writeW3oFile() { ObjMod dataStore = getDataStore(fileType); if (!dataStore.getObjs().isEmpty()) { objFileStream.writeInt32(1); // exists - dataStore.write(objFileStream, ObjMod.EncodingFormat.OBJ_0x2); + dataStore.write(objFileStream, ObjMod.EncodingFormat.AS_DEFINED); } else { objFileStream.writeInt32(0); // does not exist } @@ -268,7 +268,7 @@ private void writebackObjectFile(ObjMod dataStore, ObjectF try (Wc3BinOutputStream out = new Wc3BinOutputStream(baos)) { Optional folder = getObjectEditingOutputFolder(); - dataStore.write(out, ObjMod.EncodingFormat.OBJ_0x2); + dataStore.write(out, ObjMod.EncodingFormat.AS_DEFINED); out.close(); From 9f5811174bde8ac0f238f713ba5f04a8ebf62411 Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 6 Sep 2022 21:23:12 +0200 Subject: [PATCH 40/74] fix writing empty objmod files --- .../interpreter/ProgramStateIO.java | 69 ++++++++++--------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java index 9fe3a3427..6a643388a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java @@ -95,7 +95,7 @@ private ObjMod getDataStore(ObjectFileType filetype) throw if (mpqEditor == null) { // without a map: create empty object file dataStore = filetypeToObjmod(filetype); - dataStore.setFormat(ObjMod.EncodingFormat.AUTO); + dataStore.setFormat(ObjMod.EncodingFormat.OBJ_0x2); dataStoreMap.put(filetype, dataStore); return dataStore; } @@ -106,44 +106,44 @@ private ObjMod getDataStore(ObjectFileType filetype) throw try { if (mpqEditor.hasFile(fileName)) { byte[] w3_ = mpqEditor.extractFile(fileName); - try (Wc3BinInputStream in = new Wc3BinInputStream(new ByteArrayInputStream(w3_))) { - switch (filetype) { - case UNITS: - dataStore = new W3U(in); - break; - case ITEMS: - dataStore = new W3T(in); - break; - case DESTRUCTABLES: - dataStore = new W3B(in); - break; - case DOODADS: - dataStore = new W3D(in); - break; - case ABILITIES: - dataStore = new W3A(in); - break; - case BUFFS: - dataStore = new W3H(in); - break; - case UPGRADES: - dataStore = new W3Q(in); - break; - } - - replaceTrigStrings(dataStore); + Wc3BinInputStream in = new Wc3BinInputStream(new ByteArrayInputStream(w3_)); + switch (filetype) { + case UNITS: + dataStore = new W3U(in); + break; + case ITEMS: + dataStore = new W3T(in); + break; + case DESTRUCTABLES: + dataStore = new W3B(in); + break; + case DOODADS: + dataStore = new W3D(in); + break; + case ABILITIES: + dataStore = new W3A(in); + break; + case BUFFS: + dataStore = new W3H(in); + break; + case UPGRADES: + dataStore = new W3Q(in); + break; } + in.close(); + replaceTrigStrings(dataStore); + } else { dataStore = filetypeToObjmod(filetype); - dataStore.setFormat(ObjMod.EncodingFormat.AUTO); + dataStore.setFormat(ObjMod.EncodingFormat.OBJ_0x2); } } catch (IOException | InterruptedException e) { // TODO maybe tell the user, that something has gone wrong WLogger.info("Could not extract file: " + fileName); WLogger.info(e); dataStore = filetypeToObjmod(filetype); - dataStore.setFormat(ObjMod.EncodingFormat.AUTO); + dataStore.setFormat(ObjMod.EncodingFormat.OBJ_0x2); } dataStoreMap.put(filetype, dataStore); @@ -253,7 +253,7 @@ private void writeW3oFile() { ObjMod dataStore = getDataStore(fileType); if (!dataStore.getObjs().isEmpty()) { objFileStream.writeInt32(1); // exists - dataStore.write(objFileStream, ObjMod.EncodingFormat.AS_DEFINED); + dataStore.write(objFileStream, ObjMod.EncodingFormat.OBJ_0x2); } else { objFileStream.writeInt32(0); // does not exist } @@ -264,14 +264,15 @@ private void writeW3oFile() { } private void writebackObjectFile(ObjMod dataStore, ObjectFileType fileType, boolean inject) throws Error { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try (Wc3BinOutputStream out = new Wc3BinOutputStream(baos)) { + + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Wc3BinOutputStream out = new Wc3BinOutputStream(baos); Optional folder = getObjectEditingOutputFolder(); - dataStore.write(out, ObjMod.EncodingFormat.AS_DEFINED); + dataStore.write(out, ObjMod.EncodingFormat.OBJ_0x2); out.close(); - byte[] w3_ = baos.toByteArray(); // TODO wurst exported objects From 9783e0abbe82535564fe21d02cc6f738a9132c7b Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 12 Sep 2022 18:56:59 +0200 Subject: [PATCH 41/74] ugly fix for skin files --- de.peeeq.wurstscript/build.gradle | 2 +- .../interpreter/ProgramStateIO.java | 72 ++++++++++++++++--- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 79d367efb..e22065b46 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -106,7 +106,7 @@ dependencies { implementation group: 'com.github.inwc3', name: 'jmpq3', version: 'b4ef7121a4' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:aad9d96c49' + implementation 'com.github.inwc3:wc3libs:1c667fae6a' // The setup tool for wurst.build handling implementation 'com.github.wurstscript:wurstsetup:4c65824b40' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java index 6a643388a..28418fa8d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java @@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull; import java.io.*; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; @@ -103,31 +102,88 @@ private ObjMod getDataStore(ObjectFileType filetype) throw try { // extract specific object file: String fileName = "war3map." + filetype.getExt(); + String skinFileName = "war3mapSkin." + filetype.getExt(); try { if (mpqEditor.hasFile(fileName)) { byte[] w3_ = mpqEditor.extractFile(fileName); Wc3BinInputStream in = new Wc3BinInputStream(new ByteArrayInputStream(w3_)); switch (filetype) { case UNITS: - dataStore = new W3U(in); + W3U w3u = new W3U(in); + if (mpqEditor.hasFile(skinFileName)) { + byte[] w3s_ = mpqEditor.extractFile(skinFileName); + Wc3BinInputStream inS = new Wc3BinInputStream(new ByteArrayInputStream(w3s_)); + W3U skin = new W3U(inS); + w3u.merge(skin); + mpqEditor.deleteFile(skinFileName); + } + dataStore = w3u; break; case ITEMS: - dataStore = new W3T(in); + W3T w3t = new W3T(in); + if (mpqEditor.hasFile(skinFileName)) { + byte[] w3s_ = mpqEditor.extractFile(skinFileName); + Wc3BinInputStream inS = new Wc3BinInputStream(new ByteArrayInputStream(w3s_)); + W3T skin = new W3T(inS); + w3t.merge(skin); + mpqEditor.deleteFile(skinFileName); + } + dataStore = w3t; break; case DESTRUCTABLES: - dataStore = new W3B(in); + W3B w3b = new W3B(in); + if (mpqEditor.hasFile(skinFileName)) { + byte[] w3s_ = mpqEditor.extractFile(skinFileName); + Wc3BinInputStream inS = new Wc3BinInputStream(new ByteArrayInputStream(w3s_)); + W3B skin = new W3B(inS); + w3b.merge(skin); + mpqEditor.deleteFile(skinFileName); + } + dataStore = w3b; break; case DOODADS: - dataStore = new W3D(in); + W3D w3d = new W3D(in); + if (mpqEditor.hasFile(skinFileName)) { + byte[] w3s_ = mpqEditor.extractFile(skinFileName); + Wc3BinInputStream inS = new Wc3BinInputStream(new ByteArrayInputStream(w3s_)); + W3D skin = new W3D(inS); + w3d.merge(skin); + mpqEditor.deleteFile(skinFileName); + } + dataStore = w3d; break; case ABILITIES: - dataStore = new W3A(in); + W3A w3a = new W3A(in); + if (mpqEditor.hasFile(skinFileName)) { + byte[] w3s_ = mpqEditor.extractFile(skinFileName); + Wc3BinInputStream inS = new Wc3BinInputStream(new ByteArrayInputStream(w3s_)); + W3A skin = new W3A(inS); + w3a.merge(skin); + mpqEditor.deleteFile(skinFileName); + } + dataStore = w3a; break; case BUFFS: - dataStore = new W3H(in); + W3H w3h = new W3H(in); + if (mpqEditor.hasFile(skinFileName)) { + byte[] w3s_ = mpqEditor.extractFile(skinFileName); + Wc3BinInputStream inS = new Wc3BinInputStream(new ByteArrayInputStream(w3s_)); + W3H skin = new W3H(inS); + w3h.merge(skin); + mpqEditor.deleteFile(skinFileName); + } + dataStore = w3h; break; case UPGRADES: - dataStore = new W3Q(in); + W3Q w3q = new W3Q(in); + if (mpqEditor.hasFile(skinFileName)) { + byte[] w3s_ = mpqEditor.extractFile(skinFileName); + Wc3BinInputStream inS = new Wc3BinInputStream(new ByteArrayInputStream(w3s_)); + W3Q skin = new W3Q(inS); + w3q.merge(skin); + mpqEditor.deleteFile(skinFileName); + } + dataStore = w3q; break; } From 05fddbdf6a6f502b87ea3ff82e59b6a87c21db4b Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 4 Jan 2023 12:59:31 +0100 Subject: [PATCH 42/74] fix jass parsing issue --- .../wurstscript/jass/AntlrJassParseTreeTransformer.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java index b87ac7e75..b76bf57d0 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java @@ -434,6 +434,12 @@ public static void buildStringVal(WPos source, String text, StringBuilder res) { case 't': res.append('\t'); break; + case 'b': + res.append('\b'); + break; + case 'f': + res.append('\f'); + break; case '"': res.append('"'); break; From aabbbcf8d9db1578cb6610ac61f1d64aa23402f4 Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 9 Jan 2023 10:44:15 +0100 Subject: [PATCH 43/74] Fix CircleCI badge --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index a1b5619c2..983653074 100644 --- a/README.markdown +++ b/README.markdown @@ -3,7 +3,7 @@ Wurstscript is a delicious programming language which compiles to Jass or Lua code that is used to power WarCraft III maps. [![Build Status](http://peeeq.de/hudson/job/Wurst/badge/icon)](http://peeeq.de/hudson/job/Wurst/) -[![CircleCI](https://circleci.com/gh/wurstscript/WurstScript/tree/master.svg?style=svg)](https://circleci.com/gh/wurstscript/WurstScript/tree/master) +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/wurstscript/WurstScript/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/wurstscript/WurstScript/tree/master) [![GitHub issues](https://img.shields.io/github/issues/wurstscript/WurstScript.svg)]() [![GitHub pull requests](https://img.shields.io/github/issues-pr/wurstscript/WurstScript.svg)]() [![Coverage Status](https://coveralls.io/repos/github/wurstscript/WurstScript/badge.svg?branch=master)](https://coveralls.io/github/wurstscript/WurstScript?branch=master) From 6daa70341b08b23c5600c70007d6f450482d9c29 Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 9 Jan 2023 11:12:06 +0100 Subject: [PATCH 44/74] Update pjass to detect functions with too many parameters (#1073) --- .../src/main/resources/pjass.exe | Bin 142625 -> 289228 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/resources/pjass.exe b/de.peeeq.wurstscript/src/main/resources/pjass.exe index 738ff2a59f9ed48ed6f6b9b3ba8238362871cc26..fa774bd2924078a30d22a52196f57a82052395a9 100644 GIT binary patch literal 289228 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%0DZyNc=Sd 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 Pah|SP3pQBh&dmP{^5584 literal 142625 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 From c12c5e9602e1ee0a1c943b19e7428495fd14171b Mon Sep 17 00:00:00 2001 From: Cokemonkey11 Date: Fri, 5 May 2023 16:59:40 +0100 Subject: [PATCH 45/74] warn log instead of printing stacktrace on linux platform (#1075) --- .../main/java/de/peeeq/wurstio/utils/W3InstallationData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java index 522d54997..47567143b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java @@ -80,7 +80,7 @@ private void discoverVersion() { version = Optional.ofNullable(new StdGameVersionFinder().get()); WLogger.info("Parsed game version: " + version); } catch (NotFoundException e) { - e.printStackTrace(); + WLogger.warning("Wurst compiler failed to determine game version", e); } } From e6f36a8fdef6e01ab005bc27e08f6ed68e055cc5 Mon Sep 17 00:00:00 2001 From: Cokemonkey11 Date: Sun, 14 May 2023 12:47:25 +0000 Subject: [PATCH 46/74] Eliminate stacktrace when compiling on linux (#1076) * Eliminate stacktrace when compiling on linux * catch unsupported platform at exe path --- de.peeeq.wurstscript/build.gradle | 2 +- .../peeeq/wurstio/languageserver/ProjectConfigBuilder.java | 6 +++++- .../java/de/peeeq/wurstio/utils/W3InstallationData.java | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index e22065b46..e128988c2 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -106,7 +106,7 @@ dependencies { implementation group: 'com.github.inwc3', name: 'jmpq3', version: 'b4ef7121a4' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:1c667fae6a' + implementation 'com.github.inwc3:wc3libs:2d190647ae' // The setup tool for wurst.build handling implementation 'com.github.wurstscript:wurstsetup:4c65824b40' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java index 792036965..211c65f58 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java @@ -54,7 +54,11 @@ public static void apply(WurstProjectConfigData projectConfig, File targetMap, F if (w3data.getWc3PatchVersion().isPresent()) { w3I.injectConfigsInJassScript(inputStream, sw, w3data.getWc3PatchVersion().get()); } else { - w3I.injectConfigsInJassScript(inputStream, sw, GameVersion.VERSION_1_32); + GameVersion version = GameVersion.VERSION_1_32; + System.out.println( + "Failed to determine installed game version. Falling back to " + version.toString() + ); + w3I.injectConfigsInJassScript(inputStream, sw, version); } } scriptBytes = sw.toString().getBytes(StandardCharsets.UTF_8); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java index 47567143b..8a616b0d2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java @@ -7,6 +7,7 @@ import net.moonlightflower.wc3libs.port.Orient; import net.moonlightflower.wc3libs.port.StdGameExeFinder; import net.moonlightflower.wc3libs.port.StdGameVersionFinder; +import net.moonlightflower.wc3libs.port.UnsupportedPlatformException; import net.moonlightflower.wc3libs.port.win.WinGameExeFinder; import java.io.File; @@ -72,6 +73,8 @@ private void discoverExePath() { WLogger.info("Parsed game path: " + gameExe); } catch (NotFoundException e) { e.printStackTrace(); + } catch (UnsupportedPlatformException e) { + WLogger.warning("Wurst compiler cannot determine game path: " + e.getMessage()); } } @@ -81,6 +84,8 @@ private void discoverVersion() { WLogger.info("Parsed game version: " + version); } catch (NotFoundException e) { WLogger.warning("Wurst compiler failed to determine game version", e); + } catch (UnsupportedPlatformException e) { + WLogger.warning("Wurst compiler cannot determine game version: " + e.getMessage()); } } From 74d9f5ff9068994dfd5be12ca7fdb9a7e2233371 Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 10 Oct 2023 00:49:27 +0200 Subject: [PATCH 47/74] small performance fixes (#1079) --- .../src/main/java/de/peeeq/wurstio/Pjass.java | 3 ++- .../de/peeeq/wurstio/hotdoc/HotdocGenerator.java | 2 +- .../jassinterpreter/providers/StringProvider.java | 9 +++++---- .../wurstio/languageserver/WurstCommands.java | 11 ++++++----- .../languageserver/requests/GetCompletions.java | 5 ++++- .../de/peeeq/wurstio/map/importer/ImportFile.java | 5 +++-- .../java/de/peeeq/wurstscript/WurstParser.java | 14 +++++++++++--- .../wurstscript/attributes/DescriptionHtml.java | 2 +- .../de/peeeq/wurstscript/attributes/IntVal.java | 14 ++++++++++---- .../optimizer/ConstantAndCopyPropagation.java | 5 ++--- .../java/de/peeeq/wurstscript/parser/WPos.java | 3 ++- .../java/tests/wurstscript/tests/BugTests.java | 13 +++++++++++++ 12 files changed, 60 insertions(+), 26 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Pjass.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Pjass.java index 760a4d2e8..808556b6f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Pjass.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Pjass.java @@ -45,6 +45,8 @@ public String getMessage() { return message; } + private static final Pattern pat = Pattern.compile(".*:([0-9]+):(.*)"); + public List getErrors() { if (isOk()) { return Collections.emptyList(); @@ -67,7 +69,6 @@ public List getErrors() { List result = Lists.newArrayList(); for (String error : getMessage().split("([\n\r])+")) { - Pattern pat = Pattern.compile(".*:([0-9]+):(.*)"); Matcher match = pat.matcher(error); if (!match.matches()) { WLogger.warning("no match: " + error); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/hotdoc/HotdocGenerator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/hotdoc/HotdocGenerator.java index 234ada43c..9babae82c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/hotdoc/HotdocGenerator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/hotdoc/HotdocGenerator.java @@ -209,7 +209,7 @@ private void documentFuncs(List funcs, StringW if (!first) { descr.append(", "); } - descr.append(p.attrTyp() + " " + p.getName()); + descr.append(p.attrTyp()).append(" ").append(p.getName()); first = false; } descr.append(")"); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/StringProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/StringProvider.java index 9ae37a1f4..73e10def9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/StringProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/StringProvider.java @@ -27,10 +27,10 @@ public ILconstString I2S(ILconstInt i) { return new ILconstString("" + i.getVal()); } + private static final Pattern s2ipattern = Pattern.compile("([+\\-]?[0-9]+).*"); public ILconstInt S2I(ILconstString s) { String str = s.getVal(); - Pattern pattern = Pattern.compile("([+\\-]?[0-9]+).*"); - Matcher matcher = pattern.matcher(str); + Matcher matcher = s2ipattern.matcher(str); if (matcher.matches()) { str = matcher.group(1); return new ILconstInt(Integer.parseInt(str)); @@ -39,10 +39,11 @@ public ILconstInt S2I(ILconstString s) { } } + private static final Pattern s2rpattern = Pattern.compile("([+\\-]?[0-9]+(\\.[0-9]*)?).*"); public ILconstReal S2R(ILconstString s) { String str = s.getVal(); - Pattern pattern = Pattern.compile("([+\\-]?[0-9]+(\\.[0-9]*)?).*"); - Matcher matcher = pattern.matcher(str); + + Matcher matcher = s2rpattern.matcher(str); if (matcher.matches()) { str = matcher.group(1); return new ILconstReal(Float.parseFloat(str)); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java index 78d10d492..716e2fbfb 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java @@ -39,7 +39,7 @@ public class WurstCommands { static List providedCommands() { return Arrays.asList( - WURST_CLEAN + WURST_CLEAN ); } @@ -123,11 +123,12 @@ public static List getCompileArgs(WFile rootPath, String... additionalAr try { Path configFile = Paths.get(rootPath.toString(), "wurst_run.args"); if (Files.exists(configFile)) { - return Stream.concat( - Files.lines(configFile) - .filter(s -> s.startsWith("-")), + try (Stream lines = Files.lines(configFile)) { + return Stream.concat( + lines.filter(s -> s.startsWith("-")), Stream.of(additionalArgs) - ).collect(Collectors.toList()); + ).collect(Collectors.toList()); + } } else { String cfg = String.join("\n", defaultArgs) + "\n"; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetCompletions.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetCompletions.java index bc2b1bec6..8951eaacf 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetCompletions.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetCompletions.java @@ -23,6 +23,7 @@ import java.text.ParseException; import java.util.*; import java.util.Map.Entry; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -356,6 +357,8 @@ private boolean isSuitableCompletion(String name) { } } + private static final Pattern realPattern = Pattern.compile("[0-9]\\."); + /** * checks if we are currently entering a real number * (autocomplete might have triggered because of the dot) @@ -364,7 +367,7 @@ private boolean isEnteringRealNumber() { try { String currentLine = currentLine(); String before = currentLine.substring(column - 2, 2); - return before.matches("[0-9]\\."); + return realPattern.matcher(before).matches(); } catch (IndexOutOfBoundsException e) { return false; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java index d8a04d41f..17c813a05 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java @@ -16,6 +16,7 @@ import java.nio.file.Path; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; public class ImportFile { private static final String DEFAULT_IMPORT_PATH = "war3mapImported\\"; @@ -212,8 +213,8 @@ private static File getImportDirectory(File projectFolder) { private static File[] getTransientImportDirectories(File projectFolder) { ArrayList paths = new ArrayList<>(); Path dependencies = projectFolder.toPath().resolve("_build").resolve("dependencies"); - try { - java.nio.file.Files.list(dependencies).forEach(dependency -> { + try (Stream spaths = java.nio.file.Files.list(dependencies)) { + spaths.forEach(dependency -> { if (java.nio.file.Files.exists(dependency.resolve("imports"))) { paths.add(dependency.resolve("imports")); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java index 8b388b3f8..130ff72df 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java @@ -24,6 +24,8 @@ import java.io.IOException; import java.io.Reader; import java.io.StringReader; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class WurstParser { private static final int MAX_SYNTAX_ERRORS = 15; @@ -39,6 +41,7 @@ public CompilationUnit parse(Reader reader, String source, boolean hasCommonJ) { return parseWithAntlr(reader, source, hasCommonJ); } + private static final Pattern pattern = Pattern.compile("\\s*"); private CompilationUnit parseWithAntlr(Reader reader, final String source, boolean hasCommonJ) { try { @@ -53,6 +56,8 @@ private CompilationUnit parseWithAntlr(Reader reader, final String source, boole int errorCount = 0; + + @Override public void syntaxError(@SuppressWarnings("null") Recognizer recognizer, @SuppressWarnings("null") Object offendingSymbol, int line, int charPositionInLine, @@ -85,7 +90,8 @@ public void syntaxError(@SuppressWarnings("null") Recognizer recognizer, @ posStop = input.size() - 1; } - while (pos > 0 && input.getText(new Interval(pos, posStop)).matches("\\s*")){ + Matcher matcher = pattern.matcher(input.getText(new Interval(pos, posStop))); + while (pos > 0 && matcher.matches()){ pos--; } CompileError err = new CompileError(new WPos(source, offsets, pos, posStop), msg); @@ -161,7 +167,8 @@ public void syntaxError(@SuppressWarnings("null") Recognizer recognizer, @ msg = "line " + line + ": " + msg; - while (pos > 0 && input.getText(new Interval(pos, posStop)).matches("\\s*")) { + Matcher matcher = pattern.matcher(input.getText(new Interval(pos, posStop))); + while (pos > 0 && matcher.matches()) { pos--; } CompileError err = new CompileError(new WPos(source, offsets, pos, posStop), msg); @@ -229,7 +236,8 @@ public void syntaxError(@SuppressWarnings("null") Recognizer recognizer, @ msg = "line " + line + ": " + msg; - while (pos > 0 && input.getText(new Interval(pos, posStop)).matches("\\s*")) { + Matcher matcher = pattern.matcher(input.getText(new Interval(pos, posStop))); + while (pos > 0 && matcher.matches()) { pos--; } CompileError err = new CompileError(new WPos(source, offsets, pos, posStop), msg); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/DescriptionHtml.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/DescriptionHtml.java index 07041b397..e3ef4a99a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/DescriptionHtml.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/DescriptionHtml.java @@ -52,7 +52,7 @@ public static String getParameterString(AstElementWithParameters f) { if (!first) { descrhtml.append(", "); } - descrhtml.append(htmlType(p.attrTyp()) + " " + p.getName()); + descrhtml.append(htmlType(p.attrTyp())).append(" ").append(p.getName()); first = false; } String params = descrhtml.toString(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/IntVal.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/IntVal.java index 2b9c6be66..5f2bae66d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/IntVal.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/IntVal.java @@ -3,18 +3,24 @@ import de.peeeq.wurstscript.ast.ExprIntVal; import de.peeeq.wurstscript.utils.Utils; +import java.util.regex.Pattern; + public class IntVal { + private static final Pattern INT_PATTERN =Pattern.compile("-?(0|[1-9][0-9]*)"); + private static final Pattern OINT_PATTERN =Pattern.compile("-?0[0-9]+"); + private static final Pattern HINT_PATTERN =Pattern.compile("-?0x[0-9a-fA-F]+"); + private static final Pattern HINT_PATTERN2 =Pattern.compile("-?\\$[0-9a-fA-F]+"); public static int getValI(ExprIntVal i) { String raw = i.getValIraw(); try { - if (raw.matches("-?(0|[1-9][0-9]*)")) { + if (INT_PATTERN.matcher(raw).matches()) { return Utils.parseInt(raw); - } else if (raw.matches("-?0[0-9]+")) { + } else if (OINT_PATTERN.matcher(raw).matches()) { return Utils.parseOctalInt(raw); - } else if (raw.matches("-?0x[0-9a-fA-F]+")) { + } else if (HINT_PATTERN.matcher(raw).matches()) { return Utils.parseHexInt(raw, 2); - } else if (raw.matches("-?\\$[0-9a-fA-F]+")) { + } else if (HINT_PATTERN2.matcher(raw).matches()) { return Utils.parseHexInt(raw, 1); } else if (raw.startsWith("'")) { try { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ConstantAndCopyPropagation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ConstantAndCopyPropagation.java index 96805b7ea..222f89df6 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ConstantAndCopyPropagation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ConstantAndCopyPropagation.java @@ -232,6 +232,7 @@ private Map calculateKnowledge(ControlFlowGraph cfg) { Map knowledge = new java.util.HashMap<>(); // initialize with empty knowledge: + for (Node n : cfg.getNodes()) { knowledge.put(n, new Knowledge()); } @@ -270,7 +271,6 @@ private Map calculateKnowledge(ControlFlowGraph cfg) { } } } - // at the output get all from the input knowledge HashMap newOut = newKnowledge; @@ -279,7 +279,7 @@ private Map calculateKnowledge(ControlFlowGraph cfg) { ImSet imSet = (ImSet) stmt; if (imSet.getLeft() instanceof ImVarAccess) { ImVar var = ((ImVarAccess) imSet.getLeft()).getVar(); - if (!var.isGlobal()) { + if (var != null && !var.isGlobal()) { Value newValue = null; ImExpr right = imSet.getRight(); if (right instanceof ImConst) { @@ -360,7 +360,6 @@ private Map calculateKnowledge(ControlFlowGraph cfg) { if (!kn.varKnowledgeOut.equals(newOut)) { todo.addAll(n.getSuccessors()); } - // update knowledge kn.varKnowledge = newKnowledge; kn.varKnowledgeOut = newOut; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPos.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPos.java index 6a020e389..1eb619348 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPos.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPos.java @@ -78,8 +78,9 @@ public String print() { return "[" + file + " line " + getLine() + "]"; } + private static final Pattern p = Pattern.compile("^.*[/\\\\]([^/\\\\]+)\\.[^.]*$"); + public String printShort() { - Pattern p = Pattern.compile("^.*[/\\\\]([^/\\\\]+)\\.[^.]*$"); String shortFile = file; Matcher m = p.matcher(file); if (m.find()) { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/BugTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/BugTests.java index 1632c4408..2e8febbf1 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/BugTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/BugTests.java @@ -1393,4 +1393,17 @@ public void agentTypeComparisonsWurst() { ); } + @Test + public void minusRewrite() { + testAssertOkLines(true, + "package Test", + "native testSuccess()", + "init", + " let i = 0 - 100", + " if i == -100", + " testSuccess()" + ); + } + + } From 5d80c7a6882d66102fc202a628ed6de8c6048e55 Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 18 Oct 2023 16:20:22 +0200 Subject: [PATCH 48/74] Update deps, improve performance, JHCR fixes (#1080) - update dependencies - update stdlib verison for unit tests - only apply nullsetting when `-opt` is enabled to save some build time for testing - minor performance improvements - make build deterministic - apply build map config before compilation - hot code reload now more reliable --- .circleci/config.yml | 2 +- de.peeeq.wurstscript/build.gradle | 25 ++- .../de/peeeq/wurstio/CompilationProcess.java | 2 + .../wurstio/CompiletimeFunctionRunner.java | 8 +- .../peeeq/wurstio/WurstCompilerJassImpl.java | 2 +- .../providers/HandleProvider.java | 6 +- .../providers/HashtableProvider.java | 22 +- .../languageserver/ProjectConfigBuilder.java | 52 +++-- .../languageserver/requests/BuildMap.java | 5 +- .../languageserver/requests/MapRequest.java | 188 +++++++++++------- .../languageserver/requests/RunMap.java | 25 +-- .../languageserver/requests/RunTests.java | 2 + .../java/de/peeeq/wurstscript/RunArgs.java | 2 +- .../imtranslation/CyclicFunctionRemover.java | 35 ++-- .../translation/imtranslation/ImPrinter.java | 2 +- .../imtranslation/ImTranslator.java | 39 ++-- .../java/tests/wurstscript/tests/StdLib.java | 2 +- 17 files changed, 246 insertions(+), 173 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b789826c2..dbab68aca 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ jobs: build: docker: # specify the version you desire here - - image: circleci/openjdk:8-jdk + - image: cimg/openjdk:11.0 # Specify service dependencies here if necessary # CircleCI maintains a library of pre-built images diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index e128988c2..05a1c2003 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -32,7 +32,7 @@ version = "1.8.1.0" java { toolchain { - languageVersion.set(JavaLanguageVersion.of(8)) + languageVersion.set(JavaLanguageVersion.of(11)) } } @@ -70,19 +70,21 @@ repositories { } dependencies { + implementation 'org.jetbrains:annotations:23.0.0' + // Antlr parsing library - antlr "org.antlr:antlr4:4.9.3" + antlr "org.antlr:antlr4:4.13.1" // tool for generating AST-classes - compileOnly 'com.github.peterzeller:abstractsyntaxgen:0.3.2' + compileOnly 'com.github.peterzeller:abstractsyntaxgen:062a7ff178' // JUnit for testing - testImplementation group: 'org.testng', name: 'testng', version: '6.14.3' + testImplementation group: 'org.testng', name: 'testng', version: '7.8.0' testImplementation group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' // Google guava - implementation 'com.google.guava:guava:31.1-jre' + implementation 'com.google.guava:guava:32.1.3-jre' // Better functional data structures: implementation 'io.vavr:vavr:0.10.4' @@ -94,7 +96,7 @@ dependencies { implementation group: 'org.eclipse.jdt', name: 'org.eclipse.jdt.annotation', version: '2.1.0' // Gson for json parsing - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1' // Velocity template engine for generating Html documents from Hotdoc documentation implementation group: 'org.apache.velocity', name: 'velocity', version: '1.7' @@ -103,16 +105,19 @@ dependencies { implementation group: 'net.sourceforge.jchardet', name: 'jchardet', version: '1.0' // Crigges' jmpq - implementation group: 'com.github.inwc3', name: 'jmpq3', version: 'b4ef7121a4' + implementation group: 'com.github.inwc3', name: 'jmpq3', version: '264c54cfc8' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:2d190647ae' + implementation 'com.github.inwc3:wc3libs:ad25440d15' // The setup tool for wurst.build handling - implementation 'com.github.wurstscript:wurstsetup:4c65824b40' + implementation 'com.github.wurstscript:wurstsetup:475cc7fae8' implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' - implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' + implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.4.11' + + implementation group: 'org.eclipse.jgit', name: 'org.eclipse.jgit', version: '6.7.0.202309050840-r' + implementation group: 'org.eclipse.jgit', name: 'org.eclipse.jgit.ssh.apache', version: '6.7.0.202309050840-r' // Smallcheck testing library: testImplementation group: 'com.github.peterzeller', name: 'java-smallcheck', version: '3f6a178ba7' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java index a831d97db..58bfbf774 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java @@ -1,5 +1,6 @@ package de.peeeq.wurstio; +import config.WurstProjectBuildMapData; import config.WurstProjectConfigData; import de.peeeq.wurstio.languageserver.requests.RunTests; import de.peeeq.wurstio.mpq.MpqEditor; @@ -19,6 +20,7 @@ import java.io.File; import java.io.IOException; import java.io.PrintStream; +import java.util.ArrayList; import java.util.Optional; import java.util.function.Supplier; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java index cda1827e0..17cc3ead5 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java @@ -1,7 +1,7 @@ package de.peeeq.wurstio; import com.google.common.base.Preconditions; -import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import config.WurstProjectConfigData; @@ -317,9 +317,9 @@ public ImVar initFor(IlConstHandle a) { ImExpr init; Object obj = a.getObj(); - if (obj instanceof ArrayListMultimap) { + if (obj instanceof LinkedListMultimap) { @SuppressWarnings("unchecked") - ArrayListMultimap map = (ArrayListMultimap) obj; + LinkedListMultimap map = (LinkedListMultimap) obj; ImType type = TypesHelper.imHashTable(); ImVar res = JassIm.ImVar(trace, type, type + "_compiletime", false); imProg.getGlobals().add(res); @@ -411,7 +411,7 @@ private void addCompiletimeStateInit(ImStmt stmt) { * Stores a hashtable value in a compiletime expression * by generating the respective native calls */ - private ImExpr constantToExprHashtable(Element trace, ImVar htVar, IlConstHandle handle, ArrayListMultimap map) { + private ImExpr constantToExprHashtable(Element trace, ImVar htVar, IlConstHandle handle, LinkedListMultimap map) { WPos errorPos = trace.attrErrorPos(); // we have to collect all values after all compiletime functions have run, so use delayedActions delayedActions.add(() -> { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index ece00a186..edece8449 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -472,7 +472,7 @@ public JassProg transformProgToJass() { // remove cycles: beginPhase(8, "remove cyclic functions"); - new CyclicFunctionRemover(imTranslator2, imProg2).work(); + new CyclicFunctionRemover(imTranslator2, imProg2, timeTaker).work(); printDebugImProg("./test-output/im " + stage++ + "_nocyc.im"); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HandleProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HandleProvider.java index da0840536..81e30a0ed 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HandleProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HandleProvider.java @@ -4,14 +4,18 @@ import de.peeeq.wurstscript.intermediatelang.IlConstHandle; import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; +import java.util.LinkedHashMap; + public class HandleProvider extends Provider { + private int handleCounter = 0; + private LinkedHashMap handleMap = new LinkedHashMap<>(); public HandleProvider(AbstractInterpreter interpreter) { super(interpreter); } public ILconstInt GetHandleId(IlConstHandle handle) { - return ILconstInt.create(handle.hashCode()); + return handleMap.computeIfAbsent(handle,(_key) -> ILconstInt.create(handleCounter++)); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HashtableProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HashtableProvider.java index 0692e0e3e..1a901e1a8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HashtableProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HashtableProvider.java @@ -1,6 +1,6 @@ package de.peeeq.wurstio.jassinterpreter.providers; -import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.LinkedListMultimap; import de.peeeq.wurstio.jassinterpreter.Implements; import de.peeeq.wurstscript.intermediatelang.*; import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; @@ -45,7 +45,7 @@ public int getChildkey() { } public IlConstHandle InitHashtable() { - return new IlConstHandle(NameProvider.getRandomName("ht"), ArrayListMultimap.create()); + return new IlConstHandle(NameProvider.getRandomName("ht"), LinkedListMultimap.create()); } @Implements(funcNames = {"SaveInteger", "SaveStr", "SaveReal", "SaveBoolean", "SavePlayerHandle", "SaveWidgetHandle", "SaveDestructableHandle", @@ -59,7 +59,7 @@ public IlConstHandle InitHashtable() { }) public void Save(IlConstHandle ht, ILconstInt key1, ILconstInt key2, ILconst value) { @SuppressWarnings("unchecked") - ArrayListMultimap map = (ArrayListMultimap) ht.getObj(); + LinkedListMultimap map = (LinkedListMultimap) ht.getObj(); KeyPair keyPair = new KeyPair(key1.getVal(), key2.getVal()); deleteIfPresent(map, keyPair, value.getClass()); map.put(keyPair, value); @@ -94,13 +94,13 @@ public IlConstHandle LoadHandle(IlConstHandle ht, ILconstInt key1, ILconstInt ke public void FlushParentHashtable(IlConstHandle ht) { @SuppressWarnings("unchecked") - ArrayListMultimap map = (ArrayListMultimap) ht.getObj(); + LinkedListMultimap map = (LinkedListMultimap) ht.getObj(); map.clear(); } public void FlushChildHashtable(IlConstHandle ht, ILconstInt parentKey) { @SuppressWarnings("unchecked") - ArrayListMultimap map = (ArrayListMultimap) ht.getObj(); + LinkedListMultimap map = (LinkedListMultimap) ht.getObj(); map.entries().removeIf(entry -> entry.getKey().parentkey == parentKey.getVal()); } @@ -146,7 +146,7 @@ public ILconstBool HaveSavedHandle(IlConstHandle ht, ILconstInt key1, ILconstInt private T load(IlConstHandle ht, ILconstInt key1, ILconstInt key2, Class clazz) { @SuppressWarnings("unchecked") - ArrayListMultimap map = (ArrayListMultimap) ht.getObj(); + LinkedListMultimap map = (LinkedListMultimap) ht.getObj(); KeyPair keyPair = new KeyPair(key1.getVal(), key2.getVal()); if (hasValueOfType(map, keyPair, clazz)) { return getValueOfType(map, keyPair, clazz); @@ -156,19 +156,19 @@ private T load(IlConstHandle ht, ILconstInt key1, ILconstInt key2, Class private void removeSaved(IlConstHandle ht, ILconstInt key1, ILconstInt key2, T type) { @SuppressWarnings("unchecked") - ArrayListMultimap map = (ArrayListMultimap) ht.getObj(); + LinkedListMultimap map = (LinkedListMultimap) ht.getObj(); KeyPair keyPair = new KeyPair(key1.getVal(), key2.getVal()); deleteIfPresent(map, keyPair, type); } private boolean haveSaved(IlConstHandle ht, ILconstInt key1, ILconstInt key2, Class clazz) { @SuppressWarnings("unchecked") - ArrayListMultimap map = (ArrayListMultimap) ht.getObj(); + LinkedListMultimap map = (LinkedListMultimap) ht.getObj(); KeyPair keyPair = new KeyPair(key1.getVal(), key2.getVal()); return hasValueOfType(map, keyPair, clazz); } - private static T getValueOfType(ArrayListMultimap map, KeyPair key, Class clazz) { + private static T getValueOfType(LinkedListMultimap map, KeyPair key, Class clazz) { for (Object o : map.get(key)) { if (o.getClass() == clazz) { return (T) o; @@ -177,7 +177,7 @@ private static T getValueOfType(ArrayListMultimap map, KeyP return null; } - private static boolean hasValueOfType(ArrayListMultimap map, KeyPair key, Class type) { + private static boolean hasValueOfType(LinkedListMultimap map, KeyPair key, Class type) { for (Object o : map.get(key)) { if (o.getClass() == type) { return true; @@ -186,7 +186,7 @@ private static boolean hasValueOfType(ArrayListMultimap map return false; } - private static void deleteIfPresent(ArrayListMultimap map, KeyPair key, T type) { + private static void deleteIfPresent(LinkedListMultimap map, KeyPair key, T type) { Object toRemove = null; for (Object o : map.get(key)) { if (o.getClass() == type) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java index 211c65f58..847ea0301 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java @@ -2,7 +2,7 @@ import com.google.common.io.Files; import config.*; -import de.peeeq.wurstio.Pjass; +import de.peeeq.wurstio.languageserver.requests.MapRequest; import de.peeeq.wurstio.languageserver.requests.RequestFailedException; import de.peeeq.wurstio.mpq.MpqEditor; import de.peeeq.wurstio.mpq.MpqEditorFactory; @@ -31,15 +31,16 @@ public class ProjectConfigBuilder { public static final String FILE_NAME = "wurst.build"; - public static void apply(WurstProjectConfigData projectConfig, File targetMap, File compiledScript, File buildDir, - RunArgs runArgs, W3InstallationData w3data) throws IOException { + public static MapRequest.CompilationResult apply(WurstProjectConfigData projectConfig, File targetMap, File compiledScript, File buildDir, + RunArgs runArgs, W3InstallationData w3data) throws IOException { if (projectConfig.getProjectName().isEmpty()) { throw new RequestFailedException(MessageType.Error, "wurst.build is missing projectName."); } + MapRequest.CompilationResult result = new MapRequest.CompilationResult(); try (MpqEditor mpq = MpqEditorFactory.getEditor(Optional.of(targetMap))) { - File file = new File(buildDir, "wc3libs_injected.j"); + result.script = new File(buildDir, "wa3mapj_with_config.j.txt"); byte[] scriptBytes; if (!projectConfig.getBuildMapData().getName().isEmpty()) { // Apply w3i config values @@ -47,8 +48,7 @@ public static void apply(WurstProjectConfigData projectConfig, File targetMap, F FileInputStream inputStream = new FileInputStream(compiledScript); StringWriter sw = new StringWriter(); - // TODO apply config for hot start before JHCR transformation - if (runArgs.isLua() || runArgs.isHotStartmap()) { + if (runArgs.isLua()) { w3I.injectConfigsInLuaScript(inputStream, sw); } else { if (w3data.getWc3PatchVersion().isPresent()) { @@ -63,42 +63,38 @@ public static void apply(WurstProjectConfigData projectConfig, File targetMap, F } scriptBytes = sw.toString().getBytes(StandardCharsets.UTF_8); - File w3iFile = new File("w3iFile"); + result.w3i = new File(buildDir, "war3map.w3i"); if (runArgs.isLua()) { w3I.setScriptLang(W3I.ScriptLang.LUA); w3I.setFileVersion(W3I.EncodingFormat.W3I_0x1C.getVersion()); } - w3I.write(w3iFile); - - mpq.deleteFile("war3map.w3i"); - mpq.insertFile("war3map.w3i", java.nio.file.Files.readAllBytes(w3iFile.toPath())); - - w3iFile.delete(); + w3I.write(result.w3i); } else { scriptBytes = java.nio.file.Files.readAllBytes(compiledScript.toPath()); } - Files.write(scriptBytes, file); - if (!runArgs.isDisablePjass()) { - Pjass.runPjass(file, new File(buildDir, "common.j").getAbsolutePath(), - new File(buildDir, "blizzard.j").getAbsolutePath()); - } - String mapScriptName; - if (runArgs.isLua()) { - mapScriptName = "war3map.lua"; - } else { - mapScriptName = "war3map.j"; - } - mpq.deleteFile("war3map.lua"); - mpq.deleteFile("war3map.j"); - mpq.insertFile(mapScriptName, scriptBytes); + Files.write(scriptBytes, result.script); +// if (!runArgs.isDisablePjass()) { +// Pjass.runPjass(file, new File(buildDir, "common.j").getAbsolutePath(), +// new File(buildDir, "blizzard.j").getAbsolutePath()); +// } +// String mapScriptName; +// if (runArgs.isLua()) { +// mapScriptName = "war3map.lua"; +// } else { +// mapScriptName = "war3map.j"; +// } +// mpq.deleteFile("war3map.lua"); +// mpq.deleteFile("war3map.j"); +// mpq.insertFile(mapScriptName, scriptBytes); - file.delete(); } catch (Exception e) { throw new RuntimeException(e); } applyMapHeader(projectConfig, targetMap); + + return result; } private static W3I prepareW3I(WurstProjectConfigData projectConfig, MpqEditor mpq) throws Exception { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java index 48bd63c9e..f14a68b90 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java @@ -60,10 +60,9 @@ public Object execute(ModelManager modelManager) throws IOException { String fileName = projectConfig.getBuildMapData().getFileName(); Optional targetMap = Optional.of( new File(buildDir, fileName.isEmpty() ? projectConfig.getProjectName() + ".w3x" : fileName + ".w3x")); - File compiledScript = compileScript(modelManager, gui, targetMap, projectConfig, true); + CompilationResult result = compileScript(modelManager, gui, targetMap, projectConfig, buildDir, true); - gui.sendProgress("Applying Map Config..."); - ProjectConfigBuilder.apply(projectConfig, targetMap.get(), compiledScript, buildDir, runArgs, w3data); + injectMapData(gui, targetMap, result); JMpqEditor finalizer = new JMpqEditor(targetMap.get(), MPQOpenOption.FORCE_V0); finalizer.close(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 630368864..5fb7ade7b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -9,6 +9,7 @@ import de.peeeq.wurstio.WurstCompilerJassImpl; import de.peeeq.wurstio.languageserver.ConfigProvider; import de.peeeq.wurstio.languageserver.ModelManager; +import de.peeeq.wurstio.languageserver.ProjectConfigBuilder; import de.peeeq.wurstio.languageserver.WFile; import de.peeeq.wurstio.mpq.MpqEditor; import de.peeeq.wurstio.mpq.MpqEditorFactory; @@ -21,16 +22,13 @@ import de.peeeq.wurstscript.ast.WurstModel; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.gui.WurstGui; -import de.peeeq.wurstscript.intermediatelang.interpreter.ILInterpreter; -import de.peeeq.wurstscript.intermediatelang.optimizer.LocalMerger; -import de.peeeq.wurstscript.intermediatelang.optimizer.TempMerger; import de.peeeq.wurstscript.jassAst.JassProg; import de.peeeq.wurstscript.jassprinter.JassPrinter; import de.peeeq.wurstscript.luaAst.LuaCompilationUnit; import de.peeeq.wurstscript.parser.WPos; -import de.peeeq.wurstscript.translation.imoptimizer.ImOptimizer; import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; +import net.moonlightflower.wc3libs.bin.app.W3I; import net.moonlightflower.wc3libs.port.Orient; import org.eclipse.lsp4j.MessageParams; import org.eclipse.lsp4j.MessageType; @@ -47,6 +45,7 @@ import java.time.Duration; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; public abstract class MapRequest extends UserRequest { @@ -58,15 +57,25 @@ public abstract class MapRequest extends UserRequest { protected final RunArgs runArgs; protected final Optional wc3Path; protected final W3InstallationData w3data; - private final TimeTaker timeTaker; + protected final TimeTaker timeTaker; /** * makes the compilation slower, but more safe by discarding results from the editor and working on a copy of the model */ protected SafetyLevel safeCompilation = SafetyLevel.KindOfSafe; + public TimeTaker getTimeTaker() { + return timeTaker; + } + + enum SafetyLevel { - QuickAndDirty, KindOfSafe + QuickAndDirty, KindOfSafe; + } + + public static class CompilationResult { + public File script; + public File w3i; } public MapRequest(ConfigProvider configProvider, Optional map, List compileArgs, WFile workspaceRoot, @@ -96,60 +105,6 @@ public void handleException(LanguageClient languageClient, Throwable err, Comple } } - protected void processMapScript( - RunArgs runArgs, WurstGui gui, ModelManager modelManager, Optional mapCopy) throws Exception { - File existingScript = new File(new File(workspaceRoot.getFile(), "wurst"), "war3map.j"); - // If runargs are no extract, either use existing or throw error - // Otherwise try loading from map, if map was saved with wurst, try existing script, otherwise error - if (!mapCopy.isPresent() || runArgs.isNoExtractMapScript()) { - if (existingScript.exists()) { - modelManager.syncCompilationUnit(WFile.create(existingScript)); - return; - } else { - throw new CompileError(new WPos("", new LineOffsets(), 0, 0), - "RunArg noExtractMapScript is set but no mapscript is provided inside the wurst folder"); - } - } - WLogger.info("extracting mapscript"); - byte[] extractedScript = null; - try (@Nullable MpqEditor mpqEditor = MpqEditorFactory.getEditor(mapCopy, true)) { - if (mpqEditor.hasFile("war3map.j")) { - extractedScript = mpqEditor.extractFile("war3map.j"); - } - } - if (extractedScript == null) { - if (existingScript.exists()) { - String msg = "No war3map.j in map file, using old extracted file"; - WLogger.info(msg); - } else { - CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), - "No war3map.j found in map file."); - gui.showInfoMessage(err.getMessage()); - WLogger.severe(err); - } - } else if (new String(extractedScript, StandardCharsets.UTF_8).startsWith(JassPrinter.WURST_COMMENT_RAW)) { - WLogger.info("map has already been compiled with wurst"); - // file generated by wurst, do not use - if (existingScript.exists()) { - String msg = "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Using war3map.j from Wurst directory instead."; - WLogger.info(msg); - } else { - CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), - "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Please add war3map.j to the wurst directory."); - gui.showInfoMessage(err.getMessage()); - WLogger.severe(err); - } - } else { - WLogger.info("new map, use extracted"); - // write mapfile from map to workspace - Files.write(extractedScript, existingScript); - } - - // push war3map.j to modelmanager - - modelManager.syncCompilationUnit(WFile.create(existingScript)); - } - protected File compileMap(File projectFolder, WurstGui gui, Optional mapCopy, RunArgs runArgs, WurstModel model, WurstProjectConfigData projectConfigData, boolean isProd) { try (@Nullable MpqEditor mpqEditor = MpqEditorFactory.getEditor(mapCopy)) { @@ -194,7 +149,6 @@ protected File compileMap(File projectFolder, WurstGui gui, Optional mapCo File buildDir = getBuildDir(); File outFile = new File(buildDir, "compiled.lua"); Files.write(compiledMapScript.getBytes(Charsets.UTF_8), outFile); - timeTaker.printReport(); return outFile; } else { @@ -232,7 +186,6 @@ protected File compileMap(File projectFolder, WurstGui gui, Optional mapCo gui.sendProgress("Running JHCR"); return runJassHotCodeReload(outFile); } - timeTaker.printReport(); return outFile; } } catch (Exception e) { @@ -326,14 +279,15 @@ protected void println(String s) { protected File compileScript(WurstGui gui, ModelManager modelManager, List compileArgs, Optional mapCopy, - WurstProjectConfigData projectConfigData, boolean isProd) throws Exception { + WurstProjectConfigData projectConfigData, boolean isProd, File scriptFile) throws Exception { RunArgs runArgs = new RunArgs(compileArgs); + gui.sendProgress("Compiling Script"); print("Compile Script : "); for (File dep : modelManager.getDependencyWurstFiles()) { WLogger.info("dep: " + dep.getPath()); } print("Dependencies done."); - processMapScript(runArgs, gui, modelManager, mapCopy); + modelManager.syncCompilationUnit(WFile.create(scriptFile)); print("Processed mapscript"); if (safeCompilation != RunMap.SafetyLevel.QuickAndDirty) { // it is safer to rebuild the project, instead of taking the current editor state @@ -360,7 +314,7 @@ protected File compileScript(WurstGui gui, ModelManager modelManager, List testMap, WurstProjectConfigData projectConfigData, boolean isProd) throws Exception { + protected CompilationResult compileScript(ModelManager modelManager, WurstGui gui, Optional testMap, WurstProjectConfigData projectConfigData, File buildDir, boolean isProd) throws Exception { if (testMap.isPresent() && testMap.get().exists()) { boolean deleteOk = testMap.get().delete(); if (!deleteOk) { @@ -371,8 +325,24 @@ protected File compileScript(ModelManager modelManager, WurstGui gui, Optional model = Optional.ofNullable(modelManager.getModel()); if (!model.isPresent() @@ -384,7 +354,71 @@ protected File compileScript(ModelManager modelManager, WurstGui gui, Optional mapCopy, ModelManager modelManager, WurstGui gui) throws Exception { + File scriptFile = new File(new File(workspaceRoot.getFile(), "wurst"), "war3map.j"); + // If runargs are no extract, either use existing or throw error + // Otherwise try loading from map, if map was saved with wurst, try existing script, otherwise error + if (!mapCopy.isPresent() || runArgs.isNoExtractMapScript()) { + if (scriptFile.exists()) { + modelManager.syncCompilationUnit(WFile.create(scriptFile)); + return scriptFile; + } else { + throw new CompileError(new WPos("", new LineOffsets(), 0, 0), + "RunArg noExtractMapScript is set but no mapscript is provided inside the wurst folder"); + } + } + WLogger.info("extracting mapscript"); + byte[] extractedScript = null; + try (@Nullable MpqEditor mpqEditor = MpqEditorFactory.getEditor(mapCopy, true)) { + if (mpqEditor.hasFile("war3map.j")) { + extractedScript = mpqEditor.extractFile("war3map.j"); + } + } + if (extractedScript == null) { + if (scriptFile.exists()) { + String msg = "No war3map.j in map file, using old extracted file"; + WLogger.info(msg); + } else { + CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), + "No war3map.j found in map file."); + gui.showInfoMessage(err.getMessage()); + WLogger.severe(err); + } + } else if (new String(extractedScript, StandardCharsets.UTF_8).startsWith(JassPrinter.WURST_COMMENT_RAW)) { + WLogger.info("map has already been compiled with wurst"); + // file generated by wurst, do not use + if (scriptFile.exists()) { + String msg = "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Using war3map.j from Wurst directory instead."; + WLogger.info(msg); + } else { + CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), + "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Please add war3map.j to the wurst directory."); + gui.showInfoMessage(err.getMessage()); + WLogger.severe(err); + } + } else { + WLogger.info("new map, use extracted"); + // write mapfile from map to workspace + Files.write(extractedScript, scriptFile); + } + + return scriptFile; + } + + private CompilationResult applyProjectConfig(WurstGui gui, Optional testMap, File buildDir, WurstProjectConfigData projectConfig, File scriptFile) throws FileNotFoundException { + AtomicReference result = new AtomicReference<>(); + gui.sendProgress("Applying Map Config..."); + timeTaker.measure("Applying Map Config", () -> { + try { + result.set(ProjectConfigBuilder.apply(projectConfig, testMap.get(), scriptFile, buildDir, runArgs, w3data)); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + return result.get(); } private W3InstallationData getBestW3InstallationData() throws RequestFailedException { @@ -403,4 +437,24 @@ private W3InstallationData getBestW3InstallationData() throws RequestFailedExcep return new W3InstallationData(); } } + + protected void injectMapData(WurstGui gui, Optional testMap, CompilationResult result) throws Exception { + gui.sendProgress("Injecting map data"); + try (MpqEditor mpqEditor = MpqEditorFactory.getEditor(testMap)) { + String mapScriptName; + if (runArgs.isLua()) { + mapScriptName = "war3map.lua"; + } else { + mapScriptName = "war3map.j"; + } + // delete both original mapscripts, just to be sure: + mpqEditor.deleteFile("war3map.j"); + mpqEditor.deleteFile("war3map.lua"); + if (result.w3i != null) { + mpqEditor.deleteFile(W3I.GAME_PATH.getName()); + mpqEditor.insertFile(W3I.GAME_PATH.getName(), result.w3i); + } + mpqEditor.insertFile(mapScriptName, result.script); + } + } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java index 7d63934d9..12259a201 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java @@ -4,6 +4,7 @@ import com.google.common.io.Files; import config.WurstProjectConfig; import config.WurstProjectConfigData; +import de.peeeq.wurstio.TimeTaker; import de.peeeq.wurstio.gui.WurstGuiImpl; import de.peeeq.wurstio.languageserver.ConfigProvider; import de.peeeq.wurstio.languageserver.ModelManager; @@ -15,6 +16,7 @@ import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.utils.Utils; +import net.moonlightflower.wc3libs.bin.app.W3I; import net.moonlightflower.wc3libs.port.GameVersion; import net.moonlightflower.wc3libs.port.Orient; import org.apache.commons.lang.RandomStringUtils; @@ -84,12 +86,12 @@ public Object execute(ModelManager modelManager) throws IOException { // first we copy in same location to ensure validity File buildDir = getBuildDir(); Optional testMap = map.map($ -> new File(buildDir, "WurstRunMap.w3x")); - File compiledScript = compileScript(modelManager, gui, testMap, projectConfig, false); + CompilationResult result = compileScript(modelManager, gui, testMap, projectConfig, buildDir, false); if (runArgs.isHotReload()) { // call jhcr update gui.sendProgress("Calling JHCR update"); - callJhcrUpdate(compiledScript); + callJhcrUpdate(result.script); // if we are just reloading the mapscript with JHCR, we are done here gui.sendProgress("update complete"); @@ -98,26 +100,12 @@ public Object execute(ModelManager modelManager) throws IOException { if (testMap.isPresent()) { - // then inject the script into the map - gui.sendProgress("Injecting mapscript"); - try (MpqEditor mpqEditor = MpqEditorFactory.getEditor(testMap)) { - String mapScriptName; - if (runArgs.isLua()) { - mapScriptName = "war3map.lua"; - } else { - mapScriptName = "war3map.j"; - } - // delete both original mapscripts, just to be sure: - mpqEditor.deleteFile("war3map.j"); - mpqEditor.deleteFile("war3map.lua"); - mpqEditor.insertFile(mapScriptName, compiledScript); - } - gui.sendProgress("Applying Map Config..."); - ProjectConfigBuilder.apply(projectConfig, testMap.get(), compiledScript, buildDir, runArgs, w3data); + injectMapData(gui, testMap, result); File mapCopy = copyToWarcraftMapDir(testMap.get()); + gui.sendProgress("Starting Warcraft 3..."); WLogger.info("Starting wc3 ... "); String path = ""; if (customTarget != null) { @@ -158,6 +146,7 @@ public Object execute(ModelManager modelManager) throws IOException { gui.sendProgress("running " + cmd); Runtime.getRuntime().exec(cmd.toArray(new String[0])); + timeTaker.printReport(); } } } catch (CompileError e) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java index 01f7cbeac..e3acdb605 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java @@ -2,6 +2,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; +import config.WurstProjectBuildMapData; import config.WurstProjectConfigData; import de.peeeq.wurstio.CompiletimeFunctionRunner; import de.peeeq.wurstio.jassinterpreter.InterpreterException; @@ -27,6 +28,7 @@ import org.eclipse.lsp4j.MessageType; import java.io.*; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.*; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java index e4199f655..aea11f959 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java @@ -255,7 +255,7 @@ public boolean createHotDoc() { } public boolean isNullsetting() { - return true; + return isOptimize(); } public boolean isLocalOptimizations() { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java index 74c9c1301..5c0bfff8c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java @@ -4,11 +4,13 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import de.peeeq.datastructures.GraphInterpreter; +import de.peeeq.wurstio.TimeTaker; import de.peeeq.wurstscript.WurstOperator; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.types.WurstTypeInt; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; /** * Removes cyclic functions from a program @@ -18,29 +20,36 @@ public class CyclicFunctionRemover { private ImProg prog; + private TimeTaker timeTaker; private ImTranslator tr; private ImFuncGraph graph; - public CyclicFunctionRemover(ImTranslator tr, ImProg prog) { + public CyclicFunctionRemover(ImTranslator tr, ImProg prog, TimeTaker timeTaker) { this.tr = tr; this.prog = prog; + this.timeTaker = timeTaker; this.graph = new ImFuncGraph(); } public void work() { tr.calculateCallRelationsAndUsedVariables(); - Set> components = graph.findStronglyConnectedComponents(prog.getFunctions()); + AtomicReference>> components = new AtomicReference<>(); + timeTaker.measure("finding cycles", () -> components.set(graph.findStronglyConnectedComponents(prog.getFunctions()))); - for (Set component : components) { + timeTaker.measure("removing cycles", () -> removeCycles(components)); + } + + private void removeCycles(AtomicReference>> components) { + for (Set component : components.get()) { if (component.size() > 1) { - removeCycle(ImmutableList.copyOf(component)); + removeCycle(ImmutableList.copyOf(component), component); } } } - private void removeCycle(List funcs) { + private void removeCycle(List funcs, Set funcSet) { List newParameters = Lists.newArrayList(); - Map oldToNewVar = Maps.newHashMap(); + Map oldToNewVar = Maps.newLinkedHashMap(); calculateNewParameters(funcs, newParameters, oldToNewVar); @@ -81,7 +90,7 @@ private void removeCycle(List funcs) { stmts = elseBlock; } - replaceCalls(funcs, newFunc, oldToNewVar, prog); + replaceCalls(funcs, funcSet, newFunc, oldToNewVar, prog); for (ImFunction e : Lists.newArrayList(tr.getCalledFunctions().keys())) { Collection called = tr.getCalledFunctions().get(e); @@ -111,17 +120,17 @@ private void replaceVars(Element e, Map oldToNewVar) { } - private void replaceCalls(List funcs, ImFunction newFunc, Map oldToNewVar, Element e) { + private void replaceCalls(List funcs, Set funcSet, ImFunction newFunc, Map oldToNewVar, Element e) { // process children for (int i = 0; i < e.size(); i++) { - replaceCalls(funcs, newFunc, oldToNewVar, e.get(i)); + replaceCalls(funcs, funcSet, newFunc, oldToNewVar, e.get(i)); } if (e instanceof ImFuncRef) { ImFuncRef fr = (ImFuncRef) e; ImFunction f = fr.getFunc(); - if (funcs.contains(f)) { + if (funcSet.contains(f)) { ImFunction proxyFunc = JassIm.ImFunction(f.attrTrace(), f.getName() + "_proxy", JassIm.ImTypeVars(), f.getParameters().copy(), (ImType) f.getReturnType().copy(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); prog.getFunctions().add(proxyFunc); @@ -139,14 +148,14 @@ private void replaceCalls(List funcs, ImFunction newFunc, Map tempReturnVars = Maps.newHashMap(); + private Map tempReturnVars = Maps.newLinkedHashMap(); private ImVar getTempReturnVar(ImType t) { String typeName = t.translateType(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java index 94d8376c1..1ac7fd165 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java @@ -519,7 +519,7 @@ public static void print(ImTypeVarRef e, Appendable sb, int indent) { public static void print(ImClassType ct, Appendable sb, int indent) { append(sb, ct.getClassDef().getName()); - append(sb, smallHash(ct.getClassDef())); + //append(sb, smallHash(ct.getClassDef())); ImTypeArguments typeArguments = ct.getTypeArguments(); printTypeArguments(typeArguments, indent, sb); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java index 033b0fabd..2ebc36510 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java @@ -5,7 +5,6 @@ import com.google.common.collect.ImmutableList.Builder; import de.peeeq.datastructures.Partitions; import de.peeeq.datastructures.TransitiveClosure; -import de.peeeq.wurstio.utils.FileUtils; import de.peeeq.wurstscript.RunArgs; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.WurstOperator; @@ -27,6 +26,7 @@ import de.peeeq.wurstscript.jassIm.ImMethod; import de.peeeq.wurstscript.jassIm.ImProg; import de.peeeq.wurstscript.jassIm.ImReturn; +import de.peeeq.wurstscript.jassIm.ImSet; import de.peeeq.wurstscript.jassIm.ImSimpleType; import de.peeeq.wurstscript.jassIm.ImStmts; import de.peeeq.wurstscript.jassIm.ImTupleType; @@ -1042,7 +1042,7 @@ public Multimap getCalledFunctions() { } public void calculateCallRelationsAndUsedVariables() { - callRelations = HashMultimap.create(); + callRelations = LinkedHashMultimap.create(); usedVariables = Sets.newLinkedHashSet(); readVariables = Sets.newLinkedHashSet(); usedFunctions = Sets.newLinkedHashSet(); @@ -1060,23 +1060,36 @@ public void calculateCallRelationsAndUsedVariables() { }); } - private void calculateCallRelations(ImFunction f) { - if (getUsedFunctions().contains(f)) { + private void calculateCallRelations(ImFunction rootFunction) { + // Early return if rootFunction is already processed + if (getUsedFunctions().contains(rootFunction)) { return; } - getUsedFunctions().add(f); - getUsedVariables().addAll(f.calcUsedVariables()); - getReadVariables().addAll(f.calcReadVariables()); + Stack functionStack = new Stack<>(); + functionStack.push(rootFunction); - Set calledFuncs = f.calcUsedFunctions(); - for (ImFunction called : calledFuncs) { - if (f != called) { // ignore reflexive call relations - getCallRelations().put(f, called); + while (!functionStack.isEmpty()) { + ImFunction f = functionStack.pop(); + + // If the function is already processed, skip the remaining logic + // in this iteration + if (getUsedFunctions().contains(f)) { + continue; } - calculateCallRelations(called); - } + getUsedFunctions().add(f); + getUsedVariables().addAll(f.calcUsedVariables()); + getReadVariables().addAll(f.calcReadVariables()); + + Set calledFuncs = f.calcUsedFunctions(); + for (ImFunction called : calledFuncs) { + if (f != called) { // ignore reflexive call relations + getCallRelations().put(f, called); + } + functionStack.push(called); + } + } } private Multimap getCallRelations() { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java index 315cc154a..fbe6bd4bd 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java @@ -23,7 +23,7 @@ public class StdLib { /** * version to use for the tests */ - private final static String version = "4404eea032ce148e51edeeb95cdf99d5e384bfb4"; + private final static String version = "6107c40e64fa646a016e8c446026f2f5cf3f2a1e"; /** * flag so that initialization in only done once From 66b805ee90059b173e8c8df43d033c209e0fbac0 Mon Sep 17 00:00:00 2001 From: Frotty Date: Thu, 19 Oct 2023 13:41:25 +0200 Subject: [PATCH 49/74] fix JHCR war3map.j file handling --- .../wurstio/languageserver/ProjectConfigBuilder.java | 8 +++----- .../wurstio/languageserver/requests/MapRequest.java | 9 ++++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java index 847ea0301..245dbf63d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java @@ -38,11 +38,11 @@ public static MapRequest.CompilationResult apply(WurstProjectConfigData projectC } MapRequest.CompilationResult result = new MapRequest.CompilationResult(); - + result.script = compiledScript; try (MpqEditor mpq = MpqEditorFactory.getEditor(Optional.of(targetMap))) { - result.script = new File(buildDir, "wa3mapj_with_config.j.txt"); byte[] scriptBytes; if (!projectConfig.getBuildMapData().getName().isEmpty()) { + result.script = new File(buildDir, "war3mapj_with_config.j.txt"); // Apply w3i config values W3I w3I = prepareW3I(projectConfig, mpq); FileInputStream inputStream = new FileInputStream(compiledScript); @@ -69,11 +69,9 @@ public static MapRequest.CompilationResult apply(WurstProjectConfigData projectC w3I.setFileVersion(W3I.EncodingFormat.W3I_0x1C.getVersion()); } w3I.write(result.w3i); - } else { - scriptBytes = java.nio.file.Files.readAllBytes(compiledScript.toPath()); + Files.write(scriptBytes, result.script); } - Files.write(scriptBytes, result.script); // if (!runArgs.isDisablePjass()) { // Pjass.runPjass(file, new File(buildDir, "common.j").getAbsolutePath(), // new File(buildDir, "blizzard.j").getAbsolutePath()); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 5fb7ade7b..09bf28891 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -328,11 +328,14 @@ protected CompilationResult compileScript(ModelManager modelManager, WurstGui gu CompilationResult result; if (runArgs.isHotReload()) { - // For hot reload use cached war3map + // For hot reload use cached war3map if it exists result = new CompilationResult(); - result.script = new File(buildDir, "wa3mapj_with_config.j.txt"); + result.script = new File(buildDir, "war3mapj_with_config.j.txt"); if (!result.script.exists()) { - throw new RequestFailedException(MessageType.Error, "Could not find cached wa3mapj_with_config.j.txt file"); + result.script = new File(new File(workspaceRoot.getFile(), "wurst"), "war3map.j"); + } + if (!result.script.exists()) { + throw new RequestFailedException(MessageType.Error, "Could not find war3map.j file"); } } else { File scriptFile = loadMapScript(testMap, modelManager, gui); From 7cda368a96a593f8793fb4d733b81a8973175674 Mon Sep 17 00:00:00 2001 From: Henry Eklind Date: Fri, 27 Oct 2023 00:10:36 +0200 Subject: [PATCH 50/74] Jass And Wurst Formatter (#620) Support for formatting .wurst and .j files. Thanks @karlek Co-authored-by: Frotty Co-authored-by: Peter Zeller --- .../antlr/de/peeeq/wurstscript/antlr/Wurst.g4 | 4 +- .../src/main/java/de/peeeq/wurstio/Main.java | 6 + .../peeeq/wurstio/WurstCompilerJassImpl.java | 3 + .../languageserver/WurstLanguageServer.java | 4 +- .../WurstTextDocumentService.java | 18 +- .../java/de/peeeq/wurstscript/RunArgs.java | 7 + .../de/peeeq/wurstscript/WurstParser.java | 15 +- .../attributes/prettyPrint/PrettyPrinter.java | 857 +++++++++++++++--- .../attributes/prettyPrint/PrettyUtils.java | 125 +++ .../wurstscript/jassprinter/JassPrinter.java | 2 +- .../wurstscript/parser/WPosWithComments.java | 73 ++ .../antlr/AntlrWurstParseTreeTransformer.java | 112 ++- .../parser/antlr/ExtendedWurstLexer.java | 27 +- .../tests/prettyprint/PrettyPrintTest.java | 206 ++++- .../testscripts/pretty/Annotations.wurst | 13 + .../pretty/Assignment_shorthand.wurst | 12 + .../pretty/BinaryExprAndMethod.wurst | 6 + .../testscripts/pretty/Cascade.wurst | 7 + .../testscripts/pretty/Closures.wurst | 13 + .../testscripts/pretty/Comments.wurst | 15 + .../testscripts/pretty/Enum.wurst | 6 + .../pretty/FunctionDefinitions.wurst | 13 + .../testscripts/pretty/If.wurst | 16 + .../testscripts/pretty/Loops.wurst | 17 + .../testscripts/pretty/Real1.wurst | 51 ++ .../testscripts/pretty/Real2.wurst | 52 ++ .../testscripts/pretty/Real3.wurst | 67 ++ .../testscripts/pretty/Switch.wurst | 13 + .../testscripts/pretty/Ternary.wurst | 3 + 29 files changed, 1600 insertions(+), 163 deletions(-) create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyUtils.java create mode 100644 de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPosWithComments.java create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Annotations.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Assignment_shorthand.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/BinaryExprAndMethod.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Cascade.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Closures.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Comments.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Enum.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/FunctionDefinitions.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/If.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Loops.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Real1.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Real2.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Real3.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Switch.wurst create mode 100644 de.peeeq.wurstscript/testscripts/pretty/Ternary.wurst diff --git a/de.peeeq.wurstscript/src/main/antlr/de/peeeq/wurstscript/antlr/Wurst.g4 b/de.peeeq.wurstscript/src/main/antlr/de/peeeq/wurstscript/antlr/Wurst.g4 index 8bc9e740d..e3681dec8 100644 --- a/de.peeeq.wurstscript/src/main/antlr/de/peeeq/wurstscript/antlr/Wurst.g4 +++ b/de.peeeq.wurstscript/src/main/antlr/de/peeeq/wurstscript/antlr/Wurst.g4 @@ -604,5 +604,5 @@ TAB: [\t]+; SPACETAB:' ' ' '+; SPACES: ' ' -> skip; HOTDOC_COMMENT: '/**' .*? '*/'; -ML_COMMENT: '/*' .*? '*/' -> skip; -LINE_COMMENT: '//' ~[\r\n]* -> skip; +ML_COMMENT: '/*' .*? '*/' -> channel(2); +LINE_COMMENT: '//' ~[\r\n]* -> channel(2); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java index 031af11f0..105163aaf 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java @@ -17,6 +17,7 @@ import de.peeeq.wurstio.utils.W3InstallationData; import de.peeeq.wurstscript.*; import de.peeeq.wurstscript.attributes.CompileError; +import de.peeeq.wurstscript.attributes.prettyPrint.PrettyUtils; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.gui.WurstGuiCliImpl; import de.peeeq.wurstscript.utils.Utils; @@ -81,6 +82,11 @@ public static void main(String[] args) { return; } + if (runArgs.isPrettyPrint()) { + PrettyUtils.pretty(runArgs.getFiles()); + return; + } + WLogger.info("runArgs.isExtractImports() = " + runArgs.isExtractImports()); if (runArgs.isExtractImports()) { File mapFile = new File(runArgs.getMapFile()); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index edece8449..db26ef4af 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -750,6 +750,9 @@ public CompilationUnit parse(String fileName, Reader reader) { if (fileName.endsWith(".jurst")) { return parser.parseJurst(reader, fileName, hasCommonJ); } + if (runArgs.isPrettyPrint()) { + parser.setRemoveSugar(false); + } return parser.parse(reader, fileName, hasCommonJ); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstLanguageServer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstLanguageServer.java index f72915099..c755a5be3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstLanguageServer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstLanguageServer.java @@ -57,6 +57,7 @@ public CompletableFuture initialize(InitializeParams params) { capabilities.setCodeActionProvider(true); capabilities.setDocumentSymbolProvider(true); capabilities.setWorkspaceSymbolProvider(true); + capabilities.setDocumentFormattingProvider(true); capabilities.setColorProvider(true); capabilities.setCodeLensProvider(new CodeLensOptions(true)); capabilities.setFoldingRangeProvider(true); @@ -67,7 +68,6 @@ public CompletableFuture initialize(InitializeParams params) { System.err.println("initialization done!"); return CompletableFuture.completedFuture(res); } - private void setupLogger() { WLogger.setLogger("languageServer"); } @@ -79,7 +79,6 @@ public CompletableFuture shutdown() { return CompletableFuture.completedFuture("ok"); } - @Override public void exit() { System.exit(0); @@ -97,7 +96,6 @@ public WorkspaceService getWorkspaceService() { return new WurstWorkspaceService(this); } - @Override public void connect(LanguageClient client) { WLogger.info("connect to LanguageClient"); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstTextDocumentService.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstTextDocumentService.java index 48b2e4dcd..e26aefed6 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstTextDocumentService.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstTextDocumentService.java @@ -2,10 +2,14 @@ import de.peeeq.wurstio.languageserver.requests.*; import de.peeeq.wurstscript.WLogger; +import de.peeeq.wurstscript.attributes.prettyPrint.PrettyUtils; import org.eclipse.lsp4j.*; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.TextDocumentService; +import java.io.BufferedReader; +import java.io.FileReader; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -95,7 +99,19 @@ public CompletableFuture resolveCodeLens(CodeLens unresolved) { @Override public CompletableFuture> formatting(DocumentFormattingParams params) { WLogger.info("formatting"); - return null; + TextDocumentIdentifier doc = params.getTextDocument(); + String buffer = worker.getBufferManager().getBuffer(doc); + + String ending = doc.getUri().substring(doc.getUri().lastIndexOf(".")); + String clean = PrettyUtils.pretty(buffer, ending); + + String[] lines = buffer.split("\n"); + Range range = new Range(new Position(0, 0), new Position(lines.length, lines[lines.length-1].length())); + TextEdit textEdit = new TextEdit(range, clean); + + List edits = new ArrayList<>(); + edits.add(textEdit); + return CompletableFuture.completedFuture(edits); } @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java index aea11f959..6149e99e1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java @@ -46,6 +46,7 @@ public class RunArgs { private RunOption optionCopyMap; private RunOption optionDisablePjass; private RunOption optionShowVersion; + private RunOption optionPrettyPrint; private RunOption optionMeasureTimes; private RunOption optionHotStartmap; private RunOption optionHotReload; @@ -134,6 +135,8 @@ public RunArgs(String... args) { addOptionWithArg("functionSplitLimit", "The maximum number of operations in a function before it is split by the function splitter (used for compiletime functions)", s -> functionSplitLimit = Integer.parseInt(s, 10)); + optionPrettyPrint = addOption("prettyPrint", "Pretty print the input file, or all sub-directory if the given path is: '...'"); + nextArg: for (int i = 0; i < args.length; i++) { String a = args[i]; @@ -324,6 +327,10 @@ public boolean isRunTests() { return optionRuntests.isSet; } + public boolean isPrettyPrint() { + return optionPrettyPrint.isSet; + } + public int getTestTimeout() { return testTimeout; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java index 130ff72df..74be2c4d2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java @@ -31,12 +31,17 @@ public class WurstParser { private static final int MAX_SYNTAX_ERRORS = 15; private final ErrorHandler errorHandler; private final WurstGui gui; + private boolean removeSugar = true; public WurstParser(ErrorHandler errorHandler, WurstGui gui) { this.errorHandler = errorHandler; this.gui = gui; } + public void setRemoveSugar(boolean removeSugar) { + this.removeSugar = removeSugar; + } + public CompilationUnit parse(Reader reader, String source, boolean hasCommonJ) { return parseWithAntlr(reader, source, hasCommonJ); } @@ -116,8 +121,10 @@ public void syntaxError(@SuppressWarnings("null") Recognizer recognizer, @ gui.sendError(warning); } - CompilationUnit root = new AntlrWurstParseTreeTransformer(source, errorHandler, lexer.getLineOffsets()).transform(cu); - removeSyntacticSugar(root, hasCommonJ); + CompilationUnit root = new AntlrWurstParseTreeTransformer(source, errorHandler, lexer.getLineOffsets(), lexer.getCommentTokens(), true).transform(cu); + if (this.removeSugar) { + removeSyntacticSugar(root, hasCommonJ); + } root.getCuInfo().setIndentationMode(lexer.getIndentationMode()); return root; @@ -188,7 +195,9 @@ public void syntaxError(@SuppressWarnings("null") Recognizer recognizer, @ de.peeeq.wurstscript.jurst.antlr.JurstParser.CompilationUnitContext cu = parser.compilationUnit(); // begin parsing at init rule CompilationUnit root = new AntlrJurstParseTreeTransformer(source, errorHandler, lexer.getLineOffsets()).transform(cu); - removeSyntacticSugar(root, hasCommonJ); + if (this.removeSugar) { + removeSyntacticSugar(root, hasCommonJ); + } return root; } catch (IOException e) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyPrinter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyPrinter.java index 93bb07a9d..d7acf9dd8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyPrinter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyPrinter.java @@ -1,22 +1,17 @@ package de.peeeq.wurstscript.attributes.prettyPrint; import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.jassAst.*; import de.peeeq.wurstscript.utils.Utils; +import de.peeeq.wurstscript.parser.WPos; +import de.peeeq.wurstscript.parser.WPosWithComments; +import de.peeeq.wurstscript.parser.WPosWithComments.Comment; import org.apache.commons.lang.StringUtils; -public class PrettyPrinter { - - public static void prettyPrint(Annotation e, Spacer spacer, StringBuilder sb, int indent) { - sb.append(e.getAnnotationType()); - } - - public static void prettyPrint(Arguments e, Spacer spacer, StringBuilder sb, int indent) { - commaSeparatedList(e, spacer, sb, indent); - } +import static de.peeeq.wurstscript.jassprinter.JassPrinter.precedence; - public static void prettyPrint(ExprList e, Spacer spacer, StringBuilder sb, int indent) { - commaSeparatedList(e, spacer, sb, indent); - } +public class PrettyPrinter { private static void commaSeparatedList(Element e, Spacer spacer, StringBuilder sb, int indent) { for (int i = 0; i < e.size(); i++) { @@ -28,33 +23,86 @@ private static void commaSeparatedList(Element e, Spacer spacer, StringBuilder s } } - public static void prettyPrint(ArraySizes e, Spacer spacer, StringBuilder sb, int indent) { - commaSeparatedList(e, spacer, sb, indent); + private static void printClassOrModuleDeclaration(ClassOrModule e, Spacer spacer, StringBuilder sb, int indent) { + e.getModuleUses().prettyPrint(spacer, sb, indent); + e.getVars().prettyPrint(spacer, sb, indent); + e.getConstructors().prettyPrint(spacer, sb, indent); + e.getMethods().prettyPrint(spacer, sb, indent); + e.getOnDestroy().prettyPrint(spacer, sb, indent); + e.getInnerClasses().prettyPrint(spacer, sb, indent); } - public static void prettyPrint(ClassDef e, Spacer spacer, StringBuilder sb, int indent) { + private static void printFirstNewline(Element e, StringBuilder sb, int indent) { + // Don't add first new line. + if (e.getParent().get(0).equals(e)) { + return; + } + if (sb.charAt(sb.length() - 1) == '\n' && sb.charAt(sb.length() - 2) == '\n') { + return; + } sb.append("\n"); + } + + private static void printNewline(Element e, StringBuilder sb, int indent) { + // Don't add a newline unless we are directly under statements. + // Otherwise we would add newlines inside function calls, etc. + if (!(e.getParent() instanceof WStatements)) { + return; + } + sb.append("\n"); + } + + private static void printStuff(Documentable e, Spacer spacer, StringBuilder sb, int indent) { + printCommentsBefore(sb, e, indent); + printHotDoc(e.getModifiers(), spacer, sb, indent); printIndent(sb, indent); e.getModifiers().prettyPrint(spacer, sb, indent); - sb.append("class "); - sb.append(e.getName()); - if (e.getExtendedClass() instanceof TypeExpr) { - TypeExpr te = (TypeExpr) e.getExtendedClass(); - sb.append(" extends "); - te.prettyPrint(spacer, sb, indent); + } + + // For some reason comments are a kind of modifier. + private static void printHotDoc(Modifiers e, Spacer spacer, StringBuilder sb, int indent) { + for (Modifier modifier : e) { + if (modifier instanceof WurstDoc) { + modifier.prettyPrint(spacer, sb, indent); + } } - if (!e.getImplementsList().isEmpty()) { - sb.append(" implements "); - commaSeparatedList(e.getImplementsList(), spacer, sb, indent); + } + + private static void printCommentsBefore(StringBuilder sb, Element d, int indent) { + if (!(d instanceof AstElementWithSource)) { + return; } - sb.append("\n"); + WPos source1 = ((AstElementWithSource) d).getSource(); + if (source1 instanceof WPosWithComments) { + WPosWithComments source = (WPosWithComments) source1; + for (Comment comment : source.getCommentsBefore()) { + printIndent(sb, indent); + sb.append(comment.getContent()); + if (comment.isSingleLine()) { + sb.append("\n"); + } + } + } + } - e.getModuleUses().prettyPrint(spacer, sb, indent + 1); - e.getVars().prettyPrint(spacer, sb, indent + 1); - e.getConstructors().prettyPrint(spacer, sb, indent + 1); - e.getMethods().prettyPrint(spacer, sb, indent + 1); + private static void printCommentsAfter(StringBuilder sb, Element d, int indent) { + if (!(d instanceof AstElementWithSource)) { + return; + } + WPos source1 = ((AstElementWithSource) d).getSource(); + if (source1 instanceof WPosWithComments) { + WPosWithComments source = (WPosWithComments) source1; + for (Comment comment : source.getCommentsAfter()) { + printIndent(sb, indent); + sb.append(comment.getContent()); + if (comment.isSingleLine()) { + sb.append("\n"); + } + } + } } + private static void printIndent(StringBuilder sb, int indent) { if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '\n') { for (int i = 0; i < indent; i++) { @@ -63,28 +111,85 @@ private static void printIndent(StringBuilder sb, int indent) { } } + private static String calculateIndent(int indent) { + String s = ""; + for (int i = 0; i < indent; i++) { + s += "\t"; + } + return s; + } + + public static void prettyPrint(JassToplevelDeclarations e, Spacer spacer, StringBuilder sb, int indent) { + } + + public static void prettyPrint(JassGlobalBlock e, Spacer spacer, StringBuilder sb, int indent) { + } + + public static void prettyPrint(Annotation e, Spacer spacer, StringBuilder sb, int indent) { + sb.append(e.getAnnotationType()); + if (e.getAnnotationMessage() != null && e.getAnnotationMessage().length() >= 1) { + sb.append("("); + sb.append(e.getAnnotationMessage()); + sb.append(")"); + } + } + + public static void prettyPrint(Arguments e, Spacer spacer, StringBuilder sb, int indent) { + commaSeparatedList(e, spacer, sb, indent); + } + + public static void prettyPrint(ExprList e, Spacer spacer, StringBuilder sb, int indent) { + commaSeparatedList(e, spacer, sb, indent); + } + + public static void prettyPrint(ArraySizes e, Spacer spacer, StringBuilder sb, int indent) { + commaSeparatedList(e, spacer, sb, indent); + } + + public static void prettyPrint(ClassDef e, Spacer spacer, StringBuilder sb, int indent) { + printFirstNewline(e, sb, indent); + printStuff(e, spacer, sb, indent); + sb.append("class"); + spacer.addSpace(sb); + sb.append(e.getName()); + e.getTypeParameters().prettyPrint(spacer, sb, indent); + if (e.getExtendedClass() instanceof TypeExpr) { + TypeExpr te = (TypeExpr) e.getExtendedClass(); + spacer.addSpace(sb); + sb.append("extends"); + spacer.addSpace(sb); + te.prettyPrint(spacer, sb, indent); + } + if (!e.getImplementsList().isEmpty()) { + spacer.addSpace(sb); + sb.append("implements"); + spacer.addSpace(sb); + commaSeparatedList(e.getImplementsList(), spacer, sb, indent); + } + sb.append("\n"); + printClassOrModuleDeclaration(e, spacer, sb, indent + 1); + printCommentsAfter(sb, e, indent); + } + public static void prettyPrint(CompilationUnit e, Spacer spacer, StringBuilder sb, int indent) { prettyPrint(e.getPackages(), spacer, sb, indent); + jassPrettyPrint(e.getJassDecls(), spacer, sb, indent); } public static void prettyPrint(ConstructorDef e, Spacer spacer, StringBuilder sb, int indent) { - sb.append("\n"); - printIndent(sb, indent); - e.getModifiers().prettyPrint(spacer, sb, indent); + printFirstNewline(e, sb, indent); + printStuff(e, spacer, sb, indent); sb.append("construct"); e.getParameters().prettyPrint(spacer, sb, indent); sb.append("\n"); e.getSuperConstructorCall().prettyPrint(spacer, sb, indent); e.getBody().prettyPrint(spacer, sb, indent + 1); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(ConstructorDefs e, Spacer spacer, StringBuilder sb, int indent) { for (ConstructorDef constructorDef : e) { - if (!constructorDef.getParameters().isEmpty() - || constructorDef.getSuperConstructorCall() instanceof SomeSuperConstructorCall - || constructorDef.getBody().size() > 2) { - constructorDef.prettyPrint(spacer, sb, indent); - } + constructorDef.prettyPrint(spacer, sb, indent); } } @@ -92,35 +197,78 @@ public static void prettyPrint(EndFunctionStatement e, Spacer spacer, StringBuil } public static void prettyPrint(EnumDef e, Spacer spacer, StringBuilder sb, int indent) { - sb.append("\n"); - printIndent(sb, indent); - e.getModifiers().prettyPrint(spacer, sb, indent); + printFirstNewline(e, sb, indent); + printStuff(e, spacer, sb, indent); sb.append("enum"); spacer.addSpace(sb); sb.append(e.getName()); sb.append("\n"); e.getMembers().prettyPrint(spacer, sb, indent + 1); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(EnumMember e, Spacer spacer, StringBuilder sb, int indent) { - printIndent(sb, indent); - e.getModifiers().prettyPrint(spacer, sb, indent); + printStuff(e, spacer, sb, indent); sb.append(e.getName()); + sb.append("\n"); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(EnumMembers e, Spacer spacer, StringBuilder sb, int indent) { for (EnumMember enumMember : e) { enumMember.prettyPrint(spacer, sb, indent); - sb.append("\n"); } } + public static void prettyPrint(ExprBinary e, Spacer spacer, StringBuilder sb, int indent) { + boolean useParanthesesLeft = false; + boolean useParanthesesRight = false; + if (e.getLeft() instanceof ExprBinary) { + ExprBinary left = (ExprBinary) e.getLeft(); + if (precedence(left.getOp().jassTranslateBinary()) < precedence(e.getOp().jassTranslateBinary())) { + // if the precedence level on the left is _smaller_ we have to use parentheses + useParanthesesLeft = true; + } + // if the precedence level is equal we can assume left associativity of all operators + // so they are treated correctly + } else if (e.getLeft() instanceof ExprUnary) { + useParanthesesLeft = true; + } + if (e.getRight() instanceof ExprBinary) { + ExprBinary right = (ExprBinary) e.getRight(); + JassOpBinary op = right.getOp().jassTranslateBinary(); + JassOpBinary op2 = e.getOp().jassTranslateBinary(); + if (precedence(op) < precedence(op2)) { + // if the precedence level on the right is smaller we have to use parentheses + useParanthesesRight = true; + } else if (precedence(op) == precedence(op2)) { + // if the precedence level is equal we have to parentheses as operators are + // left associative but for commutative operators (+, *, and, or) we do not + // need parentheses + + if (!((op instanceof JassOpPlus && op2 instanceof JassOpPlus) + || (op instanceof JassOpMult && op2 instanceof JassOpMult) + || (op instanceof JassOpOr && op2 instanceof JassOpOr) + || (op instanceof JassOpAnd && op2 instanceof JassOpAnd))) { + // in other cases use parentheses + // for example + useParanthesesRight = true; + } + } + } else if (e.getRight() instanceof JassExprUnary) { + useParanthesesRight = true; + } + + sb.append(useParanthesesLeft ? "(" : ""); e.getLeft().prettyPrint(spacer, sb, indent); + sb.append(useParanthesesLeft ? ")" : ""); spacer.addSpace(sb); sb.append(e.getOp().toString()); spacer.addSpace(sb); + sb.append(useParanthesesRight ? "(" : ""); e.getRight().prettyPrint(spacer, sb, indent); + sb.append(useParanthesesRight ? ")" : ""); } public static void prettyPrint(ExprBoolVal e, Spacer spacer, StringBuilder sb, int indent) { @@ -136,9 +284,7 @@ public static void prettyPrint(ExprCast e, Spacer spacer, StringBuilder sb, int } public static void prettyPrint(ExprClosure e, Spacer spacer, StringBuilder sb, int indent) { - sb.append("("); e.getShortParameters().prettyPrint(spacer, sb, indent); - sb.append(")"); spacer.addSpace(sb); sb.append("->"); spacer.addSpace(sb); @@ -146,10 +292,12 @@ public static void prettyPrint(ExprClosure e, Spacer spacer, StringBuilder sb, i } public static void prettyPrint(ExprDestroy e, Spacer spacer, StringBuilder sb, int indent) { + printFirstNewline(e, sb, indent); printIndent(sb, indent); sb.append("destroy"); spacer.addSpace(sb); e.getDestroyedObj().prettyPrint(spacer, sb, indent); + sb.append("\n"); } public static void prettyPrint(ExprEmpty e, Spacer spacer, StringBuilder sb, int indent) { @@ -171,6 +319,7 @@ public static void prettyPrint(ExprFunctionCall e, Spacer spacer, StringBuilder sb.append("("); e.getArgs().prettyPrint(spacer, sb, indent); sb.append(")"); + printNewline(e, sb, indent); } public static void prettyPrint(ExprIncomplete e, Spacer spacer, StringBuilder sb, int indent) { @@ -185,7 +334,7 @@ public static void prettyPrint(ExprInstanceOf e, Spacer spacer, StringBuilder sb } public static void prettyPrint(ExprIntVal e, Spacer spacer, StringBuilder sb, int indent) { - sb.append(e.getValI()); + sb.append(e.getValIraw()); } public static void prettyPrint(ExprMemberArrayVarDot e, Spacer spacer, StringBuilder sb, int indent) { @@ -207,24 +356,38 @@ public static void prettyPrint(ExprMemberArrayVarDotDot e, Spacer spacer, String } public static void prettyPrint(ExprMemberMethodDot e, Spacer spacer, StringBuilder sb, int indent) { - e.getLeft().prettyPrint(spacer, sb, indent); + printIndent(sb, indent); + if (e.getLeft() instanceof ExprBinary) { + sb.append("("); + e.getLeft().prettyPrint(spacer, sb, indent); + sb.append(")"); + } else { + e.getLeft().prettyPrint(spacer, sb, indent); + } sb.append("."); sb.append(e.getFuncName()); sb.append("("); e.getArgs().prettyPrint(spacer, sb, indent); sb.append(")"); + printNewline(e, sb, indent); } public static void prettyPrint(ExprMemberMethodDotDot e, Spacer spacer, StringBuilder sb, int indent) { - e.getLeft().prettyPrint(spacer, sb, indent); + if (e.getLeft() instanceof ExprBinary) { + sb.append("("); + e.getLeft().prettyPrint(spacer, sb, indent); + sb.append(")"); + } else { + e.getLeft().prettyPrint(spacer, sb, indent); + } + sb.append("\n"); + printIndent(sb, indent + 1); sb.append(".."); sb.append(e.getFuncName()); sb.append("("); e.getArgs().prettyPrint(spacer, sb, indent); sb.append(")"); - if (!(e.getParent() instanceof ExprMemberMethodDotDot)) { - sb.append("\n"); - } + printNewline(e, sb, indent); } public static void prettyPrint(ExprMemberVarDot e, Spacer spacer, StringBuilder sb, int indent) { @@ -246,9 +409,12 @@ public static void prettyPrint(ExprNewObject e, Spacer spacer, StringBuilder sb, spacer.addSpace(sb); sb.append(e.getTypeName()); e.getTypeArgs().prettyPrint(spacer, sb, indent); - sb.append("("); - e.getArgs().prettyPrint(spacer, sb, indent); - sb.append(")"); + if (e.getArgs().size() > 0) { + sb.append("("); + e.getArgs().prettyPrint(spacer, sb, indent); + sb.append(")"); + } + printNewline(e, sb, indent); } public static void prettyPrint(ExprNull e, Spacer spacer, StringBuilder sb, int indent) { @@ -260,6 +426,11 @@ public static void prettyPrint(ExprRealVal e, Spacer spacer, StringBuilder sb, i } public static void prettyPrint(ExprStatementsBlock e, Spacer spacer, StringBuilder sb, int indent) { + sb.append("begin"); + sb.append("\n"); + e.getBody().prettyPrint(spacer, sb, indent + 1); + printIndent(sb, indent); + sb.append("end"); } public static void prettyPrint(ExprStringVal e, Spacer spacer, StringBuilder sb, int indent) { @@ -267,10 +438,12 @@ public static void prettyPrint(ExprStringVal e, Spacer spacer, StringBuilder sb, } public static void prettyPrint(ExprSuper e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); sb.append("super"); } public static void prettyPrint(ExprThis e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); sb.append("this"); } @@ -281,11 +454,15 @@ public static void prettyPrint(ExprTypeId e, Spacer spacer, StringBuilder sb, in public static void prettyPrint(ExprUnary e, Spacer spacer, StringBuilder sb, int indent) { sb.append(e.getOpU().toString()); - spacer.addSpace(sb); + // Don't add space for unary minus, e.g -1. + if (e.getOpU().toString() == "not") { + spacer.addSpace(sb); + } e.getRight().prettyPrint(spacer, sb, indent); } public static void prettyPrint(ExprVarAccess e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); sb.append(e.getVarName()); } @@ -298,28 +475,22 @@ public static void prettyPrint(ExprVarArrayAccess e, Spacer spacer, StringBuilde } public static void prettyPrint(ExtensionFuncDef e, Spacer spacer, StringBuilder sb, int indent) { - printIndent(sb, indent); - e.getModifiers().prettyPrint(spacer, sb, indent); + printFirstNewline(e, sb, indent); + printStuff(e, spacer, sb, indent); sb.append("function"); spacer.addSpace(sb); e.getExtendedType().prettyPrint(spacer, sb, indent); sb.append("."); - sb.append(e.getName()); - sb.append("("); - e.getParameters().prettyPrint(spacer, sb, indent); - sb.append(")"); + printFunctionSignature(e, spacer, sb, indent); sb.append("\n"); e.getBody().prettyPrint(spacer, sb, indent + 1); + printCommentsAfter(sb, e, indent); } - public static void prettyPrint(FuncDef e, Spacer spacer, StringBuilder sb, int indent) { - sb.append("\n"); - printIndent(sb, indent); - e.getModifiers().prettyPrint(spacer, sb, indent); - sb.append("function"); - spacer.addSpace(sb); - e.getTypeParameters().prettyPrint(spacer, sb, indent); + + private static void printFunctionSignature(FunctionImplementation e, Spacer spacer, StringBuilder sb, int indent) { sb.append(e.getName()); + e.getTypeParameters().prettyPrint(spacer, sb, indent); e.getParameters().prettyPrint(spacer, sb, indent); if (!(e.getReturnTyp() instanceof NoTypeExpr)) { spacer.addSpace(sb); @@ -327,36 +498,55 @@ public static void prettyPrint(FuncDef e, Spacer spacer, StringBuilder sb, int i spacer.addSpace(sb); e.getReturnTyp().prettyPrint(spacer, sb, indent); } + } + + public static void prettyPrint(FuncDef e, Spacer spacer, StringBuilder sb, int indent) { + printFirstNewline(e, sb, indent); + printStuff(e, spacer, sb, indent); + sb.append("function"); + spacer.addSpace(sb); + printFunctionSignature(e, spacer, sb, indent); sb.append("\n"); e.getBody().prettyPrint(spacer, sb, indent + 1); - sb.append("\n"); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(FuncDefs e, Spacer spacer, StringBuilder sb, int indent) { + printFirstNewline(e, sb, indent); for (FuncDef funcDef : e) { funcDef.prettyPrint(spacer, sb, indent); } } - public static void prettyPrint(GlobalVarDef e, Spacer spacer, StringBuilder sb, int indent) { - printIndent(sb, indent); - e.getModifiers().prettyPrint(spacer, sb, indent); - e.getOptTyp().prettyPrint(spacer, sb, indent); + printStuff(e, spacer, sb, indent); + if ((e.getOptTyp() instanceof NoTypeExpr)) { + if (!e.attrIsConstant()) { + sb.append("var"); + } + } else { + e.getOptTyp().prettyPrint(spacer, sb, indent); + } spacer.addSpace(sb); sb.append(e.getName()); - if (!(e.getInitialExpr() instanceof NoExpr)) { - sb.append(" = "); + spacer.addSpace(sb); + sb.append("="); + spacer.addSpace(sb); e.getInitialExpr().prettyPrint(spacer, sb, indent); } sb.append("\n"); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(GlobalVarDefs e, Spacer spacer, StringBuilder sb, int indent) { + if (e.size() <= 0) { + return; + } for (GlobalVarDef varDef : e) { - prettyPrint(varDef, spacer, sb, indent); + varDef.prettyPrint(spacer, sb, indent); } + sb.append("\n"); } public static void prettyPrint(IdentifierWithTypeArgs e, Spacer spacer, StringBuilder sb, int indent) { @@ -372,42 +562,298 @@ public static void prettyPrint(Indexes e, Spacer spacer, StringBuilder sb, int i } public static void prettyPrint(InitBlock e, Spacer spacer, StringBuilder sb, int indent) { + printFirstNewline(e, sb, indent); printIndent(sb, indent); - sb.append("init\n"); + sb.append("init"); + sb.append("\n"); e.getBody().prettyPrint(spacer, sb, indent + 1); } public static void prettyPrint(InterfaceDef e, Spacer spacer, StringBuilder sb, int indent) { - printIndent(sb, indent); + printFirstNewline(e, sb, indent); + printStuff(e, spacer, sb, indent); sb.append("interface"); spacer.addSpace(sb); sb.append(e.getName()); + e.getTypeParameters().prettyPrint(spacer, sb, indent); + if (e.getExtendsList().size() >= 1) { + spacer.addSpace(sb); + sb.append("extends"); + spacer.addSpace(sb); + e.getExtendsList().prettyPrint(spacer, sb, indent); + } + e.getModuleUses().prettyPrint(spacer, sb, indent + 1); + e.getVars().prettyPrint(spacer, sb, indent + 1); + e.getConstructors().prettyPrint(spacer, sb, indent + 1); + e.getMethods().prettyPrint(spacer, sb, indent + 1); + e.getOnDestroy().prettyPrint(spacer, sb, indent + 1); + printCommentsAfter(sb, e, indent); + } + + + public static void jassPrettyPrint(GlobalVarDef e, Spacer spacer, StringBuilder sb, int indent) { + printStuff(e, spacer, sb, indent); + jassPrettyPrint(e.getOptTyp(), spacer, sb, indent); + spacer.addSpace(sb); + sb.append(e.getName()); + if (!(e.getInitialExpr() instanceof NoExpr)) { + spacer.addSpace(sb); + sb.append("="); + spacer.addSpace(sb); + e.getInitialExpr().prettyPrint(spacer, sb, indent); + } sb.append("\n"); - e.getVars().prettyPrint(spacer, sb, indent); - e.getConstructors().prettyPrint(spacer, sb, indent); - e.getMethods().prettyPrint(spacer, sb, indent); + printCommentsAfter(sb, e, indent); } - public static void prettyPrint(JassGlobalBlock e, Spacer spacer, StringBuilder sb, int indent) { + public static void jassPrettyPrint(OptTypeExpr e, Spacer spacer, StringBuilder sb, int indent) { + if (e instanceof NoTypeExpr) { + sb.append("nothing"); + } else if (e instanceof TypeExpr) { + jassPrettyPrint((TypeExpr) e, spacer, sb, indent); + } } - public static void prettyPrint(JassToplevelDeclarations e, Spacer spacer, StringBuilder sb, int indent) { + public static void jassPrettyPrint(TypeExpr e, Spacer spacer, StringBuilder sb, int indent) { + if (e instanceof NoTypeExpr) { + sb.append("nothing"); + } else if (e instanceof TypeExprSimple) { + sb.append(((TypeExprSimple) e).getTypeName()); + } else if (e instanceof TypeExprArray) { + jassPrettyPrint(((TypeExprArray) e).getBase(), spacer, sb, indent); + spacer.addSpace(sb); + sb.append("array"); + } + } + + public static void jassPrettyPrint(JassToplevelDeclarations e, Spacer spacer, StringBuilder sb, int indent) { + for (int i = 0; i < e.size(); i++) { + jassPrettyPrint(e.get(i), spacer, sb, indent); + } + } + + private static void jassPrettyPrint(JassToplevelDeclaration e, Spacer spacer, StringBuilder sb, int indent) { + if (e instanceof JassGlobalBlock) { + jassPrettyPrint((JassGlobalBlock) e, spacer, sb, indent); + } else if (e instanceof NativeFunc) { + jassPrettyPrint((NativeFunc) e, spacer, sb, indent); + } else if (e instanceof FuncDef) { + jassPrettyPrint((FuncDef) e, spacer, sb, indent); + } + } + + public static void jassPrettyPrint(FuncDef e, Spacer spacer, StringBuilder sb, int indent) { + printFirstNewline(e, sb, indent); + printStuff(e, spacer, sb, indent); + sb.append("function"); + spacer.addSpace(sb); + sb.append(e.getName()); + spacer.addSpace(sb); + sb.append("takes"); + spacer.addSpace(sb); + jassPrettyPrint(e.getParameters(), spacer, sb, indent); + spacer.addSpace(sb); + sb.append("returns"); + spacer.addSpace(sb); + if (e.getReturnTyp() instanceof NoTypeExpr) { + sb.append("nothing"); + } else { + e.getReturnTyp().prettyPrint(spacer, sb, indent); + } + sb.append("\n"); + jassPrettyPrint(e.getBody(), spacer, sb, indent + 1); + printCommentsAfter(sb, e, indent); + sb.append("endfunction\n"); + } + + + public static void jassPrettyPrint(WStatements e, Spacer spacer, StringBuilder sb, int indent) { + for (int i = 0; i < e.size(); i++) { + jassPrettyPrint(e.get(i), spacer, sb, indent); + } + } + + public static void jassPrettyPrint(WStatement e, Spacer spacer, StringBuilder sb, int indent) { + if (e instanceof LocalVarDef) { + jassPrettyPrint((LocalVarDef) e, spacer, sb, indent); + } else if (e instanceof StmtSet) { + jassPrettyPrint((StmtSet) e, spacer, sb, indent); + } else if (e instanceof StmtCall) { + jassPrettyPrint((StmtCall) e, spacer, sb, indent); + } else if (e instanceof StmtIf) { + jassPrettyPrint((StmtIf) e, spacer, sb, indent); + } else if (e instanceof StmtReturn) { + jassPrettyPrint((StmtReturn) e, spacer, sb, indent); + } else if (e instanceof StmtLoop) { + jassPrettyPrint((StmtLoop) e, spacer, sb, indent); + } else if (e instanceof StmtExitwhen) { + jassPrettyPrint((StmtExitwhen) e, spacer, sb, indent); + } + } + + public static void jassPrettyPrint(StmtExitwhen e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("exitwhen"); + spacer.addSpace(sb); + e.getCond().prettyPrint(spacer, sb, indent); + sb.append("\n"); + } + + public static void jassPrettyPrint(StmtLoop e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("loop\n"); + jassPrettyPrint(e.getBody(), spacer, sb, indent + 1); + printIndent(sb, indent); + sb.append("endloop\n"); + } + + public static void jassPrettyPrint(StmtReturn e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("return"); + spacer.addSpace(sb); + e.getReturnedObj().prettyPrint(spacer, sb, indent); + sb.append("\n"); + } + + public static void jassPrettyPrint(StmtIf e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("if"); + spacer.addSpace(sb); + e.getCond().prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + sb.append("then\n"); + jassPrettyPrint(e.getThenBlock(), spacer, sb, indent + 1); + if (e.getElseBlock().size() > 0) { + printIndent(sb, indent); + sb.append("else"); + if (e.getElseBlock().size() == 1 && e.getElseBlock().get(0) instanceof StmtIf) { + jassPrettyPrint(e.getElseBlock().get(0), spacer, sb, indent); + } else { + sb.append("\n"); + jassPrettyPrint(e.getElseBlock(), spacer, sb, indent + 1); + printIndent(sb, indent); + sb.append("endif\n"); + } + } else { + printIndent(sb, indent); + sb.append("endif\n"); + } + + } + + public static void jassPrettyPrint(StmtCall e, Spacer spacer, StringBuilder sb, int indent) { + if (e instanceof FunctionCall) { + jassPrettyPrint((FunctionCall) e, spacer, sb, indent); + } + } + + public static void jassPrettyPrint(FunctionCall e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("call"); + spacer.addSpace(sb); + sb.append(e.getFuncName()); + sb.append("("); + jassPrettyPrint(e.getArgs(), spacer, sb, indent); + sb.append(")"); + sb.append("\n"); + } + + public static void jassPrettyPrint(Arguments e, Spacer spacer, StringBuilder sb, int indent) { + commaSeparatedList(e, spacer, sb, indent); + } + + public static void jassPrettyPrint(StmtSet e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("set"); + spacer.addSpace(sb); + e.getUpdatedExpr().prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + sb.append("="); + spacer.addSpace(sb); + e.getRight().prettyPrint(spacer, sb, indent); + sb.append("\n"); + } + + + public static void jassPrettyPrint(LocalVarDef e, Spacer spacer, StringBuilder sb, int indent) { + printCommentsBefore(sb, e, indent); + printIndent(sb, indent); + sb.append("local"); + spacer.addSpace(sb); + e.getOptTyp().prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + sb.append(e.getName()); + if (!(e.getInitialExpr() instanceof NoExpr)) { + spacer.addSpace(sb); + sb.append("="); + spacer.addSpace(sb); + e.getInitialExpr().prettyPrint(spacer, sb, indent); + } + printNewline(e, sb, indent); + printCommentsAfter(sb, e, indent); + } + + public static void jassPrettyPrint(JassGlobalBlock e, Spacer spacer, StringBuilder sb, int indent) { + sb.append("globals\n"); + for (int i = 0; i < e.size(); i++) { + jassPrettyPrint(e.get(i), spacer, sb, indent + 1); + } + sb.append("endglobals\n"); + } + + public static void jassPrettyPrint(WParameters wParameters, Spacer spacer, StringBuilder sb, int indent) { + if (wParameters.size() == 0) { + sb.append("nothing"); + return; + } + String prefix = ""; + for (WParameter wParameter : wParameters) { + sb.append(prefix); + prefix = ","; + spacer.addSpace(sb); + wParameter.prettyPrint(spacer, sb, indent); + } + } + + public static void jassPrettyPrint(NativeFunc e, Spacer spacer, StringBuilder sb, int indent) { + printStuff(e, spacer, sb, indent); + sb.append("native"); + spacer.addSpace(sb); + e.getNameId().prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + sb.append("takes"); + spacer.addSpace(sb); + jassPrettyPrint(e.getParameters(), spacer, sb, indent); + spacer.addSpace(sb); + sb.append("returns"); + spacer.addSpace(sb); + e.getReturnTyp().prettyPrint(spacer, sb, indent); + sb.append("\n"); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(LocalVarDef e, Spacer spacer, StringBuilder sb, int indent) { + printCommentsBefore(sb, e, indent); printIndent(sb, indent); if ((e.getOptTyp() instanceof NoTypeExpr)) { - sb.append("var"); + if (e.attrIsConstant()) { + sb.append("let"); + } else if (!(e.getParent() instanceof StmtForRange)) { + sb.append("var"); + } } else { e.getOptTyp().prettyPrint(spacer, sb, indent); } spacer.addSpace(sb); sb.append(e.getName()); if (!(e.getInitialExpr() instanceof NoExpr)) { - sb.append(" = "); + spacer.addSpace(sb); + sb.append("="); + spacer.addSpace(sb); e.getInitialExpr().prettyPrint(spacer, sb, indent); } - sb.append("\n"); + printNewline(e, sb, indent); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(ModAbstract e, Spacer spacer, StringBuilder sb, int indent) { @@ -424,8 +870,11 @@ public static void prettyPrint(ModVararg e, Spacer spacer, StringBuilder sb, int public static void prettyPrint(Modifiers e, Spacer spacer, StringBuilder sb, int indent) { for (Modifier modifier : e) { - modifier.prettyPrint(spacer, sb, indent); - sb.append(" "); + // We handle WurstDoc separately. + if (!(modifier instanceof WurstDoc)) { + modifier.prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + } } } @@ -438,30 +887,60 @@ public static void prettyPrint(ModStatic e, Spacer spacer, StringBuilder sb, int } public static void prettyPrint(ModuleDef e, Spacer spacer, StringBuilder sb, int indent) { - printIndent(sb, indent); - sb.append("modules"); + printFirstNewline(e, sb, indent); + printStuff(e, spacer, sb, indent); + sb.append("module"); spacer.addSpace(sb); - e.getVars().prettyPrint(spacer, sb, indent); - e.getConstructors().prettyPrint(spacer, sb, indent); - e.getMethods().prettyPrint(spacer, sb, indent); + e.getNameId().prettyPrint(spacer, sb, indent); + sb.append("\n"); + printClassOrModuleDeclaration(e, spacer, sb, indent + 1); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(ModuleInstanciation e, Spacer spacer, StringBuilder sb, int indent) { + printCommentsBefore(sb, e, indent); } public static void prettyPrint(ModuleInstanciations e, Spacer spacer, StringBuilder sb, int indent) { } public static void prettyPrint(ModuleUse e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("use"); + spacer.addSpace(sb); + sb.append(e.getModuleName()); + sb.append("\n"); } public static void prettyPrint(ModuleUses e, Spacer spacer, StringBuilder sb, int indent) { + for (ModuleUse moduleUse : e) { + moduleUse.prettyPrint(spacer, sb, indent); + } } public static void prettyPrint(NativeFunc e, Spacer spacer, StringBuilder sb, int indent) { + printStuff(e, spacer, sb, indent); + sb.append("native"); + spacer.addSpace(sb); + e.getNameId().prettyPrint(spacer, sb, indent); + e.getParameters().prettyPrint(spacer, sb, indent); + if (!(e.getReturnTyp() instanceof NoTypeExpr)) { + spacer.addSpace(sb); + sb.append("returns"); + spacer.addSpace(sb); + e.getReturnTyp().prettyPrint(spacer, sb, indent); + } + sb.append("\n"); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(NativeType e, Spacer spacer, StringBuilder sb, int indent) { + printStuff(e, spacer, sb, indent); + sb.append("nativetype"); + spacer.addSpace(sb); + e.getNameId().prettyPrint(spacer, sb, indent); + sb.append("\n"); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(NoDefaultCase e, Spacer spacer, StringBuilder sb, int indent) { @@ -474,6 +953,14 @@ public static void prettyPrint(NoTypeExpr e, Spacer spacer, StringBuilder sb, in } public static void prettyPrint(OnDestroyDef e, Spacer spacer, StringBuilder sb, int indent) { + if (e.getBody().size() <= 0) { + return; + } + printFirstNewline(e, sb, indent); + printIndent(sb, indent); + sb.append("ondestroy"); + sb.append("\n"); + e.getBody().prettyPrint(spacer, sb, indent + 1); } public static void prettyPrint(StartFunctionStatement e, Spacer spacer, StringBuilder sb, int indent) { @@ -483,18 +970,57 @@ public static void prettyPrint(StmtErr e, Spacer spacer, StringBuilder sb, int i } public static void prettyPrint(StmtExitwhen e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("break"); + sb.append("\n"); } public static void prettyPrint(StmtForFrom e, Spacer spacer, StringBuilder sb, int indent) { + forIteratorLoop("from", e, e.getIn(), spacer, sb, indent); } public static void prettyPrint(StmtForIn e, Spacer spacer, StringBuilder sb, int indent) { + forIteratorLoop("in", e, e.getIn(), spacer, sb, indent); + } + + private static void forIteratorLoop(String method, LoopStatementWithVarDef e, Expr target, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("for"); + spacer.addSpace(sb); + e.getLoopVar().getNameId().prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + sb.append(method); + spacer.addSpace(sb); + target.prettyPrint(spacer, sb, indent); + sb.append("\n"); + e.getBody().prettyPrint(spacer, sb, indent + 1); + } + + private static void forRangeLoop(String direction, StmtForRange e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("for"); + spacer.addSpace(sb); + e.getLoopVar().prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + sb.append(direction); + spacer.addSpace(sb); + e.getTo().prettyPrint(spacer, sb, indent); + if (e.getStep() instanceof ExprIntVal && ((ExprIntVal) e.getStep()).getValI() != 1) { + spacer.addSpace(sb); + sb.append("step"); + spacer.addSpace(sb); + e.getStep().prettyPrint(spacer, sb, indent); + } + sb.append("\n"); + e.getBody().prettyPrint(spacer, sb, indent + 1); } public static void prettyPrint(StmtForRangeDown e, Spacer spacer, StringBuilder sb, int indent) { + forRangeLoop("downto", e, spacer, sb, indent); } public static void prettyPrint(StmtForRangeUp e, Spacer spacer, StringBuilder sb, int indent) { + forRangeLoop("to", e, spacer, sb, indent); } public static void prettyPrint(StmtIf e, Spacer spacer, StringBuilder sb, int indent) { @@ -504,11 +1030,16 @@ public static void prettyPrint(StmtIf e, Spacer spacer, StringBuilder sb, int in e.getCond().prettyPrint(spacer, sb, indent); sb.append("\n"); e.getThenBlock().prettyPrint(spacer, sb, indent + 1); - sb.append("\n"); if (e.getElseBlock().size() > 0) { printIndent(sb, indent); - sb.append("else\n"); - e.getElseBlock().prettyPrint(spacer, sb, indent + 1); + sb.append("else"); + if (e.getElseBlock().size() > 0 && e.getElseBlock().get(0) instanceof StmtIf) { + spacer.addSpace(sb); + e.getElseBlock().get(0).prettyPrint(spacer, sb, indent); + } else { + sb.append("\n"); + e.getElseBlock().prettyPrint(spacer, sb, indent + 1); + } } } @@ -523,13 +1054,49 @@ public static void prettyPrint(StmtReturn e, Spacer spacer, StringBuilder sb, in sb.append("\n"); } - public static void prettyPrint(StmtSet e, Spacer spacer, StringBuilder sb, int indent) { - printIndent(sb, indent); - e.getUpdatedExpr().prettyPrint(spacer, sb, indent); + private static boolean printAssignmentShorthands(Expr left, Expr right, Spacer spacer, StringBuilder sb, int indent) { + if (!(right instanceof ExprBinary)) { + return false; + } + + if (!(left.toString().equals(((ExprBinary) right).getLeft().toString()))) { + return false; + } + + String operator = ((ExprBinary) right).getOp().toString(); + Expr val = ((ExprBinary) right).getRight(); + + // i++ and i-- + if (val instanceof ExprIntVal + && ((ExprIntVal) val).getValI() == 1 + && (operator.equals("+") || operator.equals("-"))) { + sb.append(operator); + sb.append(operator); + return true; + } + + // i +=, ... spacer.addSpace(sb); + sb.append(operator); sb.append("="); spacer.addSpace(sb); - e.getRight().prettyPrint(spacer, sb, indent); + val.prettyPrint(spacer, sb, indent); + return true; + } + + public static void prettyPrint(StmtSet e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + e.getUpdatedExpr().prettyPrint(spacer, sb, indent); + + // Special cases for assignment shorthands i++ and i += variants. + boolean shortened = printAssignmentShorthands(e.getUpdatedExpr(), e.getRight(), spacer, sb, indent); + + if (!shortened) { + spacer.addSpace(sb); + sb.append("="); + spacer.addSpace(sb); + e.getRight().prettyPrint(spacer, sb, indent); + } sb.append("\n"); } @@ -543,24 +1110,55 @@ public static void prettyPrint(StmtWhile e, Spacer spacer, StringBuilder sb, int printIndent(sb, indent); sb.append("while"); spacer.addSpace(sb); + e.getCond().prettyPrint(spacer, sb, indent); + sb.append("\n"); + e.getBody().prettyPrint(spacer, sb, indent + 1); } public static void prettyPrint(SwitchCase e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("case"); + spacer.addSpace(sb); + e.getExpressions().prettyPrint(spacer, sb, indent); + sb.append("\n"); + e.getStmts().prettyPrint(spacer, sb, indent + 1); } - public static void prettyPrint(SwitchCases e, Spacer spacer, StringBuilder sb, int indent) { + public static void prettyPrint(SwitchCases sw, Spacer spacer, StringBuilder sb, int indent) { + for (SwitchCase c : sw) { + c.prettyPrint(spacer, sb, indent); + } } public static void prettyPrint(SwitchDefaultCaseStatements e, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("default"); + sb.append("\n"); + e.getStmts().prettyPrint(spacer, sb, indent + 1); } - public static void prettyPrint(SwitchStmt e, Spacer spacer, StringBuilder sb, int indent) { + public static void prettyPrint(SwitchStmt sw, Spacer spacer, StringBuilder sb, int indent) { + printIndent(sb, indent); + sb.append("switch"); + spacer.addSpace(sb); + sw.getExpr().prettyPrint(spacer, sb, indent); + sb.append("\n"); + sw.getCases().prettyPrint(spacer, sb, indent + 1); + sw.getSwitchDefault().prettyPrint(spacer, sb, indent + 1); } public static void prettyPrint(TopLevelDeclarations e, Spacer spacer, StringBuilder sb, int indent) { } public static void prettyPrint(TupleDef e, Spacer spacer, StringBuilder sb, int indent) { + printStuff(e, spacer, sb, indent); + spacer.addSpace(sb); + sb.append("tuple"); + spacer.addSpace(sb); + e.getNameId().prettyPrint(spacer, sb, indent); + e.getParameters().prettyPrint(spacer, sb, indent); + sb.append("\n"); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(TypeExprArray e, Spacer spacer, StringBuilder sb, int indent) { @@ -569,7 +1167,13 @@ public static void prettyPrint(TypeExprArray e, Spacer spacer, StringBuilder sb, sb.append("array"); } - public static void prettyPrint(TypeExprList e, Spacer spacer, StringBuilder sb, int indent) { + public static void prettyPrint(TypeExprList typeExprList, Spacer spacer, StringBuilder sb, int indent) { + if (typeExprList.size() == 0) { + return; + } + sb.append("<"); + commaSeparatedList(typeExprList, spacer, sb, indent); + sb.append(">"); } public static void prettyPrint(TypeExprResolved e, Spacer spacer, StringBuilder sb, int indent) { @@ -581,13 +1185,25 @@ public static void prettyPrint(TypeExprSimple e, Spacer spacer, StringBuilder sb } public static void prettyPrint(TypeExprThis e, Spacer spacer, StringBuilder sb, int indent) { + if (!(e.getScopeType() instanceof NoTypeExpr)) { + e.getScopeType().prettyPrint(spacer, sb, indent); + sb.append("."); + } sb.append("thistype"); } public static void prettyPrint(TypeParamDef e, Spacer spacer, StringBuilder sb, int indent) { + printCommentsBefore(sb, e, indent); + e.getNameId().prettyPrint(spacer, sb, indent); + printCommentsAfter(sb, e, indent); } public static void prettyPrint(TypeParamDefs e, Spacer spacer, StringBuilder sb, int indent) { + if (e.size() >= 1) { + sb.append("<"); + commaSeparatedList(e, spacer, sb, indent); + sb.append(">"); + } } public static void prettyPrint(VisibilityDefault e, Spacer spacer, StringBuilder sb, int indent) { @@ -637,6 +1253,10 @@ public static void prettyPrint(WurstModel wurstModel, Spacer spacer, StringBuild } } + private static String spaces(int indentation) { + return " " + "{" + indentation + "}"; + } + public static void prettyPrint(WurstDoc wurstDoc, Spacer spacer, StringBuilder sb, int indent) { printIndent(sb, indent); sb.append(wurstDoc.getRawComment()); @@ -695,20 +1315,26 @@ public static void prettyPrint(WPackages wPackages, Spacer spacer, StringBuilder } public static void prettyPrint(WPackage wPackage, Spacer spacer, StringBuilder sb, int indent) { + printCommentsBefore(sb, wPackage, indent); sb.append("package"); spacer.addSpace(sb); sb.append(wPackage.getName()); sb.append("\n\n"); wPackage.getImports().prettyPrint(spacer, sb, indent); wPackage.getElements().prettyPrint(spacer, sb, indent); + printCommentsAfter(sb, wPackage, indent); } public static void prettyPrint(WImports wImports, Spacer spacer, StringBuilder sb, int indent) { + if (wImports.size() <= 0) { + return; + } for (WImport wImport : wImports) { if (!wImport.getPackagename().equals("Wurst")) { - prettyPrint(wImport, spacer, sb, indent); + wImport.prettyPrint(spacer, sb, indent); } } + sb.append("\n"); } public static void prettyPrint(ClassDefs classDefs, Spacer spacer, StringBuilder sb, int indent) { @@ -722,13 +1348,22 @@ public static void prettyPrint(Identifier identifier, Spacer spacer, StringBuild } public static void prettyPrint(ExprIfElse e, Spacer spacer, StringBuilder sb, int indent) { - sb.append("("); - e.getCond().prettyPrint(spacer, sb, indent+1); - sb.append(" ? "); - e.getIfTrue().prettyPrint(spacer, sb, indent+1); - sb.append(" : "); - e.getIfFalse().prettyPrint(spacer, sb, indent+1); - sb.append(")"); + boolean shouldBracket = e.getParent() instanceof ExprBinary; + if (shouldBracket) { + sb.append("("); + } + e.getCond().prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + sb.append("?"); + spacer.addSpace(sb); + e.getIfTrue().prettyPrint(spacer, sb, indent); + spacer.addSpace(sb); + sb.append(":"); + spacer.addSpace(sb); + e.getIfFalse().prettyPrint(spacer, sb, indent); + if (shouldBracket) { + sb.append(")"); + } } public static void prettyPrint(ArrayInitializer arrayInitializer, Spacer spacer, StringBuilder sb, int indent) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyUtils.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyUtils.java new file mode 100644 index 000000000..46e681478 --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyUtils.java @@ -0,0 +1,125 @@ +package de.peeeq.wurstscript.attributes.prettyPrint; + +import de.peeeq.wurstio.WurstCompilerJassImpl; +import de.peeeq.wurstscript.RunArgs; +import de.peeeq.wurstscript.ast.CompilationUnit; +import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.gui.WurstGui; +import de.peeeq.wurstscript.gui.WurstGuiCliImpl; +import org.apache.commons.lang.StringUtils; +import org.eclipse.jdt.annotation.Nullable; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +import static de.peeeq.wurstscript.utils.Utils.printElement; + + +public class PrettyUtils { + + /** + * @param args + */ + public static void pretty(List args) throws IOException { + if (args.size() == 0) { + return; + } + String arg = args.get(0); + if (args.equals("...")) { + prettyAll("."); + } + if (arg.equals("tree") && args.size() >= 2) { + debug(args.get(1)); + return; + } + + String clean = pretty(new File(arg)); + System.out.println(clean); + } + + public static String pretty(String source, String ending) { + CompilationUnit cu = parse(source, ending); + + Spacer spacer = new MaxOneSpacer(); + StringBuilder sb = new StringBuilder(); + cu.prettyPrint(spacer, sb, 0); + + return sb.toString(); + } + + private static void prettyPrint(String filename) { + String clean = pretty(filename, filename.substring(filename.lastIndexOf("."))); + System.out.println(clean); + } + + public static void pretty(CompilationUnit cu) { + Spacer spacer = new MaxOneSpacer(); + StringBuilder sb = new StringBuilder(); + cu.prettyPrint(spacer, sb, 0); + + System.out.println(sb.toString()); + } + + private static void debug(String filename) { + String contents = readFile(filename); + CompilationUnit cu = parse(contents, filename.substring(filename.lastIndexOf("."))); + + walkTree(cu, 0); + } + + private static void check(Element e, int indent) { + System.out.println(StringUtils.repeat("\t", indent) + printElement(e)); + } + + private static @Nullable Element lastElement = null; + private static void walkTree(Element e, int indent) { + lastElement = e; + check(e, indent); + lastElement = null; + for (int i = 0; i < e.size(); i++) { + walkTree(e.get(i), indent+1); + } + } + + private static void prettyAll(String root) throws IOException { + Files.walk(Paths.get(root)) + .filter(p -> p.toString().endsWith(".wurst")) + .forEach(p -> prettyPrint(p.toString())); + } + + private static String pretty(File f) { + String contents = readFile(f.toString()); + CompilationUnit cu = parse(contents, f.getName().substring(f.getName().lastIndexOf("."))); + + Spacer spacer = new MaxOneSpacer(); + StringBuilder sb = new StringBuilder(); + cu.prettyPrint(spacer, sb, 0); + + return sb.toString(); + } + + private static String readFile(String filename) { + String everything = ""; + try (BufferedReader br = new BufferedReader(new FileReader(filename))) { + StringBuilder sb = new StringBuilder(); + String line = br.readLine(); + while (line != null) { + sb.append(line); + sb.append(System.lineSeparator()); + line = br.readLine(); + } + everything = sb.toString(); + } catch (Exception e) { + e.printStackTrace(); + } + return everything; + } + + private static CompilationUnit parse(String input, String ending) { + WurstGui gui = new WurstGuiCliImpl(); + WurstCompilerJassImpl compiler = new WurstCompilerJassImpl(null, gui, null, new RunArgs("-prettyPrint")); + return compiler.parse("format" + ending, new StringReader(input)); + } +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassprinter/JassPrinter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassprinter/JassPrinter.java index 6dbc90a2a..c620ce1eb 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassprinter/JassPrinter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassprinter/JassPrinter.java @@ -226,7 +226,7 @@ static void printStatements(StringBuilder sb, int indent, List st } - protected static int precedence(JassOp op) { + public static int precedence(JassOp op) { // 5 not // 4 * / // 3 + - diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPosWithComments.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPosWithComments.java new file mode 100644 index 000000000..a181cd03f --- /dev/null +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPosWithComments.java @@ -0,0 +1,73 @@ +package de.peeeq.wurstscript.parser; + +import com.google.common.collect.ImmutableList; +import de.peeeq.wurstscript.ast.CompilationUnit; +import de.peeeq.wurstscript.utils.LineOffsets; +import org.eclipse.jdt.annotation.Nullable; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class WPosWithComments extends WPos { + + + private List commentsBefore = Collections.emptyList(); + private List commentsAfter = Collections.emptyList(); + + + public WPosWithComments(String file, @Nullable LineOffsets lineOffsets, int leftPos, int rightPos) { + super(file, lineOffsets, leftPos, rightPos); + } + + public static List createList(CompilationUnit cu) { + return new ArrayList<>(); + } + + public void addCommentBefore(Comment comment) { + commentsBefore = ImmutableList.builder() + .addAll(commentsBefore) + .add(comment) + .build(); + } + + public void addCommentAfter(Comment comment) { + commentsAfter = ImmutableList.builder() + .addAll(commentsAfter) + .add(comment) + .build(); + } + + public List getCommentsBefore() { + return commentsBefore; + } + + public List getCommentsAfter() { + return commentsAfter; + } + + public static class Comment { + private WPos pos; + private String content; + private boolean singleLine; + + public Comment(WPos pos, String content, boolean singleLine) { + this.pos = pos; + this.content = content; + this.singleLine = singleLine; + } + + public WPos getPos() { + return pos; + } + + public String getContent() { + return content; + } + + public boolean isSingleLine() { + return singleLine; + } + + } +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java index 1a4ded08b..b8514dfd4 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java @@ -1,7 +1,9 @@ package de.peeeq.wurstscript.parser.antlr; +import com.google.common.collect.ImmutableList; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.WurstOperator; +import de.peeeq.wurstscript.antlr.WurstLexer; import de.peeeq.wurstscript.antlr.WurstParser; import de.peeeq.wurstscript.antlr.WurstParser.*; import de.peeeq.wurstscript.ast.*; @@ -11,6 +13,8 @@ import de.peeeq.wurstscript.jass.AntlrJassParseTreeTransformer; import de.peeeq.wurstscript.parser.WPos; import de.peeeq.wurstscript.types.WurstTypeInt; +import de.peeeq.wurstscript.parser.WPosWithComments; +import de.peeeq.wurstscript.parser.WPosWithComments.Comment; import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; import org.antlr.v4.runtime.ParserRuleContext; @@ -18,20 +22,28 @@ import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import org.eclipse.jdt.annotation.Nullable; +import org.jetbrains.annotations.NotNull; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; +@SuppressWarnings("Duplicates") public class AntlrWurstParseTreeTransformer { - private String file; - private ErrorHandler cuErrorHandler; - private LineOffsets lineOffsets; + private final String file; + private final ErrorHandler cuErrorHandler; + private final LineOffsets lineOffsets; + private final Deque commentTokens; + private final List positions = new ArrayList<>(); + private final boolean storeComments; public AntlrWurstParseTreeTransformer(String file, - ErrorHandler cuErrorHandler, LineOffsets lineOffsets) { + ErrorHandler cuErrorHandler, LineOffsets lineOffsets, Deque commentTokens, boolean storeComments) { this.file = file; this.cuErrorHandler = cuErrorHandler; this.lineOffsets = lineOffsets; + this.commentTokens = commentTokens; + this.storeComments = storeComments; } public CompilationUnit transform(CompilationUnitContext cu) { @@ -55,8 +67,68 @@ public CompilationUnit transform(CompilationUnitContext cu) { // ignore } - return Ast + CompilationUnit res = Ast .CompilationUnit(new CompilationUnitInfo(this.cuErrorHandler), jassDecls, packages); + addComments(res); + return res; + } + + private void addComments(CompilationUnit cu) { + if (!storeComments || positions.isEmpty()) { + return; + } + + + // positions big first + positions.sort(Comparator.comparing(WPos::getLeftPos) + .thenComparing(Comparator.comparing(WPos::getRightPos).reversed())); + + + // positions, big last + List positions2 = positions.stream() + .sorted(Comparator.comparing(WPos::getRightPos) + .thenComparing(Comparator.comparing(WPos::getLeftPos).reversed())) + .collect(Collectors.toList()); + + int pos = 0; + int pos2 = 0; + commentLoop: + while (!commentTokens.isEmpty() && pos < positions.size()) { + Token token = commentTokens.removeFirst(); + // find position directly after comment + while (positions.get(pos).getLeftPos() < token.getStopIndex()) { + pos++; + if (pos >= positions.size()) { + commentTokens.addFirst(token); + break commentLoop; + } + } + WPosWithComments posAfterComment = positions.get(pos); + + // find position directly before comment + while (pos2 + 1 < positions2.size() && positions2.get(pos2 + 1).getRightPos() < token.getStartIndex()) { + pos2++; + if (pos2 >= positions2.size()) { + commentTokens.addFirst(token); + break commentLoop; + } + } + WPosWithComments posBeforeComment = positions2.get(pos2); + + Comment comment = tokenToComment(token); + if (comment.getPos().getLine() == posBeforeComment.getEndLine()) { + // same line --> add to position before + posBeforeComment.addCommentAfter(comment); + } else { + // otherwise add to position after + posAfterComment.addCommentBefore(comment); + } + } + + for (Token t : commentTokens) { + Utils.getLast(positions2).addCommentAfter(tokenToComment(t)); + } + } private JassToplevelDeclaration transformJassToplevelDecl( @@ -1301,7 +1373,7 @@ private WShortParameters transformShortFormalParameters(ShortFormalParametersCon Ast.Modifiers(Ast.ModConstant(source(ps.singleParam).artificial())), Ast.NoTypeExpr(), text(ps.singleParam) - ) + ) ); } WShortParameters result = Ast.WShortParameters(); @@ -1314,7 +1386,7 @@ private WShortParameters transformShortFormalParameters(ShortFormalParametersCon private WParameter transformFormalParameter(FormalParameterContext p, boolean makeConstant) { Modifiers modifiers = Ast.Modifiers(); - if(p.vararg != null) { + if (p.vararg != null) { modifiers.add(Ast.ModVararg(source(p).artificial())); } if (makeConstant) { @@ -1373,11 +1445,31 @@ private WPos source(ParserRuleContext p) { } else { stopIndex = p.stop.getStopIndex() + 1; } - return new WPos(file, lineOffsets, p.start.getStartIndex(), stopIndex); + return makeWPos(p.start.getStartIndex(), stopIndex); } private WPos source(Token p) { - return new WPos(file, lineOffsets, p.getStartIndex(), p.getStopIndex() + 1); + int start = p.getStartIndex(); + int stop = p.getStopIndex() + 1; + return makeWPos(start, stop); + } + + @NotNull + private WPos makeWPos(int start, int stop) { + if (storeComments) { + WPosWithComments pos = new WPosWithComments(file, lineOffsets, start, stop); + positions.add(pos); + return pos; + } else { + return new WPos(file, lineOffsets, start, stop); + } + } + + @NotNull + private Comment tokenToComment(Token comment) { + WPos commentPos = new WPos(file, lineOffsets, comment.getStartIndex(), comment.getStopIndex()); + boolean isSingleLine = comment.getType() == WurstLexer.LINE_COMMENT; + return new Comment(commentPos, comment.getText(), isSingleLine); } static class FuncSig { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/ExtendedWurstLexer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/ExtendedWurstLexer.java index 748dcd679..074686768 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/ExtendedWurstLexer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/ExtendedWurstLexer.java @@ -11,9 +11,7 @@ import org.antlr.v4.runtime.misc.Pair; import org.eclipse.jdt.annotation.Nullable; -import java.util.LinkedList; -import java.util.Queue; -import java.util.Stack; +import java.util.*; public class ExtendedWurstLexer implements TokenSource { @@ -36,6 +34,12 @@ public class ExtendedWurstLexer implements TokenSource { private CompileError tabWarning = null; // counts the number of open parentheses private int parenthesesLevel = 0; + private Deque commentTokens = new ArrayDeque<>(); + + public Deque getCommentTokens() { + return commentTokens; + } + enum State { INIT, NEWLINES, BEGIN_LINE @@ -119,6 +123,10 @@ private Token nextTokenIntern() { continue; } + if (token1.getChannel() == 2) { + commentTokens.addLast(token1); + continue; + } if (isWurst) { if (isJassOnlyKeyword(token1)) { @@ -355,16 +363,27 @@ private void handleIndent(int n, Token token, int start, int stop, Token endBloc int line = lineOffsets.getLine(start); el.syntaxError(orig, "", line, start - lineOffsets.get(line), msg, null); } + // TODO ? + // int line = lineOffsets.getLine(start); + // int charPositionInLine = start - lineOffsets.get(line); + // String msg = "Invalid indentation level. Current indentation is " + expectedIndentation + ", but this is indented by " + n + "."; + // reportError(line, charPositionInLine, msg); } } } } + private void reportError(int line, int charPositionInLine, String msg) { + for (ANTLRErrorListener el : orig.getErrorListeners()) { + el.syntaxError(orig, "", line, charPositionInLine, msg, null); + } + } + private boolean isWrapChar(int type) { switch (type) { -// case WurstParser.PAREN_LEFT: +// case WurstParser.PAREN_LEFT: // case WurstParser.BRACKET_LEFT: case WurstParser.COMMA: case WurstParser.PLUS: diff --git a/de.peeeq.wurstscript/src/test/java/tests/prettyprint/PrettyPrintTest.java b/de.peeeq.wurstscript/src/test/java/tests/prettyprint/PrettyPrintTest.java index 6411d13b1..8a17067c1 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/prettyprint/PrettyPrintTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/prettyprint/PrettyPrintTest.java @@ -1,40 +1,190 @@ package tests.prettyprint; -import de.peeeq.wurstscript.ast.WurstModel; +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import de.peeeq.wurstio.WurstCompilerJassImpl; +import de.peeeq.wurstscript.RunArgs; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.prettyPrint.MaxOneSpacer; import de.peeeq.wurstscript.attributes.prettyPrint.PrettyPrinter; +import de.peeeq.wurstscript.gui.WurstGui; +import de.peeeq.wurstscript.gui.WurstGuiCliImpl; +import de.peeeq.wurstscript.parser.WPos; +import de.peeeq.wurstscript.parser.WPosWithComments; +import de.peeeq.wurstscript.parser.WPosWithComments.Comment; import org.testng.annotations.Test; import tests.wurstscript.tests.WurstScriptTest; +import java.io.File; +import java.io.IOException; +import java.io.StringReader; +import java.util.Collections; +import java.util.List; + +import static org.testng.AssertJUnit.assertEquals; + public class PrettyPrintTest extends WurstScriptTest { + private String setUp(String filename) throws IOException { + StringBuilder sb = new StringBuilder(); + File inFile = new File(filename); + String content = Files.toString(inFile, Charsets.UTF_8); + + WurstGui gui = new WurstGuiCliImpl(); + WurstCompilerJassImpl compiler = new WurstCompilerJassImpl(null, gui, null, new RunArgs("-prettyPrint")); + + CompilationUnit cu = compiler.parse("test", new StringReader(content)); + + debugPrint(cu); + + PrettyPrinter.prettyPrint(cu, new MaxOneSpacer(), sb, 0); + + return sb.toString(); + } + + private void debugPrint(CompilationUnit cu) { + StringBuilder dsb = new StringBuilder(); + debugPrint(cu, dsb, 0); + System.out.println(dsb); + } + + private void debugPrint(Element e, StringBuilder sb, int i) { + List commentsBefore = Collections.emptyList(); + List commentsAfter = Collections.emptyList(); + if (e instanceof AstElementWithSource) { + AstElementWithSource s = (AstElementWithSource) e; + WPos source = s.getSource(); + if (source instanceof WPosWithComments) { + WPosWithComments source2 = (WPosWithComments) source; + commentsBefore = source2.getCommentsBefore(); + commentsAfter = source2.getCommentsAfter(); + } + } + sb.append("("); + for (Comment comment : commentsBefore) { + sb.append(comment.getContent()); + newLine(sb, i + 1); + } + sb.append(e.getClass().getSimpleName().replaceAll("Impl", "")); + if (e instanceof Identifier) { + sb.append(" ").append(((Identifier) e).getName()); + } + for (int j = 0; j < e.size(); j++) { + newLine(sb, i + 1); + debugPrint(e.get(j), sb, i + 2); + } + for (Comment comment : commentsAfter) { + newLine(sb, i + 1); + sb.append(comment.getContent()); + } + sb.append(")"); + } + + private void newLine(StringBuilder sb, int i) { + sb.append("\n"); + for (int j = 0; j < i; j++) { + sb.append(" "); + } + } + + private String expectedFile(String filename) throws IOException { + StringBuilder sb = new StringBuilder(); + File inFile = new File(filename); + return Files.toString(inFile, Charsets.UTF_8); + } + + // Note: only works with single extension files, i.e it doesn't work with: + // asdf.tar.gz + private static String extension(String filename) { + String extension = ""; + + int i = filename.lastIndexOf('.'); + if (i > 0) { + extension = filename.substring(i + 1); + } + return extension; + } + + private void test(String filename) throws IOException { + String testFilenameFormat = "testscripts/pretty/%s"; + String pretty = setUp(String.format(testFilenameFormat, filename)); + String expected = expectedFile(String.format(testFilenameFormat, filename)); + + assertEquals(expected, pretty); + } + + @Test + public void testPrettyIf() throws IOException { + test("If.wurst"); + } + + @Test + public void testPrettyLoops() throws IOException { + test("Loops.wurst"); + } + + @Test + public void testPrettyAssignments() throws IOException { + test("Assignment_shorthand.wurst"); + } + + @Test + public void testCascade() throws IOException { + test("Cascade.wurst"); + } + + @Test + public void testSwitch() throws IOException { + test("Switch.wurst"); + } + + @Test + public void testAnnotations() throws IOException { + test("Annotations.wurst"); + } + + @Test + public void testClosures() throws IOException { + test("Closures.wurst"); + } + + @Test + public void testEnum() throws IOException { + test("Enum.wurst"); + } + + @Test + public void testFunctionDefinitions() throws IOException { + test("FunctionDefinitions.wurst"); + } + + @Test + public void testTernary() throws IOException { + test("Ternary.wurst"); + } + + @Test + public void testBinaryExprAndMethod() throws IOException { + test("BinaryExprAndMethod.wurst"); + } + + @Test + public void testReal1() throws IOException { + test("Real1.wurst"); + } + + @Test + public void testReal2() throws IOException { + test("Real2.wurst"); + } + + @Test + public void testReal3() throws IOException { + test("Real3.wurst"); + } + @Test - public void testPrettyPrint() { - String input = "package Test\n" + - "constant int i = 0\n" + - "int i2=0\n" + - "int i3\n" + - "constant i4 = 5\n" + - "public constant r = 23.524362\n" + - "\n" + - "enum E\n" + - "\tSOME_VAL\n" + - "class Test\n" + - "\tprivate string s\n" + - "\tconstruct(string name)\n" + - "\t\tthis. s =name\n" + - "\tfunction foo(boolean bar) returns boolean\n" + - "\t\t\treturn not bar\n" + - "class Boo extends Test\n" + - "\tconstruct()\n" + - "\t\tsuper(\"boo\")\n" + - "\tfunction doIt()\n" + - "\t\tlet tst = new Test(\"fork\") castTo Boo"; - WurstModel model = testScript("pretty", false, input); - StringBuilder stringBuilder = new StringBuilder(); - PrettyPrinter.prettyPrint(model, new MaxOneSpacer(), stringBuilder, 0); - System.out.println("Pretty:\n\n" + stringBuilder.toString()); - - testAssertOk("prettyTest", false, stringBuilder.toString()); + public void testComments() throws IOException { + test("Comments.wurst"); } } diff --git a/de.peeeq.wurstscript/testscripts/pretty/Annotations.wurst b/de.peeeq.wurstscript/testscripts/pretty/Annotations.wurst new file mode 100644 index 000000000..481446f52 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Annotations.wurst @@ -0,0 +1,13 @@ +package Annotations + +@configurable constant SOME_VAR = 12 +@config constant SOME_VAR = 24 + +@compiletime function foo() + skip + +@test function someTest() + skip + +@deprecated("Use .size() instead") function getSize() returns int + skip diff --git a/de.peeeq.wurstscript/testscripts/pretty/Assignment_shorthand.wurst b/de.peeeq.wurstscript/testscripts/pretty/Assignment_shorthand.wurst new file mode 100644 index 000000000..b34b5adf8 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Assignment_shorthand.wurst @@ -0,0 +1,12 @@ +package If + +init + var i = 0 + var x = 1. + var y = 1. + i++ + i-- + x += y + x -= y + x *= y + x /= y diff --git a/de.peeeq.wurstscript/testscripts/pretty/BinaryExprAndMethod.wurst b/de.peeeq.wurstscript/testscripts/pretty/BinaryExprAndMethod.wurst new file mode 100644 index 000000000..0e1155837 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/BinaryExprAndMethod.wurst @@ -0,0 +1,6 @@ +package BinaryExprAndMethod + +init + c = "1" + int hash + hash = ("00" + c).getHash() diff --git a/de.peeeq.wurstscript/testscripts/pretty/Cascade.wurst b/de.peeeq.wurstscript/testscripts/pretty/Cascade.wurst new file mode 100644 index 000000000..c6866f484 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Cascade.wurst @@ -0,0 +1,7 @@ +package Cascade + +init + CreateTrigger() + ..registerAnyUnitEvent(EVENT_PLAYER_UNIT_ISSUED_ORDER) + ..addCondition(Condition(function cond)) + ..addAction(function action) diff --git a/de.peeeq.wurstscript/testscripts/pretty/Closures.wurst b/de.peeeq.wurstscript/testscripts/pretty/Closures.wurst new file mode 100644 index 000000000..dd07e8c87 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Closures.wurst @@ -0,0 +1,13 @@ +package Closures + +init + doLater(10.0, () -> begin + KillUnit(u) + createNiceExplosion() + doMoreStuff() + end) + Predicate pred = (int x) -> x mod 2 == 0 + let t = getTimer() + let x = 3 + t.setData(x) + t.start(3.0, () -> doSomething(GetExpiredTimer().getData())) diff --git a/de.peeeq.wurstscript/testscripts/pretty/Comments.wurst b/de.peeeq.wurstscript/testscripts/pretty/Comments.wurst new file mode 100644 index 000000000..4533149ac --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Comments.wurst @@ -0,0 +1,15 @@ +package Test + +// a variable +int x /*x*/ = /*y*/ 6 + + +function bla() returns int + return 1 // returns 1 + +// some function +function foo() + int x = 4 + /* int */ let y = x + 1 + // some comment at the end + diff --git a/de.peeeq.wurstscript/testscripts/pretty/Enum.wurst b/de.peeeq.wurstscript/testscripts/pretty/Enum.wurst new file mode 100644 index 000000000..2574fc94f --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Enum.wurst @@ -0,0 +1,6 @@ +package Enum + +enum State + FLYING + GROUND + WATER diff --git a/de.peeeq.wurstscript/testscripts/pretty/FunctionDefinitions.wurst b/de.peeeq.wurstscript/testscripts/pretty/FunctionDefinitions.wurst new file mode 100644 index 000000000..cc8112284 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/FunctionDefinitions.wurst @@ -0,0 +1,13 @@ +package Closures + +public function unit.getX() returns real + return GetUnitX(this) + +public function real.half() returns real + return this / 2 + +public function int.add(int value) + return this + value + +public function BlubClass.getPrivateMember() returns real + return this.privateMember diff --git a/de.peeeq.wurstscript/testscripts/pretty/If.wurst b/de.peeeq.wurstscript/testscripts/pretty/If.wurst new file mode 100644 index 000000000..481781854 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/If.wurst @@ -0,0 +1,16 @@ +package If + +init + var i = 0 + if i == 0 + i = 1 + else if 1 == 1 + i = 2 + else + i = 3 + if caster.getOwner() == BOT_PLAYER + print("caster owned by BOT_PLAYER") + if GetSpellAbilityId() == SPELL_ID + flashEffect(getSpellTargetPos(), FX_PATH) + if x > 0 and x < 100 and y > 0 and y < 100 + print("inside box") diff --git a/de.peeeq.wurstscript/testscripts/pretty/Loops.wurst b/de.peeeq.wurstscript/testscripts/pretty/Loops.wurst new file mode 100644 index 000000000..4bd6a59a5 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Loops.wurst @@ -0,0 +1,17 @@ +package Loops + +init + while a > b + skip + for i = 0 to 10 + skip + for i = 0 to 10 step 2 + skip + for i = 10 downto 0 + skip + for u in someGroup + skip + for u from someGroup + skip + for i in myList + skip diff --git a/de.peeeq.wurstscript/testscripts/pretty/Real1.wurst b/de.peeeq.wurstscript/testscripts/pretty/Real1.wurst new file mode 100644 index 000000000..07798a0cc --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Real1.wurst @@ -0,0 +1,51 @@ +package FocusFire + +import ChannelAbilityPreset +import Assets +import RegisterEvents +import ClosureForGroups +import GameplayConstants +import TowerConstants +import TimedEffect +import Movement +import Regions +import Tooltip + +@compiletime function generateFocusFire() + new ChannelAbilityPreset(ID_FOCUS_FIRE, 1, true) + ..setName("Focus fire") + ..setHotkeyNormal("Q") + ..setTooltipNormal(1, tooltipCustomBasic("Q", "Focus fire", "")) + ..setTooltipNormalExtended(1, tooltipTextFlavor("Orders all your towers to attack a certain unit.", "\"Why do it yourself when someone else can.. Twice as well even.\" - Unknown Peon")) + ..setIconNormal(Icons.bTNAdvancedCreatureAttack) + ..presetTargetTypes(Targettype.UNIT) + ..setTargetsAllowed(1, "enemy") + ..setCastRange(1, 1000) + ..setManaCost(1, 0) + ..setHeroAbility(false) + ..setButtonPositionNormalX(3) + ..setButtonPositionNormalY(0) + +class AttackTarget implements ForGroupCallback + unit target + unit caster + + construct(unit caster, unit target) + this.caster = caster + this.target = target + + function callback(unit u) + if u.getOwner() != PLAYER_BROWN and u != this.caster + u.issueTargetOrder("attack", this.target) + +function focusFire() + let target = GetSpellTargetUnit() + let caster = GetTriggerUnit() + let p = target.getPlayerN() + let r = rectFromIndex(playerArea.get(p)) + AttackTarget at = new AttackTarget(caster, target) + forUnitsInRect(r, at) + attatchTimedEffect(target, 3., Abilities.talkToMe, "overhead") + +init + registerSpellEffectEvent(ID_FOCUS_FIRE, function focusFire) diff --git a/de.peeeq.wurstscript/testscripts/pretty/Real2.wurst b/de.peeeq.wurstscript/testscripts/pretty/Real2.wurst new file mode 100644 index 000000000..9a3d5be8f --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Real2.wurst @@ -0,0 +1,52 @@ +package Uren + +import Assets +import Damage +import UnitObjEditing +import TowerDefinition +import TowerConstants +import BuilderConstants +import Tooltip +import ID2S + +constant GOLD_COST = 150 +constant RANGE = 500 +constant ATTACK_SPEED = 0.6 +constant DAMAGE_BASE = 41 +constant DAMAGE_SIDES_PER_DIE = 15 +constant POINT_VALUE = GOLD_COST + +class Uren extends TowerDefinition + construct(int id) + super(id) + setIconGameInterface(Icons.bTNDruidOfTheClaw) + setModelFile(Units.druidoftheClaw) + setTintingColorRed(255) + setTintingColorGreen(255) + setTintingColorBlue(255) + setUnitSoundSet("DruidOfTheClaw") + setScalingValue(1.) + setGroundTexture(ID_FULLMOON_TRIBE_GROUND_TEXTURE) + setAcquisitionRange(RANGE.toReal()) + setAttack1Range(RANGE) + setAttack1CooldownTime(ATTACK_SPEED) + setAttack1DamageBase(DAMAGE_BASE) + setAttack1DamageSidesperDie(DAMAGE_SIDES_PER_DIE) + setNormalAbilities(ID2S(ID_SELL_TOWER) + "," + ID2S(ID_TOWER_UREN_TRAP_COOLDOWN)) + setAttack1ProjectileArt(Abilities.ancientProtectorMissile) + setAttack1ProjectileHomingEnabled(true) + setAttack1ProjectileSpeed(800) + setAttack1WeaponType(WeaponType.Missile) + setGoldCost(GOLD_COST) + setPointValue(POINT_VALUE) + setUpgradesTo("") + setUpgradesUsed("") + setButtonPositionX(3) + setButtonPositionY(0) + setHotkey("R") + setName("Uren Blacktooth") + setTooltipBasic(tooltipBuild("R", "Uren Blacktooth")) + setTooltipExtended(tooltipTowerExtended("High damage tower with the ability to place traps.", damageBoundary(DAMAGE_BASE, DAMAGE_SIDES_PER_DIE), ATTACK_SPEED, RANGE, "Trap", "As the apprentice of Lea Stoneclaw herself Uren is fearless hunter that knows every trick there is in the huners arsenal.")) + +@compiletime function tower() + new Uren(ID_TOWER_UREN) diff --git a/de.peeeq.wurstscript/testscripts/pretty/Real3.wurst b/de.peeeq.wurstscript/testscripts/pretty/Real3.wurst new file mode 100644 index 000000000..ff344c73e --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Real3.wurst @@ -0,0 +1,67 @@ +package Alexandria + +import HashMap + +public HashMap mobMap = new HashMap +public HashMap towerMap = new HashMap + +public abstract class TowerWrapper + unit u + + construct(unit u) + this.u = u + towerMap.put(this.u.getHandleId(), this) + + function getUnit() returns unit + return this.u + + ondestroy + towerMap.remove(this.u.getHandleId()) + +public class EmptyMobWrapper extends MobWrapper + construct(unit u) + super(u) + +public abstract class MobWrapper implements Spawner, Enterer, Deather, Ender, Ticker + unit u + + construct(unit u) + this.u = u + mobMap.put(this.u.getHandleId(), this) + + function getUnit() returns unit + return this.u + + function onSpawn() + skip + + function onEnter() + skip + + function onEnd() returns bool + return false + + function onDeath() + skip + + function startTick() + skip + + ondestroy + mobMap.remove(this.u.getHandleId()) + u.remove() + +public interface Spawner + function onSpawn() + +public interface Enterer + function onEnter() + +public interface Deather + function onDeath() + +public interface Ender + function onEnd() returns bool + +public interface Ticker + function startTick() diff --git a/de.peeeq.wurstscript/testscripts/pretty/Switch.wurst b/de.peeeq.wurstscript/testscripts/pretty/Switch.wurst new file mode 100644 index 000000000..2f1564153 --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Switch.wurst @@ -0,0 +1,13 @@ +package Switch + +init + int i = 2 + switch i + case 1 + print("1") + case 3 + print("3") + case 88 + print("88") + default + print("not implemented") diff --git a/de.peeeq.wurstscript/testscripts/pretty/Ternary.wurst b/de.peeeq.wurstscript/testscripts/pretty/Ternary.wurst new file mode 100644 index 000000000..1935aacad --- /dev/null +++ b/de.peeeq.wurstscript/testscripts/pretty/Ternary.wurst @@ -0,0 +1,3 @@ +package Ternary + +public constant string enemyCount = n.toString() + " " + n == 1 ? "enemy" : "enemies" From 54584883066ccf927eea6d1c7dfcb6edc122c80c Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 8 Nov 2023 17:21:48 +0100 Subject: [PATCH 51/74] Fix renaming array symbols --- .../wurstio/languageserver/requests/GetUsages.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetUsages.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetUsages.java index 5ef088ea8..a62885f60 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetUsages.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetUsages.java @@ -4,9 +4,7 @@ import de.peeeq.wurstio.languageserver.BufferManager; import de.peeeq.wurstio.languageserver.Convert; import de.peeeq.wurstio.languageserver.WFile; -import de.peeeq.wurstscript.ast.CompilationUnit; -import de.peeeq.wurstscript.ast.Element; -import de.peeeq.wurstscript.ast.NameDef; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.utils.Utils; import org.eclipse.lsp4j.*; @@ -61,7 +59,11 @@ public List execute(ModelManager modelManager) { } NameDef e_def = e.tryGetNameDef(); if (e_def == nameDef.get()) { - UsagesData usagesData = new UsagesData(Convert.posToLocation(e.attrErrorPos()), DocumentHighlightKind.Read); + if (e instanceof ExprVarArrayAccess) { + e = ((ExprVarArrayAccess) e).getVarNameId(); + } + Location location = Convert.posToLocation(e.attrErrorPos()); + UsagesData usagesData = new UsagesData(location, DocumentHighlightKind.Read); usages.add(usagesData); } } @@ -111,5 +113,6 @@ public Location getLocation() { public DocumentHighlight toDocumentHighlight() { return new DocumentHighlight(location.getRange(), kind); } + } } From 1588f63c3923b416e0af49d93b46fc7938a57504 Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 20 Nov 2023 16:41:00 +0100 Subject: [PATCH 52/74] Update README.markdown --- README.markdown | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/README.markdown b/README.markdown index 983653074..f65b500b9 100644 --- a/README.markdown +++ b/README.markdown @@ -2,7 +2,7 @@ Wurstscript is a delicious programming language which compiles to Jass or Lua code that is used to power WarCraft III maps. -[![Build Status](http://peeeq.de/hudson/job/Wurst/badge/icon)](http://peeeq.de/hudson/job/Wurst/) +[![Build Status](https://grill.wurstlang.org/hudson/job/Wurst/badge/icon)](http://grill.wurstlang.org/hudson/job/Wurst/) [![CircleCI](https://dl.circleci.com/status-badge/img/gh/wurstscript/WurstScript/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/wurstscript/WurstScript/tree/master) [![GitHub issues](https://img.shields.io/github/issues/wurstscript/WurstScript.svg)]() [![GitHub pull requests](https://img.shields.io/github/issues-pr/wurstscript/WurstScript.svg)]() @@ -36,33 +36,40 @@ This repository contains the following sub-projects: - The core wurstscript compiler and directly related tools - Wurstpack - (deprecated) Wurst integration for the Warcraft III World Editor + - HelperScripts + - Some external scripts used for generating data e.g. for StdLib IDE support is provided via a VSCode plugin: https://github.com/wurstscript/wurst4vscode The source for the wurstscript website can be found here: https://github.com/wurstscript/wurstscript.github.io -## Build Process +## Compiler Build Process + +Java 11+ is required to build the project. Clone the repository and open the `de.peeeq.wurstscript` folder which contains the compiler project. ### Using Gradle -Simply run the appropriate gradle task using the provided gradle wrapper. +Use the gradle wrapper to run required tasks, it will download gradle automatically. Replace `[task_name]` with the desired task. ```bash -./gradlew compileJava +.\gradlew [task_name] ``` -For deploying .jars and .zips see tasks in **deploy.gradle** +#### Examples + +To update the local compiler installation used by vscode run ```bash -./gradlew create_zip_wurstpack_compiler +.\gradlew make_for_userdir ``` -To update your compiler installation use +For deploying .jars and .zips see tasks in **deploy.gradle** ```bash -./gradlew make_for_userdir +.\gradlew create_zip_wurstpack_compiler ``` + ### Import into IDE You can import the compiler project into any IDE that provides a gradle plugin. From b82dc396391a3d3456a2752f8be3b97ec27d2471 Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 22 Nov 2023 16:41:40 +0100 Subject: [PATCH 53/74] More performance improvements & fixes (#1081) * only extract map script if map changed * some more parallelization * update wc3libs to fix loading screen issues * only apply loading screen background when not null --- de.peeeq.wurstscript/build.gradle | 2 +- .../main/java/de/peeeq/wurstio/TimeTaker.java | 19 +++ .../peeeq/wurstio/WurstCompilerJassImpl.java | 46 ++++-- .../ReflectionBasedNativeProvider.java | 77 +++++----- .../ReflectionNativeProvider.java | 6 +- .../languageserver/ProjectConfigBuilder.java | 24 ++-- .../languageserver/requests/MapRequest.java | 72 ++++++---- .../languageserver/requests/RunMap.java | 1 + .../attributes/names/NameResolution.java | 3 +- .../imtranslation/CyclicFunctionRemover.java | 136 ++++++++++-------- .../translation/imtranslation/Flatten.java | 32 ++--- .../imtranslation/ImTranslator.java | 6 +- .../imtranslation/MultiArrayEliminator.java | 2 +- .../validation/WurstValidator.java | 30 ++-- 14 files changed, 261 insertions(+), 195 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 05a1c2003..7ed0635f3 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -108,7 +108,7 @@ dependencies { implementation group: 'com.github.inwc3', name: 'jmpq3', version: '264c54cfc8' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:ad25440d15' + implementation 'com.github.inwc3:wc3libs:01fb9e23bf' // The setup tool for wurst.build handling implementation 'com.github.wurstscript:wurstsetup:475cc7fae8' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/TimeTaker.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/TimeTaker.java index 95ee20038..df5de9986 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/TimeTaker.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/TimeTaker.java @@ -2,6 +2,8 @@ import de.peeeq.wurstscript.utils.Utils; +import java.lang.management.GarbageCollectorMXBean; +import java.lang.management.ManagementFactory; import java.util.LinkedHashMap; import java.util.Map; import java.util.function.Supplier; @@ -53,6 +55,8 @@ class Recording implements TimeTaker { private long currentPhaseStart; private Map accumulatedTimes = new LinkedHashMap<>(); + private Long startTime = 0L; + public T measure(String name, Supplier f) { name = withNesting(name); nesting++; @@ -76,6 +80,9 @@ private void reportDuration(String name, long duration) { @Override public void beginPhase(String description) { + if (accumulatedTimes.isEmpty()) { + this.startTime = System.currentTimeMillis(); + } if (currentPhaseDescription != null) { endPhase(); } @@ -101,9 +108,21 @@ public void endPhase() { public void printReport() { System.out.println("#############################"); System.out.println("Run times:"); + for (Map.Entry e : accumulatedTimes.entrySet()) { System.out.println(e.getKey() + ": " + e.getValue() + "ms"); } + + System.out.println("Total runtime: " + (System.currentTimeMillis() - startTime) + "ms"); + System.out.println("GC time: " + getGarbageCollectionTime() + "ms"); + } + + private static long getGarbageCollectionTime() { + long collectionTime = 0; + for (GarbageCollectorMXBean garbageCollectorMXBean : ManagementFactory.getGarbageCollectorMXBeans()) { + collectionTime += garbageCollectorMXBean.getCollectionTime(); + } + return collectionTime; } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index db26ef4af..7d30873dc 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -421,25 +421,31 @@ public JassProg transformProgToJass() { beginPhase(2, "Eliminate generics"); new EliminateGenerics(imTranslator2, imProg2).transform(); printDebugImProg("./test-output/im " + stage++ + "_genericsEliminated.im"); - + timeTaker.endPhase(); // eliminate classes beginPhase(2, "translate classes"); new EliminateClasses(imTranslator2, imProg2, !runArgs.isUncheckedDispatch()).eliminateClasses(); imTranslator2.assertProperties(); printDebugImProg("./test-output/im " + stage++ + "_classesEliminated.im"); + timeTaker.endPhase(); new VarargEliminator(imProg2).run(); printDebugImProg("./test-output/im " + stage++ + "_varargEliminated.im"); imTranslator2.assertProperties(); + + timeTaker.endPhase(); + if (runArgs.isNoDebugMessages()) { beginPhase(3, "remove debug messages"); DebugMessageRemover.removeDebugMessages(imProg2); + timeTaker.endPhase(); } else { // debug: add stacktraces if (runArgs.isIncludeStacktraces()) { beginPhase(4, "add stack traces"); new StackTraceInjector2(imProg2, imTranslator2).transform(timeTaker); + timeTaker.endPhase(); } } imTranslator2.assertProperties(); @@ -453,49 +459,60 @@ public JassProg transformProgToJass() { imTranslator2.assertProperties(); printDebugImProg("./test-output/im " + stage++ + "_afterinline.im"); + timeTaker.endPhase(); } // eliminate tuples beginPhase(6, "eliminate tuples"); - getImProg().flatten(imTranslator2); - EliminateTuples.eliminateTuplesProg(getImProg(), imTranslator2); + timeTaker.measure("flatten", () -> getImProg().flatten(imTranslator2)); + timeTaker.measure("kill tuples", () -> EliminateTuples.eliminateTuplesProg(getImProg(), imTranslator2)); getImTranslator().assertProperties(AssertProperty.NOTUPLES); printDebugImProg("./test-output/im " + stage++ + "_withouttuples.im"); + timeTaker.endPhase(); + + beginPhase(7, "eliminate multi arrays"); new MultiArrayEliminator(imProg2, imTranslator2, runArgs.isIncludeStacktraces() && !runArgs.isNoDebugMessages()).run(); printDebugImProg("./test-output/im " + stage++ + "_withoutmultiarrays.im"); imTranslator2.assertProperties(); + timeTaker.endPhase(); - beginPhase(7, "remove func refs"); + beginPhase(8, "remove func refs"); new FuncRefRemover(imProg2, imTranslator2).run(); + timeTaker.endPhase(); // remove cycles: - beginPhase(8, "remove cyclic functions"); + beginPhase(9, "remove cyclic functions"); new CyclicFunctionRemover(imTranslator2, imProg2, timeTaker).work(); printDebugImProg("./test-output/im " + stage++ + "_nocyc.im"); + timeTaker.endPhase(); // flatten - beginPhase(9, "flatten"); + beginPhase(10, "flatten"); getImProg().flatten(imTranslator2); getImTranslator().assertProperties(AssertProperty.NOTUPLES, AssertProperty.FLAT); printDebugImProg("./test-output/im " + stage++ + "_flat.im"); + timeTaker.endPhase(); if (runArgs.isLocalOptimizations()) { - beginPhase(10, "local optimizations"); + beginPhase(11, "local optimizations"); optimizer.localOptimizations(); + timeTaker.endPhase(); } printDebugImProg("./test-output/im " + stage++ + "_afterlocalopts.im"); if (runArgs.isNullsetting()) { - beginPhase(11, "null setting"); + beginPhase(12, "null setting"); optimizer.doNullsetting(); printDebugImProg("./test-output/im " + stage++ + "_afternullsetting.im"); + timeTaker.endPhase(); } + beginPhase(13, "flatten"); optimizer.removeGarbage(); imProg.flatten(imTranslator); @@ -504,12 +521,13 @@ public JassProg transformProgToJass() { imProg.flatten(imTranslator); printDebugImProg("./test-output/im " + stage++ + "_afterremoveGarbage1.im"); + timeTaker.endPhase(); if (runArgs.isHotStartmap() || runArgs.isHotReload()) { addJassHotCodeReloadCode(); } if (runArgs.isOptimize()) { - beginPhase(12, "froptimize"); + beginPhase(13, "froptimize"); optimizer.optimize(); optimizer.removeGarbage(); @@ -521,7 +539,7 @@ public JassProg transformProgToJass() { // translate flattened intermediate lang to jass: - beginPhase(13, "translate to jass"); + beginPhase(14, "translate to jass"); getImTranslator().calculateCallRelationsAndUsedVariables(); ImToJassTranslator translator = new ImToJassTranslator(getImProg(), getImTranslator().getCalledFunctions(), getImTranslator().getMainFunc(), getImTranslator().getConfFunc()); @@ -841,11 +859,13 @@ public LuaCompilationUnit transformProgToLua() { if (runArgs.isNoDebugMessages()) { beginPhase(3, "remove debug messages"); DebugMessageRemover.removeDebugMessages(imProg); + timeTaker.endPhase(); } else { // debug: add stacktraces if (runArgs.isIncludeStacktraces()) { beginPhase(4, "add stack traces"); new StackTraceInjector2(imProg, imTranslator).transform(timeTaker); + timeTaker.endPhase(); } } ImTranslator imTranslator2 = getImTranslator(); @@ -858,6 +878,7 @@ public LuaCompilationUnit transformProgToLua() { imTranslator2.assertProperties(); printDebugImProg("./test-output/lua/im " + stage++ + "_afterinline.im"); + timeTaker.endPhase(); } // eliminate local types @@ -867,11 +888,12 @@ public LuaCompilationUnit transformProgToLua() { optimizer.removeGarbage(); imProg.flatten(imTranslator); - + timeTaker.endPhase(); stage = 10; if (runArgs.isLocalOptimizations()) { beginPhase(10, "local optimizations"); optimizer.localOptimizations(); + timeTaker.endPhase(); } printDebugImProg("./test-output/lua/im " + stage++ + "_afterlocalopts.im"); @@ -893,11 +915,13 @@ public LuaCompilationUnit transformProgToLua() { optimizer.removeGarbage(); imProg.flatten(imTranslator); printDebugImProg("./test-output/lua/im " + stage++ + "_afteroptimize.im"); + timeTaker.endPhase(); } beginPhase(13, "translate to lua"); LuaTranslator luaTranslator = new LuaTranslator(imProg, imTranslator); LuaCompilationUnit luaCode = luaTranslator.translate(); ImAttrType.setWurstClassType(TypesHelper.imInt()); + timeTaker.endPhase(); return luaCode; } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionBasedNativeProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionBasedNativeProvider.java index 4bcc4e397..de12c9368 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionBasedNativeProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionBasedNativeProvider.java @@ -4,61 +4,60 @@ import de.peeeq.wurstscript.intermediatelang.ILconst; import de.peeeq.wurstscript.intermediatelang.interpreter.NativesProvider; import de.peeeq.wurstscript.intermediatelang.interpreter.NoSuchNativeException; +import de.peeeq.wurstscript.utils.Pair; import java.io.PrintStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; +import java.util.HashMap; import java.util.stream.Collectors; public abstract class ReflectionBasedNativeProvider implements NativesProvider { protected PrintStream outStream = System.err; - @Override - public ILconst invoke(String funcname, ILconst[] args) throws NoSuchNativeException { - Method candidate = null; - nextMethod: + private final HashMap, Method> methodMap = new HashMap<>(); + + public ReflectionBasedNativeProvider() { for (Method method : this.getClass().getMethods()) { - if (method.getName().equals(funcname)) { - // this is a candidate as it has the correct name - candidate = method; - Object r; - try { - if (args.length != method.getParameterTypes().length) { - continue; - } - int i = 0; - for (Class paramType : method.getParameterTypes()) { - if (!paramType.isAssignableFrom(args[i].getClass())) { - continue nextMethod; - } - i++; - } - r = method.invoke(this, (Object[]) args); - } catch (IllegalAccessException | IllegalArgumentException e) { - WLogger.severe(e); - throw new Error(e); - } catch (InvocationTargetException e) { - if (e.getCause() instanceof InterpreterException) { - throw (InterpreterException) e.getCause(); - } if (e.getCause() instanceof Error) { - throw (Error) e.getCause(); - } - throw new Error(e.getCause()); - } - return (ILconst) r; + Pair keyPair = Pair.create(method.getName(), method.getParameterTypes().length); + if (methodMap.containsKey(keyPair)) { + throw new RuntimeException("native entry already exists"); } + methodMap.put(keyPair, method); } - String msg = "Calling method " + funcname + "(" + + } + + @Override + public ILconst invoke(String funcname, ILconst[] args) throws NoSuchNativeException { + Method method = methodMap.get(Pair.create(funcname, args.length)); + if (method == null) { + String msg = "Calling method " + funcname + "(" + Arrays.stream(args).map(Object::toString).collect(Collectors.joining(", ")) + ")"; - msg += "\nwith types " + funcname + "(" + - Arrays.stream(args).map(o -> o.getClass().getSimpleName()).collect(Collectors.joining(", ")) + ")"; - if (candidate != null) { - msg += "\nDid you mean " + funcname + "(" + - Arrays.stream(candidate.getParameterTypes()).map(Class::getSimpleName).collect(Collectors.joining(", ")) + ")?"; + msg += "\nwith types " + funcname + "(" + + Arrays.stream(args).map(o -> o.getClass().getSimpleName()).collect(Collectors.joining(", ")) + ")"; +// if (candidate != null) { +// msg += "\nDid you mean " + funcname + "(" + +// Arrays.stream(candidate.getParameterTypes()).map(Class::getSimpleName).collect(Collectors.joining(", ")) + ")?"; +// } + throw new NoSuchNativeException(msg); } - throw new NoSuchNativeException(msg); + try { + return (ILconst) method.invoke(this, (Object[]) args); + } catch (IllegalAccessException | IllegalArgumentException e) { + WLogger.severe(e); + throw new Error(e); + } catch (InvocationTargetException e) { + if (e.getCause() instanceof InterpreterException) { + throw (InterpreterException) e.getCause(); + } + if (e.getCause() instanceof Error) { + throw (Error) e.getCause(); + } + throw new Error(e.getCause()); + } + } @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java index e93730bcb..754381cd1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java @@ -15,7 +15,7 @@ import java.util.HashMap; public class ReflectionNativeProvider implements NativesProvider { - private HashMap methodMap = new HashMap<>(); + private final HashMap methodMap = new HashMap<>(); public ReflectionNativeProvider(AbstractInterpreter interpreter) { addProvider(new GamecacheProvider(interpreter)); @@ -70,10 +70,6 @@ private void addProvider(Provider provider) { @Override public ILconst invoke(String funcname, ILconst[] args) throws NoSuchNativeException { - String msg = "Calling method " + funcname + "(" + - Utils.printSep(", ", args) + ")"; - WLogger.trace(msg); - NativeJassFunction candidate = methodMap.get(funcname); if (candidate == null) { throw new NoSuchNativeException(""); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java index 245dbf63d..4dcf20047 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java @@ -56,7 +56,7 @@ public static MapRequest.CompilationResult apply(WurstProjectConfigData projectC } else { GameVersion version = GameVersion.VERSION_1_32; System.out.println( - "Failed to determine installed game version. Falling back to " + version.toString() + "Failed to determine installed game version. Falling back to " + version ); w3I.injectConfigsInJassScript(inputStream, sw, version); } @@ -66,7 +66,7 @@ public static MapRequest.CompilationResult apply(WurstProjectConfigData projectC result.w3i = new File(buildDir, "war3map.w3i"); if (runArgs.isLua()) { w3I.setScriptLang(W3I.ScriptLang.LUA); - w3I.setFileVersion(W3I.EncodingFormat.W3I_0x1C.getVersion()); + w3I.setFileVersion(W3I.EncodingFormat.W3I_0x1F.getVersion()); } w3I.write(result.w3i); Files.write(scriptBytes, result.script); @@ -106,10 +106,10 @@ private static W3I prepareW3I(WurstProjectConfigData projectConfig, MpqEditor mp } applyScenarioData(w3I, buildMapData); - if (buildMapData.getPlayers().size() > 0) { + if (!buildMapData.getPlayers().isEmpty()) { applyPlayers(projectConfig, w3I); } - if (buildMapData.getForces().size() > 0) { + if (!buildMapData.getForces().isEmpty()) { applyForces(projectConfig, w3I); } applyOptionFlags(projectConfig, w3I); @@ -139,16 +139,16 @@ private static void applyScenarioData(W3I w3I, WurstProjectBuildMapData buildMap } } - private static void applyLoadingScreen(W3I w3I, WurstProjectBuildLoadingScreenData loadingScreen) { - if (StringUtils.isNotBlank(loadingScreen.getModel())) { - w3I.getLoadingScreen().setBackground(new LoadingScreenBackground.CustomBackground(new File(loadingScreen.getModel()))); - } else { - w3I.getLoadingScreen().setBackground(LoadingScreenBackground.PresetBackground.findByName(loadingScreen.getBackground())); + private static void applyLoadingScreen(W3I w3I, WurstProjectBuildLoadingScreenData loadingScreenData) { + if (StringUtils.isNotBlank(loadingScreenData.getModel())) { + w3I.getLoadingScreen().setBackground(new LoadingScreenBackground.CustomBackground(new File(loadingScreenData.getModel()))); + } else if (StringUtils.isNotBlank(loadingScreenData.getBackground())) { + w3I.getLoadingScreen().setBackground(LoadingScreenBackground.PresetBackground.findByName(loadingScreenData.getBackground())); } - w3I.getLoadingScreen().setTitle(loadingScreen.getTitle()); - w3I.getLoadingScreen().setSubtitle(loadingScreen.getSubTitle()); - w3I.getLoadingScreen().setText(loadingScreen.getText()); + w3I.getLoadingScreen().setTitle(loadingScreenData.getTitle()); + w3I.getLoadingScreen().setSubtitle(loadingScreenData.getSubTitle()); + w3I.getLoadingScreen().setText(loadingScreenData.getText()); } private static void applyForces(WurstProjectConfigData projectConfig, W3I w3I) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 09bf28891..e7508bb44 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -287,8 +287,6 @@ protected File compileScript(WurstGui gui, ModelManager modelManager, List testMap, WurstProjectConfigData projectConfigData, File buildDir, boolean isProd) throws Exception { if (testMap.isPresent() && testMap.get().exists()) { boolean deleteOk = testMap.get().delete(); @@ -338,7 +337,9 @@ protected CompilationResult compileScript(ModelManager modelManager, WurstGui gu throw new RequestFailedException(MessageType.Error, "Could not find war3map.j file"); } } else { + timeTaker.beginPhase("load map script"); File scriptFile = loadMapScript(testMap, modelManager, gui); + timeTaker.endPhase(); result = applyProjectConfig(gui, testMap, buildDir, projectConfigData, scriptFile); } @@ -360,6 +361,8 @@ protected CompilationResult compileScript(ModelManager modelManager, WurstGui gu return result; } + private static Long lastMapModified = 0L; + private File loadMapScript(Optional mapCopy, ModelManager modelManager, WurstGui gui) throws Exception { File scriptFile = new File(new File(workspaceRoot.getFile(), "wurst"), "war3map.j"); // If runargs are no extract, either use existing or throw error @@ -373,41 +376,48 @@ private File loadMapScript(Optional mapCopy, ModelManager modelManager, Wu "RunArg noExtractMapScript is set but no mapscript is provided inside the wurst folder"); } } - WLogger.info("extracting mapscript"); - byte[] extractedScript = null; - try (@Nullable MpqEditor mpqEditor = MpqEditorFactory.getEditor(mapCopy, true)) { - if (mpqEditor.hasFile("war3map.j")) { - extractedScript = mpqEditor.extractFile("war3map.j"); - } - } - if (extractedScript == null) { - if (scriptFile.exists()) { - String msg = "No war3map.j in map file, using old extracted file"; - WLogger.info(msg); - } else { - CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), - "No war3map.j found in map file."); - gui.showInfoMessage(err.getMessage()); - WLogger.severe(err); + long mapLastModified = mapCopy.get().lastModified(); + if (mapLastModified > lastMapModified) { + lastMapModified = mapLastModified; + WLogger.info("extracting mapscript"); + byte[] extractedScript = null; + try (@Nullable MpqEditor mpqEditor = MpqEditorFactory.getEditor(mapCopy, true)) { + if (mpqEditor.hasFile("war3map.j")) { + extractedScript = mpqEditor.extractFile("war3map.j"); + } } - } else if (new String(extractedScript, StandardCharsets.UTF_8).startsWith(JassPrinter.WURST_COMMENT_RAW)) { - WLogger.info("map has already been compiled with wurst"); - // file generated by wurst, do not use - if (scriptFile.exists()) { - String msg = "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Using war3map.j from Wurst directory instead."; - WLogger.info(msg); + if (extractedScript == null) { + if (scriptFile.exists()) { + String msg = "No war3map.j in map file, using old extracted file"; + WLogger.info(msg); + } else { + CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), + "No war3map.j found in map file."); + gui.showInfoMessage(err.getMessage()); + WLogger.severe(err); + } + } else if (new String(extractedScript, StandardCharsets.UTF_8).startsWith(JassPrinter.WURST_COMMENT_RAW)) { + WLogger.info("map has already been compiled with wurst"); + // file generated by wurst, do not use + if (scriptFile.exists()) { + String msg = "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Using war3map.j from Wurst directory instead."; + WLogger.info(msg); + } else { + CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), + "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Please add war3map.j to the wurst directory."); + gui.showInfoMessage(err.getMessage()); + WLogger.severe(err); + } } else { - CompileError err = new CompileError(new WPos(mapCopy.toString(), new LineOffsets(), 0, 0), - "Cannot use war3map.j from map file, because it already was compiled with wurst. " + "Please add war3map.j to the wurst directory."); - gui.showInfoMessage(err.getMessage()); - WLogger.severe(err); + WLogger.info("new map, use extracted"); + // write mapfile from map to workspace + Files.write(extractedScript, scriptFile); } } else { - WLogger.info("new map, use extracted"); - // write mapfile from map to workspace - Files.write(extractedScript, scriptFile); + System.out.println("Map not modified, not extracting script"); } + return scriptFile; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java index 12259a201..3380ded67 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java @@ -146,6 +146,7 @@ public Object execute(ModelManager modelManager) throws IOException { gui.sendProgress("running " + cmd); Runtime.getRuntime().exec(cmd.toArray(new String[0])); + timeTaker.endPhase(); timeTaker.printReport(); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/NameResolution.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/NameResolution.java index d0d3429b9..14d650572 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/NameResolution.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/NameResolution.java @@ -223,8 +223,7 @@ public static DefLink matchDefLinkReceiver(DefLink n, WurstType receiverType, El if (showErrors) { if (n.getVisibility() == Visibility.PRIVATE_OTHER) { node.addError(Utils.printElement(n.getDef()) + " is private and cannot be used here."); - } - if (n.getVisibility() == Visibility.PROTECTED_OTHER) { + } else if (n.getVisibility() == Visibility.PROTECTED_OTHER) { node.addError(Utils.printElement(n.getDef()) + " is protected and cannot be used here."); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java index 5c0bfff8c..ac8fc1f4f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java @@ -90,7 +90,11 @@ private void removeCycle(List funcs, Set funcSet) { stmts = elseBlock; } - replaceCalls(funcs, funcSet, newFunc, oldToNewVar, prog); + Map funcToIndex = new HashMap<>(); + for (int i = 0; i < funcs.size(); i++) { + funcToIndex.put(funcs.get(i), i); + } + replaceCalls(funcSet, funcToIndex, newFunc, oldToNewVar, prog); for (ImFunction e : Lists.newArrayList(tr.getCalledFunctions().keys())) { Collection called = tr.getCalledFunctions().get(e); @@ -120,78 +124,94 @@ private void replaceVars(Element e, Map oldToNewVar) { } - private void replaceCalls(List funcs, Set funcSet, ImFunction newFunc, Map oldToNewVar, Element e) { - // process children - for (int i = 0; i < e.size(); i++) { - replaceCalls(funcs, funcSet, newFunc, oldToNewVar, e.get(i)); - } + private void replaceCalls(Set funcSet, Map funcToIndex, ImFunction newFunc, Map oldToNewVar, Element e) { + List relevant = new ArrayList<>(); + e.accept(new Element.DefaultVisitor() { + @Override + public void visit(ImFuncRef imFuncRef) { + super.visit(imFuncRef); + relevant.add(imFuncRef); + } + @Override + public void visit(ImFunctionCall imFunctionCall) { + super.visit(imFunctionCall); + relevant.add(imFunctionCall); + } + }); + relevant.parallelStream().forEach(relevantElem -> { + if (relevantElem instanceof ImFuncRef) { + replaceImFuncRef(funcSet, funcToIndex, newFunc, oldToNewVar, (ImFuncRef) relevantElem); + } else if (relevantElem instanceof ImFunctionCall) { + replaceImFunctionCall(funcSet, funcToIndex, newFunc, oldToNewVar, (ImFunctionCall) relevantElem); + } + }); + } - if (e instanceof ImFuncRef) { - ImFuncRef fr = (ImFuncRef) e; - ImFunction f = fr.getFunc(); - if (funcSet.contains(f)) { + private void replaceImFuncRef(Set funcSet, Map funcToIndex, ImFunction newFunc, Map oldToNewVar, ImFuncRef e) { + ImFuncRef fr = e; + ImFunction f = fr.getFunc(); + if (funcSet.contains(f)) { - ImFunction proxyFunc = JassIm.ImFunction(f.attrTrace(), f.getName() + "_proxy", JassIm.ImTypeVars(), f.getParameters().copy(), (ImType) f.getReturnType().copy(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); - prog.getFunctions().add(proxyFunc); + ImFunction proxyFunc = JassIm.ImFunction(f.attrTrace(), f.getName() + "_proxy", JassIm.ImTypeVars(), f.getParameters().copy(), (ImType) f.getReturnType().copy(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); + prog.getFunctions().add(proxyFunc); - ImExprs arguments = JassIm.ImExprs(); - for (ImVar p : proxyFunc.getParameters()) { - arguments.add(JassIm.ImVarAccess(p)); - } + ImExprs arguments = JassIm.ImExprs(); + for (ImVar p : proxyFunc.getParameters()) { + arguments.add(JassIm.ImVarAccess(p)); + } - ImFunctionCall call = JassIm.ImFunctionCall(fr.attrTrace(), f, JassIm.ImTypeArguments(), arguments, true, CallType.NORMAL); + ImFunctionCall call = JassIm.ImFunctionCall(fr.attrTrace(), f, JassIm.ImTypeArguments(), arguments, true, CallType.NORMAL); - if (f.getReturnType() instanceof ImVoid) { - proxyFunc.getBody().add(call); - } else { - proxyFunc.getBody().add(JassIm.ImReturn(proxyFunc.getTrace(), call)); - } - // rewrite the proxy call: - replaceCalls(funcs, funcSet, newFunc, oldToNewVar, call); - // change the funcref to use the proxy - fr.setFunc(proxyFunc); + if (f.getReturnType() instanceof ImVoid) { + proxyFunc.getBody().add(call); + } else { + proxyFunc.getBody().add(JassIm.ImReturn(proxyFunc.getTrace(), call)); } - } else if (e instanceof ImFunctionCall) { - ImFunctionCall fc = (ImFunctionCall) e; - ImFunction oldFunc = fc.getFunc(); - if (funcSet.contains(oldFunc)) { - - ImExprs arguments = JassIm.ImExprs(); - - // first argument is the choice index - arguments.add(JassIm.ImIntVal(funcs.indexOf(oldFunc))); - - // now for the actual arguments - List oldArgs = fc.getArguments().removeAll(); - int pos = 0; - for (int i = 1; i < newFunc.getParameters().size(); i++) { - ImVar p = newFunc.getParameters().get(i); - if (pos < oldArgs.size() && oldToNewVar.get(oldFunc.getParameters().get(pos)) == p) { - arguments.add(oldArgs.get(pos)); - pos++; - } else { - // use default value - arguments.add(tr.getDefaultValueForJassType(p.getType())); - } - } + // rewrite the proxy call: + replaceCalls(funcSet, funcToIndex, newFunc, oldToNewVar, call); + // change the funcref to use the proxy + fr.setFunc(proxyFunc); + } + } + + private void replaceImFunctionCall(Set funcSet, Map funcToIndex, ImFunction newFunc, Map oldToNewVar, ImFunctionCall e) { + ImFunctionCall fc = e; + ImFunction oldFunc = fc.getFunc(); + if (funcSet.contains(oldFunc)) { + ImExprs arguments = JassIm.ImExprs(); - ImFunctionCall newCall = JassIm.ImFunctionCall(fc.getTrace(), newFunc, JassIm.ImTypeArguments(), arguments, true, CallType.NORMAL); + // first argument is the choice index + arguments.add(JassIm.ImIntVal(funcToIndex.get(oldFunc))); - Element ret; - if (oldFunc.getReturnType() instanceof ImVoid) { - ret = newCall; + // now for the actual arguments + List oldArgs = fc.getArguments().removeAll(); + int pos = 0; + for (int i = 1; i < newFunc.getParameters().size(); i++) { + ImVar p = newFunc.getParameters().get(i); + if (pos < oldArgs.size() && oldToNewVar.get(oldFunc.getParameters().get(pos)) == p) { + arguments.add(oldArgs.get(pos)); + pos++; } else { - // if there is a return value, use the temporary return value - ret = JassIm.ImStatementExpr(JassIm.ImStmts(newCall), JassIm.ImVarAccess(getTempReturnVar(oldFunc.getReturnType()))); + // use default value + arguments.add(tr.getDefaultValueForJassType(p.getType())); } - fc.replaceBy(ret); - } - } + ImFunctionCall newCall = JassIm.ImFunctionCall(fc.getTrace(), newFunc, JassIm.ImTypeArguments(), arguments, true, CallType.NORMAL); + + Element ret; + if (oldFunc.getReturnType() instanceof ImVoid) { + ret = newCall; + } else { + // if there is a return value, use the temporary return value + ret = JassIm.ImStatementExpr(JassIm.ImStmts(newCall), JassIm.ImVarAccess(getTempReturnVar(oldFunc.getReturnType()))); + } + fc.replaceBy(ret); + + } } private void replaceReturn(Element e, ImType returnType) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/Flatten.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/Flatten.java index b33f60357..9ae415b57 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/Flatten.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/Flatten.java @@ -32,7 +32,9 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; + import static de.peeeq.wurstscript.jassIm.JassIm.*; + /** * flattening expressions and statements * after flattening there will be no more StatementExprs @@ -204,8 +206,8 @@ private static void exprToStatements(List result, Element e, ImTranslato flattenStatementsInto(result, e2.getStatements(), t, f); exprToStatements(result, e2, t, f); } else if (e instanceof ImOperatorCall && - (((ImOperatorCall) e).getOp() == WurstOperator.AND - || ((ImOperatorCall) e).getOp() == WurstOperator.OR)) { + (((ImOperatorCall) e).getOp() == WurstOperator.AND + || ((ImOperatorCall) e).getOp() == WurstOperator.OR)) { // short circuiting operators have to be handled in a special way: // we translate them to if statements when necessary ImOperatorCall oc = (ImOperatorCall) e; @@ -257,16 +259,16 @@ public static Result flatten(ImIf s, ImTranslator t, ImFunction f) { Result cond = s.getCondition().flatten(t, f); List stmts = Lists.newArrayList(cond.stmts); stmts.add( - JassIm.ImIf(s.getTrace(), cond.expr, - flattenStatements(s.getThenBlock(), t, f), - flattenStatements(s.getElseBlock(), t, f))); + JassIm.ImIf(s.getTrace(), cond.expr, + flattenStatements(s.getThenBlock(), t, f), + flattenStatements(s.getElseBlock(), t, f))); return new Result(stmts); } public static Result flatten(ImLoop s, ImTranslator t, ImFunction f) { return new Result(Collections.singletonList( - JassIm.ImLoop(s.getTrace(), flattenStatements(s.getBody(), t, f)))); + JassIm.ImLoop(s.getTrace(), flattenStatements(s.getBody(), t, f)))); } public static Result flatten(ImReturn s, ImTranslator t, ImFunction f) { @@ -440,14 +442,9 @@ public static void flattenFunc(ImFunction f, ImTranslator translator) { } public static void flattenProg(ImProg imProg, ImTranslator translator) { - for (ImFunction f : imProg.getFunctions()) { - f.flatten(translator); - } - for (ImClass c : imProg.getClasses()) { - for (ImFunction f : c.getFunctions()) { - f.flatten(translator); - } - } + imProg.getFunctions().parallelStream().forEach(f -> f.flatten(translator)); + imProg.getClasses().parallelStream().forEach(c -> + c.getFunctions().parallelStream().forEach(f -> f.flatten(translator))); translator.assertProperties(AssertProperty.FLAT); } @@ -481,7 +478,7 @@ private static MultiResult flattenExprs(ImTranslator t, ImFunction f, List= withStmts) { + || i >= withStmts) { newExprs.add(r.expr); } else { ImVar tempVar = JassIm.ImVar(e.attrTrace(), r.expr.attrTyp(), "temp", false); @@ -512,7 +509,7 @@ private static MultiResultL flattenExprsL(ImTranslator t, ImFunction f, List= withStmts) { + || i >= withStmts) { newExprs.add(r.getExpr()); } else { ImVar tempVar = JassIm.ImVar(e.attrTrace(), r.expr.attrTyp(), "temp", false); @@ -553,9 +550,8 @@ public static Result flatten(ImGetStackTrace e, ImTranslator translator, public static Result flatten(ImVarargLoop s, ImTranslator translator, ImFunction f) { return new Result(Collections.singletonList( - JassIm.ImVarargLoop(s.getTrace(), flattenStatements(s.getBody(), translator, f), s.getLoopVar()))); + JassIm.ImVarargLoop(s.getTrace(), flattenStatements(s.getBody(), translator, f), s.getLoopVar()))); } - } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java index 2ebc36510..f7d2ed018 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java @@ -1547,12 +1547,12 @@ public void assertProperties(Set properties, Element e) { if (e instanceof ElementWithVar) { checkVar(((ElementWithVar) e).getVar(), properties); } - properties.forEach(p -> p.check(e)); + properties.parallelStream().forEach(p -> p.check(e)); if (properties.contains(AssertProperty.NOTUPLES)) { - + // TODO ? } if (properties.contains(AssertProperty.FLAT)) { - + // TODO ? } for (int i = 0; i < e.size(); i++) { Element child = e.get(i); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java index 0fee1baac..6c3593f7e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java @@ -82,8 +82,8 @@ public void run() { } replaceVars(prog, getSetMap); - prog.getGlobals().addAll(newVars); prog.getGlobals().removeAll(oldVars); + prog.getGlobals().addAll(newVars); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java index c95c5ca89..9baaf1594 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java @@ -59,6 +59,8 @@ public void validate(Collection toCheck) { prog.getErrorHandler().setProgress("Checking wurst types", ProgressHelper.getValidatorPercent(visitedFunctions, functionCount)); + + for (CompilationUnit cu : toCheck) { walkTree(cu); } @@ -281,10 +283,10 @@ private void check(Element e) { checkConstructorsUnique((ClassOrModule) e); if (e instanceof CompilationUnit) checkPackageName((CompilationUnit) e); - if (e instanceof ConstructorDef) + if (e instanceof ConstructorDef) { checkConstructor((ConstructorDef) e); - if (e instanceof ConstructorDef) checkConstructorSuperCall((ConstructorDef) e); + } if (e instanceof ExprBinary) visit((ExprBinary) e); if (e instanceof ExprClosure) @@ -295,20 +297,20 @@ private void check(Element e) { checkIntVal((ExprIntVal) e); if (e instanceof ExprFuncRef) checkFuncRef((ExprFuncRef) e); - if (e instanceof ExprFunctionCall) + if (e instanceof ExprFunctionCall) { checkBannedFunctions((ExprFunctionCall) e); - if (e instanceof ExprFunctionCall) visit((ExprFunctionCall) e); + } if (e instanceof ExprMemberMethod) visit((ExprMemberMethod) e); if (e instanceof ExprMemberVar) checkMemberVar((ExprMemberVar) e); if (e instanceof ExprMemberArrayVar) checkMemberArrayVar((ExprMemberArrayVar) e); - if (e instanceof ExprNewObject) + if (e instanceof ExprNewObject) { checkNewObj((ExprNewObject) e); - if (e instanceof ExprNewObject) visit((ExprNewObject) e); + } if (e instanceof ExprNull) checkExprNull((ExprNull) e); if (e instanceof ExprVarAccess) @@ -331,22 +333,22 @@ private void check(Element e) { checkTypeBinding((HasTypeArgs) e); if (e instanceof InterfaceDef) checkInterfaceDef((InterfaceDef) e); - if (e instanceof LocalVarDef) + if (e instanceof LocalVarDef) { checkLocalShadowing((LocalVarDef) e); - if (e instanceof LocalVarDef) visit((LocalVarDef) e); + } if (e instanceof Modifiers) visit((Modifiers) e); if (e instanceof ModuleDef) visit((ModuleDef) e); - if (e instanceof NameDef) + if (e instanceof NameDef) { nameDefsMustNotBeNamedAfterJassNativeTypes((NameDef) e); - if (e instanceof NameDef) checkConfigOverride((NameDef) e); - if (e instanceof NameRef) + } + if (e instanceof NameRef) { checkImplicitParameter((NameRef) e); - if (e instanceof NameRef) checkNameRef((NameRef) e); + } if (e instanceof StmtCall) checkCall((StmtCall) e); if (e instanceof ExprDestroy) @@ -375,10 +377,10 @@ private void check(Element e) { visit((WImport) e); if (e instanceof WPackage) checkPackage((WPackage) e); - if (e instanceof WParameter) + if (e instanceof WParameter) { checkParameter((WParameter) e); - if (e instanceof WParameter) visit((WParameter) e); + } if (e instanceof WScope) checkForDuplicateNames((WScope) e); if (e instanceof WStatement) From cafbdf8afa5ea86c5f6f1e377cd9fd7dba67ba42 Mon Sep 17 00:00:00 2001 From: Frotty Date: Thu, 23 Nov 2023 19:45:55 +0100 Subject: [PATCH 54/74] correctly generate .imp file with transitive imports (#1082) --- .../wurstio/map/importer/ImportFile.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java index 17c813a05..31da5d0d4 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java @@ -7,6 +7,8 @@ import de.peeeq.wurstscript.RunArgs; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.utils.TempDir; +import net.moonlightflower.wc3libs.bin.Wc3BinOutputStream; +import net.moonlightflower.wc3libs.bin.app.IMP; import javax.swing.*; import java.io.*; @@ -159,28 +161,31 @@ private static LinkedList getFilesOfDirectory(File dir, LinkedList a } private static void insertImportedFiles(MpqEditor mpq, List directories) throws Exception { + IMP importFile = new IMP(); for (File directory : directories) { LinkedList files = new LinkedList<>(); getFilesOfDirectory(directory, files); - ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); - DataOutputStream dataOut = new DataOutputStream(byteOut); - dataOut.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(FILE_VERSION).array()); - dataOut.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(files.size()).array()); for (File f : files) { Path p = f.toPath(); p = directory.toPath().relativize(p); String normalizedWc3Path = p.toString().replaceAll("/", "\\\\"); - dataOut.writeByte((byte) 13); - dataOut.write(normalizedWc3Path.getBytes(StandardCharsets.UTF_8)); - dataOut.write((byte) 0); + IMP.Obj importObj = new IMP.Obj(); + importObj.setPath(normalizedWc3Path); + importObj.setStdFlag(IMP.StdFlag.CUSTOM); + importFile.addObj(importObj); mpq.deleteFile(normalizedWc3Path); mpq.insertFile(normalizedWc3Path, f); } - dataOut.flush(); - mpq.deleteFile("war3map.imp"); - mpq.insertFile("war3map.imp", byteOut.toByteArray()); } + mpq.deleteFile(IMP.GAME_PATH); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + try (Wc3BinOutputStream wc3BinOutputStream = new Wc3BinOutputStream(byteArrayOutputStream)) { + importFile.write(wc3BinOutputStream); + } + byteArrayOutputStream.flush(); + byte[] byteArray = byteArrayOutputStream.toByteArray(); + mpq.insertFile(IMP.GAME_PATH, byteArray); } public static void importFilesFromImports(File projectFolder, MpqEditor ed) { From 867bf9f781c7eb1ae6d0c843ac6d76b3c4516d05 Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 29 Nov 2023 18:00:27 +0100 Subject: [PATCH 55/74] Show dialog for choosing game path, cleanup (#1083) * show dialog for choosing game path * cleanup code * remove logs and refactor * remove confusing mpq error, make some mpq loads readonly --- de.peeeq.wurstscript/build.gradle | 2 +- .../datastructures/GraphInterpreter.java | 4 +- .../peeeq/datastructures/ImmutableTree.java | 11 +-- .../de/peeeq/datastructures/Partitions.java | 4 +- .../datastructures/TransitiveClosure.java | 4 +- .../de/peeeq/datastructures/UnionFind.java | 4 +- .../de/peeeq/datastructures/Worklist.java | 4 +- .../immutablecollections/ImmutableList.java | 2 +- .../de/peeeq/wurstio/CompilationProcess.java | 2 - .../wurstio/CompiletimeFunctionRunner.java | 4 +- .../de/peeeq/wurstio/ErrorReportingIO.java | 17 ++-- .../src/main/java/de/peeeq/wurstio/Main.java | 7 +- .../src/main/java/de/peeeq/wurstio/Pjass.java | 10 +-- .../main/java/de/peeeq/wurstio/TimeTaker.java | 2 +- .../peeeq/wurstio/WurstCompilerJassImpl.java | 60 +++++++++++--- .../de/peeeq/wurstio/gui/AboutDialog.java | 2 +- .../peeeq/wurstio/gui/WurstErrorWindow.java | 4 +- .../de/peeeq/wurstio/gui/WurstGuiImpl.java | 12 +-- .../peeeq/wurstio/gui/WurstStatusWindow.java | 6 +- .../peeeq/wurstio/hotdoc/HotdocGenerator.java | 12 +-- .../interpreter/CompiletimeNatives.java | 11 +-- .../interpreter/ProgramStateIO.java | 2 +- .../ExecutableJassFunction.java | 4 +- .../wurstio/jassinterpreter/JassArray.java | 4 +- .../jassinterpreter/JassInterpreter.java | 4 +- .../jassinterpreter/NativeJassFunction.java | 4 +- .../ReflectionNativeProvider.java | 2 - .../jassinterpreter/mocks/TimerMock.java | 6 +- .../jassinterpreter/mocks/TriggerMock.java | 4 +- .../providers/EffectProvider.java | 4 +- .../providers/FrameProvider.java | 5 +- .../providers/GroupProvider.java | 4 +- .../providers/HandleProvider.java | 2 +- .../providers/LocationProvider.java | 2 +- .../providers/LuaEnsureTypeProvider.java | 5 +- .../providers/MathProvider.java | 2 +- .../wurstio/languageserver/BufferManager.java | 4 +- .../languageserver/DebouncingTimer.java | 3 - .../languageserver/LanguageServerStarter.java | 1 + .../languageserver/LanguageWorker.java | 12 +-- .../wurstio/languageserver/ModelManager.java | 3 - .../languageserver/ModelManagerImpl.java | 12 +-- .../languageserver/ProjectConfigBuilder.java | 17 +--- .../wurstio/languageserver/WurstCommands.java | 26 +++--- .../languageserver/WurstLanguageServer.java | 28 ++++--- .../WurstTextDocumentService.java | 2 - .../languageserver/WurstWorkspaceService.java | 5 +- .../languageserver/requests/BuildMap.java | 19 ++--- .../requests/CodeActionRequest.java | 2 +- .../languageserver/requests/Colors.java | 2 +- .../requests/DocumentSymbolRequest.java | 2 +- .../requests/GetCompletions.java | 4 +- .../requests/GetDefinition.java | 8 +- .../languageserver/requests/GetUsages.java | 9 ++- .../languageserver/requests/MapRequest.java | 37 +++++---- .../requests/RequestFailedException.java | 2 +- .../languageserver/requests/RunMap.java | 28 +++---- .../languageserver/requests/RunTests.java | 16 ++-- .../requests/SymbolInformationRequest.java | 10 ++- .../languageserver/requests/UserRequest.java | 2 +- .../wurstio/map/importer/ImportFile.java | 5 +- .../peeeq/wurstio/mpq/Jmpq3BasedEditor.java | 5 -- .../peeeq/wurstio/mpq/MpqEditorFactory.java | 3 +- .../wurstio/objectreader/ObjectFileType.java | 8 +- .../wurstio/utils/W3InstallationData.java | 80 ++++++++++++++----- .../de/peeeq/wurstscript/ErrorReporting.java | 2 +- .../de/peeeq/wurstscript/ModuleExpander.java | 7 +- .../java/de/peeeq/wurstscript/RunArgs.java | 62 +++++++------- .../de/peeeq/wurstscript/SyntacticSugar.java | 2 +- .../de/peeeq/wurstscript/WLoggerDefault.java | 7 +- .../de/peeeq/wurstscript/WurstChecker.java | 3 +- .../de/peeeq/wurstscript/WurstOperator.java | 4 +- .../de/peeeq/wurstscript/WurstParser.java | 1 - .../attributes/AttrParameterTypes.java | 2 +- .../peeeq/wurstscript/attributes/AttrPos.java | 2 +- .../AttrPossibleFunctionSignatures.java | 5 +- .../wurstscript/attributes/AttrTypeDef.java | 7 +- .../attributes/AttrTypeExprType.java | 2 - .../wurstscript/attributes/AttrWurstDoc.java | 2 +- .../attributes/CompilationUnitInfo.java | 2 +- .../attributes/DescriptionHtml.java | 2 +- .../wurstscript/attributes/ErrorHandler.java | 6 +- .../wurstscript/attributes/GetByType.java | 5 +- .../wurstscript/attributes/InitOrder.java | 6 +- .../attributes/InterfaceInstances.java | 4 +- .../attributes/ModifiersHelper.java | 2 +- .../wurstscript/attributes/SubClasses.java | 4 +- .../wurstscript/attributes/UsedPackages.java | 5 +- .../wurstscript/attributes/names/Exports.java | 4 +- .../attributes/names/FuncLink.java | 2 +- .../wurstscript/attributes/names/VarLink.java | 2 +- .../attributes/prettyPrint/MaxOneSpacer.java | 2 +- .../attributes/prettyPrint/PrettyPrinter.java | 6 +- .../attributes/prettyPrint/PrettyUtils.java | 2 +- .../frotty/jassAttributes/JassProgsAttr.java | 10 +-- .../de/peeeq/wurstscript/gui/WurstGui.java | 2 +- .../intermediatelang/ILconstBool.java | 2 +- .../intermediatelang/ILconstFuncRef.java | 2 +- .../intermediatelang/ILconstInt.java | 2 +- .../intermediatelang/ILconstNull.java | 2 +- .../intermediatelang/ILconstObject.java | 3 +- .../intermediatelang/ILconstReal.java | 2 +- .../intermediatelang/ILconstString.java | 2 +- .../intermediatelang/IlConstHandle.java | 3 +- .../interpreter/EvaluateExpr.java | 4 +- .../interpreter/ILInterpreter.java | 3 - .../interpreter/ProgramState.java | 12 +-- .../interpreter/RunStatement.java | 4 +- .../intermediatelang/interpreter/State.java | 2 +- .../interpreter/TimerMockHandler.java | 2 +- .../interpreter/VariableType.java | 2 +- .../optimizer/ControlFlowGraph.java | 10 +-- .../optimizer/LocalMerger.java | 1 - .../optimizer/SimpleRewrites.java | 4 +- .../optimizer/TempMerger.java | 18 ++--- .../jass/AntlrJassParseTreeTransformer.java | 6 +- .../wurstscript/jass/ExtendedJassLexer.java | 6 +- .../jassinterpreter/ExitwhenException.java | 2 +- .../jassinterpreter/TestFailException.java | 2 +- .../wurstscript/jassprinter/JassPrinter.java | 4 +- .../jurst/AntlrJurstParseTreeTransformer.java | 12 +-- .../wurstscript/jurst/ExtendedJurstLexer.java | 8 +- .../wurstscript/parser/WPosWithComments.java | 6 +- .../antlr/AntlrWurstParseTreeTransformer.java | 8 +- .../parser/antlr/ExtendedWurstLexer.java | 10 +-- .../translation/imoptimizer/ImCompressor.java | 6 +- .../translation/imoptimizer/ImInliner.java | 22 +++-- .../imoptimizer/NameGenerator.java | 10 +-- .../translation/imoptimizer/NullSetter.java | 8 +- .../translation/imoptimizer/Replacer.java | 6 -- .../UselessFunctionCallsRemover.java | 4 +- .../translation/imtojass/ExprTranslation.java | 4 +- .../imtojass/ImToJassTranslator.java | 25 +++--- .../imtojass/StatementTranslation.java | 3 +- .../imtranslation/ClassTranslator.java | 14 ++-- .../imtranslation/ClosureTranslator.java | 2 +- .../imtranslation/CyclicFunctionRemover.java | 14 ++-- .../EliminateCallFunctionsWithAnnotation.java | 2 +- .../imtranslation/EliminateClasses.java | 18 ++--- .../imtranslation/EliminateGenerics.java | 10 +-- .../imtranslation/EliminateLocalTypes.java | 4 +- .../imtranslation/EliminateTuples.java | 3 +- .../imtranslation/ExprTranslation.java | 17 ++-- .../translation/imtranslation/Flatten.java | 11 ++- .../imtranslation/FuncRefRemover.java | 4 +- .../imtranslation/FunctionFlagAnnotation.java | 9 +-- .../FunctionFlagCompiletime.java | 2 +- .../translation/imtranslation/ImHelper.java | 6 +- .../translation/imtranslation/ImPrinter.java | 2 +- .../imtranslation/ImTranslator.java | 32 ++++---- .../imtranslation/InterfaceTranslator.java | 6 +- .../imtranslation/MultiArrayEliminator.java | 15 ++-- .../imtranslation/NormalizeNames.java | 5 +- .../RecycleCodeGeneratorQueue.java | 12 +-- .../imtranslation/StackTraceInjector2.java | 18 ++--- .../imtranslation/StmtTranslation.java | 6 +- .../imtranslation/UsedFunctions.java | 6 +- .../imtranslation/VarargEliminator.java | 4 +- .../lua/translation/LuaNatives.java | 2 +- .../lua/translation/LuaTranslator.java | 4 +- .../lua/translation/RemoveGarbage.java | 13 ++- .../lua/translation/StmtTranslation.java | 1 - .../wurstscript/types/FunctionSignature.java | 2 +- .../wurstscript/types/VariableBinding.java | 2 +- .../wurstscript/types/WurstTypeArray.java | 6 +- .../types/WurstTypeBoundTypeParam.java | 4 +- .../wurstscript/types/WurstTypeClass.java | 6 +- .../wurstscript/types/WurstTypeEnum.java | 2 +- .../wurstscript/types/WurstTypeInfer.java | 2 +- .../peeeq/wurstscript/types/WurstTypeInt.java | 3 - .../wurstscript/types/WurstTypeModule.java | 2 +- .../types/WurstTypeModuleInstanciation.java | 2 +- .../types/WurstTypeNamedScope.java | 9 ++- .../wurstscript/types/WurstTypeNull.java | 3 - .../wurstscript/types/WurstTypePackage.java | 2 +- .../wurstscript/types/WurstTypePrimitive.java | 4 +- .../wurstscript/types/WurstTypeTuple.java | 6 +- .../wurstscript/types/WurstTypeTypeParam.java | 2 +- .../wurstscript/types/WurstTypeUnknown.java | 2 +- .../wurstscript/types/WurstTypeVararg.java | 2 +- .../wurstscript/utils/AssetsGenerator.java | 8 +- .../utils/ExecutiontimeMeasure.java | 4 +- .../wurstscript/utils/MapWithIndexes.java | 1 - .../de/peeeq/wurstscript/utils/Utils.java | 10 +-- .../validation/ValidateClassMemberUsage.java | 1 - .../validation/ValidateLocalUsage.java | 3 +- .../validation/WurstValidator.java | 11 ++- .../controlflow/DataflowAnomalyAnalysis.java | 8 +- .../controlflow/ForwardExecution.java | 10 +-- .../immutablecollections/IntRangeTests.java | 2 +- .../tests/prettyprint/PrettyPrintTest.java | 5 +- .../tests/utils/GraphInterpreterTestsSC.java | 4 +- .../tests/utils/TransitiveClosureTests.java | 1 - .../wurstscript/tests/AutoCompleteTests.java | 2 +- .../tests/wurstscript/tests/ColorTests.java | 2 - .../tests/DependencyFileParserTest.java | 1 - .../wurstscript/tests/ExtraMatchers.java | 5 +- .../wurstscript/tests/FlowAnalysisTests.java | 3 +- .../tests/wurstscript/tests/FoldingTests.java | 5 -- .../wurstscript/tests/GenerateBotData.java | 10 ++- .../wurstscript/tests/GetDefinitionTests.java | 2 +- .../tests/wurstscript/tests/HoverTests.java | 2 +- .../wurstscript/tests/InterfaceTests.java | 2 - .../tests/LuaTranslationTests.java | 1 - .../tests/LuaTypecastingTests.java | 3 +- .../wurstscript/tests/ModelManagerTests.java | 9 +-- .../java/tests/wurstscript/tests/MpqTest.java | 4 +- .../wurstscript/tests/OptimizerTests.java | 6 +- .../wurstscript/tests/RealWorldExamples.java | 3 +- .../tests/SimpleStatementTests.java | 21 ++--- .../java/tests/wurstscript/tests/StdLib.java | 6 +- .../tests/wurstscript/tests/VarargTests.java | 3 - .../tests/WurstLanguageServerTest.java | 3 +- .../wurstscript/tests/WurstScriptTest.java | 6 +- .../wurstscript/utils/ErrorReportingTest.java | 6 +- 215 files changed, 746 insertions(+), 729 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 7ed0635f3..13a624499 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -90,7 +90,7 @@ dependencies { implementation 'io.vavr:vavr:0.10.4' // Support for the vscode language server protocol - implementation group: 'org.eclipse.lsp4j', name: 'org.eclipse.lsp4j', version: '0.12.0' + implementation group: 'org.eclipse.lsp4j', name: 'org.eclipse.lsp4j', version: '0.21.1' // @Nullable annotations implementation group: 'org.eclipse.jdt', name: 'org.eclipse.jdt.annotation', version: '2.1.0' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/GraphInterpreter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/GraphInterpreter.java index cf2895fc9..8db50e2ec 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/GraphInterpreter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/GraphInterpreter.java @@ -155,10 +155,10 @@ public String generateDotFile(List nodes) { if (!visited.add(node)) { continue; } - sb.append(" \"").append(node.toString()).append("\";\n"); + sb.append(" \"").append(node).append("\";\n"); for (T n : getIncidentNodes(node)) { sb.append(" "); - sb.append("\"").append(node.toString()).append("\" -> "); + sb.append("\"").append(node).append("\" -> "); sb.append("\"").append(n.toString()).append("\";\n\n"); todo.addFirst(n); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/ImmutableTree.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/ImmutableTree.java index d6ce29b97..63008db27 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/ImmutableTree.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/ImmutableTree.java @@ -48,7 +48,7 @@ public Iterator> iterator() { if (children2 != null) { return children2.iterator(); } else { - return Collections.>emptyList().iterator(); + return Collections.emptyIterator(); } } @@ -70,7 +70,7 @@ private void addValues(Builder<@Nullable T> b) { } public static ImmutableTree empty() { - return node(ImmutableList.>of()); + return node(ImmutableList.of()); } @Override @@ -101,11 +101,8 @@ public boolean equals(@Nullable Object obj) { return false; @Nullable T e = elem; if (e == null) { - if (other.elem != null) - return false; - } else if (!e.equals(other.elem)) - return false; - return true; + return other.elem == null; + } else return e.equals(other.elem); } @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/Partitions.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/Partitions.java index 7725326f1..8c04a6b73 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/Partitions.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/Partitions.java @@ -8,7 +8,7 @@ public class Partitions { private class Partition { private Partition rep; - private T item; + private final T item; public Partition(T item) { rep = this; @@ -29,7 +29,7 @@ private Partition getRep() { } } - private Map partitions = Maps.newLinkedHashMap(); + private final Map partitions = Maps.newLinkedHashMap(); public Partitions() { } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/TransitiveClosure.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/TransitiveClosure.java index 42f9e5b99..2ebc43024 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/TransitiveClosure.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/TransitiveClosure.java @@ -2,7 +2,9 @@ import com.google.common.collect.Multimap; -import java.util.*; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/UnionFind.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/UnionFind.java index 6d4916c92..226f69c0c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/UnionFind.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/UnionFind.java @@ -9,8 +9,8 @@ * Implementation of https://en.wikipedia.org/wiki/Disjoint-set_data_structure */ public class UnionFind { - private Map parent = new LinkedHashMap<>(); - private Map rank = new LinkedHashMap<>(); + private final Map parent = new LinkedHashMap<>(); + private final Map rank = new LinkedHashMap<>(); public T find(T x) { if (!parent.containsKey(x)) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/Worklist.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/Worklist.java index 09e961820..3dfe90116 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/Worklist.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/datastructures/Worklist.java @@ -10,8 +10,8 @@ * No element is added to the queue more than once. */ public class Worklist { - private ArrayDeque queue = new ArrayDeque<>(); - private HashSet set = new HashSet<>(); + private final ArrayDeque queue = new ArrayDeque<>(); + private final HashSet set = new HashSet<>(); public Worklist() { } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/immutablecollections/ImmutableList.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/immutablecollections/ImmutableList.java index f1081a052..b6608ac29 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/immutablecollections/ImmutableList.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/immutablecollections/ImmutableList.java @@ -45,7 +45,7 @@ public boolean contains(T elem) { * @return an empty list */ public static ImmutableList emptyList() { - return ImmutableListEmpty.instance(); + return ImmutableListEmpty.instance(); } @SafeVarargs diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java index 58bfbf774..a831d97db 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompilationProcess.java @@ -1,6 +1,5 @@ package de.peeeq.wurstio; -import config.WurstProjectBuildMapData; import config.WurstProjectConfigData; import de.peeeq.wurstio.languageserver.requests.RunTests; import de.peeeq.wurstio.mpq.MpqEditor; @@ -20,7 +19,6 @@ import java.io.File; import java.io.IOException; import java.io.PrintStream; -import java.util.ArrayList; import java.util.Optional; import java.util.function.Supplier; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java index 17cc3ead5..1d4121526 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/CompiletimeFunctionRunner.java @@ -265,7 +265,7 @@ private void executeCompiletimeExpr(ImCompiletimeExpr cte) { } - private GetAForB globalForObject = new GetAForB() { + private final GetAForB globalForObject = new GetAForB() { @Override public ImVar initFor(ILconstObject obj) { @@ -308,7 +308,7 @@ public ImVar initFor(ILconstObject obj) { } }; - private GetAForB globalForHandle = new GetAForB() { + private final GetAForB globalForHandle = new GetAForB() { @Override public ImVar initFor(IlConstHandle a) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/ErrorReportingIO.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/ErrorReportingIO.java index 1f37056a1..1bcce93b9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/ErrorReportingIO.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/ErrorReportingIO.java @@ -11,6 +11,7 @@ import java.awt.*; import java.io.*; import java.net.*; +import java.nio.charset.StandardCharsets; public class ErrorReportingIO extends ErrorReporting { @@ -50,8 +51,8 @@ public void handleSevere(final Throwable t, final String sourcecode) { options[1]); //default button titles if (n == 1) { - final boolean results[] = new boolean[3]; - Thread threads[] = new Thread[4]; + final boolean[] results = new boolean[3]; + Thread[] threads = new Thread[4]; threads[0] = new Thread(() -> results[0] = sendErrorReport(t, "")); @@ -116,10 +117,10 @@ public boolean sendErrorReport(Throwable t, String sourcecode) { try { // Construct data - String data = URLEncoder.encode("errormessage", "UTF-8") + "=" + URLEncoder.encode(t.getMessage(), "UTF-8"); - data += "&" + URLEncoder.encode("stacktrace", "UTF-8") + "=" + URLEncoder.encode(Utils.printExceptionWithStackTrace(t), "UTF-8"); - data += "&" + URLEncoder.encode("version", "UTF-8") + "=" + URLEncoder.encode(AboutDialog.version, "UTF-8"); - data += "&" + URLEncoder.encode("source", "UTF-8") + "=" + URLEncoder.encode(sourcecode, "UTF-8"); + String data = URLEncoder.encode("errormessage", StandardCharsets.UTF_8) + "=" + URLEncoder.encode(t.getMessage(), StandardCharsets.UTF_8); + data += "&" + URLEncoder.encode("stacktrace", StandardCharsets.UTF_8) + "=" + URLEncoder.encode(Utils.printExceptionWithStackTrace(t), StandardCharsets.UTF_8); + data += "&" + URLEncoder.encode("version", StandardCharsets.UTF_8) + "=" + URLEncoder.encode(AboutDialog.version, StandardCharsets.UTF_8); + data += "&" + URLEncoder.encode("source", StandardCharsets.UTF_8) + "=" + URLEncoder.encode(sourcecode, StandardCharsets.UTF_8); String request = "http://peeeq.de/wursterrors.php"; URL url = new URL(request); @@ -130,7 +131,7 @@ public boolean sendErrorReport(Throwable t, String sourcecode) { connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("charset", "utf-8"); - connection.setRequestProperty("Content-Length", "" + Integer.toString(data.getBytes().length)); + connection.setRequestProperty("Content-Length", String.valueOf(data.getBytes().length)); connection.setUseCaches(false); DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); wr.writeBytes(data); @@ -185,7 +186,7 @@ private String showMultilineMessageDialog() { textArea.setLineWrap(true); textArea.setWrapStyleWord(true); JScrollPane areaScrollPane = new JScrollPane(textArea); - JComponent inputs[] = { + JComponent[] inputs = { new JLabel("Please add some contact information here in case we have further questions regarding this problem."), new JLabel("This can be your hive user-name or your mail address."), new JLabel("You can also add more information on how to reproduce the problem."), diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java index 105163aaf..8344be4ce 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java @@ -15,7 +15,10 @@ import de.peeeq.wurstio.mpq.MpqEditor; import de.peeeq.wurstio.mpq.MpqEditorFactory; import de.peeeq.wurstio.utils.W3InstallationData; -import de.peeeq.wurstscript.*; +import de.peeeq.wurstscript.CompileTimeInfo; +import de.peeeq.wurstscript.ErrorReporting; +import de.peeeq.wurstscript.RunArgs; +import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.attributes.prettyPrint.PrettyUtils; import de.peeeq.wurstscript.gui.WurstGui; @@ -168,7 +171,7 @@ public static void main(String[] args) { if (projectConfig != null && target.isPresent()) { ProjectConfigBuilder.apply(projectConfig, target.get().toFile(), scriptFile, buildDir.toFile(), - runArgs, new W3InstallationData()); + runArgs, new W3InstallationData(null, Paths.get(workspaceroot).toFile())); WLogger.info("map build success"); System.out.println("Build succeeded. Output file: <" + target.get().toAbsolutePath() + ">"); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Pjass.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Pjass.java index 808556b6f..65541862f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Pjass.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Pjass.java @@ -27,9 +27,9 @@ public class Pjass { public static class Result { - private boolean ok; - private String message; - private File jassFile; + private final boolean ok; + private final String message; + private final File jassFile; public Result(File jassFile, boolean ok, String message) { this.jassFile = jassFile; @@ -125,7 +125,7 @@ public static Result runPjass(File outputFile, String commonJPath, String blizza try { p = Runtime.getRuntime().exec(args.toArray(new String[0])); } catch (IOException e) { - return new Result(outputFile, false, "Pjass execution error: \n" + e.toString()); + return new Result(outputFile, false, "Pjass execution error: \n" + e); } StringBuilder output = new StringBuilder(); @@ -141,7 +141,7 @@ public static Result runPjass(File outputFile, String commonJPath, String blizza int exitValue = p.waitFor(); if (exitValue != 0) { - return new Result(outputFile, false, "pjass errors: \n" + output.toString()); + return new Result(outputFile, false, "pjass errors: \n" + output); } else { return new Result(outputFile, true, output.toString()); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/TimeTaker.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/TimeTaker.java index df5de9986..226dcfa47 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/TimeTaker.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/TimeTaker.java @@ -53,7 +53,7 @@ class Recording implements TimeTaker { private int nesting = 0; private String currentPhaseDescription; private long currentPhaseStart; - private Map accumulatedTimes = new LinkedHashMap<>(); + private final Map accumulatedTimes = new LinkedHashMap<>(); private Long startTime = 0L; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index 7d30873dc..2578664f3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -2,7 +2,10 @@ import com.google.common.base.Charsets; import com.google.common.base.Preconditions; -import com.google.common.collect.*; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.google.common.io.Files; import config.WurstProjectConfigData; import de.peeeq.wurstio.languageserver.requests.RequestFailedException; @@ -11,8 +14,8 @@ import de.peeeq.wurstio.utils.FileReading; import de.peeeq.wurstio.utils.FileUtils; import de.peeeq.wurstscript.*; -import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.CompilationUnitInfo; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.attributes.ErrorHandler; @@ -28,7 +31,10 @@ import de.peeeq.wurstscript.translation.imtranslation.*; import de.peeeq.wurstscript.translation.lua.translation.LuaTranslator; import de.peeeq.wurstscript.types.TypesHelper; -import de.peeeq.wurstscript.utils.*; +import de.peeeq.wurstscript.utils.LineOffsets; +import de.peeeq.wurstscript.utils.NotNullList; +import de.peeeq.wurstscript.utils.TempDir; +import de.peeeq.wurstscript.utils.Utils; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.lsp4j.MessageType; import org.jetbrains.annotations.NotNull; @@ -44,24 +50,24 @@ public class WurstCompilerJassImpl implements WurstCompiler { - private List files = Lists.newArrayList(); - private Map otherInputs = Maps.newLinkedHashMap(); + private final List files = Lists.newArrayList(); + private final Map otherInputs = Maps.newLinkedHashMap(); private @Nullable JassProg prog; - private WurstGui gui; + private final WurstGui gui; private boolean hasCommonJ; private RunArgs runArgs; private Optional mapFile = Optional.empty(); private @Nullable File projectFolder; - private ErrorHandler errorHandler; + private final ErrorHandler errorHandler; private @Nullable Map libCache = null; private @Nullable ImProg imProg; - private List parsedFiles = Lists.newArrayList(); + private final List parsedFiles = Lists.newArrayList(); private final WurstParser parser; private final WurstChecker checker; private @Nullable ImTranslator imTranslator; - private List dependencies = Lists.newArrayList(); + private final List dependencies = Lists.newArrayList(); private final @Nullable MpqEditor mapFileMpq; - private TimeTaker timeTaker; + private final TimeTaker timeTaker; public WurstCompilerJassImpl(@Nullable File projectFolder, WurstGui gui, @Nullable MpqEditor mapFileMpq, RunArgs runArgs) { this(new TimeTaker.Default(), projectFolder, gui, mapFileMpq, runArgs); @@ -174,7 +180,7 @@ public static ImmutableList checkDependencyFile(File depFile, WurstGui gui if (!folder.exists()) { gui.sendError(new CompileError(pos, "Folder " + line + " not found.")); } else if (!folder.isDirectory()) { - gui.sendError(new CompileError(pos, "" + line + " is not a folder.")); + gui.sendError(new CompileError(pos, line + " is not a folder.")); } else { dependencies.add(folder); } @@ -563,11 +569,16 @@ private void addJassHotCodeReloadCode() { // add call to JHCR_Init_init in main stmts.add(callExtern(trace, CallType.EXECUTE, "JHCR_Init_init")); + ImFunction statusFunc = findFunction("JHCR_API_GetLastStatus", trace.attrErrorPos()); + ImFunctionCall jhcrStatusCall = JassIm.ImFunctionCall(trace, statusFunc, JassIm.ImTypeArguments(), JassIm.ImExprs(), false, CallType.NORMAL); + ImFunction I2S = findNative("I2S", trace.attrErrorPos()); + ImFunctionCall statusCall = JassIm.ImFunctionCall(trace, I2S, JassIm.ImTypeArguments(), JassIm.ImExprs(jhcrStatusCall), false, CallType.NORMAL); + // add reload trigger for pressing escape ImStmts reloadBody = JassIm.ImStmts( - callExtern(trace, CallType.EXECUTE, "JHCR_Init_parse"), - callExtern(trace, CallType.NORMAL, "BJDebugMsg", JassIm.ImStringVal("Code reloaded!")) + callExtern(trace, CallType.EXECUTE, "JHCR_Init_parse") +// callExtern(trace, CallType.NORMAL, "BJDebugMsg", JassIm.ImOperatorCall(PLUS, JassIm.ImExprs(JassIm.ImStringVal("Code reloaded, status: "), statusCall)) ); ImFunction jhcr_reload = JassIm.ImFunction(trace, "jhcr_reload_on_escape", JassIm.ImTypeVars(), JassIm.ImVars(), JassIm.ImVoid(), JassIm.ImVars(), reloadBody, Collections.emptyList()); @@ -584,6 +595,29 @@ private void addJassHotCodeReloadCode() { mainFunc.getBody().addAll(0, stmts); } + @NotNull + private ImFunction findNative(String funcName, WPos trace) { + return imProg.getFunctions() + .stream() + .filter(ImFunction::isNative) + .filter(func -> func.getName().equals(funcName)) + .findFirst() + .orElseGet(() -> { + throw new CompileError(trace, "Could not find native " + funcName); + }); + } + + @NotNull + private ImFunction findFunction(String funcName, WPos trace) { + return imProg.getFunctions() + .stream() + .filter(func -> func.getName().equals(funcName)) + .findFirst() + .orElseGet(() -> { + throw new CompileError(trace, "Could not find native " + funcName); + }); + } + @NotNull private ImFunctionCall callExtern(Element trace, CallType callType, String functionName, ImExpr... arguments) { ImFunction jhcrinit = JassIm.ImFunction(trace, functionName, JassIm.ImTypeVars(), JassIm.ImVars(), JassIm.ImVoid(), JassIm.ImVars(), JassIm.ImStmts(), Collections.singletonList(FunctionFlagEnum.IS_EXTERN)); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/AboutDialog.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/AboutDialog.java index 42c8b7be7..2de2f7aed 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/AboutDialog.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/AboutDialog.java @@ -182,7 +182,7 @@ private void homepageButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FI /** * @param args the command line arguments */ - public static void main(String args[]) { + public static void main(String[] args) { /* Create and display the dialog */ java.awt.EventQueue.invokeLater(() -> { try { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstErrorWindow.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstErrorWindow.java index f67d6c801..cde6d8605 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstErrorWindow.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstErrorWindow.java @@ -55,8 +55,8 @@ public class WurstErrorWindow extends javax.swing.JFrame { public AboutDialog ab; - private String workspaceRoot; - private SimpleAttributeSet attributes = new SimpleAttributeSet(); + private final String workspaceRoot; + private final SimpleAttributeSet attributes = new SimpleAttributeSet(); /** * Creates new form WurstErrorWindow diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstGuiImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstGuiImpl.java index c13ab568c..3db515d8d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstGuiImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstGuiImpl.java @@ -16,16 +16,16 @@ public class WurstGuiImpl extends WurstGui { - private volatile Queue errorQueue = new ConcurrentLinkedQueue<>(); + private final Queue errorQueue = new ConcurrentLinkedQueue<>(); private volatile double progress = 0.0; private volatile boolean finished = false; private volatile @Nullable String currentlyWorkingOn = ""; - private GuiUpdater guiUpdater; + private final GuiUpdater guiUpdater; private final Object progressLock = new Object(); private String workspaceRoot; - private static ConcurrentHashMap staticLastTimes = new ConcurrentHashMap<>(); - private Map lastTimes = new HashMap<>(staticLastTimes); + private static final ConcurrentHashMap staticLastTimes = new ConcurrentHashMap<>(); + private final Map lastTimes = new HashMap<>(staticLastTimes); public WurstGuiImpl() { @@ -121,8 +121,8 @@ public void sendError(CompileError err) { } boolean show = true; - private long startTime = System.currentTimeMillis(); - private Set done = new HashSet<>(); + private final long startTime = System.currentTimeMillis(); + private final Set done = new HashSet<>(); private long taskStartTime = startTime; @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstStatusWindow.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstStatusWindow.java index 7877dd31a..b81089bec 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstStatusWindow.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/gui/WurstStatusWindow.java @@ -24,9 +24,9 @@ */ public class WurstStatusWindow extends javax.swing.JFrame { - private javax.swing.JLabel currentStatus; - private javax.swing.JProgressBar progressBar; - private javax.swing.JLabel title; + private final javax.swing.JLabel currentStatus; + private final javax.swing.JProgressBar progressBar; + private final javax.swing.JLabel title; /** * Creates new form WurstStatusWindow diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/hotdoc/HotdocGenerator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/hotdoc/HotdocGenerator.java index 9babae82c..c019c5310 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/hotdoc/HotdocGenerator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/hotdoc/HotdocGenerator.java @@ -25,14 +25,14 @@ public class HotdocGenerator { - private List files; - private File outputfolder; + private final List files; + private final File outputfolder; // private WurstModel model; // private ArrayList packages; - private VelocityEngine ve; - private Template variableTemplate; - private Template navbarTemplate; - private Template structureTemplate; + private final VelocityEngine ve; + private final Template variableTemplate; + private final Template navbarTemplate; + private final Template structureTemplate; public HotdocGenerator(List files) { this.files = Lists.newArrayList(files); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/CompiletimeNatives.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/CompiletimeNatives.java index d21c83cb3..c9c4ff0e5 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/CompiletimeNatives.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/CompiletimeNatives.java @@ -4,13 +4,12 @@ import config.WurstProjectConfigData; import de.peeeq.wurstio.jassinterpreter.InterpreterException; import de.peeeq.wurstio.jassinterpreter.ReflectionBasedNativeProvider; -import de.peeeq.wurstio.objectreader.*; +import de.peeeq.wurstio.objectreader.ObjectHelper; import de.peeeq.wurstscript.intermediatelang.*; import de.peeeq.wurstscript.intermediatelang.interpreter.NativesProvider; import de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState; -import de.peeeq.wurstscript.intermediatelang.interpreter.VariableType; import net.moonlightflower.wc3libs.bin.ObjMod; -import net.moonlightflower.wc3libs.bin.app.objMod.*; +import net.moonlightflower.wc3libs.bin.app.objMod.W3U; import net.moonlightflower.wc3libs.dataTypes.DataType; import net.moonlightflower.wc3libs.dataTypes.app.War3Int; import net.moonlightflower.wc3libs.dataTypes.app.War3Real; @@ -21,13 +20,11 @@ import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; -import static de.peeeq.wurstscript.intermediatelang.interpreter.VariableType.*; - @SuppressWarnings("ucd") // ignore unused code detector warnings, because this class uses reflection public class CompiletimeNatives extends ReflectionBasedNativeProvider implements NativesProvider { private final boolean isProd; - private ProgramStateIO globalState; - private WurstProjectConfigData projectConfigData; + private final ProgramStateIO globalState; + private final WurstProjectConfigData projectConfigData; public CompiletimeNatives(ProgramStateIO globalState, WurstProjectConfigData projectConfigData, boolean isProd) { this.globalState = globalState; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java index 28418fa8d..68b8e59fd 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/intermediateLang/interpreter/ProgramStateIO.java @@ -2,7 +2,7 @@ import com.google.common.collect.Maps; import de.peeeq.wurstio.mpq.MpqEditor; -import de.peeeq.wurstio.objectreader.*; +import de.peeeq.wurstio.objectreader.ObjectFileType; import de.peeeq.wurstio.utils.FileUtils; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.gui.WurstGui; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ExecutableJassFunction.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ExecutableJassFunction.java index 0e10d5f9b..b8fcaf4bf 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ExecutableJassFunction.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ExecutableJassFunction.java @@ -13,7 +13,7 @@ public interface ExecutableJassFunction { class UserDefinedJassFunction implements ExecutableJassFunction { - private JassFunction jassFunction; + private final JassFunction jassFunction; public UserDefinedJassFunction(JassFunction f) { this.jassFunction = f; @@ -31,7 +31,7 @@ public ILconst execute(JassInterpreter jassInterpreter, ILconst[] arguments) { class UnknownJassFunction implements ExecutableJassFunction { - private String name; + private final String name; public UnknownJassFunction(String name) { this.name = name; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/JassArray.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/JassArray.java index b2ef4b834..db0a9119c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/JassArray.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/JassArray.java @@ -9,8 +9,8 @@ public class JassArray extends ILconstAbstract { - private String type; - private Map values = Maps.newLinkedHashMap(); + private final String type; + private final Map values = Maps.newLinkedHashMap(); public JassArray(String type) { this.type = type; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/JassInterpreter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/JassInterpreter.java index b86b06a50..96b6abef0 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/JassInterpreter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/JassInterpreter.java @@ -21,10 +21,10 @@ public class JassInterpreter implements AbstractInterpreter { private JassProg prog; - private static ReturnException staticReturnException = new ReturnException(null); + private static final ReturnException staticReturnException = new ReturnException(null); private Map globalVarMap; private boolean trace = false; - private Map functionCache = new HashMap<>(); + private final Map functionCache = new HashMap<>(); private final TimerMockHandler timerMockHandler = new TimerMockHandler(); public void loadProgram(JassProg prog) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/NativeJassFunction.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/NativeJassFunction.java index ed4453007..fec9a7d38 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/NativeJassFunction.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/NativeJassFunction.java @@ -8,8 +8,8 @@ public class NativeJassFunction implements ExecutableJassFunction { - private Method method; - private Object provider; + private final Method method; + private final Object provider; public NativeJassFunction(Object provider, Method method) { this.provider = provider; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java index 754381cd1..522399533 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/ReflectionNativeProvider.java @@ -1,13 +1,11 @@ package de.peeeq.wurstio.jassinterpreter; import de.peeeq.wurstio.jassinterpreter.providers.*; -import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.intermediatelang.ILconst; import de.peeeq.wurstscript.intermediatelang.ILconstNull; import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; import de.peeeq.wurstscript.intermediatelang.interpreter.NativesProvider; import de.peeeq.wurstscript.intermediatelang.interpreter.NoSuchNativeException; -import de.peeeq.wurstscript.utils.Utils; import java.io.PrintStream; import java.lang.reflect.InvocationTargetException; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/TimerMock.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/TimerMock.java index b4db785e7..dabae5475 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/TimerMock.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/TimerMock.java @@ -20,9 +20,9 @@ public class TimerMock { public class TimerMockRunnable implements Runnable { - private ILconstFuncRef handlerFunc; - private boolean periodic; - private float timeout; + private final ILconstFuncRef handlerFunc; + private final boolean periodic; + private final float timeout; private boolean cancelled; public TimerMockRunnable(ILconstFuncRef handlerFunc, boolean periodic, float timeout) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/TriggerMock.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/TriggerMock.java index 3b938c61d..f68a58623 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/TriggerMock.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/mocks/TriggerMock.java @@ -10,8 +10,8 @@ public class TriggerMock { - private ArrayList conditions = Lists.newArrayList(); - private ArrayList actions = Lists.newArrayList(); + private final ArrayList conditions = Lists.newArrayList(); + private final ArrayList actions = Lists.newArrayList(); public TriggerMock() { } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/EffectProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/EffectProvider.java index 4fae0cd41..d6f959ac7 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/EffectProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/EffectProvider.java @@ -1,7 +1,9 @@ package de.peeeq.wurstio.jassinterpreter.providers; import de.peeeq.wurstio.jassinterpreter.mocks.EffectMock; -import de.peeeq.wurstscript.intermediatelang.*; +import de.peeeq.wurstscript.intermediatelang.ILconstReal; +import de.peeeq.wurstscript.intermediatelang.ILconstString; +import de.peeeq.wurstscript.intermediatelang.IlConstHandle; import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; public class EffectProvider extends Provider { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/FrameProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/FrameProvider.java index bedbfe0e6..06f6a6e51 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/FrameProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/FrameProvider.java @@ -1,6 +1,9 @@ package de.peeeq.wurstio.jassinterpreter.providers; -import de.peeeq.wurstscript.intermediatelang.*; +import de.peeeq.wurstscript.intermediatelang.ILconstInt; +import de.peeeq.wurstscript.intermediatelang.ILconstReal; +import de.peeeq.wurstscript.intermediatelang.ILconstString; +import de.peeeq.wurstscript.intermediatelang.IlConstHandle; import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; /** diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/GroupProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/GroupProvider.java index d0d1d1c8f..48e8c6d4d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/GroupProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/GroupProvider.java @@ -5,12 +5,12 @@ import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; import java.util.ArrayDeque; -import java.util.LinkedHashSet; import java.util.Iterator; +import java.util.LinkedHashSet; public class GroupProvider extends Provider { - private ArrayDeque enumUnitStack = new ArrayDeque<>(); + private final ArrayDeque enumUnitStack = new ArrayDeque<>(); public GroupProvider(AbstractInterpreter interpreter) { super(interpreter); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HandleProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HandleProvider.java index 81e30a0ed..da51dbe79 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HandleProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/HandleProvider.java @@ -8,7 +8,7 @@ public class HandleProvider extends Provider { private int handleCounter = 0; - private LinkedHashMap handleMap = new LinkedHashMap<>(); + private final LinkedHashMap handleMap = new LinkedHashMap<>(); public HandleProvider(AbstractInterpreter interpreter) { super(interpreter); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LocationProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LocationProvider.java index a0ba304c8..43f5efc41 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LocationProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LocationProvider.java @@ -6,7 +6,7 @@ import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; public class LocationProvider extends Provider { - private static IlConstHandle lastExpiredMock = null; + private static final IlConstHandle lastExpiredMock = null; public LocationProvider(AbstractInterpreter interpreter) { super(interpreter); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LuaEnsureTypeProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LuaEnsureTypeProvider.java index df96afca7..3c5c2668c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LuaEnsureTypeProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/LuaEnsureTypeProvider.java @@ -1,6 +1,9 @@ package de.peeeq.wurstio.jassinterpreter.providers; -import de.peeeq.wurstscript.intermediatelang.*; +import de.peeeq.wurstscript.intermediatelang.ILconstBool; +import de.peeeq.wurstscript.intermediatelang.ILconstInt; +import de.peeeq.wurstscript.intermediatelang.ILconstReal; +import de.peeeq.wurstscript.intermediatelang.ILconstString; import de.peeeq.wurstscript.intermediatelang.interpreter.AbstractInterpreter; public class LuaEnsureTypeProvider extends Provider { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/MathProvider.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/MathProvider.java index 895bf5059..8f401c0e9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/MathProvider.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/jassinterpreter/providers/MathProvider.java @@ -7,7 +7,7 @@ import java.util.Random; public class MathProvider extends Provider { - private Random r = new Random(); + private final Random r = new Random(); public MathProvider(AbstractInterpreter interpreter) { super(interpreter); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/BufferManager.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/BufferManager.java index d6e9942b4..f217b0dac 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/BufferManager.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/BufferManager.java @@ -15,8 +15,8 @@ * */ public class BufferManager { - private Map currentBuffer = new HashMap<>(); - private Map latestVersion = new HashMap<>(); + private final Map currentBuffer = new HashMap<>(); + private final Map latestVersion = new HashMap<>(); public synchronized String getBuffer(TextDocumentIdentifier textDocument) { WFile uri = WFile.create(textDocument.getUri()); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/DebouncingTimer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/DebouncingTimer.java index 623dc4ea1..402525d27 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/DebouncingTimer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/DebouncingTimer.java @@ -1,9 +1,6 @@ package de.peeeq.wurstio.languageserver; import java.time.Duration; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageServerStarter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageServerStarter.java index 67136ec63..dfb2d07b6 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageServerStarter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageServerStarter.java @@ -19,6 +19,7 @@ public static void start() { System.setOut(System.err); server.connect(launcher.getRemoteProxy()); launcher.startListening(); + server.setRemoteEndpoint(launcher.getRemoteEndpoint()); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java index dd19e028f..047afdf28 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/LanguageWorker.java @@ -18,8 +18,8 @@ public class LanguageWorker implements Runnable { private static class Workitem { - private String description; - private Runnable runnable; + private final String description; + private final Runnable runnable; public Workitem(String description, Runnable runnable) { this.description = description; @@ -83,8 +83,8 @@ public void stop() { } abstract class PendingChange { - private long time; - private WFile filename; + private final long time; + private final WFile filename; public PendingChange(WFile filename) { time = currentTime.incrementAndGet(); @@ -126,7 +126,7 @@ public String toString() { class FileReconcile extends PendingChange { - private String contents; + private final String contents; public FileReconcile(WFile filename, String contents) { super(filename); @@ -161,7 +161,7 @@ public void run() { try { work.run(); } catch (Throwable e) { - languageClient.showMessage(new MessageParams(MessageType.Error, "Request '" + work + "' could not be processed (see log for details): " + e.toString())); + languageClient.showMessage(new MessageParams(MessageType.Error, "Request '" + work + "' could not be processed (see log for details): " + e)); WLogger.severe(e); System.err.println("Error in request '" + work + "' (see log for details): " + e.getMessage()); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java index a8f63f915..9cbe61f8b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManager.java @@ -1,6 +1,5 @@ package de.peeeq.wurstio.languageserver; -import com.google.common.collect.ImmutableSet; import de.peeeq.wurstscript.ast.CompilationUnit; import de.peeeq.wurstscript.ast.ModuleInstanciations; import de.peeeq.wurstscript.ast.WurstModel; @@ -10,8 +9,6 @@ import org.eclipse.lsp4j.PublishDiagnosticsParams; import java.io.File; -import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Set; import java.util.function.Consumer; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java index e02f5d62b..19a5a873c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ModelManagerImpl.java @@ -33,21 +33,21 @@ public class ModelManagerImpl implements ModelManager { private final BufferManager bufferManager; private volatile @Nullable WurstModel model; - private File projectPath; + private final File projectPath; // dependency folders (folders mentioned in wurst.dependencies) private final Set dependencies = Sets.newLinkedHashSet(); // private WurstGui gui = new WurstGuiLogger(); - private List> onCompilationResultListeners = new ArrayList<>(); + private final List> onCompilationResultListeners = new ArrayList<>(); // compile errors for each file - private Map> parseErrors = new LinkedHashMap<>(); + private final Map> parseErrors = new LinkedHashMap<>(); // other errors for each file - private Map> otherErrors = new LinkedHashMap<>(); + private final Map> otherErrors = new LinkedHashMap<>(); // hashcode for each compilation unit content as string - private Map fileHashcodes = new HashMap<>(); + private final Map fileHashcodes = new HashMap<>(); // file for each compilation unit - private WeakHashMap compilationunitFile = new WeakHashMap<>(); + private final WeakHashMap compilationunitFile = new WeakHashMap<>(); public ModelManagerImpl(File projectPath, BufferManager bufferManager) { this.projectPath = projectPath; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java index 4dcf20047..aae96e0f3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java @@ -39,7 +39,7 @@ public static MapRequest.CompilationResult apply(WurstProjectConfigData projectC MapRequest.CompilationResult result = new MapRequest.CompilationResult(); result.script = compiledScript; - try (MpqEditor mpq = MpqEditorFactory.getEditor(Optional.of(targetMap))) { + try (MpqEditor mpq = MpqEditorFactory.getEditor(Optional.of(targetMap), true)) { byte[] scriptBytes; if (!projectConfig.getBuildMapData().getName().isEmpty()) { result.script = new File(buildDir, "war3mapj_with_config.j.txt"); @@ -71,21 +71,6 @@ public static MapRequest.CompilationResult apply(WurstProjectConfigData projectC w3I.write(result.w3i); Files.write(scriptBytes, result.script); } - -// if (!runArgs.isDisablePjass()) { -// Pjass.runPjass(file, new File(buildDir, "common.j").getAbsolutePath(), -// new File(buildDir, "blizzard.j").getAbsolutePath()); -// } -// String mapScriptName; -// if (runArgs.isLua()) { -// mapScriptName = "war3map.lua"; -// } else { -// mapScriptName = "war3map.j"; -// } -// mpq.deleteFile("war3map.lua"); -// mpq.deleteFile("war3map.j"); -// mpq.insertFile(mapScriptName, scriptBytes); - } catch (Exception e) { throw new RuntimeException(e); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java index 716e2fbfb..cec1a347c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java @@ -13,7 +13,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; @@ -38,8 +37,8 @@ public class WurstCommands { public static final String WURST_PERFORM_CODE_ACTION = "wurst.perform_code_action"; static List providedCommands() { - return Arrays.asList( - WURST_CLEAN + return List.of( + WURST_CLEAN ); } @@ -48,17 +47,17 @@ public static CompletableFuture execute(WurstLanguageServer server, Exec case WURST_CLEAN: return server.worker().handle(new CleanProject()).thenApply(x -> x); case WURST_STARTMAP: - return startmap(server, params); + return startMap(server, params); case WURST_HOTSTARTMAP: - return startmap(server, params, "-hotstart"); + return startMap(server, params, "-hotstart"); case WURST_HOTRELOAD: - return startmap(server, params, "-hotreload"); + return startMap(server, params, "-hotreload"); case WURST_TESTS: return testMap(server, params); case WURST_PERFORM_CODE_ACTION: return server.worker().handle(new PerformCodeActionRequest(server, params)); case WURST_BUILDMAP: - return buildmap(server, params); + return buildMap(server, params); } WLogger.info("unhandled command: " + params.getCommand()); throw new RuntimeException("unhandled command: " + params.getCommand()); @@ -76,7 +75,7 @@ private static CompletableFuture testMap(WurstLanguageServer server, Exe return server.worker().handle(new RunTests(filename, line, column, testName, testTimeout)); } - private static CompletableFuture buildmap(WurstLanguageServer server, ExecuteCommandParams params) { + private static CompletableFuture buildMap(WurstLanguageServer server, ExecuteCommandParams params) { WFile workspaceRoot = server.getRootUri(); if (params.getArguments().isEmpty()) { throw new RuntimeException("Missing arguments"); @@ -90,22 +89,21 @@ private static CompletableFuture buildmap(WurstLanguageServer server, Ex Optional map = mapPath.map(File::new); List compileArgs = getCompileArgs(workspaceRoot); - return server.worker().handle(new BuildMap(server.getConfigProvider(), workspaceRoot, wc3Path, map, compileArgs)).thenApply(x -> x); + return server.worker().handle(new BuildMap(server, workspaceRoot, wc3Path, map, compileArgs)).thenApply(x -> x); } - private static CompletableFuture startmap(WurstLanguageServer server, ExecuteCommandParams params, String... additionalArgs) { + private static CompletableFuture startMap(WurstLanguageServer server, ExecuteCommandParams params, String... additionalArgs) { WFile workspaceRoot = server.getRootUri(); if (params.getArguments().isEmpty()) { throw new RuntimeException("Missing arguments"); } JsonObject options = (JsonObject) params.getArguments().get(0); - String key = "mappath"; - Optional mapPath = getString(options, key); + Optional mapPath = getString(options, "mappath"); Optional wc3Path = getString(options, "wc3path"); Optional map = mapPath.map(File::new); List compileArgs = getCompileArgs(workspaceRoot, additionalArgs); - return server.worker().handle(new RunMap(server.getConfigProvider(), workspaceRoot, wc3Path, map, compileArgs)).thenApply(x -> x); + return server.worker().handle(new RunMap(server, workspaceRoot, wc3Path, map, compileArgs)).thenApply(x -> x); } private static Optional getString(JsonObject options, String key) { @@ -136,7 +134,7 @@ public static List getCompileArgs(WFile rootPath, String... additionalAr return defaultArgs; } } catch (IOException e) { - throw new RuntimeException("Could not access wurst run config file", e); + throw new RuntimeException("Could not access wurst_run.args config file", e); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstLanguageServer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstLanguageServer.java index c755a5be3..0bb890825 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstLanguageServer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstLanguageServer.java @@ -3,16 +3,14 @@ import de.peeeq.wurstscript.CompileTimeInfo; import de.peeeq.wurstscript.WLogger; import org.eclipse.lsp4j.*; +import org.eclipse.lsp4j.jsonrpc.RemoteEndpoint; import org.eclipse.lsp4j.jsonrpc.messages.Either; -import org.eclipse.lsp4j.services.LanguageClient; -import org.eclipse.lsp4j.services.LanguageClientAware; -import org.eclipse.lsp4j.services.TextDocumentService; -import org.eclipse.lsp4j.services.WorkspaceService; +import org.eclipse.lsp4j.services.*; import java.io.FileDescriptor; import java.io.FileOutputStream; import java.io.PrintStream; -import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collections; import java.util.concurrent.CompletableFuture; @@ -20,20 +18,17 @@ /** * */ -public class WurstLanguageServer implements org.eclipse.lsp4j.services.LanguageServer, LanguageClientAware { +public class WurstLanguageServer implements LanguageServer, LanguageClientAware { private WFile rootUri; - private de.peeeq.wurstio.languageserver.LanguageWorker languageWorker = new de.peeeq.wurstio.languageserver.LanguageWorker(); + private final de.peeeq.wurstio.languageserver.LanguageWorker languageWorker = new de.peeeq.wurstio.languageserver.LanguageWorker(); private LanguageClient languageClient; + private RemoteEndpoint remoteEndpoint; @Override public CompletableFuture initialize(InitializeParams params) { System.err.println("Loading Wurst version " + CompileTimeInfo.version); setupLogger(); - try { - System.setErr(new PrintStream(new FileOutputStream(FileDescriptor.err), true, "UTF-8")); - } catch (UnsupportedEncodingException e) { - System.err.println("Your JVM doesn't support UTF-8 encoding. Output defaults to system encoding."); - } + System.setErr(new PrintStream(new FileOutputStream(FileDescriptor.err), true, StandardCharsets.UTF_8)); if (params.getRootUri() == null) { System.err.println("Workspace null. Make sure to open a valid project root using File->Open Folder, before opening code files."); return CompletableFuture.completedFuture(null); @@ -65,7 +60,6 @@ public CompletableFuture initialize(InitializeParams params) { InitializeResult res = new InitializeResult(capabilities); WLogger.info("initialization done: " + params.getRootUri()); - System.err.println("initialization done!"); return CompletableFuture.completedFuture(res); } private void setupLogger() { @@ -118,4 +112,12 @@ public LanguageClient getLanguageClient() { public ConfigProvider getConfigProvider() { return new ConfigProvider(languageClient); } + + public void setRemoteEndpoint(RemoteEndpoint remoteEndpoint) { + this.remoteEndpoint = remoteEndpoint; + } + + public RemoteEndpoint getRemoteEndpoint() { + return remoteEndpoint; + } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstTextDocumentService.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstTextDocumentService.java index e26aefed6..130c77f04 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstTextDocumentService.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstTextDocumentService.java @@ -7,8 +7,6 @@ import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.TextDocumentService; -import java.io.BufferedReader; -import java.io.FileReader; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstWorkspaceService.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstWorkspaceService.java index 8048ad063..746dbda44 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstWorkspaceService.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstWorkspaceService.java @@ -3,6 +3,7 @@ import de.peeeq.wurstio.languageserver.requests.SymbolInformationRequest; import de.peeeq.wurstscript.WLogger; import org.eclipse.lsp4j.*; +import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.WorkspaceService; import java.util.List; @@ -13,14 +14,14 @@ */ public class WurstWorkspaceService implements WorkspaceService { - private WurstLanguageServer server; + private final WurstLanguageServer server; public WurstWorkspaceService(WurstLanguageServer server) { this.server = server; } @Override - public CompletableFuture> symbol(WorkspaceSymbolParams params) { + public CompletableFuture, List>> symbol(WorkspaceSymbolParams params) { WLogger.info("symbol"); return server.worker().handle(new SymbolInformationRequest(params)); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java index f14a68b90..88877a8f2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java @@ -3,16 +3,15 @@ import config.WurstProjectConfig; import config.WurstProjectConfigData; import de.peeeq.wurstio.gui.WurstGuiImpl; -import de.peeeq.wurstio.languageserver.ConfigProvider; import de.peeeq.wurstio.languageserver.ModelManager; -import de.peeeq.wurstio.languageserver.ProjectConfigBuilder; import de.peeeq.wurstio.languageserver.WFile; +import de.peeeq.wurstio.languageserver.WurstLanguageServer; +import de.peeeq.wurstio.mpq.MpqEditor; +import de.peeeq.wurstio.mpq.MpqEditorFactory; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.gui.WurstGui; import org.eclipse.lsp4j.MessageType; -import systems.crigges.jmpq3.JMpqEditor; -import systems.crigges.jmpq3.MPQOpenOption; import java.io.File; import java.io.IOException; @@ -26,9 +25,9 @@ */ public class BuildMap extends MapRequest { - public BuildMap(ConfigProvider configProvider, WFile workspaceRoot, Optional wc3Path, Optional map, - List compileArgs) { - super(configProvider, map, compileArgs, workspaceRoot, wc3Path); + public BuildMap(WurstLanguageServer languageServer, WFile workspaceRoot, Optional wc3Path, Optional map, + List compileArgs) { + super(languageServer, map, compileArgs, workspaceRoot, wc3Path); } @Override @@ -64,8 +63,10 @@ public Object execute(ModelManager modelManager) throws IOException { injectMapData(gui, targetMap, result); - JMpqEditor finalizer = new JMpqEditor(targetMap.get(), MPQOpenOption.FORCE_V0); - finalizer.close(); + //noinspection EmptyTryBlock + try(MpqEditor ignored = MpqEditorFactory.getEditor(targetMap)) { + // Just finalization + } gui.sendProgress("Done."); } catch (CompileError e) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeActionRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeActionRequest.java index 57ed034c2..06b6b5515 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeActionRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/CodeActionRequest.java @@ -181,7 +181,7 @@ class M implements FuncRef.MatcherVoid { private List parameterNames = Collections.emptyList(); private int line; private int indent; - private WFile targetFile = filename; + private final WFile targetFile = filename; private String receiverType = ""; private WurstType returnType = WurstTypeVoid.instance(); private boolean isAnnotation = false; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/Colors.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/Colors.java index b199fa982..7ae06c773 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/Colors.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/Colors.java @@ -160,7 +160,7 @@ public static void collectStringColors(String s, List result, s = Utils.escapeStringWithoutQuotes(s); Matcher matcher = colorPattern.matcher(s); - for ( ; matcher.find(); ) { + while (matcher.find()) { double red = Integer.parseInt(matcher.group(2), 16) / 255.; double green = Integer.parseInt(matcher.group(3), 16) / 255.; double blue = Integer.parseInt(matcher.group(4), 16) / 255.; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/DocumentSymbolRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/DocumentSymbolRequest.java index 92b5e89e0..6b60c8334 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/DocumentSymbolRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/DocumentSymbolRequest.java @@ -19,7 +19,7 @@ */ public class DocumentSymbolRequest extends UserRequest>> { - private TextDocumentIdentifier textDocument; + private final TextDocumentIdentifier textDocument; public DocumentSymbolRequest(DocumentSymbolParams params) { textDocument = params.getTextDocument(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetCompletions.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetCompletions.java index 8951eaacf..a082f74bf 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetCompletions.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetCompletions.java @@ -55,9 +55,7 @@ public GetCompletions(CompletionParams position, BufferManager bufferManager) { this.column = position.getPosition().getCharacter(); this.lines = buffer.split("\\n|\\r\\n"); if (line <= lines.length) { - WLogger.info("Get completions in line " + line + ": \n" + - "" + currentLine().replace('\t', ' ') + "\n" + - "" + Utils.repeat(' ', column > 0 ? column : 0) + "^\n" + + WLogger.info("Get completions in line " + line + ": \n" + currentLine().replace('\t', ' ') + "\n" + Utils.repeat(' ', column > 0 ? column : 0) + "^\n" + " at column " + column); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetDefinition.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetDefinition.java index 8b7222020..c50aeef8a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetDefinition.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetDefinition.java @@ -1,8 +1,8 @@ package de.peeeq.wurstio.languageserver.requests; -import de.peeeq.wurstio.languageserver.ModelManager; import de.peeeq.wurstio.languageserver.BufferManager; import de.peeeq.wurstio.languageserver.Convert; +import de.peeeq.wurstio.languageserver.ModelManager; import de.peeeq.wurstio.languageserver.WFile; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.ast.*; @@ -94,9 +94,9 @@ private List linkTo(AstElementWithSource decl) { } static class DefinitionInfo { - private String filename; - private int line; - private int column; + private final String filename; + private final int line; + private final int column; public DefinitionInfo(String filename, int line, int column) { this.filename = filename; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetUsages.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetUsages.java index a62885f60..1b7b0159a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetUsages.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/GetUsages.java @@ -1,10 +1,13 @@ package de.peeeq.wurstio.languageserver.requests; -import de.peeeq.wurstio.languageserver.ModelManager; import de.peeeq.wurstio.languageserver.BufferManager; import de.peeeq.wurstio.languageserver.Convert; +import de.peeeq.wurstio.languageserver.ModelManager; import de.peeeq.wurstio.languageserver.WFile; -import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.CompilationUnit; +import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.ExprVarArrayAccess; +import de.peeeq.wurstscript.ast.NameDef; import de.peeeq.wurstscript.utils.Utils; import org.eclipse.lsp4j.*; @@ -73,7 +76,7 @@ public List execute(ModelManager modelManager) { } public static class UsagesData { - private Location location; + private final Location location; private DocumentHighlightKind kind; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index e7508bb44..89f745668 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -7,10 +7,10 @@ import de.peeeq.wurstio.TimeTaker; import de.peeeq.wurstio.UtilsIO; import de.peeeq.wurstio.WurstCompilerJassImpl; -import de.peeeq.wurstio.languageserver.ConfigProvider; import de.peeeq.wurstio.languageserver.ModelManager; import de.peeeq.wurstio.languageserver.ProjectConfigBuilder; import de.peeeq.wurstio.languageserver.WFile; +import de.peeeq.wurstio.languageserver.WurstLanguageServer; import de.peeeq.wurstio.mpq.MpqEditor; import de.peeeq.wurstio.mpq.MpqEditorFactory; import de.peeeq.wurstio.utils.W3InstallationData; @@ -30,6 +30,7 @@ import de.peeeq.wurstscript.utils.Utils; import net.moonlightflower.wc3libs.bin.app.W3I; import net.moonlightflower.wc3libs.port.Orient; +import org.apache.commons.lang.StringUtils; import org.eclipse.lsp4j.MessageParams; import org.eclipse.lsp4j.MessageType; import org.eclipse.lsp4j.services.LanguageClient; @@ -43,13 +44,16 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; -import java.util.*; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; public abstract class MapRequest extends UserRequest { - protected final ConfigProvider configProvider; + protected final WurstLanguageServer langServer; protected final @Nullable Optional map; protected final List compileArgs; @@ -70,7 +74,7 @@ public TimeTaker getTimeTaker() { enum SafetyLevel { - QuickAndDirty, KindOfSafe; + QuickAndDirty, KindOfSafe } public static class CompilationResult { @@ -78,9 +82,9 @@ public static class CompilationResult { public File w3i; } - public MapRequest(ConfigProvider configProvider, Optional map, List compileArgs, WFile workspaceRoot, - Optional wc3Path) { - this.configProvider = configProvider; + public MapRequest(WurstLanguageServer langServer, Optional map, List compileArgs, WFile workspaceRoot, + Optional wc3Path) { + this.langServer = langServer; this.map = map; this.compileArgs = compileArgs; this.workspaceRoot = workspaceRoot; @@ -206,7 +210,7 @@ private File runJassHotCodeReload(File mapScript) throws IOException, Interrupte throw new IOException("Could not find file " + blizzardJ.getAbsolutePath()); } - ProcessBuilder pb = new ProcessBuilder(configProvider.getJhcrExe(), "init", commonJ.getName(), blizzardJ.getName(), mapScript.getName()); + ProcessBuilder pb = new ProcessBuilder(langServer.getConfigProvider().getJhcrExe(), "init", commonJ.getName(), blizzardJ.getName(), mapScript.getName()); pb.directory(buildDir); Utils.exec(pb, Duration.ofSeconds(30), System.err::println); return new File(buildDir, "jhcr_war3map.j"); @@ -344,16 +348,15 @@ protected CompilationResult compileScript(ModelManager modelManager, WurstGui gu } - // first compile the script: result.script = compileScript(gui, modelManager, compileArgs, testMap, projectConfigData, isProd, result.script); Optional model = Optional.ofNullable(modelManager.getModel()); if (!model.isPresent() - || model - .get() - .stream() - .noneMatch((CompilationUnit cu) -> cu.getCuInfo().getFile().endsWith("war3map.j"))) { + || model + .get() + .stream() + .noneMatch((CompilationUnit cu) -> cu.getCuInfo().getFile().endsWith("war3map.j"))) { println("No 'war3map.j' file could be found inside the map nor inside the wurst folder"); println("If you compile the map with WurstPack once, this file should be in your wurst-folder. "); println("We will try to start the map now, but it will probably fail. "); @@ -439,15 +442,15 @@ private W3InstallationData getBestW3InstallationData() throws RequestFailedExcep // no Warcraft installation supported on Linux return new W3InstallationData(Optional.empty(), Optional.empty()); } - if (wc3Path.isPresent()) { - W3InstallationData w3data = new W3InstallationData(new File(wc3Path.get())); - if (!w3data.getWc3PatchVersion().isPresent()) { + if (wc3Path.isPresent() && StringUtils.isNotBlank(wc3Path.get())) { + W3InstallationData w3data = new W3InstallationData(langServer, new File(wc3Path.get())); + if (w3data.getWc3PatchVersion().isEmpty()) { throw new RequestFailedException(MessageType.Error, "Could not find Warcraft III installation at specified path: " + wc3Path); } return w3data; } else { - return new W3InstallationData(); + return new W3InstallationData(langServer); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RequestFailedException.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RequestFailedException.java index bbd9468bc..28038135d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RequestFailedException.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RequestFailedException.java @@ -6,7 +6,7 @@ * */ public class RequestFailedException extends RuntimeException { - private MessageType messageType; + private final MessageType messageType; public RequestFailedException(MessageType messageType, String s) { super(s); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java index 3380ded67..2828a85be 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java @@ -4,19 +4,14 @@ import com.google.common.io.Files; import config.WurstProjectConfig; import config.WurstProjectConfigData; -import de.peeeq.wurstio.TimeTaker; import de.peeeq.wurstio.gui.WurstGuiImpl; -import de.peeeq.wurstio.languageserver.ConfigProvider; import de.peeeq.wurstio.languageserver.ModelManager; -import de.peeeq.wurstio.languageserver.ProjectConfigBuilder; import de.peeeq.wurstio.languageserver.WFile; -import de.peeeq.wurstio.mpq.MpqEditor; -import de.peeeq.wurstio.mpq.MpqEditorFactory; +import de.peeeq.wurstio.languageserver.WurstLanguageServer; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.utils.Utils; -import net.moonlightflower.wc3libs.bin.app.W3I; import net.moonlightflower.wc3libs.port.GameVersion; import net.moonlightflower.wc3libs.port.Orient; import org.apache.commons.lang.RandomStringUtils; @@ -33,12 +28,13 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; +import java.util.Arrays; import java.util.List; import java.util.Optional; -import java.util.Arrays; import static de.peeeq.wurstio.languageserver.ProjectConfigBuilder.FILE_NAME; -import static net.moonlightflower.wc3libs.port.GameVersion.*; +import static net.moonlightflower.wc3libs.port.GameVersion.VERSION_1_31; +import static net.moonlightflower.wc3libs.port.GameVersion.VERSION_1_32; /** * Created by peter on 16.05.16. @@ -48,9 +44,9 @@ public class RunMap extends MapRequest { private @Nullable File customTarget = null; - public RunMap(ConfigProvider configProvider, WFile workspaceRoot, Optional wc3Path, Optional map, - List compileArgs) { - super(configProvider, map, compileArgs, workspaceRoot, wc3Path); + public RunMap(WurstLanguageServer langServer, WFile workspaceRoot, Optional wc3Path, Optional map, + List compileArgs) { + super(langServer, map, compileArgs, workspaceRoot, wc3Path); safeCompilation = SafetyLevel.QuickAndDirty; } @@ -115,14 +111,14 @@ public Object execute(ModelManager modelManager) throws IOException { } - if (path.length() > 0) { + if (!path.isEmpty()) { // now start the map File gameExe = w3data.getGameExe().get(); if (!w3data.getWc3PatchVersion().isPresent()) { throw new RequestFailedException(MessageType.Error, wc3Path + " does not exist."); } List cmd = Lists.newArrayList(gameExe.getAbsolutePath()); - Optional wc3RunArgs = configProvider.getWc3RunArgs(); + Optional wc3RunArgs = langServer.getConfigProvider().getWc3RunArgs(); if (!wc3RunArgs.isPresent() || StringUtils.isBlank(wc3RunArgs.get())) { if (w3data.getWc3PatchVersion().get().compareTo(VERSION_1_32) >= 0) { cmd.add("-launch"); @@ -179,7 +175,7 @@ private void callJhcrUpdate(File mapScript) throws IOException, InterruptedExcep Path customMapDataPath = getCustomMapDataPath(); - ProcessBuilder pb = new ProcessBuilder(configProvider.getJhcrExe(), "update", mapScript.getName(), "--asm", + ProcessBuilder pb = new ProcessBuilder(langServer.getConfigProvider().getJhcrExe(), "update", mapScript.getName(), "--asm", "--preload-path", customMapDataPath.toAbsolutePath().toString()); pb.directory(mapScriptFolder); Utils.ExecResult $ = Utils.exec(pb, Duration.ofSeconds(30), System.err::println); @@ -191,7 +187,7 @@ private void callJhcrUpdate(File mapScript) throws IOException, InterruptedExcep * C:\\Users\\Peter\\Documents\\Warcraft III\\CustomMapData */ private Path getCustomMapDataPath() { - String customMapDataPath = configProvider.getConfig("customMapDataPath", ""); + String customMapDataPath = langServer.getConfigProvider().getConfig("customMapDataPath", ""); if (!customMapDataPath.isEmpty()) { return Paths.get(customMapDataPath); } @@ -274,7 +270,7 @@ private File copyToWarcraftMapDir(File testMap) throws IOException { private Optional findMapDocumentPath(String testMapName, File myDocumentsFolder) { Optional documentPath = Optional.of( - configProvider.getMapDocumentPath().orElseGet( + langServer.getConfigProvider().getMapDocumentPath().orElseGet( () -> myDocumentsFolder.getAbsolutePath() + File.separator + "Warcraft III")); if (!new File(documentPath.get()).exists()) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java index e3acdb605..d4303ea8d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunTests.java @@ -2,7 +2,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; -import config.WurstProjectBuildMapData; import config.WurstProjectConfigData; import de.peeeq.wurstio.CompiletimeFunctionRunner; import de.peeeq.wurstio.jassinterpreter.InterpreterException; @@ -11,7 +10,9 @@ import de.peeeq.wurstio.languageserver.WFile; import de.peeeq.wurstscript.RunArgs; import de.peeeq.wurstscript.WLogger; -import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.CompilationUnit; +import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.FuncDef; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.intermediatelang.interpreter.ILInterpreter; @@ -28,7 +29,6 @@ import org.eclipse.lsp4j.MessageType; import java.io.*; -import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.*; @@ -46,14 +46,14 @@ public class RunTests extends UserRequest { private final Optional testName; private final int timeoutSeconds; - private List successTests = Lists.newArrayList(); - private List failTests = Lists.newArrayList(); + private final List successTests = Lists.newArrayList(); + private final List failTests = Lists.newArrayList(); private static ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); static public class TestFailure { - private ImFunction function; + private final ImFunction function; private final StackTrace stackTrace; private final String message; @@ -221,7 +221,7 @@ public TestResult runTests(ImTranslator translator, ImProg imProg, Optional 0) { StringBuilder sb = new StringBuilder(); for (CompileError error : gui.getErrorList()) { - sb.append(error.toString()).append("\n"); + sb.append(error).append("\n"); println(error.getMessage()); } gui.clearErrors(); @@ -290,7 +290,7 @@ public void write(int b) throws IOException { } @Override - public void write(byte b[], int off, int len) throws IOException { + public void write(byte[] b, int off, int len) throws IOException { println(new String(b, off, len)); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/SymbolInformationRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/SymbolInformationRequest.java index 33e69de75..4a3053d89 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/SymbolInformationRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/SymbolInformationRequest.java @@ -5,7 +5,9 @@ import de.peeeq.wurstscript.ast.*; import org.eclipse.lsp4j.SymbolInformation; import org.eclipse.lsp4j.SymbolKind; +import org.eclipse.lsp4j.WorkspaceSymbol; import org.eclipse.lsp4j.WorkspaceSymbolParams; +import org.eclipse.lsp4j.jsonrpc.messages.Either; import java.util.ArrayList; import java.util.Collections; @@ -15,17 +17,17 @@ /** * */ -public class SymbolInformationRequest extends UserRequest> { +public class SymbolInformationRequest extends UserRequest, List>> { - private String query; + private final String query; public SymbolInformationRequest(WorkspaceSymbolParams params) { query = params.getQuery().toLowerCase(); } @Override - public List execute(ModelManager modelManager) { - return symbolsFromModel(modelManager.getModel()); + public Either, List> execute(ModelManager modelManager) { + return Either.forLeft(symbolsFromModel(modelManager.getModel())); } private List symbolsFromModel(WurstModel model) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/UserRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/UserRequest.java index 955125442..ef03b31fc 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/UserRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/UserRequest.java @@ -10,7 +10,7 @@ public abstract class UserRequest { - private CompletableFuture fut = new CompletableFuture<>(); + private final CompletableFuture fut = new CompletableFuture<>(); public abstract Res execute(ModelManager modelManager) throws IOException; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java index 31da5d0d4..c21978c1f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/map/importer/ImportFile.java @@ -12,9 +12,6 @@ import javax.swing.*; import java.io.*; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.*; import java.util.stream.Collectors; @@ -47,7 +44,7 @@ public static void extractImportsFromMap(File mapFile, RunArgs runArgs) { } private static void extractImportsFrom(File importDirectory, File tempMap, RunArgs runArgs) throws Exception { - try (MpqEditor editor = MpqEditorFactory.getEditor(Optional.of(tempMap))) { + try (MpqEditor editor = MpqEditorFactory.getEditor(Optional.of(tempMap), true)) { LinkedList failed = extractImportedFiles(editor, importDirectory); if (failed.isEmpty()) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java index bf436102e..2b40da586 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/Jmpq3BasedEditor.java @@ -70,9 +70,4 @@ public void setKeepHeaderOffset(boolean flag) { editor.setKeepHeaderOffset(flag); } - @Override - protected void finalize() throws Throwable { - WLogger.severe("JMPQ editor not closed normally"); - editor.close(); - } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java index 2e8529ff7..38a7353f1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/mpq/MpqEditorFactory.java @@ -1,10 +1,9 @@ package de.peeeq.wurstio.mpq; +import javax.annotation.Nullable; import java.io.File; import java.util.Optional; -import javax.annotation.Nullable; - public class MpqEditorFactory { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectFileType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectFileType.java index f66c51eec..b46db24b2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectFileType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/objectreader/ObjectFileType.java @@ -11,10 +11,10 @@ public enum ObjectFileType { UPGRADES("w3q", "Units\\UpgradeData.slk", "Units\\UpgradeMetaData.slk", true); - private boolean usesLevels; - private String ext; - private String objectIDs; - private String modIDs; + private final boolean usesLevels; + private final String ext; + private final String objectIDs; + private final String modIDs; public boolean usesLevels() { return usesLevels; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java index 8a616b0d2..57b44119c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java @@ -1,31 +1,42 @@ package de.peeeq.wurstio.utils; +import de.peeeq.wurstio.languageserver.WurstLanguageServer; import de.peeeq.wurstscript.WLogger; import net.moonlightflower.wc3libs.bin.GameExe; -import net.moonlightflower.wc3libs.port.GameVersion; -import net.moonlightflower.wc3libs.port.NotFoundException; -import net.moonlightflower.wc3libs.port.Orient; -import net.moonlightflower.wc3libs.port.StdGameExeFinder; -import net.moonlightflower.wc3libs.port.StdGameVersionFinder; -import net.moonlightflower.wc3libs.port.UnsupportedPlatformException; +import net.moonlightflower.wc3libs.port.*; import net.moonlightflower.wc3libs.port.win.WinGameExeFinder; +import javax.swing.*; import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.util.Optional; public class W3InstallationData { + private final WurstLanguageServer languageServer; + private Optional gameExe = Optional.empty(); private Optional version = Optional.empty(); + private File selectedFolder; + + static { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ignored) { + } + } + public W3InstallationData(Optional gameExe, Optional version) { + this.languageServer = null; this.gameExe = gameExe; this.version = version; } /** Evaluates the game path and version by discovering the system environment. */ - public W3InstallationData() { + public W3InstallationData(WurstLanguageServer languageServer) { + this.languageServer = languageServer; discoverExePath(); discoverVersion(); } @@ -34,7 +45,8 @@ public W3InstallationData() { * Evaluates the game path and version, attempting to use the provided path if possible, before discovering the * system environment. */ - public W3InstallationData(File wc3Path) { + public W3InstallationData(WurstLanguageServer languageServer, File wc3Path) { + this.languageServer = languageServer; if (!Orient.isWindowsSystem()) { WLogger.warning("Game path configuration only works on windows"); discoverExePath(); @@ -42,6 +54,16 @@ public W3InstallationData(File wc3Path) { return; } + loadFromPath(wc3Path); + + if (!gameExe.isPresent()) { + WLogger.warning("The provided wc3 path wasn't suitable. Falling back to discovery."); + discoverExePath(); + discoverVersion(); + } + } + + private void loadFromPath(File wc3Path) { try { gameExe = Optional.ofNullable(WinGameExeFinder.fromDirIgnoreVersion(wc3Path)); } catch (NotFoundException e) { @@ -59,22 +81,42 @@ public W3InstallationData(File wc3Path) { return Optional.empty(); }); WLogger.info("Parsed custom game version from executable: " + version); - - if (!gameExe.isPresent()) { - WLogger.warning("The provided wc3 path wasn't suitable. Falling back to discovery."); - discoverExePath(); - discoverVersion(); - } } private void discoverExePath() { try { gameExe = Optional.ofNullable(new StdGameExeFinder().get()); - WLogger.info("Parsed game path: " + gameExe); - } catch (NotFoundException e) { - e.printStackTrace(); - } catch (UnsupportedPlatformException e) { - WLogger.warning("Wurst compiler cannot determine game path: " + e.getMessage()); + WLogger.info("Discovered game path: " + gameExe); + } catch (NotFoundException | UnsupportedPlatformException e) { + WLogger.warning("Can't find game installation directory: " + e.getMessage()); + showFileChooser(); + } + } + + private void showFileChooser() { + try { + SwingUtilities.invokeAndWait(() -> { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setDialogTitle("Select Warcraft III installation directory"); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + JDialog dialog = new JDialog(); + dialog.setAlwaysOnTop(true); + + int result = fileChooser.showOpenDialog(dialog); + if (result == JFileChooser.APPROVE_OPTION) { + selectedFolder = fileChooser.getSelectedFile(); + } else { + WLogger.warning("No directory selected"); + } + }); + + loadFromPath(selectedFolder); + + if (gameExe.isPresent()) { + languageServer.getRemoteEndpoint().notify("wurst/updateGamePath", selectedFolder.getAbsolutePath()); + } + } catch (InterruptedException | InvocationTargetException ex) { + WLogger.warning("Choosing game path failed", ex); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ErrorReporting.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ErrorReporting.java index 043f0399a..e9990fbd8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ErrorReporting.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ErrorReporting.java @@ -7,7 +7,7 @@ public class ErrorReporting { public void handleSevere(Throwable t, String sourcecode) { - System.err.println(t.toString()); + System.err.println(t); WLogger.severe(t); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ModuleExpander.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ModuleExpander.java index c95742795..e133a66a9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ModuleExpander.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/ModuleExpander.java @@ -10,7 +10,6 @@ import de.peeeq.wurstscript.utils.Pair; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -21,7 +20,7 @@ private ModuleExpander() { public static void expandModules(CompilationUnit cu) { for (WPackage t : cu.getPackages()) { - expandModules((WPackage) t); + expandModules(t); } } @@ -111,7 +110,7 @@ public static ModuleInstanciations expandModules(ModuleInstanciation mi) { public static T smartCopy(T e, List> typeReplacements) { List, TypeExpr>> replacementsByPath = Lists.newArrayList(); - calcReplacementsByPath(typeReplacements, replacementsByPath, e, ImmutableList.emptyList()); + calcReplacementsByPath(typeReplacements, replacementsByPath, e, ImmutableList.emptyList()); Element copy = e.copy(); @@ -140,7 +139,7 @@ private static void calcReplacementsByPath(List> type for (Pair rep : typeReplacements) { if (typeExpr.attrTyp().equalsType(rep.getA(), e)) { WPos source = typeExpr.getSource(); - replacementsByPath.add(Pair.create(pos, (TypeExpr) Ast.TypeExprResolved(source, rep.getB()))); + replacementsByPath.add(Pair.create(pos, Ast.TypeExprResolved(source, rep.getB()))); } } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java index 6149e99e1..b8e02a5cf 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/RunArgs.java @@ -16,44 +16,44 @@ public class RunArgs { private final String[] args; private final RunOption optionLua; private final RunOption optionCompiletimeCache; - private List files = Lists.newArrayList(); + private final List files = Lists.newArrayList(); private @Nullable String mapFile = null; private @Nullable String outFile = null; private @Nullable String workspaceroot = null; private @Nullable String inputmap = null; private @Nullable int testTimeout = 20; - private List options = Lists.newArrayList(); - private List libDirs = Lists.newArrayList(); - private RunOption optionHelp; - private RunOption optionOpt; - private RunOption optionInline; - private RunOption optionLocalOptimizations; - private RunOption optionRuntests; - private RunOption optionGui; - private RunOption optionAbout; - private RunOption optionHotdoc; - private RunOption optionShowErrors; - private RunOption optionRunCompileTimeFunctions; - private RunOption optionStacktraces; - private RunOption uncheckedDispatch; - private RunOption optionNodebug; - private RunOption optionInjectCompiletimeObjects; - private RunOption optionExtractImports; - private RunOption optionStartServer; - private RunOption optionLanguageServer; - private RunOption optionNoExtractMapScript; - private RunOption optionFixInstall; - private RunOption optionCopyMap; - private RunOption optionDisablePjass; - private RunOption optionShowVersion; - private RunOption optionPrettyPrint; - private RunOption optionMeasureTimes; - private RunOption optionHotStartmap; - private RunOption optionHotReload; - private RunOption optionTestTimeout; + private final List options = Lists.newArrayList(); + private final List libDirs = Lists.newArrayList(); + private final RunOption optionHelp; + private final RunOption optionOpt; + private final RunOption optionInline; + private final RunOption optionLocalOptimizations; + private final RunOption optionRuntests; + private final RunOption optionGui; + private final RunOption optionAbout; + private final RunOption optionHotdoc; + private final RunOption optionShowErrors; + private final RunOption optionRunCompileTimeFunctions; + private final RunOption optionStacktraces; + private final RunOption uncheckedDispatch; + private final RunOption optionNodebug; + private final RunOption optionInjectCompiletimeObjects; + private final RunOption optionExtractImports; + private final RunOption optionStartServer; + private final RunOption optionLanguageServer; + private final RunOption optionNoExtractMapScript; + private final RunOption optionFixInstall; + private final RunOption optionCopyMap; + private final RunOption optionDisablePjass; + private final RunOption optionShowVersion; + private final RunOption optionPrettyPrint; + private final RunOption optionMeasureTimes; + private final RunOption optionHotStartmap; + private final RunOption optionHotReload; + private final RunOption optionTestTimeout; private int functionSplitLimit = 10000; - private RunOption optionBuild; + private final RunOption optionBuild; public RunArgs with(String... additionalArgs) { return new RunArgs(Stream.concat(Stream.of(args), Stream.of(additionalArgs)) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/SyntacticSugar.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/SyntacticSugar.java index 25cf7615c..67319d7b1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/SyntacticSugar.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/SyntacticSugar.java @@ -33,7 +33,7 @@ private void replaceTypeIdUse(CompilationUnit root) { public void visit(ExprMemberVarDot e) { super.visit(e); if (e.getVarName().equals("typeId")) { - replacements.put(e, Ast.ExprTypeId(e.getSource(), (Expr) e.getLeft().copy())); + replacements.put(e, Ast.ExprTypeId(e.getSource(), e.getLeft().copy())); } } }); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WLoggerDefault.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WLoggerDefault.java index 4de262c81..c8543e90d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WLoggerDefault.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WLoggerDefault.java @@ -6,7 +6,7 @@ public class WLoggerDefault implements WLoggerI { - private org.slf4j.Logger logger; + private final org.slf4j.Logger logger; public WLoggerDefault(String loggerName) { logger = LoggerFactory.getLogger(loggerName); @@ -39,6 +39,7 @@ public void info(String msg) { */ @Override public void warning(String msg) { + System.out.println("Warning: " + msg); logger.warn(msg); } @@ -49,6 +50,7 @@ public void warning(String msg) { */ @Override public void warning(String msg, Throwable e) { + System.out.println("Warning: " + msg); logger.warn(msg, e); } @@ -59,6 +61,7 @@ public void warning(String msg, Throwable e) { */ @Override public void severe(String msg) { + System.err.println("Error: " + msg); logger.error(msg); } @@ -69,7 +72,7 @@ public void severe(String msg) { */ @Override public void severe(Throwable t) { - t.printStackTrace(); + System.err.println("Error: " + t.getMessage()); logger.error("Error", t); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstChecker.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstChecker.java index b35ee3cdd..0f4b03120 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstChecker.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstChecker.java @@ -9,12 +9,11 @@ import de.peeeq.wurstscript.validation.WurstValidator; import java.util.Collection; -import java.util.List; public class WurstChecker { private final WurstGui gui; - private ErrorHandler errorHandler; + private final ErrorHandler errorHandler; public WurstChecker(WurstGui gui, ErrorHandler errorHandler) { this.gui = gui; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstOperator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstOperator.java index 5b03eb460..89b09c970 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstOperator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstOperator.java @@ -30,8 +30,8 @@ public enum WurstOperator { NOT("not", 1), UNARY_MINUS("-", 1); - private String rep; - private int numArgs; + private final String rep; + private final int numArgs; WurstOperator(String rep, int numArgs) { this.rep = rep; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java index 74be2c4d2..4d665dd73 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/WurstParser.java @@ -23,7 +23,6 @@ import java.io.IOException; import java.io.Reader; -import java.io.StringReader; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrParameterTypes.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrParameterTypes.java index 083de077d..cf97c4bd8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrParameterTypes.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrParameterTypes.java @@ -26,7 +26,7 @@ public static ImmutableList parameterTypes(FunctionDefinition f) { public static @Nullable WurstType receiverType(FuncDef f) { if (f.attrIsDynamicClassMember()) { - NameDef n = (NameDef) f.attrNearestStructureDef(); + NameDef n = f.attrNearestStructureDef(); return n.attrTyp(); } return null; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrPos.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrPos.java index 73c95c7d7..0f1ba231f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrPos.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrPos.java @@ -73,7 +73,7 @@ private static WPos getParentSource(Element e) { private static @Nullable LineOffsets getLineOffsets(WPos p) { LineOffsets lineOffsets; if (p.getLineOffsets() instanceof LineOffsets) { - lineOffsets = (LineOffsets) p.getLineOffsets(); + lineOffsets = p.getLineOffsets(); } else { lineOffsets = new LineOffsets(); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrPossibleFunctionSignatures.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrPossibleFunctionSignatures.java index 74df1dc5f..8b8b9cf5c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrPossibleFunctionSignatures.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrPossibleFunctionSignatures.java @@ -5,8 +5,11 @@ import com.google.common.collect.Lists; import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.names.FuncLink; -import de.peeeq.wurstscript.types.*; +import de.peeeq.wurstscript.types.FunctionSignature; import de.peeeq.wurstscript.types.FunctionSignature.ArgsMatchResult; +import de.peeeq.wurstscript.types.VariableBinding; +import de.peeeq.wurstscript.types.VariablePosition; +import de.peeeq.wurstscript.types.WurstType; import java.util.Collections; import java.util.Comparator; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeDef.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeDef.java index 016c65fb2..6e641c1b3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeDef.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeDef.java @@ -1,11 +1,10 @@ package de.peeeq.wurstscript.attributes; import de.peeeq.wurstscript.ast.*; -import de.peeeq.wurstscript.types.*; +import de.peeeq.wurstscript.types.NativeTypes; +import de.peeeq.wurstscript.types.WurstType; +import de.peeeq.wurstscript.types.WurstTypeClass; import de.peeeq.wurstscript.utils.Utils; - -import java.util.Optional; - import org.eclipse.jdt.annotation.Nullable; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeExprType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeExprType.java index ed83d0820..9f2f4699f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeExprType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrTypeExprType.java @@ -1,7 +1,5 @@ package de.peeeq.wurstscript.attributes; -import java.util.Optional; - import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.types.*; import de.peeeq.wurstscript.utils.Utils; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrWurstDoc.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrWurstDoc.java index 8a3ac6d84..e4e39f4ca 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrWurstDoc.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrWurstDoc.java @@ -7,7 +7,7 @@ public class AttrWurstDoc { public static String getComment(NameDef nameDef) { if (nameDef instanceof HasModifier) { - HasModifier HasModifier = (HasModifier) nameDef; + HasModifier HasModifier = nameDef; return getCommmentHelper(HasModifier); } return ""; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/CompilationUnitInfo.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/CompilationUnitInfo.java index 5b7b988f8..237df14cb 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/CompilationUnitInfo.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/CompilationUnitInfo.java @@ -38,7 +38,7 @@ public void setIndentationMode(IndentationMode indentationMode) { this.indentationMode = indentationMode; } - static public interface IndentationMode { + public interface IndentationMode { static IndentationMode tabs() { return new IndentationMode() { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/DescriptionHtml.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/DescriptionHtml.java index e3ef4a99a..f32154836 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/DescriptionHtml.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/DescriptionHtml.java @@ -344,7 +344,7 @@ public static String description(SwitchStmt switchStmt) { } public static String description(TypeExpr t) { - return "" + htmlType(t.attrTyp()); + return htmlType(t.attrTyp()); } public static String description(TypeExprThis t) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/ErrorHandler.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/ErrorHandler.java index c9e35fa95..785068563 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/ErrorHandler.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/ErrorHandler.java @@ -8,9 +8,9 @@ public class ErrorHandler { - private List errors = new NotNullList<>(); - private List warnings = new NotNullList<>(); - private WurstGui gui; + private final List errors = new NotNullList<>(); + private final List warnings = new NotNullList<>(); + private final WurstGui gui; private boolean unitTestMode = false; public ErrorHandler(WurstGui gui) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/GetByType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/GetByType.java index 927f02f99..fee5397b5 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/GetByType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/GetByType.java @@ -1,6 +1,9 @@ package de.peeeq.wurstscript.attributes; -import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.ClassDef; +import de.peeeq.wurstscript.ast.CompilationUnit; +import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.WPackage; public class GetByType { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/InitOrder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/InitOrder.java index 19b1b59a7..075f523b9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/InitOrder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/InitOrder.java @@ -8,11 +8,7 @@ import de.peeeq.wurstscript.ast.WImports; import de.peeeq.wurstscript.ast.WPackage; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.HashMap; +import java.util.*; public class InitOrder { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/InterfaceInstances.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/InterfaceInstances.java index b3f1f0980..6426b2489 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/InterfaceInstances.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/InterfaceInstances.java @@ -3,7 +3,9 @@ import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableCollection.Builder; import com.google.common.collect.ImmutableList; -import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.ClassDef; +import de.peeeq.wurstscript.ast.InterfaceDef; +import de.peeeq.wurstscript.ast.TypeExpr; import de.peeeq.wurstscript.types.VariableBinding; import de.peeeq.wurstscript.types.WurstTypeClass; import de.peeeq.wurstscript.types.WurstTypeInterface; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/ModifiersHelper.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/ModifiersHelper.java index fca70c921..f78b375ed 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/ModifiersHelper.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/ModifiersHelper.java @@ -62,7 +62,7 @@ static boolean containsType(de.peeeq.wurstscript.ast.Modifiers modifiers, Class< public static boolean isCompiletime(HasModifier e) { if (e instanceof HasModifier) { - return hasAnnotation((HasModifier) e, "compiletime"); + return hasAnnotation(e, "compiletime"); } return false; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/SubClasses.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/SubClasses.java index 2f5794df3..e7df8888a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/SubClasses.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/SubClasses.java @@ -1,6 +1,8 @@ package de.peeeq.wurstscript.attributes; -import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.ClassDef; +import de.peeeq.wurstscript.ast.ConstructorDef; +import de.peeeq.wurstscript.ast.ConstructorDefs; import de.peeeq.wurstscript.types.WurstTypeClass; import org.eclipse.jdt.annotation.Nullable; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/UsedPackages.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/UsedPackages.java index 6995a70db..dc890740d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/UsedPackages.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/UsedPackages.java @@ -3,7 +3,10 @@ import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.NameRef; +import de.peeeq.wurstscript.ast.VarDef; +import de.peeeq.wurstscript.ast.WPackage; import de.peeeq.wurstscript.attributes.names.NameLink; public class UsedPackages { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/Exports.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/Exports.java index a115c072c..9318ec3d6 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/Exports.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/Exports.java @@ -17,7 +17,7 @@ public class Exports { */ public static ImmutableMultimap exportedNameLinks(WPackage p) { Builder result = ImmutableMultimap.builder(); - addExportedNameLinks(result, p, Sets.newLinkedHashSet()); + addExportedNameLinks(result, p, Sets.newLinkedHashSet()); return result.build(); } @@ -49,7 +49,7 @@ private static void addExportedNameLinks(Builder result, WPacka public static ImmutableMultimap exportedTypeNameLinks(WPackage p) { Builder result = ImmutableMultimap.builder(); - addExportedTypeNameLinks(result, p, Sets.newLinkedHashSet()); + addExportedTypeNameLinks(result, p, Sets.newLinkedHashSet()); return result.build(); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/FuncLink.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/FuncLink.java index 49496a550..6d2612c70 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/FuncLink.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/FuncLink.java @@ -87,7 +87,7 @@ public String getParameterDescription() { if (i > 0) { sb.append(", "); } - sb.append(getParameterType(i).toString()); + sb.append(getParameterType(i)); if (i < getParameterNames().size()) { sb.append(" "); sb.append(getParameterName(i)); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/VarLink.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/VarLink.java index b4bed470f..75181fa6a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/VarLink.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/names/VarLink.java @@ -130,7 +130,7 @@ public NameLinkType getType() { @Override public String toString() { - String r = "" + getVisibility() + " "; + String r = getVisibility() + " "; if (getReceiverType() != null) { r += getReceiverType() + "."; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/MaxOneSpacer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/MaxOneSpacer.java index 1808f6e9a..3afce2899 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/MaxOneSpacer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/MaxOneSpacer.java @@ -3,7 +3,7 @@ public class MaxOneSpacer implements Spacer { public void addSpace(StringBuilder sb) { - String lastChar = sb.toString().substring(sb.length() - 1); + String lastChar = sb.substring(sb.length() - 1); if (!lastChar.equals(" ") && !lastChar.equals("(") && !lastChar.equals(".")) { sb.append(" "); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyPrinter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyPrinter.java index d7acf9dd8..56b1fdb7e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyPrinter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyPrinter.java @@ -1,12 +1,12 @@ package de.peeeq.wurstscript.attributes.prettyPrint; -import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.jassAst.*; -import de.peeeq.wurstscript.utils.Utils; import de.peeeq.wurstscript.parser.WPos; import de.peeeq.wurstscript.parser.WPosWithComments; import de.peeeq.wurstscript.parser.WPosWithComments.Comment; +import de.peeeq.wurstscript.utils.Utils; import org.apache.commons.lang.StringUtils; import static de.peeeq.wurstscript.jassprinter.JassPrinter.precedence; @@ -272,7 +272,7 @@ public static void prettyPrint(ExprBinary e, Spacer spacer, StringBuilder sb, in } public static void prettyPrint(ExprBoolVal e, Spacer spacer, StringBuilder sb, int indent) { - sb.append(String.valueOf(e.getValB())); + sb.append(e.getValB()); } public static void prettyPrint(ExprCast e, Spacer spacer, StringBuilder sb, int indent) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyUtils.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyUtils.java index 46e681478..3cb3883bd 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyUtils.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/prettyPrint/PrettyUtils.java @@ -59,7 +59,7 @@ public static void pretty(CompilationUnit cu) { StringBuilder sb = new StringBuilder(); cu.prettyPrint(spacer, sb, 0); - System.out.println(sb.toString()); + System.out.println(sb); } private static void debug(String filename) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/frotty/jassAttributes/JassProgsAttr.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/frotty/jassAttributes/JassProgsAttr.java index e9c2dcec0..9a736b977 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/frotty/jassAttributes/JassProgsAttr.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/frotty/jassAttributes/JassProgsAttr.java @@ -7,11 +7,11 @@ public class JassProgsAttr { - private static Map functionsMap = Maps.newLinkedHashMap(); - private static Map nativesMap = Maps.newLinkedHashMap(); - private static Map globalsMap = Maps.newLinkedHashMap(); - private static Map typeDefsMap = Maps.newLinkedHashMap(); - private static Map extendsMap = Maps.newLinkedHashMap(); + private static final Map functionsMap = Maps.newLinkedHashMap(); + private static final Map nativesMap = Maps.newLinkedHashMap(); + private static final Map globalsMap = Maps.newLinkedHashMap(); + private static final Map typeDefsMap = Maps.newLinkedHashMap(); + private static final Map extendsMap = Maps.newLinkedHashMap(); public static void addFunction(JassProgs jassProgs, JassFunction f) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/gui/WurstGui.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/gui/WurstGui.java index 60053fcd8..209e93715 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/gui/WurstGui.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/gui/WurstGui.java @@ -11,7 +11,7 @@ public abstract class WurstGui { - private List errors = Lists.newArrayList(); + private final List errors = Lists.newArrayList(); public abstract void sendProgress(String whatsRunningNow); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstBool.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstBool.java index 2ef090072..4784504d4 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstBool.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstBool.java @@ -7,7 +7,7 @@ public class ILconstBool extends ILconstAbstract { - private boolean val; + private final boolean val; public final static ILconstBool FALSE = new ILconstBool(false); public final static ILconstBool TRUE = new ILconstBool(true); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstFuncRef.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstFuncRef.java index 889a8fd12..4946b20ae 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstFuncRef.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstFuncRef.java @@ -8,7 +8,7 @@ public class ILconstFuncRef extends ILconstAbstract { private ImFunction func = null; - private String funcName; + private final String funcName; public ILconstFuncRef(String funcName) { this.funcName = funcName; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstInt.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstInt.java index 962e6c3b5..a1e5e6363 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstInt.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstInt.java @@ -7,7 +7,7 @@ public class ILconstInt extends ILconstAbstract implements ILconstNum { - private int val; + private final int val; public ILconstInt(int intVal) { this.val = intVal; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstNull.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstNull.java index 42c82e824..7696c1a2e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstNull.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstNull.java @@ -6,7 +6,7 @@ public class ILconstNull extends ILconstAbstract implements ILconstAddable { - private static ILconstNull instance = new ILconstNull(); + private static final ILconstNull instance = new ILconstNull(); private ILconstNull() { } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstObject.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstObject.java index b4b6e6517..4c63baa28 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstObject.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstObject.java @@ -7,7 +7,8 @@ import de.peeeq.wurstscript.jassIm.ImClassType; import de.peeeq.wurstscript.jassIm.ImVar; -import java.util.*; +import java.util.List; +import java.util.Optional; public class ILconstObject extends ILconstAbstract { private final ImClassType classType; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstReal.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstReal.java index da983b4e1..19c5aa4ec 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstReal.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstReal.java @@ -9,7 +9,7 @@ public class ILconstReal extends ILconstAbstract implements ILconstNum { - private float val; + private final float val; public ILconstReal(String numVal) { this.val = Float.parseFloat(numVal); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstString.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstString.java index bb54126c1..fa63e6d86 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstString.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/ILconstString.java @@ -7,7 +7,7 @@ public class ILconstString extends ILconstAbstract implements ILconstAddable { - private String val; // including the quotes + private final String val; // including the quotes public ILconstString(String strVal) { this.val = strVal; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/IlConstHandle.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/IlConstHandle.java index 18578690c..9910194e0 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/IlConstHandle.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/IlConstHandle.java @@ -18,8 +18,7 @@ public String print() { @Override public boolean isEqualTo(ILconst other) { - if (other == this) return true; - return false; + return other == this; } @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/EvaluateExpr.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/EvaluateExpr.java index f800e8536..eddbbde8c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/EvaluateExpr.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/EvaluateExpr.java @@ -143,9 +143,7 @@ private static boolean isMagicCompiletimeConstant(ImVar var) { PackageOrGlobal nearestPackage = varDef.attrNearestPackage(); if (nearestPackage instanceof WPackage) { WPackage p = (WPackage) nearestPackage; - if (p.getName().equals("MagicFunctions")) { - return true; - } + return p.getName().equals("MagicFunctions"); } } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java index 7cbe6ccd5..a46c0744a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ILInterpreter.java @@ -3,13 +3,11 @@ import de.peeeq.wurstio.jassinterpreter.DebugPrintError; import de.peeeq.wurstio.jassinterpreter.InterpreterException; import de.peeeq.wurstio.jassinterpreter.VarargArray; -import de.peeeq.wurstscript.RunArgs; import de.peeeq.wurstscript.ast.Annotation; import de.peeeq.wurstscript.ast.HasModifier; import de.peeeq.wurstscript.ast.Modifier; import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.intermediatelang.*; -import de.peeeq.wurstscript.intermediatelang.optimizer.SideEffectAnalyzer; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.jassinterpreter.ReturnException; import de.peeeq.wurstscript.jassinterpreter.TestFailException; @@ -27,7 +25,6 @@ import java.util.stream.Collectors; import static de.peeeq.wurstscript.translation.imoptimizer.UselessFunctionCallsRemover.isFunctionPure; -import static de.peeeq.wurstscript.translation.imoptimizer.UselessFunctionCallsRemover.isFunctionWithoutSideEffect; public class ILInterpreter implements AbstractInterpreter { private ImProg prog; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ProgramState.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ProgramState.java index 9b270fe26..b51c55629 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ProgramState.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/ProgramState.java @@ -21,14 +21,14 @@ public class ProgramState extends State { private de.peeeq.wurstscript.jassIm.Element lastStatement; protected WurstGui gui; private PrintStream outStream = System.err; - private List nativeProviders = Lists.newArrayList(); + private final List nativeProviders = Lists.newArrayList(); private ImProg prog; private int objectIdCounter; - private HashMap indexToObject = new HashMap<>(); - private Deque stackFrames = new ArrayDeque<>(); - private Deque lastStatements = new ArrayDeque<>(); - private boolean isCompiletime; - private HashMap handleMap = new HashMap<>(); + private final HashMap indexToObject = new HashMap<>(); + private final Deque stackFrames = new ArrayDeque<>(); + private final Deque lastStatements = new ArrayDeque<>(); + private final boolean isCompiletime; + private final HashMap handleMap = new HashMap<>(); public ProgramState(WurstGui gui, ImProg prog, boolean isCompiletime) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/RunStatement.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/RunStatement.java index e181bd714..b418fc128 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/RunStatement.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/RunStatement.java @@ -2,7 +2,9 @@ import de.peeeq.wurstio.jassinterpreter.InterpreterException; import de.peeeq.wurstio.jassinterpreter.VarargArray; -import de.peeeq.wurstscript.intermediatelang.*; +import de.peeeq.wurstscript.intermediatelang.ILaddress; +import de.peeeq.wurstscript.intermediatelang.ILconst; +import de.peeeq.wurstscript.intermediatelang.ILconstBool; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.jassinterpreter.ExitwhenException; import de.peeeq.wurstscript.jassinterpreter.ReturnException; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/State.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/State.java index 4c3f2a080..d45058a1a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/State.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/State.java @@ -16,7 +16,7 @@ public abstract class State { - private Map values = Maps.newLinkedHashMap(); + private final Map values = Maps.newLinkedHashMap(); protected Map arrayValues = Maps.newLinkedHashMap(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/TimerMockHandler.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/TimerMockHandler.java index 50db6e41b..8e3619af4 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/TimerMockHandler.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/TimerMockHandler.java @@ -10,7 +10,7 @@ */ public class TimerMockHandler { private float virtualTime = 0; - private PriorityQueue nextRunnable = new PriorityQueue<>(Comparator.comparing(r -> r.time)); + private final PriorityQueue nextRunnable = new PriorityQueue<>(Comparator.comparing(r -> r.time)); public void cancelTask(RunTask runTask) { nextRunnable.remove(runTask); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/VariableType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/VariableType.java index 3a31cc6d7..8c2f5cb1f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/VariableType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/interpreter/VariableType.java @@ -6,7 +6,7 @@ public class VariableType { public static final VariableType REAL = new VariableType<>(1); public static final VariableType UNREAL = new VariableType<>(2); public static final VariableType STRING = new VariableType<>(3); - private int encoding; + private final int encoding; private VariableType(int encoding) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ControlFlowGraph.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ControlFlowGraph.java index fb1435fe3..527969069 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ControlFlowGraph.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/ControlFlowGraph.java @@ -47,11 +47,11 @@ public Node setName(String name) { } - private Map nodes = new HashMap<>(); - private Map ifEnd = new HashMap<>(); - private Map loopEnd = new HashMap<>(); - private Map varargLoopEnd = new HashMap<>(); - private List nodeList = new ArrayList<>(); + private final Map nodes = new HashMap<>(); + private final Map ifEnd = new HashMap<>(); + private final Map loopEnd = new HashMap<>(); + private final Map varargLoopEnd = new HashMap<>(); + private final List nodeList = new ArrayList<>(); public ControlFlowGraph(ImStmts stmts) { buildCfg(stmts); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java index 2edb80767..4e099a74b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/LocalMerger.java @@ -7,7 +7,6 @@ import de.peeeq.wurstscript.translation.imtranslation.ImHelper; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; import de.peeeq.wurstscript.types.TypesHelper; -import de.peeeq.wurstscript.utils.Utils; import io.vavr.collection.HashSet; import io.vavr.collection.Set; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/SimpleRewrites.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/SimpleRewrites.java index eee457ee3..722a9e037 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/SimpleRewrites.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/SimpleRewrites.java @@ -17,7 +17,7 @@ public class SimpleRewrites implements OptimizerPass { private SideEffectAnalyzer sideEffectAnalysis; private int totalRewrites = 0; - private boolean showRewrites = false; + private final boolean showRewrites = false; @Override public int optimize(ImTranslator trans) { @@ -267,7 +267,7 @@ private void optimizeOpCall(ImOperatorCall opc) { if (wasViable) { totalRewrites++; if (showRewrites) { - WLogger.info("opcall rewrite: " + opc.toString()); + WLogger.info("opcall rewrite: " + opc); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java index 7d0ddfcfa..7f52ae5cf 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/TempMerger.java @@ -1,7 +1,7 @@ package de.peeeq.wurstscript.intermediatelang.optimizer; import com.google.common.base.Preconditions; -import com.google.common.collect.*; +import com.google.common.collect.Lists; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.translation.imoptimizer.OptimizerPass; import de.peeeq.wurstscript.translation.imtranslation.AssertProperty; @@ -14,8 +14,11 @@ import de.peeeq.wurstscript.utils.Utils; import org.eclipse.jdt.annotation.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashSet; import java.util.Map.Entry; +import java.util.Set; public class TempMerger implements OptimizerPass { private int totalMerged = 0; @@ -264,7 +267,7 @@ public void apply() { } } - ImExpr newE = (ImExpr) e.copy(); + ImExpr newE = e.copy(); read.replaceBy(newE); // update attrReads: getAssignedVar().attrReads().remove(read); @@ -399,11 +402,8 @@ private boolean isMergable(ImVar left, ImExpr e) { // variable read exactly once can be replaced return true; } - if (isSimplePureExpr(e)) { - // simple and pure expressions can always be merged - return true; - } - return false; + // simple and pure expressions can always be merged + return isSimplePureExpr(e); } /** @@ -421,7 +421,7 @@ private void invalidateVar(ImVar left) { @Override public String toString() { ArrayList keys = Lists.newArrayList(currentValues.keySet()); - keys.sort(Utils.compareByNameIm()); + keys.sort(Utils.compareByNameIm()); StringBuilder sb = new StringBuilder(); for (ImVar v : keys) { ImSet s = currentValues.get(v).imSet; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java index b76bf57d0..dd2dc7c8b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/AntlrJassParseTreeTransformer.java @@ -18,9 +18,9 @@ public class AntlrJassParseTreeTransformer { - private String file; - private ErrorHandler cuErrorHandler; - private LineOffsets lineOffsets; + private final String file; + private final ErrorHandler cuErrorHandler; + private final LineOffsets lineOffsets; public AntlrJassParseTreeTransformer(String file, ErrorHandler cuErrorHandler, LineOffsets lineOffsets) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/ExtendedJassLexer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/ExtendedJassLexer.java index 60cd654a5..d9f922684 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/ExtendedJassLexer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jass/ExtendedJassLexer.java @@ -14,13 +14,13 @@ public class ExtendedJassLexer implements TokenSource { private final JassLexer orig; - private Queue nextTokens = new LinkedList<>(); + private final Queue nextTokens = new LinkedList<>(); private State state = State.INIT; private @Nullable Token eof = null; private @Nullable Token firstNewline; - private LineOffsets lineOffsets = new LineOffsets(); + private final LineOffsets lineOffsets = new LineOffsets(); private final boolean debug = false; - private Pair sourcePair; + private final Pair sourcePair; enum State { INIT, NEWLINES, BEGIN_LINE diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassinterpreter/ExitwhenException.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassinterpreter/ExitwhenException.java index 7ff58bbe9..0e5c5e104 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassinterpreter/ExitwhenException.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassinterpreter/ExitwhenException.java @@ -3,7 +3,7 @@ public class ExitwhenException extends Error { private static final long serialVersionUID = -7104108904090494021L; - private static ExitwhenException instance = new ExitwhenException(); + private static final ExitwhenException instance = new ExitwhenException(); private ExitwhenException() { } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassinterpreter/TestFailException.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassinterpreter/TestFailException.java index e0807481c..dc2c583a1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassinterpreter/TestFailException.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassinterpreter/TestFailException.java @@ -3,7 +3,7 @@ public class TestFailException extends Error { - private String test; + private final String test; public TestFailException(String name) { test = name; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassprinter/JassPrinter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassprinter/JassPrinter.java index c620ce1eb..31b6e59f6 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassprinter/JassPrinter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jassprinter/JassPrinter.java @@ -15,8 +15,8 @@ public class JassPrinter { public static final String WURST_COMMENT_RAW = "// this script was compiled with wurst "; public static final String WURST_COMMENT = WURST_COMMENT_RAW + AboutDialog.version; - private boolean withSpace; - private JassProg prog; + private final boolean withSpace; + private final JassProg prog; public JassPrinter(boolean withSpace, JassProg prog) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/AntlrJurstParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/AntlrJurstParseTreeTransformer.java index 5121858fa..2a2599de3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/AntlrJurstParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/AntlrJurstParseTreeTransformer.java @@ -20,9 +20,9 @@ public class AntlrJurstParseTreeTransformer { - private String file; - private ErrorHandler cuErrorHandler; - private LineOffsets lineOffsets; + private final String file; + private final ErrorHandler cuErrorHandler; + private final LineOffsets lineOffsets; private boolean isJassCode = true; public AntlrJurstParseTreeTransformer(String file, @@ -663,16 +663,16 @@ private WStatement transformStmtSet(StmtSetContext s) { Expr right = transformExpr(s.right); WurstOperator op = getAssignOp(s.assignOp); if (op != null) { - right = Ast.ExprBinary(src, (Expr) updatedExpr.copy(), op, + right = Ast.ExprBinary(src, updatedExpr.copy(), op, right); } return Ast.StmtSet(src, updatedExpr, right); } else if (s.incOp != null) { - Expr right = Ast.ExprBinary(src, (Expr) updatedExpr.copy(), + Expr right = Ast.ExprBinary(src, updatedExpr.copy(), WurstOperator.PLUS, Ast.ExprIntVal(src, "1")); return Ast.StmtSet(src, updatedExpr, right); } else if (s.decOp != null) { - Expr right = Ast.ExprBinary(src, (Expr) updatedExpr.copy(), + Expr right = Ast.ExprBinary(src, updatedExpr.copy(), WurstOperator.MINUS, Ast.ExprIntVal(src, "1")); return Ast.StmtSet(src, updatedExpr, right); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/ExtendedJurstLexer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/ExtendedJurstLexer.java index ba1333392..747489e6d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/ExtendedJurstLexer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/jurst/ExtendedJurstLexer.java @@ -14,14 +14,14 @@ public class ExtendedJurstLexer implements TokenSource { private final JurstLexer orig; - private Queue nextTokens = new LinkedList<>(); + private final Queue nextTokens = new LinkedList<>(); private State state = State.INIT; private @Nullable Token eof = null; private @Nullable Token firstNewline; - private LineOffsets lineOffsets = new LineOffsets(); + private final LineOffsets lineOffsets = new LineOffsets(); public StringBuilder debugSb = new StringBuilder(); private final boolean debug = false; - private Pair sourcePair; + private final Pair sourcePair; private boolean isWurst = false; @@ -205,7 +205,7 @@ private void state(State s) { private boolean isWrapChar(int type) { switch (type) { -// case JurstParser.PAREN_LEFT: +// case JurstParser.PAREN_LEFT: // case JurstParser.BRACKET_LEFT: case JurstParser.COMMA: case JurstParser.PLUS: diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPosWithComments.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPosWithComments.java index a181cd03f..609fe723e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPosWithComments.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/WPosWithComments.java @@ -47,9 +47,9 @@ public List getCommentsAfter() { } public static class Comment { - private WPos pos; - private String content; - private boolean singleLine; + private final WPos pos; + private final String content; + private final boolean singleLine; public Comment(WPos pos, String content, boolean singleLine) { this.pos = pos; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java index b8514dfd4..a60dd7837 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/AntlrWurstParseTreeTransformer.java @@ -1,6 +1,5 @@ package de.peeeq.wurstscript.parser.antlr; -import com.google.common.collect.ImmutableList; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.WurstOperator; import de.peeeq.wurstscript.antlr.WurstLexer; @@ -12,9 +11,9 @@ import de.peeeq.wurstscript.attributes.ErrorHandler; import de.peeeq.wurstscript.jass.AntlrJassParseTreeTransformer; import de.peeeq.wurstscript.parser.WPos; -import de.peeeq.wurstscript.types.WurstTypeInt; import de.peeeq.wurstscript.parser.WPosWithComments; import de.peeeq.wurstscript.parser.WPosWithComments.Comment; +import de.peeeq.wurstscript.types.WurstTypeInt; import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; import org.antlr.v4.runtime.ParserRuleContext; @@ -24,7 +23,10 @@ import org.eclipse.jdt.annotation.Nullable; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Deque; +import java.util.List; import java.util.stream.Collectors; @SuppressWarnings("Duplicates") diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/ExtendedWurstLexer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/ExtendedWurstLexer.java index 074686768..3d64b9c7f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/ExtendedWurstLexer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/parser/antlr/ExtendedWurstLexer.java @@ -16,16 +16,16 @@ public class ExtendedWurstLexer implements TokenSource { private final WurstLexer orig; - private Queue nextTokens = new LinkedList<>(); + private final Queue nextTokens = new LinkedList<>(); private State state = State.INIT; - private Stack indentationLevels = new Stack<>(); + private final Stack indentationLevels = new Stack<>(); private int spacesPerIndent = -1; private @Nullable Token eof = null; private Token firstNewline; private int numberOfTabs; - private LineOffsets lineOffsets = new LineOffsets(); + private final LineOffsets lineOffsets = new LineOffsets(); private final boolean debug = false; - private Pair sourcePair; + private final Pair sourcePair; private boolean isWurst = false; private boolean lastCharWasWrap = false; private @Nullable Token lastToken = null; @@ -34,7 +34,7 @@ public class ExtendedWurstLexer implements TokenSource { private CompileError tabWarning = null; // counts the number of open parentheses private int parenthesesLevel = 0; - private Deque commentTokens = new ArrayDeque<>(); + private final Deque commentTokens = new ArrayDeque<>(); public Deque getCommentTokens() { return commentTokens; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImCompressor.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImCompressor.java index bcbc2d3e0..8f9c0f2f4 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImCompressor.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImCompressor.java @@ -9,9 +9,9 @@ public class ImCompressor { - private ImTranslator trans; - private ImProg prog; - private NameGenerator ng; + private final ImTranslator trans; + private final ImProg prog; + private final NameGenerator ng; public ImCompressor(ImTranslator translator) { this.trans = translator; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImInliner.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImInliner.java index 18e8276ac..d3063d589 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImInliner.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/ImInliner.java @@ -19,13 +19,13 @@ public class ImInliner { private static final double THRESHOLD_MODIFIER_CONSTANT_ARG = 2; private static final Set dontInline = Sets.newLinkedHashSet(); - private ImTranslator translator; - private ImProg prog; - private Set inlinableFunctions = Sets.newLinkedHashSet(); - private Map callCounts = Maps.newLinkedHashMap(); - private Map funcSizes = Maps.newLinkedHashMap(); - private Set done = Sets.newLinkedHashSet(); - private double inlineTreshold = 50; + private final ImTranslator translator; + private final ImProg prog; + private final Set inlinableFunctions = Sets.newLinkedHashSet(); + private final Map callCounts = Maps.newLinkedHashMap(); + private final Map funcSizes = Maps.newLinkedHashMap(); + private final Set done = Sets.newLinkedHashSet(); + private final double inlineTreshold = 50; static { dontInline.add("SetPlayerAllianceStateAllyBJ"); @@ -125,7 +125,7 @@ private void inlineCall(ImFunction f, Element parent, int parentI, ImFunctionCal } // add body and replace params with tempvars for (int i = 0; i < called.getBody().size(); i++) { - ImStmt s = (ImStmt) called.getBody().get(i).copy(); + ImStmt s = called.getBody().get(i).copy(); ImHelper.replaceVar(s, varSubtitutions); s.accept(new ImStmt.DefaultVisitor() { @@ -309,11 +309,7 @@ private boolean maxOneReturn(ImStmts body) { } if (body.get(body.size() - 1) instanceof ImReturn) { return true; - } else if (hasReturn(body.get(body.size() - 1))) { - return false; - } else { - return true; - } + } else return !hasReturn(body.get(body.size() - 1)); } private boolean hasReturn(final ImStmt s) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/NameGenerator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/NameGenerator.java index 0ad8f7665..1d74674d5 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/NameGenerator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/NameGenerator.java @@ -19,7 +19,7 @@ public class NameGenerator { private final String charmap = charmapFirst + "3142567890"; private final String charmapMid = charmap + "_"; - private String TEcharmap = "wurstqeiopadfghjklyxcvbnm"; + private final String TEcharmap = "wurstqeiopadfghjklyxcvbnm"; /** * A counter */ @@ -28,10 +28,10 @@ public class NameGenerator { /** * length of charmap */ - private int lengthFirst; - private int length; - private int lengthMid; - private int TElength = 25; + private final int lengthFirst; + private final int length; + private final int lengthMid; + private final int TElength = 25; /** diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/NullSetter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/NullSetter.java index 865e1a91c..2cca699ce 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/NullSetter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/NullSetter.java @@ -15,11 +15,11 @@ public class NullSetter { - private ImProg prog; - private ImTranslator translator; + private final ImProg prog; + private final ImTranslator translator; // the types which are not set to null - private Set primitiveTypes = Sets.newHashSet("boolean", "integer", "string", "code", "real"); + private final Set primitiveTypes = Sets.newHashSet("boolean", "integer", "string", "code", "real"); public NullSetter(ImTranslator translator) { this.translator = translator; @@ -153,7 +153,7 @@ private void addNullSetStmts(ImStmts parent, int parentIndex, List nullSetStmts) { List nullSetStmtsCopy = Lists.newArrayListWithCapacity(nullSetStmts.size()); for (ImStmt s : nullSetStmts) { - nullSetStmtsCopy.add((ImStmt) s.copy()); + nullSetStmtsCopy.add(s.copy()); } parent.addAll(parentIndex, nullSetStmtsCopy); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/Replacer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/Replacer.java index 6d2b9bdf9..870327911 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/Replacer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/Replacer.java @@ -2,12 +2,6 @@ import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.jassIm.Element; -import de.peeeq.wurstscript.jassIm.ImExpr; -import de.peeeq.wurstscript.jassIm.ImStmt; - -import javax.annotation.Nullable; -import java.util.HashMap; -import java.util.Map; // optimization for replaceBy // remembers last position of elements with the assumption that the next element diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/UselessFunctionCallsRemover.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/UselessFunctionCallsRemover.java index 62f795b60..1e759f3cb 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/UselessFunctionCallsRemover.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imoptimizer/UselessFunctionCallsRemover.java @@ -82,9 +82,7 @@ private boolean isDivisionByZero(ImExpr e) { ImExpr dividend = oc.getArguments().get(1); if (dividend instanceof ImIntVal) { ImIntVal v = (ImIntVal) dividend; - if (v.getValI() == 0) { - return true; - } + return v.getValI() == 0; } } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ExprTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ExprTranslation.java index 6545d6694..c968d89f3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ExprTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ExprTranslation.java @@ -1,13 +1,13 @@ package de.peeeq.wurstscript.translation.imtojass; -import com.google.common.base.Preconditions; import de.peeeq.wurstscript.WurstOperator; import de.peeeq.wurstscript.attributes.CompileError; -import de.peeeq.wurstscript.jassAst.*; +import de.peeeq.wurstscript.jassAst.JassExprNull; import de.peeeq.wurstscript.jassAst.JassExprVarAccess; import de.peeeq.wurstscript.jassAst.JassExprVarArrayAccess; import de.peeeq.wurstscript.jassAst.JassExprlist; +import de.peeeq.wurstscript.jassAst.*; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; import de.peeeq.wurstscript.types.TypesHelper; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImToJassTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImToJassTranslator.java index 6d9869542..c6c1a858a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImToJassTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImToJassTranslator.java @@ -2,13 +2,14 @@ import com.google.common.collect.*; import de.peeeq.wurstscript.attributes.CompileError; -import de.peeeq.wurstscript.jassAst.*; import de.peeeq.wurstscript.jassAst.JassFunction; import de.peeeq.wurstscript.jassAst.JassFunctions; +import de.peeeq.wurstscript.jassAst.JassInitializedVar; import de.peeeq.wurstscript.jassAst.JassNative; import de.peeeq.wurstscript.jassAst.JassProg; import de.peeeq.wurstscript.jassAst.JassSimpleVar; import de.peeeq.wurstscript.jassAst.JassVars; +import de.peeeq.wurstscript.jassAst.*; import de.peeeq.wurstscript.jassIm.Element; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.parser.WPos; @@ -26,15 +27,15 @@ public class ImToJassTranslator { - private ImProg imProg; - private Multimap calledFunctions; - private ImFunction mainFunc; - private ImFunction confFunction; + private final ImProg imProg; + private final Multimap calledFunctions; + private final ImFunction mainFunc; + private final ImFunction confFunction; private @Nullable JassProg prog; - private Stack translatingFunctions = new Stack<>(); - private Set translatedFunctions = Sets.newLinkedHashSet(); - private Set usedNames = Sets.newLinkedHashSet(); - private Multimap usedLocalNames = HashMultimap.create(); + private final Stack translatingFunctions = new Stack<>(); + private final Set translatedFunctions = Sets.newLinkedHashSet(); + private final Set usedNames = Sets.newLinkedHashSet(); + private final Multimap usedLocalNames = HashMultimap.create(); public ImToJassTranslator(ImProg imProg, Multimap calledFunctions, ImFunction mainFunc, ImFunction confFunction) { @@ -189,8 +190,8 @@ private String getUniqueLocalName(ImFunction imFunction, String name) { } - private Map jassVars = Maps.newLinkedHashMap(); - private Set globalImVars = Sets.newLinkedHashSet(); + private final Map jassVars = Maps.newLinkedHashMap(); + private final Set globalImVars = Sets.newLinkedHashSet(); JassVar getJassVarFor(ImVar v) { JassVar result = jassVars.get(v); @@ -263,7 +264,7 @@ private boolean isGlobal(ImVar v) { } - private Map jassFuncs = Maps.newLinkedHashMap(); + private final Map jassFuncs = Maps.newLinkedHashMap(); public JassFunctionOrNative getJassFuncFor(ImFunction func) { JassFunctionOrNative f = jassFuncs.get(func); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/StatementTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/StatementTranslation.java index 300c62f0e..d9dd0e6e2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/StatementTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/StatementTranslation.java @@ -1,12 +1,13 @@ package de.peeeq.wurstscript.translation.imtojass; -import de.peeeq.wurstscript.jassAst.*; import de.peeeq.wurstscript.jassAst.JassExprFunctionCall; import de.peeeq.wurstscript.jassAst.JassFunction; import de.peeeq.wurstscript.jassAst.JassStatements; +import de.peeeq.wurstscript.jassAst.*; import de.peeeq.wurstscript.jassIm.*; import java.util.List; + import static de.peeeq.wurstscript.jassAst.JassAst.*; public class StatementTranslation { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ClassTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ClassTranslator.java index 716350629..51a37e5b1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ClassTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ClassTranslator.java @@ -1,17 +1,19 @@ package de.peeeq.wurstscript.translation.imtranslation; -import com.google.common.collect.Maps; -import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.jassIm.Element.DefaultVisitor; import de.peeeq.wurstscript.jassIm.ImClass; -import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.jassIm.ImClassType; import de.peeeq.wurstscript.jassIm.ImExprs; import de.peeeq.wurstscript.jassIm.ImFunction; import de.peeeq.wurstscript.jassIm.ImMethod; import de.peeeq.wurstscript.jassIm.ImProg; +import de.peeeq.wurstscript.jassIm.ImTypeArguments; +import de.peeeq.wurstscript.jassIm.ImTypeVar; import de.peeeq.wurstscript.jassIm.ImVar; import de.peeeq.wurstscript.jassIm.ImVarAccess; +import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.types.*; import de.peeeq.wurstscript.utils.Pair; @@ -26,12 +28,12 @@ public class ClassTranslator { - private ClassDef classDef; - private ImTranslator translator; + private final ClassDef classDef; + private final ImTranslator translator; // /** list of statements to initialize a new object **/ final private List> dynamicInits; private ImClass imClass; - private ImProg prog; + private final ImProg prog; private ImFunction classInitFunc; public ClassTranslator(ClassDef classDef, ImTranslator translator) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ClosureTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ClosureTranslator.java index 1ee74a06e..a91ba62f9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ClosureTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ClosureTranslator.java @@ -2,8 +2,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.attributes.names.NameLink; import de.peeeq.wurstscript.jassIm.*; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java index ac8fc1f4f..4799f9b2b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/CyclicFunctionRemover.java @@ -19,10 +19,10 @@ public class CyclicFunctionRemover { - private ImProg prog; - private TimeTaker timeTaker; - private ImTranslator tr; - private ImFuncGraph graph; + private final ImProg prog; + private final TimeTaker timeTaker; + private final ImTranslator tr; + private final ImFuncGraph graph; public CyclicFunctionRemover(ImTranslator tr, ImProg prog, TimeTaker timeTaker) { this.tr = tr; @@ -153,7 +153,7 @@ private void replaceImFuncRef(Set funcSet, Map ImFunction f = fr.getFunc(); if (funcSet.contains(f)) { - ImFunction proxyFunc = JassIm.ImFunction(f.attrTrace(), f.getName() + "_proxy", JassIm.ImTypeVars(), f.getParameters().copy(), (ImType) f.getReturnType().copy(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); + ImFunction proxyFunc = JassIm.ImFunction(f.attrTrace(), f.getName() + "_proxy", JassIm.ImTypeVars(), f.getParameters().copy(), f.getReturnType().copy(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); prog.getFunctions().add(proxyFunc); ImExprs arguments = JassIm.ImExprs(); @@ -235,7 +235,7 @@ private void replaceReturn(Element e, ImType returnType) { } - private Map tempReturnVars = Maps.newLinkedHashMap(); + private final Map tempReturnVars = Maps.newLinkedHashMap(); private ImVar getTempReturnVar(ImType t) { String typeName = t.translateType(); @@ -268,7 +268,7 @@ private void calculateNewParameters(List funcs, } } // otherwise, we have to create a new var: - ImVar newVar = JassIm.ImVar(v.getTrace(), (ImType) v.getType().copy(), v.getName(), false); + ImVar newVar = JassIm.ImVar(v.getTrace(), v.getType().copy(), v.getName(), false); oldToNewVar.put(v, newVar); newParameters.add(newVar); pos = newParameters.size() + 1; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateCallFunctionsWithAnnotation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateCallFunctionsWithAnnotation.java index 39ad2b838..62d64ee9a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateCallFunctionsWithAnnotation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateCallFunctionsWithAnnotation.java @@ -39,7 +39,7 @@ private static void rewriteSpecialCall(ImFunctionCall fc, private static Multimap collectAnnotatedFunctions( ImProg prog, Set calledAnnotations) { - Multimap res = LinkedHashMultimap.create(); + Multimap res = LinkedHashMultimap.create(); for (ImFunction f : prog.getFunctions()) { for (String a : calledAnnotations) { if (f.hasFlag(new FunctionFlagAnnotation(a))) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateClasses.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateClasses.java index 7bb85387e..41134473c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateClasses.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateClasses.java @@ -4,8 +4,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import de.peeeq.wurstscript.WurstOperator; -import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.translation.imtojass.TypeRewriteMatcher; @@ -34,8 +34,8 @@ public class EliminateClasses { private final Map fieldToArray = Maps.newLinkedHashMap(); private final Map dispatchFuncs = Maps.newLinkedHashMap(); private final RecycleCodeGenerator recycleCodeGen = new RecycleCodeGeneratorQueue(); - private boolean checkedDispatch; - private Set specialNatives = ImmutableSet.of( + private final boolean checkedDispatch; + private final Set specialNatives = ImmutableSet.of( TYPE_ID_TO_TYPE_NAME, MAX_TYPE_ID, INSTANCE_COUNT, @@ -262,7 +262,7 @@ public void createDispatchFunc(ImClass c, ImMethod m) { ClassManagementVars mVars = translator.getClassManagementVarsFor(c); ImVar thisVar = df.getParameters().get(0); - ImExpr typeId = JassIm.ImVarArrayAccess(m.getTrace(), mVars.typeId, JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(thisVar))); + ImExpr typeId = JassIm.ImVarArrayAccess(m.getTrace(), mVars.typeId, JassIm.ImExprs(JassIm.ImVarAccess(thisVar))); // ckeck if destroyed or nullpointer if (checkedDispatch) { @@ -273,7 +273,7 @@ public void createDispatchFunc(ImClass c, ImMethod m) { // if typeId[this] == 0 JassIm.ImIf( df.getTrace(), JassIm.ImOperatorCall(WurstOperator.EQ, JassIm.ImExprs( - (ImExpr) typeId.copy(), JassIm.ImIntVal(0) + typeId.copy(), JassIm.ImIntVal(0) )), // then // if this == 0 @@ -333,7 +333,7 @@ private void createDispatch(ImFunction df, ImStmts stmts, ImVar resultVar, ImExpr condition = JassIm .ImOperatorCall( WurstOperator.LESS_EQ, - JassIm.ImExprs((ImExpr) typeId.copy(), + JassIm.ImExprs(typeId.copy(), JassIm.ImIntVal(ranges.get(mid).getA().end))); stmts.add(JassIm.ImIf(df.getTrace(), condition, thenBlock, elseBlock)); @@ -571,11 +571,11 @@ private ImExpr or(ImExpr a, ImExpr b) { private ImExpr inRange(ImExpr obj, IntRange range) { if (range.start == range.end) { - return JassIm.ImOperatorCall(WurstOperator.EQ, JassIm.ImExprs((ImExpr) obj.copy(), JassIm.ImIntVal(range.start))); + return JassIm.ImOperatorCall(WurstOperator.EQ, JassIm.ImExprs(obj.copy(), JassIm.ImIntVal(range.start))); } else { return JassIm.ImOperatorCall(WurstOperator.AND, JassIm.ImExprs( - JassIm.ImOperatorCall(WurstOperator.GREATER_EQ, JassIm.ImExprs((ImExpr) obj.copy(), JassIm.ImIntVal(range.start))), - JassIm.ImOperatorCall(WurstOperator.LESS_EQ, JassIm.ImExprs((ImExpr) obj.copy(), JassIm.ImIntVal(range.end))))); + JassIm.ImOperatorCall(WurstOperator.GREATER_EQ, JassIm.ImExprs(obj.copy(), JassIm.ImIntVal(range.start))), + JassIm.ImOperatorCall(WurstOperator.LESS_EQ, JassIm.ImExprs(obj.copy(), JassIm.ImIntVal(range.end))))); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateGenerics.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateGenerics.java index 31e93ef0a..264967109 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateGenerics.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateGenerics.java @@ -22,11 +22,11 @@ public class EliminateGenerics { private final ImTranslator translator; private final ImProg prog; // TODO only use one queue here with the different cases (add: generic class type, member access) - private Deque genericsUses = new ArrayDeque<>(); - private Table specializedFunctions = HashBasedTable.create(); - private Table specializedMethods = HashBasedTable.create(); - private Table specializedClasses = HashBasedTable.create(); - private Multimap> onSpecializedClassTriggers = HashMultimap.create(); + private final Deque genericsUses = new ArrayDeque<>(); + private final Table specializedFunctions = HashBasedTable.create(); + private final Table specializedMethods = HashBasedTable.create(); + private final Table specializedClasses = HashBasedTable.create(); + private final Multimap> onSpecializedClassTriggers = HashMultimap.create(); public EliminateGenerics(ImTranslator tr, ImProg prog) { translator = tr; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java index 9cdaafbbb..9824585ef 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateLocalTypes.java @@ -5,7 +5,7 @@ import de.peeeq.wurstscript.types.TypesHelper; public class EliminateLocalTypes { - private static ImType localSimpleType = JassIm.ImSimpleType("localSimpleType"); + private static final ImType localSimpleType = JassIm.ImSimpleType("localSimpleType"); public static void eliminateLocalTypesProg(ImProg imProg, ImTranslator translator) { // While local types are still there, perform transformation, such that the lua translator does not need to know variable types @@ -28,7 +28,7 @@ private static void eliminateLocalTypesFunc(ImFunction f, final ImTranslator tra } } } - + private static void transformProgram(ImProg imProg, ImTranslator translator) { imProg.accept(new Element.DefaultVisitor() { @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateTuples.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateTuples.java index bd9eec823..6fe754879 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateTuples.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/EliminateTuples.java @@ -8,7 +8,6 @@ import de.peeeq.wurstscript.translation.imoptimizer.Replacer; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator.VarsForTupleResult; import de.peeeq.wurstscript.types.TypesHelper; -import de.peeeq.wurstscript.utils.Utils; import java.util.*; import java.util.stream.Collectors; @@ -222,7 +221,7 @@ public void visit(ImFunctionCall fc) { ImVar firstVar = returnVars.allValuesStream().findFirst().get(); - ImExpr newFc = returnVars.map( + ImExpr newFc = returnVars.map( parts -> JassIm.ImTupleExpr( parts.collect(Collectors.toCollection(JassIm::ImExprs))), var -> var == firstVar diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java index 04cf5bf15..873f14b19 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java @@ -2,18 +2,23 @@ import com.google.common.collect.Lists; import de.peeeq.wurstscript.WurstOperator; -import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.attributes.names.NameLink; import de.peeeq.wurstscript.attributes.names.OtherLink; import de.peeeq.wurstscript.jassIm.ImClass; -import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.jassIm.ImClassType; import de.peeeq.wurstscript.jassIm.ImExprs; import de.peeeq.wurstscript.jassIm.ImFunction; import de.peeeq.wurstscript.jassIm.ImMethod; import de.peeeq.wurstscript.jassIm.ImStmts; +import de.peeeq.wurstscript.jassIm.ImTypeArguments; +import de.peeeq.wurstscript.jassIm.ImTypeClassFunc; +import de.peeeq.wurstscript.jassIm.ImTypeVar; +import de.peeeq.wurstscript.jassIm.ImTypeVars; import de.peeeq.wurstscript.jassIm.ImVar; +import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.types.*; import de.peeeq.wurstscript.utils.Utils; import io.vavr.control.Either; @@ -23,7 +28,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import static de.peeeq.wurstscript.jassIm.JassIm.*; @@ -322,7 +326,7 @@ private static ImExpr translateTupleSelection(ImTranslator t, ImFunction f, Expr WParameters tupleParams = (WParameters) tupleParam.getParent(); int tupleIndex = tupleParams.indexOf(tupleParam); if (left instanceof ImLExpr) { - return ImTupleSelection((ImLExpr) left, tupleIndex); + return ImTupleSelection(left, tupleIndex); } else { // if tupleExpr is not an l-value (e.g. foo().x) // store result in intermediate variable first: @@ -585,10 +589,7 @@ private static boolean isCalledOnDynamicRef(FunctionCall e) { if (e instanceof ExprMemberMethod) { ExprMemberMethod mm = (ExprMemberMethod) e; return mm.getLeft().attrTyp().allowsDynamicDispatch(); - } else if (e.attrIsDynamicContext()) { - return true; - } - return false; + } else return e.attrIsDynamicContext(); } private static ImExprs translateExprs(List arguments, ImTranslator t, ImFunction f) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/Flatten.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/Flatten.java index 9ae415b57..b104574fa 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/Flatten.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/Flatten.java @@ -4,15 +4,20 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import de.peeeq.wurstscript.WurstOperator; -import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.jassIm.ImAlloc; +import de.peeeq.wurstscript.jassIm.ImCast; import de.peeeq.wurstscript.jassIm.ImCompiletimeExpr; +import de.peeeq.wurstscript.jassIm.ImDealloc; import de.peeeq.wurstscript.jassIm.ImExitwhen; +import de.peeeq.wurstscript.jassIm.ImExprs; import de.peeeq.wurstscript.jassIm.ImFunction; import de.peeeq.wurstscript.jassIm.ImFunctionCall; import de.peeeq.wurstscript.jassIm.ImGetStackTrace; import de.peeeq.wurstscript.jassIm.ImIf; +import de.peeeq.wurstscript.jassIm.ImInstanceof; import de.peeeq.wurstscript.jassIm.ImLoop; import de.peeeq.wurstscript.jassIm.ImMemberAccess; +import de.peeeq.wurstscript.jassIm.ImMethodCall; import de.peeeq.wurstscript.jassIm.ImOperatorCall; import de.peeeq.wurstscript.jassIm.ImProg; import de.peeeq.wurstscript.jassIm.ImReturn; @@ -21,10 +26,14 @@ import de.peeeq.wurstscript.jassIm.ImStmts; import de.peeeq.wurstscript.jassIm.ImTupleExpr; import de.peeeq.wurstscript.jassIm.ImTupleSelection; +import de.peeeq.wurstscript.jassIm.ImTypeIdOfClass; +import de.peeeq.wurstscript.jassIm.ImTypeIdOfObj; +import de.peeeq.wurstscript.jassIm.ImTypeVarDispatch; import de.peeeq.wurstscript.jassIm.ImVar; import de.peeeq.wurstscript.jassIm.ImVarAccess; import de.peeeq.wurstscript.jassIm.ImVarArrayAccess; import de.peeeq.wurstscript.jassIm.ImVarargLoop; +import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.translation.imtranslation.purity.Pure; import de.peeeq.wurstscript.types.WurstTypeBool; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FuncRefRemover.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FuncRefRemover.java index 229478285..3aba87c0a 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FuncRefRemover.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FuncRefRemover.java @@ -15,8 +15,8 @@ */ public class FuncRefRemover { - private ImProg prog; - private ImTranslator tr; + private final ImProg prog; + private final ImTranslator tr; public FuncRefRemover(ImProg imProg, ImTranslator tr) { this.prog = imProg; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FunctionFlagAnnotation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FunctionFlagAnnotation.java index a74436182..51e1521d5 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FunctionFlagAnnotation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FunctionFlagAnnotation.java @@ -30,11 +30,8 @@ public boolean equals(Object obj) { return false; FunctionFlagAnnotation other = (FunctionFlagAnnotation) obj; if (annotation == null) { - if (other.annotation != null) - return false; - } else if (!annotation.equals(other.annotation)) - return false; - return true; + return other.annotation == null; + } else return annotation.equals(other.annotation); } @Override @@ -43,4 +40,4 @@ public String toString() { } -} \ No newline at end of file +} diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FunctionFlagCompiletime.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FunctionFlagCompiletime.java index a24de9a30..c91a3e36d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FunctionFlagCompiletime.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/FunctionFlagCompiletime.java @@ -6,7 +6,7 @@ public class FunctionFlagCompiletime implements FunctionFlag { /** index, which specifies order in which functions are executed * Compiletime functions with smaller index are executed first */ - private int index; + private final int index; public FunctionFlagCompiletime(int index) { this.index = index; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImHelper.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImHelper.java index 22ae68895..bc5af484e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImHelper.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImHelper.java @@ -6,11 +6,7 @@ import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.utils.Constants; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.HashSet; +import java.util.*; public class ImHelper { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java index 1ac7fd165..b4108b5de 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImPrinter.java @@ -549,7 +549,7 @@ public static String asString(ImStmts s) { } public static String asString(List s) { - return "[" + ((List) s).stream() + return "[" + s.stream() .map(Object::toString) .collect(Collectors.joining(", ")) + "]"; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java index f7d2ed018..44d4cd4a9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ImTranslator.java @@ -99,16 +99,16 @@ public class ImTranslator { private final Map varsForTupleVar = new LinkedHashMap<>(); - private boolean isUnitTestMode; + private final boolean isUnitTestMode; - private ImVar lastInitFunc = JassIm.ImVar(emptyTrace, WurstTypeString.instance().imTranslateType(this), "lastInitFunc", false); + private final ImVar lastInitFunc = JassIm.ImVar(emptyTrace, WurstTypeString.instance().imTranslateType(this), "lastInitFunc", false); private int compiletimeOrderCounter = 1; private final Map compiletimeFlags = new HashMap<>(); private final Map compiletimeExpressionsOrder = new HashMap<>(); de.peeeq.wurstscript.ast.Element lasttranslatedThing; - private boolean debug = false; + private final boolean debug = false; private final RunArgs runArgs; public ImTranslator(WurstModel wurstProg, boolean isUnitTestMode, RunArgs runArgs) { @@ -391,7 +391,7 @@ private ImFunction getNativeFunc(String funcName) { if (wurstFunc.isEmpty()) { return null; } - return getFuncFor((TranslatedToImFunction) Utils.getFirst(wurstFunc).getDef()); + return getFuncFor(Utils.getFirst(wurstFunc).getDef()); } private void callInitFunc(Set calledInitializers, WPackage p, ImVar initTrigVar) { @@ -530,7 +530,7 @@ public void addGlobalInitalizer(ImVar v, PackageOrGlobal packageOrGlobal, VarIni List imSets = new ArrayList<>(); for (int i = 0; i < arInit.getValues().size(); i++) { ImExpr translated = translatedExprs.get(i); - ImSet imSet = ImSet(trace, ImVarArrayAccess(trace, v, ImExprs((ImExpr) JassIm.ImIntVal(i))), translated); + ImSet imSet = ImSet(trace, ImVarArrayAccess(trace, v, ImExprs(JassIm.ImIntVal(i))), translated); imSets.add(imSet); } f.getBody().addAll(imSets); @@ -579,7 +579,7 @@ public ImFunction initFor(StructureDef classDef) { public ImMethod initFor(StructureDef classDef) { ImFunction impl = destroyFunc.getFor(classDef); ImMethod m = JassIm.ImMethod(classDef, selfType(classDef), "destroy" + classDef.getName(), - impl, Lists.newArrayList(), false); + impl, Lists.newArrayList(), false); return m; } }; @@ -650,7 +650,7 @@ public ImClassType selfType(ImClass imClass) { @Override public ImFunction initFor(ImClass c) { - return ImFunction(c.getTrace(), "alloc_" + c.getName(), ImTypeVars(), JassIm.ImVars(), TypesHelper.imInt(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); + return ImFunction(c.getTrace(), "alloc_" + c.getName(), ImTypeVars(), JassIm.ImVars(), TypesHelper.imInt(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); } }; @@ -660,7 +660,7 @@ public ImFunction initFor(ImClass c) { @Override public ImFunction initFor(ImClass c) { - return ImFunction(c.getTrace(), "dealloc_" + c.getName(), ImTypeVars(), JassIm.ImVars(JassIm.ImVar(c.getTrace(), TypesHelper.imInt(), "obj", false)), TypesHelper.imVoid(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); + return ImFunction(c.getTrace(), "dealloc_" + c.getName(), ImTypeVars(), JassIm.ImVars(JassIm.ImVar(c.getTrace(), TypesHelper.imInt(), "obj", false)), TypesHelper.imVoid(), JassIm.ImVars(), JassIm.ImStmts(), Collections.emptyList()); } }; @@ -1147,15 +1147,15 @@ public Map getClassesWithImplementation(Collection } - private Map>> classDynamicInitMap = Maps.newLinkedHashMap(); - private Map> classInitStatements = Maps.newLinkedHashMap(); + private final Map>> classDynamicInitMap = Maps.newLinkedHashMap(); + private final Map> classInitStatements = Maps.newLinkedHashMap(); public List> getDynamicInits(ClassDef c) { return classDynamicInitMap.computeIfAbsent(c, k -> Lists.newArrayList()); } - private Map constructorFuncs = Maps.newLinkedHashMap(); + private final Map constructorFuncs = Maps.newLinkedHashMap(); public ImFunction getConstructFunc(ConstructorDef constr) { ImFunction f = constructorFuncs.get(constr); @@ -1510,7 +1510,7 @@ private void addVarsForType(List result, String name, ImType type, de.pee } - private Map tempReturnVars = Maps.newLinkedHashMap(); + private final Map tempReturnVars = Maps.newLinkedHashMap(); public VarsForTupleResult getTupleTempReturnVarsFor(ImFunction f) { VarsForTupleResult result = tempReturnVars.get(f); @@ -1524,7 +1524,7 @@ public VarsForTupleResult getTupleTempReturnVarsFor(ImFunction f) { return result; } - private Map originalReturnValues = Maps.newLinkedHashMap(); + private final Map originalReturnValues = Maps.newLinkedHashMap(); public void setOriginalReturnValue(ImFunction f, ImType t) { @@ -1601,7 +1601,7 @@ public boolean isUnitTestMode() { return isUnitTestMode; } - private Map classForClosure = Maps.newLinkedHashMap(); + private final Map classForClosure = Maps.newLinkedHashMap(); public ImClass getClassForClosure(ExprClosure s) { Preconditions.checkNotNull(s); @@ -1609,7 +1609,7 @@ public ImClass getClassForClosure(ExprClosure s) { } - private Map classForStructureDef = Maps.newLinkedHashMap(); + private final Map classForStructureDef = Maps.newLinkedHashMap(); public ImClass getClassFor(ClassOrInterface s) { Preconditions.checkNotNull(s); @@ -1635,7 +1635,7 @@ public ImMethod getMethodFor(FuncDef f) { ImMethod m = methodForFuncDef.get(f); if (m == null) { ImFunction imFunc = getFuncFor(f); - m = JassIm.ImMethod(f, selfType(f), elementNameWithPath(f), imFunc, Lists.newArrayList(), false); + m = JassIm.ImMethod(f, selfType(f), elementNameWithPath(f), imFunc, Lists.newArrayList(), false); methodForFuncDef.put(f, m); } return m; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/InterfaceTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/InterfaceTranslator.java index e9dfef0f6..4bcf60284 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/InterfaceTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/InterfaceTranslator.java @@ -20,9 +20,9 @@ public class InterfaceTranslator { - private InterfaceDef interfaceDef; - private ImTranslator translator; - private ImClass imClass; + private final InterfaceDef interfaceDef; + private final ImTranslator translator; + private final ImClass imClass; public InterfaceTranslator(InterfaceDef interfaceDef, ImTranslator translator) { this.interfaceDef = interfaceDef; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java index 6c3593f7e..85b0fa93e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/MultiArrayEliminator.java @@ -7,16 +7,15 @@ import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.translation.imoptimizer.Replacer; import de.peeeq.wurstscript.types.TypesHelper; -import de.peeeq.wurstscript.utils.Utils; import java.util.HashMap; import java.util.List; import java.util.Map; public class MultiArrayEliminator { - private ImProg prog; - private HashMap getSetMap = Maps.newHashMap(); - private ImTranslator translator; + private final ImProg prog; + private final HashMap getSetMap = Maps.newHashMap(); + private final ImTranslator translator; private final boolean generateStacktraces; private final Replacer replacer = new Replacer(); @@ -185,7 +184,7 @@ private ImFunction generateSetFunc(ImVar aVar, List newArrays) { ImStmts body = JassIm.ImStmts(JassIm.ImIf(aVar.getTrace(), condition, thenBlock, elseBlock)); - ImFunction setFunc = JassIm.ImFunction(aVar.getTrace(), aVar.getName() + "_set", JassIm.ImTypeVars(), JassIm.ImVars(instanceId, arrayIndex, value), JassIm.ImVoid(), locals, body, Lists.newArrayList()); + ImFunction setFunc = JassIm.ImFunction(aVar.getTrace(), aVar.getName() + "_set", JassIm.ImTypeVars(), JassIm.ImVars(instanceId, arrayIndex, value), JassIm.ImVoid(), locals, body, Lists.newArrayList()); if (generateStacktraces) { ImVar stackPos = JassIm.ImVar(aVar.getTrace(), TypesHelper.imString(), "stackPos", false); setFunc.getParameters().add(stackPos); @@ -204,7 +203,7 @@ private ImFunctionCall imError(ImVar aVar, String msg) { private void generateBinSearchSet(ImStmts stmts, ImVar indexVar1, ImVar indexVar2, ImVar value, List newArrays, int start, int end, de.peeeq.wurstscript.ast.Element trace) { if (start == end) { - stmts.add(JassIm.ImSet(value.getTrace(), JassIm.ImVarArrayAccess(trace, newArrays.get(start), JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(indexVar1))), JassIm.ImVarAccess(value))); + stmts.add(JassIm.ImSet(value.getTrace(), JassIm.ImVarArrayAccess(trace, newArrays.get(start), JassIm.ImExprs(JassIm.ImVarAccess(indexVar1))), JassIm.ImVarAccess(value))); } else { int mid = (start + end) / 2; ImStmts thenBlock = JassIm.ImStmts(); @@ -239,7 +238,7 @@ private ImFunction generateGetFunc(ImVar aVar, List newArrays) { condition, thenBlock, elseBlock), JassIm.ImReturn(returnVal.getTrace(), JassIm.ImVarAccess(returnVal))); - ImFunction getFunc = JassIm.ImFunction(aVar.getTrace(), aVar.getName() + "_get", JassIm.ImTypeVars(), JassIm.ImVars(instanceId, arrayIndex), mtype.getEntryType(), locals, body, Lists.newArrayList()); + ImFunction getFunc = JassIm.ImFunction(aVar.getTrace(), aVar.getName() + "_get", JassIm.ImTypeVars(), JassIm.ImVars(instanceId, arrayIndex), mtype.getEntryType(), locals, body, Lists.newArrayList()); if (generateStacktraces) { ImVar stackPos = JassIm.ImVar(aVar.getTrace(), TypesHelper.imString(), "stackPos", false); getFunc.getParameters().add(stackPos); @@ -254,7 +253,7 @@ private ImFunction generateGetFunc(ImVar aVar, List newArrays) { private void generateBinSearchGet(ImStmts stmts, ImVar indexVar1, ImVar indexVar2, ImVar resultVar, List newArrays, int start, int end, de.peeeq.wurstscript.ast.Element trace) { if (start == end) { - stmts.add(JassIm.ImSet(resultVar.getTrace(), JassIm.ImVarAccess(resultVar), JassIm.ImVarArrayAccess(trace, newArrays.get(start), JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(indexVar1))))); + stmts.add(JassIm.ImSet(resultVar.getTrace(), JassIm.ImVarAccess(resultVar), JassIm.ImVarArrayAccess(trace, newArrays.get(start), JassIm.ImExprs(JassIm.ImVarAccess(indexVar1))))); } else { int mid = (start + end) / 2; ImStmts thenBlock = JassIm.ImStmts(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/NormalizeNames.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/NormalizeNames.java index e8bbc4650..4ef609c66 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/NormalizeNames.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/NormalizeNames.java @@ -5,7 +5,10 @@ import de.peeeq.wurstscript.ast.AstElementWithNameId; import de.peeeq.wurstscript.ast.Element; import de.peeeq.wurstscript.ast.OnDestroyDef; -import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.jassIm.ImClass; +import de.peeeq.wurstscript.jassIm.ImMethod; +import de.peeeq.wurstscript.jassIm.ImProg; +import de.peeeq.wurstscript.jassIm.ImVar; /** * diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/RecycleCodeGeneratorQueue.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/RecycleCodeGeneratorQueue.java index 5ad6b5f79..b5333a48f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/RecycleCodeGeneratorQueue.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/RecycleCodeGeneratorQueue.java @@ -42,7 +42,7 @@ public void createAllocFunc(ImTranslator translator, ImProg prog, ImClass c) { // this = maxIndex ifEnoughMemory.add(JassIm.ImSet(tr, JassIm.ImVarAccess(thisVar), JassIm.ImVarAccess(mVars.maxIndex))); // typeId[this] = ... - ifEnoughMemory.add(JassIm.ImSet(tr, JassIm.ImVarArrayAccess(tr, mVars.typeId, JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(thisVar))), JassIm.ImIntVal(c.attrTypeId()))); + ifEnoughMemory.add(JassIm.ImSet(tr, JassIm.ImVarArrayAccess(tr, mVars.typeId, JassIm.ImExprs(JassIm.ImVarAccess(thisVar))), JassIm.ImIntVal(c.attrTypeId()))); // else: // error("out of memory") ifNotEnoughMemory.add(translator.imError(c.getTrace(), JassIm.ImStringVal("Out of memory: Could not create " + c.getName() + "."))); @@ -53,9 +53,9 @@ public void createAllocFunc(ImTranslator translator, ImProg prog, ImClass c) { elseBlock.add(JassIm.ImSet(tr, JassIm.ImVarAccess(mVars.freeCount), JassIm.ImOperatorCall(WurstOperator.MINUS, JassIm.ImExprs(JassIm.ImVarAccess(mVars.freeCount), JassIm .ImIntVal(1))))); // this = free[freeCount] - elseBlock.add(JassIm.ImSet(tr, JassIm.ImVarAccess(thisVar), JassIm.ImVarArrayAccess(tr, mVars.free, JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(mVars.freeCount))))); + elseBlock.add(JassIm.ImSet(tr, JassIm.ImVarAccess(thisVar), JassIm.ImVarArrayAccess(tr, mVars.free, JassIm.ImExprs(JassIm.ImVarAccess(mVars.freeCount))))); // typeId[this] = ... - elseBlock.add(JassIm.ImSet(tr, JassIm.ImVarArrayAccess(tr, mVars.typeId, JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(thisVar))), JassIm.ImIntVal(c.attrTypeId()))); + elseBlock.add(JassIm.ImSet(tr, JassIm.ImVarArrayAccess(tr, mVars.typeId, JassIm.ImExprs(JassIm.ImVarAccess(thisVar))), JassIm.ImIntVal(c.attrTypeId()))); // endif @@ -77,19 +77,19 @@ public void createDeallocFunc(ImTranslator translator, ImProg prog, ImClass c) { // if typeId[this] == 0 then error body.add(JassIm.ImIf(tr, JassIm.ImOperatorCall(WurstOperator.EQ, - JassIm.ImExprs(JassIm.ImVarArrayAccess(tr, mVars.typeId, JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(thisVar))), JassIm.ImIntVal(0))), + JassIm.ImExprs(JassIm.ImVarArrayAccess(tr, mVars.typeId, JassIm.ImExprs(JassIm.ImVarAccess(thisVar))), JassIm.ImIntVal(0))), // then // error JassIm.ImStmts(translator.imError(c.getTrace(), JassIm.ImStringVal("Double free: object of type " + c.getName()))), // else JassIm.ImStmts( // free[freeCount] = this - JassIm.ImSet(tr, JassIm.ImVarArrayAccess(tr, mVars.free, JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(mVars.freeCount))), JassIm.ImVarAccess(thisVar)), + JassIm.ImSet(tr, JassIm.ImVarArrayAccess(tr, mVars.free, JassIm.ImExprs(JassIm.ImVarAccess(mVars.freeCount))), JassIm.ImVarAccess(thisVar)), // freeCount++ JassIm.ImSet(tr, JassIm.ImVarAccess(mVars.freeCount), JassIm.ImOperatorCall(WurstOperator.PLUS, JassIm.ImExprs(JassIm.ImVarAccess(mVars.freeCount), JassIm.ImIntVal(1)))), // typeId[this] = 0 - JassIm.ImSet(tr, JassIm.ImVarArrayAccess(tr, mVars.typeId, JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(thisVar))), JassIm.ImIntVal(0)) + JassIm.ImSet(tr, JassIm.ImVarArrayAccess(tr, mVars.typeId, JassIm.ImExprs(JassIm.ImVarAccess(thisVar))), JassIm.ImIntVal(0)) ))); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StackTraceInjector2.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StackTraceInjector2.java index 97760e8ad..1cb93e376 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StackTraceInjector2.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StackTraceInjector2.java @@ -29,11 +29,11 @@ public class StackTraceInjector2 { private static final int MAX_STACKTRACE_SIZE = 20; public static final String STACK_POS_PARAM = "__wurst_stackPos"; - private ImProg prog; - private ImTranslator tr; + private final ImProg prog; + private final ImTranslator tr; private ImVar stackSize; private ImVar stack; - private ImGetStackTrace dummyGetStackTrace = JassIm.ImGetStackTrace(); + private final ImGetStackTrace dummyGetStackTrace = JassIm.ImGetStackTrace(); public StackTraceInjector2(ImProg prog, ImTranslator tr) { this.prog = prog; @@ -94,7 +94,7 @@ public void visit(ImFuncRef imFuncRef) { TransitiveClosure callRelationTr = new TransitiveClosure<>(callRelation); // find affected functions - Set affectedFuncs = Sets.newHashSet(stackTraceGets.keySet()); + Set affectedFuncs = Sets.newLinkedHashSet(stackTraceGets.keySet()); if (tr.isLuaTarget()) { // in Lua all functions are potentially affected, because we don't know where Lua might crash @@ -134,7 +134,7 @@ public void visit(ImMethodCall call) { super.visit(call); if (affectedFuncs.contains(call.getMethod().getImplementation())) { String callPos = getCallPos(call.attrTrace().attrErrorPos()); - call.getArguments().add(getStacktraceIndex(call), str("when calling " + name(call.getMethod()) + "" + callPos)); + call.getArguments().add(getStacktraceIndex(call), str("when calling " + name(call.getMethod()) + callPos)); } } }); @@ -152,7 +152,7 @@ private void addStackTracePush(Multimap calls, Set affectedFuncs) { if (isMainOrConfig(f)) { continue; } - Set returns = new HashSet<>(); + Set returns = new LinkedHashSet<>(); f.getBody().accept(new ImStmts.DefaultVisitor() { @Override public void visit(ImReturn imReturn) { @@ -274,7 +274,7 @@ private void passStacktraceParams(final Multimap cal // pass the stacktrace parameter at all calls for (ImFunctionCall call : callsForF) { String callPos = getCallPos(call.attrTrace().attrErrorPos()); - call.getArguments().add(getStacktraceIndex(call), str("when calling " + name(f) + "" + callPos)); + call.getArguments().add(getStacktraceIndex(call), str("when calling " + name(f) + callPos)); } } } @@ -444,7 +444,7 @@ private void rewriteErrorStatements(final Multimap loopBody.add(JassIm.ImSet(trace, JassIm.ImVarAccess(traceStr), JassIm.ImOperatorCall(WurstOperator.PLUS, JassIm.ImExprs(JassIm.ImVarAccess(traceStr), JassIm.ImOperatorCall(WurstOperator.PLUS, JassIm.ImExprs(JassIm.ImStringVal("\n "), - JassIm.ImVarArrayAccess(trace, stack, JassIm.ImExprs((ImExpr) JassIm.ImVarAccess(traceI))))))))); + JassIm.ImVarArrayAccess(trace, stack, JassIm.ImExprs(JassIm.ImVarAccess(traceI))))))))); s.replaceBy(JassIm.ImStatementExpr(stmts, JassIm.ImVarAccess(traceStr))); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StmtTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StmtTranslation.java index 48e57c14e..070a632df 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StmtTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/StmtTranslation.java @@ -2,11 +2,10 @@ import com.google.common.collect.Lists; import de.peeeq.wurstscript.WurstOperator; -import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.attributes.names.FuncLink; -import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.jassIm.ImExprs; import de.peeeq.wurstscript.jassIm.ImFunction; import de.peeeq.wurstscript.jassIm.ImFunctionCall; @@ -15,6 +14,7 @@ import de.peeeq.wurstscript.jassIm.ImSet; import de.peeeq.wurstscript.jassIm.ImStmts; import de.peeeq.wurstscript.jassIm.ImVar; +import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.types.TypesHelper; import de.peeeq.wurstscript.types.WurstType; import de.peeeq.wurstscript.types.WurstTypeVararg; @@ -42,7 +42,7 @@ public static ImStmt translate(LocalVarDef s, ImTranslator t, ImFunction f) { for (int i = 0; i < ai.getValues().size(); i++) { Expr expr = ai.getValues().get(i); ImExpr translatedExpr = expr.imTranslateExpr(t, f); - stmts.add(ImSet(s, ImVarArrayAccess(s, v, ImExprs((ImExpr) JassIm.ImIntVal(i))), translatedExpr)); + stmts.add(ImSet(s, ImVarArrayAccess(s, v, ImExprs(JassIm.ImIntVal(i))), translatedExpr)); } return ImHelper.statementExprVoid(stmts); } else { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/UsedFunctions.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/UsedFunctions.java index 3615b5118..496f3bf61 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/UsedFunctions.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/UsedFunctions.java @@ -1,11 +1,7 @@ package de.peeeq.wurstscript.translation.imtranslation; import com.google.common.collect.Sets; -import de.peeeq.wurstscript.jassIm.ImFuncRef; -import de.peeeq.wurstscript.jassIm.ImFunction; -import de.peeeq.wurstscript.jassIm.ImFunctionCall; -import de.peeeq.wurstscript.jassIm.ImMethod; -import de.peeeq.wurstscript.jassIm.ImMethodCall; +import de.peeeq.wurstscript.jassIm.*; import java.util.Set; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/VarargEliminator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/VarargEliminator.java index 8458d5420..21430b19c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/VarargEliminator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/VarargEliminator.java @@ -18,9 +18,9 @@ */ public class VarargEliminator { - private ImProg prog; + private final ImProg prog; // original + number of args --> new function - private Table varargFuncs = HashBasedTable.create(); + private final Table varargFuncs = HashBasedTable.create(); public VarargEliminator(ImProg prog) { this.prog = prog; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaNatives.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaNatives.java index 05ae153e4..64e2577b6 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaNatives.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaNatives.java @@ -12,7 +12,7 @@ public class LuaNatives { - private static Map> nativeCodes = new HashMap<>(); + private static final Map> nativeCodes = new HashMap<>(); static { addNative("testSuccess", f -> { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaTranslator.java index 45518897d..cd3a89b9f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaTranslator.java @@ -7,7 +7,9 @@ import de.peeeq.wurstscript.ast.WPackage; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.luaAst.*; -import de.peeeq.wurstscript.translation.imtranslation.*; +import de.peeeq.wurstscript.translation.imtranslation.FunctionFlagEnum; +import de.peeeq.wurstscript.translation.imtranslation.GetAForB; +import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; import de.peeeq.wurstscript.types.TypesHelper; import de.peeeq.wurstscript.utils.Lazy; import de.peeeq.wurstscript.utils.Utils; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/RemoveGarbage.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/RemoveGarbage.java index 763bf0810..7b9a71271 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/RemoveGarbage.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/RemoveGarbage.java @@ -3,9 +3,8 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import de.peeeq.wurstscript.jassIm.*; -import de.peeeq.wurstscript.validation.TRVEHelper; import de.peeeq.wurstscript.translation.imtranslation.ImHelper; - +import de.peeeq.wurstscript.validation.TRVEHelper; import java.util.Collection; import java.util.HashSet; @@ -19,12 +18,12 @@ public class RemoveGarbage { private static class Used { - private Set functions = new HashSet<>(); - private Set methods = new HashSet<>(); + private final Set functions = new HashSet<>(); + private final Set methods = new HashSet<>(); // methods that will be added once the class is used: - private Multimap waitingMethods = HashMultimap.create(); - private Set classes = new HashSet<>(); - private Set vars = new HashSet<>(); + private final Multimap waitingMethods = HashMultimap.create(); + private final Set classes = new HashSet<>(); + private final Set vars = new HashSet<>(); public void addMethod(ImMethod m) { methods.add(m); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/StmtTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/StmtTranslation.java index 37f40677d..d9beca124 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/StmtTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/StmtTranslation.java @@ -2,7 +2,6 @@ import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.luaAst.*; -import de.peeeq.wurstscript.utils.Utils; import java.util.List; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/FunctionSignature.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/FunctionSignature.java index 771c456d8..1c6b0c202 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/FunctionSignature.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/FunctionSignature.java @@ -122,7 +122,7 @@ public String getParameterDescription() { if (i > 0) { sb.append(", "); } - sb.append(paramTypes.get(i).toString()); + sb.append(paramTypes.get(i)); if (i < paramNames.size()) { sb.append(" "); sb.append(paramNames.get(i)); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/VariableBinding.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/VariableBinding.java index 312003016..1a94a55d3 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/VariableBinding.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/VariableBinding.java @@ -3,9 +3,9 @@ import de.peeeq.wurstscript.ast.TypeParamDef; import de.peeeq.wurstscript.attributes.CompileError; import io.vavr.Tuple2; +import io.vavr.collection.HashMap; import io.vavr.collection.List; import io.vavr.collection.Set; -import io.vavr.collection.HashMap; import io.vavr.control.Option; import org.jetbrains.annotations.NotNull; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeArray.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeArray.java index 043691864..4409b5a38 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeArray.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeArray.java @@ -6,7 +6,9 @@ import de.peeeq.wurstscript.attributes.AttrConstantValue; import de.peeeq.wurstscript.intermediatelang.ILconst; import de.peeeq.wurstscript.intermediatelang.ILconstInt; -import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.jassIm.ImExprOpt; +import de.peeeq.wurstscript.jassIm.ImType; +import de.peeeq.wurstscript.jassIm.JassIm; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; import org.eclipse.jdt.annotation.Nullable; @@ -16,7 +18,7 @@ public class WurstTypeArray extends WurstType { private Expr arSize; - private WurstType baseType; + private final WurstType baseType; private int[] sizes; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeBoundTypeParam.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeBoundTypeParam.java index 48abeaf90..c097d4d8e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeBoundTypeParam.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeBoundTypeParam.java @@ -1,7 +1,7 @@ package de.peeeq.wurstscript.types; -import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.ImplicitFuncs; import de.peeeq.wurstscript.attributes.names.FuncLink; import de.peeeq.wurstscript.jassIm.*; @@ -26,7 +26,7 @@ public class WurstTypeBoundTypeParam extends WurstType { private FuncDef toIndex; private final @Nullable Map typeConstraintFunctions; private boolean indexInitialized = false; - private Element context; + private final Element context; public WurstTypeBoundTypeParam(TypeParamDef def, WurstType baseType, Element context) { if (baseType instanceof WurstTypeIntLiteral) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeClass.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeClass.java index 40661b7dc..663ea3225 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeClass.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeClass.java @@ -2,8 +2,8 @@ import com.google.common.collect.ImmutableList; import de.peeeq.wurstscript.ast.*; -import de.peeeq.wurstscript.ast.Element; -import de.peeeq.wurstscript.jassIm.*; +import de.peeeq.wurstscript.jassIm.ImExprOpt; +import de.peeeq.wurstscript.jassIm.JassIm; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; import io.vavr.control.Option; import org.eclipse.jdt.annotation.Nullable; @@ -13,7 +13,7 @@ public class WurstTypeClass extends WurstTypeClassOrInterface { - private ClassDef classDef; + private final ClassDef classDef; public WurstTypeClass(ClassDef classDef, List typeParameters, boolean staticRef) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeEnum.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeEnum.java index 0ef7cd77f..fc3107586 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeEnum.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeEnum.java @@ -12,7 +12,7 @@ public class WurstTypeEnum extends WurstTypeNamedScope { - private EnumDef edef; + private final EnumDef edef; public WurstTypeEnum(boolean isStaticRef, EnumDef edef) { super(isStaticRef); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInfer.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInfer.java index 1413fac79..db8862fe9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInfer.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInfer.java @@ -12,7 +12,7 @@ */ public class WurstTypeInfer extends WurstType { - private static WurstType instance = new WurstTypeInfer(); + private static final WurstType instance = new WurstTypeInfer(); private WurstTypeInfer() { } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInt.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInt.java index 7eb60e303..5dace66b6 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInt.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeInt.java @@ -5,9 +5,6 @@ import de.peeeq.wurstscript.jassIm.JassIm; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; import de.peeeq.wurstscript.utils.Utils; - -import java.util.Optional; - import org.eclipse.jdt.annotation.Nullable; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeModule.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeModule.java index 0f3482c27..f5d2bd32c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeModule.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeModule.java @@ -15,7 +15,7 @@ public class WurstTypeModule extends WurstTypeNamedScope { - private ModuleDef moduleDef; + private final ModuleDef moduleDef; public WurstTypeModule(ModuleDef moduleDef, boolean isStaticRef) { super(isStaticRef); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeModuleInstanciation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeModuleInstanciation.java index 5eb7915b9..0a0c33bfc 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeModuleInstanciation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeModuleInstanciation.java @@ -14,7 +14,7 @@ public class WurstTypeModuleInstanciation extends WurstTypeNamedScope { - private ModuleInstanciation moduleInst; + private final ModuleInstanciation moduleInst; public WurstTypeModuleInstanciation(ModuleInstanciation moduleInst, boolean isStaticRef) { super(isStaticRef); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNamedScope.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNamedScope.java index ffebb8882..9f4cda479 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNamedScope.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNamedScope.java @@ -4,11 +4,16 @@ import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Lists; import de.peeeq.wurstscript.ast.*; -import de.peeeq.wurstscript.attributes.names.*; +import de.peeeq.wurstscript.attributes.names.DefLink; +import de.peeeq.wurstscript.attributes.names.FuncLink; +import de.peeeq.wurstscript.attributes.names.Visibility; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.stream.Stream; public abstract class WurstTypeNamedScope extends WurstType { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java index cff97a302..67b9390ae 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java @@ -6,9 +6,6 @@ import de.peeeq.wurstscript.jassIm.JassIm; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; import de.peeeq.wurstscript.utils.Utils; - -import java.util.Optional; - import org.eclipse.jdt.annotation.Nullable; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypePackage.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypePackage.java index c663caf69..955de4e97 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypePackage.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypePackage.java @@ -12,7 +12,7 @@ public class WurstTypePackage extends WurstTypeNamedScope { - private WPackage pack; + private final WPackage pack; public WurstTypePackage(WPackage pack) { super(true); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypePrimitive.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypePrimitive.java index addb52d3b..918662a24 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypePrimitive.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypePrimitive.java @@ -6,8 +6,8 @@ public abstract class WurstTypePrimitive extends WurstType { - private String name; - private ImSimpleType imType; + private final String name; + private final ImSimpleType imType; protected WurstTypePrimitive(String name) { this.name = name; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeTuple.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeTuple.java index 1099f6793..ef1362134 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeTuple.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeTuple.java @@ -3,7 +3,9 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import de.peeeq.wurstscript.ast.Element; -import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.TupleDef; +import de.peeeq.wurstscript.ast.VarDef; +import de.peeeq.wurstscript.ast.WParameter; import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; @@ -16,7 +18,7 @@ public class WurstTypeTuple extends WurstType { - private TupleDef tupleDef; + private final TupleDef tupleDef; public WurstTypeTuple(TupleDef tupleDef) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeTypeParam.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeTypeParam.java index 0e5a77def..10f44b84c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeTypeParam.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeTypeParam.java @@ -12,7 +12,7 @@ public class WurstTypeTypeParam extends WurstType { - private TypeParamDef def; + private final TypeParamDef def; public WurstTypeTypeParam(TypeParamDef t) { this.def = t; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeUnknown.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeUnknown.java index 08ec236d0..3db3da032 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeUnknown.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeUnknown.java @@ -12,7 +12,7 @@ public class WurstTypeUnknown extends WurstType { private static final WurstTypeUnknown instance = new WurstTypeUnknown("unknown"); - private String name; + private final String name; public WurstTypeUnknown(String name) { this.name = name; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeVararg.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeVararg.java index 626a4139a..64d45d601 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeVararg.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeVararg.java @@ -9,7 +9,7 @@ public class WurstTypeVararg extends WurstType { - private WurstType baseType; + private final WurstType baseType; public WurstTypeVararg(WurstType baseType) { this.baseType = baseType; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/AssetsGenerator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/AssetsGenerator.java index 43f5310d2..9878bfedc 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/AssetsGenerator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/AssetsGenerator.java @@ -27,7 +27,7 @@ interface Checker { boolean run(String filename); } - private static Pattern namePattern = Pattern.compile("\\d\\w+"); + private static final Pattern namePattern = Pattern.compile("\\d\\w+"); static HashSet forbidden = new HashSet<>(Arrays.asList("step", "switch", "nothing", "lightning")); static HashSet names = new HashSet<>(); @@ -113,7 +113,7 @@ enum Category { ICONS((String l) -> l.startsWith("ReplaceableTextures"), "Icons"); Checker checker; - private String name; + private final String name; Category(Checker checker, String name) { this.checker = checker; @@ -125,7 +125,7 @@ public String toName() { } } - private static TreeSet[] entries = new TreeSet[Category.values().length]; + private static final TreeSet[] entries = new TreeSet[Category.values().length]; static { for (Category category : Category.values()) { @@ -164,7 +164,7 @@ public static void generate() throws IOException { category = getCategory(line); } Entry entry = new Entry(category, type, line, filename.substring(0, filename.indexOf("."))); - if (category != null && !entries[category.ordinal()].contains(entry)) { + if (category != null) { entries[category.ordinal()].add(entry); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/ExecutiontimeMeasure.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/ExecutiontimeMeasure.java index f7b8253f0..3fe020739 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/ExecutiontimeMeasure.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/ExecutiontimeMeasure.java @@ -4,8 +4,8 @@ public class ExecutiontimeMeasure implements AutoCloseable { - private String message; - private long startTime; + private final String message; + private final long startTime; public ExecutiontimeMeasure(String message) { this.message = message; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/MapWithIndexes.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/MapWithIndexes.java index d4698607c..8fa66d9fe 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/MapWithIndexes.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/MapWithIndexes.java @@ -1,7 +1,6 @@ package de.peeeq.wurstscript.utils; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java index 3e996c20f..a12d9c5f2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/utils/Utils.java @@ -7,12 +7,10 @@ import com.google.common.io.Files; import de.peeeq.wurstio.Pjass; import de.peeeq.wurstscript.ast.*; -import de.peeeq.wurstscript.attributes.CompileError; import de.peeeq.wurstscript.attributes.names.NameLink; import de.peeeq.wurstscript.attributes.prettyPrint.DefaultSpacer; import de.peeeq.wurstscript.jassIm.JassImElementWithName; import de.peeeq.wurstscript.parser.WPos; -import de.peeeq.wurstscript.translation.imoptimizer.Replacer; import de.peeeq.wurstscript.types.WurstType; import de.peeeq.wurstscript.types.WurstTypeUnknown; import org.eclipse.jdt.annotation.Nullable; @@ -334,7 +332,7 @@ public static String printExceptionWithStackTrace(Throwable t) { if (t == null) { break; } - builder.append("Caused by: ").append(t.toString()).append("\n"); + builder.append("Caused by: ").append(t).append("\n"); } return builder.toString(); } @@ -631,7 +629,7 @@ public static String stripHtml(String s) { public static Iterable iterateReverse(final List elements) { return () -> new Iterator() { - ListIterator it = elements.listIterator(elements.size()); + final ListIterator it = elements.listIterator(elements.size()); @Override public boolean hasNext() { @@ -744,7 +742,7 @@ public static ImmutableSetMultimap mergeMultiMaps( } public static ImmutableSet mergeSets(ImmutableSet a, ImmutableSet b) { - ImmutableSet.Builder builder = ImmutableSet.builder(); + ImmutableSet.Builder builder = ImmutableSet.builder(); builder.addAll(a).addAll(b); return builder.build(); } @@ -933,7 +931,7 @@ private static String[] splitFilename(String name) { return new String[] { name, "" }; } - private static Map resourceMap = new HashMap<>(); + private static final Map resourceMap = new HashMap<>(); public static String elementNameWithPath(AstElementWithNameId n) { StringBuilder result = new StringBuilder(n.getNameId().getName()); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java index 269e3c18a..a0e1b400c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateClassMemberUsage.java @@ -4,7 +4,6 @@ import java.util.Collection; import java.util.HashSet; -import java.util.List; import java.util.Set; /** diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateLocalUsage.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateLocalUsage.java index 43bbd90fc..9368ae5a2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateLocalUsage.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/ValidateLocalUsage.java @@ -3,7 +3,8 @@ import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.names.NameLink; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; /** * diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java index 9baaf1594..fa0c5fa21 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java @@ -1,7 +1,6 @@ package de.peeeq.wurstscript.validation; import com.google.common.collect.*; -import de.peeeq.wurstio.utils.FileUtils; import de.peeeq.wurstscript.WLogger; import de.peeeq.wurstscript.ast.*; import de.peeeq.wurstscript.attributes.CofigOverridePackages; @@ -40,13 +39,13 @@ */ public class WurstValidator { - private WurstModel prog; + private final WurstModel prog; private int functionCount; private int visitedFunctions; - private Multimap calledFunctions = HashMultimap.create(); + private final Multimap calledFunctions = HashMultimap.create(); private @Nullable Element lastElement = null; - private HashSet trveWrapperFuncs = new HashSet<>(); - private HashMap> wrapperCalls = new HashMap<>(); + private final HashSet trveWrapperFuncs = new HashSet<>(); + private final HashMap> wrapperCalls = new HashMap<>(); public WurstValidator(WurstModel root) { this.prog = root; @@ -830,7 +829,7 @@ private void checkIntVal(ExprIntVal e) { } private int countFunctions() { - final int functionCount[] = new int[1]; + final int[] functionCount = new int[1]; prog.accept(new WurstModel.DefaultVisitor() { @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/controlflow/DataflowAnomalyAnalysis.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/controlflow/DataflowAnomalyAnalysis.java index 577d380d2..007146cac 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/controlflow/DataflowAnomalyAnalysis.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/controlflow/DataflowAnomalyAnalysis.java @@ -225,9 +225,7 @@ public boolean equals(@Nullable Object obj) { return false; if (mightBeDestroyed != other.mightBeDestroyed) return false; - if (!writesAndReads.equals(other.writesAndReads)) - return false; - return true; + return writesAndReads.equals(other.writesAndReads); } @Override @@ -459,9 +457,7 @@ private boolean isLeftOfStmtSet(HasReadVariables r) { Element parent = r.getParent(); if (parent instanceof StmtSet) { StmtSet stmtSet = (StmtSet) parent; - if (stmtSet.getUpdatedExpr() == r) { - return true; - } + return stmtSet.getUpdatedExpr() == r; } return false; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/controlflow/ForwardExecution.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/controlflow/ForwardExecution.java index bd133ee33..1cb65f948 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/controlflow/ForwardExecution.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/controlflow/ForwardExecution.java @@ -9,11 +9,11 @@ public class ForwardExecution { - private ForwardMethod method; - private Map currentValues = Maps.newLinkedHashMap(); - private AstElementWithBody f; + private final ForwardMethod method; + private final Map currentValues = Maps.newLinkedHashMap(); + private final AstElementWithBody f; - private PriorityQueue todo = new PriorityQueue<>(11, (o1, o2) -> o2.getSource().getLeftPos() - o1.getSource().getLeftPos()); + private final PriorityQueue todo = new PriorityQueue<>(11, (o1, o2) -> o2.getSource().getLeftPos() - o1.getSource().getLeftPos()); ForwardExecution(Target f, ForwardMethod method) { this.f = f; @@ -67,7 +67,7 @@ private Collection get(List previousStatements) { } Collection result = Lists.newArrayList(); for (WStatement s : previousStatements) { -// debug(" prev: " + Utils.printElement(s) +" in line " + s.attrSource().getLine() +// debug(" prev: " + Utils.printElement(s) +" in line " + s.attrSource().getLine() // + " " + method.print(currentValues.get(s))); result.add(get(s)); } diff --git a/de.peeeq.wurstscript/src/test/java/tests/immutablecollections/IntRangeTests.java b/de.peeeq.wurstscript/src/test/java/tests/immutablecollections/IntRangeTests.java index 421adf949..a15f19885 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/immutablecollections/IntRangeTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/immutablecollections/IntRangeTests.java @@ -14,7 +14,7 @@ public class IntRangeTests { public void test1() { List parts = IntRange.createFromIntList(Lists.newArrayList(5, 6, 7, 10, 11, 12)); assertEquals("[5..<7, 10..<12]", parts.toString()); - parts = IntRange.createFromIntList(Lists.newArrayList()); + parts = IntRange.createFromIntList(Lists.newArrayList()); assertEquals("[]", parts.toString()); parts = IntRange.createFromIntList(Lists.newArrayList(5, 6, 7, 10, 11, 12, 15)); assertEquals("[5..<7, 10..<12, 15..<15]", parts.toString()); diff --git a/de.peeeq.wurstscript/src/test/java/tests/prettyprint/PrettyPrintTest.java b/de.peeeq.wurstscript/src/test/java/tests/prettyprint/PrettyPrintTest.java index 8a17067c1..65a47b8b7 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/prettyprint/PrettyPrintTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/prettyprint/PrettyPrintTest.java @@ -4,7 +4,10 @@ import com.google.common.io.Files; import de.peeeq.wurstio.WurstCompilerJassImpl; import de.peeeq.wurstscript.RunArgs; -import de.peeeq.wurstscript.ast.*; +import de.peeeq.wurstscript.ast.AstElementWithSource; +import de.peeeq.wurstscript.ast.CompilationUnit; +import de.peeeq.wurstscript.ast.Element; +import de.peeeq.wurstscript.ast.Identifier; import de.peeeq.wurstscript.attributes.prettyPrint.MaxOneSpacer; import de.peeeq.wurstscript.attributes.prettyPrint.PrettyPrinter; import de.peeeq.wurstscript.gui.WurstGui; diff --git a/de.peeeq.wurstscript/src/test/java/tests/utils/GraphInterpreterTestsSC.java b/de.peeeq.wurstscript/src/test/java/tests/utils/GraphInterpreterTestsSC.java index 11c522b86..4d557d343 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/utils/GraphInterpreterTestsSC.java +++ b/de.peeeq.wurstscript/src/test/java/tests/utils/GraphInterpreterTestsSC.java @@ -37,13 +37,13 @@ public void test(@From(GraphGen.class) Graph g) { public void simpleGraph() { boolean[][] adj = {{true,true},{true, false}}; Graph g = new Graph(adj); - System.out.println(g.toString()); + System.out.println(g); Set> components = g.findStronglyConnectedComponents(g.nodes); boolean componentCycle = (components.stream().anyMatch(c -> c.size() > 1)); assertEquals(componentCycle, isCyclic(g)); } - private boolean isCyclicUtil(Graph g, Node v, boolean visited[], boolean[] recStack) { + private boolean isCyclicUtil(Graph g, Node v, boolean[] visited, boolean[] recStack) { if (!visited[v.val]) { // Mark the current node as visited and part of recursion stack visited[v.val] = true; diff --git a/de.peeeq.wurstscript/src/test/java/tests/utils/TransitiveClosureTests.java b/de.peeeq.wurstscript/src/test/java/tests/utils/TransitiveClosureTests.java index 9e1f0b5a7..fbb0b1716 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/utils/TransitiveClosureTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/utils/TransitiveClosureTests.java @@ -3,7 +3,6 @@ import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; import de.peeeq.datastructures.TransitiveClosure; -import de.peeeq.wurstio.languageserver.WFile; import org.testng.annotations.Test; import java.util.Arrays; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/AutoCompleteTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/AutoCompleteTests.java index 8210d03c5..13f2dd93f 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/AutoCompleteTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/AutoCompleteTests.java @@ -437,7 +437,7 @@ private CompletionList calculateCompletions(CompletionTestData testData) { BufferManager bufferManager = new BufferManager(); File projectPath = new File("./test-output").getAbsoluteFile(); ModelManager modelManager = new ModelManagerImpl(projectPath, bufferManager); - String uri = projectPath.toURI().toString() + "/wurst/test.wurst"; + String uri = projectPath.toURI() + "/wurst/test.wurst"; bufferManager.updateFile(WFile.create(uri), testData.buffer); TextDocumentIdentifier textDocument = new TextDocumentIdentifier(uri); Position pos = new Position(testData.line, testData.column); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ColorTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ColorTests.java index 597c1ea49..55ce405e3 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ColorTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ColorTests.java @@ -1,12 +1,10 @@ package tests.wurstscript.tests; import de.peeeq.wurstio.languageserver.requests.Colors; -import org.eclipse.lsp4j.Color; import org.eclipse.lsp4j.ColorInformation; import org.testng.annotations.Test; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import static org.testng.Assert.assertEquals; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java index e697017da..cb3e8bd17 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/DependencyFileParserTest.java @@ -11,7 +11,6 @@ import de.peeeq.wurstscript.gui.WurstGuiLogger; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.PublishDiagnosticsParams; -import org.testng.Assert; import org.testng.annotations.Test; import java.io.BufferedWriter; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ExtraMatchers.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ExtraMatchers.java index 776365ae3..3ecd68133 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ExtraMatchers.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ExtraMatchers.java @@ -1,10 +1,11 @@ package tests.wurstscript.tests; -import org.hamcrest.*; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; +import org.hamcrest.Matcher; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.function.Function; /** * diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/FlowAnalysisTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/FlowAnalysisTests.java index f4884b22a..45b93e28f 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/FlowAnalysisTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/FlowAnalysisTests.java @@ -101,8 +101,7 @@ public void assertError(boolean executeProg, String expected, String... body) { private String makeProg(String... body) { String prog = "package test\n" + "native testFail(string msg)\n" + - "native testSuccess()\n" + - "" + Utils.join(body, "\n") + "\n"; + "native testSuccess()\n" + Utils.join(body, "\n") + "\n"; return prog; } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/FoldingTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/FoldingTests.java index 5518d8cb8..abae0755e 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/FoldingTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/FoldingTests.java @@ -1,18 +1,13 @@ package tests.wurstscript.tests; -import de.peeeq.wurstio.languageserver.requests.Colors; import de.peeeq.wurstio.languageserver.requests.FoldingRangeRequest; import de.peeeq.wurstscript.ast.CompilationUnit; -import org.eclipse.lsp4j.ColorInformation; import org.eclipse.lsp4j.FoldingRange; import org.testng.Assert; import org.testng.annotations.Test; -import java.util.ArrayList; import java.util.List; -import static org.testng.Assert.assertEquals; - /** * */ diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenerateBotData.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenerateBotData.java index 9eaa75fa0..9735e1a62 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenerateBotData.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenerateBotData.java @@ -14,7 +14,9 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.PrintStream; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -29,8 +31,8 @@ public class GenerateBotData { static class Sig { private String name; - private List paramTypes; - private WurstType returnType; + private final List paramTypes; + private final WurstType returnType; public Sig(String name, List paramTypes, WurstType returnType) { super(); @@ -140,7 +142,7 @@ public void visit(NativeFunc f) { types.sort(Comparator.comparing(Object::toString)); // for (WurstType wurstType : types) { -// System.out.println("type " + wurstType); +// System.out.println("type " + wurstType); // } List> superTypes = new ArrayList<>(); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GetDefinitionTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GetDefinitionTests.java index 41ec46ff6..49d428604 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GetDefinitionTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GetDefinitionTests.java @@ -96,7 +96,7 @@ private Either, List> calculate BufferManager bufferManager = new BufferManager(); File projectPath = new File("./test-output").getAbsoluteFile(); ModelManager modelManager = new ModelManagerImpl(projectPath, bufferManager); - String uri = projectPath.toURI().toString() + "/wurst/test.wurst"; + String uri = projectPath.toURI() + "/wurst/test.wurst"; bufferManager.updateFile(WFile.create(uri), testData.buffer); TextDocumentIdentifier textDocument = new TextDocumentIdentifier(uri); Position pos = new Position(testData.line, testData.column); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HoverTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HoverTests.java index 4f8ac3f2d..09fee9366 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HoverTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/HoverTests.java @@ -59,7 +59,7 @@ private Hover getHoverInfo(CompletionTestData testData) { BufferManager bufferManager = new BufferManager(); File projectPath = new File("./test-output").getAbsoluteFile(); ModelManager modelManager = new ModelManagerImpl(projectPath, bufferManager); - String uri = projectPath.toURI().toString() + "/wurst/test.wurst"; + String uri = projectPath.toURI() + "/wurst/test.wurst"; bufferManager.updateFile(WFile.create(uri), testData.buffer); TextDocumentIdentifier textDocument = new TextDocumentIdentifier(uri); Position pos = new Position(testData.line, testData.column); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/InterfaceTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/InterfaceTests.java index 6459e4c34..76d70c47c 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/InterfaceTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/InterfaceTests.java @@ -2,8 +2,6 @@ import de.peeeq.wurstscript.attributes.CompileError; import org.hamcrest.CoreMatchers; -import org.hamcrest.Description; -import org.hamcrest.Matcher; import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java index 9b508cfbe..e3c6953dd 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java @@ -7,7 +7,6 @@ import java.io.File; import java.io.IOException; - import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTypecastingTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTypecastingTests.java index 67956def3..723157238 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTypecastingTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTypecastingTests.java @@ -3,8 +3,7 @@ import org.testng.annotations.Test; - -import static org.testng.AssertJUnit.*; +import static org.testng.AssertJUnit.assertTrue; public class LuaTypecastingTests extends WurstScriptTest { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java index 17df22ca0..2b987f853 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/ModelManagerTests.java @@ -7,9 +7,6 @@ import de.peeeq.wurstio.languageserver.WFile; import de.peeeq.wurstio.utils.FileUtils; import de.peeeq.wurstscript.ast.*; -import de.peeeq.wurstscript.attributes.prettyPrint.DefaultSpacer; -import de.peeeq.wurstscript.attributes.prettyPrint.PrettyPrinter; -import de.peeeq.wurstscript.attributes.prettyPrint.Spacer; import de.peeeq.wurstscript.utils.Utils; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.PublishDiagnosticsParams; @@ -18,19 +15,17 @@ import org.jetbrains.annotations.NotNull; import org.testng.annotations.Test; -import javax.xml.transform.Source; import java.io.File; import java.io.IOException; import java.nio.file.Files; -import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; -import static org.testng.Assert.*; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; public class ModelManagerTests { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/MpqTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/MpqTest.java index 5350fcaac..cb2f51e72 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/MpqTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/MpqTest.java @@ -4,7 +4,9 @@ import de.peeeq.wurstio.mpq.MpqEditor; import de.peeeq.wurstio.mpq.MpqEditorFactory; import org.testng.Assert; -import org.testng.annotations.*; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; import java.io.File; import java.io.IOException; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java index ca2f02a41..10807fb8f 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java @@ -15,18 +15,14 @@ import de.peeeq.wurstscript.utils.Utils; import io.vavr.collection.HashSet; import io.vavr.collection.Set; -import org.hamcrest.CoreMatchers; import org.testng.annotations.Ignore; import org.testng.annotations.Test; import java.io.File; import java.io.IOException; import java.util.Collections; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import static org.hamcrest.MatcherAssert.assertThat; import static org.testng.AssertJUnit.*; public class OptimizerTests extends WurstScriptTest { @@ -464,7 +460,7 @@ public void test_mult3rewrite() throws IOException { "endpackage"); String output1 = Files.toString(new File("./test-output/OptimizerTests_test_mult3rewrite_inlopt.j"), Charsets.UTF_8); String output2 = Files.toString(new File("./test-output/OptimizerTests_test_mult3rewrite_opt.j"), Charsets.UTF_8); - assertTrue(!output1.contains("foo()")); + assertFalse(output1.contains("foo()")); assertTrue(output2.contains("foo() + foo()")); } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/RealWorldExamples.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/RealWorldExamples.java index 831d02231..744f2589e 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/RealWorldExamples.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/RealWorldExamples.java @@ -11,7 +11,6 @@ import java.io.File; import java.io.IOException; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -35,7 +34,7 @@ public void arrayindex() throws IOException { @Test public void linkedHashMap() throws IOException { // see bug #478 - Iterable inputFiles = Arrays.asList(new File(BUG_DIR + "LinkedHashMap.wurst")); + Iterable inputFiles = List.of(new File(BUG_DIR + "LinkedHashMap.wurst")); Map inputs = Collections.emptyMap(); String name = "linkedHashMap"; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/SimpleStatementTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/SimpleStatementTests.java index 0ff155222..90539579f 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/SimpleStatementTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/SimpleStatementTests.java @@ -10,8 +10,7 @@ public class SimpleStatementTests extends WurstScriptTest { public void testMod1() { assertOk(true, "if 10. % 2. == 0.", - " testSuccess()\n" + - ""); + " testSuccess()\n"); } @@ -19,48 +18,42 @@ public void testMod1() { public void testMod2() { assertOk(true, "if 2 mod 10 == 2", - " testSuccess()\n" + - ""); + " testSuccess()\n"); } @Test public void testIf1() { assertOk(true, "if 2 == 2 ", - " testSuccess()\n" + - ""); + " testSuccess()\n"); } @Test public void testIf2() { assertOk(true, "if 10 > 5 ", - " testSuccess()\n" + - ""); + " testSuccess()\n"); } @Test public void testIf3() { assertOk(true, "if not 10 > 5 or not 5 > 10 ", - " testSuccess()\n" + - ""); + " testSuccess()\n"); } @Test public void testIf4() { assertOk(true, "if 10 >= 10 ", - " testSuccess()\n" + - ""); + " testSuccess()\n"); } @Test public void testIf5() { assertOk(true, "if -4 <= -4 ", - " testSuccess()\n" + - ""); + " testSuccess()\n"); } @Test diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java index fbe6bd4bd..1c68780d8 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/StdLib.java @@ -30,8 +30,8 @@ public class StdLib { */ private static boolean isInitialized = false; - private static File tempFolder = new File("./temp"); - private static File stdLibFolder = new File(tempFolder, "WurstStdlib2"); + private static final File tempFolder = new File("./temp"); + private static final File stdLibFolder = new File(tempFolder, "WurstStdlib2"); @Test public void download() { @@ -52,7 +52,7 @@ public synchronized static boolean downloadStandardlib() { .setURI(gitRepo) .call()) { git.checkout().setName(Constants.MASTER).call(); - }; + } } try (Git git = Git.open(stdLibFolder)) { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/VarargTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/VarargTests.java index ca120884c..224d1c73d 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/VarargTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/VarargTests.java @@ -2,9 +2,6 @@ import org.testng.annotations.Test; -import java.io.File; -import java.io.IOException; - public class VarargTests extends WurstScriptTest { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstLanguageServerTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstLanguageServerTest.java index 536a3af60..3a3a7cb28 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstLanguageServerTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstLanguageServerTest.java @@ -7,7 +7,6 @@ import de.peeeq.wurstscript.gui.WurstGui; import de.peeeq.wurstscript.gui.WurstGuiLogger; -import java.io.File; import java.util.Collections; import java.util.Map; @@ -49,7 +48,7 @@ private WurstModel compile(String... lines) { WurstCompilerJassImpl compiler = new WurstCompilerJassImpl(null, gui, null, runArgs); compiler.getErrorHandler().enableUnitTestMode(); Map inputMap = ImmutableMap.of("test", input); - return parseFiles(Collections.emptyList(), inputMap, false, compiler); + return parseFiles(Collections.emptyList(), inputMap, false, compiler); } static class CompletionTestData { diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java index 9692e7955..742fa0998 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java @@ -49,14 +49,14 @@ protected boolean printDebugScripts() { } class TestConfig { - private String name; + private final String name; private boolean withStdLib; private boolean executeProg; private boolean executeTests; private boolean executeProgOnlyAfterTransforms; private String expectedError; - private List inputFiles = new ArrayList<>(); - private List additionalCompilationUnits = new ArrayList<>(); + private final List inputFiles = new ArrayList<>(); + private final List additionalCompilationUnits = new ArrayList<>(); private boolean stopOnFirstError = true; private boolean runCompiletimeFunctions; private boolean testLua = false; diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/utils/ErrorReportingTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/utils/ErrorReportingTest.java index 1d1b9947f..cdfe05021 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/utils/ErrorReportingTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/utils/ErrorReportingTest.java @@ -10,7 +10,7 @@ import java.io.File; import java.io.IOException; -import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; public class ErrorReportingTest { ErrorReporting instance = new ErrorReportingIO(); @@ -19,7 +19,7 @@ public class ErrorReportingTest { @Test public void testSendErrorReport() { boolean result = instance.sendErrorReport(new Error("bla"), "source"); - assertEquals(true, result); + assertTrue(result); } @Ignore // would have side effects on server @@ -28,7 +28,7 @@ public void testBigSource() throws IOException { String source = Files.toString(new File("/home/peter/kram/errorreport_source.wurst"), Charsets.UTF_8); boolean result = instance.sendErrorReport(new Error("bla"), source); - assertEquals(true, result); + assertTrue(result); } From 215d9863749429dd93174888a636f8ba00eb71eb Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 4 Dec 2023 13:55:21 +0100 Subject: [PATCH 56/74] add sonar analysis (#1084) --- .github/workflows/build.yml | 38 +++++++++++++++++++++++++++++++ de.peeeq.wurstscript/build.gradle | 9 ++++++++ 2 files changed, 47 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..fce966296 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,38 @@ +name: SonarCloud +on: + push: + branches: + - master + pull_request: + types: [opened, synchronize, reopened] +jobs: + build: + name: Build and analyze + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: 'zulu' # Alternative distribution options are available + - name: Cache SonarCloud packages + uses: actions/cache@v3 + with: + path: ~/.sonar/cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar + - name: Cache Gradle packages + uses: actions/cache@v3 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} + restore-keys: ${{ runner.os }}-gradle + - name: Build and analyze + working-directory: ./de.peeeq.wurstscript + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: ./gradlew build sonar --info diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 13a624499..1d387f257 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -16,6 +16,7 @@ plugins { id 'eclipse' id 'idea' id 'application' + id "org.sonarqube" version "4.4.1.3373" } import de.undercouch.gradle.tasks.download.Download @@ -26,6 +27,14 @@ import org.eclipse.jgit.lib.ObjectId import java.util.regex.Matcher import java.util.regex.Pattern +sonar { + properties { + property "sonar.projectKey", "wurstscript_WurstScript" + property "sonar.organization", "wurstscript-1" + property "sonar.host.url", "https://sonarcloud.io" + } +} + mainClassName = "de.peeeq.wurstio.Main" version = "1.8.1.0" From da013eb7d7025ee26789b74d46b03fd92669c875 Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 4 Dec 2023 14:18:20 +0100 Subject: [PATCH 57/74] Update Gradle --- de.peeeq.wurstscript/build.gradle | 2 +- de.peeeq.wurstscript/deploy.gradle | 4 ++-- de.peeeq.wurstscript/gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 1d387f257..5ac5b4e93 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -51,7 +51,7 @@ jacoco { jacocoTestReport { reports { - xml.enabled true + xml.required.set(true) } afterEvaluate { diff --git a/de.peeeq.wurstscript/deploy.gradle b/de.peeeq.wurstscript/deploy.gradle index d50336097..571247d01 100644 --- a/de.peeeq.wurstscript/deploy.gradle +++ b/de.peeeq.wurstscript/deploy.gradle @@ -27,13 +27,13 @@ make_for_wurstpack.dependsOn(installDist) task create_zip_wurstpack_complete(type: Zip) { from '../Wurstpack' - archiveName 'wurstpack_complete.zip' + archiveFileName.set('wurstpack_complete.zip') } create_zip_wurstpack_complete.dependsOn(make_for_wurstpack) task create_zip_wurstpack_compiler(type: Zip) { from '../Wurstpack/wurstscript/' - archiveName 'wurstpack_compiler.zip' + archiveFileName.set('wurstpack_compiler.zip') } create_zip_wurstpack_compiler.dependsOn(make_for_wurstpack) diff --git a/de.peeeq.wurstscript/gradle/wrapper/gradle-wrapper.properties b/de.peeeq.wurstscript/gradle/wrapper/gradle-wrapper.properties index 05679dc3c..a59520664 100644 --- a/de.peeeq.wurstscript/gradle/wrapper/gradle-wrapper.properties +++ b/de.peeeq.wurstscript/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 0f5c38938f9b6b47c018d481d4c4f15c1dfb7711 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 31 Dec 2023 12:06:16 +0100 Subject: [PATCH 58/74] only show file chooser for runmap task, update chardet lib --- de.peeeq.wurstscript/build.gradle | 2 +- .../src/main/java/de/peeeq/wurstio/Main.java | 2 +- .../languageserver/requests/MapRequest.java | 4 +- .../de/peeeq/wurstio/utils/FileReading.java | 46 +++++-------------- .../wurstio/utils/W3InstallationData.java | 12 +++-- 5 files changed, 25 insertions(+), 41 deletions(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 5ac5b4e93..61347452b 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -111,7 +111,7 @@ dependencies { implementation group: 'org.apache.velocity', name: 'velocity', version: '1.7' // Chardet for guessing the file-encoding of a source-file - implementation group: 'net.sourceforge.jchardet', name: 'jchardet', version: '1.0' + implementation 'com.github.albfernandez:juniversalchardet:2.4.0' // Crigges' jmpq implementation group: 'com.github.inwc3', name: 'jmpq3', version: '264c54cfc8' diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java index 8344be4ce..7bf555997 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/Main.java @@ -171,7 +171,7 @@ public static void main(String[] args) { if (projectConfig != null && target.isPresent()) { ProjectConfigBuilder.apply(projectConfig, target.get().toFile(), scriptFile, buildDir.toFile(), - runArgs, new W3InstallationData(null, Paths.get(workspaceroot).toFile())); + runArgs, new W3InstallationData(null, Paths.get(workspaceroot).toFile(), false)); WLogger.info("map build success"); System.out.println("Build succeeded. Output file: <" + target.get().toAbsolutePath() + ">"); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 89f745668..814b7b86d 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -443,14 +443,14 @@ private W3InstallationData getBestW3InstallationData() throws RequestFailedExcep return new W3InstallationData(Optional.empty(), Optional.empty()); } if (wc3Path.isPresent() && StringUtils.isNotBlank(wc3Path.get())) { - W3InstallationData w3data = new W3InstallationData(langServer, new File(wc3Path.get())); + W3InstallationData w3data = new W3InstallationData(langServer, new File(wc3Path.get()), this instanceof RunMap); if (w3data.getWc3PatchVersion().isEmpty()) { throw new RequestFailedException(MessageType.Error, "Could not find Warcraft III installation at specified path: " + wc3Path); } return w3data; } else { - return new W3InstallationData(langServer); + return new W3InstallationData(langServer, this instanceof RunMap); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/FileReading.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/FileReading.java index 4fdc1f22a..ddebf38b8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/FileReading.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/FileReading.java @@ -2,8 +2,7 @@ import com.google.common.base.Charsets; import de.peeeq.wurstscript.WLogger; -import org.mozilla.intl.chardet.nsDetector; -import org.mozilla.intl.chardet.nsPSMDetector; +import org.mozilla.universalchardet.UniversalDetector; import java.io.*; import java.nio.charset.Charset; @@ -11,6 +10,8 @@ public class FileReading { + private static final UniversalDetector detector = new UniversalDetector(); + /** * get a reader for a file */ @@ -20,47 +21,24 @@ private static Reader getFileReader(File file, Charset cs) throws IOException { /** * get a reader for a file and guess the charset using jchardet - * http://jchardet.sourceforge.net/ */ public static Reader getFileReader(File file) throws IOException { - try (InputStream fis = Files.newInputStream(file.toPath()); - BufferedInputStream imp = new BufferedInputStream(fis)) { - - nsDetector det = new nsDetector(nsPSMDetector.ALL); - - final String[] charset = new String[1]; - - det.Init(cs -> charset[0] = cs); + try (InputStream fis = Files.newInputStream(file.toPath())) { - byte[] buf = new byte[1024]; - int len; - boolean done = false; - boolean isAscii = true; + byte[] buf = new byte[4096]; - while ((len = imp.read(buf, 0, buf.length)) != -1) { - - // Check if the stream is only ascii. - if (isAscii) - isAscii = det.isAscii(buf, len); - - // DoIt if non-ascii and not done yet. - if (!isAscii && !done) - done = det.DoIt(buf, len, false); + int nread; + while ((nread = fis.read(buf)) > 0 && !detector.isDone()) { + detector.handleData(buf, 0, nread); } + detector.dataEnd(); - det.DataEnd(); - - if (isAscii) { - charset[0] = "ASCII"; - } + String encoding = detector.getDetectedCharset(); - String encoding = charset[0]; + detector.reset(); if (encoding == null) { - // throw new IOException("Could not get encoding for " + - // file.getAbsolutePath()); - WLogger.severe("Could not get encoding for " - + file.getAbsolutePath()); + WLogger.severe("Could not get encoding for " + file.getAbsolutePath()); return getFileReader(file, Charsets.UTF_8); } else { return getFileReader(file, Charset.forName(encoding)); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java index 57b44119c..158419467 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/utils/W3InstallationData.java @@ -21,6 +21,8 @@ public class W3InstallationData { private File selectedFolder; + private boolean shouldAskForPath = false; + static { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); @@ -35,8 +37,9 @@ public W3InstallationData(Optional gameExe, Optional version) } /** Evaluates the game path and version by discovering the system environment. */ - public W3InstallationData(WurstLanguageServer languageServer) { + public W3InstallationData(WurstLanguageServer languageServer, boolean shouldAskForPath) { this.languageServer = languageServer; + this.shouldAskForPath = shouldAskForPath; discoverExePath(); discoverVersion(); } @@ -45,8 +48,9 @@ public W3InstallationData(WurstLanguageServer languageServer) { * Evaluates the game path and version, attempting to use the provided path if possible, before discovering the * system environment. */ - public W3InstallationData(WurstLanguageServer languageServer, File wc3Path) { + public W3InstallationData(WurstLanguageServer languageServer, File wc3Path, boolean shouldAskForPath) { this.languageServer = languageServer; + this.shouldAskForPath = shouldAskForPath; if (!Orient.isWindowsSystem()) { WLogger.warning("Game path configuration only works on windows"); discoverExePath(); @@ -89,7 +93,9 @@ private void discoverExePath() { WLogger.info("Discovered game path: " + gameExe); } catch (NotFoundException | UnsupportedPlatformException e) { WLogger.warning("Can't find game installation directory: " + e.getMessage()); - showFileChooser(); + if (shouldAskForPath) { + showFileChooser(); + } } } From ec0a9e54d3a301ab197e73f9a7ade54bb650ae5f Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 3 Jan 2024 19:32:09 +0100 Subject: [PATCH 59/74] Critical fix: Use script file with build config in compilation --- .../wurstio/languageserver/requests/MapRequest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 814b7b86d..a33fba2f1 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -285,6 +285,17 @@ protected void println(String s) { protected File compileScript(WurstGui gui, ModelManager modelManager, List compileArgs, Optional mapCopy, WurstProjectConfigData projectConfigData, boolean isProd, File scriptFile) throws Exception { RunArgs runArgs = new RunArgs(compileArgs); + + Optional war3mapJ = modelManager.getModel() + .stream() + .filter((CompilationUnit cu) -> cu.getCuInfo().getFile().endsWith("war3map.j")) + .findFirst(); + + if (war3mapJ.isPresent()) { + modelManager.syncCompilationUnitContent(WFile.create(war3mapJ.get().getCuInfo().getFile()), + java.nio.file.Files.readString(scriptFile.toPath())); + } + gui.sendProgress("Compiling Script"); print("Compile Script : "); for (File dep : modelManager.getDependencyWurstFiles()) { From 8668904b7896495caaca208fce41a2ed4272227e Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 3 Jan 2024 20:09:14 +0100 Subject: [PATCH 60/74] Also fix for buildmap task --- .../languageserver/requests/MapRequest.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index a33fba2f1..d6462bdab 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -286,16 +286,6 @@ protected File compileScript(WurstGui gui, ModelManager modelManager, List war3mapJ = modelManager.getModel() - .stream() - .filter((CompilationUnit cu) -> cu.getCuInfo().getFile().endsWith("war3map.j")) - .findFirst(); - - if (war3mapJ.isPresent()) { - modelManager.syncCompilationUnitContent(WFile.create(war3mapJ.get().getCuInfo().getFile()), - java.nio.file.Files.readString(scriptFile.toPath())); - } - gui.sendProgress("Compiling Script"); print("Compile Script : "); for (File dep : modelManager.getDependencyWurstFiles()) { @@ -310,6 +300,8 @@ protected File compileScript(WurstGui gui, ModelManager modelManager, List war3mapJ = modelManager.getModel() + .stream() + .filter((CompilationUnit cu) -> cu.getCuInfo().getFile().endsWith("war3map.j")) + .findFirst(); + + if (war3mapJ.isPresent()) { + modelManager.syncCompilationUnitContent(WFile.create(war3mapJ.get().getCuInfo().getFile()), + java.nio.file.Files.readString(scriptFile.toPath())); + } + } + protected CompilationResult compileScript(ModelManager modelManager, WurstGui gui, Optional testMap, WurstProjectConfigData projectConfigData, File buildDir, boolean isProd) throws Exception { if (testMap.isPresent() && testMap.get().exists()) { From dd9ac8aa1550f5b9f1c4c6ead3b04e67ac7b1997 Mon Sep 17 00:00:00 2001 From: Frotty Date: Thu, 4 Jan 2024 15:37:46 +0100 Subject: [PATCH 61/74] Also allow real and boolean comparisons with null in Jass code (#1086) In addition to already allowing integer comparisons --- .../wurstscript/types/WurstTypeNull.java | 12 ++++++++---- .../tests/wurstscript/tests/JurstTests.java | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java index 67b9390ae..98d0081e9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/types/WurstTypeNull.java @@ -13,16 +13,20 @@ public class WurstTypeNull extends WurstType { private static final WurstTypeNull instance = new WurstTypeNull(); - private WurstTypeNull() { } + private WurstTypeNull() { + } @Override VariableBinding matchAgainstSupertypeIntern(WurstType other, @Nullable Element location, VariableBinding mapping, - VariablePosition variablePosition) { + VariablePosition variablePosition) { if (other.isNullable()) { return mapping; } - if (Utils.isJassCode(location) - && (other instanceof WurstTypeInt || other instanceof WurstTypeIntLiteral)) { + if (Utils.isJassCode(location) && + (other instanceof WurstTypeInt + || other instanceof WurstTypeIntLiteral + || other instanceof WurstTypeReal + || other instanceof WurstTypeBool)) { return mapping; } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/JurstTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/JurstTests.java index fe7f88e63..3b086e872 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/JurstTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/JurstTests.java @@ -238,6 +238,25 @@ public void jassAgentTypeComparison() { testJurstWithJass(true, true, jassCode, jurstCode); } + @Test + public void jassRealToNullComparison() { + String jassCode = Utils.string( + "function bar takes real r returns boolean", + "return r == null", + "endfunction\n"); + + + String jurstCode = Utils.string( + "package test", + " init", + " bar(0)", + " testSuccess()", + " end", + "endpackage"); + + testJurstWithJass(true, true, jassCode, jurstCode); + } + @Test public void testBigJassScript() throws IOException { String jassCode = new String(Files.readAllBytes(Paths.get(Utils.getResourceFile("test.j")))); From 6859eceed2492617897334250251326c3890ee41 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 14 Jan 2024 18:23:25 +0100 Subject: [PATCH 62/74] Lua mode fixes (#1087) - Lua config is now applied to w3i even if no buildMapData is present - Player config gets correctly injected into the script in lua mode - Use // floor division operator for translating integer division - Use math.tointeger to ensure correct representation of integers, aligning them with Jass - Standard library has been adjusted to not rely on integer underflow wrapping --- de.peeeq.wurstscript/parserspec/lua.parseq | 1 + .../languageserver/ProjectConfigBuilder.java | 90 ++++++----- .../languageserver/requests/MapRequest.java | 11 +- .../languageserver/requests/RunMap.java | 147 ++++++++++-------- .../translation/lua/printing/LuaPrinter.java | 4 + .../lua/translation/ExprTranslation.java | 11 +- .../lua/translation/LuaTranslator.java | 9 +- 7 files changed, 153 insertions(+), 120 deletions(-) diff --git a/de.peeeq.wurstscript/parserspec/lua.parseq b/de.peeeq.wurstscript/parserspec/lua.parseq index 36f44c4a5..1cd286455 100644 --- a/de.peeeq.wurstscript/parserspec/lua.parseq +++ b/de.peeeq.wurstscript/parserspec/lua.parseq @@ -81,6 +81,7 @@ LuaOpBinary = | LuaOpMult() | LuaOpDiv() | LuaOpMod() + | LuaOpFloorDiv() LuaOpUnary = LuaOpNot() diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java index aae96e0f3..2d9a5cd05 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java @@ -31,57 +31,65 @@ public class ProjectConfigBuilder { public static final String FILE_NAME = "wurst.build"; - public static MapRequest.CompilationResult apply(WurstProjectConfigData projectConfig, File targetMap, File compiledScript, File buildDir, + public static MapRequest.CompilationResult apply(WurstProjectConfigData projectConfig, File targetMap, File mapScript, File buildDir, RunArgs runArgs, W3InstallationData w3data) throws IOException { if (projectConfig.getProjectName().isEmpty()) { throw new RequestFailedException(MessageType.Error, "wurst.build is missing projectName."); } + WurstProjectBuildMapData buildMapData = projectConfig.getBuildMapData(); MapRequest.CompilationResult result = new MapRequest.CompilationResult(); - result.script = compiledScript; + result.script = mapScript; + W3I w3I; try (MpqEditor mpq = MpqEditorFactory.getEditor(Optional.of(targetMap), true)) { - byte[] scriptBytes; - if (!projectConfig.getBuildMapData().getName().isEmpty()) { - result.script = new File(buildDir, "war3mapj_with_config.j.txt"); - // Apply w3i config values - W3I w3I = prepareW3I(projectConfig, mpq); - FileInputStream inputStream = new FileInputStream(compiledScript); - StringWriter sw = new StringWriter(); - - if (runArgs.isLua()) { - w3I.injectConfigsInLuaScript(inputStream, sw); - } else { - if (w3data.getWc3PatchVersion().isPresent()) { - w3I.injectConfigsInJassScript(inputStream, sw, w3data.getWc3PatchVersion().get()); - } else { - GameVersion version = GameVersion.VERSION_1_32; - System.out.println( - "Failed to determine installed game version. Falling back to " + version - ); - w3I.injectConfigsInJassScript(inputStream, sw, version); - } - } - scriptBytes = sw.toString().getBytes(StandardCharsets.UTF_8); - - result.w3i = new File(buildDir, "war3map.w3i"); - if (runArgs.isLua()) { - w3I.setScriptLang(W3I.ScriptLang.LUA); - w3I.setFileVersion(W3I.EncodingFormat.W3I_0x1F.getVersion()); - } - w3I.write(result.w3i); - Files.write(scriptBytes, result.script); - } + w3I = new W3I(mpq.extractFile("war3map.w3i")); } catch (Exception e) { throw new RuntimeException(e); } + if (StringUtils.isNotBlank(buildMapData.getName())) { + System.out.println("Found buildMapData name, applying config"); + applyBuildMapData(projectConfig, mapScript, buildDir, w3data, w3I, result); + } else { + System.out.println("No name found in buildMapData, not applying config"); + } + + result.w3i = new File(buildDir, "war3map.w3i"); + if (runArgs.isLua()) { + System.out.println("Applying lua w3i config"); + w3I.setScriptLang(W3I.ScriptLang.LUA); + w3I.setFileVersion(W3I.EncodingFormat.W3I_0x1F.getVersion()); + } + w3I.write(result.w3i); + applyMapHeader(projectConfig, targetMap); return result; } - private static W3I prepareW3I(WurstProjectConfigData projectConfig, MpqEditor mpq) throws Exception { - W3I w3I = new W3I(mpq.extractFile("war3map.w3i")); + private static void applyBuildMapData(WurstProjectConfigData projectConfig, File mapScript, File buildDir, W3InstallationData w3data, W3I w3I, MapRequest.CompilationResult result) throws IOException { + // Apply w3i config values + prepareW3I(projectConfig, w3I); + result.script = new File(buildDir, "war3mapj_with_config.j.txt"); + + FileInputStream inputStream = new FileInputStream(mapScript); + StringWriter sw = new StringWriter(); + + if (w3data.getWc3PatchVersion().isPresent()) { + w3I.injectConfigsInJassScript(inputStream, sw, w3data.getWc3PatchVersion().get()); + } else { + GameVersion version = GameVersion.VERSION_1_32; + System.out.println( + "Failed to determine installed game version. Falling back to " + version + ); + w3I.injectConfigsInJassScript(inputStream, sw, version); + } + byte[] scriptBytes = sw.toString().getBytes(StandardCharsets.UTF_8); + Files.write(scriptBytes, result.script); + } + + + private static void prepareW3I(WurstProjectConfigData projectConfig, W3I w3I) { WurstProjectBuildMapData buildMapData = projectConfig.getBuildMapData(); if (StringUtils.isNotBlank(buildMapData.getName())) { w3I.setMapName(buildMapData.getName()); @@ -98,8 +106,6 @@ private static W3I prepareW3I(WurstProjectConfigData projectConfig, MpqEditor mp applyForces(projectConfig, w3I); } applyOptionFlags(projectConfig, w3I); - - return w3I; } private static void applyOptionFlags(WurstProjectConfigData projectConfig, W3I w3I) { @@ -202,13 +208,19 @@ private static void setVolatilePlayerConfig(WurstProjectBuildPlayer wplayer, W3I } private static void applyMapHeader(WurstProjectConfigData projectConfig, File targetMap) throws IOException { + boolean shouldWrite = false; MapHeader mapHeader = MapHeader.ofFile(targetMap); - if (projectConfig.getBuildMapData().getPlayers().size() > 0) { + if (!projectConfig.getBuildMapData().getPlayers().isEmpty()) { mapHeader.setMaxPlayersCount(projectConfig.getBuildMapData().getPlayers().size()); + shouldWrite = true; } if (StringUtils.isNotBlank(projectConfig.getBuildMapData().getName())) { mapHeader.setMapName(projectConfig.getBuildMapData().getName()); + shouldWrite = true; + } + if (shouldWrite) { + System.out.println("Applying map header"); + mapHeader.writeToMapFile(targetMap); } - mapHeader.writeToMapFile(targetMap); } } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index d6462bdab..2a8df5f2f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -28,6 +28,7 @@ import de.peeeq.wurstscript.parser.WPos; import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; +import net.moonlightflower.wc3libs.bin.Wc3BinOutputStream; import net.moonlightflower.wc3libs.bin.app.W3I; import net.moonlightflower.wc3libs.port.Orient; import org.apache.commons.lang.StringUtils; @@ -36,6 +37,7 @@ import org.eclipse.lsp4j.services.LanguageClient; import org.jetbrains.annotations.Nullable; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -54,8 +56,7 @@ public abstract class MapRequest extends UserRequest { protected final WurstLanguageServer langServer; - protected final @Nullable - Optional map; + protected final Optional map; protected final List compileArgs; protected final WFile workspaceRoot; protected final RunArgs runArgs; @@ -138,7 +139,7 @@ protected File compileMap(File projectFolder, WurstGui gui, Optional mapCo timeTaker.measure("Runinng Compiletime Functions", () -> compiler.runCompiletime(projectConfigData, isProd, runArgs.isCompiletimeCache())); if (runArgs.isLua()) { - print("translating program to Lua ... "); + print("Translating program to Lua ... "); Optional luaCode = Optional.ofNullable(compiler.transformProgToLua()); if (!luaCode.isPresent()) { @@ -156,7 +157,7 @@ protected File compileMap(File projectFolder, WurstGui gui, Optional mapCo return outFile; } else { - print("translating program to jass ... "); + print("Translating program to jass ... "); compiler.transformProgToJass(); Optional jassProg = Optional.ofNullable(compiler.getProg()); @@ -439,7 +440,7 @@ private File loadMapScript(Optional mapCopy, ModelManager modelManager, Wu return scriptFile; } - private CompilationResult applyProjectConfig(WurstGui gui, Optional testMap, File buildDir, WurstProjectConfigData projectConfig, File scriptFile) throws FileNotFoundException { + private CompilationResult applyProjectConfig(WurstGui gui, Optional testMap, File buildDir, WurstProjectConfigData projectConfig, File scriptFile) { AtomicReference result = new AtomicReference<>(); gui.sendProgress("Applying Map Config..."); timeTaker.measure("Applying Map Config", () -> { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java index 2828a85be..d1f8146f7 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java @@ -70,94 +70,103 @@ public Object execute(ModelManager modelManager) throws IOException { } // TODO use normal compiler for this, avoid code duplication - WLogger.info("received runMap command: map=" + map + ", wc3dir=" + wc3Path + ", args=" + compileArgs); WurstGui gui = new WurstGuiImpl(getWorkspaceAbsolute()); try { - if (map.isPresent() && !map.get().exists()) { - throw new RequestFailedException(MessageType.Error, map.get().getAbsolutePath() + " does not exist."); + String ok = compileMap(modelManager, gui, projectConfig); + if (ok != null) return ok; + } catch (CompileError e) { + WLogger.info(e); + throw new RequestFailedException(MessageType.Error, "A compilation error occurred when running the map:\n" + e); + } catch (Exception e) { + WLogger.warning("Exception occurred", e); + throw new RequestFailedException(MessageType.Error, "An exception was thrown when running the map:\n" + e); + } finally { + if (gui.getErrorCount() == 0) { + gui.sendFinished(); } + } + return "ok"; // TODO + } - gui.sendProgress("Copying map"); - - // first we copy in same location to ensure validity - File buildDir = getBuildDir(); - Optional testMap = map.map($ -> new File(buildDir, "WurstRunMap.w3x")); - CompilationResult result = compileScript(modelManager, gui, testMap, projectConfig, buildDir, false); + @Nullable + private String compileMap(ModelManager modelManager, WurstGui gui, WurstProjectConfigData projectConfig) throws Exception { + if (map.isPresent() && !map.get().exists()) { + throw new RequestFailedException(MessageType.Error, map.get().getAbsolutePath() + " does not exist."); + } - if (runArgs.isHotReload()) { - // call jhcr update - gui.sendProgress("Calling JHCR update"); - callJhcrUpdate(result.script); + gui.sendProgress("Copying map"); - // if we are just reloading the mapscript with JHCR, we are done here - gui.sendProgress("update complete"); - return "ok"; - } + // first we copy in same location to ensure validity + File buildDir = getBuildDir(); + Optional testMap = map.map($ -> new File(buildDir, "WurstRunMap.w3x")); + CompilationResult result = compileScript(modelManager, gui, testMap, projectConfig, buildDir, false); + if (runArgs.isHotReload()) { + // call jhcr update + gui.sendProgress("Calling JHCR update"); + callJhcrUpdate(result.script); - if (testMap.isPresent()) { + // if we are just reloading the mapscript with JHCR, we are done here + gui.sendProgress("update complete"); + return "ok"; + } - injectMapData(gui, testMap, result); - File mapCopy = copyToWarcraftMapDir(testMap.get()); + if (testMap.isPresent()) { + startGame(gui, testMap, result); + } + return null; + } - gui.sendProgress("Starting Warcraft 3..."); - WLogger.info("Starting wc3 ... "); - String path = ""; - if (customTarget != null) { - path = new File(customTarget, testMap.get().getName()).getAbsolutePath(); - } else if (mapCopy != null) { - path = mapCopy.getAbsolutePath(); - } + private void startGame(WurstGui gui, Optional testMap, CompilationResult result) throws Exception { + injectMapData(gui, testMap, result); + File mapCopy = copyToWarcraftMapDir(testMap.get()); - if (!path.isEmpty()) { - // now start the map - File gameExe = w3data.getGameExe().get(); - if (!w3data.getWc3PatchVersion().isPresent()) { - throw new RequestFailedException(MessageType.Error, wc3Path + " does not exist."); - } - List cmd = Lists.newArrayList(gameExe.getAbsolutePath()); - Optional wc3RunArgs = langServer.getConfigProvider().getWc3RunArgs(); - if (!wc3RunArgs.isPresent() || StringUtils.isBlank(wc3RunArgs.get())) { - if (w3data.getWc3PatchVersion().get().compareTo(VERSION_1_32) >= 0) { - cmd.add("-launch"); - } - if (w3data.getWc3PatchVersion().get().compareTo(VERSION_1_31) < 0) { - cmd.add("-window"); - } else { - cmd.add("-windowmode"); - cmd.add("windowed"); - } - } else { - cmd.addAll(Arrays.asList(wc3RunArgs.get().split("\\s+"))); - } - cmd.add("-loadfile"); - cmd.add(path); + gui.sendProgress("Starting Warcraft 3..."); + WLogger.info("Starting wc3 ... "); + String path = ""; + if (customTarget != null) { + path = new File(customTarget, testMap.get().getName()).getAbsolutePath(); + } else if (mapCopy != null) { + path = mapCopy.getAbsolutePath(); + } - if (Orient.isLinuxSystem()) { - // run with wine - cmd.add(0, "wine"); - } - gui.sendProgress("running " + cmd); - Runtime.getRuntime().exec(cmd.toArray(new String[0])); - timeTaker.endPhase(); - timeTaker.printReport(); + if (!path.isEmpty()) { + // now start the map + File gameExe = w3data.getGameExe().get(); + if (!w3data.getWc3PatchVersion().isPresent()) { + throw new RequestFailedException(MessageType.Error, wc3Path + " does not exist."); + } + List cmd = Lists.newArrayList(gameExe.getAbsolutePath()); + Optional wc3RunArgs = langServer.getConfigProvider().getWc3RunArgs(); + if (!wc3RunArgs.isPresent() || StringUtils.isBlank(wc3RunArgs.get())) { + if (w3data.getWc3PatchVersion().get().compareTo(VERSION_1_32) >= 0) { + cmd.add("-launch"); } + if (w3data.getWc3PatchVersion().get().compareTo(VERSION_1_31) < 0) { + cmd.add("-window"); + } else { + cmd.add("-windowmode"); + cmd.add("windowed"); + } + } else { + cmd.addAll(Arrays.asList(wc3RunArgs.get().split("\\s+"))); } - } catch (CompileError e) { - WLogger.info(e); - throw new RequestFailedException(MessageType.Error, "A compilation error occurred when running the map:\n" + e); - } catch (Exception e) { - WLogger.warning("Exception occurred", e); - throw new RequestFailedException(MessageType.Error, "An exception was thrown when running the map:\n" + e); - } finally { - if (gui.getErrorCount() == 0) { - gui.sendFinished(); + cmd.add("-loadfile"); + cmd.add(path); + + if (Orient.isLinuxSystem()) { + // run with wine + cmd.add(0, "wine"); } + + gui.sendProgress("running " + cmd); + Runtime.getRuntime().exec(cmd.toArray(new String[0])); + timeTaker.endPhase(); + timeTaker.printReport(); } - return "ok"; // TODO } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/printing/LuaPrinter.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/printing/LuaPrinter.java index 23279d9d8..b23267d79 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/printing/LuaPrinter.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/printing/LuaPrinter.java @@ -226,6 +226,10 @@ public static void print(LuaOpDiv luaOpDiv, StringBuilder sb, int indent) { sb.append("/"); } + public static void print(LuaOpFloorDiv luaOpFloorDiv, StringBuilder sb, int indent) { + sb.append("//"); + } + public static void print(LuaOpEquals luaOpEquals, StringBuilder sb, int indent) { sb.append("=="); } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java index 5f7a10b20..c267f2836 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/ExprTranslation.java @@ -3,11 +3,15 @@ import de.peeeq.wurstscript.WurstOperator; import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.luaAst.*; +import de.peeeq.wurstscript.translation.imtranslation.CallType; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; import de.peeeq.wurstscript.types.TypesHelper; import java.util.Optional; +import static de.peeeq.wurstscript.jassIm.JassIm.ImFunctionCall; +import static de.peeeq.wurstscript.jassIm.JassIm.ImTypeArguments; + public class ExprTranslation { public static final String TYPE_ID = "__typeId__"; @@ -75,6 +79,8 @@ public static LuaExpr translate(ImFunctionCall e, LuaTranslator tr) { LuaFunction f = tr.luaFunc.getFor(e.getFunc()); if (f.getName().equals(ImTranslator.$DEBUG_PRINT)) { f.setName("BJDebugMsg"); + } else if (f.getName().equals("I2S")) { + f.setName("tostring"); } return LuaAst.LuaExprFunctionCall(f, tr.translateExprList(e.getArguments())); } @@ -128,9 +134,8 @@ public static LuaExpr translate(ImOperatorCall e, LuaTranslator tr) { return LuaAst.LuaExprFunctionCallE(LuaAst.LuaLiteral("math.floor"), LuaAst.LuaExprlist(LuaAst.LuaExprBinary(leftExpr, op, rightExpr))); } else if (e.getOp() == WurstOperator.DIV_INT) { - op = LuaAst.LuaOpDiv(); - return LuaAst.LuaExprFunctionCallE(LuaAst.LuaLiteral("math.floor"), - LuaAst.LuaExprlist(LuaAst.LuaExprBinary(leftExpr, op, rightExpr))); + op = LuaAst.LuaOpFloorDiv(); + return LuaAst.LuaExprBinary(leftExpr, op, rightExpr); } else { // TODO special cases for integer division and modulo op = e.getOp().luaTranslateBinary(); diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaTranslator.java index cd3a89b9f..e0f43a80e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaTranslator.java @@ -391,19 +391,20 @@ private void createEnsureTypeFunctions() { LuaFunction[] ensureTypeFunctions = {ensureIntFunction, ensureBoolFunction, ensureRealFunction, ensureStrFunction}; String[] defaultValue = {"0", "false", "0.0", "\"\""}; for(int i = 0; i < ensureTypeFunctions.length; ++i) { + LuaFunction ensureTypeFunction = ensureTypeFunctions[i]; String[] code = { "if x == nil then", " return " + defaultValue[i], "else", - " return x", + " return " + (ensureTypeFunction == ensureIntFunction ? "math.tointeger(x)" : "x"), "end" }; - ensureTypeFunctions[i].getParams().add(LuaAst.LuaVariable("x", LuaAst.LuaNoExpr())); + ensureTypeFunction.getParams().add(LuaAst.LuaVariable("x", LuaAst.LuaNoExpr())); for (String c : code) { - ensureTypeFunctions[i].getBody().add(LuaAst.LuaLiteral(c)); + ensureTypeFunction.getBody().add(LuaAst.LuaLiteral(c)); } - luaModel.add(ensureTypeFunctions[i]); + luaModel.add(ensureTypeFunction); } } From a381685594ed3485766d60ae893a6079d464bbda Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 14 Jan 2024 22:21:03 +0100 Subject: [PATCH 63/74] Use JASS_MAX_ARRAY_SIZE for jass class allocation limit (#1088) --- .../RecycleCodeGeneratorQueue.java | 20 ++++++++++++++++--- .../wurstscript/tests/WurstScriptTest.java | 7 ++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/RecycleCodeGeneratorQueue.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/RecycleCodeGeneratorQueue.java index b5333a48f..ef36b5bf4 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/RecycleCodeGeneratorQueue.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/RecycleCodeGeneratorQueue.java @@ -5,12 +5,21 @@ import de.peeeq.wurstscript.jassIm.*; import de.peeeq.wurstscript.utils.Constants; +import javax.annotation.Nullable; +import java.util.Optional; +import java.util.function.Supplier; + /** * Manages object ids in a queue. This way the time each object is * inactive is maximized and thus errors should be easier to detect */ public class RecycleCodeGeneratorQueue implements RecycleCodeGenerator { + public static boolean setTestMode = false; + + + private @Nullable Supplier maxSizeElementFn = null; + @Override public void createAllocFunc(ImTranslator translator, ImProg prog, ImClass c) { ImFunction f = translator.allocFunc.getFor(c); @@ -19,12 +28,17 @@ public void createAllocFunc(ImTranslator translator, ImProg prog, ImClass c) { ImStmts body = f.getBody(); Element tr = c.getTrace(); + if (maxSizeElementFn == null) { + Optional maxSizeVar = prog.getGlobals().stream().filter(var -> !setTestMode && var.getName().equals("JASS_MAX_ARRAY_SIZE")).findFirst(); + maxSizeVar.ifPresentOrElse(imVar -> this.maxSizeElementFn = (() -> JassIm.ImVarAccess(imVar)), + () -> this.maxSizeElementFn = () -> JassIm.ImIntVal(Constants.MAX_ARRAY_SIZE)); + } + ImVar thisVar = JassIm.ImVar(tr, translator.selfType(c), "this", false); // TODO change type locals.add(thisVar); ClassManagementVars mVars = translator.getClassManagementVarsFor(c); - int maxSize = Constants.MAX_ARRAY_SIZE; // if freeCount == 0 then ImStmts elseBlock = JassIm.ImStmts(); ImStmts thenBlock = JassIm.ImStmts(); @@ -33,9 +47,9 @@ public void createAllocFunc(ImTranslator translator, ImProg prog, ImClass c) { thenBlock, elseBlock)); ImStmts ifEnoughMemory = JassIm.ImStmts(); ImStmts ifNotEnoughMemory = JassIm.ImStmts(); - // if maxIndex < 8191 + // if maxIndex < JASS_MAX_ARRAY_SIZE thenBlock.add(JassIm.ImIf(tr, - JassIm.ImOperatorCall(WurstOperator.LESS, JassIm.ImExprs(JassIm.ImVarAccess(mVars.maxIndex), JassIm.ImIntVal(maxSize))), + JassIm.ImOperatorCall(WurstOperator.LESS, JassIm.ImExprs(JassIm.ImVarAccess(mVars.maxIndex), maxSizeElementFn.get())), ifEnoughMemory, ifNotEnoughMemory)); // maxIndex = maxIndex + 1 ifEnoughMemory.add(JassIm.ImSet(tr, JassIm.ImVarAccess(mVars.maxIndex), JassIm.ImOperatorCall(WurstOperator.PLUS, JassIm.ImExprs(JassIm.ImVarAccess(mVars.maxIndex), JassIm.ImIntVal(1))))); diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java index 742fa0998..7d1ce9d24 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstScriptTest.java @@ -25,6 +25,8 @@ import de.peeeq.wurstscript.jassprinter.JassPrinter; import de.peeeq.wurstscript.luaAst.LuaCompilationUnit; import de.peeeq.wurstscript.translation.imtranslation.ImTranslator; +import de.peeeq.wurstscript.translation.imtranslation.RecycleCodeGenerator; +import de.peeeq.wurstscript.translation.imtranslation.RecycleCodeGeneratorQueue; import de.peeeq.wurstscript.utils.Utils; import org.testng.Assert; @@ -155,6 +157,7 @@ CompilationResult run() { private CompilationResult testScript() { RunArgs runArgs = new RunArgs(); + RecycleCodeGeneratorQueue.setTestMode = true; if (withStdLib) { runArgs = runArgs.with("-lib", StdLib.getLib()); } @@ -194,8 +197,8 @@ private CompilationResult testScript() { return new CompilationResult(model, gui); } - // translate with different options: + // translate with different options: testWithoutInliningAndOptimization(name, executeProg, executeTests, gui, compiler, model, executeProgOnlyAfterTransforms, runArgs); testWithLocalOptimizations(name, executeProg, executeTests, gui, compiler, model, executeProgOnlyAfterTransforms, runArgs); @@ -213,6 +216,8 @@ private CompilationResult testScript() { translateAndTestLua(name, executeProg, gui, model, compiler); } + RecycleCodeGeneratorQueue.setTestMode = false; + return new CompilationResult(model, gui); } From 2cfe407a2c3a60954bf5a09ad11e8b3a86b02f77 Mon Sep 17 00:00:00 2001 From: Frotty Date: Wed, 24 Jan 2024 21:00:06 +0100 Subject: [PATCH 64/74] JHCR support update (#1089) - Fix execution - Don't ask for game path - Make use of JHCR reload status API --- .../peeeq/wurstio/WurstCompilerJassImpl.java | 42 +++++++++++-------- .../languageserver/requests/MapRequest.java | 5 ++- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java index 2578664f3..6f404664f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/WurstCompilerJassImpl.java @@ -47,6 +47,9 @@ import java.util.function.Function; import static de.peeeq.wurstio.CompiletimeFunctionRunner.FunctionFlagToRun.CompiletimeFunctions; +import static de.peeeq.wurstscript.WurstOperator.PLUS; +import static de.peeeq.wurstscript.translation.imtranslation.FunctionFlagEnum.IS_EXTERN; +import static de.peeeq.wurstscript.translation.imtranslation.FunctionFlagEnum.IS_NATIVE; public class WurstCompilerJassImpl implements WurstCompiler { @@ -111,7 +114,7 @@ public void runCompiletime(WurstProjectConfigData projectConfigData, boolean isP // TODO run optimizations later? gui.sendProgress("Running compiletime functions"); CompiletimeFunctionRunner ctr = new CompiletimeFunctionRunner(imTranslator, getImProg(), getMapFile(), getMapfileMpqEditor(), gui, - CompiletimeFunctions, projectConfigData, isProd, cache); + CompiletimeFunctions, projectConfigData, isProd, cache); ctr.setInjectObjects(runArgs.isInjectObjects()); ctr.setOutputStream(new PrintStream(System.err)); ctr.run(); @@ -119,7 +122,7 @@ public void runCompiletime(WurstProjectConfigData projectConfigData, boolean isP if (gui.getErrorCount() > 0) { CompileError compileError = gui - .getErrorList().get(0); + .getErrorList().get(0); throw new RequestFailedException(MessageType.Error, "Could not compile project (error in running compiletime functions/expressions): ", compileError); } @@ -205,7 +208,6 @@ public static ImmutableList checkDependencyFile(File depFile, WurstGui gui } - // import wurst folder if it exists Optional l_mapFile = mapFile; if (l_mapFile.isPresent()) { @@ -290,7 +292,7 @@ public static void addDependenciesFromFolder(File projectFolder, Collection FileUtils.sameFile(f, depFile))) { + && dependencies.stream().noneMatch(f -> FileUtils.sameFile(f, depFile))) { dependencies.add(depFile); } } @@ -352,7 +354,7 @@ private void resolveImport(Function addCompilationUnit, S // ignore this package } else { imp.addError("The import '" + imp.getPackagename() + "' could not be resolved.\n" + "Available packages: " - + Utils.join(getLibs().keySet(), ", ")); + + Utils.join(getLibs().keySet(), ", ")); } } } else { @@ -542,13 +544,12 @@ public JassProg transformProgToJass() { } - // translate flattened intermediate lang to jass: beginPhase(14, "translate to jass"); getImTranslator().calculateCallRelationsAndUsedVariables(); ImToJassTranslator translator = - new ImToJassTranslator(getImProg(), getImTranslator().getCalledFunctions(), getImTranslator().getMainFunc(), getImTranslator().getConfFunc()); + new ImToJassTranslator(getImProg(), getImTranslator().getCalledFunctions(), getImTranslator().getMainFunc(), getImTranslator().getConfFunc()); prog = translator.translate(); if (errorHandler.getErrorCount() > 0) { prog = null; @@ -569,17 +570,22 @@ private void addJassHotCodeReloadCode() { // add call to JHCR_Init_init in main stmts.add(callExtern(trace, CallType.EXECUTE, "JHCR_Init_init")); - ImFunction statusFunc = findFunction("JHCR_API_GetLastStatus", trace.attrErrorPos()); - ImFunctionCall jhcrStatusCall = JassIm.ImFunctionCall(trace, statusFunc, JassIm.ImTypeArguments(), JassIm.ImExprs(), false, CallType.NORMAL); + ImFunction statusFunction = JassIm.ImFunction(trace, "JHCR_API_GetLastStatus", JassIm.ImTypeVars(), + JassIm.ImVars(), JassIm.ImSimpleType("integer"), JassIm.ImVars(), JassIm.ImStmts(JassIm.ImReturn(trace, JassIm.ImIntVal(0))), + List.of()); + + imProg.getFunctions().add(statusFunction); + + ImFunctionCall jhcrStatusCall = JassIm.ImFunctionCall(trace, statusFunction, JassIm.ImTypeArguments(), JassIm.ImExprs(), false, CallType.NORMAL); ImFunction I2S = findNative("I2S", trace.attrErrorPos()); ImFunctionCall statusCall = JassIm.ImFunctionCall(trace, I2S, JassIm.ImTypeArguments(), JassIm.ImExprs(jhcrStatusCall), false, CallType.NORMAL); // add reload trigger for pressing escape ImStmts reloadBody = JassIm.ImStmts( - callExtern(trace, CallType.EXECUTE, "JHCR_Init_parse") -// callExtern(trace, CallType.NORMAL, "BJDebugMsg", JassIm.ImOperatorCall(PLUS, JassIm.ImExprs(JassIm.ImStringVal("Code reloaded, status: "), statusCall)) - ); + callExtern(trace, CallType.EXECUTE, "JHCR_Init_parse"), + callExtern(trace, CallType.NORMAL, "BJDebugMsg", JassIm.ImOperatorCall(PLUS, JassIm.ImExprs(JassIm.ImStringVal("Code reloaded, status: "), statusCall))) + ); ImFunction jhcr_reload = JassIm.ImFunction(trace, "jhcr_reload_on_escape", JassIm.ImTypeVars(), JassIm.ImVars(), JassIm.ImVoid(), JassIm.ImVars(), reloadBody, Collections.emptyList()); @@ -588,9 +594,9 @@ private void addJassHotCodeReloadCode() { // TriggerRegisterPlayerEventEndCinematic(trig, Player(0)) stmts.add(JassIm.ImSet(trace, JassIm.ImVarAccess(trig), callExtern(trace, CallType.NORMAL, "CreateTrigger"))); stmts.add(callExtern(trace, CallType.NORMAL, "TriggerRegisterPlayerEventEndCinematic", JassIm.ImVarAccess(trig), - callExtern(trace, CallType.NORMAL, "Player", JassIm.ImIntVal(0)))); + callExtern(trace, CallType.NORMAL, "Player", JassIm.ImIntVal(0)))); stmts.add(callExtern(trace, CallType.NORMAL, "TriggerAddAction", JassIm.ImVarAccess(trig), - JassIm.ImFuncRef(trace, jhcr_reload))); + JassIm.ImFuncRef(trace, jhcr_reload))); mainFunc.getBody().addAll(0, stmts); } @@ -620,7 +626,7 @@ private ImFunction findFunction(String funcName, WPos trace) { @NotNull private ImFunctionCall callExtern(Element trace, CallType callType, String functionName, ImExpr... arguments) { - ImFunction jhcrinit = JassIm.ImFunction(trace, functionName, JassIm.ImTypeVars(), JassIm.ImVars(), JassIm.ImVoid(), JassIm.ImVars(), JassIm.ImStmts(), Collections.singletonList(FunctionFlagEnum.IS_EXTERN)); + ImFunction jhcrinit = JassIm.ImFunction(trace, functionName, JassIm.ImTypeVars(), JassIm.ImVars(), JassIm.ImVoid(), JassIm.ImVars(), JassIm.ImStmts(), Collections.singletonList(IS_EXTERN)); return JassIm.ImFunctionCall(trace, jhcrinit, JassIm.ImTypeArguments(), JassIm.ImExprs(arguments), true, callType); } @@ -660,7 +666,7 @@ private void beginPhase(int phase, String description) { } private void printDebugImProg(String debugFile) { - if (!errorHandler.isUnitTestMode() ) { + if (!errorHandler.isUnitTestMode()) { // output only in unit test mode return; } @@ -715,8 +721,8 @@ private CompilationUnit processMap(File file) { // the war3map.j file was generated by wurst // this should not be the case, as we will get duplicate function errors in this case throw new AbortCompilationException( - "Map was not saved correctly. Please try saving the map again.\n\n" + "This usually happens if you change the name of the map or \n" - + "if you have used the test-map-button without saving the map first."); + "Map was not saved correctly. Please try saving the map again.\n\n" + "This usually happens if you change the name of the map or \n" + + "if you have used the test-map-button without saving the map first."); } // move file to wurst directory diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 2a8df5f2f..f0bdc6198 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -459,14 +459,15 @@ private W3InstallationData getBestW3InstallationData() throws RequestFailedExcep return new W3InstallationData(Optional.empty(), Optional.empty()); } if (wc3Path.isPresent() && StringUtils.isNotBlank(wc3Path.get())) { - W3InstallationData w3data = new W3InstallationData(langServer, new File(wc3Path.get()), this instanceof RunMap); + W3InstallationData w3data = new W3InstallationData(langServer, new File(wc3Path.get()), + this instanceof RunMap && !runArgs.isHotReload()); if (w3data.getWc3PatchVersion().isEmpty()) { throw new RequestFailedException(MessageType.Error, "Could not find Warcraft III installation at specified path: " + wc3Path); } return w3data; } else { - return new W3InstallationData(langServer, this instanceof RunMap); + return new W3InstallationData(langServer, this instanceof RunMap && !runArgs.isHotReload()); } } From 9bbab58f853d9a29739ed4e3d17076c5bb56f359 Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 12 Feb 2024 11:03:54 +0100 Subject: [PATCH 65/74] Don't rename functions marked as extern --- .../wurstscript/translation/imtojass/ImToJassTranslator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImToJassTranslator.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImToJassTranslator.java index c6c1a858a..a4d47c7f7 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImToJassTranslator.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ImToJassTranslator.java @@ -277,7 +277,7 @@ public JassFunctionOrNative getJassFuncFor(ImFunction func) { } else { String name = func.getName(); // find a unique name, but keep special names 'main' and 'config' - if (!name.equals("main") && !name.equals("config")) { + if (!name.equals("main") && !name.equals("config") && !func.hasFlag(FunctionFlagEnum.IS_EXTERN)) { name = getUniqueGlobalName(func.getName()); } boolean isCompiletimeNative = func.hasFlag(FunctionFlagEnum.IS_COMPILETIME_NATIVE); From e17502cc29a5830dce10d7ba082d70b2c4ede3d8 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 3 Mar 2024 14:36:42 +0100 Subject: [PATCH 66/74] allow unsafe injection of lua files --- .../languageserver/requests/MapRequest.java | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index f0bdc6198..4b3b1227e 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -45,11 +45,9 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; import java.time.Duration; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -477,6 +475,7 @@ protected void injectMapData(WurstGui gui, Optional testMap, CompilationRe String mapScriptName; if (runArgs.isLua()) { mapScriptName = "war3map.lua"; + injectExternalLuaFiles(result.script); } else { mapScriptName = "war3map.j"; } @@ -490,4 +489,42 @@ protected void injectMapData(WurstGui gui, Optional testMap, CompilationRe mpqEditor.insertFile(mapScriptName, result.script); } } + + private void injectExternalLuaFiles(File script) { + File luaDir; + try { + luaDir = new File(workspaceRoot.getFile(), "lua"); + } catch (FileNotFoundException e) { + throw new RuntimeException("Cannot get build dir", e); + } + if (luaDir.exists()) { + File[] children = luaDir.listFiles(); + if (children != null) { + Arrays.stream(children).forEach(child -> { + try { + byte[] bytes = java.nio.file.Files.readAllBytes(child.toPath()); + if (child.getName().startsWith("pre_")) { + byte[] existingBytes = java.nio.file.Files.readAllBytes(script.toPath()); + java.nio.file.Files.write( + script.toPath(), + bytes); + java.nio.file.Files.write( + script.toPath(), + existingBytes, + StandardOpenOption.APPEND); + } else { + java.nio.file.Files.write( + script.toPath(), + bytes, + StandardOpenOption.APPEND); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + } + } + } + + } From 55812d780c1d173d14870ae72db7b39a960bb049 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 3 Mar 2024 14:51:46 +0100 Subject: [PATCH 67/74] fix map script caching --- .../wurstio/languageserver/requests/BuildMap.java | 3 +++ .../languageserver/requests/MapRequest.java | 15 ++++++++++----- .../wurstio/languageserver/requests/RunMap.java | 2 ++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java index 88877a8f2..326b7c8d9 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java @@ -52,6 +52,9 @@ public Object execute(ModelManager modelManager) throws IOException { throw new RequestFailedException(MessageType.Error, map.get().getAbsolutePath() + " does not exist."); } + MapRequest.mapLastModified = map.get().lastModified(); + MapRequest.mapPath = map.get().getAbsolutePath(); + gui.sendProgress("Copying map"); // first we copy in same location to ensure validity diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 4b3b1227e..566bc4ec5 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -62,6 +62,12 @@ public abstract class MapRequest extends UserRequest { protected final W3InstallationData w3data; protected final TimeTaker timeTaker; + public static long mapLastModified = 0L; + public static String mapPath = ""; + + private static Long lastMapModified = 0L; + private static String lastMapPath = ""; + /** * makes the compilation slower, but more safe by discarding results from the editor and working on a copy of the model */ @@ -378,7 +384,6 @@ protected CompilationResult compileScript(ModelManager modelManager, WurstGui gu return result; } - private static Long lastMapModified = 0L; private File loadMapScript(Optional mapCopy, ModelManager modelManager, WurstGui gui) throws Exception { File scriptFile = new File(new File(workspaceRoot.getFile(), "wurst"), "war3map.j"); @@ -393,10 +398,10 @@ private File loadMapScript(Optional mapCopy, ModelManager modelManager, Wu "RunArg noExtractMapScript is set but no mapscript is provided inside the wurst folder"); } } - long mapLastModified = mapCopy.get().lastModified(); - if (mapLastModified > lastMapModified) { - lastMapModified = mapLastModified; - WLogger.info("extracting mapscript"); + if (MapRequest.mapLastModified > lastMapModified || !MapRequest.mapPath.equals(lastMapPath)) { + lastMapModified = MapRequest.mapLastModified; + lastMapPath = MapRequest.mapPath; + System.out.println("Map not cached yet, extracting script"); byte[] extractedScript = null; try (@Nullable MpqEditor mpqEditor = MpqEditorFactory.getEditor(mapCopy, true)) { if (mpqEditor.hasFile("war3map.j")) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java index d1f8146f7..ee83ffa4b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java @@ -98,6 +98,8 @@ private String compileMap(ModelManager modelManager, WurstGui gui, WurstProjectC // first we copy in same location to ensure validity File buildDir = getBuildDir(); + mapLastModified = map.get().lastModified(); + mapPath = map.get().getAbsolutePath(); Optional testMap = map.map($ -> new File(buildDir, "WurstRunMap.w3x")); CompilationResult result = compileScript(modelManager, gui, testMap, projectConfig, buildDir, false); From c44c70133b9f22844f307e2172966292b79bce4c Mon Sep 17 00:00:00 2001 From: Frotty Date: Mon, 6 Jan 2025 23:20:24 +0100 Subject: [PATCH 68/74] Fix exception when hot reloading --- .../de/peeeq/wurstio/languageserver/requests/RunMap.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java index ee83ffa4b..314c2b2c2 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java @@ -98,8 +98,10 @@ private String compileMap(ModelManager modelManager, WurstGui gui, WurstProjectC // first we copy in same location to ensure validity File buildDir = getBuildDir(); - mapLastModified = map.get().lastModified(); - mapPath = map.get().getAbsolutePath(); + if (map.isPresent()) { + mapLastModified = map.get().lastModified(); + mapPath = map.get().getAbsolutePath(); + } Optional testMap = map.map($ -> new File(buildDir, "WurstRunMap.w3x")); CompilationResult result = compileScript(modelManager, gui, testMap, projectConfig, buildDir, false); From e479892315b1f57f0a05d09de516d7d3ca22e932 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 23 Feb 2025 18:04:08 +0100 Subject: [PATCH 69/74] New binaries by @Cokemonkey11 --- Wurstpack/wurstscript/grill.exe | Bin 254976 -> 1630690 bytes Wurstpack/wurstscript/wurstscript.exe | Bin 375296 -> 1630692 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Wurstpack/wurstscript/grill.exe b/Wurstpack/wurstscript/grill.exe index 9cbeebf243680487ab3e2849a3ca5907d945d21e..17545fed9098b554c93c0e4b8c845df9d04d5282 100644 GIT binary patch literal 1630690 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

bTH~9)WPadBHMt$(gwTO5v>v_ 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 H0-c3zUd` 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

w2RQUPD+F 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%0AX|v* zS6s8yjD7!M$sX-3H=n;RQ5DquXm zRV$Q)0ME6?j1u05TfxI`iZTG!xp%5j_fP7w3crt5#I;r5peY`^kAbFon;Bg$#dr`rpC2iDRVE}WIS-g9Fk zh6HbJWkZ52Cgey<4SB>6B!fbUatKm2hR)DK9+qx0b*vz*8g}aX^iS1;`tP#8r%JLD zOT#9g%EAlzTNz$dSx0>PmGrY)Mb-=v-+k=sjRL4@g*kQm@i-9x&`kE(=Z@8~0Nc9? zl^!2^y~@gxN*4QDWR=Q8k5J3S>Ju`9`ZQmEstkRfPv@&oC~efIGvyQAup;b}?Gsb??J+(x#%k!$a=MwEK- z|2HK<8D#!IEMJktYw>RILv`g;K|te1R^2pVuo6VcI3SRmD>f)8( z^D6#?WlEnbjV0bI^BKOau>J|QJ?if&L=|M!&sUGtm-A3Jv(;ZIzed;Jq#sN5qd`9& z(2q6xu}(i)^rM4^*<5e)kbj685F9_Qg*3ZaBo2`$t@=*Z*@{>4*Js5gjuvg1`XRyX zq-Fh(z-_!W=*I*4u|_}E=|>9>n(W{q|K!4~M$8qY#U{q7FgZS*4q5g014E2<6%Q(X zKtI;#hq&F6h|W(Q9r|JGM~{9K>oJbgW1Q-Yk=#r5_iyXRHTn_Ik6HS0l739oj}iLu znI6IWdISw5f{J-e9|`iSnseGJGfq%JwZeAMVIotjc@rc$Fj~FJsO0rsUb&p^?WJGx zS$k^t^e-nl9+$dOZ2UkG?uY8te%8r(=W9Nzv%AAs+mqEu1V{X=M()tBZX;ip*VwZH zH)MK1s8D>h^v}EQVR~$TuSpR5*_kq=SiMZUS%Kmx!5w6;C~~v1XC!H8FGlj}36D~+ znOZ)hHQ7vg5lW(+=Q%oy^nNlocHe4gYi_}PtEDGIv)pJrwH1#^pJy|_eZ{-xSgTZ) zVEn@TIk8o%IgiSlQ?P2aEVj=6adfZ8^BOml`-*qYvHqfRpn;Jc;308TI(craPK{`8 zL0#NwrHP$?C-=E}syrK2$*ps(U#LuSRxwT!&?F;j)K#Es;?4Z^B3ZcfTIS;dU+lh-Vj&08_|Cm=WQUV`@Yu1tGdLu2#|uax#yX~37ASvSHK_D#lApBa-opE4d< z!R+xU2p%||6HvY|o)gu06nzjKWT|X(ZX4lWh)|~H*t8Tx2jWkPpk>CN739)@uTI?h z>=<6@ruF3gtc5z#BiX(LDQ~= z?;k0Z2P*@y$GTVzf5pr6+>~F&yqDGFtz5|l7_go#21r0jX^L^ol%4E46A%U2WfMxBoDDCi3-nZ&G2K|j%bE6$q`jc^Djag0^1yf{P|z5<$QSb! z{bI&e-??=~0a`FtH+hYDuW`Qf8Cv|mNBTTV&Q{RE>5Bl6Cw$ryNV1LUx+a0vEO_M# zgY{DP_^lM<@=R3!$>cL6NTAm9q}V|C_QfBb8@oLIYj1a(ptnG-rV5Q{v3#CJmx$<3 z!MHcy+r4#e!K%3Ii5dFg69UrcEAD`Rs86U_g`fIwAs{EsiCtd*aQ9Zoj@nTvCSpk& z2ZtW7XR9jMGS|`{i4#|MuvlhaZNh)T+(<7&MzP_NY}1X)UD-3K!_7Fcc0ja{=k;O%Y~qAc^NXmTsp1p7R#azS-v@f*+) z^+|}bw|m>%f?sGJX9 z7ji6(t4n?VFjVHVUJxO&xe(Y?a9z>DgrZFn>U%diTuPKRerG;c6}>NW@cC1^T}|of z3QQ%d0@ITeys0pRF8w)VKEcXF@_9-)8=Mr$na}%H3rU$9`^D;iNUj01s)4j6J*#zJ zU{)IykY>;7PX$P)%Pyz%L^+rsGux4#Ss=X4omm0Y1w+z+8sQ`|_Lz`}Kt&Q0{-i(p zPbT(Sa$FcM6iSc%u7mIQ70D*1_cIqn8v#*bJqn1jpCPS#mYg1x5NaP#lDa%$HJ^>i zhk1AB6MXk7UlO)9DYE!wlzVDE@fwT1>0*2qzfh+*9rl^Ha96od1ncmBf%S>-1KtBK zctWSniQT7Iw(j;h1@{et`EV#qXb$FcKO!_)k?ey_%ByWXDUqh>PyyN5=QNBdW6zMi z6hl-bB8R*()9aY}VEmpb9^oP!`Bt{(X|cMIv&cVV*SU2gHG#!AV%{6VJD|*YJvAny zzl2E;YMD2Fm)>1+SvmWKb>blKSQZoKuXq6n&d~VN>4Y?Tgu(zVV7M;*K4HR>JE%Ub zzsP3mWIy?_{=?-)8LNPqNQk7v8f(fu`>qkHgw#nCyN9S$f;8Bi)yZT02y zcB!K3`$>du>-kwNxRALFm=!ugcs>> z`QoyvNr}{uRla+Nv)`rj824RFmYJK4`{wdg7_^BghnrG3sChgWf4(q(Hx>+pAClO5 z(C){CvZ|Ok3R1C72!&v{o)pkg4P@7^`MC`LDDQ{xkMMH`sedistoxo+S>zTc1?Uis z@QKM^c5@HCTtKL?Lo6chLob-lV$>}sM=slke&vhtdq$m43M-!Pbkzr!=SxoG1G5>w zpRvuv_2@~>FFh#O7>GS7EVdEaX2EeTUqy$Sn&$V=L* zZW{ca{S#e2^#@hn^ElZjO8HADPrbz?P-L>CA1&!;>-4EQ-J8xoNvE4S{SHY#S@I9n z{a7RE9K|DHAFq3HF}=vr4;^`(>f3zsiJp*rMWoP!*L00TpP(XO_)^NK z0PlYI+!cEzqbQp`;YSb$d}G6xu>_T?IF!B?BdYX4x17|KxA<>vQR>=M@i`@uJ(GEXbRKVjCE#J6kHwZt2nCx}_Vv01Ay^8F5?||BSHMy$?~rYV%pT zX{k6g9Wh_ELO;wBPIj9_zz?O`Iuiau=37J)SxPOyIr<`AnyWN_A$eSd5n-^D!breX z@^f~Canid;ZVrbr*ZS*f$>hi=Ki4u!omyCtDV>G}R~bo5j>WnItJUttIQITl5Sa|eBMKaMDeNl$L&aXMP zzxfGIwXfnMBmQ$TCHoM9CmzHRfebaDTU@7t4_Vk zu|k%9sL|Ee{E3cRdPcN1OqSB=!+j!yrN$~1OLp=%MR-F=>9u;Q%I%=B;bk=1fr>r+ z>IoVbd?xqj)}1f%8_F06AP$}L1Mx>Q_{5$d?)1ffP*^1*j-!G}+ApzgNG*czs9>;3 zdYG@MPb7Z_PW2pzn`!;aL)n?1lqJf^zeeSMOyD%Fh50r`5ax-=#D?p;)W!2cr>5#w+^4Rm3jiu!= z3{4-*qk@`p>hy%CiRk}9^4HSU?w#3En459YcFFKJsoC0$t^;L(V{n$1$6$37KKhVv z1%;5ud{3rR2J`p zeyEQUCy>jQf9w^$ABk+$W3q5c7xS3ZB{d`Bwx@M5C=U|oV$?^EV3%!BW~; za+(|iJ2Ede_iC0KldGt2z%08Z7H`4yM(N0_EJpFBnq`-tM76ehjSqdy|I3Y_%pJ$hzR!dJghB%nxhadI|=~C*gHCnypOsS~1ls?Am*(S=a z;#RZDFqJLI^o2~B>@`U{4 z8yV2dvcRquo?dmhWu-qnQCaNUOriqaG6BTo57eBx@{{Nb!I}2t%Ot1al~v2pFNz{> zKKiZt%QM4GtG7JuX+6w+YOH<+qP1J~iq~PP57BO^FTze$Yz_ZX0qM!IX!Eny3lKe2 zzvW{kWU>dD&o-nGj_~w+zK|cRfSie*K&;@I%l&|vOGO0#FBJSw?-!qs|DGkMG2KAD zP!YmgKA330Gf@~ zo!Gh7zn@rUE8$g&!|bX3v7rA9AvbDY$RRULG~_A|rF2zsyF0tGAZ9EZT+`#fMW)f2 z<%2Jn=hn;KgF=jpw>z-Hy{!_33wfk`Acd(q$u31=vSnP6dE)TarZ7LZD_zFOC;FVm;b) zU4_7t2jeplI|IM*t*c64PHKY^Hdig#CCM za^+NV+u^mci5C60o4};o*Xy+JxoL8U6eJCK^_LGRiTSo)QhuV8FPg8?pUX;DlJp0c zsPs3o(pCPy>GWmPO|vIT6Gurs&yr5U_o-OL9ob{=VlhZ5%=DtwZYGUh6zkH-S17IY z0n2sih%RkEtc$kFcNwJ^gx;sq#%3D0OILQ;!>TJG8PZwOmD6+=Q@ZOuNmnBH1l>pt zwPuO-vzP$7`2n>cj|e7_Weic|D}veR`v%B!HuVpYo9U|Xma%h0ptuR;HVA0CG1XY4z4%g=3-v7 z4gnh#&TYRd?;gSvcdHMZFkmxQ6u@J$y<(%XgjBJYOW3oG`W3wRVxmddtWI$yy|c_4 zzpE1};WeuI0!9@UCt@o;UF>@kdrE!rYrAO2XH@O>8$?7x^^r&tuZCE5oyFex-93Dy z~|2(j^Ni`Pm^Q&okq*6h~GSzZ>I5j3lc*HE9?eM|AjU!dw0dM()Iek$GHD z>chvxSKezhbi$W#O{3pB;NP}aJjS=ZM?jgI%!>U+{poyDX7qccTiASI4XH{KljtUY z1;H>zs~itDC`b(6zV2c0)mPs0z~GB6gV2lKVt%6~+Iy)HeUS=+=#98$7Es&s-vxOW z$4>Hy520t6RUc7{+arP&ZI^kiPpho=h)!1)v_1+Nk8_Fpb}Wn$kRIRZPo&DMg8|PQ zRTh_Teq24bAmAwuTK^CWAnukT6dbuQ7pR&Vv_8ZdZXd6Eut{dUl4Vs^r{B}!<3>>r z-dh3dLu!SeXd@r1@?IIQ%6y39PEWg+a5$dL$Xlca%lx$|IvEj-5K$`lpDOcqV|T7n zrE#JHml2X@I$@(3#KM^YE5!uc6yE8tmDAn`ZZ`8VM7|D>ZX)Jf8IZ@qrGC$gm?Xm* zoFA}u`taRgVPqbtP6wcY`+1n+{%xJi4gcj9q7D{VZtW9WCoCE(8E=~(dsM0)SKBAH z%QfSpec!A(XGUwZZuB+{{p#xl1jZ#%d5^cG&PZ2C}LC{ zlAY66UiH@!v!JSy0hvK-H@9Dn3r=o^aj|wxi$`b;uf4d42^bM~5FcZzSdtf1P3J%J z`k>_Sm*Y0FkX?8qmczlx&zs#uomqA}HbBa@U7g1h3Ce0yS{vc*j5==L$}61C^<|K` zhoug@{LugKtHC#;A2#5;poEcX<2X59NQk>0%A5*S@mVcTi!Ui_3256`!EVBpYZzLh znx8|8jwPGnEbzMpEHkyfN1-_|IhD!{kvR%lQImHZMDjrs5V7PXkH`}*>f3tM)j+X6f<6jwYY6pMO z+4ecs`W&D69LGp%@d6qCjpg4+pQ9EF#Ixk#*zd)|q4yHP0&BnD>#@J-v%leSeC~1l z#e2zv3t(@u6gf}dzW{(>9Yg> z(XacA!@l9~-4MxPL&^yv9Q4_D-xL{Pc(#1vj@()zk~3iHsu@_KRMhwQ97pG^f-4kA z6OEUFw!pk(b4ZqRhW2C&>A;GW1+28En)vAq)?bdz9*N`izWp#brHhrZ31yS6tS^X8Q9P>6g)1 z>^3ufDiyPlJSz38^y|#@pP~szdJ_-xKICH3NeGe=5Y7?K#ydqNRZ9|l;RJrt<1>Du zO8!!6R7}*zZk7HYW)B{gbj3uyLpn9y`T_~UmBfzIgtCuL`gbW4rl<_#IS^a9YQY)2 zFBbEvTe*cXo4>#E`D400i;1h5{&a**883Do@h7sC>pSk2LhH%|;Fw=2`Bpc7Sit-{ zBcKoF&B$cV$>MchaS(7SH}YEv3d+?18st%5iq%cV?qYZtSL9~67GX>_!+W6NF8b4O zElq6Fh0e&$a4k_7lg)4~oFC*PTnlQhyYnas*Mg);m25Ig!nH`r9CzdnxE2I%?wwN7 z)Qp8|G4-UJk#ArdAPmnI9ac%WmMC0{WBqDjDIA-$*PFmts##pCILUjOP@@-C(yRxr zB3@j3qz}qB`aMTNop2T+o-`{#$KSM8yy{7rvv2`EB!m?yHloNtkX( z6n3-E{4>DBjX&p(qVyKy_`D`hLodGA;tQzT+P24~x9!!kZNDbFwiEjj*|p2lyY_0? zwO^A>+x(cFD6=;0Vd+hKwQSn2$)0Uy>YW&p-m_QBp8c9^+2+T55n*5;%)gcLk4%_F58p7@osa|1d_*R2we;58AGE>^3Gv;=1D5PlFTYW03`zFN9L3vrCK`RpIyU-aKS z##S)Q@;hQ;A=)+0nt`~OPzG~~3=8e%C?9vvrR{1|nd0ayxtUYx| zzC?0&$?%YoV_SfGwA}v#{Q3HHjIS(%1-dC^VN1rQF@wJm7Z#(%<8E?im{z&eAjxy0`IuKtXp0K*b;Yv(XF}cH-YNDIbvq zTvZ671xrh`r_SSrp^nYgo+8v6sO&Dmq9OXk?f7|QzUwL)Y*_$6&+|AoYoYIh9A2ZW zu%e-?i0E>WL4y>?rxxS2OIR|SmjFxlT0WyLKq<)0)Uwr(eH+aB{6%qDE!-|j#h$}E zRo&jmuua147&GvgRaOWGZj;)jovFn=S2WKHHqV>lv)2;H!I-LgW9AoB{F+rL(r*Fv zs!lYNl}YFLpi4e|>T389OfZ#6xQI`bbO)L;`8h>Xe$SS@W;j`5f$@S_{Z^QK*V~eQ zo}`zX>D$co!;*f!q`OHs{gY&PCl!F7LkASV9lQYWskz!yV|c~U5ir+NU=|pVOqQdV zWj>2}@R2O;LDapfvuamhiU0@LMh5+iMj3qy^q$DgouEQjkg5ApAAV!B^x$zm2(4J* zD^n9a%GufIjr4m%jbzZPJgS;}nj5D}1ve9?uaRjsZfRt0T#c$@iL1#iZ8Q5nIAv~` zN@ZN>auB?`(X7zbScHm)%WyTG!xd7?x>q*a8@3*G>OKL0aC~sdT3Jh1W(x+wNd_!1~%B!5Jdw4EA+Gp-idEDz% z$eOqmciMSEd-^86raWtx*3KJ_*24&ruP+%qfwf1NiqZF2{~w6T7C4A{oLV zZa+m>@EeM&19JL)R~6rB7EhcxDKdIUWb_Kheygx^_J*IGjccqp?&&*VVx5i+&fta; zcg>6rv2b8p zz1kBQI0gxR>{4;qN*N6w*G2e3M;kB}*ooQ>R^~0-s0ax&xkBasQ}`W@oiKT#9ryMx zEbyk`rQplv9vO56`JAgR2fXF+6_0{v=J`(iHyX`Y?UUu1yO4o|bJjC&zv0z$&p^YA zGf1(7uA+pg4_Z^J$cS{uJdmo<{i@e`ookQn-RWEK7(_tUFY5?Gu&)a>U{amFQl4$mkL>Xqvi zf=o5ISII_*mT0jazImjQOTGP&_-0+aF35+ZJjGmZEFQ1$%+d1r@)|bEG(F6)&-aAq z6nnyDBlU0@j-UoLv2!|C^_E6txi@q+b1~XynO#VNW$NukV3d)i-TI_=wkGviy78-M zwQ`^QC|1;m{LuLQowt=J6+r{93f~|B;2aeS56O`M$ohv~s4-4V_G_%_mkhp~hPu%= z+Dmh!2*Ej7{B)e%#x?Fx9O(k8$s-xs-+n0lmMS`@7Ihny@)d^EQIS5n5x<@Csq=eg z{oUa8D^;nQtdqfODDt!~fESMEmI=r+@CTlODIdwb2bkzC=DiRMIe)Z57Kw)WqQV3) zf`STD&NrWp>i4Q*9;kr|wl&wgTiE7ubLlHTTPYk=Owb9O7M2(6bl%e^QDVlni*=p zc>dY2e%`s+Hs3u%k;-pzcE0ai&P~SJ#N1H(%s_7(n;5l;3FC`7%tgm95+5LLoPJF- z)kU@17`JYNyg$gc;f=ANaFVtnr_i}dL`%+>FLo|pkhqizoH)~oCeC**e<)GpT<%Yt z>0CZHafTVZ!MXfmj!{Of@`qaQK6-JD@0hD*`f*o{@ADdWhpVO>duds1U}9wYQ7~r- zs9K^RkX}!W9}yBDei$8aZN)&l(Hv@BRJD0Q&P(>h)!buDJyZ2_}ZhzU9nCEkpco zBRh|AELS%=#C9nfkwXLj8*WO8TFCI@Nd@onTt@^?x9G>|KS#s(2ls))I{v&@c10YGDtcau5+ z40JyOO_B&4aYtjvzGeCw$B&KL4;22E$qbYk+d@Y#oMq8-SuDu!! zwGAci7&4TOdiNoY`R;=d6Jx)#Ha-wWc=z|R#iwq89RhLKOfKY#TT7<3n`s4^X-CYo zyv($tW?D{W+Og1w8e}Y|7eN4z*SkMoSkd6hJuov+@5(*+U4)y*D^McgfPWC*;5F0w z)I0n3iHpcZhWb#vH*e0vQ5z5cC6aV;oSv(XbK`PNFKPaGD{qpGd|LHe{4jyxsI#$O z`uo=R4jS`w;YU@6btpD(+M*ffV67Kw0&k807<8P zY^DK_bQ%FcrAh#jPWu#qKurhNOmC}q?^odXP=O;R;ApEbrU*D#U%hK?>Qg_ZZ=b}O zGRX6BiZ1&beRcM+iCCaaIE&2nCiL3bN9bqY)1jZxn^Dnm_D2SVo!BK?%vX3~u_Cms zU8|~PuQ0hYMT*tQMyPR@^)CEP|5Y{{p}0z?<@x)Hn3GuzyM9nuzSfM_CFj*k;5Eg+ zVv4)b3hi2MA!D94Kb zLCGiHZ0yZl+E?^rFWBN-C8C$|_>Ui8hBEqR?Xo7lZdDmaNX8!cy%T)tyZX~TUo(Sm zsdu*q>)js)Ev8w>kvAe}j=z2AH1+bj6mpbgprSOABu9$HW(9G!)?tgMnk@Er?#X1a zQ}GY(7lJhFklpSdk>U}|-v3zjUeQuB;F}CWsbpNaQMI2RjV-&|B&BlAlbR3csq6@7q8-)dJCsO7 zq(VB%lZZl=ObjAIuf)yjb#=-c;ToG9q4+OjJ=_=`YP&w{x1q1UU3VN7pP0rruj5^B{=44c zZ|TE3kZ$8mJQOXIIyZ@kiBLz0bCd0>{`w27zV7D}mXfvfh3#5Ktxs#{n^=OI{0^1Z+z+k%OU(ReAp}0gmoM=K zn;7skc}+Vn_PmlBaB6+&;n9Q-e!LIk-K9H@>G|k^y=M)4_;!6b_dDAI`6xvo9c!Am z2@k&hb290NbXSS$1=a_WK`s&_IS~%8)M_15xkU(dXc*c{h6hZ-P+&7)$&;_D4U@c)EA;;ifqdMK4ezc z{avuJE5Ek7MhJy4@;$A8Gd6>+7y>Kqd9rw9P?ahwtRvhys%h;tZd*N`tnoU}33u3h zKFcj>F^e!P?~#QBM3Xa#T+`LUI+2lckeTDbR6peFzwuR~$f%WR<(NheiQ?g0B`}s; z3(18@oPTb+QFmx_-g>dW$jNI=l(Jp5A1WK26F5tUz;NakQc&=Wj8%3lJP)Rm4}M>g zg%~jo`~`&8$&CE~k8r58C4gX$^&O?JZ!6hoeeAajASCvy z5%HxD+d-=D=Knt2wZ3akT3`8Bs&C{;>+AQG>MJ~HeXq_x*?2AL*I64JYxDOik8c3V zOUmQ2-K69XP{-8w|2Dr1l9>D`8xWf#xbvG4L3tY6!gj+w`q0Eedmuk_Eh770Niv%Z z53;#2=k}p|H=PR)_h^(F33{3PH!jI|Z5MLSlbP}r@&sq67xM%)aBn)Fghs$z?41YEgytJ+<%Nc-K$riZZj zV)bxG*T|k3JNqJabgbgtJfD=uD>yA#{6yyc`Ux`yn3rWt)DNhDiHb@^fCJ#DUH3)Y zQd%VLLUX8GTe;2av&6;HrqKq~#cGWk{N!SV*V-liF!bmOj zEWbd6Mwx^k-JOO9Ydakl?KACRdxiEXTkONl725rq4rp^Wzx0{>A*H24o3(?K4U*DC z%D2{6Xp4Mp6)x?KXikN$JrS+Y-e}H6#2=U^_i}+b+KM`^U?+6a%fLO_%DM@ic#@uX zd)Qf!Vl|?G{Q?!qjnir*cUF~}-<}2??K0@}{N}|b-GNGv_{XlG52y`{+Eq~<#Y(Y` z%SXD@XjfFusjf=7NECG`ZY4F>4tMcR4h%=X z2ll8aFFpZHo;Nad%&t8(fhko+t1%NXWU5zzAgg!^tQy!-cokUXgia4uf)#8Kh#6yN z-)`c@uQ{5Ek%?Bdm}aI#MiY6YqFCGrW7JChN7ir?X>)dNmDRj}%qCwb9hjW%Kwwv~LeA%Bm>n3QI`9Urit9T9VNiHJb(y;nxjSz~QmR!;gbFXQE!%Ae0=EKVqRDmZZvZ2NFO3s^Rijo_02G$l<2U0x6QWj8jZTAW z6J)Ew0~zsjAtOS;OmbB{jc5*H0%NMIKyd>>)N_X-WYt%bk&At$N1~Gt z_jS~2T^}Ls2RbJY?wumttEqo3Dp_P+piUT1}DMbNG~uefJ+w zLH6lI>fz2a_vuH@WuNY*@3uhr_Bl$G;jgMO>`!qrx&<9C*dC6&N;23^_4kx18cVg8 zEnO(|;=vOHtk4S-Gzk=K30R>Qt75NwLr}rrn@QuO0@Hg4?WQdMV>s={{navH z{K+99#=Ux))CTJ51O!c;aNfPn>O@biXSOUCKs#0Y*QoXbL1|Cg3cP^7hS0hNUH15{ z@+jojXi;bIFXkC%hQMkn)=Lu7RDtYu2IL9bf@4eAJnN7?XjMB&@`a0tdLEhF5o$kQ zdpb*~7*}rWpqo)2omVb5W~uWhTkYs?QK|HTffap-l#eY*NnWaXXdB$Q~_>Ofg4>WZ5?AP^h!dJU!(foc0G^ ziS>&!^cLf(XFT0j>>4>MKw|j3Aw2_{L!4LXrbA6&h?-W-C6G`-5*$+81qUq z8yF_!UEp&iuIrtp9hLK>)H#%L*$>Pe;KKCPEVoOB)0wyj5As)v|Bu7lymoB-*?s2Z zB_??6m}b1CJ5Y42^%+Hyh+qW`WSgio{}9V!<}z?iVk$x1#fOuAxLNc~h;L<-F=>gh zSb#~48pmN2U{nPQ@+#yoC|6k&^`8}dbRabeQzEiTV|iBjRg`c?MhIp$wte*E13J8$IXY-W3$i(+7FpSeG`vfq&C!#8_^>%g0{ z_<)+*_!9IMt6H?`0Mm<-l`y~B)A#eEEZF&Vab_)i-m`1-)@s!^OBQX#Tzh14bErLE zd)i5Y2xUSI#B-3igRGgkS+Yo^Lq7A<=UUa-e2U}*BRP{KL$*8e1pVsFpFfJh9M`Ij zawZ|HLJl9VaPkej)t>w-iIj0ha;8vEq7NCe5;^?MCej|*v9>JOLEqQ9s&;AB68Ty2 z?b_47<<%MNAP$H`9Ke+?OJ4#I(D6I$uE;lO8UF0)r{ts2A#_KpdXyhD{#cgVgjoLk zspdEOUd}gB6XV~Vl84@Zi#m?y<3b?RK<~$s!Rq}urW#x%GY=JXV9^` zvz(!IX2)*F%oFn^XJq{2eE!^D%I9xqJ40_YJO5yJhCa`qUzW`AxI`AOKkg?qQ(X@A zUlFPY(-=Sn)hC8|><5JJ=5Vr3;)V2+Ng(iwIS=LlyrL@nNS>?eeXV*Fg^1LqQ0PM5 zYdND{xovZmEZw+?sGRNO`@WQEaBt%w&t`d=H@`@H zwI|hQ6{z+|ObpJ{89;YnU>ueLblePmf^w#>m35)p<4S{ndb2PSmsf~J#itxiANI-6 zHZip3%yaFmMt;?%hE})Cp2*jY^Ss7472%!IKds1B>lv9n1o!gER7>#B{H5f!BCI&O&Wu6xfSbN?U{5R>-5?okJ{OZhMTK zvE9NXpc5JxP{GWhvK_conS~OOPE%eOR7K)ZnRAAKN@RvMNuGmwSL~;2d01;3`pQarIQv`e)_Z0sr^AMQ?6mFHswLqYkj(bEF$~U!Y z5u}Marka!ku>vA_1x3T(Pni4tayjQkNDKm@Z0Wzp8@>oI=8W(~?k6nZ_zSh_pHp1m z{Fo0-edHO=S8%vxlVF@CKBC6r;)XeLKSU3b_D!SRdH8){LR|K}bI){Q?b=!E!hpPV zePF9xbs$l|cjG*kiNOkSw`u*IIStN%)M+ywEvhi44Lt!7RGit167|AMU{Ncot{p!6 zMv{HT8{^9Zzm@*IDD#=+iAVqT$^v<070nR2dx}3iMgKM(I(7ecvvxq0|Cjs6eNBlF zu@br9o7ZcZ9W|u!GF)KExeBWk2mNG_?KTvujJje1SqAspt2T2x2ioJ!!DyD{RlBzk z*NGBGQ2afJ^DZ_#Pd=KwwcdQ;HBp4J?x(+?z15(^KdwEwuQI8$i65K*Iqye&AF-dd z#}*O~m$uM@=v6=2o|P!lBa`ii+#lKfeOaHFrE-8x%KT=o|K$9(sKHDSX@#2KJmxnSKA|YIu*K#l zaH#vwTA_~_zOhj2KbZia$@%?)_1m@nzldz(@2X$;3G@8EK$hVgQ@+s^SKDL1K48xD ze=`S|N3td0&FN<{AsAg+`_2h7z0iZK#Ny4EaC4?VkeO~)z=?jEoN1)1YNl^W&or)( zPHU#Igu)pIbIpwUZxjry7NJ~XnAF*A{DKv1)IFRm~q_kz?nGZmtz z(+YttN=#4nbRNqnw6NJ87#((RW$Iek5|%M^SnJ8usVsh>=m%UtWEBYn+K)|ry6{D1KLM^Yi@rrWU z;*%&>X39TAUs=>Z*fwf&%HyvJ4aEyZdHe!^X4RkZUA#k?-;t!N@3(TF_@YdFBz2#d zaYOZjd`Vs<;s-@r>CCAx+!rCEVnHeyRiDdD85Kzvk(9?_e+ruGycY6W@EvvTS28jL zLsD6c2hFL=M5)M@gkLgm5gTLvGE=@Rrv~d5aj+J8T9q_!5jRf(D;{EYUbH#| ztyN0J?KB(U7LguEGty7#)batTPR)PdG&_~PU}}u*xz4;W6JVMA|D4${`Uoph{Qq}k zT)DTa+RY2Zeh(|bne1x3? zg{%1knGN^70AdD!faP+F7#nxVHPS`KVYfacSTIhA@uXXJ^ ze6k5Z8Jz$y-C<(!s1CQ${(pZ>b%jY(9j0_{J6E4{NhWca*}GzTG15Y(GOCl_!C)}F z2KQJCosP~)^{zN}q1n5tyV-WA=Ig2&bBezGpqipd>ftUnr|7CYo6Ul+LG^}o&(~(b zSGp^$y+}>Rv4iAwnKgn{B>ks}{ZVTKjU(e6(luVusa=Vk(_y_F|;f3z_A$n(7#{oEy7eHTfdIS!MyP(E?gAO)9yzN>4ZW zV(c^Yu;M;xGLrjr1&BV5BGy6ow%H)CwO^|Jb28G0z8UDQ>Wq+n^6QrUKyHVNi z&QTka48`OL6);r3>?V7DVw~`*^x2e+`@h!vnE;dkV7kZc6 z{}%77kzy&Th9!up0Ot)aDni`&Z*9mo)VhxU_Ji z8QX5FnNDiRe8()z}(XAIr-%V$aZv%1Z9dIp(UR+}XWZlN;Hu5~d9c)iiI_x@7l zIe51T?obWEP%l%pWZV~Y(ksv?z~4~b7mW@44Gc4w$la+^g8B|Hm0ATXDa(8Xeo=PKO_|dKIQ5KusT#D=v@5gs|jcIv$=&oY$dtxD3igaTd&uK*h-M_M6RU2}SPA!s%`+l0Ru@wd%r>$K&q(L;YDnCZC7#ZcC>so$%kq!T0T~L_dCBmi*cKc0K&uGF1`ItU_aL0W@;m zvxItaTLoy}OKbDg#f3NnH`qP3w=WJ&n`cDiu>=Wa7~b5=k{n zHHVN&NTx%|S#8lkze-gx{vXVC4qherSjIS1)5SEsd${Ti)1jI^aBsTloUToS*=1vK zt4X(}6~%tanJ_Ki1ENc0$jOZ-41;Chd&a<*7kCCNS;ujbn(5TLG|8(FJ(jiFTE1x} zfqDIGCLq<8V(r^es+NJV`h7}aT&1%Z1#1eWBkK5(NuNadSnQvfy}|4>_rZT8bxyH+ z{vO*rsn@I2T&Y~Fq34mB+&`4^vQ{{;*opK4xEE?Gt{=;la0x2CB{lk3tuTuZWZ>Le z21Lq$Wxx9bc!oZbZAkr>rk6d*yOpSWy3O-iAL~CorMWD2`f4GvRArfpX#(etQOGVo zW~*%#cqFb#k9Sh=@$7|F~6?zN;Z%ntvC0>mwpPp_@3{KbYH99?|hqb4%oMnLfb;l8IVaIX9q0JvH z?nK(c%adSmqJKoNZq`Wn$*A7wE9d-V%i;5ZlrQn6Wx0Dx&j4HoA zK%8_B`rhl&_r6tLo$9W^XKz;P-4~wP?lZRdMt$ZBkM)h>4)@PK$8lf&agXty&+(ow ze|uU#+&6r?Z}>+(6ut?IQ3oN9qV&Cf-k&_!OO&n`F!-mc_WfsDeczwBuG@Ux7#XkO zg4j!37r+vd{m~g5Z||d3Z{`(f`HbU<;py>k^M*w)mZ0j>ryiV)mi`Ti5aM=Gh%L5I zlL-SWZ@L>SGG|PB15-56SGrHDK8vbR1UXwh63Eg{kTHY2Re((HS1f4=SSe?4uJe^i z@a=iQ>umnZSoV9N@5u#0BoZWIb)DZRav2B2cG9#ywyu1{>*uq*;SP&s=0m2Vf;*Lx zcxt}7+~;)XLEnPO46+OP&vVtxLx7YIBr^H7l%pi^suO;2jvhWYJZZGH;>P?Ja{>Vz zQ*jkUkFS#*37(WkRg*|e5zEzjLT%Z4_y$HeX(Sj9to|kW6Ia9d&^8mFN+wdlzs!=6 z3k6Z%wCV~u9f?SPr?Yc?gihWt)^Kly@?pT%q7`P7VJR7*)pCA<`ibx*lIx&$Fr+coj4F{V z)3=#ty1Vb6WZ1q|v&*sN*4LNR*Xc{?xb#{I{6dmMbQ2aG$w31%#|g6>e}eBx```@w zJ_Iz&)cgdl)x*~YpUAiQhaH-N#{4+0HUaFEkyO@9FHGwI(U?yqFIUNO83;&f5IR|w zU-fRT$_uAhz)isuG#yE-L>0Q+3l}@VUmBrxg7~E|o!lPI{igYsx5rR-w&5 zv}ST4*JNH}OjmSP;xH6j^TJa`gTOBItUzFtQIIw=&p*6Vq46W~&|J+DQA9jQSumwn zmR-`na`DG;$%&;>;yH>2t~4u3<^-HNb)+!aEM{UeEra?Xw272z9+p~2xh#B>AmvRU zH@dL1|MtyQQPz4>?Y zrg{^9kB@2kXWH|Z$pn^J_{JH}^a={3^w70Qr2Bft_#RR<%J!VNGb8yMDp|Ph#FUdD z+QrguwP+Ng$^C?dXhj(n4ZB%-EQqGCw=jvlV(*c{H_Yy|71Japn1AjvJJ+GB+$YyZEj(gRMq)bNcA5ZHs zca5{qs0;4FvYmdNfS-!KcVoJe3t6kql6^XSEqGv&(JAmj^z|lscoRL$J@8H8yw{rZ zr5uYgvvNoh$Dv77`V){*vkn$cEsFn^pAg0?GpgB~tVV#CuEs*)MP_yMf;coudLVeH z2_N@m@UVb(K*r=WkI+#&TU zRLrD*TUD~PC7cHRBYOr~e#jMFPxMb!dNTT#Cf7ssaIXyOr7@{u3Y&!%o6>d{{6PBt z&ZPBz%Y(+qiCH)S@c7Kz3dwew!@IW(65j>oNXKKBoAY^m;t$_!nfBHs>N^{ObOX zM%Y0_PY_jtaQW1joEX*CFK90S14GK=zX0|<@b7ZJbOLYlvdP*EuDKHqJ(H_Z+d%LM z%p9wcJa=73gWOoa%126$$ir+@=LD9CvNL`HEPv|x^4+2WK69_>Bcs` z*H7+aAGIsKL9#}2`_NPHBvVGzRW3HDP;!Wb=;D2H&@<2X@Gspw02yzUtyFWNRsRyO zD9BgIMIWmqtdBlan-kzjm9d4*OFV|%As5tTg0M?DqAqiVb=e!Ijx~G-U21cj&gN({ zH^;K>o8$ajdj><`{0xHheKKW$AixEA9~4i@YM#iTO+mUThK9i7+a_#J0goAyL*Q{% zq6<9I61gNlr<>^aLj{DBadrb$2T!1EN2g1_yHK`S(#4DoHwsq(<17rrpcQ17PMJkw z1>Ao3K-qqzDm5t^W8G!~@DyWRCpl!Sm+Y0Xrq3H)?yD{Kb+`;SaA8-fSe$AyMHS_0 zn$~BSt)D_S_fE6*me_9zOxacbnR%XHysrgjBqjP#det`c$iyxTX9UgM%#OaW6DHXk z892c63V6?d=h=M2x9E{4I`!e(Nx!-}iiyJ({T21GvvZL?d<%xm>c6%{-qKxxT<6Q# ziM!zey~B6$+dtfGY?1imdiAcrIb0a~C*{7$*}xh6%&zp)5@Vb%XC+37tJ+b!JjCX} z?n`NZ+iYbvujby4UuiogYL1rNjaIotw)5p2ukqY6rk!Y?GW#-D#1fA3T47W-@^IC> zu%3rAxRztTtS>Z`b~%H`vYl&4=GVk6bdt~&*Kw5%W?b$9k(ARsuco7{f7N*;@OnTw z#U!XXN4cGh{WB+_#BjCCkM^N+Y@DlVs^txA1|E zwyN(cYfSn8XA^1TMMWsoBY%|g@m$UVsk*4*rzcb)MNJhwtIVifs*myYG@4oTt{#gf z8y)W4POtBfL2b0;0<7AWU2aLn*$WNBs&q8hTa6h(&!^nhGn30G~4O zQY%#O(;U?${K9XgO0960#)yfaeg7F%AR^xoTaJ}SL=`ZNOd1f>l4grN_MbGvAyRM> z=-oB3`vfo)Gk#I&?ojI;T68hsmz=0YlC8qU&`Q%3UtphB_C&4@IyU+ZI#JBAYAn zV>T~ab<_5=*N#fN882zp>|my%ze6o>@cT}VET2ZjTuR_>`n)Ma6%QQO$To8v1qcP|6w}d_{IMS9hm#; zE_C4bYr9WCYN;jR@I`cBYSrn|fp1Od-q@+>z@JXYpX%Ic(t$sWJUJaGV(8F;QXVE9 z=#AoLl0Qw~$BWoI$s4ft8;!c!y{!GstbJQ@?bml*`QG$#5Hfyv0odR9% zoNHv-xl3$t!v?4v+??}E`36v%d>o=_m8A98G74laW_Me1NB^(P>_6<5J>lhqsFckY za(taGdIzsNSNE6Bux)MnfvhvpJ--B*gLG^bs&s9f5vC?&vzn4on}PtB-H8b>u~WO& z6^lJYMPZV|(`T>`5->=Gk4Wygn4!gT+1nMS2BxAPI78avM(utonyUOUEJ6E0@Jq=x zMEfCiUhWzH^e((jz^<#Y%-^|9+=Yx#hh;L&YZ68fjLFfYOTebo}a;-4iV_Xlce>fJb8%fa_ViR}`6GaF0$Pfuu3|?8GnbZj#mpb@`zvGSwy|Fl zGe^)`5|vK_Gut!jm+Ys;%&VU{HD>-cqqb9G=8fO^Ld<;NmnX-}MHiSvvkPYSAWup2 zM@4YRNgAox{MC%ME3*Dyd61e4`^foZ1`h>rb=Omho#FuB>mhZm@W zL)wpcxT`*ZBsarW%V{qQJbg~id-Pw<7W_ZS-mCBN9aNCc8_D%ZP393Xqli;fA!$LC z!CcBbP>DWnX4%3X%UY%44@>T9PE&Pqnlh!ZjJr;bQv~g4=fq?OkaPQ`&QX8>@z?`gPx*+yZZeHYovi(_EPp`^HPFBLk zaIz9uFwCITRj5YA$!ZS2R4nq$L9HI$9U!uKVIE8-Ik>80YO88F_tvY(8yV!|k)DP& zzNu+wmrM=SHd>J?)H&M%PGWj$6cOn~#wcV62OpD_Y<>wpw}1?C;*!pbyRDI~ntM4} z0)`UtTOd15_6xGE<6h%csg0wOl(EJOLe$8w$aC^7_WXI~GMB~M{fy*c?C?hS@i1ej zC0eLAlDkn7WE`@S_AZmk`pq=+{!~7p@M(*^PF_=?BQ5XgDsMS~Ui=#n>Uyvm$iZq) z*MrqBY&Pp)wbN;A<}=vD!AcH9aG7>n2wIsO&_V}ZC(m`a)(Q8iX=v6K4MRFsOJ2EK5!)WCPr*;(y_n^*xfSOHu14N3xlLQg9A4s?*%{f1jCqShw8VC9H}^ z$l*5Lme6C7z$%V8v)GPrN}j#;$EG7H;Ow=^=I72AB^RSw&Y>K?R0{;L zOB7aq%;U>q<#H){+F1E?x7??Nm9Jxn|CO-v!#lquR^Ioc)5gl9gL=ZsF7koo`75be z;_w=FpHrOWU8b*cC=K1`7J%|t!D zl3>X@y^bCFng@SZb!{b) zyz=Vy9q&CpB$a796m76RyTLK@8D-fh*&6gU!zLF!((tD~scdr3bcQ~AZDzK$`kJd& zY=83IA(O0Z<|(R==auqj>i#y83JJsMIsCrsfj#%?Yc88KG_hyQIjOAM-Hs1EwV#rw zojecJ-Rq=XB3d4PA4Nni^Q^=Nw(?;eQK)T%Z@#U$ev2Ub(t z_%T)eIKbNi^>#3o;gIB=qY~TY)%<=`UT3M)eYL=rc>gcpfsriI>P4f0(JVFhTbz(0@{x`Vf1Q^}+nuY-tWZ^rLdbNKmNcUASD zzwy7VS*qQ8jy}6iD#NviKD&0)ckjUvJ@)krJIL*wz2lWtkzR~)q7=Ar?&E#clIWMz68JZ&E9FgCW_q;?7G+azyUJtbnGWc;9Uql7+Ow|8c;h0bH1xy zk51zC8|wAAq~4GkF$%pS<-*9XEAJx?CJx2n=9-%6OQeP`7PR?2OB_hZOx| zvCKd>42`j6_VV}`Ce+e*z}`%K=VLW)r+yk$_sZ?p>7(kzqGMF8Ox@W8fl&g|C0+D! zL;H{zVv59(*M-j~aM*ZLWT}A8=K0f>W!LYz_Cjr*E(f7JTjgM%_V2OFyhhY>_ycq0 zT!PoFd-c_oXOD^PKluD}UL&R--Yva(eX~_oC4D5s012RhYc4)-_Zs|Nr+)HDyt?4P z%h!LK9@7@;G&!)zmc;cqQ56{JCSa4&BtLDBP=xur;Im~Bt z$7%tX7dT5$UUfa1)bZPI>=dSTM^X8!&z$6>{9YHCWmHK`+ht=}w$ zfLklfKMxQ4C-r3)rsntJ27Xo(Uz_Bs{MogEy)#Fvss)RwEr;4#dG_KNBmW-qe?a~Z zB)|OG^**V4N&T4Ak0n+9>`GKo2VgaAY z-C9dx<0rf{iZ*AXxAcJjY}PN_UU2-GQK$AoEnZ~x&N@%&w!mI|&2@MHJ=os4N04(=r-~oe1G2kVxE}lf z2AI2-aoFHLQ)#Q~UHD9>)d;Liuwy&mgGKM=h!FLBuklIPSppSpaF(z(h?e3UTjTCs z?;MMv^j*brDhNMnt}%Fb$WOA_4l+x#0Rx*yrGG6h83&SSjnvb5TQObQ7Z*pbQZPI{ z29Jo{l90-8kVpVECtga3&eGdi;~tCh_XL%-L*MiXHF`FED(&Oyab)<>61@FZEYUmP zQuT}d({!o*lb7xBJXHt^KqJ_-CVMx_>YY~o5oa>1190{2NxQgam3&M;yi0GWr;bkQ z7azi*_D=r*@|%s&F713M-u;Mv)PYmj_)jQkoxi%;Q*x3L9oO)}sm{gRa$^TH5SgV* zOepDG($0tY2Zv;fo5ZYOU!cOaDgmL`PAUpqZ2lzvSXX*$o)b)0nBpcWJgpG-kNM(r zw8{f_uU>w}xQT9#&3Mk$qc)4KMIet%R?Sd@9nKY}t(u_*JDzn3yku_*JDe;{Q}^al+EAEC)n zuRRJ)))h^5G|W3&C>^}}hsU|dNJg)O9m7Lo*jbD(jFGaAkh(zgpj_Q$H=fSjSk6P9 z69qgyn?5#amL9$xnswJmSNM??V;buPIB$!8@ zCk!V&BM*+X5Jr{ZPlux~$HPqkuK^3&UEznI*ptU%7na8^5%`+;Kjk9)q4>uT9@A>; zR*`dc*@fcE*`ksrUD#A9mR762Qc@f6IUq$FOkZdSRvdr!Y7<)Gl_#hV*@yd%$K~04?O`qE+k9$o+mBhIweV6(Q6ThQWEfigZil&;0C)8p~{Dgka z8;UMXJ3IICqgl4=?ESy; zmU$!923m#|$lG{SHFn6>bF13l5@&MN#RLcs8+(w_Y(`?-=y4I1#)tIp@LxO)4YGR) zeZL`+bGf;Hr7EFjbN`}QU+G6kaa`dCVQ*y?eZ6aL9NT@WPOx|Gejfm{FD`nGw|$(a z1Nme@`LETjq;gx{k}oOD~k$m%WM0WOZbmFU(qm zKiCIKctY!n@Nhsztx8ZtgtjASPwZ?pbxTKzcSIH*Z^iko{KrI@bE}1fZM5cBNoLjA zIz7XWtNk$i_=r5bk2|#|@1y}{qNq!MoU6*HMQuepot@hhU!kapYpQ30?8W7b#%cn_RP7-rPt}YZGTqi3}XVzaJv0MmRsQ z#+%!T2MVo9{BaVV09P!Y4p4Cy0{5StEk*WfXrXjS5fQovHz1k39VUe$FH^*cxVSc+ z<(|F66wfF6Q^Dt_Ed04DEdKY*!r2slqgeHhn7f|ir!0J26)vSP(PL*vr?A3mV`mnW z)HsjDFCbN|-I2VQ@DwKuDyUJ_K+-_zEXDhb?83Y%^hm?kj7RTeQKe|J3b37`Z_0l` zu`=g0aWomt5RW20qY<*B8&}s%$*Z4|&$KGmORU#Y<%QoeWt40Txb0OOo!ErV!Y}Ck z-ta=aP~e;i=Lf2)bVx&`ql?#A#nNG~vp;5gl{NV#f)74(F4q#u|3nwh1oKrg=p)AH z$|u2C#T|-TZ+HIC>@(+a(NYe-pl+kXe_TpgZ}`4BazfX`uLk)kgYcMx5SnhqWmJmB zW*8Ta(wr7reMUSs_D?cnioHIfo0sI?uv&d`^f-sFUuKm5IjqM~{y-(4Fv^sDP14^( zSAIA--Z$C5yy0KVc)jL$;lY`y@&(@XcnKG2PFf&2UavW60VWM8z+M2z4lLJOA zkdw)0Qt%PYiEj9?5PZ0=D?TXru+JyqW8p)fowJK_7{t}v?%2pRDSYS#AAw#U`I-SA zQI_ZtKD$?|jIF>*0n*Ias32I~tR9gT9o)a>wDXAFM8+=z=y%WV5zzH2`Q(7k-0xHRFG(-cP}y1D zYY3BAy-s>2=V>TeCdF;3apO>6x9OwVoRNk1BL&U#MkctSB6_5pu#A?!BbcvtZ@8Da z&`s^#*((9C2u+dGdOF_<{Fx!QB7)d`Vu09|6THVHih3OK7L}YiS z@KTQi;X2d9$qb2I5*ULlwk^2uh|OQ3oI~K@MA%&As-fj90gwd=lN7ujGSs;E3>2?8T_DmUQyPPNw*xCV^SM3WNg-HjE!&`mJF;lc9kp%5f`(^wZ|@2 z3*;*dHZeG32&WwEhQ1j&(}SJqG<{^BntnrnZ~~#W^j8Jpg>HMpzYX##Qt^zvT-~^+ z?VNd)r7iPnhXQeOLuU;N)D|lR|M{i7V8vpWn7^!j4hj`JTh<2-$C!GYj`uM2?ZJii zo~HgUgEGc=0yNq)rvBAF89CD|O=`2x;P-l>$39LT#yZi}5C7350D<&AR&K$=EqlGM z`U4T8!rpX+$9=#9Q6Y!=mY8FODI8RyxY!Wum$~obWh0iKN)h@D$y~}K_Sql5B9vAR z%ozJAq4bmdjGR3{N$C&t3?Hl*(5t{{nzdyKAN0o{{qD}d3SBt?U$~5GGdUtz9r-d+ zg*^g|V}CGzCE?Q=i>FdD;j<-`n!y^yUX|3Zf?JEv%z(uyp>|hZM$R6f)}3GaJLsjl zyux?@S;U7qdSpTa|&`tnC zCT*SBJ0oYB+;Gt8ex5q%c?q%D%6=KO^muHN_~-abD(>ODMftb-|9$1Ze`5KH2F`7^ z`YC-;N=Y5wGWQGa+tac;C){~0=fl<%KcLQ!XedPnjZ@U>GG?zl{^M9mo-gH%=3uE! zc?X@MGUbp-DvCcuK8jwdQgf53Ge}L&cQ^Uk0s+h%kMRzhx<_ur!wW`w!i(tE{x#=Q zKILcoLlKb}3!7E^rk{xL#8}wM?GSVdrK%P#of~zzy^JAkM6v`?izNng-$bAwA`=1& zc+nWAekmCl-wT5(Q+_p3TTw73GHr42=)carAavw>|GA+fGsS;py|=V2usi+M zM*f^Ji1p9%5~#DY-f6s%cs%nv3C_@8&m-F{W9*?l*NuN~-e`V!$7I#+=@r_2UH+!= zZF8?6#Wf~dstDERkiWOH_OAnKclQdlUYFnK%zq;>()^Z1dM{`GJBcFmcQ(HZocV92 z>A%;wuf=CS2=8>>qKcjXISQgH=j<@-WwmW+ZQ`r1s+4b3NPU_h4XoyF2|(e3NpVp7|{wD4J=;z96`xr=@3H}UY`BSm4@WMjV|L*SBh zsl;$5Un2auJJT3IJZl{6i{Q)uj`F8kVzIqyKZlx{T{)Cx5A+H>R%j1g7q&OJkJAm? zgdl$^&!}-9H(Bhs?6^kl1f?5TQXB6TY>L+Sj+;7tpIfq|`6%$I^Tf^EW=t$bmoG%H zD2U<&r80O?ZM-1Z)Jid8#j}ExZJGe z-+G)7HM$V1UZ;09ij!jcH-95R5?PtGWs1(?)<)Dgi_yo8$^m7yEJ$VyXZNVPY@+7U^LIKCvJ6I3Cm}lS4XU4e3az>EuId$}w&nt-PPhj-A3+b9~V+ z7+*ie*TgjdtVeSt-(Sa#b9iR|JRPUb#=9QJyPkZ}>(L#@^!#Jq;rPM& z%v-u8kS|W0rKJs{qV&!`K-QO&{tz5U^fHIi)7bL>of*Yiry`VZ@N3kcASCbHU5cs`PZC#2h38l5-F6LGd(AD-E# zO&@ja#<0InyJu7f+D<;lVP8IaPKQjW_=dmh8{Xk7eb?XME8R5zS~FnrAYWu!=fttz zJ~*S^6!_Q#0XrUH9nD)qbtVNte!>EP@8L`AURE?IFOcFjnk40JQY3zf@`tX6nwYFt zn?n1ep<3srxU%cgx9rik#B_VJzA45UG39H}x2ZyE`IEa+)z5aC^d`bZAp4#b`XUCW z^`_*&y?e~{b4y-AdpKT|OQ&1K`T3~L#(gho`-s5EK$n+bs_3fo`FPDxlnQ_Dr&s#to<}EqpnB( zkUU%Si~%IB=~ldz--ud=$){jcxF7ceyFCtkCr&@E=y3i9uGyWzBSAdc{KadOxAIER z>^CGvRrs-DJ$%PVpXQD&p=oAj7+lG`BA|53Wzdl~kldh8!(8l+U(Y@O8>dx?bd$)b z>h>;!UcdkUqT1Pl3xN3=7kWWQU$TB z&^ASnYcIWl)0p8oybUHD{#dI%lld8S$Q2I2Cj&CLuU3Jj=Hv)LXx3zXCOn7Yvwt4G zhHklvaPkNWEO72&go$jB#iho@bfry>YV9EnzK5yL4};tJ6pX1mmlhR$XN z-^cVAZ~Cwt^z&>v5cW=HNgm+PdP??Bf`k;S(`0OM)C&4x{odW}x3kvzZqXAq|48mZ zPX8R1PEJywCG9^^v?NG3h&Ps^N2gtWRhROL{`o{@Lg(UFM`fZ6vD0QhH?v3WfwSQ< zI{jA>BvP2^0Vo*Q(KSXIN_akDpg-X%yOR_geH(fn(IN^h{p7szwX*y3=(7K%;o}Vx zvSnf(EM1`VN?G-qNd zMBzmdS@Vnv#3|WKmSy}_cbyblikv%k_m62VwV$9=HeBi5G%5h3_G4lX9|pM~E}Q*B zOzu)*Vq#+!_+ZrL zQ{@?6HtRfZ-=Tdx)yMpCDyUo|{6KJgAKQXu6!DZc1`fmtvm?jxG{3{*AAP0sWdf>q z70zkH%1{whCGxtY&Y?l#GN{^DZ?lewRHVrEDtP#1;?NB`l8Dyk}XAsSVb061aGHj>BdyGSU7zSVXI5@dKvA3 zmkFV+=ecTT6xPh>pIk<%YZ#0F5P7NG?|&J5sO$CrGJQlm|b3}o}V^Ro?Z^^FP(g!x0(G_f3a!k+5X|w{jH-Uj6~2qS8*UC`zfiy#dvyPTjuU zQya_HUxR$hf4x1cJ8kCwbk0-e|0=Y3f(`xro3m_*u@y^%SKEPV*m|F%#bxXYy`POu zi*NW_Sk2~nhhryuSosyM{j`Ku@CdC{KcF*toJN#j{*|sEArQ;O>6;Q zbLRd#HKRS|jf@`U8GZ~) z`7;-#+T`y)m5{KgSYEXXxAt%?i}E`S@+M35(^fF6a%*q-+uV!P#5z)UNv5rDQ1D@t zo*&%CuLs|z)#GIQ&QV_eCNH1y=fOSlCqagXH}mJyW~q3GytVM5aLU>g_WMA7QklYy}p(_EYax^{0*Qu}s3U;wY!&Z$#mnl1xtx|}+Xn3Xq! z|GjZA&`ToP4{r<|v->At5Vw=9zFz03Q~OD8a`f`#w|Ry)qRJgQmgOHR848igcn*ul z36;T@-)v?O;l=PKYGf@mioLS-dmLNFSPSh)@Rn#J7cO;4ENlMwqWqcO%%AdB{@f?Z z-gAU`u&(Hn`e(v8K;qFJfyAF-lK7u64msMNK(pU{%OrpwswXsi$^Q_&_MdC@7ml|l zdM&(hkY02C=^8D8a9sAltw=HQYjELjy77mz&)v#h0bD!GJw}AYlm4ap$uS^zjp)ux z@ZS@o>B_ZLDw=L$9A%}dQnPF;uWx0Pg{H_Ep;3B8!>O_=Jt@DAxL=ITenW)Gi`NCo zXr7KT_~rEd-jmerT;-5V@f90W_j^6vmz#>B2>p>epmZZT?~y?dsPf|e&Z|Puik*{I zjk!0y8}tI6XiX8k`B84_P^PJOA3+Flu{Zp1o&;vAT1IK^h2K7y1$WIsJhCt+aZwj~ zh!Qx5dMZ)M2<@@)&!Z+=y3hXzGL)PVRnbS^HEKh<&qHS78o?o;RW97F=G!eJxI1g@ z#SNS*zm6-nQKY#>WQTV5uH8LAuHv|9YtC<+plpyvKm~HpRu8Sq;u6l4Uu!fb41WDT z+`S8YRMoZkp9u*}5IBjVf`SA^O?)6ID$$@hVFqS!Mxg}(1*Mfz(fY~*&;m}FL~=TJ zT59#Sy|tCTY3scrZGqq`Lo@{N5kl1fRs&j{aeM@*Aw10dziXc}uaF?N_y76*{(nD) zIcJ~!SbOcY*Is+=wbt$v+B+bJnB$QLS#CPG2DhSb^g8qk-0#KiF5m(k`0NHxzZ&?> z-kJwGXQh~O90;d;Ga8ghlCn=t8gr!XXVT7#)Aa`#N2R6{>JR1|lq_GSKbUIj7uA0L zeRM2P;R*Et;gu=+fS%~X^lw#XLs;9?bZFJpGO+$G4xwjcXf?m)O@Cepb!@%Te98%J zQJY7b^pQuK%yAof*$=f95;2jZERSuUwqiNYcuHw2t9iH~ICwN9fDvH$iMKNd@vc>i zL!YXYpsmOMW}Bx_4jXR_4$BdVrRbpM|0$~) z-$yE#ZcKscoW)I*7jQ+RyJ&|O(<#l-3QQ>Fx3bE4ja|`Asqjp(S!e;=zeS(ql(*AV zTPl!ROz?0r8LrmHn}Wq>;ZWf<4!a9?AlP}u9WGL_2)~QdTt)5W_js5Ahfr|r_Z05H z6-2=nV#qiWkaUib3!BNP`JW}x8~m>|L(x&G_`WGP_*yx6;dYQhRIYod&r=kws07{- z0`GS`sQN5;cg5k&Q}C*O*xEgXO$y#q6udK&@Ge&H;^U4db*lw0cJI5rHq5FTEO;#l zY4>o{k9z>~fq=ar2kpxzTJ_JMSI+gJC<093r9KxshGj%7l5wn)qwx4UZmqQ%`;5iK8EO2hEk7M{TVb=CK_BNeX{xK?bP2YUdKF z#0zJOdrQ5@+k}yoA3V9lHViPL>;~$w*bzWJiNh9MfDf$+4dAVsjLvru|I8UA@HF$+ z%G>lo(nhm-5_s6kg|fV8c+~mWIUIGH#I-=m56hEM*74Y9qJNb}J;uYynQbhd=i1Uw z7>vjGHrn}{ay`ad?tMX$uNT3$9Rm%<6#ITre#bz6XvvGDAGPXqwetUxHL!3 zA5=;t{Co2?msh1yI}olhQ_fH+2g1t|#;`f=a1?nqv^FVkmDarVYaetwzk5gmX zDZ5rVTfd95b!R?QpiE#~hPv%9)@&ZJYc)?XljSzdJkc;pn4k9WnzU$;Pl0%^9g`zkNz;I?v^en>uU@tR< z{ivLi*}7cUE-TQg8!78Dj%w@saWcf+z|2kKrRY6r{EHOb|NaPV{nst)mrJ?EGu8Ix zBFbfH>nHXh8)h%>r|^zV-;HwvjhI0EMjoa*evE~4}r=fv`Bf-YOF zSB`hG$46UGc`lpCKlhX}KHj1)Q2z1d((&rxCs9$wKOzrMQ`~;$n2)Bk72;(Sx1l*E zRuS5YTuG{8tC4C)6FI_O1jszLn75Dv6;#UHsMZvB3_p{a3EX!-!rRY(PsLnRaPUF+ z(2M!JP-})({S7J@iyR6i!@$Sa)<`}Uk2cKz!_s#UC^&HOBfnFv_gV6erPsVh=be2J zfv-Te0)+`yhu% z(=p{}Rl!74(*UCye13!w%Flxou76ScL0|GkhsnU0AFP~_PeGMd9p+yEdk9&}GQh!3 zdYc&Fh;fnx42e%&b5KPVkB7KS2z^wrFj0Z&*?@_$sd&LsXMebyx?bVF#T0EUM;YQx zh;$|B5A=t>5+KgGA2@SV0LiYuKBMbBg9dh!-=-7q&oKC2fPg%;Xj&H zF~fhfPelPcM6E_{gP0O5&ZCG+o7knTAK`nizGIJ8bqJ(TV`lWJDZydZ=XbRAXII7A z_)>9gRZJ<#y}qMQE}tLSN?Lk8LWj3Y#t~I9r60e;ck~C#?}@A?&G%lL@964^(Gj_L zz}IlU@93DauSaCw>P8pJaunoU1IqfB_&)3^@x?x^yw7*Ee%W1g0}c7+DZ!;VnW>;Y zFcmQSL^2t-65ke$5}Au9NQv>imNa^GcT!Q@oCzi@yFlU~&EjxRj{qY88a~QQ#Tk#L6(P)LdD(xST;7+UeO=KBHwFjfVfxeMF4|u)hA&^3U%rT* zN9q@ndKRh2%+zDifo^}pF)^wk(o_9WZhfaKl>^1F*B@Q#jM z553n{$JW)Evy0^RvJ#k%$JWQcuU}~2sk)fC?qyfLHD?EbI0*rwRhJ3BwX-XC43oEk8SYWoREVzz&D8HT_fBuuWhxgIZW}$~39Xma&QbB5Tv`439*Jk;~p@ zY(!{S!>~7Va{G2r5e9k|Zv{!rxq(C9f}bn3jhEbVk^I1$C#j@PazQIzh;`r{t5rce z@>V@{=8}vSWZ+Am%7pdiv-}h&gXj3_j!_QjV@Myb(u3sT6!!@e;p|)4Z_!>*wJDI5 zCLxnH1+veSCP)-Ys?Bzi0cqgIls09O&_)SAK$&b)rCV(l&?etzQCu3@g`YQ%pkT&S zdeX)-EvSx4-ybp?r6JX*WTn#sZ~Y|MQHA0j8dd35qkqN*8IiacSUtuLc4OghybBkw z?4dXcav6CZ8(TRy40Rd|RUd+~Dt^A*`*(9aO!_+EY5x|^t&nwvW=f`-hg;d$5Zvj>xVAk5^qyGBy<=;J9Gg>5K1RoG#at@0Mkqg&#K0R5(U-1RSOR7|XzruKl=Pw>MW3c*k6W;wQKXLx{M2 zY>Dvi5|`2J2uvBrA&!m3oN1Zp;WG-rz|kmtZSOcb@3GPdgp2_}}0?2s^j^cck5 zkh?9$%L)OP(CZ|`ZR9!Li1BcJsg|+mI`_h6KY@ZVEVz8(HYRw6&WHvF-qlM@GEY@a zs~@ptL@TN0Lnu^Lv(x*{T&lTX;Wnj%QPt%4QjMZ&0cbw;MMu-%KchW^ZZ(ME1Ps+w z3WRehBv!U15L#THlV%@Q_3=i5(~61DaimFGxHPHsKv1nzrn9aq@c3%UY|IF=c*xXj zh26BdHjT0V<4ZxKbIce|;NDyj+QMK{!YAk*FWdANanj%<$=Rh`{&(@oDZ8^D_LG(2 zZ)02ZL;JG`-&au6qE+vduN)md`|2yNydnXk2`PLY!4=rwEaj7g=FnEmq@>X-1rJKW zLMixLz7kn@L``&>#9F3ECQ*>gBJ;Hsqtc69Bt>vslOi%E6uE#ReYEN`q=*$XV#TKj zA}I}BET!a19Q|2|FKmH#DFun;_IEl-L5b?1t@vwt!Aqo|m~(J_XDFQQS=jpWElc~; z=!KNc)~bJLmKA!@Ry>$q_EIT(P%yY~w@@LaE~ixAiu-6yh*4WH*($NXLdfU^Qbx|2 zDRcL>+wZ2#Rg~#hF`hEM|NIGMPU}|YGF3(Zp^S0u2Qw&BL>aqQBPSZ#21JKt`4fX# zKNDGdr{p8NocV-b0Sj-(+M84`T3XMlTRFA?> zBPcvcl{F-?Lp=gzMx;?aGJ+YAXVs(Zx*|fKbVsJEw!%Rf8L2o5#;ESBBny4W(Q3}- zJAEJmMviykF8>W#5|R7DlrF8fly%u1oE%fZ%1rqU%@wTFlU<-A&2T18V30>Qt9xt@ z7iklBm)6c1UQm{e{80G@){Emo$Ra{l#bOoN?83NYfV<}a03_^*4zp%~K@7KL`S|k; zk*{DT1A88hQ*-p^%vn>4@a0fEa zNSZtPGEpkQDyj{3O_Nw|oJ2I~%r8G(77YleGpl?YdnpVHZi8*WGF-+{kMWk%_=lTBm`9wg&Dw@(5@(ChclVus;a_@-vo&0O={?R? zXCeaPH0%WK-AApQAl~~?Zx#RvYlWU7Aa*7qAWp-MUR5S>w*JM+2E-#EPLnuW0@&qJ*1rf@A_C$xiL)h;Nt~^Ju`(3_ahk;0l8VkcsfxZd0wPDfTQN(o zIDOUF7O@V&Ou}v3fd!&ilzi;9?I5t6R$U9}D-E7{z>am(i*J1L{A*nw>=BJ6w*rJB z{aGnTqW`Qqd^q#*j5^s$;<4eePn%b#gJnIGpaVXxAw~zx!Ez63pVp?+c0{J4q`t|n8IyQyD2l+ zwskl&n1aqOQSR5g&tyF2w!MX;wcT5IOyY!18qaEc<1?(rcVty@lpJe=(M7LBQd%Pl z(D#8<6d|&Zny1EdP1kNK5)=W#Qe!?XM?15qAaEP;!M3F77p?eDhYg|)S@EB8<8An; z8svDW6t-T+he2BtbNI39}lo`N!KTZ{^TXc+f_R z7qzm9?#phGq&9fgMt;L2T~VcykjS%V(V{RdVUJ3#VXr~$RIg5fg>B|bdi1)KD*udP z#jG-W>PeIrw(AZoC+5vSb0%E5aGk0 zM`@ZKLVFChcdhPQo|{qGmm$oLvhQph;tupR2gwVY9ymmS=2a>?>JTvH{LyapZHT}k zeX@SdzHUL3BE1o%DJc2tK82E2vbCvf3SROtoi z0$P_L@IR^mVF3|F`VaPXCZ{`o?SHsY6Ij%Bz+?UcLzV`Lcp7VvghDH`RD8^r`(u zLWr@ra&xD)eu*s5nO;t~O2%JN>GT%u)>f>iQq01%l`?u*^_gf19!4Qxce1-L+`2>?XA{lDv(df;#>`x6Q>v-_ zBtBPy7moybYY7kDp|+QmDrHCb^JYQZz#DlD|KZyT*VS~;)K`_L{gD4~ez_gispS8) zHvi#=%MO|<10q2Ovm4OLh=!v;-Rf7!_{u~6x$?j*V(*KE!oa2c=o^I~qt{5;%#8Bu zD0`Wr#(3Ee;$@r3N7+c5DtnC@)JsSUUyX9d+K3oU=eNa1WK3xLU1o;%_-2-y5Eer9 z84I+o?A)g^Gx**m-_Jpdr#;TS=T#XQU%;C>&*3fxxpBY|G}eB6EXFS2D6b($@P`?( z{bV?@_T0~va8`A=-8P8&KFe_L%TzMxPUta9l(%6Dy_)*iIQ*h1Q1>;!VyzG|!1p{uZ^EX!u`F(>A~AF5 z${#Gs$hWc*i=3{AYz{|}s~^YTFT{6TJ`{steWOV0J@)s%RPqV> zEBrKA8WXiEaWQfIJKZHRhWzJKrUXsek1#zG^D|RFLjL&Bn|?VX)ug_Z0&{V+QS30u z@030!J^wi>|B&ADr`wCMn>dJW{}}&>?oK>@)p9d#mXL+Bjd{_@k{RY%mimE;*1p_W zOjgtI)cGQMsQ(iDxx2j@?H{21PW} z$Mtj+8eoa;=9Cg{zN4r1s66!&QJ8x(QL6#ulE?f z)ga5rHC$QR%z7=a#LnLk{tEaT&!3CGS^V9}-x4j)S1Y*P;`<3d@*n<+iT=~7D`2c9 z6(OszJO>jWv+D>JR{`lJS%$*LwyH5mfj8cNDUWw~D3ZYqk(b zv@lITO|5@hYX3@!#*GG?-ePU*I<&*GM-c&Mq&Mg~hNDn^seftaF_bJ#72(oAR)0PX z*PgF;p)!oOHayYVdre9r7(haJ=0$=e^L*~>bg)3lP9Vq=s9G&e2EHdhxEQ(7%Y*I$ zZKc@N&|R^QIgJ!so;MknDU98Lvx_!?iW5B9O0ne(eNqszzW|>*`$UP8F+xAJuoK;!g;MX!`71!;% zya+<;s3JuDHrlNinyh-W)7D^S+cC))wn~@J7~CE%s3_c$RV&O=nS|A@mM8I9R%2~L z05Qi}!r?Ob?Fc4yLPch39alZ3jZc%!^b*qigWv_Rk}Ty5uhk&-@Mf%68mRpBziEnSJx50I?2x>KQJ|8O?QYTs~twuJMv65kRcJ=m@ddpWEE3M`i z>TQ&{zf~bdVkHH2V*04ntWe)BsT-i)$(Xu<>TQ8~8&@|-z0Fc@aC$Z}aMgs<#)^+x)t-)Z1G1c4yt$>g`wR?K^eD z)SDb5#!Bw58?N3SQEwG>=kQy(G*+^tZiGCQ#Y&de<;&BZF`tj$x{>m7Ys^duoFJ?0Z4t{WvU<6^#5@^ZesTp067lXVx!%ULnSnd&Z-mw_?g6Y@m}hS)#X zD(YH<9c7%%%=!Macj8pG@OGi6lbvrbQLWlm{M-%(k>=6V_U-i$<%NK z9+8SYScc-BQ*Fq{po<8VhcDDt{)xB1^hb^zde{Hq2v&RJu)Z^buLRpqZd&knlI5pl zaTo(0@dQh3-r$YwFhk|nC*%#P;wn8DzQ2Zi#;%?F9Ms3%I6I}PsGhUaVa$018)KIo zd9!4=i?)_+Gj^5k9JM}*FA;0L0?$0fi|7^#{56{F|TVr_g01L?@EHqp|E?7 zO1LYYfPfOd(oDNKk+vm-Dk>HpPP%D7n4}l~k%46oxy%)eP)Z|wREklk%cxq-0~VeK zLH>Y6#2@Qq2!t8p+*R=o^dwysdSZQpp7Oj4_dH&{+2yr0V3mLaiI7xYoTT2775GnT z;Ht%n$zh=0i`7SeVv*XBev1d26O}!CxzZL!{8TS~{%D==%YNwRnHZ?n^VkGE@Pix7 zefa5=wWBZZ;v}wYzdUS1AJAFZ#^$&AbN<=IKmXj#UlT9lYxhst7jOR~54aMMs&lCf z!AmO6bQNw++3!sbX8ByPZIy?(Q^dlJ^uK(L^xc`>cWb@Iy!2^|a(n9hUg>)$Ch@AEw&RSA8r?MqEqC-c*FfLhgGh z#AvS2naf`Wf9?FW@z>0sd|%7oYD;!fp4Nk8Y!MPQe;G?N;cUL|#$ph$zJy<~ZJ5X2 z> zHHafUadMWqFyxzhQ*hV?*w4)J+TK$2>@nxkIKU_k6rVadP;ok1rh^ip#Up0gM>%53 zpJ*&SoinJ-S@0(bM6(@hcyA4tY*8n0deCK6jNX_F2U#dTI>6cfh8#(c`aP*$jQ<)A{f4qBY^TtOYQptcImc)}GN zX7Se!!O5s~3MUf9OXvgp{{CW0S1luj9rvWb;7wu@jl&2kauXjdCO*K$b>LzuRt;$2 z5DBHcnmGQCDLg4~$vG1P#lzgT!!YoVytY?~bu7Dy$;Ktau+jk=_=@hSBvf}3I5x2{ z;|alp=-1jkHo`#&`+SYcu-zrZP1Xt|O7zIid2U-H7VB3_)TW{>U;;Do%BhjjU;?A? z*jT)8nRQ~HhB-k+zB@RL)(}pMn3+2&q9Q>Hp_oXFvOk=$THm;uc3{KdkuX`8@q+o< zj*?SQk*33k)_?P6oUPsUydwS|#S>&g+%^+yCR;OuCGC>EGX6C@kxw4mevj?2`Q_Hc zmqNaz$fGPQ3q9tB1h?SA@(LkD4-2H5jS2n-Lsb9Jh06Y}z0`2z9AkuzRa{&e;L#P@ zm+#8qWRL4_!}*o1l1)#^R=JCnQuw<$qha790R%|5zd^@DG7EoWhU(ZRNe~8(zeIT1 zbHK=!D7pVio!|bCU8X5UV4cFAzl$k~X#+)H=Z*+jIk6A4Ry>PdFgdHnW`<+^;z3Mh zcUHy6YAfj%8BNRc`_#|G`?b7@^Z1*}UkQI>_{--nSIfgPe5ILrrI~p$nJ1HZGMOin zc`}(NlX)_kk>56~rb^cqzx*&^I0pEEJgRB8@@pnTQ8UEanaK_?(O+S!7rTN})&5NP zFYR{>T4}Bb>w&B@#p>ZE%3FIh!`WF0FHOJpq+zYiaAxVx$7qq$By=HI2NQWYI?SY3 zwV>?WmowOJUH&RD37LVfs1Kr8yX6qWVsOM2W}~~T)276em*|Kd7`)P9>=o}YHj}?b z5rMWer=Q2{9+q?F)DFfJN-=VT7JCVsZD-a zVih_$ZsI;DF56g%E+!T|bCv7RZha$t$#4!O2$_7ife*C826CMUt=;V9o#qBoKB@Ru zlLLc)p&x3Q)MxOMh@0Aatn6$KTT6-dXk&@}9fZy&y}_?%P7F-{MV3gV)1MT9wnSUs z;s3y9dy}(x`|eVs;>j$u^s<9ot3=duCkL|rQ$N%^sZZ9AMT*td?`G5Kur-k1Aq9s0 zn6Pn#ISf}6c?>oB9nLHg=C*6q5237PfZ>}zT1~$qck#}=_%piK#57nW(XfL9H;~4s zpU5XA=Z@wejf9o)yuwbVke9Ubcv`r~Ec}XD_*O}m{Y`lPG?j5mJfkp@(=qd>p{qy> zSDlr{A54Z7{_gLTgIHVxk<>T1ncHdGeOD0&r)s-jSbl?OH*{rP+I{@DR*Xa>?2mVi z^V;e5V~oD8O(sT4=oo|FX0i)JfJ63dn)fCu z$Z&1U=ie-O;;^sL*(#>}OE8Au72e~t3*$k_xQ6$9-bK=s_cq>hc^{(Qt-x2@YHgk6 zE&pEpEKjT1M+vM(GRym6$nl2xV%sR?+*)bljlp8IuL!kex(ivpw;XdnpU*ctf1cp^ zm8hBB#-|Hbp;x-jaB?8TpV_r-9tE^?t)0vQZKsstH?AU8t?*v2ptQP-xryp1HY+F9 zLl`C4kW*I)BmEmg`7R*t+;j{ZG1dvKW}XN(JshDko6hIR(j>TpH^~6^KyM@TGk*bpOPuk-Gcxm4u0^(!!72|vl*)u9f zlV+3G^L-EHWK@n|a{CWwk^m-n>cfFqz3-v^oS!-C9rk+jkWy*bu1~b}E#i20->(V( zG25$k$8B|*Yht^i_0-BhT$m(p&0!YKe{2hPf-}N=B13E zSd8b|F$kZNn=>hM&Z%};*>qo<&6&|EOOtLtIH}e_4!-4>-`=z78G9zxQovG=Vg}nT z+KxXvF$MMQwTTvHxLL8Pl2y%_v0avX>}92(UGJ#3RiJ%1+^1qxBV=Mz`cb>^>stv= z3TmofiKFI^>&*3ugcK5f!lRI+{2xs0WK1)oVwMl?(sLBEtL)#U_unXF%bxLC+aiLB zv1%q~MSgmfZmF`ne(X4O3;R_27hzut<+-NzOHjT%BH9fL*ZNwKFVymtoG*fwQ|bRs zFq3N+1gGK}w1R8$I8M#cJDMkDI&yPV9#qm94c&0wDmZ^S1?Tw;a@t!ak_-*;VfEyy4Bbn`p8~8ikleK5W9{=M8at zb!$rbj||cLDoBDdTbIjFL(x9iV+(t}Migh9gIs|wgfJqqUtd{G5Uq-`HAJEPe@0rgnP5&{qC8 zZ{mwJS;eYrlSgqt#MPztn?`1nwp=+A&k#>-*s zZ`lWSr}yn^YS3Dux_zgkc23`Z(ri+L)+9OSpJTUFXnl`UpAFcm$l{YGFfE$!@OzUL zrr(wXwKDXFPMEmc;|U@j5|UlgHYCz4_1Qb5Tl&^i{^mc@M_VCG3!4C-*6mSElslkw z^A{jKbJ0=|4*Hd{la0LZI~sTYgoACkJ(mYmN35X@2< zuFt8sUW^&Uew7KqW=oC-i1ca~%4bqE8*d7X(@YpIGhtLz|E9yXjXgu{G!sVF&S`-3 zG&VeZVNUU-Kc>M50s`PT0kEPt4jc~jqVThtE~^3IleSo+B7?9Hb0rgvChxO2?78Gg znIktap31+Gcyn=o==dE+jn2Lq3)Fs(Mld$g{P)NNP-AfcgYOBtp~hjD5H;An!Fe`! zutd~3VKgEIh!XH!XFI;kN+T6Zm*>%v6nTnTwQAwm+InSQ$o0Bm(yvo7uVsSGqYZBR z@vz`R(=gje{@})+J=K3qrR$3;hGyUo#BMG2UzA) zpE!(=rq>qtW2eiL*Vg5=p;7AuWOorEl_xbv@)XI`b3mpb_?x!AG!p>kTxQdrZnU-1 zzO6w32Wy>uRJ%3eV+us60BC-E^_M%F+ft{HlAV912JO7w7sITGH$8? zQa9|u44m+gYP3e-XCD@Yo-JYm8f6BO#_`PIiM162<++n*kL@#$4V7Pn9^utT80;O9 zf3lBO(h(Ar+t_L8@8#}j^mAXgkyH0w%cf*!MU)T|U|#$IrDXIq{Ehk|acdi#Sp+?{ zdkmZ!n^}DE>A48$JQO zo4cTb*|*1&MfLSPz7QvBiUfyOIz2u9HGChR%n4Obsls@=Fo)@UQX&!`a#KHC%LjAJ zLwx#tvjw=cl+P!)w-4N=$Y0o(EcFC9r;r6wyc#5^?Cq>!NF|QEejNwAgdx|~|E;u^ zH)!5o;gEwpgdI;_Uu}a#jCSNSDfftWZ*WRq$%l{SVSB|eRYNvLD><7*Ply9WyL`>= zt|IITsYS{qz$z8tb-G%Au1-R~BYevmQy8%1nbiGuTtA585Oe%;x#FACF_@2vp>wrx zI^%UyOQ?1xk^^T3?z<$O=yLWZBT2xgXP}wTpUbT3N$I0K7OHOIblPMc8I2|VVW%Z* zS{oe>E|FbQw*o&UMYMrfRAFBH{`(PVZs%V^4aOxjZG*ze9 z*a04uPLIvqvd*EJ{|uT%ndjTv4^XD}6Xp|g5RO_jUNZ^ut0nb$;85yg5T|SXn9Pnr z{q*t8l{3(Kt8G-pboHsP`b1=z=E`gMWNx8~)TeCqDO)~`;FGzHI!ApH_Tw0oj6Y2t z%|9NNDVNV2ReHVwrk?LkCBK>az09P352(&TFm9QYIemo4%v*dY_%d2}df93J0k&DUP51qSeb5_9V|Qdy?RQ4xSSr5%Rw};p1+FuwxS7Z-?UOUJ&J=lE z)xCLQ?cg&_O&?l5ty<2}-3I=NT1iJE?+YyjA9lQ?=SF6$cO6`H+Ivvg3T3eQL~;mq zMdTV4S5OCe%&))6CpMt+>5Ir#^ApJ9Q=RNVBkM_Gat|R+f|B86a$k$(G~0lsFQ}>X z1wZCC;NS$6_hU(bydl{AVU4_$Z;hvgyMCh*w!{;J!yLFyRk(~a@;)V>lsfTOR7gWV zBOyGA2oIJ#i2b0pLANisq7)M~cmK<$^v7&xK~9LNWcs7Vcf(45DBH87-VjP#BcQPv z84ddT_k)$|*EsCZ=;NV{qG-{zNg+1&;Kww1v#^@j$V(|MBT}XMb}Lnho2iA_X33Xr z<;(7#?^onA(Y!|TWpT0r5LuWLD;T(Q!E7FM{QP+fo#BRGoAOs;xBvf({yqO(ynpZg z%Ise%zfIR~dICif?}k$~rPxHl2`^nKK~p4Z0|#tLMwVSOPEx<3e)A_!epUVEEx5gK zvySLDv2s5U{zYX{zxk3(TU%0xt94$D0`qDB zh6!hHy&?g7LV*c4JqZQow=4xFesd?GqE&S&xFr_Kd))m)@RdCFqKIV@3GOwm<~EU0 zd)8p~p#zDDKKk0k{7fIe@vwsAdHL(63pDF~IjbabOZ-PKt;qHty|{7!7nc&dTzX0H z7b2*u_%-d}3H4oAC09OE;_J$+bgJSKxYgWe@q}yVS}C;gUF$#BdHr0Q+&4~g-{_t` z+eL(k8kzACIVmC@@oI<#e!H3lZVir-pTg_jNA2XUk|;nn?MI;!`+j=}O${b(lwkP! zKU~Ra_(d;?-*2rLp)o+msxvbVmTI%JHbx|6lPt>-C;w>c&(tACkN4N_J#lUTo)pJgKoURF7&7MCDo0HrLmW+ zuj}P&Q3E_uFM2~s8x{ScrOuj99-NSZ?5PA&VfkK-SP}}ik&ZKrgR%VFc{TX?Eo_L486)-Hxv(e2XgBG1k;C zACI~F>Sv3=hrjc*@_t4=%l@$O@$-hibj7TmWOUM#?_Ui;>$Z1l>L2D7p=GPl5uARg zHBow)RXTba68oCsti_{?GoPhqM5LWe2<2fFeI`*QPI(#H4>~}RUPzV8pV4El5zD^n z;mckSc(^%n^@}TL&{25EA1l@-cEKf}>u{L6>>aj4sDS*j6=iQn`#6k4!O0I#=%SGJ zgWpk~49cb?cI{0{?1dimEvGbA9%4<;=o)F&KLN%EN5Vh zFCw>75pKH+<>D28+d0a_A!;X#px6{#fwQ2?wg&^7pSg;*mCL?x`sr)%Z1mc;vOhLF z!6_(?ww4n>mJfd*3Uc&i)GS0#&N}-hG#YEff|Y_S!jxmr$@#deD72`E_v|&kBP@E4 zv6*m5C6JS&I#h9n@A;>M=Tx2w$ax)(?BCle`$g@(BUxx(V-1Az=cBFcGQpd5TD&X# z+&ZD_UE%3Z%Wp$)rH@P&rj{a}z%8Vlk9d_2^F{anJwvyBQT1Ld_HagIE*ZM%SG(Es zr1PiO#C+&G+WKq!G2u%w#g{nWZ=`0qT0-%qonB*0__xn8gu<8zdz4u@5k>(|`UBZ` zf+saeffSz9$5of)Nl5yNCkf+PAQyi{lsK(Up))e_VNl+AQO`r_6uKT#sT3_ZG=|3RI9##o~Fe^K#)>G1x?r5V)>bgvGMhM2PJWdK$|r z1%Xc6Az0RSDF}t0ai}#}e7I4sibqijDxP&&ai;zPIEFsnglQ?cBj~J=nk<&&06q>dwTxaV7=>>zRppO(u42?@a6xi;21F0G5smzVeQ2%p(%O8X*@?<5@s{f1ZddGX(ssNJxd5BK|Dg10x{K(X9L0ZMvOvje5~{>qaR0hS>k%e<%pSJ^jP?X1&7i;Tnx{^}-o#5tq>5++?PLT6Iyhd-M^O4{1B$&AY%!sO+!hNx*Ez=?2 z1uyi+=9gMn38g)6QESC53l4o?;-z?~e+vpM!hI~B16po_Viwps%XdeoQ%83BiwYy+ z)05E0GWUmpj|T8@G-vUJHaTr@*d+R@m=o=F3h$l{eDUMO%T~oWRunJsjA;orQiKQWSLvv zB+iTUUe!R)lkiLbXX}Udnf)I;)W5mee*Qru3Jv-o^^uLrYA5psylTe%Oci$B@e78K%-Z3cSjJ+>4gu}5>vU+OeFo73dZ zL5!)#`zBexMGqzs;7umTxDbM}t+OdK2pdQtffEvEOPNvCC!a)>0H~}QD{4Z8jScJsS_fRWA z54N3(9EP(i_HoEE(ISU^NRAalU8tb35$U(iRy$2rcGyIdB7sKTmKFUp9iBuyOToY; zSf45kT$F+V*{!5tKs4%+fb^^-@~(UmBrHiH;aow&y<=m~n!RVfNP~&-bQhtSltVNm z0u^HVJ(tm_YpWVn9P0PnMvL2aKnw=xXHkOg7wh&n*JW0gIgLH+A3e~&za^vm&(UuH z?a1;+$9BA!)>=w?bY$3ArjN{?v93cO(yZ6kLX_!8jaI2AuZ3_EZmyOlBE)7-PK&sY z=(!$a+K?Vls56fg5!6vba}vL+JzRd~qN5Tcqz;?Y!mX~os>H>CB>iz{zS zveiE2T0^9Ks@!q<8GX z=pZ7G3YZZz=C5yNnhGa18J>gqB$3sULqc(xoIC|z7C$GRe@C<%FP~=e@^72G{DC*3 zbIkx|O!`0fkJD$o{B_5d&(ojj1Cd`SMV}%J9mMzH<>VN< z*vA&*e4BU#iL% zO8Ik5Y)8)m1c@Qm#=2C$0LLGZ5BLUacH}hUH7x6KxA|j^pNt;fF^t|EL9<#$1*K~I zmYPqDUzt3~_?7fBemR=|zv(&zZjPU9hcJSMw?rfWZ(<1RX^Xt|Dz7<&$9R@@$;Oa# z|4Fy;`-&qdZn=*bDGxahAE{3o*I?*IL{aJx2Isa+0BA8PC zREO;yDQ_{;fk5SA2-&BBa!0Mp_KdC8E;B5?Ul4t*Df7w*O^>heUt{j%5p_j20ppR_ zl>C1g556OpR$PZ6m*R^*q6f*PeI(8jl0Y0rmaCejJV#piht0z0jFr?#=}M91$U2iG zq%Fl6pCZ=_yfdzQ)KV>Cf#Q!8im%TYK&c|!RQW+gkJ^mr+O-d3CoX zeMJqaTQD;_yW8`5i`pwTi69f|yxx82GZm6$i`*}9=tFGDOd*G7F2r!#cDwS9xcqN| z6_wpJcC%}2J8Dqv@djkU!DCI?SX+t3e8yVjK~qVMM1+LGEoF#253Ew6mmbGu956wq z*?-_c9RvyeufnwWjJ2|KpK8Kl4#xwJNl2htJw?PcBZ#HRdt%>vzwB4u+!Zb{y1Nbk&^Oc(tbER_FO(m zyp0la#}6fp;B!*ccwF|j9z$v7TtV|t!EoXZlzj_&44Rqh3R+nS%u5{8b0n1@yuqMi z0*3caGTjd>tC=Kn{<7Bkt>;zVoAUW>bT;?lxz+k6{71gEv-rtxr|QSXeBSJmf}KI5 z(=H`)trGdx?-=WMyyR_kmWbjhj8!8=mbkXm_()}q796d18S2^uQdcKaU8L4ZhAlO# z5~wxP$hRstbhvI4Lv1oe&m_jQ6ug#O1 z(cQ2m1i%3j&qUov?+Li6Z=1J}nA}Z-!AV{mX5T8w{K+@8a#~jkMvO?;t77Z+Z7yK#c2Yb??)fASIw)Ts#E+J*YqXrwKf%A2 zo2g;fJ-tcG%TZsueV6ufRC{)_J-gYS-E7Zpwr4lnvzzVN&GxWh>9xI^du}iNKJns* z6pxYkf31pHZE>~e=_i|IYIdW zC)58Els_5x3)0G`hh|0JRqMQ-IQbo++{z&xq5R5e@SN+zStHGOwe|2E39!$Bk-2}U z4`-n)!tF?N2B(d224~MiH-IzA`fdE}bZVtL9JSL2VoScYSmQ8Y@oUlRtkOQJ%FvH1 zfAyD?N9S6ICDQeHm`aTP0u`DMQ?61>7EBL4+~C&P!Ygo%UB%gAJ*|i+kd(JX6phQL z^w;XFlg^r&C=?X+_$m_;UN*cFg9Cg{+|O|H8=&9aG{2yU&q%1PD>4Zeo~17^oX?2H zr9Sc(a;v_jtS86!uSfh`_HW`RrM!ioG2QWVF7T${CptweS2K$Hm)i%7sdWro%Z)g} z>^@{FrB@}=E7O|DME6>ke?NBYaeP|}BSAE(g76vmH4ClJwQdvrQ3yarv$Kusm2F?~hxXj(X!0wD?tvLH1U@N6JktZ}qjf zJL!(ZLLvqA;cwvon+fPrNZXbsa*@keTUn)kvMxpWH)6PrB z2$~$3kM5Jh2a#JibLm7cRKNHYL5M2Oe(3n}J>ny+yoHeQ-4T+zEFB?Jy{QOE?pN@# zoEzywOgq_6iY_nRZdT6Bh=_@C1xKfQ+TGd~yKdp5NX>br2dLqk{-%RJA>t2s4WFz}wtcQKc$;D*+Bc_KY*?H8u{1E{_gzVzo6>sBv#XQkRC&P|h zWUG|*^Q++UDjgZS=rVB#7PZ5c#mV z$)-);hOy~Z;tkuIMk#d+_8*i#K=}n!kU_o$)Ubdm7DycnsH6{xWXL`^RX$P+Int|1 z(^pvVchgt^EnKpIY`(>goo6 z9RC25tYw7s0?mIT3lxWKsyE@1D`aH-FJWbrtW&*5{!t_rO7KU~2bkm8YkjtOeeIWb zua7efv%bfZ^{MenLY9u-2_pp;1=*E1si7n$-RSHpp3ASa26aakgE@SG`V5vC%-+!a z=*8)%`sP(st@KOO&|CY@qmEAEVs6AsCB5J`t(G3~yY|xV_+Y$Ee7texaro`Ez65^f z9amohzctDFsy-IR7nd)5hcn9u`L>QhD_HfCe3;u%>&0F<`|BH&VxX1BB}hjsx^1kp zXciN(vZt9j)}T6CYiX~WsDP@8ux;u0ReJFBNs=|_T@xOjqu4>}{O%5qy=QpNPQnvD ztw(r5>lMT&1J9e1Rp1HQzZ9PS<=Nl|yXM2WKo**L9HxG0wkw#rv1iCGJbB3G#34J_ zPasqBj|@w4yt=`2^>OgzCECIsY zhe1>j9jpZ1FhYy>akh$CVu-yW6ylJ*v}aU4>v1QZ(5a&0RY)XBp_mDl zuqQfhztg?_`Y^^M0zkiX0Qw04dwT=m!EONjmDM{HfUnX%^0%~qqMf6K6y)#F;#Yfv zX>VCNQbwl1l#rjh?f;I)M>lwSl3z~>o@w3S`5~6fNgVYC&j#!|QpS({VTfMuh*)t< zQU^)4a<;{P?+qV2A4tbX-oMd)DALCSAdN}{fPRbL?hSzH-2hmHw{a2yarwR5c=X)= zP~;@^3u;sn``eyp&U5#tBjs308cd3Rq|Mipgr`?3`4V_8=?2etz673tnEe=tWO4qn zqbL61{}TSO@xF8{bX=c?g%tYh&OeT8Khz`t@E<-g|0wDPKxH=odgUKIwBK#M&g?-y zsVKvL_{99Nv<#M9_fQ!6>%|6 zz~6s-PdYB%n2?H#6VS(T?e|O{06=Jv(Bih}9OhQ{aI8zk6HC|D^aS5R3%&^gAK|AIfc?4y$R(Kx z0GoOPu>P)eoE>Acm=53ya+mzC3Y?v`KScew?Bu?c^c!+7n4%Ao|# z36!7c(qDV)Qep@vs3;q=~Qz5{BQTCCxz5k>(9_`{h7^PH!(z3 zfBt@Fygz@&l`FkJ-8B3t9@gY?wFjGmH5?$xg{_W&Od;<&bxQacNRAD zrGAo9jynuXJI)OVP$c5P9S*KaYodbx&g8KyL028lHGT&7H9qtoL z=fJ3cEfRRkA^{0MzmYvUj(*we7O-E7U->*ojlX>!l=@YDsy^lZ*Z>hYc?GUgGeU<&~HwvDNso(&B&sjHPGe%Uq|KOkfLo6xzipK@{D zI}3TJQ_g!s{B7sFw<*5Kl=VfR5dFPb9QrxFJmdc*<$EK5so#ndfYK~SvAL5T+@Y=P z&%j46;~#oBfF63R9-0g9+D$S9SWdaP+1=dpnukED8adCLgnA~vlaRqr<7X!|{;bP! z5_p=BWeF0P-7^U!_$8Ly|2K}m5;H*Ws^iD+WX3;Ud_fQ8|Bdm#<*5mp3r03+{+1lbiCQ>1<8_K%CFLzSj2X0=WIW&|4AH(iZ|re@HLi}xFlgundm{SXhTONSGu?SG`&L#=5o z{pw$AsVb!U%@_|f|f zCbddcv&^IS&14m*F(7da{AbG1d&h~7-lNx<o{zA?} zEPCBwn;7M+N%a$f&yrMylq3Hnfw&DD1#no(HI%hF zl-aFAY5OfbDStaHiL23(B62zI-ZGzegf4GzqDbHmnmwXJ511Wd&t-K8`P*U1-=pCL zJ;~pW!e;1P^@$r3w>gNTQ88>8J&qw(@rBiw4r6uwun_C{pmS^*-L#%baBwU1AZIER3r-pHI+J%C_g( zTY)of;`A38tCVd|>VEfM+W#C#2)sg0|JMFTQI)m-DIbIg@^iYuky%e2_W>H@(Ce>Sc5?}DO@oK__z#YZ9A7bL~KDZW?m1c!g~77kid z=ChI)_a*lWBAXZ1>!t}6wq$pA&esb&nSY(0;3UPiCc>Go3=5C`t~`C@F&b003{R^q z1EJDzkqT$J>KZ;TnDc|ppA&43zct&m6`aaEaAbcZq-^dVJ_2a= z55#WFjzZ0m&!k(2cE#o4Cn=YZhn08xvuaC}=;n#~cM|&{>6^75`UnTGl+N|GAKJkb zZ%N$`eU!2vDqm>sg`(_*qIV~@7`tU+4qzgIiC1SSmY#wLYc_qX?#%3AHWBG@oh@3L zsBNLl$R7f@xmz*YH+L%^_r6=%YR<@?6qpn?Rf(#?-csZtH9u47Ej|oG06H-Yzh#K@ zZo{DTjos<%{{a5aOu;|F71S1Q@w3tQzB0DVh4C)50x};JwpMkES0#GH_|dKo$-nUG zE9QUTfv6D#H6koZ*(~N;rpv!i%nBbBh;YJj@a@I_`l)UgMa%@EA{R1hC31o9?l_=PrujT@-U2ddp+$=I_%DxYsK`b;Y(v z3&iR2*#d=(D?gh7q4*DD4m}L>fyk5aB`VY&@ymnpu33X=mDYzS$7j}; z`j3d`zWce)KV0NGQ@R!`x4AaW+;Hfcqd&WkjYqrd&_204GxXWn+!rRyL*43iy)QpB7=1Qs|5Qz++SPqBftx;?1*J&1b_Sl zahOJK4z3(>Y+y#!miAWOwv2r%^jV&R;LZM*`nxv8{y1v;DY59&3Vz|Bqg3N+{nI8j zd9=y9-Bm|b(`UIh)wJLFUhQ8y2P^y&_e5;)2Ku*V>p{OXs0V*!w#d6QsaG{foBGHG zee6y>6eVQHc1O{>+9M5u)4DjFsJ`!oG`N5#lX$raoPT$E9Or8&5FK5427}4vSws*- z5@_WLWUb~;JaZ#qqReEgOxY4#a$PURId?igkPFtJKjH1-AuBYQ>AE{K-(wtMz*rP+ z7H&Sgk;vj*?y8uEz`Pg=ZuJxr^P>S{fx|hAM@F4^g(cd3{p%*I<+bFK42v$%*6&!@ z@+y#{#|jpo8Z3UXq~I|7*wR|h@F(4|?V_+n(_hn3ne8G#O-^Z}WB8M!`QQ!?z8J@~ zCw(C^uZkj6-~z#RuVlyBzkC3@4(C;BgB%?Q$dlL#U$s$0>AFJx!PA^z`CNJ6 zGG=f|ySJ6MHgP_!4D-}UdeD0%>0F5B9_Qa{a|KU-Lq}XuTVgk%i&$nGNN`rScr@p3 zOlRz*Vn8`Jmr_G8r)eTBA2XW*X_LzVab4aTZc%bk!md$I#2rT(o%9$%cK7~|oJU~) z#=4KIw$WVQ+0WQ9CL~IMtsO1(9}zCMes1KhqnI!y^g)UIIl{g8e1m*G{=3@jYCqj< zgccmywLo)WB`z^c=0?u$C4aoWqeptGPi+mPwnMw9OI6e&8I?U2@CV|>pHsz;gGY=B z*pA!KD+1odcv2=A3fX?KC}(M zr@n9R@q0SHRK{OP##DT%)c;V$kAt@de5ven&FnqokHd3qH+a(H!!CjG#@91PZSWBE z>NehT8?T6fr~RhsdQaf5^CS;8w0aQMY_+ zD-Dr$*I*9nt|a ztE{jRx1em8)Y$`=)%PKF>Hg)i-oVX6QhKVb_z8*dQm^p=yxC*KQaTjZFGv7D z?Kk_ccd4GZd+&*>hn{c^>=!QETg0HKyMv}YMf>ac$#4zbf8C9P>Rl`y+&$aPZ{hmud&601< zJGl#Z7E25=_l$XA&jm#CacRp#u7#nu_I;i6kMME#^oanW zk8BFoiU5(VM3yGUSX`g-f&(564zv3k@?CXtpv;Jcaab|$AKIz;mjRu}`0Xk{GXd;R zUtC7bYDq9uAO(-{yihe^6;!U^VC(Id%f}7wX{M{WsnHKP|weN^HCYZ%40And0fHA>-h=)Zj{7Z zy1(hu1#WHmOYXa0V!}nBC)p+6$S!$8qszYq$M~okc5p5EUN1xTZ+8_kGq)7P`Dj4V z7H|{22Ca5Rq{^h2F)|>b`wl#Ep3q1MG%_9m!bRf%;l*NmMoBmyD2Q+(WN6G?;=F^a ze%cZZDjL!z$~A7n3SFCCeB+bnU+el{kCKGt)~u1x#CxY81X5*D$kc>6CD^?-X%|6! zl_WcYeA%wLiA(-*GqtBBbZxv!b zuE#`7QxgXoY9=qNZHG8!N?et?WZ(DdKnJr*={y$zDIuP_2DZAjNiE#fXl)=uA7#5! z`rd4wwDm)bKaOM_woq_|IWbq56SF?JLTx5CtC_jkF?Mt4qdeO-X#0^-#0T{RYFYu) ztv%IggSTPmpxBd@+z9&~gznVX5P^lw|+M2nzdR0qsC} zLS&21XMkRDEZi%?wjTQUl!?K?qln#8utS|1O?c83dtHR>nmrk{k)Xdlg%C>DZ7hRE)KhrPhEj2`K~}IAw^2q-JHI4r3{8Fo^xHXHnn|B zmp?^VC4LEJUPBP?=eo(1(tnA6!gu@JNb@_fnCxFb;@pV;0r8+v{y*yd&u!`NeKv9v zLCW{96O}st&Xf<}cf$D4Tx96k2-b1=tGoRuZEG6{zZw5-**E{M+4sKf06FRm6OnnH zEj;XWlj3AG!A<~tru$E@V?=tG(ax@sUuUx`n7#00l!gXA89}1Z7~VFXB_h+KTt~p; zYLVOlPKX&_1I8 zGIF~dfoYE7Di33{fVZ;rry_XmLIw>d**Gnz(a5dVH zbAd{~5?Gx1@>HB&Ggtb=#Ae`u%jwG%RLsxCwKFcDONDf4l(yl)F{y27HCzfAGofvC z-dq)jm)7FIa<2lng*=!`*!8N){@~yehcTlhTA~|=34Qv2q?AZ%^dbtm&r%t9I9sLj za2ogk#~a*vg1}+&G{g~jV6cZkMqC`Yh9Rpesa-as(rzr9YAka_OPt0>IzvOvGhF;l zRW(n$Kptsg+J!2ehY^n28JAPvwBgh|gXUze$f;1Kvw&y}JY6l3MQ`N9{dtJB)9&2|(`$yi;qv9|XLvTJMLo&ag4# zW0L2#m(*4s2zZNYy$5OG=34JRjk%qC!0$TX-B|1G3V6Yox}T!fi(%lhECBKV5K)l4 z*VcLof8@QU)_Y3v3az?9=-T)eRC&+L;wr7?=Q2|QGgkYK@KMfm8=VYPWFmf)6@M$%Jj}&QdG{CSfAvMNQA_amz>JS68&8pFBJS1SBNx*O zWo3*GByp1{Uw*D9xRA2<#LMobESO*mLGgDYpRq3#tWfZKGE64+N%0=Rd0& zo#7P_@;x&hfp2+)oP=vt+EM&RHd0ImR9bWeW+@!W#N*n=OHlr@L~udbT7pVy)f%;V zu63@_s_RxmS~GsFad_<zmVTY)O959=Vfo^T*~? zYU}3UL{IeY`mr5r=R~hC4u_|FTP{x0s_itm)~6yfN6%h&Z*5A;P`-`Fel*Fwx`(@9%1K zUe4ts&M^$%;ZOvls?!f#mI>7k$gA~&#ZV;IzgII~$I0t}#OsyvYEQggC9heD*Q@;> zO0hF*z2h65Mavd!ab%C4Q`zXq9`jx3d5pGx##mQi+2vf`1JB*U5l*gK>98^~m{KFR z>g)SQ?gn6PRMx5_7;VXVUsO-wC&%Mo=6i|EcP7Eu4p8PW4k)Z~pO1{e&#A>|hqwGc z?0pG*RMqwW3nUN_OjJ-@&G{5lVMS#$t0POkz{6^g%GV82q8suN&JQH%PiXJN0o8w_tNRoA9eyWi-Fiea zHwWI%dZ?juN#uIL?!}3emU;Iup5$RMDc_x2NQiVJxXdbx4Q(1dy_J|aotWqW6HlOL zpOu5Dp_B*ntyFk{D=G@Qw)<4RB4oh3~ zcTI2d9`6fE_)hrn8u%1?yqu)Q2eH0S)sXdgUp2jlPrD|3jvnu6$OIQcT&vdi%&(Ff zcOlLIb@Ic`98jWeGDmhg)J^u8Uzn-CT!i@6=6dvb*M3F)<>!zP>o0q$zhq+S!7PlF zwLY^jP%Z>Z=E(BT{0b`?yL~SZKX3PKBOi7?)OUZj@xWSkm8qraHH`Vm7_j_kTc*>X zu$_*AH=PQls15Uk6G&aM1}B(!Ax84Sos&)d7L0P~gc3jAF5jClwuCd)ubG z{WR>t`94f&>v^95t!>IXgk=q=;DNoHmhIb=`|+mBJCX4N&^Qi51?(m+F3Z^Kvmpe| zK3_f@9>b8pK}+yjJ?X(NYg28jC76p9qH4XWg|Z2aAA{IyRGiPE6JYo19uE8sn{2__ zR>Wk{FUPPPK>zhI`yeQe(_ks{^P~+$WC3AI@bVOv5E7(>QQGm7a2_=YA0_L&Iy_!C z?Pz@eES${FnS{IQ_gy&uy)_pgsBO{^teXr&|DH2q=lm}39N=;$4Q+gX_>T8aq<((i zg(KQW>{-Bj@^?|$v1c0JIT61@(9`FjW7^X>2Ckty-XBGuxCqV1{y60RlAPwOZk*CO zvu-SgnbVVpXayDV>+<6En2dd`{?5F{o)W(qVfGOYI&U-yLDv^}u zhJDxL2KuB;laV;vxKD4xd#ar$wt72{YjuUv!-N`x#il$I%=`Ef^9P%jbs{f&AjN;N z^9xv0_nl{MzA6r?*2h#=N%%&wjtxxI)%W*XKt8fRAfZFh;ZjK2co+4$Z-Pt6@)`8H z&oq8^26j!Y%_j7^N2u5Bfge_b#vl*hJC_c{JUC|Lre$9cF1hi8B;o#&+@r$of0H{g z?EZ?}@nN^oxR0X7C!(G{of}7e@94wS_m1vC-%E8ixA%`D@kQk$`{`|mT;%6Chyw@3 z_V0%qYh_J4K@F!}ad7OTsf@394Hs;WLgBxkXc@8NkMXT*_dkZPro-=f7UyQX=`%ri zZ&Ce1mH8LdTIhf}P6UMH4TfxU4v-9A$JY$USkUd@UQkQZi-Es&4r`6W7lGTbEV8yw zvyYUoa^7MS#2PW5>l#$Ewg#QltS>>c{(?7a3pH!Z21K)N70r4p8ZOq@YM}${6;1mM z-qPRSl>5P^%RfYO{RoKGO?jWdpLF`aLE-)<8rG+1*02tP6%G3G1pg8=arBM{5w6P| ztjCP&L6{~q>$Q4Bf5zmqmo@Oevi_Rd4tA+;raGWU96$af^f2_3`KmKyL@=wJ#3F{|LhZbt0xrEQH>= zBku&9OzEASbmJev&7xrZO*=ZqnznUfK168$@r#2wH-SROSbQwrZ#O+`7-wmV&$iw4 zC6-Ce-7jOi&Yzt#^(7nvOn({Yh)+i*u(sN#yw>%8403g|*@ty<;@-@Bwhou-vkwJe zn;4%W!SUEhbSsU1`7YWVk%R-k?d&iwIDoj@i63)PHjWG@Jhlk$?UB3Vi>L6>FMQXX z5OYYDIHK_n;P?xdq513p@=rU1aApZmSek;i}Le?Z#s_QpJ)OC_S$(ri5l=Xn}UmP5> zo`SHtzLVE=oHpnk%dh_r)%6Rh{{~u-^|Ar$`rL@RehV0;eS~$r3qj%-#RyPf!v^?xCXgWMh0?BMmE5EDt3=zmrL*ROnJ|Bu%;JL9yvi<98dIstxsr_r)O9H6MASquU)f<1^AgbQ6Lq zW5=}|@f9I52vGwB?hI%5lPUGB5NnR6ZMbnx*0+(UZ`-hMPW3G%T(_e2w*!rL->AQx zs?@g$Xm6-*Q@?h7`zbQfzrWQ%?pW*FM8w@r{D}JY!UYg8xjT+~f)&B932`pT67{Y7 z@uSzbg9FsJMAQ#dC|2L_$)7&;%?ZDV`ZkT#w<~e)a=-faDk|4FR^RT$$Glm6+X~b) zQQz)CeVd7RU$4G3%tPL&U+Op$8AE-$kr1a6Vl+qGOo(ZO_!85azV&V0kp_79&S+lr z1ZIqlJ*Tm6vhCQHV8U0in&S3rkYak231xfR3uwdW{@SoHckxC@B=gp`Gz>|3 z&6}zajfowmmE1c^vn& zwWYylnDiM(|`5XrZA z0Qqv^`ld`aj0-g!Ny~!lZhH@vKN#O)3EEoXJC6?wxHB>R<)%1u)5Z9tYgp8OLHpW% zm_$uK9U1rtc7&+;{V)7mQtVC;Y?|Rq6~U`sPuF+}A%iQV1foIICU$%5(1N&*bT$6jeD$kl2c|}m@7G^kXkMTtqXsrxCyn!t zGq2mvTpLH2r!x!ltm`o21+|SMR$j6z>A0#EWAdB9c&+9C19OPT#|Jm@{77@BaQ{x2 zSI00f-N@trpZR}spmyE_3D4C9Ih1Q_`lu!<@LNA{*_JVN7v z3_80Gtp-|{brQ4){A|z8UNX@bdpd$ygK$4gtAp%L2uskEX5O7MNe2QEaEC`;FwSIL zoV*Q#D2{JFnSsw=g;u+8|4QS56nx>eZnU}LWpgm+rDOz2+0{{t?N6D0$RF3ZOaHu( ze=shRU<;j^j6{%|&JAlCKDmNzOsF`jKhBk8WytSi;u~ggFG>z-=AnxccM*RXP#?|B zxS7Wod+GXk4QDd_!^xZOC+U};^tQ;g$d`#uJh@+zX5)Xi2d`_=V)G zJr;OT3iN}+#Z)#t9<%F#01jqoTZbiWpzE|ACSjPH{gcwnP5w!`rD;DaH{;exZSZL9 zN%SwqC8vQj6vm_sYg0vvwRx#-qQf5=`wA`<{RDGUHVa^eCBqnd(uR1g<6#7;YO!8m zPf6M^0@a0AnZ_rpFT0}ja(ep=BFI8kOxVM@IK$l3LJQHIZ^(V;U~U@YioHYut{8WW zHCBr#3kF_ngTX@VUx*VLn7>=GRGo(4oHwea)+Q`ohqIHk!AEB~dWI!!yaX2Ji|~vP z?XmaG{qUrXxM~L{oN^|a%|Y9w3=4Ka@hVD_V;rmKIQW=?Lw!2s+ZP2QnfL51UgD{5Zj)?rQEo3b)vSS~F*@2fkwT>!m_;-HJ`lsj;VUj?5$K=42wtp6# zF*pl}(y85NsS%IjwaeH?bVBVDpEnG((RBybGCAS>G@k$Fl1UzO(`zK0He}U`W|T#} zT^1ZD97up!n!1IAwvdE?E|mT&xqmMq%OuhxEo-@D!=whX;4!06sF~11_7-ks_RSIY zEfMyu5%$&y`!-<*8Tx!Gm9sH+-L)tO6e-H)`;#_9wC1KqClO_9aC$BC`_m*MVht{+ zg0s_RZbrcdi}A5z%0dRwDl;{=*{4aOmQl!fd|=*zOKKVh%gcD~;tA7k>( z4SWnZ9Hb6Lb5s2eCXCe)6@v<@fhNz_1rkg+}N3D&O8`6 zgtgi0sIO~$GUc)>_WKqcr1pW!xLNu*4-wb2nXNhyj+& zUH((d-LIIN#!sgZc&&k#JI=GyJRCjS?e)}uVEi)1E?yh2H9cjF%_noWG1f)Z7NJs1 zO-~wQtFMM@7P=PnFxU>H2Ncu0unv)q#fE+K#pMa@^wRfazLjTgO4y1OH;DUwG9uDu z`87ZM{N?(~Rj)#B+hz&IJD&?{G~)Z`^pRuSw9q_y{uS|PW~UJs!8ubPD!f^>mlO(o z#&qm)Kw~`?Wty~M3uU}HcOTBk?nO&L`(phl&bE>ToA3#rU5?n1jSiWAiOC`1MWjM8 z#^=F;96VSKW7~*$t&K_sh#wOonDF9wa^-fx`U?DZ5%^{Y_|mZHU&GF~mP?w}x&A-ya|1KM9JVKR-m|vMX5mk3Zq3 zl>D5LWMsbUe~*_-a40pNA!s*^yHLO14SdokVkrGDMn$AgB*SG#?L)1vjK8%>C!nKG zI^lbhaLW4x^xTb^!;)^KSDf%>N%PqGub}Bw#IMI^a%nJW03HmE|0@LgubiZ0la5bw z)Q`i@Rp{BSN@QApek8^Uh#-%m;q8!wy3k3d5EE5h!V$iEnF(8?qG zl8Ewr>qE8ulIjYz2)9OKY!`2y*e0zc)uxP;)M{2=J8ns)WmVD|m}-U!mX35$+dD3X z5B2aVTo6~nX>G!V8_4wDjx*ruaN`|$p$~=ni$Zh7f?uJhW$%i=Zf)AN(MY-(FRfCw z{sHi`WY{*Y#T-nwWWMUf5&o>iTmZeHoB3+e`XCr-+<{H2wv^1?z#CA&I^s|h%}r0S z)>p>~Ee0VoZig`M_{UIlT#vb_TIVOqJK~Q=VdvrF$u{~zTN;%xUQQ1tjG-7!){Jq+ z*g4dWs3~WH7!=5y=EAnd51#OkYV3$_-1kM&#unls;T`HP8^1{OO*_0RK564~KyG}? zpPcmIFw>^^Nr!h0N!mykx1xXxMX$%oEjY}APA$>g_-{u>Vz|zmF@4jSrfb@kMad3bV4_~C zsQ}|K^tTns##kGAR^)3VuIe|?zxqfCv-6uH#M+gG}4dzXX?Imv{6+ zV6DNNjBy=d4Gpjfedwo0}cmAh_^-7h;^c0{+w+cHDj( zvbmYv3ez0_R1%Z*zOIfFKL#(s$>*U3U}%~RV|PL-;?QHB`Xp6%9X;OJK;fNp^Hf|d z(lh+J9|kd?_8gb=gQcLo@nw`J6@GR+$%{H)s7mO?k~W?}x>e(@QP$>bw?el%gp64p zC(mUYjPXYPi!yd?8Z%hYz1>!Aa{;)HZW zT1c!acOy%Th$;zEpWNX_g2d}B;qnY79FHLYxxIM|7r~ZnBa#@)ON*rfrFcLND_(X<6g;m?5o>ZBYI9zrqNk!-h9L-e(=r z1#T=!mNq`O?Hl6;ib3ZrTaewP#(PltER6^7{^Ioce?j#?8Cs^kZP{^PXnu3$hl#{5 zgdZF#Na5-lj6o=aq4;Fs){aaN1DU|v`~L!pc()4```_5lqZjMIuGX;?-5qfE1K060 z>iQxcbhem4CH(m^*0=blVHDxh1N5{yQ-;{3!5A!TlhW{8GARSUn2{Lmm^(eWQXSvS zO{1Nlwf_LFG@@i^ybi`KxJ}dAl5U)VO0fVvW!svS2^cUgZ0s3PHxEP8jl``S;L=~- zPEzhz4+^OIsN27Rlh41IhZ7zhPvRO7s5v(r53lv5xgl;F+h<9zmO^pn5i#@HKduo@DZ!5rWALw;--q#-cu& z#y^%1MrywePS#H#BDx2yd5G> z=cq5c4Oo<~*5O1EP^QL61xb$_XPU=1T^g@#rx7kU{Ua3q)re=twOY;7+tCbYDL{uG zEfGvTMAO`+zjn?I%j4ZR%?_f{y>mHDAJAD-Asr=Pi!jboWb^C4-C9B&HAzDNkHN&H$ z11~${h5+h(pVUnyY#u7=H8q7b7w}5`HmlTu*|I`kEQxOTEkaQVoVuMVhSAQ5b>2_? z2&>8dyU^r6Sizh8cv>uC3E}PMmcxtU(c*Byp0U3kKP~)B4VaKMzLVq$*8L7j;UQ7S zSql5Dh#~YsSyV2jeG{j-$K<4iqK4RaKW!?2{k8vHS~bv3|tTNr13hc$nmHm z{t;M3N`y#gf_zyrT_k|-F^vvTY&Ma_z>hg-J&3aQ%+&-vm~a6?&|PChXe7xKl^*kn zhsU7=*g{apOVloKKO^KYzX^)PXq|{Qc@mAWCo&!rK3xe!^XNo|AOAkNuv&q69K3l! z5K+je^B1!IlD3T0A4Axt=a6)g2!~43fRu^ccKD%QyFe{C`uju_v-fk;U+z4f)~onh z)#*@=gK?Qq`b^1zPBSJ~=a`!oC3lP_o^dlRBe4M_!sL1TfyR;v&(7CGdW;`Tu97zF zMCx@ZpkxguoQWXF_RQT0$*@r`5$+rKJRftqKxZ)F5Go}CzTYt$W!d>A&BsUg0%wdh zP-dM^v;-4g=0OrVPC$@g!Y(*b9Rq(r8Q%vxmGSA}{sM36P&szwpe0aYehPwHDcJ6W zYhlo{JK-8(!+I4`*?)1uh$veU{ z6w6ncJG`ST5KtZj^Z|xJI@Q56gK%D`|08__(s}KvA+!|53hTsrTYtajYE&F<61O>^=fz1oUj##y1 zwgvtX!D<%5V&gi zVl)Ta39>n)hnj=!Sx7GjbBW+ZXb;bz`h%~Fz}Ft)YbV;n%YhG(5>DGNR;+P*JC7rI zll&Xo#stmrSmPaz+Jc<^6)O4lf6ED)N9Dy~iq2z1D8sNClOMm5ukZdrn70Y@3Ss68 zbD=QL5$5YoipTmtv_(25ims=5jK#d;gLtgmfII!NU7&v(3n$BO|25MOMk?fJrtE3^ zhn1>%=#lskLRg^0_IWbWE@p1(vFHF%+B7qBw+fRvpv($0rqNo$<3|ga9K*lt@}tMc zoh#8uGkmP{%VMOzR>)&qI+u%CnAO5;=;CtTBFufl)IQ_*JtCYZ-NN{3nZwP7Ol}q~ z;AWRexR-DVL^+>HYPB0%jJ?=jP@G++2AfH}g!~ zd{&tI7IAl04mZ8RWJK^o^+?*u>{99(&BG%fxp*#dFNoD?>Ha_Se^vs)a}FAR0o)I0 z1Kb0+ddfj#0pR<9p8}=>N>Wo(XLtiXf5i;P-1MqUJN`1t)2i%MvuDoAm_56^Dy`f; zclNA|s+pOU6*K2n&dDgLah7}S-ue=IO^v&v#ODRnI4c~fUZ18-)ACrxFA~|OsWY8S zKGrmR{z{%gy|1*wU0dsRmDKsGGFV!aM2kqTh#YuGJ3AL}tm##_y$+V3)9>(>_`PC;k1k6H{jdfVLUa#BBeE3hIuuHSBJd0s!eXE$6HG{jQ zzcjb(hZ2d$=MH!)9GVs_oc0M17tLSNk>T0}|DI2IyoL!p{Vo6G?lgh-q;dSQ$}wCw zy!N`%HI52VV&)-SesUB$4;>438jiWV!s&$TAjoO0BAsum9){|L&+jeq*!`#xF3Qrl zp*%mlSJku^Fu=|w2E-%FQ<`1NvzSk^jhn|R-*CHdRg}10qV?g^dx9S+-#3sN=^XNr zd`Poh@Y7b5#exhJKOH{D%4fKID%>?Sjtali?edkB`@IfFiOasmxytTm9YSv%AoZ)m;I@YFEpsR5BQl0MU=U1iAt(-Ztyxg8XCoL_#YDQhPv!Z(X+|;zxnJhxJ zqsHT4y^6Lnf#-j@$UpTd^8id=6Szo2mY+1!&dKK9vOIAix=U)^m7(rfOBu%V!L=Mss{w=b+9`zOu-EF9&Pv_o_UjdHm*4Jm z>1*sYz$~*Zo}R(kZxQh)ipvY1KBCiKXBx30-z?uGz2w}^0dJ;&+u)Y$8F zXRW8kQR_f@RQGhR!yoXv9F@A=r8}sz)&nlbS`TWbqq3&{Sj7>p=E$hiwJIc#xx=|U zmNG7(U_&v-mR`R{mUEfN2OCGeIXC6*wGLJ~PYFI`fA|ZuuM@$A%3pJWrqSjpOMjj| zGAohuk715ION3kUYx6oGOTSxpdmJv^U+tixt#Ymkc!9ps?$yy(R_iHK_40sUclz}z zyR*hoIYFxybf_)U^8?|=)TGZN%UPOQLl*bHzOPy7@Kt!79x7ra=Je^64v*JSfu>k_ zfgbQVWOc||$Ky$Q(v;(4G=Fs*9XEo@CDu6Fww|Zw5vH#3N2XgiCyODX`M1sH{xV#P zNVjbR$G3@bx^+Ew>%uM5-6!&^Yy6SvwrBA0(fmEaUxrH@$@AMP@C{13X-c|VL^+9O z9cr&#B7QXg2H`KmHHdUuWIQF^LM7dO!o6?3$e%E^M(%Ey+1K1B+*{H)zFmZuW|wdm zig40Q6XnwOBOb3%pD@dQz};Cb+)TTLo4Upy8E@Z@IbOSsn}s4=n=q4a z=lFj8;Lka};b+|ZPwNLS9L4L;p!-3Q52;V9@nt`C5spoknhWxBue7hRA8UUZQyb8< zLxTU68h@nTpY0CRRJx|1W5ejL+tKB%vDc+K);e^IZXxD$3^Q<3_gLvfw}iPwz3wij zArReUofBPT8B-2e{4yj_J(|mFnMjZHi&_Mi153N`r;QGJaAu5_b+pB-f29t2mBUXR zpI0Z1MN`91Mpz6*T54Uu>+`c8A4Wz`D*9}o`-MLbxU&G$qxciICk+s99&o1sC@p&A zxWQeRza7u>De*0jW-%|dJ$WAC_%303wu^8Nb5nbao4Upy*`AUg=lC>X>LOf=Fhk{4 z?sWZNW6c#4k1tzt$5$WEI_1Hud~a=haAB|GuyxD44?lHy?_98P$^)N0?EXu^&zD_u z^YvprKfLO-y-QE6eZ~CvPZmwo6OYfH_xuxon)a4;QR~#}_up~j)28-2UitSA&c1K) z@BdV@(LB_-yXAwtxfh=3$o*ku=953VV(~R;>pqxuX8xMRjhAlDEV*FUBfnhp-h1cn zsmN=&a(T{w<@z>u+%og-{HnLiTk78n{32mQ_xPV~9{1(mzxjNs5d@`-CI!& z^{7(!c-?E9m8hXEdo3!okEw3Zo9yL2cTK?WU~vRR7;cxd0{Yz59M8)^mMeEb|9LTs zS=IilrJdu;{=&_cpoxY1PtoIyWL{4P+ka(=e8~PwjW7GJZ#JKBx_tI3$MiJJDAF_8 zlwvjJrH+~zRRLFp4}HZY?tos4)g9dj4cA#!uiO24tsCwP-4`g=?E!za+w1f@F=1ii z)`p+R^GWTUo~;s$#>P&mWlM$epclpfW2MnZ&Z9W6xEY~pPuo#@%;Ip z8{_AGZj1)F07C(Uj|2qm^T_(TZy~RLsL;??^|B&|FHqy3H!t9-^V&TrQ_FPBCD0Vg zP{3t0jR`pV(2)*FZ;PNO@$teU&B8zN^o~`o5fhNmS{x;@?Id1)Qt!VLI9iXBkL)L< znf!Ck$6~L$cA38_{d`t|ZQgo96ccHN_>QV=!0)VKwQ)vWY2S%d=@_1m8o~H!Fc$)H zT@~(1Ot^H`H-+YUnDp>~9U>mpS$aMb?i09EQ|XRJfu+Dt#U}$#bJ1fhpI9o!%CS6u zYQ0zaI3Ik>9e}^tQSf%)&qerRn<;xKW=0dm#5(z8o*tSJdrlVap~8Kta3eZAdO!I;fdJIrQ4^`OF;3B>4h=Bi zVpX3edisiDHu=U}v#JW~Dnx6q;A@&7tmb16=#ogjak-+pMy?B{ox#|YxsPKSPg>@?^R9zzdY9WYCFhyH#fVEA6 zln31Gp?;Ns#(VN>742K?2iluW@YS>}-{uW<5c!bpK#eck z!LinpSmSD|;8z`2zoX{m@jBO#-mU55xtwJCqWVJmgOrOD)n)qSx_ODUV3CQ}=&d52 z40n&>{+)13eFm{D`54^uvvV2ASn)eV{Nn@zh+mvrwA>=1Yq8>|oXPVwvR`~KVOv%l zD}J?zPiqzQAboto0%|}}aZxthvEpwP@kg`R(AB1XME;eM#Ne0_Q*^^sTR8W+n zPt}E6o5=Z>KjKlH%`+7)x8$yXKCbYs z#@{63N7e&dPV9JlL_C?lfCDQYSn05P9WKYJ`WkFfVzJ9ziAB!(@=Awa=1cM^%``Fp zUFKTta@V;~lPoK+vg@w%>FG1)%w#*2^pk$Rz9?5%tjscNrog~r%`MI@Ubd(pds+IY zkKjT=<10<$zsG-NeDTi|O_S}5^Z|NCaYK{!SoZJHOc_sxFGL+(0k{l+4}};tfB@h+ zz>RV!VQ4v&vEI0ETp&Voa}U;BeBqP<@2I#Z`eVT%ThRpwR0w zRVeXobc)DPnT?IVJiE(L5m4e6_dy}LJK*w1(9g41RAV_@csMF8E>9rRf0+x5j?M~f z*prv!Tjrd8i%U$oyH|6%okF z9HijzM(}5K+ar)5<#*PSoTU6XeTnqe+uW-it_XjV&*xl4h*~VV+WZdHAA-XqR$_}C zSaHHOK{y4OQ*IWc94b}^JfQ^odTZ!~T-fstc^5l4{Xz%#apb%GSPzW!$B4Hog!Z~! zv}YdS&-0h-TH_?YVn>dnJg_Rl-xR2HhQm{xie!o8@2W7Zk~Fgh;OOIS%?sJ z&%{H<5(S=^%yEyN6ZW%CIb^&Ips-ECzekwU5YCiMV^C?4Wr^8VoHA8QoWlD-*}t4D z+_JyZ1=DJ{3?-ZzFWYLe2tO^vVmA8UH0 zwo3{r(S0I4+83fnO;7cYnO;GDae*~Ar7(rdPxhB8UDZD(UAB4zy-(1kITAf8UDZD( z-J)D5l@P>K&adomRl2JG;OLgJv5?AkrJz5WaowM9)jt;foJBSwt8Ei>Wk0X-t@;mw zZfQ>La?}n+UQ0fg%SGykDt*;|5cC%lWsjgM$0e1n>K~J?rMR%5*h0!2V|(WaKU#fM{Rc&VvDFkRfa#onId4_@ z*A)Lj(T7$m%ePF#k5;~_|Dfm>n@vSRK5c@2H2J9hgQG8oD`Y}XN(&1t`Mh6i5OiowmmakoRR2MxBgQSoM!Ze@SkBZjmKBrCQKU zq(Z=>maFO?lWtya9?2Y6firs1#uL>)Cfy=llH<}j-DvuT>K}_PEv}TZEiF#pBj`tK zud4r`=x0l%2Iq4G{b=K$>OUy@mi)!6y2!y6l24n-y7F^DEh^gOGUS-^$7aW`UBNJCjG^;W)j~kXC1v>s{XO)Vv&tioK`_Mn%<}S z$D(UB<+C9$arV*qRsCbq745Su23^%Z7Tvr>tXgQ>1l?$IQ2k@lEy%an3W`c|pif#& zmz2_KHPw;iIb1GuW`rKKeyjem(kW!UEY|e|-Dv%m>K~J?m>0AQy3ypK`p2YOWGP@X zR!m@vi&M0e^SL~t>3OPuZ2D{wIAxQdo5;o7PtL0UAnBHx7Gqf)Gj7&+KzpA^Ct81{ z`VTf8dCtK+m&<2#lzgcEgQcHu%41#D))@3v|3T8nS}OUCzMY+Z3+W3gqA?Qcb3snEX&@VQzDKaZZ^E@t}sQRzsADce9 zRm6|Rzv>^8z9omzO}v2f9j)G|{xRtmvE>e}ECyZGKPFv1P13dry3zDg z)jt;9;_T8qQ$7YK(Geui=kkbF4^{uz^f7qg@d&!n)f zEd8)04q{wiz~wQT)$;!RmFgdpzF2RU>-ln*pzkh#vPIB$3qtJ6^xfA8?>F?_59za2 z(swH*VvXHaQ6AyyyCcIkf%A#_ZEs5%YA6t8oyEI4N)sVYLau-DIX7C-f>^?gvp^c#; z>@@iYN^2SR6)RRpWTx*H2`8HCvX|Fjvjr~p0%JsQY_mZi%W)LH&qh?=jTBk&xS*EQ zxXbM|5j6Vl+V$JiD{|D>%N>ysWI?TPdskztu-FkPa~rnAE_J*57f^A1Z8`1US)H!P z42x`G_Ys?8Zr3urt}+n!6DR7$xvafvFJ$p{D)(z%6mB^lVF!i{wmkx$7^OX{{xRFL z+}W|@72>Q)LB5HP>4hfFPc%J8^&fmXedpraL^|?)SXD1k{bQ%Y4*jI)i#Y$$qKRReKx=Ci9uiWA1r;jK~JS0V`H*t)Lrq{;&AQq>CedIi{imTckj zi8ijP{)0;=Vj;bhFRZN<>B#fm>iDht4=x={>2P+opy(1*D61tKt6=*?I??Kp>OZ)2 zWN(k^bP<yCo)4naTK`ljkX82VVDveCvEC1K9vav9A=hyLpX zs(&o{D@+!);EaY172UW3E|+NQRH}b0x??UmWZVY07*Gdz{A<8W zge|*!5vx&hd`J}atNphezeV`}r@aq!N+FlyQo(Pm`;8hzK16W#J`~wyImq{*zs7sl z?A0QbkMH`uqQr}NzSZ}NEG~Yf)pB|x+*a>#r1G4u72!`58UK#nTESbWfeJr+1BoZJ zMWkyN>HZiddp};dmA+(|B}cEQwtMCE0@_+Z zU!H?i`MU%Oj|MYDClnhpY!mUMo~g$3As+4d^@&G!uHZTPnq{EV9rTo>n=jqe*YUey1k*bQh{N%Xl7H-*p$@)>@o;QzA0*Z5O zbVf?llg%PLz28oc${#)h!tU)-@t326r;bgQ8;d+Z{D(2XkbE1Ir}Za?jET1&GFEOr zWIPP`H{7+jnr)$8<8UE-j;(LL=mx}EkDp#`xzY_WJ6*7aulVD4+8`WZt|y z)5>Fg$uHuiTR*=pPy4ap$1E~>2TU6CRs7F^qx!Dm?-%%|e}2fg^v*-ZFu)|hyT3SO zY==4Gu0zH~!0Ui#e|gAw@K=Y77XXAKXc4A#{|RAs{rZscJm8Oj+XTD`Gvhah4DIei z#!mqM0z3n-1MUXI{q~TN3@8Mc0OtVrXMhKg1UL)0RKQ-?j}=_sF#fToE8~?S{btCZ z6L}!mEKIWB8ey0Ik!Cae8xa2?0l$y1-yLC>{*mU-;4f~cv9q^Tbh~b=#%mUpI(Ay@ zHF_~#u%Oqp*!3NHCEi%U)dIMx$zFx)J#m8^?@iHl9BajuwelUbrA0) zq-vW*I5}Vbj`Sl3bQ7i>wTblP``HgdK%|>R@>jUXmYQ)Hmy294P~+_t@uYl(STww+ zY3A=9*=R*eYY=o~xJ^pAtP}oHzd>~I{w${$D}I}ZFUuYAZDv}k6AZi`GNHc<4Q48BXd?(#$$Ln|UP*Qx~SBBje2z78Soo@GJ4ETgE4y zh#r}4+Hjt3Lp(RL61Z8wt`61f>^?mo8<^T)?-S+Jx$ZTXbiPr&cGP?6vaj<~)A{|u z(5&T+fSWJp<+n^QWPvGlNJ7c_E9J0d1kbk!-p{{5_{(sKS8)2;@jPCukXzSi?k*JW zWZ_?S4#&5g+}GSE+^y#dI>OwN!rf(po;nY16Z}N;FBASU+%|<@PYiy$1i!74KVh~B zvqA7F&9P`Ok*-M2)2oQi)b3jVDq_`eCfCgh(cDzdEKh10lv zqWQO<$Ngov4#9t+z_(B2{<40z2)C@?Eu*-9zy3v}8_nM%=%+qtR;icQ&l{=Z899R295Q+UlCG4$G`mtcKQf(f)UVL@3rZ^-H8s=IQ)i~7&f>S}*LrXV zpuAe%Bls*44BZ9ue1MAoDR892yz<&1WBu!gjG2JT00-fI4yKmeZL9)31b82C6QC1t z{t4a25WosRzA*0rUW5HTm}6m%0+6`??h|3Y12Yq58i35Z#sW_5HeMOmZS+GS<7veG4Z`1#u%}Ied3LvPGH^G+z8!IYI=S082j+hvZ8PFHK<8cf z1%b-|t`hzS5%*KjOaz@LVE-7nIMBHga5}>Lcf&d0?@gp#4qm6s`uZ@Kc!LQOD{Vwu2{k@$DuCLr9uh52XL2{%w2873iuHqj;gb)G!V;e75`LL5DUC>fa#I>a?_vOjSKZ0r zb!X<;3 z@IADB!1U|8@%>onwGG@PJHflazld?s)i${C%H-P6xZjzl~8}P;OzYyl%5&n5$lAXW-_dfyS5$|cZ%Y;dGg6VK4fd5~D z#@%p#B22Oq{2A`Do4Sp9KrP?~z%2m6NsxZh{cW0(Hl?is@j_{-c$xld-$(y_GujQz zYM9pn2q!`MN%yyDO4^jR3d9SgrQ&7!i+=*XZ%5g|yb9*^0K!R-e$xGInvyo9tpf2v zX{mUb{>`^_8=E$F8^4FS9p-KT;Uq{u>HaoNNt@DEfq0>`RJ=_8zu@;E^7SUnT`&&= z2q!`MN%yyDO4^jR3d9SgrQ&7!8-Cqwl-!NJdV9BVr!dJ*Py_eq-(da>Xn^}9xXF~T z5BPmgBHugFr##(lJPLUEscvKaZpaES5pXwPCh&K_Tn)by5I*^tZe#hLZsQMt`LLHi zkN)u`%*%yIb^S&@UIL`wCFiaJlutKK=DZToywz-KUId8rVK9Q$D;qKrN>CS zsK?k0XodaY6+K2TV00C3b^Ik9^)gJ z$v^2aasWF3uin;U1UB~=_W~}ty~j8i@Y&WLBlVshhZnCCcwLZ1Aw)Fhmv}Y2LQL6!0pw^+};M<&A`14cojhQ7XcpthMd@Id<^rjuy?`y zH^3OvYn(l{*SG>e_6vo*8RoO&dW~g(s#E&fcc0p8ya0F~K=uy6mw@EcdX0R57tneJ zw_gH#;_1D{I+z=Q+YBIkHO$vx4u_uxAo~Hp>9Ah`n06-Uo&~x9vJcgJjZ*+~0Iy6$ ze$MVS{tojH;2pqRxEBB}29W&{zy#p`0a~Ao?=|8;gY1bg&j8E?+y(e8;1OZp3G;P8 z3etQF<{`kD!u~$&lVMLjuh%#ka4vxC>402737{Ep3*fiH{s)*l0nYW*C-Ai9qxdC zVMMqe#RwmZ-a!7p9DwFcz+HQLuW>uz&wy^gw$@(bbHJ?o``Sz4{wv@fKpS8!fbyx1 zKM)DqN|Nt!^ml8De_wa^fnLM^Nw0Adpa^i{r>NI}$$&cnyy8*d zhZzSm2j-*`EiHsRH3;`1rfH|0rRqVUN|lXMl7E zLrd~Cn6QyyjwRl!N8$0-2suWk^G)sT5oyMfk%lsPRD@q25ic4KV~(K=laC=zWcq{Q z>&rp#9!ZnzM=KjO?ALVKRY_q3?ht5 zV_OWGYIt%#3HTFW58!72!nFdP7j|+#8ezW`_O=K&`EONt-3*-h-Xq3|fY*L^#P|}> z3CM!`biiGJX8?;$*K zz5R?YjHdwm0q;-x!blp=O|lbQ0QXIRaqxc(?#E##Q$oU-Ul_-FraSyvNx6Hiqq2m* zD&%Je+78^n&&3pp0g+7l-jDhmYue%S-9jXOtR%zP3BQNqD=GJT z9gY&0eT@_M2hkVIcn%)9k>{^eWQfkwOafHcJ$8I!17D}cTT@jv?mFS0v5AM5=ffG3 zGb$Y(U&$(GZH*JhQfFqSrj_73)g^THtE2|s@<3{3B3_E1(+pDw*nPO`hYnGRZ{*Cw zCyCjYR_8Ck7l>=BQb`t0ms5VIrCRV?Ea;5D!6Q27qv8{RKSzWiL!MWXrnaE(c`S*S zX4d?p`@!prYH%IZq5{N)6^ z{CwU#m!s|*XN11!5^6Tuh#=30SxE6snDpL2cSx=<7Wk0WP9w+zLMLg->(w)OFU*mmV7QQeFJ^gOVLHJSYf0sxv*~a-% z{oCH}8(;D%&6XJLJ1a)})?)M@X));Qg8s4Am+&CKDom*2wl(v5dyx>`oiOPg+;5&v z|G}o#?kT~|cwYK$Udqip-7=BxRj62WZu7fH*X6FHmfC-4aa68yq*gnetE&C_0x`Y_ z=X5=takfS9d70qzKCE6)+r@jW_@X-A6=Y}K@!>Xd<1}!K27jW^-XJon3 z=jRSJ{Tb+o!GfmZ@58MB>;dqf0#ABE|MUhDGAofjl2+5{8p`F|pPsv>veZjOR!XlC zp9d-9dto}%gKSfwDI2$~Fo~%2-bQ9d56BQXAxQfK8_{Tg=k z-3sv)c#Eh|=FKBV3j9#N7U~oRMH4CGY5k+Hm};C*9;S`FwtqeR1ImNiVSjmIY!8>G zS}pp?(JttydhbfKA8K1F{$${141j+cxG8{d-hZueRFvSWgrbKoyM^}?G;Y&F?-o!y z`{wDexlL#s*dx-BwPe72E6=BVPguUk+rNBS|L63T z()AIgcl}?*zx8I!KzTcbf5&X(>k>8tE=QaD$p6FX^D*ng7(|dR- z{@1|MT{$ZL5#XsjRQxjJZ}I^6{3!S}z|$QUDjjze{EH}W3V*Ef3+erM!M3E%Yxj6~ zp=aF2%exS?>3J99Kk1e#Uxi42D)6b5^jX1DdwIFnu|_&7E4|X{rH>T)gsUP@if?l| z)(WT7Rpk~|Hv8nH$ch(9Bn7;KFT=PiYMee?mcqmJq3p#+FeCiJ(P1lfS5@INqB5Sp zFB5*;`6A}nlwYY=O0zvHo6w<0;-%Rj=BN3A8un_H3@H7jStjOb%luUtEFimfrZnIw z^}E@SMWbf;^(RTDA3vUXoS$NMts@i&7MYGT(=v|Ecl-I=pVc3}F5oV|(ox~Z!oaNa zQ|E*i1}Y%F5+Az{7@fk}&Afg{{bmySqqC8IwD*47M0hzrQQcZT=ObBUM)L2mEoPYH zT<)K?n48hUw-)j6dJYfQ5+l5)n1|O)JiJGQPZRSd^}VkKgNG{FhP=r_K)efQ0srV5nhq;hgM0wiL3};enqP3oxVy&mfSwu@SRPl$S(EkwfojE}G{Gpn5`T+R3z|**|(w_}H%@b7oWl`u{3jBlt!j}S1 z>zFE?O5g`77YFbY5k6Kus0z3$XgN=g^Mya-^?}|2re`JOM&&XP{_Fwp4*)l70Q?c) zNS-R4FQVYD0)8O+8-S;LsdP3*!Pi8gL-$5dIjVG?0G`UL%8vJCbuXqaSVoeQNLtr) z+H0Iwvt=r}ai*fiVRr>QI>tW!Qt76jbNP`B=oyd>O+1OVi|(x{ci|eont#(3g6cys3t-CP63u1y6r8PhM+*N%jHxsPwu$ zblsP~+M#>wE@uUP>ud16WbRt+s2sUc(39(tezzN}y6Qvhb1r?fe#fo4ufpwdY!UHN z1Rs)5aib0kLptUaJJ3ikw8*%hriNTX=YR58Ed|k-P>h-;rTf zz>kSv{e?vkT=^v~R^mKQk6^T}8Xs!Fi{OOvQ~mVWah(|DA+;~L95)k$ASC+{AH-ny z%lHmnEgbqP_Wc5hc6%rErDdyzSn+SCh7>JMMEWDO3?YY4h1|ZK`=S)-GqG^lUw0Rm zJB>y3$a|l@vEGgEqI*j)Yj^s6C1khbZYw0&D$-lYlhYo+dJmPeiCu`rG)MWeexDkp z@|lhXG8^&QN_qV^3wlz&YA|zr(XwKEZPJ3s4&v@Yo33qJM_#CxO@SR2fG%I%7ybQojxkJ%7s$wR8}Q5_N(hl z(Pmbo{@y3z%YLdIG)@A@2%&o#MAx=Ygr~VRJr4m$zgr~lbI`BRt6cMR@Uhy3ProcA z$Ha-+)ZcJEAx8G33bz~=rqTW+R(VNhpr=syQ(K~^e|XZA=jjb1oRqtMEo&iG%c9an zXdt#CeEf=GLM~2E%?I75LStKm_|R;`9TifHVT`86zX|cjBYs&SZ>K3dnNYoGvvPd< zK|YUBQ@Mp2^a`p4E%E31qvhdNV!N;ZxQvx;&cKmO7 zzNQIIi#;_?f1%x9E!a`>M|$`ygjMlw;7J!Tc~`NRg*7}Mx}Yob?MdVLpl}5~DP>tfwa)Wbdj1&NA3@XyKGJwV}Tp`2pxvt zG4A2zOS(HfQ@NoP;o=x~ZLuHB$U<=9ghrsMine{oLZ=%r)N+*Qbu=wo(3>LYU@4oe z<6*tXVXxIIq5Du>lU+KmbIWXtr&Hy?vq{94{fitQqA*eCr7<3haRbysB~X}AN3!L0#z$m+8CA4LUqnasNbIkIYVt@ zs;bvPn!9Y@_{+j2;SM98o1$*YbTt1TpJ-UB}#v&DeJ#bX^Dt;Ys#EXija-y>| zDn1Drp}NQ<=<&MOI4hxfh-yQMEpz~;0w4@MZGt~pesbJHKS-x|LOo!(9phe87aAT& zy0AP)Cvd!uD!SpQ4+aaI)ox58BlbC64u2g!`W1i47D@ORT7b)UM zK)NW1eGOD9>Z2u5`V1Ra0CkVkgKMK0`%*P^tfj?R%;fmN4!zDDsKJd)q$4nDXkSnR zq4Cx;24SFP3mCK!Qvicnt}VoU9h!|N@t)p!mq|nlUpw`!KsnN zYMixBzn6Si+V>PK(&;np%V;rRs!R=K6x8DvGw8G&)#bFH4RJ+FR zU4;(J=MH$Gp_T`H^^UcUiU2!E!UVx^m5>d|w8D#7>GVp+8XP%6UR_Aji&{cDU})Y> zXrE-C(ji}@f^X4b2&TnzOb?N;+qEiOZcLN)20W-65sFN}k(xzUw*`AQ1boX}6Na(i*XbR|bgb%D1I`3gtaOcvu5jrB4NnX>-|Ah*W4l}F=ppDiDEr<_-EL`FrIbTu_lH;68?*cGN>zOM4 zjRZ~8fwxz#vAZg0g6%|~MQ7D8t#{PB(Vo#>onE>|ewDvk^N94Mo}|)y3-m_!p=WUy z6FEr@vusHV!L&9(?`(45kX?y6dncBIMm#d3m zL8U#wt5iW<#Wyfx_buxi#vf7G-F!N+pWM!)iK4CnhLDql5FglH|rr1Ps03%uB2tf50N z7)WUhEvIu#^r-~&&1_*$3|#Q2pbHRnoeuzYkasDmJRtN{)ZpwT+~`UD*Os`p_DcHTUhc5y-W(p;O4 zd0>&fu9yXr^~ddts5&@yNhGMZ%=j~}2htp_(8yZn77 zbm}nO80u;&l>=LEAVvAM-Bh|DEK>~(AgO!{3B8Dtx@QlfqtL9SE2HA7Vu{efS&+7 z_1Wllj_Fa;Nk#uleWHp#A9y<7;#iA`9DPki7c1rHG}s~~)nlC8C(Ra`w2uvX2)}Y0 zZ!hNx?o_&;f-cQ&t9hP1(5tBBkQ__lV ze_u7{gW4=TvVZf4_yqw!CJfweI@C;3hF#KTKlv5CX!k~o(UK23aLM6mZ4Z*7IHC5!p(^_Qr zdY$+XkkFpkLUTFCQD(b%D34)|!hgYHK5xSc+9#+BMSk-q5eHFe#)82vYzO6Y-D z*(1#?vHz0w2JaVTK^ zyPU2X{|!Wxw1|d`C(W`v&R4sLA1$3^u}-bMbM$<6iSsV4BHTdykbbP594e+l#hrb{VwodWN}?jFq{==4NrIgIqs z8qEB?(3UX>&`D9Y(!qAm#DK&V>xiX={AJdNg|jY^o*b8C-9%eO0fu%~LRWk@tmXAH zg=aIA&#a}Q-imz_sM6T=q0@9&XT!i)gEc#Ba=NizgwA*x9e3d0#wzQ(>$8A*=Q5f! z=yn}icscsVFdL~OOL2g~=PxaHtit&MUp3a+N<&NvKXiMlk56aMWvQvDk_BC_qO~U- zsLL_N4sYZ2LeBe76YgOmpSt1>?VG`$t%W|wnZqqDw38ynN8ZsT z?%@2(`QVQco956e{)bWUw+pP&=_vsUlvGA(@R`^pN zq~h-Zp88J}Pw&kTJr%zP_=&*N?lmo?I@anmHj70*CIvPh*}RjNhg{G4m2gv;(1Vpl zwzA-_qv6wsBTa64uN7S`-bE#eGAf#;(%CEM5D)aoy$GlxGNvxeg8bF^`Yz6wod5SP zSJpJ?B?z>`{`seQ0FB=w>!`{z(9|Iby{t^HoE*;@5uW6s zKC(a1gg&)T=u7RwRO#FY0z?P>KaH}L3q>D3WlFdM$J)k7`_o*0vR*ocTbB1v#X1MN z1NPJjf5{IYKckM4>1AkM1MKue@xdVoPYq7a;Ov(?7lAU^Cg|sj^rEffH=Lg>LU2RY zCz+4382(w~m#~O!XK+&&?lfU`)p7c|NF_v9gl{;F$7?;Eo5>A4{37?-`IYr9-Q=oY z$hO$HYKEO`Hy1puD1qjyySdzDJB=mhk)r%Uqc1-zCB{Zdg!!cEGSO6Cp?@ICZCf+El(bl{bmWfEPs!f zw`rdreLmAJ^vs4^xqeg3UZ4mQE>!4lIfu)KI0%R8zkcA6=QgnW?ZSpH-&;scEx~`N z9kKleo+a$GMQ%H2=ReEkL2G~Xtb(A^U`ly2B!1NW4t=`Lywq@81ihgmB3EGh{IUw) z@4XKZUdmOPtz!ORW5?kv7@7Ga{iWF@-ft-kpLfZ3`xldT7DnZ;opVg^#m;#V-#Cv% zVBg#fF)jQE5VfSzOC}4zj?*BzMXMog9o+i`YrYLhO^9 z_=lEq+5Y$nTFhTWGf;|`Be%pYzOX%nM2K8kJ1fGPMFDoh7l$^(!!|2+v@y@EafqbJ zhcB{=Wq%88W(#``6nz`*U}MFK9oo1Q``6+FtBWzWL4w6%&pMpK#k5kbMZF9S= zv{j8Y6}DBq2s_oep`B_9L71HX$KHDY##NkcxT`J^iXrs6fB;i0w5x84ElY9%7a_S} zOr*86YYVHfyRzjFun9GU7D5jRga9F-gaDxh0tvkndI-HF5C|rOE}Om2H}lQz(a{Q% zz<>Yb-hb^^@0o9UJ=4yNu2VP2I(0PBXcnpy*qyNt}~jif-zQ5tCW58D{-?T5q#1KhKio=Q-YmXIG>QyYl4tu{zs+ z&1Fa@EBub<%xrLvja`YQHVQLa5sNb8q;tpdHTu0)vzZr7&*k&cA~UZ{sX3d@yyN#Y z9M)b-Utf}<&@d3^Z!-hbUQy1J6{~LNf@Npl@q4;{O^Hj&9LRuouiCH`H?q-l5BXt_ z*mlCLo6N`g4S-)R-pf18FPHr?+hvg-KZ^M?kjp%}-<@-i$ymZKZym+FoNX#j#v9Tm+rCWxU#*+ zPnfu{t)r*2jO`%7y`$r2%?$3nZ2YXrlY@JA2KVj=?&P;G^N`;Dq+kC~)%VNgyD72f zmrH+L;z{M`SYmggxJ@K>=A_GRoVn()8JObzYyM{D66e|VU29XSIz4;e_UZPW+GYQW zY%N*d#Ue%f!uCMmO?9u@=bk@&GVb03Gk*C`kjuE(FTZ*e^Vg{PJlOklZ(RR+bu7U# zN$p*+aMmyTSzxUR|kO@2H(t7%(qgp;VnP1!R zKh|Quy647QZrt+4?y>Ig3x~7kkJmCf5r$pNG3+l6b&p!5% zym|1?7mjZslevU!@?EmX&q5|?;5UChGFfZ#%YUSDDSZP>TrZB=Ei8<>WiN^h+srJ* ztX8{{IPqzlPNmqBpWnT!k!_Gg{wHLTwx;qVqKnP0K?;qmB`1P3+33m7@7@lypG8^Z z6OkW+eCn(jO>;7LP)i+`{iF+Zjy%E$bVU#Kr%j}xwl+xv`4v55T(Z)}W4-Fz~|cM$5otFO*~>DUm`#SF_cn+R}k z{Xf}wy7nEB`C(kj42wmwd~PO(O^QxZ^WRW&{_s!Bv-#tfA2^D9CUU743$^p*x3>g+ z37cOYS9^YW?6WCcdkIb<0$g!$a^A#T|EP&?N+DpG&`Y%#{{PIyD}x20W_IX}N#&Oe=!MZOPm znV0jMuSYKLJiojTxwPfp@+M!RuA{uUau%w_ER#d~@R~BaA@tC^{s^;DY|(M+c7drc z+H`EgFZsFhmwDG7#^@u+`jVYV*4JC$4z;(nwKnSe&Du(La|7?Gy&cuwLGT7(HrsA9 zZ5lb;xm?!mt#$KFxl}9j<&r7TvQ0NBGgT}ou@yl!`x+O^U$XIOQ1=}T-?x!%pGCqL z^`9>qr}9faw3-i9WP;7PXxa4_9Z%HxTt;lsIOCa7r)Okzx@rvjLfsSKmC%zs-;r zvq`9H)EzetcJCFx`?uq^^k4k)Z&JSHedd>sK`!lvU%n%9ai=A^cz};-*e|@4a~`AJ z72!Z@G-=;|jnPC$yvr>A1*RZmOIkBS&hR`l`pirtC)gGqPcR`WldrVS9>NFvbNT7G zU+1UU0C6DO>iHtlbjAmgu~4;J%V8}}I!3Ojk&Log-t1^u@10j{K1-VWuWE*=Ntri|14@(8llEOMC-lYDjl&0!?kfXZ)Q_G61Vzg)t*33AyJMw3Tk%Y$UY zs9XIo&A8_^8*Z6flAlZ-nDbC%_ti34mge*nnaU?WdxI^@r}HT0u2Fk#yyZ zTx>0j$u=_*=}k2s6wCZh0~>&m`xn@kGSDk_qn%@kMlvd|qk!N3hQwFOkZ#t^@*pcL$M)yKb(*O_si_{*Mt${9JqJ%-Js(f)XDl zQP|(~7aLwF)AIA1mlGOfK5RhWH??Zs<*PG4yMrYn3TuybCjB?4Pp7jjTQRW=Kw1|e&V+U2{ zJioLVbBLdqa=HG+3!;nV1bo{fP5G-$S2wR9^YyZ)*e^dCxx91z@)MBPWs#qPT-rFl z`O}e0QTZ1F$~^}$xn}@d>=)DURu~oMvBOgD{PIqf|117*He8~OiAebX%lS9|O`AUZ z;GX=XAK?0YOqm3Tj`_KAEbn6ZxpL>^j=yQO)A}2zdP8OB_WG)J<98=_yphkIb64Ia z@~gFE=Gx`a?GtzIN}DJ@J1d*{?$eob?Sc!J3#Y3`?)~ZBW6qq5r>mzfye=M2?%Z>7 z$1Wa$D{Z=uQQlFxLb*Y?RXL_SsC=CA50x)hzFzru~8Umn)yH z{Bz~&ly6nONBL>xzbhABZQb2ec}L|c<^7cBE60?VDW9zTQ{^j_|DgP+@^i{>D7*Y} z`Qyr|D@Tr9xpn&f^5X2f{Bq^T<)>fm>^t|I`>wpW^5D!lcU^d0IdyW!uADl1j-C6? zzVpZFyLh^C=G=4a;^EXTJ_WYAn0J{x{_w?A>PO%Ta4UEaJO|zZYeC6NsnjN5Com4w zfJQJA90C@DL2wc{7hDZ)0e6Fk!PDRs@D9j(IhEQ7Yy-xDD$oFCfp3As!FRw3;7o8K z_yxEcNID1#6-<|z-?G1amRk7QXQ|n*f0lXyyutGUZ)EOMbM2br#~zt#?0w~Pzht-Q zLOD>YuTvV?WFHHLi@TEJ>6Y0;M&gVy27}|q1?_`58jyXD460=eYfillhGmtmLdNVJ z-2(~wpMg*QZtIoICCKk`RX1B@K;BbQmj2!Fd+sS1c0Tlycdfq%sz0YtP^3-#>i!Hr z*ZDE^XS(|1&UK#2*ElLNt}i;>?=DtG0@ubv@?@-VR%iFYiK@q*o*WhTR?X~t*KV!l?6E*`}MU0|8hHT`*$ z-g}$-eMULQSDn`v`^5Kb{PwcJ56q`xNSgWO2P2oZX5H@FbAs&=C3xb(+#s71_$tJl zTw*@>SQJS_$5mJQ;x>x8P`R4Za9*V04yiha3<~n>yla|1nH`oouWgeiyH+y7mLgl@ z{B}5^f@C$F>Fh@ASbn&P<|fa4RLk6YzIJ5ZjPXf2CCm{q><$RBA2vA<>2{ra=SNy! zY&8u^k6t4Qxqi9h!2Pzo_Qjczh;*k7y7!ahrToS`WX(y+TZ#QURuyS;uUd0zuS=mJP_*vYm~~H>o-I-n(Dbu0DBo))IB^i=32*c|tV8OO4bQ8PVW-jA(GZ zi8fMKUA6^phYxK2lGElV>xR--_E_Wm1<6N_xiqtM>>BWeT@56ca5kXJZco&QX>)#M zax^`0)}v=mZ5-jbCt#gX*|%=a%N^#2ri;g^(Ml23a^=!$&B2&pLGp=;?eU9%};rngm`#F1#eb(prtXKG~Z{(?PykTsrmWKJtd=+FLOMk3 zMUvS!StCjBu|EA{Tdu1$CZduuUQ<~S4wdg+Hg56zlN#RGYtKD)AG_PGyOi#{(~h;l z9k$Vt_z%Cl z?c$%F{rgkDcf~a~|NNHzU)^!*1t*_&#Br;Bc+wg1m(Kb0*>~Sr``UAV`S^tE|MAvG zAN=+EAO3Ub?fdU~@9A@Ic=$Ifw|Vl3$Dexr?q6JZ%#~fui`pXxJ^F)W;`HyHw_@qB zJ-y%QYw2Eg%Hc;ZKl0Lng@?6H?Krf4)@6VH*}cDe<&O{E^QS*Q^0!ZZvO4t@e_tv+ zIj?MaL~fx91YZ7Rc>5sh0+Nn?`Mt>N0CdP!tc&A$fS>#Oc$P$10F+OYWuYL!Htp`cf_w&Sj=|$33{G5&M)6c%v@>V|9?O@0JzMTJO9)j+K z@BJ~s{evy_- z?_*`wUCxi@yMai&-)xZYX7O}i7I4^LB;R3rf;?%hjsK?VpvTm(z${U7Za&8OPq8pR z$Nd_wIIGR_eK)%d^wGZEz9^q~k?=qLsxa=}r~dA){>1Re<&}tByd5|1ZR4-T)8Dnb zbegE)n=F0HIO|$V1a0B|zU5PS_!`FL!|y3v^0`gl12jMv!cy-{I&|zEtqH~IBK)ge zR33}OD#I1Em6eNP<%=S`5Nl)My3USpO=ndt*Uv5@9aqR}wXef|zcg%~;W72+e|nyw zHf7`EpJx~^3tXPxxaC8s9TdC5f{hhh!U9nX9}L>SfuIF6f*9xq`zvVu8bFiB3m!!# zzw)Npm|GVP$IOwy+L6C6H`v$qYUP)3k4drA>UwMD<=?Y28}&;@{c>vcM3vtmd`Ie~ ziNb-G`z#0A?+_)2%1`8PTPn2@q`n2uf@cO&D`ooW-oWRn$$`L13HzOaz~__36Q;!A zQ0hXkC)jGmP^tpl#`7{*^bh5^kLNypz7qA8U=L&~!Tmh{T=nP}iXD1rMSAGrT8!3B31rhEkg;wu1!)iVa|asD-!u7jW>A_=9=DKNWw41p)K~ zJFgr{twH@1&uhTj;Q|u#+@*fx&_`(`4yf;eUPf(gl|20D0MFQB{&k?4W0qlfp@`a;AM~m z$Ad?}Qt(r7H1=Qo-cagFu*FG3sqer+xE?&ka~1pmXaR?T-+}YN?qC`C7gnKQ)VG3j!M(`efs^1do-f1vDxRCcy8QmS^zXy3CqW+m&nJ8fc~0`YDSQ*^ zugjnRRCk^x&3{XL-=my;LY)6foY(ODHu3|JFG02!2!cIOKZM={_+)SivTZScEoSGT z{ySI&p2f_W$ZOH>gbOH3uOJ`G^QZ7ms2kBM2LIdXatC339c)aPu7_6=#w&Q9apq8J z#aYy&vuV=^^N~NKt|4>SjOUBarygHG`M-2Hjz@OKB~}(xy~~gtdc#m^y_-lM_^lg< zQs+G~lv@7iQ0jB|nLi=}AAl>LApM@9&3t18<_qN!u%2M2=FF2 z9b5`_|HNXak1fwa)~?UDsD2mfd0=zUj_f>@51>Al=L6vn;6cz09t0nKNLqpoc`iWz zah|UR=kT11>=*DosCVVL5#9?-Kz0j!2V4s`p!W>VVR#|xzkxSUZ$y~?310->`+zb8 zj_3IycvH;02rdTKB9r)Sjr|Iqi;>+A-+{Rvo|{1sycj*Sd)4gl%PHu zbb%`52f=5l8^42VF*7qSd!0BMq{57fXp|?Aj zjXH>Wd(5ALJ9nTy5cR?69n14KcwPe+<4z%F26?_5+{p93@RRU;AQyA5V1FJw^!ZR~ zDtgt(L#SWpxd?QFC8*zn8*y(n<~D_QKpn-ue_;MI_?xJc$R&Nsd439auRw1+c29tt z(R&B9qxTGMT!?HB@HBSoF#9a>voZT~@CNeNFmoT~gWx!1Nw68_Iw{-FW9M(+6R;^} zFNgmC_T+gxAaSk)7a)_oIv6~`^Y_7lJg&8!U`)b^d!b9*a z;AWn`2VUcOCfI?t;(N3me*{r*I5-m2gR{VP;4Shf8*)D7{fYj@;P2G?55+7f0Mcej zJM{|4W>;kAp|=5U+>F_uf>Tgm1s@In8c5qL?e=ZpP|yTspno?I`&(gm7w{DFgOPm- zj{`68d?~yidLdB9^Fd%Y;(9cCU0?tl3QhqFXv^Bj=O2MquoS#O8T~T&Ic9eT$AIPF zF>n{S4om^3fqlSeZf$|y-k^#wOdxy`#yl_&905K?-UoMp3a|~>2%G>Sgz>B5K-{S& zE&oCJ`#$yO$MBm#+P`M7HL^xn+SL%x(k4pVa2(hRtif(Eyfb=1_$BZQumUUuzeRru zJQaOu7d8dYBAbBvS8yKu17u6!!@*qe5b}-Tm7opOqW>PU*TFg9XW$^(jsWe_1JbsD z^T8gd?*s4h{1^Cl@H6la;48uHJf8?Z0ak)7QJ1XGyJZ8~7;q#w9Bd4B2UmaqI2hak zW`OlKq>X_;12=*lQO^c1@caR8MR`7z=Xb#bo^MCi3s<4Oj^_*EXW&)H#(_Vgeh~G6 zJii7nhff97;8O4r*bH0%^1#*LR`7Go)@{5dHFgu)V)%!k11#Q*_H=XJq41;NJn-u+ z;jPxBK7>z#3%6dA`WVawOF$U3Z$tROz2IqZ8Q5f7;s@T~xemSw-UB`p-gpPf2)GFR z7Tg8K1c&1sWT%4Tz%P9I%TP1FlKwGmXnv0K<6k^axcNM*|L@Mz4ZArjO_Z&0-tHsAN?0fA;Px1X4^|xID!S8V5FZ049_osJt4hHuPHqv$r`R`=i+D?S4k{hk__(0S^k`t>6GJw zA-_9v4yCx`mtQxk`-yl*8LP&eEr9EtiKJEd?eAS=%b8#PD<;%;&f?!{^I@n3u@`Nkf>GINSqFcNHT;Ikq=R+RmMx)o_JvtTG2LEV-**-a;hqskp5 zF}}9wOj~a+a&EI6ImzeBl9Hsh z{VG^2n(de7E-p^~WRKPKrb(f2t=+{p(jXgSvYE2gs>>eV-5KrR+d}#LQDPt;@3E^; zGDGeH+iTb*%t86dVy|e45ta}6;1j#-z+&fMHYG|W1ng_y8wIb7wGQtO}5*zA#-HZBnuj*PMhA?(loQ} zh!xSqUcG%swu{pm1!8LV_(*VN=aRigTg$p+i~U$v9GX0m1;&P`Q|l&AE}@#Tmz3kkVPD z5im_s+Dm7uabA7PWH}04ZrgBf+dS2Bnu+9yU{2-i3aQm{=oM!)*jwlHhIqZmhdp-Y z&b1a|LH#gA#`G4rnSf$IBVaH5apqh*knvSMcI;$-A%_;p=lmmLVD1W$-G^3xc;>l1 zi?WqWve0vCL9}zYQM(duc9yNfBsYq3ozbXH_HeAH99|*cX~qZa7Gli+LXS z(+;@Zd#uQF6E|&|`D~sh+ZJ&O7&SslIaPI5b6fua8w~8Gb9aEMTp!7Ok2H6j`eL=* z2F>7NUT3|0Oifwu8(6%AVjJx-AI;kRGUlFys8li9JUKQe?HdO{+D~rfDpk`U(%$w3 z)ogS`=v*{3_p*fFdw5#9%y8!#jb7Fe_~UQC8}8yZ6j~)VE-aTw%O#$@6L{J3 zL*-5v2TeL-iWh)YawR$E9N}CeSFe~$d(dKVHNZz6;;?ylj2=9>h&R~N#cm@xn{RY; z(|C7sz)rVmUnPM}yYdAV^lBJN>75PUhG$rh2L>wBwhj>Gr)_i-5w%9jqlGSS6{EE^JuoF$vfR# z!?Tz9SYZk86>^Wg$sAAZrZD$@hz-|7r!SSa{V$Ul)-~6+bDcOzpeW}+;)*K^_^yp@S)*RmY}!`JfXy;0 zTPAomOdcOJkhrT~#oOx)M!ql`CQl1S2FzJ!rc{*8lOub)Mcm`fh;XmqxIT`bkT0j> za{oytA=(E*)$Qh<+XaMsQ(Mq>CmTPk0%-%iPE5i`rzP+@xX)yj%oETQeA+-35x1T)_rU=1o<6f-cAGt*vezD$W(%~KizG9zc4_U>Upd)ivdJGIgUxYs z#${YIeQ8pdE-r5uIem&tqUG&u+hVOpZY);jUYc%rX|G1YY&)OV_qSto@`fobPc_Rig&9nsk1l#G)yqX*yS$|iEzw3lgn{9=Qgy|x7E*?J+-Z2R%263ZQGpImX;qc5xQ5mXelc1r3 zmN$@6q!Xz`8j(Vz52;hrSl$?F3^!IZRyI~ORyWo();88Ph7g7tL*d3yMPsP4F;vwU zs%{L`G=^#$Lv@Ye^2RWB!j0jI#&Bh0xT-N+-59QE4A(Y>>l!P{8!JMyo2NCl%xRgW zJWsf}WvZpt=IJfX4fPETM;+*2>nZ*6P-p*4oy())2x_ zYbe|rs%Q;WwvtJq>ef(AYpAw0RM#3VZw+H7+#0TE4Og~?t6Ia=t>K#1aBXY2uC=1P zwIVdXe12$tcz(tF%K26EtLN9uubp2vKZGzeKNOxHs+b?DoFA&1AF7@os+k|Eogb>3 zA1JLF%_zw8>*Qbs+}9E zn;R~l8^%s}Zn$D@xN>f|YHqlCZn$P{xOQ&1Zf-^S+=|eG@&%y<;RO{7Di>5Os9sRB zpmsssf)K*cf>3xtsA55=azUtSL8y8`sAfT^c0s6aLAZQD7(3ww;fe*}$_3%71>x!i z;hF{E+6Cdd1r_BBDnh04^3phe!=>?x(s*TQys9)_T^g?`jn|gO>(CNy^g|d3VIqW) z5N1Lc3SlaQu@L6MmMyg69)uoY|(qwsQGE|xjmnJJpla-~(s?ub2X%ab}VzIn55h_iDOA{5P ziOSMMRcWHSG*MHUKo=KdI2psu7>>qpHHNb>+>POI43}d#9mDMyj>m94hVwDpkKsW~ zd`J?lq@+_)5-KSvm6W7PN?Ii)u?RtoAjAkmj6lQ)MT}s?2uF;7l$VA|!=)9am8Dgs z)ulD1wWW2XxQA=Fg-f`DE2KCHPI{Bvq&A67T9eeIGzm>Qlgy+tiA)-k#F1p_vhvbp zq)T1t((=-!q0+_ugXM#v!SGSaQbVDk%ur+~F%%fe3&n-fLSdn-P*f->6cow{#e`BqA)$;&*2g1> z{>A;t{$zPFlnf`z6QM|XBoqlpDk7DUsz`ODCJ|0lBq|eCiRwg6qBc>N2w^CctVmWS ztCH2^A2~qok$L1DSx3&1apVXYLhh6KH@jBWNnh;tL8W7qKnh(6I1$BU8z#j<| zMS(vOEQ$kvs^XKU*H3AUbu5o1mWx0_Nde)HSf-E=R4T7cxAjQULCKYeWQ7!b)#{kZKG+U zWusxEU87l}Rija(O`}PpMWaFMj&~&E9r5yxc&H;D?ub`(#49`ERUPr_j(E)=)5-Dj zW%1Cmcz9X7Vp+U$S-fglyn0!@W?8&;S-cJ{(MCUnfe>=U`m~u%>E~Gu)2Fr0ZguL`*)44x8_?R65zVM?Xi2-&GINSC@4AqU%UhYk z7$0Q4rz&LE&)oM&&dIsqVPQcz`{3rLw2!EV2M>Wagrc0);BhQV5HUk2y)m|umRZBY zIX6s5U(j&6^ICA4F^?T>M6E(P#P*5Ri)2@%+bR-EqZ}@8Cf~5Z9a^SaFQXJSZABT| z-FjB6qr z;diEdNRDd(QSWC=Yi{)xf?AbNnK?&K3TsO+0pXD{&B0-pEE0HRZeC9Vn9k5lDQt*E zO!W*qmKIrA<~%^pU%yBP-gp znus3L7>R^eV20lI-cPj?<;Yo`d-fVMqw{XY?Q)qIvps6sexD!hY_scjW)eZQx+9CC zE+E~UT+TdSoB1AJ^=;8qh0ZK_edJR|PUw}I>5YJytB7(eWLHwH@)~72&ua(?D=AzR zFibeGD9&6M%OGBoTWus@<+$S)Spl+;kXK!%U1zF%x_J$#@%QDQT7VB#JaeUL~%`Y>`(c ztH`thJubA74!Ms#ORh;D#A}hc;*KT0STVmc%!o|5aF4VG(-ojTS4QMWe6RT!hbr`T zs%beHK_;So$~IXtaq%`s5O`f6opkviksuAQ)$w*IEhu8N=lHCr&B(hpS+naQj(&`b}>N*kL(0BE4 z*SQ>)GN#wDSHj!@IFw(KqW5VC;`}Nbw z@3E7XjmVPv=H}^5QX^QhPOeZZTrk%*THHl1Yy3sSHuLG&d7RUBe0Y+H6{dF06@*#Z zVB-~2Te0rQVpn!WMswTOkNKFqnWadGkhf5q**s!G?$L;IH4Uw*JI=?W)5-dU-x-m4 zjKu27F~Q4KngXw!iF8_YdU}Hz=}dD{KYjMJIWyWiy5hsCiHducM@G|P=UiI{WqDZt zK&{35T-!U)-@yg${zkz_N3>!hm3>qUroGjxdCIi5rIFsly8Oa)REM>-lV-I{ubIvm=XLhwF;{NA%n3XS?nePl>KY zyv7&fBMP_5YE{yf+b6a^@$z@3{Tx)@zaT|{kP5%$@pu-yE z`_s~Xxe?B(q<3Im5@~^4pycVINl2ox2sc=G&DlPXwZpmJedf%1Ga$sg>^q3ti|MTi z+K|qH4$}=q8&$GT-c-`7Ky7d0GCMV_fc{B5*_P;_;jscqX^CN{s#&cX?m=V`+8lh| zW-nE?ue(pwfCNfn=|g3@HhS8O`gaB9x|+u4RI<#(u#}zL|HZH=B(hlg&n%G49?twkL<% zcJ-MO&sDkBbIM52VgW)|Qj(hh6#MkipyW-YSQwKdQja<}enjF8(o`aWFiw1k7 z9c@(IE60>TZ#yskcpFP&AlGY3qYYB@7%JK2GMGH6@IEWYXVtD2sg zoQ6uuSQo@hf3hu`SY_GFWn>i1r3soh4$a2djNC}1`IJ{4CgNPTCih-tOlUWMH0?gx zDqo{3VNDMqGo?esrVh$5-P^?*u3>7fr-lyK^|k@obo`BhnDMnGB9cZaEhhY21el4j zYZ)NTgnPB&J8# z#XfQ-OSBU%R>{X@UD4$pgSKlTLYo9KkagLYk@%WMF=RVT86&2nYKkbceo^gTh(Q@3 zu>W5AYaZ#cOb=2G$wH3y@HKp*F?`%25@u|dv#jIk-ilQFZ=8;o36e}8xHoJ@+7WA$ z6Yw$uwQ6>FWu!8iPtq}6<{2@FM#I%1$3=%_hEh(D>Gc_jUh?ee7l?St@(%IIUqwYL($iU8DV^e;&Ve48$Z{c*F_Cn4 zd`@K%$rWfUhA@Y0x=$H5v{R5x%MK=K*nG~*EXS}OpoGzQfYD(|Cni0ue#Td$F|56J zV||TUN87S)S)InL_H$v?8LUeQE)jR3qgoqVXJ|wVdIowpJtb$Rs-+(PnC- z0of~R12IBRJB`D2b^c1{;EA)drW$6pGpiN*omEyXR^%e1TQpTxR>WLR_`D=@&4Sq| z+L`;Q?Uf!`Ly(@!%c@&HXD;pObq!HMgcupF4xfXnHy{Ag*(3 z#Kbw)wU}Wc6B3$t);M>i#ryiS+}QbOnQH2xQ|Ky!nWT2pz~qoM)s@f&#VXx8Us}H> zau^f5ai(y%#gcAbT)nl%o!pa4>N#I?>gMxwY^_eZ>}Hw=pN3q7?xw(eT2zhEw9=cZ zZI);-79A!%St;(iissdILCH*u*0ZJJ53P1SbVIY7BJ;<6_wD#^dJaS5@_I>kvs+si zsm-$tgPq(YYj~Kd(y64wnAQ@-Fddm=G0sUlVCGki%H>l=A^S6oN}Nb5B)^?TLUhuK zWL(~v#>RkGgIAU7FBnbKY1ep8hm_}ZKzUAwljpW!4!Xq&=Nr4mGqb_Q3)$B|1MLh* zn3+)HD_b*=b)k?xK-w2lL)s^!CkdTai1%#LPX`Ty{UUINP3lxTmGtOj<|nN!En{Z8 zecG6Pdt^N6T`X^tjM{oy>&(upRDbgGG>!fPxYP!o%^C8J8)GODySqe|OLcd=dX z&!mY+@r!oEHsoocq)((f>4Ko<`bCzh29x<_!7UF2?w@PxLwaAC_DGwO!iu}9 z7WHvIcEk=6o3!2yw#B&eKs*%l-e>73YU|WwI(Up1<&Gsa$`Y{GfKz&nF!RTll&@Nb zxogk%mlXWn{o6;g~?F0GN++c zpXys1rrGyH6QdTlkxLRm=TS20U7w7O57x~eu?{nxWkrVBR2Mh3EfVQ5xP+G?C^FO6 z8x+GnNxH))rgZ0#TzjDQ+=>O&&&{U$z3}=V9t=|tb6yIQjKg?qb;UEWo8C?AxQpoE z5%FtmWfeP}%cv+l^7Vh4T&&yA*hf}q5YypfIcKEY8Q05Jpk?mF@yuO%gl9>I*vyww>ddS%$ z^1}gELZ`Gf)YhdR-9vq6q*mHFYoM*4uV>Alw5V@UUw4hPeb$61Ypa}+c1eZ?H8nm# zUAYr9M`YqdXH*X(~VswuKOZ=P&W(}^=RA{#*@~rFB<~jM zLqnt|ZLwv*Y*Mn0WX!ZK=hI(j;eY`)zBonW3MMq1VweZ%Y|(tkgu@Bs1!;V0p&g0F zTg~l2PBw{+!P0gb0|)jcsqjvtY;>Um+C4cCUE;D?(H4TOr%Atn2GrvI(0 zT1G=AS5-siW$d(x-77g<>}FT7mB|?tBiiGJ4ubN7k>Qv&b2;>8=koLcH77k-`sW^f6so{SuKri%>6NbV^D>!qGmPJsxz+4ic1ns9cjO@ zl^E;(Q+YP?tr>fb35oBjk@luF&Nsa=nV-}lx`@oIo=4r;#q^Aue-HyquGv0#+O&KV zD#?XrCh0{rBJHPj4%(#HATlBy8k;89&zU~EsgYd3wTzP0PB)ay2-)5$Js_juiLBjg z5!KSh{WI#1yN?8ir_XF9-u*J)B#&@V<3ZxXM8Ah0HURF$qGQD0c0<$4n#tdf9 zsWU>CjJ~BCl!?@?$I?}|`&UF{I*}s-Azn}uSPEkUqV})UXS+g%*sZ-d{}{DrQet|q zd8aR5G$Ng+&$Ru=1gj#l<=DiL<d_Ai{Rs#Sonz842l>tVqO+e+pjYnOqmuh+LoE zYx;Up-}5@Mgh#)THUZ(;Zd>c41MdbZ<}+%UYoL`kv${s0E7RtA24A^Keq!Al7?fE; zqu-WDcz&Sa@wAiX(-e(7Zd#@J8X>JR9cz~`)&O}lT%f7P&_c$M9#>?vkrCOc(X0Zd)8><$0Vh8K*uslTVwo9t zh{Qkc5ZUl?hewhg7>I26xWn(3dT3MHR)Dlax=|}r*jwyif^c?5N0cv)w2^X+gFMl} zFbftun#vd&uyU(Ncobo;PS~qc>D8(9>ePC5YP~vM4V80Fm4=ClTl*v<9Q(uu6xmKe zFcZros>{H@iUvKgV8z-BS&Om{on6c91C!4Ks>wELl?}+-6lZC&^uf7mUp}1wL;u=p znV$B5Ng69iEK%EuB^pj1q!WmPgU&u1@~tF#xMj0D4-<8@lr{Zx^DlK!RDtx7-1OpcXF-_AZsr_Me}58gh7Jf38HF+Dsrknty! z@rcjn(=KGZGW|%kmhp_w>YZ8B=d=dG8Q;R0NQE=Lg)_c|Grom0zJ)U}rK(6XzPVHtX~s8~sv^zA%%!SGGjVgNiqxel$8x%4 zl}8POJZi$qqlQ5qHEHEh!yu0uV|mmt$fL$s9yJW|=n~jGd;D`rY~&svT_PK~$4{5c zM(**|CA5)y{B=n!a+lWT*%MKh+D7h)s!MMp_e9pExRHCJ>(X50F44_%CXWYg0gs8; zKFX6y?Xg>?2AIZ@sYLS$8}-k&o*sey&Jmp~C!bk|We}o~lt+!1JnAAYmSc=z+LGM~ zPbUhgF=O|Z+HVe#WsU_i;Y-ghyAcdVcZYbkT#TAO-3s3HI1-orS(}iKgh=` z8h-g|$t`ALk95K_kHDspu6ANT(s&l)mcW>eSAop&nZz3rf6>VvcF`FT zP!XD#c)}*K5djvVKhSD96HaS0TUgzfeVObNvyzE;Zw5Ah?Xmrj4Nb4f^qcHSrX2FLh~r5~Kvm0{gOn+cQp%M_nK7L3SvHF{8OuhQ zv22tX%l#dEsE~G9PH6S2B^X|{?Dz1h%@!Fm8nz)LCCpbPX$R?m*u^}nFDJHUQl)80 zv+eq??X~IR`q`R10gll%KgTDHaVK*RmplFGn-14^>u!$k()Bk^&5Cz%U}3b?e$!~P zOI8=9o~BErEo-LYS^wm$X!*%m!18Of6ma)jwy3&B*_~UwtE!{QhbteVyp!^d%DX66 zDa+lk@^kLEvz*JVIIyR(^Dn4s$4=j!2kp!``?WsvE*#DuIg4C=`&kOqD?4|_t6I)@ zmY;Li#mlKDS?z$k_td#NR^@W0w*2ZW1tuy7m7V|7RPD~4KTXwT%5sLY{9L?Tyj^%4 zJO7-$CTlI=N)cBRo1Y7(+yN{|d zz?I-*aQro?)b-#!F!tA}R0~Lgv%$UKLooi@RO(ppF&KAUD%B2-2X}&Zz~FkfMYu7f=@P9+OWF4&9Uz(i1E`6N(>tg5bm*ua^U+2!3 z_4hx;oD28Y#s4Ys`m*8Z-`(~X;>t8;_-e3d59@D<^7_gfDvwd#M0r!?&6T%Q-dcHE>|T@}tU+D?g?Dtn#0gzid14WzBI7jQRby@RyC( zmo@j_5^opI0?n^~m%l|nHUc`qVsIGf0sSBWmVp)EJ75(!7Muu92B(8F!MWf9a1po! zTn?@T*MRH6P2g5=2e=E|2Oa{CfhU3Vr=J5afS18*;4k1U@D5lF-UlCn&w%v3bEUrx z)&m=YO~B@0Yp^}o3G52?0A(Nys=;`$KbQn2g9E@UFdG~Uz6CnK63_#_u6~7c=gXGE z|F4>J<@UdYYZ(940T~nS2PS}e&;Xji6fg}O2xfwVz-%xNEC7dscF+N0pbK<^J`e{3 zU=SPujsi!6W5EgFByc@r)f>Sr;5KjvxD(t1?gtNnN5SLZY499)5xffi0{#Zx1@D88 zz-Qodkjpr?5Ud9_1e<`(!Pa1VuoKu7xN`e-@qb&n{<`Ar-1%>d|HaIqTmmiwmxEt| zE5X&^8gMPR9^3$K2Dbv4d-(&n8{7vT1do6}f+xW<;5qODcp1C~{sP_t?*N&%c^`ZT zJ^`PBHQ;j)kg^N%K_Msx>w)#bMqm@L8Q2nR1GWb{f>N*>*aM6M<)8vogF3J;m;fe$ zCNLEo2)=55xqNs0ue#^#eckQlzuI5;SHt~vn=jOUj!Ta(%W5r6T#IOaj?)_Y;M{fT z?b68~A1D9cVt=^*Pi<4c<=?-{yXg@S6y*by zXDBx-UtMPXzfbug<;RqtRDM?ZdF7XtUsrBb_vR@dqTH?=RX$9)PdTZ4jkL`|H6LD&Kw- z{f$-rO{cHCQu({e$0?tre46r^%I7KnMEPgRmn&bTe68}0%C{>2Uilv72bCXF_Q&i0 z)HVg4()4*o`A^D!R(?VGCFNI?UsL{f+lkTa`QH=&>FUwq@$bt2)8p$8pQ}eMzE0oC zo%%nGUH|02gtB`MQhrd1kc?0D!%HLGpTzMdw9^25rHDLu<)15Gq5Lc5>y&R)cIo+B zpW4YC->&+1Dc`T0x*)}5a4PkUAE#1Vfn7iqm<5}bJ4gU$ z&z-YBntBUge4IZne$IY5Ztf4}fF5uR5UVb{&K5u<##{sfgM4)JX>kN<(qTYh4&83JPuw4L%_M~ z;<=65ckvqYU@El(s05Mhf_QEoH^%?O9!X#_usE}<l3m!v?t z{rMjbud8qC^2UY7wM(wN`qlpO=JZ`V;P8uTZ|-XU>^l7oVu#b^Fbo;gkPZ z)xT7}QTZEZ$^|i-E*mRvr@X6jx$=1BM&+5x^OQT3yOjr&k5c}g@)^oM zQocm_D&^lO->&?a@}HDnReneLL*>tv3m4n?Y^c1s^7hKRDwiqODo;|Lt~^({UHLHO zr1DY9Cn}$ze1Y=Mm9JI4P5D0MCzM}QeoOfS<&^SzOKf~LQw}Qcsa&mGuRL9Op7J8) z9_2yhW0X%-K3Dl- zZz&(9yiEDK%BL#-_yxcNO~zqofO)dl7~FcP2o zoFdg&ka_v5=b&7WVZg7P_0;%HoOBe_`u!vwD3QENeVp*&hyv zS;+amay1d&1U^xJW~o1~;E9Z-v&rR~L%;kf%!|A{6t1YOs;;T6i!AEkuo!hNO*#5B zaUYvrX$^gF`j7qOi}g>hvHJ4ed$cpy-V#l4_tp6E1HH@Rk^Zr}w+H)rgOT1~ds95# z9`t;8>+{F?*RJ8gcwfA!r$4!3S}(RZU|z25Y3@tR;&X2f-CRC1y4XD~;5K#_et&s* zS<6FnB%X*)>rEPW<=lK{LD|hmJNtKBVB>X-#_#l6tM;dNl!d@j-0;gECPFpH+ZN1R zFtd%nrl9Q2Jtc{Srf81qjB=g8;_m3U^0H7_xY885?&#u3#|kM2J6>taTbYJWzDt#{ znqMy8>1LBxk0O_Xux%E1Bmw0cUcdYO$hONOkBe*+`P3}(1TvXh^1GizCUdFd$G1r` zj?g~}SvLQ#N4{$o^S=>U7WqlYre%?TAK4D0$oEFx+B~VbW%BgdQ)W+ZZfR~95xyT| zrV8w}``G>W-F1(N{`h@Y^nhP}EV5mI%U{3#398@L($?1UrOM8-aw#{5UTw?G9@v*( z7|7h8UoLUWCf`%#?Xezev8gTXiC|($-#~X~a8WeKm-KxJxePEGlzS04l`R+vTEiTt z*kc;9_ALG#h-||w@&(AoW|2#N$($bNzpm)u=E@_+9a)ZYL_D^qo`sN`Lm#-FAQ+W~ zV|ekwlQ=Sk3XS!DL@>33qJ=LqR#;c&{L*6$H&=BFF`R(O`@#@;aaWmCe68{FdLw z*H|^pjQMS*>YY?wqiQ!_=#R%j;vw};4rLZ^31wGpSE#zHBHUG7*~JMJT$A|i=s@j2 zsCu9xJWyRZfNVfyv5Ii4x^l<1va+&~>2o{oO1<&>w>=wB6@rz5&-^B+vC;NrBwBahIl(s-+MbFh6fXtFojdE|uMIOt*D{eyc24>@%F_#^Z% z{lt>4p7A>e$%Y`;xlsZ*7bUn)kXtl^!96J)iAXF;4$0d$D8U;MjwjhLGYM_|d?01CZpf8EMbvh^|HQ3&Ysp*oA(ay;|Ne(>iCn?%Zxs`MO z%=JyiUBADrcqsXtcA#l+NrWy}w9^KIZixB0dBAU|+OaFo+kL_}8lVi+fkq%k$$s;5 z<{Xc?&!?)a-1L0nk>v|Hv@Tr%g1@o$-Fs{{ zZpeGW{ciXDw(|XgzTbtupU?PKKI1{>k7JjQ6MuSu6Afdh->&-qLVwu2WT!_~@Gdov z#@&}Mvi|t{rRD#y@{1g+xvZIhORH|M>FC}MbkqAfT#CzuZJOejt2r5K$Zt;yxY#k~ z&7tr#dz>8GX>mYW1DDm(~4%mXo0JW9p8Rk5PFhyu7&ydm1~;m8*%ItIZKa(o=I<%Tb38~#SkJi54=xkWSgdQI zxv{}SwfSZnPq%ME`hW5s^2@hIF5@r1{9xqr4&sg$Q`&5=E7;X5$+L{hAv=R|LRK(B zdiBXM*nPd`oUd!tUwNm?&lpNup%ifuUvEN!Z+fEK0~}0yVciNEd+(_`6-MQEM{`PS z@*XyqNkuywq-#l5OYcQ|A&8vIKTdj?w!%b+gz0*VA-N?XDcy9vYgS?~GI@i`mqdF_ zUdchX@$MC36>p-Eo?vH}c);=MuBBio;EGw`@mp;AyL~7p(oSqhTr#HPwn_P|HMfz* zb9d4`G|XIrTM(jYcgL!E*G^oBSs543*K+Or`x)*`$RfW4xumJz{IP^j>cr~XZ{u$u z;IAjA&_R%Xm0w=RM1c73m+yyM#&fP)N-m5GRgVwKeW5|FZ{jd>Zf>xps*$Yd#jN+| z;(;^fw@TZUO#0E$b&WD6Cf;h((Y4=)6Hgh_$tkfMX4k_zmlDVIF2S)Bp4~kowS9w} zzH6nJ?^kzRy*b{ezChJDZ+>#9J6C;Ec1Cf1zqIql{9|h0y+2-8wX{L<^Sf_?&TuW` zx;0mRn~kq42kQ!FdnDN&OmJNfWj>t@I5nv5xcA1o!t=XR)}$U^2evtNO=@%C%mqEq zPWC^+>*LRyAFN6Bt^>=?Sd*FsoVjk#vy**QUX{hogOS~SyUjoM*Oep3FMqx!^~%~c zsV9}!Wq#+pwW($>AIS631#46Dz<~0)?C1D?>oUJC{ol@9n|cMj1?2gTse~`IHZ^9` zwW&ZcpsVG@r)=N+2Y3%0`cZ17q=Ofq=5E%E$opG`!h=;S>2(16JL9Ptg^#|ss?n*H zR}JU))chwa*}XgrTip1^+6T7TP^MeV4}JNqG=Jf74cor`YW3C=0;^uGS#f85gX)RC z!M|#Mx4*4T-M$XIhW;}iGcS3b*Jbz1>i;#1n}0^OdiB~=)q87GpTL5U=h?}=Do@Pf zrpVH33|vRGkZUBuvF@a>TvX*=hD@n{2tomfLMv$`ndPaNpqMvCU%-8N0YVQNF7D z)Y=Pbuc-ZP?L!k^n7Ddk?zGLO?LKY)gIW*jI%w5F=N^2`!S^5hT4Zfx%SDxkH6PY< z*!K_nW&Hm5Tk-Xd*z<@PNAw@_!((nd=J{iCPab>ntdp0YdEuG&o%#L++ZNb=1-S(| zxdnx}1$j`8JQNl4lvfhqF{i|cONt6bBfq#fSM+l8^KP_UU5!-VM$T0aWtnSP?VQnT$pE^#=pX%{Jfk(<9>co zVR2qjPC;?5@gz5|I6tSjpr|A#U;>(xQ<57f$t^A^CY78Tm4ieolfMfnARg5m&{OE74Hkyk`4O9EKWFU%>?$QBpo7Umb= zKyF^3q`=0zBrgZ&3yLsSkY7}6lOUgn73Sm?7v%+tit#tZxcx(T~t^YD9OpoCrJWDxi-CWiG3ape8ILP8+9 zl9OLRev#&QQ&>n)iUWl<8H;j@3J7pv4yl)ypIcB8$jh@Snpc=tR8mx2OfHt>6y@ZW z6y)HgOR9R|<+;LCVc7$}1v=3-a^xNDtDSL?duEBXV-`3X3Jji*m`KLXw}|DbgaEgLa^p(2+zk z4@SW%%FoTsFD}rMTa*(h$R~iLl)O_YX~ji3Il1|{gxA)If`Z&4!YBzQtCS@a=>jT7 z4*8&&SyWV*M>r|z%(WFrVJs}dE;&I`n!;aPT%1!xIVM~IsY|3o9+nI8@+h}9i}UmI z1I1Fbi}8d)Cy9aW+`_`5Tyo6TL8@MUKE<8lMdiqoBoX_0c@&6Ztv|f10~G#1Zobsz zg2Dn4MqD71ixQHTUiZW?OO`&3;i2vTY&+LGxMFmC(viU2Nqp z=BY4;f=IzK#k)ufVj)E#fIoPXSEyBfWV630(B-aq}vdH3aUPxwz-|S2P6n z`$7Bb^IvJ0c=B%sxBJy*jm@iHefssS4{RKzUxhdS-Y@IBouN2qXq#7i@dNg~E^`+0 zI~&NDEJqal*0U7oRDM$@n8(P=pWj8tTayzf*^%|Cv(L2}uY5=y))82 zD@>}HG1!<(pL|o)7sY38DHCuLzdh!k(i>cL&m~8lk{8GtZf<@`=n(x54Y#bt%I_*5 z<)|alYvz{3WYAoOX;&7avUIN#7jCRCK*!fHNPo=_g}z`Ar8B9lu;miTw9{?;pQ2eDvxok2|EkXWYBAcR4#8c6;aFYkU8G z&d;Cw;L{0j<;~hMkhA|;WhLjml()8avyJwCJ-PEcA3pj-@$>n2J$KE+w{Eqv;QAHZkG*xy$M-(J>iNI-e(=cZ=i5GREf}8W^Z~>40T(g} z!vw@EKS zdvYy|S{q?+a8!GX24ZE*K(G)>j?So`-_|;9N?YT!Dbr@RV#n|Q5$cX#{s-iekAC?O zGMVS~%XxJMs*z`nKZ#b>u_W5Dlsje<1B=Fzj*=w1mvPg4qOT{)#v;Fa-^Q&`)6?r7 zcM0I0B$d~>5$>%}_x%2RgK&#Ke);;N$Tt{89!Fl9#hvBI=Vg%}i(Jyn?{5rww)CBj ze5WktH$t8*{2QwLrKYX-%X@U|zx;maq0g}%c;KG%@7?0_{wtmzdeW$8J%8)(*8F;T z>Z76Oje7m3m)5WT!Q9_%yykVI-gnK))34g$u~YV1^Nvv;bN-yr*o6l@F?r1gM*W-n zFT3irD-Zv1WX&3*e(?M6?!0`b3;uS*n*5ab*V8&U@dwi$y87%j>l^jFM{YQD#U}fH z_t$GSHR_tVLo=$+9P@_<*KBLlv(BAb+xNG#PyfrBQlq|i{C9VG@VMkNfwg-X^#|wN ze$K;>9)Hm`Yb%ZVjVt%q;@tHrS68jw*QiguwrY=|#kJQquWdByeJ0%V_)AaTckI%& z(~bI;ho9Jbx5gLlK5p%7qdxooU4Hw>g-d^U(b|PZee9)+jx6oI^3S)d?KJ9-o@?7+ ze(Z{$J+-#msCWIxoiG0IlUM(_dTr9EZ(5c5<>goX<~Qqo{vD(K{sG_VE@)eH!Y-d5 zYt*gfzprdh-Fp9o&rde$IlJESgOiV&dG>`}nn-kV{q+U1bx3}K-jLzaWZapgXj!{2!Vsl@~L${uMUg`s*-YdG* ztMi$pxGuHEs3p&N$zAYBiUwbQ@(O%2{pI$eEAM`L@TxqsyDktow&cuD2J0pqy}j8T z6$o6nS<(GRJaWz*wWc;Pf4cB*M?4Zf>ar#N}7rcXDm?#cOUeZ>&Jz&(SNkKDGGXW1bDj%4Q&N z{&t5?`gFTP?|MJ5(5UDCb(_of>Y8!J206AT@V8U?x9)s5=egZ-x{dw;%U7R&-p_h2 zo|Ka`>f@FkdHoTCCGRiH`HoR9-|~eOKYe}n^~-aPHR?ay{i8$9IR231&&WC1sP{Yc z?ECI+t-9~ZoHLF3x{J>FY~l5LoON%`1xEc^+ePQycH!g~U&*<|sCPNJ?$4Ef_|c_n za;`M$g%_Utv-tVR0P`dVh<5{y)UM1z1$k7BD(z z5{B-EA*8z-q(c!!5Q8oO2`Ry12*Cs_#6UrjG(ZuQP!z=mgRlh!6-B^C5P9p&oH0=E z{r`8r@4XE(XV#9jD)I)aFheg5#Y4}bC zY^p7@>(QyAXM6FF7;yf{=Sw_p-!HGj_cLH~yRwq|tM^Xa!VfWEUb~XAS+kNF-{3zo zVDWv{bt5@do5+N33|KvLK`HNu%qegd?c12$$-~&l&$o2wWDt$C@^4+$43a({j%o{6Vw@S?v$Oc*1oWu76K|M zgu~4|y?I}uh+gLdf;j`Oka%9Z?V;HIPXs##e1FB$hUjzoZ+M6(1qHr|C1;AB0sXP} zhsA}*Co=d&?M~+Yj>@{B0X^?Q&uON|S3n#}f2YS+{v*EXAMwYq_<>1^$ zS%+qBPBYX|`AfaW|AC(hy+_|=Om8Q;pP~Ew^myxk#H0M@-};NrPBi|{_RFFS32gKX z&h&=}@$~v0L4AKOk1<`pcl(d_KE}#V$NL0}hYN$p4~8qs+oOCv%G0C#JcE}<`FP;r zrR0YKwVjrSmuc4vl7T^{h9jdJzqOEPO{U=gzss!T9Ke*~Y z+rtav&cOHA;=l3MEL^KsgGk{oJU6^}2mYJU+CT9d0DhFen?4T45N{6ge>VB=xTlw2 zi{br!zWjWF%zK|XPZ(zqP!IYp6Qym_<1HW#J$IfS9|m!%@IeJnL1KjA`xxH*!4nfa zQ_@iXW$0^i5JZYc-(8~OsPG^f68zg^DkFPH+`k`G88_#rWB~K^I}qwXD3lNrLj#x4 zVGOB>P{wOVkb?p^fl>P}x#HnCADR?H`)95dEUDU+Ai<8l#Am$NX8>qV0Bd3t2(qFb zWwjX`1P8={;B6GhGlD2%U>YQbR#*736LHG9LfZoK~r;Pbjo~~gU-RqjGUeSrQCFV6MGOIjSaD5 zy62u1urkFq1Qr8G6(j_J3u+LAjt7C8kfiXK#CW*FfgvEO0GGC(Yf@EavWX^20H);}>iHUJJCgQp9nU=7>)ggL&fb|u7s8*bQ=OaU)L z-v&r)aCkCJLj(K4A~(Fpl1kWg5cl-B_1spUPo4cS$rT) zdJ~49HLs_`zazrR|6P9T_pE;v(SnVJDNP14V>GmS+;^;gbdNcy+wy4ED4WgxXMIV+%2r#EV-U}MA&nnlHc-!=y>e1fD}Jq8A3x)sYS@p z$E;r(YY@6#XTpco9xVC~{G!m|8ITC76%b5u{umw>{W3LWmYm)$ZYZY-Nx!v=ah}a= zPXUHU7^}DyuIQQa^!SVah<^j|Xw}p64?`Tvr~fV94B}a<%h?^>N8>``LAi#Z+3+(V zN&nwThW|*4kAXu?P{sK-%Kw(bkoMOc*zo>wpYA>TeLnp*&P+@{<_vTjhkMSis9B{ zcrXxGj=`*bE-D;EkHf=I;Zw{bF^%Dl7X*o6KR5j`^H|$N0BpAm_ALbEUKzDA>gvVt zS~9D}Ne?jl&!TILZb9RKl(V#Nq4_X~7^4b$rO@(Uas>mo5|Eq}LH_cQ(s=8VbO`D0@2 zR2m3MhQhu|WyWLs?*!IwmOLoO3+6bm=&BqBv)cMQQWP787HjBqeEwK@7XH|2_@?7$ z^_O*J&3A3AzpVB0f1uyX=pm~-3m?ZzX8&00nHA64|5@YTo9@a;a$m>1w$w4N4E>B% zpxs4VMOCMQ-j${%ZH+qPTT_#|hPFmonX0U*se(qSs8d&IYBEyM<1$8oZR)qH{{tpo zO-&!Ph>y>YM@5vS2@DBiOu^`o6~KzcqS}O@tiV!uM5W)Cg(NVftzjjx_*l?%4#Azr z`sskx_haRQ5cQJ4#PDUXY8d>_E9Q8x`hTCmd>;R;8BDQmSPEzx7`oHYGKhrL3ugx) z+7Hh`7#>ZmKGA7-XF$hM9^`ktz%_vS4ihiqSt0=F35ffm`jco^ak!%Yf|rironBuJ z7XMqn;h~sC?|289{boJ?J3-qR=UU0yf!ZhI&SN z#(F0D+WI>By83$h`uYa?hWbYO#`-1(+6FoXx(0d%`UVCDh6Y9k#s(&a+J-uYx`uj& z`i2IEhK5Fl#)c+F+D1A?x<-0N`bGvuhDJt4#zrQ_+QvG@y2fBcz}Udp(Adb>*x1Ab znrH&mn*eGPC}sjtf1aMG27zoi9D3=PFmKfKaWI30fzo|eK*t3QtaUN!&77~jCz#hF zY+W#O{gBc7kw0%CGha(BR&H8;)^jWizcrS>`V=!it{%H$70|FND}NEzo?9oG`Dj>v zxP$*w_-)?&a=z&F=J$Dn%IC9aBib|;ony7nAER3=eG*zs5PAn-`(kK5Fjp312}2In zA;}NLPFPpd>MMoH&~vKk@y8)v9O8epo1xYK4?0mnOBtNz(C_Pf1LS4!z|-OnLp<6a z(6EWq_(iWI3f3k1Sp0K0{N#Z4gjwd21iaHy6|JL8GAjjJn=ARnCfu9XKlgiWASla7_5f1bNV?8 zi`_@{M~rFl=&1{OF7k^K9IBto990yB_As;G=v+gC3kI|JGk5}L?n)svCQ4M5?k8S` zw(n1DI2;`-kDjHX;m4F?9(FP`fYB#we^k#IjCjDY0%LXf+rngtSGI@hfIUm6e3Uj?rlidIR9Apm2|MHFhj{zhfe+wW*338M_!*4_Ki)k1} z4%boUJYdc1SXh+k9Qa$j@?YYE$jtYL)AMirNBlM{{NLzcTk5=6c0c6M;}LS0i)s zqNS6tdRfo+i@}P450kAkw*V$5n5ImFA1ci404E^v2xs46Ha0<>ju?hFsogc zF_^{gGL{{4p|SKX0~iN+aO?;VV_;&)445}G3C=>%V``c*Q|VO&UHkqxw)f2O;=t+` zz+goTHo;)lJ~tDC;WjbC^!A`N{q{7-tmcn;3NSpZ@tTguc!b$57T<=xbw_D%bo_-= z@lo;dKjue5coaiq@B=eHYn;Bq0HX5(_m_B-|6`3GngtEhVI8pBWN4(XuMG^Dwuu4C z2{PWqP0#0#;TL40`J+BdSTE>%>i0*yAO3yoyOO#)kkL9FJ~9c8MUC$4~}k^5HP7 ztQRK#FN%i18x8DTQeb!(N?qZ7;g2E2&On#M!s9GM#U3^^+mFogl*0Oj?gQumOpm8R z9AiC!<^TaC$w?ri4)V)*Dv1NnP2@%R@cbkJNkK#iFM=22k|as7$sh_y1ThkSoKS;r z!gt_r<2yOK*t_vP_y_zFKv8zqk6$B7dNr;?ea+nn6}`wy(zv_1deiH58i zGKJmH!qV%*t=mLFQ9~oI1*w(CjyD_h@@H?z*-zx+=Hpk<(KoesaCUK<6CAQ}^OoGY z^Q{-#u6Hk~tCx_Zuu(Y#MGQ?$%Pa2PXE(~*T27&wS%!w^ZsUvbJ2yPCDDdOADUbPk z_G)S=DSH+c6(1@oD?i%Mbdk)#DI{fTWk0vH?8eO^ikP_E3`?t*LnBj{+K4py8H&n! z#->g#v)nyAy}TDK@%0Z135|?TUX!}9r1E%m%dKO_qhlUF+3qX1ibNo45JCxvmL@%2 zilDTIgQ;);@j zBJ6HZl^vHDg-Ui}Q({l#u(4Dnn~|vGxgfmGOCWJ9WW!4ZN;|Pp>7~AM_8e3)mw+jm zN*0t?NGoJh+@GRC=8pHt1aDxqDovsR-`&ml}Q3=)u!~e#UZXl z6AGU-I&*f7v1N9vP!GOL)8j#;$lOG>w9Olckt8kxJB2sbpFU1btDWV@o?uS@OpRxY z6>?Z9$SKIVfL)B9o#sebXTu|u=`KSi)4SA2ma<5!20@&NPqUWcGbJHuw^ZrfYD6Th zm;Oa%7LiKCXYkq0vY=lu2Pt|_l7v1!ja!`<%;`m?A2XKXQU^r|JU5xXC*vNGkHAG( zLG&YY5)mFwqA~PWnN6LDw@jPQDMg@?j46^Jr%xZx1T_g%{{aN?$!rvMKB^>#7^gTF zFE=L-k(a>FFTgI0h!8~)F@iWn0+Gba2-65^1Pu;NM4PCC*G0;R75GYG727y|f;5T$ zPMBgpnw+v}%R%i0-kUb(Nj~Q0ah)~sO;gKiiI3m2%q=-vw^h_MG+t`EdhJR7z!Z+i zSO7+*W){vaKAAa?SliIpcCEdme*pJmd6=Q=!#6l2bL-y1tL+_Jd@819_Rb3yFY)yY z4%xD`0*YL^`m}#wl#9>aIXHx#d7|m;xvrkkcNyz8m6V=6cjpndlfvDZe#qj~$=g*d#0>E#u(m zHV0iKYg12M>g;+n`tDO)d~QNwzM`g9+41^wmpgi%?!j5_D$vfAY45nx**@hqXVGE` z8xOCN*6>JljFE+vjeXu$kFdlmS8v_EcmL)0DUjNiOMgmCw_}qalKIk(aMPGPFf}#cJ+<=w|ffF=PILHXM5Xp@qL0JIWA|jmb zL|cLeP&7U=52qUHX`V^lin--r2L6%3BhrXGZzDJltX#Eb7 z7Rd}InkYN{tXu*oy<0qumqhPlf4`q##GbZ9kbatt{#eM2KqVWqIk0h(6F8&^i--%^ z=^3JuRAKg6MEXW@RSBmEQKy)g_CS%sNg~lpdDA{o5Sl6(QnwK4X9*Gn9H?()Z=49bxU0L~(7#rZM7&w1q zU}rry!DDd%yiG*kjl%BCw4Q>Q-$E@P`7sWwe>XFM3WP8jMmj5e9H!IXvw)vhn(RS& zg&B%v$||aA>Kd9_KVNQ}nweWzT3OGuv9+^zaCCBZah)~WZI1igc^>mUy%u;cT(tO+ zkFTFU)8=B>((s7LWl_;FvCF~kR$|hMeu30G97VyiwK~drV9W?= zs|>ghO&XeN0Vl1H4p;0Z9sS0fe+n3U8-rQ*>&G-kD@~z1gJ+u- zUkQE2Z)NWIxzIbUep1D{5t?gIi$t2gI`inL z#W@L8g|jYClOL~h4SeNspX>NR{i9J*J&~1qF&4`^vzHznu-+UTmqp%*yS{nL)rt$E zGINhlaxZmiXqg-tHS2u;By@&EGe15mq2T+@q{EpDT>Zaj*SR9=w_2_>>uf));cINr zd}#m7*9PrAE*oq*&Ln1~ADKm-ccQOoW&6$zY1`R%+!lZO z1bIvS_a5LM554x;ZN-XSMe)vC#_5i`PU9wPFeHt_WEi>~zy zY^jHOxXhE2|^-L>tbKy{dP@acslc z*PZ*w=c$>|;f*c(cPFVw&!E~lz2lm3&GvOHx#il!;00N#H}jPj_(p6a6OEhrE#E37 z(wp87eIgpMk=i16ZF#kPThSZMrFw04E?Hj=t@YN)UTn8rO15_*V)*3BS^JMoE{zj9 z9jtP%f%MvcAxjUUSuaN=Tj5MhRirjK@cgY@uimkg&bqsY^Rt?=8{SGS|GeLgD{+Ap z&Tl=WS$ZBTc^U=wy?QmHhTZUsMMvdGnOibn4Ij%dku}oK)liFGJ_3PA0q1`W@Et_klo6C7s z*bLKSdA=^hDo>(TiplNE`^3(CxY&!M^LOSJJ04Vb(4FRIL9)3 z>p|kHQo9w4@Xsn2c|7N;FuYDWcuPoVIZJPbV3~c*Zt)_nt@JMG-S_!3FJ$fbPEGNC zRoA;QbShWma9p{`+1b0I1D_XYSWm_KwCD0)(U7&EPUNIYu1{S$PT$Q@*rXr&Vs+dB z`G^B}lVZBt#W&}tWF+0PkJvfdW?!WRo(erNrF2NHqDM$faB!l$ArN<9>YXb~Pp6{R z!oSsOMU32P-rXlf+ArRfoo!sp<9S_e@BGxFLgcekgug?vhw9pi-W_u?@#l9(*?hZh zm+(N-L~Lcy3|pNRHjjz#o_t%!*B|h18s2U(dQGWeZI!1%%Bi4wgT&Q}`A@v{wKjR4 zcRgr6BV(IHb)#?$GV!*uWQ#tZqTYC=m!*d!8ofUL%iy@T z)6)FBPm5C@?B5XKo>*dXTm$i4nX)@~Jt5y_-c@pDRC3yKaQmabwOxYFIH z+i}y+zblx!K5vhU^n~Kg)Z$*VCF@ejo_mUh-!F-2d3yDp%gIt{r`Ih`m0BM+RWJCK zBjtZf@qxm-2RqE(vGkt2+3LI5EG{LzO;b1}B69s;^tE74*Ud@ummZ8d`1sM9>+F+j zI()QtRNy(-IfUl>e4n-2$JW5?>)pQ60mUuz$M+wP5_dr^t-82}_dsm*;ORCA_Tqgr z>-HG5bhd4lR0tajbiGQr6NI#m*?sHTnq<9Ks>8=7=t*yiA*N^5Z}W-&o6y37i)t(T zY|rd?U%35*$g0ILmWvh-ExYz%-!7Yd9mDFoNo6{5N^H&Anav&<8LG)sZSKu(Ixa)z z14GKe3I<;1#!3ut`yLZ;;MuYJtYP2I6%yH*>pt%;5D_?I6`i?omFF|%0mX!twT~CP z?AS1%_29L*9!sxFHfhA?%AHZGptFm}9EY1~D?B0-S5n^cOhmoAJiGl(-wx$A{)Nu3 z?l$*--Z$#6w`Ixw#;P8T<-tRR`WMwr=+!4XD)VQjY-tX=H1pF6$D&6?8J^#YdPax* zC7i!js`qcOi#t_#F-!QPN#Nf4E+d~KUF~w05|t%&SbAie(jyJG>jtf93SRzY|K0Me zT{;B(zA2w$Z<=SH%3|{<|2CO{&q)1rKUAYQu>4xsomGm=8o&Tm>z%m~Ri<*)<<7s|uv<39Ylpt}P zw&Bv&ebr{91VioT*T4BUuc*xX*t%~cna}Rq!?R{*jtF(tzWZpW;Uwfav2FO$hfNwJ zK9SunlCw309!n(FjSeR}bS*jO6I7JEs59_RKc*+Azxs;s@(mMN+(%Y&AIPHbESha` z?1h0(C;tMmI}YW&4eZ4?7W!u-Z0I?1Aj|ts!Jz9^t61Zb+iK(+^7B_@Ol|FWtmJTr z9JGqjqHR@nXqsit<^D!r3V<_I}`Wu{*VfL$BN4$)QQ7+-t%zFd6#~? zal!LU;f<7z+Tl>^ErRLG&+YEo{!HdbnzpC4)4f^m+O%-jjUOtB99$jYzKFZ%=xMW- zN%Ea{`>si@>mTJ~yI<;}-MrpG({3`TR4Pi?B{xsgGD&D?pUeL5*}6oxoP~Q>dWVxL zR_prSjaVz6U*D&_bN-jrA9G$T99Fx1Ci&B5%f~zRw0nzbk0mswzwFl4&Ji>{j~tgV zH=Gyoym+%!Q_b%6@6PX0y59Q2?$JPfnGlcvr~ET5W4@-mRVq&o^F8E0eWK~*Xx(S0 zPN4)Zp6;z8p-@2~z6Vr3lA3BS>&sB46!fYh`Lbk(co3df+Idgq1#;K9S zlPcaX_~)wf9Xedg`RK)kXFTFxa;xGRUaxyO>bSiq{^9oCk0-r&!b8Gj-!448-u=#L z(f7UT9<7$=!{ltnTLT-?>+L zP_L{@%(h1+1+onN{07w%$jvY34d&1MR!~MXs+TwBb5buVJM?X?S?cXe#KY=YLW{m! zbb4VSux=!MLhj|m_}K+}K4E&C4R3ny-14_PfAV%c@32+=jdI1^6w=o%Ix=koI|e%% zr{=|`Iy(g5LoZfr|RIg8JdPj3ky;2D=_4WxePnByGn#L^obzcJE!=;4M% z^+~3YOCClQNcJW!a!|=13lU_`(wn#8th~3tyIm(6Kc_C-6xLFzHmt7c{dP@JM8b$j zy|uB^!yS(#7u33yTqu9@xZmADoWDV!e_24_><`;Qg`@|1it=BHNL~5bK&xKie^YlP zOTl-mCco691i^MHOHZ}IOF>}U?li6!{^z>*#pIudFMGS|^Hd*i?!H}@szyF-IUn>< zdfaNuwUZf>b@`F;H78crl#bT zM{h{j@%>7KQ zusy82K4iGoZPx`$rHWFEl{?yXUw>B#l(UG>KCQAo^oC@b-#n{DYYfP2<%;^M^r@iY zFNz)2k1kNI&BOF?PmSUqZ$G)=TiEJ%GmWj(zdbu*+nG!|(%ACWP$i>mZz0#L%1qZC zu3b76nID3-;xF+%?F{iv*-u?_H)OQQ!1i;Ou*=jb5r^5DC04@u$m`wqZaL>}x4XKV zZ0XoLkrv$2-M3sT>w<6p`q%!_xbW8RP95qePg#KCWChqWG+F zlc6W|%Ld|xfrlp!RaHNDt(p1yM#2$$wV11O93qch*;crXA9r;VhuQVU=OW|>E9>oy zM64U5+u55d9~EZjEgTRcN%2NdZEn=PuDCFNd_k^;Jikl2L&bsMkog}5$23lUt;&BS zSFqiYrDy!bt7*I1+T?|XBVuhyuO~Jws`E5|==Np-A+l(N;K2B?ck+=O+vHxny|`}u z&V~EWJa{`~pJQ0%H@Md$aq^i_%#D;~JeJg@uUJj&`r zcDuX$oJSq>qF%Zl-kz!P;#%suhZvYoH+etu^7vHFGXX@vtHcxptq+R>!Bv>c!i(My|LNNelO_ zEIn$~t?j#lW|btaZg)D>_b_~KgLt3i+2dJPCGdOY9?Y}5ury$I`_aX(CJtVhS(O*o z^}h9tmCf$BXXA&(*drVKFYOZV47++D`{pAa|Ldf|({;_XtLGcD2XXTSj4d7I!xY{w zH9Ju`D37RcJkR1xYBAg)8*-c)S6B449n;$mw_Lo1yPs|B!i8<|r#J6>N#s7E%`e4K zcjkvy+)qW7?FswUfEUi25F>M)#^0Vr`Ev-Qh+GhB9 zY}_GFS-6G!sPUq;PWu)Zy*iRIA{_0Lyb*GthD4T);h#JTd_5}GIQ)`4^Lyn4XJzFi(fbFcs;N2M%G~M zg#-MKg9V2NO%5x)PAyjmJn7g|AaBJTygsL<|G=H2rbS|0sY5v%EQP)f44OyOD}zP3i&$!$8AP@=Pdm^MRMr3IQq|Sy4U!uJDR&* zwXmk>B6s1jW9<=(H&O2dCla4rNt|c5Xi>WTd(AE6v)k4QP4I_xjgCI+9<~s@Shp(v z?Y>C=b@|=19Xw}ACzdR_rF=2#w4(W}zFn11L$=LcPSpEU9;)qn;J!sy6{ZKTV*Ndb zQ0_30@3$v2`C;xky<5$3#CZizR)1+Z>~$x8#M&+@cU`Du{?R=JN=ZTGJIh^4QUq`> zA1^$=w#H*Mf8#tKE^pBmf6wE~pA;^Y=ou`n<&BmeJzdE~sS1=`uDI=0>@}i5{>f{% zuXr|wb5+;LaZO&@waVXugz4Q!xUa5Xv*+~Y=fuT(R&G3#V{_u@wjBQtDyKAV*Q|_|I+eer0%ev%kHfVmCpP0C0zTj)g_473!teDyDzV;5L=RbJnR@ZHg zfydb^Znd7%INBNf%FeaT&39+5OW=cD=0lm5d>kWY?-n%&JRZN*?5b3n({=Op#-lYu z4LeNik4o2cymv`E{8scy*vD_SuIeY-(|X!tvv+j7rt5qY^!?&zb8riOc123YjABc( zJqDk?+_|Q0TO{D!AI;8%*%kQav0gN~@Y*J)wY^*GZzt?utMAzne9(8rgF^458D##p z{b{O%?=FTr=Uy7Vdn`Nu3rX%%M)Ttg(|Klzb~gpj?y)sUiOY}Jc2Q~Lww<^=QRjE0 zi}09}>Jw|!zckQsSKpZgJ?7ukrrOq2gk<>1t@3l9=-#*`cjoC3+_o=B=vhm~k z!vQ<%*0@Lyz0h5D>-nIL8pTIyTh8#d?Y9ot25Ra~nL5{&80uE8INh4vIezB*S@y+! zvoD_AvGYZ3#fFrnXEkTtKT>V_WwlfuAN8{-S29>l{;Wjyw052pta3{c^VJZFBqg7Y`+8 zuV2J%7k_Hk;abC)ez6;Lw0DlJr!Lj`)*g__x8g>XI2FF^IH}nvi?`hZemyTj1>Z%@%{6w=;u$yuPf8w@!w(V zeZRx*t-r$xsCdKA@WaRw76pc|ekQ^%<;daR;IH_dzrxn_whh0+EK^LZIMtV#TUo#1 zO8-cEaq1ViNT+*OI3U*JocO$Td!!q&jiaXk46zuG{Qzr67$%(Q#)1E#MO zsaNc|_XEy560Mt@mHh**T|l)GURv=3E`EEXUE;!B7F?7mXdN(jVI~W{a#$?y%;A{B zEZCHX_E9PKdOHhd+1bEg>j924hCP(rVhnbF;uc1{dG-BO3@*u+OS89L9rF!?XBVD| zRVzPwsgMcNMoG_S8S;x6U1Gw@%i1J*TfLrUerCeDmzVG@GtK7^*u#LWQ_Wd+Js2?W z0aw~Xr$+G$&7%ysGfVp8dahIMyOZ)!m~JO1p!3H4S&5Zk6ABl3-WQpiF(95ZN9+v> zvsHEYoHgpWb^7+mHWVJXR=nsa80k}LtEvakdcTFsJF&~QZPoSp0|4J5-P{)ygV_-Q z_@F#4y?@h(e)05kJ}05Jjq3D+kE6Bs7YAw?^x|-|qee82F8e3=!-W>In^6lravv4# zyLZ}hleVaUd4-v&YBjO>vsQJ^br}8d0B6nTm-Lv^oad&(2eqVo>v2~iCc>%f4}0K- zN9wk7SK(ILuOxE4&SBXtq2KE+u+J-rn>o7tO=!@eb?%N?scH{O9p^4{E44P~EK|52 z=2w@Ow>yOLti#>4<5pD1%rDPtKTaL6dz;3eo0eW8yJ02wyRmbZcP^Fdc`tj2D?&|d zp2nBsCXM(vn`2&I&$CN9P&)Q;FIzZ&hrrOarV<(=Jg=BB&y|ZE+ryjhe*sJws{eh33H-frKJEojv zk}pimh`hW!@|^j`yw+4nCE*V%N9;}997Z;InLg-Pe(&wBBd4xEAKjF=Yv{@?+Z?yS zW|2c@CEpIuvtZd}dF(nIR9;y&YfN%N!Oz}zN5n{iWyQ5uxrY5F!*$(>XYADYb37)W zowW10QV~4s?n~ji{N?3M5B*(CrCy)q>Cd~V^W9<4b3@bP^(7_81f)*QJlk9lR893bHP6p)8`@YD>tDZi%R%$`9RpI*-&l5FuDhz(`W>EO#(#hOc-D8J z$7lC{5UA%Kajv@jO+)aU#zrIC$>vDMkFOx5)t< zZHs)X>9wTAI^Jn>=69Rqtaz9Bs7Us5jm0r=`!Vav@~)`u0#^r(rEiLvHWBm2JhtAHxb1#WM#DHRKe4n zBfiZWW;QE0zT~-td%kwpi3N4)LtBU5diQyJZrST=@$~I;qp-R#6|H3-cYDh&&f1hP zoQ}KGo6?-Uyye*7yRc(?m51o$h4+RAF*`mxcif;k#c;nm;hmNDU4Q2K$B$A4w~*L% zo(z}iTc*#g6zV*%aMZ!IIsf(T^EaOjbc$c4#2yjdzihv*{O*>cJnO0-6Wby?o)PS) zBF|~>_9&GU%BpwBc$g_XRp>B|WPUIw$+}OX`%n=RO@>5~M1OFPd|G^7EG~m$l;W$FF@b8@b4LVE_1@ z$B!mohAB(UEk+Ew9okMKLh~p4(oTdNX1BSp>E0Jb8}W+Oi{xbdC=THZ7rfl#9bP@S zB{@;gXv3~nEsf&y$1)^?Yr5y*GBGsyDtW|CI~HT;VRuG(0^I{wQZi(!=*=!3a(_c>>^F@wHDZ) zZBW_aJOAEQsffOn-56- zKEXCpBE_C=b=TRL`()m!uxHs}I#FTYuuXm=hi-lPd&8yg%cKQ+maaImEN3cM{E1%`028 z%O4sBFB*uHla-@y*ronpzO(a%$?7NM$O_e>WzF@xm3tq)XW4zad}Lt9j`VFYn?E+1 z)|cCie-)8wFp*zzy(jrpW?V)1zKLiLL1L2X6j#r)865(dtqm?q#nuUY`hI)!;*krY zAs@qiF8GCdpID1G-rbd=b*>;_<^2h(6Iyrhj01U9U^ZwJKjFSKj?G167jle zv~rmL^bNV%s;#Ccspma=1CLaSyhv3m7OrFWpRE&Fuxi1M!l!;o&ikHooGzMNw|3Fn zH5cAY3?7}CLy6BkE0F6gD0%Y5%3!fOHCJ+H9J_ZSdLhfMRpWD}@} z8|Qm-Ih|ScWX7NiiFQN1>}bR>-aTdFUdKxc$;wk-c<&P*?4ZvrR+Gq*Bc@F4sm!)v z^BKKkH<72TX20Ov%$*e;E(u2{!lnlA6NNRjwvFF?wPfqA4SUzy)U#`@_Sw5SlkY*p zcY}bP;Ve5^JM+TVW}F$f)f}PlUpRs9X#7aHd)I9}sC@1FqYgr1?y5D($MG)>uAlg3+1YA0FaE)js-pqb z$hncivf%Luf%R;r!eT2WFC2@!bZhdoy=dh|w#As;E_(~51^ee8-MBl*sx+HszQ;8y z`SY{+M+{TVJ8~?I^biGy)cFIo7~ibH?PY)Z<9}PR@}Ru{Wx(-c>DYHT{a5u z%GgGSTE3B1?IyGAk`ZLanx7BJ*e$wKIs915ysA|(>8Ru@ zrLK2bo)KMU9Nh`kckjtRTfWgNAu%w7ba|b#TV|M-M)v1rxA_~-wi%Z_3NkpZXX*Yu4~Z+PvAExW$D#-{jk)84Ih9M(zxrR%>x^x3}QYt;pV67E~u z$2uau&odZ%^Tq3f?QH&wr$1+qo?v#@Tw*t^)LR+X+Fd@lu=<_E*(I|y7q*DbN#GO+ zj+Gof_%{A&O3dh!K)#ooEZc5(uG>+rcEsN6`s0m#n(anpm$Eb43`Kg>EO$ojZa9A_ zTaxdU5%KYjx-H{ZiUfB*?5v?~Jt#-D-d3dL}Yeiz@_r(CNzZ`GY8%wXAhlj`Ql z3_fP3sjxQwNyYM#Eq4Ys-1$EAddX2AUN6BMt{O)_^=!-X8403^J0f?#bAK$h;)}8y zzt(N7tLD$A^5<=gsoZlvHnKT=)da_*bLKCPaCjoTv)h&hEgI*(JHjD*&#e-f-}}YU zJbB6B^Taa2?B&!n{h{$AAuPLcT(gU3mYImAt}c?)FSqBt>t4jp&*$_+dUpR-+6J}P z8M;J=D(YL8?fyP>OC#(0ORUz3c+D=C8awmxxed8rsy!#Pu*#o*hT(_g_Q8x}cj#jN zHj%5mp*6^eb%F5V zjjzaTnllUCvWES4D$C@!9X-glF=gw;XG*GP8s3+_JLr9V<5173PY-Jn!orX99t#mU z*ZrY%>u!~i^4{X8Ye%deN8hOC{e13&>RoRt`=m(Dj*U}~c6=DA{zMs><@)XM{e5*Z zREx2lIbVZ?c#k)`@L+cH-Wi=0?-Y+J6!6?~+wZBz>$jJpWH$s{$yE0od$u<+VO#Cq z{@PFGle#M+>K>+N@zob!kdo8e++-z0D%mFgs;l2c@9=A@<5fHw8Kq{zHKbf_>$3OR zv#+a+$>&{LEOq$=KkwX;L7HX4XLbGN6aC3gh3C(RRH&G}m1U8|koDWvhpb#(sI1u!v6r>G9uGxC2$p_SyJ-L@vEAIGDStc5A~2 z=L~@r%WaahtggrJku|J{l~m~I$S^h2g@T(v}pR4;TtzC49#)coA z+MlgnSi7pN>((PnQk!kfgEWapF~#CzRML)|toj{~l`%VniW!n(weMG7i(B(4NT$8> z{OF+|nE)-x$&N?w&C3v%_d}b_!%WPAnviQES!^?-cM05E*GnLs?MiPdEOWW-+$`!= zcF!(L!}Xxry19k+`-b+*-sbLpIriAz?8ChDs=n=nQ#Mxz@*1y+P^(`C3O_h)8@Sy} zCNaW-W%sbtG?^O4e~I&1He$afAR_OQ!lqEV+Jw@B!I}AwzGl{beyc(E|NOOPZt$H( z5989l_;8b=vG`=)6KjJ!^`BF=yy}w=UggB`(9gFi0(sXmk^I7 zk0yANZ&(-4OlnXGlIS~mWM8V1){1XVLCv^MP^up!s_5t~Kze==SWiKI)hv zvbv(B`)p^$!qhAuryDn_a^5<}ZXR|P)RrkvSTuFc>;2Lto3$dAh<#JM!>2P9Go+aj zU+;6_ey)#qM%CJ>OCFOtS7vxZfg^%ug6-y^g!#Wh%05|-#@51-rwSWJ~vxGXx;eS zGv7x)7tE=-bMH(i&UgF1yLtz__ME#NO_}qGJlK{i5M3*adL=M$R-aAj$MF_# zrGQ4Io6T#QJ8lfVEZCR4>$GH-F$cJ)Cf4S?{+S-lEqz zpW^4OoVWAJ8(U6kx)IN0M}Ec&(Xxhy7xQyx_>=BVW~^4AJ#`-pr>TC>Jl*EF_RdY= zgiUw0&V-jPQhJYONjauT&ee3Rn>RRiwBJggcc7p+XyEI;=cV#1?my-c^=8?vbV_<% z_L`k%0mES}s7?7X%>DR*!ig!e4)JDWFwtoB<>#BpTA0L0324)%!&MuO^;lZ>RQDI`tepp}%4HXe(U;|G)7(UcS3>tpP z{~zs#1u)QoRxPS`^$WgH3?HTrj_R?3nie>B17B_NVD$|QhcFaqS+)jZqM7wtD>KJO zjtS!Y15kfq;GEX~KNn2K$}x1Xpe$A{46K6u$FkK}IhG!>cAs_B%zb0ovirL?&ny}}o>nAZ(^vHE#Q9=e6LJXG zDSN22JD>#j6sgF2)>n0_zwcP@%Yfs!VcBZ!cd{qITXaKjsT@4m+cX|*PjBpdgKzR3 zwrRqRr8h~BAB3~))+Seh=S|h}gyw4b`OP!M$>LfF6?~SEL=YJSN95!tfkPR@3z6bS zz}pDJ4G{q%1Q8Ep6I&^w2ySmwl(-=V4}S=#_zrth05-8+Z2rsxq;o%Yhe?oY?FgW!A5FDRCK%KgP4;&IF z9@>PuSYoE5b>YF!3*;bzM;rv<1C1VVBt$^a(vTm#r+{Y|0>VQS0=GRs@S-UUywDc- z&4utn^9i6z1dW6q{LnZ8=QL0mqRa(YL=axoWeYfo0jD`=wUXe_g%M9hu`yG?p$?IY zz=`Hp0be(e8@$tiUl(EUbcFB|M4@d6_>|>55~>hoC`q)!3+f^wcn*S& zKEi{r>8aw0RCR=d+enx|RlswQ)bIoqA~X?3mDD02$AQC>@rv+agVvxy25-Q)bD+!x z4x7kCE)x7oKwylyLZDW-fuMPZ4gdrq!U4Ar{PggFn+4neIGDn7GJ9xDL3l;j!OhWc ze>5#{ASK350arXkFYpDl2pmVLA-;SxZCK>iI9p9{4aG~v3u=J_pyf*J_%OUJI(HB@ zAwfh|RG-rhLDZobLZHf$dI%>E!pln~Ax7-n{2~NEgfsyz{%D4_DVMUGB-|~L zaaD9~gSsg~kfI`N!m9k5LJ}hE4r(N-2|L0iCZfkjWRr&lWQ}?XgByj&^CNPwG>Ddr zxd!c{QcOf(-ec?Y$2vk+35g;JMWB_6KseAVvNe0aq98%q2E7-j4e=B)vYZvF zi)?0yM;s;a+(MKyCSlexu&_}7P>3{87+BCgYCi6JDT8K?*! ztUnUMhl6=Z7Ke9;IPw!b*t=uy`Y;x_YS_Pg1d8zdA~d;X8GpIe>NIVVw!gkmQLn*R ziN6tNX_1liM6VII<0@Qye;aTsEw*Np>l&qi<>0?SOFHgT8QFuWaP8XT{6j^cP3p zdLiY zAYL5mK#3>pCP4M2VeWFEFgO<@LMl*j$O)A}UJ9NAFO68hZP$f+1NaCq#^Aw=124tM z18V^k;V#E!d0rHC|up^-i%8JK} z;fVxZA{VrX3@!8ps)r*;;iciv8XU#JB7tp=glLfTkePTnBnb#DJ8WPNVLqCoGZ6xw zjZDQON(h^b4pAH3G~i#EofA)k?jZzY$N&u@n8Hf7CeI@PHG}OFb;qY`#f8X)fS*AE z2dGlRAD$E3`BBku03c9L)m%87#& zLLw@I*N4O4cTN#DMAWt19HIk<4sjJ?$fE+IOeN@`Oa$PjBDw?xa6o7YR6w5{c3i{{ zWeVUv;E_Vu{Dt7I5|A0-YR`epg$^{d&J*0aA;2KahdBZT@WbG<4yYCy4<#eey8$U7 z=oKgfxGMxFevlK%gF1-_jjBurSAGb%aU*ELEr+!ax#tNpr~`f_x?jOPM-V5p5@iuL$83dVcneXW;H63ah$?zFfPTS1pq>7~WwNW_6fq8nhyxA>$KXe- zTde;#E(Cl%Vtfbs(3KsgB#LcpOMfjbT~xKXN#bN7cGJYm}I z4Gt0s=)R2uYY#rcRAFFGtpBGygNg`(e@jbn9)nSGpb5APA`Q2d0VZ0aeJ0wHeJ&rQ z``oPci{}B|_5iv)e@;x_{KBRHPh3ZUSIF&RFWdv!1-RZ~?_i-cPM#%usVFDHCuo;x)gp$gCqs4H~P`)0e%_u$oSqn;&;jY8%VngNvUFKv91iH-e ze?gUD{E3nbs?4Ivz?uNQ#Q#Wx_xb(~51 zJ7uIG7QawM7&9ha1lO@YsUqA4#(m%h+Gxw5cq>(@!iF09BhrXj!5u9>@L(cy|7lV-^a1;wvk;tHm6dXzs zxxqFOnC0W-qW-Wjh#gQ&yO8nIB2W;9p9i(b$nlpnlr#ND5Wo@me;nleJr8A(Br~0W<7J&!F(O!puqc2Ups-}b{`_+M z`4j!6i39tXIALLXVFfYK890&yPKw9%XBHbdJ`n>$9W6F_Rh%T342L=J5=`5OkcWoj z6&F@yojRh0c=hl?cI>QkLx7!rqC$VoR59Y5ZN-mJtY-;2yAU;gPo0_q9=K&{3SVBy z2;kQo0tGiU3HiQFO)+!h>2O68c+d!l=2=&Xg3NT*72=us;W~n4WSn||vv&wzrU+A0 zEw(5|7GB1cj=EBZCNN4ctC{)&xV`{sAD!RDY}d4J&nX=G_te^oahcZF5#MFeuRO)j;r6qO-Eig4nq0XoT(@;y8$Ad%~5p6jHWD3W` z{0P?pH9W$h^^3c+F$UorAO~cry=bYHr;LU}TX8b*fozPak%}7w2#5QE&G9L0TBCR> zE62ApuTwj%=Xsv0tW>G2bZ@AvOfO=LDw>9tEw8Mq^sHj!>{QWFa8uQo`vM(%sPqla z8fiirkb0yVi9%K*YY`j70hx{8hR?%$5PS&R3G2YX3z^hNcB5qa!~6+lry`6*Aj!E?*4vKa!$2J`rC#|%XQ@h-sd$g*Tn|I2emx2`Y z_Tl?@z1fQS#yMpL{JHyt-35z9+=XSudqs=IM-qtE(iqy4h7mtO_QE+6WX#k~uV8=WYYAD?(HuT4z` zz8KscQ?saTR2(&lN+d6X?<6Xo9L*I^Wut^qmr^JKQB;43a}dOVQ6_LxM;M`!;Xxlq zrE?sHUv*S3C{L!s9ziBk+w{P_vbmcuEFhqQV(i?oUu~pHvmrb*suB;5+C;^X_fQp~ zK4B;aE~uzD4Nen2JWfJ^C7U>!l$0kNmVt0k}t0Fv{ifCH1>*J*fuB4^^4}13+ zU1i)=p7t7qsJ*QrUa;YU^Ym@(aSF?KcPC0Z#^9F~W zs&{(5v}zTPEq`QHTaP%oW}`EYZ&>!Q%4gJWTq>ni%Z%1%*E{^QdUdM&=R=wvlYDfU z^#7c!*R;k_C;XqM>K*c<<1Y`G@u0DPe~Uy?*KP;ilH7mYR}cH?_?8aIrN!O(z+=b$ zc%X33YyNPKcwF?D7!I7lJO2J?>qH%RYm<}z+0J-a8Ta@0l7s)w#K7E{^DgMt?cHwO zYPIRs?Z#{V-t7PL>-=*L9~4u3ny%ftcANM2<*K`7q2O@!iJ9+SrS_kVWai`ygd{`hRZ z*541nD-w$m^AocZGhLL^5@#gFCPpQOBt4LHU(#JklanSUWhBq^s8=CnTFTUv$t9jE zF+cwOeBjNmy#A&5e|bB&$#W_3_CNi8@_+f5LpJxfB9RC;ZI(U}<7xLfh zR$c0HpXBrYd%NGM4{R^+z9L>>7q7CL)qKnv_V5~?@H(IJ2A{E(&xsc(e8D=tWIbQ8 zfxW!N*Tf4SzTs`YrI5Jt-{Cvn<$K}<6+f_vc=5?*eqswh6EDz+pR^zF8z1sJ+t|l; z{@^3xSDGFCg`WnV-f{KgnZ@{(G*OaLc*-(Sn!|~|i+2R^ckJSCF~;BREsy6Z6Gw40 z#}I!lvm(dh_w7U_Dswz15Pv=MBu>Vmq(mB3sLH8SqdGOHNiE`!RMo+Ojzm4`(*Vyk zCDL(kOf-~d5Pxm6F=uiXXVa8s#9!V#hjVE`1}$mDd9BNOxL?)fN zm@afB{&qxnF5yxx<8rRxO0L4QcZqArq6a;|+)j6=?~s?sDRL@z@ey}( zneDmq3VDy5#=T@YeV^iSM23$ zzTsQG;|IR~Cx4Vb@iX`H3#<5*-}s$<{K236#eNd@iRTOx@zcSxV2KixB>o+H7^OL! zGWa)iqAW*Jj`GCcr}W!n;%JVc0u?!yr&5jT)SxDw z-AvS`4t1$VeH`>loJKmQ(~$Vvs7>kPca``%3e7o(hkgEYWnbG{%2u35j_s}G?X+Pk zZD~h)&gTL;(2-7D$VFuP#o=0pGlJ2K;bwkdG7Gp3e_T3oI}5pkXPL?d?&2-(W+V5o zh-o~>y*!U+aTANVpCvrN3p~h+OlK(%v5bdV&LgbgQC9L8FY!1p^8~BNqktK_!c(kf zCTp0*Ydp>C%;pW|u$H;J$voCEpY_Cg`|q=r_}eBQvW@M0#13{+#4dL8F?;xgPx*}a z8@XTbC10_Zula^=`H}ekf8ket<9mK*AAd5Azqo<@+(@E?$9Ozvp6E<6@wd!U=t2p) zQj%_zqC1Ci38lFd&%`G#qYRgG1Xoa&D>;&@D96>5=NeK;=O|9+Xc}@1XHbDgRHQM- zawf-d7L{m1WzOb!nsNfoIFaU@gy*ypCvz^R(1J8Fs6tDs(uz|#k7~3g{(ejwYS5ON zw8O8=iT2dyeClukb?HDoI#QobG~hx`<07)?K~H+on?CfVAN?7?Kn5|GAq-_0*<8zT zMlh05jAjhiF_!BY#|_-bP25Zloy79`jkiGc4p;@>#@lJkMg5@B%Nglw~Yu1uJ=pmsv#tZ}SST zvYIu##_PPnTHa(G>)F6tY^0EPc$fFs#AdeeK3n;K581|cK4J$uDPkA9`ItR?!l!)3 z=X}AJe8pbA<{Q4HnD6+WANY}<_?ch$mEZWCef+_n{KbCa=~YMH5}p-Fq)>vAl;SW- zb2w!<0!MceM^cXRq;eETa|{)z$gvzpB`R|~CvYMsaWbcnMir`ZD%Ge?4Qf)0+SH*g z^{7t+PUCcX(2$;-K`$E7o5u9vO!{&b{b)je&Sn5j8Avk*(VW4Y!w_OU{Gqg97#YOh zlxWGdv|>2tF@n~Nqz$8J%V^p$hW1>?`HbZPuBQXz=*SIp;zlmyCNAP;GRdJc~ z8984bAs5K9@)>!gTqw)QXJvVrFH_|rd6axk9xb1j$H>L9f?Ogi$`|CZ@&raP?Pt%o|KzpuNjY3TB}d4aa-^IkN6DwaQ2-X@pH+vRe3hg>12 z$dz)cd`aFZUzT^tRq}3GAams_@*erBoF-Sxd*vE=pL|W;FJG4r$T#GJa;=;$-;@u@ zb@E}kUOpl>$VcT{@-ewlJ}%#uPsl={w!aVzsRNXSGi37 zCYQ_Kh6+^VSdOC- zl{uahIFXY$nNvuk3RO9kYE-8NHK|2y>QI+@)TaTbkkoVaWD6AKaaE1%_~pN;7OihCbM{&+00=s^O(;9o?#)+lFuTZ z<9Qadgco>`r7UAPD_F@(yv!;Jc!gJ4%^F_gb>3htZ?cZ{Y~U?6@-~IM!@Io4CN{H$ z_u0w^e8@Jo^AS7PNfEo)&ByHF6F%iLKIaR*j>QJ%x7L@JdzisLz&6F7zwslZ88q!ww^ zrV4eaN?lH+9@VH%bsA8E)2K-k(m9*cX-Y$yaR$w4#5pwPT+XBgXVIPv&Zi|8(25S6 zM@L%Ii8fqDXRe?NSJ91YxP<;>F@PQnq$h*u#bA0fggy+VFT?1^ZRBt}lIK~=aNcAD>ln#;MzMj_Y^9J7c!v)e%{IpHIYoTIF23Y? zzG57E`GjA&j^7x|@7%yXZsZSsphgv!$@4>XBA`cGMavjp+DC#fUykZdIm9$!Q8+QZe%DoF^rp;$Ru8*f z%u2TK67TaeTUo^i6!0Ohu#H#Q&T2kl4Lf*^oxDyFZ?KEC?B-2AW*vK2&nIl)Q{Lh; zHu5=d^9Aw8B8P)Sx>xxrAC=N^LHq4wqAxD~RLxS5lv=Xu#E+#x-QogPsiXJa;d7 zqXVhEBc1Li`!j%n3}P@t=-zc2dMHcJnb`v6rv;hVS`-jHlf%XvKN7rVVXr zM|;la0y@xkMyUFDqrg1O#aX%06Ak%q>hk1mmv)yN@Ms;dX zlUmfK4t1$VeHw5Y4LO5GH0Dgsq6ufylx8&N9L}W$8MLGo=h2!rw51*GIiCyYKu0=p zAs3NJXD+4-UFk-5F5yxx<8rRxO0ME+t|5ya^rRQP=|f-o(VqbfWDtWH!cc}Wmg^bE z4cy3Bk2^QXo5^836PU;(ZecRFGKHz!Ngt0Vx$+*SaW4<>Ak%q>hk1lYd5p(-f;?vM zBu_DuSv<{b<}jCe^!0V-%PZvq*+V`f2g`+Wpv;$#%SG~5`J8-AJ}sxtKHPLL<7;m~Na&ch2Gxns6y+a~Vy!oJ5Hv$F5W)@ygbO*PS?aUL05j>1n4JRI96pu2R#~8!oT*niPC6DWw!3{jcjm+dG zW^pr5lf!JrGlvPxWg_#K#C&dH0h4)#TUp3$Jj?Cma|er<%JbaGV(wxIck=?dyvRK) zWg5%4j}_d{N^;7&?ikN2OyE@}vYJV(;TB$FGOu$hZ*UuHxt%w;gLO<{JyY4hoxH_e zY~*g&4|tdld4z2|%61;(BOYf5Pq33b zikQJJo@6&q@i8;m!z@1GX+C8(pD~BenadZ<<4flA6${wQGkncLzTsKEC7)sz@g2|c zJ()+k&C;1`xtQT}VFXJq|OtR_B zwOq__x-f#SjHDZ*=+0;^VGNgY9hWhd%ekH_7{`^|z*XGH)!f82+)R|?s*=R1BvXwP zs#Ag*l%yu5sKsH_rZjapoVt{u9!F50vNYgGPNN*@l;?C(X~)b4oNRUD@e&i(lI8Gc!DGsMJM^FY2B?%9I2RhE>BOy^;uGaCQ)iGKqE&I>;vx9pva9M+Z4N$5n~WadeMsQiJFmNB1~7$I(5G z&T&1Wa~$2{=p0A)I6BACJ&vw%bdKXW&3JAzL&kHPtz=8u(U#~GN4GdS#nCN}PH}XL zqf;E+;&{$9o;!`_QisTR?lhi5?IOq9U(wm0ETgM`yNs^>9WuK4cgrheu8ij-;<jh<+0%$lc676&lO5gc=wwGX zJ386X&5lm?gG48JI?>6F%Nd>QhgrcRtR#MJzrFTZqf^KGE&|fURsJy4@eKot^Ap7ez#;JG$M`>5gu9bhW{o$ly%N2fcw z-O=feZg(-UzrG{B|L^&YAGn#Hi2eR6zp#(rNiX4XfzvsPh8)cq977{2(3pyx$+4Wp zaWtV4XH%J`98WV&pgAXU4kvLgC)0vc$RLfDRG}4BIge9mO*Pt3own4V9W`lBEzYMl z7f^=|)TJZ!=tO-kqyZOk8kxA^9_X|u$%{#*3n_G^1l=e}cS>;yhjA&Txs1cPoHAU& z5nM@GuHs0prX1H$o*rb;i=OnMH~r|#0QxhCfec|V!x+l7WHW-{jAA5X7|mF&V;t9W zBR6m}H!+?Zrf>&$GL^fzi+jlBUZ!zB_wgVP@DS5^gok;IM|pzBnL!>;@g%dD$!wlx zE_0aAJf2|z&$5t3qthMT?&x$!w>vuB(d~{-cXYd}kjAN0r8?E9Ne!aY z9o_EebVs*4I^EIjj!t)UyL%Ab?w&-qyBE>z?oD*N`w-pkzC^dXAJOfOPIq*>qthMT z?&x$!w>vuB(d~{-cXYd>(;eOJ=yXT7J38Ib?T$`&2GQwmNp!kf5uNVyh)#EFqSM`m z=ybOwI^FGvPIq*>qthMT?&x$!w>vuB(d~{-cXYd>(;eOJ=yXT7J38Ib?am>(-Q$UF z_XMKbJ(1{kPa?YAw-DX#$wasNR!aIg939W-dPc`Hx}MSTjIL*NJfrIw9na``M#nR{ zp3(7)u4i;Sqw5(R&**wa$1}Q~(eaF~XLLNH>lq!-=z2!SGrFG9@rlq!-=z2!SGrFG9@rlq!-=z2!SGrFG9#f?sGbaA7T8(rM!RHqs>sX=XOQI|T@ryi%#fYV9m3>wmyMx4c&oJ|v&(Ufy& zP7BVZB^jJYE85VScC_Vu+S7px=tM^@;zBx;Nf$1r8(q1C?p(&DT*2jB#g$yc)$|~X zUi737z3E3^2GE~D3}gs{8OBhqC7TfpXA~nD!)V5G9pkv38@Yj-xry=QFp&w|!X$2G zGPiRZQ@DdWnabVV#XaP5FVnc6`*?s-9%mkuhso)(w0uY&E+3X<B7yu?aY@iMPaz-nIQHP-M3uk$8r zSF$An|Plse85(=@gX0vot^Ap7e#!`Za!fTpYbVQ@Ht=cC110b zZ~2DrDCP&g=O=#T7k=h9eq|rO^Cy3>pT9_);`$+p!%3zLDI7rw%2JXeDMdLBqdcip z;wUO}G{lw|5jA0wm)%=y{ zYW~Lce91VzBD$Nub0ho6p}fmKUZ%C~L^+ zvZj1U){+m)+VT-uM?Na+%Ex3q8NJ>5@(I~M=E>9K44E#Ul&8z5WJ5Vqo*`$+M)GOd zSk9Jb$~p2ZIafB3^W@obzHBNN$Y$~x*<3D^=g4Q}xiViaWf9AGjuy5*FEjkNShkce z$X4=2d7fM;Tg#VaJWukfY~%E5*;cNR?d0pSy?jHSFE_{wWTD*3JAA;qbg=zB*->th zo#gxSLRlm~XBS_vn~QA!SZ2ySva|d|?&VW1cKS2fMSd^4${%Dm`J?PEf0mcXU*x6o z4|$oqu!{XpHd$Ot4~El|5%gjty%|LxM$?xu^y51EGnN5d&p^g8h#MHpjSS%?hH^8* zn8ZX1tNHoDJG{udEag3xv5DnuW(8YV$@{#-R$k@+IqUcC(g`d6PY?;}h2NDI55VxA>fme8JnK``yqT;y`CONj4;zGf1HkC1^}Z&ZHD) zaTrY~&Dk7IQ_9ecBWO-p&f!STr5r6NPX?*9}LAG4die8o3>%@2G}ytX>ezYXKH)iY$gw)#mKudR;P zSjTIt<2Bat+Uj_Xb-cDZUSl1vt)4C8wbk(&>v(N-yv90STOF^lj@MSlYpmn7)$tnZ zcx`pO#yVbG9j~#D*H*`CtmC!S`7&Nxy-3DutDlqc+UnH-UfQHbf=?39o^~ZP`9Bq(VdPCb#$kr zLml1e_;+x0r=vq1-RbC1M|V0p)X|-e4s~>=qeC6t>F7{LcRD)M(VdPCb#$krLml1e z=uk&@Iy%(RosJH5A9@qr>F7{LcRD)M(VdPCb#$krLml1e=uk&@Iy%(1Fp20+M~6DP z)6t=h?sRmhqdOfP>gY~KhdR2`(V>p+baberI~^VB=uSt6I=a)*p^ol!bf{1DZ~UrM zry4b>L2YVLmpas^9?_j{Ky;@Y65Z+OP@lz_oJ|v&(Ufy&P7BVZB^jJYE85VScC_Vu z+S7px=tM`NJAEOY$t1ed7Zcs-=ulrmcP`^nuHbU6;!3XJYI=}GFM864-t?m{1L)5n z1~P=fM0a{9*E5zI7{|@r#CUR;$OLX-61Os$sZ8M>a*3|=G@?_yh6j0ohnUVIJj`P} z$`d@!4Dxu2Cz-`eX7e<2nL~7)7xN-7u#BawU^y?bl2yFSD-^JrS6Ry&tm94IVgu1- zj!yIYY~cg8vW*Ymb%Rh_w!4 zje}V0Al5jDwGLv9gIMbz);Nf@4q}aiSnD9xIEb|lVvU1X>mb%Rh_w!4je}V0Al5jD zwGLv9gIMbz);Nf@4q}aiSnD9xIEb|lVvU1X>mb%Rh_w!4je}V0Al5jDwGLv9gIMbz z);Nf@4q}aiSnD9xIEb|lVvU1X>mb%Rh_w!4je}V0Al5jDwGLv9gIMbz);Nf@4q}ai zSLMAj);fqa4q~l?SmPkpI*2t6Vy%N%;~>^Lh&2vkt%F$OAl5pFH4b8}gIMDr);fqa z4q~l?SmPkpI*2t6Vy%N%;~>^Lh&2vkt%F$OAl5pFH4b8}gIMDr);fqa4q~l?SmPkp zI*2t6Vy%N%;~>^Lh&2vkt%F$OAl5pFH4b8}gIMDr);fqa4q~l?SmPkpI*2t6Vy%N% z;~>^Lh&2vkt%F$OAl5pFH4b*m=Vh#Q5NjO7S_iSlL9BHUYaGN{2eHOMtaT7;9K>1& zvBp8Hbr5SD#99Zj#zCxg5NjO7S_iSlL9BHUYaGN{2eHOMtaT8Drpx`iAW2>!ljW5% zMP4OK$g5>Zd5tV3v*aCTy4!dXODzX{RR zKby;GO05z}e!2L&tDhw6kW5`ts7DFvQ<4Uh;xrB;ozk36boLukhBG*V=<1gxy81^F zUHx)ISHC<>NabvfqA5qyjAMwdesuPus~?^H=;}vjKf3zS+0UR7EvZZ^j^{j1pf%Ci zZ$otU+Y+7qc0^~tJ!wQ&zX}&nl@6RrN2<|@>Rd<-E}|w|$>#$W@gdK#jpvE3esuPu zs~?^H=;}vjKf3zS*)L)#yI96}3sK^BUjqI^XgJ#jNE!qO<=!>-d57L|1PKfky86-CkFI`n_M@vGo&7wbvp<9A>_=BW zI{VSpkIsH{^`o;NUH$0nM^`_G=<1Iry86-CkFI`n_M@vGo&D(QM`u5}`q9~su6}g( zqpKgC{pjjPXFt07(bPKfky86-C zkFI`n_M@wxLv;1W6J7lYtY#w7)t^Lk^=~1%`jd&S{;fn;|2Cqle>>6Dzk}%NPa(Sc zQ;DwrokUmvE~2Y{H__G4CA#|e5MBLgL{~pL`_a{p&VF?Dqq84f{pjpRS3f%Y(bbR6 zesuMtvmagk=_=BWI{VSp&m+3}Gl;JKlYGomL|1<% z(bbdzy(`tymd{sN+_{|wR9Ur2QIpC!8b`9xQL5z*Cu zj_B$~XFt07(bPKfky86-CkFI`n z_M@vGo&D(QM`u5}`q9~su6}g(qpKgC{pjjPXFt07(bPKfky86-C zkFI`n_M@vGo&D(QM`u5}`cDyE{pjpRS3f%Y(bbR6esuMtvmagk=_=BWI{VSpkIsH{^`o;NUH$0nM^`^O`_a{p&VF?Dqq84f{pjpRS3f%Y z(bbR6esuMtvmagk=_=BWI{VSpkIsH{^`o;NUHuHA zs~?^H=;}vjKf3zS*^jP%boQgGAD#W^>PKfky86-CkFI`n_M@vGo&D(QM`u5}`q9~s zu6}g(qpKgC{pjjPXFt07(bPKfk zy86-CkFI`n_M@vGo&D(QM`u5}`q9~su6}g(qpKgC{pjjPXFt07(bPKfky86-CkFI`n_M@vGo&D(QM`u5}`q9~su6}g( zqpKgC{pjjPXFt07(bPKfky86-C zkFI`n_M@vGo&D(QM`u5}`q9~su6}g(qpKgC{pjjPXFt07(bknd==g*FR)#aL9bxA@l$4&)@%$uQlM1dEg=QphM=ths;9` znTH-S4?AT3-~IWQAM&-LOB=WEc$<949NXiz7HHgZHo4e(+-to+nNpybmT0nd3e(gG28}2S4`U`QvmPqm0iL zZ_&d&I7ip^;2hfze(b?H-goHv+xqwrZ;|m@k$8)_jlbi--&8pC^ug^1^VWv@_dmlriaGX-{rltm zmH+wp6aJNIJ_p{a{wvou-M@bqe{fv0{relyoqx`jNIR?Zfia`u-+6HR!A#qHa4#L) z@~_PK`{PRgliLq|zU=?`^Zo0i{p=hxbl8}oX?=zdA2!@OTMq9xYDk}DzJrI2N&Dvyna78v)w-yAn~U3ayy%kJiA;YpeL#=F zX@iH27?C!tZ`z0f{e}+cJD^vOp}qQ~)ynL6QI{@0i|cjR$p71Ob^Xt|oUebMwD@E9 zgZ(A;5osfb4NDs_q{raFrnH{%o^0=Qar^X6tJUqo)(0=ef4++m1BUh+HMqy{0VBtz z)#`G7yZ9Ckyj?S-$H@M^xmvZGrd1yif6Bi4h+5VA)k~}1uXb8mt>Jw}j_xt|94E?n z?yCNu`qlS(gFr-gf-yQ=7j~d>msSotlvUhKn za70@5?6m$pMx+fLmNsBWkA8jXkLc5Dk5YqxuXVd*Fk8FYyQF ztM^XpId){91ApSZ$A3P{flumx|M|Gg;loDyTn9gL%z%;o(|Qf--6t*my6V@(`3_#g z*(3Ul>OIUZ8$7I6kNDbY**yPU>V5IBy`aXxA|KR1C z(D2Xw|F+B7(c z`~8^W+ga37U(!WlpHTm!Jr#JiW(@p+$Iz9dG z_n-bxCjNE5P5syDO8+{Y{;$)i|9Tur{nzCw_~-HA;5S+HuhVJ&`uMH?djF<>oi6;> z>4Ts5|Ih!A>;cF4l1OBv`h%N(J|5+1OLMv$OIdS{e4&D4mF5Dun_A{#d2~g;)0@-e z+4MJO$c|*2Gi7H+nzQ6+t~2Mz-^np6G9}W;Ge^G29CLyE;W*D-$9XC_j-+2(WX_g7 z{lFdEGBuGar~6&yQFC;ON~U?9+ng$UQKFUe$mp4*oAYIh(_Bt-hTKWD^HLK<@|bkL zPngpq>1fWBz3Cd~kx!iNd2e%`Y}e3niP$cyG;;jGoGw?8XzlXLwvByn=4`oxdgdZ| z>zST6Hs{Ii{xnx>bCw*?#Md(C%9&)D^W_@)n+xT)WSfg+`LpfMIFD@G)c!PQ$^xdE zBO5idf6N*3brzTlWy$9LEoV-Z(^+HAlV7mOTrAH%$38b_%7@q+=aD^H=((A*Wo5sx zrM7Y1$rKO2ndVfvzmxC59RFDSrL)fy=egLi3R<^y*<@;0-bFnPzACN`nRQV#Gn+xPEm--s*oL@e3rR&0+FUMxN9?d!OFh7T; zn^WbL%rs}o3wqjD=1ln|OU=cyRWJL>oGnZCc6rRHau(ao`EqL?m%&^lf9q>snKSzN zd;{GM+dGduaj4smIZeJovAIyL9_BKiZzH<#&vX z?ZX|D7~%7qv*c*jnv3PskuI}2SFWJgTp+I=<#L*HLC_ARZ= z1#%~u<{~-w2A3huFWcYfYnU_TDwf9iW!altr{+|7Gi%K`as!3tLircl&54^m9Ohj(0ybXULu8n2Ti33C?HEmQPV=PMzrSgstYpB*)Gu+tK!09PcB; zoF|W;>~osa4tpbK-XUhU?7f@~XRiU2~Rfm}`HUGvrnGBpi6MUG5~+ zTrkb!&AlGZ%$af#)ndDBe4p#uoFQMLd2E;G+;5-8cKHrn&1nxf&PbNINFMp1$2fDU z+`^>TE+ewo{zZin6o3PbfJ%xT_5#*nsemB$2?w{^JV47 z-3H7V@~?d7Gy5xmiMHfiJ~ZdZ6F0i=mFB5 zESAyjUEf!nN0#5@Hh;0pAXie)Tp&wt@wsBVe2^>6d9um-zOFe#?&UgjvAkice|MR4 z2%sG^fekpST?6)KA@CSZa=3{h6<8E|l#oNV374DKozC z^VA$Unm^11veQ?t>#oitcTvlny4QJ%?JIMRy!l7_B4#;ypWB`}Pxk!NW$xzwB6rf< zoc5RdAg#@ra#fP&*v$oULW<*7<~*5R%CP}+@mkNv#RAikKEmM`3{54MY2?? z=hMxp@_KU2IWZsYbH*&ERq#2@dGdMomaoF*Tjz?>)du-05G8#Qvg#+)I? zoaxw$IY*W~%Q1kliSHK7t0Y%eUIiG zx$vB%M3%Wwo_4O|hH-wml{|BitklBgH>b(h$&c;w%nZkn%o#F|?dHf>jAf5Ga%3yl zojFH-cb@lMZhLFn+xTA0Ir99rF26Zb=F`YrB$L~_UShlKOKWqse3*{rJehpHeQr*b z!@1I&BbRh=eVGg7rcREhnu}zk&MvDtLsshQGMm%nuiafvb1eF@<1)9aIKLcnx$E}| zUstxe!toAsrtC{bY?pgzZ!VT+T{B(xj@#w+4pWvmz8sTesh|~3*?G3Ut6lkFdKmR!VMbAdeWR@bXJO&)u@+uk*1Ih|VOJh`1l z<|0|sq9V=B>GG5*Zf|jZIe<)aVQib~`ZZ_D8|ZJ&lN;~!J;r(D*>`!LIZMu9sySa? zmg{TBb~)!B-%D(lA5U`|H5bcL_qsiqQ|0OGHD|~n{AkXWkMV~&PrgctEMHfay3gZ< zIaPLlz;$HKl2spcU7FM7h11&s=eB3gm%mVGjzxuPv(=m~hf-wDmJji{IZu8~ zvAI|_e$w@5&X7Nm=;8A`1 zHP@FpO_qG!^<_?#SG?i+iu1_wYh7QlU6y;(^%b*RMWUC>EMH#d`;A%7TJLeyoG%QaqHK)sp@49}?X>!neu3vMuJY|#XH@3@@ zH@kjgmL<2ie$A=!iuYZ=<}6u$tLrzm%W@yMeq)wDkzZWz-&`PPeQp1n z^X0y8?0<7CaPmITqjgghF$%Y*r>YvDKU*s~?e^C^DzZab=SepPO@JpCgkK#pZ0eqFi#~S95`! zRX$lc)#sP{Qj-&<&9Q*jv!up$x$x-ZM5UPJ{l_FH(#(1Cs|v}9TIOQ8xngo6-CQK= z9+#YGVosM8E%cRPPLqQwCnwsQvt_sAlM|WdEII##h~?B$BG;TH=U21;&H3`0>h^zZ zmsi)Y|6`VIYTEziO!-JH``?@=Z>eqnn{(y1I`+T0NZwu7{*UeQu6p)=%yLwH``?@+ z*Eg{L&4qHwY4*RlKpt_r{clc{KauEbpEpcSbU4HQH)qPmjqHDOhMdya{x|2!QD@r! z<{Y{HEc@SFD3>&`|IG#R2ru?(VosGmkztO7&^k1?|IL}Q@j3RtIYUl4*Zw!>$`%$& z%Zlyt+zk6aW?8+Z{clc}<67DO<{a7QJp13AEmyR*|IGz*SR4C4w#%Vy?f;l%w|4fw zIZMuOZ~vR~<(-}F|CnXDi|uD~s{DyUb1b&jp{xCD&XkS2+0W(-Ii2E)qbLFT3 z_Om%ht{-SWn+xTVLH4t`Kpru~em1AdRpiEY`SMWvIc7O)nEh)vGlo6}{*o9%ydnjDm4|C_UAxAFGBIZMu;VE>!*<^2=w ze{-JvYLfkLE|!~bvH#6QvhJ<+zd2o2yv_bMr^!LL+yCZl+3gPd-<&1qPqF{a`SSj$ z_P;q#es!n)Z!VUb@3Q~RMY3+L{clc}74NbC&1rJbH2dG2El;`E{*UeQEh&m-`;E|ILX?!*{w#%V2?f;nNDYNW< zbDBK)Y5U)tCpXTv|ILN+>^aGaj^-@ccW!dxN^`cHGcP&O+ng^ypKl+Ui)GD)$%zH# zblERIIk7m-FSoy#oLFftk|mcXCpMW=<#>wBxpFO^n+xUFD}3+fVmWb@?>){Vk1O!K z4|JL3@K=2A<{WwMtI3Ia<_uYSb#kJ)IaS_9dvmVb&86nVn&ia5*W6~z*>X3x#rD^e z69e9G8;I?4Criz#Ywa5f%o*~gH(ge9j%=_lIkDHAF0Wnha>jOf`iA7hiG%Dnc^kFN zxpL!M_PM!G-moz_(bZfaKPSsvEE^QM4V%;D4yKyZ-tj#$-JC5yeAjK#TqG}k&*d>^ z$#t9D#>|DX)n=E+oGUkOvEK&UE=RndoTz5bkuPs`dCUcJ@CPnW%pdx?WSNWP$=h8X zbDG@9RCA#`YKO}c+vVG=jP3H6oi0yomzyaxXB4>}*<;R?i+9;?<^s9ubC+$1kChd_ zbbB-B$X~y4dCZA#-S3%X&X#+aYECV-Prge|JZjF6bD3ix%)TwouT%>T=TozjJZ(u-REnYv*q)Dy8W07WYxdyA9K1~L4R|R{A<6* z9J3>f)+$M-`ZgR}UvRq0^;x==ttVganU3O%;Ia7W?UYuWEUm_*3z?>tSl}t%2 zHW$h^rBV_r@_EjNJ%W>S95`^q6B;5Fz1)KG%-hZ zJ2FMr$=8yfaho}bEdqXAI*8PWL1~JoGP=aG~DNxx6sI(D`(N%oOP0LwNYxFQd?$CBI_3xmeDx>9U#g zZT-WvpCKp+pyA{Df_U-oGo8rgSk*v zsh5)28t0dp?1}TsZ1$RS&(`9$|nzQ6&el+LG7x=?mAU~zVDEnNdH}SogBYRWHoGm}5TAW9=IotiwoGGuO zwK+?^N=I{{{ESQE{Bl^+lth*}Th3&#IbZ(O%=d0iG*3y?V3Ijqp2JjghMd8Daeny= zd2#-8QW7__z?>t$V`*$ZHzjc_8_a3)EH;@lxAYfI%h^Q4& z0~D>?jEIO>G+ZrLBcg(!W+P$+goucU2oV8`8#O{zP>}C=)25Wty7w99e1DuVj${1B z^SCVV&!ktGEN&uV);^VHPQq@~|s8iF@D>Vt9l)zye~&18@OJ!$WWb$;2b@ z8FrqaWDLq^v7dR-OOX*!gS)po$ykUkGo;oEu1^D z9Zn^y@c``ap$@ngP9w)*!Lj7v|(3wOgSZezU?htHD`9)!ucoNKrP-bwc0 zUic{~#UrrO?X+-8xO&;z35xq4?ib4coYu1gLdIQ*tIv;R@?)-_TjO_p}jB1 ze2mA1Cy5(Z{g`_sANRrR{;c`93-%pA-Ec4bn3UlWs2@ms$8sEa39;aAxRN;VFsy$k z{eU~+2c)xXhqrmDGwy|52GJhe13w}GJOZy9Okc@%_%4ayVfgS})Cc#&21B^^;Z8W6 zoWz6h=ApFnarT9$i4#}D^r{)j#hq{h>5m8C8)P^hhVAcW{l{JK7BU0(z~4y`uJZKi zAri*@a5ve3N8xD_l`{8G2U3cA;Qgcw_rYh$Njv~Y-pjf61l!@CBpp}xF*isS?tt%+ zc6b=xG@SDj_rPr=ACJHbM{pg*-OzPEa}^iX^)Zj1468}UNRhy!etL|96SX7 zBpB0KO9v_49maR3mFg@>SREa#zYhmVpR+z&UBJUjybB0gNc3_eEk zabd3~ST}Jm{F#JgJJkD`Kez*?lL+pFEyr=q#a-|)iAi}lZ#?xIPkrFf3G_4WgV_bt z4R^s66X{zi13NsUS68xKJD6wZBIm^76>#~twc zX{`IW2hMty`HTnQ&H#Nif$@b6rgMJbPB{2^9t-!uJ7#kn+zU(R(q23U8!hHuLdrvP zh&C4RSn&3DI416eyZ=d@@F=`*GxfxMu>MYtgFE4YDCfvTjtRH@z_{QMxa?n)$3t-L z5!xjVulkkwg9{5t3>R)DCvlRx^>~^x@UGSdbpZFl+xUXptU`_h z|IxvqhTtA}yUU;!$aXm3B7@o?4u@T0P=;sN7mn;?P;PP9y|Y1$#Xay(w}JO=nZwr_ z_}nOU5Wmi#9=+MX+@TKe#2p5eHi_-MIes65>WzEh4l)Ce!p?o!7k9&dkuV;EpZ7B` z*C+!o?Qc-&lPLpdkSsh1(*_un3wOeYi3j(?SpyBKzm$RX?=-04QU)F+V{zp*s6Au~ z9)<4>GN>Xv3}+5DsAYH%K75x!t;7AW*ARo+f_vdrL)jm9!-m5Q>Im+HCndPL+n_cR z`xM3+F3K~gOgsd8-(yhia4)>fny5|%8&cuke3+)+y~zb8dL}m!|jU91lUq9|o0= z3w@*j7urtJr?MRmBgL{EPS%Vnga_awI-@cKXbZF%j4Bg%z&0kM>WI7GX}(C_i_4eF zcjt@br{Es=MjfNtfrsHoe35(I-E%>{e)03vdtYF`2#+ zhoec_i}WG99!GVloL{1WpMCNJRlxC3@2xwr@3L%g^T z-daqZaWBkT%H!fLcoR{xDGx^wJMM$oZ_@v`3kFwl9^t|bB!oxcezF>mLG3N-k2|3M zZN?85enXDnQJDS?^9^^xuEg*%j|&GAJMM$yNE#l1pO8#E0^6^q-na{XKsw@K_$A53 zqwqNK;(S4h`r%#Li^t&Zbw*VnW#B0ilrrxbRYS52cf!laD%=f+e_&MWa3B2mpPVmv z1b+M>{al1YZ3D-|9k2xn;4XL#nT5OI9umZ(aO_7s7Vd|pjr1GtfVrdu_rgtN2Ofdf zf6N+%dtebcf(PNO651&amk`Gs<{@1C3H>V$gPS-PaN!G^Sx>~_2V@o=hN)Ya^SBd^ zB_Z4o!(^S5fy+N-yzvm+O7`Fpc!ZSVG3ee(|KP%xh7oy=9-1-lc&t2`DQLF~8>+P$EWw_d7RCkfpxDOikGVZto9^Oa&@E9EOE#oU?;0NDP*C5A%e~?^U9bi2pUfc^? z9;Cl;7u-zzcm!U2h&hS7q57Wo;=<;KsgIP0H<1mv2R=u(;6b>A?7%~CFWG}fVT_dG z!ptA|f7}UYlH+&~9zDXC&gHRwWIg0AJd!E z6x34Ncnof+%kgD99Gqg}-j@D^Kc|{h+G~`7 zJL;ME?oQ?#JW0H`O5?Fe9`1x+5TBHRY4uI~Rvz2ojbt_Mfdym(9)K%I1P{TjWDg#J zKao;A2J1ASe{cuvK;(;WUGQdN$31XXLz7C!gRpakNqKNL^fjW5xbTU_CbbUt!)ciu z9}mE#O{wc*>Hz;BLvYp1#CPBmT)2r8;Su;mbJ`-?;bmF$KkkO3iE9blVTV@K19!n8 zqzCSU(@1YT09TM9cnEGKK0E?{B4hCwtkatM;||z?%)ni6V;hqSN_nWxGpSv;u;uwC zVyYjQU{KYJK*^)6W{wt8TdXqj)#R8n)pmA$GOO)+7dVJf^$d@JP4C7 zW~^}s>`Dr75B!}3aMh7HPFCRon13nr2KU39%S_6-obvG6P8?GlUT`_b!Ci0+S%>@K z3uFr(ggYd76yACj^Aq>NtFC3-SJ3~^bRF%*9dPmW^fMlUH|9_$+yf8aXi{N32LB{w zxaww750I0%AD-$?AHL4^9wznpO|%pD!y7!b2lv3yw=%b7J6zDyq>kVrsNKdn7@`hv z5b@wX=*VRs*$xMhBH0e3B#aAN_NI-v3w9@#H+U>KhB$CPEGFrA2!2bPcnl8f&$@y8 z;D-YkBRm4Nfy^b`0ly-JcobUh!% zxE~%NhBrATyyiaE4crZv5+@#lS;N^McfkipC)^L0kgie&?j{~Q3V$H|@fb`W!J2?O zVGi-(9{9jW#u4|!ZDa}_fmhzoIO1+Nl`Oym@Hh$K%4bsD$U593Bqewl)_s6=19!m3 z$N}6Bcaj($g&jw6Uf^yxlUP=9KEg7RhN}k|N8-dia5-s*hv2)U6CQ@YJ;eA*`G-xa z7saN@Ux!dPWa$B+J*a}`6lz}%dp-*rRT(^S0z{Bv$ zm5jBNfotEQ?Xn%_zD?V4FKqk{=OONd)5vi=07tIo++0ol;es{P4G+OP)=~%D3vXD* zW8ogy{yq8;cfmUEGk^giA;S55etZ7aoNvo0$W+6JA3~ zaX0L?g}I7*U;(kLrQhHzl7!X6S~MrTsUtBeY%e0!!pttS6{Fu zkR03zyAcoWfqv2(7p@{+JPh0JV*cPRID@RigK#<7f`{OHWQUZ8Wn>SozT!TLl;Uo9 z#n=2z9G==kpS(wzZ>T33i-%yly|fW`!7XG49)Y*+V-De7IF^KPKP)1v@gUqm!gv&3 z7iE837$ke74E&Rn;=*3vQXgFS7Lgy42+KBN$JKt5nn=>|09-}7N*Q?K0R1Lq4w}?I z$Q0ZICz4rG9@am^W8+TfBg=5%da@diz})Xyi*PUeg+y>w%DPJS;BGjbl;T17F)70% zF#9ld{(!!M3yB2}!DA#HS3hvR5GU?|Z@CZCg3}Nb4#`^Xff@4Z~IR6ihiHG1fWEUQVga71OjQilwQ}mBGd|Pi;o&HICp~GNSg}5-A z%)ni+i_xr#a1XrSY-YVa33rqMYw9o-$^kZfCICr5AKDt$rd~a=eIJe9e4=N zYHd~rWIHTuL%-kw*r&Z&rEO$iIE%ROAlyYd<5Ae81NFq6Z~)1b@^A|A;sJQ)1!k2e z+hJ>$S>@v{ID!=5KDeI*@EFX#(5x0n8JJ6!;a>O>S%nATO0o_Q!`Cil-r^zn?q#$^ zw!;>eGyiZG)Lp?`{g`tB4j}2c7v_^J+z%UfHmi2H6SgN^aTmPlDzoZ=d*JqK%&IpY zg^S(HVLSv^UTao%6NbAoMp7PLeLZ7=yJ6A|)U$;0a87sX zi3j1`J^w24f?U9dNqg?r)0WC0$51%+nr%Qzolqh~mGa3{Q-lt_6vm+Zhp zFlCZiMWqaUksQH;@Mm%ykHLPE>GQ4Z3wIC)9)<2Hv;h~6BH6efP9h!g0BjVX?YI*z zd5$@Nhv3HP)ESS!J~KEj?u8?WV;ge-hG#OyxX}3$u4J}JJ zKJI{yrSz3J{Fr2ZM!Vo{l7mN~eHrH!?tr%~=lHl6zPW-m1P{aOUT1y7J#Yp&fCphg zi1iH*z*k7-cDBR!-(XF{!*J@8i}K(e_(~g&j|X9PJNgQD!2oHun?8ZBlg@Yu z)@jdia0hHedgD%*bb&>AWjky{X2^EfhZNyn=p)N;p`Wb6g-=~#QS0ykTuF}LVc6zU z#uRtK9AfyII>Wxij(g!wl7>g&QIdtL%cv)5hdW^FPV_VGf=^vR-{JxIDd~?#;L}$! z?y?=W@61?BdAOYv;!$|ZRTec1_rOc9W~^~HoX~}~-~rh99~KqEo$z^L*hAmKWO>dGq=%ScmSRtCAi9E4v<~AaP;l;8}5gb$Vn*= zmlDG_JT6?>i+;ny(9@fFhzlF{rGIg!upf^t+hKBliyDqQU~iI-dtrza;=&X1|F{}p zQFoHClz|_R2p)!IBr0VFa!hgrcfjAg{7tqGvZ#9oGgtT0b~xxR>L(5#C;f3hTr?J%VXMa&FWd#kf57-g z*%!V-hU}*fa0MBThhX+UX(R4}-PT*w6x;*5eaJZ_4lmn4|Kn~r#Y($9DR z9w%Af(a#^V){(Aw0RB$$WP1togyiEP_$gV2N8mSP10IDxk}Y@)o+3MN^$BYr*@L^_ zLUI5P!KXGczIXt3+RQvWKt17iBn^*2%NFW}JKzY?4)?(l(g}~iC7;s&cnF@im30Pp z!H>vrDFg4{MqlARxP|y-JA5%hzu`f6?GDaU+yf_kK{-4Cr|qQv;&3N9f=6M>Zt9Oa z;Uh#HWE|ldV#mWUO44xQ%U^R&;X#a*58MwY5icHq zFOxhx2$vF{l!t3cJ|2dfi64)^-J}qY!hewf9)qXIEL`p5ydy!}0UMKI+zDrr5FUj4 z$T~aPL(EmXzQz_~=iJpOk_1ezvGm+zGW9^~W7>8L@m%9pG)hSd;_z!um%USKJAA zlPo+6FF3{;j=SI-(g_d35oOdL_rZ<7GoSGYy!1Hp6L-V;WELKRJx(xQxCag(t8p(J zNy4}fK0!)wKb%G)cmU2JyYL`fL85pFt|g^-7=B7(cm#e;j^k1I6H%q~5B!T*aP_Qi!WRxgQ__+yR@CS-2CPPlC7$UP+2^H|$PA zxCag-t8p(JNy4}fK2Az-Kb%G)cmU2JyYL`fPNH}SzDG*&F#MFn@Cf{d9LJ;ZN1_f> ze|U;maCMUU69?{qO-VZLgdK`3r7++?t@Q|9NZ755f2`K zb4YJI2$vHt9)fF09v+5Ui4Tv!y(Axx!lT5Gt5X(bBZasFHYNew3C}09a2LFi1aUX) zPKt34>_q7iMEyYh|6;8o7Tf`y#DNRXC+WBgUQL|18{SN^aSyzUxNskwNIKyGIGecfAY4jv z@DO~TcLCVAD$rd~a*ODE07=BIm;8FM|Ie;sDl1d{- za3_3}l;M6j#E_&;;yyUan4~QKVmtiG#6EZwUT;ZKS-1y&PCCkVc&KiY>Ws(WJ1I%3 zHy(!fr*d4}2j`N}cnB_Okfi+La6)F1nuP~oYV#!iJq>k(&08d?65It<%On-Wg)2!6 z55wNAspk>qBpjZdq|$L8JWAT(s%?^bjC98R@WT#Csw*CWJuXO6{c#VRO7idk^j%0j zaiRC(BvpV5r(TkzW=I+M>19c30Um+=%NZkF=)RIM!i8O~VvKMP9DEI9g!|zBYZ)Uv z21j+JEw~?czadH4f22HY+$~9E<4)M=X6lT)VO~$_j0+c#(YWwK`F~t^kSxQ6O>U!Z zxbR*Q#)YquEx0h0o1}K(!drSJsZw0HjimqNi1QGhjhDg(cO)qnF5Eym;ldwCS6t}m zP5L4i_FH9dY4n1DGec@K@r+g%=N`p15!<$;X8skwRS9>`vw| zE*wOPap8Qj3KzaX!nm;gAnJ?@yOWc+@NQy=IpQ=8W*?+bzp@7qlqap8-k z5Esrlz&^O}6B5LQ1xJ~axUk?DYneD4Q^tJ5g$IA-8u2UZA)Iua`s2ca6Vw40KC7&1 z1}+?}Syd4(Tv*qtN^s#MhgC&z;YM;27v5dZsw}^8&cYsPR^`Bjg`_hsoZY~xa&Y0a zhE|o23k%Y%Y5^{MD}&?X!ljKkJ}#Ww*s8LBcf|QZrd8$Q!j;Xe%8v_QbnVykRT3OW)T)3{aRRwUNE1Unvg<1R%Rw*uQbe>hE zonUQ&kDhN;Zd~|%JF6Ow3&Z@9)GS=M>H@3UfD6ASF6cojHI9 zVCEfG)f;!hon$y3g)jD|{&)~R-iPDjez=>=kTUT5e$*e2!S4O(BisXZ18EQLfNSrx zsx5dJjv7RraXY;})SwZmO-6LCu!n0GJp4fny6 z`}lv{3D=FF&UhH!Ig)zfUfAU!t18Al(El*yaN$Fb(YNBTi{GktNf{U%Pk-XVr3IWv zr|4Vw>m)1BOSpfVY*ojmSXD>ysce6i^GG~EeTu9+7ok4zeliyK!S_ia9)?HA3_J!` zy+R+#cDRWw!z1tqvP#Op%U`9=xEl^5CAbfMN_I$jI5tS%;(qudIe-V@Dslu5!+oR- zkHXXBB(CPtK4SQbK8Fp69e2VjNE+^jeMu(ng=0t-?uTngJ3I`B&g1;WeX!nq`UH2v z7f5ehxRT`I!p&qf9)ZaV7#rLHKOs|OJKRfV;Zb;;1aY;HIYNqYCtN^6cnChTh;sxF zK>usB5f}Q3S+7o0H&{w?@fbY5gmW2JORZ|ca>fM@z&A()55tXQ7aoC^uVC%M-SB1- z!#(hc*EtsMhbuz#iAqr+_!aTuQCN2+=NImP7m^~}4YS{*Ew~HbN_OC0IGXIi{m`439=JO*F;o^u2b!Jeh; zi+kY?Qi@06PvoSOhv)r^$1qX{cs23hZrF$P#=Y=o;>BaI=Mf%Pw!?)#(^q&19wH@D z2Ij|jJlqdk|H65PyWn%gVxnDe?NQDtJPey2qg}WYjw7A%01T2IQXYm#E-w6%^v9#J zt&D!hh3kk97iRs+nBu}Iq!1UDkr}x9jqN0e2jINlSugMq{P6_+iO1lPKj}kp=s8Uv z;=-XsnHg(1ky!8mY_Hjr19!oVI-7Fh5jaF|fWMOdxJt6A z%Sj&YhTCm6KJ!I;;q^^z%8z^C(e^e~B;`BU)EKfF_rv7NY-$7UfcKFo?t^_g+f*6u zg$=K^DZ7O}hXIm>3!7eJQ=McxoZ_~r9N7-dU8pDSfFJ(Dro4Cr`nuZGa9r5pI-44e zyI?mm1^2+QWCresYe*3uh9^iduCAxOWEJj)kCL#Ihik|dDGyJOT~huA%98_99zIH9 zQXZ}$C#5_*K`cp>&tXhR8ZK;3oVW|FCE0iw?j#-YDC~42V}!fmSkeRc!?~nC9)jj> zj4SSdd1N&1gDtw-Q~~aSH&nRf;>{P!hv^@FQ{(k3h>U#7Y@>9&z9WW99 zsV99R_&XJ2i{BaaUXn+`0*fY zn#;K%<>78J1CPSU?erTiJlxBsLU;^1?qJT~!r^2K?t{;fU3d__(wn{#hlfcFkHO3P z*!Z`Dj5U0QIPd`cia7BoJV{)*>T6S(q!aFh#rWvGB4PkEJ zJ~)OlQcXG+dn{^ zaTlCJ+TlU?8|j3rQ8v|!bj7`J*n`v+_rWp5i~HeDl7~m(rK71o?uP3hVvO(z{E^JS zW3c7JHWkEO@Fr4>d*BEX!hP`YBdk$U9{xc}aFuUUOU5v+cnH2rqIekYBc*s0UiBDj z7w(4L#xh>X93PG%>9`+$M6&P*tn)Z+#2qk~cyKRVK>Fh$XnBG*;=_TSY9=Mq-z=bwHZN!D$$vPu#Lp%hhzs>x> zgK!lYD`nsgQh-Nc8JU8scX&)P19!rXqzHGz+sOjl3m+oOa6g=|hU4M^IQxCtg$Lnj zasXE!&_5qCA8-$R=p*_zg?*t`!W_jNunlqJE|^Dha35^;32PDVgh`udidzh>B*cU$a4P%A};KO@qC+>%@?qkiwgK!h+fk$9+lr;r+ zK#bN@*kRfqj2qjZ5R0@R=Cnfd^opUsx+-J8XWGxq-W2H!=kGzz>fx zPw)uLE@PfZ8F&wwf&1XH6Ri1o2<|<_Sm04O`84&!1F(m(s{^wDxp)9BOR@7k${Z7x zk^(#i)9cyQ6x<2>r`h?9JNf~p)n^~s4$TehY8~!?zmqMvYRKc0J-7?rN)F&&IF1~_ z15it+jkp7jBdP)0;m5>|N1!o-df*P&i)7(m7$Ghx1C5RBs*{v~H@0tT(kxEz!4YH7TgEJqyQIwd6Av|rk-&2#q5s<;rW-?RWa^@?_bI|N_lwr3dRwS z!Pl;2?C=o0@*2B};chsPSkmbqc(t3h;BMITTH1m;;n!X4DjSc&2X3G(xF7cEVOL(< z3&)YMcmNjNWLJfF5WaM?UCj`Oi*B*21$YR~^DqYD@cUb7Cmw^o+n5u$u+8nvJ=_Jq z>&2XwGVqz+%r`s$_5B#94CV|RO44v2^b;p8Ebh-d#zSz|0LBH6!qcQHt_Irq{Gna- zz#Xs~$;CbJLE^>zFi7%n;U?n4BXH!Mc9oC&;50G?55U=EhLnfzlOj9}H<1N+1g3eJ zhqx17L{{N$SU}d{0XUCrz(epb*@DMl+d;Gkcfote0o(@{lbDo;hsjAP58DoAtQ%1t z-b2!GA6!hFcnBUQ?eG|Edl!8r<>5V~tCWX}iAT!A!=%5Ihi!+@KT;mvLqnZ@Jg5N^lRn{65Z8+zsy}QQQl= z4d*2uiXe%g+^;H@MZ_rfC55f8%eNM}3-@AlDl+z02A9(V}; zNpf-ZfL(PbUfct>lHqs+>POKJxC8bhV{tEBN(%81?D!z_1b4#?B#1}gz|qVNDGz@l ztMM2d@(|^4A3R7RvK>D9Fy{;Ihe?lczTgh{3@O6{(3(#_WU?K;LhN`Dc6gLAz+G?w z$-+ah)fm<+*$&r`&UhH!_!w&z?tveXTs#7=A4@;TcDS1i$D{Dx$2muEA9Osy7~{e> z$P7FTpL&wV#sjdIpZ4Nj*k?R*UL5u+ppD|N*HetOI2`aa^IRPMMl4MjmqM;9R)7x%)4 zNq^iA17rv;oI{4=LAacZ#zXKuG8PZRPe}nDf!~uUcnm(Vfcb#?;m;%}+u@xHITvs* z+(uU85%JeK7sTO=H|Y~R2ID~|7AAE?c!u@bES&awa3uGN0go{ZS55W(}20RSEBPDnY9wQN4ZDCCy zJ8%a)Z!2>NcfrZz2p)jfY-6p!-LO9~IH?<)O6+(5E+!5<1n>TgzQv=kl(fTR@K55x z)ponGk&d_nHYS~LC+tf)<6gLlbj2g^XX3$Q@OP4ntIt_WNpIW%50U;-2A1w%zKO$T zU(o-!6V4?CcnH2p0(cm%-pO1MhaZw!{fw>tNpCcq#YiBzVGNOTsVz%mhEsp zapNI)oOH$20oE>(g9l;rgY*^dg8fK;+zYpmA$SBHC&O`d$gU=m(RcuM`JR3ghp&?Y zJPbb~Q>6U=$N%_+Nu?S19ojAx91QDPR9&r}vbfA%lh5cegmsamiZZJ>pJbm6X?&d@ zk$x6d|9ctR?Dfn4F06bEc|3`c->tex^JXL&RZm zn%!mdSba%eOV|{V{p01;J=)-ojhFBV=sVU})Ou|xd;F-Ycanb!sJ~gMt$N!Yv-(PJ zdC#oAG+5aDmmza4|31#xXbu0G+?YJotbQ>X`B#SprsQYM>Sa?hhgoP&US-yPG+(;V zqRqF^geR#+{J#tbpTikny(X1ycBlzF{shgjg`Y&%?xgND^^LkvYk#Nl8Gf-xGd`_X zOLWFB^y({}@h!bttT%@A+6q07`K#VI-k|-VuakKA3^U)Me39Oz^J(5hA2%{~Rn4yF zaZLP1P#5`2MO{>V&5>-pP^F&FZ zw7pv8juqpes<*y;9A;_SbbdFNZ>utf8>)p`qv8zpvF7+KUHzdYpK7SK>FQ5RSH*_z zQ`6Npa})e2i}QFx-i5J!k)ak@lkvH>df#R!f8DIIMryUA#hwiHNlN`=4b`MnVr3;>!&6XT2tD-;idU*-(|#H_pNv7-uw8pEOuuQ0n(a)@K@P;~H01z2-JE zN6$0fr!MfFnah=Pyy9G`dHgc8wC2Wqb%!y?FZ^o8mo@Drt#x9UYJM!0q19_{^r~x& zh5T}`ae}6etFlWi`!v@YxsCif>p20Y?!Gt&e3Tv>&`q{Epv>vH8WR$6KG*7UE_SIt8x!lr`8Che(^}J|S_kfCCz#uF9hjNa>Qk=rw))&7724;@a#OM1 zWYo5QN41>qB3*85!As>)lZ_WVUrVx0hafNvt^}O`@(Gf#jNc!r&rEc9;4bgRje;b!&Cj5dZK}J zi^{MXl~qeq#@)fji=vQ&rgNEeS`3gVdHGCn_55^p&R+?;EP1<{=3o2(* z{2KZH^Y}H-RZBbL2z4QAd4}}$sLE@kwWXCGGjG2!J~999ZAlK!5+k8$Ho%M5_wzNTJ1(rtAoYHBc-heFN5B{^{B@~z_YvFG2c_lfm3(f;`TS;MpE*J&+N zjn^qscRoK|qie_b%U zqx`&Vu4Oh&;SONFR+sbe9nJcorft@&-)PzwRVov2@AO3fH`f{`r_9pSgLMlu^|WSv zUejLItjjfRVU=CV=fy=;)}(}2zb04z|HM3u-=DXs`TBHPyZHmn#=E}UPV&C-UTrGp z;lFe(-?OQihNjQ+4whjlKNGgkY~+)h2h2b6*UyqtSKHLVq`G|0>qJuOBt9)-t@{z5 z|Fb^F#A8m#`9D6f>YcmZC(fg@?i(ul^ql*X>i0v5wpZC6@6(l)>q%1MHeBSoJSbJE zyceo*j8AJxw;H)A?!`$fWvd*sYTattxAJ_i@$agM*07ML5B#*awvJBwL}!_z*FMu- zTe%FE_fwZD{Zwt;{JZs_{C;I<&10$xb=m}-Vj1k(eqWY)pnW)tFYk6vYNZPFsjs$B zGxb;F#fFBzHdk*NGw|n44UaWf6D)OBwNPIqrA3;n=dH z)uM)}dz&eLhU29yUJ+0JyoEZ{$hgSKtE86WE!FFpsb4iyKV_zJgvm`(COTD7lVu#U zq-on}E!DB6ZNF%tUTK!}v{Nl^*5F_>_0MJvzH6qwY{pL(t9dOfueZ=nwJ<*2QhU3l z@x7MX$1RhOwbXXB{DC8sKP}Yk#!Kvab5Ffb=hZwFb7B;0PyD=SUUMIw)?A-yO=nru z&)O@@|EWeJ-!3!VxR0a$VyeqGuN0V5XY%hk&2_)v8?el;vi;v2uc7*mLf>g^=kwKl zx@^9*bCqrL_*oh>E`K$u&YAk3Rh$XMBvVI%kaH*QE74 zezkkv@-e9OxdksUF=;}&ddv7pPF><&xY~J_xR%+(-<_A5+>dIh%H-lT9bftD zE#>!t8P%`TDM}{ItJ+5Gdww@v*G-n7^7U#Zb5quGt)Viw^qwmBFm=>5N?lWLHb0>K z8#`0p!f*U^NtELM<(?z)ys&z`tNyJvmo;#D#kEGpRK~XAI+9@d^Ngm|pJy~t{7xMC zOPgfkr%_TS@(udNwtkcP%lNQV^~_ovzkg^HzkjIc>l98ielweACw_j5Pshq7<)v-& z&a|!ko~~ild%8L*pO2f3Dbv(ZE#83{@nfe~J+}Q-?L}?1PQ5LMt>G9AS7@pHYIZpO z)M%ToEq**c8kP4yR)ex0tY~j#+-3WRBCMw&SF((&~K4w^o^wS;;n=xOw5f^8M1;@8a6_yX2Tw{~KOi z*Vo@=S1S$md8K-?sS&U7zG6*X!KV~#DZEC$#l}U$Z*RwjWp-Y;iXS_EZ+_M|);Oc96q$%|S zK2>I3$};p$Qrr1*?_}rm=`UN`@z+nR?fC1j)?M+ADqlC6RbMwUZ?3n*pkCG0f1jV} z(`}~cX?Dsz=Si_fd^<k2Q7bDRLLi|YBQkKI&G`YOH# z)n4|1ls#HrHZjlR>wnL4*Nn=)$Is8~^5+i!Rgc%FZDrlHD*KnO`?cQVy42^i?{h7A zZ5_43=vc-Zbf)CPcD2_M(Je|=J8dcRcu&yQc8*=WY~M|~OP{q8)RBUuCPFAm4 zQWw@y3zJfRPF6c?_8*efL0en4Ja2EymUZ^4_##<*+XcyLUh)g^&Z=cx+p2e1Ki|$@AjD=f3U`AG>+Xt;F@9g5~q0S@k;9SKXEB?wDp!E49=k{N$*1 zEPnX2*0-u_UFF=6f)WlSnqeoaoVeoanMAJF$7=wvju=?<08hxl`>D%Y;^ zeKV`?+fr?({B|vs`_%*S_idilr_SXo$BowICiR+exg0J2THeYttMNJiUx)8-S!s18 zdCt7L7a#k<73)!z`;dyhuA?63XLxPAXjxc(O|NWw_4}E`JgL6j%6FCbJaY$DIacym zUCJLfKG$n{ZTjzC8#=9}OwzTOXizWcTRd&xRDCo)7s}U)l-jP7De4P)>I?0P!#ee> zuAqDj;&XPo&2`TEWv4ZVdYv+_YYv_+e4t&yT4XmX`}nG}yYiZ6U!ytK=+sx*GwhNf zeLd>zzOLv~`&P{v(W#%b$x`m`+h~7Y-{?1fl}-OMQ>VObjcaS0{d1iy%CAxD=E!m7 zJgluv?@{1A&GCz-K8?32eqUef>+SZFnvGu|epj$xCdE0BfZ{ic)uhnI^P<|%U3ZCL5l=yk_sBTKpX;=WU&G7i z+d1#g@ud^Ad#+~Xa=TRH-l@FYdDZ7-CQr5axB7bPTl}1u{zn$O@h0n=yq09TskXlQ zn?8~8?^)%#op^0OaSrMEjr;f~8926u-+8EVZ&i6cj*mmVig8M?$^ZTTS^e^V{ZYOK z{onj3?}z^d^Fgi!HQXD=*TVIQwdViE^MB2F{;yw;s=TIE{eDjFIi}0&vGRWZS+6P9 zQKR{3iZL;br#&4&quDs{r(__5+Yh9*O1-hFlEA1P6=5^)xz4b*Eujf^7d*WUy-mbG=r%b8%oZ}pg z52ghZ_plZ9so{0a6g8fDjMwI9b9KD5Sn*y&)%tUvS7RUZn&X%;+_;rhJXf#s9HPeZ z^4xyR35};V@dt^wZ+b=hD()X^-0yE5CviXW-`nrM*?;AqEB%}Pt~NLSrak|?cKkOV z=RX)9OXpYz1U#gmdy8^SPvwt z_2z{penvdmdLmi-CAm)Gja<2(*0lI@z<=|ai$jgKFrO{$w)0iW7G_%Ixmo=jlKI;6 zZ_Y2d-c@~GBj-WQpNnpzc${v|clkK8W}R&2o!)&qK5uAnt~RUBjMit&>TBaM&a#U8 z`*U8aYjWGLAU~q1`v*VI9@Hn}1%^#p#Hh9!S;(aA6>DAPbvSW;R%d+uss7yWZ=MUt z^RvY3j`4j{%KNJek6GpU@>%Dq+#}R5rf0pjSFNur*1V+V#=BK(c_E7bYWmD{1EX6t z=3_TC{jI+78r4YtR@1Th91x%TeN=TfF3{8qn&nlE1ueUB_SAH|Oyl*cImbI|ovqU5 z_}m>_%iQJli()N{m-V)2AJd$~JURDyW?P=l=J1_0N#FCv-~&twtuF6J?9{CLHSGt@ zc1qKJJ@b^ayxrT&=VbXg(n@Qd-L^odZmrAPq?@$5Uu%3&$NGb&9o1~7HSLtvKGDc? zAG^KQrg>ZDUAMY>HD1-I%bReYYSynb?OV zJW5=rs(8FU73WuZTlkDu)0AnNy52Zab?4I^)sb>X1l9#jJlDJnbkP| z;-6O^sxBCQrk`q>bCv%lph`bgoEw(J{H|W7v;Kcx#qr1g`+EFGZISt2@p^oDf2U}6 zXL4^flwP~HNt}kLA3WlHbRb)t7ZqODQ&W!e%{S(JIhc?3{Ha#C>SG+!s=to1qvB-~$E&*knQcQUxAL50*0leb zea_UQ>M^bQGsmi_PKo^!JbT|W$4vaaIvx6n4n3c$mG)QvTP^>ek!)&}tdD=nC;kbx zinStTy_UpV9!&a$I^HR{wETKnb6LK4mUFE{v+UPYL~F{r@jqNnOEz6X9S8HSK)jCs zY1?WoS9R>F_Hn9dVyfP%U9Bn}r|RD-`Y)rgZDM16JuQAk@L9b{VRNK>Mpe9Trf$?a zUVB;Cz#HXBhxEp|n(bS?d7H++?4lo&*gjR?C}>b8^p=+m+DU_Rp;0R`)-7Lpw8zUA zt%`F@kZ1#adL4Z*KG6q>HQj9)t#aIytD&x(1FblRy2v?HD2GwLO^s;7_NvHL7ubNKAO;B(GyBcIcLL94q}(-vs1#1hNcAeZt|kU z=O)Y74a%omu2;^>l)A%mw|3{56+=rk%GexDluy*7*5lMQUZK)BPIpT`?Y1+=$*6B_ zRbL-}1?sHPD}Vg9TC3)kkfwY_?q?nv%rDz%#+5p5pz6M(tMJwO0E@TH2pW2lJ{@+JEmF;V-pErK0S4lV= zyDfswJf&aQ;IK}^-s{=WA*ErRU=!cAJQ~YoxG*a<7o*=RxVn+^Yj~J-!#WrFn{-rI z=h)k~uq=k-+0@6-+Zk#ZJE{~kw25PqRil4n>0-M)Y~qi%iKp|Rc0RR;?T_K(E!@@2 z`Q36y+t$%S1A96{pGVij0qEf;F#5I8!^d*}bQMRVw{dm716%8`#}{WDK2-Qs%7hMu z-J>MFukh`Pt6$;dkaA2cNq^%lwnA?sosGK}D*0ZnKF#5-xG_xqi`>kpyy;b^v(byq zvSZ8VG~YBDC$HE+u3~natBlQ9fw?E{dYtnu-1Q9S56a?g*7Y`hvj_U$Jq|0ud)0&9{wm+el zhP7MNW4ui{LbkmVTrc5_kQ(Cbq>a=waz75!S@EhGuNYpPMBgZOiT|hZ*7`*8m(Zp$ z@GYlk<16K5z30 z?GE-YJ_j@sV~Bj(&1KSl|NVF4&z-dHT-*F8 ztLw+GZ?yXC>s_}m@}7jesV&;dTeP${;L?*D#;6;|u-Y-x_OLC@aNe3z)$UZbDfI}8 zEO_I`z?VshaD60C+;cgM55n}pHze8LeJVbQ^|5a<@=Q<`L5{8$GBtA8(3>805qzcV z!@iRB*@!oP;=1{u(LB&78}y$6`kw&$9}W5+4EpZ}`V;N6-S8ILNqRdX>)!aI&~Dl> z8}{K0zL*oO-R$?g=r^OACbRcd-}ZF&HT(d^o{XpP_W0Map3~~7=C@2{_axD-<63Vj z!foDX64BceDAJ`9Hz88{q_iIE2t?*=^~bmUP~f zzRqC`S;G7}LcJc>>h(9NUI<6(b&pgpgv0ehq;S1jrck|bDiZaonrvGy94Zn=3~7vV z6vo)|&DznJZ-8IZ5$|~pmq5^61TV(B-=bR{A|ns*+5dI=F$op$^=L)M#4%wW{|;^a z&T%+yzGzo)@c_o?dmbM)$KWSzH?66J@LuMz42M|oJLFLn*Tf#ysj|DVP=vpqnHJt) zL|0F>;bTL`YbUHMbu!**yLm0|jQSjAlc%89K8!X`f9BYv>`K9%MGav4$FS&uhnG^I zsUmIqcjOU$o(p6DEe;9lS5eE*HXEN$&?Vtw^#RT<-|Y5wu>VR*}U#Ly9T@)x$VV-k)+Uh}Pajh~XVZc4##H9P%a zG(E!p#4FdkQ$L-H&%}fr|Cr0Fk{?OHF^aU*m*%mn$0xo#k9|4bb^kmzI8g=W>xqLC zaRJOR-ltDyk7lMma0=UTT+w5vu(yAm`pC)brRlfvcTQ&S%}%X5nSF7Rcl%uS+FZ}B zx%|#~o-OnE#(7vkczd2__dNd5ya{1hmfEoh?YQ3Bj_`Zyn8ff^Qr%-<7gMZukxxvZ zIr=Z6=4YP&kG&=%&#UiAcuWGdr9N8O<0mDpn*{%gd?;}4| zYmDcXOxBh*@q=U8GihIpWvuJayep4oj~_Pa(@fTM)TEY7_ViJ7W_;^0X;&Y|wjGml zeJ1Na23KYc9Ww?Iug-jfsu^ytUEQ?u@pUIZHrn9g80Y9(e8k(|@;RoJy zB(6pu_x0iI)5EdR4zw5aw)3Tocc<9Y33I`VFuz?dkH|4rnT@eZDUDUek8!OVqa@+( zp2$c*r%^sXl@%~nF!^pZ{#qW_>4@LTJqTazm~gqOb~;>*PX3Go>u2g3WooN4zDIF| zoV-^#8^ZvnYqiSnaRzZ$hwA!P<*n)&x^@}1l7_lO#w79>%Frd2^)-vnV7lW&@Ya~) z7v6?(yS%q(^lW;>CWN{87OjwyTQqd-Rqs0-Hp53iJQIR2Au3I$HeVU zTu1N+#=cO-Uh8DnI}@)^`Tb7!b58!4)3wdXUvnnD=j0zb-N1k4bgfmfVi{SWK-so7 zPA_{7pXqmRRoJO6sIq|T2?xH77mo|0c5&B$gS9x)@a_$V>pcgKLSbTYqvGyW_ydaj zRfTseE`)oONKxd^4c`x7;|qpuhS9G!YhCD{qrjK*#TdE*;a4;swX8Gi?ZAGOm-$re zD*YE%*EqEKX6j>+KjsZhYt!L0s~uCZ?{3wr6ZmA|R=3?eWus%CEl&2K<7s}clXW-`Lo%HCcLp$@`vlG6 z>U0^yy(@jI?Dhp1WyG-a#(3MmMP-+({(hBpU`rnUhRuIVW5HqXyz#Tq=cRI=8)e@R zy?qBTjLsLU+vC|2%0Ab`vo+4Km$}%ds(M>IdpYjc2wxSi-E;sM49mXEGjd-W@?w;G zUG#FNupxB$kh0HuT$AGTZjEO*#i>_e$8OxA2v^6SrO{dRPt<&{hO{rkOfi1@tj1)8 zV=KQ!#b-JFYl)KX>s4N(9vOC_qmOg<%+H*Iv%mw%>?Viz@?>1-=ldv$eWG|jNoJQh zeJ>=lZ`5lPJnVA2A4q2H3F@OsY$(BZMKZ2l@qCcPK1}pIn8dzK#Keu(HhVpmSnu$^ z=wQz~_NV?g^s)s;(Shc)*7aUX9?|l)@>R68p5sTCveUB6_B)*CM9=Jr1r9d0Qep6O zR-62sSnp*1w$yjLSl=IKS>G3OJ`UIY;Tr;6eO(<;pDeDe;sC|n0^G^`*#${ziEg`NurUF#XL_pP=d14^<688^+%iN41N6d1nCb0M2g>u@5Sq1%5QO}FEo z>>o$Ed-}_4LgVle?q2j8MZU>F|?sq1_;eR}`J=Y}9 z)_Pj~O6#+{$5rg7#Hnj`a_n z=SE39C-`9$+W=F$!7*(!-C?r^Vf-2KwHuHGkA~xu2JYnUZyY%9@Q$WJ%=%BRvmCb4 zQGRE$m%!8qGG9lLWxf5_dpN?`@LmGlDG`g^N(= zG8FZGm3^jsr_&&+f6m}vPg#JIf;Vv$b1JvdhXODxay{(eTP6SALBy{EbLOP4$$eVwz+ zdgS;fPxzSgU6H|ij5O%J%*&DHF`n=j&Yv@-u^DfooMYVBWspVXyvq|Tdroa-MXMWj zZfD+rG{Y_vM%|*7(~EK_&32yfKId=kQQdw{nx{|>(coF_M3J;rD=OWNR&guY@kE2S zc*19#|J_tK(|9;6FGs7`r+Yk=^8`=WLGlt-98qa-ocmqQW>Put^MrqL{+TIFv~pfR zIYhT@JORE!pDB$!t&ekWM>&)R$GHYL@Bfdbc^2gm4W8!-J2~GGDJQIp4H=ALUyOLs z$NGoyX(za`3;rS(ecOP0E>qA;9w7d~F$49UV{ZhnQCzhO#}&ec8%4fBbbE$7vv4eh z;iv9&;7lalZAJQfq%`FEwQv=8{I+wthYWvF_f;9~Htfzw`gd|dBWI_&v1u4rKZQ8I z%cOrJb6B#@lJv+=_W5N0PYOdHPsP~za2x-3A|uYN=ZSYx`R#9lukDEc+`)Eo;+FRuo@!ifMG2#Z?&25$|C4*}aIiH-S;O{*2s`V; z7j!TU#JxDeUe7Vd5p`~q?lc=7*M82GzP*Evr_N8s-ADiA>irm0al$kxK47*gn2G#e zaoyzPYn@?V9&;n%J;$PcILq~Gw*P*pm(9DAu=DdY%&OSE3#W_4N4xo?L*wfdb~K#S zRVO3xoMtuu>c~L&N@ZW_r&#m8yZN{_?z&55|8l7BJ6Vm8l|5B4K|6@0dTDxN!> znCFSkhdzd5t@wGab>K|K2^v2|mk+uau8Ai;>R?-FzPHoic@?wQ2G9Q7bpKwSwDg_e zOZU_S%%2{L2{8QG+R5EKAwK~(#Ga2ms`!)rD0_a*WBbz{N*g|>Pa4rXnWvx!OndT; zdL0xGg>l#gR3zyNyY&>;LGeZGu;1dnzOKE*x^AiErJd=g8ws!Au7@xg!7)X}`W*Y< zi&~E=3GdRfL3-GFAg^d^D!X|SLs`G2WtBXvKT*9#sq025ZtT&f*#>EU6~lZ1em>~G zH@W*G&fkj|$e8KwMY?;r56SKJn-BBB4O=70p)od%F&{h%AHjxK;Zz@qW80lrhoV2O z&Hp89YlxF<#zlE!qnZARU(vqU< zE(gCkGV;)PIbgd6vZv|o#sS#-!f@{FSFYLYi0EfG_asj8fhr8~5?3{6zdKsvhdn3{ zb40^@fSB@6J|9*)@KdjjV_zvR3w}3bCkjNK6_^)!*H)+O=6iQJ({G4lkE`xykg2NT z>bvjMv3JC=>*4|$Z-dt=Fz@@WY2H_oQ>?dDU@zFa#;le+PK=?0TqmTgVyDj5bZFSe zkacoY+bfqXhokwG<~Wf#NEvUjDJVO!co zc71Np)Z!;t*JzM`cn`%Mh9f*J_~#5`-f^U|EP9IDtR0x@V6?%2vYc4=D2g?ny)A1z zru@X3pxu73Ve9zT{6$*3wIHnDABDah=0_R(cx=;%{OtBE8@|Y~HvWW=(G%FyF1Sjr z)XT=PYuv>(aU?p=$vjx#JzYhN3EXfxgbPn!4h3ckYaO4_V2x6W@1+S#om7&Je|hITRE z?SUL%&SkcBO;YqnGP{tm3%!5l>@xbKANja3;=(<@U^%v8>=bch>jodY3>|oxp#;zmKbYr$!spe>02C+JN+unIT|@G28*X(J#t*sW4?MHXJ^tpGwNjYZ!{Q7 zM@35`>$^P(%V*-O{Ablo^7@G!mi4IV6_BT%F zm|afUs$!hvzY5bZJgHe_U(*&xY_jlwjqj{D{eN?^cbx7)Cm(XUFIV}ss{1yT*W$J@ zgN)?wMEpaeP6EQew4YnRUZHd2w>#J}n&HA{!4Q1Vk&4fEyr}QRka^dVXSjbP9*XHJ zV9&t;IGBxZf+~L8UH_(nh1Tnx{+FHXF{k@^Cx6B1##X|=MphXin^xYp)03 zVJ;%f2%{iRAC*CLL4(wk{?iblMhizDFiT-4HpHxF-k-G2U*O`C72FHqu#ODE` zgLScW%3vaU+4&K=;?J%L2tSdS*63kxCV~j~v(?WQS%NJLz#o6YO3|qJX!|8%*tHn8 zU=$YL8GdRbuHofy3AK7#$M3SPvg2#%{dmcS3feo5nQ%7lAdT#+G~uJ}13s7^*oE!C z3O+8XwxHJ>o-T!LbNr@9Vb>}u!fnd0`V{_};x|+{=C&8fXYaIfXdNH7Y@zcV9(=># z2FG;lw{@rp4muLoDEzy~Y?>h}W9(#w{hA-kegJ`f;PF)|`>TVt%zWfXe96hab*NzY zTNPiA6AV?s*j-K)XzZbR(uqAZ3&Zt`a(9njPug>gX)^rk_)`vs4Y_pKC*chTKH@6r zWka84X!q60x^Tp>{n|D5#~h^o51a0u&rg=hk#uVe{_!ms{V~THiWlRy54ANE>z-kJ z^Y)a{5WdB5?(t``Q&v7R^r;07v+cCLhs9L{ z=>x1bL5@8ZXT+Xfllg?bkNg8G@ZG|(EkwPF^H#3D$g$82?*=PF`d`@AS=z$o`}nM5 zNwFtM-eVNbNB9r;YL-6Ej5dysh8McccHUpo^Cq1o>svW&w8=tqlYW-t+sw&_+hycs zh1yz0ytYKF@Sp&?lJZHFhjimM$s zIRu$ViVHv=K4Hv18}{w2==SYUu@pY`4t&s)pY|xu-#OmKO43l==m%Zwnt1Pycy@RE z*aza-eev2yBZrkS$`!!8!xQqHxX|}r_It*Df5Hc}!+>^Z46mPd&TTBtxsB8M{jliu z+?T%HvVWT*wuY;xi{@>j;VtkyN`ulO}R&oGEBbp6cS26R@2HXn4ZzuX1vNe99OS^+}nlG}uMWorAJ%naHghNCR z$798wt^pZ{^V|^6zKX*kAu4Z#eG?2j74cIslKtGF;)|u<=wEU+(b{IsN|Zkei+8y2 z7K_pj+$&s1JsqjHtTSV*3Hh)?jCP5sSJKsIa4+?>+9XX*?B;AxxA0g`E(2kC4n54% zmN*f-tTXNQZd=zoEYAk7oE}}44`nz9h@b0nH_i^Y?#9_D`%AhF{@k z@3{6}<7Pj)P9fUa&>Hm*+XG`Pu-=aE$#?iO=AHkns=HP87+rNAgC-GL4YzgS@=WQi z^TCol%KUG? z;ZxY%St59UEF(?az!yACn`P7|9qe%jHZUQr&`oL4`si__dz>d<>cBVBXs?N|y|%tN zoqyB!@_4cL;6wg9a`7qnp6PrMII(R3ZoX&vdiowHe&Q1+zjhV54n^+{%AOS~`RDt$6c;8W|^QIch&FYMN6 zM1Fh!$UVJDEaVye*CcjTlJ9+d{UT{B!rPKyh$w%_caP@782w;7pFn%*_I2-avc+CF z4L>?o^M5*Ve}?NVC+l*$fqL8tSN&UO%8e?&N)4MW=)GwBrxLet?-Lx~O2=S`+Hdx= zEcA%7w<+-@PM;#!$@fDZ7)ylbyfwPeeYIC{-(4KK*|ml9jgf6UhHa7M+nCc$vCir4 zhU;00Z^I|mVeG~|S37V)ER9j9OmWWLCe1huAsBv1TkySj?!oTMC-`-g%62S^J87mR zEoH}IC?)F>&~Fj;fLtGu*sy<-#7Y<|NdgHk*7q}o+hjv?@ZwbXZZm9rw~jA1T=g1QZ!q_o>KXvYB%?Nf<>X59EpDh_|!4}BY;6? zt(fIgmV#a5tu;zK9j4?PEUX-vB-~j(VUsZS0%)X2=(5DX#+D zj>}Kbo6qfa7R7jN??2JgKPS2Wj;BpiN_!FI{e2Jn98b?rP5lPL_-7ADrI?-5Qa=M2 zn&x={Q9e5O#5)1rJtVaqyVb5d)I(8TK2&W&f}1n4f5g+ZN2I+3&GYdQCqIXn-yXfs zwU}^v=os%hRJZS#)9wcHvt!j45arJ&?DH=$&vz$y*Wg|4uTQ%j?;57>(~ksKpE&tO zfXh!BeJSdBf42G@5`2<9p2~Z3PU45_Is5yZ#2=C1;ge^5hNr4iu7y8+?Wq&iAjT~V zCtMFOxG;4aD)!PDsrR6^eP^ma;_0n3pF_l^-=@Bg{I{K(`V7EL=cV2X@br0;UqFQ} z%^Q6eO8aY`o09FyLzsP(uVwY-l2e|-;~Oi~TLCUFNTsJ|&R_57Mb38=w{v>_pk(xR zFd_<6e93_>-gv!K-!&{ZhWAI^GmPb zE8kzwdFM6U^ZYf?Ff}^Kx*A{o;`dN&!(P~(&DZrJCN@B7I>!5`;(j@q-R&H^)ysA`6Myiq2jjd5 zH^+~DI+@iZqzomoFB8=MBz9e*3jC{y>buG8?ZiZcKT8}}lgz3;-XD_K29LWwiEa1z z-%VoQd0?d9PjY{m#H*6sS0?itl3m@&yffL|;pGn|Ps7XPGz5Q0#!yzwszA@pwx0bK zwk=_qiizyP=QTobo4L^O<2`}#1uCvVCRXDFUM7w`Epp1m56 zQ_A1PyKiyvwXX5u>V(H0VV!D>?`>?loxU{e!m#y0%*XHKqh7`xIvjK8xPL_-+jyK2 z4R4HX-Oi|ETkMHLb3WtVJ5>zt?nOrU!@RQX9z|;#qK-xA?AB_ozRU4pY41%A)=$%3 zwT{F#2j3vgQ%14H&I97|X#Z_AdzGxs5vXr)b^)f>@P{#D1?Ey-G3HVXo9(;U2T{C^ zyIVQG4YxQOJOZ0z+G{*~%?o!U{)PK7Bm6Jy8f5Do?%N&w2C3$tkBjr{;8I%Y)JlOC0qINJ`qG^;o4Vpvm+3pR{`#p)r zy~mX*k8$G)@{Kkwvh*Q*N7ETBqr5P*+&>ICvEBb`D$nYVT6}&Rf7M(EX-#B=vB_Sn z3vNr7y5LS1yD|>v>-*#G;&;2)kMXlX13O>LZj5ZDiScaX_Zhr)Q*{1KyV^PVrX;r6 zNyF&@cbig|#BNAJ-S!~u6!tar(bvj8PsHP*u(40!Mh+F%>9FtP4n?>vUK<<@>oc2r zf`85XJdHLP(9%aS&+tR<*75`#Wvb_&qB6+ayw}T)rtxiUGu4v~ zE*>U>mVAc2m&Sbt|3aq@o2S!d=3u@zdmeLM&pQuTqbgrJJ^dckA4c&APeJArshg#+K8%-}&^>t}2Jxq_A}k9JU~x zWu4dG^L&%_e6cU&{8#PslJBFC=aiz?b$Ffz@5%ing^jrn>)m{!?PC~y6H|Q;*YV&h zWKLLckb(XTxoVFllh~v68;134{1V^t;Cn)e?|Rrq)pdi1-Qn{5Es^ylc(!`ju7oAH zASiL{7l~|VB3YIzlRS4P@mu5%U+Uwn9ol%SjYsh@u&~c@QQ3DW@jJzPIeg;vPTb?g zzKHWY3~&9%I2<%%?i64;n*BI+b^LdDsydj4ZQma5`2r6w9jV@cvYtE2a}RDleCpT>Rk_e?Im;vx>dDF!i!k?5Z$08uCw99 zu-ne@tY5{N&e?*ZUtjF`2U1^|r#^rjKgjdkxEjNXWob78xo-J{U3j{CIqpZm4f82m2FcuB9F#D zdagp$Er0wT$=fgS-h(zhdWq-KRqW+UT;E^9-n+#6&r8^Kt336qc;_n5^M^0xd(-o!tMR;=^KF1{1AYovgLK~l z()&Bsa4nxF*Kl9^T6}U>3qxJ*9^!m3 zGO=G}A zlGpRZM*2o*cHmv@wYV7z?;Da4kMd({1p#?DwTx>uqhfQNCO!*(MwB4JgOklduhM z4(kge@1G0hdhBT)aZWW(5qklwG!lI=miD+>{n}{x%QTb2cI~(Jf#un-Q!&;BQtxzJ z<7lQY6en(s$3W#H2rJojvws}T2e-CiPvhw{%h2wPlEc>g#4~*ISm$8&z189BjKgJ_ zu6yEGm4f94e48M7a~zgP5;w)M<~Z85X8QJtQO=&$*NFcM)V?eFZI>O_m%~=uW_>owkFlnSaZq^e2)gPh?5$a1?5#14k)r4g*f`s{4d89{OjNwJ z>}a;rs{3txnqmH#L5FB{m2A6dF2t*j@nVSydzw?UJ9K~Qvr%p|IN39MGVt zH|;;v{2cmbg;(8|jZR@~f7j9ckci(mOqa=im~4M#yrn-e-#%qZ2JT2r{|_!$SN>hJggp~y;0I7-pW<1xZFiE%|u62Ux)Lu`Y$6rOTIs3DLf7^ z^4kMH%ExX&-`?Ul1a}ua?Z91wMp^^LSYt?Hh<}V1BheFu4=!|{-5F4$F29L7_kiyl zGE4^Gr{b2GFBRHYezoewA*Tk_-J$Y!b$WR8i2h0UtV=KOG5SWq6#G3OW83(?*hsgH zV+H7Wha17|j=i*KGTlID9KUv?A$YZ-@rK-wa@de3*>9Kaq8wKa8|e&a_^)tGYb1H z=#!cr?4h_1AC#u-O#35-jVtz~jaC~Qt*>O7Thm0-i$4`_(A{qSc~5ah9tO1Y1&nt; z7w)NEwB#RSZ?g}p+jM1dA~x{c&rb#)M4yNCVFwSxFL4L{>5u2ntsV-sN6082$)4*zY;*;2K^0U*( z{(_)$jCT1@p1DjZeT;OYa3~8?pN_;qh3$5XOh2DkBTdBBdaWb$%}?n^AGUR2K9(nH zcX<8#_~WP5L0|t3x9#Wjbqrc3F&v#PO?(#DN(1;9C!j7hO5&5alauO#0~G7%J3V8iJH!=QXV+0gTnP6@}i z?9;Hjw<{c1T8G1!IAFJjCmc80SUQGp3*S331`+Y>_N&{{!Rn96{+%2)Xkm?S9g|tt zHm!8BzK`Zh*!WAf<1xE2nw@X3r?_bSW0&4$U#w{!#p+LqzOlU%$7XL>R9><3ne6Bl ztu3M+cHas{{R5bnctV?Fmifx)f9v@G18+b%&7SzFM!KI1%wOu#ESp9VG5|)Qe+cDPSe7KX7?&b78fPI&=!8>N$7Q}7g-fi^JENn#o zDRHf1h!Ms%J{$+ew=tCDT?%Vf^2tuv&+&p8fX}8FW;yRp7b5Z z70ezilYhpuwDM&69)Tta(>%}MD)LUPqE;G22V7 z$R0}eA^buzMpx`^AB8)7KO)?oav{Q@F|Losv8Ts8ONp-<_dl4j8MpU8#<9PTn?}td z{O&-GomcIGR!0o1I>S8=W^IJOYm&#MVRZ*DKd?T;6fJlRoghJHAE z6RE3QUWBi8k%Ow`WxIYL>To2(U=}~$L->xS;(Nr!x|Dk4{$`vPXLnzVPkaDdLgT%S zv}@3dZq6h)nOXQ zKE1qduqREMcgs4$ussp7&X2a1X5=N!Z-&dU+GC-U z?z7QJ#=U+OcJJhRh&=4hXJGzz*g1%(zHYR=1~zL)!)%XSAA=WZz0C+?&r_HN(fZ7w zn*n8i^S>J&w!UJzi^Hg&wJ)ta7cHJOoxBIfNF&RPfis{ry-XV;PBbX{A9C0lU*=uw zxY8Qe`YiK;^*e7*hkx%h>UZKtyBCcva5C$ePRO{e4-yqG?|+cPG9Sue`AoVTw$j^Zlboj0Tcr4!O=fQHJktG}@Sc2`@Af1t^SY4z zeQ5ukxsDMXB$aQPf3lN%IX@9jp}Y;c888}u*!cl5{ATzBrZZHgzKcfNSZVC$d1A$v zc~8~_R=JK=mlSnfijwe!ab^tdF|944J&Q0$Q?Jd@2s+$uC)2UsiLxhIeUE5(k=KS8 z<=DOx`Av;d&MrZ*xE1us*W$2cyjEz*hWw>T6e~m0lw~8+5k9k!-2m{H<)q#=6#xE$}et z0Nj}*_DI{|Ec>Z!$52My?DTRpzOuGEx($%+fjnm#2}jD0#FcH0@jfwLO;qHY8(=@} zaL13UI3D}jj>f*W!>}LjSJ)3X6^D!_;e6rvo;cj0mi&r!{xEE3?8=SCPs3>tX;ZW` zLPy$;d8~b9-Gd_czuZ^CcbH`L9SpkJ@v-qvn&&jeZT7yOzCM;_w?1ZPd*ytsc5tL; zqi$9x_l+Fh6W%lO+LO3)9K$y2cTq<8GaBBW7LjzK|84KHlFN-IcXFI)VNr%{KSoQl zCwPP3GlcIdr;+I)hwbQL%_qt{lF6@(MvsyDH5M(zyA?6~729{R9O`2{jUwDS#?$9} zz&X%U)^}D}m-E?^u$|sB``Zzo6aKWH{AoFC(9VEze;PO|w6oRLI6w7S)@A=Mg$1qC zB)V(omG%TL^Ozjppslz^b)0+_*$yY?W2B7+<+yU#8ee`Vhh?3-M`5S-odTIA|Gx@H z=1_DQw?5nThaFC=mmA-GGQO`8^;x#9dlDYW-dg<(>vJp}YUPdp_Oqzlp>{f4=FL3` z|8MIqc%2O^E#TA;~Z%DP+*8*P+v|C_MYt~oh#E}?lX zz!?&xH72{C5#M;{iD%l)x_NOyHOJZQ=#}zFjAM!XFQoDE96_2J5@i@^QxjM!f0;NT zFCpm8adpS_I{O`i!^$<%#VIUqh9iULS?ZP$#}ek_9-=&FP|0z0^8{5*cm*d>4ZkN^ z`mt`DzlmeMN|hyIZZqy(DeriN#VQFrRm?RqI!47_p1HMplDyc zsGCtHrKPVM8)@SlEbegB(XBG~3^l`6##eIDE7UC z^8-a1I&la#;z)J+YQNRWPw+h%J;F|(|EZ~rU zt_6Dj=>ld5c&dQK0z z*d<_(fPWM4TLG~up%pPfz(WK)LBLZ5Tqa<-fHeZP3fLuJpMW0<_`QG$XXxdm33#M{ za|O&5ut>m51iVJTdI295uvfqj1^iyXV}Cg8UMjy+q?-!I^C0-h}3IRX|7c!_{F3b0e>gp1p=-W@J0bQ3HYdh+XUPx z;DCT%2E-M%;0XerEnu;L z7Ylf!fDHmZD&S552L&7w(6Lz0f3$$p1Uyy1B?1-;SSjFT0^TTKy?|Q<>=p0>0lyb; zY@S};Gy!J_IA6f?1S}G8y?{3hXz0Is@!TokqXNEYiMPx0{FUX|ldsojf`CT;e#`SL z@jPF^0s;RZ;93E%5%3NHTLs)I;KKqwFW?RVcM14~fNY6guVexD67V1aj}-6(0kZ|1 zFW}h%E)%d+K%;$^i05krthc=HvOGT{p8qD`Hv+~j)$2J$z~cm*E8r3Vg92V9;9UZ4 z7SO2IGvfI*0pAsH(1^E8FE2&F{RPYr@P7o%7I40R=Lz^b0m}uvSis8!yhgxU0Yd_| z3b<9kM+NK=@D%}f3iyG5g93glpwZ4>{1Lq$fAL3jI{e~~=ydqSAJOUXi$9{%;TL~I zw-~?pBRW4A_VX8iM5o8U%OAlh`ce7cprWfyhu+zvowHw&kPh5ol;zKVX=;6vjR&?FAA2Q zSXdO$a++Oi`&?L3JgcxQe@PK82xPN=Uy)xlt7K(#Y8VkdDNsH) zP`skNAo7fmj+!6%eMMnuKx-f3Eh-C?o|?Z>uM3{fEG%ADa$(u@rAtdHipx!9O5_PF zttc%lzi3vVY-wp>u)G8(vl-Lhmj@PHR8}5XxuBq;961%wuB2w#zti57odJ?BTVR*v z9Pv)?jX7mjTFxygIlm$(>Kbl^35#}9DLO8vwD1DZeMP_$H;hMBDl}3|U$*Rwz*00U zuxxha(m=2r{gIttysRidO`VxvyfjcWNBacG%%YOAfc}c!l&lQqmj-lZIjwYAVR628 zSbb(m@FMDRof^gy)lBD-S?Cff?jk}7-0TYi#pTj7rJt7{41x`(M`B6X6H7~0P7emn z?;>Sn=a(*zM!zQqLWR4iW}C@s@+C7eNIh?MDFN$JY`@_8VC{tCT^PAm-s>}w6lodI4e zy=dV@qBns7GpRfpl`5DP@G z5sF)JT11KoC3ikGYe6u7sgMqV)i864mupmj_-QnycM#%$(M&ws6NK`X-kgzNT1Y%c zna~@s!%Q?d(iFl{--KCB=XrsZsxjlDFpC*!Y~IesH;}ZFD9;73C>lcKCRoaNLXR17 zp)GRq%L_;@jdDbd!CEUXgl3_Ji`W%K;m8JU=H{2K2;}6i2+S)iE?ilGj}=iJ=jNA{ z&n_+1wKP4$;1wBstv#=R>=bE)l_bIPM&noDz$g_(ny7}gXc()LM$=9foKeG5^UKkF zx@ZyI^ctQ9Gg}1J7FaevP*zbyGLH15mLbyUq~%0KC`hmY6&mgv+ZcjkmUo(^Hfllr z4i#St*+NlzS(>8D4&-b4Q!8D=ggJFVd46emMUW~@4MYqHBg$M*zRbiOdOJ;mMCmle zLYy%(e`$fn9-G?Cs6*&4xQO7e%iYitHB%T*-*YO7X8tH{UVIl!Lsi(bLD({=MM_tuv+)@P%Vv~lrcDzmQ6+@WC$j4GhQ&UkFmT~% z%L#?Frf11w>tc1p;hGK6sApivh7e+2$pxC&=?2Gm(%w`Q%__VAQP?~PPvMM<%3;3F zEL;|tS&&cu%4rqlQ2SatbotiuKfNMQdQncGRMW7anbyske`9@vhW)-GP`vaa*mD0+&dr!Fs=nI9~#C`IYT=p2{iMH-I3bfrud4zn2NBDpj}cF2JTUvx^G~YCFU?1m#3^{QsJK9LIwMXfN=1SC zTazQDs@bV;6u`p1& z5Ox`5o+sR%h{M0sLqK zk6a9KSy&R5A;OYRCb7HrOk^|OQCOq2_9m*$DJm;3UAi);)r`VL0o|WDwfwYTpjc$c zPA!+E>C|$$H1PhZWO1Mn7naN_DKiZE%#wv51N5b!{eohMS_{e?m1U#~ z=9XL-DAnpfPm5r0^(UmDaiB1?W{Ev>!StC$f&AhM%`W08>}oGSKVra0lvpqwS;%Y+ z%>2MoQb`Cc2xy{8p>PrnuUk~AUH(!UWKn2|kn5#1t}4^w1G}`OxETG1&~n&`e3k98B-YX*=fawo5AsXKD;{d45?wvVaDkki9JwcjUZq- zrNt}QM6Qp9W`YyROA~Go`wfR$43t{YY?6Ym2wQE&E>9x; zmkGVISl4?{bo1Hb#pp+x`+##>#unhY5LP}=d;wcX;gThbm%~sn_FFs^fl)5d-h-#` zjNVxczjAT8<~A?YF%{r-jI0U*rO3aOEzV!Ma#>L^y9l9`Wh)j3FgU=+VA$fNdgv{- zc=<|gbkvVfkh}oA--m0(pbJ*AgB*)XinYj>DfvrEO3T?T3c3o44j=th^jscLkQCNp zIld!EJdB$`l;szadckMqm6am)Ze?X)B@_ji&Pkyl>>j5OnNsGUkY2j8tZ;=kw{V10 zS0^~jLZMv6IVv^Wq76^sSG1hrFe!0(sH>9&;RM)g=L2? zHp&m7JmUwUJ9uT;!ElBTUW&=egUc=|URrQ)(P0N4esG2%i(3(Yi8jd$1+)@Ym556+j{{4B` z8b1A1{r%t$`*^mAe?k62fnO-_e@lUW5A&b~ea-kc=wW#PzEFC|AIb|=g+ih3P=AQk zrPulEGU_txvg)$ya_VyH^6Coef_0U3Rdv;MHFdRhp}Lm3&bqF;?z*13-nzcJ{ z!MdS3R`06!)u+{`*Jok>J!47Ck3$5Np@C2?Qnes{uNKpY<*(1E&qUnXdbXipL+ysp zhM^7qhKz>HhR%kbhOEZU#=*v+M%Gl>)Ya76G|)8IG}Khx+|}%B@wa5RF?VC$#)6H(jg=d#Hdb$}+1RqNb7RlO-i>`5`!^139Najxk+r&7 z(_8(mS*_WvIjy;^d94Ml!Pd&ws@B@pP-|CfcWX~;Z);y`f9pW&VCzsTYjd^v+S1z6 z+x%@AZJBLZZP{%(ZMkiEZ3S&rZPjfxZMAKowyw7Bww|`$w!XH(wxKq*sb*96rru3C z?cMGD?Y_-foAWkTZf@D!wYhh5-{$_!1DgjoyE=RwX&vbu)B#CsD?n|iGt`A1$N`;e z>N4xI>$~cE>j&zyHq>nB+~5LLdK+AgX^s9yqD)U?KWLNQl+l#cl+zS!s%olf>TYs1 zr!`kK*EV;8O5M#lEnO|W8g+siEz(;v(b`J1E;n4~+)dS+YB#ystJ=HTd)oWjhuU46 z(>7;r&fc7hI#+M5MXh^K>zs~)j!;KuM|Vem$6yCbPhwf+>qAnZ_aAYY0hh| zX%3WUFgdU^kNQrFo@m@wRNKJdeLuelW$Y{ri@KF zoANdVH&vkzJGEZy-!!<%*Ph;<(Vo?w(;ft+YT85Xo$bBo+rf6W*|#|ZJ)DC+4uV?L z%S5js^l(~-zaz6F7nG~)sP3rk=<4X{=<68h80ugdN$g_KPp4jXC>PYLGSP1c6ikN{ zW`Txz8b^d6bKM#p8Kf*7{Gn5_TBBr7eIIzmwIOYTe?#Vm>dvEyw(e8B!2TZXEx_H7c^HkSA+AqntPi2ng^PPn$sYq znVOtdwbW>`+6`$PXc^M_j(RRv>pSYXE=Xw~q|?=!2HDJnToRvB&vii_^`7%V2KAmR zXsd+e)wZ>0J=d@G9raw6)_0W}N4IS1f&^0Ev38&6yFBzBcs47E-2vJYm$EvapmG89 zTeYU8dc!pKLp$kIt`_{-0~!wrDraxVh1ROvP`#lgOk-C=T7w^wnk`Ydr=hQ5pkWBI zYe(UJ=s4EoYf6_WT-($Fjn~uE2aU&?ea-338O_;Y8tc;0-#pmtYB6YBAmpPZEFVlr z2hq4@V+eYXq$4(k)1c!rq2F?$*$m0hsq2Ge=+q_2sNF==?b+0~X$YDlt=-?A*`C{8 z&|cYI-ChgH=oYf!f+q26x+J){YIDuz(B@7}HU>25Nbkt#$m+=H$b(kt>F9-Ipl@=L zFt}%|AXE!oI2g)3A!Cx8B3kBe;&en9TrFuJi+o+w?%8X4Rw60U*oHR(iAM#!ei63lFhm>bS z&T}E@1(5Yhw5b}csztk6&@x@S529_X!_e-2v@sK{%tkwN(b9sBDrkaGM+@5A1zoDQ zyB|7XkhB70c}c7afQ4KkA9O-BG-_98dy~lqa}o_=Jb{vXk6WTWI|FaH5ztnR7`_});D#8DxUC5rhz!jMq z*LQ;F`_VQZxFQQ}3xd;$D{8>igPTdy2gx>ul2{Ge2d@f!O9bvrb$(SW^XiG)0xC}pgtL}(gmq zj154-a-iGDYB2ObE^I+BECEC9vYYZW8_?3!508vN|C4T_de$_zz;5@UN3w*iX6Osj z^LfxgRhoSs*q9E#i>z`6>f8wmlfRUvX_w%pN>I5Inxzj^X6-KMZK88GxF=WhL^?O8 zLyihSW!9aiOI%gz&8n^ja9I5)K1;M8q|E0T+KV_ zYU$BD(LwZ2nr7L^_w0qdFj%w#$V(S|N*63xHM}fpQ4O?4H#`OM1=FD=sAW~?HPVLt zqzihJST}%6Ya#VpZ-{y<2hvi77N&!*S|HOy@DQueQyH*1wVEaOfv>6?Yr$1LnwRKn z@(at|gI>#krxn!tiorey(N`h(iG$#(9Q0HrtVJiRaX)N@PxF(jA?JQ*|6I)<>Vrjf zK`)Xmt%e`e1zkS?FDMOOPz!w9H26AQx-RS2`OY88f`3!1^^gxfVHQRKKFxp0K?^F; zJJt0y8rPBRXF;=vzl31_AS#hx#*J`=<9A+D0IeP5?c#Eni*px)W1se49F^xW=)6g8f@rk z_GvnZ^iMTxFX^2D@Ie~tsB^!eJqKIK=4Qd-2I0|!FpgmGLUW-ptV<5GN{`n6#MiaZ;w|WX7koI(mp|92Wnu&3|r7`Gcx>l@)D~`W?g7|4YYO$7V5uM=REXP6|7p#9`SvaX1Q}Q z<{|4{xrr*A%+lb4`C*?kA-mbI8@U+Y6~G^D}P}-mqUY1P$+kj!%OW`XPsz zkcw>R`&^8L3NRX~)V!Wr`0Cy88Z%8^SrFV>1=*^B{tZR*&O*uBC$V(jEKQp=v8PZb zYADyts2AB(y%sgvY)1>c9KANWA2tB1Gz7ckf@Mm>SWTY`$$}=#X~>0#R?rZHPOO6W zPy+&$N3qmtg!8X*u zI)va+bvAZsR-zXpy?$8uL1+!uTer>uFC<}Rbf0K zdsf-7EtT-NTVVMIFdIQ0RyBO=uFXD-r?X%sTcC}>r=7{{MSyH@X8|~~TCy-bn2RFI z-(UZ8sOST|2H7_CmQwj!~W->4g;t|Cp?!7$PDa3e=>U*<@%sAg3t|}@W=*W7qT^9 zrBj>#8G_XxtWVc`Fn!!yt9fCW;OC zZLHg?dBXmU8So|x;Kl3Ou3MYE8`S3Q^5Dbwg3Hn{rmKZD^<#ueT*WYBlMdPiQGdT? z)04G%P{TLwffh@HpHcwNxCegL0DQ@8XrTgVplb9?w>Ad#LB~`>iaR&tq4wm_)@UQ5 zp;kZUmWWDen04recf``YTHg*e>0@|(hO56h1GX##`{jq%RSORxU7N3>mUN;O{b)lD zym}gm_ds4i+$^s)cUuYRWg)NT15|0Yyc-|XDnnwf zs~=uB`5EcjoCynJO%~a^G>w*}>3cl>^7sEJ1)QQ?oTW1bcHZuf{68OlS{yCHq4=M^ z$$>pQ*vG?N+B@w9{y9Y848V*L;^2$DENg@~w0PhfAHOjItqQiWoqLS%L+;?#@~hd!y@Jwlvz#OWL%&Xbf6 zI*cffApTwjcuK=iy$>l`94KCPA=??oP@K0BXE2-!amr}7;8)=|dMfa;vGVJTSZ}1iozG-{}@vodiWF-A&#P-RsYa?`org~SUO;=I1VU`EQ1W+&PCMWVy{8T-jZjtBkmX36gg7e;9)5^Y>3@gdWwkA@ z#%p|O)VT=J^*Yxev>$%Ixx4r@y^UGRai;T-j10VX-JzKxW1A22~tXS~4Q_+*^)GsT$(Ochu(QlE2y37IhW0n=&1yaCKwQ$8O9 zV=gNfEihAK7ci0DF}OEt5|vKe8-%c*j?mxs-FqxyBHX(l$e^{0pCj7*-g#@+5RV~_ z;9guru5pvXGZ8{j?Cn3jq@_X}p*N_%D3!vA1CGFNpkef!Se#i5`sp=H7rgoqFquYu zkOMyd4NSk*3L_3(!j_&cQ*|{k879mYU~){Deqe$Eqxbu$6!eZM&J18eCQKPH-6l)} zF#RSBaZAut=N**KWVwdKKMkfh&Q#QJiX0~sm?{%yB{2Oa%m!fkO!?doOvZk4J|6=! z8XXbg)!o2!o8qj(Fe7KGoQgxy2ThoH!1S9i*8x+rzntn-U_vI$l(En@2gq^$1WeE` zW8Ma)%7mFd4mq1JEx>e|FkUF>UK6Gam_ZZfbzpo4%4N-j*3K|tI)KSBVJ1#M4NaKK zfvGWJz8n^3@kDEX)dCagQ$q$jwR}h}PD1U97-Rd-Jn&i$7?Hs$qrdo5c!39Y?{y__ z6O71UCv*aFuEKlq9}n#JUq1E%^>Rc8dqir5w*Y$(ey8mm_mPXDFnjCJi#qEyH00|q zd!rRd8qr#(>;wK07^(qd9l&J$N{^#sJ_V*%V5n{=9a8I?Cg*cCFd-A>3t$FKm^0In z^TBeehk?m4VJ1ViLIR_gej6~sL*-QIkeg{B4$()Ca|AHyN6T?YV;7m?Jcu~H6XZA~ zaowgkzu6aA;@g=K`jEtZZ;JCY;+V@i1@aeZm%$rs2IWJ2nh8lNKyMD* z&bcy%c#OOd6*=f-eU3QYrc_5mCVI2wRGWaQF=0qbI!zez0W#y|oG(V4aueoSV5)ND zobQB8_)eEGJAuhFVJ02|X__y`xfqy16Xp|&vp|ls46+q8VRi!Jg99Crf`u7qg$eT- zF#U_uUM$d2$^ zT<9HLE_(1DE)eTl)p;x!3x9_9o?+C7(^?Dl<(xbJJceLIc8ZV*rBXPQgXaI7zr6BJ zbO-+I_3DGDvtC0(Qa%JG{XD&;I=7IwGuJ3x%j>sCfQDzw)F97%lPM0#mlG|HaNSi% z)hlw=`I+QvFH@W!D9&OzXOgeXa2$iGy?GReT3YGBj6OmuR}799R28GhY$Fv9;ssIR zt*y^H1XTs)d&86;L>y$rzJ9~sZKi5Vn5tXx9<0hMg56?t+i?gysd zg!up%9Iui%iYQiK)EO@^;y4QYY>Gn^TWgAQBI2+may~?{O{O>(B2L~?IZi7uRVK_= zz=TYgsjxzwCQLOjy(Y}3zzmu&#8Xp&`e=^?dfzzmu&la52_1#+BwfT<~zF|+Z}>%8B|m>YoU zHevRMkoB7|*8@{zYDFV3okem!W1s?R!*L9L&RI!uh@bls^%2nBJ1;(xFcA&VWu)Td zKM_CQID6iwW`6DlTN1V4SwX}|+dNcy`*xygL`$55B$P_wyYL_6VK2N~z9kkv`;n1e zLqkiP1x&YAX9Keu7+VdZkF*MUic z!i!MsLtwg1ajIvbh9=CPW}`kPOzDXzy+Y2p=Oj?xgxO~fr1AnePQ}TPxC>>>i>IK5 z7s;5T=31%oCt%DJdm5MsRSjv%(DES;{|qfecdBanU*u>Q>gC;#D;RUOBf0%fGq=>B^Qqqzz7zk6hhKZ><;7-h=|WjLw_J?( zFjVaHSvwCfbIZawgIkL59?Z$^`PCn?V{uD2+NIaf;FgomL7#?Ofh^b#!fcYML0r z(h{s)#*mgsH(^Li)R-_N@4n4)Dw6k%FvgJX91TN#F&o8D?Mn`0yG4JAwWJJSL2AU& z^$mjbr2V(|%n!{+OGR0FniGJ@Ght2vCTPN(4NR2@Qw&T^7-Q5qq+zH&XK=<6QIDrC z`Y|3s{2Al8BBL)j#8~@_Tb}a0;4v{r-5us1C{H#SzbR9yONa*Ge%sZPD^MT3bc267 zfawm`kW%&m({IA4OMvds`$DJ2G+@$Am@|OMGGQ(SCeMV~1Wc6)^BOQA6J|Fs-6qUI zOHm&a=5)fCYFG)3xfOQ}i}R8RWAp{5HereL=RH-X(77 zw#;W9>D4((;mAKBJ0p= z)JIEs@G{U4g+}Haih%KLkumoIQ)9v?0mQjSj&nLNH73l>6z5(!&RZ16gxP;N;%t@U zlmJs>!aP86?vvyEKygf%6IUS4{YD(4cWN{Y_0IdC-87=pnZN%=^p04H1TmNcKlAD> zVbFs@17so`ho8dJ@!$AUw1DBo4VZe6r1Ji)mzO#9IAX5ggi(g(Ukf~yF>dO|uc&$) zA(j2%UOoYMWXi67{$F=e>Ct-mDzsg1X}Zu#uK^Ph)DX2SfHeKtpbzDB88DqD%m=`v zKP1PQTZnv27#cTK8?B&h*lNV7dPGh|vw&MoasGxl>5s~Bl70sbX~O&#m^>5a9$KI^)!b*(jPX0MsCb$TL6k-11pB#C&-*_q#u#1pnoJ)U6)KeI9f=_;)r zK%$@9%-hHq$s`c(7Mm%{1LiEroR6fww3+_ygX&jS79bvxACaU;O`aJizP7CfA%U${ zmLR)j>+2BzHk&ztghiT-W}k|TL82mWA~BIeNL-}JeY|o~-p+hmB(U9XeG-xq`4Dk- z*i5N0%!Wt@q?1(ci-eQ5)$7PC$!u^lyKJW9{XAQcOcf;jo6Q7~h{*FuROCCvTfvTW z9}@cA)@eAFJt%S~k`h^hIDgny2M~`)vj^Cg$XFyGvIglR{n?Df_u0xN!px6kDkG8o zHq#A>icCR1kXG{$-yz%TSLB#vjv?V=HgnZDt~JlHGu96Aov@kdNK#}w;&F2Lzsy;^ z)`L_Q8H_}w@>n-h#J1XqY?91Yw^g3aRD6gT6X}e2i`vX=#4qwS5*8^xp2{L!kU%k8 zX9nWo`A^}vwj&9V8V|E~irY+Y#9zY7Ld3nzwy@5hNKB;OBlPfWJM-5f-mam3aMGq*7?=VRJED9kMfrq$y|d3y*4uvnJSqHNc=pTS%V}*jw9Y0Hgoj^ z=2>Jsk`md3_-oo$#U68)VxdriDU}Yu}6Zr~>i&TD`eZi}2g)`O;@rX=B z{34r?kVus$7?(&-Bq{O&k`nm=3D>b(zi=X-7;{c$e`T)XVi&s^_sVKT6<$B%zfL=E zX__R*T4)lQ_3r zVp~0r_(k$2vob~8SJlD=;*O0yLnbPjJxEfdZ-iVcyDj%BE}ogg{5oHdNysRgKSiCU zw$&T1Nap;f>9fyfUP7WGXHH=Qm)cA}BwXLhYB$5*%nDbgXDXS?t@K6$4XwO}#6(UY zNs+)atZ;U2VdXhUK;$qI5@|M#QHV@IJdJIgpOCPKd+))hN}2WSPV2?bGS5wHEB6X* znPj45{LO4;58`cMrGa}G++gJ)BzdEiFOa(D+O7YL1X^b@nd2*zFYa+sr97V=OyTC+ z?`f;YSIbPDoFn|A1ewJZNB7p_%XfC>_!_|P-S#(pwmPE6*Rj%><15bZef%?TMa?z; zb$l(F!M-@zXBs%Qp5sg+@(SW_lNpzrxnU-&SL8t?e3Q+rMdBhgX3U zKR3R}I_zmP?tMf)$!sQ5IP;lx80qD-<}!Rf)Nr`TN;c?%gAK zRqf1ACKKszGw$6ZKFL&gnH~$-QP{BQ|fwmUlcx4PvCs$&O~nh{ZZ^hXXp3D?knm> zPCioCX63o9a&zMR+dY#!(SFqZ|Fs9tnNKdihnYPXM7*KQC@A49Mj|47&IflI*i3^3 zw7S#EI3y{u14-RwGc6agmw6*b;jyy}@rigBaefw=h=fFrAQ6#9uW+P{w3Wvr!Mm+& zM&cr8EM^q<*o=EDSFC1NR7W>+ugyGzL`C?t7AGm<{?*7g+P3PAczIJ=dhD6i63Q2M z56(W5=Yq`s54&^SHw5sLSuI^N{mHqCU$`q_Qesn7S4)(`H@#X~^8YH5srF6Xdze`*dy&Y=QMfIuEMYc879ueb_Z7TEfuxV_ zGhSmakIBr2TW25=7Wop1inNVU=YHF2BjO)x<;>UF?;?GXn27rbvN$uV?#7*W-Bw{+ zr|cWF8fWEpB=w+`rHJPtEBg_@Nd2YEp~xsCDzXAeh#WvX<89>z%UDrfyE1P;f{)nD z3ODnpl^V;L=LuG(AR&?573@=y5lHMY+v-Oo@wk;+-()tPu<|*gBdxeHd+QSs-MaHu zcIHk*GrLa7+_ow^lSBeCiY}|OGoKGZo2$DYD1Dp_euy>wl-Qfy7 z-j8twk$!Y2PLXTLtp4%*&;RRqe~dn-dzd-iKSO-^ea^@^?=a6Iy^)Z}D@a)6AQBa6 z9(TAG!mgjmh+pJ8Bs|$>8mwbwMyx!7I8Rym3h{|lUr!H3?n0s>A0R1_3h&aNr)}k7 zh{NAb3Ln2da5EwmH}HDPdGECkNg)J+&RJh|AkkTelqFvMx0DJ zelwy+vu;JxnS#Fy=bf23Z$$8#{BuRSHm(2byzwY~PWLc#mT2%fXNlSARp)LmeFxz5 zOb_!VLMB*{DUvU{kdVktUvQj?xYzT0rOtFW^P=6>Z-{rXUGp8ba87v1%4{Sc;{NTg za&>#;=6y+Ku5IN$&ut-@0c2wHZRQIkvA{~JuQ+lST3L$37g?$FHAn6%R>mWajN%W( zCvx*vj$DydNI<0Ow(QE&5v^SIo9s*&(aax+j-vl|D<{`#{?^^KdWc2Ca&@|2@yQaF z8$X$A+Nqg2%xRJD{A*-Q_wE1uoP4daMrN&6q_Nxn?VBH~t7~=Y$+g;&-V zww~Ny1B&JU!l|_G^gP{P-kO>H6}X6ZKQQ3#<+^9xtH0yq{&L^-(VNWN;S(1A*Zx{e zpMo;dLx^{|ou9rtndcQ&K1YIYT50nmnUz*Hxbl{j=DRp5MdGfkvY88iVzsQc5<#4| ztsHPOBAtIm*4oT!Brf9ph4Y5ULr7BOCnP0u({3{F*vd;0-#RPj{mP83xAG(sde_Qd zZf1j(oA)3at*k>l?^(I%H|F_$D^DSw53C$?TvdK%WjPZ1+)9lUd*=%)labgKD@PHBsp7f2+-0@fZEsX5|GW{Ed}T`{~biD82TF2;*$OObMa=^{}C6)iB z&-<->jD!wYX?UDIAGERni5;?1@dSN7V&xGeCGr>I|J!DIGBdt^th|SWk6EdkljDT` zwGu(%$E_ShVkfM0MXS&sJ_4<9p6@~eH(A+*_}g0PSe5>?v$7ru^U_&ioqE;i zPkSq~k$49yrM&c~la#9-?BXUhm&3CxzoyeBzl*XhL_Nv5msJ9k|V9usz-nBu`(O+ zjCadza}ZzHN~O!_&p0a)B=n$_ zzunA3R&Hy6jJL80@jPs$!R3tN5i7G0&!bj~G(;v?xdVxdeC5hxHq+t?X5(=yF~pf@ z<*Y``hRA5dKgnjkLwu91_#3l&BUY9pp{K0WzLNetZDleNnquXED^sm>Yr>2@V`Ysi z)2vj#ivEa9K>Q+mk$_0Mrp$&s)7*^cGuC!jbB>bCCx|{{ZFLQExX)fgu0r&xyN;he zOJ+KvSKURMW%nnHXn+1ev_B)R&F;@$MEldZd3Jx|i1w#;i|qbPMzqdxM8|c*$?nhRh>oktP1$wkB3h?Z+w3~S5gpeKM8|bQyX z5YajnI%n5;0MRi1ue-x9mDw5be*^-LvZ~L9|ZQ zTe9m+M6}LPMEf(WM|Pc`5FJ;yp4oLaAzG)=t=Vzq*bX=wSXV)2yXq~SR?N8GI*>&b3+Mf~wv+LY}Xq|5m?avK^vg^EoXn!gX&aU$~ zqIHfS+Mhl{vg>R{v_IG0kzHpwqIGHw&8{;I(K^g5DI&DSv_BW!m0f2tqIC`;+MioSWY>8I(f(8)nfzSRTBq{8*>%E**7*_9{@gM;yUrJg_UFd? zvg@oxw9ffsvg=Glw9Y<6`*ZXC*>zSUIk?N7G{vg>?=Xnz`qv+K-9 zw9c91vg_Q3Xq_Js?N6%*v+KN#=(v0jW!HHT(K=_2&t8XNMAzY;h_1sP4`;8#4-g&K z6^~^1XC9*CD)(r1e;z=z&Toj0tILG!I_nS}SDnYQ$Mq7T3(;|vc{00>dvBE1Ng+C}UX!xxY(lg@jVEW?lakS#vxkg7exEh zdRlg!C5ZN?{Il70Mk8A1J4E}_Y^yTb2uOnLL z+tD&P zvjWjNH5X^sc?!`wIj?5d8IEY3?-3nWnL0RpAhX& zhu5>~tVMKO7r&8RXBMJ$N-WK;GZN7{yAbV9$7R`d;)sr`?(*#8eF~z-``?Hj@4Z%J zAMfuX+Mmnc%8{>IVwi|oIHe2VDbK^kt!KHldbdOj@kW%ltt3UQBB`cQDE$`6Q+ zEAUnJxZXi@Ty?+B9@lh4>zqJzp8IXhuJbXX`>Woz>^f5st#cI7{`B}JyUtof`_o{1 zcAZ6t)~UK9yUtUHo>z||I?uho&7SA?5uN9{-?1&(%g-RX-;X2u_piR++x>p>&e;4q z?wzs28u3}U4D{S-1A6iQ_{rSK?7y(!j`5rc-1K_}zq#vh&8$0PL+vtm#>Tj1wl0~s zM-<8W4w2xwnY-@&+}h;cc^?>k)13dhGxlTp9F&pzlKh=fWF`_7Dfa_&_^kc=;A4n? zx|M&Bph(-D{N-_m&A6YvHX<{2dds`m$;6(s8TXF*>5|z`CNmh_#~zFn-bMK&`WiHLlKBt#nj#MWQ2tsX`quUR>Pcw<)Fcl1=OW8W9h`)B6) zb(`6W_}{Q{&M)+Esg+xih{#+dB~ouUt81BU<$k_;NVYzKOlY~y{Dh=LM*T{i6*l93 z4ntJxd`Kqrrp;8{!#s<;f}}($|Himh+Ex+7FY-0ARkpPU3BP4qHQdX7UuDJptcK#; zIbM{tl-|o@$%I$i%*Tj-jTQgztW}W}NJJ#>4_Zm(vysHxw$4B#yw=K2Br4M5Pxp*u zGoK+TkxHo?XOwK~V#F7>t?omTA_oy?oy~OI$2^P7M!X`G|6*JslaP?e79=M9`2|U? zx7(_}pE-Qj%H2p(T0Mp&HrUMPNMNIt76;h6$Vwz4Qu-j{;uKi8m#ZO(_iUYeknsCf z+)v8#ORJB`#6Pf^8i&~WhgR-I!Xn#{h)Dgz>}8QBkeJ9GBrbCO5&A5$5ph1UTR-P0 zBNZ8nctt)%d?I!JW}k}8M*y9yYku^w6t#u@Fw_0^tWh47QPa`+%K8#&`q z_jj9i4EvG`1b#B_f%10BTse61o$t3e+PJuT?2svVzh1OT=E~tJ)V%_^ufjFw7k4B7 z$NT!rUZlo74LueeSJZw1|@wDOrq6!tSpS;ukrDL`3?WR>X;aW?Q*e z4wWyqXMm5~%+^fiikLL*L0c zct&yN@MNE9;B-U0-(*JN%3LHY;(n@0 zDAVVY->m9>v8_9<+?+P$*?augnj7cN)RB(Qw92W>FWkG|+xXfK){)k}IkQ>Q)E)V+Dy|@RNiCd1tj#Fl^sa@cPrw9uyO|y7kLXw ziuia(f|IhXUO>G2tduE34@K@nJo|0tH^e7$%Ng03FA>eO^JHh%A)2}D%)bee>F8pL-_wzs{mR(C2gy-QyzD=hVqQ@1b!GTE{A1 zvsU}O_++2kW%WG506DOZ8xt3c9ciR+QT zA-na*5$C9tLx@-8wzKH7$k#|v!^b+d97@9+3vsSS=z;kg&+b zUS>?h{fxVU(<0|^wjm5(Fw5>^`5VPBNA5{jGnO-iqNkI&`Pi#jpVT+t_RJYF%0W<^sk?lxKCLj|`8q`R z&izQ?-pQPw1NnV+&(AM#&UDYKtFD{ozD~|h<_flSgMxLKlfK&I8RA8K|I{nk-6zk_ z0b07}lMnA1d#j$GQ|D#Q&zWa`zt240f>Rzp|NFBsm%F1VnAP;z@3d<=ySS<-hyk1ZxK(m^!iDU^rGhMWsyP1`65vyQ6TAa z_;DoSwd>G*+-Z{;>B(o%f$Ew0sXDc&Gnm(_s@!mT=Yshu_%1E?IgML2H^-g0Gx@J~ z_O@!7-cIJbv_hymQod6=-I)L8f93x>vwlWpww|+iDBB^oyZ!F6>G{dL2J1fQNze0; z34E4$NnY2hKDlA~6|+m4cj#2JYnyBRRCQONez#XR zEw^s<%sOnz8SQfxQ8_(h-h#0mMZ7ib{(AU2W}a7s3!fLb&#k6r z#-3k&2ANn|iEa^;P*5_u2_TxeT;ghWRaH8WPX6+M*92qYo01_>N2W?EHh&9)?S z8xpExx3vg~iTs5)b#3O#HjGQ;LBuce5fT$AdlPjowspEAVUam*<`SFPgLp;iw`E%* zqmj7Cdc;@H)+yPJ*%0Y~c<-^Z8bgAT`5Os~v)XsxBz&c<JShL=qzZAUEcnW{#A4ow;t2%m5@M@-7m(!uGjp7iRurJI}+BsAM)F zAOB=q73oT=Mpk;d@}aF0Lqd`%)s3~W%VzFJ!jjpF1bW#O?&;1vm$v8Lj!5WdTW2N` z5&02`wz2!G`Yp`QjaGUi0l%#iL4pJ9xbk`wagLR+^V|?g25sgUByxpa&kGP=6PwBH z$^3}iia5X8tW{w~!k&eCD`qehG9r23vxsBP7z4MYQlBst)^L(4FGXd;%t!2-AGh2XAfgsEo`e*NKB3_>dPthnFy zHBnl1xQ8A}t4gCd14!m##Mj2wIfMjnvhvQo>H0MLU1TGY5@|4nOn=*IE|L-{Kb5^B*GS`$n8;DYGtkx<_6+@LZLcBYh+i^SOk)m3 zmLQ(Nw$6pmvMrH$h-Zk+)SS*)tC^jRMo3sPE0BapgBk48J8Yd5Na!%x1d1ZRTSnB~tALX6!zjxeM`+vGP9Rx!+2$C=#{e zN0QgtecA~LjJ265Na`sopSX3J+g3jy(FbhC`y!)w+)8)EFRg|m$*|45ii94r@{23d z>L0}Wpv_!42bp1I1QL~26OiD1oB7yn^`4b7FEP@DmG($zwUwzz@^vd;BNJNK+4v1v zBXR<%c%99Zn_I-`Bys^VL8J+i_{MH)1QOd}`x3c=xBF>N- zY@N-B)6&Y1h+pI|5*8`7glhniYDh}tGNk5>w(<=~P~;XQRNMA&9TKQ(rS@y|@KP&} zxN^CbEitw(m3JfIt8J#?8(a;xvi)g=IN#c5taFi3l39r?5ZQ!m5lJG&TieP9kYsDS z^~;uW9VM9?kXTonc>;;HwXzoRwzE=X8GQ~|xgJT1JdVWM+svm(w1bth%bA~!RyrfW zPF9{n{5M0+fHk`P&h1iRVHABexZmHKZ|`4%g8BTf%1tB|C~am4-W z5J@MOf4H1o$=G|^RxcpYTdn+vgnL=J;4M~N(8^%M+uO=(NJ?Zs62Hx6u2{vRULPw% zk>nsN^ATTvD?cMGZnEp=Z^S>+W*V-h)!kOcA>mP0Rw2nPR*t)wFRWa(h9m9?D{F2l654HB{pn^z+O1=?{Ax3=Au*9N)-z*r z?Kcbw$sF!QwzRV&b>5|i`)uVgNcb-+c^jyFz{=xDfIkoyJ$V$&Mtp~CrshUoIgv~w z#5rm+{gK6zxep2aYcp>l@#9vCzsK>OYp<3^BH>zAUP1z0t!zbNEv(dfzlc-0y&c7s zi2ppBnSjia%q--HNDN8&ZL41pr@NIhAFwZ&tzsu}Sv_Oq>aBhw{w3<(dg znOi?)Rz=n$Ns+&h;6U4|+GhGA(i(}1j6mXpY^%A5^LhHO4C$Hw%*}|DP4Jt+w$+_T zP~-l=`%(rPObpJ*#z_zhcs(#jMh zDDpEB7b&%!y>q5LlU#>*y4g{5LxNLmJb zx3jSg@x5d#H~XGFD4CmGnQJrak%UNtBy%Y83gUU$wz}X4UI&oMO_1x|#o)+(DBf{c(lVK=kdX0{-4 zk@|nIzt-5ycqA;c!rI#mx+N2DDR5(y&_ z5%=AMF_FAOtlssua#zH&!OD6hT*r>|n#0VPWQHKVy6H@MjV(d^PM*ao|R5WK;#i5B=QYXx0kK_2jY3();aGe{V9-i4|}-6y{d&*R?j2J%j}tU zD-zjTY#Mxx! z^kej=K+>Zai-e2XKL3b#K25huXS)8&QLx#{XGrqGbbr#BqQ~ho&&LX9qbX81XlJ!O z692;XXBpybvC{km=ZykMSAGWZeQCG;8>B4di>@)-iQ)t5+6r2c7);s={~28oFrLOeTd zrh9QldYc{TP{jGsW`$9H z)5CH4kCl-~9`Cj&yn=lUiKT4j7sP!>Mq%b3B)ZRLdYs8T|7&F(GDKQ^iA4Ugnfhhv z^9d_ckf^kpkA(NzO!0E8gq-v|r_VokAX}u>I3#$$w%U#q?`uc#r<*xwGdGpzc$Z9X z#DBtwJc}c@pY3x~#Phe!%t8E; zS%EmRmpx}wS!5`Zko}cF7D%04$T5*4h_AoxPw9&6_ad?{kYuivPY@^1%BAPfACW1@ zM5#OQgKQ7?ApY{UKQ~mTvdAdJSHWgJLqZ~TYLGe0W*$W%lG%eK&bFEMHJJ^` zEJB=0Hgnqfw3198#CNXEY(!F$sauP6SlMQtMLg2O1FlrHnVT=jbymv!3`9~Q_aik2 z+c|s+35dLmOb~esiHm%K_`G)Ob!u}S8)7S8jl?DMGUAiWTZmKL);a4!G9vdNJ*3qW zNK`V1kWrE;S%>+lVJr7X0wPi5DLJ?7K>W+>HFmv=IL}Mv=7>|%Rt_T{NM_DbVCWZJ4 zo?oONVOw3y)r}4K)+OUZLXw$_q$INv@wK!w_UL8o z3z04j*zY2>E@xXJhmcf(r1x^8hFtd!xAW5m3AM4?+K9wE*=N4(ui$)mlg(^JJZ-I9 z(}@0bw5`@4Ny%K^m{#p|H8eEy{TqoBOW05s7 zuBVZhZ0jS$+r^$GN;Y9!l4*u`0=9?a+>FS2B+}kyjw9XUw7MTIT9Ax zgQP@iH)jrSv8{R|F_GDbuZPVfk+4Yn7PJz14@rvDxGvWT_OSEwD3X%QJBTyVzT#2( zde&G^yY&`GKx7OO<_+$Jk05U$36Xt>zn9H4yn%TZxd(BAHnSQDi2Q@ZMf@#UKfP_M zaY$HXJ(3j3y^;RhW?Nl{L`5D&oZD??6%r8n9f^swY{j;E*?C@s_zu`Qe+c1YBgAh-DTjw1&BXa3Y^jTyck`SrTmOc-#b;cnPk-w3+ z$cT2VD3L!9uN+N-1I(ewQY1RaZmW8G#y;4}BqS)(qyt+QnSprku&q8qd}rD@EYT5> zOk*S<5<=WhcPo5!n1ci*v(2qD)Nbq2POQ4&R{9|k$sBa$UYqH2Gkp%Fg)#Fp2l3o( zWe?)N$F{nvGczW#5lMt?=5JS~S-H3i&#CXWtF9RmirCChBq=f<@z1cCuiaKpS@CqG z)f6i?BHm}L{DMS9p6o_Odbktui&W^&-g(Z}X@$gRTN#V^=U9oknU}33k>ETlWUoM8 zMV3jObx2a=OT@Fp);X;wBW-7of@_e{_u6rFM4Z=btCtav$lr)hr2Vb*S>$yjB(fVx ziCo)@ZN==i<{^HO;z8yxXvf|T2}tHuBq&mX1K~f^;-^NH^xBYn(35s;S zo&JdYiFn?yt*-0CsuPJKk*Rj(|3*SfZL4m5nbl=hmLVY#Pd~OUG6;!3Z7VNyMKY)L zr_~gjX@w*tGY|1Bw_D$Vgha{=AoH@V6F^duc?gNgNLL}9M%y*^DH3?gZYyUXvdYSp zNKj-L5*AsEL`CujA-|`4n7(=+hQuVZ6G@76AIx#F+HU=8#4mEm5PG=AX2v5Cku^wE zpMASCpJ-S4vz&%3tHM#L*}Wr!Y%j6ecQ?N#^JNaZnhTfZT(4YqRI;hZHlT6q=m zikxvLl|@D(VUaJ8xJZe+cm^$7uY&kKu-keViHfX8Vj?GyxJb_t^!Y!5y|$jd8Rp5cP+35HvGk?rxo<4iY_KTP;W2Pw*?8=l79`vaRh%P%;OQxsoaV z7+aUj6^OT$U5De44btivw^b3l^^HjBhwMnVAwl`%ld~Ro&ttY#8|1rUX>rHnIJ1#X zQs)h%BEKoZKk3YwPjK}vne!2Uaa*}J5_rR&jW;4O$(%lsdeXxik-FpUD0(8nlD6_N zBrI|i86d4rf0AvLvaOy*CQ4==5-e>qH6}5uA`20(9C39fbFLFvg7^!>og+ROH^pA>N1WY$TB$A_v@zw7Tah`cok3{dEutNM^{>{6_AC z{~QUHw_87V3Ts~EL08VQnctCM6)V-Ik`ZZ-Bnu?npM{85?p1T1p^iuoSE{8er&}#W zd|oSMrZHm$lAigykd(-ui0?ex!_c!-7Ri}TpG77h@d8P2eIpX9C0n1ttd_GYycH5X z+sY$IsF9WRNc;j@=j`XWhGf+g9$%vo--R|4M?7+`W2c#nLSz-roSIowJZ= z6Psy+gs!skATm{2O+%ckZRTSnAyV=MR-Lq}>dN)DRcEC3W41qokkpMf^CIGDW#xNh zl(gE9L|fa;1yRoPl4*i$5ow2{+S*p*k(!U&{!B;0?QJIEiez>n@lG~#-izEZz3s?Lr79)_10IIpMpDM(3$+WQfQ*#QT`t)*)oNWJ)e!Taxi38zj@o z%{*@FOhm%+%E|l41i20`@fvq1MQjhNAc1Gobyzq2^gw*mt;|FGGpy`JMoFDx$Oj^x z7-t)9UMYMes)=}JN}rLsl8GV-$y9uul_2sk;+bXZ6n}%eHKa~uWPykeiO;sJ)*)LZ z^Cc2^!Dc2dWvz--UB*3}Pup?TMRlu%lDnL(zi2bfk$}|cg2d+7%(F=FB`e#I zs7U1%%#TPf#5>ovdI^ckw%$Zym)WbGeMmy2-kYqkKhky5YvV2?A}i`6#Fw&}GAp?% z_}j|u$PwB4J&6Aj``EM!N%B=og{$RL#52vxPQ-V_R&MbYbxPVg4YPBPiKRnJkQ!J*%Za(tGehBqZ_!5*DfZE@vC5+zg4!=f;mke6{SX zeuo4^{2OxlBzc>807;50N1O|6We$QxBq8#$o4Lqlb|JpHRxWstt&8+S z0vFrNYe-_Ioz)FUq`u9ZK)eO#pY%#-`aVaB$h}CPS+>q3HzV>A5@~KL|A;v9zV*5v zuy+bxe@<^}01^@T7HRan-PT`-r%k$YdcW8IkbNO?Co)S~J&MF6^FHF-Wb2&v5p_gv zK;i|G?&0Hz)7Fmb6U0*>>HeJkF|#4(=PpR;*>)5|kWdF(=Vw5CLWS+F|BAJfp-|;uQnI5)> zWxmRmn-KkL&Qq?mx2--w^sdE{Uo#3BdtXHF8Au@d*Z*s_vURy9XFQ_!`>j1ijv)Hp zGBF7q{3^bU#I=B6=s`rc)$uJ8MktS&AZhm*D58NZt-w$$Qpg0<|H%JA3clOa$Urw#^NQjZroRD+Oj<7A z;K`B(4T@(;!taf z8}9e;M(5fqE8lNiv&C(lH<7>wD+iItMk`JBBJWw5f+R(9f9I_JkS-J90w)KgXCy|)Q_el6tn`xI~6e8~;QIY!ls3Y)-LZTv#53((hg@}`|l`9`&Wr_?!!Xhh>n8-zk zSqY!nI+GC3=T;6Qp)ag7IzkV(SQ(EbL_S2kU)oH?qwG_WK8WWln^}g$Bva&X_Tbkx za}(m-YGo!86)6$sD41uDg73(Lci2`{|6vZlwQ@U>5{V(&F}D7_l_wBS(#m!u zCNlV6#{PrNtUqd& zD+7?2$V?>gtId?muJFagok>c}_y)6C^2e zUC}%zC9(!__SjKeS}c#xjI}Z!@rqPFEzj|ZJcam0iWO&mMD9a^B8QNW$nX-(kH{`0 zB63Sf=11f+Bqnl0DdtCH4U!PKyfpJ8vIt3u)Ht2_`OVJ8EW{&Ht_<@dG7<5KSr3BKwh`$UqPCBk~;*7U^^*^CR*h5*4|cZ#{~MEJflXwaYO-A}=9Hk*ejHACadJ zXRn=~;uV-5k+FzZB2gqEa@M)bkH}=i`Q6UO8I_q0k;#Zxq)ZiNLu4}I7x7eOHbkCAf+FRrF&iRN zkg!NOFS8*s1&NB3JCE5Ac^Zj}l&j8ch)hM2B4^cLwTMhZoImXRoK}MeTFi#XY9u0Z=>?2kWDyb*@z!SSB2$rsNXZKssmQ&E^QRr@uZTya zYaK=^@&V!#sdW(}73qp3M5ZF4l-<@Ex79u?yAgeSzqBs1@u|%$MD*J4yo;F)$xKIl zat1i(61F8W1M$ghl&qJ%zeXcE^ZOB<`GGz=8<}Th-oM;FyU)m42KY2={;S#Z{yz$y zkrlk+F@XQ+K1;~W3GweT{Nw(lpEqQ_xp>W@%yZ$D>0dbCefQ=i`mD`!IQ@JsH>V5F z$aw1DeE;v@efq3zLC?%{VGni2lezM=ddJ-7#Q)c`whtIrdKBJ*=fa*#nV`8LxJNnBtvuOZ}mJx-~;dgQL`l{s=p@q2e$btXLg2`{zr z^S@tjsdsgrlkQ>WICWpenvm&Fe#ypiOlALOp%k{8oxVV+?juSyW@PuZ5p>v zxb!QXd0(bZj<>YqTtwmHYnJftcK0XqN>}VeX67gGEQ>d+I>lE164aUZ1v4|xo9^@9 zms9GuYDfR;m9Bs3bGnC_S$()!o^#d>cI=-Z8$>Exo9FBi>4|t++Ey}z+t@mTTe8AMn%v0h6)Dv!&)F|BsySZ= zB$eZ2=HFy1hg;`4cT1l)A_pb&c$+-uvbMI>r^pzQvNz>98$~)J)!NxsGm+jRN#rGw z&)eoXuZs-1$8mPcDBf?E=Um+0R$d;+b6SfmYMSA zXYb9n^3G0qPSfsIf{pp)WU2E7ci(IfIdXHJ)1!-RRjNy#b4)T-ksV!arg7Iir;=$cB5yYbk4i*2<8Dbd49ZudN=zQ{zRrO0i!urftX>yhUym6Z@c5+XB@-$gbd zeQvc|_w>wjF6m{Z2lBdPqR4TP-ALu2ZFTvrdCnG*=a6qia(l4{d)rn+kd7i-k-J4& z1oNC{L>41?x7j-7dgnP$i`EBz*>cRG{qq0=wVIZ`0$9$toc zM%g<3kW22h@*Hy8Xe$Y1yhySBdCsl}Y~~u|tf#Epi(D(R0y!gUGk+mXL@phW=j6U> zGXs!%B6E;FD{bZ*BqCB_AXj=DZKf?U_#-QiBF~Dvi#)%@W=nY)q6DJ!2N%cRxM$cTM5Q~i!S=j9Vt?nib@tEZ61os#*_fYR%55At4tq}O5X zp*+gurZZ`I7^%I&j(rBwCePM6fJ`WmbgRHHt~aDrALO}WwzB)Z(h#tj%mjYOb^+{Sir) zvzco~@VrSf9g!{NZN~jB>@kvgjm!rXY^K!6JZFJqsv&F6vYGpkEs~jx_$u0r`+eEY zTei>p$kaT?X54Sbt}B_F?&j*ElFhi^m)%t|3(4GjuFbgLjy+y7#qP;-eyMCTeUO-B zMj`R4HsgMS_72HxA+xNS&3H!TIom}BBc4@uqz@o*uWhvhxk@rAM6V%#x;Oi3=kd|m zS46@4vadHbB6?N1YK*<6%{)7fRd@U2K1aK9h~qS2=lt!RH&LIX1u{L%8B*||wt44y z+`EO1i!g!-2PYeIa;J&<~iCJw!`g`&X>K$@w%h?^S_@R zpP_lQR8{Hn{wUn!E zpI0HiYphg!i2ht>x77>r-e6@mk`&p2L|fWSmGPXlZnV-3Ns2s$q*~j|*GQm^m2)0u zf3>x83li>U>{q3%|GM7+0Hsr48m?P+Bo5(rsYgE;qD$$1>P-^xv{gwv8< zy<-vYL@UdXkjPn2u=N5-A74)*Daq_{Gm~tc>n1Yx0^xqPf;;z8`Qn~i+!G4D;kAn= ze$aEvnzswikU8A6mj5&1!a8^9xh1tMb8Z<$!W~QWt7&{Xg8P%Xf2{Pt%(=yf@=_9C zJDIxkzg{z6M4!_=%)I`SLj05MxGsK@`4Jh2Bu+|Zq~VC$${lIx&W^L5|9tMV2AmPy zpUhtecAXq4H-tEq_|1}g&TXV44K2@%G(hGGGAI0xOwy5Fb#kPQn9?$Ai;;4{z#wGJoj!2zP5zky(=gb#)9ci5%X-&lUvdxS` z0wTMSsL0GH>u{cJRsTg+g2>ZILgZg0IN!GFGlx-#{DefMheuplU|WrOiLEcR@;%~@ zTd6!3k<9%_Kx7$mM7H%ll3HZzlzf?Sy<(+3(qO%v!#+slO`9prJMdw5b^$KrP!;iD3L};ROCe@CQ^P0vntXJ z>9osMUWlv_*^kux$!40qmgh_qc^q+mwwa@d9+gdE^ia+%Z@D7J`-s=GNAWYF=fi$) z*zN9I9>UB z<<%v3mie!1$Ry)Rk0NsoS#2qM@E1F)eUQ`_rSe~kOZR&rQhcbDU2f)A+p5ko*sPSPa^@5Lr7Sp**j!pCESU`CG!^IG_;lfK>Q*#;#3ytio`{pM4T&Zo%M)c zgtQ&WXnQN1>~r=$nQ138 z)0s2*Q$Y~)5^fN_MG=G+K@e4LRW4EGMx_K*MYuur7U5R)x^;cuYp=b}+0R+$oJ`U* z{r$eL?|#wDd}gintiR8C*0Y}HS)!begB%dZ343T)DW7WuWTQa#g6vEYP5rtTL%p7- zZhxItJSShy7eU4Z^2i&h&q%)QBOumu^SQnc(l3zbe1kM|^J!LtY!k>{kbMGq#!cjU zUOv}KkTHRL31piK_T6(Y?9 z$Tore2xRwUzMNCOPnyN~a<+gR63EFvpgv3TX*Pju5y=0597qu@C%o*3(0Wmx)(s%N zFU%uPxs~w}$Oe#=Yx8~hQ;^-4<#RpeN3>m(Jf@I$=v=xtz65eeASd3&xG&GQq7E`P zkT3arARALem-D}VOwV7K&ovA(@8Uf236MiC%_DzSxrDS6+)n?zET3ir$i}ipbdUWE zq<3W=iGM=d1@bKrE6k@^_ESbsAYTCKspQkV;AixzKz4wPRr6`)9-uw~`54Fnfs}qu z+oOE0?I8Q&JmUO<-Vn%@AXY7(=5HW9gL!1|->HvCa|=knK>UOBh8WY0ATut{&z64& zIkYNY@(X`S$*;_(`6S5BOY&)E{)&h%_@+=gavK$V!3Cx`R3kWI4#Nki)lu^bhA-+VdOk#0B*dNWVZX z0~s01Q~xB$BT_`Kf`3=JM4Fe}NexAByiXxl=gYYVq<=h*T=*aG4S~EJlYw1zLZCvaWCckOCA{m8M{7@d;#RZ zm-EQ~DCCAb;{O-rd?k-;0O{GCN4^SjNFXQug*0Eyr#TO#_iK4%E6B<{dE_>Qd_9jm z=D+Dfft(F;Kp?LGv2M)gx(%dXAkV&!whLq($WDRW0MdUbU(O#u=6x%Vl>SN$1+o$3 zkU+i(a^T~qoAbyJ$hPm~kxzi^6UcoaGxp`vyyIG`^J%UI*(v7FPe8^5^0>bv&E5H2WsrRW`83EOf&59O z`BOgEb5Ek@@5v)?2buS0jcBfQ56G6k<&kv{hx!TmR{Rv?P>SeWk2{&3pO#NE3etOG z9{DE7jECisGarE>^6&D<2#6(+?}4lo$g`(YLxH>s^a|vOkEPB6 znFN_PE1&CoAl4;$r0_V(`G-7m8OTn7d=li4K<)&wo|4b?^qI6>AcG+NIM+12;XVj5 zc3K`e0J2*kPkcPRae6+@MIhVG$RqCpv7VYo_JizxS{`})Db)FydE_5Kc0MbQybEOB zv-8M(AS(s3`U#}5@@Z}c>9zBSeJZr#JhBDkfRjgho(Q)o=8-XwEvYU}OBcTe+4j7A zn(~uCo}Wj42(t49dF1>jgUrh#H-Q|QpGRIWi=JPQN4@}JEy^R${(Ewroky+)*|Io~ z^!@|o2(9BN$VP$u3&?IU$DaHYYPd9C&LGHvbMwfLKzh#0BQNS@oeJc7kbZ%?Kw z8nguRTacXsdG6C03xWI-i1p%p$v*@c6UbA~q#S`vfE*IYzk*mo^Z)2)P>w)e269Ls z9|y6P=c)fy+=vkB_kPn0G6v*E|4hdx09Ljk~zMRj1 ztXz{v9{0Z(iwp9|ILMX@^T>BWde-F;ua6mZQ670GNdLuoT9yMIiYl_Jetn_2g=e6II_SYn6$8^}t5yvl*P zK>i9cwlZJN%M0|pKz4)lh<*8V7wQ6e9mtGIzMNlztQ5#O9wiIpQy}xI`CK!7N*2f~ zK~_fjG`|8lB#;F~S|NDv2S8@5%IEqk$QFTI9MBts`7~bwv4-->I z2eMBf)^p%&LX)!vWNdXl*Y81QjO3AXpGyr#^T?+_tk-Hp&xD_WYodWqQ$UcFrd;zoNiaf2af%FRG>GSAA zfxH=HOd!7p*&>kT^Pw(~FMu2n$dk{4`ak7+Yzc_<_I!Ol4zf`ok61v-0vQJBc}G5% zvLv)pM32R{NwZNPk6%cg1@bbGZ36iS$UbpKd)Ok759DbLfo%J59@z`B^P_p>v1gyy zbH}qDlDkQdK(3#YM?L{!U6arCCy;BLe3}=Xb7IfjLLPY+$j*=DbNvA1CO@C%^u>&6 zF^^P1W_%)_Ya7T)d`DGp=^pzt$Q=S%umoB=^10p!vh9<3k(m?hY$Rqn(b6sE{+YIDa2I9TAwVc-*$hQq-=CamY zFEfyj8OVPb$kOGl<-F5Ceqta`A85_B&OmN5kkek$nrjS1-YR|{L~5-ceF1!Ie*Vt^K;*so85gx88$hH4@^cU=r7ZZz);;dSAaaj;$i_~*Th8VddDCqU#G?c|r! ztF?S9hCt*Q`|CS8`Gi`}=wjxxe2AB2QZbAuScH*b5?0H!rS` zMo1T*1CjE^(3yP)<4FrX}$;|(>$@px)Acu zIuI%U`~XCr2hUkWog2N8S?(S9tZJ9C%KL#bvg14Zb^kCwwcJZ%s$B82%qnk&PSSJ5 z!HcG)R(WaE-~F%6Ebf%YhT5Ut`|9!Ck4nW2$eRpgn}J+wAm25RUl_=J2675k z;c~9dF_5ziWTk;@G>|O@@_qx^VIVgd$ZZDlI|G^a#MV~KG?3W_@_YkXW*~zGvcW*M z7|2Hr@twO26C%`95j$W8p!lnt!?i$kc9?vk%3%dAZrX{ zlYwkCkR1kcgMr*^Ah#RH9R~7813BsMTigB*1`-&^fPq8?GG-vJGLW|$$cGH%S_9c< zAO{WPJ_DIfI77KkpJpI)4dh}288MIz2C~&awj0Rp26D(i?lq8yJf*c2GYw>pft+U` z6$2SDkaY&~1_Rk@ARjW2T?VqxKz?N)_Zi43hAcYAK+ZCdWd`zc0~t1uHyOyg3}p6W zTgPIafn01Lbpv^ofowI9?FO>TKyEUS+YIC`1G(2gP9iFzTq(TBP`}Bbe#KEy zzs{h3(4anGP`|;TzU8Q>?=q<0Zcry2Y)jjB8Pu;lD(X88>iZ4qgg|bg{&9o)wxgoH z&7i)^pg!B6{sx2kHAhALN`v}#gZfN^dflMD^QfqAHK<=@P@is4zr>(^-BD5BVo={| zP@iT{f4M<@_fb*bWKiE=Q0M87mRa|FgZfQJMSY_|y>3wFQKJ^>mO*{rQBkiO)K?hP z_ZrlD4C=QY74^uVKG&eW!=QenkT+h+?s*`g-pj2=wzoC^9SldJ;dmU2U!s#I`=I*U zt8=*?k|cgV$f2y91o>(XY2IjPTI{DMaNJJg9VE&5PbOJ4Xq`aiTfS`Xo^v4EyW6Bm zZ(;VlF1v+6>6Fx77WQ*$*z?s?-e}WymHM}&u|AR710?lnCR8oYeZ2Enl*_Bbp%I?56S>C8rHa+FHybZq zAJz8nP_~lDn_u=CY@bG1?O32nwSy)m47AnQXl59ODQ``wK`ggNv)TqfeT zSJ8??X}j93)2v-OjcS)_Q_DO|PcFS#Z*-~iz=5pJZQ7NtuTwW=>&u+0eG8Ti%)V&J zf-|XwTA>eZ(}(4WxE_wLTGR8j&TBAhmrkR~(X)dh8(+4*E;?}dI?wJ>XI0>4`gul| z`lvJ?Ce6xhuD0-~takrGnz6&A`KcPyjFu|6=MNxi)-^fpLoQ|QFqBQ?@gN(o&McI& z{?T<-{i7nwpybMZ*<5Xue8M`Gg#5BTTyY@l!(N$y-?F)CHTuxxt6ALCMh#C;x8yXb z<$ETrIJ8HPd%O9pl9yE5zn;#GB>!TNon1M=x~LrX^sFRxGV6NEWsu8pDQ+ODpt35b zQF7LYx<0B8zeXC_MOh#2%f=#Umny6IWqr8eK-Pzy*Zbl|AI_!#x!(2KS-Ma~2I{nS z(liSecT1DT2-=p-mJ?L!mUboUbm7H~{%M)dWa!bf7S3PE&&~R%zcjzJJ{MmEbeJ^r zgKlZ+!xOVFzW8EQhUyi~H~1m<^^qp~wNo0lg8E=QKE68}WyuPY?Af^MG>X=};A;PF ze%XBPxhC6p=2241ev$I|tp^T2?!%37H+g2cHZ~r^6L;U(nIEP}dKzgO5{O1rD>5FG zYeiba9gP}JYyL6)DO=s^y3|l5y_B`HFRfvxm3uj9=6xew-AVadK<>`gP7gx^^RG^* z*PEN1?JCmre>1<{uLU_I(tI7{Ko<_6h~1-dbxD(ryKaT*F^r0Oo|@D%`%kvs8`Rsa z_jG;D`&c$N9%9V0j3?|okj)J@BhmOb>-kNMo}bO%Bu`L@&lsjx_jaBeDou$rY5_KT z^&F5bS+2%x(dDSNuOOG4F5MvfAZwSJ&+^OKbxosPiXW<)$?xUVa9dVG zqX%``b);E&bAE2T7356O()WSPquZKozgi(8&1Y0O-^t3!W`d@!dSh%_PtQ|C^|IdR z&B{4po3Wi`qkQN<)*HQ|4E0OKN%|WzQ}Iev&$%z_vE7XxYd;fiq7^f4(XHsT2JavZ z0snHnaSsULDs#xR)yNWQIl57&f!rk0xF9{>&3a5#b^v5c1IhYO*GKi?N{VW~ni|xT zoha9Ee$4uC#?P}poFfycG^ylyu+cvjs5$cnso~i7y7$j(RV&goy6x`-*(s3iAU*r@ zZT}+3Hi7&A#QJ_d&F?@~3gmg!0u^;#l0>Za@7_ly?piZ|2Hb#J2LYR{yc)FSaO zOzad%b=?;o74^La_2~xn4F>f?2KALkMSYJ!{XRnjGi*@5-Jm{rRMdAE)b|?H=Ni`r^5(|%fSq*1*A_ipJ8RnBWk zv$@e5(-dTUZzIi>U3x=h*hZRLv))Lgua=%q?;(%t*tZMQMnIS&VHku2zf)4?3_83auD-GE-xaatw5Z)Qz+*? zqnyn~IqD>SxOPn^fuQbPWt0<5p`2MpIXjGU)E<7g`nX0pdyH~6PobQJMmhT%h|?UU3n+wq-kQ=ru>CzTVtW;q!x*Pyk>ptWlXw3_8)w3_8) zv=$n)_8YWrngXq6IT@{HIT@|yO-^yI1wJ3AvWNmME z`qMnYyFTlU&S{DV&&=lPY1CeRX${@EQ=qkX3bdwYd%+2qySIGVE|bAWCgsk~O3vo9 z*BrsD6~-w0H=f>D1?hfzbkxr@sNbITMphqpY1W4s;{Ws*QJ-T_KWI=NFsR>ijHp`% z^}7t}D-7xnYwYj$Z`@sj`rQWg$e@1uF`^zA)bBH>4;$2&-Jrg~pk6sf)E64mXByNu8Pvy)5%t9e^;rh>%?9<&$B6n;gZgZP`c{Mb`_t+mN{B%cQSanLet^4BwyCC$S!p1?ii$1sB8kl|r7gUK?7;E#89pDrfgJ zOD?t!pJu+&(|0OI(fB0i)9kw>`Qd9IGdO7~-8=vAeFtQ)tWT2~dF<$kJ?GBXcO@FB zfNbPEsD9JPM?jv?pU?G6kgIT=R;LM_<_{p5{PU2W)$!`;>M>sbNo}Zfn(1RF_AHy5 zr}c7>UdmA4B|XDK6ZIHdkqx`F&Qs_5C~2~rBaQ3@xjmg58u<~(3_9nbl%tU+UB;7tw`fGoT=pXM1LO9k>gkjy4o*ZGAYcZrh!5u^vdwq{G;3zE$~J?_5%+281&>gdQw zT&?#k6utU;(qv~4P3xf(C-wxiO_imQ$AR1@ayo~zBR z9UDY)iFGQCm{IQl8Dt_hd-Z!D`$d|cgUl2yy$fVRqgPb}XI>5>(mVy^B&w!rr)#(t zB*Lttxw_v4vQ>=5=T$j^`b{9}Yx1buR5@aX|A#`vtb52S;Ju=p$Ae^_p7SpQxrT-} z+x`KNfQ8Yl;dLO9XxG<3mWnh#2H7Bb{vMEvQev9c3pSkCV}msJ<&_}Wr_)>w(wo|g z>K^+F$XwCSx1_n6<@_3CkJwXAcxBT*QF5+mGh38% z4#?eN6}$vwF&wf!B%ID?R`#V79 zh;lvzvR%xd&w8zlGUJ7~a8qy4iKK#5w1g)=v>=0>g1-UzofusBI-$CwudVZz+6{I(v(0V>EdJW|? zR^@nHT~iw$UA72Mvgh6S9g$RnxJ(( zh#Z}1uRXEnTS5}P0OSfm>(wBcAEIviR*(&%&YuFAA$I(mK(0zpB@gK-*H({4F;#|q zbM5?+G_xDyrP}TE^0{s%$US zr&_D)d=a@aZJ|akRfym%n?MH1(xi1Gh}@eFg47#hs%ZQPBocN08_3p14ON;`Hevs> zFu#_oAPdE;8wWWkN`5uSO2H+r1KHT0ui?EQH?dHgb$-t4;Yfo241mlMJYfh#eX1vt zlgsMSHF3{Iu~J@3nhhe?yFliMao?dz7Hz)))Ml)n4QkdQ$U8rzVmF5Jz{3g z2iYh3@C_g<89qINs#aHmG;651jY2nx`uvPE*{6Bbw11-K1@*^++%9JC(?PBhGob)7 zAa=&HK(>pud;v)2{gJLX5OvyWa)2*^Y!dym59CzQt~1^QEm1=kWR9rM^FfA1kF8LM z7}G(JD})~46Cg`Pt{XwL|Cbt5_1yxJ-6m_~Hz50P8q)J8;k}F2^|*r8GvCbq&KzsD zv;=aOn9oZ=R&xKFbjqa)#dxvQVtJhi}$9wW_Ti)6+n-A6eE43uK2F z(?uXkPomnS+w~rhJz@lRfNU1IZU#~HQUBMuegd*fwEYhtb40F3z2(H7ZH*oyYtQ)# zNz2gX>;l2`GS~KRfJ_q{@-~n;VkZ0t$R@E<-vg5A4|U1Y-pUAyavl#dT_8^b*)C?( zLX}Ij;-w(F#TxuD$X%lC*Mm$K_4y9S7O|iH6l9^`&-Z}LJ1svGivJAHd|Vz`50ZVC z^ehNRs`2oW(dnYj|4N!oVs88hWTW6VcY@p{=KM)pkm5wU`a$j%d}9U3CXuTSvW^Nh zXYaKjOrPY_^YE`A_sWvr#-1WZa23ez)Dl&X*JhBVVjjK^WI(j^V<6i^$%jDZ2?^xU zZ-(+wI5xubm-#N@1QqQFA3cn3qWRxxq2bUm7<(?gA9nZ^97Lm8tqafz6r9M zh-A(2n!dHQH)esT(~Y96slO3qs~C%Sfmrlvle6srkuuWFAa{#V{uRjPMhz1Q4PO{F zTbi8Y5$|NZH`1s&_kqk6^LZ}F3Q?aWAgUZ#Yg*?ER2osvYLK3uc{z!C1IT?M%?CkN zlB!vs&w-o?qCP!3e*xJc*88L01>X=gd?E->2j}=$31o}t)eRt-?TYT_w}41mKLClu z8vF$aPhjOr{%??Ng14OfzbS`;n&eIdYW{~W@N%zM4L1r~p9J6Iuc}`tK4wX}< zxsEh@MSZ>jqNEG;>5^x>8_q`Z=A3^qh$=vpq06}%WH8B->y;q;5GI=S*$pzc(LYH!5jK&coF9>9yEqs85=5=RW;suP zFFdo+W2!km$bI6(`a+OvD5sh0%^({@$yb6*7v+2gWVS&54J7+?KmQu!j)Z5bUabs` z(1xBKSIpjfNVAU{s3!H`D*90L&xIfx#O`?+$f>Ly&25tY33(uz(se(VM@QmyL-n4W zsmHe-(~puXpk$qESsX@Z4-LmxiJAFj(p(`{<=;T|i`D(4_pyUOtGSvykgbi?bnfKv z!Xc#WVNvo@(%da1y;UHyL`&C$91tt_3XlQ8+1>*(yD>LZkA4b7a@yS>dj+jqL9P+) z>U}?bDE5mg$h{0ib1Xgra-Z10t^+wBq~-qx(U!5j>DqbN2iPx!l(HD4U&yp?2AM9} zbtOn$wCmF#n;Ls%ZSD9_J;qZqnNb<7>q(==Tzz`hJ#-ti#C%?;5S=7V^A->l2d~-E zn?d%7IsYS&lP=7sdC~{z4N>Q3gA9sxjf4D+G|iGf2eMbpggvU9M!QtSz7NtbM(4R7 zg0D8_2B*m7G0SJBSUbx|GgGXKvO>hF+yJs)aO`)1T-2a7%#n3C9=Y(KnBn)5#uX+1 z-G|wCM9HUu92D)cK*j_YJr`u2==pbn)EliRb1z&zcc7tA9r! zBF&v3awa(2nc=L0=2%RC+%9~ua$a6uqiqUx~$PA&kc^}AhQRf{XV?uhr4rH2Gr{4zIBSz;S z$WFmq{!^86TE2hWkJ77RW}XEyms&S@-Gv}$rj6Hae?Q2c##~i@x(?(#v3C9oWUw*o zRGQ~p4JW}2vN<}h1lcWWxEbW2X#2ZCRzSX4pU;Byo{=x-ZjkJ|q$k-3_;s7u3!ZgN zt5i@2xs_s@66|J>o5C$2hTyIe!L7_UWE~9>`KLfBMrjOvRKNzZ7I{qdqGCAjmF3{gogm2~GP~KnBG8 z`8LSG#>!RY+^WhE>*CiSJ4FAS@bUbroKQ@R?={`K+6P!Ur|2zp~SWtf!$Wl?~K;@#K=G-_BWRvKP z6(HHCX{`o{8a-bw(;a0t)AZ9)%BxA!`<)YV>*DJQNz>?Zrte_I30hA9vBbU{g3JAoqzr{5?n{N*8a#(1e# zYy#QEzs+&~Hpo0yZnIY({pk~v-??HOS9yb9ZPbJrb+$HLBBgj>vK0gQ9DRzf5 zb~1uuyow-mL`#=}Y!~HR0y10l>MKBQ7cG4!$WpN`J_WK@jMrB{6j#?=tD4@qXrHxg zoj&X{v`g&NPXn1PW?cZ1eR_s30$JLq^P`f`8JTPVs88vWTr^-=xdojV$MGUWK7iXQjq;3%|?*A zC}%6kN?OsJncG3;iaK8lvh)1>=-dNxrfB;kzJPQgNQH*NcQPDb{WVHF&0}u zW{X+(UXXJH*ZPT3&g|=2Tj7K35`B0Uh&+3SAUlOzw_T+Xv*qg`n?*Udf-Dv5^tT`@ z(}wAG`Cnv?2^o7i$be|+D9C++A8u5L=)<>xOc%WF8W8n0SJQ5VFkVgM2Wc9WPS@v7 zkPU)k-wU!raFQo}iCHITJp*Jhdx2h+>iorx;f1%08GZ?A?iOqL3Xm(snfhC*WHAqa z4l*oy;}FR8qJ|Iq7iN^G;p0KJi?MJ(#>9BN7-Wa&)e6X5k!vl;CQ=Jdt2RhxBdw*l^FS=IPG1eOp|PVWs#`&_PgDOf$aK-JyFeC- zb@5*y8_A~VXj&_8fVwET4q~N6>yp0=qP`}F{I?WQs7`Ym$h{|LGgINSzM^-BX0G!= z_QRZ;NDX9%;4PPdM54}b1=%aoyc=YXm{He(^oUt^E66<2hl_SI$Eaa*ceoH_nrQng zKxT@y^A-^GHP`Y-KwL4Sc7q%gyyZI}a_@e^ziKJ2+4g6E$bKFNamC!&46;zv=K~+9zrE5vO1Er=z~ z4%7EA>tz3c42xO!T#ziKg~S}z8@ztTKVDjnF*+LpMH`J$*AA$^v zw*L;~E-`}lf$SCIKK({krI?vd1eq(w)B%xp%kw~{i}iH@h*}rT-l&1>`(fU4xDKLY zNA#vV>h&Po#pt{Tq%QdLM?vlqw7vqeRJ3a!$ZkkC$LlfQ(6g>N7QG;uSFaw6wII{Q ze7*wYdNId72y&g!5q$z=Z-aWdsx?Ww8)=j_qdtl+xhUs4a`mdg;?v{Ra}yjX^|I0R zc{Ip6p}{)?n;KM9}&ZNV8q4 zhR^*LHKdScIj;m!OQpG*wt^fuD{oEr?;v-J8Q$}6d3}^Bc`?Y|2KBI7jmNMKog>C{ zfHeCBkBULESc`g0H-M$D%RH!$X%ijuK=0TK+5H4csSK! zHQWAf((Dy={uIbH7vr%-ko{tgy#eH(MGbEPStw@s&p>)b+n@R! zS|Qd>0YvdJ_38C>Imob({az1prcRQkxf!Ha>_oo<84%<3cl+QiVun8vWM-qsRDmUs zy5Qmc3K668a*!1QxeR27Kwb@EQC@RLyBcJcn7y9`QCe%AW+EO|E>JyNMVcE(v#p`A zFB8F1DJSXX+;09i(i{|HI`bBGG|{V11^JuM&aDF3BP6TKLAHwV`e#*+==l$TY!WT~ z0>~WEtN#jem7sn*$ZS#09U$4KNBOTH1A_Wvz6-AtWAQYQGsVee5M&yYwaIPPgQ%~G zye&cI7hy8%r(%?V(vXmWG^w=q+xk*Uo{|K_Z!4oD1C+pGZ+L2vi z#jPTZ^6`cVus%dl6jy%q-VkC*m@MDJ=4TYc-Rl&kYXl08RR~( z@0%^Eo`&QZ|xWw~7 zvQN*AO$wpQn(N|yMw*X-Trc|P^B{}Uf^<3m1F{n8&2mop5u8ordOFBTaT;9&a<^#d zGLQr3=jY+uL3W8&d;(a z$~hBcv*`J=KyGcw3FVP^t@6Ow4HMJ5L&A~5o)!uJb>uqr%zP`}1F}%ma0f{C>3;qq z$lYQ-e-}hu05*B%9Ux_4`}E8o)2>FzbNP+9`9mYC)|Q7x)`Y`DQGYm2RHu48zBqmR zfvCjgDu2b`M+Y&T-8UZB#_HpJS-zqAaD5^gAFY>bqvO@Md$RQ-Q%E&2IeNHM*=eq& zPUZ5@>Tp$Du7ndYVpGdsb&bQZv2uO=SlqKZ93gGQ@2v?_*O`{=<#U&ucg}_7CFd<4 zn7?#sdEuh7UUE+P-1!5G7cE=Xlk^iMx9h2FCg8#lj@O4qYNG~0SlG~TR1L=?Mx?Hu zGQfIcxk^51)~-Af)`!**MOpv7j8Vms;R(Im)a1^hrj@8TA8zHTI#XyXe84e1IN7k6s@E5wgEgH5#)jn`H>Tn+YKT= zq2pFZ$K%52*hEm99I4iaMn^n`Xn3MnD$iazFkAgRd(yFHt7LtBr0eU;6880-J#y}3 zT_u}8`<#KM_tV(3|wl4Vs2p8ep}#4lLX z#J0lNDpg}EG&|H)9r~d3QV<57TMeVQ;`qf#4R)g@FxsF5b5)F`JT@FwV>JqTjEEOM zIb84STbBH*aHboh#>grA%Y{SZvlnP+Xtb}7c=)5^eSM46Kgl36RE$vU`*F2U@~g$j z_lwp12tm70G-w+%bU9wZF8D>u4q~fNDSDCFzh1Ld<}3`XDb2$3alx44G%O|4aFh(R zGVo%{bzN#`mkLp(&2sV|#M;Fr$BBFviCe7{V=Iv3Z#%_;F$#JHz*`y8kS&ZK)Pfxv zR%~o_IL4Aqem*xGQ~ebWsRt1l{p8=~6fz1J4(sr1a`Qu)H&1F}bdoI|N~&M``m*6j z=7i#5eSM0Foi$lYX4rz+32W@@tBkITnVDyeu2ZDhXmXrJSD`*04%I1F{T8x4_4O@D zedys`+2*U`QSxL<2099h$t^nHD^ zCyNy-!+)y7qZ5a4ZQm|c zY8Af{)*Q6)pZ>tU0xc9aYW!F)&2D zl7ZM(bDL7zvnd+1X909$rB?N#D6G|-YRz^Kfcl1q*R1Zd3+#)oXBWJ{^DWo1f|6sB zbsA*7M2_$hF`}rBQRShC(!)}*hGgYdt*GMKwv`N$r#JOQ3Fi(cl7Hg$O1vail!~5* zRHFW~ydE{g659eoA|E3FmMYir0^37kE0#hVaafm|%p@=QFKMVT6)(A!iWPa0S2DZS z&dDBho7+jMX*-+s_<2zn+C?WS2C*LmQK4J+HKe!WFXvQTt5U3n1*cR&uFJ0#vn~&) zCLG z>9H!8so2P*4tE^o6sclRbmQ1Axh00CP-O^>Q-7hAdNHf9Du-A%BdVaN6xIrXWBFF- z7Hfqz3&z&RT~(v3DuLJT3|3nWhh7+0CRZi=J3IEPjEzHO>v~#<2(Ty-fnlBnN}x(% z!R3roj6A>K`c)^_BMth+&h&>SIQ*`^e>HGD=2TR%sujV_~=?H?YR}FP;pCDzgi1iFHX6B$txCEIEA9?xkbiim0GP>vAkkMtAnOeMk4(q#ZX4<6sVw6D^*zWQK(f1vJA)4 z^;kl9#^jWcRK)h`jvVH5Tx8vOMUJz2^!*?ia50ql`XAMt0;w5QBx>t8Rv-GknTi!3!)XiK7XpNimOq9M%Y%Z zP_aYJWsg0X*eg_vVbw-cSPOmk{*lomk}lHbn0S7*T-XIG;7RQn5TkN+w*=BC>XT!8%}s#Tb2rP$K5 z_yM9-v;$5(1@ynQViXtB@p)j{RkW*K%||hY$cPM~x6ucvU5GSxwOA-bF`Bp_bQ3Q8 z0MUvpw^l{AiHilxE~Sd_2Z$CEBesehteA>Q5^EI`9ILV8r(!~?Bd<9nM2kXRoe+YT87Y&5>#`zkeqSMLr!~b6jy0O9FrHQe-zVgpDM43 z(kbBciTXLOfJzr!iy+MkV*gWRw>g~}+?{S(6OSWwoK4`q+_Ak)p%jdwPbJeN+E=~S zQQg+A32myFFWl5Bbj+}Ja-0jIOTzK;+Hs|QL`71I>!{i;3D<;Wr5%}20^4egfz}Km zxUG&yX!YTgimEdFpN+x`;-FN6H$*`k7QNhYLQQ}+dXaQ=kaPO_Qo*D{%=m6VKJ76G_ z%rY5KvTI6TR;}6yhe)aVM0l);6r5@$D7g;DFt)~2^K-0;c-)o- z=m4BJbUBFWGuW{v;)mSBIH;KleiT`rX2c~e-)YVQ3({8<=m^G!hmsr7{)G1!TujZ& zzP>Kk8q5ZlKq~5J#0IZa8&$h#MIqX=WU806aNKq>kT*Zq@@Xc<;;QB_;V}7KKWU(DFSn+^bfz zQ2IwjR$|5HV4AE7Wl`Y_jTX6LRCnB^asE>t9!k#B%nl!2oa6g;%|#z~*bLQ@S3zmy zRSSsqenBtzltNIMtkp09iAwySsIW$Yl&W4y%aU!lu$C)TF3-lo>QH?>%c$s7t2L_{ z#Xs=8{)qYQ;_^#!@3=Kw8{sWGU$!{7wc=I0eqtDBn0F`qi9X zSQy~=XOF0MyUdn!+?&I_CNc8qQ&vU#LRsA^Q?yNq#Y&|XhDDU&4VldD(AlOv%h3=G zivg;t3e3-Skt+{3!VO6fLD3Kea}s@ZbXb|ob4$m~f2EFxOmfK64)^t~?z6vGC7=;w!l zLAB!N*SQC%OxEKI!r@7kH{EB`f6f^mt%SqbR?5%>CAQ80MuNPI(%0{{8XKBN+s^fZ zmvlmbK5)E_ePCPBdafxjD%8S5H4JMp3Vj6iqJx~A-s^Rp5J>3`=lxbO{XrU=!;ZyEI;3#<&^|!NwDXg^JIKG%i)*%3%gv_eLTm*#7+S#0sZz64Y0m6T`_p zMHKphyXOq4(E< zP!f|wJ7SF=$7ph?vP^#xbLZq%)ACgLSOX&DbA zH7!}@WW4-QtC2TNrYffHuO=o}D>22w@)i*t88CLZ@X|`#^j@uz^%#*2u=X1+Qy6q@ zG#U=VSB1^lu2r?R<2cZ*#a_tJx~QQ_aWU2!hLW}@PT57f#gc6DXAQ97pR4T?v-LLh zO+FiFWI@++oPy6yc>oJf2KuL|FKV7eyA2#^JQjWEWG3HtA+24`OhrkZFel23^VR;TW4tWOr zfDkNU#el(tYjX+;YL(`o6%f8l%C&@v43`Yb<;0Jof)B3aJ7P8 zajYOxDu<-vY9cE`7A3J47mTjPlZPwQ@l~X+V(<`GLpwkiVfeK!txI|?^D3nPa|s+X zu=3C&(KbEqT$Eo!6%ogkqT`ezi*sbh`nc3*f(%g&^>r0pvV-M8$=8#y9RZ(4jV4|b zT>Dno&rz-WVKs_UD;PJ~EtLT#rHCms~@=%JA2`8;s*y4PaM17| zQlL?2Xx-J)IR=7fv4jnzUvhATv0aZIEam(zAkoG$EZs=V`yYDO@)0#Ht`x1nu3(mw zN>oQdrLhWHZ|0$5*q>=Zy&Dy8Vt9z@-Qrv`d(x|@;q$bGcnOR2iL%llDI$ug+L)8D zUXUI1Oib*IG6R`Z7u|5x(W2RfTrOcopyXU7D>ZE01iwlB!JOv-+T8 zC@P`CwiMTO^eprWIhidH^|S>;hY8st28N|tiM@lBP_c^DKsV77itd(CZeMPqq)|+< zMNz|LN6jz7;~aIOiZ#=@Kjo)d9V(?(vdz8{I+Y+ogA~`asL}Dn5{!gvhE`!)Qz$JB zFJHej4r|N8kyVNN%2}g$;jB##7TH-NX-wjJhfY4R;j;Z8F4&=qmNW3YP;V*^962A; zT~tb3?1fm6I%(e}Yp=~gx6!(yXSA-1;3rQ>^0bxoKs~$^U@2MNIQixq( z!i)~z0}o`CLX7$>%of;9?IOlNxhi>yUAg0=UM?+5-S*i(a1Km{IN=S4xhf?IEwYSo-1z zSYX*E7TJnI0ll2BeMG#(MZ~e<%gQ_liacHpC#pk3T%TzBXpSmDU~wtVbwZG`pkt%K z=8`(BIu$JAeeQ>&!H(UN4n)-ovE=uB2Ww#8t65VR zh`jB)ZAbA$b$lrCQDU9eY)-6kRONaXCys_Z+pS6Y;&RsgcC}V3uvJC4=J-C$wR`8N znVQ<0S*g95cHyqNoQpiKP^(rfjP|nog-$i|2Bg55oqyIL&xL1 zTCGMDS!v30?V<=VpFG&@PE7*zQEFlUGVOB(Gc1CDA5J3g!wD%=OD zdDwBJ8%GLmCX+*EL*PAZ#~;Ls?t093rYGzBaW3OWS#;qL2_7yj(;tKo!<|ERUCQK<5TiJ;MJ#7Lc$F#RA%PE7q{w9|XA8)Np94q?Wy!Z6=C``C7-A zI}q#BbE0{`|9Um{G0T;Pl7L^z%4*SNN`I&?8ldXM>QNB(tvFKGiMS=;QHn`)YAw~2 zRP0PxBq$ik1N2m-3I=sJ#znCH?wfwziBgsm5%dH}7&EF8f+s%z-Gx`xwhm%&(CXyc zwItipeVA?yYr4eRP}UYkQ( zUIm02A`So2&6DHE!kc84Ho7HE3dzN7dS@#pluo!LH8M`SuSJ(jtLd{A)zDPKv$U_n z6vinzz{yY)T`O|jVxmxsuHGJ9|Cq6dWIyBBSgT+si|!U3ZV~H)WcRWyKc}p39m>|p zGM}-z9~X^8){54s7qZJ0Wd)1dzZ--#v|?NuJC;^;9oGt_ejs**I|o1HFdavng7pp9 zaji&0v&s?8<0M!?(dz^?tzbW{H7O|@$nxM&a=n0Rv4AN#noG8rTIy2KU^>U(rqA{` zr4trRS-812D#4QVKwR}5mQ2U{e!U`&j4`rkncaR7b*D!}l?bbkf~AKt>AUW}NiB<{ z>SKZIVW3gKqX5>QtlB9QlTPhQh(j`Q^(x%y|rsiW0a7!x$^kCiwxE~NNAazs~Mm$|7&_KeX4FOE& znVJy~x0%Fn#0{aq4MS$cc3f&8I0g5QsvcMcxN#*`8YZDqHvLSKEw`gJuG$?s1k>rt zF_@Gsp(`KYpn+k8Zk^CmHZcW=kdil^K$ULWrki6!S==z)X&{F;`qP3+W`@3Cka)1m z>$sgXqBW*_eH6jCaZw;tq-8lJeNt^OZkv0oR_(Ty)J&^sjhkjq?Zvm$cD|DtR9ZXi zhASlm*(yOxi3!!>mF&Pa+SjgCJn8JTn;v0wh9#-QsXMPt1VY`$j@G4Z@-3L{l(pek zDkqw5ysKj6*NYP`_O#mBF8PgHIUER@J{;|%0_rU!2)JzwxGBR{8mrwL?>|O{HbIdo zQYhF&ytKI{vb>fUSmr>qnSkk_;-FfvJ^XuOB7?vOS~!3?G@O*y6VOU!UtN_*4OI)_N_EnzP5-qY_pJzuwCMG9oBIE zOsj4e4X<%m#W99yV#!=$>6h?bE)~?-TGfPL4P9jX{Bcd)_9yXq^Y`?6bxdVX%AZ$p zR!{+;l+!Aq+0sxx4@ym3{J5}vFL0x-?0>Z$q`?cBtW)GRt%sp}zZ{u>`2W3=^O4n` zHQJShb^W7Sl-d88vC5;7pwC|5m$)TO<=Y2ko)Fl{j%s+06M={o^dOwQT19{EW$ie! zuvsT;VelYSC_O}|D_!^rR#pVovz6C(!c~r=<{&#C2a!vViI|96C7;kYTCREU&d2P} z_=KromPMke#mf9qTPi19Kl>%sd1t?3oTIL5vR{*5%9qFEqp^zXpBOr8EV)Z<1kYFU zv=SbI!O_)mIW_JnR7$vWluE>rD<${3St<^Vqa(GURcXQ!zWR9GB2!1Wg%?tjT~(az zDhnm`JU}>{CdMtbK#)!rA?96~r%yt=6i!A%qgk1jZxLISa%JJB=KQ*oROrO4lZYvfpv&w)%qXCa zZ?=bkBN)kLH6-d>mEiLh4I!R?Dx#=n!vh!|P1D2hx2PPbBNQ`uh&2ntfmjcBejFo$ z3SvWx4gwp|I8`R;*0?-Hp*+`>E>4$?OBW~hxP;m%jB1{)XrO9P#u(rBG06)n6Qjep zx+Y<1l(11MFtBdySYA}5>yqj;v$(uGp@iVneb#m^9U(YTqR&oZNpORPPYiY}1tLmB zmDE$DL9r#fW974#vD(A6Nx4&1s`y3{FBiWLOj7;B6;l$$jE{!ut%@=ZBIVRluMptQ z?3}^meXKYe9MytAdJQRAEKpyTQ@HNmobbf^5+{=^9t%RM6aV^uW~3DcH4C*z8!2 zE$4vd0F+WggM^ig6(O_|zx2rZCu0w)Isx_!frHNozGiOhYpeLFRwv;esuVvCt3|dJ z;-6J9JW5q6N8{n497%EQ!0bI>v84WQo_0HEbGS7QC&^7<^AZpN&WSIhh6OZEPC!T> zqCHg`*5}$(KfS^+%!Pzweuq;J8a(!NRNzr1z<5?m?7kK^WVz>!j+_mD9A1>XSYcGW zL-`oFDrQ$AAexPHwVuDeog9+7_eaacR6ojuMeFLxIkTXAXD8w@9!Da=6upCA8CqBF zH~iRlt8r>Akd)wSqi5o4qQHsK5R8S%djl#L)@t~s5r6`_5LjfgNYk-OsVBkFb8T(F zxxUcWE{R&mAH?%Xv&vG1JJTp)qBCCU9by_H+rCgeiGbY}LPJ5jFms7Lsr@9Nd%X>Z%K1?@}Iie@&enu;;YKdQSulwQeg zvQlhwH&I1BUMP9Ko-4Xdfv#%9L`WalS|&3$+Ii~gaH6_4Gm39B9U9Z0eHhQu0?e6f zXd>6@p-M_i-sveaA=FJFqgtsF`-(ot6Bb8_G-+`Pjb~fef$ru{EYp7KEj7xHQa;3V zk9f94Y$mK0F{a@5Mh{yctn=GVJs*Z=dhn^FuCF<0QJ@Tel z2%<=_SpK7At!3L|Lao%+2G%6ewrWShOVs=faWk=yJqv^#O1iV5q-tZ`ksJ~G`b_f) zxDEGUwJP_vc9FvghosChhU50#=E=LSWJ2G}0~8$ZBNvr}dTIovOxsMhw*X~O zJzh98j%DiTcw!V2mul>Vh^RQTvvYOH9q8N_#>2xeQb%juQbL81nxuL=q5SZZi*OajM*}X@rMKKg%3N{bsJbc9 zJ*9dnjC|}OcyvC>B3iebo7`us%>4*hL+jE>SuL?m5nRplc(VuBg^r^fBzbkNQU!Gf z9*vGiR0rGFXS(+7weg&+t3YGKFQBDLrl=69HbSC9MW)XM?Q>cxrw&i1G7^lS#H1py z0QX3hE)xo8I&~0SOk1CLawCACuu4wX#Y)X1b_s#woLVhR?ONLo zTjA`{@zp$1M;G#nD^GH8czdP??9Q~|HJ6@E5TfM-?~E6z=QIMAJU+Tnm7q~IH|#R#j+!v4fF$!0-t<+o z5e7ynm?^=X16q$3jpw4eEC!oW+OEmK#uuLr3MDhQ+wC5;Ds-96Y6hJ>G`@OmINsVXpDCe>_8KlQCwo)LZ65eb+F)+>L>?Wa++gGcY490NWh$pG) zRV-FezEC+{Tk)LiDT%h6PS=Y@rM%W7{y;5`3H24bbV!#bB_nxW@>sOy)@q(A;+#cz z3{J)9LtB&D)3vR3Km?)To{>8#4@O!&ns!@aa{~$ak=QS zKor;1qnYRBRRRy#Sn1Gb7?h}2V_MtfB_8?hJ4;P5U8dUK7pU8-#@-e|wRMd4` z&Z_C{Rog<6EmTaim@Dp(%dePFEH0)ARH4KTUZehGun)9=NW6OO-2={ zbaYe&ZsT&L7pS+^crLMxpyYLtB~;S}hN_n?7@ZucW7ti3A*P5PPnK~I#KlWr*0yh& zs>w@u9x81XF5$d!R6vnY^m!_cZJ~A2>M#;*3riN_1>9P$j^*|nhFr%XCwURU76xH>bQBfVKq#Xly)V_3~4m3Q!T2=j)KdK-ha4FA| zcUW`QFn;K~N@#HsbNJkNH3v!ID=o!IZP5Q*+g`&d~16-t~ zuGwv8ob4@{(7WjcgV9-|qbj#cs87O9A>Y(+$SrE+UfbM+be&jw0>n{<6Hbu8cbx~!c9%@FC=^gka-~q?jz8oU$nPRbI8aUJ zux*_`eoms?P*-8ZSPgx=XW6+BDAF)tZ9Bj&HHs+aOF)B9*jio*EfM;~@79I65`ugQ zu8W6&?@$NsYka5Mq-7A&W(57C$`dAEPKn*d<^r9YJtDECk$l>>rCH8$_1aw$j)(c9 z?o0^+L^#1(7e1(_LRyOpIQVjE$k(D65^V!6&ocsq%jkL>FEq;`6jPWl1>YOQvyzP= z2G@Z>mqUnMTsk^>>Eu|-o3bs3n-#+Ig&tS6M9*m>Pz0R?3fmV&rV0`iZG2790PMnwfIY-Ke;7tU<86q-bOXHqNcZ0wn^ z{$d{Z1iUv(O~OL8t!i-Y=$cIN=BZbgE4;-}jflUfn2S-p#3`z6LH@au!wZMjsQR!k z@N_JOOKAB+tIImIOJu4KowdG>isnMBm3Y@nP0m7<`(e)e#H(>F*j*PkQ9OULj_x7h zl==)rexH!`D$orcM>USu-IiG4#gp;)`u=!4ITK@sl!yw+65(|2Bh@)7?x|;WTVRgY zS_&ui%O6*zVPGX&du#20@x1u^CxT0 zkjx2`l|16jgAm>Jp8{F6o(0jNdZ~IEAtb_y>J^*A2VqmIHpg_A0Dzrmhqrt#E6DYigBx1o5pwU>$^}hCDUY}gGo?{DA*N5 zJQq*PVj$khJMKPZTtf3$FUmpAk74NO<*M(3k9%F%g$YYlC{~bRS-^S`K3H|Bg|V`$ zBho218Mc;UkMSKj7g$^-^I!F1A^uRrY)sAyO){n{V|o>z1cJCAPF`S;Z(ek`B=1Bk zwRCH_;Xj)P+FnveRe2=W*)_~4Dgh1_sAjlf%Yv76q^!*y^xb*t4>vHrUXe}$fgBNO zUM#{gfG7WgDzC<6vAsHxZsB63#;OjoMeXY=AiLNIAYutgD3_T3UP%EWGY~ z^bV=Cl=@mvja)}o*<$9>uzPcOMU1O>B0eK;7SoedW}|cexO1N5`8>)5P20w#QiY!> z^G8M+8KlG^3ZHs>NKpXl{?*QQ$D+Y0*@C8qxiprT9CB1pXDc;}Km1%Rrk#rMnR>i+ zExuzI(kE&in!su#-a7rqt8CnYwH1rnEP(cfj!X^@D~Aqv3L-oygLyP-RJ~ACONUA;C%rdw*P|iDm4E=_4;k(4Q7&j>McS zE9YtyE4ZFi5e=OJhCmqf9%=QQw6v_b*jb^G@+&;QgJ*vlT=ocRSEynIQday)g-xP@ zLwatOWPw!J>FP4fu;uKOr%d z){5BbJl1`Lb+dJelViMZl$PibvjM9Qi%>6wZYZ=pSahkQ2R}+e5tmelxtxa3YpbV( zlA2|Pwo~GRoj85RCxP86F`ug($GAem3}dR@n{J&t;wXc~JPJL_Jw<8WT?s1jy$u>R??9QjAm>;Ri2O1MG!}AQMrHF zlH|p&WMj|l%Z*G8xu@M}hV9T*-K97S!)Hf40YPN9B7QH)O65|^4 z94PVH)mt{|Qd{r1-Le+dB?a1L@+#GGkpNP7Lb1=*Qtlw)5abUj1N44}=yck!o*vXM zWUA(7k7-#pzL8v%a%tu(EurSe$CwD$R7D)-a6c^~C#C!5@pxuiIe#h514cD9s}^Jt zsN2uB!ww4x-doBE0gu@Yin9^~J;Nhn6QF+r80}<}g)SXY@>VSw4o=yb-+~`L#dU<zBvjIO@;wEHVmK2|>+LZ|YznLSVI|tB&zYY?)5A zeN`WLXQ)n{bblyM#T%*<-Q?w>38G^-_2e;l9Yw_%C0xdG+<7pJ)(`F>Jr`ERN=e7@ zxPbN)GiPL|N*Y{3OZUa`aBXq~ws8(0niwpv;`ukSVEu-vlnUU1l>ly$>G`J+;K9e^ zVir+281sT($~}(VD66zATzi4Ol4wZ#fhxE>n)o1uTynT}#QSl)_=(<2&zj_*GUYO= zfqLnZd*w=qD^IHOk!^A;U5_OrBl^wcU0h*Vm@oOnrQp zLsCK64-{O~Rs|mE$$Y>b7+SE50)b-))yttA)#U@(E&|FB&^F)^<0`Q}GZ&r*rd?e2 zRXlV`1&6yU=J*5IF5;r#uZ;shh+-bs3{5Ll&ZORsO&ylf%Esc=Hp~ndZ}p-#ZfqE^ zOf^5QALG1hmQ2*O*jcJmJQLJKse@ZQ`nhUJYj!#+p__HF-7#gX7LS)lYqg1l-S`&q z4v~s5Z%*t!r&=u+%RP0gW>@ejim|NcX+<0w52F`uRz*KR$D*PPG>k6BSL(@eUe9%> z+%-*=2=klqkGL%$iUM-UR9j)w42Cc&r~Q&N$gNbIDz*;+fl%;_ZsWDrcAQh~j7M0K zD#r@Nafxnt7+q(xL%cdJaEZS{2}de|j}Q@v2cgr@CQ}$(FPk0Qs^Vi}Rn>cfto&5( zcQi&8JVnU3L`9efmTV#{CPot4`Xk*P`CWA$-hZU@Vzo}VP)<5e%R$H8E`d;DSfnEA z@G2vB4f(ooHFRubGQ2D>*Fi9&pSg3v&r@%)I+(+Y^BV%OUj{2|t0R4Vczfar!)-`i zZT>G(LUp1oWMOpleB#OfQW0ITA`ytq#GZ{g1lBX7hFawyA!LK zDZi+z<-`Yo@Kl7g4rE)_7#AQaC=SYf{Xy6jzQ>m%b&e*ZICO6012U#{!+pJQbA8mm-j*5zdD<~vcbl=MD zrH#A&7#6{>-^%FdaB@AnegY8@8(6gxx#umx*8P%4V97L?S<7tkbbcS!(wZG32$a-O zOb=li8MWQ5b#_NZ8y4A{vZ=*}RAOJim$<-d7;W!~(@J;*tec#$c@$$4Xaq7@8Qxewl09FZm3&eHSGn!hy9U~_B;hgytv*DI!4 z&>Iua%tqKKsJAr_Lz|AtPmZ7_f86C9p(JQ@QE3Wz zy!VjrTy%^Qs30w{d|2V2N{hF)=olkGN12c=hXxdOdBgKkEPmIQEC9!NbMBNyO%5ic zSv5AelOJQo|%@HqZy&pob#Vd&Z>i?z-Psr*^l|*`LFa0QEImO9;1j zh7-A19OFx7^LVsD3)r$lUjPykbf$G~!_ZF71RkrV)7UE8g!E?t1e6wY>4+Xjy#4)Q z>3$=?&WsEXH0II=ueTp7bo6~z0qg4!E>6;K1zo;Q2R&zV;nbKeKBp6d**`+%+rtxm~t#y7t35D{plScERI_P^xU%Z9+ z1$uHQhw1)$)r>;ZDwl>e#Me49@{{?InZHbif z(xBK-*)-UyiOKGKT(*Cl+>%L|@KiXpi05kZ@6^FrM03;L`BdSxkT(=I4c)3A!}JYp z3aS_tkRRu5aCX>2p&(B*jcYjw8S+dZN0}+KgsgqT{DO3_`G(yluhI=EF;S+8+{{a} z?wKypVFD#oqb@+1Law&Rl9vqUvL8sdBbffiXqdd7_)Z7 zh01lAH-ya(zLgZNt|A0(H2a1Hv+%a*WWMe4HM_rw-t)gfx%8;sm#LFO0tW{I+&&?# zD@HwRVnWV7Ig}@VZvWjsn0|d~CtXA@a9L$;5N-ca4I6pbPy!?1}>3j6H zInvC~(4v)29ki!9SRCD>TyrlcueYNB5Q-}yI79&%eJ5^j+FOgcrUf(Bp@zaD-Sq@Y zd0Yc=GAY}MhSb5maCR(?ivm=3Wkcmp6jW+>mGxj=X~%Ihp!xuJ1UbJDD@|)|or_a~ zBsu)AwR9xoq^pbL&zHw1S7+y+eP<$sF{oHzJK&0KSXh@6ApT3)@kyans)0D5ozey^ z?eBW~SiJ7~+jM+h3Z^2XLX$S-Wb|yb8x0Tl^u=p=2XTxKawGtTR;*%zA%q`~)Y&ph7lPp~#sEdG@m7DSf{K(HKygSxprG~jFAjLND~wl1C z$CzP=1m+BBK8}=TLuEN%j8^>jw{Zf3zBjnAGA`x;3AMg~PNRTk(jLp(+t?JzLawF} z`kk=;f^XEbbkWrEjx#o;pg%NG!)gHsXbx+TyyqG6m;X=&(Cip3GGT^?h@lw05>suG%|Hk6Z{eY*X1WGQ1s#~E^nDGlII zLD21>zt&+v+V@#xmyoL#vSbP~@Y=lQSp~F3Y^6vGL5W8P*mUD+-Qzficx|-IXY58t{?a#sR<1|Ir-@uEnb&WOdJPjhk~x=c}GXm%_xG& zB4Q*@krugMdCIq+OiP|Ttx!Fi@&xXNRK3YaMorqmd>d3cHWp}XEbo;PGB$K91{dnz zunIl3(xVx3f4K}f&Y!c2x8olpC1jr6W`H&Wc+Zgzpa;;T0Tm{C2sujM-<|`JATps_ z`cA+S!ac+~j-hxI^0{`?GeShQ2shgJ0Ke^^z zN`v=Y2^>rre25hVX>*@kJl4p{+{$JA^xNrY z-)lI?$tWRXM|%Mk;6|UI%e5ytL7AX`UAKQ@P_ieVj=y|6JN<3K^@<5@09ye0O!*0z zV~Yw#XVmL@#VgxagB$ZxBiH|{cT;9Y_kTd}s#Jg;W>&$Mq}??!k5?G7JjUXZ@*VU* zNNe@vL)l^wt7MdB#^YEqB)h7JO9*)lkjRGq>GhTzp(CtnsqXU$*hElSGMEhSQEHa{!5T)eA1aU#Q4UL=W)BHd6HgHQ&_7p`OI4x;n zRV(`c*tdc9uYsGtg|ICEv8AsN8emU&l~>QA7W(j5sI&GXdHIZRfLe_-7QoY2!N?JU z#e|W=XauX@RbhA#{4BpM(PsOQOAKl{z~G$?5TMBt)?LNcHr$-`=|?gO_DUxEPz(ZPT;KM_rM%;z$M;SE>{D!>`? zpz|s8@mrr>UGa&g9BajPP?5D%2}J5PgM!(F$lhOQ-qz>~k*BLT+E8Ewbd$K@JL4~; zjSRmK?3A=rAq6i0eMoZkl6naMgc>nv(*Ripf?IH+dWOsdXg#aZ@rl#~w-;x>e7KsN zj-wAiD~0s-Nx)8a!`zFriPKM9yULv9+mz}zKwtFia@b@l?c1ryX=v=^DQAbBF2>GQ#7&0Av+0ek>01>sE(F>GII z>{GYS1LNnPFVCkT2_xr{L#4f@B!R-!8rZrvG;?*@Id|TWHJ%vK-H-|&?8NjO_OdB6 zJJZh0BnDwLlntpF;T5msx}Mc~r%fjcZ3o|M(uOsPQiOT}IO_o2(otYiO&}h z)ggrFEhP&{3alfAj%0L^1*Jur95E%b02`!A z)y#U8JM3#LwP~8S;fsa1o0P4#kWGLL4jg`QO7p?gp*osaVE0jyqusWmz5z3lUL!N< zy4~cRwPQ^#v^WqBMK3k1;7v0$|5I1S@o2WQxwO%k==y;ojN_Ko7zVwNyU$`#W16>S zkBoE^9jIUkP|O6vqracWjDGj?WO8scAUJdZfCNNY5Q;$|qNkh3jGi%KjRU-E6A@e$ zNlW8FFX-U$%`mZjclwRv$9v8ZRiqMF)2ITdIW^(uM4E0m8L70}t<|rgIV;vkP|pR{NCJ(#8Er3SKk%6XXO~~j zFVE%xK%@B~X;xK!a@tmuLsV)C2<_XY@OmI{mjf zF1F;lL)3twYJs7^f0@pivBm=K3`z)O#n5z&;h4}yJm$69-aejBUWG;uD&X)UD(C7( z=?pbFZOP+wSh8e~s6itX{u;2@qVl0fKl06dL2l%; z_aBe_7Z^*6@_s}*y@N*A#M?f16g8+hQ`VRwcqJfFrA-LQ8A`m~dxkPZxzGEQVyCDh z@?wyKgRFXD`zd4v&Kdf zLW>b$M5O)E0H>$4BF1C8I=+xR-uBD+*>u5sbcCTxK^>4{cLBpeXRd-%nc){2wZ@qR zS=rELjdV3zNZ-lf5!R@Wx+=j!A8CYoFdIEg(qJL9|2z^bi>9nGbu{2LAX7=c)3n}e zNc*mUZ|5rr9OxP)Sp^{z-6dTQZ}EsZ)R1N@StFwJ7$wiHap$Js(;DQV6s~=s?~p>hQ8>jjm%dc5oSxOMpEgH<5tHr2pmg^XbKze>({&1lpz& zp)#%z{`S8#EEuxJL;D=jZ_9{~kATHrFJcdG{qpJbllN9%b)a-1nhFtK=B{eaWsmgX zoE2*%pfN*QA4B461PYB1fzJ)~mnjt4xP&b|#qg$)rvP~zo33)7oY=GtYZNieJ3`hh zWV6U5o73JS*D`6rk)lL&k6I1LFPfsNrq}O%jS)wRl5T0b(ot&z1`n)H$4EXY%E^(8 zQk2r2DriqS3vr8d0}?^J${lu!k`gw`($Fz&0uj74X&jGBhIHR;k3W7q_h0cGq#1bv z=qzERs5`S1J&w6$Th=6#R#X^@5a33iDeP74HYD+GM-nEuKJcH7mVoe#wTguegXMFN5J@K8KyMhvQbwNLn7?Tcc%d15lsvOCJutvwy*wHL@l`znK(f z$HBK@Icrfd{bkhSaGkSaj|6f7*nOj%o@CMY)86qoF=o1hM~f+j>5KGA z4Jl9|sbFQq=fs#XVvU3HC5gUvL#+W&e4obl@W{vGX%xq3Ahgd=FGc7VhSIu-P3-33 zkvS{YNV=FdLCR)j23sHq4DAu0k*o>a(3kHjmOfQF^c(tC9X&z?0pl=uqq5F!Kot8d)%xON-52=Bu*q~Affn&4=vNz9lj=TWO$Fl3Eq0}NW2 z`N<+s>@>MgpGei1*&e@tf5xscNxd;TlbVVq4$;YDXM*KY1BLwNha%iqv}lcx4ZT4l zJ|_0hBRJgE4&gUHv^@#7yxm5$fXq!ueFi`Tnk9Na@`zOX?>T498d)yrVKja^dWwi4 zOw8}ID{1PI?dRi9{@Z&UkoKpa8`>Kj*!MWE7}=aPYh*3GK5VoFy?r7h;9q<)UvaV@ zZ=6Zlh$F5 z>x!}sl9(v?!EIbqb;xRi3itOL@qmwAYqSusZMbP5!3<~%D2;b4b#dxnID{XfB!q&^ zmGhsguQK9un#~xo#(@E@8*nLR6>(c^kkB66FeX$SwH6K{y|@Bkj>{TO8beR(Q~UBX zXpJudOjQ6!lEM&OO$N5eoiW=?qIm6mN;qeA*RqG+9S z=|P;LS0C}nD~Y9x(@TP2|BW$)XC?zJlq2>AX{7&Vr;EZIOU3Raw_#M z@532ratTN=AsQ&jy7)t_JdD}nlF|&5fjux`jAmVVMDrJCD>{8eu>~E1vV{4P4sied zZ`z184%+lZmIF@aEELvB|9u=z(ouh$>WLqp!EFs)sOr?DXNBa9($YiyvJU%Y|9!I(qIibI^d_!@S#`PdyZY6_+JxYd8ra1 zdm$9!|8!c{Csvp-VvPeP@0>E`CIsb1D}?!C9`X3)iY*L%95`JYRwPPTka+l3nx<{o zqaYBF+yFodE`^4@)#tus6x|hG&wJ^!C|N5lfqp8Dm;UjGk2Py#$aYEXhjs{9WMKnU z->&dD(|WD?(S8QD_%HZKj*hM#{t=!S#Sg=tgbqkgev*r%pR{Sx!dC%{rlpJwHVAfj zWA#M$xNA(lz{G~i4DV3w4#>j8w$c~VJ)+hHL)HhCE;5Rq-b+NP&5o8x8ZLEnJ0=0a3!JZunX0gyP&IFZnD*Av8R0h^|{vrk{pqB#G2 zJZE(@JS0vj=%WV*K)*oTPuZPfO&=y~d+gcP%dRzA>d2d@q>RD^n<49^x6bMd3YBzI z3aFmD4NYQ{4fI%jj+MUg(4#zRjkN7Rd}Ijc(rytTp0{G%%?hcE90|O>i0R{RIGo84 z>IvjGPiGBT<3XD-PXR`zNEFpsrVkpQ6q*r+*-D%0m&u@GG%Pw|NZC~#|K0?QP5aDi zU8rF#*t14QgB0mwSm&g(98M-}&1>`0)=thpUtO#K+tHQ9wIHQ|4L%4Mt+hdqSiS$8 z3kI$6wPYhHWi{wz#oz>t_g0vjBb*us*RY1fLY_deiEYhjU;Es!`q9mrv&M#e(1yMy zz*VHk`!bzR_M$gN$!SHz9TXkd1G-zoCJtB$dSQFq^S#VjV*`jxjT4{}DTO9Br`^i2 ztth9FDXOcn39OvHQEbV+T#O&nmpy_3j z_>auPnl&;=vD+3Ve)v^6)J!z#6{w%RQ>p*$*Xc{a=nPQgfIwpsB1)i526*A)GY@Ol z$OzN9KEqdw?ixTGlXUQa6kMLK*gPPcL&!d=1RDq;kXc|pGh@bzHIj^c0PPa&g()F< zWR4b}vkbwwcgGj+*0yz3Re?flMDZ0I!zMA)-RE%eGiZ$uq$`YeC|1xz7B@Yf*5^tk z`@DaKh*O2$)evqEn3IE^)81!B%-XR=14j!DctY0z1ep$9|J8f-ZuWu5)hO%|scc%HQ+exa%(NH!>x^q#NK)VdV^Q)ow0D3PcZCIn=E`szC zEOr>eKL-2fvrwljIPle|GeJgM;(H++?1>FtW5j{4uIT>{scDjd?jW_$`>0oDZE7SV zd^H+c|fUjFOy>hu%+Si(caMd01K z?(ZUjZ5GUAjvfg;t9s3NUBXw{wI(0H))L{P8k7zSUZ!yBLwIrZAqrO{U1Jo&=o$gu z4`)l7n;pSp+n%>$jiy8}65hfba_Ei?@D{>5Op1t~-pRS!n? zxO8}#v&Keo5&CSAh-QWcmBA!>?5S7hzn-p$TTApS&|;)(x2->;hY(3EF|#A zA|MvrQs^m7eZ*(3tFdfPKc0S5d9~T_f3%g8$O9U{ECd1p=dTVXrzBQ}$+b0Bt&xT# zwSmG089swjTc_5hcr?d02N|yIIxt)Sv@~d0aj=)M_Ou^;pr3lM-iEF5A|Xc?VO@r` z>|zFE;jTS~$@aJ@q zK|Bit-LN-#T!r*#S6!6_Q4dbDB1g+jwluap!o+1;)~Fa0vi3DCOi08fJyzUjTU%B= z8ZAnQ#2F6)hTxRjq%iknk0y&3NGt&k%0S}5{YeZx)X_qN7Am-@x_QeU$5q&zo{MCCza6~W|jwGaVNeP>@isy*tELkH$yK)nN zB~~I2l=ZcbJngJtHHbPMPRuOybZXj^$4!0Flr^Tf5K81c*yN-R5o}h5d{T#E2;9|`G$?ux z3%M(xancV7p>o!X%6OcYKGv*}QOYa;cX57ooF&OJ3jN@;z>xhtIwGw@Dk;C<=Pu z!zc)uX_C@4r-aAq`R(-M$L+75&wu;8y(ELYDriDnCIZq*{|UlF5a{da?Xiwl7`4W^ z$>R!HX5@s)fWV!kXM{(T@!Q$w6)l#W@^sz;$^^?D0xsM2L;2 z$YA(i27g<@d0aOU7*^`ouyF$u*HuuTtkH}SYaDQTGPhw5rJR5YhVhBdUNAWhM~;ol zfasUQXN*UP#I#FZWyO(XgEutF(g2hQw{uQcZN+Cdm>kO}%SNTRC9s0ajEFhQ^lj>O zF0s>W0bOof{v|CLr~E+;qwqKirYNB2HU@{Y;N_mm3Sh^@tNA zO}UL2F2TYh*n7$NM-IlP0T%@Xkie#drnjK**cV@7-FCf5dl%9^m&OH^0uyt1tP>wj zb%(3r?F8uy-#3^XM6&f2(+4EuW6$AQhL&*Aj8HE?5Xsc*ePSvfdt+Bpt%uaBM%S~2 zYR2r*9=CNLYqsm?tP~bNs0v6B_7IZ7<8YgrHxr?w!;2{rQ*{UpO_<1Vb^hZAn07cc z1EUFQfW?AT1k+aURUT*U%2AJe8_?y>@t)T->q;G08}``iR~ok6+@|ysAR-x(m!V0` z1Q$M=(=3I%!>e_;p?7Q3f%%1Hw`bgYwIzoW%M8l>91wv>p~pQtfyZ5xQqBzj{m5r1 z73ZR@7`BM|?J6ohOJvrL?V>Ja1wu~{!eb@kwrXnlV32f;W0q~(;isJD5|V;|!HbqV zoY_NtmH>s7tJ7I?4rej@q=X1e8_KD~l=*z1Y96B-c?>Pg24#c_y~mWRu(@pegd)ph zv)zUu5BW~I(vZAR@2-k5}meTy99D-Xj8cvfVn2jmKwVFB)?=s3ovQK)ov=R71|oKVh|KY~-gl%wcXrA_LX*hEj|k zm&ZQ7Xv%h1EtND%coFeC?FJ@y>9N0JX$ofKa1=#}3WZZhGAO(>ty!qAGvjhmS5YX- z5P%GXkyxMbK3pF&qZv7ekPS>Mt`YGm&_>!hehYQ#li6+&*;bM}K}a_$`5isie1cw~ zn3->lc6bNrs|Ybm5-kA;#QqB5GonRn4kt<83ZOQ9gDl>*ZzA?MAeP5A@)d$rDd=oO zJ1F$;!W54**|II$Wg-Q{F@!2vjj~s5wg;a}pgQ;bk0Z9bs*5Q_lTPARWH!Cm8ge*_ z6SZO=2W)~QP|_#GJQnRN@MG*Fzsz8z%c|gdL7b)AVntMKR zzlS-8yC98&IvKbvY`jR5_{S?A=0+}~bpy7wgepgX1t z4CJv@C|>O)$vcPR!WeSANCd?ov`EeN?|MN6!I;op}l8{*9b?>Yr)?@ zK9Iw=L6xU6O@tmtvX?pAeL#!p8mZC!Aw}I(W()QR+Lg6AsSStgAStIe09;WFD(8D&SWF7myooy@4%-BfpW?j8$hKhnLXx zt(^RZKVaf(+O8wiu9_%^nI`Un#-wO`;Ej4{J~};)C5L=F9q*M0o{Ij0DU$l0Vybz1 zNgc@HM(URAlW6B;lzjlLst@Y}k@p|#$eBe6(v7W!5>OK-W^;L4Ng~^&G*nXqYHOO6 zD(0<0YWRNK83dBUk$g*-@sX-zD)bW65@v&_J=V)ad=PB6?;S-_u}P|H$E~8VXfFP8qZeva6V{ z_j*$fM+t9V2Hvtkryhkf6J+^*zUfho{KQ2J=^1)UQy2?K^XM7j8;(pHvfTu0ObOpD z)drH-o1Q(`>%3Xkb8`3!Ni5o~q_-4u!nh~Ld?R}fhqds2Qi?C&K%-kTTywi!9^c4o z)IK+L%hV7^GrE;4&bMW2w(Bz3!vvyT(l(Igg&CSpV!}tQ%HcbT;}OFW+*Ju>=K0LkbQNC@PHZ)C~kFfP-QbU{b}If+VtL7%SF`7w<=)#0ct zu2A)jA<}F8Yl-uAY!}hg%Wb*}rRrOCef`5@6P{CBb~uOy1(G)C=!hxk@i(EyEA2Sk zlOYD%P!y#Gi@0N-6!zGB=f*Q~4p)kXv{41`WJp+}_a(2==!|%@?HVo*B2nJ8G(qQS zW9qLSd(n&xoWnCPId>V0l<15=uy43|of(H?5}HLi(W-|vg+zo2D?B#3nbC~=l5*Zs zPl?L7;Sy#F9zF!BGe&H;Aa=lMM9V;11SN1k?*mZjAYHV5Gnl+Y2}~Z zT{Px!QH5+x1@qm8Iso03X2N*{nTy6oj)K92#uvCTAnd0)Zx)cpZD7%q?Jo4gp<^NP zi_ps<*Q?y+bNg48W~-tOf5AkXwaDh8+gOl#HSvST`MPY);V_})Ajg} zmI>t|JfsL!q(y2(&fd_Z!+Du#meP$*I|J2#o?*{p-}M~j$b$gPY14|!4dTvKV7jz@ z@_e2KZ8t*A8$oLTcnEpmU0%^+$5-~iam=XiIb0Yd8>DWaw60R&X7sNqdYEBY-{ z0Xg92O1fufqM(L$Q1p`n)mQZ4qFvx`uBIkP1v{rt;xyYew(S z;WJQ^5uXp%kUDQT3G`X|2DTgyqv5@xmXmUKg*%|HQu!V^GvgY2ixL5ZD1fa&CV+s} zqw>h0sF^rp$#zu+jD+saoCcB>9Y}K*@!3MA6%!p^f>%8P_tk*sW_Qf}@rE;!i4F&G z<%WrXid&PEIn12;v-#{7)1w*rhVCNbC~9DNfkIzrz@R<{^t2J%EwJg)(U+E>oAVM_ zzaEIk9b{UW(czV-g@=AqwpD>v=B6idf0Y%7QxecF4a_C<|Cd=WOyv_%Pmg8flP*H8 zOs)n^ht5Xh52T*9VY>tll&s6zO$kgwC_S}HJXXpKx17T#CFJQj;&=s(gE@ipTbOY; z1yN48sq+o0Nkv@r0AP=mGBcWySJ?k$`X&YaBJ|msz1d@>%owrV0>&dp`jbw}jAKHeWyRqX zXjrPED>x#>IsG>2@x7+UGV%!scDUA32z;n#q~^f)=>(a!VY`F|lTDN&XHC3GlcT;c z`w-}?(Jgg23Ge~piCag3~r^my{9gB|r!Q!C&=^Ho4Cf_EGJ1cqh-nyCS-PrYPK3M!W3I z3_2Xe7E6V{t7!3}?qkTEeIWE+I>95Kp>I;9v>^Z-COQgD&ctV4_D=VtCxZjkxHFbROj5%yXgABpusR$G+N5OL~Vz_ zxgqn^m)zgZq{C?tJyBGp6S>S$;50C7zh&*E?mY5dEA16Dp~f+YYzPJPXZ6|TjR^9B zfVJ($wC*60gtJ}Bt*mWr&*u;}_9PQEF=ZSs47jxi@MdKxe3FsT(e>N47S*dA?t|`$ zWk3rW)d-q8O|jnt^4m|+nbD10MtSGa9vbR)MV9f>!} z^HM+u7EG?eG~|DpcyJIRH*-%Fe`#Z(z&e zum;#1?QV3MJrV`+PicXGeyF@+yv*x^KxlSAxN2o5<8S{;`AkZrFT@yMe& z)l@;N(k@10L1sYrYv!qspu6qf4Y=@@9;5;_DmofWl;m;FA_(n&+@U1{AqRAnv|2-V zZ=hMPvf^-D6qK7XZ=fCwBd}Sfk-#H1pB~G|O9(6EaUxt2d@f4vYF7H(*`{sSE}=K4 zptQG%v?#a^(uIf?{3xb~uTiDNg!Xv*4 z;W5UM+cvfE=TlycGR|!y%iDuQpQ5f5K`q+c6_je7pL%%pPWi3ntzx9MxWwa5W`uJ zWQb(Hp*4rIXbWh%7OiDcKRGuv{SCcV*3#HU{(=gh-Yik^j5@k^&BelN4ldcUUB)(n zOdiDHgoThSn@gw9(R}vK-&GPGIj~%R4Jm5^vS{6Zq9Qr zmrUBQT|zpv%@b67NyFy7B9l))!=#d_!y`yNf%b!`mPW>w+MwQHJkm{*MjQ@7WI62+ zi*G}ck&&Sw_xe~<9F`-0w4fCPv>VaSvgwh~K6(U`oCe^jZWLJT@pdxf>J=q zoZf(9GLzb4ubC8^c6fwF^BihX;7e65k*D{DHfhA+5PAbL04dT8M#t@D#mAZoHAns+ z585E%h}f@O42&?I&xSTR4%;128o=2=-xu!4DKx7u<&&_uJVo>C?AumI&HT4Cp;{~p zVLd7nszfFO7TM3OmX-G7NX%R%BR}ai*3q3`#ZB5n(uuV_|f`ySgTxst0ueRiHRuMotCt+cc zLeAQgHhA0>A-b6v)5uQ|L{;FrGN6G$(**vA<9R!_izIQ7ivm5J-6bv1%0)f}jh?q> zd-mze>BZ&wXQf)|zs8stIdB{fyp~4D6$On|h8+&%fC48D8+Hwrq$d#fDQK)RJn|>) z-gGlbuVMp+yoV`xt-F)27b0Hh^Pz3`#u6%1EQNd~j@rxs61}#T-s)$~6tHSJ0>=gR zjT&XhrIreT-ml-*ti!c+69lO z!@_UtF^*mQ#I{>O6V#|Ff=o{66fsyipJXsL0&yDBlL=r zl*8snIPx2Jq!L z{GFpI&xFw{+%JmP6J~ydwhK|JqPd-}zzpGDgbr2@@ATqg5*XrGfQZU-6Y6L_1TwTE z(_8U5=j=J$M-D7QDi3^31^(Nlrq?WpIeTO0b<`bYUqRo#Avo3Bv)7TXoi}IAb{!XD zX-iFf$A!#CpQh$u>oP3 zGUtOr>Ce}h(T)5D*IWeKA`~?=0qxYmy>5GY$;}wE-6mSlMP3myL*=sR`EY%{vs-!b#)3UC-lr4iqDi+-@=T;O>~^YLoO_|pnJ*xX)`{1$Mk4M z?x_%$h$_m2(%RRx{z%lzX(P5@nMym#RMPRaOKB116#gX4ABg1!&ESTyU>n~6~lf%oN z?Lq{!h#Tp+D`=^Lg-Opv54e{KPgg)Y1nHHMvOpY>(pay+`C3B`hrz8uUsJe2Bn&RM z6`k3$BO3WBqA0$B@|(gARis?smVAg1X3f~{K~!8M#hZ*~0784SihT~^t9RQEEV5PD zwJP9Z+Ymc7O&FD?jQkeH9B!&I@B|3-k{J{pbAM{O%cYTxTvZAq77Z#z3ti@>4?=yC z#Y?7acLiM&uoJQ$c1SJv=ai47uRqT)usDt?+0^Mc1Gomo7?QSn-M-qA!%+xXd~4v*pf?Y2+n9@l>>9D8)*6Ukn3x=5xl++Ob`PY$>Ht1lDM+A(qw~o>%Sd zUzb;>pSEAle>=U9B;32RnaZNWV=a)Dh;2#e%!1Mg)xEi4hXYYj1uR68jBc^}+ ziUJhXd|Kl}|ATYZki&i4)AOdT$hdF{^uirJ>tfc>$X!JlNZ>(;0|VryhZ1|lIkRR) z?x_)T4N4m804#-u)53?&^6CRu=6Bm!N>az7gN++>FNR`<$DyXS$+xoSa8?1%mwg|Q z0)jbpUzhYqRQZf=jlUS49Ah;1~l5kpR)_8y$Qm{LFYpF3M8SSggE(bL#o&D?8S7c@GY@1a+tZJy-xQE!JCgu&EUpB~81hj` z-arM|nS!{_!J@|IXV&33Xy@pWLIa1CA|bJ<{d)ioR+t_6u>~R;MlqxbF_rm^*+@L% ztrbRXw?Y(3_X9XpI1FUdRBkPNXXp@Cu|4^Ce0jMh-AGQ3TL*OPD1Mn(?CmW(oGW!o z`ugfR1i#i80Yo3_GX0$gP?Fg(kNg|g*b|;5Bu+W~bk5&@F8kWGU7Ug&2)jhE9wN1% z?{_{yp&l-{@ps3x{{4%v^yAsdzx+K6#VJ^~E(Xz^1MJmX#+w^6j;-F6Jc zAhl^23u-iFk@tK%V-7dM4?x`mC?S~L1aV4j%zG1_8QI8n5KYDr$g&)6-eQ-@^xk@B zOxf;AD1bx2Lq!_;k)4LKPxN+i{Q2^D4r=N+KG|l74G{DpkqZP=Swb2yBg_6Bw+ zpsm72+4EcbEP%zajXajKdDjtCjL^}7C@@?LK9gh7*2rbZ6d_DaFh{35T?2Yu`$UU- zQ_}A4zjJ~DY-vttg`=$AC4}G1qQi9*h8Y{(H#y>sKrQtcec}MGF^=39*7yziW>`_B zQfyM*J~6A8J==u=ngLh zd+8xBQm*{~GZC)r6D1y-!8g47>G<+j|D_2tF)I>!7i!liJejNG>rFXa2s03!T@fIW z0VeRDze$+!P@e6}Kt1f>as5$RNs1}1x^ zhvZT2nla;W6N?wALoiP*9dwXYYcn3RV#dtKJxD}Dp#fC~EkI;Y%vd~bGBZYOw?G`! zk!{2!kRIfvY0dK)$cg_N0>cs~v@=HJgnzIp`x|??2X&2kGEL z!>0>sIN%eAJk=!e(YEuqX}gp}AlcrC_6~j?QFEaE`U}K^mQ&OHA z(*fgCNSd?ba2vEMB&oPK11~{9!Jzp(uFZ3HMvek$Df(n}LWVvE74N^n&U`i7H4r?( zCk0nwPKzgf^4f@J%<_4~sf1V*wR-M}!X5~e`fUt3oI{NdWgm2S8&r%bG-yK}$Df?& zlOq~?hvw8xMkOI5Ovy|t!w01`YsPjDIGiE?A`_w{+JXvDgNf_Ahc>!@dVsb3;qHEW zeY?HCfkW%3k5@mHH#c|n(b416!}aa&M@N_H-#`6w^;3|22iC(i480&8D3S@MM>jWr z{dp8{jV{6zwb!U9*x2*U|FiwC&x!tGV(REfu_~QDJls7@EXH?j_58b-iTF`WQMLoU z7QpWS;RZX+yeYlSx?kPR@bufm^;4^cwfS5AxUIjJ57?E)5s0hJcQiSgk`#`XRW3>dRa5tch`?N_@BY|C1_1@5z>V7nMVJ4i`n1Tw~vq< zq<^#zx9v^FOF!37k6}jb?(EZc*9b4H8fQO$y*k}~3({}p&2#(6;1VbZfjfqckXpm5 zr`OZOBa3&Z-?l$roFBhCIljEw@?W$kpMAbMy?77dUD0sw+uoLc(nI?_OA2;Rf=FpU zgP42nxj}yT+%F)BmJTJ!~rSG2=fv`sM2+OWF97(`_Y6OGt{6 z5auebO-$q#yi8bY23aHU^$_~h)Y~DCoBJTKyn1xo{>_KnqNhN_#n!nhrz zelG~_%ZJByTd`IA!2_UsiUKwmBz7}NpDY><0$Fa`r@QU#^PfDRr0*Kha6n5r*pway zIT76MK8?TWM9b4Ut+m{PrRg|K{h4W6Lf$#6{7DguW*IvWRT$?@mlA?_Ms-sR7rbiVSD!O z^z+r(`!kN(nMJV15aI94D`5HttUFy8WyeAYcdsLQLrT%3RXa%olySaiS^ zaRp{8hJM$?Aa4H#seXX)4Z+j-%W40Riph~cP>-w?_~{;Q?tV!6?f4@D4&v&$+ulFi z{qMGZy1u)WC4+n$Rgjb#R#T9GP@j4<-jzO0*>fKnB703#N!R(&w7U!J{XRF$TrcYjEmWm!|TEMWBar<52qxD z92`x6G>XvZs3$`ZOa$S(NjUlX=O)XIzIlD2>K5+QqxE8Y$W~ZW`jbu6t9I`qf-N7YDrebaBtOS9(F`Ma+lPg%(q z|9XMVq^qE1r^y)XVUu+8kxq1AD}VgYr@Q9)Mgk_x4qBGu*#9i^6Aky!&e^^LvBnvxoK?u^IjHezpCC#*(A4r>mT$0Xn>WlyH>PcB` z*xR|m&>aKQve7%8YChW;J-_5;cL}eOAhup$HE)rk1~eK(1offGdrkQ=v8>_E|D0UD z`_?`@>hq-wfwqJo83~iAeXwD|Z3`|*4CI+oJkzKGYzjOm> zfoH({jZRG*R#jqB8t#xIh|Tvk#`M~Jf33C&9;{bm z0G?gAj}zijrZbeAeva8iy}KKz15vuLv6H@N!iuVg2q6L5nca2@hs7|K8Gdtr+1Agb z6#jYFKGqM{_fL0n!v{;5M(mHE?bsFiPVxy4cQC zbfIg}Q8)cnQwZ4I3>rU@CcMiJtLHC?zKV8JFd`%mA~ThySZ4OtuZ}OSzJ8H~v)Uq; z5zu_72*Sq#)_LABf$Cw@mWrEueDKH9-92B8qJuOX%U%Y!UT6yJ{VXo#X72F8dfE=3 zPVaXJ;WcXmrN}OxKl_G{%5LtjuAkJ}YS2i8wx@%SBBS2SIPEt~W{>CLV}n4?#s1ky zpzr~UfV6!T0B6$6YN8Cb_nK~ZdXd*i2UHPwG~}f_6bcO#eko4U-5)RA<{%Y~WBM6# zIzG%X z)9}z#*B}i-QyP0~7!}ccv_AFvP5IBw_3z)G%l}S^rV~-s;W130w5#Xi7)-1VOFYjKlOBha1@rPRjeTy1u!7x^5rM2giw!;KbbC z!W;(H*}Zl8@qs#>t{$ErpFXyKwKw|J3A-~Y8!hd|q$C?1bQDXG&eT*{eQbnn8w1%4 zV0;tV#@TFWkZZH=PTwDY{YcvR_~c`d$TxeZGi2||`iA*Q6|&}O9r;e$dwPcMiPe

3XP?s7RhcmRY0U=|U@it>6>lR5xtYpyy=W_6l%{T{5&v90@q+WxXJRF;AZr2 z9T*QSApea#M+s9+6QxXvRqqP-#_`P)HOKO)9lSMUngwSpyf=_}*3ImhIC{lUrLCOL zMaLE3Wn2)+(?)589*dXeHK~EF_N;Wb!~W1EMIOhKG+b z%KKvNQa<&Z%+<%^FJDd_Q0s;DnpYf8WcSH>Gx8p-wNw=y-)2{j6g?lZTd7bOw0Ud5 zl*Q6W^|xlI0Hd#t&)Ct2w};g)L4yYf+>##Y6xc~T-!N=#k{{1L|9T2c&E508@Yz|6 zamBSD=1_qxQ?H?^W>(Aa{^0(2{PU@U(s;o(ZTgT!K)J}V4K23bq8GD%`pXX^wAEib z-9wAGzsRG`FM20;7>}Fdy#ucb*DL0!x%ZGn{dANI)%n5==68A-eZAPBj|BT> z!;ijm5v(5W{=TJVS>N5azdv&o2Zkhn{zd*Q<;|ZEBK!0CNqJ%L3lHVrM@JXs-&az~ zIJ@PW{B-iu?Eijr^w7!=><~~#M?XDh)lcdl_08Sm^Fzy@8~F?VL77}ZhO+NSC}e7GH=r&Q=eqcrVvVqOM?DAmlA6kGJ?e?L4y#CJ+&1JAczueqa<&6x%cbo+Z1__Z3 zkQmg%3LW6=#`!kzF_;U`^aeBwduR^3ElGKaId)dEc=R!U`uJr6sCF{(_ZMG!*P*M$ z6}?0~j)WZ)^ZrIHNd8JKl9cSrpWF7f+5TBR)!$W`gv=J)@(?A$ z1lWA$FGY!qe$%c>sfr>8uB(KJ zn&=U)5M=-R4p`&wExW*Vy=D9OhhHMzg=CmoAZ_Sr2hL6=8b98oPv0LTRSBS}~N3BXGL zqcT`0sJ?+4H$CawVZI_!PfpZ>^X}p9&#n4=-zhS{Bu_e( zn6|vz0FebG?vY=7Vj^LUSL8gEEUHcbH^YpLw_G$Q_ z3aL^+oek5g$pJLZd^GbKU+(^HA4boK6XHNNLCzQusYdYI`uHsO+vbKXB+`G_K0TDz zPmk#b_17s*xVsnBa6r+W<~gDiSjkAzsCSyem6>NA9eqcatbKfZl8EZ)=z~sEtLSKI z8d|_hz!a!gZ8A8UqLv6xo1K6!?#+Vd61$i*6<1GlkP$XrNi*yQuxe-EAXCYly*a(b zVNDlVri_iC!ZiUL93|WenQ>`mTBs&2N~_ITpR&y}GR6hzJS2VTMbe*gqHMI*n4@in zOKG~aEt>1=MCNFh85*It zx9k`*3hD&QC^c513fq%5Ok~OSWA<#;V+_6EiLn$%p;KfhEz8A}N zfF$Zz(`SZ>3sSB@chscdtib3amNVqnrvY_jxsN>)bH$$>2S7Y(r8V zQUMO?sK{%oBl@GYw|{NF-_ctT_J7(o*AmX;C}`DSp+R zSMJM*iV=5xF9-c6+_@8XMBK=^t;PXU)m)@(-|5!?Zy%czX8q&waa9kQkUD$T3u9 zSR!YS2=M;>Cw>8>90_!SD9T3-oUDt#P;vMHP-D(Rs|`_?`UQR6$Ot00e?hk$bl11n zBolrof5D)+JA<}_PLxn9p)tz!D+M>aZ*6^Wzsu$K$)KnNN*Mtbt4PkHa2EH7b)6kG zmwIDeWj^djjnDX*8!6gt$c7N`!xI5dsELAqj4iYUV0;47Di=8XpuUaiTQ%e2iyj?a z-_j#OdzPBvPj_eh>EK(f8X)-#)J>^J2S@|#x-Rur+5RJKYJWeJ_xED#6LA?ec-^ta z9skqJlCoRZHZXURToj#6=B}A4rc3_~&7kB-i3{|44S#*mcj@aw*K5p-;y-i?b5gbu zUk(n39^3E(3>EBh0({R>fG|a^L7AxzqpcBrW_f7mOk9Pnu(I2vo2a3A6slb)#`J!b zI$gi`=+Or%f`Sxa$0d|IGg(qKnNuA@TJQby-M^tJU(p8%X?rY^;|T~PWPQww>)n6# zvqx`ECZyuA9f*ENQVm4IoGmM!t~TYPBRwv%CF$ec^MgtNqZmPJYk>$sv&q=O)TfE% z(b+xt8R~k-p4~l=A=>f~Hch%cni2$ff>d!X(B4?5rV-K-DsJ+FQZI1xOYP?lj4_}q912(M6fdMfeAXO$6Z@N>LUNj!(qpi0Y zOiXQxHV09`YbXP9rA;eeQ`tDDZ$?(h+&?-RWiMto40d6hg=3B>F> zQwRxP`T%l-)xzA{FKi%oT|t}iaLeI`FfRfZT9qIi*#g260$A^lF*QFX51QFozzksT zis7|@2ZoJ52Y2T=1IS0c_>y96mQUhif_r8UvWt z4G0952%V$I%@)yQ8?SFZeBOQ&DmNmpNc#um5gSBmeZJZ7No-Yje_eyRCZ>xd5=VY7 zqfp;bL0tI!GVKz2U9WEqNNAVZ)_w6hw9(ltq8-AU61+I!y!n$_B5aU@rE(%qlW!j1 zw*Qt`ycYV*poBJ$oOluH{EXUTf0X4y%1hht1ZS8BrQgEENE30|?l3R|^M#HSW(VHf zJyWuiVu9=s@6>;t%76HLheE!?wgNTD+fW6`HYk&V6Hg$T9eoUQC7*qp_TObqXA@)O zOp`xf@<*RHiF5{-GHes(9pnY91a2AoLr*)Tzr6Jo6Fn71MRSR4CR{&g)&|4;v*n%n-dV(0n17M^m`nyWYK}*~x}ELw#MGnO^}HK>(J@ zc-v>l_LhRpT_s)c<`ZwwpNWJu1;*--ZQtuaRtw2`P#VH|2aF%uMT8AfzmwhdAQ~FM z6>OvqMKTIq7oQM8KPWUq>$kfoM0}THEJm{hkoaQYGWbgNqsS3(r;fWA_&UI^#kg_i zQ6P-uf?jgEHBf5wV1r;P&>K7|);Dfzk+CcM)jmK+ar}6}avod`^i)+Jr@vl4ht*H| zufZrmZvZyvpWB)}VD#5S6DmZVn{`q;)cZpM3WXjYQUo-+CMGqV=tGnzaS5R6pYpna*6=rsucDdk7*jj?{qta zxvB}BtYQ*T^=}>uE|;peFlL9%hRlN6@D4uW;RDpxT|TORjkYC1T(iUFU>6AIHV9vX zwlArs|M$T+kU7Dr0NoTX9Krh&BG^LQ424;s!=2YWIS2{n>pzGLZf+Fv z9t~y|F(j9?#0!0y&v(`_$Zmtu6O__8Ky#QX*a^tjcsb1ZAWFGqLU#-lL{I~-TEG3? ztKX;u8-j3L0>?cV-fr~`ZE&wbLV=DqW=&E-B}QnmFdJpEOkB~>Y_8fERn(1e)31Lk z`yLvz(Lpy1#~Db44YiAvuVz1wqy{aRnUHMK>D+ncaE3$O-)k#TMyU)m!f#JfOA-^g(+&!Z8 zFGcck^!WYy&poP@cS0nE2BVC7YZL#eVY(Cc>CfTtUSgAEDm8@; z-AU*dklpE*)sM6ZLmAT9C~I;x2c|Rpgw&^z?i%ID^q~Z}h@8~X(YgA!1Sou4VM$bh z+9;*j{}RZa9vppi^!`?UPk^g3=lkrZ{?UT~=Y${7U{w{=oIgL^n>)u(&ygUJNej%H zcb<6aS=yR!+$1ZU|C9OAQuqP9vB^Q?faCV@6(961vd+5+H{1eu>3^tpL#Uz9@r1Pj z=GOi4bN+Y+=7#%U4M@I#<=E^X@>PaEJ}3+b_Y{Oo711+zD?>3js#_0!0eMA`vgj{! zhS7v(c9t0njl^I;3JMA^;7|1ilIWa`Ocd6>^7wDs@1sy@SI@Ul1C(62t)U=D=940~ zp6V}o?m^jKq-D@Rq|JcVUao06zI(yj9-t2j_>7(NX;;Anr>6DSs&+p03NA)BlzQ{j<7a zNJ!cK_p?BUzZ2_2@0NjFAjw2WxcWwgY{c8Ty}5}vbc0MfB~JJ+d4z&%1RJme@>o)h zJcK+o%+B-|kY+{&W?{vxeL6&oDZn?Vd*S!1Aq6lYjeGB1_4JUae7b`|?Ip;Kbr8j( zsX&|mF8ukQu#E^=Qa~RZ(sUGYf$|-9{Kys4=``@l^p1eWSD=`P&>8~V8lVV;I(8$w zn=*`LKihxM$pNllpw64Y z7NU25g#vo7O0EK?=)<`2C2Y5|9IRDBeePf)io^&(Md=-PA6W*0$zjM*%3D(*g>n0xhQ${)5!0|gxPTiUD zac_i7aP0F!r9{psXXs;;R|8)~>OUm$!FikXEhGEk?0=3FLo;zrZxS%PqRH@X5B3`_^5H8kj7BYW8=VA$Mae}9kSc7<{oTj3C#)Wb z(*n5_s9`#gupM`ap3L`!pGsR8rPY{HoaTav;{wq~axeAzgbiqvMNpa)8`nfQn@7vb z?tIc4>@J)6o?aT6Yx=A1)AlOF=<5fwk-UE3(Bply5lhjIbruKY7l8&rn?u+T4yrqn zI*av3C*shpSrh(cq7M>-B#9v*f+>QG0^&A0q-oMS{xU4i{j7(0YDw#otIIAiB%ko!>7-O8&?&=0WM=pWC(R!vMXW4+MQgm~uCP#?vBy81n5+0`r21E9 zAXYN;9!f=ii)1x8CT<}ewFCVoI{q?yWPL|vM=>7o9@W!BONjYr$-EGRkev6w@-E-p z@#UI#DFImkRz`?Ct;t$(OsQ|ze&2#nf4sXTRq*tWyx(fLE6}J-l9TU+Vg|`o?cmi< zflUzdTp@Wvvk-C!^{rMv1zIb}$&ia=QKEBT?l2k`QQh6?xMh4fwWC^TX@ztdKuIBb z+$L6Azd0bD9Jk!yBP!dlNSb(R{d4Flp(BjdkRad?n6%ytHmeYk0U;CxolO&6p!wBa z@*FNN(5L1s$_!~va~Q237u`WZ^9|yUs#B7iSndVS5o+lIfNPEs;ftxkQs5PT?Om&F(Mw&O#nla99EjrMM()p)AlBJSU+&DGXcMtK&L@ zY~R&;6U0;1apyyi>4 zK3U7M*l>Omhg5lK?nLX~hkihs#Q`WF#ef@MJpT&_LV#H#j#eZUan4J}RdSi6*wYZ` z5l{DM%Jt(yf`n!@Tm_L6C+3UyD=1pX?ojijY=!pji&slY?zI5vOx3weA;Wv=_o*Zb z2M5H>p@K@_#p9|uQ@B(DpUWcY-hb))umcF)<%U*7PI1Ge@PhRP>bL-+PgpG|m(-+@ z*ZUo23rgTw3CS@VQ}*KLAkLX?+LB&VkRO?Wgb#P6;XeG&Q~P-S@EaWmp1Tr3H^&zH z0800r*CmprLM2{l1JSWX`#m&|^yu37A?5o|W58oA3( z=}3RD?Mf)$=gF>-O(9S>fH3KJuOZ#wmW&olIlRNY=;3KRcsNl2Az&*V(J?Km`Vz3~ z(O&)L&j)V~>l0WadQgQ#2!yL%C@=mj&j)Xw5qrS2hSme;!KO63%fZ9-67c)x&x%EC z|JCV&qO^%ZDshP@>mI(lvw0oeGB)v?pXdZE zye``vy$E^3kx9m@M>h4}+i5{?hR{yRHJAgPaLV3arP-SJ>{_KiUfmfae8r? zPTAcj;Scg3G^3a4VbgrL(H-!bu20?M@m^0p76#3ou-PfLGui`9wgBe}9YY|vdS)WnGHVAo zm|8fSU!ZRfDI1b&Fu&Ju1q`OvZZ;fX9bh}8l3#LMmsBo?*pL16Irs%Yc<56=rO+0{ zQhhD((2obd5CeOl6ipSL>piMci?5Wjh$tG$)>{h@aAGJgM8uW5R)s795izU60!K9Tjq>Ya&@h?;W@NXfg zHSu~cftN}5Aec44IH2Xadg$)q$Y1nmTBMRPpqHkmNfxx6O2V+9RKhQo1Y9imjy)6R zA}E4pCg6ZE3>+j}LB_r1hoD9bzq3*qCMhvkC^%GdNyA2ZPz9)c=Mrgm@g? z+VpRcsTOLO%go_?X zxocUD{y#`^3oipZ16i$zN9w!hg&V>2#U0or4EiT z2N0sC;rKi9b##ijf(`I?OH!CR!2T<0Npj>a4&ccEt3G)(Ayz%iG$bX z?V<8Tua=tutiGhw^n&$I`$JgSlK#qos7ptKUS2W^J1o*?7bteXmnl0M1!)QmgVjh_ z72yL#YraL01L znv({T@3s38<#*DD9h*@kVaI+`*l(=q_x6T*M-bkW|M^Ek!MmHkh$`nmhV%a`Bg)Y& z+VrJ0ORFvW{{$0(ZduEu3La8 zly`C=_OkCGsZ!s1n?=vfkEjP!AiYr$C*&JWjEZtVN?J===3vmXws2zK(I?(*(CUUJ z+*DK#CBC3fQrAIuPEZS+W0)V(=dcJq_m@A)tnx9<2j%2}P6Za{0$Lt|_Q4Rv)tgE7 z7J-vw15;=0{ZrQ8W<0U;lY?%_yMDsEzg*wd?4f|ag4jp^-9Il)NTiOQXY_Q02?||46x?<*!y$~{uSnbWa zxQX;)9Cx$mzZY~mhp$1Ut9Nu9&WGpnz@Z#y1(b?FpKAm>dlF^c!te30QQe+RZHhac z<^%BC`9_Iw)h4&-KX>RnO0p2vVgeNei(TJR2`%no7tr`4ADZbji3a%j3S8ju4ttX!2uGmD~UX2)r4w4nh)|$veLsbU zx%w~F+%fn`{WE|pj*dQFKcUg7f2{YC{F{A@Rz6aI^v(e*6fWU`r+ffFwCRKphs1Ov zM5IcGIiTgy5!inPhckF*J-Oa)bO@ab^t;}OaBXU0)&07Fpwr&l%(^)2j8hFZ1Gij0 z-~X@|@5KU)e=1Q4fVVmz4b0`qK6qa`f*<+mtr5g1I;1(6^MsUsCOP!cnou#2{{{#= zi{v_@Y?-tv9mF{@=_W6f=ef3; zS9)S|L;t*AC-6$V!1ADZ)M)HH{*a|^9ZmMwAYuUw1#FU}1r&?c?EnR8@3HBxJ)TAG zJ!7EpGK@VBrcv{E`5-(%@~Tnh~LXZ?pupwX>*#r-}M!R11Jh~hmM z#xC1uYWG>YAW#@vFi_9Z3wQmv{ZIRFM<@j8^nIyRZa_4Xpa;bxD$l)i=YBV%-s8KQ z>3(;WaC9#6!#?;OJ*xw-&w*i$l^hPLEi@Kph;VVrTUXg=@+x~6n;gD^x^)aTUZrU! zJIih)^0DRpoQ?ShKc#1S2-K^pV7}m%DuQ?RYmR5lnyZDG9|Yn{(_j7M^fWgw%X`*< zf-3smP-L{DCEA*8&o8~~@K*B1FWVB(A#Wa$8i&f?*0@*7I zi2%}R^dVg5(hol)wAYHD4x1>a!HUE?7dUH*QCFPs+TlvryXS{q^ZHl~09*|Thm_X< z2{~@z`5?6?CxC-b!py#5wrLQ${m39)wgLV11L|oF-5)jkB8RUdKDTM3R}bU|pT}k( zs64hM%qRu059E{BQ0+50&&Ge1kN;{=hY`OaFg!8;c1gt@{KK`1er$B7ok+h5w1#xA zK`lz2b_ft z*36OH-$x07XbokoB;qr`SXo90WKWU8N}V~9B;n+(uW0bX4909ScyRiHvyz}{fYyphP8JnStk4uCUATT))W=>Pj8|G5ja^(W9d z@Qb!PNP|n6yn2TI^g-yUCC#CVF@)lh98mQc)%m52$`A90J@gKMo6NA`|FMz~8Lx`~ z(o9HDs7KmiA(x(`SuHZZM^w+HJU3O}wr&Z)^baH;dE zbP#)+f{s35UU>I9c;LW;cu&Y2;VuSAh^`3SxYk~gPaswMddknwAROc>r%(@DvO7p- z{?Rr{{nU(e9MWIkldIOhanGNrhToJVr{}7ukcst>4+b#*v-|)fgSV5G3(B97G#=F) zgrgnaI^LlSce_w8rmwe;(1!HuNjrCZ37>NM?)6Xl%Hmz1t)_|HluTzO*ZAJOQ5r z=%}ONh)8nNq|f>1&(EECdMP~n5&TR5lxfhj4zPHTMkU?2WLkToj0?Zy8ID}k4 z=Vxz5Y5+U%6tD};S>KO=l(Hm~+pwkisTyKw2{V$3?=g7X&ppguT|&)M;|&-vRy~=w zE&(WSIc(x3dxw1yb``y==^ePLM6R7a3@V+hcPsPlm$BOe-Q>eI5XXi9X5j;X@zP4l zIv%J#;^FP_`d03!X23OD5InqL3c@s?-NqX5_`;|jIGOS16=~6o2z}wY0K7)GqxHmb zTyG|ldSmGFXEk6oBU>MEuo>pN7Od2kMJzKzfkp{c$@ z!PT*Kd2?C(B)XZ7TMk-0ul|71vp0xA{~VIycK^jM>PCp@eGlL2y0p5EFQb_uQ_ zcCAiNpb)Z88fr3dZvqDz1_?eeEzU1uGl=%+Iz)ZLwM&NML^xc=2d9W5jXdQEx!~go ziKM>p$KD;#{UNka&`4g_Nzb39*>ZfJv<7I2h%Lk+K^t_aPO^tPoMebn`_pI55c^}; zROro0kLle9b%x?%11XTB&4Ys9;a8nlrjGf&0|i`4f=)hcKOJcytK&4IH6x~8VdJ8w zlh_B9C!LK0Lf}yFWSMSYbAjUs5@NK!0|OP@Z2%4%%B8z=Z~`a%@w$2_AC#miHd<;? zLV7`po)!mTjS>Qy-aFYuM6_fB;hRT-FAxWh-_2BnLL0^%&P&LtG4sP(i$tOqU*h|mzwI2a-gS@td=qX*nEBJo$Bx8FUk zb`hL011%AHu$;F_`@Oc#Z^xH(3`SX)Jb{fNC>aB)peSduHNks%I35y>_IT7&cl2;1 zxP?4{*ke&NpkM<8?gsNq6&g&~>tl4UI9h3OXosIbt$s#t*uy zi8>ux4^ze*`$)$r`JT2cF=fnc0#LF!G66*X6{LyQ*e2)xVKQ)7^|SU7>tYplEN>_( zN^S>Gx!DVSY|oxGy2DaW8$-g!pcFB1s8W5X0&o(Gjqtj?Dzo`VfvZt4H4^l5H=^?$l z-8Lwzl4_S084!c~$5-{|;U!>0*F=nJJ0hZRI)qj{=s-G}L8>y--=@6ux5VrhZQ1OS zCibWA?|0_YrU)%p@EDUmMQ9_?uIw8ERdkX*sD~$=blIdA%0d|aUH;K-btOtj7zO(c zGa!dRUZBNFuQwcjNCeqg3kMigQWNSW-FuZOrnvvdJw6V}_ME#8SF)x;qSIR54zp&( z?b1bV6u@NU+pjzl_nbh*rppolh1PlCs7_2R^xdwqe9{`zLgX&Ofe55@u!39JPO|IH zt^2T?NMW(BCX(3L7ZZOI8#Kz@JU@Ql@-&k`ovA?a4JYX zx}OUY{Ol)#dZokM0LT2GvW!Q7X3$4R?@W?*=&|V&$TXGbOdwUhF8G5s5#-FLy#+Ph zirs9JP?9G1rlLfRHfzud2iwTQ>0!?qc|Lp2?RJ*AlVAtYo!Nu-+f0}P_7i4W#Aw0l z3{M7*%vd;9!|?JRdQ`B7?E^%qawq&E%jrNWnnra<#*ub|?u4bJPqbWfz3Pd{;{;dv zBu^o!^}T$!Y|95~wOWt+fR^;|XD?b5Egy+q&5z3rO_WacpXF1{dgiXmCyt@Yt{Vvd zLD)y=K@27h&&!PIAbPz1vjMOR88Xz!i~Y^iqq(#ZzCzZ3nBHJxNYrs3gkL24WzKgI zYQq?BBNC&W8v(>Ob$38ulc+|i_>q$|edIH=O>%$z*BwL=f40&{6><28dh`a0yc9Lo z4i#0{Wd|pK?-PX5i^EscDbN-iI@kLN1?K?szuM$bBlarA;!xiwRA>hVuo<9|Q^w4( zy;ppnP@^)Ba2jeuE!6k~Q<6Mp$K5e`QYfOH#Bqz;y(w-~#S zf(7`frOh7_zd>)o%imMT6zScER|t}@x~Ehftpq*WxP0MW<>)`zWpFVJza%jEa%f7E z0GgV8>eo5m_-(a8@SDh;a^pg%2I7iC*?tHWkM)mhIDYUM~}o5=A#2!b_HS+Ows)KkVU`$;nqxPULr?dV+hx z@iO`TO!ayh8qY-o8=ZHkN(oWJ^uVO!}&GSUOFamiAT`e(|M$f)VngoOwYP&?s4W|X#SbD^XLS%{% zCn53}HFFsBgH4c|g31jf^wpVw9ayJ2PoYkYQB*-KuH=$h>y6rIjrW<5!_tA@w?&V$ zqM;kvmKIZr*9+3?sSL;Mp`=( zK1|cirooT@mR|vA%bV`^4R7%upMDV^due4i2DH%r0($-1H&9Q#+YWEU{wW`th9SKu zA_reVdPXD{io7%Qo>r1>FS;m^HlmaJ7i6WlhiT&}{dw?b`=-OT^VlBC>g3y_tNMpZ znWQ^;Pcs||YgYtokl}`O(K7TtFdSj@f9G&arvC9mLJDfe4r~eG1TpT`<&D9DIJg%K zf6EbD3_W`QyMQ&o=B`l$IlRUGpI?jtP^6};;94VFnYZXM!}0(4VnhQX6v8$vmvFG0s&%dRff71~01LsHidv#Ua)Ldi^ozI}M6sGI@ zt8aKa+UlzJP6W{L;JqY41I58q1Xd4SMP{EoP)p|2vc3HBRSrWO7UTwl$wHl{3=3;B z=+WxA@s6pcfbaUc-F}gqCj{xWhE5a3fV!$Pmm$qldbVw^H&7#{<%##{|D9*ET+WZX zs?_{S%xJJ4s&4h|JEIwJVrH%QvV|-l0RS|AU!t{iaGCu7BYa_ufjuJ}1IFaVgboF& z<()5mIEvJrkQrIhA*L~jsO+(MNA5@~0g>{~so_(QJbiThJU%8|MxHtL99EI%V2YfB z=@@_*EQCPJc;MIa#?L&CoydT}%vqOjs~;<1FJVax=Re!2LSXR)tConh90D9MgxQ37 z6}@)EaGaBDC?o7p<0D8YpYaL7P!zG(@L@OLn5{U*iPZ|^81{5HL77S1O1^3zYC0qd zDd%I_qJxEPWZ$HEIu1>LunaWj04JwuSELENeUEAfy5ph_j(#K#91EH|aXg5B;Z|Ts zB;tf3@MGE$A%mOeG0f4V*Y&vsC$T23v4 z7!N*S$wp14}Fe=z-6toV=`#ULUyi*jEsWhmaPqUmi0rP#^+LU#B8# zhlHF94L!OYz$3xqKy6OU3aVuH4SswXNd?#+HTx3xPbQ|@V6+@vMu~_h92A%hAwdL7 zkAC9ZVoH+^84^ba&;bX%wnO5`5aaehd=L`lK#!U#P&rk;gD?~b+Um>IW?fx{$v%a17o#t@h;kqabhDoWFjDTB~4O!h?v_y)9;<)1xq(p%oJ z;3*00N`R#`ZpRbLzyV3718QW5Zsl0srZ2iUu*a$<5qv`!-&RD%mDPOpJ(VR9v04Ew z)J00Zu?-rVHRXIp=vqF*#b%&ld`Q*@l)K>5fo$QTw{4!+mkLnt6$}8s47kk{#OG_S zC86Yy(ZJRS(vsomqfk6k^M6L5EvItB0ZxHTgdvo-H-C2IpQ7qfGftP z&*GOEnike*-l4Tw%4tH9%c7`z(r!b~kN_e@P9@?T6L_oz6gXpv4J#nAOyFs-s-v@0 zH7k*MYE~P~;$>WrixGx>FbVL<0c)98J}V>CGKR0A07eFqO#$6Wf;iXw>%=sD_wDj_ zoJ;|&mF(n*lqop9$Y%)c5$X)Repn1xK{I?ZYTv7?d$E-|;gQA$MT-d$Im@)=bY82D zqoIU>x^_AXVR$d1#jCzpuI;2lWf@tVt|fa*dsG@5R+}dj6T;~$4Ft2_uh2ckFTKe1 z6}BGu68TMR>s0@N4xxhu3979_{Vf8l+7<#6+8iy!oKAu0Z~uJ zamB))w_vtTBVDKWS8B!aIg0KDf=ZAeBLKo%!t)@^=Gz}gMAQBZ3+dEr`Qy;DVe3Y~ z@oK`mD4A9~+^y?j9Ot}(isVbXi-Q;X2Q$Wp&Vq(Rjv)?t@eq+(oT|n4=F1hh*&R|^ zH(vxn>z%I}pHPSYhIGLQ5U;UvtOB8R27A-G_Pobt@g2aINQMKaBE66NFXIWZr8`(E z`_lW2;Hp9I9alOzC=pVwZMx1N0kc_1nTgHVw)2((6xdE5Qp>I84Nf8Tmm+CL96W=T z(o(TxhPm7{ewjP)Nw(OL4nTz2W%f}m^rBD<^AbfJRw{C=IET3qO zMrV^IkQ{Y8xz9H~dBK^FkSXy?z^suOpVG+LPYzhI9}GJH*m0p1-nV&{6SMb><#Z=r ziq@4Rc!v@UTlj@wJ;T5(jS8k+Z@%!7s=)8{;xF6eU5q?a4UCzTg>Ky#gRsoisdwyJ zcYkho+t#c0=NgZndDa<|=FuLPWFn(-%p?GLI+L(1U?<)%Owt^q}dSOj_DVjC`I2PlHf z&fncK@^F!@M};SVCxrFuYnghx%7GOn#8l$a*sASI=Mwaz&``j%d)_z9_(2c6ah4$iJdLerQkV*{}J2F7^(nxsbgyeD3fGy<|1RE>ZJ zqC!vwu)o)9b|r$vPbuy})M^HjoFrca%1H7>Zh2N&DuC#nd(D<@32#0S4KhWHkvfi3 z(f6nnyU=?}!Uz|;-EbMHrC{-?t~V~mf)*!;CCKpec;Y(znX-@e_eHiWGGH~in9z0LN68Ib=d?S=D<1UvHPQPiL&-x|w2 zJHnh-L#@MLgn^DmZxWK{D2nTVBauwcBXiU!V0?S$=z6t?;AZ#~YIqiKwU|XU`?37x zn^!O1etu7*K~j^k11=N+F>Gdob&?+!u{d?5szjp6Wl^C-5TC04n!@8jnsF00c~J3+ z(G_4T3QIyjUj)+%5*2zS#dT8~>KJH?CP=}NS*dXq3shMPK32_<~Uu<=0z66Dv*rXN|UKOadxAQ zG<0=;dyu(1+@7!me}-q2>>zmJ%*M)$L8DO*({#w(w5wc*^81knLRs_N!h}Z!5gowv#|KeY7SAV^G_m7VcUXDoi z5Pkr@2^N)fH&)bQ^b8G*zpiv9sTk98S__p14d%_pCN0~{V}Qh=s!?agx|*zAu@le$ zdO=pfZgZlkXHI8NbI(EnM*JXRvtZqzzt?SlkTEmzl%+D5a?fh`DyK39p)wL{$9CS7} zcvf`8O2F;R8v-tspOuxvU5wu=E=x#TK@!b>5c^z9g|z=tq|(WDtngk!*U0(WS?r56 zBDuS~Zu8fIu)Vp9O^YiSctmM5=3wGAI<{i+!`$4KhO)Westt&1klcG}gBS=(6HX6o zfS818ZJm9APgaFy7MU!?#oOM)F{UZslrMN>K)aGTTJhL4P7Y^C#rl$jsklQq6CXoF z$`npk=5?_Ti26=Dz8Hie?9_)LJwCu8RwEtiQ#a zHE7P|bphTK;|3R`yshMcXWw9b3HCdAsPTV^yt8Ok6yh@`Lk8Heq#-jD%bux0>GaGB z{91P&>{JbYI8rWgTN7yYm7oB)WeH)(CB^GSdMZ~9et1@CR}^sK%CesC0$XvvZ4u!B zkQi_uLo!B3_WXES+ikwaD-4vMjYhZz?cF^;U+5E*5Irs8t$>N#VHk1*_bI-qN7l~F z&vI70uYCOT0kr%nmRSqTbhNMREkh{idv$pw7KYnibPhMdv8@7SRHa<3bTr4}H@n>U9`=@Pco!C%-P>)BO|+Q;G8w`SXPEKy z_3!J;;tpsycypYlWIiR>O5=$dlR*rE%4l7$h~hA;u=o}P_qo1F z(?BHCvxehg4Uh7)fX1u>IKrW~clTR4ELkpSA-34ss9iU$@t4Wk_kM@AFSCrO_S+Y~ zzj-B3fe^Yhb^#Qcc%{VMIldmG={b>!?P?>p3sF=^*g4Y)!ONLAtY=?M8AfY$Ck;e( zo!IHRCSMmNM6WFttLuATquHXHZQZWMKBqkSSTnp;E0RtvDT{nQ)k#md)4wHe-l<6l zZ(ETQyps?YyzAp3JiHWBC3-eb#T3vpzIQD_q4nZRku!tzKHNjRwhC^1B!xXwXIM@4 z^(O0t+gxw!wg$-yX9AkuYIUyIY)#xQ+mvKPQI z5rFC>o7czOh$$*%77qWEpCZCJ9CQ?ggl$l&)lYiGC7hFTHyIz`kIP0@E8s44D!DO1 zBmg~UkuNT&MExwf+}I!q`$J}v_94xRI1uM0FioGakSNS6cb;Z^uj~T5RX2j5f6g9UsWdKW|GBxm(J?%2h5(0=rPcBP2(jB5$AvfS-&L@uv#3#WX(0B^5NBXb>6j!mrvYu>g~PG>EQ$*%{j?0;&P1 zkM>|>V~%-7GE?Wy;`CSk%O@Sa9U}4#2q;FP47o&ob?e@L#=1*^@vOe$8)uNP3ZYoT zEUXD_2C12a!bC8~gZY?_wm+*H?gv#teu9sNm)DkBmGFb<-(HD{>2`KPAd`Y) z0qp^k9f{R={Cu-)VC3^F)<5vxV<}3JbStX7>4K2xzA+jXSF9B1yZBDA7=VkGr22*! z4d_2w6}e}vX|hDQ77@h)9S;7t>ujQP;XJJMygjaC$1YOd3y_NvVhUhkh%7|!Ty?t3 zl=}qlcT`2$x~PG)>oT<%vgtB?cot7zsDML@f=3@1cmOm)<0^LF+<4kI)ZS%@I7|WX zwIIyJU1IT~dJ1FDXGTc1=&gEGMnw=siN`pc1;WMFP4HSujvBWBn@7-Xi>oHr2ZnnI zKls2fma?{4$*uG`p^R6y+L)In99{S~s;K3*87~q*Lh`UAcY?UC!uniTzq zHGCIWvv-BUnUu#R4v9R7Q8YF4?7rnsDSKgZ2ZRf1@m01J=m?>&W=mPjm2PMj6JCnz zYtj6b)pT+3FMeGs2ACuAG!B7Bjah-yqeSLbiq*q)gVS*QHPl-g`P4YER{RLTtfE<+W^swJb<~z z=d&&be+LDndH@WcL*NwQC@R_t?%h6n#rLSo3^X7!Ig(*6OqE}^o14x3&Jb_vFcP%D znG3-XnT2AsE{?Hchz!W=$s80?(#pUd)=@`RPX}ct&b(Z>;#o@4n*N8?=nMNXGP{sxXwFgz8H;-uM7ERP?|I zWkb3Ltsi9DWj>2E0lZAC>Zr z#Hi$_lQpS#gqm7d{Nf}qks?c%qNmG1Kz!U;i1Q?ccZ5(cS08!=T6^X=2-xv+1?dy3 zC`z8>P%Hsd?%3Rul|s6$(oc%NxT-JjesM17x|Ah`UBYc7>bc}{LHq96Kc(xa8n2z6 zgxMJb9US4w{LotFVw0XQ96@+9Ggx&3;2A*$4bnId`;RRNw?O3sjT!`Pu=D6Q)@^oT zYi0+UtUbcLYf%2MOv#@19UrBEp_>@baTN}xk2(2d0Rlq;;*tUm(-)m3=?Bd z^#CeLM}$RiqA=$Wl>+;8`Vf6=TNOGLR3(n9%(p(5(;qA9 z-)U(g%El4QB?Pl^$B&1|+($A!`*q@I7W+5lmhDm~BAY=F{ux#3epuB+AHQ1$*$w@_Z|ZtO3b= zBm<4$lucqgdI;vLCzN0a&S}yG(43RpuJKN_@ruF1oh}+VOnR%ekDqf_19aJHa>4ZY z6+4&z>sLnrgdwVkAL4YcdQx_KL!F`8aIw0{l_s8sWd{!pJVcXI_zVpwba!#Mvok7~ zfl}}h1tOYU(c_JKcw@OmK=zI&8xDaktiss31kN~ovt1Ygyn)J;$0$kfJv{h~)i1Xz z{H$Ej7zjbcJF%EpP{oWWYgo2smp*FU4z~jV*b-VzRxbESkYTMYBetyW`$u)Xzh_u&HN>k}fB?lndAL0f!*@KD-YK$om#*x)X$>Pm1dkomcu7+_ z9&XI;;-A*4EUq`rWp`-;)Ih|s7<0TO;7FWj_v8bt5rA~&g9=-1O>BdVn~W%;+oqw0 z+=TPRgo5XI%^Mo72ol+Q!MW7&_R1;Ww`|`Nbe7Qt!2poJl;m6};s^$48|G!oQ%336 z923lOz-Tg|oR5~XBdgg~X@a^MUJM>RTBhq^ly-{c_Q$1%Z0{6bW?mDtlhp2YM)=O+ z`D_M{Zk#;^@3T~ngON8W%;{^=0$luu%r{+=e9d1V+U|smkLW26u`&W53t@COuD|)Q z>3(cp;uh2d_N>`TsFQrKY2U=k)i@b439`){Z*|*qz zF%eTH#TJky><`4|C+>-%i>8%#(DTvHTHZfks6bhxPGmEa`@^-bV$v^;VcwCF#VjeX z7Q;DTf&G`qu4>FTaw-yD{!P;49>)PMU8nP5Km`^nny&@`O+yw5;&u!GI6j_r?gn)~ z0TIUyd8ffW``S-pgtV~5p$#TMG&8YU83)gNyG5nf-x@_KL0J&y4XKvog(k4U4s}Zb zX38zLLP3n=%-?R??(!#d(172>2P6EZ3~6PqXzTFPT_J1o;^O7z`j%AWo4W@C#izTX z!Jrqa7XgMAQ8Duj$(;DetO?6`t*>uI26TIOSzW#Qx126f`)^rbS%EZLMec1(nybzJ z_6;nf*VfQ9u3AxYSbZY_iqB&r{cTCKo>Mw)i*X<7kS4N=GU85V4q&q(@-3i&Kr)bw zJAc@6=7)jpF@%(ypxX&kgs4fw&LLLK+(DEW5w*;DMtoJlEi#0g%{6DD{{HcfrL-In zulG~Zy}|rK9hC6$x1v(I-7Ys1F$mVD5CWJ7dd5M4OoXDxlJoxhKPWw zt~YCp=%SfwSWu8DQuRtcXz4?iwA=XMTlpE+h-P8nwgqp&dlE3Vah16EaL?IIVbY9` zDmdj_MtdtE#-E9?v8MMmSpBp0%C&DHeWi2U>@1l9vwe=CluSd29R{xlaR+!Z@{0Fv z2|dhcn@9V-9+5cwKw1*~m!?&MO9sI$RlsqFG(HYw*gzw0Mq)cLsiuzWgIu^Ev zrAb7$L=omCNjOl|o9GJp?G*~maF>uLfxV>@O3ud!u3oHDQ<<()wV{<$?OK3~z(xjd6|O=+DzI`v*KIc5G1GKhg)=iY z=}>bfdx5hTsFJ0ru({>K;b0EGmQa>tnCqx-IsQ0!CF#`E`;ouPIi~Bw?d?#C{+t|S z<5qxBpzRX;#N?%6-DzJf+}ZjT@JtQ71y(-TS!P4ooh@LP1`TE6Fo=VHl-D-t59W20j+) zh}qzvSXwask*pYZq$$U-Xd*5PT$0)*28MYWE9GRabQ3mX7O-qWe7W#(fi(aa&!2U{ zJ*^57Gwu}!fYuz4HgW?>0*;U^Jww^qZgUTypN7{VPOv;BpO!Ei&o3>!->0%Sck_KZ zY(;Yby1UdY7rjE1s-0wO&MFQv`!`EjKZ>~rfu_4c zht|x^%783(<^;hW=(x#0)Q-&$wo?jrExQ&eYsjI>v_#^RSO1d>U%Gb75G8p?Psw0v z$)7Yw*i+g+HxkP*txG&JgmQ9hKO4hwVg)kfrwq_Me9!9YShwWcg-wP|44jRg9cnoSD90=((7|v)VoeznTByOmKSwW$p#tHdC3`_Vk2nY-TuDf5i|%*LB3qoGndVwNOYeBO zvL=9$0OiF|mjKHmaO0~}9}N5J|Kw&oFq+4d?O79~&p?-f zPY!oBm~sn0aH!un;0kXt09M-jo8a{3G zL;re8{K$pP$lDn>PY*n4QJs$#(N_fq(A%L8K$ascHv_oJPWd`LMwuEGBVKp|> zYfujiefA2}By9v$2{$u%R-$fBtdTxAKU%zg`|;C@w=ZAuO$Nmx7?P4KNCE>6lurp# z$_-i97PIq?KfVEzV+fnX(g=jv0Oyyn_R;zzZXs72spw>{>p=APwWBs_2$Gjq!VFsU#*CtUr+VSGZViIKZYA6t`aYT!~Sk#`_{HUh&SY;4N`Hh_`G z*0!`g@B@*bPc%wc01(5`MP`)-m_L%?W~PCz*h6Ettb^>>44rRIgO)2uI0_d1GSYaD z9>uxA1Me%bJe-65v;u$}kfB0bjzZu zSG-T4%OlT)UcnDsA-O|53~zK|pY2au_GYf!N;odb#D)w2#3JMugwmF)P~&m7;sF3Q z-*ZQuRiPk(sz4NvLrHY=)uzYulWKF%D~QpFL&Oo+3GecVr_r*1CQHWP5g*sT<#{3m zco2+p&9T{d&HCy!xWXsZJM*-Ya|f&`%G>#tC-|xHLaw^CqxDr?ESqZcNZ6)$CbpcO* z_T#5N-hKYW&qB}v0;&e;Oi~)8J;TqQ{P5xBR}#PlBM+}Kc})*&8=C4~kO#W13cc`L z;a-Lk$$E3#{PO9FpA|eT*`?zlMUrFPG^AijB%m>YZHs-_bL$;nIHEtO%*Gu#;P7(^ zSEyVv4x-@1R(o6;q*36Zfus_a0aR$L8_I<49@~CTH3%I+(A2_>gdzpnKTqw+;5LEB zAJ7Y~-wrr`VWBrq9sj{6!`nY0lmYQ0c&@-q?i0p;;*de(u+0JfknIeZ#D?^q*z!pQ za9hBZBJOcO0)y}O39HBN?g7!*l79hL7GC_PkmpZOZyZo<1Me zWy#BmL=x^*7$woM(IxuCeoWj?Kupt4VBC3DLmcSwqQH5yxSdnj8s|4V%($L^Gd|o| z)SaVC4vCL?uJ1LDhI4Jtz>}NRlD!1c1>7?zD|v3JaA|Ci(xtc8)0#9y-XVr4k<5Uy zu)#j`smYUD`3x0$jxPkRJDh7d#MCG)_})9@Ej~ll!?6ZN7&S3b&k4xg4?PbZB3{ci zfEM3ktr+e^H{W`3Ys}Zhfr}LWH8NAdmBS<@Pe0uyGrQmp@Y%NaO#;b+0i6E_rx{UP zdxq|{;Q8{%E4={ULiQ7sXUqz(h6k>cS-}UcbQIxINkt4G5oQXk@p|w|JihQ;H6z3W zN^T79m8Z7avsmMnBv?3#Ah*PrviTy153&c_@2dtFc?Q=UJ`SG7y%gZy>*c{JhP4lE z988EXMUv7cI!;F%#K#xT!3$Pdyd+f$tBv(~KEBnH8#m%XNi44_NG5>3+!X%Ak)Kr1 zk%fdQLZ%z@n)i})k8k~+rz%2rBnrb^Kt4r|ulT9^VRGYE zVmU_{B=@-2$sT@=eoQLp8uBg${0_90eckPZ0#ZTpML7Q!cZ#9Sv@3fkia%Ie z2Ei|G$2Fvbc$YmNmbe?w=ebq*fhbkzq3Z z_Ca!Xq8@1F5%m!9D6)8c^EPJG^dZkE5>f$g|IoT+S4k`}g*VQJlHmu$gq#dkZ0SKk zedAdJD7w1r`axTP91{?6%4HCV3>?sIR6mR%)R&@`{p8F_NpnsT*#4qGm`*(Y-PAB> z_C@GYz{a{0RysHkkZOa~K=?bv&Z7b1+ z4BF((yGOw0)j79(i{#E4KE1=Yn4)_}24WHh_yRNuW5_(*-bJ+TWb8{<^ zbK~4>37M8$zT(ILPGK$DSI$*!OBcv?*8(cP-EP*clD;riVF?g3BAg3F3*7S_tXGUuUMIl;<@FC1OHcUD@PVLw38apso+=3()v8Z`>7m;M-FIoqpZuxH>QzP@3 z8kxt`FbJ?>hGo*z1Fj>*t!Yluiv~*URj|W1$*?s^}|r1vRwfrL6J{#rv#_6 z?1P34&)g2;JsB7-E*#*IUV0LaYT0*ZZbuBdq#_E=i2~Tfdpl>k3eVh*gkucl1xfWs zwJi0ST}C$Z%mwhuTgYv=LqG!<73PHKVu9CE?ER2zpr<&A zWdmoIp!{D8m9GG=`u{rT$f4Ma3w|MoLkgFY5oJ=;y?|f(WCgQ*^@p7{;Aztaz2K|= zOync32x_GS!ypX42j?FI%PD%`VC9En&eI)p=%1xK*<<>nAI*1 zKcv|789@H_vyr7uF3(|_pzn?Y4D3GXE;i|{wB$<+f=wmj<|CO=Jn-`S^A8DR5`>S4 zEOaDy0E^cd9&o)AXR4lfj~sa{d|aW(ln{!P6d$d|B|Clkz<>CYGkHjFa)%li3=~&E zy(V7*f+F*%wCl}3%+IvmNbrM_5NR6}w%(m4vmc)iL9$sZD zO2l%_VQzrMfoCvcO|?a(>*tJ?%iV2Gmw$bHu^KfO69_|4Isv>N#k`J;GjZR?nb|y) zBl-eULlp2*n`frJMTM39=rcO_=I!!o!049Ng&5`8j`ivg;P9Gn0zbeMaQE1ew0 z(`q55OHBqd$z|#ODj6Qx#jtTq{H8f`=3xa?=RCzqFm@M;@ zoPD?v7&+oj2R=@iC}Dcb3LqREYMV_2!+_2B+Ou&2=`1MmFDkJRAeFr4?&ZA-2T3$~ zGnT!~hL3UxI&<3;JhPkuCfvJrxd;fQi5iHMzaZ8 zl1Ir7G6QA-ed9H8MEi$_p2wRjhX%bsIWYkWYx6BEmTAD2oH|fFeh(m1!P|*A5okry zQ+3{+TDS}0YazX_;2FXj*`Z%&hUlpkcxD2ZRm4b<%FN5lt|S|+J$aCZ*%*T6xI)lB zf+hlmv^=yVHE>-L42;P&MjQ$3+2RlgL$>joOT<&<85dlMPG)}}!C9PFjHl))Q|w!0~lZ(8^Yd_llH*BS+}%#Y_uS$g^1-H9M3$>-2T!CSx?!ozHNu1`LU%|}52Ee}~!fQ2%` zybrV-7XtUe=H}|x>N}y%uh5Gj^j3k)s$*Qd56nY8e#jmsESs&%bpdL+9La{f6Bq_} z)i+C5M6H-=q+sDz75Z&g(AocSYVNR`H4720qc4;I`G&+#BUFP>2eAp{E)UJP|6bof zVlIyn$4WMv;}kkJ(r}S_<)SC%4Y1D)l&iboRwxhq=csf|hRvEiLLN*QHhr4B<7^!( zbvEp>qw33?Q`w=5O>jL6V-cfjVq<^PZ579VxrhW_XX&5{Lb@~uqJ&3u-}$owB@?1O67JCFbr66(4}Pv zVLI&Oo<@j4*EfRKH$;|1C{Sewels&+r;T?lcGxK}J;_l7R1o6(8XM0j#*^>DSeEvB zyFtLa+R1@JfHLEBZp)Ym2Gerj{rBbpqH@B34|87u;G~2Bm8L@*1n2aD0wOhp$3i&GOe0Fbl|T%D(^s4i z4w2__y28x!Jz+7z2}mZx;DJo{ctI_{_m6~}i%E;0gG5k>-b#dz4=vo~NJs%_H=_?w zfg~&u14aRJatTZqLH^%Ja;?U$=v-hX!9ov#6>n1L4xKHqTt$llqy-I(ov=qC7emem zs-TBjP+YYYzOY#nKrfRDkOPVUaLh@6S_#qyg05(`L)4NIS59mi_V6&8j6$+A3JU-S zP-WxA$nQKc^ed%LS{OaX7FaMJ5gx2i)PPWehjJHK`^LfA?XB_k&37{S?a-W7 zDJoXrGr%*{WcgN>CD;{X-CJpI)SIpzxtSp>C=kp@aRdN?3XE6RI#$&Uu(vvA@{gpmfU~)$Q62~h zi-yMRaJS2}&zCn|eBdLy9mPoVRt>LNoQ`PB>^n&8d(<2x*5(!bR4>Ys2nsPwu{1Mo z91FyDhi}n7Q{u=)WeRl%^?(zAG?_KLUIE@+v_dU3_~2&ftJBSJQeA*k0661bCzK_U zFuozmLEZ>`co@zC!KM#G@T!ko>3Xr>TwJ{TdU>T3tlIlNYVBWBW~*FWxSN`-lt|>7 z4b+yv_px3DTnBL4S`!Y#+--GpNw{2jBmdfLzP-NbHv0yBan1^PX~h2uu~He0VJK29 zRy<~s^~sek6v#A(79;`~%SccJEjXIgrG6mq;V9nTW5?^?_36W=UVWuyd``A3Y>Ei3 z0kguJKiZ+TzNotTQ2`pL)|;)oKhTUP>npmMu&j?c@_Ct_mc6T;(lETEC|FU z$9PHL3W*s`fO)r)kAJ=U{N|4y%qSJH<{}am3%Ddo?DY8;U|y33mwhjf5# zS(=;C^%l?Ampuf~-q&!}MLF6sBHIermh*m6^5ifW8KrYhT&aXUL~SBYFoKbI$I-^s zKF~1*W(=r{Q(J@_-8G;LeXsx3UZKLYZ*|SMVQ2=2ATo&szMM{|!DpbJhg))rON6-- z;Q?d@OX7Xbu3ijTm?CMlB5e_lE;JMyjYRNC1Kk`~GP$IV=-c9J>|NB*TPPQQ0-^1h zy>)Fc2ZW_j!3iPdM7@U)pmsWSlCMptUki+Dk1;eGMxMS2$CLo{f#yo0GQ$`KhH7&* ztH%`k==r1ppbldenJ~0lNg}bS%@7qb7EpALVPN|YS-BxJ z;ME%Z!~LCX-aHTxAzTj-{{`?>FT<7Kllu3o7SmJm$G4kX3J8RzRlH((u&#N#>xc~v z?SD8-6f3L}e3tm1eV+xWr$P%1w8lBy#>P$v_1lNn%2~cGk5poS}U7TvkJ9!z@ObgastY zhW1rrRPOYjv!ynCs_mz!&q_Q?hJOs#~b zid_y@c`b?2YvW9DS#HKr;dy)HF2$jUs|+F-ymZJ_j5fu%bixo1zm#pE%-Na;CHV;% zulkG_#&q?Vtr061>+PsG074hIE6V3ZCTu9Pm191N_y{_G6csP^UI3ge&dZwEdjiwl zc(*xi3q(=U`690X7&A_=4**;CG|g-TVlrZ+s17RFVLT)q2_2)+>C_PFPP^@;6TlJ? z4o`WKlvNeA-YVRcUw|4|uTgqHzfXSiG$~z)=ZfZ(c!)q%!k6A4h9@IChcd!OH#tGf zz@^qxE2^CKNXRgD$Ze=ZGY$Wjx2Pea;`G)QHR%Bz$P505X87t2@Pi3%WVi4s(-U3$s97SMDwBqxFAcm5#YQ*M>fOv5^ zio36Y&&$IM1+|K&?E_?cYzb&>#EE}hgB1|#4<(`!PdZs!lA>p+u=lja6-R-0i{$W9 z`1qj55eU+9xp10jE^yNr#3`8}h?7K( znJzbL{-{D1b~~&n03U?i6Hi^Rw()U?e%ll)xVPK)y5&xDg`{wx6Qw8wDx1@MXSZFV zJ`=p>S3yr8ZQ(u|p@o8J0=+T^U_Hr%iD&u5{Ii5wjg#Vil~@xY*KTEKdJTe{1U?S8I%@KKC*oqtD@xF z05iAbj1vo`U;Nk^4}(zhkDg(eUF-z`A9~Nh2{mP&3yU8H=j47oWdi3zfVw$)7N8=K zULbC6-?PROHQFUZ4GOB5n99QvS>i2fa488_DhiFj`mNz-;h2vs+XJ>>z$LJR`~j(b zgagg^xO?w$trzthEJ+;d;C28%KCxU+%NcMUM#2Tofdu)9)&Nn~$eKU%U^oY-4!eu> z5YNW|7#HAf{}Xde|4`<8<5B^J`{0j$6j!7i5j#aNV`C~Rc?#!8cO@1JoMaZBZly6H zLagS|R5dmB4w*yUISMeo=*rNr3Gh4S6^Jwpl5FJDqHVgI$-V75aT?ag-_*bO-eud3QVp)BTm|!brt7f>rG+gwZfdNosgb3`zW=bJIJAdiO;St&XcCrB_3kW~nIILq@#%pdO^X;y=4zaCg! zJYecIp&7jS^6E85Rqli|xm@>Nop#|JSrt6%7+59T8))D52n06(H6Aaf3ojVAW!Wcr zUz>#4B{>`aEA&a`ED!V_^v8l@k**e zl1ZqGKk`TMtyai7h#?Z=K&J8<!rDRb^g9Ws_s`2a(L}u82_?I5xUaUJ2du+dBx{xEcM{Cr=N7VlWB-HdmP_%pzaIonq@%l+ zwxnQ?vsI*IzC)0)Xk;NJzmy(Dt&F%GOByGNVVbuC$KpCK#`C%#nM6L|2jQ`T!vQMB zkN}A5dF+2MRdX=;216`A4ulgFAYO6K?F2~LqDkh*qf3eQHL#uI#|^PpVB;u8XVa|g zAC)$x0JD#upVWy&KosNsKK*e8nb=Pn(&wN9Z|l6QgC5c39@VBfVJ1Is+;hW~7L`b7 z0_cP%2mYd*`CHsg@j!hszgxk>^dm?#qeW+i(I`NB*$9i<1~V9>|Fm2xnY@ZYf|?nz z;&WWR7Z<&_=pSuY0cW%tqpAb7TrvF*PkxG{g%n?<^8IzE!VLt@h>1%k3h87p8V}Q@ zSzyWa?R72GymvSnu}<`NfQ6EW);2Xz>Q;2up?J#7Jtn;xzf6AsgT{vGFTlI6>JqtZ z(my``^Pm6qAWsW%X)vj@xNOM+ku|!Q0L!oAyix>Vb#WmLzqpW%cyaOn@$09}w|4Sc zIdGGLuYlaRLbVH`wcaMk97kPW#f~aI0Ls(tznlVd_%6;Q+{;jm;A27wBq0@OaV)sS zle~I*4ftd8gbol(17z2j8gj>ob!(8~KV4q8Ec?^?fj}-(-;%dMPzL9z>4)<=Hnps) z?e?}ldP@F3u!1VHMfN({dPwzEG*WX4IJKH8csNj z#Nf&wZ0El?5Rm3$qaE2|+C(xb898;M2@=z-B)h2jUTtL;$?susv$?zMevzFZ*9}pf zf(&0KOz@!P2t+X5-S;sMVLm3a2&(=Zm{UoCC zgN@DTGkqxk5b3YU!C(D$pRdV>=NDj3yZbHT&v_&N(ELVi2^3-E3*-7M+p2V6{!cD> z&5~QgHeM$LlB&!sfblGTLYw9GhhYHd2@JX%#?wWeJfUO^GH9v*l#oOSCBtaD%toW% z+Vl|+D-LP;$k90(7IO2B-=rN;{+~KS{g*^A@JnKXk%cF{*xQFdjR2iYri)h;;&(4x)h7=P(%T-MpXvHoc4am7Alt`vB()R5ZcC!t# zQ?iynJ+O z_|N*g8dG~qb-wB`a;Q^dUjrxO)sAAS&kiwEKDy+`F(FaL`oc@|gFI&$0AF)Lh1@)nj- zJ}9&5g!C=UNtM1eTyq?(&|UJ3fQf@AnG-UfbSbpxdjXG7Ij*(>&>gvHYur>;{e3wQ z!&kd|QWw4!K}7_R7)3Y81fwE>8JFZT955Hm5)6~FA^HT1}JU`#>8r_4s0eo za84L~>AB3S>0Qg}ui=TzK}w=BV7vA7V~Ks9vT zypZC2JWCcIkr>6(9O-boYfCuILCljhMjj5tEBmV(zcgdLmPEZQK+uPq7_D@(k{lX% zGuGqiEU(4KZC>%wB2|WHFSb@=9pRc|ozl zd1P>pEX*j6#unlS{Tp#wca*JGnyUczakcwO%E1WnXAbd8lBvpbAi%-FyLOnAG1nmk zg!P4NS@W_ssT|t}yTSTKbhIiXl)8=5J~ zqkRwD6#?H@|CXbgQ=m61qxRp_EBaFiPmxiGNKqh~2Fu|dya*5Vh2!FS^IaYaHMF5M zx#l zV$Cc)_%8tTlB$I5Yz{E{itOKWW6fj^Q!~FV=hJuhXp*cTp;zq=(sFfO!BgB2??4{4 zEJEn%hRx|tpe8Dl)GKVkt5z~lIpr_KB^M_lf=PIJFM3o>LuuC@*IIdbLMKR4zAw12bLq5E?y z@zb}B{F7vMHCq@O^u$}Pc!Y86Pw|>>d3}+-AmlW>usuIK9CG7{ss#16Lr`UqCxHtv z###qkKg_WlwKKzhdF*N*3tTtR3H;t|qUb8S*Fkjr1BB0|L8Y9&s zb2K)l)M@Ic9#3~gTkuq|?!$kZI@I7g@j6Gln^RSprm)k!4do06%PGeqt8=x(EMjW(;`uLSggS~{2#hYjbUOE zH^r7fQpo{EN+dv%HL(hp1`G~9@zj9@5ZcuDW(6*fYF*cI`BGN@L%jJ5-83W)$zp}e z7l=lY6NU;olYH&fJ@dDnbmFEu+6SggywI05Q`S$#!Y6mcd;xZZL=M}ogdv5%?%&r6J1+uVBpSuj zi+PDGf7stL4B2qPcElk+;$rI|b<{~M0l*0H0ijd|T@WlC>V3#s<2I#t` zop?=R=;?GX75*Llm;u4l;cC(Kf<%NKW%rr@^6P^$bVjg9XXJdB&8ib_G*m&;Sb=uq^Rt%}P7Pwp( zz83@pSb4{h7GxRWdnhe+GFrSs zJWM6;NW4wNTAFOkZS;I$p3*JcXrfXAxR zT|k|Idz#D;W)HWWjz)gi4I@nH0zE0Z*@}iGRyr%lM zSMt(yF~X%1M98tiDTnsEz&{ug0)2$#b;{@336GzSV*$&M)WQow-c(1Z8}?~!h8#^| z54fE8i3|pT(c4>bjq(>UnW5=!(X$4sib_^92D7{$<9`zAl^>TtZpnMU-@zd-NvRY> z^o?ZXm^^VgXDru`uN7d91q*q9*M*r)ny*+sUptYVsMgmyo`DD?K!^C;Kip;A720d`O~Y9GG*&VI52=4f&xUh z+fnD6PnxF+h#s$6rQ{%6m7GDz4a@MP+W5kr-rEP$3_9YRQF8u11oZ&8XxfO7xD+Ohm-i+e}Itl~`L4B=PlTOxmzl~Iy|9}%Y}aSm_6 z{*5Ym`%=e{zy%DjW5V$R!-idqF$>Rp>xauUXq@~AfeIHMuTdmc_HMDhZZ|)RcOwo8 zlAO_;h6LKwUmiYqWmcFG$Tm7TK$o}ZDR&R&8WIg;2E>rwm!i_Uc#4eN51v8MJR*Bg zwZz^r0$_k3zZ686udKl_<|zv#BcbU_@!CP$$(Ue*LQb9VsPq*z>2L4nq%AxlyQJ?Op-2ePlGO$vwzW!a`H-@^+?y69SKxj$Yx<*;*BTZ?epQ3gNNDE zr<})xEsF33g55CP;n;;{cl7OfK7%FMd^hNdk&B3H5T8j55Vy&Ep5b!v40}pUY%9i)mIB0j` z1m1n&twcZe5Mh_221*Z)@b6@lJuFq+yp{ByFFz2=aF-`0dQK|rO z1biSQ6Ra(%%fk%}^RX1HKuKL-C?T~0pbOCoXF4w6sa5Lkn`yhihJjbTBJZ9uIw94D z=WtERt`Hwhmf8L?2B8uZZ@Km5n&V{v^7+W`JromiGl8;$T8nG5i^j0*{MeiJrWepw z!w&YaR>-H2z(B8b{|z%OVoF3)bZ~E1l3tS(_(PBEP}$ty5-SGI&7cY!94ZUM`zm~h z2POu24}Kh|gU}#Ic>e}2J3ZAfgkY`W;Yo&KB{|oNT@vj*P=p`eY6(bgim01W3k>uP z`vR0Knqcd0^t;W+*ZDl0%UuKo>GMztuHi3{GjiFgy=Q_`>?k`DK}Xk;uNXu;t;nC= zJKE0Ilc6SsokZmd;=U3co@T$*>J-phyd@Hg5Z!VE!+nj5`k2aHi?vQjTgK@Y=cF`c z$2ER=W|38iRsv~^#FdcQJ!)Qhy)Jx(obn`W69OWxX#7FGR#47AhsHO7cKQj0B8e2l4u|z{!w8 z-I^467AKi_M-4_kehwiPnL?n8;yfeVzu!7`#?lpB1_G5q=WuWxXv(O{7K=x@X~{a^7@kNP z&0IZh17`AU8QHl(N>Hi*{0!URG0VcyX~WaLjx(~2>y%ftoeS&QALy7o?`KtaSu#4~ zrn};!esh1Ki1Z|?xMqQKk@t z*&eSHS;r}U?i;xCiP6C8RypCOSBa2ZcY#r@4tR#lO&3vMXM2t$O2^1_7csg!rx zO8!JMTCP_<;*v+U5q6}#%Un5RxFoTO@B!c4U#~gQ-crIk3*aH;Osq;=2tI+bGTrNj z&{E46k|8JTQyg3pKx}Z76(pCCfC?$cjj46S-f2GnbCE2a-Td){y22(yRCB3$3SIi zV<1FDcuQb0B2`2}5sNLDsUN^4`+s!Z7MW|CAXqp>>aI*%I1DmXw{FRpAahg~l&f?9 z)OtY#bL1Hqa0+4yK2t1SE~TE>$7)9F-SX7Rq?1$p@w~re9c6-~kmDXc5RVV0Bn@ye zAGtmf*f0m_-#Pb1KSOUXPqubJUX0c*a?Qf!hqM(oE*xc9~KL(Fv4#;9F}P zQl4v}nC$S0_fk3hckS(J4Q~xCT0mXtpCvBQ~I-E`elmC1n1fs^x`#){BlLX zxhNDVyaX$rlhyu|)#}#;C1@@DfoRH!NG!U6Ihed1OGEP4Vm1#)`+<1s&*_9$|5BCzIL(#2D_!KlbNK}3AD3@n$z|Q=NSih#vBDov)=Iv0$F&c0k!0-7XNxlRYI32!o+Evp%kGZk z0kn`nzJpq_%p!!-B@M|_zqwKz@{7Io3&oj`Yk$H!KAB91W5tgjDzODpPOOgPWe8wB z)<779%asqMgQuX1D9sWRo9g0yo1!3 zhT{*G;I;!O7}hC_BRm@*J@W*=8OO<6#3XO_q5d!vbfLY)l{SEb2C!Eel2b}@JNdIt zLaH3F_z~JIq;0?@?taBzkdOcw2{5z$x`LgS@qW;Hs(79VS1s=Y2;OJ(3QsRybiyHR zKxw8&-n< zcsK_8aW-B^lF*QJ!2_GY>nIFS=7p8bo$9>{-7uD}3Uncl&2bFKE_AM5<*vQRB=(cu6o*XyqSh7=9+8*I+4F6MPNTeHkK0 zj@Jp)O*HkfEGsTK_3wVs9nC)_ogTm?7e@lwhUn!jFXSZk{o}-J)LiqPA=D(B_dKCJ zi6P1f(3%2a*ih^_M3ZMOB`qjrpS3?tGtz%5ouUx= zGE`zx0|i1Z?{0`^#Q z&9DT0D=*V0#6Aubg&MpeFaQ4buZ_=ha*DqKR`nW77v<1Ah6v3Zb5kPYk^JSsnh)$a z5H`p_0xN^@x5BG6tV5UkL~tGDr}~zFPFr0&5HbR7`0`+fhG-B-I`g;OuVXN0USt?j zrg)j!n|7P5u|k;$JcBh56||aBL8e%5k%LQcUS#>Xxi!FwzC2}l8GOh=0%!>_%6c!r9d;laTR7OWPYvm9*!|L_dp(RqV-?5LM)h;ixr z9upp~h0vE>T)gI1^Xg^|KjGkCUNp`2<%jlm``gRkF5_qr!*au35@|9ILjBNyQiMhj zb{{jWQi=qfkYf}x>k=@bgbh-j>S-I3>BD9A^w1AJc?iR^9&sQFhm4AVFV{J~ zYm3x5Tq#&_bavjY|65R)@ebvm`l|?A@;ujbsDyEmdlxndz)s`6aD1UGUwz0?TEPho zdr;Gf#2*n1-)1uYb@x=;o4>4_+7RwD6Bif%&1|77H1EHu8t#y@go? zTpUk$o9gZ6u|K_Pe-0EhQe*^>zDeW{EuUd|j${ZDUl&Sq%cyfAr%U{wFWxZTfaCz` z5st^zCZO@59&o+JM;IpWK7V@u`BSeKe|YKj#gc!EJFP|Tw85VCIM#&?&2#pSsUjLE zGa|6D?p(=BvWbvrGV#>N00;&JZV2;Qaa9_{-FSa@37Hz_M_c)wjvsJ_=*gfCT6s#C z_>U|@fhwT>lmQC|6mD*_Co8vkP@^ch;Fm${2I#90+vxbaf=ha=-PJ7L;W~5I@Zdr1 zJJUOx3DJS)f!qaGIo8%Vv2r!W_sy+y@dz50PJ`A4T@8FagvuV7anlx;v!UmsJ62=Q z(_v6Is9<(ja=dO+%TQ`Lzz5iX$0=w6h!+>je8R;LECI?mXu=eMGtss}+^fb zjrt=B!8B?l5ZkIqiAOUKSkJh=$4gWPkJ)f+3xTcP-HG#t02{Q~z`Fo^LWk=33>HJq ziPwL{T^;dFh^{HQi&hT3G@79O{kaGA=q?0v37%rHVamfjLEsc>VqAjb5o26ODs!uT z`Kin;iWl%$fVVDTs9}o_C&qGYLJu}L35g&vO29rKgLm^=7K7yboL3>K5#YT+nTdM# zQ2T^8JW6*6ISIEpNz4n9^Ay7m`yccv*(c;m3}r00Mi^l~Vp$CcZD2s6SYG38eUVjCT!C1B?A2; zG=NiWTsEFX8|cGaZAiW(`V}KNN-TkmuMED9{G3Ycn;2y4HUu0~59gu{j;GQ@(S+cFg9=MmSxSb(J;a4eS z8mu|ua3BFAARUry?rq*j4gDKiMBvUP_eL6Q^q);ReN{$-NcgEe+V$j%@8i2tX5+4tZO zd-hKsQ43f;;3e~%`cVCF?!*bVz;uDBsgtTHCCH}%k%L!}u_MzS=Cq6RPh|8`o1{-T-3=`8W_j()F(RlQASNA(* z)F^;s$CMAtbxJbC(EdI}AB~-xdeu~Sfc^5W4sr|ImW|_ z7psoU1E307mj4qUn?xFSuY|m4-+(Q`I;6|-;D9T(O=N8>mxKqHx$w+-;Tk~r7%hm$ z@HDbdP05cwu=;CHR4$3m0Un2*4r|gZ94C@}(lO}XaI_PjrsSlM>V(XRDfy7y{m@0x zw;BHTwHR7BZHd^Tarxvc$ZdBGbxQ~`8m0_A*tGOy#+N1h9PXMJHgbRA^le2yfqYRk zlA)^aT6-j)T$pDlkt+HzqVTu7T~NR2ngFm0?`YhH8+uWan6F^!Rpyg zja86!5b-0oCmAnXkvag18CZU=FOs>z8t_`;xS{$A?Hz}ZdGHQo9~IQoQ~3wH3JBE( zRfc#6_zSJEa5l-}oX1W7ZLvQ5w;j0c;jR;hUM%=*_a-XQw@h2_#hJaGp_&kC_Y)hVf@B8Lk|B zZjew�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 literal 254976 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�xWyz|KY}t>9#S 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

6pboQ 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

^cAJ7U|1E74W;}1l_ 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%0DmR@ag}6K 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 JK*(o*0{|Du2B`o5 literal 375296 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

>Rsy=JNCH~= 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

1qFq~8scdzxVH;34-lFwx}O3p zxE)mc^9NEf6n(jAt66J?gZnn1V!(X^FX=n;3!R#4?^j0@su&6#OQFJ!3x+lK@{!Fw zQO&&|zvSLrb6*GU`OQ@fC2v!S2g8m>7!lLlO}wN>=NDR@YwpGog(`+Z6BKH|`(3&^ z1l~S|%dg9VSEl;XPY{{|Z$Yl;1tW@93`OfUhahp*u#*3EWXbs4E=YejzvOoE+ktyU z_XzT4pkgTbO_g{sNNgn9K;qZDq_4~`)XNdG2S*gD7z+Ing&IgSi}Cb%mEg*$Binm} zfP8Fz(d%>VJ#$3SilOL>58hs%>3Yx3dY^E?dub-6kENO%tb1~eFBnmSVyNMNNG(`* z^EK3Vd)>((xE;k`5S{*!CjMqJh(@&KO8&KOALPMWF_io}5{eMtK2+?IAu^?6mtT>- zA-~9VxgxI}QKVuh@*AeHInq8VxN^qu5`*9U!cYLDy<`|^{}>2m>5uO1VW_G(EIiFy;Se> z?0dJ~qxQXDdF$-^28Ewx-+L8aY2WWx_+4z;h=pC5N^PH_ypUduA?Am!R}(podh-J^j?I0(U_N~< zOAI$YHsbrg?RRSY@7^ga@J8)Y=1`kjh(c_Ht4=2m+8`z|L1_Pc;FbA7P&fsVN}+rA zE1|OVn>Vz05Un9t@cPU*!XHIGZ$1#a*jg0SZi0*)?pY&_=(Od8?17){2h}Z*HSYNUiKFIp{zn0FKx(xooI{dnRj5Ufd&`Nv@~p z!ce8C$&U|R`2Vu}ERAY7RH?)7N8~BFqBwgXJPghIpKA{Rg8yB4qH2S!rDmF15Zq7U zR)_Ob!EE)b!_J@QhX;3Nm2~s}!s#Q1E@)UcY)vf)YZBL6lr36lEjs3duEQmWt$ofJoZyv@e6uZ|ii^FC` zQec<4YRel%ltgUA1{)z-Z6lJVP&80%L^lsZv{TqpOcCrpM0OO2W`Qn#u#%Bb)myw0Wo~8SeZ~Osyui^pT<< zcKPtA|3efNsVq(-|7u&2;LH2rToa@Bg4mZ5Tj*{9c9)*AN!BRIQOCkiNe{p;0X50r z@Riu2Q7DPGrhlq9bPo9hoSq&jdodo>F}`3a?pL6>r(kT17O6cJek@hWp-brRZ&0Z9 ztp->HNiV&IFyqA_&*Dtk{Jvn-+70SVRqHzQaMzeeGQmTdT+KUGqa9pMwiV2kUX!TO zW~sCVOkCSb%HTw~_u^qLe50FI^ zlu(>oa@yz3m)Rz`e#&HzjoUGmo;k^0^JRzvUwt-iIkvU<^6b|{b5R)=&R7^STmcqu ziJ<~pkJB)Zs0AjOsU5S=Ab;)>L-jHK0MKhB;ryB+Zhtl%u1E#SbD*{KGXEP zPJwQ==V9|zlALLJKF5B|)~)DaR04DtbuzQbmR)1ZZr6ijejX;xK?xA%h_l_rM27l` zjtL%-$uW$FhBUj}S@5@Qa_0pNdm-~Iw^!1mAnVv6Kh*tGAS}QX#EuyT79U<-;QoVM zzRE5v{&U#+lD$ud$+1S~agMoVh*p-`Q`a&NI%M*m^L~u&(5(4=cc3yuKnDr{%V`Ei zfXjra7~*QrsQqu3iWAW26|yoiUz_B>m-ZaK_83|G516VXnO|P(K=G(7ZFa-Zl z%_L^@FK8lX)CDzHaCXh94KIbk=9qcm!XsA*nEtYA*NI_BTz&0ENu_AXR%MCSz7{Xf zOv6xL1YEk~{Pgb)+&c+p+6;DH?A~1#7^<)43bcj4r1FgIMP$A4_mnZXvWa|+?p6Jb zwXZC>Gq~wdNfSEWE)9?2iqGzF$2(==F}rnzvZJpeJZ2#B$l!kaFY<80|EK%07pEqd zg{!xsaueSD$7tZ=@JSzEoVpte>eXH7f`xa#6b%f9Pud+G^LjM7J3a>IWo1;jxEmk^ zS8Y)f0zHjY0#>PjwWoN|`NQ~e!7Fw%=KKn3t_;Lx)LdB@yQt>MqS&PtJ~EuSBWsKD z`ADFh^K`jB%iZ@1)s)4mBIjrU*T>)c3JnFD9eZm|4Rt`@rJs2{T4Tj93ZxQ6u_=*ZPKSRmB zi?*uXXmD1K0mPrEU^Y4na@=0^(rkBHDLQ}V{t6Z_Pc!zV4GJtizveQ=^E{H*T!slr z4Q$P22$;ENbUWbM48 z58UC7&em|po8S)Oy4NEe?^Hy_ydHTthdaL?!kuOyA&P-Y=>Fhh?(SUCA4%0u?T=P- zdvj}e_w&&}fB2-{Na~uY1JP>4TNcAU1j8sj$`y7PgYDKyk|mVFM-0!R>%6~c@mWAB z76(fD`6RYjCb$Ke*D|xvG^FhroYi&i*9#dsKheu+GP*rD4F9z91O{T~*Ia%c@K_E! zu;6H`i#lV%&h0)^d+La&No_RxsXI@pwnU^vz_=xh_P9X~77-7w&=3^LjvG&wt z%FrEuVH4B{O;Zur`RRW>E>NJP#{R&(;noGT$c(bO$`6ws=hEe1?H@MR+kyM-{QM&lj~w4C*oBreZL{}7VTRUFw05Cd zuc{i>!KEe$=}i73zX9*C+er*ww1Eh_rlD*mpF;vw}is z__DqNbkDQ~vbKNbfKe<1Hn|#03mHgZgR!uy8PL?uf>{IQxl}E0x~Bq6F}f@qH&DEB zFogjd8dTSr{4OB@@3MtM&Av#vWcSi(s37fBdRaEC8$CnaXeSb%3!}&azF2=bdEMAx zyTQHFPwPfcXVNt-2nDj;7_IuF*CeP;376ESom#!Cvo4D1UeAKVaV2#TaX$O{E zAU2%XNSq(Xw5EVv_?I>)zW|hng9qg+8|I)zOZf}4D6`@*jW)>Uk0&#`W+^kfmKwd+ zVBCXavm@Ppf)INs-2&J`SlkeMm4{AM@}DlS$qj@l=&wt%1-1GGeTQTP-qFYB7nBI7MKnLyZlg(Z-YXX4@1S4+LGM*{^;7q%5*w<}3F&yc_`SCf;C zfb^`BYL0VExGN-Hw!rx|ymiT?SiZ{ZPpA}<`oQ?}2#xP@SeJXlt42}fyH8W)c&g+^ z_^HPIiD8tCO_p;kCZCIt>!CB$vlr(J8OinQyA6)7Z6StxHU-}AO^o-JqXb$HSG<=X zJWDP`Bg;@#FGFR$YA!O4#vW#LJA<-5?9OG&)6nj<+|8`)YG@~$$W9xRxtGOgJ;rij z-(;s1bGSX$9B!|7b*UDF6^|uIjr~$1>h$?H1Xy?*XmpS_u$6lX_GAjyc3Dh{#B>*I z*3Y6ZM^clfBkIeS%QqR@oOO9IC*v8o5QUe%6H$BYMh6sy(J@cL zGOc)$(t6DaB-UGt7EKQ&E_gp)+pv0Opk6+u`V)IMJfs@qr;&4Up!YQc8kfv3PX;FacX+^l+un&S;t>+g56mZ!TD;( zn}@B~T2QdAV8xpS`v!|vbQVkjCm!q^(_13Zrqj`pK0L8=bYfe7OXEI$jZ5sDp4gUX zY5YWAqq1N7r%WH0Xla0bo4YS$oC(uJ?+BWcYpPemmu6aCgST#$q(&aXD`A=pvMyf; zmYNOXDSuRucLB`R@D1V!dBDxWpalklUNBy1j=bsH2rSxwDMjz`#!uvHBO1lQq((mK z&L361E#gj^!1-9DYMai+@af*XSOXN`I1QT-&kyHM@l=T-IV#CVnnKelO3tU}h}otY zDcg3$Vjo(~mRqO2AO9@OGjg}rjJJwoOx>3uJlh@{EpLTCU2?U#3?@zGX?{vM#UwSE zKAhHn$7mCeUN>IEO@fAg16#E&zy3g%Vx13BhhlLxS0jU)j+=5K*O^d367p{a^MUY< z&U}2%45+^=I}CVe+dIKkkNBW^j;G-CPdwp8`@?QY@C%YViTx}Ymo%^K%=>ODe9D=0 zff=cLjxG4oRIT)Jq8MV=V;f2a<X+v776ti39Tp}5`gQ77%)2GID3)nm|V158R= zxc14|WXWUY*=qF>T$s6p?VB-E4T-N;S#XNhVYRFoe4YZdiI}TuI=l*I4CddvCJ1=3 z|C83XbNG1UsQyG~M{FXMpy9o2LvYhqq!TZNc+gju*tm3aq>>yNc9+nOI7z0X6mM^` zorAp6*=`i#b?JtL+m-MV65?WU(*#{+dbx)0^-^ah$BFfbyDg>c_Ep`0DgJuVp^_@FHTI-pol( zFVceGmY${$CU?AB*!00@Llm6e+9M85q?&7f%|zkMVelXPzm<9K*|7hwPnO7B z`Ps4*hBt-x?6SwoKZ~iP1tZSx^0BF~unhy;6EfD7n116ciRPkO;0`U}4VcXGe)2o+ z9Xy|p;W__Y+T>&xallk+kKGUwp;HYPbL68~#tXagZr{EgxOY-qIkcDLChAzjXcvUf zYZ!=+SE#pg?|yAJS>faTH+B`zBr#$hwnW5sn{)pG?@j%WhxCSd_QgMBaMg1cfBSAO@t$9YzKg|Z#9rxZ;f>BnkcT_Os66Fo#h`xL;j|I znGhfkUjJLF z>(%{8W04M9fY=67?@ci{F68Kxhd8OVN zz(O2nEGyp8gS!qLe=ZA+c|3D$_`GGk!RA4hociE{XXAiF82r$>f>R8W)M1&VZDTrCbcjppY9KEJ>4}i@w9}o>F?GBhQ=fy@)Z0P z;E+qW(eL%I_2PBeW+p)c!0Sovj_2QS}wi*OzW>IZ=JNu%-U^0lB`(b>>Xl znczxo=Q-@jc0zQlJl6^JAWSPWheMe&NBRu=%U<){*_Ow?=C^u4tzLgYpdkIneTF*s zM4hQo&Q_w%f-dk2|KBh7w!Sk3v%kxxH-|D*{6iC<6A)4*yw$7RgRo!%*Rz{rrlqkPJSk@ET} zrJ`-=o4^9-BM7|ATRr=v`qfu{rfK;&ZYpvpRlOqD`AP}(|}njM4%zrR&U3!M4w&fLd38@dZtH@wo) z@Fd(rFOzFqSHn|RlAL|~5v<1Wghp5_~mZKDz-oN~aXWrx*?>6EzPLQ<#~aSU#m7R+u^0q^QQ~Bj2lMpAtK&dI#+H_uKI> zb42yFmaX;f<;N9fbj`9^ta-?wO7%9piPSrDU+rwbbI1I_mic(@nEwg9(ax@hw@jI)EF4F>!_Jad%YER+6BOF&FzpH`Fd*hq|~*O$IdPt^Kx}NZW~(JNle1M z+9@4x9w}C^9+_|jW;rT#$9^hpV{mtQ2~JI5W(H-c-Cv3xhkqTh6d5JYMbMv2GrTH& zEGRNZi&-SfUw_)}uR~yQ(V3JxWbcpVROY{`l6})b?y6*ueYEqy%s#*R7fpR8j7I>z zglzB83}-9DS&Zq$!wjAGKC7^0?aq8V{_atAn3QP*1>8xz;hkig)9@5f!;We`1{nN2 z9sEqWD!o3He2fRK9Q51zlnHXxr216r3kuuPt6$Sto%GeGHoiqbWK1V?h$Z8r$BTo_ z(hhL8lu@tKI!?c9OZlyLT8quYEijMdJ~Be8+sP>-ND9?f|2y=gE2&oNU)VLTGL|wm z?A$#C0h@0%jAy0tJhZ-G41|zkuvW3td$Cp*lwzamQ_I>jCEnqD(ks<|OB<<<1q8>zzv~>YXd5IQLZ6JNJCfDi>%h4?;F9 z|1@TP`lmJK0LGlZ)EK#t7^l=>T@6|)3)(=L!ANa~d4_@)c7#)7jEM(D;!=up%11-o z(f%&Q(4DeW1DgfYK4D|#Y_FCGxvm&}zDJIDsj(q9Dl^%iE7s{vk#%~*UgMH6@K2UK zsayeht;Dx)1#8B@R^`3B%a`L zH5a=F=KLHORhIO=P}|Wo&O7aIhTiw-Zv6l@VLQTuC=y_Zch&gGWR6`NPL<41DF}tC z$-bKg6*v)W5J%ZT_VLPvHnBaON0ATK`2u+G`1PABso5N{djr}S zI9swd>m19bI@>jj0OuoI@aBPd88CXDQh`yg58}r@Fd*(d2#7b6Id&1H^s5vf#KmU& zl*^t}cCBBCMy{G?LEL9S{E%`P5YM4wLl9n&2jL&Ef3^^gVcAC;J_B8(sEuA8be}#u z54xQex?d-31a#X>X($uy0i3Edy^cg)fZzk+rKKMIing{gAp4gpfRaaBv7<+@wvNsp z*)}>`bQ=Lxmo|K$iR9>ufjWkP`n_yR?e1cH%3^0SYAIH2?^f!yXK5HqB5~}96}y$f z7WDgqV_|#><;2w|OjC(0FoX$iGqhPer#68fgphh(OtHH5PkQy5xq|VmXh_z&r0o zUTa?pHX$igX(}Uq3h&AK~CE z_It*Ub;Ma*W;fOP4x!?~haok-auX*TMeRzm#@~-yBt=%jQebxE ztJiAm!l_mbr1;X~KC(@Y59!=#=)7O)I2Sv8yhAzLOSgWsH4sPHtJMq^8AqhQi}d1Y zYjUm5vLfc0&yUa?D?dcOVkQX&AlRt)hE~^4DMtVv>g362H}nbmW`V)dvU5XE^$u(0 z9r+99Uzhc<4app3<$*VboM~T`Ied97mR)~Fy$xZE({&@JF02m zGx4KBiT?>?cI3&^un!+A$5Ou+->8}Sw1?Ck)>$QHer_5RNGuyHh#$_e6oQ>pyw_hA zGbd|r14V4pmZXGxOc0`OlR%!n%Np9`>DzbR?aN_UpVTvN)=~@wh|;c4IEpod8frIc9~%macRy0*5(RQ+2!pR zs+36THl#*9VJECp<@O*}`JAQYIiBIGaIyE4!8?@0-@ru8tR#Oy=5yXIv7>NuSy3c{ zjiDVvgAvY1bFW9q42ZJQ6=YM4?tIU?1+s;*#fb@(c!2!r)&&xHd25s(sg}2j7vX1x z!A~P|%12OxpVF6G@!onB=i1#?#L#apS5?ryawx?0UsHP;P?Tcx6ihw?&?2ej=nGzp z_T&;YS$4#ytG&CC;|&CtRLcc1CVYb{R_&7^!w%L5FWlPIP%dyrBo(ViYtU^h_g0=^R*+*-Kp?A#!{nq; zfx^pt&6`4s&IY+VJgud1ES?BYf%6~ZG>kj{&qyz@>h5Pluy!oWV_c)&t9p2va@tH` zUG5ya*Gv_F{rfmg&73?!KFr}^=F~iTi!LnN-dPo@ z5H;NLa3CZ#uu!n|aZF1#wAHtKb2IIGj~zrY)7O~*{cq@#xYkwo8M(7)E0sqk$F z1AX|ug3Q>QE#aA?jImy{jG6btDXjQi`C=Wu4ryP3(h#>I9yZOI;ElCiI(GHUifMt^ zjXKwBCJMj3Jp}<{^xdmu8*5b0QZ?b!yi#AU*Q{D~rHn_P#w3qyzHtjZhLLIh6$L>u zdxDjXeZh&4Pm#`Gb7HSWt4hf|jT!I>45V(Yh# z>^f;#u(jb?zso49t@^A+zMaYWaZBS?fVzjt+2J%i#>o`p{(HtfwnAa}0 zR8xo1V1GR3`5O=;?N8yma5mHm{!*?{8V3NoI?EZ3n#r6PI^Pmi?Pj{(D9AoRs`DiP zU*a(bJCNOK4u;yyF6c8i30{Vrh`iv+uAx6q&143>%Wm3!Xh6$JjWbJ&8ymLKc`1)k zN`_-`XTeyxU=5E3wtu_P374?&IQSKGa3O*pbtb%4M2(d$tkSMVFtcgBsbOSZL!EZ zn&uu9d(8e-^V!FrztewhRc!xx3y#h9zZce`Z-|&PJbwRQRsZF13PulEDzm*3ZzUD+ z%-e zpU94cQ1y;Gk5`Nra`Yc{epAWvhrn6#!vck;&{@<3ypM1khK7x@)@t)Hw+>HX7*_4u zA9gP<>#g2_z-Q)F+{E|hua)MpalI;VjhD!g^e>exS25gzr1mKLU%nbsjr`3m z>@6_F zQ3<8B1$tt!frKuZ(w!C_`KDl}n$ET+)LC2sU5U_Q8`%L}LMeys50%LK%5?-|2Y`GO zSI46(IhmyT2QOAXg+!sQ;wk#ZLkuya&D#_|4Om#}zjh_dvw-h2uF*7c z{FWJ)%ie#zP0O0LD5e0NzpmsusyDe@;|UiGhEsrBKuH-V0K{Y(!o0rG9IPm z0a=t4WYL#*pQj$XO5mM#GGv|$poD8mWD5#5%XS{u7F8-Mms#aeD^TruzV4UxiFUNs zsPF?}cjDIw#&}+hfWz2YENo4eNSX#gzw19@GIw-zAtR&&x1@MFjbdZg4*yg2NhwN+9C+^{GE>~(J*JxwKRROor8 zNpW^Vd%U(@4U!E{nM%;-2vt~p4ig+r6-Dt%h{#DA7^P}_s-YKj7)@I@mJ|%!O zZ7tVE@4jq-PI3dmm_Sxr{GKsDj?uaYiuWsbs#S@gCF}VD3hF*kGjVVtM@5)G>MYu) zAT;NI>HAov!zp-cqJG924?k&i@r)@8YeGqo1MYsxvE67*E zfxT8Oj1Fnwy`NzeEs7TjQ?|M2%2G{Ih?U$w4>jJ%A9Od9k9O}U3ddnZDD z)Ay9=JB{d}ZsuvPn&7y7JchvQDG>0U+UUHO2VteP5Y{PI@^93VE;0ahdwHkXCZkZhhQaW@TBJ4em0=%}fgT&%98A1f|55dDKI8!+Fy4guXB; z&JZpQr%(z{{k}y(SmzJczr^am($C>r&OcZF?Km^ABbqiSf>8rvv63Su|rHR}FcqmUO0IqFm*PDgkEs;PQZ8TRDU zxt$|)5Q`!JY5ne`&%q2T=ICkUSa*&(mRhTtNF``e{zAVt`?XYG&f0_l$i^}S;!#E! zka)6zwyYZOby4T~DK$D|GmcZ>Q7g!UrGn~h*>nF7yuh)XZgrxo=PN`Ua}3{x4RkjC zD~;?-uICrw%V90;xkOB^hQWKp zzN=^6@AU4Ym9fIJlmfi9HdH7iL1@ZtQRpfgsxh>o_bc>vg}US4{t+{9&rSvvHz)!~ z@;T=DZ~|eNE6Y_;re?Rd3Pl--7AA$WDls~+h4Z;h5u7pEqOxq6K<%?-jV6I*4RJ7t zx8hch5`~h!`7ZCXO478YfJ{Y5kW+3cZ(jS+9BQNO#&tC)x`ehvdh988fKl|;l7z9> zi2h&N-UU9Y>RRB=#j9|?`2F}2Y;)9AUwD^kX?E^zbu!>HY zL^zD6(yvJQC3M>-|1{ zzcA;q&wi}E_ImBL))rvOzW^3{5Ns|@aJqy*#wcAbpkRqiAI*QEGR7F?>F+TNX4`tPT~Bf3@=MGg@O?(#^@QfeVQaKp)fk}a=(DttKNC0)P5m#q2~ zs+|3QtKU^o>j(eG_z)5D*h}@4emW0bf3k7^OL%^wqWgvav_2vJz56GOz}b7oCh4+1r1=nOp=V3ykruhb zb%q-b-4g-GX)Q+xc;e4e%33SZH#JS8WOv4Z@lC8)tZi?oMAb#o9Xb5X~N*=CZ0+Ck#9Mw6$h_V8CnHu@m+8}YS@(=Y9 z`p!QN?sOkvGUZC!QH$MYg3HFEs)(_?0VI(r1)h4&?ICL<5C$_R6`_Z8@}rN5aPHbF z(ulp1C!pUd`N7=D4{)DaSbLXgO)S;ZXXVAeEAj(=#PXVd&LyW%D+i|o)zN}c{Em_i zDJb*nHia)4Swx(Hlt$M)hjyff)Kax37RE29Vp(x{@r$@}epBK>wEp}O`{$HHv>uIU zy+VH?)wfKiey^a6 z_JNbGPouExfIKdMjWy_(YPLAQSzM;wN$;b1T^U43l`J%^uL?D)I23eR zH_P;@5f?wYEUTu88Cto*wGk3k&tzmC+%|FNK6q=bhF1OE-U-Q zRejCW9LY*uO9V#T`EZ~|E1fKq&Y(p)Fv&Z{^bcm=B?oF34M^G9a6J)BEnmZwqwPjKrKTpx(6g3XqE`!afg>w|K@Qo&%H{~5cz zjgvGvrL}I4Y$uT;;$4ZL=zy)SGK)yjHN6o^(8O*L4w(`Yo2CMIQbGl$(kv<1?Bagp z+BVBKtMiQ>S_KG<)q^5O%4!QEM~X;?5bodN??eha$QG`#dU|Jd!?y53WA(M3e^KTp z%H;lwGM5{x19_2dX{(#Ix>Ic(XkkN}jDeE$ty&V5NO-id+P{OOV~H=j7ez#U{xy6} zqMC_iqied_f0g6wrUHxNeyM6Ho|p*r z!Y|T?xZiOaBYR&juN6ZxZZIQ+@#uQ2;XbLQy2^TAx>YQ8?!U@BAb*CuAL{&X0rD>R zmYz-of3ZaHKj^+!$6f}#4#Bj>>aTgorIAbYJ??lCfX``y?x~kUq{tACJuGDGK7#7u zv5A4|L^_;QLxirr&$)+NBm|#B>73fZ)K*FwJKCYL4#2?+0fS%WZ9B>pbUNNwDmjhRdflO%?E`FTCO zJAOZ(`s)GttoGXJVyC7+_{_u?rJ~WPib}KSt<<;Y6YEpWp+jU%zRMeQ2Al=GD7iGU zlT9F%EnRS^`!(X%&30a0iGg zp&$svQOX9rhhCJ2oVEKF`8jKA$c$HNmcK<`omoh^4NZs~;dZAPSwQ?3@m4f#MadwH z1-GBYmy$NaF8Hxuh>d?GvhpfnSNt~eLuYUmQ_jV>x2gLfpOd0w;&IL&A_IXhMtC70 zz$vYleXLJBdt{-b)A4jVTbgtxmNNIVY~@wxJ&we}E3-gh3MkB&r*7dCzkg<@}fZ=afi6hwZz{3Sa zLis0){gPx*cEKNIui8SzvkUI7%m4-okPVnJinIYJ7ciogO|Qh^aHaFXW%RYxFG5L* zb6`P*>cy7Qoeeb89U4OP%gH5S#4D^hOZV% zMyU(fo_Fdz0uf17SG$jUARJat4kS+_C2wLo>r>9L>?tsQvYwxO<7ds4hgv_*#0()b)Fr6eg7w<+O8}nS0e-|gNqHzf%hE!xMeBNQGlRp#hJ7C`RBVDz6ZMvI z>9ax%dlsBPg;v)kbIL?;k^h6ngjO6Nki7{HKjQop&qp=OM*T|K3EH&CHDI)SE@BcT=`Jh~N*y3!DvLJJW+ z76OBAayvQo6{y&Xma@L|4X)&Vgdp0Vle$|i6+D3fIqh&yNEK^_;Ymq6DUF2hYVPZ*npH%=P>-ANPR`^63%tRnQ05jK^Sd< zey(H$T~Lz6+Z9of`R!l;g*-0han2Y;V1|KbW$;Wv-%)xz;jvs-DxzZ#Im4%@?l4D= zzi}OiKUH6Vcxlq0VWP5_q_$8(O-|93TGk%bYZX=tx@0sgCY z0q)4S0N;VFL*(F=ez^JWU2?TJ3RCK89ECe9Ng1RUb#&uw@rrhq(X~G86@HS+ce6$| zU!7&}kTmi#x<8JVY)|JgGUOuW(Aj=WDoIzP=+nu3-U&|(c-mQ$9prFwu&F`v6@uEc znB#Yx(^xdDsa3(4zv&u#@ML@!IlhkN($-5}7pT|$PWGDPPz!0m zsGkYY5S!Z&#EUu)ZN$YN4T*sc*?>Wo@q!i?3tHrRdHTs{@!2bQP1awc`RgYuiX*6j z5nvR4{)6(e5a_5>BxLFWiYYbeWavS>fL&squhBzrBlNn)jnE$jH$rW0x*wl*5r5sM zeZ>EWL@G|=ZTu7kSiz8uMnyJ$&LFbLMz`}m{fH}iUyk>~tPYtukv~zd##cwjGMaZ% zGlDABl&iEQ0^g#|JpiuuZ2?+J*Jvqf6VTPa3Ka^D^EaXzL&}^L&t_1hdSYw7Xp_k% z(5Z>u(;opSQrx6rtg}_9lasJepd#sz3>Dz$JTX?V)%k(?$;bz8kS(|mEw~Gp4mHYD zI-^zYmP`&q6!}0A0#%>u5B`Z6Y@rCw(zDzN%B7EFjU}9@@`YRzle*`g!SUVFZ8t@G zYh|GxMZsGOh3R+Y8H?o@Nz&ukB^!8W-kM*BJ5RC$e0oqqf$?DUsT0_ok^h8b;_NT* z9!vkbfQ3|%&s~)CXN;@hEAolAxps2IJ32g+S`lO>B&O1v#H`8}@)9$UVy@&uo?n=_ zj4#UFF9z0mtHa;;2Jgbf(s>FLB~Dc}r1#PHd{K;T$x35&tJ1@jkIdqdfefW`$=Zh) znNbQ08023On^XoPlR)+u1SvLGcxdu1bImV*dE2|c>Avwp$;DrUT#hbMm?(E&?rVLy zwRy#zgR)+hCW-;f58%jZPXbN>eIdV?+OzODyN9`e-$2{WcDYlsm{GqVpKD1Qd@DUD z6Yi49w~J>8OHFe;q7U?pq{3fRtO-4b9YKvhb3&$4NrqbL?D#cvq4EXStA<)&UaE3|;bAF&zKw5zrU%@ZP#GK&2VA>5b zSzNN(OX}|h6B{;#v5`}AuZ{uxYTi2c{;%TZ&Lf9X5GKGp+5_oZEcKl1yGdmPr?HxH zoDb?{XlsOzzbLSFF1kEbi&1|TTweIT^udx?5Iq~Qk`EVrTCdu9>%9MKSH?K#xUxt3Cyn%XbMk=l96+?=d~e;+HP@}N^9u@+#B%x1$4@`X;>4JsFcD67OAKBym5 zc@=k~mnzJw*i_$S+RH5&yx~W!4KcmbN3&?)esgOVz~RP1v^v}jxo&!9S<5_~?d%tv ziIog=hltAx$&+Qj&MrATpMed~17pQgPAeC)G`J6LCq zYBwcu&@Pzck`m|JG>vIJvT#9;QGbxy;-|q>vL@%dm!;Y?>VG6`$u78+KJ}iQYvlrq#na8SS#Pa>?@w zm+jCf=g2P0wO4WA$_<7+OI_Wj?qssnko|T%I59`#z zJ^=%r+t-V_!jyl5No0yH!9=XGNH}u(FC45&7dY|Dmrz9b(nT8Qx9)Ap(R-MIt0VIA zMEiL<9?F%2#qPl|$vBT@2IRuG1U-b2Z(K*CdfH@;hiaEj%Mmeod_9T})p)e=|8VKJfj^|{U zw1}26{Z82jPu~CUsh-m(_KZ);q((WH(WgvxX?x?z>SO%V#D;OMc-_So&Q7wjZ&dRp zNU!G&2Dkfj3Nu($eP~+-A*z>6!iVyo{5`_oWBjG_VKxacGWNW&+L9rerrESGV|iw5 zDr@$7TAYWxpwz@^EkY9{Y|>Q`Eip-;8e2--8T788i+?mk>T0z?0N=v^!1@vFYUhUr zsfg}!??C%N?D-TAt;95iTzL?oB)V`VY$LL8l{P^&I^&*}MeYad4qWQF6X1$gy0=;`V;>Sq(qNxM>g$(S2R&`Q%?AX#LX3(R(U#& zRV7jn*mf=5{haP@7u~`@pt`F$pIuOo8z|K%9axV*woLufqUvpv>TR3uZM$RtR%W?w zV-sav3zDc)S@vA*kJiWjsBAJa?6l>rN>!AxL#51+Iv*6fv4ykZ%f6@crOp*?c&>PX zXEKwM)FFhgy?+%v(1Fi&RuN|ls8+#|90$o5x+Hayuc_{X$GFYHg;K!PFD!#F9@&kFKnO_7hA|2wpW!m{Y0ew?oymGAb4ib^ZBU!KlI)UtES*HtYKc2a=8SP z2$yQ7hItaI-zX5EEg{9(8xkv>Cx4nuu91cCT6x--rRY)P$}$k6R+vfo##FcQc`4(u zUKFo$*KY7B|HRH)nUm9L5+KT>ifwrCyIB?Ts6q@iFH_9K-+lJNyR)C2T4F}Td=P{`eUG|=Y>S}R-S z#JglrLj3ucmCw+bE!074fLEKGcm-Lz%-J%Khp|&cB|||uTU2BCXg}v5CDl?rV zevIBr?0&A9X^HF*l3ZlrE4v4MPQ8yyzk2nHM=x3}}~ zc{11`%Zb?`S=W#M#+}fx{|0~I%{kM!j}5uzPGPFsRBp?cL~2oX?xD2i6#tK!$2O@X z2Qd$Z%Ept`ZZ0l3L%w2%C%KKeI>j;nDrYk+FdE2wC8e)BLn@L4_)0Qo4%^S+1;37j z4!c`<(iG{ZoaY{)ozxjO(lZ&VtV=U7NZv&6oM6jpQjsVqc9iW!;NXLQft5Llv zABlw)R}>O>l1U?0i9<+R;v8{xNy#tntCY3YH5d^6N=8D!W`Xmuy?_(BcW`nSBSEmnLLCy52; zN`I4$w@Y`8s#d0Su4`I&8fK5V;0Gi`e36;Uaqef}$V7I@cH9%SOm^?xN+z>QDs|y& zrSKRje2pr668+%If+S_yG%o2{+RWIs+P32I`cCJ4CP(pl=}BMtA?y2;2^CW{cADOj zgOjdpd3J3nT$NwF-&QFaMkUsD#`^tXf+q_*d~2Y5;0N*ZDDJ?T!;cCYaKB{UyX5f! z^|;%)X_@Y6rS$Z~`a@2z+M{`7wLy< zxz-J_P;(OZ^7^OgN5%4}nnw}&^b#((h^lTK&_GtBmV8?Z$Ez@^H&648^PZw{wnyJ%-=Nr zWKZzh{K>f`G5&ta-?RK}6X(h@*E!yxyQTnxA@|T-)b7sY_VUIMsFxMKN zKo8VQ^p004C$?A8u9U3d+WGVMAuVjv9uoN#ZePl#4f{bHWm;$&{;tIJYeq9dt%|Oa zohmI)Oa}MvmAZPF-S5b%{i{;@1G;uOAUE0y`#tD9D($F5Xl1gzoQtV5Exbs7H6fw5 zYZlP3a~I`>d8eFiGVd9|Gk6~`8;^;-6oQcB{EmDh*|lZYNBIYJ`AE9_1D{_0XS)0x zDL+K&zxvb5e_NNImM(wxrK6|`_C6@_4;8j3->Ct=kY{2MIoWZ~a$al**Pm_Ge|KC8xGOO3zPH99RK&z^L>3`_SnLfu*Y zy;JJy)!!SlYM&~#UwuME|>heV3ciKt60Yf4%1A(Ih63|whChdUHH^@B956~g>~C~4YN4}UiT zy!#glq5AM-(sa3etaWJT>4Ype=a)`2B;O4CS$8c9=MSh}K6YO)e4a3L9mn6MyNW zf4I^g#vaVBsEc@fDbZMR`Pl`(7c6usxX|xPmpVy>B-hhkv|SXugE%(GwE5z(WO>`- zf|;}Ac1S?|6nvSN@^q3aRB)?%J5Jx$y0>HW?Lzm~r*1=C&II71lFN!1)XRUfSLk}F zbgh&lMe0Mj0!Xnz|47^}0x$ihsp=co%>CzMfpvekj%_*k)yIApczMVpD}G^2=`jN@ zzTPoCy6gJRMP}p3={HSTbm`;253E^n>f|d6esRjffyP_fu4p~?4_#}_7w@0CnRF+3&c~q81WqDMVM`d|bmiL)Y8FsMZNT7TxM-rLM9}NvwycZ(1 zO?lVV91kyJ4pr<9m2VE&!}Wm4^rJ_sMp|)1>a|CHUWOU0c-JgH9JI#|1(=L+d!T{? z+^4!jyq+P>V~Af(57D&7rG^M#ff{fMNzTTj#-fWDar`r^nxJh7BAG9y5$UBgBE6VG zB=e;c5y^Zdg-GVQ6e0y)$sm%Xq)OXkad--pzY89mZZ_`+F}9iIZxa+pOkYu`;=O>U zCs^JSw16#D9v`BjLUwH7G&N12676;o*f3MB)q}2^i^z)vaRGj zEA|ecTLyH4_K^J;OORXg@NZ#%IS|VY#I7r3*0+Z2G0i9B?=m@&mt%0uilgS??VRV@ z&k5ws%yX=_>-Ket+MoBFw@_xy^KQVZ?dO0Ug>`%Nn@20;O~87zpDaj#=?`AU397Aa8u0buiW5PgHxR=V-th z-p_1K6sEfPoa$o0daj=k7tCd4=9M|fd`1H<{K-IceQC(M-e~v@H>RaQZz<55tsb$* zW^DM`Dv0POS>#sP_m?rdX+ybPaE3CC!8ls|IXGbCh<)VCP=5G`m{*i`K79v_AhJ?q z01PPhbXd%ESj&*VY@oa_5pidBO{Y{r^~$4GneZXxR5s*XsZ(U3n`URR#4LZ*u|oSt z6BuE}_iQI-SSmgXA0Gz3TI) zxl`((f{yR&*`QEhQu+@xI-m4QDo)9Rv3k}@Nko#K&3aR;Z- z>5^=!g^m|Tbcpqf0n9Q z6|iptXL6z(xr&+D-c zM0Phtx+CGS@)&w^{c$`(rXH`dHn}g#<;8_OoOle0;+T&kdwm@H3~fmatvHmpB)WG* zVicbBiNORR8VQ02n|z$x?I%ppU)1a)Ah9yC_bPmB4^` zx$Fq;VU`USQVsl_0`=!(e-jOZ^S<+u97EPV6|OtIGjS7-dBv4J#8fCxuC8958ugX( zsj8O>C3UtvHJ2WhavyA7LEjAiP(K`;!WQ0!b(BQamSM4ApD#>{!M#hh6G9EsQOU~sSQ@t$c zec!16IqVyVq!4PYwt906YY1s)#d*DK_OCNdV}qQqGeSiO(Kq<4=N z0ITQ#m@K&4Sw!0Cqs-<;X0yJ@Xb6Ij+`g%A>m8XQVs^9VCufsX*RStU%owbh9=cu!46R0)u&qsFmk8J8(5*jXcK=s8{kxh{$ zp|et7oV`xO7j=LyiqH9F?Nx|1Tp7*kNhM8)etS;cQ4Z$b1s@7o+N60mxVhADuDR)DwgYdpGCxTfq~ucU!&HERR5 zmJh_1EL$?pqUlV?K<9BNrHb(-(2}8}yB%=uxJA8+s8@XSLi(eS`Y2trGeAtKSCvl1 zpJ(`YIzQm3375T$I?50%xx z5f@kiCJ;Y*Ojdu^d<5+p&Y$_b@dC`buGh)a-={kvZ;w%*5KMjH_0(z8f94jpakjOS z^2gLk)qkcy11Y)K(_Nq6yl+5Vs~j+0w@;lgy&-3$e7~Wni=kx>m~OUOGXl08TD)81 z<#F)xSxEg`2yQ(}vKH2q6MuyNST9z0^X}5yVDR1!X> zdPH}QE5$&acb(RMlsZt>CTj-KBU=GruNtBYBjI#thf|~GjUkDgf{+DbFM2^4-P zbT~tt4zVN?Lp6SfI@0UqfO82iQtRajsYav;^*&v%Sd}c?u|3Vo*|{?#I>w*cz$bRe z-8gV)($oK11+Frx%C=R@7(Su@Z-^*4-0j2xhwWH8A>oinlURDG<|Uaa6-kY;s?!-Q zZCWEtYd+J=(PP>~exl7n>)(~4kyer@0z=ZX+Rudjca#h2IN;3rhWw%_*&MiL7yMcZ zxO?#b&9&ZxXR)io_oWLLtjsF-=m`a{Qw0w=FMd-`y56jp`4!iy^n7YlyV}hyc%w?3 zJTor^UV;ycOP=SA!UD!4=h1*-@`*Uhzu_Edrfboj()mLK^>HBXatZFN_}}D}=dfNB z^2XUNPtYlc;Omz(&uKQxk;pcfo{t&wXasbGj_gyEvi#3*zrf;GI^S?C>TsLtOq}9; zhg$+9y3`~2oD)uKc&6t&eN?3Ga}f2*+Mv(Bb1J1X((~c!TkI_X&KGsLg+yG&M@!vy z{@LoibGnqr;)wq1lPOn2=$0XP4y*pxUKsQq4H}b<;s64kN~C^2zH#1ef_S95=)B3D zC_x%)vco%pw{m;|xIPP!t_`{@Mwk*r2^8@B_3)wO-6JP&#^G%nR$!g7&(bA^IQRzI9u3Zj`v z%T-nzO`=bjMQv0v50z*sE_zb0WVka{=X>PwRJUGPYi5jm3s1Hg-){nhB(-2ozDBja zM(G{?Om;~Rw+ZC2lIPWP)fwz!CBKyC9N$**PcFp0sv$@df}{%nIByP%_pJDP2q`JV zb${LWA^J2cPPUFucz-+MA!kUR{C!>bRigptDA}+QnGQe?srsU1JSrv-c!+1L2+75p zP2zACyxh&)E!2y_>^lnuN^A zKVmb^Y2#ej#DG<~iGHi{61l7L)0GK6>Uf3JB1NwgeMgAK?*2yoHYyI_^%?CdH=@&l zhETeI&=h;f!Np8Q@zQ|(W!xb08_<+EcB-}cqueA8b^G!-zvu9K6}vDM8qXYHdq7T0 zLIJWqZ`#-8qpyemmgq+e?%ax90sH=k2wmtZt_f8yOP8l$^M_@zujKRnPROan72n5d z@VikJT3o3T#px2oQUV#X)bt(+KaVMrc-5{8jK%-U{K4BK)_n^n_#WDTp|~r1Xy1|5 z&d{z6;IN$;O-u8Kxk-#OKx1zncFn`@R&47dAIHux@7$HM`=6K;IiB?$b}q`SGe`); z5L?1~5=CS@5h{kEBR$Gnv*qjT@A*(hcx}FU=QdsCJ0PD_83Wd!@82f(4 zjwRLG9sV_f(qI`o12z`_h7MRm8Ga%!1%OiFS3@3rNLGs=ITjM9;zwkv+)$?8d{e!V z1u1WasyCJD&8_MUG+ezo{umnhu6w1jYV`s`nR@Y8UPvk)c~h_6e8zpVnKwGGfU-hj zDpP@(;Is2RQ``wP6P9AezJne`V#y`yrlu6($f&pEMi$WlV^K`5$%?aR85g9CEj1o`l&hs*IkUPd zRx>PQtlP`UWgK5-tmTOM16VoMRMNSCeFIWZ`DXLZ%@abUAxLeRY1u-3M8o2+2>{4X zlm1zye^%(9W%?(gf9C3++4^Ui{;A~0MY#0-C0X=9=>JXz^yg0L&&zIqKGOY3hTq3{MQ2P9jHB76 z3Hh+IIwP5i)-?YA(x07Z?ACK`e?HXxIVAmgx)1K&RV{Lbsw~!Ua5Z83OF^K z$ag9kj6UP`ZjheIK@A%z!8uOP>7S?c&!hUMUjNkUpWF1$4f>~wpH_7|2Q6XvRfis^ zOOAI3E~!?JI4fVke&laBwBQovPfa6fT5vV`2cEDz5m?IY-}J5YpWDPKzQgYZjCJV5 zb|)pA7J1D{cMO(Pg9}PbV;$xx^)7Mg;T=I^U8h?;LY>ov_~q6uw{d-|V8iV@+;UQo z^d)FLFE9$)YfXMqoyG#QTrkb~0Goa=rjADnc@Kn)3COqIFpjTdpPpjp+mt~%?LsbE zE`zT5%GEsN8C&FCxro#lY;t1Hsk-x?Qzt78+vIt7SW{u!NROqT!#Ir9J2+CX<}CuK z&Y*sqCeEe*lp_BWL;Bx}g~;Ysvo|F5UArxhs4+*Dq%Ru=5SQokMW#M^<1`vPYW;5LGB zVWqB}G{qkOyzp16M=>PDjl9B*NIj>{7R&TMhQ>Aganmlo3AZGnN5DZ?(Z0kWwglo0 zfG7PG!dG$4tSR=(&&%{_`K|Bwu^9+nZiObiC|)LK=cb>iHexe~1xl5H57BD02|m;n zewGlLAq<8|x*4!fupU-Tsc=PwQ6Q;8X(eDxf_VrR9*2^xUi$ z)1#HAYP^By#?pZISonV!uj0GL;!SA7*2AiCWzyB-j5VkwtA=|cCEVeT(Zl_?Ig!iB zkkR+^Y8mdXicQswcOmP3{5odzUY{60)p)B&Q4O2uyYz>64)T*3p>?HOp!#*tzgE)cnTT%o-Vyo3DnNt zmS&Z1=#pag(>e4Y^-Wy9`KtQHmeoF=SK49l|5Rvvn* z(pcTXW~CfuZ@kh3f%VM47u7mVZfgjMAFt@F*__N(6s=-gYCXiBTQ2=S{8rv`iirD% zH3`YZUMVzJJwm#G<|0zpY-97K{uO|Plp`?ottw0m?hPM-8;X7`v@+n`M7F|Bn&{5t zqbc@J6wIdB_uH#d?Xz3tJu2|hdtxrU_GQ8AsJ~*Hz-u4ynh(5Mk72t2UWS6#?*Z37 z0oVEU+XPw%Yo9(5T3PTqw9Qz(z7MqiE1NmhTr}IO%V7Kt_R;QV)k8FMcVQc`O5;5SNn zY;bP^+~-3AtE6jPBFTZ@wS!~VQmFYDat8p0zMV(^d_vzg3BZT=p>Jj0?Y`B?nmiuY zK9v{(zl*%y#DKq zjfdsj4!z!5=}@TQ@4~hbqh$taCrq)2Kdl7OcbfO-Dz~mYV%>4;!nE6^>W__0Nh{g% z=X&JNGu3;}h>eSYmcoDaC7E@LYi^rjKdKhDFq90v?IX|rU*ysDlstMIc~o!-c~rF+ zNWSVWsb2EvYG48B6j8*LE^3ANX<6-PMpm0Dvf4IKQc0S<`C+VroxIhiJ-Egiq%1Vb zG_(PDoUP!2eMrEO#=mquN;scw+CS+nzs9^8zJtG`>xT$){Qoz8M#uP7)8c}m1ocmr6(9PTSYMq{Z0F^m^FUcW_6DYs^@O@C1_ln#72<5z z@9-G(5Sp!p-SZF8^iv@aSBZQn`l%ui6{4R`^g(TYvqnTqC0Za~HWSpT`_Ez! z;oXcW`kR3q=W{2Ubf|L@r zxTLB=HV|^%RA5_36v$ z$9U^IKTSOjXFcBREKWV{`7zBFrS2*p=T7p$sZK1CyT7OI{w#OzrS2~M33pplcMIfh zgSvD3dBC|L)z6EvS|PS(Sov1 z`mrpCy_6T(_EOPKWrQ3=rhb+`2BJdhl>%$8mEviAQtW{PpQ2ytIP`XD345Uac~1X4 zrGFmPKlS>jR{z|le#pfEUazgBGiz)q=@)R?YGUeFC%2p*C zbIne!@#5~>nhRss9J4kPZ^MQ~bSn9woA+OE=fRxKKOR?pz(TRHA3O$Q2@gojUWRcB z7Bd4i&y^?UW1iSuX5ypU94Bt8%{=@*pAWoqz52Yxx{>#L%Sd)BUcAy|kz2ylMeyEW z?}O?B-emaMK(y&FK#pDQpGZs=IW6hl)qWm- zNk#}L_LRjY=9@+Byp|6c4o~vZ5Avj7!24eK&0tI+u<#`2GvwWhXt^~IJyOmd#acN` z)rj6bP|3T?xlxKp%?t$H<=oItl6~HaZ6ej-l02TIp}Sd~VmQ#h58Z;)>fAm84r zL|2!6tZdAq&Dkf+{mCv8RUNu`avb$#w{yq<-RH$@q^Wp z%*^@OADL(i(^4O?9uGP@eyU2F+H7}ec4BMZU0~ z(>kzTrOQOW{Yd1iYrwtMl>M$J%bxI&*b}fv^=Npw?NNUKKYN6PonOC8 z>``0)l|6w&qBiux*4%kyY|66UU5~h()>U2WT^2s-WvfjtjK{B4*0jk*hM3k_mHloG zb^th@!j@-GV!uO`+Zv2bHv`_y*zXj9F`~oxh>Ze8G^W@$ET5K=$3r)pVDG#WB|k&-LRj!zqL;SdrTUBgZko2=0hvDbI|Zv= z_Pg;c5Gb93Rb-R4-)%Nyp%s{8G8i^MmXX-+qyqZ}du5jXdNTMVPR-0;&;p-;PsrLU zASz9RC_%VA@{6(u3w&f{)t)0Z;mds9UA4bzq_LcgO?a@YADrACd}l9=y80v-m4;94 z@|9W0v`rg>+qE%R0Vrh*R`$EkATp_Fhp;E(1BTK_#M{s=?R z`b-KwLA0Jv#2?xH{y*W*z1jGKCLp3uP2ePGv@G_r;^zMr3MqSCw<4|@g?gG3XY}DG z0Rqi+d#*CbK#k}&KJrDH#a1UGc-4~PQq5b1&4*ChO)N3X`&wcqx&e0aEc{FHpYf9| z-0RqySN4Z&d(5`p_820W;%R$~TJO^1j6EjB&nCP4>?U_BDSt+apW&XOHk{;%=4Us- z&twZ~{0s|Ig!DrBscgmmfE`fF7=MQ-Pr!#j^D~hzG(p$Y+N+q9vG_Qf(Xz#$rBf`$ z!n9KI4{EEhvP7O(99>4HcG^A^f)9#Zg)K%~E)Hk>lq!^;5==!H+_Kmp#dnExay~Cz>w3Y)2cEosq6P$=O5mqSn0!@gp-ztK{RyUna z*$*(ywh4cm2EA@NrkHqddekQS30Si3H3+V#}41 zhcSj%grXUXNpOOp9OvB5KzS4DfFKdD)*Zql`$aT>9OpbT!MIJBmbcovyD;$+3;}m7 zPum`zIaf3VR|ntfw4ay0bvCMNijVsN%KGW5Ab0ky+)4g9rSdd?>s*A0MJ<2LSadVjNWFMv-7aN`C2x*j zX*5(zSt~TR%6Oq>n0{I&F38OtWmVRpXiEpxSNjbAA>2*Lsvxeg_}rtd?JKpvM%>q? zYQv8vEn$>=L%56wWU}Rg{26 z6svx@otFpjiVZX$y~=lZyH8vLMSs02dcb3D-zx_ z{ekU!Kn8RBe!})g2g$6=2rJ3Y$H*2E7Q5eQXoBZ*Oqs4CXuWT4e_uQg-7loHD!GSL zMyezUg{`#_FnSFco|Dqtx=nVm#c1l9S6z=;=+;fi*?BACblYoJ0{^!LF1XW zko6CK_Trh@tlTwu8-ekx-`xIUDCKfFx0=mw5KKKpMkCrP2M)|%4o94XZ)~v zvR$>w6UUoUPXDS)R!%T-=1r(e{!APsc^!yu%CAeV;BHMR)u2dmnYgnqxi619T_CqE z>2SB^HY)Ko%4NbNYeC093+A6wmwfOCkEIIst4l_>TO*D58s#!Ef`XfVJkG7Dkb?y= z!K@KiQ*t76S%vjC;30l9Y!Wv$hoe*j=e$Mm^+lm+$!05bo9|_ob58K0+joS@KM0i{ z3zh#V;Mo|m_AqhN0_SY2IOJRR8gu{&c}9xgY_qz2hdW`WjN03AF>#a z+%8g#Gd63+GPY_-{Uq-U&j^H6Hp4040JWvi@_V?s*&-E(nyr5h}+ZM&wr> zadLT(!aPz^dC)e7M|f;6#NKh0SC+5 z?-|72Wl6}hHB{bQ^G$GJ-W+7a+?rc(vpN>??wL>QMni;J(ivsV!o)W?Cm7-*qhj*s zsIa=WdrtM&|213^^lUQAx7M7CtTgW|#YiV0{#Wacpr<|HZN6tnreZ0= zq0H9K#H!3gCXK~Cw=fpEjl%;=5jTXv^%ghmlDRi4Tf5A?^YEE28=t2iI`_E`{E%s4 z^6i4V9*{c8sBVYgK*Xi$Ebgb_UeD!9Vm4QS!;&qaQTk*OBxvc}>&!nD3_0g}l$69R zD^hJuZeUgX{0z6{o8|7&)ZKk@_fYC?x!f&C-900Bcctz&$=%G<-D!{_=jzm5!*{u> zOx+EIFZdd-r8~|~)HCN*-4!{dbiE@7Ii`ZJddUZ=_*BkUSENy2nDte!o5KWxCyku)x+Uk}?VwZHCi`uBL(uDLmI z7H(c>-{*4rqZw`vr-upd$+t0RC{8cmZPnkw>9sZ0p6YV?Exd#$!7zHRI{cQ0$O(~6 zG@swsDEzj(^Dz*ObSMRi*FI+6*`!&mbP`tEbs+T6m%Ce=;ZEAUxc(&Zo=CAZFs>7&s_v+8xA~_>kKQ)# zis(^cX)V{-RfjxrL}g;sU4C}d(s_TpzpU4AA7a_f!?6Km|n&yKqM z?5NAnq+q|gqr$`*d-1cQE9Y9Yed&-7AH^gQQ)U{EvdR9iOZx>{|lN9dJh|miy#_RRuj|3EIQ|@ zL>FBH5Rj}b^L__c`}!)LqeOIeM*DAf@+9BsZzX`;%!i99RyyYOYmj4WzNTi$&}^e#RR zdA3cp$6z3*HG8lXU|;i`cT|@@tcG;<`SW?pq4SLuyD(`;r-{sV5`1MHK^4B${&FrTyZ?b1 zO7#tOE%7MuB&N7ULzd$RC!?%nRp_v<&8>zBS9>=rQi7%InBWjxTjrTF2dG zsk;m1?z5@8V~{YHHPoqR8k5uiXW~OiBN$?)7awOxa1B>}WdAnro(q|mL6HSXZ}{_( z1wG!dH?rWkH|&$mp~!+`-r9E(-jw}POc8S<_YX?qCv#o0wv*`0d7CJC|K5#KWH=tbF6UlPM3lo0fE_H(RyyvsWN=bBM9$gIB2da zYS)3G)e-_uHigL-A*S_Sq?5T%ZAeNv{jdXPKOuih=wcPkY*>(#S9 z@q$RI1lCp`-hrMSME+i1efS-@Y$t}LiT2Ua)^#nY;BM1`F{YPL7Fg{hf&mXY2fs%9 z^7nY+?3gJS!-of*Cwf)7 zju(<2AQfl^)@AT*m7L$oPIGcINjU<|@dBbv#gAp)Et6tZR-w;$vVGnaEKFsvP0PE` z%X#Mtd2MzI0(D*LgEM1Qb%j;NlT9JJ(lhTbt2`1?n+E80SV=OmZ1ejzTKB8cn4rj+^ zXSMe&Y?Zf^7*jl8^30N<>UVDQ)z!v~RKu$G+4N0}lhLlz=by?H-17}j&OxIzzd22n zhBGO?#-X5*vi}ZD<3q2byh+=jGfR-a(>X9*3hP`<;?BgrrRYl0{gwEBuwSw{SdN3& zkxFB+csT{VJ2_d6$x|7O)AUomVE#-!e@3)FMSZaweptADKhwvOs^LSnT$1zOWcqL( z6T4{{q#c#0%x_OrHeD!r8NakM?r1Pkr2 zqwR^!H%k*t+jWV=QQBUXCitbGU2FrO9Q#IB+r!%E-=r|`2zK3VJ`ah^MBx&B55p78 z->5$u8WzNIljKC{-a{SE8(*yIhlP?;B6^65D|RhIMxMv9(GoZgP>u>x8_|Qjb4%{P zkH|A`XJSC*p%zYbZ{iIu2cCJS`N_v7(Y)$kB>pRT0cpUa%A6r6w_r;}4QjZvSJY7%-{b_KZ>tm^NpFi3EJvV6slB_FH5Ppu1VANrZ@; z&uVlD+4Y3Zs1?kb9UN{yF91{}$odl(IM|p; zpjbN+b9`_lM;TR(EaN%sxa51&5YK+WwW&2I)4GwNO)kZ>Q_CyUnmkM~?8#+nqm`=g zaZA2ldzP{X`ba!dl;1v{-kCJwJy7#^{+mBvrIBfaT98Kp?wGDJ#th5pb1B^nh*HTSbPoB6Y#DNf2ktrxBiqk z#VzlPY|KNi6Ps!IQDb>iZU4ylFO4R_1>wM#21xtxu99Fl6l%Rj8J*HY5yL)7)7a%6 zbPqVOA!wbEcsEdfB;3Cu8UJ58g?aQ#botN*l0Nt%f6XI(=wD4w5B_se<8ofs!Y0(EO|L( ztryRO802qPE8=2=MhhBKVM|*x(7ml49zHUcAw{$^W68WC()0W0js@g zNs*+M4O-Wh>RHix$A;>ZlyH;Kz=1lm7`6qvOvZR8Piv3DZ-bmq7tHe&HlmTBG_)hf zn?_)L&_f;@p$Af8fL{cKcv&Ep29W0cAu zCsIwb>`HEnu21bsZVMQGB%WqkgD}IWc9&M!*LC8RSY2iK84*TaMYbW#LbeP2_7r8V zgs2lQkRsbD4(7Lsw$dbjD{m1uh2&$g9ISX4A1fx->*KDg4!2h^La~OrMoUt|m0}90 zq~|ItkfyK1QF9_OM-CtJ*}k4=*Lg<9^{%wav9>9g-^f2AD-H<}z!Q^wuTUir1UJG16g z?$*7sN!^`cEEc7`O7aQ4ZbW~`wM?e(54lD}#waN#BlU8TWOt`M{8ZvwP@61e2Utk zMyC;(NioBr!VE=^NH1r#UiECL)PHgYA9<5RE0(6MP$$0}K{BPxj9oX1SGP%}Zen<< zmG+z5_B(j44%C$ALEFE|xeCr9`t;lk(hI)p>L!dL9sMx+S%DSO*N8-!Gs{eN^jaNS ze(qDgSd~Xx_{8$o=B2ry&}T{GWMJ(YMY5$<=~PZ)U~8^Gtr0~(M-l#BS(=R1QwCdY zBm0lfpI?U4kX`UCiiK`1UJ~-agnh}~EfWUkG>U$hSkGmC;sr7V23hEAJ2vgkjqD!2 z-5F_&AMotxn%rk^%xM-A&$&!>(3((~IEycG8}Yr*Ni=Yo*BIt9J|9%&&SR`@j{g_e zwfy~*zi0T{#UD=iy;6F~dA<=oOgTwNmUldYA#rphFf0}*V-}b+&c(CkS8oWpn4&j? z?1FVSt4UPZ{HY81)4v1#zJuLs*%(5J+~Gud4w{_M9tcY1d;vBJc5sk4`ob-OFywR8 zhYNrSQd3F)d!!xA0ba!JMa@L{%tB3t38L>!6KXPzxDo~G zm?X2$KI)uP#X}vEP+nKN-f=kiErsFo{ai(jXfPWt9U${Fw@bIx5__1C9xhLER;*-w z)p)I-Xb;&GrYPt7Ij3a}LXqD?!gM@UAT1b9{d~aZ<>A5_RswH+kYn2{?|@yzqkB1M?gQj+9+SxS#3NR z?qKImtY_lH7@jM+O3KLgfo&+%6rRWmTPq;;S0uGa7{7ztkToF0@(EeDlvX1bql65a zFf7nI0n#EbCycK4wN4o8@x&AOom3>1ajIgMt_e2j9*C3CC+)#!<2Y+XKU;{-WUL-M z*f(}?e$A-xB-t+aekhuwQS~+)@i3X5#Eu*!?X&e(O-o|D%AaZzh8D114V3?d7d1~1 z$1MM{>i6M|z!zJLMY6VaM-rS&x>KycO4QYTOsZgpfYn;DtJn8~$Ep4`Aa$ktH(&LS zFbfjry%R91a3=QeL`KAXF;um-o&J46`bXl{5paKedWg;%uC6(-0e2g|H5Q9^_ciwLiwXCw z^#!fn$|nz+@UC;(w_&o@$I!j~S6Vi|@e2p*`Nj z4rYiflIUJq4&SAA%&?iK?D=;72x&9=Bc@wPuXN)eyHTbGqdW5`8K0FAXa}AEs^ksg zfMn120KNQt-`M=Y^Ekqzb{tSSz%C9P{(>xcV~-?*igycp!@!j-HaX|yU4(a%a^j+q zI9-7+Grw*x#rMEV&XB`K!&iV}(3*uCWRsrW3O%zGyEMM!e@XS~$EyFG=3(9cBdPvB zf%K~S-^JFPD)}f+#3v=)|9k!)_Pzu@>gwA6H%SHp1SSZPRJI=)Byqv8sDwo_kbxPP zKm?+w!6YOTNC`z z2WU%Ko=*z-giSI;_5G}2=#jTIU%SNH8kEq4ahkFrVI{L{%&|^Hp77JlXL#TRxNw6J4|SZyxst`xeb&(MTZ-X_Vg;Pbvl~u_p*_78n?|(6 znxTUl!s=F7Q!>Z~#!6KO3rLg!){F$Q?n6jtg`sA&8|oV?3NXw?gJaE zX8cu~iA!7aa)seIR7uwS73My$tYEJ_KoMSr$1C`M51y|wmCqzE*!TrNFsK0P2o8^6 zjJ6E~ImUp_eBdMVfb%#6b$txxX%O$h0Tq2R=>&G5fE=_sXn_~wLUf;{^8?S}vl5W` zVXc{HYP>ST8h-?hr$I*>m+{8$gmpM;JSxT-zbu0_o&uKf#zQKBH{Np-Z~Pi=#y0+H z9B=-^jdxucL`U)o7@Q9q;Zq=fnM zhCJIvo~Mu}?7T2!aeS|)FxYPcRNV&s7Q2#h{)b09Mqq}(rxi&$kXNV!rEGkSE~Y{2 zXg6fCrbf;S4BNn$X<=xd?pGR15-U-#wZ6-aE7Nz2BT>@!E6YZ-zJg7Zg~$cP_Vh7nI;^-;n9*He}-cB+tvM zV`Pfr26ia&BwkI{n~{MXKa~&cU}n~g{@a6~yy*T2`tpDFc((RAp7}X{b`4~cJy-&| z#;Q9Ke4BLt`v>p64d<+Mw!I4$5US9V9C+^wBE7)p4yDlz2vD!}>?L{79Hf;7`T&mw zK4b5DOVUu#v$X$VG&|cA@%>Pgff6|{O(n`H)#A_noY)|qUIUir4z__Nt_|%@(mJN# zc=kEB_;G%bVcX0ET-0BGyMJmbSit?Am(d|YP7BV5AofMOu@*eC(Saq=2T>mLps5Mg z#&?~;i2f8F+u*qak=-*BlntK-7r`2V?>U=Cjldlv_n9Q;jqWpvh6Z9OyU!#T8tE|3 z>|YP+qTS#DSSg!FO?SW7;y&Yk3XJGPcmzo=v)R8KQQ8b1g37$jQ?JN%hkIOu^1R30 zZME(*H>{g%bf15z&fq=cZZja`Iz9BhtRD@}hYb&Xg2E903q#|3upz+UeG3*8o4|^t zRVh-ep>Z1zOJrd`*M>RQ1s`L9qB6t=5S8iXm3gn*eP%1M^JHbly3Y*amAM+8KdT#r zihSZ?wM%2MmO@|ud3b*6vY=)g@W&leqae;ERF*g%Eg;RL!Q!w z20jJlyH7#+F1qfS!V?wV!n3}@W3;K`3W14jklXaF)TTRz8lEwo1#{_gyyN3FLNtZ= z2kh}b&S}DVUH#Es*3{o;xM5=FwjK0#GfuB{7y(BzXf4pUp~>4xslyf`9qHC1j;;H< z@0+B1Y11&`6c2!B*qn3Bb;$T6ICJ<=MDbVvHZNyLF5G|PQ#m?}3h|kk4P{aK>>(=7g4ysOu%b0(vMp;W>J<`gJ#yqC~o&D!Z2f(iTqwiJQw z>=kLNt~GD-P}Fw)P^zof&}>y4#Ln1DdyZ+ngzeZIeMycs|6769?$|DC2<75v9j|CFE6e+MNB7W*AU|Gh!{$2J)B}3up3M>r?LJN4V9xms}V%_aQcPq3f$-ch3*x>hg6^&egL_F zmPBwe(OWI(<__%oABWk4F*&>h4I%E0-{gdeuG3dfVqVGcqS(MO`ZJ#pqt}!UuWpzs zydJ%c#mW@h^lW%fgZB?B*%mn$8&NYzL$&ls&Am5c;_L!Gz6s1o4m($IWLF!n`;8yy*gp|UK^BWFp#m-x6-+BuKT2p zy*I-4o}noqZm~GLg7bvSat+_xh4T?JiP+(n3uz$J0qlwW|B}2%n{u=1Pfd*}XokTUM3&dl=$PIg)9&na$XV0>P2gVjF=VwUANnBxs2J}Y<&7D#*S+mD&- zd4Za%;GG`oEZk6|ET3WBVfOlak#&W)k;;LnV7KAnaflUsAD<_1mOkq^2#U~+92{q( z1JFB%;DwO4$S|0DLnF91ksk2gDZHQ1p=&~PGs8mN};Ln7G zBQ-Qg@6^Qi`)LR{`-JtP)te;;)B6I6xI??}cIqncV=c^R>>$Jc2oF0I(2b+@tp4Qy z@`)jjMgOthVExBCoBD9{4$Qx2q8;?@4yq?qe^S=b1E8xzqN1i)#I$<$kqP?rFJvtb|} z0+#8K^fhzVE<~ONUqps74T|M`+6)6+D}(1SqFQwUNF^gy0eo2z%VF70j$j9hDX&$LjqVy z-Y%xy4h$B@VBF`kjxA4$h$V|hn1kX`f(8PmwA+-P{o*OZwW@@t3kLA^6xwbb_ zZ&7s-gLe^H81158BVPuK!5@>2mG!SwmVa>d?I0WK14QvZt00p=+Q(!^$e*wy2&`fu zaD7UyJD5vQ{T%;`_fZ*CL~b|YUDW?1>Yv~};CWAHehE#%PoVx@=Lk}vJb|=Jp8z&* z59wc`9uLjuxZizT$6scn9tcg2p#GT`Mg4C?QNK*M*)+V#^gdpmgCsm|vTX%ho82~{ z{6OVxufX!&v|{IG)B8=Pc3ctin%Y1SCpssACQfkO#nCzwRbgoTIFd26PFG^g{?TG|Allp$$on$@ z!*hQsFzr)RF<*Wl4-)cvQBV-tNNK^dJH#p2BW0X9K53ay&@T$MGP& z?1O7BK_EZTFw$1F@26-IUXEjR_w1ys3CaB#7We&of#i0>hDIh6mIJceI2WjnAvqc? zTmnpY*io*Enr1SD_6wZ(0!Xq^(`me>%k)q#(~1bWgv1KXp=?Ma$d;wm^7yP}99Nh! zQ3*lg{$6!UY( z`@)q=u778)$R0h0UX$`G`QZ0^{|aIa_{GrRLR;{5KV<&l|9p zs*=@V)pboefrIv3!y~v(hzocJ@V;oGb40HDJYIao1LoIY5RAKUeF1u?L&;>rD|v0y zArNo-UaKYN9U?7rlV5YCz`pKQqkHD4mp0;30`D&Vx*Y2(*Oer+#-q*R(QdNn-o{aj zq49edOg#UR(2NaOoLmkV@9YfXV?4YPNco%wSGsXKI2bs^_8<};L*66$cnzchafNIV z#%*3E1TeAdL`BTro15k*@0vdVgFzQIRIShk+fOs1K;Us&nthFKHgq`D;Fo}LMr!JG zZvB$2>!!CavIN{iXo??i4vl4}jNBk;(_ zwq)=?3qeJ`N~f}jmkB#)t9%rJ`+xqyYv!@wT;87rw0TkPW*8!Xc}IjdZC;22fMS6) z2sr`0l0PO)AhZcSkMA-yQz+FTfDC?MraajRFN&lCOxm51dUKMR;2ocZ39x zqw`(+o*UjqBlf*_kJ$%NIp2JO39t|dCg}0s8BKFj&FynhU*N&-%^gbj2{|xEGrTB# zcngyO7^%%V_eLxjjn^=EFna(WwBrI>aSruI+Bq@+6KK%q%x7>}COCXdu!mSbCQcA~ z2{fXxvI;$k5duK?2fxdKp%buzI0P?v&e0F;{QNwAb{-8JPMuljFj)Cj`~U)ZQ~Shl zM@B7FgEA$Ypg7_*=xbPUbf^uuAmJ0g{_VL8Hc+bmx9lPiU#Msh;I)l=G1%Z<45(Ns z+@02D)WF7hY?hkl;mt6-!+s%b&>$AxM$hr7#4J_WR9r+#A~w%Ub>8f~t63@NZ9@}$-2>I?(83~@r#g(}LK>1)BSxr-25NKsI!sk zT#DPsh%_Tp;}^Oi`Z6!&my$6%#oc5&$MdEH=P5xFayBvre#R!9`^aqfEABZ>%hI43 zv+!)79EU3;N|qf(wQK;WJtfqh5`bW@0WY?ul6=q-)sR&Pp`iRu2nMyFGygh^K~FD( zo_|9lD6Qr0V{%uD1gQ*(m!V3fd5`yWW;IH1zn`+ADlX2SI~DCJuy?$MGY7X z(M254#h3bPMexCy{B=Am9l=kToeFFShl=T(gU2RKGjWJ^Kh?cUw=SLbMgq zRH&IHrV4!{rb2@??P2xlz>svBJu?)Di}}_;dWaebr6@t_EsV7}(bXFo$@Qi9umPUo z>cKPP6zB)>Ks2qVE!W~{N1KP>0%-U)JRkXTkHxbKo`1$o07Ju#=$oJ$DJ+zoe+34Y zW&m=);n!ReRQo1mB%C*1Y;au*dDaGO+`_jfLpw2)@9pXVPqzpC_hRTe9*lFDL{qaR zr`(4A&APczX^lQpW^f3l%Et$wSwAlW%c>@rCPAR>OYh6~-5?h0S=PRp){x;`eb+9`+>XWuXyP z|7|+1&4+w&@nL`P-w~BM=4QNsiL;NB^r|bp<2jM(#{=aoBLMo?E~qd zV?5>=2&EuCWU*Gzf%{I-UWxW43;i>*4coBEU7*t@c-MWn1>2`nZrUqBW_#NLNZKMp z`0yNe8Me(yM2dqm5rsXajA!HNNzW(qb;m4OZ_yhU?_zdCj`@CEwwSFr=jTCvrq|Vz z@2i9G#TU>^v~Cp|mW+KSTIDS~YTSJLa`)-PW}P#^+nJyBI_74B0nkeu`ZSo64hDzA zFp+YyxtQ7(Y#1!qFtnR!6;p8b=Q+2@@DNc?c};7R#NwKSnAk|L2h&~a4Gq2vQyRUm zQ_{MPnq-R*&DcJFSvGRR{(8Ain@1C9l(^DG9)^dG#1=oFqIypmah?FYXz=_P!B||A zj8BTyorysO>9j%{t?lB`evN3P@n~NN%JnS!J`MGQ3ui0XrqIvmo4;(98y3fqCX>Qp zCpZ`_nMK5f;UT&LX7+yUZN+=T?!#l zs%`kpzUejep_Xo3$?!UP6nyO|cSwWJb)3Gji zTWK5Xeaq0O2h=p+a@0?#IRcbO6$m(uq5C2g$5yScii3RqPgfw%d(6=2L1Tad#%N2o zc)KFCG&GhXMkLgGn(vE)3*p-uyv)73NAwW-Yc_fZBJ-O5N?`p(Q-gI$(?CW6=FP%7 z+zzrK99=I+KqBXmy3fu5%3e|7{}2h!62-aovpPk20oFXJ^iG)JG=?SvV#i zi|ceb#~mZ(C{jzHYLgH6ksztxlR*$SSBm}aWT2JHEy2t5SWqc!KfDExpA8_Djy zAYnY*@c%vxKG>{f+S%GPtdGfxfhuv|e^hafkoBPn3Q~mFLkOH3@s@J~o)ZOpo4p|^ z&y2f>IVV9x%2`h8OeK7?O`SPr)d$Zr6j{t+iCfS4&N3fY)x57;yszf_k}@p5yo^*5 zslgrm7T1s<$wa|sXds+w@h!_pCk6Qe*?ld^9L|v48k2 zL^kE*`xk@SIM3cRy_4Sf1pRO?hH<{KyOUJlI=%BEj}wQsiPY* zt-b~63_Ku16U$Pzgb%Z9p+hv$epj5ltE5jN1ssZ@PkJSN66W*?YJewbW9XAJkSfJ> z%>Aw>Nh1(ReYZGrsc|bU{!Nj_-4SV=mOhWPZ#NM;c#V1wH7^*-7VXN*VArb9E@MsX`fZs<~~K3ZZ~1NPeQ{i z-ghkfJ|VIDeW8#Zu1NIvK=-&k2xGop{Z`d{n%4P7n$8OhDvu|N?=x&;>8hr4~!UU*Zsy{`NNRAQE3F^3# zZ+mYP`^AN+p=&1Xo<*AKpfS}9m8zjDpoO)!jJpzI^TSRu-K^V-860qVP~&x}bolHX z2}YeO150*jJjTBpeG*s+zzl+=0$##VtmzN|2h`KbeiXAn0=y9P8d5PF2=z(Uk`DJL+@IG`$B67=4L)HKIHm*BQW_m)eQ+^3=PhB zaI}N9v6DGAr9$j37g|ZNoPLHQ-my5TiEHoX{@{l!APVFGw8-o$#<{^6qu~KBTFk*Rd&>+xjZ5hnS7@?fn$MU#Sr;Vd3JMmro{o>OJQoq#6f(IX93Jvas} zI_Fr!Go6+D|MDsb!;gnSpb$C=vbs{Tn~Y)THmUG-GRa)*_3MwECCSxix+)K{$f05W zsUx8tDXWJ?u54qzfnmB9f08?^&AlhP=?*OSt>^KCWaZ9#ha>;MP)p8U*Po)TJI#?Q zR4KKmlh(h+Lhy6?I4))ac(@J`xD|L@!ztlZ7Uu^WRkP0m0>J`Y*t!Db01qU1)9^Em zDq?`2spUCGE~5&5CMoNh7UGOqVrf$Tn~en-NiBf{;&8^6hjLkY(Ob|Ij(&IN0A~)~ zJApW~`d7(-G5{kOA~Z5|AK$xkMX(zT;JEp)TCm0o!P(63wcr2+Fp0@gUSsJ03Jqk?8kAyMPl5; zK)E`Hf!f6;6xzC>p*%E@WGJQ)!L-*1wy$x(J8lSb%ZMW=;t>|HKNq6dF9o|P?%#|9 zAmRIkCF^Cju`>EiCq2Dm>PGEwqJoyPqz9l3Gu*v{E|~|3DM9!H+t(r&?vn?DJK-aC zVs%iUdtOF1Sbf<4KMz_x&v866G@LzW$O_=oOA zHY7G^@X&o-WR;zz%?dJWJge_eiQC6UvdY2fGqS3M5oo}A1W>pii#M(WcC!I!pdodQ zhLEbKLuYuQ*K=|dZoYX=_GjBY0Ux?AJZB)p`&aOCy!mfq1DBtLE2U$Q4^g}$tuyZL zai$qO#2F&iFhu#Mf&M>Fbpmto3gYEDhZ{VfkO#uuGqVwV2rg?PSoOpz7w5X5egv+4 z5TVU_uL&!R;_b>v1jaUFuf43Hg{qELJVTj*>%nB3pjVUK_%CJpR0fZrij*bQ;|f5y z`&r`0i?x~_V9f>N5BFt#g>Q$3@%BAigcz(h;IFL?n_6_uwqXOPMTVAH+~y=yEVSQy ziYpAr^L~8bWA_n*`}DwOXbot-UFo!9698tj)sPo{Lg!5MNC{m=x2icq4Rf&_Ea^mx?hVXdLt`f1 zg`u&4X1*0YcsY*twazSdt77^~n}CskU9d^*CGna+{Dp8P@(Lw!HYT>fy3^LIGuoze zz7cre!x*_5dpAuR5#mxR!$Vl!V`5>W0`@qDx3Gs5{CQw1E4X3{of+&$g+CSl6XBNj zf0p^7CV!bH`TZEP=NQVf!t~((Vf-`vO)^{1Sq1GZEh~a|Lfj~_T*T8S)7a6g_F#Hm z=CfF2IVKhzHZ6t&kmtKuppSVBeT*|cPxu4N!7>J_!vU(VgpU}XXLy8|mPXI{B11zu z+3Hb65D*~l^kc5lPWl-90km=dI5yW`fx)p!XrA$T!XCi`_#hubAdb6`&v6_}NAXY$ z@<2X%gaT*GgdtJM=K*3o(>miuR?x4^utkffXB6Ih^z?9S5vnozAJncK-;P;1KCeG~ zK0H>@EFRyFTReUmw|Kl5T|Df*$im@tv$<;WeqnrCj~6QZ=%io=swLM8U^MsP{_ayr zb$4J@u#}}dY}K6#A7+SvcCT4+^dRZ9YtQo@xey=F1#BT&#&7|I$(*IZkr)t$2aHcA zh2EBGL%>0lSU~6w*=P2z2NuBTe_k(6ArgUP4cqn^oBka79m4^}rxQYtF$`dQIx+NJ zAfpDf0^I92xw=h5!%CnXY`hH(m9RjBq;VWfStB;{2<|ZRV!#bEZ_5X$VpQ;g%AqmuG# zl21SnO6CGfAK{Fi)8uxZ-9 zMa84K?~Gz7>JSWp>ZVg#ox;eh;Sj2hrj18$SC3_BSHR%tEwBcFO7aT1E86_^go9=s z0sU&v_16=EnsqmbTl*Amho}4eEFyfJ6a4iY&1Km~`Rf^y>m9gmXniZgSEmd_?Eau7 z^n3Kl;*t)e zJl`V4^Q6QfjMo-Ey9JN@&|A2~E;T$z3}nwVZ0p;d{dbwpK%nO2uKtjZyZ=lDDVHG8 z63_Z1gzu&Bvp9GDh=-qL;Xh^JBq{v{g`Y!sn1`QZ;nZcG^(hEHMB$_u=OkU&=5c5f z+(YpiZU<5{Y%`q--H9rLpkHx1g8w1>=qy1MLEcgpVN?-HR$G#G0j##&k1GqUR263z zlAks_(}71V49~O==m=r-)Z)q-W=|*v>w)5alr|{hcnUdoZB+-Zp45)LVR)(UiOy8qF8_tv?d{IQD?^AjE=hp!i9Kmm1>eA%sDh^*iVRV>?n%SKvH`G~<7O7c4y8xG8a&6|W@{(~V>e zt^NhLvwaGsd`fA2&hI1{cc`$MvRZK=VJu$b@a{ekXl%g&mlO4&+z(PrFLJl~?Yeyb zy*eZ1oAZX_W}G+q?*Wj9C)8D#{c|v5dNUmkqi@uAyj?6GC~79>NqYY~q6Th~E>|QHF^V3R-tU5p5B-tG73)0#U?yAe(fq-N z2L@v}tbS<3^bLT#6+?3yKw#7J)VJc9PyR0TyRDxl;3&a^s~T21NNT|?5XN8dO*dDD zA93u&Q%$6b06HJ>{LA!w{}PPsE>|~utx*H7n2kXn`diLdmeC@Ak(c@j-bqEdYJWNlQqc-)kjxX=`ich@{SQ$eq|eva7>VJdpR z`q$X(7`=%=6jtv5;ELm{GdyRp{Ib)`W>k`2gYum2Z+Nf?PSP~yIo#{qlW#~h?dSs~4U-KDZBsc zAS^4PP^R`x3WA!M+TAfhdr*H;1LMLI^e6~@XvJMn#xDg=6CmU2#p5kdqrfVRapa@; z6ynk-n#~y9MPelLyqck$LPHtW;y+(1bW7qsI35)uy+f)OEbLr1lploH3*&1ig%|mk zdBN$$a9OuR;v*uKW#4k#miUh@GhP#2&fgm?Nah*7d{80Ajt> zG1CG{9!F~>=Ju9ePzpH0Gh4H|E#8-*Gd97J_38qDUgJ*?VKrb(EXYv6wm(RAfF7k? zZS|f2tXc5J4Rl_c{ds;$079FuZj?Kz=-(eK#L#QukpyPJW-BbfzNFT9)k1#~SRQ%( zfRkw@8ATimpK0|1f6{hu(RT2VOeGdwJ1TSwo;=!#uE3&u2XD#U46gTbC}*o>N8W`0 zcs=l5l7d$ya10OF-ks+Ik!sPsg$J-mPc&2VOJpmwG<(|4x?T-VV7>T;)n_vY>DsEM zJ|?JACiT7OVl)~It6JxE=%u01!`ELl8WaaLnmTVwo@n)I+VoItiw?@>I>AF@2}B=Y zhqXK(3LtP0TZ^+=dhbV`H-lota)LfK>$;q)Oum#C!7dcdpTnB}4(@<1Co=G-)DLX% zeT5~YN81~~`sg{G=~(Z}CYlg!{~QFPxMRNR#jG@yNo7fbjr z?3xASa01tzpb7jj(YT}sLXT#7-r)ch0Nm1B7C2QIE1t734Z1CvRORPG&e=!o@&3^D z1jT+Ge1W0D7W#|6oxH$*-^0mlJtDZsIpa*v^UcKr&uwR!I0cT-T*E>cG+(UVGdO;N zvb>y+oWt^bc;wF0ewKE5CtO29lfjRrJq~f|ug2-_98*r0^AD^^&w=fTL#jD#p>#s< z5&V9F)Rud?by$4Oh8M9KqZKkCq}7hpb#7tkU|phHlkFuZ*KC*PNQyT zI&Q4))TJLx#uZr|wHnI{bnX!rqXS7-7PO@sefOrEe8ZTyF(ti4cSyuFdN-ypt~h!n z!8JH^8{?Ui!?_Sy8MYla`ih=Q#zVY`MK30s()a6*r?=!K<57E~7aoRfU7%B+OF8+v zG12)VW&Ca=W4Iv?Marn`PoHShIhW^qhnz4afl;&qBIyPqR-nMh>`fGh3c<7Bv4Pf% zk)5EI4Xh*O>Eehi&$_2W4s%Gm0+KEQIv z3sqrpJ_xZ6dOzIcTYlDp_rn=@K?9U)cxXI>Kj=OO2u?ZyKj$!`&xly9XPF8Emmzdz z#g^P>p!aeg0azN;nz_apbJ{8ZU{C`)XQ%TQq04elype0z)((g|*%eBnAZ%R0V5VIY zQ6Q|_z(ER>v0fy8N`#uGo4eT9gH*#DM*T&n6kb8|xQBKCbb~MU7n|O=V<0*p(Epbh z#EYjud{XefkM^;3Mt9D&E^PBUoK>KeaO3(}N**&maF#jLZ|^id*NHjdIX@6gBKyyb z&tc5ry23uhZ-2@7+-~OjM%^`dDcXp473;=XP9AwOp>`B5YuiU4YZT#ndKWRWpk6#> z(*97wlR9V^Z@Lwr*Adew&QHYJglhq@#}Z)XPhdbe7`-V7-b#QAKL_^h1Oxj1Q_AN2UgtD+VHb}CnR;+z7n);Ik|};#e;Bw> zfYaMjjh9PpkGdol#jV8wlGbQW8}j61O0 zA=7;U2M+K^8xK_u)6xwiu=v-6ykaI8ou{n`UfnNxzf9imLrX9>K);mRr$S%bnvSgc z!%8;TQ^6Etb2)^ePIPBNvj;SNq#04X;hCg4(8O_mdj?8sdL=Z_eR@FMknLB)<=&ay zv`qhIXgJ{EavrsSMIDbosM^)P$&Tb09}rS~tYv7_>mMt;QM8{!i+=tp=lqsvk;Fy% zzv3(PKUP^nnRGs&{YJNpt1Nv5lcyvHc&v=H2qF zLwH_rs=Z>4*E#wfvfjh2hw}Y*odsVW50!gc>$ZD(%k5ccbLDQHG&p|Eo8?(uP@b|3 zC1SAWB30h#L!j8tgWKLape`jT8^`ys24#*7?-XCYy%Il2N&m$ukayX&UUxdLxMje`p0+i?pYb>o`1W7b}!7U;1DZvc(4dq}{f11I~a^rRm zH-o?Z4RlOr#TF=BAbv*c$JbZB!r*0B)@$a<*CK;{syypFfF#9&L9~wk8(F`_tZxv! z%wpiuS+|3*L>9Psl`TAFVEmen@+@N2jYmO9bSqE9z-6Zgs9`X$0%q9gE)Fl9h#JPJT#8xivV* zT-i$LNR0(H?I1{Sz-~VI5qdMhyk=)PJkgw`4E+BFn}gX{$KicE>N;dv_Xn^P%J0L@ zncjm*Fh3h9_vDdiM!2S~KL{0b$i>Waq3&U8!>IwA2IC3(IglA;eVK-+%@;(Sv>&U9 z;fFi>?$K2raLySp?ajC(L~vC?d(0T}C3gM+z;J8ZxSa+__TjfI&qez1#YkKHvqqyz zXfBvhmXq(r_un3K7W5-^@&5ZT+Uz#8_jYQp{vFtgnGJ|4_w0YB|9*UVwEy%#TrKha zrw8uB$qf3h_JXK{?+*(|1X-Yg#2em^g~Zd)R27|+OkRbZTF-$zY;HPM%K?}X#_iZy z_W7QQ5BKB0i@gisJEBi$A7BCh*(k&#qvDD(e6s?9tE=ehFt&xa#y#MYF+>&^S{xVj zX(|OJqb?zcbJO8^q?!j=5MEwXLbxs*6Z9V}i0CppeP{DberW#_nQExGVO#1~A|cL$ zF^?hsDkQ`K9`&n`5Z^r#J2rQ}EC4$~LWuRm93jYkIquntq2Ul3M|b0dL=p4dQv8AHbJ`zMaG@^sA83KXJQkKi3=aC%@C?mRzN-v^O|;cMfDK ztAj^*g#8FXgy$&2TWEK?-ig$-{RkyPV>v5v^PWH$K7kj}m*{je4$7TZnlTjlyvHv$ z`$n35dji*>fu<>tUoJ?PvO9br@O@4E;S_%~j}HdmpujJwlm7)Dv#&R>k(phAB`~eN z7F;<%jQ(fOhB3rj(JpjFe-vOsaBjm1mp*U@Y*Y3>p$lwAmcF*oI7F=D5t9+|N(8^^ zzAr;n5O)e3KFpIM?A3kF3^O`EySR;y(IF&fgF(*#OPIsb@!erS1wIffx)VEf&VkRS z(=ac={>qG;*vRwr2EZ7AXq?ULOB#=D6~fKQA-#D3h2r8y$OggJoFo?t^>n?x?S6N&_yS&&HsX|O+feXqg?NS-=D~D67wT= z)+)0v?YBOx@ScvaZ|9C&6DPW+Rx=9k=kjl&+JP48BV;HJ0L^c_Z3N3X{g70Q~{!pB-qc5^$nXgjUdmbgQp*d;XnZ@Z{+K95@qpZ7`SV zdtm`IKh2Dk)cTwPlcKnaw+}+PiX3CQYnk=horY(O*qh#(ZcfB|>_#XXNpa)RR6Nl) zJi{_$pEKRJAjLYP)jrTSCpodzI->WJ05C*GTL(!wk#7ANWNT@S&PLwsgh(+~i*zy8egP613`fcv1R{HdhUn zyYz6{en2{wACM@f)NtCb@N_Yz<0P{8a=RZo^_Y7rV){t)Ih1I%cB|$ouup+5t0}E! zte5mdPFKM(MHV&#ujJ-|?9!X4Ou&E{@A|-b3pvq<6>VTdDhfJ#N=w_T+ZDhc>}d7% z)I;I%Lr{ZPUv1W*O@4hA{J`=RCgIzUP^8(DoD`tf-(Ue72r~|O<>*_QK$m>4h2jqt z>2%B_+*?RopIm6`1{0_S;OKjE2MSUG--4ayif_+fvOMEEP)T6Q{GKWMjoUkERjEWc zd4$tmKzy_Bu>ew;p%s~-y*t~+E?T=Eao)#=2jZIYT{j30<0u*jZ zdtOFC8t^8}Wz@alv_Ha$69n*}D8D?QMd&Xh9U!oqsnGioflA8_r`-c9*35w?4vuUY zr+*p!X!iXiqm!Cm|1$L!qrqr>ql7QB+IFDDY(CvACbG_T%v@%iX-;gdpT=hHdpr2d zHK)6}Jlh*kt0C+5dban%!j${bz+v1O&oDgxQ`}x+xB;}cu6|mXV{Nxspb}jXx4x>_2%aErrvJvzV1%%C%^)2$m}z?h zmDD|N;6NwYJmXzEDE6WZT(NUzOe5&Tl5vr|p5=KxbwOUBo-UDBc>Ik7&_P=31s#xT z_THC~E+?zU7Qj58($cO^dXTTlhF|3QTHE!XH}VC({_`?peqNsMl|0{mWBup0YG)vkXHHsER&G}5t@VvKTFk(myxk|U~lP$!OxQ-SSLGy2W!=bG%(Z$%1E zM{>LVVOX%{Dkn?<)vNcyzn+A$3J@+(bdnh?~Cl)!oEA%_ht6o#l9Wv`wIKM%D%6$ZzuciXWzfF z@9XT_#lCN`@7wJAF8g+~?-BO>f_+c0Z!i0vX5X{yd!BujVN}Be_Dy2ne(amfz604e zg?&GSlIQUFF7|zeeV=FFKeF#u_Wcg~Hn8tH_Fc`sce1aQeQ#mkUhEaZ<1b@5^KyAT z1FTlOUA!N7zjd>iPqJ?w`wn5>TK4@8`xdcpU-f^Gg{HDEFLyYzU(UYi?E5=b`uEuP zZjJvH%sz^J$FT2e#Np!{-5-U!bNP{??_t4=U6>yV z^Sm(AALaGBPMEg{vp|?d!dxxP24Vh0n12%HE5hs+<_Te@{*dQCMwrutxkQ*Ng;^`i z24Oxb%wGv}yD(o7=Ig?IUziD^KZXl4Lzr?rSBmyZ_w+b--cNWvCkit|m{$lhRha#R z*(1hP=6B6cdHU^-aZ~#LBF_CIkzR(Ui12h_UM|(x=F|8% zR#w@{r>hQIRmH?=+j?g)i#D;+QCwY9ZOhDJ@#ju2DntrL(L8&N)48E&Vp*wuRZWrI zwyM(Mv~MVK*vpDmRXSI@R!%IdS$q8?TUpsnlXG&)SLWEtrcItwsk|SS@#-truufEzc>mdb_=7>pe(~|YDf~sYN+0dzJ;IuunWb%Ve16~W zqnv-0z^8E8 zyz8flnu~miT}eMVz6Gw>^2$nUOUo*q8`PS0HhV=?O&yOO`IePdVU*R9B{qkv$~k?y ztGdo!TAP_wq5=d;tJM;d-Cjb)yLbgL-nI6cZ`#V7jv~9u;bfy$Rk^aP#%?QeR8^MQ ziq_VYi$SDPL_KBwq}koh>zTTXn_GmtulVX_9`DP`ciM|;OPx-ey;{~_>rEVvz(QcZ z_lQ>3{7TilN=I!~=?1lOZEclpEp{fQ4E*gjr_0W|z-G7C*i{#%KrNbWE3eu>>H8Sh zTrsYFg%`wy%l?pN!K*q3FRG|FpJj@2gQ$1k?Z-HlQOzAi>uhDR`O4OtdHb&sZBC_a z27U{Sw;7Agi}Otd#%1PjmaZ%1-U^L=t<7Exz^kZSHIb%g(Zo8J9V5+R44cODll5gm zjxu{?t#jfxOYKUw2seoQt|w2;ud=$*Sy@_DyxLY;TkNR3M}U1K#@f>Lm1|vV`wVxk zCcIVbaF&*>Vd<&v#TfL}%mU=&U{zvXMdVjE(YD^E{6*AD79`!^xUyf-%F1d@^b6wm ziu6Nd2Ev@juq5Hrs+zJ=r%jC%$#c%m;r#_cJocMc(JP$?1VZxHFPU%u9{7WS>eAAAG$`;~A@{DOGvDWKz$@f-}__FN(!FGW#! z{dv7zc3=)_uS)&T8o*jYh^vCyIZ;*T0w62PZFV$uElsY<>Q!nDT8bG}ZmY5}Hyb&Y zMTNa)t-7JcWtTmqg+uD(QWqc+6O_=_2ISxb%&Vo*N}$L1Po2*D{pYgc!n~mV3|hXV z0r{nCY^noIRh_GCY8<$$l@7I%HIRh@Gp<8p%hCEOw3+JCE$TsIMn4I6+;yQl3QwzS zfCntC>gt-cwt?;$yglhMp)lhsR954v;!DR$8y|#mtV^0j`i!{r^J?sMrFN>b-34rC zU*)1va!gl6NA`$x-w^2r%;fcuaJGPkUz03bgv)g)KK?+FZ+t(Lh;(3+vtN8V?n`o0 z^y}HgP5#^$*=2pWe{UpQ#B)c?ORSrhS}*&?zj5ndWp%}((nZRb$G>pBDwxIlH-5cR zh5tp?gMT{xRm#_Ur`=_%D6MkXY}XgtYAQ+vvAD*zq1skg1>PO?DcbkXEZXm&9?}z1L;0DS8?ql8U+{xEX_Xuvv^;fP_(#&q-;n^bIMd-hYRkrHPEOq8APWo0> z*SehC4|TaPeksLV2|CVc2XX_+1PlN?S5axRm#X&4RjZxqN;_67o3m7{vQ=nY(LkFf z2=>}4m!lLIv#O?=jJ0b^;b*f~)|4ZAkc$`;?vH{>RWTZMt1F#02dF(ZF3kd7B>jA) z=)ZV>FiY7l-XDBQ_KP2fO?~)3ApD=5&ByHtVLmR*p9%8^!rUTEuP{BrtP|!pg;^xb zd|~Dalh;mB1UgX$2#E;ZP&yC!^E4qm92@#Fvq`#-(>n znOs@TcM;AFwYKT%b*iLiRZ4SE#Fy<43ilw9p-jwn0@GC`U9?a3Q(y5hmsWu`P|TNz zUn0sWchzDOL4*`05LPnj?-uF7cxAu!!Y#l~!R&K^6j)bkuPm*G{+#V1T(-xFd~MNS zrAvg%@x>&feu>2B72&ddF3_!!K-3_8E+2mhKRBRROBI_Y{3TtswzQVjw?O#I?T6g; ztrq?gPGvoKdmzg!!eu)a*RtJ7WJ9)9gv)w}ddlsZ(jvm;JSh?5D%~7wsY;KCC+A1m z>QW#r?4-m9B#=?sVI+LBEF(aNKDfA>z_Pe;GmSjLky`yFB>*I?eY=n-?(DrsL^A_s^hM_ zDr5ZB6Ed@|x%Rs2C*F`fY4Vh*H{Nvfw4CWPX3n~0cCK;G+&t5~`DV+4h1UE+;K!k( zpM3gR&*#UEfARMdCwotwK6Ccm`EY3!?UOdBD{HWOt+SPjZd0WHS{Jc?E)2gE{qujC zU*KNI`CD>6NHaGvf$fX46S&zU%)a6)NjzSzh`03;@mpkk9Zy$qiTGQNb2{Q5rSG!m z^LZ3c-^Kf1D-cM$|1{y>SG!eFufD=dM0mkGUXLsR7?QtGR$5Klx6-mQo5P`&s>`fP zf%bq-)N&WmH?(mptsuMre2CpoxeXYkWeHu}x$JhVaG zfO4;`aX2c84asw&jTMhO!NIoCRcd)D2%FWV4t1r?R;?|Bb0ujjxXM-y3JVJbP#!pF zA_vuyH(gy>>12cumblfWU{XbD2aVN?f1p;EuC=La!S&HH*$5|r$g-=|uBs}PR%*vZ z=shQPJ2q!A7;>wsY2haBU@fMYy||{L*jZO27^9+JS)SFURVw2mO;?e?M%!jrHRdOf zEcHTJO}R~dhr^TH-$}U7p2*>`Ift9s83L|_*)t=SAIv%~vJb^Ro!EyokZ2QYl0*c; zjP_@p9rPpH#;$Z#RIo}?W^wVOY%nyXoQ9gV{52RtyISMmt<)x|0o}?OYOE*hu3C%+ zFX|o}SjLrW(HUR}NctkaNa@e0aBS1<7&!D`q=;z#b!_Lm5^R_?kx)fJe-rmpqCMMs zu%#UMRZ?iyZ`QpeqEPO%m0SX7>P&7uKRvN>|yGzTi^n<>kiW3ru@r?g&)j zSnYzluA2Muf`Bc)8h=~VD+-^0vnsW2HOK&Png~EyjA%Fqs`v<7M8BybKiO~YTlqYy zeVwxg zwKN9^g%Pr(ja+p(n4*9HM!gb7sKbeg3S6RMnFjX~96C8(vi{QC>f`lj7Uf^KKLx84 z^ZIIa=`!OoQ*pj==|XkZEOklYqD7WP^OeOoc_0>+vy?1^ack|ib(J+P2N4H^d_mAT zaNZ-}HX+&+X1lPwOdw;RW8~x_{%)2!Zk9SJlB&3vP7R7z;(VyO*s&TjsCXqd$4(HN zwk3s2mle-3&Rw`{iE%C-g$5Q@E)ywdx~kVy1D0+Pglo2y!>P=exYNaVE;8M@XwuEA zr%x}=$jDe)kdd1)ry%2+j3x6juFkM7%b1xle_6&Y8P@)#;O<`R+Zs$EL#_1jCU*4#8z zRIIOZ-5+rHQ$OTp!8~p%3xp{f_7zQmPwX}j4UWonHb5a^bW9UA71rQr$5u6EawIon z*|%JkcH7b=w_6d-w7v|i6C_g>Da({R#fra)!h{?kjynpMnwAtSSv=2TH5C=jE-G9! zm!E6M3^nuDvB6PP2eevK=a6$5v2NvX2Pt&+n@|y zl1h6GBb%d(T}cV}Nd+RkY@buOMK>u+8JsXYyU10=Ojbf) zYIw2BY2lo@Jj^9wwGb2fcA{|S5IQvS-MxuXvvU|VTL5B~u>PVNr%}?eYh!mVi^OJ4&rjuJPEbR$GOT>WOhc>i1a@UIpAG5I@i z9J_XHO?6SJvlu%mXE9_ZL`_qd^LESmd$TAP%LJIsOL2rrr?uE$VK0ia)S9)GAcV_- zkZ|hAsNIrS>TecNewl9)CG7dc={goo&W5QHb^?DWd>^pe-B|OB#$7B&M@mbt3G7)Z(WsD*7 zqcZ3hpI+u8{dp`Uavs`O`b*VU<}34y&tLlYl|TAL{#aD=oxFeKJib)^GF+OfC{Wfz zRZE>J_EnFIeC2sgJU*Bv=0PMMN{76G0u27Hc^z+yJF#g zipb#N^GBoyDle_#AXXsKj~D5FFU*V5QwZB4;>+`)pU2_Ffr8OBLF6Ni32cuig~32^ zfmOyyOg>XOM81*_-!0ryex=BDFUv|T;_a2=am8Zpmi;WtTWWJIV=OnerI_ym0|yHq z7!cyOw900y#hSx+z_-!y4K~0a=S4W-!`RJn9Ir-ZB+T0(u5m$jnmG14T0i^FBX&Qr z6sI7uE9Md$*OfXh+;7MtV#6;?9}5qW{Y6Azt7HZ5N7>&GCGni&{e6A-f2R-sNBZ!8 zv=9Fu3;#aq%Qj;Kxv6*a`i>PHuuzzbm#U27QiWR@Y9=I3z+uVf{H5E$6y}n407XVE zhy-SluY|)A;l5I26i)|ymHZ_yk;Et`-NY&2_;OlAIoFB|i;5-|5udO~FfK|V`?_H* z*dxW{JE^!>@ODy*c|XYd6$&~)&Ick7uvG)KBy1x8KKhq3XNaLz1W7}5+;)us-EDCvePLkq_7zKd%D^q(yJnVe17J>^0V`aLfkFdGfo#7k^9dQ;g;vmHNq|NZTxx_kN-tA6i$CF z>5IymBuT6&#lzQuPEnp*$7Ft@9g#*r>ID2s@HFVWh@JmZ^CoiUINVYoPhH9TDayIw zIrfns>my1YpHZ#IN6yda{*p_Ug4N0D2Jr^QlWP|7RnY*=coLvTgq6ERJh?x4P{fbQ z(-A)gqb4B7UcHKebZQxI*Ju$xKA+zTe`!SX6OyptyT#{8aZ5zL<77f%)-UAc)e5sf zn3IL63Uin+^}_5~z|(yo%uZo83v-Jw*9)^om^NV+2=gXks=}0f6G>OgeUJ2)ZYgIm zM6^TFEs`FTZfVMWONxju*8xe-%Xl(BIc{;?^|kZs9{9QkzV3mqd*JIH___za?t!m+ z;Oidvx(B}QfvmK;J2mU|q0k>$oG-X$Gt>b(W$!6_K9=5mQI^>u15C1^j@1xBSi|l- zt5qa&jw{qcmjmVH7UgD$j7x-D^3C+(VD?Ml=_2|XIz>MGbR?>GAg=!4e-{h6FD|A; zcQz@Gx<0l)W{ZUJ{&Qu98nY!#j<95LGh5V!pcb9N<4`PZ2)9E`Rrn(@58Q};K9R2b zQJ9D;Cv^fHqsI*l;(zH+uk=G^#GdCz&B;RLMzS(MoIS^8C>i;EWI9kXKKls&zvfM? zxJ2DAQa8z_y-3hM;Pn;Cr7;fUrTBzMZ<7=t|4E3DFcKMe1~mdk1a$Fy#FuW1w{UxG zP9o#~riSc~X!S4jkzq2VR?J_?ukR9WOg;8{^d3IHWjOQHDHr}FC<&~qlca=*EGc4= z=tUw6?MG^yF}o4~05C524Uk;_3qmgG@&D>HyJW?`j_{>D0N9FPbD)A0f*}090tWfg zY`+fF^Z@HpT|#1FViNxG)A!@%|3_c8FmNJ99yN*{!lMBA33N65{J8TB2ss!ksbf?E zN=YmzsSoB*$W_XV z8W#B-8=1@NOg@+@TSc<-n+|n{p+7!6Ha8L%mhN*E_(HUFj8d*DswRkzal5&jC|vrd zTFB+Td3NskhgEne%6j&VOu!Oyic%laC86)!;s`f)(+6XFe@4M>CA^8tH*}6*?e8@( z`No+-NG11|VzKVoOVR0vR-Fu=8<)xh_z=(_P=83J8z)|1vip zgqRptUKQ8vF`>)>RRtG%!YA{hzA>Iz$~7_WFLOw-nlFnJ6L#J8igNw+*H4V`{Led7 zO3Go4Y%Tq(d&pECqE89_MTdtskq4$lA~V)sP4mM2nH->Gh5G|563UW4_kmnk-Mxs+ z!xg--gHp!IbV|5L#${%2V+@_E%xp&d>}ZtUe~Z=?zL_skQ1|mvXiM1ykF(+M*|j2x zEN7DviQ*Qx1Cp7!{Jj0sqs*FM86(p zXIA?3Qh%|eF&`ctJGbHY^DQyW;j#XaZ%iQ?M|M*4C9>%i19FjQV#sOP3cs|CMM%X$ z5N50n9eP9yF&NF4!X&)s7A@EGM~lSsy|a^2>-j#WTojnyz}>l`wAu%``vzGd&_P_E zNU~5UGHB>!{S#tziX_ONDlOa;szwqr;e@)81g>u+fhio}F}T{1*i@Hr%}Tf>VRk~U zQAC@QFgNcKDZUQ=f4B!s7uIbOc||nPBqT(1&?GERxZ}d;U;BL39=J2%t|A$C#oYwv?}-ENPPBei8{HPzVPGU-;qJ~aQIO1 z+hg|{!eiea%Tq_`?1r;9+*0tu*kj#udH(4)7=vkvg%E*(@Hu z{D&1b9A1zAO=0OJus(}@5^DwMg$Nm}U?u5K|1z@HBs8yeUuf4~l#abHp7bHM@qgV< z#}r=a@Z(Ca{uw3fM*rG+;cP(*LrH2< zG$X{l@OM&fRWA%;HP%t~V>Lyn%)a;e+&98uJoqGjFG)+pOk}_xaS97+2Z*O{WJYN6 z{@=0o`Z--B>)P{e?sf~xv33i0e|33mouIg=R;(K?QN1KZk12?Mrrk}!K??M{Y0}Ux zvhUx}%k;Ft{QCDly$8}RS4Qa5cLDc;}y^sFE_G!1$lyvkMd>Gv%hz;zJ z{z037z(47JY-Yc^fBVUlq}*m z2j)uYfH@ccWg2%L>~gP7-X{Fp$Rd98U=kBr{^rB7N;+Vg@xNN*w!mJgaW8=Vn;Q2* z*w<*>R@kdF?tIuKSBAV7;lG+J;@JP_HrUr`+;soBPU9v{?s|>;4%jzn+<1mmxkuw}fxTPfZiW4@#=R5vBN}%b z?C)vZFT?)6#{Fm5KhU^$!TzDf-46Rl8g~cm0gZb%>_LtD71%%4xc9&w(zsuR{iw$M z7uY}1xL=ng|s-h}&ma}N-B7XIP$}r=}MZ$ zjR)?P5gKT<5poGr*V^h^Q$!O4A{qO+*iXsLF3MZ zJxk-h2KH+;?(1N`UgMq!`wbd*Htd9d`X}-xOon@kCVVRFH)`BB!G5#Godf%Hje7>{ zGd1p6uuI)6RKjeyb2Z^c*ym{6b79ZZxJ|In)41ouZq~RLz`ju9w!)sTaW8^>vBq5h z`>h)H64;k&-1J~;p~ih1?6+&&%VEDm?dHiHRgQ|d@h-u0!}494?LLUpASzX(-(k;lIaWK!-y|}r<43kz>kP81&<*4GvK3$ zFM}^9`B#7g$@G=*VB(qZaN?`sZC8^F!RX z5#j~l=ww}rpMhg%%tD}$vh3bxS$EvBCZW)o{Y@}U9cYUdSHFx24F+tM&SCyjlm|w8-PuT zHw2pzHwQN&-Wc43cvEmQ;$rY7(jP70Ey;8Xa4X`i!Is3Wz-@@P1-B#K9^8SrHMk>j z8?Y^LJFq=*H*jcst~YtSPH=ZJy)$?nS^h5YaU_3NxEIOa4V*;sd&3uy=|13e;@!bL zi1!5dBHkO^hj?FbKjQtt1Bl1qxM-5{*obLWEI5w%WbhQ?v%#N<&jaTXPXq5Ez5u+J z_(JeL;_2Wk#Fv1t5?=}~BfbpG{Z}8eyvyMS$n+K9gTz;Y4-sDlK1@6le1!OFZ~^f( z;G@LXf{zhj2QDPO9(c245y#4!%SDF8Cht```z}AA%nde+;f9UIl(a z{3-Yu@oMmM;xE82iN6BBCjJKemiRmHd*UC!HN?Mw>H7Z;|3Rkz1b-s_3tUHB3Z70J zzjffvAT9^bB+e7z8U|im;DZMeXYQvTM4b5+%#XMTJear|cnEQI@KE9!;9lG{J&Csg_afdF+?#kia3A9B!F`E$ z0QVzq4en38BX|JuKyVQ8vEX3hA>dHriO&GfBt8o~n|Km9nfOBRBI4=b#l)9@mlDqaFC)Gjyn^^j z@G9b&;MK&}fY%aV2VPHn19&6xP2kPMv%p)3Zv}57o(DA0u7}K2E#{Tul4~xP*8qxSaS&@G0V_!Don{ z1)n2+9(;lLMerr!m%&$vUj>&DuK-^oejR*+_)YLF;uqAOT za2w)n!R?5*2X`QD4em(X792#}4m_5)Jvf-S12}}ZBRG_}6L=hPXK)yC7w~xEuHbOu zZr};TJAo$>cLzrh?+lJ4-US>*+yfj<+!Gu_yeoJTaW8Nz@owNa;@;qR;y&O6;@!cM ziT40cA>I?5NW2$#D)HXnX~g@0rxWiBozG2t0?l zA9ybD!Qd3)L%^xThl1x3&oaO#y94*>#=Z{DC%zRfAifPQB%Tcy5#J71Bc20SC%yx& zK|B|(Nqi?k;1v*C(D2Hz2+rZbIm6yA{dF}NA=Lby5c= z{3N_N@l)^?#81Op5#0%jIi64hAB3=YfCteI+ zO#B3V3Gov6QsSlX4B{u@%ZQ(XFDHH)zJmA}_)6ku;j4(BgJ%*y4_{3jzi8vFA$}3Q zmiQ(3I^vh%>xo~1Zy(S6MqQLBmM}!hxlXoUgDMTeZ;Ha`NW^V_Y;2# zKS2B${2=ja_#xuY;fIO8fFB|L5?(<375pgi*YIP+-@prrzl9$s{tjM5{5`yw_y_n2 z;x+IR;g~UZ*HR9@E4dR+$ zE#lf>9pbuRJ>vDi`os;uhQy7)^@$sUO^7!Dn-XsbHY08hZbZB>SaCm~vVl$E&B$~y zxH<6_;FiQKz^#b423r!h0=FUF7Tk__dvFKh*5HoBZNRp~?ZEcL9l(ynoxsk-UBIry z-N2oQyMsFu?*jH9?g{Qn+zZ@|xHs5`cz19Q;yuB=i1!BfA>J3VK<@fqNm#AktL6Hfvs6Q2W~OFRXf zN_-x8KJhg00^$q7i-@O#7ZYCsUP?Rzyo~sA@CxE9!K;XG0#|Z_72+)T7BYP+cpLF- z@OI)k;2p$s!8?iX0`DfC2i`+`FL)pEeDHqa2fzo39|9jHegs@V{3!Ss@j~!%;zi(M z;wQi*#7n^^iJt7cqZ{E@GRod z;Mv6If>VeevB36%7Z(b^*N7hlUnhPHe1mu)_$Kk=;9JCtz_*DPgYOVO0lrJT1bmNp zDfm9|li&x$Pk|p2KMj6F{0#Up@w4Dc;^)9s#Lt7D5WfI^O8g@D8SzWtYT}o{&xv0F zzaV}U{E~PX_!aST@N42c+*@cv?l0tnZHWuOcEp8Xd*ULn193I5BXM=G6LAf&GjUC@ z3vn&5D{*bG8*v?QC*rzbcj9{B&cy41yAan0dk{AOdlEMUcO`BF_99*%+>N*~*qgWs z*oSxnaChRS;2y*qf_oA-1NS0s4(?675x5WW#^Aohn}GWfZwl^Dycu`^aWUAJcysVT z;w`{~h_?j$5w`#jCf*7>gm`Q4P~w*0VZ^P#!-=;6k09O_Jd$`j@F?Q#!T!WMfJYOz z29F^g2o54X7Ce#M&l(J$*@PRda4f|*nH~loj~5rh!4rs21V<2$1P>(hN5Ll%kB0ja zkAV*&9t)4diwgdEoiP)4&UeF9a_lo(^72 zd*D+h_3{%BAy9eO?(Y_E%9~W^~5)THxl0j-b_3TyoLBy@HXPv;O)e7 zz&nWNf_D<%1>Q|O54?x?UhqER`QZJ;4}cF6KLkEZ{0O*!_)+jN;)USj#EZbi#7}@r zh?jy-5T_78Y*!3*4txHs5` zcz19Q;yuB=i1!BfA>J3o)x_6;*Aia`UQfKm4qRWsiwhRuR>WI_ zEs0x!+YoOHZb!U5xC3!(a7W^HV0+>YU`OIkU}xekU{~U9;7-Kd!JUbB0ecYl1a~Fw z1@1=N8|*{8JGck&p5R`@dxQHB?+flnygzsVabNI2;)B3`#0P_i5FZL2MtnGU1o4sJ zQN;bhqlu3J2M`Yg2N53&4kjJ~4kbPg97cRRIGp$d@I>Mf;7H<8;ArAg!PAIO2hSir z6Fik1@63YFCexF^$;9V?=Mql=rxKqBo=pUcpLF-@OI)k;2p$s!8?iX0*@o@*$ww6o(B&iz6Tyb zd@p6+D8t8+asfo`}!0!ix)ha2w(R za9iR+a6956aC_ov;10yq!Pdkzz#WNef^CRvfo+LvgYAgxfbEIvf*pwKfgOq013MAd z2Rjot0J{)31iKP90=p5f5AHO8Ji8lxLBHjYrn|MobAL16^zQkLB`w?#q?oZqjJb-vU z_%8AN;CsXmfbSDO2!25P5cnbS!{A56kANQ&F925(KMJlQehmDCcp>;H@#ElU#EZby z#EZetiJt(!AYKA~NxT&Niug(JYvQNCZ-}1;za@SK{Eqlp@O$Ftz#oX82iFk40Inr| z5&V((CGaQWm%*QjUjct1eii(ccp3N`@pABY;uYW@#IJ#W62A`qMf?W1j(CzTpI3?( z7m~pziO&I_B0d*p4+=ZMb-pC_IMzCe5d_#*Lz;7i08fiDwJ2VWt+ z7<`rZ5^x#urQmYn8Q==y%fQ!&F9%;Iz5;xM_)73i;;X>7h-ZRt6JHI!LwpVRF7dVC zd&Jj)?-O4Sen5N!_#yF);77zafgcm!46Y=e1+F5#1^k5gR`65e+rZC=XM?MWZwEgo zo&$bCdyst|6Wet|h)7{E_$p z@F(I~4e@!wiwj%8Cy8$bpCY~ue42PR_zdyw;IqVYz~_kX0G}tG3%)>nC-@@qUEoW^ zcY`kz&jVi}z6X4j_+D@s@qOTO;`!hT;`_nZh#vr7Cw>rogZLrvP2z{aw}>AB-zHuF zzC-*d_%88d;CsXi!S{(D2R|TQ1b#@o82pI%3Gid$CE!Zp%%6|6Ab&u@2e%|H09z0j zf?E+6fm;(-16vYT2U`)>0JkBo32sYV3*3&lHn=@;9dHNYx?pSKdf<-4>w#^E>w|5H z8-VSI8-neL8-X2&*9SWiHwHTqHvu~nZvb{7ZVGlK-Vp3Y+zi}_xH;IJcq4FU;*G&w zh&KUy5N`_hB;E|%mADw}MZ7t<8*$a=DKfujWrIyOd~@f+*}u{lvhndyPT*qh6oZSI z5r@8*pD5ASldoz#`eO2G;}wDz^PdO?mbg!19@^%m&r8Z&gNv+~;nF(h?@V~ccrpJA zSfPP?jqrzyo_a!F5_98Y2U`qgZ*_Pp9r2fkC!;^jYl&PuUUE%d>Zq=f9hl!@a)IA$ zLP^Mbm#FuvcijK-)8n;pKtpcQUopSSDr>E^l|reDiGIiG_?GX!mfz5PC^~aL|7wxh zZ2KHx>t?T+|10^Yz@K5gX4L!}Ct^3>yF0(5iP1UV#}i|sdY9|pU3DvJ(t+0b0O�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 From aac37f1223088584bccc0129d26861f162e0fca7 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 13 Apr 2025 11:19:08 +0200 Subject: [PATCH 70/74] Remove dubious rewrite --- .../intermediatelang/optimizer/SimpleRewrites.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/SimpleRewrites.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/SimpleRewrites.java index 722a9e037..b8b09d51c 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/SimpleRewrites.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/intermediatelang/optimizer/SimpleRewrites.java @@ -193,15 +193,6 @@ private void optimizeOpCall(ImOperatorCall opc) { } else { wasViable = false; } - } else if (opc.getOp() == WurstOperator.PLUS - && (left.attrTyp().equalsType(TypesHelper.imInt()) || left.attrTyp().equalsType(TypesHelper.imReal())) - && left.structuralEquals(right)) { - // x + x ---> 2*x - if (!sideEffectAnalysis.hasSideEffects(left)) { - opc.setOp(WurstOperator.MULT); - right.replaceBy(JassIm.ImIntVal(2)); - wasViable = true; - } } else { wasViable = false; } From 5f9d81703a1a9b92c3cc05ad5b0522b221ae6159 Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 24 Jun 2025 17:56:43 +0200 Subject: [PATCH 71/74] Ignore defunct test --- .../src/test/java/tests/wurstscript/tests/OptimizerTests.java | 1 + 1 file changed, 1 insertion(+) diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java index 10807fb8f..86eaabe70 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/OptimizerTests.java @@ -427,6 +427,7 @@ public void test_tempVarRemover() throws IOException { } @Test + @Ignore // This test was for a rewrite that caused an infinite loop in the optimizer. public void test_mult2rewrite() throws IOException { test().lines( "package test", From ca47830e149881f0ff428b3093b658f3d8427493 Mon Sep 17 00:00:00 2001 From: Frotty Date: Tue, 24 Jun 2025 18:28:37 +0200 Subject: [PATCH 72/74] fix build workflow and add release workflow --- .github/workflows/build.yml | 12 ++---- .github/workflows/release.yml | 51 ++++++++++++++++++++++ de.peeeq.wurstscript/build.gradle | 1 + de.peeeq.wurstscript/deploy.gradle | 68 +++++++++++++++++------------- 4 files changed, 93 insertions(+), 39 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fce966296..549250168 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: SonarCloud +name: Build Pipeline on: push: branches: @@ -18,21 +18,15 @@ jobs: with: java-version: 17 distribution: 'zulu' # Alternative distribution options are available - - name: Cache SonarCloud packages - uses: actions/cache@v3 - with: - path: ~/.sonar/cache - key: ${{ runner.os }}-sonar - restore-keys: ${{ runner.os }}-sonar - name: Cache Gradle packages uses: actions/cache@v3 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} restore-keys: ${{ runner.os }}-gradle - - name: Build and analyze + - name: Build & Run Tests working-directory: ./de.peeeq.wurstscript env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: ./gradlew build sonar --info + run: ./gradlew test --info diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..8a5798942 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,51 @@ +name: Deploy Pipeline + +on: + push: + branches: + - master + workflow_dispatch: + +jobs: + deploy: + name: Build WurstScript and Upload to GitHub Release + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + + - name: Grant Gradle permissions + working-directory: ./de.peeeq.wurstscript + run: chmod +x ./gradlew + + - name: Build WurstScript zips + working-directory: ./de.peeeq.wurstscript + run: ./gradlew create_zips + + - name: Create or update nightly-master tag + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -f nightly-master + git push -f origin nightly-master + + - name: Create GitHub Release and upload zips + uses: softprops/action-gh-release@v1 + with: + tag_name: nightly-master + name: Nightly Build (master) + body: "This release is automatically updated from the latest push to `master`." + draft: false + prerelease: true + files: | + de.peeeq.wurstscript/build/distributions/wurstpack_complete.zip + de.peeeq.wurstscript/build/distributions/wurstpack_compiler.zip + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 61347452b..15dbf70b2 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -17,6 +17,7 @@ plugins { id 'idea' id 'application' id "org.sonarqube" version "4.4.1.3373" + id 'com.github.johnrengelman.shadow' version '8.1.1' } import de.undercouch.gradle.tasks.download.Download diff --git a/de.peeeq.wurstscript/deploy.gradle b/de.peeeq.wurstscript/deploy.gradle index 571247d01..51fe07506 100644 --- a/de.peeeq.wurstscript/deploy.gradle +++ b/de.peeeq.wurstscript/deploy.gradle @@ -1,90 +1,98 @@ -// To publish first run ./gradlew installDist -// then copy to wurstpack folder +// Apply shadow plugin (assumes this is applied from main build.gradle with buildscript setup) +apply plugin: 'com.github.johnrengelman.shadow' -jar { - version = null +// Shadow JAR config using externally defined mainClassName +shadowJar { + archiveBaseName.set('wurstscript') + archiveClassifier.set('') + archiveVersion.set('') manifest { - attributes( - 'Class-Path': configurations.runtimeClasspath.collect { it.getName() }.join(' '), - 'Main-Class': mainClassName - ) + attributes 'Main-Class': mainClassName } } +// Get reference to fat JAR for reuse +def fatJar = shadowJar.archiveFile.map { it.asFile } + +// Install fat jar into ~/.wurst task make_for_userdir(type: Copy) { - from 'build/install/wurstscript/lib' + from fatJar into "${System.properties['user.home']}/.wurst/" } +make_for_userdir.dependsOn(shadowJar) -make_for_userdir.dependsOn(installDist) - +// Copy fat jar into Wurstpack bundle dir task make_for_wurstpack(type: Copy) { - from 'build/install/wurstscript/lib' + from fatJar into '../Wurstpack/wurstscript/' } -make_for_wurstpack.dependsOn(installDist) - +make_for_wurstpack.dependsOn(shadowJar) +// Full zip of Wurstpack (includes wrappers, .exe, etc.) task create_zip_wurstpack_complete(type: Zip) { from '../Wurstpack' archiveFileName.set('wurstpack_complete.zip') } create_zip_wurstpack_complete.dependsOn(make_for_wurstpack) +// Compiler-only zip (just the fat jar and related files) task create_zip_wurstpack_compiler(type: Zip) { from '../Wurstpack/wurstscript/' archiveFileName.set('wurstpack_compiler.zip') } create_zip_wurstpack_compiler.dependsOn(make_for_wurstpack) - - +// Bundle downloads for GitHub release task create_zips { doLast { mkdir("../downloads/") + copy { - from 'build/distributions/' - into '../downloads/' - } - copy { - from 'build/install/wurstscript/lib/wurstscript.jar' + from fatJar into '../downloads/' } + copy { from '../Wurstpack' into '../downloads/Wurstpack/' } + copy { from '../WurstSetup/build/libs/WurstSetup.jar' into '../downloads/' } - // create checksums - mkdir("../Checksums/bin") + // Generate checksums + mkdir("../Checksums/bin") javaexec { classpath = sourceSets.main.runtimeClasspath main = "de.peeeq.wurstio.Checksums" - args = ["../downloads/Wurstpack/", - "../downloads/wurstpack.md5"] + args = [ + "../downloads/Wurstpack/", + "../downloads/wurstpack.md5" + ] } } } -create_zips.dependsOn(installDist) +create_zips.dependsOn(shadowJar) create_zips.dependsOn(create_zip_wurstpack_complete) create_zips.dependsOn(create_zip_wurstpack_compiler) +// Hotdoc generation task generate_hotdoc { doLast { copy { - from("/src/main/resources/") - into("/build/classes/main/") + from("src/main/resources/") + into("build/classes/main/") } javaexec { classpath = sourceSets.main.runtimeClasspath main = "de.peeeq.wurstio.Main" - args = ["--hotdoc", + args = [ + "--hotdoc", "./build/deps/", - "../downloads/hotdoc"] + "../downloads/hotdoc" + ] } } } From 41d42e8c96963f452ea8862004228532cd0896a3 Mon Sep 17 00:00:00 2001 From: Frotty Date: Fri, 27 Jun 2025 16:54:16 +0200 Subject: [PATCH 73/74] Allow game exe override Supports specifying a specific file that will be run for the runmap commands, overriding other config --- .../peeeq/wurstio/languageserver/WurstCommands.java | 3 ++- .../wurstio/languageserver/requests/BuildMap.java | 2 +- .../wurstio/languageserver/requests/MapRequest.java | 11 +++++++---- .../peeeq/wurstio/languageserver/requests/RunMap.java | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java index cec1a347c..936acd52b 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/WurstCommands.java @@ -100,10 +100,11 @@ private static CompletableFuture startMap(WurstLanguageServer server, Ex JsonObject options = (JsonObject) params.getArguments().get(0); Optional mapPath = getString(options, "mappath"); Optional wc3Path = getString(options, "wc3path"); + Optional gameExePath = getString(options, "gameExePath"); Optional map = mapPath.map(File::new); List compileArgs = getCompileArgs(workspaceRoot, additionalArgs); - return server.worker().handle(new RunMap(server, workspaceRoot, wc3Path, map, compileArgs)).thenApply(x -> x); + return server.worker().handle(new RunMap(server, workspaceRoot, wc3Path, map, compileArgs, gameExePath)).thenApply(x -> x); } private static Optional getString(JsonObject options, String key) { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java index 326b7c8d9..3cb5012f8 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/BuildMap.java @@ -27,7 +27,7 @@ public class BuildMap extends MapRequest { public BuildMap(WurstLanguageServer languageServer, WFile workspaceRoot, Optional wc3Path, Optional map, List compileArgs) { - super(languageServer, map, compileArgs, workspaceRoot, wc3Path); + super(languageServer, map, compileArgs, workspaceRoot, wc3Path, Optional.empty()); } @Override diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java index 566bc4ec5..a5e56e00f 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/MapRequest.java @@ -28,8 +28,8 @@ import de.peeeq.wurstscript.parser.WPos; import de.peeeq.wurstscript.utils.LineOffsets; import de.peeeq.wurstscript.utils.Utils; -import net.moonlightflower.wc3libs.bin.Wc3BinOutputStream; import net.moonlightflower.wc3libs.bin.app.W3I; +import net.moonlightflower.wc3libs.port.GameVersion; import net.moonlightflower.wc3libs.port.Orient; import org.apache.commons.lang.StringUtils; import org.eclipse.lsp4j.MessageParams; @@ -37,7 +37,6 @@ import org.eclipse.lsp4j.services.LanguageClient; import org.jetbrains.annotations.Nullable; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -88,14 +87,18 @@ public static class CompilationResult { } public MapRequest(WurstLanguageServer langServer, Optional map, List compileArgs, WFile workspaceRoot, - Optional wc3Path) { + Optional wc3Path, Optional gameExePath) { this.langServer = langServer; this.map = map; this.compileArgs = compileArgs; this.workspaceRoot = workspaceRoot; this.runArgs = new RunArgs(compileArgs); this.wc3Path = wc3Path; - this.w3data = getBestW3InstallationData(); + if (gameExePath.isPresent() && StringUtils.isNotBlank(gameExePath.get())) { + this.w3data = new W3InstallationData(Optional.of(new File(gameExePath.get())), Optional.of(GameVersion.VERSION_1_29)); + } else { + this.w3data = getBestW3InstallationData(); + } if (runArgs.isMeasureTimes()) { this.timeTaker = new TimeTaker.Recording(); } else { diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java index 314c2b2c2..8d000fe65 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/requests/RunMap.java @@ -45,8 +45,8 @@ public class RunMap extends MapRequest { public RunMap(WurstLanguageServer langServer, WFile workspaceRoot, Optional wc3Path, Optional map, - List compileArgs) { - super(langServer, map, compileArgs, workspaceRoot, wc3Path); + List compileArgs, Optional gameExePath) { + super(langServer, map, compileArgs, workspaceRoot, wc3Path, gameExePath); safeCompilation = SafetyLevel.QuickAndDirty; } From d4969740ab504ca1fc3ca4657bea9adfb834ef88 Mon Sep 17 00:00:00 2001 From: Frotty Date: Sat, 19 Jul 2025 10:55:18 +0200 Subject: [PATCH 74/74] Fix for 2.0.3 (#1093) --- de.peeeq.wurstscript/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de.peeeq.wurstscript/build.gradle b/de.peeeq.wurstscript/build.gradle index 15dbf70b2..18f3e9f0d 100644 --- a/de.peeeq.wurstscript/build.gradle +++ b/de.peeeq.wurstscript/build.gradle @@ -118,7 +118,7 @@ dependencies { implementation group: 'com.github.inwc3', name: 'jmpq3', version: '264c54cfc8' // Water's wc3 libs - implementation 'com.github.inwc3:wc3libs:01fb9e23bf' + implementation 'com.github.inwc3:wc3libs:00a29ccefd' // The setup tool for wurst.build handling implementation 'com.github.wurstscript:wurstsetup:475cc7fae8'

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