diff --git a/more_math/AudioMathNode.py b/more_math/AudioMathNode.py index 97e674e..524c69d 100644 --- a/more_math/AudioMathNode.py +++ b/more_math/AudioMathNode.py @@ -131,7 +131,7 @@ class AudioMathNode(io.ComfyNode): variables[k] = val if val is not None else 0.0 tree = parse_expr(Expression); - visitor = UnifiedMathVisitor(variables, a_w.shape) + visitor = UnifiedMathVisitor(variables, a_w.shape,a_w.device) result = visitor.visit(tree) result = as_tensor(result, a_w.shape) return ({"waveform":result,"sample_rate":sample_rate},) diff --git a/more_math/ConditioningMathNode.py b/more_math/ConditioningMathNode.py index ec284ce..6f4210d 100644 --- a/more_math/ConditioningMathNode.py +++ b/more_math/ConditioningMathNode.py @@ -136,7 +136,7 @@ class ConditioningMathNode(io.ComfyNode): # Execute Expression (Main Tensor) tree = parse_expr(Expression) - visitor = UnifiedMathVisitor(variables, a.shape, state_storage=ss) + visitor = UnifiedMathVisitor(variables, a.shape,a.device, state_storage=ss) rtensor = visitor.visit(tree) rtensor = as_tensor(rtensor, a.shape) @@ -165,7 +165,7 @@ class ConditioningMathNode(io.ComfyNode): # Execute Expression_pi (Pooled Output) tree_pi = parse_expr(Expression_pi) - visitor_pi = UnifiedMathVisitor(variables_pi, a_p.shape, state_storage=ss) + visitor_pi = UnifiedMathVisitor(variables_pi, a_p.shape,a_p.device, state_storage=ss) rpooled_raw = visitor_pi.visit(tree_pi) rpooled = as_tensor(rpooled_raw, a_p.shape) diff --git a/more_math/GuiderMathNode.py b/more_math/GuiderMathNode.py index d0324b7..2885a65 100644 --- a/more_math/GuiderMathNode.py +++ b/more_math/GuiderMathNode.py @@ -112,7 +112,7 @@ class MathGuider: eval_samples, variables = self.setVars(x, sigma, seed, g_results) - visitor = UnifiedMathVisitor(variables, eval_samples.shape,state_storage=self.stck) + visitor = UnifiedMathVisitor(variables, eval_samples.shape,eval_samples.device,state_storage=self.stck) result_tensor = visitor.visit(self.tree) self.current_step = self.current_step + 1; return as_tensor(result_tensor, eval_samples.shape).to(x.device) diff --git a/more_math/ImageMathNode.py b/more_math/ImageMathNode.py index 651e6c1..5b1bca4 100644 --- a/more_math/ImageMathNode.py +++ b/more_math/ImageMathNode.py @@ -132,7 +132,7 @@ class ImageMathNode(io.ComfyNode): variables[k] = val if val is not None else 0.0 tree = parse_expr(Expression); - visitor = UnifiedMathVisitor(variables, ae.shape) + visitor = UnifiedMathVisitor(variables, ae.shape,ae.device) result = visitor.visit(tree) result = as_tensor(result, ae.shape) return (result,) diff --git a/more_math/LatentMathNode.py b/more_math/LatentMathNode.py index a72033b..2751bd8 100644 --- a/more_math/LatentMathNode.py +++ b/more_math/LatentMathNode.py @@ -183,7 +183,7 @@ class LatentMathNode(io.ComfyNode): for k, v in F.items(): variables[k] = v if v is not None else 0.0 - visitor = UnifiedMathVisitor(variables, ae.shape) + visitor = UnifiedMathVisitor(variables, ae.shape,ae.device) result_t = as_tensor(visitor.visit(tree), ae.shape) result_latent = ref_latent.copy() diff --git a/more_math/MaskMathNode.py b/more_math/MaskMathNode.py index 12f48ba..73acf85 100644 --- a/more_math/MaskMathNode.py +++ b/more_math/MaskMathNode.py @@ -127,7 +127,7 @@ class MaskMathNode(io.ComfyNode): variables[k] = val if val is not None else 0.0 tree = parse_expr(Expression); - visitor = UnifiedMathVisitor(variables, ae.shape) + visitor = UnifiedMathVisitor(variables, ae.shape,ae.device) result = visitor.visit(tree) result = as_tensor(result, ae.shape) return (result,) diff --git a/more_math/NoiseMathNode.py b/more_math/NoiseMathNode.py index 1200bf3..545b9c5 100644 --- a/more_math/NoiseMathNode.py +++ b/more_math/NoiseMathNode.py @@ -127,7 +127,7 @@ class NoiseExecutor: F = getIndexTensorAlongDim(samples, time_dim) variables.update({"frame": F, "frame_count": frame_count}) - visitor = UnifiedMathVisitor(variables, samples.shape) + visitor = UnifiedMathVisitor(variables, samples.shape,samples.device) result = visitor.visit(self.tree) result = as_tensor(result, samples.shape) return result diff --git a/more_math/Parser/MathExpr.g4 b/more_math/Parser/MathExpr.g4 index ad14c31..ed0f548 100644 --- a/more_math/Parser/MathExpr.g4 +++ b/more_math/Parser/MathExpr.g4 @@ -23,9 +23,9 @@ stmt: ifStmt: IF LPAREN expr RPAREN stmt (ELSE stmt)?; whileStmt: WHILE LPAREN expr RPAREN stmt; block: LBRACE stmt* RBRACE; -breakStmt: BREAK SEMICOLON; -continueStmt: CONTINUE SEMICOLON; -returnStmt: RETURN expr? SEMICOLON; +breakStmt: BRK SEMICOLON; +continueStmt: CONT SEMICOLON; +returnStmt: RET expr? SEMICOLON; expr: ternaryExpr | atom | compExpr; @@ -281,7 +281,7 @@ REMAP: 'remap'; IF: 'if'; ELSE: 'else'; WHILE: 'while'; -RETURN: 'return'; +RET: 'return'; PUSH: 'push'; POP: 'pop'; CLEAR: 'clear'; @@ -303,8 +303,8 @@ SORT: 'sort'; APPEND: 'append'; TIMESTAMP: 'timestamp' | 'now'; -BREAK: break; -CONTINUE: continue; +BRK: 'break'; +CONT: 'continue'; PLUS: '+'; MINUS: '-'; diff --git a/more_math/Parser/MathExpr.interp b/more_math/Parser/MathExpr.interp index 0ef1fe8..3d4fc37 100644 --- a/more_math/Parser/MathExpr.interp +++ b/more_math/Parser/MathExpr.interp @@ -102,6 +102,8 @@ null 'sort' 'append' null +'break' +'continue' '+' '-' '*' @@ -219,7 +221,7 @@ REMAP IF ELSE WHILE -RETURN +RET PUSH POP CLEAR @@ -238,6 +240,8 @@ COV SORT APPEND TIMESTAMP +BRK +CONT PLUS MINUS MULT @@ -279,6 +283,8 @@ stmt ifStmt whileStmt block +breakStmt +continueStmt returnStmt expr ternaryExpr @@ -300,4 +306,4 @@ funcN atn: -[4, 1, 133, 934, 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, 1, 0, 1, 0, 1, 0, 5, 0, 56, 8, 0, 10, 0, 12, 0, 59, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 67, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 73, 8, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 5, 3, 85, 8, 3, 10, 3, 12, 3, 88, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 98, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 107, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 5, 7, 117, 8, 7, 10, 7, 12, 7, 120, 9, 7, 1, 7, 1, 7, 1, 8, 1, 8, 3, 8, 126, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 133, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 162, 8, 11, 10, 11, 12, 11, 165, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 176, 8, 12, 10, 12, 12, 12, 179, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 193, 8, 13, 10, 13, 12, 13, 196, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 203, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 210, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 220, 8, 16, 10, 16, 12, 16, 223, 9, 16, 1, 16, 1, 16, 5, 16, 227, 8, 16, 10, 16, 12, 16, 230, 9, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 254, 8, 17, 10, 17, 12, 17, 257, 9, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 264, 8, 17, 1, 17, 3, 17, 267, 8, 17, 1, 18, 1, 18, 1, 18, 5, 18, 272, 8, 18, 10, 18, 12, 18, 275, 9, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 506, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 550, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 685, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 710, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 811, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 846, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 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, 5, 25, 866, 8, 25, 10, 25, 12, 25, 869, 9, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 878, 8, 25, 10, 25, 12, 25, 881, 9, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 4, 25, 890, 8, 25, 11, 25, 12, 25, 891, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 4, 25, 901, 8, 25, 11, 25, 12, 25, 902, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 4, 25, 912, 8, 25, 11, 25, 12, 25, 913, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 932, 8, 25, 1, 25, 0, 4, 22, 24, 26, 32, 26, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 0, 0, 1053, 0, 57, 1, 0, 0, 0, 2, 63, 1, 0, 0, 0, 4, 76, 1, 0, 0, 0, 6, 81, 1, 0, 0, 0, 8, 97, 1, 0, 0, 0, 10, 99, 1, 0, 0, 0, 12, 108, 1, 0, 0, 0, 14, 114, 1, 0, 0, 0, 16, 123, 1, 0, 0, 0, 18, 132, 1, 0, 0, 0, 20, 134, 1, 0, 0, 0, 22, 140, 1, 0, 0, 0, 24, 166, 1, 0, 0, 0, 26, 180, 1, 0, 0, 0, 28, 202, 1, 0, 0, 0, 30, 209, 1, 0, 0, 0, 32, 211, 1, 0, 0, 0, 34, 266, 1, 0, 0, 0, 36, 268, 1, 0, 0, 0, 38, 276, 1, 0, 0, 0, 40, 549, 1, 0, 0, 0, 42, 709, 1, 0, 0, 0, 44, 810, 1, 0, 0, 0, 46, 845, 1, 0, 0, 0, 48, 847, 1, 0, 0, 0, 50, 931, 1, 0, 0, 0, 52, 56, 3, 2, 1, 0, 53, 56, 3, 4, 2, 0, 54, 56, 3, 8, 4, 0, 55, 52, 1, 0, 0, 0, 55, 53, 1, 0, 0, 0, 55, 54, 1, 0, 0, 0, 56, 59, 1, 0, 0, 0, 57, 55, 1, 0, 0, 0, 57, 58, 1, 0, 0, 0, 58, 60, 1, 0, 0, 0, 59, 57, 1, 0, 0, 0, 60, 61, 3, 18, 9, 0, 61, 62, 5, 0, 0, 1, 62, 1, 1, 0, 0, 0, 63, 64, 5, 130, 0, 0, 64, 66, 5, 117, 0, 0, 65, 67, 3, 6, 3, 0, 66, 65, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 69, 5, 118, 0, 0, 69, 72, 5, 121, 0, 0, 70, 73, 3, 14, 7, 0, 71, 73, 3, 18, 9, 0, 72, 70, 1, 0, 0, 0, 72, 71, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 75, 5, 120, 0, 0, 75, 3, 1, 0, 0, 0, 76, 77, 5, 130, 0, 0, 77, 78, 5, 114, 0, 0, 78, 79, 3, 18, 9, 0, 79, 80, 5, 120, 0, 0, 80, 5, 1, 0, 0, 0, 81, 86, 5, 130, 0, 0, 82, 83, 5, 119, 0, 0, 83, 85, 5, 130, 0, 0, 84, 82, 1, 0, 0, 0, 85, 88, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 7, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 89, 98, 3, 10, 5, 0, 90, 98, 3, 12, 6, 0, 91, 98, 3, 14, 7, 0, 92, 98, 3, 16, 8, 0, 93, 98, 3, 4, 2, 0, 94, 95, 3, 18, 9, 0, 95, 96, 5, 120, 0, 0, 96, 98, 1, 0, 0, 0, 97, 89, 1, 0, 0, 0, 97, 90, 1, 0, 0, 0, 97, 91, 1, 0, 0, 0, 97, 92, 1, 0, 0, 0, 97, 93, 1, 0, 0, 0, 97, 94, 1, 0, 0, 0, 98, 9, 1, 0, 0, 0, 99, 100, 5, 81, 0, 0, 100, 101, 5, 117, 0, 0, 101, 102, 3, 18, 9, 0, 102, 103, 5, 118, 0, 0, 103, 106, 3, 8, 4, 0, 104, 105, 5, 82, 0, 0, 105, 107, 3, 8, 4, 0, 106, 104, 1, 0, 0, 0, 106, 107, 1, 0, 0, 0, 107, 11, 1, 0, 0, 0, 108, 109, 5, 83, 0, 0, 109, 110, 5, 117, 0, 0, 110, 111, 3, 18, 9, 0, 111, 112, 5, 118, 0, 0, 112, 113, 3, 8, 4, 0, 113, 13, 1, 0, 0, 0, 114, 118, 5, 126, 0, 0, 115, 117, 3, 8, 4, 0, 116, 115, 1, 0, 0, 0, 117, 120, 1, 0, 0, 0, 118, 116, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 121, 1, 0, 0, 0, 120, 118, 1, 0, 0, 0, 121, 122, 5, 127, 0, 0, 122, 15, 1, 0, 0, 0, 123, 125, 5, 84, 0, 0, 124, 126, 3, 18, 9, 0, 125, 124, 1, 0, 0, 0, 125, 126, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 128, 5, 120, 0, 0, 128, 17, 1, 0, 0, 0, 129, 133, 3, 20, 10, 0, 130, 133, 3, 34, 17, 0, 131, 133, 3, 22, 11, 0, 132, 129, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 132, 131, 1, 0, 0, 0, 133, 19, 1, 0, 0, 0, 134, 135, 3, 22, 11, 0, 135, 136, 5, 124, 0, 0, 136, 137, 3, 18, 9, 0, 137, 138, 5, 125, 0, 0, 138, 139, 3, 18, 9, 0, 139, 21, 1, 0, 0, 0, 140, 141, 6, 11, -1, 0, 141, 142, 3, 24, 12, 0, 142, 163, 1, 0, 0, 0, 143, 144, 10, 7, 0, 0, 144, 145, 5, 110, 0, 0, 145, 162, 3, 24, 12, 0, 146, 147, 10, 6, 0, 0, 147, 148, 5, 109, 0, 0, 148, 162, 3, 24, 12, 0, 149, 150, 10, 5, 0, 0, 150, 151, 5, 112, 0, 0, 151, 162, 3, 24, 12, 0, 152, 153, 10, 4, 0, 0, 153, 154, 5, 111, 0, 0, 154, 162, 3, 24, 12, 0, 155, 156, 10, 3, 0, 0, 156, 157, 5, 113, 0, 0, 157, 162, 3, 24, 12, 0, 158, 159, 10, 2, 0, 0, 159, 160, 5, 115, 0, 0, 160, 162, 3, 24, 12, 0, 161, 143, 1, 0, 0, 0, 161, 146, 1, 0, 0, 0, 161, 149, 1, 0, 0, 0, 161, 152, 1, 0, 0, 0, 161, 155, 1, 0, 0, 0, 161, 158, 1, 0, 0, 0, 162, 165, 1, 0, 0, 0, 163, 161, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 23, 1, 0, 0, 0, 165, 163, 1, 0, 0, 0, 166, 167, 6, 12, -1, 0, 167, 168, 3, 26, 13, 0, 168, 177, 1, 0, 0, 0, 169, 170, 10, 3, 0, 0, 170, 171, 5, 103, 0, 0, 171, 176, 3, 26, 13, 0, 172, 173, 10, 2, 0, 0, 173, 174, 5, 104, 0, 0, 174, 176, 3, 26, 13, 0, 175, 169, 1, 0, 0, 0, 175, 172, 1, 0, 0, 0, 176, 179, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 25, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 180, 181, 6, 13, -1, 0, 181, 182, 3, 28, 14, 0, 182, 194, 1, 0, 0, 0, 183, 184, 10, 4, 0, 0, 184, 185, 5, 105, 0, 0, 185, 193, 3, 28, 14, 0, 186, 187, 10, 3, 0, 0, 187, 188, 5, 106, 0, 0, 188, 193, 3, 28, 14, 0, 189, 190, 10, 2, 0, 0, 190, 191, 5, 107, 0, 0, 191, 193, 3, 28, 14, 0, 192, 183, 1, 0, 0, 0, 192, 186, 1, 0, 0, 0, 192, 189, 1, 0, 0, 0, 193, 196, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 27, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 197, 198, 3, 30, 15, 0, 198, 199, 5, 108, 0, 0, 199, 200, 3, 28, 14, 0, 200, 203, 1, 0, 0, 0, 201, 203, 3, 30, 15, 0, 202, 197, 1, 0, 0, 0, 202, 201, 1, 0, 0, 0, 203, 29, 1, 0, 0, 0, 204, 205, 5, 103, 0, 0, 205, 210, 3, 30, 15, 0, 206, 207, 5, 104, 0, 0, 207, 210, 3, 30, 15, 0, 208, 210, 3, 32, 16, 0, 209, 204, 1, 0, 0, 0, 209, 206, 1, 0, 0, 0, 209, 208, 1, 0, 0, 0, 210, 31, 1, 0, 0, 0, 211, 212, 6, 16, -1, 0, 212, 213, 3, 34, 17, 0, 213, 228, 1, 0, 0, 0, 214, 215, 10, 2, 0, 0, 215, 216, 5, 122, 0, 0, 216, 221, 3, 18, 9, 0, 217, 218, 5, 119, 0, 0, 218, 220, 3, 18, 9, 0, 219, 217, 1, 0, 0, 0, 220, 223, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 224, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 224, 225, 5, 123, 0, 0, 225, 227, 1, 0, 0, 0, 226, 214, 1, 0, 0, 0, 227, 230, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 33, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 267, 3, 38, 19, 0, 232, 267, 3, 40, 20, 0, 233, 267, 3, 42, 21, 0, 234, 267, 3, 44, 22, 0, 235, 267, 3, 46, 23, 0, 236, 267, 3, 48, 24, 0, 237, 267, 3, 50, 25, 0, 238, 267, 5, 130, 0, 0, 239, 267, 5, 129, 0, 0, 240, 267, 5, 128, 0, 0, 241, 242, 5, 117, 0, 0, 242, 243, 3, 18, 9, 0, 243, 244, 5, 118, 0, 0, 244, 267, 1, 0, 0, 0, 245, 246, 5, 116, 0, 0, 246, 247, 3, 18, 9, 0, 247, 248, 5, 116, 0, 0, 248, 267, 1, 0, 0, 0, 249, 250, 5, 122, 0, 0, 250, 255, 3, 18, 9, 0, 251, 252, 5, 119, 0, 0, 252, 254, 3, 18, 9, 0, 253, 251, 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, 5, 123, 0, 0, 259, 267, 1, 0, 0, 0, 260, 261, 5, 130, 0, 0, 261, 263, 5, 117, 0, 0, 262, 264, 3, 36, 18, 0, 263, 262, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 267, 5, 118, 0, 0, 266, 231, 1, 0, 0, 0, 266, 232, 1, 0, 0, 0, 266, 233, 1, 0, 0, 0, 266, 234, 1, 0, 0, 0, 266, 235, 1, 0, 0, 0, 266, 236, 1, 0, 0, 0, 266, 237, 1, 0, 0, 0, 266, 238, 1, 0, 0, 0, 266, 239, 1, 0, 0, 0, 266, 240, 1, 0, 0, 0, 266, 241, 1, 0, 0, 0, 266, 245, 1, 0, 0, 0, 266, 249, 1, 0, 0, 0, 266, 260, 1, 0, 0, 0, 267, 35, 1, 0, 0, 0, 268, 273, 3, 18, 9, 0, 269, 270, 5, 119, 0, 0, 270, 272, 3, 18, 9, 0, 271, 269, 1, 0, 0, 0, 272, 275, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 37, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 276, 277, 5, 102, 0, 0, 277, 278, 5, 117, 0, 0, 278, 279, 5, 118, 0, 0, 279, 39, 1, 0, 0, 0, 280, 281, 5, 1, 0, 0, 281, 282, 5, 117, 0, 0, 282, 283, 3, 18, 9, 0, 283, 284, 5, 118, 0, 0, 284, 550, 1, 0, 0, 0, 285, 286, 5, 2, 0, 0, 286, 287, 5, 117, 0, 0, 287, 288, 3, 18, 9, 0, 288, 289, 5, 118, 0, 0, 289, 550, 1, 0, 0, 0, 290, 291, 5, 3, 0, 0, 291, 292, 5, 117, 0, 0, 292, 293, 3, 18, 9, 0, 293, 294, 5, 118, 0, 0, 294, 550, 1, 0, 0, 0, 295, 296, 5, 4, 0, 0, 296, 297, 5, 117, 0, 0, 297, 298, 3, 18, 9, 0, 298, 299, 5, 118, 0, 0, 299, 550, 1, 0, 0, 0, 300, 301, 5, 5, 0, 0, 301, 302, 5, 117, 0, 0, 302, 303, 3, 18, 9, 0, 303, 304, 5, 118, 0, 0, 304, 550, 1, 0, 0, 0, 305, 306, 5, 6, 0, 0, 306, 307, 5, 117, 0, 0, 307, 308, 3, 18, 9, 0, 308, 309, 5, 118, 0, 0, 309, 550, 1, 0, 0, 0, 310, 311, 5, 8, 0, 0, 311, 312, 5, 117, 0, 0, 312, 313, 3, 18, 9, 0, 313, 314, 5, 118, 0, 0, 314, 550, 1, 0, 0, 0, 315, 316, 5, 9, 0, 0, 316, 317, 5, 117, 0, 0, 317, 318, 3, 18, 9, 0, 318, 319, 5, 118, 0, 0, 319, 550, 1, 0, 0, 0, 320, 321, 5, 10, 0, 0, 321, 322, 5, 117, 0, 0, 322, 323, 3, 18, 9, 0, 323, 324, 5, 118, 0, 0, 324, 550, 1, 0, 0, 0, 325, 326, 5, 11, 0, 0, 326, 327, 5, 117, 0, 0, 327, 328, 3, 18, 9, 0, 328, 329, 5, 118, 0, 0, 329, 550, 1, 0, 0, 0, 330, 331, 5, 12, 0, 0, 331, 332, 5, 117, 0, 0, 332, 333, 3, 18, 9, 0, 333, 334, 5, 118, 0, 0, 334, 550, 1, 0, 0, 0, 335, 336, 5, 13, 0, 0, 336, 337, 5, 117, 0, 0, 337, 338, 3, 18, 9, 0, 338, 339, 5, 118, 0, 0, 339, 550, 1, 0, 0, 0, 340, 341, 5, 14, 0, 0, 341, 342, 5, 117, 0, 0, 342, 343, 3, 18, 9, 0, 343, 344, 5, 118, 0, 0, 344, 550, 1, 0, 0, 0, 345, 346, 5, 15, 0, 0, 346, 347, 5, 117, 0, 0, 347, 348, 3, 18, 9, 0, 348, 349, 5, 118, 0, 0, 349, 550, 1, 0, 0, 0, 350, 351, 5, 16, 0, 0, 351, 352, 5, 117, 0, 0, 352, 353, 3, 18, 9, 0, 353, 354, 5, 118, 0, 0, 354, 550, 1, 0, 0, 0, 355, 356, 5, 17, 0, 0, 356, 357, 5, 117, 0, 0, 357, 358, 3, 18, 9, 0, 358, 359, 5, 118, 0, 0, 359, 550, 1, 0, 0, 0, 360, 361, 5, 18, 0, 0, 361, 362, 5, 117, 0, 0, 362, 363, 3, 18, 9, 0, 363, 364, 5, 118, 0, 0, 364, 550, 1, 0, 0, 0, 365, 366, 5, 23, 0, 0, 366, 367, 5, 117, 0, 0, 367, 368, 3, 18, 9, 0, 368, 369, 5, 118, 0, 0, 369, 550, 1, 0, 0, 0, 370, 371, 5, 24, 0, 0, 371, 372, 5, 117, 0, 0, 372, 373, 3, 18, 9, 0, 373, 374, 5, 118, 0, 0, 374, 550, 1, 0, 0, 0, 375, 376, 5, 25, 0, 0, 376, 377, 5, 117, 0, 0, 377, 378, 3, 18, 9, 0, 378, 379, 5, 118, 0, 0, 379, 550, 1, 0, 0, 0, 380, 381, 5, 26, 0, 0, 381, 382, 5, 117, 0, 0, 382, 383, 3, 18, 9, 0, 383, 384, 5, 118, 0, 0, 384, 550, 1, 0, 0, 0, 385, 386, 5, 27, 0, 0, 386, 387, 5, 117, 0, 0, 387, 388, 3, 18, 9, 0, 388, 389, 5, 118, 0, 0, 389, 550, 1, 0, 0, 0, 390, 391, 5, 28, 0, 0, 391, 392, 5, 117, 0, 0, 392, 393, 3, 18, 9, 0, 393, 394, 5, 118, 0, 0, 394, 550, 1, 0, 0, 0, 395, 396, 5, 30, 0, 0, 396, 397, 5, 117, 0, 0, 397, 398, 3, 18, 9, 0, 398, 399, 5, 118, 0, 0, 399, 550, 1, 0, 0, 0, 400, 401, 5, 32, 0, 0, 401, 402, 5, 117, 0, 0, 402, 403, 3, 18, 9, 0, 403, 404, 5, 118, 0, 0, 404, 550, 1, 0, 0, 0, 405, 406, 5, 33, 0, 0, 406, 407, 5, 117, 0, 0, 407, 408, 3, 18, 9, 0, 408, 409, 5, 118, 0, 0, 409, 550, 1, 0, 0, 0, 410, 411, 5, 34, 0, 0, 411, 412, 5, 117, 0, 0, 412, 413, 3, 18, 9, 0, 413, 414, 5, 118, 0, 0, 414, 550, 1, 0, 0, 0, 415, 416, 5, 35, 0, 0, 416, 417, 5, 117, 0, 0, 417, 418, 3, 18, 9, 0, 418, 419, 5, 118, 0, 0, 419, 550, 1, 0, 0, 0, 420, 421, 5, 41, 0, 0, 421, 422, 5, 117, 0, 0, 422, 423, 3, 18, 9, 0, 423, 424, 5, 118, 0, 0, 424, 550, 1, 0, 0, 0, 425, 426, 5, 42, 0, 0, 426, 427, 5, 117, 0, 0, 427, 428, 3, 18, 9, 0, 428, 429, 5, 118, 0, 0, 429, 550, 1, 0, 0, 0, 430, 431, 5, 43, 0, 0, 431, 432, 5, 117, 0, 0, 432, 433, 3, 18, 9, 0, 433, 434, 5, 118, 0, 0, 434, 550, 1, 0, 0, 0, 435, 436, 5, 44, 0, 0, 436, 437, 5, 117, 0, 0, 437, 438, 3, 18, 9, 0, 438, 439, 5, 118, 0, 0, 439, 550, 1, 0, 0, 0, 440, 441, 5, 45, 0, 0, 441, 442, 5, 117, 0, 0, 442, 443, 3, 18, 9, 0, 443, 444, 5, 118, 0, 0, 444, 550, 1, 0, 0, 0, 445, 446, 5, 36, 0, 0, 446, 447, 5, 117, 0, 0, 447, 448, 3, 18, 9, 0, 448, 449, 5, 118, 0, 0, 449, 550, 1, 0, 0, 0, 450, 451, 5, 55, 0, 0, 451, 452, 5, 117, 0, 0, 452, 453, 3, 18, 9, 0, 453, 454, 5, 118, 0, 0, 454, 550, 1, 0, 0, 0, 455, 456, 5, 56, 0, 0, 456, 457, 5, 117, 0, 0, 457, 458, 3, 18, 9, 0, 458, 459, 5, 118, 0, 0, 459, 550, 1, 0, 0, 0, 460, 461, 5, 57, 0, 0, 461, 462, 5, 117, 0, 0, 462, 463, 3, 18, 9, 0, 463, 464, 5, 118, 0, 0, 464, 550, 1, 0, 0, 0, 465, 466, 5, 58, 0, 0, 466, 467, 5, 117, 0, 0, 467, 468, 3, 18, 9, 0, 468, 469, 5, 118, 0, 0, 469, 550, 1, 0, 0, 0, 470, 471, 5, 59, 0, 0, 471, 472, 5, 117, 0, 0, 472, 473, 3, 18, 9, 0, 473, 474, 5, 118, 0, 0, 474, 550, 1, 0, 0, 0, 475, 476, 5, 100, 0, 0, 476, 477, 5, 117, 0, 0, 477, 478, 3, 18, 9, 0, 478, 479, 5, 118, 0, 0, 479, 550, 1, 0, 0, 0, 480, 481, 5, 90, 0, 0, 481, 482, 5, 117, 0, 0, 482, 483, 3, 18, 9, 0, 483, 484, 5, 118, 0, 0, 484, 550, 1, 0, 0, 0, 485, 486, 5, 91, 0, 0, 486, 487, 5, 117, 0, 0, 487, 488, 3, 18, 9, 0, 488, 489, 5, 118, 0, 0, 489, 550, 1, 0, 0, 0, 490, 491, 5, 65, 0, 0, 491, 492, 5, 117, 0, 0, 492, 493, 3, 18, 9, 0, 493, 494, 5, 118, 0, 0, 494, 550, 1, 0, 0, 0, 495, 496, 5, 66, 0, 0, 496, 497, 5, 117, 0, 0, 497, 498, 3, 18, 9, 0, 498, 499, 5, 118, 0, 0, 499, 550, 1, 0, 0, 0, 500, 501, 5, 67, 0, 0, 501, 502, 5, 117, 0, 0, 502, 505, 3, 18, 9, 0, 503, 504, 5, 119, 0, 0, 504, 506, 3, 18, 9, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 5, 118, 0, 0, 508, 550, 1, 0, 0, 0, 509, 510, 5, 69, 0, 0, 510, 511, 5, 117, 0, 0, 511, 512, 3, 18, 9, 0, 512, 513, 5, 118, 0, 0, 513, 550, 1, 0, 0, 0, 514, 515, 5, 70, 0, 0, 515, 516, 5, 117, 0, 0, 516, 517, 3, 18, 9, 0, 517, 518, 5, 118, 0, 0, 518, 550, 1, 0, 0, 0, 519, 520, 5, 71, 0, 0, 520, 521, 5, 117, 0, 0, 521, 522, 3, 18, 9, 0, 522, 523, 5, 118, 0, 0, 523, 550, 1, 0, 0, 0, 524, 525, 5, 72, 0, 0, 525, 526, 5, 117, 0, 0, 526, 527, 3, 18, 9, 0, 527, 528, 5, 118, 0, 0, 528, 550, 1, 0, 0, 0, 529, 530, 5, 86, 0, 0, 530, 531, 5, 117, 0, 0, 531, 532, 3, 18, 9, 0, 532, 533, 5, 118, 0, 0, 533, 550, 1, 0, 0, 0, 534, 535, 5, 87, 0, 0, 535, 536, 5, 117, 0, 0, 536, 537, 3, 18, 9, 0, 537, 538, 5, 118, 0, 0, 538, 550, 1, 0, 0, 0, 539, 540, 5, 88, 0, 0, 540, 541, 5, 117, 0, 0, 541, 542, 3, 18, 9, 0, 542, 543, 5, 118, 0, 0, 543, 550, 1, 0, 0, 0, 544, 545, 5, 89, 0, 0, 545, 546, 5, 117, 0, 0, 546, 547, 3, 18, 9, 0, 547, 548, 5, 118, 0, 0, 548, 550, 1, 0, 0, 0, 549, 280, 1, 0, 0, 0, 549, 285, 1, 0, 0, 0, 549, 290, 1, 0, 0, 0, 549, 295, 1, 0, 0, 0, 549, 300, 1, 0, 0, 0, 549, 305, 1, 0, 0, 0, 549, 310, 1, 0, 0, 0, 549, 315, 1, 0, 0, 0, 549, 320, 1, 0, 0, 0, 549, 325, 1, 0, 0, 0, 549, 330, 1, 0, 0, 0, 549, 335, 1, 0, 0, 0, 549, 340, 1, 0, 0, 0, 549, 345, 1, 0, 0, 0, 549, 350, 1, 0, 0, 0, 549, 355, 1, 0, 0, 0, 549, 360, 1, 0, 0, 0, 549, 365, 1, 0, 0, 0, 549, 370, 1, 0, 0, 0, 549, 375, 1, 0, 0, 0, 549, 380, 1, 0, 0, 0, 549, 385, 1, 0, 0, 0, 549, 390, 1, 0, 0, 0, 549, 395, 1, 0, 0, 0, 549, 400, 1, 0, 0, 0, 549, 405, 1, 0, 0, 0, 549, 410, 1, 0, 0, 0, 549, 415, 1, 0, 0, 0, 549, 420, 1, 0, 0, 0, 549, 425, 1, 0, 0, 0, 549, 430, 1, 0, 0, 0, 549, 435, 1, 0, 0, 0, 549, 440, 1, 0, 0, 0, 549, 445, 1, 0, 0, 0, 549, 450, 1, 0, 0, 0, 549, 455, 1, 0, 0, 0, 549, 460, 1, 0, 0, 0, 549, 465, 1, 0, 0, 0, 549, 470, 1, 0, 0, 0, 549, 475, 1, 0, 0, 0, 549, 480, 1, 0, 0, 0, 549, 485, 1, 0, 0, 0, 549, 490, 1, 0, 0, 0, 549, 495, 1, 0, 0, 0, 549, 500, 1, 0, 0, 0, 549, 509, 1, 0, 0, 0, 549, 514, 1, 0, 0, 0, 549, 519, 1, 0, 0, 0, 549, 524, 1, 0, 0, 0, 549, 529, 1, 0, 0, 0, 549, 534, 1, 0, 0, 0, 549, 539, 1, 0, 0, 0, 549, 544, 1, 0, 0, 0, 550, 41, 1, 0, 0, 0, 551, 552, 5, 29, 0, 0, 552, 553, 5, 117, 0, 0, 553, 554, 3, 18, 9, 0, 554, 555, 5, 119, 0, 0, 555, 556, 3, 18, 9, 0, 556, 557, 5, 118, 0, 0, 557, 710, 1, 0, 0, 0, 558, 559, 5, 7, 0, 0, 559, 560, 5, 117, 0, 0, 560, 561, 3, 18, 9, 0, 561, 562, 5, 119, 0, 0, 562, 563, 3, 18, 9, 0, 563, 564, 5, 118, 0, 0, 564, 710, 1, 0, 0, 0, 565, 566, 5, 21, 0, 0, 566, 567, 5, 117, 0, 0, 567, 568, 3, 18, 9, 0, 568, 569, 5, 119, 0, 0, 569, 570, 3, 18, 9, 0, 570, 571, 5, 118, 0, 0, 571, 710, 1, 0, 0, 0, 572, 573, 5, 22, 0, 0, 573, 574, 5, 117, 0, 0, 574, 575, 3, 18, 9, 0, 575, 576, 5, 119, 0, 0, 576, 577, 3, 18, 9, 0, 577, 578, 5, 118, 0, 0, 578, 710, 1, 0, 0, 0, 579, 580, 5, 39, 0, 0, 580, 581, 5, 117, 0, 0, 581, 582, 3, 18, 9, 0, 582, 583, 5, 119, 0, 0, 583, 584, 3, 18, 9, 0, 584, 585, 5, 118, 0, 0, 585, 710, 1, 0, 0, 0, 586, 587, 5, 53, 0, 0, 587, 588, 5, 117, 0, 0, 588, 589, 3, 18, 9, 0, 589, 590, 5, 119, 0, 0, 590, 591, 3, 18, 9, 0, 591, 592, 5, 118, 0, 0, 592, 710, 1, 0, 0, 0, 593, 594, 5, 54, 0, 0, 594, 595, 5, 117, 0, 0, 595, 596, 3, 18, 9, 0, 596, 597, 5, 119, 0, 0, 597, 598, 3, 18, 9, 0, 598, 599, 5, 118, 0, 0, 599, 710, 1, 0, 0, 0, 600, 601, 5, 60, 0, 0, 601, 602, 5, 117, 0, 0, 602, 603, 3, 18, 9, 0, 603, 604, 5, 119, 0, 0, 604, 605, 3, 18, 9, 0, 605, 606, 5, 118, 0, 0, 606, 710, 1, 0, 0, 0, 607, 608, 5, 61, 0, 0, 608, 609, 5, 117, 0, 0, 609, 610, 3, 18, 9, 0, 610, 611, 5, 119, 0, 0, 611, 612, 3, 18, 9, 0, 612, 613, 5, 118, 0, 0, 613, 710, 1, 0, 0, 0, 614, 615, 5, 62, 0, 0, 615, 616, 5, 117, 0, 0, 616, 617, 3, 18, 9, 0, 617, 618, 5, 119, 0, 0, 618, 619, 3, 18, 9, 0, 619, 620, 5, 118, 0, 0, 620, 710, 1, 0, 0, 0, 621, 622, 5, 63, 0, 0, 622, 623, 5, 117, 0, 0, 623, 624, 3, 18, 9, 0, 624, 625, 5, 119, 0, 0, 625, 626, 3, 18, 9, 0, 626, 627, 5, 118, 0, 0, 627, 710, 1, 0, 0, 0, 628, 629, 5, 97, 0, 0, 629, 630, 5, 117, 0, 0, 630, 631, 3, 18, 9, 0, 631, 632, 5, 119, 0, 0, 632, 633, 3, 18, 9, 0, 633, 634, 5, 118, 0, 0, 634, 710, 1, 0, 0, 0, 635, 636, 5, 98, 0, 0, 636, 637, 5, 117, 0, 0, 637, 638, 3, 18, 9, 0, 638, 639, 5, 119, 0, 0, 639, 640, 3, 18, 9, 0, 640, 641, 5, 118, 0, 0, 641, 710, 1, 0, 0, 0, 642, 643, 5, 99, 0, 0, 643, 644, 5, 117, 0, 0, 644, 645, 3, 18, 9, 0, 645, 646, 5, 119, 0, 0, 646, 647, 3, 18, 9, 0, 647, 648, 5, 118, 0, 0, 648, 710, 1, 0, 0, 0, 649, 650, 5, 101, 0, 0, 650, 651, 5, 117, 0, 0, 651, 652, 3, 18, 9, 0, 652, 653, 5, 119, 0, 0, 653, 654, 3, 18, 9, 0, 654, 655, 5, 118, 0, 0, 655, 710, 1, 0, 0, 0, 656, 657, 5, 93, 0, 0, 657, 658, 5, 117, 0, 0, 658, 659, 3, 18, 9, 0, 659, 660, 5, 119, 0, 0, 660, 661, 3, 18, 9, 0, 661, 662, 5, 118, 0, 0, 662, 710, 1, 0, 0, 0, 663, 664, 5, 95, 0, 0, 664, 665, 5, 117, 0, 0, 665, 666, 3, 18, 9, 0, 666, 667, 5, 119, 0, 0, 667, 668, 3, 18, 9, 0, 668, 669, 5, 118, 0, 0, 669, 710, 1, 0, 0, 0, 670, 671, 5, 96, 0, 0, 671, 672, 5, 117, 0, 0, 672, 673, 3, 18, 9, 0, 673, 674, 5, 119, 0, 0, 674, 675, 3, 18, 9, 0, 675, 676, 5, 118, 0, 0, 676, 710, 1, 0, 0, 0, 677, 678, 5, 68, 0, 0, 678, 679, 5, 117, 0, 0, 679, 680, 3, 18, 9, 0, 680, 681, 5, 119, 0, 0, 681, 684, 3, 18, 9, 0, 682, 683, 5, 119, 0, 0, 683, 685, 3, 18, 9, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 5, 118, 0, 0, 687, 710, 1, 0, 0, 0, 688, 689, 5, 73, 0, 0, 689, 690, 5, 117, 0, 0, 690, 691, 3, 18, 9, 0, 691, 692, 5, 119, 0, 0, 692, 693, 3, 18, 9, 0, 693, 694, 5, 118, 0, 0, 694, 710, 1, 0, 0, 0, 695, 696, 5, 74, 0, 0, 696, 697, 5, 117, 0, 0, 697, 698, 3, 18, 9, 0, 698, 699, 5, 119, 0, 0, 699, 700, 3, 18, 9, 0, 700, 701, 5, 118, 0, 0, 701, 710, 1, 0, 0, 0, 702, 703, 5, 85, 0, 0, 703, 704, 5, 117, 0, 0, 704, 705, 3, 18, 9, 0, 705, 706, 5, 119, 0, 0, 706, 707, 3, 18, 9, 0, 707, 708, 5, 118, 0, 0, 708, 710, 1, 0, 0, 0, 709, 551, 1, 0, 0, 0, 709, 558, 1, 0, 0, 0, 709, 565, 1, 0, 0, 0, 709, 572, 1, 0, 0, 0, 709, 579, 1, 0, 0, 0, 709, 586, 1, 0, 0, 0, 709, 593, 1, 0, 0, 0, 709, 600, 1, 0, 0, 0, 709, 607, 1, 0, 0, 0, 709, 614, 1, 0, 0, 0, 709, 621, 1, 0, 0, 0, 709, 628, 1, 0, 0, 0, 709, 635, 1, 0, 0, 0, 709, 642, 1, 0, 0, 0, 709, 649, 1, 0, 0, 0, 709, 656, 1, 0, 0, 0, 709, 663, 1, 0, 0, 0, 709, 670, 1, 0, 0, 0, 709, 677, 1, 0, 0, 0, 709, 688, 1, 0, 0, 0, 709, 695, 1, 0, 0, 0, 709, 702, 1, 0, 0, 0, 710, 43, 1, 0, 0, 0, 711, 712, 5, 31, 0, 0, 712, 713, 5, 117, 0, 0, 713, 714, 3, 18, 9, 0, 714, 715, 5, 119, 0, 0, 715, 716, 3, 18, 9, 0, 716, 717, 5, 119, 0, 0, 717, 718, 3, 18, 9, 0, 718, 719, 5, 118, 0, 0, 719, 811, 1, 0, 0, 0, 720, 721, 5, 38, 0, 0, 721, 722, 5, 117, 0, 0, 722, 723, 3, 18, 9, 0, 723, 724, 5, 119, 0, 0, 724, 725, 3, 18, 9, 0, 725, 726, 5, 119, 0, 0, 726, 727, 3, 18, 9, 0, 727, 728, 5, 118, 0, 0, 728, 811, 1, 0, 0, 0, 729, 730, 5, 40, 0, 0, 730, 731, 5, 117, 0, 0, 731, 732, 3, 18, 9, 0, 732, 733, 5, 119, 0, 0, 733, 734, 3, 18, 9, 0, 734, 735, 5, 119, 0, 0, 735, 736, 3, 18, 9, 0, 736, 737, 5, 118, 0, 0, 737, 811, 1, 0, 0, 0, 738, 739, 5, 52, 0, 0, 739, 740, 5, 117, 0, 0, 740, 741, 3, 18, 9, 0, 741, 742, 5, 119, 0, 0, 742, 743, 3, 18, 9, 0, 743, 744, 5, 119, 0, 0, 744, 745, 3, 18, 9, 0, 745, 746, 5, 118, 0, 0, 746, 811, 1, 0, 0, 0, 747, 748, 5, 64, 0, 0, 748, 749, 5, 117, 0, 0, 749, 750, 3, 18, 9, 0, 750, 751, 5, 119, 0, 0, 751, 752, 3, 18, 9, 0, 752, 753, 5, 119, 0, 0, 753, 754, 3, 18, 9, 0, 754, 755, 5, 118, 0, 0, 755, 811, 1, 0, 0, 0, 756, 757, 5, 92, 0, 0, 757, 758, 5, 117, 0, 0, 758, 759, 3, 18, 9, 0, 759, 760, 5, 119, 0, 0, 760, 761, 3, 18, 9, 0, 761, 762, 5, 119, 0, 0, 762, 763, 3, 18, 9, 0, 763, 764, 5, 118, 0, 0, 764, 811, 1, 0, 0, 0, 765, 766, 5, 94, 0, 0, 766, 767, 5, 117, 0, 0, 767, 768, 3, 18, 9, 0, 768, 769, 5, 119, 0, 0, 769, 770, 3, 18, 9, 0, 770, 771, 5, 119, 0, 0, 771, 772, 3, 18, 9, 0, 772, 773, 5, 118, 0, 0, 773, 811, 1, 0, 0, 0, 774, 775, 5, 75, 0, 0, 775, 776, 5, 117, 0, 0, 776, 777, 3, 18, 9, 0, 777, 778, 5, 119, 0, 0, 778, 779, 3, 18, 9, 0, 779, 780, 5, 119, 0, 0, 780, 781, 3, 18, 9, 0, 781, 782, 5, 118, 0, 0, 782, 811, 1, 0, 0, 0, 783, 784, 5, 76, 0, 0, 784, 785, 5, 117, 0, 0, 785, 786, 3, 18, 9, 0, 786, 787, 5, 119, 0, 0, 787, 788, 3, 18, 9, 0, 788, 789, 5, 119, 0, 0, 789, 790, 3, 18, 9, 0, 790, 791, 5, 118, 0, 0, 791, 811, 1, 0, 0, 0, 792, 793, 5, 77, 0, 0, 793, 794, 5, 117, 0, 0, 794, 795, 3, 18, 9, 0, 795, 796, 5, 119, 0, 0, 796, 797, 3, 18, 9, 0, 797, 798, 5, 119, 0, 0, 798, 799, 3, 18, 9, 0, 799, 800, 5, 118, 0, 0, 800, 811, 1, 0, 0, 0, 801, 802, 5, 78, 0, 0, 802, 803, 5, 117, 0, 0, 803, 804, 3, 18, 9, 0, 804, 805, 5, 119, 0, 0, 805, 806, 3, 18, 9, 0, 806, 807, 5, 119, 0, 0, 807, 808, 3, 18, 9, 0, 808, 809, 5, 118, 0, 0, 809, 811, 1, 0, 0, 0, 810, 711, 1, 0, 0, 0, 810, 720, 1, 0, 0, 0, 810, 729, 1, 0, 0, 0, 810, 738, 1, 0, 0, 0, 810, 747, 1, 0, 0, 0, 810, 756, 1, 0, 0, 0, 810, 765, 1, 0, 0, 0, 810, 774, 1, 0, 0, 0, 810, 783, 1, 0, 0, 0, 810, 792, 1, 0, 0, 0, 810, 801, 1, 0, 0, 0, 811, 45, 1, 0, 0, 0, 812, 813, 5, 49, 0, 0, 813, 814, 5, 117, 0, 0, 814, 815, 3, 18, 9, 0, 815, 816, 5, 119, 0, 0, 816, 817, 3, 18, 9, 0, 817, 818, 5, 119, 0, 0, 818, 819, 3, 18, 9, 0, 819, 820, 5, 119, 0, 0, 820, 821, 3, 18, 9, 0, 821, 822, 5, 118, 0, 0, 822, 846, 1, 0, 0, 0, 823, 824, 5, 37, 0, 0, 824, 825, 5, 117, 0, 0, 825, 826, 3, 18, 9, 0, 826, 827, 5, 119, 0, 0, 827, 828, 3, 18, 9, 0, 828, 829, 5, 119, 0, 0, 829, 830, 3, 18, 9, 0, 830, 831, 5, 119, 0, 0, 831, 832, 3, 18, 9, 0, 832, 833, 5, 118, 0, 0, 833, 846, 1, 0, 0, 0, 834, 835, 5, 79, 0, 0, 835, 836, 5, 117, 0, 0, 836, 837, 3, 18, 9, 0, 837, 838, 5, 119, 0, 0, 838, 839, 3, 18, 9, 0, 839, 840, 5, 119, 0, 0, 840, 841, 3, 18, 9, 0, 841, 842, 5, 119, 0, 0, 842, 843, 3, 18, 9, 0, 843, 844, 5, 118, 0, 0, 844, 846, 1, 0, 0, 0, 845, 812, 1, 0, 0, 0, 845, 823, 1, 0, 0, 0, 845, 834, 1, 0, 0, 0, 846, 47, 1, 0, 0, 0, 847, 848, 5, 80, 0, 0, 848, 849, 5, 117, 0, 0, 849, 850, 3, 18, 9, 0, 850, 851, 5, 119, 0, 0, 851, 852, 3, 18, 9, 0, 852, 853, 5, 119, 0, 0, 853, 854, 3, 18, 9, 0, 854, 855, 5, 119, 0, 0, 855, 856, 3, 18, 9, 0, 856, 857, 5, 119, 0, 0, 857, 858, 3, 18, 9, 0, 858, 859, 5, 118, 0, 0, 859, 49, 1, 0, 0, 0, 860, 861, 5, 19, 0, 0, 861, 862, 5, 117, 0, 0, 862, 867, 3, 18, 9, 0, 863, 864, 5, 119, 0, 0, 864, 866, 3, 18, 9, 0, 865, 863, 1, 0, 0, 0, 866, 869, 1, 0, 0, 0, 867, 865, 1, 0, 0, 0, 867, 868, 1, 0, 0, 0, 868, 870, 1, 0, 0, 0, 869, 867, 1, 0, 0, 0, 870, 871, 5, 118, 0, 0, 871, 932, 1, 0, 0, 0, 872, 873, 5, 20, 0, 0, 873, 874, 5, 117, 0, 0, 874, 879, 3, 18, 9, 0, 875, 876, 5, 119, 0, 0, 876, 878, 3, 18, 9, 0, 877, 875, 1, 0, 0, 0, 878, 881, 1, 0, 0, 0, 879, 877, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 882, 1, 0, 0, 0, 881, 879, 1, 0, 0, 0, 882, 883, 5, 118, 0, 0, 883, 932, 1, 0, 0, 0, 884, 885, 5, 46, 0, 0, 885, 886, 5, 117, 0, 0, 886, 889, 3, 18, 9, 0, 887, 888, 5, 119, 0, 0, 888, 890, 3, 18, 9, 0, 889, 887, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 894, 5, 118, 0, 0, 894, 932, 1, 0, 0, 0, 895, 896, 5, 47, 0, 0, 896, 897, 5, 117, 0, 0, 897, 900, 3, 18, 9, 0, 898, 899, 5, 119, 0, 0, 899, 901, 3, 18, 9, 0, 900, 898, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 905, 5, 118, 0, 0, 905, 932, 1, 0, 0, 0, 906, 907, 5, 48, 0, 0, 907, 908, 5, 117, 0, 0, 908, 911, 3, 18, 9, 0, 909, 910, 5, 119, 0, 0, 910, 912, 3, 18, 9, 0, 911, 909, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 911, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 915, 1, 0, 0, 0, 915, 916, 5, 118, 0, 0, 916, 932, 1, 0, 0, 0, 917, 918, 5, 50, 0, 0, 918, 919, 5, 117, 0, 0, 919, 920, 3, 18, 9, 0, 920, 921, 5, 119, 0, 0, 921, 922, 3, 18, 9, 0, 922, 923, 5, 118, 0, 0, 923, 932, 1, 0, 0, 0, 924, 925, 5, 51, 0, 0, 925, 926, 5, 117, 0, 0, 926, 927, 3, 18, 9, 0, 927, 928, 5, 119, 0, 0, 928, 929, 3, 18, 9, 0, 929, 930, 5, 118, 0, 0, 930, 932, 1, 0, 0, 0, 931, 860, 1, 0, 0, 0, 931, 872, 1, 0, 0, 0, 931, 884, 1, 0, 0, 0, 931, 895, 1, 0, 0, 0, 931, 906, 1, 0, 0, 0, 931, 917, 1, 0, 0, 0, 931, 924, 1, 0, 0, 0, 932, 51, 1, 0, 0, 0, 36, 55, 57, 66, 72, 86, 97, 106, 118, 125, 132, 161, 163, 175, 177, 192, 194, 202, 209, 221, 228, 255, 263, 266, 273, 505, 549, 684, 709, 810, 845, 867, 879, 891, 902, 913, 931] \ No newline at end of file +[4, 1, 135, 946, 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, 1, 0, 1, 0, 1, 0, 5, 0, 60, 8, 0, 10, 0, 12, 0, 63, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 71, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 77, 8, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 5, 3, 89, 8, 3, 10, 3, 12, 3, 92, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 104, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 113, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 5, 7, 123, 8, 7, 10, 7, 12, 7, 126, 9, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 3, 10, 138, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 3, 11, 145, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 174, 8, 13, 10, 13, 12, 13, 177, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 188, 8, 14, 10, 14, 12, 14, 191, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 205, 8, 15, 10, 15, 12, 15, 208, 9, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 215, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 222, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 232, 8, 18, 10, 18, 12, 18, 235, 9, 18, 1, 18, 1, 18, 5, 18, 239, 8, 18, 10, 18, 12, 18, 242, 9, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 266, 8, 19, 10, 19, 12, 19, 269, 9, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 276, 8, 19, 1, 19, 3, 19, 279, 8, 19, 1, 20, 1, 20, 1, 20, 5, 20, 284, 8, 20, 10, 20, 12, 20, 287, 9, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 518, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 562, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 697, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 722, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 823, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 858, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 878, 8, 27, 10, 27, 12, 27, 881, 9, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 890, 8, 27, 10, 27, 12, 27, 893, 9, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 4, 27, 902, 8, 27, 11, 27, 12, 27, 903, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 4, 27, 913, 8, 27, 11, 27, 12, 27, 914, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 4, 27, 924, 8, 27, 11, 27, 12, 27, 925, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 944, 8, 27, 1, 27, 0, 4, 26, 28, 30, 36, 28, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 0, 0, 1065, 0, 61, 1, 0, 0, 0, 2, 67, 1, 0, 0, 0, 4, 80, 1, 0, 0, 0, 6, 85, 1, 0, 0, 0, 8, 103, 1, 0, 0, 0, 10, 105, 1, 0, 0, 0, 12, 114, 1, 0, 0, 0, 14, 120, 1, 0, 0, 0, 16, 129, 1, 0, 0, 0, 18, 132, 1, 0, 0, 0, 20, 135, 1, 0, 0, 0, 22, 144, 1, 0, 0, 0, 24, 146, 1, 0, 0, 0, 26, 152, 1, 0, 0, 0, 28, 178, 1, 0, 0, 0, 30, 192, 1, 0, 0, 0, 32, 214, 1, 0, 0, 0, 34, 221, 1, 0, 0, 0, 36, 223, 1, 0, 0, 0, 38, 278, 1, 0, 0, 0, 40, 280, 1, 0, 0, 0, 42, 288, 1, 0, 0, 0, 44, 561, 1, 0, 0, 0, 46, 721, 1, 0, 0, 0, 48, 822, 1, 0, 0, 0, 50, 857, 1, 0, 0, 0, 52, 859, 1, 0, 0, 0, 54, 943, 1, 0, 0, 0, 56, 60, 3, 2, 1, 0, 57, 60, 3, 4, 2, 0, 58, 60, 3, 8, 4, 0, 59, 56, 1, 0, 0, 0, 59, 57, 1, 0, 0, 0, 59, 58, 1, 0, 0, 0, 60, 63, 1, 0, 0, 0, 61, 59, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 64, 1, 0, 0, 0, 63, 61, 1, 0, 0, 0, 64, 65, 3, 22, 11, 0, 65, 66, 5, 0, 0, 1, 66, 1, 1, 0, 0, 0, 67, 68, 5, 132, 0, 0, 68, 70, 5, 119, 0, 0, 69, 71, 3, 6, 3, 0, 70, 69, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 73, 5, 120, 0, 0, 73, 76, 5, 123, 0, 0, 74, 77, 3, 14, 7, 0, 75, 77, 3, 22, 11, 0, 76, 74, 1, 0, 0, 0, 76, 75, 1, 0, 0, 0, 77, 78, 1, 0, 0, 0, 78, 79, 5, 122, 0, 0, 79, 3, 1, 0, 0, 0, 80, 81, 5, 132, 0, 0, 81, 82, 5, 116, 0, 0, 82, 83, 3, 22, 11, 0, 83, 84, 5, 122, 0, 0, 84, 5, 1, 0, 0, 0, 85, 90, 5, 132, 0, 0, 86, 87, 5, 121, 0, 0, 87, 89, 5, 132, 0, 0, 88, 86, 1, 0, 0, 0, 89, 92, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 90, 91, 1, 0, 0, 0, 91, 7, 1, 0, 0, 0, 92, 90, 1, 0, 0, 0, 93, 104, 3, 10, 5, 0, 94, 104, 3, 12, 6, 0, 95, 104, 3, 14, 7, 0, 96, 104, 3, 16, 8, 0, 97, 104, 3, 18, 9, 0, 98, 104, 3, 20, 10, 0, 99, 104, 3, 4, 2, 0, 100, 101, 3, 22, 11, 0, 101, 102, 5, 122, 0, 0, 102, 104, 1, 0, 0, 0, 103, 93, 1, 0, 0, 0, 103, 94, 1, 0, 0, 0, 103, 95, 1, 0, 0, 0, 103, 96, 1, 0, 0, 0, 103, 97, 1, 0, 0, 0, 103, 98, 1, 0, 0, 0, 103, 99, 1, 0, 0, 0, 103, 100, 1, 0, 0, 0, 104, 9, 1, 0, 0, 0, 105, 106, 5, 81, 0, 0, 106, 107, 5, 119, 0, 0, 107, 108, 3, 22, 11, 0, 108, 109, 5, 120, 0, 0, 109, 112, 3, 8, 4, 0, 110, 111, 5, 82, 0, 0, 111, 113, 3, 8, 4, 0, 112, 110, 1, 0, 0, 0, 112, 113, 1, 0, 0, 0, 113, 11, 1, 0, 0, 0, 114, 115, 5, 83, 0, 0, 115, 116, 5, 119, 0, 0, 116, 117, 3, 22, 11, 0, 117, 118, 5, 120, 0, 0, 118, 119, 3, 8, 4, 0, 119, 13, 1, 0, 0, 0, 120, 124, 5, 128, 0, 0, 121, 123, 3, 8, 4, 0, 122, 121, 1, 0, 0, 0, 123, 126, 1, 0, 0, 0, 124, 122, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 127, 1, 0, 0, 0, 126, 124, 1, 0, 0, 0, 127, 128, 5, 129, 0, 0, 128, 15, 1, 0, 0, 0, 129, 130, 5, 103, 0, 0, 130, 131, 5, 122, 0, 0, 131, 17, 1, 0, 0, 0, 132, 133, 5, 104, 0, 0, 133, 134, 5, 122, 0, 0, 134, 19, 1, 0, 0, 0, 135, 137, 5, 84, 0, 0, 136, 138, 3, 22, 11, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 140, 5, 122, 0, 0, 140, 21, 1, 0, 0, 0, 141, 145, 3, 24, 12, 0, 142, 145, 3, 38, 19, 0, 143, 145, 3, 26, 13, 0, 144, 141, 1, 0, 0, 0, 144, 142, 1, 0, 0, 0, 144, 143, 1, 0, 0, 0, 145, 23, 1, 0, 0, 0, 146, 147, 3, 26, 13, 0, 147, 148, 5, 126, 0, 0, 148, 149, 3, 22, 11, 0, 149, 150, 5, 127, 0, 0, 150, 151, 3, 22, 11, 0, 151, 25, 1, 0, 0, 0, 152, 153, 6, 13, -1, 0, 153, 154, 3, 28, 14, 0, 154, 175, 1, 0, 0, 0, 155, 156, 10, 7, 0, 0, 156, 157, 5, 112, 0, 0, 157, 174, 3, 28, 14, 0, 158, 159, 10, 6, 0, 0, 159, 160, 5, 111, 0, 0, 160, 174, 3, 28, 14, 0, 161, 162, 10, 5, 0, 0, 162, 163, 5, 114, 0, 0, 163, 174, 3, 28, 14, 0, 164, 165, 10, 4, 0, 0, 165, 166, 5, 113, 0, 0, 166, 174, 3, 28, 14, 0, 167, 168, 10, 3, 0, 0, 168, 169, 5, 115, 0, 0, 169, 174, 3, 28, 14, 0, 170, 171, 10, 2, 0, 0, 171, 172, 5, 117, 0, 0, 172, 174, 3, 28, 14, 0, 173, 155, 1, 0, 0, 0, 173, 158, 1, 0, 0, 0, 173, 161, 1, 0, 0, 0, 173, 164, 1, 0, 0, 0, 173, 167, 1, 0, 0, 0, 173, 170, 1, 0, 0, 0, 174, 177, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 27, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 178, 179, 6, 14, -1, 0, 179, 180, 3, 30, 15, 0, 180, 189, 1, 0, 0, 0, 181, 182, 10, 3, 0, 0, 182, 183, 5, 105, 0, 0, 183, 188, 3, 30, 15, 0, 184, 185, 10, 2, 0, 0, 185, 186, 5, 106, 0, 0, 186, 188, 3, 30, 15, 0, 187, 181, 1, 0, 0, 0, 187, 184, 1, 0, 0, 0, 188, 191, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 29, 1, 0, 0, 0, 191, 189, 1, 0, 0, 0, 192, 193, 6, 15, -1, 0, 193, 194, 3, 32, 16, 0, 194, 206, 1, 0, 0, 0, 195, 196, 10, 4, 0, 0, 196, 197, 5, 107, 0, 0, 197, 205, 3, 32, 16, 0, 198, 199, 10, 3, 0, 0, 199, 200, 5, 108, 0, 0, 200, 205, 3, 32, 16, 0, 201, 202, 10, 2, 0, 0, 202, 203, 5, 109, 0, 0, 203, 205, 3, 32, 16, 0, 204, 195, 1, 0, 0, 0, 204, 198, 1, 0, 0, 0, 204, 201, 1, 0, 0, 0, 205, 208, 1, 0, 0, 0, 206, 204, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 31, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 209, 210, 3, 34, 17, 0, 210, 211, 5, 110, 0, 0, 211, 212, 3, 32, 16, 0, 212, 215, 1, 0, 0, 0, 213, 215, 3, 34, 17, 0, 214, 209, 1, 0, 0, 0, 214, 213, 1, 0, 0, 0, 215, 33, 1, 0, 0, 0, 216, 217, 5, 105, 0, 0, 217, 222, 3, 34, 17, 0, 218, 219, 5, 106, 0, 0, 219, 222, 3, 34, 17, 0, 220, 222, 3, 36, 18, 0, 221, 216, 1, 0, 0, 0, 221, 218, 1, 0, 0, 0, 221, 220, 1, 0, 0, 0, 222, 35, 1, 0, 0, 0, 223, 224, 6, 18, -1, 0, 224, 225, 3, 38, 19, 0, 225, 240, 1, 0, 0, 0, 226, 227, 10, 2, 0, 0, 227, 228, 5, 124, 0, 0, 228, 233, 3, 22, 11, 0, 229, 230, 5, 121, 0, 0, 230, 232, 3, 22, 11, 0, 231, 229, 1, 0, 0, 0, 232, 235, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 236, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 236, 237, 5, 125, 0, 0, 237, 239, 1, 0, 0, 0, 238, 226, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 37, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 243, 279, 3, 42, 21, 0, 244, 279, 3, 44, 22, 0, 245, 279, 3, 46, 23, 0, 246, 279, 3, 48, 24, 0, 247, 279, 3, 50, 25, 0, 248, 279, 3, 52, 26, 0, 249, 279, 3, 54, 27, 0, 250, 279, 5, 132, 0, 0, 251, 279, 5, 131, 0, 0, 252, 279, 5, 130, 0, 0, 253, 254, 5, 119, 0, 0, 254, 255, 3, 22, 11, 0, 255, 256, 5, 120, 0, 0, 256, 279, 1, 0, 0, 0, 257, 258, 5, 118, 0, 0, 258, 259, 3, 22, 11, 0, 259, 260, 5, 118, 0, 0, 260, 279, 1, 0, 0, 0, 261, 262, 5, 124, 0, 0, 262, 267, 3, 22, 11, 0, 263, 264, 5, 121, 0, 0, 264, 266, 3, 22, 11, 0, 265, 263, 1, 0, 0, 0, 266, 269, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 270, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 270, 271, 5, 125, 0, 0, 271, 279, 1, 0, 0, 0, 272, 273, 5, 132, 0, 0, 273, 275, 5, 119, 0, 0, 274, 276, 3, 40, 20, 0, 275, 274, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 279, 5, 120, 0, 0, 278, 243, 1, 0, 0, 0, 278, 244, 1, 0, 0, 0, 278, 245, 1, 0, 0, 0, 278, 246, 1, 0, 0, 0, 278, 247, 1, 0, 0, 0, 278, 248, 1, 0, 0, 0, 278, 249, 1, 0, 0, 0, 278, 250, 1, 0, 0, 0, 278, 251, 1, 0, 0, 0, 278, 252, 1, 0, 0, 0, 278, 253, 1, 0, 0, 0, 278, 257, 1, 0, 0, 0, 278, 261, 1, 0, 0, 0, 278, 272, 1, 0, 0, 0, 279, 39, 1, 0, 0, 0, 280, 285, 3, 22, 11, 0, 281, 282, 5, 121, 0, 0, 282, 284, 3, 22, 11, 0, 283, 281, 1, 0, 0, 0, 284, 287, 1, 0, 0, 0, 285, 283, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 41, 1, 0, 0, 0, 287, 285, 1, 0, 0, 0, 288, 289, 5, 102, 0, 0, 289, 290, 5, 119, 0, 0, 290, 291, 5, 120, 0, 0, 291, 43, 1, 0, 0, 0, 292, 293, 5, 1, 0, 0, 293, 294, 5, 119, 0, 0, 294, 295, 3, 22, 11, 0, 295, 296, 5, 120, 0, 0, 296, 562, 1, 0, 0, 0, 297, 298, 5, 2, 0, 0, 298, 299, 5, 119, 0, 0, 299, 300, 3, 22, 11, 0, 300, 301, 5, 120, 0, 0, 301, 562, 1, 0, 0, 0, 302, 303, 5, 3, 0, 0, 303, 304, 5, 119, 0, 0, 304, 305, 3, 22, 11, 0, 305, 306, 5, 120, 0, 0, 306, 562, 1, 0, 0, 0, 307, 308, 5, 4, 0, 0, 308, 309, 5, 119, 0, 0, 309, 310, 3, 22, 11, 0, 310, 311, 5, 120, 0, 0, 311, 562, 1, 0, 0, 0, 312, 313, 5, 5, 0, 0, 313, 314, 5, 119, 0, 0, 314, 315, 3, 22, 11, 0, 315, 316, 5, 120, 0, 0, 316, 562, 1, 0, 0, 0, 317, 318, 5, 6, 0, 0, 318, 319, 5, 119, 0, 0, 319, 320, 3, 22, 11, 0, 320, 321, 5, 120, 0, 0, 321, 562, 1, 0, 0, 0, 322, 323, 5, 8, 0, 0, 323, 324, 5, 119, 0, 0, 324, 325, 3, 22, 11, 0, 325, 326, 5, 120, 0, 0, 326, 562, 1, 0, 0, 0, 327, 328, 5, 9, 0, 0, 328, 329, 5, 119, 0, 0, 329, 330, 3, 22, 11, 0, 330, 331, 5, 120, 0, 0, 331, 562, 1, 0, 0, 0, 332, 333, 5, 10, 0, 0, 333, 334, 5, 119, 0, 0, 334, 335, 3, 22, 11, 0, 335, 336, 5, 120, 0, 0, 336, 562, 1, 0, 0, 0, 337, 338, 5, 11, 0, 0, 338, 339, 5, 119, 0, 0, 339, 340, 3, 22, 11, 0, 340, 341, 5, 120, 0, 0, 341, 562, 1, 0, 0, 0, 342, 343, 5, 12, 0, 0, 343, 344, 5, 119, 0, 0, 344, 345, 3, 22, 11, 0, 345, 346, 5, 120, 0, 0, 346, 562, 1, 0, 0, 0, 347, 348, 5, 13, 0, 0, 348, 349, 5, 119, 0, 0, 349, 350, 3, 22, 11, 0, 350, 351, 5, 120, 0, 0, 351, 562, 1, 0, 0, 0, 352, 353, 5, 14, 0, 0, 353, 354, 5, 119, 0, 0, 354, 355, 3, 22, 11, 0, 355, 356, 5, 120, 0, 0, 356, 562, 1, 0, 0, 0, 357, 358, 5, 15, 0, 0, 358, 359, 5, 119, 0, 0, 359, 360, 3, 22, 11, 0, 360, 361, 5, 120, 0, 0, 361, 562, 1, 0, 0, 0, 362, 363, 5, 16, 0, 0, 363, 364, 5, 119, 0, 0, 364, 365, 3, 22, 11, 0, 365, 366, 5, 120, 0, 0, 366, 562, 1, 0, 0, 0, 367, 368, 5, 17, 0, 0, 368, 369, 5, 119, 0, 0, 369, 370, 3, 22, 11, 0, 370, 371, 5, 120, 0, 0, 371, 562, 1, 0, 0, 0, 372, 373, 5, 18, 0, 0, 373, 374, 5, 119, 0, 0, 374, 375, 3, 22, 11, 0, 375, 376, 5, 120, 0, 0, 376, 562, 1, 0, 0, 0, 377, 378, 5, 23, 0, 0, 378, 379, 5, 119, 0, 0, 379, 380, 3, 22, 11, 0, 380, 381, 5, 120, 0, 0, 381, 562, 1, 0, 0, 0, 382, 383, 5, 24, 0, 0, 383, 384, 5, 119, 0, 0, 384, 385, 3, 22, 11, 0, 385, 386, 5, 120, 0, 0, 386, 562, 1, 0, 0, 0, 387, 388, 5, 25, 0, 0, 388, 389, 5, 119, 0, 0, 389, 390, 3, 22, 11, 0, 390, 391, 5, 120, 0, 0, 391, 562, 1, 0, 0, 0, 392, 393, 5, 26, 0, 0, 393, 394, 5, 119, 0, 0, 394, 395, 3, 22, 11, 0, 395, 396, 5, 120, 0, 0, 396, 562, 1, 0, 0, 0, 397, 398, 5, 27, 0, 0, 398, 399, 5, 119, 0, 0, 399, 400, 3, 22, 11, 0, 400, 401, 5, 120, 0, 0, 401, 562, 1, 0, 0, 0, 402, 403, 5, 28, 0, 0, 403, 404, 5, 119, 0, 0, 404, 405, 3, 22, 11, 0, 405, 406, 5, 120, 0, 0, 406, 562, 1, 0, 0, 0, 407, 408, 5, 30, 0, 0, 408, 409, 5, 119, 0, 0, 409, 410, 3, 22, 11, 0, 410, 411, 5, 120, 0, 0, 411, 562, 1, 0, 0, 0, 412, 413, 5, 32, 0, 0, 413, 414, 5, 119, 0, 0, 414, 415, 3, 22, 11, 0, 415, 416, 5, 120, 0, 0, 416, 562, 1, 0, 0, 0, 417, 418, 5, 33, 0, 0, 418, 419, 5, 119, 0, 0, 419, 420, 3, 22, 11, 0, 420, 421, 5, 120, 0, 0, 421, 562, 1, 0, 0, 0, 422, 423, 5, 34, 0, 0, 423, 424, 5, 119, 0, 0, 424, 425, 3, 22, 11, 0, 425, 426, 5, 120, 0, 0, 426, 562, 1, 0, 0, 0, 427, 428, 5, 35, 0, 0, 428, 429, 5, 119, 0, 0, 429, 430, 3, 22, 11, 0, 430, 431, 5, 120, 0, 0, 431, 562, 1, 0, 0, 0, 432, 433, 5, 41, 0, 0, 433, 434, 5, 119, 0, 0, 434, 435, 3, 22, 11, 0, 435, 436, 5, 120, 0, 0, 436, 562, 1, 0, 0, 0, 437, 438, 5, 42, 0, 0, 438, 439, 5, 119, 0, 0, 439, 440, 3, 22, 11, 0, 440, 441, 5, 120, 0, 0, 441, 562, 1, 0, 0, 0, 442, 443, 5, 43, 0, 0, 443, 444, 5, 119, 0, 0, 444, 445, 3, 22, 11, 0, 445, 446, 5, 120, 0, 0, 446, 562, 1, 0, 0, 0, 447, 448, 5, 44, 0, 0, 448, 449, 5, 119, 0, 0, 449, 450, 3, 22, 11, 0, 450, 451, 5, 120, 0, 0, 451, 562, 1, 0, 0, 0, 452, 453, 5, 45, 0, 0, 453, 454, 5, 119, 0, 0, 454, 455, 3, 22, 11, 0, 455, 456, 5, 120, 0, 0, 456, 562, 1, 0, 0, 0, 457, 458, 5, 36, 0, 0, 458, 459, 5, 119, 0, 0, 459, 460, 3, 22, 11, 0, 460, 461, 5, 120, 0, 0, 461, 562, 1, 0, 0, 0, 462, 463, 5, 55, 0, 0, 463, 464, 5, 119, 0, 0, 464, 465, 3, 22, 11, 0, 465, 466, 5, 120, 0, 0, 466, 562, 1, 0, 0, 0, 467, 468, 5, 56, 0, 0, 468, 469, 5, 119, 0, 0, 469, 470, 3, 22, 11, 0, 470, 471, 5, 120, 0, 0, 471, 562, 1, 0, 0, 0, 472, 473, 5, 57, 0, 0, 473, 474, 5, 119, 0, 0, 474, 475, 3, 22, 11, 0, 475, 476, 5, 120, 0, 0, 476, 562, 1, 0, 0, 0, 477, 478, 5, 58, 0, 0, 478, 479, 5, 119, 0, 0, 479, 480, 3, 22, 11, 0, 480, 481, 5, 120, 0, 0, 481, 562, 1, 0, 0, 0, 482, 483, 5, 59, 0, 0, 483, 484, 5, 119, 0, 0, 484, 485, 3, 22, 11, 0, 485, 486, 5, 120, 0, 0, 486, 562, 1, 0, 0, 0, 487, 488, 5, 100, 0, 0, 488, 489, 5, 119, 0, 0, 489, 490, 3, 22, 11, 0, 490, 491, 5, 120, 0, 0, 491, 562, 1, 0, 0, 0, 492, 493, 5, 90, 0, 0, 493, 494, 5, 119, 0, 0, 494, 495, 3, 22, 11, 0, 495, 496, 5, 120, 0, 0, 496, 562, 1, 0, 0, 0, 497, 498, 5, 91, 0, 0, 498, 499, 5, 119, 0, 0, 499, 500, 3, 22, 11, 0, 500, 501, 5, 120, 0, 0, 501, 562, 1, 0, 0, 0, 502, 503, 5, 65, 0, 0, 503, 504, 5, 119, 0, 0, 504, 505, 3, 22, 11, 0, 505, 506, 5, 120, 0, 0, 506, 562, 1, 0, 0, 0, 507, 508, 5, 66, 0, 0, 508, 509, 5, 119, 0, 0, 509, 510, 3, 22, 11, 0, 510, 511, 5, 120, 0, 0, 511, 562, 1, 0, 0, 0, 512, 513, 5, 67, 0, 0, 513, 514, 5, 119, 0, 0, 514, 517, 3, 22, 11, 0, 515, 516, 5, 121, 0, 0, 516, 518, 3, 22, 11, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 5, 120, 0, 0, 520, 562, 1, 0, 0, 0, 521, 522, 5, 69, 0, 0, 522, 523, 5, 119, 0, 0, 523, 524, 3, 22, 11, 0, 524, 525, 5, 120, 0, 0, 525, 562, 1, 0, 0, 0, 526, 527, 5, 70, 0, 0, 527, 528, 5, 119, 0, 0, 528, 529, 3, 22, 11, 0, 529, 530, 5, 120, 0, 0, 530, 562, 1, 0, 0, 0, 531, 532, 5, 71, 0, 0, 532, 533, 5, 119, 0, 0, 533, 534, 3, 22, 11, 0, 534, 535, 5, 120, 0, 0, 535, 562, 1, 0, 0, 0, 536, 537, 5, 72, 0, 0, 537, 538, 5, 119, 0, 0, 538, 539, 3, 22, 11, 0, 539, 540, 5, 120, 0, 0, 540, 562, 1, 0, 0, 0, 541, 542, 5, 86, 0, 0, 542, 543, 5, 119, 0, 0, 543, 544, 3, 22, 11, 0, 544, 545, 5, 120, 0, 0, 545, 562, 1, 0, 0, 0, 546, 547, 5, 87, 0, 0, 547, 548, 5, 119, 0, 0, 548, 549, 3, 22, 11, 0, 549, 550, 5, 120, 0, 0, 550, 562, 1, 0, 0, 0, 551, 552, 5, 88, 0, 0, 552, 553, 5, 119, 0, 0, 553, 554, 3, 22, 11, 0, 554, 555, 5, 120, 0, 0, 555, 562, 1, 0, 0, 0, 556, 557, 5, 89, 0, 0, 557, 558, 5, 119, 0, 0, 558, 559, 3, 22, 11, 0, 559, 560, 5, 120, 0, 0, 560, 562, 1, 0, 0, 0, 561, 292, 1, 0, 0, 0, 561, 297, 1, 0, 0, 0, 561, 302, 1, 0, 0, 0, 561, 307, 1, 0, 0, 0, 561, 312, 1, 0, 0, 0, 561, 317, 1, 0, 0, 0, 561, 322, 1, 0, 0, 0, 561, 327, 1, 0, 0, 0, 561, 332, 1, 0, 0, 0, 561, 337, 1, 0, 0, 0, 561, 342, 1, 0, 0, 0, 561, 347, 1, 0, 0, 0, 561, 352, 1, 0, 0, 0, 561, 357, 1, 0, 0, 0, 561, 362, 1, 0, 0, 0, 561, 367, 1, 0, 0, 0, 561, 372, 1, 0, 0, 0, 561, 377, 1, 0, 0, 0, 561, 382, 1, 0, 0, 0, 561, 387, 1, 0, 0, 0, 561, 392, 1, 0, 0, 0, 561, 397, 1, 0, 0, 0, 561, 402, 1, 0, 0, 0, 561, 407, 1, 0, 0, 0, 561, 412, 1, 0, 0, 0, 561, 417, 1, 0, 0, 0, 561, 422, 1, 0, 0, 0, 561, 427, 1, 0, 0, 0, 561, 432, 1, 0, 0, 0, 561, 437, 1, 0, 0, 0, 561, 442, 1, 0, 0, 0, 561, 447, 1, 0, 0, 0, 561, 452, 1, 0, 0, 0, 561, 457, 1, 0, 0, 0, 561, 462, 1, 0, 0, 0, 561, 467, 1, 0, 0, 0, 561, 472, 1, 0, 0, 0, 561, 477, 1, 0, 0, 0, 561, 482, 1, 0, 0, 0, 561, 487, 1, 0, 0, 0, 561, 492, 1, 0, 0, 0, 561, 497, 1, 0, 0, 0, 561, 502, 1, 0, 0, 0, 561, 507, 1, 0, 0, 0, 561, 512, 1, 0, 0, 0, 561, 521, 1, 0, 0, 0, 561, 526, 1, 0, 0, 0, 561, 531, 1, 0, 0, 0, 561, 536, 1, 0, 0, 0, 561, 541, 1, 0, 0, 0, 561, 546, 1, 0, 0, 0, 561, 551, 1, 0, 0, 0, 561, 556, 1, 0, 0, 0, 562, 45, 1, 0, 0, 0, 563, 564, 5, 29, 0, 0, 564, 565, 5, 119, 0, 0, 565, 566, 3, 22, 11, 0, 566, 567, 5, 121, 0, 0, 567, 568, 3, 22, 11, 0, 568, 569, 5, 120, 0, 0, 569, 722, 1, 0, 0, 0, 570, 571, 5, 7, 0, 0, 571, 572, 5, 119, 0, 0, 572, 573, 3, 22, 11, 0, 573, 574, 5, 121, 0, 0, 574, 575, 3, 22, 11, 0, 575, 576, 5, 120, 0, 0, 576, 722, 1, 0, 0, 0, 577, 578, 5, 21, 0, 0, 578, 579, 5, 119, 0, 0, 579, 580, 3, 22, 11, 0, 580, 581, 5, 121, 0, 0, 581, 582, 3, 22, 11, 0, 582, 583, 5, 120, 0, 0, 583, 722, 1, 0, 0, 0, 584, 585, 5, 22, 0, 0, 585, 586, 5, 119, 0, 0, 586, 587, 3, 22, 11, 0, 587, 588, 5, 121, 0, 0, 588, 589, 3, 22, 11, 0, 589, 590, 5, 120, 0, 0, 590, 722, 1, 0, 0, 0, 591, 592, 5, 39, 0, 0, 592, 593, 5, 119, 0, 0, 593, 594, 3, 22, 11, 0, 594, 595, 5, 121, 0, 0, 595, 596, 3, 22, 11, 0, 596, 597, 5, 120, 0, 0, 597, 722, 1, 0, 0, 0, 598, 599, 5, 53, 0, 0, 599, 600, 5, 119, 0, 0, 600, 601, 3, 22, 11, 0, 601, 602, 5, 121, 0, 0, 602, 603, 3, 22, 11, 0, 603, 604, 5, 120, 0, 0, 604, 722, 1, 0, 0, 0, 605, 606, 5, 54, 0, 0, 606, 607, 5, 119, 0, 0, 607, 608, 3, 22, 11, 0, 608, 609, 5, 121, 0, 0, 609, 610, 3, 22, 11, 0, 610, 611, 5, 120, 0, 0, 611, 722, 1, 0, 0, 0, 612, 613, 5, 60, 0, 0, 613, 614, 5, 119, 0, 0, 614, 615, 3, 22, 11, 0, 615, 616, 5, 121, 0, 0, 616, 617, 3, 22, 11, 0, 617, 618, 5, 120, 0, 0, 618, 722, 1, 0, 0, 0, 619, 620, 5, 61, 0, 0, 620, 621, 5, 119, 0, 0, 621, 622, 3, 22, 11, 0, 622, 623, 5, 121, 0, 0, 623, 624, 3, 22, 11, 0, 624, 625, 5, 120, 0, 0, 625, 722, 1, 0, 0, 0, 626, 627, 5, 62, 0, 0, 627, 628, 5, 119, 0, 0, 628, 629, 3, 22, 11, 0, 629, 630, 5, 121, 0, 0, 630, 631, 3, 22, 11, 0, 631, 632, 5, 120, 0, 0, 632, 722, 1, 0, 0, 0, 633, 634, 5, 63, 0, 0, 634, 635, 5, 119, 0, 0, 635, 636, 3, 22, 11, 0, 636, 637, 5, 121, 0, 0, 637, 638, 3, 22, 11, 0, 638, 639, 5, 120, 0, 0, 639, 722, 1, 0, 0, 0, 640, 641, 5, 97, 0, 0, 641, 642, 5, 119, 0, 0, 642, 643, 3, 22, 11, 0, 643, 644, 5, 121, 0, 0, 644, 645, 3, 22, 11, 0, 645, 646, 5, 120, 0, 0, 646, 722, 1, 0, 0, 0, 647, 648, 5, 98, 0, 0, 648, 649, 5, 119, 0, 0, 649, 650, 3, 22, 11, 0, 650, 651, 5, 121, 0, 0, 651, 652, 3, 22, 11, 0, 652, 653, 5, 120, 0, 0, 653, 722, 1, 0, 0, 0, 654, 655, 5, 99, 0, 0, 655, 656, 5, 119, 0, 0, 656, 657, 3, 22, 11, 0, 657, 658, 5, 121, 0, 0, 658, 659, 3, 22, 11, 0, 659, 660, 5, 120, 0, 0, 660, 722, 1, 0, 0, 0, 661, 662, 5, 101, 0, 0, 662, 663, 5, 119, 0, 0, 663, 664, 3, 22, 11, 0, 664, 665, 5, 121, 0, 0, 665, 666, 3, 22, 11, 0, 666, 667, 5, 120, 0, 0, 667, 722, 1, 0, 0, 0, 668, 669, 5, 93, 0, 0, 669, 670, 5, 119, 0, 0, 670, 671, 3, 22, 11, 0, 671, 672, 5, 121, 0, 0, 672, 673, 3, 22, 11, 0, 673, 674, 5, 120, 0, 0, 674, 722, 1, 0, 0, 0, 675, 676, 5, 95, 0, 0, 676, 677, 5, 119, 0, 0, 677, 678, 3, 22, 11, 0, 678, 679, 5, 121, 0, 0, 679, 680, 3, 22, 11, 0, 680, 681, 5, 120, 0, 0, 681, 722, 1, 0, 0, 0, 682, 683, 5, 96, 0, 0, 683, 684, 5, 119, 0, 0, 684, 685, 3, 22, 11, 0, 685, 686, 5, 121, 0, 0, 686, 687, 3, 22, 11, 0, 687, 688, 5, 120, 0, 0, 688, 722, 1, 0, 0, 0, 689, 690, 5, 68, 0, 0, 690, 691, 5, 119, 0, 0, 691, 692, 3, 22, 11, 0, 692, 693, 5, 121, 0, 0, 693, 696, 3, 22, 11, 0, 694, 695, 5, 121, 0, 0, 695, 697, 3, 22, 11, 0, 696, 694, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 5, 120, 0, 0, 699, 722, 1, 0, 0, 0, 700, 701, 5, 73, 0, 0, 701, 702, 5, 119, 0, 0, 702, 703, 3, 22, 11, 0, 703, 704, 5, 121, 0, 0, 704, 705, 3, 22, 11, 0, 705, 706, 5, 120, 0, 0, 706, 722, 1, 0, 0, 0, 707, 708, 5, 74, 0, 0, 708, 709, 5, 119, 0, 0, 709, 710, 3, 22, 11, 0, 710, 711, 5, 121, 0, 0, 711, 712, 3, 22, 11, 0, 712, 713, 5, 120, 0, 0, 713, 722, 1, 0, 0, 0, 714, 715, 5, 85, 0, 0, 715, 716, 5, 119, 0, 0, 716, 717, 3, 22, 11, 0, 717, 718, 5, 121, 0, 0, 718, 719, 3, 22, 11, 0, 719, 720, 5, 120, 0, 0, 720, 722, 1, 0, 0, 0, 721, 563, 1, 0, 0, 0, 721, 570, 1, 0, 0, 0, 721, 577, 1, 0, 0, 0, 721, 584, 1, 0, 0, 0, 721, 591, 1, 0, 0, 0, 721, 598, 1, 0, 0, 0, 721, 605, 1, 0, 0, 0, 721, 612, 1, 0, 0, 0, 721, 619, 1, 0, 0, 0, 721, 626, 1, 0, 0, 0, 721, 633, 1, 0, 0, 0, 721, 640, 1, 0, 0, 0, 721, 647, 1, 0, 0, 0, 721, 654, 1, 0, 0, 0, 721, 661, 1, 0, 0, 0, 721, 668, 1, 0, 0, 0, 721, 675, 1, 0, 0, 0, 721, 682, 1, 0, 0, 0, 721, 689, 1, 0, 0, 0, 721, 700, 1, 0, 0, 0, 721, 707, 1, 0, 0, 0, 721, 714, 1, 0, 0, 0, 722, 47, 1, 0, 0, 0, 723, 724, 5, 31, 0, 0, 724, 725, 5, 119, 0, 0, 725, 726, 3, 22, 11, 0, 726, 727, 5, 121, 0, 0, 727, 728, 3, 22, 11, 0, 728, 729, 5, 121, 0, 0, 729, 730, 3, 22, 11, 0, 730, 731, 5, 120, 0, 0, 731, 823, 1, 0, 0, 0, 732, 733, 5, 38, 0, 0, 733, 734, 5, 119, 0, 0, 734, 735, 3, 22, 11, 0, 735, 736, 5, 121, 0, 0, 736, 737, 3, 22, 11, 0, 737, 738, 5, 121, 0, 0, 738, 739, 3, 22, 11, 0, 739, 740, 5, 120, 0, 0, 740, 823, 1, 0, 0, 0, 741, 742, 5, 40, 0, 0, 742, 743, 5, 119, 0, 0, 743, 744, 3, 22, 11, 0, 744, 745, 5, 121, 0, 0, 745, 746, 3, 22, 11, 0, 746, 747, 5, 121, 0, 0, 747, 748, 3, 22, 11, 0, 748, 749, 5, 120, 0, 0, 749, 823, 1, 0, 0, 0, 750, 751, 5, 52, 0, 0, 751, 752, 5, 119, 0, 0, 752, 753, 3, 22, 11, 0, 753, 754, 5, 121, 0, 0, 754, 755, 3, 22, 11, 0, 755, 756, 5, 121, 0, 0, 756, 757, 3, 22, 11, 0, 757, 758, 5, 120, 0, 0, 758, 823, 1, 0, 0, 0, 759, 760, 5, 64, 0, 0, 760, 761, 5, 119, 0, 0, 761, 762, 3, 22, 11, 0, 762, 763, 5, 121, 0, 0, 763, 764, 3, 22, 11, 0, 764, 765, 5, 121, 0, 0, 765, 766, 3, 22, 11, 0, 766, 767, 5, 120, 0, 0, 767, 823, 1, 0, 0, 0, 768, 769, 5, 92, 0, 0, 769, 770, 5, 119, 0, 0, 770, 771, 3, 22, 11, 0, 771, 772, 5, 121, 0, 0, 772, 773, 3, 22, 11, 0, 773, 774, 5, 121, 0, 0, 774, 775, 3, 22, 11, 0, 775, 776, 5, 120, 0, 0, 776, 823, 1, 0, 0, 0, 777, 778, 5, 94, 0, 0, 778, 779, 5, 119, 0, 0, 779, 780, 3, 22, 11, 0, 780, 781, 5, 121, 0, 0, 781, 782, 3, 22, 11, 0, 782, 783, 5, 121, 0, 0, 783, 784, 3, 22, 11, 0, 784, 785, 5, 120, 0, 0, 785, 823, 1, 0, 0, 0, 786, 787, 5, 75, 0, 0, 787, 788, 5, 119, 0, 0, 788, 789, 3, 22, 11, 0, 789, 790, 5, 121, 0, 0, 790, 791, 3, 22, 11, 0, 791, 792, 5, 121, 0, 0, 792, 793, 3, 22, 11, 0, 793, 794, 5, 120, 0, 0, 794, 823, 1, 0, 0, 0, 795, 796, 5, 76, 0, 0, 796, 797, 5, 119, 0, 0, 797, 798, 3, 22, 11, 0, 798, 799, 5, 121, 0, 0, 799, 800, 3, 22, 11, 0, 800, 801, 5, 121, 0, 0, 801, 802, 3, 22, 11, 0, 802, 803, 5, 120, 0, 0, 803, 823, 1, 0, 0, 0, 804, 805, 5, 77, 0, 0, 805, 806, 5, 119, 0, 0, 806, 807, 3, 22, 11, 0, 807, 808, 5, 121, 0, 0, 808, 809, 3, 22, 11, 0, 809, 810, 5, 121, 0, 0, 810, 811, 3, 22, 11, 0, 811, 812, 5, 120, 0, 0, 812, 823, 1, 0, 0, 0, 813, 814, 5, 78, 0, 0, 814, 815, 5, 119, 0, 0, 815, 816, 3, 22, 11, 0, 816, 817, 5, 121, 0, 0, 817, 818, 3, 22, 11, 0, 818, 819, 5, 121, 0, 0, 819, 820, 3, 22, 11, 0, 820, 821, 5, 120, 0, 0, 821, 823, 1, 0, 0, 0, 822, 723, 1, 0, 0, 0, 822, 732, 1, 0, 0, 0, 822, 741, 1, 0, 0, 0, 822, 750, 1, 0, 0, 0, 822, 759, 1, 0, 0, 0, 822, 768, 1, 0, 0, 0, 822, 777, 1, 0, 0, 0, 822, 786, 1, 0, 0, 0, 822, 795, 1, 0, 0, 0, 822, 804, 1, 0, 0, 0, 822, 813, 1, 0, 0, 0, 823, 49, 1, 0, 0, 0, 824, 825, 5, 49, 0, 0, 825, 826, 5, 119, 0, 0, 826, 827, 3, 22, 11, 0, 827, 828, 5, 121, 0, 0, 828, 829, 3, 22, 11, 0, 829, 830, 5, 121, 0, 0, 830, 831, 3, 22, 11, 0, 831, 832, 5, 121, 0, 0, 832, 833, 3, 22, 11, 0, 833, 834, 5, 120, 0, 0, 834, 858, 1, 0, 0, 0, 835, 836, 5, 37, 0, 0, 836, 837, 5, 119, 0, 0, 837, 838, 3, 22, 11, 0, 838, 839, 5, 121, 0, 0, 839, 840, 3, 22, 11, 0, 840, 841, 5, 121, 0, 0, 841, 842, 3, 22, 11, 0, 842, 843, 5, 121, 0, 0, 843, 844, 3, 22, 11, 0, 844, 845, 5, 120, 0, 0, 845, 858, 1, 0, 0, 0, 846, 847, 5, 79, 0, 0, 847, 848, 5, 119, 0, 0, 848, 849, 3, 22, 11, 0, 849, 850, 5, 121, 0, 0, 850, 851, 3, 22, 11, 0, 851, 852, 5, 121, 0, 0, 852, 853, 3, 22, 11, 0, 853, 854, 5, 121, 0, 0, 854, 855, 3, 22, 11, 0, 855, 856, 5, 120, 0, 0, 856, 858, 1, 0, 0, 0, 857, 824, 1, 0, 0, 0, 857, 835, 1, 0, 0, 0, 857, 846, 1, 0, 0, 0, 858, 51, 1, 0, 0, 0, 859, 860, 5, 80, 0, 0, 860, 861, 5, 119, 0, 0, 861, 862, 3, 22, 11, 0, 862, 863, 5, 121, 0, 0, 863, 864, 3, 22, 11, 0, 864, 865, 5, 121, 0, 0, 865, 866, 3, 22, 11, 0, 866, 867, 5, 121, 0, 0, 867, 868, 3, 22, 11, 0, 868, 869, 5, 121, 0, 0, 869, 870, 3, 22, 11, 0, 870, 871, 5, 120, 0, 0, 871, 53, 1, 0, 0, 0, 872, 873, 5, 19, 0, 0, 873, 874, 5, 119, 0, 0, 874, 879, 3, 22, 11, 0, 875, 876, 5, 121, 0, 0, 876, 878, 3, 22, 11, 0, 877, 875, 1, 0, 0, 0, 878, 881, 1, 0, 0, 0, 879, 877, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 882, 1, 0, 0, 0, 881, 879, 1, 0, 0, 0, 882, 883, 5, 120, 0, 0, 883, 944, 1, 0, 0, 0, 884, 885, 5, 20, 0, 0, 885, 886, 5, 119, 0, 0, 886, 891, 3, 22, 11, 0, 887, 888, 5, 121, 0, 0, 888, 890, 3, 22, 11, 0, 889, 887, 1, 0, 0, 0, 890, 893, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 894, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 894, 895, 5, 120, 0, 0, 895, 944, 1, 0, 0, 0, 896, 897, 5, 46, 0, 0, 897, 898, 5, 119, 0, 0, 898, 901, 3, 22, 11, 0, 899, 900, 5, 121, 0, 0, 900, 902, 3, 22, 11, 0, 901, 899, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 901, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 905, 1, 0, 0, 0, 905, 906, 5, 120, 0, 0, 906, 944, 1, 0, 0, 0, 907, 908, 5, 47, 0, 0, 908, 909, 5, 119, 0, 0, 909, 912, 3, 22, 11, 0, 910, 911, 5, 121, 0, 0, 911, 913, 3, 22, 11, 0, 912, 910, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 912, 1, 0, 0, 0, 914, 915, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 917, 5, 120, 0, 0, 917, 944, 1, 0, 0, 0, 918, 919, 5, 48, 0, 0, 919, 920, 5, 119, 0, 0, 920, 923, 3, 22, 11, 0, 921, 922, 5, 121, 0, 0, 922, 924, 3, 22, 11, 0, 923, 921, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 923, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 928, 5, 120, 0, 0, 928, 944, 1, 0, 0, 0, 929, 930, 5, 50, 0, 0, 930, 931, 5, 119, 0, 0, 931, 932, 3, 22, 11, 0, 932, 933, 5, 121, 0, 0, 933, 934, 3, 22, 11, 0, 934, 935, 5, 120, 0, 0, 935, 944, 1, 0, 0, 0, 936, 937, 5, 51, 0, 0, 937, 938, 5, 119, 0, 0, 938, 939, 3, 22, 11, 0, 939, 940, 5, 121, 0, 0, 940, 941, 3, 22, 11, 0, 941, 942, 5, 120, 0, 0, 942, 944, 1, 0, 0, 0, 943, 872, 1, 0, 0, 0, 943, 884, 1, 0, 0, 0, 943, 896, 1, 0, 0, 0, 943, 907, 1, 0, 0, 0, 943, 918, 1, 0, 0, 0, 943, 929, 1, 0, 0, 0, 943, 936, 1, 0, 0, 0, 944, 55, 1, 0, 0, 0, 36, 59, 61, 70, 76, 90, 103, 112, 124, 137, 144, 173, 175, 187, 189, 204, 206, 214, 221, 233, 240, 267, 275, 278, 285, 517, 561, 696, 721, 822, 857, 879, 891, 903, 914, 925, 943] \ No newline at end of file diff --git a/more_math/Parser/MathExpr.tokens b/more_math/Parser/MathExpr.tokens index 888f7b1..459710d 100644 --- a/more_math/Parser/MathExpr.tokens +++ b/more_math/Parser/MathExpr.tokens @@ -1,132 +1,241 @@ -VARIABLE=1 -LPAREN=2 -RPAREN=3 -ARROW=4 -SEMICOLON=5 -EQUEALS=6 -COMMA=7 -IF=8 -ELSE=9 -WHILE=10 -LBRACE=11 -RBRACE=12 -BREAK=13 -CONTINUE=14 -RETURN=15 -QUESTION=16 -COLON=17 -GT=18 -GE=19 -LT=20 -LE=21 -EQ=22 -NE=23 -PLUS=24 -MINUS=25 -MULT=26 -DIV=27 -MOD=28 -POW=29 -LBRACKET=30 -RBRACKET=31 -NUMBER=32 -CONSTANT=33 -PIPE=34 -TIMESTAMP=35 -SIN=36 -COS=37 -TAN=38 -ASIN=39 -ACOS=40 -ATAN=41 -SINH=42 -COSH=43 -TANH=44 -ASINH=45 -ACOSH=46 -ATANH=47 -ABS=48 -SQRT=49 -LN=50 -LOG=51 -EXP=52 -TNORM=53 -SNORM=54 -FLOOR=55 -CEIL=56 -ROUND=57 -GAMMA=58 -SIGM=59 -SFFT=60 -SIFFT=61 -ANGL=62 -PRNT=63 -FRACT=64 -RELU=65 -SOFTPLUS=66 -GELU=67 -SIGN=68 -PRINT_SHAPE=69 -PINV=70 -SUM=71 -MEAN=72 -STD=73 -VAR=74 -SORT=75 -NOISE=76 -RAND=77 -ANY=78 -ALL=79 -EDGE=80 -MEDIAN=81 -MODE=82 -CUMSUM=83 -CUMPROD=84 -POP=85 -CLEAR=86 -HAS=87 -GET=88 -POWE=89 -ATAN2=90 -TMIN=91 -TMAX=92 -STEP=93 -TOPK=94 -BOTK=95 -QUARTILE=96 -PERCENTILE=97 -QUANTILE=98 -DOT=99 -COSSIM=100 -FLIP=101 -COV=102 -APPEND=103 -EXPONENTIAL=104 -BERNOULLI=105 -POISSON=106 -GAUSSIAN=107 -TOPK_IND=108 -BOTK_IND=109 -PUSH=110 -CLAMP=111 -LERP=112 -SMOOTHSTEP=113 -RANGE=114 -MOMENT=115 -CAUCHY=116 -LOGNORMAL=117 -CUBIC_EASE=118 -ELASTIC_EASE=119 -SINE_EASE=120 -SMOOTHERSTEP=121 -SWAP=122 -NVL=123 -DIST=124 -REMAP=125 -SMIN=126 -SMAX=127 -MAP=128 -EZCONV=129 -CONV=130 -PERM=131 -RESHAPE=132 +SIN=1 +COS=2 +TAN=3 +ASIN=4 +ACOS=5 +ATAN=6 +ATAN2=7 +SINH=8 +COSH=9 +TANH=10 +ASINH=11 +ACOSH=12 +ATANH=13 +ABS=14 +SQRT=15 +LN=16 +LOG=17 +EXP=18 +SMIN=19 +SMAX=20 +TMIN=21 +TMAX=22 +TNORM=23 +SNORM=24 +FLOOR=25 +CEIL=26 +ROUND=27 +GAMMA=28 +POWE=29 +SIGM=30 +CLAMP=31 +SFFT=32 +SIFFT=33 +ANGL=34 +PRNT=35 +PRINT_SHAPE=36 +NVL=37 +LERP=38 +STEP=39 +SMOOTHSTEP=40 +FRACT=41 +RELU=42 +SOFTPLUS=43 +GELU=44 +SIGN=45 +MAP=46 +EZCONV=47 +CONV=48 +SWAP=49 +PERM=50 +RESHAPE=51 +RANGE=52 +TOPK=53 +BOTK=54 +PINV=55 +SUM=56 +MEAN=57 +STD=58 +VAR=59 +QUARTILE=60 +PERCENTILE=61 +QUANTILE=62 +DOT=63 +MOMENT=64 +ANY=65 +ALL=66 +EDGE=67 +GAUSSIAN=68 +MEDIAN=69 +MODE=70 +CUMSUM=71 +CUMPROD=72 +TOPK_IND=73 +BOTK_IND=74 +CUBIC_EASE=75 +ELASTIC_EASE=76 +SINE_EASE=77 +SMOOTHERSTEP=78 +DIST=79 +REMAP=80 +IF=81 +ELSE=82 +WHILE=83 +RET=84 +PUSH=85 +POP=86 +CLEAR=87 +HAS=88 +GET=89 +NOISE=90 +RAND=91 +CAUCHY=92 +EXPONENTIAL=93 +LOGNORMAL=94 +BERNOULLI=95 +POISSON=96 +COSSIM=97 +FLIP=98 +COV=99 +SORT=100 +APPEND=101 +TIMESTAMP=102 +BRK=103 +CONT=104 +PLUS=105 +MINUS=106 +MULT=107 +DIV=108 +MOD=109 +POW=110 +GE=111 +GT=112 +LE=113 +LT=114 +EQ=115 +EQUEALS=116 +NE=117 +PIPE=118 +LPAREN=119 +RPAREN=120 +COMMA=121 +SEMICOLON=122 +ARROW=123 +LBRACKET=124 +RBRACKET=125 +QUESTION=126 +COLON=127 +LBRACE=128 +RBRACE=129 +CONSTANT=130 +NUMBER=131 +VARIABLE=132 +SL_COMMENT=133 +ML_COMMENT=134 +WS=135 +'sin'=1 +'cos'=2 +'tan'=3 +'asin'=4 +'acos'=5 +'atan'=6 +'atan2'=7 +'sinh'=8 +'cosh'=9 +'tanh'=10 +'asinh'=11 +'acosh'=12 +'atanh'=13 +'abs'=14 +'sqrt'=15 +'ln'=16 +'log'=17 +'exp'=18 +'smin'=19 +'smax'=20 +'tmin'=21 +'tmax'=22 +'tnorm'=23 +'snorm'=24 +'floor'=25 +'ceil'=26 +'round'=27 +'gamma'=28 +'pow'=29 +'sigm'=30 +'clamp'=31 +'fft'=32 +'ifft'=33 +'angle'=34 +'print'=35 +'lerp'=38 +'step'=39 +'smoothstep'=40 +'fract'=41 +'relu'=42 +'softplus'=43 +'gelu'=44 +'sign'=45 +'map'=46 +'swap'=49 +'range'=52 +'topk'=53 +'botk'=54 +'pinv'=55 +'sum'=56 +'mean'=57 +'std'=58 +'var'=59 +'quantile'=62 +'dot'=63 +'moment'=64 +'any'=65 +'all'=66 +'edge'=67 +'median'=69 +'mode'=70 +'cumsum'=71 +'cumprod'=72 +'smootherstep'=78 +'remap'=80 +'if'=81 +'else'=82 +'while'=83 +'return'=84 +'push'=85 +'pop'=86 +'clear'=87 +'has'=88 +'get'=89 +'cossim'=97 +'flip'=98 +'cov'=99 +'sort'=100 +'append'=101 +'break'=103 +'continue'=104 +'+'=105 +'-'=106 +'*'=107 +'/'=108 +'%'=109 +'^'=110 +'>='=111 +'>'=112 +'<='=113 +'<'=114 +'=='=115 +'='=116 +'!='=117 +'|'=118 +'('=119 +')'=120 +','=121 +';'=122 +'->'=123 +'['=124 +']'=125 +'?'=126 +':'=127 +'{'=128 +'}'=129 diff --git a/more_math/Parser/MathExprLexer.interp b/more_math/Parser/MathExprLexer.interp index ffc76bd..8966e74 100644 --- a/more_math/Parser/MathExprLexer.interp +++ b/more_math/Parser/MathExprLexer.interp @@ -102,6 +102,8 @@ null 'sort' 'append' null +'break' +'continue' '+' '-' '*' @@ -219,7 +221,7 @@ REMAP IF ELSE WHILE -RETURN +RET PUSH POP CLEAR @@ -238,6 +240,8 @@ COV SORT APPEND TIMESTAMP +BRK +CONT PLUS MINUS MULT @@ -354,7 +358,7 @@ REMAP IF ELSE WHILE -RETURN +RET PUSH POP CLEAR @@ -373,6 +377,8 @@ COV SORT APPEND TIMESTAMP +BRK +CONT PLUS MINUS MULT @@ -413,4 +419,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 133, 1238, 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, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 460, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 475, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 551, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 568, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 586, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 599, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 654, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 671, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 718, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 767, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 789, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 806, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 827, 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 842, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 869, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 944, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 969, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 989, 8, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 3, 92, 1014, 8, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 1039, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1062, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1083, 8, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1125, 8, 101, 1, 102, 1, 102, 1, 103, 1, 103, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 3, 127, 1187, 8, 127, 1, 128, 4, 128, 1190, 8, 128, 11, 128, 12, 128, 1191, 1, 128, 1, 128, 4, 128, 1196, 8, 128, 11, 128, 12, 128, 1197, 3, 128, 1200, 8, 128, 1, 129, 1, 129, 5, 129, 1204, 8, 129, 10, 129, 12, 129, 1207, 9, 129, 1, 130, 1, 130, 5, 130, 1211, 8, 130, 10, 130, 12, 130, 1214, 9, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1222, 8, 131, 10, 131, 12, 131, 1225, 9, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 4, 132, 1233, 8, 132, 11, 132, 12, 132, 1234, 1, 132, 1, 132, 1, 1223, 0, 133, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 1, 0, 6, 2, 0, 69, 69, 101, 101, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 1271, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 3, 271, 1, 0, 0, 0, 5, 275, 1, 0, 0, 0, 7, 279, 1, 0, 0, 0, 9, 284, 1, 0, 0, 0, 11, 289, 1, 0, 0, 0, 13, 294, 1, 0, 0, 0, 15, 300, 1, 0, 0, 0, 17, 305, 1, 0, 0, 0, 19, 310, 1, 0, 0, 0, 21, 315, 1, 0, 0, 0, 23, 321, 1, 0, 0, 0, 25, 327, 1, 0, 0, 0, 27, 333, 1, 0, 0, 0, 29, 337, 1, 0, 0, 0, 31, 342, 1, 0, 0, 0, 33, 345, 1, 0, 0, 0, 35, 349, 1, 0, 0, 0, 37, 353, 1, 0, 0, 0, 39, 358, 1, 0, 0, 0, 41, 363, 1, 0, 0, 0, 43, 368, 1, 0, 0, 0, 45, 373, 1, 0, 0, 0, 47, 379, 1, 0, 0, 0, 49, 385, 1, 0, 0, 0, 51, 391, 1, 0, 0, 0, 53, 396, 1, 0, 0, 0, 55, 402, 1, 0, 0, 0, 57, 408, 1, 0, 0, 0, 59, 412, 1, 0, 0, 0, 61, 417, 1, 0, 0, 0, 63, 423, 1, 0, 0, 0, 65, 427, 1, 0, 0, 0, 67, 432, 1, 0, 0, 0, 69, 438, 1, 0, 0, 0, 71, 459, 1, 0, 0, 0, 73, 474, 1, 0, 0, 0, 75, 476, 1, 0, 0, 0, 77, 481, 1, 0, 0, 0, 79, 486, 1, 0, 0, 0, 81, 497, 1, 0, 0, 0, 83, 503, 1, 0, 0, 0, 85, 508, 1, 0, 0, 0, 87, 517, 1, 0, 0, 0, 89, 522, 1, 0, 0, 0, 91, 527, 1, 0, 0, 0, 93, 550, 1, 0, 0, 0, 95, 567, 1, 0, 0, 0, 97, 569, 1, 0, 0, 0, 99, 585, 1, 0, 0, 0, 101, 598, 1, 0, 0, 0, 103, 600, 1, 0, 0, 0, 105, 606, 1, 0, 0, 0, 107, 611, 1, 0, 0, 0, 109, 616, 1, 0, 0, 0, 111, 621, 1, 0, 0, 0, 113, 625, 1, 0, 0, 0, 115, 630, 1, 0, 0, 0, 117, 634, 1, 0, 0, 0, 119, 653, 1, 0, 0, 0, 121, 670, 1, 0, 0, 0, 123, 672, 1, 0, 0, 0, 125, 681, 1, 0, 0, 0, 127, 685, 1, 0, 0, 0, 129, 692, 1, 0, 0, 0, 131, 696, 1, 0, 0, 0, 133, 700, 1, 0, 0, 0, 135, 717, 1, 0, 0, 0, 137, 719, 1, 0, 0, 0, 139, 726, 1, 0, 0, 0, 141, 731, 1, 0, 0, 0, 143, 738, 1, 0, 0, 0, 145, 766, 1, 0, 0, 0, 147, 788, 1, 0, 0, 0, 149, 805, 1, 0, 0, 0, 151, 826, 1, 0, 0, 0, 153, 841, 1, 0, 0, 0, 155, 843, 1, 0, 0, 0, 157, 868, 1, 0, 0, 0, 159, 870, 1, 0, 0, 0, 161, 876, 1, 0, 0, 0, 163, 879, 1, 0, 0, 0, 165, 884, 1, 0, 0, 0, 167, 890, 1, 0, 0, 0, 169, 897, 1, 0, 0, 0, 171, 902, 1, 0, 0, 0, 173, 906, 1, 0, 0, 0, 175, 912, 1, 0, 0, 0, 177, 916, 1, 0, 0, 0, 179, 943, 1, 0, 0, 0, 181, 968, 1, 0, 0, 0, 183, 988, 1, 0, 0, 0, 185, 1013, 1, 0, 0, 0, 187, 1038, 1, 0, 0, 0, 189, 1061, 1, 0, 0, 0, 191, 1082, 1, 0, 0, 0, 193, 1084, 1, 0, 0, 0, 195, 1091, 1, 0, 0, 0, 197, 1096, 1, 0, 0, 0, 199, 1100, 1, 0, 0, 0, 201, 1105, 1, 0, 0, 0, 203, 1124, 1, 0, 0, 0, 205, 1126, 1, 0, 0, 0, 207, 1128, 1, 0, 0, 0, 209, 1130, 1, 0, 0, 0, 211, 1132, 1, 0, 0, 0, 213, 1134, 1, 0, 0, 0, 215, 1136, 1, 0, 0, 0, 217, 1138, 1, 0, 0, 0, 219, 1141, 1, 0, 0, 0, 221, 1143, 1, 0, 0, 0, 223, 1146, 1, 0, 0, 0, 225, 1148, 1, 0, 0, 0, 227, 1151, 1, 0, 0, 0, 229, 1153, 1, 0, 0, 0, 231, 1156, 1, 0, 0, 0, 233, 1158, 1, 0, 0, 0, 235, 1160, 1, 0, 0, 0, 237, 1162, 1, 0, 0, 0, 239, 1164, 1, 0, 0, 0, 241, 1166, 1, 0, 0, 0, 243, 1169, 1, 0, 0, 0, 245, 1171, 1, 0, 0, 0, 247, 1173, 1, 0, 0, 0, 249, 1175, 1, 0, 0, 0, 251, 1177, 1, 0, 0, 0, 253, 1179, 1, 0, 0, 0, 255, 1186, 1, 0, 0, 0, 257, 1189, 1, 0, 0, 0, 259, 1201, 1, 0, 0, 0, 261, 1208, 1, 0, 0, 0, 263, 1217, 1, 0, 0, 0, 265, 1232, 1, 0, 0, 0, 267, 268, 5, 115, 0, 0, 268, 269, 5, 105, 0, 0, 269, 270, 5, 110, 0, 0, 270, 2, 1, 0, 0, 0, 271, 272, 5, 99, 0, 0, 272, 273, 5, 111, 0, 0, 273, 274, 5, 115, 0, 0, 274, 4, 1, 0, 0, 0, 275, 276, 5, 116, 0, 0, 276, 277, 5, 97, 0, 0, 277, 278, 5, 110, 0, 0, 278, 6, 1, 0, 0, 0, 279, 280, 5, 97, 0, 0, 280, 281, 5, 115, 0, 0, 281, 282, 5, 105, 0, 0, 282, 283, 5, 110, 0, 0, 283, 8, 1, 0, 0, 0, 284, 285, 5, 97, 0, 0, 285, 286, 5, 99, 0, 0, 286, 287, 5, 111, 0, 0, 287, 288, 5, 115, 0, 0, 288, 10, 1, 0, 0, 0, 289, 290, 5, 97, 0, 0, 290, 291, 5, 116, 0, 0, 291, 292, 5, 97, 0, 0, 292, 293, 5, 110, 0, 0, 293, 12, 1, 0, 0, 0, 294, 295, 5, 97, 0, 0, 295, 296, 5, 116, 0, 0, 296, 297, 5, 97, 0, 0, 297, 298, 5, 110, 0, 0, 298, 299, 5, 50, 0, 0, 299, 14, 1, 0, 0, 0, 300, 301, 5, 115, 0, 0, 301, 302, 5, 105, 0, 0, 302, 303, 5, 110, 0, 0, 303, 304, 5, 104, 0, 0, 304, 16, 1, 0, 0, 0, 305, 306, 5, 99, 0, 0, 306, 307, 5, 111, 0, 0, 307, 308, 5, 115, 0, 0, 308, 309, 5, 104, 0, 0, 309, 18, 1, 0, 0, 0, 310, 311, 5, 116, 0, 0, 311, 312, 5, 97, 0, 0, 312, 313, 5, 110, 0, 0, 313, 314, 5, 104, 0, 0, 314, 20, 1, 0, 0, 0, 315, 316, 5, 97, 0, 0, 316, 317, 5, 115, 0, 0, 317, 318, 5, 105, 0, 0, 318, 319, 5, 110, 0, 0, 319, 320, 5, 104, 0, 0, 320, 22, 1, 0, 0, 0, 321, 322, 5, 97, 0, 0, 322, 323, 5, 99, 0, 0, 323, 324, 5, 111, 0, 0, 324, 325, 5, 115, 0, 0, 325, 326, 5, 104, 0, 0, 326, 24, 1, 0, 0, 0, 327, 328, 5, 97, 0, 0, 328, 329, 5, 116, 0, 0, 329, 330, 5, 97, 0, 0, 330, 331, 5, 110, 0, 0, 331, 332, 5, 104, 0, 0, 332, 26, 1, 0, 0, 0, 333, 334, 5, 97, 0, 0, 334, 335, 5, 98, 0, 0, 335, 336, 5, 115, 0, 0, 336, 28, 1, 0, 0, 0, 337, 338, 5, 115, 0, 0, 338, 339, 5, 113, 0, 0, 339, 340, 5, 114, 0, 0, 340, 341, 5, 116, 0, 0, 341, 30, 1, 0, 0, 0, 342, 343, 5, 108, 0, 0, 343, 344, 5, 110, 0, 0, 344, 32, 1, 0, 0, 0, 345, 346, 5, 108, 0, 0, 346, 347, 5, 111, 0, 0, 347, 348, 5, 103, 0, 0, 348, 34, 1, 0, 0, 0, 349, 350, 5, 101, 0, 0, 350, 351, 5, 120, 0, 0, 351, 352, 5, 112, 0, 0, 352, 36, 1, 0, 0, 0, 353, 354, 5, 115, 0, 0, 354, 355, 5, 109, 0, 0, 355, 356, 5, 105, 0, 0, 356, 357, 5, 110, 0, 0, 357, 38, 1, 0, 0, 0, 358, 359, 5, 115, 0, 0, 359, 360, 5, 109, 0, 0, 360, 361, 5, 97, 0, 0, 361, 362, 5, 120, 0, 0, 362, 40, 1, 0, 0, 0, 363, 364, 5, 116, 0, 0, 364, 365, 5, 109, 0, 0, 365, 366, 5, 105, 0, 0, 366, 367, 5, 110, 0, 0, 367, 42, 1, 0, 0, 0, 368, 369, 5, 116, 0, 0, 369, 370, 5, 109, 0, 0, 370, 371, 5, 97, 0, 0, 371, 372, 5, 120, 0, 0, 372, 44, 1, 0, 0, 0, 373, 374, 5, 116, 0, 0, 374, 375, 5, 110, 0, 0, 375, 376, 5, 111, 0, 0, 376, 377, 5, 114, 0, 0, 377, 378, 5, 109, 0, 0, 378, 46, 1, 0, 0, 0, 379, 380, 5, 115, 0, 0, 380, 381, 5, 110, 0, 0, 381, 382, 5, 111, 0, 0, 382, 383, 5, 114, 0, 0, 383, 384, 5, 109, 0, 0, 384, 48, 1, 0, 0, 0, 385, 386, 5, 102, 0, 0, 386, 387, 5, 108, 0, 0, 387, 388, 5, 111, 0, 0, 388, 389, 5, 111, 0, 0, 389, 390, 5, 114, 0, 0, 390, 50, 1, 0, 0, 0, 391, 392, 5, 99, 0, 0, 392, 393, 5, 101, 0, 0, 393, 394, 5, 105, 0, 0, 394, 395, 5, 108, 0, 0, 395, 52, 1, 0, 0, 0, 396, 397, 5, 114, 0, 0, 397, 398, 5, 111, 0, 0, 398, 399, 5, 117, 0, 0, 399, 400, 5, 110, 0, 0, 400, 401, 5, 100, 0, 0, 401, 54, 1, 0, 0, 0, 402, 403, 5, 103, 0, 0, 403, 404, 5, 97, 0, 0, 404, 405, 5, 109, 0, 0, 405, 406, 5, 109, 0, 0, 406, 407, 5, 97, 0, 0, 407, 56, 1, 0, 0, 0, 408, 409, 5, 112, 0, 0, 409, 410, 5, 111, 0, 0, 410, 411, 5, 119, 0, 0, 411, 58, 1, 0, 0, 0, 412, 413, 5, 115, 0, 0, 413, 414, 5, 105, 0, 0, 414, 415, 5, 103, 0, 0, 415, 416, 5, 109, 0, 0, 416, 60, 1, 0, 0, 0, 417, 418, 5, 99, 0, 0, 418, 419, 5, 108, 0, 0, 419, 420, 5, 97, 0, 0, 420, 421, 5, 109, 0, 0, 421, 422, 5, 112, 0, 0, 422, 62, 1, 0, 0, 0, 423, 424, 5, 102, 0, 0, 424, 425, 5, 102, 0, 0, 425, 426, 5, 116, 0, 0, 426, 64, 1, 0, 0, 0, 427, 428, 5, 105, 0, 0, 428, 429, 5, 102, 0, 0, 429, 430, 5, 102, 0, 0, 430, 431, 5, 116, 0, 0, 431, 66, 1, 0, 0, 0, 432, 433, 5, 97, 0, 0, 433, 434, 5, 110, 0, 0, 434, 435, 5, 103, 0, 0, 435, 436, 5, 108, 0, 0, 436, 437, 5, 101, 0, 0, 437, 68, 1, 0, 0, 0, 438, 439, 5, 112, 0, 0, 439, 440, 5, 114, 0, 0, 440, 441, 5, 105, 0, 0, 441, 442, 5, 110, 0, 0, 442, 443, 5, 116, 0, 0, 443, 70, 1, 0, 0, 0, 444, 445, 5, 112, 0, 0, 445, 446, 5, 114, 0, 0, 446, 447, 5, 105, 0, 0, 447, 448, 5, 110, 0, 0, 448, 449, 5, 116, 0, 0, 449, 450, 5, 95, 0, 0, 450, 451, 5, 115, 0, 0, 451, 452, 5, 104, 0, 0, 452, 453, 5, 97, 0, 0, 453, 454, 5, 112, 0, 0, 454, 460, 5, 101, 0, 0, 455, 456, 5, 112, 0, 0, 456, 457, 5, 115, 0, 0, 457, 458, 5, 104, 0, 0, 458, 460, 5, 112, 0, 0, 459, 444, 1, 0, 0, 0, 459, 455, 1, 0, 0, 0, 460, 72, 1, 0, 0, 0, 461, 462, 5, 110, 0, 0, 462, 463, 5, 118, 0, 0, 463, 475, 5, 108, 0, 0, 464, 465, 5, 110, 0, 0, 465, 466, 5, 97, 0, 0, 466, 467, 5, 110, 0, 0, 467, 468, 5, 95, 0, 0, 468, 469, 5, 116, 0, 0, 469, 470, 5, 111, 0, 0, 470, 471, 5, 95, 0, 0, 471, 472, 5, 110, 0, 0, 472, 473, 5, 117, 0, 0, 473, 475, 5, 109, 0, 0, 474, 461, 1, 0, 0, 0, 474, 464, 1, 0, 0, 0, 475, 74, 1, 0, 0, 0, 476, 477, 5, 108, 0, 0, 477, 478, 5, 101, 0, 0, 478, 479, 5, 114, 0, 0, 479, 480, 5, 112, 0, 0, 480, 76, 1, 0, 0, 0, 481, 482, 5, 115, 0, 0, 482, 483, 5, 116, 0, 0, 483, 484, 5, 101, 0, 0, 484, 485, 5, 112, 0, 0, 485, 78, 1, 0, 0, 0, 486, 487, 5, 115, 0, 0, 487, 488, 5, 109, 0, 0, 488, 489, 5, 111, 0, 0, 489, 490, 5, 111, 0, 0, 490, 491, 5, 116, 0, 0, 491, 492, 5, 104, 0, 0, 492, 493, 5, 115, 0, 0, 493, 494, 5, 116, 0, 0, 494, 495, 5, 101, 0, 0, 495, 496, 5, 112, 0, 0, 496, 80, 1, 0, 0, 0, 497, 498, 5, 102, 0, 0, 498, 499, 5, 114, 0, 0, 499, 500, 5, 97, 0, 0, 500, 501, 5, 99, 0, 0, 501, 502, 5, 116, 0, 0, 502, 82, 1, 0, 0, 0, 503, 504, 5, 114, 0, 0, 504, 505, 5, 101, 0, 0, 505, 506, 5, 108, 0, 0, 506, 507, 5, 117, 0, 0, 507, 84, 1, 0, 0, 0, 508, 509, 5, 115, 0, 0, 509, 510, 5, 111, 0, 0, 510, 511, 5, 102, 0, 0, 511, 512, 5, 116, 0, 0, 512, 513, 5, 112, 0, 0, 513, 514, 5, 108, 0, 0, 514, 515, 5, 117, 0, 0, 515, 516, 5, 115, 0, 0, 516, 86, 1, 0, 0, 0, 517, 518, 5, 103, 0, 0, 518, 519, 5, 101, 0, 0, 519, 520, 5, 108, 0, 0, 520, 521, 5, 117, 0, 0, 521, 88, 1, 0, 0, 0, 522, 523, 5, 115, 0, 0, 523, 524, 5, 105, 0, 0, 524, 525, 5, 103, 0, 0, 525, 526, 5, 110, 0, 0, 526, 90, 1, 0, 0, 0, 527, 528, 5, 109, 0, 0, 528, 529, 5, 97, 0, 0, 529, 530, 5, 112, 0, 0, 530, 92, 1, 0, 0, 0, 531, 532, 5, 101, 0, 0, 532, 533, 5, 122, 0, 0, 533, 534, 5, 99, 0, 0, 534, 535, 5, 111, 0, 0, 535, 536, 5, 110, 0, 0, 536, 537, 5, 118, 0, 0, 537, 538, 5, 111, 0, 0, 538, 539, 5, 108, 0, 0, 539, 540, 5, 117, 0, 0, 540, 541, 5, 116, 0, 0, 541, 542, 5, 105, 0, 0, 542, 543, 5, 111, 0, 0, 543, 551, 5, 110, 0, 0, 544, 545, 5, 101, 0, 0, 545, 546, 5, 122, 0, 0, 546, 547, 5, 99, 0, 0, 547, 548, 5, 111, 0, 0, 548, 549, 5, 110, 0, 0, 549, 551, 5, 118, 0, 0, 550, 531, 1, 0, 0, 0, 550, 544, 1, 0, 0, 0, 551, 94, 1, 0, 0, 0, 552, 553, 5, 99, 0, 0, 553, 554, 5, 111, 0, 0, 554, 555, 5, 110, 0, 0, 555, 556, 5, 118, 0, 0, 556, 557, 5, 111, 0, 0, 557, 558, 5, 108, 0, 0, 558, 559, 5, 117, 0, 0, 559, 560, 5, 116, 0, 0, 560, 561, 5, 105, 0, 0, 561, 562, 5, 111, 0, 0, 562, 568, 5, 110, 0, 0, 563, 564, 5, 99, 0, 0, 564, 565, 5, 111, 0, 0, 565, 566, 5, 110, 0, 0, 566, 568, 5, 118, 0, 0, 567, 552, 1, 0, 0, 0, 567, 563, 1, 0, 0, 0, 568, 96, 1, 0, 0, 0, 569, 570, 5, 115, 0, 0, 570, 571, 5, 119, 0, 0, 571, 572, 5, 97, 0, 0, 572, 573, 5, 112, 0, 0, 573, 98, 1, 0, 0, 0, 574, 575, 5, 112, 0, 0, 575, 576, 5, 101, 0, 0, 576, 577, 5, 114, 0, 0, 577, 578, 5, 109, 0, 0, 578, 579, 5, 117, 0, 0, 579, 580, 5, 116, 0, 0, 580, 586, 5, 101, 0, 0, 581, 582, 5, 112, 0, 0, 582, 583, 5, 101, 0, 0, 583, 584, 5, 114, 0, 0, 584, 586, 5, 109, 0, 0, 585, 574, 1, 0, 0, 0, 585, 581, 1, 0, 0, 0, 586, 100, 1, 0, 0, 0, 587, 588, 5, 114, 0, 0, 588, 589, 5, 101, 0, 0, 589, 590, 5, 115, 0, 0, 590, 591, 5, 104, 0, 0, 591, 592, 5, 97, 0, 0, 592, 593, 5, 112, 0, 0, 593, 599, 5, 101, 0, 0, 594, 595, 5, 114, 0, 0, 595, 596, 5, 115, 0, 0, 596, 597, 5, 104, 0, 0, 597, 599, 5, 112, 0, 0, 598, 587, 1, 0, 0, 0, 598, 594, 1, 0, 0, 0, 599, 102, 1, 0, 0, 0, 600, 601, 5, 114, 0, 0, 601, 602, 5, 97, 0, 0, 602, 603, 5, 110, 0, 0, 603, 604, 5, 103, 0, 0, 604, 605, 5, 101, 0, 0, 605, 104, 1, 0, 0, 0, 606, 607, 5, 116, 0, 0, 607, 608, 5, 111, 0, 0, 608, 609, 5, 112, 0, 0, 609, 610, 5, 107, 0, 0, 610, 106, 1, 0, 0, 0, 611, 612, 5, 98, 0, 0, 612, 613, 5, 111, 0, 0, 613, 614, 5, 116, 0, 0, 614, 615, 5, 107, 0, 0, 615, 108, 1, 0, 0, 0, 616, 617, 5, 112, 0, 0, 617, 618, 5, 105, 0, 0, 618, 619, 5, 110, 0, 0, 619, 620, 5, 118, 0, 0, 620, 110, 1, 0, 0, 0, 621, 622, 5, 115, 0, 0, 622, 623, 5, 117, 0, 0, 623, 624, 5, 109, 0, 0, 624, 112, 1, 0, 0, 0, 625, 626, 5, 109, 0, 0, 626, 627, 5, 101, 0, 0, 627, 628, 5, 97, 0, 0, 628, 629, 5, 110, 0, 0, 629, 114, 1, 0, 0, 0, 630, 631, 5, 115, 0, 0, 631, 632, 5, 116, 0, 0, 632, 633, 5, 100, 0, 0, 633, 116, 1, 0, 0, 0, 634, 635, 5, 118, 0, 0, 635, 636, 5, 97, 0, 0, 636, 637, 5, 114, 0, 0, 637, 118, 1, 0, 0, 0, 638, 639, 5, 113, 0, 0, 639, 640, 5, 117, 0, 0, 640, 641, 5, 97, 0, 0, 641, 642, 5, 114, 0, 0, 642, 643, 5, 116, 0, 0, 643, 644, 5, 105, 0, 0, 644, 645, 5, 108, 0, 0, 645, 654, 5, 101, 0, 0, 646, 647, 5, 113, 0, 0, 647, 648, 5, 117, 0, 0, 648, 649, 5, 97, 0, 0, 649, 650, 5, 114, 0, 0, 650, 651, 5, 116, 0, 0, 651, 652, 5, 105, 0, 0, 652, 654, 5, 108, 0, 0, 653, 638, 1, 0, 0, 0, 653, 646, 1, 0, 0, 0, 654, 120, 1, 0, 0, 0, 655, 656, 5, 112, 0, 0, 656, 657, 5, 101, 0, 0, 657, 658, 5, 114, 0, 0, 658, 659, 5, 99, 0, 0, 659, 660, 5, 101, 0, 0, 660, 661, 5, 110, 0, 0, 661, 662, 5, 116, 0, 0, 662, 663, 5, 105, 0, 0, 663, 664, 5, 108, 0, 0, 664, 671, 5, 101, 0, 0, 665, 666, 5, 112, 0, 0, 666, 667, 5, 114, 0, 0, 667, 668, 5, 99, 0, 0, 668, 669, 5, 110, 0, 0, 669, 671, 5, 116, 0, 0, 670, 655, 1, 0, 0, 0, 670, 665, 1, 0, 0, 0, 671, 122, 1, 0, 0, 0, 672, 673, 5, 113, 0, 0, 673, 674, 5, 117, 0, 0, 674, 675, 5, 97, 0, 0, 675, 676, 5, 110, 0, 0, 676, 677, 5, 116, 0, 0, 677, 678, 5, 105, 0, 0, 678, 679, 5, 108, 0, 0, 679, 680, 5, 101, 0, 0, 680, 124, 1, 0, 0, 0, 681, 682, 5, 100, 0, 0, 682, 683, 5, 111, 0, 0, 683, 684, 5, 116, 0, 0, 684, 126, 1, 0, 0, 0, 685, 686, 5, 109, 0, 0, 686, 687, 5, 111, 0, 0, 687, 688, 5, 109, 0, 0, 688, 689, 5, 101, 0, 0, 689, 690, 5, 110, 0, 0, 690, 691, 5, 116, 0, 0, 691, 128, 1, 0, 0, 0, 692, 693, 5, 97, 0, 0, 693, 694, 5, 110, 0, 0, 694, 695, 5, 121, 0, 0, 695, 130, 1, 0, 0, 0, 696, 697, 5, 97, 0, 0, 697, 698, 5, 108, 0, 0, 698, 699, 5, 108, 0, 0, 699, 132, 1, 0, 0, 0, 700, 701, 5, 101, 0, 0, 701, 702, 5, 100, 0, 0, 702, 703, 5, 103, 0, 0, 703, 704, 5, 101, 0, 0, 704, 134, 1, 0, 0, 0, 705, 706, 5, 98, 0, 0, 706, 707, 5, 108, 0, 0, 707, 708, 5, 117, 0, 0, 708, 718, 5, 114, 0, 0, 709, 710, 5, 103, 0, 0, 710, 711, 5, 97, 0, 0, 711, 712, 5, 117, 0, 0, 712, 713, 5, 115, 0, 0, 713, 714, 5, 115, 0, 0, 714, 715, 5, 105, 0, 0, 715, 716, 5, 97, 0, 0, 716, 718, 5, 110, 0, 0, 717, 705, 1, 0, 0, 0, 717, 709, 1, 0, 0, 0, 718, 136, 1, 0, 0, 0, 719, 720, 5, 109, 0, 0, 720, 721, 5, 101, 0, 0, 721, 722, 5, 100, 0, 0, 722, 723, 5, 105, 0, 0, 723, 724, 5, 97, 0, 0, 724, 725, 5, 110, 0, 0, 725, 138, 1, 0, 0, 0, 726, 727, 5, 109, 0, 0, 727, 728, 5, 111, 0, 0, 728, 729, 5, 100, 0, 0, 729, 730, 5, 101, 0, 0, 730, 140, 1, 0, 0, 0, 731, 732, 5, 99, 0, 0, 732, 733, 5, 117, 0, 0, 733, 734, 5, 109, 0, 0, 734, 735, 5, 115, 0, 0, 735, 736, 5, 117, 0, 0, 736, 737, 5, 109, 0, 0, 737, 142, 1, 0, 0, 0, 738, 739, 5, 99, 0, 0, 739, 740, 5, 117, 0, 0, 740, 741, 5, 109, 0, 0, 741, 742, 5, 112, 0, 0, 742, 743, 5, 114, 0, 0, 743, 744, 5, 111, 0, 0, 744, 745, 5, 100, 0, 0, 745, 144, 1, 0, 0, 0, 746, 747, 5, 116, 0, 0, 747, 748, 5, 111, 0, 0, 748, 749, 5, 112, 0, 0, 749, 750, 5, 107, 0, 0, 750, 751, 5, 95, 0, 0, 751, 752, 5, 105, 0, 0, 752, 753, 5, 110, 0, 0, 753, 767, 5, 100, 0, 0, 754, 755, 5, 116, 0, 0, 755, 756, 5, 111, 0, 0, 756, 757, 5, 112, 0, 0, 757, 758, 5, 107, 0, 0, 758, 759, 5, 95, 0, 0, 759, 760, 5, 105, 0, 0, 760, 761, 5, 110, 0, 0, 761, 762, 5, 100, 0, 0, 762, 763, 5, 105, 0, 0, 763, 764, 5, 99, 0, 0, 764, 765, 5, 101, 0, 0, 765, 767, 5, 115, 0, 0, 766, 746, 1, 0, 0, 0, 766, 754, 1, 0, 0, 0, 767, 146, 1, 0, 0, 0, 768, 769, 5, 98, 0, 0, 769, 770, 5, 111, 0, 0, 770, 771, 5, 116, 0, 0, 771, 772, 5, 107, 0, 0, 772, 773, 5, 95, 0, 0, 773, 774, 5, 105, 0, 0, 774, 775, 5, 110, 0, 0, 775, 789, 5, 100, 0, 0, 776, 777, 5, 98, 0, 0, 777, 778, 5, 111, 0, 0, 778, 779, 5, 116, 0, 0, 779, 780, 5, 107, 0, 0, 780, 781, 5, 95, 0, 0, 781, 782, 5, 105, 0, 0, 782, 783, 5, 110, 0, 0, 783, 784, 5, 100, 0, 0, 784, 785, 5, 105, 0, 0, 785, 786, 5, 99, 0, 0, 786, 787, 5, 101, 0, 0, 787, 789, 5, 115, 0, 0, 788, 768, 1, 0, 0, 0, 788, 776, 1, 0, 0, 0, 789, 148, 1, 0, 0, 0, 790, 791, 5, 99, 0, 0, 791, 792, 5, 117, 0, 0, 792, 793, 5, 98, 0, 0, 793, 794, 5, 105, 0, 0, 794, 795, 5, 99, 0, 0, 795, 796, 5, 95, 0, 0, 796, 797, 5, 101, 0, 0, 797, 798, 5, 97, 0, 0, 798, 799, 5, 115, 0, 0, 799, 806, 5, 101, 0, 0, 800, 801, 5, 99, 0, 0, 801, 802, 5, 117, 0, 0, 802, 803, 5, 98, 0, 0, 803, 804, 5, 105, 0, 0, 804, 806, 5, 99, 0, 0, 805, 790, 1, 0, 0, 0, 805, 800, 1, 0, 0, 0, 806, 150, 1, 0, 0, 0, 807, 808, 5, 101, 0, 0, 808, 809, 5, 108, 0, 0, 809, 810, 5, 97, 0, 0, 810, 811, 5, 115, 0, 0, 811, 812, 5, 116, 0, 0, 812, 813, 5, 105, 0, 0, 813, 814, 5, 99, 0, 0, 814, 815, 5, 95, 0, 0, 815, 816, 5, 101, 0, 0, 816, 817, 5, 97, 0, 0, 817, 818, 5, 115, 0, 0, 818, 827, 5, 101, 0, 0, 819, 820, 5, 101, 0, 0, 820, 821, 5, 108, 0, 0, 821, 822, 5, 97, 0, 0, 822, 823, 5, 115, 0, 0, 823, 824, 5, 116, 0, 0, 824, 825, 5, 105, 0, 0, 825, 827, 5, 99, 0, 0, 826, 807, 1, 0, 0, 0, 826, 819, 1, 0, 0, 0, 827, 152, 1, 0, 0, 0, 828, 829, 5, 115, 0, 0, 829, 830, 5, 105, 0, 0, 830, 831, 5, 110, 0, 0, 831, 832, 5, 101, 0, 0, 832, 833, 5, 95, 0, 0, 833, 834, 5, 101, 0, 0, 834, 835, 5, 97, 0, 0, 835, 836, 5, 115, 0, 0, 836, 842, 5, 101, 0, 0, 837, 838, 5, 115, 0, 0, 838, 839, 5, 105, 0, 0, 839, 840, 5, 110, 0, 0, 840, 842, 5, 101, 0, 0, 841, 828, 1, 0, 0, 0, 841, 837, 1, 0, 0, 0, 842, 154, 1, 0, 0, 0, 843, 844, 5, 115, 0, 0, 844, 845, 5, 109, 0, 0, 845, 846, 5, 111, 0, 0, 846, 847, 5, 111, 0, 0, 847, 848, 5, 116, 0, 0, 848, 849, 5, 104, 0, 0, 849, 850, 5, 101, 0, 0, 850, 851, 5, 114, 0, 0, 851, 852, 5, 115, 0, 0, 852, 853, 5, 116, 0, 0, 853, 854, 5, 101, 0, 0, 854, 855, 5, 112, 0, 0, 855, 156, 1, 0, 0, 0, 856, 857, 5, 100, 0, 0, 857, 858, 5, 105, 0, 0, 858, 859, 5, 115, 0, 0, 859, 869, 5, 116, 0, 0, 860, 861, 5, 100, 0, 0, 861, 862, 5, 105, 0, 0, 862, 863, 5, 115, 0, 0, 863, 864, 5, 116, 0, 0, 864, 865, 5, 97, 0, 0, 865, 866, 5, 110, 0, 0, 866, 867, 5, 99, 0, 0, 867, 869, 5, 101, 0, 0, 868, 856, 1, 0, 0, 0, 868, 860, 1, 0, 0, 0, 869, 158, 1, 0, 0, 0, 870, 871, 5, 114, 0, 0, 871, 872, 5, 101, 0, 0, 872, 873, 5, 109, 0, 0, 873, 874, 5, 97, 0, 0, 874, 875, 5, 112, 0, 0, 875, 160, 1, 0, 0, 0, 876, 877, 5, 105, 0, 0, 877, 878, 5, 102, 0, 0, 878, 162, 1, 0, 0, 0, 879, 880, 5, 101, 0, 0, 880, 881, 5, 108, 0, 0, 881, 882, 5, 115, 0, 0, 882, 883, 5, 101, 0, 0, 883, 164, 1, 0, 0, 0, 884, 885, 5, 119, 0, 0, 885, 886, 5, 104, 0, 0, 886, 887, 5, 105, 0, 0, 887, 888, 5, 108, 0, 0, 888, 889, 5, 101, 0, 0, 889, 166, 1, 0, 0, 0, 890, 891, 5, 114, 0, 0, 891, 892, 5, 101, 0, 0, 892, 893, 5, 116, 0, 0, 893, 894, 5, 117, 0, 0, 894, 895, 5, 114, 0, 0, 895, 896, 5, 110, 0, 0, 896, 168, 1, 0, 0, 0, 897, 898, 5, 112, 0, 0, 898, 899, 5, 117, 0, 0, 899, 900, 5, 115, 0, 0, 900, 901, 5, 104, 0, 0, 901, 170, 1, 0, 0, 0, 902, 903, 5, 112, 0, 0, 903, 904, 5, 111, 0, 0, 904, 905, 5, 112, 0, 0, 905, 172, 1, 0, 0, 0, 906, 907, 5, 99, 0, 0, 907, 908, 5, 108, 0, 0, 908, 909, 5, 101, 0, 0, 909, 910, 5, 97, 0, 0, 910, 911, 5, 114, 0, 0, 911, 174, 1, 0, 0, 0, 912, 913, 5, 104, 0, 0, 913, 914, 5, 97, 0, 0, 914, 915, 5, 115, 0, 0, 915, 176, 1, 0, 0, 0, 916, 917, 5, 103, 0, 0, 917, 918, 5, 101, 0, 0, 918, 919, 5, 116, 0, 0, 919, 178, 1, 0, 0, 0, 920, 921, 5, 110, 0, 0, 921, 922, 5, 111, 0, 0, 922, 923, 5, 105, 0, 0, 923, 924, 5, 115, 0, 0, 924, 944, 5, 101, 0, 0, 925, 926, 5, 114, 0, 0, 926, 927, 5, 97, 0, 0, 927, 928, 5, 110, 0, 0, 928, 929, 5, 100, 0, 0, 929, 944, 5, 110, 0, 0, 930, 931, 5, 114, 0, 0, 931, 932, 5, 97, 0, 0, 932, 933, 5, 110, 0, 0, 933, 934, 5, 100, 0, 0, 934, 935, 5, 111, 0, 0, 935, 936, 5, 109, 0, 0, 936, 937, 5, 95, 0, 0, 937, 938, 5, 110, 0, 0, 938, 939, 5, 111, 0, 0, 939, 940, 5, 114, 0, 0, 940, 941, 5, 109, 0, 0, 941, 942, 5, 97, 0, 0, 942, 944, 5, 108, 0, 0, 943, 920, 1, 0, 0, 0, 943, 925, 1, 0, 0, 0, 943, 930, 1, 0, 0, 0, 944, 180, 1, 0, 0, 0, 945, 946, 5, 114, 0, 0, 946, 947, 5, 97, 0, 0, 947, 948, 5, 110, 0, 0, 948, 969, 5, 100, 0, 0, 949, 950, 5, 114, 0, 0, 950, 951, 5, 97, 0, 0, 951, 952, 5, 110, 0, 0, 952, 953, 5, 100, 0, 0, 953, 969, 5, 117, 0, 0, 954, 955, 5, 114, 0, 0, 955, 956, 5, 97, 0, 0, 956, 957, 5, 110, 0, 0, 957, 958, 5, 100, 0, 0, 958, 959, 5, 111, 0, 0, 959, 960, 5, 109, 0, 0, 960, 961, 5, 95, 0, 0, 961, 962, 5, 117, 0, 0, 962, 963, 5, 110, 0, 0, 963, 964, 5, 105, 0, 0, 964, 965, 5, 102, 0, 0, 965, 966, 5, 111, 0, 0, 966, 967, 5, 114, 0, 0, 967, 969, 5, 109, 0, 0, 968, 945, 1, 0, 0, 0, 968, 949, 1, 0, 0, 0, 968, 954, 1, 0, 0, 0, 969, 182, 1, 0, 0, 0, 970, 971, 5, 114, 0, 0, 971, 972, 5, 97, 0, 0, 972, 973, 5, 110, 0, 0, 973, 974, 5, 100, 0, 0, 974, 989, 5, 99, 0, 0, 975, 976, 5, 114, 0, 0, 976, 977, 5, 97, 0, 0, 977, 978, 5, 110, 0, 0, 978, 979, 5, 100, 0, 0, 979, 980, 5, 111, 0, 0, 980, 981, 5, 109, 0, 0, 981, 982, 5, 95, 0, 0, 982, 983, 5, 99, 0, 0, 983, 984, 5, 97, 0, 0, 984, 985, 5, 117, 0, 0, 985, 986, 5, 99, 0, 0, 986, 987, 5, 104, 0, 0, 987, 989, 5, 121, 0, 0, 988, 970, 1, 0, 0, 0, 988, 975, 1, 0, 0, 0, 989, 184, 1, 0, 0, 0, 990, 991, 5, 114, 0, 0, 991, 992, 5, 97, 0, 0, 992, 993, 5, 110, 0, 0, 993, 994, 5, 100, 0, 0, 994, 1014, 5, 101, 0, 0, 995, 996, 5, 114, 0, 0, 996, 997, 5, 97, 0, 0, 997, 998, 5, 110, 0, 0, 998, 999, 5, 100, 0, 0, 999, 1000, 5, 111, 0, 0, 1000, 1001, 5, 109, 0, 0, 1001, 1002, 5, 95, 0, 0, 1002, 1003, 5, 101, 0, 0, 1003, 1004, 5, 120, 0, 0, 1004, 1005, 5, 112, 0, 0, 1005, 1006, 5, 111, 0, 0, 1006, 1007, 5, 110, 0, 0, 1007, 1008, 5, 101, 0, 0, 1008, 1009, 5, 110, 0, 0, 1009, 1010, 5, 116, 0, 0, 1010, 1011, 5, 105, 0, 0, 1011, 1012, 5, 97, 0, 0, 1012, 1014, 5, 108, 0, 0, 1013, 990, 1, 0, 0, 0, 1013, 995, 1, 0, 0, 0, 1014, 186, 1, 0, 0, 0, 1015, 1016, 5, 114, 0, 0, 1016, 1017, 5, 97, 0, 0, 1017, 1018, 5, 110, 0, 0, 1018, 1019, 5, 100, 0, 0, 1019, 1020, 5, 108, 0, 0, 1020, 1039, 5, 110, 0, 0, 1021, 1022, 5, 114, 0, 0, 1022, 1023, 5, 97, 0, 0, 1023, 1024, 5, 110, 0, 0, 1024, 1025, 5, 100, 0, 0, 1025, 1026, 5, 111, 0, 0, 1026, 1027, 5, 109, 0, 0, 1027, 1028, 5, 95, 0, 0, 1028, 1029, 5, 108, 0, 0, 1029, 1030, 5, 111, 0, 0, 1030, 1031, 5, 103, 0, 0, 1031, 1032, 5, 95, 0, 0, 1032, 1033, 5, 110, 0, 0, 1033, 1034, 5, 111, 0, 0, 1034, 1035, 5, 114, 0, 0, 1035, 1036, 5, 109, 0, 0, 1036, 1037, 5, 97, 0, 0, 1037, 1039, 5, 108, 0, 0, 1038, 1015, 1, 0, 0, 0, 1038, 1021, 1, 0, 0, 0, 1039, 188, 1, 0, 0, 0, 1040, 1041, 5, 114, 0, 0, 1041, 1042, 5, 97, 0, 0, 1042, 1043, 5, 110, 0, 0, 1043, 1044, 5, 100, 0, 0, 1044, 1062, 5, 98, 0, 0, 1045, 1046, 5, 114, 0, 0, 1046, 1047, 5, 97, 0, 0, 1047, 1048, 5, 110, 0, 0, 1048, 1049, 5, 100, 0, 0, 1049, 1050, 5, 111, 0, 0, 1050, 1051, 5, 109, 0, 0, 1051, 1052, 5, 95, 0, 0, 1052, 1053, 5, 98, 0, 0, 1053, 1054, 5, 101, 0, 0, 1054, 1055, 5, 114, 0, 0, 1055, 1056, 5, 110, 0, 0, 1056, 1057, 5, 111, 0, 0, 1057, 1058, 5, 117, 0, 0, 1058, 1059, 5, 108, 0, 0, 1059, 1060, 5, 108, 0, 0, 1060, 1062, 5, 105, 0, 0, 1061, 1040, 1, 0, 0, 0, 1061, 1045, 1, 0, 0, 0, 1062, 190, 1, 0, 0, 0, 1063, 1064, 5, 114, 0, 0, 1064, 1065, 5, 97, 0, 0, 1065, 1066, 5, 110, 0, 0, 1066, 1067, 5, 100, 0, 0, 1067, 1083, 5, 112, 0, 0, 1068, 1069, 5, 114, 0, 0, 1069, 1070, 5, 97, 0, 0, 1070, 1071, 5, 110, 0, 0, 1071, 1072, 5, 100, 0, 0, 1072, 1073, 5, 111, 0, 0, 1073, 1074, 5, 109, 0, 0, 1074, 1075, 5, 95, 0, 0, 1075, 1076, 5, 112, 0, 0, 1076, 1077, 5, 111, 0, 0, 1077, 1078, 5, 105, 0, 0, 1078, 1079, 5, 115, 0, 0, 1079, 1080, 5, 115, 0, 0, 1080, 1081, 5, 111, 0, 0, 1081, 1083, 5, 110, 0, 0, 1082, 1063, 1, 0, 0, 0, 1082, 1068, 1, 0, 0, 0, 1083, 192, 1, 0, 0, 0, 1084, 1085, 5, 99, 0, 0, 1085, 1086, 5, 111, 0, 0, 1086, 1087, 5, 115, 0, 0, 1087, 1088, 5, 115, 0, 0, 1088, 1089, 5, 105, 0, 0, 1089, 1090, 5, 109, 0, 0, 1090, 194, 1, 0, 0, 0, 1091, 1092, 5, 102, 0, 0, 1092, 1093, 5, 108, 0, 0, 1093, 1094, 5, 105, 0, 0, 1094, 1095, 5, 112, 0, 0, 1095, 196, 1, 0, 0, 0, 1096, 1097, 5, 99, 0, 0, 1097, 1098, 5, 111, 0, 0, 1098, 1099, 5, 118, 0, 0, 1099, 198, 1, 0, 0, 0, 1100, 1101, 5, 115, 0, 0, 1101, 1102, 5, 111, 0, 0, 1102, 1103, 5, 114, 0, 0, 1103, 1104, 5, 116, 0, 0, 1104, 200, 1, 0, 0, 0, 1105, 1106, 5, 97, 0, 0, 1106, 1107, 5, 112, 0, 0, 1107, 1108, 5, 112, 0, 0, 1108, 1109, 5, 101, 0, 0, 1109, 1110, 5, 110, 0, 0, 1110, 1111, 5, 100, 0, 0, 1111, 202, 1, 0, 0, 0, 1112, 1113, 5, 116, 0, 0, 1113, 1114, 5, 105, 0, 0, 1114, 1115, 5, 109, 0, 0, 1115, 1116, 5, 101, 0, 0, 1116, 1117, 5, 115, 0, 0, 1117, 1118, 5, 116, 0, 0, 1118, 1119, 5, 97, 0, 0, 1119, 1120, 5, 109, 0, 0, 1120, 1125, 5, 112, 0, 0, 1121, 1122, 5, 110, 0, 0, 1122, 1123, 5, 111, 0, 0, 1123, 1125, 5, 119, 0, 0, 1124, 1112, 1, 0, 0, 0, 1124, 1121, 1, 0, 0, 0, 1125, 204, 1, 0, 0, 0, 1126, 1127, 5, 43, 0, 0, 1127, 206, 1, 0, 0, 0, 1128, 1129, 5, 45, 0, 0, 1129, 208, 1, 0, 0, 0, 1130, 1131, 5, 42, 0, 0, 1131, 210, 1, 0, 0, 0, 1132, 1133, 5, 47, 0, 0, 1133, 212, 1, 0, 0, 0, 1134, 1135, 5, 37, 0, 0, 1135, 214, 1, 0, 0, 0, 1136, 1137, 5, 94, 0, 0, 1137, 216, 1, 0, 0, 0, 1138, 1139, 5, 62, 0, 0, 1139, 1140, 5, 61, 0, 0, 1140, 218, 1, 0, 0, 0, 1141, 1142, 5, 62, 0, 0, 1142, 220, 1, 0, 0, 0, 1143, 1144, 5, 60, 0, 0, 1144, 1145, 5, 61, 0, 0, 1145, 222, 1, 0, 0, 0, 1146, 1147, 5, 60, 0, 0, 1147, 224, 1, 0, 0, 0, 1148, 1149, 5, 61, 0, 0, 1149, 1150, 5, 61, 0, 0, 1150, 226, 1, 0, 0, 0, 1151, 1152, 5, 61, 0, 0, 1152, 228, 1, 0, 0, 0, 1153, 1154, 5, 33, 0, 0, 1154, 1155, 5, 61, 0, 0, 1155, 230, 1, 0, 0, 0, 1156, 1157, 5, 124, 0, 0, 1157, 232, 1, 0, 0, 0, 1158, 1159, 5, 40, 0, 0, 1159, 234, 1, 0, 0, 0, 1160, 1161, 5, 41, 0, 0, 1161, 236, 1, 0, 0, 0, 1162, 1163, 5, 44, 0, 0, 1163, 238, 1, 0, 0, 0, 1164, 1165, 5, 59, 0, 0, 1165, 240, 1, 0, 0, 0, 1166, 1167, 5, 45, 0, 0, 1167, 1168, 5, 62, 0, 0, 1168, 242, 1, 0, 0, 0, 1169, 1170, 5, 91, 0, 0, 1170, 244, 1, 0, 0, 0, 1171, 1172, 5, 93, 0, 0, 1172, 246, 1, 0, 0, 0, 1173, 1174, 5, 63, 0, 0, 1174, 248, 1, 0, 0, 0, 1175, 1176, 5, 58, 0, 0, 1176, 250, 1, 0, 0, 0, 1177, 1178, 5, 123, 0, 0, 1178, 252, 1, 0, 0, 0, 1179, 1180, 5, 125, 0, 0, 1180, 254, 1, 0, 0, 0, 1181, 1182, 5, 112, 0, 0, 1182, 1187, 5, 105, 0, 0, 1183, 1184, 5, 80, 0, 0, 1184, 1187, 5, 73, 0, 0, 1185, 1187, 7, 0, 0, 0, 1186, 1181, 1, 0, 0, 0, 1186, 1183, 1, 0, 0, 0, 1186, 1185, 1, 0, 0, 0, 1187, 256, 1, 0, 0, 0, 1188, 1190, 7, 1, 0, 0, 1189, 1188, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 1189, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 1199, 1, 0, 0, 0, 1193, 1195, 5, 46, 0, 0, 1194, 1196, 7, 1, 0, 0, 1195, 1194, 1, 0, 0, 0, 1196, 1197, 1, 0, 0, 0, 1197, 1195, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1200, 1, 0, 0, 0, 1199, 1193, 1, 0, 0, 0, 1199, 1200, 1, 0, 0, 0, 1200, 258, 1, 0, 0, 0, 1201, 1205, 7, 2, 0, 0, 1202, 1204, 7, 3, 0, 0, 1203, 1202, 1, 0, 0, 0, 1204, 1207, 1, 0, 0, 0, 1205, 1203, 1, 0, 0, 0, 1205, 1206, 1, 0, 0, 0, 1206, 260, 1, 0, 0, 0, 1207, 1205, 1, 0, 0, 0, 1208, 1212, 5, 35, 0, 0, 1209, 1211, 8, 4, 0, 0, 1210, 1209, 1, 0, 0, 0, 1211, 1214, 1, 0, 0, 0, 1212, 1210, 1, 0, 0, 0, 1212, 1213, 1, 0, 0, 0, 1213, 1215, 1, 0, 0, 0, 1214, 1212, 1, 0, 0, 0, 1215, 1216, 6, 130, 0, 0, 1216, 262, 1, 0, 0, 0, 1217, 1218, 5, 47, 0, 0, 1218, 1219, 5, 42, 0, 0, 1219, 1223, 1, 0, 0, 0, 1220, 1222, 9, 0, 0, 0, 1221, 1220, 1, 0, 0, 0, 1222, 1225, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1223, 1221, 1, 0, 0, 0, 1224, 1226, 1, 0, 0, 0, 1225, 1223, 1, 0, 0, 0, 1226, 1227, 5, 42, 0, 0, 1227, 1228, 5, 47, 0, 0, 1228, 1229, 1, 0, 0, 0, 1229, 1230, 6, 131, 0, 0, 1230, 264, 1, 0, 0, 0, 1231, 1233, 7, 5, 0, 0, 1232, 1231, 1, 0, 0, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1232, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1237, 6, 132, 0, 0, 1237, 266, 1, 0, 0, 0, 32, 0, 459, 474, 550, 567, 585, 598, 653, 670, 717, 766, 788, 805, 826, 841, 868, 943, 968, 988, 1013, 1038, 1061, 1082, 1124, 1186, 1191, 1197, 1199, 1205, 1212, 1223, 1234, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 135, 1257, 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, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 464, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 479, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 555, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 572, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 590, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 603, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 658, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 675, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 722, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 771, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 793, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 810, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 831, 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 846, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 873, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 948, 8, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 973, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 993, 8, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 3, 92, 1018, 8, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 1043, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1066, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1087, 8, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1129, 8, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 1206, 8, 129, 1, 130, 4, 130, 1209, 8, 130, 11, 130, 12, 130, 1210, 1, 130, 1, 130, 4, 130, 1215, 8, 130, 11, 130, 12, 130, 1216, 3, 130, 1219, 8, 130, 1, 131, 1, 131, 5, 131, 1223, 8, 131, 10, 131, 12, 131, 1226, 9, 131, 1, 132, 1, 132, 5, 132, 1230, 8, 132, 10, 132, 12, 132, 1233, 9, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1241, 8, 133, 10, 133, 12, 133, 1244, 9, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 4, 134, 1252, 8, 134, 11, 134, 12, 134, 1253, 1, 134, 1, 134, 1, 1242, 0, 135, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 1, 0, 6, 2, 0, 69, 69, 101, 101, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 1290, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 3, 275, 1, 0, 0, 0, 5, 279, 1, 0, 0, 0, 7, 283, 1, 0, 0, 0, 9, 288, 1, 0, 0, 0, 11, 293, 1, 0, 0, 0, 13, 298, 1, 0, 0, 0, 15, 304, 1, 0, 0, 0, 17, 309, 1, 0, 0, 0, 19, 314, 1, 0, 0, 0, 21, 319, 1, 0, 0, 0, 23, 325, 1, 0, 0, 0, 25, 331, 1, 0, 0, 0, 27, 337, 1, 0, 0, 0, 29, 341, 1, 0, 0, 0, 31, 346, 1, 0, 0, 0, 33, 349, 1, 0, 0, 0, 35, 353, 1, 0, 0, 0, 37, 357, 1, 0, 0, 0, 39, 362, 1, 0, 0, 0, 41, 367, 1, 0, 0, 0, 43, 372, 1, 0, 0, 0, 45, 377, 1, 0, 0, 0, 47, 383, 1, 0, 0, 0, 49, 389, 1, 0, 0, 0, 51, 395, 1, 0, 0, 0, 53, 400, 1, 0, 0, 0, 55, 406, 1, 0, 0, 0, 57, 412, 1, 0, 0, 0, 59, 416, 1, 0, 0, 0, 61, 421, 1, 0, 0, 0, 63, 427, 1, 0, 0, 0, 65, 431, 1, 0, 0, 0, 67, 436, 1, 0, 0, 0, 69, 442, 1, 0, 0, 0, 71, 463, 1, 0, 0, 0, 73, 478, 1, 0, 0, 0, 75, 480, 1, 0, 0, 0, 77, 485, 1, 0, 0, 0, 79, 490, 1, 0, 0, 0, 81, 501, 1, 0, 0, 0, 83, 507, 1, 0, 0, 0, 85, 512, 1, 0, 0, 0, 87, 521, 1, 0, 0, 0, 89, 526, 1, 0, 0, 0, 91, 531, 1, 0, 0, 0, 93, 554, 1, 0, 0, 0, 95, 571, 1, 0, 0, 0, 97, 573, 1, 0, 0, 0, 99, 589, 1, 0, 0, 0, 101, 602, 1, 0, 0, 0, 103, 604, 1, 0, 0, 0, 105, 610, 1, 0, 0, 0, 107, 615, 1, 0, 0, 0, 109, 620, 1, 0, 0, 0, 111, 625, 1, 0, 0, 0, 113, 629, 1, 0, 0, 0, 115, 634, 1, 0, 0, 0, 117, 638, 1, 0, 0, 0, 119, 657, 1, 0, 0, 0, 121, 674, 1, 0, 0, 0, 123, 676, 1, 0, 0, 0, 125, 685, 1, 0, 0, 0, 127, 689, 1, 0, 0, 0, 129, 696, 1, 0, 0, 0, 131, 700, 1, 0, 0, 0, 133, 704, 1, 0, 0, 0, 135, 721, 1, 0, 0, 0, 137, 723, 1, 0, 0, 0, 139, 730, 1, 0, 0, 0, 141, 735, 1, 0, 0, 0, 143, 742, 1, 0, 0, 0, 145, 770, 1, 0, 0, 0, 147, 792, 1, 0, 0, 0, 149, 809, 1, 0, 0, 0, 151, 830, 1, 0, 0, 0, 153, 845, 1, 0, 0, 0, 155, 847, 1, 0, 0, 0, 157, 872, 1, 0, 0, 0, 159, 874, 1, 0, 0, 0, 161, 880, 1, 0, 0, 0, 163, 883, 1, 0, 0, 0, 165, 888, 1, 0, 0, 0, 167, 894, 1, 0, 0, 0, 169, 901, 1, 0, 0, 0, 171, 906, 1, 0, 0, 0, 173, 910, 1, 0, 0, 0, 175, 916, 1, 0, 0, 0, 177, 920, 1, 0, 0, 0, 179, 947, 1, 0, 0, 0, 181, 972, 1, 0, 0, 0, 183, 992, 1, 0, 0, 0, 185, 1017, 1, 0, 0, 0, 187, 1042, 1, 0, 0, 0, 189, 1065, 1, 0, 0, 0, 191, 1086, 1, 0, 0, 0, 193, 1088, 1, 0, 0, 0, 195, 1095, 1, 0, 0, 0, 197, 1100, 1, 0, 0, 0, 199, 1104, 1, 0, 0, 0, 201, 1109, 1, 0, 0, 0, 203, 1128, 1, 0, 0, 0, 205, 1130, 1, 0, 0, 0, 207, 1136, 1, 0, 0, 0, 209, 1145, 1, 0, 0, 0, 211, 1147, 1, 0, 0, 0, 213, 1149, 1, 0, 0, 0, 215, 1151, 1, 0, 0, 0, 217, 1153, 1, 0, 0, 0, 219, 1155, 1, 0, 0, 0, 221, 1157, 1, 0, 0, 0, 223, 1160, 1, 0, 0, 0, 225, 1162, 1, 0, 0, 0, 227, 1165, 1, 0, 0, 0, 229, 1167, 1, 0, 0, 0, 231, 1170, 1, 0, 0, 0, 233, 1172, 1, 0, 0, 0, 235, 1175, 1, 0, 0, 0, 237, 1177, 1, 0, 0, 0, 239, 1179, 1, 0, 0, 0, 241, 1181, 1, 0, 0, 0, 243, 1183, 1, 0, 0, 0, 245, 1185, 1, 0, 0, 0, 247, 1188, 1, 0, 0, 0, 249, 1190, 1, 0, 0, 0, 251, 1192, 1, 0, 0, 0, 253, 1194, 1, 0, 0, 0, 255, 1196, 1, 0, 0, 0, 257, 1198, 1, 0, 0, 0, 259, 1205, 1, 0, 0, 0, 261, 1208, 1, 0, 0, 0, 263, 1220, 1, 0, 0, 0, 265, 1227, 1, 0, 0, 0, 267, 1236, 1, 0, 0, 0, 269, 1251, 1, 0, 0, 0, 271, 272, 5, 115, 0, 0, 272, 273, 5, 105, 0, 0, 273, 274, 5, 110, 0, 0, 274, 2, 1, 0, 0, 0, 275, 276, 5, 99, 0, 0, 276, 277, 5, 111, 0, 0, 277, 278, 5, 115, 0, 0, 278, 4, 1, 0, 0, 0, 279, 280, 5, 116, 0, 0, 280, 281, 5, 97, 0, 0, 281, 282, 5, 110, 0, 0, 282, 6, 1, 0, 0, 0, 283, 284, 5, 97, 0, 0, 284, 285, 5, 115, 0, 0, 285, 286, 5, 105, 0, 0, 286, 287, 5, 110, 0, 0, 287, 8, 1, 0, 0, 0, 288, 289, 5, 97, 0, 0, 289, 290, 5, 99, 0, 0, 290, 291, 5, 111, 0, 0, 291, 292, 5, 115, 0, 0, 292, 10, 1, 0, 0, 0, 293, 294, 5, 97, 0, 0, 294, 295, 5, 116, 0, 0, 295, 296, 5, 97, 0, 0, 296, 297, 5, 110, 0, 0, 297, 12, 1, 0, 0, 0, 298, 299, 5, 97, 0, 0, 299, 300, 5, 116, 0, 0, 300, 301, 5, 97, 0, 0, 301, 302, 5, 110, 0, 0, 302, 303, 5, 50, 0, 0, 303, 14, 1, 0, 0, 0, 304, 305, 5, 115, 0, 0, 305, 306, 5, 105, 0, 0, 306, 307, 5, 110, 0, 0, 307, 308, 5, 104, 0, 0, 308, 16, 1, 0, 0, 0, 309, 310, 5, 99, 0, 0, 310, 311, 5, 111, 0, 0, 311, 312, 5, 115, 0, 0, 312, 313, 5, 104, 0, 0, 313, 18, 1, 0, 0, 0, 314, 315, 5, 116, 0, 0, 315, 316, 5, 97, 0, 0, 316, 317, 5, 110, 0, 0, 317, 318, 5, 104, 0, 0, 318, 20, 1, 0, 0, 0, 319, 320, 5, 97, 0, 0, 320, 321, 5, 115, 0, 0, 321, 322, 5, 105, 0, 0, 322, 323, 5, 110, 0, 0, 323, 324, 5, 104, 0, 0, 324, 22, 1, 0, 0, 0, 325, 326, 5, 97, 0, 0, 326, 327, 5, 99, 0, 0, 327, 328, 5, 111, 0, 0, 328, 329, 5, 115, 0, 0, 329, 330, 5, 104, 0, 0, 330, 24, 1, 0, 0, 0, 331, 332, 5, 97, 0, 0, 332, 333, 5, 116, 0, 0, 333, 334, 5, 97, 0, 0, 334, 335, 5, 110, 0, 0, 335, 336, 5, 104, 0, 0, 336, 26, 1, 0, 0, 0, 337, 338, 5, 97, 0, 0, 338, 339, 5, 98, 0, 0, 339, 340, 5, 115, 0, 0, 340, 28, 1, 0, 0, 0, 341, 342, 5, 115, 0, 0, 342, 343, 5, 113, 0, 0, 343, 344, 5, 114, 0, 0, 344, 345, 5, 116, 0, 0, 345, 30, 1, 0, 0, 0, 346, 347, 5, 108, 0, 0, 347, 348, 5, 110, 0, 0, 348, 32, 1, 0, 0, 0, 349, 350, 5, 108, 0, 0, 350, 351, 5, 111, 0, 0, 351, 352, 5, 103, 0, 0, 352, 34, 1, 0, 0, 0, 353, 354, 5, 101, 0, 0, 354, 355, 5, 120, 0, 0, 355, 356, 5, 112, 0, 0, 356, 36, 1, 0, 0, 0, 357, 358, 5, 115, 0, 0, 358, 359, 5, 109, 0, 0, 359, 360, 5, 105, 0, 0, 360, 361, 5, 110, 0, 0, 361, 38, 1, 0, 0, 0, 362, 363, 5, 115, 0, 0, 363, 364, 5, 109, 0, 0, 364, 365, 5, 97, 0, 0, 365, 366, 5, 120, 0, 0, 366, 40, 1, 0, 0, 0, 367, 368, 5, 116, 0, 0, 368, 369, 5, 109, 0, 0, 369, 370, 5, 105, 0, 0, 370, 371, 5, 110, 0, 0, 371, 42, 1, 0, 0, 0, 372, 373, 5, 116, 0, 0, 373, 374, 5, 109, 0, 0, 374, 375, 5, 97, 0, 0, 375, 376, 5, 120, 0, 0, 376, 44, 1, 0, 0, 0, 377, 378, 5, 116, 0, 0, 378, 379, 5, 110, 0, 0, 379, 380, 5, 111, 0, 0, 380, 381, 5, 114, 0, 0, 381, 382, 5, 109, 0, 0, 382, 46, 1, 0, 0, 0, 383, 384, 5, 115, 0, 0, 384, 385, 5, 110, 0, 0, 385, 386, 5, 111, 0, 0, 386, 387, 5, 114, 0, 0, 387, 388, 5, 109, 0, 0, 388, 48, 1, 0, 0, 0, 389, 390, 5, 102, 0, 0, 390, 391, 5, 108, 0, 0, 391, 392, 5, 111, 0, 0, 392, 393, 5, 111, 0, 0, 393, 394, 5, 114, 0, 0, 394, 50, 1, 0, 0, 0, 395, 396, 5, 99, 0, 0, 396, 397, 5, 101, 0, 0, 397, 398, 5, 105, 0, 0, 398, 399, 5, 108, 0, 0, 399, 52, 1, 0, 0, 0, 400, 401, 5, 114, 0, 0, 401, 402, 5, 111, 0, 0, 402, 403, 5, 117, 0, 0, 403, 404, 5, 110, 0, 0, 404, 405, 5, 100, 0, 0, 405, 54, 1, 0, 0, 0, 406, 407, 5, 103, 0, 0, 407, 408, 5, 97, 0, 0, 408, 409, 5, 109, 0, 0, 409, 410, 5, 109, 0, 0, 410, 411, 5, 97, 0, 0, 411, 56, 1, 0, 0, 0, 412, 413, 5, 112, 0, 0, 413, 414, 5, 111, 0, 0, 414, 415, 5, 119, 0, 0, 415, 58, 1, 0, 0, 0, 416, 417, 5, 115, 0, 0, 417, 418, 5, 105, 0, 0, 418, 419, 5, 103, 0, 0, 419, 420, 5, 109, 0, 0, 420, 60, 1, 0, 0, 0, 421, 422, 5, 99, 0, 0, 422, 423, 5, 108, 0, 0, 423, 424, 5, 97, 0, 0, 424, 425, 5, 109, 0, 0, 425, 426, 5, 112, 0, 0, 426, 62, 1, 0, 0, 0, 427, 428, 5, 102, 0, 0, 428, 429, 5, 102, 0, 0, 429, 430, 5, 116, 0, 0, 430, 64, 1, 0, 0, 0, 431, 432, 5, 105, 0, 0, 432, 433, 5, 102, 0, 0, 433, 434, 5, 102, 0, 0, 434, 435, 5, 116, 0, 0, 435, 66, 1, 0, 0, 0, 436, 437, 5, 97, 0, 0, 437, 438, 5, 110, 0, 0, 438, 439, 5, 103, 0, 0, 439, 440, 5, 108, 0, 0, 440, 441, 5, 101, 0, 0, 441, 68, 1, 0, 0, 0, 442, 443, 5, 112, 0, 0, 443, 444, 5, 114, 0, 0, 444, 445, 5, 105, 0, 0, 445, 446, 5, 110, 0, 0, 446, 447, 5, 116, 0, 0, 447, 70, 1, 0, 0, 0, 448, 449, 5, 112, 0, 0, 449, 450, 5, 114, 0, 0, 450, 451, 5, 105, 0, 0, 451, 452, 5, 110, 0, 0, 452, 453, 5, 116, 0, 0, 453, 454, 5, 95, 0, 0, 454, 455, 5, 115, 0, 0, 455, 456, 5, 104, 0, 0, 456, 457, 5, 97, 0, 0, 457, 458, 5, 112, 0, 0, 458, 464, 5, 101, 0, 0, 459, 460, 5, 112, 0, 0, 460, 461, 5, 115, 0, 0, 461, 462, 5, 104, 0, 0, 462, 464, 5, 112, 0, 0, 463, 448, 1, 0, 0, 0, 463, 459, 1, 0, 0, 0, 464, 72, 1, 0, 0, 0, 465, 466, 5, 110, 0, 0, 466, 467, 5, 118, 0, 0, 467, 479, 5, 108, 0, 0, 468, 469, 5, 110, 0, 0, 469, 470, 5, 97, 0, 0, 470, 471, 5, 110, 0, 0, 471, 472, 5, 95, 0, 0, 472, 473, 5, 116, 0, 0, 473, 474, 5, 111, 0, 0, 474, 475, 5, 95, 0, 0, 475, 476, 5, 110, 0, 0, 476, 477, 5, 117, 0, 0, 477, 479, 5, 109, 0, 0, 478, 465, 1, 0, 0, 0, 478, 468, 1, 0, 0, 0, 479, 74, 1, 0, 0, 0, 480, 481, 5, 108, 0, 0, 481, 482, 5, 101, 0, 0, 482, 483, 5, 114, 0, 0, 483, 484, 5, 112, 0, 0, 484, 76, 1, 0, 0, 0, 485, 486, 5, 115, 0, 0, 486, 487, 5, 116, 0, 0, 487, 488, 5, 101, 0, 0, 488, 489, 5, 112, 0, 0, 489, 78, 1, 0, 0, 0, 490, 491, 5, 115, 0, 0, 491, 492, 5, 109, 0, 0, 492, 493, 5, 111, 0, 0, 493, 494, 5, 111, 0, 0, 494, 495, 5, 116, 0, 0, 495, 496, 5, 104, 0, 0, 496, 497, 5, 115, 0, 0, 497, 498, 5, 116, 0, 0, 498, 499, 5, 101, 0, 0, 499, 500, 5, 112, 0, 0, 500, 80, 1, 0, 0, 0, 501, 502, 5, 102, 0, 0, 502, 503, 5, 114, 0, 0, 503, 504, 5, 97, 0, 0, 504, 505, 5, 99, 0, 0, 505, 506, 5, 116, 0, 0, 506, 82, 1, 0, 0, 0, 507, 508, 5, 114, 0, 0, 508, 509, 5, 101, 0, 0, 509, 510, 5, 108, 0, 0, 510, 511, 5, 117, 0, 0, 511, 84, 1, 0, 0, 0, 512, 513, 5, 115, 0, 0, 513, 514, 5, 111, 0, 0, 514, 515, 5, 102, 0, 0, 515, 516, 5, 116, 0, 0, 516, 517, 5, 112, 0, 0, 517, 518, 5, 108, 0, 0, 518, 519, 5, 117, 0, 0, 519, 520, 5, 115, 0, 0, 520, 86, 1, 0, 0, 0, 521, 522, 5, 103, 0, 0, 522, 523, 5, 101, 0, 0, 523, 524, 5, 108, 0, 0, 524, 525, 5, 117, 0, 0, 525, 88, 1, 0, 0, 0, 526, 527, 5, 115, 0, 0, 527, 528, 5, 105, 0, 0, 528, 529, 5, 103, 0, 0, 529, 530, 5, 110, 0, 0, 530, 90, 1, 0, 0, 0, 531, 532, 5, 109, 0, 0, 532, 533, 5, 97, 0, 0, 533, 534, 5, 112, 0, 0, 534, 92, 1, 0, 0, 0, 535, 536, 5, 101, 0, 0, 536, 537, 5, 122, 0, 0, 537, 538, 5, 99, 0, 0, 538, 539, 5, 111, 0, 0, 539, 540, 5, 110, 0, 0, 540, 541, 5, 118, 0, 0, 541, 542, 5, 111, 0, 0, 542, 543, 5, 108, 0, 0, 543, 544, 5, 117, 0, 0, 544, 545, 5, 116, 0, 0, 545, 546, 5, 105, 0, 0, 546, 547, 5, 111, 0, 0, 547, 555, 5, 110, 0, 0, 548, 549, 5, 101, 0, 0, 549, 550, 5, 122, 0, 0, 550, 551, 5, 99, 0, 0, 551, 552, 5, 111, 0, 0, 552, 553, 5, 110, 0, 0, 553, 555, 5, 118, 0, 0, 554, 535, 1, 0, 0, 0, 554, 548, 1, 0, 0, 0, 555, 94, 1, 0, 0, 0, 556, 557, 5, 99, 0, 0, 557, 558, 5, 111, 0, 0, 558, 559, 5, 110, 0, 0, 559, 560, 5, 118, 0, 0, 560, 561, 5, 111, 0, 0, 561, 562, 5, 108, 0, 0, 562, 563, 5, 117, 0, 0, 563, 564, 5, 116, 0, 0, 564, 565, 5, 105, 0, 0, 565, 566, 5, 111, 0, 0, 566, 572, 5, 110, 0, 0, 567, 568, 5, 99, 0, 0, 568, 569, 5, 111, 0, 0, 569, 570, 5, 110, 0, 0, 570, 572, 5, 118, 0, 0, 571, 556, 1, 0, 0, 0, 571, 567, 1, 0, 0, 0, 572, 96, 1, 0, 0, 0, 573, 574, 5, 115, 0, 0, 574, 575, 5, 119, 0, 0, 575, 576, 5, 97, 0, 0, 576, 577, 5, 112, 0, 0, 577, 98, 1, 0, 0, 0, 578, 579, 5, 112, 0, 0, 579, 580, 5, 101, 0, 0, 580, 581, 5, 114, 0, 0, 581, 582, 5, 109, 0, 0, 582, 583, 5, 117, 0, 0, 583, 584, 5, 116, 0, 0, 584, 590, 5, 101, 0, 0, 585, 586, 5, 112, 0, 0, 586, 587, 5, 101, 0, 0, 587, 588, 5, 114, 0, 0, 588, 590, 5, 109, 0, 0, 589, 578, 1, 0, 0, 0, 589, 585, 1, 0, 0, 0, 590, 100, 1, 0, 0, 0, 591, 592, 5, 114, 0, 0, 592, 593, 5, 101, 0, 0, 593, 594, 5, 115, 0, 0, 594, 595, 5, 104, 0, 0, 595, 596, 5, 97, 0, 0, 596, 597, 5, 112, 0, 0, 597, 603, 5, 101, 0, 0, 598, 599, 5, 114, 0, 0, 599, 600, 5, 115, 0, 0, 600, 601, 5, 104, 0, 0, 601, 603, 5, 112, 0, 0, 602, 591, 1, 0, 0, 0, 602, 598, 1, 0, 0, 0, 603, 102, 1, 0, 0, 0, 604, 605, 5, 114, 0, 0, 605, 606, 5, 97, 0, 0, 606, 607, 5, 110, 0, 0, 607, 608, 5, 103, 0, 0, 608, 609, 5, 101, 0, 0, 609, 104, 1, 0, 0, 0, 610, 611, 5, 116, 0, 0, 611, 612, 5, 111, 0, 0, 612, 613, 5, 112, 0, 0, 613, 614, 5, 107, 0, 0, 614, 106, 1, 0, 0, 0, 615, 616, 5, 98, 0, 0, 616, 617, 5, 111, 0, 0, 617, 618, 5, 116, 0, 0, 618, 619, 5, 107, 0, 0, 619, 108, 1, 0, 0, 0, 620, 621, 5, 112, 0, 0, 621, 622, 5, 105, 0, 0, 622, 623, 5, 110, 0, 0, 623, 624, 5, 118, 0, 0, 624, 110, 1, 0, 0, 0, 625, 626, 5, 115, 0, 0, 626, 627, 5, 117, 0, 0, 627, 628, 5, 109, 0, 0, 628, 112, 1, 0, 0, 0, 629, 630, 5, 109, 0, 0, 630, 631, 5, 101, 0, 0, 631, 632, 5, 97, 0, 0, 632, 633, 5, 110, 0, 0, 633, 114, 1, 0, 0, 0, 634, 635, 5, 115, 0, 0, 635, 636, 5, 116, 0, 0, 636, 637, 5, 100, 0, 0, 637, 116, 1, 0, 0, 0, 638, 639, 5, 118, 0, 0, 639, 640, 5, 97, 0, 0, 640, 641, 5, 114, 0, 0, 641, 118, 1, 0, 0, 0, 642, 643, 5, 113, 0, 0, 643, 644, 5, 117, 0, 0, 644, 645, 5, 97, 0, 0, 645, 646, 5, 114, 0, 0, 646, 647, 5, 116, 0, 0, 647, 648, 5, 105, 0, 0, 648, 649, 5, 108, 0, 0, 649, 658, 5, 101, 0, 0, 650, 651, 5, 113, 0, 0, 651, 652, 5, 117, 0, 0, 652, 653, 5, 97, 0, 0, 653, 654, 5, 114, 0, 0, 654, 655, 5, 116, 0, 0, 655, 656, 5, 105, 0, 0, 656, 658, 5, 108, 0, 0, 657, 642, 1, 0, 0, 0, 657, 650, 1, 0, 0, 0, 658, 120, 1, 0, 0, 0, 659, 660, 5, 112, 0, 0, 660, 661, 5, 101, 0, 0, 661, 662, 5, 114, 0, 0, 662, 663, 5, 99, 0, 0, 663, 664, 5, 101, 0, 0, 664, 665, 5, 110, 0, 0, 665, 666, 5, 116, 0, 0, 666, 667, 5, 105, 0, 0, 667, 668, 5, 108, 0, 0, 668, 675, 5, 101, 0, 0, 669, 670, 5, 112, 0, 0, 670, 671, 5, 114, 0, 0, 671, 672, 5, 99, 0, 0, 672, 673, 5, 110, 0, 0, 673, 675, 5, 116, 0, 0, 674, 659, 1, 0, 0, 0, 674, 669, 1, 0, 0, 0, 675, 122, 1, 0, 0, 0, 676, 677, 5, 113, 0, 0, 677, 678, 5, 117, 0, 0, 678, 679, 5, 97, 0, 0, 679, 680, 5, 110, 0, 0, 680, 681, 5, 116, 0, 0, 681, 682, 5, 105, 0, 0, 682, 683, 5, 108, 0, 0, 683, 684, 5, 101, 0, 0, 684, 124, 1, 0, 0, 0, 685, 686, 5, 100, 0, 0, 686, 687, 5, 111, 0, 0, 687, 688, 5, 116, 0, 0, 688, 126, 1, 0, 0, 0, 689, 690, 5, 109, 0, 0, 690, 691, 5, 111, 0, 0, 691, 692, 5, 109, 0, 0, 692, 693, 5, 101, 0, 0, 693, 694, 5, 110, 0, 0, 694, 695, 5, 116, 0, 0, 695, 128, 1, 0, 0, 0, 696, 697, 5, 97, 0, 0, 697, 698, 5, 110, 0, 0, 698, 699, 5, 121, 0, 0, 699, 130, 1, 0, 0, 0, 700, 701, 5, 97, 0, 0, 701, 702, 5, 108, 0, 0, 702, 703, 5, 108, 0, 0, 703, 132, 1, 0, 0, 0, 704, 705, 5, 101, 0, 0, 705, 706, 5, 100, 0, 0, 706, 707, 5, 103, 0, 0, 707, 708, 5, 101, 0, 0, 708, 134, 1, 0, 0, 0, 709, 710, 5, 98, 0, 0, 710, 711, 5, 108, 0, 0, 711, 712, 5, 117, 0, 0, 712, 722, 5, 114, 0, 0, 713, 714, 5, 103, 0, 0, 714, 715, 5, 97, 0, 0, 715, 716, 5, 117, 0, 0, 716, 717, 5, 115, 0, 0, 717, 718, 5, 115, 0, 0, 718, 719, 5, 105, 0, 0, 719, 720, 5, 97, 0, 0, 720, 722, 5, 110, 0, 0, 721, 709, 1, 0, 0, 0, 721, 713, 1, 0, 0, 0, 722, 136, 1, 0, 0, 0, 723, 724, 5, 109, 0, 0, 724, 725, 5, 101, 0, 0, 725, 726, 5, 100, 0, 0, 726, 727, 5, 105, 0, 0, 727, 728, 5, 97, 0, 0, 728, 729, 5, 110, 0, 0, 729, 138, 1, 0, 0, 0, 730, 731, 5, 109, 0, 0, 731, 732, 5, 111, 0, 0, 732, 733, 5, 100, 0, 0, 733, 734, 5, 101, 0, 0, 734, 140, 1, 0, 0, 0, 735, 736, 5, 99, 0, 0, 736, 737, 5, 117, 0, 0, 737, 738, 5, 109, 0, 0, 738, 739, 5, 115, 0, 0, 739, 740, 5, 117, 0, 0, 740, 741, 5, 109, 0, 0, 741, 142, 1, 0, 0, 0, 742, 743, 5, 99, 0, 0, 743, 744, 5, 117, 0, 0, 744, 745, 5, 109, 0, 0, 745, 746, 5, 112, 0, 0, 746, 747, 5, 114, 0, 0, 747, 748, 5, 111, 0, 0, 748, 749, 5, 100, 0, 0, 749, 144, 1, 0, 0, 0, 750, 751, 5, 116, 0, 0, 751, 752, 5, 111, 0, 0, 752, 753, 5, 112, 0, 0, 753, 754, 5, 107, 0, 0, 754, 755, 5, 95, 0, 0, 755, 756, 5, 105, 0, 0, 756, 757, 5, 110, 0, 0, 757, 771, 5, 100, 0, 0, 758, 759, 5, 116, 0, 0, 759, 760, 5, 111, 0, 0, 760, 761, 5, 112, 0, 0, 761, 762, 5, 107, 0, 0, 762, 763, 5, 95, 0, 0, 763, 764, 5, 105, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 5, 100, 0, 0, 766, 767, 5, 105, 0, 0, 767, 768, 5, 99, 0, 0, 768, 769, 5, 101, 0, 0, 769, 771, 5, 115, 0, 0, 770, 750, 1, 0, 0, 0, 770, 758, 1, 0, 0, 0, 771, 146, 1, 0, 0, 0, 772, 773, 5, 98, 0, 0, 773, 774, 5, 111, 0, 0, 774, 775, 5, 116, 0, 0, 775, 776, 5, 107, 0, 0, 776, 777, 5, 95, 0, 0, 777, 778, 5, 105, 0, 0, 778, 779, 5, 110, 0, 0, 779, 793, 5, 100, 0, 0, 780, 781, 5, 98, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 116, 0, 0, 783, 784, 5, 107, 0, 0, 784, 785, 5, 95, 0, 0, 785, 786, 5, 105, 0, 0, 786, 787, 5, 110, 0, 0, 787, 788, 5, 100, 0, 0, 788, 789, 5, 105, 0, 0, 789, 790, 5, 99, 0, 0, 790, 791, 5, 101, 0, 0, 791, 793, 5, 115, 0, 0, 792, 772, 1, 0, 0, 0, 792, 780, 1, 0, 0, 0, 793, 148, 1, 0, 0, 0, 794, 795, 5, 99, 0, 0, 795, 796, 5, 117, 0, 0, 796, 797, 5, 98, 0, 0, 797, 798, 5, 105, 0, 0, 798, 799, 5, 99, 0, 0, 799, 800, 5, 95, 0, 0, 800, 801, 5, 101, 0, 0, 801, 802, 5, 97, 0, 0, 802, 803, 5, 115, 0, 0, 803, 810, 5, 101, 0, 0, 804, 805, 5, 99, 0, 0, 805, 806, 5, 117, 0, 0, 806, 807, 5, 98, 0, 0, 807, 808, 5, 105, 0, 0, 808, 810, 5, 99, 0, 0, 809, 794, 1, 0, 0, 0, 809, 804, 1, 0, 0, 0, 810, 150, 1, 0, 0, 0, 811, 812, 5, 101, 0, 0, 812, 813, 5, 108, 0, 0, 813, 814, 5, 97, 0, 0, 814, 815, 5, 115, 0, 0, 815, 816, 5, 116, 0, 0, 816, 817, 5, 105, 0, 0, 817, 818, 5, 99, 0, 0, 818, 819, 5, 95, 0, 0, 819, 820, 5, 101, 0, 0, 820, 821, 5, 97, 0, 0, 821, 822, 5, 115, 0, 0, 822, 831, 5, 101, 0, 0, 823, 824, 5, 101, 0, 0, 824, 825, 5, 108, 0, 0, 825, 826, 5, 97, 0, 0, 826, 827, 5, 115, 0, 0, 827, 828, 5, 116, 0, 0, 828, 829, 5, 105, 0, 0, 829, 831, 5, 99, 0, 0, 830, 811, 1, 0, 0, 0, 830, 823, 1, 0, 0, 0, 831, 152, 1, 0, 0, 0, 832, 833, 5, 115, 0, 0, 833, 834, 5, 105, 0, 0, 834, 835, 5, 110, 0, 0, 835, 836, 5, 101, 0, 0, 836, 837, 5, 95, 0, 0, 837, 838, 5, 101, 0, 0, 838, 839, 5, 97, 0, 0, 839, 840, 5, 115, 0, 0, 840, 846, 5, 101, 0, 0, 841, 842, 5, 115, 0, 0, 842, 843, 5, 105, 0, 0, 843, 844, 5, 110, 0, 0, 844, 846, 5, 101, 0, 0, 845, 832, 1, 0, 0, 0, 845, 841, 1, 0, 0, 0, 846, 154, 1, 0, 0, 0, 847, 848, 5, 115, 0, 0, 848, 849, 5, 109, 0, 0, 849, 850, 5, 111, 0, 0, 850, 851, 5, 111, 0, 0, 851, 852, 5, 116, 0, 0, 852, 853, 5, 104, 0, 0, 853, 854, 5, 101, 0, 0, 854, 855, 5, 114, 0, 0, 855, 856, 5, 115, 0, 0, 856, 857, 5, 116, 0, 0, 857, 858, 5, 101, 0, 0, 858, 859, 5, 112, 0, 0, 859, 156, 1, 0, 0, 0, 860, 861, 5, 100, 0, 0, 861, 862, 5, 105, 0, 0, 862, 863, 5, 115, 0, 0, 863, 873, 5, 116, 0, 0, 864, 865, 5, 100, 0, 0, 865, 866, 5, 105, 0, 0, 866, 867, 5, 115, 0, 0, 867, 868, 5, 116, 0, 0, 868, 869, 5, 97, 0, 0, 869, 870, 5, 110, 0, 0, 870, 871, 5, 99, 0, 0, 871, 873, 5, 101, 0, 0, 872, 860, 1, 0, 0, 0, 872, 864, 1, 0, 0, 0, 873, 158, 1, 0, 0, 0, 874, 875, 5, 114, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 109, 0, 0, 877, 878, 5, 97, 0, 0, 878, 879, 5, 112, 0, 0, 879, 160, 1, 0, 0, 0, 880, 881, 5, 105, 0, 0, 881, 882, 5, 102, 0, 0, 882, 162, 1, 0, 0, 0, 883, 884, 5, 101, 0, 0, 884, 885, 5, 108, 0, 0, 885, 886, 5, 115, 0, 0, 886, 887, 5, 101, 0, 0, 887, 164, 1, 0, 0, 0, 888, 889, 5, 119, 0, 0, 889, 890, 5, 104, 0, 0, 890, 891, 5, 105, 0, 0, 891, 892, 5, 108, 0, 0, 892, 893, 5, 101, 0, 0, 893, 166, 1, 0, 0, 0, 894, 895, 5, 114, 0, 0, 895, 896, 5, 101, 0, 0, 896, 897, 5, 116, 0, 0, 897, 898, 5, 117, 0, 0, 898, 899, 5, 114, 0, 0, 899, 900, 5, 110, 0, 0, 900, 168, 1, 0, 0, 0, 901, 902, 5, 112, 0, 0, 902, 903, 5, 117, 0, 0, 903, 904, 5, 115, 0, 0, 904, 905, 5, 104, 0, 0, 905, 170, 1, 0, 0, 0, 906, 907, 5, 112, 0, 0, 907, 908, 5, 111, 0, 0, 908, 909, 5, 112, 0, 0, 909, 172, 1, 0, 0, 0, 910, 911, 5, 99, 0, 0, 911, 912, 5, 108, 0, 0, 912, 913, 5, 101, 0, 0, 913, 914, 5, 97, 0, 0, 914, 915, 5, 114, 0, 0, 915, 174, 1, 0, 0, 0, 916, 917, 5, 104, 0, 0, 917, 918, 5, 97, 0, 0, 918, 919, 5, 115, 0, 0, 919, 176, 1, 0, 0, 0, 920, 921, 5, 103, 0, 0, 921, 922, 5, 101, 0, 0, 922, 923, 5, 116, 0, 0, 923, 178, 1, 0, 0, 0, 924, 925, 5, 110, 0, 0, 925, 926, 5, 111, 0, 0, 926, 927, 5, 105, 0, 0, 927, 928, 5, 115, 0, 0, 928, 948, 5, 101, 0, 0, 929, 930, 5, 114, 0, 0, 930, 931, 5, 97, 0, 0, 931, 932, 5, 110, 0, 0, 932, 933, 5, 100, 0, 0, 933, 948, 5, 110, 0, 0, 934, 935, 5, 114, 0, 0, 935, 936, 5, 97, 0, 0, 936, 937, 5, 110, 0, 0, 937, 938, 5, 100, 0, 0, 938, 939, 5, 111, 0, 0, 939, 940, 5, 109, 0, 0, 940, 941, 5, 95, 0, 0, 941, 942, 5, 110, 0, 0, 942, 943, 5, 111, 0, 0, 943, 944, 5, 114, 0, 0, 944, 945, 5, 109, 0, 0, 945, 946, 5, 97, 0, 0, 946, 948, 5, 108, 0, 0, 947, 924, 1, 0, 0, 0, 947, 929, 1, 0, 0, 0, 947, 934, 1, 0, 0, 0, 948, 180, 1, 0, 0, 0, 949, 950, 5, 114, 0, 0, 950, 951, 5, 97, 0, 0, 951, 952, 5, 110, 0, 0, 952, 973, 5, 100, 0, 0, 953, 954, 5, 114, 0, 0, 954, 955, 5, 97, 0, 0, 955, 956, 5, 110, 0, 0, 956, 957, 5, 100, 0, 0, 957, 973, 5, 117, 0, 0, 958, 959, 5, 114, 0, 0, 959, 960, 5, 97, 0, 0, 960, 961, 5, 110, 0, 0, 961, 962, 5, 100, 0, 0, 962, 963, 5, 111, 0, 0, 963, 964, 5, 109, 0, 0, 964, 965, 5, 95, 0, 0, 965, 966, 5, 117, 0, 0, 966, 967, 5, 110, 0, 0, 967, 968, 5, 105, 0, 0, 968, 969, 5, 102, 0, 0, 969, 970, 5, 111, 0, 0, 970, 971, 5, 114, 0, 0, 971, 973, 5, 109, 0, 0, 972, 949, 1, 0, 0, 0, 972, 953, 1, 0, 0, 0, 972, 958, 1, 0, 0, 0, 973, 182, 1, 0, 0, 0, 974, 975, 5, 114, 0, 0, 975, 976, 5, 97, 0, 0, 976, 977, 5, 110, 0, 0, 977, 978, 5, 100, 0, 0, 978, 993, 5, 99, 0, 0, 979, 980, 5, 114, 0, 0, 980, 981, 5, 97, 0, 0, 981, 982, 5, 110, 0, 0, 982, 983, 5, 100, 0, 0, 983, 984, 5, 111, 0, 0, 984, 985, 5, 109, 0, 0, 985, 986, 5, 95, 0, 0, 986, 987, 5, 99, 0, 0, 987, 988, 5, 97, 0, 0, 988, 989, 5, 117, 0, 0, 989, 990, 5, 99, 0, 0, 990, 991, 5, 104, 0, 0, 991, 993, 5, 121, 0, 0, 992, 974, 1, 0, 0, 0, 992, 979, 1, 0, 0, 0, 993, 184, 1, 0, 0, 0, 994, 995, 5, 114, 0, 0, 995, 996, 5, 97, 0, 0, 996, 997, 5, 110, 0, 0, 997, 998, 5, 100, 0, 0, 998, 1018, 5, 101, 0, 0, 999, 1000, 5, 114, 0, 0, 1000, 1001, 5, 97, 0, 0, 1001, 1002, 5, 110, 0, 0, 1002, 1003, 5, 100, 0, 0, 1003, 1004, 5, 111, 0, 0, 1004, 1005, 5, 109, 0, 0, 1005, 1006, 5, 95, 0, 0, 1006, 1007, 5, 101, 0, 0, 1007, 1008, 5, 120, 0, 0, 1008, 1009, 5, 112, 0, 0, 1009, 1010, 5, 111, 0, 0, 1010, 1011, 5, 110, 0, 0, 1011, 1012, 5, 101, 0, 0, 1012, 1013, 5, 110, 0, 0, 1013, 1014, 5, 116, 0, 0, 1014, 1015, 5, 105, 0, 0, 1015, 1016, 5, 97, 0, 0, 1016, 1018, 5, 108, 0, 0, 1017, 994, 1, 0, 0, 0, 1017, 999, 1, 0, 0, 0, 1018, 186, 1, 0, 0, 0, 1019, 1020, 5, 114, 0, 0, 1020, 1021, 5, 97, 0, 0, 1021, 1022, 5, 110, 0, 0, 1022, 1023, 5, 100, 0, 0, 1023, 1024, 5, 108, 0, 0, 1024, 1043, 5, 110, 0, 0, 1025, 1026, 5, 114, 0, 0, 1026, 1027, 5, 97, 0, 0, 1027, 1028, 5, 110, 0, 0, 1028, 1029, 5, 100, 0, 0, 1029, 1030, 5, 111, 0, 0, 1030, 1031, 5, 109, 0, 0, 1031, 1032, 5, 95, 0, 0, 1032, 1033, 5, 108, 0, 0, 1033, 1034, 5, 111, 0, 0, 1034, 1035, 5, 103, 0, 0, 1035, 1036, 5, 95, 0, 0, 1036, 1037, 5, 110, 0, 0, 1037, 1038, 5, 111, 0, 0, 1038, 1039, 5, 114, 0, 0, 1039, 1040, 5, 109, 0, 0, 1040, 1041, 5, 97, 0, 0, 1041, 1043, 5, 108, 0, 0, 1042, 1019, 1, 0, 0, 0, 1042, 1025, 1, 0, 0, 0, 1043, 188, 1, 0, 0, 0, 1044, 1045, 5, 114, 0, 0, 1045, 1046, 5, 97, 0, 0, 1046, 1047, 5, 110, 0, 0, 1047, 1048, 5, 100, 0, 0, 1048, 1066, 5, 98, 0, 0, 1049, 1050, 5, 114, 0, 0, 1050, 1051, 5, 97, 0, 0, 1051, 1052, 5, 110, 0, 0, 1052, 1053, 5, 100, 0, 0, 1053, 1054, 5, 111, 0, 0, 1054, 1055, 5, 109, 0, 0, 1055, 1056, 5, 95, 0, 0, 1056, 1057, 5, 98, 0, 0, 1057, 1058, 5, 101, 0, 0, 1058, 1059, 5, 114, 0, 0, 1059, 1060, 5, 110, 0, 0, 1060, 1061, 5, 111, 0, 0, 1061, 1062, 5, 117, 0, 0, 1062, 1063, 5, 108, 0, 0, 1063, 1064, 5, 108, 0, 0, 1064, 1066, 5, 105, 0, 0, 1065, 1044, 1, 0, 0, 0, 1065, 1049, 1, 0, 0, 0, 1066, 190, 1, 0, 0, 0, 1067, 1068, 5, 114, 0, 0, 1068, 1069, 5, 97, 0, 0, 1069, 1070, 5, 110, 0, 0, 1070, 1071, 5, 100, 0, 0, 1071, 1087, 5, 112, 0, 0, 1072, 1073, 5, 114, 0, 0, 1073, 1074, 5, 97, 0, 0, 1074, 1075, 5, 110, 0, 0, 1075, 1076, 5, 100, 0, 0, 1076, 1077, 5, 111, 0, 0, 1077, 1078, 5, 109, 0, 0, 1078, 1079, 5, 95, 0, 0, 1079, 1080, 5, 112, 0, 0, 1080, 1081, 5, 111, 0, 0, 1081, 1082, 5, 105, 0, 0, 1082, 1083, 5, 115, 0, 0, 1083, 1084, 5, 115, 0, 0, 1084, 1085, 5, 111, 0, 0, 1085, 1087, 5, 110, 0, 0, 1086, 1067, 1, 0, 0, 0, 1086, 1072, 1, 0, 0, 0, 1087, 192, 1, 0, 0, 0, 1088, 1089, 5, 99, 0, 0, 1089, 1090, 5, 111, 0, 0, 1090, 1091, 5, 115, 0, 0, 1091, 1092, 5, 115, 0, 0, 1092, 1093, 5, 105, 0, 0, 1093, 1094, 5, 109, 0, 0, 1094, 194, 1, 0, 0, 0, 1095, 1096, 5, 102, 0, 0, 1096, 1097, 5, 108, 0, 0, 1097, 1098, 5, 105, 0, 0, 1098, 1099, 5, 112, 0, 0, 1099, 196, 1, 0, 0, 0, 1100, 1101, 5, 99, 0, 0, 1101, 1102, 5, 111, 0, 0, 1102, 1103, 5, 118, 0, 0, 1103, 198, 1, 0, 0, 0, 1104, 1105, 5, 115, 0, 0, 1105, 1106, 5, 111, 0, 0, 1106, 1107, 5, 114, 0, 0, 1107, 1108, 5, 116, 0, 0, 1108, 200, 1, 0, 0, 0, 1109, 1110, 5, 97, 0, 0, 1110, 1111, 5, 112, 0, 0, 1111, 1112, 5, 112, 0, 0, 1112, 1113, 5, 101, 0, 0, 1113, 1114, 5, 110, 0, 0, 1114, 1115, 5, 100, 0, 0, 1115, 202, 1, 0, 0, 0, 1116, 1117, 5, 116, 0, 0, 1117, 1118, 5, 105, 0, 0, 1118, 1119, 5, 109, 0, 0, 1119, 1120, 5, 101, 0, 0, 1120, 1121, 5, 115, 0, 0, 1121, 1122, 5, 116, 0, 0, 1122, 1123, 5, 97, 0, 0, 1123, 1124, 5, 109, 0, 0, 1124, 1129, 5, 112, 0, 0, 1125, 1126, 5, 110, 0, 0, 1126, 1127, 5, 111, 0, 0, 1127, 1129, 5, 119, 0, 0, 1128, 1116, 1, 0, 0, 0, 1128, 1125, 1, 0, 0, 0, 1129, 204, 1, 0, 0, 0, 1130, 1131, 5, 98, 0, 0, 1131, 1132, 5, 114, 0, 0, 1132, 1133, 5, 101, 0, 0, 1133, 1134, 5, 97, 0, 0, 1134, 1135, 5, 107, 0, 0, 1135, 206, 1, 0, 0, 0, 1136, 1137, 5, 99, 0, 0, 1137, 1138, 5, 111, 0, 0, 1138, 1139, 5, 110, 0, 0, 1139, 1140, 5, 116, 0, 0, 1140, 1141, 5, 105, 0, 0, 1141, 1142, 5, 110, 0, 0, 1142, 1143, 5, 117, 0, 0, 1143, 1144, 5, 101, 0, 0, 1144, 208, 1, 0, 0, 0, 1145, 1146, 5, 43, 0, 0, 1146, 210, 1, 0, 0, 0, 1147, 1148, 5, 45, 0, 0, 1148, 212, 1, 0, 0, 0, 1149, 1150, 5, 42, 0, 0, 1150, 214, 1, 0, 0, 0, 1151, 1152, 5, 47, 0, 0, 1152, 216, 1, 0, 0, 0, 1153, 1154, 5, 37, 0, 0, 1154, 218, 1, 0, 0, 0, 1155, 1156, 5, 94, 0, 0, 1156, 220, 1, 0, 0, 0, 1157, 1158, 5, 62, 0, 0, 1158, 1159, 5, 61, 0, 0, 1159, 222, 1, 0, 0, 0, 1160, 1161, 5, 62, 0, 0, 1161, 224, 1, 0, 0, 0, 1162, 1163, 5, 60, 0, 0, 1163, 1164, 5, 61, 0, 0, 1164, 226, 1, 0, 0, 0, 1165, 1166, 5, 60, 0, 0, 1166, 228, 1, 0, 0, 0, 1167, 1168, 5, 61, 0, 0, 1168, 1169, 5, 61, 0, 0, 1169, 230, 1, 0, 0, 0, 1170, 1171, 5, 61, 0, 0, 1171, 232, 1, 0, 0, 0, 1172, 1173, 5, 33, 0, 0, 1173, 1174, 5, 61, 0, 0, 1174, 234, 1, 0, 0, 0, 1175, 1176, 5, 124, 0, 0, 1176, 236, 1, 0, 0, 0, 1177, 1178, 5, 40, 0, 0, 1178, 238, 1, 0, 0, 0, 1179, 1180, 5, 41, 0, 0, 1180, 240, 1, 0, 0, 0, 1181, 1182, 5, 44, 0, 0, 1182, 242, 1, 0, 0, 0, 1183, 1184, 5, 59, 0, 0, 1184, 244, 1, 0, 0, 0, 1185, 1186, 5, 45, 0, 0, 1186, 1187, 5, 62, 0, 0, 1187, 246, 1, 0, 0, 0, 1188, 1189, 5, 91, 0, 0, 1189, 248, 1, 0, 0, 0, 1190, 1191, 5, 93, 0, 0, 1191, 250, 1, 0, 0, 0, 1192, 1193, 5, 63, 0, 0, 1193, 252, 1, 0, 0, 0, 1194, 1195, 5, 58, 0, 0, 1195, 254, 1, 0, 0, 0, 1196, 1197, 5, 123, 0, 0, 1197, 256, 1, 0, 0, 0, 1198, 1199, 5, 125, 0, 0, 1199, 258, 1, 0, 0, 0, 1200, 1201, 5, 112, 0, 0, 1201, 1206, 5, 105, 0, 0, 1202, 1203, 5, 80, 0, 0, 1203, 1206, 5, 73, 0, 0, 1204, 1206, 7, 0, 0, 0, 1205, 1200, 1, 0, 0, 0, 1205, 1202, 1, 0, 0, 0, 1205, 1204, 1, 0, 0, 0, 1206, 260, 1, 0, 0, 0, 1207, 1209, 7, 1, 0, 0, 1208, 1207, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 1208, 1, 0, 0, 0, 1210, 1211, 1, 0, 0, 0, 1211, 1218, 1, 0, 0, 0, 1212, 1214, 5, 46, 0, 0, 1213, 1215, 7, 1, 0, 0, 1214, 1213, 1, 0, 0, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1214, 1, 0, 0, 0, 1216, 1217, 1, 0, 0, 0, 1217, 1219, 1, 0, 0, 0, 1218, 1212, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 262, 1, 0, 0, 0, 1220, 1224, 7, 2, 0, 0, 1221, 1223, 7, 3, 0, 0, 1222, 1221, 1, 0, 0, 0, 1223, 1226, 1, 0, 0, 0, 1224, 1222, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 264, 1, 0, 0, 0, 1226, 1224, 1, 0, 0, 0, 1227, 1231, 5, 35, 0, 0, 1228, 1230, 8, 4, 0, 0, 1229, 1228, 1, 0, 0, 0, 1230, 1233, 1, 0, 0, 0, 1231, 1229, 1, 0, 0, 0, 1231, 1232, 1, 0, 0, 0, 1232, 1234, 1, 0, 0, 0, 1233, 1231, 1, 0, 0, 0, 1234, 1235, 6, 132, 0, 0, 1235, 266, 1, 0, 0, 0, 1236, 1237, 5, 47, 0, 0, 1237, 1238, 5, 42, 0, 0, 1238, 1242, 1, 0, 0, 0, 1239, 1241, 9, 0, 0, 0, 1240, 1239, 1, 0, 0, 0, 1241, 1244, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1242, 1240, 1, 0, 0, 0, 1243, 1245, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1245, 1246, 5, 42, 0, 0, 1246, 1247, 5, 47, 0, 0, 1247, 1248, 1, 0, 0, 0, 1248, 1249, 6, 133, 0, 0, 1249, 268, 1, 0, 0, 0, 1250, 1252, 7, 5, 0, 0, 1251, 1250, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1251, 1, 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 1255, 1, 0, 0, 0, 1255, 1256, 6, 134, 0, 0, 1256, 270, 1, 0, 0, 0, 32, 0, 463, 478, 554, 571, 589, 602, 657, 674, 721, 770, 792, 809, 830, 845, 872, 947, 972, 992, 1017, 1042, 1065, 1086, 1128, 1205, 1210, 1216, 1218, 1224, 1231, 1242, 1253, 1, 6, 0, 0] \ No newline at end of file diff --git a/more_math/Parser/MathExprLexer.py b/more_math/Parser/MathExprLexer.py index 1204d9e..9a67eaa 100644 --- a/more_math/Parser/MathExprLexer.py +++ b/more_math/Parser/MathExprLexer.py @@ -10,7 +10,7 @@ else: def serializedATN(): return [ - 4,0,133,1238,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, + 4,0,135,1257,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, @@ -31,102 +31,104 @@ def serializedATN(): 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125, 7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130, - 2,131,7,131,2,132,7,132,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2, - 1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5, - 1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8, - 1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11, - 1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13, - 1,13,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,16,1,16,1,16,1,16, - 1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19, - 1,19,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,22,1,22, - 1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24, - 1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26, - 1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,29,1,29, - 1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31, - 1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34, - 1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35, - 1,35,1,35,1,35,1,35,1,35,1,35,3,35,460,8,35,1,36,1,36,1,36,1,36, - 1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,475,8,36,1,37, - 1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39, - 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40, - 1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,45,1,45, - 1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46, - 1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,46,551,8,46,1,47,1,47, - 1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47, - 3,47,568,8,47,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49, - 1,49,1,49,1,49,1,49,1,49,1,49,3,49,586,8,49,1,50,1,50,1,50,1,50, - 1,50,1,50,1,50,1,50,1,50,1,50,1,50,3,50,599,8,50,1,51,1,51,1,51, - 1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53, - 1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56, - 1,56,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59, - 1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,3,59,654, - 8,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60, - 1,60,1,60,1,60,3,60,671,8,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61, - 1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63, - 1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66, - 1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,3,67, - 718,8,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69, - 1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71, - 1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72, - 1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,3,72,767,8,72, - 1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73, - 1,73,1,73,1,73,1,73,1,73,1,73,1,73,3,73,789,8,73,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74, - 806,8,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75, - 1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,3,75,827,8,75,1,76,1,76, - 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,3,76,842, - 8,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77, - 1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, - 3,78,869,8,78,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,81, - 1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83, - 1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85, - 1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,88,1,88,1,88, - 1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89, - 1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,3,89,944, - 8,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90, - 1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,3,90,969, - 8,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91, - 1,91,1,91,1,91,1,91,1,91,1,91,3,91,989,8,91,1,92,1,92,1,92,1,92, + 2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,1,0,1,0,1,0,1,0, + 1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4, + 1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7, + 1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1, + 10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1, + 12,1,12,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1, + 15,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1, + 18,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1, + 21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1, + 23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1, + 26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1, + 28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1, + 30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1, + 33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1, + 35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,464,8, + 35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1, + 36,3,36,479,8,36,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1, + 38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1, + 40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1, + 42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1, + 44,1,44,1,44,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1, + 46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3, + 46,555,8,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1, + 47,1,47,1,47,1,47,1,47,3,47,572,8,47,1,48,1,48,1,48,1,48,1,48,1, + 49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,3,49,590,8, + 49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,3,50,603, + 8,50,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53, + 1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55, + 1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58, + 1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59, + 1,59,1,59,3,59,658,8,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60, + 1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,675,8,60,1,61,1,61,1,61, + 1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63, + 1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,66, + 1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67, + 1,67,1,67,1,67,3,67,722,8,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68, + 1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71, + 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72, + 1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72, + 1,72,3,72,771,8,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73, + 1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,3,73,793, + 8,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, + 1,74,1,74,1,74,3,74,810,8,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75, + 1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,3,75, + 831,8,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,3,76,846,8,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77, + 1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, + 1,78,1,78,1,78,1,78,3,78,873,8,78,1,79,1,79,1,79,1,79,1,79,1,79, + 1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82, + 1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84, + 1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87, + 1,87,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89, + 1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89, + 1,89,1,89,3,89,948,8,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90, + 1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90, + 1,90,1,90,3,90,973,8,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91, + 1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,3,91,993,8,91, 1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92, - 1,92,1,92,1,92,1,92,1,92,1,92,3,92,1014,8,92,1,93,1,93,1,93,1,93, + 1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,3,92,1018,8,92, 1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93, - 1,93,1,93,1,93,1,93,1,93,1,93,3,93,1039,8,93,1,94,1,94,1,94,1,94, + 1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,3,93,1043,8,93, 1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94, - 1,94,1,94,1,94,1,94,3,94,1062,8,94,1,95,1,95,1,95,1,95,1,95,1,95, + 1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,3,94,1066,8,94,1,95,1,95, 1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95, - 3,95,1083,8,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97, - 1,97,1,97,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,100,1,100, - 1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1,101, - 1,101,1,101,1,101,1,101,1,101,1,101,3,101,1125,8,101,1,102,1,102, - 1,103,1,103,1,104,1,104,1,105,1,105,1,106,1,106,1,107,1,107,1,108, - 1,108,1,108,1,109,1,109,1,110,1,110,1,110,1,111,1,111,1,112,1,112, - 1,112,1,113,1,113,1,114,1,114,1,114,1,115,1,115,1,116,1,116,1,117, - 1,117,1,118,1,118,1,119,1,119,1,120,1,120,1,120,1,121,1,121,1,122, - 1,122,1,123,1,123,1,124,1,124,1,125,1,125,1,126,1,126,1,127,1,127, - 1,127,1,127,1,127,3,127,1187,8,127,1,128,4,128,1190,8,128,11,128, - 12,128,1191,1,128,1,128,4,128,1196,8,128,11,128,12,128,1197,3,128, - 1200,8,128,1,129,1,129,5,129,1204,8,129,10,129,12,129,1207,9,129, - 1,130,1,130,5,130,1211,8,130,10,130,12,130,1214,9,130,1,130,1,130, - 1,131,1,131,1,131,1,131,5,131,1222,8,131,10,131,12,131,1225,9,131, - 1,131,1,131,1,131,1,131,1,131,1,132,4,132,1233,8,132,11,132,12,132, - 1234,1,132,1,132,1,1223,0,133,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8, - 17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19, - 39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30, - 61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41, - 83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103, - 52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,121,61, - 123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70,141, - 71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80, - 161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179, - 90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99, - 199,100,201,101,203,102,205,103,207,104,209,105,211,106,213,107, - 215,108,217,109,219,110,221,111,223,112,225,113,227,114,229,115, - 231,116,233,117,235,118,237,119,239,120,241,121,243,122,245,123, - 247,124,249,125,251,126,253,127,255,128,257,129,259,130,261,131, - 263,132,265,133,1,0,6,2,0,69,69,101,101,1,0,48,57,3,0,65,90,95,95, + 1,95,1,95,1,95,1,95,3,95,1087,8,95,1,96,1,96,1,96,1,96,1,96,1,96, + 1,96,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,99,1,99,1,99, + 1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,101, + 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,3,101, + 1129,8,101,1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103, + 1,103,1,103,1,103,1,103,1,103,1,103,1,104,1,104,1,105,1,105,1,106, + 1,106,1,107,1,107,1,108,1,108,1,109,1,109,1,110,1,110,1,110,1,111, + 1,111,1,112,1,112,1,112,1,113,1,113,1,114,1,114,1,114,1,115,1,115, + 1,116,1,116,1,116,1,117,1,117,1,118,1,118,1,119,1,119,1,120,1,120, + 1,121,1,121,1,122,1,122,1,122,1,123,1,123,1,124,1,124,1,125,1,125, + 1,126,1,126,1,127,1,127,1,128,1,128,1,129,1,129,1,129,1,129,1,129, + 3,129,1206,8,129,1,130,4,130,1209,8,130,11,130,12,130,1210,1,130, + 1,130,4,130,1215,8,130,11,130,12,130,1216,3,130,1219,8,130,1,131, + 1,131,5,131,1223,8,131,10,131,12,131,1226,9,131,1,132,1,132,5,132, + 1230,8,132,10,132,12,132,1233,9,132,1,132,1,132,1,133,1,133,1,133, + 1,133,5,133,1241,8,133,10,133,12,133,1244,9,133,1,133,1,133,1,133, + 1,133,1,133,1,134,4,134,1252,8,134,11,134,12,134,1253,1,134,1,134, + 1,1242,0,135,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11, + 23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22, + 45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33, + 67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44, + 89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54, + 109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127, + 64,129,65,131,66,133,67,135,68,137,69,139,70,141,71,143,72,145,73, + 147,74,149,75,151,76,153,77,155,78,157,79,159,80,161,81,163,82,165, + 83,167,84,169,85,171,86,173,87,175,88,177,89,179,90,181,91,183,92, + 185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100,201,101, + 203,102,205,103,207,104,209,105,211,106,213,107,215,108,217,109, + 219,110,221,111,223,112,225,113,227,114,229,115,231,116,233,117, + 235,118,237,119,239,120,241,121,243,122,245,123,247,124,249,125, + 251,126,253,127,255,128,257,129,259,130,261,131,263,132,265,133, + 267,134,269,135,1,0,6,2,0,69,69,101,101,1,0,48,57,3,0,65,90,95,95, 97,122,4,0,48,57,65,90,95,95,97,122,2,0,10,10,13,13,3,0,9,10,13, - 13,32,32,1271,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0, + 13,32,32,1290,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0, 9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0, 19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0, 29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0, @@ -154,316 +156,321 @@ def serializedATN(): 237,1,0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0, 0,0,0,247,1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255, 1,0,0,0,0,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0, - 0,265,1,0,0,0,1,267,1,0,0,0,3,271,1,0,0,0,5,275,1,0,0,0,7,279,1, - 0,0,0,9,284,1,0,0,0,11,289,1,0,0,0,13,294,1,0,0,0,15,300,1,0,0,0, - 17,305,1,0,0,0,19,310,1,0,0,0,21,315,1,0,0,0,23,321,1,0,0,0,25,327, - 1,0,0,0,27,333,1,0,0,0,29,337,1,0,0,0,31,342,1,0,0,0,33,345,1,0, - 0,0,35,349,1,0,0,0,37,353,1,0,0,0,39,358,1,0,0,0,41,363,1,0,0,0, - 43,368,1,0,0,0,45,373,1,0,0,0,47,379,1,0,0,0,49,385,1,0,0,0,51,391, - 1,0,0,0,53,396,1,0,0,0,55,402,1,0,0,0,57,408,1,0,0,0,59,412,1,0, - 0,0,61,417,1,0,0,0,63,423,1,0,0,0,65,427,1,0,0,0,67,432,1,0,0,0, - 69,438,1,0,0,0,71,459,1,0,0,0,73,474,1,0,0,0,75,476,1,0,0,0,77,481, - 1,0,0,0,79,486,1,0,0,0,81,497,1,0,0,0,83,503,1,0,0,0,85,508,1,0, - 0,0,87,517,1,0,0,0,89,522,1,0,0,0,91,527,1,0,0,0,93,550,1,0,0,0, - 95,567,1,0,0,0,97,569,1,0,0,0,99,585,1,0,0,0,101,598,1,0,0,0,103, - 600,1,0,0,0,105,606,1,0,0,0,107,611,1,0,0,0,109,616,1,0,0,0,111, - 621,1,0,0,0,113,625,1,0,0,0,115,630,1,0,0,0,117,634,1,0,0,0,119, - 653,1,0,0,0,121,670,1,0,0,0,123,672,1,0,0,0,125,681,1,0,0,0,127, - 685,1,0,0,0,129,692,1,0,0,0,131,696,1,0,0,0,133,700,1,0,0,0,135, - 717,1,0,0,0,137,719,1,0,0,0,139,726,1,0,0,0,141,731,1,0,0,0,143, - 738,1,0,0,0,145,766,1,0,0,0,147,788,1,0,0,0,149,805,1,0,0,0,151, - 826,1,0,0,0,153,841,1,0,0,0,155,843,1,0,0,0,157,868,1,0,0,0,159, - 870,1,0,0,0,161,876,1,0,0,0,163,879,1,0,0,0,165,884,1,0,0,0,167, - 890,1,0,0,0,169,897,1,0,0,0,171,902,1,0,0,0,173,906,1,0,0,0,175, - 912,1,0,0,0,177,916,1,0,0,0,179,943,1,0,0,0,181,968,1,0,0,0,183, - 988,1,0,0,0,185,1013,1,0,0,0,187,1038,1,0,0,0,189,1061,1,0,0,0,191, - 1082,1,0,0,0,193,1084,1,0,0,0,195,1091,1,0,0,0,197,1096,1,0,0,0, - 199,1100,1,0,0,0,201,1105,1,0,0,0,203,1124,1,0,0,0,205,1126,1,0, - 0,0,207,1128,1,0,0,0,209,1130,1,0,0,0,211,1132,1,0,0,0,213,1134, - 1,0,0,0,215,1136,1,0,0,0,217,1138,1,0,0,0,219,1141,1,0,0,0,221,1143, - 1,0,0,0,223,1146,1,0,0,0,225,1148,1,0,0,0,227,1151,1,0,0,0,229,1153, - 1,0,0,0,231,1156,1,0,0,0,233,1158,1,0,0,0,235,1160,1,0,0,0,237,1162, - 1,0,0,0,239,1164,1,0,0,0,241,1166,1,0,0,0,243,1169,1,0,0,0,245,1171, - 1,0,0,0,247,1173,1,0,0,0,249,1175,1,0,0,0,251,1177,1,0,0,0,253,1179, - 1,0,0,0,255,1186,1,0,0,0,257,1189,1,0,0,0,259,1201,1,0,0,0,261,1208, - 1,0,0,0,263,1217,1,0,0,0,265,1232,1,0,0,0,267,268,5,115,0,0,268, - 269,5,105,0,0,269,270,5,110,0,0,270,2,1,0,0,0,271,272,5,99,0,0,272, - 273,5,111,0,0,273,274,5,115,0,0,274,4,1,0,0,0,275,276,5,116,0,0, - 276,277,5,97,0,0,277,278,5,110,0,0,278,6,1,0,0,0,279,280,5,97,0, - 0,280,281,5,115,0,0,281,282,5,105,0,0,282,283,5,110,0,0,283,8,1, - 0,0,0,284,285,5,97,0,0,285,286,5,99,0,0,286,287,5,111,0,0,287,288, - 5,115,0,0,288,10,1,0,0,0,289,290,5,97,0,0,290,291,5,116,0,0,291, - 292,5,97,0,0,292,293,5,110,0,0,293,12,1,0,0,0,294,295,5,97,0,0,295, - 296,5,116,0,0,296,297,5,97,0,0,297,298,5,110,0,0,298,299,5,50,0, - 0,299,14,1,0,0,0,300,301,5,115,0,0,301,302,5,105,0,0,302,303,5,110, - 0,0,303,304,5,104,0,0,304,16,1,0,0,0,305,306,5,99,0,0,306,307,5, - 111,0,0,307,308,5,115,0,0,308,309,5,104,0,0,309,18,1,0,0,0,310,311, - 5,116,0,0,311,312,5,97,0,0,312,313,5,110,0,0,313,314,5,104,0,0,314, - 20,1,0,0,0,315,316,5,97,0,0,316,317,5,115,0,0,317,318,5,105,0,0, - 318,319,5,110,0,0,319,320,5,104,0,0,320,22,1,0,0,0,321,322,5,97, - 0,0,322,323,5,99,0,0,323,324,5,111,0,0,324,325,5,115,0,0,325,326, - 5,104,0,0,326,24,1,0,0,0,327,328,5,97,0,0,328,329,5,116,0,0,329, - 330,5,97,0,0,330,331,5,110,0,0,331,332,5,104,0,0,332,26,1,0,0,0, - 333,334,5,97,0,0,334,335,5,98,0,0,335,336,5,115,0,0,336,28,1,0,0, - 0,337,338,5,115,0,0,338,339,5,113,0,0,339,340,5,114,0,0,340,341, - 5,116,0,0,341,30,1,0,0,0,342,343,5,108,0,0,343,344,5,110,0,0,344, - 32,1,0,0,0,345,346,5,108,0,0,346,347,5,111,0,0,347,348,5,103,0,0, - 348,34,1,0,0,0,349,350,5,101,0,0,350,351,5,120,0,0,351,352,5,112, - 0,0,352,36,1,0,0,0,353,354,5,115,0,0,354,355,5,109,0,0,355,356,5, - 105,0,0,356,357,5,110,0,0,357,38,1,0,0,0,358,359,5,115,0,0,359,360, - 5,109,0,0,360,361,5,97,0,0,361,362,5,120,0,0,362,40,1,0,0,0,363, - 364,5,116,0,0,364,365,5,109,0,0,365,366,5,105,0,0,366,367,5,110, - 0,0,367,42,1,0,0,0,368,369,5,116,0,0,369,370,5,109,0,0,370,371,5, - 97,0,0,371,372,5,120,0,0,372,44,1,0,0,0,373,374,5,116,0,0,374,375, - 5,110,0,0,375,376,5,111,0,0,376,377,5,114,0,0,377,378,5,109,0,0, - 378,46,1,0,0,0,379,380,5,115,0,0,380,381,5,110,0,0,381,382,5,111, - 0,0,382,383,5,114,0,0,383,384,5,109,0,0,384,48,1,0,0,0,385,386,5, - 102,0,0,386,387,5,108,0,0,387,388,5,111,0,0,388,389,5,111,0,0,389, - 390,5,114,0,0,390,50,1,0,0,0,391,392,5,99,0,0,392,393,5,101,0,0, - 393,394,5,105,0,0,394,395,5,108,0,0,395,52,1,0,0,0,396,397,5,114, - 0,0,397,398,5,111,0,0,398,399,5,117,0,0,399,400,5,110,0,0,400,401, - 5,100,0,0,401,54,1,0,0,0,402,403,5,103,0,0,403,404,5,97,0,0,404, - 405,5,109,0,0,405,406,5,109,0,0,406,407,5,97,0,0,407,56,1,0,0,0, - 408,409,5,112,0,0,409,410,5,111,0,0,410,411,5,119,0,0,411,58,1,0, - 0,0,412,413,5,115,0,0,413,414,5,105,0,0,414,415,5,103,0,0,415,416, - 5,109,0,0,416,60,1,0,0,0,417,418,5,99,0,0,418,419,5,108,0,0,419, - 420,5,97,0,0,420,421,5,109,0,0,421,422,5,112,0,0,422,62,1,0,0,0, - 423,424,5,102,0,0,424,425,5,102,0,0,425,426,5,116,0,0,426,64,1,0, - 0,0,427,428,5,105,0,0,428,429,5,102,0,0,429,430,5,102,0,0,430,431, - 5,116,0,0,431,66,1,0,0,0,432,433,5,97,0,0,433,434,5,110,0,0,434, - 435,5,103,0,0,435,436,5,108,0,0,436,437,5,101,0,0,437,68,1,0,0,0, - 438,439,5,112,0,0,439,440,5,114,0,0,440,441,5,105,0,0,441,442,5, - 110,0,0,442,443,5,116,0,0,443,70,1,0,0,0,444,445,5,112,0,0,445,446, - 5,114,0,0,446,447,5,105,0,0,447,448,5,110,0,0,448,449,5,116,0,0, - 449,450,5,95,0,0,450,451,5,115,0,0,451,452,5,104,0,0,452,453,5,97, - 0,0,453,454,5,112,0,0,454,460,5,101,0,0,455,456,5,112,0,0,456,457, - 5,115,0,0,457,458,5,104,0,0,458,460,5,112,0,0,459,444,1,0,0,0,459, - 455,1,0,0,0,460,72,1,0,0,0,461,462,5,110,0,0,462,463,5,118,0,0,463, - 475,5,108,0,0,464,465,5,110,0,0,465,466,5,97,0,0,466,467,5,110,0, - 0,467,468,5,95,0,0,468,469,5,116,0,0,469,470,5,111,0,0,470,471,5, - 95,0,0,471,472,5,110,0,0,472,473,5,117,0,0,473,475,5,109,0,0,474, - 461,1,0,0,0,474,464,1,0,0,0,475,74,1,0,0,0,476,477,5,108,0,0,477, - 478,5,101,0,0,478,479,5,114,0,0,479,480,5,112,0,0,480,76,1,0,0,0, - 481,482,5,115,0,0,482,483,5,116,0,0,483,484,5,101,0,0,484,485,5, - 112,0,0,485,78,1,0,0,0,486,487,5,115,0,0,487,488,5,109,0,0,488,489, - 5,111,0,0,489,490,5,111,0,0,490,491,5,116,0,0,491,492,5,104,0,0, - 492,493,5,115,0,0,493,494,5,116,0,0,494,495,5,101,0,0,495,496,5, - 112,0,0,496,80,1,0,0,0,497,498,5,102,0,0,498,499,5,114,0,0,499,500, - 5,97,0,0,500,501,5,99,0,0,501,502,5,116,0,0,502,82,1,0,0,0,503,504, - 5,114,0,0,504,505,5,101,0,0,505,506,5,108,0,0,506,507,5,117,0,0, - 507,84,1,0,0,0,508,509,5,115,0,0,509,510,5,111,0,0,510,511,5,102, - 0,0,511,512,5,116,0,0,512,513,5,112,0,0,513,514,5,108,0,0,514,515, - 5,117,0,0,515,516,5,115,0,0,516,86,1,0,0,0,517,518,5,103,0,0,518, - 519,5,101,0,0,519,520,5,108,0,0,520,521,5,117,0,0,521,88,1,0,0,0, - 522,523,5,115,0,0,523,524,5,105,0,0,524,525,5,103,0,0,525,526,5, - 110,0,0,526,90,1,0,0,0,527,528,5,109,0,0,528,529,5,97,0,0,529,530, - 5,112,0,0,530,92,1,0,0,0,531,532,5,101,0,0,532,533,5,122,0,0,533, - 534,5,99,0,0,534,535,5,111,0,0,535,536,5,110,0,0,536,537,5,118,0, - 0,537,538,5,111,0,0,538,539,5,108,0,0,539,540,5,117,0,0,540,541, - 5,116,0,0,541,542,5,105,0,0,542,543,5,111,0,0,543,551,5,110,0,0, - 544,545,5,101,0,0,545,546,5,122,0,0,546,547,5,99,0,0,547,548,5,111, - 0,0,548,549,5,110,0,0,549,551,5,118,0,0,550,531,1,0,0,0,550,544, - 1,0,0,0,551,94,1,0,0,0,552,553,5,99,0,0,553,554,5,111,0,0,554,555, - 5,110,0,0,555,556,5,118,0,0,556,557,5,111,0,0,557,558,5,108,0,0, - 558,559,5,117,0,0,559,560,5,116,0,0,560,561,5,105,0,0,561,562,5, - 111,0,0,562,568,5,110,0,0,563,564,5,99,0,0,564,565,5,111,0,0,565, - 566,5,110,0,0,566,568,5,118,0,0,567,552,1,0,0,0,567,563,1,0,0,0, - 568,96,1,0,0,0,569,570,5,115,0,0,570,571,5,119,0,0,571,572,5,97, - 0,0,572,573,5,112,0,0,573,98,1,0,0,0,574,575,5,112,0,0,575,576,5, - 101,0,0,576,577,5,114,0,0,577,578,5,109,0,0,578,579,5,117,0,0,579, - 580,5,116,0,0,580,586,5,101,0,0,581,582,5,112,0,0,582,583,5,101, - 0,0,583,584,5,114,0,0,584,586,5,109,0,0,585,574,1,0,0,0,585,581, - 1,0,0,0,586,100,1,0,0,0,587,588,5,114,0,0,588,589,5,101,0,0,589, - 590,5,115,0,0,590,591,5,104,0,0,591,592,5,97,0,0,592,593,5,112,0, - 0,593,599,5,101,0,0,594,595,5,114,0,0,595,596,5,115,0,0,596,597, - 5,104,0,0,597,599,5,112,0,0,598,587,1,0,0,0,598,594,1,0,0,0,599, - 102,1,0,0,0,600,601,5,114,0,0,601,602,5,97,0,0,602,603,5,110,0,0, - 603,604,5,103,0,0,604,605,5,101,0,0,605,104,1,0,0,0,606,607,5,116, - 0,0,607,608,5,111,0,0,608,609,5,112,0,0,609,610,5,107,0,0,610,106, - 1,0,0,0,611,612,5,98,0,0,612,613,5,111,0,0,613,614,5,116,0,0,614, - 615,5,107,0,0,615,108,1,0,0,0,616,617,5,112,0,0,617,618,5,105,0, - 0,618,619,5,110,0,0,619,620,5,118,0,0,620,110,1,0,0,0,621,622,5, - 115,0,0,622,623,5,117,0,0,623,624,5,109,0,0,624,112,1,0,0,0,625, - 626,5,109,0,0,626,627,5,101,0,0,627,628,5,97,0,0,628,629,5,110,0, - 0,629,114,1,0,0,0,630,631,5,115,0,0,631,632,5,116,0,0,632,633,5, - 100,0,0,633,116,1,0,0,0,634,635,5,118,0,0,635,636,5,97,0,0,636,637, - 5,114,0,0,637,118,1,0,0,0,638,639,5,113,0,0,639,640,5,117,0,0,640, - 641,5,97,0,0,641,642,5,114,0,0,642,643,5,116,0,0,643,644,5,105,0, - 0,644,645,5,108,0,0,645,654,5,101,0,0,646,647,5,113,0,0,647,648, - 5,117,0,0,648,649,5,97,0,0,649,650,5,114,0,0,650,651,5,116,0,0,651, - 652,5,105,0,0,652,654,5,108,0,0,653,638,1,0,0,0,653,646,1,0,0,0, - 654,120,1,0,0,0,655,656,5,112,0,0,656,657,5,101,0,0,657,658,5,114, - 0,0,658,659,5,99,0,0,659,660,5,101,0,0,660,661,5,110,0,0,661,662, - 5,116,0,0,662,663,5,105,0,0,663,664,5,108,0,0,664,671,5,101,0,0, - 665,666,5,112,0,0,666,667,5,114,0,0,667,668,5,99,0,0,668,669,5,110, - 0,0,669,671,5,116,0,0,670,655,1,0,0,0,670,665,1,0,0,0,671,122,1, - 0,0,0,672,673,5,113,0,0,673,674,5,117,0,0,674,675,5,97,0,0,675,676, - 5,110,0,0,676,677,5,116,0,0,677,678,5,105,0,0,678,679,5,108,0,0, - 679,680,5,101,0,0,680,124,1,0,0,0,681,682,5,100,0,0,682,683,5,111, - 0,0,683,684,5,116,0,0,684,126,1,0,0,0,685,686,5,109,0,0,686,687, - 5,111,0,0,687,688,5,109,0,0,688,689,5,101,0,0,689,690,5,110,0,0, - 690,691,5,116,0,0,691,128,1,0,0,0,692,693,5,97,0,0,693,694,5,110, - 0,0,694,695,5,121,0,0,695,130,1,0,0,0,696,697,5,97,0,0,697,698,5, - 108,0,0,698,699,5,108,0,0,699,132,1,0,0,0,700,701,5,101,0,0,701, - 702,5,100,0,0,702,703,5,103,0,0,703,704,5,101,0,0,704,134,1,0,0, - 0,705,706,5,98,0,0,706,707,5,108,0,0,707,708,5,117,0,0,708,718,5, - 114,0,0,709,710,5,103,0,0,710,711,5,97,0,0,711,712,5,117,0,0,712, - 713,5,115,0,0,713,714,5,115,0,0,714,715,5,105,0,0,715,716,5,97,0, - 0,716,718,5,110,0,0,717,705,1,0,0,0,717,709,1,0,0,0,718,136,1,0, - 0,0,719,720,5,109,0,0,720,721,5,101,0,0,721,722,5,100,0,0,722,723, - 5,105,0,0,723,724,5,97,0,0,724,725,5,110,0,0,725,138,1,0,0,0,726, - 727,5,109,0,0,727,728,5,111,0,0,728,729,5,100,0,0,729,730,5,101, - 0,0,730,140,1,0,0,0,731,732,5,99,0,0,732,733,5,117,0,0,733,734,5, - 109,0,0,734,735,5,115,0,0,735,736,5,117,0,0,736,737,5,109,0,0,737, - 142,1,0,0,0,738,739,5,99,0,0,739,740,5,117,0,0,740,741,5,109,0,0, - 741,742,5,112,0,0,742,743,5,114,0,0,743,744,5,111,0,0,744,745,5, - 100,0,0,745,144,1,0,0,0,746,747,5,116,0,0,747,748,5,111,0,0,748, - 749,5,112,0,0,749,750,5,107,0,0,750,751,5,95,0,0,751,752,5,105,0, - 0,752,753,5,110,0,0,753,767,5,100,0,0,754,755,5,116,0,0,755,756, - 5,111,0,0,756,757,5,112,0,0,757,758,5,107,0,0,758,759,5,95,0,0,759, - 760,5,105,0,0,760,761,5,110,0,0,761,762,5,100,0,0,762,763,5,105, - 0,0,763,764,5,99,0,0,764,765,5,101,0,0,765,767,5,115,0,0,766,746, - 1,0,0,0,766,754,1,0,0,0,767,146,1,0,0,0,768,769,5,98,0,0,769,770, - 5,111,0,0,770,771,5,116,0,0,771,772,5,107,0,0,772,773,5,95,0,0,773, - 774,5,105,0,0,774,775,5,110,0,0,775,789,5,100,0,0,776,777,5,98,0, - 0,777,778,5,111,0,0,778,779,5,116,0,0,779,780,5,107,0,0,780,781, - 5,95,0,0,781,782,5,105,0,0,782,783,5,110,0,0,783,784,5,100,0,0,784, - 785,5,105,0,0,785,786,5,99,0,0,786,787,5,101,0,0,787,789,5,115,0, - 0,788,768,1,0,0,0,788,776,1,0,0,0,789,148,1,0,0,0,790,791,5,99,0, - 0,791,792,5,117,0,0,792,793,5,98,0,0,793,794,5,105,0,0,794,795,5, - 99,0,0,795,796,5,95,0,0,796,797,5,101,0,0,797,798,5,97,0,0,798,799, - 5,115,0,0,799,806,5,101,0,0,800,801,5,99,0,0,801,802,5,117,0,0,802, - 803,5,98,0,0,803,804,5,105,0,0,804,806,5,99,0,0,805,790,1,0,0,0, - 805,800,1,0,0,0,806,150,1,0,0,0,807,808,5,101,0,0,808,809,5,108, - 0,0,809,810,5,97,0,0,810,811,5,115,0,0,811,812,5,116,0,0,812,813, - 5,105,0,0,813,814,5,99,0,0,814,815,5,95,0,0,815,816,5,101,0,0,816, - 817,5,97,0,0,817,818,5,115,0,0,818,827,5,101,0,0,819,820,5,101,0, - 0,820,821,5,108,0,0,821,822,5,97,0,0,822,823,5,115,0,0,823,824,5, - 116,0,0,824,825,5,105,0,0,825,827,5,99,0,0,826,807,1,0,0,0,826,819, - 1,0,0,0,827,152,1,0,0,0,828,829,5,115,0,0,829,830,5,105,0,0,830, - 831,5,110,0,0,831,832,5,101,0,0,832,833,5,95,0,0,833,834,5,101,0, - 0,834,835,5,97,0,0,835,836,5,115,0,0,836,842,5,101,0,0,837,838,5, - 115,0,0,838,839,5,105,0,0,839,840,5,110,0,0,840,842,5,101,0,0,841, - 828,1,0,0,0,841,837,1,0,0,0,842,154,1,0,0,0,843,844,5,115,0,0,844, - 845,5,109,0,0,845,846,5,111,0,0,846,847,5,111,0,0,847,848,5,116, - 0,0,848,849,5,104,0,0,849,850,5,101,0,0,850,851,5,114,0,0,851,852, - 5,115,0,0,852,853,5,116,0,0,853,854,5,101,0,0,854,855,5,112,0,0, - 855,156,1,0,0,0,856,857,5,100,0,0,857,858,5,105,0,0,858,859,5,115, - 0,0,859,869,5,116,0,0,860,861,5,100,0,0,861,862,5,105,0,0,862,863, - 5,115,0,0,863,864,5,116,0,0,864,865,5,97,0,0,865,866,5,110,0,0,866, - 867,5,99,0,0,867,869,5,101,0,0,868,856,1,0,0,0,868,860,1,0,0,0,869, - 158,1,0,0,0,870,871,5,114,0,0,871,872,5,101,0,0,872,873,5,109,0, - 0,873,874,5,97,0,0,874,875,5,112,0,0,875,160,1,0,0,0,876,877,5,105, - 0,0,877,878,5,102,0,0,878,162,1,0,0,0,879,880,5,101,0,0,880,881, - 5,108,0,0,881,882,5,115,0,0,882,883,5,101,0,0,883,164,1,0,0,0,884, - 885,5,119,0,0,885,886,5,104,0,0,886,887,5,105,0,0,887,888,5,108, - 0,0,888,889,5,101,0,0,889,166,1,0,0,0,890,891,5,114,0,0,891,892, - 5,101,0,0,892,893,5,116,0,0,893,894,5,117,0,0,894,895,5,114,0,0, - 895,896,5,110,0,0,896,168,1,0,0,0,897,898,5,112,0,0,898,899,5,117, - 0,0,899,900,5,115,0,0,900,901,5,104,0,0,901,170,1,0,0,0,902,903, - 5,112,0,0,903,904,5,111,0,0,904,905,5,112,0,0,905,172,1,0,0,0,906, - 907,5,99,0,0,907,908,5,108,0,0,908,909,5,101,0,0,909,910,5,97,0, - 0,910,911,5,114,0,0,911,174,1,0,0,0,912,913,5,104,0,0,913,914,5, - 97,0,0,914,915,5,115,0,0,915,176,1,0,0,0,916,917,5,103,0,0,917,918, - 5,101,0,0,918,919,5,116,0,0,919,178,1,0,0,0,920,921,5,110,0,0,921, - 922,5,111,0,0,922,923,5,105,0,0,923,924,5,115,0,0,924,944,5,101, - 0,0,925,926,5,114,0,0,926,927,5,97,0,0,927,928,5,110,0,0,928,929, - 5,100,0,0,929,944,5,110,0,0,930,931,5,114,0,0,931,932,5,97,0,0,932, - 933,5,110,0,0,933,934,5,100,0,0,934,935,5,111,0,0,935,936,5,109, - 0,0,936,937,5,95,0,0,937,938,5,110,0,0,938,939,5,111,0,0,939,940, - 5,114,0,0,940,941,5,109,0,0,941,942,5,97,0,0,942,944,5,108,0,0,943, - 920,1,0,0,0,943,925,1,0,0,0,943,930,1,0,0,0,944,180,1,0,0,0,945, - 946,5,114,0,0,946,947,5,97,0,0,947,948,5,110,0,0,948,969,5,100,0, - 0,949,950,5,114,0,0,950,951,5,97,0,0,951,952,5,110,0,0,952,953,5, - 100,0,0,953,969,5,117,0,0,954,955,5,114,0,0,955,956,5,97,0,0,956, - 957,5,110,0,0,957,958,5,100,0,0,958,959,5,111,0,0,959,960,5,109, - 0,0,960,961,5,95,0,0,961,962,5,117,0,0,962,963,5,110,0,0,963,964, - 5,105,0,0,964,965,5,102,0,0,965,966,5,111,0,0,966,967,5,114,0,0, - 967,969,5,109,0,0,968,945,1,0,0,0,968,949,1,0,0,0,968,954,1,0,0, - 0,969,182,1,0,0,0,970,971,5,114,0,0,971,972,5,97,0,0,972,973,5,110, - 0,0,973,974,5,100,0,0,974,989,5,99,0,0,975,976,5,114,0,0,976,977, - 5,97,0,0,977,978,5,110,0,0,978,979,5,100,0,0,979,980,5,111,0,0,980, - 981,5,109,0,0,981,982,5,95,0,0,982,983,5,99,0,0,983,984,5,97,0,0, - 984,985,5,117,0,0,985,986,5,99,0,0,986,987,5,104,0,0,987,989,5,121, - 0,0,988,970,1,0,0,0,988,975,1,0,0,0,989,184,1,0,0,0,990,991,5,114, - 0,0,991,992,5,97,0,0,992,993,5,110,0,0,993,994,5,100,0,0,994,1014, - 5,101,0,0,995,996,5,114,0,0,996,997,5,97,0,0,997,998,5,110,0,0,998, - 999,5,100,0,0,999,1000,5,111,0,0,1000,1001,5,109,0,0,1001,1002,5, - 95,0,0,1002,1003,5,101,0,0,1003,1004,5,120,0,0,1004,1005,5,112,0, - 0,1005,1006,5,111,0,0,1006,1007,5,110,0,0,1007,1008,5,101,0,0,1008, - 1009,5,110,0,0,1009,1010,5,116,0,0,1010,1011,5,105,0,0,1011,1012, - 5,97,0,0,1012,1014,5,108,0,0,1013,990,1,0,0,0,1013,995,1,0,0,0,1014, - 186,1,0,0,0,1015,1016,5,114,0,0,1016,1017,5,97,0,0,1017,1018,5,110, - 0,0,1018,1019,5,100,0,0,1019,1020,5,108,0,0,1020,1039,5,110,0,0, - 1021,1022,5,114,0,0,1022,1023,5,97,0,0,1023,1024,5,110,0,0,1024, - 1025,5,100,0,0,1025,1026,5,111,0,0,1026,1027,5,109,0,0,1027,1028, - 5,95,0,0,1028,1029,5,108,0,0,1029,1030,5,111,0,0,1030,1031,5,103, - 0,0,1031,1032,5,95,0,0,1032,1033,5,110,0,0,1033,1034,5,111,0,0,1034, - 1035,5,114,0,0,1035,1036,5,109,0,0,1036,1037,5,97,0,0,1037,1039, - 5,108,0,0,1038,1015,1,0,0,0,1038,1021,1,0,0,0,1039,188,1,0,0,0,1040, - 1041,5,114,0,0,1041,1042,5,97,0,0,1042,1043,5,110,0,0,1043,1044, - 5,100,0,0,1044,1062,5,98,0,0,1045,1046,5,114,0,0,1046,1047,5,97, - 0,0,1047,1048,5,110,0,0,1048,1049,5,100,0,0,1049,1050,5,111,0,0, - 1050,1051,5,109,0,0,1051,1052,5,95,0,0,1052,1053,5,98,0,0,1053,1054, - 5,101,0,0,1054,1055,5,114,0,0,1055,1056,5,110,0,0,1056,1057,5,111, - 0,0,1057,1058,5,117,0,0,1058,1059,5,108,0,0,1059,1060,5,108,0,0, - 1060,1062,5,105,0,0,1061,1040,1,0,0,0,1061,1045,1,0,0,0,1062,190, - 1,0,0,0,1063,1064,5,114,0,0,1064,1065,5,97,0,0,1065,1066,5,110,0, - 0,1066,1067,5,100,0,0,1067,1083,5,112,0,0,1068,1069,5,114,0,0,1069, - 1070,5,97,0,0,1070,1071,5,110,0,0,1071,1072,5,100,0,0,1072,1073, - 5,111,0,0,1073,1074,5,109,0,0,1074,1075,5,95,0,0,1075,1076,5,112, - 0,0,1076,1077,5,111,0,0,1077,1078,5,105,0,0,1078,1079,5,115,0,0, - 1079,1080,5,115,0,0,1080,1081,5,111,0,0,1081,1083,5,110,0,0,1082, - 1063,1,0,0,0,1082,1068,1,0,0,0,1083,192,1,0,0,0,1084,1085,5,99,0, - 0,1085,1086,5,111,0,0,1086,1087,5,115,0,0,1087,1088,5,115,0,0,1088, - 1089,5,105,0,0,1089,1090,5,109,0,0,1090,194,1,0,0,0,1091,1092,5, - 102,0,0,1092,1093,5,108,0,0,1093,1094,5,105,0,0,1094,1095,5,112, - 0,0,1095,196,1,0,0,0,1096,1097,5,99,0,0,1097,1098,5,111,0,0,1098, - 1099,5,118,0,0,1099,198,1,0,0,0,1100,1101,5,115,0,0,1101,1102,5, - 111,0,0,1102,1103,5,114,0,0,1103,1104,5,116,0,0,1104,200,1,0,0,0, - 1105,1106,5,97,0,0,1106,1107,5,112,0,0,1107,1108,5,112,0,0,1108, - 1109,5,101,0,0,1109,1110,5,110,0,0,1110,1111,5,100,0,0,1111,202, - 1,0,0,0,1112,1113,5,116,0,0,1113,1114,5,105,0,0,1114,1115,5,109, - 0,0,1115,1116,5,101,0,0,1116,1117,5,115,0,0,1117,1118,5,116,0,0, - 1118,1119,5,97,0,0,1119,1120,5,109,0,0,1120,1125,5,112,0,0,1121, - 1122,5,110,0,0,1122,1123,5,111,0,0,1123,1125,5,119,0,0,1124,1112, - 1,0,0,0,1124,1121,1,0,0,0,1125,204,1,0,0,0,1126,1127,5,43,0,0,1127, - 206,1,0,0,0,1128,1129,5,45,0,0,1129,208,1,0,0,0,1130,1131,5,42,0, - 0,1131,210,1,0,0,0,1132,1133,5,47,0,0,1133,212,1,0,0,0,1134,1135, - 5,37,0,0,1135,214,1,0,0,0,1136,1137,5,94,0,0,1137,216,1,0,0,0,1138, - 1139,5,62,0,0,1139,1140,5,61,0,0,1140,218,1,0,0,0,1141,1142,5,62, - 0,0,1142,220,1,0,0,0,1143,1144,5,60,0,0,1144,1145,5,61,0,0,1145, - 222,1,0,0,0,1146,1147,5,60,0,0,1147,224,1,0,0,0,1148,1149,5,61,0, - 0,1149,1150,5,61,0,0,1150,226,1,0,0,0,1151,1152,5,61,0,0,1152,228, - 1,0,0,0,1153,1154,5,33,0,0,1154,1155,5,61,0,0,1155,230,1,0,0,0,1156, - 1157,5,124,0,0,1157,232,1,0,0,0,1158,1159,5,40,0,0,1159,234,1,0, - 0,0,1160,1161,5,41,0,0,1161,236,1,0,0,0,1162,1163,5,44,0,0,1163, - 238,1,0,0,0,1164,1165,5,59,0,0,1165,240,1,0,0,0,1166,1167,5,45,0, - 0,1167,1168,5,62,0,0,1168,242,1,0,0,0,1169,1170,5,91,0,0,1170,244, - 1,0,0,0,1171,1172,5,93,0,0,1172,246,1,0,0,0,1173,1174,5,63,0,0,1174, - 248,1,0,0,0,1175,1176,5,58,0,0,1176,250,1,0,0,0,1177,1178,5,123, - 0,0,1178,252,1,0,0,0,1179,1180,5,125,0,0,1180,254,1,0,0,0,1181,1182, - 5,112,0,0,1182,1187,5,105,0,0,1183,1184,5,80,0,0,1184,1187,5,73, - 0,0,1185,1187,7,0,0,0,1186,1181,1,0,0,0,1186,1183,1,0,0,0,1186,1185, - 1,0,0,0,1187,256,1,0,0,0,1188,1190,7,1,0,0,1189,1188,1,0,0,0,1190, - 1191,1,0,0,0,1191,1189,1,0,0,0,1191,1192,1,0,0,0,1192,1199,1,0,0, - 0,1193,1195,5,46,0,0,1194,1196,7,1,0,0,1195,1194,1,0,0,0,1196,1197, - 1,0,0,0,1197,1195,1,0,0,0,1197,1198,1,0,0,0,1198,1200,1,0,0,0,1199, - 1193,1,0,0,0,1199,1200,1,0,0,0,1200,258,1,0,0,0,1201,1205,7,2,0, - 0,1202,1204,7,3,0,0,1203,1202,1,0,0,0,1204,1207,1,0,0,0,1205,1203, - 1,0,0,0,1205,1206,1,0,0,0,1206,260,1,0,0,0,1207,1205,1,0,0,0,1208, - 1212,5,35,0,0,1209,1211,8,4,0,0,1210,1209,1,0,0,0,1211,1214,1,0, - 0,0,1212,1210,1,0,0,0,1212,1213,1,0,0,0,1213,1215,1,0,0,0,1214,1212, - 1,0,0,0,1215,1216,6,130,0,0,1216,262,1,0,0,0,1217,1218,5,47,0,0, - 1218,1219,5,42,0,0,1219,1223,1,0,0,0,1220,1222,9,0,0,0,1221,1220, - 1,0,0,0,1222,1225,1,0,0,0,1223,1224,1,0,0,0,1223,1221,1,0,0,0,1224, - 1226,1,0,0,0,1225,1223,1,0,0,0,1226,1227,5,42,0,0,1227,1228,5,47, - 0,0,1228,1229,1,0,0,0,1229,1230,6,131,0,0,1230,264,1,0,0,0,1231, - 1233,7,5,0,0,1232,1231,1,0,0,0,1233,1234,1,0,0,0,1234,1232,1,0,0, - 0,1234,1235,1,0,0,0,1235,1236,1,0,0,0,1236,1237,6,132,0,0,1237,266, - 1,0,0,0,32,0,459,474,550,567,585,598,653,670,717,766,788,805,826, - 841,868,943,968,988,1013,1038,1061,1082,1124,1186,1191,1197,1199, - 1205,1212,1223,1234,1,6,0,0 + 0,265,1,0,0,0,0,267,1,0,0,0,0,269,1,0,0,0,1,271,1,0,0,0,3,275,1, + 0,0,0,5,279,1,0,0,0,7,283,1,0,0,0,9,288,1,0,0,0,11,293,1,0,0,0,13, + 298,1,0,0,0,15,304,1,0,0,0,17,309,1,0,0,0,19,314,1,0,0,0,21,319, + 1,0,0,0,23,325,1,0,0,0,25,331,1,0,0,0,27,337,1,0,0,0,29,341,1,0, + 0,0,31,346,1,0,0,0,33,349,1,0,0,0,35,353,1,0,0,0,37,357,1,0,0,0, + 39,362,1,0,0,0,41,367,1,0,0,0,43,372,1,0,0,0,45,377,1,0,0,0,47,383, + 1,0,0,0,49,389,1,0,0,0,51,395,1,0,0,0,53,400,1,0,0,0,55,406,1,0, + 0,0,57,412,1,0,0,0,59,416,1,0,0,0,61,421,1,0,0,0,63,427,1,0,0,0, + 65,431,1,0,0,0,67,436,1,0,0,0,69,442,1,0,0,0,71,463,1,0,0,0,73,478, + 1,0,0,0,75,480,1,0,0,0,77,485,1,0,0,0,79,490,1,0,0,0,81,501,1,0, + 0,0,83,507,1,0,0,0,85,512,1,0,0,0,87,521,1,0,0,0,89,526,1,0,0,0, + 91,531,1,0,0,0,93,554,1,0,0,0,95,571,1,0,0,0,97,573,1,0,0,0,99,589, + 1,0,0,0,101,602,1,0,0,0,103,604,1,0,0,0,105,610,1,0,0,0,107,615, + 1,0,0,0,109,620,1,0,0,0,111,625,1,0,0,0,113,629,1,0,0,0,115,634, + 1,0,0,0,117,638,1,0,0,0,119,657,1,0,0,0,121,674,1,0,0,0,123,676, + 1,0,0,0,125,685,1,0,0,0,127,689,1,0,0,0,129,696,1,0,0,0,131,700, + 1,0,0,0,133,704,1,0,0,0,135,721,1,0,0,0,137,723,1,0,0,0,139,730, + 1,0,0,0,141,735,1,0,0,0,143,742,1,0,0,0,145,770,1,0,0,0,147,792, + 1,0,0,0,149,809,1,0,0,0,151,830,1,0,0,0,153,845,1,0,0,0,155,847, + 1,0,0,0,157,872,1,0,0,0,159,874,1,0,0,0,161,880,1,0,0,0,163,883, + 1,0,0,0,165,888,1,0,0,0,167,894,1,0,0,0,169,901,1,0,0,0,171,906, + 1,0,0,0,173,910,1,0,0,0,175,916,1,0,0,0,177,920,1,0,0,0,179,947, + 1,0,0,0,181,972,1,0,0,0,183,992,1,0,0,0,185,1017,1,0,0,0,187,1042, + 1,0,0,0,189,1065,1,0,0,0,191,1086,1,0,0,0,193,1088,1,0,0,0,195,1095, + 1,0,0,0,197,1100,1,0,0,0,199,1104,1,0,0,0,201,1109,1,0,0,0,203,1128, + 1,0,0,0,205,1130,1,0,0,0,207,1136,1,0,0,0,209,1145,1,0,0,0,211,1147, + 1,0,0,0,213,1149,1,0,0,0,215,1151,1,0,0,0,217,1153,1,0,0,0,219,1155, + 1,0,0,0,221,1157,1,0,0,0,223,1160,1,0,0,0,225,1162,1,0,0,0,227,1165, + 1,0,0,0,229,1167,1,0,0,0,231,1170,1,0,0,0,233,1172,1,0,0,0,235,1175, + 1,0,0,0,237,1177,1,0,0,0,239,1179,1,0,0,0,241,1181,1,0,0,0,243,1183, + 1,0,0,0,245,1185,1,0,0,0,247,1188,1,0,0,0,249,1190,1,0,0,0,251,1192, + 1,0,0,0,253,1194,1,0,0,0,255,1196,1,0,0,0,257,1198,1,0,0,0,259,1205, + 1,0,0,0,261,1208,1,0,0,0,263,1220,1,0,0,0,265,1227,1,0,0,0,267,1236, + 1,0,0,0,269,1251,1,0,0,0,271,272,5,115,0,0,272,273,5,105,0,0,273, + 274,5,110,0,0,274,2,1,0,0,0,275,276,5,99,0,0,276,277,5,111,0,0,277, + 278,5,115,0,0,278,4,1,0,0,0,279,280,5,116,0,0,280,281,5,97,0,0,281, + 282,5,110,0,0,282,6,1,0,0,0,283,284,5,97,0,0,284,285,5,115,0,0,285, + 286,5,105,0,0,286,287,5,110,0,0,287,8,1,0,0,0,288,289,5,97,0,0,289, + 290,5,99,0,0,290,291,5,111,0,0,291,292,5,115,0,0,292,10,1,0,0,0, + 293,294,5,97,0,0,294,295,5,116,0,0,295,296,5,97,0,0,296,297,5,110, + 0,0,297,12,1,0,0,0,298,299,5,97,0,0,299,300,5,116,0,0,300,301,5, + 97,0,0,301,302,5,110,0,0,302,303,5,50,0,0,303,14,1,0,0,0,304,305, + 5,115,0,0,305,306,5,105,0,0,306,307,5,110,0,0,307,308,5,104,0,0, + 308,16,1,0,0,0,309,310,5,99,0,0,310,311,5,111,0,0,311,312,5,115, + 0,0,312,313,5,104,0,0,313,18,1,0,0,0,314,315,5,116,0,0,315,316,5, + 97,0,0,316,317,5,110,0,0,317,318,5,104,0,0,318,20,1,0,0,0,319,320, + 5,97,0,0,320,321,5,115,0,0,321,322,5,105,0,0,322,323,5,110,0,0,323, + 324,5,104,0,0,324,22,1,0,0,0,325,326,5,97,0,0,326,327,5,99,0,0,327, + 328,5,111,0,0,328,329,5,115,0,0,329,330,5,104,0,0,330,24,1,0,0,0, + 331,332,5,97,0,0,332,333,5,116,0,0,333,334,5,97,0,0,334,335,5,110, + 0,0,335,336,5,104,0,0,336,26,1,0,0,0,337,338,5,97,0,0,338,339,5, + 98,0,0,339,340,5,115,0,0,340,28,1,0,0,0,341,342,5,115,0,0,342,343, + 5,113,0,0,343,344,5,114,0,0,344,345,5,116,0,0,345,30,1,0,0,0,346, + 347,5,108,0,0,347,348,5,110,0,0,348,32,1,0,0,0,349,350,5,108,0,0, + 350,351,5,111,0,0,351,352,5,103,0,0,352,34,1,0,0,0,353,354,5,101, + 0,0,354,355,5,120,0,0,355,356,5,112,0,0,356,36,1,0,0,0,357,358,5, + 115,0,0,358,359,5,109,0,0,359,360,5,105,0,0,360,361,5,110,0,0,361, + 38,1,0,0,0,362,363,5,115,0,0,363,364,5,109,0,0,364,365,5,97,0,0, + 365,366,5,120,0,0,366,40,1,0,0,0,367,368,5,116,0,0,368,369,5,109, + 0,0,369,370,5,105,0,0,370,371,5,110,0,0,371,42,1,0,0,0,372,373,5, + 116,0,0,373,374,5,109,0,0,374,375,5,97,0,0,375,376,5,120,0,0,376, + 44,1,0,0,0,377,378,5,116,0,0,378,379,5,110,0,0,379,380,5,111,0,0, + 380,381,5,114,0,0,381,382,5,109,0,0,382,46,1,0,0,0,383,384,5,115, + 0,0,384,385,5,110,0,0,385,386,5,111,0,0,386,387,5,114,0,0,387,388, + 5,109,0,0,388,48,1,0,0,0,389,390,5,102,0,0,390,391,5,108,0,0,391, + 392,5,111,0,0,392,393,5,111,0,0,393,394,5,114,0,0,394,50,1,0,0,0, + 395,396,5,99,0,0,396,397,5,101,0,0,397,398,5,105,0,0,398,399,5,108, + 0,0,399,52,1,0,0,0,400,401,5,114,0,0,401,402,5,111,0,0,402,403,5, + 117,0,0,403,404,5,110,0,0,404,405,5,100,0,0,405,54,1,0,0,0,406,407, + 5,103,0,0,407,408,5,97,0,0,408,409,5,109,0,0,409,410,5,109,0,0,410, + 411,5,97,0,0,411,56,1,0,0,0,412,413,5,112,0,0,413,414,5,111,0,0, + 414,415,5,119,0,0,415,58,1,0,0,0,416,417,5,115,0,0,417,418,5,105, + 0,0,418,419,5,103,0,0,419,420,5,109,0,0,420,60,1,0,0,0,421,422,5, + 99,0,0,422,423,5,108,0,0,423,424,5,97,0,0,424,425,5,109,0,0,425, + 426,5,112,0,0,426,62,1,0,0,0,427,428,5,102,0,0,428,429,5,102,0,0, + 429,430,5,116,0,0,430,64,1,0,0,0,431,432,5,105,0,0,432,433,5,102, + 0,0,433,434,5,102,0,0,434,435,5,116,0,0,435,66,1,0,0,0,436,437,5, + 97,0,0,437,438,5,110,0,0,438,439,5,103,0,0,439,440,5,108,0,0,440, + 441,5,101,0,0,441,68,1,0,0,0,442,443,5,112,0,0,443,444,5,114,0,0, + 444,445,5,105,0,0,445,446,5,110,0,0,446,447,5,116,0,0,447,70,1,0, + 0,0,448,449,5,112,0,0,449,450,5,114,0,0,450,451,5,105,0,0,451,452, + 5,110,0,0,452,453,5,116,0,0,453,454,5,95,0,0,454,455,5,115,0,0,455, + 456,5,104,0,0,456,457,5,97,0,0,457,458,5,112,0,0,458,464,5,101,0, + 0,459,460,5,112,0,0,460,461,5,115,0,0,461,462,5,104,0,0,462,464, + 5,112,0,0,463,448,1,0,0,0,463,459,1,0,0,0,464,72,1,0,0,0,465,466, + 5,110,0,0,466,467,5,118,0,0,467,479,5,108,0,0,468,469,5,110,0,0, + 469,470,5,97,0,0,470,471,5,110,0,0,471,472,5,95,0,0,472,473,5,116, + 0,0,473,474,5,111,0,0,474,475,5,95,0,0,475,476,5,110,0,0,476,477, + 5,117,0,0,477,479,5,109,0,0,478,465,1,0,0,0,478,468,1,0,0,0,479, + 74,1,0,0,0,480,481,5,108,0,0,481,482,5,101,0,0,482,483,5,114,0,0, + 483,484,5,112,0,0,484,76,1,0,0,0,485,486,5,115,0,0,486,487,5,116, + 0,0,487,488,5,101,0,0,488,489,5,112,0,0,489,78,1,0,0,0,490,491,5, + 115,0,0,491,492,5,109,0,0,492,493,5,111,0,0,493,494,5,111,0,0,494, + 495,5,116,0,0,495,496,5,104,0,0,496,497,5,115,0,0,497,498,5,116, + 0,0,498,499,5,101,0,0,499,500,5,112,0,0,500,80,1,0,0,0,501,502,5, + 102,0,0,502,503,5,114,0,0,503,504,5,97,0,0,504,505,5,99,0,0,505, + 506,5,116,0,0,506,82,1,0,0,0,507,508,5,114,0,0,508,509,5,101,0,0, + 509,510,5,108,0,0,510,511,5,117,0,0,511,84,1,0,0,0,512,513,5,115, + 0,0,513,514,5,111,0,0,514,515,5,102,0,0,515,516,5,116,0,0,516,517, + 5,112,0,0,517,518,5,108,0,0,518,519,5,117,0,0,519,520,5,115,0,0, + 520,86,1,0,0,0,521,522,5,103,0,0,522,523,5,101,0,0,523,524,5,108, + 0,0,524,525,5,117,0,0,525,88,1,0,0,0,526,527,5,115,0,0,527,528,5, + 105,0,0,528,529,5,103,0,0,529,530,5,110,0,0,530,90,1,0,0,0,531,532, + 5,109,0,0,532,533,5,97,0,0,533,534,5,112,0,0,534,92,1,0,0,0,535, + 536,5,101,0,0,536,537,5,122,0,0,537,538,5,99,0,0,538,539,5,111,0, + 0,539,540,5,110,0,0,540,541,5,118,0,0,541,542,5,111,0,0,542,543, + 5,108,0,0,543,544,5,117,0,0,544,545,5,116,0,0,545,546,5,105,0,0, + 546,547,5,111,0,0,547,555,5,110,0,0,548,549,5,101,0,0,549,550,5, + 122,0,0,550,551,5,99,0,0,551,552,5,111,0,0,552,553,5,110,0,0,553, + 555,5,118,0,0,554,535,1,0,0,0,554,548,1,0,0,0,555,94,1,0,0,0,556, + 557,5,99,0,0,557,558,5,111,0,0,558,559,5,110,0,0,559,560,5,118,0, + 0,560,561,5,111,0,0,561,562,5,108,0,0,562,563,5,117,0,0,563,564, + 5,116,0,0,564,565,5,105,0,0,565,566,5,111,0,0,566,572,5,110,0,0, + 567,568,5,99,0,0,568,569,5,111,0,0,569,570,5,110,0,0,570,572,5,118, + 0,0,571,556,1,0,0,0,571,567,1,0,0,0,572,96,1,0,0,0,573,574,5,115, + 0,0,574,575,5,119,0,0,575,576,5,97,0,0,576,577,5,112,0,0,577,98, + 1,0,0,0,578,579,5,112,0,0,579,580,5,101,0,0,580,581,5,114,0,0,581, + 582,5,109,0,0,582,583,5,117,0,0,583,584,5,116,0,0,584,590,5,101, + 0,0,585,586,5,112,0,0,586,587,5,101,0,0,587,588,5,114,0,0,588,590, + 5,109,0,0,589,578,1,0,0,0,589,585,1,0,0,0,590,100,1,0,0,0,591,592, + 5,114,0,0,592,593,5,101,0,0,593,594,5,115,0,0,594,595,5,104,0,0, + 595,596,5,97,0,0,596,597,5,112,0,0,597,603,5,101,0,0,598,599,5,114, + 0,0,599,600,5,115,0,0,600,601,5,104,0,0,601,603,5,112,0,0,602,591, + 1,0,0,0,602,598,1,0,0,0,603,102,1,0,0,0,604,605,5,114,0,0,605,606, + 5,97,0,0,606,607,5,110,0,0,607,608,5,103,0,0,608,609,5,101,0,0,609, + 104,1,0,0,0,610,611,5,116,0,0,611,612,5,111,0,0,612,613,5,112,0, + 0,613,614,5,107,0,0,614,106,1,0,0,0,615,616,5,98,0,0,616,617,5,111, + 0,0,617,618,5,116,0,0,618,619,5,107,0,0,619,108,1,0,0,0,620,621, + 5,112,0,0,621,622,5,105,0,0,622,623,5,110,0,0,623,624,5,118,0,0, + 624,110,1,0,0,0,625,626,5,115,0,0,626,627,5,117,0,0,627,628,5,109, + 0,0,628,112,1,0,0,0,629,630,5,109,0,0,630,631,5,101,0,0,631,632, + 5,97,0,0,632,633,5,110,0,0,633,114,1,0,0,0,634,635,5,115,0,0,635, + 636,5,116,0,0,636,637,5,100,0,0,637,116,1,0,0,0,638,639,5,118,0, + 0,639,640,5,97,0,0,640,641,5,114,0,0,641,118,1,0,0,0,642,643,5,113, + 0,0,643,644,5,117,0,0,644,645,5,97,0,0,645,646,5,114,0,0,646,647, + 5,116,0,0,647,648,5,105,0,0,648,649,5,108,0,0,649,658,5,101,0,0, + 650,651,5,113,0,0,651,652,5,117,0,0,652,653,5,97,0,0,653,654,5,114, + 0,0,654,655,5,116,0,0,655,656,5,105,0,0,656,658,5,108,0,0,657,642, + 1,0,0,0,657,650,1,0,0,0,658,120,1,0,0,0,659,660,5,112,0,0,660,661, + 5,101,0,0,661,662,5,114,0,0,662,663,5,99,0,0,663,664,5,101,0,0,664, + 665,5,110,0,0,665,666,5,116,0,0,666,667,5,105,0,0,667,668,5,108, + 0,0,668,675,5,101,0,0,669,670,5,112,0,0,670,671,5,114,0,0,671,672, + 5,99,0,0,672,673,5,110,0,0,673,675,5,116,0,0,674,659,1,0,0,0,674, + 669,1,0,0,0,675,122,1,0,0,0,676,677,5,113,0,0,677,678,5,117,0,0, + 678,679,5,97,0,0,679,680,5,110,0,0,680,681,5,116,0,0,681,682,5,105, + 0,0,682,683,5,108,0,0,683,684,5,101,0,0,684,124,1,0,0,0,685,686, + 5,100,0,0,686,687,5,111,0,0,687,688,5,116,0,0,688,126,1,0,0,0,689, + 690,5,109,0,0,690,691,5,111,0,0,691,692,5,109,0,0,692,693,5,101, + 0,0,693,694,5,110,0,0,694,695,5,116,0,0,695,128,1,0,0,0,696,697, + 5,97,0,0,697,698,5,110,0,0,698,699,5,121,0,0,699,130,1,0,0,0,700, + 701,5,97,0,0,701,702,5,108,0,0,702,703,5,108,0,0,703,132,1,0,0,0, + 704,705,5,101,0,0,705,706,5,100,0,0,706,707,5,103,0,0,707,708,5, + 101,0,0,708,134,1,0,0,0,709,710,5,98,0,0,710,711,5,108,0,0,711,712, + 5,117,0,0,712,722,5,114,0,0,713,714,5,103,0,0,714,715,5,97,0,0,715, + 716,5,117,0,0,716,717,5,115,0,0,717,718,5,115,0,0,718,719,5,105, + 0,0,719,720,5,97,0,0,720,722,5,110,0,0,721,709,1,0,0,0,721,713,1, + 0,0,0,722,136,1,0,0,0,723,724,5,109,0,0,724,725,5,101,0,0,725,726, + 5,100,0,0,726,727,5,105,0,0,727,728,5,97,0,0,728,729,5,110,0,0,729, + 138,1,0,0,0,730,731,5,109,0,0,731,732,5,111,0,0,732,733,5,100,0, + 0,733,734,5,101,0,0,734,140,1,0,0,0,735,736,5,99,0,0,736,737,5,117, + 0,0,737,738,5,109,0,0,738,739,5,115,0,0,739,740,5,117,0,0,740,741, + 5,109,0,0,741,142,1,0,0,0,742,743,5,99,0,0,743,744,5,117,0,0,744, + 745,5,109,0,0,745,746,5,112,0,0,746,747,5,114,0,0,747,748,5,111, + 0,0,748,749,5,100,0,0,749,144,1,0,0,0,750,751,5,116,0,0,751,752, + 5,111,0,0,752,753,5,112,0,0,753,754,5,107,0,0,754,755,5,95,0,0,755, + 756,5,105,0,0,756,757,5,110,0,0,757,771,5,100,0,0,758,759,5,116, + 0,0,759,760,5,111,0,0,760,761,5,112,0,0,761,762,5,107,0,0,762,763, + 5,95,0,0,763,764,5,105,0,0,764,765,5,110,0,0,765,766,5,100,0,0,766, + 767,5,105,0,0,767,768,5,99,0,0,768,769,5,101,0,0,769,771,5,115,0, + 0,770,750,1,0,0,0,770,758,1,0,0,0,771,146,1,0,0,0,772,773,5,98,0, + 0,773,774,5,111,0,0,774,775,5,116,0,0,775,776,5,107,0,0,776,777, + 5,95,0,0,777,778,5,105,0,0,778,779,5,110,0,0,779,793,5,100,0,0,780, + 781,5,98,0,0,781,782,5,111,0,0,782,783,5,116,0,0,783,784,5,107,0, + 0,784,785,5,95,0,0,785,786,5,105,0,0,786,787,5,110,0,0,787,788,5, + 100,0,0,788,789,5,105,0,0,789,790,5,99,0,0,790,791,5,101,0,0,791, + 793,5,115,0,0,792,772,1,0,0,0,792,780,1,0,0,0,793,148,1,0,0,0,794, + 795,5,99,0,0,795,796,5,117,0,0,796,797,5,98,0,0,797,798,5,105,0, + 0,798,799,5,99,0,0,799,800,5,95,0,0,800,801,5,101,0,0,801,802,5, + 97,0,0,802,803,5,115,0,0,803,810,5,101,0,0,804,805,5,99,0,0,805, + 806,5,117,0,0,806,807,5,98,0,0,807,808,5,105,0,0,808,810,5,99,0, + 0,809,794,1,0,0,0,809,804,1,0,0,0,810,150,1,0,0,0,811,812,5,101, + 0,0,812,813,5,108,0,0,813,814,5,97,0,0,814,815,5,115,0,0,815,816, + 5,116,0,0,816,817,5,105,0,0,817,818,5,99,0,0,818,819,5,95,0,0,819, + 820,5,101,0,0,820,821,5,97,0,0,821,822,5,115,0,0,822,831,5,101,0, + 0,823,824,5,101,0,0,824,825,5,108,0,0,825,826,5,97,0,0,826,827,5, + 115,0,0,827,828,5,116,0,0,828,829,5,105,0,0,829,831,5,99,0,0,830, + 811,1,0,0,0,830,823,1,0,0,0,831,152,1,0,0,0,832,833,5,115,0,0,833, + 834,5,105,0,0,834,835,5,110,0,0,835,836,5,101,0,0,836,837,5,95,0, + 0,837,838,5,101,0,0,838,839,5,97,0,0,839,840,5,115,0,0,840,846,5, + 101,0,0,841,842,5,115,0,0,842,843,5,105,0,0,843,844,5,110,0,0,844, + 846,5,101,0,0,845,832,1,0,0,0,845,841,1,0,0,0,846,154,1,0,0,0,847, + 848,5,115,0,0,848,849,5,109,0,0,849,850,5,111,0,0,850,851,5,111, + 0,0,851,852,5,116,0,0,852,853,5,104,0,0,853,854,5,101,0,0,854,855, + 5,114,0,0,855,856,5,115,0,0,856,857,5,116,0,0,857,858,5,101,0,0, + 858,859,5,112,0,0,859,156,1,0,0,0,860,861,5,100,0,0,861,862,5,105, + 0,0,862,863,5,115,0,0,863,873,5,116,0,0,864,865,5,100,0,0,865,866, + 5,105,0,0,866,867,5,115,0,0,867,868,5,116,0,0,868,869,5,97,0,0,869, + 870,5,110,0,0,870,871,5,99,0,0,871,873,5,101,0,0,872,860,1,0,0,0, + 872,864,1,0,0,0,873,158,1,0,0,0,874,875,5,114,0,0,875,876,5,101, + 0,0,876,877,5,109,0,0,877,878,5,97,0,0,878,879,5,112,0,0,879,160, + 1,0,0,0,880,881,5,105,0,0,881,882,5,102,0,0,882,162,1,0,0,0,883, + 884,5,101,0,0,884,885,5,108,0,0,885,886,5,115,0,0,886,887,5,101, + 0,0,887,164,1,0,0,0,888,889,5,119,0,0,889,890,5,104,0,0,890,891, + 5,105,0,0,891,892,5,108,0,0,892,893,5,101,0,0,893,166,1,0,0,0,894, + 895,5,114,0,0,895,896,5,101,0,0,896,897,5,116,0,0,897,898,5,117, + 0,0,898,899,5,114,0,0,899,900,5,110,0,0,900,168,1,0,0,0,901,902, + 5,112,0,0,902,903,5,117,0,0,903,904,5,115,0,0,904,905,5,104,0,0, + 905,170,1,0,0,0,906,907,5,112,0,0,907,908,5,111,0,0,908,909,5,112, + 0,0,909,172,1,0,0,0,910,911,5,99,0,0,911,912,5,108,0,0,912,913,5, + 101,0,0,913,914,5,97,0,0,914,915,5,114,0,0,915,174,1,0,0,0,916,917, + 5,104,0,0,917,918,5,97,0,0,918,919,5,115,0,0,919,176,1,0,0,0,920, + 921,5,103,0,0,921,922,5,101,0,0,922,923,5,116,0,0,923,178,1,0,0, + 0,924,925,5,110,0,0,925,926,5,111,0,0,926,927,5,105,0,0,927,928, + 5,115,0,0,928,948,5,101,0,0,929,930,5,114,0,0,930,931,5,97,0,0,931, + 932,5,110,0,0,932,933,5,100,0,0,933,948,5,110,0,0,934,935,5,114, + 0,0,935,936,5,97,0,0,936,937,5,110,0,0,937,938,5,100,0,0,938,939, + 5,111,0,0,939,940,5,109,0,0,940,941,5,95,0,0,941,942,5,110,0,0,942, + 943,5,111,0,0,943,944,5,114,0,0,944,945,5,109,0,0,945,946,5,97,0, + 0,946,948,5,108,0,0,947,924,1,0,0,0,947,929,1,0,0,0,947,934,1,0, + 0,0,948,180,1,0,0,0,949,950,5,114,0,0,950,951,5,97,0,0,951,952,5, + 110,0,0,952,973,5,100,0,0,953,954,5,114,0,0,954,955,5,97,0,0,955, + 956,5,110,0,0,956,957,5,100,0,0,957,973,5,117,0,0,958,959,5,114, + 0,0,959,960,5,97,0,0,960,961,5,110,0,0,961,962,5,100,0,0,962,963, + 5,111,0,0,963,964,5,109,0,0,964,965,5,95,0,0,965,966,5,117,0,0,966, + 967,5,110,0,0,967,968,5,105,0,0,968,969,5,102,0,0,969,970,5,111, + 0,0,970,971,5,114,0,0,971,973,5,109,0,0,972,949,1,0,0,0,972,953, + 1,0,0,0,972,958,1,0,0,0,973,182,1,0,0,0,974,975,5,114,0,0,975,976, + 5,97,0,0,976,977,5,110,0,0,977,978,5,100,0,0,978,993,5,99,0,0,979, + 980,5,114,0,0,980,981,5,97,0,0,981,982,5,110,0,0,982,983,5,100,0, + 0,983,984,5,111,0,0,984,985,5,109,0,0,985,986,5,95,0,0,986,987,5, + 99,0,0,987,988,5,97,0,0,988,989,5,117,0,0,989,990,5,99,0,0,990,991, + 5,104,0,0,991,993,5,121,0,0,992,974,1,0,0,0,992,979,1,0,0,0,993, + 184,1,0,0,0,994,995,5,114,0,0,995,996,5,97,0,0,996,997,5,110,0,0, + 997,998,5,100,0,0,998,1018,5,101,0,0,999,1000,5,114,0,0,1000,1001, + 5,97,0,0,1001,1002,5,110,0,0,1002,1003,5,100,0,0,1003,1004,5,111, + 0,0,1004,1005,5,109,0,0,1005,1006,5,95,0,0,1006,1007,5,101,0,0,1007, + 1008,5,120,0,0,1008,1009,5,112,0,0,1009,1010,5,111,0,0,1010,1011, + 5,110,0,0,1011,1012,5,101,0,0,1012,1013,5,110,0,0,1013,1014,5,116, + 0,0,1014,1015,5,105,0,0,1015,1016,5,97,0,0,1016,1018,5,108,0,0,1017, + 994,1,0,0,0,1017,999,1,0,0,0,1018,186,1,0,0,0,1019,1020,5,114,0, + 0,1020,1021,5,97,0,0,1021,1022,5,110,0,0,1022,1023,5,100,0,0,1023, + 1024,5,108,0,0,1024,1043,5,110,0,0,1025,1026,5,114,0,0,1026,1027, + 5,97,0,0,1027,1028,5,110,0,0,1028,1029,5,100,0,0,1029,1030,5,111, + 0,0,1030,1031,5,109,0,0,1031,1032,5,95,0,0,1032,1033,5,108,0,0,1033, + 1034,5,111,0,0,1034,1035,5,103,0,0,1035,1036,5,95,0,0,1036,1037, + 5,110,0,0,1037,1038,5,111,0,0,1038,1039,5,114,0,0,1039,1040,5,109, + 0,0,1040,1041,5,97,0,0,1041,1043,5,108,0,0,1042,1019,1,0,0,0,1042, + 1025,1,0,0,0,1043,188,1,0,0,0,1044,1045,5,114,0,0,1045,1046,5,97, + 0,0,1046,1047,5,110,0,0,1047,1048,5,100,0,0,1048,1066,5,98,0,0,1049, + 1050,5,114,0,0,1050,1051,5,97,0,0,1051,1052,5,110,0,0,1052,1053, + 5,100,0,0,1053,1054,5,111,0,0,1054,1055,5,109,0,0,1055,1056,5,95, + 0,0,1056,1057,5,98,0,0,1057,1058,5,101,0,0,1058,1059,5,114,0,0,1059, + 1060,5,110,0,0,1060,1061,5,111,0,0,1061,1062,5,117,0,0,1062,1063, + 5,108,0,0,1063,1064,5,108,0,0,1064,1066,5,105,0,0,1065,1044,1,0, + 0,0,1065,1049,1,0,0,0,1066,190,1,0,0,0,1067,1068,5,114,0,0,1068, + 1069,5,97,0,0,1069,1070,5,110,0,0,1070,1071,5,100,0,0,1071,1087, + 5,112,0,0,1072,1073,5,114,0,0,1073,1074,5,97,0,0,1074,1075,5,110, + 0,0,1075,1076,5,100,0,0,1076,1077,5,111,0,0,1077,1078,5,109,0,0, + 1078,1079,5,95,0,0,1079,1080,5,112,0,0,1080,1081,5,111,0,0,1081, + 1082,5,105,0,0,1082,1083,5,115,0,0,1083,1084,5,115,0,0,1084,1085, + 5,111,0,0,1085,1087,5,110,0,0,1086,1067,1,0,0,0,1086,1072,1,0,0, + 0,1087,192,1,0,0,0,1088,1089,5,99,0,0,1089,1090,5,111,0,0,1090,1091, + 5,115,0,0,1091,1092,5,115,0,0,1092,1093,5,105,0,0,1093,1094,5,109, + 0,0,1094,194,1,0,0,0,1095,1096,5,102,0,0,1096,1097,5,108,0,0,1097, + 1098,5,105,0,0,1098,1099,5,112,0,0,1099,196,1,0,0,0,1100,1101,5, + 99,0,0,1101,1102,5,111,0,0,1102,1103,5,118,0,0,1103,198,1,0,0,0, + 1104,1105,5,115,0,0,1105,1106,5,111,0,0,1106,1107,5,114,0,0,1107, + 1108,5,116,0,0,1108,200,1,0,0,0,1109,1110,5,97,0,0,1110,1111,5,112, + 0,0,1111,1112,5,112,0,0,1112,1113,5,101,0,0,1113,1114,5,110,0,0, + 1114,1115,5,100,0,0,1115,202,1,0,0,0,1116,1117,5,116,0,0,1117,1118, + 5,105,0,0,1118,1119,5,109,0,0,1119,1120,5,101,0,0,1120,1121,5,115, + 0,0,1121,1122,5,116,0,0,1122,1123,5,97,0,0,1123,1124,5,109,0,0,1124, + 1129,5,112,0,0,1125,1126,5,110,0,0,1126,1127,5,111,0,0,1127,1129, + 5,119,0,0,1128,1116,1,0,0,0,1128,1125,1,0,0,0,1129,204,1,0,0,0,1130, + 1131,5,98,0,0,1131,1132,5,114,0,0,1132,1133,5,101,0,0,1133,1134, + 5,97,0,0,1134,1135,5,107,0,0,1135,206,1,0,0,0,1136,1137,5,99,0,0, + 1137,1138,5,111,0,0,1138,1139,5,110,0,0,1139,1140,5,116,0,0,1140, + 1141,5,105,0,0,1141,1142,5,110,0,0,1142,1143,5,117,0,0,1143,1144, + 5,101,0,0,1144,208,1,0,0,0,1145,1146,5,43,0,0,1146,210,1,0,0,0,1147, + 1148,5,45,0,0,1148,212,1,0,0,0,1149,1150,5,42,0,0,1150,214,1,0,0, + 0,1151,1152,5,47,0,0,1152,216,1,0,0,0,1153,1154,5,37,0,0,1154,218, + 1,0,0,0,1155,1156,5,94,0,0,1156,220,1,0,0,0,1157,1158,5,62,0,0,1158, + 1159,5,61,0,0,1159,222,1,0,0,0,1160,1161,5,62,0,0,1161,224,1,0,0, + 0,1162,1163,5,60,0,0,1163,1164,5,61,0,0,1164,226,1,0,0,0,1165,1166, + 5,60,0,0,1166,228,1,0,0,0,1167,1168,5,61,0,0,1168,1169,5,61,0,0, + 1169,230,1,0,0,0,1170,1171,5,61,0,0,1171,232,1,0,0,0,1172,1173,5, + 33,0,0,1173,1174,5,61,0,0,1174,234,1,0,0,0,1175,1176,5,124,0,0,1176, + 236,1,0,0,0,1177,1178,5,40,0,0,1178,238,1,0,0,0,1179,1180,5,41,0, + 0,1180,240,1,0,0,0,1181,1182,5,44,0,0,1182,242,1,0,0,0,1183,1184, + 5,59,0,0,1184,244,1,0,0,0,1185,1186,5,45,0,0,1186,1187,5,62,0,0, + 1187,246,1,0,0,0,1188,1189,5,91,0,0,1189,248,1,0,0,0,1190,1191,5, + 93,0,0,1191,250,1,0,0,0,1192,1193,5,63,0,0,1193,252,1,0,0,0,1194, + 1195,5,58,0,0,1195,254,1,0,0,0,1196,1197,5,123,0,0,1197,256,1,0, + 0,0,1198,1199,5,125,0,0,1199,258,1,0,0,0,1200,1201,5,112,0,0,1201, + 1206,5,105,0,0,1202,1203,5,80,0,0,1203,1206,5,73,0,0,1204,1206,7, + 0,0,0,1205,1200,1,0,0,0,1205,1202,1,0,0,0,1205,1204,1,0,0,0,1206, + 260,1,0,0,0,1207,1209,7,1,0,0,1208,1207,1,0,0,0,1209,1210,1,0,0, + 0,1210,1208,1,0,0,0,1210,1211,1,0,0,0,1211,1218,1,0,0,0,1212,1214, + 5,46,0,0,1213,1215,7,1,0,0,1214,1213,1,0,0,0,1215,1216,1,0,0,0,1216, + 1214,1,0,0,0,1216,1217,1,0,0,0,1217,1219,1,0,0,0,1218,1212,1,0,0, + 0,1218,1219,1,0,0,0,1219,262,1,0,0,0,1220,1224,7,2,0,0,1221,1223, + 7,3,0,0,1222,1221,1,0,0,0,1223,1226,1,0,0,0,1224,1222,1,0,0,0,1224, + 1225,1,0,0,0,1225,264,1,0,0,0,1226,1224,1,0,0,0,1227,1231,5,35,0, + 0,1228,1230,8,4,0,0,1229,1228,1,0,0,0,1230,1233,1,0,0,0,1231,1229, + 1,0,0,0,1231,1232,1,0,0,0,1232,1234,1,0,0,0,1233,1231,1,0,0,0,1234, + 1235,6,132,0,0,1235,266,1,0,0,0,1236,1237,5,47,0,0,1237,1238,5,42, + 0,0,1238,1242,1,0,0,0,1239,1241,9,0,0,0,1240,1239,1,0,0,0,1241,1244, + 1,0,0,0,1242,1243,1,0,0,0,1242,1240,1,0,0,0,1243,1245,1,0,0,0,1244, + 1242,1,0,0,0,1245,1246,5,42,0,0,1246,1247,5,47,0,0,1247,1248,1,0, + 0,0,1248,1249,6,133,0,0,1249,268,1,0,0,0,1250,1252,7,5,0,0,1251, + 1250,1,0,0,0,1252,1253,1,0,0,0,1253,1251,1,0,0,0,1253,1254,1,0,0, + 0,1254,1255,1,0,0,0,1255,1256,6,134,0,0,1256,270,1,0,0,0,32,0,463, + 478,554,571,589,602,657,674,721,770,792,809,830,845,872,947,972, + 992,1017,1042,1065,1086,1128,1205,1210,1216,1218,1224,1231,1242, + 1253,1,6,0,0 ] class MathExprLexer(Lexer): @@ -555,7 +562,7 @@ class MathExprLexer(Lexer): IF = 81 ELSE = 82 WHILE = 83 - RETURN = 84 + RET = 84 PUSH = 85 POP = 86 CLEAR = 87 @@ -574,37 +581,39 @@ class MathExprLexer(Lexer): SORT = 100 APPEND = 101 TIMESTAMP = 102 - PLUS = 103 - MINUS = 104 - MULT = 105 - DIV = 106 - MOD = 107 - POW = 108 - GE = 109 - GT = 110 - LE = 111 - LT = 112 - EQ = 113 - EQUEALS = 114 - NE = 115 - PIPE = 116 - LPAREN = 117 - RPAREN = 118 - COMMA = 119 - SEMICOLON = 120 - ARROW = 121 - LBRACKET = 122 - RBRACKET = 123 - QUESTION = 124 - COLON = 125 - LBRACE = 126 - RBRACE = 127 - CONSTANT = 128 - NUMBER = 129 - VARIABLE = 130 - SL_COMMENT = 131 - ML_COMMENT = 132 - WS = 133 + BRK = 103 + CONT = 104 + PLUS = 105 + MINUS = 106 + MULT = 107 + DIV = 108 + MOD = 109 + POW = 110 + GE = 111 + GT = 112 + LE = 113 + LT = 114 + EQ = 115 + EQUEALS = 116 + NE = 117 + PIPE = 118 + LPAREN = 119 + RPAREN = 120 + COMMA = 121 + SEMICOLON = 122 + ARROW = 123 + LBRACKET = 124 + RBRACKET = 125 + QUESTION = 126 + COLON = 127 + LBRACE = 128 + RBRACE = 129 + CONSTANT = 130 + NUMBER = 131 + VARIABLE = 132 + SL_COMMENT = 133 + ML_COMMENT = 134 + WS = 135 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -624,9 +633,10 @@ class MathExprLexer(Lexer): "'cumprod'", "'smootherstep'", "'remap'", "'if'", "'else'", "'while'", "'return'", "'push'", "'pop'", "'clear'", "'has'", "'get'", "'cossim'", "'flip'", "'cov'", "'sort'", "'append'", - "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "'>='", "'>'", "'<='", - "'<'", "'=='", "'='", "'!='", "'|'", "'('", "')'", "','", "';'", - "'->'", "'['", "']'", "'?'", "':'", "'{'", "'}'" ] + "'break'", "'continue'", "'+'", "'-'", "'*'", "'/'", "'%'", + "'^'", "'>='", "'>'", "'<='", "'<'", "'=='", "'='", "'!='", + "'|'", "'('", "')'", "','", "';'", "'->'", "'['", "']'", "'?'", + "':'", "'{'", "'}'" ] symbolicNames = [ "", "SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2", "SINH", @@ -640,14 +650,15 @@ class MathExprLexer(Lexer): "PERCENTILE", "QUANTILE", "DOT", "MOMENT", "ANY", "ALL", "EDGE", "GAUSSIAN", "MEDIAN", "MODE", "CUMSUM", "CUMPROD", "TOPK_IND", "BOTK_IND", "CUBIC_EASE", "ELASTIC_EASE", "SINE_EASE", "SMOOTHERSTEP", - "DIST", "REMAP", "IF", "ELSE", "WHILE", "RETURN", "PUSH", "POP", + "DIST", "REMAP", "IF", "ELSE", "WHILE", "RET", "PUSH", "POP", "CLEAR", "HAS", "GET", "NOISE", "RAND", "CAUCHY", "EXPONENTIAL", "LOGNORMAL", "BERNOULLI", "POISSON", "COSSIM", "FLIP", "COV", - "SORT", "APPEND", "TIMESTAMP", "PLUS", "MINUS", "MULT", "DIV", - "MOD", "POW", "GE", "GT", "LE", "LT", "EQ", "EQUEALS", "NE", - "PIPE", "LPAREN", "RPAREN", "COMMA", "SEMICOLON", "ARROW", "LBRACKET", - "RBRACKET", "QUESTION", "COLON", "LBRACE", "RBRACE", "CONSTANT", - "NUMBER", "VARIABLE", "SL_COMMENT", "ML_COMMENT", "WS" ] + "SORT", "APPEND", "TIMESTAMP", "BRK", "CONT", "PLUS", "MINUS", + "MULT", "DIV", "MOD", "POW", "GE", "GT", "LE", "LT", "EQ", "EQUEALS", + "NE", "PIPE", "LPAREN", "RPAREN", "COMMA", "SEMICOLON", "ARROW", + "LBRACKET", "RBRACKET", "QUESTION", "COLON", "LBRACE", "RBRACE", + "CONSTANT", "NUMBER", "VARIABLE", "SL_COMMENT", "ML_COMMENT", + "WS" ] ruleNames = [ "SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2", "SINH", "COSH", "TANH", "ASINH", "ACOSH", "ATANH", "ABS", @@ -661,15 +672,15 @@ class MathExprLexer(Lexer): "DOT", "MOMENT", "ANY", "ALL", "EDGE", "GAUSSIAN", "MEDIAN", "MODE", "CUMSUM", "CUMPROD", "TOPK_IND", "BOTK_IND", "CUBIC_EASE", "ELASTIC_EASE", "SINE_EASE", "SMOOTHERSTEP", "DIST", "REMAP", - "IF", "ELSE", "WHILE", "RETURN", "PUSH", "POP", "CLEAR", + "IF", "ELSE", "WHILE", "RET", "PUSH", "POP", "CLEAR", "HAS", "GET", "NOISE", "RAND", "CAUCHY", "EXPONENTIAL", "LOGNORMAL", "BERNOULLI", "POISSON", "COSSIM", "FLIP", - "COV", "SORT", "APPEND", "TIMESTAMP", "PLUS", "MINUS", - "MULT", "DIV", "MOD", "POW", "GE", "GT", "LE", "LT", "EQ", - "EQUEALS", "NE", "PIPE", "LPAREN", "RPAREN", "COMMA", - "SEMICOLON", "ARROW", "LBRACKET", "RBRACKET", "QUESTION", - "COLON", "LBRACE", "RBRACE", "CONSTANT", "NUMBER", "VARIABLE", - "SL_COMMENT", "ML_COMMENT", "WS" ] + "COV", "SORT", "APPEND", "TIMESTAMP", "BRK", "CONT", "PLUS", + "MINUS", "MULT", "DIV", "MOD", "POW", "GE", "GT", "LE", + "LT", "EQ", "EQUEALS", "NE", "PIPE", "LPAREN", "RPAREN", + "COMMA", "SEMICOLON", "ARROW", "LBRACKET", "RBRACKET", + "QUESTION", "COLON", "LBRACE", "RBRACE", "CONSTANT", "NUMBER", + "VARIABLE", "SL_COMMENT", "ML_COMMENT", "WS" ] grammarFileName = "MathExpr.g4" diff --git a/more_math/Parser/MathExprLexer.tokens b/more_math/Parser/MathExprLexer.tokens index 3067735..459710d 100644 --- a/more_math/Parser/MathExprLexer.tokens +++ b/more_math/Parser/MathExprLexer.tokens @@ -81,7 +81,7 @@ REMAP=80 IF=81 ELSE=82 WHILE=83 -RETURN=84 +RET=84 PUSH=85 POP=86 CLEAR=87 @@ -100,37 +100,39 @@ COV=99 SORT=100 APPEND=101 TIMESTAMP=102 -PLUS=103 -MINUS=104 -MULT=105 -DIV=106 -MOD=107 -POW=108 -GE=109 -GT=110 -LE=111 -LT=112 -EQ=113 -EQUEALS=114 -NE=115 -PIPE=116 -LPAREN=117 -RPAREN=118 -COMMA=119 -SEMICOLON=120 -ARROW=121 -LBRACKET=122 -RBRACKET=123 -QUESTION=124 -COLON=125 -LBRACE=126 -RBRACE=127 -CONSTANT=128 -NUMBER=129 -VARIABLE=130 -SL_COMMENT=131 -ML_COMMENT=132 -WS=133 +BRK=103 +CONT=104 +PLUS=105 +MINUS=106 +MULT=107 +DIV=108 +MOD=109 +POW=110 +GE=111 +GT=112 +LE=113 +LT=114 +EQ=115 +EQUEALS=116 +NE=117 +PIPE=118 +LPAREN=119 +RPAREN=120 +COMMA=121 +SEMICOLON=122 +ARROW=123 +LBRACKET=124 +RBRACKET=125 +QUESTION=126 +COLON=127 +LBRACE=128 +RBRACE=129 +CONSTANT=130 +NUMBER=131 +VARIABLE=132 +SL_COMMENT=133 +ML_COMMENT=134 +WS=135 'sin'=1 'cos'=2 'tan'=3 @@ -210,28 +212,30 @@ WS=133 'cov'=99 'sort'=100 'append'=101 -'+'=103 -'-'=104 -'*'=105 -'/'=106 -'%'=107 -'^'=108 -'>='=109 -'>'=110 -'<='=111 -'<'=112 -'=='=113 -'='=114 -'!='=115 -'|'=116 -'('=117 -')'=118 -','=119 -';'=120 -'->'=121 -'['=122 -']'=123 -'?'=124 -':'=125 -'{'=126 -'}'=127 +'break'=103 +'continue'=104 +'+'=105 +'-'=106 +'*'=107 +'/'=108 +'%'=109 +'^'=110 +'>='=111 +'>'=112 +'<='=113 +'<'=114 +'=='=115 +'='=116 +'!='=117 +'|'=118 +'('=119 +')'=120 +','=121 +';'=122 +'->'=123 +'['=124 +']'=125 +'?'=126 +':'=127 +'{'=128 +'}'=129 diff --git a/more_math/Parser/MathExprParser.py b/more_math/Parser/MathExprParser.py index eca7284..ee23a47 100644 --- a/more_math/Parser/MathExprParser.py +++ b/more_math/Parser/MathExprParser.py @@ -10,7 +10,7 @@ else: def serializedATN(): return [ - 4,1,132,946,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, + 4,1,135,946,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, @@ -96,266 +96,275 @@ def serializedATN(): 3,2,1,0,57,60,3,4,2,0,58,60,3,8,4,0,59,56,1,0,0,0,59,57,1,0,0,0, 59,58,1,0,0,0,60,63,1,0,0,0,61,59,1,0,0,0,61,62,1,0,0,0,62,64,1, 0,0,0,63,61,1,0,0,0,64,65,3,22,11,0,65,66,5,0,0,1,66,1,1,0,0,0,67, - 68,5,1,0,0,68,70,5,2,0,0,69,71,3,6,3,0,70,69,1,0,0,0,70,71,1,0,0, - 0,71,72,1,0,0,0,72,73,5,3,0,0,73,76,5,4,0,0,74,77,3,14,7,0,75,77, - 3,22,11,0,76,74,1,0,0,0,76,75,1,0,0,0,77,78,1,0,0,0,78,79,5,5,0, - 0,79,3,1,0,0,0,80,81,5,1,0,0,81,82,5,6,0,0,82,83,3,22,11,0,83,84, - 5,5,0,0,84,5,1,0,0,0,85,90,5,1,0,0,86,87,5,7,0,0,87,89,5,1,0,0,88, - 86,1,0,0,0,89,92,1,0,0,0,90,88,1,0,0,0,90,91,1,0,0,0,91,7,1,0,0, - 0,92,90,1,0,0,0,93,104,3,10,5,0,94,104,3,12,6,0,95,104,3,14,7,0, - 96,104,3,16,8,0,97,104,3,18,9,0,98,104,3,20,10,0,99,104,3,4,2,0, - 100,101,3,22,11,0,101,102,5,5,0,0,102,104,1,0,0,0,103,93,1,0,0,0, - 103,94,1,0,0,0,103,95,1,0,0,0,103,96,1,0,0,0,103,97,1,0,0,0,103, - 98,1,0,0,0,103,99,1,0,0,0,103,100,1,0,0,0,104,9,1,0,0,0,105,106, - 5,8,0,0,106,107,5,2,0,0,107,108,3,22,11,0,108,109,5,3,0,0,109,112, - 3,8,4,0,110,111,5,9,0,0,111,113,3,8,4,0,112,110,1,0,0,0,112,113, - 1,0,0,0,113,11,1,0,0,0,114,115,5,10,0,0,115,116,5,2,0,0,116,117, - 3,22,11,0,117,118,5,3,0,0,118,119,3,8,4,0,119,13,1,0,0,0,120,124, - 5,11,0,0,121,123,3,8,4,0,122,121,1,0,0,0,123,126,1,0,0,0,124,122, - 1,0,0,0,124,125,1,0,0,0,125,127,1,0,0,0,126,124,1,0,0,0,127,128, - 5,12,0,0,128,15,1,0,0,0,129,130,5,13,0,0,130,131,5,5,0,0,131,17, - 1,0,0,0,132,133,5,14,0,0,133,134,5,5,0,0,134,19,1,0,0,0,135,137, - 5,15,0,0,136,138,3,22,11,0,137,136,1,0,0,0,137,138,1,0,0,0,138,139, - 1,0,0,0,139,140,5,5,0,0,140,21,1,0,0,0,141,145,3,24,12,0,142,145, - 3,38,19,0,143,145,3,26,13,0,144,141,1,0,0,0,144,142,1,0,0,0,144, - 143,1,0,0,0,145,23,1,0,0,0,146,147,3,26,13,0,147,148,5,16,0,0,148, - 149,3,22,11,0,149,150,5,17,0,0,150,151,3,22,11,0,151,25,1,0,0,0, - 152,153,6,13,-1,0,153,154,3,28,14,0,154,175,1,0,0,0,155,156,10,7, - 0,0,156,157,5,18,0,0,157,174,3,28,14,0,158,159,10,6,0,0,159,160, - 5,19,0,0,160,174,3,28,14,0,161,162,10,5,0,0,162,163,5,20,0,0,163, - 174,3,28,14,0,164,165,10,4,0,0,165,166,5,21,0,0,166,174,3,28,14, - 0,167,168,10,3,0,0,168,169,5,22,0,0,169,174,3,28,14,0,170,171,10, - 2,0,0,171,172,5,23,0,0,172,174,3,28,14,0,173,155,1,0,0,0,173,158, - 1,0,0,0,173,161,1,0,0,0,173,164,1,0,0,0,173,167,1,0,0,0,173,170, - 1,0,0,0,174,177,1,0,0,0,175,173,1,0,0,0,175,176,1,0,0,0,176,27,1, - 0,0,0,177,175,1,0,0,0,178,179,6,14,-1,0,179,180,3,30,15,0,180,189, - 1,0,0,0,181,182,10,3,0,0,182,183,5,24,0,0,183,188,3,30,15,0,184, - 185,10,2,0,0,185,186,5,25,0,0,186,188,3,30,15,0,187,181,1,0,0,0, - 187,184,1,0,0,0,188,191,1,0,0,0,189,187,1,0,0,0,189,190,1,0,0,0, - 190,29,1,0,0,0,191,189,1,0,0,0,192,193,6,15,-1,0,193,194,3,32,16, - 0,194,206,1,0,0,0,195,196,10,4,0,0,196,197,5,26,0,0,197,205,3,32, - 16,0,198,199,10,3,0,0,199,200,5,27,0,0,200,205,3,32,16,0,201,202, - 10,2,0,0,202,203,5,28,0,0,203,205,3,32,16,0,204,195,1,0,0,0,204, - 198,1,0,0,0,204,201,1,0,0,0,205,208,1,0,0,0,206,204,1,0,0,0,206, - 207,1,0,0,0,207,31,1,0,0,0,208,206,1,0,0,0,209,210,3,34,17,0,210, - 211,5,29,0,0,211,212,3,32,16,0,212,215,1,0,0,0,213,215,3,34,17,0, - 214,209,1,0,0,0,214,213,1,0,0,0,215,33,1,0,0,0,216,217,5,24,0,0, - 217,222,3,34,17,0,218,219,5,25,0,0,219,222,3,34,17,0,220,222,3,36, - 18,0,221,216,1,0,0,0,221,218,1,0,0,0,221,220,1,0,0,0,222,35,1,0, - 0,0,223,224,6,18,-1,0,224,225,3,38,19,0,225,240,1,0,0,0,226,227, - 10,2,0,0,227,228,5,30,0,0,228,233,3,22,11,0,229,230,5,7,0,0,230, - 232,3,22,11,0,231,229,1,0,0,0,232,235,1,0,0,0,233,231,1,0,0,0,233, - 234,1,0,0,0,234,236,1,0,0,0,235,233,1,0,0,0,236,237,5,31,0,0,237, - 239,1,0,0,0,238,226,1,0,0,0,239,242,1,0,0,0,240,238,1,0,0,0,240, - 241,1,0,0,0,241,37,1,0,0,0,242,240,1,0,0,0,243,279,3,42,21,0,244, - 279,3,44,22,0,245,279,3,46,23,0,246,279,3,48,24,0,247,279,3,50,25, - 0,248,279,3,52,26,0,249,279,3,54,27,0,250,279,5,1,0,0,251,279,5, - 32,0,0,252,279,5,33,0,0,253,254,5,2,0,0,254,255,3,22,11,0,255,256, - 5,3,0,0,256,279,1,0,0,0,257,258,5,34,0,0,258,259,3,22,11,0,259,260, - 5,34,0,0,260,279,1,0,0,0,261,262,5,30,0,0,262,267,3,22,11,0,263, - 264,5,7,0,0,264,266,3,22,11,0,265,263,1,0,0,0,266,269,1,0,0,0,267, - 265,1,0,0,0,267,268,1,0,0,0,268,270,1,0,0,0,269,267,1,0,0,0,270, - 271,5,31,0,0,271,279,1,0,0,0,272,273,5,1,0,0,273,275,5,2,0,0,274, - 276,3,40,20,0,275,274,1,0,0,0,275,276,1,0,0,0,276,277,1,0,0,0,277, - 279,5,3,0,0,278,243,1,0,0,0,278,244,1,0,0,0,278,245,1,0,0,0,278, - 246,1,0,0,0,278,247,1,0,0,0,278,248,1,0,0,0,278,249,1,0,0,0,278, - 250,1,0,0,0,278,251,1,0,0,0,278,252,1,0,0,0,278,253,1,0,0,0,278, - 257,1,0,0,0,278,261,1,0,0,0,278,272,1,0,0,0,279,39,1,0,0,0,280,285, - 3,22,11,0,281,282,5,7,0,0,282,284,3,22,11,0,283,281,1,0,0,0,284, - 287,1,0,0,0,285,283,1,0,0,0,285,286,1,0,0,0,286,41,1,0,0,0,287,285, - 1,0,0,0,288,289,5,35,0,0,289,290,5,2,0,0,290,291,5,3,0,0,291,43, - 1,0,0,0,292,293,5,36,0,0,293,294,5,2,0,0,294,295,3,22,11,0,295,296, - 5,3,0,0,296,562,1,0,0,0,297,298,5,37,0,0,298,299,5,2,0,0,299,300, - 3,22,11,0,300,301,5,3,0,0,301,562,1,0,0,0,302,303,5,38,0,0,303,304, - 5,2,0,0,304,305,3,22,11,0,305,306,5,3,0,0,306,562,1,0,0,0,307,308, - 5,39,0,0,308,309,5,2,0,0,309,310,3,22,11,0,310,311,5,3,0,0,311,562, - 1,0,0,0,312,313,5,40,0,0,313,314,5,2,0,0,314,315,3,22,11,0,315,316, - 5,3,0,0,316,562,1,0,0,0,317,318,5,41,0,0,318,319,5,2,0,0,319,320, - 3,22,11,0,320,321,5,3,0,0,321,562,1,0,0,0,322,323,5,42,0,0,323,324, - 5,2,0,0,324,325,3,22,11,0,325,326,5,3,0,0,326,562,1,0,0,0,327,328, - 5,43,0,0,328,329,5,2,0,0,329,330,3,22,11,0,330,331,5,3,0,0,331,562, - 1,0,0,0,332,333,5,44,0,0,333,334,5,2,0,0,334,335,3,22,11,0,335,336, - 5,3,0,0,336,562,1,0,0,0,337,338,5,45,0,0,338,339,5,2,0,0,339,340, - 3,22,11,0,340,341,5,3,0,0,341,562,1,0,0,0,342,343,5,46,0,0,343,344, - 5,2,0,0,344,345,3,22,11,0,345,346,5,3,0,0,346,562,1,0,0,0,347,348, - 5,47,0,0,348,349,5,2,0,0,349,350,3,22,11,0,350,351,5,3,0,0,351,562, - 1,0,0,0,352,353,5,48,0,0,353,354,5,2,0,0,354,355,3,22,11,0,355,356, - 5,3,0,0,356,562,1,0,0,0,357,358,5,49,0,0,358,359,5,2,0,0,359,360, - 3,22,11,0,360,361,5,3,0,0,361,562,1,0,0,0,362,363,5,50,0,0,363,364, - 5,2,0,0,364,365,3,22,11,0,365,366,5,3,0,0,366,562,1,0,0,0,367,368, - 5,51,0,0,368,369,5,2,0,0,369,370,3,22,11,0,370,371,5,3,0,0,371,562, - 1,0,0,0,372,373,5,52,0,0,373,374,5,2,0,0,374,375,3,22,11,0,375,376, - 5,3,0,0,376,562,1,0,0,0,377,378,5,53,0,0,378,379,5,2,0,0,379,380, - 3,22,11,0,380,381,5,3,0,0,381,562,1,0,0,0,382,383,5,54,0,0,383,384, - 5,2,0,0,384,385,3,22,11,0,385,386,5,3,0,0,386,562,1,0,0,0,387,388, - 5,55,0,0,388,389,5,2,0,0,389,390,3,22,11,0,390,391,5,3,0,0,391,562, - 1,0,0,0,392,393,5,56,0,0,393,394,5,2,0,0,394,395,3,22,11,0,395,396, - 5,3,0,0,396,562,1,0,0,0,397,398,5,57,0,0,398,399,5,2,0,0,399,400, - 3,22,11,0,400,401,5,3,0,0,401,562,1,0,0,0,402,403,5,58,0,0,403,404, - 5,2,0,0,404,405,3,22,11,0,405,406,5,3,0,0,406,562,1,0,0,0,407,408, - 5,59,0,0,408,409,5,2,0,0,409,410,3,22,11,0,410,411,5,3,0,0,411,562, - 1,0,0,0,412,413,5,60,0,0,413,414,5,2,0,0,414,415,3,22,11,0,415,416, - 5,3,0,0,416,562,1,0,0,0,417,418,5,61,0,0,418,419,5,2,0,0,419,420, - 3,22,11,0,420,421,5,3,0,0,421,562,1,0,0,0,422,423,5,62,0,0,423,424, - 5,2,0,0,424,425,3,22,11,0,425,426,5,3,0,0,426,562,1,0,0,0,427,428, - 5,63,0,0,428,429,5,2,0,0,429,430,3,22,11,0,430,431,5,3,0,0,431,562, - 1,0,0,0,432,433,5,64,0,0,433,434,5,2,0,0,434,435,3,22,11,0,435,436, - 5,3,0,0,436,562,1,0,0,0,437,438,5,65,0,0,438,439,5,2,0,0,439,440, - 3,22,11,0,440,441,5,3,0,0,441,562,1,0,0,0,442,443,5,66,0,0,443,444, - 5,2,0,0,444,445,3,22,11,0,445,446,5,3,0,0,446,562,1,0,0,0,447,448, - 5,67,0,0,448,449,5,2,0,0,449,450,3,22,11,0,450,451,5,3,0,0,451,562, - 1,0,0,0,452,453,5,68,0,0,453,454,5,2,0,0,454,455,3,22,11,0,455,456, - 5,3,0,0,456,562,1,0,0,0,457,458,5,69,0,0,458,459,5,2,0,0,459,460, - 3,22,11,0,460,461,5,3,0,0,461,562,1,0,0,0,462,463,5,70,0,0,463,464, - 5,2,0,0,464,465,3,22,11,0,465,466,5,3,0,0,466,562,1,0,0,0,467,468, - 5,71,0,0,468,469,5,2,0,0,469,470,3,22,11,0,470,471,5,3,0,0,471,562, - 1,0,0,0,472,473,5,72,0,0,473,474,5,2,0,0,474,475,3,22,11,0,475,476, - 5,3,0,0,476,562,1,0,0,0,477,478,5,73,0,0,478,479,5,2,0,0,479,480, - 3,22,11,0,480,481,5,3,0,0,481,562,1,0,0,0,482,483,5,74,0,0,483,484, - 5,2,0,0,484,485,3,22,11,0,485,486,5,3,0,0,486,562,1,0,0,0,487,488, - 5,75,0,0,488,489,5,2,0,0,489,490,3,22,11,0,490,491,5,3,0,0,491,562, - 1,0,0,0,492,493,5,76,0,0,493,494,5,2,0,0,494,495,3,22,11,0,495,496, - 5,3,0,0,496,562,1,0,0,0,497,498,5,77,0,0,498,499,5,2,0,0,499,500, - 3,22,11,0,500,501,5,3,0,0,501,562,1,0,0,0,502,503,5,78,0,0,503,504, - 5,2,0,0,504,505,3,22,11,0,505,506,5,3,0,0,506,562,1,0,0,0,507,508, - 5,79,0,0,508,509,5,2,0,0,509,510,3,22,11,0,510,511,5,3,0,0,511,562, - 1,0,0,0,512,513,5,80,0,0,513,514,5,2,0,0,514,517,3,22,11,0,515,516, - 5,7,0,0,516,518,3,22,11,0,517,515,1,0,0,0,517,518,1,0,0,0,518,519, - 1,0,0,0,519,520,5,3,0,0,520,562,1,0,0,0,521,522,5,81,0,0,522,523, - 5,2,0,0,523,524,3,22,11,0,524,525,5,3,0,0,525,562,1,0,0,0,526,527, - 5,82,0,0,527,528,5,2,0,0,528,529,3,22,11,0,529,530,5,3,0,0,530,562, - 1,0,0,0,531,532,5,83,0,0,532,533,5,2,0,0,533,534,3,22,11,0,534,535, - 5,3,0,0,535,562,1,0,0,0,536,537,5,84,0,0,537,538,5,2,0,0,538,539, - 3,22,11,0,539,540,5,3,0,0,540,562,1,0,0,0,541,542,5,85,0,0,542,543, - 5,2,0,0,543,544,3,22,11,0,544,545,5,3,0,0,545,562,1,0,0,0,546,547, - 5,86,0,0,547,548,5,2,0,0,548,549,3,22,11,0,549,550,5,3,0,0,550,562, - 1,0,0,0,551,552,5,87,0,0,552,553,5,2,0,0,553,554,3,22,11,0,554,555, - 5,3,0,0,555,562,1,0,0,0,556,557,5,88,0,0,557,558,5,2,0,0,558,559, - 3,22,11,0,559,560,5,3,0,0,560,562,1,0,0,0,561,292,1,0,0,0,561,297, - 1,0,0,0,561,302,1,0,0,0,561,307,1,0,0,0,561,312,1,0,0,0,561,317, - 1,0,0,0,561,322,1,0,0,0,561,327,1,0,0,0,561,332,1,0,0,0,561,337, - 1,0,0,0,561,342,1,0,0,0,561,347,1,0,0,0,561,352,1,0,0,0,561,357, - 1,0,0,0,561,362,1,0,0,0,561,367,1,0,0,0,561,372,1,0,0,0,561,377, - 1,0,0,0,561,382,1,0,0,0,561,387,1,0,0,0,561,392,1,0,0,0,561,397, - 1,0,0,0,561,402,1,0,0,0,561,407,1,0,0,0,561,412,1,0,0,0,561,417, - 1,0,0,0,561,422,1,0,0,0,561,427,1,0,0,0,561,432,1,0,0,0,561,437, - 1,0,0,0,561,442,1,0,0,0,561,447,1,0,0,0,561,452,1,0,0,0,561,457, - 1,0,0,0,561,462,1,0,0,0,561,467,1,0,0,0,561,472,1,0,0,0,561,477, - 1,0,0,0,561,482,1,0,0,0,561,487,1,0,0,0,561,492,1,0,0,0,561,497, - 1,0,0,0,561,502,1,0,0,0,561,507,1,0,0,0,561,512,1,0,0,0,561,521, - 1,0,0,0,561,526,1,0,0,0,561,531,1,0,0,0,561,536,1,0,0,0,561,541, - 1,0,0,0,561,546,1,0,0,0,561,551,1,0,0,0,561,556,1,0,0,0,562,45,1, - 0,0,0,563,564,5,89,0,0,564,565,5,2,0,0,565,566,3,22,11,0,566,567, - 5,7,0,0,567,568,3,22,11,0,568,569,5,3,0,0,569,722,1,0,0,0,570,571, - 5,90,0,0,571,572,5,2,0,0,572,573,3,22,11,0,573,574,5,7,0,0,574,575, - 3,22,11,0,575,576,5,3,0,0,576,722,1,0,0,0,577,578,5,91,0,0,578,579, - 5,2,0,0,579,580,3,22,11,0,580,581,5,7,0,0,581,582,3,22,11,0,582, - 583,5,3,0,0,583,722,1,0,0,0,584,585,5,92,0,0,585,586,5,2,0,0,586, - 587,3,22,11,0,587,588,5,7,0,0,588,589,3,22,11,0,589,590,5,3,0,0, - 590,722,1,0,0,0,591,592,5,93,0,0,592,593,5,2,0,0,593,594,3,22,11, - 0,594,595,5,7,0,0,595,596,3,22,11,0,596,597,5,3,0,0,597,722,1,0, - 0,0,598,599,5,94,0,0,599,600,5,2,0,0,600,601,3,22,11,0,601,602,5, - 7,0,0,602,603,3,22,11,0,603,604,5,3,0,0,604,722,1,0,0,0,605,606, - 5,95,0,0,606,607,5,2,0,0,607,608,3,22,11,0,608,609,5,7,0,0,609,610, - 3,22,11,0,610,611,5,3,0,0,611,722,1,0,0,0,612,613,5,96,0,0,613,614, - 5,2,0,0,614,615,3,22,11,0,615,616,5,7,0,0,616,617,3,22,11,0,617, - 618,5,3,0,0,618,722,1,0,0,0,619,620,5,97,0,0,620,621,5,2,0,0,621, - 622,3,22,11,0,622,623,5,7,0,0,623,624,3,22,11,0,624,625,5,3,0,0, - 625,722,1,0,0,0,626,627,5,98,0,0,627,628,5,2,0,0,628,629,3,22,11, - 0,629,630,5,7,0,0,630,631,3,22,11,0,631,632,5,3,0,0,632,722,1,0, - 0,0,633,634,5,99,0,0,634,635,5,2,0,0,635,636,3,22,11,0,636,637,5, - 7,0,0,637,638,3,22,11,0,638,639,5,3,0,0,639,722,1,0,0,0,640,641, - 5,100,0,0,641,642,5,2,0,0,642,643,3,22,11,0,643,644,5,7,0,0,644, - 645,3,22,11,0,645,646,5,3,0,0,646,722,1,0,0,0,647,648,5,101,0,0, - 648,649,5,2,0,0,649,650,3,22,11,0,650,651,5,7,0,0,651,652,3,22,11, - 0,652,653,5,3,0,0,653,722,1,0,0,0,654,655,5,102,0,0,655,656,5,2, - 0,0,656,657,3,22,11,0,657,658,5,7,0,0,658,659,3,22,11,0,659,660, - 5,3,0,0,660,722,1,0,0,0,661,662,5,103,0,0,662,663,5,2,0,0,663,664, - 3,22,11,0,664,665,5,7,0,0,665,666,3,22,11,0,666,667,5,3,0,0,667, - 722,1,0,0,0,668,669,5,104,0,0,669,670,5,2,0,0,670,671,3,22,11,0, - 671,672,5,7,0,0,672,673,3,22,11,0,673,674,5,3,0,0,674,722,1,0,0, - 0,675,676,5,105,0,0,676,677,5,2,0,0,677,678,3,22,11,0,678,679,5, - 7,0,0,679,680,3,22,11,0,680,681,5,3,0,0,681,722,1,0,0,0,682,683, - 5,106,0,0,683,684,5,2,0,0,684,685,3,22,11,0,685,686,5,7,0,0,686, - 687,3,22,11,0,687,688,5,3,0,0,688,722,1,0,0,0,689,690,5,107,0,0, - 690,691,5,2,0,0,691,692,3,22,11,0,692,693,5,7,0,0,693,696,3,22,11, - 0,694,695,5,7,0,0,695,697,3,22,11,0,696,694,1,0,0,0,696,697,1,0, - 0,0,697,698,1,0,0,0,698,699,5,3,0,0,699,722,1,0,0,0,700,701,5,108, - 0,0,701,702,5,2,0,0,702,703,3,22,11,0,703,704,5,7,0,0,704,705,3, - 22,11,0,705,706,5,3,0,0,706,722,1,0,0,0,707,708,5,109,0,0,708,709, - 5,2,0,0,709,710,3,22,11,0,710,711,5,7,0,0,711,712,3,22,11,0,712, - 713,5,3,0,0,713,722,1,0,0,0,714,715,5,110,0,0,715,716,5,2,0,0,716, - 717,3,22,11,0,717,718,5,7,0,0,718,719,3,22,11,0,719,720,5,3,0,0, - 720,722,1,0,0,0,721,563,1,0,0,0,721,570,1,0,0,0,721,577,1,0,0,0, - 721,584,1,0,0,0,721,591,1,0,0,0,721,598,1,0,0,0,721,605,1,0,0,0, - 721,612,1,0,0,0,721,619,1,0,0,0,721,626,1,0,0,0,721,633,1,0,0,0, - 721,640,1,0,0,0,721,647,1,0,0,0,721,654,1,0,0,0,721,661,1,0,0,0, - 721,668,1,0,0,0,721,675,1,0,0,0,721,682,1,0,0,0,721,689,1,0,0,0, - 721,700,1,0,0,0,721,707,1,0,0,0,721,714,1,0,0,0,722,47,1,0,0,0,723, - 724,5,111,0,0,724,725,5,2,0,0,725,726,3,22,11,0,726,727,5,7,0,0, - 727,728,3,22,11,0,728,729,5,7,0,0,729,730,3,22,11,0,730,731,5,3, - 0,0,731,823,1,0,0,0,732,733,5,112,0,0,733,734,5,2,0,0,734,735,3, - 22,11,0,735,736,5,7,0,0,736,737,3,22,11,0,737,738,5,7,0,0,738,739, - 3,22,11,0,739,740,5,3,0,0,740,823,1,0,0,0,741,742,5,113,0,0,742, - 743,5,2,0,0,743,744,3,22,11,0,744,745,5,7,0,0,745,746,3,22,11,0, - 746,747,5,7,0,0,747,748,3,22,11,0,748,749,5,3,0,0,749,823,1,0,0, - 0,750,751,5,114,0,0,751,752,5,2,0,0,752,753,3,22,11,0,753,754,5, - 7,0,0,754,755,3,22,11,0,755,756,5,7,0,0,756,757,3,22,11,0,757,758, - 5,3,0,0,758,823,1,0,0,0,759,760,5,115,0,0,760,761,5,2,0,0,761,762, - 3,22,11,0,762,763,5,7,0,0,763,764,3,22,11,0,764,765,5,7,0,0,765, - 766,3,22,11,0,766,767,5,3,0,0,767,823,1,0,0,0,768,769,5,116,0,0, - 769,770,5,2,0,0,770,771,3,22,11,0,771,772,5,7,0,0,772,773,3,22,11, - 0,773,774,5,7,0,0,774,775,3,22,11,0,775,776,5,3,0,0,776,823,1,0, - 0,0,777,778,5,117,0,0,778,779,5,2,0,0,779,780,3,22,11,0,780,781, - 5,7,0,0,781,782,3,22,11,0,782,783,5,7,0,0,783,784,3,22,11,0,784, - 785,5,3,0,0,785,823,1,0,0,0,786,787,5,118,0,0,787,788,5,2,0,0,788, - 789,3,22,11,0,789,790,5,7,0,0,790,791,3,22,11,0,791,792,5,7,0,0, - 792,793,3,22,11,0,793,794,5,3,0,0,794,823,1,0,0,0,795,796,5,119, - 0,0,796,797,5,2,0,0,797,798,3,22,11,0,798,799,5,7,0,0,799,800,3, - 22,11,0,800,801,5,7,0,0,801,802,3,22,11,0,802,803,5,3,0,0,803,823, - 1,0,0,0,804,805,5,120,0,0,805,806,5,2,0,0,806,807,3,22,11,0,807, - 808,5,7,0,0,808,809,3,22,11,0,809,810,5,7,0,0,810,811,3,22,11,0, - 811,812,5,3,0,0,812,823,1,0,0,0,813,814,5,121,0,0,814,815,5,2,0, - 0,815,816,3,22,11,0,816,817,5,7,0,0,817,818,3,22,11,0,818,819,5, - 7,0,0,819,820,3,22,11,0,820,821,5,3,0,0,821,823,1,0,0,0,822,723, - 1,0,0,0,822,732,1,0,0,0,822,741,1,0,0,0,822,750,1,0,0,0,822,759, - 1,0,0,0,822,768,1,0,0,0,822,777,1,0,0,0,822,786,1,0,0,0,822,795, - 1,0,0,0,822,804,1,0,0,0,822,813,1,0,0,0,823,49,1,0,0,0,824,825,5, - 122,0,0,825,826,5,2,0,0,826,827,3,22,11,0,827,828,5,7,0,0,828,829, - 3,22,11,0,829,830,5,7,0,0,830,831,3,22,11,0,831,832,5,7,0,0,832, - 833,3,22,11,0,833,834,5,3,0,0,834,858,1,0,0,0,835,836,5,123,0,0, - 836,837,5,2,0,0,837,838,3,22,11,0,838,839,5,7,0,0,839,840,3,22,11, - 0,840,841,5,7,0,0,841,842,3,22,11,0,842,843,5,7,0,0,843,844,3,22, - 11,0,844,845,5,3,0,0,845,858,1,0,0,0,846,847,5,124,0,0,847,848,5, - 2,0,0,848,849,3,22,11,0,849,850,5,7,0,0,850,851,3,22,11,0,851,852, - 5,7,0,0,852,853,3,22,11,0,853,854,5,7,0,0,854,855,3,22,11,0,855, - 856,5,3,0,0,856,858,1,0,0,0,857,824,1,0,0,0,857,835,1,0,0,0,857, - 846,1,0,0,0,858,51,1,0,0,0,859,860,5,125,0,0,860,861,5,2,0,0,861, - 862,3,22,11,0,862,863,5,7,0,0,863,864,3,22,11,0,864,865,5,7,0,0, - 865,866,3,22,11,0,866,867,5,7,0,0,867,868,3,22,11,0,868,869,5,7, - 0,0,869,870,3,22,11,0,870,871,5,3,0,0,871,53,1,0,0,0,872,873,5,126, - 0,0,873,874,5,2,0,0,874,879,3,22,11,0,875,876,5,7,0,0,876,878,3, - 22,11,0,877,875,1,0,0,0,878,881,1,0,0,0,879,877,1,0,0,0,879,880, - 1,0,0,0,880,882,1,0,0,0,881,879,1,0,0,0,882,883,5,3,0,0,883,944, - 1,0,0,0,884,885,5,127,0,0,885,886,5,2,0,0,886,891,3,22,11,0,887, - 888,5,7,0,0,888,890,3,22,11,0,889,887,1,0,0,0,890,893,1,0,0,0,891, - 889,1,0,0,0,891,892,1,0,0,0,892,894,1,0,0,0,893,891,1,0,0,0,894, - 895,5,3,0,0,895,944,1,0,0,0,896,897,5,128,0,0,897,898,5,2,0,0,898, - 901,3,22,11,0,899,900,5,7,0,0,900,902,3,22,11,0,901,899,1,0,0,0, - 902,903,1,0,0,0,903,901,1,0,0,0,903,904,1,0,0,0,904,905,1,0,0,0, - 905,906,5,3,0,0,906,944,1,0,0,0,907,908,5,129,0,0,908,909,5,2,0, - 0,909,912,3,22,11,0,910,911,5,7,0,0,911,913,3,22,11,0,912,910,1, - 0,0,0,913,914,1,0,0,0,914,912,1,0,0,0,914,915,1,0,0,0,915,916,1, - 0,0,0,916,917,5,3,0,0,917,944,1,0,0,0,918,919,5,130,0,0,919,920, - 5,2,0,0,920,923,3,22,11,0,921,922,5,7,0,0,922,924,3,22,11,0,923, - 921,1,0,0,0,924,925,1,0,0,0,925,923,1,0,0,0,925,926,1,0,0,0,926, - 927,1,0,0,0,927,928,5,3,0,0,928,944,1,0,0,0,929,930,5,131,0,0,930, - 931,5,2,0,0,931,932,3,22,11,0,932,933,5,7,0,0,933,934,3,22,11,0, - 934,935,5,3,0,0,935,944,1,0,0,0,936,937,5,132,0,0,937,938,5,2,0, - 0,938,939,3,22,11,0,939,940,5,7,0,0,940,941,3,22,11,0,941,942,5, - 3,0,0,942,944,1,0,0,0,943,872,1,0,0,0,943,884,1,0,0,0,943,896,1, - 0,0,0,943,907,1,0,0,0,943,918,1,0,0,0,943,929,1,0,0,0,943,936,1, - 0,0,0,944,55,1,0,0,0,36,59,61,70,76,90,103,112,124,137,144,173,175, + 68,5,132,0,0,68,70,5,119,0,0,69,71,3,6,3,0,70,69,1,0,0,0,70,71,1, + 0,0,0,71,72,1,0,0,0,72,73,5,120,0,0,73,76,5,123,0,0,74,77,3,14,7, + 0,75,77,3,22,11,0,76,74,1,0,0,0,76,75,1,0,0,0,77,78,1,0,0,0,78,79, + 5,122,0,0,79,3,1,0,0,0,80,81,5,132,0,0,81,82,5,116,0,0,82,83,3,22, + 11,0,83,84,5,122,0,0,84,5,1,0,0,0,85,90,5,132,0,0,86,87,5,121,0, + 0,87,89,5,132,0,0,88,86,1,0,0,0,89,92,1,0,0,0,90,88,1,0,0,0,90,91, + 1,0,0,0,91,7,1,0,0,0,92,90,1,0,0,0,93,104,3,10,5,0,94,104,3,12,6, + 0,95,104,3,14,7,0,96,104,3,16,8,0,97,104,3,18,9,0,98,104,3,20,10, + 0,99,104,3,4,2,0,100,101,3,22,11,0,101,102,5,122,0,0,102,104,1,0, + 0,0,103,93,1,0,0,0,103,94,1,0,0,0,103,95,1,0,0,0,103,96,1,0,0,0, + 103,97,1,0,0,0,103,98,1,0,0,0,103,99,1,0,0,0,103,100,1,0,0,0,104, + 9,1,0,0,0,105,106,5,81,0,0,106,107,5,119,0,0,107,108,3,22,11,0,108, + 109,5,120,0,0,109,112,3,8,4,0,110,111,5,82,0,0,111,113,3,8,4,0,112, + 110,1,0,0,0,112,113,1,0,0,0,113,11,1,0,0,0,114,115,5,83,0,0,115, + 116,5,119,0,0,116,117,3,22,11,0,117,118,5,120,0,0,118,119,3,8,4, + 0,119,13,1,0,0,0,120,124,5,128,0,0,121,123,3,8,4,0,122,121,1,0,0, + 0,123,126,1,0,0,0,124,122,1,0,0,0,124,125,1,0,0,0,125,127,1,0,0, + 0,126,124,1,0,0,0,127,128,5,129,0,0,128,15,1,0,0,0,129,130,5,103, + 0,0,130,131,5,122,0,0,131,17,1,0,0,0,132,133,5,104,0,0,133,134,5, + 122,0,0,134,19,1,0,0,0,135,137,5,84,0,0,136,138,3,22,11,0,137,136, + 1,0,0,0,137,138,1,0,0,0,138,139,1,0,0,0,139,140,5,122,0,0,140,21, + 1,0,0,0,141,145,3,24,12,0,142,145,3,38,19,0,143,145,3,26,13,0,144, + 141,1,0,0,0,144,142,1,0,0,0,144,143,1,0,0,0,145,23,1,0,0,0,146,147, + 3,26,13,0,147,148,5,126,0,0,148,149,3,22,11,0,149,150,5,127,0,0, + 150,151,3,22,11,0,151,25,1,0,0,0,152,153,6,13,-1,0,153,154,3,28, + 14,0,154,175,1,0,0,0,155,156,10,7,0,0,156,157,5,112,0,0,157,174, + 3,28,14,0,158,159,10,6,0,0,159,160,5,111,0,0,160,174,3,28,14,0,161, + 162,10,5,0,0,162,163,5,114,0,0,163,174,3,28,14,0,164,165,10,4,0, + 0,165,166,5,113,0,0,166,174,3,28,14,0,167,168,10,3,0,0,168,169,5, + 115,0,0,169,174,3,28,14,0,170,171,10,2,0,0,171,172,5,117,0,0,172, + 174,3,28,14,0,173,155,1,0,0,0,173,158,1,0,0,0,173,161,1,0,0,0,173, + 164,1,0,0,0,173,167,1,0,0,0,173,170,1,0,0,0,174,177,1,0,0,0,175, + 173,1,0,0,0,175,176,1,0,0,0,176,27,1,0,0,0,177,175,1,0,0,0,178,179, + 6,14,-1,0,179,180,3,30,15,0,180,189,1,0,0,0,181,182,10,3,0,0,182, + 183,5,105,0,0,183,188,3,30,15,0,184,185,10,2,0,0,185,186,5,106,0, + 0,186,188,3,30,15,0,187,181,1,0,0,0,187,184,1,0,0,0,188,191,1,0, + 0,0,189,187,1,0,0,0,189,190,1,0,0,0,190,29,1,0,0,0,191,189,1,0,0, + 0,192,193,6,15,-1,0,193,194,3,32,16,0,194,206,1,0,0,0,195,196,10, + 4,0,0,196,197,5,107,0,0,197,205,3,32,16,0,198,199,10,3,0,0,199,200, + 5,108,0,0,200,205,3,32,16,0,201,202,10,2,0,0,202,203,5,109,0,0,203, + 205,3,32,16,0,204,195,1,0,0,0,204,198,1,0,0,0,204,201,1,0,0,0,205, + 208,1,0,0,0,206,204,1,0,0,0,206,207,1,0,0,0,207,31,1,0,0,0,208,206, + 1,0,0,0,209,210,3,34,17,0,210,211,5,110,0,0,211,212,3,32,16,0,212, + 215,1,0,0,0,213,215,3,34,17,0,214,209,1,0,0,0,214,213,1,0,0,0,215, + 33,1,0,0,0,216,217,5,105,0,0,217,222,3,34,17,0,218,219,5,106,0,0, + 219,222,3,34,17,0,220,222,3,36,18,0,221,216,1,0,0,0,221,218,1,0, + 0,0,221,220,1,0,0,0,222,35,1,0,0,0,223,224,6,18,-1,0,224,225,3,38, + 19,0,225,240,1,0,0,0,226,227,10,2,0,0,227,228,5,124,0,0,228,233, + 3,22,11,0,229,230,5,121,0,0,230,232,3,22,11,0,231,229,1,0,0,0,232, + 235,1,0,0,0,233,231,1,0,0,0,233,234,1,0,0,0,234,236,1,0,0,0,235, + 233,1,0,0,0,236,237,5,125,0,0,237,239,1,0,0,0,238,226,1,0,0,0,239, + 242,1,0,0,0,240,238,1,0,0,0,240,241,1,0,0,0,241,37,1,0,0,0,242,240, + 1,0,0,0,243,279,3,42,21,0,244,279,3,44,22,0,245,279,3,46,23,0,246, + 279,3,48,24,0,247,279,3,50,25,0,248,279,3,52,26,0,249,279,3,54,27, + 0,250,279,5,132,0,0,251,279,5,131,0,0,252,279,5,130,0,0,253,254, + 5,119,0,0,254,255,3,22,11,0,255,256,5,120,0,0,256,279,1,0,0,0,257, + 258,5,118,0,0,258,259,3,22,11,0,259,260,5,118,0,0,260,279,1,0,0, + 0,261,262,5,124,0,0,262,267,3,22,11,0,263,264,5,121,0,0,264,266, + 3,22,11,0,265,263,1,0,0,0,266,269,1,0,0,0,267,265,1,0,0,0,267,268, + 1,0,0,0,268,270,1,0,0,0,269,267,1,0,0,0,270,271,5,125,0,0,271,279, + 1,0,0,0,272,273,5,132,0,0,273,275,5,119,0,0,274,276,3,40,20,0,275, + 274,1,0,0,0,275,276,1,0,0,0,276,277,1,0,0,0,277,279,5,120,0,0,278, + 243,1,0,0,0,278,244,1,0,0,0,278,245,1,0,0,0,278,246,1,0,0,0,278, + 247,1,0,0,0,278,248,1,0,0,0,278,249,1,0,0,0,278,250,1,0,0,0,278, + 251,1,0,0,0,278,252,1,0,0,0,278,253,1,0,0,0,278,257,1,0,0,0,278, + 261,1,0,0,0,278,272,1,0,0,0,279,39,1,0,0,0,280,285,3,22,11,0,281, + 282,5,121,0,0,282,284,3,22,11,0,283,281,1,0,0,0,284,287,1,0,0,0, + 285,283,1,0,0,0,285,286,1,0,0,0,286,41,1,0,0,0,287,285,1,0,0,0,288, + 289,5,102,0,0,289,290,5,119,0,0,290,291,5,120,0,0,291,43,1,0,0,0, + 292,293,5,1,0,0,293,294,5,119,0,0,294,295,3,22,11,0,295,296,5,120, + 0,0,296,562,1,0,0,0,297,298,5,2,0,0,298,299,5,119,0,0,299,300,3, + 22,11,0,300,301,5,120,0,0,301,562,1,0,0,0,302,303,5,3,0,0,303,304, + 5,119,0,0,304,305,3,22,11,0,305,306,5,120,0,0,306,562,1,0,0,0,307, + 308,5,4,0,0,308,309,5,119,0,0,309,310,3,22,11,0,310,311,5,120,0, + 0,311,562,1,0,0,0,312,313,5,5,0,0,313,314,5,119,0,0,314,315,3,22, + 11,0,315,316,5,120,0,0,316,562,1,0,0,0,317,318,5,6,0,0,318,319,5, + 119,0,0,319,320,3,22,11,0,320,321,5,120,0,0,321,562,1,0,0,0,322, + 323,5,8,0,0,323,324,5,119,0,0,324,325,3,22,11,0,325,326,5,120,0, + 0,326,562,1,0,0,0,327,328,5,9,0,0,328,329,5,119,0,0,329,330,3,22, + 11,0,330,331,5,120,0,0,331,562,1,0,0,0,332,333,5,10,0,0,333,334, + 5,119,0,0,334,335,3,22,11,0,335,336,5,120,0,0,336,562,1,0,0,0,337, + 338,5,11,0,0,338,339,5,119,0,0,339,340,3,22,11,0,340,341,5,120,0, + 0,341,562,1,0,0,0,342,343,5,12,0,0,343,344,5,119,0,0,344,345,3,22, + 11,0,345,346,5,120,0,0,346,562,1,0,0,0,347,348,5,13,0,0,348,349, + 5,119,0,0,349,350,3,22,11,0,350,351,5,120,0,0,351,562,1,0,0,0,352, + 353,5,14,0,0,353,354,5,119,0,0,354,355,3,22,11,0,355,356,5,120,0, + 0,356,562,1,0,0,0,357,358,5,15,0,0,358,359,5,119,0,0,359,360,3,22, + 11,0,360,361,5,120,0,0,361,562,1,0,0,0,362,363,5,16,0,0,363,364, + 5,119,0,0,364,365,3,22,11,0,365,366,5,120,0,0,366,562,1,0,0,0,367, + 368,5,17,0,0,368,369,5,119,0,0,369,370,3,22,11,0,370,371,5,120,0, + 0,371,562,1,0,0,0,372,373,5,18,0,0,373,374,5,119,0,0,374,375,3,22, + 11,0,375,376,5,120,0,0,376,562,1,0,0,0,377,378,5,23,0,0,378,379, + 5,119,0,0,379,380,3,22,11,0,380,381,5,120,0,0,381,562,1,0,0,0,382, + 383,5,24,0,0,383,384,5,119,0,0,384,385,3,22,11,0,385,386,5,120,0, + 0,386,562,1,0,0,0,387,388,5,25,0,0,388,389,5,119,0,0,389,390,3,22, + 11,0,390,391,5,120,0,0,391,562,1,0,0,0,392,393,5,26,0,0,393,394, + 5,119,0,0,394,395,3,22,11,0,395,396,5,120,0,0,396,562,1,0,0,0,397, + 398,5,27,0,0,398,399,5,119,0,0,399,400,3,22,11,0,400,401,5,120,0, + 0,401,562,1,0,0,0,402,403,5,28,0,0,403,404,5,119,0,0,404,405,3,22, + 11,0,405,406,5,120,0,0,406,562,1,0,0,0,407,408,5,30,0,0,408,409, + 5,119,0,0,409,410,3,22,11,0,410,411,5,120,0,0,411,562,1,0,0,0,412, + 413,5,32,0,0,413,414,5,119,0,0,414,415,3,22,11,0,415,416,5,120,0, + 0,416,562,1,0,0,0,417,418,5,33,0,0,418,419,5,119,0,0,419,420,3,22, + 11,0,420,421,5,120,0,0,421,562,1,0,0,0,422,423,5,34,0,0,423,424, + 5,119,0,0,424,425,3,22,11,0,425,426,5,120,0,0,426,562,1,0,0,0,427, + 428,5,35,0,0,428,429,5,119,0,0,429,430,3,22,11,0,430,431,5,120,0, + 0,431,562,1,0,0,0,432,433,5,41,0,0,433,434,5,119,0,0,434,435,3,22, + 11,0,435,436,5,120,0,0,436,562,1,0,0,0,437,438,5,42,0,0,438,439, + 5,119,0,0,439,440,3,22,11,0,440,441,5,120,0,0,441,562,1,0,0,0,442, + 443,5,43,0,0,443,444,5,119,0,0,444,445,3,22,11,0,445,446,5,120,0, + 0,446,562,1,0,0,0,447,448,5,44,0,0,448,449,5,119,0,0,449,450,3,22, + 11,0,450,451,5,120,0,0,451,562,1,0,0,0,452,453,5,45,0,0,453,454, + 5,119,0,0,454,455,3,22,11,0,455,456,5,120,0,0,456,562,1,0,0,0,457, + 458,5,36,0,0,458,459,5,119,0,0,459,460,3,22,11,0,460,461,5,120,0, + 0,461,562,1,0,0,0,462,463,5,55,0,0,463,464,5,119,0,0,464,465,3,22, + 11,0,465,466,5,120,0,0,466,562,1,0,0,0,467,468,5,56,0,0,468,469, + 5,119,0,0,469,470,3,22,11,0,470,471,5,120,0,0,471,562,1,0,0,0,472, + 473,5,57,0,0,473,474,5,119,0,0,474,475,3,22,11,0,475,476,5,120,0, + 0,476,562,1,0,0,0,477,478,5,58,0,0,478,479,5,119,0,0,479,480,3,22, + 11,0,480,481,5,120,0,0,481,562,1,0,0,0,482,483,5,59,0,0,483,484, + 5,119,0,0,484,485,3,22,11,0,485,486,5,120,0,0,486,562,1,0,0,0,487, + 488,5,100,0,0,488,489,5,119,0,0,489,490,3,22,11,0,490,491,5,120, + 0,0,491,562,1,0,0,0,492,493,5,90,0,0,493,494,5,119,0,0,494,495,3, + 22,11,0,495,496,5,120,0,0,496,562,1,0,0,0,497,498,5,91,0,0,498,499, + 5,119,0,0,499,500,3,22,11,0,500,501,5,120,0,0,501,562,1,0,0,0,502, + 503,5,65,0,0,503,504,5,119,0,0,504,505,3,22,11,0,505,506,5,120,0, + 0,506,562,1,0,0,0,507,508,5,66,0,0,508,509,5,119,0,0,509,510,3,22, + 11,0,510,511,5,120,0,0,511,562,1,0,0,0,512,513,5,67,0,0,513,514, + 5,119,0,0,514,517,3,22,11,0,515,516,5,121,0,0,516,518,3,22,11,0, + 517,515,1,0,0,0,517,518,1,0,0,0,518,519,1,0,0,0,519,520,5,120,0, + 0,520,562,1,0,0,0,521,522,5,69,0,0,522,523,5,119,0,0,523,524,3,22, + 11,0,524,525,5,120,0,0,525,562,1,0,0,0,526,527,5,70,0,0,527,528, + 5,119,0,0,528,529,3,22,11,0,529,530,5,120,0,0,530,562,1,0,0,0,531, + 532,5,71,0,0,532,533,5,119,0,0,533,534,3,22,11,0,534,535,5,120,0, + 0,535,562,1,0,0,0,536,537,5,72,0,0,537,538,5,119,0,0,538,539,3,22, + 11,0,539,540,5,120,0,0,540,562,1,0,0,0,541,542,5,86,0,0,542,543, + 5,119,0,0,543,544,3,22,11,0,544,545,5,120,0,0,545,562,1,0,0,0,546, + 547,5,87,0,0,547,548,5,119,0,0,548,549,3,22,11,0,549,550,5,120,0, + 0,550,562,1,0,0,0,551,552,5,88,0,0,552,553,5,119,0,0,553,554,3,22, + 11,0,554,555,5,120,0,0,555,562,1,0,0,0,556,557,5,89,0,0,557,558, + 5,119,0,0,558,559,3,22,11,0,559,560,5,120,0,0,560,562,1,0,0,0,561, + 292,1,0,0,0,561,297,1,0,0,0,561,302,1,0,0,0,561,307,1,0,0,0,561, + 312,1,0,0,0,561,317,1,0,0,0,561,322,1,0,0,0,561,327,1,0,0,0,561, + 332,1,0,0,0,561,337,1,0,0,0,561,342,1,0,0,0,561,347,1,0,0,0,561, + 352,1,0,0,0,561,357,1,0,0,0,561,362,1,0,0,0,561,367,1,0,0,0,561, + 372,1,0,0,0,561,377,1,0,0,0,561,382,1,0,0,0,561,387,1,0,0,0,561, + 392,1,0,0,0,561,397,1,0,0,0,561,402,1,0,0,0,561,407,1,0,0,0,561, + 412,1,0,0,0,561,417,1,0,0,0,561,422,1,0,0,0,561,427,1,0,0,0,561, + 432,1,0,0,0,561,437,1,0,0,0,561,442,1,0,0,0,561,447,1,0,0,0,561, + 452,1,0,0,0,561,457,1,0,0,0,561,462,1,0,0,0,561,467,1,0,0,0,561, + 472,1,0,0,0,561,477,1,0,0,0,561,482,1,0,0,0,561,487,1,0,0,0,561, + 492,1,0,0,0,561,497,1,0,0,0,561,502,1,0,0,0,561,507,1,0,0,0,561, + 512,1,0,0,0,561,521,1,0,0,0,561,526,1,0,0,0,561,531,1,0,0,0,561, + 536,1,0,0,0,561,541,1,0,0,0,561,546,1,0,0,0,561,551,1,0,0,0,561, + 556,1,0,0,0,562,45,1,0,0,0,563,564,5,29,0,0,564,565,5,119,0,0,565, + 566,3,22,11,0,566,567,5,121,0,0,567,568,3,22,11,0,568,569,5,120, + 0,0,569,722,1,0,0,0,570,571,5,7,0,0,571,572,5,119,0,0,572,573,3, + 22,11,0,573,574,5,121,0,0,574,575,3,22,11,0,575,576,5,120,0,0,576, + 722,1,0,0,0,577,578,5,21,0,0,578,579,5,119,0,0,579,580,3,22,11,0, + 580,581,5,121,0,0,581,582,3,22,11,0,582,583,5,120,0,0,583,722,1, + 0,0,0,584,585,5,22,0,0,585,586,5,119,0,0,586,587,3,22,11,0,587,588, + 5,121,0,0,588,589,3,22,11,0,589,590,5,120,0,0,590,722,1,0,0,0,591, + 592,5,39,0,0,592,593,5,119,0,0,593,594,3,22,11,0,594,595,5,121,0, + 0,595,596,3,22,11,0,596,597,5,120,0,0,597,722,1,0,0,0,598,599,5, + 53,0,0,599,600,5,119,0,0,600,601,3,22,11,0,601,602,5,121,0,0,602, + 603,3,22,11,0,603,604,5,120,0,0,604,722,1,0,0,0,605,606,5,54,0,0, + 606,607,5,119,0,0,607,608,3,22,11,0,608,609,5,121,0,0,609,610,3, + 22,11,0,610,611,5,120,0,0,611,722,1,0,0,0,612,613,5,60,0,0,613,614, + 5,119,0,0,614,615,3,22,11,0,615,616,5,121,0,0,616,617,3,22,11,0, + 617,618,5,120,0,0,618,722,1,0,0,0,619,620,5,61,0,0,620,621,5,119, + 0,0,621,622,3,22,11,0,622,623,5,121,0,0,623,624,3,22,11,0,624,625, + 5,120,0,0,625,722,1,0,0,0,626,627,5,62,0,0,627,628,5,119,0,0,628, + 629,3,22,11,0,629,630,5,121,0,0,630,631,3,22,11,0,631,632,5,120, + 0,0,632,722,1,0,0,0,633,634,5,63,0,0,634,635,5,119,0,0,635,636,3, + 22,11,0,636,637,5,121,0,0,637,638,3,22,11,0,638,639,5,120,0,0,639, + 722,1,0,0,0,640,641,5,97,0,0,641,642,5,119,0,0,642,643,3,22,11,0, + 643,644,5,121,0,0,644,645,3,22,11,0,645,646,5,120,0,0,646,722,1, + 0,0,0,647,648,5,98,0,0,648,649,5,119,0,0,649,650,3,22,11,0,650,651, + 5,121,0,0,651,652,3,22,11,0,652,653,5,120,0,0,653,722,1,0,0,0,654, + 655,5,99,0,0,655,656,5,119,0,0,656,657,3,22,11,0,657,658,5,121,0, + 0,658,659,3,22,11,0,659,660,5,120,0,0,660,722,1,0,0,0,661,662,5, + 101,0,0,662,663,5,119,0,0,663,664,3,22,11,0,664,665,5,121,0,0,665, + 666,3,22,11,0,666,667,5,120,0,0,667,722,1,0,0,0,668,669,5,93,0,0, + 669,670,5,119,0,0,670,671,3,22,11,0,671,672,5,121,0,0,672,673,3, + 22,11,0,673,674,5,120,0,0,674,722,1,0,0,0,675,676,5,95,0,0,676,677, + 5,119,0,0,677,678,3,22,11,0,678,679,5,121,0,0,679,680,3,22,11,0, + 680,681,5,120,0,0,681,722,1,0,0,0,682,683,5,96,0,0,683,684,5,119, + 0,0,684,685,3,22,11,0,685,686,5,121,0,0,686,687,3,22,11,0,687,688, + 5,120,0,0,688,722,1,0,0,0,689,690,5,68,0,0,690,691,5,119,0,0,691, + 692,3,22,11,0,692,693,5,121,0,0,693,696,3,22,11,0,694,695,5,121, + 0,0,695,697,3,22,11,0,696,694,1,0,0,0,696,697,1,0,0,0,697,698,1, + 0,0,0,698,699,5,120,0,0,699,722,1,0,0,0,700,701,5,73,0,0,701,702, + 5,119,0,0,702,703,3,22,11,0,703,704,5,121,0,0,704,705,3,22,11,0, + 705,706,5,120,0,0,706,722,1,0,0,0,707,708,5,74,0,0,708,709,5,119, + 0,0,709,710,3,22,11,0,710,711,5,121,0,0,711,712,3,22,11,0,712,713, + 5,120,0,0,713,722,1,0,0,0,714,715,5,85,0,0,715,716,5,119,0,0,716, + 717,3,22,11,0,717,718,5,121,0,0,718,719,3,22,11,0,719,720,5,120, + 0,0,720,722,1,0,0,0,721,563,1,0,0,0,721,570,1,0,0,0,721,577,1,0, + 0,0,721,584,1,0,0,0,721,591,1,0,0,0,721,598,1,0,0,0,721,605,1,0, + 0,0,721,612,1,0,0,0,721,619,1,0,0,0,721,626,1,0,0,0,721,633,1,0, + 0,0,721,640,1,0,0,0,721,647,1,0,0,0,721,654,1,0,0,0,721,661,1,0, + 0,0,721,668,1,0,0,0,721,675,1,0,0,0,721,682,1,0,0,0,721,689,1,0, + 0,0,721,700,1,0,0,0,721,707,1,0,0,0,721,714,1,0,0,0,722,47,1,0,0, + 0,723,724,5,31,0,0,724,725,5,119,0,0,725,726,3,22,11,0,726,727,5, + 121,0,0,727,728,3,22,11,0,728,729,5,121,0,0,729,730,3,22,11,0,730, + 731,5,120,0,0,731,823,1,0,0,0,732,733,5,38,0,0,733,734,5,119,0,0, + 734,735,3,22,11,0,735,736,5,121,0,0,736,737,3,22,11,0,737,738,5, + 121,0,0,738,739,3,22,11,0,739,740,5,120,0,0,740,823,1,0,0,0,741, + 742,5,40,0,0,742,743,5,119,0,0,743,744,3,22,11,0,744,745,5,121,0, + 0,745,746,3,22,11,0,746,747,5,121,0,0,747,748,3,22,11,0,748,749, + 5,120,0,0,749,823,1,0,0,0,750,751,5,52,0,0,751,752,5,119,0,0,752, + 753,3,22,11,0,753,754,5,121,0,0,754,755,3,22,11,0,755,756,5,121, + 0,0,756,757,3,22,11,0,757,758,5,120,0,0,758,823,1,0,0,0,759,760, + 5,64,0,0,760,761,5,119,0,0,761,762,3,22,11,0,762,763,5,121,0,0,763, + 764,3,22,11,0,764,765,5,121,0,0,765,766,3,22,11,0,766,767,5,120, + 0,0,767,823,1,0,0,0,768,769,5,92,0,0,769,770,5,119,0,0,770,771,3, + 22,11,0,771,772,5,121,0,0,772,773,3,22,11,0,773,774,5,121,0,0,774, + 775,3,22,11,0,775,776,5,120,0,0,776,823,1,0,0,0,777,778,5,94,0,0, + 778,779,5,119,0,0,779,780,3,22,11,0,780,781,5,121,0,0,781,782,3, + 22,11,0,782,783,5,121,0,0,783,784,3,22,11,0,784,785,5,120,0,0,785, + 823,1,0,0,0,786,787,5,75,0,0,787,788,5,119,0,0,788,789,3,22,11,0, + 789,790,5,121,0,0,790,791,3,22,11,0,791,792,5,121,0,0,792,793,3, + 22,11,0,793,794,5,120,0,0,794,823,1,0,0,0,795,796,5,76,0,0,796,797, + 5,119,0,0,797,798,3,22,11,0,798,799,5,121,0,0,799,800,3,22,11,0, + 800,801,5,121,0,0,801,802,3,22,11,0,802,803,5,120,0,0,803,823,1, + 0,0,0,804,805,5,77,0,0,805,806,5,119,0,0,806,807,3,22,11,0,807,808, + 5,121,0,0,808,809,3,22,11,0,809,810,5,121,0,0,810,811,3,22,11,0, + 811,812,5,120,0,0,812,823,1,0,0,0,813,814,5,78,0,0,814,815,5,119, + 0,0,815,816,3,22,11,0,816,817,5,121,0,0,817,818,3,22,11,0,818,819, + 5,121,0,0,819,820,3,22,11,0,820,821,5,120,0,0,821,823,1,0,0,0,822, + 723,1,0,0,0,822,732,1,0,0,0,822,741,1,0,0,0,822,750,1,0,0,0,822, + 759,1,0,0,0,822,768,1,0,0,0,822,777,1,0,0,0,822,786,1,0,0,0,822, + 795,1,0,0,0,822,804,1,0,0,0,822,813,1,0,0,0,823,49,1,0,0,0,824,825, + 5,49,0,0,825,826,5,119,0,0,826,827,3,22,11,0,827,828,5,121,0,0,828, + 829,3,22,11,0,829,830,5,121,0,0,830,831,3,22,11,0,831,832,5,121, + 0,0,832,833,3,22,11,0,833,834,5,120,0,0,834,858,1,0,0,0,835,836, + 5,37,0,0,836,837,5,119,0,0,837,838,3,22,11,0,838,839,5,121,0,0,839, + 840,3,22,11,0,840,841,5,121,0,0,841,842,3,22,11,0,842,843,5,121, + 0,0,843,844,3,22,11,0,844,845,5,120,0,0,845,858,1,0,0,0,846,847, + 5,79,0,0,847,848,5,119,0,0,848,849,3,22,11,0,849,850,5,121,0,0,850, + 851,3,22,11,0,851,852,5,121,0,0,852,853,3,22,11,0,853,854,5,121, + 0,0,854,855,3,22,11,0,855,856,5,120,0,0,856,858,1,0,0,0,857,824, + 1,0,0,0,857,835,1,0,0,0,857,846,1,0,0,0,858,51,1,0,0,0,859,860,5, + 80,0,0,860,861,5,119,0,0,861,862,3,22,11,0,862,863,5,121,0,0,863, + 864,3,22,11,0,864,865,5,121,0,0,865,866,3,22,11,0,866,867,5,121, + 0,0,867,868,3,22,11,0,868,869,5,121,0,0,869,870,3,22,11,0,870,871, + 5,120,0,0,871,53,1,0,0,0,872,873,5,19,0,0,873,874,5,119,0,0,874, + 879,3,22,11,0,875,876,5,121,0,0,876,878,3,22,11,0,877,875,1,0,0, + 0,878,881,1,0,0,0,879,877,1,0,0,0,879,880,1,0,0,0,880,882,1,0,0, + 0,881,879,1,0,0,0,882,883,5,120,0,0,883,944,1,0,0,0,884,885,5,20, + 0,0,885,886,5,119,0,0,886,891,3,22,11,0,887,888,5,121,0,0,888,890, + 3,22,11,0,889,887,1,0,0,0,890,893,1,0,0,0,891,889,1,0,0,0,891,892, + 1,0,0,0,892,894,1,0,0,0,893,891,1,0,0,0,894,895,5,120,0,0,895,944, + 1,0,0,0,896,897,5,46,0,0,897,898,5,119,0,0,898,901,3,22,11,0,899, + 900,5,121,0,0,900,902,3,22,11,0,901,899,1,0,0,0,902,903,1,0,0,0, + 903,901,1,0,0,0,903,904,1,0,0,0,904,905,1,0,0,0,905,906,5,120,0, + 0,906,944,1,0,0,0,907,908,5,47,0,0,908,909,5,119,0,0,909,912,3,22, + 11,0,910,911,5,121,0,0,911,913,3,22,11,0,912,910,1,0,0,0,913,914, + 1,0,0,0,914,912,1,0,0,0,914,915,1,0,0,0,915,916,1,0,0,0,916,917, + 5,120,0,0,917,944,1,0,0,0,918,919,5,48,0,0,919,920,5,119,0,0,920, + 923,3,22,11,0,921,922,5,121,0,0,922,924,3,22,11,0,923,921,1,0,0, + 0,924,925,1,0,0,0,925,923,1,0,0,0,925,926,1,0,0,0,926,927,1,0,0, + 0,927,928,5,120,0,0,928,944,1,0,0,0,929,930,5,50,0,0,930,931,5,119, + 0,0,931,932,3,22,11,0,932,933,5,121,0,0,933,934,3,22,11,0,934,935, + 5,120,0,0,935,944,1,0,0,0,936,937,5,51,0,0,937,938,5,119,0,0,938, + 939,3,22,11,0,939,940,5,121,0,0,940,941,3,22,11,0,941,942,5,120, + 0,0,942,944,1,0,0,0,943,872,1,0,0,0,943,884,1,0,0,0,943,896,1,0, + 0,0,943,907,1,0,0,0,943,918,1,0,0,0,943,929,1,0,0,0,943,936,1,0, + 0,0,944,55,1,0,0,0,36,59,61,70,76,90,103,112,124,137,144,173,175, 187,189,204,206,214,221,233,240,267,275,278,285,517,561,696,721, 822,857,879,891,903,914,925,943 ] @@ -370,31 +379,56 @@ class MathExprParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ ] + literalNames = [ "", "'sin'", "'cos'", "'tan'", "'asin'", "'acos'", + "'atan'", "'atan2'", "'sinh'", "'cosh'", "'tanh'", + "'asinh'", "'acosh'", "'atanh'", "'abs'", "'sqrt'", + "'ln'", "'log'", "'exp'", "'smin'", "'smax'", "'tmin'", + "'tmax'", "'tnorm'", "'snorm'", "'floor'", "'ceil'", + "'round'", "'gamma'", "'pow'", "'sigm'", "'clamp'", + "'fft'", "'ifft'", "'angle'", "'print'", "", + "", "'lerp'", "'step'", "'smoothstep'", "'fract'", + "'relu'", "'softplus'", "'gelu'", "'sign'", "'map'", + "", "", "'swap'", "", "", + "'range'", "'topk'", "'botk'", "'pinv'", "'sum'", "'mean'", + "'std'", "'var'", "", "", "'quantile'", + "'dot'", "'moment'", "'any'", "'all'", "'edge'", "", + "'median'", "'mode'", "'cumsum'", "'cumprod'", "", + "", "", "", "", + "'smootherstep'", "", "'remap'", "'if'", "'else'", + "'while'", "'return'", "'push'", "'pop'", "'clear'", + "'has'", "'get'", "", "", "", + "", "", "", "", + "'cossim'", "'flip'", "'cov'", "'sort'", "'append'", + "", "'break'", "'continue'", "'+'", "'-'", + "'*'", "'/'", "'%'", "'^'", "'>='", "'>'", "'<='", + "'<'", "'=='", "'='", "'!='", "'|'", "'('", "')'", + "','", "';'", "'->'", "'['", "']'", "'?'", "':'", "'{'", + "'}'" ] - symbolicNames = [ "", "VARIABLE", "LPAREN", "RPAREN", "ARROW", - "SEMICOLON", "EQUEALS", "COMMA", "IF", "ELSE", "WHILE", - "LBRACE", "RBRACE", "BREAK", "CONTINUE", "RETURN", - "QUESTION", "COLON", "GT", "GE", "LT", "LE", "EQ", - "NE", "PLUS", "MINUS", "MULT", "DIV", "MOD", "POW", - "LBRACKET", "RBRACKET", "NUMBER", "CONSTANT", "PIPE", - "TIMESTAMP", "SIN", "COS", "TAN", "ASIN", "ACOS", - "ATAN", "SINH", "COSH", "TANH", "ASINH", "ACOSH", - "ATANH", "ABS", "SQRT", "LN", "LOG", "EXP", "TNORM", - "SNORM", "FLOOR", "CEIL", "ROUND", "GAMMA", "SIGM", - "SFFT", "SIFFT", "ANGL", "PRNT", "FRACT", "RELU", - "SOFTPLUS", "GELU", "SIGN", "PRINT_SHAPE", "PINV", - "SUM", "MEAN", "STD", "VAR", "SORT", "NOISE", "RAND", - "ANY", "ALL", "EDGE", "MEDIAN", "MODE", "CUMSUM", - "CUMPROD", "POP", "CLEAR", "HAS", "GET", "POWE", "ATAN2", - "TMIN", "TMAX", "STEP", "TOPK", "BOTK", "QUARTILE", - "PERCENTILE", "QUANTILE", "DOT", "COSSIM", "FLIP", - "COV", "APPEND", "EXPONENTIAL", "BERNOULLI", "POISSON", - "GAUSSIAN", "TOPK_IND", "BOTK_IND", "PUSH", "CLAMP", - "LERP", "SMOOTHSTEP", "RANGE", "MOMENT", "CAUCHY", - "LOGNORMAL", "CUBIC_EASE", "ELASTIC_EASE", "SINE_EASE", - "SMOOTHERSTEP", "SWAP", "NVL", "DIST", "REMAP", "SMIN", - "SMAX", "MAP", "EZCONV", "CONV", "PERM", "RESHAPE" ] + symbolicNames = [ "", "SIN", "COS", "TAN", "ASIN", "ACOS", + "ATAN", "ATAN2", "SINH", "COSH", "TANH", "ASINH", + "ACOSH", "ATANH", "ABS", "SQRT", "LN", "LOG", "EXP", + "SMIN", "SMAX", "TMIN", "TMAX", "TNORM", "SNORM", + "FLOOR", "CEIL", "ROUND", "GAMMA", "POWE", "SIGM", + "CLAMP", "SFFT", "SIFFT", "ANGL", "PRNT", "PRINT_SHAPE", + "NVL", "LERP", "STEP", "SMOOTHSTEP", "FRACT", "RELU", + "SOFTPLUS", "GELU", "SIGN", "MAP", "EZCONV", "CONV", + "SWAP", "PERM", "RESHAPE", "RANGE", "TOPK", "BOTK", + "PINV", "SUM", "MEAN", "STD", "VAR", "QUARTILE", "PERCENTILE", + "QUANTILE", "DOT", "MOMENT", "ANY", "ALL", "EDGE", + "GAUSSIAN", "MEDIAN", "MODE", "CUMSUM", "CUMPROD", + "TOPK_IND", "BOTK_IND", "CUBIC_EASE", "ELASTIC_EASE", + "SINE_EASE", "SMOOTHERSTEP", "DIST", "REMAP", "IF", + "ELSE", "WHILE", "RET", "PUSH", "POP", "CLEAR", "HAS", + "GET", "NOISE", "RAND", "CAUCHY", "EXPONENTIAL", "LOGNORMAL", + "BERNOULLI", "POISSON", "COSSIM", "FLIP", "COV", "SORT", + "APPEND", "TIMESTAMP", "BRK", "CONT", "PLUS", "MINUS", + "MULT", "DIV", "MOD", "POW", "GE", "GT", "LE", "LT", + "EQ", "EQUEALS", "NE", "PIPE", "LPAREN", "RPAREN", + "COMMA", "SEMICOLON", "ARROW", "LBRACKET", "RBRACKET", + "QUESTION", "COLON", "LBRACE", "RBRACE", "CONSTANT", + "NUMBER", "VARIABLE", "SL_COMMENT", "ML_COMMENT", + "WS" ] RULE_start = 0 RULE_funcDef = 1 @@ -433,138 +467,141 @@ class MathExprParser ( Parser ): "funcN" ] EOF = Token.EOF - VARIABLE=1 - LPAREN=2 - RPAREN=3 - ARROW=4 - SEMICOLON=5 - EQUEALS=6 - COMMA=7 - IF=8 - ELSE=9 - WHILE=10 - LBRACE=11 - RBRACE=12 - BREAK=13 - CONTINUE=14 - RETURN=15 - QUESTION=16 - COLON=17 - GT=18 - GE=19 - LT=20 - LE=21 - EQ=22 - NE=23 - PLUS=24 - MINUS=25 - MULT=26 - DIV=27 - MOD=28 - POW=29 - LBRACKET=30 - RBRACKET=31 - NUMBER=32 - CONSTANT=33 - PIPE=34 - TIMESTAMP=35 - SIN=36 - COS=37 - TAN=38 - ASIN=39 - ACOS=40 - ATAN=41 - SINH=42 - COSH=43 - TANH=44 - ASINH=45 - ACOSH=46 - ATANH=47 - ABS=48 - SQRT=49 - LN=50 - LOG=51 - EXP=52 - TNORM=53 - SNORM=54 - FLOOR=55 - CEIL=56 - ROUND=57 - GAMMA=58 - SIGM=59 - SFFT=60 - SIFFT=61 - ANGL=62 - PRNT=63 - FRACT=64 - RELU=65 - SOFTPLUS=66 - GELU=67 - SIGN=68 - PRINT_SHAPE=69 - PINV=70 - SUM=71 - MEAN=72 - STD=73 - VAR=74 - SORT=75 - NOISE=76 - RAND=77 - ANY=78 - ALL=79 - EDGE=80 - MEDIAN=81 - MODE=82 - CUMSUM=83 - CUMPROD=84 - POP=85 - CLEAR=86 - HAS=87 - GET=88 - POWE=89 - ATAN2=90 - TMIN=91 - TMAX=92 - STEP=93 - TOPK=94 - BOTK=95 - QUARTILE=96 - PERCENTILE=97 - QUANTILE=98 - DOT=99 - COSSIM=100 - FLIP=101 - COV=102 - APPEND=103 - EXPONENTIAL=104 - BERNOULLI=105 - POISSON=106 - GAUSSIAN=107 - TOPK_IND=108 - BOTK_IND=109 - PUSH=110 - CLAMP=111 - LERP=112 - SMOOTHSTEP=113 - RANGE=114 - MOMENT=115 - CAUCHY=116 - LOGNORMAL=117 - CUBIC_EASE=118 - ELASTIC_EASE=119 - SINE_EASE=120 - SMOOTHERSTEP=121 - SWAP=122 - NVL=123 - DIST=124 - REMAP=125 - SMIN=126 - SMAX=127 - MAP=128 - EZCONV=129 - CONV=130 - PERM=131 - RESHAPE=132 + SIN=1 + COS=2 + TAN=3 + ASIN=4 + ACOS=5 + ATAN=6 + ATAN2=7 + SINH=8 + COSH=9 + TANH=10 + ASINH=11 + ACOSH=12 + ATANH=13 + ABS=14 + SQRT=15 + LN=16 + LOG=17 + EXP=18 + SMIN=19 + SMAX=20 + TMIN=21 + TMAX=22 + TNORM=23 + SNORM=24 + FLOOR=25 + CEIL=26 + ROUND=27 + GAMMA=28 + POWE=29 + SIGM=30 + CLAMP=31 + SFFT=32 + SIFFT=33 + ANGL=34 + PRNT=35 + PRINT_SHAPE=36 + NVL=37 + LERP=38 + STEP=39 + SMOOTHSTEP=40 + FRACT=41 + RELU=42 + SOFTPLUS=43 + GELU=44 + SIGN=45 + MAP=46 + EZCONV=47 + CONV=48 + SWAP=49 + PERM=50 + RESHAPE=51 + RANGE=52 + TOPK=53 + BOTK=54 + PINV=55 + SUM=56 + MEAN=57 + STD=58 + VAR=59 + QUARTILE=60 + PERCENTILE=61 + QUANTILE=62 + DOT=63 + MOMENT=64 + ANY=65 + ALL=66 + EDGE=67 + GAUSSIAN=68 + MEDIAN=69 + MODE=70 + CUMSUM=71 + CUMPROD=72 + TOPK_IND=73 + BOTK_IND=74 + CUBIC_EASE=75 + ELASTIC_EASE=76 + SINE_EASE=77 + SMOOTHERSTEP=78 + DIST=79 + REMAP=80 + IF=81 + ELSE=82 + WHILE=83 + RET=84 + PUSH=85 + POP=86 + CLEAR=87 + HAS=88 + GET=89 + NOISE=90 + RAND=91 + CAUCHY=92 + EXPONENTIAL=93 + LOGNORMAL=94 + BERNOULLI=95 + POISSON=96 + COSSIM=97 + FLIP=98 + COV=99 + SORT=100 + APPEND=101 + TIMESTAMP=102 + BRK=103 + CONT=104 + PLUS=105 + MINUS=106 + MULT=107 + DIV=108 + MOD=109 + POW=110 + GE=111 + GT=112 + LE=113 + LT=114 + EQ=115 + EQUEALS=116 + NE=117 + PIPE=118 + LPAREN=119 + RPAREN=120 + COMMA=121 + SEMICOLON=122 + ARROW=123 + LBRACKET=124 + RBRACKET=125 + QUESTION=126 + COLON=127 + LBRACE=128 + RBRACE=129 + CONSTANT=130 + NUMBER=131 + VARIABLE=132 + SL_COMMENT=133 + ML_COMMENT=134 + WS=135 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -735,7 +772,7 @@ class MathExprParser ( Parser ): self.state = 70 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==1: + if _la==132: self.state = 69 self.paramList() @@ -747,11 +784,11 @@ class MathExprParser ( Parser ): self.state = 76 self._errHandler.sync(self) token = self._input.LA(1) - if token in [11]: + if token in [128]: self.state = 74 self.block() pass - elif token in [1, 2, 24, 25, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132]: + elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 105, 106, 118, 119, 124, 130, 131, 132]: self.state = 75 self.expr() pass @@ -867,7 +904,7 @@ class MathExprParser ( Parser ): self.state = 90 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==7: + while _la==121: self.state = 86 self.match(MathExprParser.COMMA) self.state = 87 @@ -1299,7 +1336,7 @@ class MathExprParser ( Parser ): self.state = 124 self._errHandler.sync(self) _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & -3170833146) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 31) != 0): + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 1206973496228052991) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 29) != 0): self.state = 121 self.stmt() self.state = 126 @@ -1324,8 +1361,8 @@ class MathExprParser ( Parser ): super().__init__(parent, invokingState) self.parser = parser - def BREAK(self): - return self.getToken(MathExprParser.BREAK, 0) + def BRK(self): + return self.getToken(MathExprParser.BRK, 0) def SEMICOLON(self): return self.getToken(MathExprParser.SEMICOLON, 0) @@ -1349,7 +1386,7 @@ class MathExprParser ( Parser ): try: self.enterOuterAlt(localctx, 1) self.state = 129 - self.match(MathExprParser.BREAK) + self.match(MathExprParser.BRK) self.state = 130 self.match(MathExprParser.SEMICOLON) except RecognitionException as re: @@ -1368,8 +1405,8 @@ class MathExprParser ( Parser ): super().__init__(parent, invokingState) self.parser = parser - def CONTINUE(self): - return self.getToken(MathExprParser.CONTINUE, 0) + def CONT(self): + return self.getToken(MathExprParser.CONT, 0) def SEMICOLON(self): return self.getToken(MathExprParser.SEMICOLON, 0) @@ -1393,7 +1430,7 @@ class MathExprParser ( Parser ): try: self.enterOuterAlt(localctx, 1) self.state = 132 - self.match(MathExprParser.CONTINUE) + self.match(MathExprParser.CONT) self.state = 133 self.match(MathExprParser.SEMICOLON) except RecognitionException as re: @@ -1412,8 +1449,8 @@ class MathExprParser ( Parser ): super().__init__(parent, invokingState) self.parser = parser - def RETURN(self): - return self.getToken(MathExprParser.RETURN, 0) + def RET(self): + return self.getToken(MathExprParser.RET, 0) def SEMICOLON(self): return self.getToken(MathExprParser.SEMICOLON, 0) @@ -1442,11 +1479,11 @@ class MathExprParser ( Parser ): try: self.enterOuterAlt(localctx, 1) self.state = 135 - self.match(MathExprParser.RETURN) + self.match(MathExprParser.RET) self.state = 137 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -3170893818) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 31) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 1206971846958907391) != 0) or ((((_la - 130)) & ~0x3f) == 0 and ((1 << (_la - 130)) & 7) != 0): self.state = 136 self.expr() @@ -2384,7 +2421,7 @@ class MathExprParser ( Parser ): self.state = 221 self._errHandler.sync(self) token = self._input.LA(1) - if token in [24]: + if token in [105]: localctx = MathExprParser.UnaryPlusContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 216 @@ -2392,7 +2429,7 @@ class MathExprParser ( Parser ): self.state = 217 self.unaryExpr() pass - elif token in [25]: + elif token in [106]: localctx = MathExprParser.UnaryMinusContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 218 @@ -2400,7 +2437,7 @@ class MathExprParser ( Parser ): self.state = 219 self.unaryExpr() pass - elif token in [1, 2, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132]: + elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 118, 119, 124, 130, 131, 132]: localctx = MathExprParser.ToIndexContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 220 @@ -2522,7 +2559,7 @@ class MathExprParser ( Parser ): self.state = 233 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==7: + while _la==121: self.state = 229 self.match(MathExprParser.COMMA) self.state = 230 @@ -2937,7 +2974,7 @@ class MathExprParser ( Parser ): self.state = 267 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==7: + while _la==121: self.state = 263 self.match(MathExprParser.COMMA) self.state = 264 @@ -2960,7 +2997,7 @@ class MathExprParser ( Parser ): self.state = 275 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -3170893818) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 31) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 1206971846958907391) != 0) or ((((_la - 130)) & ~0x3f) == 0 and ((1 << (_la - 130)) & 7) != 0): self.state = 274 self.exprList() @@ -3023,7 +3060,7 @@ class MathExprParser ( Parser ): self.state = 285 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==7: + while _la==121: self.state = 281 self.match(MathExprParser.COMMA) self.state = 282 @@ -4352,7 +4389,7 @@ class MathExprParser ( Parser ): self.state = 561 self._errHandler.sync(self) token = self._input.LA(1) - if token in [36]: + if token in [1]: localctx = MathExprParser.SinFuncContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 292 @@ -4364,7 +4401,7 @@ class MathExprParser ( Parser ): self.state = 295 self.match(MathExprParser.RPAREN) pass - elif token in [37]: + elif token in [2]: localctx = MathExprParser.CosFuncContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 297 @@ -4376,7 +4413,7 @@ class MathExprParser ( Parser ): self.state = 300 self.match(MathExprParser.RPAREN) pass - elif token in [38]: + elif token in [3]: localctx = MathExprParser.TanFuncContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 302 @@ -4388,7 +4425,7 @@ class MathExprParser ( Parser ): self.state = 305 self.match(MathExprParser.RPAREN) pass - elif token in [39]: + elif token in [4]: localctx = MathExprParser.AsinFuncContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 307 @@ -4400,7 +4437,7 @@ class MathExprParser ( Parser ): self.state = 310 self.match(MathExprParser.RPAREN) pass - elif token in [40]: + elif token in [5]: localctx = MathExprParser.AcosFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 312 @@ -4412,7 +4449,7 @@ class MathExprParser ( Parser ): self.state = 315 self.match(MathExprParser.RPAREN) pass - elif token in [41]: + elif token in [6]: localctx = MathExprParser.AtanFuncContext(self, localctx) self.enterOuterAlt(localctx, 6) self.state = 317 @@ -4424,7 +4461,7 @@ class MathExprParser ( Parser ): self.state = 320 self.match(MathExprParser.RPAREN) pass - elif token in [42]: + elif token in [8]: localctx = MathExprParser.SinhFuncContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 322 @@ -4436,7 +4473,7 @@ class MathExprParser ( Parser ): self.state = 325 self.match(MathExprParser.RPAREN) pass - elif token in [43]: + elif token in [9]: localctx = MathExprParser.CoshFuncContext(self, localctx) self.enterOuterAlt(localctx, 8) self.state = 327 @@ -4448,7 +4485,7 @@ class MathExprParser ( Parser ): self.state = 330 self.match(MathExprParser.RPAREN) pass - elif token in [44]: + elif token in [10]: localctx = MathExprParser.TanhFuncContext(self, localctx) self.enterOuterAlt(localctx, 9) self.state = 332 @@ -4460,7 +4497,7 @@ class MathExprParser ( Parser ): self.state = 335 self.match(MathExprParser.RPAREN) pass - elif token in [45]: + elif token in [11]: localctx = MathExprParser.AsinhFuncContext(self, localctx) self.enterOuterAlt(localctx, 10) self.state = 337 @@ -4472,7 +4509,7 @@ class MathExprParser ( Parser ): self.state = 340 self.match(MathExprParser.RPAREN) pass - elif token in [46]: + elif token in [12]: localctx = MathExprParser.AcoshFuncContext(self, localctx) self.enterOuterAlt(localctx, 11) self.state = 342 @@ -4484,7 +4521,7 @@ class MathExprParser ( Parser ): self.state = 345 self.match(MathExprParser.RPAREN) pass - elif token in [47]: + elif token in [13]: localctx = MathExprParser.AtanhFuncContext(self, localctx) self.enterOuterAlt(localctx, 12) self.state = 347 @@ -4496,7 +4533,7 @@ class MathExprParser ( Parser ): self.state = 350 self.match(MathExprParser.RPAREN) pass - elif token in [48]: + elif token in [14]: localctx = MathExprParser.AbsFuncContext(self, localctx) self.enterOuterAlt(localctx, 13) self.state = 352 @@ -4508,7 +4545,7 @@ class MathExprParser ( Parser ): self.state = 355 self.match(MathExprParser.RPAREN) pass - elif token in [49]: + elif token in [15]: localctx = MathExprParser.SqrtFuncContext(self, localctx) self.enterOuterAlt(localctx, 14) self.state = 357 @@ -4520,7 +4557,7 @@ class MathExprParser ( Parser ): self.state = 360 self.match(MathExprParser.RPAREN) pass - elif token in [50]: + elif token in [16]: localctx = MathExprParser.LnFuncContext(self, localctx) self.enterOuterAlt(localctx, 15) self.state = 362 @@ -4532,7 +4569,7 @@ class MathExprParser ( Parser ): self.state = 365 self.match(MathExprParser.RPAREN) pass - elif token in [51]: + elif token in [17]: localctx = MathExprParser.LogFuncContext(self, localctx) self.enterOuterAlt(localctx, 16) self.state = 367 @@ -4544,7 +4581,7 @@ class MathExprParser ( Parser ): self.state = 370 self.match(MathExprParser.RPAREN) pass - elif token in [52]: + elif token in [18]: localctx = MathExprParser.ExpFuncContext(self, localctx) self.enterOuterAlt(localctx, 17) self.state = 372 @@ -4556,7 +4593,7 @@ class MathExprParser ( Parser ): self.state = 375 self.match(MathExprParser.RPAREN) pass - elif token in [53]: + elif token in [23]: localctx = MathExprParser.TNormFuncContext(self, localctx) self.enterOuterAlt(localctx, 18) self.state = 377 @@ -4568,7 +4605,7 @@ class MathExprParser ( Parser ): self.state = 380 self.match(MathExprParser.RPAREN) pass - elif token in [54]: + elif token in [24]: localctx = MathExprParser.SNormFuncContext(self, localctx) self.enterOuterAlt(localctx, 19) self.state = 382 @@ -4580,7 +4617,7 @@ class MathExprParser ( Parser ): self.state = 385 self.match(MathExprParser.RPAREN) pass - elif token in [55]: + elif token in [25]: localctx = MathExprParser.FloorFuncContext(self, localctx) self.enterOuterAlt(localctx, 20) self.state = 387 @@ -4592,7 +4629,7 @@ class MathExprParser ( Parser ): self.state = 390 self.match(MathExprParser.RPAREN) pass - elif token in [56]: + elif token in [26]: localctx = MathExprParser.CeilFuncContext(self, localctx) self.enterOuterAlt(localctx, 21) self.state = 392 @@ -4604,7 +4641,7 @@ class MathExprParser ( Parser ): self.state = 395 self.match(MathExprParser.RPAREN) pass - elif token in [57]: + elif token in [27]: localctx = MathExprParser.RoundFuncContext(self, localctx) self.enterOuterAlt(localctx, 22) self.state = 397 @@ -4616,7 +4653,7 @@ class MathExprParser ( Parser ): self.state = 400 self.match(MathExprParser.RPAREN) pass - elif token in [58]: + elif token in [28]: localctx = MathExprParser.GammaFuncContext(self, localctx) self.enterOuterAlt(localctx, 23) self.state = 402 @@ -4628,7 +4665,7 @@ class MathExprParser ( Parser ): self.state = 405 self.match(MathExprParser.RPAREN) pass - elif token in [59]: + elif token in [30]: localctx = MathExprParser.SigmoidFuncContext(self, localctx) self.enterOuterAlt(localctx, 24) self.state = 407 @@ -4640,7 +4677,7 @@ class MathExprParser ( Parser ): self.state = 410 self.match(MathExprParser.RPAREN) pass - elif token in [60]: + elif token in [32]: localctx = MathExprParser.SfftFuncContext(self, localctx) self.enterOuterAlt(localctx, 25) self.state = 412 @@ -4652,7 +4689,7 @@ class MathExprParser ( Parser ): self.state = 415 self.match(MathExprParser.RPAREN) pass - elif token in [61]: + elif token in [33]: localctx = MathExprParser.SifftFuncContext(self, localctx) self.enterOuterAlt(localctx, 26) self.state = 417 @@ -4664,7 +4701,7 @@ class MathExprParser ( Parser ): self.state = 420 self.match(MathExprParser.RPAREN) pass - elif token in [62]: + elif token in [34]: localctx = MathExprParser.AnglFuncContext(self, localctx) self.enterOuterAlt(localctx, 27) self.state = 422 @@ -4676,7 +4713,7 @@ class MathExprParser ( Parser ): self.state = 425 self.match(MathExprParser.RPAREN) pass - elif token in [63]: + elif token in [35]: localctx = MathExprParser.PrintFuncContext(self, localctx) self.enterOuterAlt(localctx, 28) self.state = 427 @@ -4688,7 +4725,7 @@ class MathExprParser ( Parser ): self.state = 430 self.match(MathExprParser.RPAREN) pass - elif token in [64]: + elif token in [41]: localctx = MathExprParser.FractFuncContext(self, localctx) self.enterOuterAlt(localctx, 29) self.state = 432 @@ -4700,7 +4737,7 @@ class MathExprParser ( Parser ): self.state = 435 self.match(MathExprParser.RPAREN) pass - elif token in [65]: + elif token in [42]: localctx = MathExprParser.ReluFuncContext(self, localctx) self.enterOuterAlt(localctx, 30) self.state = 437 @@ -4712,7 +4749,7 @@ class MathExprParser ( Parser ): self.state = 440 self.match(MathExprParser.RPAREN) pass - elif token in [66]: + elif token in [43]: localctx = MathExprParser.SoftplusFuncContext(self, localctx) self.enterOuterAlt(localctx, 31) self.state = 442 @@ -4724,7 +4761,7 @@ class MathExprParser ( Parser ): self.state = 445 self.match(MathExprParser.RPAREN) pass - elif token in [67]: + elif token in [44]: localctx = MathExprParser.GeluFuncContext(self, localctx) self.enterOuterAlt(localctx, 32) self.state = 447 @@ -4736,7 +4773,7 @@ class MathExprParser ( Parser ): self.state = 450 self.match(MathExprParser.RPAREN) pass - elif token in [68]: + elif token in [45]: localctx = MathExprParser.SignFuncContext(self, localctx) self.enterOuterAlt(localctx, 33) self.state = 452 @@ -4748,7 +4785,7 @@ class MathExprParser ( Parser ): self.state = 455 self.match(MathExprParser.RPAREN) pass - elif token in [69]: + elif token in [36]: localctx = MathExprParser.PrintShapeFuncContext(self, localctx) self.enterOuterAlt(localctx, 34) self.state = 457 @@ -4760,7 +4797,7 @@ class MathExprParser ( Parser ): self.state = 460 self.match(MathExprParser.RPAREN) pass - elif token in [70]: + elif token in [55]: localctx = MathExprParser.PinvFuncContext(self, localctx) self.enterOuterAlt(localctx, 35) self.state = 462 @@ -4772,7 +4809,7 @@ class MathExprParser ( Parser ): self.state = 465 self.match(MathExprParser.RPAREN) pass - elif token in [71]: + elif token in [56]: localctx = MathExprParser.SumFuncContext(self, localctx) self.enterOuterAlt(localctx, 36) self.state = 467 @@ -4784,7 +4821,7 @@ class MathExprParser ( Parser ): self.state = 470 self.match(MathExprParser.RPAREN) pass - elif token in [72]: + elif token in [57]: localctx = MathExprParser.MeanFuncContext(self, localctx) self.enterOuterAlt(localctx, 37) self.state = 472 @@ -4796,7 +4833,7 @@ class MathExprParser ( Parser ): self.state = 475 self.match(MathExprParser.RPAREN) pass - elif token in [73]: + elif token in [58]: localctx = MathExprParser.StdFuncContext(self, localctx) self.enterOuterAlt(localctx, 38) self.state = 477 @@ -4808,7 +4845,7 @@ class MathExprParser ( Parser ): self.state = 480 self.match(MathExprParser.RPAREN) pass - elif token in [74]: + elif token in [59]: localctx = MathExprParser.VarFuncContext(self, localctx) self.enterOuterAlt(localctx, 39) self.state = 482 @@ -4820,7 +4857,7 @@ class MathExprParser ( Parser ): self.state = 485 self.match(MathExprParser.RPAREN) pass - elif token in [75]: + elif token in [100]: localctx = MathExprParser.SortFuncContext(self, localctx) self.enterOuterAlt(localctx, 40) self.state = 487 @@ -4832,7 +4869,7 @@ class MathExprParser ( Parser ): self.state = 490 self.match(MathExprParser.RPAREN) pass - elif token in [76]: + elif token in [90]: localctx = MathExprParser.NoiseFuncContext(self, localctx) self.enterOuterAlt(localctx, 41) self.state = 492 @@ -4844,7 +4881,7 @@ class MathExprParser ( Parser ): self.state = 495 self.match(MathExprParser.RPAREN) pass - elif token in [77]: + elif token in [91]: localctx = MathExprParser.RandFuncContext(self, localctx) self.enterOuterAlt(localctx, 42) self.state = 497 @@ -4856,7 +4893,7 @@ class MathExprParser ( Parser ): self.state = 500 self.match(MathExprParser.RPAREN) pass - elif token in [78]: + elif token in [65]: localctx = MathExprParser.AnyFuncContext(self, localctx) self.enterOuterAlt(localctx, 43) self.state = 502 @@ -4868,7 +4905,7 @@ class MathExprParser ( Parser ): self.state = 505 self.match(MathExprParser.RPAREN) pass - elif token in [79]: + elif token in [66]: localctx = MathExprParser.AllFuncContext(self, localctx) self.enterOuterAlt(localctx, 44) self.state = 507 @@ -4880,7 +4917,7 @@ class MathExprParser ( Parser ): self.state = 510 self.match(MathExprParser.RPAREN) pass - elif token in [80]: + elif token in [67]: localctx = MathExprParser.EdgeFuncContext(self, localctx) self.enterOuterAlt(localctx, 45) self.state = 512 @@ -4892,7 +4929,7 @@ class MathExprParser ( Parser ): self.state = 517 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==7: + if _la==121: self.state = 515 self.match(MathExprParser.COMMA) self.state = 516 @@ -4902,7 +4939,7 @@ class MathExprParser ( Parser ): self.state = 519 self.match(MathExprParser.RPAREN) pass - elif token in [81]: + elif token in [69]: localctx = MathExprParser.MedianFuncContext(self, localctx) self.enterOuterAlt(localctx, 46) self.state = 521 @@ -4914,7 +4951,7 @@ class MathExprParser ( Parser ): self.state = 524 self.match(MathExprParser.RPAREN) pass - elif token in [82]: + elif token in [70]: localctx = MathExprParser.ModeFuncContext(self, localctx) self.enterOuterAlt(localctx, 47) self.state = 526 @@ -4926,7 +4963,7 @@ class MathExprParser ( Parser ): self.state = 529 self.match(MathExprParser.RPAREN) pass - elif token in [83]: + elif token in [71]: localctx = MathExprParser.CumsumFuncContext(self, localctx) self.enterOuterAlt(localctx, 48) self.state = 531 @@ -4938,7 +4975,7 @@ class MathExprParser ( Parser ): self.state = 534 self.match(MathExprParser.RPAREN) pass - elif token in [84]: + elif token in [72]: localctx = MathExprParser.CumprodFuncContext(self, localctx) self.enterOuterAlt(localctx, 49) self.state = 536 @@ -4950,7 +4987,7 @@ class MathExprParser ( Parser ): self.state = 539 self.match(MathExprParser.RPAREN) pass - elif token in [85]: + elif token in [86]: localctx = MathExprParser.PopFuncContext(self, localctx) self.enterOuterAlt(localctx, 50) self.state = 541 @@ -4962,7 +4999,7 @@ class MathExprParser ( Parser ): self.state = 544 self.match(MathExprParser.RPAREN) pass - elif token in [86]: + elif token in [87]: localctx = MathExprParser.ClearFuncContext(self, localctx) self.enterOuterAlt(localctx, 51) self.state = 546 @@ -4974,7 +5011,7 @@ class MathExprParser ( Parser ): self.state = 549 self.match(MathExprParser.RPAREN) pass - elif token in [87]: + elif token in [88]: localctx = MathExprParser.HasFuncContext(self, localctx) self.enterOuterAlt(localctx, 52) self.state = 551 @@ -4986,7 +5023,7 @@ class MathExprParser ( Parser ): self.state = 554 self.match(MathExprParser.RPAREN) pass - elif token in [88]: + elif token in [89]: localctx = MathExprParser.GetFuncContext(self, localctx) self.enterOuterAlt(localctx, 53) self.state = 556 @@ -5656,7 +5693,7 @@ class MathExprParser ( Parser ): self.state = 721 self._errHandler.sync(self) token = self._input.LA(1) - if token in [89]: + if token in [29]: localctx = MathExprParser.PowFuncContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 563 @@ -5672,7 +5709,7 @@ class MathExprParser ( Parser ): self.state = 568 self.match(MathExprParser.RPAREN) pass - elif token in [90]: + elif token in [7]: localctx = MathExprParser.Atan2FuncContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 570 @@ -5688,7 +5725,7 @@ class MathExprParser ( Parser ): self.state = 575 self.match(MathExprParser.RPAREN) pass - elif token in [91]: + elif token in [21]: localctx = MathExprParser.TMinFuncContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 577 @@ -5704,7 +5741,7 @@ class MathExprParser ( Parser ): self.state = 582 self.match(MathExprParser.RPAREN) pass - elif token in [92]: + elif token in [22]: localctx = MathExprParser.TMaxFuncContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 584 @@ -5720,7 +5757,7 @@ class MathExprParser ( Parser ): self.state = 589 self.match(MathExprParser.RPAREN) pass - elif token in [93]: + elif token in [39]: localctx = MathExprParser.StepFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 591 @@ -5736,7 +5773,7 @@ class MathExprParser ( Parser ): self.state = 596 self.match(MathExprParser.RPAREN) pass - elif token in [94]: + elif token in [53]: localctx = MathExprParser.TopkFuncContext(self, localctx) self.enterOuterAlt(localctx, 6) self.state = 598 @@ -5752,7 +5789,7 @@ class MathExprParser ( Parser ): self.state = 603 self.match(MathExprParser.RPAREN) pass - elif token in [95]: + elif token in [54]: localctx = MathExprParser.BotkFuncContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 605 @@ -5768,7 +5805,7 @@ class MathExprParser ( Parser ): self.state = 610 self.match(MathExprParser.RPAREN) pass - elif token in [96]: + elif token in [60]: localctx = MathExprParser.QuartileFuncContext(self, localctx) self.enterOuterAlt(localctx, 8) self.state = 612 @@ -5784,7 +5821,7 @@ class MathExprParser ( Parser ): self.state = 617 self.match(MathExprParser.RPAREN) pass - elif token in [97]: + elif token in [61]: localctx = MathExprParser.PercentileFuncContext(self, localctx) self.enterOuterAlt(localctx, 9) self.state = 619 @@ -5800,7 +5837,7 @@ class MathExprParser ( Parser ): self.state = 624 self.match(MathExprParser.RPAREN) pass - elif token in [98]: + elif token in [62]: localctx = MathExprParser.QuantileFuncContext(self, localctx) self.enterOuterAlt(localctx, 10) self.state = 626 @@ -5816,7 +5853,7 @@ class MathExprParser ( Parser ): self.state = 631 self.match(MathExprParser.RPAREN) pass - elif token in [99]: + elif token in [63]: localctx = MathExprParser.DotFuncContext(self, localctx) self.enterOuterAlt(localctx, 11) self.state = 633 @@ -5832,7 +5869,7 @@ class MathExprParser ( Parser ): self.state = 638 self.match(MathExprParser.RPAREN) pass - elif token in [100]: + elif token in [97]: localctx = MathExprParser.CossimFuncContext(self, localctx) self.enterOuterAlt(localctx, 12) self.state = 640 @@ -5848,7 +5885,7 @@ class MathExprParser ( Parser ): self.state = 645 self.match(MathExprParser.RPAREN) pass - elif token in [101]: + elif token in [98]: localctx = MathExprParser.FlipFuncContext(self, localctx) self.enterOuterAlt(localctx, 13) self.state = 647 @@ -5864,7 +5901,7 @@ class MathExprParser ( Parser ): self.state = 652 self.match(MathExprParser.RPAREN) pass - elif token in [102]: + elif token in [99]: localctx = MathExprParser.CovFuncContext(self, localctx) self.enterOuterAlt(localctx, 14) self.state = 654 @@ -5880,7 +5917,7 @@ class MathExprParser ( Parser ): self.state = 659 self.match(MathExprParser.RPAREN) pass - elif token in [103]: + elif token in [101]: localctx = MathExprParser.AppendFuncContext(self, localctx) self.enterOuterAlt(localctx, 15) self.state = 661 @@ -5896,7 +5933,7 @@ class MathExprParser ( Parser ): self.state = 666 self.match(MathExprParser.RPAREN) pass - elif token in [104]: + elif token in [93]: localctx = MathExprParser.ExponentialFuncContext(self, localctx) self.enterOuterAlt(localctx, 16) self.state = 668 @@ -5912,7 +5949,7 @@ class MathExprParser ( Parser ): self.state = 673 self.match(MathExprParser.RPAREN) pass - elif token in [105]: + elif token in [95]: localctx = MathExprParser.BernoulliFuncContext(self, localctx) self.enterOuterAlt(localctx, 17) self.state = 675 @@ -5928,7 +5965,7 @@ class MathExprParser ( Parser ): self.state = 680 self.match(MathExprParser.RPAREN) pass - elif token in [106]: + elif token in [96]: localctx = MathExprParser.PoissonFuncContext(self, localctx) self.enterOuterAlt(localctx, 18) self.state = 682 @@ -5944,7 +5981,7 @@ class MathExprParser ( Parser ): self.state = 687 self.match(MathExprParser.RPAREN) pass - elif token in [107]: + elif token in [68]: localctx = MathExprParser.GaussianFuncContext(self, localctx) self.enterOuterAlt(localctx, 19) self.state = 689 @@ -5960,7 +5997,7 @@ class MathExprParser ( Parser ): self.state = 696 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==7: + if _la==121: self.state = 694 self.match(MathExprParser.COMMA) self.state = 695 @@ -5970,7 +6007,7 @@ class MathExprParser ( Parser ): self.state = 698 self.match(MathExprParser.RPAREN) pass - elif token in [108]: + elif token in [73]: localctx = MathExprParser.TopkIndFuncContext(self, localctx) self.enterOuterAlt(localctx, 20) self.state = 700 @@ -5986,7 +6023,7 @@ class MathExprParser ( Parser ): self.state = 705 self.match(MathExprParser.RPAREN) pass - elif token in [109]: + elif token in [74]: localctx = MathExprParser.BotkIndFuncContext(self, localctx) self.enterOuterAlt(localctx, 21) self.state = 707 @@ -6002,7 +6039,7 @@ class MathExprParser ( Parser ): self.state = 712 self.match(MathExprParser.RPAREN) pass - elif token in [110]: + elif token in [85]: localctx = MathExprParser.PushFuncContext(self, localctx) self.enterOuterAlt(localctx, 22) self.state = 714 @@ -6397,7 +6434,7 @@ class MathExprParser ( Parser ): self.state = 822 self._errHandler.sync(self) token = self._input.LA(1) - if token in [111]: + if token in [31]: localctx = MathExprParser.ClampFuncContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 723 @@ -6417,7 +6454,7 @@ class MathExprParser ( Parser ): self.state = 730 self.match(MathExprParser.RPAREN) pass - elif token in [112]: + elif token in [38]: localctx = MathExprParser.LerpFuncContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 732 @@ -6437,7 +6474,7 @@ class MathExprParser ( Parser ): self.state = 739 self.match(MathExprParser.RPAREN) pass - elif token in [113]: + elif token in [40]: localctx = MathExprParser.SmoothstepFuncContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 741 @@ -6457,7 +6494,7 @@ class MathExprParser ( Parser ): self.state = 748 self.match(MathExprParser.RPAREN) pass - elif token in [114]: + elif token in [52]: localctx = MathExprParser.RangeFuncContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 750 @@ -6477,7 +6514,7 @@ class MathExprParser ( Parser ): self.state = 757 self.match(MathExprParser.RPAREN) pass - elif token in [115]: + elif token in [64]: localctx = MathExprParser.MomentFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 759 @@ -6497,7 +6534,7 @@ class MathExprParser ( Parser ): self.state = 766 self.match(MathExprParser.RPAREN) pass - elif token in [116]: + elif token in [92]: localctx = MathExprParser.CauchyFuncContext(self, localctx) self.enterOuterAlt(localctx, 6) self.state = 768 @@ -6517,7 +6554,7 @@ class MathExprParser ( Parser ): self.state = 775 self.match(MathExprParser.RPAREN) pass - elif token in [117]: + elif token in [94]: localctx = MathExprParser.LogNormalFuncContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 777 @@ -6537,7 +6574,7 @@ class MathExprParser ( Parser ): self.state = 784 self.match(MathExprParser.RPAREN) pass - elif token in [118]: + elif token in [75]: localctx = MathExprParser.CubicEaseFuncContext(self, localctx) self.enterOuterAlt(localctx, 8) self.state = 786 @@ -6557,7 +6594,7 @@ class MathExprParser ( Parser ): self.state = 793 self.match(MathExprParser.RPAREN) pass - elif token in [119]: + elif token in [76]: localctx = MathExprParser.ElasticEaseFuncContext(self, localctx) self.enterOuterAlt(localctx, 9) self.state = 795 @@ -6577,7 +6614,7 @@ class MathExprParser ( Parser ): self.state = 802 self.match(MathExprParser.RPAREN) pass - elif token in [120]: + elif token in [77]: localctx = MathExprParser.SineEaseFuncContext(self, localctx) self.enterOuterAlt(localctx, 10) self.state = 804 @@ -6597,7 +6634,7 @@ class MathExprParser ( Parser ): self.state = 811 self.match(MathExprParser.RPAREN) pass - elif token in [121]: + elif token in [78]: localctx = MathExprParser.SmootherstepFuncContext(self, localctx) self.enterOuterAlt(localctx, 11) self.state = 813 @@ -6748,7 +6785,7 @@ class MathExprParser ( Parser ): self.state = 857 self._errHandler.sync(self) token = self._input.LA(1) - if token in [122]: + if token in [49]: localctx = MathExprParser.SwapFuncContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 824 @@ -6772,7 +6809,7 @@ class MathExprParser ( Parser ): self.state = 833 self.match(MathExprParser.RPAREN) pass - elif token in [123]: + elif token in [37]: localctx = MathExprParser.NvlFuncContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 835 @@ -6796,7 +6833,7 @@ class MathExprParser ( Parser ): self.state = 844 self.match(MathExprParser.RPAREN) pass - elif token in [124]: + elif token in [79]: localctx = MathExprParser.DistFuncContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 846 @@ -7159,7 +7196,7 @@ class MathExprParser ( Parser ): self.state = 943 self._errHandler.sync(self) token = self._input.LA(1) - if token in [126]: + if token in [19]: localctx = MathExprParser.SMinFuncContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 872 @@ -7171,7 +7208,7 @@ class MathExprParser ( Parser ): self.state = 879 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==7: + while _la==121: self.state = 875 self.match(MathExprParser.COMMA) self.state = 876 @@ -7183,7 +7220,7 @@ class MathExprParser ( Parser ): self.state = 882 self.match(MathExprParser.RPAREN) pass - elif token in [127]: + elif token in [20]: localctx = MathExprParser.SMaxFuncContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 884 @@ -7195,7 +7232,7 @@ class MathExprParser ( Parser ): self.state = 891 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==7: + while _la==121: self.state = 887 self.match(MathExprParser.COMMA) self.state = 888 @@ -7207,7 +7244,7 @@ class MathExprParser ( Parser ): self.state = 894 self.match(MathExprParser.RPAREN) pass - elif token in [128]: + elif token in [46]: localctx = MathExprParser.MapFuncContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 896 @@ -7227,13 +7264,13 @@ class MathExprParser ( Parser ): self.state = 903 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==7): + if not (_la==121): break self.state = 905 self.match(MathExprParser.RPAREN) pass - elif token in [129]: + elif token in [47]: localctx = MathExprParser.EzConvFuncContext(self, localctx) self.enterOuterAlt(localctx, 4) self.state = 907 @@ -7253,13 +7290,13 @@ class MathExprParser ( Parser ): self.state = 914 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==7): + if not (_la==121): break self.state = 916 self.match(MathExprParser.RPAREN) pass - elif token in [130]: + elif token in [48]: localctx = MathExprParser.ConvFuncContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 918 @@ -7279,13 +7316,13 @@ class MathExprParser ( Parser ): self.state = 925 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==7): + if not (_la==121): break self.state = 927 self.match(MathExprParser.RPAREN) pass - elif token in [131]: + elif token in [50]: localctx = MathExprParser.PermuteFuncContext(self, localctx) self.enterOuterAlt(localctx, 6) self.state = 929 @@ -7301,7 +7338,7 @@ class MathExprParser ( Parser ): self.state = 934 self.match(MathExprParser.RPAREN) pass - elif token in [132]: + elif token in [51]: localctx = MathExprParser.ReshapeFuncContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 936 diff --git a/more_math/SigmasMathNode.py b/more_math/SigmasMathNode.py index 10b9f14..cf707c5 100644 --- a/more_math/SigmasMathNode.py +++ b/more_math/SigmasMathNode.py @@ -125,7 +125,7 @@ class SigmasMathNode(io.ComfyNode): variables[k] = v if v is not None else 0.0 tree = parse_expr(Expression); - visitor = UnifiedMathVisitor(variables, ae.shape) + visitor = UnifiedMathVisitor(variables, ae.shape,ae.device) result = visitor.visit(tree) result = as_tensor(result, ae.shape) return (result,) diff --git a/more_math/VideoMathNode.py b/more_math/VideoMathNode.py index ab00235..864e7d5 100644 --- a/more_math/VideoMathNode.py +++ b/more_math/VideoMathNode.py @@ -137,7 +137,7 @@ class VideoMathNode(io.ComfyNode): variables[k] = val if val is not None else 0.0 tree = parse_expr(Expression); - visitor = UnifiedMathVisitor(variables, ae.shape,state_storage=ss) + visitor = UnifiedMathVisitor(variables, ae.shape,ae.device,state_storage=ss) result = visitor.visit(tree) result = as_tensor(result, ae.shape) diff --git a/more_math/modelLikeCommon.py b/more_math/modelLikeCommon.py index 91c5003..143397e 100644 --- a/more_math/modelLikeCommon.py +++ b/more_math/modelLikeCommon.py @@ -1,7 +1,9 @@ -from .helper_functions import parse_expr, getIndexTensorAlongDim, as_tensor +from .helper_functions import generate_dim_variables, parse_expr, getIndexTensorAlongDim, as_tensor from .Parser.UnifiedMathVisitor import UnifiedMathVisitor import torch +from custom_nodes.more_math.more_math import helper_functions + def calculate_patches(Model, a, b=None, c=None, d=None, w=0.0, x=0.0, y=0.0, z=0.0): """Legacy calculate_patches for backward compatibility.""" return calculate_patches_autogrow(Model, V={"V0": a, "V1": b, "V2": c, "V3": d}, F={"F0": w, "F1": x, "F2": y, "F3": z}, mapping={"a": "V0", "b": "V1", "c": "V2", "d": "V3", "w": "F0", "x": "F1", "y": "F2", "z": "F3"}) @@ -100,11 +102,7 @@ def calculate_patches_autogrow(Expr, V, F, mapping=None): elif target in V: # V exists but key missing variables[alias] = torch.zeros_like(ref_tensor) - # Add dimension variables based on ref_tensor - for dim_idx in range(ref_tensor.ndim): - idx_tensor = getIndexTensorAlongDim(ref_tensor, dim_idx) - variables[f"D{dim_idx}"] = idx_tensor - variables[f"dim_{dim_idx}"] = idx_tensor + variables = variables | generate_dim_variables(ref_tensor) # Execute math