diff --git a/rewrite-hcl/src/main/antlr/HCLParser.g4 b/rewrite-hcl/src/main/antlr/HCLParser.g4
index aa2618baa00..5d48086569c 100644
--- a/rewrite-hcl/src/main/antlr/HCLParser.g4
+++ b/rewrite-hcl/src/main/antlr/HCLParser.g4
@@ -52,6 +52,7 @@ exprTerm
| functionCall #FunctionCallExpression
| exprTerm index #IndexAccessExpression
| exprTerm getAttr #AttributeAccessExpression
+ | exprTerm legacyIndexAttr #LegacyIndexAttributeExpression
| exprTerm splat #SplatExpression
| LPAREN expression RPAREN #ParentheticalExpression
;
@@ -144,6 +145,14 @@ getAttr
: DOT Identifier
;
+// Legacy Index Access Operator
+// https://github.com/hashicorp/hcl/blob/923b06b5d6adf61a647101c605f7463a1bd56cbf/hclsyntax/spec.md#L547
+// Interestingly not mentioned in hcl2 syntax specification anymore
+
+legacyIndexAttr
+ : DOT NumericLiteral
+ ;
+
// Splat Operators
// https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#splat-operators
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/HclIsoVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/HclIsoVisitor.java
index 6f5b3d2ceb9..b442182a944 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/HclIsoVisitor.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/HclIsoVisitor.java
@@ -102,6 +102,11 @@ public Hcl.Index.Position visitIndexPosition(Hcl.Index.Position indexPosition, P
return (Hcl.Index.Position) super.visitIndexPosition(indexPosition, p);
}
+ @Override
+ public Hcl.LegacyIndexAttributeAccess visitLegacyIndexAttribute(Hcl.LegacyIndexAttributeAccess legacyIndexAttributeAccess, P p) {
+ return (Hcl.LegacyIndexAttributeAccess) super.visitLegacyIndexAttribute(legacyIndexAttributeAccess, p);
+ }
+
@Override
public Hcl.Literal visitLiteral(Hcl.Literal literal, P p) {
return (Hcl.Literal) super.visitLiteral(literal, p);
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/HclVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/HclVisitor.java
index 6c7d095e00a..c16f141f311 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/HclVisitor.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/HclVisitor.java
@@ -77,6 +77,22 @@ public Hcl visitAttributeAccess(Hcl.AttributeAccess attributeAccess, P p) {
return a;
}
+ public Hcl visitLegacyIndexAttribute(Hcl.LegacyIndexAttributeAccess legacyIndexAttributeAccess, P p) {
+ Hcl.LegacyIndexAttributeAccess li = legacyIndexAttributeAccess;
+ li = li.withPrefix(visitSpace(li.getPrefix(), Space.Location.ATTRIBUTE_ACCESS, p));
+ li = li.withMarkers(visitMarkers(li.getMarkers(), p));
+ Expression temp = (Expression) visitExpression(li, p);
+ if (!(temp instanceof Hcl.LegacyIndexAttributeAccess)) {
+ return temp;
+ } else {
+ li = (Hcl.LegacyIndexAttributeAccess) temp;
+ }
+ li = li.withBase((Expression) visit(li.getBase(), p));
+ li = li.withIndex(li.getIndex());
+ return li;
+ }
+
+
public Hcl visitBinary(Hcl.Binary binary, P p) {
Hcl.Binary b = binary;
b = b.withPrefix(visitSpace(b.getPrefix(), Space.Location.BINARY, p));
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclParserVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclParserVisitor.java
index 00aa2b37f4f..7d1ea367d6e 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclParserVisitor.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclParserVisitor.java
@@ -409,6 +409,17 @@ public Hcl visitIndexAccessExpression(HCLParser.IndexAccessExpressionContext ctx
));
}
+ @Override
+ public Hcl visitLegacyIndexAttributeExpression(HCLParser.LegacyIndexAttributeExpressionContext ctx) {
+ return convert(ctx, (c, prefix) -> new Hcl.LegacyIndexAttributeAccess(
+ randomId(),
+ Space.format(prefix),
+ Markers.EMPTY,
+ (Expression) visit(c.exprTerm()),
+ c.legacyIndexAttr().NumericLiteral().getText()
+ ));
+ }
+
@Override
public Hcl visitLiteralValue(HCLParser.LiteralValueContext ctx) {
return convert(ctx, (c, prefix) -> {
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclPrinter.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclPrinter.java
index 125040cbc4f..a3a40095c18 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclPrinter.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/HclPrinter.java
@@ -288,6 +288,16 @@ public Hcl visitIndexPosition(Hcl.Index.Position indexPosition, PrintOutputCaptu
return indexPosition;
}
+ @Override
+ public Hcl visitLegacyIndexAttribute(Hcl.LegacyIndexAttributeAccess laccess, PrintOutputCapture
p) {
+ beforeSyntax(laccess, Space.Location.ATTRIBUTE_ACCESS, p);
+ visit(laccess.getBase(), p);
+ p.append(".");
+ p.append(laccess.getIndex());
+ afterSyntax(laccess, p);
+ return laccess;
+ }
+
@Override
public Hcl visitLiteral(Hcl.Literal literal, PrintOutputCapture
p) {
beforeSyntax(literal, Space.Location.LITERAL, p);
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.interp b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.interp
index 20b2b39e3b0..b80f4f5904d 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.interp
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.interp
@@ -123,6 +123,7 @@ functionCall
arguments
index
getAttr
+legacyIndexAttr
splat
attrSplat
fullSplat
@@ -142,4 +143,4 @@ templateInterpolation
atn:
-[4, 1, 47, 362, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 1, 0, 1, 0, 1, 1, 5, 1, 84, 8, 1, 10, 1, 12, 1, 87, 9, 1, 1, 2, 1, 2, 3, 2, 91, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 5, 4, 99, 8, 4, 10, 4, 12, 4, 102, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 111, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 116, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 124, 8, 6, 10, 6, 12, 6, 127, 9, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 140, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 148, 8, 7, 10, 7, 12, 7, 151, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 3, 10, 161, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 167, 8, 11, 10, 11, 12, 11, 170, 9, 11, 1, 11, 3, 11, 173, 8, 11, 3, 11, 175, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 181, 8, 12, 10, 12, 12, 12, 184, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 194, 8, 13, 10, 13, 12, 13, 197, 9, 13, 1, 13, 1, 13, 3, 13, 201, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 206, 8, 13, 1, 14, 1, 14, 3, 14, 210, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 217, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 228, 8, 16, 1, 16, 3, 16, 231, 8, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 3, 17, 238, 8, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 3, 20, 251, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 5, 21, 258, 8, 21, 10, 21, 12, 21, 261, 9, 21, 1, 21, 3, 21, 264, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 3, 24, 275, 8, 24, 1, 25, 1, 25, 1, 25, 5, 25, 280, 8, 25, 10, 25, 12, 25, 283, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 290, 8, 26, 10, 26, 12, 26, 293, 9, 26, 1, 27, 1, 27, 3, 27, 297, 8, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 3, 29, 304, 8, 29, 1, 29, 1, 29, 1, 29, 3, 29, 309, 8, 29, 1, 30, 1, 30, 1, 30, 3, 30, 314, 8, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 326, 8, 34, 10, 34, 12, 34, 329, 9, 34, 4, 34, 331, 8, 34, 11, 34, 12, 34, 332, 1, 34, 1, 34, 1, 34, 5, 34, 338, 8, 34, 10, 34, 12, 34, 341, 9, 34, 1, 34, 3, 34, 344, 8, 34, 1, 35, 1, 35, 3, 35, 348, 8, 35, 1, 36, 1, 36, 1, 37, 1, 37, 3, 37, 354, 8, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 0, 2, 12, 14, 40, 0, 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, 0, 7, 2, 0, 13, 14, 16, 16, 2, 0, 7, 7, 22, 22, 2, 0, 39, 39, 41, 41, 2, 0, 25, 25, 33, 33, 4, 0, 20, 21, 27, 28, 34, 34, 37, 37, 5, 0, 18, 18, 25, 25, 32, 32, 36, 36, 40, 40, 2, 0, 19, 19, 26, 26, 369, 0, 80, 1, 0, 0, 0, 2, 85, 1, 0, 0, 0, 4, 90, 1, 0, 0, 0, 6, 92, 1, 0, 0, 0, 8, 96, 1, 0, 0, 0, 10, 110, 1, 0, 0, 0, 12, 115, 1, 0, 0, 0, 14, 139, 1, 0, 0, 0, 16, 152, 1, 0, 0, 0, 18, 156, 1, 0, 0, 0, 20, 160, 1, 0, 0, 0, 22, 162, 1, 0, 0, 0, 24, 178, 1, 0, 0, 0, 26, 200, 1, 0, 0, 0, 28, 209, 1, 0, 0, 0, 30, 211, 1, 0, 0, 0, 32, 220, 1, 0, 0, 0, 34, 234, 1, 0, 0, 0, 36, 242, 1, 0, 0, 0, 38, 245, 1, 0, 0, 0, 40, 247, 1, 0, 0, 0, 42, 254, 1, 0, 0, 0, 44, 265, 1, 0, 0, 0, 46, 269, 1, 0, 0, 0, 48, 274, 1, 0, 0, 0, 50, 276, 1, 0, 0, 0, 52, 284, 1, 0, 0, 0, 54, 296, 1, 0, 0, 0, 56, 298, 1, 0, 0, 0, 58, 303, 1, 0, 0, 0, 60, 313, 1, 0, 0, 0, 62, 315, 1, 0, 0, 0, 64, 317, 1, 0, 0, 0, 66, 319, 1, 0, 0, 0, 68, 343, 1, 0, 0, 0, 70, 347, 1, 0, 0, 0, 72, 349, 1, 0, 0, 0, 74, 353, 1, 0, 0, 0, 76, 355, 1, 0, 0, 0, 78, 357, 1, 0, 0, 0, 80, 81, 3, 2, 1, 0, 81, 1, 1, 0, 0, 0, 82, 84, 3, 4, 2, 0, 83, 82, 1, 0, 0, 0, 84, 87, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 85, 86, 1, 0, 0, 0, 86, 3, 1, 0, 0, 0, 87, 85, 1, 0, 0, 0, 88, 91, 3, 6, 3, 0, 89, 91, 3, 8, 4, 0, 90, 88, 1, 0, 0, 0, 90, 89, 1, 0, 0, 0, 91, 5, 1, 0, 0, 0, 92, 93, 5, 8, 0, 0, 93, 94, 5, 7, 0, 0, 94, 95, 3, 12, 6, 0, 95, 7, 1, 0, 0, 0, 96, 100, 5, 8, 0, 0, 97, 99, 3, 10, 5, 0, 98, 97, 1, 0, 0, 0, 99, 102, 1, 0, 0, 0, 100, 98, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 103, 1, 0, 0, 0, 102, 100, 1, 0, 0, 0, 103, 104, 3, 16, 8, 0, 104, 9, 1, 0, 0, 0, 105, 106, 5, 15, 0, 0, 106, 107, 3, 76, 38, 0, 107, 108, 5, 15, 0, 0, 108, 111, 1, 0, 0, 0, 109, 111, 5, 8, 0, 0, 110, 105, 1, 0, 0, 0, 110, 109, 1, 0, 0, 0, 111, 11, 1, 0, 0, 0, 112, 113, 6, 6, -1, 0, 113, 116, 3, 14, 7, 0, 114, 116, 3, 54, 27, 0, 115, 112, 1, 0, 0, 0, 115, 114, 1, 0, 0, 0, 116, 125, 1, 0, 0, 0, 117, 118, 10, 1, 0, 0, 118, 119, 5, 29, 0, 0, 119, 120, 3, 12, 6, 0, 120, 121, 5, 22, 0, 0, 121, 122, 3, 12, 6, 2, 122, 124, 1, 0, 0, 0, 123, 117, 1, 0, 0, 0, 124, 127, 1, 0, 0, 0, 125, 123, 1, 0, 0, 0, 125, 126, 1, 0, 0, 0, 126, 13, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 128, 129, 6, 7, -1, 0, 129, 140, 3, 68, 34, 0, 130, 140, 3, 18, 9, 0, 131, 140, 3, 28, 14, 0, 132, 140, 3, 20, 10, 0, 133, 140, 3, 38, 19, 0, 134, 140, 3, 40, 20, 0, 135, 136, 5, 24, 0, 0, 136, 137, 3, 12, 6, 0, 137, 138, 5, 31, 0, 0, 138, 140, 1, 0, 0, 0, 139, 128, 1, 0, 0, 0, 139, 130, 1, 0, 0, 0, 139, 131, 1, 0, 0, 0, 139, 132, 1, 0, 0, 0, 139, 133, 1, 0, 0, 0, 139, 134, 1, 0, 0, 0, 139, 135, 1, 0, 0, 0, 140, 149, 1, 0, 0, 0, 141, 142, 10, 4, 0, 0, 142, 148, 3, 44, 22, 0, 143, 144, 10, 3, 0, 0, 144, 148, 3, 46, 23, 0, 145, 146, 10, 2, 0, 0, 146, 148, 3, 48, 24, 0, 147, 141, 1, 0, 0, 0, 147, 143, 1, 0, 0, 0, 147, 145, 1, 0, 0, 0, 148, 151, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 15, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 152, 153, 5, 5, 0, 0, 153, 154, 3, 2, 1, 0, 154, 155, 5, 6, 0, 0, 155, 17, 1, 0, 0, 0, 156, 157, 7, 0, 0, 0, 157, 19, 1, 0, 0, 0, 158, 161, 3, 22, 11, 0, 159, 161, 3, 24, 12, 0, 160, 158, 1, 0, 0, 0, 160, 159, 1, 0, 0, 0, 161, 21, 1, 0, 0, 0, 162, 174, 5, 23, 0, 0, 163, 168, 3, 12, 6, 0, 164, 165, 5, 39, 0, 0, 165, 167, 3, 12, 6, 0, 166, 164, 1, 0, 0, 0, 167, 170, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 171, 173, 5, 39, 0, 0, 172, 171, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 163, 1, 0, 0, 0, 174, 175, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 177, 5, 30, 0, 0, 177, 23, 1, 0, 0, 0, 178, 182, 5, 5, 0, 0, 179, 181, 3, 26, 13, 0, 180, 179, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 185, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 185, 186, 5, 6, 0, 0, 186, 25, 1, 0, 0, 0, 187, 201, 5, 8, 0, 0, 188, 189, 5, 24, 0, 0, 189, 190, 5, 8, 0, 0, 190, 201, 5, 31, 0, 0, 191, 195, 5, 15, 0, 0, 192, 194, 3, 74, 37, 0, 193, 192, 1, 0, 0, 0, 194, 197, 1, 0, 0, 0, 195, 193, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 198, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 198, 201, 5, 15, 0, 0, 199, 201, 3, 12, 6, 0, 200, 187, 1, 0, 0, 0, 200, 188, 1, 0, 0, 0, 200, 191, 1, 0, 0, 0, 200, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203, 7, 1, 0, 0, 203, 205, 3, 12, 6, 0, 204, 206, 5, 39, 0, 0, 205, 204, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 27, 1, 0, 0, 0, 207, 210, 3, 30, 15, 0, 208, 210, 3, 32, 16, 0, 209, 207, 1, 0, 0, 0, 209, 208, 1, 0, 0, 0, 210, 29, 1, 0, 0, 0, 211, 212, 5, 2, 0, 0, 212, 213, 3, 34, 17, 0, 213, 214, 5, 22, 0, 0, 214, 216, 3, 12, 6, 0, 215, 217, 3, 36, 18, 0, 216, 215, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 5, 30, 0, 0, 219, 31, 1, 0, 0, 0, 220, 221, 5, 1, 0, 0, 221, 222, 3, 34, 17, 0, 222, 223, 5, 22, 0, 0, 223, 224, 3, 12, 6, 0, 224, 225, 5, 38, 0, 0, 225, 227, 3, 12, 6, 0, 226, 228, 5, 41, 0, 0, 227, 226, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 230, 1, 0, 0, 0, 229, 231, 3, 36, 18, 0, 230, 229, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 233, 5, 6, 0, 0, 233, 33, 1, 0, 0, 0, 234, 237, 5, 8, 0, 0, 235, 236, 5, 39, 0, 0, 236, 238, 5, 8, 0, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 240, 5, 4, 0, 0, 240, 241, 3, 12, 6, 0, 241, 35, 1, 0, 0, 0, 242, 243, 5, 3, 0, 0, 243, 244, 3, 12, 6, 0, 244, 37, 1, 0, 0, 0, 245, 246, 5, 8, 0, 0, 246, 39, 1, 0, 0, 0, 247, 248, 5, 8, 0, 0, 248, 250, 5, 24, 0, 0, 249, 251, 3, 42, 21, 0, 250, 249, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 253, 5, 31, 0, 0, 253, 41, 1, 0, 0, 0, 254, 259, 3, 12, 6, 0, 255, 256, 5, 39, 0, 0, 256, 258, 3, 12, 6, 0, 257, 255, 1, 0, 0, 0, 258, 261, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 263, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 262, 264, 7, 2, 0, 0, 263, 262, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 43, 1, 0, 0, 0, 265, 266, 5, 23, 0, 0, 266, 267, 3, 12, 6, 0, 267, 268, 5, 30, 0, 0, 268, 45, 1, 0, 0, 0, 269, 270, 5, 35, 0, 0, 270, 271, 5, 8, 0, 0, 271, 47, 1, 0, 0, 0, 272, 275, 3, 50, 25, 0, 273, 275, 3, 52, 26, 0, 274, 272, 1, 0, 0, 0, 274, 273, 1, 0, 0, 0, 275, 49, 1, 0, 0, 0, 276, 277, 5, 35, 0, 0, 277, 281, 5, 32, 0, 0, 278, 280, 3, 46, 23, 0, 279, 278, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 51, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 285, 5, 23, 0, 0, 285, 286, 5, 32, 0, 0, 286, 291, 5, 30, 0, 0, 287, 290, 3, 46, 23, 0, 288, 290, 3, 44, 22, 0, 289, 287, 1, 0, 0, 0, 289, 288, 1, 0, 0, 0, 290, 293, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 53, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 294, 297, 3, 56, 28, 0, 295, 297, 3, 58, 29, 0, 296, 294, 1, 0, 0, 0, 296, 295, 1, 0, 0, 0, 297, 55, 1, 0, 0, 0, 298, 299, 7, 3, 0, 0, 299, 300, 3, 14, 7, 0, 300, 57, 1, 0, 0, 0, 301, 304, 3, 14, 7, 0, 302, 304, 3, 56, 28, 0, 303, 301, 1, 0, 0, 0, 303, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 308, 3, 60, 30, 0, 306, 309, 3, 14, 7, 0, 307, 309, 3, 54, 27, 0, 308, 306, 1, 0, 0, 0, 308, 307, 1, 0, 0, 0, 309, 59, 1, 0, 0, 0, 310, 314, 3, 62, 31, 0, 311, 314, 3, 64, 32, 0, 312, 314, 3, 66, 33, 0, 313, 310, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 312, 1, 0, 0, 0, 314, 61, 1, 0, 0, 0, 315, 316, 7, 4, 0, 0, 316, 63, 1, 0, 0, 0, 317, 318, 7, 5, 0, 0, 318, 65, 1, 0, 0, 0, 319, 320, 7, 6, 0, 0, 320, 67, 1, 0, 0, 0, 321, 322, 5, 17, 0, 0, 322, 330, 5, 8, 0, 0, 323, 327, 5, 12, 0, 0, 324, 326, 3, 70, 35, 0, 325, 324, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 331, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 330, 323, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 344, 5, 8, 0, 0, 335, 339, 5, 15, 0, 0, 336, 338, 3, 74, 37, 0, 337, 336, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 342, 344, 5, 15, 0, 0, 343, 321, 1, 0, 0, 0, 343, 335, 1, 0, 0, 0, 344, 69, 1, 0, 0, 0, 345, 348, 3, 78, 39, 0, 346, 348, 3, 72, 36, 0, 347, 345, 1, 0, 0, 0, 347, 346, 1, 0, 0, 0, 348, 71, 1, 0, 0, 0, 349, 350, 5, 46, 0, 0, 350, 73, 1, 0, 0, 0, 351, 354, 3, 78, 39, 0, 352, 354, 3, 76, 38, 0, 353, 351, 1, 0, 0, 0, 353, 352, 1, 0, 0, 0, 354, 75, 1, 0, 0, 0, 355, 356, 5, 44, 0, 0, 356, 77, 1, 0, 0, 0, 357, 358, 5, 43, 0, 0, 358, 359, 3, 12, 6, 0, 359, 360, 5, 6, 0, 0, 360, 79, 1, 0, 0, 0, 39, 85, 90, 100, 110, 115, 125, 139, 147, 149, 160, 168, 172, 174, 182, 195, 200, 205, 209, 216, 227, 230, 237, 250, 259, 263, 274, 281, 289, 291, 296, 303, 308, 313, 327, 332, 339, 343, 347, 353]
\ No newline at end of file
+[4, 1, 47, 369, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 1, 0, 1, 0, 1, 1, 5, 1, 86, 8, 1, 10, 1, 12, 1, 89, 9, 1, 1, 2, 1, 2, 3, 2, 93, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 5, 4, 101, 8, 4, 10, 4, 12, 4, 104, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 113, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 118, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 126, 8, 6, 10, 6, 12, 6, 129, 9, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 142, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 152, 8, 7, 10, 7, 12, 7, 155, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 3, 10, 165, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 171, 8, 11, 10, 11, 12, 11, 174, 9, 11, 1, 11, 3, 11, 177, 8, 11, 3, 11, 179, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 5, 12, 185, 8, 12, 10, 12, 12, 12, 188, 9, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 198, 8, 13, 10, 13, 12, 13, 201, 9, 13, 1, 13, 1, 13, 3, 13, 205, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 210, 8, 13, 1, 14, 1, 14, 3, 14, 214, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 221, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 232, 8, 16, 1, 16, 3, 16, 235, 8, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 3, 17, 242, 8, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 3, 20, 255, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 5, 21, 262, 8, 21, 10, 21, 12, 21, 265, 9, 21, 1, 21, 3, 21, 268, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 282, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 287, 8, 26, 10, 26, 12, 26, 290, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 297, 8, 27, 10, 27, 12, 27, 300, 9, 27, 1, 28, 1, 28, 3, 28, 304, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 3, 30, 311, 8, 30, 1, 30, 1, 30, 1, 30, 3, 30, 316, 8, 30, 1, 31, 1, 31, 1, 31, 3, 31, 321, 8, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 333, 8, 35, 10, 35, 12, 35, 336, 9, 35, 4, 35, 338, 8, 35, 11, 35, 12, 35, 339, 1, 35, 1, 35, 1, 35, 5, 35, 345, 8, 35, 10, 35, 12, 35, 348, 9, 35, 1, 35, 3, 35, 351, 8, 35, 1, 36, 1, 36, 3, 36, 355, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 3, 38, 361, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 0, 2, 12, 14, 41, 0, 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, 0, 7, 2, 0, 13, 14, 16, 16, 2, 0, 7, 7, 22, 22, 2, 0, 39, 39, 41, 41, 2, 0, 25, 25, 33, 33, 4, 0, 20, 21, 27, 28, 34, 34, 37, 37, 5, 0, 18, 18, 25, 25, 32, 32, 36, 36, 40, 40, 2, 0, 19, 19, 26, 26, 376, 0, 82, 1, 0, 0, 0, 2, 87, 1, 0, 0, 0, 4, 92, 1, 0, 0, 0, 6, 94, 1, 0, 0, 0, 8, 98, 1, 0, 0, 0, 10, 112, 1, 0, 0, 0, 12, 117, 1, 0, 0, 0, 14, 141, 1, 0, 0, 0, 16, 156, 1, 0, 0, 0, 18, 160, 1, 0, 0, 0, 20, 164, 1, 0, 0, 0, 22, 166, 1, 0, 0, 0, 24, 182, 1, 0, 0, 0, 26, 204, 1, 0, 0, 0, 28, 213, 1, 0, 0, 0, 30, 215, 1, 0, 0, 0, 32, 224, 1, 0, 0, 0, 34, 238, 1, 0, 0, 0, 36, 246, 1, 0, 0, 0, 38, 249, 1, 0, 0, 0, 40, 251, 1, 0, 0, 0, 42, 258, 1, 0, 0, 0, 44, 269, 1, 0, 0, 0, 46, 273, 1, 0, 0, 0, 48, 276, 1, 0, 0, 0, 50, 281, 1, 0, 0, 0, 52, 283, 1, 0, 0, 0, 54, 291, 1, 0, 0, 0, 56, 303, 1, 0, 0, 0, 58, 305, 1, 0, 0, 0, 60, 310, 1, 0, 0, 0, 62, 320, 1, 0, 0, 0, 64, 322, 1, 0, 0, 0, 66, 324, 1, 0, 0, 0, 68, 326, 1, 0, 0, 0, 70, 350, 1, 0, 0, 0, 72, 354, 1, 0, 0, 0, 74, 356, 1, 0, 0, 0, 76, 360, 1, 0, 0, 0, 78, 362, 1, 0, 0, 0, 80, 364, 1, 0, 0, 0, 82, 83, 3, 2, 1, 0, 83, 1, 1, 0, 0, 0, 84, 86, 3, 4, 2, 0, 85, 84, 1, 0, 0, 0, 86, 89, 1, 0, 0, 0, 87, 85, 1, 0, 0, 0, 87, 88, 1, 0, 0, 0, 88, 3, 1, 0, 0, 0, 89, 87, 1, 0, 0, 0, 90, 93, 3, 6, 3, 0, 91, 93, 3, 8, 4, 0, 92, 90, 1, 0, 0, 0, 92, 91, 1, 0, 0, 0, 93, 5, 1, 0, 0, 0, 94, 95, 5, 8, 0, 0, 95, 96, 5, 7, 0, 0, 96, 97, 3, 12, 6, 0, 97, 7, 1, 0, 0, 0, 98, 102, 5, 8, 0, 0, 99, 101, 3, 10, 5, 0, 100, 99, 1, 0, 0, 0, 101, 104, 1, 0, 0, 0, 102, 100, 1, 0, 0, 0, 102, 103, 1, 0, 0, 0, 103, 105, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 105, 106, 3, 16, 8, 0, 106, 9, 1, 0, 0, 0, 107, 108, 5, 15, 0, 0, 108, 109, 3, 78, 39, 0, 109, 110, 5, 15, 0, 0, 110, 113, 1, 0, 0, 0, 111, 113, 5, 8, 0, 0, 112, 107, 1, 0, 0, 0, 112, 111, 1, 0, 0, 0, 113, 11, 1, 0, 0, 0, 114, 115, 6, 6, -1, 0, 115, 118, 3, 14, 7, 0, 116, 118, 3, 56, 28, 0, 117, 114, 1, 0, 0, 0, 117, 116, 1, 0, 0, 0, 118, 127, 1, 0, 0, 0, 119, 120, 10, 1, 0, 0, 120, 121, 5, 29, 0, 0, 121, 122, 3, 12, 6, 0, 122, 123, 5, 22, 0, 0, 123, 124, 3, 12, 6, 2, 124, 126, 1, 0, 0, 0, 125, 119, 1, 0, 0, 0, 126, 129, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 127, 128, 1, 0, 0, 0, 128, 13, 1, 0, 0, 0, 129, 127, 1, 0, 0, 0, 130, 131, 6, 7, -1, 0, 131, 142, 3, 70, 35, 0, 132, 142, 3, 18, 9, 0, 133, 142, 3, 28, 14, 0, 134, 142, 3, 20, 10, 0, 135, 142, 3, 38, 19, 0, 136, 142, 3, 40, 20, 0, 137, 138, 5, 24, 0, 0, 138, 139, 3, 12, 6, 0, 139, 140, 5, 31, 0, 0, 140, 142, 1, 0, 0, 0, 141, 130, 1, 0, 0, 0, 141, 132, 1, 0, 0, 0, 141, 133, 1, 0, 0, 0, 141, 134, 1, 0, 0, 0, 141, 135, 1, 0, 0, 0, 141, 136, 1, 0, 0, 0, 141, 137, 1, 0, 0, 0, 142, 153, 1, 0, 0, 0, 143, 144, 10, 5, 0, 0, 144, 152, 3, 44, 22, 0, 145, 146, 10, 4, 0, 0, 146, 152, 3, 46, 23, 0, 147, 148, 10, 3, 0, 0, 148, 152, 3, 48, 24, 0, 149, 150, 10, 2, 0, 0, 150, 152, 3, 50, 25, 0, 151, 143, 1, 0, 0, 0, 151, 145, 1, 0, 0, 0, 151, 147, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 152, 155, 1, 0, 0, 0, 153, 151, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 15, 1, 0, 0, 0, 155, 153, 1, 0, 0, 0, 156, 157, 5, 5, 0, 0, 157, 158, 3, 2, 1, 0, 158, 159, 5, 6, 0, 0, 159, 17, 1, 0, 0, 0, 160, 161, 7, 0, 0, 0, 161, 19, 1, 0, 0, 0, 162, 165, 3, 22, 11, 0, 163, 165, 3, 24, 12, 0, 164, 162, 1, 0, 0, 0, 164, 163, 1, 0, 0, 0, 165, 21, 1, 0, 0, 0, 166, 178, 5, 23, 0, 0, 167, 172, 3, 12, 6, 0, 168, 169, 5, 39, 0, 0, 169, 171, 3, 12, 6, 0, 170, 168, 1, 0, 0, 0, 171, 174, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 175, 177, 5, 39, 0, 0, 176, 175, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 179, 1, 0, 0, 0, 178, 167, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 181, 5, 30, 0, 0, 181, 23, 1, 0, 0, 0, 182, 186, 5, 5, 0, 0, 183, 185, 3, 26, 13, 0, 184, 183, 1, 0, 0, 0, 185, 188, 1, 0, 0, 0, 186, 184, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 189, 1, 0, 0, 0, 188, 186, 1, 0, 0, 0, 189, 190, 5, 6, 0, 0, 190, 25, 1, 0, 0, 0, 191, 205, 5, 8, 0, 0, 192, 193, 5, 24, 0, 0, 193, 194, 5, 8, 0, 0, 194, 205, 5, 31, 0, 0, 195, 199, 5, 15, 0, 0, 196, 198, 3, 76, 38, 0, 197, 196, 1, 0, 0, 0, 198, 201, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 202, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 202, 205, 5, 15, 0, 0, 203, 205, 3, 12, 6, 0, 204, 191, 1, 0, 0, 0, 204, 192, 1, 0, 0, 0, 204, 195, 1, 0, 0, 0, 204, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 207, 7, 1, 0, 0, 207, 209, 3, 12, 6, 0, 208, 210, 5, 39, 0, 0, 209, 208, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 27, 1, 0, 0, 0, 211, 214, 3, 30, 15, 0, 212, 214, 3, 32, 16, 0, 213, 211, 1, 0, 0, 0, 213, 212, 1, 0, 0, 0, 214, 29, 1, 0, 0, 0, 215, 216, 5, 2, 0, 0, 216, 217, 3, 34, 17, 0, 217, 218, 5, 22, 0, 0, 218, 220, 3, 12, 6, 0, 219, 221, 3, 36, 18, 0, 220, 219, 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 223, 5, 30, 0, 0, 223, 31, 1, 0, 0, 0, 224, 225, 5, 1, 0, 0, 225, 226, 3, 34, 17, 0, 226, 227, 5, 22, 0, 0, 227, 228, 3, 12, 6, 0, 228, 229, 5, 38, 0, 0, 229, 231, 3, 12, 6, 0, 230, 232, 5, 41, 0, 0, 231, 230, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 234, 1, 0, 0, 0, 233, 235, 3, 36, 18, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 237, 5, 6, 0, 0, 237, 33, 1, 0, 0, 0, 238, 241, 5, 8, 0, 0, 239, 240, 5, 39, 0, 0, 240, 242, 5, 8, 0, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 244, 5, 4, 0, 0, 244, 245, 3, 12, 6, 0, 245, 35, 1, 0, 0, 0, 246, 247, 5, 3, 0, 0, 247, 248, 3, 12, 6, 0, 248, 37, 1, 0, 0, 0, 249, 250, 5, 8, 0, 0, 250, 39, 1, 0, 0, 0, 251, 252, 5, 8, 0, 0, 252, 254, 5, 24, 0, 0, 253, 255, 3, 42, 21, 0, 254, 253, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 256, 1, 0, 0, 0, 256, 257, 5, 31, 0, 0, 257, 41, 1, 0, 0, 0, 258, 263, 3, 12, 6, 0, 259, 260, 5, 39, 0, 0, 260, 262, 3, 12, 6, 0, 261, 259, 1, 0, 0, 0, 262, 265, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 267, 1, 0, 0, 0, 265, 263, 1, 0, 0, 0, 266, 268, 7, 2, 0, 0, 267, 266, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 43, 1, 0, 0, 0, 269, 270, 5, 23, 0, 0, 270, 271, 3, 12, 6, 0, 271, 272, 5, 30, 0, 0, 272, 45, 1, 0, 0, 0, 273, 274, 5, 35, 0, 0, 274, 275, 5, 8, 0, 0, 275, 47, 1, 0, 0, 0, 276, 277, 5, 35, 0, 0, 277, 278, 5, 13, 0, 0, 278, 49, 1, 0, 0, 0, 279, 282, 3, 52, 26, 0, 280, 282, 3, 54, 27, 0, 281, 279, 1, 0, 0, 0, 281, 280, 1, 0, 0, 0, 282, 51, 1, 0, 0, 0, 283, 284, 5, 35, 0, 0, 284, 288, 5, 32, 0, 0, 285, 287, 3, 46, 23, 0, 286, 285, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 53, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 292, 5, 23, 0, 0, 292, 293, 5, 32, 0, 0, 293, 298, 5, 30, 0, 0, 294, 297, 3, 46, 23, 0, 295, 297, 3, 44, 22, 0, 296, 294, 1, 0, 0, 0, 296, 295, 1, 0, 0, 0, 297, 300, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 55, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 301, 304, 3, 58, 29, 0, 302, 304, 3, 60, 30, 0, 303, 301, 1, 0, 0, 0, 303, 302, 1, 0, 0, 0, 304, 57, 1, 0, 0, 0, 305, 306, 7, 3, 0, 0, 306, 307, 3, 14, 7, 0, 307, 59, 1, 0, 0, 0, 308, 311, 3, 14, 7, 0, 309, 311, 3, 58, 29, 0, 310, 308, 1, 0, 0, 0, 310, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 315, 3, 62, 31, 0, 313, 316, 3, 14, 7, 0, 314, 316, 3, 56, 28, 0, 315, 313, 1, 0, 0, 0, 315, 314, 1, 0, 0, 0, 316, 61, 1, 0, 0, 0, 317, 321, 3, 64, 32, 0, 318, 321, 3, 66, 33, 0, 319, 321, 3, 68, 34, 0, 320, 317, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 320, 319, 1, 0, 0, 0, 321, 63, 1, 0, 0, 0, 322, 323, 7, 4, 0, 0, 323, 65, 1, 0, 0, 0, 324, 325, 7, 5, 0, 0, 325, 67, 1, 0, 0, 0, 326, 327, 7, 6, 0, 0, 327, 69, 1, 0, 0, 0, 328, 329, 5, 17, 0, 0, 329, 337, 5, 8, 0, 0, 330, 334, 5, 12, 0, 0, 331, 333, 3, 72, 36, 0, 332, 331, 1, 0, 0, 0, 333, 336, 1, 0, 0, 0, 334, 332, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 338, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 337, 330, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 351, 5, 8, 0, 0, 342, 346, 5, 15, 0, 0, 343, 345, 3, 76, 38, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 349, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 351, 5, 15, 0, 0, 350, 328, 1, 0, 0, 0, 350, 342, 1, 0, 0, 0, 351, 71, 1, 0, 0, 0, 352, 355, 3, 80, 40, 0, 353, 355, 3, 74, 37, 0, 354, 352, 1, 0, 0, 0, 354, 353, 1, 0, 0, 0, 355, 73, 1, 0, 0, 0, 356, 357, 5, 46, 0, 0, 357, 75, 1, 0, 0, 0, 358, 361, 3, 80, 40, 0, 359, 361, 3, 78, 39, 0, 360, 358, 1, 0, 0, 0, 360, 359, 1, 0, 0, 0, 361, 77, 1, 0, 0, 0, 362, 363, 5, 44, 0, 0, 363, 79, 1, 0, 0, 0, 364, 365, 5, 43, 0, 0, 365, 366, 3, 12, 6, 0, 366, 367, 5, 6, 0, 0, 367, 81, 1, 0, 0, 0, 39, 87, 92, 102, 112, 117, 127, 141, 151, 153, 164, 172, 176, 178, 186, 199, 204, 209, 213, 220, 231, 234, 241, 254, 263, 267, 281, 288, 296, 298, 303, 310, 315, 320, 334, 339, 346, 350, 354, 360]
\ No newline at end of file
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.java
index 5d5346463fb..2827484b3c4 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.java
@@ -46,19 +46,20 @@ public class HCLParser extends Parser {
RULE_tuple = 11, RULE_object = 12, RULE_objectelem = 13, RULE_forExpr = 14,
RULE_forTupleExpr = 15, RULE_forObjectExpr = 16, RULE_forIntro = 17, RULE_forCond = 18,
RULE_variableExpr = 19, RULE_functionCall = 20, RULE_arguments = 21, RULE_index = 22,
- RULE_getAttr = 23, RULE_splat = 24, RULE_attrSplat = 25, RULE_fullSplat = 26,
- RULE_operation = 27, RULE_unaryOp = 28, RULE_binaryOp = 29, RULE_binaryOperator = 30,
- RULE_compareOperator = 31, RULE_arithmeticOperator = 32, RULE_logicOperator = 33,
- RULE_templateExpr = 34, RULE_heredocTemplatePart = 35, RULE_heredocLiteral = 36,
- RULE_quotedTemplatePart = 37, RULE_stringLiteral = 38, RULE_templateInterpolation = 39;
+ RULE_getAttr = 23, RULE_legacyIndexAttr = 24, RULE_splat = 25, RULE_attrSplat = 26,
+ RULE_fullSplat = 27, RULE_operation = 28, RULE_unaryOp = 29, RULE_binaryOp = 30,
+ RULE_binaryOperator = 31, RULE_compareOperator = 32, RULE_arithmeticOperator = 33,
+ RULE_logicOperator = 34, RULE_templateExpr = 35, RULE_heredocTemplatePart = 36,
+ RULE_heredocLiteral = 37, RULE_quotedTemplatePart = 38, RULE_stringLiteral = 39,
+ RULE_templateInterpolation = 40;
private static String[] makeRuleNames() {
return new String[] {
"configFile", "body", "bodyContent", "attribute", "block", "blockLabel",
"expression", "exprTerm", "blockExpr", "literalValue", "collectionValue",
"tuple", "object", "objectelem", "forExpr", "forTupleExpr", "forObjectExpr",
"forIntro", "forCond", "variableExpr", "functionCall", "arguments", "index",
- "getAttr", "splat", "attrSplat", "fullSplat", "operation", "unaryOp",
- "binaryOp", "binaryOperator", "compareOperator", "arithmeticOperator",
+ "getAttr", "legacyIndexAttr", "splat", "attrSplat", "fullSplat", "operation",
+ "unaryOp", "binaryOp", "binaryOperator", "compareOperator", "arithmeticOperator",
"logicOperator", "templateExpr", "heredocTemplatePart", "heredocLiteral",
"quotedTemplatePart", "stringLiteral", "templateInterpolation"
};
@@ -168,7 +169,7 @@ public final ConfigFileContext configFile() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(80);
+ setState(82);
body();
}
}
@@ -217,17 +218,17 @@ public final BodyContext body() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(85);
+ setState(87);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==Identifier) {
{
{
- setState(82);
+ setState(84);
bodyContent();
}
}
- setState(87);
+ setState(89);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -275,20 +276,20 @@ public final BodyContentContext bodyContent() throws RecognitionException {
BodyContentContext _localctx = new BodyContentContext(_ctx, getState());
enterRule(_localctx, 4, RULE_bodyContent);
try {
- setState(90);
+ setState(92);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(88);
+ setState(90);
attribute();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(89);
+ setState(91);
block();
}
break;
@@ -337,11 +338,11 @@ public final AttributeContext attribute() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(92);
+ setState(94);
match(Identifier);
- setState(93);
+ setState(95);
match(ASSIGN);
- setState(94);
+ setState(96);
expression(0);
}
}
@@ -394,23 +395,23 @@ public final BlockContext block() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(96);
+ setState(98);
match(Identifier);
- setState(100);
+ setState(102);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==Identifier || _la==QUOTE) {
{
{
- setState(97);
+ setState(99);
blockLabel();
}
}
- setState(102);
+ setState(104);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(103);
+ setState(105);
blockExpr();
}
}
@@ -458,24 +459,24 @@ public final BlockLabelContext blockLabel() throws RecognitionException {
BlockLabelContext _localctx = new BlockLabelContext(_ctx, getState());
enterRule(_localctx, 10, RULE_blockLabel);
try {
- setState(110);
+ setState(112);
_errHandler.sync(this);
switch (_input.LA(1)) {
case QUOTE:
enterOuterAlt(_localctx, 1);
{
- setState(105);
+ setState(107);
match(QUOTE);
- setState(106);
+ setState(108);
stringLiteral();
- setState(107);
+ setState(109);
match(QUOTE);
}
break;
case Identifier:
enterOuterAlt(_localctx, 2);
{
- setState(109);
+ setState(111);
match(Identifier);
}
break;
@@ -587,7 +588,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(115);
+ setState(117);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
case 1:
@@ -596,7 +597,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_ctx = _localctx;
_prevctx = _localctx;
- setState(113);
+ setState(115);
exprTerm(0);
}
break;
@@ -605,13 +606,13 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new OperationExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(114);
+ setState(116);
operation();
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(125);
+ setState(127);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,5,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -622,20 +623,20 @@ private ExpressionContext expression(int _p) throws RecognitionException {
{
_localctx = new ConditionalExpressionContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(117);
+ setState(119);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(118);
+ setState(120);
match(QUESTION);
- setState(119);
+ setState(121);
expression(0);
- setState(120);
+ setState(122);
match(COLON);
- setState(121);
+ setState(123);
expression(2);
}
}
}
- setState(127);
+ setState(129);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,5,_ctx);
}
@@ -816,6 +817,29 @@ public T accept(ParseTreeVisitor extends T> visitor) {
}
}
@SuppressWarnings("CheckReturnValue")
+ public static class LegacyIndexAttributeExpressionContext extends ExprTermContext {
+ public ExprTermContext exprTerm() {
+ return getRuleContext(ExprTermContext.class,0);
+ }
+ public LegacyIndexAttrContext legacyIndexAttr() {
+ return getRuleContext(LegacyIndexAttrContext.class,0);
+ }
+ public LegacyIndexAttributeExpressionContext(ExprTermContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof HCLParserListener ) ((HCLParserListener)listener).enterLegacyIndexAttributeExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof HCLParserListener ) ((HCLParserListener)listener).exitLegacyIndexAttributeExpression(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof HCLParserVisitor ) return ((HCLParserVisitor extends T>)visitor).visitLegacyIndexAttributeExpression(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ @SuppressWarnings("CheckReturnValue")
public static class ForExpressionContext extends ExprTermContext {
public ForExprContext forExpr() {
return getRuleContext(ForExprContext.class,0);
@@ -891,7 +915,7 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(139);
+ setState(141);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
case 1:
@@ -900,7 +924,7 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
_ctx = _localctx;
_prevctx = _localctx;
- setState(129);
+ setState(131);
templateExpr();
}
break;
@@ -909,7 +933,7 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
_localctx = new LiteralExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(130);
+ setState(132);
literalValue();
}
break;
@@ -918,7 +942,7 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
_localctx = new ForExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(131);
+ setState(133);
forExpr();
}
break;
@@ -927,7 +951,7 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
_localctx = new CollectionValueExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(132);
+ setState(134);
collectionValue();
}
break;
@@ -936,7 +960,7 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
_localctx = new VariableExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(133);
+ setState(135);
variableExpr();
}
break;
@@ -945,7 +969,7 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
_localctx = new FunctionCallExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(134);
+ setState(136);
functionCall();
}
break;
@@ -954,17 +978,17 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
_localctx = new ParentheticalExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(135);
+ setState(137);
match(LPAREN);
- setState(136);
+ setState(138);
expression(0);
- setState(137);
+ setState(139);
match(RPAREN);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(149);
+ setState(153);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,8,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -972,16 +996,16 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(147);
+ setState(151);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) {
case 1:
{
_localctx = new IndexAccessExpressionContext(new ExprTermContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_exprTerm);
- setState(141);
- if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(142);
+ setState(143);
+ if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
+ setState(144);
index();
}
break;
@@ -989,26 +1013,36 @@ private ExprTermContext exprTerm(int _p) throws RecognitionException {
{
_localctx = new AttributeAccessExpressionContext(new ExprTermContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_exprTerm);
- setState(143);
- if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(144);
+ setState(145);
+ if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
+ setState(146);
getAttr();
}
break;
case 3:
+ {
+ _localctx = new LegacyIndexAttributeExpressionContext(new ExprTermContext(_parentctx, _parentState));
+ pushNewRecursionContext(_localctx, _startState, RULE_exprTerm);
+ setState(147);
+ if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
+ setState(148);
+ legacyIndexAttr();
+ }
+ break;
+ case 4:
{
_localctx = new SplatExpressionContext(new ExprTermContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_exprTerm);
- setState(145);
+ setState(149);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(146);
+ setState(150);
splat();
}
break;
}
}
}
- setState(151);
+ setState(155);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,8,_ctx);
}
@@ -1057,11 +1091,11 @@ public final BlockExprContext blockExpr() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(152);
+ setState(156);
match(LBRACE);
- setState(153);
+ setState(157);
body();
- setState(154);
+ setState(158);
match(RBRACE);
}
}
@@ -1107,7 +1141,7 @@ public final LiteralValueContext literalValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(156);
+ setState(160);
_la = _input.LA(1);
if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 90112L) != 0) ) {
_errHandler.recoverInline(this);
@@ -1161,20 +1195,20 @@ public final CollectionValueContext collectionValue() throws RecognitionExceptio
CollectionValueContext _localctx = new CollectionValueContext(_ctx, getState());
enterRule(_localctx, 20, RULE_collectionValue);
try {
- setState(160);
+ setState(164);
_errHandler.sync(this);
switch (_input.LA(1)) {
case LBRACK:
enterOuterAlt(_localctx, 1);
{
- setState(158);
+ setState(162);
tuple();
}
break;
case LBRACE:
enterOuterAlt(_localctx, 2);
{
- setState(159);
+ setState(163);
object();
}
break;
@@ -1234,39 +1268,39 @@ public final TupleContext tuple() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(162);
+ setState(166);
match(LBRACK);
- setState(174);
+ setState(178);
_errHandler.sync(this);
_la = _input.LA(1);
if (((_la) & ~0x3f) == 0 && ((1L << _la) & 8648909094L) != 0) {
{
- setState(163);
+ setState(167);
expression(0);
- setState(168);
+ setState(172);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,10,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(164);
+ setState(168);
match(COMMA);
- setState(165);
+ setState(169);
expression(0);
}
}
}
- setState(170);
+ setState(174);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,10,_ctx);
}
- setState(172);
+ setState(176);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(171);
+ setState(175);
match(COMMA);
}
}
@@ -1274,7 +1308,7 @@ public final TupleContext tuple() throws RecognitionException {
}
}
- setState(176);
+ setState(180);
match(RBRACK);
}
}
@@ -1325,23 +1359,23 @@ public final ObjectContext object() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(178);
- match(LBRACE);
setState(182);
+ match(LBRACE);
+ setState(186);
_errHandler.sync(this);
_la = _input.LA(1);
while (((_la) & ~0x3f) == 0 && ((1L << _la) & 8648909094L) != 0) {
{
{
- setState(179);
+ setState(183);
objectelem();
}
}
- setState(184);
+ setState(188);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(185);
+ setState(189);
match(RBRACE);
}
}
@@ -1406,55 +1440,55 @@ public final ObjectelemContext objectelem() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(200);
+ setState(204);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
case 1:
{
- setState(187);
+ setState(191);
match(Identifier);
}
break;
case 2:
{
- setState(188);
+ setState(192);
match(LPAREN);
- setState(189);
+ setState(193);
match(Identifier);
- setState(190);
+ setState(194);
match(RPAREN);
}
break;
case 3:
{
- setState(191);
- match(QUOTE);
setState(195);
+ match(QUOTE);
+ setState(199);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==TEMPLATE_INTERPOLATION_START || _la==TemplateStringLiteral) {
{
{
- setState(192);
+ setState(196);
quotedTemplatePart();
}
}
- setState(197);
+ setState(201);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(198);
+ setState(202);
match(QUOTE);
}
break;
case 4:
{
- setState(199);
+ setState(203);
expression(0);
}
break;
}
- setState(202);
+ setState(206);
_la = _input.LA(1);
if ( !(_la==ASSIGN || _la==COLON) ) {
_errHandler.recoverInline(this);
@@ -1464,14 +1498,14 @@ public final ObjectelemContext objectelem() throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(203);
+ setState(207);
expression(0);
- setState(205);
+ setState(209);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(204);
+ setState(208);
match(COMMA);
}
}
@@ -1520,20 +1554,20 @@ public final ForExprContext forExpr() throws RecognitionException {
ForExprContext _localctx = new ForExprContext(_ctx, getState());
enterRule(_localctx, 28, RULE_forExpr);
try {
- setState(209);
+ setState(213);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FOR_BRACK:
enterOuterAlt(_localctx, 1);
{
- setState(207);
+ setState(211);
forTupleExpr();
}
break;
case FOR_BRACE:
enterOuterAlt(_localctx, 2);
{
- setState(208);
+ setState(212);
forObjectExpr();
}
break;
@@ -1592,25 +1626,25 @@ public final ForTupleExprContext forTupleExpr() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(211);
+ setState(215);
match(FOR_BRACK);
- setState(212);
+ setState(216);
forIntro();
- setState(213);
+ setState(217);
match(COLON);
- setState(214);
+ setState(218);
expression(0);
- setState(216);
+ setState(220);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IF) {
{
- setState(215);
+ setState(219);
forCond();
}
}
- setState(218);
+ setState(222);
match(RBRACK);
}
}
@@ -1670,39 +1704,39 @@ public final ForObjectExprContext forObjectExpr() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(220);
+ setState(224);
match(FOR_BRACE);
- setState(221);
+ setState(225);
forIntro();
- setState(222);
+ setState(226);
match(COLON);
- setState(223);
+ setState(227);
expression(0);
- setState(224);
+ setState(228);
match(ARROW);
- setState(225);
+ setState(229);
expression(0);
- setState(227);
+ setState(231);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ELLIPSIS) {
{
- setState(226);
+ setState(230);
match(ELLIPSIS);
}
}
- setState(230);
+ setState(234);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IF) {
{
- setState(229);
+ setState(233);
forCond();
}
}
- setState(232);
+ setState(236);
match(RBRACE);
}
}
@@ -1754,23 +1788,23 @@ public final ForIntroContext forIntro() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(234);
+ setState(238);
match(Identifier);
- setState(237);
+ setState(241);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(235);
+ setState(239);
match(COMMA);
- setState(236);
+ setState(240);
match(Identifier);
}
}
- setState(239);
+ setState(243);
match(IN);
- setState(240);
+ setState(244);
expression(0);
}
}
@@ -1816,9 +1850,9 @@ public final ForCondContext forCond() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(242);
+ setState(246);
match(IF);
- setState(243);
+ setState(247);
expression(0);
}
}
@@ -1861,7 +1895,7 @@ public final VariableExprContext variableExpr() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(245);
+ setState(249);
match(Identifier);
}
}
@@ -1910,21 +1944,21 @@ public final FunctionCallContext functionCall() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(247);
+ setState(251);
match(Identifier);
- setState(248);
+ setState(252);
match(LPAREN);
- setState(250);
+ setState(254);
_errHandler.sync(this);
_la = _input.LA(1);
if (((_la) & ~0x3f) == 0 && ((1L << _la) & 8648909094L) != 0) {
{
- setState(249);
+ setState(253);
arguments();
}
}
- setState(252);
+ setState(256);
match(RPAREN);
}
}
@@ -1979,32 +2013,32 @@ public final ArgumentsContext arguments() throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(254);
+ setState(258);
expression(0);
- setState(259);
+ setState(263);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,23,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(255);
+ setState(259);
match(COMMA);
- setState(256);
+ setState(260);
expression(0);
}
}
}
- setState(261);
+ setState(265);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,23,_ctx);
}
- setState(263);
+ setState(267);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA || _la==ELLIPSIS) {
{
- setState(262);
+ setState(266);
_la = _input.LA(1);
if ( !(_la==COMMA || _la==ELLIPSIS) ) {
_errHandler.recoverInline(this);
@@ -2062,11 +2096,11 @@ public final IndexContext index() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(265);
+ setState(269);
match(LBRACK);
- setState(266);
+ setState(270);
expression(0);
- setState(267);
+ setState(271);
match(RBRACK);
}
}
@@ -2110,9 +2144,9 @@ public final GetAttrContext getAttr() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(269);
+ setState(273);
match(DOT);
- setState(270);
+ setState(274);
match(Identifier);
}
}
@@ -2127,6 +2161,52 @@ public final GetAttrContext getAttr() throws RecognitionException {
return _localctx;
}
+ @SuppressWarnings("CheckReturnValue")
+ public static class LegacyIndexAttrContext extends ParserRuleContext {
+ public TerminalNode DOT() { return getToken(HCLParser.DOT, 0); }
+ public TerminalNode NumericLiteral() { return getToken(HCLParser.NumericLiteral, 0); }
+ public LegacyIndexAttrContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_legacyIndexAttr; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof HCLParserListener ) ((HCLParserListener)listener).enterLegacyIndexAttr(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof HCLParserListener ) ((HCLParserListener)listener).exitLegacyIndexAttr(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof HCLParserVisitor ) return ((HCLParserVisitor extends T>)visitor).visitLegacyIndexAttr(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final LegacyIndexAttrContext legacyIndexAttr() throws RecognitionException {
+ LegacyIndexAttrContext _localctx = new LegacyIndexAttrContext(_ctx, getState());
+ enterRule(_localctx, 48, RULE_legacyIndexAttr);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(276);
+ match(DOT);
+ setState(277);
+ match(NumericLiteral);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
@SuppressWarnings("CheckReturnValue")
public static class SplatContext extends ParserRuleContext {
public AttrSplatContext attrSplat() {
@@ -2156,22 +2236,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final SplatContext splat() throws RecognitionException {
SplatContext _localctx = new SplatContext(_ctx, getState());
- enterRule(_localctx, 48, RULE_splat);
+ enterRule(_localctx, 50, RULE_splat);
try {
- setState(274);
+ setState(281);
_errHandler.sync(this);
switch (_input.LA(1)) {
case DOT:
enterOuterAlt(_localctx, 1);
{
- setState(272);
+ setState(279);
attrSplat();
}
break;
case LBRACK:
enterOuterAlt(_localctx, 2);
{
- setState(273);
+ setState(280);
fullSplat();
}
break;
@@ -2221,28 +2301,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final AttrSplatContext attrSplat() throws RecognitionException {
AttrSplatContext _localctx = new AttrSplatContext(_ctx, getState());
- enterRule(_localctx, 50, RULE_attrSplat);
+ enterRule(_localctx, 52, RULE_attrSplat);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(276);
+ setState(283);
match(DOT);
- setState(277);
+ setState(284);
match(MUL);
- setState(281);
+ setState(288);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,26,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(278);
+ setState(285);
getAttr();
}
}
}
- setState(283);
+ setState(290);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,26,_ctx);
}
@@ -2297,35 +2377,35 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FullSplatContext fullSplat() throws RecognitionException {
FullSplatContext _localctx = new FullSplatContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_fullSplat);
+ enterRule(_localctx, 54, RULE_fullSplat);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(284);
+ setState(291);
match(LBRACK);
- setState(285);
+ setState(292);
match(MUL);
- setState(286);
+ setState(293);
match(RBRACK);
- setState(291);
+ setState(298);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,28,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
- setState(289);
+ setState(296);
_errHandler.sync(this);
switch (_input.LA(1)) {
case DOT:
{
- setState(287);
+ setState(294);
getAttr();
}
break;
case LBRACK:
{
- setState(288);
+ setState(295);
index();
}
break;
@@ -2334,7 +2414,7 @@ public final FullSplatContext fullSplat() throws RecognitionException {
}
}
}
- setState(293);
+ setState(300);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,28,_ctx);
}
@@ -2380,22 +2460,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final OperationContext operation() throws RecognitionException {
OperationContext _localctx = new OperationContext(_ctx, getState());
- enterRule(_localctx, 54, RULE_operation);
+ enterRule(_localctx, 56, RULE_operation);
try {
- setState(296);
+ setState(303);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(294);
+ setState(301);
unaryOp();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(295);
+ setState(302);
binaryOp();
}
break;
@@ -2440,12 +2520,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final UnaryOpContext unaryOp() throws RecognitionException {
UnaryOpContext _localctx = new UnaryOpContext(_ctx, getState());
- enterRule(_localctx, 56, RULE_unaryOp);
+ enterRule(_localctx, 58, RULE_unaryOp);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(298);
+ setState(305);
_la = _input.LA(1);
if ( !(_la==MINUS || _la==NOT) ) {
_errHandler.recoverInline(this);
@@ -2455,7 +2535,7 @@ public final UnaryOpContext unaryOp() throws RecognitionException {
_errHandler.reportMatch(this);
consume();
}
- setState(299);
+ setState(306);
exprTerm(0);
}
}
@@ -2508,11 +2588,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BinaryOpContext binaryOp() throws RecognitionException {
BinaryOpContext _localctx = new BinaryOpContext(_ctx, getState());
- enterRule(_localctx, 58, RULE_binaryOp);
+ enterRule(_localctx, 60, RULE_binaryOp);
try {
enterOuterAlt(_localctx, 1);
{
- setState(303);
+ setState(310);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FOR_BRACE:
@@ -2527,34 +2607,34 @@ public final BinaryOpContext binaryOp() throws RecognitionException {
case LBRACK:
case LPAREN:
{
- setState(301);
+ setState(308);
exprTerm(0);
}
break;
case MINUS:
case NOT:
{
- setState(302);
+ setState(309);
unaryOp();
}
break;
default:
throw new NoViableAltException(this);
}
- setState(305);
+ setState(312);
binaryOperator();
- setState(308);
+ setState(315);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) {
case 1:
{
- setState(306);
+ setState(313);
exprTerm(0);
}
break;
case 2:
{
- setState(307);
+ setState(314);
operation();
}
break;
@@ -2604,9 +2684,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BinaryOperatorContext binaryOperator() throws RecognitionException {
BinaryOperatorContext _localctx = new BinaryOperatorContext(_ctx, getState());
- enterRule(_localctx, 60, RULE_binaryOperator);
+ enterRule(_localctx, 62, RULE_binaryOperator);
try {
- setState(313);
+ setState(320);
_errHandler.sync(this);
switch (_input.LA(1)) {
case EQ:
@@ -2617,7 +2697,7 @@ public final BinaryOperatorContext binaryOperator() throws RecognitionException
case GEQ:
enterOuterAlt(_localctx, 1);
{
- setState(310);
+ setState(317);
compareOperator();
}
break;
@@ -2628,7 +2708,7 @@ public final BinaryOperatorContext binaryOperator() throws RecognitionException
case MOD:
enterOuterAlt(_localctx, 2);
{
- setState(311);
+ setState(318);
arithmeticOperator();
}
break;
@@ -2636,7 +2716,7 @@ public final BinaryOperatorContext binaryOperator() throws RecognitionException
case OR:
enterOuterAlt(_localctx, 3);
{
- setState(312);
+ setState(319);
logicOperator();
}
break;
@@ -2684,12 +2764,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final CompareOperatorContext compareOperator() throws RecognitionException {
CompareOperatorContext _localctx = new CompareOperatorContext(_ctx, getState());
- enterRule(_localctx, 62, RULE_compareOperator);
+ enterRule(_localctx, 64, RULE_compareOperator);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(315);
+ setState(322);
_la = _input.LA(1);
if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 155024621568L) != 0) ) {
_errHandler.recoverInline(this);
@@ -2740,12 +2820,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ArithmeticOperatorContext arithmeticOperator() throws RecognitionException {
ArithmeticOperatorContext _localctx = new ArithmeticOperatorContext(_ctx, getState());
- enterRule(_localctx, 64, RULE_arithmeticOperator);
+ enterRule(_localctx, 66, RULE_arithmeticOperator);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(317);
+ setState(324);
_la = _input.LA(1);
if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 1172559888384L) != 0) ) {
_errHandler.recoverInline(this);
@@ -2793,12 +2873,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LogicOperatorContext logicOperator() throws RecognitionException {
LogicOperatorContext _localctx = new LogicOperatorContext(_ctx, getState());
- enterRule(_localctx, 66, RULE_logicOperator);
+ enterRule(_localctx, 68, RULE_logicOperator);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(319);
+ setState(326);
_la = _input.LA(1);
if ( !(_la==AND || _la==OR) ) {
_errHandler.recoverInline(this);
@@ -2895,49 +2975,49 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TemplateExprContext templateExpr() throws RecognitionException {
TemplateExprContext _localctx = new TemplateExprContext(_ctx, getState());
- enterRule(_localctx, 68, RULE_templateExpr);
+ enterRule(_localctx, 70, RULE_templateExpr);
int _la;
try {
- setState(343);
+ setState(350);
_errHandler.sync(this);
switch (_input.LA(1)) {
case HEREDOC_START:
_localctx = new HeredocContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(321);
+ setState(328);
match(HEREDOC_START);
- setState(322);
+ setState(329);
match(Identifier);
- setState(330);
+ setState(337);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(323);
+ setState(330);
match(NEWLINE);
- setState(327);
+ setState(334);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==TEMPLATE_INTERPOLATION_START || _la==HTemplateLiteral) {
{
{
- setState(324);
+ setState(331);
heredocTemplatePart();
}
}
- setState(329);
+ setState(336);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(332);
+ setState(339);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==NEWLINE );
- setState(334);
+ setState(341);
match(Identifier);
}
break;
@@ -2945,23 +3025,23 @@ public final TemplateExprContext templateExpr() throws RecognitionException {
_localctx = new QuotedTemplateContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(335);
+ setState(342);
match(QUOTE);
- setState(339);
+ setState(346);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==TEMPLATE_INTERPOLATION_START || _la==TemplateStringLiteral) {
{
{
- setState(336);
+ setState(343);
quotedTemplatePart();
}
}
- setState(341);
+ setState(348);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(342);
+ setState(349);
match(QUOTE);
}
break;
@@ -3009,22 +3089,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final HeredocTemplatePartContext heredocTemplatePart() throws RecognitionException {
HeredocTemplatePartContext _localctx = new HeredocTemplatePartContext(_ctx, getState());
- enterRule(_localctx, 70, RULE_heredocTemplatePart);
+ enterRule(_localctx, 72, RULE_heredocTemplatePart);
try {
- setState(347);
+ setState(354);
_errHandler.sync(this);
switch (_input.LA(1)) {
case TEMPLATE_INTERPOLATION_START:
enterOuterAlt(_localctx, 1);
{
- setState(345);
+ setState(352);
templateInterpolation();
}
break;
case HTemplateLiteral:
enterOuterAlt(_localctx, 2);
{
- setState(346);
+ setState(353);
heredocLiteral();
}
break;
@@ -3067,11 +3147,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final HeredocLiteralContext heredocLiteral() throws RecognitionException {
HeredocLiteralContext _localctx = new HeredocLiteralContext(_ctx, getState());
- enterRule(_localctx, 72, RULE_heredocLiteral);
+ enterRule(_localctx, 74, RULE_heredocLiteral);
try {
enterOuterAlt(_localctx, 1);
{
- setState(349);
+ setState(356);
match(HTemplateLiteral);
}
}
@@ -3115,22 +3195,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final QuotedTemplatePartContext quotedTemplatePart() throws RecognitionException {
QuotedTemplatePartContext _localctx = new QuotedTemplatePartContext(_ctx, getState());
- enterRule(_localctx, 74, RULE_quotedTemplatePart);
+ enterRule(_localctx, 76, RULE_quotedTemplatePart);
try {
- setState(353);
+ setState(360);
_errHandler.sync(this);
switch (_input.LA(1)) {
case TEMPLATE_INTERPOLATION_START:
enterOuterAlt(_localctx, 1);
{
- setState(351);
+ setState(358);
templateInterpolation();
}
break;
case TemplateStringLiteral:
enterOuterAlt(_localctx, 2);
{
- setState(352);
+ setState(359);
stringLiteral();
}
break;
@@ -3173,11 +3253,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final StringLiteralContext stringLiteral() throws RecognitionException {
StringLiteralContext _localctx = new StringLiteralContext(_ctx, getState());
- enterRule(_localctx, 76, RULE_stringLiteral);
+ enterRule(_localctx, 78, RULE_stringLiteral);
try {
enterOuterAlt(_localctx, 1);
{
- setState(355);
+ setState(362);
match(TemplateStringLiteral);
}
}
@@ -3220,15 +3300,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TemplateInterpolationContext templateInterpolation() throws RecognitionException {
TemplateInterpolationContext _localctx = new TemplateInterpolationContext(_ctx, getState());
- enterRule(_localctx, 78, RULE_templateInterpolation);
+ enterRule(_localctx, 80, RULE_templateInterpolation);
try {
enterOuterAlt(_localctx, 1);
{
- setState(357);
+ setState(364);
match(TEMPLATE_INTERPOLATION_START);
- setState(358);
+ setState(365);
expression(0);
- setState(359);
+ setState(366);
match(RBRACE);
}
}
@@ -3263,17 +3343,19 @@ private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
private boolean exprTerm_sempred(ExprTermContext _localctx, int predIndex) {
switch (predIndex) {
case 1:
- return precpred(_ctx, 4);
+ return precpred(_ctx, 5);
case 2:
- return precpred(_ctx, 3);
+ return precpred(_ctx, 4);
case 3:
+ return precpred(_ctx, 3);
+ case 4:
return precpred(_ctx, 2);
}
return true;
}
public static final String _serializedATN =
- "\u0004\u0001/\u016a\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+ "\u0004\u0001/\u0171\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
@@ -3284,225 +3366,229 @@ private boolean exprTerm_sempred(ExprTermContext _localctx, int predIndex) {
"\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+
"\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+
"\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+
- "#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0001"+
- "\u0000\u0001\u0000\u0001\u0001\u0005\u0001T\b\u0001\n\u0001\f\u0001W\t"+
- "\u0001\u0001\u0002\u0001\u0002\u0003\u0002[\b\u0002\u0001\u0003\u0001"+
- "\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0005\u0004c\b"+
- "\u0004\n\u0004\f\u0004f\t\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001"+
- "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005o\b\u0005\u0001"+
- "\u0006\u0001\u0006\u0001\u0006\u0003\u0006t\b\u0006\u0001\u0006\u0001"+
- "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0005\u0006|\b"+
- "\u0006\n\u0006\f\u0006\u007f\t\u0006\u0001\u0007\u0001\u0007\u0001\u0007"+
- "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
- "\u0001\u0007\u0001\u0007\u0003\u0007\u008c\b\u0007\u0001\u0007\u0001\u0007"+
- "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0005\u0007\u0094\b\u0007"+
- "\n\u0007\f\u0007\u0097\t\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t"+
- "\u0001\t\u0001\n\u0001\n\u0003\n\u00a1\b\n\u0001\u000b\u0001\u000b\u0001"+
- "\u000b\u0001\u000b\u0005\u000b\u00a7\b\u000b\n\u000b\f\u000b\u00aa\t\u000b"+
- "\u0001\u000b\u0003\u000b\u00ad\b\u000b\u0003\u000b\u00af\b\u000b\u0001"+
- "\u000b\u0001\u000b\u0001\f\u0001\f\u0005\f\u00b5\b\f\n\f\f\f\u00b8\t\f"+
- "\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0005"+
- "\r\u00c2\b\r\n\r\f\r\u00c5\t\r\u0001\r\u0001\r\u0003\r\u00c9\b\r\u0001"+
- "\r\u0001\r\u0001\r\u0003\r\u00ce\b\r\u0001\u000e\u0001\u000e\u0003\u000e"+
- "\u00d2\b\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+
- "\u0003\u000f\u00d9\b\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+
- "\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0003\u0010"+
- "\u00e4\b\u0010\u0001\u0010\u0003\u0010\u00e7\b\u0010\u0001\u0010\u0001"+
- "\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0003\u0011\u00ee\b\u0011\u0001"+
- "\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+
- "\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u00fb"+
- "\b\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0005"+
- "\u0015\u0102\b\u0015\n\u0015\f\u0015\u0105\t\u0015\u0001\u0015\u0003\u0015"+
- "\u0108\b\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017"+
- "\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0003\u0018\u0113\b\u0018"+
- "\u0001\u0019\u0001\u0019\u0001\u0019\u0005\u0019\u0118\b\u0019\n\u0019"+
- "\f\u0019\u011b\t\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+
- "\u0001\u001a\u0005\u001a\u0122\b\u001a\n\u001a\f\u001a\u0125\t\u001a\u0001"+
- "\u001b\u0001\u001b\u0003\u001b\u0129\b\u001b\u0001\u001c\u0001\u001c\u0001"+
- "\u001c\u0001\u001d\u0001\u001d\u0003\u001d\u0130\b\u001d\u0001\u001d\u0001"+
- "\u001d\u0001\u001d\u0003\u001d\u0135\b\u001d\u0001\u001e\u0001\u001e\u0001"+
- "\u001e\u0003\u001e\u013a\b\u001e\u0001\u001f\u0001\u001f\u0001 \u0001"+
- " \u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001\"\u0005\"\u0146\b\"\n\""+
- "\f\"\u0149\t\"\u0004\"\u014b\b\"\u000b\"\f\"\u014c\u0001\"\u0001\"\u0001"+
- "\"\u0005\"\u0152\b\"\n\"\f\"\u0155\t\"\u0001\"\u0003\"\u0158\b\"\u0001"+
- "#\u0001#\u0003#\u015c\b#\u0001$\u0001$\u0001%\u0001%\u0003%\u0162\b%\u0001"+
- "&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0000\u0002\f\u000e("+
- "\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a"+
- "\u001c\u001e \"$&(*,.02468:<>@BDFHJLN\u0000\u0007\u0002\u0000\r\u000e"+
- "\u0010\u0010\u0002\u0000\u0007\u0007\u0016\u0016\u0002\u0000\'\'))\u0002"+
- "\u0000\u0019\u0019!!\u0004\u0000\u0014\u0015\u001b\u001c\"\"%%\u0005\u0000"+
- "\u0012\u0012\u0019\u0019 $$((\u0002\u0000\u0013\u0013\u001a\u001a\u0171"+
- "\u0000P\u0001\u0000\u0000\u0000\u0002U\u0001\u0000\u0000\u0000\u0004Z"+
- "\u0001\u0000\u0000\u0000\u0006\\\u0001\u0000\u0000\u0000\b`\u0001\u0000"+
- "\u0000\u0000\nn\u0001\u0000\u0000\u0000\fs\u0001\u0000\u0000\u0000\u000e"+
- "\u008b\u0001\u0000\u0000\u0000\u0010\u0098\u0001\u0000\u0000\u0000\u0012"+
- "\u009c\u0001\u0000\u0000\u0000\u0014\u00a0\u0001\u0000\u0000\u0000\u0016"+
- "\u00a2\u0001\u0000\u0000\u0000\u0018\u00b2\u0001\u0000\u0000\u0000\u001a"+
- "\u00c8\u0001\u0000\u0000\u0000\u001c\u00d1\u0001\u0000\u0000\u0000\u001e"+
- "\u00d3\u0001\u0000\u0000\u0000 \u00dc\u0001\u0000\u0000\u0000\"\u00ea"+
- "\u0001\u0000\u0000\u0000$\u00f2\u0001\u0000\u0000\u0000&\u00f5\u0001\u0000"+
- "\u0000\u0000(\u00f7\u0001\u0000\u0000\u0000*\u00fe\u0001\u0000\u0000\u0000"+
- ",\u0109\u0001\u0000\u0000\u0000.\u010d\u0001\u0000\u0000\u00000\u0112"+
- "\u0001\u0000\u0000\u00002\u0114\u0001\u0000\u0000\u00004\u011c\u0001\u0000"+
- "\u0000\u00006\u0128\u0001\u0000\u0000\u00008\u012a\u0001\u0000\u0000\u0000"+
- ":\u012f\u0001\u0000\u0000\u0000<\u0139\u0001\u0000\u0000\u0000>\u013b"+
- "\u0001\u0000\u0000\u0000@\u013d\u0001\u0000\u0000\u0000B\u013f\u0001\u0000"+
- "\u0000\u0000D\u0157\u0001\u0000\u0000\u0000F\u015b\u0001\u0000\u0000\u0000"+
- "H\u015d\u0001\u0000\u0000\u0000J\u0161\u0001\u0000\u0000\u0000L\u0163"+
- "\u0001\u0000\u0000\u0000N\u0165\u0001\u0000\u0000\u0000PQ\u0003\u0002"+
- "\u0001\u0000Q\u0001\u0001\u0000\u0000\u0000RT\u0003\u0004\u0002\u0000"+
- "SR\u0001\u0000\u0000\u0000TW\u0001\u0000\u0000\u0000US\u0001\u0000\u0000"+
- "\u0000UV\u0001\u0000\u0000\u0000V\u0003\u0001\u0000\u0000\u0000WU\u0001"+
- "\u0000\u0000\u0000X[\u0003\u0006\u0003\u0000Y[\u0003\b\u0004\u0000ZX\u0001"+
- "\u0000\u0000\u0000ZY\u0001\u0000\u0000\u0000[\u0005\u0001\u0000\u0000"+
- "\u0000\\]\u0005\b\u0000\u0000]^\u0005\u0007\u0000\u0000^_\u0003\f\u0006"+
- "\u0000_\u0007\u0001\u0000\u0000\u0000`d\u0005\b\u0000\u0000ac\u0003\n"+
- "\u0005\u0000ba\u0001\u0000\u0000\u0000cf\u0001\u0000\u0000\u0000db\u0001"+
- "\u0000\u0000\u0000de\u0001\u0000\u0000\u0000eg\u0001\u0000\u0000\u0000"+
- "fd\u0001\u0000\u0000\u0000gh\u0003\u0010\b\u0000h\t\u0001\u0000\u0000"+
- "\u0000ij\u0005\u000f\u0000\u0000jk\u0003L&\u0000kl\u0005\u000f\u0000\u0000"+
- "lo\u0001\u0000\u0000\u0000mo\u0005\b\u0000\u0000ni\u0001\u0000\u0000\u0000"+
- "nm\u0001\u0000\u0000\u0000o\u000b\u0001\u0000\u0000\u0000pq\u0006\u0006"+
- "\uffff\uffff\u0000qt\u0003\u000e\u0007\u0000rt\u00036\u001b\u0000sp\u0001"+
- "\u0000\u0000\u0000sr\u0001\u0000\u0000\u0000t}\u0001\u0000\u0000\u0000"+
- "uv\n\u0001\u0000\u0000vw\u0005\u001d\u0000\u0000wx\u0003\f\u0006\u0000"+
- "xy\u0005\u0016\u0000\u0000yz\u0003\f\u0006\u0002z|\u0001\u0000\u0000\u0000"+
- "{u\u0001\u0000\u0000\u0000|\u007f\u0001\u0000\u0000\u0000}{\u0001\u0000"+
- "\u0000\u0000}~\u0001\u0000\u0000\u0000~\r\u0001\u0000\u0000\u0000\u007f"+
- "}\u0001\u0000\u0000\u0000\u0080\u0081\u0006\u0007\uffff\uffff\u0000\u0081"+
- "\u008c\u0003D\"\u0000\u0082\u008c\u0003\u0012\t\u0000\u0083\u008c\u0003"+
- "\u001c\u000e\u0000\u0084\u008c\u0003\u0014\n\u0000\u0085\u008c\u0003&"+
- "\u0013\u0000\u0086\u008c\u0003(\u0014\u0000\u0087\u0088\u0005\u0018\u0000"+
- "\u0000\u0088\u0089\u0003\f\u0006\u0000\u0089\u008a\u0005\u001f\u0000\u0000"+
- "\u008a\u008c\u0001\u0000\u0000\u0000\u008b\u0080\u0001\u0000\u0000\u0000"+
- "\u008b\u0082\u0001\u0000\u0000\u0000\u008b\u0083\u0001\u0000\u0000\u0000"+
- "\u008b\u0084\u0001\u0000\u0000\u0000\u008b\u0085\u0001\u0000\u0000\u0000"+
- "\u008b\u0086\u0001\u0000\u0000\u0000\u008b\u0087\u0001\u0000\u0000\u0000"+
- "\u008c\u0095\u0001\u0000\u0000\u0000\u008d\u008e\n\u0004\u0000\u0000\u008e"+
- "\u0094\u0003,\u0016\u0000\u008f\u0090\n\u0003\u0000\u0000\u0090\u0094"+
- "\u0003.\u0017\u0000\u0091\u0092\n\u0002\u0000\u0000\u0092\u0094\u0003"+
- "0\u0018\u0000\u0093\u008d\u0001\u0000\u0000\u0000\u0093\u008f\u0001\u0000"+
- "\u0000\u0000\u0093\u0091\u0001\u0000\u0000\u0000\u0094\u0097\u0001\u0000"+
- "\u0000\u0000\u0095\u0093\u0001\u0000\u0000\u0000\u0095\u0096\u0001\u0000"+
- "\u0000\u0000\u0096\u000f\u0001\u0000\u0000\u0000\u0097\u0095\u0001\u0000"+
- "\u0000\u0000\u0098\u0099\u0005\u0005\u0000\u0000\u0099\u009a\u0003\u0002"+
- "\u0001\u0000\u009a\u009b\u0005\u0006\u0000\u0000\u009b\u0011\u0001\u0000"+
- "\u0000\u0000\u009c\u009d\u0007\u0000\u0000\u0000\u009d\u0013\u0001\u0000"+
- "\u0000\u0000\u009e\u00a1\u0003\u0016\u000b\u0000\u009f\u00a1\u0003\u0018"+
- "\f\u0000\u00a0\u009e\u0001\u0000\u0000\u0000\u00a0\u009f\u0001\u0000\u0000"+
- "\u0000\u00a1\u0015\u0001\u0000\u0000\u0000\u00a2\u00ae\u0005\u0017\u0000"+
- "\u0000\u00a3\u00a8\u0003\f\u0006\u0000\u00a4\u00a5\u0005\'\u0000\u0000"+
- "\u00a5\u00a7\u0003\f\u0006\u0000\u00a6\u00a4\u0001\u0000\u0000\u0000\u00a7"+
- "\u00aa\u0001\u0000\u0000\u0000\u00a8\u00a6\u0001\u0000\u0000\u0000\u00a8"+
- "\u00a9\u0001\u0000\u0000\u0000\u00a9\u00ac\u0001\u0000\u0000\u0000\u00aa"+
- "\u00a8\u0001\u0000\u0000\u0000\u00ab\u00ad\u0005\'\u0000\u0000\u00ac\u00ab"+
- "\u0001\u0000\u0000\u0000\u00ac\u00ad\u0001\u0000\u0000\u0000\u00ad\u00af"+
- "\u0001\u0000\u0000\u0000\u00ae\u00a3\u0001\u0000\u0000\u0000\u00ae\u00af"+
- "\u0001\u0000\u0000\u0000\u00af\u00b0\u0001\u0000\u0000\u0000\u00b0\u00b1"+
- "\u0005\u001e\u0000\u0000\u00b1\u0017\u0001\u0000\u0000\u0000\u00b2\u00b6"+
- "\u0005\u0005\u0000\u0000\u00b3\u00b5\u0003\u001a\r\u0000\u00b4\u00b3\u0001"+
- "\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000\u0000\u0000\u00b6\u00b4\u0001"+
- "\u0000\u0000\u0000\u00b6\u00b7\u0001\u0000\u0000\u0000\u00b7\u00b9\u0001"+
- "\u0000\u0000\u0000\u00b8\u00b6\u0001\u0000\u0000\u0000\u00b9\u00ba\u0005"+
- "\u0006\u0000\u0000\u00ba\u0019\u0001\u0000\u0000\u0000\u00bb\u00c9\u0005"+
- "\b\u0000\u0000\u00bc\u00bd\u0005\u0018\u0000\u0000\u00bd\u00be\u0005\b"+
- "\u0000\u0000\u00be\u00c9\u0005\u001f\u0000\u0000\u00bf\u00c3\u0005\u000f"+
- "\u0000\u0000\u00c0\u00c2\u0003J%\u0000\u00c1\u00c0\u0001\u0000\u0000\u0000"+
- "\u00c2\u00c5\u0001\u0000\u0000\u0000\u00c3\u00c1\u0001\u0000\u0000\u0000"+
- "\u00c3\u00c4\u0001\u0000\u0000\u0000\u00c4\u00c6\u0001\u0000\u0000\u0000"+
- "\u00c5\u00c3\u0001\u0000\u0000\u0000\u00c6\u00c9\u0005\u000f\u0000\u0000"+
- "\u00c7\u00c9\u0003\f\u0006\u0000\u00c8\u00bb\u0001\u0000\u0000\u0000\u00c8"+
- "\u00bc\u0001\u0000\u0000\u0000\u00c8\u00bf\u0001\u0000\u0000\u0000\u00c8"+
- "\u00c7\u0001\u0000\u0000\u0000\u00c9\u00ca\u0001\u0000\u0000\u0000\u00ca"+
- "\u00cb\u0007\u0001\u0000\u0000\u00cb\u00cd\u0003\f\u0006\u0000\u00cc\u00ce"+
- "\u0005\'\u0000\u0000\u00cd\u00cc\u0001\u0000\u0000\u0000\u00cd\u00ce\u0001"+
- "\u0000\u0000\u0000\u00ce\u001b\u0001\u0000\u0000\u0000\u00cf\u00d2\u0003"+
- "\u001e\u000f\u0000\u00d0\u00d2\u0003 \u0010\u0000\u00d1\u00cf\u0001\u0000"+
- "\u0000\u0000\u00d1\u00d0\u0001\u0000\u0000\u0000\u00d2\u001d\u0001\u0000"+
- "\u0000\u0000\u00d3\u00d4\u0005\u0002\u0000\u0000\u00d4\u00d5\u0003\"\u0011"+
- "\u0000\u00d5\u00d6\u0005\u0016\u0000\u0000\u00d6\u00d8\u0003\f\u0006\u0000"+
- "\u00d7\u00d9\u0003$\u0012\u0000\u00d8\u00d7\u0001\u0000\u0000\u0000\u00d8"+
- "\u00d9\u0001\u0000\u0000\u0000\u00d9\u00da\u0001\u0000\u0000\u0000\u00da"+
- "\u00db\u0005\u001e\u0000\u0000\u00db\u001f\u0001\u0000\u0000\u0000\u00dc"+
- "\u00dd\u0005\u0001\u0000\u0000\u00dd\u00de\u0003\"\u0011\u0000\u00de\u00df"+
- "\u0005\u0016\u0000\u0000\u00df\u00e0\u0003\f\u0006\u0000\u00e0\u00e1\u0005"+
- "&\u0000\u0000\u00e1\u00e3\u0003\f\u0006\u0000\u00e2\u00e4\u0005)\u0000"+
- "\u0000\u00e3\u00e2\u0001\u0000\u0000\u0000\u00e3\u00e4\u0001\u0000\u0000"+
- "\u0000\u00e4\u00e6\u0001\u0000\u0000\u0000\u00e5\u00e7\u0003$\u0012\u0000"+
- "\u00e6\u00e5\u0001\u0000\u0000\u0000\u00e6\u00e7\u0001\u0000\u0000\u0000"+
- "\u00e7\u00e8\u0001\u0000\u0000\u0000\u00e8\u00e9\u0005\u0006\u0000\u0000"+
- "\u00e9!\u0001\u0000\u0000\u0000\u00ea\u00ed\u0005\b\u0000\u0000\u00eb"+
- "\u00ec\u0005\'\u0000\u0000\u00ec\u00ee\u0005\b\u0000\u0000\u00ed\u00eb"+
- "\u0001\u0000\u0000\u0000\u00ed\u00ee\u0001\u0000\u0000\u0000\u00ee\u00ef"+
- "\u0001\u0000\u0000\u0000\u00ef\u00f0\u0005\u0004\u0000\u0000\u00f0\u00f1"+
- "\u0003\f\u0006\u0000\u00f1#\u0001\u0000\u0000\u0000\u00f2\u00f3\u0005"+
- "\u0003\u0000\u0000\u00f3\u00f4\u0003\f\u0006\u0000\u00f4%\u0001\u0000"+
- "\u0000\u0000\u00f5\u00f6\u0005\b\u0000\u0000\u00f6\'\u0001\u0000\u0000"+
- "\u0000\u00f7\u00f8\u0005\b\u0000\u0000\u00f8\u00fa\u0005\u0018\u0000\u0000"+
- "\u00f9\u00fb\u0003*\u0015\u0000\u00fa\u00f9\u0001\u0000\u0000\u0000\u00fa"+
- "\u00fb\u0001\u0000\u0000\u0000\u00fb\u00fc\u0001\u0000\u0000\u0000\u00fc"+
- "\u00fd\u0005\u001f\u0000\u0000\u00fd)\u0001\u0000\u0000\u0000\u00fe\u0103"+
- "\u0003\f\u0006\u0000\u00ff\u0100\u0005\'\u0000\u0000\u0100\u0102\u0003"+
- "\f\u0006\u0000\u0101\u00ff\u0001\u0000\u0000\u0000\u0102\u0105\u0001\u0000"+
- "\u0000\u0000\u0103\u0101\u0001\u0000\u0000\u0000\u0103\u0104\u0001\u0000"+
- "\u0000\u0000\u0104\u0107\u0001\u0000\u0000\u0000\u0105\u0103\u0001\u0000"+
- "\u0000\u0000\u0106\u0108\u0007\u0002\u0000\u0000\u0107\u0106\u0001\u0000"+
- "\u0000\u0000\u0107\u0108\u0001\u0000\u0000\u0000\u0108+\u0001\u0000\u0000"+
- "\u0000\u0109\u010a\u0005\u0017\u0000\u0000\u010a\u010b\u0003\f\u0006\u0000"+
- "\u010b\u010c\u0005\u001e\u0000\u0000\u010c-\u0001\u0000\u0000\u0000\u010d"+
- "\u010e\u0005#\u0000\u0000\u010e\u010f\u0005\b\u0000\u0000\u010f/\u0001"+
- "\u0000\u0000\u0000\u0110\u0113\u00032\u0019\u0000\u0111\u0113\u00034\u001a"+
- "\u0000\u0112\u0110\u0001\u0000\u0000\u0000\u0112\u0111\u0001\u0000\u0000"+
- "\u0000\u01131\u0001\u0000\u0000\u0000\u0114\u0115\u0005#\u0000\u0000\u0115"+
- "\u0119\u0005 \u0000\u0000\u0116\u0118\u0003.\u0017\u0000\u0117\u0116\u0001"+
- "\u0000\u0000\u0000\u0118\u011b\u0001\u0000\u0000\u0000\u0119\u0117\u0001"+
- "\u0000\u0000\u0000\u0119\u011a\u0001\u0000\u0000\u0000\u011a3\u0001\u0000"+
- "\u0000\u0000\u011b\u0119\u0001\u0000\u0000\u0000\u011c\u011d\u0005\u0017"+
- "\u0000\u0000\u011d\u011e\u0005 \u0000\u0000\u011e\u0123\u0005\u001e\u0000"+
- "\u0000\u011f\u0122\u0003.\u0017\u0000\u0120\u0122\u0003,\u0016\u0000\u0121"+
- "\u011f\u0001\u0000\u0000\u0000\u0121\u0120\u0001\u0000\u0000\u0000\u0122"+
- "\u0125\u0001\u0000\u0000\u0000\u0123\u0121\u0001\u0000\u0000\u0000\u0123"+
- "\u0124\u0001\u0000\u0000\u0000\u01245\u0001\u0000\u0000\u0000\u0125\u0123"+
- "\u0001\u0000\u0000\u0000\u0126\u0129\u00038\u001c\u0000\u0127\u0129\u0003"+
- ":\u001d\u0000\u0128\u0126\u0001\u0000\u0000\u0000\u0128\u0127\u0001\u0000"+
- "\u0000\u0000\u01297\u0001\u0000\u0000\u0000\u012a\u012b\u0007\u0003\u0000"+
- "\u0000\u012b\u012c\u0003\u000e\u0007\u0000\u012c9\u0001\u0000\u0000\u0000"+
- "\u012d\u0130\u0003\u000e\u0007\u0000\u012e\u0130\u00038\u001c\u0000\u012f"+
- "\u012d\u0001\u0000\u0000\u0000\u012f\u012e\u0001\u0000\u0000\u0000\u0130"+
- "\u0131\u0001\u0000\u0000\u0000\u0131\u0134\u0003<\u001e\u0000\u0132\u0135"+
- "\u0003\u000e\u0007\u0000\u0133\u0135\u00036\u001b\u0000\u0134\u0132\u0001"+
- "\u0000\u0000\u0000\u0134\u0133\u0001\u0000\u0000\u0000\u0135;\u0001\u0000"+
- "\u0000\u0000\u0136\u013a\u0003>\u001f\u0000\u0137\u013a\u0003@ \u0000"+
- "\u0138\u013a\u0003B!\u0000\u0139\u0136\u0001\u0000\u0000\u0000\u0139\u0137"+
- "\u0001\u0000\u0000\u0000\u0139\u0138\u0001\u0000\u0000\u0000\u013a=\u0001"+
- "\u0000\u0000\u0000\u013b\u013c\u0007\u0004\u0000\u0000\u013c?\u0001\u0000"+
- "\u0000\u0000\u013d\u013e\u0007\u0005\u0000\u0000\u013eA\u0001\u0000\u0000"+
- "\u0000\u013f\u0140\u0007\u0006\u0000\u0000\u0140C\u0001\u0000\u0000\u0000"+
- "\u0141\u0142\u0005\u0011\u0000\u0000\u0142\u014a\u0005\b\u0000\u0000\u0143"+
- "\u0147\u0005\f\u0000\u0000\u0144\u0146\u0003F#\u0000\u0145\u0144\u0001"+
- "\u0000\u0000\u0000\u0146\u0149\u0001\u0000\u0000\u0000\u0147\u0145\u0001"+
- "\u0000\u0000\u0000\u0147\u0148\u0001\u0000\u0000\u0000\u0148\u014b\u0001"+
- "\u0000\u0000\u0000\u0149\u0147\u0001\u0000\u0000\u0000\u014a\u0143\u0001"+
- "\u0000\u0000\u0000\u014b\u014c\u0001\u0000\u0000\u0000\u014c\u014a\u0001"+
- "\u0000\u0000\u0000\u014c\u014d\u0001\u0000\u0000\u0000\u014d\u014e\u0001"+
- "\u0000\u0000\u0000\u014e\u0158\u0005\b\u0000\u0000\u014f\u0153\u0005\u000f"+
- "\u0000\u0000\u0150\u0152\u0003J%\u0000\u0151\u0150\u0001\u0000\u0000\u0000"+
- "\u0152\u0155\u0001\u0000\u0000\u0000\u0153\u0151\u0001\u0000\u0000\u0000"+
- "\u0153\u0154\u0001\u0000\u0000\u0000\u0154\u0156\u0001\u0000\u0000\u0000"+
- "\u0155\u0153\u0001\u0000\u0000\u0000\u0156\u0158\u0005\u000f\u0000\u0000"+
- "\u0157\u0141\u0001\u0000\u0000\u0000\u0157\u014f\u0001\u0000\u0000\u0000"+
- "\u0158E\u0001\u0000\u0000\u0000\u0159\u015c\u0003N\'\u0000\u015a\u015c"+
- "\u0003H$\u0000\u015b\u0159\u0001\u0000\u0000\u0000\u015b\u015a\u0001\u0000"+
- "\u0000\u0000\u015cG\u0001\u0000\u0000\u0000\u015d\u015e\u0005.\u0000\u0000"+
- "\u015eI\u0001\u0000\u0000\u0000\u015f\u0162\u0003N\'\u0000\u0160\u0162"+
- "\u0003L&\u0000\u0161\u015f\u0001\u0000\u0000\u0000\u0161\u0160\u0001\u0000"+
- "\u0000\u0000\u0162K\u0001\u0000\u0000\u0000\u0163\u0164\u0005,\u0000\u0000"+
- "\u0164M\u0001\u0000\u0000\u0000\u0165\u0166\u0005+\u0000\u0000\u0166\u0167"+
- "\u0003\f\u0006\u0000\u0167\u0168\u0005\u0006\u0000\u0000\u0168O\u0001"+
- "\u0000\u0000\u0000\'UZdns}\u008b\u0093\u0095\u00a0\u00a8\u00ac\u00ae\u00b6"+
- "\u00c3\u00c8\u00cd\u00d1\u00d8\u00e3\u00e6\u00ed\u00fa\u0103\u0107\u0112"+
- "\u0119\u0121\u0123\u0128\u012f\u0134\u0139\u0147\u014c\u0153\u0157\u015b"+
- "\u0161";
+ "#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+
+ "(\u0007(\u0001\u0000\u0001\u0000\u0001\u0001\u0005\u0001V\b\u0001\n\u0001"+
+ "\f\u0001Y\t\u0001\u0001\u0002\u0001\u0002\u0003\u0002]\b\u0002\u0001\u0003"+
+ "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0005\u0004"+
+ "e\b\u0004\n\u0004\f\u0004h\t\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+
+ "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005q\b\u0005"+
+ "\u0001\u0006\u0001\u0006\u0001\u0006\u0003\u0006v\b\u0006\u0001\u0006"+
+ "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0005\u0006"+
+ "~\b\u0006\n\u0006\f\u0006\u0081\t\u0006\u0001\u0007\u0001\u0007\u0001"+
+ "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+
+ "\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u008e\b\u0007\u0001\u0007\u0001"+
+ "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+
+ "\u0007\u0005\u0007\u0098\b\u0007\n\u0007\f\u0007\u009b\t\u0007\u0001\b"+
+ "\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0003\n\u00a5"+
+ "\b\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0005\u000b\u00ab"+
+ "\b\u000b\n\u000b\f\u000b\u00ae\t\u000b\u0001\u000b\u0003\u000b\u00b1\b"+
+ "\u000b\u0003\u000b\u00b3\b\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001"+
+ "\f\u0005\f\u00b9\b\f\n\f\f\f\u00bc\t\f\u0001\f\u0001\f\u0001\r\u0001\r"+
+ "\u0001\r\u0001\r\u0001\r\u0001\r\u0005\r\u00c6\b\r\n\r\f\r\u00c9\t\r\u0001"+
+ "\r\u0001\r\u0003\r\u00cd\b\r\u0001\r\u0001\r\u0001\r\u0003\r\u00d2\b\r"+
+ "\u0001\u000e\u0001\u000e\u0003\u000e\u00d6\b\u000e\u0001\u000f\u0001\u000f"+
+ "\u0001\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u00dd\b\u000f\u0001\u000f"+
+ "\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010"+
+ "\u0001\u0010\u0001\u0010\u0003\u0010\u00e8\b\u0010\u0001\u0010\u0003\u0010"+
+ "\u00eb\b\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011"+
+ "\u0003\u0011\u00f2\b\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012"+
+ "\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+
+ "\u0001\u0014\u0003\u0014\u00ff\b\u0014\u0001\u0014\u0001\u0014\u0001\u0015"+
+ "\u0001\u0015\u0001\u0015\u0005\u0015\u0106\b\u0015\n\u0015\f\u0015\u0109"+
+ "\t\u0015\u0001\u0015\u0003\u0015\u010c\b\u0015\u0001\u0016\u0001\u0016"+
+ "\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018"+
+ "\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0003\u0019\u011a\b\u0019"+
+ "\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a\u011f\b\u001a\n\u001a"+
+ "\f\u001a\u0122\t\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+
+ "\u0001\u001b\u0005\u001b\u0129\b\u001b\n\u001b\f\u001b\u012c\t\u001b\u0001"+
+ "\u001c\u0001\u001c\u0003\u001c\u0130\b\u001c\u0001\u001d\u0001\u001d\u0001"+
+ "\u001d\u0001\u001e\u0001\u001e\u0003\u001e\u0137\b\u001e\u0001\u001e\u0001"+
+ "\u001e\u0001\u001e\u0003\u001e\u013c\b\u001e\u0001\u001f\u0001\u001f\u0001"+
+ "\u001f\u0003\u001f\u0141\b\u001f\u0001 \u0001 \u0001!\u0001!\u0001\"\u0001"+
+ "\"\u0001#\u0001#\u0001#\u0001#\u0005#\u014d\b#\n#\f#\u0150\t#\u0004#\u0152"+
+ "\b#\u000b#\f#\u0153\u0001#\u0001#\u0001#\u0005#\u0159\b#\n#\f#\u015c\t"+
+ "#\u0001#\u0003#\u015f\b#\u0001$\u0001$\u0003$\u0163\b$\u0001%\u0001%\u0001"+
+ "&\u0001&\u0003&\u0169\b&\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001"+
+ "(\u0000\u0002\f\u000e)\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012"+
+ "\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNP\u0000\u0007"+
+ "\u0002\u0000\r\u000e\u0010\u0010\u0002\u0000\u0007\u0007\u0016\u0016\u0002"+
+ "\u0000\'\'))\u0002\u0000\u0019\u0019!!\u0004\u0000\u0014\u0015\u001b\u001c"+
+ "\"\"%%\u0005\u0000\u0012\u0012\u0019\u0019 $$((\u0002\u0000\u0013\u0013"+
+ "\u001a\u001a\u0178\u0000R\u0001\u0000\u0000\u0000\u0002W\u0001\u0000\u0000"+
+ "\u0000\u0004\\\u0001\u0000\u0000\u0000\u0006^\u0001\u0000\u0000\u0000"+
+ "\bb\u0001\u0000\u0000\u0000\np\u0001\u0000\u0000\u0000\fu\u0001\u0000"+
+ "\u0000\u0000\u000e\u008d\u0001\u0000\u0000\u0000\u0010\u009c\u0001\u0000"+
+ "\u0000\u0000\u0012\u00a0\u0001\u0000\u0000\u0000\u0014\u00a4\u0001\u0000"+
+ "\u0000\u0000\u0016\u00a6\u0001\u0000\u0000\u0000\u0018\u00b6\u0001\u0000"+
+ "\u0000\u0000\u001a\u00cc\u0001\u0000\u0000\u0000\u001c\u00d5\u0001\u0000"+
+ "\u0000\u0000\u001e\u00d7\u0001\u0000\u0000\u0000 \u00e0\u0001\u0000\u0000"+
+ "\u0000\"\u00ee\u0001\u0000\u0000\u0000$\u00f6\u0001\u0000\u0000\u0000"+
+ "&\u00f9\u0001\u0000\u0000\u0000(\u00fb\u0001\u0000\u0000\u0000*\u0102"+
+ "\u0001\u0000\u0000\u0000,\u010d\u0001\u0000\u0000\u0000.\u0111\u0001\u0000"+
+ "\u0000\u00000\u0114\u0001\u0000\u0000\u00002\u0119\u0001\u0000\u0000\u0000"+
+ "4\u011b\u0001\u0000\u0000\u00006\u0123\u0001\u0000\u0000\u00008\u012f"+
+ "\u0001\u0000\u0000\u0000:\u0131\u0001\u0000\u0000\u0000<\u0136\u0001\u0000"+
+ "\u0000\u0000>\u0140\u0001\u0000\u0000\u0000@\u0142\u0001\u0000\u0000\u0000"+
+ "B\u0144\u0001\u0000\u0000\u0000D\u0146\u0001\u0000\u0000\u0000F\u015e"+
+ "\u0001\u0000\u0000\u0000H\u0162\u0001\u0000\u0000\u0000J\u0164\u0001\u0000"+
+ "\u0000\u0000L\u0168\u0001\u0000\u0000\u0000N\u016a\u0001\u0000\u0000\u0000"+
+ "P\u016c\u0001\u0000\u0000\u0000RS\u0003\u0002\u0001\u0000S\u0001\u0001"+
+ "\u0000\u0000\u0000TV\u0003\u0004\u0002\u0000UT\u0001\u0000\u0000\u0000"+
+ "VY\u0001\u0000\u0000\u0000WU\u0001\u0000\u0000\u0000WX\u0001\u0000\u0000"+
+ "\u0000X\u0003\u0001\u0000\u0000\u0000YW\u0001\u0000\u0000\u0000Z]\u0003"+
+ "\u0006\u0003\u0000[]\u0003\b\u0004\u0000\\Z\u0001\u0000\u0000\u0000\\"+
+ "[\u0001\u0000\u0000\u0000]\u0005\u0001\u0000\u0000\u0000^_\u0005\b\u0000"+
+ "\u0000_`\u0005\u0007\u0000\u0000`a\u0003\f\u0006\u0000a\u0007\u0001\u0000"+
+ "\u0000\u0000bf\u0005\b\u0000\u0000ce\u0003\n\u0005\u0000dc\u0001\u0000"+
+ "\u0000\u0000eh\u0001\u0000\u0000\u0000fd\u0001\u0000\u0000\u0000fg\u0001"+
+ "\u0000\u0000\u0000gi\u0001\u0000\u0000\u0000hf\u0001\u0000\u0000\u0000"+
+ "ij\u0003\u0010\b\u0000j\t\u0001\u0000\u0000\u0000kl\u0005\u000f\u0000"+
+ "\u0000lm\u0003N\'\u0000mn\u0005\u000f\u0000\u0000nq\u0001\u0000\u0000"+
+ "\u0000oq\u0005\b\u0000\u0000pk\u0001\u0000\u0000\u0000po\u0001\u0000\u0000"+
+ "\u0000q\u000b\u0001\u0000\u0000\u0000rs\u0006\u0006\uffff\uffff\u0000"+
+ "sv\u0003\u000e\u0007\u0000tv\u00038\u001c\u0000ur\u0001\u0000\u0000\u0000"+
+ "ut\u0001\u0000\u0000\u0000v\u007f\u0001\u0000\u0000\u0000wx\n\u0001\u0000"+
+ "\u0000xy\u0005\u001d\u0000\u0000yz\u0003\f\u0006\u0000z{\u0005\u0016\u0000"+
+ "\u0000{|\u0003\f\u0006\u0002|~\u0001\u0000\u0000\u0000}w\u0001\u0000\u0000"+
+ "\u0000~\u0081\u0001\u0000\u0000\u0000\u007f}\u0001\u0000\u0000\u0000\u007f"+
+ "\u0080\u0001\u0000\u0000\u0000\u0080\r\u0001\u0000\u0000\u0000\u0081\u007f"+
+ "\u0001\u0000\u0000\u0000\u0082\u0083\u0006\u0007\uffff\uffff\u0000\u0083"+
+ "\u008e\u0003F#\u0000\u0084\u008e\u0003\u0012\t\u0000\u0085\u008e\u0003"+
+ "\u001c\u000e\u0000\u0086\u008e\u0003\u0014\n\u0000\u0087\u008e\u0003&"+
+ "\u0013\u0000\u0088\u008e\u0003(\u0014\u0000\u0089\u008a\u0005\u0018\u0000"+
+ "\u0000\u008a\u008b\u0003\f\u0006\u0000\u008b\u008c\u0005\u001f\u0000\u0000"+
+ "\u008c\u008e\u0001\u0000\u0000\u0000\u008d\u0082\u0001\u0000\u0000\u0000"+
+ "\u008d\u0084\u0001\u0000\u0000\u0000\u008d\u0085\u0001\u0000\u0000\u0000"+
+ "\u008d\u0086\u0001\u0000\u0000\u0000\u008d\u0087\u0001\u0000\u0000\u0000"+
+ "\u008d\u0088\u0001\u0000\u0000\u0000\u008d\u0089\u0001\u0000\u0000\u0000"+
+ "\u008e\u0099\u0001\u0000\u0000\u0000\u008f\u0090\n\u0005\u0000\u0000\u0090"+
+ "\u0098\u0003,\u0016\u0000\u0091\u0092\n\u0004\u0000\u0000\u0092\u0098"+
+ "\u0003.\u0017\u0000\u0093\u0094\n\u0003\u0000\u0000\u0094\u0098\u0003"+
+ "0\u0018\u0000\u0095\u0096\n\u0002\u0000\u0000\u0096\u0098\u00032\u0019"+
+ "\u0000\u0097\u008f\u0001\u0000\u0000\u0000\u0097\u0091\u0001\u0000\u0000"+
+ "\u0000\u0097\u0093\u0001\u0000\u0000\u0000\u0097\u0095\u0001\u0000\u0000"+
+ "\u0000\u0098\u009b\u0001\u0000\u0000\u0000\u0099\u0097\u0001\u0000\u0000"+
+ "\u0000\u0099\u009a\u0001\u0000\u0000\u0000\u009a\u000f\u0001\u0000\u0000"+
+ "\u0000\u009b\u0099\u0001\u0000\u0000\u0000\u009c\u009d\u0005\u0005\u0000"+
+ "\u0000\u009d\u009e\u0003\u0002\u0001\u0000\u009e\u009f\u0005\u0006\u0000"+
+ "\u0000\u009f\u0011\u0001\u0000\u0000\u0000\u00a0\u00a1\u0007\u0000\u0000"+
+ "\u0000\u00a1\u0013\u0001\u0000\u0000\u0000\u00a2\u00a5\u0003\u0016\u000b"+
+ "\u0000\u00a3\u00a5\u0003\u0018\f\u0000\u00a4\u00a2\u0001\u0000\u0000\u0000"+
+ "\u00a4\u00a3\u0001\u0000\u0000\u0000\u00a5\u0015\u0001\u0000\u0000\u0000"+
+ "\u00a6\u00b2\u0005\u0017\u0000\u0000\u00a7\u00ac\u0003\f\u0006\u0000\u00a8"+
+ "\u00a9\u0005\'\u0000\u0000\u00a9\u00ab\u0003\f\u0006\u0000\u00aa\u00a8"+
+ "\u0001\u0000\u0000\u0000\u00ab\u00ae\u0001\u0000\u0000\u0000\u00ac\u00aa"+
+ "\u0001\u0000\u0000\u0000\u00ac\u00ad\u0001\u0000\u0000\u0000\u00ad\u00b0"+
+ "\u0001\u0000\u0000\u0000\u00ae\u00ac\u0001\u0000\u0000\u0000\u00af\u00b1"+
+ "\u0005\'\u0000\u0000\u00b0\u00af\u0001\u0000\u0000\u0000\u00b0\u00b1\u0001"+
+ "\u0000\u0000\u0000\u00b1\u00b3\u0001\u0000\u0000\u0000\u00b2\u00a7\u0001"+
+ "\u0000\u0000\u0000\u00b2\u00b3\u0001\u0000\u0000\u0000\u00b3\u00b4\u0001"+
+ "\u0000\u0000\u0000\u00b4\u00b5\u0005\u001e\u0000\u0000\u00b5\u0017\u0001"+
+ "\u0000\u0000\u0000\u00b6\u00ba\u0005\u0005\u0000\u0000\u00b7\u00b9\u0003"+
+ "\u001a\r\u0000\u00b8\u00b7\u0001\u0000\u0000\u0000\u00b9\u00bc\u0001\u0000"+
+ "\u0000\u0000\u00ba\u00b8\u0001\u0000\u0000\u0000\u00ba\u00bb\u0001\u0000"+
+ "\u0000\u0000\u00bb\u00bd\u0001\u0000\u0000\u0000\u00bc\u00ba\u0001\u0000"+
+ "\u0000\u0000\u00bd\u00be\u0005\u0006\u0000\u0000\u00be\u0019\u0001\u0000"+
+ "\u0000\u0000\u00bf\u00cd\u0005\b\u0000\u0000\u00c0\u00c1\u0005\u0018\u0000"+
+ "\u0000\u00c1\u00c2\u0005\b\u0000\u0000\u00c2\u00cd\u0005\u001f\u0000\u0000"+
+ "\u00c3\u00c7\u0005\u000f\u0000\u0000\u00c4\u00c6\u0003L&\u0000\u00c5\u00c4"+
+ "\u0001\u0000\u0000\u0000\u00c6\u00c9\u0001\u0000\u0000\u0000\u00c7\u00c5"+
+ "\u0001\u0000\u0000\u0000\u00c7\u00c8\u0001\u0000\u0000\u0000\u00c8\u00ca"+
+ "\u0001\u0000\u0000\u0000\u00c9\u00c7\u0001\u0000\u0000\u0000\u00ca\u00cd"+
+ "\u0005\u000f\u0000\u0000\u00cb\u00cd\u0003\f\u0006\u0000\u00cc\u00bf\u0001"+
+ "\u0000\u0000\u0000\u00cc\u00c0\u0001\u0000\u0000\u0000\u00cc\u00c3\u0001"+
+ "\u0000\u0000\u0000\u00cc\u00cb\u0001\u0000\u0000\u0000\u00cd\u00ce\u0001"+
+ "\u0000\u0000\u0000\u00ce\u00cf\u0007\u0001\u0000\u0000\u00cf\u00d1\u0003"+
+ "\f\u0006\u0000\u00d0\u00d2\u0005\'\u0000\u0000\u00d1\u00d0\u0001\u0000"+
+ "\u0000\u0000\u00d1\u00d2\u0001\u0000\u0000\u0000\u00d2\u001b\u0001\u0000"+
+ "\u0000\u0000\u00d3\u00d6\u0003\u001e\u000f\u0000\u00d4\u00d6\u0003 \u0010"+
+ "\u0000\u00d5\u00d3\u0001\u0000\u0000\u0000\u00d5\u00d4\u0001\u0000\u0000"+
+ "\u0000\u00d6\u001d\u0001\u0000\u0000\u0000\u00d7\u00d8\u0005\u0002\u0000"+
+ "\u0000\u00d8\u00d9\u0003\"\u0011\u0000\u00d9\u00da\u0005\u0016\u0000\u0000"+
+ "\u00da\u00dc\u0003\f\u0006\u0000\u00db\u00dd\u0003$\u0012\u0000\u00dc"+
+ "\u00db\u0001\u0000\u0000\u0000\u00dc\u00dd\u0001\u0000\u0000\u0000\u00dd"+
+ "\u00de\u0001\u0000\u0000\u0000\u00de\u00df\u0005\u001e\u0000\u0000\u00df"+
+ "\u001f\u0001\u0000\u0000\u0000\u00e0\u00e1\u0005\u0001\u0000\u0000\u00e1"+
+ "\u00e2\u0003\"\u0011\u0000\u00e2\u00e3\u0005\u0016\u0000\u0000\u00e3\u00e4"+
+ "\u0003\f\u0006\u0000\u00e4\u00e5\u0005&\u0000\u0000\u00e5\u00e7\u0003"+
+ "\f\u0006\u0000\u00e6\u00e8\u0005)\u0000\u0000\u00e7\u00e6\u0001\u0000"+
+ "\u0000\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000\u00e8\u00ea\u0001\u0000"+
+ "\u0000\u0000\u00e9\u00eb\u0003$\u0012\u0000\u00ea\u00e9\u0001\u0000\u0000"+
+ "\u0000\u00ea\u00eb\u0001\u0000\u0000\u0000\u00eb\u00ec\u0001\u0000\u0000"+
+ "\u0000\u00ec\u00ed\u0005\u0006\u0000\u0000\u00ed!\u0001\u0000\u0000\u0000"+
+ "\u00ee\u00f1\u0005\b\u0000\u0000\u00ef\u00f0\u0005\'\u0000\u0000\u00f0"+
+ "\u00f2\u0005\b\u0000\u0000\u00f1\u00ef\u0001\u0000\u0000\u0000\u00f1\u00f2"+
+ "\u0001\u0000\u0000\u0000\u00f2\u00f3\u0001\u0000\u0000\u0000\u00f3\u00f4"+
+ "\u0005\u0004\u0000\u0000\u00f4\u00f5\u0003\f\u0006\u0000\u00f5#\u0001"+
+ "\u0000\u0000\u0000\u00f6\u00f7\u0005\u0003\u0000\u0000\u00f7\u00f8\u0003"+
+ "\f\u0006\u0000\u00f8%\u0001\u0000\u0000\u0000\u00f9\u00fa\u0005\b\u0000"+
+ "\u0000\u00fa\'\u0001\u0000\u0000\u0000\u00fb\u00fc\u0005\b\u0000\u0000"+
+ "\u00fc\u00fe\u0005\u0018\u0000\u0000\u00fd\u00ff\u0003*\u0015\u0000\u00fe"+
+ "\u00fd\u0001\u0000\u0000\u0000\u00fe\u00ff\u0001\u0000\u0000\u0000\u00ff"+
+ "\u0100\u0001\u0000\u0000\u0000\u0100\u0101\u0005\u001f\u0000\u0000\u0101"+
+ ")\u0001\u0000\u0000\u0000\u0102\u0107\u0003\f\u0006\u0000\u0103\u0104"+
+ "\u0005\'\u0000\u0000\u0104\u0106\u0003\f\u0006\u0000\u0105\u0103\u0001"+
+ "\u0000\u0000\u0000\u0106\u0109\u0001\u0000\u0000\u0000\u0107\u0105\u0001"+
+ "\u0000\u0000\u0000\u0107\u0108\u0001\u0000\u0000\u0000\u0108\u010b\u0001"+
+ "\u0000\u0000\u0000\u0109\u0107\u0001\u0000\u0000\u0000\u010a\u010c\u0007"+
+ "\u0002\u0000\u0000\u010b\u010a\u0001\u0000\u0000\u0000\u010b\u010c\u0001"+
+ "\u0000\u0000\u0000\u010c+\u0001\u0000\u0000\u0000\u010d\u010e\u0005\u0017"+
+ "\u0000\u0000\u010e\u010f\u0003\f\u0006\u0000\u010f\u0110\u0005\u001e\u0000"+
+ "\u0000\u0110-\u0001\u0000\u0000\u0000\u0111\u0112\u0005#\u0000\u0000\u0112"+
+ "\u0113\u0005\b\u0000\u0000\u0113/\u0001\u0000\u0000\u0000\u0114\u0115"+
+ "\u0005#\u0000\u0000\u0115\u0116\u0005\r\u0000\u0000\u01161\u0001\u0000"+
+ "\u0000\u0000\u0117\u011a\u00034\u001a\u0000\u0118\u011a\u00036\u001b\u0000"+
+ "\u0119\u0117\u0001\u0000\u0000\u0000\u0119\u0118\u0001\u0000\u0000\u0000"+
+ "\u011a3\u0001\u0000\u0000\u0000\u011b\u011c\u0005#\u0000\u0000\u011c\u0120"+
+ "\u0005 \u0000\u0000\u011d\u011f\u0003.\u0017\u0000\u011e\u011d\u0001\u0000"+
+ "\u0000\u0000\u011f\u0122\u0001\u0000\u0000\u0000\u0120\u011e\u0001\u0000"+
+ "\u0000\u0000\u0120\u0121\u0001\u0000\u0000\u0000\u01215\u0001\u0000\u0000"+
+ "\u0000\u0122\u0120\u0001\u0000\u0000\u0000\u0123\u0124\u0005\u0017\u0000"+
+ "\u0000\u0124\u0125\u0005 \u0000\u0000\u0125\u012a\u0005\u001e\u0000\u0000"+
+ "\u0126\u0129\u0003.\u0017\u0000\u0127\u0129\u0003,\u0016\u0000\u0128\u0126"+
+ "\u0001\u0000\u0000\u0000\u0128\u0127\u0001\u0000\u0000\u0000\u0129\u012c"+
+ "\u0001\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012a\u012b"+
+ "\u0001\u0000\u0000\u0000\u012b7\u0001\u0000\u0000\u0000\u012c\u012a\u0001"+
+ "\u0000\u0000\u0000\u012d\u0130\u0003:\u001d\u0000\u012e\u0130\u0003<\u001e"+
+ "\u0000\u012f\u012d\u0001\u0000\u0000\u0000\u012f\u012e\u0001\u0000\u0000"+
+ "\u0000\u01309\u0001\u0000\u0000\u0000\u0131\u0132\u0007\u0003\u0000\u0000"+
+ "\u0132\u0133\u0003\u000e\u0007\u0000\u0133;\u0001\u0000\u0000\u0000\u0134"+
+ "\u0137\u0003\u000e\u0007\u0000\u0135\u0137\u0003:\u001d\u0000\u0136\u0134"+
+ "\u0001\u0000\u0000\u0000\u0136\u0135\u0001\u0000\u0000\u0000\u0137\u0138"+
+ "\u0001\u0000\u0000\u0000\u0138\u013b\u0003>\u001f\u0000\u0139\u013c\u0003"+
+ "\u000e\u0007\u0000\u013a\u013c\u00038\u001c\u0000\u013b\u0139\u0001\u0000"+
+ "\u0000\u0000\u013b\u013a\u0001\u0000\u0000\u0000\u013c=\u0001\u0000\u0000"+
+ "\u0000\u013d\u0141\u0003@ \u0000\u013e\u0141\u0003B!\u0000\u013f\u0141"+
+ "\u0003D\"\u0000\u0140\u013d\u0001\u0000\u0000\u0000\u0140\u013e\u0001"+
+ "\u0000\u0000\u0000\u0140\u013f\u0001\u0000\u0000\u0000\u0141?\u0001\u0000"+
+ "\u0000\u0000\u0142\u0143\u0007\u0004\u0000\u0000\u0143A\u0001\u0000\u0000"+
+ "\u0000\u0144\u0145\u0007\u0005\u0000\u0000\u0145C\u0001\u0000\u0000\u0000"+
+ "\u0146\u0147\u0007\u0006\u0000\u0000\u0147E\u0001\u0000\u0000\u0000\u0148"+
+ "\u0149\u0005\u0011\u0000\u0000\u0149\u0151\u0005\b\u0000\u0000\u014a\u014e"+
+ "\u0005\f\u0000\u0000\u014b\u014d\u0003H$\u0000\u014c\u014b\u0001\u0000"+
+ "\u0000\u0000\u014d\u0150\u0001\u0000\u0000\u0000\u014e\u014c\u0001\u0000"+
+ "\u0000\u0000\u014e\u014f\u0001\u0000\u0000\u0000\u014f\u0152\u0001\u0000"+
+ "\u0000\u0000\u0150\u014e\u0001\u0000\u0000\u0000\u0151\u014a\u0001\u0000"+
+ "\u0000\u0000\u0152\u0153\u0001\u0000\u0000\u0000\u0153\u0151\u0001\u0000"+
+ "\u0000\u0000\u0153\u0154\u0001\u0000\u0000\u0000\u0154\u0155\u0001\u0000"+
+ "\u0000\u0000\u0155\u015f\u0005\b\u0000\u0000\u0156\u015a\u0005\u000f\u0000"+
+ "\u0000\u0157\u0159\u0003L&\u0000\u0158\u0157\u0001\u0000\u0000\u0000\u0159"+
+ "\u015c\u0001\u0000\u0000\u0000\u015a\u0158\u0001\u0000\u0000\u0000\u015a"+
+ "\u015b\u0001\u0000\u0000\u0000\u015b\u015d\u0001\u0000\u0000\u0000\u015c"+
+ "\u015a\u0001\u0000\u0000\u0000\u015d\u015f\u0005\u000f\u0000\u0000\u015e"+
+ "\u0148\u0001\u0000\u0000\u0000\u015e\u0156\u0001\u0000\u0000\u0000\u015f"+
+ "G\u0001\u0000\u0000\u0000\u0160\u0163\u0003P(\u0000\u0161\u0163\u0003"+
+ "J%\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0161\u0001\u0000\u0000"+
+ "\u0000\u0163I\u0001\u0000\u0000\u0000\u0164\u0165\u0005.\u0000\u0000\u0165"+
+ "K\u0001\u0000\u0000\u0000\u0166\u0169\u0003P(\u0000\u0167\u0169\u0003"+
+ "N\'\u0000\u0168\u0166\u0001\u0000\u0000\u0000\u0168\u0167\u0001\u0000"+
+ "\u0000\u0000\u0169M\u0001\u0000\u0000\u0000\u016a\u016b\u0005,\u0000\u0000"+
+ "\u016bO\u0001\u0000\u0000\u0000\u016c\u016d\u0005+\u0000\u0000\u016d\u016e"+
+ "\u0003\f\u0006\u0000\u016e\u016f\u0005\u0006\u0000\u0000\u016fQ\u0001"+
+ "\u0000\u0000\u0000\'W\\fpu\u007f\u008d\u0097\u0099\u00a4\u00ac\u00b0\u00b2"+
+ "\u00ba\u00c7\u00cc\u00d1\u00d5\u00dc\u00e7\u00ea\u00f1\u00fe\u0107\u010b"+
+ "\u0119\u0120\u0128\u012a\u012f\u0136\u013b\u0140\u014e\u0153\u015a\u015e"+
+ "\u0162\u0168";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseListener.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseListener.java
index 955f095e365..0d44480c791 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseListener.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseListener.java
@@ -219,6 +219,18 @@ public class HCLParserBaseListener implements HCLParserListener {
* The default implementation does nothing.
*/
@Override public void exitIndexAccessExpression(HCLParser.IndexAccessExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterLegacyIndexAttributeExpression(HCLParser.LegacyIndexAttributeExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitLegacyIndexAttributeExpression(HCLParser.LegacyIndexAttributeExpressionContext ctx) { }
/**
* {@inheritDoc}
*
@@ -447,6 +459,18 @@ public class HCLParserBaseListener implements HCLParserListener {
* The default implementation does nothing.
*/
@Override public void exitGetAttr(HCLParser.GetAttrContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterLegacyIndexAttr(HCLParser.LegacyIndexAttrContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitLegacyIndexAttr(HCLParser.LegacyIndexAttrContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseVisitor.java
index 5add2c1566f..cc3e91b9973 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseVisitor.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseVisitor.java
@@ -139,6 +139,13 @@ public class HCLParserBaseVisitor extends AbstractParseTreeVisitor impleme
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitIndexAccessExpression(HCLParser.IndexAccessExpressionContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitLegacyIndexAttributeExpression(HCLParser.LegacyIndexAttributeExpressionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -272,6 +279,13 @@ public class HCLParserBaseVisitor extends AbstractParseTreeVisitor impleme
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitGetAttr(HCLParser.GetAttrContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitLegacyIndexAttr(HCLParser.LegacyIndexAttrContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserListener.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserListener.java
index c73e9f70565..6725c41ed20 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserListener.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserListener.java
@@ -202,6 +202,18 @@ public interface HCLParserListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitIndexAccessExpression(HCLParser.IndexAccessExpressionContext ctx);
+ /**
+ * Enter a parse tree produced by the {@code LegacyIndexAttributeExpression}
+ * labeled alternative in {@link HCLParser#exprTerm}.
+ * @param ctx the parse tree
+ */
+ void enterLegacyIndexAttributeExpression(HCLParser.LegacyIndexAttributeExpressionContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code LegacyIndexAttributeExpression}
+ * labeled alternative in {@link HCLParser#exprTerm}.
+ * @param ctx the parse tree
+ */
+ void exitLegacyIndexAttributeExpression(HCLParser.LegacyIndexAttributeExpressionContext ctx);
/**
* Enter a parse tree produced by the {@code ForExpression}
* labeled alternative in {@link HCLParser#exprTerm}.
@@ -398,6 +410,16 @@ public interface HCLParserListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitGetAttr(HCLParser.GetAttrContext ctx);
+ /**
+ * Enter a parse tree produced by {@link HCLParser#legacyIndexAttr}.
+ * @param ctx the parse tree
+ */
+ void enterLegacyIndexAttr(HCLParser.LegacyIndexAttrContext ctx);
+ /**
+ * Exit a parse tree produced by {@link HCLParser#legacyIndexAttr}.
+ * @param ctx the parse tree
+ */
+ void exitLegacyIndexAttr(HCLParser.LegacyIndexAttrContext ctx);
/**
* Enter a parse tree produced by {@link HCLParser#splat}.
* @param ctx the parse tree
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserVisitor.java
index 531e35db3bc..f1a5f11d588 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserVisitor.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserVisitor.java
@@ -131,6 +131,13 @@ public interface HCLParserVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitIndexAccessExpression(HCLParser.IndexAccessExpressionContext ctx);
+ /**
+ * Visit a parse tree produced by the {@code LegacyIndexAttributeExpression}
+ * labeled alternative in {@link HCLParser#exprTerm}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitLegacyIndexAttributeExpression(HCLParser.LegacyIndexAttributeExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code ForExpression}
* labeled alternative in {@link HCLParser#exprTerm}.
@@ -248,6 +255,12 @@ public interface HCLParserVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitGetAttr(HCLParser.GetAttrContext ctx);
+ /**
+ * Visit a parse tree produced by {@link HCLParser#legacyIndexAttr}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitLegacyIndexAttr(HCLParser.LegacyIndexAttrContext ctx);
/**
* Visit a parse tree produced by {@link HCLParser#splat}.
* @param ctx the parse tree
diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/tree/Hcl.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/tree/Hcl.java
index 8ee49114969..d58fbfec844 100644
--- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/tree/Hcl.java
+++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/tree/Hcl.java
@@ -26,7 +26,6 @@
import org.openrewrite.hcl.internal.HclPrinter;
import org.openrewrite.internal.ListUtils;
import org.openrewrite.marker.Markers;
-import org.openrewrite.template.SourceTemplate;
import java.lang.ref.WeakReference;
import java.nio.charset.Charset;
@@ -236,6 +235,67 @@ public AttributeAccess withName(HclLeftPadded name) {
}
}
+ @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
+ @EqualsAndHashCode(callSuper = false, onlyExplicitlyIncluded = true)
+ @RequiredArgsConstructor
+ @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ class LegacyIndexAttributeAccess implements Expression, Label {
+ @Nullable
+ @NonFinal
+ transient WeakReference padding;
+
+ @With
+ @EqualsAndHashCode.Include
+ @Getter
+ UUID id;
+
+ @With
+ @Getter
+ Space prefix;
+
+ @With
+ @Getter
+ Markers markers;
+
+ @With
+ @Getter
+ Expression base;
+
+ @With
+ @Getter
+ String index;
+
+ @Override
+ public Hcl acceptHcl(HclVisitor
v, P p) {
+ return v.visitLegacyIndexAttribute(this, p);
+ }
+
+ @Override
+ public String toString() {
+ return "LegacyIndexAttributeAccess{" + base + "." + index + "}";
+ }
+
+ public Padding getPadding() {
+ Padding p;
+ if (this.padding == null) {
+ p = new Padding(this);
+ this.padding = new WeakReference<>(p);
+ } else {
+ p = this.padding.get();
+ if (p == null || p.t != this) {
+ p = new Padding(this);
+ this.padding = new WeakReference<>(p);
+ }
+ }
+ return p;
+ }
+
+ @RequiredArgsConstructor
+ public static class Padding {
+ private final LegacyIndexAttributeAccess t;
+ }
+ }
+
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
@EqualsAndHashCode(callSuper = false, onlyExplicitlyIncluded = true)
@RequiredArgsConstructor
diff --git a/rewrite-hcl/src/test/java/org/openrewrite/hcl/tree/HclVariableExpressionTest.java b/rewrite-hcl/src/test/java/org/openrewrite/hcl/tree/HclVariableExpressionTest.java
index 353d4c43b86..86c10391603 100644
--- a/rewrite-hcl/src/test/java/org/openrewrite/hcl/tree/HclVariableExpressionTest.java
+++ b/rewrite-hcl/src/test/java/org/openrewrite/hcl/tree/HclVariableExpressionTest.java
@@ -33,4 +33,17 @@ void variableExpression() {
)
);
}
+
+ @Test
+ void legacyIndexOperator() {
+ rewriteRun(
+ hcl(
+ """
+ locals {
+ dns_record = aws_acm_certificate.google_dot_com.0.resource_record_name
+ }
+ """
+ )
+ );
+ }
}