From c595c5b240be1fc9576e0a0b9b6ddb9c90e15445 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 8 Feb 2021 09:59:12 +0100 Subject: [PATCH] unnamed exception --- .../decompiler/flash/abc/AVM2LocalData.java | 3 + .../flash/abc/avm2/graph/AVM2Graph.java | 36 ++-- .../ActionScript3AssembledDecompileTest.java | 48 ++++-- .../ActionScript3ClassicAirDecompileTest.java | 156 +++++++++--------- .../ActionScript3ClassicDecompileTest.java | 156 +++++++++--------- ...ctionScript3CrossCompileDecompileTest.java | 48 +++--- ...ipt3CrossCompileSwfToolsDecompileTest.java | 52 +++--- .../as3_assembled-0/as3_assembled-0.main.abc | Bin 4624 -> 4814 bytes .../as3_assembled-0.main.asasm | 1 + .../tests/TestUnnamedException.class.asasm | 78 +++++++++ .../tests/TestUnnamedException.script.asasm | 29 ++++ .../as3_assembled/bin/as3_assembled.swf | Bin 2856 -> 2946 bytes .../bin/as3_cross_compile.flex.swf | Bin 5962 -> 5974 bytes .../bin/as3_cross_compile.flex_apache.swf | Bin 5956 -> 5956 bytes 14 files changed, 371 insertions(+), 236 deletions(-) create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestUnnamedException.class.asasm create mode 100644 libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestUnnamedException.script.asasm diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java index 1c1327074..79a65900a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java @@ -86,6 +86,8 @@ public class AVM2LocalData extends BaseLocalData { public Map pushDefaultPart = new HashMap<>(); + public Map finallyKinds = new HashMap<>(); + /** * exception index -> switch throw part */ @@ -162,6 +164,7 @@ public class AVM2LocalData extends BaseLocalData { parsedExceptionIds = localData.parsedExceptionIds; finallyTargetParts = localData.finallyTargetParts; pushDefaultPart = localData.pushDefaultPart; + finallyKinds = localData.finallyKinds; } public AVM2ConstantPool getConstants() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index 2f674fbd6..9287a51be 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -131,6 +131,11 @@ public class AVM2Graph extends Graph { private final Logger logger = Logger.getLogger(AVM2Graph.class.getName()); + final int FINALLY_KIND_STACK_BASED = 0; + final int FINALLY_KIND_REGISTER_BASED = 1; + final int FINALLY_KIND_INLINED = 2; + final int FINALLY_KIND_UNKNOWN = -1; + public AVM2Code getCode() { return avm2code; } @@ -231,27 +236,20 @@ public class AVM2Graph extends Graph { List targetOutput = translatePart(localData2, finallyTryTargetPart, finallyTryTargetStack, 0 /*??*/, "try_target"); - final int FINALLY_KIND_STACK_BASED = 0; - final int FINALLY_KIND_REGISTER_BASED = 1; - final int FINALLY_KIND_INLINED = 2; - final int FINALLY_KIND_UNKNOWN = -1; int switchedReg = -1; int finallyKind = FINALLY_KIND_UNKNOWN; Integer finallyThrowPushByte = null; - if (finallyTryTargetStack.size() == 1) { + if (finallyTryTargetStack.size() == 1 && finallyTryTargetStack.peek() instanceof IntegerValueAVM2Item) { finallyKind = FINALLY_KIND_STACK_BASED; - if (finallyTryTargetStack.peek() instanceof IntegerValueAVM2Item) { - finallyThrowPushByte = ((IntegerValueAVM2Item) finallyTryTargetStack.peek()).intValue(); - } + finallyThrowPushByte = ((IntegerValueAVM2Item) finallyTryTargetStack.peek()).intValue(); } else if (targetOutput.size() >= 2 && (targetOutput.get(targetOutput.size() - 1) instanceof SetLocalAVM2Item) - && (targetOutput.get(targetOutput.size() - 2) instanceof SetLocalAVM2Item)) { + && (targetOutput.get(targetOutput.size() - 2) instanceof SetLocalAVM2Item) + && (((SetLocalAVM2Item) targetOutput.get(targetOutput.size() - 1)).value instanceof IntegerValueAVM2Item)) { SetLocalAVM2Item setLocal = ((SetLocalAVM2Item) targetOutput.get(targetOutput.size() - 1)); switchedReg = setLocal.regIndex; - if (setLocal.value instanceof IntegerValueAVM2Item) { - finallyThrowPushByte = ((IntegerValueAVM2Item) setLocal.value).intValue(); - } + finallyThrowPushByte = ((IntegerValueAVM2Item) setLocal.value).intValue(); finallyKind = FINALLY_KIND_REGISTER_BASED; } else if (!targetOutput.isEmpty() && (targetOutput.get(targetOutput.size() - 1) instanceof ThrowAVM2Item)) { //inlined to single part @@ -260,6 +258,7 @@ public class AVM2Graph extends Graph { } else { //probably inlined code in more parts, cannot do :-( } + localData.finallyKinds.put(e, finallyKind); Integer defaultPushByte = null; GraphPart switchPart = null; if (finallyKind == FINALLY_KIND_STACK_BASED) { @@ -975,6 +974,7 @@ public class AVM2Graph extends Graph { } boolean inlinedFinally = false; + boolean finallyAsUnnamedException = false; List finallyTargetItems = new ArrayList<>(); @@ -1065,6 +1065,7 @@ public class AVM2Graph extends Graph { if (!inlinedFinally) { afterPart = null; } + finallyAsUnnamedException = localData.finallyKinds.get(finallyIndex) == FINALLY_KIND_UNKNOWN; } if (localData.pushDefaultPart.containsKey(finallyIndex)) { @@ -1152,12 +1153,21 @@ public class AVM2Graph extends Graph { && (((SetLocalAVM2Item) currentRet.get(currentRet.size() - 1)).regIndex == switchedReg)) { currentRet.remove(currentRet.size() - 1); } + + - if (!inlinedFinally && catchedExceptions.isEmpty() && finallyCommands.isEmpty()) { + if (!finallyAsUnnamedException && !inlinedFinally && catchedExceptions.isEmpty() && finallyCommands.isEmpty()) { currentRet.addAll(tryCommands); return true; } + if (finallyAsUnnamedException) + { + catchedExceptions.add(finallyException); + catchCommands.add(finallyCommands); + finallyCommands = new ArrayList<>(); + } + TryAVM2Item tryItem = new TryAVM2Item(tryCommands, catchedExceptions, catchCommands, finallyCommands, ""); if (inlinedFinally) { List> parentCatchCommands = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java index a1bed7484..5ce92bb74 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java @@ -24,7 +24,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "\r\n" + "trace(\"hey\");\r\n" + "}\r\n", - false); + false); } @Test @@ -50,21 +50,21 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "{\r\n" + "}\r\n" + "return 5;\r\n", - false); + false); } @Test public void testDoubleDup() { decompileMethod("assembled", "testDoubleDup", "var _loc10_:Rectangle = myprop(_loc5_);\r\n" + "_loc10_.mymethod(-_loc10_.width,-_loc10_.height);\r\n", - false); + false); } @Test public void testDup() { decompileMethod("assembled", "testDup", "var _loc1_:Number;\r\n" + "return 1 - (_loc1_ = 1 - _loc1_ / _loc4_) * _loc1_;\r\n", - false); + false); } @Test @@ -75,7 +75,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "{\r\n" + "trace(_loc2_);\r\n" + "}\r\n", - false); + false); } @Test @@ -91,7 +91,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "}\r\n" + "}\r\n" + "_loc3_ = 0;\r\n", - false); + false); } @Test @@ -100,14 +100,14 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "{\r\n" + "_loc6_.methodname(_loc1_,_loc2_,_loc5_);\r\n" + "}\r\n", - false); + false); } @Test public void testIncrement() { decompileMethod("assembled", "testIncrement", "super();\r\n" + "b = a++;\r\n", - false); + false); } @Test @@ -116,13 +116,13 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "{\r\n" + "somemethod();\r\n" + "}\r\n", - false); + false); } @Test public void testIncrement3() { decompileMethod("assembled", "testIncrement3", "--_loc1_.length;\r\n", - false); + false); } @Test @@ -131,14 +131,14 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "var myslot:int;\r\n" + "myname.somemethod(\"okay\",myslot = _loc5_);\r\n" + "myname.start();\r\n", - false); + false); } @Test public void testSetSlotFindProperty() { decompileMethod("assembled", "testSetSlotFindProperty", "var myprop:int;\r\n" + "return myprop = 50;\r\n", - false); + false); } @Test @@ -158,7 +158,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "_loc2_ = \"C\";\r\n" + "}\r\n" + "_loc2_ = \"after\";\r\n", - false); + false); } @Test @@ -181,7 +181,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "default:\r\n" + "_loc2_ = 100;\r\n" + "}\r\n", - false); + false); } @Test @@ -227,7 +227,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "}\r\n" + "trace(\"G\");\r\n" + "return null;\r\n", - false); + false); } @Test @@ -248,7 +248,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "trace(\"in catch\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -267,6 +267,20 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT + "}\r\n" + "while(_loc5_ <= 100);\r\n" + "trace(\"after\");\r\n", - false); + false); + } + + @Test + public void testUnnamedException() { + decompileMethod("assembled", "testUnnamedException", "var _loc5_:int = 5;\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"hello\");\r\n" + + "}\r\n" + + "catch(_loc_e_:*)\r\n" + + "{\r\n" + + "return _loc5_;\r\n" + + "}\r\n", + false); } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java index 6f39b4c19..2bda0bbe2 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java @@ -19,7 +19,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testArguments() { decompileMethod("classic_air", "testArguments", "return arguments[0];\r\n", - false); + false); } @Test @@ -39,7 +39,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"infinally\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -59,7 +59,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"ch\");\r\n" + "}\r\n", - false); + false); } @Test @@ -72,7 +72,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var e:TestClass2 = TestClass2.createMe(\"test\");\r\n" + "e.attrib1 = e.attrib2 = e.attrib3 = this.getCounter();\r\n" + "this.traceIt(e.toString());\r\n", - false); + false); } @Test @@ -80,7 +80,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile decompileMethod("classic_air", "testComplexExpressions", "var i:int = 0;\r\n" + "var j:int = 0;\r\n" + "j = i = i + (i = i + i++);\r\n", - false); + false); } @Test @@ -146,7 +146,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"hello\");\r\n" + "}\r\n", - false); + false); } @Test @@ -162,7 +162,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "}\r\n" + "k = 7;\r\n", - false); + false); } @Test @@ -182,7 +182,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "vnumber = 0.5;\r\n" + "vnumber = 6;\r\n" + "vobject = vclass;\r\n", - false); + false); } @Test @@ -200,7 +200,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"4\");\r\n" + "}\r\n" + "trace(\"after switch\");\r\n", - false); + false); } @Test @@ -222,7 +222,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"D\");\r\n" + "}\r\n", - false); + false); } @Test @@ -234,7 +234,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "a++;\r\n" + "}\r\n" + "while(a < 20);\r\n", - false); + false); } @Test @@ -255,7 +255,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "while(k < 9);\r\n" + "return 2;\r\n", - false); + false); } @Test @@ -265,7 +265,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "nextChar();\r\n" + "}\r\n" + "while(ch != \"\\n\" && ch != \"\");\r\n", - false); + false); } @Test @@ -287,7 +287,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "while(k < 10);\r\n" + "trace(\"ss\");\r\n", - false); + false); } @Test @@ -298,7 +298,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"between\");\r\n" + "var g:* = k.(++d.attrib, false);\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -319,7 +319,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "arr[0]();\r\n" + "}\r\n" + "return i == 0;\r\n", - false); + false); } @Test @@ -341,7 +341,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "return \"hu\" + str;\r\n" + "}\r\n", - false); + false); } @Test @@ -352,7 +352,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"a=\" + a);\r\n" + "a++;\r\n" + "}\r\n", - false); + false); } @Test @@ -378,7 +378,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"D\");\r\n" + "}\r\n", - false); + false); } @Test @@ -393,7 +393,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"hello:\" + a);\r\n" + "a++;\r\n" + "}\r\n", - false); + false); } @Test @@ -422,7 +422,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"part5\");\r\n" + "}\r\n", - false); + false); } @Test @@ -437,7 +437,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"item #\" + item);\r\n" + "}\r\n", - false); + false); } @Test @@ -454,7 +454,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"item #\" + test[0]);\r\n" + "}\r\n", - false); + false); } @Test @@ -468,7 +468,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"item #\" + this.testPriv);\r\n" + "}\r\n", - false); + false); } @Test @@ -494,7 +494,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"C\");\r\n" + "}\r\n" + "trace(\"exit\");\r\n", - false); + false); } @Test @@ -509,7 +509,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(item);\r\n" + "}\r\n", - false); + false); } @Test @@ -542,7 +542,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"C\");\r\n" + "}\r\n", - false); + false); } @Test @@ -574,7 +574,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"after\");\r\n" + "}\r\n" + "return 89;\r\n", - false); + false); } @Test @@ -598,7 +598,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"E\");\r\n" + "}\r\n" + "return 5;\r\n", - false); + false); } @Test @@ -626,7 +626,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"C\");\r\n" + "}\r\n" + "trace(\"return\");\r\n", - false); + false); } @Test @@ -647,7 +647,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "}\r\n" + "trace(\"return\");\r\n", - false); + false); } @Test @@ -672,7 +672,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "j++;\r\n" + "}\r\n" + "}\r\n", - false); + false); } @Test @@ -697,7 +697,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"D\");\r\n" + "}\r\n" + "trace(\"finish\");\r\n", - false); + false); } @Test @@ -727,13 +727,13 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"before loop end\");\r\n" + "}\r\n", - false); + false); } @Test public void testHello() { decompileMethod("classic_air", "testHello", "trace(\"hello\");\r\n", - false); + false); } @Test @@ -743,7 +743,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"onTrue\");\r\n" + "}\r\n", - false); + false); } @Test @@ -757,7 +757,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"onFalse\");\r\n" + "}\r\n", - false); + false); } @Test @@ -781,7 +781,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"C\");\r\n" + "return 7;\r\n", - false); + false); } @Test @@ -803,7 +803,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"D\");\r\n" + "}\r\n", - false); + false); } @Test @@ -817,7 +817,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "b++;\r\n" + "var c:int = 1;\r\n" + "b = c++;\r\n", - false); + false); } @Test @@ -856,7 +856,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "chars[index++] = 5;\r\n" + "trace(\"arr[++e]\");\r\n" + "chars[++index] = 5;\r\n", - false); + false); } @Test @@ -877,7 +877,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "return first;\r\n" + "};\r\n" + "traceParameter(\"hello\");\r\n", - false); + false); } @Test @@ -894,7 +894,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "s = 8;\r\n" + "}\r\n" + "innerFunc(a);\r\n", - false); + false); } @Test @@ -921,7 +921,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"b!=7\");\r\n" + "}\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -946,7 +946,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"finally block\");\r\n" + "}\r\n", - false); + false); } @Test @@ -960,14 +960,14 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "b = true;\r\n" + "}\r\n" + "b = (i == 0 || i == 1) && j == 0;\r\n", - false); + false); } @Test public void testManualConvert() { decompileMethod("classic_air", "testManualConvert", "trace(\"String(this).length\");\r\n" + "trace(String(this).length);\r\n", - false); + false); } @Test @@ -984,7 +984,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "default:\r\n" + "jj = 3;\r\n" + "}\r\n", - false); + false); } @Test @@ -1000,7 +1000,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"onFalse\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1013,7 +1013,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "return (param1 as TestClass2).attrib1 == 5;\r\n" + "};\r\n" + "}()();\r\n", - false); + false); } @Test @@ -1024,19 +1024,19 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var b:* = ns::[name];\r\n" + "trace(b.c);\r\n" + "var c:* = myInternal::neco;\r\n", - false); + false); } @Test public void testParamNames() { decompileMethod("classic_air", "testParamNames", "return firstp + secondp + thirdp;\r\n", - false); + false); } @Test public void testParamsCount() { decompileMethod("classic_air", "testParamsCount", "return firstp;\r\n", - false); + false); } @Test @@ -1053,7 +1053,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "a = 6;\r\n" + "a = 0.666666666666667;\r\n" + "trace(\"a=\" + a);\r\n", - false); + false); } @Test @@ -1063,7 +1063,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var c:int = 3;\r\n" + "var d:* = a << (b >>> c);\r\n" + "var e:* = a << b >>> c;\r\n", - false); + false); } @Test @@ -1074,7 +1074,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "d.method(d.attrib * 5);\r\n" + "}\r\n", - false); + false); } @Test @@ -1083,14 +1083,14 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var a2:* = /[a-z\\r\\n0-9\\\\]+/i;\r\n" + "var b1:* = /[0-9AB]+/;\r\n" + "var b2:* = /[0-9AB]+/;\r\n", - false); + false); } @Test public void testRest() { decompileMethod("classic_air", "testRest", "trace(\"firstRest:\" + restval[0]);\r\n" + "return firstp;\r\n", - false); + false); } @Test @@ -1100,7 +1100,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"is eight\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1109,7 +1109,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "this.traceIt(\"hello30\");\r\n" + "this.traceIt(\"hello\" + (k - 1));\r\n" + "this.traceIt(\"hello56\");\r\n", - false); + false); } @Test @@ -1119,7 +1119,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"backslash: \\\\ \");\r\n" + "trace(\"single quotes: \\'hello!\\'\");\r\n" + "trace(\"new line \\r\\n hello!\");\r\n", - false); + false); } @Test @@ -1138,7 +1138,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "case 89:\r\n" + "trace(\"eightynine\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1155,7 +1155,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "case \"C\":\r\n" + "trace(\"is C\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1177,7 +1177,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "default:\r\n" + "trace(\"default clause\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1188,7 +1188,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var d:int = 78;\r\n" + "var e:* = a == b?c == d?1:7:3;\r\n" + "trace(\"e=\" + e);\r\n", - false); + false); } @Test @@ -1213,7 +1213,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"Finally part\");\r\n" + "}\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -1231,7 +1231,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "trace(\"in catch\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1259,7 +1259,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "{\r\n" + "return 4;\r\n" + "}\r\n", - false); + false); } @Test @@ -1301,7 +1301,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"after\");\r\n" + "return \"X\";\r\n", - false); + false); } @Test @@ -1335,7 +1335,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"after\");\r\n" + "return \"X\";\r\n", - false); + false); } @Test @@ -1346,14 +1346,14 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var a:int = 5;\r\n" + "v[a * 8 - 39] = \"hi2\";\r\n" + "trace(v[0]);\r\n", - false); + false); } @Test public void testVector2() { decompileMethod("classic_air", "testVector2", "var a:Vector.> = new Vector.>();\r\n" + "var b:Vector. = new [10,20,30];\r\n", - false); + false); } @Test @@ -1367,7 +1367,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "a = 7;\r\n" + "b = 9;\r\n", - false); + false); } @Test @@ -1386,7 +1386,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "}\r\n" + "return \"B\";\r\n", - false); + false); } @Test @@ -1408,7 +1408,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "trace(\"hello2\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1431,7 +1431,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "continue;\r\n" + "}\r\n" + "}\r\n", - false); + false); } @Test @@ -1459,7 +1459,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "trace(\"after_try\");\r\n" + "}\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -1574,6 +1574,6 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "}\r\n" + "]]>\r\n" + ";\r\n", - false); + false); } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java index 30cd69a3a..aed9a9565 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java @@ -19,7 +19,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes @Test public void testArguments() { decompileMethod("classic", "testArguments", "return arguments[0];\r\n", - false); + false); } @Test @@ -39,7 +39,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"infinally\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -59,7 +59,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"ch\");\r\n" + "}\r\n", - false); + false); } @Test @@ -72,7 +72,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "var e:TestClass2 = TestClass2.createMe(\"test\");\r\n" + "e.attrib1 = e.attrib2 = e.attrib3 = this.getCounter();\r\n" + "this.traceIt(e.toString());\r\n", - false); + false); } @Test @@ -80,7 +80,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes decompileMethod("classic", "testComplexExpressions", "var i:int = 0;\r\n" + "var j:int = 0;\r\n" + "j = i = i + (i = i + i++);\r\n", - false); + false); } @Test @@ -144,7 +144,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"hello\");\r\n" + "}\r\n", - false); + false); } @Test @@ -160,7 +160,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "}\r\n" + "k = 7;\r\n", - false); + false); } @Test @@ -180,7 +180,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "vnumber = 0.5;\r\n" + "vnumber = 6;\r\n" + "vobject = vclass;\r\n", - false); + false); } @Test @@ -198,7 +198,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"4\");\r\n" + "}\r\n" + "trace(\"after switch\");\r\n", - false); + false); } @Test @@ -220,7 +220,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"D\");\r\n" + "}\r\n", - false); + false); } @Test @@ -232,7 +232,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "a++;\r\n" + "}\r\n" + "while(a < 20);\r\n", - false); + false); } @Test @@ -253,7 +253,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "while(k < 9);\r\n" + "return 2;\r\n", - false); + false); } @Test @@ -263,7 +263,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "this.nextChar();\r\n" + "}\r\n" + "while(this.ch != \"\\n\" && this.ch != \"\");\r\n", - false); + false); } @Test @@ -285,7 +285,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "while(k < 10);\r\n" + "trace(\"ss\");\r\n", - false); + false); } @Test @@ -299,7 +299,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"between\");\r\n" + "g = k.(++d.attrib, 0);\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -320,7 +320,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "arr[0]();\r\n" + "}\r\n" + "return i == 0;\r\n", - false); + false); } @Test @@ -342,7 +342,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "return \"hu\" + str;\r\n" + "}\r\n", - false); + false); } @Test @@ -351,7 +351,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"a=\" + a);\r\n" + "}\r\n", - false); + false); } @Test @@ -376,7 +376,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"D\");\r\n" + "}\r\n", - false); + false); } @Test @@ -389,7 +389,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"hello:\" + a);\r\n" + "}\r\n", - false); + false); } @Test @@ -417,7 +417,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"part5\");\r\n" + "}\r\n", - false); + false); } @Test @@ -432,7 +432,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"item #\" + item);\r\n" + "}\r\n", - false); + false); } @Test @@ -449,7 +449,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"item #\" + test[0]);\r\n" + "}\r\n", - false); + false); } @Test @@ -463,7 +463,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"item #\" + this.testPriv);\r\n" + "}\r\n", - false); + false); } @Test @@ -488,7 +488,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"C\");\r\n" + "}\r\n" + "trace(\"exit\");\r\n", - false); + false); } @Test @@ -503,7 +503,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(item);\r\n" + "}\r\n", - false); + false); } @Test @@ -536,7 +536,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"C\");\r\n" + "}\r\n", - false); + false); } @Test @@ -568,7 +568,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"after\");\r\n" + "}\r\n" + "return 89;\r\n", - false); + false); } @Test @@ -592,7 +592,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"E\");\r\n" + "}\r\n" + "return 5;\r\n", - false); + false); } @Test @@ -619,7 +619,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"C\");\r\n" + "}\r\n" + "trace(\"return\");\r\n", - false); + false); } @Test @@ -640,7 +640,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "}\r\n" + "trace(\"return\");\r\n", - false); + false); } @Test @@ -664,7 +664,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "j++;\r\n" + "}\r\n" + "}\r\n", - false); + false); } @Test @@ -689,7 +689,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"D\");\r\n" + "}\r\n" + "trace(\"finish\");\r\n", - false); + false); } @Test @@ -718,13 +718,13 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"before loop end\");\r\n" + "}\r\n", - false); + false); } @Test public void testHello() { decompileMethod("classic", "testHello", "trace(\"hello\");\r\n", - false); + false); } @Test @@ -734,7 +734,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"onTrue\");\r\n" + "}\r\n", - false); + false); } @Test @@ -748,7 +748,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"onFalse\");\r\n" + "}\r\n", - false); + false); } @Test @@ -772,7 +772,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"C\");\r\n" + "return 7;\r\n", - false); + false); } @Test @@ -794,7 +794,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"D\");\r\n" + "}\r\n", - false); + false); } @Test @@ -808,7 +808,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "b++;\r\n" + "var c:* = 1;\r\n" + "b = c++;\r\n", - false); + false); } @Test @@ -849,7 +849,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"arr[++e]\");\r\n" + "var _loc8_:* = ++index;\r\n" + "chars[_loc8_] = 5;\r\n", - false); + false); } @Test @@ -871,7 +871,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "return first;\r\n" + "};\r\n" + "traceParameter(\"hello\");\r\n", - false); + false); } @Test @@ -887,7 +887,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "s = 8;\r\n" + "}\r\n" + "innerFunc(a);\r\n", - false); + false); } @Test @@ -914,7 +914,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"b!=7\");\r\n" + "}\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -939,7 +939,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"finally block\");\r\n" + "}\r\n", - false); + false); } @Test @@ -953,14 +953,14 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "b = true;\r\n" + "}\r\n" + "b = (i == 0 || i == 1) && j == 0;\r\n", - false); + false); } @Test public void testManualConvert() { decompileMethod("classic", "testManualConvert", "trace(\"String(this).length\");\r\n" + "trace(String(this).length);\r\n", - false); + false); } @Test @@ -977,7 +977,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "default:\r\n" + "jj = 3;\r\n" + "}\r\n", - false); + false); } @Test @@ -993,7 +993,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"onFalse\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1002,7 +1002,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "return (param1 as TestClass2).attrib1 == 5;\r\n" + "};\r\n", - false); + false); } @Test @@ -1013,19 +1013,19 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "var b:* = ns::[name];\r\n" + "trace(b.c);\r\n" + "var c:* = myInternal::neco;\r\n", - false); + false); } @Test public void testParamNames() { decompileMethod("classic", "testParamNames", "return firstp + secondp + thirdp;\r\n", - false); + false); } @Test public void testParamsCount() { decompileMethod("classic", "testParamsCount", "return firstp;\r\n", - false); + false); } @Test @@ -1042,7 +1042,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "a = 1 * 2 * 3;\r\n" + "a = 1 * 2 / 3;\r\n" + "trace(\"a=\" + a);\r\n", - false); + false); } @Test @@ -1052,7 +1052,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "var c:* = 3;\r\n" + "var d:* = a << (b >>> c);\r\n" + "var e:* = a << b >>> c;\r\n", - false); + false); } @Test @@ -1063,7 +1063,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "d.method(d.attrib * 5);\r\n" + "}\r\n", - false); + false); } @Test @@ -1072,14 +1072,14 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "var a2:* = /[a-z\\r\\n0-9\\\\]+/i;\r\n" + "var b1:* = /[0-9AB]+/;\r\n" + "var b2:* = /[0-9AB]+/;\r\n", - false); + false); } @Test public void testRest() { decompileMethod("classic", "testRest", "trace(\"firstRest:\" + restval[0]);\r\n" + "return firstp;\r\n", - false); + false); } @Test @@ -1089,7 +1089,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"is eight\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1098,7 +1098,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "this.traceIt(\"hello\" + 5 * 6);\r\n" + "this.traceIt(\"hello\" + (k - 1));\r\n" + "this.traceIt(\"hello\" + 5 + 6);\r\n", - false); + false); } @Test @@ -1108,7 +1108,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"backslash: \\\\ \");\r\n" + "trace(\"single quotes: \\'hello!\\'\");\r\n" + "trace(\"new line \\r\\n hello!\");\r\n", - false); + false); } @Test @@ -1127,7 +1127,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "case 89:\r\n" + "trace(\"eightynine\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1144,7 +1144,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "case TestSwitchComma.X, \"C\":\r\n" + "trace(\"is C\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1166,7 +1166,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "default:\r\n" + "trace(\"default clause\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1177,7 +1177,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "var d:* = 78;\r\n" + "var e:* = a == b?c == d?1:7:3;\r\n" + "trace(\"e=\" + e);\r\n", - false); + false); } @Test @@ -1202,7 +1202,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"Finally part\");\r\n" + "}\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -1220,7 +1220,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "trace(\"in catch\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1248,7 +1248,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "{\r\n" + "return 4;\r\n" + "}\r\n", - false); + false); } @Test @@ -1291,7 +1291,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"after\");\r\n" + "return \"X\";\r\n", - false); + false); } @Test @@ -1325,7 +1325,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"after\");\r\n" + "return \"X\";\r\n", - false); + false); } @Test @@ -1336,14 +1336,14 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "var a:int = 5;\r\n" + "v[a * 8 - 39] = \"hi2\";\r\n" + "trace(v[0]);\r\n", - false); + false); } @Test public void testVector2() { decompileMethod("classic", "testVector2", "var a:Vector.> = new Vector.>();\r\n" + "var b:Vector. = new [10,20,30];\r\n", - false); + false); } @Test @@ -1357,7 +1357,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "a = 7;\r\n" + "b = 9;\r\n", - false); + false); } @Test @@ -1376,7 +1376,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "}\r\n" + "return \"B\";\r\n", - false); + false); } @Test @@ -1398,7 +1398,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "trace(\"hello2\");\r\n" + "}\r\n", - false); + false); } @Test @@ -1421,7 +1421,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "continue;\r\n" + "}\r\n" + "}\r\n", - false); + false); } @Test @@ -1447,7 +1447,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "trace(\"after_try\");\r\n" + "}\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -1563,6 +1563,6 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "}\r\n" + "]]>\r\n" + ";\r\n", - false); + false); } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java index 270e8fd75..a8d265996 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java @@ -38,7 +38,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in catch\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -53,7 +53,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"catched exception: \" + e.message);\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -74,7 +74,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in catch\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -91,7 +91,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "}\r\n" + "return 2;\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -121,7 +121,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -146,7 +146,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "continue;\r\n" + "}\r\n" + "}\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -183,7 +183,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "a++;\r\n" + "}\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -204,7 +204,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "}\r\n" + "return \"OK\";\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -230,7 +230,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -255,7 +255,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "i++;\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -285,7 +285,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "i++;\r\n" + "}\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -308,7 +308,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in catch\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -331,7 +331,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -350,7 +350,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in finally\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -372,7 +372,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "return \"hu\" + str;\r\n" + "}\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -402,7 +402,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"after\");\r\n" + "i++;\r\n" + "}\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -432,7 +432,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"after\");\r\n" + "i++;\r\n" + "}\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -455,7 +455,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in finally\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -470,7 +470,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in finally\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -502,7 +502,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "trace(\"after\");\r\n" + "return \"RETFINAL\";\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -538,7 +538,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "trace(\"after\");\r\n" + "return \"RETEXIT\";\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -570,7 +570,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in finally1\");\r\n" + "}\r\n" + "return \"RETFINAL\";\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -622,7 +622,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "}\r\n" + "trace(\"after0\");\r\n" + "return \"RETFINAL\";\r\n", - false); + false); } @Test(dataProvider = "swfNamesProvider") @@ -647,6 +647,6 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi + "trace(\"in finally\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java index 01a857078..99a721e4e 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java @@ -28,7 +28,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"in catch\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -44,7 +44,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"catched exception: \" + _loc1_.message);\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -65,7 +65,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"in catch\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -82,7 +82,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "}\r\n" + "return 2;\r\n", - false); + false); } @Test @@ -112,7 +112,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -137,7 +137,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "continue;\r\n" + "}\r\n" + "}\r\n", - false); + false); } @Test @@ -174,7 +174,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "_loc1_++;\r\n" + "}\r\n", - false); + false); } @Test @@ -195,7 +195,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "}\r\n" + "return \"OK\";\r\n", - false); + false); } @Test @@ -221,7 +221,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -247,7 +247,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "_loc1_++;\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -276,7 +276,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "_loc1_++;\r\n" + "}\r\n" + "trace(\"end\");\r\n", - false); + false); } @Test @@ -299,7 +299,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"in catch\");\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -321,7 +321,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -347,7 +347,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -370,7 +370,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "}\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -394,7 +394,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "trace(\"in finally\");\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -416,7 +416,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "return \"hu\" + _loc1_;\r\n" + "}\r\n", - false); + false); } @Test @@ -452,7 +452,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"after\");\r\n" + "_loc1_++;\r\n" + "}\r\n", - false); + false); } @Test @@ -482,7 +482,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"after\");\r\n" + "_loc1_++;\r\n" + "}\r\n", - false); + false); } @Test @@ -510,7 +510,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "trace(\"in finally\");\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -527,7 +527,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "trace(\"in finally\");\r\n" + "trace(\"after\");\r\n", - false); + false); } @Test @@ -565,7 +565,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"in finally\");\r\n" + "trace(\"after\");\r\n" + "return \"RETFINAL\";\r\n", - false); + false); } @Test @@ -600,7 +600,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "trace(\"after\");\r\n" + "return \"RETEXIT\";\r\n", - false); + false); } @Test @@ -641,7 +641,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "trace(\"in finally1\");\r\n" + "return \"RETFINAL\";\r\n", - false); + false); } @Test @@ -708,7 +708,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "trace(\"in finally0\");\r\n" + "trace(\"after0\");\r\n" + "return \"RETFINAL\";\r\n", - false); + false); } @Test @@ -739,6 +739,6 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript + "}\r\n" + "trace(\"in finally\");\r\n" + "trace(\"after\");\r\n", - false); + false); } } diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.abc b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.abc index 3da7f3581ce248ba0f608d37a7aef577fe067941..26f49143fa99367889d4e0ac3019c9d2201672fc 100644 GIT binary patch delta 1510 zcmZvc$xmBH9LImZd4BKbv9YmPY{y_@;|08thgr-LARERkiL*dL7RbZKE|DOq3Q42% z5E`||sz`I{siz!Usmh^Jr5<|gp^6+-wb$PAFI2sxGjZRo!V8I6=Cce|76#67|7*2)68+{z-g=Sd8dK#HS`-m`2h=fOkTZBczi-h-S zXpWrM2{pp1_|h2LC)Upg7-5NUf$$n(oOBntZ;?Ar`2;U8&K-Q7@q3J?4Wa>ZZj;lZ z;dR1U!ZpGT!n=eC!W!Wd($A7^l0HeC6Cb0@6lJH$eVcN3$Z<}@X`EqDtW(L~k9>!% zsY6u_wVBu7P#9md9|5%gpxc$;9e|ieU_QpZprZr9=w^HjxI&ko@lo(7^mZ{`1i!+r z9>&L^S79K)_#~WB7!ERCf{4PXm+`X@S2)DV zmAI)&FNj}Vr9dpV6O)qLmhLI(qUd!uj5`W1iDUOju}~*p7XYtO&6zl!%hrvzr!~EL zRx6Uz|L*;Jnb2(~+*M_l#b55(V7i)yC8-5%?Y`0$MX{rpOXfFgdiL1;Hg|y4ab_i} z6R-q059o$I+rO>+W$|@Kp)VzU6~L4s^#NOdp!6m2XGb1(j<;{jh4*T-* zNP7T60Fq(=!xCo1b8pJ9ly6PE@|OCqR1qU`BMX2gl$%LCj}0Y7(! zFe?7&jQ5-e1X!>OcU56kxP66<^D@}C-kxztu?IiQKCJkk_IOtDyEf+(|K8?|;$PaF zSNwgOFNm*vKjlZ{h+O$-yBlwJ6S9j{04~`}si~!06Nmm$ydhrs(|A+-=AUeCsNw6I z{>Yw3zL1LiL>=vmvW)1^jSm+^3MMBD TW!0Xpp>l6*c18B&>wtd&RxAfv delta 1323 zcmXw&TTdHD6vxjQd-r&J$04?3u<;e}`odz2&7E*FkehRXgpk--%tas(MQzgdArC?Q z1W2Pweac6u6!8|Rs`>>gL#wKl+Nw{@Yo)3$eW5e4Jo_*|o&SITXXdQ-hsXD*_18K%J$D+9PMde9PPb2oDFKhq~mrd8C=vrJ}kHz(n7JY zO@nYMVv8(AmLn^XT4YVU(-J<=Vh$Eu53*1*%)%}4yB4!WQX#?gGR}yqZYB2!(}YO) zDdAH>lkhs>6B?W*$6Z1j;T`dvK6b>TjBuQAmatAZK$??Wo8%gxT!QBq=XO5B_%`Ed zohV9<205P5&;!Cr!W)DegpUamggb;UNh^?6B&|%G6Cb7F3T3P0dPv3=*{4L4%Hk`k zcrCW3CZZPFCeMDO2)+q8liUr6IRxfs+zT4o5%epJmw+pD_AqXON1->s_$c%!4D>QS z23HjZgN%>EHHDE7;}wW1jCmO^LPBBkD&u9yC>-=LJ_1>V#x=$#V6C9I7-qZ*qY6uI z#`7?)u+qo)6ih0d>Suf!W);pw7@vd%g^M1>3$UWFCVt^*42Vm9{ANvF$H8rFb5-3F zxij82+v{NM1{?tGdKCO_fX1*jbTHUHh}MUh^f4RbPG8$>WV_|8D%+ThO0~^>u$XC0 znO4QLCQPepT1nHow*}FU>(D8!c0`+9H5Gq5heF0h-9T9-8DLYn4^_Z*QFK*<1G$|6 zDY?4RVS|AvwkCe`EbE&J*G1I(T7RbShIs2W!iAT8c{$i#fG~ihIKZ%k3Gt^l zqc@fBrf~VH{kQ6fQF)O$z!9i+p{i;b?U>4KXf>&_@@pJDgM60hT?BJJTLz7zt87o yMc!egvz0pAnB3y>2Vd$Q#ZpJ9i(h+2@t$x62JyZq1uEVLs(g2=Cwl0SU*msqljGR{ diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.asasm index b5546b875..f462f3840 100644 --- a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.asasm +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/as3_assembled-0.main.asasm @@ -21,5 +21,6 @@ program #include "tests/TestTryDoWhile2.script.asasm" #include "tests/TestSwitchJoin.script.asasm" #include "tests/TestDeobfuscatorJumpsExceptionStart.script.asasm" + #include "tests/TestUnnamedException.script.asasm" ; place to add next end ; program diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestUnnamedException.class.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestUnnamedException.class.asasm new file mode 100644 index 000000000..b820c921c --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestUnnamedException.class.asasm @@ -0,0 +1,78 @@ +class + refid "tests:TestUnnamedException" + instance QName(PackageNamespace("tests"), "TestUnnamedException") + extends QName(PackageNamespace(""), "Object") + flag SEALED + flag PROTECTEDNS + protectedns ProtectedNamespace("tests:TestUnnamedException") + iinit + refid "tests:TestUnnamedException/instance/init" + body + maxstack 1 + localcount 1 + initscopedepth 4 + maxscopedepth 5 + code + getlocal0 + pushscope + + getlocal0 + constructsuper 0 + + returnvoid + end ; code + end ; body + end ; method + trait method QName(PackageNamespace(""), "run") + method + refid "tests:TestUnnamedException/instance/run" + returns QName(PackageNamespace(""), "void") + body + maxstack 2 + localcount 4 + initscopedepth 4 + maxscopedepth 5 + code + + getlocal0 + pushscope + pushbyte 5 + setlocal 5 + ofs005a: + findpropstrict QName(PackageNamespace(""),"trace") + pushstring "hello" + callpropvoid QName(PackageNamespace(""),"trace"), 1 + ofs016a: + jump ofs0175 + ofs016e: + getlocal0 + pushscope + getlocal2 + pushscope + coerce_a + setlocal 14 + ofs0175: + getlocal 5 + returnvalue + end ; code + try from ofs005a to ofs016a target ofs016e type null name null end + end ; body + end ; method + end ; trait + end ; instance + cinit + refid "tests:TestUnnamedException/class/init" + body + maxstack 1 + localcount 1 + initscopedepth 3 + maxscopedepth 4 + code + getlocal0 + pushscope + + returnvoid + end ; code + end ; body + end ; method +end ; class diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestUnnamedException.script.asasm b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestUnnamedException.script.asasm new file mode 100644 index 000000000..7a8118a69 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_assembled/abc/as3_assembled-0/tests/TestUnnamedException.script.asasm @@ -0,0 +1,29 @@ +script + sinit + refid "tests:TestUnnamedException/init" + body + maxstack 2 + localcount 1 + initscopedepth 1 + maxscopedepth 3 + code + getlocal0 + pushscope + + findpropstrict Multiname("TestUnnamedException", [PackageNamespace("tests")]) + getlex QName(PackageNamespace(""), "Object") + pushscope + + getlex Multiname("Object", [PrivateNamespace(null, "tests:TestUnnamedException"), PackageNamespace(""), PackageNamespace("tests"), PackageInternalNs("tests"), Namespace("http://adobe.com/AS3/2006/builtin")]) + newclass "tests:TestUnnamedException" + popscope + initproperty QName(PackageNamespace("tests"), "TestUnnamedException") + + returnvoid + end ; code + end ; body + end ; method + trait class QName(PackageNamespace("tests"), "TestUnnamedException") + #include "TestUnnamedException.class.asasm" + end ; trait +end ; script diff --git a/libsrc/ffdec_lib/testdata/as3_assembled/bin/as3_assembled.swf b/libsrc/ffdec_lib/testdata/as3_assembled/bin/as3_assembled.swf index 6f3dd61c6d62130f517457f6afa1e02ab49ce456..f59877f9bcb26e552bb1b9b711239172fd70e723 100644 GIT binary patch literal 2946 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 literal 2856 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 GKWDxbV1&g0 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf index 3ee4879556a3e571f52010b04e270260365c29a4..0e8ab6c1dd9b5f3bd2fb09008fc026a1ad297197 100644 GIT binary patch literal 5974 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 E%b`rLtpET3 literal 5962 zcmV-Q7q#d^S5qX8P5=OS0li#XY$I7(_Nj}@hX)7|Nw?DkAL zmtkglnC_j~>5VsXoN~uAjvZ{LI}xkBjKnMgBm_wN00L$Pghm1Z;%N~QyNj3?kWlX~ zGlK*V`@#w&w0PkKv4HvibE?X9Tvf3dl(gEns&lH!uJ8N*@4uWJdz2?0PvX$ynIxXI z!4Z$g^Ofjd5s&9qeXq3g>e_nh_@Gj4tiY#d=l7ea8l zQYN>Q%Pqo)#l}gsSvX#-HfHBn=>gWXMzLN#Y?f=)6dtg!TRUn#J3p@6*K&v(zOWDg=IM7~krBtgQ6q>7r!^29sSir+A9WOTaYsI%77anPgrAnc( ze`~2T5a%?@&5E{qd#|>urPeFjaq3Fyc4s~v&4%FMz0QTMTE1ohXJ0PX4weqgSl0^88b89=hWjgp>cgYLLv8iW z%XGH+nOkgF$jf&ZU%7qn-s^W? zUGqE{fSb(yTZ{aYc+2y=&~CRM_(j;|g@@#Q?*SWCe*DF+J_bm9=zpnDu6n)|`#1Oi z|2_0$#B&*kMJ4(v|NP4KTD^9-TRYx+nN_$#y2R>{!wMKKV&@5~h8p}Jydacpefgk;_T+y~+;LV$O?8}9Qimyxf6r#8M z@?N=dSSg&SFV!BEwdX74L+{<)H??AO;Lale&>HM5G>dRcf^4{kTN@$V4zt+M!L4dj zs~3vR@*|CHiF5m(uK}jZRjuy5cUUhsweg*uhqaw%ZKnt~a%WE~m8)e05wYy+3<3^}Zgs6V;NoE6X3L*YL_{U;v?n$OK|76S4x(HhZ7^{Bf zNd~qDG*4bEiJ81qk}`R@Bxmy8k~foAN=hd0EBP{cp(N0!&wD1=zkLGpWH`*XVt)yj zg!diqR%7WtJm0UMJdeNdR`vCLxLF<@49O8XWW{O7&zuQD==p9soDWdrtshm>*{gCB z?y?rx)xel&sYO2YeVuUqGD~n|=~1n`x9C2^ z;hIF4=86zRQ1)t0rbmoA%+?_;W;0hAl+<`E33!nFiXbC~gn%Lh6(Ot$5k(qSgt$6P z07!82=B6fHoymV5s@fs2qgd-5hWd1q9_O6K_mp8WM04Y zQRZJ^cc2x@lLhZOAr~V%9*^1@f{zOQ7{HIi@X?1KThY0}AGO=9(a3d==Sk+fnFpRr zA79EmeLz~{6Fwm_w9 z*PzDPqnSUWiRbGK&wd@xfMXrben54JeHFP-0^2rq$`>#ZoIP!jjza!QdZRd}qj=bH zzK&zz+OkY7;vj-pR1n07;E*B?DMC~o(y=S};hqIM_7H4h4DLPHLzvaUu4KoqB+0=O zxb*-N1G@fJ(131hz(j4RgU*ZykW05CsSYADu;uMf(w+!hgnCi^zE2d>Z3Jf2!1-&^<<;TIY%0-IkO#XU^j1;~rOe=wvRJM*$(xhz-@}CL(kWwf z#BtZt2Vk=?r->b;QiGca!~@jef{_KR0%E~+!+St1wYkEOBE=OUp~iLSDg$r>2N`su zBsL6>B=~G#z*+SbJGvOVN zJl%mcGrCEQRD`q?22ao$$qNgrCRE6~F944a&f~C`e7m6$w9gUzkoFJ%KA?IEj_IeU zPHm9ft>*+$03RWPS`^TMSPk)oZfFPc{*pg~PY7+*g!bQqakohd-OjwKHIM4mt*ZXf zz<6qwyYDW8fA;Lb?tEs`K;LjP(Bi9i?i(!dfw3;4g0fg`Wqs>q7?Kr^kM*}XU$s^$ zSL<4naYcdMcRs&$U*}8#IWynKuY%O^-fPy&)rYtH8LpGT`HS|Z({g6w)FX8BDjJVc zUV-%oUV%0SJseX6kT3~F7*V7NMVM44bW(ZaK&m7o)hHPohsPB0sgzVohg3d0sU%qr z{JGl=6E<7%$f%8LK$-xO#?7A) zn?D(cDM8A!33@tjcoYE8afl+r>3zB0Ip)wsh(3-)aA~!S* zLnAnJ3@nlOxpw;-?e>SjYWP0~y9ROB!cc2|(%+a}oMNwBZ$4gKc5-hyOF*GeC8j1q@endmrXJ1=DI{=j1Bx&RvP_YIl1VjT zc(@3Vafp#IMuy|?7(ovQu7ULQaDk7z0}JZgNGojmHUKD#Gk(KxZZytl4KsqoAYlRI z`!YPEZzE}iZW)Oj!ny;Sj$}G&k9o>jdNf}Q;+a<3C*a@< z@OBR00K4F&^%M@_-KCs(16Z}NAuMWd3F4ym3q%sZPZIn!tX?w9lgO8M^OE1}B>|hQi&S>W?kU7LVpG2bZ1rvixcJvTWfC z(}Tfy(Bijz=(@y^9)R1#pw~$Z_T{%w3?71EwT9sCOj)K(Sx{WP5|wg@;87<8f2ZAE z2(-pG$ztxhAUe5#nQrvDxqu(JqW48e!aN5l(YFlvj`6`Z^%I>z=MZf3XEeRQHMT5ry+JZD0<^!xk{pY?25@ zKcWDVg_t5GL5itKLxc^&y#+CZ38i5YPrzfeKM{st{s!9pU?(aM>S)GLhQ>4z!|u}< zo28Z}5Z5%dgs^>=il4X@!7=;*ApfJ!Pv4>q$wo+{Uz zF+blg=09}B{GH>XMhhaJYe1sk0DdyX>2Z3Gx<($KeMIAMTEm9xI>?@GGC&_K(p39i zN;AITN=iA<8u%?457NE9qDg?8Jx5wu!2eFYsgMJIgcHl6HtDP;Y$+b1L7GO!h(qS1{s;X zD0JsaZP_QcT)Lqt6xQL@MfQ3Dj}>xSf6O(SFc(zWdONKQyDnO z0?DcF>Q!j%O70-mYey{Bu71AT2D|72n`x!G05vVZv(H*q0u3-uF>6^PrtuxcS{4Y2 zkvmXg=)&j}k5MJ>V?71XSb!Myni$=1$_MJdElc>n2K96UtrNT-wvT&sZn*7SoPprn zvfU!v(d-%=S~C7tD@|yeIOBxy&Lx;wzt&?M58loJdgDKLHR(3F!vUs8BJqgLhJ!YN zJ{Cw7(x_30E7GVUjH#n~;OL8jt%9^R2961m9D&C;^se+_!;ukxZfAsP!_)Hnn5hq$ zraJ=fRBCCB>^&54TT#f|-v{k-QQZKcB7y`#TbwYhw%MUD0y_<>?MNbf0)GOgP}@ER zc|-EM?Kakg(KQUvlcY9;h1a$v`O@*1V7G(8w^h&F4E|4~Ue&XgA<)tGOieRC?T!~? z=*c-#NzRMQgtDLeC!=`KuS=p6xx@iHG{H)|J6qna=4LP>9JfmiL#!kc?kYTM1f+`wC?<(E2CF zn@xiJrj@zT2=rfcwI0FIs8+*pdD0}lDc4d4VR`Q4n=1hEr84O1e>aZ3CXMtoFy zgOvDBnHM1%4NjL}XB2nhMJ$*XAsPEG!~U4Q-(r2_Q!XM0Q-;lp`0xLr*5?XrjN`_L z(d6QVLv%H{D5o6tIvgNj9`%peQCDDN5;rc4v~F(tX1-960A_A~DbzXuSR`A6ZO;U)DS!hgXF@p*{ar6z9kYQmQf=R>7X2A@z(1Wh#o zn%&+$K(knef=CQ;{9^mwJbM#IPh{A%{-rKc0&)8_n;zdGgKTJ9dd}V!Aqy!H%zp)S zyFjOPd^*c`(Mr5%)wK|z4X}E=3XNCjxjj-4p2Cdr5i&Rgk2vW|*J3303fx9(U(2VF zwKT~<1#7F{JeQj?{pnMb=}SkIX8Ew9G5F|Ru49hQlplJ2&XhZ^0X)5KVOOO_-XLuF z$P{gLb*^9!b_VIKu{Q1M=<>KrG6C%9@c5xRFm<`l?duKiXCPIL@a}SZ+)*rUk4o5h zAfBKS){^4ImM&WA=1U&3J)bt(Uk@!P*YF4S>;uGCEO&<04wf$)G985}L$RUDOp|r` zOiXWul@40JaPwC7zD3Nu(dH2|*2DDM04;({ZHP418=Kvd#1XA*3;5FACfY51e0&P6 zu(W6E?{cOUKlJ=)#hurnm1}F4K`S$L5iY{=fpYaoV;v$k-Y}@Lu17}>apymsL;O&l zL)^aJ9LinqVh=aJ<11MF$CnIQKKcwwhB8EcKXi)xXt6NzXPAk`W?sf7vl+b=Gi8;@ zrZ@~U*kqAaz$Vu&Us@$k%dw{*c!U;7T4Yq-#ZVLLh|C2|f)>`Bt|ALC&P-fWJ^0Ob z`^OLn&cJY1X{6mHM(YS;%cK^xkmxCIDD6N%*zr=v4ko4?)}p`( zO)BxMGrl_~sbF|-${6{=fv#V%Ll!2i;^=3%QX=>nn&=j}x{Yk_6B$82(?=;0{LGj7 z(^k;=#0N!Y%CLnLVW>_<#@Vp%Wgd`ApRmrTQ3J&jKH4>mBw(G0lN$o9H-7eoSD-(b z?|7Q!y@uktK;u>quVFxU%rO;=*2;5u_UP3G3ZBjcuwHMp1Gvi-*j&Y_zG0kWsO7vS zj-PfNp##z~sSh;Y7_v|6K-tOevwqz(u=|+t`!sexN-Zk0*pM(_pQyz~Y_pcYglcy1 zM(SX(T?&+x2)wfD_zHU-fVcb5JC6y#KJ7lX49&n6kr&VH`qD zy1#n%?4h<+=MG&cqA$_wwH{BU*}EOE`l43dvnnX^rb7=gp21`Z-z9He0cY-ULT`p# zU5@AsF^|%TDz39+nqoH6((9c2?ABj2efbKsp9^lEqhmZo7{?^x_I-nZIBdYC7KPVjOZYw@N6gh+S*9??Ekj3_D3G8Kc1O@o*n zVnzCoTA}Ykfqn$c^R`YFFh*H)oK;3P<2}J%uZoi zQl}-)`VbCxY+G;W<+A)@XEv{cJ0>~!)+Z)8&ZzaNW|PnwnR`S_i$;t|SH}%OM!mE2 zxfR8FqA4%zp(obU4LL#ACNQfvzCos++jQ=1n(oG|TW8aOlh4<6AFKTupq=7P3P0u? z7Ta(qG+>*{y0wI0vYA6r=(#pY`$qYFtzg7VvhI<8w-?=Tpu1hcRsWONK3ll`?| zqptq74uu9yV2*)H5RTjJ_n7uJ7r!kGwk~W6)9;X9BCxvc1M&whGP_G&xF=Y? zcnam#%60f#B#d~rH0KE4X{Q6idCJ$w*{ku>F2EpYHY*+<9~(Y|kyY04Z)J%4<&+G6 zX{Gp|)&zrgP&LQ|Rd6MxMiB3Ww7gJj!J_mCyZQ8W3rwd+Rj35Y5bcS{qrI zdb4cFI{G_)<%PqAS-jp&C-zx?J4fHgZa{CY<*twNT(cgzn_`9^wDtzGzA{&D=yURh zef5<=bz$IFyH|y`U`di5cIZ7Q1Hcy6gEC}L4Wns@W2G>pNx{ht({7a4sFQ=_((iP< zUDD3iQ8>u|vAb*%rgXZ?-e(TZY*sP*JFristG@%fPWo(Jf#uX2?5f500F&%PL)7__;lzb?herp zfQ0t$Xp00NP6$pQp~DAX5C@q5|9NJ{^LS=rQ{)|awfN&%Pql(rN(i!SvXp%Hf9%Y(gUpNjbgog&@9)gX*^(Ir*_zUdSSsh z>Tc0G=)qyVLJzrHT-Gc4zFuuMma`YLaG>4dYN=M=FEno!4h|~iVgV1ge6-Zqs}s15U^W8B?sl&8rtvLHFymr@ z&ZgHzXV}N#yo1A?O1ZJ8*Uj_XtCgCM3UxSP?XbE_uar*g48&>0x?X73dQLKj;gm|D z`rxqeK)dH#e9Mru(dpYBmNkT}-DUwiqsv;0Y^ecj*$N@zRDq=_x z!-_ZncR_$(Rf31$6Cz|#i;}@1LIhQ!KRpo$StGEIh(1Epp!hhm4mX96U?}nhzGI_ZqXY&4%Ka*EVN+usD1u}V|B+#c% z`zF}GJp%J&ILtTWe+HL?_Z{z6WBEQj->)A(i@)$@^|d{?Sv~^{sS!G4)osYnoC-qd z`L4U14^ZQ;A6DnGm*pnhWj(Z`gPGCOm4908z+bMWoAqN-FyT?J*XoVH?Ynnw<2$0u z^mW4X%Phl@rH8fh?vnQqmunJXnkPaKLD|bWnI19bGTVT-n9W>fP*M}|6yQM$DuRp{ z5<-d)R)mNmXo@tf2nltV0FdD3$pi3&^ao5u$xsX)NumT)*(VVHEr1W~A|g@N5PwPl zG$Kj{utZS~y@N;yJd2*k$#wP-THskZbOKVaC$3%A%b9Wkd0~c_2WIp<9 zaFBEB!sN|0L7coR~epz2A%=O2AqR{>Js}Za-jsaZR&(C zU?Dhr(jWtc{FU@Zan3;Tu=}##E9SlMI2Ium^x%&SAPh?Jqvg2 zA=tz?+j5Svbc3z13EkG9h1!7*Ix`|bZmzARJBZA{mbX8i z^J#Dq>Us5h0a2W5BQRqo&c_09dH(_!MdYg#`H6L5Y<9ut8+mFKFP%f{7>`yZ?`IYn z%rc@?ve5dW8(Qsl_p%Ark$+L{Hu7WYr;kbl-f;`v(3AmbO zC}jqZl*MwjN#30F{vH-&mrodDAdb79J^-7IyG`sMl^Wb+C=sFt7mO@m6%Y%q8{PwA zsm&FJ6e*zyNi|_WR~dvG7-i6nk@zq?QsA?x*$s4{t2&_zW;gh&Xn%I?*wx9LZ=cX- zp*4W74X~tx@J4Rz3)&{y-na$tg!W_y*39UpbW#!KqzHI|)<|AhRCS?3-hB>ugm4~* zz2sXBouGZz@WWhi_;&%-Q*g{6MRj_e;t;>)-1n=A-` zu`Z&5vRQ5A&gP3SBr6;p8EIIajFVSkc}Frr8kiZH287^Lzi zfK(|)s!=jF4v#4kP${XD4ygi8Qc1EL{w=|kRCc$}aSX@;JGje5H?x~ZPdXvAWaBK1N%k|;ia(`~2SFSf5FR!?Hx124WP^b`7 zlLLtXB%(|moE1?>;N1olAquKYk%5sZHEB9H4Y)YOxELqH33!a4g9Fb%dOEn!N8ND+ zb#0^-v0NMAlZ6?-Zu&MFX0(PGKjM(D0PcMbp3$|DIfZT+(T-rt7))kS$b@#co1Ig@ zO6?AdFMp=BOh@c7M>$K67KlSQ)0ztiIQSgAoyRvoE_i7@fkSw2DJNeCQZ23vOZr=a zxTOC)kwkEl1b+>?lg#oQ3go?<$sw1>I}8r1ew+q}1|Htw z3x&Hs*&kb0Y!1y^4X(KHW#yCdWyQu9CI`cbuz$^M1<-Se14jJq(1Lz9E!daaLM?az zcGVt%doyK)GG$TmbV^joA%aKU5d7_Sdok1+-ylo5tAgm}0cN_<>*WD{=!xFvAqVpe zBuU>g;XB61+SE;S2Ax5y&7aYfa@i|RFQBm8QC28CZM@AnaLffZRHX5tIDaJj(lALR z;W65u2177^1?_&g6O@MyG-D(~LmJJr`!vL6nWYKDHO(v`Y~Q8YCt*i$96vzB@-f)p z6dZuX;bTr^HUT@S%t8{NkQ$%|n^`AMlz(gPm|y4@^B;I({`OH(r-7~a0$lGo(#`_@ zcj`@r9AwTgfj#PdkWOI2Qd2a)iaH3w5^CQuK}BPIv9J6p=BRq+SA(y0g(UW11b^Vk zBu`YE?iMkae+ps*v5YNaE7DFV~$;j+^p*vOTNIrR`O8?Rm%0|-vk_qAy1pKA5 z79W>P;I1&>N+36K!cN_Ut7^vGIWXW(JMAsdFIgz{795w{1jnU5km;I!y3|1<(;J35 zmspt0^oC8EOPnJiSh4pMTliHqZ06S;>3pk?)-V=*^N9j*car zR%o+|18QeviRsx)4U)@2fwj5kuNSJjwS5L^QZV6+*&}Lz(^<09`H-_C8-J5TF8Yd| z#RBztk1ySYX!sfWfO95lH?j0Y7M5AmtR(?+M_+zmGOR!$$%#;Hs^XAQ&btY4X!c1w*iJg3~gg9TyN z^stFv<0^WCH~SP*2@wOr#zYIhM$w8X14va`%D_byNN#0Uzd}n_a(@T0ekWqFboF!H zHrPWKI7}Lk z-@@p+TRPDAZCSqmRVb&MXr18wuyfqQGsA7?;!FhRR-6{uiDu8>(3bGGTWLb$#2Gh) zcP_!g`jsBzc<^=((0?2Mxyvc9$sGy8bO@IpMxnHa-0(Xm=Pb9UX&953F{(6v%l#A?2O?~ zyog2XA|!MFMc5xV_S>wFe8NTKV9Ky{5&!)^)cRb4jS1YSnLRFkI7C;Ei*mwIufhS6 z)=~eE9e;HdHl}dn;z;ZIMquVM1xcRy%omAYp7{;(RVeGve4qS)ND92X1KNJ(J>hEr zk(qxK{uy4<{~`PrypVv8s9kE}7Oy4(`AB}CG?2k3R1;xKO@L;1b`Q`jmZ>0;Lma=@ zzBf%R>M|vea9*?J@m(^=rhm4j=j?3}P~5=kmyZ7E*t=%S@= zzT_c0^J$~~wa|icjlA#7K0tiMa%WiWVEM8k%TZV|6#KcXG+C$3#PU{H>7exsFK^{+ zTg1#8?H#dVJxsq1(jv&zx=3TavDr;Y9DmWvj(~5j+eCY%kB?8F6_)lK?OpD);)k9c zt+?}=kzdxcwaa19BSly~P_7>8tVP5@9EMfa_2^0>?gCCG5kHhC5x1{5iE>xF=)=wL zI13g4@-;)2kUoW)p$wtl58OgOS}oMRfvIS0=4EuUn$cTvOIKNRO29CaPBvWybbs>f z@}*_+IXV6WM32xSNvn*?yBKR?A(8o@Nf5(E)0MUe4Q_9w2O^@)#)tejyBDZ)^l z(#F}a?`Ga07d~dKQKKe`Cjzu<7)ii75hvFLT5$Z-b1y-EFyHbt%exK5bAN%xjUH~p zgzlJYE*Pzq@8I;&YbX>vodsY|&DG@!9IoO--!RTG)OKDA$4`2WFaT+r)CZcc4LPTE zpzLP%S-KeorYf)cCbp0EtZ#N{`qxb_Wm1!ID7wC5@BTtq{yKp+TA?+B=1R7&#Gw7QvqQ?+VmrF7aq|4XT<|N z8Tb%V;PT(bI#d@_<9~QWwR7nQg(KZ<$0u&+4eBhUsxWxwpp8>Irk|-8TJbSd46E7$ zwjp{piau)8ND;{@gpN=K!9vdfi44Lc)~AXQCFNIH6NKNvSx;BXVWK|Yii zqS;8+;Kx>$#<2Su>gYmBk)ZxIp^h6C);|n}D#naVJwS9Z5qHj zpc%|Da0$XuyZu$By{*M>i_zA(4Pp8n@{0skx4ln(&qHQ+$qVlU%TJ#`xwUc~{uT)% zo+HmW!hg5g8Gvw~@sX3P3HJx>_V?TE|7^F7HKeK3BoR`pH{C&9)`$>hJia z7k@4nX7hU2-PmXU?Oc5yy8*qqmb*I2bIpF_Zi<0TAyf;CA-*kLrG3<6tN6UvZDHH@Yqj+G*iCIu%qOxsajrA`i#OTXRmb}1)cN8up< z$M&*Gn9^x4dyhFdt6Rlt@W4iut_BZiJ3Q&LcLkP*L&^%A<@|=UxU~b#YM*->`#HW% lK7g0>Uz5K!pP delta 5955 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