From 6188ae1cd1129ac89c6ee31f9691a4f79910ad7b Mon Sep 17 00:00:00 2001
From: nosharp
Date: Fri, 12 Jun 2020 20:14:28 +0100
Subject: [PATCH 1/4] Class names can be members of tables.
---
.idea/compiler.xml | 2 +-
.idea/misc.xml | 20 -
src/main/java/org/luapp/language/Luapp.java | 4 +-
.../org/luapp/language/generator/luapp.interp | 2 +-
.../language/generator/luappBaseListener.java | 2 +-
.../language/generator/luappBaseVisitor.java | 2 +-
.../luapp/language/generator/luappLexer.java | 2 +-
.../language/generator/luappListener.java | 2 +-
.../luapp/language/generator/luappParser.java | 901 +++++++++---------
.../language/generator/luappVisitor.java | 2 +-
.../language/handlers/NewClassHandler.java | 18 +
.../luapp/language/handlers/SafeHandler.java | 2 +-
.../language/handlers/StatementHandler.java | 18 +-
.../listeners/MasterLuaPPListener.java | 2 -
.../java/org/luapp/language/parser/luapp.g4 | 6 +-
src/main/java/org/luapp/language/test.lpp | 18 +-
src/main/java/org/luapp/language/test.lua | 35 +-
.../luapp/language/watcher/FileWatcher.java | 4 +
18 files changed, 522 insertions(+), 520 deletions(-)
create mode 100644 src/main/java/org/luapp/language/watcher/FileWatcher.java
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 02f409a..3edce86 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -10,7 +10,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 199b578..80cd069 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,24 +1,5 @@
-
-
-
-
-
-
@@ -26,5 +7,4 @@
-
\ No newline at end of file
diff --git a/src/main/java/org/luapp/language/Luapp.java b/src/main/java/org/luapp/language/Luapp.java
index 9247a6c..2f520d6 100644
--- a/src/main/java/org/luapp/language/Luapp.java
+++ b/src/main/java/org/luapp/language/Luapp.java
@@ -52,7 +52,9 @@ public void load(){
File newFile = new File(newPath);
newFile.createNewFile();
FileWriter writeFile = new FileWriter(newPath);
- writeFile.write("--[[\nWritten by nosharp (https://nosharp.cc),\ntom.bat (tomdotbat.dev),\nsamuel milton (smilton.dev)\n]]--" + this.currentResult);
+ writeFile.write("--[[\nWritten with Lua++.\n" +
+ "Don't remove this notice please\n" +
+ "\nhttps://github.com/LuaPlusPlus/lua-plus-plus\n]]--" + this.currentResult);
writeFile.close();
}catch(IOException ex){
ex.printStackTrace();
diff --git a/src/main/java/org/luapp/language/generator/luapp.interp b/src/main/java/org/luapp/language/generator/luapp.interp
index ed98e0a..dc178bb 100644
--- a/src/main/java/org/luapp/language/generator/luapp.interp
+++ b/src/main/java/org/luapp/language/generator/luapp.interp
@@ -220,4 +220,4 @@ safeOperator
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 82, 542, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 3, 2, 3, 2, 3, 2, 3, 3, 7, 3, 111, 10, 3, 12, 3, 14, 3, 114, 11, 3, 3, 3, 5, 3, 117, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 153, 10, 4, 12, 4, 14, 4, 156, 11, 4, 3, 4, 3, 4, 5, 4, 160, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 172, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 194, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 203, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 215, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 220, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 227, 10, 4, 3, 4, 3, 4, 5, 4, 231, 10, 4, 3, 5, 3, 5, 5, 5, 235, 10, 5, 3, 5, 5, 5, 238, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 7, 7, 247, 10, 7, 12, 7, 14, 7, 250, 11, 7, 3, 7, 3, 7, 5, 7, 254, 10, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 263, 10, 10, 12, 10, 14, 10, 266, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 271, 10, 11, 12, 11, 14, 11, 274, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 279, 10, 12, 12, 12, 14, 12, 282, 11, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 297, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 331, 10, 13, 12, 13, 14, 13, 334, 11, 13, 3, 14, 3, 14, 7, 14, 338, 10, 14, 12, 14, 14, 14, 341, 11, 14, 3, 15, 3, 15, 6, 15, 345, 10, 15, 13, 15, 14, 15, 346, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 354, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 362, 10, 17, 3, 17, 7, 17, 365, 10, 17, 12, 17, 14, 17, 368, 11, 17, 3, 18, 7, 18, 371, 10, 18, 12, 18, 14, 18, 374, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 382, 10, 18, 3, 19, 3, 19, 5, 19, 386, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 392, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 397, 10, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 5, 22, 404, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 5, 23, 413, 10, 23, 3, 23, 5, 23, 416, 10, 23, 3, 24, 3, 24, 5, 24, 420, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 7, 25, 428, 10, 25, 12, 25, 14, 25, 431, 11, 25, 3, 25, 5, 25, 434, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 446, 10, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 6, 44, 494, 10, 44, 13, 44, 14, 44, 495, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 5, 45, 503, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 5, 46, 512, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 7, 47, 518, 10, 47, 12, 47, 14, 47, 521, 11, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 2, 3, 24, 54, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 2, 11, 4, 2, 3, 3, 17, 17, 3, 2, 40, 45, 3, 2, 47, 48, 3, 2, 49, 52, 3, 2, 53, 57, 5, 2, 48, 48, 55, 55, 58, 59, 3, 2, 75, 78, 3, 2, 72, 74, 3, 2, 63, 64, 2, 569, 2, 106, 3, 2, 2, 2, 4, 112, 3, 2, 2, 2, 6, 230, 3, 2, 2, 2, 8, 232, 3, 2, 2, 2, 10, 239, 3, 2, 2, 2, 12, 243, 3, 2, 2, 2, 14, 255, 3, 2, 2, 2, 16, 257, 3, 2, 2, 2, 18, 259, 3, 2, 2, 2, 20, 267, 3, 2, 2, 2, 22, 275, 3, 2, 2, 2, 24, 296, 3, 2, 2, 2, 26, 335, 3, 2, 2, 2, 28, 342, 3, 2, 2, 2, 30, 353, 3, 2, 2, 2, 32, 361, 3, 2, 2, 2, 34, 372, 3, 2, 2, 2, 36, 385, 3, 2, 2, 2, 38, 396, 3, 2, 2, 2, 40, 398, 3, 2, 2, 2, 42, 401, 3, 2, 2, 2, 44, 415, 3, 2, 2, 2, 46, 417, 3, 2, 2, 2, 48, 423, 3, 2, 2, 2, 50, 445, 3, 2, 2, 2, 52, 447, 3, 2, 2, 2, 54, 449, 3, 2, 2, 2, 56, 451, 3, 2, 2, 2, 58, 453, 3, 2, 2, 2, 60, 455, 3, 2, 2, 2, 62, 457, 3, 2, 2, 2, 64, 459, 3, 2, 2, 2, 66, 461, 3, 2, 2, 2, 68, 463, 3, 2, 2, 2, 70, 465, 3, 2, 2, 2, 72, 467, 3, 2, 2, 2, 74, 469, 3, 2, 2, 2, 76, 471, 3, 2, 2, 2, 78, 475, 3, 2, 2, 2, 80, 479, 3, 2, 2, 2, 82, 483, 3, 2, 2, 2, 84, 488, 3, 2, 2, 2, 86, 490, 3, 2, 2, 2, 88, 499, 3, 2, 2, 2, 90, 511, 3, 2, 2, 2, 92, 519, 3, 2, 2, 2, 94, 524, 3, 2, 2, 2, 96, 527, 3, 2, 2, 2, 98, 530, 3, 2, 2, 2, 100, 533, 3, 2, 2, 2, 102, 536, 3, 2, 2, 2, 104, 539, 3, 2, 2, 2, 106, 107, 5, 4, 3, 2, 107, 108, 7, 2, 2, 3, 108, 3, 3, 2, 2, 2, 109, 111, 5, 6, 4, 2, 110, 109, 3, 2, 2, 2, 111, 114, 3, 2, 2, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 115, 117, 5, 8, 5, 2, 116, 115, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 5, 3, 2, 2, 2, 118, 231, 7, 3, 2, 2, 119, 120, 5, 18, 10, 2, 120, 121, 7, 4, 2, 2, 121, 122, 5, 22, 12, 2, 122, 231, 3, 2, 2, 2, 123, 231, 5, 28, 15, 2, 124, 231, 5, 10, 6, 2, 125, 231, 7, 5, 2, 2, 126, 127, 7, 6, 2, 2, 127, 231, 7, 71, 2, 2, 128, 129, 7, 7, 2, 2, 129, 130, 5, 4, 3, 2, 130, 131, 7, 8, 2, 2, 131, 231, 3, 2, 2, 2, 132, 133, 7, 9, 2, 2, 133, 134, 5, 24, 13, 2, 134, 135, 7, 7, 2, 2, 135, 136, 5, 4, 3, 2, 136, 137, 7, 8, 2, 2, 137, 231, 3, 2, 2, 2, 138, 139, 7, 10, 2, 2, 139, 140, 5, 4, 3, 2, 140, 141, 7, 11, 2, 2, 141, 142, 5, 24, 13, 2, 142, 231, 3, 2, 2, 2, 143, 144, 7, 12, 2, 2, 144, 145, 5, 24, 13, 2, 145, 146, 7, 13, 2, 2, 146, 154, 5, 4, 3, 2, 147, 148, 7, 14, 2, 2, 148, 149, 5, 24, 13, 2, 149, 150, 7, 13, 2, 2, 150, 151, 5, 4, 3, 2, 151, 153, 3, 2, 2, 2, 152, 147, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 159, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 158, 7, 15, 2, 2, 158, 160, 5, 4, 3, 2, 159, 157, 3, 2, 2, 2, 159, 160, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 162, 7, 8, 2, 2, 162, 231, 3, 2, 2, 2, 163, 164, 7, 16, 2, 2, 164, 165, 7, 71, 2, 2, 165, 166, 7, 4, 2, 2, 166, 167, 5, 24, 13, 2, 167, 168, 7, 17, 2, 2, 168, 171, 5, 24, 13, 2, 169, 170, 7, 17, 2, 2, 170, 172, 5, 24, 13, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 7, 2, 2, 174, 175, 5, 4, 3, 2, 175, 176, 7, 8, 2, 2, 176, 231, 3, 2, 2, 2, 177, 178, 7, 16, 2, 2, 178, 179, 5, 20, 11, 2, 179, 180, 7, 18, 2, 2, 180, 181, 5, 22, 12, 2, 181, 182, 7, 7, 2, 2, 182, 183, 5, 4, 3, 2, 183, 184, 7, 8, 2, 2, 184, 231, 3, 2, 2, 2, 185, 186, 7, 19, 2, 2, 186, 187, 5, 12, 7, 2, 187, 188, 5, 42, 22, 2, 188, 231, 3, 2, 2, 2, 189, 190, 7, 20, 2, 2, 190, 193, 5, 14, 8, 2, 191, 192, 7, 21, 2, 2, 192, 194, 5, 16, 9, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 5, 92, 47, 2, 196, 231, 3, 2, 2, 2, 197, 198, 7, 22, 2, 2, 198, 199, 7, 20, 2, 2, 199, 202, 5, 14, 8, 2, 200, 201, 7, 21, 2, 2, 201, 203, 5, 16, 9, 2, 202, 200, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 5, 92, 47, 2, 205, 231, 3, 2, 2, 2, 206, 207, 7, 22, 2, 2, 207, 208, 7, 19, 2, 2, 208, 209, 7, 71, 2, 2, 209, 231, 5, 42, 22, 2, 210, 211, 7, 22, 2, 2, 211, 214, 5, 20, 11, 2, 212, 213, 7, 4, 2, 2, 213, 215, 5, 22, 12, 2, 214, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 231, 3, 2, 2, 2, 216, 217, 7, 23, 2, 2, 217, 231, 5, 104, 53, 2, 218, 220, 7, 22, 2, 2, 219, 218, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 222, 5, 20, 11, 2, 222, 223, 7, 4, 2, 2, 223, 224, 5, 76, 39, 2, 224, 231, 3, 2, 2, 2, 225, 227, 7, 22, 2, 2, 226, 225, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 229, 7, 71, 2, 2, 229, 231, 5, 102, 52, 2, 230, 118, 3, 2, 2, 2, 230, 119, 3, 2, 2, 2, 230, 123, 3, 2, 2, 2, 230, 124, 3, 2, 2, 2, 230, 125, 3, 2, 2, 2, 230, 126, 3, 2, 2, 2, 230, 128, 3, 2, 2, 2, 230, 132, 3, 2, 2, 2, 230, 138, 3, 2, 2, 2, 230, 143, 3, 2, 2, 2, 230, 163, 3, 2, 2, 2, 230, 177, 3, 2, 2, 2, 230, 185, 3, 2, 2, 2, 230, 189, 3, 2, 2, 2, 230, 197, 3, 2, 2, 2, 230, 206, 3, 2, 2, 2, 230, 210, 3, 2, 2, 2, 230, 216, 3, 2, 2, 2, 230, 219, 3, 2, 2, 2, 230, 226, 3, 2, 2, 2, 231, 7, 3, 2, 2, 2, 232, 234, 7, 24, 2, 2, 233, 235, 5, 22, 12, 2, 234, 233, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 237, 3, 2, 2, 2, 236, 238, 7, 3, 2, 2, 237, 236, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 9, 3, 2, 2, 2, 239, 240, 7, 25, 2, 2, 240, 241, 7, 71, 2, 2, 241, 242, 7, 25, 2, 2, 242, 11, 3, 2, 2, 2, 243, 248, 7, 71, 2, 2, 244, 245, 7, 26, 2, 2, 245, 247, 7, 71, 2, 2, 246, 244, 3, 2, 2, 2, 247, 250, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 253, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 251, 252, 7, 27, 2, 2, 252, 254, 7, 71, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 13, 3, 2, 2, 2, 255, 256, 7, 71, 2, 2, 256, 15, 3, 2, 2, 2, 257, 258, 7, 71, 2, 2, 258, 17, 3, 2, 2, 2, 259, 264, 5, 32, 17, 2, 260, 261, 7, 17, 2, 2, 261, 263, 5, 32, 17, 2, 262, 260, 3, 2, 2, 2, 263, 266, 3, 2, 2, 2, 264, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 19, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 267, 272, 7, 71, 2, 2, 268, 269, 7, 17, 2, 2, 269, 271, 7, 71, 2, 2, 270, 268, 3, 2, 2, 2, 271, 274, 3, 2, 2, 2, 272, 270, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 21, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 275, 280, 5, 24, 13, 2, 276, 277, 7, 17, 2, 2, 277, 279, 5, 24, 13, 2, 278, 276, 3, 2, 2, 2, 279, 282, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 23, 3, 2, 2, 2, 282, 280, 3, 2, 2, 2, 283, 284, 8, 13, 1, 2, 284, 297, 7, 28, 2, 2, 285, 297, 7, 29, 2, 2, 286, 297, 7, 30, 2, 2, 287, 297, 5, 72, 37, 2, 288, 297, 5, 74, 38, 2, 289, 297, 7, 31, 2, 2, 290, 297, 5, 40, 21, 2, 291, 297, 5, 26, 14, 2, 292, 297, 5, 46, 24, 2, 293, 294, 5, 68, 35, 2, 294, 295, 5, 24, 13, 10, 295, 297, 3, 2, 2, 2, 296, 283, 3, 2, 2, 2, 296, 285, 3, 2, 2, 2, 296, 286, 3, 2, 2, 2, 296, 287, 3, 2, 2, 2, 296, 288, 3, 2, 2, 2, 296, 289, 3, 2, 2, 2, 296, 290, 3, 2, 2, 2, 296, 291, 3, 2, 2, 2, 296, 292, 3, 2, 2, 2, 296, 293, 3, 2, 2, 2, 297, 332, 3, 2, 2, 2, 298, 299, 12, 11, 2, 2, 299, 300, 5, 70, 36, 2, 300, 301, 5, 24, 13, 11, 301, 331, 3, 2, 2, 2, 302, 303, 12, 9, 2, 2, 303, 304, 5, 64, 33, 2, 304, 305, 5, 24, 13, 10, 305, 331, 3, 2, 2, 2, 306, 307, 12, 8, 2, 2, 307, 308, 5, 62, 32, 2, 308, 309, 5, 24, 13, 9, 309, 331, 3, 2, 2, 2, 310, 311, 12, 7, 2, 2, 311, 312, 5, 60, 31, 2, 312, 313, 5, 24, 13, 7, 313, 331, 3, 2, 2, 2, 314, 315, 12, 6, 2, 2, 315, 316, 5, 58, 30, 2, 316, 317, 5, 24, 13, 7, 317, 331, 3, 2, 2, 2, 318, 319, 12, 5, 2, 2, 319, 320, 5, 56, 29, 2, 320, 321, 5, 24, 13, 6, 321, 331, 3, 2, 2, 2, 322, 323, 12, 4, 2, 2, 323, 324, 5, 54, 28, 2, 324, 325, 5, 24, 13, 5, 325, 331, 3, 2, 2, 2, 326, 327, 12, 3, 2, 2, 327, 328, 5, 66, 34, 2, 328, 329, 5, 24, 13, 4, 329, 331, 3, 2, 2, 2, 330, 298, 3, 2, 2, 2, 330, 302, 3, 2, 2, 2, 330, 306, 3, 2, 2, 2, 330, 310, 3, 2, 2, 2, 330, 314, 3, 2, 2, 2, 330, 318, 3, 2, 2, 2, 330, 322, 3, 2, 2, 2, 330, 326, 3, 2, 2, 2, 331, 334, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 25, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 335, 339, 5, 30, 16, 2, 336, 338, 5, 36, 19, 2, 337, 336, 3, 2, 2, 2, 338, 341, 3, 2, 2, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 27, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 342, 344, 5, 30, 16, 2, 343, 345, 5, 36, 19, 2, 344, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 344, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 29, 3, 2, 2, 2, 348, 354, 5, 32, 17, 2, 349, 350, 7, 32, 2, 2, 350, 351, 5, 24, 13, 2, 351, 352, 7, 33, 2, 2, 352, 354, 3, 2, 2, 2, 353, 348, 3, 2, 2, 2, 353, 349, 3, 2, 2, 2, 354, 31, 3, 2, 2, 2, 355, 362, 7, 71, 2, 2, 356, 357, 7, 32, 2, 2, 357, 358, 5, 24, 13, 2, 358, 359, 7, 33, 2, 2, 359, 360, 5, 34, 18, 2, 360, 362, 3, 2, 2, 2, 361, 355, 3, 2, 2, 2, 361, 356, 3, 2, 2, 2, 362, 366, 3, 2, 2, 2, 363, 365, 5, 34, 18, 2, 364, 363, 3, 2, 2, 2, 365, 368, 3, 2, 2, 2, 366, 364, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 33, 3, 2, 2, 2, 368, 366, 3, 2, 2, 2, 369, 371, 5, 36, 19, 2, 370, 369, 3, 2, 2, 2, 371, 374, 3, 2, 2, 2, 372, 370, 3, 2, 2, 2, 372, 373, 3, 2, 2, 2, 373, 381, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 375, 376, 7, 34, 2, 2, 376, 377, 5, 24, 13, 2, 377, 378, 7, 35, 2, 2, 378, 382, 3, 2, 2, 2, 379, 380, 7, 26, 2, 2, 380, 382, 7, 71, 2, 2, 381, 375, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 35, 3, 2, 2, 2, 383, 384, 7, 27, 2, 2, 384, 386, 7, 71, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 388, 5, 38, 20, 2, 388, 37, 3, 2, 2, 2, 389, 391, 7, 32, 2, 2, 390, 392, 5, 22, 12, 2, 391, 390, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 397, 7, 33, 2, 2, 394, 397, 5, 46, 24, 2, 395, 397, 5, 74, 38, 2, 396, 389, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 395, 3, 2, 2, 2, 397, 39, 3, 2, 2, 2, 398, 399, 7, 19, 2, 2, 399, 400, 5, 42, 22, 2, 400, 41, 3, 2, 2, 2, 401, 403, 7, 32, 2, 2, 402, 404, 5, 44, 23, 2, 403, 402, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 406, 7, 33, 2, 2, 406, 407, 5, 4, 3, 2, 407, 408, 7, 8, 2, 2, 408, 43, 3, 2, 2, 2, 409, 412, 5, 20, 11, 2, 410, 411, 7, 17, 2, 2, 411, 413, 7, 31, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 416, 3, 2, 2, 2, 414, 416, 7, 31, 2, 2, 415, 409, 3, 2, 2, 2, 415, 414, 3, 2, 2, 2, 416, 45, 3, 2, 2, 2, 417, 419, 7, 36, 2, 2, 418, 420, 5, 48, 25, 2, 419, 418, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 422, 7, 37, 2, 2, 422, 47, 3, 2, 2, 2, 423, 429, 5, 50, 26, 2, 424, 425, 5, 52, 27, 2, 425, 426, 5, 50, 26, 2, 426, 428, 3, 2, 2, 2, 427, 424, 3, 2, 2, 2, 428, 431, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 432, 434, 5, 52, 27, 2, 433, 432, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 49, 3, 2, 2, 2, 435, 436, 7, 34, 2, 2, 436, 437, 5, 24, 13, 2, 437, 438, 7, 35, 2, 2, 438, 439, 7, 4, 2, 2, 439, 440, 5, 24, 13, 2, 440, 446, 3, 2, 2, 2, 441, 442, 7, 71, 2, 2, 442, 443, 7, 4, 2, 2, 443, 446, 5, 24, 13, 2, 444, 446, 5, 24, 13, 2, 445, 435, 3, 2, 2, 2, 445, 441, 3, 2, 2, 2, 445, 444, 3, 2, 2, 2, 446, 51, 3, 2, 2, 2, 447, 448, 9, 2, 2, 2, 448, 53, 3, 2, 2, 2, 449, 450, 7, 38, 2, 2, 450, 55, 3, 2, 2, 2, 451, 452, 7, 39, 2, 2, 452, 57, 3, 2, 2, 2, 453, 454, 9, 3, 2, 2, 454, 59, 3, 2, 2, 2, 455, 456, 7, 46, 2, 2, 456, 61, 3, 2, 2, 2, 457, 458, 9, 4, 2, 2, 458, 63, 3, 2, 2, 2, 459, 460, 9, 5, 2, 2, 460, 65, 3, 2, 2, 2, 461, 462, 9, 6, 2, 2, 462, 67, 3, 2, 2, 2, 463, 464, 9, 7, 2, 2, 464, 69, 3, 2, 2, 2, 465, 466, 7, 60, 2, 2, 466, 71, 3, 2, 2, 2, 467, 468, 9, 8, 2, 2, 468, 73, 3, 2, 2, 2, 469, 470, 9, 9, 2, 2, 470, 75, 3, 2, 2, 2, 471, 472, 7, 61, 2, 2, 472, 473, 5, 12, 7, 2, 473, 474, 5, 38, 20, 2, 474, 77, 3, 2, 2, 2, 475, 476, 7, 20, 2, 2, 476, 477, 7, 71, 2, 2, 477, 478, 5, 92, 47, 2, 478, 79, 3, 2, 2, 2, 479, 480, 7, 19, 2, 2, 480, 481, 5, 12, 7, 2, 481, 482, 5, 42, 22, 2, 482, 81, 3, 2, 2, 2, 483, 484, 7, 62, 2, 2, 484, 485, 7, 19, 2, 2, 485, 486, 5, 12, 7, 2, 486, 487, 5, 42, 22, 2, 487, 83, 3, 2, 2, 2, 488, 489, 9, 10, 2, 2, 489, 85, 3, 2, 2, 2, 490, 491, 7, 71, 2, 2, 491, 493, 7, 36, 2, 2, 492, 494, 5, 84, 43, 2, 493, 492, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 7, 37, 2, 2, 498, 87, 3, 2, 2, 2, 499, 500, 7, 65, 2, 2, 500, 502, 7, 32, 2, 2, 501, 503, 5, 44, 23, 2, 502, 501, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 505, 7, 33, 2, 2, 505, 506, 5, 4, 3, 2, 506, 507, 7, 8, 2, 2, 507, 89, 3, 2, 2, 2, 508, 512, 5, 80, 41, 2, 509, 512, 5, 86, 44, 2, 510, 512, 5, 88, 45, 2, 511, 508, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 510, 3, 2, 2, 2, 512, 91, 3, 2, 2, 2, 513, 518, 5, 82, 42, 2, 514, 518, 5, 80, 41, 2, 515, 518, 5, 86, 44, 2, 516, 518, 5, 88, 45, 2, 517, 513, 3, 2, 2, 2, 517, 514, 3, 2, 2, 2, 517, 515, 3, 2, 2, 2, 517, 516, 3, 2, 2, 2, 518, 521, 3, 2, 2, 2, 519, 517, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 522, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 522, 523, 7, 8, 2, 2, 523, 93, 3, 2, 2, 2, 524, 525, 7, 71, 2, 2, 525, 526, 7, 66, 2, 2, 526, 95, 3, 2, 2, 2, 527, 528, 7, 71, 2, 2, 528, 529, 7, 67, 2, 2, 529, 97, 3, 2, 2, 2, 530, 531, 7, 71, 2, 2, 531, 532, 7, 68, 2, 2, 532, 99, 3, 2, 2, 2, 533, 534, 7, 71, 2, 2, 534, 535, 7, 69, 2, 2, 535, 101, 3, 2, 2, 2, 536, 537, 7, 71, 2, 2, 537, 538, 7, 70, 2, 2, 538, 103, 3, 2, 2, 2, 539, 540, 5, 32, 17, 2, 540, 105, 3, 2, 2, 2, 45, 112, 116, 154, 159, 171, 193, 202, 214, 219, 226, 230, 234, 237, 248, 253, 264, 272, 280, 296, 330, 332, 339, 346, 353, 361, 366, 372, 381, 385, 391, 396, 403, 412, 415, 419, 429, 433, 445, 495, 502, 511, 517, 519]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 82, 544, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 3, 2, 3, 2, 3, 2, 3, 3, 7, 3, 111, 10, 3, 12, 3, 14, 3, 114, 11, 3, 3, 3, 5, 3, 117, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 153, 10, 4, 12, 4, 14, 4, 156, 11, 4, 3, 4, 3, 4, 5, 4, 160, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 172, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 194, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 199, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 205, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 217, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 222, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 229, 10, 4, 3, 4, 3, 4, 5, 4, 233, 10, 4, 3, 5, 3, 5, 5, 5, 237, 10, 5, 3, 5, 5, 5, 240, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 7, 7, 249, 10, 7, 12, 7, 14, 7, 252, 11, 7, 3, 7, 3, 7, 5, 7, 256, 10, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 265, 10, 10, 12, 10, 14, 10, 268, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 273, 10, 11, 12, 11, 14, 11, 276, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 281, 10, 12, 12, 12, 14, 12, 284, 11, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 299, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 333, 10, 13, 12, 13, 14, 13, 336, 11, 13, 3, 14, 3, 14, 7, 14, 340, 10, 14, 12, 14, 14, 14, 343, 11, 14, 3, 15, 3, 15, 6, 15, 347, 10, 15, 13, 15, 14, 15, 348, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 356, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 364, 10, 17, 3, 17, 7, 17, 367, 10, 17, 12, 17, 14, 17, 370, 11, 17, 3, 18, 7, 18, 373, 10, 18, 12, 18, 14, 18, 376, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 384, 10, 18, 3, 19, 3, 19, 5, 19, 388, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 394, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 399, 10, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 5, 22, 406, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 5, 23, 415, 10, 23, 3, 23, 5, 23, 418, 10, 23, 3, 24, 3, 24, 5, 24, 422, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 7, 25, 430, 10, 25, 12, 25, 14, 25, 433, 11, 25, 3, 25, 5, 25, 436, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 448, 10, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 6, 44, 496, 10, 44, 13, 44, 14, 44, 497, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 5, 45, 505, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 5, 46, 514, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 7, 47, 520, 10, 47, 12, 47, 14, 47, 523, 11, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 2, 3, 24, 54, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 2, 11, 4, 2, 3, 3, 17, 17, 3, 2, 40, 45, 3, 2, 47, 48, 3, 2, 49, 52, 3, 2, 53, 57, 5, 2, 48, 48, 55, 55, 58, 59, 3, 2, 75, 78, 3, 2, 72, 74, 3, 2, 63, 64, 2, 572, 2, 106, 3, 2, 2, 2, 4, 112, 3, 2, 2, 2, 6, 232, 3, 2, 2, 2, 8, 234, 3, 2, 2, 2, 10, 241, 3, 2, 2, 2, 12, 245, 3, 2, 2, 2, 14, 257, 3, 2, 2, 2, 16, 259, 3, 2, 2, 2, 18, 261, 3, 2, 2, 2, 20, 269, 3, 2, 2, 2, 22, 277, 3, 2, 2, 2, 24, 298, 3, 2, 2, 2, 26, 337, 3, 2, 2, 2, 28, 344, 3, 2, 2, 2, 30, 355, 3, 2, 2, 2, 32, 363, 3, 2, 2, 2, 34, 374, 3, 2, 2, 2, 36, 387, 3, 2, 2, 2, 38, 398, 3, 2, 2, 2, 40, 400, 3, 2, 2, 2, 42, 403, 3, 2, 2, 2, 44, 417, 3, 2, 2, 2, 46, 419, 3, 2, 2, 2, 48, 425, 3, 2, 2, 2, 50, 447, 3, 2, 2, 2, 52, 449, 3, 2, 2, 2, 54, 451, 3, 2, 2, 2, 56, 453, 3, 2, 2, 2, 58, 455, 3, 2, 2, 2, 60, 457, 3, 2, 2, 2, 62, 459, 3, 2, 2, 2, 64, 461, 3, 2, 2, 2, 66, 463, 3, 2, 2, 2, 68, 465, 3, 2, 2, 2, 70, 467, 3, 2, 2, 2, 72, 469, 3, 2, 2, 2, 74, 471, 3, 2, 2, 2, 76, 473, 3, 2, 2, 2, 78, 477, 3, 2, 2, 2, 80, 481, 3, 2, 2, 2, 82, 485, 3, 2, 2, 2, 84, 490, 3, 2, 2, 2, 86, 492, 3, 2, 2, 2, 88, 501, 3, 2, 2, 2, 90, 513, 3, 2, 2, 2, 92, 521, 3, 2, 2, 2, 94, 526, 3, 2, 2, 2, 96, 529, 3, 2, 2, 2, 98, 532, 3, 2, 2, 2, 100, 535, 3, 2, 2, 2, 102, 538, 3, 2, 2, 2, 104, 541, 3, 2, 2, 2, 106, 107, 5, 4, 3, 2, 107, 108, 7, 2, 2, 3, 108, 3, 3, 2, 2, 2, 109, 111, 5, 6, 4, 2, 110, 109, 3, 2, 2, 2, 111, 114, 3, 2, 2, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 115, 117, 5, 8, 5, 2, 116, 115, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 5, 3, 2, 2, 2, 118, 233, 7, 3, 2, 2, 119, 120, 5, 18, 10, 2, 120, 121, 7, 4, 2, 2, 121, 122, 5, 22, 12, 2, 122, 233, 3, 2, 2, 2, 123, 233, 5, 28, 15, 2, 124, 233, 5, 10, 6, 2, 125, 233, 7, 5, 2, 2, 126, 127, 7, 6, 2, 2, 127, 233, 7, 71, 2, 2, 128, 129, 7, 7, 2, 2, 129, 130, 5, 4, 3, 2, 130, 131, 7, 8, 2, 2, 131, 233, 3, 2, 2, 2, 132, 133, 7, 9, 2, 2, 133, 134, 5, 24, 13, 2, 134, 135, 7, 7, 2, 2, 135, 136, 5, 4, 3, 2, 136, 137, 7, 8, 2, 2, 137, 233, 3, 2, 2, 2, 138, 139, 7, 10, 2, 2, 139, 140, 5, 4, 3, 2, 140, 141, 7, 11, 2, 2, 141, 142, 5, 24, 13, 2, 142, 233, 3, 2, 2, 2, 143, 144, 7, 12, 2, 2, 144, 145, 5, 24, 13, 2, 145, 146, 7, 13, 2, 2, 146, 154, 5, 4, 3, 2, 147, 148, 7, 14, 2, 2, 148, 149, 5, 24, 13, 2, 149, 150, 7, 13, 2, 2, 150, 151, 5, 4, 3, 2, 151, 153, 3, 2, 2, 2, 152, 147, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 159, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 158, 7, 15, 2, 2, 158, 160, 5, 4, 3, 2, 159, 157, 3, 2, 2, 2, 159, 160, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 162, 7, 8, 2, 2, 162, 233, 3, 2, 2, 2, 163, 164, 7, 16, 2, 2, 164, 165, 7, 71, 2, 2, 165, 166, 7, 4, 2, 2, 166, 167, 5, 24, 13, 2, 167, 168, 7, 17, 2, 2, 168, 171, 5, 24, 13, 2, 169, 170, 7, 17, 2, 2, 170, 172, 5, 24, 13, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 7, 2, 2, 174, 175, 5, 4, 3, 2, 175, 176, 7, 8, 2, 2, 176, 233, 3, 2, 2, 2, 177, 178, 7, 16, 2, 2, 178, 179, 5, 20, 11, 2, 179, 180, 7, 18, 2, 2, 180, 181, 5, 22, 12, 2, 181, 182, 7, 7, 2, 2, 182, 183, 5, 4, 3, 2, 183, 184, 7, 8, 2, 2, 184, 233, 3, 2, 2, 2, 185, 186, 7, 19, 2, 2, 186, 187, 5, 12, 7, 2, 187, 188, 5, 42, 22, 2, 188, 233, 3, 2, 2, 2, 189, 190, 7, 20, 2, 2, 190, 193, 5, 14, 8, 2, 191, 192, 7, 21, 2, 2, 192, 194, 5, 16, 9, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 5, 92, 47, 2, 196, 233, 3, 2, 2, 2, 197, 199, 7, 22, 2, 2, 198, 197, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 7, 20, 2, 2, 201, 204, 5, 14, 8, 2, 202, 203, 7, 21, 2, 2, 203, 205, 5, 16, 9, 2, 204, 202, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 207, 5, 92, 47, 2, 207, 233, 3, 2, 2, 2, 208, 209, 7, 22, 2, 2, 209, 210, 7, 19, 2, 2, 210, 211, 7, 71, 2, 2, 211, 233, 5, 42, 22, 2, 212, 213, 7, 22, 2, 2, 213, 216, 5, 20, 11, 2, 214, 215, 7, 4, 2, 2, 215, 217, 5, 22, 12, 2, 216, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 233, 3, 2, 2, 2, 218, 219, 7, 23, 2, 2, 219, 233, 5, 104, 53, 2, 220, 222, 7, 22, 2, 2, 221, 220, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 5, 20, 11, 2, 224, 225, 7, 4, 2, 2, 225, 226, 5, 76, 39, 2, 226, 233, 3, 2, 2, 2, 227, 229, 7, 22, 2, 2, 228, 227, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 7, 71, 2, 2, 231, 233, 5, 102, 52, 2, 232, 118, 3, 2, 2, 2, 232, 119, 3, 2, 2, 2, 232, 123, 3, 2, 2, 2, 232, 124, 3, 2, 2, 2, 232, 125, 3, 2, 2, 2, 232, 126, 3, 2, 2, 2, 232, 128, 3, 2, 2, 2, 232, 132, 3, 2, 2, 2, 232, 138, 3, 2, 2, 2, 232, 143, 3, 2, 2, 2, 232, 163, 3, 2, 2, 2, 232, 177, 3, 2, 2, 2, 232, 185, 3, 2, 2, 2, 232, 189, 3, 2, 2, 2, 232, 198, 3, 2, 2, 2, 232, 208, 3, 2, 2, 2, 232, 212, 3, 2, 2, 2, 232, 218, 3, 2, 2, 2, 232, 221, 3, 2, 2, 2, 232, 228, 3, 2, 2, 2, 233, 7, 3, 2, 2, 2, 234, 236, 7, 24, 2, 2, 235, 237, 5, 22, 12, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 239, 3, 2, 2, 2, 238, 240, 7, 3, 2, 2, 239, 238, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 9, 3, 2, 2, 2, 241, 242, 7, 25, 2, 2, 242, 243, 7, 71, 2, 2, 243, 244, 7, 25, 2, 2, 244, 11, 3, 2, 2, 2, 245, 250, 7, 71, 2, 2, 246, 247, 7, 26, 2, 2, 247, 249, 7, 71, 2, 2, 248, 246, 3, 2, 2, 2, 249, 252, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 255, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 253, 254, 7, 27, 2, 2, 254, 256, 7, 71, 2, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 13, 3, 2, 2, 2, 257, 258, 5, 32, 17, 2, 258, 15, 3, 2, 2, 2, 259, 260, 5, 32, 17, 2, 260, 17, 3, 2, 2, 2, 261, 266, 5, 32, 17, 2, 262, 263, 7, 17, 2, 2, 263, 265, 5, 32, 17, 2, 264, 262, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 19, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 274, 7, 71, 2, 2, 270, 271, 7, 17, 2, 2, 271, 273, 7, 71, 2, 2, 272, 270, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 21, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 277, 282, 5, 24, 13, 2, 278, 279, 7, 17, 2, 2, 279, 281, 5, 24, 13, 2, 280, 278, 3, 2, 2, 2, 281, 284, 3, 2, 2, 2, 282, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 23, 3, 2, 2, 2, 284, 282, 3, 2, 2, 2, 285, 286, 8, 13, 1, 2, 286, 299, 7, 28, 2, 2, 287, 299, 7, 29, 2, 2, 288, 299, 7, 30, 2, 2, 289, 299, 5, 72, 37, 2, 290, 299, 5, 74, 38, 2, 291, 299, 7, 31, 2, 2, 292, 299, 5, 40, 21, 2, 293, 299, 5, 26, 14, 2, 294, 299, 5, 46, 24, 2, 295, 296, 5, 68, 35, 2, 296, 297, 5, 24, 13, 10, 297, 299, 3, 2, 2, 2, 298, 285, 3, 2, 2, 2, 298, 287, 3, 2, 2, 2, 298, 288, 3, 2, 2, 2, 298, 289, 3, 2, 2, 2, 298, 290, 3, 2, 2, 2, 298, 291, 3, 2, 2, 2, 298, 292, 3, 2, 2, 2, 298, 293, 3, 2, 2, 2, 298, 294, 3, 2, 2, 2, 298, 295, 3, 2, 2, 2, 299, 334, 3, 2, 2, 2, 300, 301, 12, 11, 2, 2, 301, 302, 5, 70, 36, 2, 302, 303, 5, 24, 13, 11, 303, 333, 3, 2, 2, 2, 304, 305, 12, 9, 2, 2, 305, 306, 5, 64, 33, 2, 306, 307, 5, 24, 13, 10, 307, 333, 3, 2, 2, 2, 308, 309, 12, 8, 2, 2, 309, 310, 5, 62, 32, 2, 310, 311, 5, 24, 13, 9, 311, 333, 3, 2, 2, 2, 312, 313, 12, 7, 2, 2, 313, 314, 5, 60, 31, 2, 314, 315, 5, 24, 13, 7, 315, 333, 3, 2, 2, 2, 316, 317, 12, 6, 2, 2, 317, 318, 5, 58, 30, 2, 318, 319, 5, 24, 13, 7, 319, 333, 3, 2, 2, 2, 320, 321, 12, 5, 2, 2, 321, 322, 5, 56, 29, 2, 322, 323, 5, 24, 13, 6, 323, 333, 3, 2, 2, 2, 324, 325, 12, 4, 2, 2, 325, 326, 5, 54, 28, 2, 326, 327, 5, 24, 13, 5, 327, 333, 3, 2, 2, 2, 328, 329, 12, 3, 2, 2, 329, 330, 5, 66, 34, 2, 330, 331, 5, 24, 13, 4, 331, 333, 3, 2, 2, 2, 332, 300, 3, 2, 2, 2, 332, 304, 3, 2, 2, 2, 332, 308, 3, 2, 2, 2, 332, 312, 3, 2, 2, 2, 332, 316, 3, 2, 2, 2, 332, 320, 3, 2, 2, 2, 332, 324, 3, 2, 2, 2, 332, 328, 3, 2, 2, 2, 333, 336, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 25, 3, 2, 2, 2, 336, 334, 3, 2, 2, 2, 337, 341, 5, 30, 16, 2, 338, 340, 5, 36, 19, 2, 339, 338, 3, 2, 2, 2, 340, 343, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2, 342, 27, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 344, 346, 5, 30, 16, 2, 345, 347, 5, 36, 19, 2, 346, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 346, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 29, 3, 2, 2, 2, 350, 356, 5, 32, 17, 2, 351, 352, 7, 32, 2, 2, 352, 353, 5, 24, 13, 2, 353, 354, 7, 33, 2, 2, 354, 356, 3, 2, 2, 2, 355, 350, 3, 2, 2, 2, 355, 351, 3, 2, 2, 2, 356, 31, 3, 2, 2, 2, 357, 364, 7, 71, 2, 2, 358, 359, 7, 32, 2, 2, 359, 360, 5, 24, 13, 2, 360, 361, 7, 33, 2, 2, 361, 362, 5, 34, 18, 2, 362, 364, 3, 2, 2, 2, 363, 357, 3, 2, 2, 2, 363, 358, 3, 2, 2, 2, 364, 368, 3, 2, 2, 2, 365, 367, 5, 34, 18, 2, 366, 365, 3, 2, 2, 2, 367, 370, 3, 2, 2, 2, 368, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 33, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, 371, 373, 5, 36, 19, 2, 372, 371, 3, 2, 2, 2, 373, 376, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 383, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 377, 378, 7, 34, 2, 2, 378, 379, 5, 24, 13, 2, 379, 380, 7, 35, 2, 2, 380, 384, 3, 2, 2, 2, 381, 382, 7, 26, 2, 2, 382, 384, 7, 71, 2, 2, 383, 377, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 384, 35, 3, 2, 2, 2, 385, 386, 7, 27, 2, 2, 386, 388, 7, 71, 2, 2, 387, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 390, 5, 38, 20, 2, 390, 37, 3, 2, 2, 2, 391, 393, 7, 32, 2, 2, 392, 394, 5, 22, 12, 2, 393, 392, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 399, 7, 33, 2, 2, 396, 399, 5, 46, 24, 2, 397, 399, 5, 74, 38, 2, 398, 391, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 398, 397, 3, 2, 2, 2, 399, 39, 3, 2, 2, 2, 400, 401, 7, 19, 2, 2, 401, 402, 5, 42, 22, 2, 402, 41, 3, 2, 2, 2, 403, 405, 7, 32, 2, 2, 404, 406, 5, 44, 23, 2, 405, 404, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 7, 33, 2, 2, 408, 409, 5, 4, 3, 2, 409, 410, 7, 8, 2, 2, 410, 43, 3, 2, 2, 2, 411, 414, 5, 20, 11, 2, 412, 413, 7, 17, 2, 2, 413, 415, 7, 31, 2, 2, 414, 412, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 418, 3, 2, 2, 2, 416, 418, 7, 31, 2, 2, 417, 411, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 45, 3, 2, 2, 2, 419, 421, 7, 36, 2, 2, 420, 422, 5, 48, 25, 2, 421, 420, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 7, 37, 2, 2, 424, 47, 3, 2, 2, 2, 425, 431, 5, 50, 26, 2, 426, 427, 5, 52, 27, 2, 427, 428, 5, 50, 26, 2, 428, 430, 3, 2, 2, 2, 429, 426, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 436, 5, 52, 27, 2, 435, 434, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 49, 3, 2, 2, 2, 437, 438, 7, 34, 2, 2, 438, 439, 5, 24, 13, 2, 439, 440, 7, 35, 2, 2, 440, 441, 7, 4, 2, 2, 441, 442, 5, 24, 13, 2, 442, 448, 3, 2, 2, 2, 443, 444, 7, 71, 2, 2, 444, 445, 7, 4, 2, 2, 445, 448, 5, 24, 13, 2, 446, 448, 5, 24, 13, 2, 447, 437, 3, 2, 2, 2, 447, 443, 3, 2, 2, 2, 447, 446, 3, 2, 2, 2, 448, 51, 3, 2, 2, 2, 449, 450, 9, 2, 2, 2, 450, 53, 3, 2, 2, 2, 451, 452, 7, 38, 2, 2, 452, 55, 3, 2, 2, 2, 453, 454, 7, 39, 2, 2, 454, 57, 3, 2, 2, 2, 455, 456, 9, 3, 2, 2, 456, 59, 3, 2, 2, 2, 457, 458, 7, 46, 2, 2, 458, 61, 3, 2, 2, 2, 459, 460, 9, 4, 2, 2, 460, 63, 3, 2, 2, 2, 461, 462, 9, 5, 2, 2, 462, 65, 3, 2, 2, 2, 463, 464, 9, 6, 2, 2, 464, 67, 3, 2, 2, 2, 465, 466, 9, 7, 2, 2, 466, 69, 3, 2, 2, 2, 467, 468, 7, 60, 2, 2, 468, 71, 3, 2, 2, 2, 469, 470, 9, 8, 2, 2, 470, 73, 3, 2, 2, 2, 471, 472, 9, 9, 2, 2, 472, 75, 3, 2, 2, 2, 473, 474, 7, 61, 2, 2, 474, 475, 5, 12, 7, 2, 475, 476, 5, 38, 20, 2, 476, 77, 3, 2, 2, 2, 477, 478, 7, 20, 2, 2, 478, 479, 7, 71, 2, 2, 479, 480, 5, 92, 47, 2, 480, 79, 3, 2, 2, 2, 481, 482, 7, 19, 2, 2, 482, 483, 5, 12, 7, 2, 483, 484, 5, 42, 22, 2, 484, 81, 3, 2, 2, 2, 485, 486, 7, 62, 2, 2, 486, 487, 7, 19, 2, 2, 487, 488, 5, 12, 7, 2, 488, 489, 5, 42, 22, 2, 489, 83, 3, 2, 2, 2, 490, 491, 9, 10, 2, 2, 491, 85, 3, 2, 2, 2, 492, 493, 7, 71, 2, 2, 493, 495, 7, 36, 2, 2, 494, 496, 5, 84, 43, 2, 495, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 7, 37, 2, 2, 500, 87, 3, 2, 2, 2, 501, 502, 7, 65, 2, 2, 502, 504, 7, 32, 2, 2, 503, 505, 5, 44, 23, 2, 504, 503, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 507, 7, 33, 2, 2, 507, 508, 5, 4, 3, 2, 508, 509, 7, 8, 2, 2, 509, 89, 3, 2, 2, 2, 510, 514, 5, 80, 41, 2, 511, 514, 5, 86, 44, 2, 512, 514, 5, 88, 45, 2, 513, 510, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 513, 512, 3, 2, 2, 2, 514, 91, 3, 2, 2, 2, 515, 520, 5, 82, 42, 2, 516, 520, 5, 80, 41, 2, 517, 520, 5, 86, 44, 2, 518, 520, 5, 88, 45, 2, 519, 515, 3, 2, 2, 2, 519, 516, 3, 2, 2, 2, 519, 517, 3, 2, 2, 2, 519, 518, 3, 2, 2, 2, 520, 523, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 524, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 524, 525, 7, 8, 2, 2, 525, 93, 3, 2, 2, 2, 526, 527, 7, 71, 2, 2, 527, 528, 7, 66, 2, 2, 528, 95, 3, 2, 2, 2, 529, 530, 7, 71, 2, 2, 530, 531, 7, 67, 2, 2, 531, 97, 3, 2, 2, 2, 532, 533, 7, 71, 2, 2, 533, 534, 7, 68, 2, 2, 534, 99, 3, 2, 2, 2, 535, 536, 7, 71, 2, 2, 536, 537, 7, 69, 2, 2, 537, 101, 3, 2, 2, 2, 538, 539, 7, 71, 2, 2, 539, 540, 7, 70, 2, 2, 540, 103, 3, 2, 2, 2, 541, 542, 5, 32, 17, 2, 542, 105, 3, 2, 2, 2, 46, 112, 116, 154, 159, 171, 193, 198, 204, 216, 221, 228, 232, 236, 239, 250, 255, 266, 274, 282, 298, 332, 334, 341, 348, 355, 363, 368, 374, 383, 387, 393, 398, 405, 414, 417, 421, 431, 435, 447, 497, 504, 513, 519, 521]
\ No newline at end of file
diff --git a/src/main/java/org/luapp/language/generator/luappBaseListener.java b/src/main/java/org/luapp/language/generator/luappBaseListener.java
index dda4aed..e0f24da 100644
--- a/src/main/java/org/luapp/language/generator/luappBaseListener.java
+++ b/src/main/java/org/luapp/language/generator/luappBaseListener.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/Harry/Desktop/Lua/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
+// Generated from C:/Users/Harry/Desktop/Lua/lpp2electricboogaloo/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
package org.luapp.language.generator;
import org.antlr.v4.runtime.ParserRuleContext;
diff --git a/src/main/java/org/luapp/language/generator/luappBaseVisitor.java b/src/main/java/org/luapp/language/generator/luappBaseVisitor.java
index e18ede9..dc61a93 100644
--- a/src/main/java/org/luapp/language/generator/luappBaseVisitor.java
+++ b/src/main/java/org/luapp/language/generator/luappBaseVisitor.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/Harry/Desktop/Lua/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
+// Generated from C:/Users/Harry/Desktop/Lua/lpp2electricboogaloo/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
package org.luapp.language.generator;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
diff --git a/src/main/java/org/luapp/language/generator/luappLexer.java b/src/main/java/org/luapp/language/generator/luappLexer.java
index 1705e83..cddf075 100644
--- a/src/main/java/org/luapp/language/generator/luappLexer.java
+++ b/src/main/java/org/luapp/language/generator/luappLexer.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/Harry/Desktop/Lua/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
+// Generated from C:/Users/Harry/Desktop/Lua/lpp2electricboogaloo/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
package org.luapp.language.generator;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
diff --git a/src/main/java/org/luapp/language/generator/luappListener.java b/src/main/java/org/luapp/language/generator/luappListener.java
index 427ab55..5a3da7c 100644
--- a/src/main/java/org/luapp/language/generator/luappListener.java
+++ b/src/main/java/org/luapp/language/generator/luappListener.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/Harry/Desktop/Lua/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
+// Generated from C:/Users/Harry/Desktop/Lua/lpp2electricboogaloo/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
package org.luapp.language.generator;
import org.antlr.v4.runtime.tree.ParseTreeListener;
diff --git a/src/main/java/org/luapp/language/generator/luappParser.java b/src/main/java/org/luapp/language/generator/luappParser.java
index 6ab187b..41c1b7c 100644
--- a/src/main/java/org/luapp/language/generator/luappParser.java
+++ b/src/main/java/org/luapp/language/generator/luappParser.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/Harry/Desktop/Lua/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
+// Generated from C:/Users/Harry/Desktop/Lua/lpp2electricboogaloo/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
package org.luapp.language.generator;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
@@ -334,9 +334,9 @@ public final StatContext stat() throws RecognitionException {
enterRule(_localctx, 4, RULE_stat);
int _la;
try {
- setState(228);
+ setState(230);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
@@ -562,56 +562,64 @@ public final StatContext stat() throws RecognitionException {
case 15:
enterOuterAlt(_localctx, 15);
{
- setState(195);
- match(T__19);
setState(196);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==T__19) {
+ {
+ setState(195);
+ match(T__19);
+ }
+ }
+
+ setState(198);
match(T__17);
- setState(197);
+ setState(199);
classname();
- setState(200);
+ setState(202);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__18) {
{
- setState(198);
+ setState(200);
match(T__18);
- setState(199);
+ setState(201);
abstractclassname();
}
}
- setState(202);
+ setState(204);
classbody();
}
break;
case 16:
enterOuterAlt(_localctx, 16);
{
- setState(204);
+ setState(206);
match(T__19);
- setState(205);
+ setState(207);
match(T__16);
- setState(206);
+ setState(208);
match(NAME);
- setState(207);
+ setState(209);
funcbody();
}
break;
case 17:
enterOuterAlt(_localctx, 17);
{
- setState(208);
+ setState(210);
match(T__19);
- setState(209);
+ setState(211);
namelist();
- setState(212);
+ setState(214);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__1) {
{
- setState(210);
+ setState(212);
match(T__1);
- setState(211);
+ setState(213);
explist();
}
}
@@ -621,49 +629,49 @@ public final StatContext stat() throws RecognitionException {
case 18:
enterOuterAlt(_localctx, 18);
{
- setState(214);
+ setState(216);
match(T__20);
- setState(215);
+ setState(217);
safeOperator();
}
break;
case 19:
enterOuterAlt(_localctx, 19);
{
- setState(217);
+ setState(219);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__19) {
{
- setState(216);
+ setState(218);
match(T__19);
}
}
- setState(219);
+ setState(221);
namelist();
- setState(220);
+ setState(222);
match(T__1);
- setState(221);
+ setState(223);
newclass();
}
break;
case 20:
enterOuterAlt(_localctx, 20);
{
- setState(224);
+ setState(226);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__19) {
{
- setState(223);
+ setState(225);
match(T__19);
}
}
- setState(226);
+ setState(228);
match(NAME);
- setState(227);
+ setState(229);
minusEqual();
}
break;
@@ -710,24 +718,24 @@ public final RetstatContext retstat() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(230);
- match(T__21);
setState(232);
+ match(T__21);
+ setState(234);
_errHandler.sync(this);
_la = _input.LA(1);
if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__25 - 17)) | (1L << (T__26 - 17)) | (1L << (T__27 - 17)) | (1L << (T__28 - 17)) | (1L << (T__29 - 17)) | (1L << (T__33 - 17)) | (1L << (T__45 - 17)) | (1L << (T__52 - 17)) | (1L << (T__55 - 17)) | (1L << (T__56 - 17)) | (1L << (NAME - 17)) | (1L << (NORMALSTRING - 17)) | (1L << (CHARSTRING - 17)) | (1L << (LONGSTRING - 17)) | (1L << (INT - 17)) | (1L << (HEX - 17)) | (1L << (FLOAT - 17)) | (1L << (HEX_FLOAT - 17)))) != 0)) {
{
- setState(231);
+ setState(233);
explist();
}
}
- setState(235);
+ setState(237);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__0) {
{
- setState(234);
+ setState(236);
match(T__0);
}
}
@@ -772,11 +780,11 @@ public final LabelContext label() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(237);
+ setState(239);
match(T__22);
- setState(238);
+ setState(240);
match(NAME);
- setState(239);
+ setState(241);
match(T__22);
}
}
@@ -822,32 +830,32 @@ public final FuncnameContext funcname() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(241);
+ setState(243);
match(NAME);
- setState(246);
+ setState(248);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__23) {
{
{
- setState(242);
+ setState(244);
match(T__23);
- setState(243);
+ setState(245);
match(NAME);
}
}
- setState(248);
+ setState(250);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(251);
+ setState(253);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__24) {
{
- setState(249);
+ setState(251);
match(T__24);
- setState(250);
+ setState(252);
match(NAME);
}
}
@@ -866,7 +874,9 @@ public final FuncnameContext funcname() throws RecognitionException {
}
public static class ClassnameContext extends ParserRuleContext {
- public TerminalNode NAME() { return getToken(luappParser.NAME, 0); }
+ public VarContext var() {
+ return getRuleContext(VarContext.class,0);
+ }
public ClassnameContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -892,8 +902,8 @@ public final ClassnameContext classname() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(253);
- match(NAME);
+ setState(255);
+ var();
}
}
catch (RecognitionException re) {
@@ -908,7 +918,9 @@ public final ClassnameContext classname() throws RecognitionException {
}
public static class AbstractclassnameContext extends ParserRuleContext {
- public TerminalNode NAME() { return getToken(luappParser.NAME, 0); }
+ public VarContext var() {
+ return getRuleContext(VarContext.class,0);
+ }
public AbstractclassnameContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -934,8 +946,8 @@ public final AbstractclassnameContext abstractclassname() throws RecognitionExce
try {
enterOuterAlt(_localctx, 1);
{
- setState(255);
- match(NAME);
+ setState(257);
+ var();
}
}
catch (RecognitionException re) {
@@ -982,21 +994,21 @@ public final VarlistContext varlist() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(257);
+ setState(259);
var();
- setState(262);
+ setState(264);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__14) {
{
{
- setState(258);
+ setState(260);
match(T__14);
- setState(259);
+ setState(261);
var();
}
}
- setState(264);
+ setState(266);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1044,25 +1056,25 @@ public final NamelistContext namelist() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(265);
+ setState(267);
match(NAME);
- setState(270);
+ setState(272);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,17,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(266);
+ setState(268);
match(T__14);
- setState(267);
+ setState(269);
match(NAME);
}
}
}
- setState(272);
+ setState(274);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,17,_ctx);
}
}
}
@@ -1110,21 +1122,21 @@ public final ExplistContext explist() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(273);
+ setState(275);
exp(0);
- setState(278);
+ setState(280);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__14) {
{
{
- setState(274);
+ setState(276);
match(T__14);
- setState(275);
+ setState(277);
exp(0);
}
}
- setState(280);
+ setState(282);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1224,24 +1236,24 @@ private ExpContext exp(int _p) throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(294);
+ setState(296);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__25:
{
- setState(282);
+ setState(284);
match(T__25);
}
break;
case T__26:
{
- setState(283);
+ setState(285);
match(T__26);
}
break;
case T__27:
{
- setState(284);
+ setState(286);
match(T__27);
}
break;
@@ -1250,7 +1262,7 @@ private ExpContext exp(int _p) throws RecognitionException {
case FLOAT:
case HEX_FLOAT:
{
- setState(285);
+ setState(287);
number();
}
break;
@@ -1258,32 +1270,32 @@ private ExpContext exp(int _p) throws RecognitionException {
case CHARSTRING:
case LONGSTRING:
{
- setState(286);
+ setState(288);
string();
}
break;
case T__28:
{
- setState(287);
+ setState(289);
match(T__28);
}
break;
case T__16:
{
- setState(288);
+ setState(290);
functiondef();
}
break;
case T__29:
case NAME:
{
- setState(289);
+ setState(291);
prefixexp();
}
break;
case T__33:
{
- setState(290);
+ setState(292);
tableconstructor();
}
break;
@@ -1292,9 +1304,9 @@ private ExpContext exp(int _p) throws RecognitionException {
case T__55:
case T__56:
{
- setState(291);
+ setState(293);
operatorUnary();
- setState(292);
+ setState(294);
exp(8);
}
break;
@@ -1302,26 +1314,26 @@ private ExpContext exp(int _p) throws RecognitionException {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(330);
+ setState(332);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(328);
+ setState(330);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
case 1:
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(296);
+ setState(298);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(297);
+ setState(299);
operatorPower();
- setState(298);
+ setState(300);
exp(9);
}
break;
@@ -1329,11 +1341,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(300);
+ setState(302);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(301);
+ setState(303);
operatorMulDivMod();
- setState(302);
+ setState(304);
exp(8);
}
break;
@@ -1341,11 +1353,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(304);
+ setState(306);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(305);
+ setState(307);
operatorAddSub();
- setState(306);
+ setState(308);
exp(7);
}
break;
@@ -1353,11 +1365,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(308);
+ setState(310);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(309);
+ setState(311);
operatorStrcat();
- setState(310);
+ setState(312);
exp(5);
}
break;
@@ -1365,11 +1377,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(312);
+ setState(314);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(313);
+ setState(315);
operatorComparison();
- setState(314);
+ setState(316);
exp(5);
}
break;
@@ -1377,11 +1389,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(316);
+ setState(318);
if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(317);
+ setState(319);
operatorAnd();
- setState(318);
+ setState(320);
exp(4);
}
break;
@@ -1389,11 +1401,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(320);
+ setState(322);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(321);
+ setState(323);
operatorOr();
- setState(322);
+ setState(324);
exp(3);
}
break;
@@ -1401,20 +1413,20 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(324);
+ setState(326);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(325);
+ setState(327);
operatorBitwise();
- setState(326);
+ setState(328);
exp(2);
}
break;
}
}
}
- setState(332);
+ setState(334);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
}
}
}
@@ -1465,23 +1477,23 @@ public final PrefixexpContext prefixexp() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(333);
+ setState(335);
varOrExp();
- setState(337);
+ setState(339);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(334);
+ setState(336);
nameAndArgs();
}
}
}
- setState(339);
+ setState(341);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
}
}
}
@@ -1532,9 +1544,9 @@ public final FunctioncallContext functioncall() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(340);
+ setState(342);
varOrExp();
- setState(342);
+ setState(344);
_errHandler.sync(this);
_alt = 1;
do {
@@ -1542,7 +1554,7 @@ public final FunctioncallContext functioncall() throws RecognitionException {
case 1:
{
{
- setState(341);
+ setState(343);
nameAndArgs();
}
}
@@ -1550,9 +1562,9 @@ public final FunctioncallContext functioncall() throws RecognitionException {
default:
throw new NoViableAltException(this);
}
- setState(344);
+ setState(346);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,23,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
}
}
@@ -1597,24 +1609,24 @@ public final VarOrExpContext varOrExp() throws RecognitionException {
VarOrExpContext _localctx = new VarOrExpContext(_ctx, getState());
enterRule(_localctx, 28, RULE_varOrExp);
try {
- setState(351);
+ setState(353);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(346);
+ setState(348);
var();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(347);
+ setState(349);
match(T__29);
- setState(348);
+ setState(350);
exp(0);
- setState(349);
+ setState(351);
match(T__30);
}
break;
@@ -1668,45 +1680,45 @@ public final VarContext var() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(359);
+ setState(361);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NAME:
{
- setState(353);
+ setState(355);
match(NAME);
}
break;
case T__29:
{
- setState(354);
+ setState(356);
match(T__29);
- setState(355);
+ setState(357);
exp(0);
- setState(356);
+ setState(358);
match(T__30);
- setState(357);
+ setState(359);
varSuffix();
}
break;
default:
throw new NoViableAltException(this);
}
- setState(364);
+ setState(366);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(361);
+ setState(363);
varSuffix();
}
}
}
- setState(366);
+ setState(368);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
}
}
}
@@ -1758,38 +1770,38 @@ public final VarSuffixContext varSuffix() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(370);
+ setState(372);
_errHandler.sync(this);
_la = _input.LA(1);
while (((((_la - 25)) & ~0x3f) == 0 && ((1L << (_la - 25)) & ((1L << (T__24 - 25)) | (1L << (T__29 - 25)) | (1L << (T__33 - 25)) | (1L << (NORMALSTRING - 25)) | (1L << (CHARSTRING - 25)) | (1L << (LONGSTRING - 25)))) != 0)) {
{
{
- setState(367);
+ setState(369);
nameAndArgs();
}
}
- setState(372);
+ setState(374);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(379);
+ setState(381);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__31:
{
- setState(373);
+ setState(375);
match(T__31);
- setState(374);
+ setState(376);
exp(0);
- setState(375);
+ setState(377);
match(T__32);
}
break;
case T__23:
{
- setState(377);
+ setState(379);
match(T__23);
- setState(378);
+ setState(380);
match(NAME);
}
break;
@@ -1840,19 +1852,19 @@ public final NameAndArgsContext nameAndArgs() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(383);
+ setState(385);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__24) {
{
- setState(381);
+ setState(383);
match(T__24);
- setState(382);
+ setState(384);
match(NAME);
}
}
- setState(385);
+ setState(387);
args();
}
}
@@ -1901,32 +1913,32 @@ public final ArgsContext args() throws RecognitionException {
enterRule(_localctx, 36, RULE_args);
int _la;
try {
- setState(394);
+ setState(396);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__29:
enterOuterAlt(_localctx, 1);
{
- setState(387);
- match(T__29);
setState(389);
+ match(T__29);
+ setState(391);
_errHandler.sync(this);
_la = _input.LA(1);
if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__25 - 17)) | (1L << (T__26 - 17)) | (1L << (T__27 - 17)) | (1L << (T__28 - 17)) | (1L << (T__29 - 17)) | (1L << (T__33 - 17)) | (1L << (T__45 - 17)) | (1L << (T__52 - 17)) | (1L << (T__55 - 17)) | (1L << (T__56 - 17)) | (1L << (NAME - 17)) | (1L << (NORMALSTRING - 17)) | (1L << (CHARSTRING - 17)) | (1L << (LONGSTRING - 17)) | (1L << (INT - 17)) | (1L << (HEX - 17)) | (1L << (FLOAT - 17)) | (1L << (HEX_FLOAT - 17)))) != 0)) {
{
- setState(388);
+ setState(390);
explist();
}
}
- setState(391);
+ setState(393);
match(T__30);
}
break;
case T__33:
enterOuterAlt(_localctx, 2);
{
- setState(392);
+ setState(394);
tableconstructor();
}
break;
@@ -1935,7 +1947,7 @@ public final ArgsContext args() throws RecognitionException {
case LONGSTRING:
enterOuterAlt(_localctx, 3);
{
- setState(393);
+ setState(395);
string();
}
break;
@@ -1983,9 +1995,9 @@ public final FunctiondefContext functiondef() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(396);
+ setState(398);
match(T__16);
- setState(397);
+ setState(399);
funcbody();
}
}
@@ -2033,23 +2045,23 @@ public final FuncbodyContext funcbody() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(399);
- match(T__29);
setState(401);
+ match(T__29);
+ setState(403);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__28 || _la==NAME) {
{
- setState(400);
+ setState(402);
parlist();
}
}
- setState(403);
+ setState(405);
match(T__30);
- setState(404);
+ setState(406);
block();
- setState(405);
+ setState(407);
match(T__5);
}
}
@@ -2092,22 +2104,22 @@ public final ParlistContext parlist() throws RecognitionException {
enterRule(_localctx, 42, RULE_parlist);
int _la;
try {
- setState(413);
+ setState(415);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NAME:
enterOuterAlt(_localctx, 1);
{
- setState(407);
+ setState(409);
namelist();
- setState(410);
+ setState(412);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__14) {
{
- setState(408);
+ setState(410);
match(T__14);
- setState(409);
+ setState(411);
match(T__28);
}
}
@@ -2117,7 +2129,7 @@ public final ParlistContext parlist() throws RecognitionException {
case T__28:
enterOuterAlt(_localctx, 2);
{
- setState(412);
+ setState(414);
match(T__28);
}
break;
@@ -2166,19 +2178,19 @@ public final TableconstructorContext tableconstructor() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(415);
- match(T__33);
setState(417);
+ match(T__33);
+ setState(419);
_errHandler.sync(this);
_la = _input.LA(1);
if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__25 - 17)) | (1L << (T__26 - 17)) | (1L << (T__27 - 17)) | (1L << (T__28 - 17)) | (1L << (T__29 - 17)) | (1L << (T__31 - 17)) | (1L << (T__33 - 17)) | (1L << (T__45 - 17)) | (1L << (T__52 - 17)) | (1L << (T__55 - 17)) | (1L << (T__56 - 17)) | (1L << (NAME - 17)) | (1L << (NORMALSTRING - 17)) | (1L << (CHARSTRING - 17)) | (1L << (LONGSTRING - 17)) | (1L << (INT - 17)) | (1L << (HEX - 17)) | (1L << (FLOAT - 17)) | (1L << (HEX_FLOAT - 17)))) != 0)) {
{
- setState(416);
+ setState(418);
fieldlist();
}
}
- setState(419);
+ setState(421);
match(T__34);
}
}
@@ -2233,32 +2245,32 @@ public final FieldlistContext fieldlist() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(421);
+ setState(423);
field();
- setState(427);
+ setState(429);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,35,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,36,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(422);
+ setState(424);
fieldsep();
- setState(423);
+ setState(425);
field();
}
}
}
- setState(429);
+ setState(431);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,35,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,36,_ctx);
}
- setState(431);
+ setState(433);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__0 || _la==T__14) {
{
- setState(430);
+ setState(432);
fieldsep();
}
}
@@ -2307,39 +2319,39 @@ public final FieldContext field() throws RecognitionException {
FieldContext _localctx = new FieldContext(_ctx, getState());
enterRule(_localctx, 48, RULE_field);
try {
- setState(443);
+ setState(445);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(433);
+ setState(435);
match(T__31);
- setState(434);
+ setState(436);
exp(0);
- setState(435);
+ setState(437);
match(T__32);
- setState(436);
+ setState(438);
match(T__1);
- setState(437);
+ setState(439);
exp(0);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(439);
+ setState(441);
match(NAME);
- setState(440);
+ setState(442);
match(T__1);
- setState(441);
+ setState(443);
exp(0);
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(442);
+ setState(444);
exp(0);
}
break;
@@ -2383,7 +2395,7 @@ public final FieldsepContext fieldsep() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(445);
+ setState(447);
_la = _input.LA(1);
if ( !(_la==T__0 || _la==T__14) ) {
_errHandler.recoverInline(this);
@@ -2432,7 +2444,7 @@ public final OperatorOrContext operatorOr() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(447);
+ setState(449);
match(T__35);
}
}
@@ -2473,7 +2485,7 @@ public final OperatorAndContext operatorAnd() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(449);
+ setState(451);
match(T__36);
}
}
@@ -2515,7 +2527,7 @@ public final OperatorComparisonContext operatorComparison() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(451);
+ setState(453);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2564,7 +2576,7 @@ public final OperatorStrcatContext operatorStrcat() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(453);
+ setState(455);
match(T__43);
}
}
@@ -2606,7 +2618,7 @@ public final OperatorAddSubContext operatorAddSub() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(455);
+ setState(457);
_la = _input.LA(1);
if ( !(_la==T__44 || _la==T__45) ) {
_errHandler.recoverInline(this);
@@ -2656,7 +2668,7 @@ public final OperatorMulDivModContext operatorMulDivMod() throws RecognitionExce
try {
enterOuterAlt(_localctx, 1);
{
- setState(457);
+ setState(459);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2706,7 +2718,7 @@ public final OperatorBitwiseContext operatorBitwise() throws RecognitionExceptio
try {
enterOuterAlt(_localctx, 1);
{
- setState(459);
+ setState(461);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2756,7 +2768,7 @@ public final OperatorUnaryContext operatorUnary() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(461);
+ setState(463);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__45) | (1L << T__52) | (1L << T__55) | (1L << T__56))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2805,7 +2817,7 @@ public final OperatorPowerContext operatorPower() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(463);
+ setState(465);
match(T__57);
}
}
@@ -2851,7 +2863,7 @@ public final NumberContext number() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(465);
+ setState(467);
_la = _input.LA(1);
if ( !(((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (INT - 73)) | (1L << (HEX - 73)) | (1L << (FLOAT - 73)) | (1L << (HEX_FLOAT - 73)))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2904,7 +2916,7 @@ public final StringContext string() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(467);
+ setState(469);
_la = _input.LA(1);
if ( !(((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (NORMALSTRING - 70)) | (1L << (CHARSTRING - 70)) | (1L << (LONGSTRING - 70)))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2959,11 +2971,11 @@ public final NewclassContext newclass() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(469);
+ setState(471);
match(T__58);
- setState(470);
+ setState(472);
funcname();
- setState(471);
+ setState(473);
args();
}
}
@@ -3008,11 +3020,11 @@ public final ClassdefContext classdef() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(473);
+ setState(475);
match(T__17);
- setState(474);
+ setState(476);
match(NAME);
- setState(475);
+ setState(477);
classbody();
}
}
@@ -3059,11 +3071,11 @@ public final ClassfunctionContext classfunction() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(477);
+ setState(479);
match(T__16);
- setState(478);
+ setState(480);
funcname();
- setState(479);
+ setState(481);
funcbody();
}
}
@@ -3110,13 +3122,13 @@ public final ClassstaticfunctionContext classstaticfunction() throws Recognition
try {
enterOuterAlt(_localctx, 1);
{
- setState(481);
+ setState(483);
match(T__59);
- setState(482);
+ setState(484);
match(T__16);
- setState(483);
+ setState(485);
funcname();
- setState(484);
+ setState(486);
funcbody();
}
}
@@ -3158,7 +3170,7 @@ public final ClassgetorsetContext classgetorset() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(486);
+ setState(488);
_la = _input.LA(1);
if ( !(_la==T__60 || _la==T__61) ) {
_errHandler.recoverInline(this);
@@ -3215,25 +3227,25 @@ public final ClassgetsetContext classgetset() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(488);
+ setState(490);
match(NAME);
- setState(489);
+ setState(491);
match(T__33);
- setState(491);
+ setState(493);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(490);
+ setState(492);
classgetorset();
}
}
- setState(493);
+ setState(495);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==T__60 || _la==T__61 );
- setState(495);
+ setState(497);
match(T__34);
}
}
@@ -3281,25 +3293,25 @@ public final ConstructorContext constructor() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(497);
+ setState(499);
match(T__62);
- setState(498);
- match(T__29);
setState(500);
+ match(T__29);
+ setState(502);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__28 || _la==NAME) {
{
- setState(499);
+ setState(501);
parlist();
}
}
- setState(502);
+ setState(504);
match(T__30);
- setState(503);
+ setState(505);
block();
- setState(504);
+ setState(506);
match(T__5);
}
}
@@ -3347,27 +3359,27 @@ public final ClassmemberContext classmember() throws RecognitionException {
ClassmemberContext _localctx = new ClassmemberContext(_ctx, getState());
enterRule(_localctx, 88, RULE_classmember);
try {
- setState(509);
+ setState(511);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__16:
enterOuterAlt(_localctx, 1);
{
- setState(506);
+ setState(508);
classfunction();
}
break;
case NAME:
enterOuterAlt(_localctx, 2);
{
- setState(507);
+ setState(509);
classgetset();
}
break;
case T__62:
enterOuterAlt(_localctx, 3);
{
- setState(508);
+ setState(510);
constructor();
}
break;
@@ -3437,35 +3449,35 @@ public final ClassbodyContext classbody() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(517);
+ setState(519);
_errHandler.sync(this);
_la = _input.LA(1);
while (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__59 - 17)) | (1L << (T__62 - 17)) | (1L << (NAME - 17)))) != 0)) {
{
- setState(515);
+ setState(517);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__59:
{
- setState(511);
+ setState(513);
classstaticfunction();
}
break;
case T__16:
{
- setState(512);
+ setState(514);
classfunction();
}
break;
case NAME:
{
- setState(513);
+ setState(515);
classgetset();
}
break;
case T__62:
{
- setState(514);
+ setState(516);
constructor();
}
break;
@@ -3473,11 +3485,11 @@ public final ClassbodyContext classbody() throws RecognitionException {
throw new NoViableAltException(this);
}
}
- setState(519);
+ setState(521);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(520);
+ setState(522);
match(T__5);
}
}
@@ -3519,9 +3531,9 @@ public final AddOneContext addOne() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(522);
+ setState(524);
match(NAME);
- setState(523);
+ setState(525);
match(T__63);
}
}
@@ -3563,9 +3575,9 @@ public final PlusEqualContext plusEqual() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(525);
+ setState(527);
match(NAME);
- setState(526);
+ setState(528);
match(T__64);
}
}
@@ -3607,9 +3619,9 @@ public final MultiplyEqualContext multiplyEqual() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(528);
+ setState(530);
match(NAME);
- setState(529);
+ setState(531);
match(T__65);
}
}
@@ -3651,9 +3663,9 @@ public final DivEqualContext divEqual() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(531);
+ setState(533);
match(NAME);
- setState(532);
+ setState(534);
match(T__66);
}
}
@@ -3695,9 +3707,9 @@ public final MinusEqualContext minusEqual() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(534);
+ setState(536);
match(NAME);
- setState(535);
+ setState(537);
match(T__67);
}
}
@@ -3741,7 +3753,7 @@ public final SafeOperatorContext safeOperator() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(537);
+ setState(539);
var();
}
}
@@ -3786,7 +3798,7 @@ private boolean exp_sempred(ExpContext _localctx, int predIndex) {
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3R\u021e\4\2\t\2\4"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3R\u0220\4\2\t\2\4"+
"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
@@ -3798,190 +3810,191 @@ private boolean exp_sempred(ExpContext _localctx, int predIndex) {
"\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u0099"+
"\n\4\f\4\16\4\u009c\13\4\3\4\3\4\5\4\u00a0\n\4\3\4\3\4\3\4\3\4\3\4\3\4"+
"\3\4\3\4\3\4\3\4\5\4\u00ac\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4"+
- "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u00c2\n\4\3\4\3\4\3\4\3\4"+
- "\3\4\3\4\3\4\5\4\u00cb\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4"+
- "\u00d7\n\4\3\4\3\4\3\4\5\4\u00dc\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u00e3\n\4"+
- "\3\4\3\4\5\4\u00e7\n\4\3\5\3\5\5\5\u00eb\n\5\3\5\5\5\u00ee\n\5\3\6\3\6"+
- "\3\6\3\6\3\7\3\7\3\7\7\7\u00f7\n\7\f\7\16\7\u00fa\13\7\3\7\3\7\5\7\u00fe"+
- "\n\7\3\b\3\b\3\t\3\t\3\n\3\n\3\n\7\n\u0107\n\n\f\n\16\n\u010a\13\n\3\13"+
- "\3\13\3\13\7\13\u010f\n\13\f\13\16\13\u0112\13\13\3\f\3\f\3\f\7\f\u0117"+
- "\n\f\f\f\16\f\u011a\13\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+
- "\r\3\r\5\r\u0129\n\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+
- "\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+
- "\3\r\3\r\7\r\u014b\n\r\f\r\16\r\u014e\13\r\3\16\3\16\7\16\u0152\n\16\f"+
- "\16\16\16\u0155\13\16\3\17\3\17\6\17\u0159\n\17\r\17\16\17\u015a\3\20"+
- "\3\20\3\20\3\20\3\20\5\20\u0162\n\20\3\21\3\21\3\21\3\21\3\21\3\21\5\21"+
- "\u016a\n\21\3\21\7\21\u016d\n\21\f\21\16\21\u0170\13\21\3\22\7\22\u0173"+
- "\n\22\f\22\16\22\u0176\13\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u017e"+
- "\n\22\3\23\3\23\5\23\u0182\n\23\3\23\3\23\3\24\3\24\5\24\u0188\n\24\3"+
- "\24\3\24\3\24\5\24\u018d\n\24\3\25\3\25\3\25\3\26\3\26\5\26\u0194\n\26"+
- "\3\26\3\26\3\26\3\26\3\27\3\27\3\27\5\27\u019d\n\27\3\27\5\27\u01a0\n"+
- "\27\3\30\3\30\5\30\u01a4\n\30\3\30\3\30\3\31\3\31\3\31\3\31\7\31\u01ac"+
- "\n\31\f\31\16\31\u01af\13\31\3\31\5\31\u01b2\n\31\3\32\3\32\3\32\3\32"+
- "\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u01be\n\32\3\33\3\33\3\34\3\34\3\35"+
- "\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&"+
- "\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3*\3*\3+\3+\3,\3,\3"+
- ",\6,\u01ee\n,\r,\16,\u01ef\3,\3,\3-\3-\3-\5-\u01f7\n-\3-\3-\3-\3-\3.\3"+
- ".\3.\5.\u0200\n.\3/\3/\3/\3/\7/\u0206\n/\f/\16/\u0209\13/\3/\3/\3\60\3"+
- "\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3"+
- "\65\3\65\3\65\2\3\30\66\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*"+
- ",.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfh\2\13\4\2\3\3\21\21\3\2(-\3\2"+
- "/\60\3\2\61\64\3\2\659\5\2\60\60\67\67:;\3\2KN\3\2HJ\3\2?@\2\u0239\2j"+
- "\3\2\2\2\4p\3\2\2\2\6\u00e6\3\2\2\2\b\u00e8\3\2\2\2\n\u00ef\3\2\2\2\f"+
- "\u00f3\3\2\2\2\16\u00ff\3\2\2\2\20\u0101\3\2\2\2\22\u0103\3\2\2\2\24\u010b"+
- "\3\2\2\2\26\u0113\3\2\2\2\30\u0128\3\2\2\2\32\u014f\3\2\2\2\34\u0156\3"+
- "\2\2\2\36\u0161\3\2\2\2 \u0169\3\2\2\2\"\u0174\3\2\2\2$\u0181\3\2\2\2"+
- "&\u018c\3\2\2\2(\u018e\3\2\2\2*\u0191\3\2\2\2,\u019f\3\2\2\2.\u01a1\3"+
- "\2\2\2\60\u01a7\3\2\2\2\62\u01bd\3\2\2\2\64\u01bf\3\2\2\2\66\u01c1\3\2"+
- "\2\28\u01c3\3\2\2\2:\u01c5\3\2\2\2<\u01c7\3\2\2\2>\u01c9\3\2\2\2@\u01cb"+
- "\3\2\2\2B\u01cd\3\2\2\2D\u01cf\3\2\2\2F\u01d1\3\2\2\2H\u01d3\3\2\2\2J"+
- "\u01d5\3\2\2\2L\u01d7\3\2\2\2N\u01db\3\2\2\2P\u01df\3\2\2\2R\u01e3\3\2"+
- "\2\2T\u01e8\3\2\2\2V\u01ea\3\2\2\2X\u01f3\3\2\2\2Z\u01ff\3\2\2\2\\\u0207"+
- "\3\2\2\2^\u020c\3\2\2\2`\u020f\3\2\2\2b\u0212\3\2\2\2d\u0215\3\2\2\2f"+
- "\u0218\3\2\2\2h\u021b\3\2\2\2jk\5\4\3\2kl\7\2\2\3l\3\3\2\2\2mo\5\6\4\2"+
- "nm\3\2\2\2or\3\2\2\2pn\3\2\2\2pq\3\2\2\2qt\3\2\2\2rp\3\2\2\2su\5\b\5\2"+
- "ts\3\2\2\2tu\3\2\2\2u\5\3\2\2\2v\u00e7\7\3\2\2wx\5\22\n\2xy\7\4\2\2yz"+
- "\5\26\f\2z\u00e7\3\2\2\2{\u00e7\5\34\17\2|\u00e7\5\n\6\2}\u00e7\7\5\2"+
- "\2~\177\7\6\2\2\177\u00e7\7G\2\2\u0080\u0081\7\7\2\2\u0081\u0082\5\4\3"+
- "\2\u0082\u0083\7\b\2\2\u0083\u00e7\3\2\2\2\u0084\u0085\7\t\2\2\u0085\u0086"+
- "\5\30\r\2\u0086\u0087\7\7\2\2\u0087\u0088\5\4\3\2\u0088\u0089\7\b\2\2"+
- "\u0089\u00e7\3\2\2\2\u008a\u008b\7\n\2\2\u008b\u008c\5\4\3\2\u008c\u008d"+
- "\7\13\2\2\u008d\u008e\5\30\r\2\u008e\u00e7\3\2\2\2\u008f\u0090\7\f\2\2"+
- "\u0090\u0091\5\30\r\2\u0091\u0092\7\r\2\2\u0092\u009a\5\4\3\2\u0093\u0094"+
- "\7\16\2\2\u0094\u0095\5\30\r\2\u0095\u0096\7\r\2\2\u0096\u0097\5\4\3\2"+
- "\u0097\u0099\3\2\2\2\u0098\u0093\3\2\2\2\u0099\u009c\3\2\2\2\u009a\u0098"+
- "\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009f\3\2\2\2\u009c\u009a\3\2\2\2\u009d"+
- "\u009e\7\17\2\2\u009e\u00a0\5\4\3\2\u009f\u009d\3\2\2\2\u009f\u00a0\3"+
- "\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u00a2\7\b\2\2\u00a2\u00e7\3\2\2\2\u00a3"+
- "\u00a4\7\20\2\2\u00a4\u00a5\7G\2\2\u00a5\u00a6\7\4\2\2\u00a6\u00a7\5\30"+
- "\r\2\u00a7\u00a8\7\21\2\2\u00a8\u00ab\5\30\r\2\u00a9\u00aa\7\21\2\2\u00aa"+
- "\u00ac\5\30\r\2\u00ab\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad\3"+
- "\2\2\2\u00ad\u00ae\7\7\2\2\u00ae\u00af\5\4\3\2\u00af\u00b0\7\b\2\2\u00b0"+
- "\u00e7\3\2\2\2\u00b1\u00b2\7\20\2\2\u00b2\u00b3\5\24\13\2\u00b3\u00b4"+
- "\7\22\2\2\u00b4\u00b5\5\26\f\2\u00b5\u00b6\7\7\2\2\u00b6\u00b7\5\4\3\2"+
- "\u00b7\u00b8\7\b\2\2\u00b8\u00e7\3\2\2\2\u00b9\u00ba\7\23\2\2\u00ba\u00bb"+
- "\5\f\7\2\u00bb\u00bc\5*\26\2\u00bc\u00e7\3\2\2\2\u00bd\u00be\7\24\2\2"+
- "\u00be\u00c1\5\16\b\2\u00bf\u00c0\7\25\2\2\u00c0\u00c2\5\20\t\2\u00c1"+
- "\u00bf\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c4\5\\"+
- "/\2\u00c4\u00e7\3\2\2\2\u00c5\u00c6\7\26\2\2\u00c6\u00c7\7\24\2\2\u00c7"+
- "\u00ca\5\16\b\2\u00c8\u00c9\7\25\2\2\u00c9\u00cb\5\20\t\2\u00ca\u00c8"+
- "\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\5\\/\2\u00cd"+
- "\u00e7\3\2\2\2\u00ce\u00cf\7\26\2\2\u00cf\u00d0\7\23\2\2\u00d0\u00d1\7"+
- "G\2\2\u00d1\u00e7\5*\26\2\u00d2\u00d3\7\26\2\2\u00d3\u00d6\5\24\13\2\u00d4"+
- "\u00d5\7\4\2\2\u00d5\u00d7\5\26\f\2\u00d6\u00d4\3\2\2\2\u00d6\u00d7\3"+
- "\2\2\2\u00d7\u00e7\3\2\2\2\u00d8\u00d9\7\27\2\2\u00d9\u00e7\5h\65\2\u00da"+
- "\u00dc\7\26\2\2\u00db\u00da\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00dd\3"+
- "\2\2\2\u00dd\u00de\5\24\13\2\u00de\u00df\7\4\2\2\u00df\u00e0\5L\'\2\u00e0"+
- "\u00e7\3\2\2\2\u00e1\u00e3\7\26\2\2\u00e2\u00e1\3\2\2\2\u00e2\u00e3\3"+
- "\2\2\2\u00e3\u00e4\3\2\2\2\u00e4\u00e5\7G\2\2\u00e5\u00e7\5f\64\2\u00e6"+
- "v\3\2\2\2\u00e6w\3\2\2\2\u00e6{\3\2\2\2\u00e6|\3\2\2\2\u00e6}\3\2\2\2"+
- "\u00e6~\3\2\2\2\u00e6\u0080\3\2\2\2\u00e6\u0084\3\2\2\2\u00e6\u008a\3"+
- "\2\2\2\u00e6\u008f\3\2\2\2\u00e6\u00a3\3\2\2\2\u00e6\u00b1\3\2\2\2\u00e6"+
- "\u00b9\3\2\2\2\u00e6\u00bd\3\2\2\2\u00e6\u00c5\3\2\2\2\u00e6\u00ce\3\2"+
- "\2\2\u00e6\u00d2\3\2\2\2\u00e6\u00d8\3\2\2\2\u00e6\u00db\3\2\2\2\u00e6"+
- "\u00e2\3\2\2\2\u00e7\7\3\2\2\2\u00e8\u00ea\7\30\2\2\u00e9\u00eb\5\26\f"+
- "\2\u00ea\u00e9\3\2\2\2\u00ea\u00eb\3\2\2\2\u00eb\u00ed\3\2\2\2\u00ec\u00ee"+
- "\7\3\2\2\u00ed\u00ec\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\t\3\2\2\2\u00ef"+
- "\u00f0\7\31\2\2\u00f0\u00f1\7G\2\2\u00f1\u00f2\7\31\2\2\u00f2\13\3\2\2"+
- "\2\u00f3\u00f8\7G\2\2\u00f4\u00f5\7\32\2\2\u00f5\u00f7\7G\2\2\u00f6\u00f4"+
- "\3\2\2\2\u00f7\u00fa\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9"+
- "\u00fd\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fb\u00fc\7\33\2\2\u00fc\u00fe\7"+
- "G\2\2\u00fd\u00fb\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe\r\3\2\2\2\u00ff\u0100"+
- "\7G\2\2\u0100\17\3\2\2\2\u0101\u0102\7G\2\2\u0102\21\3\2\2\2\u0103\u0108"+
- "\5 \21\2\u0104\u0105\7\21\2\2\u0105\u0107\5 \21\2\u0106\u0104\3\2\2\2"+
- "\u0107\u010a\3\2\2\2\u0108\u0106\3\2\2\2\u0108\u0109\3\2\2\2\u0109\23"+
- "\3\2\2\2\u010a\u0108\3\2\2\2\u010b\u0110\7G\2\2\u010c\u010d\7\21\2\2\u010d"+
- "\u010f\7G\2\2\u010e\u010c\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u010e\3\2"+
- "\2\2\u0110\u0111\3\2\2\2\u0111\25\3\2\2\2\u0112\u0110\3\2\2\2\u0113\u0118"+
- "\5\30\r\2\u0114\u0115\7\21\2\2\u0115\u0117\5\30\r\2\u0116\u0114\3\2\2"+
- "\2\u0117\u011a\3\2\2\2\u0118\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119\27"+
- "\3\2\2\2\u011a\u0118\3\2\2\2\u011b\u011c\b\r\1\2\u011c\u0129\7\34\2\2"+
- "\u011d\u0129\7\35\2\2\u011e\u0129\7\36\2\2\u011f\u0129\5H%\2\u0120\u0129"+
- "\5J&\2\u0121\u0129\7\37\2\2\u0122\u0129\5(\25\2\u0123\u0129\5\32\16\2"+
- "\u0124\u0129\5.\30\2\u0125\u0126\5D#\2\u0126\u0127\5\30\r\n\u0127\u0129"+
- "\3\2\2\2\u0128\u011b\3\2\2\2\u0128\u011d\3\2\2\2\u0128\u011e\3\2\2\2\u0128"+
- "\u011f\3\2\2\2\u0128\u0120\3\2\2\2\u0128\u0121\3\2\2\2\u0128\u0122\3\2"+
- "\2\2\u0128\u0123\3\2\2\2\u0128\u0124\3\2\2\2\u0128\u0125\3\2\2\2\u0129"+
- "\u014c\3\2\2\2\u012a\u012b\f\13\2\2\u012b\u012c\5F$\2\u012c\u012d\5\30"+
- "\r\13\u012d\u014b\3\2\2\2\u012e\u012f\f\t\2\2\u012f\u0130\5@!\2\u0130"+
- "\u0131\5\30\r\n\u0131\u014b\3\2\2\2\u0132\u0133\f\b\2\2\u0133\u0134\5"+
- "> \2\u0134\u0135\5\30\r\t\u0135\u014b\3\2\2\2\u0136\u0137\f\7\2\2\u0137"+
- "\u0138\5<\37\2\u0138\u0139\5\30\r\7\u0139\u014b\3\2\2\2\u013a\u013b\f"+
- "\6\2\2\u013b\u013c\5:\36\2\u013c\u013d\5\30\r\7\u013d\u014b\3\2\2\2\u013e"+
- "\u013f\f\5\2\2\u013f\u0140\58\35\2\u0140\u0141\5\30\r\6\u0141\u014b\3"+
- "\2\2\2\u0142\u0143\f\4\2\2\u0143\u0144\5\66\34\2\u0144\u0145\5\30\r\5"+
- "\u0145\u014b\3\2\2\2\u0146\u0147\f\3\2\2\u0147\u0148\5B\"\2\u0148\u0149"+
- "\5\30\r\4\u0149\u014b\3\2\2\2\u014a\u012a\3\2\2\2\u014a\u012e\3\2\2\2"+
- "\u014a\u0132\3\2\2\2\u014a\u0136\3\2\2\2\u014a\u013a\3\2\2\2\u014a\u013e"+
- "\3\2\2\2\u014a\u0142\3\2\2\2\u014a\u0146\3\2\2\2\u014b\u014e\3\2\2\2\u014c"+
- "\u014a\3\2\2\2\u014c\u014d\3\2\2\2\u014d\31\3\2\2\2\u014e\u014c\3\2\2"+
- "\2\u014f\u0153\5\36\20\2\u0150\u0152\5$\23\2\u0151\u0150\3\2\2\2\u0152"+
- "\u0155\3\2\2\2\u0153\u0151\3\2\2\2\u0153\u0154\3\2\2\2\u0154\33\3\2\2"+
- "\2\u0155\u0153\3\2\2\2\u0156\u0158\5\36\20\2\u0157\u0159\5$\23\2\u0158"+
- "\u0157\3\2\2\2\u0159\u015a\3\2\2\2\u015a\u0158\3\2\2\2\u015a\u015b\3\2"+
- "\2\2\u015b\35\3\2\2\2\u015c\u0162\5 \21\2\u015d\u015e\7 \2\2\u015e\u015f"+
- "\5\30\r\2\u015f\u0160\7!\2\2\u0160\u0162\3\2\2\2\u0161\u015c\3\2\2\2\u0161"+
- "\u015d\3\2\2\2\u0162\37\3\2\2\2\u0163\u016a\7G\2\2\u0164\u0165\7 \2\2"+
- "\u0165\u0166\5\30\r\2\u0166\u0167\7!\2\2\u0167\u0168\5\"\22\2\u0168\u016a"+
- "\3\2\2\2\u0169\u0163\3\2\2\2\u0169\u0164\3\2\2\2\u016a\u016e\3\2\2\2\u016b"+
- "\u016d\5\"\22\2\u016c\u016b\3\2\2\2\u016d\u0170\3\2\2\2\u016e\u016c\3"+
- "\2\2\2\u016e\u016f\3\2\2\2\u016f!\3\2\2\2\u0170\u016e\3\2\2\2\u0171\u0173"+
- "\5$\23\2\u0172\u0171\3\2\2\2\u0173\u0176\3\2\2\2\u0174\u0172\3\2\2\2\u0174"+
- "\u0175\3\2\2\2\u0175\u017d\3\2\2\2\u0176\u0174\3\2\2\2\u0177\u0178\7\""+
- "\2\2\u0178\u0179\5\30\r\2\u0179\u017a\7#\2\2\u017a\u017e\3\2\2\2\u017b"+
- "\u017c\7\32\2\2\u017c\u017e\7G\2\2\u017d\u0177\3\2\2\2\u017d\u017b\3\2"+
- "\2\2\u017e#\3\2\2\2\u017f\u0180\7\33\2\2\u0180\u0182\7G\2\2\u0181\u017f"+
- "\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0184\5&\24\2\u0184"+
- "%\3\2\2\2\u0185\u0187\7 \2\2\u0186\u0188\5\26\f\2\u0187\u0186\3\2\2\2"+
- "\u0187\u0188\3\2\2\2\u0188\u0189\3\2\2\2\u0189\u018d\7!\2\2\u018a\u018d"+
- "\5.\30\2\u018b\u018d\5J&\2\u018c\u0185\3\2\2\2\u018c\u018a\3\2\2\2\u018c"+
- "\u018b\3\2\2\2\u018d\'\3\2\2\2\u018e\u018f\7\23\2\2\u018f\u0190\5*\26"+
- "\2\u0190)\3\2\2\2\u0191\u0193\7 \2\2\u0192\u0194\5,\27\2\u0193\u0192\3"+
- "\2\2\2\u0193\u0194\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0196\7!\2\2\u0196"+
- "\u0197\5\4\3\2\u0197\u0198\7\b\2\2\u0198+\3\2\2\2\u0199\u019c\5\24\13"+
- "\2\u019a\u019b\7\21\2\2\u019b\u019d\7\37\2\2\u019c\u019a\3\2\2\2\u019c"+
- "\u019d\3\2\2\2\u019d\u01a0\3\2\2\2\u019e\u01a0\7\37\2\2\u019f\u0199\3"+
- "\2\2\2\u019f\u019e\3\2\2\2\u01a0-\3\2\2\2\u01a1\u01a3\7$\2\2\u01a2\u01a4"+
- "\5\60\31\2\u01a3\u01a2\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01a5\3\2\2\2"+
- "\u01a5\u01a6\7%\2\2\u01a6/\3\2\2\2\u01a7\u01ad\5\62\32\2\u01a8\u01a9\5"+
- "\64\33\2\u01a9\u01aa\5\62\32\2\u01aa\u01ac\3\2\2\2\u01ab\u01a8\3\2\2\2"+
- "\u01ac\u01af\3\2\2\2\u01ad\u01ab\3\2\2\2\u01ad\u01ae\3\2\2\2\u01ae\u01b1"+
- "\3\2\2\2\u01af\u01ad\3\2\2\2\u01b0\u01b2\5\64\33\2\u01b1\u01b0\3\2\2\2"+
- "\u01b1\u01b2\3\2\2\2\u01b2\61\3\2\2\2\u01b3\u01b4\7\"\2\2\u01b4\u01b5"+
- "\5\30\r\2\u01b5\u01b6\7#\2\2\u01b6\u01b7\7\4\2\2\u01b7\u01b8\5\30\r\2"+
- "\u01b8\u01be\3\2\2\2\u01b9\u01ba\7G\2\2\u01ba\u01bb\7\4\2\2\u01bb\u01be"+
- "\5\30\r\2\u01bc\u01be\5\30\r\2\u01bd\u01b3\3\2\2\2\u01bd\u01b9\3\2\2\2"+
- "\u01bd\u01bc\3\2\2\2\u01be\63\3\2\2\2\u01bf\u01c0\t\2\2\2\u01c0\65\3\2"+
- "\2\2\u01c1\u01c2\7&\2\2\u01c2\67\3\2\2\2\u01c3\u01c4\7\'\2\2\u01c49\3"+
- "\2\2\2\u01c5\u01c6\t\3\2\2\u01c6;\3\2\2\2\u01c7\u01c8\7.\2\2\u01c8=\3"+
- "\2\2\2\u01c9\u01ca\t\4\2\2\u01ca?\3\2\2\2\u01cb\u01cc\t\5\2\2\u01ccA\3"+
- "\2\2\2\u01cd\u01ce\t\6\2\2\u01ceC\3\2\2\2\u01cf\u01d0\t\7\2\2\u01d0E\3"+
- "\2\2\2\u01d1\u01d2\7<\2\2\u01d2G\3\2\2\2\u01d3\u01d4\t\b\2\2\u01d4I\3"+
- "\2\2\2\u01d5\u01d6\t\t\2\2\u01d6K\3\2\2\2\u01d7\u01d8\7=\2\2\u01d8\u01d9"+
- "\5\f\7\2\u01d9\u01da\5&\24\2\u01daM\3\2\2\2\u01db\u01dc\7\24\2\2\u01dc"+
- "\u01dd\7G\2\2\u01dd\u01de\5\\/\2\u01deO\3\2\2\2\u01df\u01e0\7\23\2\2\u01e0"+
- "\u01e1\5\f\7\2\u01e1\u01e2\5*\26\2\u01e2Q\3\2\2\2\u01e3\u01e4\7>\2\2\u01e4"+
- "\u01e5\7\23\2\2\u01e5\u01e6\5\f\7\2\u01e6\u01e7\5*\26\2\u01e7S\3\2\2\2"+
- "\u01e8\u01e9\t\n\2\2\u01e9U\3\2\2\2\u01ea\u01eb\7G\2\2\u01eb\u01ed\7$"+
- "\2\2\u01ec\u01ee\5T+\2\u01ed\u01ec\3\2\2\2\u01ee\u01ef\3\2\2\2\u01ef\u01ed"+
- "\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f2\7%\2\2\u01f2"+
- "W\3\2\2\2\u01f3\u01f4\7A\2\2\u01f4\u01f6\7 \2\2\u01f5\u01f7\5,\27\2\u01f6"+
- "\u01f5\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7\u01f8\3\2\2\2\u01f8\u01f9\7!"+
- "\2\2\u01f9\u01fa\5\4\3\2\u01fa\u01fb\7\b\2\2\u01fbY\3\2\2\2\u01fc\u0200"+
- "\5P)\2\u01fd\u0200\5V,\2\u01fe\u0200\5X-\2\u01ff\u01fc\3\2\2\2\u01ff\u01fd"+
- "\3\2\2\2\u01ff\u01fe\3\2\2\2\u0200[\3\2\2\2\u0201\u0206\5R*\2\u0202\u0206"+
- "\5P)\2\u0203\u0206\5V,\2\u0204\u0206\5X-\2\u0205\u0201\3\2\2\2\u0205\u0202"+
- "\3\2\2\2\u0205\u0203\3\2\2\2\u0205\u0204\3\2\2\2\u0206\u0209\3\2\2\2\u0207"+
- "\u0205\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u020a\3\2\2\2\u0209\u0207\3\2"+
- "\2\2\u020a\u020b\7\b\2\2\u020b]\3\2\2\2\u020c\u020d\7G\2\2\u020d\u020e"+
- "\7B\2\2\u020e_\3\2\2\2\u020f\u0210\7G\2\2\u0210\u0211\7C\2\2\u0211a\3"+
- "\2\2\2\u0212\u0213\7G\2\2\u0213\u0214\7D\2\2\u0214c\3\2\2\2\u0215\u0216"+
- "\7G\2\2\u0216\u0217\7E\2\2\u0217e\3\2\2\2\u0218\u0219\7G\2\2\u0219\u021a"+
- "\7F\2\2\u021ag\3\2\2\2\u021b\u021c\5 \21\2\u021ci\3\2\2\2-pt\u009a\u009f"+
- "\u00ab\u00c1\u00ca\u00d6\u00db\u00e2\u00e6\u00ea\u00ed\u00f8\u00fd\u0108"+
- "\u0110\u0118\u0128\u014a\u014c\u0153\u015a\u0161\u0169\u016e\u0174\u017d"+
- "\u0181\u0187\u018c\u0193\u019c\u019f\u01a3\u01ad\u01b1\u01bd\u01ef\u01f6"+
- "\u01ff\u0205\u0207";
+ "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u00c2\n\4\3\4\3\4\3\4\5\4"+
+ "\u00c7\n\4\3\4\3\4\3\4\3\4\5\4\u00cd\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3"+
+ "\4\3\4\3\4\5\4\u00d9\n\4\3\4\3\4\3\4\5\4\u00de\n\4\3\4\3\4\3\4\3\4\3\4"+
+ "\5\4\u00e5\n\4\3\4\3\4\5\4\u00e9\n\4\3\5\3\5\5\5\u00ed\n\5\3\5\5\5\u00f0"+
+ "\n\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\7\7\u00f9\n\7\f\7\16\7\u00fc\13\7\3\7"+
+ "\3\7\5\7\u0100\n\7\3\b\3\b\3\t\3\t\3\n\3\n\3\n\7\n\u0109\n\n\f\n\16\n"+
+ "\u010c\13\n\3\13\3\13\3\13\7\13\u0111\n\13\f\13\16\13\u0114\13\13\3\f"+
+ "\3\f\3\f\7\f\u0119\n\f\f\f\16\f\u011c\13\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+
+ "\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u012b\n\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+
+ "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+
+ "\r\3\r\3\r\3\r\3\r\3\r\3\r\7\r\u014d\n\r\f\r\16\r\u0150\13\r\3\16\3\16"+
+ "\7\16\u0154\n\16\f\16\16\16\u0157\13\16\3\17\3\17\6\17\u015b\n\17\r\17"+
+ "\16\17\u015c\3\20\3\20\3\20\3\20\3\20\5\20\u0164\n\20\3\21\3\21\3\21\3"+
+ "\21\3\21\3\21\5\21\u016c\n\21\3\21\7\21\u016f\n\21\f\21\16\21\u0172\13"+
+ "\21\3\22\7\22\u0175\n\22\f\22\16\22\u0178\13\22\3\22\3\22\3\22\3\22\3"+
+ "\22\3\22\5\22\u0180\n\22\3\23\3\23\5\23\u0184\n\23\3\23\3\23\3\24\3\24"+
+ "\5\24\u018a\n\24\3\24\3\24\3\24\5\24\u018f\n\24\3\25\3\25\3\25\3\26\3"+
+ "\26\5\26\u0196\n\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\5\27\u019f\n\27"+
+ "\3\27\5\27\u01a2\n\27\3\30\3\30\5\30\u01a6\n\30\3\30\3\30\3\31\3\31\3"+
+ "\31\3\31\7\31\u01ae\n\31\f\31\16\31\u01b1\13\31\3\31\5\31\u01b4\n\31\3"+
+ "\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u01c0\n\32\3\33"+
+ "\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3"+
+ "#\3$\3$\3%\3%\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3"+
+ "*\3*\3+\3+\3,\3,\3,\6,\u01f0\n,\r,\16,\u01f1\3,\3,\3-\3-\3-\5-\u01f9\n"+
+ "-\3-\3-\3-\3-\3.\3.\3.\5.\u0202\n.\3/\3/\3/\3/\7/\u0208\n/\f/\16/\u020b"+
+ "\13/\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\63\3\63\3\63"+
+ "\3\64\3\64\3\64\3\65\3\65\3\65\2\3\30\66\2\4\6\b\n\f\16\20\22\24\26\30"+
+ "\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfh\2\13\4\2\3\3"+
+ "\21\21\3\2(-\3\2/\60\3\2\61\64\3\2\659\5\2\60\60\67\67:;\3\2KN\3\2HJ\3"+
+ "\2?@\2\u023c\2j\3\2\2\2\4p\3\2\2\2\6\u00e8\3\2\2\2\b\u00ea\3\2\2\2\n\u00f1"+
+ "\3\2\2\2\f\u00f5\3\2\2\2\16\u0101\3\2\2\2\20\u0103\3\2\2\2\22\u0105\3"+
+ "\2\2\2\24\u010d\3\2\2\2\26\u0115\3\2\2\2\30\u012a\3\2\2\2\32\u0151\3\2"+
+ "\2\2\34\u0158\3\2\2\2\36\u0163\3\2\2\2 \u016b\3\2\2\2\"\u0176\3\2\2\2"+
+ "$\u0183\3\2\2\2&\u018e\3\2\2\2(\u0190\3\2\2\2*\u0193\3\2\2\2,\u01a1\3"+
+ "\2\2\2.\u01a3\3\2\2\2\60\u01a9\3\2\2\2\62\u01bf\3\2\2\2\64\u01c1\3\2\2"+
+ "\2\66\u01c3\3\2\2\28\u01c5\3\2\2\2:\u01c7\3\2\2\2<\u01c9\3\2\2\2>\u01cb"+
+ "\3\2\2\2@\u01cd\3\2\2\2B\u01cf\3\2\2\2D\u01d1\3\2\2\2F\u01d3\3\2\2\2H"+
+ "\u01d5\3\2\2\2J\u01d7\3\2\2\2L\u01d9\3\2\2\2N\u01dd\3\2\2\2P\u01e1\3\2"+
+ "\2\2R\u01e5\3\2\2\2T\u01ea\3\2\2\2V\u01ec\3\2\2\2X\u01f5\3\2\2\2Z\u0201"+
+ "\3\2\2\2\\\u0209\3\2\2\2^\u020e\3\2\2\2`\u0211\3\2\2\2b\u0214\3\2\2\2"+
+ "d\u0217\3\2\2\2f\u021a\3\2\2\2h\u021d\3\2\2\2jk\5\4\3\2kl\7\2\2\3l\3\3"+
+ "\2\2\2mo\5\6\4\2nm\3\2\2\2or\3\2\2\2pn\3\2\2\2pq\3\2\2\2qt\3\2\2\2rp\3"+
+ "\2\2\2su\5\b\5\2ts\3\2\2\2tu\3\2\2\2u\5\3\2\2\2v\u00e9\7\3\2\2wx\5\22"+
+ "\n\2xy\7\4\2\2yz\5\26\f\2z\u00e9\3\2\2\2{\u00e9\5\34\17\2|\u00e9\5\n\6"+
+ "\2}\u00e9\7\5\2\2~\177\7\6\2\2\177\u00e9\7G\2\2\u0080\u0081\7\7\2\2\u0081"+
+ "\u0082\5\4\3\2\u0082\u0083\7\b\2\2\u0083\u00e9\3\2\2\2\u0084\u0085\7\t"+
+ "\2\2\u0085\u0086\5\30\r\2\u0086\u0087\7\7\2\2\u0087\u0088\5\4\3\2\u0088"+
+ "\u0089\7\b\2\2\u0089\u00e9\3\2\2\2\u008a\u008b\7\n\2\2\u008b\u008c\5\4"+
+ "\3\2\u008c\u008d\7\13\2\2\u008d\u008e\5\30\r\2\u008e\u00e9\3\2\2\2\u008f"+
+ "\u0090\7\f\2\2\u0090\u0091\5\30\r\2\u0091\u0092\7\r\2\2\u0092\u009a\5"+
+ "\4\3\2\u0093\u0094\7\16\2\2\u0094\u0095\5\30\r\2\u0095\u0096\7\r\2\2\u0096"+
+ "\u0097\5\4\3\2\u0097\u0099\3\2\2\2\u0098\u0093\3\2\2\2\u0099\u009c\3\2"+
+ "\2\2\u009a\u0098\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009f\3\2\2\2\u009c"+
+ "\u009a\3\2\2\2\u009d\u009e\7\17\2\2\u009e\u00a0\5\4\3\2\u009f\u009d\3"+
+ "\2\2\2\u009f\u00a0\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u00a2\7\b\2\2\u00a2"+
+ "\u00e9\3\2\2\2\u00a3\u00a4\7\20\2\2\u00a4\u00a5\7G\2\2\u00a5\u00a6\7\4"+
+ "\2\2\u00a6\u00a7\5\30\r\2\u00a7\u00a8\7\21\2\2\u00a8\u00ab\5\30\r\2\u00a9"+
+ "\u00aa\7\21\2\2\u00aa\u00ac\5\30\r\2\u00ab\u00a9\3\2\2\2\u00ab\u00ac\3"+
+ "\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\7\7\2\2\u00ae\u00af\5\4\3\2\u00af"+
+ "\u00b0\7\b\2\2\u00b0\u00e9\3\2\2\2\u00b1\u00b2\7\20\2\2\u00b2\u00b3\5"+
+ "\24\13\2\u00b3\u00b4\7\22\2\2\u00b4\u00b5\5\26\f\2\u00b5\u00b6\7\7\2\2"+
+ "\u00b6\u00b7\5\4\3\2\u00b7\u00b8\7\b\2\2\u00b8\u00e9\3\2\2\2\u00b9\u00ba"+
+ "\7\23\2\2\u00ba\u00bb\5\f\7\2\u00bb\u00bc\5*\26\2\u00bc\u00e9\3\2\2\2"+
+ "\u00bd\u00be\7\24\2\2\u00be\u00c1\5\16\b\2\u00bf\u00c0\7\25\2\2\u00c0"+
+ "\u00c2\5\20\t\2\u00c1\u00bf\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00c3\3"+
+ "\2\2\2\u00c3\u00c4\5\\/\2\u00c4\u00e9\3\2\2\2\u00c5\u00c7\7\26\2\2\u00c6"+
+ "\u00c5\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c9\7\24"+
+ "\2\2\u00c9\u00cc\5\16\b\2\u00ca\u00cb\7\25\2\2\u00cb\u00cd\5\20\t\2\u00cc"+
+ "\u00ca\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00cf\5\\"+
+ "/\2\u00cf\u00e9\3\2\2\2\u00d0\u00d1\7\26\2\2\u00d1\u00d2\7\23\2\2\u00d2"+
+ "\u00d3\7G\2\2\u00d3\u00e9\5*\26\2\u00d4\u00d5\7\26\2\2\u00d5\u00d8\5\24"+
+ "\13\2\u00d6\u00d7\7\4\2\2\u00d7\u00d9\5\26\f\2\u00d8\u00d6\3\2\2\2\u00d8"+
+ "\u00d9\3\2\2\2\u00d9\u00e9\3\2\2\2\u00da\u00db\7\27\2\2\u00db\u00e9\5"+
+ "h\65\2\u00dc\u00de\7\26\2\2\u00dd\u00dc\3\2\2\2\u00dd\u00de\3\2\2\2\u00de"+
+ "\u00df\3\2\2\2\u00df\u00e0\5\24\13\2\u00e0\u00e1\7\4\2\2\u00e1\u00e2\5"+
+ "L\'\2\u00e2\u00e9\3\2\2\2\u00e3\u00e5\7\26\2\2\u00e4\u00e3\3\2\2\2\u00e4"+
+ "\u00e5\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e7\7G\2\2\u00e7\u00e9\5f\64"+
+ "\2\u00e8v\3\2\2\2\u00e8w\3\2\2\2\u00e8{\3\2\2\2\u00e8|\3\2\2\2\u00e8}"+
+ "\3\2\2\2\u00e8~\3\2\2\2\u00e8\u0080\3\2\2\2\u00e8\u0084\3\2\2\2\u00e8"+
+ "\u008a\3\2\2\2\u00e8\u008f\3\2\2\2\u00e8\u00a3\3\2\2\2\u00e8\u00b1\3\2"+
+ "\2\2\u00e8\u00b9\3\2\2\2\u00e8\u00bd\3\2\2\2\u00e8\u00c6\3\2\2\2\u00e8"+
+ "\u00d0\3\2\2\2\u00e8\u00d4\3\2\2\2\u00e8\u00da\3\2\2\2\u00e8\u00dd\3\2"+
+ "\2\2\u00e8\u00e4\3\2\2\2\u00e9\7\3\2\2\2\u00ea\u00ec\7\30\2\2\u00eb\u00ed"+
+ "\5\26\f\2\u00ec\u00eb\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed\u00ef\3\2\2\2"+
+ "\u00ee\u00f0\7\3\2\2\u00ef\u00ee\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\t\3"+
+ "\2\2\2\u00f1\u00f2\7\31\2\2\u00f2\u00f3\7G\2\2\u00f3\u00f4\7\31\2\2\u00f4"+
+ "\13\3\2\2\2\u00f5\u00fa\7G\2\2\u00f6\u00f7\7\32\2\2\u00f7\u00f9\7G\2\2"+
+ "\u00f8\u00f6\3\2\2\2\u00f9\u00fc\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fa\u00fb"+
+ "\3\2\2\2\u00fb\u00ff\3\2\2\2\u00fc\u00fa\3\2\2\2\u00fd\u00fe\7\33\2\2"+
+ "\u00fe\u0100\7G\2\2\u00ff\u00fd\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\r\3"+
+ "\2\2\2\u0101\u0102\5 \21\2\u0102\17\3\2\2\2\u0103\u0104\5 \21\2\u0104"+
+ "\21\3\2\2\2\u0105\u010a\5 \21\2\u0106\u0107\7\21\2\2\u0107\u0109\5 \21"+
+ "\2\u0108\u0106\3\2\2\2\u0109\u010c\3\2\2\2\u010a\u0108\3\2\2\2\u010a\u010b"+
+ "\3\2\2\2\u010b\23\3\2\2\2\u010c\u010a\3\2\2\2\u010d\u0112\7G\2\2\u010e"+
+ "\u010f\7\21\2\2\u010f\u0111\7G\2\2\u0110\u010e\3\2\2\2\u0111\u0114\3\2"+
+ "\2\2\u0112\u0110\3\2\2\2\u0112\u0113\3\2\2\2\u0113\25\3\2\2\2\u0114\u0112"+
+ "\3\2\2\2\u0115\u011a\5\30\r\2\u0116\u0117\7\21\2\2\u0117\u0119\5\30\r"+
+ "\2\u0118\u0116\3\2\2\2\u0119\u011c\3\2\2\2\u011a\u0118\3\2\2\2\u011a\u011b"+
+ "\3\2\2\2\u011b\27\3\2\2\2\u011c\u011a\3\2\2\2\u011d\u011e\b\r\1\2\u011e"+
+ "\u012b\7\34\2\2\u011f\u012b\7\35\2\2\u0120\u012b\7\36\2\2\u0121\u012b"+
+ "\5H%\2\u0122\u012b\5J&\2\u0123\u012b\7\37\2\2\u0124\u012b\5(\25\2\u0125"+
+ "\u012b\5\32\16\2\u0126\u012b\5.\30\2\u0127\u0128\5D#\2\u0128\u0129\5\30"+
+ "\r\n\u0129\u012b\3\2\2\2\u012a\u011d\3\2\2\2\u012a\u011f\3\2\2\2\u012a"+
+ "\u0120\3\2\2\2\u012a\u0121\3\2\2\2\u012a\u0122\3\2\2\2\u012a\u0123\3\2"+
+ "\2\2\u012a\u0124\3\2\2\2\u012a\u0125\3\2\2\2\u012a\u0126\3\2\2\2\u012a"+
+ "\u0127\3\2\2\2\u012b\u014e\3\2\2\2\u012c\u012d\f\13\2\2\u012d\u012e\5"+
+ "F$\2\u012e\u012f\5\30\r\13\u012f\u014d\3\2\2\2\u0130\u0131\f\t\2\2\u0131"+
+ "\u0132\5@!\2\u0132\u0133\5\30\r\n\u0133\u014d\3\2\2\2\u0134\u0135\f\b"+
+ "\2\2\u0135\u0136\5> \2\u0136\u0137\5\30\r\t\u0137\u014d\3\2\2\2\u0138"+
+ "\u0139\f\7\2\2\u0139\u013a\5<\37\2\u013a\u013b\5\30\r\7\u013b\u014d\3"+
+ "\2\2\2\u013c\u013d\f\6\2\2\u013d\u013e\5:\36\2\u013e\u013f\5\30\r\7\u013f"+
+ "\u014d\3\2\2\2\u0140\u0141\f\5\2\2\u0141\u0142\58\35\2\u0142\u0143\5\30"+
+ "\r\6\u0143\u014d\3\2\2\2\u0144\u0145\f\4\2\2\u0145\u0146\5\66\34\2\u0146"+
+ "\u0147\5\30\r\5\u0147\u014d\3\2\2\2\u0148\u0149\f\3\2\2\u0149\u014a\5"+
+ "B\"\2\u014a\u014b\5\30\r\4\u014b\u014d\3\2\2\2\u014c\u012c\3\2\2\2\u014c"+
+ "\u0130\3\2\2\2\u014c\u0134\3\2\2\2\u014c\u0138\3\2\2\2\u014c\u013c\3\2"+
+ "\2\2\u014c\u0140\3\2\2\2\u014c\u0144\3\2\2\2\u014c\u0148\3\2\2\2\u014d"+
+ "\u0150\3\2\2\2\u014e\u014c\3\2\2\2\u014e\u014f\3\2\2\2\u014f\31\3\2\2"+
+ "\2\u0150\u014e\3\2\2\2\u0151\u0155\5\36\20\2\u0152\u0154\5$\23\2\u0153"+
+ "\u0152\3\2\2\2\u0154\u0157\3\2\2\2\u0155\u0153\3\2\2\2\u0155\u0156\3\2"+
+ "\2\2\u0156\33\3\2\2\2\u0157\u0155\3\2\2\2\u0158\u015a\5\36\20\2\u0159"+
+ "\u015b\5$\23\2\u015a\u0159\3\2\2\2\u015b\u015c\3\2\2\2\u015c\u015a\3\2"+
+ "\2\2\u015c\u015d\3\2\2\2\u015d\35\3\2\2\2\u015e\u0164\5 \21\2\u015f\u0160"+
+ "\7 \2\2\u0160\u0161\5\30\r\2\u0161\u0162\7!\2\2\u0162\u0164\3\2\2\2\u0163"+
+ "\u015e\3\2\2\2\u0163\u015f\3\2\2\2\u0164\37\3\2\2\2\u0165\u016c\7G\2\2"+
+ "\u0166\u0167\7 \2\2\u0167\u0168\5\30\r\2\u0168\u0169\7!\2\2\u0169\u016a"+
+ "\5\"\22\2\u016a\u016c\3\2\2\2\u016b\u0165\3\2\2\2\u016b\u0166\3\2\2\2"+
+ "\u016c\u0170\3\2\2\2\u016d\u016f\5\"\22\2\u016e\u016d\3\2\2\2\u016f\u0172"+
+ "\3\2\2\2\u0170\u016e\3\2\2\2\u0170\u0171\3\2\2\2\u0171!\3\2\2\2\u0172"+
+ "\u0170\3\2\2\2\u0173\u0175\5$\23\2\u0174\u0173\3\2\2\2\u0175\u0178\3\2"+
+ "\2\2\u0176\u0174\3\2\2\2\u0176\u0177\3\2\2\2\u0177\u017f\3\2\2\2\u0178"+
+ "\u0176\3\2\2\2\u0179\u017a\7\"\2\2\u017a\u017b\5\30\r\2\u017b\u017c\7"+
+ "#\2\2\u017c\u0180\3\2\2\2\u017d\u017e\7\32\2\2\u017e\u0180\7G\2\2\u017f"+
+ "\u0179\3\2\2\2\u017f\u017d\3\2\2\2\u0180#\3\2\2\2\u0181\u0182\7\33\2\2"+
+ "\u0182\u0184\7G\2\2\u0183\u0181\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u0185"+
+ "\3\2\2\2\u0185\u0186\5&\24\2\u0186%\3\2\2\2\u0187\u0189\7 \2\2\u0188\u018a"+
+ "\5\26\f\2\u0189\u0188\3\2\2\2\u0189\u018a\3\2\2\2\u018a\u018b\3\2\2\2"+
+ "\u018b\u018f\7!\2\2\u018c\u018f\5.\30\2\u018d\u018f\5J&\2\u018e\u0187"+
+ "\3\2\2\2\u018e\u018c\3\2\2\2\u018e\u018d\3\2\2\2\u018f\'\3\2\2\2\u0190"+
+ "\u0191\7\23\2\2\u0191\u0192\5*\26\2\u0192)\3\2\2\2\u0193\u0195\7 \2\2"+
+ "\u0194\u0196\5,\27\2\u0195\u0194\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0197"+
+ "\3\2\2\2\u0197\u0198\7!\2\2\u0198\u0199\5\4\3\2\u0199\u019a\7\b\2\2\u019a"+
+ "+\3\2\2\2\u019b\u019e\5\24\13\2\u019c\u019d\7\21\2\2\u019d\u019f\7\37"+
+ "\2\2\u019e\u019c\3\2\2\2\u019e\u019f\3\2\2\2\u019f\u01a2\3\2\2\2\u01a0"+
+ "\u01a2\7\37\2\2\u01a1\u019b\3\2\2\2\u01a1\u01a0\3\2\2\2\u01a2-\3\2\2\2"+
+ "\u01a3\u01a5\7$\2\2\u01a4\u01a6\5\60\31\2\u01a5\u01a4\3\2\2\2\u01a5\u01a6"+
+ "\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a8\7%\2\2\u01a8/\3\2\2\2\u01a9\u01af"+
+ "\5\62\32\2\u01aa\u01ab\5\64\33\2\u01ab\u01ac\5\62\32\2\u01ac\u01ae\3\2"+
+ "\2\2\u01ad\u01aa\3\2\2\2\u01ae\u01b1\3\2\2\2\u01af\u01ad\3\2\2\2\u01af"+
+ "\u01b0\3\2\2\2\u01b0\u01b3\3\2\2\2\u01b1\u01af\3\2\2\2\u01b2\u01b4\5\64"+
+ "\33\2\u01b3\u01b2\3\2\2\2\u01b3\u01b4\3\2\2\2\u01b4\61\3\2\2\2\u01b5\u01b6"+
+ "\7\"\2\2\u01b6\u01b7\5\30\r\2\u01b7\u01b8\7#\2\2\u01b8\u01b9\7\4\2\2\u01b9"+
+ "\u01ba\5\30\r\2\u01ba\u01c0\3\2\2\2\u01bb\u01bc\7G\2\2\u01bc\u01bd\7\4"+
+ "\2\2\u01bd\u01c0\5\30\r\2\u01be\u01c0\5\30\r\2\u01bf\u01b5\3\2\2\2\u01bf"+
+ "\u01bb\3\2\2\2\u01bf\u01be\3\2\2\2\u01c0\63\3\2\2\2\u01c1\u01c2\t\2\2"+
+ "\2\u01c2\65\3\2\2\2\u01c3\u01c4\7&\2\2\u01c4\67\3\2\2\2\u01c5\u01c6\7"+
+ "\'\2\2\u01c69\3\2\2\2\u01c7\u01c8\t\3\2\2\u01c8;\3\2\2\2\u01c9\u01ca\7"+
+ ".\2\2\u01ca=\3\2\2\2\u01cb\u01cc\t\4\2\2\u01cc?\3\2\2\2\u01cd\u01ce\t"+
+ "\5\2\2\u01ceA\3\2\2\2\u01cf\u01d0\t\6\2\2\u01d0C\3\2\2\2\u01d1\u01d2\t"+
+ "\7\2\2\u01d2E\3\2\2\2\u01d3\u01d4\7<\2\2\u01d4G\3\2\2\2\u01d5\u01d6\t"+
+ "\b\2\2\u01d6I\3\2\2\2\u01d7\u01d8\t\t\2\2\u01d8K\3\2\2\2\u01d9\u01da\7"+
+ "=\2\2\u01da\u01db\5\f\7\2\u01db\u01dc\5&\24\2\u01dcM\3\2\2\2\u01dd\u01de"+
+ "\7\24\2\2\u01de\u01df\7G\2\2\u01df\u01e0\5\\/\2\u01e0O\3\2\2\2\u01e1\u01e2"+
+ "\7\23\2\2\u01e2\u01e3\5\f\7\2\u01e3\u01e4\5*\26\2\u01e4Q\3\2\2\2\u01e5"+
+ "\u01e6\7>\2\2\u01e6\u01e7\7\23\2\2\u01e7\u01e8\5\f\7\2\u01e8\u01e9\5*"+
+ "\26\2\u01e9S\3\2\2\2\u01ea\u01eb\t\n\2\2\u01ebU\3\2\2\2\u01ec\u01ed\7"+
+ "G\2\2\u01ed\u01ef\7$\2\2\u01ee\u01f0\5T+\2\u01ef\u01ee\3\2\2\2\u01f0\u01f1"+
+ "\3\2\2\2\u01f1\u01ef\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\3\2\2\2\u01f3"+
+ "\u01f4\7%\2\2\u01f4W\3\2\2\2\u01f5\u01f6\7A\2\2\u01f6\u01f8\7 \2\2\u01f7"+
+ "\u01f9\5,\27\2\u01f8\u01f7\3\2\2\2\u01f8\u01f9\3\2\2\2\u01f9\u01fa\3\2"+
+ "\2\2\u01fa\u01fb\7!\2\2\u01fb\u01fc\5\4\3\2\u01fc\u01fd\7\b\2\2\u01fd"+
+ "Y\3\2\2\2\u01fe\u0202\5P)\2\u01ff\u0202\5V,\2\u0200\u0202\5X-\2\u0201"+
+ "\u01fe\3\2\2\2\u0201\u01ff\3\2\2\2\u0201\u0200\3\2\2\2\u0202[\3\2\2\2"+
+ "\u0203\u0208\5R*\2\u0204\u0208\5P)\2\u0205\u0208\5V,\2\u0206\u0208\5X"+
+ "-\2\u0207\u0203\3\2\2\2\u0207\u0204\3\2\2\2\u0207\u0205\3\2\2\2\u0207"+
+ "\u0206\3\2\2\2\u0208\u020b\3\2\2\2\u0209\u0207\3\2\2\2\u0209\u020a\3\2"+
+ "\2\2\u020a\u020c\3\2\2\2\u020b\u0209\3\2\2\2\u020c\u020d\7\b\2\2\u020d"+
+ "]\3\2\2\2\u020e\u020f\7G\2\2\u020f\u0210\7B\2\2\u0210_\3\2\2\2\u0211\u0212"+
+ "\7G\2\2\u0212\u0213\7C\2\2\u0213a\3\2\2\2\u0214\u0215\7G\2\2\u0215\u0216"+
+ "\7D\2\2\u0216c\3\2\2\2\u0217\u0218\7G\2\2\u0218\u0219\7E\2\2\u0219e\3"+
+ "\2\2\2\u021a\u021b\7G\2\2\u021b\u021c\7F\2\2\u021cg\3\2\2\2\u021d\u021e"+
+ "\5 \21\2\u021ei\3\2\2\2.pt\u009a\u009f\u00ab\u00c1\u00c6\u00cc\u00d8\u00dd"+
+ "\u00e4\u00e8\u00ec\u00ef\u00fa\u00ff\u010a\u0112\u011a\u012a\u014c\u014e"+
+ "\u0155\u015c\u0163\u016b\u0170\u0176\u017f\u0183\u0189\u018e\u0195\u019e"+
+ "\u01a1\u01a5\u01af\u01b3\u01bf\u01f1\u01f8\u0201\u0207\u0209";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/org/luapp/language/generator/luappVisitor.java b/src/main/java/org/luapp/language/generator/luappVisitor.java
index 74867ad..30d1174 100644
--- a/src/main/java/org/luapp/language/generator/luappVisitor.java
+++ b/src/main/java/org/luapp/language/generator/luappVisitor.java
@@ -1,4 +1,4 @@
-// Generated from C:/Users/Harry/Desktop/Lua/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
+// Generated from C:/Users/Harry/Desktop/Lua/lpp2electricboogaloo/lua-plus-plus/src/main/java/org/luapp/language/parser\luapp.g4 by ANTLR 4.8
package org.luapp.language.generator;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
diff --git a/src/main/java/org/luapp/language/handlers/NewClassHandler.java b/src/main/java/org/luapp/language/handlers/NewClassHandler.java
index a9e2815..9067acf 100644
--- a/src/main/java/org/luapp/language/handlers/NewClassHandler.java
+++ b/src/main/java/org/luapp/language/handlers/NewClassHandler.java
@@ -1,13 +1,16 @@
package org.luapp.language.handlers;
import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.tree.ParseTree;
import org.luapp.language.generator.luappParser;
import org.luapp.language.listeners.LuaPPListener;
import org.luapp.language.loader.ListenerManager;
public class NewClassHandler extends LuaPPListener {
+
public NewClassHandler(){
this.setTarget(luappParser.RULE_newclass);
+ //this.ignoreCheck = true;
}
@Override
@@ -17,6 +20,21 @@ public void onSetManager() {
@Override
public void onEnterContext(ParserRuleContext enterContext) {
+ System.out.println(enterContext.getText());
+ boolean isLocal = enterContext.getText().startsWith("local");
+ System.out.println(isLocal);
+ String name = this.getLuaPP().getRawFromContext((ParserRuleContext) enterContext.getChild(isLocal ? 1 : 0));
+ ParseTree newClass = enterContext.getChild(isLocal ? 3 : 2);
+ ParseTree paramsChild = newClass.getChild(2);
+
+ String params = paramsChild instanceof luappParser.ArgsContext ?
+ "" :
+ this.getLuaPP().getRawFromContext((ParserRuleContext) paramsChild);
+
+ String className = this.getLuaPP().getRawFromContext((ParserRuleContext) newClass.getChild(1));
+ System.out.println( (isLocal ? "local " : "") + name + " = " + className + ".new" + params);
+ this.addToLuaPPResult( (isLocal ? "local " : "") + name + " = " + className + ".new" + params);
+
}
diff --git a/src/main/java/org/luapp/language/handlers/SafeHandler.java b/src/main/java/org/luapp/language/handlers/SafeHandler.java
index d66ccf2..2a83eb8 100644
--- a/src/main/java/org/luapp/language/handlers/SafeHandler.java
+++ b/src/main/java/org/luapp/language/handlers/SafeHandler.java
@@ -9,7 +9,7 @@ public class SafeHandler extends LuaPPListener {
public SafeHandler() {
this.setTarget(luappParser.RULE_safeOperator);
- this.ignoreCheck = true;
+ //this.ignoreCheck = true;
}
@Override
diff --git a/src/main/java/org/luapp/language/handlers/StatementHandler.java b/src/main/java/org/luapp/language/handlers/StatementHandler.java
index 27bdabf..edfbb7b 100644
--- a/src/main/java/org/luapp/language/handlers/StatementHandler.java
+++ b/src/main/java/org/luapp/language/handlers/StatementHandler.java
@@ -64,6 +64,8 @@ public void onEnterContext(ParserRuleContext enterContext) {
boolean removeSafeIndex = false;
+
+ boolean isNewStatement = false;
if (enterContext.children != null) {
for (ParseTree child : enterContext.children) {
if(child instanceof TerminalNodeImpl) continue;
@@ -79,13 +81,22 @@ public void onEnterContext(ParserRuleContext enterContext) {
.handleEnterContext(enterContext);
return;
}
+ if(((ParserRuleContext) child).getRuleIndex() == luappParser.RULE_newclass){
+ System.out.println("Done?");
+ isNewStatement = true;
+
+ }
}
}
+ if(isNewStatement){
-
-
+ this.listenerManager
+ .GetInstangeByTarget(luappParser.RULE_newclass)
+ .handleEnterContext(enterContext);
+ return;
+ }
if(this.isParentClass(enterContext)) {
- System.out.println("Parent is a class!");
+ //System.out.println("Parent is a class!");
return;
}
@@ -97,6 +108,7 @@ public void onEnterContext(ParserRuleContext enterContext) {
return;
}
+
//System.out.println("NewLine:" + this.getLuaPP().getRawFromContext(enterContext));
diff --git a/src/main/java/org/luapp/language/listeners/MasterLuaPPListener.java b/src/main/java/org/luapp/language/listeners/MasterLuaPPListener.java
index 2ac16d2..79840ef 100644
--- a/src/main/java/org/luapp/language/listeners/MasterLuaPPListener.java
+++ b/src/main/java/org/luapp/language/listeners/MasterLuaPPListener.java
@@ -25,12 +25,10 @@ public void exitChunk(luappParser.ChunkContext ctx) {
@Override
public void enterBlock(luappParser.BlockContext ctx) {
-
}
@Override
public void exitBlock(luappParser.BlockContext ctx) {
-
}
@Override
diff --git a/src/main/java/org/luapp/language/parser/luapp.g4 b/src/main/java/org/luapp/language/parser/luapp.g4
index 5312570..54d8e62 100644
--- a/src/main/java/org/luapp/language/parser/luapp.g4
+++ b/src/main/java/org/luapp/language/parser/luapp.g4
@@ -23,7 +23,7 @@ stat
| 'for' namelist 'in' explist 'do' block 'end'
| 'function' funcname funcbody
| 'class' classname ('extends' abstractclassname)? classbody
- | 'local' 'class' classname ('extends' abstractclassname)? classbody
+ | ('local')? 'class' classname ('extends' abstractclassname)? classbody
| 'local' 'function' NAME funcbody
| 'local' namelist ('=' explist)?
| 'safe' safeOperator
@@ -44,11 +44,11 @@ funcname
;
classname
- : NAME
+ : var
;
abstractclassname
- : NAME
+ : var
;
varlist
diff --git a/src/main/java/org/luapp/language/test.lpp b/src/main/java/org/luapp/language/test.lpp
index d22685c..e8da2c1 100644
--- a/src/main/java/org/luapp/language/test.lpp
+++ b/src/main/java/org/luapp/language/test.lpp
@@ -1,21 +1,13 @@
-class cat extends animal
+class ogl_suits.abilityMeta
name {get set}
- age {get set}
- type {get }
constructor(name)
- self.name = name
+ self.name = name
end
- function isCat()
- return true
+ function addHook(hookName, func)
+ hook.Add(hookName, hookName .. "suits_ability", func)
end
- static function testing()
- return "test13"
- end
-end
-
-print("hello world?")
-if 1==1 then print("helloworld2") end
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/src/main/java/org/luapp/language/test.lua b/src/main/java/org/luapp/language/test.lua
index 6f7915c..9c9717c 100644
--- a/src/main/java/org/luapp/language/test.lua
+++ b/src/main/java/org/luapp/language/test.lua
@@ -4,38 +4,21 @@ Don't remove this notice please
https://github.com/LuaPlusPlus/lua-plus-plus
]]--
-cat = {}
-cat.__index = cat
-function cat:new(name)
+ogl_suits.abilityMeta = {}
+ogl_suits.abilityMeta.__index = ogl_suits.abilityMeta
+function ogl_suits.abilityMeta:new(name)
local self = {}
- setmetatable(self, cat)
+ setmetatable(self, ogl_suits.abilityMeta)
- for k,v in pairs(animal) do
- self[k] = v
- end
self.name = name
return self
end
-function cat:isCat()
- return true
+function ogl_suits.abilityMeta:addHook(hookName, func)
+ hook.Add(hookName, hookName .. "suits_ability", func)
end
-function cat.testing()
- return "test13"
- end
-function cat:getName()
+function ogl_suits.abilityMeta:getName()
return self.name
end
-function cat:setName(obj)
+function ogl_suits.abilityMeta:setName(obj)
self.name = obj
-end
-function cat:getAge()
- return self.age
-end
-function cat:setAge(obj)
- self.age = obj
-end
-function cat:getType()
- return self.type
-end
-print("hello world?")
-if 1==1 then print("helloworld2") end
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/src/main/java/org/luapp/language/watcher/FileWatcher.java b/src/main/java/org/luapp/language/watcher/FileWatcher.java
new file mode 100644
index 0000000..6bf6fc8
--- /dev/null
+++ b/src/main/java/org/luapp/language/watcher/FileWatcher.java
@@ -0,0 +1,4 @@
+package org.luapp.language.watcher;
+
+public class FileWatcher {
+}
From 576edeec883d6c84e2663f33e44a639a7f9cb8b7 Mon Sep 17 00:00:00 2001
From: nosharp
Date: Fri, 12 Jun 2020 20:16:40 +0100
Subject: [PATCH 2/4] updated gitignore
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index 5b086e8..ad0607c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
.idea/**/**
.idea/modules.xml
target/**
+.idea/vcs.xml
From 1ae48c3e635fa3b07f8680700803a6a187660c36 Mon Sep 17 00:00:00 2001
From: nosharp
Date: Fri, 12 Jun 2020 20:27:27 +0100
Subject: [PATCH 3/4] Change ":" to "." in ConstructorHandler as it is a static
instantiation
---
.../java/org/luapp/language/handlers/ConstructorHandler.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/org/luapp/language/handlers/ConstructorHandler.java b/src/main/java/org/luapp/language/handlers/ConstructorHandler.java
index 7f3b17f..02a976d 100644
--- a/src/main/java/org/luapp/language/handlers/ConstructorHandler.java
+++ b/src/main/java/org/luapp/language/handlers/ConstructorHandler.java
@@ -31,7 +31,7 @@ public void onEnterContext(ParserRuleContext enterContext) {
String abstractClass = this.getLuaPP().currentAbstract == null ? "" : this.getLuaPP().currentAbstract;
String currentClass = this.getLuaPP().currentClass == null ? "" : this.getLuaPP().currentClass;
- this.addToLuaPPResult("function " + currentClass + ":new(" + params + ")\n" +
+ this.addToLuaPPResult("function " + currentClass + ".new(" + params + ")\n" +
"\tlocal self = {}\n" +
"\tsetmetatable(self, " + currentClass +")" +
"\n" + (abstractClass.isEmpty() ? "" : ("\n\tfor k,v in pairs(" + abstractClass + ") do \n" +
From e3603c0a73a08edd6f8152bf34b72a8b9a89159a Mon Sep 17 00:00:00 2001
From: nosharp
Date: Fri, 12 Jun 2020 20:54:10 +0100
Subject: [PATCH 4/4] Removes the new Keyword until we can find a better way to
implement.
---
.idea/misc.xml | 16 +
src/main/java/org/luapp/language/Luapp.java | 13 +-
.../org/luapp/language/generator/luapp.interp | 5 +-
.../org/luapp/language/generator/luapp.tokens | 44 +-
.../language/generator/luappBaseListener.java | 12 -
.../language/generator/luappBaseVisitor.java | 7 -
.../language/generator/luappLexer.interp | 5 +-
.../luapp/language/generator/luappLexer.java | 481 ++++---
.../language/generator/luappLexer.tokens | 44 +-
.../language/generator/luappListener.java | 10 -
.../luapp/language/generator/luappParser.java | 1172 ++++++++---------
.../language/generator/luappVisitor.java | 6 -
.../language/handlers/NewClassHandler.java | 45 -
.../language/handlers/StatementHandler.java | 11 -
.../listeners/LuaPPFileWatchingService.java | 4 +
.../listeners/MasterLuaPPListener.java | 9 -
.../java/org/luapp/language/parser/luapp.g4 | 4 -
src/main/java/org/luapp/language/test.lpp | 21 +-
src/main/java/org/luapp/language/test.lua | 26 +-
.../luapp/language/watcher/FileWatcher.java | 10 +
20 files changed, 881 insertions(+), 1064 deletions(-)
delete mode 100644 src/main/java/org/luapp/language/handlers/NewClassHandler.java
create mode 100644 src/main/java/org/luapp/language/listeners/LuaPPFileWatchingService.java
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 80cd069..ddfafd0 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/org/luapp/language/Luapp.java b/src/main/java/org/luapp/language/Luapp.java
index 2f520d6..9424cfe 100644
--- a/src/main/java/org/luapp/language/Luapp.java
+++ b/src/main/java/org/luapp/language/Luapp.java
@@ -26,6 +26,8 @@ public class Luapp {
public String currentClass;
public String currentAbstract;
+ public CommonTokenStream commonTokenStream;
+
/**
*
* @param path The path to the file.
@@ -42,8 +44,8 @@ public void load(){
this.listenerManager = new ListenerManager();
this.listenerManager.Load();
luappLexer lexer = new luappLexer(new ANTLRFileStream(this.path));
- CommonTokenStream tokens = new CommonTokenStream(lexer);
- luappParser parser = new luappParser(tokens);
+ this.commonTokenStream = new CommonTokenStream(lexer);
+ luappParser parser = new luappParser(this.commonTokenStream);
ParseTree tree = parser.chunk();
ParseTreeWalker walker = new ParseTreeWalker();
walker.walk(new MasterLuaPPListener(), tree);
@@ -96,10 +98,9 @@ public String getRaw(){
}
public String getRawFromContext(ParserRuleContext context){
- Token startToken = context.start;
- Token stopToken = context.stop;
- CharStream cs = context.start.getTokenSource().getInputStream();
- return cs.getText(new Interval(startToken.getStartIndex(), stopToken.getStopIndex()));
+ int startToken = context.start.getStartIndex();
+ int stopToken = context.stop.getStartIndex();
+ return context.getStart().getInputStream().getText(new Interval(startToken, stopToken));
}
public void appendToResult(String target){
diff --git a/src/main/java/org/luapp/language/generator/luapp.interp b/src/main/java/org/luapp/language/generator/luapp.interp
index dc178bb..b9ea9b7 100644
--- a/src/main/java/org/luapp/language/generator/luapp.interp
+++ b/src/main/java/org/luapp/language/generator/luapp.interp
@@ -58,7 +58,6 @@ null
'not'
'#'
'^'
-'new'
'static'
'get'
'set'
@@ -150,7 +149,6 @@ null
null
null
null
-null
NAME
NORMALSTRING
CHARSTRING
@@ -202,7 +200,6 @@ operatorUnary
operatorPower
number
string
-newclass
classdef
classfunction
classstaticfunction
@@ -220,4 +217,4 @@ safeOperator
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 82, 544, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 3, 2, 3, 2, 3, 2, 3, 3, 7, 3, 111, 10, 3, 12, 3, 14, 3, 114, 11, 3, 3, 3, 5, 3, 117, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 153, 10, 4, 12, 4, 14, 4, 156, 11, 4, 3, 4, 3, 4, 5, 4, 160, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 172, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 194, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 199, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 205, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 217, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 222, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 229, 10, 4, 3, 4, 3, 4, 5, 4, 233, 10, 4, 3, 5, 3, 5, 5, 5, 237, 10, 5, 3, 5, 5, 5, 240, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 7, 7, 249, 10, 7, 12, 7, 14, 7, 252, 11, 7, 3, 7, 3, 7, 5, 7, 256, 10, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 265, 10, 10, 12, 10, 14, 10, 268, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 273, 10, 11, 12, 11, 14, 11, 276, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 281, 10, 12, 12, 12, 14, 12, 284, 11, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 299, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 333, 10, 13, 12, 13, 14, 13, 336, 11, 13, 3, 14, 3, 14, 7, 14, 340, 10, 14, 12, 14, 14, 14, 343, 11, 14, 3, 15, 3, 15, 6, 15, 347, 10, 15, 13, 15, 14, 15, 348, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 356, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 364, 10, 17, 3, 17, 7, 17, 367, 10, 17, 12, 17, 14, 17, 370, 11, 17, 3, 18, 7, 18, 373, 10, 18, 12, 18, 14, 18, 376, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 384, 10, 18, 3, 19, 3, 19, 5, 19, 388, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 394, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 399, 10, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 5, 22, 406, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 5, 23, 415, 10, 23, 3, 23, 5, 23, 418, 10, 23, 3, 24, 3, 24, 5, 24, 422, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 7, 25, 430, 10, 25, 12, 25, 14, 25, 433, 11, 25, 3, 25, 5, 25, 436, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 448, 10, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 6, 44, 496, 10, 44, 13, 44, 14, 44, 497, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 5, 45, 505, 10, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 5, 46, 514, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 7, 47, 520, 10, 47, 12, 47, 14, 47, 523, 11, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 2, 3, 24, 54, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 2, 11, 4, 2, 3, 3, 17, 17, 3, 2, 40, 45, 3, 2, 47, 48, 3, 2, 49, 52, 3, 2, 53, 57, 5, 2, 48, 48, 55, 55, 58, 59, 3, 2, 75, 78, 3, 2, 72, 74, 3, 2, 63, 64, 2, 572, 2, 106, 3, 2, 2, 2, 4, 112, 3, 2, 2, 2, 6, 232, 3, 2, 2, 2, 8, 234, 3, 2, 2, 2, 10, 241, 3, 2, 2, 2, 12, 245, 3, 2, 2, 2, 14, 257, 3, 2, 2, 2, 16, 259, 3, 2, 2, 2, 18, 261, 3, 2, 2, 2, 20, 269, 3, 2, 2, 2, 22, 277, 3, 2, 2, 2, 24, 298, 3, 2, 2, 2, 26, 337, 3, 2, 2, 2, 28, 344, 3, 2, 2, 2, 30, 355, 3, 2, 2, 2, 32, 363, 3, 2, 2, 2, 34, 374, 3, 2, 2, 2, 36, 387, 3, 2, 2, 2, 38, 398, 3, 2, 2, 2, 40, 400, 3, 2, 2, 2, 42, 403, 3, 2, 2, 2, 44, 417, 3, 2, 2, 2, 46, 419, 3, 2, 2, 2, 48, 425, 3, 2, 2, 2, 50, 447, 3, 2, 2, 2, 52, 449, 3, 2, 2, 2, 54, 451, 3, 2, 2, 2, 56, 453, 3, 2, 2, 2, 58, 455, 3, 2, 2, 2, 60, 457, 3, 2, 2, 2, 62, 459, 3, 2, 2, 2, 64, 461, 3, 2, 2, 2, 66, 463, 3, 2, 2, 2, 68, 465, 3, 2, 2, 2, 70, 467, 3, 2, 2, 2, 72, 469, 3, 2, 2, 2, 74, 471, 3, 2, 2, 2, 76, 473, 3, 2, 2, 2, 78, 477, 3, 2, 2, 2, 80, 481, 3, 2, 2, 2, 82, 485, 3, 2, 2, 2, 84, 490, 3, 2, 2, 2, 86, 492, 3, 2, 2, 2, 88, 501, 3, 2, 2, 2, 90, 513, 3, 2, 2, 2, 92, 521, 3, 2, 2, 2, 94, 526, 3, 2, 2, 2, 96, 529, 3, 2, 2, 2, 98, 532, 3, 2, 2, 2, 100, 535, 3, 2, 2, 2, 102, 538, 3, 2, 2, 2, 104, 541, 3, 2, 2, 2, 106, 107, 5, 4, 3, 2, 107, 108, 7, 2, 2, 3, 108, 3, 3, 2, 2, 2, 109, 111, 5, 6, 4, 2, 110, 109, 3, 2, 2, 2, 111, 114, 3, 2, 2, 2, 112, 110, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 115, 117, 5, 8, 5, 2, 116, 115, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 5, 3, 2, 2, 2, 118, 233, 7, 3, 2, 2, 119, 120, 5, 18, 10, 2, 120, 121, 7, 4, 2, 2, 121, 122, 5, 22, 12, 2, 122, 233, 3, 2, 2, 2, 123, 233, 5, 28, 15, 2, 124, 233, 5, 10, 6, 2, 125, 233, 7, 5, 2, 2, 126, 127, 7, 6, 2, 2, 127, 233, 7, 71, 2, 2, 128, 129, 7, 7, 2, 2, 129, 130, 5, 4, 3, 2, 130, 131, 7, 8, 2, 2, 131, 233, 3, 2, 2, 2, 132, 133, 7, 9, 2, 2, 133, 134, 5, 24, 13, 2, 134, 135, 7, 7, 2, 2, 135, 136, 5, 4, 3, 2, 136, 137, 7, 8, 2, 2, 137, 233, 3, 2, 2, 2, 138, 139, 7, 10, 2, 2, 139, 140, 5, 4, 3, 2, 140, 141, 7, 11, 2, 2, 141, 142, 5, 24, 13, 2, 142, 233, 3, 2, 2, 2, 143, 144, 7, 12, 2, 2, 144, 145, 5, 24, 13, 2, 145, 146, 7, 13, 2, 2, 146, 154, 5, 4, 3, 2, 147, 148, 7, 14, 2, 2, 148, 149, 5, 24, 13, 2, 149, 150, 7, 13, 2, 2, 150, 151, 5, 4, 3, 2, 151, 153, 3, 2, 2, 2, 152, 147, 3, 2, 2, 2, 153, 156, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 159, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 157, 158, 7, 15, 2, 2, 158, 160, 5, 4, 3, 2, 159, 157, 3, 2, 2, 2, 159, 160, 3, 2, 2, 2, 160, 161, 3, 2, 2, 2, 161, 162, 7, 8, 2, 2, 162, 233, 3, 2, 2, 2, 163, 164, 7, 16, 2, 2, 164, 165, 7, 71, 2, 2, 165, 166, 7, 4, 2, 2, 166, 167, 5, 24, 13, 2, 167, 168, 7, 17, 2, 2, 168, 171, 5, 24, 13, 2, 169, 170, 7, 17, 2, 2, 170, 172, 5, 24, 13, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 7, 2, 2, 174, 175, 5, 4, 3, 2, 175, 176, 7, 8, 2, 2, 176, 233, 3, 2, 2, 2, 177, 178, 7, 16, 2, 2, 178, 179, 5, 20, 11, 2, 179, 180, 7, 18, 2, 2, 180, 181, 5, 22, 12, 2, 181, 182, 7, 7, 2, 2, 182, 183, 5, 4, 3, 2, 183, 184, 7, 8, 2, 2, 184, 233, 3, 2, 2, 2, 185, 186, 7, 19, 2, 2, 186, 187, 5, 12, 7, 2, 187, 188, 5, 42, 22, 2, 188, 233, 3, 2, 2, 2, 189, 190, 7, 20, 2, 2, 190, 193, 5, 14, 8, 2, 191, 192, 7, 21, 2, 2, 192, 194, 5, 16, 9, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 196, 5, 92, 47, 2, 196, 233, 3, 2, 2, 2, 197, 199, 7, 22, 2, 2, 198, 197, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 7, 20, 2, 2, 201, 204, 5, 14, 8, 2, 202, 203, 7, 21, 2, 2, 203, 205, 5, 16, 9, 2, 204, 202, 3, 2, 2, 2, 204, 205, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 207, 5, 92, 47, 2, 207, 233, 3, 2, 2, 2, 208, 209, 7, 22, 2, 2, 209, 210, 7, 19, 2, 2, 210, 211, 7, 71, 2, 2, 211, 233, 5, 42, 22, 2, 212, 213, 7, 22, 2, 2, 213, 216, 5, 20, 11, 2, 214, 215, 7, 4, 2, 2, 215, 217, 5, 22, 12, 2, 216, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 233, 3, 2, 2, 2, 218, 219, 7, 23, 2, 2, 219, 233, 5, 104, 53, 2, 220, 222, 7, 22, 2, 2, 221, 220, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 224, 5, 20, 11, 2, 224, 225, 7, 4, 2, 2, 225, 226, 5, 76, 39, 2, 226, 233, 3, 2, 2, 2, 227, 229, 7, 22, 2, 2, 228, 227, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 7, 71, 2, 2, 231, 233, 5, 102, 52, 2, 232, 118, 3, 2, 2, 2, 232, 119, 3, 2, 2, 2, 232, 123, 3, 2, 2, 2, 232, 124, 3, 2, 2, 2, 232, 125, 3, 2, 2, 2, 232, 126, 3, 2, 2, 2, 232, 128, 3, 2, 2, 2, 232, 132, 3, 2, 2, 2, 232, 138, 3, 2, 2, 2, 232, 143, 3, 2, 2, 2, 232, 163, 3, 2, 2, 2, 232, 177, 3, 2, 2, 2, 232, 185, 3, 2, 2, 2, 232, 189, 3, 2, 2, 2, 232, 198, 3, 2, 2, 2, 232, 208, 3, 2, 2, 2, 232, 212, 3, 2, 2, 2, 232, 218, 3, 2, 2, 2, 232, 221, 3, 2, 2, 2, 232, 228, 3, 2, 2, 2, 233, 7, 3, 2, 2, 2, 234, 236, 7, 24, 2, 2, 235, 237, 5, 22, 12, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 239, 3, 2, 2, 2, 238, 240, 7, 3, 2, 2, 239, 238, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 9, 3, 2, 2, 2, 241, 242, 7, 25, 2, 2, 242, 243, 7, 71, 2, 2, 243, 244, 7, 25, 2, 2, 244, 11, 3, 2, 2, 2, 245, 250, 7, 71, 2, 2, 246, 247, 7, 26, 2, 2, 247, 249, 7, 71, 2, 2, 248, 246, 3, 2, 2, 2, 249, 252, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 255, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 253, 254, 7, 27, 2, 2, 254, 256, 7, 71, 2, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 13, 3, 2, 2, 2, 257, 258, 5, 32, 17, 2, 258, 15, 3, 2, 2, 2, 259, 260, 5, 32, 17, 2, 260, 17, 3, 2, 2, 2, 261, 266, 5, 32, 17, 2, 262, 263, 7, 17, 2, 2, 263, 265, 5, 32, 17, 2, 264, 262, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 19, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 274, 7, 71, 2, 2, 270, 271, 7, 17, 2, 2, 271, 273, 7, 71, 2, 2, 272, 270, 3, 2, 2, 2, 273, 276, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 21, 3, 2, 2, 2, 276, 274, 3, 2, 2, 2, 277, 282, 5, 24, 13, 2, 278, 279, 7, 17, 2, 2, 279, 281, 5, 24, 13, 2, 280, 278, 3, 2, 2, 2, 281, 284, 3, 2, 2, 2, 282, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 23, 3, 2, 2, 2, 284, 282, 3, 2, 2, 2, 285, 286, 8, 13, 1, 2, 286, 299, 7, 28, 2, 2, 287, 299, 7, 29, 2, 2, 288, 299, 7, 30, 2, 2, 289, 299, 5, 72, 37, 2, 290, 299, 5, 74, 38, 2, 291, 299, 7, 31, 2, 2, 292, 299, 5, 40, 21, 2, 293, 299, 5, 26, 14, 2, 294, 299, 5, 46, 24, 2, 295, 296, 5, 68, 35, 2, 296, 297, 5, 24, 13, 10, 297, 299, 3, 2, 2, 2, 298, 285, 3, 2, 2, 2, 298, 287, 3, 2, 2, 2, 298, 288, 3, 2, 2, 2, 298, 289, 3, 2, 2, 2, 298, 290, 3, 2, 2, 2, 298, 291, 3, 2, 2, 2, 298, 292, 3, 2, 2, 2, 298, 293, 3, 2, 2, 2, 298, 294, 3, 2, 2, 2, 298, 295, 3, 2, 2, 2, 299, 334, 3, 2, 2, 2, 300, 301, 12, 11, 2, 2, 301, 302, 5, 70, 36, 2, 302, 303, 5, 24, 13, 11, 303, 333, 3, 2, 2, 2, 304, 305, 12, 9, 2, 2, 305, 306, 5, 64, 33, 2, 306, 307, 5, 24, 13, 10, 307, 333, 3, 2, 2, 2, 308, 309, 12, 8, 2, 2, 309, 310, 5, 62, 32, 2, 310, 311, 5, 24, 13, 9, 311, 333, 3, 2, 2, 2, 312, 313, 12, 7, 2, 2, 313, 314, 5, 60, 31, 2, 314, 315, 5, 24, 13, 7, 315, 333, 3, 2, 2, 2, 316, 317, 12, 6, 2, 2, 317, 318, 5, 58, 30, 2, 318, 319, 5, 24, 13, 7, 319, 333, 3, 2, 2, 2, 320, 321, 12, 5, 2, 2, 321, 322, 5, 56, 29, 2, 322, 323, 5, 24, 13, 6, 323, 333, 3, 2, 2, 2, 324, 325, 12, 4, 2, 2, 325, 326, 5, 54, 28, 2, 326, 327, 5, 24, 13, 5, 327, 333, 3, 2, 2, 2, 328, 329, 12, 3, 2, 2, 329, 330, 5, 66, 34, 2, 330, 331, 5, 24, 13, 4, 331, 333, 3, 2, 2, 2, 332, 300, 3, 2, 2, 2, 332, 304, 3, 2, 2, 2, 332, 308, 3, 2, 2, 2, 332, 312, 3, 2, 2, 2, 332, 316, 3, 2, 2, 2, 332, 320, 3, 2, 2, 2, 332, 324, 3, 2, 2, 2, 332, 328, 3, 2, 2, 2, 333, 336, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 25, 3, 2, 2, 2, 336, 334, 3, 2, 2, 2, 337, 341, 5, 30, 16, 2, 338, 340, 5, 36, 19, 2, 339, 338, 3, 2, 2, 2, 340, 343, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2, 342, 27, 3, 2, 2, 2, 343, 341, 3, 2, 2, 2, 344, 346, 5, 30, 16, 2, 345, 347, 5, 36, 19, 2, 346, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 346, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 29, 3, 2, 2, 2, 350, 356, 5, 32, 17, 2, 351, 352, 7, 32, 2, 2, 352, 353, 5, 24, 13, 2, 353, 354, 7, 33, 2, 2, 354, 356, 3, 2, 2, 2, 355, 350, 3, 2, 2, 2, 355, 351, 3, 2, 2, 2, 356, 31, 3, 2, 2, 2, 357, 364, 7, 71, 2, 2, 358, 359, 7, 32, 2, 2, 359, 360, 5, 24, 13, 2, 360, 361, 7, 33, 2, 2, 361, 362, 5, 34, 18, 2, 362, 364, 3, 2, 2, 2, 363, 357, 3, 2, 2, 2, 363, 358, 3, 2, 2, 2, 364, 368, 3, 2, 2, 2, 365, 367, 5, 34, 18, 2, 366, 365, 3, 2, 2, 2, 367, 370, 3, 2, 2, 2, 368, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 33, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, 371, 373, 5, 36, 19, 2, 372, 371, 3, 2, 2, 2, 373, 376, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 383, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 377, 378, 7, 34, 2, 2, 378, 379, 5, 24, 13, 2, 379, 380, 7, 35, 2, 2, 380, 384, 3, 2, 2, 2, 381, 382, 7, 26, 2, 2, 382, 384, 7, 71, 2, 2, 383, 377, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 384, 35, 3, 2, 2, 2, 385, 386, 7, 27, 2, 2, 386, 388, 7, 71, 2, 2, 387, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 390, 5, 38, 20, 2, 390, 37, 3, 2, 2, 2, 391, 393, 7, 32, 2, 2, 392, 394, 5, 22, 12, 2, 393, 392, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 399, 7, 33, 2, 2, 396, 399, 5, 46, 24, 2, 397, 399, 5, 74, 38, 2, 398, 391, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 398, 397, 3, 2, 2, 2, 399, 39, 3, 2, 2, 2, 400, 401, 7, 19, 2, 2, 401, 402, 5, 42, 22, 2, 402, 41, 3, 2, 2, 2, 403, 405, 7, 32, 2, 2, 404, 406, 5, 44, 23, 2, 405, 404, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 7, 33, 2, 2, 408, 409, 5, 4, 3, 2, 409, 410, 7, 8, 2, 2, 410, 43, 3, 2, 2, 2, 411, 414, 5, 20, 11, 2, 412, 413, 7, 17, 2, 2, 413, 415, 7, 31, 2, 2, 414, 412, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 418, 3, 2, 2, 2, 416, 418, 7, 31, 2, 2, 417, 411, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 45, 3, 2, 2, 2, 419, 421, 7, 36, 2, 2, 420, 422, 5, 48, 25, 2, 421, 420, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 7, 37, 2, 2, 424, 47, 3, 2, 2, 2, 425, 431, 5, 50, 26, 2, 426, 427, 5, 52, 27, 2, 427, 428, 5, 50, 26, 2, 428, 430, 3, 2, 2, 2, 429, 426, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 436, 5, 52, 27, 2, 435, 434, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 49, 3, 2, 2, 2, 437, 438, 7, 34, 2, 2, 438, 439, 5, 24, 13, 2, 439, 440, 7, 35, 2, 2, 440, 441, 7, 4, 2, 2, 441, 442, 5, 24, 13, 2, 442, 448, 3, 2, 2, 2, 443, 444, 7, 71, 2, 2, 444, 445, 7, 4, 2, 2, 445, 448, 5, 24, 13, 2, 446, 448, 5, 24, 13, 2, 447, 437, 3, 2, 2, 2, 447, 443, 3, 2, 2, 2, 447, 446, 3, 2, 2, 2, 448, 51, 3, 2, 2, 2, 449, 450, 9, 2, 2, 2, 450, 53, 3, 2, 2, 2, 451, 452, 7, 38, 2, 2, 452, 55, 3, 2, 2, 2, 453, 454, 7, 39, 2, 2, 454, 57, 3, 2, 2, 2, 455, 456, 9, 3, 2, 2, 456, 59, 3, 2, 2, 2, 457, 458, 7, 46, 2, 2, 458, 61, 3, 2, 2, 2, 459, 460, 9, 4, 2, 2, 460, 63, 3, 2, 2, 2, 461, 462, 9, 5, 2, 2, 462, 65, 3, 2, 2, 2, 463, 464, 9, 6, 2, 2, 464, 67, 3, 2, 2, 2, 465, 466, 9, 7, 2, 2, 466, 69, 3, 2, 2, 2, 467, 468, 7, 60, 2, 2, 468, 71, 3, 2, 2, 2, 469, 470, 9, 8, 2, 2, 470, 73, 3, 2, 2, 2, 471, 472, 9, 9, 2, 2, 472, 75, 3, 2, 2, 2, 473, 474, 7, 61, 2, 2, 474, 475, 5, 12, 7, 2, 475, 476, 5, 38, 20, 2, 476, 77, 3, 2, 2, 2, 477, 478, 7, 20, 2, 2, 478, 479, 7, 71, 2, 2, 479, 480, 5, 92, 47, 2, 480, 79, 3, 2, 2, 2, 481, 482, 7, 19, 2, 2, 482, 483, 5, 12, 7, 2, 483, 484, 5, 42, 22, 2, 484, 81, 3, 2, 2, 2, 485, 486, 7, 62, 2, 2, 486, 487, 7, 19, 2, 2, 487, 488, 5, 12, 7, 2, 488, 489, 5, 42, 22, 2, 489, 83, 3, 2, 2, 2, 490, 491, 9, 10, 2, 2, 491, 85, 3, 2, 2, 2, 492, 493, 7, 71, 2, 2, 493, 495, 7, 36, 2, 2, 494, 496, 5, 84, 43, 2, 495, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 7, 37, 2, 2, 500, 87, 3, 2, 2, 2, 501, 502, 7, 65, 2, 2, 502, 504, 7, 32, 2, 2, 503, 505, 5, 44, 23, 2, 504, 503, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 507, 7, 33, 2, 2, 507, 508, 5, 4, 3, 2, 508, 509, 7, 8, 2, 2, 509, 89, 3, 2, 2, 2, 510, 514, 5, 80, 41, 2, 511, 514, 5, 86, 44, 2, 512, 514, 5, 88, 45, 2, 513, 510, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 513, 512, 3, 2, 2, 2, 514, 91, 3, 2, 2, 2, 515, 520, 5, 82, 42, 2, 516, 520, 5, 80, 41, 2, 517, 520, 5, 86, 44, 2, 518, 520, 5, 88, 45, 2, 519, 515, 3, 2, 2, 2, 519, 516, 3, 2, 2, 2, 519, 517, 3, 2, 2, 2, 519, 518, 3, 2, 2, 2, 520, 523, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 524, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 524, 525, 7, 8, 2, 2, 525, 93, 3, 2, 2, 2, 526, 527, 7, 71, 2, 2, 527, 528, 7, 66, 2, 2, 528, 95, 3, 2, 2, 2, 529, 530, 7, 71, 2, 2, 530, 531, 7, 67, 2, 2, 531, 97, 3, 2, 2, 2, 532, 533, 7, 71, 2, 2, 533, 534, 7, 68, 2, 2, 534, 99, 3, 2, 2, 2, 535, 536, 7, 71, 2, 2, 536, 537, 7, 69, 2, 2, 537, 101, 3, 2, 2, 2, 538, 539, 7, 71, 2, 2, 539, 540, 7, 70, 2, 2, 540, 103, 3, 2, 2, 2, 541, 542, 5, 32, 17, 2, 542, 105, 3, 2, 2, 2, 46, 112, 116, 154, 159, 171, 193, 198, 204, 216, 221, 228, 232, 236, 239, 250, 255, 266, 274, 282, 298, 332, 334, 341, 348, 355, 363, 368, 374, 383, 387, 393, 398, 405, 414, 417, 421, 431, 435, 447, 497, 504, 513, 519, 521]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 81, 531, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 3, 2, 3, 2, 3, 2, 3, 3, 7, 3, 109, 10, 3, 12, 3, 14, 3, 112, 11, 3, 3, 3, 5, 3, 115, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 151, 10, 4, 12, 4, 14, 4, 154, 11, 4, 3, 4, 3, 4, 5, 4, 158, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 170, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 192, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 197, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 203, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 215, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 220, 10, 4, 3, 4, 3, 4, 5, 4, 224, 10, 4, 3, 5, 3, 5, 5, 5, 228, 10, 5, 3, 5, 5, 5, 231, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 7, 7, 240, 10, 7, 12, 7, 14, 7, 243, 11, 7, 3, 7, 3, 7, 5, 7, 247, 10, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 256, 10, 10, 12, 10, 14, 10, 259, 11, 10, 3, 11, 3, 11, 3, 11, 7, 11, 264, 10, 11, 12, 11, 14, 11, 267, 11, 11, 3, 12, 3, 12, 3, 12, 7, 12, 272, 10, 12, 12, 12, 14, 12, 275, 11, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 290, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 324, 10, 13, 12, 13, 14, 13, 327, 11, 13, 3, 14, 3, 14, 7, 14, 331, 10, 14, 12, 14, 14, 14, 334, 11, 14, 3, 15, 3, 15, 6, 15, 338, 10, 15, 13, 15, 14, 15, 339, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 347, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 355, 10, 17, 3, 17, 7, 17, 358, 10, 17, 12, 17, 14, 17, 361, 11, 17, 3, 18, 7, 18, 364, 10, 18, 12, 18, 14, 18, 367, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 375, 10, 18, 3, 19, 3, 19, 5, 19, 379, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 385, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 390, 10, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 5, 22, 397, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 5, 23, 406, 10, 23, 3, 23, 5, 23, 409, 10, 23, 3, 24, 3, 24, 5, 24, 413, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 7, 25, 421, 10, 25, 12, 25, 14, 25, 424, 11, 25, 3, 25, 5, 25, 427, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 439, 10, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 6, 43, 483, 10, 43, 13, 43, 14, 43, 484, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 5, 44, 492, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 5, 45, 501, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 507, 10, 46, 12, 46, 14, 46, 510, 11, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 2, 3, 24, 53, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 2, 11, 4, 2, 3, 3, 17, 17, 3, 2, 40, 45, 3, 2, 47, 48, 3, 2, 49, 52, 3, 2, 53, 57, 5, 2, 48, 48, 55, 55, 58, 59, 3, 2, 74, 77, 3, 2, 71, 73, 3, 2, 62, 63, 2, 558, 2, 104, 3, 2, 2, 2, 4, 110, 3, 2, 2, 2, 6, 223, 3, 2, 2, 2, 8, 225, 3, 2, 2, 2, 10, 232, 3, 2, 2, 2, 12, 236, 3, 2, 2, 2, 14, 248, 3, 2, 2, 2, 16, 250, 3, 2, 2, 2, 18, 252, 3, 2, 2, 2, 20, 260, 3, 2, 2, 2, 22, 268, 3, 2, 2, 2, 24, 289, 3, 2, 2, 2, 26, 328, 3, 2, 2, 2, 28, 335, 3, 2, 2, 2, 30, 346, 3, 2, 2, 2, 32, 354, 3, 2, 2, 2, 34, 365, 3, 2, 2, 2, 36, 378, 3, 2, 2, 2, 38, 389, 3, 2, 2, 2, 40, 391, 3, 2, 2, 2, 42, 394, 3, 2, 2, 2, 44, 408, 3, 2, 2, 2, 46, 410, 3, 2, 2, 2, 48, 416, 3, 2, 2, 2, 50, 438, 3, 2, 2, 2, 52, 440, 3, 2, 2, 2, 54, 442, 3, 2, 2, 2, 56, 444, 3, 2, 2, 2, 58, 446, 3, 2, 2, 2, 60, 448, 3, 2, 2, 2, 62, 450, 3, 2, 2, 2, 64, 452, 3, 2, 2, 2, 66, 454, 3, 2, 2, 2, 68, 456, 3, 2, 2, 2, 70, 458, 3, 2, 2, 2, 72, 460, 3, 2, 2, 2, 74, 462, 3, 2, 2, 2, 76, 464, 3, 2, 2, 2, 78, 468, 3, 2, 2, 2, 80, 472, 3, 2, 2, 2, 82, 477, 3, 2, 2, 2, 84, 479, 3, 2, 2, 2, 86, 488, 3, 2, 2, 2, 88, 500, 3, 2, 2, 2, 90, 508, 3, 2, 2, 2, 92, 513, 3, 2, 2, 2, 94, 516, 3, 2, 2, 2, 96, 519, 3, 2, 2, 2, 98, 522, 3, 2, 2, 2, 100, 525, 3, 2, 2, 2, 102, 528, 3, 2, 2, 2, 104, 105, 5, 4, 3, 2, 105, 106, 7, 2, 2, 3, 106, 3, 3, 2, 2, 2, 107, 109, 5, 6, 4, 2, 108, 107, 3, 2, 2, 2, 109, 112, 3, 2, 2, 2, 110, 108, 3, 2, 2, 2, 110, 111, 3, 2, 2, 2, 111, 114, 3, 2, 2, 2, 112, 110, 3, 2, 2, 2, 113, 115, 5, 8, 5, 2, 114, 113, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 5, 3, 2, 2, 2, 116, 224, 7, 3, 2, 2, 117, 118, 5, 18, 10, 2, 118, 119, 7, 4, 2, 2, 119, 120, 5, 22, 12, 2, 120, 224, 3, 2, 2, 2, 121, 224, 5, 28, 15, 2, 122, 224, 5, 10, 6, 2, 123, 224, 7, 5, 2, 2, 124, 125, 7, 6, 2, 2, 125, 224, 7, 70, 2, 2, 126, 127, 7, 7, 2, 2, 127, 128, 5, 4, 3, 2, 128, 129, 7, 8, 2, 2, 129, 224, 3, 2, 2, 2, 130, 131, 7, 9, 2, 2, 131, 132, 5, 24, 13, 2, 132, 133, 7, 7, 2, 2, 133, 134, 5, 4, 3, 2, 134, 135, 7, 8, 2, 2, 135, 224, 3, 2, 2, 2, 136, 137, 7, 10, 2, 2, 137, 138, 5, 4, 3, 2, 138, 139, 7, 11, 2, 2, 139, 140, 5, 24, 13, 2, 140, 224, 3, 2, 2, 2, 141, 142, 7, 12, 2, 2, 142, 143, 5, 24, 13, 2, 143, 144, 7, 13, 2, 2, 144, 152, 5, 4, 3, 2, 145, 146, 7, 14, 2, 2, 146, 147, 5, 24, 13, 2, 147, 148, 7, 13, 2, 2, 148, 149, 5, 4, 3, 2, 149, 151, 3, 2, 2, 2, 150, 145, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 157, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 156, 7, 15, 2, 2, 156, 158, 5, 4, 3, 2, 157, 155, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 160, 7, 8, 2, 2, 160, 224, 3, 2, 2, 2, 161, 162, 7, 16, 2, 2, 162, 163, 7, 70, 2, 2, 163, 164, 7, 4, 2, 2, 164, 165, 5, 24, 13, 2, 165, 166, 7, 17, 2, 2, 166, 169, 5, 24, 13, 2, 167, 168, 7, 17, 2, 2, 168, 170, 5, 24, 13, 2, 169, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 172, 7, 7, 2, 2, 172, 173, 5, 4, 3, 2, 173, 174, 7, 8, 2, 2, 174, 224, 3, 2, 2, 2, 175, 176, 7, 16, 2, 2, 176, 177, 5, 20, 11, 2, 177, 178, 7, 18, 2, 2, 178, 179, 5, 22, 12, 2, 179, 180, 7, 7, 2, 2, 180, 181, 5, 4, 3, 2, 181, 182, 7, 8, 2, 2, 182, 224, 3, 2, 2, 2, 183, 184, 7, 19, 2, 2, 184, 185, 5, 12, 7, 2, 185, 186, 5, 42, 22, 2, 186, 224, 3, 2, 2, 2, 187, 188, 7, 20, 2, 2, 188, 191, 5, 14, 8, 2, 189, 190, 7, 21, 2, 2, 190, 192, 5, 16, 9, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 5, 90, 46, 2, 194, 224, 3, 2, 2, 2, 195, 197, 7, 22, 2, 2, 196, 195, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 199, 7, 20, 2, 2, 199, 202, 5, 14, 8, 2, 200, 201, 7, 21, 2, 2, 201, 203, 5, 16, 9, 2, 202, 200, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 5, 90, 46, 2, 205, 224, 3, 2, 2, 2, 206, 207, 7, 22, 2, 2, 207, 208, 7, 19, 2, 2, 208, 209, 7, 70, 2, 2, 209, 224, 5, 42, 22, 2, 210, 211, 7, 22, 2, 2, 211, 214, 5, 20, 11, 2, 212, 213, 7, 4, 2, 2, 213, 215, 5, 22, 12, 2, 214, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 224, 3, 2, 2, 2, 216, 217, 7, 23, 2, 2, 217, 224, 5, 102, 52, 2, 218, 220, 7, 22, 2, 2, 219, 218, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 222, 7, 70, 2, 2, 222, 224, 5, 100, 51, 2, 223, 116, 3, 2, 2, 2, 223, 117, 3, 2, 2, 2, 223, 121, 3, 2, 2, 2, 223, 122, 3, 2, 2, 2, 223, 123, 3, 2, 2, 2, 223, 124, 3, 2, 2, 2, 223, 126, 3, 2, 2, 2, 223, 130, 3, 2, 2, 2, 223, 136, 3, 2, 2, 2, 223, 141, 3, 2, 2, 2, 223, 161, 3, 2, 2, 2, 223, 175, 3, 2, 2, 2, 223, 183, 3, 2, 2, 2, 223, 187, 3, 2, 2, 2, 223, 196, 3, 2, 2, 2, 223, 206, 3, 2, 2, 2, 223, 210, 3, 2, 2, 2, 223, 216, 3, 2, 2, 2, 223, 219, 3, 2, 2, 2, 224, 7, 3, 2, 2, 2, 225, 227, 7, 24, 2, 2, 226, 228, 5, 22, 12, 2, 227, 226, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 230, 3, 2, 2, 2, 229, 231, 7, 3, 2, 2, 230, 229, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 9, 3, 2, 2, 2, 232, 233, 7, 25, 2, 2, 233, 234, 7, 70, 2, 2, 234, 235, 7, 25, 2, 2, 235, 11, 3, 2, 2, 2, 236, 241, 7, 70, 2, 2, 237, 238, 7, 26, 2, 2, 238, 240, 7, 70, 2, 2, 239, 237, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 246, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 245, 7, 27, 2, 2, 245, 247, 7, 70, 2, 2, 246, 244, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 13, 3, 2, 2, 2, 248, 249, 5, 32, 17, 2, 249, 15, 3, 2, 2, 2, 250, 251, 5, 32, 17, 2, 251, 17, 3, 2, 2, 2, 252, 257, 5, 32, 17, 2, 253, 254, 7, 17, 2, 2, 254, 256, 5, 32, 17, 2, 255, 253, 3, 2, 2, 2, 256, 259, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 19, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 260, 265, 7, 70, 2, 2, 261, 262, 7, 17, 2, 2, 262, 264, 7, 70, 2, 2, 263, 261, 3, 2, 2, 2, 264, 267, 3, 2, 2, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 21, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 268, 273, 5, 24, 13, 2, 269, 270, 7, 17, 2, 2, 270, 272, 5, 24, 13, 2, 271, 269, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 23, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 276, 277, 8, 13, 1, 2, 277, 290, 7, 28, 2, 2, 278, 290, 7, 29, 2, 2, 279, 290, 7, 30, 2, 2, 280, 290, 5, 72, 37, 2, 281, 290, 5, 74, 38, 2, 282, 290, 7, 31, 2, 2, 283, 290, 5, 40, 21, 2, 284, 290, 5, 26, 14, 2, 285, 290, 5, 46, 24, 2, 286, 287, 5, 68, 35, 2, 287, 288, 5, 24, 13, 10, 288, 290, 3, 2, 2, 2, 289, 276, 3, 2, 2, 2, 289, 278, 3, 2, 2, 2, 289, 279, 3, 2, 2, 2, 289, 280, 3, 2, 2, 2, 289, 281, 3, 2, 2, 2, 289, 282, 3, 2, 2, 2, 289, 283, 3, 2, 2, 2, 289, 284, 3, 2, 2, 2, 289, 285, 3, 2, 2, 2, 289, 286, 3, 2, 2, 2, 290, 325, 3, 2, 2, 2, 291, 292, 12, 11, 2, 2, 292, 293, 5, 70, 36, 2, 293, 294, 5, 24, 13, 11, 294, 324, 3, 2, 2, 2, 295, 296, 12, 9, 2, 2, 296, 297, 5, 64, 33, 2, 297, 298, 5, 24, 13, 10, 298, 324, 3, 2, 2, 2, 299, 300, 12, 8, 2, 2, 300, 301, 5, 62, 32, 2, 301, 302, 5, 24, 13, 9, 302, 324, 3, 2, 2, 2, 303, 304, 12, 7, 2, 2, 304, 305, 5, 60, 31, 2, 305, 306, 5, 24, 13, 7, 306, 324, 3, 2, 2, 2, 307, 308, 12, 6, 2, 2, 308, 309, 5, 58, 30, 2, 309, 310, 5, 24, 13, 7, 310, 324, 3, 2, 2, 2, 311, 312, 12, 5, 2, 2, 312, 313, 5, 56, 29, 2, 313, 314, 5, 24, 13, 6, 314, 324, 3, 2, 2, 2, 315, 316, 12, 4, 2, 2, 316, 317, 5, 54, 28, 2, 317, 318, 5, 24, 13, 5, 318, 324, 3, 2, 2, 2, 319, 320, 12, 3, 2, 2, 320, 321, 5, 66, 34, 2, 321, 322, 5, 24, 13, 4, 322, 324, 3, 2, 2, 2, 323, 291, 3, 2, 2, 2, 323, 295, 3, 2, 2, 2, 323, 299, 3, 2, 2, 2, 323, 303, 3, 2, 2, 2, 323, 307, 3, 2, 2, 2, 323, 311, 3, 2, 2, 2, 323, 315, 3, 2, 2, 2, 323, 319, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 25, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 328, 332, 5, 30, 16, 2, 329, 331, 5, 36, 19, 2, 330, 329, 3, 2, 2, 2, 331, 334, 3, 2, 2, 2, 332, 330, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 27, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 335, 337, 5, 30, 16, 2, 336, 338, 5, 36, 19, 2, 337, 336, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 29, 3, 2, 2, 2, 341, 347, 5, 32, 17, 2, 342, 343, 7, 32, 2, 2, 343, 344, 5, 24, 13, 2, 344, 345, 7, 33, 2, 2, 345, 347, 3, 2, 2, 2, 346, 341, 3, 2, 2, 2, 346, 342, 3, 2, 2, 2, 347, 31, 3, 2, 2, 2, 348, 355, 7, 70, 2, 2, 349, 350, 7, 32, 2, 2, 350, 351, 5, 24, 13, 2, 351, 352, 7, 33, 2, 2, 352, 353, 5, 34, 18, 2, 353, 355, 3, 2, 2, 2, 354, 348, 3, 2, 2, 2, 354, 349, 3, 2, 2, 2, 355, 359, 3, 2, 2, 2, 356, 358, 5, 34, 18, 2, 357, 356, 3, 2, 2, 2, 358, 361, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 33, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 362, 364, 5, 36, 19, 2, 363, 362, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 374, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 7, 34, 2, 2, 369, 370, 5, 24, 13, 2, 370, 371, 7, 35, 2, 2, 371, 375, 3, 2, 2, 2, 372, 373, 7, 26, 2, 2, 373, 375, 7, 70, 2, 2, 374, 368, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 375, 35, 3, 2, 2, 2, 376, 377, 7, 27, 2, 2, 377, 379, 7, 70, 2, 2, 378, 376, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 381, 5, 38, 20, 2, 381, 37, 3, 2, 2, 2, 382, 384, 7, 32, 2, 2, 383, 385, 5, 22, 12, 2, 384, 383, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 390, 7, 33, 2, 2, 387, 390, 5, 46, 24, 2, 388, 390, 5, 74, 38, 2, 389, 382, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 389, 388, 3, 2, 2, 2, 390, 39, 3, 2, 2, 2, 391, 392, 7, 19, 2, 2, 392, 393, 5, 42, 22, 2, 393, 41, 3, 2, 2, 2, 394, 396, 7, 32, 2, 2, 395, 397, 5, 44, 23, 2, 396, 395, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 7, 33, 2, 2, 399, 400, 5, 4, 3, 2, 400, 401, 7, 8, 2, 2, 401, 43, 3, 2, 2, 2, 402, 405, 5, 20, 11, 2, 403, 404, 7, 17, 2, 2, 404, 406, 7, 31, 2, 2, 405, 403, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 409, 3, 2, 2, 2, 407, 409, 7, 31, 2, 2, 408, 402, 3, 2, 2, 2, 408, 407, 3, 2, 2, 2, 409, 45, 3, 2, 2, 2, 410, 412, 7, 36, 2, 2, 411, 413, 5, 48, 25, 2, 412, 411, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 415, 7, 37, 2, 2, 415, 47, 3, 2, 2, 2, 416, 422, 5, 50, 26, 2, 417, 418, 5, 52, 27, 2, 418, 419, 5, 50, 26, 2, 419, 421, 3, 2, 2, 2, 420, 417, 3, 2, 2, 2, 421, 424, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 426, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 425, 427, 5, 52, 27, 2, 426, 425, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 49, 3, 2, 2, 2, 428, 429, 7, 34, 2, 2, 429, 430, 5, 24, 13, 2, 430, 431, 7, 35, 2, 2, 431, 432, 7, 4, 2, 2, 432, 433, 5, 24, 13, 2, 433, 439, 3, 2, 2, 2, 434, 435, 7, 70, 2, 2, 435, 436, 7, 4, 2, 2, 436, 439, 5, 24, 13, 2, 437, 439, 5, 24, 13, 2, 438, 428, 3, 2, 2, 2, 438, 434, 3, 2, 2, 2, 438, 437, 3, 2, 2, 2, 439, 51, 3, 2, 2, 2, 440, 441, 9, 2, 2, 2, 441, 53, 3, 2, 2, 2, 442, 443, 7, 38, 2, 2, 443, 55, 3, 2, 2, 2, 444, 445, 7, 39, 2, 2, 445, 57, 3, 2, 2, 2, 446, 447, 9, 3, 2, 2, 447, 59, 3, 2, 2, 2, 448, 449, 7, 46, 2, 2, 449, 61, 3, 2, 2, 2, 450, 451, 9, 4, 2, 2, 451, 63, 3, 2, 2, 2, 452, 453, 9, 5, 2, 2, 453, 65, 3, 2, 2, 2, 454, 455, 9, 6, 2, 2, 455, 67, 3, 2, 2, 2, 456, 457, 9, 7, 2, 2, 457, 69, 3, 2, 2, 2, 458, 459, 7, 60, 2, 2, 459, 71, 3, 2, 2, 2, 460, 461, 9, 8, 2, 2, 461, 73, 3, 2, 2, 2, 462, 463, 9, 9, 2, 2, 463, 75, 3, 2, 2, 2, 464, 465, 7, 20, 2, 2, 465, 466, 7, 70, 2, 2, 466, 467, 5, 90, 46, 2, 467, 77, 3, 2, 2, 2, 468, 469, 7, 19, 2, 2, 469, 470, 5, 12, 7, 2, 470, 471, 5, 42, 22, 2, 471, 79, 3, 2, 2, 2, 472, 473, 7, 61, 2, 2, 473, 474, 7, 19, 2, 2, 474, 475, 5, 12, 7, 2, 475, 476, 5, 42, 22, 2, 476, 81, 3, 2, 2, 2, 477, 478, 9, 10, 2, 2, 478, 83, 3, 2, 2, 2, 479, 480, 7, 70, 2, 2, 480, 482, 7, 36, 2, 2, 481, 483, 5, 82, 42, 2, 482, 481, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 487, 7, 37, 2, 2, 487, 85, 3, 2, 2, 2, 488, 489, 7, 64, 2, 2, 489, 491, 7, 32, 2, 2, 490, 492, 5, 44, 23, 2, 491, 490, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 7, 33, 2, 2, 494, 495, 5, 4, 3, 2, 495, 496, 7, 8, 2, 2, 496, 87, 3, 2, 2, 2, 497, 501, 5, 78, 40, 2, 498, 501, 5, 84, 43, 2, 499, 501, 5, 86, 44, 2, 500, 497, 3, 2, 2, 2, 500, 498, 3, 2, 2, 2, 500, 499, 3, 2, 2, 2, 501, 89, 3, 2, 2, 2, 502, 507, 5, 80, 41, 2, 503, 507, 5, 78, 40, 2, 504, 507, 5, 84, 43, 2, 505, 507, 5, 86, 44, 2, 506, 502, 3, 2, 2, 2, 506, 503, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 506, 505, 3, 2, 2, 2, 507, 510, 3, 2, 2, 2, 508, 506, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 511, 3, 2, 2, 2, 510, 508, 3, 2, 2, 2, 511, 512, 7, 8, 2, 2, 512, 91, 3, 2, 2, 2, 513, 514, 7, 70, 2, 2, 514, 515, 7, 65, 2, 2, 515, 93, 3, 2, 2, 2, 516, 517, 7, 70, 2, 2, 517, 518, 7, 66, 2, 2, 518, 95, 3, 2, 2, 2, 519, 520, 7, 70, 2, 2, 520, 521, 7, 67, 2, 2, 521, 97, 3, 2, 2, 2, 522, 523, 7, 70, 2, 2, 523, 524, 7, 68, 2, 2, 524, 99, 3, 2, 2, 2, 525, 526, 7, 70, 2, 2, 526, 527, 7, 69, 2, 2, 527, 101, 3, 2, 2, 2, 528, 529, 5, 32, 17, 2, 529, 103, 3, 2, 2, 2, 45, 110, 114, 152, 157, 169, 191, 196, 202, 214, 219, 223, 227, 230, 241, 246, 257, 265, 273, 289, 323, 325, 332, 339, 346, 354, 359, 365, 374, 378, 384, 389, 396, 405, 408, 412, 422, 426, 438, 484, 491, 500, 506, 508]
\ No newline at end of file
diff --git a/src/main/java/org/luapp/language/generator/luapp.tokens b/src/main/java/org/luapp/language/generator/luapp.tokens
index b349b4f..d15989f 100644
--- a/src/main/java/org/luapp/language/generator/luapp.tokens
+++ b/src/main/java/org/luapp/language/generator/luapp.tokens
@@ -65,19 +65,18 @@ T__63=64
T__64=65
T__65=66
T__66=67
-T__67=68
-NAME=69
-NORMALSTRING=70
-CHARSTRING=71
-LONGSTRING=72
-INT=73
-HEX=74
-FLOAT=75
-HEX_FLOAT=76
-COMMENT=77
-LINE_COMMENT=78
-WS=79
-SHEBANG=80
+NAME=68
+NORMALSTRING=69
+CHARSTRING=70
+LONGSTRING=71
+INT=72
+HEX=73
+FLOAT=74
+HEX_FLOAT=75
+COMMENT=76
+LINE_COMMENT=77
+WS=78
+SHEBANG=79
';'=1
'='=2
'break'=3
@@ -136,13 +135,12 @@ SHEBANG=80
'not'=56
'#'=57
'^'=58
-'new'=59
-'static'=60
-'get'=61
-'set'=62
-'constructor'=63
-'++'=64
-'+='=65
-'*='=66
-'/='=67
-'-='=68
+'static'=59
+'get'=60
+'set'=61
+'constructor'=62
+'++'=63
+'+='=64
+'*='=65
+'/='=66
+'-='=67
diff --git a/src/main/java/org/luapp/language/generator/luappBaseListener.java b/src/main/java/org/luapp/language/generator/luappBaseListener.java
index e0f24da..d71d160 100644
--- a/src/main/java/org/luapp/language/generator/luappBaseListener.java
+++ b/src/main/java/org/luapp/language/generator/luappBaseListener.java
@@ -455,18 +455,6 @@ public class luappBaseListener implements luappListener {
* The default implementation does nothing.
*/
@Override public void exitString(luappParser.StringContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterNewclass(luappParser.NewclassContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitNewclass(luappParser.NewclassContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/org/luapp/language/generator/luappBaseVisitor.java b/src/main/java/org/luapp/language/generator/luappBaseVisitor.java
index dc61a93..45e1991 100644
--- a/src/main/java/org/luapp/language/generator/luappBaseVisitor.java
+++ b/src/main/java/org/luapp/language/generator/luappBaseVisitor.java
@@ -270,13 +270,6 @@ public class luappBaseVisitor extends AbstractParseTreeVisitor implements
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitString(luappParser.StringContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitNewclass(luappParser.NewclassContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/org/luapp/language/generator/luappLexer.interp b/src/main/java/org/luapp/language/generator/luappLexer.interp
index fdbbdeb..ed89e6b 100644
--- a/src/main/java/org/luapp/language/generator/luappLexer.interp
+++ b/src/main/java/org/luapp/language/generator/luappLexer.interp
@@ -58,7 +58,6 @@ null
'not'
'#'
'^'
-'new'
'static'
'get'
'set'
@@ -150,7 +149,6 @@ null
null
null
null
-null
NAME
NORMALSTRING
CHARSTRING
@@ -232,7 +230,6 @@ T__63
T__64
T__65
T__66
-T__67
NAME
NORMALSTRING
CHARSTRING
@@ -263,4 +260,4 @@ mode names:
DEFAULT_MODE
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 82, 694, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 7, 70, 438, 10, 70, 12, 70, 14, 70, 441, 11, 70, 3, 71, 3, 71, 3, 71, 7, 71, 446, 10, 71, 12, 71, 14, 71, 449, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 7, 72, 456, 10, 72, 12, 72, 14, 72, 459, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 473, 10, 74, 12, 74, 14, 74, 476, 11, 74, 3, 74, 5, 74, 479, 10, 74, 3, 75, 6, 75, 482, 10, 75, 13, 75, 14, 75, 483, 3, 76, 3, 76, 3, 76, 6, 76, 489, 10, 76, 13, 76, 14, 76, 490, 3, 77, 6, 77, 494, 10, 77, 13, 77, 14, 77, 495, 3, 77, 3, 77, 7, 77, 500, 10, 77, 12, 77, 14, 77, 503, 11, 77, 3, 77, 5, 77, 506, 10, 77, 3, 77, 3, 77, 6, 77, 510, 10, 77, 13, 77, 14, 77, 511, 3, 77, 5, 77, 515, 10, 77, 3, 77, 6, 77, 518, 10, 77, 13, 77, 14, 77, 519, 3, 77, 3, 77, 5, 77, 524, 10, 77, 3, 78, 3, 78, 3, 78, 6, 78, 529, 10, 78, 13, 78, 14, 78, 530, 3, 78, 3, 78, 7, 78, 535, 10, 78, 12, 78, 14, 78, 538, 11, 78, 3, 78, 5, 78, 541, 10, 78, 3, 78, 3, 78, 3, 78, 3, 78, 6, 78, 547, 10, 78, 13, 78, 14, 78, 548, 3, 78, 5, 78, 552, 10, 78, 3, 78, 3, 78, 3, 78, 6, 78, 557, 10, 78, 13, 78, 14, 78, 558, 3, 78, 3, 78, 5, 78, 563, 10, 78, 3, 79, 3, 79, 5, 79, 567, 10, 79, 3, 79, 6, 79, 570, 10, 79, 13, 79, 14, 79, 571, 3, 80, 3, 80, 5, 80, 576, 10, 80, 3, 80, 6, 80, 579, 10, 80, 13, 80, 14, 80, 580, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 587, 10, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 593, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 606, 10, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 6, 84, 618, 10, 84, 13, 84, 14, 84, 619, 3, 84, 3, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 7, 88, 643, 10, 88, 12, 88, 14, 88, 646, 11, 88, 3, 88, 3, 88, 7, 88, 650, 10, 88, 12, 88, 14, 88, 653, 11, 88, 3, 88, 3, 88, 7, 88, 657, 10, 88, 12, 88, 14, 88, 660, 11, 88, 3, 88, 3, 88, 7, 88, 664, 10, 88, 12, 88, 14, 88, 667, 11, 88, 5, 88, 669, 10, 88, 3, 88, 3, 88, 3, 88, 5, 88, 674, 10, 88, 3, 88, 3, 88, 3, 89, 6, 89, 679, 10, 89, 13, 89, 14, 89, 680, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 7, 90, 688, 10, 90, 12, 90, 14, 90, 691, 11, 90, 3, 90, 3, 90, 3, 474, 2, 91, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 2, 149, 75, 151, 76, 153, 77, 155, 78, 157, 2, 159, 2, 161, 2, 163, 2, 165, 2, 167, 2, 169, 2, 171, 2, 173, 79, 175, 80, 177, 81, 179, 82, 3, 2, 19, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 4, 2, 90, 90, 122, 122, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 82, 82, 114, 114, 12, 2, 36, 36, 41, 41, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 124, 124, 3, 2, 50, 52, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 6, 2, 12, 12, 15, 15, 63, 63, 93, 93, 4, 2, 12, 12, 15, 15, 5, 2, 12, 12, 15, 15, 93, 93, 4, 3, 12, 12, 15, 15, 5, 2, 11, 12, 14, 15, 34, 34, 2, 731, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 3, 181, 3, 2, 2, 2, 5, 183, 3, 2, 2, 2, 7, 185, 3, 2, 2, 2, 9, 191, 3, 2, 2, 2, 11, 196, 3, 2, 2, 2, 13, 199, 3, 2, 2, 2, 15, 203, 3, 2, 2, 2, 17, 209, 3, 2, 2, 2, 19, 216, 3, 2, 2, 2, 21, 222, 3, 2, 2, 2, 23, 225, 3, 2, 2, 2, 25, 230, 3, 2, 2, 2, 27, 237, 3, 2, 2, 2, 29, 242, 3, 2, 2, 2, 31, 246, 3, 2, 2, 2, 33, 248, 3, 2, 2, 2, 35, 251, 3, 2, 2, 2, 37, 260, 3, 2, 2, 2, 39, 266, 3, 2, 2, 2, 41, 274, 3, 2, 2, 2, 43, 280, 3, 2, 2, 2, 45, 285, 3, 2, 2, 2, 47, 292, 3, 2, 2, 2, 49, 295, 3, 2, 2, 2, 51, 297, 3, 2, 2, 2, 53, 299, 3, 2, 2, 2, 55, 303, 3, 2, 2, 2, 57, 309, 3, 2, 2, 2, 59, 314, 3, 2, 2, 2, 61, 318, 3, 2, 2, 2, 63, 320, 3, 2, 2, 2, 65, 322, 3, 2, 2, 2, 67, 324, 3, 2, 2, 2, 69, 326, 3, 2, 2, 2, 71, 328, 3, 2, 2, 2, 73, 330, 3, 2, 2, 2, 75, 333, 3, 2, 2, 2, 77, 337, 3, 2, 2, 2, 79, 339, 3, 2, 2, 2, 81, 341, 3, 2, 2, 2, 83, 344, 3, 2, 2, 2, 85, 347, 3, 2, 2, 2, 87, 350, 3, 2, 2, 2, 89, 353, 3, 2, 2, 2, 91, 356, 3, 2, 2, 2, 93, 358, 3, 2, 2, 2, 95, 360, 3, 2, 2, 2, 97, 362, 3, 2, 2, 2, 99, 364, 3, 2, 2, 2, 101, 366, 3, 2, 2, 2, 103, 369, 3, 2, 2, 2, 105, 371, 3, 2, 2, 2, 107, 373, 3, 2, 2, 2, 109, 375, 3, 2, 2, 2, 111, 378, 3, 2, 2, 2, 113, 381, 3, 2, 2, 2, 115, 385, 3, 2, 2, 2, 117, 387, 3, 2, 2, 2, 119, 389, 3, 2, 2, 2, 121, 393, 3, 2, 2, 2, 123, 400, 3, 2, 2, 2, 125, 404, 3, 2, 2, 2, 127, 408, 3, 2, 2, 2, 129, 420, 3, 2, 2, 2, 131, 423, 3, 2, 2, 2, 133, 426, 3, 2, 2, 2, 135, 429, 3, 2, 2, 2, 137, 432, 3, 2, 2, 2, 139, 435, 3, 2, 2, 2, 141, 442, 3, 2, 2, 2, 143, 452, 3, 2, 2, 2, 145, 462, 3, 2, 2, 2, 147, 478, 3, 2, 2, 2, 149, 481, 3, 2, 2, 2, 151, 485, 3, 2, 2, 2, 153, 523, 3, 2, 2, 2, 155, 562, 3, 2, 2, 2, 157, 564, 3, 2, 2, 2, 159, 573, 3, 2, 2, 2, 161, 592, 3, 2, 2, 2, 163, 605, 3, 2, 2, 2, 165, 607, 3, 2, 2, 2, 167, 612, 3, 2, 2, 2, 169, 623, 3, 2, 2, 2, 171, 625, 3, 2, 2, 2, 173, 627, 3, 2, 2, 2, 175, 636, 3, 2, 2, 2, 177, 678, 3, 2, 2, 2, 179, 684, 3, 2, 2, 2, 181, 182, 7, 61, 2, 2, 182, 4, 3, 2, 2, 2, 183, 184, 7, 63, 2, 2, 184, 6, 3, 2, 2, 2, 185, 186, 7, 100, 2, 2, 186, 187, 7, 116, 2, 2, 187, 188, 7, 103, 2, 2, 188, 189, 7, 99, 2, 2, 189, 190, 7, 109, 2, 2, 190, 8, 3, 2, 2, 2, 191, 192, 7, 105, 2, 2, 192, 193, 7, 113, 2, 2, 193, 194, 7, 118, 2, 2, 194, 195, 7, 113, 2, 2, 195, 10, 3, 2, 2, 2, 196, 197, 7, 102, 2, 2, 197, 198, 7, 113, 2, 2, 198, 12, 3, 2, 2, 2, 199, 200, 7, 103, 2, 2, 200, 201, 7, 112, 2, 2, 201, 202, 7, 102, 2, 2, 202, 14, 3, 2, 2, 2, 203, 204, 7, 121, 2, 2, 204, 205, 7, 106, 2, 2, 205, 206, 7, 107, 2, 2, 206, 207, 7, 110, 2, 2, 207, 208, 7, 103, 2, 2, 208, 16, 3, 2, 2, 2, 209, 210, 7, 116, 2, 2, 210, 211, 7, 103, 2, 2, 211, 212, 7, 114, 2, 2, 212, 213, 7, 103, 2, 2, 213, 214, 7, 99, 2, 2, 214, 215, 7, 118, 2, 2, 215, 18, 3, 2, 2, 2, 216, 217, 7, 119, 2, 2, 217, 218, 7, 112, 2, 2, 218, 219, 7, 118, 2, 2, 219, 220, 7, 107, 2, 2, 220, 221, 7, 110, 2, 2, 221, 20, 3, 2, 2, 2, 222, 223, 7, 107, 2, 2, 223, 224, 7, 104, 2, 2, 224, 22, 3, 2, 2, 2, 225, 226, 7, 118, 2, 2, 226, 227, 7, 106, 2, 2, 227, 228, 7, 103, 2, 2, 228, 229, 7, 112, 2, 2, 229, 24, 3, 2, 2, 2, 230, 231, 7, 103, 2, 2, 231, 232, 7, 110, 2, 2, 232, 233, 7, 117, 2, 2, 233, 234, 7, 103, 2, 2, 234, 235, 7, 107, 2, 2, 235, 236, 7, 104, 2, 2, 236, 26, 3, 2, 2, 2, 237, 238, 7, 103, 2, 2, 238, 239, 7, 110, 2, 2, 239, 240, 7, 117, 2, 2, 240, 241, 7, 103, 2, 2, 241, 28, 3, 2, 2, 2, 242, 243, 7, 104, 2, 2, 243, 244, 7, 113, 2, 2, 244, 245, 7, 116, 2, 2, 245, 30, 3, 2, 2, 2, 246, 247, 7, 46, 2, 2, 247, 32, 3, 2, 2, 2, 248, 249, 7, 107, 2, 2, 249, 250, 7, 112, 2, 2, 250, 34, 3, 2, 2, 2, 251, 252, 7, 104, 2, 2, 252, 253, 7, 119, 2, 2, 253, 254, 7, 112, 2, 2, 254, 255, 7, 101, 2, 2, 255, 256, 7, 118, 2, 2, 256, 257, 7, 107, 2, 2, 257, 258, 7, 113, 2, 2, 258, 259, 7, 112, 2, 2, 259, 36, 3, 2, 2, 2, 260, 261, 7, 101, 2, 2, 261, 262, 7, 110, 2, 2, 262, 263, 7, 99, 2, 2, 263, 264, 7, 117, 2, 2, 264, 265, 7, 117, 2, 2, 265, 38, 3, 2, 2, 2, 266, 267, 7, 103, 2, 2, 267, 268, 7, 122, 2, 2, 268, 269, 7, 118, 2, 2, 269, 270, 7, 103, 2, 2, 270, 271, 7, 112, 2, 2, 271, 272, 7, 102, 2, 2, 272, 273, 7, 117, 2, 2, 273, 40, 3, 2, 2, 2, 274, 275, 7, 110, 2, 2, 275, 276, 7, 113, 2, 2, 276, 277, 7, 101, 2, 2, 277, 278, 7, 99, 2, 2, 278, 279, 7, 110, 2, 2, 279, 42, 3, 2, 2, 2, 280, 281, 7, 117, 2, 2, 281, 282, 7, 99, 2, 2, 282, 283, 7, 104, 2, 2, 283, 284, 7, 103, 2, 2, 284, 44, 3, 2, 2, 2, 285, 286, 7, 116, 2, 2, 286, 287, 7, 103, 2, 2, 287, 288, 7, 118, 2, 2, 288, 289, 7, 119, 2, 2, 289, 290, 7, 116, 2, 2, 290, 291, 7, 112, 2, 2, 291, 46, 3, 2, 2, 2, 292, 293, 7, 60, 2, 2, 293, 294, 7, 60, 2, 2, 294, 48, 3, 2, 2, 2, 295, 296, 7, 48, 2, 2, 296, 50, 3, 2, 2, 2, 297, 298, 7, 60, 2, 2, 298, 52, 3, 2, 2, 2, 299, 300, 7, 112, 2, 2, 300, 301, 7, 107, 2, 2, 301, 302, 7, 110, 2, 2, 302, 54, 3, 2, 2, 2, 303, 304, 7, 104, 2, 2, 304, 305, 7, 99, 2, 2, 305, 306, 7, 110, 2, 2, 306, 307, 7, 117, 2, 2, 307, 308, 7, 103, 2, 2, 308, 56, 3, 2, 2, 2, 309, 310, 7, 118, 2, 2, 310, 311, 7, 116, 2, 2, 311, 312, 7, 119, 2, 2, 312, 313, 7, 103, 2, 2, 313, 58, 3, 2, 2, 2, 314, 315, 7, 48, 2, 2, 315, 316, 7, 48, 2, 2, 316, 317, 7, 48, 2, 2, 317, 60, 3, 2, 2, 2, 318, 319, 7, 42, 2, 2, 319, 62, 3, 2, 2, 2, 320, 321, 7, 43, 2, 2, 321, 64, 3, 2, 2, 2, 322, 323, 7, 93, 2, 2, 323, 66, 3, 2, 2, 2, 324, 325, 7, 95, 2, 2, 325, 68, 3, 2, 2, 2, 326, 327, 7, 125, 2, 2, 327, 70, 3, 2, 2, 2, 328, 329, 7, 127, 2, 2, 329, 72, 3, 2, 2, 2, 330, 331, 7, 113, 2, 2, 331, 332, 7, 116, 2, 2, 332, 74, 3, 2, 2, 2, 333, 334, 7, 99, 2, 2, 334, 335, 7, 112, 2, 2, 335, 336, 7, 102, 2, 2, 336, 76, 3, 2, 2, 2, 337, 338, 7, 62, 2, 2, 338, 78, 3, 2, 2, 2, 339, 340, 7, 64, 2, 2, 340, 80, 3, 2, 2, 2, 341, 342, 7, 62, 2, 2, 342, 343, 7, 63, 2, 2, 343, 82, 3, 2, 2, 2, 344, 345, 7, 64, 2, 2, 345, 346, 7, 63, 2, 2, 346, 84, 3, 2, 2, 2, 347, 348, 7, 128, 2, 2, 348, 349, 7, 63, 2, 2, 349, 86, 3, 2, 2, 2, 350, 351, 7, 63, 2, 2, 351, 352, 7, 63, 2, 2, 352, 88, 3, 2, 2, 2, 353, 354, 7, 48, 2, 2, 354, 355, 7, 48, 2, 2, 355, 90, 3, 2, 2, 2, 356, 357, 7, 45, 2, 2, 357, 92, 3, 2, 2, 2, 358, 359, 7, 47, 2, 2, 359, 94, 3, 2, 2, 2, 360, 361, 7, 44, 2, 2, 361, 96, 3, 2, 2, 2, 362, 363, 7, 49, 2, 2, 363, 98, 3, 2, 2, 2, 364, 365, 7, 39, 2, 2, 365, 100, 3, 2, 2, 2, 366, 367, 7, 49, 2, 2, 367, 368, 7, 49, 2, 2, 368, 102, 3, 2, 2, 2, 369, 370, 7, 40, 2, 2, 370, 104, 3, 2, 2, 2, 371, 372, 7, 126, 2, 2, 372, 106, 3, 2, 2, 2, 373, 374, 7, 128, 2, 2, 374, 108, 3, 2, 2, 2, 375, 376, 7, 62, 2, 2, 376, 377, 7, 62, 2, 2, 377, 110, 3, 2, 2, 2, 378, 379, 7, 64, 2, 2, 379, 380, 7, 64, 2, 2, 380, 112, 3, 2, 2, 2, 381, 382, 7, 112, 2, 2, 382, 383, 7, 113, 2, 2, 383, 384, 7, 118, 2, 2, 384, 114, 3, 2, 2, 2, 385, 386, 7, 37, 2, 2, 386, 116, 3, 2, 2, 2, 387, 388, 7, 96, 2, 2, 388, 118, 3, 2, 2, 2, 389, 390, 7, 112, 2, 2, 390, 391, 7, 103, 2, 2, 391, 392, 7, 121, 2, 2, 392, 120, 3, 2, 2, 2, 393, 394, 7, 117, 2, 2, 394, 395, 7, 118, 2, 2, 395, 396, 7, 99, 2, 2, 396, 397, 7, 118, 2, 2, 397, 398, 7, 107, 2, 2, 398, 399, 7, 101, 2, 2, 399, 122, 3, 2, 2, 2, 400, 401, 7, 105, 2, 2, 401, 402, 7, 103, 2, 2, 402, 403, 7, 118, 2, 2, 403, 124, 3, 2, 2, 2, 404, 405, 7, 117, 2, 2, 405, 406, 7, 103, 2, 2, 406, 407, 7, 118, 2, 2, 407, 126, 3, 2, 2, 2, 408, 409, 7, 101, 2, 2, 409, 410, 7, 113, 2, 2, 410, 411, 7, 112, 2, 2, 411, 412, 7, 117, 2, 2, 412, 413, 7, 118, 2, 2, 413, 414, 7, 116, 2, 2, 414, 415, 7, 119, 2, 2, 415, 416, 7, 101, 2, 2, 416, 417, 7, 118, 2, 2, 417, 418, 7, 113, 2, 2, 418, 419, 7, 116, 2, 2, 419, 128, 3, 2, 2, 2, 420, 421, 7, 45, 2, 2, 421, 422, 7, 45, 2, 2, 422, 130, 3, 2, 2, 2, 423, 424, 7, 45, 2, 2, 424, 425, 7, 63, 2, 2, 425, 132, 3, 2, 2, 2, 426, 427, 7, 44, 2, 2, 427, 428, 7, 63, 2, 2, 428, 134, 3, 2, 2, 2, 429, 430, 7, 49, 2, 2, 430, 431, 7, 63, 2, 2, 431, 136, 3, 2, 2, 2, 432, 433, 7, 47, 2, 2, 433, 434, 7, 63, 2, 2, 434, 138, 3, 2, 2, 2, 435, 439, 9, 2, 2, 2, 436, 438, 9, 3, 2, 2, 437, 436, 3, 2, 2, 2, 438, 441, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 140, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 442, 447, 7, 36, 2, 2, 443, 446, 5, 161, 81, 2, 444, 446, 10, 4, 2, 2, 445, 443, 3, 2, 2, 2, 445, 444, 3, 2, 2, 2, 446, 449, 3, 2, 2, 2, 447, 445, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 450, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 450, 451, 7, 36, 2, 2, 451, 142, 3, 2, 2, 2, 452, 457, 7, 41, 2, 2, 453, 456, 5, 161, 81, 2, 454, 456, 10, 5, 2, 2, 455, 453, 3, 2, 2, 2, 455, 454, 3, 2, 2, 2, 456, 459, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 460, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 460, 461, 7, 41, 2, 2, 461, 144, 3, 2, 2, 2, 462, 463, 7, 93, 2, 2, 463, 464, 5, 147, 74, 2, 464, 465, 7, 95, 2, 2, 465, 146, 3, 2, 2, 2, 466, 467, 7, 63, 2, 2, 467, 468, 5, 147, 74, 2, 468, 469, 7, 63, 2, 2, 469, 479, 3, 2, 2, 2, 470, 474, 7, 93, 2, 2, 471, 473, 11, 2, 2, 2, 472, 471, 3, 2, 2, 2, 473, 476, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 475, 477, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 477, 479, 7, 95, 2, 2, 478, 466, 3, 2, 2, 2, 478, 470, 3, 2, 2, 2, 479, 148, 3, 2, 2, 2, 480, 482, 5, 169, 85, 2, 481, 480, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 150, 3, 2, 2, 2, 485, 486, 7, 50, 2, 2, 486, 488, 9, 6, 2, 2, 487, 489, 5, 171, 86, 2, 488, 487, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 488, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 152, 3, 2, 2, 2, 492, 494, 5, 169, 85, 2, 493, 492, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 501, 7, 48, 2, 2, 498, 500, 5, 169, 85, 2, 499, 498, 3, 2, 2, 2, 500, 503, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 505, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 504, 506, 5, 157, 79, 2, 505, 504, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 524, 3, 2, 2, 2, 507, 509, 7, 48, 2, 2, 508, 510, 5, 169, 85, 2, 509, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 514, 3, 2, 2, 2, 513, 515, 5, 157, 79, 2, 514, 513, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 524, 3, 2, 2, 2, 516, 518, 5, 169, 85, 2, 517, 516, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 517, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 522, 5, 157, 79, 2, 522, 524, 3, 2, 2, 2, 523, 493, 3, 2, 2, 2, 523, 507, 3, 2, 2, 2, 523, 517, 3, 2, 2, 2, 524, 154, 3, 2, 2, 2, 525, 526, 7, 50, 2, 2, 526, 528, 9, 6, 2, 2, 527, 529, 5, 171, 86, 2, 528, 527, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 528, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 536, 7, 48, 2, 2, 533, 535, 5, 171, 86, 2, 534, 533, 3, 2, 2, 2, 535, 538, 3, 2, 2, 2, 536, 534, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 540, 3, 2, 2, 2, 538, 536, 3, 2, 2, 2, 539, 541, 5, 159, 80, 2, 540, 539, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 563, 3, 2, 2, 2, 542, 543, 7, 50, 2, 2, 543, 544, 9, 6, 2, 2, 544, 546, 7, 48, 2, 2, 545, 547, 5, 171, 86, 2, 546, 545, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 546, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 551, 3, 2, 2, 2, 550, 552, 5, 159, 80, 2, 551, 550, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 563, 3, 2, 2, 2, 553, 554, 7, 50, 2, 2, 554, 556, 9, 6, 2, 2, 555, 557, 5, 171, 86, 2, 556, 555, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 556, 3, 2, 2, 2, 558, 559, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 561, 5, 159, 80, 2, 561, 563, 3, 2, 2, 2, 562, 525, 3, 2, 2, 2, 562, 542, 3, 2, 2, 2, 562, 553, 3, 2, 2, 2, 563, 156, 3, 2, 2, 2, 564, 566, 9, 7, 2, 2, 565, 567, 9, 8, 2, 2, 566, 565, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 569, 3, 2, 2, 2, 568, 570, 5, 169, 85, 2, 569, 568, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 569, 3, 2, 2, 2, 571, 572, 3, 2, 2, 2, 572, 158, 3, 2, 2, 2, 573, 575, 9, 9, 2, 2, 574, 576, 9, 8, 2, 2, 575, 574, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 578, 3, 2, 2, 2, 577, 579, 5, 169, 85, 2, 578, 577, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 160, 3, 2, 2, 2, 582, 583, 7, 94, 2, 2, 583, 593, 9, 10, 2, 2, 584, 586, 7, 94, 2, 2, 585, 587, 7, 15, 2, 2, 586, 585, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 593, 7, 12, 2, 2, 589, 593, 5, 163, 82, 2, 590, 593, 5, 165, 83, 2, 591, 593, 5, 167, 84, 2, 592, 582, 3, 2, 2, 2, 592, 584, 3, 2, 2, 2, 592, 589, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 592, 591, 3, 2, 2, 2, 593, 162, 3, 2, 2, 2, 594, 595, 7, 94, 2, 2, 595, 606, 5, 169, 85, 2, 596, 597, 7, 94, 2, 2, 597, 598, 5, 169, 85, 2, 598, 599, 5, 169, 85, 2, 599, 606, 3, 2, 2, 2, 600, 601, 7, 94, 2, 2, 601, 602, 9, 11, 2, 2, 602, 603, 5, 169, 85, 2, 603, 604, 5, 169, 85, 2, 604, 606, 3, 2, 2, 2, 605, 594, 3, 2, 2, 2, 605, 596, 3, 2, 2, 2, 605, 600, 3, 2, 2, 2, 606, 164, 3, 2, 2, 2, 607, 608, 7, 94, 2, 2, 608, 609, 7, 122, 2, 2, 609, 610, 5, 171, 86, 2, 610, 611, 5, 171, 86, 2, 611, 166, 3, 2, 2, 2, 612, 613, 7, 94, 2, 2, 613, 614, 7, 119, 2, 2, 614, 615, 7, 125, 2, 2, 615, 617, 3, 2, 2, 2, 616, 618, 5, 171, 86, 2, 617, 616, 3, 2, 2, 2, 618, 619, 3, 2, 2, 2, 619, 617, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 622, 7, 127, 2, 2, 622, 168, 3, 2, 2, 2, 623, 624, 9, 12, 2, 2, 624, 170, 3, 2, 2, 2, 625, 626, 9, 13, 2, 2, 626, 172, 3, 2, 2, 2, 627, 628, 7, 47, 2, 2, 628, 629, 7, 47, 2, 2, 629, 630, 7, 93, 2, 2, 630, 631, 3, 2, 2, 2, 631, 632, 5, 147, 74, 2, 632, 633, 7, 95, 2, 2, 633, 634, 3, 2, 2, 2, 634, 635, 8, 87, 2, 2, 635, 174, 3, 2, 2, 2, 636, 637, 7, 47, 2, 2, 637, 638, 7, 47, 2, 2, 638, 668, 3, 2, 2, 2, 639, 669, 3, 2, 2, 2, 640, 644, 7, 93, 2, 2, 641, 643, 7, 63, 2, 2, 642, 641, 3, 2, 2, 2, 643, 646, 3, 2, 2, 2, 644, 642, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 669, 3, 2, 2, 2, 646, 644, 3, 2, 2, 2, 647, 651, 7, 93, 2, 2, 648, 650, 7, 63, 2, 2, 649, 648, 3, 2, 2, 2, 650, 653, 3, 2, 2, 2, 651, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 654, 3, 2, 2, 2, 653, 651, 3, 2, 2, 2, 654, 658, 10, 14, 2, 2, 655, 657, 10, 15, 2, 2, 656, 655, 3, 2, 2, 2, 657, 660, 3, 2, 2, 2, 658, 656, 3, 2, 2, 2, 658, 659, 3, 2, 2, 2, 659, 669, 3, 2, 2, 2, 660, 658, 3, 2, 2, 2, 661, 665, 10, 16, 2, 2, 662, 664, 10, 15, 2, 2, 663, 662, 3, 2, 2, 2, 664, 667, 3, 2, 2, 2, 665, 663, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 669, 3, 2, 2, 2, 667, 665, 3, 2, 2, 2, 668, 639, 3, 2, 2, 2, 668, 640, 3, 2, 2, 2, 668, 647, 3, 2, 2, 2, 668, 661, 3, 2, 2, 2, 669, 673, 3, 2, 2, 2, 670, 671, 7, 15, 2, 2, 671, 674, 7, 12, 2, 2, 672, 674, 9, 17, 2, 2, 673, 670, 3, 2, 2, 2, 673, 672, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 676, 8, 88, 2, 2, 676, 176, 3, 2, 2, 2, 677, 679, 9, 18, 2, 2, 678, 677, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 682, 3, 2, 2, 2, 682, 683, 8, 89, 3, 2, 683, 178, 3, 2, 2, 2, 684, 685, 7, 37, 2, 2, 685, 689, 7, 35, 2, 2, 686, 688, 10, 15, 2, 2, 687, 686, 3, 2, 2, 2, 688, 691, 3, 2, 2, 2, 689, 687, 3, 2, 2, 2, 689, 690, 3, 2, 2, 2, 690, 692, 3, 2, 2, 2, 691, 689, 3, 2, 2, 2, 692, 693, 8, 90, 2, 2, 693, 180, 3, 2, 2, 2, 42, 2, 439, 445, 447, 455, 457, 474, 478, 483, 490, 495, 501, 505, 511, 514, 519, 523, 530, 536, 540, 548, 551, 558, 562, 566, 571, 575, 580, 586, 592, 605, 619, 644, 651, 658, 665, 668, 673, 680, 689, 4, 2, 3, 2, 8, 2, 2]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 81, 688, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 7, 69, 432, 10, 69, 12, 69, 14, 69, 435, 11, 69, 3, 70, 3, 70, 3, 70, 7, 70, 440, 10, 70, 12, 70, 14, 70, 443, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 7, 71, 450, 10, 71, 12, 71, 14, 71, 453, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 467, 10, 73, 12, 73, 14, 73, 470, 11, 73, 3, 73, 5, 73, 473, 10, 73, 3, 74, 6, 74, 476, 10, 74, 13, 74, 14, 74, 477, 3, 75, 3, 75, 3, 75, 6, 75, 483, 10, 75, 13, 75, 14, 75, 484, 3, 76, 6, 76, 488, 10, 76, 13, 76, 14, 76, 489, 3, 76, 3, 76, 7, 76, 494, 10, 76, 12, 76, 14, 76, 497, 11, 76, 3, 76, 5, 76, 500, 10, 76, 3, 76, 3, 76, 6, 76, 504, 10, 76, 13, 76, 14, 76, 505, 3, 76, 5, 76, 509, 10, 76, 3, 76, 6, 76, 512, 10, 76, 13, 76, 14, 76, 513, 3, 76, 3, 76, 5, 76, 518, 10, 76, 3, 77, 3, 77, 3, 77, 6, 77, 523, 10, 77, 13, 77, 14, 77, 524, 3, 77, 3, 77, 7, 77, 529, 10, 77, 12, 77, 14, 77, 532, 11, 77, 3, 77, 5, 77, 535, 10, 77, 3, 77, 3, 77, 3, 77, 3, 77, 6, 77, 541, 10, 77, 13, 77, 14, 77, 542, 3, 77, 5, 77, 546, 10, 77, 3, 77, 3, 77, 3, 77, 6, 77, 551, 10, 77, 13, 77, 14, 77, 552, 3, 77, 3, 77, 5, 77, 557, 10, 77, 3, 78, 3, 78, 5, 78, 561, 10, 78, 3, 78, 6, 78, 564, 10, 78, 13, 78, 14, 78, 565, 3, 79, 3, 79, 5, 79, 570, 10, 79, 3, 79, 6, 79, 573, 10, 79, 13, 79, 14, 79, 574, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 581, 10, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 587, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 600, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 6, 83, 612, 10, 83, 13, 83, 14, 83, 613, 3, 83, 3, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 637, 10, 87, 12, 87, 14, 87, 640, 11, 87, 3, 87, 3, 87, 7, 87, 644, 10, 87, 12, 87, 14, 87, 647, 11, 87, 3, 87, 3, 87, 7, 87, 651, 10, 87, 12, 87, 14, 87, 654, 11, 87, 3, 87, 3, 87, 7, 87, 658, 10, 87, 12, 87, 14, 87, 661, 11, 87, 5, 87, 663, 10, 87, 3, 87, 3, 87, 3, 87, 5, 87, 668, 10, 87, 3, 87, 3, 87, 3, 88, 6, 88, 673, 10, 88, 13, 88, 14, 88, 674, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 7, 89, 682, 10, 89, 12, 89, 14, 89, 685, 11, 89, 3, 89, 3, 89, 3, 468, 2, 90, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 2, 147, 74, 149, 75, 151, 76, 153, 77, 155, 2, 157, 2, 159, 2, 161, 2, 163, 2, 165, 2, 167, 2, 169, 2, 171, 78, 173, 79, 175, 80, 177, 81, 3, 2, 19, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 4, 2, 90, 90, 122, 122, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 82, 82, 114, 114, 12, 2, 36, 36, 41, 41, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 124, 124, 3, 2, 50, 52, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 6, 2, 12, 12, 15, 15, 63, 63, 93, 93, 4, 2, 12, 12, 15, 15, 5, 2, 12, 12, 15, 15, 93, 93, 4, 3, 12, 12, 15, 15, 5, 2, 11, 12, 14, 15, 34, 34, 2, 725, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 3, 179, 3, 2, 2, 2, 5, 181, 3, 2, 2, 2, 7, 183, 3, 2, 2, 2, 9, 189, 3, 2, 2, 2, 11, 194, 3, 2, 2, 2, 13, 197, 3, 2, 2, 2, 15, 201, 3, 2, 2, 2, 17, 207, 3, 2, 2, 2, 19, 214, 3, 2, 2, 2, 21, 220, 3, 2, 2, 2, 23, 223, 3, 2, 2, 2, 25, 228, 3, 2, 2, 2, 27, 235, 3, 2, 2, 2, 29, 240, 3, 2, 2, 2, 31, 244, 3, 2, 2, 2, 33, 246, 3, 2, 2, 2, 35, 249, 3, 2, 2, 2, 37, 258, 3, 2, 2, 2, 39, 264, 3, 2, 2, 2, 41, 272, 3, 2, 2, 2, 43, 278, 3, 2, 2, 2, 45, 283, 3, 2, 2, 2, 47, 290, 3, 2, 2, 2, 49, 293, 3, 2, 2, 2, 51, 295, 3, 2, 2, 2, 53, 297, 3, 2, 2, 2, 55, 301, 3, 2, 2, 2, 57, 307, 3, 2, 2, 2, 59, 312, 3, 2, 2, 2, 61, 316, 3, 2, 2, 2, 63, 318, 3, 2, 2, 2, 65, 320, 3, 2, 2, 2, 67, 322, 3, 2, 2, 2, 69, 324, 3, 2, 2, 2, 71, 326, 3, 2, 2, 2, 73, 328, 3, 2, 2, 2, 75, 331, 3, 2, 2, 2, 77, 335, 3, 2, 2, 2, 79, 337, 3, 2, 2, 2, 81, 339, 3, 2, 2, 2, 83, 342, 3, 2, 2, 2, 85, 345, 3, 2, 2, 2, 87, 348, 3, 2, 2, 2, 89, 351, 3, 2, 2, 2, 91, 354, 3, 2, 2, 2, 93, 356, 3, 2, 2, 2, 95, 358, 3, 2, 2, 2, 97, 360, 3, 2, 2, 2, 99, 362, 3, 2, 2, 2, 101, 364, 3, 2, 2, 2, 103, 367, 3, 2, 2, 2, 105, 369, 3, 2, 2, 2, 107, 371, 3, 2, 2, 2, 109, 373, 3, 2, 2, 2, 111, 376, 3, 2, 2, 2, 113, 379, 3, 2, 2, 2, 115, 383, 3, 2, 2, 2, 117, 385, 3, 2, 2, 2, 119, 387, 3, 2, 2, 2, 121, 394, 3, 2, 2, 2, 123, 398, 3, 2, 2, 2, 125, 402, 3, 2, 2, 2, 127, 414, 3, 2, 2, 2, 129, 417, 3, 2, 2, 2, 131, 420, 3, 2, 2, 2, 133, 423, 3, 2, 2, 2, 135, 426, 3, 2, 2, 2, 137, 429, 3, 2, 2, 2, 139, 436, 3, 2, 2, 2, 141, 446, 3, 2, 2, 2, 143, 456, 3, 2, 2, 2, 145, 472, 3, 2, 2, 2, 147, 475, 3, 2, 2, 2, 149, 479, 3, 2, 2, 2, 151, 517, 3, 2, 2, 2, 153, 556, 3, 2, 2, 2, 155, 558, 3, 2, 2, 2, 157, 567, 3, 2, 2, 2, 159, 586, 3, 2, 2, 2, 161, 599, 3, 2, 2, 2, 163, 601, 3, 2, 2, 2, 165, 606, 3, 2, 2, 2, 167, 617, 3, 2, 2, 2, 169, 619, 3, 2, 2, 2, 171, 621, 3, 2, 2, 2, 173, 630, 3, 2, 2, 2, 175, 672, 3, 2, 2, 2, 177, 678, 3, 2, 2, 2, 179, 180, 7, 61, 2, 2, 180, 4, 3, 2, 2, 2, 181, 182, 7, 63, 2, 2, 182, 6, 3, 2, 2, 2, 183, 184, 7, 100, 2, 2, 184, 185, 7, 116, 2, 2, 185, 186, 7, 103, 2, 2, 186, 187, 7, 99, 2, 2, 187, 188, 7, 109, 2, 2, 188, 8, 3, 2, 2, 2, 189, 190, 7, 105, 2, 2, 190, 191, 7, 113, 2, 2, 191, 192, 7, 118, 2, 2, 192, 193, 7, 113, 2, 2, 193, 10, 3, 2, 2, 2, 194, 195, 7, 102, 2, 2, 195, 196, 7, 113, 2, 2, 196, 12, 3, 2, 2, 2, 197, 198, 7, 103, 2, 2, 198, 199, 7, 112, 2, 2, 199, 200, 7, 102, 2, 2, 200, 14, 3, 2, 2, 2, 201, 202, 7, 121, 2, 2, 202, 203, 7, 106, 2, 2, 203, 204, 7, 107, 2, 2, 204, 205, 7, 110, 2, 2, 205, 206, 7, 103, 2, 2, 206, 16, 3, 2, 2, 2, 207, 208, 7, 116, 2, 2, 208, 209, 7, 103, 2, 2, 209, 210, 7, 114, 2, 2, 210, 211, 7, 103, 2, 2, 211, 212, 7, 99, 2, 2, 212, 213, 7, 118, 2, 2, 213, 18, 3, 2, 2, 2, 214, 215, 7, 119, 2, 2, 215, 216, 7, 112, 2, 2, 216, 217, 7, 118, 2, 2, 217, 218, 7, 107, 2, 2, 218, 219, 7, 110, 2, 2, 219, 20, 3, 2, 2, 2, 220, 221, 7, 107, 2, 2, 221, 222, 7, 104, 2, 2, 222, 22, 3, 2, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 106, 2, 2, 225, 226, 7, 103, 2, 2, 226, 227, 7, 112, 2, 2, 227, 24, 3, 2, 2, 2, 228, 229, 7, 103, 2, 2, 229, 230, 7, 110, 2, 2, 230, 231, 7, 117, 2, 2, 231, 232, 7, 103, 2, 2, 232, 233, 7, 107, 2, 2, 233, 234, 7, 104, 2, 2, 234, 26, 3, 2, 2, 2, 235, 236, 7, 103, 2, 2, 236, 237, 7, 110, 2, 2, 237, 238, 7, 117, 2, 2, 238, 239, 7, 103, 2, 2, 239, 28, 3, 2, 2, 2, 240, 241, 7, 104, 2, 2, 241, 242, 7, 113, 2, 2, 242, 243, 7, 116, 2, 2, 243, 30, 3, 2, 2, 2, 244, 245, 7, 46, 2, 2, 245, 32, 3, 2, 2, 2, 246, 247, 7, 107, 2, 2, 247, 248, 7, 112, 2, 2, 248, 34, 3, 2, 2, 2, 249, 250, 7, 104, 2, 2, 250, 251, 7, 119, 2, 2, 251, 252, 7, 112, 2, 2, 252, 253, 7, 101, 2, 2, 253, 254, 7, 118, 2, 2, 254, 255, 7, 107, 2, 2, 255, 256, 7, 113, 2, 2, 256, 257, 7, 112, 2, 2, 257, 36, 3, 2, 2, 2, 258, 259, 7, 101, 2, 2, 259, 260, 7, 110, 2, 2, 260, 261, 7, 99, 2, 2, 261, 262, 7, 117, 2, 2, 262, 263, 7, 117, 2, 2, 263, 38, 3, 2, 2, 2, 264, 265, 7, 103, 2, 2, 265, 266, 7, 122, 2, 2, 266, 267, 7, 118, 2, 2, 267, 268, 7, 103, 2, 2, 268, 269, 7, 112, 2, 2, 269, 270, 7, 102, 2, 2, 270, 271, 7, 117, 2, 2, 271, 40, 3, 2, 2, 2, 272, 273, 7, 110, 2, 2, 273, 274, 7, 113, 2, 2, 274, 275, 7, 101, 2, 2, 275, 276, 7, 99, 2, 2, 276, 277, 7, 110, 2, 2, 277, 42, 3, 2, 2, 2, 278, 279, 7, 117, 2, 2, 279, 280, 7, 99, 2, 2, 280, 281, 7, 104, 2, 2, 281, 282, 7, 103, 2, 2, 282, 44, 3, 2, 2, 2, 283, 284, 7, 116, 2, 2, 284, 285, 7, 103, 2, 2, 285, 286, 7, 118, 2, 2, 286, 287, 7, 119, 2, 2, 287, 288, 7, 116, 2, 2, 288, 289, 7, 112, 2, 2, 289, 46, 3, 2, 2, 2, 290, 291, 7, 60, 2, 2, 291, 292, 7, 60, 2, 2, 292, 48, 3, 2, 2, 2, 293, 294, 7, 48, 2, 2, 294, 50, 3, 2, 2, 2, 295, 296, 7, 60, 2, 2, 296, 52, 3, 2, 2, 2, 297, 298, 7, 112, 2, 2, 298, 299, 7, 107, 2, 2, 299, 300, 7, 110, 2, 2, 300, 54, 3, 2, 2, 2, 301, 302, 7, 104, 2, 2, 302, 303, 7, 99, 2, 2, 303, 304, 7, 110, 2, 2, 304, 305, 7, 117, 2, 2, 305, 306, 7, 103, 2, 2, 306, 56, 3, 2, 2, 2, 307, 308, 7, 118, 2, 2, 308, 309, 7, 116, 2, 2, 309, 310, 7, 119, 2, 2, 310, 311, 7, 103, 2, 2, 311, 58, 3, 2, 2, 2, 312, 313, 7, 48, 2, 2, 313, 314, 7, 48, 2, 2, 314, 315, 7, 48, 2, 2, 315, 60, 3, 2, 2, 2, 316, 317, 7, 42, 2, 2, 317, 62, 3, 2, 2, 2, 318, 319, 7, 43, 2, 2, 319, 64, 3, 2, 2, 2, 320, 321, 7, 93, 2, 2, 321, 66, 3, 2, 2, 2, 322, 323, 7, 95, 2, 2, 323, 68, 3, 2, 2, 2, 324, 325, 7, 125, 2, 2, 325, 70, 3, 2, 2, 2, 326, 327, 7, 127, 2, 2, 327, 72, 3, 2, 2, 2, 328, 329, 7, 113, 2, 2, 329, 330, 7, 116, 2, 2, 330, 74, 3, 2, 2, 2, 331, 332, 7, 99, 2, 2, 332, 333, 7, 112, 2, 2, 333, 334, 7, 102, 2, 2, 334, 76, 3, 2, 2, 2, 335, 336, 7, 62, 2, 2, 336, 78, 3, 2, 2, 2, 337, 338, 7, 64, 2, 2, 338, 80, 3, 2, 2, 2, 339, 340, 7, 62, 2, 2, 340, 341, 7, 63, 2, 2, 341, 82, 3, 2, 2, 2, 342, 343, 7, 64, 2, 2, 343, 344, 7, 63, 2, 2, 344, 84, 3, 2, 2, 2, 345, 346, 7, 128, 2, 2, 346, 347, 7, 63, 2, 2, 347, 86, 3, 2, 2, 2, 348, 349, 7, 63, 2, 2, 349, 350, 7, 63, 2, 2, 350, 88, 3, 2, 2, 2, 351, 352, 7, 48, 2, 2, 352, 353, 7, 48, 2, 2, 353, 90, 3, 2, 2, 2, 354, 355, 7, 45, 2, 2, 355, 92, 3, 2, 2, 2, 356, 357, 7, 47, 2, 2, 357, 94, 3, 2, 2, 2, 358, 359, 7, 44, 2, 2, 359, 96, 3, 2, 2, 2, 360, 361, 7, 49, 2, 2, 361, 98, 3, 2, 2, 2, 362, 363, 7, 39, 2, 2, 363, 100, 3, 2, 2, 2, 364, 365, 7, 49, 2, 2, 365, 366, 7, 49, 2, 2, 366, 102, 3, 2, 2, 2, 367, 368, 7, 40, 2, 2, 368, 104, 3, 2, 2, 2, 369, 370, 7, 126, 2, 2, 370, 106, 3, 2, 2, 2, 371, 372, 7, 128, 2, 2, 372, 108, 3, 2, 2, 2, 373, 374, 7, 62, 2, 2, 374, 375, 7, 62, 2, 2, 375, 110, 3, 2, 2, 2, 376, 377, 7, 64, 2, 2, 377, 378, 7, 64, 2, 2, 378, 112, 3, 2, 2, 2, 379, 380, 7, 112, 2, 2, 380, 381, 7, 113, 2, 2, 381, 382, 7, 118, 2, 2, 382, 114, 3, 2, 2, 2, 383, 384, 7, 37, 2, 2, 384, 116, 3, 2, 2, 2, 385, 386, 7, 96, 2, 2, 386, 118, 3, 2, 2, 2, 387, 388, 7, 117, 2, 2, 388, 389, 7, 118, 2, 2, 389, 390, 7, 99, 2, 2, 390, 391, 7, 118, 2, 2, 391, 392, 7, 107, 2, 2, 392, 393, 7, 101, 2, 2, 393, 120, 3, 2, 2, 2, 394, 395, 7, 105, 2, 2, 395, 396, 7, 103, 2, 2, 396, 397, 7, 118, 2, 2, 397, 122, 3, 2, 2, 2, 398, 399, 7, 117, 2, 2, 399, 400, 7, 103, 2, 2, 400, 401, 7, 118, 2, 2, 401, 124, 3, 2, 2, 2, 402, 403, 7, 101, 2, 2, 403, 404, 7, 113, 2, 2, 404, 405, 7, 112, 2, 2, 405, 406, 7, 117, 2, 2, 406, 407, 7, 118, 2, 2, 407, 408, 7, 116, 2, 2, 408, 409, 7, 119, 2, 2, 409, 410, 7, 101, 2, 2, 410, 411, 7, 118, 2, 2, 411, 412, 7, 113, 2, 2, 412, 413, 7, 116, 2, 2, 413, 126, 3, 2, 2, 2, 414, 415, 7, 45, 2, 2, 415, 416, 7, 45, 2, 2, 416, 128, 3, 2, 2, 2, 417, 418, 7, 45, 2, 2, 418, 419, 7, 63, 2, 2, 419, 130, 3, 2, 2, 2, 420, 421, 7, 44, 2, 2, 421, 422, 7, 63, 2, 2, 422, 132, 3, 2, 2, 2, 423, 424, 7, 49, 2, 2, 424, 425, 7, 63, 2, 2, 425, 134, 3, 2, 2, 2, 426, 427, 7, 47, 2, 2, 427, 428, 7, 63, 2, 2, 428, 136, 3, 2, 2, 2, 429, 433, 9, 2, 2, 2, 430, 432, 9, 3, 2, 2, 431, 430, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 138, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 441, 7, 36, 2, 2, 437, 440, 5, 159, 80, 2, 438, 440, 10, 4, 2, 2, 439, 437, 3, 2, 2, 2, 439, 438, 3, 2, 2, 2, 440, 443, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 444, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 444, 445, 7, 36, 2, 2, 445, 140, 3, 2, 2, 2, 446, 451, 7, 41, 2, 2, 447, 450, 5, 159, 80, 2, 448, 450, 10, 5, 2, 2, 449, 447, 3, 2, 2, 2, 449, 448, 3, 2, 2, 2, 450, 453, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 454, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 454, 455, 7, 41, 2, 2, 455, 142, 3, 2, 2, 2, 456, 457, 7, 93, 2, 2, 457, 458, 5, 145, 73, 2, 458, 459, 7, 95, 2, 2, 459, 144, 3, 2, 2, 2, 460, 461, 7, 63, 2, 2, 461, 462, 5, 145, 73, 2, 462, 463, 7, 63, 2, 2, 463, 473, 3, 2, 2, 2, 464, 468, 7, 93, 2, 2, 465, 467, 11, 2, 2, 2, 466, 465, 3, 2, 2, 2, 467, 470, 3, 2, 2, 2, 468, 469, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 469, 471, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 471, 473, 7, 95, 2, 2, 472, 460, 3, 2, 2, 2, 472, 464, 3, 2, 2, 2, 473, 146, 3, 2, 2, 2, 474, 476, 5, 167, 84, 2, 475, 474, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 148, 3, 2, 2, 2, 479, 480, 7, 50, 2, 2, 480, 482, 9, 6, 2, 2, 481, 483, 5, 169, 85, 2, 482, 481, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 150, 3, 2, 2, 2, 486, 488, 5, 167, 84, 2, 487, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 495, 7, 48, 2, 2, 492, 494, 5, 167, 84, 2, 493, 492, 3, 2, 2, 2, 494, 497, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 499, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 498, 500, 5, 155, 78, 2, 499, 498, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 518, 3, 2, 2, 2, 501, 503, 7, 48, 2, 2, 502, 504, 5, 167, 84, 2, 503, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 503, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 508, 3, 2, 2, 2, 507, 509, 5, 155, 78, 2, 508, 507, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 518, 3, 2, 2, 2, 510, 512, 5, 167, 84, 2, 511, 510, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 5, 155, 78, 2, 516, 518, 3, 2, 2, 2, 517, 487, 3, 2, 2, 2, 517, 501, 3, 2, 2, 2, 517, 511, 3, 2, 2, 2, 518, 152, 3, 2, 2, 2, 519, 520, 7, 50, 2, 2, 520, 522, 9, 6, 2, 2, 521, 523, 5, 169, 85, 2, 522, 521, 3, 2, 2, 2, 523, 524, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 530, 7, 48, 2, 2, 527, 529, 5, 169, 85, 2, 528, 527, 3, 2, 2, 2, 529, 532, 3, 2, 2, 2, 530, 528, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 534, 3, 2, 2, 2, 532, 530, 3, 2, 2, 2, 533, 535, 5, 157, 79, 2, 534, 533, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 557, 3, 2, 2, 2, 536, 537, 7, 50, 2, 2, 537, 538, 9, 6, 2, 2, 538, 540, 7, 48, 2, 2, 539, 541, 5, 169, 85, 2, 540, 539, 3, 2, 2, 2, 541, 542, 3, 2, 2, 2, 542, 540, 3, 2, 2, 2, 542, 543, 3, 2, 2, 2, 543, 545, 3, 2, 2, 2, 544, 546, 5, 157, 79, 2, 545, 544, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 557, 3, 2, 2, 2, 547, 548, 7, 50, 2, 2, 548, 550, 9, 6, 2, 2, 549, 551, 5, 169, 85, 2, 550, 549, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 550, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 555, 5, 157, 79, 2, 555, 557, 3, 2, 2, 2, 556, 519, 3, 2, 2, 2, 556, 536, 3, 2, 2, 2, 556, 547, 3, 2, 2, 2, 557, 154, 3, 2, 2, 2, 558, 560, 9, 7, 2, 2, 559, 561, 9, 8, 2, 2, 560, 559, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 563, 3, 2, 2, 2, 562, 564, 5, 167, 84, 2, 563, 562, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 563, 3, 2, 2, 2, 565, 566, 3, 2, 2, 2, 566, 156, 3, 2, 2, 2, 567, 569, 9, 9, 2, 2, 568, 570, 9, 8, 2, 2, 569, 568, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 572, 3, 2, 2, 2, 571, 573, 5, 167, 84, 2, 572, 571, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 158, 3, 2, 2, 2, 576, 577, 7, 94, 2, 2, 577, 587, 9, 10, 2, 2, 578, 580, 7, 94, 2, 2, 579, 581, 7, 15, 2, 2, 580, 579, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 587, 7, 12, 2, 2, 583, 587, 5, 161, 81, 2, 584, 587, 5, 163, 82, 2, 585, 587, 5, 165, 83, 2, 586, 576, 3, 2, 2, 2, 586, 578, 3, 2, 2, 2, 586, 583, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 586, 585, 3, 2, 2, 2, 587, 160, 3, 2, 2, 2, 588, 589, 7, 94, 2, 2, 589, 600, 5, 167, 84, 2, 590, 591, 7, 94, 2, 2, 591, 592, 5, 167, 84, 2, 592, 593, 5, 167, 84, 2, 593, 600, 3, 2, 2, 2, 594, 595, 7, 94, 2, 2, 595, 596, 9, 11, 2, 2, 596, 597, 5, 167, 84, 2, 597, 598, 5, 167, 84, 2, 598, 600, 3, 2, 2, 2, 599, 588, 3, 2, 2, 2, 599, 590, 3, 2, 2, 2, 599, 594, 3, 2, 2, 2, 600, 162, 3, 2, 2, 2, 601, 602, 7, 94, 2, 2, 602, 603, 7, 122, 2, 2, 603, 604, 5, 169, 85, 2, 604, 605, 5, 169, 85, 2, 605, 164, 3, 2, 2, 2, 606, 607, 7, 94, 2, 2, 607, 608, 7, 119, 2, 2, 608, 609, 7, 125, 2, 2, 609, 611, 3, 2, 2, 2, 610, 612, 5, 169, 85, 2, 611, 610, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 611, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 616, 7, 127, 2, 2, 616, 166, 3, 2, 2, 2, 617, 618, 9, 12, 2, 2, 618, 168, 3, 2, 2, 2, 619, 620, 9, 13, 2, 2, 620, 170, 3, 2, 2, 2, 621, 622, 7, 47, 2, 2, 622, 623, 7, 47, 2, 2, 623, 624, 7, 93, 2, 2, 624, 625, 3, 2, 2, 2, 625, 626, 5, 145, 73, 2, 626, 627, 7, 95, 2, 2, 627, 628, 3, 2, 2, 2, 628, 629, 8, 86, 2, 2, 629, 172, 3, 2, 2, 2, 630, 631, 7, 47, 2, 2, 631, 632, 7, 47, 2, 2, 632, 662, 3, 2, 2, 2, 633, 663, 3, 2, 2, 2, 634, 638, 7, 93, 2, 2, 635, 637, 7, 63, 2, 2, 636, 635, 3, 2, 2, 2, 637, 640, 3, 2, 2, 2, 638, 636, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 663, 3, 2, 2, 2, 640, 638, 3, 2, 2, 2, 641, 645, 7, 93, 2, 2, 642, 644, 7, 63, 2, 2, 643, 642, 3, 2, 2, 2, 644, 647, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 648, 3, 2, 2, 2, 647, 645, 3, 2, 2, 2, 648, 652, 10, 14, 2, 2, 649, 651, 10, 15, 2, 2, 650, 649, 3, 2, 2, 2, 651, 654, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 663, 3, 2, 2, 2, 654, 652, 3, 2, 2, 2, 655, 659, 10, 16, 2, 2, 656, 658, 10, 15, 2, 2, 657, 656, 3, 2, 2, 2, 658, 661, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 663, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 662, 633, 3, 2, 2, 2, 662, 634, 3, 2, 2, 2, 662, 641, 3, 2, 2, 2, 662, 655, 3, 2, 2, 2, 663, 667, 3, 2, 2, 2, 664, 665, 7, 15, 2, 2, 665, 668, 7, 12, 2, 2, 666, 668, 9, 17, 2, 2, 667, 664, 3, 2, 2, 2, 667, 666, 3, 2, 2, 2, 668, 669, 3, 2, 2, 2, 669, 670, 8, 87, 2, 2, 670, 174, 3, 2, 2, 2, 671, 673, 9, 18, 2, 2, 672, 671, 3, 2, 2, 2, 673, 674, 3, 2, 2, 2, 674, 672, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 676, 3, 2, 2, 2, 676, 677, 8, 88, 3, 2, 677, 176, 3, 2, 2, 2, 678, 679, 7, 37, 2, 2, 679, 683, 7, 35, 2, 2, 680, 682, 10, 15, 2, 2, 681, 680, 3, 2, 2, 2, 682, 685, 3, 2, 2, 2, 683, 681, 3, 2, 2, 2, 683, 684, 3, 2, 2, 2, 684, 686, 3, 2, 2, 2, 685, 683, 3, 2, 2, 2, 686, 687, 8, 89, 2, 2, 687, 178, 3, 2, 2, 2, 42, 2, 433, 439, 441, 449, 451, 468, 472, 477, 484, 489, 495, 499, 505, 508, 513, 517, 524, 530, 534, 542, 545, 552, 556, 560, 565, 569, 574, 580, 586, 599, 613, 638, 645, 652, 659, 662, 667, 674, 683, 4, 2, 3, 2, 8, 2, 2]
\ No newline at end of file
diff --git a/src/main/java/org/luapp/language/generator/luappLexer.java b/src/main/java/org/luapp/language/generator/luappLexer.java
index cddf075..63779d1 100644
--- a/src/main/java/org/luapp/language/generator/luappLexer.java
+++ b/src/main/java/org/luapp/language/generator/luappLexer.java
@@ -26,9 +26,8 @@ public class luappLexer extends Lexer {
T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66,
- T__66=67, T__67=68, NAME=69, NORMALSTRING=70, CHARSTRING=71, LONGSTRING=72,
- INT=73, HEX=74, FLOAT=75, HEX_FLOAT=76, COMMENT=77, LINE_COMMENT=78, WS=79,
- SHEBANG=80;
+ T__66=67, NAME=68, NORMALSTRING=69, CHARSTRING=70, LONGSTRING=71, INT=72,
+ HEX=73, FLOAT=74, HEX_FLOAT=75, COMMENT=76, LINE_COMMENT=77, WS=78, SHEBANG=79;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -47,7 +46,7 @@ private static String[] makeRuleNames() {
"T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48",
"T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56",
"T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64",
- "T__65", "T__66", "T__67", "NAME", "NORMALSTRING", "CHARSTRING", "LONGSTRING",
+ "T__65", "T__66", "NAME", "NORMALSTRING", "CHARSTRING", "LONGSTRING",
"NESTED_STR", "INT", "HEX", "FLOAT", "HEX_FLOAT", "ExponentPart", "HexExponentPart",
"EscapeSequence", "DecimalEscape", "HexEscape", "UtfEscape", "Digit",
"HexDigit", "COMMENT", "LINE_COMMENT", "WS", "SHEBANG"
@@ -63,9 +62,8 @@ private static String[] makeLiteralNames() {
"'return'", "'::'", "'.'", "':'", "'nil'", "'false'", "'true'", "'...'",
"'('", "')'", "'['", "']'", "'{'", "'}'", "'or'", "'and'", "'<'", "'>'",
"'<='", "'>='", "'~='", "'=='", "'..'", "'+'", "'-'", "'*'", "'/'", "'%'",
- "'//'", "'&'", "'|'", "'~'", "'<<'", "'>>'", "'not'", "'#'", "'^'", "'new'",
- "'static'", "'get'", "'set'", "'constructor'", "'++'", "'+='", "'*='",
- "'/='", "'-='"
+ "'//'", "'&'", "'|'", "'~'", "'<<'", "'>>'", "'not'", "'#'", "'^'", "'static'",
+ "'get'", "'set'", "'constructor'", "'++'", "'+='", "'*='", "'/='", "'-='"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -76,7 +74,7 @@ private static String[] makeSymbolicNames() {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, "NAME", "NORMALSTRING",
+ null, null, null, null, null, null, null, null, "NAME", "NORMALSTRING",
"CHARSTRING", "LONGSTRING", "INT", "HEX", "FLOAT", "HEX_FLOAT", "COMMENT",
"LINE_COMMENT", "WS", "SHEBANG"
};
@@ -140,7 +138,7 @@ public luappLexer(CharStream input) {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2R\u02b6\b\1\4\2\t"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2Q\u02b0\b\1\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
@@ -150,239 +148,238 @@ public luappLexer(CharStream input) {
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+
- "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3"+
- "\4\3\4\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b"+
- "\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13"+
- "\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3"+
- "\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\22\3"+
- "\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3"+
- "\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3"+
- "\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\31\3"+
- "\31\3\32\3\32\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3"+
- "\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3"+
- "#\3#\3$\3$\3%\3%\3%\3&\3&\3&\3&\3\'\3\'\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+"+
- "\3+\3,\3,\3,\3-\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3"+
- "\63\3\63\3\64\3\64\3\65\3\65\3\66\3\66\3\67\3\67\3\67\38\38\38\39\39\3"+
- "9\39\3:\3:\3;\3;\3<\3<\3<\3<\3=\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3?\3?\3"+
- "?\3?\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3B\3B\3B\3C\3C\3C\3"+
- "D\3D\3D\3E\3E\3E\3F\3F\7F\u01b6\nF\fF\16F\u01b9\13F\3G\3G\3G\7G\u01be"+
- "\nG\fG\16G\u01c1\13G\3G\3G\3H\3H\3H\7H\u01c8\nH\fH\16H\u01cb\13H\3H\3"+
- "H\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\7J\u01d9\nJ\fJ\16J\u01dc\13J\3J\5J\u01df"+
- "\nJ\3K\6K\u01e2\nK\rK\16K\u01e3\3L\3L\3L\6L\u01e9\nL\rL\16L\u01ea\3M\6"+
- "M\u01ee\nM\rM\16M\u01ef\3M\3M\7M\u01f4\nM\fM\16M\u01f7\13M\3M\5M\u01fa"+
- "\nM\3M\3M\6M\u01fe\nM\rM\16M\u01ff\3M\5M\u0203\nM\3M\6M\u0206\nM\rM\16"+
- "M\u0207\3M\3M\5M\u020c\nM\3N\3N\3N\6N\u0211\nN\rN\16N\u0212\3N\3N\7N\u0217"+
- "\nN\fN\16N\u021a\13N\3N\5N\u021d\nN\3N\3N\3N\3N\6N\u0223\nN\rN\16N\u0224"+
- "\3N\5N\u0228\nN\3N\3N\3N\6N\u022d\nN\rN\16N\u022e\3N\3N\5N\u0233\nN\3"+
- "O\3O\5O\u0237\nO\3O\6O\u023a\nO\rO\16O\u023b\3P\3P\5P\u0240\nP\3P\6P\u0243"+
- "\nP\rP\16P\u0244\3Q\3Q\3Q\3Q\5Q\u024b\nQ\3Q\3Q\3Q\3Q\5Q\u0251\nQ\3R\3"+
- "R\3R\3R\3R\3R\3R\3R\3R\3R\3R\5R\u025e\nR\3S\3S\3S\3S\3S\3T\3T\3T\3T\3"+
- "T\6T\u026a\nT\rT\16T\u026b\3T\3T\3U\3U\3V\3V\3W\3W\3W\3W\3W\3W\3W\3W\3"+
- "W\3X\3X\3X\3X\3X\3X\7X\u0283\nX\fX\16X\u0286\13X\3X\3X\7X\u028a\nX\fX"+
- "\16X\u028d\13X\3X\3X\7X\u0291\nX\fX\16X\u0294\13X\3X\3X\7X\u0298\nX\f"+
- "X\16X\u029b\13X\5X\u029d\nX\3X\3X\3X\5X\u02a2\nX\3X\3X\3Y\6Y\u02a7\nY"+
- "\rY\16Y\u02a8\3Y\3Y\3Z\3Z\3Z\7Z\u02b0\nZ\fZ\16Z\u02b3\13Z\3Z\3Z\3\u01da"+
- "\2[\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35"+
- "\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36"+
- ";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67"+
- "m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008d"+
- "H\u008fI\u0091J\u0093\2\u0095K\u0097L\u0099M\u009bN\u009d\2\u009f\2\u00a1"+
- "\2\u00a3\2\u00a5\2\u00a7\2\u00a9\2\u00ab\2\u00adO\u00afP\u00b1Q\u00b3"+
- "R\3\2\23\5\2C\\aac|\6\2\62;C\\aac|\4\2$$^^\4\2))^^\4\2ZZzz\4\2GGgg\4\2"+
- "--//\4\2RRrr\f\2$$))^^cdhhppttvvxx||\3\2\62\64\3\2\62;\5\2\62;CHch\6\2"+
- "\f\f\17\17??]]\4\2\f\f\17\17\5\2\f\f\17\17]]\4\3\f\f\17\17\5\2\13\f\16"+
- "\17\"\"\2\u02db\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3"+
- "\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2"+
- "\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3"+
- "\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2"+
- "\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2"+
- "9\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3"+
- "\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2"+
- "\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2"+
- "_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3"+
- "\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2"+
- "\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083"+
- "\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2"+
- "\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0095\3\2\2\2\2\u0097"+
- "\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2"+
- "\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\3\u00b5\3\2\2\2\5\u00b7\3\2\2\2\7\u00b9"+
- "\3\2\2\2\t\u00bf\3\2\2\2\13\u00c4\3\2\2\2\r\u00c7\3\2\2\2\17\u00cb\3\2"+
- "\2\2\21\u00d1\3\2\2\2\23\u00d8\3\2\2\2\25\u00de\3\2\2\2\27\u00e1\3\2\2"+
- "\2\31\u00e6\3\2\2\2\33\u00ed\3\2\2\2\35\u00f2\3\2\2\2\37\u00f6\3\2\2\2"+
- "!\u00f8\3\2\2\2#\u00fb\3\2\2\2%\u0104\3\2\2\2\'\u010a\3\2\2\2)\u0112\3"+
- "\2\2\2+\u0118\3\2\2\2-\u011d\3\2\2\2/\u0124\3\2\2\2\61\u0127\3\2\2\2\63"+
- "\u0129\3\2\2\2\65\u012b\3\2\2\2\67\u012f\3\2\2\29\u0135\3\2\2\2;\u013a"+
- "\3\2\2\2=\u013e\3\2\2\2?\u0140\3\2\2\2A\u0142\3\2\2\2C\u0144\3\2\2\2E"+
- "\u0146\3\2\2\2G\u0148\3\2\2\2I\u014a\3\2\2\2K\u014d\3\2\2\2M\u0151\3\2"+
- "\2\2O\u0153\3\2\2\2Q\u0155\3\2\2\2S\u0158\3\2\2\2U\u015b\3\2\2\2W\u015e"+
- "\3\2\2\2Y\u0161\3\2\2\2[\u0164\3\2\2\2]\u0166\3\2\2\2_\u0168\3\2\2\2a"+
- "\u016a\3\2\2\2c\u016c\3\2\2\2e\u016e\3\2\2\2g\u0171\3\2\2\2i\u0173\3\2"+
- "\2\2k\u0175\3\2\2\2m\u0177\3\2\2\2o\u017a\3\2\2\2q\u017d\3\2\2\2s\u0181"+
- "\3\2\2\2u\u0183\3\2\2\2w\u0185\3\2\2\2y\u0189\3\2\2\2{\u0190\3\2\2\2}"+
- "\u0194\3\2\2\2\177\u0198\3\2\2\2\u0081\u01a4\3\2\2\2\u0083\u01a7\3\2\2"+
- "\2\u0085\u01aa\3\2\2\2\u0087\u01ad\3\2\2\2\u0089\u01b0\3\2\2\2\u008b\u01b3"+
- "\3\2\2\2\u008d\u01ba\3\2\2\2\u008f\u01c4\3\2\2\2\u0091\u01ce\3\2\2\2\u0093"+
- "\u01de\3\2\2\2\u0095\u01e1\3\2\2\2\u0097\u01e5\3\2\2\2\u0099\u020b\3\2"+
- "\2\2\u009b\u0232\3\2\2\2\u009d\u0234\3\2\2\2\u009f\u023d\3\2\2\2\u00a1"+
- "\u0250\3\2\2\2\u00a3\u025d\3\2\2\2\u00a5\u025f\3\2\2\2\u00a7\u0264\3\2"+
- "\2\2\u00a9\u026f\3\2\2\2\u00ab\u0271\3\2\2\2\u00ad\u0273\3\2\2\2\u00af"+
- "\u027c\3\2\2\2\u00b1\u02a6\3\2\2\2\u00b3\u02ac\3\2\2\2\u00b5\u00b6\7="+
- "\2\2\u00b6\4\3\2\2\2\u00b7\u00b8\7?\2\2\u00b8\6\3\2\2\2\u00b9\u00ba\7"+
- "d\2\2\u00ba\u00bb\7t\2\2\u00bb\u00bc\7g\2\2\u00bc\u00bd\7c\2\2\u00bd\u00be"+
- "\7m\2\2\u00be\b\3\2\2\2\u00bf\u00c0\7i\2\2\u00c0\u00c1\7q\2\2\u00c1\u00c2"+
- "\7v\2\2\u00c2\u00c3\7q\2\2\u00c3\n\3\2\2\2\u00c4\u00c5\7f\2\2\u00c5\u00c6"+
- "\7q\2\2\u00c6\f\3\2\2\2\u00c7\u00c8\7g\2\2\u00c8\u00c9\7p\2\2\u00c9\u00ca"+
- "\7f\2\2\u00ca\16\3\2\2\2\u00cb\u00cc\7y\2\2\u00cc\u00cd\7j\2\2\u00cd\u00ce"+
- "\7k\2\2\u00ce\u00cf\7n\2\2\u00cf\u00d0\7g\2\2\u00d0\20\3\2\2\2\u00d1\u00d2"+
- "\7t\2\2\u00d2\u00d3\7g\2\2\u00d3\u00d4\7r\2\2\u00d4\u00d5\7g\2\2\u00d5"+
- "\u00d6\7c\2\2\u00d6\u00d7\7v\2\2\u00d7\22\3\2\2\2\u00d8\u00d9\7w\2\2\u00d9"+
- "\u00da\7p\2\2\u00da\u00db\7v\2\2\u00db\u00dc\7k\2\2\u00dc\u00dd\7n\2\2"+
- "\u00dd\24\3\2\2\2\u00de\u00df\7k\2\2\u00df\u00e0\7h\2\2\u00e0\26\3\2\2"+
- "\2\u00e1\u00e2\7v\2\2\u00e2\u00e3\7j\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5"+
- "\7p\2\2\u00e5\30\3\2\2\2\u00e6\u00e7\7g\2\2\u00e7\u00e8\7n\2\2\u00e8\u00e9"+
- "\7u\2\2\u00e9\u00ea\7g\2\2\u00ea\u00eb\7k\2\2\u00eb\u00ec\7h\2\2\u00ec"+
- "\32\3\2\2\2\u00ed\u00ee\7g\2\2\u00ee\u00ef\7n\2\2\u00ef\u00f0\7u\2\2\u00f0"+
- "\u00f1\7g\2\2\u00f1\34\3\2\2\2\u00f2\u00f3\7h\2\2\u00f3\u00f4\7q\2\2\u00f4"+
- "\u00f5\7t\2\2\u00f5\36\3\2\2\2\u00f6\u00f7\7.\2\2\u00f7 \3\2\2\2\u00f8"+
- "\u00f9\7k\2\2\u00f9\u00fa\7p\2\2\u00fa\"\3\2\2\2\u00fb\u00fc\7h\2\2\u00fc"+
- "\u00fd\7w\2\2\u00fd\u00fe\7p\2\2\u00fe\u00ff\7e\2\2\u00ff\u0100\7v\2\2"+
- "\u0100\u0101\7k\2\2\u0101\u0102\7q\2\2\u0102\u0103\7p\2\2\u0103$\3\2\2"+
- "\2\u0104\u0105\7e\2\2\u0105\u0106\7n\2\2\u0106\u0107\7c\2\2\u0107\u0108"+
- "\7u\2\2\u0108\u0109\7u\2\2\u0109&\3\2\2\2\u010a\u010b\7g\2\2\u010b\u010c"+
- "\7z\2\2\u010c\u010d\7v\2\2\u010d\u010e\7g\2\2\u010e\u010f\7p\2\2\u010f"+
- "\u0110\7f\2\2\u0110\u0111\7u\2\2\u0111(\3\2\2\2\u0112\u0113\7n\2\2\u0113"+
- "\u0114\7q\2\2\u0114\u0115\7e\2\2\u0115\u0116\7c\2\2\u0116\u0117\7n\2\2"+
- "\u0117*\3\2\2\2\u0118\u0119\7u\2\2\u0119\u011a\7c\2\2\u011a\u011b\7h\2"+
- "\2\u011b\u011c\7g\2\2\u011c,\3\2\2\2\u011d\u011e\7t\2\2\u011e\u011f\7"+
- "g\2\2\u011f\u0120\7v\2\2\u0120\u0121\7w\2\2\u0121\u0122\7t\2\2\u0122\u0123"+
- "\7p\2\2\u0123.\3\2\2\2\u0124\u0125\7<\2\2\u0125\u0126\7<\2\2\u0126\60"+
- "\3\2\2\2\u0127\u0128\7\60\2\2\u0128\62\3\2\2\2\u0129\u012a\7<\2\2\u012a"+
- "\64\3\2\2\2\u012b\u012c\7p\2\2\u012c\u012d\7k\2\2\u012d\u012e\7n\2\2\u012e"+
- "\66\3\2\2\2\u012f\u0130\7h\2\2\u0130\u0131\7c\2\2\u0131\u0132\7n\2\2\u0132"+
- "\u0133\7u\2\2\u0133\u0134\7g\2\2\u01348\3\2\2\2\u0135\u0136\7v\2\2\u0136"+
- "\u0137\7t\2\2\u0137\u0138\7w\2\2\u0138\u0139\7g\2\2\u0139:\3\2\2\2\u013a"+
- "\u013b\7\60\2\2\u013b\u013c\7\60\2\2\u013c\u013d\7\60\2\2\u013d<\3\2\2"+
- "\2\u013e\u013f\7*\2\2\u013f>\3\2\2\2\u0140\u0141\7+\2\2\u0141@\3\2\2\2"+
- "\u0142\u0143\7]\2\2\u0143B\3\2\2\2\u0144\u0145\7_\2\2\u0145D\3\2\2\2\u0146"+
- "\u0147\7}\2\2\u0147F\3\2\2\2\u0148\u0149\7\177\2\2\u0149H\3\2\2\2\u014a"+
- "\u014b\7q\2\2\u014b\u014c\7t\2\2\u014cJ\3\2\2\2\u014d\u014e\7c\2\2\u014e"+
- "\u014f\7p\2\2\u014f\u0150\7f\2\2\u0150L\3\2\2\2\u0151\u0152\7>\2\2\u0152"+
- "N\3\2\2\2\u0153\u0154\7@\2\2\u0154P\3\2\2\2\u0155\u0156\7>\2\2\u0156\u0157"+
- "\7?\2\2\u0157R\3\2\2\2\u0158\u0159\7@\2\2\u0159\u015a\7?\2\2\u015aT\3"+
- "\2\2\2\u015b\u015c\7\u0080\2\2\u015c\u015d\7?\2\2\u015dV\3\2\2\2\u015e"+
- "\u015f\7?\2\2\u015f\u0160\7?\2\2\u0160X\3\2\2\2\u0161\u0162\7\60\2\2\u0162"+
- "\u0163\7\60\2\2\u0163Z\3\2\2\2\u0164\u0165\7-\2\2\u0165\\\3\2\2\2\u0166"+
- "\u0167\7/\2\2\u0167^\3\2\2\2\u0168\u0169\7,\2\2\u0169`\3\2\2\2\u016a\u016b"+
- "\7\61\2\2\u016bb\3\2\2\2\u016c\u016d\7\'\2\2\u016dd\3\2\2\2\u016e\u016f"+
- "\7\61\2\2\u016f\u0170\7\61\2\2\u0170f\3\2\2\2\u0171\u0172\7(\2\2\u0172"+
- "h\3\2\2\2\u0173\u0174\7~\2\2\u0174j\3\2\2\2\u0175\u0176\7\u0080\2\2\u0176"+
- "l\3\2\2\2\u0177\u0178\7>\2\2\u0178\u0179\7>\2\2\u0179n\3\2\2\2\u017a\u017b"+
- "\7@\2\2\u017b\u017c\7@\2\2\u017cp\3\2\2\2\u017d\u017e\7p\2\2\u017e\u017f"+
- "\7q\2\2\u017f\u0180\7v\2\2\u0180r\3\2\2\2\u0181\u0182\7%\2\2\u0182t\3"+
- "\2\2\2\u0183\u0184\7`\2\2\u0184v\3\2\2\2\u0185\u0186\7p\2\2\u0186\u0187"+
- "\7g\2\2\u0187\u0188\7y\2\2\u0188x\3\2\2\2\u0189\u018a\7u\2\2\u018a\u018b"+
- "\7v\2\2\u018b\u018c\7c\2\2\u018c\u018d\7v\2\2\u018d\u018e\7k\2\2\u018e"+
- "\u018f\7e\2\2\u018fz\3\2\2\2\u0190\u0191\7i\2\2\u0191\u0192\7g\2\2\u0192"+
- "\u0193\7v\2\2\u0193|\3\2\2\2\u0194\u0195\7u\2\2\u0195\u0196\7g\2\2\u0196"+
- "\u0197\7v\2\2\u0197~\3\2\2\2\u0198\u0199\7e\2\2\u0199\u019a\7q\2\2\u019a"+
- "\u019b\7p\2\2\u019b\u019c\7u\2\2\u019c\u019d\7v\2\2\u019d\u019e\7t\2\2"+
- "\u019e\u019f\7w\2\2\u019f\u01a0\7e\2\2\u01a0\u01a1\7v\2\2\u01a1\u01a2"+
- "\7q\2\2\u01a2\u01a3\7t\2\2\u01a3\u0080\3\2\2\2\u01a4\u01a5\7-\2\2\u01a5"+
- "\u01a6\7-\2\2\u01a6\u0082\3\2\2\2\u01a7\u01a8\7-\2\2\u01a8\u01a9\7?\2"+
- "\2\u01a9\u0084\3\2\2\2\u01aa\u01ab\7,\2\2\u01ab\u01ac\7?\2\2\u01ac\u0086"+
- "\3\2\2\2\u01ad\u01ae\7\61\2\2\u01ae\u01af\7?\2\2\u01af\u0088\3\2\2\2\u01b0"+
- "\u01b1\7/\2\2\u01b1\u01b2\7?\2\2\u01b2\u008a\3\2\2\2\u01b3\u01b7\t\2\2"+
- "\2\u01b4\u01b6\t\3\2\2\u01b5\u01b4\3\2\2\2\u01b6\u01b9\3\2\2\2\u01b7\u01b5"+
- "\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u008c\3\2\2\2\u01b9\u01b7\3\2\2\2\u01ba"+
- "\u01bf\7$\2\2\u01bb\u01be\5\u00a1Q\2\u01bc\u01be\n\4\2\2\u01bd\u01bb\3"+
- "\2\2\2\u01bd\u01bc\3\2\2\2\u01be\u01c1\3\2\2\2\u01bf\u01bd\3\2\2\2\u01bf"+
- "\u01c0\3\2\2\2\u01c0\u01c2\3\2\2\2\u01c1\u01bf\3\2\2\2\u01c2\u01c3\7$"+
- "\2\2\u01c3\u008e\3\2\2\2\u01c4\u01c9\7)\2\2\u01c5\u01c8\5\u00a1Q\2\u01c6"+
- "\u01c8\n\5\2\2\u01c7\u01c5\3\2\2\2\u01c7\u01c6\3\2\2\2\u01c8\u01cb\3\2"+
- "\2\2\u01c9\u01c7\3\2\2\2\u01c9\u01ca\3\2\2\2\u01ca\u01cc\3\2\2\2\u01cb"+
- "\u01c9\3\2\2\2\u01cc\u01cd\7)\2\2\u01cd\u0090\3\2\2\2\u01ce\u01cf\7]\2"+
- "\2\u01cf\u01d0\5\u0093J\2\u01d0\u01d1\7_\2\2\u01d1\u0092\3\2\2\2\u01d2"+
- "\u01d3\7?\2\2\u01d3\u01d4\5\u0093J\2\u01d4\u01d5\7?\2\2\u01d5\u01df\3"+
- "\2\2\2\u01d6\u01da\7]\2\2\u01d7\u01d9\13\2\2\2\u01d8\u01d7\3\2\2\2\u01d9"+
- "\u01dc\3\2\2\2\u01da\u01db\3\2\2\2\u01da\u01d8\3\2\2\2\u01db\u01dd\3\2"+
- "\2\2\u01dc\u01da\3\2\2\2\u01dd\u01df\7_\2\2\u01de\u01d2\3\2\2\2\u01de"+
- "\u01d6\3\2\2\2\u01df\u0094\3\2\2\2\u01e0\u01e2\5\u00a9U\2\u01e1\u01e0"+
- "\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\u01e1\3\2\2\2\u01e3\u01e4\3\2\2\2\u01e4"+
- "\u0096\3\2\2\2\u01e5\u01e6\7\62\2\2\u01e6\u01e8\t\6\2\2\u01e7\u01e9\5"+
- "\u00abV\2\u01e8\u01e7\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea\u01e8\3\2\2\2"+
- "\u01ea\u01eb\3\2\2\2\u01eb\u0098\3\2\2\2\u01ec\u01ee\5\u00a9U\2\u01ed"+
- "\u01ec\3\2\2\2\u01ee\u01ef\3\2\2\2\u01ef\u01ed\3\2\2\2\u01ef\u01f0\3\2"+
- "\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f5\7\60\2\2\u01f2\u01f4\5\u00a9U\2\u01f3"+
- "\u01f2\3\2\2\2\u01f4\u01f7\3\2\2\2\u01f5\u01f3\3\2\2\2\u01f5\u01f6\3\2"+
- "\2\2\u01f6\u01f9\3\2\2\2\u01f7\u01f5\3\2\2\2\u01f8\u01fa\5\u009dO\2\u01f9"+
- "\u01f8\3\2\2\2\u01f9\u01fa\3\2\2\2\u01fa\u020c\3\2\2\2\u01fb\u01fd\7\60"+
- "\2\2\u01fc\u01fe\5\u00a9U\2\u01fd\u01fc\3\2\2\2\u01fe\u01ff\3\2\2\2\u01ff"+
- "\u01fd\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u0202\3\2\2\2\u0201\u0203\5\u009d"+
- "O\2\u0202\u0201\3\2\2\2\u0202\u0203\3\2\2\2\u0203\u020c\3\2\2\2\u0204"+
- "\u0206\5\u00a9U\2\u0205\u0204\3\2\2\2\u0206\u0207\3\2\2\2\u0207\u0205"+
- "\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u0209\3\2\2\2\u0209\u020a\5\u009dO"+
- "\2\u020a\u020c\3\2\2\2\u020b\u01ed\3\2\2\2\u020b\u01fb\3\2\2\2\u020b\u0205"+
- "\3\2\2\2\u020c\u009a\3\2\2\2\u020d\u020e\7\62\2\2\u020e\u0210\t\6\2\2"+
- "\u020f\u0211\5\u00abV\2\u0210\u020f\3\2\2\2\u0211\u0212\3\2\2\2\u0212"+
- "\u0210\3\2\2\2\u0212\u0213\3\2\2\2\u0213\u0214\3\2\2\2\u0214\u0218\7\60"+
- "\2\2\u0215\u0217\5\u00abV\2\u0216\u0215\3\2\2\2\u0217\u021a\3\2\2\2\u0218"+
- "\u0216\3\2\2\2\u0218\u0219\3\2\2\2\u0219\u021c\3\2\2\2\u021a\u0218\3\2"+
- "\2\2\u021b\u021d\5\u009fP\2\u021c\u021b\3\2\2\2\u021c\u021d\3\2\2\2\u021d"+
- "\u0233\3\2\2\2\u021e\u021f\7\62\2\2\u021f\u0220\t\6\2\2\u0220\u0222\7"+
- "\60\2\2\u0221\u0223\5\u00abV\2\u0222\u0221\3\2\2\2\u0223\u0224\3\2\2\2"+
- "\u0224\u0222\3\2\2\2\u0224\u0225\3\2\2\2\u0225\u0227\3\2\2\2\u0226\u0228"+
- "\5\u009fP\2\u0227\u0226\3\2\2\2\u0227\u0228\3\2\2\2\u0228\u0233\3\2\2"+
- "\2\u0229\u022a\7\62\2\2\u022a\u022c\t\6\2\2\u022b\u022d\5\u00abV\2\u022c"+
- "\u022b\3\2\2\2\u022d\u022e\3\2\2\2\u022e\u022c\3\2\2\2\u022e\u022f\3\2"+
- "\2\2\u022f\u0230\3\2\2\2\u0230\u0231\5\u009fP\2\u0231\u0233\3\2\2\2\u0232"+
- "\u020d\3\2\2\2\u0232\u021e\3\2\2\2\u0232\u0229\3\2\2\2\u0233\u009c\3\2"+
- "\2\2\u0234\u0236\t\7\2\2\u0235\u0237\t\b\2\2\u0236\u0235\3\2\2\2\u0236"+
- "\u0237\3\2\2\2\u0237\u0239\3\2\2\2\u0238\u023a\5\u00a9U\2\u0239\u0238"+
- "\3\2\2\2\u023a\u023b\3\2\2\2\u023b\u0239\3\2\2\2\u023b\u023c\3\2\2\2\u023c"+
- "\u009e\3\2\2\2\u023d\u023f\t\t\2\2\u023e\u0240\t\b\2\2\u023f\u023e\3\2"+
- "\2\2\u023f\u0240\3\2\2\2\u0240\u0242\3\2\2\2\u0241\u0243\5\u00a9U\2\u0242"+
- "\u0241\3\2\2\2\u0243\u0244\3\2\2\2\u0244\u0242\3\2\2\2\u0244\u0245\3\2"+
- "\2\2\u0245\u00a0\3\2\2\2\u0246\u0247\7^\2\2\u0247\u0251\t\n\2\2\u0248"+
- "\u024a\7^\2\2\u0249\u024b\7\17\2\2\u024a\u0249\3\2\2\2\u024a\u024b\3\2"+
- "\2\2\u024b\u024c\3\2\2\2\u024c\u0251\7\f\2\2\u024d\u0251\5\u00a3R\2\u024e"+
- "\u0251\5\u00a5S\2\u024f\u0251\5\u00a7T\2\u0250\u0246\3\2\2\2\u0250\u0248"+
- "\3\2\2\2\u0250\u024d\3\2\2\2\u0250\u024e\3\2\2\2\u0250\u024f\3\2\2\2\u0251"+
- "\u00a2\3\2\2\2\u0252\u0253\7^\2\2\u0253\u025e\5\u00a9U\2\u0254\u0255\7"+
- "^\2\2\u0255\u0256\5\u00a9U\2\u0256\u0257\5\u00a9U\2\u0257\u025e\3\2\2"+
- "\2\u0258\u0259\7^\2\2\u0259\u025a\t\13\2\2\u025a\u025b\5\u00a9U\2\u025b"+
- "\u025c\5\u00a9U\2\u025c\u025e\3\2\2\2\u025d\u0252\3\2\2\2\u025d\u0254"+
- "\3\2\2\2\u025d\u0258\3\2\2\2\u025e\u00a4\3\2\2\2\u025f\u0260\7^\2\2\u0260"+
- "\u0261\7z\2\2\u0261\u0262\5\u00abV\2\u0262\u0263\5\u00abV\2\u0263\u00a6"+
- "\3\2\2\2\u0264\u0265\7^\2\2\u0265\u0266\7w\2\2\u0266\u0267\7}\2\2\u0267"+
- "\u0269\3\2\2\2\u0268\u026a\5\u00abV\2\u0269\u0268\3\2\2\2\u026a\u026b"+
- "\3\2\2\2\u026b\u0269\3\2\2\2\u026b\u026c\3\2\2\2\u026c\u026d\3\2\2\2\u026d"+
- "\u026e\7\177\2\2\u026e\u00a8\3\2\2\2\u026f\u0270\t\f\2\2\u0270\u00aa\3"+
- "\2\2\2\u0271\u0272\t\r\2\2\u0272\u00ac\3\2\2\2\u0273\u0274\7/\2\2\u0274"+
- "\u0275\7/\2\2\u0275\u0276\7]\2\2\u0276\u0277\3\2\2\2\u0277\u0278\5\u0093"+
- "J\2\u0278\u0279\7_\2\2\u0279\u027a\3\2\2\2\u027a\u027b\bW\2\2\u027b\u00ae"+
- "\3\2\2\2\u027c\u027d\7/\2\2\u027d\u027e\7/\2\2\u027e\u029c\3\2\2\2\u027f"+
- "\u029d\3\2\2\2\u0280\u0284\7]\2\2\u0281\u0283\7?\2\2\u0282\u0281\3\2\2"+
- "\2\u0283\u0286\3\2\2\2\u0284\u0282\3\2\2\2\u0284\u0285\3\2\2\2\u0285\u029d"+
- "\3\2\2\2\u0286\u0284\3\2\2\2\u0287\u028b\7]\2\2\u0288\u028a\7?\2\2\u0289"+
- "\u0288\3\2\2\2\u028a\u028d\3\2\2\2\u028b\u0289\3\2\2\2\u028b\u028c\3\2"+
- "\2\2\u028c\u028e\3\2\2\2\u028d\u028b\3\2\2\2\u028e\u0292\n\16\2\2\u028f"+
- "\u0291\n\17\2\2\u0290\u028f\3\2\2\2\u0291\u0294\3\2\2\2\u0292\u0290\3"+
- "\2\2\2\u0292\u0293\3\2\2\2\u0293\u029d\3\2\2\2\u0294\u0292\3\2\2\2\u0295"+
- "\u0299\n\20\2\2\u0296\u0298\n\17\2\2\u0297\u0296\3\2\2\2\u0298\u029b\3"+
- "\2\2\2\u0299\u0297\3\2\2\2\u0299\u029a\3\2\2\2\u029a\u029d\3\2\2\2\u029b"+
- "\u0299\3\2\2\2\u029c\u027f\3\2\2\2\u029c\u0280\3\2\2\2\u029c\u0287\3\2"+
- "\2\2\u029c\u0295\3\2\2\2\u029d\u02a1\3\2\2\2\u029e\u029f\7\17\2\2\u029f"+
- "\u02a2\7\f\2\2\u02a0\u02a2\t\21\2\2\u02a1\u029e\3\2\2\2\u02a1\u02a0\3"+
- "\2\2\2\u02a2\u02a3\3\2\2\2\u02a3\u02a4\bX\2\2\u02a4\u00b0\3\2\2\2\u02a5"+
- "\u02a7\t\22\2\2\u02a6\u02a5\3\2\2\2\u02a7\u02a8\3\2\2\2\u02a8\u02a6\3"+
- "\2\2\2\u02a8\u02a9\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ab\bY\3\2\u02ab"+
- "\u00b2\3\2\2\2\u02ac\u02ad\7%\2\2\u02ad\u02b1\7#\2\2\u02ae\u02b0\n\17"+
- "\2\2\u02af\u02ae\3\2\2\2\u02b0\u02b3\3\2\2\2\u02b1\u02af\3\2\2\2\u02b1"+
- "\u02b2\3\2\2\2\u02b2\u02b4\3\2\2\2\u02b3\u02b1\3\2\2\2\u02b4\u02b5\bZ"+
- "\2\2\u02b5\u00b4\3\2\2\2*\2\u01b7\u01bd\u01bf\u01c7\u01c9\u01da\u01de"+
- "\u01e3\u01ea\u01ef\u01f5\u01f9\u01ff\u0202\u0207\u020b\u0212\u0218\u021c"+
- "\u0224\u0227\u022e\u0232\u0236\u023b\u023f\u0244\u024a\u0250\u025d\u026b"+
- "\u0284\u028b\u0292\u0299\u029c\u02a1\u02a8\u02b1\4\2\3\2\b\2\2";
+ "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4"+
+ "\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3"+
+ "\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13"+
+ "\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3"+
+ "\16\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3"+
+ "\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3"+
+ "\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3"+
+ "\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3"+
+ "\32\3\32\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3"+
+ "\35\3\35\3\35\3\36\3\36\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#"+
+ "\3$\3$\3%\3%\3%\3&\3&\3&\3&\3\'\3\'\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3"+
+ ",\3,\3,\3-\3-\3-\3.\3.\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3\63\3"+
+ "\63\3\64\3\64\3\65\3\65\3\66\3\66\3\67\3\67\3\67\38\38\38\39\39\39\39"+
+ "\3:\3:\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3>\3?\3?\3?\3?"+
+ "\3?\3?\3?\3?\3?\3?\3?\3?\3@\3@\3@\3A\3A\3A\3B\3B\3B\3C\3C\3C\3D\3D\3D"+
+ "\3E\3E\7E\u01b0\nE\fE\16E\u01b3\13E\3F\3F\3F\7F\u01b8\nF\fF\16F\u01bb"+
+ "\13F\3F\3F\3G\3G\3G\7G\u01c2\nG\fG\16G\u01c5\13G\3G\3G\3H\3H\3H\3H\3I"+
+ "\3I\3I\3I\3I\3I\7I\u01d3\nI\fI\16I\u01d6\13I\3I\5I\u01d9\nI\3J\6J\u01dc"+
+ "\nJ\rJ\16J\u01dd\3K\3K\3K\6K\u01e3\nK\rK\16K\u01e4\3L\6L\u01e8\nL\rL\16"+
+ "L\u01e9\3L\3L\7L\u01ee\nL\fL\16L\u01f1\13L\3L\5L\u01f4\nL\3L\3L\6L\u01f8"+
+ "\nL\rL\16L\u01f9\3L\5L\u01fd\nL\3L\6L\u0200\nL\rL\16L\u0201\3L\3L\5L\u0206"+
+ "\nL\3M\3M\3M\6M\u020b\nM\rM\16M\u020c\3M\3M\7M\u0211\nM\fM\16M\u0214\13"+
+ "M\3M\5M\u0217\nM\3M\3M\3M\3M\6M\u021d\nM\rM\16M\u021e\3M\5M\u0222\nM\3"+
+ "M\3M\3M\6M\u0227\nM\rM\16M\u0228\3M\3M\5M\u022d\nM\3N\3N\5N\u0231\nN\3"+
+ "N\6N\u0234\nN\rN\16N\u0235\3O\3O\5O\u023a\nO\3O\6O\u023d\nO\rO\16O\u023e"+
+ "\3P\3P\3P\3P\5P\u0245\nP\3P\3P\3P\3P\5P\u024b\nP\3Q\3Q\3Q\3Q\3Q\3Q\3Q"+
+ "\3Q\3Q\3Q\3Q\5Q\u0258\nQ\3R\3R\3R\3R\3R\3S\3S\3S\3S\3S\6S\u0264\nS\rS"+
+ "\16S\u0265\3S\3S\3T\3T\3U\3U\3V\3V\3V\3V\3V\3V\3V\3V\3V\3W\3W\3W\3W\3"+
+ "W\3W\7W\u027d\nW\fW\16W\u0280\13W\3W\3W\7W\u0284\nW\fW\16W\u0287\13W\3"+
+ "W\3W\7W\u028b\nW\fW\16W\u028e\13W\3W\3W\7W\u0292\nW\fW\16W\u0295\13W\5"+
+ "W\u0297\nW\3W\3W\3W\5W\u029c\nW\3W\3W\3X\6X\u02a1\nX\rX\16X\u02a2\3X\3"+
+ "X\3Y\3Y\3Y\7Y\u02aa\nY\fY\16Y\u02ad\13Y\3Y\3Y\3\u01d4\2Z\3\3\5\4\7\5\t"+
+ "\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23"+
+ "%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G"+
+ "%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{"+
+ "?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091"+
+ "\2\u0093J\u0095K\u0097L\u0099M\u009b\2\u009d\2\u009f\2\u00a1\2\u00a3\2"+
+ "\u00a5\2\u00a7\2\u00a9\2\u00abN\u00adO\u00afP\u00b1Q\3\2\23\5\2C\\aac"+
+ "|\6\2\62;C\\aac|\4\2$$^^\4\2))^^\4\2ZZzz\4\2GGgg\4\2--//\4\2RRrr\f\2$"+
+ "$))^^cdhhppttvvxx||\3\2\62\64\3\2\62;\5\2\62;CHch\6\2\f\f\17\17??]]\4"+
+ "\2\f\f\17\17\5\2\f\f\17\17]]\4\3\f\f\17\17\5\2\13\f\16\17\"\"\2\u02d5"+
+ "\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2"+
+ "\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2"+
+ "\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2"+
+ "\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2"+
+ "\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3"+
+ "\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2"+
+ "\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2"+
+ "U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3"+
+ "\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2"+
+ "\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2"+
+ "{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085"+
+ "\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2"+
+ "\2\2\u008f\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099"+
+ "\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2"+
+ "\2\3\u00b3\3\2\2\2\5\u00b5\3\2\2\2\7\u00b7\3\2\2\2\t\u00bd\3\2\2\2\13"+
+ "\u00c2\3\2\2\2\r\u00c5\3\2\2\2\17\u00c9\3\2\2\2\21\u00cf\3\2\2\2\23\u00d6"+
+ "\3\2\2\2\25\u00dc\3\2\2\2\27\u00df\3\2\2\2\31\u00e4\3\2\2\2\33\u00eb\3"+
+ "\2\2\2\35\u00f0\3\2\2\2\37\u00f4\3\2\2\2!\u00f6\3\2\2\2#\u00f9\3\2\2\2"+
+ "%\u0102\3\2\2\2\'\u0108\3\2\2\2)\u0110\3\2\2\2+\u0116\3\2\2\2-\u011b\3"+
+ "\2\2\2/\u0122\3\2\2\2\61\u0125\3\2\2\2\63\u0127\3\2\2\2\65\u0129\3\2\2"+
+ "\2\67\u012d\3\2\2\29\u0133\3\2\2\2;\u0138\3\2\2\2=\u013c\3\2\2\2?\u013e"+
+ "\3\2\2\2A\u0140\3\2\2\2C\u0142\3\2\2\2E\u0144\3\2\2\2G\u0146\3\2\2\2I"+
+ "\u0148\3\2\2\2K\u014b\3\2\2\2M\u014f\3\2\2\2O\u0151\3\2\2\2Q\u0153\3\2"+
+ "\2\2S\u0156\3\2\2\2U\u0159\3\2\2\2W\u015c\3\2\2\2Y\u015f\3\2\2\2[\u0162"+
+ "\3\2\2\2]\u0164\3\2\2\2_\u0166\3\2\2\2a\u0168\3\2\2\2c\u016a\3\2\2\2e"+
+ "\u016c\3\2\2\2g\u016f\3\2\2\2i\u0171\3\2\2\2k\u0173\3\2\2\2m\u0175\3\2"+
+ "\2\2o\u0178\3\2\2\2q\u017b\3\2\2\2s\u017f\3\2\2\2u\u0181\3\2\2\2w\u0183"+
+ "\3\2\2\2y\u018a\3\2\2\2{\u018e\3\2\2\2}\u0192\3\2\2\2\177\u019e\3\2\2"+
+ "\2\u0081\u01a1\3\2\2\2\u0083\u01a4\3\2\2\2\u0085\u01a7\3\2\2\2\u0087\u01aa"+
+ "\3\2\2\2\u0089\u01ad\3\2\2\2\u008b\u01b4\3\2\2\2\u008d\u01be\3\2\2\2\u008f"+
+ "\u01c8\3\2\2\2\u0091\u01d8\3\2\2\2\u0093\u01db\3\2\2\2\u0095\u01df\3\2"+
+ "\2\2\u0097\u0205\3\2\2\2\u0099\u022c\3\2\2\2\u009b\u022e\3\2\2\2\u009d"+
+ "\u0237\3\2\2\2\u009f\u024a\3\2\2\2\u00a1\u0257\3\2\2\2\u00a3\u0259\3\2"+
+ "\2\2\u00a5\u025e\3\2\2\2\u00a7\u0269\3\2\2\2\u00a9\u026b\3\2\2\2\u00ab"+
+ "\u026d\3\2\2\2\u00ad\u0276\3\2\2\2\u00af\u02a0\3\2\2\2\u00b1\u02a6\3\2"+
+ "\2\2\u00b3\u00b4\7=\2\2\u00b4\4\3\2\2\2\u00b5\u00b6\7?\2\2\u00b6\6\3\2"+
+ "\2\2\u00b7\u00b8\7d\2\2\u00b8\u00b9\7t\2\2\u00b9\u00ba\7g\2\2\u00ba\u00bb"+
+ "\7c\2\2\u00bb\u00bc\7m\2\2\u00bc\b\3\2\2\2\u00bd\u00be\7i\2\2\u00be\u00bf"+
+ "\7q\2\2\u00bf\u00c0\7v\2\2\u00c0\u00c1\7q\2\2\u00c1\n\3\2\2\2\u00c2\u00c3"+
+ "\7f\2\2\u00c3\u00c4\7q\2\2\u00c4\f\3\2\2\2\u00c5\u00c6\7g\2\2\u00c6\u00c7"+
+ "\7p\2\2\u00c7\u00c8\7f\2\2\u00c8\16\3\2\2\2\u00c9\u00ca\7y\2\2\u00ca\u00cb"+
+ "\7j\2\2\u00cb\u00cc\7k\2\2\u00cc\u00cd\7n\2\2\u00cd\u00ce\7g\2\2\u00ce"+
+ "\20\3\2\2\2\u00cf\u00d0\7t\2\2\u00d0\u00d1\7g\2\2\u00d1\u00d2\7r\2\2\u00d2"+
+ "\u00d3\7g\2\2\u00d3\u00d4\7c\2\2\u00d4\u00d5\7v\2\2\u00d5\22\3\2\2\2\u00d6"+
+ "\u00d7\7w\2\2\u00d7\u00d8\7p\2\2\u00d8\u00d9\7v\2\2\u00d9\u00da\7k\2\2"+
+ "\u00da\u00db\7n\2\2\u00db\24\3\2\2\2\u00dc\u00dd\7k\2\2\u00dd\u00de\7"+
+ "h\2\2\u00de\26\3\2\2\2\u00df\u00e0\7v\2\2\u00e0\u00e1\7j\2\2\u00e1\u00e2"+
+ "\7g\2\2\u00e2\u00e3\7p\2\2\u00e3\30\3\2\2\2\u00e4\u00e5\7g\2\2\u00e5\u00e6"+
+ "\7n\2\2\u00e6\u00e7\7u\2\2\u00e7\u00e8\7g\2\2\u00e8\u00e9\7k\2\2\u00e9"+
+ "\u00ea\7h\2\2\u00ea\32\3\2\2\2\u00eb\u00ec\7g\2\2\u00ec\u00ed\7n\2\2\u00ed"+
+ "\u00ee\7u\2\2\u00ee\u00ef\7g\2\2\u00ef\34\3\2\2\2\u00f0\u00f1\7h\2\2\u00f1"+
+ "\u00f2\7q\2\2\u00f2\u00f3\7t\2\2\u00f3\36\3\2\2\2\u00f4\u00f5\7.\2\2\u00f5"+
+ " \3\2\2\2\u00f6\u00f7\7k\2\2\u00f7\u00f8\7p\2\2\u00f8\"\3\2\2\2\u00f9"+
+ "\u00fa\7h\2\2\u00fa\u00fb\7w\2\2\u00fb\u00fc\7p\2\2\u00fc\u00fd\7e\2\2"+
+ "\u00fd\u00fe\7v\2\2\u00fe\u00ff\7k\2\2\u00ff\u0100\7q\2\2\u0100\u0101"+
+ "\7p\2\2\u0101$\3\2\2\2\u0102\u0103\7e\2\2\u0103\u0104\7n\2\2\u0104\u0105"+
+ "\7c\2\2\u0105\u0106\7u\2\2\u0106\u0107\7u\2\2\u0107&\3\2\2\2\u0108\u0109"+
+ "\7g\2\2\u0109\u010a\7z\2\2\u010a\u010b\7v\2\2\u010b\u010c\7g\2\2\u010c"+
+ "\u010d\7p\2\2\u010d\u010e\7f\2\2\u010e\u010f\7u\2\2\u010f(\3\2\2\2\u0110"+
+ "\u0111\7n\2\2\u0111\u0112\7q\2\2\u0112\u0113\7e\2\2\u0113\u0114\7c\2\2"+
+ "\u0114\u0115\7n\2\2\u0115*\3\2\2\2\u0116\u0117\7u\2\2\u0117\u0118\7c\2"+
+ "\2\u0118\u0119\7h\2\2\u0119\u011a\7g\2\2\u011a,\3\2\2\2\u011b\u011c\7"+
+ "t\2\2\u011c\u011d\7g\2\2\u011d\u011e\7v\2\2\u011e\u011f\7w\2\2\u011f\u0120"+
+ "\7t\2\2\u0120\u0121\7p\2\2\u0121.\3\2\2\2\u0122\u0123\7<\2\2\u0123\u0124"+
+ "\7<\2\2\u0124\60\3\2\2\2\u0125\u0126\7\60\2\2\u0126\62\3\2\2\2\u0127\u0128"+
+ "\7<\2\2\u0128\64\3\2\2\2\u0129\u012a\7p\2\2\u012a\u012b\7k\2\2\u012b\u012c"+
+ "\7n\2\2\u012c\66\3\2\2\2\u012d\u012e\7h\2\2\u012e\u012f\7c\2\2\u012f\u0130"+
+ "\7n\2\2\u0130\u0131\7u\2\2\u0131\u0132\7g\2\2\u01328\3\2\2\2\u0133\u0134"+
+ "\7v\2\2\u0134\u0135\7t\2\2\u0135\u0136\7w\2\2\u0136\u0137\7g\2\2\u0137"+
+ ":\3\2\2\2\u0138\u0139\7\60\2\2\u0139\u013a\7\60\2\2\u013a\u013b\7\60\2"+
+ "\2\u013b<\3\2\2\2\u013c\u013d\7*\2\2\u013d>\3\2\2\2\u013e\u013f\7+\2\2"+
+ "\u013f@\3\2\2\2\u0140\u0141\7]\2\2\u0141B\3\2\2\2\u0142\u0143\7_\2\2\u0143"+
+ "D\3\2\2\2\u0144\u0145\7}\2\2\u0145F\3\2\2\2\u0146\u0147\7\177\2\2\u0147"+
+ "H\3\2\2\2\u0148\u0149\7q\2\2\u0149\u014a\7t\2\2\u014aJ\3\2\2\2\u014b\u014c"+
+ "\7c\2\2\u014c\u014d\7p\2\2\u014d\u014e\7f\2\2\u014eL\3\2\2\2\u014f\u0150"+
+ "\7>\2\2\u0150N\3\2\2\2\u0151\u0152\7@\2\2\u0152P\3\2\2\2\u0153\u0154\7"+
+ ">\2\2\u0154\u0155\7?\2\2\u0155R\3\2\2\2\u0156\u0157\7@\2\2\u0157\u0158"+
+ "\7?\2\2\u0158T\3\2\2\2\u0159\u015a\7\u0080\2\2\u015a\u015b\7?\2\2\u015b"+
+ "V\3\2\2\2\u015c\u015d\7?\2\2\u015d\u015e\7?\2\2\u015eX\3\2\2\2\u015f\u0160"+
+ "\7\60\2\2\u0160\u0161\7\60\2\2\u0161Z\3\2\2\2\u0162\u0163\7-\2\2\u0163"+
+ "\\\3\2\2\2\u0164\u0165\7/\2\2\u0165^\3\2\2\2\u0166\u0167\7,\2\2\u0167"+
+ "`\3\2\2\2\u0168\u0169\7\61\2\2\u0169b\3\2\2\2\u016a\u016b\7\'\2\2\u016b"+
+ "d\3\2\2\2\u016c\u016d\7\61\2\2\u016d\u016e\7\61\2\2\u016ef\3\2\2\2\u016f"+
+ "\u0170\7(\2\2\u0170h\3\2\2\2\u0171\u0172\7~\2\2\u0172j\3\2\2\2\u0173\u0174"+
+ "\7\u0080\2\2\u0174l\3\2\2\2\u0175\u0176\7>\2\2\u0176\u0177\7>\2\2\u0177"+
+ "n\3\2\2\2\u0178\u0179\7@\2\2\u0179\u017a\7@\2\2\u017ap\3\2\2\2\u017b\u017c"+
+ "\7p\2\2\u017c\u017d\7q\2\2\u017d\u017e\7v\2\2\u017er\3\2\2\2\u017f\u0180"+
+ "\7%\2\2\u0180t\3\2\2\2\u0181\u0182\7`\2\2\u0182v\3\2\2\2\u0183\u0184\7"+
+ "u\2\2\u0184\u0185\7v\2\2\u0185\u0186\7c\2\2\u0186\u0187\7v\2\2\u0187\u0188"+
+ "\7k\2\2\u0188\u0189\7e\2\2\u0189x\3\2\2\2\u018a\u018b\7i\2\2\u018b\u018c"+
+ "\7g\2\2\u018c\u018d\7v\2\2\u018dz\3\2\2\2\u018e\u018f\7u\2\2\u018f\u0190"+
+ "\7g\2\2\u0190\u0191\7v\2\2\u0191|\3\2\2\2\u0192\u0193\7e\2\2\u0193\u0194"+
+ "\7q\2\2\u0194\u0195\7p\2\2\u0195\u0196\7u\2\2\u0196\u0197\7v\2\2\u0197"+
+ "\u0198\7t\2\2\u0198\u0199\7w\2\2\u0199\u019a\7e\2\2\u019a\u019b\7v\2\2"+
+ "\u019b\u019c\7q\2\2\u019c\u019d\7t\2\2\u019d~\3\2\2\2\u019e\u019f\7-\2"+
+ "\2\u019f\u01a0\7-\2\2\u01a0\u0080\3\2\2\2\u01a1\u01a2\7-\2\2\u01a2\u01a3"+
+ "\7?\2\2\u01a3\u0082\3\2\2\2\u01a4\u01a5\7,\2\2\u01a5\u01a6\7?\2\2\u01a6"+
+ "\u0084\3\2\2\2\u01a7\u01a8\7\61\2\2\u01a8\u01a9\7?\2\2\u01a9\u0086\3\2"+
+ "\2\2\u01aa\u01ab\7/\2\2\u01ab\u01ac\7?\2\2\u01ac\u0088\3\2\2\2\u01ad\u01b1"+
+ "\t\2\2\2\u01ae\u01b0\t\3\2\2\u01af\u01ae\3\2\2\2\u01b0\u01b3\3\2\2\2\u01b1"+
+ "\u01af\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2\u008a\3\2\2\2\u01b3\u01b1\3\2"+
+ "\2\2\u01b4\u01b9\7$\2\2\u01b5\u01b8\5\u009fP\2\u01b6\u01b8\n\4\2\2\u01b7"+
+ "\u01b5\3\2\2\2\u01b7\u01b6\3\2\2\2\u01b8\u01bb\3\2\2\2\u01b9\u01b7\3\2"+
+ "\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01bc\3\2\2\2\u01bb\u01b9\3\2\2\2\u01bc"+
+ "\u01bd\7$\2\2\u01bd\u008c\3\2\2\2\u01be\u01c3\7)\2\2\u01bf\u01c2\5\u009f"+
+ "P\2\u01c0\u01c2\n\5\2\2\u01c1\u01bf\3\2\2\2\u01c1\u01c0\3\2\2\2\u01c2"+
+ "\u01c5\3\2\2\2\u01c3\u01c1\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4\u01c6\3\2"+
+ "\2\2\u01c5\u01c3\3\2\2\2\u01c6\u01c7\7)\2\2\u01c7\u008e\3\2\2\2\u01c8"+
+ "\u01c9\7]\2\2\u01c9\u01ca\5\u0091I\2\u01ca\u01cb\7_\2\2\u01cb\u0090\3"+
+ "\2\2\2\u01cc\u01cd\7?\2\2\u01cd\u01ce\5\u0091I\2\u01ce\u01cf\7?\2\2\u01cf"+
+ "\u01d9\3\2\2\2\u01d0\u01d4\7]\2\2\u01d1\u01d3\13\2\2\2\u01d2\u01d1\3\2"+
+ "\2\2\u01d3\u01d6\3\2\2\2\u01d4\u01d5\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d5"+
+ "\u01d7\3\2\2\2\u01d6\u01d4\3\2\2\2\u01d7\u01d9\7_\2\2\u01d8\u01cc\3\2"+
+ "\2\2\u01d8\u01d0\3\2\2\2\u01d9\u0092\3\2\2\2\u01da\u01dc\5\u00a7T\2\u01db"+
+ "\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd\u01db\3\2\2\2\u01dd\u01de\3\2"+
+ "\2\2\u01de\u0094\3\2\2\2\u01df\u01e0\7\62\2\2\u01e0\u01e2\t\6\2\2\u01e1"+
+ "\u01e3\5\u00a9U\2\u01e2\u01e1\3\2\2\2\u01e3\u01e4\3\2\2\2\u01e4\u01e2"+
+ "\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u0096\3\2\2\2\u01e6\u01e8\5\u00a7T"+
+ "\2\u01e7\u01e6\3\2\2\2\u01e8\u01e9\3\2\2\2\u01e9\u01e7\3\2\2\2\u01e9\u01ea"+
+ "\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ef\7\60\2\2\u01ec\u01ee\5\u00a7"+
+ "T\2\u01ed\u01ec\3\2\2\2\u01ee\u01f1\3\2\2\2\u01ef\u01ed\3\2\2\2\u01ef"+
+ "\u01f0\3\2\2\2\u01f0\u01f3\3\2\2\2\u01f1\u01ef\3\2\2\2\u01f2\u01f4\5\u009b"+
+ "N\2\u01f3\u01f2\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u0206\3\2\2\2\u01f5"+
+ "\u01f7\7\60\2\2\u01f6\u01f8\5\u00a7T\2\u01f7\u01f6\3\2\2\2\u01f8\u01f9"+
+ "\3\2\2\2\u01f9\u01f7\3\2\2\2\u01f9\u01fa\3\2\2\2\u01fa\u01fc\3\2\2\2\u01fb"+
+ "\u01fd\5\u009bN\2\u01fc\u01fb\3\2\2\2\u01fc\u01fd\3\2\2\2\u01fd\u0206"+
+ "\3\2\2\2\u01fe\u0200\5\u00a7T\2\u01ff\u01fe\3\2\2\2\u0200\u0201\3\2\2"+
+ "\2\u0201\u01ff\3\2\2\2\u0201\u0202\3\2\2\2\u0202\u0203\3\2\2\2\u0203\u0204"+
+ "\5\u009bN\2\u0204\u0206\3\2\2\2\u0205\u01e7\3\2\2\2\u0205\u01f5\3\2\2"+
+ "\2\u0205\u01ff\3\2\2\2\u0206\u0098\3\2\2\2\u0207\u0208\7\62\2\2\u0208"+
+ "\u020a\t\6\2\2\u0209\u020b\5\u00a9U\2\u020a\u0209\3\2\2\2\u020b\u020c"+
+ "\3\2\2\2\u020c\u020a\3\2\2\2\u020c\u020d\3\2\2\2\u020d\u020e\3\2\2\2\u020e"+
+ "\u0212\7\60\2\2\u020f\u0211\5\u00a9U\2\u0210\u020f\3\2\2\2\u0211\u0214"+
+ "\3\2\2\2\u0212\u0210\3\2\2\2\u0212\u0213\3\2\2\2\u0213\u0216\3\2\2\2\u0214"+
+ "\u0212\3\2\2\2\u0215\u0217\5\u009dO\2\u0216\u0215\3\2\2\2\u0216\u0217"+
+ "\3\2\2\2\u0217\u022d\3\2\2\2\u0218\u0219\7\62\2\2\u0219\u021a\t\6\2\2"+
+ "\u021a\u021c\7\60\2\2\u021b\u021d\5\u00a9U\2\u021c\u021b\3\2\2\2\u021d"+
+ "\u021e\3\2\2\2\u021e\u021c\3\2\2\2\u021e\u021f\3\2\2\2\u021f\u0221\3\2"+
+ "\2\2\u0220\u0222\5\u009dO\2\u0221\u0220\3\2\2\2\u0221\u0222\3\2\2\2\u0222"+
+ "\u022d\3\2\2\2\u0223\u0224\7\62\2\2\u0224\u0226\t\6\2\2\u0225\u0227\5"+
+ "\u00a9U\2\u0226\u0225\3\2\2\2\u0227\u0228\3\2\2\2\u0228\u0226\3\2\2\2"+
+ "\u0228\u0229\3\2\2\2\u0229\u022a\3\2\2\2\u022a\u022b\5\u009dO\2\u022b"+
+ "\u022d\3\2\2\2\u022c\u0207\3\2\2\2\u022c\u0218\3\2\2\2\u022c\u0223\3\2"+
+ "\2\2\u022d\u009a\3\2\2\2\u022e\u0230\t\7\2\2\u022f\u0231\t\b\2\2\u0230"+
+ "\u022f\3\2\2\2\u0230\u0231\3\2\2\2\u0231\u0233\3\2\2\2\u0232\u0234\5\u00a7"+
+ "T\2\u0233\u0232\3\2\2\2\u0234\u0235\3\2\2\2\u0235\u0233\3\2\2\2\u0235"+
+ "\u0236\3\2\2\2\u0236\u009c\3\2\2\2\u0237\u0239\t\t\2\2\u0238\u023a\t\b"+
+ "\2\2\u0239\u0238\3\2\2\2\u0239\u023a\3\2\2\2\u023a\u023c\3\2\2\2\u023b"+
+ "\u023d\5\u00a7T\2\u023c\u023b\3\2\2\2\u023d\u023e\3\2\2\2\u023e\u023c"+
+ "\3\2\2\2\u023e\u023f\3\2\2\2\u023f\u009e\3\2\2\2\u0240\u0241\7^\2\2\u0241"+
+ "\u024b\t\n\2\2\u0242\u0244\7^\2\2\u0243\u0245\7\17\2\2\u0244\u0243\3\2"+
+ "\2\2\u0244\u0245\3\2\2\2\u0245\u0246\3\2\2\2\u0246\u024b\7\f\2\2\u0247"+
+ "\u024b\5\u00a1Q\2\u0248\u024b\5\u00a3R\2\u0249\u024b\5\u00a5S\2\u024a"+
+ "\u0240\3\2\2\2\u024a\u0242\3\2\2\2\u024a\u0247\3\2\2\2\u024a\u0248\3\2"+
+ "\2\2\u024a\u0249\3\2\2\2\u024b\u00a0\3\2\2\2\u024c\u024d\7^\2\2\u024d"+
+ "\u0258\5\u00a7T\2\u024e\u024f\7^\2\2\u024f\u0250\5\u00a7T\2\u0250\u0251"+
+ "\5\u00a7T\2\u0251\u0258\3\2\2\2\u0252\u0253\7^\2\2\u0253\u0254\t\13\2"+
+ "\2\u0254\u0255\5\u00a7T\2\u0255\u0256\5\u00a7T\2\u0256\u0258\3\2\2\2\u0257"+
+ "\u024c\3\2\2\2\u0257\u024e\3\2\2\2\u0257\u0252\3\2\2\2\u0258\u00a2\3\2"+
+ "\2\2\u0259\u025a\7^\2\2\u025a\u025b\7z\2\2\u025b\u025c\5\u00a9U\2\u025c"+
+ "\u025d\5\u00a9U\2\u025d\u00a4\3\2\2\2\u025e\u025f\7^\2\2\u025f\u0260\7"+
+ "w\2\2\u0260\u0261\7}\2\2\u0261\u0263\3\2\2\2\u0262\u0264\5\u00a9U\2\u0263"+
+ "\u0262\3\2\2\2\u0264\u0265\3\2\2\2\u0265\u0263\3\2\2\2\u0265\u0266\3\2"+
+ "\2\2\u0266\u0267\3\2\2\2\u0267\u0268\7\177\2\2\u0268\u00a6\3\2\2\2\u0269"+
+ "\u026a\t\f\2\2\u026a\u00a8\3\2\2\2\u026b\u026c\t\r\2\2\u026c\u00aa\3\2"+
+ "\2\2\u026d\u026e\7/\2\2\u026e\u026f\7/\2\2\u026f\u0270\7]\2\2\u0270\u0271"+
+ "\3\2\2\2\u0271\u0272\5\u0091I\2\u0272\u0273\7_\2\2\u0273\u0274\3\2\2\2"+
+ "\u0274\u0275\bV\2\2\u0275\u00ac\3\2\2\2\u0276\u0277\7/\2\2\u0277\u0278"+
+ "\7/\2\2\u0278\u0296\3\2\2\2\u0279\u0297\3\2\2\2\u027a\u027e\7]\2\2\u027b"+
+ "\u027d\7?\2\2\u027c\u027b\3\2\2\2\u027d\u0280\3\2\2\2\u027e\u027c\3\2"+
+ "\2\2\u027e\u027f\3\2\2\2\u027f\u0297\3\2\2\2\u0280\u027e\3\2\2\2\u0281"+
+ "\u0285\7]\2\2\u0282\u0284\7?\2\2\u0283\u0282\3\2\2\2\u0284\u0287\3\2\2"+
+ "\2\u0285\u0283\3\2\2\2\u0285\u0286\3\2\2\2\u0286\u0288\3\2\2\2\u0287\u0285"+
+ "\3\2\2\2\u0288\u028c\n\16\2\2\u0289\u028b\n\17\2\2\u028a\u0289\3\2\2\2"+
+ "\u028b\u028e\3\2\2\2\u028c\u028a\3\2\2\2\u028c\u028d\3\2\2\2\u028d\u0297"+
+ "\3\2\2\2\u028e\u028c\3\2\2\2\u028f\u0293\n\20\2\2\u0290\u0292\n\17\2\2"+
+ "\u0291\u0290\3\2\2\2\u0292\u0295\3\2\2\2\u0293\u0291\3\2\2\2\u0293\u0294"+
+ "\3\2\2\2\u0294\u0297\3\2\2\2\u0295\u0293\3\2\2\2\u0296\u0279\3\2\2\2\u0296"+
+ "\u027a\3\2\2\2\u0296\u0281\3\2\2\2\u0296\u028f\3\2\2\2\u0297\u029b\3\2"+
+ "\2\2\u0298\u0299\7\17\2\2\u0299\u029c\7\f\2\2\u029a\u029c\t\21\2\2\u029b"+
+ "\u0298\3\2\2\2\u029b\u029a\3\2\2\2\u029c\u029d\3\2\2\2\u029d\u029e\bW"+
+ "\2\2\u029e\u00ae\3\2\2\2\u029f\u02a1\t\22\2\2\u02a0\u029f\3\2\2\2\u02a1"+
+ "\u02a2\3\2\2\2\u02a2\u02a0\3\2\2\2\u02a2\u02a3\3\2\2\2\u02a3\u02a4\3\2"+
+ "\2\2\u02a4\u02a5\bX\3\2\u02a5\u00b0\3\2\2\2\u02a6\u02a7\7%\2\2\u02a7\u02ab"+
+ "\7#\2\2\u02a8\u02aa\n\17\2\2\u02a9\u02a8\3\2\2\2\u02aa\u02ad\3\2\2\2\u02ab"+
+ "\u02a9\3\2\2\2\u02ab\u02ac\3\2\2\2\u02ac\u02ae\3\2\2\2\u02ad\u02ab\3\2"+
+ "\2\2\u02ae\u02af\bY\2\2\u02af\u00b2\3\2\2\2*\2\u01b1\u01b7\u01b9\u01c1"+
+ "\u01c3\u01d4\u01d8\u01dd\u01e4\u01e9\u01ef\u01f3\u01f9\u01fc\u0201\u0205"+
+ "\u020c\u0212\u0216\u021e\u0221\u0228\u022c\u0230\u0235\u0239\u023e\u0244"+
+ "\u024a\u0257\u0265\u027e\u0285\u028c\u0293\u0296\u029b\u02a2\u02ab\4\2"+
+ "\3\2\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/org/luapp/language/generator/luappLexer.tokens b/src/main/java/org/luapp/language/generator/luappLexer.tokens
index b349b4f..d15989f 100644
--- a/src/main/java/org/luapp/language/generator/luappLexer.tokens
+++ b/src/main/java/org/luapp/language/generator/luappLexer.tokens
@@ -65,19 +65,18 @@ T__63=64
T__64=65
T__65=66
T__66=67
-T__67=68
-NAME=69
-NORMALSTRING=70
-CHARSTRING=71
-LONGSTRING=72
-INT=73
-HEX=74
-FLOAT=75
-HEX_FLOAT=76
-COMMENT=77
-LINE_COMMENT=78
-WS=79
-SHEBANG=80
+NAME=68
+NORMALSTRING=69
+CHARSTRING=70
+LONGSTRING=71
+INT=72
+HEX=73
+FLOAT=74
+HEX_FLOAT=75
+COMMENT=76
+LINE_COMMENT=77
+WS=78
+SHEBANG=79
';'=1
'='=2
'break'=3
@@ -136,13 +135,12 @@ SHEBANG=80
'not'=56
'#'=57
'^'=58
-'new'=59
-'static'=60
-'get'=61
-'set'=62
-'constructor'=63
-'++'=64
-'+='=65
-'*='=66
-'/='=67
-'-='=68
+'static'=59
+'get'=60
+'set'=61
+'constructor'=62
+'++'=63
+'+='=64
+'*='=65
+'/='=66
+'-='=67
diff --git a/src/main/java/org/luapp/language/generator/luappListener.java b/src/main/java/org/luapp/language/generator/luappListener.java
index 5a3da7c..703f52b 100644
--- a/src/main/java/org/luapp/language/generator/luappListener.java
+++ b/src/main/java/org/luapp/language/generator/luappListener.java
@@ -377,16 +377,6 @@ public interface luappListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitString(luappParser.StringContext ctx);
- /**
- * Enter a parse tree produced by {@link luappParser#newclass}.
- * @param ctx the parse tree
- */
- void enterNewclass(luappParser.NewclassContext ctx);
- /**
- * Exit a parse tree produced by {@link luappParser#newclass}.
- * @param ctx the parse tree
- */
- void exitNewclass(luappParser.NewclassContext ctx);
/**
* Enter a parse tree produced by {@link luappParser#classdef}.
* @param ctx the parse tree
diff --git a/src/main/java/org/luapp/language/generator/luappParser.java b/src/main/java/org/luapp/language/generator/luappParser.java
index 41c1b7c..215c2e5 100644
--- a/src/main/java/org/luapp/language/generator/luappParser.java
+++ b/src/main/java/org/luapp/language/generator/luappParser.java
@@ -26,9 +26,8 @@ public class luappParser extends Parser {
T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66,
- T__66=67, T__67=68, NAME=69, NORMALSTRING=70, CHARSTRING=71, LONGSTRING=72,
- INT=73, HEX=74, FLOAT=75, HEX_FLOAT=76, COMMENT=77, LINE_COMMENT=78, WS=79,
- SHEBANG=80;
+ T__66=67, NAME=68, NORMALSTRING=69, CHARSTRING=70, LONGSTRING=71, INT=72,
+ HEX=73, FLOAT=74, HEX_FLOAT=75, COMMENT=76, LINE_COMMENT=77, WS=78, SHEBANG=79;
public static final int
RULE_chunk = 0, RULE_block = 1, RULE_stat = 2, RULE_retstat = 3, RULE_label = 4,
RULE_funcname = 5, RULE_classname = 6, RULE_abstractclassname = 7, RULE_varlist = 8,
@@ -39,11 +38,11 @@ public class luappParser extends Parser {
RULE_fieldsep = 25, RULE_operatorOr = 26, RULE_operatorAnd = 27, RULE_operatorComparison = 28,
RULE_operatorStrcat = 29, RULE_operatorAddSub = 30, RULE_operatorMulDivMod = 31,
RULE_operatorBitwise = 32, RULE_operatorUnary = 33, RULE_operatorPower = 34,
- RULE_number = 35, RULE_string = 36, RULE_newclass = 37, RULE_classdef = 38,
- RULE_classfunction = 39, RULE_classstaticfunction = 40, RULE_classgetorset = 41,
- RULE_classgetset = 42, RULE_constructor = 43, RULE_classmember = 44, RULE_classbody = 45,
- RULE_addOne = 46, RULE_plusEqual = 47, RULE_multiplyEqual = 48, RULE_divEqual = 49,
- RULE_minusEqual = 50, RULE_safeOperator = 51;
+ RULE_number = 35, RULE_string = 36, RULE_classdef = 37, RULE_classfunction = 38,
+ RULE_classstaticfunction = 39, RULE_classgetorset = 40, RULE_classgetset = 41,
+ RULE_constructor = 42, RULE_classmember = 43, RULE_classbody = 44, RULE_addOne = 45,
+ RULE_plusEqual = 46, RULE_multiplyEqual = 47, RULE_divEqual = 48, RULE_minusEqual = 49,
+ RULE_safeOperator = 50;
private static String[] makeRuleNames() {
return new String[] {
"chunk", "block", "stat", "retstat", "label", "funcname", "classname",
@@ -52,10 +51,10 @@ private static String[] makeRuleNames() {
"functiondef", "funcbody", "parlist", "tableconstructor", "fieldlist",
"field", "fieldsep", "operatorOr", "operatorAnd", "operatorComparison",
"operatorStrcat", "operatorAddSub", "operatorMulDivMod", "operatorBitwise",
- "operatorUnary", "operatorPower", "number", "string", "newclass", "classdef",
- "classfunction", "classstaticfunction", "classgetorset", "classgetset",
- "constructor", "classmember", "classbody", "addOne", "plusEqual", "multiplyEqual",
- "divEqual", "minusEqual", "safeOperator"
+ "operatorUnary", "operatorPower", "number", "string", "classdef", "classfunction",
+ "classstaticfunction", "classgetorset", "classgetset", "constructor",
+ "classmember", "classbody", "addOne", "plusEqual", "multiplyEqual", "divEqual",
+ "minusEqual", "safeOperator"
};
}
public static final String[] ruleNames = makeRuleNames();
@@ -68,9 +67,8 @@ private static String[] makeLiteralNames() {
"'return'", "'::'", "'.'", "':'", "'nil'", "'false'", "'true'", "'...'",
"'('", "')'", "'['", "']'", "'{'", "'}'", "'or'", "'and'", "'<'", "'>'",
"'<='", "'>='", "'~='", "'=='", "'..'", "'+'", "'-'", "'*'", "'/'", "'%'",
- "'//'", "'&'", "'|'", "'~'", "'<<'", "'>>'", "'not'", "'#'", "'^'", "'new'",
- "'static'", "'get'", "'set'", "'constructor'", "'++'", "'+='", "'*='",
- "'/='", "'-='"
+ "'//'", "'&'", "'|'", "'~'", "'<<'", "'>>'", "'not'", "'#'", "'^'", "'static'",
+ "'get'", "'set'", "'constructor'", "'++'", "'+='", "'*='", "'/='", "'-='"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -81,7 +79,7 @@ private static String[] makeSymbolicNames() {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, "NAME", "NORMALSTRING",
+ null, null, null, null, null, null, null, null, "NAME", "NORMALSTRING",
"CHARSTRING", "LONGSTRING", "INT", "HEX", "FLOAT", "HEX_FLOAT", "COMMENT",
"LINE_COMMENT", "WS", "SHEBANG"
};
@@ -167,9 +165,9 @@ public final ChunkContext chunk() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(104);
+ setState(102);
block();
- setState(105);
+ setState(103);
match(EOF);
}
}
@@ -220,26 +218,26 @@ public final BlockContext block() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(110);
+ setState(108);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__3) | (1L << T__4) | (1L << T__6) | (1L << T__7) | (1L << T__9) | (1L << T__13) | (1L << T__16) | (1L << T__17) | (1L << T__19) | (1L << T__20) | (1L << T__22) | (1L << T__29))) != 0) || _la==NAME) {
{
{
- setState(107);
+ setState(105);
stat();
}
}
- setState(112);
+ setState(110);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(114);
+ setState(112);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__21) {
{
- setState(113);
+ setState(111);
retstat();
}
}
@@ -304,9 +302,6 @@ public AbstractclassnameContext abstractclassname() {
public SafeOperatorContext safeOperator() {
return getRuleContext(SafeOperatorContext.class,0);
}
- public NewclassContext newclass() {
- return getRuleContext(NewclassContext.class,0);
- }
public MinusEqualContext minusEqual() {
return getRuleContext(MinusEqualContext.class,0);
}
@@ -334,292 +329,292 @@ public final StatContext stat() throws RecognitionException {
enterRule(_localctx, 4, RULE_stat);
int _la;
try {
- setState(230);
+ setState(221);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(116);
+ setState(114);
match(T__0);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(117);
+ setState(115);
varlist();
- setState(118);
+ setState(116);
match(T__1);
- setState(119);
+ setState(117);
explist();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(121);
+ setState(119);
functioncall();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(122);
+ setState(120);
label();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(123);
+ setState(121);
match(T__2);
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(124);
+ setState(122);
match(T__3);
- setState(125);
+ setState(123);
match(NAME);
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(126);
+ setState(124);
match(T__4);
- setState(127);
+ setState(125);
block();
- setState(128);
+ setState(126);
match(T__5);
}
break;
case 8:
enterOuterAlt(_localctx, 8);
{
- setState(130);
+ setState(128);
match(T__6);
- setState(131);
+ setState(129);
exp(0);
- setState(132);
+ setState(130);
match(T__4);
- setState(133);
+ setState(131);
block();
- setState(134);
+ setState(132);
match(T__5);
}
break;
case 9:
enterOuterAlt(_localctx, 9);
{
- setState(136);
+ setState(134);
match(T__7);
- setState(137);
+ setState(135);
block();
- setState(138);
+ setState(136);
match(T__8);
- setState(139);
+ setState(137);
exp(0);
}
break;
case 10:
enterOuterAlt(_localctx, 10);
{
- setState(141);
+ setState(139);
match(T__9);
- setState(142);
+ setState(140);
exp(0);
- setState(143);
+ setState(141);
match(T__10);
- setState(144);
+ setState(142);
block();
- setState(152);
+ setState(150);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__11) {
{
{
- setState(145);
+ setState(143);
match(T__11);
- setState(146);
+ setState(144);
exp(0);
- setState(147);
+ setState(145);
match(T__10);
- setState(148);
+ setState(146);
block();
}
}
- setState(154);
+ setState(152);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(157);
+ setState(155);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__12) {
{
- setState(155);
+ setState(153);
match(T__12);
- setState(156);
+ setState(154);
block();
}
}
- setState(159);
+ setState(157);
match(T__5);
}
break;
case 11:
enterOuterAlt(_localctx, 11);
{
- setState(161);
+ setState(159);
match(T__13);
- setState(162);
+ setState(160);
match(NAME);
- setState(163);
+ setState(161);
match(T__1);
- setState(164);
+ setState(162);
exp(0);
- setState(165);
+ setState(163);
match(T__14);
- setState(166);
+ setState(164);
exp(0);
- setState(169);
+ setState(167);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__14) {
{
- setState(167);
+ setState(165);
match(T__14);
- setState(168);
+ setState(166);
exp(0);
}
}
- setState(171);
+ setState(169);
match(T__4);
- setState(172);
+ setState(170);
block();
- setState(173);
+ setState(171);
match(T__5);
}
break;
case 12:
enterOuterAlt(_localctx, 12);
{
- setState(175);
+ setState(173);
match(T__13);
- setState(176);
+ setState(174);
namelist();
- setState(177);
+ setState(175);
match(T__15);
- setState(178);
+ setState(176);
explist();
- setState(179);
+ setState(177);
match(T__4);
- setState(180);
+ setState(178);
block();
- setState(181);
+ setState(179);
match(T__5);
}
break;
case 13:
enterOuterAlt(_localctx, 13);
{
- setState(183);
+ setState(181);
match(T__16);
- setState(184);
+ setState(182);
funcname();
- setState(185);
+ setState(183);
funcbody();
}
break;
case 14:
enterOuterAlt(_localctx, 14);
{
- setState(187);
+ setState(185);
match(T__17);
- setState(188);
+ setState(186);
classname();
- setState(191);
+ setState(189);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__18) {
{
- setState(189);
+ setState(187);
match(T__18);
- setState(190);
+ setState(188);
abstractclassname();
}
}
- setState(193);
+ setState(191);
classbody();
}
break;
case 15:
enterOuterAlt(_localctx, 15);
{
- setState(196);
+ setState(194);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__19) {
{
- setState(195);
+ setState(193);
match(T__19);
}
}
- setState(198);
+ setState(196);
match(T__17);
- setState(199);
+ setState(197);
classname();
- setState(202);
+ setState(200);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__18) {
{
- setState(200);
+ setState(198);
match(T__18);
- setState(201);
+ setState(199);
abstractclassname();
}
}
- setState(204);
+ setState(202);
classbody();
}
break;
case 16:
enterOuterAlt(_localctx, 16);
{
- setState(206);
+ setState(204);
match(T__19);
- setState(207);
+ setState(205);
match(T__16);
- setState(208);
+ setState(206);
match(NAME);
- setState(209);
+ setState(207);
funcbody();
}
break;
case 17:
enterOuterAlt(_localctx, 17);
{
- setState(210);
+ setState(208);
match(T__19);
- setState(211);
+ setState(209);
namelist();
- setState(214);
+ setState(212);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__1) {
{
- setState(212);
+ setState(210);
match(T__1);
- setState(213);
+ setState(211);
explist();
}
}
@@ -629,49 +624,28 @@ public final StatContext stat() throws RecognitionException {
case 18:
enterOuterAlt(_localctx, 18);
{
- setState(216);
+ setState(214);
match(T__20);
- setState(217);
+ setState(215);
safeOperator();
}
break;
case 19:
enterOuterAlt(_localctx, 19);
{
- setState(219);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==T__19) {
- {
- setState(218);
- match(T__19);
- }
- }
-
- setState(221);
- namelist();
- setState(222);
- match(T__1);
- setState(223);
- newclass();
- }
- break;
- case 20:
- enterOuterAlt(_localctx, 20);
- {
- setState(226);
+ setState(217);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__19) {
{
- setState(225);
+ setState(216);
match(T__19);
}
}
- setState(228);
+ setState(219);
match(NAME);
- setState(229);
+ setState(220);
minusEqual();
}
break;
@@ -718,24 +692,24 @@ public final RetstatContext retstat() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(232);
+ setState(223);
match(T__21);
- setState(234);
+ setState(225);
_errHandler.sync(this);
_la = _input.LA(1);
if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__25 - 17)) | (1L << (T__26 - 17)) | (1L << (T__27 - 17)) | (1L << (T__28 - 17)) | (1L << (T__29 - 17)) | (1L << (T__33 - 17)) | (1L << (T__45 - 17)) | (1L << (T__52 - 17)) | (1L << (T__55 - 17)) | (1L << (T__56 - 17)) | (1L << (NAME - 17)) | (1L << (NORMALSTRING - 17)) | (1L << (CHARSTRING - 17)) | (1L << (LONGSTRING - 17)) | (1L << (INT - 17)) | (1L << (HEX - 17)) | (1L << (FLOAT - 17)) | (1L << (HEX_FLOAT - 17)))) != 0)) {
{
- setState(233);
+ setState(224);
explist();
}
}
- setState(237);
+ setState(228);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__0) {
{
- setState(236);
+ setState(227);
match(T__0);
}
}
@@ -780,11 +754,11 @@ public final LabelContext label() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(239);
+ setState(230);
match(T__22);
- setState(240);
+ setState(231);
match(NAME);
- setState(241);
+ setState(232);
match(T__22);
}
}
@@ -830,32 +804,32 @@ public final FuncnameContext funcname() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(243);
+ setState(234);
match(NAME);
- setState(248);
+ setState(239);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__23) {
{
{
- setState(244);
+ setState(235);
match(T__23);
- setState(245);
+ setState(236);
match(NAME);
}
}
- setState(250);
+ setState(241);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(253);
+ setState(244);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__24) {
{
- setState(251);
+ setState(242);
match(T__24);
- setState(252);
+ setState(243);
match(NAME);
}
}
@@ -902,7 +876,7 @@ public final ClassnameContext classname() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(255);
+ setState(246);
var();
}
}
@@ -946,7 +920,7 @@ public final AbstractclassnameContext abstractclassname() throws RecognitionExce
try {
enterOuterAlt(_localctx, 1);
{
- setState(257);
+ setState(248);
var();
}
}
@@ -994,21 +968,21 @@ public final VarlistContext varlist() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(259);
+ setState(250);
var();
- setState(264);
+ setState(255);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__14) {
{
{
- setState(260);
+ setState(251);
match(T__14);
- setState(261);
+ setState(252);
var();
}
}
- setState(266);
+ setState(257);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1056,25 +1030,25 @@ public final NamelistContext namelist() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(267);
+ setState(258);
match(NAME);
- setState(272);
+ setState(263);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,17,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(268);
+ setState(259);
match(T__14);
- setState(269);
+ setState(260);
match(NAME);
}
}
}
- setState(274);
+ setState(265);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,17,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
}
}
}
@@ -1122,21 +1096,21 @@ public final ExplistContext explist() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(275);
+ setState(266);
exp(0);
- setState(280);
+ setState(271);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__14) {
{
{
- setState(276);
+ setState(267);
match(T__14);
- setState(277);
+ setState(268);
exp(0);
}
}
- setState(282);
+ setState(273);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1236,24 +1210,24 @@ private ExpContext exp(int _p) throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(296);
+ setState(287);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__25:
{
- setState(284);
+ setState(275);
match(T__25);
}
break;
case T__26:
{
- setState(285);
+ setState(276);
match(T__26);
}
break;
case T__27:
{
- setState(286);
+ setState(277);
match(T__27);
}
break;
@@ -1262,7 +1236,7 @@ private ExpContext exp(int _p) throws RecognitionException {
case FLOAT:
case HEX_FLOAT:
{
- setState(287);
+ setState(278);
number();
}
break;
@@ -1270,32 +1244,32 @@ private ExpContext exp(int _p) throws RecognitionException {
case CHARSTRING:
case LONGSTRING:
{
- setState(288);
+ setState(279);
string();
}
break;
case T__28:
{
- setState(289);
+ setState(280);
match(T__28);
}
break;
case T__16:
{
- setState(290);
+ setState(281);
functiondef();
}
break;
case T__29:
case NAME:
{
- setState(291);
+ setState(282);
prefixexp();
}
break;
case T__33:
{
- setState(292);
+ setState(283);
tableconstructor();
}
break;
@@ -1304,9 +1278,9 @@ private ExpContext exp(int _p) throws RecognitionException {
case T__55:
case T__56:
{
- setState(293);
+ setState(284);
operatorUnary();
- setState(294);
+ setState(285);
exp(8);
}
break;
@@ -1314,26 +1288,26 @@ private ExpContext exp(int _p) throws RecognitionException {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(332);
+ setState(323);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(330);
+ setState(321);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) {
case 1:
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(298);
+ setState(289);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(299);
+ setState(290);
operatorPower();
- setState(300);
+ setState(291);
exp(9);
}
break;
@@ -1341,11 +1315,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(302);
+ setState(293);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(303);
+ setState(294);
operatorMulDivMod();
- setState(304);
+ setState(295);
exp(8);
}
break;
@@ -1353,11 +1327,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(306);
+ setState(297);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(307);
+ setState(298);
operatorAddSub();
- setState(308);
+ setState(299);
exp(7);
}
break;
@@ -1365,11 +1339,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(310);
+ setState(301);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(311);
+ setState(302);
operatorStrcat();
- setState(312);
+ setState(303);
exp(5);
}
break;
@@ -1377,11 +1351,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(314);
+ setState(305);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(315);
+ setState(306);
operatorComparison();
- setState(316);
+ setState(307);
exp(5);
}
break;
@@ -1389,11 +1363,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(318);
+ setState(309);
if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(319);
+ setState(310);
operatorAnd();
- setState(320);
+ setState(311);
exp(4);
}
break;
@@ -1401,11 +1375,11 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(322);
+ setState(313);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(323);
+ setState(314);
operatorOr();
- setState(324);
+ setState(315);
exp(3);
}
break;
@@ -1413,20 +1387,20 @@ private ExpContext exp(int _p) throws RecognitionException {
{
_localctx = new ExpContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_exp);
- setState(326);
+ setState(317);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(327);
+ setState(318);
operatorBitwise();
- setState(328);
+ setState(319);
exp(2);
}
break;
}
}
}
- setState(334);
+ setState(325);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
}
}
}
@@ -1477,23 +1451,23 @@ public final PrefixexpContext prefixexp() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(335);
+ setState(326);
varOrExp();
- setState(339);
+ setState(330);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(336);
+ setState(327);
nameAndArgs();
}
}
}
- setState(341);
+ setState(332);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
}
}
}
@@ -1544,9 +1518,9 @@ public final FunctioncallContext functioncall() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(342);
+ setState(333);
varOrExp();
- setState(344);
+ setState(335);
_errHandler.sync(this);
_alt = 1;
do {
@@ -1554,7 +1528,7 @@ public final FunctioncallContext functioncall() throws RecognitionException {
case 1:
{
{
- setState(343);
+ setState(334);
nameAndArgs();
}
}
@@ -1562,9 +1536,9 @@ public final FunctioncallContext functioncall() throws RecognitionException {
default:
throw new NoViableAltException(this);
}
- setState(346);
+ setState(337);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,23,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
}
}
@@ -1609,24 +1583,24 @@ public final VarOrExpContext varOrExp() throws RecognitionException {
VarOrExpContext _localctx = new VarOrExpContext(_ctx, getState());
enterRule(_localctx, 28, RULE_varOrExp);
try {
- setState(353);
+ setState(344);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(348);
+ setState(339);
var();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(349);
+ setState(340);
match(T__29);
- setState(350);
+ setState(341);
exp(0);
- setState(351);
+ setState(342);
match(T__30);
}
break;
@@ -1680,45 +1654,45 @@ public final VarContext var() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(361);
+ setState(352);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NAME:
{
- setState(355);
+ setState(346);
match(NAME);
}
break;
case T__29:
{
- setState(356);
+ setState(347);
match(T__29);
- setState(357);
+ setState(348);
exp(0);
- setState(358);
+ setState(349);
match(T__30);
- setState(359);
+ setState(350);
varSuffix();
}
break;
default:
throw new NoViableAltException(this);
}
- setState(366);
+ setState(357);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(363);
+ setState(354);
varSuffix();
}
}
}
- setState(368);
+ setState(359);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
}
}
}
@@ -1770,38 +1744,38 @@ public final VarSuffixContext varSuffix() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(372);
+ setState(363);
_errHandler.sync(this);
_la = _input.LA(1);
while (((((_la - 25)) & ~0x3f) == 0 && ((1L << (_la - 25)) & ((1L << (T__24 - 25)) | (1L << (T__29 - 25)) | (1L << (T__33 - 25)) | (1L << (NORMALSTRING - 25)) | (1L << (CHARSTRING - 25)) | (1L << (LONGSTRING - 25)))) != 0)) {
{
{
- setState(369);
+ setState(360);
nameAndArgs();
}
}
- setState(374);
+ setState(365);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(381);
+ setState(372);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__31:
{
- setState(375);
+ setState(366);
match(T__31);
- setState(376);
+ setState(367);
exp(0);
- setState(377);
+ setState(368);
match(T__32);
}
break;
case T__23:
{
- setState(379);
+ setState(370);
match(T__23);
- setState(380);
+ setState(371);
match(NAME);
}
break;
@@ -1852,19 +1826,19 @@ public final NameAndArgsContext nameAndArgs() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(385);
+ setState(376);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__24) {
{
- setState(383);
+ setState(374);
match(T__24);
- setState(384);
+ setState(375);
match(NAME);
}
}
- setState(387);
+ setState(378);
args();
}
}
@@ -1913,32 +1887,32 @@ public final ArgsContext args() throws RecognitionException {
enterRule(_localctx, 36, RULE_args);
int _la;
try {
- setState(396);
+ setState(387);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__29:
enterOuterAlt(_localctx, 1);
{
- setState(389);
+ setState(380);
match(T__29);
- setState(391);
+ setState(382);
_errHandler.sync(this);
_la = _input.LA(1);
if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__25 - 17)) | (1L << (T__26 - 17)) | (1L << (T__27 - 17)) | (1L << (T__28 - 17)) | (1L << (T__29 - 17)) | (1L << (T__33 - 17)) | (1L << (T__45 - 17)) | (1L << (T__52 - 17)) | (1L << (T__55 - 17)) | (1L << (T__56 - 17)) | (1L << (NAME - 17)) | (1L << (NORMALSTRING - 17)) | (1L << (CHARSTRING - 17)) | (1L << (LONGSTRING - 17)) | (1L << (INT - 17)) | (1L << (HEX - 17)) | (1L << (FLOAT - 17)) | (1L << (HEX_FLOAT - 17)))) != 0)) {
{
- setState(390);
+ setState(381);
explist();
}
}
- setState(393);
+ setState(384);
match(T__30);
}
break;
case T__33:
enterOuterAlt(_localctx, 2);
{
- setState(394);
+ setState(385);
tableconstructor();
}
break;
@@ -1947,7 +1921,7 @@ public final ArgsContext args() throws RecognitionException {
case LONGSTRING:
enterOuterAlt(_localctx, 3);
{
- setState(395);
+ setState(386);
string();
}
break;
@@ -1995,9 +1969,9 @@ public final FunctiondefContext functiondef() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(398);
+ setState(389);
match(T__16);
- setState(399);
+ setState(390);
funcbody();
}
}
@@ -2045,23 +2019,23 @@ public final FuncbodyContext funcbody() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(401);
+ setState(392);
match(T__29);
- setState(403);
+ setState(394);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__28 || _la==NAME) {
{
- setState(402);
+ setState(393);
parlist();
}
}
- setState(405);
+ setState(396);
match(T__30);
- setState(406);
+ setState(397);
block();
- setState(407);
+ setState(398);
match(T__5);
}
}
@@ -2104,22 +2078,22 @@ public final ParlistContext parlist() throws RecognitionException {
enterRule(_localctx, 42, RULE_parlist);
int _la;
try {
- setState(415);
+ setState(406);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NAME:
enterOuterAlt(_localctx, 1);
{
- setState(409);
+ setState(400);
namelist();
- setState(412);
+ setState(403);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__14) {
{
- setState(410);
+ setState(401);
match(T__14);
- setState(411);
+ setState(402);
match(T__28);
}
}
@@ -2129,7 +2103,7 @@ public final ParlistContext parlist() throws RecognitionException {
case T__28:
enterOuterAlt(_localctx, 2);
{
- setState(414);
+ setState(405);
match(T__28);
}
break;
@@ -2178,19 +2152,19 @@ public final TableconstructorContext tableconstructor() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(417);
+ setState(408);
match(T__33);
- setState(419);
+ setState(410);
_errHandler.sync(this);
_la = _input.LA(1);
if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__25 - 17)) | (1L << (T__26 - 17)) | (1L << (T__27 - 17)) | (1L << (T__28 - 17)) | (1L << (T__29 - 17)) | (1L << (T__31 - 17)) | (1L << (T__33 - 17)) | (1L << (T__45 - 17)) | (1L << (T__52 - 17)) | (1L << (T__55 - 17)) | (1L << (T__56 - 17)) | (1L << (NAME - 17)) | (1L << (NORMALSTRING - 17)) | (1L << (CHARSTRING - 17)) | (1L << (LONGSTRING - 17)) | (1L << (INT - 17)) | (1L << (HEX - 17)) | (1L << (FLOAT - 17)) | (1L << (HEX_FLOAT - 17)))) != 0)) {
{
- setState(418);
+ setState(409);
fieldlist();
}
}
- setState(421);
+ setState(412);
match(T__34);
}
}
@@ -2245,32 +2219,32 @@ public final FieldlistContext fieldlist() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(423);
+ setState(414);
field();
- setState(429);
+ setState(420);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,36,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,35,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(424);
+ setState(415);
fieldsep();
- setState(425);
+ setState(416);
field();
}
}
}
- setState(431);
+ setState(422);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,36,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,35,_ctx);
}
- setState(433);
+ setState(424);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__0 || _la==T__14) {
{
- setState(432);
+ setState(423);
fieldsep();
}
}
@@ -2319,39 +2293,39 @@ public final FieldContext field() throws RecognitionException {
FieldContext _localctx = new FieldContext(_ctx, getState());
enterRule(_localctx, 48, RULE_field);
try {
- setState(445);
+ setState(436);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(435);
+ setState(426);
match(T__31);
- setState(436);
+ setState(427);
exp(0);
- setState(437);
+ setState(428);
match(T__32);
- setState(438);
+ setState(429);
match(T__1);
- setState(439);
+ setState(430);
exp(0);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(441);
+ setState(432);
match(NAME);
- setState(442);
+ setState(433);
match(T__1);
- setState(443);
+ setState(434);
exp(0);
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(444);
+ setState(435);
exp(0);
}
break;
@@ -2395,7 +2369,7 @@ public final FieldsepContext fieldsep() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(447);
+ setState(438);
_la = _input.LA(1);
if ( !(_la==T__0 || _la==T__14) ) {
_errHandler.recoverInline(this);
@@ -2444,7 +2418,7 @@ public final OperatorOrContext operatorOr() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(449);
+ setState(440);
match(T__35);
}
}
@@ -2485,7 +2459,7 @@ public final OperatorAndContext operatorAnd() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(451);
+ setState(442);
match(T__36);
}
}
@@ -2527,7 +2501,7 @@ public final OperatorComparisonContext operatorComparison() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(453);
+ setState(444);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2576,7 +2550,7 @@ public final OperatorStrcatContext operatorStrcat() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(455);
+ setState(446);
match(T__43);
}
}
@@ -2618,7 +2592,7 @@ public final OperatorAddSubContext operatorAddSub() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(457);
+ setState(448);
_la = _input.LA(1);
if ( !(_la==T__44 || _la==T__45) ) {
_errHandler.recoverInline(this);
@@ -2668,7 +2642,7 @@ public final OperatorMulDivModContext operatorMulDivMod() throws RecognitionExce
try {
enterOuterAlt(_localctx, 1);
{
- setState(459);
+ setState(450);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2718,7 +2692,7 @@ public final OperatorBitwiseContext operatorBitwise() throws RecognitionExceptio
try {
enterOuterAlt(_localctx, 1);
{
- setState(461);
+ setState(452);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2768,7 +2742,7 @@ public final OperatorUnaryContext operatorUnary() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(463);
+ setState(454);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__45) | (1L << T__52) | (1L << T__55) | (1L << T__56))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2817,7 +2791,7 @@ public final OperatorPowerContext operatorPower() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(465);
+ setState(456);
match(T__57);
}
}
@@ -2863,9 +2837,9 @@ public final NumberContext number() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(467);
+ setState(458);
_la = _input.LA(1);
- if ( !(((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (INT - 73)) | (1L << (HEX - 73)) | (1L << (FLOAT - 73)) | (1L << (HEX_FLOAT - 73)))) != 0)) ) {
+ if ( !(((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (INT - 72)) | (1L << (HEX - 72)) | (1L << (FLOAT - 72)) | (1L << (HEX_FLOAT - 72)))) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2916,9 +2890,9 @@ public final StringContext string() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(469);
+ setState(460);
_la = _input.LA(1);
- if ( !(((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (NORMALSTRING - 70)) | (1L << (CHARSTRING - 70)) | (1L << (LONGSTRING - 70)))) != 0)) ) {
+ if ( !(((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (NORMALSTRING - 69)) | (1L << (CHARSTRING - 69)) | (1L << (LONGSTRING - 69)))) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2939,57 +2913,6 @@ public final StringContext string() throws RecognitionException {
return _localctx;
}
- public static class NewclassContext extends ParserRuleContext {
- public FuncnameContext funcname() {
- return getRuleContext(FuncnameContext.class,0);
- }
- public ArgsContext args() {
- return getRuleContext(ArgsContext.class,0);
- }
- public NewclassContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_newclass; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof luappListener ) ((luappListener)listener).enterNewclass(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof luappListener ) ((luappListener)listener).exitNewclass(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof luappVisitor ) return ((luappVisitor extends T>)visitor).visitNewclass(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final NewclassContext newclass() throws RecognitionException {
- NewclassContext _localctx = new NewclassContext(_ctx, getState());
- enterRule(_localctx, 74, RULE_newclass);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(471);
- match(T__58);
- setState(472);
- funcname();
- setState(473);
- args();
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
public static class ClassdefContext extends ParserRuleContext {
public TerminalNode NAME() { return getToken(luappParser.NAME, 0); }
public ClassbodyContext classbody() {
@@ -3016,15 +2939,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClassdefContext classdef() throws RecognitionException {
ClassdefContext _localctx = new ClassdefContext(_ctx, getState());
- enterRule(_localctx, 76, RULE_classdef);
+ enterRule(_localctx, 74, RULE_classdef);
try {
enterOuterAlt(_localctx, 1);
{
- setState(475);
+ setState(462);
match(T__17);
- setState(476);
+ setState(463);
match(NAME);
- setState(477);
+ setState(464);
classbody();
}
}
@@ -3067,15 +2990,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClassfunctionContext classfunction() throws RecognitionException {
ClassfunctionContext _localctx = new ClassfunctionContext(_ctx, getState());
- enterRule(_localctx, 78, RULE_classfunction);
+ enterRule(_localctx, 76, RULE_classfunction);
try {
enterOuterAlt(_localctx, 1);
{
- setState(479);
+ setState(466);
match(T__16);
- setState(480);
+ setState(467);
funcname();
- setState(481);
+ setState(468);
funcbody();
}
}
@@ -3118,17 +3041,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClassstaticfunctionContext classstaticfunction() throws RecognitionException {
ClassstaticfunctionContext _localctx = new ClassstaticfunctionContext(_ctx, getState());
- enterRule(_localctx, 80, RULE_classstaticfunction);
+ enterRule(_localctx, 78, RULE_classstaticfunction);
try {
enterOuterAlt(_localctx, 1);
{
- setState(483);
- match(T__59);
- setState(484);
+ setState(470);
+ match(T__58);
+ setState(471);
match(T__16);
- setState(485);
+ setState(472);
funcname();
- setState(486);
+ setState(473);
funcbody();
}
}
@@ -3165,14 +3088,14 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClassgetorsetContext classgetorset() throws RecognitionException {
ClassgetorsetContext _localctx = new ClassgetorsetContext(_ctx, getState());
- enterRule(_localctx, 82, RULE_classgetorset);
+ enterRule(_localctx, 80, RULE_classgetorset);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(488);
+ setState(475);
_la = _input.LA(1);
- if ( !(_la==T__60 || _la==T__61) ) {
+ if ( !(_la==T__59 || _la==T__60) ) {
_errHandler.recoverInline(this);
}
else {
@@ -3222,30 +3145,30 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClassgetsetContext classgetset() throws RecognitionException {
ClassgetsetContext _localctx = new ClassgetsetContext(_ctx, getState());
- enterRule(_localctx, 84, RULE_classgetset);
+ enterRule(_localctx, 82, RULE_classgetset);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(490);
+ setState(477);
match(NAME);
- setState(491);
+ setState(478);
match(T__33);
- setState(493);
+ setState(480);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(492);
+ setState(479);
classgetorset();
}
}
- setState(495);
+ setState(482);
_errHandler.sync(this);
_la = _input.LA(1);
- } while ( _la==T__60 || _la==T__61 );
- setState(497);
+ } while ( _la==T__59 || _la==T__60 );
+ setState(484);
match(T__34);
}
}
@@ -3288,30 +3211,30 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ConstructorContext constructor() throws RecognitionException {
ConstructorContext _localctx = new ConstructorContext(_ctx, getState());
- enterRule(_localctx, 86, RULE_constructor);
+ enterRule(_localctx, 84, RULE_constructor);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(499);
- match(T__62);
- setState(500);
+ setState(486);
+ match(T__61);
+ setState(487);
match(T__29);
- setState(502);
+ setState(489);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__28 || _la==NAME) {
{
- setState(501);
+ setState(488);
parlist();
}
}
- setState(504);
+ setState(491);
match(T__30);
- setState(505);
+ setState(492);
block();
- setState(506);
+ setState(493);
match(T__5);
}
}
@@ -3357,29 +3280,29 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClassmemberContext classmember() throws RecognitionException {
ClassmemberContext _localctx = new ClassmemberContext(_ctx, getState());
- enterRule(_localctx, 88, RULE_classmember);
+ enterRule(_localctx, 86, RULE_classmember);
try {
- setState(511);
+ setState(498);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__16:
enterOuterAlt(_localctx, 1);
{
- setState(508);
+ setState(495);
classfunction();
}
break;
case NAME:
enterOuterAlt(_localctx, 2);
{
- setState(509);
+ setState(496);
classgetset();
}
break;
- case T__62:
+ case T__61:
enterOuterAlt(_localctx, 3);
{
- setState(510);
+ setState(497);
constructor();
}
break;
@@ -3444,40 +3367,40 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ClassbodyContext classbody() throws RecognitionException {
ClassbodyContext _localctx = new ClassbodyContext(_ctx, getState());
- enterRule(_localctx, 90, RULE_classbody);
+ enterRule(_localctx, 88, RULE_classbody);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(519);
+ setState(506);
_errHandler.sync(this);
_la = _input.LA(1);
- while (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__59 - 17)) | (1L << (T__62 - 17)) | (1L << (NAME - 17)))) != 0)) {
+ while (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__58 - 17)) | (1L << (T__61 - 17)) | (1L << (NAME - 17)))) != 0)) {
{
- setState(517);
+ setState(504);
_errHandler.sync(this);
switch (_input.LA(1)) {
- case T__59:
+ case T__58:
{
- setState(513);
+ setState(500);
classstaticfunction();
}
break;
case T__16:
{
- setState(514);
+ setState(501);
classfunction();
}
break;
case NAME:
{
- setState(515);
+ setState(502);
classgetset();
}
break;
- case T__62:
+ case T__61:
{
- setState(516);
+ setState(503);
constructor();
}
break;
@@ -3485,11 +3408,11 @@ public final ClassbodyContext classbody() throws RecognitionException {
throw new NoViableAltException(this);
}
}
- setState(521);
+ setState(508);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(522);
+ setState(509);
match(T__5);
}
}
@@ -3527,14 +3450,14 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final AddOneContext addOne() throws RecognitionException {
AddOneContext _localctx = new AddOneContext(_ctx, getState());
- enterRule(_localctx, 92, RULE_addOne);
+ enterRule(_localctx, 90, RULE_addOne);
try {
enterOuterAlt(_localctx, 1);
{
- setState(524);
+ setState(511);
match(NAME);
- setState(525);
- match(T__63);
+ setState(512);
+ match(T__62);
}
}
catch (RecognitionException re) {
@@ -3571,14 +3494,14 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PlusEqualContext plusEqual() throws RecognitionException {
PlusEqualContext _localctx = new PlusEqualContext(_ctx, getState());
- enterRule(_localctx, 94, RULE_plusEqual);
+ enterRule(_localctx, 92, RULE_plusEqual);
try {
enterOuterAlt(_localctx, 1);
{
- setState(527);
+ setState(514);
match(NAME);
- setState(528);
- match(T__64);
+ setState(515);
+ match(T__63);
}
}
catch (RecognitionException re) {
@@ -3615,14 +3538,14 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MultiplyEqualContext multiplyEqual() throws RecognitionException {
MultiplyEqualContext _localctx = new MultiplyEqualContext(_ctx, getState());
- enterRule(_localctx, 96, RULE_multiplyEqual);
+ enterRule(_localctx, 94, RULE_multiplyEqual);
try {
enterOuterAlt(_localctx, 1);
{
- setState(530);
+ setState(517);
match(NAME);
- setState(531);
- match(T__65);
+ setState(518);
+ match(T__64);
}
}
catch (RecognitionException re) {
@@ -3659,14 +3582,14 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final DivEqualContext divEqual() throws RecognitionException {
DivEqualContext _localctx = new DivEqualContext(_ctx, getState());
- enterRule(_localctx, 98, RULE_divEqual);
+ enterRule(_localctx, 96, RULE_divEqual);
try {
enterOuterAlt(_localctx, 1);
{
- setState(533);
+ setState(520);
match(NAME);
- setState(534);
- match(T__66);
+ setState(521);
+ match(T__65);
}
}
catch (RecognitionException re) {
@@ -3703,14 +3626,14 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final MinusEqualContext minusEqual() throws RecognitionException {
MinusEqualContext _localctx = new MinusEqualContext(_ctx, getState());
- enterRule(_localctx, 100, RULE_minusEqual);
+ enterRule(_localctx, 98, RULE_minusEqual);
try {
enterOuterAlt(_localctx, 1);
{
- setState(536);
+ setState(523);
match(NAME);
- setState(537);
- match(T__67);
+ setState(524);
+ match(T__66);
}
}
catch (RecognitionException re) {
@@ -3749,11 +3672,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SafeOperatorContext safeOperator() throws RecognitionException {
SafeOperatorContext _localctx = new SafeOperatorContext(_ctx, getState());
- enterRule(_localctx, 102, RULE_safeOperator);
+ enterRule(_localctx, 100, RULE_safeOperator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(539);
+ setState(526);
var();
}
}
@@ -3798,203 +3721,198 @@ private boolean exp_sempred(ExpContext _localctx, int predIndex) {
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3R\u0220\4\2\t\2\4"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3Q\u0213\4\2\t\2\4"+
"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
- "\64\4\65\t\65\3\2\3\2\3\2\3\3\7\3o\n\3\f\3\16\3r\13\3\3\3\5\3u\n\3\3\4"+
- "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3"+
- "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u0099"+
- "\n\4\f\4\16\4\u009c\13\4\3\4\3\4\5\4\u00a0\n\4\3\4\3\4\3\4\3\4\3\4\3\4"+
- "\3\4\3\4\3\4\3\4\5\4\u00ac\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4"+
- "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u00c2\n\4\3\4\3\4\3\4\5\4"+
- "\u00c7\n\4\3\4\3\4\3\4\3\4\5\4\u00cd\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3"+
- "\4\3\4\3\4\5\4\u00d9\n\4\3\4\3\4\3\4\5\4\u00de\n\4\3\4\3\4\3\4\3\4\3\4"+
- "\5\4\u00e5\n\4\3\4\3\4\5\4\u00e9\n\4\3\5\3\5\5\5\u00ed\n\5\3\5\5\5\u00f0"+
- "\n\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\7\7\u00f9\n\7\f\7\16\7\u00fc\13\7\3\7"+
- "\3\7\5\7\u0100\n\7\3\b\3\b\3\t\3\t\3\n\3\n\3\n\7\n\u0109\n\n\f\n\16\n"+
- "\u010c\13\n\3\13\3\13\3\13\7\13\u0111\n\13\f\13\16\13\u0114\13\13\3\f"+
- "\3\f\3\f\7\f\u0119\n\f\f\f\16\f\u011c\13\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+
- "\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u012b\n\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+
+ "\64\3\2\3\2\3\2\3\3\7\3m\n\3\f\3\16\3p\13\3\3\3\5\3s\n\3\3\4\3\4\3\4\3"+
+ "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4"+
+ "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u0097\n\4\f\4"+
+ "\16\4\u009a\13\4\3\4\3\4\5\4\u009e\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4"+
+ "\3\4\3\4\5\4\u00aa\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4"+
+ "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u00c0\n\4\3\4\3\4\3\4\5\4\u00c5\n"+
+ "\4\3\4\3\4\3\4\3\4\5\4\u00cb\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3"+
+ "\4\5\4\u00d7\n\4\3\4\3\4\3\4\5\4\u00dc\n\4\3\4\3\4\5\4\u00e0\n\4\3\5\3"+
+ "\5\5\5\u00e4\n\5\3\5\5\5\u00e7\n\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\7\7\u00f0"+
+ "\n\7\f\7\16\7\u00f3\13\7\3\7\3\7\5\7\u00f7\n\7\3\b\3\b\3\t\3\t\3\n\3\n"+
+ "\3\n\7\n\u0100\n\n\f\n\16\n\u0103\13\n\3\13\3\13\3\13\7\13\u0108\n\13"+
+ "\f\13\16\13\u010b\13\13\3\f\3\f\3\f\7\f\u0110\n\f\f\f\16\f\u0113\13\f"+
+ "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u0122\n\r\3\r"+
"\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+
- "\r\3\r\3\r\3\r\3\r\3\r\3\r\7\r\u014d\n\r\f\r\16\r\u0150\13\r\3\16\3\16"+
- "\7\16\u0154\n\16\f\16\16\16\u0157\13\16\3\17\3\17\6\17\u015b\n\17\r\17"+
- "\16\17\u015c\3\20\3\20\3\20\3\20\3\20\5\20\u0164\n\20\3\21\3\21\3\21\3"+
- "\21\3\21\3\21\5\21\u016c\n\21\3\21\7\21\u016f\n\21\f\21\16\21\u0172\13"+
- "\21\3\22\7\22\u0175\n\22\f\22\16\22\u0178\13\22\3\22\3\22\3\22\3\22\3"+
- "\22\3\22\5\22\u0180\n\22\3\23\3\23\5\23\u0184\n\23\3\23\3\23\3\24\3\24"+
- "\5\24\u018a\n\24\3\24\3\24\3\24\5\24\u018f\n\24\3\25\3\25\3\25\3\26\3"+
- "\26\5\26\u0196\n\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\5\27\u019f\n\27"+
- "\3\27\5\27\u01a2\n\27\3\30\3\30\5\30\u01a6\n\30\3\30\3\30\3\31\3\31\3"+
- "\31\3\31\7\31\u01ae\n\31\f\31\16\31\u01b1\13\31\3\31\5\31\u01b4\n\31\3"+
- "\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u01c0\n\32\3\33"+
- "\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3"+
- "#\3$\3$\3%\3%\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3"+
- "*\3*\3+\3+\3,\3,\3,\6,\u01f0\n,\r,\16,\u01f1\3,\3,\3-\3-\3-\5-\u01f9\n"+
- "-\3-\3-\3-\3-\3.\3.\3.\5.\u0202\n.\3/\3/\3/\3/\7/\u0208\n/\f/\16/\u020b"+
- "\13/\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\63\3\63\3\63"+
- "\3\64\3\64\3\64\3\65\3\65\3\65\2\3\30\66\2\4\6\b\n\f\16\20\22\24\26\30"+
- "\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfh\2\13\4\2\3\3"+
- "\21\21\3\2(-\3\2/\60\3\2\61\64\3\2\659\5\2\60\60\67\67:;\3\2KN\3\2HJ\3"+
- "\2?@\2\u023c\2j\3\2\2\2\4p\3\2\2\2\6\u00e8\3\2\2\2\b\u00ea\3\2\2\2\n\u00f1"+
- "\3\2\2\2\f\u00f5\3\2\2\2\16\u0101\3\2\2\2\20\u0103\3\2\2\2\22\u0105\3"+
- "\2\2\2\24\u010d\3\2\2\2\26\u0115\3\2\2\2\30\u012a\3\2\2\2\32\u0151\3\2"+
- "\2\2\34\u0158\3\2\2\2\36\u0163\3\2\2\2 \u016b\3\2\2\2\"\u0176\3\2\2\2"+
- "$\u0183\3\2\2\2&\u018e\3\2\2\2(\u0190\3\2\2\2*\u0193\3\2\2\2,\u01a1\3"+
- "\2\2\2.\u01a3\3\2\2\2\60\u01a9\3\2\2\2\62\u01bf\3\2\2\2\64\u01c1\3\2\2"+
- "\2\66\u01c3\3\2\2\28\u01c5\3\2\2\2:\u01c7\3\2\2\2<\u01c9\3\2\2\2>\u01cb"+
- "\3\2\2\2@\u01cd\3\2\2\2B\u01cf\3\2\2\2D\u01d1\3\2\2\2F\u01d3\3\2\2\2H"+
- "\u01d5\3\2\2\2J\u01d7\3\2\2\2L\u01d9\3\2\2\2N\u01dd\3\2\2\2P\u01e1\3\2"+
- "\2\2R\u01e5\3\2\2\2T\u01ea\3\2\2\2V\u01ec\3\2\2\2X\u01f5\3\2\2\2Z\u0201"+
- "\3\2\2\2\\\u0209\3\2\2\2^\u020e\3\2\2\2`\u0211\3\2\2\2b\u0214\3\2\2\2"+
- "d\u0217\3\2\2\2f\u021a\3\2\2\2h\u021d\3\2\2\2jk\5\4\3\2kl\7\2\2\3l\3\3"+
- "\2\2\2mo\5\6\4\2nm\3\2\2\2or\3\2\2\2pn\3\2\2\2pq\3\2\2\2qt\3\2\2\2rp\3"+
- "\2\2\2su\5\b\5\2ts\3\2\2\2tu\3\2\2\2u\5\3\2\2\2v\u00e9\7\3\2\2wx\5\22"+
- "\n\2xy\7\4\2\2yz\5\26\f\2z\u00e9\3\2\2\2{\u00e9\5\34\17\2|\u00e9\5\n\6"+
- "\2}\u00e9\7\5\2\2~\177\7\6\2\2\177\u00e9\7G\2\2\u0080\u0081\7\7\2\2\u0081"+
- "\u0082\5\4\3\2\u0082\u0083\7\b\2\2\u0083\u00e9\3\2\2\2\u0084\u0085\7\t"+
- "\2\2\u0085\u0086\5\30\r\2\u0086\u0087\7\7\2\2\u0087\u0088\5\4\3\2\u0088"+
- "\u0089\7\b\2\2\u0089\u00e9\3\2\2\2\u008a\u008b\7\n\2\2\u008b\u008c\5\4"+
- "\3\2\u008c\u008d\7\13\2\2\u008d\u008e\5\30\r\2\u008e\u00e9\3\2\2\2\u008f"+
- "\u0090\7\f\2\2\u0090\u0091\5\30\r\2\u0091\u0092\7\r\2\2\u0092\u009a\5"+
- "\4\3\2\u0093\u0094\7\16\2\2\u0094\u0095\5\30\r\2\u0095\u0096\7\r\2\2\u0096"+
- "\u0097\5\4\3\2\u0097\u0099\3\2\2\2\u0098\u0093\3\2\2\2\u0099\u009c\3\2"+
- "\2\2\u009a\u0098\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009f\3\2\2\2\u009c"+
- "\u009a\3\2\2\2\u009d\u009e\7\17\2\2\u009e\u00a0\5\4\3\2\u009f\u009d\3"+
- "\2\2\2\u009f\u00a0\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u00a2\7\b\2\2\u00a2"+
- "\u00e9\3\2\2\2\u00a3\u00a4\7\20\2\2\u00a4\u00a5\7G\2\2\u00a5\u00a6\7\4"+
- "\2\2\u00a6\u00a7\5\30\r\2\u00a7\u00a8\7\21\2\2\u00a8\u00ab\5\30\r\2\u00a9"+
- "\u00aa\7\21\2\2\u00aa\u00ac\5\30\r\2\u00ab\u00a9\3\2\2\2\u00ab\u00ac\3"+
- "\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\7\7\2\2\u00ae\u00af\5\4\3\2\u00af"+
- "\u00b0\7\b\2\2\u00b0\u00e9\3\2\2\2\u00b1\u00b2\7\20\2\2\u00b2\u00b3\5"+
- "\24\13\2\u00b3\u00b4\7\22\2\2\u00b4\u00b5\5\26\f\2\u00b5\u00b6\7\7\2\2"+
- "\u00b6\u00b7\5\4\3\2\u00b7\u00b8\7\b\2\2\u00b8\u00e9\3\2\2\2\u00b9\u00ba"+
- "\7\23\2\2\u00ba\u00bb\5\f\7\2\u00bb\u00bc\5*\26\2\u00bc\u00e9\3\2\2\2"+
- "\u00bd\u00be\7\24\2\2\u00be\u00c1\5\16\b\2\u00bf\u00c0\7\25\2\2\u00c0"+
- "\u00c2\5\20\t\2\u00c1\u00bf\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00c3\3"+
- "\2\2\2\u00c3\u00c4\5\\/\2\u00c4\u00e9\3\2\2\2\u00c5\u00c7\7\26\2\2\u00c6"+
- "\u00c5\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c9\7\24"+
- "\2\2\u00c9\u00cc\5\16\b\2\u00ca\u00cb\7\25\2\2\u00cb\u00cd\5\20\t\2\u00cc"+
- "\u00ca\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00cf\5\\"+
- "/\2\u00cf\u00e9\3\2\2\2\u00d0\u00d1\7\26\2\2\u00d1\u00d2\7\23\2\2\u00d2"+
- "\u00d3\7G\2\2\u00d3\u00e9\5*\26\2\u00d4\u00d5\7\26\2\2\u00d5\u00d8\5\24"+
- "\13\2\u00d6\u00d7\7\4\2\2\u00d7\u00d9\5\26\f\2\u00d8\u00d6\3\2\2\2\u00d8"+
- "\u00d9\3\2\2\2\u00d9\u00e9\3\2\2\2\u00da\u00db\7\27\2\2\u00db\u00e9\5"+
- "h\65\2\u00dc\u00de\7\26\2\2\u00dd\u00dc\3\2\2\2\u00dd\u00de\3\2\2\2\u00de"+
- "\u00df\3\2\2\2\u00df\u00e0\5\24\13\2\u00e0\u00e1\7\4\2\2\u00e1\u00e2\5"+
- "L\'\2\u00e2\u00e9\3\2\2\2\u00e3\u00e5\7\26\2\2\u00e4\u00e3\3\2\2\2\u00e4"+
- "\u00e5\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e7\7G\2\2\u00e7\u00e9\5f\64"+
- "\2\u00e8v\3\2\2\2\u00e8w\3\2\2\2\u00e8{\3\2\2\2\u00e8|\3\2\2\2\u00e8}"+
- "\3\2\2\2\u00e8~\3\2\2\2\u00e8\u0080\3\2\2\2\u00e8\u0084\3\2\2\2\u00e8"+
- "\u008a\3\2\2\2\u00e8\u008f\3\2\2\2\u00e8\u00a3\3\2\2\2\u00e8\u00b1\3\2"+
- "\2\2\u00e8\u00b9\3\2\2\2\u00e8\u00bd\3\2\2\2\u00e8\u00c6\3\2\2\2\u00e8"+
- "\u00d0\3\2\2\2\u00e8\u00d4\3\2\2\2\u00e8\u00da\3\2\2\2\u00e8\u00dd\3\2"+
- "\2\2\u00e8\u00e4\3\2\2\2\u00e9\7\3\2\2\2\u00ea\u00ec\7\30\2\2\u00eb\u00ed"+
- "\5\26\f\2\u00ec\u00eb\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed\u00ef\3\2\2\2"+
- "\u00ee\u00f0\7\3\2\2\u00ef\u00ee\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\t\3"+
- "\2\2\2\u00f1\u00f2\7\31\2\2\u00f2\u00f3\7G\2\2\u00f3\u00f4\7\31\2\2\u00f4"+
- "\13\3\2\2\2\u00f5\u00fa\7G\2\2\u00f6\u00f7\7\32\2\2\u00f7\u00f9\7G\2\2"+
- "\u00f8\u00f6\3\2\2\2\u00f9\u00fc\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fa\u00fb"+
- "\3\2\2\2\u00fb\u00ff\3\2\2\2\u00fc\u00fa\3\2\2\2\u00fd\u00fe\7\33\2\2"+
- "\u00fe\u0100\7G\2\2\u00ff\u00fd\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\r\3"+
- "\2\2\2\u0101\u0102\5 \21\2\u0102\17\3\2\2\2\u0103\u0104\5 \21\2\u0104"+
- "\21\3\2\2\2\u0105\u010a\5 \21\2\u0106\u0107\7\21\2\2\u0107\u0109\5 \21"+
- "\2\u0108\u0106\3\2\2\2\u0109\u010c\3\2\2\2\u010a\u0108\3\2\2\2\u010a\u010b"+
- "\3\2\2\2\u010b\23\3\2\2\2\u010c\u010a\3\2\2\2\u010d\u0112\7G\2\2\u010e"+
- "\u010f\7\21\2\2\u010f\u0111\7G\2\2\u0110\u010e\3\2\2\2\u0111\u0114\3\2"+
- "\2\2\u0112\u0110\3\2\2\2\u0112\u0113\3\2\2\2\u0113\25\3\2\2\2\u0114\u0112"+
- "\3\2\2\2\u0115\u011a\5\30\r\2\u0116\u0117\7\21\2\2\u0117\u0119\5\30\r"+
- "\2\u0118\u0116\3\2\2\2\u0119\u011c\3\2\2\2\u011a\u0118\3\2\2\2\u011a\u011b"+
- "\3\2\2\2\u011b\27\3\2\2\2\u011c\u011a\3\2\2\2\u011d\u011e\b\r\1\2\u011e"+
- "\u012b\7\34\2\2\u011f\u012b\7\35\2\2\u0120\u012b\7\36\2\2\u0121\u012b"+
- "\5H%\2\u0122\u012b\5J&\2\u0123\u012b\7\37\2\2\u0124\u012b\5(\25\2\u0125"+
- "\u012b\5\32\16\2\u0126\u012b\5.\30\2\u0127\u0128\5D#\2\u0128\u0129\5\30"+
- "\r\n\u0129\u012b\3\2\2\2\u012a\u011d\3\2\2\2\u012a\u011f\3\2\2\2\u012a"+
- "\u0120\3\2\2\2\u012a\u0121\3\2\2\2\u012a\u0122\3\2\2\2\u012a\u0123\3\2"+
- "\2\2\u012a\u0124\3\2\2\2\u012a\u0125\3\2\2\2\u012a\u0126\3\2\2\2\u012a"+
- "\u0127\3\2\2\2\u012b\u014e\3\2\2\2\u012c\u012d\f\13\2\2\u012d\u012e\5"+
- "F$\2\u012e\u012f\5\30\r\13\u012f\u014d\3\2\2\2\u0130\u0131\f\t\2\2\u0131"+
- "\u0132\5@!\2\u0132\u0133\5\30\r\n\u0133\u014d\3\2\2\2\u0134\u0135\f\b"+
- "\2\2\u0135\u0136\5> \2\u0136\u0137\5\30\r\t\u0137\u014d\3\2\2\2\u0138"+
- "\u0139\f\7\2\2\u0139\u013a\5<\37\2\u013a\u013b\5\30\r\7\u013b\u014d\3"+
- "\2\2\2\u013c\u013d\f\6\2\2\u013d\u013e\5:\36\2\u013e\u013f\5\30\r\7\u013f"+
- "\u014d\3\2\2\2\u0140\u0141\f\5\2\2\u0141\u0142\58\35\2\u0142\u0143\5\30"+
- "\r\6\u0143\u014d\3\2\2\2\u0144\u0145\f\4\2\2\u0145\u0146\5\66\34\2\u0146"+
- "\u0147\5\30\r\5\u0147\u014d\3\2\2\2\u0148\u0149\f\3\2\2\u0149\u014a\5"+
- "B\"\2\u014a\u014b\5\30\r\4\u014b\u014d\3\2\2\2\u014c\u012c\3\2\2\2\u014c"+
- "\u0130\3\2\2\2\u014c\u0134\3\2\2\2\u014c\u0138\3\2\2\2\u014c\u013c\3\2"+
- "\2\2\u014c\u0140\3\2\2\2\u014c\u0144\3\2\2\2\u014c\u0148\3\2\2\2\u014d"+
- "\u0150\3\2\2\2\u014e\u014c\3\2\2\2\u014e\u014f\3\2\2\2\u014f\31\3\2\2"+
- "\2\u0150\u014e\3\2\2\2\u0151\u0155\5\36\20\2\u0152\u0154\5$\23\2\u0153"+
- "\u0152\3\2\2\2\u0154\u0157\3\2\2\2\u0155\u0153\3\2\2\2\u0155\u0156\3\2"+
- "\2\2\u0156\33\3\2\2\2\u0157\u0155\3\2\2\2\u0158\u015a\5\36\20\2\u0159"+
- "\u015b\5$\23\2\u015a\u0159\3\2\2\2\u015b\u015c\3\2\2\2\u015c\u015a\3\2"+
- "\2\2\u015c\u015d\3\2\2\2\u015d\35\3\2\2\2\u015e\u0164\5 \21\2\u015f\u0160"+
- "\7 \2\2\u0160\u0161\5\30\r\2\u0161\u0162\7!\2\2\u0162\u0164\3\2\2\2\u0163"+
- "\u015e\3\2\2\2\u0163\u015f\3\2\2\2\u0164\37\3\2\2\2\u0165\u016c\7G\2\2"+
- "\u0166\u0167\7 \2\2\u0167\u0168\5\30\r\2\u0168\u0169\7!\2\2\u0169\u016a"+
- "\5\"\22\2\u016a\u016c\3\2\2\2\u016b\u0165\3\2\2\2\u016b\u0166\3\2\2\2"+
- "\u016c\u0170\3\2\2\2\u016d\u016f\5\"\22\2\u016e\u016d\3\2\2\2\u016f\u0172"+
- "\3\2\2\2\u0170\u016e\3\2\2\2\u0170\u0171\3\2\2\2\u0171!\3\2\2\2\u0172"+
- "\u0170\3\2\2\2\u0173\u0175\5$\23\2\u0174\u0173\3\2\2\2\u0175\u0178\3\2"+
- "\2\2\u0176\u0174\3\2\2\2\u0176\u0177\3\2\2\2\u0177\u017f\3\2\2\2\u0178"+
- "\u0176\3\2\2\2\u0179\u017a\7\"\2\2\u017a\u017b\5\30\r\2\u017b\u017c\7"+
- "#\2\2\u017c\u0180\3\2\2\2\u017d\u017e\7\32\2\2\u017e\u0180\7G\2\2\u017f"+
- "\u0179\3\2\2\2\u017f\u017d\3\2\2\2\u0180#\3\2\2\2\u0181\u0182\7\33\2\2"+
- "\u0182\u0184\7G\2\2\u0183\u0181\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u0185"+
- "\3\2\2\2\u0185\u0186\5&\24\2\u0186%\3\2\2\2\u0187\u0189\7 \2\2\u0188\u018a"+
- "\5\26\f\2\u0189\u0188\3\2\2\2\u0189\u018a\3\2\2\2\u018a\u018b\3\2\2\2"+
- "\u018b\u018f\7!\2\2\u018c\u018f\5.\30\2\u018d\u018f\5J&\2\u018e\u0187"+
- "\3\2\2\2\u018e\u018c\3\2\2\2\u018e\u018d\3\2\2\2\u018f\'\3\2\2\2\u0190"+
- "\u0191\7\23\2\2\u0191\u0192\5*\26\2\u0192)\3\2\2\2\u0193\u0195\7 \2\2"+
- "\u0194\u0196\5,\27\2\u0195\u0194\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0197"+
- "\3\2\2\2\u0197\u0198\7!\2\2\u0198\u0199\5\4\3\2\u0199\u019a\7\b\2\2\u019a"+
- "+\3\2\2\2\u019b\u019e\5\24\13\2\u019c\u019d\7\21\2\2\u019d\u019f\7\37"+
- "\2\2\u019e\u019c\3\2\2\2\u019e\u019f\3\2\2\2\u019f\u01a2\3\2\2\2\u01a0"+
- "\u01a2\7\37\2\2\u01a1\u019b\3\2\2\2\u01a1\u01a0\3\2\2\2\u01a2-\3\2\2\2"+
- "\u01a3\u01a5\7$\2\2\u01a4\u01a6\5\60\31\2\u01a5\u01a4\3\2\2\2\u01a5\u01a6"+
- "\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a8\7%\2\2\u01a8/\3\2\2\2\u01a9\u01af"+
- "\5\62\32\2\u01aa\u01ab\5\64\33\2\u01ab\u01ac\5\62\32\2\u01ac\u01ae\3\2"+
- "\2\2\u01ad\u01aa\3\2\2\2\u01ae\u01b1\3\2\2\2\u01af\u01ad\3\2\2\2\u01af"+
- "\u01b0\3\2\2\2\u01b0\u01b3\3\2\2\2\u01b1\u01af\3\2\2\2\u01b2\u01b4\5\64"+
- "\33\2\u01b3\u01b2\3\2\2\2\u01b3\u01b4\3\2\2\2\u01b4\61\3\2\2\2\u01b5\u01b6"+
- "\7\"\2\2\u01b6\u01b7\5\30\r\2\u01b7\u01b8\7#\2\2\u01b8\u01b9\7\4\2\2\u01b9"+
- "\u01ba\5\30\r\2\u01ba\u01c0\3\2\2\2\u01bb\u01bc\7G\2\2\u01bc\u01bd\7\4"+
- "\2\2\u01bd\u01c0\5\30\r\2\u01be\u01c0\5\30\r\2\u01bf\u01b5\3\2\2\2\u01bf"+
- "\u01bb\3\2\2\2\u01bf\u01be\3\2\2\2\u01c0\63\3\2\2\2\u01c1\u01c2\t\2\2"+
- "\2\u01c2\65\3\2\2\2\u01c3\u01c4\7&\2\2\u01c4\67\3\2\2\2\u01c5\u01c6\7"+
- "\'\2\2\u01c69\3\2\2\2\u01c7\u01c8\t\3\2\2\u01c8;\3\2\2\2\u01c9\u01ca\7"+
- ".\2\2\u01ca=\3\2\2\2\u01cb\u01cc\t\4\2\2\u01cc?\3\2\2\2\u01cd\u01ce\t"+
- "\5\2\2\u01ceA\3\2\2\2\u01cf\u01d0\t\6\2\2\u01d0C\3\2\2\2\u01d1\u01d2\t"+
- "\7\2\2\u01d2E\3\2\2\2\u01d3\u01d4\7<\2\2\u01d4G\3\2\2\2\u01d5\u01d6\t"+
- "\b\2\2\u01d6I\3\2\2\2\u01d7\u01d8\t\t\2\2\u01d8K\3\2\2\2\u01d9\u01da\7"+
- "=\2\2\u01da\u01db\5\f\7\2\u01db\u01dc\5&\24\2\u01dcM\3\2\2\2\u01dd\u01de"+
- "\7\24\2\2\u01de\u01df\7G\2\2\u01df\u01e0\5\\/\2\u01e0O\3\2\2\2\u01e1\u01e2"+
- "\7\23\2\2\u01e2\u01e3\5\f\7\2\u01e3\u01e4\5*\26\2\u01e4Q\3\2\2\2\u01e5"+
- "\u01e6\7>\2\2\u01e6\u01e7\7\23\2\2\u01e7\u01e8\5\f\7\2\u01e8\u01e9\5*"+
- "\26\2\u01e9S\3\2\2\2\u01ea\u01eb\t\n\2\2\u01ebU\3\2\2\2\u01ec\u01ed\7"+
- "G\2\2\u01ed\u01ef\7$\2\2\u01ee\u01f0\5T+\2\u01ef\u01ee\3\2\2\2\u01f0\u01f1"+
- "\3\2\2\2\u01f1\u01ef\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\3\2\2\2\u01f3"+
- "\u01f4\7%\2\2\u01f4W\3\2\2\2\u01f5\u01f6\7A\2\2\u01f6\u01f8\7 \2\2\u01f7"+
- "\u01f9\5,\27\2\u01f8\u01f7\3\2\2\2\u01f8\u01f9\3\2\2\2\u01f9\u01fa\3\2"+
- "\2\2\u01fa\u01fb\7!\2\2\u01fb\u01fc\5\4\3\2\u01fc\u01fd\7\b\2\2\u01fd"+
- "Y\3\2\2\2\u01fe\u0202\5P)\2\u01ff\u0202\5V,\2\u0200\u0202\5X-\2\u0201"+
- "\u01fe\3\2\2\2\u0201\u01ff\3\2\2\2\u0201\u0200\3\2\2\2\u0202[\3\2\2\2"+
- "\u0203\u0208\5R*\2\u0204\u0208\5P)\2\u0205\u0208\5V,\2\u0206\u0208\5X"+
- "-\2\u0207\u0203\3\2\2\2\u0207\u0204\3\2\2\2\u0207\u0205\3\2\2\2\u0207"+
- "\u0206\3\2\2\2\u0208\u020b\3\2\2\2\u0209\u0207\3\2\2\2\u0209\u020a\3\2"+
- "\2\2\u020a\u020c\3\2\2\2\u020b\u0209\3\2\2\2\u020c\u020d\7\b\2\2\u020d"+
- "]\3\2\2\2\u020e\u020f\7G\2\2\u020f\u0210\7B\2\2\u0210_\3\2\2\2\u0211\u0212"+
- "\7G\2\2\u0212\u0213\7C\2\2\u0213a\3\2\2\2\u0214\u0215\7G\2\2\u0215\u0216"+
- "\7D\2\2\u0216c\3\2\2\2\u0217\u0218\7G\2\2\u0218\u0219\7E\2\2\u0219e\3"+
- "\2\2\2\u021a\u021b\7G\2\2\u021b\u021c\7F\2\2\u021cg\3\2\2\2\u021d\u021e"+
- "\5 \21\2\u021ei\3\2\2\2.pt\u009a\u009f\u00ab\u00c1\u00c6\u00cc\u00d8\u00dd"+
- "\u00e4\u00e8\u00ec\u00ef\u00fa\u00ff\u010a\u0112\u011a\u012a\u014c\u014e"+
- "\u0155\u015c\u0163\u016b\u0170\u0176\u017f\u0183\u0189\u018e\u0195\u019e"+
- "\u01a1\u01a5\u01af\u01b3\u01bf\u01f1\u01f8\u0201\u0207\u0209";
+ "\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\7\r\u0144\n\r\f"+
+ "\r\16\r\u0147\13\r\3\16\3\16\7\16\u014b\n\16\f\16\16\16\u014e\13\16\3"+
+ "\17\3\17\6\17\u0152\n\17\r\17\16\17\u0153\3\20\3\20\3\20\3\20\3\20\5\20"+
+ "\u015b\n\20\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u0163\n\21\3\21\7\21\u0166"+
+ "\n\21\f\21\16\21\u0169\13\21\3\22\7\22\u016c\n\22\f\22\16\22\u016f\13"+
+ "\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u0177\n\22\3\23\3\23\5\23\u017b"+
+ "\n\23\3\23\3\23\3\24\3\24\5\24\u0181\n\24\3\24\3\24\3\24\5\24\u0186\n"+
+ "\24\3\25\3\25\3\25\3\26\3\26\5\26\u018d\n\26\3\26\3\26\3\26\3\26\3\27"+
+ "\3\27\3\27\5\27\u0196\n\27\3\27\5\27\u0199\n\27\3\30\3\30\5\30\u019d\n"+
+ "\30\3\30\3\30\3\31\3\31\3\31\3\31\7\31\u01a5\n\31\f\31\16\31\u01a8\13"+
+ "\31\3\31\5\31\u01ab\n\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32"+
+ "\3\32\5\32\u01b7\n\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37"+
+ "\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3("+
+ "\3(\3)\3)\3)\3)\3)\3*\3*\3+\3+\3+\6+\u01e3\n+\r+\16+\u01e4\3+\3+\3,\3"+
+ ",\3,\5,\u01ec\n,\3,\3,\3,\3,\3-\3-\3-\5-\u01f5\n-\3.\3.\3.\3.\7.\u01fb"+
+ "\n.\f.\16.\u01fe\13.\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3\62"+
+ "\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\2\3\30\65\2\4\6\b\n\f\16\20\22"+
+ "\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdf\2\13"+
+ "\4\2\3\3\21\21\3\2(-\3\2/\60\3\2\61\64\3\2\659\5\2\60\60\67\67:;\3\2J"+
+ "M\3\2GI\3\2>?\2\u022e\2h\3\2\2\2\4n\3\2\2\2\6\u00df\3\2\2\2\b\u00e1\3"+
+ "\2\2\2\n\u00e8\3\2\2\2\f\u00ec\3\2\2\2\16\u00f8\3\2\2\2\20\u00fa\3\2\2"+
+ "\2\22\u00fc\3\2\2\2\24\u0104\3\2\2\2\26\u010c\3\2\2\2\30\u0121\3\2\2\2"+
+ "\32\u0148\3\2\2\2\34\u014f\3\2\2\2\36\u015a\3\2\2\2 \u0162\3\2\2\2\"\u016d"+
+ "\3\2\2\2$\u017a\3\2\2\2&\u0185\3\2\2\2(\u0187\3\2\2\2*\u018a\3\2\2\2,"+
+ "\u0198\3\2\2\2.\u019a\3\2\2\2\60\u01a0\3\2\2\2\62\u01b6\3\2\2\2\64\u01b8"+
+ "\3\2\2\2\66\u01ba\3\2\2\28\u01bc\3\2\2\2:\u01be\3\2\2\2<\u01c0\3\2\2\2"+
+ ">\u01c2\3\2\2\2@\u01c4\3\2\2\2B\u01c6\3\2\2\2D\u01c8\3\2\2\2F\u01ca\3"+
+ "\2\2\2H\u01cc\3\2\2\2J\u01ce\3\2\2\2L\u01d0\3\2\2\2N\u01d4\3\2\2\2P\u01d8"+
+ "\3\2\2\2R\u01dd\3\2\2\2T\u01df\3\2\2\2V\u01e8\3\2\2\2X\u01f4\3\2\2\2Z"+
+ "\u01fc\3\2\2\2\\\u0201\3\2\2\2^\u0204\3\2\2\2`\u0207\3\2\2\2b\u020a\3"+
+ "\2\2\2d\u020d\3\2\2\2f\u0210\3\2\2\2hi\5\4\3\2ij\7\2\2\3j\3\3\2\2\2km"+
+ "\5\6\4\2lk\3\2\2\2mp\3\2\2\2nl\3\2\2\2no\3\2\2\2or\3\2\2\2pn\3\2\2\2q"+
+ "s\5\b\5\2rq\3\2\2\2rs\3\2\2\2s\5\3\2\2\2t\u00e0\7\3\2\2uv\5\22\n\2vw\7"+
+ "\4\2\2wx\5\26\f\2x\u00e0\3\2\2\2y\u00e0\5\34\17\2z\u00e0\5\n\6\2{\u00e0"+
+ "\7\5\2\2|}\7\6\2\2}\u00e0\7F\2\2~\177\7\7\2\2\177\u0080\5\4\3\2\u0080"+
+ "\u0081\7\b\2\2\u0081\u00e0\3\2\2\2\u0082\u0083\7\t\2\2\u0083\u0084\5\30"+
+ "\r\2\u0084\u0085\7\7\2\2\u0085\u0086\5\4\3\2\u0086\u0087\7\b\2\2\u0087"+
+ "\u00e0\3\2\2\2\u0088\u0089\7\n\2\2\u0089\u008a\5\4\3\2\u008a\u008b\7\13"+
+ "\2\2\u008b\u008c\5\30\r\2\u008c\u00e0\3\2\2\2\u008d\u008e\7\f\2\2\u008e"+
+ "\u008f\5\30\r\2\u008f\u0090\7\r\2\2\u0090\u0098\5\4\3\2\u0091\u0092\7"+
+ "\16\2\2\u0092\u0093\5\30\r\2\u0093\u0094\7\r\2\2\u0094\u0095\5\4\3\2\u0095"+
+ "\u0097\3\2\2\2\u0096\u0091\3\2\2\2\u0097\u009a\3\2\2\2\u0098\u0096\3\2"+
+ "\2\2\u0098\u0099\3\2\2\2\u0099\u009d\3\2\2\2\u009a\u0098\3\2\2\2\u009b"+
+ "\u009c\7\17\2\2\u009c\u009e\5\4\3\2\u009d\u009b\3\2\2\2\u009d\u009e\3"+
+ "\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a0\7\b\2\2\u00a0\u00e0\3\2\2\2\u00a1"+
+ "\u00a2\7\20\2\2\u00a2\u00a3\7F\2\2\u00a3\u00a4\7\4\2\2\u00a4\u00a5\5\30"+
+ "\r\2\u00a5\u00a6\7\21\2\2\u00a6\u00a9\5\30\r\2\u00a7\u00a8\7\21\2\2\u00a8"+
+ "\u00aa\5\30\r\2\u00a9\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00ab\3"+
+ "\2\2\2\u00ab\u00ac\7\7\2\2\u00ac\u00ad\5\4\3\2\u00ad\u00ae\7\b\2\2\u00ae"+
+ "\u00e0\3\2\2\2\u00af\u00b0\7\20\2\2\u00b0\u00b1\5\24\13\2\u00b1\u00b2"+
+ "\7\22\2\2\u00b2\u00b3\5\26\f\2\u00b3\u00b4\7\7\2\2\u00b4\u00b5\5\4\3\2"+
+ "\u00b5\u00b6\7\b\2\2\u00b6\u00e0\3\2\2\2\u00b7\u00b8\7\23\2\2\u00b8\u00b9"+
+ "\5\f\7\2\u00b9\u00ba\5*\26\2\u00ba\u00e0\3\2\2\2\u00bb\u00bc\7\24\2\2"+
+ "\u00bc\u00bf\5\16\b\2\u00bd\u00be\7\25\2\2\u00be\u00c0\5\20\t\2\u00bf"+
+ "\u00bd\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\5Z"+
+ ".\2\u00c2\u00e0\3\2\2\2\u00c3\u00c5\7\26\2\2\u00c4\u00c3\3\2\2\2\u00c4"+
+ "\u00c5\3\2\2\2\u00c5\u00c6\3\2\2\2\u00c6\u00c7\7\24\2\2\u00c7\u00ca\5"+
+ "\16\b\2\u00c8\u00c9\7\25\2\2\u00c9\u00cb\5\20\t\2\u00ca\u00c8\3\2\2\2"+
+ "\u00ca\u00cb\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\5Z.\2\u00cd\u00e0"+
+ "\3\2\2\2\u00ce\u00cf\7\26\2\2\u00cf\u00d0\7\23\2\2\u00d0\u00d1\7F\2\2"+
+ "\u00d1\u00e0\5*\26\2\u00d2\u00d3\7\26\2\2\u00d3\u00d6\5\24\13\2\u00d4"+
+ "\u00d5\7\4\2\2\u00d5\u00d7\5\26\f\2\u00d6\u00d4\3\2\2\2\u00d6\u00d7\3"+
+ "\2\2\2\u00d7\u00e0\3\2\2\2\u00d8\u00d9\7\27\2\2\u00d9\u00e0\5f\64\2\u00da"+
+ "\u00dc\7\26\2\2\u00db\u00da\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00dd\3"+
+ "\2\2\2\u00dd\u00de\7F\2\2\u00de\u00e0\5d\63\2\u00dft\3\2\2\2\u00dfu\3"+
+ "\2\2\2\u00dfy\3\2\2\2\u00dfz\3\2\2\2\u00df{\3\2\2\2\u00df|\3\2\2\2\u00df"+
+ "~\3\2\2\2\u00df\u0082\3\2\2\2\u00df\u0088\3\2\2\2\u00df\u008d\3\2\2\2"+
+ "\u00df\u00a1\3\2\2\2\u00df\u00af\3\2\2\2\u00df\u00b7\3\2\2\2\u00df\u00bb"+
+ "\3\2\2\2\u00df\u00c4\3\2\2\2\u00df\u00ce\3\2\2\2\u00df\u00d2\3\2\2\2\u00df"+
+ "\u00d8\3\2\2\2\u00df\u00db\3\2\2\2\u00e0\7\3\2\2\2\u00e1\u00e3\7\30\2"+
+ "\2\u00e2\u00e4\5\26\f\2\u00e3\u00e2\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4"+
+ "\u00e6\3\2\2\2\u00e5\u00e7\7\3\2\2\u00e6\u00e5\3\2\2\2\u00e6\u00e7\3\2"+
+ "\2\2\u00e7\t\3\2\2\2\u00e8\u00e9\7\31\2\2\u00e9\u00ea\7F\2\2\u00ea\u00eb"+
+ "\7\31\2\2\u00eb\13\3\2\2\2\u00ec\u00f1\7F\2\2\u00ed\u00ee\7\32\2\2\u00ee"+
+ "\u00f0\7F\2\2\u00ef\u00ed\3\2\2\2\u00f0\u00f3\3\2\2\2\u00f1\u00ef\3\2"+
+ "\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f6\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f4"+
+ "\u00f5\7\33\2\2\u00f5\u00f7\7F\2\2\u00f6\u00f4\3\2\2\2\u00f6\u00f7\3\2"+
+ "\2\2\u00f7\r\3\2\2\2\u00f8\u00f9\5 \21\2\u00f9\17\3\2\2\2\u00fa\u00fb"+
+ "\5 \21\2\u00fb\21\3\2\2\2\u00fc\u0101\5 \21\2\u00fd\u00fe\7\21\2\2\u00fe"+
+ "\u0100\5 \21\2\u00ff\u00fd\3\2\2\2\u0100\u0103\3\2\2\2\u0101\u00ff\3\2"+
+ "\2\2\u0101\u0102\3\2\2\2\u0102\23\3\2\2\2\u0103\u0101\3\2\2\2\u0104\u0109"+
+ "\7F\2\2\u0105\u0106\7\21\2\2\u0106\u0108\7F\2\2\u0107\u0105\3\2\2\2\u0108"+
+ "\u010b\3\2\2\2\u0109\u0107\3\2\2\2\u0109\u010a\3\2\2\2\u010a\25\3\2\2"+
+ "\2\u010b\u0109\3\2\2\2\u010c\u0111\5\30\r\2\u010d\u010e\7\21\2\2\u010e"+
+ "\u0110\5\30\r\2\u010f\u010d\3\2\2\2\u0110\u0113\3\2\2\2\u0111\u010f\3"+
+ "\2\2\2\u0111\u0112\3\2\2\2\u0112\27\3\2\2\2\u0113\u0111\3\2\2\2\u0114"+
+ "\u0115\b\r\1\2\u0115\u0122\7\34\2\2\u0116\u0122\7\35\2\2\u0117\u0122\7"+
+ "\36\2\2\u0118\u0122\5H%\2\u0119\u0122\5J&\2\u011a\u0122\7\37\2\2\u011b"+
+ "\u0122\5(\25\2\u011c\u0122\5\32\16\2\u011d\u0122\5.\30\2\u011e\u011f\5"+
+ "D#\2\u011f\u0120\5\30\r\n\u0120\u0122\3\2\2\2\u0121\u0114\3\2\2\2\u0121"+
+ "\u0116\3\2\2\2\u0121\u0117\3\2\2\2\u0121\u0118\3\2\2\2\u0121\u0119\3\2"+
+ "\2\2\u0121\u011a\3\2\2\2\u0121\u011b\3\2\2\2\u0121\u011c\3\2\2\2\u0121"+
+ "\u011d\3\2\2\2\u0121\u011e\3\2\2\2\u0122\u0145\3\2\2\2\u0123\u0124\f\13"+
+ "\2\2\u0124\u0125\5F$\2\u0125\u0126\5\30\r\13\u0126\u0144\3\2\2\2\u0127"+
+ "\u0128\f\t\2\2\u0128\u0129\5@!\2\u0129\u012a\5\30\r\n\u012a\u0144\3\2"+
+ "\2\2\u012b\u012c\f\b\2\2\u012c\u012d\5> \2\u012d\u012e\5\30\r\t\u012e"+
+ "\u0144\3\2\2\2\u012f\u0130\f\7\2\2\u0130\u0131\5<\37\2\u0131\u0132\5\30"+
+ "\r\7\u0132\u0144\3\2\2\2\u0133\u0134\f\6\2\2\u0134\u0135\5:\36\2\u0135"+
+ "\u0136\5\30\r\7\u0136\u0144\3\2\2\2\u0137\u0138\f\5\2\2\u0138\u0139\5"+
+ "8\35\2\u0139\u013a\5\30\r\6\u013a\u0144\3\2\2\2\u013b\u013c\f\4\2\2\u013c"+
+ "\u013d\5\66\34\2\u013d\u013e\5\30\r\5\u013e\u0144\3\2\2\2\u013f\u0140"+
+ "\f\3\2\2\u0140\u0141\5B\"\2\u0141\u0142\5\30\r\4\u0142\u0144\3\2\2\2\u0143"+
+ "\u0123\3\2\2\2\u0143\u0127\3\2\2\2\u0143\u012b\3\2\2\2\u0143\u012f\3\2"+
+ "\2\2\u0143\u0133\3\2\2\2\u0143\u0137\3\2\2\2\u0143\u013b\3\2\2\2\u0143"+
+ "\u013f\3\2\2\2\u0144\u0147\3\2\2\2\u0145\u0143\3\2\2\2\u0145\u0146\3\2"+
+ "\2\2\u0146\31\3\2\2\2\u0147\u0145\3\2\2\2\u0148\u014c\5\36\20\2\u0149"+
+ "\u014b\5$\23\2\u014a\u0149\3\2\2\2\u014b\u014e\3\2\2\2\u014c\u014a\3\2"+
+ "\2\2\u014c\u014d\3\2\2\2\u014d\33\3\2\2\2\u014e\u014c\3\2\2\2\u014f\u0151"+
+ "\5\36\20\2\u0150\u0152\5$\23\2\u0151\u0150\3\2\2\2\u0152\u0153\3\2\2\2"+
+ "\u0153\u0151\3\2\2\2\u0153\u0154\3\2\2\2\u0154\35\3\2\2\2\u0155\u015b"+
+ "\5 \21\2\u0156\u0157\7 \2\2\u0157\u0158\5\30\r\2\u0158\u0159\7!\2\2\u0159"+
+ "\u015b\3\2\2\2\u015a\u0155\3\2\2\2\u015a\u0156\3\2\2\2\u015b\37\3\2\2"+
+ "\2\u015c\u0163\7F\2\2\u015d\u015e\7 \2\2\u015e\u015f\5\30\r\2\u015f\u0160"+
+ "\7!\2\2\u0160\u0161\5\"\22\2\u0161\u0163\3\2\2\2\u0162\u015c\3\2\2\2\u0162"+
+ "\u015d\3\2\2\2\u0163\u0167\3\2\2\2\u0164\u0166\5\"\22\2\u0165\u0164\3"+
+ "\2\2\2\u0166\u0169\3\2\2\2\u0167\u0165\3\2\2\2\u0167\u0168\3\2\2\2\u0168"+
+ "!\3\2\2\2\u0169\u0167\3\2\2\2\u016a\u016c\5$\23\2\u016b\u016a\3\2\2\2"+
+ "\u016c\u016f\3\2\2\2\u016d\u016b\3\2\2\2\u016d\u016e\3\2\2\2\u016e\u0176"+
+ "\3\2\2\2\u016f\u016d\3\2\2\2\u0170\u0171\7\"\2\2\u0171\u0172\5\30\r\2"+
+ "\u0172\u0173\7#\2\2\u0173\u0177\3\2\2\2\u0174\u0175\7\32\2\2\u0175\u0177"+
+ "\7F\2\2\u0176\u0170\3\2\2\2\u0176\u0174\3\2\2\2\u0177#\3\2\2\2\u0178\u0179"+
+ "\7\33\2\2\u0179\u017b\7F\2\2\u017a\u0178\3\2\2\2\u017a\u017b\3\2\2\2\u017b"+
+ "\u017c\3\2\2\2\u017c\u017d\5&\24\2\u017d%\3\2\2\2\u017e\u0180\7 \2\2\u017f"+
+ "\u0181\5\26\f\2\u0180\u017f\3\2\2\2\u0180\u0181\3\2\2\2\u0181\u0182\3"+
+ "\2\2\2\u0182\u0186\7!\2\2\u0183\u0186\5.\30\2\u0184\u0186\5J&\2\u0185"+
+ "\u017e\3\2\2\2\u0185\u0183\3\2\2\2\u0185\u0184\3\2\2\2\u0186\'\3\2\2\2"+
+ "\u0187\u0188\7\23\2\2\u0188\u0189\5*\26\2\u0189)\3\2\2\2\u018a\u018c\7"+
+ " \2\2\u018b\u018d\5,\27\2\u018c\u018b\3\2\2\2\u018c\u018d\3\2\2\2\u018d"+
+ "\u018e\3\2\2\2\u018e\u018f\7!\2\2\u018f\u0190\5\4\3\2\u0190\u0191\7\b"+
+ "\2\2\u0191+\3\2\2\2\u0192\u0195\5\24\13\2\u0193\u0194\7\21\2\2\u0194\u0196"+
+ "\7\37\2\2\u0195\u0193\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0199\3\2\2\2"+
+ "\u0197\u0199\7\37\2\2\u0198\u0192\3\2\2\2\u0198\u0197\3\2\2\2\u0199-\3"+
+ "\2\2\2\u019a\u019c\7$\2\2\u019b\u019d\5\60\31\2\u019c\u019b\3\2\2\2\u019c"+
+ "\u019d\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u019f\7%\2\2\u019f/\3\2\2\2\u01a0"+
+ "\u01a6\5\62\32\2\u01a1\u01a2\5\64\33\2\u01a2\u01a3\5\62\32\2\u01a3\u01a5"+
+ "\3\2\2\2\u01a4\u01a1\3\2\2\2\u01a5\u01a8\3\2\2\2\u01a6\u01a4\3\2\2\2\u01a6"+
+ "\u01a7\3\2\2\2\u01a7\u01aa\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a9\u01ab\5\64"+
+ "\33\2\u01aa\u01a9\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\61\3\2\2\2\u01ac\u01ad"+
+ "\7\"\2\2\u01ad\u01ae\5\30\r\2\u01ae\u01af\7#\2\2\u01af\u01b0\7\4\2\2\u01b0"+
+ "\u01b1\5\30\r\2\u01b1\u01b7\3\2\2\2\u01b2\u01b3\7F\2\2\u01b3\u01b4\7\4"+
+ "\2\2\u01b4\u01b7\5\30\r\2\u01b5\u01b7\5\30\r\2\u01b6\u01ac\3\2\2\2\u01b6"+
+ "\u01b2\3\2\2\2\u01b6\u01b5\3\2\2\2\u01b7\63\3\2\2\2\u01b8\u01b9\t\2\2"+
+ "\2\u01b9\65\3\2\2\2\u01ba\u01bb\7&\2\2\u01bb\67\3\2\2\2\u01bc\u01bd\7"+
+ "\'\2\2\u01bd9\3\2\2\2\u01be\u01bf\t\3\2\2\u01bf;\3\2\2\2\u01c0\u01c1\7"+
+ ".\2\2\u01c1=\3\2\2\2\u01c2\u01c3\t\4\2\2\u01c3?\3\2\2\2\u01c4\u01c5\t"+
+ "\5\2\2\u01c5A\3\2\2\2\u01c6\u01c7\t\6\2\2\u01c7C\3\2\2\2\u01c8\u01c9\t"+
+ "\7\2\2\u01c9E\3\2\2\2\u01ca\u01cb\7<\2\2\u01cbG\3\2\2\2\u01cc\u01cd\t"+
+ "\b\2\2\u01cdI\3\2\2\2\u01ce\u01cf\t\t\2\2\u01cfK\3\2\2\2\u01d0\u01d1\7"+
+ "\24\2\2\u01d1\u01d2\7F\2\2\u01d2\u01d3\5Z.\2\u01d3M\3\2\2\2\u01d4\u01d5"+
+ "\7\23\2\2\u01d5\u01d6\5\f\7\2\u01d6\u01d7\5*\26\2\u01d7O\3\2\2\2\u01d8"+
+ "\u01d9\7=\2\2\u01d9\u01da\7\23\2\2\u01da\u01db\5\f\7\2\u01db\u01dc\5*"+
+ "\26\2\u01dcQ\3\2\2\2\u01dd\u01de\t\n\2\2\u01deS\3\2\2\2\u01df\u01e0\7"+
+ "F\2\2\u01e0\u01e2\7$\2\2\u01e1\u01e3\5R*\2\u01e2\u01e1\3\2\2\2\u01e3\u01e4"+
+ "\3\2\2\2\u01e4\u01e2\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6"+
+ "\u01e7\7%\2\2\u01e7U\3\2\2\2\u01e8\u01e9\7@\2\2\u01e9\u01eb\7 \2\2\u01ea"+
+ "\u01ec\5,\27\2\u01eb\u01ea\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed\3\2"+
+ "\2\2\u01ed\u01ee\7!\2\2\u01ee\u01ef\5\4\3\2\u01ef\u01f0\7\b\2\2\u01f0"+
+ "W\3\2\2\2\u01f1\u01f5\5N(\2\u01f2\u01f5\5T+\2\u01f3\u01f5\5V,\2\u01f4"+
+ "\u01f1\3\2\2\2\u01f4\u01f2\3\2\2\2\u01f4\u01f3\3\2\2\2\u01f5Y\3\2\2\2"+
+ "\u01f6\u01fb\5P)\2\u01f7\u01fb\5N(\2\u01f8\u01fb\5T+\2\u01f9\u01fb\5V"+
+ ",\2\u01fa\u01f6\3\2\2\2\u01fa\u01f7\3\2\2\2\u01fa\u01f8\3\2\2\2\u01fa"+
+ "\u01f9\3\2\2\2\u01fb\u01fe\3\2\2\2\u01fc\u01fa\3\2\2\2\u01fc\u01fd\3\2"+
+ "\2\2\u01fd\u01ff\3\2\2\2\u01fe\u01fc\3\2\2\2\u01ff\u0200\7\b\2\2\u0200"+
+ "[\3\2\2\2\u0201\u0202\7F\2\2\u0202\u0203\7A\2\2\u0203]\3\2\2\2\u0204\u0205"+
+ "\7F\2\2\u0205\u0206\7B\2\2\u0206_\3\2\2\2\u0207\u0208\7F\2\2\u0208\u0209"+
+ "\7C\2\2\u0209a\3\2\2\2\u020a\u020b\7F\2\2\u020b\u020c\7D\2\2\u020cc\3"+
+ "\2\2\2\u020d\u020e\7F\2\2\u020e\u020f\7E\2\2\u020fe\3\2\2\2\u0210\u0211"+
+ "\5 \21\2\u0211g\3\2\2\2-nr\u0098\u009d\u00a9\u00bf\u00c4\u00ca\u00d6\u00db"+
+ "\u00df\u00e3\u00e6\u00f1\u00f6\u0101\u0109\u0111\u0121\u0143\u0145\u014c"+
+ "\u0153\u015a\u0162\u0167\u016d\u0176\u017a\u0180\u0185\u018c\u0195\u0198"+
+ "\u019c\u01a6\u01aa\u01b6\u01e4\u01eb\u01f4\u01fa\u01fc";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/org/luapp/language/generator/luappVisitor.java b/src/main/java/org/luapp/language/generator/luappVisitor.java
index 30d1174..b181b68 100644
--- a/src/main/java/org/luapp/language/generator/luappVisitor.java
+++ b/src/main/java/org/luapp/language/generator/luappVisitor.java
@@ -232,12 +232,6 @@ public interface luappVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitString(luappParser.StringContext ctx);
- /**
- * Visit a parse tree produced by {@link luappParser#newclass}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitNewclass(luappParser.NewclassContext ctx);
/**
* Visit a parse tree produced by {@link luappParser#classdef}.
* @param ctx the parse tree
diff --git a/src/main/java/org/luapp/language/handlers/NewClassHandler.java b/src/main/java/org/luapp/language/handlers/NewClassHandler.java
deleted file mode 100644
index 9067acf..0000000
--- a/src/main/java/org/luapp/language/handlers/NewClassHandler.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.luapp.language.handlers;
-
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.luapp.language.generator.luappParser;
-import org.luapp.language.listeners.LuaPPListener;
-import org.luapp.language.loader.ListenerManager;
-
-public class NewClassHandler extends LuaPPListener {
-
- public NewClassHandler(){
- this.setTarget(luappParser.RULE_newclass);
- //this.ignoreCheck = true;
- }
-
- @Override
- public void onSetManager() {
- this.listenerManager.RegisterIgnoredContext(this.getTarget());
- }
-
- @Override
- public void onEnterContext(ParserRuleContext enterContext) {
- System.out.println(enterContext.getText());
- boolean isLocal = enterContext.getText().startsWith("local");
- System.out.println(isLocal);
- String name = this.getLuaPP().getRawFromContext((ParserRuleContext) enterContext.getChild(isLocal ? 1 : 0));
- ParseTree newClass = enterContext.getChild(isLocal ? 3 : 2);
- ParseTree paramsChild = newClass.getChild(2);
-
- String params = paramsChild instanceof luappParser.ArgsContext ?
- "" :
- this.getLuaPP().getRawFromContext((ParserRuleContext) paramsChild);
-
- String className = this.getLuaPP().getRawFromContext((ParserRuleContext) newClass.getChild(1));
- System.out.println( (isLocal ? "local " : "") + name + " = " + className + ".new" + params);
- this.addToLuaPPResult( (isLocal ? "local " : "") + name + " = " + className + ".new" + params);
-
-
- }
-
- @Override
- public void onExitContext(ParserRuleContext exitContext) {
-
- }
-}
diff --git a/src/main/java/org/luapp/language/handlers/StatementHandler.java b/src/main/java/org/luapp/language/handlers/StatementHandler.java
index edfbb7b..cff0c77 100644
--- a/src/main/java/org/luapp/language/handlers/StatementHandler.java
+++ b/src/main/java/org/luapp/language/handlers/StatementHandler.java
@@ -81,20 +81,9 @@ public void onEnterContext(ParserRuleContext enterContext) {
.handleEnterContext(enterContext);
return;
}
- if(((ParserRuleContext) child).getRuleIndex() == luappParser.RULE_newclass){
- System.out.println("Done?");
- isNewStatement = true;
-
- }
}
}
- if(isNewStatement){
- this.listenerManager
- .GetInstangeByTarget(luappParser.RULE_newclass)
- .handleEnterContext(enterContext);
- return;
- }
if(this.isParentClass(enterContext)) {
//System.out.println("Parent is a class!");
return;
diff --git a/src/main/java/org/luapp/language/listeners/LuaPPFileWatchingService.java b/src/main/java/org/luapp/language/listeners/LuaPPFileWatchingService.java
new file mode 100644
index 0000000..63d4d8d
--- /dev/null
+++ b/src/main/java/org/luapp/language/listeners/LuaPPFileWatchingService.java
@@ -0,0 +1,4 @@
+package org.luapp.language.listeners;
+
+public class LuaPPFileWatchingService{
+}
diff --git a/src/main/java/org/luapp/language/listeners/MasterLuaPPListener.java b/src/main/java/org/luapp/language/listeners/MasterLuaPPListener.java
index 79840ef..6905386 100644
--- a/src/main/java/org/luapp/language/listeners/MasterLuaPPListener.java
+++ b/src/main/java/org/luapp/language/listeners/MasterLuaPPListener.java
@@ -380,15 +380,6 @@ public void exitString(luappParser.StringContext ctx) {
}
- @Override
- public void enterNewclass(luappParser.NewclassContext ctx) {
-
- }
-
- @Override
- public void exitNewclass(luappParser.NewclassContext ctx) {
-
- }
@Override
public void enterClassdef(luappParser.ClassdefContext ctx) {
diff --git a/src/main/java/org/luapp/language/parser/luapp.g4 b/src/main/java/org/luapp/language/parser/luapp.g4
index 54d8e62..c6aef20 100644
--- a/src/main/java/org/luapp/language/parser/luapp.g4
+++ b/src/main/java/org/luapp/language/parser/luapp.g4
@@ -27,7 +27,6 @@ stat
| 'local' 'function' NAME funcbody
| 'local' namelist ('=' explist)?
| 'safe' safeOperator
- | ('local')? namelist '=' newclass
| ('local')? NAME minusEqual
;
@@ -175,9 +174,6 @@ string
// Plus-Plus Modifications
-newclass
- : 'new' funcname args
- ;
classdef
: 'class' NAME classbody
diff --git a/src/main/java/org/luapp/language/test.lpp b/src/main/java/org/luapp/language/test.lpp
index e8da2c1..3fbe67c 100644
--- a/src/main/java/org/luapp/language/test.lpp
+++ b/src/main/java/org/luapp/language/test.lpp
@@ -1,13 +1,8 @@
-class ogl_suits.abilityMeta
-
- name {get set}
-
- constructor(name)
- self.name = name
- end
-
- function addHook(hookName, func)
- hook.Add(hookName, hookName .. "suits_ability", func)
- end
-
-end
\ No newline at end of file
+concommand.Add('test.lpp', function()
+ local thomas = cat.new("Thomas!")
+ thomas:setAge(50)
+ thomas:setName("Thomas v2")
+ print(thomas:isCat()) -- outputs -> true
+ print(thomas:getName()) -- outputs -> "Thomas v2"
+ print(thomas:getAge()) -- outputs -> 50
+end)
\ No newline at end of file
diff --git a/src/main/java/org/luapp/language/test.lua b/src/main/java/org/luapp/language/test.lua
index 9c9717c..c0b0248 100644
--- a/src/main/java/org/luapp/language/test.lua
+++ b/src/main/java/org/luapp/language/test.lua
@@ -4,21 +4,11 @@ Don't remove this notice please
https://github.com/LuaPlusPlus/lua-plus-plus
]]--
-ogl_suits.abilityMeta = {}
-ogl_suits.abilityMeta.__index = ogl_suits.abilityMeta
-function ogl_suits.abilityMeta:new(name)
- local self = {}
- setmetatable(self, ogl_suits.abilityMeta)
-
- self.name = name
- return self
-end
-function ogl_suits.abilityMeta:addHook(hookName, func)
- hook.Add(hookName, hookName .. "suits_ability", func)
- end
-function ogl_suits.abilityMeta:getName()
- return self.name
-end
-function ogl_suits.abilityMeta:setName(obj)
- self.name = obj
-end
\ No newline at end of file
+concommand.Add('test.lpp', function()
+ local thomas = cat.new("Thomas!")
+ thomas:setAge(50)
+ thomas:setName("Thomas v2")
+ print(thomas:isCat()) -- outputs -> true
+ print(thomas:getName()) -- outputs -> "Thomas v2"
+ print(thomas:getAge()) -- outputs -> 50
+end)
\ No newline at end of file
diff --git a/src/main/java/org/luapp/language/watcher/FileWatcher.java b/src/main/java/org/luapp/language/watcher/FileWatcher.java
index 6bf6fc8..8f259b3 100644
--- a/src/main/java/org/luapp/language/watcher/FileWatcher.java
+++ b/src/main/java/org/luapp/language/watcher/FileWatcher.java
@@ -1,4 +1,14 @@
package org.luapp.language.watcher;
+import org.luapp.language.Luapp;
+
public class FileWatcher {
+
+
+ public FileWatcher(Luapp instance){
+ }
+
+ public void onFileSave(String path){
+// this.instance
+ }
}