From d02da647c2be6b8da271d741847046531f706320 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Mon, 22 Jul 2024 12:10:30 +0100 Subject: [PATCH 01/13] Modified paths for set up --- run_template.sh | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/run_template.sh b/run_template.sh index 8795fd2..727bdeb 100755 --- a/run_template.sh +++ b/run_template.sh @@ -1,27 +1,36 @@ #!/bin/sh -SRC='/data/dev/fuzzflesh/src' +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' ACTION='fuzz' -OUTPUT='/data/work/fuzzflesh/dev_testing/output' +OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} LANG='javabc' COMPILER='cfr' -JVM='/usr/lib/jvm/java-19-openjdk-amd64/bin' -JASMIN='/homes/agg22/dev/jasmin-2.4' -JSON='/data/dev/java/json-simple-1.1.1.jar' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' DECOMPILER_PATH='/vol/bitbucket/agg22/cfr-0.152.jar' . $SRC/venv/bin/activate PYTHONPATH=$SRC/fuzzflesh +mkdir $OUTPUT + python3 -m fuzzflesh \ $ACTION \ -base=$OUTPUT \ --dirs \ + -graphs=1 \ + -paths=1 \ + -min_size=3 \ + -max_size=100 \ $LANG \ $COMPILER \ $JVM \ $JASMIN \ $JSON \ - $DECOMPILER_PATH \ - --reflection + $DECOMPILER_PATH From ce43e2e66dbf0d9972399c9c6b6f7d83961063af Mon Sep 17 00:00:00 2001 From: rk1923 Date: Mon, 22 Jul 2024 12:10:41 +0100 Subject: [PATCH 02/13] Added jit compilation log --- src/fuzzflesh/harness/javabc/javabc_runner.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/fuzzflesh/harness/javabc/javabc_runner.py b/src/fuzzflesh/harness/javabc/javabc_runner.py index 9bdbf67..e525fde 100644 --- a/src/fuzzflesh/harness/javabc/javabc_runner.py +++ b/src/fuzzflesh/harness/javabc/javabc_runner.py @@ -191,6 +191,10 @@ def execute_test(self, program : Path, path : Path, class_location : Path) -> Ru if self.reflection: exe_cmd = [f'{self.jvm}', + '-XX:+UnlockDiagnosticVMOptions', + '-XX:CompileCommand=print,TestCase.testCase', + '-XX:+LogCompilation', + f'-XX:LogFile={class_location}/hotspot.log', '-cp', f':{self.output}:{class_location}:{self.json_jar}', f'testing/Wrapper', @@ -202,6 +206,10 @@ def execute_test(self, program : Path, path : Path, class_location : Path) -> Ru '-XX:CompileThreshold=100'] else: exe_cmd = [f'{self.jvm}', + '-XX:+UnlockDiagnosticVMOptions', + '-XX:CompileCommand=print,TestCase.testCase', + '-XX:+LogCompilation', + f'-XX:LogFile={class_location}/hotspot.log', '-cp', f':{class_location}:{self.json_jar}', 'Wrapper', From 2dd2aa32c5e9498c655085328ccc951db4c311d4 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Thu, 1 Aug 2024 21:18:08 +0100 Subject: [PATCH 03/13] Added log compilation flags to java command --- run_template.sh | 15 ++++++++------- src/fuzzflesh/__main__.py | 7 ++++--- src/fuzzflesh/harness/javabc/javabc_runner.py | 6 +++--- .../program_generator/javabc/javabc_generator.py | 2 +- src/fuzzflesh/wrappers/Wrapper.java | 12 +++++++++++- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/run_template.sh b/run_template.sh index 727bdeb..04bd22b 100755 --- a/run_template.sh +++ b/run_template.sh @@ -6,31 +6,32 @@ MACHINE=${NAME%%.*} SRC='/homes/rk1923/control_flow_fleshing/src' ACTION='fuzz' -OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=./output LANG='javabc' -COMPILER='cfr' +COMPILER='hotspot' JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' -DECOMPILER_PATH='/vol/bitbucket/agg22/cfr-0.152.jar' . $SRC/venv/bin/activate PYTHONPATH=$SRC/fuzzflesh -mkdir $OUTPUT +mkdir -p $OUTPUT python3 -m fuzzflesh \ $ACTION \ -base=$OUTPUT \ - --dirs \ -graphs=1 \ - -paths=1 \ + -paths=2 \ -min_size=3 \ -max_size=100 \ + --no_tidy \ $LANG \ $COMPILER \ $JVM \ $JASMIN \ $JSON \ - $DECOMPILER_PATH + # --reflection + diff --git a/src/fuzzflesh/__main__.py b/src/fuzzflesh/__main__.py index 38b69e5..b92a0f7 100644 --- a/src/fuzzflesh/__main__.py +++ b/src/fuzzflesh/__main__.py @@ -295,8 +295,8 @@ def get_flesher(args, language : Lang, cfg : CFG) -> ProgramFlesher: case Lang.JAVABC: return JavaBCProgramGenerator(cfg, args.dirs, args.reflection) - case Lang.C: - #TODO: create flesher + # case Lang.C: + # #TODO: create flesher return None @@ -304,12 +304,13 @@ def get_runner(args, language : Lang, compiler : Compiler, base_dir : Path) -> R match language: case Lang.JAVABC: + compiler_path = None if compiler == Compiler.HOTSPOT else Path(args.compiler_path) return JavaBCRunner(compiler, Path(args.jvm), Path(args.jasmin), Path(args.json), base_dir, - Path(args.compiler_path), + compiler_path, args.reflection) return None diff --git a/src/fuzzflesh/harness/javabc/javabc_runner.py b/src/fuzzflesh/harness/javabc/javabc_runner.py index 21ddbbe..7c8a5b9 100644 --- a/src/fuzzflesh/harness/javabc/javabc_runner.py +++ b/src/fuzzflesh/harness/javabc/javabc_runner.py @@ -19,7 +19,7 @@ def __init__(self, _reflection : bool): super(Runner, self).__init__() self.compiler_name : Compiler = _toolchain - self.compiler_path : Path = _compiler_path + self.compiler_path : Path = None self.output : Path = _output self.jvm : Path = Path(_jvm, 'java') self.javac : Path = Path(_jvm, 'javac') @@ -27,7 +27,7 @@ def __init__(self, self.json_jar : Path = Path(_json) self.wrapper : Path = Path(_output, 'testing/Wrapper.java') if _reflection else Path(_output,'Wrapper.java') self.interface : Path = Path(_output, 'testing/TestCaseInterface.java') - self.n_function_repeats : int = 1000 + self.n_function_repeats : int = 300000 self.reflection : bool = _reflection @property @@ -146,7 +146,7 @@ def execute_test(self, program : Path, path : Path, class_location : Path) -> Ru if self.reflection: exe_cmd = [f'{self.jvm}', '-XX:+UnlockDiagnosticVMOptions', - '-XX:CompileCommand=print,TestCase.testCase', + '-XX:CompileCommand=print,testing.TestCase::testCase', '-XX:+LogCompilation', f'-XX:LogFile={class_location}/hotspot.log', '-cp', diff --git a/src/fuzzflesh/program_generator/javabc/javabc_generator.py b/src/fuzzflesh/program_generator/javabc/javabc_generator.py index 9165675..1077eef 100644 --- a/src/fuzzflesh/program_generator/javabc/javabc_generator.py +++ b/src/fuzzflesh/program_generator/javabc/javabc_generator.py @@ -168,7 +168,7 @@ def flesh_conditional_node(self, n : int) -> InstructionBlock: # depending on whether they are known at compile time or not #TODO: switch dir and output in passing function so dirs is always var 2 #TODO: something is broken here with the 1 and 5 - dir_local_var = 2 if self.dirs_known_at_compile else 1 + dir_local_var = 5 if self.dirs_known_at_compile else 1 code = ''' ; get directions for node diff --git a/src/fuzzflesh/wrappers/Wrapper.java b/src/fuzzflesh/wrappers/Wrapper.java index e6534bb..1d5f40d 100644 --- a/src/fuzzflesh/wrappers/Wrapper.java +++ b/src/fuzzflesh/wrappers/Wrapper.java @@ -23,6 +23,8 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio String badOutputFilename = args[3]; int nFunctionRepeats = Integer.parseInt(args[4]); + boolean result = true; + // get direction size and expected output size from file JSONParser parser = new JSONParser(); JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(inputFilename)); @@ -61,10 +63,18 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio // repeat function to induce JIT for(int i = 0; i < nFunctionRepeats; i++){ test.testCase(dir, actualOutput); + + // compare each expected and actual and write out if any are inconsistent + result = compare(expectedOutput, actualOutput, outputSize); + + // record bad output in separate file + if (!result){ + recordOutput(badOutputFilename, inputFilename, result, expectedOutput, actualOutput, outputSize); + } } // compare expected and actual - boolean result = compare(expectedOutput, actualOutput, outputSize); + result = compare(expectedOutput, actualOutput, outputSize); // record all output recordOutput(outputFilename, inputFilename, result, expectedOutput, actualOutput, outputSize); From 26ad9cc7f93e7b43917530759b885c67b7a4d919 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Thu, 1 Aug 2024 21:18:42 +0100 Subject: [PATCH 04/13] Created bash scripts to count the threshold for JIT compilation --- count_no_reflection.csv | 2282 ++++++++++++++++++++++++++++++++++++ count_reflection.csv | 2281 +++++++++++++++++++++++++++++++++++ get_count_no_reflection.sh | 61 + get_count_reflection.sh | 62 + get_stats_no_reflection.sh | 63 + get_stats_reflection.sh | 64 + stats_no_reflection.csv | 292 +++++ stats_reflection.csv | 292 +++++ 8 files changed, 5397 insertions(+) create mode 100644 count_no_reflection.csv create mode 100644 count_reflection.csv create mode 100755 get_count_no_reflection.sh create mode 100755 get_count_reflection.sh create mode 100755 get_stats_no_reflection.sh create mode 100755 get_stats_reflection.sh create mode 100644 stats_no_reflection.csv create mode 100644 stats_reflection.csv diff --git a/count_no_reflection.csv b/count_no_reflection.csv new file mode 100644 index 0000000..df79927 --- /dev/null +++ b/count_no_reflection.csv @@ -0,0 +1,2282 @@ +# of invocation until it gets C1/OSR/C2 compiled +Graph size, C1, OSR, C2 +10, 211, , 63182 +10, 215, 63159, 70621 +10, 898, , 64115 +10, 479, 70260, 214244 +10, 339, , 60825 +10, 282, 69014, 140685 +10, 264, , 60863 +10, 516, 60705, 93797 +10, 277, , 67158 +10, 260, 60414, 84769 +10, 362, , 60892 +10, 218, , 62608 +10, 260, 60486, 88516 +10, 233, , 67072 +10, 279, 65843, 138787 +10, 512, , 61605 +10, 669, , 64291 +10, 587, , 61014 +10, 613, , 61048 +10, 296, 60406, 69170 +11, 884, , 61020 +11, 638, , 61144 +11, 770, , 64013 +11, 353, , 61106 +11, 1348, , 61332 +11, 594, , 61151 +11, 324, , 60912 +11, 637, , 61151 +11, 915, , 61014 +11, 599, , 61353 +11, 526, , 61010 +11, 967, , 61234 +11, 640, , 64214 +11, 753, , 61185 +11, 619, , 61006 +11, 624, , 61004 +11, 512, , 61102 +11, 497, , 60977 +11, 883, , 61263 +11, 570, , 61322 +12, 492, , 61377 +12, 1032, , 61025 +12, 377, , 64185 +12, 661, , 61228 +12, 512, , 61142 +12, 784, , 61205 +12, 454, , 61069 +12, 419, , 61079 +12, 336, , 63984 +12, 1041, , 61181 +12, 904, , 61133 +12, 284, , 63910 +12, 280, , 66002 +12, 753, , 61157 +12, 400, , 60940 +12, 512, , 67285 +12, 704, , 64260 +12, 411, , 61042 +12, 961, , 61197 +12, 327, , 60978 +13, 407, , 61069 +13, 1158, , 61043 +13, 1014, , 61213 +13, 455, , 60961 +13, 508, , 60991 +13, 651, , 61127 +13, 487, , 60980 +119677 +13, 265, , 65882 +13, 320, , 60843 +13, 328, , 60845 +13, 546, , 67565 +13, 583, , 61369 +13, 272, , 69575 +13, 526, , 60997 +13, 301, , 70736 +13, 293, , 70575 +13, 1154, , 61167 +13, 295, , 67587 +13, 584, , 61171 +13, 1347, , 61211 +14, 580, , 61168 +14, 945, , 61624 +14, 1034, , 61231 +14, 948, , 67146 +14, 1450, , 61260 +14, 327, , 60883 +14, 1472, , 61038 +14, 976, , 61597 +14, 835, , 61278 +14, 1273, , 61021 +14, 1091, , 61052 +14, 1474, , 61927 +14, 1389, , 61037 +14, 531, , 61186 +14, 448, , 61119 +14, 365, , 64046 +14, 1135, , 61006 +14, 298, , 60821 +96359 +14, 772, , 61145 +14, 512, , 61001 +15, 451, , 61228 +15, 775, , 60998 +15, 619, , 61527 +15, 391, , 61033 +15, 921, , 61094 +15, 339, , 70129 +15, 737, , 61184 +95442 +15, 676, , 61133 +15, 572, , 61027 +15, 682, , 61144 +15, 506, , 61512 +15, 759, , 61028 +15, 391, , 60935 +15, 677, , 61172 +15, 788, , 61158 +15, 433, , 61123 +15, 1088, , 67404 +15, 398, , 61215 +15, 951, , 61010 +15, 282, , 60834 +16, 198, 64928, 68139 +16, 344, , 60915 +16, 196, 57389, 59634 +16, 796, , 67155 +16, 259, , 70210 +16, 278, , 66668 +16, 364, , 61012 +16, 290, 67643, 132780 +16, 376, , 60982 +16, 261, , 70936 +16, 339, , 60810 +16, 267, 62902, 100823 +16, 551, , 60984 +16, 512, , 60980 +16, 348, , 60903 +16, 294, , 64069 +16, 176, 32505, 49364 +16, 491, , 61486 +16, 259, , 62742 +16, 356, , 67117 +17, 292, , 66802 +17, 881, , 61173 +17, 471, , 60973 +17, 1318, , 61253 +17, 424, , 60947 +17, 1029, , 67188 +17, 1169, , 61560 +17, 1023, , 61212 +17, 1259, , 61219 +17, 959, , 61030 +17, 339, , 61111 +17, 371, , 60974 +97724 +17, 1233, , 61201 +17, 457, , 61152 +17, 810, , 61026 +17, 394, , 60913 +17, 576, , 64277 +17, 1394, , 61031 +17, 543, , 61127 +17, 504, , 61129 +18, 261, , 70568 +18, 339, , 60892 +18, 602, , 61264 +18, 719, , 70281 +18, 409, , 60906 +18, 701, , 61133 +18, 400, , 60993 +18, 961, , 61290 +18, 315, , 60922 +18, 1085, , 61033 +18, 383, , 61147 +18, 696, , 67561 +18, 329, , 60884 +18, 427, , 64164 +18, 388, , 61013 +18, 281, , 64153 +18, 436, , 61250 +18, 1276, , 61119 +18, 459, , 61112 +18, 438, , 61132 +19, 299, 60490, 96767 +19, 462, , 61412 +19, 294, , 60781 +19, 402, , 61033 +19, 1373, , 61100 +19, 393, 60534, 80545 +19, 759, , 61021 +19, 353, , 60946 +98495 +19, 666, , 61041 +19, 732, , 61259 +19, 485, , 64221 +19, 573, , 61366 +19, 735, , 61219 +19, 265, , 60749 +19, 700, , 61286 +19, 349, , 60936 +19, 447, , 61084 +19, 512, , 61454 +19, 637, , 61023 +19, 574, , 61133 +20, 1166, , 61223 +20, 512, , 61135 +20, 1072, , 61158 +20, 874, , 61356 +20, 275, , 65839 +20, 527, , 61178 +20, 512, , 61165 +20, 1096, , 61266 +20, 386, , 60887 +20, 422, , 61281 +20, 260, , 64533 +20, 291, , 60863 +20, 367, , 60874 +20, 559, , 61412 +20, 593, , 61165 +20, 944, , 61230 +20, 411, , 60912 +20, 496, , 61004 +20, 1492, , 61228 +20, 1184, , 61435 +21, 331, , 60905 +21, 403, , 61003 +21, 573, , 61015 +21, 830, , 61176 +21, 1299, , 61040 +21, 360, , 60975 +21, 1006, , 61087 +21, 788, , 61275 +21, 263, , 60811 +21, 289, , 66436 +21, 568, , 61018 +21, 775, , 61553 +21, 325, , 60844 +21, 493, , 60988 +21, 1156, , 61050 +21, 379, , 60995 +21, 996, , 61253 +21, 461, , 61067 +21, 482, , 61102 +21, 694, , 61598 +22, 1182, , 61010 +22, 257, , 65774 +22, 296, , 60787 +22, 585, , 61107 +22, 1143, , 61207 +22, 406, , 61040 +22, 436, , 60982 +22, 355, , 60973 +22, 832, , 61213 +22, 1097, , 61216 +22, 268, , 65272 +22, 910, , 70397 +22, 512, , 61070 +22, 1418, , 61145 +22, 510, , 61012 +22, 538, , 61027 +22, 512, , 60989 +22, 592, , 60992 +22, 1211, , 61169 +22, 717, , 61543 +23, 392, , 61050 +23, 280, , 67513 +23, 512, , 61115 +23, 512, , 61001 +23, 442, , 61301 +167477 +23, 1009, , 61689 +23, 291, , 68810 +23, 281, , 68317 +23, 404, , 61014 +23, 509, , 61156 +23, 400, , 67432 +23, 810, , 61211 +23, 409, , 61041 +23, 593, , 61211 +23, 512, , 61070 +23, 360, , 60965 +23, 1012, , 67485 +23, 481, , 70335 +23, 749, , 70478 +23, 512, , 61104 +24, 512, , 61155 +24, 443, , 61305 +24, 305, , 64859 +24, 512, , 61100 +24, 287, , 64094 +24, 295, , 64216 +24, 728, , 67311 +24, 695, , 67345 +24, 329, , 61069 +24, 714, , 61155 +24, 401, , 60972 +24, 356, , 60958 +24, 512, , 61109 +24, 262, , 69337 +24, 364, , 60879 +24, 412, , 61122 +24, 587, , 60985 +24, 512, , 61151 +24, 512, , 60978 +24, 843, , 61040 +25, 1511, , 61012 +25, 275, , 66909 +25, 476, , 61088 +25, 350, , 60932 +25, 307, , 60913 +25, 265, , 60782 +25, 447, , 60968 +25, 514, , 61072 +25, 650, , 67142 +25, 323, , 60817 +25, 1734, , 70519 +25, 618, , 61227 +25, 285, , 68441 +25, 256, , 67145 +25, 1068, , 61109 +25, 356, , 60885 +25, 451, , 61074 +25, 264, , 69761 +144298 +25, 830, , 60988 +25, 512, , 60972 +26, 295, , 68748 +26, 857, , 61107 +26, 480, , 67145 +26, 276, , 62484 +26, 557, , 67260 +26, 289, , 66053 +26, 1475, , 62119 +26, 341, , 61113 +92097 +26, 259, , 64783 +26, 267, , 64339 +26, 283, , 67469 +26, 290, , 62803 +26, 268, , 62550 +26, 378, , 61005 +26, 423, , 60955 +26, 1199, , 67168 +26, 1503, , 61223 +26, 294, , 61010 +26, 259, , 70212 +73768 +26, 896, , 61132 +27, 1128, , 61654 +27, 468, , 60980 +27, 1095, , 60980 +27, 604, , 60991 +27, 586, , 61044 +27, 387, , 61129 +27, 378, , 60922 +27, 835, , 70767 +27, 666, , 61200 +27, 716, , 61141 +27, 649, , 61311 +27, 261, , 65545 +27, 464, , 61089 +27, 512, , 61548 +27, 512, , 64076 +27, 293, , 65240 +27, 499, , 61419 +27, 1087, , 61339 +27, 1468, , 61219 +27, 1571, , 61195 +28, 574, , 61293 +28, 606, , 61173 +28, 512, , 61091 +28, 815, , 61202 +28, 443, , 60977 +28, 851, , 61188 +28, 315, , 60836 +28, 1166, , 61248 +28, 512, , 60987 +28, 263, , 64268 +28, 709, , 67251 +28, 323, , 60891 +28, 1242, , 61350 +28, 558, , 61183 +28, 335, , 61020 +28, 977, , 61272 +28, 595, , 61018 +28, 280, , 63864 +28, 465, , 61143 +28, 680, , 60994 +29, 277, , 69545 +29, 594, , 61144 +29, 451, , 61070 +29, 394, , 61044 +29, 595, , 61418 +29, 339, , 61028 +29, 301, , 68629 +29, 275, , 66324 +29, 400, , 61038 +29, 270, , 65601 +29, 807, , 61202 +29, 339, , 60921 +29, 512, , 60993 +29, 936, , 61205 +29, 1092, , 61275 +29, 433, , 61252 +29, 399, , 61014 +29, 512, , 61097 +29, 859, , 61240 +29, 298, , 60806 +30, 256, , 63853 +30, 283, , 66487 +30, 777, , 60990 +30, 1010, , 61051 +30, 261, , 60833 +114891 +30, 502, , 61123 +30, 280, , 63368 +30, 319, , 61103 +30, 505, , 60981 +30, 290, , 65578 +30, 281, , 64351 +30, 351, , 60956 +30, 277, , 62921 +30, 271, , 62785 +30, 351, , 60935 +30, 1108, , 61274 +30, 508, , 61361 +30, 332, , 60942 +30, 360, , 64072 +97363 +30, 913, , 61067 +31, 393, , 60975 +31, 609, , 61142 +31, 325, , 60931 +31, 512, , 60997 +31, 504, , 61402 +31, 499, , 61157 +31, 1353, , 67412 +31, 512, , 61098 +31, 512, , 64071 +31, 272, , 62711 +31, 310, , 60920 +31, 318, , 60897 +31, 277, , 66516 +31, 1151, , 61697 +31, 896, , 61568 +31, 260, , 60784 +31, 512, , 64170 +31, 901, , 61550 +31, 584, , 61168 +31, 382, , 61148 +32, 263, , 67853 +32, 1543, , 61288 +32, 670, , 61518 +32, 1139, , 61034 +32, 512, , 60975 +32, 324, , 60897 +32, 289, , 68303 +32, 1045, , 61232 +32, 288, , 67341 +32, 269, , 64379 +32, 263, , 66489 +32, 990, , 61032 +32, 286, , 65580 +32, 404, , 61186 +32, 281, , 66110 +32, 512, , 61427 +32, 431, , 61069 +32, 986, , 61057 +32, 512, , 61247 +32, 358, , 61016 +33, 283, , 65899 +33, 628, , 67164 +33, 278, , 70794 +33, 1091, , 61057 +33, 261, , 68316 +33, 427, , 61073 +33, 639, , 61179 +33, 343, , 60972 +33, 536, , 64221 +33, 518, , 61355 +33, 622, , 64080 +33, 851, , 61151 +33, 647, , 70246 +33, 481, , 61480 +33, 292, , 68012 +33, 566, , 61429 +33, 325, , 60842 +33, 512, , 61115 +33, 506, , 61017 +33, 512, , 61107 +34, 286, , 64574 +34, 356, , 60932 +34, 269, , 65145 +34, 445, , 61077 +34, 1081, , 61229 +34, 1437, , 61210 +34, 727, , 61180 +34, 1282, , 67237 +34, 1437, , 61115 +34, 352, , 60880 +34, 1193, , 64086 +34, 279, , 67622 +34, 300, , 60946 +34, 390, , 61033 +34, 291, , 6638 +34, 588, , 61002 +34, 310, , 60869 +34, 1633, , 61261 +34, 512, , 60984 +34, 279, , 64199 +35, 1058, , 60993 +35, 260, , 63079 +35, 578, , 70375 +35, 387, , 61039 +35, 263, , 60897 +123023 +35, 810, , 60982 +35, 263, , 69875 +35, 512, , 61313 +35, 300, , 60876 +96658 +35, 261, , 71068 +35, 393, , 61059 +35, 653, , 61016 +35, 669, , 61025 +35, 874, , 61002 +35, 301, , 61024 +35, 922, , 61146 +35, 726, , 64083 +35, 265, , 9804 +35, 276, , 2383 +35, 512, , 61432 +36, 265, , 4685 +36, 732, , 61177 +36, 425, , 60964 +36, 625, , 61116 +36, 749, , 61001 +36, 345, , 61007 +36, 261, , 3666 +36, 299, , 3506 +36, 262, , 60777 +36, 683, , 60969 +36, 608, , 64257 +36, 571, , 61144 +36, 367, , 60972 +36, 261, , 63844 +36, 734, , 61206 +36, 256, , 30552 +36, 262, , 65518 +36, 289, , 61000 +36, 292, , 61015 +36, 512, , 61121 +37, 288, , 62906 +37, 259, , 4887 +37, 446, , 61414 +37, 408, , 61094 +37, 665, , 61206 +37, 261, , 60802 +37, 424, , 61051 +37, 378, , 60939 +37, 492, , 64113 +37, 925, , 64085 +37, 280, , 3545 +37, 334, , 60874 +97621 +37, 263, , 3504 +37, 394, , 61041 +37, 268, , 62810 +37, 420, , 60988 +37, 512, , 61389 +37, 305, , 60915 +37, 287, , 60889 +37, 512, , 60982 +38, 262, , 60865 +102009 +38, 1622, , 61239 +38, 263, , 5450 +38, 321, , 60966 +38, 512, , 60977 +38, 512, , 61594 +38, 289, , 66054 +38, 342, , 60948 +38, 1000, , 61070 +38, 285, , 65975 +38, 478, , 61094 +38, 297, , 60847 +38, 814, , 61198 +38, 375, , 61011 +38, 277, , 4523 +38, 428, , 61108 +38, 305, , 60907 +38, 269, , 64998 +105940 +38, 512, , 67691 +38, 1623, , 61568 +39, 454, , 61068 +39, 281, , 6450 +39, 396, , 61097 +39, 1261, , 60994 +39, 512, , 61001 +39, 512, , 61157 +39, 447, , 61132 +39, 773, , 61228 +39, 276, , 64404 +39, 261, , 3560 +39, 512, , 61130 +39, 421, , 67535 +39, 1012, , 61237 +39, 271, , 60798 +39, 1135, , 61603 +39, 438, , 60988 +39, 283, , 6447 +39, 368, , 64191 +39, 332, , 67131 +39, 512, , 61155 +40, 467, , 60987 +40, 461, , 61113 +40, 373, , 61269 +117543 +40, 292, , 4541 +40, 388, , 61228 +40, 745, , 61193 +40, 297, , 60882 +40, 508, , 67136 +40, 512, , 61097 +40, 262, , 60886 +40, 1169, , 64078 +40, 261, , 70643 +40, 260, , 60839 +40, 338, , 60878 +40, 414, , 61066 +40, 512, , 61008 +40, 412, , 61294 +40, 459, , 61075 +40, 674, , 61007 +40, 397, , 60971 +41, 959, , 61001 +41, 359, , 61137 +41, 284, , 63868 +41, 482, , 61004 +41, 301, , 60929 +41, 609, , 61425 +41, 348, , 60881 +41, 330, , 60873 +41, 491, , 60959 +41, 294, , 9207 +41, 700, , 61204 +41, 275, , 3470 +41, 349, , 60886 +41, 357, , 61015 +41, 377, , 60997 +116389 +41, 1668, , 61354 +41, 521, , 61423 +41, 284, , 64296 +41, 992, , 61286 +41, 277, , 7368 +42, 408, , 61193 +42, 1271, , 64349 +42, 379, , 61065 +42, 512, , 61334 +42, 893, , 61543 +42, 719, , 61049 +42, 1562, , 61196 +42, 491, , 61107 +42, 421, , 61033 +42, 399, , 61380 +42, 260, , 2397 +42, 795, , 61104 +42, 281, , 9014 +42, 296, , 3429 +42, 796, , 61634 +42, 499, , 61033 +42, 284, , 63060 +42, 367, , 60979 +42, 300, , 63480 +42, 279, , 62774 +43, 353, , 60971 +43, 434, , 60955 +43, 264, , 4629 +43, 761, , 67171 +43, 322, , 60970 +43, 347, , 60907 +120887 +43, 357, , 60950 +43, 388, , 61072 +43, 266, , 62174 +43, 1017, , 61220 +43, 528, , 61130 +43, 263, , 4533 +43, 279, , 62348 +43, 395, , 60976 +43, 366, , 60982 +43, 1514, , 64316 +43, 897, , 61248 +43, 743, , 61152 +43, 428, , 61243 +43, 374, , 60972 +44, 280, , 3419 +44, 462, , 61108 +44, 266, , 60796 +44, 455, , 61002 +44, 312, , 60946 +44, 467, , 60975 +44, 371, , 60911 +44, 688, , 61828 +44, 512, , 61004 +44, 320, , 4577 +44, 274, , 62450 +67577 +44, 397, , 60966 +44, 398, , 61058 +44, 419, , 61292 +44, 455, , 61233 +44, 343, , 61007 +44, 293, , 69327 +44, 324, , 60861 +44, 263, , 60860 +44, 490, , 61135 +45, 312, , 9747 +45, 269, , 62604 +45, 329, 60658, 96901 +45, 270, , 4516 +45, 273, , 62905 +45, 512, , 61130 +45, 260, , 3071 +45, 997, , 60997 +45, 501, , 61087 +45, 278, , 5486 +45, 343, , 60996 +45, 586, , 61049 +45, 480, , 61160 +45, 277, , 7627 +45, 278, , 5564 +45, 353, , 60961 +45, 260, , 7047 +45, 512, , 61348 +45, 279, , 8922 +45, 262, , 3428 +46, 512, , 61141 +46, 347, , 60891 +100195 +46, 276, , 69099 +46, 291, , 60880 +46, 261, , 63849 +46, 297, , 66470 +46, 289, , 10165 +46, 429, , 67255 +46, 360, , 61125 +46, 344, , 60984 +46, 349, , 60992 +46, 261, , 3442 +46, 341, , 61011 +46, 448, , 61135 +115627 +46, 512, , 61003 +46, 384, , 61094 +46, 273, , 63224 +46, 431, , 61094 +46, 300, , 60923 +46, 295, , 60841 +47, 469, , 61093 +47, 385, , 60978 +47, 387, , 61234 +47, 272, , 2379 +47, 512, , 64258 +47, 876, , 61234 +47, 512, , 61617 +47, 310, , 10890 +47, 302, , 60924 +47, 915, , 61126 +47, 640, , 61202 +47, 512, , 61198 +47, 438, , 61054 +47, 512, , 61204 +47, 292, , 60909 +47, 259, , 5494 +47, 266, , 67776 +47, 512, , 64290 +47, 490, , 61120 +47, 566, , 61026 +48, 440, , 61097 +48, 521, , 64146 +48, 270, , 63410 +48, 432, , 61073 +48, 265, , 63949 +48, 274, , 2471 +48, 296, , 5745 +48, 325, , 60996 +48, 715, , 64721 +48, 354, , 61057 +48, 259, , 64100 +48, 1371, , 61042 +48, 525, , 61073 +48, 299, , 60899 +48, 293, , 70261 +48, 345, , 60962 +48, 319, , 60924 +48, 512, , 61003 +48, 592, , 61420 +48, 512, , 61132 +49, 333, , 60963 +96365 +49, 604, , 70315 +49, 502, , 61060 +49, 257, , 60883 +49, 280, , 8082 +49, 278, , 62444 +49, 262, , 68541 +49, 902, , 61677 +49, 408, , 64102 +49, 381, , 61076 +49, 805, , 61055 +49, 512, , 61106 +49, 278, , 2382 +49, 331, , 61083 +49, 260, , 60838 +49, 264, , 63996 +49, 436, , 61054 +49, 1003, , 61054 +49, 262, , 3520 +49, 408, , 64149 +50, 512, , 61450 +50, 450, , 61002 +50, 674, , 67461 +50, 465, , 61059 +50, 294, , 4536 +50, 512, , 61152 +50, 306, , 4538 +50, 427, , 60996 +50, 274, , 4450 +50, 297, , 6809 +50, 491, , 61014 +50, 753, , 64512 +50, 302, , 60868 +50, 330, , 60953 +50, 594, , 61331 +50, 258, , 60905 +50, 1541, , 61069 +50, 284, , 3575 +50, 355, , 61228 +116959 +50, 277, , 3442 +51, 512, , 61122 +51, 263, , 4475 +51, 512, , 61405 +51, 281, , 5891 +51, 299, , 60916 +51, 361, , 60929 +51, 758, , 61215 +51, 598, , 61024 +51, 283, , 3419 +41433 +51, 358, , 61058 +51, 281, , 64475 +51, 267, , 3445 +51, 276, , 9217 +51, 512, , 61268 +51, 262, , 11263 +51, 268, , 2387 +51, 946, , 61898 +51, 288, , 61005 +51, 277, , 5562 +51, 477, , 61160 +52, 512, , 61451 +52, 284, , 6036 +52, 907, , 61127 +52, 287, , 64733 +52, 1716, , 61053 +52, 740, , 61260 +52, 431, , 64090 +52, 512, , 61148 +52, 460, , 61030 +52, 688, , 61076 +52, 462, , 61080 +52, 403, , 61085 +52, 276, , 62009 +52, 274, , 63876 +52, 350, , 60996 +52, 862, , 61815 +52, 1629, , 61298 +52, 745, , 61261 +52, 278, , 5770 +52, 350, , 61290 +53, 512, , 67195 +53, 618, , 60995 +53, 915, , 61732 +53, 692, , 61611 +53, 310, , 61113 +53, 649, , 61423 +53, 290, , 8664 +53, 299, , 64195 +53, 512, , 61025 +53, 470, , 60989 +53, 311, , 61022 +53, 415, , 61129 +53, 724, , 64323 +53, 814, , 61041 +53, 279, , 6739 +41363 +53, 377, , 61035 +53, 287, , 63971 +70266 +53, 512, , 61016 +53, 262, , 6757 +53, 835, , 61200 +54, 380, , 60993 +54, 260, , 7632 +54, 256, , 63939 +54, 263, , 13249 +54, 286, , 5589 +54, 966, , 61249 +54, 416, , 61049 +54, 276, , 4517 +54, 582, , 61175 +54, 290, , 12177 +54, 291, , 60870 +54, 703, , 61209 +54, 432, , 61000 +54, 398, , 64153 +54, 333, , 61038 +54, 1064, , 70233 +54, 873, , 61209 +54, 467, , 61177 +54, 260, , 8917 +54, 406, , 61185 +55, 439, , 61085 +55, 338, , 60909 +55, 512, , 61152 +55, 678, , 61156 +55, 261, , 60827 +55, 297, , 60884 +55, 501, , 61400 +55, 512, , 61247 +55, 512, , 61184 +55, 565, , 61229 +55, 512, , 61307 +55, 512, , 61121 +55, 277, , 7677 +55, 264, , 65671 +74780 +55, 372, , 61307 +55, 512, , 61128 +55, 512, , 61027 +55, 618, , 61173 +55, 500, , 61428 +55, 512, , 64100 +56, 282, , 64283 +56, 428, , 61165 +56, 512, , 61285 +56, 267, , 6920 +46022 +56, 512, , 61405 +56, 496, , 61000 +56, 270, , 3496 +56, 320, , 6865 +56, 696, , 70476 +56, 484, , 60993 +56, 467, , 60986 +56, 450, , 61133 +56, 552, , 61162 +56, 533, , 67577 +56, 1411, , 61585 +56, 287, , 6462 +56, 669, , 61294 +56, 440, , 61080 +56, 369, , 61157 +56, 265, , 68058 +57, 294, , 9835 +57, 276, , 5493 +57, 512, , 61102 +57, 477, , 61010 +57, 290, , 63954 +57, 339, , 60985 +57, 432, , 61096 +57, 399, , 60994 +57, 286, , 5531 +57, 340, , 13422 +57, 291, , 6716 +57, 379, , 61183 +57, 329, , 61173 +57, 268, , 5614 +57, 276, , 4457 +57, 419, , 61066 +57, 496, , 61084 +57, 281, , 15664 +172333 +57, 512, , 61051 +57, 265, , 6593 +58, 512, , 61008 +58, 453, , 61270 +58, 261, , 5538 +58, 401, , 61070 +58, 303, , 61132 +58, 307, , 8666 +58, 512, , 61106 +58, 1610, , 61074 +58, 284, , 8865 +58, 450, , 61633 +58, 390, , 60994 +58, 606, , 61291 +58, 350, , 61023 +58, 267, , 4509 +58, 275, , 3412 +58, 512, , 61167 +58, 479, , 60994 +58, 365, , 7767 +58, 512, , 61546 +58, 358, , 61071 +59, 291, , 7810 +59, 512, , 61161 +59, 317, , 60957 +59, 483, , 61253 +59, 282, , 7923 +59, 516, , 61191 +59, 287, , 8935 +59, 512, , 61187 +59, 289, , 13110 +59, 512, , 61120 +59, 325, , 61001 +59, 289, , 6970 +43643 +59, 512, , 61149 +59, 356, , 61257 +59, 260, , 10172 +59, 545, , 61184 +59, 512, , 61125 +59, 377, , 61003 +59, 741, , 61610 +59, 290, , 9924 +60, 873, , 61254 +60, 736, , 64137 +60, 277, , 12530 +60, 328, , 8772 +60, 768, , 61223 +60, 317, , 60981 +60, 512, , 61105 +60, 291, , 12419 +60, 1268, , 61703 +60, 410, , 61046 +60, 384, , 61102 +60, 263, , 8690 +60, 385, , 61036 +60, 512, , 61129 +60, 512, , 61001 +60, 487, , 61082 +60, 453, , 61101 +60, 512, , 61060 +60, 401, , 70376 +60, 262, , 60845 +116847 +61, 258, , 60853 +61, 377, , 60981 +61, 289, , 5541 +61, 290, , 7586 +61, 283, , 60847 +61, 290, , 60906 +61, 263, , 63932 +61, 512, , 61200 +61, 260, , 4435 +61, 260, , 60912 +61, 744, , 61246 +61, 263, , 5428 +61, 657, , 61056 +61, 435, , 61070 +61, 360, , 61185 +61, 273, , 4536 +61, 392, , 61155 +61, 510, , 61109 +61, 290, , 5543 +61, 315, , 60947 +62, 467, , 61122 +62, 477, , 61399 +62, 512, , 61087 +62, 350, , 61163 +62, 288, , 60860 +62, 271, , 5524 +62, 273, , 4473 +62, 512, , 61136 +62, 293, , 60967 +62, 1031, , 61882 +62, 450, , 61064 +120193 +62, 306, , 61156 +62, 830, , 61208 +62, 512, , 67279 +62, 282, , 60854 +62, 411, , 61073 +62, 296, , 60912 +62, 288, , 5537 +62, 512, , 61277 +62, 300, , 60873 +63, 512, , 61168 +63, 274, , 4496 +63, 267, , 60850 +63, 292, , 60815 +63, 311, , 61157 +63, 281, , 8635 +63, 1742, , 61082 +63, 354, , 61138 +63, 284, , 11942 +63, 1421, , 61244 +63, 291, , 8545 +63, 324, , 61092 +63, 512, , 61071 +63, 258, , 5562 +63, 278, , 60800 +63, 305, , 60981 +63, 321, , 60945 +63, 376, , 61090 +63, 512, , 64162 +63, 261, , 8980 +64, 437, , 61983 +64, 406, , 60999 +64, 479, , 61142 +64, 512, , 61016 +64, 271, , 60825 +64, 408, , 61072 +64, 671, , 61557 +64, 512, , 61020 +64, 361, , 61260 +64, 282, , 9746 +64, 306, , 60967 +64, 732, , 61052 +64, 429, , 61065 +64, 478, , 61077 +64, 396, , 60995 +64, 550, , 61212 +64, 512, , 61658 +64, 287, , 5568 +64, 374, , 61034 +64, 512, , 61012 +65, 288, , 6676 +65, 273, , 9970 +65, 434, , 61300 +65, 433, , 61054 +65, 257, , 5490 +65, 365, , 61117 +65, 512, , 61115 +65, 264, , 7762 +65, 260, , 60784 +65, 381, , 61074 +65, 280, , 60933 +65, 512, , 61554 +65, 512, , 61136 +65, 348, , 60980 +65, 655, , 61526 +65, 491, , 61202 +65, 368, , 61089 +65, 323, , 60984 +65, 283, , 7505 +65, 490, , 64185 +66, 263, , 47486 +66, 512, , 61345 +66, 512, , 61141 +66, 512, , 61114 +66, 258, , 2404 +66, 324, , 60982 +66, 508, , 61099 +66, 766, , 61616 +66, 512, , 61274 +66, 432, , 61002 +66, 512, , 61198 +66, 398, , 61075 +66, 278, , 7920 +66, 512, , 64231 +66, 345, , 61034 +66, 827, , 61552 +66, 512, , 61346 +66, 405, , 61184 +66, 286, , 11216 +66, 454, , 61287 +175697 +67, 343, , 60962 +67, 279, , 61156 +67, 315, , 61026 +67, 683, , 61028 +67, 279, , 5499 +67, 283, , 12315 +67, 646, , 61616 +67, 372, , 61074 +67, 603, , 61203 +67, 386, , 61273 +117679 +67, 259, , 60775 +67, 512, , 60990 +67, 263, , 60975 +67, 907, , 61017 +67, 284, , 5612 +67, 512, , 61013 +67, 285, , 6643 +67, 830, , 62181 +67, 512, , 61167 +67, 265, , 60830 +68, 275, , 60766 +68, 270, , 5512 +68, 296, , 61023 +68, 460, , 61260 +68, 508, , 60985 +68, 451, , 60990 +114674 +68, 262, , 61000 +68, 672, , 61172 +68, 337, , 61008 +68, 512, , 60978 +68, 430, , 60999 +68, 275, , 5499 +68, 299, , 6651 +68, 266, , 60922 +68, 512, , 61168 +68, 512, , 61031 +68, 346, , 61137 +68, 264, , 60895 +68, 443, , 61151 +68, 319, , 60980 +69, 493, , 61414 +69, 356, , 61168 +69, 281, , 5501 +69, 349, , 61021 +114448 +69, 512, , 61484 +69, 512, , 61360 +69, 259, , 7701 +69, 376, , 61002 +69, 284, , 9742 +69, 475, , 61007 +69, 263, , 3402 +69, 419, , 64199 +69, 280, , 56665 +69, 512, , 61104 +69, 323, , 61036 +69, 288, , 8716 +69, 275, , 60794 +69, 286, , 60860 +69, 262, , 60934 +69, 274, , 6583 +70, 269, , 8662 +70, 512, , 61155 +70, 296, , 10774 +70, 382, , 61036 +70, 512, , 61036 +70, 345, , 61258 +70, 300, , 9466 +70, 268, , 5542 +70, 1572, , 61246 +70, 326, , 60964 +70, 354, , 60984 +70, 291, , 7598 +70, 321, , 60937 +70, 695, , 61057 +70, 424, , 60990 +70, 261, , 6557 +70, 512, , 61066 +70, 371, , 61095 +70, 459, , 67140 +70, 267, , 60843 +71, 1048, , 64157 +71, 750, , 61078 +71, 512, , 61122 +71, 680, , 61368 +71, 1417, , 62029 +71, 302, , 60983 +71, 266, , 60884 +71, 509, , 61064 +71, 512, , 61116 +71, 309, , 60932 +71, 347, , 61031 +71, 421, , 61064 +71, 347, , 61042 +96799 +71, 394, , 61093 +71, 304, , 60869 +71, 512, , 61390 +71, 278, , 60864 +71, 263, , 3436 +71, 458, , 61206 +71, 512, , 67729 +72, 263, , 60932 +72, 386, , 61020 +72, 320, , 61101 +72, 258, , 4426 +72, 662, , 61048 +72, 512, , 61033 +72, 320, , 61088 +72, 276, , 4526 +72, 335, , 61058 +72, 275, , 8683 +72, 266, , 60933 +72, 426, , 60997 +72, 512, , 61011 +72, 273, , 5539 +72, 410, , 61018 +72, 512, , 61420 +72, 277, , 60785 +72, 1293, , 61232 +72, 290, , 6553 +72, 394, , 60983 +73, 267, , 4463 +73, 263, , 3455 +73, 272, , 60790 +73, 273, , 60885 +113248 +73, 259, , 2339 +73, 512, , 61693 +73, 264, , 60982 +73, 272, , 60782 +73, 260, , 60860 +73, 259, , 61013 +73, 314, , 10797 +73, 454, , 61057 +73, 282, , 7694 +73, 268, , 2379 +73, 512, , 61005 +73, 268, , 4460 +73, 298, , 60934 +73, 259, , 60801 +73, 408, , 64293 +73, 267, , 5515 +74, 292, , 60908 +74, 259, , 4493 +74, 296, , 61037 +74, 512, , 61457 +74, 474, , 61015 +74, 336, , 61032 +74, 512, , 64101 +74, 512, , 60974 +74, 280, , 10776 +74, 278, , 60858 +74, 267, , 5474 +74, 293, , 60983 +74, 408, , 61189 +74, 274, , 60826 +74, 515, , 61037 +74, 512, , 61147 +74, 437, , 60997 +74, 278, , 60853 +108736 +74, 298, , 6661 +74, 313, , 60997 +120361 +75, 329, , 61039 +75, 259, , 28984 +75, 275, , 7594 +75, 265, , 5502 +75, 540, , 61237 +75, 290, , 60882 +75, 283, , 60893 +75, 512, , 61142 +75, 1055, , 64302 +75, 443, , 61068 +75, 512, , 61357 +75, 1182, , +75, 348, , 61065 +75, 765, , 61238 +75, 749, , 61237 +75, 415, , 60993 +75, 1653, , 61571 +75, 267, , 4442 +75, 509, , 61310 +75, 316, , 61046 +76, 272, , 60869 +76, 512, , 64256 +76, 512, , 61127 +76, 750, , 61217 +76, 425, , 60987 +76, 458, , 61114 +76, 512, , 61547 +76, 285, , 5516 +76, 759, , 61068 +76, 265, , 60904 +76, 383, , 60994 +76, 388, , 61066 +76, 260, , 60832 +76, 512, , 61226 +76, 1302, , 61258 +76, 376, , 61086 +76, 349, , 60976 +76, 480, , 61147 +76, 516, , 61043 +76, 340, , 61078 +77, 512, , 61497 +77, 512, , 61153 +77, 584, , 61252 +77, 272, , 5495 +77, 276, , 60909 +77, 512, , 61152 +77, 1439, , 61209 +77, 512, , 61180 +77, 279, , 60822 +77, 328, , 61042 +77, 326, , 61022 +116032 +77, 261, , 60913 +77, 279, , 7726 +77, 294, , 64018 +77, 261, , 60841 +77, 290, , 61052 +77, 327, , 61031 +77, 331, , 61151 +77, 258, , 8633 +77, 512, , 61206 +78, 341, , 61063 +78, 270, , 60954 +78, 259, , 5556 +54884 +78, 270, , 60889 +78, 279, , 60961 +78, 265, , 4460 +78, 272, , 5570 +78, 325, , 61015 +78, 304, , 8725 +78, 461, , 61104 +78, 281, , 8781 +78, 366, , 61045 +78, 375, , 61257 +78, 1452, , 61203 +78, 273, , 6572 +78, 299, , 60933 +121845 +78, 276, , 60861 +78, 326, , 61017 +78, 270, , 61087 +78, 289, , 61186 +79, 362, , 61037 +79, 350, , 60987 +79, 268, , 60788 +79, 1230, , 61093 +79, 261, , 60889 +79, 310, , 60949 +79, 512, , 70642 +79, 487, , 61003 +79, 422, , 61061 +79, 533, , 60975 +79, 373, , 60995 +79, 451, , 61158 +79, 512, , 61125 +79, 366, , 61202 +79, 386, , 61025 +79, 512, , 61114 +79, 512, , 61106 +79, 276, , 60875 +79, 311, , 60958 +79, 789, , 61765 +80, 512, , 61284 +80, 434, , 61262 +115005 +80, 273, , 5531 +80, 322, , 64046 +80, 512, , 61170 +80, 372, , 61068 +80, 262, , 60878 +80, 512, , 61011 +80, 372, , 61095 +80, 278, , 60795 +80, 512, , 61137 +80, 291, , 60852 +100512 +80, 512, , 61115 +80, 447, , 61027 +80, 512, , 61184 +80, 447, , 61023 +143292 +80, 441, , 61292 +80, 363, , 61292 +116843 +80, 407, , 60990 +80, 291, , 8799 +81, 328, , 60966 +206293 +81, 260, , 60930 +81, 375, , 61045 +81, 338, , 60973 +81, 512, , 61555 +81, 279, , 8632 +81, 287, , 5572 +81, 289, , 6631 +81, 336, , 60970 +81, 257, , 61030 +81, 260, , 60798 +81, 268, , 60828 +81, 350, , 60998 +81, 294, , 60999 +81, 385, , 61034 +81, 312, , 60980 +81, 314, , 60967 +81, 273, , 60943 +81, 286, , 61014 +113656 +81, 458, , 61008 +82, 512, , 61449 +82, 301, , 61013 +82, 272, , 60779 +82, 512, , 61367 +82, 512, , 61330 +82, 512, , 60997 +82, 512, , 61055 +82, 512, , 61070 +82, 275, , 60851 +127295 +82, 296, , 61191 +82, 512, , 61254 +82, 451, , 64074 +82, 357, , 60976 +123407 +82, 278, , 60884 +82, 297, , 60961 +82, 351, , 60975 +82, 512, , 61673 +82, 373, , 61292 +82, 512, , 61109 +82, 512, , 61138 +83, 512, , 67746 +83, 512, , 61481 +83, 512, , 61101 +83, 419, , 61134 +122870 +83, 583, , 61052 +83, 399, , 64171 +83, 289, , 8644 +83, 434, , 61225 +83, 344, , 64032 +83, 512, , 61159 +83, 1244, , +83, 512, , 61321 +83, 512, , 61144 +83, 512, , 70368 +83, 1192, , 61274 +83, 512, , 61012 +83, 512, , 61852 +83, 512, , 61028 +83, 512, , 61489 +83, 296, , 60886 +84, 270, , 60781 +84, 512, , 61004 +84, 257, , 60771 +84, 293, , 61147 +84, 276, , 60933 +84, 279, , 60878 +84, 261, , 60860 +84, 512, , 61143 +84, 261, , 61037 +84, 447, , 67157 +84, 383, , 61249 +84, 512, , 61417 +84, 512, , 61242 +84, 512, , 61200 +84, 512, , +84, 265, , 60889 +84, 497, , 60995 +84, 261, , 60984 +122607 +84, 323, , 60971 +84, 512, , 61180 +85, 512, , 61115 +85, 512, , 61195 +85, 496, , 61095 +85, 272, , 60940 +85, 318, , 60953 +85, 321, , 60965 +85, 278, , 60811 +85, 277, , 60830 +85, 314, , 61011 +118045 +85, 282, , 60920 +85, 287, , 60899 +85, 512, , 61417 +85, 306, , 7738 +85, , , +85, 303, , 61191 +85, 277, , 60832 +85, 325, , 60976 +85, 260, , 60833 +85, 307, , 61029 +85, 512, , 61019 +86, 399, , 61023 +86, 512, , +86, 272, , 60823 +86, 512, , 61028 +86, 1533, , +86, 452, , 61070 +86, 1277, , +86, 279, , 60957 +86, 551, , +86, 512, , 60992 +86, 293, , 61037 +86, 295, , 7638 +86, 512, , +86, 353, , 61036 +86, 292, , 61031 +86, 395, , 61073 +86, 604, , 61193 +86, 303, , 60915 +86, , , +86, 512, , 64827 +87, 340, , 60967 +87, 260, , 60865 +87, 278, , 60897 +87, 503, , 61332 +87, 287, , 60839 +87, 278, , 60852 +87, 286, , 60943 +87, 512, , +87, 1334, , +87, 512, , +87, 276, , 60990 +87, 282, , 60870 +87, 284, , 60994 +87, 512, , 64284 +87, 262, , 60932 +87, 291, , 61037 +87, 375, , 64172 +87, 326, , 61047 +87, 292, , 60923 +87, 1243, , +88, 321, , 61060 +118535 +88, 270, , 61015 +88, 277, , 61099 +88, 436, , 61117 +88, 1333, , +88, 386, , 61020 +88, 335, , 61083 +88, 270, , 60927 +113956 +88, 409, , 61246 +88, 512, , +88, 276, , 60985 +114296 +88, 298, , 60952 +96795 +88, 354, , 60976 +88, 264, , 60986 +88, 289, , 60855 +88, 307, , 61234 +88, 445, , 61123 +88, 455, , 60987 +88, 512, , 61097 +88, 445, , 61201 +89, 512, , 61674 +89, 379, , 60970 +116656 +89, 270, , 60862 +89, 512, , 61097 +89, 512, , 61744 +89, 512, , 61161 +89, 512, , 61174 +89, 472, , 61143 +89, 512, , 61586 +89, 477, , 61003 +89, 338, , 61207 +89, 512, , 64386 +89, 308, , 61042 +89, 338, , 61034 +89, 288, , 60917 +89, 512, , 61088 +89, 512, , 61181 +89, 277, , 60949 +89, 353, , 61048 +89, 381, , 61060 +90, 512, , 61021 +90, 512, , 61542 +90, 1343, , +90, 512, , 61037 +90, , , +90, 264, , 60943 +90, 347, , 61237 +90, , , +90, 512, , +90, 286, , 60951 +90, 1146, , +90, 512, , +90, 261, , 60906 +90, 297, , 61098 +90, 512, , +90, 258, , 61079 +90, 274, , 60852 +90, 264, , 60999 +90, 286, , 61013 +90, 512, , +91, 512, , 67168 +91, 276, , 61007 +91, 343, , 61015 +91, 257, , 61043 +91, , , +91, 314, , 61031 +91, 373, , 61008 +91, 449, , 61050 +91, 302, , 60960 +91, 500, , 61159 +91, 463, , 61367 +91, 301, , 61034 +91, 319, , 60972 +91, 263, , 64052 +91, 384, , 61099 +91, 263, , 60917 +91, 504, , 61131 +91, 409, , 64063 +91, 270, , 60869 +91, 293, , 61033 +92, 512, , 61152 +92, 512, , +92, , , +92, 337, , 60967 +92, , , +92, 262, , 60977 +92, 308, , 61160 +92, 1174, , +92, , , +92, , , +92, 325, , 61035 +92, , , +92, 347, , 61166 +92, , , +92, 512, , 61425 +92, 512, , +92, , , +92, , , +92, 512, , +92, , , +93, 512, , +93, 468, , 61129 +93, , , +93, , , +93, 512, , 61078 +93, 512, , +93, , , +93, , , +93, 512, , +93, 365, , 61071 +93, 1463, , +93, 349, , 61031 +93, , , +93, 512, , +93, 512, , 61546 +93, 512, , +93, 421, , 61065 +93, , , +93, 512, , 61079 +93, , , +94, 464, , 61031 +94, 512, , 61178 +94, , , +94, 512, , +94, 297, , 60977 +94, , , +94, 349, , 61049 +94, 1052, , +94, 512, , +94, 307, , 61075 +94, , , +94, , , +94, , , +94, 469, , 61087 +94, , , +94, 1504, , +94, 375, , 61090 +94, 512, , +94, , , +94, , , +95, , , +95, , , +95, 288, , 61013 +95, 477, , 61073 +95, , , +95, 512, , 61004 +95, 386, , 61171 +95, 366, , 60960 +95, 512, , 61138 +95, , , +95, 512, , 61002 +95, , , +95, 428, , 61337 +95, 512, , 61173 +95, 1234, , +95, 261, , 61121 +95, 303, , 60990 +95, 454, , 64067 +95, 376, , 61080 +95, 414, , 61304 +96, 289, , 60972 +96, 512, , 61191 +96, , , +96, , , +96, , , +96, 512, , 61022 +96, 339, , 61060 +96, 512, , +96, 260, , 60942 +96, 293, , 60959 +96, , , +96, 352, , 60975 +96, 287, , 61022 +96, 512, , 64099 +96, 416, , 60995 +96, , , +96, 512, , 61013 +96, 290, , 60993 +96, 512, , +96, 512, , 61183 +97, 512, , 61003 +97, 379, , 61241 +97, 501, , 61113 +97, , , +97, 512, , 60993 +97, , , +97, 512, , 61532 +97, , , +97, , , +97, , , +97, 449, , 60983 +97, 318, , 60990 +97, , , +97, , , +97, 369, , 61058 +97, , , +97, 512, , +97, 372, , 61041 +97, 512, , 61032 +97, , , +98, , , +98, , , +98, , , +98, , , +98, 512, , 61309 +98, , , +98, 502, , 61163 +98, , , +98, , , +98, , , +98, , , +98, , , +98, 512, , 61146 +98, , , +98, 512, , 61179 +98, 512, , 60985 +98, , , +98, 512, , 61121 +98, , , +98, 512, , 61054 +99, , , +99, , , +99, , , +99, , , +99, , , +99, , , +99, , , +99, , , +99, , , +99, , , +99, 512, , +99, 1297, , +99, , , +99, , , +99, , , +99, 512, , +99, , , +99, , , +99, 512, , +99, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , diff --git a/count_reflection.csv b/count_reflection.csv new file mode 100644 index 0000000..0aac23a --- /dev/null +++ b/count_reflection.csv @@ -0,0 +1,2281 @@ +# of invocation until it gets C1/OSR/C2 compiled +Graph size, C1, OSR, C2 +10, 259, , 36183 +10, 260, , 31723 +10, 282, 40578, 57736 +10, 480, , 64457 +10, 289, , 25947 +10, 505, , 67226 +10, 1039, , 67129 +10, 1432, , 67333 +10, 895, , 67174 +10, 316, , 62044 +10, 298, , 59896 +10, 936, , 70245 +10, 358, , 52632 +10, 294, , 30740 +10, 258, 26560, 37975 +10, 454, , 67527 +10, 315, 40886, 55466 +10, 408, , 63986 +10, 500, , 67165 +10, 319, , 60087 +11, 297, , 47806 +11, 480, , 60981 +11, 1145, , 67862 +11, 381, , 64042 +11, 441, , 66089 +11, 983, , 70228 +11, 302, , 50607 +11, 785, , 67673 +11, 902, , 67639 +11, 833, , 64199 +11, 1071, , 70228 +11, 470, , 70538 +11, 1033, , 67862 +11, 1300, , 70251 +11, 300, , 62848 +11, 1198, , 67094 +11, 858, , 64186 +11, 875, , 70744 +11, 842, , 70312 +11, 306, , 69991 +12, 558, , 70194 +12, 406, , 56818 +12, 549, , 67629 +12, 512, , 64149 +12, 895, , 67665 +12, 983, , 67145 +12, 894, , 67538 +12, 995, , 67866 +12, 441, , 70543 +12, 1048, , 67148 +12, 909, , 64186 +12, 679, , 67159 +12, 397, , 67033 +12, 1012, , 64089 +12, 518, , 67127 +12, 300, , 63868 +12, 422, , 67059 +12, 369, , 64108 +12, 521, , 67116 +12, 1060, , 70833 +13, 804, , 67206 +13, 283, , 40130 +13, 381, , 67377 +13, 1075, , 61046 +13, 261, , 38474 +13, 319, , 49653 +13, 322, , 68049 +13, 316, , 67179 +13, 262, , 61144 +13, 1162, , 67171 +13, 314, , 47202 +13, 332, , 63146 +13, 298, , 42615 +13, 487, , 67134 +13, 465, , 60957 +13, 422, , 70562 +13, 906, , 67818 +13, 392, , 67322 +13, 1105, , 67740 +13, 744, , 70245 +14, 1489, , 67149 +14, 352, , 70090 +14, 327, , 66950 +14, 1153, , 70247 +14, 1859, , 67166 +14, 901, , 70216 +14, 446, , 70629 +14, 1792, , 70224 +14, 262, , 61767 +14, 945, , 67320 +14, 535, , 64613 +14, 363, , 67002 +14, 699, , 67674 +14, 352, , 64294 +14, 1709, , 67735 +14, 416, , 70627 +14, 287, , 54838 +14, 303, , 60795 +14, 592, , 67620 +14, 677, , 64642 +15, 496, , 70191 +15, 1028, , 67250 +15, 397, , 64233 +15, 417, , 67135 +15, 1255, , 70354 +15, 328, , 60814 +15, 742, , 67157 +15, 990, , 64050 +15, 392, , 67438 +15, 1379, , 70470 +15, 1020, , 61011 +15, 290, , 63836 +15, 1321, , 67176 +15, 470, , 64508 +15, 721, , 70638 +15, 512, , 67111 +15, 1004, , 70192 +15, 1057, , 70291 +15, 1043, , 64141 +15, 548, , 70190 +16, 333, , 61194 +92293 +16, 326, , 69692 +16, 480, , 64559 +16, 325, , 25962 +16, 424, , 70448 +16, 259, , 41725 +16, 419, , 67069 +16, 666, , 67235 +16, 292, 34892, 47507 +16, 296, , 52173 +16, 410, , 70161 +16, 796, , 67645 +16, 258, , 60736 +16, 411, , 67439 +16, 345, , 61872 +16, 1088, , 67144 +16, 485, , 67217 +16, 305, , 59427 +16, 257, , 62542 +16, 551, 70214, 94753 +17, 1132, , 70237 +17, 1085, , 67173 +17, 1075, , 61009 +17, 512, , 64083 +17, 951, , 67091 +17, 927, , 64155 +17, 669, , 67093 +17, 821, , 64650 +17, 309, , 40356 +17, 1258, , 70219 +17, 509, , 70678 +17, 630, , 70259 +17, 1054, , 64079 +17, 385, , 61232 +17, 1063, , 64106 +17, 289, , 63847 +17, 388, , 64337 +96465 +17, 319, , 70039 +17, 628, , 64126 +17, 876, , 70221 +18, 549, , 70628 +18, 1321, , 67284 +18, 375, , 67034 +18, 1167, , 64111 +18, 512, , 67597 +18, 1741, , 70221 +18, 876, , 61418 +18, 1367, , 70243 +18, 545, , 67142 +18, 398, , 70633 +18, 1278, , 70412 +18, 502, , 67505 +18, 1390, , 70920 +18, 322, , 69755 +18, 341, , 51882 +18, 1209, , 70525 +18, 1219, , 64075 +18, 337, , 48656 +18, 313, , 70678 +18, 1554, , 67240 +19, 699, , 70411 +19, 662, , 67130 +19, 914, , 67168 +19, 854, , 70289 +19, 393, , 72013 +19, 630, , 64510 +19, 512, , 67289 +19, 318, , 64180 +19, 320, , 51560 +19, 1339, , 67319 +19, 386, , 67375 +19, 322, , 68931 +19, 629, , 64090 +19, 676, , 73283 +19, 663, , 67580 +19, 484, , 67431 +19, 495, , 70604 +19, 543, , 67118 +19, 906, , 67280 +19, 627, , 64195 +20, 620, , 67189 +20, 411, , 64019 +20, 2674, , 67455 +20, 982, , 67114 +20, 437, , 70486 +20, 650, , 70646 +20, 712, , 67795 +20, 1103, , 67957 +20, 394, , 64006 +20, 719, , 67830 +20, 490, , 64519 +20, 335, , 66983 +105116 +20, 874, , 68093 +20, 399, , 67467 +20, 461, , 67530 +20, 723, , 67739 +20, 807, , 67265 +20, 932, , 67148 +20, 929, , 64075 +20, 1311, , 70871 +21, 352, , 67106 +21, 512, , 67130 +21, 484, , 67126 +21, 784, , 70403 +21, 965, , 70226 +21, 735, , 67753 +21, 286, , 64101 +21, 298, , 66943 +21, 512, , 70182 +21, 331, , 61103 +21, 998, , 64129 +21, 387, , 67286 +21, 538, , 70857 +21, 322, , 64151 +21, 356, , 67028 +21, 888, , 64911 +21, 1368, , 67261 +21, 401, , 67314 +21, 1269, , 64768 +21, 406, , 70198 +22, 1144, , 67202 +22, 502, , 64533 +22, 322, , 65422 +22, 1097, , 67748 +22, 261, , 59830 +22, 991, , 67224 +22, 746, , 64115 +22, 347, , 68355 +22, 1017, , 70210 +22, 352, , 70076 +22, 1370, , 70400 +22, 360, , 64160 +22, 427, , 67105 +102400 +22, 262, , 66900 +22, 426, , 60937 +22, 286, , 23855 +22, 301, , 63968 +22, 288, , 66919 +22, 400, , 64011 +22, 390, , 67143 +23, 550, , 64069 +23, 664, , 67747 +23, 489, , 67447 +23, 476, , 67133 +23, 450, , 67265 +23, 1013, , 67605 +23, 919, , 64731 +23, 591, , 67680 +23, 806, , 70694 +23, 1523, , 70338 +23, 671, , 67744 +23, 512, , 64074 +23, 504, , 70219 +23, 374, , 67281 +23, 293, , 75744 +23, 512, , 64416 +23, 273, , 58161 +87730 +23, 356, , 78131 +23, 265, , 60949 +23, 491, , 70208 +24, 809, , 67147 +24, 259, , 46556 +24, 512, , 67132 +24, 262, , 69097 +24, 312, , 70324 +24, 292, , 63788 +24, 705, , 70221 +24, 289, , 65960 +24, 525, , 70660 +24, 329, , 60828 +24, 512, , 67126 +24, 506, , 70208 +24, 368, , 67386 +24, 325, , 61071 +24, 428, , 64456 +24, 472, , 67109 +24, 324, , 67182 +24, 815, , 67321 +24, 287, , 68630 +24, 748, , 67638 +25, 427, , 67108 +25, 292, , 64118 +25, 411, , 67400 +25, 1092, , 70851 +25, 390, , 67067 +25, 872, , 67163 +25, 360, , 67384 +25, 1125, , 70538 +25, 827, , 67179 +25, 825, , 67185 +25, 1224, , 67287 +25, 293, , 69484 +25, 1376, , 64154 +25, 282, , 71600 +25, 1578, , 70842 +25, 366, , 67378 +25, 619, , 67416 +25, 293, , 64276 +25, 305, , 72676 +25, 512, , 67111 +26, 260, , 66460 +26, 298, , 64179 +26, 1151, , 67392 +26, 300, , 70265 +26, 399, , 70517 +26, 825, , 67170 +26, 597, , 67132 +26, 1330, , 67239 +26, 262, , 64068 +26, 512, , 67132 +100625 +26, 295, , 64097 +26, 339, , 67157 +26, 419, , 70177 +26, 291, , 64178 +26, 1077, , 67290 +26, 454, , 67466 +26, 261, , 61975 +26, 512, , 67141 +26, 1572, , 70471 +26, 471, , 67409 +27, 459, , 70481 +27, 626, , 67126 +27, 317, , 61004 +27, 594, , 70727 +27, 659, , 70190 +27, 661, , 67137 +27, 344, , 67285 +27, 1283, , 67212 +27, 318, , 64196 +27, 1341, , 67132 +27, 290, , 67129 +27, 512, , 67579 +27, 964, , 64356 +27, 869, , 64481 +27, 1091, , 67419 +27, 807, , 67811 +27, 1345, , 67278 +27, 1321, , 67177 +27, 363, , 64278 +27, 339, , 70489 +28, 427, , 70187 +28, 899, , 64507 +28, 809, , 70201 +28, 442, , 67099 +28, 556, , 67135 +28, 652, , 61048 +28, 384, , 60912 +28, 1259, , 67140 +28, 628, , 64058 +28, 627, , 67624 +28, 865, , 67486 +28, 771, , 64774 +28, 261, , 66396 +28, 1142, , 67691 +28, 311, , 73899 +28, 660, , 64097 +28, 1290, , 70267 +28, 338, , 70464 +28, 723, , 61044 +28, 292, , 73521 +29, 512, , 61438 +29, 689, , 67161 +29, 1024, , 70260 +29, 907, , 67149 +29, 469, , 64054 +29, 262, , 60767 +29, 819, , 64120 +29, 344, , 52881 +29, 259, , 72874 +29, 1179, , 67172 +29, 352, , 70428 +29, 303, , 69837 +29, 788, , 67124 +29, 293, , 64122 +29, 939, , 64258 +29, 615, , 70716 +29, 318, , 69963 +29, 865, , 61137 +29, 284, , 58196 +29, 320, , 64181 +30, 342, , 67173 +30, 908, , 70282 +30, 1339, , 67221 +30, 350, , 67030 +30, 957, , 67412 +30, 290, , 64063 +30, 747, , 64634 +30, 803, , 71113 +30, 865, , 67324 +30, 300, , 64290 +30, 909, , 70242 +30, 347, , 60921 +30, 933, , 64152 +30, 292, , 66943 +30, 317, , 64189 +30, 662, , 64169 +30, 1121, , 70274 +30, 260, , 61481 +30, 438, , 67434 +30, 490, , 67324 +31, 475, , 67556 +31, 374, , 61222 +31, 408, , 67055 +31, 788, , 67224 +31, 1112, , 67174 +31, 286, , 63878 +31, 291, , 63873 +31, 259, , 49578 +31, 363, , 70094 +31, 1189, , 67170 +31, 1462, , 70216 +31, 291, , 61018 +31, 432, , 70519 +31, 668, , 70228 +31, 267, , 64185 +31, 261, , 63835 +31, 267, , 72398 +31, 510, , 64715 +31, 386, , 67076 +31, 298, , 69194 +32, 263, , 68425 +32, 440, , 67093 +32, 295, , 65920 +32, 859, , 70225 +32, 271, , 66939 +123390 +32, 278, , 41370 +32, 291, , 64157 +32, 263, , 60769 +32, 512, , 67598 +32, 813, , 67162 +32, 371, , 72938 +32, 288, , 50494 +32, 725, , 64088 +32, 349, , 67277 +32, 499, , 70215 +32, 373, , 63993 +32, 512, , 67138 +32, 261, , 79009 +32, 259, , 66488 +32, 1121, , 64086 +33, 773, , 70995 +33, 626, , 64762 +33, 286, , 59816 +33, 1305, , 70252 +33, 512, , 67131 +33, 453, , 70191 +112651 +33, 764, , 70643 +33, 430, , 64299 +33, 258, , 64112 +33, 458, , 67460 +33, 969, , 64074 +33, 449, , 67118 +33, 373, , 67051 +33, 366, , 67287 +33, 412, , 70189 +33, 775, , 67133 +33, 564, , 67144 +33, 406, , 70413 +33, 371, , 67325 +33, 838, , 67305 +34, 1048, , 70879 +34, 811, , 67143 +34, 307, , 64163 +102306 +34, 510, , 67705 +34, 301, , 67220 +34, 370, , 70161 +34, 341, , 67095 +34, 491, , 70217 +34, 313, , 64642 +34, 486, , 70632 +34, 512, , 67180 +34, 440, , 67381 +34, 398, , 67110 +34, 375, , 64012 +34, 429, , 64044 +34, 351, , 67036 +126710 +34, 259, , 65616 +34, 971, , 70282 +34, 323, , 63931 +34, 465, , 67471 +35, 512, , 64069 +35, 386, , 64377 +35, 356, , 61105 +35, 512, , 67118 +35, 772, , 70277 +35, 331, , 60934 +116158 +35, 754, , 70663 +35, 302, , 70269 +35, 839, , 67715 +35, 508, , 67255 +35, 379, , 67258 +35, 1356, , 64204 +35, 890, , 67182 +35, 769, , 70434 +35, 311, , 67248 +35, 512, , 61004 +35, 719, , 67169 +35, 261, , 67132 +35, 259, , 55642 +35, 258, , 63863 +36, 261, , 64981 +36, 370, , 63979 +36, 261, , 71682 +36, 1078, , 67263 +36, 692, , 67507 +36, 370, , 70175 +36, 341, , 10782 +42646 +36, 787, , 64102 +36, 466, , 67484 +103036 +36, 304, , 66948 +36, 512, , 64114 +36, 407, , 67090 +36, 357, , 67163 +36, 1098, , 67152 +36, 332, , 64093 +36, 273, , 67129 +36, 285, , 65136 +36, 358, , 70117 +36, 351, , 60896 +36, 512, , 67093 +37, 382, , 64353 +37, 258, , 63922 +37, 712, , 67165 +37, 341, , 67223 +37, 361, , 60933 +37, 475, , 67492 +37, 360, , 67320 +37, 263, , 71410 +37, 1297, , 67322 +37, 326, , 10031 +37, 512, , 70204 +37, 1069, , 71014 +37, 899, , 64218 +37, 261, , 63404 +37, 1234, , 67170 +37, 348, , 67015 +37, 467, , 70484 +37, 363, , 63973 +37, 461, , 64055 +37, 313, , 67324 +38, 464, , 61057 +38, 512, , 67343 +38, 372, , 64150 +38, 282, , 63874 +38, 512, , 67579 +38, 464, , 70589 +38, 283, , 50154 +38, 259, , 65120 +38, 376, , 70596 +38, 259, , 64911 +38, 290, , 67250 +38, 845, , 67246 +38, 278, , 58871 +38, 424, , 60965 +38, 279, , 72644 +121807 +38, 287, , 64107 +38, 336, , 64144 +38, 450, , 70173 +38, 398, , 67112 +100994 +38, 260, , 5580 +39, 302, , 67241 +39, 257, , 5035 +39, 444, , 67096 +39, 775, , 67324 +39, 401, , 67357 +39, 345, , 63987 +39, 384, , 67060 +39, 1091, , 67194 +39, 940, , 70186 +39, 369, , 4550 +40118 +39, 1142, , 70328 +39, 512, , 64105 +39, 362, , 67322 +39, 636, , 67337 +39, 425, , 67109 +39, 668, , 67598 +39, 512, , 64052 +39, 295, , 63163 +39, 435, , 70175 +39, 851, , 64125 +40, 281, , 63133 +40, 294, , 42732 +40, 512, , 70462 +40, 339, , 67307 +40, 450, , 64388 +40, 327, , 3469 +40, 512, , 67142 +102803 +40, 512, , 67128 +40, 672, , 70451 +40, 351, , 63974 +40, 259, , 2447 +40, 344, , 70143 +40, 469, , 67119 +40, 512, , 67157 +40, 512, , 67573 +40, 301, , 10542 +40, 544, , 70208 +40, 451, , 64395 +40, 512, , 64051 +40, 316, , 67270 +41, 595, , 67325 +41, 946, , 67162 +41, 1240, , 67299 +41, 855, , 61016 +41, 389, , 70190 +41, 728, , 64098 +41, 370, , 61074 +41, 1210, , 67767 +41, 262, , 65249 +41, 304, , 4485 +41, 310, , 67027 +41, 275, , 54272 +41, 2948, , 64119 +41, 262, , 67638 +41, 512, , 67142 +41, 338, , 70141 +41, 308, , 67180 +41, 374, , 67070 +41, 856, , 70244 +41, 259, , 2365 +42, 260, , 63508 +42, 318, , 67181 +42, 512, , 67121 +42, 314, , 4724 +42, 259, , 5893 +42, 640, , 64151 +42, 365, , 64169 +42, 824, , 70370 +42, 334, , 60907 +42, 332, , 60879 +42, 840, , 64066 +42, 373, , 64017 +42, 263, , 63856 +42, 629, , 64487 +42, 352, , 64203 +42, 300, , 63935 +42, 430, , 67114 +42, 909, , 64230 +42, 1258, , 70185 +42, 401, , 67112 +43, 458, , 64063 +43, 511, , 70196 +43, 260, , 7426 +43, 302, , 4481 +43, 892, , 70265 +43, 296, , 10127 +43, 257, , 38573 +43, 951, , 67190 +43, 280, , 67112 +43, 292, , 66005 +43, 398, , 67095 +43, 308, , 10419 +43, 442, , 67371 +43, 298, , 67038 +43, 298, , 67162 +43, 1174, , 70932 +43, 260, , 63537 +43, 286, , 7937 +43, 327, , 3822 +43, 858, , 70238 +44, 312, , 4492 +44, 512, , 64125 +44, 563, , 64632 +44, 270, , 74639 +44, 456, , 64050 +44, 512, , 67113 +44, 257, , 66461 +44, 258, , 5382 +44, 537, , 70318 +44, 615, , 67656 +44, 485, , 64573 +44, 512, , 64064 +44, 512, , 67104 +44, 458, , 70171 +44, 262, , 65304 +44, 287, , 63893 +44, 260, , 60998 +44, 1335, , 67835 +44, 279, , 62789 +44, 564, , 67578 +45, 259, , 5538 +45, 445, , 67122 +45, 288, , 61059 +45, 258, , 4395 +45, 259, , 4482 +45, 327, , 63967 +45, 1710, , 70291 +45, 294, , 10840 +45, 361, , 64009 +95978 +45, 260, , 63221 +45, 289, , 8694 +45, 512, , 67187 +45, 284, , 39374 +45, 391, , 64037 +45, 390, , 67147 +45, 512, , 64358 +45, 446, , 60972 +45, 259, , 5544 +45, 297, , 7810 +45, 283, 64102, 92572 +46, 512, , 64273 +46, 453, , 67130 +46, 345, , 64986 +46, 328, , 70140 +46, 292, , 65598 +46, 260, , 7092 +39758 +46, 733, , 67256 +46, 294, , 63915 +46, 260, , 63707 +46, 621, , 67131 +46, 404, , 67390 +46, 494, , 67114 +46, 628, , 70214 +46, 615, , 70551 +46, 615, , 64664 +46, 509, , 64067 +46, 286, , 63370 +46, 795, , 67908 +46, 401, , 64497 +46, 304, , 64140 +47, 392, , 70195 +47, 376, , 70525 +47, 736, , 67401 +47, 319, , 5540 +39698 +47, 1440, , 64132 +47, 1233, , 70284 +47, 658, , 70241 +47, 275, , 8929 +47, 394, , 64070 +47, 260, , 59334 +47, 438, , 61252 +47, 1282, , 67205 +47, 1455, , 67197 +47, 512, , 67534 +47, 674, , 67156 +47, 1396, , 67217 +47, 512, , 70786 +47, 288, , 63922 +47, 260, , 3451 +47, 385, , 64398 +48, 315, , 64002 +48, 972, , 64192 +48, 410, , 64381 +48, 301, , 67245 +141139 +48, 580, , 61007 +48, 257, , 5050 +48, 755, , 61029 +48, 512, , 67537 +48, 259, , 6751 +48, 1133, , 67175 +48, 413, , 67134 +48, 635, , 67169 +48, 388, , 10735 +48, 418, , 67407 +48, 809, , 67737 +48, 304, , 70090 +48, 545, , 67249 +48, 512, , 67120 +48, 262, , 63988 +48, 1135, , 67195 +49, 259, , 62247 +49, 261, , 66200 +49, 290, , 60852 +49, 1338, , 70652 +49, 296, , 64083 +49, 368, , 60941 +49, 289, , 9305 +49, 602, , 67150 +49, 411, , 67092 +49, 273, , 48374 +49, 288, , 3511 +49, 262, , 66972 +49, 299, , 8272 +49, 408, , 67151 +49, 259, , 2365 +49, 477, , 67481 +49, 258, , 60800 +49, 388, , 67128 +49, 375, , 70161 +49, 692, , 61533 +50, 386, , 67125 +50, 294, , 63558 +50, 1499, , 67210 +50, 905, , 67212 +50, 779, , 67169 +50, 292, , 68280 +50, 555, , 64084 +50, 419, , 67461 +50, 364, , 13371 +50, 350, , 11675 +50, 258, , 5292 +50, 443, , 67523 +50, 257, , 2348 +50, 290, , 63294 +50, 492, , 64076 +50, 486, , 64067 +50, 495, , 67137 +50, 419, , 67144 +50, 1165, , 67219 +50, 327, , 64298 +51, 440, , 64505 +51, 296, , 10465 +51, 676, , 64685 +51, 636, , 64764 +51, 258, , 59914 +51, 288, , 64094 +51, 599, , 67542 +51, 481, , 67128 +51, 764, , 61032 +51, 355, , 64322 +51, 283, , 64108 +51, 309, , 66999 +51, 414, , 67266 +51, 260, , 66224 +51, 377, , 64056 +51, 392, , 63967 +51, 1114, , 67242 +51, 650, , 67151 +51, 287, , 65083 +51, 404, , 67368 +52, 260, , 4540 +52, 355, , 64018 +52, 512, , 70639 +52, 1484, , 70268 +52, 360, , 64334 +52, 1352, , 67211 +52, 308, , 5536 +52, 434, , 67130 +52, 498, , 67593 +52, 353, , 67112 +52, 403, , 67384 +52, 1365, , 67239 +52, 388, , 60982 +52, 259, , 2355 +52, 396, , 64336 +52, 347, , 64356 +52, 271, , 75071 +52, 1139, , 67216 +52, 512, , 67345 +52, 1395, , 67214 +53, 373, , 67126 +53, 512, , 61006 +102191 +53, 430, , 64509 +53, 765, , 64836 +53, 263, , 5678 +53, 377, , 11670 +53, 327, , 70166 +53, 273, , 10093 +53, 504, , 67129 +53, 336, , 67063 +53, 437, , 61340 +127060 +53, 258, , 4006 +53, 356, , 64357 +53, 420, , 64497 +53, 402, , 67463 +53, 291, , 73087 +53, 281, , 5512 +53, 639, , 67166 +53, 440, , 67111 +53, 357, , 70417 +54, 310, , 6561 +54, 409, , 64075 +54, 260, , 8769 +54, 259, , 9558 +54, 1288, , 64139 +54, 684, , 67801 +54, 1262, , 64155 +54, 348, , 64049 +54, 1172, , 67168 +54, 555, , 67725 +54, 384, , 64065 +54, 302, , 6563 +54, 314, , 11739 +54, 1203, , 70269 +54, 263, , 63908 +54, 637, , 67653 +54, 396, , 67128 +54, 545, , 64559 +54, 512, , 64099 +54, 442, , 60981 +55, 515, , 67167 +55, 525, , 64295 +55, 700, , 67175 +55, 259, , 69930 +55, 371, , 64201 +55, 305, , 63960 +55, 426, , 61271 +95372 +55, 881, , 70560 +55, 492, , 67531 +55, 512, , 67572 +55, 356, , 67105 +55, 693, , 64141 +55, 288, , 3426 +55, 424, , 70607 +55, 384, , 64066 +55, 425, , 67150 +55, 318, , 6754 +55, 321, , 67281 +55, 393, , 70506 +128765 +55, 326, , 61100 +56, 433, , 67132 +56, 304, , 60888 +56, 512, , 67176 +56, 278, , 65361 +56, 512, , 64178 +56, 645, , 67197 +56, 421, , 67424 +56, 352, , 67111 +56, 316, , 63997 +56, 259, , 6686 +56, 512, , 64092 +56, 1120, , 70269 +56, 340, , 67253 +56, 332, , 69031 +56, 449, , 64248 +56, 306, , 67032 +56, 486, , 60961 +99720 +56, 470, , 67485 +56, 718, , 64111 +56, 817, , 70264 +57, 306, , 63988 +57, 365, , 61273 +57, 260, , 4591 +57, 628, , 67201 +57, 322, , 61073 +57, 257, , 64145 +57, 259, , 8132 +57, 332, , 64044 +57, 512, , 67473 +57, 304, , 60980 +57, 512, , 64699 +57, 376, , 60974 +57, 505, , 67555 +57, 311, , 5731 +57, 512, , 67163 +57, 512, , 70213 +57, 1301, , 64141 +57, 1088, , 70210 +57, 260, , 4549 +57, 739, , 61071 +58, 345, , 12605 +58, 262, , 70276 +58, 846, , 70272 +58, 340, , 70427 +58, 690, , 70272 +58, 512, , 67163 +58, 325, , 60933 +58, 512, , 67158 +58, 325, , 12821 +58, 258, , 2354 +58, 331, , 60930 +58, 303, , 6568 +58, 280, , 7734 +58, 264, , 9771 +58, 434, , 64070 +58, 761, , 70299 +58, 1155, , 67200 +58, 512, , 67129 +58, 737, , 64446 +58, 286, , 15056 +59, 258, , 7354 +59, 512, , 70249 +59, 346, , 63966 +59, 257, , 4149 +59, 297, , 63946 +59, 304, , 60979 +59, 637, , 67269 +59, 256, , 10241 +59, 319, , 64302 +59, 295, , 5512 +42490 +59, 358, , 64065 +59, 460, , 64082 +59, 313, , 64296 +59, 447, , 70190 +59, 512, , 64520 +59, 512, , 64095 +59, 299, , 63969 +59, 683, , 67741 +59, 336, , 64087 +100318 +59, 260, , 13188 +60, 340, , 61213 +60, 263, , 60969 +60, 407, , 67145 +60, 388, , 67131 +60, 381, , 60982 +60, 380, , 60983 +60, 392, , 70273 +60, 602, , 64109 +60, 429, , 67486 +60, 258, , 60783 +60, 257, , 3395 +60, 417, , 67341 +60, 438, , 64040 +60, 1097, , 67196 +60, 448, , 67465 +60, 1145, , 67847 +60, 1124, , 67191 +60, 384, , 67364 +60, 1318, , 67191 +60, 387, , 64062 +61, 348, , 70549 +61, 392, , 70191 +61, 301, , 8647 +61, 260, , 5572 +61, 714, , 64606 +61, 273, , 4451 +61, 388, , 64357 +61, 259, , 4520 +61, 692, , 67177 +61, 259, , 4471 +61, 301, , 67047 +61, 288, , 6548 +61, 1401, , 67238 +61, 1218, , 67337 +61, 356, , 64134 +61, 371, , 67127 +61, 512, , 64411 +61, 512, , 67694 +61, 440, , 67533 +61, 259, , 60780 +62, 478, , 64550 +62, 259, , 3477 +62, 373, , 60995 +62, 301, , 70145 +62, 371, , 60975 +62, 547, , 64101 +62, 379, , 64049 +62, 496, , 67532 +62, 425, , 64081 +62, 481, , 67147 +62, 442, , 67462 +62, 428, , 67481 +62, 262, , 64030 +62, 369, , 61036 +62, 515, , 67197 +62, 394, , 67123 +62, 463, , 64079 +62, 294, , 60894 +62, 303, , 64011 +62, 303, , 64288 +63, 749, , 67823 +63, 696, , 70850 +63, 495, , 70224 +63, 290, , 60998 +63, 398, , 70201 +63, 319, , 67074 +99568 +63, 347, , 67122 +63, 260, , 7996 +63, 264, , 12580 +63, 615, , 67212 +63, 309, , 61037 +63, 1412, , 70276 +63, 359, , 67258 +63, 259, , 60746 +63, 1423, , 64507 +63, 257, , 6650 +63, 701, , 61046 +63, 512, , 64501 +63, 330, , 67058 +63, 258, , 56643 +64, 267, , 64158 +64, 295, , 8641 +64, 286, , 4575 +64, 418, , 67130 +64, 472, , 64091 +64, 426, , 67529 +64, 580, , 64169 +64, 470, , 70219 +64, 261, , 10254 +51290 +64, 512, , 67163 +64, 297, , 5632 +64, 259, , 3392 +64, 1152, , 67379 +64, 307, , 60936 +64, 261, , 5637 +64, 327, , 8659 +64, 359, , 64147 +64, 390, , 64049 +64, 341, , 70209 +64, 298, , 12013 +65, 300, , 12384 +65, 281, , 8624 +65, 616, , 64114 +65, 512, , 67635 +65, 260, , 10371 +65, 469, , 67429 +124457 +65, 263, , 16927 +65, 512, , 67348 +65, 670, , 67179 +65, 1049, , 64114 +65, 432, , 70352 +65, 512, , 64709 +65, 338, , 60989 +65, 323, , 6626 +65, 287, , 9249 +65, 496, , 67154 +65, 348, , 67126 +65, 259, , 5542 +65, 309, , 13698 +65, 264, , 67005 +66, 413, , 64080 +66, 258, , 5911 +66, 259, , 9131 +66, 258, , 3393 +66, 327, , 60922 +66, 291, , 64181 +66, 292, , 67246 +66, 512, , 70572 +66, 343, , 64024 +66, 672, , 67139 +66, 335, , 61182 +66, 512, , 64084 +66, 259, , 5466 +66, 512, , 67159 +66, 261, , 6649 +66, 378, , 64479 +66, 289, , 5615 +66, 260, , 9623 +66, 465, , 64068 +66, 392, , 67135 +67, 640, , 64281 +67, 586, , 70275 +67, 312, , 60895 +67, 320, , 63942 +67, 1052, , 67223 +67, 512, , 67190 +67, 257, , 34093 +67, 291, , 63955 +67, 700, , 61053 +67, 512, , 64655 +67, 279, , 13029 +67, 258, , 3465 +45130 +67, 1312, , 64111 +67, 542, , 64097 +67, 262, , 16899 +67, 1358, , 67180 +67, 696, , 67201 +67, 694, , 67180 +67, 291, , 60938 +67, 942, , 70244 +68, 512, , 61028 +68, 428, , 64076 +68, 258, , 5444 +68, 284, , 5504 +68, 259, , 5492 +68, 318, , 64325 +68, 258, , 5523 +68, 322, , 9864 +68, 335, , 61076 +68, 512, , 64100 +68, 260, , 6554 +68, 512, , 67286 +68, 296, , 67104 +68, 261, , 61017 +68, 281, , 5595 +68, 386, , 67138 +68, 394, , 67125 +68, 403, , 64065 +68, 512, , 64093 +68, 294, , 63936 +69, 408, , 67211 +69, 260, , 60836 +69, 259, , 5582 +69, 512, , 64484 +69, 1038, , 67196 +69, 298, , 7706 +69, 274, , 3399 +69, 346, , 64198 +69, 284, , 7714 +69, 512, , 70259 +69, 261, , 6651 +69, 337, , 60954 +69, 260, , 7693 +69, 448, , 67113 +69, 280, , 7774 +69, 257, , 38194 +69, 375, , 64286 +69, 257, , 35120 +69, 258, , 60750 +69, 257, , 3436 +70, 393, , 67126 +70, 288, , 5606 +70, 512, , 64095 +70, 538, , 61033 +70, 274, , 4441 +70, 512, , 64094 +70, 446, , 67140 +70, 287, , 5633 +70, 295, , 6557 +70, 262, , 61036 +70, 512, , 64402 +70, 649, , 64203 +70, 308, , 8842 +70, 453, , 67162 +70, 512, , 67143 +70, 640, , 67701 +70, 262, , 63899 +70, 376, , 64034 +70, 458, , 67147 +70, 260, , 5503 +71, 305, , 67072 +71, 259, , 5575 +71, 288, , 5601 +71, 1371, , 67191 +71, 474, , 64074 +71, 512, , 64596 +71, 280, , 60845 +71, 481, , 67220 +71, 360, , 64205 +71, 286, , 60842 +71, 512, , 64086 +71, 512, , 64590 +71, 1383, , 67173 +71, 482, , 64099 +71, 299, , 61004 +71, 344, , 67409 +71, 455, , 67142 +71, 603, , 70567 +71, 512, , 64095 +71, 431, , 70648 +72, 372, , 64040 +72, 302, , 60892 +72, 284, , 60971 +72, 307, , 60980 +72, 1288, , 67171 +72, 295, , 60883 +112125 +72, 326, , 67323 +72, 402, , 67461 +72, 512, , 67163 +72, 612, , 67534 +72, 280, , 60831 +72, 1232, , 64458 +72, 258, , 3375 +72, 314, , 60964 +72, 387, , 60951 +72, 274, , 7590 +72, 449, , 67251 +72, 315, , 9934 +72, 512, , 70252 +72, 512, , 70218 +73, 512, , 67172 +73, 260, , 60791 +73, 512, , 64074 +73, 281, , 9661 +73, 410, , 10783 +73, 262, , 60866 +73, 293, , 5515 +73, 280, , 60815 +73, 512, , 64559 +73, 318, , 8665 +37967 +73, 512, , 67173 +73, 512, , 67138 +73, 259, , 5603 +73, 383, , 64064 +73, 261, , 60948 +73, 493, , 67558 +73, 261, , 60953 +73, 360, , 64048 +73, 257, , 49475 +73, 299, , 60988 +74, 305, , 7616 +74, 407, , 67125 +74, 307, , 64046 +74, 292, , 60833 +74, 342, , 64192 +74, 512, , 67653 +74, 512, , 64556 +74, 332, , 9723 +74, 288, , 63993 +74, 329, , 64316 +74, 1113, , 61049 +74, 265, , 60908 +74, 262, , 61020 +74, 609, , 70681 +74, 512, , 64091 +74, 512, , 61009 +74, 260, , 60878 +74, 259, , 61116 +90141 +74, 512, , 64066 +74, 344, , 61110 +75, 414, , 67478 +75, 257, , 3371 +75, 512, , 64765 +75, 262, , 60872 +75, 512, , 64111 +75, 259, , 6544 +75, 975, , 64104 +75, 277, , 60794 +75, 259, , 60868 +75, 502, , 60984 +75, 347, , 61086 +75, 512, , 64126 +75, 512, , 67160 +75, 257, , 60909 +75, 270, , 47441 +97857 +75, 512, , 67150 +75, 264, , 60824 +75, 512, , 67155 +75, 382, , 60959 +75, 258, , 5501 +76, 259, , 5551 +76, 262, , 60849 +76, 319, , 60969 +76, 322, , 61173 +76, 512, , 67190 +76, 280, , 7703 +76, 277, , 64082 +76, 289, , 64221 +76, 269, , 48459 +76, 295, , 7588 +76, 512, , 67185 +76, 315, , 10867 +76, 512, , 64066 +76, 390, , 67194 +76, 287, , 60798 +90997 +76, 344, , 67123 +76, 290, , 8633 +76, 512, , 64086 +76, 353, , 60975 +113659 +76, 259, , 60866 +77, 512, , 64164 +77, 359, , 67113 +77, 261, , 60829 +77, 346, , 64053 +77, 289, , 60949 +77, 367, , 64179 +77, 420, , 70570 +77, 512, , 67168 +77, 384, , 60990 +77, 398, , 64064 +77, 359, , 64352 +77, 333, , 60979 +77, 296, , 60891 +99394 +77, 512, , 67515 +77, 355, , 64230 +77, 262, , 64089 +77, 512, , 67139 +77, 512, , 64776 +77, 347, , 61120 +77, 268, , 60869 +78, 263, , 60889 +78, 306, , 64053 +78, 487, , 64067 +78, 298, , 64149 +78, 293, , 60912 +78, 343, , 9729 +78, 263, , 60871 +78, 512, , 64101 +78, 512, , 61048 +78, 512, , 70658 +78, 257, , 4464 +78, 499, , 61462 +78, 258, , 60750 +78, 321, , 64104 +78, 512, , 64105 +78, 512, , 70269 +78, 341, , 67094 +78, 512, , 67145 +78, 360, , 60989 +78, 512, , 64101 +79, 512, , 64109 +79, 299, , 10923 +79, 512, , 67201 +79, 467, , 67143 +79, 512, , 64481 +79, 475, , 67164 +79, 512, , 67909 +79, 1264, , 67664 +79, 496, , 64187 +79, 1280, , 67197 +79, 512, , 67340 +107151 +79, 414, , 61052 +79, 322, , 60932 +79, 512, , 64481 +79, 306, , 61070 +79, 317, , 60906 +79, 512, , 67170 +79, 290, , 64024 +79, 312, , 61058 +79, 438, , 64082 +80, 537, , 70235 +80, 411, , 70200 +80, 258, , 5465 +80, 413, , 60976 +80, 262, , 67144 +80, 485, , 67149 +80, 311, , 64050 +80, 512, , 64125 +80, 403, , 67135 +80, 339, , 67206 +80, 360, , 67146 +133870 +80, 260, , 7559 +80, 512, , 64728 +80, 512, , 67737 +80, 260, , 60912 +80, 316, , 60914 +80, 368, , 67137 +80, 563, , 70269 +80, 512, , 64125 +80, 387, , 60977 +116308 +81, 439, , 67116 +81, 438, , 67140 +81, 259, , 60803 +81, 512, , 64107 +81, 262, , 67264 +81, 288, , 60857 +81, 340, , 61003 +81, 329, , 63996 +81, 286, , 60897 +81, 350, , 67142 +81, 512, , 64127 +81, 337, , 64051 +81, 512, , 64148 +81, 512, , 64118 +81, 383, , 61207 +81, 268, , 60913 +81, 262, , 64005 +81, 341, , 64070 +81, 512, , 67170 +81, 360, , 64263 +82, 445, , 67415 +82, 302, , 7619 +82, 285, , 60807 +82, 338, , 70150 +82, 512, , 61023 +82, 512, , 64097 +82, 446, , 64072 +82, 396, , 67133 +82, 288, , 60850 +82, 512, , 60994 +82, 259, , 60771 +82, 288, , 70186 +82, 457, , 64065 +82, 364, , 60962 +82, 263, , 64005 +82, 424, , 67157 +82, 456, , 61181 +82, 450, , 67150 +82, 259, , 60800 +82, 262, , 64212 +83, 259, , 60937 +83, 475, , 70198 +83, 293, , 60849 +83, 263, , 10889 +83, 346, , 70224 +83, 323, , 10843 +83, 259, , 60768 +83, 512, , 67136 +83, 378, , 67265 +83, 512, , 70273 +83, 512, , 67285 +83, 345, , 64045 +83, 408, , 61145 +83, 484, , 64486 +83, 364, , 64066 +83, 301, , 60973 +83, 259, , 60771 +83, 281, , 60800 +83, 365, , 64405 +83, 431, , 67392 +84, 290, , 61170 +84, 258, , 58764 +84, 1030, , 67183 +84, 512, , 64103 +84, 336, , 67119 +84, 351, , 67379 +84, 261, , 60983 +84, 295, , 60976 +84, 468, , 64068 +84, 317, , 64123 +84, 338, , 61157 +84, 278, , 64043 +84, 259, , 60824 +84, 261, , 60951 +106670 +84, 259, , 60781 +84, 301, , 64250 +103691 +84, 263, , 60974 +120428 +84, 512, , 67151 +84, 263, , 60926 +84, 373, , 64065 +85, 438, , 70476 +85, 330, , 64036 +85, 259, , 60774 +85, 260, , 60809 +119843 +85, 259, , 60796 +114119 +85, 512, , 64557 +85, 282, , 60939 +85, 331, , 61157 +85, 261, , 60913 +85, 386, , 61010 +85, 378, , 67137 +85, 512, , 64101 +85, 315, , 61139 +85, 289, , 64040 +85, 512, , 61538 +85, 512, , 61012 +85, 684, , 67211 +85, 261, , 60874 +109053 +85, 348, , 60991 +85, 330, , 60972 +86, 1412, , +86, 1208, , +86, 453, , 64474 +86, 344, , 64057 +86, 263, , 67136 +86, 512, , 70264 +86, 407, , 70308 +86, 261, , 61015 +86, 512, , 70624 +86, 259, , 60952 +86, 512, , 67171 +86, 317, , 67347 +86, 507, , 70234 +86, 258, , 60791 +86, 1406, , +86, 260, , 60805 +98168 +86, 301, , 61046 +97786 +86, , , +86, 258, , 60798 +86, 512, , 64403 +87, 349, , 67136 +87, 298, , 60913 +87, 262, , 67308 +87, 1241, , +87, 259, , 60818 +87, 364, , 70370 +87, 295, , 60928 +87, , , +87, 282, , 67080 +108645 +87, , , +87, , , +87, 313, , 60968 +87, 512, , 64274 +87, 282, , 60806 +87, 388, , 64467 +87, , , +87, 512, , 64564 +87, 261, , 60858 +87, 380, , 60976 +87, , , +88, 415, , 60981 +88, 499, , 60996 +88, 352, , 61097 +88, 461, , 70234 +88, 304, , 67123 +88, 271, , 60961 +88, 280, , 60910 +88, 301, , 64107 +88, 259, , 60826 +88, 357, , 64333 +88, 512, , 70235 +88, 381, , 64077 +88, 402, , 64055 +122351 +88, 261, , 67101 +88, 337, , 64360 +136716 +88, 365, , 67365 +88, 335, , 61243 +125043 +88, 258, , 60873 +88, 512, , 64117 +88, 512, , 67171 +89, 512, , 64099 +89, 259, , 60974 +89, 262, , 61052 +89, 512, , 67150 +89, 286, , 64034 +89, 258, , 60835 +89, 512, , 64535 +89, 379, , 64204 +89, 262, , 64012 +89, 422, , 67143 +89, 330, , 64053 +89, 280, , 60916 +89, 355, , 67121 +89, 441, , 64058 +89, 296, , 60885 +89, 307, , 61001 +89, 512, , 67305 +89, 463, , 61414 +89, 414, , 64460 +89, 289, , 64286 +90, 327, , 61217 +90, 1326, , +90, 306, , 61214 +90, , , +90, 263, , 61084 +90, 337, , 64090 +90, 379, , 67290 +90, 389, , 64062 +90, 261, , 60879 +90, 512, , 67353 +90, 262, , 60884 +116591 +90, 264, , 67105 +90, 260, , 60921 +90, , , +90, 340, , 61187 +90, 262, , 60877 +90, 512, , 64094 +90, 326, , 64320 +90, 263, , 60974 +118268 +90, 512, , +91, 512, , 61009 +91, 259, , 60804 +91, 436, , 67133 +91, 358, , 64061 +91, 314, , 64013 +91, 421, , 70542 +91, 313, , 60961 +91, 512, , 70238 +91, 512, , 67166 +91, 365, , 70212 +91, 512, , +91, 455, , 64073 +91, 467, , 67148 +91, , , +91, 326, , 64359 +91, 453, , 61004 +91, 512, , 64072 +91, 256, , 60838 +91, 430, , 64071 +91, 417, , 64074 +92, 461, , 64068 +92, 998, , +92, 264, , 61200 +92, 708, , 70283 +92, , , +92, 512, , 67176 +92, 304, , 67408 +92, , , +92, 427, , 67119 +92, , , +92, 512, , +92, 414, , 70266 +92, 484, , 64089 +92, 1187, , +92, 1428, , +92, , , +92, 512, , 64085 +92, 447, , 64452 +92, 512, , 64193 +92, 1367, , +93, 512, , +93, 441, , 64071 +93, , , +93, 512, , +93, 1272, , +93, , , +93, 512, , 61525 +93, 288, , 61200 +93, 512, , +93, 512, , 64630 +93, , , +93, 512, , 67265 +93, 300, , 64047 +93, 264, , 61070 +101387 +93, 335, , 67115 +93, 1415, , +93, , , +93, , , +93, 347, , 61036 +93, 345, , 64330 +94, 512, , 61020 +94, 512, , +94, , , +94, , , +94, , , +94, 1353, , +94, 512, , 64555 +94, 447, , 64066 +94, 1223, , +94, 1455, , +94, 365, , 67118 +94, , , +94, , , +94, , , +94, 477, , 67124 +94, 394, , 67151 +94, , , +94, 336, , 70201 +94, 1147, , +94, 1152, , +95, 361, , 67121 +95, 512, , 64090 +95, 388, , 64465 +95, , , +95, , , +95, , , +95, 376, , 60978 +114596 +95, 379, , 61002 +95, 261, , 64018 +95, , , +95, , , +95, 512, , 64492 +95, 298, , 61112 +95, , , +95, 1241, , +95, , , +95, 475, , 64091 +95, , , +95, , , +95, 303, , 64048 +96, , , +96, 1160, , +96, 512, , +96, , , +96, 512, , 64872 +96, , , +96, , , +96, , , +96, 322, , 67174 +96, , , +96, 512, , 64125 +96, 512, , 61020 +96, 476, , 64084 +96, 316, , 60987 +96, , , +96, 473, , 61140 +96, , , +96, 262, , 60937 +112569 +96, 332, , 67126 +96, , , +97, 512, , 67164 +97, 474, , 67133 +97, 420, , 67148 +97, 512, , 67187 +97, , , +97, 313, , 64055 +97, , , +97, , , +97, 261, , 60960 +97, 264, , 64325 +97, , , +97, , , +97, , , +97, , , +97, 307, , 70447 +97, 316, , 64049 +97, , , +97, , , +97, , , +97, 469, , 67565 +98, , , +98, , , +98, , , +98, , , +98, , , +98, 512, , 64370 +98, , , +98, , , +98, 512, , +98, , , +98, 495, , 67151 +98, , , +98, 512, , 64090 +98, , , +98, , , +98, , , +98, , , +98, , , +98, , , +98, , , +99, 1139, , +99, , , +99, , , +99, 1095, , +99, , , +99, , , +99, , , +99, 512, , +99, 512, , +99, , , +99, , , +99, 1345, , +99, , , +99, 512, , +99, , , +99, 512, , +99, , , +99, , , +99, , , +99, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +100, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +101, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +102, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +103, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +104, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +105, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +106, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +107, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +108, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +109, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +110, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +111, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +112, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +113, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +114, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +115, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +116, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +117, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +118, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +119, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , +120, , , diff --git a/get_count_no_reflection.sh b/get_count_no_reflection.sh new file mode 100755 index 0000000..31e461f --- /dev/null +++ b/get_count_no_reflection.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz' +OUTPUT=./no_reflection +LANG='javabc' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +output_file=count_no_reflection.csv +error_file=count_error_no_reflection.txt + +hotspot_log=$OUTPUT/out/graph_0/prog_0_path_0/hotspot.log + +echo "# of invocation until it gets C1/OSR/C2 compiled" > $output_file +echo "Graph size, C1, OSR, C2" >> $output_file +echo "Error messages" > $error_file + +for i in {10..120} +do + echo "Starting graph size $i" + + for j in {1..20} + do + echo "Iteration: $j" + + rm -rf $OUTPUT/out + + run="python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + --dirs \ + -graphs=1 \ + -paths=1 \ + -min_size=$i \ + -max_size=$(expr $i + 1) \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON" + + eval "$run" + + log=$(grep -E "> $output_file + done +done diff --git a/get_count_reflection.sh b/get_count_reflection.sh new file mode 100755 index 0000000..a878034 --- /dev/null +++ b/get_count_reflection.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz' +OUTPUT=./reflection +LANG='javabc' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +output_file=count_reflection.csv +error_file=count_error_reflection.txt + +hotspot_log=$OUTPUT/out/graph_0/prog_0_path_0/hotspot.log + +echo "# of invocation until it gets C1/OSR/C2 compiled" > $output_file +echo "Graph size, C1, OSR, C2" >> $output_file +echo "Error messages" > $error_file + +for i in {10..120} +do + echo "Starting graph size $i" + + for j in {1..20} + do + echo "Iteration: $j" + + rm -rf $OUTPUT/out + + run="python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + --dirs \ + -graphs=1 \ + -paths=1 \ + -min_size=$i \ + -max_size=$(expr $i + 1) \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON \ + --reflection" + + eval "$run" + + log=$(grep -E "> $output_file + done +done diff --git a/get_stats_no_reflection.sh b/get_stats_no_reflection.sh new file mode 100755 index 0000000..8f03809 --- /dev/null +++ b/get_stats_no_reflection.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz' +OUTPUT=./no_reflection +LANG='javabc' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +output_file=stats_no_reflection.csv +error_file=error_no_reflection.txt + +echo "Graph size, # of C1, # of C2" > $output_file +echo "Error messages" > $error_file + +for i in {10..300} +do + echo "Starting graph size $i" + echo "Starting graph size $i" >> $error_file + + c1=0 + c2=0 + + for j in {1..20} + do + echo "Iteration: $j" + + rm -rf $OUTPUT/out + + run="python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + --dirs \ + -graphs=1 \ + -paths=1 \ + -min_size=$i \ + -max_size=$(expr $i + 1) \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON" + + log=$(eval "$run" 2>>$error_file | grep "====") + + if echo $log | grep -q "C1"; then + c1=$((c1+1)) + fi + if echo $log | grep -q "C2"; then + c2=$((c2+1)) + fi + done + + echo "$i, $c1, $c2" >> $output_file +done diff --git a/get_stats_reflection.sh b/get_stats_reflection.sh new file mode 100755 index 0000000..fec3d53 --- /dev/null +++ b/get_stats_reflection.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz' +OUTPUT=./reflection +LANG='javabc' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +output_file=stats_reflection.csv +error_file=error_reflection.txt + +echo "Graph size, # of C1, # of C2" > $output_file +echo "Error messages" > $error_file + +for i in {10..300} +do + echo "Starting graph size $i" + echo "Starting graph size $i" >> $error_file + + c1=0 + c2=0 + + for j in {1..20} + do + echo "Iteration: $j" + + rm -rf $OUTPUT/out + + run="python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + --dirs \ + -graphs=1 \ + -paths=1 \ + -min_size=$i \ + -max_size=$(expr $i + 1) \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON \ + --reflection" + + log=$(eval "$run" 2>>$error_file | grep "====") + + if echo $log | grep -q "C1"; then + c1=$((c1+1)) + fi + if echo $log | grep -q "C2"; then + c2=$((c2+1)) + fi + done + + echo "$i, $c1, $c2" >> $output_file +done diff --git a/stats_no_reflection.csv b/stats_no_reflection.csv new file mode 100644 index 0000000..6fa0027 --- /dev/null +++ b/stats_no_reflection.csv @@ -0,0 +1,292 @@ +Graph size, # of C1, # of C2 +10, 20, 20 +11, 20, 20 +12, 20, 20 +13, 20, 20 +14, 20, 20 +15, 20, 20 +16, 20, 20 +17, 20, 20 +18, 20, 20 +19, 20, 20 +20, 20, 20 +21, 20, 20 +22, 20, 20 +23, 20, 20 +24, 20, 20 +25, 20, 20 +26, 20, 20 +27, 20, 20 +28, 20, 20 +29, 20, 20 +30, 20, 20 +31, 20, 20 +32, 20, 20 +33, 20, 20 +34, 20, 19 +35, 20, 20 +36, 20, 20 +37, 20, 20 +38, 20, 20 +39, 20, 20 +40, 20, 20 +41, 20, 20 +42, 20, 20 +43, 20, 20 +44, 20, 20 +45, 20, 20 +46, 20, 20 +47, 20, 20 +48, 20, 20 +49, 20, 20 +50, 20, 20 +51, 20, 20 +52, 20, 20 +53, 20, 20 +54, 20, 20 +55, 20, 20 +56, 20, 20 +57, 20, 20 +58, 20, 20 +59, 20, 20 +60, 20, 20 +61, 20, 20 +62, 20, 20 +63, 20, 20 +64, 20, 20 +65, 20, 20 +66, 20, 20 +67, 20, 20 +68, 20, 20 +69, 20, 20 +70, 20, 20 +71, 20, 20 +72, 20, 20 +73, 20, 20 +74, 20, 20 +75, 20, 20 +76, 20, 20 +77, 20, 20 +78, 20, 20 +79, 20, 19 +80, 20, 20 +81, 20, 20 +82, 20, 20 +83, 20, 20 +84, 20, 19 +85, 20, 20 +86, 20, 15 +87, 19, 16 +88, 20, 19 +89, 20, 18 +90, 19, 17 +91, 19, 19 +92, 14, 13 +93, 12, 5 +94, 14, 10 +95, 7, 7 +96, 14, 12 +97, 10, 8 +98, 6, 6 +99, 7, 0 +100, 0, 0 +101, 0, 0 +102, 0, 0 +103, 0, 0 +104, 0, 0 +105, 0, 0 +106, 0, 0 +107, 0, 0 +108, 0, 0 +109, 0, 0 +110, 0, 0 +111, 0, 0 +112, 0, 0 +113, 0, 0 +114, 0, 0 +115, 0, 0 +116, 0, 0 +117, 0, 0 +118, 0, 0 +119, 0, 0 +120, 0, 0 +121, 0, 0 +122, 0, 0 +123, 0, 0 +124, 0, 0 +125, 0, 0 +126, 0, 0 +127, 0, 0 +128, 0, 0 +129, 0, 0 +130, 0, 0 +131, 0, 0 +132, 0, 0 +133, 0, 0 +134, 0, 0 +135, 0, 0 +136, 0, 0 +137, 0, 0 +138, 0, 0 +139, 0, 0 +140, 0, 0 +141, 0, 0 +142, 0, 0 +143, 0, 0 +144, 0, 0 +145, 0, 0 +146, 0, 0 +147, 0, 0 +148, 0, 0 +149, 0, 0 +150, 0, 0 +151, 0, 0 +152, 0, 0 +153, 0, 0 +154, 0, 0 +155, 0, 0 +156, 0, 0 +157, 0, 0 +158, 0, 0 +159, 0, 0 +160, 0, 0 +161, 0, 0 +162, 0, 0 +163, 0, 0 +164, 0, 0 +165, 0, 0 +166, 0, 0 +167, 0, 0 +168, 0, 0 +169, 0, 0 +170, 0, 0 +171, 0, 0 +172, 0, 0 +173, 0, 0 +174, 0, 0 +175, 0, 0 +176, 0, 0 +177, 0, 0 +178, 0, 0 +179, 0, 0 +180, 0, 0 +181, 0, 0 +182, 0, 0 +183, 0, 0 +184, 0, 0 +185, 0, 0 +186, 0, 0 +187, 0, 0 +188, 0, 0 +189, 0, 0 +190, 0, 0 +191, 0, 0 +192, 0, 0 +193, 0, 0 +194, 0, 0 +195, 0, 0 +196, 0, 0 +197, 0, 0 +198, 0, 0 +199, 0, 0 +200, 0, 0 +201, 0, 0 +202, 0, 0 +203, 0, 0 +204, 0, 0 +205, 0, 0 +206, 0, 0 +207, 0, 0 +208, 0, 0 +209, 0, 0 +210, 0, 0 +211, 0, 0 +212, 0, 0 +213, 0, 0 +214, 0, 0 +215, 0, 0 +216, 0, 0 +217, 0, 0 +218, 0, 0 +219, 0, 0 +220, 0, 0 +221, 0, 0 +222, 0, 0 +223, 0, 0 +224, 0, 0 +225, 0, 0 +226, 0, 0 +227, 0, 0 +228, 0, 0 +229, 0, 0 +230, 0, 0 +231, 0, 0 +232, 0, 0 +233, 0, 0 +234, 0, 0 +235, 0, 0 +236, 0, 0 +237, 0, 0 +238, 0, 0 +239, 0, 0 +240, 0, 0 +241, 0, 0 +242, 0, 0 +243, 0, 0 +244, 0, 0 +245, 0, 0 +246, 0, 0 +247, 0, 0 +248, 0, 0 +249, 0, 0 +250, 0, 0 +251, 0, 0 +252, 0, 0 +253, 0, 0 +254, 0, 0 +255, 0, 0 +256, 0, 0 +257, 0, 0 +258, 0, 0 +259, 0, 0 +260, 0, 0 +261, 0, 0 +262, 0, 0 +263, 0, 0 +264, 0, 0 +265, 0, 0 +266, 0, 0 +267, 0, 0 +268, 0, 0 +269, 0, 0 +270, 0, 0 +271, 0, 0 +272, 0, 0 +273, 0, 0 +274, 0, 0 +275, 0, 0 +276, 0, 0 +277, 0, 0 +278, 0, 0 +279, 0, 0 +280, 0, 0 +281, 0, 0 +282, 0, 0 +283, 0, 0 +284, 0, 0 +285, 0, 0 +286, 0, 0 +287, 0, 0 +288, 0, 0 +289, 0, 0 +290, 0, 0 +291, 0, 0 +292, 0, 0 +293, 0, 0 +294, 0, 0 +295, 0, 0 +296, 0, 0 +297, 0, 0 +298, 0, 0 +299, 0, 0 +300, 0, 0 diff --git a/stats_reflection.csv b/stats_reflection.csv new file mode 100644 index 0000000..940c59e --- /dev/null +++ b/stats_reflection.csv @@ -0,0 +1,292 @@ +Graph size, # of C1, # of C2 +10, 20, 20 +11, 20, 20 +12, 20, 20 +13, 20, 20 +14, 20, 20 +15, 20, 20 +16, 20, 20 +17, 20, 20 +18, 20, 20 +19, 20, 20 +20, 20, 20 +21, 20, 20 +22, 20, 20 +23, 20, 20 +24, 20, 20 +25, 20, 20 +26, 20, 20 +27, 20, 20 +28, 20, 20 +29, 20, 20 +30, 20, 20 +31, 20, 20 +32, 20, 20 +33, 20, 20 +34, 20, 20 +35, 20, 20 +36, 20, 20 +37, 20, 20 +38, 20, 20 +39, 20, 20 +40, 20, 20 +41, 20, 20 +42, 20, 20 +43, 20, 20 +44, 20, 20 +45, 20, 20 +46, 20, 20 +47, 20, 20 +48, 20, 20 +49, 20, 20 +50, 20, 20 +51, 20, 20 +52, 20, 20 +53, 20, 20 +54, 20, 20 +55, 20, 20 +56, 20, 20 +57, 20, 20 +58, 20, 20 +59, 20, 20 +60, 20, 20 +61, 20, 20 +62, 20, 20 +63, 20, 20 +64, 20, 20 +65, 20, 20 +66, 20, 20 +67, 20, 20 +68, 20, 20 +69, 20, 20 +70, 20, 20 +71, 20, 20 +72, 20, 20 +73, 20, 20 +74, 20, 20 +75, 20, 20 +76, 20, 20 +77, 20, 20 +78, 20, 20 +79, 20, 19 +80, 20, 20 +81, 20, 20 +82, 20, 20 +83, 20, 20 +84, 20, 20 +85, 20, 20 +86, 18, 17 +87, 19, 18 +88, 18, 18 +89, 20, 19 +90, 19, 19 +91, 18, 17 +92, 10, 7 +93, 14, 11 +94, 13, 9 +95, 14, 8 +96, 13, 13 +97, 13, 12 +98, 5, 5 +99, 2, 0 +100, 0, 0 +101, 0, 0 +102, 0, 0 +103, 0, 0 +104, 0, 0 +105, 0, 0 +106, 0, 0 +107, 0, 0 +108, 0, 0 +109, 0, 0 +110, 0, 0 +111, 0, 0 +112, 0, 0 +113, 0, 0 +114, 0, 0 +115, 0, 0 +116, 0, 0 +117, 0, 0 +118, 0, 0 +119, 0, 0 +120, 0, 0 +121, 0, 0 +122, 0, 0 +123, 0, 0 +124, 0, 0 +125, 0, 0 +126, 0, 0 +127, 0, 0 +128, 0, 0 +129, 0, 0 +130, 0, 0 +131, 0, 0 +132, 0, 0 +133, 0, 0 +134, 0, 0 +135, 0, 0 +136, 0, 0 +137, 0, 0 +138, 0, 0 +139, 0, 0 +140, 0, 0 +141, 0, 0 +142, 0, 0 +143, 0, 0 +144, 0, 0 +145, 0, 0 +146, 0, 0 +147, 0, 0 +148, 0, 0 +149, 0, 0 +150, 0, 0 +151, 0, 0 +152, 0, 0 +153, 0, 0 +154, 0, 0 +155, 0, 0 +156, 0, 0 +157, 0, 0 +158, 0, 0 +159, 0, 0 +160, 0, 0 +161, 0, 0 +162, 0, 0 +163, 0, 0 +164, 0, 0 +165, 0, 0 +166, 0, 0 +167, 0, 0 +168, 0, 0 +169, 0, 0 +170, 0, 0 +171, 0, 0 +172, 0, 0 +173, 0, 0 +174, 0, 0 +175, 0, 0 +176, 0, 0 +177, 0, 0 +178, 0, 0 +179, 0, 0 +180, 0, 0 +181, 0, 0 +182, 0, 0 +183, 0, 0 +184, 0, 0 +185, 0, 0 +186, 0, 0 +187, 0, 0 +188, 0, 0 +189, 0, 0 +190, 0, 0 +191, 0, 0 +192, 0, 0 +193, 0, 0 +194, 0, 0 +195, 0, 0 +196, 0, 0 +197, 0, 0 +198, 0, 0 +199, 0, 0 +200, 0, 0 +201, 0, 0 +202, 0, 0 +203, 0, 0 +204, 0, 0 +205, 0, 0 +206, 0, 0 +207, 0, 0 +208, 0, 0 +209, 0, 0 +210, 0, 0 +211, 0, 0 +212, 0, 0 +213, 0, 0 +214, 0, 0 +215, 0, 0 +216, 0, 0 +217, 0, 0 +218, 0, 0 +219, 0, 0 +220, 0, 0 +221, 0, 0 +222, 0, 0 +223, 0, 0 +224, 0, 0 +225, 0, 0 +226, 0, 0 +227, 0, 0 +228, 0, 0 +229, 0, 0 +230, 0, 0 +231, 0, 0 +232, 0, 0 +233, 0, 0 +234, 0, 0 +235, 0, 0 +236, 0, 0 +237, 0, 0 +238, 0, 0 +239, 0, 0 +240, 0, 0 +241, 0, 0 +242, 0, 0 +243, 0, 0 +244, 0, 0 +245, 0, 0 +246, 0, 0 +247, 0, 0 +248, 0, 0 +249, 0, 0 +250, 0, 0 +251, 0, 0 +252, 0, 0 +253, 0, 0 +254, 0, 0 +255, 0, 0 +256, 0, 0 +257, 0, 0 +258, 0, 0 +259, 0, 0 +260, 0, 0 +261, 0, 0 +262, 0, 0 +263, 0, 0 +264, 0, 0 +265, 0, 0 +266, 0, 0 +267, 0, 0 +268, 0, 0 +269, 0, 0 +270, 0, 0 +271, 0, 0 +272, 0, 0 +273, 0, 0 +274, 0, 0 +275, 0, 0 +276, 0, 0 +277, 0, 0 +278, 0, 0 +279, 0, 0 +280, 0, 0 +281, 0, 0 +282, 0, 0 +283, 0, 0 +284, 0, 0 +285, 0, 0 +286, 0, 0 +287, 0, 0 +288, 0, 0 +289, 0, 0 +290, 0, 0 +291, 0, 0 +292, 0, 0 +293, 0, 0 +294, 0, 0 +295, 0, 0 +296, 0, 0 +297, 0, 0 +298, 0, 0 +299, 0, 0 +300, 0, 0 From 3386bab7c7e59285dc16d940d094b18c6c33b3d1 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Thu, 1 Aug 2024 21:18:55 +0100 Subject: [PATCH 05/13] New wrapper to switch paths --- Wrapper.java | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 Wrapper.java diff --git a/Wrapper.java b/Wrapper.java new file mode 100644 index 0000000..bfc4e0a --- /dev/null +++ b/Wrapper.java @@ -0,0 +1,231 @@ +import java.io.File; +import java.util.Scanner; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.lang.reflect.*; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +class Path { + String inputFilename; + int dir[]; + int actualOutput[]; + int expectedOutput[]; + int outputSize; + + Path(String inputFilename) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + this.inputFilename = inputFilename; + + // get direction size and expected output size from file + JSONParser parser = new JSONParser(); + JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(inputFilename)); + + JSONArray jsonDir = (JSONArray) jsonObject.get("dirs"); + JSONArray jsonOutput = (JSONArray) jsonObject.get("expected_output"); + + outputSize = jsonOutput.size(); + int dirSize = jsonDir.size(); + + // create arrays + dir = new int[dirSize]; + actualOutput = new int[2*outputSize]; + expectedOutput = new int[outputSize]; + + // fill arrays + int counter = 0; + for (Object o : jsonDir) { + dir[counter] = (int) (long) o; + counter++; + } + counter = 0; + for (Object o : jsonOutput) { + expectedOutput[counter] = (int) (long) o; + counter++; + } + for (int i = outputSize; i < 2*outputSize; i++) { + actualOutput[i] = -1; + } + } + + boolean compare() { + // check actual and expected path are the same + for(int i = 0; i < outputSize; i++){ + if(expectedOutput[i] != actualOutput[i]){ + return false; + } + } + + // check no overflow occurred + for(int i = outputSize; i < 2*outputSize; i++){ + if(actualOutput[i] != -1){ + return false; + } + } + + return true; + } + + void recordOutput(String fileName, boolean result) { + if (fileName == null) { + System.out.print("Expected and actual output are"); + + if(result) { + System.out.print(""); + } + else { + System.out.print(" not"); + } + + System.out.print(" the same\n"); + + System.out.print("Expected output:"); + + for(int i = 0; i < outputSize; i++){ + System.out.print(" " + expectedOutput[i]); + } + + System.out.print("\nActual output: "); + + for(int i = 0; i < 2*outputSize; i++){ + System.out.print(" " + actualOutput[i]); + } + + System.out.print("\n"); + return; + } + + try{ + FileWriter fw = new FileWriter(fileName, true); + + fw.write("Test name: " + inputFilename + "\n"); + + fw.write("Expected and actual output are"); + + if(result) { + fw.write(""); + } + else { + fw.write(" not"); + } + + fw.write(" the same\n"); + + fw.write("Expected output:"); + + for(int i = 0; i < outputSize; i++){ + fw.write(" " + expectedOutput[i]); + } + + fw.write("\n"); + + + fw.write("Actual output: "); + + for(int i = 0; i < 2*outputSize; i++){ + fw.write(" " + actualOutput[i]); + } + + fw.write("\n"); + + fw.close(); + + }catch(IOException e){ + System.out.println("Error writing results to file"); + } + } +} + +class Wrapper{ + public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + + // parse args + String inputFilenames[] = args[0].split(":"); + String outputFilename = args[1]; + String badOutputFilename = args[2]; + int nFunctionRepeats = Integer.parseInt(args[3]); + + Path paths[] = new Path[inputFilenames.length]; + + for (int i = 0; i < inputFilenames.length; i++) { + paths[i] = new Path(inputFilenames[i]); + } + + boolean result = true; + + // create class + TestCase test = new TestCase(); + + // repeat function to induce JIT + for(int i = 0; i < nFunctionRepeats; i++){ + + test.testCase(paths[0].dir, paths[0].actualOutput); + + // compare each expected and actual and write out if any are inconsistent + result = paths[0].compare(); + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); + } + + } + + // if multiple paths provided, change the path to trigger deoptimization + if (paths.length >= 2) { + for (int dir : paths[0].dir) { + System.out.print(dir + " "); + } + System.out.println(); + for (int dir : paths[1].dir) { + System.out.print(dir + " "); + } + System.out.println(); + + System.out.println("Running different path"); + + test.testCase(paths[1].dir, paths[1].actualOutput); + + // compare each expected and actual and write out if any are inconsistent + result = paths[1].compare(); + + // record all output + paths[1].recordOutput(outputFilename, result); + + // record bad output in separate file + if (!result){ + paths[1].recordOutput(badOutputFilename, result); + } + + // print outcomes + paths[1].recordOutput(null, result); + } else { + // compare final expected and actual + result = paths[0].compare(); + + // record all output + paths[0].recordOutput(outputFilename, result); + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); + } + + // print outcomes + paths[0].recordOutput(null, result); + } + + + + if(result) { + System.exit(0); + } + + System.exit(1); + + } +} From a557b297079c27ee7a65e3fdd80f5157a3b97cb6 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Wed, 7 Aug 2024 17:45:54 +0100 Subject: [PATCH 06/13] Finalized wrapper to change paths --- Wrapper.java | 231 ---------------- run_template.sh | 6 +- src/fuzzflesh/__main__.py | 77 +++++- src/fuzzflesh/harness/javabc/javabc_runner.py | 60 ++++- src/fuzzflesh/wrappers/Wrapper.java | 254 +++++++++++------- .../wrappers/WrapperNoReflection.java | 251 ++++++++++------- 6 files changed, 436 insertions(+), 443 deletions(-) delete mode 100644 Wrapper.java diff --git a/Wrapper.java b/Wrapper.java deleted file mode 100644 index bfc4e0a..0000000 --- a/Wrapper.java +++ /dev/null @@ -1,231 +0,0 @@ -import java.io.File; -import java.util.Scanner; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Reader; -import java.util.ArrayList; -import java.lang.reflect.*; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -class Path { - String inputFilename; - int dir[]; - int actualOutput[]; - int expectedOutput[]; - int outputSize; - - Path(String inputFilename) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { - this.inputFilename = inputFilename; - - // get direction size and expected output size from file - JSONParser parser = new JSONParser(); - JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(inputFilename)); - - JSONArray jsonDir = (JSONArray) jsonObject.get("dirs"); - JSONArray jsonOutput = (JSONArray) jsonObject.get("expected_output"); - - outputSize = jsonOutput.size(); - int dirSize = jsonDir.size(); - - // create arrays - dir = new int[dirSize]; - actualOutput = new int[2*outputSize]; - expectedOutput = new int[outputSize]; - - // fill arrays - int counter = 0; - for (Object o : jsonDir) { - dir[counter] = (int) (long) o; - counter++; - } - counter = 0; - for (Object o : jsonOutput) { - expectedOutput[counter] = (int) (long) o; - counter++; - } - for (int i = outputSize; i < 2*outputSize; i++) { - actualOutput[i] = -1; - } - } - - boolean compare() { - // check actual and expected path are the same - for(int i = 0; i < outputSize; i++){ - if(expectedOutput[i] != actualOutput[i]){ - return false; - } - } - - // check no overflow occurred - for(int i = outputSize; i < 2*outputSize; i++){ - if(actualOutput[i] != -1){ - return false; - } - } - - return true; - } - - void recordOutput(String fileName, boolean result) { - if (fileName == null) { - System.out.print("Expected and actual output are"); - - if(result) { - System.out.print(""); - } - else { - System.out.print(" not"); - } - - System.out.print(" the same\n"); - - System.out.print("Expected output:"); - - for(int i = 0; i < outputSize; i++){ - System.out.print(" " + expectedOutput[i]); - } - - System.out.print("\nActual output: "); - - for(int i = 0; i < 2*outputSize; i++){ - System.out.print(" " + actualOutput[i]); - } - - System.out.print("\n"); - return; - } - - try{ - FileWriter fw = new FileWriter(fileName, true); - - fw.write("Test name: " + inputFilename + "\n"); - - fw.write("Expected and actual output are"); - - if(result) { - fw.write(""); - } - else { - fw.write(" not"); - } - - fw.write(" the same\n"); - - fw.write("Expected output:"); - - for(int i = 0; i < outputSize; i++){ - fw.write(" " + expectedOutput[i]); - } - - fw.write("\n"); - - - fw.write("Actual output: "); - - for(int i = 0; i < 2*outputSize; i++){ - fw.write(" " + actualOutput[i]); - } - - fw.write("\n"); - - fw.close(); - - }catch(IOException e){ - System.out.println("Error writing results to file"); - } - } -} - -class Wrapper{ - public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { - - // parse args - String inputFilenames[] = args[0].split(":"); - String outputFilename = args[1]; - String badOutputFilename = args[2]; - int nFunctionRepeats = Integer.parseInt(args[3]); - - Path paths[] = new Path[inputFilenames.length]; - - for (int i = 0; i < inputFilenames.length; i++) { - paths[i] = new Path(inputFilenames[i]); - } - - boolean result = true; - - // create class - TestCase test = new TestCase(); - - // repeat function to induce JIT - for(int i = 0; i < nFunctionRepeats; i++){ - - test.testCase(paths[0].dir, paths[0].actualOutput); - - // compare each expected and actual and write out if any are inconsistent - result = paths[0].compare(); - - // record bad output in separate file - if (!result){ - paths[0].recordOutput(badOutputFilename, result); - } - - } - - // if multiple paths provided, change the path to trigger deoptimization - if (paths.length >= 2) { - for (int dir : paths[0].dir) { - System.out.print(dir + " "); - } - System.out.println(); - for (int dir : paths[1].dir) { - System.out.print(dir + " "); - } - System.out.println(); - - System.out.println("Running different path"); - - test.testCase(paths[1].dir, paths[1].actualOutput); - - // compare each expected and actual and write out if any are inconsistent - result = paths[1].compare(); - - // record all output - paths[1].recordOutput(outputFilename, result); - - // record bad output in separate file - if (!result){ - paths[1].recordOutput(badOutputFilename, result); - } - - // print outcomes - paths[1].recordOutput(null, result); - } else { - // compare final expected and actual - result = paths[0].compare(); - - // record all output - paths[0].recordOutput(outputFilename, result); - - // record bad output in separate file - if (!result){ - paths[0].recordOutput(badOutputFilename, result); - } - - // print outcomes - paths[0].recordOutput(null, result); - } - - - - if(result) { - System.exit(0); - } - - System.exit(1); - - } -} diff --git a/run_template.sh b/run_template.sh index 04bd22b..64f8e3f 100755 --- a/run_template.sh +++ b/run_template.sh @@ -5,7 +5,7 @@ NAME=$(hostname) MACHINE=${NAME%%.*} SRC='/homes/rk1923/control_flow_fleshing/src' -ACTION='fuzz' +ACTION='fuzz_with_changing_paths' # OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} OUTPUT=./output LANG='javabc' @@ -23,11 +23,11 @@ mkdir -p $OUTPUT python3 -m fuzzflesh \ $ACTION \ -base=$OUTPUT \ - -graphs=1 \ + -graphs=1000000000 \ -paths=2 \ -min_size=3 \ -max_size=100 \ - --no_tidy \ + --tidy \ $LANG \ $COMPILER \ $JVM \ diff --git a/src/fuzzflesh/__main__.py b/src/fuzzflesh/__main__.py index c9c0ac1..ca887be 100644 --- a/src/fuzzflesh/__main__.py +++ b/src/fuzzflesh/__main__.py @@ -20,7 +20,7 @@ def main(): parser = argparse.ArgumentParser() # Common parser args - parser.add_argument("action", choices=['gen', 'run', 'fuzz'], + parser.add_argument("action", choices=['gen', 'run', 'fuzz', 'fuzz_with_changing_paths'], help='''Gen produces graphs and paths. Run runs existing graphs and paths. Fuzz combines gen and run.''') @@ -143,6 +143,15 @@ def main(): elif args.action == 'fuzz': (graph, programs, paths) = gen(args, language, graph_dir, graph_id) run(args, language, compiler, programs, paths, base_dir, graph) + + elif args.action == 'fuzz_with_changing_paths': + assert(language == Lang.JAVABC) + assert(compiler == Compiler.HOTSPOT) + + args.paths = 2 + args.dirs = False + (graph, programs, paths) = gen(args, language, graph_dir, graph_id) + run_with_changing_paths(args, language, compiler, programs, paths, base_dir, graph) def gen(args, language : Lang, graph_dir : Path, graph_id : int,) -> tuple[Path, Path, list[Path]]: @@ -150,7 +159,7 @@ def gen(args, language : Lang, graph_dir : Path, graph_id : int,) -> tuple[Path, print(f'Generating graph {graph_id}...') filepath = Path(graph_dir, f'graph_{graph_id}') - + filepath.mkdir(exist_ok=True) graph = generate_graph(min_graph_size = args.min_size, @@ -252,8 +261,70 @@ def run(args, language : Lang, compiler : Compiler, programs : list[Path], paths delete_path(path) else: - delete_program(prog, language) graph_has_failed = True + + if not graph_has_failed: + delete_program(prog, language) + + + # If no programs associated with this graph fail, then tidy up by removing the graph + if not graph_has_failed: + delete_graph(graph_path) + + +def run_with_changing_paths(args, language : Lang, compiler : Compiler, programs : list[Path], paths : list[Path], base_dir : Path, graph_path : Path): + assert(not args.dirs) + + runner = JavaBCRunner(compiler, + Path(args.jvm), + Path(args.jasmin), + Path(args.json), + base_dir, + None, + args.reflection) + + # Indicator for whether any program derived from this particular graph has failed + graph_has_failed : bool = False + + if args.dirs: + assert(len(programs)==len(paths)) + + for (i, prog) in enumerate(programs): + + # Compile + compile_result = runner.compile(program=prog) + print(f'Result: {compile_result}') + + if compile_result == RunnerReturn.COMPILATION_FAIL: + return + + # Execute a single path with a single program + # We pass the path so that the runner can compare the expected and actual result + if args.dirs: + exe_result = runner.execute(program=prog, path=paths[i]) + + print(f'Result: {exe_result}') + + if exe_result == RunnerReturn.SUCCESS and args.tidy: + delete_program(prog, language) + delete_path(path=paths[i]) + + else: + graph_has_failed = True + + # Execute multiple paths with a single program + else: + exe_result = runner.execute_with_changing_paths(program=prog, paths=paths) + + print(f'Result: {exe_result}') + + if exe_result == RunnerReturn.SUCCESS and args.tidy: + for path in paths: + delete_path(path) + delete_program(prog, language) + + else: + graph_has_failed = True # If no programs associated with this graph fail, then tidy up by removing the graph if not graph_has_failed: diff --git a/src/fuzzflesh/harness/javabc/javabc_runner.py b/src/fuzzflesh/harness/javabc/javabc_runner.py index 7c8a5b9..777d85d 100644 --- a/src/fuzzflesh/harness/javabc/javabc_runner.py +++ b/src/fuzzflesh/harness/javabc/javabc_runner.py @@ -58,8 +58,54 @@ def compile(self, program : Path) -> RunnerReturn: def execute(self, program :Path, path : Path) -> RunnerReturn: class_location = get_class_location(program) + print(str(class_location)) + print(str(program)) + return self.execute_test(program, path, class_location) + + def execute_with_changing_paths(self, program : Path, paths : list[Path]) -> RunnerReturn: + class_location = get_class_location(program) + + path = ":".join(map(str, paths)) + + if self.reflection: + exe_cmd = [f'{self.jvm}', + '-XX:+UnlockDiagnosticVMOptions', + # '-XX:CompileCommand=print,testing.TestCase::testCase', + # '-XX:+PrintCompilation', + '-XX:+LogCompilation', + f'-XX:LogFile={class_location}/hotspot.log', + '-cp', + f':{self.output}:{class_location}:{self.json_jar}', + f'testing/Wrapper', + f'testing.TestCase', + path, + f'{class_location}/output.txt', + f'{class_location}/bad_output.txt', + f'{self.n_function_repeats}', + '-XX:CompileThreshold=100'] + + else: + exe_cmd = [f'{self.jvm}', + '-XX:+UnlockDiagnosticVMOptions', + # '-XX:CompileCommand=print,TestCase.testCase', + # '-XX:+PrintCompilation', + '-XX:+LogCompilation', + f'-XX:LogFile={class_location}/hotspot.log', + '-cp', + f':{class_location}:{self.json_jar}', + 'Wrapper', + path, + f'{class_location}/output.txt', + f'{class_location}/bad_output.txt', + f'{self.n_function_repeats}', + '-XX:CompileThreshold=100'] + + result = subprocess.run(exe_cmd) + + return RunnerReturn.EXECUTION_FAIL if result.returncode != 0 else RunnerReturn.SUCCESS + def is_decompiler(self): if self.toolchain in [Compiler.CFR,Compiler.PROCYON,Compiler.FERNFLOWER]: @@ -146,9 +192,10 @@ def execute_test(self, program : Path, path : Path, class_location : Path) -> Ru if self.reflection: exe_cmd = [f'{self.jvm}', '-XX:+UnlockDiagnosticVMOptions', - '-XX:CompileCommand=print,testing.TestCase::testCase', - '-XX:+LogCompilation', - f'-XX:LogFile={class_location}/hotspot.log', + # '-XX:CompileCommand=print,testing.TestCase::testCase', + # '-XX:+PrintCompilation', + # '-XX:+LogCompilation', + # f'-XX:LogFile={class_location}/hotspot.log', '-cp', f':{self.output}:{class_location}:{self.json_jar}', f'testing/Wrapper', @@ -161,9 +208,10 @@ def execute_test(self, program : Path, path : Path, class_location : Path) -> Ru else: exe_cmd = [f'{self.jvm}', '-XX:+UnlockDiagnosticVMOptions', - '-XX:CompileCommand=print,TestCase.testCase', - '-XX:+LogCompilation', - f'-XX:LogFile={class_location}/hotspot.log', + # '-XX:CompileCommand=print,TestCase.testCase', + # '-XX:+PrintCompilation', + # '-XX:+LogCompilation', + # f'-XX:LogFile={class_location}/hotspot.log', '-cp', f':{class_location}:{self.json_jar}', 'Wrapper', diff --git a/src/fuzzflesh/wrappers/Wrapper.java b/src/fuzzflesh/wrappers/Wrapper.java index 1d5f40d..4643810 100644 --- a/src/fuzzflesh/wrappers/Wrapper.java +++ b/src/fuzzflesh/wrappers/Wrapper.java @@ -12,33 +12,30 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; -class Wrapper{ +class Path { + String inputFilename; + int dir[]; + int actualOutput[]; + int expectedOutput[]; + int outputSize; - public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { - - // parse args - String className = args[0]; - String inputFilename = args[1]; - String outputFilename = args[2]; - String badOutputFilename = args[3]; - int nFunctionRepeats = Integer.parseInt(args[4]); - - boolean result = true; + Path(String inputFilename) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + this.inputFilename = inputFilename; // get direction size and expected output size from file - JSONParser parser = new JSONParser(); + JSONParser parser = new JSONParser(); JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(inputFilename)); - JSONArray jsonDir = (JSONArray) jsonObject.get("dirs"); - JSONArray jsonOutput = (JSONArray) jsonObject.get("expected_output"); + JSONArray jsonDir = (JSONArray) jsonObject.get("dirs"); + JSONArray jsonOutput = (JSONArray) jsonObject.get("expected_output"); - int outputSize = jsonOutput.size(); - int dirSize = jsonDir.size(); + outputSize = jsonOutput.size(); + int dirSize = jsonDir.size(); // create arrays - int[] dir = new int[dirSize]; - int[] actualOutput = new int[2*outputSize]; - int[] expectedOutput = new int[outputSize]; + dir = new int[dirSize]; + actualOutput = new int[2*outputSize]; + expectedOutput = new int[outputSize]; // fill arrays int counter = 0; @@ -54,79 +51,59 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio for (int i = outputSize; i < 2*outputSize; i++) { actualOutput[i] = -1; } + } - // create class - Constructor constructor = Class.forName(className).getConstructor(); - - TestCaseInterface test = (TestCaseInterface) constructor.newInstance(); - - // repeat function to induce JIT - for(int i = 0; i < nFunctionRepeats; i++){ - test.testCase(dir, actualOutput); - - // compare each expected and actual and write out if any are inconsistent - result = compare(expectedOutput, actualOutput, outputSize); - - // record bad output in separate file - if (!result){ - recordOutput(badOutputFilename, inputFilename, result, expectedOutput, actualOutput, outputSize); + boolean compare() { + // check actual and expected path are the same + for(int i = 0; i < outputSize; i++){ + if(expectedOutput[i] != actualOutput[i]){ + return false; } } - // compare expected and actual - result = compare(expectedOutput, actualOutput, outputSize); - - // record all output - recordOutput(outputFilename, inputFilename, result, expectedOutput, actualOutput, outputSize); - - // record bad output in separate file - if (!result){ - recordOutput(badOutputFilename, inputFilename, result, expectedOutput, actualOutput, outputSize); + // check no overflow occurred + for(int i = outputSize; i < 2*outputSize; i++){ + if(actualOutput[i] != -1){ + return false; + } } - // print outcomes - System.out.print("Expected and actual output are"); - - if(result) { - System.out.print(""); - } - else { - System.out.print(" not"); - } + return true; + } - System.out.print(" the same\n"); + void recordOutput(String fileName, boolean result) { + if (fileName == null) { + System.out.print("Expected and actual output are"); - System.out.print("Expected output:"); - - for(int i = 0; i < outputSize; i++){ - System.out.print(" " + expectedOutput[i]); - } + if(result) { + System.out.print(""); + } + else { + System.out.print(" not"); + } - System.out.print("\n"); + System.out.print(" the same\n"); + System.out.print("Expected output:"); + + for(int i = 0; i < outputSize; i++){ + System.out.print(" " + expectedOutput[i]); + } - System.out.print("Actual output: "); - - for(int i = 0; i < 2*outputSize; i++){ - System.out.print(" " + actualOutput[i]); - } + System.out.print("\nActual output: "); - System.out.print("\n"); + for(int i = 0; i < 2*outputSize; i++){ + System.out.print(" " + actualOutput[i]); + } - if(result) { - System.exit(0); + System.out.print("\n"); + return; } - System.exit(1); - - } - - private static void recordOutput(String fileName, String testName, boolean result, int[] expectedOutput, int[] actualOutput, int outputSize){ - try{ FileWriter fw = new FileWriter(fileName, true); - fw.write("Test name: " + testName + "\n"); + fw.write("Test name: " + inputFilename + "\n"); fw.write("Expected and actual output are"); @@ -161,45 +138,120 @@ private static void recordOutput(String fileName, String testName, boolean resul }catch(IOException e){ System.out.println("Error writing results to file"); } - } +} - private static void setupArrays(int dirSize, int outputSize, int[] dir, int[] actualOutput, int[] expectedOutput, Scanner reader){ - - // initialise to -1 - for(int i = 0; i < 2*outputSize; i++){ - actualOutput[i] = -1; - } - - // fill arrays - for(int i = 0; i < dirSize; i++){ - dir[i] = reader.nextInt(); - } - - for(int i = 0; i < outputSize; i++){ - expectedOutput[i] = reader.nextInt(); +class Wrapper{ + + public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + + // parse args + String className = args[0]; + String inputFilenames[] = args[1].split(":"); + String outputFilename = args[2]; + String badOutputFilename = args[3]; + int nFunctionRepeats = Integer.parseInt(args[4]); + + Path paths[] = new Path[inputFilenames.length]; + + for (int i = 0; i < inputFilenames.length; i++) { + paths[i] = new Path(inputFilenames[i]); } - } + boolean result = true; + boolean success = true; + + // create class + Constructor constructor = Class.forName(className).getConstructor(); + + TestCaseInterface test = (TestCaseInterface) constructor.newInstance(); - private static boolean compare(int[] expectedOutput, int[] actualOutput, int outputSize){ + // repeat function to induce JIT + for(int i = 0; i < nFunctionRepeats; i++){ - // check actual and expected path are the same - for(int i = 0; i < outputSize; i++){ - if(expectedOutput[i] != actualOutput[i]){ - return false; + test.testCase(paths[0].dir, paths[0].actualOutput); + + // compare each expected and actual and write out if any are inconsistent + result = paths[0].compare(); + success = success && result; + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); } } - // check no overflow occurred - for(int i = outputSize; i < 2*outputSize; i++){ - if(actualOutput[i] != -1){ - return false; + // if multiple paths provided, change the path to trigger deoptimization + if (paths.length >= 2) { + System.out.println("Switching paths"); + + // repeat function to induce JIT + for(int i = 0; i < nFunctionRepeats; i++){ + + test.testCase(paths[1].dir, paths[1].actualOutput); + + // compare each expected and actual and write out if any are inconsistent + result = paths[1].compare(); + success = success && result; + + // record bad output in separate file + if (!result){ + paths[1].recordOutput(badOutputFilename, result); + } + + } + + // compare final expected and actual + result = paths[0].compare(); + success = success && result; + + // record all output + paths[0].recordOutput(outputFilename, result); + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); + } + + // print outcomes + paths[0].recordOutput(null, result); + + // compare each expected and actual and write out if any are inconsistent + result = paths[1].compare(); + success = success && result; + + // record all output + paths[1].recordOutput(outputFilename, result); + + // record bad output in separate file + if (!result){ + paths[1].recordOutput(badOutputFilename, result); + } + + // print outcomes + paths[1].recordOutput(null, result); + } else { + // compare final expected and actual + result = paths[0].compare(); + success = success && result; + + // record all output + paths[0].recordOutput(outputFilename, result); + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); } + + // print outcomes + paths[0].recordOutput(null, result); } - return true; - } + if(success) { + System.exit(0); + } + System.exit(1); + } } diff --git a/src/fuzzflesh/wrappers/WrapperNoReflection.java b/src/fuzzflesh/wrappers/WrapperNoReflection.java index a3c4382..d7eff70 100644 --- a/src/fuzzflesh/wrappers/WrapperNoReflection.java +++ b/src/fuzzflesh/wrappers/WrapperNoReflection.java @@ -11,32 +11,30 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; -class Wrapper{ +class Path { + String inputFilename; + int dir[]; + int actualOutput[]; + int expectedOutput[]; + int outputSize; - public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + Path(String inputFilename) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + this.inputFilename = inputFilename; - // parse args - String inputFilename = args[0]; - String outputFilename = args[1]; - String badOutputFilename = args[2]; - int nFunctionRepeats = Integer.parseInt(args[3]); - - boolean result = true; - // get direction size and expected output size from file - JSONParser parser = new JSONParser(); + JSONParser parser = new JSONParser(); JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(inputFilename)); - JSONArray jsonDir = (JSONArray) jsonObject.get("dirs"); - JSONArray jsonOutput = (JSONArray) jsonObject.get("expected_output"); + JSONArray jsonDir = (JSONArray) jsonObject.get("dirs"); + JSONArray jsonOutput = (JSONArray) jsonObject.get("expected_output"); - int outputSize = jsonOutput.size(); - int dirSize = jsonDir.size(); + outputSize = jsonOutput.size(); + int dirSize = jsonDir.size(); // create arrays - int[] dir = new int[dirSize]; - int[] actualOutput = new int[2*outputSize]; - int[] expectedOutput = new int[outputSize]; + dir = new int[dirSize]; + actualOutput = new int[2*outputSize]; + expectedOutput = new int[outputSize]; // fill arrays int counter = 0; @@ -52,76 +50,59 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio for (int i = outputSize; i < 2*outputSize; i++) { actualOutput[i] = -1; } + } - // create class - TestCase test = new TestCase(); - - // repeat function to induce JIT - for(int i = 0; i < nFunctionRepeats; i++){ - - test.testCase(dir, actualOutput); - - // compare each expected and actual and write out if any are inconsistent - result = compare(expectedOutput, actualOutput, outputSize); - - // record bad output in separate file - if (!result){ - recordOutput(badOutputFilename, inputFilename, result, expectedOutput, actualOutput, outputSize); + boolean compare() { + // check actual and expected path are the same + for(int i = 0; i < outputSize; i++){ + if(expectedOutput[i] != actualOutput[i]){ + return false; } - } - // compare final expected and actual - result = compare(expectedOutput, actualOutput, outputSize); - - // record all output - recordOutput(outputFilename, inputFilename, result, expectedOutput, actualOutput, outputSize); - - // record bad output in separate file - if (!result){ - recordOutput(badOutputFilename, inputFilename, result, expectedOutput, actualOutput, outputSize); + // check no overflow occurred + for(int i = outputSize; i < 2*outputSize; i++){ + if(actualOutput[i] != -1){ + return false; + } } - // print outcomes - System.out.print("Expected and actual output are"); + return true; + } - if(result) { - System.out.print(""); - } - else { - System.out.print(" not"); - } + void recordOutput(String fileName, boolean result) { + if (fileName == null) { + System.out.print("Expected and actual output are"); - System.out.print(" the same\n"); + if(result) { + System.out.print(""); + } + else { + System.out.print(" not"); + } - System.out.print("Expected output:"); - - for(int i = 0; i < outputSize; i++){ - System.out.print(" " + expectedOutput[i]); - } + System.out.print(" the same\n"); - System.out.print("\nActual output: "); + System.out.print("Expected output:"); + + for(int i = 0; i < outputSize; i++){ + System.out.print(" " + expectedOutput[i]); + } - for(int i = 0; i < 2*outputSize; i++){ - System.out.print(" " + actualOutput[i]); - } + System.out.print("\nActual output: "); - System.out.print("\n"); + for(int i = 0; i < 2*outputSize; i++){ + System.out.print(" " + actualOutput[i]); + } - if(result) { - System.exit(0); + System.out.print("\n"); + return; } - System.exit(1); - - } - - private static void recordOutput(String fileName, String testName, boolean result, int[] expectedOutput, int[] actualOutput, int outputSize){ - try{ FileWriter fw = new FileWriter(fileName, true); - fw.write("Test name: " + testName + "\n"); + fw.write("Test name: " + inputFilename + "\n"); fw.write("Expected and actual output are"); @@ -156,47 +137,119 @@ private static void recordOutput(String fileName, String testName, boolean resul }catch(IOException e){ System.out.println("Error writing results to file"); } - } +} - private static void setupArrays(int dirSize, int outputSize, int[] dir, int[] actualOutput, int[] expectedOutput, Scanner reader){ - - - // initialise to -1 - for(int i = 0; i < 2*outputSize; i++){ - actualOutput[i] = -1; - } - - // fill arrays - for(int i = 0; i < dirSize; i++){ - dir[i] = reader.nextInt(); - } - - for(int i = 0; i < outputSize; i++){ - expectedOutput[i] = reader.nextInt(); +class Wrapper{ + public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + + // parse args + String inputFilenames[] = args[0].split(":"); + String outputFilename = args[1]; + String badOutputFilename = args[2]; + int nFunctionRepeats = Integer.parseInt(args[3]); + + Path paths[] = new Path[inputFilenames.length]; + + for (int i = 0; i < inputFilenames.length; i++) { + paths[i] = new Path(inputFilenames[i]); } - - } + boolean result = true; + boolean success = true; - private static boolean compare(int[] expectedOutput, int[] actualOutput, int outputSize){ + // create class + TestCase test = new TestCase(); - // check actual and expected path are the same - for(int i = 0; i < outputSize; i++){ - if(expectedOutput[i] != actualOutput[i]){ - return false; + // repeat function to induce JIT + for(int i = 0; i < nFunctionRepeats; i++){ + + test.testCase(paths[0].dir, paths[0].actualOutput); + + // compare each expected and actual and write out if any are inconsistent + result = paths[0].compare(); + success = success && result; + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); } + } - // check no overflow occurred - for(int i = outputSize; i < 2*outputSize; i++){ - if(actualOutput[i] != -1){ - return false; + // if multiple paths provided, change the path to trigger deoptimization + if (paths.length >= 2) { + System.out.println("Switching paths"); + + // repeat function to induce JIT + for(int i = 0; i < nFunctionRepeats; i++){ + + test.testCase(paths[1].dir, paths[1].actualOutput); + + // compare each expected and actual and write out if any are inconsistent + result = paths[1].compare(); + success = success && result; + + // record bad output in separate file + if (!result){ + paths[1].recordOutput(badOutputFilename, result); + } + + } + + // compare final expected and actual + result = paths[0].compare(); + success = success && result; + + // record all output + paths[0].recordOutput(outputFilename, result); + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); + } + + // print outcomes + paths[0].recordOutput(null, result); + + // compare each expected and actual and write out if any are inconsistent + result = paths[1].compare(); + success = success && result; + + // record all output + paths[1].recordOutput(outputFilename, result); + + // record bad output in separate file + if (!result){ + paths[1].recordOutput(badOutputFilename, result); + } + + // print outcomes + paths[1].recordOutput(null, result); + } else { + // compare final expected and actual + result = paths[0].compare(); + success = success && result; + + // record all output + paths[0].recordOutput(outputFilename, result); + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); } + + // print outcomes + paths[0].recordOutput(null, result); } - return true; - } + + + if(success) { + System.exit(0); + } + System.exit(1); + } } From 3c403a232dd9c97aac4d81a19b69b1bba1e78612 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Wed, 28 Aug 2024 15:17:27 +0100 Subject: [PATCH 07/13] Created java fuzzer --- .gitignore | 1 - src/fuzzflesh/__main__.py | 80 ++++- src/fuzzflesh/common/utils.py | 3 + src/fuzzflesh/harness/java/__init__.py | 0 src/fuzzflesh/harness/java/java_runner.py | 291 ++++++++++++++++++ src/fuzzflesh/harness/javabc/javabc_runner.py | 20 +- .../program_generator/java/__init__.py | 0 .../program_generator/java/java_generator.py | 213 +++++++++++++ 8 files changed, 588 insertions(+), 20 deletions(-) create mode 100644 src/fuzzflesh/harness/java/__init__.py create mode 100644 src/fuzzflesh/harness/java/java_runner.py create mode 100644 src/fuzzflesh/program_generator/java/__init__.py create mode 100644 src/fuzzflesh/program_generator/java/java_generator.py diff --git a/.gitignore b/.gitignore index bbac347..27d2d8c 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,6 @@ venv/ __pycache__/ _old/ fuzzing*/ -java/ jasmin/ work/ evaluation/test/ diff --git a/src/fuzzflesh/__main__.py b/src/fuzzflesh/__main__.py index ca887be..64aa0b2 100644 --- a/src/fuzzflesh/__main__.py +++ b/src/fuzzflesh/__main__.py @@ -8,15 +8,17 @@ from fuzzflesh.common.utils import Lang, Compiler, Program, RunnerReturn from fuzzflesh.graph_generator.generator import generate_graph from fuzzflesh.program_generator.flesher import ProgramFlesher +from fuzzflesh.program_generator.java.java_generator import JavaProgramGenerator from fuzzflesh.program_generator.javabc.javabc_generator import JavaBCProgramGenerator from fuzzflesh.program_generator.c.c_generator import CProgramGenerator from fuzzflesh.harness.runner import Runner +from fuzzflesh.harness.java.java_runner import JavaRunner from fuzzflesh.harness.javabc.javabc_runner import JavaBCRunner from fuzzflesh.harness.c.c_runner import CRunner from fuzzflesh.cfg.CFG import CFG, Route -def main(): +def main(): parser = argparse.ArgumentParser() # Common parser args @@ -112,6 +114,26 @@ def main(): default = None, help = 'Path to decompiler under test.') + # Java parser args + java_parser = subparsers.add_parser('java', + help='Java bytecode help') + java_parser.add_argument("compiler", + choices=['cfr','fernflower','procyon','hotspot','graalvm'], + help='Compiler / decompiler toolchain under test.') + java_parser.add_argument("jvm", + type=str, + help="Path to JVM to be used") + java_parser.add_argument("json", + type=str, + help="Path to json simple jar") + java_parser.add_argument("-compiler_path", + default = None, + type=str, + help="Path to the (de)compiler under test. Not required for testing JIT compiler e.g. HotSpot where the software under test is in the JVM path") + java_parser.add_argument("--reflection", + action=argparse.BooleanOptionalAction, + help='Use reflection instead of static compilation.') + args = parser.parse_args() language : Lang = Lang[args.language.upper()] @@ -145,11 +167,11 @@ def main(): run(args, language, compiler, programs, paths, base_dir, graph) elif args.action == 'fuzz_with_changing_paths': - assert(language == Lang.JAVABC) + assert(language == Lang.JAVABC or language == Lang.JAVA) assert(compiler == Compiler.HOTSPOT) + assert(args.paths >= 2) - args.paths = 2 - args.dirs = False + args.dirs = False (graph, programs, paths) = gen(args, language, graph_dir, graph_id) run_with_changing_paths(args, language, compiler, programs, paths, base_dir, graph) @@ -275,13 +297,21 @@ def run(args, language : Lang, compiler : Compiler, programs : list[Path], paths def run_with_changing_paths(args, language : Lang, compiler : Compiler, programs : list[Path], paths : list[Path], base_dir : Path, graph_path : Path): assert(not args.dirs) - runner = JavaBCRunner(compiler, - Path(args.jvm), - Path(args.jasmin), - Path(args.json), - base_dir, - None, - args.reflection) + if (language == Lang.JAVABC): + runner = JavaBCRunner(compiler, + Path(args.jvm), + Path(args.jasmin), + Path(args.json), + base_dir, + None, + args.reflection) + else: + runner = JavaRunner(compiler, + Path(args.jvm), + Path(args.json), + base_dir, + None, + args.reflection) # Indicator for whether any program derived from this particular graph has failed graph_has_failed : bool = False @@ -296,6 +326,7 @@ def run_with_changing_paths(args, language : Lang, compiler : Compiler, programs print(f'Result: {compile_result}') if compile_result == RunnerReturn.COMPILATION_FAIL: + log(compile_result) return # Execute a single path with a single program @@ -317,6 +348,8 @@ def run_with_changing_paths(args, language : Lang, compiler : Compiler, programs exe_result = runner.execute_with_changing_paths(program=prog, paths=paths) print(f'Result: {exe_result}') + if exe_result != RunnerReturn.SUCCESS: + log(exe_result) if exe_result == RunnerReturn.SUCCESS and args.tidy: for path in paths: @@ -346,6 +379,13 @@ def delete_program(program : Path, language : Lang): case Lang.C: cmd = ['rm', '-f', f'{str(program.parent)}/{str(program.stem)}*'] + case Lang.JAVA: + cmd = ['rm', '-rf', f'{str(program.parent)}/{str(program.stem)}'] + result = subprocess.run(cmd) + + cmd = ['rm', '-rf', f'{str(program.parent)}/{str(program.stem)}.java'] + result = subprocess.run(cmd) + def delete_graph(graph : Path): ''' Deletes graph and graph folder @@ -366,6 +406,8 @@ def create_folders(args, base_dir : Path, language : Lang, wrapper_dir : Path) - return create_javabc_folders(base_dir, args.reflection, wrapper_dir) case Lang.C: return create_c_folders(base_dir, wrapper_dir) + case Lang.JAVA: + return create_javabc_folders(base_dir, args.reflection, wrapper_dir) return False @@ -421,6 +463,9 @@ def get_flesher(args, language : Lang, cfg : CFG) -> ProgramFlesher: case Lang.C: return CProgramGenerator(cfg, args.dirs) + + case Lang.JAVA: + return JavaProgramGenerator(cfg, args.dirs, args.reflection) return None @@ -444,6 +489,14 @@ def get_runner(args, language : Lang, compiler : Compiler, base_dir : Path) -> R base_dir, Path(args.include_path), args.dirs) + case Lang.JAVA: + path = Path(args.compiler_path) if compiler != Compiler.HOTSPOT else None + return JavaRunner(compiler, + Path(args.jvm), + Path(args.json), + base_dir, + path, + args.reflection) return None def paths_to_dict(all_paths : list[Route]) -> dict: @@ -467,5 +520,10 @@ def get_compiler(compiler : str) -> Compiler: else: return Compiler[compiler.upper()] +def log(result: RunnerReturn): + with open('/vol/bitbucket/rk1923/UROP/outputlog.txt', 'a') as file: + file.write(f"Result: {result}\n") + + if __name__ == "__main__": main() diff --git a/src/fuzzflesh/common/utils.py b/src/fuzzflesh/common/utils.py index 6f02faa..261ebd7 100644 --- a/src/fuzzflesh/common/utils.py +++ b/src/fuzzflesh/common/utils.py @@ -4,6 +4,7 @@ class Lang(Enum): JAVABC = 1 C = 2 + JAVA = 3 class Compiler(Enum): CFR = 1 @@ -54,6 +55,8 @@ def get_extension(self) -> str: return '.j' case Lang.C: return '.c' + case Lang.JAVA: + return '.java' case _ : return '.txt' diff --git a/src/fuzzflesh/harness/java/__init__.py b/src/fuzzflesh/harness/java/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/fuzzflesh/harness/java/java_runner.py b/src/fuzzflesh/harness/java/java_runner.py new file mode 100644 index 0000000..44434ba --- /dev/null +++ b/src/fuzzflesh/harness/java/java_runner.py @@ -0,0 +1,291 @@ +import subprocess +from pathlib import Path + +from fuzzflesh.harness.runner import Runner +from fuzzflesh.common.utils import Compiler, Lang, RunnerReturn + +def get_class_location(program : Path) -> str: + return f'{str(program.parent)}/{str(program.stem)}' + +class JavaRunner(Runner): + + def __init__(self, + _toolchain : Compiler, + _jvm : Path, + _json : Path, + _output : Path, + _compiler_path : Path, + _reflection : bool): + super(Runner, self).__init__() + self.compiler_name : Compiler = _toolchain + self.compiler_path : Path = None + self.output : Path = _output + self.jvm : Path = Path(_jvm, 'java') + self.javac : Path = Path(_jvm, 'javac') + self.json_jar : Path = Path(_json) + self.wrapper : Path = Path(_output, 'testing/Wrapper.java') if _reflection else Path(_output,'Wrapper.java') + self.interface : Path = Path(_output, 'testing/TestCaseInterface.java') + self.n_function_repeats : int = 300000 + self.reflection : bool = _reflection + + @property + def language(self): + return Lang.JAVA + + @property + def toolchain(self): + return self.compiler_name + + def compile(self, program : Path) -> RunnerReturn: + + class_location = get_class_location(program) + + if self.is_decompiler(): + + # We compile, decompile, and re-compile the program + print('Compiling...') + self.compile_test(program) + print('Decompiling...') + self.decompile_test(Path(class_location,'TestCase.class')) + print('Recompiling...') + self.recompile_test(Path(class_location,'TestCase.java')) + + else: + print('Compiling...') + return self.compile_test(program) + + def execute(self, program :Path, path : Path) -> RunnerReturn: + class_location = get_class_location(program) + + return self.execute_test(program, path, class_location) + + def execute_with_changing_paths(self, program : Path, paths : list[Path]) -> RunnerReturn: + class_location = get_class_location(program) + + path = ":".join(map(str, paths)) + + if self.reflection: + exe_cmd = [f'{self.jvm}', + '-XX:+UnlockDiagnosticVMOptions', + # '-XX:CompileCommand=print,testing.TestCase::testCase', + # '-XX:+PrintCompilation', + # '-XX:+LogCompilation', + # f'-XX:LogFile={class_location}/hotspot.log', + '-cp', + f':{self.output}:{class_location}:{self.json_jar}', + f'testing/Wrapper', + f'testing.TestCase', + path, + f'{class_location}/output.txt', + f'{class_location}/bad_output.txt', + f'{self.n_function_repeats}', + '-XX:CompileThreshold=100'] + + else: + exe_cmd = [f'{self.jvm}', + # '-Dgraal.PrintCompilation=true', + # '-Djdk.graal.Dump=:1', + # f'-Dgraal.LogFile={class_location}/graal.log', + + '-XX:+UnlockDiagnosticVMOptions', + # # '-XX:CompileCommand=print,TestCase::testCase', + # '-XX:+PrintAssembly', + # '-XX:+PrintCompilation', + # '-XX:+LogCompilation', + # f'-XX:LogFile={class_location}/hotspot.log', + '-cp', + f':{class_location}:{self.json_jar}', + 'Wrapper', + path, + f'{class_location}/output.txt', + f'{class_location}/bad_output.txt', + f'{self.n_function_repeats}', + # '-XX:CompileThreshold=100' + ] + + result = subprocess.run(exe_cmd) + + return RunnerReturn.EXECUTION_FAIL if result.returncode != 0 else RunnerReturn.SUCCESS + + + def is_decompiler(self): + if self.toolchain in [Compiler.CFR,Compiler.PROCYON,Compiler.FERNFLOWER]: + return True + + return False + + def compile_test(self, program : Path) -> int: + + class_location = f'{str(program.parent)}/{str(program.stem)}' + + if self.reflection: + return self.compile_test_with_reflection(program, class_location) + + return self.compile_test_without_reflection(program, class_location) + + def compile_test_without_reflection(self, program : Path, class_location : Path) -> RunnerReturn: + + compile_test_result = self.compile_testcase(program, class_location) + + if compile_test_result != 0: + return RunnerReturn.COMPILATION_FAIL + + compile_wrapper_cmd = [str(self.javac), + '-cp', + f':{class_location}:{self.json_jar}', + str(self.wrapper), + '-d', + class_location] + + compile_wrapper_result = subprocess.run(compile_wrapper_cmd) + + if compile_wrapper_result.returncode != 0: + return RunnerReturn.COMPILATION_FAIL + + return RunnerReturn.SUCCESS + + def compile_test_with_reflection(self, program: Path, class_location : Path) -> RunnerReturn: + + interface_cmd = [f'{self.javac}', + f'{self.interface}'] + + interface_result = subprocess.run(interface_cmd) + + compile_test_result = self.compile_testcase(program, class_location) + + if compile_test_result != 0: + return RunnerReturn.COMPILATION_FAIL + + if interface_result.returncode != 0: + print('Interface compilation failed!') + return interface_result.returncode + + wrapper_cmd = [f'{self.javac}', + '-cp', + f':{self.output}:{self.json_jar}', + f'{self.wrapper}'] + + wrapper_result = subprocess.run(wrapper_cmd) + + if wrapper_result.returncode != 0: + print('Wrapper compilation failed!') + return wrapper_result.returncode + + return wrapper_result.returncode + + def compile_testcase(self, program : Path, testcase_location : Path) -> int: + + class_location = f'{str(program.parent)}/{str(program.stem)}' + + compile_test_cmd = [f'{self.javac}', + '-cp', + f'{self.output}', + str(program), + '-d', + str(testcase_location)] + + compile_test_result = subprocess.run(compile_test_cmd) + + return compile_test_result.returncode + + def execute_test(self, program : Path, path : Path, class_location : Path) -> RunnerReturn: + + if self.reflection: + exe_cmd = [f'{self.jvm}', + '-XX:+UnlockDiagnosticVMOptions', + # '-XX:CompileCommand=print,testing.TestCase::testCase', + # '-XX:+PrintCompilation', + # '-XX:+LogCompilation', + # f'-XX:LogFile={class_location}/hotspot.log', + '-cp', + f':{self.output}:{class_location}:{self.json_jar}', + f'testing/Wrapper', + f'testing.TestCase', + str(path), + f'{class_location}/output.txt', + f'{class_location}/bad_output.txt', + f'{self.n_function_repeats}', + '-XX:CompileThreshold=100'] + else: + exe_cmd = [f'{self.jvm}', + '-XX:+UnlockDiagnosticVMOptions', + # '-XX:CompileCommand=print,TestCase.testCase', + '-XX:+PrintCompilation', + # '-XX:+LogCompilation', + # f'-XX:LogFile={class_location}/hotspot.log', + '-cp', + f':{class_location}:{self.json_jar}', + 'Wrapper', + str(path), + f'{class_location}/output.txt', + f'{class_location}/bad_output.txt', + f'{self.n_function_repeats}', + '-XX:CompileThreshold=100'] + + result = subprocess.run(exe_cmd) + + return RunnerReturn.EXECUTION_FAIL if result.returncode != 0 else RunnerReturn.SUCCESS + + def decompile_test(self, class_file : Path) -> RunnerReturn: + + outputdir = str(class_file.parent) + + # decompilation syntax varies depending on which decompiler toolchain is used + + if self.compiler_name == Compiler.CFR: + + decompile_cmd = [f'{self.jvm}', + '-jar', + str(self.compiler_path), + '--outputdir', + outputdir, + str(class_file)] + + elif self.compiler_name == Compiler.FERNFLOWER: + + decompile_cmd = [str(self.jvm), + '-jar', + str(self.compiler_path), + str(class_file), + outputdir] + + #TODO: syntax for other decompilers + """ + elif self.params.decompiler.value == Decompiler.PROCYON.value: + decompile_cmd = [f'''./javabc/decompile_test_procyon.sh {self.filepaths.src_filepath} {test_name} {self.filepaths.jvm} {self.filepaths.decompiler_path}'''] + """ + decompile_result = subprocess.run(decompile_cmd) + + if decompile_result.returncode != 0: + return RunnerReturn.DECOMPILATION_FAIL + + return RunnerReturn.SUCCESS + + + def recompile_test(self, program : Path) -> RunnerReturn: + + # Recompile test case + compile_cmd = [str(self.javac), + str(program), + '-d', + str(program.parent)] + + compile_result = subprocess.run(compile_cmd) + + if compile_result.returncode != 0: + return RunnerReturn.RECOMPILATION_FAIL + + # Compile wrapper with recompiled test case class + compile_wrapper_cmd = [str(self.javac), + '-cp', + f':{str(program.parent)}:{self.json_jar}', + str(self.wrapper), + '-d', + str(program.parent)] + + wrapper_result = subprocess.run(compile_wrapper_cmd) + + return RunnerReturn.SUCCESS if wrapper_result.returncode == 0 else RunnerReturn.RECOMPILATION_FAIL + + + diff --git a/src/fuzzflesh/harness/javabc/javabc_runner.py b/src/fuzzflesh/harness/javabc/javabc_runner.py index 777d85d..336a868 100644 --- a/src/fuzzflesh/harness/javabc/javabc_runner.py +++ b/src/fuzzflesh/harness/javabc/javabc_runner.py @@ -88,11 +88,13 @@ def execute_with_changing_paths(self, program : Path, paths : list[Path]) -> Run else: exe_cmd = [f'{self.jvm}', + # '-Dgraal.MaxDuplicationFactor=100000.0', '-XX:+UnlockDiagnosticVMOptions', # '-XX:CompileCommand=print,TestCase.testCase', - # '-XX:+PrintCompilation', - '-XX:+LogCompilation', - f'-XX:LogFile={class_location}/hotspot.log', + '-XX:+PrintCompilation', + # '-XX:+PrintAssembly', + # '-XX:+LogCompilation', + # f'-XX:LogFile={class_location}/hotspot.log', '-cp', f':{class_location}:{self.json_jar}', 'Wrapper', @@ -193,9 +195,10 @@ def execute_test(self, program : Path, path : Path, class_location : Path) -> Ru exe_cmd = [f'{self.jvm}', '-XX:+UnlockDiagnosticVMOptions', # '-XX:CompileCommand=print,testing.TestCase::testCase', - # '-XX:+PrintCompilation', - # '-XX:+LogCompilation', - # f'-XX:LogFile={class_location}/hotspot.log', + '-XX:+PrintCompilation', + '-XX:+PrintAssembly', + '-XX:+LogCompilation', + f'-XX:LogFile={class_location}/hotspot.log', '-cp', f':{self.output}:{class_location}:{self.json_jar}', f'testing/Wrapper', @@ -210,8 +213,9 @@ def execute_test(self, program : Path, path : Path, class_location : Path) -> Ru '-XX:+UnlockDiagnosticVMOptions', # '-XX:CompileCommand=print,TestCase.testCase', # '-XX:+PrintCompilation', - # '-XX:+LogCompilation', - # f'-XX:LogFile={class_location}/hotspot.log', + '-XX:+PrintAssembly', + '-XX:+LogCompilation', + f'-XX:LogFile={class_location}/hotspot.log', '-cp', f':{class_location}:{self.json_jar}', 'Wrapper', diff --git a/src/fuzzflesh/program_generator/java/__init__.py b/src/fuzzflesh/program_generator/java/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/fuzzflesh/program_generator/java/java_generator.py b/src/fuzzflesh/program_generator/java/java_generator.py new file mode 100644 index 0000000..29a4568 --- /dev/null +++ b/src/fuzzflesh/program_generator/java/java_generator.py @@ -0,0 +1,213 @@ +from typing import List +from pathlib import Path + +from fuzzflesh.common.utils import InstructionBlock, Lang +from fuzzflesh.program_generator.flesher import ProgramFlesher +from fuzzflesh.cfg import CFG + +class JavaProgramGenerator(ProgramFlesher): + + def __init__(self, cfg : CFG, dirs_known_at_compile : bool = False, _reflection : bool = False): + super(JavaProgramGenerator, self).__init__(cfg, dirs_known_at_compile) + self.program_number : int = 0 + self.reflection = _reflection + + @property + def language(self): + return Lang.JAVA + + def increment_program_number(self) -> None: + self.program_number += 1 + + def flesh_program_start(self) -> List[InstructionBlock]: + if self.reflection: + code = '''package testing; + +class TestCase implements TestCaseInterface { + int dirs[]; + int dirsIndex; + int actualOutput[]; + int outputIndex; + + // default constructor + public TestCase() {} + + @Override + public void testCase(int dirs[], int actualOutput[]) { + this.dirs = dirs; // direction not known at compile time + this.dirsIndex = 0; + this.actualOutput = actualOutput; + this.outputIndex = 0; + + block_0(); // call starting block + } + +''' + + else: + code = '''class TestCase { + int dirs[]; + int dirsIndex; + int actualOutput[]; + int outputIndex; + + // default constructor + public TestCase() {} + + public void testCase(int dirs[], int actualOutput[]) { + this.dirs = dirs; // direction not known at compile time + this.dirsIndex = 0; + this.actualOutput = actualOutput; + this.outputIndex = 0; + + block_0(); // call starting block + } + +''' + + return [InstructionBlock(code)] + + def flesh_program_start_with_dirs(self, directions : list[int]) -> List[InstructionBlock]: + dirs = '''// direction known at compile time + this.dirs = new int []{''' + + # fill out directions array + for i, d in enumerate(directions): + dirs += ''' + {direction},'''.format(direction = d) + + dirs += ''' + };''' + + if self.reflection: + code = '''package testing; + +class TestCase implements TestCaseInterface {{ + int dirs[]; + int dirsIndex; + int actualOutput[]; + int outputIndex; + + // default constructor + public TestCase() {{}} + + @Override + public void testCase(int dirs[], int actualOutput[]) {{ + {dirs} + + this.dirsIndex = 0; + this.actualOutput = actualOutput; + this.outputIndex = 0; + + block_0(); // call starting block + }} + +'''.format(dirs = dirs) + + else: + code = '''class TestCase {{ + int dirs[]; + int dirsIndex; + int actualOutput[]; + int outputIndex; + + // default constructor + public TestCase() {{}} + + public void testCase(int dirs[], int actualOutput[]) {{ + {dirs} + + this.dirsIndex = 0; + this.actualOutput = actualOutput; + this.outputIndex = 0; + + block_0(); // call starting block + }} + +'''.format(dirs = dirs) + return [InstructionBlock(code)] + + def get_program_number(self) -> int: + num = self.program_number + self.increment_program_number + return num + + def flesh_start_of_node(self, n : int) -> InstructionBlock: + # Double {{ for escaping + code = ''' void block_{i}() {{ + actualOutput[outputIndex++] = {i}; +'''.format(i = n) + + return InstructionBlock(code) + + def flesh_exit_node(self, n : int) -> str: + ''' + returns code for node n with no successors + (exit node). + ''' + + code = ''' return; // exit node + } +''' + + return InstructionBlock(code) + + def flesh_unconditional_node(self, n : int) -> InstructionBlock: + ''' + returns code for node n with single successor + ''' + + code = ''' block_{successor}(); // unconditional node + }} +'''.format(successor = list(self.cfg.graph.adj[n])[0]) + + return InstructionBlock(code) + + def flesh_conditional_node(self, n : int) -> InstructionBlock: + ''' + returns code for node n with two successors, one of + which may be self (e.g. in case of loop) + note this does not deal with switch statements where + there are > 2 successor nodes + ''' + + code = ''' int dir = dirs[dirsIndex++]; + + // conditional node + if (dir == 0) {{ + block_{successor_true}(); + }} else {{ + block_{successor_false}(); + }} + }} +'''.format(successor_false = list(self.cfg.graph.adj[n])[1], successor_true = list(self.cfg.graph.adj[n])[0]) + + return InstructionBlock(code) + + def flesh_switch_node(self, n : int, n_successors : int) -> InstructionBlock: + ''' + returns code for node with > 2 successors + e.g. a switch statement + ''' + + code = ''' int dir = dirs[dirsIndex++]; + + // switch node + switch (dir) { +''' + + for j in range(n_successors): + code += ''' case {i}: block_{successor}(); break; +'''.format(i = j, successor = list(self.cfg.graph.adj[n])[j]) + + + code += ''' default: block_{default}(); + }} + }} +'''.format(default = list(self.cfg.graph.adj[n])[0]) + + return InstructionBlock(code) + + def flesh_program_end(self) -> InstructionBlock: + return InstructionBlock('''} +''') From c83d892112f5d538041caa9f9044478ecca19ac6 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Wed, 28 Aug 2024 15:18:31 +0100 Subject: [PATCH 08/13] Created multithread version of the wrapper and also wrapped testCase method with try catch to handle crashing bugs --- WrapperMultiThread.java | 256 ++++++++++++++++++ WrapperNoReflection.java | 255 +++++++++++++++++ src/fuzzflesh/wrappers/Wrapper.java | 125 ++++----- .../wrappers/WrapperNoReflection.java | 135 ++++----- 4 files changed, 643 insertions(+), 128 deletions(-) create mode 100644 WrapperMultiThread.java create mode 100644 WrapperNoReflection.java diff --git a/WrapperMultiThread.java b/WrapperMultiThread.java new file mode 100644 index 0000000..ea8e9d1 --- /dev/null +++ b/WrapperMultiThread.java @@ -0,0 +1,256 @@ +import java.io.File; +import java.util.Scanner; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicBoolean; +import java.lang.Math; +import java.lang.Thread; +import java.lang.reflect.*; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +class Path { + String inputFilename; + int dir[]; + int actualOutput[]; + int expectedOutput[]; + int outputSize; + + Path(String inputFilename) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + this.inputFilename = inputFilename; + + // get direction size and expected output size from file + JSONParser parser = new JSONParser(); + JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(inputFilename)); + + JSONArray jsonDir = (JSONArray) jsonObject.get("dirs"); + JSONArray jsonOutput = (JSONArray) jsonObject.get("expected_output"); + + outputSize = jsonOutput.size(); + int dirSize = jsonDir.size(); + + // create arrays + dir = new int[dirSize]; + actualOutput = new int[2*outputSize]; + expectedOutput = new int[outputSize]; + + // fill arrays + int counter = 0; + for (Object o : jsonDir) { + dir[counter] = (int) (long) o; + counter++; + } + counter = 0; + for (Object o : jsonOutput) { + expectedOutput[counter] = (int) (long) o; + counter++; + } + for (int i = outputSize; i < 2*outputSize; i++) { + actualOutput[i] = -1; + } + } + + boolean compare() { + // check actual and expected path are the same + for(int i = 0; i < outputSize; i++){ + if(expectedOutput[i] != actualOutput[i]){ + return false; + } + } + + // check no overflow occurred + for(int i = outputSize; i < 2*outputSize; i++){ + if(actualOutput[i] != -1){ + return false; + } + } + + return true; + } + + void recordOutput(String fileName, boolean result) { + if (fileName == null) { + System.out.print("Expected and actual output are"); + + if(result) { + System.out.print(""); + } + else { + System.out.print(" not"); + } + + System.out.print(" the same\n"); + + System.out.print("Expected output:"); + + for(int i = 0; i < outputSize; i++){ + System.out.print(" " + expectedOutput[i]); + } + + System.out.print("\nActual output: "); + + for(int i = 0; i < 2*outputSize; i++){ + System.out.print(" " + actualOutput[i]); + } + + System.out.print("\n"); + return; + } + + try{ + FileWriter fw = new FileWriter(fileName, true); + + fw.write("Test name: " + inputFilename + "\n"); + + fw.write("Expected and actual output are"); + + if(result) { + fw.write(""); + } + else { + fw.write(" not"); + } + + fw.write(" the same\n"); + + fw.write("Expected output:"); + + for(int i = 0; i < outputSize; i++){ + fw.write(" " + expectedOutput[i]); + } + + fw.write("\n"); + + + fw.write("Actual output: "); + + for(int i = 0; i < 2*outputSize; i++){ + fw.write(" " + actualOutput[i]); + } + + fw.write("\n"); + + fw.close(); + + }catch(IOException e){ + System.out.println("Error writing results to file"); + } + } + + void resetActualOutput() { + for (int i = 0; i < actualOutput.length; ++i) { + actualOutput[i] = -1; + } + } +} + +class Wrapper{ + public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException, InterruptedException { + // parse args + String inputFilenames[] = args[0].split(":"); + String outputFilename = args[1]; + String badOutputFilename = args[2]; + int nFunctionRepeats = Integer.parseInt(args[3]); + + Path paths[] = new Path[inputFilenames.length]; + + for (int i = 0; i < inputFilenames.length; i++) { + paths[i] = new Path(inputFilenames[i]); + } + + // To keep track if any of them failed + AtomicBoolean success = new AtomicBoolean(true); + + Thread threads[] = new Thread[paths.length]; + + // Initializing threads + for (int i = 0; i < threads.length; ++i) { + final Path path = paths[i]; + final String tempBadOutputFilename = badOutputFilename + i; + + threads[i] = new Thread(() -> { + boolean threadSuccess = true; + boolean result = true; + TestCase test = new TestCase(); + + for(int j = 0; j < nFunctionRepeats; j++){ + path.resetActualOutput(); + test.testCase(path.dir, path.actualOutput); + + // compare each expected and actual and write out if any are inconsistent + result = path.compare(); + threadSuccess = threadSuccess && result; + + // record bad output in separate file + if (!result){ + path.recordOutput(tempBadOutputFilename, result); + } + + } + + // Update success if any of paths failed in this thread + success.set(success.get() && threadSuccess); + + // Print to console + path.recordOutput(null, result); + }); + + // Catch exceptions occured in threads + threads[i].setUncaughtExceptionHandler((thread, exception) -> { + boolean result = path.compare(); + path.recordOutput(outputFilename, result); + path.recordOutput(badOutputFilename, result); + path.recordOutput(null, result); + + e.printStackTrace(); + System.exit(1); + }); + } + + // create class + TestCase test = new TestCase(); + + // Running one path to let it JIT compile + for(int i = 0; i < nFunctionRepeats; i++){ + paths[0].resetActualOutput(); + test.testCase(paths[0].dir, paths[0].actualOutput); + + // compare each expected and actual and write out if any are inconsistent + boolean result = paths[0].compare(); + success.set(success.get() && result); + + // record bad output in separate file + if (!result){ + paths[0].recordOutput(badOutputFilename, result); + } + + } + + // Launching all threads + for (Thread thread : threads) { + thread.start(); + } + + for (Thread thread : threads) { + thread.join(); + } + + for (Path path : paths) { + boolean result = path.compare(); + path.recordOutput(outputFilename, result); + } + + + if(success.get()) { + System.exit(0); + } + + System.exit(1); + + } +} diff --git a/WrapperNoReflection.java b/WrapperNoReflection.java new file mode 100644 index 0000000..c236ebf --- /dev/null +++ b/WrapperNoReflection.java @@ -0,0 +1,255 @@ +import java.io.File; +import java.util.Scanner; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.lang.Math; +import java.lang.reflect.*; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +class Path { + String inputFilename; + int dir[]; + int actualOutput[]; + int expectedOutput[]; + int outputSize; + + Path(String inputFilename) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + this.inputFilename = inputFilename; + + // get direction size and expected output size from file + JSONParser parser = new JSONParser(); + JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(inputFilename)); + + JSONArray jsonDir = (JSONArray) jsonObject.get("dirs"); + JSONArray jsonOutput = (JSONArray) jsonObject.get("expected_output"); + + outputSize = jsonOutput.size(); + int dirSize = jsonDir.size(); + + // create arrays + dir = new int[dirSize]; + actualOutput = new int[2*outputSize]; + expectedOutput = new int[outputSize]; + + // fill arrays + int counter = 0; + for (Object o : jsonDir) { + dir[counter] = (int) (long) o; + counter++; + } + counter = 0; + for (Object o : jsonOutput) { + expectedOutput[counter] = (int) (long) o; + counter++; + } + for (int i = outputSize; i < 2*outputSize; i++) { + actualOutput[i] = -1; + } + } + + boolean compare() { + // check actual and expected path are the same + for(int i = 0; i < outputSize; i++){ + if(expectedOutput[i] != actualOutput[i]){ + return false; + } + } + + // check no overflow occurred + for(int i = outputSize; i < 2*outputSize; i++){ + if(actualOutput[i] != -1){ + return false; + } + } + + return true; + } + + void recordOutput(String fileName, boolean result) { + if (fileName == null) { + System.out.print("Expected and actual output are"); + + if(result) { + System.out.print(""); + } + else { + System.out.print(" not"); + } + + System.out.print(" the same\n"); + + System.out.print("Expected output:"); + + for(int i = 0; i < outputSize; i++){ + System.out.print(" " + expectedOutput[i]); + } + + System.out.print("\nActual output: "); + + for(int i = 0; i < 2*outputSize; i++){ + System.out.print(" " + actualOutput[i]); + } + + System.out.print("\n"); + return; + } + + try{ + FileWriter fw = new FileWriter(fileName, true); + + fw.write("Test name: " + inputFilename + "\n"); + + fw.write("Expected and actual output are"); + + if(result) { + fw.write(""); + } + else { + fw.write(" not"); + } + + fw.write(" the same\n"); + + fw.write("Expected output:"); + + for(int i = 0; i < outputSize; i++){ + fw.write(" " + expectedOutput[i]); + } + + fw.write("\n"); + + + fw.write("Actual output: "); + + for(int i = 0; i < 2*outputSize; i++){ + fw.write(" " + actualOutput[i]); + } + + fw.write("\n"); + + fw.close(); + + }catch(IOException e){ + System.out.println("Error writing results to file"); + } + } + + void resetActualOutput() { + for (int i = 0; i < actualOutput.length; ++i) { + actualOutput[i] = -1; + } + } +} + +class Wrapper{ + public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + + // parse args + String inputFilenames[] = args[0].split(":"); + String outputFilename = args[1]; + String badOutputFilename = args[2]; + int nFunctionRepeats = Integer.parseInt(args[3]); + + Path paths[] = new Path[inputFilenames.length]; + + for (int i = 0; i < inputFilenames.length; i++) { + paths[i] = new Path(inputFilenames[i]); + } + + boolean result = true; + boolean success = true; + + // create class + TestCase test = new TestCase(); + + int index = (int) (Math.random() * paths.length); + + // repeat function to induce JIT + for(int i = 0; i < nFunctionRepeats; i++){ + try { + paths[index].resetActualOutput(); + test.testCase(paths[index].dir, paths[index].actualOutput); + } catch (Exception e) { + result = paths[index].compare(); + paths[index].recordOutput(outputFilename, result); + paths[index].recordOutput(badOutputFilename, result); + paths[index].recordOutput(null, result); + + e.printStackTrace(); + System.exit(1); + } + + // compare each expected and actual and write out if any are inconsistent + result = paths[index].compare(); + success = success && result; + + // record bad output in separate file + if (!result){ + paths[index].recordOutput(badOutputFilename, result); + } + + } + + // record all output + paths[index].recordOutput(outputFilename, result); + + // print outcomes + paths[index].recordOutput(null, result); + + // if multiple paths provided, change the path to trigger deoptimization + if (paths.length >= 2) { + int repeat = (int) (Math.random() * paths.length * 1.5) + 1; + + for (int i = 0; i < repeat; ++i) { + System.out.println("Switching paths"); + index = (int) (Math.random() * paths.length); + + // repeat function to induce JIT + for(int j = 0; j < nFunctionRepeats; j++){ + try { + paths[index].resetActualOutput(); + test.testCase(paths[index].dir, paths[index].actualOutput); + } catch (Exception e) { + result = paths[index].compare(); + paths[index].recordOutput(outputFilename, result); + paths[index].recordOutput(badOutputFilename, result); + paths[index].recordOutput(null, result); + + e.printStackTrace(); + System.exit(1); + } + + // compare each expected and actual and write out if any are inconsistent + result = paths[index].compare(); + success = success && result; + + // record bad output in separate file + if (!result){ + paths[index].recordOutput(badOutputFilename, result); + } + + } + + // record all output + paths[index].recordOutput(outputFilename, result); + + // print outcomes + paths[index].recordOutput(null, result); + } + } + + + if(success) { + System.exit(0); + } + + System.exit(1); + + } +} diff --git a/src/fuzzflesh/wrappers/Wrapper.java b/src/fuzzflesh/wrappers/Wrapper.java index 4643810..6fae693 100644 --- a/src/fuzzflesh/wrappers/Wrapper.java +++ b/src/fuzzflesh/wrappers/Wrapper.java @@ -139,6 +139,12 @@ void recordOutput(String fileName, boolean result) { System.out.println("Error writing results to file"); } } + + void resetActualOutput() { + for (int i = 0; i < actualOutput.length; ++i) { + actualOutput[i] = -1; + } + } } class Wrapper{ @@ -166,92 +172,89 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio TestCaseInterface test = (TestCaseInterface) constructor.newInstance(); + int index = (int) (Math.random() * paths.length); + // repeat function to induce JIT for(int i = 0; i < nFunctionRepeats; i++){ - - test.testCase(paths[0].dir, paths[0].actualOutput); + try { + paths[index].resetActualOutput(); + test.testCase(paths[index].dir, paths[index].actualOutput); + } catch (Exception e) { + result = paths[index].compare(); + paths[index].recordOutput(outputFilename, result); + paths[index].recordOutput(badOutputFilename, result); + paths[index].recordOutput(null, result); + + e.printStackTrace(); + System.exit(1); + } // compare each expected and actual and write out if any are inconsistent - result = paths[0].compare(); + result = paths[index].compare(); success = success && result; // record bad output in separate file if (!result){ - paths[0].recordOutput(badOutputFilename, result); + paths[index].recordOutput(badOutputFilename, result); } - } - // if multiple paths provided, change the path to trigger deoptimization - if (paths.length >= 2) { - System.out.println("Switching paths"); + } - // repeat function to induce JIT - for(int i = 0; i < nFunctionRepeats; i++){ + // record all output + paths[index].recordOutput(outputFilename, result); - test.testCase(paths[1].dir, paths[1].actualOutput); + // print outcomes + paths[index].recordOutput(null, result); - // compare each expected and actual and write out if any are inconsistent - result = paths[1].compare(); - success = success && result; + // if multiple paths provided, change the path to trigger deoptimization + if (paths.length >= 2) { + int repeat = (int) (Math.random() * paths.length * 1.5) + 1; + + for (int i = 0; i < repeat; ++i) { + System.out.println("Switching paths"); + index = (int) (Math.random() * paths.length); + + // repeat function to induce JIT + for(int j = 0; j < nFunctionRepeats; j++){ + try { + paths[index].resetActualOutput(); + test.testCase(paths[index].dir, paths[index].actualOutput); + } catch (Exception e) { + result = paths[index].compare(); + paths[index].recordOutput(outputFilename, result); + paths[index].recordOutput(badOutputFilename, result); + paths[index].recordOutput(null, result); + + e.printStackTrace(); + System.exit(1); + } + + // compare each expected and actual and write out if any are inconsistent + result = paths[index].compare(); + success = success && result; + + // record bad output in separate file + if (!result){ + paths[index].recordOutput(badOutputFilename, result); + } - // record bad output in separate file - if (!result){ - paths[1].recordOutput(badOutputFilename, result); } - } + // record all output + paths[index].recordOutput(outputFilename, result); - // compare final expected and actual - result = paths[0].compare(); - success = success && result; - - // record all output - paths[0].recordOutput(outputFilename, result); - - // record bad output in separate file - if (!result){ - paths[0].recordOutput(badOutputFilename, result); + // print outcomes + paths[index].recordOutput(null, result); } - - // print outcomes - paths[0].recordOutput(null, result); - - // compare each expected and actual and write out if any are inconsistent - result = paths[1].compare(); - success = success && result; - - // record all output - paths[1].recordOutput(outputFilename, result); - - // record bad output in separate file - if (!result){ - paths[1].recordOutput(badOutputFilename, result); - } - - // print outcomes - paths[1].recordOutput(null, result); - } else { - // compare final expected and actual - result = paths[0].compare(); - success = success && result; - - // record all output - paths[0].recordOutput(outputFilename, result); - - // record bad output in separate file - if (!result){ - paths[0].recordOutput(badOutputFilename, result); - } - - // print outcomes - paths[0].recordOutput(null, result); } + if(success) { System.exit(0); } System.exit(1); + } } diff --git a/src/fuzzflesh/wrappers/WrapperNoReflection.java b/src/fuzzflesh/wrappers/WrapperNoReflection.java index d7eff70..ea8e9d1 100644 --- a/src/fuzzflesh/wrappers/WrapperNoReflection.java +++ b/src/fuzzflesh/wrappers/WrapperNoReflection.java @@ -5,6 +5,9 @@ import java.io.IOException; import java.io.Reader; import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicBoolean; +import java.lang.Math; +import java.lang.Thread; import java.lang.reflect.*; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; @@ -138,11 +141,16 @@ void recordOutput(String fileName, boolean result) { System.out.println("Error writing results to file"); } } + + void resetActualOutput() { + for (int i = 0; i < actualOutput.length; ++i) { + actualOutput[i] = -1; + } + } } class Wrapper{ - public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { - + public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException, InterruptedException { // parse args String inputFilenames[] = args[0].split(":"); String outputFilename = args[1]; @@ -155,97 +163,90 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio paths[i] = new Path(inputFilenames[i]); } - boolean result = true; - boolean success = true; - - // create class - TestCase test = new TestCase(); - - // repeat function to induce JIT - for(int i = 0; i < nFunctionRepeats; i++){ - - test.testCase(paths[0].dir, paths[0].actualOutput); + // To keep track if any of them failed + AtomicBoolean success = new AtomicBoolean(true); - // compare each expected and actual and write out if any are inconsistent - result = paths[0].compare(); - success = success && result; - - // record bad output in separate file - if (!result){ - paths[0].recordOutput(badOutputFilename, result); - } + Thread threads[] = new Thread[paths.length]; - } + // Initializing threads + for (int i = 0; i < threads.length; ++i) { + final Path path = paths[i]; + final String tempBadOutputFilename = badOutputFilename + i; - // if multiple paths provided, change the path to trigger deoptimization - if (paths.length >= 2) { - System.out.println("Switching paths"); + threads[i] = new Thread(() -> { + boolean threadSuccess = true; + boolean result = true; + TestCase test = new TestCase(); - // repeat function to induce JIT - for(int i = 0; i < nFunctionRepeats; i++){ + for(int j = 0; j < nFunctionRepeats; j++){ + path.resetActualOutput(); + test.testCase(path.dir, path.actualOutput); - test.testCase(paths[1].dir, paths[1].actualOutput); + // compare each expected and actual and write out if any are inconsistent + result = path.compare(); + threadSuccess = threadSuccess && result; - // compare each expected and actual and write out if any are inconsistent - result = paths[1].compare(); - success = success && result; + // record bad output in separate file + if (!result){ + path.recordOutput(tempBadOutputFilename, result); + } - // record bad output in separate file - if (!result){ - paths[1].recordOutput(badOutputFilename, result); } - } + // Update success if any of paths failed in this thread + success.set(success.get() && threadSuccess); - // compare final expected and actual - result = paths[0].compare(); - success = success && result; + // Print to console + path.recordOutput(null, result); + }); - // record all output - paths[0].recordOutput(outputFilename, result); + // Catch exceptions occured in threads + threads[i].setUncaughtExceptionHandler((thread, exception) -> { + boolean result = path.compare(); + path.recordOutput(outputFilename, result); + path.recordOutput(badOutputFilename, result); + path.recordOutput(null, result); - // record bad output in separate file - if (!result){ - paths[0].recordOutput(badOutputFilename, result); - } + e.printStackTrace(); + System.exit(1); + }); + } - // print outcomes - paths[0].recordOutput(null, result); + // create class + TestCase test = new TestCase(); - // compare each expected and actual and write out if any are inconsistent - result = paths[1].compare(); - success = success && result; + // Running one path to let it JIT compile + for(int i = 0; i < nFunctionRepeats; i++){ + paths[0].resetActualOutput(); + test.testCase(paths[0].dir, paths[0].actualOutput); - // record all output - paths[1].recordOutput(outputFilename, result); + // compare each expected and actual and write out if any are inconsistent + boolean result = paths[0].compare(); + success.set(success.get() && result); // record bad output in separate file if (!result){ - paths[1].recordOutput(badOutputFilename, result); + paths[0].recordOutput(badOutputFilename, result); } - // print outcomes - paths[1].recordOutput(null, result); - } else { - // compare final expected and actual - result = paths[0].compare(); - success = success && result; - - // record all output - paths[0].recordOutput(outputFilename, result); + } - // record bad output in separate file - if (!result){ - paths[0].recordOutput(badOutputFilename, result); - } + // Launching all threads + for (Thread thread : threads) { + thread.start(); + } - // print outcomes - paths[0].recordOutput(null, result); + for (Thread thread : threads) { + thread.join(); } + for (Path path : paths) { + boolean result = path.compare(); + path.recordOutput(outputFilename, result); + } - if(success) { + if(success.get()) { System.exit(0); } From 1b34b45485c3232aa4c08bedab7205429e1b2b81 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Wed, 28 Aug 2024 15:21:34 +0100 Subject: [PATCH 09/13] Updated run script --- run_template.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/run_template.sh b/run_template.sh index 64f8e3f..7c83034 100755 --- a/run_template.sh +++ b/run_template.sh @@ -5,12 +5,14 @@ NAME=$(hostname) MACHINE=${NAME%%.*} SRC='/homes/rk1923/control_flow_fleshing/src' +# ACTION='fuzz' ACTION='fuzz_with_changing_paths' # OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} OUTPUT=./output -LANG='javabc' +LANG='java' COMPILER='hotspot' JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +# JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' @@ -23,15 +25,13 @@ mkdir -p $OUTPUT python3 -m fuzzflesh \ $ACTION \ -base=$OUTPUT \ - -graphs=1000000000 \ - -paths=2 \ - -min_size=3 \ + -graphs=1 \ + -paths=3 \ + -min_size=2 \ -max_size=100 \ - --tidy \ $LANG \ $COMPILER \ $JVM \ - $JASMIN \ $JSON \ # --reflection From 82a6ab00b028e47e0521aea5363d6a1d7b41a567 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Tue, 3 Sep 2024 17:13:15 +0100 Subject: [PATCH 10/13] Fixed bug in multithread wrapper --- WrapperMultiThread.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/WrapperMultiThread.java b/WrapperMultiThread.java index ea8e9d1..963c272 100644 --- a/WrapperMultiThread.java +++ b/WrapperMultiThread.java @@ -207,7 +207,7 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio path.recordOutput(badOutputFilename, result); path.recordOutput(null, result); - e.printStackTrace(); + exception.printStackTrace(); System.exit(1); }); } @@ -217,8 +217,18 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio // Running one path to let it JIT compile for(int i = 0; i < nFunctionRepeats; i++){ - paths[0].resetActualOutput(); - test.testCase(paths[0].dir, paths[0].actualOutput); + try { + paths[0].resetActualOutput(); + test.testCase(paths[0].dir, paths[0].actualOutput); + } catch (Exception e) { + boolean result = paths[0].compare(); + paths[0].recordOutput(outputFilename, result); + paths[0].recordOutput(badOutputFilename, result); + paths[0].recordOutput(null, result); + + e.printStackTrace(); + System.exit(1); + } // compare each expected and actual and write out if any are inconsistent boolean result = paths[0].compare(); @@ -243,6 +253,7 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio for (Path path : paths) { boolean result = path.compare(); path.recordOutput(outputFilename, result); + if (!result) paths[0].recordOutput(badOutputFilename, result); } From 7fbd260095a60917dec09d863993097bf72f9569 Mon Sep 17 00:00:00 2001 From: rk1923 Date: Tue, 24 Sep 2024 22:15:49 +0100 Subject: [PATCH 11/13] Created a hotspot log analyzer --- src/fuzzflesh/analyzer/analyze.py | 315 ++++++++++++++++++ src/fuzzflesh/harness/java/java_runner.py | 5 +- src/fuzzflesh/harness/javabc/javabc_runner.py | 4 +- .../wrappers/WrapperNoReflection.java | 133 ++++---- 4 files changed, 386 insertions(+), 71 deletions(-) create mode 100644 src/fuzzflesh/analyzer/analyze.py diff --git a/src/fuzzflesh/analyzer/analyze.py b/src/fuzzflesh/analyzer/analyze.py new file mode 100644 index 0000000..dffce19 --- /dev/null +++ b/src/fuzzflesh/analyzer/analyze.py @@ -0,0 +1,315 @@ +import xml.etree.ElementTree as ET +from xml.etree.ElementTree import ElementTree, Element +import json +import re +import numpy as np + +METHOD = 'method' +TASK_QUEUED = 'task_queued' +TASK = 'task' +MAKE_NOT_ENTRANT = 'make_not_entrant' +NMETHOD = 'nmethod' +COMPILE_ID = 'compile_id' +LEVEL = 'level' +IICOUNT = 'iicount' +STAMP = 'stamp' +UNCOMMON_TRAP = 'uncommon_trap' +REASON = 'reason' +FAILURE = 'failure' +COMPILATION_PATTERN = 'compilation pattern' +COMPILATION = 'compilation' +INVOCATION_QUEUED = 'invocations till queued' +TIME_QUEUED = 'time stamp queued' +INVOCATION_COMPILED = 'invocations till compiled' +TIME_COMPILED = 'time stamp compiled' +UNCOMMON_TRAPS = 'uncommon traps' +COMPILATION_DETAILS = 'compilation details' +FAILURE_REASON = 'failure reason' +TIME_STAMP = 'time stamp' +NAME = 'name' +INLINE_SUCCESS = 'inline_success' +INLINE_FAILURE = 'inline_fail' +INLINE = 'inline' +FAILED_INLINE = 'failed inline' +PARSE = 'parse' +FRAGMENT = 'fragment' + +MEAN = 'mean' +MEDIAN = 'median' +MIN = 'min' +MAX = 'max' +STDEV = 'standard deviation' + + +class Data: + def __init__(self): + self.filepath: str = '' + self.compiler: str = '' + self.single_threaded: bool = True + self.jit_compiled: bool = False + self.deoptimized: bool = False + self.number_of_failed_compilation: int = 0 + self.inline_count: int = 0 + self.failed_inline_count: int = 0 + self.compilation_count: dict = {} + self.compilation_patterns: dict = {} + self.uncommon_traps_count: dict = {} + self.invocation_queued_level: dict = {} + self.invocation_compiled_level: dict = {} + + def to_dict(self) -> dict: + return { + 'file path': self.filepath, + 'compiler': self.compiler, + 'single threaded': self.single_threaded, + 'deoptimized': self.deoptimized, + 'number of failed compilation': self.number_of_failed_compilation, + 'number of successful inline': self.inline_count, + 'number of failed inline': self.failed_inline_count, + 'frequency of compilation at each level': self.compilation_count, + 'frequency of each compilation pattern': self.compilation_patterns, + 'frequency of each uncommon trap': self.uncommon_traps_count, + 'stats on number of invocation until method gets added to compile queue': self.invocation_queued_level, + 'stats on number of invocation until method gets compiled': self.invocation_compiled_level, + + } + +class Compilation: + def __init__(self): + self.method_name: str = '' + self.queued_task: Element = None + self.compiled_task: Element = None + self.nmethod: Element = None + self.make_not_entrant: Element = None + + + +class Log: + def __init__(self, + _filepath: str, + _compiler_name: str, + _single_threaded: bool): + + self.filepath: str = _filepath + self.compiler_name: str = _compiler_name + self.single_threaded: bool = _single_threaded + + def analyze(self, index: int, output_dir: str) -> dict: + tree = ET.parse(self.filepath) + + is_method_in_test_case = lambda task: task.attrib[METHOD].startswith('TestCase') + + # Get a list of elements with tag task_queued and is a meber function of TestCase class + queued_tasks = list(filter(is_method_in_test_case, tree.iter(TASK_QUEUED))) + + # Get a list of elements with tag task and is a meber function of TestCase class + compiled_tasks = list(filter(is_method_in_test_case, tree.iter(TASK))) + + # Get a list of elements with tag nmethod and is a meber function of TestCase class + nmethods = list(filter(is_method_in_test_case, tree.iter(NMETHOD))) + + # Dictionary of compile_id to compilation object which stores queued_task, compiled_task, etc. + compilation_dict = {} + + # Set up compile id to method dictionary + for task in queued_tasks: + match = re.search(r"TestCase (.*?) .*", task.attrib[METHOD]) + method_name = match.group(1) + compile_id = task.attrib[COMPILE_ID] + + level = Compilation() + level.method_name = method_name + level.queued_task = task + + compilation_dict[compile_id] = level + + for task in compiled_tasks: + compile_id = task.attrib[COMPILE_ID] + compilation_dict[compile_id].compiled_task = task + + for task in nmethods: + compile_id = task.attrib[COMPILE_ID] + compilation_dict[compile_id].nmethod = task + + make_not_entrants = list(filter(lambda task: task.attrib[COMPILE_ID] in compilation_dict, tree.iter(MAKE_NOT_ENTRANT))) + + for task in make_not_entrants: + compile_id = task.attrib[COMPILE_ID] + compilation_dict[compile_id].make_not_entrant = task + + + # Store processed log + intermediate = {} + + for id, compilation in compilation_dict.items(): + method = intermediate.setdefault(compilation.method_name, {}) + if compilation.nmethod is not None: + level = compilation.nmethod.attrib[LEVEL] + method.setdefault(COMPILATION_PATTERN, []).append(level) + + compilation_details = { + COMPILATION: level, + INVOCATION_QUEUED: int(compilation.queued_task.attrib[IICOUNT]), + TIME_QUEUED: float(compilation.queued_task.attrib[STAMP]), + INVOCATION_COMPILED: int(compilation.compiled_task.attrib[IICOUNT]), + TIME_COMPILED: float(compilation.compiled_task.attrib[STAMP]) + } + + # Handle uncommon traps + traps = list(compilation.compiled_task.iter(UNCOMMON_TRAP)) + + if traps: + traps_dict = {} + + for trap in traps: + trap_name = trap.attrib[REASON] + traps_dict.setdefault(trap_name, 0) + traps_dict[trap_name] += 1 + + compilation_details[UNCOMMON_TRAPS] = traps_dict + + # Handle inlining + iter = compilation.compiled_task.iter() + + for element in iter: + if element.tag == PARSE: + break + + for element in iter: + if element.tag == METHOD: + method_name = element.attrib[NAME] + while element.tag not in [INLINE_SUCCESS, INLINE_FAILURE]: + element = next(iter) + + if element.tag == INLINE_SUCCESS: + compilation_details.setdefault(INLINE, []).append(method_name) + else: + compilation_details.setdefault(FAILED_INLINE, []).append(method_name) + + + method.setdefault(COMPILATION_DETAILS, []).append(compilation_details) + else: + level = (compilation.compiled_task.attrib[LEVEL] if LEVEL in compilation.compiled_task.attrib else '4') + ' (failed)' + method.setdefault(COMPILATION_PATTERN, []).append(level) + + compilation_details = { + COMPILATION: level + } + compilation_details[FAILURE_REASON] = compilation.compiled_task.find(FAILURE).attrib[REASON] + compilation_details[TIME_STAMP] = float(compilation.compiled_task.attrib[STAMP]) + + method.setdefault(COMPILATION_DETAILS, []).append(compilation_details) + + if compilation.make_not_entrant is not None: + level = compilation.make_not_entrant.attrib[LEVEL] + " (made not entrant)" + method.setdefault(COMPILATION_PATTERN, []).append(level) + + compilation_details = { + COMPILATION: level + } + compilation_details[TIME_STAMP] = float(compilation.make_not_entrant.attrib[STAMP]) + + method.setdefault(COMPILATION_DETAILS, []).append(compilation_details) + + + + # for key, val in data.items(): + # print(key + ": " +str(val)) + + intermediate_file = output_dir + f'/intermediate_{index}.json' + with open(intermediate_file, 'w') as file: + json.dump(intermediate, file, indent = 4) + + + + # Calculate statistics based on the processed log + data = Data() + data.filepath = self.filepath + data.compiler = self.compiler_name + data.single_threaded = self.single_threaded + data.jit_compiled = len(queued_tasks) != 0 + data.deoptimized = len(make_not_entrants) != 0 + data.number_of_failed_compilation = 0 + + invocation_queued_dict = {} + invocation_compiled_dict = {} + + for _, method in intermediate.items(): + for compilation_details in method[COMPILATION_DETAILS]: + compilation = compilation_details[COMPILATION] + + data.compilation_count.setdefault(compilation, 0) + data.compilation_count[compilation] += 1 + + if compilation.endswith("(failed)"): + data.number_of_failed_compilation += 1 + + if INVOCATION_QUEUED in compilation_details: + invocation_queued_dict.setdefault(compilation, []).append(compilation_details[INVOCATION_QUEUED]) + if INVOCATION_COMPILED in compilation_details: + invocation_compiled_dict.setdefault(compilation, []).append(compilation_details[INVOCATION_COMPILED]) + + if UNCOMMON_TRAPS in compilation_details: + for uncommon_trap, count in compilation_details[UNCOMMON_TRAPS].items(): + data.uncommon_traps_count.setdefault(uncommon_trap, 0) + data.uncommon_traps_count[uncommon_trap] += count + + if INLINE in compilation_details: + data.inline_count += len(compilation_details[INLINE]) + if FAILED_INLINE in compilation_details: + data.failed_inline_count += len(compilation_details[FAILED_INLINE]) + + compilation_pattern = ', '.join(method[COMPILATION_PATTERN]) + data.compilation_patterns.setdefault(compilation_pattern, 0) + data.compilation_patterns[compilation_pattern] += 1 + + for compilation, invocation_queued in invocation_queued_dict.items(): + stats = { + MEAN: np.average(invocation_queued), + MEDIAN: np.median(invocation_queued), + MIN: int(np.min(invocation_queued)), + MAX: int(np.max(invocation_queued)), + STDEV: np.std(invocation_queued) + } + + data.invocation_queued_level[compilation] = stats + + for compilation, invocation_compiled in invocation_compiled_dict.items(): + stats = { + MEAN: np.average(invocation_compiled), + MEDIAN: np.median(invocation_compiled), + MIN: int(np.min(invocation_compiled)), + MAX: int(np.max(invocation_compiled)), + STDEV: np.std(invocation_compiled) + } + + data.invocation_compiled_level[compilation] = stats + + return data.to_dict() + + +def setup_logs(): + logs: list[Log] = [ + Log('/homes/rk1923/control_flow_fleshing/java_change_dir/out/graph_0/prog_0/hotspot.log', 'OpenJDK', True), + Log('/homes/rk1923/control_flow_fleshing/java_change_dir_concurrent/out/graph_0/prog_0/hotspot.log', 'OpenJDK', False), + Log('/homes/rk1923/control_flow_fleshing/java_change_dir_graal/out/graph_0/prog_0/hotspot.log', 'graalVM', True), + Log('/homes/rk1923/control_flow_fleshing/java_change_dir_graal_concurrent/out/graph_0/prog_0/hotspot.log', 'graalVM', False), + Log('/homes/rk1923/control_flow_fleshing/java_change_dir_graal_small/out/graph_0/prog_0/hotspot.log', 'graalVM', True), + Log('/homes/rk1923/control_flow_fleshing/javabc_change_dir/out/graph_0/prog_0/hotspot.log', 'OpenJDK', True), + Log('/homes/rk1923/control_flow_fleshing/javabc_change_dir_graal/out/graph_0/prog_0/hotspot.log', 'graalVM', True), + Log('/homes/rk1923/control_flow_fleshing/javabc_change_dir_graal_small/out/graph_0/prog_0/hotspot.log', 'graalVM', True), + ] + + + output_dir = '/homes/rk1923/control_flow_fleshing/analysis' + + analyses = [] + for index, log in enumerate(logs): + analyses.append(log.analyze(index, output_dir)) + + output_file = output_dir + '/analysis.json' + with open(output_file, 'w') as file: + json.dump(analyses, file, indent = 4) + +if __name__ == "__main__": + setup_logs() \ No newline at end of file diff --git a/src/fuzzflesh/harness/java/java_runner.py b/src/fuzzflesh/harness/java/java_runner.py index 44434ba..230b60a 100644 --- a/src/fuzzflesh/harness/java/java_runner.py +++ b/src/fuzzflesh/harness/java/java_runner.py @@ -87,12 +87,13 @@ def execute_with_changing_paths(self, program : Path, paths : list[Path]) -> Run # '-Djdk.graal.Dump=:1', # f'-Dgraal.LogFile={class_location}/graal.log', + # '-Dgraal.MaxDuplicationFactor=100000.0', '-XX:+UnlockDiagnosticVMOptions', # # '-XX:CompileCommand=print,TestCase::testCase', # '-XX:+PrintAssembly', # '-XX:+PrintCompilation', - # '-XX:+LogCompilation', - # f'-XX:LogFile={class_location}/hotspot.log', + '-XX:+LogCompilation', + f'-XX:LogFile={class_location}/hotspot.log', '-cp', f':{class_location}:{self.json_jar}', 'Wrapper', diff --git a/src/fuzzflesh/harness/javabc/javabc_runner.py b/src/fuzzflesh/harness/javabc/javabc_runner.py index 336a868..6d601ee 100644 --- a/src/fuzzflesh/harness/javabc/javabc_runner.py +++ b/src/fuzzflesh/harness/javabc/javabc_runner.py @@ -88,10 +88,10 @@ def execute_with_changing_paths(self, program : Path, paths : list[Path]) -> Run else: exe_cmd = [f'{self.jvm}', - # '-Dgraal.MaxDuplicationFactor=100000.0', + '-Dgraal.MaxDuplicationFactor=100000.0', '-XX:+UnlockDiagnosticVMOptions', # '-XX:CompileCommand=print,TestCase.testCase', - '-XX:+PrintCompilation', + # '-XX:+PrintCompilation', # '-XX:+PrintAssembly', # '-XX:+LogCompilation', # f'-XX:LogFile={class_location}/hotspot.log', diff --git a/src/fuzzflesh/wrappers/WrapperNoReflection.java b/src/fuzzflesh/wrappers/WrapperNoReflection.java index ea8e9d1..c236ebf 100644 --- a/src/fuzzflesh/wrappers/WrapperNoReflection.java +++ b/src/fuzzflesh/wrappers/WrapperNoReflection.java @@ -5,9 +5,7 @@ import java.io.IOException; import java.io.Reader; import java.util.ArrayList; -import java.util.concurrent.atomic.AtomicBoolean; import java.lang.Math; -import java.lang.Thread; import java.lang.reflect.*; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; @@ -150,7 +148,8 @@ void resetActualOutput() { } class Wrapper{ - public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException, InterruptedException { + public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + // parse args String inputFilenames[] = args[0].split(":"); String outputFilename = args[1]; @@ -163,90 +162,90 @@ public static void main(String[] args) throws IOException, ClassNotFoundExceptio paths[i] = new Path(inputFilenames[i]); } - // To keep track if any of them failed - AtomicBoolean success = new AtomicBoolean(true); - - Thread threads[] = new Thread[paths.length]; - - // Initializing threads - for (int i = 0; i < threads.length; ++i) { - final Path path = paths[i]; - final String tempBadOutputFilename = badOutputFilename + i; - - threads[i] = new Thread(() -> { - boolean threadSuccess = true; - boolean result = true; - TestCase test = new TestCase(); - - for(int j = 0; j < nFunctionRepeats; j++){ - path.resetActualOutput(); - test.testCase(path.dir, path.actualOutput); + boolean result = true; + boolean success = true; - // compare each expected and actual and write out if any are inconsistent - result = path.compare(); - threadSuccess = threadSuccess && result; - - // record bad output in separate file - if (!result){ - path.recordOutput(tempBadOutputFilename, result); - } - - } - - // Update success if any of paths failed in this thread - success.set(success.get() && threadSuccess); + // create class + TestCase test = new TestCase(); - // Print to console - path.recordOutput(null, result); - }); + int index = (int) (Math.random() * paths.length); - // Catch exceptions occured in threads - threads[i].setUncaughtExceptionHandler((thread, exception) -> { - boolean result = path.compare(); - path.recordOutput(outputFilename, result); - path.recordOutput(badOutputFilename, result); - path.recordOutput(null, result); + // repeat function to induce JIT + for(int i = 0; i < nFunctionRepeats; i++){ + try { + paths[index].resetActualOutput(); + test.testCase(paths[index].dir, paths[index].actualOutput); + } catch (Exception e) { + result = paths[index].compare(); + paths[index].recordOutput(outputFilename, result); + paths[index].recordOutput(badOutputFilename, result); + paths[index].recordOutput(null, result); e.printStackTrace(); System.exit(1); - }); - } - - // create class - TestCase test = new TestCase(); - - // Running one path to let it JIT compile - for(int i = 0; i < nFunctionRepeats; i++){ - paths[0].resetActualOutput(); - test.testCase(paths[0].dir, paths[0].actualOutput); + } // compare each expected and actual and write out if any are inconsistent - boolean result = paths[0].compare(); - success.set(success.get() && result); + result = paths[index].compare(); + success = success && result; // record bad output in separate file if (!result){ - paths[0].recordOutput(badOutputFilename, result); + paths[index].recordOutput(badOutputFilename, result); } } - // Launching all threads - for (Thread thread : threads) { - thread.start(); - } + // record all output + paths[index].recordOutput(outputFilename, result); - for (Thread thread : threads) { - thread.join(); - } + // print outcomes + paths[index].recordOutput(null, result); + + // if multiple paths provided, change the path to trigger deoptimization + if (paths.length >= 2) { + int repeat = (int) (Math.random() * paths.length * 1.5) + 1; + + for (int i = 0; i < repeat; ++i) { + System.out.println("Switching paths"); + index = (int) (Math.random() * paths.length); + + // repeat function to induce JIT + for(int j = 0; j < nFunctionRepeats; j++){ + try { + paths[index].resetActualOutput(); + test.testCase(paths[index].dir, paths[index].actualOutput); + } catch (Exception e) { + result = paths[index].compare(); + paths[index].recordOutput(outputFilename, result); + paths[index].recordOutput(badOutputFilename, result); + paths[index].recordOutput(null, result); + + e.printStackTrace(); + System.exit(1); + } - for (Path path : paths) { - boolean result = path.compare(); - path.recordOutput(outputFilename, result); + // compare each expected and actual and write out if any are inconsistent + result = paths[index].compare(); + success = success && result; + + // record bad output in separate file + if (!result){ + paths[index].recordOutput(badOutputFilename, result); + } + + } + + // record all output + paths[index].recordOutput(outputFilename, result); + + // print outcomes + paths[index].recordOutput(null, result); + } } - if(success.get()) { + if(success) { System.exit(0); } From aba2d606d2e24049dae08865b3af8287cf51b86e Mon Sep 17 00:00:00 2001 From: rk1923 Date: Thu, 26 Sep 2024 18:42:27 +0100 Subject: [PATCH 12/13] Added notes on the README --- README.md | 28 + count_no_reflection.csv | 2282 ------------------------------------ count_reflection.csv | 2281 ----------------------------------- get_count_no_reflection.sh | 61 - get_count_reflection.sh | 62 - get_stats_no_reflection.sh | 63 - get_stats_reflection.sh | 64 - run_template.sh | 4 +- stats_no_reflection.csv | 292 ----- stats_reflection.csv | 292 ----- 10 files changed, 30 insertions(+), 5399 deletions(-) delete mode 100644 count_no_reflection.csv delete mode 100644 count_reflection.csv delete mode 100755 get_count_no_reflection.sh delete mode 100755 get_count_reflection.sh delete mode 100755 get_stats_no_reflection.sh delete mode 100755 get_stats_reflection.sh delete mode 100644 stats_no_reflection.csv delete mode 100644 stats_reflection.csv diff --git a/README.md b/README.md index ed3c238..197abb2 100644 --- a/README.md +++ b/README.md @@ -22,3 +22,31 @@ pip install -e . - Edit the template `run_template.sh' to point to the relevant filepaths on your machine - Run the shell script + + +# UROP +Things I have worked on: +- Switching paths after hotspot JIT compiled with one path to trigger deoptimization +- Created a fuzzer that produces Java code where each function represents nodes, to prevent everything being jammed in one method like in Java bytecode +- Tested the fuzzer on OpenJDK and GraalVM +- Running multiple paths concurrently to test the Thread-Safeness of the JIT compiler +- Created a hotspot log analyzer that summarizes compilation patterns, inlines, number of invocations etc. + +Potential areas to look into: +- GraalVM - Less mature JVM compared to OpenJDK so higher chance of finding bugs. Uncommon traps are not being set unlike OpenJDK probably because they use different optimizations so creating a fuzzer to target GraalVM optimizations could be interesting. + - Javabc - the compilation fails completely because of an irreducible loop when the graph size is too big. It does compile on small graphs and setting the MaxDuplicationFactor can increase that bounds. + - Java - all the inlining is failing for small and large graphs; it could be causing an error and is getting aborted(?) +- Generating semi-complex graphs - javabc is producing an irreducible loop that is not optimizable and in the Java fuzzer, each function is too simple to cause any bugs. Creating a fuzzer that does something in between the two might exercise the JIT compiler more. +- Concurrency - I've only tested running multiple paths concurrently. If the deoptimization is dealing with values in the registers real-time during deoptimization instead of only falling back to lower tiered code, it may be complex enough to be a source of bugs +- Dynamic dispatch - having an interface and calling different child class methods should trigger optimization/deoptimization which isn't tested in the current fuzzer. + + +Notes: +- Running the fuzzer with switching paths can be specified with ACTION='fuzz_with_changing_paths' in the argument +- I've renewed the wrapper to accept single or multiple paths. The normal one and multithread one are both in the root directory so copy-pasting it to the wrapper folder should switch the wrapper. +- JIT-related flags that I've used are in the java/javabc runner which is commented/uncommented to toggle +- Analyzer + - The logs can be specified in the setup_logs function under analyze.py + - It parses the xml and looks for tags task_queued, nmethod and task with method names that start with "TestCase" + - The tags are linked by compile_id to gather the statistics + - Occasionally, the hotspot log emits data in the under fragment tag and if important information is emitted there, the parser fails to find it and crashes sometimes. The information inside these tags is sometimes incomplete as well so I didn't know how to handle it so I just reran the fuzzer in case that happened. diff --git a/count_no_reflection.csv b/count_no_reflection.csv deleted file mode 100644 index df79927..0000000 --- a/count_no_reflection.csv +++ /dev/null @@ -1,2282 +0,0 @@ -# of invocation until it gets C1/OSR/C2 compiled -Graph size, C1, OSR, C2 -10, 211, , 63182 -10, 215, 63159, 70621 -10, 898, , 64115 -10, 479, 70260, 214244 -10, 339, , 60825 -10, 282, 69014, 140685 -10, 264, , 60863 -10, 516, 60705, 93797 -10, 277, , 67158 -10, 260, 60414, 84769 -10, 362, , 60892 -10, 218, , 62608 -10, 260, 60486, 88516 -10, 233, , 67072 -10, 279, 65843, 138787 -10, 512, , 61605 -10, 669, , 64291 -10, 587, , 61014 -10, 613, , 61048 -10, 296, 60406, 69170 -11, 884, , 61020 -11, 638, , 61144 -11, 770, , 64013 -11, 353, , 61106 -11, 1348, , 61332 -11, 594, , 61151 -11, 324, , 60912 -11, 637, , 61151 -11, 915, , 61014 -11, 599, , 61353 -11, 526, , 61010 -11, 967, , 61234 -11, 640, , 64214 -11, 753, , 61185 -11, 619, , 61006 -11, 624, , 61004 -11, 512, , 61102 -11, 497, , 60977 -11, 883, , 61263 -11, 570, , 61322 -12, 492, , 61377 -12, 1032, , 61025 -12, 377, , 64185 -12, 661, , 61228 -12, 512, , 61142 -12, 784, , 61205 -12, 454, , 61069 -12, 419, , 61079 -12, 336, , 63984 -12, 1041, , 61181 -12, 904, , 61133 -12, 284, , 63910 -12, 280, , 66002 -12, 753, , 61157 -12, 400, , 60940 -12, 512, , 67285 -12, 704, , 64260 -12, 411, , 61042 -12, 961, , 61197 -12, 327, , 60978 -13, 407, , 61069 -13, 1158, , 61043 -13, 1014, , 61213 -13, 455, , 60961 -13, 508, , 60991 -13, 651, , 61127 -13, 487, , 60980 -119677 -13, 265, , 65882 -13, 320, , 60843 -13, 328, , 60845 -13, 546, , 67565 -13, 583, , 61369 -13, 272, , 69575 -13, 526, , 60997 -13, 301, , 70736 -13, 293, , 70575 -13, 1154, , 61167 -13, 295, , 67587 -13, 584, , 61171 -13, 1347, , 61211 -14, 580, , 61168 -14, 945, , 61624 -14, 1034, , 61231 -14, 948, , 67146 -14, 1450, , 61260 -14, 327, , 60883 -14, 1472, , 61038 -14, 976, , 61597 -14, 835, , 61278 -14, 1273, , 61021 -14, 1091, , 61052 -14, 1474, , 61927 -14, 1389, , 61037 -14, 531, , 61186 -14, 448, , 61119 -14, 365, , 64046 -14, 1135, , 61006 -14, 298, , 60821 -96359 -14, 772, , 61145 -14, 512, , 61001 -15, 451, , 61228 -15, 775, , 60998 -15, 619, , 61527 -15, 391, , 61033 -15, 921, , 61094 -15, 339, , 70129 -15, 737, , 61184 -95442 -15, 676, , 61133 -15, 572, , 61027 -15, 682, , 61144 -15, 506, , 61512 -15, 759, , 61028 -15, 391, , 60935 -15, 677, , 61172 -15, 788, , 61158 -15, 433, , 61123 -15, 1088, , 67404 -15, 398, , 61215 -15, 951, , 61010 -15, 282, , 60834 -16, 198, 64928, 68139 -16, 344, , 60915 -16, 196, 57389, 59634 -16, 796, , 67155 -16, 259, , 70210 -16, 278, , 66668 -16, 364, , 61012 -16, 290, 67643, 132780 -16, 376, , 60982 -16, 261, , 70936 -16, 339, , 60810 -16, 267, 62902, 100823 -16, 551, , 60984 -16, 512, , 60980 -16, 348, , 60903 -16, 294, , 64069 -16, 176, 32505, 49364 -16, 491, , 61486 -16, 259, , 62742 -16, 356, , 67117 -17, 292, , 66802 -17, 881, , 61173 -17, 471, , 60973 -17, 1318, , 61253 -17, 424, , 60947 -17, 1029, , 67188 -17, 1169, , 61560 -17, 1023, , 61212 -17, 1259, , 61219 -17, 959, , 61030 -17, 339, , 61111 -17, 371, , 60974 -97724 -17, 1233, , 61201 -17, 457, , 61152 -17, 810, , 61026 -17, 394, , 60913 -17, 576, , 64277 -17, 1394, , 61031 -17, 543, , 61127 -17, 504, , 61129 -18, 261, , 70568 -18, 339, , 60892 -18, 602, , 61264 -18, 719, , 70281 -18, 409, , 60906 -18, 701, , 61133 -18, 400, , 60993 -18, 961, , 61290 -18, 315, , 60922 -18, 1085, , 61033 -18, 383, , 61147 -18, 696, , 67561 -18, 329, , 60884 -18, 427, , 64164 -18, 388, , 61013 -18, 281, , 64153 -18, 436, , 61250 -18, 1276, , 61119 -18, 459, , 61112 -18, 438, , 61132 -19, 299, 60490, 96767 -19, 462, , 61412 -19, 294, , 60781 -19, 402, , 61033 -19, 1373, , 61100 -19, 393, 60534, 80545 -19, 759, , 61021 -19, 353, , 60946 -98495 -19, 666, , 61041 -19, 732, , 61259 -19, 485, , 64221 -19, 573, , 61366 -19, 735, , 61219 -19, 265, , 60749 -19, 700, , 61286 -19, 349, , 60936 -19, 447, , 61084 -19, 512, , 61454 -19, 637, , 61023 -19, 574, , 61133 -20, 1166, , 61223 -20, 512, , 61135 -20, 1072, , 61158 -20, 874, , 61356 -20, 275, , 65839 -20, 527, , 61178 -20, 512, , 61165 -20, 1096, , 61266 -20, 386, , 60887 -20, 422, , 61281 -20, 260, , 64533 -20, 291, , 60863 -20, 367, , 60874 -20, 559, , 61412 -20, 593, , 61165 -20, 944, , 61230 -20, 411, , 60912 -20, 496, , 61004 -20, 1492, , 61228 -20, 1184, , 61435 -21, 331, , 60905 -21, 403, , 61003 -21, 573, , 61015 -21, 830, , 61176 -21, 1299, , 61040 -21, 360, , 60975 -21, 1006, , 61087 -21, 788, , 61275 -21, 263, , 60811 -21, 289, , 66436 -21, 568, , 61018 -21, 775, , 61553 -21, 325, , 60844 -21, 493, , 60988 -21, 1156, , 61050 -21, 379, , 60995 -21, 996, , 61253 -21, 461, , 61067 -21, 482, , 61102 -21, 694, , 61598 -22, 1182, , 61010 -22, 257, , 65774 -22, 296, , 60787 -22, 585, , 61107 -22, 1143, , 61207 -22, 406, , 61040 -22, 436, , 60982 -22, 355, , 60973 -22, 832, , 61213 -22, 1097, , 61216 -22, 268, , 65272 -22, 910, , 70397 -22, 512, , 61070 -22, 1418, , 61145 -22, 510, , 61012 -22, 538, , 61027 -22, 512, , 60989 -22, 592, , 60992 -22, 1211, , 61169 -22, 717, , 61543 -23, 392, , 61050 -23, 280, , 67513 -23, 512, , 61115 -23, 512, , 61001 -23, 442, , 61301 -167477 -23, 1009, , 61689 -23, 291, , 68810 -23, 281, , 68317 -23, 404, , 61014 -23, 509, , 61156 -23, 400, , 67432 -23, 810, , 61211 -23, 409, , 61041 -23, 593, , 61211 -23, 512, , 61070 -23, 360, , 60965 -23, 1012, , 67485 -23, 481, , 70335 -23, 749, , 70478 -23, 512, , 61104 -24, 512, , 61155 -24, 443, , 61305 -24, 305, , 64859 -24, 512, , 61100 -24, 287, , 64094 -24, 295, , 64216 -24, 728, , 67311 -24, 695, , 67345 -24, 329, , 61069 -24, 714, , 61155 -24, 401, , 60972 -24, 356, , 60958 -24, 512, , 61109 -24, 262, , 69337 -24, 364, , 60879 -24, 412, , 61122 -24, 587, , 60985 -24, 512, , 61151 -24, 512, , 60978 -24, 843, , 61040 -25, 1511, , 61012 -25, 275, , 66909 -25, 476, , 61088 -25, 350, , 60932 -25, 307, , 60913 -25, 265, , 60782 -25, 447, , 60968 -25, 514, , 61072 -25, 650, , 67142 -25, 323, , 60817 -25, 1734, , 70519 -25, 618, , 61227 -25, 285, , 68441 -25, 256, , 67145 -25, 1068, , 61109 -25, 356, , 60885 -25, 451, , 61074 -25, 264, , 69761 -144298 -25, 830, , 60988 -25, 512, , 60972 -26, 295, , 68748 -26, 857, , 61107 -26, 480, , 67145 -26, 276, , 62484 -26, 557, , 67260 -26, 289, , 66053 -26, 1475, , 62119 -26, 341, , 61113 -92097 -26, 259, , 64783 -26, 267, , 64339 -26, 283, , 67469 -26, 290, , 62803 -26, 268, , 62550 -26, 378, , 61005 -26, 423, , 60955 -26, 1199, , 67168 -26, 1503, , 61223 -26, 294, , 61010 -26, 259, , 70212 -73768 -26, 896, , 61132 -27, 1128, , 61654 -27, 468, , 60980 -27, 1095, , 60980 -27, 604, , 60991 -27, 586, , 61044 -27, 387, , 61129 -27, 378, , 60922 -27, 835, , 70767 -27, 666, , 61200 -27, 716, , 61141 -27, 649, , 61311 -27, 261, , 65545 -27, 464, , 61089 -27, 512, , 61548 -27, 512, , 64076 -27, 293, , 65240 -27, 499, , 61419 -27, 1087, , 61339 -27, 1468, , 61219 -27, 1571, , 61195 -28, 574, , 61293 -28, 606, , 61173 -28, 512, , 61091 -28, 815, , 61202 -28, 443, , 60977 -28, 851, , 61188 -28, 315, , 60836 -28, 1166, , 61248 -28, 512, , 60987 -28, 263, , 64268 -28, 709, , 67251 -28, 323, , 60891 -28, 1242, , 61350 -28, 558, , 61183 -28, 335, , 61020 -28, 977, , 61272 -28, 595, , 61018 -28, 280, , 63864 -28, 465, , 61143 -28, 680, , 60994 -29, 277, , 69545 -29, 594, , 61144 -29, 451, , 61070 -29, 394, , 61044 -29, 595, , 61418 -29, 339, , 61028 -29, 301, , 68629 -29, 275, , 66324 -29, 400, , 61038 -29, 270, , 65601 -29, 807, , 61202 -29, 339, , 60921 -29, 512, , 60993 -29, 936, , 61205 -29, 1092, , 61275 -29, 433, , 61252 -29, 399, , 61014 -29, 512, , 61097 -29, 859, , 61240 -29, 298, , 60806 -30, 256, , 63853 -30, 283, , 66487 -30, 777, , 60990 -30, 1010, , 61051 -30, 261, , 60833 -114891 -30, 502, , 61123 -30, 280, , 63368 -30, 319, , 61103 -30, 505, , 60981 -30, 290, , 65578 -30, 281, , 64351 -30, 351, , 60956 -30, 277, , 62921 -30, 271, , 62785 -30, 351, , 60935 -30, 1108, , 61274 -30, 508, , 61361 -30, 332, , 60942 -30, 360, , 64072 -97363 -30, 913, , 61067 -31, 393, , 60975 -31, 609, , 61142 -31, 325, , 60931 -31, 512, , 60997 -31, 504, , 61402 -31, 499, , 61157 -31, 1353, , 67412 -31, 512, , 61098 -31, 512, , 64071 -31, 272, , 62711 -31, 310, , 60920 -31, 318, , 60897 -31, 277, , 66516 -31, 1151, , 61697 -31, 896, , 61568 -31, 260, , 60784 -31, 512, , 64170 -31, 901, , 61550 -31, 584, , 61168 -31, 382, , 61148 -32, 263, , 67853 -32, 1543, , 61288 -32, 670, , 61518 -32, 1139, , 61034 -32, 512, , 60975 -32, 324, , 60897 -32, 289, , 68303 -32, 1045, , 61232 -32, 288, , 67341 -32, 269, , 64379 -32, 263, , 66489 -32, 990, , 61032 -32, 286, , 65580 -32, 404, , 61186 -32, 281, , 66110 -32, 512, , 61427 -32, 431, , 61069 -32, 986, , 61057 -32, 512, , 61247 -32, 358, , 61016 -33, 283, , 65899 -33, 628, , 67164 -33, 278, , 70794 -33, 1091, , 61057 -33, 261, , 68316 -33, 427, , 61073 -33, 639, , 61179 -33, 343, , 60972 -33, 536, , 64221 -33, 518, , 61355 -33, 622, , 64080 -33, 851, , 61151 -33, 647, , 70246 -33, 481, , 61480 -33, 292, , 68012 -33, 566, , 61429 -33, 325, , 60842 -33, 512, , 61115 -33, 506, , 61017 -33, 512, , 61107 -34, 286, , 64574 -34, 356, , 60932 -34, 269, , 65145 -34, 445, , 61077 -34, 1081, , 61229 -34, 1437, , 61210 -34, 727, , 61180 -34, 1282, , 67237 -34, 1437, , 61115 -34, 352, , 60880 -34, 1193, , 64086 -34, 279, , 67622 -34, 300, , 60946 -34, 390, , 61033 -34, 291, , 6638 -34, 588, , 61002 -34, 310, , 60869 -34, 1633, , 61261 -34, 512, , 60984 -34, 279, , 64199 -35, 1058, , 60993 -35, 260, , 63079 -35, 578, , 70375 -35, 387, , 61039 -35, 263, , 60897 -123023 -35, 810, , 60982 -35, 263, , 69875 -35, 512, , 61313 -35, 300, , 60876 -96658 -35, 261, , 71068 -35, 393, , 61059 -35, 653, , 61016 -35, 669, , 61025 -35, 874, , 61002 -35, 301, , 61024 -35, 922, , 61146 -35, 726, , 64083 -35, 265, , 9804 -35, 276, , 2383 -35, 512, , 61432 -36, 265, , 4685 -36, 732, , 61177 -36, 425, , 60964 -36, 625, , 61116 -36, 749, , 61001 -36, 345, , 61007 -36, 261, , 3666 -36, 299, , 3506 -36, 262, , 60777 -36, 683, , 60969 -36, 608, , 64257 -36, 571, , 61144 -36, 367, , 60972 -36, 261, , 63844 -36, 734, , 61206 -36, 256, , 30552 -36, 262, , 65518 -36, 289, , 61000 -36, 292, , 61015 -36, 512, , 61121 -37, 288, , 62906 -37, 259, , 4887 -37, 446, , 61414 -37, 408, , 61094 -37, 665, , 61206 -37, 261, , 60802 -37, 424, , 61051 -37, 378, , 60939 -37, 492, , 64113 -37, 925, , 64085 -37, 280, , 3545 -37, 334, , 60874 -97621 -37, 263, , 3504 -37, 394, , 61041 -37, 268, , 62810 -37, 420, , 60988 -37, 512, , 61389 -37, 305, , 60915 -37, 287, , 60889 -37, 512, , 60982 -38, 262, , 60865 -102009 -38, 1622, , 61239 -38, 263, , 5450 -38, 321, , 60966 -38, 512, , 60977 -38, 512, , 61594 -38, 289, , 66054 -38, 342, , 60948 -38, 1000, , 61070 -38, 285, , 65975 -38, 478, , 61094 -38, 297, , 60847 -38, 814, , 61198 -38, 375, , 61011 -38, 277, , 4523 -38, 428, , 61108 -38, 305, , 60907 -38, 269, , 64998 -105940 -38, 512, , 67691 -38, 1623, , 61568 -39, 454, , 61068 -39, 281, , 6450 -39, 396, , 61097 -39, 1261, , 60994 -39, 512, , 61001 -39, 512, , 61157 -39, 447, , 61132 -39, 773, , 61228 -39, 276, , 64404 -39, 261, , 3560 -39, 512, , 61130 -39, 421, , 67535 -39, 1012, , 61237 -39, 271, , 60798 -39, 1135, , 61603 -39, 438, , 60988 -39, 283, , 6447 -39, 368, , 64191 -39, 332, , 67131 -39, 512, , 61155 -40, 467, , 60987 -40, 461, , 61113 -40, 373, , 61269 -117543 -40, 292, , 4541 -40, 388, , 61228 -40, 745, , 61193 -40, 297, , 60882 -40, 508, , 67136 -40, 512, , 61097 -40, 262, , 60886 -40, 1169, , 64078 -40, 261, , 70643 -40, 260, , 60839 -40, 338, , 60878 -40, 414, , 61066 -40, 512, , 61008 -40, 412, , 61294 -40, 459, , 61075 -40, 674, , 61007 -40, 397, , 60971 -41, 959, , 61001 -41, 359, , 61137 -41, 284, , 63868 -41, 482, , 61004 -41, 301, , 60929 -41, 609, , 61425 -41, 348, , 60881 -41, 330, , 60873 -41, 491, , 60959 -41, 294, , 9207 -41, 700, , 61204 -41, 275, , 3470 -41, 349, , 60886 -41, 357, , 61015 -41, 377, , 60997 -116389 -41, 1668, , 61354 -41, 521, , 61423 -41, 284, , 64296 -41, 992, , 61286 -41, 277, , 7368 -42, 408, , 61193 -42, 1271, , 64349 -42, 379, , 61065 -42, 512, , 61334 -42, 893, , 61543 -42, 719, , 61049 -42, 1562, , 61196 -42, 491, , 61107 -42, 421, , 61033 -42, 399, , 61380 -42, 260, , 2397 -42, 795, , 61104 -42, 281, , 9014 -42, 296, , 3429 -42, 796, , 61634 -42, 499, , 61033 -42, 284, , 63060 -42, 367, , 60979 -42, 300, , 63480 -42, 279, , 62774 -43, 353, , 60971 -43, 434, , 60955 -43, 264, , 4629 -43, 761, , 67171 -43, 322, , 60970 -43, 347, , 60907 -120887 -43, 357, , 60950 -43, 388, , 61072 -43, 266, , 62174 -43, 1017, , 61220 -43, 528, , 61130 -43, 263, , 4533 -43, 279, , 62348 -43, 395, , 60976 -43, 366, , 60982 -43, 1514, , 64316 -43, 897, , 61248 -43, 743, , 61152 -43, 428, , 61243 -43, 374, , 60972 -44, 280, , 3419 -44, 462, , 61108 -44, 266, , 60796 -44, 455, , 61002 -44, 312, , 60946 -44, 467, , 60975 -44, 371, , 60911 -44, 688, , 61828 -44, 512, , 61004 -44, 320, , 4577 -44, 274, , 62450 -67577 -44, 397, , 60966 -44, 398, , 61058 -44, 419, , 61292 -44, 455, , 61233 -44, 343, , 61007 -44, 293, , 69327 -44, 324, , 60861 -44, 263, , 60860 -44, 490, , 61135 -45, 312, , 9747 -45, 269, , 62604 -45, 329, 60658, 96901 -45, 270, , 4516 -45, 273, , 62905 -45, 512, , 61130 -45, 260, , 3071 -45, 997, , 60997 -45, 501, , 61087 -45, 278, , 5486 -45, 343, , 60996 -45, 586, , 61049 -45, 480, , 61160 -45, 277, , 7627 -45, 278, , 5564 -45, 353, , 60961 -45, 260, , 7047 -45, 512, , 61348 -45, 279, , 8922 -45, 262, , 3428 -46, 512, , 61141 -46, 347, , 60891 -100195 -46, 276, , 69099 -46, 291, , 60880 -46, 261, , 63849 -46, 297, , 66470 -46, 289, , 10165 -46, 429, , 67255 -46, 360, , 61125 -46, 344, , 60984 -46, 349, , 60992 -46, 261, , 3442 -46, 341, , 61011 -46, 448, , 61135 -115627 -46, 512, , 61003 -46, 384, , 61094 -46, 273, , 63224 -46, 431, , 61094 -46, 300, , 60923 -46, 295, , 60841 -47, 469, , 61093 -47, 385, , 60978 -47, 387, , 61234 -47, 272, , 2379 -47, 512, , 64258 -47, 876, , 61234 -47, 512, , 61617 -47, 310, , 10890 -47, 302, , 60924 -47, 915, , 61126 -47, 640, , 61202 -47, 512, , 61198 -47, 438, , 61054 -47, 512, , 61204 -47, 292, , 60909 -47, 259, , 5494 -47, 266, , 67776 -47, 512, , 64290 -47, 490, , 61120 -47, 566, , 61026 -48, 440, , 61097 -48, 521, , 64146 -48, 270, , 63410 -48, 432, , 61073 -48, 265, , 63949 -48, 274, , 2471 -48, 296, , 5745 -48, 325, , 60996 -48, 715, , 64721 -48, 354, , 61057 -48, 259, , 64100 -48, 1371, , 61042 -48, 525, , 61073 -48, 299, , 60899 -48, 293, , 70261 -48, 345, , 60962 -48, 319, , 60924 -48, 512, , 61003 -48, 592, , 61420 -48, 512, , 61132 -49, 333, , 60963 -96365 -49, 604, , 70315 -49, 502, , 61060 -49, 257, , 60883 -49, 280, , 8082 -49, 278, , 62444 -49, 262, , 68541 -49, 902, , 61677 -49, 408, , 64102 -49, 381, , 61076 -49, 805, , 61055 -49, 512, , 61106 -49, 278, , 2382 -49, 331, , 61083 -49, 260, , 60838 -49, 264, , 63996 -49, 436, , 61054 -49, 1003, , 61054 -49, 262, , 3520 -49, 408, , 64149 -50, 512, , 61450 -50, 450, , 61002 -50, 674, , 67461 -50, 465, , 61059 -50, 294, , 4536 -50, 512, , 61152 -50, 306, , 4538 -50, 427, , 60996 -50, 274, , 4450 -50, 297, , 6809 -50, 491, , 61014 -50, 753, , 64512 -50, 302, , 60868 -50, 330, , 60953 -50, 594, , 61331 -50, 258, , 60905 -50, 1541, , 61069 -50, 284, , 3575 -50, 355, , 61228 -116959 -50, 277, , 3442 -51, 512, , 61122 -51, 263, , 4475 -51, 512, , 61405 -51, 281, , 5891 -51, 299, , 60916 -51, 361, , 60929 -51, 758, , 61215 -51, 598, , 61024 -51, 283, , 3419 -41433 -51, 358, , 61058 -51, 281, , 64475 -51, 267, , 3445 -51, 276, , 9217 -51, 512, , 61268 -51, 262, , 11263 -51, 268, , 2387 -51, 946, , 61898 -51, 288, , 61005 -51, 277, , 5562 -51, 477, , 61160 -52, 512, , 61451 -52, 284, , 6036 -52, 907, , 61127 -52, 287, , 64733 -52, 1716, , 61053 -52, 740, , 61260 -52, 431, , 64090 -52, 512, , 61148 -52, 460, , 61030 -52, 688, , 61076 -52, 462, , 61080 -52, 403, , 61085 -52, 276, , 62009 -52, 274, , 63876 -52, 350, , 60996 -52, 862, , 61815 -52, 1629, , 61298 -52, 745, , 61261 -52, 278, , 5770 -52, 350, , 61290 -53, 512, , 67195 -53, 618, , 60995 -53, 915, , 61732 -53, 692, , 61611 -53, 310, , 61113 -53, 649, , 61423 -53, 290, , 8664 -53, 299, , 64195 -53, 512, , 61025 -53, 470, , 60989 -53, 311, , 61022 -53, 415, , 61129 -53, 724, , 64323 -53, 814, , 61041 -53, 279, , 6739 -41363 -53, 377, , 61035 -53, 287, , 63971 -70266 -53, 512, , 61016 -53, 262, , 6757 -53, 835, , 61200 -54, 380, , 60993 -54, 260, , 7632 -54, 256, , 63939 -54, 263, , 13249 -54, 286, , 5589 -54, 966, , 61249 -54, 416, , 61049 -54, 276, , 4517 -54, 582, , 61175 -54, 290, , 12177 -54, 291, , 60870 -54, 703, , 61209 -54, 432, , 61000 -54, 398, , 64153 -54, 333, , 61038 -54, 1064, , 70233 -54, 873, , 61209 -54, 467, , 61177 -54, 260, , 8917 -54, 406, , 61185 -55, 439, , 61085 -55, 338, , 60909 -55, 512, , 61152 -55, 678, , 61156 -55, 261, , 60827 -55, 297, , 60884 -55, 501, , 61400 -55, 512, , 61247 -55, 512, , 61184 -55, 565, , 61229 -55, 512, , 61307 -55, 512, , 61121 -55, 277, , 7677 -55, 264, , 65671 -74780 -55, 372, , 61307 -55, 512, , 61128 -55, 512, , 61027 -55, 618, , 61173 -55, 500, , 61428 -55, 512, , 64100 -56, 282, , 64283 -56, 428, , 61165 -56, 512, , 61285 -56, 267, , 6920 -46022 -56, 512, , 61405 -56, 496, , 61000 -56, 270, , 3496 -56, 320, , 6865 -56, 696, , 70476 -56, 484, , 60993 -56, 467, , 60986 -56, 450, , 61133 -56, 552, , 61162 -56, 533, , 67577 -56, 1411, , 61585 -56, 287, , 6462 -56, 669, , 61294 -56, 440, , 61080 -56, 369, , 61157 -56, 265, , 68058 -57, 294, , 9835 -57, 276, , 5493 -57, 512, , 61102 -57, 477, , 61010 -57, 290, , 63954 -57, 339, , 60985 -57, 432, , 61096 -57, 399, , 60994 -57, 286, , 5531 -57, 340, , 13422 -57, 291, , 6716 -57, 379, , 61183 -57, 329, , 61173 -57, 268, , 5614 -57, 276, , 4457 -57, 419, , 61066 -57, 496, , 61084 -57, 281, , 15664 -172333 -57, 512, , 61051 -57, 265, , 6593 -58, 512, , 61008 -58, 453, , 61270 -58, 261, , 5538 -58, 401, , 61070 -58, 303, , 61132 -58, 307, , 8666 -58, 512, , 61106 -58, 1610, , 61074 -58, 284, , 8865 -58, 450, , 61633 -58, 390, , 60994 -58, 606, , 61291 -58, 350, , 61023 -58, 267, , 4509 -58, 275, , 3412 -58, 512, , 61167 -58, 479, , 60994 -58, 365, , 7767 -58, 512, , 61546 -58, 358, , 61071 -59, 291, , 7810 -59, 512, , 61161 -59, 317, , 60957 -59, 483, , 61253 -59, 282, , 7923 -59, 516, , 61191 -59, 287, , 8935 -59, 512, , 61187 -59, 289, , 13110 -59, 512, , 61120 -59, 325, , 61001 -59, 289, , 6970 -43643 -59, 512, , 61149 -59, 356, , 61257 -59, 260, , 10172 -59, 545, , 61184 -59, 512, , 61125 -59, 377, , 61003 -59, 741, , 61610 -59, 290, , 9924 -60, 873, , 61254 -60, 736, , 64137 -60, 277, , 12530 -60, 328, , 8772 -60, 768, , 61223 -60, 317, , 60981 -60, 512, , 61105 -60, 291, , 12419 -60, 1268, , 61703 -60, 410, , 61046 -60, 384, , 61102 -60, 263, , 8690 -60, 385, , 61036 -60, 512, , 61129 -60, 512, , 61001 -60, 487, , 61082 -60, 453, , 61101 -60, 512, , 61060 -60, 401, , 70376 -60, 262, , 60845 -116847 -61, 258, , 60853 -61, 377, , 60981 -61, 289, , 5541 -61, 290, , 7586 -61, 283, , 60847 -61, 290, , 60906 -61, 263, , 63932 -61, 512, , 61200 -61, 260, , 4435 -61, 260, , 60912 -61, 744, , 61246 -61, 263, , 5428 -61, 657, , 61056 -61, 435, , 61070 -61, 360, , 61185 -61, 273, , 4536 -61, 392, , 61155 -61, 510, , 61109 -61, 290, , 5543 -61, 315, , 60947 -62, 467, , 61122 -62, 477, , 61399 -62, 512, , 61087 -62, 350, , 61163 -62, 288, , 60860 -62, 271, , 5524 -62, 273, , 4473 -62, 512, , 61136 -62, 293, , 60967 -62, 1031, , 61882 -62, 450, , 61064 -120193 -62, 306, , 61156 -62, 830, , 61208 -62, 512, , 67279 -62, 282, , 60854 -62, 411, , 61073 -62, 296, , 60912 -62, 288, , 5537 -62, 512, , 61277 -62, 300, , 60873 -63, 512, , 61168 -63, 274, , 4496 -63, 267, , 60850 -63, 292, , 60815 -63, 311, , 61157 -63, 281, , 8635 -63, 1742, , 61082 -63, 354, , 61138 -63, 284, , 11942 -63, 1421, , 61244 -63, 291, , 8545 -63, 324, , 61092 -63, 512, , 61071 -63, 258, , 5562 -63, 278, , 60800 -63, 305, , 60981 -63, 321, , 60945 -63, 376, , 61090 -63, 512, , 64162 -63, 261, , 8980 -64, 437, , 61983 -64, 406, , 60999 -64, 479, , 61142 -64, 512, , 61016 -64, 271, , 60825 -64, 408, , 61072 -64, 671, , 61557 -64, 512, , 61020 -64, 361, , 61260 -64, 282, , 9746 -64, 306, , 60967 -64, 732, , 61052 -64, 429, , 61065 -64, 478, , 61077 -64, 396, , 60995 -64, 550, , 61212 -64, 512, , 61658 -64, 287, , 5568 -64, 374, , 61034 -64, 512, , 61012 -65, 288, , 6676 -65, 273, , 9970 -65, 434, , 61300 -65, 433, , 61054 -65, 257, , 5490 -65, 365, , 61117 -65, 512, , 61115 -65, 264, , 7762 -65, 260, , 60784 -65, 381, , 61074 -65, 280, , 60933 -65, 512, , 61554 -65, 512, , 61136 -65, 348, , 60980 -65, 655, , 61526 -65, 491, , 61202 -65, 368, , 61089 -65, 323, , 60984 -65, 283, , 7505 -65, 490, , 64185 -66, 263, , 47486 -66, 512, , 61345 -66, 512, , 61141 -66, 512, , 61114 -66, 258, , 2404 -66, 324, , 60982 -66, 508, , 61099 -66, 766, , 61616 -66, 512, , 61274 -66, 432, , 61002 -66, 512, , 61198 -66, 398, , 61075 -66, 278, , 7920 -66, 512, , 64231 -66, 345, , 61034 -66, 827, , 61552 -66, 512, , 61346 -66, 405, , 61184 -66, 286, , 11216 -66, 454, , 61287 -175697 -67, 343, , 60962 -67, 279, , 61156 -67, 315, , 61026 -67, 683, , 61028 -67, 279, , 5499 -67, 283, , 12315 -67, 646, , 61616 -67, 372, , 61074 -67, 603, , 61203 -67, 386, , 61273 -117679 -67, 259, , 60775 -67, 512, , 60990 -67, 263, , 60975 -67, 907, , 61017 -67, 284, , 5612 -67, 512, , 61013 -67, 285, , 6643 -67, 830, , 62181 -67, 512, , 61167 -67, 265, , 60830 -68, 275, , 60766 -68, 270, , 5512 -68, 296, , 61023 -68, 460, , 61260 -68, 508, , 60985 -68, 451, , 60990 -114674 -68, 262, , 61000 -68, 672, , 61172 -68, 337, , 61008 -68, 512, , 60978 -68, 430, , 60999 -68, 275, , 5499 -68, 299, , 6651 -68, 266, , 60922 -68, 512, , 61168 -68, 512, , 61031 -68, 346, , 61137 -68, 264, , 60895 -68, 443, , 61151 -68, 319, , 60980 -69, 493, , 61414 -69, 356, , 61168 -69, 281, , 5501 -69, 349, , 61021 -114448 -69, 512, , 61484 -69, 512, , 61360 -69, 259, , 7701 -69, 376, , 61002 -69, 284, , 9742 -69, 475, , 61007 -69, 263, , 3402 -69, 419, , 64199 -69, 280, , 56665 -69, 512, , 61104 -69, 323, , 61036 -69, 288, , 8716 -69, 275, , 60794 -69, 286, , 60860 -69, 262, , 60934 -69, 274, , 6583 -70, 269, , 8662 -70, 512, , 61155 -70, 296, , 10774 -70, 382, , 61036 -70, 512, , 61036 -70, 345, , 61258 -70, 300, , 9466 -70, 268, , 5542 -70, 1572, , 61246 -70, 326, , 60964 -70, 354, , 60984 -70, 291, , 7598 -70, 321, , 60937 -70, 695, , 61057 -70, 424, , 60990 -70, 261, , 6557 -70, 512, , 61066 -70, 371, , 61095 -70, 459, , 67140 -70, 267, , 60843 -71, 1048, , 64157 -71, 750, , 61078 -71, 512, , 61122 -71, 680, , 61368 -71, 1417, , 62029 -71, 302, , 60983 -71, 266, , 60884 -71, 509, , 61064 -71, 512, , 61116 -71, 309, , 60932 -71, 347, , 61031 -71, 421, , 61064 -71, 347, , 61042 -96799 -71, 394, , 61093 -71, 304, , 60869 -71, 512, , 61390 -71, 278, , 60864 -71, 263, , 3436 -71, 458, , 61206 -71, 512, , 67729 -72, 263, , 60932 -72, 386, , 61020 -72, 320, , 61101 -72, 258, , 4426 -72, 662, , 61048 -72, 512, , 61033 -72, 320, , 61088 -72, 276, , 4526 -72, 335, , 61058 -72, 275, , 8683 -72, 266, , 60933 -72, 426, , 60997 -72, 512, , 61011 -72, 273, , 5539 -72, 410, , 61018 -72, 512, , 61420 -72, 277, , 60785 -72, 1293, , 61232 -72, 290, , 6553 -72, 394, , 60983 -73, 267, , 4463 -73, 263, , 3455 -73, 272, , 60790 -73, 273, , 60885 -113248 -73, 259, , 2339 -73, 512, , 61693 -73, 264, , 60982 -73, 272, , 60782 -73, 260, , 60860 -73, 259, , 61013 -73, 314, , 10797 -73, 454, , 61057 -73, 282, , 7694 -73, 268, , 2379 -73, 512, , 61005 -73, 268, , 4460 -73, 298, , 60934 -73, 259, , 60801 -73, 408, , 64293 -73, 267, , 5515 -74, 292, , 60908 -74, 259, , 4493 -74, 296, , 61037 -74, 512, , 61457 -74, 474, , 61015 -74, 336, , 61032 -74, 512, , 64101 -74, 512, , 60974 -74, 280, , 10776 -74, 278, , 60858 -74, 267, , 5474 -74, 293, , 60983 -74, 408, , 61189 -74, 274, , 60826 -74, 515, , 61037 -74, 512, , 61147 -74, 437, , 60997 -74, 278, , 60853 -108736 -74, 298, , 6661 -74, 313, , 60997 -120361 -75, 329, , 61039 -75, 259, , 28984 -75, 275, , 7594 -75, 265, , 5502 -75, 540, , 61237 -75, 290, , 60882 -75, 283, , 60893 -75, 512, , 61142 -75, 1055, , 64302 -75, 443, , 61068 -75, 512, , 61357 -75, 1182, , -75, 348, , 61065 -75, 765, , 61238 -75, 749, , 61237 -75, 415, , 60993 -75, 1653, , 61571 -75, 267, , 4442 -75, 509, , 61310 -75, 316, , 61046 -76, 272, , 60869 -76, 512, , 64256 -76, 512, , 61127 -76, 750, , 61217 -76, 425, , 60987 -76, 458, , 61114 -76, 512, , 61547 -76, 285, , 5516 -76, 759, , 61068 -76, 265, , 60904 -76, 383, , 60994 -76, 388, , 61066 -76, 260, , 60832 -76, 512, , 61226 -76, 1302, , 61258 -76, 376, , 61086 -76, 349, , 60976 -76, 480, , 61147 -76, 516, , 61043 -76, 340, , 61078 -77, 512, , 61497 -77, 512, , 61153 -77, 584, , 61252 -77, 272, , 5495 -77, 276, , 60909 -77, 512, , 61152 -77, 1439, , 61209 -77, 512, , 61180 -77, 279, , 60822 -77, 328, , 61042 -77, 326, , 61022 -116032 -77, 261, , 60913 -77, 279, , 7726 -77, 294, , 64018 -77, 261, , 60841 -77, 290, , 61052 -77, 327, , 61031 -77, 331, , 61151 -77, 258, , 8633 -77, 512, , 61206 -78, 341, , 61063 -78, 270, , 60954 -78, 259, , 5556 -54884 -78, 270, , 60889 -78, 279, , 60961 -78, 265, , 4460 -78, 272, , 5570 -78, 325, , 61015 -78, 304, , 8725 -78, 461, , 61104 -78, 281, , 8781 -78, 366, , 61045 -78, 375, , 61257 -78, 1452, , 61203 -78, 273, , 6572 -78, 299, , 60933 -121845 -78, 276, , 60861 -78, 326, , 61017 -78, 270, , 61087 -78, 289, , 61186 -79, 362, , 61037 -79, 350, , 60987 -79, 268, , 60788 -79, 1230, , 61093 -79, 261, , 60889 -79, 310, , 60949 -79, 512, , 70642 -79, 487, , 61003 -79, 422, , 61061 -79, 533, , 60975 -79, 373, , 60995 -79, 451, , 61158 -79, 512, , 61125 -79, 366, , 61202 -79, 386, , 61025 -79, 512, , 61114 -79, 512, , 61106 -79, 276, , 60875 -79, 311, , 60958 -79, 789, , 61765 -80, 512, , 61284 -80, 434, , 61262 -115005 -80, 273, , 5531 -80, 322, , 64046 -80, 512, , 61170 -80, 372, , 61068 -80, 262, , 60878 -80, 512, , 61011 -80, 372, , 61095 -80, 278, , 60795 -80, 512, , 61137 -80, 291, , 60852 -100512 -80, 512, , 61115 -80, 447, , 61027 -80, 512, , 61184 -80, 447, , 61023 -143292 -80, 441, , 61292 -80, 363, , 61292 -116843 -80, 407, , 60990 -80, 291, , 8799 -81, 328, , 60966 -206293 -81, 260, , 60930 -81, 375, , 61045 -81, 338, , 60973 -81, 512, , 61555 -81, 279, , 8632 -81, 287, , 5572 -81, 289, , 6631 -81, 336, , 60970 -81, 257, , 61030 -81, 260, , 60798 -81, 268, , 60828 -81, 350, , 60998 -81, 294, , 60999 -81, 385, , 61034 -81, 312, , 60980 -81, 314, , 60967 -81, 273, , 60943 -81, 286, , 61014 -113656 -81, 458, , 61008 -82, 512, , 61449 -82, 301, , 61013 -82, 272, , 60779 -82, 512, , 61367 -82, 512, , 61330 -82, 512, , 60997 -82, 512, , 61055 -82, 512, , 61070 -82, 275, , 60851 -127295 -82, 296, , 61191 -82, 512, , 61254 -82, 451, , 64074 -82, 357, , 60976 -123407 -82, 278, , 60884 -82, 297, , 60961 -82, 351, , 60975 -82, 512, , 61673 -82, 373, , 61292 -82, 512, , 61109 -82, 512, , 61138 -83, 512, , 67746 -83, 512, , 61481 -83, 512, , 61101 -83, 419, , 61134 -122870 -83, 583, , 61052 -83, 399, , 64171 -83, 289, , 8644 -83, 434, , 61225 -83, 344, , 64032 -83, 512, , 61159 -83, 1244, , -83, 512, , 61321 -83, 512, , 61144 -83, 512, , 70368 -83, 1192, , 61274 -83, 512, , 61012 -83, 512, , 61852 -83, 512, , 61028 -83, 512, , 61489 -83, 296, , 60886 -84, 270, , 60781 -84, 512, , 61004 -84, 257, , 60771 -84, 293, , 61147 -84, 276, , 60933 -84, 279, , 60878 -84, 261, , 60860 -84, 512, , 61143 -84, 261, , 61037 -84, 447, , 67157 -84, 383, , 61249 -84, 512, , 61417 -84, 512, , 61242 -84, 512, , 61200 -84, 512, , -84, 265, , 60889 -84, 497, , 60995 -84, 261, , 60984 -122607 -84, 323, , 60971 -84, 512, , 61180 -85, 512, , 61115 -85, 512, , 61195 -85, 496, , 61095 -85, 272, , 60940 -85, 318, , 60953 -85, 321, , 60965 -85, 278, , 60811 -85, 277, , 60830 -85, 314, , 61011 -118045 -85, 282, , 60920 -85, 287, , 60899 -85, 512, , 61417 -85, 306, , 7738 -85, , , -85, 303, , 61191 -85, 277, , 60832 -85, 325, , 60976 -85, 260, , 60833 -85, 307, , 61029 -85, 512, , 61019 -86, 399, , 61023 -86, 512, , -86, 272, , 60823 -86, 512, , 61028 -86, 1533, , -86, 452, , 61070 -86, 1277, , -86, 279, , 60957 -86, 551, , -86, 512, , 60992 -86, 293, , 61037 -86, 295, , 7638 -86, 512, , -86, 353, , 61036 -86, 292, , 61031 -86, 395, , 61073 -86, 604, , 61193 -86, 303, , 60915 -86, , , -86, 512, , 64827 -87, 340, , 60967 -87, 260, , 60865 -87, 278, , 60897 -87, 503, , 61332 -87, 287, , 60839 -87, 278, , 60852 -87, 286, , 60943 -87, 512, , -87, 1334, , -87, 512, , -87, 276, , 60990 -87, 282, , 60870 -87, 284, , 60994 -87, 512, , 64284 -87, 262, , 60932 -87, 291, , 61037 -87, 375, , 64172 -87, 326, , 61047 -87, 292, , 60923 -87, 1243, , -88, 321, , 61060 -118535 -88, 270, , 61015 -88, 277, , 61099 -88, 436, , 61117 -88, 1333, , -88, 386, , 61020 -88, 335, , 61083 -88, 270, , 60927 -113956 -88, 409, , 61246 -88, 512, , -88, 276, , 60985 -114296 -88, 298, , 60952 -96795 -88, 354, , 60976 -88, 264, , 60986 -88, 289, , 60855 -88, 307, , 61234 -88, 445, , 61123 -88, 455, , 60987 -88, 512, , 61097 -88, 445, , 61201 -89, 512, , 61674 -89, 379, , 60970 -116656 -89, 270, , 60862 -89, 512, , 61097 -89, 512, , 61744 -89, 512, , 61161 -89, 512, , 61174 -89, 472, , 61143 -89, 512, , 61586 -89, 477, , 61003 -89, 338, , 61207 -89, 512, , 64386 -89, 308, , 61042 -89, 338, , 61034 -89, 288, , 60917 -89, 512, , 61088 -89, 512, , 61181 -89, 277, , 60949 -89, 353, , 61048 -89, 381, , 61060 -90, 512, , 61021 -90, 512, , 61542 -90, 1343, , -90, 512, , 61037 -90, , , -90, 264, , 60943 -90, 347, , 61237 -90, , , -90, 512, , -90, 286, , 60951 -90, 1146, , -90, 512, , -90, 261, , 60906 -90, 297, , 61098 -90, 512, , -90, 258, , 61079 -90, 274, , 60852 -90, 264, , 60999 -90, 286, , 61013 -90, 512, , -91, 512, , 67168 -91, 276, , 61007 -91, 343, , 61015 -91, 257, , 61043 -91, , , -91, 314, , 61031 -91, 373, , 61008 -91, 449, , 61050 -91, 302, , 60960 -91, 500, , 61159 -91, 463, , 61367 -91, 301, , 61034 -91, 319, , 60972 -91, 263, , 64052 -91, 384, , 61099 -91, 263, , 60917 -91, 504, , 61131 -91, 409, , 64063 -91, 270, , 60869 -91, 293, , 61033 -92, 512, , 61152 -92, 512, , -92, , , -92, 337, , 60967 -92, , , -92, 262, , 60977 -92, 308, , 61160 -92, 1174, , -92, , , -92, , , -92, 325, , 61035 -92, , , -92, 347, , 61166 -92, , , -92, 512, , 61425 -92, 512, , -92, , , -92, , , -92, 512, , -92, , , -93, 512, , -93, 468, , 61129 -93, , , -93, , , -93, 512, , 61078 -93, 512, , -93, , , -93, , , -93, 512, , -93, 365, , 61071 -93, 1463, , -93, 349, , 61031 -93, , , -93, 512, , -93, 512, , 61546 -93, 512, , -93, 421, , 61065 -93, , , -93, 512, , 61079 -93, , , -94, 464, , 61031 -94, 512, , 61178 -94, , , -94, 512, , -94, 297, , 60977 -94, , , -94, 349, , 61049 -94, 1052, , -94, 512, , -94, 307, , 61075 -94, , , -94, , , -94, , , -94, 469, , 61087 -94, , , -94, 1504, , -94, 375, , 61090 -94, 512, , -94, , , -94, , , -95, , , -95, , , -95, 288, , 61013 -95, 477, , 61073 -95, , , -95, 512, , 61004 -95, 386, , 61171 -95, 366, , 60960 -95, 512, , 61138 -95, , , -95, 512, , 61002 -95, , , -95, 428, , 61337 -95, 512, , 61173 -95, 1234, , -95, 261, , 61121 -95, 303, , 60990 -95, 454, , 64067 -95, 376, , 61080 -95, 414, , 61304 -96, 289, , 60972 -96, 512, , 61191 -96, , , -96, , , -96, , , -96, 512, , 61022 -96, 339, , 61060 -96, 512, , -96, 260, , 60942 -96, 293, , 60959 -96, , , -96, 352, , 60975 -96, 287, , 61022 -96, 512, , 64099 -96, 416, , 60995 -96, , , -96, 512, , 61013 -96, 290, , 60993 -96, 512, , -96, 512, , 61183 -97, 512, , 61003 -97, 379, , 61241 -97, 501, , 61113 -97, , , -97, 512, , 60993 -97, , , -97, 512, , 61532 -97, , , -97, , , -97, , , -97, 449, , 60983 -97, 318, , 60990 -97, , , -97, , , -97, 369, , 61058 -97, , , -97, 512, , -97, 372, , 61041 -97, 512, , 61032 -97, , , -98, , , -98, , , -98, , , -98, , , -98, 512, , 61309 -98, , , -98, 502, , 61163 -98, , , -98, , , -98, , , -98, , , -98, , , -98, 512, , 61146 -98, , , -98, 512, , 61179 -98, 512, , 60985 -98, , , -98, 512, , 61121 -98, , , -98, 512, , 61054 -99, , , -99, , , -99, , , -99, , , -99, , , -99, , , -99, , , -99, , , -99, , , -99, , , -99, 512, , -99, 1297, , -99, , , -99, , , -99, , , -99, 512, , -99, , , -99, , , -99, 512, , -99, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , diff --git a/count_reflection.csv b/count_reflection.csv deleted file mode 100644 index 0aac23a..0000000 --- a/count_reflection.csv +++ /dev/null @@ -1,2281 +0,0 @@ -# of invocation until it gets C1/OSR/C2 compiled -Graph size, C1, OSR, C2 -10, 259, , 36183 -10, 260, , 31723 -10, 282, 40578, 57736 -10, 480, , 64457 -10, 289, , 25947 -10, 505, , 67226 -10, 1039, , 67129 -10, 1432, , 67333 -10, 895, , 67174 -10, 316, , 62044 -10, 298, , 59896 -10, 936, , 70245 -10, 358, , 52632 -10, 294, , 30740 -10, 258, 26560, 37975 -10, 454, , 67527 -10, 315, 40886, 55466 -10, 408, , 63986 -10, 500, , 67165 -10, 319, , 60087 -11, 297, , 47806 -11, 480, , 60981 -11, 1145, , 67862 -11, 381, , 64042 -11, 441, , 66089 -11, 983, , 70228 -11, 302, , 50607 -11, 785, , 67673 -11, 902, , 67639 -11, 833, , 64199 -11, 1071, , 70228 -11, 470, , 70538 -11, 1033, , 67862 -11, 1300, , 70251 -11, 300, , 62848 -11, 1198, , 67094 -11, 858, , 64186 -11, 875, , 70744 -11, 842, , 70312 -11, 306, , 69991 -12, 558, , 70194 -12, 406, , 56818 -12, 549, , 67629 -12, 512, , 64149 -12, 895, , 67665 -12, 983, , 67145 -12, 894, , 67538 -12, 995, , 67866 -12, 441, , 70543 -12, 1048, , 67148 -12, 909, , 64186 -12, 679, , 67159 -12, 397, , 67033 -12, 1012, , 64089 -12, 518, , 67127 -12, 300, , 63868 -12, 422, , 67059 -12, 369, , 64108 -12, 521, , 67116 -12, 1060, , 70833 -13, 804, , 67206 -13, 283, , 40130 -13, 381, , 67377 -13, 1075, , 61046 -13, 261, , 38474 -13, 319, , 49653 -13, 322, , 68049 -13, 316, , 67179 -13, 262, , 61144 -13, 1162, , 67171 -13, 314, , 47202 -13, 332, , 63146 -13, 298, , 42615 -13, 487, , 67134 -13, 465, , 60957 -13, 422, , 70562 -13, 906, , 67818 -13, 392, , 67322 -13, 1105, , 67740 -13, 744, , 70245 -14, 1489, , 67149 -14, 352, , 70090 -14, 327, , 66950 -14, 1153, , 70247 -14, 1859, , 67166 -14, 901, , 70216 -14, 446, , 70629 -14, 1792, , 70224 -14, 262, , 61767 -14, 945, , 67320 -14, 535, , 64613 -14, 363, , 67002 -14, 699, , 67674 -14, 352, , 64294 -14, 1709, , 67735 -14, 416, , 70627 -14, 287, , 54838 -14, 303, , 60795 -14, 592, , 67620 -14, 677, , 64642 -15, 496, , 70191 -15, 1028, , 67250 -15, 397, , 64233 -15, 417, , 67135 -15, 1255, , 70354 -15, 328, , 60814 -15, 742, , 67157 -15, 990, , 64050 -15, 392, , 67438 -15, 1379, , 70470 -15, 1020, , 61011 -15, 290, , 63836 -15, 1321, , 67176 -15, 470, , 64508 -15, 721, , 70638 -15, 512, , 67111 -15, 1004, , 70192 -15, 1057, , 70291 -15, 1043, , 64141 -15, 548, , 70190 -16, 333, , 61194 -92293 -16, 326, , 69692 -16, 480, , 64559 -16, 325, , 25962 -16, 424, , 70448 -16, 259, , 41725 -16, 419, , 67069 -16, 666, , 67235 -16, 292, 34892, 47507 -16, 296, , 52173 -16, 410, , 70161 -16, 796, , 67645 -16, 258, , 60736 -16, 411, , 67439 -16, 345, , 61872 -16, 1088, , 67144 -16, 485, , 67217 -16, 305, , 59427 -16, 257, , 62542 -16, 551, 70214, 94753 -17, 1132, , 70237 -17, 1085, , 67173 -17, 1075, , 61009 -17, 512, , 64083 -17, 951, , 67091 -17, 927, , 64155 -17, 669, , 67093 -17, 821, , 64650 -17, 309, , 40356 -17, 1258, , 70219 -17, 509, , 70678 -17, 630, , 70259 -17, 1054, , 64079 -17, 385, , 61232 -17, 1063, , 64106 -17, 289, , 63847 -17, 388, , 64337 -96465 -17, 319, , 70039 -17, 628, , 64126 -17, 876, , 70221 -18, 549, , 70628 -18, 1321, , 67284 -18, 375, , 67034 -18, 1167, , 64111 -18, 512, , 67597 -18, 1741, , 70221 -18, 876, , 61418 -18, 1367, , 70243 -18, 545, , 67142 -18, 398, , 70633 -18, 1278, , 70412 -18, 502, , 67505 -18, 1390, , 70920 -18, 322, , 69755 -18, 341, , 51882 -18, 1209, , 70525 -18, 1219, , 64075 -18, 337, , 48656 -18, 313, , 70678 -18, 1554, , 67240 -19, 699, , 70411 -19, 662, , 67130 -19, 914, , 67168 -19, 854, , 70289 -19, 393, , 72013 -19, 630, , 64510 -19, 512, , 67289 -19, 318, , 64180 -19, 320, , 51560 -19, 1339, , 67319 -19, 386, , 67375 -19, 322, , 68931 -19, 629, , 64090 -19, 676, , 73283 -19, 663, , 67580 -19, 484, , 67431 -19, 495, , 70604 -19, 543, , 67118 -19, 906, , 67280 -19, 627, , 64195 -20, 620, , 67189 -20, 411, , 64019 -20, 2674, , 67455 -20, 982, , 67114 -20, 437, , 70486 -20, 650, , 70646 -20, 712, , 67795 -20, 1103, , 67957 -20, 394, , 64006 -20, 719, , 67830 -20, 490, , 64519 -20, 335, , 66983 -105116 -20, 874, , 68093 -20, 399, , 67467 -20, 461, , 67530 -20, 723, , 67739 -20, 807, , 67265 -20, 932, , 67148 -20, 929, , 64075 -20, 1311, , 70871 -21, 352, , 67106 -21, 512, , 67130 -21, 484, , 67126 -21, 784, , 70403 -21, 965, , 70226 -21, 735, , 67753 -21, 286, , 64101 -21, 298, , 66943 -21, 512, , 70182 -21, 331, , 61103 -21, 998, , 64129 -21, 387, , 67286 -21, 538, , 70857 -21, 322, , 64151 -21, 356, , 67028 -21, 888, , 64911 -21, 1368, , 67261 -21, 401, , 67314 -21, 1269, , 64768 -21, 406, , 70198 -22, 1144, , 67202 -22, 502, , 64533 -22, 322, , 65422 -22, 1097, , 67748 -22, 261, , 59830 -22, 991, , 67224 -22, 746, , 64115 -22, 347, , 68355 -22, 1017, , 70210 -22, 352, , 70076 -22, 1370, , 70400 -22, 360, , 64160 -22, 427, , 67105 -102400 -22, 262, , 66900 -22, 426, , 60937 -22, 286, , 23855 -22, 301, , 63968 -22, 288, , 66919 -22, 400, , 64011 -22, 390, , 67143 -23, 550, , 64069 -23, 664, , 67747 -23, 489, , 67447 -23, 476, , 67133 -23, 450, , 67265 -23, 1013, , 67605 -23, 919, , 64731 -23, 591, , 67680 -23, 806, , 70694 -23, 1523, , 70338 -23, 671, , 67744 -23, 512, , 64074 -23, 504, , 70219 -23, 374, , 67281 -23, 293, , 75744 -23, 512, , 64416 -23, 273, , 58161 -87730 -23, 356, , 78131 -23, 265, , 60949 -23, 491, , 70208 -24, 809, , 67147 -24, 259, , 46556 -24, 512, , 67132 -24, 262, , 69097 -24, 312, , 70324 -24, 292, , 63788 -24, 705, , 70221 -24, 289, , 65960 -24, 525, , 70660 -24, 329, , 60828 -24, 512, , 67126 -24, 506, , 70208 -24, 368, , 67386 -24, 325, , 61071 -24, 428, , 64456 -24, 472, , 67109 -24, 324, , 67182 -24, 815, , 67321 -24, 287, , 68630 -24, 748, , 67638 -25, 427, , 67108 -25, 292, , 64118 -25, 411, , 67400 -25, 1092, , 70851 -25, 390, , 67067 -25, 872, , 67163 -25, 360, , 67384 -25, 1125, , 70538 -25, 827, , 67179 -25, 825, , 67185 -25, 1224, , 67287 -25, 293, , 69484 -25, 1376, , 64154 -25, 282, , 71600 -25, 1578, , 70842 -25, 366, , 67378 -25, 619, , 67416 -25, 293, , 64276 -25, 305, , 72676 -25, 512, , 67111 -26, 260, , 66460 -26, 298, , 64179 -26, 1151, , 67392 -26, 300, , 70265 -26, 399, , 70517 -26, 825, , 67170 -26, 597, , 67132 -26, 1330, , 67239 -26, 262, , 64068 -26, 512, , 67132 -100625 -26, 295, , 64097 -26, 339, , 67157 -26, 419, , 70177 -26, 291, , 64178 -26, 1077, , 67290 -26, 454, , 67466 -26, 261, , 61975 -26, 512, , 67141 -26, 1572, , 70471 -26, 471, , 67409 -27, 459, , 70481 -27, 626, , 67126 -27, 317, , 61004 -27, 594, , 70727 -27, 659, , 70190 -27, 661, , 67137 -27, 344, , 67285 -27, 1283, , 67212 -27, 318, , 64196 -27, 1341, , 67132 -27, 290, , 67129 -27, 512, , 67579 -27, 964, , 64356 -27, 869, , 64481 -27, 1091, , 67419 -27, 807, , 67811 -27, 1345, , 67278 -27, 1321, , 67177 -27, 363, , 64278 -27, 339, , 70489 -28, 427, , 70187 -28, 899, , 64507 -28, 809, , 70201 -28, 442, , 67099 -28, 556, , 67135 -28, 652, , 61048 -28, 384, , 60912 -28, 1259, , 67140 -28, 628, , 64058 -28, 627, , 67624 -28, 865, , 67486 -28, 771, , 64774 -28, 261, , 66396 -28, 1142, , 67691 -28, 311, , 73899 -28, 660, , 64097 -28, 1290, , 70267 -28, 338, , 70464 -28, 723, , 61044 -28, 292, , 73521 -29, 512, , 61438 -29, 689, , 67161 -29, 1024, , 70260 -29, 907, , 67149 -29, 469, , 64054 -29, 262, , 60767 -29, 819, , 64120 -29, 344, , 52881 -29, 259, , 72874 -29, 1179, , 67172 -29, 352, , 70428 -29, 303, , 69837 -29, 788, , 67124 -29, 293, , 64122 -29, 939, , 64258 -29, 615, , 70716 -29, 318, , 69963 -29, 865, , 61137 -29, 284, , 58196 -29, 320, , 64181 -30, 342, , 67173 -30, 908, , 70282 -30, 1339, , 67221 -30, 350, , 67030 -30, 957, , 67412 -30, 290, , 64063 -30, 747, , 64634 -30, 803, , 71113 -30, 865, , 67324 -30, 300, , 64290 -30, 909, , 70242 -30, 347, , 60921 -30, 933, , 64152 -30, 292, , 66943 -30, 317, , 64189 -30, 662, , 64169 -30, 1121, , 70274 -30, 260, , 61481 -30, 438, , 67434 -30, 490, , 67324 -31, 475, , 67556 -31, 374, , 61222 -31, 408, , 67055 -31, 788, , 67224 -31, 1112, , 67174 -31, 286, , 63878 -31, 291, , 63873 -31, 259, , 49578 -31, 363, , 70094 -31, 1189, , 67170 -31, 1462, , 70216 -31, 291, , 61018 -31, 432, , 70519 -31, 668, , 70228 -31, 267, , 64185 -31, 261, , 63835 -31, 267, , 72398 -31, 510, , 64715 -31, 386, , 67076 -31, 298, , 69194 -32, 263, , 68425 -32, 440, , 67093 -32, 295, , 65920 -32, 859, , 70225 -32, 271, , 66939 -123390 -32, 278, , 41370 -32, 291, , 64157 -32, 263, , 60769 -32, 512, , 67598 -32, 813, , 67162 -32, 371, , 72938 -32, 288, , 50494 -32, 725, , 64088 -32, 349, , 67277 -32, 499, , 70215 -32, 373, , 63993 -32, 512, , 67138 -32, 261, , 79009 -32, 259, , 66488 -32, 1121, , 64086 -33, 773, , 70995 -33, 626, , 64762 -33, 286, , 59816 -33, 1305, , 70252 -33, 512, , 67131 -33, 453, , 70191 -112651 -33, 764, , 70643 -33, 430, , 64299 -33, 258, , 64112 -33, 458, , 67460 -33, 969, , 64074 -33, 449, , 67118 -33, 373, , 67051 -33, 366, , 67287 -33, 412, , 70189 -33, 775, , 67133 -33, 564, , 67144 -33, 406, , 70413 -33, 371, , 67325 -33, 838, , 67305 -34, 1048, , 70879 -34, 811, , 67143 -34, 307, , 64163 -102306 -34, 510, , 67705 -34, 301, , 67220 -34, 370, , 70161 -34, 341, , 67095 -34, 491, , 70217 -34, 313, , 64642 -34, 486, , 70632 -34, 512, , 67180 -34, 440, , 67381 -34, 398, , 67110 -34, 375, , 64012 -34, 429, , 64044 -34, 351, , 67036 -126710 -34, 259, , 65616 -34, 971, , 70282 -34, 323, , 63931 -34, 465, , 67471 -35, 512, , 64069 -35, 386, , 64377 -35, 356, , 61105 -35, 512, , 67118 -35, 772, , 70277 -35, 331, , 60934 -116158 -35, 754, , 70663 -35, 302, , 70269 -35, 839, , 67715 -35, 508, , 67255 -35, 379, , 67258 -35, 1356, , 64204 -35, 890, , 67182 -35, 769, , 70434 -35, 311, , 67248 -35, 512, , 61004 -35, 719, , 67169 -35, 261, , 67132 -35, 259, , 55642 -35, 258, , 63863 -36, 261, , 64981 -36, 370, , 63979 -36, 261, , 71682 -36, 1078, , 67263 -36, 692, , 67507 -36, 370, , 70175 -36, 341, , 10782 -42646 -36, 787, , 64102 -36, 466, , 67484 -103036 -36, 304, , 66948 -36, 512, , 64114 -36, 407, , 67090 -36, 357, , 67163 -36, 1098, , 67152 -36, 332, , 64093 -36, 273, , 67129 -36, 285, , 65136 -36, 358, , 70117 -36, 351, , 60896 -36, 512, , 67093 -37, 382, , 64353 -37, 258, , 63922 -37, 712, , 67165 -37, 341, , 67223 -37, 361, , 60933 -37, 475, , 67492 -37, 360, , 67320 -37, 263, , 71410 -37, 1297, , 67322 -37, 326, , 10031 -37, 512, , 70204 -37, 1069, , 71014 -37, 899, , 64218 -37, 261, , 63404 -37, 1234, , 67170 -37, 348, , 67015 -37, 467, , 70484 -37, 363, , 63973 -37, 461, , 64055 -37, 313, , 67324 -38, 464, , 61057 -38, 512, , 67343 -38, 372, , 64150 -38, 282, , 63874 -38, 512, , 67579 -38, 464, , 70589 -38, 283, , 50154 -38, 259, , 65120 -38, 376, , 70596 -38, 259, , 64911 -38, 290, , 67250 -38, 845, , 67246 -38, 278, , 58871 -38, 424, , 60965 -38, 279, , 72644 -121807 -38, 287, , 64107 -38, 336, , 64144 -38, 450, , 70173 -38, 398, , 67112 -100994 -38, 260, , 5580 -39, 302, , 67241 -39, 257, , 5035 -39, 444, , 67096 -39, 775, , 67324 -39, 401, , 67357 -39, 345, , 63987 -39, 384, , 67060 -39, 1091, , 67194 -39, 940, , 70186 -39, 369, , 4550 -40118 -39, 1142, , 70328 -39, 512, , 64105 -39, 362, , 67322 -39, 636, , 67337 -39, 425, , 67109 -39, 668, , 67598 -39, 512, , 64052 -39, 295, , 63163 -39, 435, , 70175 -39, 851, , 64125 -40, 281, , 63133 -40, 294, , 42732 -40, 512, , 70462 -40, 339, , 67307 -40, 450, , 64388 -40, 327, , 3469 -40, 512, , 67142 -102803 -40, 512, , 67128 -40, 672, , 70451 -40, 351, , 63974 -40, 259, , 2447 -40, 344, , 70143 -40, 469, , 67119 -40, 512, , 67157 -40, 512, , 67573 -40, 301, , 10542 -40, 544, , 70208 -40, 451, , 64395 -40, 512, , 64051 -40, 316, , 67270 -41, 595, , 67325 -41, 946, , 67162 -41, 1240, , 67299 -41, 855, , 61016 -41, 389, , 70190 -41, 728, , 64098 -41, 370, , 61074 -41, 1210, , 67767 -41, 262, , 65249 -41, 304, , 4485 -41, 310, , 67027 -41, 275, , 54272 -41, 2948, , 64119 -41, 262, , 67638 -41, 512, , 67142 -41, 338, , 70141 -41, 308, , 67180 -41, 374, , 67070 -41, 856, , 70244 -41, 259, , 2365 -42, 260, , 63508 -42, 318, , 67181 -42, 512, , 67121 -42, 314, , 4724 -42, 259, , 5893 -42, 640, , 64151 -42, 365, , 64169 -42, 824, , 70370 -42, 334, , 60907 -42, 332, , 60879 -42, 840, , 64066 -42, 373, , 64017 -42, 263, , 63856 -42, 629, , 64487 -42, 352, , 64203 -42, 300, , 63935 -42, 430, , 67114 -42, 909, , 64230 -42, 1258, , 70185 -42, 401, , 67112 -43, 458, , 64063 -43, 511, , 70196 -43, 260, , 7426 -43, 302, , 4481 -43, 892, , 70265 -43, 296, , 10127 -43, 257, , 38573 -43, 951, , 67190 -43, 280, , 67112 -43, 292, , 66005 -43, 398, , 67095 -43, 308, , 10419 -43, 442, , 67371 -43, 298, , 67038 -43, 298, , 67162 -43, 1174, , 70932 -43, 260, , 63537 -43, 286, , 7937 -43, 327, , 3822 -43, 858, , 70238 -44, 312, , 4492 -44, 512, , 64125 -44, 563, , 64632 -44, 270, , 74639 -44, 456, , 64050 -44, 512, , 67113 -44, 257, , 66461 -44, 258, , 5382 -44, 537, , 70318 -44, 615, , 67656 -44, 485, , 64573 -44, 512, , 64064 -44, 512, , 67104 -44, 458, , 70171 -44, 262, , 65304 -44, 287, , 63893 -44, 260, , 60998 -44, 1335, , 67835 -44, 279, , 62789 -44, 564, , 67578 -45, 259, , 5538 -45, 445, , 67122 -45, 288, , 61059 -45, 258, , 4395 -45, 259, , 4482 -45, 327, , 63967 -45, 1710, , 70291 -45, 294, , 10840 -45, 361, , 64009 -95978 -45, 260, , 63221 -45, 289, , 8694 -45, 512, , 67187 -45, 284, , 39374 -45, 391, , 64037 -45, 390, , 67147 -45, 512, , 64358 -45, 446, , 60972 -45, 259, , 5544 -45, 297, , 7810 -45, 283, 64102, 92572 -46, 512, , 64273 -46, 453, , 67130 -46, 345, , 64986 -46, 328, , 70140 -46, 292, , 65598 -46, 260, , 7092 -39758 -46, 733, , 67256 -46, 294, , 63915 -46, 260, , 63707 -46, 621, , 67131 -46, 404, , 67390 -46, 494, , 67114 -46, 628, , 70214 -46, 615, , 70551 -46, 615, , 64664 -46, 509, , 64067 -46, 286, , 63370 -46, 795, , 67908 -46, 401, , 64497 -46, 304, , 64140 -47, 392, , 70195 -47, 376, , 70525 -47, 736, , 67401 -47, 319, , 5540 -39698 -47, 1440, , 64132 -47, 1233, , 70284 -47, 658, , 70241 -47, 275, , 8929 -47, 394, , 64070 -47, 260, , 59334 -47, 438, , 61252 -47, 1282, , 67205 -47, 1455, , 67197 -47, 512, , 67534 -47, 674, , 67156 -47, 1396, , 67217 -47, 512, , 70786 -47, 288, , 63922 -47, 260, , 3451 -47, 385, , 64398 -48, 315, , 64002 -48, 972, , 64192 -48, 410, , 64381 -48, 301, , 67245 -141139 -48, 580, , 61007 -48, 257, , 5050 -48, 755, , 61029 -48, 512, , 67537 -48, 259, , 6751 -48, 1133, , 67175 -48, 413, , 67134 -48, 635, , 67169 -48, 388, , 10735 -48, 418, , 67407 -48, 809, , 67737 -48, 304, , 70090 -48, 545, , 67249 -48, 512, , 67120 -48, 262, , 63988 -48, 1135, , 67195 -49, 259, , 62247 -49, 261, , 66200 -49, 290, , 60852 -49, 1338, , 70652 -49, 296, , 64083 -49, 368, , 60941 -49, 289, , 9305 -49, 602, , 67150 -49, 411, , 67092 -49, 273, , 48374 -49, 288, , 3511 -49, 262, , 66972 -49, 299, , 8272 -49, 408, , 67151 -49, 259, , 2365 -49, 477, , 67481 -49, 258, , 60800 -49, 388, , 67128 -49, 375, , 70161 -49, 692, , 61533 -50, 386, , 67125 -50, 294, , 63558 -50, 1499, , 67210 -50, 905, , 67212 -50, 779, , 67169 -50, 292, , 68280 -50, 555, , 64084 -50, 419, , 67461 -50, 364, , 13371 -50, 350, , 11675 -50, 258, , 5292 -50, 443, , 67523 -50, 257, , 2348 -50, 290, , 63294 -50, 492, , 64076 -50, 486, , 64067 -50, 495, , 67137 -50, 419, , 67144 -50, 1165, , 67219 -50, 327, , 64298 -51, 440, , 64505 -51, 296, , 10465 -51, 676, , 64685 -51, 636, , 64764 -51, 258, , 59914 -51, 288, , 64094 -51, 599, , 67542 -51, 481, , 67128 -51, 764, , 61032 -51, 355, , 64322 -51, 283, , 64108 -51, 309, , 66999 -51, 414, , 67266 -51, 260, , 66224 -51, 377, , 64056 -51, 392, , 63967 -51, 1114, , 67242 -51, 650, , 67151 -51, 287, , 65083 -51, 404, , 67368 -52, 260, , 4540 -52, 355, , 64018 -52, 512, , 70639 -52, 1484, , 70268 -52, 360, , 64334 -52, 1352, , 67211 -52, 308, , 5536 -52, 434, , 67130 -52, 498, , 67593 -52, 353, , 67112 -52, 403, , 67384 -52, 1365, , 67239 -52, 388, , 60982 -52, 259, , 2355 -52, 396, , 64336 -52, 347, , 64356 -52, 271, , 75071 -52, 1139, , 67216 -52, 512, , 67345 -52, 1395, , 67214 -53, 373, , 67126 -53, 512, , 61006 -102191 -53, 430, , 64509 -53, 765, , 64836 -53, 263, , 5678 -53, 377, , 11670 -53, 327, , 70166 -53, 273, , 10093 -53, 504, , 67129 -53, 336, , 67063 -53, 437, , 61340 -127060 -53, 258, , 4006 -53, 356, , 64357 -53, 420, , 64497 -53, 402, , 67463 -53, 291, , 73087 -53, 281, , 5512 -53, 639, , 67166 -53, 440, , 67111 -53, 357, , 70417 -54, 310, , 6561 -54, 409, , 64075 -54, 260, , 8769 -54, 259, , 9558 -54, 1288, , 64139 -54, 684, , 67801 -54, 1262, , 64155 -54, 348, , 64049 -54, 1172, , 67168 -54, 555, , 67725 -54, 384, , 64065 -54, 302, , 6563 -54, 314, , 11739 -54, 1203, , 70269 -54, 263, , 63908 -54, 637, , 67653 -54, 396, , 67128 -54, 545, , 64559 -54, 512, , 64099 -54, 442, , 60981 -55, 515, , 67167 -55, 525, , 64295 -55, 700, , 67175 -55, 259, , 69930 -55, 371, , 64201 -55, 305, , 63960 -55, 426, , 61271 -95372 -55, 881, , 70560 -55, 492, , 67531 -55, 512, , 67572 -55, 356, , 67105 -55, 693, , 64141 -55, 288, , 3426 -55, 424, , 70607 -55, 384, , 64066 -55, 425, , 67150 -55, 318, , 6754 -55, 321, , 67281 -55, 393, , 70506 -128765 -55, 326, , 61100 -56, 433, , 67132 -56, 304, , 60888 -56, 512, , 67176 -56, 278, , 65361 -56, 512, , 64178 -56, 645, , 67197 -56, 421, , 67424 -56, 352, , 67111 -56, 316, , 63997 -56, 259, , 6686 -56, 512, , 64092 -56, 1120, , 70269 -56, 340, , 67253 -56, 332, , 69031 -56, 449, , 64248 -56, 306, , 67032 -56, 486, , 60961 -99720 -56, 470, , 67485 -56, 718, , 64111 -56, 817, , 70264 -57, 306, , 63988 -57, 365, , 61273 -57, 260, , 4591 -57, 628, , 67201 -57, 322, , 61073 -57, 257, , 64145 -57, 259, , 8132 -57, 332, , 64044 -57, 512, , 67473 -57, 304, , 60980 -57, 512, , 64699 -57, 376, , 60974 -57, 505, , 67555 -57, 311, , 5731 -57, 512, , 67163 -57, 512, , 70213 -57, 1301, , 64141 -57, 1088, , 70210 -57, 260, , 4549 -57, 739, , 61071 -58, 345, , 12605 -58, 262, , 70276 -58, 846, , 70272 -58, 340, , 70427 -58, 690, , 70272 -58, 512, , 67163 -58, 325, , 60933 -58, 512, , 67158 -58, 325, , 12821 -58, 258, , 2354 -58, 331, , 60930 -58, 303, , 6568 -58, 280, , 7734 -58, 264, , 9771 -58, 434, , 64070 -58, 761, , 70299 -58, 1155, , 67200 -58, 512, , 67129 -58, 737, , 64446 -58, 286, , 15056 -59, 258, , 7354 -59, 512, , 70249 -59, 346, , 63966 -59, 257, , 4149 -59, 297, , 63946 -59, 304, , 60979 -59, 637, , 67269 -59, 256, , 10241 -59, 319, , 64302 -59, 295, , 5512 -42490 -59, 358, , 64065 -59, 460, , 64082 -59, 313, , 64296 -59, 447, , 70190 -59, 512, , 64520 -59, 512, , 64095 -59, 299, , 63969 -59, 683, , 67741 -59, 336, , 64087 -100318 -59, 260, , 13188 -60, 340, , 61213 -60, 263, , 60969 -60, 407, , 67145 -60, 388, , 67131 -60, 381, , 60982 -60, 380, , 60983 -60, 392, , 70273 -60, 602, , 64109 -60, 429, , 67486 -60, 258, , 60783 -60, 257, , 3395 -60, 417, , 67341 -60, 438, , 64040 -60, 1097, , 67196 -60, 448, , 67465 -60, 1145, , 67847 -60, 1124, , 67191 -60, 384, , 67364 -60, 1318, , 67191 -60, 387, , 64062 -61, 348, , 70549 -61, 392, , 70191 -61, 301, , 8647 -61, 260, , 5572 -61, 714, , 64606 -61, 273, , 4451 -61, 388, , 64357 -61, 259, , 4520 -61, 692, , 67177 -61, 259, , 4471 -61, 301, , 67047 -61, 288, , 6548 -61, 1401, , 67238 -61, 1218, , 67337 -61, 356, , 64134 -61, 371, , 67127 -61, 512, , 64411 -61, 512, , 67694 -61, 440, , 67533 -61, 259, , 60780 -62, 478, , 64550 -62, 259, , 3477 -62, 373, , 60995 -62, 301, , 70145 -62, 371, , 60975 -62, 547, , 64101 -62, 379, , 64049 -62, 496, , 67532 -62, 425, , 64081 -62, 481, , 67147 -62, 442, , 67462 -62, 428, , 67481 -62, 262, , 64030 -62, 369, , 61036 -62, 515, , 67197 -62, 394, , 67123 -62, 463, , 64079 -62, 294, , 60894 -62, 303, , 64011 -62, 303, , 64288 -63, 749, , 67823 -63, 696, , 70850 -63, 495, , 70224 -63, 290, , 60998 -63, 398, , 70201 -63, 319, , 67074 -99568 -63, 347, , 67122 -63, 260, , 7996 -63, 264, , 12580 -63, 615, , 67212 -63, 309, , 61037 -63, 1412, , 70276 -63, 359, , 67258 -63, 259, , 60746 -63, 1423, , 64507 -63, 257, , 6650 -63, 701, , 61046 -63, 512, , 64501 -63, 330, , 67058 -63, 258, , 56643 -64, 267, , 64158 -64, 295, , 8641 -64, 286, , 4575 -64, 418, , 67130 -64, 472, , 64091 -64, 426, , 67529 -64, 580, , 64169 -64, 470, , 70219 -64, 261, , 10254 -51290 -64, 512, , 67163 -64, 297, , 5632 -64, 259, , 3392 -64, 1152, , 67379 -64, 307, , 60936 -64, 261, , 5637 -64, 327, , 8659 -64, 359, , 64147 -64, 390, , 64049 -64, 341, , 70209 -64, 298, , 12013 -65, 300, , 12384 -65, 281, , 8624 -65, 616, , 64114 -65, 512, , 67635 -65, 260, , 10371 -65, 469, , 67429 -124457 -65, 263, , 16927 -65, 512, , 67348 -65, 670, , 67179 -65, 1049, , 64114 -65, 432, , 70352 -65, 512, , 64709 -65, 338, , 60989 -65, 323, , 6626 -65, 287, , 9249 -65, 496, , 67154 -65, 348, , 67126 -65, 259, , 5542 -65, 309, , 13698 -65, 264, , 67005 -66, 413, , 64080 -66, 258, , 5911 -66, 259, , 9131 -66, 258, , 3393 -66, 327, , 60922 -66, 291, , 64181 -66, 292, , 67246 -66, 512, , 70572 -66, 343, , 64024 -66, 672, , 67139 -66, 335, , 61182 -66, 512, , 64084 -66, 259, , 5466 -66, 512, , 67159 -66, 261, , 6649 -66, 378, , 64479 -66, 289, , 5615 -66, 260, , 9623 -66, 465, , 64068 -66, 392, , 67135 -67, 640, , 64281 -67, 586, , 70275 -67, 312, , 60895 -67, 320, , 63942 -67, 1052, , 67223 -67, 512, , 67190 -67, 257, , 34093 -67, 291, , 63955 -67, 700, , 61053 -67, 512, , 64655 -67, 279, , 13029 -67, 258, , 3465 -45130 -67, 1312, , 64111 -67, 542, , 64097 -67, 262, , 16899 -67, 1358, , 67180 -67, 696, , 67201 -67, 694, , 67180 -67, 291, , 60938 -67, 942, , 70244 -68, 512, , 61028 -68, 428, , 64076 -68, 258, , 5444 -68, 284, , 5504 -68, 259, , 5492 -68, 318, , 64325 -68, 258, , 5523 -68, 322, , 9864 -68, 335, , 61076 -68, 512, , 64100 -68, 260, , 6554 -68, 512, , 67286 -68, 296, , 67104 -68, 261, , 61017 -68, 281, , 5595 -68, 386, , 67138 -68, 394, , 67125 -68, 403, , 64065 -68, 512, , 64093 -68, 294, , 63936 -69, 408, , 67211 -69, 260, , 60836 -69, 259, , 5582 -69, 512, , 64484 -69, 1038, , 67196 -69, 298, , 7706 -69, 274, , 3399 -69, 346, , 64198 -69, 284, , 7714 -69, 512, , 70259 -69, 261, , 6651 -69, 337, , 60954 -69, 260, , 7693 -69, 448, , 67113 -69, 280, , 7774 -69, 257, , 38194 -69, 375, , 64286 -69, 257, , 35120 -69, 258, , 60750 -69, 257, , 3436 -70, 393, , 67126 -70, 288, , 5606 -70, 512, , 64095 -70, 538, , 61033 -70, 274, , 4441 -70, 512, , 64094 -70, 446, , 67140 -70, 287, , 5633 -70, 295, , 6557 -70, 262, , 61036 -70, 512, , 64402 -70, 649, , 64203 -70, 308, , 8842 -70, 453, , 67162 -70, 512, , 67143 -70, 640, , 67701 -70, 262, , 63899 -70, 376, , 64034 -70, 458, , 67147 -70, 260, , 5503 -71, 305, , 67072 -71, 259, , 5575 -71, 288, , 5601 -71, 1371, , 67191 -71, 474, , 64074 -71, 512, , 64596 -71, 280, , 60845 -71, 481, , 67220 -71, 360, , 64205 -71, 286, , 60842 -71, 512, , 64086 -71, 512, , 64590 -71, 1383, , 67173 -71, 482, , 64099 -71, 299, , 61004 -71, 344, , 67409 -71, 455, , 67142 -71, 603, , 70567 -71, 512, , 64095 -71, 431, , 70648 -72, 372, , 64040 -72, 302, , 60892 -72, 284, , 60971 -72, 307, , 60980 -72, 1288, , 67171 -72, 295, , 60883 -112125 -72, 326, , 67323 -72, 402, , 67461 -72, 512, , 67163 -72, 612, , 67534 -72, 280, , 60831 -72, 1232, , 64458 -72, 258, , 3375 -72, 314, , 60964 -72, 387, , 60951 -72, 274, , 7590 -72, 449, , 67251 -72, 315, , 9934 -72, 512, , 70252 -72, 512, , 70218 -73, 512, , 67172 -73, 260, , 60791 -73, 512, , 64074 -73, 281, , 9661 -73, 410, , 10783 -73, 262, , 60866 -73, 293, , 5515 -73, 280, , 60815 -73, 512, , 64559 -73, 318, , 8665 -37967 -73, 512, , 67173 -73, 512, , 67138 -73, 259, , 5603 -73, 383, , 64064 -73, 261, , 60948 -73, 493, , 67558 -73, 261, , 60953 -73, 360, , 64048 -73, 257, , 49475 -73, 299, , 60988 -74, 305, , 7616 -74, 407, , 67125 -74, 307, , 64046 -74, 292, , 60833 -74, 342, , 64192 -74, 512, , 67653 -74, 512, , 64556 -74, 332, , 9723 -74, 288, , 63993 -74, 329, , 64316 -74, 1113, , 61049 -74, 265, , 60908 -74, 262, , 61020 -74, 609, , 70681 -74, 512, , 64091 -74, 512, , 61009 -74, 260, , 60878 -74, 259, , 61116 -90141 -74, 512, , 64066 -74, 344, , 61110 -75, 414, , 67478 -75, 257, , 3371 -75, 512, , 64765 -75, 262, , 60872 -75, 512, , 64111 -75, 259, , 6544 -75, 975, , 64104 -75, 277, , 60794 -75, 259, , 60868 -75, 502, , 60984 -75, 347, , 61086 -75, 512, , 64126 -75, 512, , 67160 -75, 257, , 60909 -75, 270, , 47441 -97857 -75, 512, , 67150 -75, 264, , 60824 -75, 512, , 67155 -75, 382, , 60959 -75, 258, , 5501 -76, 259, , 5551 -76, 262, , 60849 -76, 319, , 60969 -76, 322, , 61173 -76, 512, , 67190 -76, 280, , 7703 -76, 277, , 64082 -76, 289, , 64221 -76, 269, , 48459 -76, 295, , 7588 -76, 512, , 67185 -76, 315, , 10867 -76, 512, , 64066 -76, 390, , 67194 -76, 287, , 60798 -90997 -76, 344, , 67123 -76, 290, , 8633 -76, 512, , 64086 -76, 353, , 60975 -113659 -76, 259, , 60866 -77, 512, , 64164 -77, 359, , 67113 -77, 261, , 60829 -77, 346, , 64053 -77, 289, , 60949 -77, 367, , 64179 -77, 420, , 70570 -77, 512, , 67168 -77, 384, , 60990 -77, 398, , 64064 -77, 359, , 64352 -77, 333, , 60979 -77, 296, , 60891 -99394 -77, 512, , 67515 -77, 355, , 64230 -77, 262, , 64089 -77, 512, , 67139 -77, 512, , 64776 -77, 347, , 61120 -77, 268, , 60869 -78, 263, , 60889 -78, 306, , 64053 -78, 487, , 64067 -78, 298, , 64149 -78, 293, , 60912 -78, 343, , 9729 -78, 263, , 60871 -78, 512, , 64101 -78, 512, , 61048 -78, 512, , 70658 -78, 257, , 4464 -78, 499, , 61462 -78, 258, , 60750 -78, 321, , 64104 -78, 512, , 64105 -78, 512, , 70269 -78, 341, , 67094 -78, 512, , 67145 -78, 360, , 60989 -78, 512, , 64101 -79, 512, , 64109 -79, 299, , 10923 -79, 512, , 67201 -79, 467, , 67143 -79, 512, , 64481 -79, 475, , 67164 -79, 512, , 67909 -79, 1264, , 67664 -79, 496, , 64187 -79, 1280, , 67197 -79, 512, , 67340 -107151 -79, 414, , 61052 -79, 322, , 60932 -79, 512, , 64481 -79, 306, , 61070 -79, 317, , 60906 -79, 512, , 67170 -79, 290, , 64024 -79, 312, , 61058 -79, 438, , 64082 -80, 537, , 70235 -80, 411, , 70200 -80, 258, , 5465 -80, 413, , 60976 -80, 262, , 67144 -80, 485, , 67149 -80, 311, , 64050 -80, 512, , 64125 -80, 403, , 67135 -80, 339, , 67206 -80, 360, , 67146 -133870 -80, 260, , 7559 -80, 512, , 64728 -80, 512, , 67737 -80, 260, , 60912 -80, 316, , 60914 -80, 368, , 67137 -80, 563, , 70269 -80, 512, , 64125 -80, 387, , 60977 -116308 -81, 439, , 67116 -81, 438, , 67140 -81, 259, , 60803 -81, 512, , 64107 -81, 262, , 67264 -81, 288, , 60857 -81, 340, , 61003 -81, 329, , 63996 -81, 286, , 60897 -81, 350, , 67142 -81, 512, , 64127 -81, 337, , 64051 -81, 512, , 64148 -81, 512, , 64118 -81, 383, , 61207 -81, 268, , 60913 -81, 262, , 64005 -81, 341, , 64070 -81, 512, , 67170 -81, 360, , 64263 -82, 445, , 67415 -82, 302, , 7619 -82, 285, , 60807 -82, 338, , 70150 -82, 512, , 61023 -82, 512, , 64097 -82, 446, , 64072 -82, 396, , 67133 -82, 288, , 60850 -82, 512, , 60994 -82, 259, , 60771 -82, 288, , 70186 -82, 457, , 64065 -82, 364, , 60962 -82, 263, , 64005 -82, 424, , 67157 -82, 456, , 61181 -82, 450, , 67150 -82, 259, , 60800 -82, 262, , 64212 -83, 259, , 60937 -83, 475, , 70198 -83, 293, , 60849 -83, 263, , 10889 -83, 346, , 70224 -83, 323, , 10843 -83, 259, , 60768 -83, 512, , 67136 -83, 378, , 67265 -83, 512, , 70273 -83, 512, , 67285 -83, 345, , 64045 -83, 408, , 61145 -83, 484, , 64486 -83, 364, , 64066 -83, 301, , 60973 -83, 259, , 60771 -83, 281, , 60800 -83, 365, , 64405 -83, 431, , 67392 -84, 290, , 61170 -84, 258, , 58764 -84, 1030, , 67183 -84, 512, , 64103 -84, 336, , 67119 -84, 351, , 67379 -84, 261, , 60983 -84, 295, , 60976 -84, 468, , 64068 -84, 317, , 64123 -84, 338, , 61157 -84, 278, , 64043 -84, 259, , 60824 -84, 261, , 60951 -106670 -84, 259, , 60781 -84, 301, , 64250 -103691 -84, 263, , 60974 -120428 -84, 512, , 67151 -84, 263, , 60926 -84, 373, , 64065 -85, 438, , 70476 -85, 330, , 64036 -85, 259, , 60774 -85, 260, , 60809 -119843 -85, 259, , 60796 -114119 -85, 512, , 64557 -85, 282, , 60939 -85, 331, , 61157 -85, 261, , 60913 -85, 386, , 61010 -85, 378, , 67137 -85, 512, , 64101 -85, 315, , 61139 -85, 289, , 64040 -85, 512, , 61538 -85, 512, , 61012 -85, 684, , 67211 -85, 261, , 60874 -109053 -85, 348, , 60991 -85, 330, , 60972 -86, 1412, , -86, 1208, , -86, 453, , 64474 -86, 344, , 64057 -86, 263, , 67136 -86, 512, , 70264 -86, 407, , 70308 -86, 261, , 61015 -86, 512, , 70624 -86, 259, , 60952 -86, 512, , 67171 -86, 317, , 67347 -86, 507, , 70234 -86, 258, , 60791 -86, 1406, , -86, 260, , 60805 -98168 -86, 301, , 61046 -97786 -86, , , -86, 258, , 60798 -86, 512, , 64403 -87, 349, , 67136 -87, 298, , 60913 -87, 262, , 67308 -87, 1241, , -87, 259, , 60818 -87, 364, , 70370 -87, 295, , 60928 -87, , , -87, 282, , 67080 -108645 -87, , , -87, , , -87, 313, , 60968 -87, 512, , 64274 -87, 282, , 60806 -87, 388, , 64467 -87, , , -87, 512, , 64564 -87, 261, , 60858 -87, 380, , 60976 -87, , , -88, 415, , 60981 -88, 499, , 60996 -88, 352, , 61097 -88, 461, , 70234 -88, 304, , 67123 -88, 271, , 60961 -88, 280, , 60910 -88, 301, , 64107 -88, 259, , 60826 -88, 357, , 64333 -88, 512, , 70235 -88, 381, , 64077 -88, 402, , 64055 -122351 -88, 261, , 67101 -88, 337, , 64360 -136716 -88, 365, , 67365 -88, 335, , 61243 -125043 -88, 258, , 60873 -88, 512, , 64117 -88, 512, , 67171 -89, 512, , 64099 -89, 259, , 60974 -89, 262, , 61052 -89, 512, , 67150 -89, 286, , 64034 -89, 258, , 60835 -89, 512, , 64535 -89, 379, , 64204 -89, 262, , 64012 -89, 422, , 67143 -89, 330, , 64053 -89, 280, , 60916 -89, 355, , 67121 -89, 441, , 64058 -89, 296, , 60885 -89, 307, , 61001 -89, 512, , 67305 -89, 463, , 61414 -89, 414, , 64460 -89, 289, , 64286 -90, 327, , 61217 -90, 1326, , -90, 306, , 61214 -90, , , -90, 263, , 61084 -90, 337, , 64090 -90, 379, , 67290 -90, 389, , 64062 -90, 261, , 60879 -90, 512, , 67353 -90, 262, , 60884 -116591 -90, 264, , 67105 -90, 260, , 60921 -90, , , -90, 340, , 61187 -90, 262, , 60877 -90, 512, , 64094 -90, 326, , 64320 -90, 263, , 60974 -118268 -90, 512, , -91, 512, , 61009 -91, 259, , 60804 -91, 436, , 67133 -91, 358, , 64061 -91, 314, , 64013 -91, 421, , 70542 -91, 313, , 60961 -91, 512, , 70238 -91, 512, , 67166 -91, 365, , 70212 -91, 512, , -91, 455, , 64073 -91, 467, , 67148 -91, , , -91, 326, , 64359 -91, 453, , 61004 -91, 512, , 64072 -91, 256, , 60838 -91, 430, , 64071 -91, 417, , 64074 -92, 461, , 64068 -92, 998, , -92, 264, , 61200 -92, 708, , 70283 -92, , , -92, 512, , 67176 -92, 304, , 67408 -92, , , -92, 427, , 67119 -92, , , -92, 512, , -92, 414, , 70266 -92, 484, , 64089 -92, 1187, , -92, 1428, , -92, , , -92, 512, , 64085 -92, 447, , 64452 -92, 512, , 64193 -92, 1367, , -93, 512, , -93, 441, , 64071 -93, , , -93, 512, , -93, 1272, , -93, , , -93, 512, , 61525 -93, 288, , 61200 -93, 512, , -93, 512, , 64630 -93, , , -93, 512, , 67265 -93, 300, , 64047 -93, 264, , 61070 -101387 -93, 335, , 67115 -93, 1415, , -93, , , -93, , , -93, 347, , 61036 -93, 345, , 64330 -94, 512, , 61020 -94, 512, , -94, , , -94, , , -94, , , -94, 1353, , -94, 512, , 64555 -94, 447, , 64066 -94, 1223, , -94, 1455, , -94, 365, , 67118 -94, , , -94, , , -94, , , -94, 477, , 67124 -94, 394, , 67151 -94, , , -94, 336, , 70201 -94, 1147, , -94, 1152, , -95, 361, , 67121 -95, 512, , 64090 -95, 388, , 64465 -95, , , -95, , , -95, , , -95, 376, , 60978 -114596 -95, 379, , 61002 -95, 261, , 64018 -95, , , -95, , , -95, 512, , 64492 -95, 298, , 61112 -95, , , -95, 1241, , -95, , , -95, 475, , 64091 -95, , , -95, , , -95, 303, , 64048 -96, , , -96, 1160, , -96, 512, , -96, , , -96, 512, , 64872 -96, , , -96, , , -96, , , -96, 322, , 67174 -96, , , -96, 512, , 64125 -96, 512, , 61020 -96, 476, , 64084 -96, 316, , 60987 -96, , , -96, 473, , 61140 -96, , , -96, 262, , 60937 -112569 -96, 332, , 67126 -96, , , -97, 512, , 67164 -97, 474, , 67133 -97, 420, , 67148 -97, 512, , 67187 -97, , , -97, 313, , 64055 -97, , , -97, , , -97, 261, , 60960 -97, 264, , 64325 -97, , , -97, , , -97, , , -97, , , -97, 307, , 70447 -97, 316, , 64049 -97, , , -97, , , -97, , , -97, 469, , 67565 -98, , , -98, , , -98, , , -98, , , -98, , , -98, 512, , 64370 -98, , , -98, , , -98, 512, , -98, , , -98, 495, , 67151 -98, , , -98, 512, , 64090 -98, , , -98, , , -98, , , -98, , , -98, , , -98, , , -98, , , -99, 1139, , -99, , , -99, , , -99, 1095, , -99, , , -99, , , -99, , , -99, 512, , -99, 512, , -99, , , -99, , , -99, 1345, , -99, , , -99, 512, , -99, , , -99, 512, , -99, , , -99, , , -99, , , -99, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -100, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -101, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -102, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -103, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -104, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -105, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -106, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -107, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -108, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -109, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -110, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -111, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -112, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -113, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -114, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -115, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -116, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -117, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -118, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -119, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , -120, , , diff --git a/get_count_no_reflection.sh b/get_count_no_reflection.sh deleted file mode 100755 index 31e461f..0000000 --- a/get_count_no_reflection.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash - -SRC='/homes/rk1923/control_flow_fleshing/src' -ACTION='fuzz' -OUTPUT=./no_reflection -LANG='javabc' -COMPILER='hotspot' -JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' -JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' -JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' - -. $SRC/venv/bin/activate - -PYTHONPATH=$SRC/fuzzflesh - -mkdir -p $OUTPUT - -output_file=count_no_reflection.csv -error_file=count_error_no_reflection.txt - -hotspot_log=$OUTPUT/out/graph_0/prog_0_path_0/hotspot.log - -echo "# of invocation until it gets C1/OSR/C2 compiled" > $output_file -echo "Graph size, C1, OSR, C2" >> $output_file -echo "Error messages" > $error_file - -for i in {10..120} -do - echo "Starting graph size $i" - - for j in {1..20} - do - echo "Iteration: $j" - - rm -rf $OUTPUT/out - - run="python3 -m fuzzflesh \ - $ACTION \ - -base=$OUTPUT \ - --dirs \ - -graphs=1 \ - -paths=1 \ - -min_size=$i \ - -max_size=$(expr $i + 1) \ - $LANG \ - $COMPILER \ - $JVM \ - $JASMIN \ - $JSON" - - eval "$run" - - log=$(grep -E "> $output_file - done -done diff --git a/get_count_reflection.sh b/get_count_reflection.sh deleted file mode 100755 index a878034..0000000 --- a/get_count_reflection.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -SRC='/homes/rk1923/control_flow_fleshing/src' -ACTION='fuzz' -OUTPUT=./reflection -LANG='javabc' -COMPILER='hotspot' -JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' -JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' -JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' - -. $SRC/venv/bin/activate - -PYTHONPATH=$SRC/fuzzflesh - -mkdir -p $OUTPUT - -output_file=count_reflection.csv -error_file=count_error_reflection.txt - -hotspot_log=$OUTPUT/out/graph_0/prog_0_path_0/hotspot.log - -echo "# of invocation until it gets C1/OSR/C2 compiled" > $output_file -echo "Graph size, C1, OSR, C2" >> $output_file -echo "Error messages" > $error_file - -for i in {10..120} -do - echo "Starting graph size $i" - - for j in {1..20} - do - echo "Iteration: $j" - - rm -rf $OUTPUT/out - - run="python3 -m fuzzflesh \ - $ACTION \ - -base=$OUTPUT \ - --dirs \ - -graphs=1 \ - -paths=1 \ - -min_size=$i \ - -max_size=$(expr $i + 1) \ - $LANG \ - $COMPILER \ - $JVM \ - $JASMIN \ - $JSON \ - --reflection" - - eval "$run" - - log=$(grep -E "> $output_file - done -done diff --git a/get_stats_no_reflection.sh b/get_stats_no_reflection.sh deleted file mode 100755 index 8f03809..0000000 --- a/get_stats_no_reflection.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash - -SRC='/homes/rk1923/control_flow_fleshing/src' -ACTION='fuzz' -OUTPUT=./no_reflection -LANG='javabc' -COMPILER='hotspot' -JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' -JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' -JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' - -. $SRC/venv/bin/activate - -PYTHONPATH=$SRC/fuzzflesh - -mkdir -p $OUTPUT - -output_file=stats_no_reflection.csv -error_file=error_no_reflection.txt - -echo "Graph size, # of C1, # of C2" > $output_file -echo "Error messages" > $error_file - -for i in {10..300} -do - echo "Starting graph size $i" - echo "Starting graph size $i" >> $error_file - - c1=0 - c2=0 - - for j in {1..20} - do - echo "Iteration: $j" - - rm -rf $OUTPUT/out - - run="python3 -m fuzzflesh \ - $ACTION \ - -base=$OUTPUT \ - --dirs \ - -graphs=1 \ - -paths=1 \ - -min_size=$i \ - -max_size=$(expr $i + 1) \ - $LANG \ - $COMPILER \ - $JVM \ - $JASMIN \ - $JSON" - - log=$(eval "$run" 2>>$error_file | grep "====") - - if echo $log | grep -q "C1"; then - c1=$((c1+1)) - fi - if echo $log | grep -q "C2"; then - c2=$((c2+1)) - fi - done - - echo "$i, $c1, $c2" >> $output_file -done diff --git a/get_stats_reflection.sh b/get_stats_reflection.sh deleted file mode 100755 index fec3d53..0000000 --- a/get_stats_reflection.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -SRC='/homes/rk1923/control_flow_fleshing/src' -ACTION='fuzz' -OUTPUT=./reflection -LANG='javabc' -COMPILER='hotspot' -JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' -JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' -JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' - -. $SRC/venv/bin/activate - -PYTHONPATH=$SRC/fuzzflesh - -mkdir -p $OUTPUT - -output_file=stats_reflection.csv -error_file=error_reflection.txt - -echo "Graph size, # of C1, # of C2" > $output_file -echo "Error messages" > $error_file - -for i in {10..300} -do - echo "Starting graph size $i" - echo "Starting graph size $i" >> $error_file - - c1=0 - c2=0 - - for j in {1..20} - do - echo "Iteration: $j" - - rm -rf $OUTPUT/out - - run="python3 -m fuzzflesh \ - $ACTION \ - -base=$OUTPUT \ - --dirs \ - -graphs=1 \ - -paths=1 \ - -min_size=$i \ - -max_size=$(expr $i + 1) \ - $LANG \ - $COMPILER \ - $JVM \ - $JASMIN \ - $JSON \ - --reflection" - - log=$(eval "$run" 2>>$error_file | grep "====") - - if echo $log | grep -q "C1"; then - c1=$((c1+1)) - fi - if echo $log | grep -q "C2"; then - c2=$((c2+1)) - fi - done - - echo "$i, $c1, $c2" >> $output_file -done diff --git a/run_template.sh b/run_template.sh index 7c83034..48c6bca 100755 --- a/run_template.sh +++ b/run_template.sh @@ -27,8 +27,8 @@ python3 -m fuzzflesh \ -base=$OUTPUT \ -graphs=1 \ -paths=3 \ - -min_size=2 \ - -max_size=100 \ + -min_size=3 \ + -max_size=10000 \ $LANG \ $COMPILER \ $JVM \ diff --git a/stats_no_reflection.csv b/stats_no_reflection.csv deleted file mode 100644 index 6fa0027..0000000 --- a/stats_no_reflection.csv +++ /dev/null @@ -1,292 +0,0 @@ -Graph size, # of C1, # of C2 -10, 20, 20 -11, 20, 20 -12, 20, 20 -13, 20, 20 -14, 20, 20 -15, 20, 20 -16, 20, 20 -17, 20, 20 -18, 20, 20 -19, 20, 20 -20, 20, 20 -21, 20, 20 -22, 20, 20 -23, 20, 20 -24, 20, 20 -25, 20, 20 -26, 20, 20 -27, 20, 20 -28, 20, 20 -29, 20, 20 -30, 20, 20 -31, 20, 20 -32, 20, 20 -33, 20, 20 -34, 20, 19 -35, 20, 20 -36, 20, 20 -37, 20, 20 -38, 20, 20 -39, 20, 20 -40, 20, 20 -41, 20, 20 -42, 20, 20 -43, 20, 20 -44, 20, 20 -45, 20, 20 -46, 20, 20 -47, 20, 20 -48, 20, 20 -49, 20, 20 -50, 20, 20 -51, 20, 20 -52, 20, 20 -53, 20, 20 -54, 20, 20 -55, 20, 20 -56, 20, 20 -57, 20, 20 -58, 20, 20 -59, 20, 20 -60, 20, 20 -61, 20, 20 -62, 20, 20 -63, 20, 20 -64, 20, 20 -65, 20, 20 -66, 20, 20 -67, 20, 20 -68, 20, 20 -69, 20, 20 -70, 20, 20 -71, 20, 20 -72, 20, 20 -73, 20, 20 -74, 20, 20 -75, 20, 20 -76, 20, 20 -77, 20, 20 -78, 20, 20 -79, 20, 19 -80, 20, 20 -81, 20, 20 -82, 20, 20 -83, 20, 20 -84, 20, 19 -85, 20, 20 -86, 20, 15 -87, 19, 16 -88, 20, 19 -89, 20, 18 -90, 19, 17 -91, 19, 19 -92, 14, 13 -93, 12, 5 -94, 14, 10 -95, 7, 7 -96, 14, 12 -97, 10, 8 -98, 6, 6 -99, 7, 0 -100, 0, 0 -101, 0, 0 -102, 0, 0 -103, 0, 0 -104, 0, 0 -105, 0, 0 -106, 0, 0 -107, 0, 0 -108, 0, 0 -109, 0, 0 -110, 0, 0 -111, 0, 0 -112, 0, 0 -113, 0, 0 -114, 0, 0 -115, 0, 0 -116, 0, 0 -117, 0, 0 -118, 0, 0 -119, 0, 0 -120, 0, 0 -121, 0, 0 -122, 0, 0 -123, 0, 0 -124, 0, 0 -125, 0, 0 -126, 0, 0 -127, 0, 0 -128, 0, 0 -129, 0, 0 -130, 0, 0 -131, 0, 0 -132, 0, 0 -133, 0, 0 -134, 0, 0 -135, 0, 0 -136, 0, 0 -137, 0, 0 -138, 0, 0 -139, 0, 0 -140, 0, 0 -141, 0, 0 -142, 0, 0 -143, 0, 0 -144, 0, 0 -145, 0, 0 -146, 0, 0 -147, 0, 0 -148, 0, 0 -149, 0, 0 -150, 0, 0 -151, 0, 0 -152, 0, 0 -153, 0, 0 -154, 0, 0 -155, 0, 0 -156, 0, 0 -157, 0, 0 -158, 0, 0 -159, 0, 0 -160, 0, 0 -161, 0, 0 -162, 0, 0 -163, 0, 0 -164, 0, 0 -165, 0, 0 -166, 0, 0 -167, 0, 0 -168, 0, 0 -169, 0, 0 -170, 0, 0 -171, 0, 0 -172, 0, 0 -173, 0, 0 -174, 0, 0 -175, 0, 0 -176, 0, 0 -177, 0, 0 -178, 0, 0 -179, 0, 0 -180, 0, 0 -181, 0, 0 -182, 0, 0 -183, 0, 0 -184, 0, 0 -185, 0, 0 -186, 0, 0 -187, 0, 0 -188, 0, 0 -189, 0, 0 -190, 0, 0 -191, 0, 0 -192, 0, 0 -193, 0, 0 -194, 0, 0 -195, 0, 0 -196, 0, 0 -197, 0, 0 -198, 0, 0 -199, 0, 0 -200, 0, 0 -201, 0, 0 -202, 0, 0 -203, 0, 0 -204, 0, 0 -205, 0, 0 -206, 0, 0 -207, 0, 0 -208, 0, 0 -209, 0, 0 -210, 0, 0 -211, 0, 0 -212, 0, 0 -213, 0, 0 -214, 0, 0 -215, 0, 0 -216, 0, 0 -217, 0, 0 -218, 0, 0 -219, 0, 0 -220, 0, 0 -221, 0, 0 -222, 0, 0 -223, 0, 0 -224, 0, 0 -225, 0, 0 -226, 0, 0 -227, 0, 0 -228, 0, 0 -229, 0, 0 -230, 0, 0 -231, 0, 0 -232, 0, 0 -233, 0, 0 -234, 0, 0 -235, 0, 0 -236, 0, 0 -237, 0, 0 -238, 0, 0 -239, 0, 0 -240, 0, 0 -241, 0, 0 -242, 0, 0 -243, 0, 0 -244, 0, 0 -245, 0, 0 -246, 0, 0 -247, 0, 0 -248, 0, 0 -249, 0, 0 -250, 0, 0 -251, 0, 0 -252, 0, 0 -253, 0, 0 -254, 0, 0 -255, 0, 0 -256, 0, 0 -257, 0, 0 -258, 0, 0 -259, 0, 0 -260, 0, 0 -261, 0, 0 -262, 0, 0 -263, 0, 0 -264, 0, 0 -265, 0, 0 -266, 0, 0 -267, 0, 0 -268, 0, 0 -269, 0, 0 -270, 0, 0 -271, 0, 0 -272, 0, 0 -273, 0, 0 -274, 0, 0 -275, 0, 0 -276, 0, 0 -277, 0, 0 -278, 0, 0 -279, 0, 0 -280, 0, 0 -281, 0, 0 -282, 0, 0 -283, 0, 0 -284, 0, 0 -285, 0, 0 -286, 0, 0 -287, 0, 0 -288, 0, 0 -289, 0, 0 -290, 0, 0 -291, 0, 0 -292, 0, 0 -293, 0, 0 -294, 0, 0 -295, 0, 0 -296, 0, 0 -297, 0, 0 -298, 0, 0 -299, 0, 0 -300, 0, 0 diff --git a/stats_reflection.csv b/stats_reflection.csv deleted file mode 100644 index 940c59e..0000000 --- a/stats_reflection.csv +++ /dev/null @@ -1,292 +0,0 @@ -Graph size, # of C1, # of C2 -10, 20, 20 -11, 20, 20 -12, 20, 20 -13, 20, 20 -14, 20, 20 -15, 20, 20 -16, 20, 20 -17, 20, 20 -18, 20, 20 -19, 20, 20 -20, 20, 20 -21, 20, 20 -22, 20, 20 -23, 20, 20 -24, 20, 20 -25, 20, 20 -26, 20, 20 -27, 20, 20 -28, 20, 20 -29, 20, 20 -30, 20, 20 -31, 20, 20 -32, 20, 20 -33, 20, 20 -34, 20, 20 -35, 20, 20 -36, 20, 20 -37, 20, 20 -38, 20, 20 -39, 20, 20 -40, 20, 20 -41, 20, 20 -42, 20, 20 -43, 20, 20 -44, 20, 20 -45, 20, 20 -46, 20, 20 -47, 20, 20 -48, 20, 20 -49, 20, 20 -50, 20, 20 -51, 20, 20 -52, 20, 20 -53, 20, 20 -54, 20, 20 -55, 20, 20 -56, 20, 20 -57, 20, 20 -58, 20, 20 -59, 20, 20 -60, 20, 20 -61, 20, 20 -62, 20, 20 -63, 20, 20 -64, 20, 20 -65, 20, 20 -66, 20, 20 -67, 20, 20 -68, 20, 20 -69, 20, 20 -70, 20, 20 -71, 20, 20 -72, 20, 20 -73, 20, 20 -74, 20, 20 -75, 20, 20 -76, 20, 20 -77, 20, 20 -78, 20, 20 -79, 20, 19 -80, 20, 20 -81, 20, 20 -82, 20, 20 -83, 20, 20 -84, 20, 20 -85, 20, 20 -86, 18, 17 -87, 19, 18 -88, 18, 18 -89, 20, 19 -90, 19, 19 -91, 18, 17 -92, 10, 7 -93, 14, 11 -94, 13, 9 -95, 14, 8 -96, 13, 13 -97, 13, 12 -98, 5, 5 -99, 2, 0 -100, 0, 0 -101, 0, 0 -102, 0, 0 -103, 0, 0 -104, 0, 0 -105, 0, 0 -106, 0, 0 -107, 0, 0 -108, 0, 0 -109, 0, 0 -110, 0, 0 -111, 0, 0 -112, 0, 0 -113, 0, 0 -114, 0, 0 -115, 0, 0 -116, 0, 0 -117, 0, 0 -118, 0, 0 -119, 0, 0 -120, 0, 0 -121, 0, 0 -122, 0, 0 -123, 0, 0 -124, 0, 0 -125, 0, 0 -126, 0, 0 -127, 0, 0 -128, 0, 0 -129, 0, 0 -130, 0, 0 -131, 0, 0 -132, 0, 0 -133, 0, 0 -134, 0, 0 -135, 0, 0 -136, 0, 0 -137, 0, 0 -138, 0, 0 -139, 0, 0 -140, 0, 0 -141, 0, 0 -142, 0, 0 -143, 0, 0 -144, 0, 0 -145, 0, 0 -146, 0, 0 -147, 0, 0 -148, 0, 0 -149, 0, 0 -150, 0, 0 -151, 0, 0 -152, 0, 0 -153, 0, 0 -154, 0, 0 -155, 0, 0 -156, 0, 0 -157, 0, 0 -158, 0, 0 -159, 0, 0 -160, 0, 0 -161, 0, 0 -162, 0, 0 -163, 0, 0 -164, 0, 0 -165, 0, 0 -166, 0, 0 -167, 0, 0 -168, 0, 0 -169, 0, 0 -170, 0, 0 -171, 0, 0 -172, 0, 0 -173, 0, 0 -174, 0, 0 -175, 0, 0 -176, 0, 0 -177, 0, 0 -178, 0, 0 -179, 0, 0 -180, 0, 0 -181, 0, 0 -182, 0, 0 -183, 0, 0 -184, 0, 0 -185, 0, 0 -186, 0, 0 -187, 0, 0 -188, 0, 0 -189, 0, 0 -190, 0, 0 -191, 0, 0 -192, 0, 0 -193, 0, 0 -194, 0, 0 -195, 0, 0 -196, 0, 0 -197, 0, 0 -198, 0, 0 -199, 0, 0 -200, 0, 0 -201, 0, 0 -202, 0, 0 -203, 0, 0 -204, 0, 0 -205, 0, 0 -206, 0, 0 -207, 0, 0 -208, 0, 0 -209, 0, 0 -210, 0, 0 -211, 0, 0 -212, 0, 0 -213, 0, 0 -214, 0, 0 -215, 0, 0 -216, 0, 0 -217, 0, 0 -218, 0, 0 -219, 0, 0 -220, 0, 0 -221, 0, 0 -222, 0, 0 -223, 0, 0 -224, 0, 0 -225, 0, 0 -226, 0, 0 -227, 0, 0 -228, 0, 0 -229, 0, 0 -230, 0, 0 -231, 0, 0 -232, 0, 0 -233, 0, 0 -234, 0, 0 -235, 0, 0 -236, 0, 0 -237, 0, 0 -238, 0, 0 -239, 0, 0 -240, 0, 0 -241, 0, 0 -242, 0, 0 -243, 0, 0 -244, 0, 0 -245, 0, 0 -246, 0, 0 -247, 0, 0 -248, 0, 0 -249, 0, 0 -250, 0, 0 -251, 0, 0 -252, 0, 0 -253, 0, 0 -254, 0, 0 -255, 0, 0 -256, 0, 0 -257, 0, 0 -258, 0, 0 -259, 0, 0 -260, 0, 0 -261, 0, 0 -262, 0, 0 -263, 0, 0 -264, 0, 0 -265, 0, 0 -266, 0, 0 -267, 0, 0 -268, 0, 0 -269, 0, 0 -270, 0, 0 -271, 0, 0 -272, 0, 0 -273, 0, 0 -274, 0, 0 -275, 0, 0 -276, 0, 0 -277, 0, 0 -278, 0, 0 -279, 0, 0 -280, 0, 0 -281, 0, 0 -282, 0, 0 -283, 0, 0 -284, 0, 0 -285, 0, 0 -286, 0, 0 -287, 0, 0 -288, 0, 0 -289, 0, 0 -290, 0, 0 -291, 0, 0 -292, 0, 0 -293, 0, 0 -294, 0, 0 -295, 0, 0 -296, 0, 0 -297, 0, 0 -298, 0, 0 -299, 0, 0 -300, 0, 0 From f602020dd691f477e1d8b24233d9c5c2c0100ccb Mon Sep 17 00:00:00 2001 From: rk1923 Date: Thu, 24 Oct 2024 19:09:06 +0100 Subject: [PATCH 13/13] Keeping the logs --- java_change_dir/run_template.sh | 36 ++++++++++++++++++ java_change_dir_concurrent/run_template.sh | 36 ++++++++++++++++++ java_change_dir_graal/run_template.sh | 36 ++++++++++++++++++ .../run_template.sh | 36 ++++++++++++++++++ java_change_dir_graal_small/run_template.sh | 36 ++++++++++++++++++ javabc_change_dir/run_template.sh | 37 ++++++++++++++++++ javabc_change_dir_graal/run_template.sh | 37 ++++++++++++++++++ javabc_change_dir_graal_small/run_template.sh | 37 ++++++++++++++++++ javabc_dir/run_template.sh | 38 +++++++++++++++++++ javabc_no_dir/run_template.sh | 37 ++++++++++++++++++ 10 files changed, 366 insertions(+) create mode 100755 java_change_dir/run_template.sh create mode 100755 java_change_dir_concurrent/run_template.sh create mode 100755 java_change_dir_graal/run_template.sh create mode 100755 java_change_dir_graal_concurrent/run_template.sh create mode 100755 java_change_dir_graal_small/run_template.sh create mode 100755 javabc_change_dir/run_template.sh create mode 100755 javabc_change_dir_graal/run_template.sh create mode 100755 javabc_change_dir_graal_small/run_template.sh create mode 100755 javabc_dir/run_template.sh create mode 100755 javabc_no_dir/run_template.sh diff --git a/java_change_dir/run_template.sh b/java_change_dir/run_template.sh new file mode 100755 index 0000000..e92cf09 --- /dev/null +++ b/java_change_dir/run_template.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz_with_changing_paths' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='java' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +# JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=3 \ + -min_size=3 \ + -max_size=10000 \ + $LANG \ + $COMPILER \ + $JVM \ + $JSON \ + # --reflection + diff --git a/java_change_dir_concurrent/run_template.sh b/java_change_dir_concurrent/run_template.sh new file mode 100755 index 0000000..e92cf09 --- /dev/null +++ b/java_change_dir_concurrent/run_template.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz_with_changing_paths' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='java' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +# JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=3 \ + -min_size=3 \ + -max_size=10000 \ + $LANG \ + $COMPILER \ + $JVM \ + $JSON \ + # --reflection + diff --git a/java_change_dir_graal/run_template.sh b/java_change_dir_graal/run_template.sh new file mode 100755 index 0000000..a187d61 --- /dev/null +++ b/java_change_dir_graal/run_template.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz_with_changing_paths' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='java' +COMPILER='hotspot' +# JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=3 \ + -min_size=3 \ + -max_size=10000 \ + $LANG \ + $COMPILER \ + $JVM \ + $JSON \ + # --reflection + diff --git a/java_change_dir_graal_concurrent/run_template.sh b/java_change_dir_graal_concurrent/run_template.sh new file mode 100755 index 0000000..a187d61 --- /dev/null +++ b/java_change_dir_graal_concurrent/run_template.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz_with_changing_paths' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='java' +COMPILER='hotspot' +# JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=3 \ + -min_size=3 \ + -max_size=10000 \ + $LANG \ + $COMPILER \ + $JVM \ + $JSON \ + # --reflection + diff --git a/java_change_dir_graal_small/run_template.sh b/java_change_dir_graal_small/run_template.sh new file mode 100755 index 0000000..bcdca04 --- /dev/null +++ b/java_change_dir_graal_small/run_template.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz_with_changing_paths' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='java' +COMPILER='hotspot' +# JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=3 \ + -min_size=3 \ + -max_size=10 \ + $LANG \ + $COMPILER \ + $JVM \ + $JSON \ + # --reflection + diff --git a/javabc_change_dir/run_template.sh b/javabc_change_dir/run_template.sh new file mode 100755 index 0000000..e1de706 --- /dev/null +++ b/javabc_change_dir/run_template.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz_with_changing_paths' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='javabc' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +# JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=3 \ + -min_size=3 \ + -max_size=100 \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON \ + # --reflection + diff --git a/javabc_change_dir_graal/run_template.sh b/javabc_change_dir_graal/run_template.sh new file mode 100755 index 0000000..7d7b17d --- /dev/null +++ b/javabc_change_dir_graal/run_template.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz_with_changing_paths' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='javabc' +COMPILER='hotspot' +# JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=3 \ + -min_size=3 \ + -max_size=100 \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON \ + # --reflection + diff --git a/javabc_change_dir_graal_small/run_template.sh b/javabc_change_dir_graal_small/run_template.sh new file mode 100755 index 0000000..0a26995 --- /dev/null +++ b/javabc_change_dir_graal_small/run_template.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz_with_changing_paths' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='javabc' +COMPILER='hotspot' +# JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=3 \ + -min_size=10 \ + -max_size=11 \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON \ + # --reflection + diff --git a/javabc_dir/run_template.sh b/javabc_dir/run_template.sh new file mode 100755 index 0000000..84d5c13 --- /dev/null +++ b/javabc_dir/run_template.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='javabc' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +# JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=2 \ + -min_size=3 \ + -max_size=100 \ + --dirs \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON \ + # --reflection + diff --git a/javabc_no_dir/run_template.sh b/javabc_no_dir/run_template.sh new file mode 100755 index 0000000..de31f3a --- /dev/null +++ b/javabc_no_dir/run_template.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +TIMESTAMP=$(date +%s) +NAME=$(hostname) +MACHINE=${NAME%%.*} + +SRC='/homes/rk1923/control_flow_fleshing/src' +ACTION='fuzz' +# OUTPUT=/vol/bitbucket/rk1923/UROP/output/${MACHINE}_${TIMESTAMP} +OUTPUT=. +LANG='javabc' +COMPILER='hotspot' +JVM='/usr/lib/jvm/java-17-openjdk-amd64/bin' +# JVM='/vol/bitbucket/rk1923/UROP/graalvm-jdk-22.0.2+9.1/bin' +JASMIN='/vol/bitbucket/rk1923/UROP/jasmin-2.4' +JSON='/vol/bitbucket/rk1923/UROP/json-simple-1.1.1.jar' + +. $SRC/venv/bin/activate + +PYTHONPATH=$SRC/fuzzflesh + +mkdir -p $OUTPUT + +python3 -m fuzzflesh \ + $ACTION \ + -base=$OUTPUT \ + -graphs=1 \ + -paths=2 \ + -min_size=3 \ + -max_size=100 \ + $LANG \ + $COMPILER \ + $JVM \ + $JASMIN \ + $JSON \ + # --reflection +