diff --git a/oap-formats/oap-logstream/oap-logstream/pom.xml b/oap-formats/oap-logstream/oap-logstream/pom.xml index 352d8d1d8..0c16bbe30 100644 --- a/oap-formats/oap-logstream/oap-logstream/pom.xml +++ b/oap-formats/oap-logstream/oap-logstream/pom.xml @@ -123,7 +123,7 @@ org.antlr - ST4 + stringtemplate ${oap.deps.stringtemplate.version} diff --git a/oap-formats/oap-logstream/pom.xml b/oap-formats/oap-logstream/pom.xml index 965d5d8fb..257b2a2b1 100644 --- a/oap-formats/oap-logstream/pom.xml +++ b/oap-formats/oap-logstream/pom.xml @@ -14,7 +14,7 @@ oap-logstream-parent - 4.3.4 + 4.0.2 1.13.1 diff --git a/oap-formats/oap-template/src/main/antlr4/TemplateGrammarExpression.g4 b/oap-formats/oap-template/src/main/antlr4/TemplateGrammarExpression.g4 index bbf7e0186..08304b901 100644 --- a/oap-formats/oap-template/src/main/antlr4/TemplateGrammarExpression.g4 +++ b/oap-formats/oap-template/src/main/antlr4/TemplateGrammarExpression.g4 @@ -86,7 +86,7 @@ exprs returns [Exprs ret = new Exprs()] : DOT expr { $ret.exprs.add( $expr.ret ); } math? { if( $math.ctx != null ) $ret.math = $math.ret; } | DOT expr { $ret.exprs.add( $expr.ret ); } - PIPE concatenation { $ret.concatenation =$concatenation.ret; } + DOT? concatenation { $ret.concatenation =$concatenation.ret; } | DOT expr { $ret.exprs.add( $expr.ret ); } (DOT expr { $ret.exprs.add( $expr.ret ); @@ -96,7 +96,7 @@ exprs returns [Exprs ret = new Exprs()] | DOT expr { $ret.exprs.add( $expr.ret ); } (DOT expr { $ret.exprs.add( $expr.ret ); })* DOT expr { $ret.exprs.add( $expr.ret ); } - PIPE concatenation { $ret.concatenation = $concatenation.ret; } + DOT? concatenation { $ret.concatenation = $concatenation.ret; } math? { if( $math.ctx != null ) $ret.math = $math.ret; } | concatenation { $ret.concatenation = $concatenation.ret; } ; @@ -107,7 +107,7 @@ expr returns [Expr ret] ; concatenation returns [Concatenation ret] - : START_CONCATENATION citems { $ret = new Concatenation( $citems.ret ); } CRBRACE + : LBRACE citems { $ret = new Concatenation( $citems.ret ); } RBRACE ; citems returns [ArrayList ret = new ArrayList<>()] @@ -116,7 +116,7 @@ citems returns [ArrayList ret = new ArrayList<>()] ; citem returns [Object ret] - : DOT ID { $ret = new Expr( $ID.text, false, List.of() ); } + : ID { $ret = new Expr( $ID.text, false, List.of() ); } | DSTRING { $ret = sdStringToString( $DSTRING.text ); } | SSTRING { $ret = sdStringToString( $SSTRING.text ); } | DECDIGITS { $ret = String.valueOf( $DECDIGITS.text ); } diff --git a/oap-formats/oap-template/src/main/antlr4/TemplateLexerExpression.g4 b/oap-formats/oap-template/src/main/antlr4/TemplateLexerExpression.g4 index f0c816424..1f126303e 100644 --- a/oap-formats/oap-template/src/main/antlr4/TemplateLexerExpression.g4 +++ b/oap-formats/oap-template/src/main/antlr4/TemplateLexerExpression.g4 @@ -30,7 +30,6 @@ fragment DQuestion : '??' ; fragment LT : '<' ; fragment GT : '>' ; fragment Default : 'default' ; -fragment Concat : 'concat' ; fragment NameChar : [A-Z] @@ -87,7 +86,9 @@ BLOCK_COMMENT : BlockComment; HORZ_WS : Hws+ -> skip ; VERT_WS : Vws+ -> skip ; -START_CONCATENATION : Concat Hws* LParen -> pushMode(Concatenation) ; +LBRACE : LBrace -> pushMode(Concatenation) ; + +RBRACE : RBrace -> popMode ; DOT : Dot ; LPAREN : LParen ; @@ -98,8 +99,6 @@ DQUESTION : DQuestion ; SEMI : Semi ; COMMA : Comma ; -PIPE : Pipe ; - STAR : Star ; SLASH : Slash ; PERCENT : Percent ; @@ -122,11 +121,9 @@ mode Concatenation ; C_HORZ_WS : Hws+ -> skip ; C_VERT_WS : Vws+ -> skip ; -CRBRACE : RParen -> popMode ; +CRBRACE : RBrace -> popMode, type(RBRACE) ; CCOMMA : Comma -> type(COMMA) ; -CDOT : Dot -> type(DOT) ; - CID : NameChar (NameChar|DecDigit)* -> type(ID) ; CDSTRING : DQuoteLiteral -> type(DSTRING) ; CSSTRING : SQuoteLiteral -> type(SSTRING) ; diff --git a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.interp b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.interp index bece2a78f..45adf0a13 100644 --- a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.interp +++ b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.interp @@ -30,7 +30,6 @@ null null null null -null token symbolic names: null @@ -38,7 +37,8 @@ DEFAULT BLOCK_COMMENT HORZ_WS VERT_WS -START_CONCATENATION +LBRACE +RBRACE DOT LPAREN RPAREN @@ -47,7 +47,6 @@ RBRACK DQUESTION SEMI COMMA -PIPE STAR SLASH PERCENT @@ -63,7 +62,6 @@ CAST_TYPE ERR_CHAR C_HORZ_WS C_VERT_WS -CRBRACE CERR_CHAR rule names: @@ -86,4 +84,4 @@ mathOperation atn: -[4, 1, 31, 240, 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, 1, 0, 3, 0, 34, 8, 0, 1, 0, 3, 0, 37, 8, 0, 1, 0, 1, 0, 1, 0, 3, 0, 42, 8, 0, 1, 0, 3, 0, 45, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 67, 8, 2, 1, 3, 3, 3, 70, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 78, 8, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 89, 8, 5, 10, 5, 12, 5, 92, 9, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 108, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 117, 8, 7, 10, 7, 12, 7, 120, 9, 7, 1, 7, 3, 7, 123, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 129, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 147, 8, 8, 10, 8, 12, 8, 150, 9, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 156, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 167, 8, 8, 10, 8, 12, 8, 170, 9, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 179, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 186, 8, 8, 1, 9, 1, 9, 1, 9, 3, 9, 191, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 198, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 211, 8, 11, 10, 11, 12, 11, 214, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 227, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 3, 14, 236, 8, 14, 1, 15, 1, 15, 1, 15, 0, 0, 16, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 0, 1, 1, 0, 15, 19, 260, 0, 33, 1, 0, 0, 0, 2, 48, 1, 0, 0, 0, 4, 66, 1, 0, 0, 0, 6, 69, 1, 0, 0, 0, 8, 73, 1, 0, 0, 0, 10, 82, 1, 0, 0, 0, 12, 107, 1, 0, 0, 0, 14, 122, 1, 0, 0, 0, 16, 185, 1, 0, 0, 0, 18, 197, 1, 0, 0, 0, 20, 199, 1, 0, 0, 0, 22, 204, 1, 0, 0, 0, 24, 226, 1, 0, 0, 0, 26, 228, 1, 0, 0, 0, 28, 235, 1, 0, 0, 0, 30, 237, 1, 0, 0, 0, 32, 34, 5, 2, 0, 0, 33, 32, 1, 0, 0, 0, 33, 34, 1, 0, 0, 0, 34, 36, 1, 0, 0, 0, 35, 37, 5, 26, 0, 0, 36, 35, 1, 0, 0, 0, 36, 37, 1, 0, 0, 0, 37, 38, 1, 0, 0, 0, 38, 39, 3, 16, 8, 0, 39, 41, 3, 14, 7, 0, 40, 42, 3, 2, 1, 0, 41, 40, 1, 0, 0, 0, 41, 42, 1, 0, 0, 0, 42, 44, 1, 0, 0, 0, 43, 45, 3, 8, 4, 0, 44, 43, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 47, 6, 0, -1, 0, 47, 1, 1, 0, 0, 0, 48, 49, 5, 11, 0, 0, 49, 50, 3, 4, 2, 0, 50, 51, 6, 1, -1, 0, 51, 3, 1, 0, 0, 0, 52, 53, 5, 21, 0, 0, 53, 67, 6, 2, -1, 0, 54, 55, 5, 20, 0, 0, 55, 67, 6, 2, -1, 0, 56, 57, 3, 6, 3, 0, 57, 58, 6, 2, -1, 0, 58, 67, 1, 0, 0, 0, 59, 60, 5, 23, 0, 0, 60, 67, 6, 2, -1, 0, 61, 62, 5, 24, 0, 0, 62, 67, 6, 2, -1, 0, 63, 64, 5, 9, 0, 0, 64, 65, 5, 10, 0, 0, 65, 67, 6, 2, -1, 0, 66, 52, 1, 0, 0, 0, 66, 54, 1, 0, 0, 0, 66, 56, 1, 0, 0, 0, 66, 59, 1, 0, 0, 0, 66, 61, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 5, 1, 0, 0, 0, 68, 70, 5, 19, 0, 0, 69, 68, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 72, 5, 22, 0, 0, 72, 7, 1, 0, 0, 0, 73, 74, 5, 12, 0, 0, 74, 75, 5, 25, 0, 0, 75, 77, 5, 7, 0, 0, 76, 78, 3, 10, 5, 0, 77, 76, 1, 0, 0, 0, 77, 78, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 80, 5, 8, 0, 0, 80, 81, 6, 4, -1, 0, 81, 9, 1, 0, 0, 0, 82, 83, 3, 12, 6, 0, 83, 90, 6, 5, -1, 0, 84, 85, 5, 13, 0, 0, 85, 86, 3, 12, 6, 0, 86, 87, 6, 5, -1, 0, 87, 89, 1, 0, 0, 0, 88, 84, 1, 0, 0, 0, 89, 92, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 90, 91, 1, 0, 0, 0, 91, 11, 1, 0, 0, 0, 92, 90, 1, 0, 0, 0, 93, 94, 5, 22, 0, 0, 94, 108, 6, 6, -1, 0, 95, 96, 5, 19, 0, 0, 96, 97, 5, 22, 0, 0, 97, 108, 6, 6, -1, 0, 98, 99, 5, 23, 0, 0, 99, 108, 6, 6, -1, 0, 100, 101, 5, 19, 0, 0, 101, 102, 5, 23, 0, 0, 102, 108, 6, 6, -1, 0, 103, 104, 5, 21, 0, 0, 104, 108, 6, 6, -1, 0, 105, 106, 5, 20, 0, 0, 106, 108, 6, 6, -1, 0, 107, 93, 1, 0, 0, 0, 107, 95, 1, 0, 0, 0, 107, 98, 1, 0, 0, 0, 107, 100, 1, 0, 0, 0, 107, 103, 1, 0, 0, 0, 107, 105, 1, 0, 0, 0, 108, 13, 1, 0, 0, 0, 109, 110, 5, 1, 0, 0, 110, 111, 3, 16, 8, 0, 111, 118, 6, 7, -1, 0, 112, 113, 5, 1, 0, 0, 113, 114, 3, 16, 8, 0, 114, 115, 6, 7, -1, 0, 115, 117, 1, 0, 0, 0, 116, 112, 1, 0, 0, 0, 117, 120, 1, 0, 0, 0, 118, 116, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 123, 1, 0, 0, 0, 120, 118, 1, 0, 0, 0, 121, 123, 1, 0, 0, 0, 122, 109, 1, 0, 0, 0, 122, 121, 1, 0, 0, 0, 123, 15, 1, 0, 0, 0, 124, 125, 5, 6, 0, 0, 125, 126, 3, 18, 9, 0, 126, 128, 6, 8, -1, 0, 127, 129, 3, 26, 13, 0, 128, 127, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 131, 6, 8, -1, 0, 131, 186, 1, 0, 0, 0, 132, 133, 5, 6, 0, 0, 133, 134, 3, 18, 9, 0, 134, 135, 6, 8, -1, 0, 135, 136, 5, 14, 0, 0, 136, 137, 3, 20, 10, 0, 137, 138, 6, 8, -1, 0, 138, 186, 1, 0, 0, 0, 139, 140, 5, 6, 0, 0, 140, 141, 3, 18, 9, 0, 141, 148, 6, 8, -1, 0, 142, 143, 5, 6, 0, 0, 143, 144, 3, 18, 9, 0, 144, 145, 6, 8, -1, 0, 145, 147, 1, 0, 0, 0, 146, 142, 1, 0, 0, 0, 147, 150, 1, 0, 0, 0, 148, 146, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 151, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 151, 152, 5, 6, 0, 0, 152, 153, 3, 18, 9, 0, 153, 155, 6, 8, -1, 0, 154, 156, 3, 26, 13, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 158, 6, 8, -1, 0, 158, 186, 1, 0, 0, 0, 159, 160, 5, 6, 0, 0, 160, 161, 3, 18, 9, 0, 161, 168, 6, 8, -1, 0, 162, 163, 5, 6, 0, 0, 163, 164, 3, 18, 9, 0, 164, 165, 6, 8, -1, 0, 165, 167, 1, 0, 0, 0, 166, 162, 1, 0, 0, 0, 167, 170, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 171, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 171, 172, 5, 6, 0, 0, 172, 173, 3, 18, 9, 0, 173, 174, 6, 8, -1, 0, 174, 175, 5, 14, 0, 0, 175, 176, 3, 20, 10, 0, 176, 178, 6, 8, -1, 0, 177, 179, 3, 26, 13, 0, 178, 177, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 181, 6, 8, -1, 0, 181, 186, 1, 0, 0, 0, 182, 183, 3, 20, 10, 0, 183, 184, 6, 8, -1, 0, 184, 186, 1, 0, 0, 0, 185, 124, 1, 0, 0, 0, 185, 132, 1, 0, 0, 0, 185, 139, 1, 0, 0, 0, 185, 159, 1, 0, 0, 0, 185, 182, 1, 0, 0, 0, 186, 17, 1, 0, 0, 0, 187, 188, 5, 25, 0, 0, 188, 190, 5, 7, 0, 0, 189, 191, 3, 10, 5, 0, 190, 189, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 8, 0, 0, 193, 194, 1, 0, 0, 0, 194, 198, 6, 9, -1, 0, 195, 196, 5, 25, 0, 0, 196, 198, 6, 9, -1, 0, 197, 187, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 198, 19, 1, 0, 0, 0, 199, 200, 5, 5, 0, 0, 200, 201, 3, 22, 11, 0, 201, 202, 6, 10, -1, 0, 202, 203, 5, 30, 0, 0, 203, 21, 1, 0, 0, 0, 204, 205, 3, 24, 12, 0, 205, 212, 6, 11, -1, 0, 206, 207, 5, 13, 0, 0, 207, 208, 3, 24, 12, 0, 208, 209, 6, 11, -1, 0, 209, 211, 1, 0, 0, 0, 210, 206, 1, 0, 0, 0, 211, 214, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 23, 1, 0, 0, 0, 214, 212, 1, 0, 0, 0, 215, 216, 5, 6, 0, 0, 216, 217, 5, 25, 0, 0, 217, 227, 6, 12, -1, 0, 218, 219, 5, 20, 0, 0, 219, 227, 6, 12, -1, 0, 220, 221, 5, 21, 0, 0, 221, 227, 6, 12, -1, 0, 222, 223, 5, 22, 0, 0, 223, 227, 6, 12, -1, 0, 224, 225, 5, 23, 0, 0, 225, 227, 6, 12, -1, 0, 226, 215, 1, 0, 0, 0, 226, 218, 1, 0, 0, 0, 226, 220, 1, 0, 0, 0, 226, 222, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 25, 1, 0, 0, 0, 228, 229, 3, 30, 15, 0, 229, 230, 3, 28, 14, 0, 230, 231, 6, 13, -1, 0, 231, 27, 1, 0, 0, 0, 232, 236, 1, 0, 0, 0, 233, 236, 5, 22, 0, 0, 234, 236, 5, 23, 0, 0, 235, 232, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 29, 1, 0, 0, 0, 237, 238, 7, 0, 0, 0, 238, 31, 1, 0, 0, 0, 22, 33, 36, 41, 44, 66, 69, 77, 90, 107, 118, 122, 128, 148, 155, 168, 178, 185, 190, 197, 212, 226, 235] \ No newline at end of file +[4, 1, 30, 243, 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, 1, 0, 3, 0, 34, 8, 0, 1, 0, 3, 0, 37, 8, 0, 1, 0, 1, 0, 1, 0, 3, 0, 42, 8, 0, 1, 0, 3, 0, 45, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 67, 8, 2, 1, 3, 3, 3, 70, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 78, 8, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 89, 8, 5, 10, 5, 12, 5, 92, 9, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 108, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 117, 8, 7, 10, 7, 12, 7, 120, 9, 7, 1, 7, 3, 7, 123, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 129, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 137, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 149, 8, 8, 10, 8, 12, 8, 152, 9, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 158, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 169, 8, 8, 10, 8, 12, 8, 172, 9, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 178, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 183, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 190, 8, 8, 1, 9, 1, 9, 1, 9, 3, 9, 195, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 202, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 215, 8, 11, 10, 11, 12, 11, 218, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 230, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 3, 14, 239, 8, 14, 1, 15, 1, 15, 1, 15, 0, 0, 16, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 0, 1, 1, 0, 15, 19, 265, 0, 33, 1, 0, 0, 0, 2, 48, 1, 0, 0, 0, 4, 66, 1, 0, 0, 0, 6, 69, 1, 0, 0, 0, 8, 73, 1, 0, 0, 0, 10, 82, 1, 0, 0, 0, 12, 107, 1, 0, 0, 0, 14, 122, 1, 0, 0, 0, 16, 189, 1, 0, 0, 0, 18, 201, 1, 0, 0, 0, 20, 203, 1, 0, 0, 0, 22, 208, 1, 0, 0, 0, 24, 229, 1, 0, 0, 0, 26, 231, 1, 0, 0, 0, 28, 238, 1, 0, 0, 0, 30, 240, 1, 0, 0, 0, 32, 34, 5, 2, 0, 0, 33, 32, 1, 0, 0, 0, 33, 34, 1, 0, 0, 0, 34, 36, 1, 0, 0, 0, 35, 37, 5, 26, 0, 0, 36, 35, 1, 0, 0, 0, 36, 37, 1, 0, 0, 0, 37, 38, 1, 0, 0, 0, 38, 39, 3, 16, 8, 0, 39, 41, 3, 14, 7, 0, 40, 42, 3, 2, 1, 0, 41, 40, 1, 0, 0, 0, 41, 42, 1, 0, 0, 0, 42, 44, 1, 0, 0, 0, 43, 45, 3, 8, 4, 0, 44, 43, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 47, 6, 0, -1, 0, 47, 1, 1, 0, 0, 0, 48, 49, 5, 12, 0, 0, 49, 50, 3, 4, 2, 0, 50, 51, 6, 1, -1, 0, 51, 3, 1, 0, 0, 0, 52, 53, 5, 21, 0, 0, 53, 67, 6, 2, -1, 0, 54, 55, 5, 20, 0, 0, 55, 67, 6, 2, -1, 0, 56, 57, 3, 6, 3, 0, 57, 58, 6, 2, -1, 0, 58, 67, 1, 0, 0, 0, 59, 60, 5, 23, 0, 0, 60, 67, 6, 2, -1, 0, 61, 62, 5, 24, 0, 0, 62, 67, 6, 2, -1, 0, 63, 64, 5, 10, 0, 0, 64, 65, 5, 11, 0, 0, 65, 67, 6, 2, -1, 0, 66, 52, 1, 0, 0, 0, 66, 54, 1, 0, 0, 0, 66, 56, 1, 0, 0, 0, 66, 59, 1, 0, 0, 0, 66, 61, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 5, 1, 0, 0, 0, 68, 70, 5, 19, 0, 0, 69, 68, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 72, 5, 22, 0, 0, 72, 7, 1, 0, 0, 0, 73, 74, 5, 13, 0, 0, 74, 75, 5, 25, 0, 0, 75, 77, 5, 8, 0, 0, 76, 78, 3, 10, 5, 0, 77, 76, 1, 0, 0, 0, 77, 78, 1, 0, 0, 0, 78, 79, 1, 0, 0, 0, 79, 80, 5, 9, 0, 0, 80, 81, 6, 4, -1, 0, 81, 9, 1, 0, 0, 0, 82, 83, 3, 12, 6, 0, 83, 90, 6, 5, -1, 0, 84, 85, 5, 14, 0, 0, 85, 86, 3, 12, 6, 0, 86, 87, 6, 5, -1, 0, 87, 89, 1, 0, 0, 0, 88, 84, 1, 0, 0, 0, 89, 92, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 90, 91, 1, 0, 0, 0, 91, 11, 1, 0, 0, 0, 92, 90, 1, 0, 0, 0, 93, 94, 5, 22, 0, 0, 94, 108, 6, 6, -1, 0, 95, 96, 5, 19, 0, 0, 96, 97, 5, 22, 0, 0, 97, 108, 6, 6, -1, 0, 98, 99, 5, 23, 0, 0, 99, 108, 6, 6, -1, 0, 100, 101, 5, 19, 0, 0, 101, 102, 5, 23, 0, 0, 102, 108, 6, 6, -1, 0, 103, 104, 5, 21, 0, 0, 104, 108, 6, 6, -1, 0, 105, 106, 5, 20, 0, 0, 106, 108, 6, 6, -1, 0, 107, 93, 1, 0, 0, 0, 107, 95, 1, 0, 0, 0, 107, 98, 1, 0, 0, 0, 107, 100, 1, 0, 0, 0, 107, 103, 1, 0, 0, 0, 107, 105, 1, 0, 0, 0, 108, 13, 1, 0, 0, 0, 109, 110, 5, 1, 0, 0, 110, 111, 3, 16, 8, 0, 111, 118, 6, 7, -1, 0, 112, 113, 5, 1, 0, 0, 113, 114, 3, 16, 8, 0, 114, 115, 6, 7, -1, 0, 115, 117, 1, 0, 0, 0, 116, 112, 1, 0, 0, 0, 117, 120, 1, 0, 0, 0, 118, 116, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 123, 1, 0, 0, 0, 120, 118, 1, 0, 0, 0, 121, 123, 1, 0, 0, 0, 122, 109, 1, 0, 0, 0, 122, 121, 1, 0, 0, 0, 123, 15, 1, 0, 0, 0, 124, 125, 5, 7, 0, 0, 125, 126, 3, 18, 9, 0, 126, 128, 6, 8, -1, 0, 127, 129, 3, 26, 13, 0, 128, 127, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 131, 6, 8, -1, 0, 131, 190, 1, 0, 0, 0, 132, 133, 5, 7, 0, 0, 133, 134, 3, 18, 9, 0, 134, 136, 6, 8, -1, 0, 135, 137, 5, 7, 0, 0, 136, 135, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 139, 3, 20, 10, 0, 139, 140, 6, 8, -1, 0, 140, 190, 1, 0, 0, 0, 141, 142, 5, 7, 0, 0, 142, 143, 3, 18, 9, 0, 143, 150, 6, 8, -1, 0, 144, 145, 5, 7, 0, 0, 145, 146, 3, 18, 9, 0, 146, 147, 6, 8, -1, 0, 147, 149, 1, 0, 0, 0, 148, 144, 1, 0, 0, 0, 149, 152, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 153, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 153, 154, 5, 7, 0, 0, 154, 155, 3, 18, 9, 0, 155, 157, 6, 8, -1, 0, 156, 158, 3, 26, 13, 0, 157, 156, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 160, 6, 8, -1, 0, 160, 190, 1, 0, 0, 0, 161, 162, 5, 7, 0, 0, 162, 163, 3, 18, 9, 0, 163, 170, 6, 8, -1, 0, 164, 165, 5, 7, 0, 0, 165, 166, 3, 18, 9, 0, 166, 167, 6, 8, -1, 0, 167, 169, 1, 0, 0, 0, 168, 164, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 170, 171, 1, 0, 0, 0, 171, 173, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 173, 174, 5, 7, 0, 0, 174, 175, 3, 18, 9, 0, 175, 177, 6, 8, -1, 0, 176, 178, 5, 7, 0, 0, 177, 176, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 3, 20, 10, 0, 180, 182, 6, 8, -1, 0, 181, 183, 3, 26, 13, 0, 182, 181, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 185, 6, 8, -1, 0, 185, 190, 1, 0, 0, 0, 186, 187, 3, 20, 10, 0, 187, 188, 6, 8, -1, 0, 188, 190, 1, 0, 0, 0, 189, 124, 1, 0, 0, 0, 189, 132, 1, 0, 0, 0, 189, 141, 1, 0, 0, 0, 189, 161, 1, 0, 0, 0, 189, 186, 1, 0, 0, 0, 190, 17, 1, 0, 0, 0, 191, 192, 5, 25, 0, 0, 192, 194, 5, 8, 0, 0, 193, 195, 3, 10, 5, 0, 194, 193, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 197, 5, 9, 0, 0, 197, 198, 1, 0, 0, 0, 198, 202, 6, 9, -1, 0, 199, 200, 5, 25, 0, 0, 200, 202, 6, 9, -1, 0, 201, 191, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 202, 19, 1, 0, 0, 0, 203, 204, 5, 5, 0, 0, 204, 205, 3, 22, 11, 0, 205, 206, 6, 10, -1, 0, 206, 207, 5, 6, 0, 0, 207, 21, 1, 0, 0, 0, 208, 209, 3, 24, 12, 0, 209, 216, 6, 11, -1, 0, 210, 211, 5, 14, 0, 0, 211, 212, 3, 24, 12, 0, 212, 213, 6, 11, -1, 0, 213, 215, 1, 0, 0, 0, 214, 210, 1, 0, 0, 0, 215, 218, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 23, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 219, 220, 5, 25, 0, 0, 220, 230, 6, 12, -1, 0, 221, 222, 5, 20, 0, 0, 222, 230, 6, 12, -1, 0, 223, 224, 5, 21, 0, 0, 224, 230, 6, 12, -1, 0, 225, 226, 5, 22, 0, 0, 226, 230, 6, 12, -1, 0, 227, 228, 5, 23, 0, 0, 228, 230, 6, 12, -1, 0, 229, 219, 1, 0, 0, 0, 229, 221, 1, 0, 0, 0, 229, 223, 1, 0, 0, 0, 229, 225, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 25, 1, 0, 0, 0, 231, 232, 3, 30, 15, 0, 232, 233, 3, 28, 14, 0, 233, 234, 6, 13, -1, 0, 234, 27, 1, 0, 0, 0, 235, 239, 1, 0, 0, 0, 236, 239, 5, 22, 0, 0, 237, 239, 5, 23, 0, 0, 238, 235, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 237, 1, 0, 0, 0, 239, 29, 1, 0, 0, 0, 240, 241, 7, 0, 0, 0, 241, 31, 1, 0, 0, 0, 24, 33, 36, 41, 44, 66, 69, 77, 90, 107, 118, 122, 128, 136, 150, 157, 170, 177, 182, 189, 194, 201, 216, 229, 238] \ No newline at end of file diff --git a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.java b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.java index 71a2a5152..86abf3399 100644 --- a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.java +++ b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.java @@ -30,11 +30,11 @@ public class TemplateGrammarExpression extends TemplateGrammarAdaptor { protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache(); public static final int - DEFAULT=1, BLOCK_COMMENT=2, HORZ_WS=3, VERT_WS=4, START_CONCATENATION=5, - DOT=6, LPAREN=7, RPAREN=8, LBRACK=9, RBRACK=10, DQUESTION=11, SEMI=12, - COMMA=13, PIPE=14, STAR=15, SLASH=16, PERCENT=17, PLUS=18, MINUS=19, DSTRING=20, + DEFAULT=1, BLOCK_COMMENT=2, HORZ_WS=3, VERT_WS=4, LBRACE=5, RBRACE=6, + DOT=7, LPAREN=8, RPAREN=9, LBRACK=10, RBRACK=11, DQUESTION=12, SEMI=13, + COMMA=14, STAR=15, SLASH=16, PERCENT=17, PLUS=18, MINUS=19, DSTRING=20, SSTRING=21, DECDIGITS=22, FLOAT=23, BOOLEAN=24, ID=25, CAST_TYPE=26, ERR_CHAR=27, - C_HORZ_WS=28, C_VERT_WS=29, CRBRACE=30, CERR_CHAR=31; + C_HORZ_WS=28, C_VERT_WS=29, CERR_CHAR=30; public static final int RULE_expression = 0, RULE_defaultValue = 1, RULE_defaultValueType = 2, RULE_longRule = 3, RULE_function = 4, RULE_functionArgs = 5, RULE_functionArg = 6, @@ -56,11 +56,11 @@ private static String[] makeLiteralNames() { private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static String[] makeSymbolicNames() { return new String[] { - null, "DEFAULT", "BLOCK_COMMENT", "HORZ_WS", "VERT_WS", "START_CONCATENATION", + null, "DEFAULT", "BLOCK_COMMENT", "HORZ_WS", "VERT_WS", "LBRACE", "RBRACE", "DOT", "LPAREN", "RPAREN", "LBRACK", "RBRACK", "DQUESTION", "SEMI", "COMMA", - "PIPE", "STAR", "SLASH", "PERCENT", "PLUS", "MINUS", "DSTRING", "SSTRING", - "DECDIGITS", "FLOAT", "BOOLEAN", "ID", "CAST_TYPE", "ERR_CHAR", "C_HORZ_WS", - "C_VERT_WS", "CRBRACE", "CERR_CHAR" + "STAR", "SLASH", "PERCENT", "PLUS", "MINUS", "DSTRING", "SSTRING", "DECDIGITS", + "FLOAT", "BOOLEAN", "ID", "CAST_TYPE", "ERR_CHAR", "C_HORZ_WS", "C_VERT_WS", + "CERR_CHAR" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -769,7 +769,6 @@ public ExprContext expr(int i) { public MathContext math() { return getRuleContext(MathContext.class,0); } - public TerminalNode PIPE() { return getToken(TemplateGrammarExpression.PIPE, 0); } public ConcatenationContext concatenation() { return getRuleContext(ConcatenationContext.class,0); } @@ -793,9 +792,9 @@ public final ExprsContext exprs() throws RecognitionException { int _la; try { int _alt; - setState(185); + setState(189); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { @@ -825,9 +824,17 @@ public final ExprsContext exprs() throws RecognitionException { setState(133); ((ExprsContext)_localctx).expr = expr(); _localctx.ret.exprs.add( ((ExprsContext)_localctx).expr.ret ); - setState(135); - match(PIPE); setState(136); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DOT) { + { + setState(135); + match(DOT); + } + } + + setState(138); ((ExprsContext)_localctx).concatenation = concatenation(); _localctx.ret.concatenation =((ExprsContext)_localctx).concatenation.ret; } @@ -835,21 +842,21 @@ public final ExprsContext exprs() throws RecognitionException { case 3: enterOuterAlt(_localctx, 3); { - setState(139); + setState(141); match(DOT); - setState(140); + setState(142); ((ExprsContext)_localctx).expr = expr(); _localctx.ret.exprs.add( ((ExprsContext)_localctx).expr.ret ); - setState(148); + setState(150); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,12,_ctx); + _alt = getInterpreter().adaptivePredict(_input,13,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(142); + setState(144); match(DOT); - setState(143); + setState(145); ((ExprsContext)_localctx).expr = expr(); _localctx.ret.exprs.add( ((ExprsContext)_localctx).expr.ret ); @@ -857,21 +864,21 @@ public final ExprsContext exprs() throws RecognitionException { } } } - setState(150); + setState(152); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,12,_ctx); + _alt = getInterpreter().adaptivePredict(_input,13,_ctx); } - setState(151); + setState(153); match(DOT); - setState(152); + setState(154); ((ExprsContext)_localctx).expr = expr(); _localctx.ret.exprs.add( ((ExprsContext)_localctx).expr.ret ); - setState(155); + setState(157); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1015808L) != 0)) { { - setState(154); + setState(156); ((ExprsContext)_localctx).math = math(); } } @@ -882,46 +889,54 @@ public final ExprsContext exprs() throws RecognitionException { case 4: enterOuterAlt(_localctx, 4); { - setState(159); + setState(161); match(DOT); - setState(160); + setState(162); ((ExprsContext)_localctx).expr = expr(); _localctx.ret.exprs.add( ((ExprsContext)_localctx).expr.ret ); - setState(168); + setState(170); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,14,_ctx); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(162); + setState(164); match(DOT); - setState(163); + setState(165); ((ExprsContext)_localctx).expr = expr(); _localctx.ret.exprs.add( ((ExprsContext)_localctx).expr.ret ); } } } - setState(170); + setState(172); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,14,_ctx); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); } - setState(171); + setState(173); match(DOT); - setState(172); + setState(174); ((ExprsContext)_localctx).expr = expr(); _localctx.ret.exprs.add( ((ExprsContext)_localctx).expr.ret ); - setState(174); - match(PIPE); - setState(175); + setState(177); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DOT) { + { + setState(176); + match(DOT); + } + } + + setState(179); ((ExprsContext)_localctx).concatenation = concatenation(); _localctx.ret.concatenation = ((ExprsContext)_localctx).concatenation.ret; - setState(178); + setState(182); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1015808L) != 0)) { { - setState(177); + setState(181); ((ExprsContext)_localctx).math = math(); } } @@ -932,7 +947,7 @@ public final ExprsContext exprs() throws RecognitionException { case 5: enterOuterAlt(_localctx, 5); { - setState(182); + setState(186); ((ExprsContext)_localctx).concatenation = concatenation(); _localctx.ret.concatenation = ((ExprsContext)_localctx).concatenation.ret; } @@ -980,28 +995,28 @@ public final ExprContext expr() throws RecognitionException { enterRule(_localctx, 18, RULE_expr); int _la; try { - setState(197); + setState(201); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { { - setState(187); + setState(191); ((ExprContext)_localctx).ID = match(ID); - setState(188); + setState(192); match(LPAREN); - setState(190); + setState(194); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 16252928L) != 0)) { { - setState(189); + setState(193); ((ExprContext)_localctx).functionArgs = functionArgs(); } } - setState(192); + setState(196); match(RPAREN); } ((ExprContext)_localctx).ret = new Expr((((ExprContext)_localctx).ID!=null?((ExprContext)_localctx).ID.getText():null), true, ((ExprContext)_localctx).functionArgs != null ? ((ExprContext)_localctx).functionArgs.ret : List.of() ); @@ -1010,7 +1025,7 @@ public final ExprContext expr() throws RecognitionException { case 2: enterOuterAlt(_localctx, 2); { - setState(195); + setState(199); ((ExprContext)_localctx).ID = match(ID); ((ExprContext)_localctx).ret = new Expr((((ExprContext)_localctx).ID!=null?((ExprContext)_localctx).ID.getText():null), false, List.of() ); } @@ -1032,11 +1047,11 @@ public final ExprContext expr() throws RecognitionException { public static class ConcatenationContext extends ParserRuleContext { public Concatenation ret; public CitemsContext citems; - public TerminalNode START_CONCATENATION() { return getToken(TemplateGrammarExpression.START_CONCATENATION, 0); } + public TerminalNode LBRACE() { return getToken(TemplateGrammarExpression.LBRACE, 0); } public CitemsContext citems() { return getRuleContext(CitemsContext.class,0); } - public TerminalNode CRBRACE() { return getToken(TemplateGrammarExpression.CRBRACE, 0); } + public TerminalNode RBRACE() { return getToken(TemplateGrammarExpression.RBRACE, 0); } public ConcatenationContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1057,13 +1072,13 @@ public final ConcatenationContext concatenation() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(199); - match(START_CONCATENATION); - setState(200); + setState(203); + match(LBRACE); + setState(204); ((ConcatenationContext)_localctx).citems = citems(); ((ConcatenationContext)_localctx).ret = new Concatenation( ((ConcatenationContext)_localctx).citems.ret ); - setState(202); - match(CRBRACE); + setState(206); + match(RBRACE); } } catch (RecognitionException re) { @@ -1112,23 +1127,23 @@ public final CitemsContext citems() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(204); + setState(208); ((CitemsContext)_localctx).citem = citem(); _localctx.ret.add(((CitemsContext)_localctx).citem.ret); - setState(212); + setState(216); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(206); + setState(210); match(COMMA); - setState(207); + setState(211); ((CitemsContext)_localctx).citem = citem(); _localctx.ret.add(((CitemsContext)_localctx).citem.ret); } } - setState(214); + setState(218); _errHandler.sync(this); _la = _input.LA(1); } @@ -1153,7 +1168,6 @@ public static class CitemContext extends ParserRuleContext { public Token SSTRING; public Token DECDIGITS; public Token FLOAT; - public TerminalNode DOT() { return getToken(TemplateGrammarExpression.DOT, 0); } public TerminalNode ID() { return getToken(TemplateGrammarExpression.ID, 0); } public TerminalNode DSTRING() { return getToken(TemplateGrammarExpression.DSTRING, 0); } public TerminalNode SSTRING() { return getToken(TemplateGrammarExpression.SSTRING, 0); } @@ -1177,15 +1191,13 @@ public final CitemContext citem() throws RecognitionException { CitemContext _localctx = new CitemContext(_ctx, getState()); enterRule(_localctx, 24, RULE_citem); try { - setState(226); + setState(229); _errHandler.sync(this); switch (_input.LA(1)) { - case DOT: + case ID: enterOuterAlt(_localctx, 1); { - setState(215); - match(DOT); - setState(216); + setState(219); ((CitemContext)_localctx).ID = match(ID); ((CitemContext)_localctx).ret = new Expr( (((CitemContext)_localctx).ID!=null?((CitemContext)_localctx).ID.getText():null), false, List.of() ); } @@ -1193,7 +1205,7 @@ public final CitemContext citem() throws RecognitionException { case DSTRING: enterOuterAlt(_localctx, 2); { - setState(218); + setState(221); ((CitemContext)_localctx).DSTRING = match(DSTRING); ((CitemContext)_localctx).ret = sdStringToString( (((CitemContext)_localctx).DSTRING!=null?((CitemContext)_localctx).DSTRING.getText():null) ); } @@ -1201,7 +1213,7 @@ public final CitemContext citem() throws RecognitionException { case SSTRING: enterOuterAlt(_localctx, 3); { - setState(220); + setState(223); ((CitemContext)_localctx).SSTRING = match(SSTRING); ((CitemContext)_localctx).ret = sdStringToString( (((CitemContext)_localctx).SSTRING!=null?((CitemContext)_localctx).SSTRING.getText():null) ); } @@ -1209,7 +1221,7 @@ public final CitemContext citem() throws RecognitionException { case DECDIGITS: enterOuterAlt(_localctx, 4); { - setState(222); + setState(225); ((CitemContext)_localctx).DECDIGITS = match(DECDIGITS); ((CitemContext)_localctx).ret = String.valueOf( (((CitemContext)_localctx).DECDIGITS!=null?((CitemContext)_localctx).DECDIGITS.getText():null) ); } @@ -1217,7 +1229,7 @@ public final CitemContext citem() throws RecognitionException { case FLOAT: enterOuterAlt(_localctx, 5); { - setState(224); + setState(227); ((CitemContext)_localctx).FLOAT = match(FLOAT); ((CitemContext)_localctx).ret = String.valueOf( (((CitemContext)_localctx).FLOAT!=null?((CitemContext)_localctx).FLOAT.getText():null) ); } @@ -1268,9 +1280,9 @@ public final MathContext math() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(228); + setState(231); ((MathContext)_localctx).mathOperation = mathOperation(); - setState(229); + setState(232); ((MathContext)_localctx).number = number(); ((MathContext)_localctx).ret = new Math( (((MathContext)_localctx).mathOperation!=null?_input.getText(((MathContext)_localctx).mathOperation.start,((MathContext)_localctx).mathOperation.stop):null), (((MathContext)_localctx).number!=null?_input.getText(((MathContext)_localctx).number.start,((MathContext)_localctx).number.stop):null) ); } @@ -1308,7 +1320,7 @@ public final NumberContext number() throws RecognitionException { NumberContext _localctx = new NumberContext(_ctx, getState()); enterRule(_localctx, 28, RULE_number); try { - setState(235); + setState(238); _errHandler.sync(this); switch (_input.LA(1)) { case EOF: @@ -1322,14 +1334,14 @@ public final NumberContext number() throws RecognitionException { case DECDIGITS: enterOuterAlt(_localctx, 2); { - setState(233); + setState(236); match(DECDIGITS); } break; case FLOAT: enterOuterAlt(_localctx, 3); { - setState(234); + setState(237); match(FLOAT); } break; @@ -1376,7 +1388,7 @@ public final MathOperationContext mathOperation() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(237); + setState(240); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 1015808L) != 0)) ) { _errHandler.recoverInline(this); @@ -1400,7 +1412,7 @@ public final MathOperationContext mathOperation() throws RecognitionException { } public static final String _serializedATN = - "\u0004\u0001\u001f\u00f0\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ + "\u0004\u0001\u001e\u00f3\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"+ @@ -1421,137 +1433,140 @@ public final MathOperationContext mathOperation() throws RecognitionException { "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0005\u0007"+ "u\b\u0007\n\u0007\f\u0007x\t\u0007\u0001\u0007\u0003\u0007{\b\u0007\u0001"+ "\b\u0001\b\u0001\b\u0001\b\u0003\b\u0081\b\b\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0005\b\u0093\b\b\n\b\f\b\u0096\t\b\u0001\b"+ - "\u0001\b\u0001\b\u0001\b\u0003\b\u009c\b\b\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0005\b\u00a7\b\b\n\b\f\b\u00aa"+ - "\t\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u00b3"+ - "\b\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u00ba\b\b\u0001\t"+ - "\u0001\t\u0001\t\u0003\t\u00bf\b\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+ - "\t\u0003\t\u00c6\b\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+ - "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0005\u000b"+ - "\u00d3\b\u000b\n\u000b\f\u000b\u00d6\t\u000b\u0001\f\u0001\f\u0001\f\u0001"+ - "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0003\f\u00e3"+ - "\b\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e"+ - "\u0003\u000e\u00ec\b\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0000\u0000"+ - "\u0010\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018"+ - "\u001a\u001c\u001e\u0000\u0001\u0001\u0000\u000f\u0013\u0104\u0000!\u0001"+ - "\u0000\u0000\u0000\u00020\u0001\u0000\u0000\u0000\u0004B\u0001\u0000\u0000"+ - "\u0000\u0006E\u0001\u0000\u0000\u0000\bI\u0001\u0000\u0000\u0000\nR\u0001"+ - "\u0000\u0000\u0000\fk\u0001\u0000\u0000\u0000\u000ez\u0001\u0000\u0000"+ - "\u0000\u0010\u00b9\u0001\u0000\u0000\u0000\u0012\u00c5\u0001\u0000\u0000"+ - "\u0000\u0014\u00c7\u0001\u0000\u0000\u0000\u0016\u00cc\u0001\u0000\u0000"+ - "\u0000\u0018\u00e2\u0001\u0000\u0000\u0000\u001a\u00e4\u0001\u0000\u0000"+ - "\u0000\u001c\u00eb\u0001\u0000\u0000\u0000\u001e\u00ed\u0001\u0000\u0000"+ - "\u0000 \"\u0005\u0002\u0000\u0000! \u0001\u0000\u0000\u0000!\"\u0001\u0000"+ - "\u0000\u0000\"$\u0001\u0000\u0000\u0000#%\u0005\u001a\u0000\u0000$#\u0001"+ - "\u0000\u0000\u0000$%\u0001\u0000\u0000\u0000%&\u0001\u0000\u0000\u0000"+ - "&\'\u0003\u0010\b\u0000\')\u0003\u000e\u0007\u0000(*\u0003\u0002\u0001"+ - "\u0000)(\u0001\u0000\u0000\u0000)*\u0001\u0000\u0000\u0000*,\u0001\u0000"+ - "\u0000\u0000+-\u0003\b\u0004\u0000,+\u0001\u0000\u0000\u0000,-\u0001\u0000"+ - "\u0000\u0000-.\u0001\u0000\u0000\u0000./\u0006\u0000\uffff\uffff\u0000"+ - "/\u0001\u0001\u0000\u0000\u000001\u0005\u000b\u0000\u000012\u0003\u0004"+ - "\u0002\u000023\u0006\u0001\uffff\uffff\u00003\u0003\u0001\u0000\u0000"+ - "\u000045\u0005\u0015\u0000\u00005C\u0006\u0002\uffff\uffff\u000067\u0005"+ - "\u0014\u0000\u00007C\u0006\u0002\uffff\uffff\u000089\u0003\u0006\u0003"+ - "\u00009:\u0006\u0002\uffff\uffff\u0000:C\u0001\u0000\u0000\u0000;<\u0005"+ - "\u0017\u0000\u0000\u0005\u0018\u0000"+ - "\u0000>C\u0006\u0002\uffff\uffff\u0000?@\u0005\t\u0000\u0000@A\u0005\n"+ - "\u0000\u0000AC\u0006\u0002\uffff\uffff\u0000B4\u0001\u0000\u0000\u0000"+ - "B6\u0001\u0000\u0000\u0000B8\u0001\u0000\u0000\u0000B;\u0001\u0000\u0000"+ - "\u0000B=\u0001\u0000\u0000\u0000B?\u0001\u0000\u0000\u0000C\u0005\u0001"+ - "\u0000\u0000\u0000DF\u0005\u0013\u0000\u0000ED\u0001\u0000\u0000\u0000"+ - "EF\u0001\u0000\u0000\u0000FG\u0001\u0000\u0000\u0000GH\u0005\u0016\u0000"+ - "\u0000H\u0007\u0001\u0000\u0000\u0000IJ\u0005\f\u0000\u0000JK\u0005\u0019"+ - "\u0000\u0000KM\u0005\u0007\u0000\u0000LN\u0003\n\u0005\u0000ML\u0001\u0000"+ - "\u0000\u0000MN\u0001\u0000\u0000\u0000NO\u0001\u0000\u0000\u0000OP\u0005"+ - "\b\u0000\u0000PQ\u0006\u0004\uffff\uffff\u0000Q\t\u0001\u0000\u0000\u0000"+ - "RS\u0003\f\u0006\u0000SZ\u0006\u0005\uffff\uffff\u0000TU\u0005\r\u0000"+ - "\u0000UV\u0003\f\u0006\u0000VW\u0006\u0005\uffff\uffff\u0000WY\u0001\u0000"+ - "\u0000\u0000XT\u0001\u0000\u0000\u0000Y\\\u0001\u0000\u0000\u0000ZX\u0001"+ - "\u0000\u0000\u0000Z[\u0001\u0000\u0000\u0000[\u000b\u0001\u0000\u0000"+ - "\u0000\\Z\u0001\u0000\u0000\u0000]^\u0005\u0016\u0000\u0000^l\u0006\u0006"+ - "\uffff\uffff\u0000_`\u0005\u0013\u0000\u0000`a\u0005\u0016\u0000\u0000"+ - "al\u0006\u0006\uffff\uffff\u0000bc\u0005\u0017\u0000\u0000cl\u0006\u0006"+ - "\uffff\uffff\u0000de\u0005\u0013\u0000\u0000ef\u0005\u0017\u0000\u0000"+ - "fl\u0006\u0006\uffff\uffff\u0000gh\u0005\u0015\u0000\u0000hl\u0006\u0006"+ - "\uffff\uffff\u0000ij\u0005\u0014\u0000\u0000jl\u0006\u0006\uffff\uffff"+ - "\u0000k]\u0001\u0000\u0000\u0000k_\u0001\u0000\u0000\u0000kb\u0001\u0000"+ - "\u0000\u0000kd\u0001\u0000\u0000\u0000kg\u0001\u0000\u0000\u0000ki\u0001"+ - "\u0000\u0000\u0000l\r\u0001\u0000\u0000\u0000mn\u0005\u0001\u0000\u0000"+ - "no\u0003\u0010\b\u0000ov\u0006\u0007\uffff\uffff\u0000pq\u0005\u0001\u0000"+ - "\u0000qr\u0003\u0010\b\u0000rs\u0006\u0007\uffff\uffff\u0000su\u0001\u0000"+ - "\u0000\u0000tp\u0001\u0000\u0000\u0000ux\u0001\u0000\u0000\u0000vt\u0001"+ - "\u0000\u0000\u0000vw\u0001\u0000\u0000\u0000w{\u0001\u0000\u0000\u0000"+ - "xv\u0001\u0000\u0000\u0000y{\u0001\u0000\u0000\u0000zm\u0001\u0000\u0000"+ - "\u0000zy\u0001\u0000\u0000\u0000{\u000f\u0001\u0000\u0000\u0000|}\u0005"+ - "\u0006\u0000\u0000}~\u0003\u0012\t\u0000~\u0080\u0006\b\uffff\uffff\u0000"+ - "\u007f\u0081\u0003\u001a\r\u0000\u0080\u007f\u0001\u0000\u0000\u0000\u0080"+ - "\u0081\u0001\u0000\u0000\u0000\u0081\u0082\u0001\u0000\u0000\u0000\u0082"+ - "\u0083\u0006\b\uffff\uffff\u0000\u0083\u00ba\u0001\u0000\u0000\u0000\u0084"+ - "\u0085\u0005\u0006\u0000\u0000\u0085\u0086\u0003\u0012\t\u0000\u0086\u0087"+ - "\u0006\b\uffff\uffff\u0000\u0087\u0088\u0005\u000e\u0000\u0000\u0088\u0089"+ - "\u0003\u0014\n\u0000\u0089\u008a\u0006\b\uffff\uffff\u0000\u008a\u00ba"+ - "\u0001\u0000\u0000\u0000\u008b\u008c\u0005\u0006\u0000\u0000\u008c\u008d"+ - "\u0003\u0012\t\u0000\u008d\u0094\u0006\b\uffff\uffff\u0000\u008e\u008f"+ - "\u0005\u0006\u0000\u0000\u008f\u0090\u0003\u0012\t\u0000\u0090\u0091\u0006"+ - "\b\uffff\uffff\u0000\u0091\u0093\u0001\u0000\u0000\u0000\u0092\u008e\u0001"+ - "\u0000\u0000\u0000\u0093\u0096\u0001\u0000\u0000\u0000\u0094\u0092\u0001"+ - "\u0000\u0000\u0000\u0094\u0095\u0001\u0000\u0000\u0000\u0095\u0097\u0001"+ - "\u0000\u0000\u0000\u0096\u0094\u0001\u0000\u0000\u0000\u0097\u0098\u0005"+ - "\u0006\u0000\u0000\u0098\u0099\u0003\u0012\t\u0000\u0099\u009b\u0006\b"+ - "\uffff\uffff\u0000\u009a\u009c\u0003\u001a\r\u0000\u009b\u009a\u0001\u0000"+ - "\u0000\u0000\u009b\u009c\u0001\u0000\u0000\u0000\u009c\u009d\u0001\u0000"+ - "\u0000\u0000\u009d\u009e\u0006\b\uffff\uffff\u0000\u009e\u00ba\u0001\u0000"+ - "\u0000\u0000\u009f\u00a0\u0005\u0006\u0000\u0000\u00a0\u00a1\u0003\u0012"+ - "\t\u0000\u00a1\u00a8\u0006\b\uffff\uffff\u0000\u00a2\u00a3\u0005\u0006"+ - "\u0000\u0000\u00a3\u00a4\u0003\u0012\t\u0000\u00a4\u00a5\u0006\b\uffff"+ - "\uffff\u0000\u00a5\u00a7\u0001\u0000\u0000\u0000\u00a6\u00a2\u0001\u0000"+ - "\u0000\u0000\u00a7\u00aa\u0001\u0000\u0000\u0000\u00a8\u00a6\u0001\u0000"+ - "\u0000\u0000\u00a8\u00a9\u0001\u0000\u0000\u0000\u00a9\u00ab\u0001\u0000"+ - "\u0000\u0000\u00aa\u00a8\u0001\u0000\u0000\u0000\u00ab\u00ac\u0005\u0006"+ - "\u0000\u0000\u00ac\u00ad\u0003\u0012\t\u0000\u00ad\u00ae\u0006\b\uffff"+ - "\uffff\u0000\u00ae\u00af\u0005\u000e\u0000\u0000\u00af\u00b0\u0003\u0014"+ - "\n\u0000\u00b0\u00b2\u0006\b\uffff\uffff\u0000\u00b1\u00b3\u0003\u001a"+ - "\r\u0000\u00b2\u00b1\u0001\u0000\u0000\u0000\u00b2\u00b3\u0001\u0000\u0000"+ - "\u0000\u00b3\u00b4\u0001\u0000\u0000\u0000\u00b4\u00b5\u0006\b\uffff\uffff"+ - "\u0000\u00b5\u00ba\u0001\u0000\u0000\u0000\u00b6\u00b7\u0003\u0014\n\u0000"+ - "\u00b7\u00b8\u0006\b\uffff\uffff\u0000\u00b8\u00ba\u0001\u0000\u0000\u0000"+ - "\u00b9|\u0001\u0000\u0000\u0000\u00b9\u0084\u0001\u0000\u0000\u0000\u00b9"+ - "\u008b\u0001\u0000\u0000\u0000\u00b9\u009f\u0001\u0000\u0000\u0000\u00b9"+ - "\u00b6\u0001\u0000\u0000\u0000\u00ba\u0011\u0001\u0000\u0000\u0000\u00bb"+ - "\u00bc\u0005\u0019\u0000\u0000\u00bc\u00be\u0005\u0007\u0000\u0000\u00bd"+ - "\u00bf\u0003\n\u0005\u0000\u00be\u00bd\u0001\u0000\u0000\u0000\u00be\u00bf"+ - "\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001\u0000\u0000\u0000\u00c0\u00c1"+ - "\u0005\b\u0000\u0000\u00c1\u00c2\u0001\u0000\u0000\u0000\u00c2\u00c6\u0006"+ - "\t\uffff\uffff\u0000\u00c3\u00c4\u0005\u0019\u0000\u0000\u00c4\u00c6\u0006"+ - "\t\uffff\uffff\u0000\u00c5\u00bb\u0001\u0000\u0000\u0000\u00c5\u00c3\u0001"+ - "\u0000\u0000\u0000\u00c6\u0013\u0001\u0000\u0000\u0000\u00c7\u00c8\u0005"+ - "\u0005\u0000\u0000\u00c8\u00c9\u0003\u0016\u000b\u0000\u00c9\u00ca\u0006"+ - "\n\uffff\uffff\u0000\u00ca\u00cb\u0005\u001e\u0000\u0000\u00cb\u0015\u0001"+ - "\u0000\u0000\u0000\u00cc\u00cd\u0003\u0018\f\u0000\u00cd\u00d4\u0006\u000b"+ - "\uffff\uffff\u0000\u00ce\u00cf\u0005\r\u0000\u0000\u00cf\u00d0\u0003\u0018"+ - "\f\u0000\u00d0\u00d1\u0006\u000b\uffff\uffff\u0000\u00d1\u00d3\u0001\u0000"+ - "\u0000\u0000\u00d2\u00ce\u0001\u0000\u0000\u0000\u00d3\u00d6\u0001\u0000"+ - "\u0000\u0000\u00d4\u00d2\u0001\u0000\u0000\u0000\u00d4\u00d5\u0001\u0000"+ - "\u0000\u0000\u00d5\u0017\u0001\u0000\u0000\u0000\u00d6\u00d4\u0001\u0000"+ - "\u0000\u0000\u00d7\u00d8\u0005\u0006\u0000\u0000\u00d8\u00d9\u0005\u0019"+ - "\u0000\u0000\u00d9\u00e3\u0006\f\uffff\uffff\u0000\u00da\u00db\u0005\u0014"+ - "\u0000\u0000\u00db\u00e3\u0006\f\uffff\uffff\u0000\u00dc\u00dd\u0005\u0015"+ - "\u0000\u0000\u00dd\u00e3\u0006\f\uffff\uffff\u0000\u00de\u00df\u0005\u0016"+ - "\u0000\u0000\u00df\u00e3\u0006\f\uffff\uffff\u0000\u00e0\u00e1\u0005\u0017"+ - "\u0000\u0000\u00e1\u00e3\u0006\f\uffff\uffff\u0000\u00e2\u00d7\u0001\u0000"+ - "\u0000\u0000\u00e2\u00da\u0001\u0000\u0000\u0000\u00e2\u00dc\u0001\u0000"+ - "\u0000\u0000\u00e2\u00de\u0001\u0000\u0000\u0000\u00e2\u00e0\u0001\u0000"+ - "\u0000\u0000\u00e3\u0019\u0001\u0000\u0000\u0000\u00e4\u00e5\u0003\u001e"+ - "\u000f\u0000\u00e5\u00e6\u0003\u001c\u000e\u0000\u00e6\u00e7\u0006\r\uffff"+ - "\uffff\u0000\u00e7\u001b\u0001\u0000\u0000\u0000\u00e8\u00ec\u0001\u0000"+ - "\u0000\u0000\u00e9\u00ec\u0005\u0016\u0000\u0000\u00ea\u00ec\u0005\u0017"+ - "\u0000\u0000\u00eb\u00e8\u0001\u0000\u0000\u0000\u00eb\u00e9\u0001\u0000"+ - "\u0000\u0000\u00eb\u00ea\u0001\u0000\u0000\u0000\u00ec\u001d\u0001\u0000"+ - "\u0000\u0000\u00ed\u00ee\u0007\u0000\u0000\u0000\u00ee\u001f\u0001\u0000"+ - "\u0000\u0000\u0016!$),BEMZkvz\u0080\u0094\u009b\u00a8\u00b2\u00b9\u00be"+ - "\u00c5\u00d4\u00e2\u00eb"; + "\b\u0001\b\u0001\b\u0003\b\u0089\b\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0005\b\u0095\b\b\n\b\f\b\u0098"+ + "\t\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u009e\b\b\u0001\b\u0001\b"+ + "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0005\b\u00a9"+ + "\b\b\n\b\f\b\u00ac\t\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u00b2\b"+ + "\b\u0001\b\u0001\b\u0001\b\u0003\b\u00b7\b\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0003\b\u00be\b\b\u0001\t\u0001\t\u0001\t\u0003\t\u00c3\b\t"+ + "\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0003\t\u00ca\b\t\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0005\u000b\u00d7\b\u000b\n\u000b\f\u000b\u00da"+ + "\t\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001"+ + "\f\u0001\f\u0001\f\u0003\f\u00e6\b\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0003\u000e\u00ef\b\u000e\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0000\u0000\u0010\u0000\u0002\u0004\u0006\b\n\f\u000e"+ + "\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e\u0000\u0001\u0001\u0000"+ + "\u000f\u0013\u0109\u0000!\u0001\u0000\u0000\u0000\u00020\u0001\u0000\u0000"+ + "\u0000\u0004B\u0001\u0000\u0000\u0000\u0006E\u0001\u0000\u0000\u0000\b"+ + "I\u0001\u0000\u0000\u0000\nR\u0001\u0000\u0000\u0000\fk\u0001\u0000\u0000"+ + "\u0000\u000ez\u0001\u0000\u0000\u0000\u0010\u00bd\u0001\u0000\u0000\u0000"+ + "\u0012\u00c9\u0001\u0000\u0000\u0000\u0014\u00cb\u0001\u0000\u0000\u0000"+ + "\u0016\u00d0\u0001\u0000\u0000\u0000\u0018\u00e5\u0001\u0000\u0000\u0000"+ + "\u001a\u00e7\u0001\u0000\u0000\u0000\u001c\u00ee\u0001\u0000\u0000\u0000"+ + "\u001e\u00f0\u0001\u0000\u0000\u0000 \"\u0005\u0002\u0000\u0000! \u0001"+ + "\u0000\u0000\u0000!\"\u0001\u0000\u0000\u0000\"$\u0001\u0000\u0000\u0000"+ + "#%\u0005\u001a\u0000\u0000$#\u0001\u0000\u0000\u0000$%\u0001\u0000\u0000"+ + "\u0000%&\u0001\u0000\u0000\u0000&\'\u0003\u0010\b\u0000\')\u0003\u000e"+ + "\u0007\u0000(*\u0003\u0002\u0001\u0000)(\u0001\u0000\u0000\u0000)*\u0001"+ + "\u0000\u0000\u0000*,\u0001\u0000\u0000\u0000+-\u0003\b\u0004\u0000,+\u0001"+ + "\u0000\u0000\u0000,-\u0001\u0000\u0000\u0000-.\u0001\u0000\u0000\u0000"+ + "./\u0006\u0000\uffff\uffff\u0000/\u0001\u0001\u0000\u0000\u000001\u0005"+ + "\f\u0000\u000012\u0003\u0004\u0002\u000023\u0006\u0001\uffff\uffff\u0000"+ + "3\u0003\u0001\u0000\u0000\u000045\u0005\u0015\u0000\u00005C\u0006\u0002"+ + "\uffff\uffff\u000067\u0005\u0014\u0000\u00007C\u0006\u0002\uffff\uffff"+ + "\u000089\u0003\u0006\u0003\u00009:\u0006\u0002\uffff\uffff\u0000:C\u0001"+ + "\u0000\u0000\u0000;<\u0005\u0017\u0000\u0000\u0005\u0018\u0000\u0000>C\u0006\u0002\uffff\uffff\u0000?@\u0005"+ + "\n\u0000\u0000@A\u0005\u000b\u0000\u0000AC\u0006\u0002\uffff\uffff\u0000"+ + "B4\u0001\u0000\u0000\u0000B6\u0001\u0000\u0000\u0000B8\u0001\u0000\u0000"+ + "\u0000B;\u0001\u0000\u0000\u0000B=\u0001\u0000\u0000\u0000B?\u0001\u0000"+ + "\u0000\u0000C\u0005\u0001\u0000\u0000\u0000DF\u0005\u0013\u0000\u0000"+ + "ED\u0001\u0000\u0000\u0000EF\u0001\u0000\u0000\u0000FG\u0001\u0000\u0000"+ + "\u0000GH\u0005\u0016\u0000\u0000H\u0007\u0001\u0000\u0000\u0000IJ\u0005"+ + "\r\u0000\u0000JK\u0005\u0019\u0000\u0000KM\u0005\b\u0000\u0000LN\u0003"+ + "\n\u0005\u0000ML\u0001\u0000\u0000\u0000MN\u0001\u0000\u0000\u0000NO\u0001"+ + "\u0000\u0000\u0000OP\u0005\t\u0000\u0000PQ\u0006\u0004\uffff\uffff\u0000"+ + "Q\t\u0001\u0000\u0000\u0000RS\u0003\f\u0006\u0000SZ\u0006\u0005\uffff"+ + "\uffff\u0000TU\u0005\u000e\u0000\u0000UV\u0003\f\u0006\u0000VW\u0006\u0005"+ + "\uffff\uffff\u0000WY\u0001\u0000\u0000\u0000XT\u0001\u0000\u0000\u0000"+ + "Y\\\u0001\u0000\u0000\u0000ZX\u0001\u0000\u0000\u0000Z[\u0001\u0000\u0000"+ + "\u0000[\u000b\u0001\u0000\u0000\u0000\\Z\u0001\u0000\u0000\u0000]^\u0005"+ + "\u0016\u0000\u0000^l\u0006\u0006\uffff\uffff\u0000_`\u0005\u0013\u0000"+ + "\u0000`a\u0005\u0016\u0000\u0000al\u0006\u0006\uffff\uffff\u0000bc\u0005"+ + "\u0017\u0000\u0000cl\u0006\u0006\uffff\uffff\u0000de\u0005\u0013\u0000"+ + "\u0000ef\u0005\u0017\u0000\u0000fl\u0006\u0006\uffff\uffff\u0000gh\u0005"+ + "\u0015\u0000\u0000hl\u0006\u0006\uffff\uffff\u0000ij\u0005\u0014\u0000"+ + "\u0000jl\u0006\u0006\uffff\uffff\u0000k]\u0001\u0000\u0000\u0000k_\u0001"+ + "\u0000\u0000\u0000kb\u0001\u0000\u0000\u0000kd\u0001\u0000\u0000\u0000"+ + "kg\u0001\u0000\u0000\u0000ki\u0001\u0000\u0000\u0000l\r\u0001\u0000\u0000"+ + "\u0000mn\u0005\u0001\u0000\u0000no\u0003\u0010\b\u0000ov\u0006\u0007\uffff"+ + "\uffff\u0000pq\u0005\u0001\u0000\u0000qr\u0003\u0010\b\u0000rs\u0006\u0007"+ + "\uffff\uffff\u0000su\u0001\u0000\u0000\u0000tp\u0001\u0000\u0000\u0000"+ + "ux\u0001\u0000\u0000\u0000vt\u0001\u0000\u0000\u0000vw\u0001\u0000\u0000"+ + "\u0000w{\u0001\u0000\u0000\u0000xv\u0001\u0000\u0000\u0000y{\u0001\u0000"+ + "\u0000\u0000zm\u0001\u0000\u0000\u0000zy\u0001\u0000\u0000\u0000{\u000f"+ + "\u0001\u0000\u0000\u0000|}\u0005\u0007\u0000\u0000}~\u0003\u0012\t\u0000"+ + "~\u0080\u0006\b\uffff\uffff\u0000\u007f\u0081\u0003\u001a\r\u0000\u0080"+ + "\u007f\u0001\u0000\u0000\u0000\u0080\u0081\u0001\u0000\u0000\u0000\u0081"+ + "\u0082\u0001\u0000\u0000\u0000\u0082\u0083\u0006\b\uffff\uffff\u0000\u0083"+ + "\u00be\u0001\u0000\u0000\u0000\u0084\u0085\u0005\u0007\u0000\u0000\u0085"+ + "\u0086\u0003\u0012\t\u0000\u0086\u0088\u0006\b\uffff\uffff\u0000\u0087"+ + "\u0089\u0005\u0007\u0000\u0000\u0088\u0087\u0001\u0000\u0000\u0000\u0088"+ + "\u0089\u0001\u0000\u0000\u0000\u0089\u008a\u0001\u0000\u0000\u0000\u008a"+ + "\u008b\u0003\u0014\n\u0000\u008b\u008c\u0006\b\uffff\uffff\u0000\u008c"+ + "\u00be\u0001\u0000\u0000\u0000\u008d\u008e\u0005\u0007\u0000\u0000\u008e"+ + "\u008f\u0003\u0012\t\u0000\u008f\u0096\u0006\b\uffff\uffff\u0000\u0090"+ + "\u0091\u0005\u0007\u0000\u0000\u0091\u0092\u0003\u0012\t\u0000\u0092\u0093"+ + "\u0006\b\uffff\uffff\u0000\u0093\u0095\u0001\u0000\u0000\u0000\u0094\u0090"+ + "\u0001\u0000\u0000\u0000\u0095\u0098\u0001\u0000\u0000\u0000\u0096\u0094"+ + "\u0001\u0000\u0000\u0000\u0096\u0097\u0001\u0000\u0000\u0000\u0097\u0099"+ + "\u0001\u0000\u0000\u0000\u0098\u0096\u0001\u0000\u0000\u0000\u0099\u009a"+ + "\u0005\u0007\u0000\u0000\u009a\u009b\u0003\u0012\t\u0000\u009b\u009d\u0006"+ + "\b\uffff\uffff\u0000\u009c\u009e\u0003\u001a\r\u0000\u009d\u009c\u0001"+ + "\u0000\u0000\u0000\u009d\u009e\u0001\u0000\u0000\u0000\u009e\u009f\u0001"+ + "\u0000\u0000\u0000\u009f\u00a0\u0006\b\uffff\uffff\u0000\u00a0\u00be\u0001"+ + "\u0000\u0000\u0000\u00a1\u00a2\u0005\u0007\u0000\u0000\u00a2\u00a3\u0003"+ + "\u0012\t\u0000\u00a3\u00aa\u0006\b\uffff\uffff\u0000\u00a4\u00a5\u0005"+ + "\u0007\u0000\u0000\u00a5\u00a6\u0003\u0012\t\u0000\u00a6\u00a7\u0006\b"+ + "\uffff\uffff\u0000\u00a7\u00a9\u0001\u0000\u0000\u0000\u00a8\u00a4\u0001"+ + "\u0000\u0000\u0000\u00a9\u00ac\u0001\u0000\u0000\u0000\u00aa\u00a8\u0001"+ + "\u0000\u0000\u0000\u00aa\u00ab\u0001\u0000\u0000\u0000\u00ab\u00ad\u0001"+ + "\u0000\u0000\u0000\u00ac\u00aa\u0001\u0000\u0000\u0000\u00ad\u00ae\u0005"+ + "\u0007\u0000\u0000\u00ae\u00af\u0003\u0012\t\u0000\u00af\u00b1\u0006\b"+ + "\uffff\uffff\u0000\u00b0\u00b2\u0005\u0007\u0000\u0000\u00b1\u00b0\u0001"+ + "\u0000\u0000\u0000\u00b1\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b3\u0001"+ + "\u0000\u0000\u0000\u00b3\u00b4\u0003\u0014\n\u0000\u00b4\u00b6\u0006\b"+ + "\uffff\uffff\u0000\u00b5\u00b7\u0003\u001a\r\u0000\u00b6\u00b5\u0001\u0000"+ + "\u0000\u0000\u00b6\u00b7\u0001\u0000\u0000\u0000\u00b7\u00b8\u0001\u0000"+ + "\u0000\u0000\u00b8\u00b9\u0006\b\uffff\uffff\u0000\u00b9\u00be\u0001\u0000"+ + "\u0000\u0000\u00ba\u00bb\u0003\u0014\n\u0000\u00bb\u00bc\u0006\b\uffff"+ + "\uffff\u0000\u00bc\u00be\u0001\u0000\u0000\u0000\u00bd|\u0001\u0000\u0000"+ + "\u0000\u00bd\u0084\u0001\u0000\u0000\u0000\u00bd\u008d\u0001\u0000\u0000"+ + "\u0000\u00bd\u00a1\u0001\u0000\u0000\u0000\u00bd\u00ba\u0001\u0000\u0000"+ + "\u0000\u00be\u0011\u0001\u0000\u0000\u0000\u00bf\u00c0\u0005\u0019\u0000"+ + "\u0000\u00c0\u00c2\u0005\b\u0000\u0000\u00c1\u00c3\u0003\n\u0005\u0000"+ + "\u00c2\u00c1\u0001\u0000\u0000\u0000\u00c2\u00c3\u0001\u0000\u0000\u0000"+ + "\u00c3\u00c4\u0001\u0000\u0000\u0000\u00c4\u00c5\u0005\t\u0000\u0000\u00c5"+ + "\u00c6\u0001\u0000\u0000\u0000\u00c6\u00ca\u0006\t\uffff\uffff\u0000\u00c7"+ + "\u00c8\u0005\u0019\u0000\u0000\u00c8\u00ca\u0006\t\uffff\uffff\u0000\u00c9"+ + "\u00bf\u0001\u0000\u0000\u0000\u00c9\u00c7\u0001\u0000\u0000\u0000\u00ca"+ + "\u0013\u0001\u0000\u0000\u0000\u00cb\u00cc\u0005\u0005\u0000\u0000\u00cc"+ + "\u00cd\u0003\u0016\u000b\u0000\u00cd\u00ce\u0006\n\uffff\uffff\u0000\u00ce"+ + "\u00cf\u0005\u0006\u0000\u0000\u00cf\u0015\u0001\u0000\u0000\u0000\u00d0"+ + "\u00d1\u0003\u0018\f\u0000\u00d1\u00d8\u0006\u000b\uffff\uffff\u0000\u00d2"+ + "\u00d3\u0005\u000e\u0000\u0000\u00d3\u00d4\u0003\u0018\f\u0000\u00d4\u00d5"+ + "\u0006\u000b\uffff\uffff\u0000\u00d5\u00d7\u0001\u0000\u0000\u0000\u00d6"+ + "\u00d2\u0001\u0000\u0000\u0000\u00d7\u00da\u0001\u0000\u0000\u0000\u00d8"+ + "\u00d6\u0001\u0000\u0000\u0000\u00d8\u00d9\u0001\u0000\u0000\u0000\u00d9"+ + "\u0017\u0001\u0000\u0000\u0000\u00da\u00d8\u0001\u0000\u0000\u0000\u00db"+ + "\u00dc\u0005\u0019\u0000\u0000\u00dc\u00e6\u0006\f\uffff\uffff\u0000\u00dd"+ + "\u00de\u0005\u0014\u0000\u0000\u00de\u00e6\u0006\f\uffff\uffff\u0000\u00df"+ + "\u00e0\u0005\u0015\u0000\u0000\u00e0\u00e6\u0006\f\uffff\uffff\u0000\u00e1"+ + "\u00e2\u0005\u0016\u0000\u0000\u00e2\u00e6\u0006\f\uffff\uffff\u0000\u00e3"+ + "\u00e4\u0005\u0017\u0000\u0000\u00e4\u00e6\u0006\f\uffff\uffff\u0000\u00e5"+ + "\u00db\u0001\u0000\u0000\u0000\u00e5\u00dd\u0001\u0000\u0000\u0000\u00e5"+ + "\u00df\u0001\u0000\u0000\u0000\u00e5\u00e1\u0001\u0000\u0000\u0000\u00e5"+ + "\u00e3\u0001\u0000\u0000\u0000\u00e6\u0019\u0001\u0000\u0000\u0000\u00e7"+ + "\u00e8\u0003\u001e\u000f\u0000\u00e8\u00e9\u0003\u001c\u000e\u0000\u00e9"+ + "\u00ea\u0006\r\uffff\uffff\u0000\u00ea\u001b\u0001\u0000\u0000\u0000\u00eb"+ + "\u00ef\u0001\u0000\u0000\u0000\u00ec\u00ef\u0005\u0016\u0000\u0000\u00ed"+ + "\u00ef\u0005\u0017\u0000\u0000\u00ee\u00eb\u0001\u0000\u0000\u0000\u00ee"+ + "\u00ec\u0001\u0000\u0000\u0000\u00ee\u00ed\u0001\u0000\u0000\u0000\u00ef"+ + "\u001d\u0001\u0000\u0000\u0000\u00f0\u00f1\u0007\u0000\u0000\u0000\u00f1"+ + "\u001f\u0001\u0000\u0000\u0000\u0018!$),BEMZkvz\u0080\u0088\u0096\u009d"+ + "\u00aa\u00b1\u00b6\u00bd\u00c2\u00c9\u00d8\u00e5\u00ee"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.tokens b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.tokens index e5fb05742..680b3cfca 100644 --- a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.tokens +++ b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateGrammarExpression.tokens @@ -2,16 +2,16 @@ DEFAULT=1 BLOCK_COMMENT=2 HORZ_WS=3 VERT_WS=4 -START_CONCATENATION=5 -DOT=6 -LPAREN=7 -RPAREN=8 -LBRACK=9 -RBRACK=10 -DQUESTION=11 -SEMI=12 -COMMA=13 -PIPE=14 +LBRACE=5 +RBRACE=6 +DOT=7 +LPAREN=8 +RPAREN=9 +LBRACK=10 +RBRACK=11 +DQUESTION=12 +SEMI=13 +COMMA=14 STAR=15 SLASH=16 PERCENT=17 @@ -27,5 +27,4 @@ CAST_TYPE=26 ERR_CHAR=27 C_HORZ_WS=28 C_VERT_WS=29 -CRBRACE=30 -CERR_CHAR=31 +CERR_CHAR=30 diff --git a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.interp b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.interp index f4ba3a61e..df5e9913b 100644 --- a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.interp +++ b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.interp @@ -30,7 +30,6 @@ null null null null -null token symbolic names: null @@ -38,7 +37,8 @@ DEFAULT BLOCK_COMMENT HORZ_WS VERT_WS -START_CONCATENATION +LBRACE +RBRACE DOT LPAREN RPAREN @@ -47,7 +47,6 @@ RBRACK DQUESTION SEMI COMMA -PIPE STAR SLASH PERCENT @@ -63,7 +62,6 @@ CAST_TYPE ERR_CHAR C_HORZ_WS C_VERT_WS -CRBRACE CERR_CHAR rule names: @@ -92,7 +90,6 @@ DQuestion LT GT Default -Concat NameChar EscSeq UnicodeEsc @@ -109,7 +106,8 @@ DEFAULT BLOCK_COMMENT HORZ_WS VERT_WS -START_CONCATENATION +LBRACE +RBRACE DOT LPAREN RPAREN @@ -118,7 +116,6 @@ RBRACK DQUESTION SEMI COMMA -PIPE STAR SLASH PERCENT @@ -138,7 +135,6 @@ C_HORZ_WS C_VERT_WS CRBRACE CCOMMA -CDOT CID CDSTRING CSSTRING @@ -155,4 +151,4 @@ DEFAULT_MODE Concatenation atn: -[4, 0, 31, 468, 6, -1, 6, -1, 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, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 1, 0, 1, 0, 3, 0, 161, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 171, 8, 3, 10, 3, 12, 3, 174, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 179, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 3, 26, 240, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 247, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 254, 8, 28, 3, 28, 256, 8, 28, 3, 28, 258, 8, 28, 3, 28, 260, 8, 28, 1, 29, 1, 29, 1, 29, 5, 29, 265, 8, 29, 10, 29, 12, 29, 268, 9, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 5, 30, 275, 8, 30, 10, 30, 12, 30, 278, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 3, 31, 284, 8, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 4, 34, 291, 8, 34, 11, 34, 12, 34, 292, 1, 35, 1, 35, 1, 35, 3, 35, 298, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 5, 38, 313, 8, 38, 10, 38, 12, 38, 316, 9, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 4, 40, 323, 8, 40, 11, 40, 12, 40, 324, 1, 40, 1, 40, 1, 41, 4, 41, 330, 8, 41, 11, 41, 12, 41, 331, 1, 41, 1, 41, 1, 42, 1, 42, 5, 42, 338, 8, 42, 10, 42, 12, 42, 341, 9, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 5, 62, 388, 8, 62, 10, 62, 12, 62, 391, 9, 62, 1, 63, 1, 63, 1, 63, 4, 63, 396, 8, 63, 11, 63, 12, 63, 397, 1, 63, 3, 63, 401, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 4, 67, 414, 8, 67, 11, 67, 12, 67, 415, 1, 67, 1, 67, 1, 68, 4, 68, 421, 8, 68, 11, 68, 12, 68, 422, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 5, 72, 442, 8, 72, 10, 72, 12, 72, 445, 9, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 172, 0, 78, 2, 0, 4, 0, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0, 20, 0, 22, 0, 24, 0, 26, 0, 28, 0, 30, 0, 32, 0, 34, 0, 36, 0, 38, 0, 40, 0, 42, 0, 44, 0, 46, 0, 48, 0, 50, 0, 52, 0, 54, 0, 56, 0, 58, 0, 60, 0, 62, 0, 64, 0, 66, 0, 68, 0, 70, 0, 72, 0, 74, 0, 76, 0, 78, 1, 80, 2, 82, 3, 84, 4, 86, 5, 88, 6, 90, 7, 92, 8, 94, 9, 96, 10, 98, 11, 100, 12, 102, 13, 104, 14, 106, 15, 108, 16, 110, 17, 112, 18, 114, 19, 116, 20, 118, 21, 120, 22, 122, 23, 124, 24, 126, 25, 128, 26, 130, 27, 132, 0, 134, 0, 136, 28, 138, 29, 140, 30, 142, 0, 144, 0, 146, 0, 148, 0, 150, 0, 152, 0, 154, 0, 156, 31, 2, 0, 1, 9, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 12, 13, 13, 0, 65, 90, 97, 122, 192, 214, 216, 246, 248, 767, 880, 893, 895, 8191, 8204, 8205, 8304, 8591, 11264, 12271, 12289, 55295, 63744, 64975, 65008, 65533, 3, 0, 183, 183, 768, 879, 8255, 8256, 8, 0, 34, 34, 39, 39, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 57, 458, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 102, 1, 0, 0, 0, 0, 104, 1, 0, 0, 0, 0, 106, 1, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 1, 150, 1, 0, 0, 0, 1, 152, 1, 0, 0, 0, 1, 154, 1, 0, 0, 0, 1, 156, 1, 0, 0, 0, 2, 160, 1, 0, 0, 0, 4, 162, 1, 0, 0, 0, 6, 164, 1, 0, 0, 0, 8, 166, 1, 0, 0, 0, 10, 180, 1, 0, 0, 0, 12, 182, 1, 0, 0, 0, 14, 184, 1, 0, 0, 0, 16, 186, 1, 0, 0, 0, 18, 188, 1, 0, 0, 0, 20, 190, 1, 0, 0, 0, 22, 192, 1, 0, 0, 0, 24, 194, 1, 0, 0, 0, 26, 196, 1, 0, 0, 0, 28, 198, 1, 0, 0, 0, 30, 200, 1, 0, 0, 0, 32, 202, 1, 0, 0, 0, 34, 204, 1, 0, 0, 0, 36, 206, 1, 0, 0, 0, 38, 208, 1, 0, 0, 0, 40, 210, 1, 0, 0, 0, 42, 212, 1, 0, 0, 0, 44, 214, 1, 0, 0, 0, 46, 217, 1, 0, 0, 0, 48, 219, 1, 0, 0, 0, 50, 221, 1, 0, 0, 0, 52, 229, 1, 0, 0, 0, 54, 239, 1, 0, 0, 0, 56, 241, 1, 0, 0, 0, 58, 248, 1, 0, 0, 0, 60, 261, 1, 0, 0, 0, 62, 271, 1, 0, 0, 0, 64, 283, 1, 0, 0, 0, 66, 285, 1, 0, 0, 0, 68, 287, 1, 0, 0, 0, 70, 290, 1, 0, 0, 0, 72, 294, 1, 0, 0, 0, 74, 299, 1, 0, 0, 0, 76, 304, 1, 0, 0, 0, 78, 310, 1, 0, 0, 0, 80, 319, 1, 0, 0, 0, 82, 322, 1, 0, 0, 0, 84, 329, 1, 0, 0, 0, 86, 335, 1, 0, 0, 0, 88, 346, 1, 0, 0, 0, 90, 348, 1, 0, 0, 0, 92, 350, 1, 0, 0, 0, 94, 352, 1, 0, 0, 0, 96, 354, 1, 0, 0, 0, 98, 356, 1, 0, 0, 0, 100, 358, 1, 0, 0, 0, 102, 360, 1, 0, 0, 0, 104, 362, 1, 0, 0, 0, 106, 364, 1, 0, 0, 0, 108, 366, 1, 0, 0, 0, 110, 368, 1, 0, 0, 0, 112, 370, 1, 0, 0, 0, 114, 372, 1, 0, 0, 0, 116, 374, 1, 0, 0, 0, 118, 376, 1, 0, 0, 0, 120, 378, 1, 0, 0, 0, 122, 380, 1, 0, 0, 0, 124, 382, 1, 0, 0, 0, 126, 384, 1, 0, 0, 0, 128, 392, 1, 0, 0, 0, 130, 404, 1, 0, 0, 0, 132, 408, 1, 0, 0, 0, 134, 410, 1, 0, 0, 0, 136, 413, 1, 0, 0, 0, 138, 420, 1, 0, 0, 0, 140, 426, 1, 0, 0, 0, 142, 430, 1, 0, 0, 0, 144, 434, 1, 0, 0, 0, 146, 438, 1, 0, 0, 0, 148, 448, 1, 0, 0, 0, 150, 452, 1, 0, 0, 0, 152, 456, 1, 0, 0, 0, 154, 460, 1, 0, 0, 0, 156, 464, 1, 0, 0, 0, 158, 161, 3, 4, 1, 0, 159, 161, 3, 6, 2, 0, 160, 158, 1, 0, 0, 0, 160, 159, 1, 0, 0, 0, 161, 3, 1, 0, 0, 0, 162, 163, 7, 0, 0, 0, 163, 5, 1, 0, 0, 0, 164, 165, 7, 1, 0, 0, 165, 7, 1, 0, 0, 0, 166, 167, 5, 47, 0, 0, 167, 168, 5, 42, 0, 0, 168, 172, 1, 0, 0, 0, 169, 171, 9, 0, 0, 0, 170, 169, 1, 0, 0, 0, 171, 174, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 173, 178, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 175, 176, 5, 42, 0, 0, 176, 179, 5, 47, 0, 0, 177, 179, 5, 0, 0, 1, 178, 175, 1, 0, 0, 0, 178, 177, 1, 0, 0, 0, 179, 9, 1, 0, 0, 0, 180, 181, 5, 92, 0, 0, 181, 11, 1, 0, 0, 0, 182, 183, 5, 39, 0, 0, 183, 13, 1, 0, 0, 0, 184, 185, 5, 34, 0, 0, 185, 15, 1, 0, 0, 0, 186, 187, 5, 95, 0, 0, 187, 17, 1, 0, 0, 0, 188, 189, 5, 44, 0, 0, 189, 19, 1, 0, 0, 0, 190, 191, 5, 59, 0, 0, 191, 21, 1, 0, 0, 0, 192, 193, 5, 124, 0, 0, 193, 23, 1, 0, 0, 0, 194, 195, 5, 46, 0, 0, 195, 25, 1, 0, 0, 0, 196, 197, 5, 40, 0, 0, 197, 27, 1, 0, 0, 0, 198, 199, 5, 41, 0, 0, 199, 29, 1, 0, 0, 0, 200, 201, 5, 91, 0, 0, 201, 31, 1, 0, 0, 0, 202, 203, 5, 93, 0, 0, 203, 33, 1, 0, 0, 0, 204, 205, 5, 42, 0, 0, 205, 35, 1, 0, 0, 0, 206, 207, 5, 47, 0, 0, 207, 37, 1, 0, 0, 0, 208, 209, 5, 37, 0, 0, 209, 39, 1, 0, 0, 0, 210, 211, 5, 43, 0, 0, 211, 41, 1, 0, 0, 0, 212, 213, 5, 45, 0, 0, 213, 43, 1, 0, 0, 0, 214, 215, 5, 63, 0, 0, 215, 216, 5, 63, 0, 0, 216, 45, 1, 0, 0, 0, 217, 218, 5, 60, 0, 0, 218, 47, 1, 0, 0, 0, 219, 220, 5, 62, 0, 0, 220, 49, 1, 0, 0, 0, 221, 222, 5, 100, 0, 0, 222, 223, 5, 101, 0, 0, 223, 224, 5, 102, 0, 0, 224, 225, 5, 97, 0, 0, 225, 226, 5, 117, 0, 0, 226, 227, 5, 108, 0, 0, 227, 228, 5, 116, 0, 0, 228, 51, 1, 0, 0, 0, 229, 230, 5, 99, 0, 0, 230, 231, 5, 111, 0, 0, 231, 232, 5, 110, 0, 0, 232, 233, 5, 99, 0, 0, 233, 234, 5, 97, 0, 0, 234, 235, 5, 116, 0, 0, 235, 53, 1, 0, 0, 0, 236, 240, 7, 2, 0, 0, 237, 240, 3, 16, 7, 0, 238, 240, 7, 3, 0, 0, 239, 236, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 238, 1, 0, 0, 0, 240, 55, 1, 0, 0, 0, 241, 246, 3, 10, 4, 0, 242, 247, 7, 4, 0, 0, 243, 247, 3, 58, 28, 0, 244, 247, 9, 0, 0, 0, 245, 247, 5, 0, 0, 1, 246, 242, 1, 0, 0, 0, 246, 243, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 246, 245, 1, 0, 0, 0, 247, 57, 1, 0, 0, 0, 248, 259, 5, 117, 0, 0, 249, 257, 3, 66, 32, 0, 250, 255, 3, 66, 32, 0, 251, 253, 3, 66, 32, 0, 252, 254, 3, 66, 32, 0, 253, 252, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 256, 1, 0, 0, 0, 255, 251, 1, 0, 0, 0, 255, 256, 1, 0, 0, 0, 256, 258, 1, 0, 0, 0, 257, 250, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 260, 1, 0, 0, 0, 259, 249, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 59, 1, 0, 0, 0, 261, 266, 3, 12, 5, 0, 262, 265, 3, 56, 27, 0, 263, 265, 8, 5, 0, 0, 264, 262, 1, 0, 0, 0, 264, 263, 1, 0, 0, 0, 265, 268, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 269, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 270, 3, 12, 5, 0, 270, 61, 1, 0, 0, 0, 271, 276, 3, 14, 6, 0, 272, 275, 3, 56, 27, 0, 273, 275, 8, 6, 0, 0, 274, 272, 1, 0, 0, 0, 274, 273, 1, 0, 0, 0, 275, 278, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 279, 1, 0, 0, 0, 278, 276, 1, 0, 0, 0, 279, 280, 3, 14, 6, 0, 280, 63, 1, 0, 0, 0, 281, 284, 3, 74, 36, 0, 282, 284, 3, 76, 37, 0, 283, 281, 1, 0, 0, 0, 283, 282, 1, 0, 0, 0, 284, 65, 1, 0, 0, 0, 285, 286, 7, 7, 0, 0, 286, 67, 1, 0, 0, 0, 287, 288, 7, 8, 0, 0, 288, 69, 1, 0, 0, 0, 289, 291, 3, 68, 33, 0, 290, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 71, 1, 0, 0, 0, 294, 295, 3, 70, 34, 0, 295, 297, 3, 24, 11, 0, 296, 298, 3, 70, 34, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 73, 1, 0, 0, 0, 299, 300, 5, 116, 0, 0, 300, 301, 5, 114, 0, 0, 301, 302, 5, 117, 0, 0, 302, 303, 5, 101, 0, 0, 303, 75, 1, 0, 0, 0, 304, 305, 5, 102, 0, 0, 305, 306, 5, 97, 0, 0, 306, 307, 5, 108, 0, 0, 307, 308, 5, 115, 0, 0, 308, 309, 5, 101, 0, 0, 309, 77, 1, 0, 0, 0, 310, 314, 3, 22, 10, 0, 311, 313, 3, 4, 1, 0, 312, 311, 1, 0, 0, 0, 313, 316, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 317, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 317, 318, 3, 50, 24, 0, 318, 79, 1, 0, 0, 0, 319, 320, 3, 8, 3, 0, 320, 81, 1, 0, 0, 0, 321, 323, 3, 4, 1, 0, 322, 321, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 327, 6, 40, 0, 0, 327, 83, 1, 0, 0, 0, 328, 330, 3, 6, 2, 0, 329, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 6, 41, 0, 0, 334, 85, 1, 0, 0, 0, 335, 339, 3, 52, 25, 0, 336, 338, 3, 4, 1, 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, 343, 3, 26, 12, 0, 343, 344, 1, 0, 0, 0, 344, 345, 6, 42, 1, 0, 345, 87, 1, 0, 0, 0, 346, 347, 3, 24, 11, 0, 347, 89, 1, 0, 0, 0, 348, 349, 3, 26, 12, 0, 349, 91, 1, 0, 0, 0, 350, 351, 3, 28, 13, 0, 351, 93, 1, 0, 0, 0, 352, 353, 3, 30, 14, 0, 353, 95, 1, 0, 0, 0, 354, 355, 3, 32, 15, 0, 355, 97, 1, 0, 0, 0, 356, 357, 3, 44, 21, 0, 357, 99, 1, 0, 0, 0, 358, 359, 3, 20, 9, 0, 359, 101, 1, 0, 0, 0, 360, 361, 3, 18, 8, 0, 361, 103, 1, 0, 0, 0, 362, 363, 3, 22, 10, 0, 363, 105, 1, 0, 0, 0, 364, 365, 3, 34, 16, 0, 365, 107, 1, 0, 0, 0, 366, 367, 3, 36, 17, 0, 367, 109, 1, 0, 0, 0, 368, 369, 3, 38, 18, 0, 369, 111, 1, 0, 0, 0, 370, 371, 3, 40, 19, 0, 371, 113, 1, 0, 0, 0, 372, 373, 3, 42, 20, 0, 373, 115, 1, 0, 0, 0, 374, 375, 3, 62, 30, 0, 375, 117, 1, 0, 0, 0, 376, 377, 3, 60, 29, 0, 377, 119, 1, 0, 0, 0, 378, 379, 3, 70, 34, 0, 379, 121, 1, 0, 0, 0, 380, 381, 3, 72, 35, 0, 381, 123, 1, 0, 0, 0, 382, 383, 3, 64, 31, 0, 383, 125, 1, 0, 0, 0, 384, 389, 3, 54, 26, 0, 385, 388, 3, 54, 26, 0, 386, 388, 3, 68, 33, 0, 387, 385, 1, 0, 0, 0, 387, 386, 1, 0, 0, 0, 388, 391, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, 127, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 392, 395, 3, 46, 22, 0, 393, 396, 3, 54, 26, 0, 394, 396, 3, 88, 43, 0, 395, 393, 1, 0, 0, 0, 395, 394, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 400, 1, 0, 0, 0, 399, 401, 3, 128, 63, 0, 400, 399, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 23, 0, 403, 129, 1, 0, 0, 0, 404, 405, 3, 4, 1, 0, 405, 406, 1, 0, 0, 0, 406, 407, 6, 64, 0, 0, 407, 131, 1, 0, 0, 0, 408, 409, 5, 123, 0, 0, 409, 133, 1, 0, 0, 0, 410, 411, 5, 125, 0, 0, 411, 135, 1, 0, 0, 0, 412, 414, 3, 4, 1, 0, 413, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 418, 6, 67, 0, 0, 418, 137, 1, 0, 0, 0, 419, 421, 3, 6, 2, 0, 420, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 6, 68, 0, 0, 425, 139, 1, 0, 0, 0, 426, 427, 3, 28, 13, 0, 427, 428, 1, 0, 0, 0, 428, 429, 6, 69, 2, 0, 429, 141, 1, 0, 0, 0, 430, 431, 3, 18, 8, 0, 431, 432, 1, 0, 0, 0, 432, 433, 6, 70, 3, 0, 433, 143, 1, 0, 0, 0, 434, 435, 3, 24, 11, 0, 435, 436, 1, 0, 0, 0, 436, 437, 6, 71, 4, 0, 437, 145, 1, 0, 0, 0, 438, 443, 3, 54, 26, 0, 439, 442, 3, 54, 26, 0, 440, 442, 3, 68, 33, 0, 441, 439, 1, 0, 0, 0, 441, 440, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 446, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 447, 6, 72, 5, 0, 447, 147, 1, 0, 0, 0, 448, 449, 3, 62, 30, 0, 449, 450, 1, 0, 0, 0, 450, 451, 6, 73, 6, 0, 451, 149, 1, 0, 0, 0, 452, 453, 3, 60, 29, 0, 453, 454, 1, 0, 0, 0, 454, 455, 6, 74, 7, 0, 455, 151, 1, 0, 0, 0, 456, 457, 3, 70, 34, 0, 457, 458, 1, 0, 0, 0, 458, 459, 6, 75, 8, 0, 459, 153, 1, 0, 0, 0, 460, 461, 3, 72, 35, 0, 461, 462, 1, 0, 0, 0, 462, 463, 6, 76, 9, 0, 463, 155, 1, 0, 0, 0, 464, 465, 7, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 467, 6, 77, 0, 0, 467, 157, 1, 0, 0, 0, 31, 0, 1, 160, 172, 178, 239, 246, 253, 255, 257, 259, 264, 266, 274, 276, 283, 292, 297, 314, 324, 331, 339, 387, 389, 395, 397, 400, 415, 422, 441, 443, 10, 6, 0, 0, 5, 1, 0, 4, 0, 0, 7, 13, 0, 7, 6, 0, 7, 25, 0, 7, 20, 0, 7, 21, 0, 7, 22, 0, 7, 23, 0] \ No newline at end of file +[4, 0, 30, 449, 6, -1, 6, -1, 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, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 1, 0, 1, 0, 3, 0, 157, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 167, 8, 3, 10, 3, 12, 3, 170, 9, 3, 1, 3, 1, 3, 1, 3, 3, 3, 175, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 3, 25, 229, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 236, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 243, 8, 27, 3, 27, 245, 8, 27, 3, 27, 247, 8, 27, 3, 27, 249, 8, 27, 1, 28, 1, 28, 1, 28, 5, 28, 254, 8, 28, 10, 28, 12, 28, 257, 9, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 5, 29, 264, 8, 29, 10, 29, 12, 29, 267, 9, 29, 1, 29, 1, 29, 1, 30, 1, 30, 3, 30, 273, 8, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 4, 33, 280, 8, 33, 11, 33, 12, 33, 281, 1, 34, 1, 34, 1, 34, 3, 34, 287, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 5, 37, 302, 8, 37, 10, 37, 12, 37, 305, 9, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 4, 39, 312, 8, 39, 11, 39, 12, 39, 313, 1, 39, 1, 39, 1, 40, 4, 40, 319, 8, 40, 11, 40, 12, 40, 320, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 5, 61, 372, 8, 61, 10, 61, 12, 61, 375, 9, 61, 1, 62, 1, 62, 1, 62, 4, 62, 380, 8, 62, 11, 62, 12, 62, 381, 1, 62, 3, 62, 385, 8, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 66, 4, 66, 398, 8, 66, 11, 66, 12, 66, 399, 1, 66, 1, 66, 1, 67, 4, 67, 405, 8, 67, 11, 67, 12, 67, 406, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 5, 70, 423, 8, 70, 10, 70, 12, 70, 426, 9, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 168, 0, 76, 2, 0, 4, 0, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0, 20, 0, 22, 0, 24, 0, 26, 0, 28, 0, 30, 0, 32, 0, 34, 0, 36, 0, 38, 0, 40, 0, 42, 0, 44, 0, 46, 0, 48, 0, 50, 0, 52, 0, 54, 0, 56, 0, 58, 0, 60, 0, 62, 0, 64, 0, 66, 0, 68, 0, 70, 0, 72, 0, 74, 0, 76, 1, 78, 2, 80, 3, 82, 4, 84, 5, 86, 6, 88, 7, 90, 8, 92, 9, 94, 10, 96, 11, 98, 12, 100, 13, 102, 14, 104, 15, 106, 16, 108, 17, 110, 18, 112, 19, 114, 20, 116, 21, 118, 22, 120, 23, 122, 24, 124, 25, 126, 26, 128, 27, 130, 0, 132, 0, 134, 28, 136, 29, 138, 0, 140, 0, 142, 0, 144, 0, 146, 0, 148, 0, 150, 0, 152, 30, 2, 0, 1, 9, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 12, 13, 13, 0, 65, 90, 97, 122, 192, 214, 216, 246, 248, 767, 880, 893, 895, 8191, 8204, 8205, 8304, 8591, 11264, 12271, 12289, 55295, 63744, 64975, 65008, 65533, 3, 0, 183, 183, 768, 879, 8255, 8256, 8, 0, 34, 34, 39, 39, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 57, 439, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 102, 1, 0, 0, 0, 0, 104, 1, 0, 0, 0, 0, 106, 1, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 1, 134, 1, 0, 0, 0, 1, 136, 1, 0, 0, 0, 1, 138, 1, 0, 0, 0, 1, 140, 1, 0, 0, 0, 1, 142, 1, 0, 0, 0, 1, 144, 1, 0, 0, 0, 1, 146, 1, 0, 0, 0, 1, 148, 1, 0, 0, 0, 1, 150, 1, 0, 0, 0, 1, 152, 1, 0, 0, 0, 2, 156, 1, 0, 0, 0, 4, 158, 1, 0, 0, 0, 6, 160, 1, 0, 0, 0, 8, 162, 1, 0, 0, 0, 10, 176, 1, 0, 0, 0, 12, 178, 1, 0, 0, 0, 14, 180, 1, 0, 0, 0, 16, 182, 1, 0, 0, 0, 18, 184, 1, 0, 0, 0, 20, 186, 1, 0, 0, 0, 22, 188, 1, 0, 0, 0, 24, 190, 1, 0, 0, 0, 26, 192, 1, 0, 0, 0, 28, 194, 1, 0, 0, 0, 30, 196, 1, 0, 0, 0, 32, 198, 1, 0, 0, 0, 34, 200, 1, 0, 0, 0, 36, 202, 1, 0, 0, 0, 38, 204, 1, 0, 0, 0, 40, 206, 1, 0, 0, 0, 42, 208, 1, 0, 0, 0, 44, 210, 1, 0, 0, 0, 46, 213, 1, 0, 0, 0, 48, 215, 1, 0, 0, 0, 50, 217, 1, 0, 0, 0, 52, 228, 1, 0, 0, 0, 54, 230, 1, 0, 0, 0, 56, 237, 1, 0, 0, 0, 58, 250, 1, 0, 0, 0, 60, 260, 1, 0, 0, 0, 62, 272, 1, 0, 0, 0, 64, 274, 1, 0, 0, 0, 66, 276, 1, 0, 0, 0, 68, 279, 1, 0, 0, 0, 70, 283, 1, 0, 0, 0, 72, 288, 1, 0, 0, 0, 74, 293, 1, 0, 0, 0, 76, 299, 1, 0, 0, 0, 78, 308, 1, 0, 0, 0, 80, 311, 1, 0, 0, 0, 82, 318, 1, 0, 0, 0, 84, 324, 1, 0, 0, 0, 86, 328, 1, 0, 0, 0, 88, 332, 1, 0, 0, 0, 90, 334, 1, 0, 0, 0, 92, 336, 1, 0, 0, 0, 94, 338, 1, 0, 0, 0, 96, 340, 1, 0, 0, 0, 98, 342, 1, 0, 0, 0, 100, 344, 1, 0, 0, 0, 102, 346, 1, 0, 0, 0, 104, 348, 1, 0, 0, 0, 106, 350, 1, 0, 0, 0, 108, 352, 1, 0, 0, 0, 110, 354, 1, 0, 0, 0, 112, 356, 1, 0, 0, 0, 114, 358, 1, 0, 0, 0, 116, 360, 1, 0, 0, 0, 118, 362, 1, 0, 0, 0, 120, 364, 1, 0, 0, 0, 122, 366, 1, 0, 0, 0, 124, 368, 1, 0, 0, 0, 126, 376, 1, 0, 0, 0, 128, 388, 1, 0, 0, 0, 130, 392, 1, 0, 0, 0, 132, 394, 1, 0, 0, 0, 134, 397, 1, 0, 0, 0, 136, 404, 1, 0, 0, 0, 138, 410, 1, 0, 0, 0, 140, 415, 1, 0, 0, 0, 142, 419, 1, 0, 0, 0, 144, 429, 1, 0, 0, 0, 146, 433, 1, 0, 0, 0, 148, 437, 1, 0, 0, 0, 150, 441, 1, 0, 0, 0, 152, 445, 1, 0, 0, 0, 154, 157, 3, 4, 1, 0, 155, 157, 3, 6, 2, 0, 156, 154, 1, 0, 0, 0, 156, 155, 1, 0, 0, 0, 157, 3, 1, 0, 0, 0, 158, 159, 7, 0, 0, 0, 159, 5, 1, 0, 0, 0, 160, 161, 7, 1, 0, 0, 161, 7, 1, 0, 0, 0, 162, 163, 5, 47, 0, 0, 163, 164, 5, 42, 0, 0, 164, 168, 1, 0, 0, 0, 165, 167, 9, 0, 0, 0, 166, 165, 1, 0, 0, 0, 167, 170, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 169, 174, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 171, 172, 5, 42, 0, 0, 172, 175, 5, 47, 0, 0, 173, 175, 5, 0, 0, 1, 174, 171, 1, 0, 0, 0, 174, 173, 1, 0, 0, 0, 175, 9, 1, 0, 0, 0, 176, 177, 5, 92, 0, 0, 177, 11, 1, 0, 0, 0, 178, 179, 5, 39, 0, 0, 179, 13, 1, 0, 0, 0, 180, 181, 5, 34, 0, 0, 181, 15, 1, 0, 0, 0, 182, 183, 5, 95, 0, 0, 183, 17, 1, 0, 0, 0, 184, 185, 5, 44, 0, 0, 185, 19, 1, 0, 0, 0, 186, 187, 5, 59, 0, 0, 187, 21, 1, 0, 0, 0, 188, 189, 5, 124, 0, 0, 189, 23, 1, 0, 0, 0, 190, 191, 5, 46, 0, 0, 191, 25, 1, 0, 0, 0, 192, 193, 5, 40, 0, 0, 193, 27, 1, 0, 0, 0, 194, 195, 5, 41, 0, 0, 195, 29, 1, 0, 0, 0, 196, 197, 5, 91, 0, 0, 197, 31, 1, 0, 0, 0, 198, 199, 5, 93, 0, 0, 199, 33, 1, 0, 0, 0, 200, 201, 5, 42, 0, 0, 201, 35, 1, 0, 0, 0, 202, 203, 5, 47, 0, 0, 203, 37, 1, 0, 0, 0, 204, 205, 5, 37, 0, 0, 205, 39, 1, 0, 0, 0, 206, 207, 5, 43, 0, 0, 207, 41, 1, 0, 0, 0, 208, 209, 5, 45, 0, 0, 209, 43, 1, 0, 0, 0, 210, 211, 5, 63, 0, 0, 211, 212, 5, 63, 0, 0, 212, 45, 1, 0, 0, 0, 213, 214, 5, 60, 0, 0, 214, 47, 1, 0, 0, 0, 215, 216, 5, 62, 0, 0, 216, 49, 1, 0, 0, 0, 217, 218, 5, 100, 0, 0, 218, 219, 5, 101, 0, 0, 219, 220, 5, 102, 0, 0, 220, 221, 5, 97, 0, 0, 221, 222, 5, 117, 0, 0, 222, 223, 5, 108, 0, 0, 223, 224, 5, 116, 0, 0, 224, 51, 1, 0, 0, 0, 225, 229, 7, 2, 0, 0, 226, 229, 3, 16, 7, 0, 227, 229, 7, 3, 0, 0, 228, 225, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 227, 1, 0, 0, 0, 229, 53, 1, 0, 0, 0, 230, 235, 3, 10, 4, 0, 231, 236, 7, 4, 0, 0, 232, 236, 3, 56, 27, 0, 233, 236, 9, 0, 0, 0, 234, 236, 5, 0, 0, 1, 235, 231, 1, 0, 0, 0, 235, 232, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 55, 1, 0, 0, 0, 237, 248, 5, 117, 0, 0, 238, 246, 3, 64, 31, 0, 239, 244, 3, 64, 31, 0, 240, 242, 3, 64, 31, 0, 241, 243, 3, 64, 31, 0, 242, 241, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 245, 1, 0, 0, 0, 244, 240, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 247, 1, 0, 0, 0, 246, 239, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 249, 1, 0, 0, 0, 248, 238, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 57, 1, 0, 0, 0, 250, 255, 3, 12, 5, 0, 251, 254, 3, 54, 26, 0, 252, 254, 8, 5, 0, 0, 253, 251, 1, 0, 0, 0, 253, 252, 1, 0, 0, 0, 254, 257, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 255, 256, 1, 0, 0, 0, 256, 258, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 258, 259, 3, 12, 5, 0, 259, 59, 1, 0, 0, 0, 260, 265, 3, 14, 6, 0, 261, 264, 3, 54, 26, 0, 262, 264, 8, 6, 0, 0, 263, 261, 1, 0, 0, 0, 263, 262, 1, 0, 0, 0, 264, 267, 1, 0, 0, 0, 265, 263, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 268, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 268, 269, 3, 14, 6, 0, 269, 61, 1, 0, 0, 0, 270, 273, 3, 72, 35, 0, 271, 273, 3, 74, 36, 0, 272, 270, 1, 0, 0, 0, 272, 271, 1, 0, 0, 0, 273, 63, 1, 0, 0, 0, 274, 275, 7, 7, 0, 0, 275, 65, 1, 0, 0, 0, 276, 277, 7, 8, 0, 0, 277, 67, 1, 0, 0, 0, 278, 280, 3, 66, 32, 0, 279, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 69, 1, 0, 0, 0, 283, 284, 3, 68, 33, 0, 284, 286, 3, 24, 11, 0, 285, 287, 3, 68, 33, 0, 286, 285, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 71, 1, 0, 0, 0, 288, 289, 5, 116, 0, 0, 289, 290, 5, 114, 0, 0, 290, 291, 5, 117, 0, 0, 291, 292, 5, 101, 0, 0, 292, 73, 1, 0, 0, 0, 293, 294, 5, 102, 0, 0, 294, 295, 5, 97, 0, 0, 295, 296, 5, 108, 0, 0, 296, 297, 5, 115, 0, 0, 297, 298, 5, 101, 0, 0, 298, 75, 1, 0, 0, 0, 299, 303, 3, 22, 10, 0, 300, 302, 3, 4, 1, 0, 301, 300, 1, 0, 0, 0, 302, 305, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 306, 307, 3, 50, 24, 0, 307, 77, 1, 0, 0, 0, 308, 309, 3, 8, 3, 0, 309, 79, 1, 0, 0, 0, 310, 312, 3, 4, 1, 0, 311, 310, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 316, 6, 39, 0, 0, 316, 81, 1, 0, 0, 0, 317, 319, 3, 6, 2, 0, 318, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 323, 6, 40, 0, 0, 323, 83, 1, 0, 0, 0, 324, 325, 3, 130, 64, 0, 325, 326, 1, 0, 0, 0, 326, 327, 6, 41, 1, 0, 327, 85, 1, 0, 0, 0, 328, 329, 3, 132, 65, 0, 329, 330, 1, 0, 0, 0, 330, 331, 6, 42, 2, 0, 331, 87, 1, 0, 0, 0, 332, 333, 3, 24, 11, 0, 333, 89, 1, 0, 0, 0, 334, 335, 3, 26, 12, 0, 335, 91, 1, 0, 0, 0, 336, 337, 3, 28, 13, 0, 337, 93, 1, 0, 0, 0, 338, 339, 3, 30, 14, 0, 339, 95, 1, 0, 0, 0, 340, 341, 3, 32, 15, 0, 341, 97, 1, 0, 0, 0, 342, 343, 3, 44, 21, 0, 343, 99, 1, 0, 0, 0, 344, 345, 3, 20, 9, 0, 345, 101, 1, 0, 0, 0, 346, 347, 3, 18, 8, 0, 347, 103, 1, 0, 0, 0, 348, 349, 3, 34, 16, 0, 349, 105, 1, 0, 0, 0, 350, 351, 3, 36, 17, 0, 351, 107, 1, 0, 0, 0, 352, 353, 3, 38, 18, 0, 353, 109, 1, 0, 0, 0, 354, 355, 3, 40, 19, 0, 355, 111, 1, 0, 0, 0, 356, 357, 3, 42, 20, 0, 357, 113, 1, 0, 0, 0, 358, 359, 3, 60, 29, 0, 359, 115, 1, 0, 0, 0, 360, 361, 3, 58, 28, 0, 361, 117, 1, 0, 0, 0, 362, 363, 3, 68, 33, 0, 363, 119, 1, 0, 0, 0, 364, 365, 3, 70, 34, 0, 365, 121, 1, 0, 0, 0, 366, 367, 3, 62, 30, 0, 367, 123, 1, 0, 0, 0, 368, 373, 3, 52, 25, 0, 369, 372, 3, 52, 25, 0, 370, 372, 3, 66, 32, 0, 371, 369, 1, 0, 0, 0, 371, 370, 1, 0, 0, 0, 372, 375, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 125, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 376, 379, 3, 46, 22, 0, 377, 380, 3, 52, 25, 0, 378, 380, 3, 88, 43, 0, 379, 377, 1, 0, 0, 0, 379, 378, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 384, 1, 0, 0, 0, 383, 385, 3, 126, 62, 0, 384, 383, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 387, 3, 48, 23, 0, 387, 127, 1, 0, 0, 0, 388, 389, 3, 4, 1, 0, 389, 390, 1, 0, 0, 0, 390, 391, 6, 63, 0, 0, 391, 129, 1, 0, 0, 0, 392, 393, 5, 123, 0, 0, 393, 131, 1, 0, 0, 0, 394, 395, 5, 125, 0, 0, 395, 133, 1, 0, 0, 0, 396, 398, 3, 4, 1, 0, 397, 396, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 402, 6, 66, 0, 0, 402, 135, 1, 0, 0, 0, 403, 405, 3, 6, 2, 0, 404, 403, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 409, 6, 67, 0, 0, 409, 137, 1, 0, 0, 0, 410, 411, 3, 132, 65, 0, 411, 412, 1, 0, 0, 0, 412, 413, 6, 68, 2, 0, 413, 414, 6, 68, 3, 0, 414, 139, 1, 0, 0, 0, 415, 416, 3, 18, 8, 0, 416, 417, 1, 0, 0, 0, 417, 418, 6, 69, 4, 0, 418, 141, 1, 0, 0, 0, 419, 424, 3, 52, 25, 0, 420, 423, 3, 52, 25, 0, 421, 423, 3, 66, 32, 0, 422, 420, 1, 0, 0, 0, 422, 421, 1, 0, 0, 0, 423, 426, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 427, 1, 0, 0, 0, 426, 424, 1, 0, 0, 0, 427, 428, 6, 70, 5, 0, 428, 143, 1, 0, 0, 0, 429, 430, 3, 60, 29, 0, 430, 431, 1, 0, 0, 0, 431, 432, 6, 71, 6, 0, 432, 145, 1, 0, 0, 0, 433, 434, 3, 58, 28, 0, 434, 435, 1, 0, 0, 0, 435, 436, 6, 72, 7, 0, 436, 147, 1, 0, 0, 0, 437, 438, 3, 68, 33, 0, 438, 439, 1, 0, 0, 0, 439, 440, 6, 73, 8, 0, 440, 149, 1, 0, 0, 0, 441, 442, 3, 70, 34, 0, 442, 443, 1, 0, 0, 0, 443, 444, 6, 74, 9, 0, 444, 151, 1, 0, 0, 0, 445, 446, 7, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 448, 6, 75, 0, 0, 448, 153, 1, 0, 0, 0, 30, 0, 1, 156, 168, 174, 228, 235, 242, 244, 246, 248, 253, 255, 263, 265, 272, 281, 286, 303, 313, 320, 371, 373, 379, 381, 384, 399, 406, 422, 424, 10, 6, 0, 0, 5, 1, 0, 4, 0, 0, 7, 6, 0, 7, 14, 0, 7, 25, 0, 7, 20, 0, 7, 21, 0, 7, 22, 0, 7, 23, 0] \ No newline at end of file diff --git a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.java b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.java index 83936344a..3c9e48d72 100644 --- a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.java +++ b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.java @@ -19,11 +19,11 @@ public class TemplateLexerExpression extends Lexer { protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache(); public static final int - DEFAULT=1, BLOCK_COMMENT=2, HORZ_WS=3, VERT_WS=4, START_CONCATENATION=5, - DOT=6, LPAREN=7, RPAREN=8, LBRACK=9, RBRACK=10, DQUESTION=11, SEMI=12, - COMMA=13, PIPE=14, STAR=15, SLASH=16, PERCENT=17, PLUS=18, MINUS=19, DSTRING=20, + DEFAULT=1, BLOCK_COMMENT=2, HORZ_WS=3, VERT_WS=4, LBRACE=5, RBRACE=6, + DOT=7, LPAREN=8, RPAREN=9, LBRACK=10, RBRACK=11, DQUESTION=12, SEMI=13, + COMMA=14, STAR=15, SLASH=16, PERCENT=17, PLUS=18, MINUS=19, DSTRING=20, SSTRING=21, DECDIGITS=22, FLOAT=23, BOOLEAN=24, ID=25, CAST_TYPE=26, ERR_CHAR=27, - C_HORZ_WS=28, C_VERT_WS=29, CRBRACE=30, CERR_CHAR=31; + C_HORZ_WS=28, C_VERT_WS=29, CERR_CHAR=30; public static final int Concatenation=1; public static String[] channelNames = { @@ -39,15 +39,14 @@ private static String[] makeRuleNames() { "Ws", "Hws", "Vws", "BlockComment", "Esc", "SQuote", "DQuote", "Underscore", "Comma", "Semi", "Pipe", "Dot", "LParen", "RParen", "LBrack", "RBrack", "Star", "Slash", "Percent", "Plus", "Minus", "DQuestion", "LT", "GT", - "Default", "Concat", "NameChar", "EscSeq", "UnicodeEsc", "SQuoteLiteral", - "DQuoteLiteral", "BoolLiteral", "HexDigit", "DecDigit", "DecDigits", - "Float", "True", "False", "DEFAULT", "BLOCK_COMMENT", "HORZ_WS", "VERT_WS", - "START_CONCATENATION", "DOT", "LPAREN", "RPAREN", "LBRACK", "RBRACK", - "DQUESTION", "SEMI", "COMMA", "PIPE", "STAR", "SLASH", "PERCENT", "PLUS", - "MINUS", "DSTRING", "SSTRING", "DECDIGITS", "FLOAT", "BOOLEAN", "ID", - "CAST_TYPE", "ERR_CHAR", "LBrace", "RBrace", "C_HORZ_WS", "C_VERT_WS", - "CRBRACE", "CCOMMA", "CDOT", "CID", "CDSTRING", "CSSTRING", "CDECDIGITS", - "CFLOAT", "CERR_CHAR" + "Default", "NameChar", "EscSeq", "UnicodeEsc", "SQuoteLiteral", "DQuoteLiteral", + "BoolLiteral", "HexDigit", "DecDigit", "DecDigits", "Float", "True", + "False", "DEFAULT", "BLOCK_COMMENT", "HORZ_WS", "VERT_WS", "LBRACE", + "RBRACE", "DOT", "LPAREN", "RPAREN", "LBRACK", "RBRACK", "DQUESTION", + "SEMI", "COMMA", "STAR", "SLASH", "PERCENT", "PLUS", "MINUS", "DSTRING", + "SSTRING", "DECDIGITS", "FLOAT", "BOOLEAN", "ID", "CAST_TYPE", "ERR_CHAR", + "LBrace", "RBrace", "C_HORZ_WS", "C_VERT_WS", "CRBRACE", "CCOMMA", "CID", + "CDSTRING", "CSSTRING", "CDECDIGITS", "CFLOAT", "CERR_CHAR" }; } public static final String[] ruleNames = makeRuleNames(); @@ -59,11 +58,11 @@ private static String[] makeLiteralNames() { private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static String[] makeSymbolicNames() { return new String[] { - null, "DEFAULT", "BLOCK_COMMENT", "HORZ_WS", "VERT_WS", "START_CONCATENATION", + null, "DEFAULT", "BLOCK_COMMENT", "HORZ_WS", "VERT_WS", "LBRACE", "RBRACE", "DOT", "LPAREN", "RPAREN", "LBRACK", "RBRACK", "DQUESTION", "SEMI", "COMMA", - "PIPE", "STAR", "SLASH", "PERCENT", "PLUS", "MINUS", "DSTRING", "SSTRING", - "DECDIGITS", "FLOAT", "BOOLEAN", "ID", "CAST_TYPE", "ERR_CHAR", "C_HORZ_WS", - "C_VERT_WS", "CRBRACE", "CERR_CHAR" + "STAR", "SLASH", "PERCENT", "PLUS", "MINUS", "DSTRING", "SSTRING", "DECDIGITS", + "FLOAT", "BOOLEAN", "ID", "CAST_TYPE", "ERR_CHAR", "C_HORZ_WS", "C_VERT_WS", + "CERR_CHAR" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -125,7 +124,7 @@ public TemplateLexerExpression(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u0000\u001f\u01d4\u0006\uffff\uffff\u0006\uffff\uffff\u0002\u0000"+ + "\u0004\u0000\u001e\u01c1\u0006\uffff\uffff\u0006\uffff\uffff\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"+ @@ -144,277 +143,266 @@ public TemplateLexerExpression(CharStream input) { "9\u00079\u0002:\u0007:\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002"+ ">\u0007>\u0002?\u0007?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002"+ "C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002"+ - "H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002"+ - "M\u0007M\u0001\u0000\u0001\u0000\u0003\u0000\u00a1\b\u0000\u0001\u0001"+ - "\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003"+ - "\u0001\u0003\u0005\u0003\u00ab\b\u0003\n\u0003\f\u0003\u00ae\t\u0003\u0001"+ - "\u0003\u0001\u0003\u0001\u0003\u0003\u0003\u00b3\b\u0003\u0001\u0004\u0001"+ - "\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001"+ - "\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\u000b\u0001"+ - "\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000f"+ - "\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0012"+ - "\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0015"+ - "\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017"+ - "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+ - "\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ - "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ - "\u0003\u001a\u00f0\b\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+ - "\u0001\u001b\u0003\u001b\u00f7\b\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+ - "\u0001\u001c\u0001\u001c\u0003\u001c\u00fe\b\u001c\u0003\u001c\u0100\b"+ - "\u001c\u0003\u001c\u0102\b\u001c\u0003\u001c\u0104\b\u001c\u0001\u001d"+ - "\u0001\u001d\u0001\u001d\u0005\u001d\u0109\b\u001d\n\u001d\f\u001d\u010c"+ - "\t\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0005"+ - "\u001e\u0113\b\u001e\n\u001e\f\u001e\u0116\t\u001e\u0001\u001e\u0001\u001e"+ - "\u0001\u001f\u0001\u001f\u0003\u001f\u011c\b\u001f\u0001 \u0001 \u0001"+ - "!\u0001!\u0001\"\u0004\"\u0123\b\"\u000b\"\f\"\u0124\u0001#\u0001#\u0001"+ - "#\u0003#\u012a\b#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001%\u0001%\u0001"+ - "%\u0001%\u0001%\u0001%\u0001&\u0001&\u0005&\u0139\b&\n&\f&\u013c\t&\u0001"+ - "&\u0001&\u0001\'\u0001\'\u0001(\u0004(\u0143\b(\u000b(\f(\u0144\u0001"+ - "(\u0001(\u0001)\u0004)\u014a\b)\u000b)\f)\u014b\u0001)\u0001)\u0001*\u0001"+ - "*\u0005*\u0152\b*\n*\f*\u0155\t*\u0001*\u0001*\u0001*\u0001*\u0001+\u0001"+ - "+\u0001,\u0001,\u0001-\u0001-\u0001.\u0001.\u0001/\u0001/\u00010\u0001"+ - "0\u00011\u00011\u00012\u00012\u00013\u00013\u00014\u00014\u00015\u0001"+ - "5\u00016\u00016\u00017\u00017\u00018\u00018\u00019\u00019\u0001:\u0001"+ - ":\u0001;\u0001;\u0001<\u0001<\u0001=\u0001=\u0001>\u0001>\u0001>\u0005"+ - ">\u0184\b>\n>\f>\u0187\t>\u0001?\u0001?\u0001?\u0004?\u018c\b?\u000b?"+ - "\f?\u018d\u0001?\u0003?\u0191\b?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001"+ - "@\u0001A\u0001A\u0001B\u0001B\u0001C\u0004C\u019e\bC\u000bC\fC\u019f\u0001"+ - "C\u0001C\u0001D\u0004D\u01a5\bD\u000bD\fD\u01a6\u0001D\u0001D\u0001E\u0001"+ - "E\u0001E\u0001E\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001"+ - "G\u0001H\u0001H\u0001H\u0005H\u01ba\bH\nH\fH\u01bd\tH\u0001H\u0001H\u0001"+ - "I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001"+ - "K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001"+ - "\u00ac\u0000N\u0002\u0000\u0004\u0000\u0006\u0000\b\u0000\n\u0000\f\u0000"+ + "H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002K\u0007K\u0001\u0000\u0001\u0000"+ + "\u0003\u0000\u009d\b\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0005\u0003\u00a7\b\u0003"+ + "\n\u0003\f\u0003\u00aa\t\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0003"+ + "\u0003\u00af\b\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001"+ + "\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\t\u0001"+ + "\t\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001"+ + "\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+ + "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016"+ + "\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0003\u0019\u00e5\b\u0019\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0003\u001a\u00ec\b\u001a\u0001\u001b"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u00f3\b\u001b"+ + "\u0003\u001b\u00f5\b\u001b\u0003\u001b\u00f7\b\u001b\u0003\u001b\u00f9"+ + "\b\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0005\u001c\u00fe\b\u001c"+ + "\n\u001c\f\u001c\u0101\t\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+ + "\u001d\u0001\u001d\u0005\u001d\u0108\b\u001d\n\u001d\f\u001d\u010b\t\u001d"+ + "\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0003\u001e\u0111\b\u001e"+ + "\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0004!\u0118\b!\u000b!\f"+ + "!\u0119\u0001\"\u0001\"\u0001\"\u0003\"\u011f\b\"\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001%\u0001"+ + "%\u0005%\u012e\b%\n%\f%\u0131\t%\u0001%\u0001%\u0001&\u0001&\u0001\'\u0004"+ + "\'\u0138\b\'\u000b\'\f\'\u0139\u0001\'\u0001\'\u0001(\u0004(\u013f\b("+ + "\u000b(\f(\u0140\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001*\u0001"+ + "*\u0001*\u0001*\u0001+\u0001+\u0001,\u0001,\u0001-\u0001-\u0001.\u0001"+ + ".\u0001/\u0001/\u00010\u00010\u00011\u00011\u00012\u00012\u00013\u0001"+ + "3\u00014\u00014\u00015\u00015\u00016\u00016\u00017\u00017\u00018\u0001"+ + "8\u00019\u00019\u0001:\u0001:\u0001;\u0001;\u0001<\u0001<\u0001=\u0001"+ + "=\u0001=\u0005=\u0174\b=\n=\f=\u0177\t=\u0001>\u0001>\u0001>\u0004>\u017c"+ + "\b>\u000b>\f>\u017d\u0001>\u0003>\u0181\b>\u0001>\u0001>\u0001?\u0001"+ + "?\u0001?\u0001?\u0001@\u0001@\u0001A\u0001A\u0001B\u0004B\u018e\bB\u000b"+ + "B\fB\u018f\u0001B\u0001B\u0001C\u0004C\u0195\bC\u000bC\fC\u0196\u0001"+ + "C\u0001C\u0001D\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001"+ + "E\u0001F\u0001F\u0001F\u0005F\u01a7\bF\nF\fF\u01aa\tF\u0001F\u0001F\u0001"+ + "G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001"+ + "I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001"+ + "\u00a8\u0000L\u0002\u0000\u0004\u0000\u0006\u0000\b\u0000\n\u0000\f\u0000"+ "\u000e\u0000\u0010\u0000\u0012\u0000\u0014\u0000\u0016\u0000\u0018\u0000"+ "\u001a\u0000\u001c\u0000\u001e\u0000 \u0000\"\u0000$\u0000&\u0000(\u0000"+ "*\u0000,\u0000.\u00000\u00002\u00004\u00006\u00008\u0000:\u0000<\u0000"+ - ">\u0000@\u0000B\u0000D\u0000F\u0000H\u0000J\u0000L\u0000N\u0001P\u0002"+ - "R\u0003T\u0004V\u0005X\u0006Z\u0007\\\b^\t`\nb\u000bd\ff\rh\u000ej\u000f"+ - "l\u0010n\u0011p\u0012r\u0013t\u0014v\u0015x\u0016z\u0017|\u0018~\u0019"+ - "\u0080\u001a\u0082\u001b\u0084\u0000\u0086\u0000\u0088\u001c\u008a\u001d"+ - "\u008c\u001e\u008e\u0000\u0090\u0000\u0092\u0000\u0094\u0000\u0096\u0000"+ - "\u0098\u0000\u009a\u0000\u009c\u001f\u0002\u0000\u0001\t\u0002\u0000\t"+ - "\t \u0002\u0000\n\n\f\r\r\u0000AZaz\u00c0\u00d6\u00d8\u00f6\u00f8\u02ff"+ - "\u0370\u037d\u037f\u1fff\u200c\u200d\u2070\u218f\u2c00\u2fef\u3001\u8000"+ - "\ud7ff\u8000\uf900\u8000\ufdcf\u8000\ufdf0\u8000\ufffd\u0003\u0000\u00b7"+ - "\u00b7\u0300\u036f\u203f\u2040\b\u0000\"\"\'\'\\\\bbffnnrrtt\u0004\u0000"+ - "\n\n\r\r\'\'\\\\\u0004\u0000\n\n\r\r\"\"\\\\\u0003\u000009AFaf\u0001\u0000"+ - "09\u01ca\u0000N\u0001\u0000\u0000\u0000\u0000P\u0001\u0000\u0000\u0000"+ - "\u0000R\u0001\u0000\u0000\u0000\u0000T\u0001\u0000\u0000\u0000\u0000V"+ - "\u0001\u0000\u0000\u0000\u0000X\u0001\u0000\u0000\u0000\u0000Z\u0001\u0000"+ - "\u0000\u0000\u0000\\\u0001\u0000\u0000\u0000\u0000^\u0001\u0000\u0000"+ - "\u0000\u0000`\u0001\u0000\u0000\u0000\u0000b\u0001\u0000\u0000\u0000\u0000"+ - "d\u0001\u0000\u0000\u0000\u0000f\u0001\u0000\u0000\u0000\u0000h\u0001"+ - "\u0000\u0000\u0000\u0000j\u0001\u0000\u0000\u0000\u0000l\u0001\u0000\u0000"+ - "\u0000\u0000n\u0001\u0000\u0000\u0000\u0000p\u0001\u0000\u0000\u0000\u0000"+ - "r\u0001\u0000\u0000\u0000\u0000t\u0001\u0000\u0000\u0000\u0000v\u0001"+ - "\u0000\u0000\u0000\u0000x\u0001\u0000\u0000\u0000\u0000z\u0001\u0000\u0000"+ - "\u0000\u0000|\u0001\u0000\u0000\u0000\u0000~\u0001\u0000\u0000\u0000\u0000"+ - "\u0080\u0001\u0000\u0000\u0000\u0000\u0082\u0001\u0000\u0000\u0000\u0001"+ - "\u0088\u0001\u0000\u0000\u0000\u0001\u008a\u0001\u0000\u0000\u0000\u0001"+ - "\u008c\u0001\u0000\u0000\u0000\u0001\u008e\u0001\u0000\u0000\u0000\u0001"+ - "\u0090\u0001\u0000\u0000\u0000\u0001\u0092\u0001\u0000\u0000\u0000\u0001"+ - "\u0094\u0001\u0000\u0000\u0000\u0001\u0096\u0001\u0000\u0000\u0000\u0001"+ - "\u0098\u0001\u0000\u0000\u0000\u0001\u009a\u0001\u0000\u0000\u0000\u0001"+ - "\u009c\u0001\u0000\u0000\u0000\u0002\u00a0\u0001\u0000\u0000\u0000\u0004"+ - "\u00a2\u0001\u0000\u0000\u0000\u0006\u00a4\u0001\u0000\u0000\u0000\b\u00a6"+ - "\u0001\u0000\u0000\u0000\n\u00b4\u0001\u0000\u0000\u0000\f\u00b6\u0001"+ - "\u0000\u0000\u0000\u000e\u00b8\u0001\u0000\u0000\u0000\u0010\u00ba\u0001"+ - "\u0000\u0000\u0000\u0012\u00bc\u0001\u0000\u0000\u0000\u0014\u00be\u0001"+ - "\u0000\u0000\u0000\u0016\u00c0\u0001\u0000\u0000\u0000\u0018\u00c2\u0001"+ - "\u0000\u0000\u0000\u001a\u00c4\u0001\u0000\u0000\u0000\u001c\u00c6\u0001"+ - "\u0000\u0000\u0000\u001e\u00c8\u0001\u0000\u0000\u0000 \u00ca\u0001\u0000"+ - "\u0000\u0000\"\u00cc\u0001\u0000\u0000\u0000$\u00ce\u0001\u0000\u0000"+ - "\u0000&\u00d0\u0001\u0000\u0000\u0000(\u00d2\u0001\u0000\u0000\u0000*"+ - "\u00d4\u0001\u0000\u0000\u0000,\u00d6\u0001\u0000\u0000\u0000.\u00d9\u0001"+ - "\u0000\u0000\u00000\u00db\u0001\u0000\u0000\u00002\u00dd\u0001\u0000\u0000"+ - "\u00004\u00e5\u0001\u0000\u0000\u00006\u00ef\u0001\u0000\u0000\u00008"+ - "\u00f1\u0001\u0000\u0000\u0000:\u00f8\u0001\u0000\u0000\u0000<\u0105\u0001"+ - "\u0000\u0000\u0000>\u010f\u0001\u0000\u0000\u0000@\u011b\u0001\u0000\u0000"+ - "\u0000B\u011d\u0001\u0000\u0000\u0000D\u011f\u0001\u0000\u0000\u0000F"+ - "\u0122\u0001\u0000\u0000\u0000H\u0126\u0001\u0000\u0000\u0000J\u012b\u0001"+ - "\u0000\u0000\u0000L\u0130\u0001\u0000\u0000\u0000N\u0136\u0001\u0000\u0000"+ - "\u0000P\u013f\u0001\u0000\u0000\u0000R\u0142\u0001\u0000\u0000\u0000T"+ - "\u0149\u0001\u0000\u0000\u0000V\u014f\u0001\u0000\u0000\u0000X\u015a\u0001"+ - "\u0000\u0000\u0000Z\u015c\u0001\u0000\u0000\u0000\\\u015e\u0001\u0000"+ - "\u0000\u0000^\u0160\u0001\u0000\u0000\u0000`\u0162\u0001\u0000\u0000\u0000"+ - "b\u0164\u0001\u0000\u0000\u0000d\u0166\u0001\u0000\u0000\u0000f\u0168"+ - "\u0001\u0000\u0000\u0000h\u016a\u0001\u0000\u0000\u0000j\u016c\u0001\u0000"+ - "\u0000\u0000l\u016e\u0001\u0000\u0000\u0000n\u0170\u0001\u0000\u0000\u0000"+ - "p\u0172\u0001\u0000\u0000\u0000r\u0174\u0001\u0000\u0000\u0000t\u0176"+ - "\u0001\u0000\u0000\u0000v\u0178\u0001\u0000\u0000\u0000x\u017a\u0001\u0000"+ - "\u0000\u0000z\u017c\u0001\u0000\u0000\u0000|\u017e\u0001\u0000\u0000\u0000"+ - "~\u0180\u0001\u0000\u0000\u0000\u0080\u0188\u0001\u0000\u0000\u0000\u0082"+ - "\u0194\u0001\u0000\u0000\u0000\u0084\u0198\u0001\u0000\u0000\u0000\u0086"+ - "\u019a\u0001\u0000\u0000\u0000\u0088\u019d\u0001\u0000\u0000\u0000\u008a"+ - "\u01a4\u0001\u0000\u0000\u0000\u008c\u01aa\u0001\u0000\u0000\u0000\u008e"+ - "\u01ae\u0001\u0000\u0000\u0000\u0090\u01b2\u0001\u0000\u0000\u0000\u0092"+ - "\u01b6\u0001\u0000\u0000\u0000\u0094\u01c0\u0001\u0000\u0000\u0000\u0096"+ - "\u01c4\u0001\u0000\u0000\u0000\u0098\u01c8\u0001\u0000\u0000\u0000\u009a"+ - "\u01cc\u0001\u0000\u0000\u0000\u009c\u01d0\u0001\u0000\u0000\u0000\u009e"+ - "\u00a1\u0003\u0004\u0001\u0000\u009f\u00a1\u0003\u0006\u0002\u0000\u00a0"+ - "\u009e\u0001\u0000\u0000\u0000\u00a0\u009f\u0001\u0000\u0000\u0000\u00a1"+ - "\u0003\u0001\u0000\u0000\u0000\u00a2\u00a3\u0007\u0000\u0000\u0000\u00a3"+ - "\u0005\u0001\u0000\u0000\u0000\u00a4\u00a5\u0007\u0001\u0000\u0000\u00a5"+ - "\u0007\u0001\u0000\u0000\u0000\u00a6\u00a7\u0005/\u0000\u0000\u00a7\u00a8"+ - "\u0005*\u0000\u0000\u00a8\u00ac\u0001\u0000\u0000\u0000\u00a9\u00ab\t"+ - "\u0000\u0000\u0000\u00aa\u00a9\u0001\u0000\u0000\u0000\u00ab\u00ae\u0001"+ - "\u0000\u0000\u0000\u00ac\u00ad\u0001\u0000\u0000\u0000\u00ac\u00aa\u0001"+ - "\u0000\u0000\u0000\u00ad\u00b2\u0001\u0000\u0000\u0000\u00ae\u00ac\u0001"+ - "\u0000\u0000\u0000\u00af\u00b0\u0005*\u0000\u0000\u00b0\u00b3\u0005/\u0000"+ - "\u0000\u00b1\u00b3\u0005\u0000\u0000\u0001\u00b2\u00af\u0001\u0000\u0000"+ - "\u0000\u00b2\u00b1\u0001\u0000\u0000\u0000\u00b3\t\u0001\u0000\u0000\u0000"+ - "\u00b4\u00b5\u0005\\\u0000\u0000\u00b5\u000b\u0001\u0000\u0000\u0000\u00b6"+ - "\u00b7\u0005\'\u0000\u0000\u00b7\r\u0001\u0000\u0000\u0000\u00b8\u00b9"+ - "\u0005\"\u0000\u0000\u00b9\u000f\u0001\u0000\u0000\u0000\u00ba\u00bb\u0005"+ - "_\u0000\u0000\u00bb\u0011\u0001\u0000\u0000\u0000\u00bc\u00bd\u0005,\u0000"+ - "\u0000\u00bd\u0013\u0001\u0000\u0000\u0000\u00be\u00bf\u0005;\u0000\u0000"+ - "\u00bf\u0015\u0001\u0000\u0000\u0000\u00c0\u00c1\u0005|\u0000\u0000\u00c1"+ - "\u0017\u0001\u0000\u0000\u0000\u00c2\u00c3\u0005.\u0000\u0000\u00c3\u0019"+ - "\u0001\u0000\u0000\u0000\u00c4\u00c5\u0005(\u0000\u0000\u00c5\u001b\u0001"+ - "\u0000\u0000\u0000\u00c6\u00c7\u0005)\u0000\u0000\u00c7\u001d\u0001\u0000"+ - "\u0000\u0000\u00c8\u00c9\u0005[\u0000\u0000\u00c9\u001f\u0001\u0000\u0000"+ - "\u0000\u00ca\u00cb\u0005]\u0000\u0000\u00cb!\u0001\u0000\u0000\u0000\u00cc"+ - "\u00cd\u0005*\u0000\u0000\u00cd#\u0001\u0000\u0000\u0000\u00ce\u00cf\u0005"+ - "/\u0000\u0000\u00cf%\u0001\u0000\u0000\u0000\u00d0\u00d1\u0005%\u0000"+ - "\u0000\u00d1\'\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005+\u0000\u0000"+ - "\u00d3)\u0001\u0000\u0000\u0000\u00d4\u00d5\u0005-\u0000\u0000\u00d5+"+ - "\u0001\u0000\u0000\u0000\u00d6\u00d7\u0005?\u0000\u0000\u00d7\u00d8\u0005"+ - "?\u0000\u0000\u00d8-\u0001\u0000\u0000\u0000\u00d9\u00da\u0005<\u0000"+ - "\u0000\u00da/\u0001\u0000\u0000\u0000\u00db\u00dc\u0005>\u0000\u0000\u00dc"+ - "1\u0001\u0000\u0000\u0000\u00dd\u00de\u0005d\u0000\u0000\u00de\u00df\u0005"+ - "e\u0000\u0000\u00df\u00e0\u0005f\u0000\u0000\u00e0\u00e1\u0005a\u0000"+ - "\u0000\u00e1\u00e2\u0005u\u0000\u0000\u00e2\u00e3\u0005l\u0000\u0000\u00e3"+ - "\u00e4\u0005t\u0000\u0000\u00e43\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005"+ - "c\u0000\u0000\u00e6\u00e7\u0005o\u0000\u0000\u00e7\u00e8\u0005n\u0000"+ - "\u0000\u00e8\u00e9\u0005c\u0000\u0000\u00e9\u00ea\u0005a\u0000\u0000\u00ea"+ - "\u00eb\u0005t\u0000\u0000\u00eb5\u0001\u0000\u0000\u0000\u00ec\u00f0\u0007"+ - "\u0002\u0000\u0000\u00ed\u00f0\u0003\u0010\u0007\u0000\u00ee\u00f0\u0007"+ - "\u0003\u0000\u0000\u00ef\u00ec\u0001\u0000\u0000\u0000\u00ef\u00ed\u0001"+ - "\u0000\u0000\u0000\u00ef\u00ee\u0001\u0000\u0000\u0000\u00f07\u0001\u0000"+ - "\u0000\u0000\u00f1\u00f6\u0003\n\u0004\u0000\u00f2\u00f7\u0007\u0004\u0000"+ - "\u0000\u00f3\u00f7\u0003:\u001c\u0000\u00f4\u00f7\t\u0000\u0000\u0000"+ - "\u00f5\u00f7\u0005\u0000\u0000\u0001\u00f6\u00f2\u0001\u0000\u0000\u0000"+ - "\u00f6\u00f3\u0001\u0000\u0000\u0000\u00f6\u00f4\u0001\u0000\u0000\u0000"+ - "\u00f6\u00f5\u0001\u0000\u0000\u0000\u00f79\u0001\u0000\u0000\u0000\u00f8"+ - "\u0103\u0005u\u0000\u0000\u00f9\u0101\u0003B \u0000\u00fa\u00ff\u0003"+ - "B \u0000\u00fb\u00fd\u0003B \u0000\u00fc\u00fe\u0003B \u0000\u00fd\u00fc"+ - "\u0001\u0000\u0000\u0000\u00fd\u00fe\u0001\u0000\u0000\u0000\u00fe\u0100"+ - "\u0001\u0000\u0000\u0000\u00ff\u00fb\u0001\u0000\u0000\u0000\u00ff\u0100"+ - "\u0001\u0000\u0000\u0000\u0100\u0102\u0001\u0000\u0000\u0000\u0101\u00fa"+ - "\u0001\u0000\u0000\u0000\u0101\u0102\u0001\u0000\u0000\u0000\u0102\u0104"+ - "\u0001\u0000\u0000\u0000\u0103\u00f9\u0001\u0000\u0000\u0000\u0103\u0104"+ - "\u0001\u0000\u0000\u0000\u0104;\u0001\u0000\u0000\u0000\u0105\u010a\u0003"+ - "\f\u0005\u0000\u0106\u0109\u00038\u001b\u0000\u0107\u0109\b\u0005\u0000"+ - "\u0000\u0108\u0106\u0001\u0000\u0000\u0000\u0108\u0107\u0001\u0000\u0000"+ - "\u0000\u0109\u010c\u0001\u0000\u0000\u0000\u010a\u0108\u0001\u0000\u0000"+ - "\u0000\u010a\u010b\u0001\u0000\u0000\u0000\u010b\u010d\u0001\u0000\u0000"+ - "\u0000\u010c\u010a\u0001\u0000\u0000\u0000\u010d\u010e\u0003\f\u0005\u0000"+ - "\u010e=\u0001\u0000\u0000\u0000\u010f\u0114\u0003\u000e\u0006\u0000\u0110"+ - "\u0113\u00038\u001b\u0000\u0111\u0113\b\u0006\u0000\u0000\u0112\u0110"+ - "\u0001\u0000\u0000\u0000\u0112\u0111\u0001\u0000\u0000\u0000\u0113\u0116"+ - "\u0001\u0000\u0000\u0000\u0114\u0112\u0001\u0000\u0000\u0000\u0114\u0115"+ - "\u0001\u0000\u0000\u0000\u0115\u0117\u0001\u0000\u0000\u0000\u0116\u0114"+ - "\u0001\u0000\u0000\u0000\u0117\u0118\u0003\u000e\u0006\u0000\u0118?\u0001"+ - "\u0000\u0000\u0000\u0119\u011c\u0003J$\u0000\u011a\u011c\u0003L%\u0000"+ - "\u011b\u0119\u0001\u0000\u0000\u0000\u011b\u011a\u0001\u0000\u0000\u0000"+ - "\u011cA\u0001\u0000\u0000\u0000\u011d\u011e\u0007\u0007\u0000\u0000\u011e"+ - "C\u0001\u0000\u0000\u0000\u011f\u0120\u0007\b\u0000\u0000\u0120E\u0001"+ - "\u0000\u0000\u0000\u0121\u0123\u0003D!\u0000\u0122\u0121\u0001\u0000\u0000"+ - "\u0000\u0123\u0124\u0001\u0000\u0000\u0000\u0124\u0122\u0001\u0000\u0000"+ - "\u0000\u0124\u0125\u0001\u0000\u0000\u0000\u0125G\u0001\u0000\u0000\u0000"+ - "\u0126\u0127\u0003F\"\u0000\u0127\u0129\u0003\u0018\u000b\u0000\u0128"+ - "\u012a\u0003F\"\u0000\u0129\u0128\u0001\u0000\u0000\u0000\u0129\u012a"+ - "\u0001\u0000\u0000\u0000\u012aI\u0001\u0000\u0000\u0000\u012b\u012c\u0005"+ - "t\u0000\u0000\u012c\u012d\u0005r\u0000\u0000\u012d\u012e\u0005u\u0000"+ - "\u0000\u012e\u012f\u0005e\u0000\u0000\u012fK\u0001\u0000\u0000\u0000\u0130"+ - "\u0131\u0005f\u0000\u0000\u0131\u0132\u0005a\u0000\u0000\u0132\u0133\u0005"+ - "l\u0000\u0000\u0133\u0134\u0005s\u0000\u0000\u0134\u0135\u0005e\u0000"+ - "\u0000\u0135M\u0001\u0000\u0000\u0000\u0136\u013a\u0003\u0016\n\u0000"+ - "\u0137\u0139\u0003\u0004\u0001\u0000\u0138\u0137\u0001\u0000\u0000\u0000"+ - "\u0139\u013c\u0001\u0000\u0000\u0000\u013a\u0138\u0001\u0000\u0000\u0000"+ - "\u013a\u013b\u0001\u0000\u0000\u0000\u013b\u013d\u0001\u0000\u0000\u0000"+ - "\u013c\u013a\u0001\u0000\u0000\u0000\u013d\u013e\u00032\u0018\u0000\u013e"+ - "O\u0001\u0000\u0000\u0000\u013f\u0140\u0003\b\u0003\u0000\u0140Q\u0001"+ - "\u0000\u0000\u0000\u0141\u0143\u0003\u0004\u0001\u0000\u0142\u0141\u0001"+ - "\u0000\u0000\u0000\u0143\u0144\u0001\u0000\u0000\u0000\u0144\u0142\u0001"+ - "\u0000\u0000\u0000\u0144\u0145\u0001\u0000\u0000\u0000\u0145\u0146\u0001"+ - "\u0000\u0000\u0000\u0146\u0147\u0006(\u0000\u0000\u0147S\u0001\u0000\u0000"+ - "\u0000\u0148\u014a\u0003\u0006\u0002\u0000\u0149\u0148\u0001\u0000\u0000"+ - "\u0000\u014a\u014b\u0001\u0000\u0000\u0000\u014b\u0149\u0001\u0000\u0000"+ - "\u0000\u014b\u014c\u0001\u0000\u0000\u0000\u014c\u014d\u0001\u0000\u0000"+ - "\u0000\u014d\u014e\u0006)\u0000\u0000\u014eU\u0001\u0000\u0000\u0000\u014f"+ - "\u0153\u00034\u0019\u0000\u0150\u0152\u0003\u0004\u0001\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\u0157"+ - "\u0003\u001a\f\u0000\u0157\u0158\u0001\u0000\u0000\u0000\u0158\u0159\u0006"+ - "*\u0001\u0000\u0159W\u0001\u0000\u0000\u0000\u015a\u015b\u0003\u0018\u000b"+ - "\u0000\u015bY\u0001\u0000\u0000\u0000\u015c\u015d\u0003\u001a\f\u0000"+ - "\u015d[\u0001\u0000\u0000\u0000\u015e\u015f\u0003\u001c\r\u0000\u015f"+ - "]\u0001\u0000\u0000\u0000\u0160\u0161\u0003\u001e\u000e\u0000\u0161_\u0001"+ - "\u0000\u0000\u0000\u0162\u0163\u0003 \u000f\u0000\u0163a\u0001\u0000\u0000"+ - "\u0000\u0164\u0165\u0003,\u0015\u0000\u0165c\u0001\u0000\u0000\u0000\u0166"+ - "\u0167\u0003\u0014\t\u0000\u0167e\u0001\u0000\u0000\u0000\u0168\u0169"+ - "\u0003\u0012\b\u0000\u0169g\u0001\u0000\u0000\u0000\u016a\u016b\u0003"+ - "\u0016\n\u0000\u016bi\u0001\u0000\u0000\u0000\u016c\u016d\u0003\"\u0010"+ - "\u0000\u016dk\u0001\u0000\u0000\u0000\u016e\u016f\u0003$\u0011\u0000\u016f"+ - "m\u0001\u0000\u0000\u0000\u0170\u0171\u0003&\u0012\u0000\u0171o\u0001"+ - "\u0000\u0000\u0000\u0172\u0173\u0003(\u0013\u0000\u0173q\u0001\u0000\u0000"+ - "\u0000\u0174\u0175\u0003*\u0014\u0000\u0175s\u0001\u0000\u0000\u0000\u0176"+ - "\u0177\u0003>\u001e\u0000\u0177u\u0001\u0000\u0000\u0000\u0178\u0179\u0003"+ - "<\u001d\u0000\u0179w\u0001\u0000\u0000\u0000\u017a\u017b\u0003F\"\u0000"+ - "\u017by\u0001\u0000\u0000\u0000\u017c\u017d\u0003H#\u0000\u017d{\u0001"+ - "\u0000\u0000\u0000\u017e\u017f\u0003@\u001f\u0000\u017f}\u0001\u0000\u0000"+ - "\u0000\u0180\u0185\u00036\u001a\u0000\u0181\u0184\u00036\u001a\u0000\u0182"+ - "\u0184\u0003D!\u0000\u0183\u0181\u0001\u0000\u0000\u0000\u0183\u0182\u0001"+ - "\u0000\u0000\u0000\u0184\u0187\u0001\u0000\u0000\u0000\u0185\u0183\u0001"+ - "\u0000\u0000\u0000\u0185\u0186\u0001\u0000\u0000\u0000\u0186\u007f\u0001"+ - "\u0000\u0000\u0000\u0187\u0185\u0001\u0000\u0000\u0000\u0188\u018b\u0003"+ - ".\u0016\u0000\u0189\u018c\u00036\u001a\u0000\u018a\u018c\u0003X+\u0000"+ - "\u018b\u0189\u0001\u0000\u0000\u0000\u018b\u018a\u0001\u0000\u0000\u0000"+ - "\u018c\u018d\u0001\u0000\u0000\u0000\u018d\u018b\u0001\u0000\u0000\u0000"+ - "\u018d\u018e\u0001\u0000\u0000\u0000\u018e\u0190\u0001\u0000\u0000\u0000"+ - "\u018f\u0191\u0003\u0080?\u0000\u0190\u018f\u0001\u0000\u0000\u0000\u0190"+ - "\u0191\u0001\u0000\u0000\u0000\u0191\u0192\u0001\u0000\u0000\u0000\u0192"+ - "\u0193\u00030\u0017\u0000\u0193\u0081\u0001\u0000\u0000\u0000\u0194\u0195"+ - "\u0003\u0004\u0001\u0000\u0195\u0196\u0001\u0000\u0000\u0000\u0196\u0197"+ - "\u0006@\u0000\u0000\u0197\u0083\u0001\u0000\u0000\u0000\u0198\u0199\u0005"+ - "{\u0000\u0000\u0199\u0085\u0001\u0000\u0000\u0000\u019a\u019b\u0005}\u0000"+ - "\u0000\u019b\u0087\u0001\u0000\u0000\u0000\u019c\u019e\u0003\u0004\u0001"+ - "\u0000\u019d\u019c\u0001\u0000\u0000\u0000\u019e\u019f\u0001\u0000\u0000"+ - "\u0000\u019f\u019d\u0001\u0000\u0000\u0000\u019f\u01a0\u0001\u0000\u0000"+ - "\u0000\u01a0\u01a1\u0001\u0000\u0000\u0000\u01a1\u01a2\u0006C\u0000\u0000"+ - "\u01a2\u0089\u0001\u0000\u0000\u0000\u01a3\u01a5\u0003\u0006\u0002\u0000"+ - "\u01a4\u01a3\u0001\u0000\u0000\u0000\u01a5\u01a6\u0001\u0000\u0000\u0000"+ - "\u01a6\u01a4\u0001\u0000\u0000\u0000\u01a6\u01a7\u0001\u0000\u0000\u0000"+ - "\u01a7\u01a8\u0001\u0000\u0000\u0000\u01a8\u01a9\u0006D\u0000\u0000\u01a9"+ - "\u008b\u0001\u0000\u0000\u0000\u01aa\u01ab\u0003\u001c\r\u0000\u01ab\u01ac"+ - "\u0001\u0000\u0000\u0000\u01ac\u01ad\u0006E\u0002\u0000\u01ad\u008d\u0001"+ - "\u0000\u0000\u0000\u01ae\u01af\u0003\u0012\b\u0000\u01af\u01b0\u0001\u0000"+ - "\u0000\u0000\u01b0\u01b1\u0006F\u0003\u0000\u01b1\u008f\u0001\u0000\u0000"+ - "\u0000\u01b2\u01b3\u0003\u0018\u000b\u0000\u01b3\u01b4\u0001\u0000\u0000"+ - "\u0000\u01b4\u01b5\u0006G\u0004\u0000\u01b5\u0091\u0001\u0000\u0000\u0000"+ - "\u01b6\u01bb\u00036\u001a\u0000\u01b7\u01ba\u00036\u001a\u0000\u01b8\u01ba"+ - "\u0003D!\u0000\u01b9\u01b7\u0001\u0000\u0000\u0000\u01b9\u01b8\u0001\u0000"+ - "\u0000\u0000\u01ba\u01bd\u0001\u0000\u0000\u0000\u01bb\u01b9\u0001\u0000"+ - "\u0000\u0000\u01bb\u01bc\u0001\u0000\u0000\u0000\u01bc\u01be\u0001\u0000"+ - "\u0000\u0000\u01bd\u01bb\u0001\u0000\u0000\u0000\u01be\u01bf\u0006H\u0005"+ - "\u0000\u01bf\u0093\u0001\u0000\u0000\u0000\u01c0\u01c1\u0003>\u001e\u0000"+ - "\u01c1\u01c2\u0001\u0000\u0000\u0000\u01c2\u01c3\u0006I\u0006\u0000\u01c3"+ - "\u0095\u0001\u0000\u0000\u0000\u01c4\u01c5\u0003<\u001d\u0000\u01c5\u01c6"+ - "\u0001\u0000\u0000\u0000\u01c6\u01c7\u0006J\u0007\u0000\u01c7\u0097\u0001"+ - "\u0000\u0000\u0000\u01c8\u01c9\u0003F\"\u0000\u01c9\u01ca\u0001\u0000"+ - "\u0000\u0000\u01ca\u01cb\u0006K\b\u0000\u01cb\u0099\u0001\u0000\u0000"+ - "\u0000\u01cc\u01cd\u0003H#\u0000\u01cd\u01ce\u0001\u0000\u0000\u0000\u01ce"+ - "\u01cf\u0006L\t\u0000\u01cf\u009b\u0001\u0000\u0000\u0000\u01d0\u01d1"+ - "\u0007\u0000\u0000\u0000\u01d1\u01d2\u0001\u0000\u0000\u0000\u01d2\u01d3"+ - "\u0006M\u0000\u0000\u01d3\u009d\u0001\u0000\u0000\u0000\u001f\u0000\u0001"+ - "\u00a0\u00ac\u00b2\u00ef\u00f6\u00fd\u00ff\u0101\u0103\u0108\u010a\u0112"+ - "\u0114\u011b\u0124\u0129\u013a\u0144\u014b\u0153\u0183\u0185\u018b\u018d"+ - "\u0190\u019f\u01a6\u01b9\u01bb\n\u0006\u0000\u0000\u0005\u0001\u0000\u0004"+ - "\u0000\u0000\u0007\r\u0000\u0007\u0006\u0000\u0007\u0019\u0000\u0007\u0014"+ - "\u0000\u0007\u0015\u0000\u0007\u0016\u0000\u0007\u0017\u0000"; + ">\u0000@\u0000B\u0000D\u0000F\u0000H\u0000J\u0000L\u0001N\u0002P\u0003"+ + "R\u0004T\u0005V\u0006X\u0007Z\b\\\t^\n`\u000bb\fd\rf\u000eh\u000fj\u0010"+ + "l\u0011n\u0012p\u0013r\u0014t\u0015v\u0016x\u0017z\u0018|\u0019~\u001a"+ + "\u0080\u001b\u0082\u0000\u0084\u0000\u0086\u001c\u0088\u001d\u008a\u0000"+ + "\u008c\u0000\u008e\u0000\u0090\u0000\u0092\u0000\u0094\u0000\u0096\u0000"+ + "\u0098\u001e\u0002\u0000\u0001\t\u0002\u0000\t\t \u0002\u0000\n\n\f\r"+ + "\r\u0000AZaz\u00c0\u00d6\u00d8\u00f6\u00f8\u02ff\u0370\u037d\u037f\u1fff"+ + "\u200c\u200d\u2070\u218f\u2c00\u2fef\u3001\u8000\ud7ff\u8000\uf900\u8000"+ + "\ufdcf\u8000\ufdf0\u8000\ufffd\u0003\u0000\u00b7\u00b7\u0300\u036f\u203f"+ + "\u2040\b\u0000\"\"\'\'\\\\bbffnnrrtt\u0004\u0000\n\n\r\r\'\'\\\\\u0004"+ + "\u0000\n\n\r\r\"\"\\\\\u0003\u000009AFaf\u0001\u000009\u01b7\u0000L\u0001"+ + "\u0000\u0000\u0000\u0000N\u0001\u0000\u0000\u0000\u0000P\u0001\u0000\u0000"+ + "\u0000\u0000R\u0001\u0000\u0000\u0000\u0000T\u0001\u0000\u0000\u0000\u0000"+ + "V\u0001\u0000\u0000\u0000\u0000X\u0001\u0000\u0000\u0000\u0000Z\u0001"+ + "\u0000\u0000\u0000\u0000\\\u0001\u0000\u0000\u0000\u0000^\u0001\u0000"+ + "\u0000\u0000\u0000`\u0001\u0000\u0000\u0000\u0000b\u0001\u0000\u0000\u0000"+ + "\u0000d\u0001\u0000\u0000\u0000\u0000f\u0001\u0000\u0000\u0000\u0000h"+ + "\u0001\u0000\u0000\u0000\u0000j\u0001\u0000\u0000\u0000\u0000l\u0001\u0000"+ + "\u0000\u0000\u0000n\u0001\u0000\u0000\u0000\u0000p\u0001\u0000\u0000\u0000"+ + "\u0000r\u0001\u0000\u0000\u0000\u0000t\u0001\u0000\u0000\u0000\u0000v"+ + "\u0001\u0000\u0000\u0000\u0000x\u0001\u0000\u0000\u0000\u0000z\u0001\u0000"+ + "\u0000\u0000\u0000|\u0001\u0000\u0000\u0000\u0000~\u0001\u0000\u0000\u0000"+ + "\u0000\u0080\u0001\u0000\u0000\u0000\u0001\u0086\u0001\u0000\u0000\u0000"+ + "\u0001\u0088\u0001\u0000\u0000\u0000\u0001\u008a\u0001\u0000\u0000\u0000"+ + "\u0001\u008c\u0001\u0000\u0000\u0000\u0001\u008e\u0001\u0000\u0000\u0000"+ + "\u0001\u0090\u0001\u0000\u0000\u0000\u0001\u0092\u0001\u0000\u0000\u0000"+ + "\u0001\u0094\u0001\u0000\u0000\u0000\u0001\u0096\u0001\u0000\u0000\u0000"+ + "\u0001\u0098\u0001\u0000\u0000\u0000\u0002\u009c\u0001\u0000\u0000\u0000"+ + "\u0004\u009e\u0001\u0000\u0000\u0000\u0006\u00a0\u0001\u0000\u0000\u0000"+ + "\b\u00a2\u0001\u0000\u0000\u0000\n\u00b0\u0001\u0000\u0000\u0000\f\u00b2"+ + "\u0001\u0000\u0000\u0000\u000e\u00b4\u0001\u0000\u0000\u0000\u0010\u00b6"+ + "\u0001\u0000\u0000\u0000\u0012\u00b8\u0001\u0000\u0000\u0000\u0014\u00ba"+ + "\u0001\u0000\u0000\u0000\u0016\u00bc\u0001\u0000\u0000\u0000\u0018\u00be"+ + "\u0001\u0000\u0000\u0000\u001a\u00c0\u0001\u0000\u0000\u0000\u001c\u00c2"+ + "\u0001\u0000\u0000\u0000\u001e\u00c4\u0001\u0000\u0000\u0000 \u00c6\u0001"+ + "\u0000\u0000\u0000\"\u00c8\u0001\u0000\u0000\u0000$\u00ca\u0001\u0000"+ + "\u0000\u0000&\u00cc\u0001\u0000\u0000\u0000(\u00ce\u0001\u0000\u0000\u0000"+ + "*\u00d0\u0001\u0000\u0000\u0000,\u00d2\u0001\u0000\u0000\u0000.\u00d5"+ + "\u0001\u0000\u0000\u00000\u00d7\u0001\u0000\u0000\u00002\u00d9\u0001\u0000"+ + "\u0000\u00004\u00e4\u0001\u0000\u0000\u00006\u00e6\u0001\u0000\u0000\u0000"+ + "8\u00ed\u0001\u0000\u0000\u0000:\u00fa\u0001\u0000\u0000\u0000<\u0104"+ + "\u0001\u0000\u0000\u0000>\u0110\u0001\u0000\u0000\u0000@\u0112\u0001\u0000"+ + "\u0000\u0000B\u0114\u0001\u0000\u0000\u0000D\u0117\u0001\u0000\u0000\u0000"+ + "F\u011b\u0001\u0000\u0000\u0000H\u0120\u0001\u0000\u0000\u0000J\u0125"+ + "\u0001\u0000\u0000\u0000L\u012b\u0001\u0000\u0000\u0000N\u0134\u0001\u0000"+ + "\u0000\u0000P\u0137\u0001\u0000\u0000\u0000R\u013e\u0001\u0000\u0000\u0000"+ + "T\u0144\u0001\u0000\u0000\u0000V\u0148\u0001\u0000\u0000\u0000X\u014c"+ + "\u0001\u0000\u0000\u0000Z\u014e\u0001\u0000\u0000\u0000\\\u0150\u0001"+ + "\u0000\u0000\u0000^\u0152\u0001\u0000\u0000\u0000`\u0154\u0001\u0000\u0000"+ + "\u0000b\u0156\u0001\u0000\u0000\u0000d\u0158\u0001\u0000\u0000\u0000f"+ + "\u015a\u0001\u0000\u0000\u0000h\u015c\u0001\u0000\u0000\u0000j\u015e\u0001"+ + "\u0000\u0000\u0000l\u0160\u0001\u0000\u0000\u0000n\u0162\u0001\u0000\u0000"+ + "\u0000p\u0164\u0001\u0000\u0000\u0000r\u0166\u0001\u0000\u0000\u0000t"+ + "\u0168\u0001\u0000\u0000\u0000v\u016a\u0001\u0000\u0000\u0000x\u016c\u0001"+ + "\u0000\u0000\u0000z\u016e\u0001\u0000\u0000\u0000|\u0170\u0001\u0000\u0000"+ + "\u0000~\u0178\u0001\u0000\u0000\u0000\u0080\u0184\u0001\u0000\u0000\u0000"+ + "\u0082\u0188\u0001\u0000\u0000\u0000\u0084\u018a\u0001\u0000\u0000\u0000"+ + "\u0086\u018d\u0001\u0000\u0000\u0000\u0088\u0194\u0001\u0000\u0000\u0000"+ + "\u008a\u019a\u0001\u0000\u0000\u0000\u008c\u019f\u0001\u0000\u0000\u0000"+ + "\u008e\u01a3\u0001\u0000\u0000\u0000\u0090\u01ad\u0001\u0000\u0000\u0000"+ + "\u0092\u01b1\u0001\u0000\u0000\u0000\u0094\u01b5\u0001\u0000\u0000\u0000"+ + "\u0096\u01b9\u0001\u0000\u0000\u0000\u0098\u01bd\u0001\u0000\u0000\u0000"+ + "\u009a\u009d\u0003\u0004\u0001\u0000\u009b\u009d\u0003\u0006\u0002\u0000"+ + "\u009c\u009a\u0001\u0000\u0000\u0000\u009c\u009b\u0001\u0000\u0000\u0000"+ + "\u009d\u0003\u0001\u0000\u0000\u0000\u009e\u009f\u0007\u0000\u0000\u0000"+ + "\u009f\u0005\u0001\u0000\u0000\u0000\u00a0\u00a1\u0007\u0001\u0000\u0000"+ + "\u00a1\u0007\u0001\u0000\u0000\u0000\u00a2\u00a3\u0005/\u0000\u0000\u00a3"+ + "\u00a4\u0005*\u0000\u0000\u00a4\u00a8\u0001\u0000\u0000\u0000\u00a5\u00a7"+ + "\t\u0000\u0000\u0000\u00a6\u00a5\u0001\u0000\u0000\u0000\u00a7\u00aa\u0001"+ + "\u0000\u0000\u0000\u00a8\u00a9\u0001\u0000\u0000\u0000\u00a8\u00a6\u0001"+ + "\u0000\u0000\u0000\u00a9\u00ae\u0001\u0000\u0000\u0000\u00aa\u00a8\u0001"+ + "\u0000\u0000\u0000\u00ab\u00ac\u0005*\u0000\u0000\u00ac\u00af\u0005/\u0000"+ + "\u0000\u00ad\u00af\u0005\u0000\u0000\u0001\u00ae\u00ab\u0001\u0000\u0000"+ + "\u0000\u00ae\u00ad\u0001\u0000\u0000\u0000\u00af\t\u0001\u0000\u0000\u0000"+ + "\u00b0\u00b1\u0005\\\u0000\u0000\u00b1\u000b\u0001\u0000\u0000\u0000\u00b2"+ + "\u00b3\u0005\'\u0000\u0000\u00b3\r\u0001\u0000\u0000\u0000\u00b4\u00b5"+ + "\u0005\"\u0000\u0000\u00b5\u000f\u0001\u0000\u0000\u0000\u00b6\u00b7\u0005"+ + "_\u0000\u0000\u00b7\u0011\u0001\u0000\u0000\u0000\u00b8\u00b9\u0005,\u0000"+ + "\u0000\u00b9\u0013\u0001\u0000\u0000\u0000\u00ba\u00bb\u0005;\u0000\u0000"+ + "\u00bb\u0015\u0001\u0000\u0000\u0000\u00bc\u00bd\u0005|\u0000\u0000\u00bd"+ + "\u0017\u0001\u0000\u0000\u0000\u00be\u00bf\u0005.\u0000\u0000\u00bf\u0019"+ + "\u0001\u0000\u0000\u0000\u00c0\u00c1\u0005(\u0000\u0000\u00c1\u001b\u0001"+ + "\u0000\u0000\u0000\u00c2\u00c3\u0005)\u0000\u0000\u00c3\u001d\u0001\u0000"+ + "\u0000\u0000\u00c4\u00c5\u0005[\u0000\u0000\u00c5\u001f\u0001\u0000\u0000"+ + "\u0000\u00c6\u00c7\u0005]\u0000\u0000\u00c7!\u0001\u0000\u0000\u0000\u00c8"+ + "\u00c9\u0005*\u0000\u0000\u00c9#\u0001\u0000\u0000\u0000\u00ca\u00cb\u0005"+ + "/\u0000\u0000\u00cb%\u0001\u0000\u0000\u0000\u00cc\u00cd\u0005%\u0000"+ + "\u0000\u00cd\'\u0001\u0000\u0000\u0000\u00ce\u00cf\u0005+\u0000\u0000"+ + "\u00cf)\u0001\u0000\u0000\u0000\u00d0\u00d1\u0005-\u0000\u0000\u00d1+"+ + "\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005?\u0000\u0000\u00d3\u00d4\u0005"+ + "?\u0000\u0000\u00d4-\u0001\u0000\u0000\u0000\u00d5\u00d6\u0005<\u0000"+ + "\u0000\u00d6/\u0001\u0000\u0000\u0000\u00d7\u00d8\u0005>\u0000\u0000\u00d8"+ + "1\u0001\u0000\u0000\u0000\u00d9\u00da\u0005d\u0000\u0000\u00da\u00db\u0005"+ + "e\u0000\u0000\u00db\u00dc\u0005f\u0000\u0000\u00dc\u00dd\u0005a\u0000"+ + "\u0000\u00dd\u00de\u0005u\u0000\u0000\u00de\u00df\u0005l\u0000\u0000\u00df"+ + "\u00e0\u0005t\u0000\u0000\u00e03\u0001\u0000\u0000\u0000\u00e1\u00e5\u0007"+ + "\u0002\u0000\u0000\u00e2\u00e5\u0003\u0010\u0007\u0000\u00e3\u00e5\u0007"+ + "\u0003\u0000\u0000\u00e4\u00e1\u0001\u0000\u0000\u0000\u00e4\u00e2\u0001"+ + "\u0000\u0000\u0000\u00e4\u00e3\u0001\u0000\u0000\u0000\u00e55\u0001\u0000"+ + "\u0000\u0000\u00e6\u00eb\u0003\n\u0004\u0000\u00e7\u00ec\u0007\u0004\u0000"+ + "\u0000\u00e8\u00ec\u00038\u001b\u0000\u00e9\u00ec\t\u0000\u0000\u0000"+ + "\u00ea\u00ec\u0005\u0000\u0000\u0001\u00eb\u00e7\u0001\u0000\u0000\u0000"+ + "\u00eb\u00e8\u0001\u0000\u0000\u0000\u00eb\u00e9\u0001\u0000\u0000\u0000"+ + "\u00eb\u00ea\u0001\u0000\u0000\u0000\u00ec7\u0001\u0000\u0000\u0000\u00ed"+ + "\u00f8\u0005u\u0000\u0000\u00ee\u00f6\u0003@\u001f\u0000\u00ef\u00f4\u0003"+ + "@\u001f\u0000\u00f0\u00f2\u0003@\u001f\u0000\u00f1\u00f3\u0003@\u001f"+ + "\u0000\u00f2\u00f1\u0001\u0000\u0000\u0000\u00f2\u00f3\u0001\u0000\u0000"+ + "\u0000\u00f3\u00f5\u0001\u0000\u0000\u0000\u00f4\u00f0\u0001\u0000\u0000"+ + "\u0000\u00f4\u00f5\u0001\u0000\u0000\u0000\u00f5\u00f7\u0001\u0000\u0000"+ + "\u0000\u00f6\u00ef\u0001\u0000\u0000\u0000\u00f6\u00f7\u0001\u0000\u0000"+ + "\u0000\u00f7\u00f9\u0001\u0000\u0000\u0000\u00f8\u00ee\u0001\u0000\u0000"+ + "\u0000\u00f8\u00f9\u0001\u0000\u0000\u0000\u00f99\u0001\u0000\u0000\u0000"+ + "\u00fa\u00ff\u0003\f\u0005\u0000\u00fb\u00fe\u00036\u001a\u0000\u00fc"+ + "\u00fe\b\u0005\u0000\u0000\u00fd\u00fb\u0001\u0000\u0000\u0000\u00fd\u00fc"+ + "\u0001\u0000\u0000\u0000\u00fe\u0101\u0001\u0000\u0000\u0000\u00ff\u00fd"+ + "\u0001\u0000\u0000\u0000\u00ff\u0100\u0001\u0000\u0000\u0000\u0100\u0102"+ + "\u0001\u0000\u0000\u0000\u0101\u00ff\u0001\u0000\u0000\u0000\u0102\u0103"+ + "\u0003\f\u0005\u0000\u0103;\u0001\u0000\u0000\u0000\u0104\u0109\u0003"+ + "\u000e\u0006\u0000\u0105\u0108\u00036\u001a\u0000\u0106\u0108\b\u0006"+ + "\u0000\u0000\u0107\u0105\u0001\u0000\u0000\u0000\u0107\u0106\u0001\u0000"+ + "\u0000\u0000\u0108\u010b\u0001\u0000\u0000\u0000\u0109\u0107\u0001\u0000"+ + "\u0000\u0000\u0109\u010a\u0001\u0000\u0000\u0000\u010a\u010c\u0001\u0000"+ + "\u0000\u0000\u010b\u0109\u0001\u0000\u0000\u0000\u010c\u010d\u0003\u000e"+ + "\u0006\u0000\u010d=\u0001\u0000\u0000\u0000\u010e\u0111\u0003H#\u0000"+ + "\u010f\u0111\u0003J$\u0000\u0110\u010e\u0001\u0000\u0000\u0000\u0110\u010f"+ + "\u0001\u0000\u0000\u0000\u0111?\u0001\u0000\u0000\u0000\u0112\u0113\u0007"+ + "\u0007\u0000\u0000\u0113A\u0001\u0000\u0000\u0000\u0114\u0115\u0007\b"+ + "\u0000\u0000\u0115C\u0001\u0000\u0000\u0000\u0116\u0118\u0003B \u0000"+ + "\u0117\u0116\u0001\u0000\u0000\u0000\u0118\u0119\u0001\u0000\u0000\u0000"+ + "\u0119\u0117\u0001\u0000\u0000\u0000\u0119\u011a\u0001\u0000\u0000\u0000"+ + "\u011aE\u0001\u0000\u0000\u0000\u011b\u011c\u0003D!\u0000\u011c\u011e"+ + "\u0003\u0018\u000b\u0000\u011d\u011f\u0003D!\u0000\u011e\u011d\u0001\u0000"+ + "\u0000\u0000\u011e\u011f\u0001\u0000\u0000\u0000\u011fG\u0001\u0000\u0000"+ + "\u0000\u0120\u0121\u0005t\u0000\u0000\u0121\u0122\u0005r\u0000\u0000\u0122"+ + "\u0123\u0005u\u0000\u0000\u0123\u0124\u0005e\u0000\u0000\u0124I\u0001"+ + "\u0000\u0000\u0000\u0125\u0126\u0005f\u0000\u0000\u0126\u0127\u0005a\u0000"+ + "\u0000\u0127\u0128\u0005l\u0000\u0000\u0128\u0129\u0005s\u0000\u0000\u0129"+ + "\u012a\u0005e\u0000\u0000\u012aK\u0001\u0000\u0000\u0000\u012b\u012f\u0003"+ + "\u0016\n\u0000\u012c\u012e\u0003\u0004\u0001\u0000\u012d\u012c\u0001\u0000"+ + "\u0000\u0000\u012e\u0131\u0001\u0000\u0000\u0000\u012f\u012d\u0001\u0000"+ + "\u0000\u0000\u012f\u0130\u0001\u0000\u0000\u0000\u0130\u0132\u0001\u0000"+ + "\u0000\u0000\u0131\u012f\u0001\u0000\u0000\u0000\u0132\u0133\u00032\u0018"+ + "\u0000\u0133M\u0001\u0000\u0000\u0000\u0134\u0135\u0003\b\u0003\u0000"+ + "\u0135O\u0001\u0000\u0000\u0000\u0136\u0138\u0003\u0004\u0001\u0000\u0137"+ + "\u0136\u0001\u0000\u0000\u0000\u0138\u0139\u0001\u0000\u0000\u0000\u0139"+ + "\u0137\u0001\u0000\u0000\u0000\u0139\u013a\u0001\u0000\u0000\u0000\u013a"+ + "\u013b\u0001\u0000\u0000\u0000\u013b\u013c\u0006\'\u0000\u0000\u013cQ"+ + "\u0001\u0000\u0000\u0000\u013d\u013f\u0003\u0006\u0002\u0000\u013e\u013d"+ + "\u0001\u0000\u0000\u0000\u013f\u0140\u0001\u0000\u0000\u0000\u0140\u013e"+ + "\u0001\u0000\u0000\u0000\u0140\u0141\u0001\u0000\u0000\u0000\u0141\u0142"+ + "\u0001\u0000\u0000\u0000\u0142\u0143\u0006(\u0000\u0000\u0143S\u0001\u0000"+ + "\u0000\u0000\u0144\u0145\u0003\u0082@\u0000\u0145\u0146\u0001\u0000\u0000"+ + "\u0000\u0146\u0147\u0006)\u0001\u0000\u0147U\u0001\u0000\u0000\u0000\u0148"+ + "\u0149\u0003\u0084A\u0000\u0149\u014a\u0001\u0000\u0000\u0000\u014a\u014b"+ + "\u0006*\u0002\u0000\u014bW\u0001\u0000\u0000\u0000\u014c\u014d\u0003\u0018"+ + "\u000b\u0000\u014dY\u0001\u0000\u0000\u0000\u014e\u014f\u0003\u001a\f"+ + "\u0000\u014f[\u0001\u0000\u0000\u0000\u0150\u0151\u0003\u001c\r\u0000"+ + "\u0151]\u0001\u0000\u0000\u0000\u0152\u0153\u0003\u001e\u000e\u0000\u0153"+ + "_\u0001\u0000\u0000\u0000\u0154\u0155\u0003 \u000f\u0000\u0155a\u0001"+ + "\u0000\u0000\u0000\u0156\u0157\u0003,\u0015\u0000\u0157c\u0001\u0000\u0000"+ + "\u0000\u0158\u0159\u0003\u0014\t\u0000\u0159e\u0001\u0000\u0000\u0000"+ + "\u015a\u015b\u0003\u0012\b\u0000\u015bg\u0001\u0000\u0000\u0000\u015c"+ + "\u015d\u0003\"\u0010\u0000\u015di\u0001\u0000\u0000\u0000\u015e\u015f"+ + "\u0003$\u0011\u0000\u015fk\u0001\u0000\u0000\u0000\u0160\u0161\u0003&"+ + "\u0012\u0000\u0161m\u0001\u0000\u0000\u0000\u0162\u0163\u0003(\u0013\u0000"+ + "\u0163o\u0001\u0000\u0000\u0000\u0164\u0165\u0003*\u0014\u0000\u0165q"+ + "\u0001\u0000\u0000\u0000\u0166\u0167\u0003<\u001d\u0000\u0167s\u0001\u0000"+ + "\u0000\u0000\u0168\u0169\u0003:\u001c\u0000\u0169u\u0001\u0000\u0000\u0000"+ + "\u016a\u016b\u0003D!\u0000\u016bw\u0001\u0000\u0000\u0000\u016c\u016d"+ + "\u0003F\"\u0000\u016dy\u0001\u0000\u0000\u0000\u016e\u016f\u0003>\u001e"+ + "\u0000\u016f{\u0001\u0000\u0000\u0000\u0170\u0175\u00034\u0019\u0000\u0171"+ + "\u0174\u00034\u0019\u0000\u0172\u0174\u0003B \u0000\u0173\u0171\u0001"+ + "\u0000\u0000\u0000\u0173\u0172\u0001\u0000\u0000\u0000\u0174\u0177\u0001"+ + "\u0000\u0000\u0000\u0175\u0173\u0001\u0000\u0000\u0000\u0175\u0176\u0001"+ + "\u0000\u0000\u0000\u0176}\u0001\u0000\u0000\u0000\u0177\u0175\u0001\u0000"+ + "\u0000\u0000\u0178\u017b\u0003.\u0016\u0000\u0179\u017c\u00034\u0019\u0000"+ + "\u017a\u017c\u0003X+\u0000\u017b\u0179\u0001\u0000\u0000\u0000\u017b\u017a"+ + "\u0001\u0000\u0000\u0000\u017c\u017d\u0001\u0000\u0000\u0000\u017d\u017b"+ + "\u0001\u0000\u0000\u0000\u017d\u017e\u0001\u0000\u0000\u0000\u017e\u0180"+ + "\u0001\u0000\u0000\u0000\u017f\u0181\u0003~>\u0000\u0180\u017f\u0001\u0000"+ + "\u0000\u0000\u0180\u0181\u0001\u0000\u0000\u0000\u0181\u0182\u0001\u0000"+ + "\u0000\u0000\u0182\u0183\u00030\u0017\u0000\u0183\u007f\u0001\u0000\u0000"+ + "\u0000\u0184\u0185\u0003\u0004\u0001\u0000\u0185\u0186\u0001\u0000\u0000"+ + "\u0000\u0186\u0187\u0006?\u0000\u0000\u0187\u0081\u0001\u0000\u0000\u0000"+ + "\u0188\u0189\u0005{\u0000\u0000\u0189\u0083\u0001\u0000\u0000\u0000\u018a"+ + "\u018b\u0005}\u0000\u0000\u018b\u0085\u0001\u0000\u0000\u0000\u018c\u018e"+ + "\u0003\u0004\u0001\u0000\u018d\u018c\u0001\u0000\u0000\u0000\u018e\u018f"+ + "\u0001\u0000\u0000\u0000\u018f\u018d\u0001\u0000\u0000\u0000\u018f\u0190"+ + "\u0001\u0000\u0000\u0000\u0190\u0191\u0001\u0000\u0000\u0000\u0191\u0192"+ + "\u0006B\u0000\u0000\u0192\u0087\u0001\u0000\u0000\u0000\u0193\u0195\u0003"+ + "\u0006\u0002\u0000\u0194\u0193\u0001\u0000\u0000\u0000\u0195\u0196\u0001"+ + "\u0000\u0000\u0000\u0196\u0194\u0001\u0000\u0000\u0000\u0196\u0197\u0001"+ + "\u0000\u0000\u0000\u0197\u0198\u0001\u0000\u0000\u0000\u0198\u0199\u0006"+ + "C\u0000\u0000\u0199\u0089\u0001\u0000\u0000\u0000\u019a\u019b\u0003\u0084"+ + "A\u0000\u019b\u019c\u0001\u0000\u0000\u0000\u019c\u019d\u0006D\u0002\u0000"+ + "\u019d\u019e\u0006D\u0003\u0000\u019e\u008b\u0001\u0000\u0000\u0000\u019f"+ + "\u01a0\u0003\u0012\b\u0000\u01a0\u01a1\u0001\u0000\u0000\u0000\u01a1\u01a2"+ + "\u0006E\u0004\u0000\u01a2\u008d\u0001\u0000\u0000\u0000\u01a3\u01a8\u0003"+ + "4\u0019\u0000\u01a4\u01a7\u00034\u0019\u0000\u01a5\u01a7\u0003B \u0000"+ + "\u01a6\u01a4\u0001\u0000\u0000\u0000\u01a6\u01a5\u0001\u0000\u0000\u0000"+ + "\u01a7\u01aa\u0001\u0000\u0000\u0000\u01a8\u01a6\u0001\u0000\u0000\u0000"+ + "\u01a8\u01a9\u0001\u0000\u0000\u0000\u01a9\u01ab\u0001\u0000\u0000\u0000"+ + "\u01aa\u01a8\u0001\u0000\u0000\u0000\u01ab\u01ac\u0006F\u0005\u0000\u01ac"+ + "\u008f\u0001\u0000\u0000\u0000\u01ad\u01ae\u0003<\u001d\u0000\u01ae\u01af"+ + "\u0001\u0000\u0000\u0000\u01af\u01b0\u0006G\u0006\u0000\u01b0\u0091\u0001"+ + "\u0000\u0000\u0000\u01b1\u01b2\u0003:\u001c\u0000\u01b2\u01b3\u0001\u0000"+ + "\u0000\u0000\u01b3\u01b4\u0006H\u0007\u0000\u01b4\u0093\u0001\u0000\u0000"+ + "\u0000\u01b5\u01b6\u0003D!\u0000\u01b6\u01b7\u0001\u0000\u0000\u0000\u01b7"+ + "\u01b8\u0006I\b\u0000\u01b8\u0095\u0001\u0000\u0000\u0000\u01b9\u01ba"+ + "\u0003F\"\u0000\u01ba\u01bb\u0001\u0000\u0000\u0000\u01bb\u01bc\u0006"+ + "J\t\u0000\u01bc\u0097\u0001\u0000\u0000\u0000\u01bd\u01be\u0007\u0000"+ + "\u0000\u0000\u01be\u01bf\u0001\u0000\u0000\u0000\u01bf\u01c0\u0006K\u0000"+ + "\u0000\u01c0\u0099\u0001\u0000\u0000\u0000\u001e\u0000\u0001\u009c\u00a8"+ + "\u00ae\u00e4\u00eb\u00f2\u00f4\u00f6\u00f8\u00fd\u00ff\u0107\u0109\u0110"+ + "\u0119\u011e\u012f\u0139\u0140\u0173\u0175\u017b\u017d\u0180\u018f\u0196"+ + "\u01a6\u01a8\n\u0006\u0000\u0000\u0005\u0001\u0000\u0004\u0000\u0000\u0007"+ + "\u0006\u0000\u0007\u000e\u0000\u0007\u0019\u0000\u0007\u0014\u0000\u0007"+ + "\u0015\u0000\u0007\u0016\u0000\u0007\u0017\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.tokens b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.tokens index e5fb05742..680b3cfca 100644 --- a/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.tokens +++ b/oap-formats/oap-template/src/main/java-antlr-generated/oap/template/TemplateLexerExpression.tokens @@ -2,16 +2,16 @@ DEFAULT=1 BLOCK_COMMENT=2 HORZ_WS=3 VERT_WS=4 -START_CONCATENATION=5 -DOT=6 -LPAREN=7 -RPAREN=8 -LBRACK=9 -RBRACK=10 -DQUESTION=11 -SEMI=12 -COMMA=13 -PIPE=14 +LBRACE=5 +RBRACE=6 +DOT=7 +LPAREN=8 +RPAREN=9 +LBRACK=10 +RBRACK=11 +DQUESTION=12 +SEMI=13 +COMMA=14 STAR=15 SLASH=16 PERCENT=17 @@ -27,5 +27,4 @@ CAST_TYPE=26 ERR_CHAR=27 C_HORZ_WS=28 C_VERT_WS=29 -CRBRACE=30 -CERR_CHAR=31 +CERR_CHAR=30 diff --git a/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineConcatenationTest.java b/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineConcatenationTest.java index 89199f65a..02889d710 100644 --- a/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineConcatenationTest.java +++ b/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineConcatenationTest.java @@ -60,7 +60,7 @@ public void testConcatenation() { c.field = "f1"; c.field2 = "f2"; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ concat( .field, \"x\", .field2 ) }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ { field, \"x\", field2 } }}", STRING, null ).render( c ).get() ) .isEqualTo( "f1xf2" ); } @@ -70,7 +70,7 @@ public void testConcatenationBinary() throws IOException { c.field = "f1"; c.field2 = "f2"; - assertThat( BinaryUtils.read( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ concat( .field, \"x\", .field2 ) }}", BINARY, null ).render( c ).get() ) ) + assertThat( BinaryUtils.read( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ { field, \"x\", field2 } }}", BINARY, null ).render( c ).get() ) ) .isEqualTo( List.of( List.of( "f1xf2" ) ) ); } @@ -80,7 +80,7 @@ public void testConcatenationWithNumber() { c.intField = 3; c.field2 = "f2"; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ concat( .intField, \"x\", .field2 ) }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ { intField, \"x\", field2} }}", STRING, null ).render( c ).get() ) .isEqualTo( "3xf2" ); } @@ -92,7 +92,7 @@ public void testNestedConcatenation() { c1.field = "f1"; c1.field2 = "f2"; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .child | concat ( .field, \"x\", .field2 ) }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .child{ field, \"x\", field2 } }}", STRING, null ).render( c ).get() ) .isEqualTo( "f1xf2" ); } @@ -104,7 +104,7 @@ public void testNestedConcatenationWithDot() { c1.field2 = "f1"; c1.field22 = "f2"; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .child2 | concat( .field2, \"x\", .field22 ) }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .child2.{ field2, \"x\", field22 } }}", STRING, null ).render( c ).get() ) .isEqualTo( "f1xf2" ); } @@ -120,7 +120,7 @@ public void testNestedNullableConcatenationWithDot() { c11.field2 = "f1"; c11.intField = 5; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .childNullable.childNullable | concat ( .field2, \"x\", .intField ) ?? '' }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .childNullable.childNullable.{ field2, \"x\", intField } ?? '' }}", STRING, null ).render( c ).get() ) .isEqualTo( "f1x5" ); } @@ -136,7 +136,7 @@ public void testNestedOptConcatenationWithDot() { c11.field2 = "f1"; c11.intField = 5; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .childOpt.childOpt | concat( .field2, \"x\", .intField ) ?? '' }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .childOpt.childOpt.{ field2, \"x\", intField } ?? '' }}", STRING, null ).render( c ).get() ) .isEqualTo( "f1x5" ); } } diff --git a/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineTest.java b/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineTest.java index 5c10ca41d..7d847b945 100644 --- a/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineTest.java +++ b/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineTest.java @@ -427,7 +427,7 @@ public void testConcatenation() { c.field = "f1"; c.field2 = "f2"; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ concat( .field, \"x\", .field2 ) }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ { field, \"x\", field2} }}", STRING, null ).render( c ).get() ) .isEqualTo( "f1xf2" ); } @@ -439,7 +439,7 @@ public void testNestedConcatenation() { c1.field = "f1"; c1.field2 = "f2"; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .child | concat( .field, \"x\", .field2 ) }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .child.{ field, \"x\", field2} }}", STRING, null ).render( c ).get() ) .isEqualTo( "f1xf2" ); } @@ -451,7 +451,7 @@ public void testNestedConcatenationWithDot() { c1.field2 = "f1"; c1.field22 = "f2"; - assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .child2 | concat( .field2, \"x\", .field22 ) }}", STRING, null ).render( c ).get() ) + assertThat( engine.getTemplate( testMethodName, new TypeRef() {}, "{{ .child2.{ field2, \"x\", field22} }}", STRING, null ).render( c ).get() ) .isEqualTo( "f1xf2" ); } diff --git a/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineTypesTest.java b/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineTypesTest.java index aa2a20e51..ea8933fe7 100644 --- a/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineTypesTest.java +++ b/oap-formats/oap-template/src/test/java/oap/template/TemplateEngineTypesTest.java @@ -100,7 +100,7 @@ public void testObjectReferenceWithConcatenation() { templateClass.child.child.field2 = "v2"; var str = engine.getTemplate( testMethodName, new TypeRef() {}, - "child.child.{field,\"x\",field2}:{{ .child.child | concat( .field, \"x\", .field2 ) }}", + "child.child.{field,\"x\",field2}:{{ .child.child.{ field, \"x\", field2} }}", templateAccumulator, ERROR, null ).render( templateClass ).get(); assertString( str ).isEqualTo( "child.child.{field,\"x\",field2}:v1xv2" ); diff --git a/pom.xml b/pom.xml index 3a621c41d..3caff62fb 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,7 @@ - 22.5.3 + 22.5.4 21.0.0 21.0.1