From 5680bae108620c31e574dab45f091da7006eeb84 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:53:59 +0200 Subject: [PATCH 01/13] Fix guider math with batched sigma and step tracking Co-Authored-By: Claude Opus 5.5 --- more_math/GuiderMathNode.py | 15 ++++++++++----- tests/test_guider_math.py | 10 ++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/more_math/GuiderMathNode.py b/more_math/GuiderMathNode.py index 70e9d63..26d7114 100644 --- a/more_math/GuiderMathNode.py +++ b/more_math/GuiderMathNode.py @@ -92,7 +92,6 @@ class MathGuider: self.tree1 = expression1 self.inner_model = None # Will be set during sample self.sigmas = None - self.current_step = 0 self.steps = 0 self.stck = stack @@ -142,7 +141,6 @@ class MathGuider: eval_samples, variables = self.setVars(x, sigma, seed, lazy_g_results) 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) @@ -164,6 +162,13 @@ class MathGuider: frame_count = eval_samples.shape[time_dim] if time_dim is not None else 1 + # sigma has one entry per batch item, all equal + sigma = float(sigma.flatten()[0]) if isinstance(sigma, torch.Tensor) else sigma + current_step = 0 + if self.sigmas is not None: + # Index of the step whose interval contains sigma, so extra model calls within a step (heun, dpmpp_2s, ...) keep the same index + current_step = max((i for i, s in enumerate(self.sigmas.tolist()) if s >= sigma), default=0) + def make_lazy_var(value_fn): value_fn.is_lazy_var = True return value_fn @@ -184,10 +189,10 @@ class MathGuider: "batch_count": float(eval_samples.shape[0]), "N": float(eval_samples.shape[channel_dim]) if channel_dim < ndim else 0.0, "channel_count": float(eval_samples.shape[channel_dim]) if channel_dim < ndim else 0.0, - "sigma": sigma.item() if isinstance(sigma,torch.Tensor) else sigma, + "sigma": sigma, "seed": seed if seed is not None else 0, "steps": self.steps, - "current_step": self.current_step, + "current_step": current_step, "sample": x }) if g_results is not None: @@ -226,7 +231,7 @@ class MathGuider: def sample(self, noise, latent_image, sampler, sigmas, denoise_mask=None, callback=None, disable_pbar=False, seed=None): self.sigmas = sigmas - self.steps = len(sigmas) + self.steps = len(sigmas) - 1 if sigmas.shape[-1] == 0: return latent_image active_guiders = [g for g in self.V.values() if g is not None] diff --git a/tests/test_guider_math.py b/tests/test_guider_math.py index a00b099..56892ad 100644 --- a/tests/test_guider_math.py +++ b/tests/test_guider_math.py @@ -102,6 +102,16 @@ class TestMathGuider(unittest.TestCase): # At step 2 with 2 steps: 2 / 2 = 1.0 self.assertTrue(torch.allclose(res2, torch.tensor(1.0))) + def test_math_guider_batched_sigma_and_substeps(self): + # Samplers pass sigma with one entry per batch item; heun-like samplers also call the model between sigmas + math_guider = MathGuider({"V0": MockGuider(1.0)}, {}, "current_step + sigma * 0", "V0", {}) + math_guider.sigmas = torch.tensor([10.0, 5.0, 0.0]) + math_guider.steps = 2 + x = torch.zeros((2, 1, 1, 1)) + self.assertTrue(torch.allclose(math_guider(x, torch.tensor([5.0, 5.0])), torch.tensor(1.0))) + self.assertTrue(torch.allclose(math_guider(x, torch.tensor([7.0, 7.0])), torch.tensor(0.0))) + self.assertTrue(torch.allclose(math_guider(x, torch.tensor([10.0, 10.0])), torch.tensor(0.0))) + def test_math_guider_crop_function(self): """Test crop function within guider context""" g0 = MockGuider(1.0) From acba2c9bddb828b19b217ecd32d3aef6c9ac15c6 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:54:00 +0200 Subject: [PATCH 02/13] Pass input noise seed through noise math Co-Authored-By: Claude Opus 5.5 --- more_math/NoiseMathNode.py | 4 ++-- more_math/deprecated/NoiseMathNode.py | 3 +-- tests/test_more_math.py | 2 ++ 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/more_math/NoiseMathNode.py b/more_math/NoiseMathNode.py index 3d7d94a..ba753fe 100644 --- a/more_math/NoiseMathNode.py +++ b/more_math/NoiseMathNode.py @@ -73,8 +73,8 @@ class NoiseExecutor: else: self.tree = expr self.stack = stack - - seed = -1 + # Samplers seed their own noise (ancestral/SDE) from noise.seed, so pass the first input's seed through + self.seed = next((v.seed for v in V.values() if v is not None), 0) def generate_noise(self, input_latent: torch.Tensor) -> torch.Tensor: samples = input_latent["samples"] diff --git a/more_math/deprecated/NoiseMathNode.py b/more_math/deprecated/NoiseMathNode.py index 935ddc3..ddf674d 100644 --- a/more_math/deprecated/NoiseMathNode.py +++ b/more_math/deprecated/NoiseMathNode.py @@ -100,8 +100,7 @@ class NoiseExecutor: self.z = z self.expr = Noise self.tree = parse_expr(Noise) - - seed = -1 + self.seed = next((n.seed for n in (a, b, c, d) if n is not None), 0) def generate_noise(self, input_latent: torch.Tensor) -> torch.Tensor: samples = input_latent["samples"] diff --git a/tests/test_more_math.py b/tests/test_more_math.py index 3cbfbed..311a51c 100644 --- a/tests/test_more_math.py +++ b/tests/test_more_math.py @@ -360,6 +360,7 @@ def test_noise_math_5d(): class MockNoise: def __init__(self, tensor): self.tensor = tensor + self.seed = 0 def generate_noise(self, input_latent): return self.tensor @@ -382,6 +383,7 @@ def test_noise_math_autogrow(): class MockNoise: def __init__(self, tensor): self.tensor = tensor + self.seed = 0 def generate_noise(self, input_latent): return self.tensor From 08fbf104ea8b167757c5e88ffdf9c895dc74666b Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:54:02 +0200 Subject: [PATCH 03/13] Load RAFT through model management instead of downloading it Co-Authored-By: Claude Opus 5.5 --- README.md | 2 +- more_math/Parser/optical_flow_utils.py | 38 +++++++++++++------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index cf1e5cf..943cc4f 100644 --- a/README.md +++ b/README.md @@ -319,7 +319,7 @@ You can also get the node from comfy manager under the name of More math. ### 4) Optical Flow - `rife(img1, img2, [tiling_size, iterations, multi_scale])`: compute optical flow using a RAFT-based model. - - uses the first checkpoint in `models/optical_flow`; if there is none, torchvision's RAFT-large weights are downloaded once and saved there. + - uses the first checkpoint in `models/optical_flow`. Download https://download.pytorch.org/models/raft_large_C_T_SKHT_V2-ff5fadd5.pth (torchvision RAFT-large) and put it there. - `tiling_size` chunks the image into overlapping `tiling_size`x`tiling_size` tiles to conserve memory; defaults to `0` (auto-enables `1024`x`1024` tiling above 2MPx); a value between `0` and `1` is taken as a fraction of the resolution instead. - `iterations` defaults to `12`. - `multi_scale` (default `false`) also runs a low-resolution pass of the base image to help catch large movements. diff --git a/more_math/Parser/optical_flow_utils.py b/more_math/Parser/optical_flow_utils.py index ce14ee4..8f7075c 100644 --- a/more_math/Parser/optical_flow_utils.py +++ b/more_math/Parser/optical_flow_utils.py @@ -6,25 +6,25 @@ from torchvision.utils import flow_to_image as torchvision_flow_to_image import numpy as np import folder_paths import comfy.utils +import comfy.model_management +import comfy.model_patcher -_raft_model = None +folder_paths.folder_names_and_paths.setdefault("optical_flow", ([os.path.join(folder_paths.models_dir, "optical_flow")], folder_paths.supported_pt_extensions)) -def get_raft_model(device): - global _raft_model - if _raft_model is None: +# Small (~20MB) and offloaded by model management like any other model, so it is loaded once per process +_raft_patcher = None + +def get_raft_model(): + global _raft_patcher + if _raft_patcher is None: names = folder_paths.get_filename_list("optical_flow") - if names: - model = raft_large(weights=None, progress=False) - model.load_state_dict(comfy.utils.load_torch_file(folder_paths.get_full_path_or_raise("optical_flow", names[0]), safe_load=True)) - else: - # No local checkpoint: download torchvision's RAFT weights once and keep a copy in models/optical_flow - weights = Raft_Large_Weights.DEFAULT - model = raft_large(weights=weights, progress=True) - save_dir = folder_paths.get_folder_paths("optical_flow")[0] - os.makedirs(save_dir, exist_ok=True) - torch.save(model.state_dict(), os.path.join(save_dir, os.path.basename(weights.url))) - _raft_model = model.to(device).eval() - return _raft_model + if not names: + raise FileNotFoundError(f"Optical flow needs the RAFT model, which is not downloaded automatically. Download {Raft_Large_Weights.DEFAULT.url} (~20 MB) and save it to {folder_paths.get_folder_paths('optical_flow')[0]}") + model = raft_large(weights=None, progress=False) + model.load_state_dict(comfy.utils.load_torch_file(folder_paths.get_full_path_or_raise("optical_flow", names[0]), safe_load=True)) + _raft_patcher = comfy.model_patcher.ModelPatcher(model.eval(), load_device=comfy.model_management.get_torch_device(), offload_device=comfy.model_management.unet_offload_device()) + comfy.model_management.load_model_gpu(_raft_patcher) + return _raft_patcher.model def warp(x, flow, padding_mode='reflection'): """ @@ -90,8 +90,8 @@ def get_optical_flow(img1, img2, tiling_size=0, iterations=12, multi_scale=False img1, img2: [H, W, C] or [B, H, W, C] Returns: [B, H, W, 2] flow vectors """ - device = img1.device - model = get_raft_model(device) + model = get_raft_model() + device = comfy.model_management.get_torch_device() img1_proc = preprocess_image(img1, device) img2_proc = preprocess_image(img2, device) @@ -176,7 +176,7 @@ def get_optical_flow(img1, img2, tiling_size=0, iterations=12, multi_scale=False flow[:, 1] *= float(h) / h_new # [B, 2, H, W] -> [B, H, W, 2] - return flow.movedim(1, -1) + return flow.movedim(1, -1).to(img1.device) def calculate_occlusion_mask(flow): """ From 977ce75c896eb0336053cab540e9c3b6706304fe Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:54:46 +0200 Subject: [PATCH 04/13] Restrict text_image font paths to font and input folders Co-Authored-By: Claude Opus 5.5 --- more_math/Parser/MathExpr.g4 | 2 +- more_math/Parser/UnifiedMathVisitor.py | 23 ++++++++++++++++++----- more_math/Parser/inbuilt_symbols.py | 2 +- tests/test_unified_visitor_regressions.py | 16 ++++++++++------ web/inbuilt_symbols.js | 2 +- 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/more_math/Parser/MathExpr.g4 b/more_math/Parser/MathExpr.g4 index 44288a5..c7cd612 100644 --- a/more_math/Parser/MathExpr.g4 +++ b/more_math/Parser/MathExpr.g4 @@ -1383,7 +1383,7 @@ func3: /** text_image(text, font, size, [max_width], [weight], [rotation_angle], [line_spacing], [italic], [underline]) - renders text to a 2D tensor with values 0-1 - text: text to render; line breaks start new lines - - font: font name to look up in the system fonts, or a path to a font file + - font: font name to look up in the system fonts, or a path to a font file in a system font folder or the ComfyUI input folder - size: font size in pixels - max_width: wrap lines wider than this many pixels (default: 0, no wrapping) - weight: font weight 100-900 as in CSS (default: 400) diff --git a/more_math/Parser/UnifiedMathVisitor.py b/more_math/Parser/UnifiedMathVisitor.py index f014efe..344db8c 100644 --- a/more_math/Parser/UnifiedMathVisitor.py +++ b/more_math/Parser/UnifiedMathVisitor.py @@ -10,6 +10,7 @@ import math import inspect import weakref import torch.nn.functional as F +import folder_paths from comfy.nested_tensor import NestedTensor from comfy.model_management import throw_exception_if_processing_interrupted from comfy.k_diffusion import sampling as k_sampling @@ -190,9 +191,7 @@ def _font_axis_name(axis): return str(name).lower() -@functools.lru_cache(maxsize=1) -def _system_fonts(): - """Index of installed fonts, scanned once per process (fonts installed later need a restart).""" +def _font_dirs(): if sys.platform == "win32": search_dirs = [os.path.join(os.environ.get("WINDIR", "C:\\Windows"), "Fonts"), os.path.expandvars(r"%LOCALAPPDATA%\Microsoft\Windows\Fonts")] elif sys.platform == "darwin": @@ -205,9 +204,23 @@ def _system_fonts(): os.path.expanduser("~/.local/share/fonts"), os.path.expanduser("~/.fonts"), ] + return list(dict.fromkeys(search_dirs)) + +def _is_allowed_font_file(path): + """Font files given by path must be in a system font folder or in ComfyUI's input folder.""" + if not os.path.isfile(path): + return False + path = os.path.normcase(os.path.realpath(path)) + roots = _font_dirs() + [folder_paths.get_input_directory()] + return any(path.startswith(os.path.normcase(os.path.realpath(root)) + os.sep) for root in roots) + + +@functools.lru_cache(maxsize=1) +def _system_fonts(): + """Index of installed fonts, scanned once per process (fonts installed later need a restart).""" fonts = [] - for directory in dict.fromkeys(search_dirs): + for directory in _font_dirs(): for root, _, files in os.walk(directory): for fname in files: if not fname.lower().endswith((".ttf", ".otf", ".ttc", ".otc")): @@ -3536,7 +3549,7 @@ class UnifiedMathVisitor(MathExprVisitor): tier = _FONT_WEIGHT_TIERS[bisect.bisect_left((150, 250, 350, 450, 550, 650, 750, 850), weight_val)] synthetic_italic = synthetic_bold = False variation_weight, variation_italic = weight_val, is_italic - if os.path.isfile(font_name): + if _is_allowed_font_file(font_name): font_path = font_name else: font_path = _find_font(font_name, tier, weight_val, is_italic) diff --git a/more_math/Parser/inbuilt_symbols.py b/more_math/Parser/inbuilt_symbols.py index 8bec85f..71d1e3e 100644 --- a/more_math/Parser/inbuilt_symbols.py +++ b/more_math/Parser/inbuilt_symbols.py @@ -264,7 +264,7 @@ INBUILT_FUNCTION_META = { 'interpolate_area': {'min_args': 2, 'max_args': 2, 'signature': 'interpolate_area(x, scale)', 'forms': [['x', 'scale']], 'description': 'resizes x [N, C, ...] with area interpolation. A number scales every spatial dimension; a list is the target spatial size', 'details': '', 'params': {'x': 'tensor shaped [N, C, ...] with 1-3 spatial dimensions', 'scale': 'a number scales every spatial dimension; a list gives the target spatial size'}, 'aliases': []}, 'interpolate_nearest': {'min_args': 2, 'max_args': 2, 'signature': 'interpolate_nearest(x, scale)', 'forms': [['x', 'scale']], 'description': 'resizes x [N, C, ...] with nearest-neighbour interpolation. A number scales every spatial dimension; a list is the target spatial size', 'details': '', 'params': {'x': 'tensor shaped [N, C, ...] with 1-3 spatial dimensions', 'scale': 'a number scales every spatial dimension; a list gives the target spatial size'}, 'aliases': ['interpolate_nearest_exact']}, 'interpolate_nearest_exact': {'min_args': 2, 'max_args': 2, 'signature': 'interpolate_nearest_exact(x, scale)', 'forms': [['x', 'scale']], 'description': 'resizes x [N, C, ...] with nearest-neighbour interpolation. A number scales every spatial dimension; a list is the target spatial size', 'details': '', 'params': {'x': 'tensor shaped [N, C, ...] with 1-3 spatial dimensions', 'scale': 'a number scales every spatial dimension; a list gives the target spatial size'}, 'aliases': ['interpolate_nearest']}, - 'text_image': {'min_args': 3, 'max_args': 9, 'signature': 'text_image(text, font, size, [max_width], [weight], [rotation_angle], [line_spacing], [italic], [underline])', 'forms': [['text', 'font', 'size', '[max_width]', '[weight]', '[rotation_angle]', '[line_spacing]', '[italic]', '[underline]']], 'description': 'renders text to a 2D tensor with values 0-1', 'details': '', 'params': {'text': 'text to render; line breaks start new lines', 'font': 'font name to look up in the system fonts, or a path to a font file', 'size': 'font size in pixels', 'max_width': 'wrap lines wider than this many pixels (default: 0, no wrapping)', 'weight': 'font weight 100-900 as in CSS (default: 400)', 'rotation_angle': 'rotation in degrees, counter-clockwise (default: 0)', 'line_spacing': 'line distance as a multiple of the line height (default: 1)', 'italic': 'truthy for italic text (default: false)', 'underline': 'truthy to underline the text (default: false)'}, 'aliases': []}, + 'text_image': {'min_args': 3, 'max_args': 9, 'signature': 'text_image(text, font, size, [max_width], [weight], [rotation_angle], [line_spacing], [italic], [underline])', 'forms': [['text', 'font', 'size', '[max_width]', '[weight]', '[rotation_angle]', '[line_spacing]', '[italic]', '[underline]']], 'description': 'renders text to a 2D tensor with values 0-1', 'details': '', 'params': {'text': 'text to render; line breaks start new lines', 'font': 'font name to look up in the system fonts, or a path to a font file in a system font folder or the ComfyUI input folder', 'size': 'font size in pixels', 'max_width': 'wrap lines wider than this many pixels (default: 0, no wrapping)', 'weight': 'font weight 100-900 as in CSS (default: 400)', 'rotation_angle': 'rotation in degrees, counter-clockwise (default: 0)', 'line_spacing': 'line distance as a multiple of the line height (default: 1)', 'italic': 'truthy for italic text (default: false)', 'underline': 'truthy to underline the text (default: false)'}, 'aliases': []}, 'as_nested_tensor': {'min_args': 1, 'max_args': 1, 'signature': 'as_nested_tensor(values)', 'forms': [['values']], 'description': 'converts a list to a nested tensor (special object containing tensors of different shapes behaving like a tensor)', 'details': '', 'params': {'values': 'list of tensors; their shapes may differ'}, 'aliases': ['as_nested']}, 'as_nested': {'min_args': 1, 'max_args': 1, 'signature': 'as_nested(values)', 'forms': [['values']], 'description': 'converts a list to a nested tensor (special object containing tensors of different shapes behaving like a tensor)', 'details': '', 'params': {'values': 'list of tensors; their shapes may differ'}, 'aliases': ['as_nested_tensor']}, 'svd': {'min_args': 1, 'max_args': 2, 'signature': 'svd(x, [full_matrices])', 'forms': [['x', '[full_matrices]']], 'description': 'computes the singular value decomposition of x. Returns a list of 3 tensors U, S, Vh such that x = matmul(matmul(U, diagonal_matrix(S, shape(U))), Vh)', 'details': '', 'params': {'x': 'matrix, or a batch of matrices in the last two dimensions', 'full_matrices': 'truthy to return full-size U and Vh (default: false)'}, 'aliases': ['singular_value_decomposition']}, diff --git a/tests/test_unified_visitor_regressions.py b/tests/test_unified_visitor_regressions.py index c9a9832..0e9bc97 100644 --- a/tests/test_unified_visitor_regressions.py +++ b/tests/test_unified_visitor_regressions.py @@ -80,17 +80,12 @@ def test_lambda_calls_require_exact_argument_count(call): def test_text_image_size_expression_is_evaluated_once(monkeypatch): visitor_module = importlib.import_module("more_math.Parser.UnifiedMathVisitor") default_font = ImageFont.load_default() - original_isfile = os.path.isfile monkeypatch.setattr( visitor_module.ImageFont, "truetype", lambda *args, **kwargs: default_font, ) - monkeypatch.setattr( - visitor_module.os.path, - "isfile", - lambda path: path == "mock-font" or original_isfile(path), - ) + monkeypatch.setattr(visitor_module, "_is_allowed_font_file", lambda path: path == "mock-font") values = MathDict() _visit( @@ -101,6 +96,15 @@ def test_text_image_size_expression_is_evaluated_once(monkeypatch): assert len(values) == 1 +def test_text_image_rejects_font_path_outside_font_folders(monkeypatch): + visitor_module = importlib.import_module("more_math.Parser.UnifiedMathVisitor") + monkeypatch.setattr(visitor_module, "_find_font", lambda *args: None) + path = os.path.abspath(__file__).replace("\\", "/") + + with pytest.raises(FileNotFoundError): + _visit(f'text_image("x", "{path}", 12)', {}) + + def test_stack_list_of_tensors_with_negative_dimension(): first = torch.tensor([1.0, 2.0]) second = torch.tensor([3.0, 4.0]) diff --git a/web/inbuilt_symbols.js b/web/inbuilt_symbols.js index ed031ea..5d354e8 100644 --- a/web/inbuilt_symbols.js +++ b/web/inbuilt_symbols.js @@ -267,7 +267,7 @@ export const FUNCTION_META = { "interpolate_area": { minArgs: 2, maxArgs: 2, signature: "interpolate_area(x, scale)", forms: [["x", "scale"]], description: "resizes x [N, C, ...] with area interpolation. A number scales every spatial dimension; a list is the target spatial size", details: "", params: {"x": "tensor shaped [N, C, ...] with 1-3 spatial dimensions", "scale": "a number scales every spatial dimension; a list gives the target spatial size"}, aliases: [] }, "interpolate_nearest": { minArgs: 2, maxArgs: 2, signature: "interpolate_nearest(x, scale)", forms: [["x", "scale"]], description: "resizes x [N, C, ...] with nearest-neighbour interpolation. A number scales every spatial dimension; a list is the target spatial size", details: "", params: {"x": "tensor shaped [N, C, ...] with 1-3 spatial dimensions", "scale": "a number scales every spatial dimension; a list gives the target spatial size"}, aliases: ["interpolate_nearest_exact"] }, "interpolate_nearest_exact": { minArgs: 2, maxArgs: 2, signature: "interpolate_nearest_exact(x, scale)", forms: [["x", "scale"]], description: "resizes x [N, C, ...] with nearest-neighbour interpolation. A number scales every spatial dimension; a list is the target spatial size", details: "", params: {"x": "tensor shaped [N, C, ...] with 1-3 spatial dimensions", "scale": "a number scales every spatial dimension; a list gives the target spatial size"}, aliases: ["interpolate_nearest"] }, - "text_image": { minArgs: 3, maxArgs: 9, signature: "text_image(text, font, size, [max_width], [weight], [rotation_angle], [line_spacing], [italic], [underline])", forms: [["text", "font", "size", "[max_width]", "[weight]", "[rotation_angle]", "[line_spacing]", "[italic]", "[underline]"]], description: "renders text to a 2D tensor with values 0-1", details: "", params: {"text": "text to render; line breaks start new lines", "font": "font name to look up in the system fonts, or a path to a font file", "size": "font size in pixels", "max_width": "wrap lines wider than this many pixels (default: 0, no wrapping)", "weight": "font weight 100-900 as in CSS (default: 400)", "rotation_angle": "rotation in degrees, counter-clockwise (default: 0)", "line_spacing": "line distance as a multiple of the line height (default: 1)", "italic": "truthy for italic text (default: false)", "underline": "truthy to underline the text (default: false)"}, aliases: [] }, + "text_image": { minArgs: 3, maxArgs: 9, signature: "text_image(text, font, size, [max_width], [weight], [rotation_angle], [line_spacing], [italic], [underline])", forms: [["text", "font", "size", "[max_width]", "[weight]", "[rotation_angle]", "[line_spacing]", "[italic]", "[underline]"]], description: "renders text to a 2D tensor with values 0-1", details: "", params: {"text": "text to render; line breaks start new lines", "font": "font name to look up in the system fonts, or a path to a font file in a system font folder or the ComfyUI input folder", "size": "font size in pixels", "max_width": "wrap lines wider than this many pixels (default: 0, no wrapping)", "weight": "font weight 100-900 as in CSS (default: 400)", "rotation_angle": "rotation in degrees, counter-clockwise (default: 0)", "line_spacing": "line distance as a multiple of the line height (default: 1)", "italic": "truthy for italic text (default: false)", "underline": "truthy to underline the text (default: false)"}, aliases: [] }, "as_nested_tensor": { minArgs: 1, maxArgs: 1, signature: "as_nested_tensor(values)", forms: [["values"]], description: "converts a list to a nested tensor (special object containing tensors of different shapes behaving like a tensor)", details: "", params: {"values": "list of tensors; their shapes may differ"}, aliases: ["as_nested"] }, "as_nested": { minArgs: 1, maxArgs: 1, signature: "as_nested(values)", forms: [["values"]], description: "converts a list to a nested tensor (special object containing tensors of different shapes behaving like a tensor)", details: "", params: {"values": "list of tensors; their shapes may differ"}, aliases: ["as_nested_tensor"] }, "svd": { minArgs: 1, maxArgs: 2, signature: "svd(x, [full_matrices])", forms: [["x", "[full_matrices]"]], description: "computes the singular value decomposition of x. Returns a list of 3 tensors U, S, Vh such that x = matmul(matmul(U, diagonal_matrix(S, shape(U))), Vh)", details: "", params: {"x": "matrix, or a batch of matrices in the last two dimensions", "full_matrices": "truthy to return full-size U and Vh (default: false)"}, aliases: ["singular_value_decomposition"] }, From 70dee22a895ef4981d71d82645cdd64bb61ccdc9 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:55:00 +0200 Subject: [PATCH 05/13] Cache parsed expressions check_lazy_status and execute parsed the same expression twice per run. Co-Authored-By: Claude Opus 5.5 --- more_math/ScriptTextWindow.py | 2 +- more_math/helper_functions.py | 6 +++++- tests/test_dead_code.py | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/more_math/ScriptTextWindow.py b/more_math/ScriptTextWindow.py index 5be2781..9d52f06 100644 --- a/more_math/ScriptTextWindow.py +++ b/more_math/ScriptTextWindow.py @@ -22,4 +22,4 @@ class ScriptTextInput(io.ComfyNode): @classmethod def execute(cls, script): - return (remove_dead_code(parse_expr(script)),) + return (remove_dead_code(parse_expr.__wrapped__(script)),) diff --git a/more_math/helper_functions.py b/more_math/helper_functions.py index 621f3bc..aa1a96a 100644 --- a/more_math/helper_functions.py +++ b/more_math/helper_functions.py @@ -1,3 +1,5 @@ +import functools + from antlr4.error.ErrorListener import ErrorListener from antlr4 import InputStream, CommonTokenStream from antlr4.atn.PredictionMode import PredictionMode @@ -66,8 +68,10 @@ def as_tensor(value, shape): return torch.cat(value) +# check_lazy_status and execute both parse the same expression; trees are only read, so they can be shared. +@functools.lru_cache(maxsize=64) def parse_expr(expr: str): - """Parse a math expression and return the parse tree.""" + """Parse a math expression and return the parse tree. The tree is shared, use parse_expr.__wrapped__ for one you modify.""" input_stream = InputStream(expr) lexer = MathExprLexer(input_stream) stream = CommonTokenStream(lexer) diff --git a/tests/test_dead_code.py b/tests/test_dead_code.py index 6fd3d70..1080918 100644 --- a/tests/test_dead_code.py +++ b/tests/test_dead_code.py @@ -9,7 +9,7 @@ from more_math.helper_functions import parse_expr, checkLazyNew def run(script, variables=None, optimize=True, stack=None): - tree = parse_expr(script) + tree = parse_expr.__wrapped__(script) if optimize: remove_dead_code(tree) out = io.StringIO() @@ -109,5 +109,5 @@ def test_last_statement_of_a_block_stays(): def test_unused_inputs_are_no_longer_requested(): - tree = remove_dead_code(parse_expr("u = V1 * 2; V0")) + tree = remove_dead_code(parse_expr.__wrapped__("u = V1 * 2; V0")) assert checkLazyNew(tree, {"V0": None, "V1": None}, {}) == {"V0"} From 1b225753cd3f96937232bdd1071a0c1964d15e09 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:55:08 +0200 Subject: [PATCH 06/13] Remove redundant stack copies after execution The input stack is already copied when remember_stack is off, and the removed line is a no-op when it is on. Co-Authored-By: Claude Opus 5.5 --- more_math/AudioMathNode.py | 1 - more_math/ConditioningMathNode.py | 1 - more_math/ImageMathNode.py | 2 -- more_math/LatentMathNode.py | 4 ---- more_math/MaskMathNode.py | 2 -- more_math/StringMathNode.py | 2 -- tests/test_unified_visitor_regressions.py | 25 +++++++++++++++++++++++ 7 files changed, 25 insertions(+), 12 deletions(-) diff --git a/more_math/AudioMathNode.py b/more_math/AudioMathNode.py index beea704..0312840 100644 --- a/more_math/AudioMathNode.py +++ b/more_math/AudioMathNode.py @@ -167,6 +167,5 @@ class AudioMathNode(io.ComfyNode): res_list.append({"waveform": result_chunk, "sample_rate": sample_rate}) return (res_list, stack) else: - stack = stack if remember_stack else copy.deepcopy(stack) return ([{"waveform": result, "sample_rate": sample_rate}], stack) diff --git a/more_math/ConditioningMathNode.py b/more_math/ConditioningMathNode.py index 7cd2480..8f4ba3b 100644 --- a/more_math/ConditioningMathNode.py +++ b/more_math/ConditioningMathNode.py @@ -251,5 +251,4 @@ class ConditioningMathNode(io.ComfyNode): base[0] = (rtensor, new_dict) res_list = [base] - stack = stack if remember_stack else copy.deepcopy(stack) return (move_to_device(res_list, original_device),stack) diff --git a/more_math/ImageMathNode.py b/more_math/ImageMathNode.py index 3820b0f..1bd9875 100644 --- a/more_math/ImageMathNode.py +++ b/more_math/ImageMathNode.py @@ -159,8 +159,6 @@ class ImageMathNode(io.ComfyNode): res_list = [] for result_chunk in res: res_list.append(result_chunk) - stack = stack if remember_stack else copy.deepcopy(stack) return (res_list, stack) else: - stack = stack if remember_stack else copy.deepcopy(stack) return ([result], stack) diff --git a/more_math/LatentMathNode.py b/more_math/LatentMathNode.py index 8e42e70..fccc66f 100644 --- a/more_math/LatentMathNode.py +++ b/more_math/LatentMathNode.py @@ -242,7 +242,6 @@ class LatentMathNode(io.ComfyNode): if getattr(result_t, "is_nested", False): rl = result_latent.copy() rl["samples"] = result_t - stack = stack if remember_stack else copy.deepcopy(stack) return (move_to_device([rl], original_device), stack) # If the visitor produced a list/tuple, emit each element as a separate latent. @@ -252,7 +251,6 @@ class LatentMathNode(io.ComfyNode): rl = result_latent.copy() rl["samples"] = comp results.append(rl) - stack = stack if remember_stack else copy.deepcopy(stack) return (move_to_device(results, original_device), stack) if batching > 0: @@ -262,9 +260,7 @@ class LatentMathNode(io.ComfyNode): rl = result_latent.copy() rl["samples"] = result_tensor results.append(rl) - stack = stack if remember_stack else copy.deepcopy(stack) return (move_to_device(results, original_device), stack) rl = result_latent.copy() rl["samples"] = result_t - stack = stack if remember_stack else copy.deepcopy(stack) return (move_to_device([rl], original_device), stack) diff --git a/more_math/MaskMathNode.py b/more_math/MaskMathNode.py index f6414db..8f2fc38 100644 --- a/more_math/MaskMathNode.py +++ b/more_math/MaskMathNode.py @@ -140,8 +140,6 @@ class MaskMathNode(io.ComfyNode): res_list = [] for result_chunk in res: res_list.append(result_chunk) - stack = stack if remember_stack else copy.deepcopy(stack) return (res_list, stack) else: - stack = stack if remember_stack else copy.deepcopy(stack) return ([result], stack) diff --git a/more_math/StringMathNode.py b/more_math/StringMathNode.py index 9fed137..358f5d6 100644 --- a/more_math/StringMathNode.py +++ b/more_math/StringMathNode.py @@ -105,9 +105,7 @@ class StringMathNode(io.ComfyNode): for start in range(0, len(s), n): yield s[start:start+n] - stack = stack if remember_stack else copy.deepcopy(stack) return (chunks(result,batching), stack) else: - stack = stack if remember_stack else copy.deepcopy(stack) return ([result], stack) diff --git a/tests/test_unified_visitor_regressions.py b/tests/test_unified_visitor_regressions.py index 0e9bc97..97bfafd 100644 --- a/tests/test_unified_visitor_regressions.py +++ b/tests/test_unified_visitor_regressions.py @@ -9,6 +9,9 @@ from PIL import ImageFont from more_math.Parser.UnifiedMathVisitor import ChangeTrackingDict, MathDict, UnifiedMathVisitor from more_math.helper_functions import checkLazyNew, parse_expr from more_math.FloatMathNode import FloatMathNode +from more_math.ImageMathNode import ImageMathNode +from more_math.LatentMathNode import LatentMathNode +from more_math.MaskMathNode import MaskMathNode def _visit(expression, variables): @@ -284,6 +287,28 @@ def test_unconnected_stack_is_not_shared_between_runs(): assert stack == {0: [1.0]} +@pytest.mark.parametrize("node, value, extra", [ + (ImageMathNode, torch.zeros(2, 4, 4, 3), {"use_compute_device": False}), + (MaskMathNode, torch.zeros(2, 4, 4), {}), + (LatentMathNode, {"samples": torch.zeros(2, 4, 4, 4)}, {"use_compute_device": False}), +]) +@pytest.mark.parametrize("batching", [0, 1]) +def test_stack_across_list_runs(node, value, extra, batching): + # ComfyUI runs the node once per list item and passes the same stack object every time + def run(stack, remember): + return node.execute(V={"V0": value}, F={}, Expression="stack_push(0, 1); V0", batching=batching, remember_stack=remember, stack=stack, **extra)[-1] + + shared = {} + run(shared, True) + assert run(shared, True) == {0: [1.0, 1.0]} + + fresh = {} + first, second = run(fresh, False), run(fresh, False) + assert fresh == {} + assert first == second == {0: [1.0]} + assert first is not second + + def test_top_level_return_stops_script(): assert _visit("x = 1; return 5; x = 2; x", {}) == 5 From 2a11597a6734825405144d9a19714560363ee6a9 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:55:15 +0200 Subject: [PATCH 07/13] Remove unused length_mismatch argument of get_v_variable Co-Authored-By: Claude Opus 5.5 --- more_math/AudioMathNode.py | 2 +- more_math/ConditioningMathNode.py | 4 ++-- more_math/ImageMathNode.py | 2 +- more_math/LatentMathNode.py | 2 +- more_math/MaskMathNode.py | 2 +- more_math/StringMathNode.py | 2 +- more_math/VideoMathNode.py | 8 ++++---- more_math/helper_functions.py | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/more_math/AudioMathNode.py b/more_math/AudioMathNode.py index 0312840..6229c19 100644 --- a/more_math/AudioMathNode.py +++ b/more_math/AudioMathNode.py @@ -135,7 +135,7 @@ class AudioMathNode(io.ComfyNode): "batch_count": float(a_w.shape[0]), } | generate_dim_variables(a_w) | V_norm_waveforms | sample_rates - v_stacked, v_cnt = get_v_variable(V_norm_waveforms, length_mismatch=length_mismatch) + v_stacked, v_cnt = get_v_variable(V_norm_waveforms) if v_stacked is not None: variables["V"] = v_stacked variables["Vcnt"] = float(v_cnt) diff --git a/more_math/ConditioningMathNode.py b/more_math/ConditioningMathNode.py index 8f4ba3b..20b4c3a 100644 --- a/more_math/ConditioningMathNode.py +++ b/more_math/ConditioningMathNode.py @@ -147,7 +147,7 @@ class ConditioningMathNode(io.ComfyNode): "batch_count": a.shape[0], } | generate_dim_variables(a) | V_norm_tensors - v_stacked, v_cnt = get_v_variable(V_norm_tensors, length_mismatch=length_mismatch) + v_stacked, v_cnt = get_v_variable(V_norm_tensors) if v_stacked is not None: variables["V"] = v_stacked variables["Vcnt"] = float(v_cnt) @@ -193,7 +193,7 @@ class ConditioningMathNode(io.ComfyNode): "batch_count": a_p.shape[0] if a_p.numel() > 0 else 0, } | generate_dim_variables(a_p) | V_norm_pooled - v_stacked, v_cnt = get_v_variable(V_norm_pooled, length_mismatch=length_mismatch) + v_stacked, v_cnt = get_v_variable(V_norm_pooled) if v_stacked is not None: variables_pi["V"] = v_stacked variables_pi["Vcnt"] = float(v_cnt) diff --git a/more_math/ImageMathNode.py b/more_math/ImageMathNode.py index 1bd9875..2ab1fb4 100644 --- a/more_math/ImageMathNode.py +++ b/more_math/ImageMathNode.py @@ -129,7 +129,7 @@ class ImageMathNode(io.ComfyNode): # Add all dynamic inputs variables.update(V_norm) - v_stacked, v_cnt = get_v_variable(V_norm, length_mismatch=length_mismatch) + v_stacked, v_cnt = get_v_variable(V_norm) if v_stacked is not None: variables["V"] = v_stacked variables["Vcnt"] = float(v_cnt) diff --git a/more_math/LatentMathNode.py b/more_math/LatentMathNode.py index fccc66f..a6a4c18 100644 --- a/more_math/LatentMathNode.py +++ b/more_math/LatentMathNode.py @@ -215,7 +215,7 @@ class LatentMathNode(io.ComfyNode): # Add all dynamic inputs variables.update(V_norm_samples) - v_stacked, v_cnt = get_v_variable(V_norm_samples, length_mismatch=length_mismatch) + v_stacked, v_cnt = get_v_variable(V_norm_samples) if v_stacked is not None: variables["V"] = v_stacked variables["Vcnt"] = float(v_cnt) diff --git a/more_math/MaskMathNode.py b/more_math/MaskMathNode.py index 8f2fc38..1696d3d 100644 --- a/more_math/MaskMathNode.py +++ b/more_math/MaskMathNode.py @@ -108,7 +108,7 @@ class MaskMathNode(io.ComfyNode): "batch_count": float(ae.shape[0]), } | generate_dim_variables(ae) - v_stacked, v_cnt = get_v_variable(V_norm, length_mismatch=length_mismatch) + v_stacked, v_cnt = get_v_variable(V_norm) if v_stacked is not None: variables["V"] = v_stacked variables["Vcnt"] = float(v_cnt) diff --git a/more_math/StringMathNode.py b/more_math/StringMathNode.py index 358f5d6..6287c20 100644 --- a/more_math/StringMathNode.py +++ b/more_math/StringMathNode.py @@ -69,7 +69,7 @@ class StringMathNode(io.ComfyNode): "z": F.get("F3", 0.0) if F.get("F3") is not None else 0.0 } - v_stacked, v_cnt = get_v_variable(V, length_mismatch="do nothing") + v_stacked, v_cnt = get_v_variable(V) if v_stacked is not None: variables["V"] = v_stacked variables["Vcnt"] = float(v_cnt) diff --git a/more_math/VideoMathNode.py b/more_math/VideoMathNode.py index f912841..697af42 100644 --- a/more_math/VideoMathNode.py +++ b/more_math/VideoMathNode.py @@ -169,10 +169,10 @@ class VideoMathNode(io.ComfyNode): variables[v_name].is_lazy_var = True def lazy_v_stack(): - return get_v_variable(V_norm, length_mismatch=length_mismatch)[0] + return get_v_variable(V_norm)[0] lazy_v_stack.is_lazy_var = True def lazy_v_count(): - return float(get_v_variable(V_norm, length_mismatch=length_mismatch)[1]) + return float(get_v_variable(V_norm)[1]) lazy_v_count.is_lazy_var = True variables["V"] = lazy_v_stack variables["Vcnt"] = lazy_v_count @@ -251,10 +251,10 @@ class VideoMathNode(io.ComfyNode): variables[v_name].is_lazy_var = True def lazy_v_stack(): - return get_v_variable(V_norm_waveforms, length_mismatch=length_mismatch)[0] + return get_v_variable(V_norm_waveforms)[0] lazy_v_stack.is_lazy_var = True def lazy_v_count(): - return float(get_v_variable(V_norm_waveforms, length_mismatch=length_mismatch)[1]) + return float(get_v_variable(V_norm_waveforms)[1]) lazy_v_count.is_lazy_var = True variables["V"] = lazy_v_stack variables["Vcnt"] = lazy_v_count diff --git a/more_math/helper_functions.py b/more_math/helper_functions.py index aa1a96a..c90e19b 100644 --- a/more_math/helper_functions.py +++ b/more_math/helper_functions.py @@ -303,7 +303,7 @@ def normalize_to_common_shape(*tensors, mode="pad"): result.append(t.contiguous()) return tuple(result) -def get_v_variable(v_norm_dict, length_mismatch="error"): +def get_v_variable(v_norm_dict): """ Collects V0, V1, ... from the dict (ignoring NestedTensor component keys like V0_0, V1_1), and returns them as a list and count. From 17716324e005c45935f5159c14b634b6962a13db Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:55:16 +0200 Subject: [PATCH 08/13] Make float8 dtype set a module constant Co-Authored-By: Claude Opus 5.5 --- more_math/Parser/UnifiedMathVisitor.py | 65 +++++++++++++------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/more_math/Parser/UnifiedMathVisitor.py b/more_math/Parser/UnifiedMathVisitor.py index 344db8c..8c374bc 100644 --- a/more_math/Parser/UnifiedMathVisitor.py +++ b/more_math/Parser/UnifiedMathVisitor.py @@ -157,6 +157,17 @@ _BLEND_MODES = { } +_FLOAT8_DTYPES = { + dtype for dtype in ( + getattr(torch, "float8_e4m3fn", None), + getattr(torch, "float8_e4m3fnuz", None), + getattr(torch, "float8_e5m2", None), + getattr(torch, "float8_e5m2fnuz", None), + ) + if dtype is not None +} + + def _rec709_luma(r, g, b): return 0.2126 * r + 0.7152 * g + 0.0722 * b @@ -432,20 +443,8 @@ class UnifiedMathVisitor(MathExprVisitor): return torch.full(t,val,device=self.device) return torch.tensor(val, device=self.device) - @staticmethod - def _float8_dtypes(): - return { - dtype for dtype in ( - getattr(torch, "float8_e4m3fn", None), - getattr(torch, "float8_e4m3fnuz", None), - getattr(torch, "float8_e5m2", None), - getattr(torch, "float8_e5m2fnuz", None), - ) - if dtype is not None - } - def _apply_binary_operation(self, a, b, torch_op, scalar_op): - float8_dtypes = self._float8_dtypes() + float8_dtypes = _FLOAT8_DTYPES original_dtype = None if self._is_plain_tensor(a) and a.dtype in float8_dtypes: original_dtype = a.dtype @@ -462,7 +461,7 @@ class UnifiedMathVisitor(MathExprVisitor): def _apply_unary_operation(self, value, torch_op, scalar_op): original_dtype = None - if self._is_plain_tensor(value) and value.dtype in self._float8_dtypes(): + if self._is_plain_tensor(value) and value.dtype in _FLOAT8_DTYPES: original_dtype = value.dtype value = value.to(torch.float16) @@ -1355,10 +1354,10 @@ class UnifiedMathVisitor(MathExprVisitor): dims = self._normalize_dims((yield ctx.expr(2)), val.ndim, ctx, "norm dimension") dim = tuple(dims) original_dtype = val.dtype - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: val = val.to(torch.float32) result = torch.linalg.vector_norm(val, ord=p, dim=dim) - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: result = result.to(original_dtype) return result.item() if result.numel() == 1 else result @@ -1372,13 +1371,13 @@ class UnifiedMathVisitor(MathExprVisitor): if eps < 0: raise ValueError(f"{ctx.start.line}:{ctx.start.column}: normalize eps must be non-negative") original_dtype = val.dtype - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: val = val.to(torch.float32) if val.ndim == 0: result = val / torch.linalg.vector_norm(val, ord=p).clamp_min(eps) else: result = F.normalize(val, p=p, dim=dim, eps=eps) - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: result = result.to(original_dtype) return result.tolist() if return_list else result @@ -1393,7 +1392,7 @@ class UnifiedMathVisitor(MathExprVisitor): raise ValueError(f"{ctx.start.line}:{ctx.start.column}: group_norm groups must be positive and divide the channel count {channels}") original_dtype = val.dtype - float8_dtypes = self._float8_dtypes() + float8_dtypes = _FLOAT8_DTYPES if original_dtype in float8_dtypes: val = val.to(torch.float32) @@ -1865,7 +1864,7 @@ class UnifiedMathVisitor(MathExprVisitor): raise ValueError(f"{ctx.start.line}:{ctx.start.column}: slerp expects one vector dimension") dim = dims[0] - float8_dtypes = self._float8_dtypes() + float8_dtypes = _FLOAT8_DTYPES input_dtypes = (a.dtype, b.dtype) output_dtype = next((dtype for dtype in input_dtypes if dtype in float8_dtypes), None) if output_dtype is None: @@ -2326,7 +2325,7 @@ class UnifiedMathVisitor(MathExprVisitor): def visitRfftFunc(self, ctx): val = self._promote_to_tensor((yield ctx.expr(0))) dim = self._to_int((yield ctx.expr(1)), ctx, "rfft dimension", strict=True) if len(ctx.expr()) > 1 else -1 - if val.dtype in self._float8_dtypes() or not (val.is_floating_point() or val.is_complex()): + if val.dtype in _FLOAT8_DTYPES or not (val.is_floating_point() or val.is_complex()): val = val.to(torch.float32) return torch.fft.rfft(val, dim=dim) @@ -2334,7 +2333,7 @@ class UnifiedMathVisitor(MathExprVisitor): val = self._promote_to_tensor((yield ctx.expr(0))) n = self._to_int((yield ctx.expr(1)), ctx, "irfft length", strict=True) if len(ctx.expr()) > 1 else None dim = self._to_int((yield ctx.expr(2)), ctx, "irfft dimension", strict=True) if len(ctx.expr()) > 2 else -1 - if val.dtype in self._float8_dtypes(): + if val.dtype in _FLOAT8_DTYPES: val = val.to(torch.complex64) return torch.fft.irfft(val, n=n, dim=dim) @@ -2433,10 +2432,10 @@ class UnifiedMathVisitor(MathExprVisitor): elif val.ndim > 0: dims = tuple(range(val.ndim)) original_dtype = val.dtype - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: val = val.to(torch.float32) result = val if dims is None else torch.logsumexp(val, dim=dims) - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: result = result.to(original_dtype) return result.item() if result.numel() == 1 else result @@ -2685,7 +2684,7 @@ class UnifiedMathVisitor(MathExprVisitor): def visitOuterFunc(self, ctx): a = self._promote_to_tensor((yield ctx.expr(0))).flatten() b = self._promote_to_tensor((yield ctx.expr(1))).flatten() - float8_dtypes = self._float8_dtypes() + float8_dtypes = _FLOAT8_DTYPES output_dtype = a.dtype if a.dtype in float8_dtypes else b.dtype if b.dtype in float8_dtypes else None if output_dtype is not None: a = a.to(torch.float32) @@ -2698,20 +2697,20 @@ class UnifiedMathVisitor(MathExprVisitor): if val.ndim < 2 or val.shape[-1] != val.shape[-2]: raise ValueError(f"{ctx.start.line}:{ctx.start.column}: trace expects square matrices") original_dtype = val.dtype - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: val = val.to(torch.float32) result = torch.diagonal(val, dim1=-2, dim2=-1).sum(dim=-1) - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: result = result.to(original_dtype) return result.item() if result.numel() == 1 else result def visitDetFunc(self, ctx): val = self._promote_to_tensor((yield ctx.expr())) original_dtype = val.dtype - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: val = val.to(torch.float32) result = torch.linalg.det(val) - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: result = result.to(original_dtype) return result.item() if result.numel() == 1 else result @@ -2723,10 +2722,10 @@ class UnifiedMathVisitor(MathExprVisitor): if not pseudo and val.shape[-1] != val.shape[-2]: raise ValueError(f"{ctx.start.line}:{ctx.start.column}: inv without pseudo requires square matrices") original_dtype = val.dtype - if original_dtype in self._float8_dtypes(): + if original_dtype in _FLOAT8_DTYPES: val = val.to(torch.float32) result = torch.linalg.pinv(val) if pseudo else torch.linalg.inv(val) - return result.to(original_dtype) if original_dtype in self._float8_dtypes() else result + return result.to(original_dtype) if original_dtype in _FLOAT8_DTYPES else result def visitSolveFunc(self, ctx): a = self._promote_to_tensor((yield ctx.expr(0))) @@ -2734,7 +2733,7 @@ class UnifiedMathVisitor(MathExprVisitor): if a.ndim < 2 or a.shape[-1] != a.shape[-2]: raise ValueError(f"{ctx.start.line}:{ctx.start.column}: solve expects square coefficient matrices") - float8_dtypes = self._float8_dtypes() + float8_dtypes = _FLOAT8_DTYPES output_dtype = a.dtype if a.dtype in float8_dtypes else b.dtype if b.dtype in float8_dtypes else None if a.dtype in float8_dtypes or not (a.is_floating_point() or a.is_complex()): a = a.to(torch.float32) @@ -2749,7 +2748,7 @@ class UnifiedMathVisitor(MathExprVisitor): if val.ndim < 2: raise ValueError(f"{ctx.start.line}:{ctx.start.column}: matrix_rank expects matrices") original_dtype = val.dtype - if original_dtype in self._float8_dtypes() or not (val.is_floating_point() or val.is_complex()): + if original_dtype in _FLOAT8_DTYPES or not (val.is_floating_point() or val.is_complex()): val = val.to(torch.float32) tol = (yield ctx.expr(1)) if len(ctx.expr()) > 1 else None if self._is_tensor(tol): From 198f0d882aa475edd9da73a877e6234b8d4a5842 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:55:16 +0200 Subject: [PATCH 09/13] Remove stale generated parser files and duplicate tests Co-Authored-By: Claude Opus 5.5 --- FUNCTION_CONSISTENCY_REPORT.md | 212 - more_math/Parser/MathExpr.g4~RF43e401.TMP | 1212 -- more_math/Parser/MathExpr.interp | 540 - more_math/Parser/MathExpr.tokens | 423 - more_math/Parser/MathExprLexer.interp | 758 - more_math/Parser/MathExprLexer.py | 1601 -- more_math/Parser/MathExprLexer.tokens | 423 - more_math/Parser/MathExprListener.py | 2523 --- more_math/Parser/MathExprParser.py | 16684 -------------------- more_math/Parser/MathExprVisitor.py | 1408 -- test_bitwise_fix.py | 133 - test_bitwise_shifts.py | 170 - 12 files changed, 26087 deletions(-) delete mode 100644 FUNCTION_CONSISTENCY_REPORT.md delete mode 100644 more_math/Parser/MathExpr.g4~RF43e401.TMP delete mode 100644 more_math/Parser/MathExpr.interp delete mode 100644 more_math/Parser/MathExpr.tokens delete mode 100644 more_math/Parser/MathExprLexer.interp delete mode 100644 more_math/Parser/MathExprLexer.py delete mode 100644 more_math/Parser/MathExprLexer.tokens delete mode 100644 more_math/Parser/MathExprListener.py delete mode 100644 more_math/Parser/MathExprParser.py delete mode 100644 more_math/Parser/MathExprVisitor.py delete mode 100644 test_bitwise_fix.py delete mode 100644 test_bitwise_shifts.py diff --git a/FUNCTION_CONSISTENCY_REPORT.md b/FUNCTION_CONSISTENCY_REPORT.md deleted file mode 100644 index 6a42246..0000000 --- a/FUNCTION_CONSISTENCY_REPORT.md +++ /dev/null @@ -1,212 +0,0 @@ -# Function Consistency Check: README.md vs MathExpr.g4 - -## Executive Summary -✅ **All documented functions have grammar rules defined** -✅ **All grammar functions have documentation** -⚠️ **Minor discrepancies in aliases and function naming** - -## Functions in README but Need Verification in Grammar - -### ✅ Verified - All Present - -#### Basic Math (All Present) -- ✅ abs (AbsFunc) -- ✅ sqrt (SqrtFunc) -- ✅ ln (LnFunc) -- ✅ log (LogFunc) -- ✅ exp (ExpFunc) -- ✅ pow (PowFunc as POWE) -- ✅ floor (FloorFunc) -- ✅ ceil (CeilFunc) -- ✅ round (RoundFunc) -- ✅ fract (FractFunc) -- ✅ sign (SignFunc) -- ✅ gamma (GammaFunc) -- ✅ dist/distance (DistFunc) -- ✅ clamp (ClampFunc) -- ✅ step (StepFunc) - -#### Trigonometric (All Present) -- ✅ sin, cos, tan, asin, acos, atan, atan2 (all present) - -#### Hyperbolic (All Present) -- ✅ sinh, cosh, tanh, asinh, acosh, atanh (all present) - -#### Machine Learning / Activation (All Present) -- ✅ relu (ReluFunc) -- ✅ gelu (GeluFunc) -- ✅ softplus (SoftplusFunc) -- ✅ sigm (SigmoidFunc as SIGM) -- ✅ softmax (SoftmaxFunc) -- ✅ softmin (SoftminFunc) - -#### Interpolation (All Present) -- ✅ smoothstep (SmoothstepFunc) -- ✅ smootherstep (SmootherstepFunc) -- ✅ cubic_ease/cubic (CubicEaseFunc) -- ✅ sine_ease/sine (SineEaseFunc) -- ✅ elastic_ease/elastic (ElasticEaseFunc) -- ✅ lerp (LerpFunc) - -#### Aggregates & Tensor Operations (All Present) -- ✅ tmin (TMinFunc) -- ✅ tmax (TMaxFunc) -- ✅ smin (SMinFunc) -- ✅ smax (SMaxFunc) -- ✅ sum (SumFunc) -- ✅ mean (MeanFunc) -- ✅ std (StdFunc) -- ✅ var (VarFunc) -- ✅ median (MedianFunc) -- ✅ mode (ModeFunc) -- ✅ quartile (QuartileFunc) -- ✅ percentile (PercentileFunc) -- ✅ quantile (QuantileFunc) -- ✅ dot (DotFunc) -- ✅ moment (MomentFunc) -- ✅ topk (TopkFunc) -- ✅ botk (BotkFunc) -- ✅ topk_ind/topk_indices (TopkIndFunc) -- ✅ botk_ind/botk_indices (BotkIndFunc) -- ✅ sort (SortFunc) -- ✅ argsort (ArgsortFunc) -- ✅ argmin (ArgminFunc) -- ✅ argmax (ArgmaxFunc) -- ✅ unique (UniqueFunc) -- ✅ tnorm (TNormFunc) -- ✅ snorm (SNormFunc) -- ✅ swap (SwapFunc) -- ✅ cossim (CossimFunc) -- ✅ flip (FlipFunc) -- ✅ cov (CovFunc) -- ✅ append (AppendFunc) -- ✅ any (AnyFunc) -- ✅ all (AllFunc) -- ✅ cumsum (CumsumFunc) -- ✅ cumprod (CumprodFunc) -- ✅ tensor (EmptyTensorFunc) -- ✅ flatten (FlattenFunc) - -#### Advanced Tensor Operations (All Present) -- ✅ map (MapFunc) -- ✅ ezconvolution/ezconv (EzConvFunc) -- ✅ convolution/conv (ConvFunc) -- ✅ get_value (GetValueFunc) -- ✅ crop (CropFunc) -- ✅ permute/perm (PermuteFunc) -- ✅ reshape/rshp (ReshapeFunc) -- ✅ blur/gaussian (GaussianFunc) -- ✅ edge (EdgeFunc) -- ✅ batch_shuffle/shuffle/select (BatchShuffleFunc) -- ✅ matmul (MatmulFunc) -- ✅ cross (CrossFunc) - -#### Optical Flow (All Present) -- ✅ rife (RifeFunc) -- ✅ motion_mask (MotionMaskFunc) -- ✅ flow_to_image (FlowToImageFunc) -- ✅ flow_apply (FlowApplyFunc) - -#### FFT (All Present) -- ✅ fft (SFFT) -- ✅ ifft (SIFFT) -- ✅ angle (ANGL) - -#### Utility (All Present) -- ✅ print (PrintFunc as PRNT) -- ✅ print_shape/pshp (PrintShapeFunc) -- ✅ pinv (PinvFunc) -- ✅ range (RangeFunc) -- ✅ nan_to_num/nvl (NvlFunc) -- ✅ remap (RemapFunc) -- ✅ timestamp (TimestampFunc as TIMESTAMP) -- ✅ count/length/cnt (CountFunc) - -#### Random Distributions (All Present) -- ✅ random_normal/randn/noise (NoiseFunc) -- ✅ random_uniform/rand (RandFunc) -- ✅ random_exponential/rande (ExponentialFunc) -- ✅ random_cauchy/randc (CauchyFunc) -- ✅ random_log_normal/randln (LogNormalFunc) -- ✅ random_bernoulli/randb (BernoulliFunc) -- ✅ random_poisson/randp (PoissonFunc) -- ✅ random_gamma/randg (GammaDistFunc) -- ✅ random_beta/randbeta (BetaDistFunc) -- ✅ random_laplace/randl (LaplaceDistFunc) -- ✅ random_gumbel/randgumbel (GumbelDistFunc) -- ✅ random_weibull/randw (WeibullDistFunc) -- ✅ random_chi2/randchi2 (Chi2DistFunc) -- ✅ random_studentt/randt (StudentTDistFunc) - -#### Bitwise Operations (All Present) -- ✅ band/bitwise_and (BitAndFunc) -- ✅ bor/bitwise_or (BitOrFunc) -- ✅ xor/bitwise_xor (BitXorFunc) -- ✅ bnot/bitwise_not (BitNotFunc) -- ✅ bitcount/popcount/popcnt (BitCountFunc) -- ✅ << (LSHIFT) -- ✅ >> (RSHIFT) - -#### Stack (All Present) -- ✅ stack_push (PushFunc) -- ✅ stack_pop (PopFunc) -- ✅ stack_get (GetFunc) -- ✅ stack_clear (ClearFunc) -- ✅ stack_has (HasFunc) - -## Minor Naming Discrepancies - -### README Mentions These Aliases Not Explicitly in Grammar Lexer -1. `now` - README mentions as alias for `timestamp`, but only TIMESTAMP: 'timestamp' is in grammar - - **Fix Needed**: Add `TIMESTAMP: 'timestamp' | 'now';` - -2. `flow_view` - README mentions as alias for `flow_to_image` - - **Fix Needed**: Add to `FLOW_TO_IMAGE: 'flow_to_image' | 'flow_view';` - -3. `apply_flow` - README mentions as alias for `flow_apply` - - **Fix Needed**: Add to `FLOW_APPLY: 'flow_apply' | 'apply_flow';` - -4. Bitwise aliases - Should update for consistency: - - `BAND: 'band' | 'bitwise_and' | 'bitand';` (currently has 'bitand' as alias) - - `BOR: 'bor' | 'bitwise_or' | 'bitor';` (currently has 'bitor' as alias) - - `XOR: 'xor' | 'bitwise_xor' | 'xor';` (should add 'bitwise_xor') - - `BNOT: 'bnot' | 'bitnot' | 'bitwise_not';` (should add 'bitwise_not') - -## Summary of Issues - -### Critical (Must Fix) -None - all documented functions work - -### High Priority (Should Fix) -1. Add missing aliases for consistency: - - `now` for `timestamp` - - `flow_view` for `flow_to_image` - - `apply_flow` for `flow_apply` - - `bitwise_*` names for bitwise operators - -### Low Priority (Nice to Have) -- Documentation in README could list all aliases explicitly - -## Recommended Grammar Updates - -```antlr -// Update these lexer rules: -TIMESTAMP: 'timestamp' | 'now'; -FLOW_APPLY: 'flow_apply' | 'apply_flow'; -FLOW_TO_IMAGE: 'flow_to_image' | 'flow_view'; -BAND: 'band' | 'bitand' | 'bitwise_and'; -BOR: 'bor' | 'bitor' | 'bitwise_or'; -XOR: 'xor' | 'bitwise_xor'; -BNOT: 'bnot' | 'bitnot' | 'bitwise_not'; -BITCOUNT: 'bitcount' | 'popcount' | 'popcnt' | 'bitcount'; -``` - -## Conclusion - -✅ **Status: EXCELLENT CONSISTENCY** -- 100% of documented functions have grammar rules -- 100% of grammar functions have documentation -- Only minor alias discrepancies that don't affect functionality -- All core functionality is properly defined and documented - -**Recommendation**: Regenerate parser after applying the minor grammar updates above to ensure all documented aliases work correctly. diff --git a/more_math/Parser/MathExpr.g4~RF43e401.TMP b/more_math/Parser/MathExpr.g4~RF43e401.TMP deleted file mode 100644 index 74bcffd..0000000 --- a/more_math/Parser/MathExpr.g4~RF43e401.TMP +++ /dev/null @@ -1,1212 +0,0 @@ -/** - * MathExpr.g4 - * - * This grammar defines the syntax for a mathematical expression language. - * It supports: - * - Variable and function definitions - * - Control flow statements (if, while, for) - * - A wide range of mathematical functions (trigonometric, hyperbolic, etc.) - * - Tensor operations (matmul, dot, reshape, etc.) - * - Noise functions (perlin, cellular, etc.) - * - Basic arithmetic, comparison, and bitwise function operations - */ -grammar MathExpr; - - -// Top-level entry point -start: (funcDef | varDef | stmt)* expr SEMICOLON? EOF; - -funcDef: - VARIABLE LPAREN paramList? RPAREN ARROW (expr | block) SEMICOLON # FunctionDef; - -varDef: - VARIABLE (LBRACKET expr (COMMA expr)* RBRACKET)* (EQUEALS | PLUS_EQ | MINUS_EQ | MULT_EQ | DIV_EQ | MOD_EQ) expr SEMICOLON; - -paramList: VARIABLE (COMMA VARIABLE)*; - -stmt: - ifStmt # IfStatement - | whileStmt # WhileStatement - | block # BlockStatement - | breakStmt # BreakStatement - | continueStmt # ContinueStatement - | returnStmt # ReturnStatement - | varDef # VarDefStmt - | forStmt # ForStatement - | expr SEMICOLON # ExprStatement; - -ifStmt: IF LPAREN expr RPAREN stmt (ELSE stmt)?; -whileStmt: WHILE LPAREN expr RPAREN stmt; -forStmt: FOR LPAREN VARIABLE IN expr RPAREN stmt; -block: LBRACE stmt* RBRACE; - -dictEntryList: dictEntry (COMMA dictEntry)*; -dictEntry: VARIABLE COLON expr - | STRING COLON expr - | NUMBER COLON expr; - -breakStmt: BREAK SEMICOLON; -continueStmt: CONTINUE SEMICOLON; -returnStmt: RETURN expr? SEMICOLON; - -expr: ternaryExpr | compExpr; - -ternaryExpr: compExpr QUESTION expr COLON expr # TernaryExp; - -compExpr: - compExpr EQ relationalExpr # EqExp - | compExpr NE relationalExpr # NeExp - | relationalExpr # ToRelational; - -relationalExpr: - relationalExpr GT shiftExpr # GtExp - | relationalExpr GE shiftExpr # GeExp - | relationalExpr LT shiftExpr # LtExp - | relationalExpr LE shiftExpr # LeExp - | shiftExpr # ToShift; - -addExpr: - addExpr PLUS mulExpr # AddExp - | addExpr MINUS mulExpr # SubExp - | mulExpr # ToMul; - -mulExpr: - mulExpr MULT powExpr # MulExp - | mulExpr DIV powExpr # DivExp - | mulExpr MOD powExpr # ModExp - | powExpr # ToPow; - -shiftExpr: - shiftExpr LSHIFT addExpr # LShiftExp - | shiftExpr RSHIFT addExpr # RShiftExp - | addExpr # ToAdd; - -powExpr: unaryExpr POW powExpr # PowExp | unaryExpr # ToUnary; - -unaryExpr: - PLUS unaryExpr # UnaryPlus - | MINUS unaryExpr # UnaryMinus - | indexExpr # ToIndex; - -indexExpr: - indexExpr LBRACKET sliceElement (COMMA sliceElement)* RBRACKET # IndexExp - | atom # ToAtom; - -sliceElement: - expr COLON expr COLON expr # SliceWithStep - | expr COLON expr # Slice - | COLON expr COLON expr # SliceColonStartStep - | COLON expr # SliceColonStart - | expr COLON COLON expr # SliceExprColonStep - | expr COLON # SliceExpr - | COLON COLON expr # SliceColonStep - | COLON # SliceOnly - | expr # IndexOnly; - -// Atoms: function calls, variable, number, constant, or parenthesized expression -atom: - func0 # Func0Exp - | func1 # Func1Exp - | func2 # Func2Exp - | func3 # Func3Exp - | func4 # Func4Exp - | func5 # Func5Exp - | funcN # FuncNExp - | funcNoise # FuncNoiseExp - | VARIABLE # VariableExp - | NUMBER # NumberExp - | CONSTANT # ConstantExp - | STRING # StringExp - | LPAREN paramList RPAREN ARROW (expr | block) # LambdaExp - | LPAREN expr RPAREN # ParenExp - | LPAREN expr RPAREN # ParenExp - | PIPE expr PIPE # AbsExp - | LBRACKET expr (COMMA expr)* RBRACKET # ListExp - | LBRACE dictEntryList? RBRACE # DictExp - | VARIABLE LPAREN exprList? RPAREN # CallExp - | NONE # NoneExp - | BREAK # BreakExp - | CONTINUE # ContinueExp; - -exprList: expr (COMMA expr)*; - -func0: - /** - timestamp() - returns the current system timestamp - */ - TIMESTAMP LPAREN RPAREN # TimestampFunc; -// Single-argument functions -func1: - /** - sin(x) - applies sinus function to value or each element of value - */ - SIN LPAREN expr RPAREN # SinFunc - /** - cos(x) - applies cosinus function to value or each element of value - */ - | COS LPAREN expr RPAREN # CosFunc - /** - tan(x) - applies tangents function to value or each element of value - */ - | TAN LPAREN expr RPAREN # TanFunc - /** - asin(x) - applies arcus sinus function to value or each element of value - */ - | ASIN LPAREN expr RPAREN # AsinFunc - /** - acos(x) - applies arcus cosinus function to value or each element of value - */ - | ACOS LPAREN expr RPAREN # AcosFunc - /** - atan(x) - applies arcus tangents function to value or each element of value - */ - | ATAN LPAREN expr RPAREN # AtanFunc - /** - sinh(x) - applies hyperbolic sinus function to value or each element of value - */ - | SINH LPAREN expr RPAREN # SinhFunc - /** - cosh(x) - applies hyperbolic cosinus function to value or each element of value - */ - | COSH LPAREN expr RPAREN # CoshFunc - /** - tanh(x) - applies hyperbolic tangents function to value or each element of value - */ - | TANH LPAREN expr RPAREN # TanhFunc - /** - asinh(x) - applies hyperbolic arcus sinus function to value or each element of value - */ - | ASINH LPAREN expr RPAREN # AsinhFunc - /** - acosh(x) - applies hyperbolic arcus cosinus function to value or each element of value - */ - | ACOSH LPAREN expr RPAREN # AcoshFunc - /** - atanh(x) - applies hyperbolic arcus tangents function to value or each element of value - */ - | ATANH LPAREN expr RPAREN # AtanhFunc - /** - abs(x) - applies per element absolute value function. Same as |x| for numbers. - */ - | ABS LPAREN expr RPAREN # AbsFunc - /** - sqrt(x) - applies sqere root per element. Negative numbers return NaN (not a number) - */ - | SQRT LPAREN expr RPAREN # SqrtFunc - /** - ln(x) - applies natural logarithm to value (per element). Negative numbers return NaN (not a number) - */ - | LN LPAREN expr RPAREN # LnFunc - /** - log(x) - applies base 10 logarithm to value (per element). Negative numbers return NaN (not a number) - */ - | LOG LPAREN expr RPAREN # LogFunc - /** - exp(x) - applies e^x to value (per element) - */ - | EXP LPAREN expr RPAREN # ExpFunc - /** - tnorm(x, [dim]) - normalises tensor or list by multiplication such that sum(x^2)==1.0 for each slice. Defaults to the last dimension; dim selects a different slicing dimension. - */ - | TNORM LPAREN expr (COMMA expr)? RPAREN # TNormFunc - /** - floor(x) - returns the largest integer less than or equal to x - */ - | FLOOR LPAREN expr RPAREN # FloorFunc - /** - ceil(x) - returns the smallest integer greater than or equal to x - */ - | CEIL LPAREN expr RPAREN # CeilFunc - /** - round(x) - rounds x to the nearest integer - */ - | ROUND LPAREN expr RPAREN # RoundFunc - /** - gamma(x) - computes the gamma function (per element) - */ - | GAMMA LPAREN expr RPAREN # GammaFunc - /** - sigm(x) - applies the sigmoid function: 1 / (1 + exp(-x)) - */ - | SIGM LPAREN expr RPAREN # sigmoidFunc - /** - angle(x) - returns the angle of a complex number or vector - */ - | ANGL LPAREN expr RPAREN # anglFunc - /** - print(x) - prints the value of x to the console while passing output unchanged - */ - | PRNT LPAREN expr RPAREN # printFunc - /** - fract(x) - returns the fractional part of x: x - floor(x) - */ - | FRACT LPAREN expr RPAREN # FractFunc - /** - relu(x) - applies rectified linear unit function: max(0, x) - */ - | RELU LPAREN expr RPAREN # ReluFunc - /** - softplus(x) - applies the softplus function: ln(1 + exp(x)) - */ - | SOFTPLUS LPAREN expr RPAREN # SoftplusFunc - /** - gelu(x) - applies the Gaussian Error Linear Unit (GELU) activation function - */ - | GELU LPAREN expr RPAREN # GeluFunc - /** - sign(x) - returns the sign of x: -1, 0, or 1 - */ - | SIGN LPAREN expr RPAREN # SignFunc - /** - print_shape(x) - prints the shape of the tensor x - */ - | PRINT_SHAPE LPAREN expr RPAREN # PrintShapeFunc - /** - pinv(x) - computes the permutative inverse of a list x (list must have uniqe elements) -- TODO: CHECK -- - */ - | PINV LPAREN expr RPAREN # PinvFunc - /** - sum(x, [dims]) - computes the sum of elements of x, optionally along one or more dimensions - */ - | SUM LPAREN expr (COMMA expr)? RPAREN # SumFunc - /** - mean(x, [dims]) - computes the arithmetic mean of elements of x globally or along one or more dimensions - */ - | MEAN LPAREN expr (COMMA expr)? RPAREN # MeanFunc - /** - std(x, [dims]) - computes the sample standard deviation of elements of x globally or along one or more dimensions - */ - | STD LPAREN expr (COMMA expr)? RPAREN # StdFunc - /** - var(x, [dims]) - computes the sample variance of elements of x globally or along one or more dimensions - */ - | VAR LPAREN expr (COMMA expr)? RPAREN # VarFunc - /** - prod(x, [dims]) - computes the product of elements of x globally or along one or more dimensions - */ - | PROD LPAREN expr (COMMA expr)? RPAREN # ProdFunc - /** - sort(x, [desc], [dim]) - returns a sorted version of x (If input is tensor, it sorts the last dimension) - */ - | SORT LPAREN expr (COMMA expr (COMMA expr)?)? RPAREN # SortFunc - /** - any(x) - returns 1 if any element of x is non-zero otherwise 0 - */ - | ANY LPAREN expr RPAREN # AnyFunc - /** - all(x) - returns 1 if all elements of x are non-zero otherwise 0 - */ - | ALL LPAREN expr RPAREN # AllFunc - /** - edge(x, [matrix_size]) - detects edges in x. Matrix size denotes the size of edge detection matrix. - */ - | EDGE LPAREN expr (COMMA expr)? RPAREN # EdgeFunc - /** - median(x) - computes the median of elements of x - */ - | MEDIAN LPAREN expr RPAREN # MedianFunc - /** - mode(x) - computes the mode of elements of x - */ - | MODE LPAREN expr RPAREN # ModeFunc - /** - cumsum(x, [dim]) - computes the cumulative sum, defaulting to the first dimension. - */ - | CUMSUM LPAREN expr (COMMA expr)? RPAREN # CumsumFunc - /** - count(x) - returns the number of elements in x - */ - | COUNT LPAREN expr RPAREN # CountFunc - /** - keys(x) - returns a list of dictionary keys in insertion order - */ - | KEYS LPAREN expr RPAREN # KeysFunc - /** - enable_tracking(d) - enables change tracking for ChangeTrackingDict d (returns d) - */ - | ENABLE_TRACKING LPAREN expr RPAREN # EnableTrackingFunc - /** - disable_tracking(d) - disables change tracking for ChangeTrackingDict d (returns d) - */ - | DISABLE_TRACKING LPAREN expr RPAREN # DisableTrackingFunc - /** - reset_tracking(d) - resets change tracking state for ChangeTrackingDict d (returns d) - */ - | RESET_TRACKING LPAREN expr RPAREN # ResetTrackingFunc - /** - repeat(x, count, [dims]) - repeats tensor elements; count may be scalar or per-dim list - */ - | REPEAT LPAREN expr COMMA expr (COMMA expr)? RPAREN # RepeatFunc - /** - cumprod(x) - computes the cumulative product over first dimension. - */ - | CUMPROD LPAREN expr RPAREN # CumprodFunc - /** - stack_pop(slot) - removes and returns the last element of slot stack - */ - | POP LPAREN expr RPAREN # PopFunc - /** - stack_clear(slot) - clears the contents of slot stack - */ - | CLEAR LPAREN expr RPAREN # ClearFunc - /** - stack_has(slot) - returns 1.0 if slot exists in stack and is not empty else returns 0.0 - */ - | HAS LPAREN expr RPAREN # HasFunc - /** - stack_get(slot) - returns the last pushed value in slot without popping it - */ - | GET LPAREN expr RPAREN # GetFunc - /** - argsort(x, [desc], [dim]) - returns the indices that would sort x. desc defaults to ascending and dim defaults to the last dimension. - */ - | ARGSORT LPAREN expr (COMMA expr (COMMA expr)?)? RPAREN # ArgsortFunc - /** - argmin(x, [as_position]) - returns the minimum position in flattened x or coordinates as a list when requested - */ - | ARGMIN LPAREN expr (COMMA expr)? RPAREN # ArgminFunc - /** - argmax(x, [as_position]) - returns the maximum position in flattened x or coordinates as a list when requested - */ - | ARGMAX LPAREN expr (COMMA expr)? RPAREN # ArgmaxFunc - /** - softmax(x, [axis]) - applies the softmax function to x (sum of slice == 1.0 and max value <= 1.0). axis defaults to last. - */ - | SOFTMAX LPAREN expr (COMMA expr)? RPAREN # SoftmaxFunc - /** - softmin(x, [axis]) - applies the softmin function to x (same as softmax(-x,[axis])). axis defaults to last. - */ - | SOFTMIN LPAREN expr (COMMA expr)? RPAREN # SoftminFunc - /** - erf(x) - computes the error function (torch.erf) - */ - | ERF LPAREN expr RPAREN # ErfFunc - /** - erfinv(x) - computes the inverse error function (torch.erfinv) - */ - | ERFINV LPAREN expr RPAREN # ErfinvFunc - /** - unique(x) - returns the unique elements (sorted, flatened) - */ - | UNIQUE LPAREN expr RPAREN # UniqueFunc - /** - flatten(x) - flattens tensor into a 1D tensor - */ - | FLATTEN LPAREN expr RPAREN # FlattenFunc - /** - motion_mask(x) - generates a motion mask from optical flow - */ - | MOTION_MASK LPAREN expr RPAREN # MotionMaskFunc - /** - flow_to_image(x) - converts optical flow x to an RGB image. Up-Down is blue-yellow Left-right green-magenta. - */ - | FLOW_TO_IMAGE LPAREN expr RPAREN # FlowToImageFunc - /** - bnot(x) - computes the bitwise NOT - */ - | BNOT LPAREN expr RPAREN # BitNotFunc - /** - bitcount(x) - returns the number of set bits - */ - | BITCOUNT LPAREN expr RPAREN # BitCountFunc - /** - shape(x) - returns the shape of tensor as a list - */ - | SHAPE LPAREN expr RPAREN # ShapeFunc - /** - upper(x) - converts string to uppercase - */ - | UPPER LPAREN expr RPAREN # UpperFunc - /** - lower(x) - converts string to lowercase - */ - | LOWER LPAREN expr RPAREN # LowerFunc - /** - trim(x) - removes leading and trailing whitespace from string - */ - | TRIM LPAREN expr RPAREN # TrimFunc - /** - entropy(x) - computes shanon entropy - */ - | ENTROPY LPAREN expr RPAREN # EntropyFunc - /** - fft(x) - computes fast Fourier transform of x - */ - | SFFT LPAREN expr RPAREN # SfftFunc - /** - dilate(x, [kernel]) - applies dilation to x. kernel is optional. - */ - | DILATE LPAREN expr (COMMA expr)? RPAREN # DilateFunc - /** - erode(x, [kernel]) - applies erosion to x. kernel is size of used matrix. - */ - | ERODE LPAREN expr (COMMA expr)? RPAREN # ErodeFunc - /** - morph_open(x, [kernel]) - applies morphological opening to x. kernel is size of used matrix. - */ - | MORPH_OPEN LPAREN expr (COMMA expr)? RPAREN # MorphOpenFunc - /** - morph_close(x, [kernel]) - applies morphological closing to x. kernel is size of used matrix. - */ - | MORPH_CLOSE LPAREN expr (COMMA expr)? RPAREN # MorphCloseFunc - /** - int(x) - casts x to integer - */ - | INT LPAREN expr RPAREN # IntFunc - /** - float(x) - casts x to float - */ - | FLOAT LPAREN expr RPAREN # FloatFunc - /** - flow_magnitude(x) - computes the magnitude of optical flow (or any other structure with last dimension of 2) - */ - | FLOW_MAG LPAREN expr RPAREN # FlowMagFunc - /** - flow_angle(x) - computes the angle of optical flow (basically angle() but real and imaginery is separate in 2 dimensions) - */ - | FLOW_ANG LPAREN expr RPAREN # FlowAngFunc - /** - as_nested(x) - converts a list to a nested tensor (special object containing tensors of different shapes behaving like a tensor) - */ - | AS_NESTED LPAREN expr RPAREN # AsNestedFunc - /** - svd(x, [full_matrices]) - computes the singular value decomposition of x. Returns a list of 3 tensors: U, S, V such that x = matmul(matmul(U, diagonal_matrix(S,shape(U))), V) - */ - | SVD LPAREN expr (COMMA expr)? RPAREN # SvdFunc; - -func2: - /** - pow(x, y) - computes x raised to the power of y - */ - POWE LPAREN expr COMMA expr RPAREN # PowFunc - /** - atan2(y, x) - computes the arc tangent of y/x, using the signs of both arguments to determine the quadrant - */ - | ATAN2 LPAREN expr COMMA expr RPAREN # Atan2Func - /** - tmin(x, y) - elementwise minimum of tensor or list. min(x,y) when inputs are floats - */ - | TMIN LPAREN expr COMMA expr RPAREN # TMinFunc - /** - tmax(x,y) - elementwise maximum of tensor or list. max(x,y) when inputs are floats - */ - | TMAX LPAREN expr COMMA expr RPAREN # TMaxFunc - /** - snorm(x,[dim]) - frobenius norm of tensor. Along dimension if dimension specified. Dimension can be a list. Defaults to no dimension. - */ - | SNORM LPAREN expr (COMMA expr)? RPAREN # SNormFunc - /** - step(x, edge) - returns 0 if x < edge, else 1 - */ - | STEP LPAREN expr COMMA expr RPAREN # StepFunc - /** - topk(x, k) - returns the k largest elements of x. For tensors it keeps them in place. - */ - | TOPK LPAREN expr COMMA expr RPAREN # TopkFunc - /** - botk(x, k) - returns the k smallest elements of x. For tensors it keeps them in place. - */ - | BOTK LPAREN expr COMMA expr RPAREN # BotkFunc - /** - quartile(x, q) - computes the q-th quartile of x - */ - | QUARTILE LPAREN expr COMMA expr RPAREN # QuartileFunc - /** - percentile(x, p) - computes the p-th percentile of x - */ - | PERCENTILE LPAREN expr COMMA expr RPAREN # PercentileFunc - /** - quantile(x, q) - computes the q-th quantile of x - */ - | QUANTILE LPAREN expr COMMA expr RPAREN # QuantileFunc - /** - dot(x, y) - computes the dot product of x and y after flattening both to 1D. Use cross(x, y) if you need a per-vector product with the last dimension kept. - */ - | DOT LPAREN expr COMMA expr RPAREN # DotFunc - /** - cosine_similarity(x, y) - computes the cosine similarity between x and y. - */ - | COSSIM LPAREN expr COMMA expr RPAREN # CossimFunc - /** - startswith(text, prefix) - returns 1 if text starts with prefix, else 0 - */ - | STARTSWITH LPAREN expr COMMA expr RPAREN # StartswithFunc - /** - endswith(text, suffix) - returns 1 if text ends with suffix, else 0 - */ - | ENDSWITH LPAREN expr COMMA expr RPAREN # EndswithFunc - /** - flip(x, dims) - reverses the order of elements along the specified dimensions. Works also for text and list with dims=0 - */ - | FLIP LPAREN expr COMMA expr RPAREN # FlipFunc - /** - cov(x, y) - computes the covariance matrix of x and y - */ - | COV LPAREN expr COMMA expr RPAREN # CovFunc - /** - correlation(x, y) - computes the correlation between x and y - */ - | CORR LPAREN expr COMMA expr RPAREN # CorrFunc - /** - append(x, y) - appends y to the end of x. If inputs are tensors use concatenate(x,...,dim) - */ - | APPEND LPAREN expr COMMA expr RPAREN # AppendFunc - /** - add_key(dict, key, value) - adds or replaces a dictionary entry and returns the updated dictionary - */ - | ADD_KEY LPAREN expr COMMA expr COMMA expr RPAREN # AddKeyFunc - /** - permute(x, dims) - permutes the dimensions of tensor x according to dims - */ - | PERM LPAREN expr COMMA expr RPAREN # PermuteFunc - /** - gaussian(x, sigma, [reshape]) - applies a Gaussian blur to x with specified sigma. if reshape has value of 1.0, then it tries orienting the input such that channel is in the direction of filter. Otherwise it expect color dimension to be the last. - */ - | GAUSSIAN LPAREN expr COMMA expr (COMMA expr)? RPAREN # GaussianFunc - /** - topk_indices(x, k) - returns the indices of the k largest elements of x - */ - | TOPK_IND LPAREN expr COMMA expr RPAREN # TopkIndFunc - /** - botk_indices(x, k) - returns the indices of the k smallest elements of x - */ - | BOTK_IND LPAREN expr COMMA expr RPAREN # BotkIndFunc - /** - batch_shuffle(x, indices) - shuffles and duplicates or skips the batch dimension of x according to indices - */ - | BATCH_SHUFFLE LPAREN expr COMMA expr RPAREN # BatchShuffleFunc - /** - stack_push(slot, val) - pushes val onto the end of slot stack - */ - | PUSH LPAREN expr COMMA expr RPAREN # PushFunc - /** - get_value(slot) - returns the value at slot from stack - */ - | GET_VALUE LPAREN expr COMMA expr RPAREN # GetValueFunc - /** - tensor(shape, [value], [dtype_template]) - creates a tensor with specified shape and optional value/type. Default value is 0 and default format FP32 - */ - | TENSOR LPAREN indexExpr (COMMA expr (COMMA expr)? )? RPAREN # EmptyTensorFunc - /** - pad(x, padding) - pads tensor x with specified padding (dim 0 neg, dim 0 pos, dim 1 ...) - */ - | PAD LPAREN expr COMMA expr RPAREN # PadFunc - /** - cross(x, y) - computes the cross product of x and y. Last dimension must be 3 - */ - | CROSS LPAREN expr COMMA expr RPAREN # CrossFunc - /** - matmul(x, y) - computes the matrix multiplication of x and y - */ - | MATMUL LPAREN expr COMMA expr RPAREN # MatmulFunc - /** - flow_apply(image, flow) - applies optical flow to an image - */ - | FLOW_APPLY LPAREN expr COMMA expr RPAREN # FlowApplyFunc - /** - rife(image1, image2, [tiling_size], [iterations], [multi_scale]) - computes the optical flow field ([H, W, 2]) between image1 and image2 using a RAFT-based model - - tiling_size: chuncks image to overlapping tiling_size*tiling_size parts to conserve memory. Default is 0 (auto: enables 1024x1024 tiling when over 2MPx). When tiling_size is between 0 - 1 it takes as a fraction of the resolution - - iterations: how many times to run the flow model. Default 12 - - multi_scale: also use low resolution of base image for giant movements. Default false - */ - | RIFE LPAREN expr COMMA expr (COMMA expr (COMMA expr (COMMA expr)?)?)? RPAREN # RifeFunc - /** - bitwise_and(x, y) - computes the element-wise bitwise AND of x and y - */ - | BAND LPAREN expr COMMA expr RPAREN # BitAndFunc - /** - bitwise_xor(x, y) - computes the element-wise bitwise XOR of x and y - */ - | XOR LPAREN expr COMMA expr RPAREN # BitXorFunc - /** - bitwise_or(x, y) - computes the element-wise bitwise OR of x and y - */ - | BOR LPAREN expr COMMA expr RPAREN # BitOrFunc - /** - split(x, [delimiter]) - splits string to list of strings based on delimiter. Default is space. - */ - | SPLIT LPAREN expr (COMMA expr)? RPAREN # SplitFunc - /** - join(x, [separator]) - joins strings in list using separator. Defalut separator is "". If you want to join tensors use concatinate(...) - */ - | JOIN LPAREN expr (COMMA expr)? RPAREN # JoinFunc - /** - substring(s, start, [length]) - returns length characters of s starting at start. If length is not supplied, it returns the rest of the string - */ - | SUBSTRING LPAREN expr COMMA expr (COMMA expr)? RPAREN # SubstringFunc - /** - find(s, sub) - returns the index of the first occurrence of sub in s. -1 if not found. Works only for strings. - */ - | FIND LPAREN expr COMMA expr RPAREN # FindFunc - /** - replace(s, old, new) - replaces occurrences of old with new in s. Mostly for strings but can work with lists and tensors. - */ - | REPLACE LPAREN expr COMMA expr COMMA expr RPAREN # ReplaceFunc - /** - int_to_rgb(val) - converts an integer to an RGB color. If input is tensor it stacks the resulting R, G and B tensors using last dimension. If It is list, List of lists is returned and if value, 3 long list is returned. - */ - | INT_TO_RGB LPAREN expr RPAREN # Int_to_rgbFunc - /** - rgb_to_int(r, [g, b]) - converts RGB components to an integer It uses last dimension of tensor (or list) as R,G,B if one value. Othervise uses whole thing as channel. - */ - | RGB_TO_INT LPAREN expr ( COMMA expr COMMA expr)? RPAREN # Rgb_to_intFunc - /** - interpolate_linear(x, y) - performs linear interpolation on X. Assumes that dim 0 is batch and dim 1 = channel - */ - | INTERPOLATE_LINEAR LPAREN expr COMMA expr RPAREN # InterpolateLinearFunc - /** - interpolate_area(x, y) - performs area interpolation X. Assumes that dim 0 is batch and dim 1 = channel - */ - | INTERPOLATE_AREA LPAREN expr COMMA expr RPAREN # InterpolateAreaFunc - /** - interpolate_nearest_exact(x, y) - performs nearest neighbor interpolation X. Assumes that dim 0 is batch and dim 1 = channel - */ - | INTERPOLATE_NEAREST LPAREN expr COMMA expr RPAREN # InterpolateNearestExactFunc - /** - remove_key(dict, key) - removes a dictionary entry and returns the updated dictionary - */ - | REMOVE_KEY LPAREN expr COMMA expr RPAREN # RemoveKeyFunc; - - -func3: - /** - clamp(x, min, max) - clamps x between min and max per element - */ - CLAMP LPAREN expr COMMA expr COMMA expr RPAREN # ClampFunc - /** - lerp(a, b, t) - linear interpolation between a and b by t per element. t can be float or tensor. - */ - | LERP LPAREN expr COMMA expr COMMA expr RPAREN # LerpFunc - /** - smoothstep(x, edge0, edge1) - smooth interpolation between edge0 and edge1 - */ - | SMOOTHSTEP LPAREN expr COMMA expr COMMA expr RPAREN # SmoothstepFunc - /** - transpose(x, dim0, dim1) / swapaxes(x, dim0, dim1) - swaps two tensor dimensions - */ - | TRANSPOSE LPAREN expr COMMA expr COMMA expr RPAREN # TransposeFunc - /** - range(start, stop, step) - creates a range of values between start (inclusive) and stop (exclusive) using step. Use linspace if you want value count. - */ - | RANGE LPAREN expr COMMA expr COMMA expr RPAREN # RangeFunc - /** - moment(x, a, k) - computes the k-th moment of x around a - */ - | MOMENT LPAREN expr COMMA expr COMMA expr RPAREN # MomentFunc - /** - cubic_ease(a, b, t) - cubic ease between a and b - */ - | CUBIC_EASE LPAREN expr COMMA expr COMMA expr RPAREN # CubicEaseFunc - /** - elastic_ease(a, b, t) - elastic ease between a and b - */ - | ELASTIC_EASE LPAREN expr COMMA expr COMMA expr RPAREN # ElasticEaseFunc - /** - sine_ease(a, b, t) - sine easing between a and b - */ - | SINE_EASE LPAREN expr COMMA expr COMMA expr RPAREN # SineEaseFunc - /** - smootherstep(x, edge0, edge1) - smoother interpolation between edge0 and edge1 - */ - | SMOOTHERSTEP LPAREN expr COMMA expr COMMA expr RPAREN # SmootherstepFunc - /** - crop(x, start, size) - crops tensor x. Take size and begin at start. start should be the low corner. The result is at most size (if size is bigger then rest of tensor). - */ - | CROP LPAREN expr COMMA expr COMMA expr RPAREN # CropFunc - /** - ifft(x, [shape]) - inverse fast Fourier transform of x. shape (defaults to the node's tensor shape) sizes the K/Kx/Ky/.../frequency variables made available while evaluating x, it does not resize x itself. - */ - | SIFFT LPAREN expr (COMMA expr)? RPAREN # SifftFunc - /** - overlay(base, overlay, offset, [opacity]) - overlays overlay on base at offset. Opacity controls blending. It can be tensor or float. If it is tensor it should be the same shape as overlay. - */ - | OVERLAY LPAREN expr COMMA expr COMMA expr (COMMA expr)? RPAREN # OverlayFunc - /** - linspace(start, stop, num) - creates num linearly spaced values from start to stop (inclusive). Use range if you want to control the step between values. - */ - | LINSPACE LPAREN expr COMMA expr COMMA expr RPAREN # LinspaceFunc - /** - roll(x, shifts, [axis]) - rolls tensor x along axis - */ - | ROLL LPAREN expr COMMA expr (COMMA expr)? RPAREN # RollFunc - /** - rgb_to_oklab(r, [g], [b]) - converts RGB to OKLab. It has 2 modes. Aither 1 or 3 parameters. With 1 parameter it expects last dimension of 3 and with 3 it concatinates them after converting. - */ - | RGB_TO_OKLAB LPAREN expr (COMMA expr COMMA expr)? RPAREN # RgbToOklabFunc - /** - rgb_to_cielab(r, [g], [b]) - converts RGB to CIELAB. It has 2 modes. Aither 1 or 3 parameters. With 1 parameter it expects last dimension of 3 and with 3 it concatinates them after converting. - */ - | RGB_TO_CIELAB LPAREN expr (COMMA expr COMMA expr)? RPAREN # RgbToCielabFunc - /** - rgb_to_hsv(rgb, [degrees]) / rgb_to_hsv(r, g, b, [degrees]) - converts RGB to HSV. It has 2 modes. Aither 1 or 3 parameters. With 1 parameter it expects last dimension of 3 and with 3 it concatinates them after converting. If degrees is specified and nonzero it returns hue as 0-360 instead of 0-1 - */ - | RGB_TO_HSV LPAREN expr (COMMA expr COMMA expr)? (COMMA expr)? RPAREN # RgbToHsvFunc - /** - hsv_to_rgb(hsv, [degrees]) / hsv_to_rgb(h, s, v, [degrees]) - converts HSV to RGB. It has 2 modes. Aither 1 or 3 parameters. With 1 parameter it expects last dimension of 3 and with 3 it concatinates them after converting. - */ - | HSV_TO_RGB LPAREN expr (COMMA expr COMMA expr)? (COMMA expr)? RPAREN # HsvToRgbFunc - /** - where(condition, x, y) - returns x if condition is true, else y. Runs per element. - */ - | WHERE LPAREN expr COMMA expr COMMA expr RPAREN # WhereFunc - /** - oklab_to_rgb(oklab) / oklab_to_rgb(l, a, b) - converts OKLab to RGB. It has 2 modes. Aither 1 or 3 parameters. With 1 parameter it expects last dimension of 3 and with 3 it concatinates them after converting. - */ - | OKLAB_TO_RGB LPAREN expr (COMMA expr COMMA expr)? RPAREN # OklabToRgbFunc - /** - cielab_to_rgb(cielab) / cielab_to_rgb(l, a, b) - converts CIELAB to RGB. It has 2 modes. Aither 1 or 3 parameters. With 1 parameter it expects last dimension of 3 and with 3 it concatinates them after converting. - */ - | CIELAB_TO_RGB LPAREN expr (COMMA expr COMMA expr)? RPAREN # CielabToRgbFunc - /** - text_image(text, font, size, [max_width], [weight], [rotation_angle], [line_spacing], [italic], [underline]) - renders text to an 2D tensor - */ - | TEXT_IMAGE LPAREN expr COMMA expr COMMA expr (COMMA expr)? (COMMA expr)? (COMMA expr)? (COMMA expr)? (COMMA expr)? (COMMA expr)? RPAREN # TextImageFunc - /** - coords(shape, dim, [dtype]) - generates a tensor with the specified shape whose values are the coordinates of each element along the specified dimension. The dtype can be specified to control the data type of the output tensor. - */ - | COORDS LPAREN expr COMMA expr (COMMA expr)? RPAREN # CoordsFunc - /** - gather(x, dim, idx) - gathers elements along dim using the indices specified in idx. The output tensor has the same shape as idx. - */ - | GATHER LPAREN expr COMMA expr COMMA expr RPAREN # GatherFunc - /** - scatter(x, dim, idx, src) - scatters elements from src into x along dim using the indices specified in idx. The output tensor has the same shape as x. - */ - | SCATTER LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # ScatterFunc - /** - scatter_add(x, dim, idx, src) - scatters elements from src into x along dim using the indices specified in idx, adding to existing values. The output tensor has the same shape as x. - */ - | SCATTER_ADD LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # ScatterAddFunc; - -func4: - /** - swap(x, dim, idx1, idx2) - swaps elements along dim between idx1 and idx2 - */ - SWAP LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # SwapFunc - /** - nan_to_num(x, nan, pos_inf, neg_inf) - null value replacement - inspired by NVL - */ - | NVL LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # NvlFunc - /** - logspace(start, stop, num, base) - creates logarithmically spaced values - */ - | LOGSPACE LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # LogspaceFunc - /** - distance(x1, y1, x2, y2) - computes Euclidean distance between (x1, y1) and (x2, y2) - */ - | DIST LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # DistFunc - /** - histogram(x, bins, min, max) - computes histogram - */ - | HISTOGRAM LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # HistogramFunc; - -func5: - /** - remap(v, i_min, i_max, o_min, o_max) - remaps values from input range to output range - */ - REMAP LPAREN expr COMMA expr COMMA expr COMMA expr COMMA expr RPAREN # RemapFunc - /** - diagonal_matrix(x, shape, [offset], [dim1], [dim2]) - creates a diagonal matrix from x with specified shape. offset is the diagonal offset. dim1 and dim2 are the dimensions to place the diagonal on. - */ - | DIAG LPAREN expr COMMA expr (COMMA expr (COMMA expr (COMMA expr)?)?)? RPAREN # DiagonalMatrixFunc; - -// N-argument functions -funcN: - /** - smin(x, ...) - computes the minimum of inputs or elements. Tensors must have the same size or be broadcastable to same size. When called as smin(x, dims) with x a tensor/list, reduces x along dims (a single dim or list of dims) instead. - */ - SMIN LPAREN expr (COMMA expr)* RPAREN # SMinFunc - /** - smax(x, ...) - computes the maximum of inputs or elements. Tensors must have the same size or be broadcastable to same size. When called as smax(x, dims) with x a tensor/list, reduces x along dims (a single dim or list of dims) instead. - */ - | SMAX LPAREN expr (COMMA expr)* RPAREN # SMaxFunc - /** - map(tensor, coord1, [coord2], [coord3]) - samples/remaps input tensor using coordinates - */ - | MAP LPAREN expr COMMA expr (COMMA expr (COMMA expr)?)? RPAREN # MapFunc - /** - ezconvolution(tensor, [kernel_sizes...], kernel) - applies convolution with kernel. Attempts to correctly convolve over size dimensions. - */ - | EZCONV LPAREN expr (COMMA expr)+ RPAREN # EzConvFunc - /** - convolution(tensor, [kernel_sizes...], kernel) - applies convolution with kernel. Expects [batch,channel, ...] - */ - | CONV LPAREN expr (COMMA expr)+ RPAREN # ConvFunc - /** - reshape(x, shape) - reshapes tensor x to the specified shape - */ - | RESHAPE LPAREN expr COMMA expr RPAREN # ReshapeFunc - /** - squeeze(x, [dim]) - removes size-1 dimensions from tensor x, optionally at dim - */ - | SQUEEZE LPAREN expr (COMMA expr)? RPAREN # SqueezeFunc - /** - unsqueeze(x, dim) - inserts a size-1 dimension into tensor x at dim - */ - | UNSQUEEZE LPAREN expr COMMA expr RPAREN # UnsqueezeFunc - /** - concatenate(x, ..., dim) - concatenates one or more tensors along the specified dimension - */ - | CONCAT LPAREN expr (COMMA expr)+ RPAREN # ConcatFunc - /** - stack(tensors, [dim]) - stacks a list of tensors along a new dimension - */ - | STACK LPAREN expr (COMMA expr)? RPAREN # StackFunc - /** - nonzero(x) - returns an N-by-rank tensor of coordinates for nonzero elements - */ - | NONZERO LPAREN expr RPAREN # NonzeroFunc - /** - get_changed_keys(d) - returns list of keys that were modified or added in ChangeTrackingDict d - */ - | GET_CHANGED_KEYS LPAREN expr RPAREN # GetChangedKeysFunc - /** - get_added_keys(d) - returns list of keys that were added (newly created) in ChangeTrackingDict d - */ - | GET_ADDED_KEYS LPAREN expr RPAREN # GetAddedKeysFunc - /** - get_removed_keys(d) - returns list of keys that were removed from ChangeTrackingDict d - */ - | GET_REMOVED_KEYS LPAREN expr RPAREN # GetRemovedKeysFunc - /** - get_unchanged_keys(d) - returns list of keys that remain unchanged in ChangeTrackingDict d - */ - | GET_UNCHANGED_KEYS LPAREN expr RPAREN # GetUnchangedKeysFunc; - -funcNoise: - /** - random_normal(seed, [shape]) - generates normally distributed random noise - */ - NOISE LPAREN expr (COMMA expr)? RPAREN # NoiseFunc - /** - random_uniform(seed, [shape]) - generates uniformly distributed random noise - */ - | RAND LPAREN expr (COMMA expr)? RPAREN # RandFunc - /** - random_exponential(seed, lambda, [shape]) - generates exponentially distributed random values - */ - | EXPONENTIAL LPAREN expr COMMA expr (COMMA expr)? RPAREN # ExponentialFunc - /** - random_bernoulli(seed, probability, [shape]) - generates Bernoulli distributed random values (0 or 1). Probability can be a tensor - */ - | BERNOULLI LPAREN expr COMMA expr (COMMA expr)? RPAREN # BernoulliFunc - /** - random_poisson(seed, lambda, [shape]) - generates Poisson distributed random values. - */ - | POISSON LPAREN expr COMMA expr (COMMA expr)? RPAREN # PoissonFunc - /** - random_cauchy(seed, median, sigma, [shape]) - generates Cauchy distributed random values. - */ - | CAUCHY LPAREN expr COMMA expr COMMA expr (COMMA expr)? RPAREN # CauchyFunc - /** - random_log_normal(seed, mean, std, [shape]) - generates log-normally distributed random values. - */ - | LOGNORMAL LPAREN expr COMMA expr COMMA expr (COMMA expr)? RPAREN # LogNormalFunc - /** - random_gamma(seed, shape_param, scale, [shape]) - generates Gamma distributed random values. - */ - | GAMMADIST LPAREN expr COMMA expr COMMA expr (COMMA expr)? RPAREN # GammaDistFunc - /** - random_beta(seed, alpha, beta, [shape]) - generates Beta distributed random values - */ - | BETADIST LPAREN expr COMMA expr COMMA expr (COMMA expr)? RPAREN # BetaDistFunc - /** - random_laplace(seed, loc, scale, [shape]) - generates Laplace distributed random values - */ - | LAPLACEDIST LPAREN expr COMMA expr COMMA expr (COMMA expr)? RPAREN # LaplaceDistFunc - /** - random_gumbel(seed, loc, scale, [shape]) - generates Gumbel distributed random values - */ - | GUMBELDIST LPAREN expr COMMA expr COMMA expr (COMMA expr)? RPAREN # GumbelDistFunc - /** - random_weibull(seed, scale, concentration, [shape]) - generates Weibull distributed random values - */ - | WEIBULLDIST LPAREN expr COMMA expr COMMA expr (COMMA expr)? RPAREN # WeibullDistFunc - /** - random_chi2(seed, df, [shape]) - generates Chi-squared distributed random values - */ - | CHI2DIST LPAREN expr COMMA expr (COMMA expr)? RPAREN # Chi2DistFunc - /** - random_studentt(seed, df, [shape]) - generates Student-t distributed random values - */ - | STUDENTTDIST LPAREN expr COMMA expr (COMMA expr)? RPAREN # StudentTDistFunc - /** - perlin_noise(seed, scale, [octaves], [offset], [shape]) - generates Perlin noise - */ - | PERLIN LPAREN expr COMMA expr (COMMA expr)? (COMMA expr)? (COMMA expr)? RPAREN # PerlinFunc - /** - cellular_noise(seed, scale, [jitter], [offset], [shape]) - generates Cellular/Voronoi noise - */ - | CELLULAR LPAREN expr COMMA expr (COMMA expr)? (COMMA expr)? (COMMA expr)? RPAREN # CellularFunc - /** - plasma_noise(seed, scale, [octaves], [offset], [shape]) - generates Plasma/Turbulence noise - same as perlin but default octaves 4 - */ - | PLASMA LPAREN expr COMMA expr (COMMA expr)? (COMMA expr)? (COMMA expr)? RPAREN # PlasmaFunc - /** - ridged_noise(seed, scale, [octaves], [offset], [shape]) - generates ridged multi-fractal noise - */ - | RIDGED LPAREN expr COMMA expr (COMMA expr)? (COMMA expr)? (COMMA expr)? RPAREN # RidgedFunc - /** - domain_warp_noise(seed, scale, warp_scale, warp_strength, [octaves], [warp_octaves], [offset], [shape]) - generates domain warped noise - */ - | DOMAIN_WARP LPAREN expr COMMA expr COMMA expr COMMA expr (COMMA expr)? (COMMA expr)? (COMMA expr)? (COMMA expr)? RPAREN # DomainWarpFunc; - -// LEXER RULES - -SIN: 'sin'; -COS: 'cos'; -TAN: 'tan'; -ASIN: 'asin'; -ACOS: 'acos'; -ATAN: 'atan'; -ATAN2: 'atan2'; -SINH: 'sinh'; -COSH: 'cosh'; -TANH: 'tanh'; -ASINH: 'asinh'; -ACOSH: 'acosh'; -ATANH: 'atanh'; -ABS: 'abs'; -SQRT: 'sqrt'; -LN: 'ln'; -LOG: 'log'; -EXP: 'exp'; -SMIN: 'smin'; -SMAX: 'smax'; -TMIN: 'tmin'; -TMAX: 'tmax'; -TNORM: 'tnorm'; -SNORM: 'snorm'; -FLOOR: 'floor'; -CEIL: 'ceil'; -ROUND: 'round'; -GAMMA: 'gamma'; -POWE: 'pow'; -SIGM: 'sigm'; -CLAMP: 'clamp'; -SFFT: 'fft'; -SIFFT: 'ifft'; -ANGL: 'angle'; -PRNT: 'print'; -PRINT_SHAPE: 'print_shape' | 'pshp'; -NVL: 'nvl' | 'nan_to_num'; -LERP: 'lerp'; -STEP: 'step'; -SMOOTHSTEP: 'smoothstep'; -FRACT: 'fract'; -RELU: 'relu'; -SOFTPLUS: 'softplus'; -GELU: 'gelu'; -SIGN: 'sign'; -MAP: 'map'; -EZCONV: 'ezconvolution' | 'ezconv'; -CONV: 'convolution' | 'conv'; -SWAP: 'swap'; -TRANSPOSE: 'transpose' | 'swapaxes'; -PERM: 'permute' | 'perm'; -RESHAPE: 'reshape' | 'rshp'; -RANGE: 'range'; -LINSPACE: 'linspace'; -LOGSPACE: 'logspace'; -TOPK: 'topk'; -BOTK: 'botk'; -PINV: 'pinv'; -SUM: 'sum'; -MEAN: 'mean'; -STD: 'std'; -VAR: 'var'; -QUARTILE: 'quartile' | 'quartil'; -PERCENTILE: 'percentile' | 'prcnt'; -QUANTILE: 'quantile'; -DOT: 'dot'; -MOMENT: 'moment'; -ERF: 'erf'; -ERFINV: 'erfinv'; - -ANY: 'any'; -ALL: 'all'; -EDGE: 'edge'; -GAUSSIAN: 'blur' | 'gaussian'; -MEDIAN: 'median'; -MODE: 'mode'; -CUMSUM: 'cumsum'; -CUMPROD: 'cumprod'; -TOPK_IND: 'topk_ind' | 'topk_indices'; -BOTK_IND: 'botk_ind' | 'botk_indices'; -CUBIC_EASE: 'cubic_ease' | 'cubic'; -ELASTIC_EASE: 'elastic_ease' | 'elastic'; -SINE_EASE: 'sine_ease' | 'sine'; -SMOOTHERSTEP: 'smootherstep'; -DIST: 'dist' | 'distance'; -REMAP: 'remap'; -COSSIM: 'cossim' | 'cosine_similarity'; -COUNT: 'count' | 'cnt' | 'length'; -KEYS: 'keys'; -ENABLE_TRACKING: 'enable_tracking' | 'track_on'; -DISABLE_TRACKING: 'disable_tracking' | 'track_off'; -RESET_TRACKING: 'reset_tracking' | 'track_reset'; -GET_CHANGED_KEYS: 'get_changed_keys' | 'changed_keys'; -GET_ADDED_KEYS: 'get_added_keys' | 'added_keys'; -GET_REMOVED_KEYS: 'get_removed_keys' | 'removed_keys'; -GET_UNCHANGED_KEYS: 'get_unchanged_keys' | 'unchanged_keys'; -REPEAT: 'repeat'; -FLATTEN: 'flatten'; -APPEND: 'append'; -GET_VALUE: 'get_value'; -FLOW_APPLY: 'flow_apply'; -BATCH_SHUFFLE: 'batch_shuffle' | 'shuffle' | 'select'; -MOTION_MASK: 'motion_mask'; -FLOW_TO_IMAGE: 'flow_to_image'; -FLOW_MAG: 'flow_mag' | 'flow_magnitude'; -FLOW_ANG: 'flow_ang' | 'flow_angle'; -WHERE: 'where'; -HISTOGRAM: 'histogram' | 'hist'; -OVERLAY: 'overlay'; -PAD: 'pad'; -CROSS: 'cross'; -MATMUL: 'matmul'; -RIFE: 'rife'; -BNOT: 'bnot' | 'bitwise_not'; -BITCOUNT: 'bitcount' | 'popcount' | 'popcnt'; -SHAPE: 'shape'; -BAND: 'band' | 'bitwise_and'; -XOR: 'bxor' | 'bitwise_xor'; -BOR: 'bor' | 'bitwise_or'; -TENSOR: 'tensor'; -ADD_KEY: 'add_key'; -REMOVE_KEY: 'remove_key' | 'rm_key'; -PUSH: 'stack_push'; -POP: 'stack_pop'; -CLEAR: 'stack_clear'; -HAS: 'stack_has'; -GET: 'stack_get'; -CONCAT: 'cat'|'concat'|'concatenate'; -STACK: 'stack'; -NONZERO: 'nonzero'; -INT: 'int'; -FLOAT: 'float'; - -UPPER: 'upper'; -LOWER: 'lower'; -TRIM: 'trim'; -SPLIT: 'split'; -JOIN: 'join'; -SUBSTRING: 'substring'|'substr'; -FIND: 'find'; -REPLACE: 'replace'; -DILATE: 'dilate'; -ERODE: 'erode'; -MORPH_OPEN: 'morph_open'; -MORPH_CLOSE: 'morph_close'; -RGB_TO_OKLAB: 'rgb_to_oklab'; -RGB_TO_CIELAB: 'rgb_to_cielab'; -OKLAB_TO_RGB: 'oklab_to_rgb'; -CIELAB_TO_RGB: 'cielab_to_rgb'; -RGB_TO_HSV: 'rgb_to_hsv'; -HSV_TO_RGB: 'hsv_to_rgb'; -INT_TO_RGB: 'int_to_rgb'; -RGB_TO_INT: 'rgb_to_int'; -INTERPOLATE_LINEAR: 'interpolate_linear'; -INTERPOLATE_AREA: 'interpolate_area'; -INTERPOLATE_NEAREST: 'interpolate_nearest' | 'interpolate_nearest_exact'; -TEXT_IMAGE: 'text_image'; -AS_NESTED: 'as_nested_tensor' | 'as_nested'; -SVD: 'svd'|'singular_value_decomposition'; -DIAG: 'diagonal_matrix'|'diag'; - -IF: 'if'; -ELSE: 'else'; -WHILE: 'while'; -FOR: 'for'; -IN: 'in'; -BREAK: 'break'; -CONTINUE: 'continue'; -RETURN: 'return'; -TIMESTAMP: 'timestamp'|'now'; -SORT: 'sort'; -ARGSORT: 'argsort'; -ARGMIN: 'argmin'; -ARGMAX: 'argmax'; -SOFTMAX: 'softmax'; -SOFTMIN: 'softmin'; -UNIQUE: 'unique'; -FLIP: 'flip'; -STARTSWITH: 'startswith'; -ENDSWITH: 'endswith'; -SQUEEZE: 'squeeze'; -UNSQUEEZE: 'unsqueeze'; -ROLL: 'roll'; -COV: 'cov'; -CORR: 'corr' | 'correlation'; -ENTROPY: 'entropy'; -CROP: 'crop'; -NONE: 'none'|'None'|'null'|'NULL'; -COORDS: 'coords'|'coordinates'; -GATHER: 'gather'; -SCATTER: 'scatter'; -SCATTER_ADD: 'scatter_add'; - -NOISE: 'noise' | 'randn' | 'random_normal'; -RAND: 'rand' | 'randu' | 'random_uniform'; -CAUCHY: 'randc' | 'random_cauchy'; -EXPONENTIAL: 'rande' | 'random_exponential'; -LOGNORMAL: 'randln' | 'random_log_normal'; -BERNOULLI: 'randb' | 'random_bernoulli'; -POISSON: 'randp' | 'random_poisson'; -GAMMADIST: 'randg' | 'random_gamma'; -BETADIST: 'randbeta' | 'random_beta'; -LAPLACEDIST: 'randl' | 'random_laplace'; -GUMBELDIST: 'randgumbel' | 'random_gumbel'; -WEIBULLDIST: 'randw' | 'random_weibull'; -CHI2DIST: 'randchi2' | 'random_chi2'; -STUDENTTDIST: 'randt' | 'random_studentt'; -PERLIN: 'perlin' | 'perlin_noise'; -CELLULAR: 'cellular' | 'voronoi' | 'worley' | 'cellular_noise'|'voronoi_noise'; -PLASMA: 'plasma' | 'turbulence' | 'plasma_noise'; -RIDGED: 'ridged' | 'ridged_noise'; -DOMAIN_WARP: 'domain_warp'|'domain_warp_noise'; - -PLUS: '+'; -MINUS: '-'; -MULT: '*'; -DIV: '/'; -MOD: '%'; -POW: '^'; -LSHIFT: '<<'; -RSHIFT: '>>'; - -GE: '>='; -GT: '>'; -LE: '<='; -LT: '<'; -EQ: '=='; -EQUEALS: '='; -PLUS_EQ: '+='; -MINUS_EQ: '-='; -MULT_EQ: '*='; -DIV_EQ: '/='; -MOD_EQ: '%='; -NE: '!='; -PIPE: '|'; -LPAREN: '('; -RPAREN: ')'; -COMMA: ','; -SEMICOLON: ';'; -ARROW: '->'; -LBRACKET: '['; -RBRACKET: ']'; -QUESTION: '?'; -COLON: ':'; -LBRACE: '{'; -RBRACE: '}'; - -NUMBER: ([0-9]+ ('.' [0-9]*)? | '.' [0-9]+) ([eE][+-]? [0-9]+)?; -CONSTANT: ('pi' | 'PI' | 'e' | 'E'); -STRING: '"' (~["\\\r\n] | '\\' .)* '"' - | '\'' (~['\\\r\n] | '\\' .)* '\'' - ; -VARIABLE: [a-zA-Z_] [a-zA-Z_0-9]*; - -SL_COMMENT: '#' ~[\r\n]* -> skip; -ML_COMMENT: '/*' .*? '*/' -> skip; -WS: [ \t\r\n]+ -> skip; diff --git a/more_math/Parser/MathExpr.interp b/more_math/Parser/MathExpr.interp deleted file mode 100644 index 889f772..0000000 --- a/more_math/Parser/MathExpr.interp +++ /dev/null @@ -1,540 +0,0 @@ -token literal names: -null -'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' -null -null -'lerp' -'step' -'smoothstep' -'fract' -'relu' -'softplus' -'gelu' -'sign' -'map' -null -null -'swap' -null -null -null -'range' -'linspace' -'logspace' -'topk' -'botk' -'pinv' -'sum' -'mean' -'std' -'var' -null -null -'quantile' -'dot' -'moment' -'erf' -'erfinv' -'any' -'all' -'edge' -null -'median' -'mode' -'cumsum' -'cumprod' -null -null -null -null -null -'smootherstep' -null -'remap' -null -null -'keys' -null -null -null -null -null -null -null -'repeat' -'flatten' -'append' -'get_value' -'flow_apply' -null -'motion_mask' -'flow_to_image' -null -null -'where' -null -'overlay' -'pad' -'cross' -'matmul' -'rife' -null -null -'shape' -null -null -null -'tensor' -'add_key' -null -'stack_push' -'stack_pop' -'stack_clear' -'stack_has' -'stack_get' -null -'stack' -'nonzero' -'int' -'float' -'upper' -'lower' -'trim' -'split' -'join' -null -'find' -'replace' -'dilate' -'erode' -'morph_open' -'morph_close' -'rgb_to_oklab' -'rgb_to_cielab' -'oklab_to_rgb' -'cielab_to_rgb' -'rgb_to_hsv' -'hsv_to_rgb' -'int_to_rgb' -'rgb_to_int' -'interpolate_linear' -'interpolate_area' -null -'text_image' -null -null -null -'if' -'else' -'while' -'for' -'in' -'break' -'continue' -'return' -null -'sort' -'argsort' -'argmin' -'argmax' -'softmax' -'softmin' -'unique' -'flip' -'startswith' -'endswith' -'squeeze' -'unsqueeze' -'roll' -'cov' -null -'entropy' -'crop' -null -null -'gather' -'scatter' -'scatter_add' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -'+' -'-' -'*' -'/' -'%' -'^' -'<<' -'>>' -'>=' -'>' -'<=' -'<' -'==' -'=' -'+=' -'-=' -'*=' -'/=' -'%=' -'!=' -'|' -'(' -')' -',' -';' -'->' -'[' -']' -'?' -':' -'{' -'}' -null -null -null -null -null -null -null - -token symbolic names: -null -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 -TRANSPOSE -PERM -RESHAPE -RANGE -LINSPACE -LOGSPACE -TOPK -BOTK -PINV -SUM -MEAN -STD -VAR -QUARTILE -PERCENTILE -QUANTILE -DOT -MOMENT -ERF -ERFINV -ANY -ALL -EDGE -GAUSSIAN -MEDIAN -MODE -CUMSUM -CUMPROD -TOPK_IND -BOTK_IND -CUBIC_EASE -ELASTIC_EASE -SINE_EASE -SMOOTHERSTEP -DIST -REMAP -COSSIM -COUNT -KEYS -ENABLE_TRACKING -DISABLE_TRACKING -RESET_TRACKING -GET_CHANGED_KEYS -GET_ADDED_KEYS -GET_REMOVED_KEYS -GET_UNCHANGED_KEYS -REPEAT -FLATTEN -APPEND -GET_VALUE -FLOW_APPLY -BATCH_SHUFFLE -MOTION_MASK -FLOW_TO_IMAGE -FLOW_MAG -FLOW_ANG -WHERE -HISTOGRAM -OVERLAY -PAD -CROSS -MATMUL -RIFE -BNOT -BITCOUNT -SHAPE -BAND -XOR -BOR -TENSOR -ADD_KEY -REMOVE_KEY -PUSH -POP -CLEAR -HAS -GET -CONCAT -STACK -NONZERO -INT -FLOAT -UPPER -LOWER -TRIM -SPLIT -JOIN -SUBSTRING -FIND -REPLACE -DILATE -ERODE -MORPH_OPEN -MORPH_CLOSE -RGB_TO_OKLAB -RGB_TO_CIELAB -OKLAB_TO_RGB -CIELAB_TO_RGB -RGB_TO_HSV -HSV_TO_RGB -INT_TO_RGB -RGB_TO_INT -INTERPOLATE_LINEAR -INTERPOLATE_AREA -INTERPOLATE_NEAREST -TEXT_IMAGE -AS_NESTED -SVD -DIAG -IF -ELSE -WHILE -FOR -IN -BREAK -CONTINUE -RETURN -TIMESTAMP -SORT -ARGSORT -ARGMIN -ARGMAX -SOFTMAX -SOFTMIN -UNIQUE -FLIP -STARTSWITH -ENDSWITH -SQUEEZE -UNSQUEEZE -ROLL -COV -CORR -ENTROPY -CROP -NONE -COORDS -GATHER -SCATTER -SCATTER_ADD -NOISE -RAND -CAUCHY -EXPONENTIAL -LOGNORMAL -BERNOULLI -POISSON -GAMMADIST -BETADIST -LAPLACEDIST -GUMBELDIST -WEIBULLDIST -CHI2DIST -STUDENTTDIST -PERLIN -CELLULAR -PLASMA -RIDGED -DOMAIN_WARP -PLUS -MINUS -MULT -DIV -MOD -POW -LSHIFT -RSHIFT -GE -GT -LE -LT -EQ -EQUEALS -PLUS_EQ -MINUS_EQ -MULT_EQ -DIV_EQ -MOD_EQ -NE -PIPE -LPAREN -RPAREN -COMMA -SEMICOLON -ARROW -LBRACKET -RBRACKET -QUESTION -COLON -LBRACE -RBRACE -NUMBER -CONSTANT -STRING -VARIABLE -SL_COMMENT -ML_COMMENT -WS - -rule names: -start -funcDef -varDef -paramList -stmt -ifStmt -whileStmt -forStmt -block -dictEntryList -dictEntry -breakStmt -continueStmt -returnStmt -expr -ternaryExpr -compExpr -relationalExpr -addExpr -mulExpr -shiftExpr -powExpr -unaryExpr -indexExpr -sliceElement -atom -exprList -func0 -func1 -func2 -func3 -func4 -func5 -funcN -funcNoise - - -atn: -[4, 1, 247, 2088, 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, 1, 0, 1, 0, 1, 0, 5, 0, 74, 8, 0, 10, 0, 12, 0, 77, 9, 0, 1, 0, 1, 0, 3, 0, 81, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 88, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 94, 8, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 103, 8, 2, 10, 2, 12, 2, 106, 9, 2, 1, 2, 1, 2, 5, 2, 110, 8, 2, 10, 2, 12, 2, 113, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 5, 3, 122, 8, 3, 10, 3, 12, 3, 125, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 138, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 147, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 5, 8, 165, 8, 8, 10, 8, 12, 8, 168, 9, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 175, 8, 9, 10, 9, 12, 9, 178, 9, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 189, 8, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 199, 8, 13, 1, 13, 1, 13, 1, 14, 1, 14, 3, 14, 205, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 222, 8, 16, 10, 16, 12, 16, 225, 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, 5, 17, 242, 8, 17, 10, 17, 12, 17, 245, 9, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 256, 8, 18, 10, 18, 12, 18, 259, 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, 5, 19, 273, 8, 19, 10, 19, 12, 19, 276, 9, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 287, 8, 20, 10, 20, 12, 20, 290, 9, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 297, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 304, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 314, 8, 23, 10, 23, 12, 23, 317, 9, 23, 1, 23, 1, 23, 5, 23, 321, 8, 23, 10, 23, 12, 23, 324, 9, 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, 3, 24, 356, 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, 3, 25, 376, 8, 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, 5, 25, 394, 8, 25, 10, 25, 12, 25, 397, 9, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 403, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 409, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 415, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 420, 8, 26, 10, 26, 12, 26, 423, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 519, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 598, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 624, 8, 28, 3, 28, 626, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 645, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 664, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 700, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 736, 8, 28, 3, 28, 738, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 747, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 756, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 765, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 774, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 853, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 862, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 871, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 880, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 914, 8, 28, 1, 28, 1, 28, 3, 28, 918, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 953, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1078, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1124, 8, 29, 3, 29, 1126, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1169, 8, 29, 3, 29, 1171, 8, 29, 3, 29, 1173, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1203, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1212, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1223, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1256, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1288, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1394, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1407, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1427, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1439, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1451, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1463, 8, 30, 1, 30, 1, 30, 3, 30, 1467, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1479, 8, 30, 1, 30, 1, 30, 3, 30, 1483, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1504, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1516, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1529, 8, 30, 1, 30, 1, 30, 3, 30, 1533, 8, 30, 1, 30, 1, 30, 3, 30, 1537, 8, 30, 1, 30, 1, 30, 3, 30, 1541, 8, 30, 1, 30, 1, 30, 3, 30, 1545, 8, 30, 1, 30, 1, 30, 3, 30, 1549, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1560, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1595, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 1652, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1678, 8, 32, 3, 32, 1680, 8, 32, 3, 32, 1682, 8, 32, 1, 32, 1, 32, 3, 32, 1686, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 1693, 8, 33, 10, 33, 12, 33, 1696, 9, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 1705, 8, 33, 10, 33, 12, 33, 1708, 9, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1721, 8, 33, 3, 33, 1723, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 1732, 8, 33, 11, 33, 12, 33, 1733, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 1743, 8, 33, 11, 33, 12, 33, 1744, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1761, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 1777, 8, 33, 11, 33, 12, 33, 1778, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1788, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1817, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1824, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1833, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1844, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1855, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1866, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1879, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1892, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1905, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1918, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1931, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1944, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1957, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1968, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1979, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1990, 8, 34, 1, 34, 1, 34, 3, 34, 1994, 8, 34, 1, 34, 1, 34, 3, 34, 1998, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 2009, 8, 34, 1, 34, 1, 34, 3, 34, 2013, 8, 34, 1, 34, 1, 34, 3, 34, 2017, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 2028, 8, 34, 1, 34, 1, 34, 3, 34, 2032, 8, 34, 1, 34, 1, 34, 3, 34, 2036, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 2047, 8, 34, 1, 34, 1, 34, 3, 34, 2051, 8, 34, 1, 34, 1, 34, 3, 34, 2055, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 2070, 8, 34, 1, 34, 1, 34, 3, 34, 2074, 8, 34, 1, 34, 1, 34, 3, 34, 2078, 8, 34, 1, 34, 1, 34, 3, 34, 2082, 8, 34, 1, 34, 1, 34, 3, 34, 2086, 8, 34, 1, 34, 0, 6, 32, 34, 36, 38, 40, 46, 35, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 0, 1, 1, 0, 222, 227, 2408, 0, 75, 1, 0, 0, 0, 2, 84, 1, 0, 0, 0, 4, 97, 1, 0, 0, 0, 6, 118, 1, 0, 0, 0, 8, 137, 1, 0, 0, 0, 10, 139, 1, 0, 0, 0, 12, 148, 1, 0, 0, 0, 14, 154, 1, 0, 0, 0, 16, 162, 1, 0, 0, 0, 18, 171, 1, 0, 0, 0, 20, 188, 1, 0, 0, 0, 22, 190, 1, 0, 0, 0, 24, 193, 1, 0, 0, 0, 26, 196, 1, 0, 0, 0, 28, 204, 1, 0, 0, 0, 30, 206, 1, 0, 0, 0, 32, 212, 1, 0, 0, 0, 34, 226, 1, 0, 0, 0, 36, 246, 1, 0, 0, 0, 38, 260, 1, 0, 0, 0, 40, 277, 1, 0, 0, 0, 42, 296, 1, 0, 0, 0, 44, 303, 1, 0, 0, 0, 46, 305, 1, 0, 0, 0, 48, 355, 1, 0, 0, 0, 50, 414, 1, 0, 0, 0, 52, 416, 1, 0, 0, 0, 54, 424, 1, 0, 0, 0, 56, 917, 1, 0, 0, 0, 58, 1287, 1, 0, 0, 0, 60, 1594, 1, 0, 0, 0, 62, 1651, 1, 0, 0, 0, 64, 1685, 1, 0, 0, 0, 66, 1816, 1, 0, 0, 0, 68, 2085, 1, 0, 0, 0, 70, 74, 3, 2, 1, 0, 71, 74, 3, 4, 2, 0, 72, 74, 3, 8, 4, 0, 73, 70, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 72, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 78, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 80, 3, 28, 14, 0, 79, 81, 5, 233, 0, 0, 80, 79, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 83, 5, 0, 0, 1, 83, 1, 1, 0, 0, 0, 84, 85, 5, 244, 0, 0, 85, 87, 5, 230, 0, 0, 86, 88, 3, 6, 3, 0, 87, 86, 1, 0, 0, 0, 87, 88, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 90, 5, 231, 0, 0, 90, 93, 5, 234, 0, 0, 91, 94, 3, 28, 14, 0, 92, 94, 3, 16, 8, 0, 93, 91, 1, 0, 0, 0, 93, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 96, 5, 233, 0, 0, 96, 3, 1, 0, 0, 0, 97, 111, 5, 244, 0, 0, 98, 99, 5, 235, 0, 0, 99, 104, 3, 28, 14, 0, 100, 101, 5, 232, 0, 0, 101, 103, 3, 28, 14, 0, 102, 100, 1, 0, 0, 0, 103, 106, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 107, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 107, 108, 5, 236, 0, 0, 108, 110, 1, 0, 0, 0, 109, 98, 1, 0, 0, 0, 110, 113, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 111, 112, 1, 0, 0, 0, 112, 114, 1, 0, 0, 0, 113, 111, 1, 0, 0, 0, 114, 115, 7, 0, 0, 0, 115, 116, 3, 28, 14, 0, 116, 117, 5, 233, 0, 0, 117, 5, 1, 0, 0, 0, 118, 123, 5, 244, 0, 0, 119, 120, 5, 232, 0, 0, 120, 122, 5, 244, 0, 0, 121, 119, 1, 0, 0, 0, 122, 125, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 7, 1, 0, 0, 0, 125, 123, 1, 0, 0, 0, 126, 138, 3, 10, 5, 0, 127, 138, 3, 12, 6, 0, 128, 138, 3, 16, 8, 0, 129, 138, 3, 22, 11, 0, 130, 138, 3, 24, 12, 0, 131, 138, 3, 26, 13, 0, 132, 138, 3, 4, 2, 0, 133, 138, 3, 14, 7, 0, 134, 135, 3, 28, 14, 0, 135, 136, 5, 233, 0, 0, 136, 138, 1, 0, 0, 0, 137, 126, 1, 0, 0, 0, 137, 127, 1, 0, 0, 0, 137, 128, 1, 0, 0, 0, 137, 129, 1, 0, 0, 0, 137, 130, 1, 0, 0, 0, 137, 131, 1, 0, 0, 0, 137, 132, 1, 0, 0, 0, 137, 133, 1, 0, 0, 0, 137, 134, 1, 0, 0, 0, 138, 9, 1, 0, 0, 0, 139, 140, 5, 159, 0, 0, 140, 141, 5, 230, 0, 0, 141, 142, 3, 28, 14, 0, 142, 143, 5, 231, 0, 0, 143, 146, 3, 8, 4, 0, 144, 145, 5, 160, 0, 0, 145, 147, 3, 8, 4, 0, 146, 144, 1, 0, 0, 0, 146, 147, 1, 0, 0, 0, 147, 11, 1, 0, 0, 0, 148, 149, 5, 161, 0, 0, 149, 150, 5, 230, 0, 0, 150, 151, 3, 28, 14, 0, 151, 152, 5, 231, 0, 0, 152, 153, 3, 8, 4, 0, 153, 13, 1, 0, 0, 0, 154, 155, 5, 162, 0, 0, 155, 156, 5, 230, 0, 0, 156, 157, 5, 244, 0, 0, 157, 158, 5, 163, 0, 0, 158, 159, 3, 28, 14, 0, 159, 160, 5, 231, 0, 0, 160, 161, 3, 8, 4, 0, 161, 15, 1, 0, 0, 0, 162, 166, 5, 239, 0, 0, 163, 165, 3, 8, 4, 0, 164, 163, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 169, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 169, 170, 5, 240, 0, 0, 170, 17, 1, 0, 0, 0, 171, 176, 3, 20, 10, 0, 172, 173, 5, 232, 0, 0, 173, 175, 3, 20, 10, 0, 174, 172, 1, 0, 0, 0, 175, 178, 1, 0, 0, 0, 176, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 19, 1, 0, 0, 0, 178, 176, 1, 0, 0, 0, 179, 180, 5, 244, 0, 0, 180, 181, 5, 238, 0, 0, 181, 189, 3, 28, 14, 0, 182, 183, 5, 243, 0, 0, 183, 184, 5, 238, 0, 0, 184, 189, 3, 28, 14, 0, 185, 186, 5, 241, 0, 0, 186, 187, 5, 238, 0, 0, 187, 189, 3, 28, 14, 0, 188, 179, 1, 0, 0, 0, 188, 182, 1, 0, 0, 0, 188, 185, 1, 0, 0, 0, 189, 21, 1, 0, 0, 0, 190, 191, 5, 164, 0, 0, 191, 192, 5, 233, 0, 0, 192, 23, 1, 0, 0, 0, 193, 194, 5, 165, 0, 0, 194, 195, 5, 233, 0, 0, 195, 25, 1, 0, 0, 0, 196, 198, 5, 166, 0, 0, 197, 199, 3, 28, 14, 0, 198, 197, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 201, 5, 233, 0, 0, 201, 27, 1, 0, 0, 0, 202, 205, 3, 30, 15, 0, 203, 205, 3, 32, 16, 0, 204, 202, 1, 0, 0, 0, 204, 203, 1, 0, 0, 0, 205, 29, 1, 0, 0, 0, 206, 207, 3, 32, 16, 0, 207, 208, 5, 237, 0, 0, 208, 209, 3, 28, 14, 0, 209, 210, 5, 238, 0, 0, 210, 211, 3, 28, 14, 0, 211, 31, 1, 0, 0, 0, 212, 213, 6, 16, -1, 0, 213, 214, 3, 34, 17, 0, 214, 223, 1, 0, 0, 0, 215, 216, 10, 3, 0, 0, 216, 217, 5, 221, 0, 0, 217, 222, 3, 34, 17, 0, 218, 219, 10, 2, 0, 0, 219, 220, 5, 228, 0, 0, 220, 222, 3, 34, 17, 0, 221, 215, 1, 0, 0, 0, 221, 218, 1, 0, 0, 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 33, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 227, 6, 17, -1, 0, 227, 228, 3, 40, 20, 0, 228, 243, 1, 0, 0, 0, 229, 230, 10, 5, 0, 0, 230, 231, 5, 218, 0, 0, 231, 242, 3, 40, 20, 0, 232, 233, 10, 4, 0, 0, 233, 234, 5, 217, 0, 0, 234, 242, 3, 40, 20, 0, 235, 236, 10, 3, 0, 0, 236, 237, 5, 220, 0, 0, 237, 242, 3, 40, 20, 0, 238, 239, 10, 2, 0, 0, 239, 240, 5, 219, 0, 0, 240, 242, 3, 40, 20, 0, 241, 229, 1, 0, 0, 0, 241, 232, 1, 0, 0, 0, 241, 235, 1, 0, 0, 0, 241, 238, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 35, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 6, 18, -1, 0, 247, 248, 3, 38, 19, 0, 248, 257, 1, 0, 0, 0, 249, 250, 10, 3, 0, 0, 250, 251, 5, 209, 0, 0, 251, 256, 3, 38, 19, 0, 252, 253, 10, 2, 0, 0, 253, 254, 5, 210, 0, 0, 254, 256, 3, 38, 19, 0, 255, 249, 1, 0, 0, 0, 255, 252, 1, 0, 0, 0, 256, 259, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 37, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 260, 261, 6, 19, -1, 0, 261, 262, 3, 42, 21, 0, 262, 274, 1, 0, 0, 0, 263, 264, 10, 4, 0, 0, 264, 265, 5, 211, 0, 0, 265, 273, 3, 42, 21, 0, 266, 267, 10, 3, 0, 0, 267, 268, 5, 212, 0, 0, 268, 273, 3, 42, 21, 0, 269, 270, 10, 2, 0, 0, 270, 271, 5, 213, 0, 0, 271, 273, 3, 42, 21, 0, 272, 263, 1, 0, 0, 0, 272, 266, 1, 0, 0, 0, 272, 269, 1, 0, 0, 0, 273, 276, 1, 0, 0, 0, 274, 272, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 39, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 277, 278, 6, 20, -1, 0, 278, 279, 3, 36, 18, 0, 279, 288, 1, 0, 0, 0, 280, 281, 10, 3, 0, 0, 281, 282, 5, 215, 0, 0, 282, 287, 3, 36, 18, 0, 283, 284, 10, 2, 0, 0, 284, 285, 5, 216, 0, 0, 285, 287, 3, 36, 18, 0, 286, 280, 1, 0, 0, 0, 286, 283, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 41, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 292, 3, 44, 22, 0, 292, 293, 5, 214, 0, 0, 293, 294, 3, 42, 21, 0, 294, 297, 1, 0, 0, 0, 295, 297, 3, 44, 22, 0, 296, 291, 1, 0, 0, 0, 296, 295, 1, 0, 0, 0, 297, 43, 1, 0, 0, 0, 298, 299, 5, 209, 0, 0, 299, 304, 3, 44, 22, 0, 300, 301, 5, 210, 0, 0, 301, 304, 3, 44, 22, 0, 302, 304, 3, 46, 23, 0, 303, 298, 1, 0, 0, 0, 303, 300, 1, 0, 0, 0, 303, 302, 1, 0, 0, 0, 304, 45, 1, 0, 0, 0, 305, 306, 6, 23, -1, 0, 306, 307, 3, 50, 25, 0, 307, 322, 1, 0, 0, 0, 308, 309, 10, 2, 0, 0, 309, 310, 5, 235, 0, 0, 310, 315, 3, 48, 24, 0, 311, 312, 5, 232, 0, 0, 312, 314, 3, 48, 24, 0, 313, 311, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 318, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 319, 5, 236, 0, 0, 319, 321, 1, 0, 0, 0, 320, 308, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 47, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 325, 326, 3, 28, 14, 0, 326, 327, 5, 238, 0, 0, 327, 328, 3, 28, 14, 0, 328, 329, 5, 238, 0, 0, 329, 330, 3, 28, 14, 0, 330, 356, 1, 0, 0, 0, 331, 332, 3, 28, 14, 0, 332, 333, 5, 238, 0, 0, 333, 334, 3, 28, 14, 0, 334, 356, 1, 0, 0, 0, 335, 336, 5, 238, 0, 0, 336, 337, 3, 28, 14, 0, 337, 338, 5, 238, 0, 0, 338, 339, 3, 28, 14, 0, 339, 356, 1, 0, 0, 0, 340, 341, 5, 238, 0, 0, 341, 356, 3, 28, 14, 0, 342, 343, 3, 28, 14, 0, 343, 344, 5, 238, 0, 0, 344, 345, 5, 238, 0, 0, 345, 346, 3, 28, 14, 0, 346, 356, 1, 0, 0, 0, 347, 348, 3, 28, 14, 0, 348, 349, 5, 238, 0, 0, 349, 356, 1, 0, 0, 0, 350, 351, 5, 238, 0, 0, 351, 352, 5, 238, 0, 0, 352, 356, 3, 28, 14, 0, 353, 356, 5, 238, 0, 0, 354, 356, 3, 28, 14, 0, 355, 325, 1, 0, 0, 0, 355, 331, 1, 0, 0, 0, 355, 335, 1, 0, 0, 0, 355, 340, 1, 0, 0, 0, 355, 342, 1, 0, 0, 0, 355, 347, 1, 0, 0, 0, 355, 350, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 354, 1, 0, 0, 0, 356, 49, 1, 0, 0, 0, 357, 415, 3, 54, 27, 0, 358, 415, 3, 56, 28, 0, 359, 415, 3, 58, 29, 0, 360, 415, 3, 60, 30, 0, 361, 415, 3, 62, 31, 0, 362, 415, 3, 64, 32, 0, 363, 415, 3, 66, 33, 0, 364, 415, 3, 68, 34, 0, 365, 415, 5, 244, 0, 0, 366, 415, 5, 241, 0, 0, 367, 415, 5, 242, 0, 0, 368, 415, 5, 243, 0, 0, 369, 370, 5, 230, 0, 0, 370, 371, 3, 6, 3, 0, 371, 372, 5, 231, 0, 0, 372, 375, 5, 234, 0, 0, 373, 376, 3, 28, 14, 0, 374, 376, 3, 16, 8, 0, 375, 373, 1, 0, 0, 0, 375, 374, 1, 0, 0, 0, 376, 415, 1, 0, 0, 0, 377, 378, 5, 230, 0, 0, 378, 379, 3, 28, 14, 0, 379, 380, 5, 231, 0, 0, 380, 415, 1, 0, 0, 0, 381, 382, 5, 230, 0, 0, 382, 383, 3, 28, 14, 0, 383, 384, 5, 231, 0, 0, 384, 415, 1, 0, 0, 0, 385, 386, 5, 229, 0, 0, 386, 387, 3, 28, 14, 0, 387, 388, 5, 229, 0, 0, 388, 415, 1, 0, 0, 0, 389, 390, 5, 235, 0, 0, 390, 395, 3, 28, 14, 0, 391, 392, 5, 232, 0, 0, 392, 394, 3, 28, 14, 0, 393, 391, 1, 0, 0, 0, 394, 397, 1, 0, 0, 0, 395, 393, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 398, 1, 0, 0, 0, 397, 395, 1, 0, 0, 0, 398, 399, 5, 236, 0, 0, 399, 415, 1, 0, 0, 0, 400, 402, 5, 239, 0, 0, 401, 403, 3, 18, 9, 0, 402, 401, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 415, 5, 240, 0, 0, 405, 406, 5, 244, 0, 0, 406, 408, 5, 230, 0, 0, 407, 409, 3, 52, 26, 0, 408, 407, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 415, 5, 231, 0, 0, 411, 415, 5, 185, 0, 0, 412, 415, 5, 164, 0, 0, 413, 415, 5, 165, 0, 0, 414, 357, 1, 0, 0, 0, 414, 358, 1, 0, 0, 0, 414, 359, 1, 0, 0, 0, 414, 360, 1, 0, 0, 0, 414, 361, 1, 0, 0, 0, 414, 362, 1, 0, 0, 0, 414, 363, 1, 0, 0, 0, 414, 364, 1, 0, 0, 0, 414, 365, 1, 0, 0, 0, 414, 366, 1, 0, 0, 0, 414, 367, 1, 0, 0, 0, 414, 368, 1, 0, 0, 0, 414, 369, 1, 0, 0, 0, 414, 377, 1, 0, 0, 0, 414, 381, 1, 0, 0, 0, 414, 385, 1, 0, 0, 0, 414, 389, 1, 0, 0, 0, 414, 400, 1, 0, 0, 0, 414, 405, 1, 0, 0, 0, 414, 411, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 413, 1, 0, 0, 0, 415, 51, 1, 0, 0, 0, 416, 421, 3, 28, 14, 0, 417, 418, 5, 232, 0, 0, 418, 420, 3, 28, 14, 0, 419, 417, 1, 0, 0, 0, 420, 423, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 53, 1, 0, 0, 0, 423, 421, 1, 0, 0, 0, 424, 425, 5, 167, 0, 0, 425, 426, 5, 230, 0, 0, 426, 427, 5, 231, 0, 0, 427, 55, 1, 0, 0, 0, 428, 429, 5, 1, 0, 0, 429, 430, 5, 230, 0, 0, 430, 431, 3, 28, 14, 0, 431, 432, 5, 231, 0, 0, 432, 918, 1, 0, 0, 0, 433, 434, 5, 2, 0, 0, 434, 435, 5, 230, 0, 0, 435, 436, 3, 28, 14, 0, 436, 437, 5, 231, 0, 0, 437, 918, 1, 0, 0, 0, 438, 439, 5, 3, 0, 0, 439, 440, 5, 230, 0, 0, 440, 441, 3, 28, 14, 0, 441, 442, 5, 231, 0, 0, 442, 918, 1, 0, 0, 0, 443, 444, 5, 4, 0, 0, 444, 445, 5, 230, 0, 0, 445, 446, 3, 28, 14, 0, 446, 447, 5, 231, 0, 0, 447, 918, 1, 0, 0, 0, 448, 449, 5, 5, 0, 0, 449, 450, 5, 230, 0, 0, 450, 451, 3, 28, 14, 0, 451, 452, 5, 231, 0, 0, 452, 918, 1, 0, 0, 0, 453, 454, 5, 6, 0, 0, 454, 455, 5, 230, 0, 0, 455, 456, 3, 28, 14, 0, 456, 457, 5, 231, 0, 0, 457, 918, 1, 0, 0, 0, 458, 459, 5, 8, 0, 0, 459, 460, 5, 230, 0, 0, 460, 461, 3, 28, 14, 0, 461, 462, 5, 231, 0, 0, 462, 918, 1, 0, 0, 0, 463, 464, 5, 9, 0, 0, 464, 465, 5, 230, 0, 0, 465, 466, 3, 28, 14, 0, 466, 467, 5, 231, 0, 0, 467, 918, 1, 0, 0, 0, 468, 469, 5, 10, 0, 0, 469, 470, 5, 230, 0, 0, 470, 471, 3, 28, 14, 0, 471, 472, 5, 231, 0, 0, 472, 918, 1, 0, 0, 0, 473, 474, 5, 11, 0, 0, 474, 475, 5, 230, 0, 0, 475, 476, 3, 28, 14, 0, 476, 477, 5, 231, 0, 0, 477, 918, 1, 0, 0, 0, 478, 479, 5, 12, 0, 0, 479, 480, 5, 230, 0, 0, 480, 481, 3, 28, 14, 0, 481, 482, 5, 231, 0, 0, 482, 918, 1, 0, 0, 0, 483, 484, 5, 13, 0, 0, 484, 485, 5, 230, 0, 0, 485, 486, 3, 28, 14, 0, 486, 487, 5, 231, 0, 0, 487, 918, 1, 0, 0, 0, 488, 489, 5, 14, 0, 0, 489, 490, 5, 230, 0, 0, 490, 491, 3, 28, 14, 0, 491, 492, 5, 231, 0, 0, 492, 918, 1, 0, 0, 0, 493, 494, 5, 15, 0, 0, 494, 495, 5, 230, 0, 0, 495, 496, 3, 28, 14, 0, 496, 497, 5, 231, 0, 0, 497, 918, 1, 0, 0, 0, 498, 499, 5, 16, 0, 0, 499, 500, 5, 230, 0, 0, 500, 501, 3, 28, 14, 0, 501, 502, 5, 231, 0, 0, 502, 918, 1, 0, 0, 0, 503, 504, 5, 17, 0, 0, 504, 505, 5, 230, 0, 0, 505, 506, 3, 28, 14, 0, 506, 507, 5, 231, 0, 0, 507, 918, 1, 0, 0, 0, 508, 509, 5, 18, 0, 0, 509, 510, 5, 230, 0, 0, 510, 511, 3, 28, 14, 0, 511, 512, 5, 231, 0, 0, 512, 918, 1, 0, 0, 0, 513, 514, 5, 23, 0, 0, 514, 515, 5, 230, 0, 0, 515, 518, 3, 28, 14, 0, 516, 517, 5, 232, 0, 0, 517, 519, 3, 28, 14, 0, 518, 516, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 5, 231, 0, 0, 521, 918, 1, 0, 0, 0, 522, 523, 5, 25, 0, 0, 523, 524, 5, 230, 0, 0, 524, 525, 3, 28, 14, 0, 525, 526, 5, 231, 0, 0, 526, 918, 1, 0, 0, 0, 527, 528, 5, 26, 0, 0, 528, 529, 5, 230, 0, 0, 529, 530, 3, 28, 14, 0, 530, 531, 5, 231, 0, 0, 531, 918, 1, 0, 0, 0, 532, 533, 5, 27, 0, 0, 533, 534, 5, 230, 0, 0, 534, 535, 3, 28, 14, 0, 535, 536, 5, 231, 0, 0, 536, 918, 1, 0, 0, 0, 537, 538, 5, 28, 0, 0, 538, 539, 5, 230, 0, 0, 539, 540, 3, 28, 14, 0, 540, 541, 5, 231, 0, 0, 541, 918, 1, 0, 0, 0, 542, 543, 5, 30, 0, 0, 543, 544, 5, 230, 0, 0, 544, 545, 3, 28, 14, 0, 545, 546, 5, 231, 0, 0, 546, 918, 1, 0, 0, 0, 547, 548, 5, 34, 0, 0, 548, 549, 5, 230, 0, 0, 549, 550, 3, 28, 14, 0, 550, 551, 5, 231, 0, 0, 551, 918, 1, 0, 0, 0, 552, 553, 5, 35, 0, 0, 553, 554, 5, 230, 0, 0, 554, 555, 3, 28, 14, 0, 555, 556, 5, 231, 0, 0, 556, 918, 1, 0, 0, 0, 557, 558, 5, 41, 0, 0, 558, 559, 5, 230, 0, 0, 559, 560, 3, 28, 14, 0, 560, 561, 5, 231, 0, 0, 561, 918, 1, 0, 0, 0, 562, 563, 5, 42, 0, 0, 563, 564, 5, 230, 0, 0, 564, 565, 3, 28, 14, 0, 565, 566, 5, 231, 0, 0, 566, 918, 1, 0, 0, 0, 567, 568, 5, 43, 0, 0, 568, 569, 5, 230, 0, 0, 569, 570, 3, 28, 14, 0, 570, 571, 5, 231, 0, 0, 571, 918, 1, 0, 0, 0, 572, 573, 5, 44, 0, 0, 573, 574, 5, 230, 0, 0, 574, 575, 3, 28, 14, 0, 575, 576, 5, 231, 0, 0, 576, 918, 1, 0, 0, 0, 577, 578, 5, 45, 0, 0, 578, 579, 5, 230, 0, 0, 579, 580, 3, 28, 14, 0, 580, 581, 5, 231, 0, 0, 581, 918, 1, 0, 0, 0, 582, 583, 5, 36, 0, 0, 583, 584, 5, 230, 0, 0, 584, 585, 3, 28, 14, 0, 585, 586, 5, 231, 0, 0, 586, 918, 1, 0, 0, 0, 587, 588, 5, 58, 0, 0, 588, 589, 5, 230, 0, 0, 589, 590, 3, 28, 14, 0, 590, 591, 5, 231, 0, 0, 591, 918, 1, 0, 0, 0, 592, 593, 5, 59, 0, 0, 593, 594, 5, 230, 0, 0, 594, 597, 3, 28, 14, 0, 595, 596, 5, 232, 0, 0, 596, 598, 3, 28, 14, 0, 597, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 600, 5, 231, 0, 0, 600, 918, 1, 0, 0, 0, 601, 602, 5, 60, 0, 0, 602, 603, 5, 230, 0, 0, 603, 604, 3, 28, 14, 0, 604, 605, 5, 231, 0, 0, 605, 918, 1, 0, 0, 0, 606, 607, 5, 61, 0, 0, 607, 608, 5, 230, 0, 0, 608, 609, 3, 28, 14, 0, 609, 610, 5, 231, 0, 0, 610, 918, 1, 0, 0, 0, 611, 612, 5, 62, 0, 0, 612, 613, 5, 230, 0, 0, 613, 614, 3, 28, 14, 0, 614, 615, 5, 231, 0, 0, 615, 918, 1, 0, 0, 0, 616, 617, 5, 168, 0, 0, 617, 618, 5, 230, 0, 0, 618, 625, 3, 28, 14, 0, 619, 620, 5, 232, 0, 0, 620, 623, 3, 28, 14, 0, 621, 622, 5, 232, 0, 0, 622, 624, 3, 28, 14, 0, 623, 621, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 626, 1, 0, 0, 0, 625, 619, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 628, 5, 231, 0, 0, 628, 918, 1, 0, 0, 0, 629, 630, 5, 70, 0, 0, 630, 631, 5, 230, 0, 0, 631, 632, 3, 28, 14, 0, 632, 633, 5, 231, 0, 0, 633, 918, 1, 0, 0, 0, 634, 635, 5, 71, 0, 0, 635, 636, 5, 230, 0, 0, 636, 637, 3, 28, 14, 0, 637, 638, 5, 231, 0, 0, 638, 918, 1, 0, 0, 0, 639, 640, 5, 72, 0, 0, 640, 641, 5, 230, 0, 0, 641, 644, 3, 28, 14, 0, 642, 643, 5, 232, 0, 0, 643, 645, 3, 28, 14, 0, 644, 642, 1, 0, 0, 0, 644, 645, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 647, 5, 231, 0, 0, 647, 918, 1, 0, 0, 0, 648, 649, 5, 74, 0, 0, 649, 650, 5, 230, 0, 0, 650, 651, 3, 28, 14, 0, 651, 652, 5, 231, 0, 0, 652, 918, 1, 0, 0, 0, 653, 654, 5, 75, 0, 0, 654, 655, 5, 230, 0, 0, 655, 656, 3, 28, 14, 0, 656, 657, 5, 231, 0, 0, 657, 918, 1, 0, 0, 0, 658, 659, 5, 76, 0, 0, 659, 660, 5, 230, 0, 0, 660, 663, 3, 28, 14, 0, 661, 662, 5, 232, 0, 0, 662, 664, 3, 28, 14, 0, 663, 661, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 666, 5, 231, 0, 0, 666, 918, 1, 0, 0, 0, 667, 668, 5, 87, 0, 0, 668, 669, 5, 230, 0, 0, 669, 670, 3, 28, 14, 0, 670, 671, 5, 231, 0, 0, 671, 918, 1, 0, 0, 0, 672, 673, 5, 88, 0, 0, 673, 674, 5, 230, 0, 0, 674, 675, 3, 28, 14, 0, 675, 676, 5, 231, 0, 0, 676, 918, 1, 0, 0, 0, 677, 678, 5, 89, 0, 0, 678, 679, 5, 230, 0, 0, 679, 680, 3, 28, 14, 0, 680, 681, 5, 231, 0, 0, 681, 918, 1, 0, 0, 0, 682, 683, 5, 90, 0, 0, 683, 684, 5, 230, 0, 0, 684, 685, 3, 28, 14, 0, 685, 686, 5, 231, 0, 0, 686, 918, 1, 0, 0, 0, 687, 688, 5, 91, 0, 0, 688, 689, 5, 230, 0, 0, 689, 690, 3, 28, 14, 0, 690, 691, 5, 231, 0, 0, 691, 918, 1, 0, 0, 0, 692, 693, 5, 96, 0, 0, 693, 694, 5, 230, 0, 0, 694, 695, 3, 28, 14, 0, 695, 696, 5, 232, 0, 0, 696, 699, 3, 28, 14, 0, 697, 698, 5, 232, 0, 0, 698, 700, 3, 28, 14, 0, 699, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 701, 1, 0, 0, 0, 701, 702, 5, 231, 0, 0, 702, 918, 1, 0, 0, 0, 703, 704, 5, 77, 0, 0, 704, 705, 5, 230, 0, 0, 705, 706, 3, 28, 14, 0, 706, 707, 5, 231, 0, 0, 707, 918, 1, 0, 0, 0, 708, 709, 5, 123, 0, 0, 709, 710, 5, 230, 0, 0, 710, 711, 3, 28, 14, 0, 711, 712, 5, 231, 0, 0, 712, 918, 1, 0, 0, 0, 713, 714, 5, 124, 0, 0, 714, 715, 5, 230, 0, 0, 715, 716, 3, 28, 14, 0, 716, 717, 5, 231, 0, 0, 717, 918, 1, 0, 0, 0, 718, 719, 5, 125, 0, 0, 719, 720, 5, 230, 0, 0, 720, 721, 3, 28, 14, 0, 721, 722, 5, 231, 0, 0, 722, 918, 1, 0, 0, 0, 723, 724, 5, 126, 0, 0, 724, 725, 5, 230, 0, 0, 725, 726, 3, 28, 14, 0, 726, 727, 5, 231, 0, 0, 727, 918, 1, 0, 0, 0, 728, 729, 5, 169, 0, 0, 729, 730, 5, 230, 0, 0, 730, 737, 3, 28, 14, 0, 731, 732, 5, 232, 0, 0, 732, 735, 3, 28, 14, 0, 733, 734, 5, 232, 0, 0, 734, 736, 3, 28, 14, 0, 735, 733, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 738, 1, 0, 0, 0, 737, 731, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 739, 1, 0, 0, 0, 739, 740, 5, 231, 0, 0, 740, 918, 1, 0, 0, 0, 741, 742, 5, 170, 0, 0, 742, 743, 5, 230, 0, 0, 743, 746, 3, 28, 14, 0, 744, 745, 5, 232, 0, 0, 745, 747, 3, 28, 14, 0, 746, 744, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 748, 1, 0, 0, 0, 748, 749, 5, 231, 0, 0, 749, 918, 1, 0, 0, 0, 750, 751, 5, 171, 0, 0, 751, 752, 5, 230, 0, 0, 752, 755, 3, 28, 14, 0, 753, 754, 5, 232, 0, 0, 754, 756, 3, 28, 14, 0, 755, 753, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 758, 5, 231, 0, 0, 758, 918, 1, 0, 0, 0, 759, 760, 5, 172, 0, 0, 760, 761, 5, 230, 0, 0, 761, 764, 3, 28, 14, 0, 762, 763, 5, 232, 0, 0, 763, 765, 3, 28, 14, 0, 764, 762, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 767, 5, 231, 0, 0, 767, 918, 1, 0, 0, 0, 768, 769, 5, 173, 0, 0, 769, 770, 5, 230, 0, 0, 770, 773, 3, 28, 14, 0, 771, 772, 5, 232, 0, 0, 772, 774, 3, 28, 14, 0, 773, 771, 1, 0, 0, 0, 773, 774, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, 5, 231, 0, 0, 776, 918, 1, 0, 0, 0, 777, 778, 5, 68, 0, 0, 778, 779, 5, 230, 0, 0, 779, 780, 3, 28, 14, 0, 780, 781, 5, 231, 0, 0, 781, 918, 1, 0, 0, 0, 782, 783, 5, 69, 0, 0, 783, 784, 5, 230, 0, 0, 784, 785, 3, 28, 14, 0, 785, 786, 5, 231, 0, 0, 786, 918, 1, 0, 0, 0, 787, 788, 5, 174, 0, 0, 788, 789, 5, 230, 0, 0, 789, 790, 3, 28, 14, 0, 790, 791, 5, 231, 0, 0, 791, 918, 1, 0, 0, 0, 792, 793, 5, 97, 0, 0, 793, 794, 5, 230, 0, 0, 794, 795, 3, 28, 14, 0, 795, 796, 5, 231, 0, 0, 796, 918, 1, 0, 0, 0, 797, 798, 5, 102, 0, 0, 798, 799, 5, 230, 0, 0, 799, 800, 3, 28, 14, 0, 800, 801, 5, 231, 0, 0, 801, 918, 1, 0, 0, 0, 802, 803, 5, 103, 0, 0, 803, 804, 5, 230, 0, 0, 804, 805, 3, 28, 14, 0, 805, 806, 5, 231, 0, 0, 806, 918, 1, 0, 0, 0, 807, 808, 5, 113, 0, 0, 808, 809, 5, 230, 0, 0, 809, 810, 3, 28, 14, 0, 810, 811, 5, 231, 0, 0, 811, 918, 1, 0, 0, 0, 812, 813, 5, 114, 0, 0, 813, 814, 5, 230, 0, 0, 814, 815, 3, 28, 14, 0, 815, 816, 5, 231, 0, 0, 816, 918, 1, 0, 0, 0, 817, 818, 5, 115, 0, 0, 818, 819, 5, 230, 0, 0, 819, 820, 3, 28, 14, 0, 820, 821, 5, 231, 0, 0, 821, 918, 1, 0, 0, 0, 822, 823, 5, 132, 0, 0, 823, 824, 5, 230, 0, 0, 824, 825, 3, 28, 14, 0, 825, 826, 5, 231, 0, 0, 826, 918, 1, 0, 0, 0, 827, 828, 5, 133, 0, 0, 828, 829, 5, 230, 0, 0, 829, 830, 3, 28, 14, 0, 830, 831, 5, 231, 0, 0, 831, 918, 1, 0, 0, 0, 832, 833, 5, 134, 0, 0, 833, 834, 5, 230, 0, 0, 834, 835, 3, 28, 14, 0, 835, 836, 5, 231, 0, 0, 836, 918, 1, 0, 0, 0, 837, 838, 5, 183, 0, 0, 838, 839, 5, 230, 0, 0, 839, 840, 3, 28, 14, 0, 840, 841, 5, 231, 0, 0, 841, 918, 1, 0, 0, 0, 842, 843, 5, 32, 0, 0, 843, 844, 5, 230, 0, 0, 844, 845, 3, 28, 14, 0, 845, 846, 5, 231, 0, 0, 846, 918, 1, 0, 0, 0, 847, 848, 5, 140, 0, 0, 848, 849, 5, 230, 0, 0, 849, 852, 3, 28, 14, 0, 850, 851, 5, 232, 0, 0, 851, 853, 3, 28, 14, 0, 852, 850, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 5, 231, 0, 0, 855, 918, 1, 0, 0, 0, 856, 857, 5, 141, 0, 0, 857, 858, 5, 230, 0, 0, 858, 861, 3, 28, 14, 0, 859, 860, 5, 232, 0, 0, 860, 862, 3, 28, 14, 0, 861, 859, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 864, 5, 231, 0, 0, 864, 918, 1, 0, 0, 0, 865, 866, 5, 142, 0, 0, 866, 867, 5, 230, 0, 0, 867, 870, 3, 28, 14, 0, 868, 869, 5, 232, 0, 0, 869, 871, 3, 28, 14, 0, 870, 868, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 873, 5, 231, 0, 0, 873, 918, 1, 0, 0, 0, 874, 875, 5, 143, 0, 0, 875, 876, 5, 230, 0, 0, 876, 879, 3, 28, 14, 0, 877, 878, 5, 232, 0, 0, 878, 880, 3, 28, 14, 0, 879, 877, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 881, 1, 0, 0, 0, 881, 882, 5, 231, 0, 0, 882, 918, 1, 0, 0, 0, 883, 884, 5, 130, 0, 0, 884, 885, 5, 230, 0, 0, 885, 886, 3, 28, 14, 0, 886, 887, 5, 231, 0, 0, 887, 918, 1, 0, 0, 0, 888, 889, 5, 131, 0, 0, 889, 890, 5, 230, 0, 0, 890, 891, 3, 28, 14, 0, 891, 892, 5, 231, 0, 0, 892, 918, 1, 0, 0, 0, 893, 894, 5, 104, 0, 0, 894, 895, 5, 230, 0, 0, 895, 896, 3, 28, 14, 0, 896, 897, 5, 231, 0, 0, 897, 918, 1, 0, 0, 0, 898, 899, 5, 105, 0, 0, 899, 900, 5, 230, 0, 0, 900, 901, 3, 28, 14, 0, 901, 902, 5, 231, 0, 0, 902, 918, 1, 0, 0, 0, 903, 904, 5, 156, 0, 0, 904, 905, 5, 230, 0, 0, 905, 906, 3, 28, 14, 0, 906, 907, 5, 231, 0, 0, 907, 918, 1, 0, 0, 0, 908, 909, 5, 157, 0, 0, 909, 910, 5, 230, 0, 0, 910, 913, 3, 28, 14, 0, 911, 912, 5, 232, 0, 0, 912, 914, 3, 28, 14, 0, 913, 911, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 915, 1, 0, 0, 0, 915, 916, 5, 231, 0, 0, 916, 918, 1, 0, 0, 0, 917, 428, 1, 0, 0, 0, 917, 433, 1, 0, 0, 0, 917, 438, 1, 0, 0, 0, 917, 443, 1, 0, 0, 0, 917, 448, 1, 0, 0, 0, 917, 453, 1, 0, 0, 0, 917, 458, 1, 0, 0, 0, 917, 463, 1, 0, 0, 0, 917, 468, 1, 0, 0, 0, 917, 473, 1, 0, 0, 0, 917, 478, 1, 0, 0, 0, 917, 483, 1, 0, 0, 0, 917, 488, 1, 0, 0, 0, 917, 493, 1, 0, 0, 0, 917, 498, 1, 0, 0, 0, 917, 503, 1, 0, 0, 0, 917, 508, 1, 0, 0, 0, 917, 513, 1, 0, 0, 0, 917, 522, 1, 0, 0, 0, 917, 527, 1, 0, 0, 0, 917, 532, 1, 0, 0, 0, 917, 537, 1, 0, 0, 0, 917, 542, 1, 0, 0, 0, 917, 547, 1, 0, 0, 0, 917, 552, 1, 0, 0, 0, 917, 557, 1, 0, 0, 0, 917, 562, 1, 0, 0, 0, 917, 567, 1, 0, 0, 0, 917, 572, 1, 0, 0, 0, 917, 577, 1, 0, 0, 0, 917, 582, 1, 0, 0, 0, 917, 587, 1, 0, 0, 0, 917, 592, 1, 0, 0, 0, 917, 601, 1, 0, 0, 0, 917, 606, 1, 0, 0, 0, 917, 611, 1, 0, 0, 0, 917, 616, 1, 0, 0, 0, 917, 629, 1, 0, 0, 0, 917, 634, 1, 0, 0, 0, 917, 639, 1, 0, 0, 0, 917, 648, 1, 0, 0, 0, 917, 653, 1, 0, 0, 0, 917, 658, 1, 0, 0, 0, 917, 667, 1, 0, 0, 0, 917, 672, 1, 0, 0, 0, 917, 677, 1, 0, 0, 0, 917, 682, 1, 0, 0, 0, 917, 687, 1, 0, 0, 0, 917, 692, 1, 0, 0, 0, 917, 703, 1, 0, 0, 0, 917, 708, 1, 0, 0, 0, 917, 713, 1, 0, 0, 0, 917, 718, 1, 0, 0, 0, 917, 723, 1, 0, 0, 0, 917, 728, 1, 0, 0, 0, 917, 741, 1, 0, 0, 0, 917, 750, 1, 0, 0, 0, 917, 759, 1, 0, 0, 0, 917, 768, 1, 0, 0, 0, 917, 777, 1, 0, 0, 0, 917, 782, 1, 0, 0, 0, 917, 787, 1, 0, 0, 0, 917, 792, 1, 0, 0, 0, 917, 797, 1, 0, 0, 0, 917, 802, 1, 0, 0, 0, 917, 807, 1, 0, 0, 0, 917, 812, 1, 0, 0, 0, 917, 817, 1, 0, 0, 0, 917, 822, 1, 0, 0, 0, 917, 827, 1, 0, 0, 0, 917, 832, 1, 0, 0, 0, 917, 837, 1, 0, 0, 0, 917, 842, 1, 0, 0, 0, 917, 847, 1, 0, 0, 0, 917, 856, 1, 0, 0, 0, 917, 865, 1, 0, 0, 0, 917, 874, 1, 0, 0, 0, 917, 883, 1, 0, 0, 0, 917, 888, 1, 0, 0, 0, 917, 893, 1, 0, 0, 0, 917, 898, 1, 0, 0, 0, 917, 903, 1, 0, 0, 0, 917, 908, 1, 0, 0, 0, 918, 57, 1, 0, 0, 0, 919, 920, 5, 29, 0, 0, 920, 921, 5, 230, 0, 0, 921, 922, 3, 28, 14, 0, 922, 923, 5, 232, 0, 0, 923, 924, 3, 28, 14, 0, 924, 925, 5, 231, 0, 0, 925, 1288, 1, 0, 0, 0, 926, 927, 5, 7, 0, 0, 927, 928, 5, 230, 0, 0, 928, 929, 3, 28, 14, 0, 929, 930, 5, 232, 0, 0, 930, 931, 3, 28, 14, 0, 931, 932, 5, 231, 0, 0, 932, 1288, 1, 0, 0, 0, 933, 934, 5, 21, 0, 0, 934, 935, 5, 230, 0, 0, 935, 936, 3, 28, 14, 0, 936, 937, 5, 232, 0, 0, 937, 938, 3, 28, 14, 0, 938, 939, 5, 231, 0, 0, 939, 1288, 1, 0, 0, 0, 940, 941, 5, 22, 0, 0, 941, 942, 5, 230, 0, 0, 942, 943, 3, 28, 14, 0, 943, 944, 5, 232, 0, 0, 944, 945, 3, 28, 14, 0, 945, 946, 5, 231, 0, 0, 946, 1288, 1, 0, 0, 0, 947, 948, 5, 24, 0, 0, 948, 949, 5, 230, 0, 0, 949, 952, 3, 28, 14, 0, 950, 951, 5, 232, 0, 0, 951, 953, 3, 28, 14, 0, 952, 950, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 954, 1, 0, 0, 0, 954, 955, 5, 231, 0, 0, 955, 1288, 1, 0, 0, 0, 956, 957, 5, 39, 0, 0, 957, 958, 5, 230, 0, 0, 958, 959, 3, 28, 14, 0, 959, 960, 5, 232, 0, 0, 960, 961, 3, 28, 14, 0, 961, 962, 5, 231, 0, 0, 962, 1288, 1, 0, 0, 0, 963, 964, 5, 56, 0, 0, 964, 965, 5, 230, 0, 0, 965, 966, 3, 28, 14, 0, 966, 967, 5, 232, 0, 0, 967, 968, 3, 28, 14, 0, 968, 969, 5, 231, 0, 0, 969, 1288, 1, 0, 0, 0, 970, 971, 5, 57, 0, 0, 971, 972, 5, 230, 0, 0, 972, 973, 3, 28, 14, 0, 973, 974, 5, 232, 0, 0, 974, 975, 3, 28, 14, 0, 975, 976, 5, 231, 0, 0, 976, 1288, 1, 0, 0, 0, 977, 978, 5, 63, 0, 0, 978, 979, 5, 230, 0, 0, 979, 980, 3, 28, 14, 0, 980, 981, 5, 232, 0, 0, 981, 982, 3, 28, 14, 0, 982, 983, 5, 231, 0, 0, 983, 1288, 1, 0, 0, 0, 984, 985, 5, 64, 0, 0, 985, 986, 5, 230, 0, 0, 986, 987, 3, 28, 14, 0, 987, 988, 5, 232, 0, 0, 988, 989, 3, 28, 14, 0, 989, 990, 5, 231, 0, 0, 990, 1288, 1, 0, 0, 0, 991, 992, 5, 65, 0, 0, 992, 993, 5, 230, 0, 0, 993, 994, 3, 28, 14, 0, 994, 995, 5, 232, 0, 0, 995, 996, 3, 28, 14, 0, 996, 997, 5, 231, 0, 0, 997, 1288, 1, 0, 0, 0, 998, 999, 5, 66, 0, 0, 999, 1000, 5, 230, 0, 0, 1000, 1001, 3, 28, 14, 0, 1001, 1002, 5, 232, 0, 0, 1002, 1003, 3, 28, 14, 0, 1003, 1004, 5, 231, 0, 0, 1004, 1288, 1, 0, 0, 0, 1005, 1006, 5, 86, 0, 0, 1006, 1007, 5, 230, 0, 0, 1007, 1008, 3, 28, 14, 0, 1008, 1009, 5, 232, 0, 0, 1009, 1010, 3, 28, 14, 0, 1010, 1011, 5, 231, 0, 0, 1011, 1288, 1, 0, 0, 0, 1012, 1013, 5, 176, 0, 0, 1013, 1014, 5, 230, 0, 0, 1014, 1015, 3, 28, 14, 0, 1015, 1016, 5, 232, 0, 0, 1016, 1017, 3, 28, 14, 0, 1017, 1018, 5, 231, 0, 0, 1018, 1288, 1, 0, 0, 0, 1019, 1020, 5, 177, 0, 0, 1020, 1021, 5, 230, 0, 0, 1021, 1022, 3, 28, 14, 0, 1022, 1023, 5, 232, 0, 0, 1023, 1024, 3, 28, 14, 0, 1024, 1025, 5, 231, 0, 0, 1025, 1288, 1, 0, 0, 0, 1026, 1027, 5, 175, 0, 0, 1027, 1028, 5, 230, 0, 0, 1028, 1029, 3, 28, 14, 0, 1029, 1030, 5, 232, 0, 0, 1030, 1031, 3, 28, 14, 0, 1031, 1032, 5, 231, 0, 0, 1032, 1288, 1, 0, 0, 0, 1033, 1034, 5, 181, 0, 0, 1034, 1035, 5, 230, 0, 0, 1035, 1036, 3, 28, 14, 0, 1036, 1037, 5, 232, 0, 0, 1037, 1038, 3, 28, 14, 0, 1038, 1039, 5, 231, 0, 0, 1039, 1288, 1, 0, 0, 0, 1040, 1041, 5, 182, 0, 0, 1041, 1042, 5, 230, 0, 0, 1042, 1043, 3, 28, 14, 0, 1043, 1044, 5, 232, 0, 0, 1044, 1045, 3, 28, 14, 0, 1045, 1046, 5, 231, 0, 0, 1046, 1288, 1, 0, 0, 0, 1047, 1048, 5, 98, 0, 0, 1048, 1049, 5, 230, 0, 0, 1049, 1050, 3, 28, 14, 0, 1050, 1051, 5, 232, 0, 0, 1051, 1052, 3, 28, 14, 0, 1052, 1053, 5, 231, 0, 0, 1053, 1288, 1, 0, 0, 0, 1054, 1055, 5, 120, 0, 0, 1055, 1056, 5, 230, 0, 0, 1056, 1057, 3, 28, 14, 0, 1057, 1058, 5, 232, 0, 0, 1058, 1059, 3, 28, 14, 0, 1059, 1060, 5, 232, 0, 0, 1060, 1061, 3, 28, 14, 0, 1061, 1062, 5, 231, 0, 0, 1062, 1288, 1, 0, 0, 0, 1063, 1064, 5, 51, 0, 0, 1064, 1065, 5, 230, 0, 0, 1065, 1066, 3, 28, 14, 0, 1066, 1067, 5, 232, 0, 0, 1067, 1068, 3, 28, 14, 0, 1068, 1069, 5, 231, 0, 0, 1069, 1288, 1, 0, 0, 0, 1070, 1071, 5, 73, 0, 0, 1071, 1072, 5, 230, 0, 0, 1072, 1073, 3, 28, 14, 0, 1073, 1074, 5, 232, 0, 0, 1074, 1077, 3, 28, 14, 0, 1075, 1076, 5, 232, 0, 0, 1076, 1078, 3, 28, 14, 0, 1077, 1075, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1080, 5, 231, 0, 0, 1080, 1288, 1, 0, 0, 0, 1081, 1082, 5, 78, 0, 0, 1082, 1083, 5, 230, 0, 0, 1083, 1084, 3, 28, 14, 0, 1084, 1085, 5, 232, 0, 0, 1085, 1086, 3, 28, 14, 0, 1086, 1087, 5, 231, 0, 0, 1087, 1288, 1, 0, 0, 0, 1088, 1089, 5, 79, 0, 0, 1089, 1090, 5, 230, 0, 0, 1090, 1091, 3, 28, 14, 0, 1091, 1092, 5, 232, 0, 0, 1092, 1093, 3, 28, 14, 0, 1093, 1094, 5, 231, 0, 0, 1094, 1288, 1, 0, 0, 0, 1095, 1096, 5, 101, 0, 0, 1096, 1097, 5, 230, 0, 0, 1097, 1098, 3, 28, 14, 0, 1098, 1099, 5, 232, 0, 0, 1099, 1100, 3, 28, 14, 0, 1100, 1101, 5, 231, 0, 0, 1101, 1288, 1, 0, 0, 0, 1102, 1103, 5, 122, 0, 0, 1103, 1104, 5, 230, 0, 0, 1104, 1105, 3, 28, 14, 0, 1105, 1106, 5, 232, 0, 0, 1106, 1107, 3, 28, 14, 0, 1107, 1108, 5, 231, 0, 0, 1108, 1288, 1, 0, 0, 0, 1109, 1110, 5, 99, 0, 0, 1110, 1111, 5, 230, 0, 0, 1111, 1112, 3, 28, 14, 0, 1112, 1113, 5, 232, 0, 0, 1113, 1114, 3, 28, 14, 0, 1114, 1115, 5, 231, 0, 0, 1115, 1288, 1, 0, 0, 0, 1116, 1117, 5, 119, 0, 0, 1117, 1118, 5, 230, 0, 0, 1118, 1125, 3, 46, 23, 0, 1119, 1120, 5, 232, 0, 0, 1120, 1123, 3, 28, 14, 0, 1121, 1122, 5, 232, 0, 0, 1122, 1124, 3, 28, 14, 0, 1123, 1121, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 1126, 1, 0, 0, 0, 1125, 1119, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1126, 1127, 1, 0, 0, 0, 1127, 1128, 5, 231, 0, 0, 1128, 1288, 1, 0, 0, 0, 1129, 1130, 5, 109, 0, 0, 1130, 1131, 5, 230, 0, 0, 1131, 1132, 3, 28, 14, 0, 1132, 1133, 5, 232, 0, 0, 1133, 1134, 3, 28, 14, 0, 1134, 1135, 5, 231, 0, 0, 1135, 1288, 1, 0, 0, 0, 1136, 1137, 5, 110, 0, 0, 1137, 1138, 5, 230, 0, 0, 1138, 1139, 3, 28, 14, 0, 1139, 1140, 5, 232, 0, 0, 1140, 1141, 3, 28, 14, 0, 1141, 1142, 5, 231, 0, 0, 1142, 1288, 1, 0, 0, 0, 1143, 1144, 5, 111, 0, 0, 1144, 1145, 5, 230, 0, 0, 1145, 1146, 3, 28, 14, 0, 1146, 1147, 5, 232, 0, 0, 1147, 1148, 3, 28, 14, 0, 1148, 1149, 5, 231, 0, 0, 1149, 1288, 1, 0, 0, 0, 1150, 1151, 5, 100, 0, 0, 1151, 1152, 5, 230, 0, 0, 1152, 1153, 3, 28, 14, 0, 1153, 1154, 5, 232, 0, 0, 1154, 1155, 3, 28, 14, 0, 1155, 1156, 5, 231, 0, 0, 1156, 1288, 1, 0, 0, 0, 1157, 1158, 5, 112, 0, 0, 1158, 1159, 5, 230, 0, 0, 1159, 1160, 3, 28, 14, 0, 1160, 1161, 5, 232, 0, 0, 1161, 1172, 3, 28, 14, 0, 1162, 1163, 5, 232, 0, 0, 1163, 1170, 3, 28, 14, 0, 1164, 1165, 5, 232, 0, 0, 1165, 1168, 3, 28, 14, 0, 1166, 1167, 5, 232, 0, 0, 1167, 1169, 3, 28, 14, 0, 1168, 1166, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1171, 1, 0, 0, 0, 1170, 1164, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1173, 1, 0, 0, 0, 1172, 1162, 1, 0, 0, 0, 1172, 1173, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1175, 5, 231, 0, 0, 1175, 1288, 1, 0, 0, 0, 1176, 1177, 5, 116, 0, 0, 1177, 1178, 5, 230, 0, 0, 1178, 1179, 3, 28, 14, 0, 1179, 1180, 5, 232, 0, 0, 1180, 1181, 3, 28, 14, 0, 1181, 1182, 5, 231, 0, 0, 1182, 1288, 1, 0, 0, 0, 1183, 1184, 5, 117, 0, 0, 1184, 1185, 5, 230, 0, 0, 1185, 1186, 3, 28, 14, 0, 1186, 1187, 5, 232, 0, 0, 1187, 1188, 3, 28, 14, 0, 1188, 1189, 5, 231, 0, 0, 1189, 1288, 1, 0, 0, 0, 1190, 1191, 5, 118, 0, 0, 1191, 1192, 5, 230, 0, 0, 1192, 1193, 3, 28, 14, 0, 1193, 1194, 5, 232, 0, 0, 1194, 1195, 3, 28, 14, 0, 1195, 1196, 5, 231, 0, 0, 1196, 1288, 1, 0, 0, 0, 1197, 1198, 5, 135, 0, 0, 1198, 1199, 5, 230, 0, 0, 1199, 1202, 3, 28, 14, 0, 1200, 1201, 5, 232, 0, 0, 1201, 1203, 3, 28, 14, 0, 1202, 1200, 1, 0, 0, 0, 1202, 1203, 1, 0, 0, 0, 1203, 1204, 1, 0, 0, 0, 1204, 1205, 5, 231, 0, 0, 1205, 1288, 1, 0, 0, 0, 1206, 1207, 5, 136, 0, 0, 1207, 1208, 5, 230, 0, 0, 1208, 1211, 3, 28, 14, 0, 1209, 1210, 5, 232, 0, 0, 1210, 1212, 3, 28, 14, 0, 1211, 1209, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 1, 0, 0, 0, 1213, 1214, 5, 231, 0, 0, 1214, 1288, 1, 0, 0, 0, 1215, 1216, 5, 137, 0, 0, 1216, 1217, 5, 230, 0, 0, 1217, 1218, 3, 28, 14, 0, 1218, 1219, 5, 232, 0, 0, 1219, 1222, 3, 28, 14, 0, 1220, 1221, 5, 232, 0, 0, 1221, 1223, 3, 28, 14, 0, 1222, 1220, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1225, 5, 231, 0, 0, 1225, 1288, 1, 0, 0, 0, 1226, 1227, 5, 138, 0, 0, 1227, 1228, 5, 230, 0, 0, 1228, 1229, 3, 28, 14, 0, 1229, 1230, 5, 232, 0, 0, 1230, 1231, 3, 28, 14, 0, 1231, 1232, 5, 231, 0, 0, 1232, 1288, 1, 0, 0, 0, 1233, 1234, 5, 139, 0, 0, 1234, 1235, 5, 230, 0, 0, 1235, 1236, 3, 28, 14, 0, 1236, 1237, 5, 232, 0, 0, 1237, 1238, 3, 28, 14, 0, 1238, 1239, 5, 232, 0, 0, 1239, 1240, 3, 28, 14, 0, 1240, 1241, 5, 231, 0, 0, 1241, 1288, 1, 0, 0, 0, 1242, 1243, 5, 150, 0, 0, 1243, 1244, 5, 230, 0, 0, 1244, 1245, 3, 28, 14, 0, 1245, 1246, 5, 231, 0, 0, 1246, 1288, 1, 0, 0, 0, 1247, 1248, 5, 151, 0, 0, 1248, 1249, 5, 230, 0, 0, 1249, 1255, 3, 28, 14, 0, 1250, 1251, 5, 232, 0, 0, 1251, 1252, 3, 28, 14, 0, 1252, 1253, 5, 232, 0, 0, 1253, 1254, 3, 28, 14, 0, 1254, 1256, 1, 0, 0, 0, 1255, 1250, 1, 0, 0, 0, 1255, 1256, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1258, 5, 231, 0, 0, 1258, 1288, 1, 0, 0, 0, 1259, 1260, 5, 152, 0, 0, 1260, 1261, 5, 230, 0, 0, 1261, 1262, 3, 28, 14, 0, 1262, 1263, 5, 232, 0, 0, 1263, 1264, 3, 28, 14, 0, 1264, 1265, 5, 231, 0, 0, 1265, 1288, 1, 0, 0, 0, 1266, 1267, 5, 153, 0, 0, 1267, 1268, 5, 230, 0, 0, 1268, 1269, 3, 28, 14, 0, 1269, 1270, 5, 232, 0, 0, 1270, 1271, 3, 28, 14, 0, 1271, 1272, 5, 231, 0, 0, 1272, 1288, 1, 0, 0, 0, 1273, 1274, 5, 154, 0, 0, 1274, 1275, 5, 230, 0, 0, 1275, 1276, 3, 28, 14, 0, 1276, 1277, 5, 232, 0, 0, 1277, 1278, 3, 28, 14, 0, 1278, 1279, 5, 231, 0, 0, 1279, 1288, 1, 0, 0, 0, 1280, 1281, 5, 121, 0, 0, 1281, 1282, 5, 230, 0, 0, 1282, 1283, 3, 28, 14, 0, 1283, 1284, 5, 232, 0, 0, 1284, 1285, 3, 28, 14, 0, 1285, 1286, 5, 231, 0, 0, 1286, 1288, 1, 0, 0, 0, 1287, 919, 1, 0, 0, 0, 1287, 926, 1, 0, 0, 0, 1287, 933, 1, 0, 0, 0, 1287, 940, 1, 0, 0, 0, 1287, 947, 1, 0, 0, 0, 1287, 956, 1, 0, 0, 0, 1287, 963, 1, 0, 0, 0, 1287, 970, 1, 0, 0, 0, 1287, 977, 1, 0, 0, 0, 1287, 984, 1, 0, 0, 0, 1287, 991, 1, 0, 0, 0, 1287, 998, 1, 0, 0, 0, 1287, 1005, 1, 0, 0, 0, 1287, 1012, 1, 0, 0, 0, 1287, 1019, 1, 0, 0, 0, 1287, 1026, 1, 0, 0, 0, 1287, 1033, 1, 0, 0, 0, 1287, 1040, 1, 0, 0, 0, 1287, 1047, 1, 0, 0, 0, 1287, 1054, 1, 0, 0, 0, 1287, 1063, 1, 0, 0, 0, 1287, 1070, 1, 0, 0, 0, 1287, 1081, 1, 0, 0, 0, 1287, 1088, 1, 0, 0, 0, 1287, 1095, 1, 0, 0, 0, 1287, 1102, 1, 0, 0, 0, 1287, 1109, 1, 0, 0, 0, 1287, 1116, 1, 0, 0, 0, 1287, 1129, 1, 0, 0, 0, 1287, 1136, 1, 0, 0, 0, 1287, 1143, 1, 0, 0, 0, 1287, 1150, 1, 0, 0, 0, 1287, 1157, 1, 0, 0, 0, 1287, 1176, 1, 0, 0, 0, 1287, 1183, 1, 0, 0, 0, 1287, 1190, 1, 0, 0, 0, 1287, 1197, 1, 0, 0, 0, 1287, 1206, 1, 0, 0, 0, 1287, 1215, 1, 0, 0, 0, 1287, 1226, 1, 0, 0, 0, 1287, 1233, 1, 0, 0, 0, 1287, 1242, 1, 0, 0, 0, 1287, 1247, 1, 0, 0, 0, 1287, 1259, 1, 0, 0, 0, 1287, 1266, 1, 0, 0, 0, 1287, 1273, 1, 0, 0, 0, 1287, 1280, 1, 0, 0, 0, 1288, 59, 1, 0, 0, 0, 1289, 1290, 5, 31, 0, 0, 1290, 1291, 5, 230, 0, 0, 1291, 1292, 3, 28, 14, 0, 1292, 1293, 5, 232, 0, 0, 1293, 1294, 3, 28, 14, 0, 1294, 1295, 5, 232, 0, 0, 1295, 1296, 3, 28, 14, 0, 1296, 1297, 5, 231, 0, 0, 1297, 1595, 1, 0, 0, 0, 1298, 1299, 5, 38, 0, 0, 1299, 1300, 5, 230, 0, 0, 1300, 1301, 3, 28, 14, 0, 1301, 1302, 5, 232, 0, 0, 1302, 1303, 3, 28, 14, 0, 1303, 1304, 5, 232, 0, 0, 1304, 1305, 3, 28, 14, 0, 1305, 1306, 5, 231, 0, 0, 1306, 1595, 1, 0, 0, 0, 1307, 1308, 5, 40, 0, 0, 1308, 1309, 5, 230, 0, 0, 1309, 1310, 3, 28, 14, 0, 1310, 1311, 5, 232, 0, 0, 1311, 1312, 3, 28, 14, 0, 1312, 1313, 5, 232, 0, 0, 1313, 1314, 3, 28, 14, 0, 1314, 1315, 5, 231, 0, 0, 1315, 1595, 1, 0, 0, 0, 1316, 1317, 5, 50, 0, 0, 1317, 1318, 5, 230, 0, 0, 1318, 1319, 3, 28, 14, 0, 1319, 1320, 5, 232, 0, 0, 1320, 1321, 3, 28, 14, 0, 1321, 1322, 5, 232, 0, 0, 1322, 1323, 3, 28, 14, 0, 1323, 1324, 5, 231, 0, 0, 1324, 1595, 1, 0, 0, 0, 1325, 1326, 5, 53, 0, 0, 1326, 1327, 5, 230, 0, 0, 1327, 1328, 3, 28, 14, 0, 1328, 1329, 5, 232, 0, 0, 1329, 1330, 3, 28, 14, 0, 1330, 1331, 5, 232, 0, 0, 1331, 1332, 3, 28, 14, 0, 1332, 1333, 5, 231, 0, 0, 1333, 1595, 1, 0, 0, 0, 1334, 1335, 5, 67, 0, 0, 1335, 1336, 5, 230, 0, 0, 1336, 1337, 3, 28, 14, 0, 1337, 1338, 5, 232, 0, 0, 1338, 1339, 3, 28, 14, 0, 1339, 1340, 5, 232, 0, 0, 1340, 1341, 3, 28, 14, 0, 1341, 1342, 5, 231, 0, 0, 1342, 1595, 1, 0, 0, 0, 1343, 1344, 5, 80, 0, 0, 1344, 1345, 5, 230, 0, 0, 1345, 1346, 3, 28, 14, 0, 1346, 1347, 5, 232, 0, 0, 1347, 1348, 3, 28, 14, 0, 1348, 1349, 5, 232, 0, 0, 1349, 1350, 3, 28, 14, 0, 1350, 1351, 5, 231, 0, 0, 1351, 1595, 1, 0, 0, 0, 1352, 1353, 5, 81, 0, 0, 1353, 1354, 5, 230, 0, 0, 1354, 1355, 3, 28, 14, 0, 1355, 1356, 5, 232, 0, 0, 1356, 1357, 3, 28, 14, 0, 1357, 1358, 5, 232, 0, 0, 1358, 1359, 3, 28, 14, 0, 1359, 1360, 5, 231, 0, 0, 1360, 1595, 1, 0, 0, 0, 1361, 1362, 5, 82, 0, 0, 1362, 1363, 5, 230, 0, 0, 1363, 1364, 3, 28, 14, 0, 1364, 1365, 5, 232, 0, 0, 1365, 1366, 3, 28, 14, 0, 1366, 1367, 5, 232, 0, 0, 1367, 1368, 3, 28, 14, 0, 1368, 1369, 5, 231, 0, 0, 1369, 1595, 1, 0, 0, 0, 1370, 1371, 5, 83, 0, 0, 1371, 1372, 5, 230, 0, 0, 1372, 1373, 3, 28, 14, 0, 1373, 1374, 5, 232, 0, 0, 1374, 1375, 3, 28, 14, 0, 1375, 1376, 5, 232, 0, 0, 1376, 1377, 3, 28, 14, 0, 1377, 1378, 5, 231, 0, 0, 1378, 1595, 1, 0, 0, 0, 1379, 1380, 5, 184, 0, 0, 1380, 1381, 5, 230, 0, 0, 1381, 1382, 3, 28, 14, 0, 1382, 1383, 5, 232, 0, 0, 1383, 1384, 3, 28, 14, 0, 1384, 1385, 5, 232, 0, 0, 1385, 1386, 3, 28, 14, 0, 1386, 1387, 5, 231, 0, 0, 1387, 1595, 1, 0, 0, 0, 1388, 1389, 5, 33, 0, 0, 1389, 1390, 5, 230, 0, 0, 1390, 1393, 3, 28, 14, 0, 1391, 1392, 5, 232, 0, 0, 1392, 1394, 3, 28, 14, 0, 1393, 1391, 1, 0, 0, 0, 1393, 1394, 1, 0, 0, 0, 1394, 1395, 1, 0, 0, 0, 1395, 1396, 5, 231, 0, 0, 1396, 1595, 1, 0, 0, 0, 1397, 1398, 5, 108, 0, 0, 1398, 1399, 5, 230, 0, 0, 1399, 1400, 3, 28, 14, 0, 1400, 1401, 5, 232, 0, 0, 1401, 1402, 3, 28, 14, 0, 1402, 1403, 5, 232, 0, 0, 1403, 1406, 3, 28, 14, 0, 1404, 1405, 5, 232, 0, 0, 1405, 1407, 3, 28, 14, 0, 1406, 1404, 1, 0, 0, 0, 1406, 1407, 1, 0, 0, 0, 1407, 1408, 1, 0, 0, 0, 1408, 1409, 5, 231, 0, 0, 1409, 1595, 1, 0, 0, 0, 1410, 1411, 5, 54, 0, 0, 1411, 1412, 5, 230, 0, 0, 1412, 1413, 3, 28, 14, 0, 1413, 1414, 5, 232, 0, 0, 1414, 1415, 3, 28, 14, 0, 1415, 1416, 5, 232, 0, 0, 1416, 1417, 3, 28, 14, 0, 1417, 1418, 5, 231, 0, 0, 1418, 1595, 1, 0, 0, 0, 1419, 1420, 5, 180, 0, 0, 1420, 1421, 5, 230, 0, 0, 1421, 1422, 3, 28, 14, 0, 1422, 1423, 5, 232, 0, 0, 1423, 1426, 3, 28, 14, 0, 1424, 1425, 5, 232, 0, 0, 1425, 1427, 3, 28, 14, 0, 1426, 1424, 1, 0, 0, 0, 1426, 1427, 1, 0, 0, 0, 1427, 1428, 1, 0, 0, 0, 1428, 1429, 5, 231, 0, 0, 1429, 1595, 1, 0, 0, 0, 1430, 1431, 5, 144, 0, 0, 1431, 1432, 5, 230, 0, 0, 1432, 1438, 3, 28, 14, 0, 1433, 1434, 5, 232, 0, 0, 1434, 1435, 3, 28, 14, 0, 1435, 1436, 5, 232, 0, 0, 1436, 1437, 3, 28, 14, 0, 1437, 1439, 1, 0, 0, 0, 1438, 1433, 1, 0, 0, 0, 1438, 1439, 1, 0, 0, 0, 1439, 1440, 1, 0, 0, 0, 1440, 1441, 5, 231, 0, 0, 1441, 1595, 1, 0, 0, 0, 1442, 1443, 5, 145, 0, 0, 1443, 1444, 5, 230, 0, 0, 1444, 1450, 3, 28, 14, 0, 1445, 1446, 5, 232, 0, 0, 1446, 1447, 3, 28, 14, 0, 1447, 1448, 5, 232, 0, 0, 1448, 1449, 3, 28, 14, 0, 1449, 1451, 1, 0, 0, 0, 1450, 1445, 1, 0, 0, 0, 1450, 1451, 1, 0, 0, 0, 1451, 1452, 1, 0, 0, 0, 1452, 1453, 5, 231, 0, 0, 1453, 1595, 1, 0, 0, 0, 1454, 1455, 5, 148, 0, 0, 1455, 1456, 5, 230, 0, 0, 1456, 1462, 3, 28, 14, 0, 1457, 1458, 5, 232, 0, 0, 1458, 1459, 3, 28, 14, 0, 1459, 1460, 5, 232, 0, 0, 1460, 1461, 3, 28, 14, 0, 1461, 1463, 1, 0, 0, 0, 1462, 1457, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1466, 1, 0, 0, 0, 1464, 1465, 5, 232, 0, 0, 1465, 1467, 3, 28, 14, 0, 1466, 1464, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 1, 0, 0, 0, 1468, 1469, 5, 231, 0, 0, 1469, 1595, 1, 0, 0, 0, 1470, 1471, 5, 149, 0, 0, 1471, 1472, 5, 230, 0, 0, 1472, 1478, 3, 28, 14, 0, 1473, 1474, 5, 232, 0, 0, 1474, 1475, 3, 28, 14, 0, 1475, 1476, 5, 232, 0, 0, 1476, 1477, 3, 28, 14, 0, 1477, 1479, 1, 0, 0, 0, 1478, 1473, 1, 0, 0, 0, 1478, 1479, 1, 0, 0, 0, 1479, 1482, 1, 0, 0, 0, 1480, 1481, 5, 232, 0, 0, 1481, 1483, 3, 28, 14, 0, 1482, 1480, 1, 0, 0, 0, 1482, 1483, 1, 0, 0, 0, 1483, 1484, 1, 0, 0, 0, 1484, 1485, 5, 231, 0, 0, 1485, 1595, 1, 0, 0, 0, 1486, 1487, 5, 106, 0, 0, 1487, 1488, 5, 230, 0, 0, 1488, 1489, 3, 28, 14, 0, 1489, 1490, 5, 232, 0, 0, 1490, 1491, 3, 28, 14, 0, 1491, 1492, 5, 232, 0, 0, 1492, 1493, 3, 28, 14, 0, 1493, 1494, 5, 231, 0, 0, 1494, 1595, 1, 0, 0, 0, 1495, 1496, 5, 146, 0, 0, 1496, 1497, 5, 230, 0, 0, 1497, 1503, 3, 28, 14, 0, 1498, 1499, 5, 232, 0, 0, 1499, 1500, 3, 28, 14, 0, 1500, 1501, 5, 232, 0, 0, 1501, 1502, 3, 28, 14, 0, 1502, 1504, 1, 0, 0, 0, 1503, 1498, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 1506, 5, 231, 0, 0, 1506, 1595, 1, 0, 0, 0, 1507, 1508, 5, 147, 0, 0, 1508, 1509, 5, 230, 0, 0, 1509, 1515, 3, 28, 14, 0, 1510, 1511, 5, 232, 0, 0, 1511, 1512, 3, 28, 14, 0, 1512, 1513, 5, 232, 0, 0, 1513, 1514, 3, 28, 14, 0, 1514, 1516, 1, 0, 0, 0, 1515, 1510, 1, 0, 0, 0, 1515, 1516, 1, 0, 0, 0, 1516, 1517, 1, 0, 0, 0, 1517, 1518, 5, 231, 0, 0, 1518, 1595, 1, 0, 0, 0, 1519, 1520, 5, 155, 0, 0, 1520, 1521, 5, 230, 0, 0, 1521, 1522, 3, 28, 14, 0, 1522, 1523, 5, 232, 0, 0, 1523, 1524, 3, 28, 14, 0, 1524, 1525, 5, 232, 0, 0, 1525, 1528, 3, 28, 14, 0, 1526, 1527, 5, 232, 0, 0, 1527, 1529, 3, 28, 14, 0, 1528, 1526, 1, 0, 0, 0, 1528, 1529, 1, 0, 0, 0, 1529, 1532, 1, 0, 0, 0, 1530, 1531, 5, 232, 0, 0, 1531, 1533, 3, 28, 14, 0, 1532, 1530, 1, 0, 0, 0, 1532, 1533, 1, 0, 0, 0, 1533, 1536, 1, 0, 0, 0, 1534, 1535, 5, 232, 0, 0, 1535, 1537, 3, 28, 14, 0, 1536, 1534, 1, 0, 0, 0, 1536, 1537, 1, 0, 0, 0, 1537, 1540, 1, 0, 0, 0, 1538, 1539, 5, 232, 0, 0, 1539, 1541, 3, 28, 14, 0, 1540, 1538, 1, 0, 0, 0, 1540, 1541, 1, 0, 0, 0, 1541, 1544, 1, 0, 0, 0, 1542, 1543, 5, 232, 0, 0, 1543, 1545, 3, 28, 14, 0, 1544, 1542, 1, 0, 0, 0, 1544, 1545, 1, 0, 0, 0, 1545, 1548, 1, 0, 0, 0, 1546, 1547, 5, 232, 0, 0, 1547, 1549, 3, 28, 14, 0, 1548, 1546, 1, 0, 0, 0, 1548, 1549, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 1551, 5, 231, 0, 0, 1551, 1595, 1, 0, 0, 0, 1552, 1553, 5, 186, 0, 0, 1553, 1554, 5, 230, 0, 0, 1554, 1555, 3, 28, 14, 0, 1555, 1556, 5, 232, 0, 0, 1556, 1559, 3, 28, 14, 0, 1557, 1558, 5, 232, 0, 0, 1558, 1560, 3, 28, 14, 0, 1559, 1557, 1, 0, 0, 0, 1559, 1560, 1, 0, 0, 0, 1560, 1561, 1, 0, 0, 0, 1561, 1562, 5, 231, 0, 0, 1562, 1595, 1, 0, 0, 0, 1563, 1564, 5, 187, 0, 0, 1564, 1565, 5, 230, 0, 0, 1565, 1566, 3, 28, 14, 0, 1566, 1567, 5, 232, 0, 0, 1567, 1568, 3, 28, 14, 0, 1568, 1569, 5, 232, 0, 0, 1569, 1570, 3, 28, 14, 0, 1570, 1571, 5, 231, 0, 0, 1571, 1595, 1, 0, 0, 0, 1572, 1573, 5, 188, 0, 0, 1573, 1574, 5, 230, 0, 0, 1574, 1575, 3, 28, 14, 0, 1575, 1576, 5, 232, 0, 0, 1576, 1577, 3, 28, 14, 0, 1577, 1578, 5, 232, 0, 0, 1578, 1579, 3, 28, 14, 0, 1579, 1580, 5, 232, 0, 0, 1580, 1581, 3, 28, 14, 0, 1581, 1582, 5, 231, 0, 0, 1582, 1595, 1, 0, 0, 0, 1583, 1584, 5, 189, 0, 0, 1584, 1585, 5, 230, 0, 0, 1585, 1586, 3, 28, 14, 0, 1586, 1587, 5, 232, 0, 0, 1587, 1588, 3, 28, 14, 0, 1588, 1589, 5, 232, 0, 0, 1589, 1590, 3, 28, 14, 0, 1590, 1591, 5, 232, 0, 0, 1591, 1592, 3, 28, 14, 0, 1592, 1593, 5, 231, 0, 0, 1593, 1595, 1, 0, 0, 0, 1594, 1289, 1, 0, 0, 0, 1594, 1298, 1, 0, 0, 0, 1594, 1307, 1, 0, 0, 0, 1594, 1316, 1, 0, 0, 0, 1594, 1325, 1, 0, 0, 0, 1594, 1334, 1, 0, 0, 0, 1594, 1343, 1, 0, 0, 0, 1594, 1352, 1, 0, 0, 0, 1594, 1361, 1, 0, 0, 0, 1594, 1370, 1, 0, 0, 0, 1594, 1379, 1, 0, 0, 0, 1594, 1388, 1, 0, 0, 0, 1594, 1397, 1, 0, 0, 0, 1594, 1410, 1, 0, 0, 0, 1594, 1419, 1, 0, 0, 0, 1594, 1430, 1, 0, 0, 0, 1594, 1442, 1, 0, 0, 0, 1594, 1454, 1, 0, 0, 0, 1594, 1470, 1, 0, 0, 0, 1594, 1486, 1, 0, 0, 0, 1594, 1495, 1, 0, 0, 0, 1594, 1507, 1, 0, 0, 0, 1594, 1519, 1, 0, 0, 0, 1594, 1552, 1, 0, 0, 0, 1594, 1563, 1, 0, 0, 0, 1594, 1572, 1, 0, 0, 0, 1594, 1583, 1, 0, 0, 0, 1595, 61, 1, 0, 0, 0, 1596, 1597, 5, 49, 0, 0, 1597, 1598, 5, 230, 0, 0, 1598, 1599, 3, 28, 14, 0, 1599, 1600, 5, 232, 0, 0, 1600, 1601, 3, 28, 14, 0, 1601, 1602, 5, 232, 0, 0, 1602, 1603, 3, 28, 14, 0, 1603, 1604, 5, 232, 0, 0, 1604, 1605, 3, 28, 14, 0, 1605, 1606, 5, 231, 0, 0, 1606, 1652, 1, 0, 0, 0, 1607, 1608, 5, 37, 0, 0, 1608, 1609, 5, 230, 0, 0, 1609, 1610, 3, 28, 14, 0, 1610, 1611, 5, 232, 0, 0, 1611, 1612, 3, 28, 14, 0, 1612, 1613, 5, 232, 0, 0, 1613, 1614, 3, 28, 14, 0, 1614, 1615, 5, 232, 0, 0, 1615, 1616, 3, 28, 14, 0, 1616, 1617, 5, 231, 0, 0, 1617, 1652, 1, 0, 0, 0, 1618, 1619, 5, 55, 0, 0, 1619, 1620, 5, 230, 0, 0, 1620, 1621, 3, 28, 14, 0, 1621, 1622, 5, 232, 0, 0, 1622, 1623, 3, 28, 14, 0, 1623, 1624, 5, 232, 0, 0, 1624, 1625, 3, 28, 14, 0, 1625, 1626, 5, 232, 0, 0, 1626, 1627, 3, 28, 14, 0, 1627, 1628, 5, 231, 0, 0, 1628, 1652, 1, 0, 0, 0, 1629, 1630, 5, 84, 0, 0, 1630, 1631, 5, 230, 0, 0, 1631, 1632, 3, 28, 14, 0, 1632, 1633, 5, 232, 0, 0, 1633, 1634, 3, 28, 14, 0, 1634, 1635, 5, 232, 0, 0, 1635, 1636, 3, 28, 14, 0, 1636, 1637, 5, 232, 0, 0, 1637, 1638, 3, 28, 14, 0, 1638, 1639, 5, 231, 0, 0, 1639, 1652, 1, 0, 0, 0, 1640, 1641, 5, 107, 0, 0, 1641, 1642, 5, 230, 0, 0, 1642, 1643, 3, 28, 14, 0, 1643, 1644, 5, 232, 0, 0, 1644, 1645, 3, 28, 14, 0, 1645, 1646, 5, 232, 0, 0, 1646, 1647, 3, 28, 14, 0, 1647, 1648, 5, 232, 0, 0, 1648, 1649, 3, 28, 14, 0, 1649, 1650, 5, 231, 0, 0, 1650, 1652, 1, 0, 0, 0, 1651, 1596, 1, 0, 0, 0, 1651, 1607, 1, 0, 0, 0, 1651, 1618, 1, 0, 0, 0, 1651, 1629, 1, 0, 0, 0, 1651, 1640, 1, 0, 0, 0, 1652, 63, 1, 0, 0, 0, 1653, 1654, 5, 85, 0, 0, 1654, 1655, 5, 230, 0, 0, 1655, 1656, 3, 28, 14, 0, 1656, 1657, 5, 232, 0, 0, 1657, 1658, 3, 28, 14, 0, 1658, 1659, 5, 232, 0, 0, 1659, 1660, 3, 28, 14, 0, 1660, 1661, 5, 232, 0, 0, 1661, 1662, 3, 28, 14, 0, 1662, 1663, 5, 232, 0, 0, 1663, 1664, 3, 28, 14, 0, 1664, 1665, 5, 231, 0, 0, 1665, 1686, 1, 0, 0, 0, 1666, 1667, 5, 158, 0, 0, 1667, 1668, 5, 230, 0, 0, 1668, 1669, 3, 28, 14, 0, 1669, 1670, 5, 232, 0, 0, 1670, 1681, 3, 28, 14, 0, 1671, 1672, 5, 232, 0, 0, 1672, 1679, 3, 28, 14, 0, 1673, 1674, 5, 232, 0, 0, 1674, 1677, 3, 28, 14, 0, 1675, 1676, 5, 232, 0, 0, 1676, 1678, 3, 28, 14, 0, 1677, 1675, 1, 0, 0, 0, 1677, 1678, 1, 0, 0, 0, 1678, 1680, 1, 0, 0, 0, 1679, 1673, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 1682, 1, 0, 0, 0, 1681, 1671, 1, 0, 0, 0, 1681, 1682, 1, 0, 0, 0, 1682, 1683, 1, 0, 0, 0, 1683, 1684, 5, 231, 0, 0, 1684, 1686, 1, 0, 0, 0, 1685, 1653, 1, 0, 0, 0, 1685, 1666, 1, 0, 0, 0, 1686, 65, 1, 0, 0, 0, 1687, 1688, 5, 19, 0, 0, 1688, 1689, 5, 230, 0, 0, 1689, 1694, 3, 28, 14, 0, 1690, 1691, 5, 232, 0, 0, 1691, 1693, 3, 28, 14, 0, 1692, 1690, 1, 0, 0, 0, 1693, 1696, 1, 0, 0, 0, 1694, 1692, 1, 0, 0, 0, 1694, 1695, 1, 0, 0, 0, 1695, 1697, 1, 0, 0, 0, 1696, 1694, 1, 0, 0, 0, 1697, 1698, 5, 231, 0, 0, 1698, 1817, 1, 0, 0, 0, 1699, 1700, 5, 20, 0, 0, 1700, 1701, 5, 230, 0, 0, 1701, 1706, 3, 28, 14, 0, 1702, 1703, 5, 232, 0, 0, 1703, 1705, 3, 28, 14, 0, 1704, 1702, 1, 0, 0, 0, 1705, 1708, 1, 0, 0, 0, 1706, 1704, 1, 0, 0, 0, 1706, 1707, 1, 0, 0, 0, 1707, 1709, 1, 0, 0, 0, 1708, 1706, 1, 0, 0, 0, 1709, 1710, 5, 231, 0, 0, 1710, 1817, 1, 0, 0, 0, 1711, 1712, 5, 46, 0, 0, 1712, 1713, 5, 230, 0, 0, 1713, 1714, 3, 28, 14, 0, 1714, 1715, 5, 232, 0, 0, 1715, 1722, 3, 28, 14, 0, 1716, 1717, 5, 232, 0, 0, 1717, 1720, 3, 28, 14, 0, 1718, 1719, 5, 232, 0, 0, 1719, 1721, 3, 28, 14, 0, 1720, 1718, 1, 0, 0, 0, 1720, 1721, 1, 0, 0, 0, 1721, 1723, 1, 0, 0, 0, 1722, 1716, 1, 0, 0, 0, 1722, 1723, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1725, 5, 231, 0, 0, 1725, 1817, 1, 0, 0, 0, 1726, 1727, 5, 47, 0, 0, 1727, 1728, 5, 230, 0, 0, 1728, 1731, 3, 28, 14, 0, 1729, 1730, 5, 232, 0, 0, 1730, 1732, 3, 28, 14, 0, 1731, 1729, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1731, 1, 0, 0, 0, 1733, 1734, 1, 0, 0, 0, 1734, 1735, 1, 0, 0, 0, 1735, 1736, 5, 231, 0, 0, 1736, 1817, 1, 0, 0, 0, 1737, 1738, 5, 48, 0, 0, 1738, 1739, 5, 230, 0, 0, 1739, 1742, 3, 28, 14, 0, 1740, 1741, 5, 232, 0, 0, 1741, 1743, 3, 28, 14, 0, 1742, 1740, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1742, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1746, 1, 0, 0, 0, 1746, 1747, 5, 231, 0, 0, 1747, 1817, 1, 0, 0, 0, 1748, 1749, 5, 52, 0, 0, 1749, 1750, 5, 230, 0, 0, 1750, 1751, 3, 28, 14, 0, 1751, 1752, 5, 232, 0, 0, 1752, 1753, 3, 28, 14, 0, 1753, 1754, 5, 231, 0, 0, 1754, 1817, 1, 0, 0, 0, 1755, 1756, 5, 178, 0, 0, 1756, 1757, 5, 230, 0, 0, 1757, 1760, 3, 28, 14, 0, 1758, 1759, 5, 232, 0, 0, 1759, 1761, 3, 28, 14, 0, 1760, 1758, 1, 0, 0, 0, 1760, 1761, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1762, 1763, 5, 231, 0, 0, 1763, 1817, 1, 0, 0, 0, 1764, 1765, 5, 179, 0, 0, 1765, 1766, 5, 230, 0, 0, 1766, 1767, 3, 28, 14, 0, 1767, 1768, 5, 232, 0, 0, 1768, 1769, 3, 28, 14, 0, 1769, 1770, 5, 231, 0, 0, 1770, 1817, 1, 0, 0, 0, 1771, 1772, 5, 127, 0, 0, 1772, 1773, 5, 230, 0, 0, 1773, 1776, 3, 28, 14, 0, 1774, 1775, 5, 232, 0, 0, 1775, 1777, 3, 28, 14, 0, 1776, 1774, 1, 0, 0, 0, 1777, 1778, 1, 0, 0, 0, 1778, 1776, 1, 0, 0, 0, 1778, 1779, 1, 0, 0, 0, 1779, 1780, 1, 0, 0, 0, 1780, 1781, 5, 231, 0, 0, 1781, 1817, 1, 0, 0, 0, 1782, 1783, 5, 128, 0, 0, 1783, 1784, 5, 230, 0, 0, 1784, 1787, 3, 28, 14, 0, 1785, 1786, 5, 232, 0, 0, 1786, 1788, 3, 28, 14, 0, 1787, 1785, 1, 0, 0, 0, 1787, 1788, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 1790, 5, 231, 0, 0, 1790, 1817, 1, 0, 0, 0, 1791, 1792, 5, 129, 0, 0, 1792, 1793, 5, 230, 0, 0, 1793, 1794, 3, 28, 14, 0, 1794, 1795, 5, 231, 0, 0, 1795, 1817, 1, 0, 0, 0, 1796, 1797, 5, 92, 0, 0, 1797, 1798, 5, 230, 0, 0, 1798, 1799, 3, 28, 14, 0, 1799, 1800, 5, 231, 0, 0, 1800, 1817, 1, 0, 0, 0, 1801, 1802, 5, 93, 0, 0, 1802, 1803, 5, 230, 0, 0, 1803, 1804, 3, 28, 14, 0, 1804, 1805, 5, 231, 0, 0, 1805, 1817, 1, 0, 0, 0, 1806, 1807, 5, 94, 0, 0, 1807, 1808, 5, 230, 0, 0, 1808, 1809, 3, 28, 14, 0, 1809, 1810, 5, 231, 0, 0, 1810, 1817, 1, 0, 0, 0, 1811, 1812, 5, 95, 0, 0, 1812, 1813, 5, 230, 0, 0, 1813, 1814, 3, 28, 14, 0, 1814, 1815, 5, 231, 0, 0, 1815, 1817, 1, 0, 0, 0, 1816, 1687, 1, 0, 0, 0, 1816, 1699, 1, 0, 0, 0, 1816, 1711, 1, 0, 0, 0, 1816, 1726, 1, 0, 0, 0, 1816, 1737, 1, 0, 0, 0, 1816, 1748, 1, 0, 0, 0, 1816, 1755, 1, 0, 0, 0, 1816, 1764, 1, 0, 0, 0, 1816, 1771, 1, 0, 0, 0, 1816, 1782, 1, 0, 0, 0, 1816, 1791, 1, 0, 0, 0, 1816, 1796, 1, 0, 0, 0, 1816, 1801, 1, 0, 0, 0, 1816, 1806, 1, 0, 0, 0, 1816, 1811, 1, 0, 0, 0, 1817, 67, 1, 0, 0, 0, 1818, 1819, 5, 190, 0, 0, 1819, 1820, 5, 230, 0, 0, 1820, 1823, 3, 28, 14, 0, 1821, 1822, 5, 232, 0, 0, 1822, 1824, 3, 28, 14, 0, 1823, 1821, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 1826, 5, 231, 0, 0, 1826, 2086, 1, 0, 0, 0, 1827, 1828, 5, 191, 0, 0, 1828, 1829, 5, 230, 0, 0, 1829, 1832, 3, 28, 14, 0, 1830, 1831, 5, 232, 0, 0, 1831, 1833, 3, 28, 14, 0, 1832, 1830, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 1835, 5, 231, 0, 0, 1835, 2086, 1, 0, 0, 0, 1836, 1837, 5, 193, 0, 0, 1837, 1838, 5, 230, 0, 0, 1838, 1839, 3, 28, 14, 0, 1839, 1840, 5, 232, 0, 0, 1840, 1843, 3, 28, 14, 0, 1841, 1842, 5, 232, 0, 0, 1842, 1844, 3, 28, 14, 0, 1843, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 1846, 5, 231, 0, 0, 1846, 2086, 1, 0, 0, 0, 1847, 1848, 5, 195, 0, 0, 1848, 1849, 5, 230, 0, 0, 1849, 1850, 3, 28, 14, 0, 1850, 1851, 5, 232, 0, 0, 1851, 1854, 3, 28, 14, 0, 1852, 1853, 5, 232, 0, 0, 1853, 1855, 3, 28, 14, 0, 1854, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 1857, 5, 231, 0, 0, 1857, 2086, 1, 0, 0, 0, 1858, 1859, 5, 196, 0, 0, 1859, 1860, 5, 230, 0, 0, 1860, 1861, 3, 28, 14, 0, 1861, 1862, 5, 232, 0, 0, 1862, 1865, 3, 28, 14, 0, 1863, 1864, 5, 232, 0, 0, 1864, 1866, 3, 28, 14, 0, 1865, 1863, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1867, 1, 0, 0, 0, 1867, 1868, 5, 231, 0, 0, 1868, 2086, 1, 0, 0, 0, 1869, 1870, 5, 192, 0, 0, 1870, 1871, 5, 230, 0, 0, 1871, 1872, 3, 28, 14, 0, 1872, 1873, 5, 232, 0, 0, 1873, 1874, 3, 28, 14, 0, 1874, 1875, 5, 232, 0, 0, 1875, 1878, 3, 28, 14, 0, 1876, 1877, 5, 232, 0, 0, 1877, 1879, 3, 28, 14, 0, 1878, 1876, 1, 0, 0, 0, 1878, 1879, 1, 0, 0, 0, 1879, 1880, 1, 0, 0, 0, 1880, 1881, 5, 231, 0, 0, 1881, 2086, 1, 0, 0, 0, 1882, 1883, 5, 194, 0, 0, 1883, 1884, 5, 230, 0, 0, 1884, 1885, 3, 28, 14, 0, 1885, 1886, 5, 232, 0, 0, 1886, 1887, 3, 28, 14, 0, 1887, 1888, 5, 232, 0, 0, 1888, 1891, 3, 28, 14, 0, 1889, 1890, 5, 232, 0, 0, 1890, 1892, 3, 28, 14, 0, 1891, 1889, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1894, 5, 231, 0, 0, 1894, 2086, 1, 0, 0, 0, 1895, 1896, 5, 197, 0, 0, 1896, 1897, 5, 230, 0, 0, 1897, 1898, 3, 28, 14, 0, 1898, 1899, 5, 232, 0, 0, 1899, 1900, 3, 28, 14, 0, 1900, 1901, 5, 232, 0, 0, 1901, 1904, 3, 28, 14, 0, 1902, 1903, 5, 232, 0, 0, 1903, 1905, 3, 28, 14, 0, 1904, 1902, 1, 0, 0, 0, 1904, 1905, 1, 0, 0, 0, 1905, 1906, 1, 0, 0, 0, 1906, 1907, 5, 231, 0, 0, 1907, 2086, 1, 0, 0, 0, 1908, 1909, 5, 198, 0, 0, 1909, 1910, 5, 230, 0, 0, 1910, 1911, 3, 28, 14, 0, 1911, 1912, 5, 232, 0, 0, 1912, 1913, 3, 28, 14, 0, 1913, 1914, 5, 232, 0, 0, 1914, 1917, 3, 28, 14, 0, 1915, 1916, 5, 232, 0, 0, 1916, 1918, 3, 28, 14, 0, 1917, 1915, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 5, 231, 0, 0, 1920, 2086, 1, 0, 0, 0, 1921, 1922, 5, 199, 0, 0, 1922, 1923, 5, 230, 0, 0, 1923, 1924, 3, 28, 14, 0, 1924, 1925, 5, 232, 0, 0, 1925, 1926, 3, 28, 14, 0, 1926, 1927, 5, 232, 0, 0, 1927, 1930, 3, 28, 14, 0, 1928, 1929, 5, 232, 0, 0, 1929, 1931, 3, 28, 14, 0, 1930, 1928, 1, 0, 0, 0, 1930, 1931, 1, 0, 0, 0, 1931, 1932, 1, 0, 0, 0, 1932, 1933, 5, 231, 0, 0, 1933, 2086, 1, 0, 0, 0, 1934, 1935, 5, 200, 0, 0, 1935, 1936, 5, 230, 0, 0, 1936, 1937, 3, 28, 14, 0, 1937, 1938, 5, 232, 0, 0, 1938, 1939, 3, 28, 14, 0, 1939, 1940, 5, 232, 0, 0, 1940, 1943, 3, 28, 14, 0, 1941, 1942, 5, 232, 0, 0, 1942, 1944, 3, 28, 14, 0, 1943, 1941, 1, 0, 0, 0, 1943, 1944, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1946, 5, 231, 0, 0, 1946, 2086, 1, 0, 0, 0, 1947, 1948, 5, 201, 0, 0, 1948, 1949, 5, 230, 0, 0, 1949, 1950, 3, 28, 14, 0, 1950, 1951, 5, 232, 0, 0, 1951, 1952, 3, 28, 14, 0, 1952, 1953, 5, 232, 0, 0, 1953, 1956, 3, 28, 14, 0, 1954, 1955, 5, 232, 0, 0, 1955, 1957, 3, 28, 14, 0, 1956, 1954, 1, 0, 0, 0, 1956, 1957, 1, 0, 0, 0, 1957, 1958, 1, 0, 0, 0, 1958, 1959, 5, 231, 0, 0, 1959, 2086, 1, 0, 0, 0, 1960, 1961, 5, 202, 0, 0, 1961, 1962, 5, 230, 0, 0, 1962, 1963, 3, 28, 14, 0, 1963, 1964, 5, 232, 0, 0, 1964, 1967, 3, 28, 14, 0, 1965, 1966, 5, 232, 0, 0, 1966, 1968, 3, 28, 14, 0, 1967, 1965, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1969, 1, 0, 0, 0, 1969, 1970, 5, 231, 0, 0, 1970, 2086, 1, 0, 0, 0, 1971, 1972, 5, 203, 0, 0, 1972, 1973, 5, 230, 0, 0, 1973, 1974, 3, 28, 14, 0, 1974, 1975, 5, 232, 0, 0, 1975, 1978, 3, 28, 14, 0, 1976, 1977, 5, 232, 0, 0, 1977, 1979, 3, 28, 14, 0, 1978, 1976, 1, 0, 0, 0, 1978, 1979, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 1981, 5, 231, 0, 0, 1981, 2086, 1, 0, 0, 0, 1982, 1983, 5, 204, 0, 0, 1983, 1984, 5, 230, 0, 0, 1984, 1985, 3, 28, 14, 0, 1985, 1986, 5, 232, 0, 0, 1986, 1989, 3, 28, 14, 0, 1987, 1988, 5, 232, 0, 0, 1988, 1990, 3, 28, 14, 0, 1989, 1987, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1993, 1, 0, 0, 0, 1991, 1992, 5, 232, 0, 0, 1992, 1994, 3, 28, 14, 0, 1993, 1991, 1, 0, 0, 0, 1993, 1994, 1, 0, 0, 0, 1994, 1997, 1, 0, 0, 0, 1995, 1996, 5, 232, 0, 0, 1996, 1998, 3, 28, 14, 0, 1997, 1995, 1, 0, 0, 0, 1997, 1998, 1, 0, 0, 0, 1998, 1999, 1, 0, 0, 0, 1999, 2000, 5, 231, 0, 0, 2000, 2086, 1, 0, 0, 0, 2001, 2002, 5, 205, 0, 0, 2002, 2003, 5, 230, 0, 0, 2003, 2004, 3, 28, 14, 0, 2004, 2005, 5, 232, 0, 0, 2005, 2008, 3, 28, 14, 0, 2006, 2007, 5, 232, 0, 0, 2007, 2009, 3, 28, 14, 0, 2008, 2006, 1, 0, 0, 0, 2008, 2009, 1, 0, 0, 0, 2009, 2012, 1, 0, 0, 0, 2010, 2011, 5, 232, 0, 0, 2011, 2013, 3, 28, 14, 0, 2012, 2010, 1, 0, 0, 0, 2012, 2013, 1, 0, 0, 0, 2013, 2016, 1, 0, 0, 0, 2014, 2015, 5, 232, 0, 0, 2015, 2017, 3, 28, 14, 0, 2016, 2014, 1, 0, 0, 0, 2016, 2017, 1, 0, 0, 0, 2017, 2018, 1, 0, 0, 0, 2018, 2019, 5, 231, 0, 0, 2019, 2086, 1, 0, 0, 0, 2020, 2021, 5, 206, 0, 0, 2021, 2022, 5, 230, 0, 0, 2022, 2023, 3, 28, 14, 0, 2023, 2024, 5, 232, 0, 0, 2024, 2027, 3, 28, 14, 0, 2025, 2026, 5, 232, 0, 0, 2026, 2028, 3, 28, 14, 0, 2027, 2025, 1, 0, 0, 0, 2027, 2028, 1, 0, 0, 0, 2028, 2031, 1, 0, 0, 0, 2029, 2030, 5, 232, 0, 0, 2030, 2032, 3, 28, 14, 0, 2031, 2029, 1, 0, 0, 0, 2031, 2032, 1, 0, 0, 0, 2032, 2035, 1, 0, 0, 0, 2033, 2034, 5, 232, 0, 0, 2034, 2036, 3, 28, 14, 0, 2035, 2033, 1, 0, 0, 0, 2035, 2036, 1, 0, 0, 0, 2036, 2037, 1, 0, 0, 0, 2037, 2038, 5, 231, 0, 0, 2038, 2086, 1, 0, 0, 0, 2039, 2040, 5, 207, 0, 0, 2040, 2041, 5, 230, 0, 0, 2041, 2042, 3, 28, 14, 0, 2042, 2043, 5, 232, 0, 0, 2043, 2046, 3, 28, 14, 0, 2044, 2045, 5, 232, 0, 0, 2045, 2047, 3, 28, 14, 0, 2046, 2044, 1, 0, 0, 0, 2046, 2047, 1, 0, 0, 0, 2047, 2050, 1, 0, 0, 0, 2048, 2049, 5, 232, 0, 0, 2049, 2051, 3, 28, 14, 0, 2050, 2048, 1, 0, 0, 0, 2050, 2051, 1, 0, 0, 0, 2051, 2054, 1, 0, 0, 0, 2052, 2053, 5, 232, 0, 0, 2053, 2055, 3, 28, 14, 0, 2054, 2052, 1, 0, 0, 0, 2054, 2055, 1, 0, 0, 0, 2055, 2056, 1, 0, 0, 0, 2056, 2057, 5, 231, 0, 0, 2057, 2086, 1, 0, 0, 0, 2058, 2059, 5, 208, 0, 0, 2059, 2060, 5, 230, 0, 0, 2060, 2061, 3, 28, 14, 0, 2061, 2062, 5, 232, 0, 0, 2062, 2063, 3, 28, 14, 0, 2063, 2064, 5, 232, 0, 0, 2064, 2065, 3, 28, 14, 0, 2065, 2066, 5, 232, 0, 0, 2066, 2069, 3, 28, 14, 0, 2067, 2068, 5, 232, 0, 0, 2068, 2070, 3, 28, 14, 0, 2069, 2067, 1, 0, 0, 0, 2069, 2070, 1, 0, 0, 0, 2070, 2073, 1, 0, 0, 0, 2071, 2072, 5, 232, 0, 0, 2072, 2074, 3, 28, 14, 0, 2073, 2071, 1, 0, 0, 0, 2073, 2074, 1, 0, 0, 0, 2074, 2077, 1, 0, 0, 0, 2075, 2076, 5, 232, 0, 0, 2076, 2078, 3, 28, 14, 0, 2077, 2075, 1, 0, 0, 0, 2077, 2078, 1, 0, 0, 0, 2078, 2081, 1, 0, 0, 0, 2079, 2080, 5, 232, 0, 0, 2080, 2082, 3, 28, 14, 0, 2081, 2079, 1, 0, 0, 0, 2081, 2082, 1, 0, 0, 0, 2082, 2083, 1, 0, 0, 0, 2083, 2084, 5, 231, 0, 0, 2084, 2086, 1, 0, 0, 0, 2085, 1818, 1, 0, 0, 0, 2085, 1827, 1, 0, 0, 0, 2085, 1836, 1, 0, 0, 0, 2085, 1847, 1, 0, 0, 0, 2085, 1858, 1, 0, 0, 0, 2085, 1869, 1, 0, 0, 0, 2085, 1882, 1, 0, 0, 0, 2085, 1895, 1, 0, 0, 0, 2085, 1908, 1, 0, 0, 0, 2085, 1921, 1, 0, 0, 0, 2085, 1934, 1, 0, 0, 0, 2085, 1947, 1, 0, 0, 0, 2085, 1960, 1, 0, 0, 0, 2085, 1971, 1, 0, 0, 0, 2085, 1982, 1, 0, 0, 0, 2085, 2001, 1, 0, 0, 0, 2085, 2020, 1, 0, 0, 0, 2085, 2039, 1, 0, 0, 0, 2085, 2058, 1, 0, 0, 0, 2086, 69, 1, 0, 0, 0, 132, 73, 75, 80, 87, 93, 104, 111, 123, 137, 146, 166, 176, 188, 198, 204, 221, 223, 241, 243, 255, 257, 272, 274, 286, 288, 296, 303, 315, 322, 355, 375, 395, 402, 408, 414, 421, 518, 597, 623, 625, 644, 663, 699, 735, 737, 746, 755, 764, 773, 852, 861, 870, 879, 913, 917, 952, 1077, 1123, 1125, 1168, 1170, 1172, 1202, 1211, 1222, 1255, 1287, 1393, 1406, 1426, 1438, 1450, 1462, 1466, 1478, 1482, 1503, 1515, 1528, 1532, 1536, 1540, 1544, 1548, 1559, 1594, 1651, 1677, 1679, 1681, 1685, 1694, 1706, 1720, 1722, 1733, 1744, 1760, 1778, 1787, 1816, 1823, 1832, 1843, 1854, 1865, 1878, 1891, 1904, 1917, 1930, 1943, 1956, 1967, 1978, 1989, 1993, 1997, 2008, 2012, 2016, 2027, 2031, 2035, 2046, 2050, 2054, 2069, 2073, 2077, 2081, 2085] \ No newline at end of file diff --git a/more_math/Parser/MathExpr.tokens b/more_math/Parser/MathExpr.tokens deleted file mode 100644 index e6c8a42..0000000 --- a/more_math/Parser/MathExpr.tokens +++ /dev/null @@ -1,423 +0,0 @@ -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 -TRANSPOSE=50 -PERM=51 -RESHAPE=52 -RANGE=53 -LINSPACE=54 -LOGSPACE=55 -TOPK=56 -BOTK=57 -PINV=58 -SUM=59 -MEAN=60 -STD=61 -VAR=62 -QUARTILE=63 -PERCENTILE=64 -QUANTILE=65 -DOT=66 -MOMENT=67 -ERF=68 -ERFINV=69 -ANY=70 -ALL=71 -EDGE=72 -GAUSSIAN=73 -MEDIAN=74 -MODE=75 -CUMSUM=76 -CUMPROD=77 -TOPK_IND=78 -BOTK_IND=79 -CUBIC_EASE=80 -ELASTIC_EASE=81 -SINE_EASE=82 -SMOOTHERSTEP=83 -DIST=84 -REMAP=85 -COSSIM=86 -COUNT=87 -KEYS=88 -ENABLE_TRACKING=89 -DISABLE_TRACKING=90 -RESET_TRACKING=91 -GET_CHANGED_KEYS=92 -GET_ADDED_KEYS=93 -GET_REMOVED_KEYS=94 -GET_UNCHANGED_KEYS=95 -REPEAT=96 -FLATTEN=97 -APPEND=98 -GET_VALUE=99 -FLOW_APPLY=100 -BATCH_SHUFFLE=101 -MOTION_MASK=102 -FLOW_TO_IMAGE=103 -FLOW_MAG=104 -FLOW_ANG=105 -WHERE=106 -HISTOGRAM=107 -OVERLAY=108 -PAD=109 -CROSS=110 -MATMUL=111 -RIFE=112 -BNOT=113 -BITCOUNT=114 -SHAPE=115 -BAND=116 -XOR=117 -BOR=118 -TENSOR=119 -ADD_KEY=120 -REMOVE_KEY=121 -PUSH=122 -POP=123 -CLEAR=124 -HAS=125 -GET=126 -CONCAT=127 -STACK=128 -NONZERO=129 -INT=130 -FLOAT=131 -UPPER=132 -LOWER=133 -TRIM=134 -SPLIT=135 -JOIN=136 -SUBSTRING=137 -FIND=138 -REPLACE=139 -DILATE=140 -ERODE=141 -MORPH_OPEN=142 -MORPH_CLOSE=143 -RGB_TO_OKLAB=144 -RGB_TO_CIELAB=145 -OKLAB_TO_RGB=146 -CIELAB_TO_RGB=147 -RGB_TO_HSV=148 -HSV_TO_RGB=149 -INT_TO_RGB=150 -RGB_TO_INT=151 -INTERPOLATE_LINEAR=152 -INTERPOLATE_AREA=153 -INTERPOLATE_NEAREST=154 -TEXT_IMAGE=155 -AS_NESTED=156 -SVD=157 -DIAG=158 -IF=159 -ELSE=160 -WHILE=161 -FOR=162 -IN=163 -BREAK=164 -CONTINUE=165 -RETURN=166 -TIMESTAMP=167 -SORT=168 -ARGSORT=169 -ARGMIN=170 -ARGMAX=171 -SOFTMAX=172 -SOFTMIN=173 -UNIQUE=174 -FLIP=175 -STARTSWITH=176 -ENDSWITH=177 -SQUEEZE=178 -UNSQUEEZE=179 -ROLL=180 -COV=181 -CORR=182 -ENTROPY=183 -CROP=184 -NONE=185 -COORDS=186 -GATHER=187 -SCATTER=188 -SCATTER_ADD=189 -NOISE=190 -RAND=191 -CAUCHY=192 -EXPONENTIAL=193 -LOGNORMAL=194 -BERNOULLI=195 -POISSON=196 -GAMMADIST=197 -BETADIST=198 -LAPLACEDIST=199 -GUMBELDIST=200 -WEIBULLDIST=201 -CHI2DIST=202 -STUDENTTDIST=203 -PERLIN=204 -CELLULAR=205 -PLASMA=206 -RIDGED=207 -DOMAIN_WARP=208 -PLUS=209 -MINUS=210 -MULT=211 -DIV=212 -MOD=213 -POW=214 -LSHIFT=215 -RSHIFT=216 -GE=217 -GT=218 -LE=219 -LT=220 -EQ=221 -EQUEALS=222 -PLUS_EQ=223 -MINUS_EQ=224 -MULT_EQ=225 -DIV_EQ=226 -MOD_EQ=227 -NE=228 -PIPE=229 -LPAREN=230 -RPAREN=231 -COMMA=232 -SEMICOLON=233 -ARROW=234 -LBRACKET=235 -RBRACKET=236 -QUESTION=237 -COLON=238 -LBRACE=239 -RBRACE=240 -NUMBER=241 -CONSTANT=242 -STRING=243 -VARIABLE=244 -SL_COMMENT=245 -ML_COMMENT=246 -WS=247 -'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'=53 -'linspace'=54 -'logspace'=55 -'topk'=56 -'botk'=57 -'pinv'=58 -'sum'=59 -'mean'=60 -'std'=61 -'var'=62 -'quantile'=65 -'dot'=66 -'moment'=67 -'erf'=68 -'erfinv'=69 -'any'=70 -'all'=71 -'edge'=72 -'median'=74 -'mode'=75 -'cumsum'=76 -'cumprod'=77 -'smootherstep'=83 -'remap'=85 -'keys'=88 -'repeat'=96 -'flatten'=97 -'append'=98 -'get_value'=99 -'flow_apply'=100 -'motion_mask'=102 -'flow_to_image'=103 -'where'=106 -'overlay'=108 -'pad'=109 -'cross'=110 -'matmul'=111 -'rife'=112 -'shape'=115 -'tensor'=119 -'add_key'=120 -'stack_push'=122 -'stack_pop'=123 -'stack_clear'=124 -'stack_has'=125 -'stack_get'=126 -'stack'=128 -'nonzero'=129 -'int'=130 -'float'=131 -'upper'=132 -'lower'=133 -'trim'=134 -'split'=135 -'join'=136 -'find'=138 -'replace'=139 -'dilate'=140 -'erode'=141 -'morph_open'=142 -'morph_close'=143 -'rgb_to_oklab'=144 -'rgb_to_cielab'=145 -'oklab_to_rgb'=146 -'cielab_to_rgb'=147 -'rgb_to_hsv'=148 -'hsv_to_rgb'=149 -'int_to_rgb'=150 -'rgb_to_int'=151 -'interpolate_linear'=152 -'interpolate_area'=153 -'text_image'=155 -'if'=159 -'else'=160 -'while'=161 -'for'=162 -'in'=163 -'break'=164 -'continue'=165 -'return'=166 -'sort'=168 -'argsort'=169 -'argmin'=170 -'argmax'=171 -'softmax'=172 -'softmin'=173 -'unique'=174 -'flip'=175 -'startswith'=176 -'endswith'=177 -'squeeze'=178 -'unsqueeze'=179 -'roll'=180 -'cov'=181 -'entropy'=183 -'crop'=184 -'gather'=187 -'scatter'=188 -'scatter_add'=189 -'+'=209 -'-'=210 -'*'=211 -'/'=212 -'%'=213 -'^'=214 -'<<'=215 -'>>'=216 -'>='=217 -'>'=218 -'<='=219 -'<'=220 -'=='=221 -'='=222 -'+='=223 -'-='=224 -'*='=225 -'/='=226 -'%='=227 -'!='=228 -'|'=229 -'('=230 -')'=231 -','=232 -';'=233 -'->'=234 -'['=235 -']'=236 -'?'=237 -':'=238 -'{'=239 -'}'=240 diff --git a/more_math/Parser/MathExprLexer.interp b/more_math/Parser/MathExprLexer.interp deleted file mode 100644 index 0c19b39..0000000 --- a/more_math/Parser/MathExprLexer.interp +++ /dev/null @@ -1,758 +0,0 @@ -token literal names: -null -'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' -null -null -'lerp' -'step' -'smoothstep' -'fract' -'relu' -'softplus' -'gelu' -'sign' -'map' -null -null -'swap' -null -null -null -'range' -'linspace' -'logspace' -'topk' -'botk' -'pinv' -'sum' -'mean' -'std' -'var' -null -null -'quantile' -'dot' -'moment' -'erf' -'erfinv' -'any' -'all' -'edge' -null -'median' -'mode' -'cumsum' -'cumprod' -null -null -null -null -null -'smootherstep' -null -'remap' -null -null -'keys' -null -null -null -null -null -null -null -'repeat' -'flatten' -'append' -'get_value' -'flow_apply' -null -'motion_mask' -'flow_to_image' -null -null -'where' -null -'overlay' -'pad' -'cross' -'matmul' -'rife' -null -null -'shape' -null -null -null -'tensor' -'add_key' -null -'stack_push' -'stack_pop' -'stack_clear' -'stack_has' -'stack_get' -null -'stack' -'nonzero' -'int' -'float' -'upper' -'lower' -'trim' -'split' -'join' -null -'find' -'replace' -'dilate' -'erode' -'morph_open' -'morph_close' -'rgb_to_oklab' -'rgb_to_cielab' -'oklab_to_rgb' -'cielab_to_rgb' -'rgb_to_hsv' -'hsv_to_rgb' -'int_to_rgb' -'rgb_to_int' -'interpolate_linear' -'interpolate_area' -null -'text_image' -null -null -null -'if' -'else' -'while' -'for' -'in' -'break' -'continue' -'return' -null -'sort' -'argsort' -'argmin' -'argmax' -'softmax' -'softmin' -'unique' -'flip' -'startswith' -'endswith' -'squeeze' -'unsqueeze' -'roll' -'cov' -null -'entropy' -'crop' -null -null -'gather' -'scatter' -'scatter_add' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -'+' -'-' -'*' -'/' -'%' -'^' -'<<' -'>>' -'>=' -'>' -'<=' -'<' -'==' -'=' -'+=' -'-=' -'*=' -'/=' -'%=' -'!=' -'|' -'(' -')' -',' -';' -'->' -'[' -']' -'?' -':' -'{' -'}' -null -null -null -null -null -null -null - -token symbolic names: -null -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 -TRANSPOSE -PERM -RESHAPE -RANGE -LINSPACE -LOGSPACE -TOPK -BOTK -PINV -SUM -MEAN -STD -VAR -QUARTILE -PERCENTILE -QUANTILE -DOT -MOMENT -ERF -ERFINV -ANY -ALL -EDGE -GAUSSIAN -MEDIAN -MODE -CUMSUM -CUMPROD -TOPK_IND -BOTK_IND -CUBIC_EASE -ELASTIC_EASE -SINE_EASE -SMOOTHERSTEP -DIST -REMAP -COSSIM -COUNT -KEYS -ENABLE_TRACKING -DISABLE_TRACKING -RESET_TRACKING -GET_CHANGED_KEYS -GET_ADDED_KEYS -GET_REMOVED_KEYS -GET_UNCHANGED_KEYS -REPEAT -FLATTEN -APPEND -GET_VALUE -FLOW_APPLY -BATCH_SHUFFLE -MOTION_MASK -FLOW_TO_IMAGE -FLOW_MAG -FLOW_ANG -WHERE -HISTOGRAM -OVERLAY -PAD -CROSS -MATMUL -RIFE -BNOT -BITCOUNT -SHAPE -BAND -XOR -BOR -TENSOR -ADD_KEY -REMOVE_KEY -PUSH -POP -CLEAR -HAS -GET -CONCAT -STACK -NONZERO -INT -FLOAT -UPPER -LOWER -TRIM -SPLIT -JOIN -SUBSTRING -FIND -REPLACE -DILATE -ERODE -MORPH_OPEN -MORPH_CLOSE -RGB_TO_OKLAB -RGB_TO_CIELAB -OKLAB_TO_RGB -CIELAB_TO_RGB -RGB_TO_HSV -HSV_TO_RGB -INT_TO_RGB -RGB_TO_INT -INTERPOLATE_LINEAR -INTERPOLATE_AREA -INTERPOLATE_NEAREST -TEXT_IMAGE -AS_NESTED -SVD -DIAG -IF -ELSE -WHILE -FOR -IN -BREAK -CONTINUE -RETURN -TIMESTAMP -SORT -ARGSORT -ARGMIN -ARGMAX -SOFTMAX -SOFTMIN -UNIQUE -FLIP -STARTSWITH -ENDSWITH -SQUEEZE -UNSQUEEZE -ROLL -COV -CORR -ENTROPY -CROP -NONE -COORDS -GATHER -SCATTER -SCATTER_ADD -NOISE -RAND -CAUCHY -EXPONENTIAL -LOGNORMAL -BERNOULLI -POISSON -GAMMADIST -BETADIST -LAPLACEDIST -GUMBELDIST -WEIBULLDIST -CHI2DIST -STUDENTTDIST -PERLIN -CELLULAR -PLASMA -RIDGED -DOMAIN_WARP -PLUS -MINUS -MULT -DIV -MOD -POW -LSHIFT -RSHIFT -GE -GT -LE -LT -EQ -EQUEALS -PLUS_EQ -MINUS_EQ -MULT_EQ -DIV_EQ -MOD_EQ -NE -PIPE -LPAREN -RPAREN -COMMA -SEMICOLON -ARROW -LBRACKET -RBRACKET -QUESTION -COLON -LBRACE -RBRACE -NUMBER -CONSTANT -STRING -VARIABLE -SL_COMMENT -ML_COMMENT -WS - -rule names: -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 -TRANSPOSE -PERM -RESHAPE -RANGE -LINSPACE -LOGSPACE -TOPK -BOTK -PINV -SUM -MEAN -STD -VAR -QUARTILE -PERCENTILE -QUANTILE -DOT -MOMENT -ERF -ERFINV -ANY -ALL -EDGE -GAUSSIAN -MEDIAN -MODE -CUMSUM -CUMPROD -TOPK_IND -BOTK_IND -CUBIC_EASE -ELASTIC_EASE -SINE_EASE -SMOOTHERSTEP -DIST -REMAP -COSSIM -COUNT -KEYS -ENABLE_TRACKING -DISABLE_TRACKING -RESET_TRACKING -GET_CHANGED_KEYS -GET_ADDED_KEYS -GET_REMOVED_KEYS -GET_UNCHANGED_KEYS -REPEAT -FLATTEN -APPEND -GET_VALUE -FLOW_APPLY -BATCH_SHUFFLE -MOTION_MASK -FLOW_TO_IMAGE -FLOW_MAG -FLOW_ANG -WHERE -HISTOGRAM -OVERLAY -PAD -CROSS -MATMUL -RIFE -BNOT -BITCOUNT -SHAPE -BAND -XOR -BOR -TENSOR -ADD_KEY -REMOVE_KEY -PUSH -POP -CLEAR -HAS -GET -CONCAT -STACK -NONZERO -INT -FLOAT -UPPER -LOWER -TRIM -SPLIT -JOIN -SUBSTRING -FIND -REPLACE -DILATE -ERODE -MORPH_OPEN -MORPH_CLOSE -RGB_TO_OKLAB -RGB_TO_CIELAB -OKLAB_TO_RGB -CIELAB_TO_RGB -RGB_TO_HSV -HSV_TO_RGB -INT_TO_RGB -RGB_TO_INT -INTERPOLATE_LINEAR -INTERPOLATE_AREA -INTERPOLATE_NEAREST -TEXT_IMAGE -AS_NESTED -SVD -DIAG -IF -ELSE -WHILE -FOR -IN -BREAK -CONTINUE -RETURN -TIMESTAMP -SORT -ARGSORT -ARGMIN -ARGMAX -SOFTMAX -SOFTMIN -UNIQUE -FLIP -STARTSWITH -ENDSWITH -SQUEEZE -UNSQUEEZE -ROLL -COV -CORR -ENTROPY -CROP -NONE -COORDS -GATHER -SCATTER -SCATTER_ADD -NOISE -RAND -CAUCHY -EXPONENTIAL -LOGNORMAL -BERNOULLI -POISSON -GAMMADIST -BETADIST -LAPLACEDIST -GUMBELDIST -WEIBULLDIST -CHI2DIST -STUDENTTDIST -PERLIN -CELLULAR -PLASMA -RIDGED -DOMAIN_WARP -PLUS -MINUS -MULT -DIV -MOD -POW -LSHIFT -RSHIFT -GE -GT -LE -LT -EQ -EQUEALS -PLUS_EQ -MINUS_EQ -MULT_EQ -DIV_EQ -MOD_EQ -NE -PIPE -LPAREN -RPAREN -COMMA -SEMICOLON -ARROW -LBRACKET -RBRACKET -QUESTION -COLON -LBRACE -RBRACE -NUMBER -CONSTANT -STRING -VARIABLE -SL_COMMENT -ML_COMMENT -WS - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[4, 0, 247, 3075, 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, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 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, 688, 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, 703, 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, 779, 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, 796, 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, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 820, 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, 833, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 846, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 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, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 919, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 936, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 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, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 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, 3, 72, 994, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 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, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1043, 8, 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, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1065, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 1082, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1103, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1118, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 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, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1145, 8, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 1176, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1192, 8, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1222, 8, 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, 1, 89, 1, 89, 3, 89, 1249, 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, 1, 90, 1, 90, 3, 90, 1276, 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, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1306, 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, 1, 92, 3, 92, 1332, 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, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 1362, 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, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1396, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 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, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 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, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 1467, 8, 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, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 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, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1517, 8, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1537, 8, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 1558, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1605, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1629, 8, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1652, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1669, 8, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1684, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1717, 8, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1792, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 3, 136, 1861, 8, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 3, 153, 2090, 8, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 2128, 8, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2161, 8, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 3, 157, 2182, 8, 157, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 2239, 8, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 3, 181, 2358, 8, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 3, 184, 2389, 8, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 3, 185, 2408, 8, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 2460, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 3, 190, 2485, 8, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 2505, 8, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 2530, 8, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 3, 193, 2555, 8, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 3, 194, 2578, 8, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 3, 195, 2599, 8, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 2618, 8, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 3, 197, 2639, 8, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 2660, 8, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 3, 199, 2685, 8, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2706, 8, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 3, 201, 2727, 8, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 3, 202, 2749, 8, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 3, 203, 2769, 8, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 3, 204, 2819, 8, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 3, 205, 2849, 8, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 2869, 8, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2899, 8, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 210, 1, 210, 1, 211, 1, 211, 1, 212, 1, 212, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 229, 1, 229, 1, 230, 1, 230, 1, 231, 1, 231, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 1, 239, 1, 239, 1, 240, 4, 240, 2978, 8, 240, 11, 240, 12, 240, 2979, 1, 240, 1, 240, 5, 240, 2984, 8, 240, 10, 240, 12, 240, 2987, 9, 240, 3, 240, 2989, 8, 240, 1, 240, 1, 240, 4, 240, 2993, 8, 240, 11, 240, 12, 240, 2994, 3, 240, 2997, 8, 240, 1, 240, 1, 240, 3, 240, 3001, 8, 240, 1, 240, 4, 240, 3004, 8, 240, 11, 240, 12, 240, 3005, 3, 240, 3008, 8, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 3, 241, 3015, 8, 241, 1, 242, 1, 242, 1, 242, 1, 242, 5, 242, 3021, 8, 242, 10, 242, 12, 242, 3024, 9, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 5, 242, 3031, 8, 242, 10, 242, 12, 242, 3034, 9, 242, 1, 242, 3, 242, 3037, 8, 242, 1, 243, 1, 243, 5, 243, 3041, 8, 243, 10, 243, 12, 243, 3044, 9, 243, 1, 244, 1, 244, 5, 244, 3048, 8, 244, 10, 244, 12, 244, 3051, 9, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 5, 245, 3059, 8, 245, 10, 245, 12, 245, 3062, 9, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 4, 246, 3070, 8, 246, 11, 246, 12, 246, 3071, 1, 246, 1, 246, 1, 3060, 0, 247, 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, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 1, 0, 9, 1, 0, 48, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 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, 3169, 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, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 1, 495, 1, 0, 0, 0, 3, 499, 1, 0, 0, 0, 5, 503, 1, 0, 0, 0, 7, 507, 1, 0, 0, 0, 9, 512, 1, 0, 0, 0, 11, 517, 1, 0, 0, 0, 13, 522, 1, 0, 0, 0, 15, 528, 1, 0, 0, 0, 17, 533, 1, 0, 0, 0, 19, 538, 1, 0, 0, 0, 21, 543, 1, 0, 0, 0, 23, 549, 1, 0, 0, 0, 25, 555, 1, 0, 0, 0, 27, 561, 1, 0, 0, 0, 29, 565, 1, 0, 0, 0, 31, 570, 1, 0, 0, 0, 33, 573, 1, 0, 0, 0, 35, 577, 1, 0, 0, 0, 37, 581, 1, 0, 0, 0, 39, 586, 1, 0, 0, 0, 41, 591, 1, 0, 0, 0, 43, 596, 1, 0, 0, 0, 45, 601, 1, 0, 0, 0, 47, 607, 1, 0, 0, 0, 49, 613, 1, 0, 0, 0, 51, 619, 1, 0, 0, 0, 53, 624, 1, 0, 0, 0, 55, 630, 1, 0, 0, 0, 57, 636, 1, 0, 0, 0, 59, 640, 1, 0, 0, 0, 61, 645, 1, 0, 0, 0, 63, 651, 1, 0, 0, 0, 65, 655, 1, 0, 0, 0, 67, 660, 1, 0, 0, 0, 69, 666, 1, 0, 0, 0, 71, 687, 1, 0, 0, 0, 73, 702, 1, 0, 0, 0, 75, 704, 1, 0, 0, 0, 77, 709, 1, 0, 0, 0, 79, 714, 1, 0, 0, 0, 81, 725, 1, 0, 0, 0, 83, 731, 1, 0, 0, 0, 85, 736, 1, 0, 0, 0, 87, 745, 1, 0, 0, 0, 89, 750, 1, 0, 0, 0, 91, 755, 1, 0, 0, 0, 93, 778, 1, 0, 0, 0, 95, 795, 1, 0, 0, 0, 97, 797, 1, 0, 0, 0, 99, 819, 1, 0, 0, 0, 101, 832, 1, 0, 0, 0, 103, 845, 1, 0, 0, 0, 105, 847, 1, 0, 0, 0, 107, 853, 1, 0, 0, 0, 109, 862, 1, 0, 0, 0, 111, 871, 1, 0, 0, 0, 113, 876, 1, 0, 0, 0, 115, 881, 1, 0, 0, 0, 117, 886, 1, 0, 0, 0, 119, 890, 1, 0, 0, 0, 121, 895, 1, 0, 0, 0, 123, 899, 1, 0, 0, 0, 125, 918, 1, 0, 0, 0, 127, 935, 1, 0, 0, 0, 129, 937, 1, 0, 0, 0, 131, 946, 1, 0, 0, 0, 133, 950, 1, 0, 0, 0, 135, 957, 1, 0, 0, 0, 137, 961, 1, 0, 0, 0, 139, 968, 1, 0, 0, 0, 141, 972, 1, 0, 0, 0, 143, 976, 1, 0, 0, 0, 145, 993, 1, 0, 0, 0, 147, 995, 1, 0, 0, 0, 149, 1002, 1, 0, 0, 0, 151, 1007, 1, 0, 0, 0, 153, 1014, 1, 0, 0, 0, 155, 1042, 1, 0, 0, 0, 157, 1064, 1, 0, 0, 0, 159, 1081, 1, 0, 0, 0, 161, 1102, 1, 0, 0, 0, 163, 1117, 1, 0, 0, 0, 165, 1119, 1, 0, 0, 0, 167, 1144, 1, 0, 0, 0, 169, 1146, 1, 0, 0, 0, 171, 1175, 1, 0, 0, 0, 173, 1191, 1, 0, 0, 0, 175, 1193, 1, 0, 0, 0, 177, 1221, 1, 0, 0, 0, 179, 1248, 1, 0, 0, 0, 181, 1275, 1, 0, 0, 0, 183, 1305, 1, 0, 0, 0, 185, 1331, 1, 0, 0, 0, 187, 1361, 1, 0, 0, 0, 189, 1395, 1, 0, 0, 0, 191, 1397, 1, 0, 0, 0, 193, 1404, 1, 0, 0, 0, 195, 1412, 1, 0, 0, 0, 197, 1419, 1, 0, 0, 0, 199, 1429, 1, 0, 0, 0, 201, 1466, 1, 0, 0, 0, 203, 1468, 1, 0, 0, 0, 205, 1480, 1, 0, 0, 0, 207, 1516, 1, 0, 0, 0, 209, 1536, 1, 0, 0, 0, 211, 1538, 1, 0, 0, 0, 213, 1557, 1, 0, 0, 0, 215, 1559, 1, 0, 0, 0, 217, 1567, 1, 0, 0, 0, 219, 1571, 1, 0, 0, 0, 221, 1577, 1, 0, 0, 0, 223, 1584, 1, 0, 0, 0, 225, 1604, 1, 0, 0, 0, 227, 1628, 1, 0, 0, 0, 229, 1630, 1, 0, 0, 0, 231, 1651, 1, 0, 0, 0, 233, 1668, 1, 0, 0, 0, 235, 1683, 1, 0, 0, 0, 237, 1685, 1, 0, 0, 0, 239, 1692, 1, 0, 0, 0, 241, 1716, 1, 0, 0, 0, 243, 1718, 1, 0, 0, 0, 245, 1729, 1, 0, 0, 0, 247, 1739, 1, 0, 0, 0, 249, 1751, 1, 0, 0, 0, 251, 1761, 1, 0, 0, 0, 253, 1791, 1, 0, 0, 0, 255, 1793, 1, 0, 0, 0, 257, 1799, 1, 0, 0, 0, 259, 1807, 1, 0, 0, 0, 261, 1811, 1, 0, 0, 0, 263, 1817, 1, 0, 0, 0, 265, 1823, 1, 0, 0, 0, 267, 1829, 1, 0, 0, 0, 269, 1834, 1, 0, 0, 0, 271, 1840, 1, 0, 0, 0, 273, 1860, 1, 0, 0, 0, 275, 1862, 1, 0, 0, 0, 277, 1867, 1, 0, 0, 0, 279, 1875, 1, 0, 0, 0, 281, 1882, 1, 0, 0, 0, 283, 1888, 1, 0, 0, 0, 285, 1899, 1, 0, 0, 0, 287, 1911, 1, 0, 0, 0, 289, 1924, 1, 0, 0, 0, 291, 1938, 1, 0, 0, 0, 293, 1951, 1, 0, 0, 0, 295, 1965, 1, 0, 0, 0, 297, 1976, 1, 0, 0, 0, 299, 1987, 1, 0, 0, 0, 301, 1998, 1, 0, 0, 0, 303, 2009, 1, 0, 0, 0, 305, 2028, 1, 0, 0, 0, 307, 2089, 1, 0, 0, 0, 309, 2091, 1, 0, 0, 0, 311, 2127, 1, 0, 0, 0, 313, 2160, 1, 0, 0, 0, 315, 2181, 1, 0, 0, 0, 317, 2183, 1, 0, 0, 0, 319, 2186, 1, 0, 0, 0, 321, 2191, 1, 0, 0, 0, 323, 2197, 1, 0, 0, 0, 325, 2201, 1, 0, 0, 0, 327, 2204, 1, 0, 0, 0, 329, 2210, 1, 0, 0, 0, 331, 2219, 1, 0, 0, 0, 333, 2238, 1, 0, 0, 0, 335, 2240, 1, 0, 0, 0, 337, 2245, 1, 0, 0, 0, 339, 2253, 1, 0, 0, 0, 341, 2260, 1, 0, 0, 0, 343, 2267, 1, 0, 0, 0, 345, 2275, 1, 0, 0, 0, 347, 2283, 1, 0, 0, 0, 349, 2290, 1, 0, 0, 0, 351, 2295, 1, 0, 0, 0, 353, 2306, 1, 0, 0, 0, 355, 2315, 1, 0, 0, 0, 357, 2323, 1, 0, 0, 0, 359, 2333, 1, 0, 0, 0, 361, 2338, 1, 0, 0, 0, 363, 2357, 1, 0, 0, 0, 365, 2359, 1, 0, 0, 0, 367, 2367, 1, 0, 0, 0, 369, 2388, 1, 0, 0, 0, 371, 2407, 1, 0, 0, 0, 373, 2409, 1, 0, 0, 0, 375, 2416, 1, 0, 0, 0, 377, 2424, 1, 0, 0, 0, 379, 2459, 1, 0, 0, 0, 381, 2484, 1, 0, 0, 0, 383, 2504, 1, 0, 0, 0, 385, 2529, 1, 0, 0, 0, 387, 2554, 1, 0, 0, 0, 389, 2577, 1, 0, 0, 0, 391, 2598, 1, 0, 0, 0, 393, 2617, 1, 0, 0, 0, 395, 2638, 1, 0, 0, 0, 397, 2659, 1, 0, 0, 0, 399, 2684, 1, 0, 0, 0, 401, 2705, 1, 0, 0, 0, 403, 2726, 1, 0, 0, 0, 405, 2748, 1, 0, 0, 0, 407, 2768, 1, 0, 0, 0, 409, 2818, 1, 0, 0, 0, 411, 2848, 1, 0, 0, 0, 413, 2868, 1, 0, 0, 0, 415, 2898, 1, 0, 0, 0, 417, 2900, 1, 0, 0, 0, 419, 2902, 1, 0, 0, 0, 421, 2904, 1, 0, 0, 0, 423, 2906, 1, 0, 0, 0, 425, 2908, 1, 0, 0, 0, 427, 2910, 1, 0, 0, 0, 429, 2912, 1, 0, 0, 0, 431, 2915, 1, 0, 0, 0, 433, 2918, 1, 0, 0, 0, 435, 2921, 1, 0, 0, 0, 437, 2923, 1, 0, 0, 0, 439, 2926, 1, 0, 0, 0, 441, 2928, 1, 0, 0, 0, 443, 2931, 1, 0, 0, 0, 445, 2933, 1, 0, 0, 0, 447, 2936, 1, 0, 0, 0, 449, 2939, 1, 0, 0, 0, 451, 2942, 1, 0, 0, 0, 453, 2945, 1, 0, 0, 0, 455, 2948, 1, 0, 0, 0, 457, 2951, 1, 0, 0, 0, 459, 2953, 1, 0, 0, 0, 461, 2955, 1, 0, 0, 0, 463, 2957, 1, 0, 0, 0, 465, 2959, 1, 0, 0, 0, 467, 2961, 1, 0, 0, 0, 469, 2964, 1, 0, 0, 0, 471, 2966, 1, 0, 0, 0, 473, 2968, 1, 0, 0, 0, 475, 2970, 1, 0, 0, 0, 477, 2972, 1, 0, 0, 0, 479, 2974, 1, 0, 0, 0, 481, 2996, 1, 0, 0, 0, 483, 3014, 1, 0, 0, 0, 485, 3036, 1, 0, 0, 0, 487, 3038, 1, 0, 0, 0, 489, 3045, 1, 0, 0, 0, 491, 3054, 1, 0, 0, 0, 493, 3069, 1, 0, 0, 0, 495, 496, 5, 115, 0, 0, 496, 497, 5, 105, 0, 0, 497, 498, 5, 110, 0, 0, 498, 2, 1, 0, 0, 0, 499, 500, 5, 99, 0, 0, 500, 501, 5, 111, 0, 0, 501, 502, 5, 115, 0, 0, 502, 4, 1, 0, 0, 0, 503, 504, 5, 116, 0, 0, 504, 505, 5, 97, 0, 0, 505, 506, 5, 110, 0, 0, 506, 6, 1, 0, 0, 0, 507, 508, 5, 97, 0, 0, 508, 509, 5, 115, 0, 0, 509, 510, 5, 105, 0, 0, 510, 511, 5, 110, 0, 0, 511, 8, 1, 0, 0, 0, 512, 513, 5, 97, 0, 0, 513, 514, 5, 99, 0, 0, 514, 515, 5, 111, 0, 0, 515, 516, 5, 115, 0, 0, 516, 10, 1, 0, 0, 0, 517, 518, 5, 97, 0, 0, 518, 519, 5, 116, 0, 0, 519, 520, 5, 97, 0, 0, 520, 521, 5, 110, 0, 0, 521, 12, 1, 0, 0, 0, 522, 523, 5, 97, 0, 0, 523, 524, 5, 116, 0, 0, 524, 525, 5, 97, 0, 0, 525, 526, 5, 110, 0, 0, 526, 527, 5, 50, 0, 0, 527, 14, 1, 0, 0, 0, 528, 529, 5, 115, 0, 0, 529, 530, 5, 105, 0, 0, 530, 531, 5, 110, 0, 0, 531, 532, 5, 104, 0, 0, 532, 16, 1, 0, 0, 0, 533, 534, 5, 99, 0, 0, 534, 535, 5, 111, 0, 0, 535, 536, 5, 115, 0, 0, 536, 537, 5, 104, 0, 0, 537, 18, 1, 0, 0, 0, 538, 539, 5, 116, 0, 0, 539, 540, 5, 97, 0, 0, 540, 541, 5, 110, 0, 0, 541, 542, 5, 104, 0, 0, 542, 20, 1, 0, 0, 0, 543, 544, 5, 97, 0, 0, 544, 545, 5, 115, 0, 0, 545, 546, 5, 105, 0, 0, 546, 547, 5, 110, 0, 0, 547, 548, 5, 104, 0, 0, 548, 22, 1, 0, 0, 0, 549, 550, 5, 97, 0, 0, 550, 551, 5, 99, 0, 0, 551, 552, 5, 111, 0, 0, 552, 553, 5, 115, 0, 0, 553, 554, 5, 104, 0, 0, 554, 24, 1, 0, 0, 0, 555, 556, 5, 97, 0, 0, 556, 557, 5, 116, 0, 0, 557, 558, 5, 97, 0, 0, 558, 559, 5, 110, 0, 0, 559, 560, 5, 104, 0, 0, 560, 26, 1, 0, 0, 0, 561, 562, 5, 97, 0, 0, 562, 563, 5, 98, 0, 0, 563, 564, 5, 115, 0, 0, 564, 28, 1, 0, 0, 0, 565, 566, 5, 115, 0, 0, 566, 567, 5, 113, 0, 0, 567, 568, 5, 114, 0, 0, 568, 569, 5, 116, 0, 0, 569, 30, 1, 0, 0, 0, 570, 571, 5, 108, 0, 0, 571, 572, 5, 110, 0, 0, 572, 32, 1, 0, 0, 0, 573, 574, 5, 108, 0, 0, 574, 575, 5, 111, 0, 0, 575, 576, 5, 103, 0, 0, 576, 34, 1, 0, 0, 0, 577, 578, 5, 101, 0, 0, 578, 579, 5, 120, 0, 0, 579, 580, 5, 112, 0, 0, 580, 36, 1, 0, 0, 0, 581, 582, 5, 115, 0, 0, 582, 583, 5, 109, 0, 0, 583, 584, 5, 105, 0, 0, 584, 585, 5, 110, 0, 0, 585, 38, 1, 0, 0, 0, 586, 587, 5, 115, 0, 0, 587, 588, 5, 109, 0, 0, 588, 589, 5, 97, 0, 0, 589, 590, 5, 120, 0, 0, 590, 40, 1, 0, 0, 0, 591, 592, 5, 116, 0, 0, 592, 593, 5, 109, 0, 0, 593, 594, 5, 105, 0, 0, 594, 595, 5, 110, 0, 0, 595, 42, 1, 0, 0, 0, 596, 597, 5, 116, 0, 0, 597, 598, 5, 109, 0, 0, 598, 599, 5, 97, 0, 0, 599, 600, 5, 120, 0, 0, 600, 44, 1, 0, 0, 0, 601, 602, 5, 116, 0, 0, 602, 603, 5, 110, 0, 0, 603, 604, 5, 111, 0, 0, 604, 605, 5, 114, 0, 0, 605, 606, 5, 109, 0, 0, 606, 46, 1, 0, 0, 0, 607, 608, 5, 115, 0, 0, 608, 609, 5, 110, 0, 0, 609, 610, 5, 111, 0, 0, 610, 611, 5, 114, 0, 0, 611, 612, 5, 109, 0, 0, 612, 48, 1, 0, 0, 0, 613, 614, 5, 102, 0, 0, 614, 615, 5, 108, 0, 0, 615, 616, 5, 111, 0, 0, 616, 617, 5, 111, 0, 0, 617, 618, 5, 114, 0, 0, 618, 50, 1, 0, 0, 0, 619, 620, 5, 99, 0, 0, 620, 621, 5, 101, 0, 0, 621, 622, 5, 105, 0, 0, 622, 623, 5, 108, 0, 0, 623, 52, 1, 0, 0, 0, 624, 625, 5, 114, 0, 0, 625, 626, 5, 111, 0, 0, 626, 627, 5, 117, 0, 0, 627, 628, 5, 110, 0, 0, 628, 629, 5, 100, 0, 0, 629, 54, 1, 0, 0, 0, 630, 631, 5, 103, 0, 0, 631, 632, 5, 97, 0, 0, 632, 633, 5, 109, 0, 0, 633, 634, 5, 109, 0, 0, 634, 635, 5, 97, 0, 0, 635, 56, 1, 0, 0, 0, 636, 637, 5, 112, 0, 0, 637, 638, 5, 111, 0, 0, 638, 639, 5, 119, 0, 0, 639, 58, 1, 0, 0, 0, 640, 641, 5, 115, 0, 0, 641, 642, 5, 105, 0, 0, 642, 643, 5, 103, 0, 0, 643, 644, 5, 109, 0, 0, 644, 60, 1, 0, 0, 0, 645, 646, 5, 99, 0, 0, 646, 647, 5, 108, 0, 0, 647, 648, 5, 97, 0, 0, 648, 649, 5, 109, 0, 0, 649, 650, 5, 112, 0, 0, 650, 62, 1, 0, 0, 0, 651, 652, 5, 102, 0, 0, 652, 653, 5, 102, 0, 0, 653, 654, 5, 116, 0, 0, 654, 64, 1, 0, 0, 0, 655, 656, 5, 105, 0, 0, 656, 657, 5, 102, 0, 0, 657, 658, 5, 102, 0, 0, 658, 659, 5, 116, 0, 0, 659, 66, 1, 0, 0, 0, 660, 661, 5, 97, 0, 0, 661, 662, 5, 110, 0, 0, 662, 663, 5, 103, 0, 0, 663, 664, 5, 108, 0, 0, 664, 665, 5, 101, 0, 0, 665, 68, 1, 0, 0, 0, 666, 667, 5, 112, 0, 0, 667, 668, 5, 114, 0, 0, 668, 669, 5, 105, 0, 0, 669, 670, 5, 110, 0, 0, 670, 671, 5, 116, 0, 0, 671, 70, 1, 0, 0, 0, 672, 673, 5, 112, 0, 0, 673, 674, 5, 114, 0, 0, 674, 675, 5, 105, 0, 0, 675, 676, 5, 110, 0, 0, 676, 677, 5, 116, 0, 0, 677, 678, 5, 95, 0, 0, 678, 679, 5, 115, 0, 0, 679, 680, 5, 104, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 112, 0, 0, 682, 688, 5, 101, 0, 0, 683, 684, 5, 112, 0, 0, 684, 685, 5, 115, 0, 0, 685, 686, 5, 104, 0, 0, 686, 688, 5, 112, 0, 0, 687, 672, 1, 0, 0, 0, 687, 683, 1, 0, 0, 0, 688, 72, 1, 0, 0, 0, 689, 690, 5, 110, 0, 0, 690, 691, 5, 118, 0, 0, 691, 703, 5, 108, 0, 0, 692, 693, 5, 110, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 110, 0, 0, 695, 696, 5, 95, 0, 0, 696, 697, 5, 116, 0, 0, 697, 698, 5, 111, 0, 0, 698, 699, 5, 95, 0, 0, 699, 700, 5, 110, 0, 0, 700, 701, 5, 117, 0, 0, 701, 703, 5, 109, 0, 0, 702, 689, 1, 0, 0, 0, 702, 692, 1, 0, 0, 0, 703, 74, 1, 0, 0, 0, 704, 705, 5, 108, 0, 0, 705, 706, 5, 101, 0, 0, 706, 707, 5, 114, 0, 0, 707, 708, 5, 112, 0, 0, 708, 76, 1, 0, 0, 0, 709, 710, 5, 115, 0, 0, 710, 711, 5, 116, 0, 0, 711, 712, 5, 101, 0, 0, 712, 713, 5, 112, 0, 0, 713, 78, 1, 0, 0, 0, 714, 715, 5, 115, 0, 0, 715, 716, 5, 109, 0, 0, 716, 717, 5, 111, 0, 0, 717, 718, 5, 111, 0, 0, 718, 719, 5, 116, 0, 0, 719, 720, 5, 104, 0, 0, 720, 721, 5, 115, 0, 0, 721, 722, 5, 116, 0, 0, 722, 723, 5, 101, 0, 0, 723, 724, 5, 112, 0, 0, 724, 80, 1, 0, 0, 0, 725, 726, 5, 102, 0, 0, 726, 727, 5, 114, 0, 0, 727, 728, 5, 97, 0, 0, 728, 729, 5, 99, 0, 0, 729, 730, 5, 116, 0, 0, 730, 82, 1, 0, 0, 0, 731, 732, 5, 114, 0, 0, 732, 733, 5, 101, 0, 0, 733, 734, 5, 108, 0, 0, 734, 735, 5, 117, 0, 0, 735, 84, 1, 0, 0, 0, 736, 737, 5, 115, 0, 0, 737, 738, 5, 111, 0, 0, 738, 739, 5, 102, 0, 0, 739, 740, 5, 116, 0, 0, 740, 741, 5, 112, 0, 0, 741, 742, 5, 108, 0, 0, 742, 743, 5, 117, 0, 0, 743, 744, 5, 115, 0, 0, 744, 86, 1, 0, 0, 0, 745, 746, 5, 103, 0, 0, 746, 747, 5, 101, 0, 0, 747, 748, 5, 108, 0, 0, 748, 749, 5, 117, 0, 0, 749, 88, 1, 0, 0, 0, 750, 751, 5, 115, 0, 0, 751, 752, 5, 105, 0, 0, 752, 753, 5, 103, 0, 0, 753, 754, 5, 110, 0, 0, 754, 90, 1, 0, 0, 0, 755, 756, 5, 109, 0, 0, 756, 757, 5, 97, 0, 0, 757, 758, 5, 112, 0, 0, 758, 92, 1, 0, 0, 0, 759, 760, 5, 101, 0, 0, 760, 761, 5, 122, 0, 0, 761, 762, 5, 99, 0, 0, 762, 763, 5, 111, 0, 0, 763, 764, 5, 110, 0, 0, 764, 765, 5, 118, 0, 0, 765, 766, 5, 111, 0, 0, 766, 767, 5, 108, 0, 0, 767, 768, 5, 117, 0, 0, 768, 769, 5, 116, 0, 0, 769, 770, 5, 105, 0, 0, 770, 771, 5, 111, 0, 0, 771, 779, 5, 110, 0, 0, 772, 773, 5, 101, 0, 0, 773, 774, 5, 122, 0, 0, 774, 775, 5, 99, 0, 0, 775, 776, 5, 111, 0, 0, 776, 777, 5, 110, 0, 0, 777, 779, 5, 118, 0, 0, 778, 759, 1, 0, 0, 0, 778, 772, 1, 0, 0, 0, 779, 94, 1, 0, 0, 0, 780, 781, 5, 99, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 110, 0, 0, 783, 784, 5, 118, 0, 0, 784, 785, 5, 111, 0, 0, 785, 786, 5, 108, 0, 0, 786, 787, 5, 117, 0, 0, 787, 788, 5, 116, 0, 0, 788, 789, 5, 105, 0, 0, 789, 790, 5, 111, 0, 0, 790, 796, 5, 110, 0, 0, 791, 792, 5, 99, 0, 0, 792, 793, 5, 111, 0, 0, 793, 794, 5, 110, 0, 0, 794, 796, 5, 118, 0, 0, 795, 780, 1, 0, 0, 0, 795, 791, 1, 0, 0, 0, 796, 96, 1, 0, 0, 0, 797, 798, 5, 115, 0, 0, 798, 799, 5, 119, 0, 0, 799, 800, 5, 97, 0, 0, 800, 801, 5, 112, 0, 0, 801, 98, 1, 0, 0, 0, 802, 803, 5, 116, 0, 0, 803, 804, 5, 114, 0, 0, 804, 805, 5, 97, 0, 0, 805, 806, 5, 110, 0, 0, 806, 807, 5, 115, 0, 0, 807, 808, 5, 112, 0, 0, 808, 809, 5, 111, 0, 0, 809, 810, 5, 115, 0, 0, 810, 820, 5, 101, 0, 0, 811, 812, 5, 115, 0, 0, 812, 813, 5, 119, 0, 0, 813, 814, 5, 97, 0, 0, 814, 815, 5, 112, 0, 0, 815, 816, 5, 97, 0, 0, 816, 817, 5, 120, 0, 0, 817, 818, 5, 101, 0, 0, 818, 820, 5, 115, 0, 0, 819, 802, 1, 0, 0, 0, 819, 811, 1, 0, 0, 0, 820, 100, 1, 0, 0, 0, 821, 822, 5, 112, 0, 0, 822, 823, 5, 101, 0, 0, 823, 824, 5, 114, 0, 0, 824, 825, 5, 109, 0, 0, 825, 826, 5, 117, 0, 0, 826, 827, 5, 116, 0, 0, 827, 833, 5, 101, 0, 0, 828, 829, 5, 112, 0, 0, 829, 830, 5, 101, 0, 0, 830, 831, 5, 114, 0, 0, 831, 833, 5, 109, 0, 0, 832, 821, 1, 0, 0, 0, 832, 828, 1, 0, 0, 0, 833, 102, 1, 0, 0, 0, 834, 835, 5, 114, 0, 0, 835, 836, 5, 101, 0, 0, 836, 837, 5, 115, 0, 0, 837, 838, 5, 104, 0, 0, 838, 839, 5, 97, 0, 0, 839, 840, 5, 112, 0, 0, 840, 846, 5, 101, 0, 0, 841, 842, 5, 114, 0, 0, 842, 843, 5, 115, 0, 0, 843, 844, 5, 104, 0, 0, 844, 846, 5, 112, 0, 0, 845, 834, 1, 0, 0, 0, 845, 841, 1, 0, 0, 0, 846, 104, 1, 0, 0, 0, 847, 848, 5, 114, 0, 0, 848, 849, 5, 97, 0, 0, 849, 850, 5, 110, 0, 0, 850, 851, 5, 103, 0, 0, 851, 852, 5, 101, 0, 0, 852, 106, 1, 0, 0, 0, 853, 854, 5, 108, 0, 0, 854, 855, 5, 105, 0, 0, 855, 856, 5, 110, 0, 0, 856, 857, 5, 115, 0, 0, 857, 858, 5, 112, 0, 0, 858, 859, 5, 97, 0, 0, 859, 860, 5, 99, 0, 0, 860, 861, 5, 101, 0, 0, 861, 108, 1, 0, 0, 0, 862, 863, 5, 108, 0, 0, 863, 864, 5, 111, 0, 0, 864, 865, 5, 103, 0, 0, 865, 866, 5, 115, 0, 0, 866, 867, 5, 112, 0, 0, 867, 868, 5, 97, 0, 0, 868, 869, 5, 99, 0, 0, 869, 870, 5, 101, 0, 0, 870, 110, 1, 0, 0, 0, 871, 872, 5, 116, 0, 0, 872, 873, 5, 111, 0, 0, 873, 874, 5, 112, 0, 0, 874, 875, 5, 107, 0, 0, 875, 112, 1, 0, 0, 0, 876, 877, 5, 98, 0, 0, 877, 878, 5, 111, 0, 0, 878, 879, 5, 116, 0, 0, 879, 880, 5, 107, 0, 0, 880, 114, 1, 0, 0, 0, 881, 882, 5, 112, 0, 0, 882, 883, 5, 105, 0, 0, 883, 884, 5, 110, 0, 0, 884, 885, 5, 118, 0, 0, 885, 116, 1, 0, 0, 0, 886, 887, 5, 115, 0, 0, 887, 888, 5, 117, 0, 0, 888, 889, 5, 109, 0, 0, 889, 118, 1, 0, 0, 0, 890, 891, 5, 109, 0, 0, 891, 892, 5, 101, 0, 0, 892, 893, 5, 97, 0, 0, 893, 894, 5, 110, 0, 0, 894, 120, 1, 0, 0, 0, 895, 896, 5, 115, 0, 0, 896, 897, 5, 116, 0, 0, 897, 898, 5, 100, 0, 0, 898, 122, 1, 0, 0, 0, 899, 900, 5, 118, 0, 0, 900, 901, 5, 97, 0, 0, 901, 902, 5, 114, 0, 0, 902, 124, 1, 0, 0, 0, 903, 904, 5, 113, 0, 0, 904, 905, 5, 117, 0, 0, 905, 906, 5, 97, 0, 0, 906, 907, 5, 114, 0, 0, 907, 908, 5, 116, 0, 0, 908, 909, 5, 105, 0, 0, 909, 910, 5, 108, 0, 0, 910, 919, 5, 101, 0, 0, 911, 912, 5, 113, 0, 0, 912, 913, 5, 117, 0, 0, 913, 914, 5, 97, 0, 0, 914, 915, 5, 114, 0, 0, 915, 916, 5, 116, 0, 0, 916, 917, 5, 105, 0, 0, 917, 919, 5, 108, 0, 0, 918, 903, 1, 0, 0, 0, 918, 911, 1, 0, 0, 0, 919, 126, 1, 0, 0, 0, 920, 921, 5, 112, 0, 0, 921, 922, 5, 101, 0, 0, 922, 923, 5, 114, 0, 0, 923, 924, 5, 99, 0, 0, 924, 925, 5, 101, 0, 0, 925, 926, 5, 110, 0, 0, 926, 927, 5, 116, 0, 0, 927, 928, 5, 105, 0, 0, 928, 929, 5, 108, 0, 0, 929, 936, 5, 101, 0, 0, 930, 931, 5, 112, 0, 0, 931, 932, 5, 114, 0, 0, 932, 933, 5, 99, 0, 0, 933, 934, 5, 110, 0, 0, 934, 936, 5, 116, 0, 0, 935, 920, 1, 0, 0, 0, 935, 930, 1, 0, 0, 0, 936, 128, 1, 0, 0, 0, 937, 938, 5, 113, 0, 0, 938, 939, 5, 117, 0, 0, 939, 940, 5, 97, 0, 0, 940, 941, 5, 110, 0, 0, 941, 942, 5, 116, 0, 0, 942, 943, 5, 105, 0, 0, 943, 944, 5, 108, 0, 0, 944, 945, 5, 101, 0, 0, 945, 130, 1, 0, 0, 0, 946, 947, 5, 100, 0, 0, 947, 948, 5, 111, 0, 0, 948, 949, 5, 116, 0, 0, 949, 132, 1, 0, 0, 0, 950, 951, 5, 109, 0, 0, 951, 952, 5, 111, 0, 0, 952, 953, 5, 109, 0, 0, 953, 954, 5, 101, 0, 0, 954, 955, 5, 110, 0, 0, 955, 956, 5, 116, 0, 0, 956, 134, 1, 0, 0, 0, 957, 958, 5, 101, 0, 0, 958, 959, 5, 114, 0, 0, 959, 960, 5, 102, 0, 0, 960, 136, 1, 0, 0, 0, 961, 962, 5, 101, 0, 0, 962, 963, 5, 114, 0, 0, 963, 964, 5, 102, 0, 0, 964, 965, 5, 105, 0, 0, 965, 966, 5, 110, 0, 0, 966, 967, 5, 118, 0, 0, 967, 138, 1, 0, 0, 0, 968, 969, 5, 97, 0, 0, 969, 970, 5, 110, 0, 0, 970, 971, 5, 121, 0, 0, 971, 140, 1, 0, 0, 0, 972, 973, 5, 97, 0, 0, 973, 974, 5, 108, 0, 0, 974, 975, 5, 108, 0, 0, 975, 142, 1, 0, 0, 0, 976, 977, 5, 101, 0, 0, 977, 978, 5, 100, 0, 0, 978, 979, 5, 103, 0, 0, 979, 980, 5, 101, 0, 0, 980, 144, 1, 0, 0, 0, 981, 982, 5, 98, 0, 0, 982, 983, 5, 108, 0, 0, 983, 984, 5, 117, 0, 0, 984, 994, 5, 114, 0, 0, 985, 986, 5, 103, 0, 0, 986, 987, 5, 97, 0, 0, 987, 988, 5, 117, 0, 0, 988, 989, 5, 115, 0, 0, 989, 990, 5, 115, 0, 0, 990, 991, 5, 105, 0, 0, 991, 992, 5, 97, 0, 0, 992, 994, 5, 110, 0, 0, 993, 981, 1, 0, 0, 0, 993, 985, 1, 0, 0, 0, 994, 146, 1, 0, 0, 0, 995, 996, 5, 109, 0, 0, 996, 997, 5, 101, 0, 0, 997, 998, 5, 100, 0, 0, 998, 999, 5, 105, 0, 0, 999, 1000, 5, 97, 0, 0, 1000, 1001, 5, 110, 0, 0, 1001, 148, 1, 0, 0, 0, 1002, 1003, 5, 109, 0, 0, 1003, 1004, 5, 111, 0, 0, 1004, 1005, 5, 100, 0, 0, 1005, 1006, 5, 101, 0, 0, 1006, 150, 1, 0, 0, 0, 1007, 1008, 5, 99, 0, 0, 1008, 1009, 5, 117, 0, 0, 1009, 1010, 5, 109, 0, 0, 1010, 1011, 5, 115, 0, 0, 1011, 1012, 5, 117, 0, 0, 1012, 1013, 5, 109, 0, 0, 1013, 152, 1, 0, 0, 0, 1014, 1015, 5, 99, 0, 0, 1015, 1016, 5, 117, 0, 0, 1016, 1017, 5, 109, 0, 0, 1017, 1018, 5, 112, 0, 0, 1018, 1019, 5, 114, 0, 0, 1019, 1020, 5, 111, 0, 0, 1020, 1021, 5, 100, 0, 0, 1021, 154, 1, 0, 0, 0, 1022, 1023, 5, 116, 0, 0, 1023, 1024, 5, 111, 0, 0, 1024, 1025, 5, 112, 0, 0, 1025, 1026, 5, 107, 0, 0, 1026, 1027, 5, 95, 0, 0, 1027, 1028, 5, 105, 0, 0, 1028, 1029, 5, 110, 0, 0, 1029, 1043, 5, 100, 0, 0, 1030, 1031, 5, 116, 0, 0, 1031, 1032, 5, 111, 0, 0, 1032, 1033, 5, 112, 0, 0, 1033, 1034, 5, 107, 0, 0, 1034, 1035, 5, 95, 0, 0, 1035, 1036, 5, 105, 0, 0, 1036, 1037, 5, 110, 0, 0, 1037, 1038, 5, 100, 0, 0, 1038, 1039, 5, 105, 0, 0, 1039, 1040, 5, 99, 0, 0, 1040, 1041, 5, 101, 0, 0, 1041, 1043, 5, 115, 0, 0, 1042, 1022, 1, 0, 0, 0, 1042, 1030, 1, 0, 0, 0, 1043, 156, 1, 0, 0, 0, 1044, 1045, 5, 98, 0, 0, 1045, 1046, 5, 111, 0, 0, 1046, 1047, 5, 116, 0, 0, 1047, 1048, 5, 107, 0, 0, 1048, 1049, 5, 95, 0, 0, 1049, 1050, 5, 105, 0, 0, 1050, 1051, 5, 110, 0, 0, 1051, 1065, 5, 100, 0, 0, 1052, 1053, 5, 98, 0, 0, 1053, 1054, 5, 111, 0, 0, 1054, 1055, 5, 116, 0, 0, 1055, 1056, 5, 107, 0, 0, 1056, 1057, 5, 95, 0, 0, 1057, 1058, 5, 105, 0, 0, 1058, 1059, 5, 110, 0, 0, 1059, 1060, 5, 100, 0, 0, 1060, 1061, 5, 105, 0, 0, 1061, 1062, 5, 99, 0, 0, 1062, 1063, 5, 101, 0, 0, 1063, 1065, 5, 115, 0, 0, 1064, 1044, 1, 0, 0, 0, 1064, 1052, 1, 0, 0, 0, 1065, 158, 1, 0, 0, 0, 1066, 1067, 5, 99, 0, 0, 1067, 1068, 5, 117, 0, 0, 1068, 1069, 5, 98, 0, 0, 1069, 1070, 5, 105, 0, 0, 1070, 1071, 5, 99, 0, 0, 1071, 1072, 5, 95, 0, 0, 1072, 1073, 5, 101, 0, 0, 1073, 1074, 5, 97, 0, 0, 1074, 1075, 5, 115, 0, 0, 1075, 1082, 5, 101, 0, 0, 1076, 1077, 5, 99, 0, 0, 1077, 1078, 5, 117, 0, 0, 1078, 1079, 5, 98, 0, 0, 1079, 1080, 5, 105, 0, 0, 1080, 1082, 5, 99, 0, 0, 1081, 1066, 1, 0, 0, 0, 1081, 1076, 1, 0, 0, 0, 1082, 160, 1, 0, 0, 0, 1083, 1084, 5, 101, 0, 0, 1084, 1085, 5, 108, 0, 0, 1085, 1086, 5, 97, 0, 0, 1086, 1087, 5, 115, 0, 0, 1087, 1088, 5, 116, 0, 0, 1088, 1089, 5, 105, 0, 0, 1089, 1090, 5, 99, 0, 0, 1090, 1091, 5, 95, 0, 0, 1091, 1092, 5, 101, 0, 0, 1092, 1093, 5, 97, 0, 0, 1093, 1094, 5, 115, 0, 0, 1094, 1103, 5, 101, 0, 0, 1095, 1096, 5, 101, 0, 0, 1096, 1097, 5, 108, 0, 0, 1097, 1098, 5, 97, 0, 0, 1098, 1099, 5, 115, 0, 0, 1099, 1100, 5, 116, 0, 0, 1100, 1101, 5, 105, 0, 0, 1101, 1103, 5, 99, 0, 0, 1102, 1083, 1, 0, 0, 0, 1102, 1095, 1, 0, 0, 0, 1103, 162, 1, 0, 0, 0, 1104, 1105, 5, 115, 0, 0, 1105, 1106, 5, 105, 0, 0, 1106, 1107, 5, 110, 0, 0, 1107, 1108, 5, 101, 0, 0, 1108, 1109, 5, 95, 0, 0, 1109, 1110, 5, 101, 0, 0, 1110, 1111, 5, 97, 0, 0, 1111, 1112, 5, 115, 0, 0, 1112, 1118, 5, 101, 0, 0, 1113, 1114, 5, 115, 0, 0, 1114, 1115, 5, 105, 0, 0, 1115, 1116, 5, 110, 0, 0, 1116, 1118, 5, 101, 0, 0, 1117, 1104, 1, 0, 0, 0, 1117, 1113, 1, 0, 0, 0, 1118, 164, 1, 0, 0, 0, 1119, 1120, 5, 115, 0, 0, 1120, 1121, 5, 109, 0, 0, 1121, 1122, 5, 111, 0, 0, 1122, 1123, 5, 111, 0, 0, 1123, 1124, 5, 116, 0, 0, 1124, 1125, 5, 104, 0, 0, 1125, 1126, 5, 101, 0, 0, 1126, 1127, 5, 114, 0, 0, 1127, 1128, 5, 115, 0, 0, 1128, 1129, 5, 116, 0, 0, 1129, 1130, 5, 101, 0, 0, 1130, 1131, 5, 112, 0, 0, 1131, 166, 1, 0, 0, 0, 1132, 1133, 5, 100, 0, 0, 1133, 1134, 5, 105, 0, 0, 1134, 1135, 5, 115, 0, 0, 1135, 1145, 5, 116, 0, 0, 1136, 1137, 5, 100, 0, 0, 1137, 1138, 5, 105, 0, 0, 1138, 1139, 5, 115, 0, 0, 1139, 1140, 5, 116, 0, 0, 1140, 1141, 5, 97, 0, 0, 1141, 1142, 5, 110, 0, 0, 1142, 1143, 5, 99, 0, 0, 1143, 1145, 5, 101, 0, 0, 1144, 1132, 1, 0, 0, 0, 1144, 1136, 1, 0, 0, 0, 1145, 168, 1, 0, 0, 0, 1146, 1147, 5, 114, 0, 0, 1147, 1148, 5, 101, 0, 0, 1148, 1149, 5, 109, 0, 0, 1149, 1150, 5, 97, 0, 0, 1150, 1151, 5, 112, 0, 0, 1151, 170, 1, 0, 0, 0, 1152, 1153, 5, 99, 0, 0, 1153, 1154, 5, 111, 0, 0, 1154, 1155, 5, 115, 0, 0, 1155, 1156, 5, 115, 0, 0, 1156, 1157, 5, 105, 0, 0, 1157, 1176, 5, 109, 0, 0, 1158, 1159, 5, 99, 0, 0, 1159, 1160, 5, 111, 0, 0, 1160, 1161, 5, 115, 0, 0, 1161, 1162, 5, 105, 0, 0, 1162, 1163, 5, 110, 0, 0, 1163, 1164, 5, 101, 0, 0, 1164, 1165, 5, 95, 0, 0, 1165, 1166, 5, 115, 0, 0, 1166, 1167, 5, 105, 0, 0, 1167, 1168, 5, 109, 0, 0, 1168, 1169, 5, 105, 0, 0, 1169, 1170, 5, 108, 0, 0, 1170, 1171, 5, 97, 0, 0, 1171, 1172, 5, 114, 0, 0, 1172, 1173, 5, 105, 0, 0, 1173, 1174, 5, 116, 0, 0, 1174, 1176, 5, 121, 0, 0, 1175, 1152, 1, 0, 0, 0, 1175, 1158, 1, 0, 0, 0, 1176, 172, 1, 0, 0, 0, 1177, 1178, 5, 99, 0, 0, 1178, 1179, 5, 111, 0, 0, 1179, 1180, 5, 117, 0, 0, 1180, 1181, 5, 110, 0, 0, 1181, 1192, 5, 116, 0, 0, 1182, 1183, 5, 99, 0, 0, 1183, 1184, 5, 110, 0, 0, 1184, 1192, 5, 116, 0, 0, 1185, 1186, 5, 108, 0, 0, 1186, 1187, 5, 101, 0, 0, 1187, 1188, 5, 110, 0, 0, 1188, 1189, 5, 103, 0, 0, 1189, 1190, 5, 116, 0, 0, 1190, 1192, 5, 104, 0, 0, 1191, 1177, 1, 0, 0, 0, 1191, 1182, 1, 0, 0, 0, 1191, 1185, 1, 0, 0, 0, 1192, 174, 1, 0, 0, 0, 1193, 1194, 5, 107, 0, 0, 1194, 1195, 5, 101, 0, 0, 1195, 1196, 5, 121, 0, 0, 1196, 1197, 5, 115, 0, 0, 1197, 176, 1, 0, 0, 0, 1198, 1199, 5, 101, 0, 0, 1199, 1200, 5, 110, 0, 0, 1200, 1201, 5, 97, 0, 0, 1201, 1202, 5, 98, 0, 0, 1202, 1203, 5, 108, 0, 0, 1203, 1204, 5, 101, 0, 0, 1204, 1205, 5, 95, 0, 0, 1205, 1206, 5, 116, 0, 0, 1206, 1207, 5, 114, 0, 0, 1207, 1208, 5, 97, 0, 0, 1208, 1209, 5, 99, 0, 0, 1209, 1210, 5, 107, 0, 0, 1210, 1211, 5, 105, 0, 0, 1211, 1212, 5, 110, 0, 0, 1212, 1222, 5, 103, 0, 0, 1213, 1214, 5, 116, 0, 0, 1214, 1215, 5, 114, 0, 0, 1215, 1216, 5, 97, 0, 0, 1216, 1217, 5, 99, 0, 0, 1217, 1218, 5, 107, 0, 0, 1218, 1219, 5, 95, 0, 0, 1219, 1220, 5, 111, 0, 0, 1220, 1222, 5, 110, 0, 0, 1221, 1198, 1, 0, 0, 0, 1221, 1213, 1, 0, 0, 0, 1222, 178, 1, 0, 0, 0, 1223, 1224, 5, 100, 0, 0, 1224, 1225, 5, 105, 0, 0, 1225, 1226, 5, 115, 0, 0, 1226, 1227, 5, 97, 0, 0, 1227, 1228, 5, 98, 0, 0, 1228, 1229, 5, 108, 0, 0, 1229, 1230, 5, 101, 0, 0, 1230, 1231, 5, 95, 0, 0, 1231, 1232, 5, 116, 0, 0, 1232, 1233, 5, 114, 0, 0, 1233, 1234, 5, 97, 0, 0, 1234, 1235, 5, 99, 0, 0, 1235, 1236, 5, 107, 0, 0, 1236, 1237, 5, 105, 0, 0, 1237, 1238, 5, 110, 0, 0, 1238, 1249, 5, 103, 0, 0, 1239, 1240, 5, 116, 0, 0, 1240, 1241, 5, 114, 0, 0, 1241, 1242, 5, 97, 0, 0, 1242, 1243, 5, 99, 0, 0, 1243, 1244, 5, 107, 0, 0, 1244, 1245, 5, 95, 0, 0, 1245, 1246, 5, 111, 0, 0, 1246, 1247, 5, 102, 0, 0, 1247, 1249, 5, 102, 0, 0, 1248, 1223, 1, 0, 0, 0, 1248, 1239, 1, 0, 0, 0, 1249, 180, 1, 0, 0, 0, 1250, 1251, 5, 114, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1253, 5, 115, 0, 0, 1253, 1254, 5, 101, 0, 0, 1254, 1255, 5, 116, 0, 0, 1255, 1256, 5, 95, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1258, 5, 114, 0, 0, 1258, 1259, 5, 97, 0, 0, 1259, 1260, 5, 99, 0, 0, 1260, 1261, 5, 107, 0, 0, 1261, 1262, 5, 105, 0, 0, 1262, 1263, 5, 110, 0, 0, 1263, 1276, 5, 103, 0, 0, 1264, 1265, 5, 116, 0, 0, 1265, 1266, 5, 114, 0, 0, 1266, 1267, 5, 97, 0, 0, 1267, 1268, 5, 99, 0, 0, 1268, 1269, 5, 107, 0, 0, 1269, 1270, 5, 95, 0, 0, 1270, 1271, 5, 114, 0, 0, 1271, 1272, 5, 101, 0, 0, 1272, 1273, 5, 115, 0, 0, 1273, 1274, 5, 101, 0, 0, 1274, 1276, 5, 116, 0, 0, 1275, 1250, 1, 0, 0, 0, 1275, 1264, 1, 0, 0, 0, 1276, 182, 1, 0, 0, 0, 1277, 1278, 5, 103, 0, 0, 1278, 1279, 5, 101, 0, 0, 1279, 1280, 5, 116, 0, 0, 1280, 1281, 5, 95, 0, 0, 1281, 1282, 5, 99, 0, 0, 1282, 1283, 5, 104, 0, 0, 1283, 1284, 5, 97, 0, 0, 1284, 1285, 5, 110, 0, 0, 1285, 1286, 5, 103, 0, 0, 1286, 1287, 5, 101, 0, 0, 1287, 1288, 5, 100, 0, 0, 1288, 1289, 5, 95, 0, 0, 1289, 1290, 5, 107, 0, 0, 1290, 1291, 5, 101, 0, 0, 1291, 1292, 5, 121, 0, 0, 1292, 1306, 5, 115, 0, 0, 1293, 1294, 5, 99, 0, 0, 1294, 1295, 5, 104, 0, 0, 1295, 1296, 5, 97, 0, 0, 1296, 1297, 5, 110, 0, 0, 1297, 1298, 5, 103, 0, 0, 1298, 1299, 5, 101, 0, 0, 1299, 1300, 5, 100, 0, 0, 1300, 1301, 5, 95, 0, 0, 1301, 1302, 5, 107, 0, 0, 1302, 1303, 5, 101, 0, 0, 1303, 1304, 5, 121, 0, 0, 1304, 1306, 5, 115, 0, 0, 1305, 1277, 1, 0, 0, 0, 1305, 1293, 1, 0, 0, 0, 1306, 184, 1, 0, 0, 0, 1307, 1308, 5, 103, 0, 0, 1308, 1309, 5, 101, 0, 0, 1309, 1310, 5, 116, 0, 0, 1310, 1311, 5, 95, 0, 0, 1311, 1312, 5, 97, 0, 0, 1312, 1313, 5, 100, 0, 0, 1313, 1314, 5, 100, 0, 0, 1314, 1315, 5, 101, 0, 0, 1315, 1316, 5, 100, 0, 0, 1316, 1317, 5, 95, 0, 0, 1317, 1318, 5, 107, 0, 0, 1318, 1319, 5, 101, 0, 0, 1319, 1320, 5, 121, 0, 0, 1320, 1332, 5, 115, 0, 0, 1321, 1322, 5, 97, 0, 0, 1322, 1323, 5, 100, 0, 0, 1323, 1324, 5, 100, 0, 0, 1324, 1325, 5, 101, 0, 0, 1325, 1326, 5, 100, 0, 0, 1326, 1327, 5, 95, 0, 0, 1327, 1328, 5, 107, 0, 0, 1328, 1329, 5, 101, 0, 0, 1329, 1330, 5, 121, 0, 0, 1330, 1332, 5, 115, 0, 0, 1331, 1307, 1, 0, 0, 0, 1331, 1321, 1, 0, 0, 0, 1332, 186, 1, 0, 0, 0, 1333, 1334, 5, 103, 0, 0, 1334, 1335, 5, 101, 0, 0, 1335, 1336, 5, 116, 0, 0, 1336, 1337, 5, 95, 0, 0, 1337, 1338, 5, 114, 0, 0, 1338, 1339, 5, 101, 0, 0, 1339, 1340, 5, 109, 0, 0, 1340, 1341, 5, 111, 0, 0, 1341, 1342, 5, 118, 0, 0, 1342, 1343, 5, 101, 0, 0, 1343, 1344, 5, 100, 0, 0, 1344, 1345, 5, 95, 0, 0, 1345, 1346, 5, 107, 0, 0, 1346, 1347, 5, 101, 0, 0, 1347, 1348, 5, 121, 0, 0, 1348, 1362, 5, 115, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 101, 0, 0, 1351, 1352, 5, 109, 0, 0, 1352, 1353, 5, 111, 0, 0, 1353, 1354, 5, 118, 0, 0, 1354, 1355, 5, 101, 0, 0, 1355, 1356, 5, 100, 0, 0, 1356, 1357, 5, 95, 0, 0, 1357, 1358, 5, 107, 0, 0, 1358, 1359, 5, 101, 0, 0, 1359, 1360, 5, 121, 0, 0, 1360, 1362, 5, 115, 0, 0, 1361, 1333, 1, 0, 0, 0, 1361, 1349, 1, 0, 0, 0, 1362, 188, 1, 0, 0, 0, 1363, 1364, 5, 103, 0, 0, 1364, 1365, 5, 101, 0, 0, 1365, 1366, 5, 116, 0, 0, 1366, 1367, 5, 95, 0, 0, 1367, 1368, 5, 117, 0, 0, 1368, 1369, 5, 110, 0, 0, 1369, 1370, 5, 99, 0, 0, 1370, 1371, 5, 104, 0, 0, 1371, 1372, 5, 97, 0, 0, 1372, 1373, 5, 110, 0, 0, 1373, 1374, 5, 103, 0, 0, 1374, 1375, 5, 101, 0, 0, 1375, 1376, 5, 100, 0, 0, 1376, 1377, 5, 95, 0, 0, 1377, 1378, 5, 107, 0, 0, 1378, 1379, 5, 101, 0, 0, 1379, 1380, 5, 121, 0, 0, 1380, 1396, 5, 115, 0, 0, 1381, 1382, 5, 117, 0, 0, 1382, 1383, 5, 110, 0, 0, 1383, 1384, 5, 99, 0, 0, 1384, 1385, 5, 104, 0, 0, 1385, 1386, 5, 97, 0, 0, 1386, 1387, 5, 110, 0, 0, 1387, 1388, 5, 103, 0, 0, 1388, 1389, 5, 101, 0, 0, 1389, 1390, 5, 100, 0, 0, 1390, 1391, 5, 95, 0, 0, 1391, 1392, 5, 107, 0, 0, 1392, 1393, 5, 101, 0, 0, 1393, 1394, 5, 121, 0, 0, 1394, 1396, 5, 115, 0, 0, 1395, 1363, 1, 0, 0, 0, 1395, 1381, 1, 0, 0, 0, 1396, 190, 1, 0, 0, 0, 1397, 1398, 5, 114, 0, 0, 1398, 1399, 5, 101, 0, 0, 1399, 1400, 5, 112, 0, 0, 1400, 1401, 5, 101, 0, 0, 1401, 1402, 5, 97, 0, 0, 1402, 1403, 5, 116, 0, 0, 1403, 192, 1, 0, 0, 0, 1404, 1405, 5, 102, 0, 0, 1405, 1406, 5, 108, 0, 0, 1406, 1407, 5, 97, 0, 0, 1407, 1408, 5, 116, 0, 0, 1408, 1409, 5, 116, 0, 0, 1409, 1410, 5, 101, 0, 0, 1410, 1411, 5, 110, 0, 0, 1411, 194, 1, 0, 0, 0, 1412, 1413, 5, 97, 0, 0, 1413, 1414, 5, 112, 0, 0, 1414, 1415, 5, 112, 0, 0, 1415, 1416, 5, 101, 0, 0, 1416, 1417, 5, 110, 0, 0, 1417, 1418, 5, 100, 0, 0, 1418, 196, 1, 0, 0, 0, 1419, 1420, 5, 103, 0, 0, 1420, 1421, 5, 101, 0, 0, 1421, 1422, 5, 116, 0, 0, 1422, 1423, 5, 95, 0, 0, 1423, 1424, 5, 118, 0, 0, 1424, 1425, 5, 97, 0, 0, 1425, 1426, 5, 108, 0, 0, 1426, 1427, 5, 117, 0, 0, 1427, 1428, 5, 101, 0, 0, 1428, 198, 1, 0, 0, 0, 1429, 1430, 5, 102, 0, 0, 1430, 1431, 5, 108, 0, 0, 1431, 1432, 5, 111, 0, 0, 1432, 1433, 5, 119, 0, 0, 1433, 1434, 5, 95, 0, 0, 1434, 1435, 5, 97, 0, 0, 1435, 1436, 5, 112, 0, 0, 1436, 1437, 5, 112, 0, 0, 1437, 1438, 5, 108, 0, 0, 1438, 1439, 5, 121, 0, 0, 1439, 200, 1, 0, 0, 0, 1440, 1441, 5, 98, 0, 0, 1441, 1442, 5, 97, 0, 0, 1442, 1443, 5, 116, 0, 0, 1443, 1444, 5, 99, 0, 0, 1444, 1445, 5, 104, 0, 0, 1445, 1446, 5, 95, 0, 0, 1446, 1447, 5, 115, 0, 0, 1447, 1448, 5, 104, 0, 0, 1448, 1449, 5, 117, 0, 0, 1449, 1450, 5, 102, 0, 0, 1450, 1451, 5, 102, 0, 0, 1451, 1452, 5, 108, 0, 0, 1452, 1467, 5, 101, 0, 0, 1453, 1454, 5, 115, 0, 0, 1454, 1455, 5, 104, 0, 0, 1455, 1456, 5, 117, 0, 0, 1456, 1457, 5, 102, 0, 0, 1457, 1458, 5, 102, 0, 0, 1458, 1459, 5, 108, 0, 0, 1459, 1467, 5, 101, 0, 0, 1460, 1461, 5, 115, 0, 0, 1461, 1462, 5, 101, 0, 0, 1462, 1463, 5, 108, 0, 0, 1463, 1464, 5, 101, 0, 0, 1464, 1465, 5, 99, 0, 0, 1465, 1467, 5, 116, 0, 0, 1466, 1440, 1, 0, 0, 0, 1466, 1453, 1, 0, 0, 0, 1466, 1460, 1, 0, 0, 0, 1467, 202, 1, 0, 0, 0, 1468, 1469, 5, 109, 0, 0, 1469, 1470, 5, 111, 0, 0, 1470, 1471, 5, 116, 0, 0, 1471, 1472, 5, 105, 0, 0, 1472, 1473, 5, 111, 0, 0, 1473, 1474, 5, 110, 0, 0, 1474, 1475, 5, 95, 0, 0, 1475, 1476, 5, 109, 0, 0, 1476, 1477, 5, 97, 0, 0, 1477, 1478, 5, 115, 0, 0, 1478, 1479, 5, 107, 0, 0, 1479, 204, 1, 0, 0, 0, 1480, 1481, 5, 102, 0, 0, 1481, 1482, 5, 108, 0, 0, 1482, 1483, 5, 111, 0, 0, 1483, 1484, 5, 119, 0, 0, 1484, 1485, 5, 95, 0, 0, 1485, 1486, 5, 116, 0, 0, 1486, 1487, 5, 111, 0, 0, 1487, 1488, 5, 95, 0, 0, 1488, 1489, 5, 105, 0, 0, 1489, 1490, 5, 109, 0, 0, 1490, 1491, 5, 97, 0, 0, 1491, 1492, 5, 103, 0, 0, 1492, 1493, 5, 101, 0, 0, 1493, 206, 1, 0, 0, 0, 1494, 1495, 5, 102, 0, 0, 1495, 1496, 5, 108, 0, 0, 1496, 1497, 5, 111, 0, 0, 1497, 1498, 5, 119, 0, 0, 1498, 1499, 5, 95, 0, 0, 1499, 1500, 5, 109, 0, 0, 1500, 1501, 5, 97, 0, 0, 1501, 1517, 5, 103, 0, 0, 1502, 1503, 5, 102, 0, 0, 1503, 1504, 5, 108, 0, 0, 1504, 1505, 5, 111, 0, 0, 1505, 1506, 5, 119, 0, 0, 1506, 1507, 5, 95, 0, 0, 1507, 1508, 5, 109, 0, 0, 1508, 1509, 5, 97, 0, 0, 1509, 1510, 5, 103, 0, 0, 1510, 1511, 5, 110, 0, 0, 1511, 1512, 5, 105, 0, 0, 1512, 1513, 5, 116, 0, 0, 1513, 1514, 5, 117, 0, 0, 1514, 1515, 5, 100, 0, 0, 1515, 1517, 5, 101, 0, 0, 1516, 1494, 1, 0, 0, 0, 1516, 1502, 1, 0, 0, 0, 1517, 208, 1, 0, 0, 0, 1518, 1519, 5, 102, 0, 0, 1519, 1520, 5, 108, 0, 0, 1520, 1521, 5, 111, 0, 0, 1521, 1522, 5, 119, 0, 0, 1522, 1523, 5, 95, 0, 0, 1523, 1524, 5, 97, 0, 0, 1524, 1525, 5, 110, 0, 0, 1525, 1537, 5, 103, 0, 0, 1526, 1527, 5, 102, 0, 0, 1527, 1528, 5, 108, 0, 0, 1528, 1529, 5, 111, 0, 0, 1529, 1530, 5, 119, 0, 0, 1530, 1531, 5, 95, 0, 0, 1531, 1532, 5, 97, 0, 0, 1532, 1533, 5, 110, 0, 0, 1533, 1534, 5, 103, 0, 0, 1534, 1535, 5, 108, 0, 0, 1535, 1537, 5, 101, 0, 0, 1536, 1518, 1, 0, 0, 0, 1536, 1526, 1, 0, 0, 0, 1537, 210, 1, 0, 0, 0, 1538, 1539, 5, 119, 0, 0, 1539, 1540, 5, 104, 0, 0, 1540, 1541, 5, 101, 0, 0, 1541, 1542, 5, 114, 0, 0, 1542, 1543, 5, 101, 0, 0, 1543, 212, 1, 0, 0, 0, 1544, 1545, 5, 104, 0, 0, 1545, 1546, 5, 105, 0, 0, 1546, 1547, 5, 115, 0, 0, 1547, 1548, 5, 116, 0, 0, 1548, 1549, 5, 111, 0, 0, 1549, 1550, 5, 103, 0, 0, 1550, 1551, 5, 114, 0, 0, 1551, 1552, 5, 97, 0, 0, 1552, 1558, 5, 109, 0, 0, 1553, 1554, 5, 104, 0, 0, 1554, 1555, 5, 105, 0, 0, 1555, 1556, 5, 115, 0, 0, 1556, 1558, 5, 116, 0, 0, 1557, 1544, 1, 0, 0, 0, 1557, 1553, 1, 0, 0, 0, 1558, 214, 1, 0, 0, 0, 1559, 1560, 5, 111, 0, 0, 1560, 1561, 5, 118, 0, 0, 1561, 1562, 5, 101, 0, 0, 1562, 1563, 5, 114, 0, 0, 1563, 1564, 5, 108, 0, 0, 1564, 1565, 5, 97, 0, 0, 1565, 1566, 5, 121, 0, 0, 1566, 216, 1, 0, 0, 0, 1567, 1568, 5, 112, 0, 0, 1568, 1569, 5, 97, 0, 0, 1569, 1570, 5, 100, 0, 0, 1570, 218, 1, 0, 0, 0, 1571, 1572, 5, 99, 0, 0, 1572, 1573, 5, 114, 0, 0, 1573, 1574, 5, 111, 0, 0, 1574, 1575, 5, 115, 0, 0, 1575, 1576, 5, 115, 0, 0, 1576, 220, 1, 0, 0, 0, 1577, 1578, 5, 109, 0, 0, 1578, 1579, 5, 97, 0, 0, 1579, 1580, 5, 116, 0, 0, 1580, 1581, 5, 109, 0, 0, 1581, 1582, 5, 117, 0, 0, 1582, 1583, 5, 108, 0, 0, 1583, 222, 1, 0, 0, 0, 1584, 1585, 5, 114, 0, 0, 1585, 1586, 5, 105, 0, 0, 1586, 1587, 5, 102, 0, 0, 1587, 1588, 5, 101, 0, 0, 1588, 224, 1, 0, 0, 0, 1589, 1590, 5, 98, 0, 0, 1590, 1591, 5, 110, 0, 0, 1591, 1592, 5, 111, 0, 0, 1592, 1605, 5, 116, 0, 0, 1593, 1594, 5, 98, 0, 0, 1594, 1595, 5, 105, 0, 0, 1595, 1596, 5, 116, 0, 0, 1596, 1597, 5, 119, 0, 0, 1597, 1598, 5, 105, 0, 0, 1598, 1599, 5, 115, 0, 0, 1599, 1600, 5, 101, 0, 0, 1600, 1601, 5, 95, 0, 0, 1601, 1602, 5, 110, 0, 0, 1602, 1603, 5, 111, 0, 0, 1603, 1605, 5, 116, 0, 0, 1604, 1589, 1, 0, 0, 0, 1604, 1593, 1, 0, 0, 0, 1605, 226, 1, 0, 0, 0, 1606, 1607, 5, 98, 0, 0, 1607, 1608, 5, 105, 0, 0, 1608, 1609, 5, 116, 0, 0, 1609, 1610, 5, 99, 0, 0, 1610, 1611, 5, 111, 0, 0, 1611, 1612, 5, 117, 0, 0, 1612, 1613, 5, 110, 0, 0, 1613, 1629, 5, 116, 0, 0, 1614, 1615, 5, 112, 0, 0, 1615, 1616, 5, 111, 0, 0, 1616, 1617, 5, 112, 0, 0, 1617, 1618, 5, 99, 0, 0, 1618, 1619, 5, 111, 0, 0, 1619, 1620, 5, 117, 0, 0, 1620, 1621, 5, 110, 0, 0, 1621, 1629, 5, 116, 0, 0, 1622, 1623, 5, 112, 0, 0, 1623, 1624, 5, 111, 0, 0, 1624, 1625, 5, 112, 0, 0, 1625, 1626, 5, 99, 0, 0, 1626, 1627, 5, 110, 0, 0, 1627, 1629, 5, 116, 0, 0, 1628, 1606, 1, 0, 0, 0, 1628, 1614, 1, 0, 0, 0, 1628, 1622, 1, 0, 0, 0, 1629, 228, 1, 0, 0, 0, 1630, 1631, 5, 115, 0, 0, 1631, 1632, 5, 104, 0, 0, 1632, 1633, 5, 97, 0, 0, 1633, 1634, 5, 112, 0, 0, 1634, 1635, 5, 101, 0, 0, 1635, 230, 1, 0, 0, 0, 1636, 1637, 5, 98, 0, 0, 1637, 1638, 5, 97, 0, 0, 1638, 1639, 5, 110, 0, 0, 1639, 1652, 5, 100, 0, 0, 1640, 1641, 5, 98, 0, 0, 1641, 1642, 5, 105, 0, 0, 1642, 1643, 5, 116, 0, 0, 1643, 1644, 5, 119, 0, 0, 1644, 1645, 5, 105, 0, 0, 1645, 1646, 5, 115, 0, 0, 1646, 1647, 5, 101, 0, 0, 1647, 1648, 5, 95, 0, 0, 1648, 1649, 5, 97, 0, 0, 1649, 1650, 5, 110, 0, 0, 1650, 1652, 5, 100, 0, 0, 1651, 1636, 1, 0, 0, 0, 1651, 1640, 1, 0, 0, 0, 1652, 232, 1, 0, 0, 0, 1653, 1654, 5, 98, 0, 0, 1654, 1655, 5, 120, 0, 0, 1655, 1656, 5, 111, 0, 0, 1656, 1669, 5, 114, 0, 0, 1657, 1658, 5, 98, 0, 0, 1658, 1659, 5, 105, 0, 0, 1659, 1660, 5, 116, 0, 0, 1660, 1661, 5, 119, 0, 0, 1661, 1662, 5, 105, 0, 0, 1662, 1663, 5, 115, 0, 0, 1663, 1664, 5, 101, 0, 0, 1664, 1665, 5, 95, 0, 0, 1665, 1666, 5, 120, 0, 0, 1666, 1667, 5, 111, 0, 0, 1667, 1669, 5, 114, 0, 0, 1668, 1653, 1, 0, 0, 0, 1668, 1657, 1, 0, 0, 0, 1669, 234, 1, 0, 0, 0, 1670, 1671, 5, 98, 0, 0, 1671, 1672, 5, 111, 0, 0, 1672, 1684, 5, 114, 0, 0, 1673, 1674, 5, 98, 0, 0, 1674, 1675, 5, 105, 0, 0, 1675, 1676, 5, 116, 0, 0, 1676, 1677, 5, 119, 0, 0, 1677, 1678, 5, 105, 0, 0, 1678, 1679, 5, 115, 0, 0, 1679, 1680, 5, 101, 0, 0, 1680, 1681, 5, 95, 0, 0, 1681, 1682, 5, 111, 0, 0, 1682, 1684, 5, 114, 0, 0, 1683, 1670, 1, 0, 0, 0, 1683, 1673, 1, 0, 0, 0, 1684, 236, 1, 0, 0, 0, 1685, 1686, 5, 116, 0, 0, 1686, 1687, 5, 101, 0, 0, 1687, 1688, 5, 110, 0, 0, 1688, 1689, 5, 115, 0, 0, 1689, 1690, 5, 111, 0, 0, 1690, 1691, 5, 114, 0, 0, 1691, 238, 1, 0, 0, 0, 1692, 1693, 5, 97, 0, 0, 1693, 1694, 5, 100, 0, 0, 1694, 1695, 5, 100, 0, 0, 1695, 1696, 5, 95, 0, 0, 1696, 1697, 5, 107, 0, 0, 1697, 1698, 5, 101, 0, 0, 1698, 1699, 5, 121, 0, 0, 1699, 240, 1, 0, 0, 0, 1700, 1701, 5, 114, 0, 0, 1701, 1702, 5, 101, 0, 0, 1702, 1703, 5, 109, 0, 0, 1703, 1704, 5, 111, 0, 0, 1704, 1705, 5, 118, 0, 0, 1705, 1706, 5, 101, 0, 0, 1706, 1707, 5, 95, 0, 0, 1707, 1708, 5, 107, 0, 0, 1708, 1709, 5, 101, 0, 0, 1709, 1717, 5, 121, 0, 0, 1710, 1711, 5, 114, 0, 0, 1711, 1712, 5, 109, 0, 0, 1712, 1713, 5, 95, 0, 0, 1713, 1714, 5, 107, 0, 0, 1714, 1715, 5, 101, 0, 0, 1715, 1717, 5, 121, 0, 0, 1716, 1700, 1, 0, 0, 0, 1716, 1710, 1, 0, 0, 0, 1717, 242, 1, 0, 0, 0, 1718, 1719, 5, 115, 0, 0, 1719, 1720, 5, 116, 0, 0, 1720, 1721, 5, 97, 0, 0, 1721, 1722, 5, 99, 0, 0, 1722, 1723, 5, 107, 0, 0, 1723, 1724, 5, 95, 0, 0, 1724, 1725, 5, 112, 0, 0, 1725, 1726, 5, 117, 0, 0, 1726, 1727, 5, 115, 0, 0, 1727, 1728, 5, 104, 0, 0, 1728, 244, 1, 0, 0, 0, 1729, 1730, 5, 115, 0, 0, 1730, 1731, 5, 116, 0, 0, 1731, 1732, 5, 97, 0, 0, 1732, 1733, 5, 99, 0, 0, 1733, 1734, 5, 107, 0, 0, 1734, 1735, 5, 95, 0, 0, 1735, 1736, 5, 112, 0, 0, 1736, 1737, 5, 111, 0, 0, 1737, 1738, 5, 112, 0, 0, 1738, 246, 1, 0, 0, 0, 1739, 1740, 5, 115, 0, 0, 1740, 1741, 5, 116, 0, 0, 1741, 1742, 5, 97, 0, 0, 1742, 1743, 5, 99, 0, 0, 1743, 1744, 5, 107, 0, 0, 1744, 1745, 5, 95, 0, 0, 1745, 1746, 5, 99, 0, 0, 1746, 1747, 5, 108, 0, 0, 1747, 1748, 5, 101, 0, 0, 1748, 1749, 5, 97, 0, 0, 1749, 1750, 5, 114, 0, 0, 1750, 248, 1, 0, 0, 0, 1751, 1752, 5, 115, 0, 0, 1752, 1753, 5, 116, 0, 0, 1753, 1754, 5, 97, 0, 0, 1754, 1755, 5, 99, 0, 0, 1755, 1756, 5, 107, 0, 0, 1756, 1757, 5, 95, 0, 0, 1757, 1758, 5, 104, 0, 0, 1758, 1759, 5, 97, 0, 0, 1759, 1760, 5, 115, 0, 0, 1760, 250, 1, 0, 0, 0, 1761, 1762, 5, 115, 0, 0, 1762, 1763, 5, 116, 0, 0, 1763, 1764, 5, 97, 0, 0, 1764, 1765, 5, 99, 0, 0, 1765, 1766, 5, 107, 0, 0, 1766, 1767, 5, 95, 0, 0, 1767, 1768, 5, 103, 0, 0, 1768, 1769, 5, 101, 0, 0, 1769, 1770, 5, 116, 0, 0, 1770, 252, 1, 0, 0, 0, 1771, 1772, 5, 99, 0, 0, 1772, 1773, 5, 97, 0, 0, 1773, 1792, 5, 116, 0, 0, 1774, 1775, 5, 99, 0, 0, 1775, 1776, 5, 111, 0, 0, 1776, 1777, 5, 110, 0, 0, 1777, 1778, 5, 99, 0, 0, 1778, 1779, 5, 97, 0, 0, 1779, 1792, 5, 116, 0, 0, 1780, 1781, 5, 99, 0, 0, 1781, 1782, 5, 111, 0, 0, 1782, 1783, 5, 110, 0, 0, 1783, 1784, 5, 99, 0, 0, 1784, 1785, 5, 97, 0, 0, 1785, 1786, 5, 116, 0, 0, 1786, 1787, 5, 101, 0, 0, 1787, 1788, 5, 110, 0, 0, 1788, 1789, 5, 97, 0, 0, 1789, 1790, 5, 116, 0, 0, 1790, 1792, 5, 101, 0, 0, 1791, 1771, 1, 0, 0, 0, 1791, 1774, 1, 0, 0, 0, 1791, 1780, 1, 0, 0, 0, 1792, 254, 1, 0, 0, 0, 1793, 1794, 5, 115, 0, 0, 1794, 1795, 5, 116, 0, 0, 1795, 1796, 5, 97, 0, 0, 1796, 1797, 5, 99, 0, 0, 1797, 1798, 5, 107, 0, 0, 1798, 256, 1, 0, 0, 0, 1799, 1800, 5, 110, 0, 0, 1800, 1801, 5, 111, 0, 0, 1801, 1802, 5, 110, 0, 0, 1802, 1803, 5, 122, 0, 0, 1803, 1804, 5, 101, 0, 0, 1804, 1805, 5, 114, 0, 0, 1805, 1806, 5, 111, 0, 0, 1806, 258, 1, 0, 0, 0, 1807, 1808, 5, 105, 0, 0, 1808, 1809, 5, 110, 0, 0, 1809, 1810, 5, 116, 0, 0, 1810, 260, 1, 0, 0, 0, 1811, 1812, 5, 102, 0, 0, 1812, 1813, 5, 108, 0, 0, 1813, 1814, 5, 111, 0, 0, 1814, 1815, 5, 97, 0, 0, 1815, 1816, 5, 116, 0, 0, 1816, 262, 1, 0, 0, 0, 1817, 1818, 5, 117, 0, 0, 1818, 1819, 5, 112, 0, 0, 1819, 1820, 5, 112, 0, 0, 1820, 1821, 5, 101, 0, 0, 1821, 1822, 5, 114, 0, 0, 1822, 264, 1, 0, 0, 0, 1823, 1824, 5, 108, 0, 0, 1824, 1825, 5, 111, 0, 0, 1825, 1826, 5, 119, 0, 0, 1826, 1827, 5, 101, 0, 0, 1827, 1828, 5, 114, 0, 0, 1828, 266, 1, 0, 0, 0, 1829, 1830, 5, 116, 0, 0, 1830, 1831, 5, 114, 0, 0, 1831, 1832, 5, 105, 0, 0, 1832, 1833, 5, 109, 0, 0, 1833, 268, 1, 0, 0, 0, 1834, 1835, 5, 115, 0, 0, 1835, 1836, 5, 112, 0, 0, 1836, 1837, 5, 108, 0, 0, 1837, 1838, 5, 105, 0, 0, 1838, 1839, 5, 116, 0, 0, 1839, 270, 1, 0, 0, 0, 1840, 1841, 5, 106, 0, 0, 1841, 1842, 5, 111, 0, 0, 1842, 1843, 5, 105, 0, 0, 1843, 1844, 5, 110, 0, 0, 1844, 272, 1, 0, 0, 0, 1845, 1846, 5, 115, 0, 0, 1846, 1847, 5, 117, 0, 0, 1847, 1848, 5, 98, 0, 0, 1848, 1849, 5, 115, 0, 0, 1849, 1850, 5, 116, 0, 0, 1850, 1851, 5, 114, 0, 0, 1851, 1852, 5, 105, 0, 0, 1852, 1853, 5, 110, 0, 0, 1853, 1861, 5, 103, 0, 0, 1854, 1855, 5, 115, 0, 0, 1855, 1856, 5, 117, 0, 0, 1856, 1857, 5, 98, 0, 0, 1857, 1858, 5, 115, 0, 0, 1858, 1859, 5, 116, 0, 0, 1859, 1861, 5, 114, 0, 0, 1860, 1845, 1, 0, 0, 0, 1860, 1854, 1, 0, 0, 0, 1861, 274, 1, 0, 0, 0, 1862, 1863, 5, 102, 0, 0, 1863, 1864, 5, 105, 0, 0, 1864, 1865, 5, 110, 0, 0, 1865, 1866, 5, 100, 0, 0, 1866, 276, 1, 0, 0, 0, 1867, 1868, 5, 114, 0, 0, 1868, 1869, 5, 101, 0, 0, 1869, 1870, 5, 112, 0, 0, 1870, 1871, 5, 108, 0, 0, 1871, 1872, 5, 97, 0, 0, 1872, 1873, 5, 99, 0, 0, 1873, 1874, 5, 101, 0, 0, 1874, 278, 1, 0, 0, 0, 1875, 1876, 5, 100, 0, 0, 1876, 1877, 5, 105, 0, 0, 1877, 1878, 5, 108, 0, 0, 1878, 1879, 5, 97, 0, 0, 1879, 1880, 5, 116, 0, 0, 1880, 1881, 5, 101, 0, 0, 1881, 280, 1, 0, 0, 0, 1882, 1883, 5, 101, 0, 0, 1883, 1884, 5, 114, 0, 0, 1884, 1885, 5, 111, 0, 0, 1885, 1886, 5, 100, 0, 0, 1886, 1887, 5, 101, 0, 0, 1887, 282, 1, 0, 0, 0, 1888, 1889, 5, 109, 0, 0, 1889, 1890, 5, 111, 0, 0, 1890, 1891, 5, 114, 0, 0, 1891, 1892, 5, 112, 0, 0, 1892, 1893, 5, 104, 0, 0, 1893, 1894, 5, 95, 0, 0, 1894, 1895, 5, 111, 0, 0, 1895, 1896, 5, 112, 0, 0, 1896, 1897, 5, 101, 0, 0, 1897, 1898, 5, 110, 0, 0, 1898, 284, 1, 0, 0, 0, 1899, 1900, 5, 109, 0, 0, 1900, 1901, 5, 111, 0, 0, 1901, 1902, 5, 114, 0, 0, 1902, 1903, 5, 112, 0, 0, 1903, 1904, 5, 104, 0, 0, 1904, 1905, 5, 95, 0, 0, 1905, 1906, 5, 99, 0, 0, 1906, 1907, 5, 108, 0, 0, 1907, 1908, 5, 111, 0, 0, 1908, 1909, 5, 115, 0, 0, 1909, 1910, 5, 101, 0, 0, 1910, 286, 1, 0, 0, 0, 1911, 1912, 5, 114, 0, 0, 1912, 1913, 5, 103, 0, 0, 1913, 1914, 5, 98, 0, 0, 1914, 1915, 5, 95, 0, 0, 1915, 1916, 5, 116, 0, 0, 1916, 1917, 5, 111, 0, 0, 1917, 1918, 5, 95, 0, 0, 1918, 1919, 5, 111, 0, 0, 1919, 1920, 5, 107, 0, 0, 1920, 1921, 5, 108, 0, 0, 1921, 1922, 5, 97, 0, 0, 1922, 1923, 5, 98, 0, 0, 1923, 288, 1, 0, 0, 0, 1924, 1925, 5, 114, 0, 0, 1925, 1926, 5, 103, 0, 0, 1926, 1927, 5, 98, 0, 0, 1927, 1928, 5, 95, 0, 0, 1928, 1929, 5, 116, 0, 0, 1929, 1930, 5, 111, 0, 0, 1930, 1931, 5, 95, 0, 0, 1931, 1932, 5, 99, 0, 0, 1932, 1933, 5, 105, 0, 0, 1933, 1934, 5, 101, 0, 0, 1934, 1935, 5, 108, 0, 0, 1935, 1936, 5, 97, 0, 0, 1936, 1937, 5, 98, 0, 0, 1937, 290, 1, 0, 0, 0, 1938, 1939, 5, 111, 0, 0, 1939, 1940, 5, 107, 0, 0, 1940, 1941, 5, 108, 0, 0, 1941, 1942, 5, 97, 0, 0, 1942, 1943, 5, 98, 0, 0, 1943, 1944, 5, 95, 0, 0, 1944, 1945, 5, 116, 0, 0, 1945, 1946, 5, 111, 0, 0, 1946, 1947, 5, 95, 0, 0, 1947, 1948, 5, 114, 0, 0, 1948, 1949, 5, 103, 0, 0, 1949, 1950, 5, 98, 0, 0, 1950, 292, 1, 0, 0, 0, 1951, 1952, 5, 99, 0, 0, 1952, 1953, 5, 105, 0, 0, 1953, 1954, 5, 101, 0, 0, 1954, 1955, 5, 108, 0, 0, 1955, 1956, 5, 97, 0, 0, 1956, 1957, 5, 98, 0, 0, 1957, 1958, 5, 95, 0, 0, 1958, 1959, 5, 116, 0, 0, 1959, 1960, 5, 111, 0, 0, 1960, 1961, 5, 95, 0, 0, 1961, 1962, 5, 114, 0, 0, 1962, 1963, 5, 103, 0, 0, 1963, 1964, 5, 98, 0, 0, 1964, 294, 1, 0, 0, 0, 1965, 1966, 5, 114, 0, 0, 1966, 1967, 5, 103, 0, 0, 1967, 1968, 5, 98, 0, 0, 1968, 1969, 5, 95, 0, 0, 1969, 1970, 5, 116, 0, 0, 1970, 1971, 5, 111, 0, 0, 1971, 1972, 5, 95, 0, 0, 1972, 1973, 5, 104, 0, 0, 1973, 1974, 5, 115, 0, 0, 1974, 1975, 5, 118, 0, 0, 1975, 296, 1, 0, 0, 0, 1976, 1977, 5, 104, 0, 0, 1977, 1978, 5, 115, 0, 0, 1978, 1979, 5, 118, 0, 0, 1979, 1980, 5, 95, 0, 0, 1980, 1981, 5, 116, 0, 0, 1981, 1982, 5, 111, 0, 0, 1982, 1983, 5, 95, 0, 0, 1983, 1984, 5, 114, 0, 0, 1984, 1985, 5, 103, 0, 0, 1985, 1986, 5, 98, 0, 0, 1986, 298, 1, 0, 0, 0, 1987, 1988, 5, 105, 0, 0, 1988, 1989, 5, 110, 0, 0, 1989, 1990, 5, 116, 0, 0, 1990, 1991, 5, 95, 0, 0, 1991, 1992, 5, 116, 0, 0, 1992, 1993, 5, 111, 0, 0, 1993, 1994, 5, 95, 0, 0, 1994, 1995, 5, 114, 0, 0, 1995, 1996, 5, 103, 0, 0, 1996, 1997, 5, 98, 0, 0, 1997, 300, 1, 0, 0, 0, 1998, 1999, 5, 114, 0, 0, 1999, 2000, 5, 103, 0, 0, 2000, 2001, 5, 98, 0, 0, 2001, 2002, 5, 95, 0, 0, 2002, 2003, 5, 116, 0, 0, 2003, 2004, 5, 111, 0, 0, 2004, 2005, 5, 95, 0, 0, 2005, 2006, 5, 105, 0, 0, 2006, 2007, 5, 110, 0, 0, 2007, 2008, 5, 116, 0, 0, 2008, 302, 1, 0, 0, 0, 2009, 2010, 5, 105, 0, 0, 2010, 2011, 5, 110, 0, 0, 2011, 2012, 5, 116, 0, 0, 2012, 2013, 5, 101, 0, 0, 2013, 2014, 5, 114, 0, 0, 2014, 2015, 5, 112, 0, 0, 2015, 2016, 5, 111, 0, 0, 2016, 2017, 5, 108, 0, 0, 2017, 2018, 5, 97, 0, 0, 2018, 2019, 5, 116, 0, 0, 2019, 2020, 5, 101, 0, 0, 2020, 2021, 5, 95, 0, 0, 2021, 2022, 5, 108, 0, 0, 2022, 2023, 5, 105, 0, 0, 2023, 2024, 5, 110, 0, 0, 2024, 2025, 5, 101, 0, 0, 2025, 2026, 5, 97, 0, 0, 2026, 2027, 5, 114, 0, 0, 2027, 304, 1, 0, 0, 0, 2028, 2029, 5, 105, 0, 0, 2029, 2030, 5, 110, 0, 0, 2030, 2031, 5, 116, 0, 0, 2031, 2032, 5, 101, 0, 0, 2032, 2033, 5, 114, 0, 0, 2033, 2034, 5, 112, 0, 0, 2034, 2035, 5, 111, 0, 0, 2035, 2036, 5, 108, 0, 0, 2036, 2037, 5, 97, 0, 0, 2037, 2038, 5, 116, 0, 0, 2038, 2039, 5, 101, 0, 0, 2039, 2040, 5, 95, 0, 0, 2040, 2041, 5, 97, 0, 0, 2041, 2042, 5, 114, 0, 0, 2042, 2043, 5, 101, 0, 0, 2043, 2044, 5, 97, 0, 0, 2044, 306, 1, 0, 0, 0, 2045, 2046, 5, 105, 0, 0, 2046, 2047, 5, 110, 0, 0, 2047, 2048, 5, 116, 0, 0, 2048, 2049, 5, 101, 0, 0, 2049, 2050, 5, 114, 0, 0, 2050, 2051, 5, 112, 0, 0, 2051, 2052, 5, 111, 0, 0, 2052, 2053, 5, 108, 0, 0, 2053, 2054, 5, 97, 0, 0, 2054, 2055, 5, 116, 0, 0, 2055, 2056, 5, 101, 0, 0, 2056, 2057, 5, 95, 0, 0, 2057, 2058, 5, 110, 0, 0, 2058, 2059, 5, 101, 0, 0, 2059, 2060, 5, 97, 0, 0, 2060, 2061, 5, 114, 0, 0, 2061, 2062, 5, 101, 0, 0, 2062, 2063, 5, 115, 0, 0, 2063, 2090, 5, 116, 0, 0, 2064, 2065, 5, 105, 0, 0, 2065, 2066, 5, 110, 0, 0, 2066, 2067, 5, 116, 0, 0, 2067, 2068, 5, 101, 0, 0, 2068, 2069, 5, 114, 0, 0, 2069, 2070, 5, 112, 0, 0, 2070, 2071, 5, 111, 0, 0, 2071, 2072, 5, 108, 0, 0, 2072, 2073, 5, 97, 0, 0, 2073, 2074, 5, 116, 0, 0, 2074, 2075, 5, 101, 0, 0, 2075, 2076, 5, 95, 0, 0, 2076, 2077, 5, 110, 0, 0, 2077, 2078, 5, 101, 0, 0, 2078, 2079, 5, 97, 0, 0, 2079, 2080, 5, 114, 0, 0, 2080, 2081, 5, 101, 0, 0, 2081, 2082, 5, 115, 0, 0, 2082, 2083, 5, 116, 0, 0, 2083, 2084, 5, 95, 0, 0, 2084, 2085, 5, 101, 0, 0, 2085, 2086, 5, 120, 0, 0, 2086, 2087, 5, 97, 0, 0, 2087, 2088, 5, 99, 0, 0, 2088, 2090, 5, 116, 0, 0, 2089, 2045, 1, 0, 0, 0, 2089, 2064, 1, 0, 0, 0, 2090, 308, 1, 0, 0, 0, 2091, 2092, 5, 116, 0, 0, 2092, 2093, 5, 101, 0, 0, 2093, 2094, 5, 120, 0, 0, 2094, 2095, 5, 116, 0, 0, 2095, 2096, 5, 95, 0, 0, 2096, 2097, 5, 105, 0, 0, 2097, 2098, 5, 109, 0, 0, 2098, 2099, 5, 97, 0, 0, 2099, 2100, 5, 103, 0, 0, 2100, 2101, 5, 101, 0, 0, 2101, 310, 1, 0, 0, 0, 2102, 2103, 5, 97, 0, 0, 2103, 2104, 5, 115, 0, 0, 2104, 2105, 5, 95, 0, 0, 2105, 2106, 5, 110, 0, 0, 2106, 2107, 5, 101, 0, 0, 2107, 2108, 5, 115, 0, 0, 2108, 2109, 5, 116, 0, 0, 2109, 2110, 5, 101, 0, 0, 2110, 2111, 5, 100, 0, 0, 2111, 2112, 5, 95, 0, 0, 2112, 2113, 5, 116, 0, 0, 2113, 2114, 5, 101, 0, 0, 2114, 2115, 5, 110, 0, 0, 2115, 2116, 5, 115, 0, 0, 2116, 2117, 5, 111, 0, 0, 2117, 2128, 5, 114, 0, 0, 2118, 2119, 5, 97, 0, 0, 2119, 2120, 5, 115, 0, 0, 2120, 2121, 5, 95, 0, 0, 2121, 2122, 5, 110, 0, 0, 2122, 2123, 5, 101, 0, 0, 2123, 2124, 5, 115, 0, 0, 2124, 2125, 5, 116, 0, 0, 2125, 2126, 5, 101, 0, 0, 2126, 2128, 5, 100, 0, 0, 2127, 2102, 1, 0, 0, 0, 2127, 2118, 1, 0, 0, 0, 2128, 312, 1, 0, 0, 0, 2129, 2130, 5, 115, 0, 0, 2130, 2131, 5, 118, 0, 0, 2131, 2161, 5, 100, 0, 0, 2132, 2133, 5, 115, 0, 0, 2133, 2134, 5, 105, 0, 0, 2134, 2135, 5, 110, 0, 0, 2135, 2136, 5, 103, 0, 0, 2136, 2137, 5, 117, 0, 0, 2137, 2138, 5, 108, 0, 0, 2138, 2139, 5, 97, 0, 0, 2139, 2140, 5, 114, 0, 0, 2140, 2141, 5, 95, 0, 0, 2141, 2142, 5, 118, 0, 0, 2142, 2143, 5, 97, 0, 0, 2143, 2144, 5, 108, 0, 0, 2144, 2145, 5, 117, 0, 0, 2145, 2146, 5, 101, 0, 0, 2146, 2147, 5, 95, 0, 0, 2147, 2148, 5, 100, 0, 0, 2148, 2149, 5, 101, 0, 0, 2149, 2150, 5, 99, 0, 0, 2150, 2151, 5, 111, 0, 0, 2151, 2152, 5, 109, 0, 0, 2152, 2153, 5, 112, 0, 0, 2153, 2154, 5, 111, 0, 0, 2154, 2155, 5, 115, 0, 0, 2155, 2156, 5, 105, 0, 0, 2156, 2157, 5, 116, 0, 0, 2157, 2158, 5, 105, 0, 0, 2158, 2159, 5, 111, 0, 0, 2159, 2161, 5, 110, 0, 0, 2160, 2129, 1, 0, 0, 0, 2160, 2132, 1, 0, 0, 0, 2161, 314, 1, 0, 0, 0, 2162, 2163, 5, 100, 0, 0, 2163, 2164, 5, 105, 0, 0, 2164, 2165, 5, 97, 0, 0, 2165, 2166, 5, 103, 0, 0, 2166, 2167, 5, 111, 0, 0, 2167, 2168, 5, 110, 0, 0, 2168, 2169, 5, 97, 0, 0, 2169, 2170, 5, 108, 0, 0, 2170, 2171, 5, 95, 0, 0, 2171, 2172, 5, 109, 0, 0, 2172, 2173, 5, 97, 0, 0, 2173, 2174, 5, 116, 0, 0, 2174, 2175, 5, 114, 0, 0, 2175, 2176, 5, 105, 0, 0, 2176, 2182, 5, 120, 0, 0, 2177, 2178, 5, 100, 0, 0, 2178, 2179, 5, 105, 0, 0, 2179, 2180, 5, 97, 0, 0, 2180, 2182, 5, 103, 0, 0, 2181, 2162, 1, 0, 0, 0, 2181, 2177, 1, 0, 0, 0, 2182, 316, 1, 0, 0, 0, 2183, 2184, 5, 105, 0, 0, 2184, 2185, 5, 102, 0, 0, 2185, 318, 1, 0, 0, 0, 2186, 2187, 5, 101, 0, 0, 2187, 2188, 5, 108, 0, 0, 2188, 2189, 5, 115, 0, 0, 2189, 2190, 5, 101, 0, 0, 2190, 320, 1, 0, 0, 0, 2191, 2192, 5, 119, 0, 0, 2192, 2193, 5, 104, 0, 0, 2193, 2194, 5, 105, 0, 0, 2194, 2195, 5, 108, 0, 0, 2195, 2196, 5, 101, 0, 0, 2196, 322, 1, 0, 0, 0, 2197, 2198, 5, 102, 0, 0, 2198, 2199, 5, 111, 0, 0, 2199, 2200, 5, 114, 0, 0, 2200, 324, 1, 0, 0, 0, 2201, 2202, 5, 105, 0, 0, 2202, 2203, 5, 110, 0, 0, 2203, 326, 1, 0, 0, 0, 2204, 2205, 5, 98, 0, 0, 2205, 2206, 5, 114, 0, 0, 2206, 2207, 5, 101, 0, 0, 2207, 2208, 5, 97, 0, 0, 2208, 2209, 5, 107, 0, 0, 2209, 328, 1, 0, 0, 0, 2210, 2211, 5, 99, 0, 0, 2211, 2212, 5, 111, 0, 0, 2212, 2213, 5, 110, 0, 0, 2213, 2214, 5, 116, 0, 0, 2214, 2215, 5, 105, 0, 0, 2215, 2216, 5, 110, 0, 0, 2216, 2217, 5, 117, 0, 0, 2217, 2218, 5, 101, 0, 0, 2218, 330, 1, 0, 0, 0, 2219, 2220, 5, 114, 0, 0, 2220, 2221, 5, 101, 0, 0, 2221, 2222, 5, 116, 0, 0, 2222, 2223, 5, 117, 0, 0, 2223, 2224, 5, 114, 0, 0, 2224, 2225, 5, 110, 0, 0, 2225, 332, 1, 0, 0, 0, 2226, 2227, 5, 116, 0, 0, 2227, 2228, 5, 105, 0, 0, 2228, 2229, 5, 109, 0, 0, 2229, 2230, 5, 101, 0, 0, 2230, 2231, 5, 115, 0, 0, 2231, 2232, 5, 116, 0, 0, 2232, 2233, 5, 97, 0, 0, 2233, 2234, 5, 109, 0, 0, 2234, 2239, 5, 112, 0, 0, 2235, 2236, 5, 110, 0, 0, 2236, 2237, 5, 111, 0, 0, 2237, 2239, 5, 119, 0, 0, 2238, 2226, 1, 0, 0, 0, 2238, 2235, 1, 0, 0, 0, 2239, 334, 1, 0, 0, 0, 2240, 2241, 5, 115, 0, 0, 2241, 2242, 5, 111, 0, 0, 2242, 2243, 5, 114, 0, 0, 2243, 2244, 5, 116, 0, 0, 2244, 336, 1, 0, 0, 0, 2245, 2246, 5, 97, 0, 0, 2246, 2247, 5, 114, 0, 0, 2247, 2248, 5, 103, 0, 0, 2248, 2249, 5, 115, 0, 0, 2249, 2250, 5, 111, 0, 0, 2250, 2251, 5, 114, 0, 0, 2251, 2252, 5, 116, 0, 0, 2252, 338, 1, 0, 0, 0, 2253, 2254, 5, 97, 0, 0, 2254, 2255, 5, 114, 0, 0, 2255, 2256, 5, 103, 0, 0, 2256, 2257, 5, 109, 0, 0, 2257, 2258, 5, 105, 0, 0, 2258, 2259, 5, 110, 0, 0, 2259, 340, 1, 0, 0, 0, 2260, 2261, 5, 97, 0, 0, 2261, 2262, 5, 114, 0, 0, 2262, 2263, 5, 103, 0, 0, 2263, 2264, 5, 109, 0, 0, 2264, 2265, 5, 97, 0, 0, 2265, 2266, 5, 120, 0, 0, 2266, 342, 1, 0, 0, 0, 2267, 2268, 5, 115, 0, 0, 2268, 2269, 5, 111, 0, 0, 2269, 2270, 5, 102, 0, 0, 2270, 2271, 5, 116, 0, 0, 2271, 2272, 5, 109, 0, 0, 2272, 2273, 5, 97, 0, 0, 2273, 2274, 5, 120, 0, 0, 2274, 344, 1, 0, 0, 0, 2275, 2276, 5, 115, 0, 0, 2276, 2277, 5, 111, 0, 0, 2277, 2278, 5, 102, 0, 0, 2278, 2279, 5, 116, 0, 0, 2279, 2280, 5, 109, 0, 0, 2280, 2281, 5, 105, 0, 0, 2281, 2282, 5, 110, 0, 0, 2282, 346, 1, 0, 0, 0, 2283, 2284, 5, 117, 0, 0, 2284, 2285, 5, 110, 0, 0, 2285, 2286, 5, 105, 0, 0, 2286, 2287, 5, 113, 0, 0, 2287, 2288, 5, 117, 0, 0, 2288, 2289, 5, 101, 0, 0, 2289, 348, 1, 0, 0, 0, 2290, 2291, 5, 102, 0, 0, 2291, 2292, 5, 108, 0, 0, 2292, 2293, 5, 105, 0, 0, 2293, 2294, 5, 112, 0, 0, 2294, 350, 1, 0, 0, 0, 2295, 2296, 5, 115, 0, 0, 2296, 2297, 5, 116, 0, 0, 2297, 2298, 5, 97, 0, 0, 2298, 2299, 5, 114, 0, 0, 2299, 2300, 5, 116, 0, 0, 2300, 2301, 5, 115, 0, 0, 2301, 2302, 5, 119, 0, 0, 2302, 2303, 5, 105, 0, 0, 2303, 2304, 5, 116, 0, 0, 2304, 2305, 5, 104, 0, 0, 2305, 352, 1, 0, 0, 0, 2306, 2307, 5, 101, 0, 0, 2307, 2308, 5, 110, 0, 0, 2308, 2309, 5, 100, 0, 0, 2309, 2310, 5, 115, 0, 0, 2310, 2311, 5, 119, 0, 0, 2311, 2312, 5, 105, 0, 0, 2312, 2313, 5, 116, 0, 0, 2313, 2314, 5, 104, 0, 0, 2314, 354, 1, 0, 0, 0, 2315, 2316, 5, 115, 0, 0, 2316, 2317, 5, 113, 0, 0, 2317, 2318, 5, 117, 0, 0, 2318, 2319, 5, 101, 0, 0, 2319, 2320, 5, 101, 0, 0, 2320, 2321, 5, 122, 0, 0, 2321, 2322, 5, 101, 0, 0, 2322, 356, 1, 0, 0, 0, 2323, 2324, 5, 117, 0, 0, 2324, 2325, 5, 110, 0, 0, 2325, 2326, 5, 115, 0, 0, 2326, 2327, 5, 113, 0, 0, 2327, 2328, 5, 117, 0, 0, 2328, 2329, 5, 101, 0, 0, 2329, 2330, 5, 101, 0, 0, 2330, 2331, 5, 122, 0, 0, 2331, 2332, 5, 101, 0, 0, 2332, 358, 1, 0, 0, 0, 2333, 2334, 5, 114, 0, 0, 2334, 2335, 5, 111, 0, 0, 2335, 2336, 5, 108, 0, 0, 2336, 2337, 5, 108, 0, 0, 2337, 360, 1, 0, 0, 0, 2338, 2339, 5, 99, 0, 0, 2339, 2340, 5, 111, 0, 0, 2340, 2341, 5, 118, 0, 0, 2341, 362, 1, 0, 0, 0, 2342, 2343, 5, 99, 0, 0, 2343, 2344, 5, 111, 0, 0, 2344, 2345, 5, 114, 0, 0, 2345, 2358, 5, 114, 0, 0, 2346, 2347, 5, 99, 0, 0, 2347, 2348, 5, 111, 0, 0, 2348, 2349, 5, 114, 0, 0, 2349, 2350, 5, 114, 0, 0, 2350, 2351, 5, 101, 0, 0, 2351, 2352, 5, 108, 0, 0, 2352, 2353, 5, 97, 0, 0, 2353, 2354, 5, 116, 0, 0, 2354, 2355, 5, 105, 0, 0, 2355, 2356, 5, 111, 0, 0, 2356, 2358, 5, 110, 0, 0, 2357, 2342, 1, 0, 0, 0, 2357, 2346, 1, 0, 0, 0, 2358, 364, 1, 0, 0, 0, 2359, 2360, 5, 101, 0, 0, 2360, 2361, 5, 110, 0, 0, 2361, 2362, 5, 116, 0, 0, 2362, 2363, 5, 114, 0, 0, 2363, 2364, 5, 111, 0, 0, 2364, 2365, 5, 112, 0, 0, 2365, 2366, 5, 121, 0, 0, 2366, 366, 1, 0, 0, 0, 2367, 2368, 5, 99, 0, 0, 2368, 2369, 5, 114, 0, 0, 2369, 2370, 5, 111, 0, 0, 2370, 2371, 5, 112, 0, 0, 2371, 368, 1, 0, 0, 0, 2372, 2373, 5, 110, 0, 0, 2373, 2374, 5, 111, 0, 0, 2374, 2375, 5, 110, 0, 0, 2375, 2389, 5, 101, 0, 0, 2376, 2377, 5, 78, 0, 0, 2377, 2378, 5, 111, 0, 0, 2378, 2379, 5, 110, 0, 0, 2379, 2389, 5, 101, 0, 0, 2380, 2381, 5, 110, 0, 0, 2381, 2382, 5, 117, 0, 0, 2382, 2383, 5, 108, 0, 0, 2383, 2389, 5, 108, 0, 0, 2384, 2385, 5, 78, 0, 0, 2385, 2386, 5, 85, 0, 0, 2386, 2387, 5, 76, 0, 0, 2387, 2389, 5, 76, 0, 0, 2388, 2372, 1, 0, 0, 0, 2388, 2376, 1, 0, 0, 0, 2388, 2380, 1, 0, 0, 0, 2388, 2384, 1, 0, 0, 0, 2389, 370, 1, 0, 0, 0, 2390, 2391, 5, 99, 0, 0, 2391, 2392, 5, 111, 0, 0, 2392, 2393, 5, 111, 0, 0, 2393, 2394, 5, 114, 0, 0, 2394, 2395, 5, 100, 0, 0, 2395, 2408, 5, 115, 0, 0, 2396, 2397, 5, 99, 0, 0, 2397, 2398, 5, 111, 0, 0, 2398, 2399, 5, 111, 0, 0, 2399, 2400, 5, 114, 0, 0, 2400, 2401, 5, 100, 0, 0, 2401, 2402, 5, 105, 0, 0, 2402, 2403, 5, 110, 0, 0, 2403, 2404, 5, 97, 0, 0, 2404, 2405, 5, 116, 0, 0, 2405, 2406, 5, 101, 0, 0, 2406, 2408, 5, 115, 0, 0, 2407, 2390, 1, 0, 0, 0, 2407, 2396, 1, 0, 0, 0, 2408, 372, 1, 0, 0, 0, 2409, 2410, 5, 103, 0, 0, 2410, 2411, 5, 97, 0, 0, 2411, 2412, 5, 116, 0, 0, 2412, 2413, 5, 104, 0, 0, 2413, 2414, 5, 101, 0, 0, 2414, 2415, 5, 114, 0, 0, 2415, 374, 1, 0, 0, 0, 2416, 2417, 5, 115, 0, 0, 2417, 2418, 5, 99, 0, 0, 2418, 2419, 5, 97, 0, 0, 2419, 2420, 5, 116, 0, 0, 2420, 2421, 5, 116, 0, 0, 2421, 2422, 5, 101, 0, 0, 2422, 2423, 5, 114, 0, 0, 2423, 376, 1, 0, 0, 0, 2424, 2425, 5, 115, 0, 0, 2425, 2426, 5, 99, 0, 0, 2426, 2427, 5, 97, 0, 0, 2427, 2428, 5, 116, 0, 0, 2428, 2429, 5, 116, 0, 0, 2429, 2430, 5, 101, 0, 0, 2430, 2431, 5, 114, 0, 0, 2431, 2432, 5, 95, 0, 0, 2432, 2433, 5, 97, 0, 0, 2433, 2434, 5, 100, 0, 0, 2434, 2435, 5, 100, 0, 0, 2435, 378, 1, 0, 0, 0, 2436, 2437, 5, 110, 0, 0, 2437, 2438, 5, 111, 0, 0, 2438, 2439, 5, 105, 0, 0, 2439, 2440, 5, 115, 0, 0, 2440, 2460, 5, 101, 0, 0, 2441, 2442, 5, 114, 0, 0, 2442, 2443, 5, 97, 0, 0, 2443, 2444, 5, 110, 0, 0, 2444, 2445, 5, 100, 0, 0, 2445, 2460, 5, 110, 0, 0, 2446, 2447, 5, 114, 0, 0, 2447, 2448, 5, 97, 0, 0, 2448, 2449, 5, 110, 0, 0, 2449, 2450, 5, 100, 0, 0, 2450, 2451, 5, 111, 0, 0, 2451, 2452, 5, 109, 0, 0, 2452, 2453, 5, 95, 0, 0, 2453, 2454, 5, 110, 0, 0, 2454, 2455, 5, 111, 0, 0, 2455, 2456, 5, 114, 0, 0, 2456, 2457, 5, 109, 0, 0, 2457, 2458, 5, 97, 0, 0, 2458, 2460, 5, 108, 0, 0, 2459, 2436, 1, 0, 0, 0, 2459, 2441, 1, 0, 0, 0, 2459, 2446, 1, 0, 0, 0, 2460, 380, 1, 0, 0, 0, 2461, 2462, 5, 114, 0, 0, 2462, 2463, 5, 97, 0, 0, 2463, 2464, 5, 110, 0, 0, 2464, 2485, 5, 100, 0, 0, 2465, 2466, 5, 114, 0, 0, 2466, 2467, 5, 97, 0, 0, 2467, 2468, 5, 110, 0, 0, 2468, 2469, 5, 100, 0, 0, 2469, 2485, 5, 117, 0, 0, 2470, 2471, 5, 114, 0, 0, 2471, 2472, 5, 97, 0, 0, 2472, 2473, 5, 110, 0, 0, 2473, 2474, 5, 100, 0, 0, 2474, 2475, 5, 111, 0, 0, 2475, 2476, 5, 109, 0, 0, 2476, 2477, 5, 95, 0, 0, 2477, 2478, 5, 117, 0, 0, 2478, 2479, 5, 110, 0, 0, 2479, 2480, 5, 105, 0, 0, 2480, 2481, 5, 102, 0, 0, 2481, 2482, 5, 111, 0, 0, 2482, 2483, 5, 114, 0, 0, 2483, 2485, 5, 109, 0, 0, 2484, 2461, 1, 0, 0, 0, 2484, 2465, 1, 0, 0, 0, 2484, 2470, 1, 0, 0, 0, 2485, 382, 1, 0, 0, 0, 2486, 2487, 5, 114, 0, 0, 2487, 2488, 5, 97, 0, 0, 2488, 2489, 5, 110, 0, 0, 2489, 2490, 5, 100, 0, 0, 2490, 2505, 5, 99, 0, 0, 2491, 2492, 5, 114, 0, 0, 2492, 2493, 5, 97, 0, 0, 2493, 2494, 5, 110, 0, 0, 2494, 2495, 5, 100, 0, 0, 2495, 2496, 5, 111, 0, 0, 2496, 2497, 5, 109, 0, 0, 2497, 2498, 5, 95, 0, 0, 2498, 2499, 5, 99, 0, 0, 2499, 2500, 5, 97, 0, 0, 2500, 2501, 5, 117, 0, 0, 2501, 2502, 5, 99, 0, 0, 2502, 2503, 5, 104, 0, 0, 2503, 2505, 5, 121, 0, 0, 2504, 2486, 1, 0, 0, 0, 2504, 2491, 1, 0, 0, 0, 2505, 384, 1, 0, 0, 0, 2506, 2507, 5, 114, 0, 0, 2507, 2508, 5, 97, 0, 0, 2508, 2509, 5, 110, 0, 0, 2509, 2510, 5, 100, 0, 0, 2510, 2530, 5, 101, 0, 0, 2511, 2512, 5, 114, 0, 0, 2512, 2513, 5, 97, 0, 0, 2513, 2514, 5, 110, 0, 0, 2514, 2515, 5, 100, 0, 0, 2515, 2516, 5, 111, 0, 0, 2516, 2517, 5, 109, 0, 0, 2517, 2518, 5, 95, 0, 0, 2518, 2519, 5, 101, 0, 0, 2519, 2520, 5, 120, 0, 0, 2520, 2521, 5, 112, 0, 0, 2521, 2522, 5, 111, 0, 0, 2522, 2523, 5, 110, 0, 0, 2523, 2524, 5, 101, 0, 0, 2524, 2525, 5, 110, 0, 0, 2525, 2526, 5, 116, 0, 0, 2526, 2527, 5, 105, 0, 0, 2527, 2528, 5, 97, 0, 0, 2528, 2530, 5, 108, 0, 0, 2529, 2506, 1, 0, 0, 0, 2529, 2511, 1, 0, 0, 0, 2530, 386, 1, 0, 0, 0, 2531, 2532, 5, 114, 0, 0, 2532, 2533, 5, 97, 0, 0, 2533, 2534, 5, 110, 0, 0, 2534, 2535, 5, 100, 0, 0, 2535, 2536, 5, 108, 0, 0, 2536, 2555, 5, 110, 0, 0, 2537, 2538, 5, 114, 0, 0, 2538, 2539, 5, 97, 0, 0, 2539, 2540, 5, 110, 0, 0, 2540, 2541, 5, 100, 0, 0, 2541, 2542, 5, 111, 0, 0, 2542, 2543, 5, 109, 0, 0, 2543, 2544, 5, 95, 0, 0, 2544, 2545, 5, 108, 0, 0, 2545, 2546, 5, 111, 0, 0, 2546, 2547, 5, 103, 0, 0, 2547, 2548, 5, 95, 0, 0, 2548, 2549, 5, 110, 0, 0, 2549, 2550, 5, 111, 0, 0, 2550, 2551, 5, 114, 0, 0, 2551, 2552, 5, 109, 0, 0, 2552, 2553, 5, 97, 0, 0, 2553, 2555, 5, 108, 0, 0, 2554, 2531, 1, 0, 0, 0, 2554, 2537, 1, 0, 0, 0, 2555, 388, 1, 0, 0, 0, 2556, 2557, 5, 114, 0, 0, 2557, 2558, 5, 97, 0, 0, 2558, 2559, 5, 110, 0, 0, 2559, 2560, 5, 100, 0, 0, 2560, 2578, 5, 98, 0, 0, 2561, 2562, 5, 114, 0, 0, 2562, 2563, 5, 97, 0, 0, 2563, 2564, 5, 110, 0, 0, 2564, 2565, 5, 100, 0, 0, 2565, 2566, 5, 111, 0, 0, 2566, 2567, 5, 109, 0, 0, 2567, 2568, 5, 95, 0, 0, 2568, 2569, 5, 98, 0, 0, 2569, 2570, 5, 101, 0, 0, 2570, 2571, 5, 114, 0, 0, 2571, 2572, 5, 110, 0, 0, 2572, 2573, 5, 111, 0, 0, 2573, 2574, 5, 117, 0, 0, 2574, 2575, 5, 108, 0, 0, 2575, 2576, 5, 108, 0, 0, 2576, 2578, 5, 105, 0, 0, 2577, 2556, 1, 0, 0, 0, 2577, 2561, 1, 0, 0, 0, 2578, 390, 1, 0, 0, 0, 2579, 2580, 5, 114, 0, 0, 2580, 2581, 5, 97, 0, 0, 2581, 2582, 5, 110, 0, 0, 2582, 2583, 5, 100, 0, 0, 2583, 2599, 5, 112, 0, 0, 2584, 2585, 5, 114, 0, 0, 2585, 2586, 5, 97, 0, 0, 2586, 2587, 5, 110, 0, 0, 2587, 2588, 5, 100, 0, 0, 2588, 2589, 5, 111, 0, 0, 2589, 2590, 5, 109, 0, 0, 2590, 2591, 5, 95, 0, 0, 2591, 2592, 5, 112, 0, 0, 2592, 2593, 5, 111, 0, 0, 2593, 2594, 5, 105, 0, 0, 2594, 2595, 5, 115, 0, 0, 2595, 2596, 5, 115, 0, 0, 2596, 2597, 5, 111, 0, 0, 2597, 2599, 5, 110, 0, 0, 2598, 2579, 1, 0, 0, 0, 2598, 2584, 1, 0, 0, 0, 2599, 392, 1, 0, 0, 0, 2600, 2601, 5, 114, 0, 0, 2601, 2602, 5, 97, 0, 0, 2602, 2603, 5, 110, 0, 0, 2603, 2604, 5, 100, 0, 0, 2604, 2618, 5, 103, 0, 0, 2605, 2606, 5, 114, 0, 0, 2606, 2607, 5, 97, 0, 0, 2607, 2608, 5, 110, 0, 0, 2608, 2609, 5, 100, 0, 0, 2609, 2610, 5, 111, 0, 0, 2610, 2611, 5, 109, 0, 0, 2611, 2612, 5, 95, 0, 0, 2612, 2613, 5, 103, 0, 0, 2613, 2614, 5, 97, 0, 0, 2614, 2615, 5, 109, 0, 0, 2615, 2616, 5, 109, 0, 0, 2616, 2618, 5, 97, 0, 0, 2617, 2600, 1, 0, 0, 0, 2617, 2605, 1, 0, 0, 0, 2618, 394, 1, 0, 0, 0, 2619, 2620, 5, 114, 0, 0, 2620, 2621, 5, 97, 0, 0, 2621, 2622, 5, 110, 0, 0, 2622, 2623, 5, 100, 0, 0, 2623, 2624, 5, 98, 0, 0, 2624, 2625, 5, 101, 0, 0, 2625, 2626, 5, 116, 0, 0, 2626, 2639, 5, 97, 0, 0, 2627, 2628, 5, 114, 0, 0, 2628, 2629, 5, 97, 0, 0, 2629, 2630, 5, 110, 0, 0, 2630, 2631, 5, 100, 0, 0, 2631, 2632, 5, 111, 0, 0, 2632, 2633, 5, 109, 0, 0, 2633, 2634, 5, 95, 0, 0, 2634, 2635, 5, 98, 0, 0, 2635, 2636, 5, 101, 0, 0, 2636, 2637, 5, 116, 0, 0, 2637, 2639, 5, 97, 0, 0, 2638, 2619, 1, 0, 0, 0, 2638, 2627, 1, 0, 0, 0, 2639, 396, 1, 0, 0, 0, 2640, 2641, 5, 114, 0, 0, 2641, 2642, 5, 97, 0, 0, 2642, 2643, 5, 110, 0, 0, 2643, 2644, 5, 100, 0, 0, 2644, 2660, 5, 108, 0, 0, 2645, 2646, 5, 114, 0, 0, 2646, 2647, 5, 97, 0, 0, 2647, 2648, 5, 110, 0, 0, 2648, 2649, 5, 100, 0, 0, 2649, 2650, 5, 111, 0, 0, 2650, 2651, 5, 109, 0, 0, 2651, 2652, 5, 95, 0, 0, 2652, 2653, 5, 108, 0, 0, 2653, 2654, 5, 97, 0, 0, 2654, 2655, 5, 112, 0, 0, 2655, 2656, 5, 108, 0, 0, 2656, 2657, 5, 97, 0, 0, 2657, 2658, 5, 99, 0, 0, 2658, 2660, 5, 101, 0, 0, 2659, 2640, 1, 0, 0, 0, 2659, 2645, 1, 0, 0, 0, 2660, 398, 1, 0, 0, 0, 2661, 2662, 5, 114, 0, 0, 2662, 2663, 5, 97, 0, 0, 2663, 2664, 5, 110, 0, 0, 2664, 2665, 5, 100, 0, 0, 2665, 2666, 5, 103, 0, 0, 2666, 2667, 5, 117, 0, 0, 2667, 2668, 5, 109, 0, 0, 2668, 2669, 5, 98, 0, 0, 2669, 2670, 5, 101, 0, 0, 2670, 2685, 5, 108, 0, 0, 2671, 2672, 5, 114, 0, 0, 2672, 2673, 5, 97, 0, 0, 2673, 2674, 5, 110, 0, 0, 2674, 2675, 5, 100, 0, 0, 2675, 2676, 5, 111, 0, 0, 2676, 2677, 5, 109, 0, 0, 2677, 2678, 5, 95, 0, 0, 2678, 2679, 5, 103, 0, 0, 2679, 2680, 5, 117, 0, 0, 2680, 2681, 5, 109, 0, 0, 2681, 2682, 5, 98, 0, 0, 2682, 2683, 5, 101, 0, 0, 2683, 2685, 5, 108, 0, 0, 2684, 2661, 1, 0, 0, 0, 2684, 2671, 1, 0, 0, 0, 2685, 400, 1, 0, 0, 0, 2686, 2687, 5, 114, 0, 0, 2687, 2688, 5, 97, 0, 0, 2688, 2689, 5, 110, 0, 0, 2689, 2690, 5, 100, 0, 0, 2690, 2706, 5, 119, 0, 0, 2691, 2692, 5, 114, 0, 0, 2692, 2693, 5, 97, 0, 0, 2693, 2694, 5, 110, 0, 0, 2694, 2695, 5, 100, 0, 0, 2695, 2696, 5, 111, 0, 0, 2696, 2697, 5, 109, 0, 0, 2697, 2698, 5, 95, 0, 0, 2698, 2699, 5, 119, 0, 0, 2699, 2700, 5, 101, 0, 0, 2700, 2701, 5, 105, 0, 0, 2701, 2702, 5, 98, 0, 0, 2702, 2703, 5, 117, 0, 0, 2703, 2704, 5, 108, 0, 0, 2704, 2706, 5, 108, 0, 0, 2705, 2686, 1, 0, 0, 0, 2705, 2691, 1, 0, 0, 0, 2706, 402, 1, 0, 0, 0, 2707, 2708, 5, 114, 0, 0, 2708, 2709, 5, 97, 0, 0, 2709, 2710, 5, 110, 0, 0, 2710, 2711, 5, 100, 0, 0, 2711, 2712, 5, 99, 0, 0, 2712, 2713, 5, 104, 0, 0, 2713, 2714, 5, 105, 0, 0, 2714, 2727, 5, 50, 0, 0, 2715, 2716, 5, 114, 0, 0, 2716, 2717, 5, 97, 0, 0, 2717, 2718, 5, 110, 0, 0, 2718, 2719, 5, 100, 0, 0, 2719, 2720, 5, 111, 0, 0, 2720, 2721, 5, 109, 0, 0, 2721, 2722, 5, 95, 0, 0, 2722, 2723, 5, 99, 0, 0, 2723, 2724, 5, 104, 0, 0, 2724, 2725, 5, 105, 0, 0, 2725, 2727, 5, 50, 0, 0, 2726, 2707, 1, 0, 0, 0, 2726, 2715, 1, 0, 0, 0, 2727, 404, 1, 0, 0, 0, 2728, 2729, 5, 114, 0, 0, 2729, 2730, 5, 97, 0, 0, 2730, 2731, 5, 110, 0, 0, 2731, 2732, 5, 100, 0, 0, 2732, 2749, 5, 116, 0, 0, 2733, 2734, 5, 114, 0, 0, 2734, 2735, 5, 97, 0, 0, 2735, 2736, 5, 110, 0, 0, 2736, 2737, 5, 100, 0, 0, 2737, 2738, 5, 111, 0, 0, 2738, 2739, 5, 109, 0, 0, 2739, 2740, 5, 95, 0, 0, 2740, 2741, 5, 115, 0, 0, 2741, 2742, 5, 116, 0, 0, 2742, 2743, 5, 117, 0, 0, 2743, 2744, 5, 100, 0, 0, 2744, 2745, 5, 101, 0, 0, 2745, 2746, 5, 110, 0, 0, 2746, 2747, 5, 116, 0, 0, 2747, 2749, 5, 116, 0, 0, 2748, 2728, 1, 0, 0, 0, 2748, 2733, 1, 0, 0, 0, 2749, 406, 1, 0, 0, 0, 2750, 2751, 5, 112, 0, 0, 2751, 2752, 5, 101, 0, 0, 2752, 2753, 5, 114, 0, 0, 2753, 2754, 5, 108, 0, 0, 2754, 2755, 5, 105, 0, 0, 2755, 2769, 5, 110, 0, 0, 2756, 2757, 5, 112, 0, 0, 2757, 2758, 5, 101, 0, 0, 2758, 2759, 5, 114, 0, 0, 2759, 2760, 5, 108, 0, 0, 2760, 2761, 5, 105, 0, 0, 2761, 2762, 5, 110, 0, 0, 2762, 2763, 5, 95, 0, 0, 2763, 2764, 5, 110, 0, 0, 2764, 2765, 5, 111, 0, 0, 2765, 2766, 5, 105, 0, 0, 2766, 2767, 5, 115, 0, 0, 2767, 2769, 5, 101, 0, 0, 2768, 2750, 1, 0, 0, 0, 2768, 2756, 1, 0, 0, 0, 2769, 408, 1, 0, 0, 0, 2770, 2771, 5, 99, 0, 0, 2771, 2772, 5, 101, 0, 0, 2772, 2773, 5, 108, 0, 0, 2773, 2774, 5, 108, 0, 0, 2774, 2775, 5, 117, 0, 0, 2775, 2776, 5, 108, 0, 0, 2776, 2777, 5, 97, 0, 0, 2777, 2819, 5, 114, 0, 0, 2778, 2779, 5, 118, 0, 0, 2779, 2780, 5, 111, 0, 0, 2780, 2781, 5, 114, 0, 0, 2781, 2782, 5, 111, 0, 0, 2782, 2783, 5, 110, 0, 0, 2783, 2784, 5, 111, 0, 0, 2784, 2819, 5, 105, 0, 0, 2785, 2786, 5, 119, 0, 0, 2786, 2787, 5, 111, 0, 0, 2787, 2788, 5, 114, 0, 0, 2788, 2789, 5, 108, 0, 0, 2789, 2790, 5, 101, 0, 0, 2790, 2819, 5, 121, 0, 0, 2791, 2792, 5, 99, 0, 0, 2792, 2793, 5, 101, 0, 0, 2793, 2794, 5, 108, 0, 0, 2794, 2795, 5, 108, 0, 0, 2795, 2796, 5, 117, 0, 0, 2796, 2797, 5, 108, 0, 0, 2797, 2798, 5, 97, 0, 0, 2798, 2799, 5, 114, 0, 0, 2799, 2800, 5, 95, 0, 0, 2800, 2801, 5, 110, 0, 0, 2801, 2802, 5, 111, 0, 0, 2802, 2803, 5, 105, 0, 0, 2803, 2804, 5, 115, 0, 0, 2804, 2819, 5, 101, 0, 0, 2805, 2806, 5, 118, 0, 0, 2806, 2807, 5, 111, 0, 0, 2807, 2808, 5, 114, 0, 0, 2808, 2809, 5, 111, 0, 0, 2809, 2810, 5, 110, 0, 0, 2810, 2811, 5, 111, 0, 0, 2811, 2812, 5, 105, 0, 0, 2812, 2813, 5, 95, 0, 0, 2813, 2814, 5, 110, 0, 0, 2814, 2815, 5, 111, 0, 0, 2815, 2816, 5, 105, 0, 0, 2816, 2817, 5, 115, 0, 0, 2817, 2819, 5, 101, 0, 0, 2818, 2770, 1, 0, 0, 0, 2818, 2778, 1, 0, 0, 0, 2818, 2785, 1, 0, 0, 0, 2818, 2791, 1, 0, 0, 0, 2818, 2805, 1, 0, 0, 0, 2819, 410, 1, 0, 0, 0, 2820, 2821, 5, 112, 0, 0, 2821, 2822, 5, 108, 0, 0, 2822, 2823, 5, 97, 0, 0, 2823, 2824, 5, 115, 0, 0, 2824, 2825, 5, 109, 0, 0, 2825, 2849, 5, 97, 0, 0, 2826, 2827, 5, 116, 0, 0, 2827, 2828, 5, 117, 0, 0, 2828, 2829, 5, 114, 0, 0, 2829, 2830, 5, 98, 0, 0, 2830, 2831, 5, 117, 0, 0, 2831, 2832, 5, 108, 0, 0, 2832, 2833, 5, 101, 0, 0, 2833, 2834, 5, 110, 0, 0, 2834, 2835, 5, 99, 0, 0, 2835, 2849, 5, 101, 0, 0, 2836, 2837, 5, 112, 0, 0, 2837, 2838, 5, 108, 0, 0, 2838, 2839, 5, 97, 0, 0, 2839, 2840, 5, 115, 0, 0, 2840, 2841, 5, 109, 0, 0, 2841, 2842, 5, 97, 0, 0, 2842, 2843, 5, 95, 0, 0, 2843, 2844, 5, 110, 0, 0, 2844, 2845, 5, 111, 0, 0, 2845, 2846, 5, 105, 0, 0, 2846, 2847, 5, 115, 0, 0, 2847, 2849, 5, 101, 0, 0, 2848, 2820, 1, 0, 0, 0, 2848, 2826, 1, 0, 0, 0, 2848, 2836, 1, 0, 0, 0, 2849, 412, 1, 0, 0, 0, 2850, 2851, 5, 114, 0, 0, 2851, 2852, 5, 105, 0, 0, 2852, 2853, 5, 100, 0, 0, 2853, 2854, 5, 103, 0, 0, 2854, 2855, 5, 101, 0, 0, 2855, 2869, 5, 100, 0, 0, 2856, 2857, 5, 114, 0, 0, 2857, 2858, 5, 105, 0, 0, 2858, 2859, 5, 100, 0, 0, 2859, 2860, 5, 103, 0, 0, 2860, 2861, 5, 101, 0, 0, 2861, 2862, 5, 100, 0, 0, 2862, 2863, 5, 95, 0, 0, 2863, 2864, 5, 110, 0, 0, 2864, 2865, 5, 111, 0, 0, 2865, 2866, 5, 105, 0, 0, 2866, 2867, 5, 115, 0, 0, 2867, 2869, 5, 101, 0, 0, 2868, 2850, 1, 0, 0, 0, 2868, 2856, 1, 0, 0, 0, 2869, 414, 1, 0, 0, 0, 2870, 2871, 5, 100, 0, 0, 2871, 2872, 5, 111, 0, 0, 2872, 2873, 5, 109, 0, 0, 2873, 2874, 5, 97, 0, 0, 2874, 2875, 5, 105, 0, 0, 2875, 2876, 5, 110, 0, 0, 2876, 2877, 5, 95, 0, 0, 2877, 2878, 5, 119, 0, 0, 2878, 2879, 5, 97, 0, 0, 2879, 2880, 5, 114, 0, 0, 2880, 2899, 5, 112, 0, 0, 2881, 2882, 5, 100, 0, 0, 2882, 2883, 5, 111, 0, 0, 2883, 2884, 5, 109, 0, 0, 2884, 2885, 5, 97, 0, 0, 2885, 2886, 5, 105, 0, 0, 2886, 2887, 5, 110, 0, 0, 2887, 2888, 5, 95, 0, 0, 2888, 2889, 5, 119, 0, 0, 2889, 2890, 5, 97, 0, 0, 2890, 2891, 5, 114, 0, 0, 2891, 2892, 5, 112, 0, 0, 2892, 2893, 5, 95, 0, 0, 2893, 2894, 5, 110, 0, 0, 2894, 2895, 5, 111, 0, 0, 2895, 2896, 5, 105, 0, 0, 2896, 2897, 5, 115, 0, 0, 2897, 2899, 5, 101, 0, 0, 2898, 2870, 1, 0, 0, 0, 2898, 2881, 1, 0, 0, 0, 2899, 416, 1, 0, 0, 0, 2900, 2901, 5, 43, 0, 0, 2901, 418, 1, 0, 0, 0, 2902, 2903, 5, 45, 0, 0, 2903, 420, 1, 0, 0, 0, 2904, 2905, 5, 42, 0, 0, 2905, 422, 1, 0, 0, 0, 2906, 2907, 5, 47, 0, 0, 2907, 424, 1, 0, 0, 0, 2908, 2909, 5, 37, 0, 0, 2909, 426, 1, 0, 0, 0, 2910, 2911, 5, 94, 0, 0, 2911, 428, 1, 0, 0, 0, 2912, 2913, 5, 60, 0, 0, 2913, 2914, 5, 60, 0, 0, 2914, 430, 1, 0, 0, 0, 2915, 2916, 5, 62, 0, 0, 2916, 2917, 5, 62, 0, 0, 2917, 432, 1, 0, 0, 0, 2918, 2919, 5, 62, 0, 0, 2919, 2920, 5, 61, 0, 0, 2920, 434, 1, 0, 0, 0, 2921, 2922, 5, 62, 0, 0, 2922, 436, 1, 0, 0, 0, 2923, 2924, 5, 60, 0, 0, 2924, 2925, 5, 61, 0, 0, 2925, 438, 1, 0, 0, 0, 2926, 2927, 5, 60, 0, 0, 2927, 440, 1, 0, 0, 0, 2928, 2929, 5, 61, 0, 0, 2929, 2930, 5, 61, 0, 0, 2930, 442, 1, 0, 0, 0, 2931, 2932, 5, 61, 0, 0, 2932, 444, 1, 0, 0, 0, 2933, 2934, 5, 43, 0, 0, 2934, 2935, 5, 61, 0, 0, 2935, 446, 1, 0, 0, 0, 2936, 2937, 5, 45, 0, 0, 2937, 2938, 5, 61, 0, 0, 2938, 448, 1, 0, 0, 0, 2939, 2940, 5, 42, 0, 0, 2940, 2941, 5, 61, 0, 0, 2941, 450, 1, 0, 0, 0, 2942, 2943, 5, 47, 0, 0, 2943, 2944, 5, 61, 0, 0, 2944, 452, 1, 0, 0, 0, 2945, 2946, 5, 37, 0, 0, 2946, 2947, 5, 61, 0, 0, 2947, 454, 1, 0, 0, 0, 2948, 2949, 5, 33, 0, 0, 2949, 2950, 5, 61, 0, 0, 2950, 456, 1, 0, 0, 0, 2951, 2952, 5, 124, 0, 0, 2952, 458, 1, 0, 0, 0, 2953, 2954, 5, 40, 0, 0, 2954, 460, 1, 0, 0, 0, 2955, 2956, 5, 41, 0, 0, 2956, 462, 1, 0, 0, 0, 2957, 2958, 5, 44, 0, 0, 2958, 464, 1, 0, 0, 0, 2959, 2960, 5, 59, 0, 0, 2960, 466, 1, 0, 0, 0, 2961, 2962, 5, 45, 0, 0, 2962, 2963, 5, 62, 0, 0, 2963, 468, 1, 0, 0, 0, 2964, 2965, 5, 91, 0, 0, 2965, 470, 1, 0, 0, 0, 2966, 2967, 5, 93, 0, 0, 2967, 472, 1, 0, 0, 0, 2968, 2969, 5, 63, 0, 0, 2969, 474, 1, 0, 0, 0, 2970, 2971, 5, 58, 0, 0, 2971, 476, 1, 0, 0, 0, 2972, 2973, 5, 123, 0, 0, 2973, 478, 1, 0, 0, 0, 2974, 2975, 5, 125, 0, 0, 2975, 480, 1, 0, 0, 0, 2976, 2978, 7, 0, 0, 0, 2977, 2976, 1, 0, 0, 0, 2978, 2979, 1, 0, 0, 0, 2979, 2977, 1, 0, 0, 0, 2979, 2980, 1, 0, 0, 0, 2980, 2988, 1, 0, 0, 0, 2981, 2985, 5, 46, 0, 0, 2982, 2984, 7, 0, 0, 0, 2983, 2982, 1, 0, 0, 0, 2984, 2987, 1, 0, 0, 0, 2985, 2983, 1, 0, 0, 0, 2985, 2986, 1, 0, 0, 0, 2986, 2989, 1, 0, 0, 0, 2987, 2985, 1, 0, 0, 0, 2988, 2981, 1, 0, 0, 0, 2988, 2989, 1, 0, 0, 0, 2989, 2997, 1, 0, 0, 0, 2990, 2992, 5, 46, 0, 0, 2991, 2993, 7, 0, 0, 0, 2992, 2991, 1, 0, 0, 0, 2993, 2994, 1, 0, 0, 0, 2994, 2992, 1, 0, 0, 0, 2994, 2995, 1, 0, 0, 0, 2995, 2997, 1, 0, 0, 0, 2996, 2977, 1, 0, 0, 0, 2996, 2990, 1, 0, 0, 0, 2997, 3007, 1, 0, 0, 0, 2998, 3000, 7, 1, 0, 0, 2999, 3001, 7, 2, 0, 0, 3000, 2999, 1, 0, 0, 0, 3000, 3001, 1, 0, 0, 0, 3001, 3003, 1, 0, 0, 0, 3002, 3004, 7, 0, 0, 0, 3003, 3002, 1, 0, 0, 0, 3004, 3005, 1, 0, 0, 0, 3005, 3003, 1, 0, 0, 0, 3005, 3006, 1, 0, 0, 0, 3006, 3008, 1, 0, 0, 0, 3007, 2998, 1, 0, 0, 0, 3007, 3008, 1, 0, 0, 0, 3008, 482, 1, 0, 0, 0, 3009, 3010, 5, 112, 0, 0, 3010, 3015, 5, 105, 0, 0, 3011, 3012, 5, 80, 0, 0, 3012, 3015, 5, 73, 0, 0, 3013, 3015, 7, 1, 0, 0, 3014, 3009, 1, 0, 0, 0, 3014, 3011, 1, 0, 0, 0, 3014, 3013, 1, 0, 0, 0, 3015, 484, 1, 0, 0, 0, 3016, 3022, 5, 34, 0, 0, 3017, 3021, 8, 3, 0, 0, 3018, 3019, 5, 92, 0, 0, 3019, 3021, 9, 0, 0, 0, 3020, 3017, 1, 0, 0, 0, 3020, 3018, 1, 0, 0, 0, 3021, 3024, 1, 0, 0, 0, 3022, 3020, 1, 0, 0, 0, 3022, 3023, 1, 0, 0, 0, 3023, 3025, 1, 0, 0, 0, 3024, 3022, 1, 0, 0, 0, 3025, 3037, 5, 34, 0, 0, 3026, 3032, 5, 39, 0, 0, 3027, 3031, 8, 4, 0, 0, 3028, 3029, 5, 92, 0, 0, 3029, 3031, 9, 0, 0, 0, 3030, 3027, 1, 0, 0, 0, 3030, 3028, 1, 0, 0, 0, 3031, 3034, 1, 0, 0, 0, 3032, 3030, 1, 0, 0, 0, 3032, 3033, 1, 0, 0, 0, 3033, 3035, 1, 0, 0, 0, 3034, 3032, 1, 0, 0, 0, 3035, 3037, 5, 39, 0, 0, 3036, 3016, 1, 0, 0, 0, 3036, 3026, 1, 0, 0, 0, 3037, 486, 1, 0, 0, 0, 3038, 3042, 7, 5, 0, 0, 3039, 3041, 7, 6, 0, 0, 3040, 3039, 1, 0, 0, 0, 3041, 3044, 1, 0, 0, 0, 3042, 3040, 1, 0, 0, 0, 3042, 3043, 1, 0, 0, 0, 3043, 488, 1, 0, 0, 0, 3044, 3042, 1, 0, 0, 0, 3045, 3049, 5, 35, 0, 0, 3046, 3048, 8, 7, 0, 0, 3047, 3046, 1, 0, 0, 0, 3048, 3051, 1, 0, 0, 0, 3049, 3047, 1, 0, 0, 0, 3049, 3050, 1, 0, 0, 0, 3050, 3052, 1, 0, 0, 0, 3051, 3049, 1, 0, 0, 0, 3052, 3053, 6, 244, 0, 0, 3053, 490, 1, 0, 0, 0, 3054, 3055, 5, 47, 0, 0, 3055, 3056, 5, 42, 0, 0, 3056, 3060, 1, 0, 0, 0, 3057, 3059, 9, 0, 0, 0, 3058, 3057, 1, 0, 0, 0, 3059, 3062, 1, 0, 0, 0, 3060, 3061, 1, 0, 0, 0, 3060, 3058, 1, 0, 0, 0, 3061, 3063, 1, 0, 0, 0, 3062, 3060, 1, 0, 0, 0, 3063, 3064, 5, 42, 0, 0, 3064, 3065, 5, 47, 0, 0, 3065, 3066, 1, 0, 0, 0, 3066, 3067, 6, 245, 0, 0, 3067, 492, 1, 0, 0, 0, 3068, 3070, 7, 8, 0, 0, 3069, 3068, 1, 0, 0, 0, 3070, 3071, 1, 0, 0, 0, 3071, 3069, 1, 0, 0, 0, 3071, 3072, 1, 0, 0, 0, 3072, 3073, 1, 0, 0, 0, 3073, 3074, 6, 246, 0, 0, 3074, 494, 1, 0, 0, 0, 83, 0, 687, 702, 778, 795, 819, 832, 845, 918, 935, 993, 1042, 1064, 1081, 1102, 1117, 1144, 1175, 1191, 1221, 1248, 1275, 1305, 1331, 1361, 1395, 1466, 1516, 1536, 1557, 1604, 1628, 1651, 1668, 1683, 1716, 1791, 1860, 2089, 2127, 2160, 2181, 2238, 2357, 2388, 2407, 2459, 2484, 2504, 2529, 2554, 2577, 2598, 2617, 2638, 2659, 2684, 2705, 2726, 2748, 2768, 2818, 2848, 2868, 2898, 2979, 2985, 2988, 2994, 2996, 3000, 3005, 3007, 3014, 3020, 3022, 3030, 3032, 3036, 3042, 3049, 3060, 3071, 1, 6, 0, 0] \ No newline at end of file diff --git a/more_math/Parser/MathExprLexer.py b/more_math/Parser/MathExprLexer.py deleted file mode 100644 index abb5c76..0000000 --- a/more_math/Parser/MathExprLexer.py +++ /dev/null @@ -1,1601 +0,0 @@ -# Generated from MathExpr.g4 by ANTLR 4.13.2 -from antlr4 import * -from io import StringIO -import sys -if sys.version_info[1] > 5: - from typing import TextIO -else: - from typing.io import TextIO - - -def serializedATN(): - return [ - 4,0,247,3075,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,2,135,7,135,2,136, - 7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141, - 2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147, - 7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152, - 2,153,7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158, - 7,158,2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163, - 2,164,7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169, - 7,169,2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174, - 2,175,7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180, - 7,180,2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185, - 2,186,7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191, - 7,191,2,192,7,192,2,193,7,193,2,194,7,194,2,195,7,195,2,196,7,196, - 2,197,7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202, - 7,202,2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207, - 2,208,7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213, - 7,213,2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,2,218,7,218, - 2,219,7,219,2,220,7,220,2,221,7,221,2,222,7,222,2,223,7,223,2,224, - 7,224,2,225,7,225,2,226,7,226,2,227,7,227,2,228,7,228,2,229,7,229, - 2,230,7,230,2,231,7,231,2,232,7,232,2,233,7,233,2,234,7,234,2,235, - 7,235,2,236,7,236,2,237,7,237,2,238,7,238,2,239,7,239,2,240,7,240, - 2,241,7,241,2,242,7,242,2,243,7,243,2,244,7,244,2,245,7,245,2,246, - 7,246,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,688,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,703,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,779,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,796,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,1,49,1,49,1,49,1,49,1,49,1,49,3,49,820,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,833,8,50,1,51, - 1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,846,8,51, - 1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53, - 1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,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,57, - 1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60, - 1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62, - 1,62,1,62,1,62,1,62,1,62,1,62,3,62,919,8,62,1,63,1,63,1,63,1,63, - 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,3,63,936, - 8,63,1,64,1,64,1,64,1,64,1,64,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,66,1,66,1,67,1,67,1,67,1,67,1,68, - 1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,70,1,70,1,70, - 1,70,1,71,1,71,1,71,1,71,1,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,3,72,994,8,72,1,73,1,73,1,73,1,73,1,73, - 1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75, - 1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,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,77,1,77,1,77,1,77, - 1,77,1,77,1,77,3,77,1043,8,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,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, - 3,78,1065,8,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79, - 1,79,1,79,1,79,1,79,1,79,3,79,1082,8,79,1,80,1,80,1,80,1,80,1,80, - 1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80, - 1,80,3,80,1103,8,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, - 1,81,1,81,1,81,1,81,3,81,1118,8,81,1,82,1,82,1,82,1,82,1,82,1,82, - 1,82,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,83,1,83,1,83,1,83,1,83,3,83,1145,8,83,1,84,1,84,1,84,1,84, - 1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85, - 1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,3,85, - 1176,8,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86, - 1,86,1,86,1,86,3,86,1192,8,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88, - 1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88, - 1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,3,88,1222,8,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,1,89,1,89,3,89,1249,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,1,90,1,90,3,90, - 1276,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,1,91,1,91,1,91,1,91,1,91,1,91, - 1,91,1,91,1,91,1,91,3,91,1306,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,1,92,3,92,1332,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,1,93,1,93,1,93,1,93,1,93,3,93,1362,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,1,94,1,94,1,94,1,94,1,94, - 1,94,1,94,1,94,1,94,1,94,1,94,3,94,1396,8,94,1,95,1,95,1,95,1,95, - 1,95,1,95,1,95,1,96,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,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98, - 1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99,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,100,1,100,1,100,1,100, - 1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100, - 1,100,1,100,1,100,1,100,3,100,1467,8,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,1,102,1,102,1,102, - 1,102,1,102,1,102,1,102,1,102,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,103,1,103, - 1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103, - 3,103,1517,8,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104, - 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,3,104, - 1537,8,104,1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,3,106, - 1558,8,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108, - 1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110, - 1,110,1,110,1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,112, - 1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112, - 1,112,1,112,1,112,3,112,1605,8,112,1,113,1,113,1,113,1,113,1,113, - 1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113, - 1,113,1,113,1,113,1,113,1,113,1,113,3,113,1629,8,113,1,114,1,114, - 1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115, - 1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,3,115,1652,8,115, - 1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116, - 1,116,1,116,1,116,1,116,3,116,1669,8,116,1,117,1,117,1,117,1,117, - 1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,3,117,1684, - 8,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,119,1,119,1,119, - 1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120, - 1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,3,120, - 1717,8,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121, - 1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122, - 1,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123, - 1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, - 1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125, - 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, - 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,3,126,1792, - 8,126,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128,1,128, - 1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,130,1,130,1,130, - 1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,1,132,1,132, - 1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,133,1,133,1,134,1,134, - 1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,135,1,136,1,136, - 1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136, - 1,136,1,136,3,136,1861,8,136,1,137,1,137,1,137,1,137,1,137,1,138, - 1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139, - 1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,140,1,140,1,141,1,141, - 1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,143, - 1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143, - 1,143,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144, - 1,144,1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,145,1,145,1,145, - 1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,146, - 1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,147,1,147, - 1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,148,1,148, - 1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,149,1,149, - 1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,150,1,150, - 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152, - 1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152, - 1,152,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153, - 1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153, - 1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153, - 1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153, - 1,153,3,153,2090,8,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154, - 1,154,1,154,1,154,1,154,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,3,155,2128,8,155,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,3,156,2161,8,156, - 1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157, - 1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,3,157,2182,8,157, - 1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,160,1,160,1,160, - 1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,163, - 1,163,1,163,1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,164,1,164, - 1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,166, - 1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166, - 3,166,2239,8,166,1,167,1,167,1,167,1,167,1,167,1,168,1,168,1,168, - 1,168,1,168,1,168,1,168,1,168,1,169,1,169,1,169,1,169,1,169,1,169, - 1,169,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,171,1,171,1,171, - 1,171,1,171,1,171,1,171,1,171,1,172,1,172,1,172,1,172,1,172,1,172, - 1,172,1,172,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,174,1,174, - 1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175, - 1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176, - 1,176,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178, - 1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179, - 1,179,1,179,1,180,1,180,1,180,1,180,1,181,1,181,1,181,1,181,1,181, - 1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,181,3,181, - 2358,8,181,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,183, - 1,183,1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,184,1,184,1,184, - 1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,3,184,2389, - 8,184,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,185, - 1,185,1,185,1,185,1,185,1,185,1,185,1,185,3,185,2408,8,185,1,186, - 1,186,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187, - 1,187,1,187,1,187,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188, - 1,188,1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,189,1,189,1,189, - 1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189, - 1,189,1,189,1,189,1,189,1,189,3,189,2460,8,189,1,190,1,190,1,190, - 1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190, - 1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,3,190,2485, - 8,190,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191, - 1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,3,191,2505,8,191, - 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192, - 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192, - 1,192,3,192,2530,8,192,1,193,1,193,1,193,1,193,1,193,1,193,1,193, - 1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193, - 1,193,1,193,1,193,1,193,1,193,3,193,2555,8,193,1,194,1,194,1,194, - 1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194, - 1,194,1,194,1,194,1,194,1,194,1,194,1,194,3,194,2578,8,194,1,195, - 1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195, - 1,195,1,195,1,195,1,195,1,195,1,195,1,195,3,195,2599,8,195,1,196, - 1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196, - 1,196,1,196,1,196,1,196,1,196,3,196,2618,8,196,1,197,1,197,1,197, - 1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197, - 1,197,1,197,1,197,1,197,1,197,3,197,2639,8,197,1,198,1,198,1,198, - 1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198, - 1,198,1,198,1,198,1,198,1,198,3,198,2660,8,198,1,199,1,199,1,199, - 1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199, - 1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,3,199,2685, - 8,199,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200, - 1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,3,200,2706, - 8,200,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201, - 1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,3,201,2727, - 8,201,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202, - 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,3,202, - 2749,8,202,1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,203, - 1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,203,3,203,2769, - 8,203,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204, - 1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204, - 1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204, - 1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204, - 1,204,1,204,1,204,1,204,1,204,3,204,2819,8,204,1,205,1,205,1,205, - 1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205, - 1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205, - 1,205,1,205,1,205,3,205,2849,8,205,1,206,1,206,1,206,1,206,1,206, - 1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,206, - 1,206,1,206,3,206,2869,8,206,1,207,1,207,1,207,1,207,1,207,1,207, - 1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207, - 1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207, - 3,207,2899,8,207,1,208,1,208,1,209,1,209,1,210,1,210,1,211,1,211, - 1,212,1,212,1,213,1,213,1,214,1,214,1,214,1,215,1,215,1,215,1,216, - 1,216,1,216,1,217,1,217,1,218,1,218,1,218,1,219,1,219,1,220,1,220, - 1,220,1,221,1,221,1,222,1,222,1,222,1,223,1,223,1,223,1,224,1,224, - 1,224,1,225,1,225,1,225,1,226,1,226,1,226,1,227,1,227,1,227,1,228, - 1,228,1,229,1,229,1,230,1,230,1,231,1,231,1,232,1,232,1,233,1,233, - 1,233,1,234,1,234,1,235,1,235,1,236,1,236,1,237,1,237,1,238,1,238, - 1,239,1,239,1,240,4,240,2978,8,240,11,240,12,240,2979,1,240,1,240, - 5,240,2984,8,240,10,240,12,240,2987,9,240,3,240,2989,8,240,1,240, - 1,240,4,240,2993,8,240,11,240,12,240,2994,3,240,2997,8,240,1,240, - 1,240,3,240,3001,8,240,1,240,4,240,3004,8,240,11,240,12,240,3005, - 3,240,3008,8,240,1,241,1,241,1,241,1,241,1,241,3,241,3015,8,241, - 1,242,1,242,1,242,1,242,5,242,3021,8,242,10,242,12,242,3024,9,242, - 1,242,1,242,1,242,1,242,1,242,5,242,3031,8,242,10,242,12,242,3034, - 9,242,1,242,3,242,3037,8,242,1,243,1,243,5,243,3041,8,243,10,243, - 12,243,3044,9,243,1,244,1,244,5,244,3048,8,244,10,244,12,244,3051, - 9,244,1,244,1,244,1,245,1,245,1,245,1,245,5,245,3059,8,245,10,245, - 12,245,3062,9,245,1,245,1,245,1,245,1,245,1,245,1,246,4,246,3070, - 8,246,11,246,12,246,3071,1,246,1,246,1,3060,0,247,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,271,136,273, - 137,275,138,277,139,279,140,281,141,283,142,285,143,287,144,289, - 145,291,146,293,147,295,148,297,149,299,150,301,151,303,152,305, - 153,307,154,309,155,311,156,313,157,315,158,317,159,319,160,321, - 161,323,162,325,163,327,164,329,165,331,166,333,167,335,168,337, - 169,339,170,341,171,343,172,345,173,347,174,349,175,351,176,353, - 177,355,178,357,179,359,180,361,181,363,182,365,183,367,184,369, - 185,371,186,373,187,375,188,377,189,379,190,381,191,383,192,385, - 193,387,194,389,195,391,196,393,197,395,198,397,199,399,200,401, - 201,403,202,405,203,407,204,409,205,411,206,413,207,415,208,417, - 209,419,210,421,211,423,212,425,213,427,214,429,215,431,216,433, - 217,435,218,437,219,439,220,441,221,443,222,445,223,447,224,449, - 225,451,226,453,227,455,228,457,229,459,230,461,231,463,232,465, - 233,467,234,469,235,471,236,473,237,475,238,477,239,479,240,481, - 241,483,242,485,243,487,244,489,245,491,246,493,247,1,0,9,1,0,48, - 57,2,0,69,69,101,101,2,0,43,43,45,45,4,0,10,10,13,13,34,34,92,92, - 4,0,10,10,13,13,39,39,92,92,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,3169,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,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0, - 277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0, - 0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295, - 1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0, - 0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1, - 0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0, - 323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0, - 0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341, - 1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0, - 0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1, - 0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0, - 369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0, - 0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387, - 1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0, - 0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0,403,1,0,0,0,0,405,1, - 0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0, - 415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0, - 0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433, - 1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0, - 0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1, - 0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0, - 461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0, - 0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0,0,0,479, - 1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0, - 0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,1,495,1,0,0,0,3,499,1, - 0,0,0,5,503,1,0,0,0,7,507,1,0,0,0,9,512,1,0,0,0,11,517,1,0,0,0,13, - 522,1,0,0,0,15,528,1,0,0,0,17,533,1,0,0,0,19,538,1,0,0,0,21,543, - 1,0,0,0,23,549,1,0,0,0,25,555,1,0,0,0,27,561,1,0,0,0,29,565,1,0, - 0,0,31,570,1,0,0,0,33,573,1,0,0,0,35,577,1,0,0,0,37,581,1,0,0,0, - 39,586,1,0,0,0,41,591,1,0,0,0,43,596,1,0,0,0,45,601,1,0,0,0,47,607, - 1,0,0,0,49,613,1,0,0,0,51,619,1,0,0,0,53,624,1,0,0,0,55,630,1,0, - 0,0,57,636,1,0,0,0,59,640,1,0,0,0,61,645,1,0,0,0,63,651,1,0,0,0, - 65,655,1,0,0,0,67,660,1,0,0,0,69,666,1,0,0,0,71,687,1,0,0,0,73,702, - 1,0,0,0,75,704,1,0,0,0,77,709,1,0,0,0,79,714,1,0,0,0,81,725,1,0, - 0,0,83,731,1,0,0,0,85,736,1,0,0,0,87,745,1,0,0,0,89,750,1,0,0,0, - 91,755,1,0,0,0,93,778,1,0,0,0,95,795,1,0,0,0,97,797,1,0,0,0,99,819, - 1,0,0,0,101,832,1,0,0,0,103,845,1,0,0,0,105,847,1,0,0,0,107,853, - 1,0,0,0,109,862,1,0,0,0,111,871,1,0,0,0,113,876,1,0,0,0,115,881, - 1,0,0,0,117,886,1,0,0,0,119,890,1,0,0,0,121,895,1,0,0,0,123,899, - 1,0,0,0,125,918,1,0,0,0,127,935,1,0,0,0,129,937,1,0,0,0,131,946, - 1,0,0,0,133,950,1,0,0,0,135,957,1,0,0,0,137,961,1,0,0,0,139,968, - 1,0,0,0,141,972,1,0,0,0,143,976,1,0,0,0,145,993,1,0,0,0,147,995, - 1,0,0,0,149,1002,1,0,0,0,151,1007,1,0,0,0,153,1014,1,0,0,0,155,1042, - 1,0,0,0,157,1064,1,0,0,0,159,1081,1,0,0,0,161,1102,1,0,0,0,163,1117, - 1,0,0,0,165,1119,1,0,0,0,167,1144,1,0,0,0,169,1146,1,0,0,0,171,1175, - 1,0,0,0,173,1191,1,0,0,0,175,1193,1,0,0,0,177,1221,1,0,0,0,179,1248, - 1,0,0,0,181,1275,1,0,0,0,183,1305,1,0,0,0,185,1331,1,0,0,0,187,1361, - 1,0,0,0,189,1395,1,0,0,0,191,1397,1,0,0,0,193,1404,1,0,0,0,195,1412, - 1,0,0,0,197,1419,1,0,0,0,199,1429,1,0,0,0,201,1466,1,0,0,0,203,1468, - 1,0,0,0,205,1480,1,0,0,0,207,1516,1,0,0,0,209,1536,1,0,0,0,211,1538, - 1,0,0,0,213,1557,1,0,0,0,215,1559,1,0,0,0,217,1567,1,0,0,0,219,1571, - 1,0,0,0,221,1577,1,0,0,0,223,1584,1,0,0,0,225,1604,1,0,0,0,227,1628, - 1,0,0,0,229,1630,1,0,0,0,231,1651,1,0,0,0,233,1668,1,0,0,0,235,1683, - 1,0,0,0,237,1685,1,0,0,0,239,1692,1,0,0,0,241,1716,1,0,0,0,243,1718, - 1,0,0,0,245,1729,1,0,0,0,247,1739,1,0,0,0,249,1751,1,0,0,0,251,1761, - 1,0,0,0,253,1791,1,0,0,0,255,1793,1,0,0,0,257,1799,1,0,0,0,259,1807, - 1,0,0,0,261,1811,1,0,0,0,263,1817,1,0,0,0,265,1823,1,0,0,0,267,1829, - 1,0,0,0,269,1834,1,0,0,0,271,1840,1,0,0,0,273,1860,1,0,0,0,275,1862, - 1,0,0,0,277,1867,1,0,0,0,279,1875,1,0,0,0,281,1882,1,0,0,0,283,1888, - 1,0,0,0,285,1899,1,0,0,0,287,1911,1,0,0,0,289,1924,1,0,0,0,291,1938, - 1,0,0,0,293,1951,1,0,0,0,295,1965,1,0,0,0,297,1976,1,0,0,0,299,1987, - 1,0,0,0,301,1998,1,0,0,0,303,2009,1,0,0,0,305,2028,1,0,0,0,307,2089, - 1,0,0,0,309,2091,1,0,0,0,311,2127,1,0,0,0,313,2160,1,0,0,0,315,2181, - 1,0,0,0,317,2183,1,0,0,0,319,2186,1,0,0,0,321,2191,1,0,0,0,323,2197, - 1,0,0,0,325,2201,1,0,0,0,327,2204,1,0,0,0,329,2210,1,0,0,0,331,2219, - 1,0,0,0,333,2238,1,0,0,0,335,2240,1,0,0,0,337,2245,1,0,0,0,339,2253, - 1,0,0,0,341,2260,1,0,0,0,343,2267,1,0,0,0,345,2275,1,0,0,0,347,2283, - 1,0,0,0,349,2290,1,0,0,0,351,2295,1,0,0,0,353,2306,1,0,0,0,355,2315, - 1,0,0,0,357,2323,1,0,0,0,359,2333,1,0,0,0,361,2338,1,0,0,0,363,2357, - 1,0,0,0,365,2359,1,0,0,0,367,2367,1,0,0,0,369,2388,1,0,0,0,371,2407, - 1,0,0,0,373,2409,1,0,0,0,375,2416,1,0,0,0,377,2424,1,0,0,0,379,2459, - 1,0,0,0,381,2484,1,0,0,0,383,2504,1,0,0,0,385,2529,1,0,0,0,387,2554, - 1,0,0,0,389,2577,1,0,0,0,391,2598,1,0,0,0,393,2617,1,0,0,0,395,2638, - 1,0,0,0,397,2659,1,0,0,0,399,2684,1,0,0,0,401,2705,1,0,0,0,403,2726, - 1,0,0,0,405,2748,1,0,0,0,407,2768,1,0,0,0,409,2818,1,0,0,0,411,2848, - 1,0,0,0,413,2868,1,0,0,0,415,2898,1,0,0,0,417,2900,1,0,0,0,419,2902, - 1,0,0,0,421,2904,1,0,0,0,423,2906,1,0,0,0,425,2908,1,0,0,0,427,2910, - 1,0,0,0,429,2912,1,0,0,0,431,2915,1,0,0,0,433,2918,1,0,0,0,435,2921, - 1,0,0,0,437,2923,1,0,0,0,439,2926,1,0,0,0,441,2928,1,0,0,0,443,2931, - 1,0,0,0,445,2933,1,0,0,0,447,2936,1,0,0,0,449,2939,1,0,0,0,451,2942, - 1,0,0,0,453,2945,1,0,0,0,455,2948,1,0,0,0,457,2951,1,0,0,0,459,2953, - 1,0,0,0,461,2955,1,0,0,0,463,2957,1,0,0,0,465,2959,1,0,0,0,467,2961, - 1,0,0,0,469,2964,1,0,0,0,471,2966,1,0,0,0,473,2968,1,0,0,0,475,2970, - 1,0,0,0,477,2972,1,0,0,0,479,2974,1,0,0,0,481,2996,1,0,0,0,483,3014, - 1,0,0,0,485,3036,1,0,0,0,487,3038,1,0,0,0,489,3045,1,0,0,0,491,3054, - 1,0,0,0,493,3069,1,0,0,0,495,496,5,115,0,0,496,497,5,105,0,0,497, - 498,5,110,0,0,498,2,1,0,0,0,499,500,5,99,0,0,500,501,5,111,0,0,501, - 502,5,115,0,0,502,4,1,0,0,0,503,504,5,116,0,0,504,505,5,97,0,0,505, - 506,5,110,0,0,506,6,1,0,0,0,507,508,5,97,0,0,508,509,5,115,0,0,509, - 510,5,105,0,0,510,511,5,110,0,0,511,8,1,0,0,0,512,513,5,97,0,0,513, - 514,5,99,0,0,514,515,5,111,0,0,515,516,5,115,0,0,516,10,1,0,0,0, - 517,518,5,97,0,0,518,519,5,116,0,0,519,520,5,97,0,0,520,521,5,110, - 0,0,521,12,1,0,0,0,522,523,5,97,0,0,523,524,5,116,0,0,524,525,5, - 97,0,0,525,526,5,110,0,0,526,527,5,50,0,0,527,14,1,0,0,0,528,529, - 5,115,0,0,529,530,5,105,0,0,530,531,5,110,0,0,531,532,5,104,0,0, - 532,16,1,0,0,0,533,534,5,99,0,0,534,535,5,111,0,0,535,536,5,115, - 0,0,536,537,5,104,0,0,537,18,1,0,0,0,538,539,5,116,0,0,539,540,5, - 97,0,0,540,541,5,110,0,0,541,542,5,104,0,0,542,20,1,0,0,0,543,544, - 5,97,0,0,544,545,5,115,0,0,545,546,5,105,0,0,546,547,5,110,0,0,547, - 548,5,104,0,0,548,22,1,0,0,0,549,550,5,97,0,0,550,551,5,99,0,0,551, - 552,5,111,0,0,552,553,5,115,0,0,553,554,5,104,0,0,554,24,1,0,0,0, - 555,556,5,97,0,0,556,557,5,116,0,0,557,558,5,97,0,0,558,559,5,110, - 0,0,559,560,5,104,0,0,560,26,1,0,0,0,561,562,5,97,0,0,562,563,5, - 98,0,0,563,564,5,115,0,0,564,28,1,0,0,0,565,566,5,115,0,0,566,567, - 5,113,0,0,567,568,5,114,0,0,568,569,5,116,0,0,569,30,1,0,0,0,570, - 571,5,108,0,0,571,572,5,110,0,0,572,32,1,0,0,0,573,574,5,108,0,0, - 574,575,5,111,0,0,575,576,5,103,0,0,576,34,1,0,0,0,577,578,5,101, - 0,0,578,579,5,120,0,0,579,580,5,112,0,0,580,36,1,0,0,0,581,582,5, - 115,0,0,582,583,5,109,0,0,583,584,5,105,0,0,584,585,5,110,0,0,585, - 38,1,0,0,0,586,587,5,115,0,0,587,588,5,109,0,0,588,589,5,97,0,0, - 589,590,5,120,0,0,590,40,1,0,0,0,591,592,5,116,0,0,592,593,5,109, - 0,0,593,594,5,105,0,0,594,595,5,110,0,0,595,42,1,0,0,0,596,597,5, - 116,0,0,597,598,5,109,0,0,598,599,5,97,0,0,599,600,5,120,0,0,600, - 44,1,0,0,0,601,602,5,116,0,0,602,603,5,110,0,0,603,604,5,111,0,0, - 604,605,5,114,0,0,605,606,5,109,0,0,606,46,1,0,0,0,607,608,5,115, - 0,0,608,609,5,110,0,0,609,610,5,111,0,0,610,611,5,114,0,0,611,612, - 5,109,0,0,612,48,1,0,0,0,613,614,5,102,0,0,614,615,5,108,0,0,615, - 616,5,111,0,0,616,617,5,111,0,0,617,618,5,114,0,0,618,50,1,0,0,0, - 619,620,5,99,0,0,620,621,5,101,0,0,621,622,5,105,0,0,622,623,5,108, - 0,0,623,52,1,0,0,0,624,625,5,114,0,0,625,626,5,111,0,0,626,627,5, - 117,0,0,627,628,5,110,0,0,628,629,5,100,0,0,629,54,1,0,0,0,630,631, - 5,103,0,0,631,632,5,97,0,0,632,633,5,109,0,0,633,634,5,109,0,0,634, - 635,5,97,0,0,635,56,1,0,0,0,636,637,5,112,0,0,637,638,5,111,0,0, - 638,639,5,119,0,0,639,58,1,0,0,0,640,641,5,115,0,0,641,642,5,105, - 0,0,642,643,5,103,0,0,643,644,5,109,0,0,644,60,1,0,0,0,645,646,5, - 99,0,0,646,647,5,108,0,0,647,648,5,97,0,0,648,649,5,109,0,0,649, - 650,5,112,0,0,650,62,1,0,0,0,651,652,5,102,0,0,652,653,5,102,0,0, - 653,654,5,116,0,0,654,64,1,0,0,0,655,656,5,105,0,0,656,657,5,102, - 0,0,657,658,5,102,0,0,658,659,5,116,0,0,659,66,1,0,0,0,660,661,5, - 97,0,0,661,662,5,110,0,0,662,663,5,103,0,0,663,664,5,108,0,0,664, - 665,5,101,0,0,665,68,1,0,0,0,666,667,5,112,0,0,667,668,5,114,0,0, - 668,669,5,105,0,0,669,670,5,110,0,0,670,671,5,116,0,0,671,70,1,0, - 0,0,672,673,5,112,0,0,673,674,5,114,0,0,674,675,5,105,0,0,675,676, - 5,110,0,0,676,677,5,116,0,0,677,678,5,95,0,0,678,679,5,115,0,0,679, - 680,5,104,0,0,680,681,5,97,0,0,681,682,5,112,0,0,682,688,5,101,0, - 0,683,684,5,112,0,0,684,685,5,115,0,0,685,686,5,104,0,0,686,688, - 5,112,0,0,687,672,1,0,0,0,687,683,1,0,0,0,688,72,1,0,0,0,689,690, - 5,110,0,0,690,691,5,118,0,0,691,703,5,108,0,0,692,693,5,110,0,0, - 693,694,5,97,0,0,694,695,5,110,0,0,695,696,5,95,0,0,696,697,5,116, - 0,0,697,698,5,111,0,0,698,699,5,95,0,0,699,700,5,110,0,0,700,701, - 5,117,0,0,701,703,5,109,0,0,702,689,1,0,0,0,702,692,1,0,0,0,703, - 74,1,0,0,0,704,705,5,108,0,0,705,706,5,101,0,0,706,707,5,114,0,0, - 707,708,5,112,0,0,708,76,1,0,0,0,709,710,5,115,0,0,710,711,5,116, - 0,0,711,712,5,101,0,0,712,713,5,112,0,0,713,78,1,0,0,0,714,715,5, - 115,0,0,715,716,5,109,0,0,716,717,5,111,0,0,717,718,5,111,0,0,718, - 719,5,116,0,0,719,720,5,104,0,0,720,721,5,115,0,0,721,722,5,116, - 0,0,722,723,5,101,0,0,723,724,5,112,0,0,724,80,1,0,0,0,725,726,5, - 102,0,0,726,727,5,114,0,0,727,728,5,97,0,0,728,729,5,99,0,0,729, - 730,5,116,0,0,730,82,1,0,0,0,731,732,5,114,0,0,732,733,5,101,0,0, - 733,734,5,108,0,0,734,735,5,117,0,0,735,84,1,0,0,0,736,737,5,115, - 0,0,737,738,5,111,0,0,738,739,5,102,0,0,739,740,5,116,0,0,740,741, - 5,112,0,0,741,742,5,108,0,0,742,743,5,117,0,0,743,744,5,115,0,0, - 744,86,1,0,0,0,745,746,5,103,0,0,746,747,5,101,0,0,747,748,5,108, - 0,0,748,749,5,117,0,0,749,88,1,0,0,0,750,751,5,115,0,0,751,752,5, - 105,0,0,752,753,5,103,0,0,753,754,5,110,0,0,754,90,1,0,0,0,755,756, - 5,109,0,0,756,757,5,97,0,0,757,758,5,112,0,0,758,92,1,0,0,0,759, - 760,5,101,0,0,760,761,5,122,0,0,761,762,5,99,0,0,762,763,5,111,0, - 0,763,764,5,110,0,0,764,765,5,118,0,0,765,766,5,111,0,0,766,767, - 5,108,0,0,767,768,5,117,0,0,768,769,5,116,0,0,769,770,5,105,0,0, - 770,771,5,111,0,0,771,779,5,110,0,0,772,773,5,101,0,0,773,774,5, - 122,0,0,774,775,5,99,0,0,775,776,5,111,0,0,776,777,5,110,0,0,777, - 779,5,118,0,0,778,759,1,0,0,0,778,772,1,0,0,0,779,94,1,0,0,0,780, - 781,5,99,0,0,781,782,5,111,0,0,782,783,5,110,0,0,783,784,5,118,0, - 0,784,785,5,111,0,0,785,786,5,108,0,0,786,787,5,117,0,0,787,788, - 5,116,0,0,788,789,5,105,0,0,789,790,5,111,0,0,790,796,5,110,0,0, - 791,792,5,99,0,0,792,793,5,111,0,0,793,794,5,110,0,0,794,796,5,118, - 0,0,795,780,1,0,0,0,795,791,1,0,0,0,796,96,1,0,0,0,797,798,5,115, - 0,0,798,799,5,119,0,0,799,800,5,97,0,0,800,801,5,112,0,0,801,98, - 1,0,0,0,802,803,5,116,0,0,803,804,5,114,0,0,804,805,5,97,0,0,805, - 806,5,110,0,0,806,807,5,115,0,0,807,808,5,112,0,0,808,809,5,111, - 0,0,809,810,5,115,0,0,810,820,5,101,0,0,811,812,5,115,0,0,812,813, - 5,119,0,0,813,814,5,97,0,0,814,815,5,112,0,0,815,816,5,97,0,0,816, - 817,5,120,0,0,817,818,5,101,0,0,818,820,5,115,0,0,819,802,1,0,0, - 0,819,811,1,0,0,0,820,100,1,0,0,0,821,822,5,112,0,0,822,823,5,101, - 0,0,823,824,5,114,0,0,824,825,5,109,0,0,825,826,5,117,0,0,826,827, - 5,116,0,0,827,833,5,101,0,0,828,829,5,112,0,0,829,830,5,101,0,0, - 830,831,5,114,0,0,831,833,5,109,0,0,832,821,1,0,0,0,832,828,1,0, - 0,0,833,102,1,0,0,0,834,835,5,114,0,0,835,836,5,101,0,0,836,837, - 5,115,0,0,837,838,5,104,0,0,838,839,5,97,0,0,839,840,5,112,0,0,840, - 846,5,101,0,0,841,842,5,114,0,0,842,843,5,115,0,0,843,844,5,104, - 0,0,844,846,5,112,0,0,845,834,1,0,0,0,845,841,1,0,0,0,846,104,1, - 0,0,0,847,848,5,114,0,0,848,849,5,97,0,0,849,850,5,110,0,0,850,851, - 5,103,0,0,851,852,5,101,0,0,852,106,1,0,0,0,853,854,5,108,0,0,854, - 855,5,105,0,0,855,856,5,110,0,0,856,857,5,115,0,0,857,858,5,112, - 0,0,858,859,5,97,0,0,859,860,5,99,0,0,860,861,5,101,0,0,861,108, - 1,0,0,0,862,863,5,108,0,0,863,864,5,111,0,0,864,865,5,103,0,0,865, - 866,5,115,0,0,866,867,5,112,0,0,867,868,5,97,0,0,868,869,5,99,0, - 0,869,870,5,101,0,0,870,110,1,0,0,0,871,872,5,116,0,0,872,873,5, - 111,0,0,873,874,5,112,0,0,874,875,5,107,0,0,875,112,1,0,0,0,876, - 877,5,98,0,0,877,878,5,111,0,0,878,879,5,116,0,0,879,880,5,107,0, - 0,880,114,1,0,0,0,881,882,5,112,0,0,882,883,5,105,0,0,883,884,5, - 110,0,0,884,885,5,118,0,0,885,116,1,0,0,0,886,887,5,115,0,0,887, - 888,5,117,0,0,888,889,5,109,0,0,889,118,1,0,0,0,890,891,5,109,0, - 0,891,892,5,101,0,0,892,893,5,97,0,0,893,894,5,110,0,0,894,120,1, - 0,0,0,895,896,5,115,0,0,896,897,5,116,0,0,897,898,5,100,0,0,898, - 122,1,0,0,0,899,900,5,118,0,0,900,901,5,97,0,0,901,902,5,114,0,0, - 902,124,1,0,0,0,903,904,5,113,0,0,904,905,5,117,0,0,905,906,5,97, - 0,0,906,907,5,114,0,0,907,908,5,116,0,0,908,909,5,105,0,0,909,910, - 5,108,0,0,910,919,5,101,0,0,911,912,5,113,0,0,912,913,5,117,0,0, - 913,914,5,97,0,0,914,915,5,114,0,0,915,916,5,116,0,0,916,917,5,105, - 0,0,917,919,5,108,0,0,918,903,1,0,0,0,918,911,1,0,0,0,919,126,1, - 0,0,0,920,921,5,112,0,0,921,922,5,101,0,0,922,923,5,114,0,0,923, - 924,5,99,0,0,924,925,5,101,0,0,925,926,5,110,0,0,926,927,5,116,0, - 0,927,928,5,105,0,0,928,929,5,108,0,0,929,936,5,101,0,0,930,931, - 5,112,0,0,931,932,5,114,0,0,932,933,5,99,0,0,933,934,5,110,0,0,934, - 936,5,116,0,0,935,920,1,0,0,0,935,930,1,0,0,0,936,128,1,0,0,0,937, - 938,5,113,0,0,938,939,5,117,0,0,939,940,5,97,0,0,940,941,5,110,0, - 0,941,942,5,116,0,0,942,943,5,105,0,0,943,944,5,108,0,0,944,945, - 5,101,0,0,945,130,1,0,0,0,946,947,5,100,0,0,947,948,5,111,0,0,948, - 949,5,116,0,0,949,132,1,0,0,0,950,951,5,109,0,0,951,952,5,111,0, - 0,952,953,5,109,0,0,953,954,5,101,0,0,954,955,5,110,0,0,955,956, - 5,116,0,0,956,134,1,0,0,0,957,958,5,101,0,0,958,959,5,114,0,0,959, - 960,5,102,0,0,960,136,1,0,0,0,961,962,5,101,0,0,962,963,5,114,0, - 0,963,964,5,102,0,0,964,965,5,105,0,0,965,966,5,110,0,0,966,967, - 5,118,0,0,967,138,1,0,0,0,968,969,5,97,0,0,969,970,5,110,0,0,970, - 971,5,121,0,0,971,140,1,0,0,0,972,973,5,97,0,0,973,974,5,108,0,0, - 974,975,5,108,0,0,975,142,1,0,0,0,976,977,5,101,0,0,977,978,5,100, - 0,0,978,979,5,103,0,0,979,980,5,101,0,0,980,144,1,0,0,0,981,982, - 5,98,0,0,982,983,5,108,0,0,983,984,5,117,0,0,984,994,5,114,0,0,985, - 986,5,103,0,0,986,987,5,97,0,0,987,988,5,117,0,0,988,989,5,115,0, - 0,989,990,5,115,0,0,990,991,5,105,0,0,991,992,5,97,0,0,992,994,5, - 110,0,0,993,981,1,0,0,0,993,985,1,0,0,0,994,146,1,0,0,0,995,996, - 5,109,0,0,996,997,5,101,0,0,997,998,5,100,0,0,998,999,5,105,0,0, - 999,1000,5,97,0,0,1000,1001,5,110,0,0,1001,148,1,0,0,0,1002,1003, - 5,109,0,0,1003,1004,5,111,0,0,1004,1005,5,100,0,0,1005,1006,5,101, - 0,0,1006,150,1,0,0,0,1007,1008,5,99,0,0,1008,1009,5,117,0,0,1009, - 1010,5,109,0,0,1010,1011,5,115,0,0,1011,1012,5,117,0,0,1012,1013, - 5,109,0,0,1013,152,1,0,0,0,1014,1015,5,99,0,0,1015,1016,5,117,0, - 0,1016,1017,5,109,0,0,1017,1018,5,112,0,0,1018,1019,5,114,0,0,1019, - 1020,5,111,0,0,1020,1021,5,100,0,0,1021,154,1,0,0,0,1022,1023,5, - 116,0,0,1023,1024,5,111,0,0,1024,1025,5,112,0,0,1025,1026,5,107, - 0,0,1026,1027,5,95,0,0,1027,1028,5,105,0,0,1028,1029,5,110,0,0,1029, - 1043,5,100,0,0,1030,1031,5,116,0,0,1031,1032,5,111,0,0,1032,1033, - 5,112,0,0,1033,1034,5,107,0,0,1034,1035,5,95,0,0,1035,1036,5,105, - 0,0,1036,1037,5,110,0,0,1037,1038,5,100,0,0,1038,1039,5,105,0,0, - 1039,1040,5,99,0,0,1040,1041,5,101,0,0,1041,1043,5,115,0,0,1042, - 1022,1,0,0,0,1042,1030,1,0,0,0,1043,156,1,0,0,0,1044,1045,5,98,0, - 0,1045,1046,5,111,0,0,1046,1047,5,116,0,0,1047,1048,5,107,0,0,1048, - 1049,5,95,0,0,1049,1050,5,105,0,0,1050,1051,5,110,0,0,1051,1065, - 5,100,0,0,1052,1053,5,98,0,0,1053,1054,5,111,0,0,1054,1055,5,116, - 0,0,1055,1056,5,107,0,0,1056,1057,5,95,0,0,1057,1058,5,105,0,0,1058, - 1059,5,110,0,0,1059,1060,5,100,0,0,1060,1061,5,105,0,0,1061,1062, - 5,99,0,0,1062,1063,5,101,0,0,1063,1065,5,115,0,0,1064,1044,1,0,0, - 0,1064,1052,1,0,0,0,1065,158,1,0,0,0,1066,1067,5,99,0,0,1067,1068, - 5,117,0,0,1068,1069,5,98,0,0,1069,1070,5,105,0,0,1070,1071,5,99, - 0,0,1071,1072,5,95,0,0,1072,1073,5,101,0,0,1073,1074,5,97,0,0,1074, - 1075,5,115,0,0,1075,1082,5,101,0,0,1076,1077,5,99,0,0,1077,1078, - 5,117,0,0,1078,1079,5,98,0,0,1079,1080,5,105,0,0,1080,1082,5,99, - 0,0,1081,1066,1,0,0,0,1081,1076,1,0,0,0,1082,160,1,0,0,0,1083,1084, - 5,101,0,0,1084,1085,5,108,0,0,1085,1086,5,97,0,0,1086,1087,5,115, - 0,0,1087,1088,5,116,0,0,1088,1089,5,105,0,0,1089,1090,5,99,0,0,1090, - 1091,5,95,0,0,1091,1092,5,101,0,0,1092,1093,5,97,0,0,1093,1094,5, - 115,0,0,1094,1103,5,101,0,0,1095,1096,5,101,0,0,1096,1097,5,108, - 0,0,1097,1098,5,97,0,0,1098,1099,5,115,0,0,1099,1100,5,116,0,0,1100, - 1101,5,105,0,0,1101,1103,5,99,0,0,1102,1083,1,0,0,0,1102,1095,1, - 0,0,0,1103,162,1,0,0,0,1104,1105,5,115,0,0,1105,1106,5,105,0,0,1106, - 1107,5,110,0,0,1107,1108,5,101,0,0,1108,1109,5,95,0,0,1109,1110, - 5,101,0,0,1110,1111,5,97,0,0,1111,1112,5,115,0,0,1112,1118,5,101, - 0,0,1113,1114,5,115,0,0,1114,1115,5,105,0,0,1115,1116,5,110,0,0, - 1116,1118,5,101,0,0,1117,1104,1,0,0,0,1117,1113,1,0,0,0,1118,164, - 1,0,0,0,1119,1120,5,115,0,0,1120,1121,5,109,0,0,1121,1122,5,111, - 0,0,1122,1123,5,111,0,0,1123,1124,5,116,0,0,1124,1125,5,104,0,0, - 1125,1126,5,101,0,0,1126,1127,5,114,0,0,1127,1128,5,115,0,0,1128, - 1129,5,116,0,0,1129,1130,5,101,0,0,1130,1131,5,112,0,0,1131,166, - 1,0,0,0,1132,1133,5,100,0,0,1133,1134,5,105,0,0,1134,1135,5,115, - 0,0,1135,1145,5,116,0,0,1136,1137,5,100,0,0,1137,1138,5,105,0,0, - 1138,1139,5,115,0,0,1139,1140,5,116,0,0,1140,1141,5,97,0,0,1141, - 1142,5,110,0,0,1142,1143,5,99,0,0,1143,1145,5,101,0,0,1144,1132, - 1,0,0,0,1144,1136,1,0,0,0,1145,168,1,0,0,0,1146,1147,5,114,0,0,1147, - 1148,5,101,0,0,1148,1149,5,109,0,0,1149,1150,5,97,0,0,1150,1151, - 5,112,0,0,1151,170,1,0,0,0,1152,1153,5,99,0,0,1153,1154,5,111,0, - 0,1154,1155,5,115,0,0,1155,1156,5,115,0,0,1156,1157,5,105,0,0,1157, - 1176,5,109,0,0,1158,1159,5,99,0,0,1159,1160,5,111,0,0,1160,1161, - 5,115,0,0,1161,1162,5,105,0,0,1162,1163,5,110,0,0,1163,1164,5,101, - 0,0,1164,1165,5,95,0,0,1165,1166,5,115,0,0,1166,1167,5,105,0,0,1167, - 1168,5,109,0,0,1168,1169,5,105,0,0,1169,1170,5,108,0,0,1170,1171, - 5,97,0,0,1171,1172,5,114,0,0,1172,1173,5,105,0,0,1173,1174,5,116, - 0,0,1174,1176,5,121,0,0,1175,1152,1,0,0,0,1175,1158,1,0,0,0,1176, - 172,1,0,0,0,1177,1178,5,99,0,0,1178,1179,5,111,0,0,1179,1180,5,117, - 0,0,1180,1181,5,110,0,0,1181,1192,5,116,0,0,1182,1183,5,99,0,0,1183, - 1184,5,110,0,0,1184,1192,5,116,0,0,1185,1186,5,108,0,0,1186,1187, - 5,101,0,0,1187,1188,5,110,0,0,1188,1189,5,103,0,0,1189,1190,5,116, - 0,0,1190,1192,5,104,0,0,1191,1177,1,0,0,0,1191,1182,1,0,0,0,1191, - 1185,1,0,0,0,1192,174,1,0,0,0,1193,1194,5,107,0,0,1194,1195,5,101, - 0,0,1195,1196,5,121,0,0,1196,1197,5,115,0,0,1197,176,1,0,0,0,1198, - 1199,5,101,0,0,1199,1200,5,110,0,0,1200,1201,5,97,0,0,1201,1202, - 5,98,0,0,1202,1203,5,108,0,0,1203,1204,5,101,0,0,1204,1205,5,95, - 0,0,1205,1206,5,116,0,0,1206,1207,5,114,0,0,1207,1208,5,97,0,0,1208, - 1209,5,99,0,0,1209,1210,5,107,0,0,1210,1211,5,105,0,0,1211,1212, - 5,110,0,0,1212,1222,5,103,0,0,1213,1214,5,116,0,0,1214,1215,5,114, - 0,0,1215,1216,5,97,0,0,1216,1217,5,99,0,0,1217,1218,5,107,0,0,1218, - 1219,5,95,0,0,1219,1220,5,111,0,0,1220,1222,5,110,0,0,1221,1198, - 1,0,0,0,1221,1213,1,0,0,0,1222,178,1,0,0,0,1223,1224,5,100,0,0,1224, - 1225,5,105,0,0,1225,1226,5,115,0,0,1226,1227,5,97,0,0,1227,1228, - 5,98,0,0,1228,1229,5,108,0,0,1229,1230,5,101,0,0,1230,1231,5,95, - 0,0,1231,1232,5,116,0,0,1232,1233,5,114,0,0,1233,1234,5,97,0,0,1234, - 1235,5,99,0,0,1235,1236,5,107,0,0,1236,1237,5,105,0,0,1237,1238, - 5,110,0,0,1238,1249,5,103,0,0,1239,1240,5,116,0,0,1240,1241,5,114, - 0,0,1241,1242,5,97,0,0,1242,1243,5,99,0,0,1243,1244,5,107,0,0,1244, - 1245,5,95,0,0,1245,1246,5,111,0,0,1246,1247,5,102,0,0,1247,1249, - 5,102,0,0,1248,1223,1,0,0,0,1248,1239,1,0,0,0,1249,180,1,0,0,0,1250, - 1251,5,114,0,0,1251,1252,5,101,0,0,1252,1253,5,115,0,0,1253,1254, - 5,101,0,0,1254,1255,5,116,0,0,1255,1256,5,95,0,0,1256,1257,5,116, - 0,0,1257,1258,5,114,0,0,1258,1259,5,97,0,0,1259,1260,5,99,0,0,1260, - 1261,5,107,0,0,1261,1262,5,105,0,0,1262,1263,5,110,0,0,1263,1276, - 5,103,0,0,1264,1265,5,116,0,0,1265,1266,5,114,0,0,1266,1267,5,97, - 0,0,1267,1268,5,99,0,0,1268,1269,5,107,0,0,1269,1270,5,95,0,0,1270, - 1271,5,114,0,0,1271,1272,5,101,0,0,1272,1273,5,115,0,0,1273,1274, - 5,101,0,0,1274,1276,5,116,0,0,1275,1250,1,0,0,0,1275,1264,1,0,0, - 0,1276,182,1,0,0,0,1277,1278,5,103,0,0,1278,1279,5,101,0,0,1279, - 1280,5,116,0,0,1280,1281,5,95,0,0,1281,1282,5,99,0,0,1282,1283,5, - 104,0,0,1283,1284,5,97,0,0,1284,1285,5,110,0,0,1285,1286,5,103,0, - 0,1286,1287,5,101,0,0,1287,1288,5,100,0,0,1288,1289,5,95,0,0,1289, - 1290,5,107,0,0,1290,1291,5,101,0,0,1291,1292,5,121,0,0,1292,1306, - 5,115,0,0,1293,1294,5,99,0,0,1294,1295,5,104,0,0,1295,1296,5,97, - 0,0,1296,1297,5,110,0,0,1297,1298,5,103,0,0,1298,1299,5,101,0,0, - 1299,1300,5,100,0,0,1300,1301,5,95,0,0,1301,1302,5,107,0,0,1302, - 1303,5,101,0,0,1303,1304,5,121,0,0,1304,1306,5,115,0,0,1305,1277, - 1,0,0,0,1305,1293,1,0,0,0,1306,184,1,0,0,0,1307,1308,5,103,0,0,1308, - 1309,5,101,0,0,1309,1310,5,116,0,0,1310,1311,5,95,0,0,1311,1312, - 5,97,0,0,1312,1313,5,100,0,0,1313,1314,5,100,0,0,1314,1315,5,101, - 0,0,1315,1316,5,100,0,0,1316,1317,5,95,0,0,1317,1318,5,107,0,0,1318, - 1319,5,101,0,0,1319,1320,5,121,0,0,1320,1332,5,115,0,0,1321,1322, - 5,97,0,0,1322,1323,5,100,0,0,1323,1324,5,100,0,0,1324,1325,5,101, - 0,0,1325,1326,5,100,0,0,1326,1327,5,95,0,0,1327,1328,5,107,0,0,1328, - 1329,5,101,0,0,1329,1330,5,121,0,0,1330,1332,5,115,0,0,1331,1307, - 1,0,0,0,1331,1321,1,0,0,0,1332,186,1,0,0,0,1333,1334,5,103,0,0,1334, - 1335,5,101,0,0,1335,1336,5,116,0,0,1336,1337,5,95,0,0,1337,1338, - 5,114,0,0,1338,1339,5,101,0,0,1339,1340,5,109,0,0,1340,1341,5,111, - 0,0,1341,1342,5,118,0,0,1342,1343,5,101,0,0,1343,1344,5,100,0,0, - 1344,1345,5,95,0,0,1345,1346,5,107,0,0,1346,1347,5,101,0,0,1347, - 1348,5,121,0,0,1348,1362,5,115,0,0,1349,1350,5,114,0,0,1350,1351, - 5,101,0,0,1351,1352,5,109,0,0,1352,1353,5,111,0,0,1353,1354,5,118, - 0,0,1354,1355,5,101,0,0,1355,1356,5,100,0,0,1356,1357,5,95,0,0,1357, - 1358,5,107,0,0,1358,1359,5,101,0,0,1359,1360,5,121,0,0,1360,1362, - 5,115,0,0,1361,1333,1,0,0,0,1361,1349,1,0,0,0,1362,188,1,0,0,0,1363, - 1364,5,103,0,0,1364,1365,5,101,0,0,1365,1366,5,116,0,0,1366,1367, - 5,95,0,0,1367,1368,5,117,0,0,1368,1369,5,110,0,0,1369,1370,5,99, - 0,0,1370,1371,5,104,0,0,1371,1372,5,97,0,0,1372,1373,5,110,0,0,1373, - 1374,5,103,0,0,1374,1375,5,101,0,0,1375,1376,5,100,0,0,1376,1377, - 5,95,0,0,1377,1378,5,107,0,0,1378,1379,5,101,0,0,1379,1380,5,121, - 0,0,1380,1396,5,115,0,0,1381,1382,5,117,0,0,1382,1383,5,110,0,0, - 1383,1384,5,99,0,0,1384,1385,5,104,0,0,1385,1386,5,97,0,0,1386,1387, - 5,110,0,0,1387,1388,5,103,0,0,1388,1389,5,101,0,0,1389,1390,5,100, - 0,0,1390,1391,5,95,0,0,1391,1392,5,107,0,0,1392,1393,5,101,0,0,1393, - 1394,5,121,0,0,1394,1396,5,115,0,0,1395,1363,1,0,0,0,1395,1381,1, - 0,0,0,1396,190,1,0,0,0,1397,1398,5,114,0,0,1398,1399,5,101,0,0,1399, - 1400,5,112,0,0,1400,1401,5,101,0,0,1401,1402,5,97,0,0,1402,1403, - 5,116,0,0,1403,192,1,0,0,0,1404,1405,5,102,0,0,1405,1406,5,108,0, - 0,1406,1407,5,97,0,0,1407,1408,5,116,0,0,1408,1409,5,116,0,0,1409, - 1410,5,101,0,0,1410,1411,5,110,0,0,1411,194,1,0,0,0,1412,1413,5, - 97,0,0,1413,1414,5,112,0,0,1414,1415,5,112,0,0,1415,1416,5,101,0, - 0,1416,1417,5,110,0,0,1417,1418,5,100,0,0,1418,196,1,0,0,0,1419, - 1420,5,103,0,0,1420,1421,5,101,0,0,1421,1422,5,116,0,0,1422,1423, - 5,95,0,0,1423,1424,5,118,0,0,1424,1425,5,97,0,0,1425,1426,5,108, - 0,0,1426,1427,5,117,0,0,1427,1428,5,101,0,0,1428,198,1,0,0,0,1429, - 1430,5,102,0,0,1430,1431,5,108,0,0,1431,1432,5,111,0,0,1432,1433, - 5,119,0,0,1433,1434,5,95,0,0,1434,1435,5,97,0,0,1435,1436,5,112, - 0,0,1436,1437,5,112,0,0,1437,1438,5,108,0,0,1438,1439,5,121,0,0, - 1439,200,1,0,0,0,1440,1441,5,98,0,0,1441,1442,5,97,0,0,1442,1443, - 5,116,0,0,1443,1444,5,99,0,0,1444,1445,5,104,0,0,1445,1446,5,95, - 0,0,1446,1447,5,115,0,0,1447,1448,5,104,0,0,1448,1449,5,117,0,0, - 1449,1450,5,102,0,0,1450,1451,5,102,0,0,1451,1452,5,108,0,0,1452, - 1467,5,101,0,0,1453,1454,5,115,0,0,1454,1455,5,104,0,0,1455,1456, - 5,117,0,0,1456,1457,5,102,0,0,1457,1458,5,102,0,0,1458,1459,5,108, - 0,0,1459,1467,5,101,0,0,1460,1461,5,115,0,0,1461,1462,5,101,0,0, - 1462,1463,5,108,0,0,1463,1464,5,101,0,0,1464,1465,5,99,0,0,1465, - 1467,5,116,0,0,1466,1440,1,0,0,0,1466,1453,1,0,0,0,1466,1460,1,0, - 0,0,1467,202,1,0,0,0,1468,1469,5,109,0,0,1469,1470,5,111,0,0,1470, - 1471,5,116,0,0,1471,1472,5,105,0,0,1472,1473,5,111,0,0,1473,1474, - 5,110,0,0,1474,1475,5,95,0,0,1475,1476,5,109,0,0,1476,1477,5,97, - 0,0,1477,1478,5,115,0,0,1478,1479,5,107,0,0,1479,204,1,0,0,0,1480, - 1481,5,102,0,0,1481,1482,5,108,0,0,1482,1483,5,111,0,0,1483,1484, - 5,119,0,0,1484,1485,5,95,0,0,1485,1486,5,116,0,0,1486,1487,5,111, - 0,0,1487,1488,5,95,0,0,1488,1489,5,105,0,0,1489,1490,5,109,0,0,1490, - 1491,5,97,0,0,1491,1492,5,103,0,0,1492,1493,5,101,0,0,1493,206,1, - 0,0,0,1494,1495,5,102,0,0,1495,1496,5,108,0,0,1496,1497,5,111,0, - 0,1497,1498,5,119,0,0,1498,1499,5,95,0,0,1499,1500,5,109,0,0,1500, - 1501,5,97,0,0,1501,1517,5,103,0,0,1502,1503,5,102,0,0,1503,1504, - 5,108,0,0,1504,1505,5,111,0,0,1505,1506,5,119,0,0,1506,1507,5,95, - 0,0,1507,1508,5,109,0,0,1508,1509,5,97,0,0,1509,1510,5,103,0,0,1510, - 1511,5,110,0,0,1511,1512,5,105,0,0,1512,1513,5,116,0,0,1513,1514, - 5,117,0,0,1514,1515,5,100,0,0,1515,1517,5,101,0,0,1516,1494,1,0, - 0,0,1516,1502,1,0,0,0,1517,208,1,0,0,0,1518,1519,5,102,0,0,1519, - 1520,5,108,0,0,1520,1521,5,111,0,0,1521,1522,5,119,0,0,1522,1523, - 5,95,0,0,1523,1524,5,97,0,0,1524,1525,5,110,0,0,1525,1537,5,103, - 0,0,1526,1527,5,102,0,0,1527,1528,5,108,0,0,1528,1529,5,111,0,0, - 1529,1530,5,119,0,0,1530,1531,5,95,0,0,1531,1532,5,97,0,0,1532,1533, - 5,110,0,0,1533,1534,5,103,0,0,1534,1535,5,108,0,0,1535,1537,5,101, - 0,0,1536,1518,1,0,0,0,1536,1526,1,0,0,0,1537,210,1,0,0,0,1538,1539, - 5,119,0,0,1539,1540,5,104,0,0,1540,1541,5,101,0,0,1541,1542,5,114, - 0,0,1542,1543,5,101,0,0,1543,212,1,0,0,0,1544,1545,5,104,0,0,1545, - 1546,5,105,0,0,1546,1547,5,115,0,0,1547,1548,5,116,0,0,1548,1549, - 5,111,0,0,1549,1550,5,103,0,0,1550,1551,5,114,0,0,1551,1552,5,97, - 0,0,1552,1558,5,109,0,0,1553,1554,5,104,0,0,1554,1555,5,105,0,0, - 1555,1556,5,115,0,0,1556,1558,5,116,0,0,1557,1544,1,0,0,0,1557,1553, - 1,0,0,0,1558,214,1,0,0,0,1559,1560,5,111,0,0,1560,1561,5,118,0,0, - 1561,1562,5,101,0,0,1562,1563,5,114,0,0,1563,1564,5,108,0,0,1564, - 1565,5,97,0,0,1565,1566,5,121,0,0,1566,216,1,0,0,0,1567,1568,5,112, - 0,0,1568,1569,5,97,0,0,1569,1570,5,100,0,0,1570,218,1,0,0,0,1571, - 1572,5,99,0,0,1572,1573,5,114,0,0,1573,1574,5,111,0,0,1574,1575, - 5,115,0,0,1575,1576,5,115,0,0,1576,220,1,0,0,0,1577,1578,5,109,0, - 0,1578,1579,5,97,0,0,1579,1580,5,116,0,0,1580,1581,5,109,0,0,1581, - 1582,5,117,0,0,1582,1583,5,108,0,0,1583,222,1,0,0,0,1584,1585,5, - 114,0,0,1585,1586,5,105,0,0,1586,1587,5,102,0,0,1587,1588,5,101, - 0,0,1588,224,1,0,0,0,1589,1590,5,98,0,0,1590,1591,5,110,0,0,1591, - 1592,5,111,0,0,1592,1605,5,116,0,0,1593,1594,5,98,0,0,1594,1595, - 5,105,0,0,1595,1596,5,116,0,0,1596,1597,5,119,0,0,1597,1598,5,105, - 0,0,1598,1599,5,115,0,0,1599,1600,5,101,0,0,1600,1601,5,95,0,0,1601, - 1602,5,110,0,0,1602,1603,5,111,0,0,1603,1605,5,116,0,0,1604,1589, - 1,0,0,0,1604,1593,1,0,0,0,1605,226,1,0,0,0,1606,1607,5,98,0,0,1607, - 1608,5,105,0,0,1608,1609,5,116,0,0,1609,1610,5,99,0,0,1610,1611, - 5,111,0,0,1611,1612,5,117,0,0,1612,1613,5,110,0,0,1613,1629,5,116, - 0,0,1614,1615,5,112,0,0,1615,1616,5,111,0,0,1616,1617,5,112,0,0, - 1617,1618,5,99,0,0,1618,1619,5,111,0,0,1619,1620,5,117,0,0,1620, - 1621,5,110,0,0,1621,1629,5,116,0,0,1622,1623,5,112,0,0,1623,1624, - 5,111,0,0,1624,1625,5,112,0,0,1625,1626,5,99,0,0,1626,1627,5,110, - 0,0,1627,1629,5,116,0,0,1628,1606,1,0,0,0,1628,1614,1,0,0,0,1628, - 1622,1,0,0,0,1629,228,1,0,0,0,1630,1631,5,115,0,0,1631,1632,5,104, - 0,0,1632,1633,5,97,0,0,1633,1634,5,112,0,0,1634,1635,5,101,0,0,1635, - 230,1,0,0,0,1636,1637,5,98,0,0,1637,1638,5,97,0,0,1638,1639,5,110, - 0,0,1639,1652,5,100,0,0,1640,1641,5,98,0,0,1641,1642,5,105,0,0,1642, - 1643,5,116,0,0,1643,1644,5,119,0,0,1644,1645,5,105,0,0,1645,1646, - 5,115,0,0,1646,1647,5,101,0,0,1647,1648,5,95,0,0,1648,1649,5,97, - 0,0,1649,1650,5,110,0,0,1650,1652,5,100,0,0,1651,1636,1,0,0,0,1651, - 1640,1,0,0,0,1652,232,1,0,0,0,1653,1654,5,98,0,0,1654,1655,5,120, - 0,0,1655,1656,5,111,0,0,1656,1669,5,114,0,0,1657,1658,5,98,0,0,1658, - 1659,5,105,0,0,1659,1660,5,116,0,0,1660,1661,5,119,0,0,1661,1662, - 5,105,0,0,1662,1663,5,115,0,0,1663,1664,5,101,0,0,1664,1665,5,95, - 0,0,1665,1666,5,120,0,0,1666,1667,5,111,0,0,1667,1669,5,114,0,0, - 1668,1653,1,0,0,0,1668,1657,1,0,0,0,1669,234,1,0,0,0,1670,1671,5, - 98,0,0,1671,1672,5,111,0,0,1672,1684,5,114,0,0,1673,1674,5,98,0, - 0,1674,1675,5,105,0,0,1675,1676,5,116,0,0,1676,1677,5,119,0,0,1677, - 1678,5,105,0,0,1678,1679,5,115,0,0,1679,1680,5,101,0,0,1680,1681, - 5,95,0,0,1681,1682,5,111,0,0,1682,1684,5,114,0,0,1683,1670,1,0,0, - 0,1683,1673,1,0,0,0,1684,236,1,0,0,0,1685,1686,5,116,0,0,1686,1687, - 5,101,0,0,1687,1688,5,110,0,0,1688,1689,5,115,0,0,1689,1690,5,111, - 0,0,1690,1691,5,114,0,0,1691,238,1,0,0,0,1692,1693,5,97,0,0,1693, - 1694,5,100,0,0,1694,1695,5,100,0,0,1695,1696,5,95,0,0,1696,1697, - 5,107,0,0,1697,1698,5,101,0,0,1698,1699,5,121,0,0,1699,240,1,0,0, - 0,1700,1701,5,114,0,0,1701,1702,5,101,0,0,1702,1703,5,109,0,0,1703, - 1704,5,111,0,0,1704,1705,5,118,0,0,1705,1706,5,101,0,0,1706,1707, - 5,95,0,0,1707,1708,5,107,0,0,1708,1709,5,101,0,0,1709,1717,5,121, - 0,0,1710,1711,5,114,0,0,1711,1712,5,109,0,0,1712,1713,5,95,0,0,1713, - 1714,5,107,0,0,1714,1715,5,101,0,0,1715,1717,5,121,0,0,1716,1700, - 1,0,0,0,1716,1710,1,0,0,0,1717,242,1,0,0,0,1718,1719,5,115,0,0,1719, - 1720,5,116,0,0,1720,1721,5,97,0,0,1721,1722,5,99,0,0,1722,1723,5, - 107,0,0,1723,1724,5,95,0,0,1724,1725,5,112,0,0,1725,1726,5,117,0, - 0,1726,1727,5,115,0,0,1727,1728,5,104,0,0,1728,244,1,0,0,0,1729, - 1730,5,115,0,0,1730,1731,5,116,0,0,1731,1732,5,97,0,0,1732,1733, - 5,99,0,0,1733,1734,5,107,0,0,1734,1735,5,95,0,0,1735,1736,5,112, - 0,0,1736,1737,5,111,0,0,1737,1738,5,112,0,0,1738,246,1,0,0,0,1739, - 1740,5,115,0,0,1740,1741,5,116,0,0,1741,1742,5,97,0,0,1742,1743, - 5,99,0,0,1743,1744,5,107,0,0,1744,1745,5,95,0,0,1745,1746,5,99,0, - 0,1746,1747,5,108,0,0,1747,1748,5,101,0,0,1748,1749,5,97,0,0,1749, - 1750,5,114,0,0,1750,248,1,0,0,0,1751,1752,5,115,0,0,1752,1753,5, - 116,0,0,1753,1754,5,97,0,0,1754,1755,5,99,0,0,1755,1756,5,107,0, - 0,1756,1757,5,95,0,0,1757,1758,5,104,0,0,1758,1759,5,97,0,0,1759, - 1760,5,115,0,0,1760,250,1,0,0,0,1761,1762,5,115,0,0,1762,1763,5, - 116,0,0,1763,1764,5,97,0,0,1764,1765,5,99,0,0,1765,1766,5,107,0, - 0,1766,1767,5,95,0,0,1767,1768,5,103,0,0,1768,1769,5,101,0,0,1769, - 1770,5,116,0,0,1770,252,1,0,0,0,1771,1772,5,99,0,0,1772,1773,5,97, - 0,0,1773,1792,5,116,0,0,1774,1775,5,99,0,0,1775,1776,5,111,0,0,1776, - 1777,5,110,0,0,1777,1778,5,99,0,0,1778,1779,5,97,0,0,1779,1792,5, - 116,0,0,1780,1781,5,99,0,0,1781,1782,5,111,0,0,1782,1783,5,110,0, - 0,1783,1784,5,99,0,0,1784,1785,5,97,0,0,1785,1786,5,116,0,0,1786, - 1787,5,101,0,0,1787,1788,5,110,0,0,1788,1789,5,97,0,0,1789,1790, - 5,116,0,0,1790,1792,5,101,0,0,1791,1771,1,0,0,0,1791,1774,1,0,0, - 0,1791,1780,1,0,0,0,1792,254,1,0,0,0,1793,1794,5,115,0,0,1794,1795, - 5,116,0,0,1795,1796,5,97,0,0,1796,1797,5,99,0,0,1797,1798,5,107, - 0,0,1798,256,1,0,0,0,1799,1800,5,110,0,0,1800,1801,5,111,0,0,1801, - 1802,5,110,0,0,1802,1803,5,122,0,0,1803,1804,5,101,0,0,1804,1805, - 5,114,0,0,1805,1806,5,111,0,0,1806,258,1,0,0,0,1807,1808,5,105,0, - 0,1808,1809,5,110,0,0,1809,1810,5,116,0,0,1810,260,1,0,0,0,1811, - 1812,5,102,0,0,1812,1813,5,108,0,0,1813,1814,5,111,0,0,1814,1815, - 5,97,0,0,1815,1816,5,116,0,0,1816,262,1,0,0,0,1817,1818,5,117,0, - 0,1818,1819,5,112,0,0,1819,1820,5,112,0,0,1820,1821,5,101,0,0,1821, - 1822,5,114,0,0,1822,264,1,0,0,0,1823,1824,5,108,0,0,1824,1825,5, - 111,0,0,1825,1826,5,119,0,0,1826,1827,5,101,0,0,1827,1828,5,114, - 0,0,1828,266,1,0,0,0,1829,1830,5,116,0,0,1830,1831,5,114,0,0,1831, - 1832,5,105,0,0,1832,1833,5,109,0,0,1833,268,1,0,0,0,1834,1835,5, - 115,0,0,1835,1836,5,112,0,0,1836,1837,5,108,0,0,1837,1838,5,105, - 0,0,1838,1839,5,116,0,0,1839,270,1,0,0,0,1840,1841,5,106,0,0,1841, - 1842,5,111,0,0,1842,1843,5,105,0,0,1843,1844,5,110,0,0,1844,272, - 1,0,0,0,1845,1846,5,115,0,0,1846,1847,5,117,0,0,1847,1848,5,98,0, - 0,1848,1849,5,115,0,0,1849,1850,5,116,0,0,1850,1851,5,114,0,0,1851, - 1852,5,105,0,0,1852,1853,5,110,0,0,1853,1861,5,103,0,0,1854,1855, - 5,115,0,0,1855,1856,5,117,0,0,1856,1857,5,98,0,0,1857,1858,5,115, - 0,0,1858,1859,5,116,0,0,1859,1861,5,114,0,0,1860,1845,1,0,0,0,1860, - 1854,1,0,0,0,1861,274,1,0,0,0,1862,1863,5,102,0,0,1863,1864,5,105, - 0,0,1864,1865,5,110,0,0,1865,1866,5,100,0,0,1866,276,1,0,0,0,1867, - 1868,5,114,0,0,1868,1869,5,101,0,0,1869,1870,5,112,0,0,1870,1871, - 5,108,0,0,1871,1872,5,97,0,0,1872,1873,5,99,0,0,1873,1874,5,101, - 0,0,1874,278,1,0,0,0,1875,1876,5,100,0,0,1876,1877,5,105,0,0,1877, - 1878,5,108,0,0,1878,1879,5,97,0,0,1879,1880,5,116,0,0,1880,1881, - 5,101,0,0,1881,280,1,0,0,0,1882,1883,5,101,0,0,1883,1884,5,114,0, - 0,1884,1885,5,111,0,0,1885,1886,5,100,0,0,1886,1887,5,101,0,0,1887, - 282,1,0,0,0,1888,1889,5,109,0,0,1889,1890,5,111,0,0,1890,1891,5, - 114,0,0,1891,1892,5,112,0,0,1892,1893,5,104,0,0,1893,1894,5,95,0, - 0,1894,1895,5,111,0,0,1895,1896,5,112,0,0,1896,1897,5,101,0,0,1897, - 1898,5,110,0,0,1898,284,1,0,0,0,1899,1900,5,109,0,0,1900,1901,5, - 111,0,0,1901,1902,5,114,0,0,1902,1903,5,112,0,0,1903,1904,5,104, - 0,0,1904,1905,5,95,0,0,1905,1906,5,99,0,0,1906,1907,5,108,0,0,1907, - 1908,5,111,0,0,1908,1909,5,115,0,0,1909,1910,5,101,0,0,1910,286, - 1,0,0,0,1911,1912,5,114,0,0,1912,1913,5,103,0,0,1913,1914,5,98,0, - 0,1914,1915,5,95,0,0,1915,1916,5,116,0,0,1916,1917,5,111,0,0,1917, - 1918,5,95,0,0,1918,1919,5,111,0,0,1919,1920,5,107,0,0,1920,1921, - 5,108,0,0,1921,1922,5,97,0,0,1922,1923,5,98,0,0,1923,288,1,0,0,0, - 1924,1925,5,114,0,0,1925,1926,5,103,0,0,1926,1927,5,98,0,0,1927, - 1928,5,95,0,0,1928,1929,5,116,0,0,1929,1930,5,111,0,0,1930,1931, - 5,95,0,0,1931,1932,5,99,0,0,1932,1933,5,105,0,0,1933,1934,5,101, - 0,0,1934,1935,5,108,0,0,1935,1936,5,97,0,0,1936,1937,5,98,0,0,1937, - 290,1,0,0,0,1938,1939,5,111,0,0,1939,1940,5,107,0,0,1940,1941,5, - 108,0,0,1941,1942,5,97,0,0,1942,1943,5,98,0,0,1943,1944,5,95,0,0, - 1944,1945,5,116,0,0,1945,1946,5,111,0,0,1946,1947,5,95,0,0,1947, - 1948,5,114,0,0,1948,1949,5,103,0,0,1949,1950,5,98,0,0,1950,292,1, - 0,0,0,1951,1952,5,99,0,0,1952,1953,5,105,0,0,1953,1954,5,101,0,0, - 1954,1955,5,108,0,0,1955,1956,5,97,0,0,1956,1957,5,98,0,0,1957,1958, - 5,95,0,0,1958,1959,5,116,0,0,1959,1960,5,111,0,0,1960,1961,5,95, - 0,0,1961,1962,5,114,0,0,1962,1963,5,103,0,0,1963,1964,5,98,0,0,1964, - 294,1,0,0,0,1965,1966,5,114,0,0,1966,1967,5,103,0,0,1967,1968,5, - 98,0,0,1968,1969,5,95,0,0,1969,1970,5,116,0,0,1970,1971,5,111,0, - 0,1971,1972,5,95,0,0,1972,1973,5,104,0,0,1973,1974,5,115,0,0,1974, - 1975,5,118,0,0,1975,296,1,0,0,0,1976,1977,5,104,0,0,1977,1978,5, - 115,0,0,1978,1979,5,118,0,0,1979,1980,5,95,0,0,1980,1981,5,116,0, - 0,1981,1982,5,111,0,0,1982,1983,5,95,0,0,1983,1984,5,114,0,0,1984, - 1985,5,103,0,0,1985,1986,5,98,0,0,1986,298,1,0,0,0,1987,1988,5,105, - 0,0,1988,1989,5,110,0,0,1989,1990,5,116,0,0,1990,1991,5,95,0,0,1991, - 1992,5,116,0,0,1992,1993,5,111,0,0,1993,1994,5,95,0,0,1994,1995, - 5,114,0,0,1995,1996,5,103,0,0,1996,1997,5,98,0,0,1997,300,1,0,0, - 0,1998,1999,5,114,0,0,1999,2000,5,103,0,0,2000,2001,5,98,0,0,2001, - 2002,5,95,0,0,2002,2003,5,116,0,0,2003,2004,5,111,0,0,2004,2005, - 5,95,0,0,2005,2006,5,105,0,0,2006,2007,5,110,0,0,2007,2008,5,116, - 0,0,2008,302,1,0,0,0,2009,2010,5,105,0,0,2010,2011,5,110,0,0,2011, - 2012,5,116,0,0,2012,2013,5,101,0,0,2013,2014,5,114,0,0,2014,2015, - 5,112,0,0,2015,2016,5,111,0,0,2016,2017,5,108,0,0,2017,2018,5,97, - 0,0,2018,2019,5,116,0,0,2019,2020,5,101,0,0,2020,2021,5,95,0,0,2021, - 2022,5,108,0,0,2022,2023,5,105,0,0,2023,2024,5,110,0,0,2024,2025, - 5,101,0,0,2025,2026,5,97,0,0,2026,2027,5,114,0,0,2027,304,1,0,0, - 0,2028,2029,5,105,0,0,2029,2030,5,110,0,0,2030,2031,5,116,0,0,2031, - 2032,5,101,0,0,2032,2033,5,114,0,0,2033,2034,5,112,0,0,2034,2035, - 5,111,0,0,2035,2036,5,108,0,0,2036,2037,5,97,0,0,2037,2038,5,116, - 0,0,2038,2039,5,101,0,0,2039,2040,5,95,0,0,2040,2041,5,97,0,0,2041, - 2042,5,114,0,0,2042,2043,5,101,0,0,2043,2044,5,97,0,0,2044,306,1, - 0,0,0,2045,2046,5,105,0,0,2046,2047,5,110,0,0,2047,2048,5,116,0, - 0,2048,2049,5,101,0,0,2049,2050,5,114,0,0,2050,2051,5,112,0,0,2051, - 2052,5,111,0,0,2052,2053,5,108,0,0,2053,2054,5,97,0,0,2054,2055, - 5,116,0,0,2055,2056,5,101,0,0,2056,2057,5,95,0,0,2057,2058,5,110, - 0,0,2058,2059,5,101,0,0,2059,2060,5,97,0,0,2060,2061,5,114,0,0,2061, - 2062,5,101,0,0,2062,2063,5,115,0,0,2063,2090,5,116,0,0,2064,2065, - 5,105,0,0,2065,2066,5,110,0,0,2066,2067,5,116,0,0,2067,2068,5,101, - 0,0,2068,2069,5,114,0,0,2069,2070,5,112,0,0,2070,2071,5,111,0,0, - 2071,2072,5,108,0,0,2072,2073,5,97,0,0,2073,2074,5,116,0,0,2074, - 2075,5,101,0,0,2075,2076,5,95,0,0,2076,2077,5,110,0,0,2077,2078, - 5,101,0,0,2078,2079,5,97,0,0,2079,2080,5,114,0,0,2080,2081,5,101, - 0,0,2081,2082,5,115,0,0,2082,2083,5,116,0,0,2083,2084,5,95,0,0,2084, - 2085,5,101,0,0,2085,2086,5,120,0,0,2086,2087,5,97,0,0,2087,2088, - 5,99,0,0,2088,2090,5,116,0,0,2089,2045,1,0,0,0,2089,2064,1,0,0,0, - 2090,308,1,0,0,0,2091,2092,5,116,0,0,2092,2093,5,101,0,0,2093,2094, - 5,120,0,0,2094,2095,5,116,0,0,2095,2096,5,95,0,0,2096,2097,5,105, - 0,0,2097,2098,5,109,0,0,2098,2099,5,97,0,0,2099,2100,5,103,0,0,2100, - 2101,5,101,0,0,2101,310,1,0,0,0,2102,2103,5,97,0,0,2103,2104,5,115, - 0,0,2104,2105,5,95,0,0,2105,2106,5,110,0,0,2106,2107,5,101,0,0,2107, - 2108,5,115,0,0,2108,2109,5,116,0,0,2109,2110,5,101,0,0,2110,2111, - 5,100,0,0,2111,2112,5,95,0,0,2112,2113,5,116,0,0,2113,2114,5,101, - 0,0,2114,2115,5,110,0,0,2115,2116,5,115,0,0,2116,2117,5,111,0,0, - 2117,2128,5,114,0,0,2118,2119,5,97,0,0,2119,2120,5,115,0,0,2120, - 2121,5,95,0,0,2121,2122,5,110,0,0,2122,2123,5,101,0,0,2123,2124, - 5,115,0,0,2124,2125,5,116,0,0,2125,2126,5,101,0,0,2126,2128,5,100, - 0,0,2127,2102,1,0,0,0,2127,2118,1,0,0,0,2128,312,1,0,0,0,2129,2130, - 5,115,0,0,2130,2131,5,118,0,0,2131,2161,5,100,0,0,2132,2133,5,115, - 0,0,2133,2134,5,105,0,0,2134,2135,5,110,0,0,2135,2136,5,103,0,0, - 2136,2137,5,117,0,0,2137,2138,5,108,0,0,2138,2139,5,97,0,0,2139, - 2140,5,114,0,0,2140,2141,5,95,0,0,2141,2142,5,118,0,0,2142,2143, - 5,97,0,0,2143,2144,5,108,0,0,2144,2145,5,117,0,0,2145,2146,5,101, - 0,0,2146,2147,5,95,0,0,2147,2148,5,100,0,0,2148,2149,5,101,0,0,2149, - 2150,5,99,0,0,2150,2151,5,111,0,0,2151,2152,5,109,0,0,2152,2153, - 5,112,0,0,2153,2154,5,111,0,0,2154,2155,5,115,0,0,2155,2156,5,105, - 0,0,2156,2157,5,116,0,0,2157,2158,5,105,0,0,2158,2159,5,111,0,0, - 2159,2161,5,110,0,0,2160,2129,1,0,0,0,2160,2132,1,0,0,0,2161,314, - 1,0,0,0,2162,2163,5,100,0,0,2163,2164,5,105,0,0,2164,2165,5,97,0, - 0,2165,2166,5,103,0,0,2166,2167,5,111,0,0,2167,2168,5,110,0,0,2168, - 2169,5,97,0,0,2169,2170,5,108,0,0,2170,2171,5,95,0,0,2171,2172,5, - 109,0,0,2172,2173,5,97,0,0,2173,2174,5,116,0,0,2174,2175,5,114,0, - 0,2175,2176,5,105,0,0,2176,2182,5,120,0,0,2177,2178,5,100,0,0,2178, - 2179,5,105,0,0,2179,2180,5,97,0,0,2180,2182,5,103,0,0,2181,2162, - 1,0,0,0,2181,2177,1,0,0,0,2182,316,1,0,0,0,2183,2184,5,105,0,0,2184, - 2185,5,102,0,0,2185,318,1,0,0,0,2186,2187,5,101,0,0,2187,2188,5, - 108,0,0,2188,2189,5,115,0,0,2189,2190,5,101,0,0,2190,320,1,0,0,0, - 2191,2192,5,119,0,0,2192,2193,5,104,0,0,2193,2194,5,105,0,0,2194, - 2195,5,108,0,0,2195,2196,5,101,0,0,2196,322,1,0,0,0,2197,2198,5, - 102,0,0,2198,2199,5,111,0,0,2199,2200,5,114,0,0,2200,324,1,0,0,0, - 2201,2202,5,105,0,0,2202,2203,5,110,0,0,2203,326,1,0,0,0,2204,2205, - 5,98,0,0,2205,2206,5,114,0,0,2206,2207,5,101,0,0,2207,2208,5,97, - 0,0,2208,2209,5,107,0,0,2209,328,1,0,0,0,2210,2211,5,99,0,0,2211, - 2212,5,111,0,0,2212,2213,5,110,0,0,2213,2214,5,116,0,0,2214,2215, - 5,105,0,0,2215,2216,5,110,0,0,2216,2217,5,117,0,0,2217,2218,5,101, - 0,0,2218,330,1,0,0,0,2219,2220,5,114,0,0,2220,2221,5,101,0,0,2221, - 2222,5,116,0,0,2222,2223,5,117,0,0,2223,2224,5,114,0,0,2224,2225, - 5,110,0,0,2225,332,1,0,0,0,2226,2227,5,116,0,0,2227,2228,5,105,0, - 0,2228,2229,5,109,0,0,2229,2230,5,101,0,0,2230,2231,5,115,0,0,2231, - 2232,5,116,0,0,2232,2233,5,97,0,0,2233,2234,5,109,0,0,2234,2239, - 5,112,0,0,2235,2236,5,110,0,0,2236,2237,5,111,0,0,2237,2239,5,119, - 0,0,2238,2226,1,0,0,0,2238,2235,1,0,0,0,2239,334,1,0,0,0,2240,2241, - 5,115,0,0,2241,2242,5,111,0,0,2242,2243,5,114,0,0,2243,2244,5,116, - 0,0,2244,336,1,0,0,0,2245,2246,5,97,0,0,2246,2247,5,114,0,0,2247, - 2248,5,103,0,0,2248,2249,5,115,0,0,2249,2250,5,111,0,0,2250,2251, - 5,114,0,0,2251,2252,5,116,0,0,2252,338,1,0,0,0,2253,2254,5,97,0, - 0,2254,2255,5,114,0,0,2255,2256,5,103,0,0,2256,2257,5,109,0,0,2257, - 2258,5,105,0,0,2258,2259,5,110,0,0,2259,340,1,0,0,0,2260,2261,5, - 97,0,0,2261,2262,5,114,0,0,2262,2263,5,103,0,0,2263,2264,5,109,0, - 0,2264,2265,5,97,0,0,2265,2266,5,120,0,0,2266,342,1,0,0,0,2267,2268, - 5,115,0,0,2268,2269,5,111,0,0,2269,2270,5,102,0,0,2270,2271,5,116, - 0,0,2271,2272,5,109,0,0,2272,2273,5,97,0,0,2273,2274,5,120,0,0,2274, - 344,1,0,0,0,2275,2276,5,115,0,0,2276,2277,5,111,0,0,2277,2278,5, - 102,0,0,2278,2279,5,116,0,0,2279,2280,5,109,0,0,2280,2281,5,105, - 0,0,2281,2282,5,110,0,0,2282,346,1,0,0,0,2283,2284,5,117,0,0,2284, - 2285,5,110,0,0,2285,2286,5,105,0,0,2286,2287,5,113,0,0,2287,2288, - 5,117,0,0,2288,2289,5,101,0,0,2289,348,1,0,0,0,2290,2291,5,102,0, - 0,2291,2292,5,108,0,0,2292,2293,5,105,0,0,2293,2294,5,112,0,0,2294, - 350,1,0,0,0,2295,2296,5,115,0,0,2296,2297,5,116,0,0,2297,2298,5, - 97,0,0,2298,2299,5,114,0,0,2299,2300,5,116,0,0,2300,2301,5,115,0, - 0,2301,2302,5,119,0,0,2302,2303,5,105,0,0,2303,2304,5,116,0,0,2304, - 2305,5,104,0,0,2305,352,1,0,0,0,2306,2307,5,101,0,0,2307,2308,5, - 110,0,0,2308,2309,5,100,0,0,2309,2310,5,115,0,0,2310,2311,5,119, - 0,0,2311,2312,5,105,0,0,2312,2313,5,116,0,0,2313,2314,5,104,0,0, - 2314,354,1,0,0,0,2315,2316,5,115,0,0,2316,2317,5,113,0,0,2317,2318, - 5,117,0,0,2318,2319,5,101,0,0,2319,2320,5,101,0,0,2320,2321,5,122, - 0,0,2321,2322,5,101,0,0,2322,356,1,0,0,0,2323,2324,5,117,0,0,2324, - 2325,5,110,0,0,2325,2326,5,115,0,0,2326,2327,5,113,0,0,2327,2328, - 5,117,0,0,2328,2329,5,101,0,0,2329,2330,5,101,0,0,2330,2331,5,122, - 0,0,2331,2332,5,101,0,0,2332,358,1,0,0,0,2333,2334,5,114,0,0,2334, - 2335,5,111,0,0,2335,2336,5,108,0,0,2336,2337,5,108,0,0,2337,360, - 1,0,0,0,2338,2339,5,99,0,0,2339,2340,5,111,0,0,2340,2341,5,118,0, - 0,2341,362,1,0,0,0,2342,2343,5,99,0,0,2343,2344,5,111,0,0,2344,2345, - 5,114,0,0,2345,2358,5,114,0,0,2346,2347,5,99,0,0,2347,2348,5,111, - 0,0,2348,2349,5,114,0,0,2349,2350,5,114,0,0,2350,2351,5,101,0,0, - 2351,2352,5,108,0,0,2352,2353,5,97,0,0,2353,2354,5,116,0,0,2354, - 2355,5,105,0,0,2355,2356,5,111,0,0,2356,2358,5,110,0,0,2357,2342, - 1,0,0,0,2357,2346,1,0,0,0,2358,364,1,0,0,0,2359,2360,5,101,0,0,2360, - 2361,5,110,0,0,2361,2362,5,116,0,0,2362,2363,5,114,0,0,2363,2364, - 5,111,0,0,2364,2365,5,112,0,0,2365,2366,5,121,0,0,2366,366,1,0,0, - 0,2367,2368,5,99,0,0,2368,2369,5,114,0,0,2369,2370,5,111,0,0,2370, - 2371,5,112,0,0,2371,368,1,0,0,0,2372,2373,5,110,0,0,2373,2374,5, - 111,0,0,2374,2375,5,110,0,0,2375,2389,5,101,0,0,2376,2377,5,78,0, - 0,2377,2378,5,111,0,0,2378,2379,5,110,0,0,2379,2389,5,101,0,0,2380, - 2381,5,110,0,0,2381,2382,5,117,0,0,2382,2383,5,108,0,0,2383,2389, - 5,108,0,0,2384,2385,5,78,0,0,2385,2386,5,85,0,0,2386,2387,5,76,0, - 0,2387,2389,5,76,0,0,2388,2372,1,0,0,0,2388,2376,1,0,0,0,2388,2380, - 1,0,0,0,2388,2384,1,0,0,0,2389,370,1,0,0,0,2390,2391,5,99,0,0,2391, - 2392,5,111,0,0,2392,2393,5,111,0,0,2393,2394,5,114,0,0,2394,2395, - 5,100,0,0,2395,2408,5,115,0,0,2396,2397,5,99,0,0,2397,2398,5,111, - 0,0,2398,2399,5,111,0,0,2399,2400,5,114,0,0,2400,2401,5,100,0,0, - 2401,2402,5,105,0,0,2402,2403,5,110,0,0,2403,2404,5,97,0,0,2404, - 2405,5,116,0,0,2405,2406,5,101,0,0,2406,2408,5,115,0,0,2407,2390, - 1,0,0,0,2407,2396,1,0,0,0,2408,372,1,0,0,0,2409,2410,5,103,0,0,2410, - 2411,5,97,0,0,2411,2412,5,116,0,0,2412,2413,5,104,0,0,2413,2414, - 5,101,0,0,2414,2415,5,114,0,0,2415,374,1,0,0,0,2416,2417,5,115,0, - 0,2417,2418,5,99,0,0,2418,2419,5,97,0,0,2419,2420,5,116,0,0,2420, - 2421,5,116,0,0,2421,2422,5,101,0,0,2422,2423,5,114,0,0,2423,376, - 1,0,0,0,2424,2425,5,115,0,0,2425,2426,5,99,0,0,2426,2427,5,97,0, - 0,2427,2428,5,116,0,0,2428,2429,5,116,0,0,2429,2430,5,101,0,0,2430, - 2431,5,114,0,0,2431,2432,5,95,0,0,2432,2433,5,97,0,0,2433,2434,5, - 100,0,0,2434,2435,5,100,0,0,2435,378,1,0,0,0,2436,2437,5,110,0,0, - 2437,2438,5,111,0,0,2438,2439,5,105,0,0,2439,2440,5,115,0,0,2440, - 2460,5,101,0,0,2441,2442,5,114,0,0,2442,2443,5,97,0,0,2443,2444, - 5,110,0,0,2444,2445,5,100,0,0,2445,2460,5,110,0,0,2446,2447,5,114, - 0,0,2447,2448,5,97,0,0,2448,2449,5,110,0,0,2449,2450,5,100,0,0,2450, - 2451,5,111,0,0,2451,2452,5,109,0,0,2452,2453,5,95,0,0,2453,2454, - 5,110,0,0,2454,2455,5,111,0,0,2455,2456,5,114,0,0,2456,2457,5,109, - 0,0,2457,2458,5,97,0,0,2458,2460,5,108,0,0,2459,2436,1,0,0,0,2459, - 2441,1,0,0,0,2459,2446,1,0,0,0,2460,380,1,0,0,0,2461,2462,5,114, - 0,0,2462,2463,5,97,0,0,2463,2464,5,110,0,0,2464,2485,5,100,0,0,2465, - 2466,5,114,0,0,2466,2467,5,97,0,0,2467,2468,5,110,0,0,2468,2469, - 5,100,0,0,2469,2485,5,117,0,0,2470,2471,5,114,0,0,2471,2472,5,97, - 0,0,2472,2473,5,110,0,0,2473,2474,5,100,0,0,2474,2475,5,111,0,0, - 2475,2476,5,109,0,0,2476,2477,5,95,0,0,2477,2478,5,117,0,0,2478, - 2479,5,110,0,0,2479,2480,5,105,0,0,2480,2481,5,102,0,0,2481,2482, - 5,111,0,0,2482,2483,5,114,0,0,2483,2485,5,109,0,0,2484,2461,1,0, - 0,0,2484,2465,1,0,0,0,2484,2470,1,0,0,0,2485,382,1,0,0,0,2486,2487, - 5,114,0,0,2487,2488,5,97,0,0,2488,2489,5,110,0,0,2489,2490,5,100, - 0,0,2490,2505,5,99,0,0,2491,2492,5,114,0,0,2492,2493,5,97,0,0,2493, - 2494,5,110,0,0,2494,2495,5,100,0,0,2495,2496,5,111,0,0,2496,2497, - 5,109,0,0,2497,2498,5,95,0,0,2498,2499,5,99,0,0,2499,2500,5,97,0, - 0,2500,2501,5,117,0,0,2501,2502,5,99,0,0,2502,2503,5,104,0,0,2503, - 2505,5,121,0,0,2504,2486,1,0,0,0,2504,2491,1,0,0,0,2505,384,1,0, - 0,0,2506,2507,5,114,0,0,2507,2508,5,97,0,0,2508,2509,5,110,0,0,2509, - 2510,5,100,0,0,2510,2530,5,101,0,0,2511,2512,5,114,0,0,2512,2513, - 5,97,0,0,2513,2514,5,110,0,0,2514,2515,5,100,0,0,2515,2516,5,111, - 0,0,2516,2517,5,109,0,0,2517,2518,5,95,0,0,2518,2519,5,101,0,0,2519, - 2520,5,120,0,0,2520,2521,5,112,0,0,2521,2522,5,111,0,0,2522,2523, - 5,110,0,0,2523,2524,5,101,0,0,2524,2525,5,110,0,0,2525,2526,5,116, - 0,0,2526,2527,5,105,0,0,2527,2528,5,97,0,0,2528,2530,5,108,0,0,2529, - 2506,1,0,0,0,2529,2511,1,0,0,0,2530,386,1,0,0,0,2531,2532,5,114, - 0,0,2532,2533,5,97,0,0,2533,2534,5,110,0,0,2534,2535,5,100,0,0,2535, - 2536,5,108,0,0,2536,2555,5,110,0,0,2537,2538,5,114,0,0,2538,2539, - 5,97,0,0,2539,2540,5,110,0,0,2540,2541,5,100,0,0,2541,2542,5,111, - 0,0,2542,2543,5,109,0,0,2543,2544,5,95,0,0,2544,2545,5,108,0,0,2545, - 2546,5,111,0,0,2546,2547,5,103,0,0,2547,2548,5,95,0,0,2548,2549, - 5,110,0,0,2549,2550,5,111,0,0,2550,2551,5,114,0,0,2551,2552,5,109, - 0,0,2552,2553,5,97,0,0,2553,2555,5,108,0,0,2554,2531,1,0,0,0,2554, - 2537,1,0,0,0,2555,388,1,0,0,0,2556,2557,5,114,0,0,2557,2558,5,97, - 0,0,2558,2559,5,110,0,0,2559,2560,5,100,0,0,2560,2578,5,98,0,0,2561, - 2562,5,114,0,0,2562,2563,5,97,0,0,2563,2564,5,110,0,0,2564,2565, - 5,100,0,0,2565,2566,5,111,0,0,2566,2567,5,109,0,0,2567,2568,5,95, - 0,0,2568,2569,5,98,0,0,2569,2570,5,101,0,0,2570,2571,5,114,0,0,2571, - 2572,5,110,0,0,2572,2573,5,111,0,0,2573,2574,5,117,0,0,2574,2575, - 5,108,0,0,2575,2576,5,108,0,0,2576,2578,5,105,0,0,2577,2556,1,0, - 0,0,2577,2561,1,0,0,0,2578,390,1,0,0,0,2579,2580,5,114,0,0,2580, - 2581,5,97,0,0,2581,2582,5,110,0,0,2582,2583,5,100,0,0,2583,2599, - 5,112,0,0,2584,2585,5,114,0,0,2585,2586,5,97,0,0,2586,2587,5,110, - 0,0,2587,2588,5,100,0,0,2588,2589,5,111,0,0,2589,2590,5,109,0,0, - 2590,2591,5,95,0,0,2591,2592,5,112,0,0,2592,2593,5,111,0,0,2593, - 2594,5,105,0,0,2594,2595,5,115,0,0,2595,2596,5,115,0,0,2596,2597, - 5,111,0,0,2597,2599,5,110,0,0,2598,2579,1,0,0,0,2598,2584,1,0,0, - 0,2599,392,1,0,0,0,2600,2601,5,114,0,0,2601,2602,5,97,0,0,2602,2603, - 5,110,0,0,2603,2604,5,100,0,0,2604,2618,5,103,0,0,2605,2606,5,114, - 0,0,2606,2607,5,97,0,0,2607,2608,5,110,0,0,2608,2609,5,100,0,0,2609, - 2610,5,111,0,0,2610,2611,5,109,0,0,2611,2612,5,95,0,0,2612,2613, - 5,103,0,0,2613,2614,5,97,0,0,2614,2615,5,109,0,0,2615,2616,5,109, - 0,0,2616,2618,5,97,0,0,2617,2600,1,0,0,0,2617,2605,1,0,0,0,2618, - 394,1,0,0,0,2619,2620,5,114,0,0,2620,2621,5,97,0,0,2621,2622,5,110, - 0,0,2622,2623,5,100,0,0,2623,2624,5,98,0,0,2624,2625,5,101,0,0,2625, - 2626,5,116,0,0,2626,2639,5,97,0,0,2627,2628,5,114,0,0,2628,2629, - 5,97,0,0,2629,2630,5,110,0,0,2630,2631,5,100,0,0,2631,2632,5,111, - 0,0,2632,2633,5,109,0,0,2633,2634,5,95,0,0,2634,2635,5,98,0,0,2635, - 2636,5,101,0,0,2636,2637,5,116,0,0,2637,2639,5,97,0,0,2638,2619, - 1,0,0,0,2638,2627,1,0,0,0,2639,396,1,0,0,0,2640,2641,5,114,0,0,2641, - 2642,5,97,0,0,2642,2643,5,110,0,0,2643,2644,5,100,0,0,2644,2660, - 5,108,0,0,2645,2646,5,114,0,0,2646,2647,5,97,0,0,2647,2648,5,110, - 0,0,2648,2649,5,100,0,0,2649,2650,5,111,0,0,2650,2651,5,109,0,0, - 2651,2652,5,95,0,0,2652,2653,5,108,0,0,2653,2654,5,97,0,0,2654,2655, - 5,112,0,0,2655,2656,5,108,0,0,2656,2657,5,97,0,0,2657,2658,5,99, - 0,0,2658,2660,5,101,0,0,2659,2640,1,0,0,0,2659,2645,1,0,0,0,2660, - 398,1,0,0,0,2661,2662,5,114,0,0,2662,2663,5,97,0,0,2663,2664,5,110, - 0,0,2664,2665,5,100,0,0,2665,2666,5,103,0,0,2666,2667,5,117,0,0, - 2667,2668,5,109,0,0,2668,2669,5,98,0,0,2669,2670,5,101,0,0,2670, - 2685,5,108,0,0,2671,2672,5,114,0,0,2672,2673,5,97,0,0,2673,2674, - 5,110,0,0,2674,2675,5,100,0,0,2675,2676,5,111,0,0,2676,2677,5,109, - 0,0,2677,2678,5,95,0,0,2678,2679,5,103,0,0,2679,2680,5,117,0,0,2680, - 2681,5,109,0,0,2681,2682,5,98,0,0,2682,2683,5,101,0,0,2683,2685, - 5,108,0,0,2684,2661,1,0,0,0,2684,2671,1,0,0,0,2685,400,1,0,0,0,2686, - 2687,5,114,0,0,2687,2688,5,97,0,0,2688,2689,5,110,0,0,2689,2690, - 5,100,0,0,2690,2706,5,119,0,0,2691,2692,5,114,0,0,2692,2693,5,97, - 0,0,2693,2694,5,110,0,0,2694,2695,5,100,0,0,2695,2696,5,111,0,0, - 2696,2697,5,109,0,0,2697,2698,5,95,0,0,2698,2699,5,119,0,0,2699, - 2700,5,101,0,0,2700,2701,5,105,0,0,2701,2702,5,98,0,0,2702,2703, - 5,117,0,0,2703,2704,5,108,0,0,2704,2706,5,108,0,0,2705,2686,1,0, - 0,0,2705,2691,1,0,0,0,2706,402,1,0,0,0,2707,2708,5,114,0,0,2708, - 2709,5,97,0,0,2709,2710,5,110,0,0,2710,2711,5,100,0,0,2711,2712, - 5,99,0,0,2712,2713,5,104,0,0,2713,2714,5,105,0,0,2714,2727,5,50, - 0,0,2715,2716,5,114,0,0,2716,2717,5,97,0,0,2717,2718,5,110,0,0,2718, - 2719,5,100,0,0,2719,2720,5,111,0,0,2720,2721,5,109,0,0,2721,2722, - 5,95,0,0,2722,2723,5,99,0,0,2723,2724,5,104,0,0,2724,2725,5,105, - 0,0,2725,2727,5,50,0,0,2726,2707,1,0,0,0,2726,2715,1,0,0,0,2727, - 404,1,0,0,0,2728,2729,5,114,0,0,2729,2730,5,97,0,0,2730,2731,5,110, - 0,0,2731,2732,5,100,0,0,2732,2749,5,116,0,0,2733,2734,5,114,0,0, - 2734,2735,5,97,0,0,2735,2736,5,110,0,0,2736,2737,5,100,0,0,2737, - 2738,5,111,0,0,2738,2739,5,109,0,0,2739,2740,5,95,0,0,2740,2741, - 5,115,0,0,2741,2742,5,116,0,0,2742,2743,5,117,0,0,2743,2744,5,100, - 0,0,2744,2745,5,101,0,0,2745,2746,5,110,0,0,2746,2747,5,116,0,0, - 2747,2749,5,116,0,0,2748,2728,1,0,0,0,2748,2733,1,0,0,0,2749,406, - 1,0,0,0,2750,2751,5,112,0,0,2751,2752,5,101,0,0,2752,2753,5,114, - 0,0,2753,2754,5,108,0,0,2754,2755,5,105,0,0,2755,2769,5,110,0,0, - 2756,2757,5,112,0,0,2757,2758,5,101,0,0,2758,2759,5,114,0,0,2759, - 2760,5,108,0,0,2760,2761,5,105,0,0,2761,2762,5,110,0,0,2762,2763, - 5,95,0,0,2763,2764,5,110,0,0,2764,2765,5,111,0,0,2765,2766,5,105, - 0,0,2766,2767,5,115,0,0,2767,2769,5,101,0,0,2768,2750,1,0,0,0,2768, - 2756,1,0,0,0,2769,408,1,0,0,0,2770,2771,5,99,0,0,2771,2772,5,101, - 0,0,2772,2773,5,108,0,0,2773,2774,5,108,0,0,2774,2775,5,117,0,0, - 2775,2776,5,108,0,0,2776,2777,5,97,0,0,2777,2819,5,114,0,0,2778, - 2779,5,118,0,0,2779,2780,5,111,0,0,2780,2781,5,114,0,0,2781,2782, - 5,111,0,0,2782,2783,5,110,0,0,2783,2784,5,111,0,0,2784,2819,5,105, - 0,0,2785,2786,5,119,0,0,2786,2787,5,111,0,0,2787,2788,5,114,0,0, - 2788,2789,5,108,0,0,2789,2790,5,101,0,0,2790,2819,5,121,0,0,2791, - 2792,5,99,0,0,2792,2793,5,101,0,0,2793,2794,5,108,0,0,2794,2795, - 5,108,0,0,2795,2796,5,117,0,0,2796,2797,5,108,0,0,2797,2798,5,97, - 0,0,2798,2799,5,114,0,0,2799,2800,5,95,0,0,2800,2801,5,110,0,0,2801, - 2802,5,111,0,0,2802,2803,5,105,0,0,2803,2804,5,115,0,0,2804,2819, - 5,101,0,0,2805,2806,5,118,0,0,2806,2807,5,111,0,0,2807,2808,5,114, - 0,0,2808,2809,5,111,0,0,2809,2810,5,110,0,0,2810,2811,5,111,0,0, - 2811,2812,5,105,0,0,2812,2813,5,95,0,0,2813,2814,5,110,0,0,2814, - 2815,5,111,0,0,2815,2816,5,105,0,0,2816,2817,5,115,0,0,2817,2819, - 5,101,0,0,2818,2770,1,0,0,0,2818,2778,1,0,0,0,2818,2785,1,0,0,0, - 2818,2791,1,0,0,0,2818,2805,1,0,0,0,2819,410,1,0,0,0,2820,2821,5, - 112,0,0,2821,2822,5,108,0,0,2822,2823,5,97,0,0,2823,2824,5,115,0, - 0,2824,2825,5,109,0,0,2825,2849,5,97,0,0,2826,2827,5,116,0,0,2827, - 2828,5,117,0,0,2828,2829,5,114,0,0,2829,2830,5,98,0,0,2830,2831, - 5,117,0,0,2831,2832,5,108,0,0,2832,2833,5,101,0,0,2833,2834,5,110, - 0,0,2834,2835,5,99,0,0,2835,2849,5,101,0,0,2836,2837,5,112,0,0,2837, - 2838,5,108,0,0,2838,2839,5,97,0,0,2839,2840,5,115,0,0,2840,2841, - 5,109,0,0,2841,2842,5,97,0,0,2842,2843,5,95,0,0,2843,2844,5,110, - 0,0,2844,2845,5,111,0,0,2845,2846,5,105,0,0,2846,2847,5,115,0,0, - 2847,2849,5,101,0,0,2848,2820,1,0,0,0,2848,2826,1,0,0,0,2848,2836, - 1,0,0,0,2849,412,1,0,0,0,2850,2851,5,114,0,0,2851,2852,5,105,0,0, - 2852,2853,5,100,0,0,2853,2854,5,103,0,0,2854,2855,5,101,0,0,2855, - 2869,5,100,0,0,2856,2857,5,114,0,0,2857,2858,5,105,0,0,2858,2859, - 5,100,0,0,2859,2860,5,103,0,0,2860,2861,5,101,0,0,2861,2862,5,100, - 0,0,2862,2863,5,95,0,0,2863,2864,5,110,0,0,2864,2865,5,111,0,0,2865, - 2866,5,105,0,0,2866,2867,5,115,0,0,2867,2869,5,101,0,0,2868,2850, - 1,0,0,0,2868,2856,1,0,0,0,2869,414,1,0,0,0,2870,2871,5,100,0,0,2871, - 2872,5,111,0,0,2872,2873,5,109,0,0,2873,2874,5,97,0,0,2874,2875, - 5,105,0,0,2875,2876,5,110,0,0,2876,2877,5,95,0,0,2877,2878,5,119, - 0,0,2878,2879,5,97,0,0,2879,2880,5,114,0,0,2880,2899,5,112,0,0,2881, - 2882,5,100,0,0,2882,2883,5,111,0,0,2883,2884,5,109,0,0,2884,2885, - 5,97,0,0,2885,2886,5,105,0,0,2886,2887,5,110,0,0,2887,2888,5,95, - 0,0,2888,2889,5,119,0,0,2889,2890,5,97,0,0,2890,2891,5,114,0,0,2891, - 2892,5,112,0,0,2892,2893,5,95,0,0,2893,2894,5,110,0,0,2894,2895, - 5,111,0,0,2895,2896,5,105,0,0,2896,2897,5,115,0,0,2897,2899,5,101, - 0,0,2898,2870,1,0,0,0,2898,2881,1,0,0,0,2899,416,1,0,0,0,2900,2901, - 5,43,0,0,2901,418,1,0,0,0,2902,2903,5,45,0,0,2903,420,1,0,0,0,2904, - 2905,5,42,0,0,2905,422,1,0,0,0,2906,2907,5,47,0,0,2907,424,1,0,0, - 0,2908,2909,5,37,0,0,2909,426,1,0,0,0,2910,2911,5,94,0,0,2911,428, - 1,0,0,0,2912,2913,5,60,0,0,2913,2914,5,60,0,0,2914,430,1,0,0,0,2915, - 2916,5,62,0,0,2916,2917,5,62,0,0,2917,432,1,0,0,0,2918,2919,5,62, - 0,0,2919,2920,5,61,0,0,2920,434,1,0,0,0,2921,2922,5,62,0,0,2922, - 436,1,0,0,0,2923,2924,5,60,0,0,2924,2925,5,61,0,0,2925,438,1,0,0, - 0,2926,2927,5,60,0,0,2927,440,1,0,0,0,2928,2929,5,61,0,0,2929,2930, - 5,61,0,0,2930,442,1,0,0,0,2931,2932,5,61,0,0,2932,444,1,0,0,0,2933, - 2934,5,43,0,0,2934,2935,5,61,0,0,2935,446,1,0,0,0,2936,2937,5,45, - 0,0,2937,2938,5,61,0,0,2938,448,1,0,0,0,2939,2940,5,42,0,0,2940, - 2941,5,61,0,0,2941,450,1,0,0,0,2942,2943,5,47,0,0,2943,2944,5,61, - 0,0,2944,452,1,0,0,0,2945,2946,5,37,0,0,2946,2947,5,61,0,0,2947, - 454,1,0,0,0,2948,2949,5,33,0,0,2949,2950,5,61,0,0,2950,456,1,0,0, - 0,2951,2952,5,124,0,0,2952,458,1,0,0,0,2953,2954,5,40,0,0,2954,460, - 1,0,0,0,2955,2956,5,41,0,0,2956,462,1,0,0,0,2957,2958,5,44,0,0,2958, - 464,1,0,0,0,2959,2960,5,59,0,0,2960,466,1,0,0,0,2961,2962,5,45,0, - 0,2962,2963,5,62,0,0,2963,468,1,0,0,0,2964,2965,5,91,0,0,2965,470, - 1,0,0,0,2966,2967,5,93,0,0,2967,472,1,0,0,0,2968,2969,5,63,0,0,2969, - 474,1,0,0,0,2970,2971,5,58,0,0,2971,476,1,0,0,0,2972,2973,5,123, - 0,0,2973,478,1,0,0,0,2974,2975,5,125,0,0,2975,480,1,0,0,0,2976,2978, - 7,0,0,0,2977,2976,1,0,0,0,2978,2979,1,0,0,0,2979,2977,1,0,0,0,2979, - 2980,1,0,0,0,2980,2988,1,0,0,0,2981,2985,5,46,0,0,2982,2984,7,0, - 0,0,2983,2982,1,0,0,0,2984,2987,1,0,0,0,2985,2983,1,0,0,0,2985,2986, - 1,0,0,0,2986,2989,1,0,0,0,2987,2985,1,0,0,0,2988,2981,1,0,0,0,2988, - 2989,1,0,0,0,2989,2997,1,0,0,0,2990,2992,5,46,0,0,2991,2993,7,0, - 0,0,2992,2991,1,0,0,0,2993,2994,1,0,0,0,2994,2992,1,0,0,0,2994,2995, - 1,0,0,0,2995,2997,1,0,0,0,2996,2977,1,0,0,0,2996,2990,1,0,0,0,2997, - 3007,1,0,0,0,2998,3000,7,1,0,0,2999,3001,7,2,0,0,3000,2999,1,0,0, - 0,3000,3001,1,0,0,0,3001,3003,1,0,0,0,3002,3004,7,0,0,0,3003,3002, - 1,0,0,0,3004,3005,1,0,0,0,3005,3003,1,0,0,0,3005,3006,1,0,0,0,3006, - 3008,1,0,0,0,3007,2998,1,0,0,0,3007,3008,1,0,0,0,3008,482,1,0,0, - 0,3009,3010,5,112,0,0,3010,3015,5,105,0,0,3011,3012,5,80,0,0,3012, - 3015,5,73,0,0,3013,3015,7,1,0,0,3014,3009,1,0,0,0,3014,3011,1,0, - 0,0,3014,3013,1,0,0,0,3015,484,1,0,0,0,3016,3022,5,34,0,0,3017,3021, - 8,3,0,0,3018,3019,5,92,0,0,3019,3021,9,0,0,0,3020,3017,1,0,0,0,3020, - 3018,1,0,0,0,3021,3024,1,0,0,0,3022,3020,1,0,0,0,3022,3023,1,0,0, - 0,3023,3025,1,0,0,0,3024,3022,1,0,0,0,3025,3037,5,34,0,0,3026,3032, - 5,39,0,0,3027,3031,8,4,0,0,3028,3029,5,92,0,0,3029,3031,9,0,0,0, - 3030,3027,1,0,0,0,3030,3028,1,0,0,0,3031,3034,1,0,0,0,3032,3030, - 1,0,0,0,3032,3033,1,0,0,0,3033,3035,1,0,0,0,3034,3032,1,0,0,0,3035, - 3037,5,39,0,0,3036,3016,1,0,0,0,3036,3026,1,0,0,0,3037,486,1,0,0, - 0,3038,3042,7,5,0,0,3039,3041,7,6,0,0,3040,3039,1,0,0,0,3041,3044, - 1,0,0,0,3042,3040,1,0,0,0,3042,3043,1,0,0,0,3043,488,1,0,0,0,3044, - 3042,1,0,0,0,3045,3049,5,35,0,0,3046,3048,8,7,0,0,3047,3046,1,0, - 0,0,3048,3051,1,0,0,0,3049,3047,1,0,0,0,3049,3050,1,0,0,0,3050,3052, - 1,0,0,0,3051,3049,1,0,0,0,3052,3053,6,244,0,0,3053,490,1,0,0,0,3054, - 3055,5,47,0,0,3055,3056,5,42,0,0,3056,3060,1,0,0,0,3057,3059,9,0, - 0,0,3058,3057,1,0,0,0,3059,3062,1,0,0,0,3060,3061,1,0,0,0,3060,3058, - 1,0,0,0,3061,3063,1,0,0,0,3062,3060,1,0,0,0,3063,3064,5,42,0,0,3064, - 3065,5,47,0,0,3065,3066,1,0,0,0,3066,3067,6,245,0,0,3067,492,1,0, - 0,0,3068,3070,7,8,0,0,3069,3068,1,0,0,0,3070,3071,1,0,0,0,3071,3069, - 1,0,0,0,3071,3072,1,0,0,0,3072,3073,1,0,0,0,3073,3074,6,246,0,0, - 3074,494,1,0,0,0,83,0,687,702,778,795,819,832,845,918,935,993,1042, - 1064,1081,1102,1117,1144,1175,1191,1221,1248,1275,1305,1331,1361, - 1395,1466,1516,1536,1557,1604,1628,1651,1668,1683,1716,1791,1860, - 2089,2127,2160,2181,2238,2357,2388,2407,2459,2484,2504,2529,2554, - 2577,2598,2617,2638,2659,2684,2705,2726,2748,2768,2818,2848,2868, - 2898,2979,2985,2988,2994,2996,3000,3005,3007,3014,3020,3022,3030, - 3032,3036,3042,3049,3060,3071,1,6,0,0 - ] - -class MathExprLexer(Lexer): - - atn = ATNDeserializer().deserialize(serializedATN()) - - decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] - - 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 - TRANSPOSE = 50 - PERM = 51 - RESHAPE = 52 - RANGE = 53 - LINSPACE = 54 - LOGSPACE = 55 - TOPK = 56 - BOTK = 57 - PINV = 58 - SUM = 59 - MEAN = 60 - STD = 61 - VAR = 62 - QUARTILE = 63 - PERCENTILE = 64 - QUANTILE = 65 - DOT = 66 - MOMENT = 67 - ERF = 68 - ERFINV = 69 - ANY = 70 - ALL = 71 - EDGE = 72 - GAUSSIAN = 73 - MEDIAN = 74 - MODE = 75 - CUMSUM = 76 - CUMPROD = 77 - TOPK_IND = 78 - BOTK_IND = 79 - CUBIC_EASE = 80 - ELASTIC_EASE = 81 - SINE_EASE = 82 - SMOOTHERSTEP = 83 - DIST = 84 - REMAP = 85 - COSSIM = 86 - COUNT = 87 - KEYS = 88 - ENABLE_TRACKING = 89 - DISABLE_TRACKING = 90 - RESET_TRACKING = 91 - GET_CHANGED_KEYS = 92 - GET_ADDED_KEYS = 93 - GET_REMOVED_KEYS = 94 - GET_UNCHANGED_KEYS = 95 - REPEAT = 96 - FLATTEN = 97 - APPEND = 98 - GET_VALUE = 99 - FLOW_APPLY = 100 - BATCH_SHUFFLE = 101 - MOTION_MASK = 102 - FLOW_TO_IMAGE = 103 - FLOW_MAG = 104 - FLOW_ANG = 105 - WHERE = 106 - HISTOGRAM = 107 - OVERLAY = 108 - PAD = 109 - CROSS = 110 - MATMUL = 111 - RIFE = 112 - BNOT = 113 - BITCOUNT = 114 - SHAPE = 115 - BAND = 116 - XOR = 117 - BOR = 118 - TENSOR = 119 - ADD_KEY = 120 - REMOVE_KEY = 121 - PUSH = 122 - POP = 123 - CLEAR = 124 - HAS = 125 - GET = 126 - CONCAT = 127 - STACK = 128 - NONZERO = 129 - INT = 130 - FLOAT = 131 - UPPER = 132 - LOWER = 133 - TRIM = 134 - SPLIT = 135 - JOIN = 136 - SUBSTRING = 137 - FIND = 138 - REPLACE = 139 - DILATE = 140 - ERODE = 141 - MORPH_OPEN = 142 - MORPH_CLOSE = 143 - RGB_TO_OKLAB = 144 - RGB_TO_CIELAB = 145 - OKLAB_TO_RGB = 146 - CIELAB_TO_RGB = 147 - RGB_TO_HSV = 148 - HSV_TO_RGB = 149 - INT_TO_RGB = 150 - RGB_TO_INT = 151 - INTERPOLATE_LINEAR = 152 - INTERPOLATE_AREA = 153 - INTERPOLATE_NEAREST = 154 - TEXT_IMAGE = 155 - AS_NESTED = 156 - SVD = 157 - DIAG = 158 - IF = 159 - ELSE = 160 - WHILE = 161 - FOR = 162 - IN = 163 - BREAK = 164 - CONTINUE = 165 - RETURN = 166 - TIMESTAMP = 167 - SORT = 168 - ARGSORT = 169 - ARGMIN = 170 - ARGMAX = 171 - SOFTMAX = 172 - SOFTMIN = 173 - UNIQUE = 174 - FLIP = 175 - STARTSWITH = 176 - ENDSWITH = 177 - SQUEEZE = 178 - UNSQUEEZE = 179 - ROLL = 180 - COV = 181 - CORR = 182 - ENTROPY = 183 - CROP = 184 - NONE = 185 - COORDS = 186 - GATHER = 187 - SCATTER = 188 - SCATTER_ADD = 189 - NOISE = 190 - RAND = 191 - CAUCHY = 192 - EXPONENTIAL = 193 - LOGNORMAL = 194 - BERNOULLI = 195 - POISSON = 196 - GAMMADIST = 197 - BETADIST = 198 - LAPLACEDIST = 199 - GUMBELDIST = 200 - WEIBULLDIST = 201 - CHI2DIST = 202 - STUDENTTDIST = 203 - PERLIN = 204 - CELLULAR = 205 - PLASMA = 206 - RIDGED = 207 - DOMAIN_WARP = 208 - PLUS = 209 - MINUS = 210 - MULT = 211 - DIV = 212 - MOD = 213 - POW = 214 - LSHIFT = 215 - RSHIFT = 216 - GE = 217 - GT = 218 - LE = 219 - LT = 220 - EQ = 221 - EQUEALS = 222 - PLUS_EQ = 223 - MINUS_EQ = 224 - MULT_EQ = 225 - DIV_EQ = 226 - MOD_EQ = 227 - NE = 228 - PIPE = 229 - LPAREN = 230 - RPAREN = 231 - COMMA = 232 - SEMICOLON = 233 - ARROW = 234 - LBRACKET = 235 - RBRACKET = 236 - QUESTION = 237 - COLON = 238 - LBRACE = 239 - RBRACE = 240 - NUMBER = 241 - CONSTANT = 242 - STRING = 243 - VARIABLE = 244 - SL_COMMENT = 245 - ML_COMMENT = 246 - WS = 247 - - channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] - - modeNames = [ "DEFAULT_MODE" ] - - 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'", "'linspace'", "'logspace'", "'topk'", "'botk'", - "'pinv'", "'sum'", "'mean'", "'std'", "'var'", "'quantile'", - "'dot'", "'moment'", "'erf'", "'erfinv'", "'any'", "'all'", - "'edge'", "'median'", "'mode'", "'cumsum'", "'cumprod'", "'smootherstep'", - "'remap'", "'keys'", "'repeat'", "'flatten'", "'append'", "'get_value'", - "'flow_apply'", "'motion_mask'", "'flow_to_image'", "'where'", - "'overlay'", "'pad'", "'cross'", "'matmul'", "'rife'", "'shape'", - "'tensor'", "'add_key'", "'stack_push'", "'stack_pop'", "'stack_clear'", - "'stack_has'", "'stack_get'", "'stack'", "'nonzero'", "'int'", - "'float'", "'upper'", "'lower'", "'trim'", "'split'", "'join'", - "'find'", "'replace'", "'dilate'", "'erode'", "'morph_open'", - "'morph_close'", "'rgb_to_oklab'", "'rgb_to_cielab'", "'oklab_to_rgb'", - "'cielab_to_rgb'", "'rgb_to_hsv'", "'hsv_to_rgb'", "'int_to_rgb'", - "'rgb_to_int'", "'interpolate_linear'", "'interpolate_area'", - "'text_image'", "'if'", "'else'", "'while'", "'for'", "'in'", - "'break'", "'continue'", "'return'", "'sort'", "'argsort'", - "'argmin'", "'argmax'", "'softmax'", "'softmin'", "'unique'", - "'flip'", "'startswith'", "'endswith'", "'squeeze'", "'unsqueeze'", - "'roll'", "'cov'", "'entropy'", "'crop'", "'gather'", "'scatter'", - "'scatter_add'", "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "'<<'", - "'>>'", "'>='", "'>'", "'<='", "'<'", "'=='", "'='", "'+='", - "'-='", "'*='", "'/='", "'%='", "'!='", "'|'", "'('", "')'", - "','", "';'", "'->'", "'['", "']'", "'?'", "':'", "'{'", "'}'" ] - - 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", "TRANSPOSE", "PERM", "RESHAPE", - "RANGE", "LINSPACE", "LOGSPACE", "TOPK", "BOTK", "PINV", "SUM", - "MEAN", "STD", "VAR", "QUARTILE", "PERCENTILE", "QUANTILE", - "DOT", "MOMENT", "ERF", "ERFINV", "ANY", "ALL", "EDGE", "GAUSSIAN", - "MEDIAN", "MODE", "CUMSUM", "CUMPROD", "TOPK_IND", "BOTK_IND", - "CUBIC_EASE", "ELASTIC_EASE", "SINE_EASE", "SMOOTHERSTEP", "DIST", - "REMAP", "COSSIM", "COUNT", "KEYS", "ENABLE_TRACKING", "DISABLE_TRACKING", - "RESET_TRACKING", "GET_CHANGED_KEYS", "GET_ADDED_KEYS", "GET_REMOVED_KEYS", - "GET_UNCHANGED_KEYS", "REPEAT", "FLATTEN", "APPEND", "GET_VALUE", - "FLOW_APPLY", "BATCH_SHUFFLE", "MOTION_MASK", "FLOW_TO_IMAGE", - "FLOW_MAG", "FLOW_ANG", "WHERE", "HISTOGRAM", "OVERLAY", "PAD", - "CROSS", "MATMUL", "RIFE", "BNOT", "BITCOUNT", "SHAPE", "BAND", - "XOR", "BOR", "TENSOR", "ADD_KEY", "REMOVE_KEY", "PUSH", "POP", - "CLEAR", "HAS", "GET", "CONCAT", "STACK", "NONZERO", "INT", - "FLOAT", "UPPER", "LOWER", "TRIM", "SPLIT", "JOIN", "SUBSTRING", - "FIND", "REPLACE", "DILATE", "ERODE", "MORPH_OPEN", "MORPH_CLOSE", - "RGB_TO_OKLAB", "RGB_TO_CIELAB", "OKLAB_TO_RGB", "CIELAB_TO_RGB", - "RGB_TO_HSV", "HSV_TO_RGB", "INT_TO_RGB", "RGB_TO_INT", "INTERPOLATE_LINEAR", - "INTERPOLATE_AREA", "INTERPOLATE_NEAREST", "TEXT_IMAGE", "AS_NESTED", - "SVD", "DIAG", "IF", "ELSE", "WHILE", "FOR", "IN", "BREAK", - "CONTINUE", "RETURN", "TIMESTAMP", "SORT", "ARGSORT", "ARGMIN", - "ARGMAX", "SOFTMAX", "SOFTMIN", "UNIQUE", "FLIP", "STARTSWITH", - "ENDSWITH", "SQUEEZE", "UNSQUEEZE", "ROLL", "COV", "CORR", "ENTROPY", - "CROP", "NONE", "COORDS", "GATHER", "SCATTER", "SCATTER_ADD", - "NOISE", "RAND", "CAUCHY", "EXPONENTIAL", "LOGNORMAL", "BERNOULLI", - "POISSON", "GAMMADIST", "BETADIST", "LAPLACEDIST", "GUMBELDIST", - "WEIBULLDIST", "CHI2DIST", "STUDENTTDIST", "PERLIN", "CELLULAR", - "PLASMA", "RIDGED", "DOMAIN_WARP", "PLUS", "MINUS", "MULT", - "DIV", "MOD", "POW", "LSHIFT", "RSHIFT", "GE", "GT", "LE", "LT", - "EQ", "EQUEALS", "PLUS_EQ", "MINUS_EQ", "MULT_EQ", "DIV_EQ", - "MOD_EQ", "NE", "PIPE", "LPAREN", "RPAREN", "COMMA", "SEMICOLON", - "ARROW", "LBRACKET", "RBRACKET", "QUESTION", "COLON", "LBRACE", - "RBRACE", "NUMBER", "CONSTANT", "STRING", "VARIABLE", "SL_COMMENT", - "ML_COMMENT", "WS" ] - - ruleNames = [ "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", - "TRANSPOSE", "PERM", "RESHAPE", "RANGE", "LINSPACE", "LOGSPACE", - "TOPK", "BOTK", "PINV", "SUM", "MEAN", "STD", "VAR", "QUARTILE", - "PERCENTILE", "QUANTILE", "DOT", "MOMENT", "ERF", "ERFINV", - "ANY", "ALL", "EDGE", "GAUSSIAN", "MEDIAN", "MODE", "CUMSUM", - "CUMPROD", "TOPK_IND", "BOTK_IND", "CUBIC_EASE", "ELASTIC_EASE", - "SINE_EASE", "SMOOTHERSTEP", "DIST", "REMAP", "COSSIM", - "COUNT", "KEYS", "ENABLE_TRACKING", "DISABLE_TRACKING", - "RESET_TRACKING", "GET_CHANGED_KEYS", "GET_ADDED_KEYS", - "GET_REMOVED_KEYS", "GET_UNCHANGED_KEYS", "REPEAT", "FLATTEN", - "APPEND", "GET_VALUE", "FLOW_APPLY", "BATCH_SHUFFLE", - "MOTION_MASK", "FLOW_TO_IMAGE", "FLOW_MAG", "FLOW_ANG", - "WHERE", "HISTOGRAM", "OVERLAY", "PAD", "CROSS", "MATMUL", - "RIFE", "BNOT", "BITCOUNT", "SHAPE", "BAND", "XOR", "BOR", - "TENSOR", "ADD_KEY", "REMOVE_KEY", "PUSH", "POP", "CLEAR", - "HAS", "GET", "CONCAT", "STACK", "NONZERO", "INT", "FLOAT", - "UPPER", "LOWER", "TRIM", "SPLIT", "JOIN", "SUBSTRING", - "FIND", "REPLACE", "DILATE", "ERODE", "MORPH_OPEN", "MORPH_CLOSE", - "RGB_TO_OKLAB", "RGB_TO_CIELAB", "OKLAB_TO_RGB", "CIELAB_TO_RGB", - "RGB_TO_HSV", "HSV_TO_RGB", "INT_TO_RGB", "RGB_TO_INT", - "INTERPOLATE_LINEAR", "INTERPOLATE_AREA", "INTERPOLATE_NEAREST", - "TEXT_IMAGE", "AS_NESTED", "SVD", "DIAG", "IF", "ELSE", - "WHILE", "FOR", "IN", "BREAK", "CONTINUE", "RETURN", "TIMESTAMP", - "SORT", "ARGSORT", "ARGMIN", "ARGMAX", "SOFTMAX", "SOFTMIN", - "UNIQUE", "FLIP", "STARTSWITH", "ENDSWITH", "SQUEEZE", - "UNSQUEEZE", "ROLL", "COV", "CORR", "ENTROPY", "CROP", - "NONE", "COORDS", "GATHER", "SCATTER", "SCATTER_ADD", - "NOISE", "RAND", "CAUCHY", "EXPONENTIAL", "LOGNORMAL", - "BERNOULLI", "POISSON", "GAMMADIST", "BETADIST", "LAPLACEDIST", - "GUMBELDIST", "WEIBULLDIST", "CHI2DIST", "STUDENTTDIST", - "PERLIN", "CELLULAR", "PLASMA", "RIDGED", "DOMAIN_WARP", - "PLUS", "MINUS", "MULT", "DIV", "MOD", "POW", "LSHIFT", - "RSHIFT", "GE", "GT", "LE", "LT", "EQ", "EQUEALS", "PLUS_EQ", - "MINUS_EQ", "MULT_EQ", "DIV_EQ", "MOD_EQ", "NE", "PIPE", - "LPAREN", "RPAREN", "COMMA", "SEMICOLON", "ARROW", "LBRACKET", - "RBRACKET", "QUESTION", "COLON", "LBRACE", "RBRACE", "NUMBER", - "CONSTANT", "STRING", "VARIABLE", "SL_COMMENT", "ML_COMMENT", - "WS" ] - - grammarFileName = "MathExpr.g4" - - def __init__(self, input=None, output:TextIO = sys.stdout): - super().__init__(input, output) - self.checkVersion("4.13.2") - self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) - self._actions = None - self._predicates = None - - diff --git a/more_math/Parser/MathExprLexer.tokens b/more_math/Parser/MathExprLexer.tokens deleted file mode 100644 index e6c8a42..0000000 --- a/more_math/Parser/MathExprLexer.tokens +++ /dev/null @@ -1,423 +0,0 @@ -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 -TRANSPOSE=50 -PERM=51 -RESHAPE=52 -RANGE=53 -LINSPACE=54 -LOGSPACE=55 -TOPK=56 -BOTK=57 -PINV=58 -SUM=59 -MEAN=60 -STD=61 -VAR=62 -QUARTILE=63 -PERCENTILE=64 -QUANTILE=65 -DOT=66 -MOMENT=67 -ERF=68 -ERFINV=69 -ANY=70 -ALL=71 -EDGE=72 -GAUSSIAN=73 -MEDIAN=74 -MODE=75 -CUMSUM=76 -CUMPROD=77 -TOPK_IND=78 -BOTK_IND=79 -CUBIC_EASE=80 -ELASTIC_EASE=81 -SINE_EASE=82 -SMOOTHERSTEP=83 -DIST=84 -REMAP=85 -COSSIM=86 -COUNT=87 -KEYS=88 -ENABLE_TRACKING=89 -DISABLE_TRACKING=90 -RESET_TRACKING=91 -GET_CHANGED_KEYS=92 -GET_ADDED_KEYS=93 -GET_REMOVED_KEYS=94 -GET_UNCHANGED_KEYS=95 -REPEAT=96 -FLATTEN=97 -APPEND=98 -GET_VALUE=99 -FLOW_APPLY=100 -BATCH_SHUFFLE=101 -MOTION_MASK=102 -FLOW_TO_IMAGE=103 -FLOW_MAG=104 -FLOW_ANG=105 -WHERE=106 -HISTOGRAM=107 -OVERLAY=108 -PAD=109 -CROSS=110 -MATMUL=111 -RIFE=112 -BNOT=113 -BITCOUNT=114 -SHAPE=115 -BAND=116 -XOR=117 -BOR=118 -TENSOR=119 -ADD_KEY=120 -REMOVE_KEY=121 -PUSH=122 -POP=123 -CLEAR=124 -HAS=125 -GET=126 -CONCAT=127 -STACK=128 -NONZERO=129 -INT=130 -FLOAT=131 -UPPER=132 -LOWER=133 -TRIM=134 -SPLIT=135 -JOIN=136 -SUBSTRING=137 -FIND=138 -REPLACE=139 -DILATE=140 -ERODE=141 -MORPH_OPEN=142 -MORPH_CLOSE=143 -RGB_TO_OKLAB=144 -RGB_TO_CIELAB=145 -OKLAB_TO_RGB=146 -CIELAB_TO_RGB=147 -RGB_TO_HSV=148 -HSV_TO_RGB=149 -INT_TO_RGB=150 -RGB_TO_INT=151 -INTERPOLATE_LINEAR=152 -INTERPOLATE_AREA=153 -INTERPOLATE_NEAREST=154 -TEXT_IMAGE=155 -AS_NESTED=156 -SVD=157 -DIAG=158 -IF=159 -ELSE=160 -WHILE=161 -FOR=162 -IN=163 -BREAK=164 -CONTINUE=165 -RETURN=166 -TIMESTAMP=167 -SORT=168 -ARGSORT=169 -ARGMIN=170 -ARGMAX=171 -SOFTMAX=172 -SOFTMIN=173 -UNIQUE=174 -FLIP=175 -STARTSWITH=176 -ENDSWITH=177 -SQUEEZE=178 -UNSQUEEZE=179 -ROLL=180 -COV=181 -CORR=182 -ENTROPY=183 -CROP=184 -NONE=185 -COORDS=186 -GATHER=187 -SCATTER=188 -SCATTER_ADD=189 -NOISE=190 -RAND=191 -CAUCHY=192 -EXPONENTIAL=193 -LOGNORMAL=194 -BERNOULLI=195 -POISSON=196 -GAMMADIST=197 -BETADIST=198 -LAPLACEDIST=199 -GUMBELDIST=200 -WEIBULLDIST=201 -CHI2DIST=202 -STUDENTTDIST=203 -PERLIN=204 -CELLULAR=205 -PLASMA=206 -RIDGED=207 -DOMAIN_WARP=208 -PLUS=209 -MINUS=210 -MULT=211 -DIV=212 -MOD=213 -POW=214 -LSHIFT=215 -RSHIFT=216 -GE=217 -GT=218 -LE=219 -LT=220 -EQ=221 -EQUEALS=222 -PLUS_EQ=223 -MINUS_EQ=224 -MULT_EQ=225 -DIV_EQ=226 -MOD_EQ=227 -NE=228 -PIPE=229 -LPAREN=230 -RPAREN=231 -COMMA=232 -SEMICOLON=233 -ARROW=234 -LBRACKET=235 -RBRACKET=236 -QUESTION=237 -COLON=238 -LBRACE=239 -RBRACE=240 -NUMBER=241 -CONSTANT=242 -STRING=243 -VARIABLE=244 -SL_COMMENT=245 -ML_COMMENT=246 -WS=247 -'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'=53 -'linspace'=54 -'logspace'=55 -'topk'=56 -'botk'=57 -'pinv'=58 -'sum'=59 -'mean'=60 -'std'=61 -'var'=62 -'quantile'=65 -'dot'=66 -'moment'=67 -'erf'=68 -'erfinv'=69 -'any'=70 -'all'=71 -'edge'=72 -'median'=74 -'mode'=75 -'cumsum'=76 -'cumprod'=77 -'smootherstep'=83 -'remap'=85 -'keys'=88 -'repeat'=96 -'flatten'=97 -'append'=98 -'get_value'=99 -'flow_apply'=100 -'motion_mask'=102 -'flow_to_image'=103 -'where'=106 -'overlay'=108 -'pad'=109 -'cross'=110 -'matmul'=111 -'rife'=112 -'shape'=115 -'tensor'=119 -'add_key'=120 -'stack_push'=122 -'stack_pop'=123 -'stack_clear'=124 -'stack_has'=125 -'stack_get'=126 -'stack'=128 -'nonzero'=129 -'int'=130 -'float'=131 -'upper'=132 -'lower'=133 -'trim'=134 -'split'=135 -'join'=136 -'find'=138 -'replace'=139 -'dilate'=140 -'erode'=141 -'morph_open'=142 -'morph_close'=143 -'rgb_to_oklab'=144 -'rgb_to_cielab'=145 -'oklab_to_rgb'=146 -'cielab_to_rgb'=147 -'rgb_to_hsv'=148 -'hsv_to_rgb'=149 -'int_to_rgb'=150 -'rgb_to_int'=151 -'interpolate_linear'=152 -'interpolate_area'=153 -'text_image'=155 -'if'=159 -'else'=160 -'while'=161 -'for'=162 -'in'=163 -'break'=164 -'continue'=165 -'return'=166 -'sort'=168 -'argsort'=169 -'argmin'=170 -'argmax'=171 -'softmax'=172 -'softmin'=173 -'unique'=174 -'flip'=175 -'startswith'=176 -'endswith'=177 -'squeeze'=178 -'unsqueeze'=179 -'roll'=180 -'cov'=181 -'entropy'=183 -'crop'=184 -'gather'=187 -'scatter'=188 -'scatter_add'=189 -'+'=209 -'-'=210 -'*'=211 -'/'=212 -'%'=213 -'^'=214 -'<<'=215 -'>>'=216 -'>='=217 -'>'=218 -'<='=219 -'<'=220 -'=='=221 -'='=222 -'+='=223 -'-='=224 -'*='=225 -'/='=226 -'%='=227 -'!='=228 -'|'=229 -'('=230 -')'=231 -','=232 -';'=233 -'->'=234 -'['=235 -']'=236 -'?'=237 -':'=238 -'{'=239 -'}'=240 diff --git a/more_math/Parser/MathExprListener.py b/more_math/Parser/MathExprListener.py deleted file mode 100644 index 5faa047..0000000 --- a/more_math/Parser/MathExprListener.py +++ /dev/null @@ -1,2523 +0,0 @@ -# Generated from MathExpr.g4 by ANTLR 4.13.2 -from antlr4 import * -if "." in __name__: - from .MathExprParser import MathExprParser -else: - from MathExprParser import MathExprParser - -# This class defines a complete listener for a parse tree produced by MathExprParser. -class MathExprListener(ParseTreeListener): - - # Enter a parse tree produced by MathExprParser#start. - def enterStart(self, ctx:MathExprParser.StartContext): - pass - - # Exit a parse tree produced by MathExprParser#start. - def exitStart(self, ctx:MathExprParser.StartContext): - pass - - - # Enter a parse tree produced by MathExprParser#FunctionDef. - def enterFunctionDef(self, ctx:MathExprParser.FunctionDefContext): - pass - - # Exit a parse tree produced by MathExprParser#FunctionDef. - def exitFunctionDef(self, ctx:MathExprParser.FunctionDefContext): - pass - - - # Enter a parse tree produced by MathExprParser#varDef. - def enterVarDef(self, ctx:MathExprParser.VarDefContext): - pass - - # Exit a parse tree produced by MathExprParser#varDef. - def exitVarDef(self, ctx:MathExprParser.VarDefContext): - pass - - - # Enter a parse tree produced by MathExprParser#paramList. - def enterParamList(self, ctx:MathExprParser.ParamListContext): - pass - - # Exit a parse tree produced by MathExprParser#paramList. - def exitParamList(self, ctx:MathExprParser.ParamListContext): - pass - - - # Enter a parse tree produced by MathExprParser#IfStatement. - def enterIfStatement(self, ctx:MathExprParser.IfStatementContext): - pass - - # Exit a parse tree produced by MathExprParser#IfStatement. - def exitIfStatement(self, ctx:MathExprParser.IfStatementContext): - pass - - - # Enter a parse tree produced by MathExprParser#WhileStatement. - def enterWhileStatement(self, ctx:MathExprParser.WhileStatementContext): - pass - - # Exit a parse tree produced by MathExprParser#WhileStatement. - def exitWhileStatement(self, ctx:MathExprParser.WhileStatementContext): - pass - - - # Enter a parse tree produced by MathExprParser#BlockStatement. - def enterBlockStatement(self, ctx:MathExprParser.BlockStatementContext): - pass - - # Exit a parse tree produced by MathExprParser#BlockStatement. - def exitBlockStatement(self, ctx:MathExprParser.BlockStatementContext): - pass - - - # Enter a parse tree produced by MathExprParser#BreakStatement. - def enterBreakStatement(self, ctx:MathExprParser.BreakStatementContext): - pass - - # Exit a parse tree produced by MathExprParser#BreakStatement. - def exitBreakStatement(self, ctx:MathExprParser.BreakStatementContext): - pass - - - # Enter a parse tree produced by MathExprParser#ContinueStatement. - def enterContinueStatement(self, ctx:MathExprParser.ContinueStatementContext): - pass - - # Exit a parse tree produced by MathExprParser#ContinueStatement. - def exitContinueStatement(self, ctx:MathExprParser.ContinueStatementContext): - pass - - - # Enter a parse tree produced by MathExprParser#ReturnStatement. - def enterReturnStatement(self, ctx:MathExprParser.ReturnStatementContext): - pass - - # Exit a parse tree produced by MathExprParser#ReturnStatement. - def exitReturnStatement(self, ctx:MathExprParser.ReturnStatementContext): - pass - - - # Enter a parse tree produced by MathExprParser#VarDefStmt. - def enterVarDefStmt(self, ctx:MathExprParser.VarDefStmtContext): - pass - - # Exit a parse tree produced by MathExprParser#VarDefStmt. - def exitVarDefStmt(self, ctx:MathExprParser.VarDefStmtContext): - pass - - - # Enter a parse tree produced by MathExprParser#ForStatement. - def enterForStatement(self, ctx:MathExprParser.ForStatementContext): - pass - - # Exit a parse tree produced by MathExprParser#ForStatement. - def exitForStatement(self, ctx:MathExprParser.ForStatementContext): - pass - - - # Enter a parse tree produced by MathExprParser#ExprStatement. - def enterExprStatement(self, ctx:MathExprParser.ExprStatementContext): - pass - - # Exit a parse tree produced by MathExprParser#ExprStatement. - def exitExprStatement(self, ctx:MathExprParser.ExprStatementContext): - pass - - - # Enter a parse tree produced by MathExprParser#ifStmt. - def enterIfStmt(self, ctx:MathExprParser.IfStmtContext): - pass - - # Exit a parse tree produced by MathExprParser#ifStmt. - def exitIfStmt(self, ctx:MathExprParser.IfStmtContext): - pass - - - # Enter a parse tree produced by MathExprParser#whileStmt. - def enterWhileStmt(self, ctx:MathExprParser.WhileStmtContext): - pass - - # Exit a parse tree produced by MathExprParser#whileStmt. - def exitWhileStmt(self, ctx:MathExprParser.WhileStmtContext): - pass - - - # Enter a parse tree produced by MathExprParser#forStmt. - def enterForStmt(self, ctx:MathExprParser.ForStmtContext): - pass - - # Exit a parse tree produced by MathExprParser#forStmt. - def exitForStmt(self, ctx:MathExprParser.ForStmtContext): - pass - - - # Enter a parse tree produced by MathExprParser#block. - def enterBlock(self, ctx:MathExprParser.BlockContext): - pass - - # Exit a parse tree produced by MathExprParser#block. - def exitBlock(self, ctx:MathExprParser.BlockContext): - pass - - - # Enter a parse tree produced by MathExprParser#dictEntryList. - def enterDictEntryList(self, ctx:MathExprParser.DictEntryListContext): - pass - - # Exit a parse tree produced by MathExprParser#dictEntryList. - def exitDictEntryList(self, ctx:MathExprParser.DictEntryListContext): - pass - - - # Enter a parse tree produced by MathExprParser#dictEntry. - def enterDictEntry(self, ctx:MathExprParser.DictEntryContext): - pass - - # Exit a parse tree produced by MathExprParser#dictEntry. - def exitDictEntry(self, ctx:MathExprParser.DictEntryContext): - pass - - - # Enter a parse tree produced by MathExprParser#breakStmt. - def enterBreakStmt(self, ctx:MathExprParser.BreakStmtContext): - pass - - # Exit a parse tree produced by MathExprParser#breakStmt. - def exitBreakStmt(self, ctx:MathExprParser.BreakStmtContext): - pass - - - # Enter a parse tree produced by MathExprParser#continueStmt. - def enterContinueStmt(self, ctx:MathExprParser.ContinueStmtContext): - pass - - # Exit a parse tree produced by MathExprParser#continueStmt. - def exitContinueStmt(self, ctx:MathExprParser.ContinueStmtContext): - pass - - - # Enter a parse tree produced by MathExprParser#returnStmt. - def enterReturnStmt(self, ctx:MathExprParser.ReturnStmtContext): - pass - - # Exit a parse tree produced by MathExprParser#returnStmt. - def exitReturnStmt(self, ctx:MathExprParser.ReturnStmtContext): - pass - - - # Enter a parse tree produced by MathExprParser#expr. - def enterExpr(self, ctx:MathExprParser.ExprContext): - pass - - # Exit a parse tree produced by MathExprParser#expr. - def exitExpr(self, ctx:MathExprParser.ExprContext): - pass - - - # Enter a parse tree produced by MathExprParser#TernaryExp. - def enterTernaryExp(self, ctx:MathExprParser.TernaryExpContext): - pass - - # Exit a parse tree produced by MathExprParser#TernaryExp. - def exitTernaryExp(self, ctx:MathExprParser.TernaryExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ToRelational. - def enterToRelational(self, ctx:MathExprParser.ToRelationalContext): - pass - - # Exit a parse tree produced by MathExprParser#ToRelational. - def exitToRelational(self, ctx:MathExprParser.ToRelationalContext): - pass - - - # Enter a parse tree produced by MathExprParser#EqExp. - def enterEqExp(self, ctx:MathExprParser.EqExpContext): - pass - - # Exit a parse tree produced by MathExprParser#EqExp. - def exitEqExp(self, ctx:MathExprParser.EqExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#NeExp. - def enterNeExp(self, ctx:MathExprParser.NeExpContext): - pass - - # Exit a parse tree produced by MathExprParser#NeExp. - def exitNeExp(self, ctx:MathExprParser.NeExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ToShift. - def enterToShift(self, ctx:MathExprParser.ToShiftContext): - pass - - # Exit a parse tree produced by MathExprParser#ToShift. - def exitToShift(self, ctx:MathExprParser.ToShiftContext): - pass - - - # Enter a parse tree produced by MathExprParser#LtExp. - def enterLtExp(self, ctx:MathExprParser.LtExpContext): - pass - - # Exit a parse tree produced by MathExprParser#LtExp. - def exitLtExp(self, ctx:MathExprParser.LtExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#GeExp. - def enterGeExp(self, ctx:MathExprParser.GeExpContext): - pass - - # Exit a parse tree produced by MathExprParser#GeExp. - def exitGeExp(self, ctx:MathExprParser.GeExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#LeExp. - def enterLeExp(self, ctx:MathExprParser.LeExpContext): - pass - - # Exit a parse tree produced by MathExprParser#LeExp. - def exitLeExp(self, ctx:MathExprParser.LeExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#GtExp. - def enterGtExp(self, ctx:MathExprParser.GtExpContext): - pass - - # Exit a parse tree produced by MathExprParser#GtExp. - def exitGtExp(self, ctx:MathExprParser.GtExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#AddExp. - def enterAddExp(self, ctx:MathExprParser.AddExpContext): - pass - - # Exit a parse tree produced by MathExprParser#AddExp. - def exitAddExp(self, ctx:MathExprParser.AddExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ToMul. - def enterToMul(self, ctx:MathExprParser.ToMulContext): - pass - - # Exit a parse tree produced by MathExprParser#ToMul. - def exitToMul(self, ctx:MathExprParser.ToMulContext): - pass - - - # Enter a parse tree produced by MathExprParser#SubExp. - def enterSubExp(self, ctx:MathExprParser.SubExpContext): - pass - - # Exit a parse tree produced by MathExprParser#SubExp. - def exitSubExp(self, ctx:MathExprParser.SubExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#MulExp. - def enterMulExp(self, ctx:MathExprParser.MulExpContext): - pass - - # Exit a parse tree produced by MathExprParser#MulExp. - def exitMulExp(self, ctx:MathExprParser.MulExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ModExp. - def enterModExp(self, ctx:MathExprParser.ModExpContext): - pass - - # Exit a parse tree produced by MathExprParser#ModExp. - def exitModExp(self, ctx:MathExprParser.ModExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#DivExp. - def enterDivExp(self, ctx:MathExprParser.DivExpContext): - pass - - # Exit a parse tree produced by MathExprParser#DivExp. - def exitDivExp(self, ctx:MathExprParser.DivExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ToPow. - def enterToPow(self, ctx:MathExprParser.ToPowContext): - pass - - # Exit a parse tree produced by MathExprParser#ToPow. - def exitToPow(self, ctx:MathExprParser.ToPowContext): - pass - - - # Enter a parse tree produced by MathExprParser#ToAdd. - def enterToAdd(self, ctx:MathExprParser.ToAddContext): - pass - - # Exit a parse tree produced by MathExprParser#ToAdd. - def exitToAdd(self, ctx:MathExprParser.ToAddContext): - pass - - - # Enter a parse tree produced by MathExprParser#RShiftExp. - def enterRShiftExp(self, ctx:MathExprParser.RShiftExpContext): - pass - - # Exit a parse tree produced by MathExprParser#RShiftExp. - def exitRShiftExp(self, ctx:MathExprParser.RShiftExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#LShiftExp. - def enterLShiftExp(self, ctx:MathExprParser.LShiftExpContext): - pass - - # Exit a parse tree produced by MathExprParser#LShiftExp. - def exitLShiftExp(self, ctx:MathExprParser.LShiftExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#PowExp. - def enterPowExp(self, ctx:MathExprParser.PowExpContext): - pass - - # Exit a parse tree produced by MathExprParser#PowExp. - def exitPowExp(self, ctx:MathExprParser.PowExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ToUnary. - def enterToUnary(self, ctx:MathExprParser.ToUnaryContext): - pass - - # Exit a parse tree produced by MathExprParser#ToUnary. - def exitToUnary(self, ctx:MathExprParser.ToUnaryContext): - pass - - - # Enter a parse tree produced by MathExprParser#UnaryPlus. - def enterUnaryPlus(self, ctx:MathExprParser.UnaryPlusContext): - pass - - # Exit a parse tree produced by MathExprParser#UnaryPlus. - def exitUnaryPlus(self, ctx:MathExprParser.UnaryPlusContext): - pass - - - # Enter a parse tree produced by MathExprParser#UnaryMinus. - def enterUnaryMinus(self, ctx:MathExprParser.UnaryMinusContext): - pass - - # Exit a parse tree produced by MathExprParser#UnaryMinus. - def exitUnaryMinus(self, ctx:MathExprParser.UnaryMinusContext): - pass - - - # Enter a parse tree produced by MathExprParser#ToIndex. - def enterToIndex(self, ctx:MathExprParser.ToIndexContext): - pass - - # Exit a parse tree produced by MathExprParser#ToIndex. - def exitToIndex(self, ctx:MathExprParser.ToIndexContext): - pass - - - # Enter a parse tree produced by MathExprParser#IndexExp. - def enterIndexExp(self, ctx:MathExprParser.IndexExpContext): - pass - - # Exit a parse tree produced by MathExprParser#IndexExp. - def exitIndexExp(self, ctx:MathExprParser.IndexExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ToAtom. - def enterToAtom(self, ctx:MathExprParser.ToAtomContext): - pass - - # Exit a parse tree produced by MathExprParser#ToAtom. - def exitToAtom(self, ctx:MathExprParser.ToAtomContext): - pass - - - # Enter a parse tree produced by MathExprParser#SliceWithStep. - def enterSliceWithStep(self, ctx:MathExprParser.SliceWithStepContext): - pass - - # Exit a parse tree produced by MathExprParser#SliceWithStep. - def exitSliceWithStep(self, ctx:MathExprParser.SliceWithStepContext): - pass - - - # Enter a parse tree produced by MathExprParser#Slice. - def enterSlice(self, ctx:MathExprParser.SliceContext): - pass - - # Exit a parse tree produced by MathExprParser#Slice. - def exitSlice(self, ctx:MathExprParser.SliceContext): - pass - - - # Enter a parse tree produced by MathExprParser#SliceColonStartStep. - def enterSliceColonStartStep(self, ctx:MathExprParser.SliceColonStartStepContext): - pass - - # Exit a parse tree produced by MathExprParser#SliceColonStartStep. - def exitSliceColonStartStep(self, ctx:MathExprParser.SliceColonStartStepContext): - pass - - - # Enter a parse tree produced by MathExprParser#SliceColonStart. - def enterSliceColonStart(self, ctx:MathExprParser.SliceColonStartContext): - pass - - # Exit a parse tree produced by MathExprParser#SliceColonStart. - def exitSliceColonStart(self, ctx:MathExprParser.SliceColonStartContext): - pass - - - # Enter a parse tree produced by MathExprParser#SliceExprColonStep. - def enterSliceExprColonStep(self, ctx:MathExprParser.SliceExprColonStepContext): - pass - - # Exit a parse tree produced by MathExprParser#SliceExprColonStep. - def exitSliceExprColonStep(self, ctx:MathExprParser.SliceExprColonStepContext): - pass - - - # Enter a parse tree produced by MathExprParser#SliceExpr. - def enterSliceExpr(self, ctx:MathExprParser.SliceExprContext): - pass - - # Exit a parse tree produced by MathExprParser#SliceExpr. - def exitSliceExpr(self, ctx:MathExprParser.SliceExprContext): - pass - - - # Enter a parse tree produced by MathExprParser#SliceColonStep. - def enterSliceColonStep(self, ctx:MathExprParser.SliceColonStepContext): - pass - - # Exit a parse tree produced by MathExprParser#SliceColonStep. - def exitSliceColonStep(self, ctx:MathExprParser.SliceColonStepContext): - pass - - - # Enter a parse tree produced by MathExprParser#SliceOnly. - def enterSliceOnly(self, ctx:MathExprParser.SliceOnlyContext): - pass - - # Exit a parse tree produced by MathExprParser#SliceOnly. - def exitSliceOnly(self, ctx:MathExprParser.SliceOnlyContext): - pass - - - # Enter a parse tree produced by MathExprParser#IndexOnly. - def enterIndexOnly(self, ctx:MathExprParser.IndexOnlyContext): - pass - - # Exit a parse tree produced by MathExprParser#IndexOnly. - def exitIndexOnly(self, ctx:MathExprParser.IndexOnlyContext): - pass - - - # Enter a parse tree produced by MathExprParser#Func0Exp. - def enterFunc0Exp(self, ctx:MathExprParser.Func0ExpContext): - pass - - # Exit a parse tree produced by MathExprParser#Func0Exp. - def exitFunc0Exp(self, ctx:MathExprParser.Func0ExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#Func1Exp. - def enterFunc1Exp(self, ctx:MathExprParser.Func1ExpContext): - pass - - # Exit a parse tree produced by MathExprParser#Func1Exp. - def exitFunc1Exp(self, ctx:MathExprParser.Func1ExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#Func2Exp. - def enterFunc2Exp(self, ctx:MathExprParser.Func2ExpContext): - pass - - # Exit a parse tree produced by MathExprParser#Func2Exp. - def exitFunc2Exp(self, ctx:MathExprParser.Func2ExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#Func3Exp. - def enterFunc3Exp(self, ctx:MathExprParser.Func3ExpContext): - pass - - # Exit a parse tree produced by MathExprParser#Func3Exp. - def exitFunc3Exp(self, ctx:MathExprParser.Func3ExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#Func4Exp. - def enterFunc4Exp(self, ctx:MathExprParser.Func4ExpContext): - pass - - # Exit a parse tree produced by MathExprParser#Func4Exp. - def exitFunc4Exp(self, ctx:MathExprParser.Func4ExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#Func5Exp. - def enterFunc5Exp(self, ctx:MathExprParser.Func5ExpContext): - pass - - # Exit a parse tree produced by MathExprParser#Func5Exp. - def exitFunc5Exp(self, ctx:MathExprParser.Func5ExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#FuncNExp. - def enterFuncNExp(self, ctx:MathExprParser.FuncNExpContext): - pass - - # Exit a parse tree produced by MathExprParser#FuncNExp. - def exitFuncNExp(self, ctx:MathExprParser.FuncNExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#FuncNoiseExp. - def enterFuncNoiseExp(self, ctx:MathExprParser.FuncNoiseExpContext): - pass - - # Exit a parse tree produced by MathExprParser#FuncNoiseExp. - def exitFuncNoiseExp(self, ctx:MathExprParser.FuncNoiseExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#VariableExp. - def enterVariableExp(self, ctx:MathExprParser.VariableExpContext): - pass - - # Exit a parse tree produced by MathExprParser#VariableExp. - def exitVariableExp(self, ctx:MathExprParser.VariableExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#NumberExp. - def enterNumberExp(self, ctx:MathExprParser.NumberExpContext): - pass - - # Exit a parse tree produced by MathExprParser#NumberExp. - def exitNumberExp(self, ctx:MathExprParser.NumberExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ConstantExp. - def enterConstantExp(self, ctx:MathExprParser.ConstantExpContext): - pass - - # Exit a parse tree produced by MathExprParser#ConstantExp. - def exitConstantExp(self, ctx:MathExprParser.ConstantExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#StringExp. - def enterStringExp(self, ctx:MathExprParser.StringExpContext): - pass - - # Exit a parse tree produced by MathExprParser#StringExp. - def exitStringExp(self, ctx:MathExprParser.StringExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#LambdaExp. - def enterLambdaExp(self, ctx:MathExprParser.LambdaExpContext): - pass - - # Exit a parse tree produced by MathExprParser#LambdaExp. - def exitLambdaExp(self, ctx:MathExprParser.LambdaExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ParenExp. - def enterParenExp(self, ctx:MathExprParser.ParenExpContext): - pass - - # Exit a parse tree produced by MathExprParser#ParenExp. - def exitParenExp(self, ctx:MathExprParser.ParenExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#AbsExp. - def enterAbsExp(self, ctx:MathExprParser.AbsExpContext): - pass - - # Exit a parse tree produced by MathExprParser#AbsExp. - def exitAbsExp(self, ctx:MathExprParser.AbsExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ListExp. - def enterListExp(self, ctx:MathExprParser.ListExpContext): - pass - - # Exit a parse tree produced by MathExprParser#ListExp. - def exitListExp(self, ctx:MathExprParser.ListExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#DictExp. - def enterDictExp(self, ctx:MathExprParser.DictExpContext): - pass - - # Exit a parse tree produced by MathExprParser#DictExp. - def exitDictExp(self, ctx:MathExprParser.DictExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#CallExp. - def enterCallExp(self, ctx:MathExprParser.CallExpContext): - pass - - # Exit a parse tree produced by MathExprParser#CallExp. - def exitCallExp(self, ctx:MathExprParser.CallExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#NoneExp. - def enterNoneExp(self, ctx:MathExprParser.NoneExpContext): - pass - - # Exit a parse tree produced by MathExprParser#NoneExp. - def exitNoneExp(self, ctx:MathExprParser.NoneExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#BreakExp. - def enterBreakExp(self, ctx:MathExprParser.BreakExpContext): - pass - - # Exit a parse tree produced by MathExprParser#BreakExp. - def exitBreakExp(self, ctx:MathExprParser.BreakExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#ContinueExp. - def enterContinueExp(self, ctx:MathExprParser.ContinueExpContext): - pass - - # Exit a parse tree produced by MathExprParser#ContinueExp. - def exitContinueExp(self, ctx:MathExprParser.ContinueExpContext): - pass - - - # Enter a parse tree produced by MathExprParser#exprList. - def enterExprList(self, ctx:MathExprParser.ExprListContext): - pass - - # Exit a parse tree produced by MathExprParser#exprList. - def exitExprList(self, ctx:MathExprParser.ExprListContext): - pass - - - # Enter a parse tree produced by MathExprParser#TimestampFunc. - def enterTimestampFunc(self, ctx:MathExprParser.TimestampFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TimestampFunc. - def exitTimestampFunc(self, ctx:MathExprParser.TimestampFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SinFunc. - def enterSinFunc(self, ctx:MathExprParser.SinFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SinFunc. - def exitSinFunc(self, ctx:MathExprParser.SinFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CosFunc. - def enterCosFunc(self, ctx:MathExprParser.CosFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CosFunc. - def exitCosFunc(self, ctx:MathExprParser.CosFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TanFunc. - def enterTanFunc(self, ctx:MathExprParser.TanFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TanFunc. - def exitTanFunc(self, ctx:MathExprParser.TanFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AsinFunc. - def enterAsinFunc(self, ctx:MathExprParser.AsinFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AsinFunc. - def exitAsinFunc(self, ctx:MathExprParser.AsinFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AcosFunc. - def enterAcosFunc(self, ctx:MathExprParser.AcosFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AcosFunc. - def exitAcosFunc(self, ctx:MathExprParser.AcosFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AtanFunc. - def enterAtanFunc(self, ctx:MathExprParser.AtanFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AtanFunc. - def exitAtanFunc(self, ctx:MathExprParser.AtanFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SinhFunc. - def enterSinhFunc(self, ctx:MathExprParser.SinhFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SinhFunc. - def exitSinhFunc(self, ctx:MathExprParser.SinhFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CoshFunc. - def enterCoshFunc(self, ctx:MathExprParser.CoshFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CoshFunc. - def exitCoshFunc(self, ctx:MathExprParser.CoshFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TanhFunc. - def enterTanhFunc(self, ctx:MathExprParser.TanhFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TanhFunc. - def exitTanhFunc(self, ctx:MathExprParser.TanhFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AsinhFunc. - def enterAsinhFunc(self, ctx:MathExprParser.AsinhFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AsinhFunc. - def exitAsinhFunc(self, ctx:MathExprParser.AsinhFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AcoshFunc. - def enterAcoshFunc(self, ctx:MathExprParser.AcoshFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AcoshFunc. - def exitAcoshFunc(self, ctx:MathExprParser.AcoshFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AtanhFunc. - def enterAtanhFunc(self, ctx:MathExprParser.AtanhFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AtanhFunc. - def exitAtanhFunc(self, ctx:MathExprParser.AtanhFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AbsFunc. - def enterAbsFunc(self, ctx:MathExprParser.AbsFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AbsFunc. - def exitAbsFunc(self, ctx:MathExprParser.AbsFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SqrtFunc. - def enterSqrtFunc(self, ctx:MathExprParser.SqrtFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SqrtFunc. - def exitSqrtFunc(self, ctx:MathExprParser.SqrtFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#LnFunc. - def enterLnFunc(self, ctx:MathExprParser.LnFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#LnFunc. - def exitLnFunc(self, ctx:MathExprParser.LnFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#LogFunc. - def enterLogFunc(self, ctx:MathExprParser.LogFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#LogFunc. - def exitLogFunc(self, ctx:MathExprParser.LogFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ExpFunc. - def enterExpFunc(self, ctx:MathExprParser.ExpFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ExpFunc. - def exitExpFunc(self, ctx:MathExprParser.ExpFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TNormFunc. - def enterTNormFunc(self, ctx:MathExprParser.TNormFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TNormFunc. - def exitTNormFunc(self, ctx:MathExprParser.TNormFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FloorFunc. - def enterFloorFunc(self, ctx:MathExprParser.FloorFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FloorFunc. - def exitFloorFunc(self, ctx:MathExprParser.FloorFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CeilFunc. - def enterCeilFunc(self, ctx:MathExprParser.CeilFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CeilFunc. - def exitCeilFunc(self, ctx:MathExprParser.CeilFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RoundFunc. - def enterRoundFunc(self, ctx:MathExprParser.RoundFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RoundFunc. - def exitRoundFunc(self, ctx:MathExprParser.RoundFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GammaFunc. - def enterGammaFunc(self, ctx:MathExprParser.GammaFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GammaFunc. - def exitGammaFunc(self, ctx:MathExprParser.GammaFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#sigmoidFunc. - def enterSigmoidFunc(self, ctx:MathExprParser.SigmoidFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#sigmoidFunc. - def exitSigmoidFunc(self, ctx:MathExprParser.SigmoidFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#anglFunc. - def enterAnglFunc(self, ctx:MathExprParser.AnglFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#anglFunc. - def exitAnglFunc(self, ctx:MathExprParser.AnglFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#printFunc. - def enterPrintFunc(self, ctx:MathExprParser.PrintFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#printFunc. - def exitPrintFunc(self, ctx:MathExprParser.PrintFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FractFunc. - def enterFractFunc(self, ctx:MathExprParser.FractFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FractFunc. - def exitFractFunc(self, ctx:MathExprParser.FractFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ReluFunc. - def enterReluFunc(self, ctx:MathExprParser.ReluFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ReluFunc. - def exitReluFunc(self, ctx:MathExprParser.ReluFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SoftplusFunc. - def enterSoftplusFunc(self, ctx:MathExprParser.SoftplusFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SoftplusFunc. - def exitSoftplusFunc(self, ctx:MathExprParser.SoftplusFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GeluFunc. - def enterGeluFunc(self, ctx:MathExprParser.GeluFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GeluFunc. - def exitGeluFunc(self, ctx:MathExprParser.GeluFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SignFunc. - def enterSignFunc(self, ctx:MathExprParser.SignFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SignFunc. - def exitSignFunc(self, ctx:MathExprParser.SignFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PrintShapeFunc. - def enterPrintShapeFunc(self, ctx:MathExprParser.PrintShapeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PrintShapeFunc. - def exitPrintShapeFunc(self, ctx:MathExprParser.PrintShapeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PinvFunc. - def enterPinvFunc(self, ctx:MathExprParser.PinvFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PinvFunc. - def exitPinvFunc(self, ctx:MathExprParser.PinvFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SumFunc. - def enterSumFunc(self, ctx:MathExprParser.SumFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SumFunc. - def exitSumFunc(self, ctx:MathExprParser.SumFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#MeanFunc. - def enterMeanFunc(self, ctx:MathExprParser.MeanFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#MeanFunc. - def exitMeanFunc(self, ctx:MathExprParser.MeanFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#StdFunc. - def enterStdFunc(self, ctx:MathExprParser.StdFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#StdFunc. - def exitStdFunc(self, ctx:MathExprParser.StdFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#VarFunc. - def enterVarFunc(self, ctx:MathExprParser.VarFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#VarFunc. - def exitVarFunc(self, ctx:MathExprParser.VarFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SortFunc. - def enterSortFunc(self, ctx:MathExprParser.SortFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SortFunc. - def exitSortFunc(self, ctx:MathExprParser.SortFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AnyFunc. - def enterAnyFunc(self, ctx:MathExprParser.AnyFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AnyFunc. - def exitAnyFunc(self, ctx:MathExprParser.AnyFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AllFunc. - def enterAllFunc(self, ctx:MathExprParser.AllFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AllFunc. - def exitAllFunc(self, ctx:MathExprParser.AllFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#EdgeFunc. - def enterEdgeFunc(self, ctx:MathExprParser.EdgeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#EdgeFunc. - def exitEdgeFunc(self, ctx:MathExprParser.EdgeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#MedianFunc. - def enterMedianFunc(self, ctx:MathExprParser.MedianFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#MedianFunc. - def exitMedianFunc(self, ctx:MathExprParser.MedianFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ModeFunc. - def enterModeFunc(self, ctx:MathExprParser.ModeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ModeFunc. - def exitModeFunc(self, ctx:MathExprParser.ModeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CumsumFunc. - def enterCumsumFunc(self, ctx:MathExprParser.CumsumFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CumsumFunc. - def exitCumsumFunc(self, ctx:MathExprParser.CumsumFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CountFunc. - def enterCountFunc(self, ctx:MathExprParser.CountFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CountFunc. - def exitCountFunc(self, ctx:MathExprParser.CountFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#KeysFunc. - def enterKeysFunc(self, ctx:MathExprParser.KeysFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#KeysFunc. - def exitKeysFunc(self, ctx:MathExprParser.KeysFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#EnableTrackingFunc. - def enterEnableTrackingFunc(self, ctx:MathExprParser.EnableTrackingFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#EnableTrackingFunc. - def exitEnableTrackingFunc(self, ctx:MathExprParser.EnableTrackingFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#DisableTrackingFunc. - def enterDisableTrackingFunc(self, ctx:MathExprParser.DisableTrackingFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#DisableTrackingFunc. - def exitDisableTrackingFunc(self, ctx:MathExprParser.DisableTrackingFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ResetTrackingFunc. - def enterResetTrackingFunc(self, ctx:MathExprParser.ResetTrackingFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ResetTrackingFunc. - def exitResetTrackingFunc(self, ctx:MathExprParser.ResetTrackingFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RepeatFunc. - def enterRepeatFunc(self, ctx:MathExprParser.RepeatFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RepeatFunc. - def exitRepeatFunc(self, ctx:MathExprParser.RepeatFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CumprodFunc. - def enterCumprodFunc(self, ctx:MathExprParser.CumprodFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CumprodFunc. - def exitCumprodFunc(self, ctx:MathExprParser.CumprodFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PopFunc. - def enterPopFunc(self, ctx:MathExprParser.PopFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PopFunc. - def exitPopFunc(self, ctx:MathExprParser.PopFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ClearFunc. - def enterClearFunc(self, ctx:MathExprParser.ClearFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ClearFunc. - def exitClearFunc(self, ctx:MathExprParser.ClearFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#HasFunc. - def enterHasFunc(self, ctx:MathExprParser.HasFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#HasFunc. - def exitHasFunc(self, ctx:MathExprParser.HasFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GetFunc. - def enterGetFunc(self, ctx:MathExprParser.GetFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GetFunc. - def exitGetFunc(self, ctx:MathExprParser.GetFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ArgsortFunc. - def enterArgsortFunc(self, ctx:MathExprParser.ArgsortFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ArgsortFunc. - def exitArgsortFunc(self, ctx:MathExprParser.ArgsortFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ArgminFunc. - def enterArgminFunc(self, ctx:MathExprParser.ArgminFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ArgminFunc. - def exitArgminFunc(self, ctx:MathExprParser.ArgminFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ArgmaxFunc. - def enterArgmaxFunc(self, ctx:MathExprParser.ArgmaxFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ArgmaxFunc. - def exitArgmaxFunc(self, ctx:MathExprParser.ArgmaxFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SoftmaxFunc. - def enterSoftmaxFunc(self, ctx:MathExprParser.SoftmaxFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SoftmaxFunc. - def exitSoftmaxFunc(self, ctx:MathExprParser.SoftmaxFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SoftminFunc. - def enterSoftminFunc(self, ctx:MathExprParser.SoftminFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SoftminFunc. - def exitSoftminFunc(self, ctx:MathExprParser.SoftminFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ErfFunc. - def enterErfFunc(self, ctx:MathExprParser.ErfFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ErfFunc. - def exitErfFunc(self, ctx:MathExprParser.ErfFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ErfinvFunc. - def enterErfinvFunc(self, ctx:MathExprParser.ErfinvFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ErfinvFunc. - def exitErfinvFunc(self, ctx:MathExprParser.ErfinvFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#UniqueFunc. - def enterUniqueFunc(self, ctx:MathExprParser.UniqueFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#UniqueFunc. - def exitUniqueFunc(self, ctx:MathExprParser.UniqueFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FlattenFunc. - def enterFlattenFunc(self, ctx:MathExprParser.FlattenFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FlattenFunc. - def exitFlattenFunc(self, ctx:MathExprParser.FlattenFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#MotionMaskFunc. - def enterMotionMaskFunc(self, ctx:MathExprParser.MotionMaskFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#MotionMaskFunc. - def exitMotionMaskFunc(self, ctx:MathExprParser.MotionMaskFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FlowToImageFunc. - def enterFlowToImageFunc(self, ctx:MathExprParser.FlowToImageFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FlowToImageFunc. - def exitFlowToImageFunc(self, ctx:MathExprParser.FlowToImageFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BitNotFunc. - def enterBitNotFunc(self, ctx:MathExprParser.BitNotFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BitNotFunc. - def exitBitNotFunc(self, ctx:MathExprParser.BitNotFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BitCountFunc. - def enterBitCountFunc(self, ctx:MathExprParser.BitCountFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BitCountFunc. - def exitBitCountFunc(self, ctx:MathExprParser.BitCountFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ShapeFunc. - def enterShapeFunc(self, ctx:MathExprParser.ShapeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ShapeFunc. - def exitShapeFunc(self, ctx:MathExprParser.ShapeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#UpperFunc. - def enterUpperFunc(self, ctx:MathExprParser.UpperFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#UpperFunc. - def exitUpperFunc(self, ctx:MathExprParser.UpperFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#LowerFunc. - def enterLowerFunc(self, ctx:MathExprParser.LowerFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#LowerFunc. - def exitLowerFunc(self, ctx:MathExprParser.LowerFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TrimFunc. - def enterTrimFunc(self, ctx:MathExprParser.TrimFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TrimFunc. - def exitTrimFunc(self, ctx:MathExprParser.TrimFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#EntropyFunc. - def enterEntropyFunc(self, ctx:MathExprParser.EntropyFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#EntropyFunc. - def exitEntropyFunc(self, ctx:MathExprParser.EntropyFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SfftFunc. - def enterSfftFunc(self, ctx:MathExprParser.SfftFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SfftFunc. - def exitSfftFunc(self, ctx:MathExprParser.SfftFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#DilateFunc. - def enterDilateFunc(self, ctx:MathExprParser.DilateFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#DilateFunc. - def exitDilateFunc(self, ctx:MathExprParser.DilateFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ErodeFunc. - def enterErodeFunc(self, ctx:MathExprParser.ErodeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ErodeFunc. - def exitErodeFunc(self, ctx:MathExprParser.ErodeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#MorphOpenFunc. - def enterMorphOpenFunc(self, ctx:MathExprParser.MorphOpenFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#MorphOpenFunc. - def exitMorphOpenFunc(self, ctx:MathExprParser.MorphOpenFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#MorphCloseFunc. - def enterMorphCloseFunc(self, ctx:MathExprParser.MorphCloseFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#MorphCloseFunc. - def exitMorphCloseFunc(self, ctx:MathExprParser.MorphCloseFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#IntFunc. - def enterIntFunc(self, ctx:MathExprParser.IntFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#IntFunc. - def exitIntFunc(self, ctx:MathExprParser.IntFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FloatFunc. - def enterFloatFunc(self, ctx:MathExprParser.FloatFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FloatFunc. - def exitFloatFunc(self, ctx:MathExprParser.FloatFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FlowMagFunc. - def enterFlowMagFunc(self, ctx:MathExprParser.FlowMagFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FlowMagFunc. - def exitFlowMagFunc(self, ctx:MathExprParser.FlowMagFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FlowAngFunc. - def enterFlowAngFunc(self, ctx:MathExprParser.FlowAngFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FlowAngFunc. - def exitFlowAngFunc(self, ctx:MathExprParser.FlowAngFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AsNestedFunc. - def enterAsNestedFunc(self, ctx:MathExprParser.AsNestedFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AsNestedFunc. - def exitAsNestedFunc(self, ctx:MathExprParser.AsNestedFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SvdFunc. - def enterSvdFunc(self, ctx:MathExprParser.SvdFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SvdFunc. - def exitSvdFunc(self, ctx:MathExprParser.SvdFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PowFunc. - def enterPowFunc(self, ctx:MathExprParser.PowFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PowFunc. - def exitPowFunc(self, ctx:MathExprParser.PowFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#Atan2Func. - def enterAtan2Func(self, ctx:MathExprParser.Atan2FuncContext): - pass - - # Exit a parse tree produced by MathExprParser#Atan2Func. - def exitAtan2Func(self, ctx:MathExprParser.Atan2FuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TMinFunc. - def enterTMinFunc(self, ctx:MathExprParser.TMinFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TMinFunc. - def exitTMinFunc(self, ctx:MathExprParser.TMinFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TMaxFunc. - def enterTMaxFunc(self, ctx:MathExprParser.TMaxFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TMaxFunc. - def exitTMaxFunc(self, ctx:MathExprParser.TMaxFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SNormFunc. - def enterSNormFunc(self, ctx:MathExprParser.SNormFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SNormFunc. - def exitSNormFunc(self, ctx:MathExprParser.SNormFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#StepFunc. - def enterStepFunc(self, ctx:MathExprParser.StepFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#StepFunc. - def exitStepFunc(self, ctx:MathExprParser.StepFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TopkFunc. - def enterTopkFunc(self, ctx:MathExprParser.TopkFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TopkFunc. - def exitTopkFunc(self, ctx:MathExprParser.TopkFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BotkFunc. - def enterBotkFunc(self, ctx:MathExprParser.BotkFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BotkFunc. - def exitBotkFunc(self, ctx:MathExprParser.BotkFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#QuartileFunc. - def enterQuartileFunc(self, ctx:MathExprParser.QuartileFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#QuartileFunc. - def exitQuartileFunc(self, ctx:MathExprParser.QuartileFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PercentileFunc. - def enterPercentileFunc(self, ctx:MathExprParser.PercentileFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PercentileFunc. - def exitPercentileFunc(self, ctx:MathExprParser.PercentileFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#QuantileFunc. - def enterQuantileFunc(self, ctx:MathExprParser.QuantileFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#QuantileFunc. - def exitQuantileFunc(self, ctx:MathExprParser.QuantileFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#DotFunc. - def enterDotFunc(self, ctx:MathExprParser.DotFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#DotFunc. - def exitDotFunc(self, ctx:MathExprParser.DotFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CossimFunc. - def enterCossimFunc(self, ctx:MathExprParser.CossimFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CossimFunc. - def exitCossimFunc(self, ctx:MathExprParser.CossimFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#StartswithFunc. - def enterStartswithFunc(self, ctx:MathExprParser.StartswithFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#StartswithFunc. - def exitStartswithFunc(self, ctx:MathExprParser.StartswithFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#EndswithFunc. - def enterEndswithFunc(self, ctx:MathExprParser.EndswithFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#EndswithFunc. - def exitEndswithFunc(self, ctx:MathExprParser.EndswithFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FlipFunc. - def enterFlipFunc(self, ctx:MathExprParser.FlipFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FlipFunc. - def exitFlipFunc(self, ctx:MathExprParser.FlipFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CovFunc. - def enterCovFunc(self, ctx:MathExprParser.CovFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CovFunc. - def exitCovFunc(self, ctx:MathExprParser.CovFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CorrFunc. - def enterCorrFunc(self, ctx:MathExprParser.CorrFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CorrFunc. - def exitCorrFunc(self, ctx:MathExprParser.CorrFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AppendFunc. - def enterAppendFunc(self, ctx:MathExprParser.AppendFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AppendFunc. - def exitAppendFunc(self, ctx:MathExprParser.AppendFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#AddKeyFunc. - def enterAddKeyFunc(self, ctx:MathExprParser.AddKeyFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#AddKeyFunc. - def exitAddKeyFunc(self, ctx:MathExprParser.AddKeyFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PermuteFunc. - def enterPermuteFunc(self, ctx:MathExprParser.PermuteFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PermuteFunc. - def exitPermuteFunc(self, ctx:MathExprParser.PermuteFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GaussianFunc. - def enterGaussianFunc(self, ctx:MathExprParser.GaussianFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GaussianFunc. - def exitGaussianFunc(self, ctx:MathExprParser.GaussianFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TopkIndFunc. - def enterTopkIndFunc(self, ctx:MathExprParser.TopkIndFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TopkIndFunc. - def exitTopkIndFunc(self, ctx:MathExprParser.TopkIndFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BotkIndFunc. - def enterBotkIndFunc(self, ctx:MathExprParser.BotkIndFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BotkIndFunc. - def exitBotkIndFunc(self, ctx:MathExprParser.BotkIndFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BatchShuffleFunc. - def enterBatchShuffleFunc(self, ctx:MathExprParser.BatchShuffleFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BatchShuffleFunc. - def exitBatchShuffleFunc(self, ctx:MathExprParser.BatchShuffleFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PushFunc. - def enterPushFunc(self, ctx:MathExprParser.PushFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PushFunc. - def exitPushFunc(self, ctx:MathExprParser.PushFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GetValueFunc. - def enterGetValueFunc(self, ctx:MathExprParser.GetValueFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GetValueFunc. - def exitGetValueFunc(self, ctx:MathExprParser.GetValueFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#EmptyTensorFunc. - def enterEmptyTensorFunc(self, ctx:MathExprParser.EmptyTensorFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#EmptyTensorFunc. - def exitEmptyTensorFunc(self, ctx:MathExprParser.EmptyTensorFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PadFunc. - def enterPadFunc(self, ctx:MathExprParser.PadFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PadFunc. - def exitPadFunc(self, ctx:MathExprParser.PadFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CrossFunc. - def enterCrossFunc(self, ctx:MathExprParser.CrossFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CrossFunc. - def exitCrossFunc(self, ctx:MathExprParser.CrossFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#MatmulFunc. - def enterMatmulFunc(self, ctx:MathExprParser.MatmulFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#MatmulFunc. - def exitMatmulFunc(self, ctx:MathExprParser.MatmulFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FlowApplyFunc. - def enterFlowApplyFunc(self, ctx:MathExprParser.FlowApplyFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FlowApplyFunc. - def exitFlowApplyFunc(self, ctx:MathExprParser.FlowApplyFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RifeFunc. - def enterRifeFunc(self, ctx:MathExprParser.RifeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RifeFunc. - def exitRifeFunc(self, ctx:MathExprParser.RifeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BitAndFunc. - def enterBitAndFunc(self, ctx:MathExprParser.BitAndFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BitAndFunc. - def exitBitAndFunc(self, ctx:MathExprParser.BitAndFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BitXorFunc. - def enterBitXorFunc(self, ctx:MathExprParser.BitXorFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BitXorFunc. - def exitBitXorFunc(self, ctx:MathExprParser.BitXorFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BitOrFunc. - def enterBitOrFunc(self, ctx:MathExprParser.BitOrFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BitOrFunc. - def exitBitOrFunc(self, ctx:MathExprParser.BitOrFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SplitFunc. - def enterSplitFunc(self, ctx:MathExprParser.SplitFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SplitFunc. - def exitSplitFunc(self, ctx:MathExprParser.SplitFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#JoinFunc. - def enterJoinFunc(self, ctx:MathExprParser.JoinFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#JoinFunc. - def exitJoinFunc(self, ctx:MathExprParser.JoinFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SubstringFunc. - def enterSubstringFunc(self, ctx:MathExprParser.SubstringFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SubstringFunc. - def exitSubstringFunc(self, ctx:MathExprParser.SubstringFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#FindFunc. - def enterFindFunc(self, ctx:MathExprParser.FindFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#FindFunc. - def exitFindFunc(self, ctx:MathExprParser.FindFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ReplaceFunc. - def enterReplaceFunc(self, ctx:MathExprParser.ReplaceFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ReplaceFunc. - def exitReplaceFunc(self, ctx:MathExprParser.ReplaceFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#Int_to_rgbFunc. - def enterInt_to_rgbFunc(self, ctx:MathExprParser.Int_to_rgbFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#Int_to_rgbFunc. - def exitInt_to_rgbFunc(self, ctx:MathExprParser.Int_to_rgbFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#Rgb_to_intFunc. - def enterRgb_to_intFunc(self, ctx:MathExprParser.Rgb_to_intFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#Rgb_to_intFunc. - def exitRgb_to_intFunc(self, ctx:MathExprParser.Rgb_to_intFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#InterpolateLinearFunc. - def enterInterpolateLinearFunc(self, ctx:MathExprParser.InterpolateLinearFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#InterpolateLinearFunc. - def exitInterpolateLinearFunc(self, ctx:MathExprParser.InterpolateLinearFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#InterpolateAreaFunc. - def enterInterpolateAreaFunc(self, ctx:MathExprParser.InterpolateAreaFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#InterpolateAreaFunc. - def exitInterpolateAreaFunc(self, ctx:MathExprParser.InterpolateAreaFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#InterpolateNearestExactFunc. - def enterInterpolateNearestExactFunc(self, ctx:MathExprParser.InterpolateNearestExactFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#InterpolateNearestExactFunc. - def exitInterpolateNearestExactFunc(self, ctx:MathExprParser.InterpolateNearestExactFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RemoveKeyFunc. - def enterRemoveKeyFunc(self, ctx:MathExprParser.RemoveKeyFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RemoveKeyFunc. - def exitRemoveKeyFunc(self, ctx:MathExprParser.RemoveKeyFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ClampFunc. - def enterClampFunc(self, ctx:MathExprParser.ClampFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ClampFunc. - def exitClampFunc(self, ctx:MathExprParser.ClampFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#LerpFunc. - def enterLerpFunc(self, ctx:MathExprParser.LerpFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#LerpFunc. - def exitLerpFunc(self, ctx:MathExprParser.LerpFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SmoothstepFunc. - def enterSmoothstepFunc(self, ctx:MathExprParser.SmoothstepFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SmoothstepFunc. - def exitSmoothstepFunc(self, ctx:MathExprParser.SmoothstepFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TransposeFunc. - def enterTransposeFunc(self, ctx:MathExprParser.TransposeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TransposeFunc. - def exitTransposeFunc(self, ctx:MathExprParser.TransposeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RangeFunc. - def enterRangeFunc(self, ctx:MathExprParser.RangeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RangeFunc. - def exitRangeFunc(self, ctx:MathExprParser.RangeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#MomentFunc. - def enterMomentFunc(self, ctx:MathExprParser.MomentFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#MomentFunc. - def exitMomentFunc(self, ctx:MathExprParser.MomentFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CubicEaseFunc. - def enterCubicEaseFunc(self, ctx:MathExprParser.CubicEaseFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CubicEaseFunc. - def exitCubicEaseFunc(self, ctx:MathExprParser.CubicEaseFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ElasticEaseFunc. - def enterElasticEaseFunc(self, ctx:MathExprParser.ElasticEaseFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ElasticEaseFunc. - def exitElasticEaseFunc(self, ctx:MathExprParser.ElasticEaseFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SineEaseFunc. - def enterSineEaseFunc(self, ctx:MathExprParser.SineEaseFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SineEaseFunc. - def exitSineEaseFunc(self, ctx:MathExprParser.SineEaseFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SmootherstepFunc. - def enterSmootherstepFunc(self, ctx:MathExprParser.SmootherstepFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SmootherstepFunc. - def exitSmootherstepFunc(self, ctx:MathExprParser.SmootherstepFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CropFunc. - def enterCropFunc(self, ctx:MathExprParser.CropFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CropFunc. - def exitCropFunc(self, ctx:MathExprParser.CropFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SifftFunc. - def enterSifftFunc(self, ctx:MathExprParser.SifftFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SifftFunc. - def exitSifftFunc(self, ctx:MathExprParser.SifftFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#OverlayFunc. - def enterOverlayFunc(self, ctx:MathExprParser.OverlayFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#OverlayFunc. - def exitOverlayFunc(self, ctx:MathExprParser.OverlayFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#LinspaceFunc. - def enterLinspaceFunc(self, ctx:MathExprParser.LinspaceFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#LinspaceFunc. - def exitLinspaceFunc(self, ctx:MathExprParser.LinspaceFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RollFunc. - def enterRollFunc(self, ctx:MathExprParser.RollFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RollFunc. - def exitRollFunc(self, ctx:MathExprParser.RollFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RgbToOklabFunc. - def enterRgbToOklabFunc(self, ctx:MathExprParser.RgbToOklabFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RgbToOklabFunc. - def exitRgbToOklabFunc(self, ctx:MathExprParser.RgbToOklabFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RgbToCielabFunc. - def enterRgbToCielabFunc(self, ctx:MathExprParser.RgbToCielabFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RgbToCielabFunc. - def exitRgbToCielabFunc(self, ctx:MathExprParser.RgbToCielabFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RgbToHsvFunc. - def enterRgbToHsvFunc(self, ctx:MathExprParser.RgbToHsvFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RgbToHsvFunc. - def exitRgbToHsvFunc(self, ctx:MathExprParser.RgbToHsvFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#HsvToRgbFunc. - def enterHsvToRgbFunc(self, ctx:MathExprParser.HsvToRgbFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#HsvToRgbFunc. - def exitHsvToRgbFunc(self, ctx:MathExprParser.HsvToRgbFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#WhereFunc. - def enterWhereFunc(self, ctx:MathExprParser.WhereFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#WhereFunc. - def exitWhereFunc(self, ctx:MathExprParser.WhereFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#OklabToRgbFunc. - def enterOklabToRgbFunc(self, ctx:MathExprParser.OklabToRgbFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#OklabToRgbFunc. - def exitOklabToRgbFunc(self, ctx:MathExprParser.OklabToRgbFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CielabToRgbFunc. - def enterCielabToRgbFunc(self, ctx:MathExprParser.CielabToRgbFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CielabToRgbFunc. - def exitCielabToRgbFunc(self, ctx:MathExprParser.CielabToRgbFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#TextImageFunc. - def enterTextImageFunc(self, ctx:MathExprParser.TextImageFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#TextImageFunc. - def exitTextImageFunc(self, ctx:MathExprParser.TextImageFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CoordsFunc. - def enterCoordsFunc(self, ctx:MathExprParser.CoordsFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CoordsFunc. - def exitCoordsFunc(self, ctx:MathExprParser.CoordsFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GatherFunc. - def enterGatherFunc(self, ctx:MathExprParser.GatherFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GatherFunc. - def exitGatherFunc(self, ctx:MathExprParser.GatherFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ScatterFunc. - def enterScatterFunc(self, ctx:MathExprParser.ScatterFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ScatterFunc. - def exitScatterFunc(self, ctx:MathExprParser.ScatterFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ScatterAddFunc. - def enterScatterAddFunc(self, ctx:MathExprParser.ScatterAddFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ScatterAddFunc. - def exitScatterAddFunc(self, ctx:MathExprParser.ScatterAddFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SwapFunc. - def enterSwapFunc(self, ctx:MathExprParser.SwapFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SwapFunc. - def exitSwapFunc(self, ctx:MathExprParser.SwapFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#NvlFunc. - def enterNvlFunc(self, ctx:MathExprParser.NvlFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#NvlFunc. - def exitNvlFunc(self, ctx:MathExprParser.NvlFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#LogspaceFunc. - def enterLogspaceFunc(self, ctx:MathExprParser.LogspaceFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#LogspaceFunc. - def exitLogspaceFunc(self, ctx:MathExprParser.LogspaceFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#DistFunc. - def enterDistFunc(self, ctx:MathExprParser.DistFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#DistFunc. - def exitDistFunc(self, ctx:MathExprParser.DistFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#HistogramFunc. - def enterHistogramFunc(self, ctx:MathExprParser.HistogramFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#HistogramFunc. - def exitHistogramFunc(self, ctx:MathExprParser.HistogramFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RemapFunc. - def enterRemapFunc(self, ctx:MathExprParser.RemapFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RemapFunc. - def exitRemapFunc(self, ctx:MathExprParser.RemapFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#DiagonalMatrixFunc. - def enterDiagonalMatrixFunc(self, ctx:MathExprParser.DiagonalMatrixFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#DiagonalMatrixFunc. - def exitDiagonalMatrixFunc(self, ctx:MathExprParser.DiagonalMatrixFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SMinFunc. - def enterSMinFunc(self, ctx:MathExprParser.SMinFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SMinFunc. - def exitSMinFunc(self, ctx:MathExprParser.SMinFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SMaxFunc. - def enterSMaxFunc(self, ctx:MathExprParser.SMaxFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SMaxFunc. - def exitSMaxFunc(self, ctx:MathExprParser.SMaxFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#MapFunc. - def enterMapFunc(self, ctx:MathExprParser.MapFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#MapFunc. - def exitMapFunc(self, ctx:MathExprParser.MapFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#EzConvFunc. - def enterEzConvFunc(self, ctx:MathExprParser.EzConvFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#EzConvFunc. - def exitEzConvFunc(self, ctx:MathExprParser.EzConvFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ConvFunc. - def enterConvFunc(self, ctx:MathExprParser.ConvFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ConvFunc. - def exitConvFunc(self, ctx:MathExprParser.ConvFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ReshapeFunc. - def enterReshapeFunc(self, ctx:MathExprParser.ReshapeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ReshapeFunc. - def exitReshapeFunc(self, ctx:MathExprParser.ReshapeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#SqueezeFunc. - def enterSqueezeFunc(self, ctx:MathExprParser.SqueezeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#SqueezeFunc. - def exitSqueezeFunc(self, ctx:MathExprParser.SqueezeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#UnsqueezeFunc. - def enterUnsqueezeFunc(self, ctx:MathExprParser.UnsqueezeFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#UnsqueezeFunc. - def exitUnsqueezeFunc(self, ctx:MathExprParser.UnsqueezeFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ConcatFunc. - def enterConcatFunc(self, ctx:MathExprParser.ConcatFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ConcatFunc. - def exitConcatFunc(self, ctx:MathExprParser.ConcatFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#StackFunc. - def enterStackFunc(self, ctx:MathExprParser.StackFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#StackFunc. - def exitStackFunc(self, ctx:MathExprParser.StackFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#NonzeroFunc. - def enterNonzeroFunc(self, ctx:MathExprParser.NonzeroFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#NonzeroFunc. - def exitNonzeroFunc(self, ctx:MathExprParser.NonzeroFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GetChangedKeysFunc. - def enterGetChangedKeysFunc(self, ctx:MathExprParser.GetChangedKeysFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GetChangedKeysFunc. - def exitGetChangedKeysFunc(self, ctx:MathExprParser.GetChangedKeysFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GetAddedKeysFunc. - def enterGetAddedKeysFunc(self, ctx:MathExprParser.GetAddedKeysFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GetAddedKeysFunc. - def exitGetAddedKeysFunc(self, ctx:MathExprParser.GetAddedKeysFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GetRemovedKeysFunc. - def enterGetRemovedKeysFunc(self, ctx:MathExprParser.GetRemovedKeysFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GetRemovedKeysFunc. - def exitGetRemovedKeysFunc(self, ctx:MathExprParser.GetRemovedKeysFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GetUnchangedKeysFunc. - def enterGetUnchangedKeysFunc(self, ctx:MathExprParser.GetUnchangedKeysFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GetUnchangedKeysFunc. - def exitGetUnchangedKeysFunc(self, ctx:MathExprParser.GetUnchangedKeysFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#NoiseFunc. - def enterNoiseFunc(self, ctx:MathExprParser.NoiseFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#NoiseFunc. - def exitNoiseFunc(self, ctx:MathExprParser.NoiseFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RandFunc. - def enterRandFunc(self, ctx:MathExprParser.RandFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RandFunc. - def exitRandFunc(self, ctx:MathExprParser.RandFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#ExponentialFunc. - def enterExponentialFunc(self, ctx:MathExprParser.ExponentialFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#ExponentialFunc. - def exitExponentialFunc(self, ctx:MathExprParser.ExponentialFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BernoulliFunc. - def enterBernoulliFunc(self, ctx:MathExprParser.BernoulliFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BernoulliFunc. - def exitBernoulliFunc(self, ctx:MathExprParser.BernoulliFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PoissonFunc. - def enterPoissonFunc(self, ctx:MathExprParser.PoissonFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PoissonFunc. - def exitPoissonFunc(self, ctx:MathExprParser.PoissonFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CauchyFunc. - def enterCauchyFunc(self, ctx:MathExprParser.CauchyFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CauchyFunc. - def exitCauchyFunc(self, ctx:MathExprParser.CauchyFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#LogNormalFunc. - def enterLogNormalFunc(self, ctx:MathExprParser.LogNormalFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#LogNormalFunc. - def exitLogNormalFunc(self, ctx:MathExprParser.LogNormalFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GammaDistFunc. - def enterGammaDistFunc(self, ctx:MathExprParser.GammaDistFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GammaDistFunc. - def exitGammaDistFunc(self, ctx:MathExprParser.GammaDistFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#BetaDistFunc. - def enterBetaDistFunc(self, ctx:MathExprParser.BetaDistFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#BetaDistFunc. - def exitBetaDistFunc(self, ctx:MathExprParser.BetaDistFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#LaplaceDistFunc. - def enterLaplaceDistFunc(self, ctx:MathExprParser.LaplaceDistFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#LaplaceDistFunc. - def exitLaplaceDistFunc(self, ctx:MathExprParser.LaplaceDistFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#GumbelDistFunc. - def enterGumbelDistFunc(self, ctx:MathExprParser.GumbelDistFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#GumbelDistFunc. - def exitGumbelDistFunc(self, ctx:MathExprParser.GumbelDistFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#WeibullDistFunc. - def enterWeibullDistFunc(self, ctx:MathExprParser.WeibullDistFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#WeibullDistFunc. - def exitWeibullDistFunc(self, ctx:MathExprParser.WeibullDistFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#Chi2DistFunc. - def enterChi2DistFunc(self, ctx:MathExprParser.Chi2DistFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#Chi2DistFunc. - def exitChi2DistFunc(self, ctx:MathExprParser.Chi2DistFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#StudentTDistFunc. - def enterStudentTDistFunc(self, ctx:MathExprParser.StudentTDistFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#StudentTDistFunc. - def exitStudentTDistFunc(self, ctx:MathExprParser.StudentTDistFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PerlinFunc. - def enterPerlinFunc(self, ctx:MathExprParser.PerlinFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PerlinFunc. - def exitPerlinFunc(self, ctx:MathExprParser.PerlinFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#CellularFunc. - def enterCellularFunc(self, ctx:MathExprParser.CellularFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#CellularFunc. - def exitCellularFunc(self, ctx:MathExprParser.CellularFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#PlasmaFunc. - def enterPlasmaFunc(self, ctx:MathExprParser.PlasmaFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#PlasmaFunc. - def exitPlasmaFunc(self, ctx:MathExprParser.PlasmaFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#RidgedFunc. - def enterRidgedFunc(self, ctx:MathExprParser.RidgedFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#RidgedFunc. - def exitRidgedFunc(self, ctx:MathExprParser.RidgedFuncContext): - pass - - - # Enter a parse tree produced by MathExprParser#DomainWarpFunc. - def enterDomainWarpFunc(self, ctx:MathExprParser.DomainWarpFuncContext): - pass - - # Exit a parse tree produced by MathExprParser#DomainWarpFunc. - def exitDomainWarpFunc(self, ctx:MathExprParser.DomainWarpFuncContext): - pass - - - -del MathExprParser \ No newline at end of file diff --git a/more_math/Parser/MathExprParser.py b/more_math/Parser/MathExprParser.py deleted file mode 100644 index 94533e4..0000000 --- a/more_math/Parser/MathExprParser.py +++ /dev/null @@ -1,16684 +0,0 @@ -# Generated from MathExpr.g4 by ANTLR 4.13.2 -# encoding: utf-8 -from antlr4 import * -from io import StringIO -import sys -if sys.version_info[1] > 5: - from typing import TextIO -else: - from typing.io import TextIO - -def serializedATN(): - return [ - 4,1,247,2088,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,1,0,1,0,1,0,5,0,74,8,0,10,0,12,0,77,9,0,1,0,1, - 0,3,0,81,8,0,1,0,1,0,1,1,1,1,1,1,3,1,88,8,1,1,1,1,1,1,1,1,1,3,1, - 94,8,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,5,2,103,8,2,10,2,12,2,106,9,2, - 1,2,1,2,5,2,110,8,2,10,2,12,2,113,9,2,1,2,1,2,1,2,1,2,1,3,1,3,1, - 3,5,3,122,8,3,10,3,12,3,125,9,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4, - 1,4,1,4,1,4,3,4,138,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,147,8,5, - 1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8, - 5,8,165,8,8,10,8,12,8,168,9,8,1,8,1,8,1,9,1,9,1,9,5,9,175,8,9,10, - 9,12,9,178,9,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3,10, - 189,8,10,1,11,1,11,1,11,1,12,1,12,1,12,1,13,1,13,3,13,199,8,13,1, - 13,1,13,1,14,1,14,3,14,205,8,14,1,15,1,15,1,15,1,15,1,15,1,15,1, - 16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,5,16,222,8,16,10,16,12, - 16,225,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,5,17,242,8,17,10,17,12,17,245,9,17,1,18,1, - 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,5,18,256,8,18,10,18,12,18, - 259,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,5,19,273,8,19,10,19,12,19,276,9,19,1,20,1,20,1,20,1,20,1,20, - 1,20,1,20,1,20,1,20,5,20,287,8,20,10,20,12,20,290,9,20,1,21,1,21, - 1,21,1,21,1,21,3,21,297,8,21,1,22,1,22,1,22,1,22,1,22,3,22,304,8, - 22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,5,23,314,8,23,10,23,12, - 23,317,9,23,1,23,1,23,5,23,321,8,23,10,23,12,23,324,9,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,3,24,356,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,3,25,376,8, - 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,5,25,394,8,25,10,25,12,25,397,9,25,1,25,1,25,1, - 25,1,25,3,25,403,8,25,1,25,1,25,1,25,1,25,3,25,409,8,25,1,25,1,25, - 1,25,1,25,3,25,415,8,25,1,26,1,26,1,26,5,26,420,8,26,10,26,12,26, - 423,9,26,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,3,28,519,8,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,598,8,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,624,8,28,3,28,626,8, - 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, - 28,1,28,1,28,1,28,1,28,3,28,645,8,28,1,28,1,28,1,28,1,28,1,28,1, - 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,664, - 8,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,700,8,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,736,8,28,3,28,738,8,28,1, - 28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,747,8,28,1,28,1,28,1,28,1, - 28,1,28,1,28,1,28,3,28,756,8,28,1,28,1,28,1,28,1,28,1,28,1,28,1, - 28,3,28,765,8,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,774,8,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28, - 853,8,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,862,8,28,1,28,1, - 28,1,28,1,28,1,28,1,28,1,28,3,28,871,8,28,1,28,1,28,1,28,1,28,1, - 28,1,28,1,28,3,28,880,8,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, - 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, - 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,914, - 8,28,1,28,1,28,3,28,918,8,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 3,29,953,8,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29,1078,8,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,3,29,1124,8,29,3,29,1126,8,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29, - 1169,8,29,3,29,1171,8,29,3,29,1173,8,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29,1203,8,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29,1212,8,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,3,29,1223,8,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,3,29,1256,8,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29,1288,8,29,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30,1394, - 8,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30, - 1407,8,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30,1427,8,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30,1439,8,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30,1451,8,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30,1463,8,30,1,30,1,30,3,30, - 1467,8,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30, - 1479,8,30,1,30,1,30,3,30,1483,8,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 3,30,1504,8,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 3,30,1516,8,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,3,30,1529,8,30,1,30,1,30,3,30,1533,8,30,1,30,1,30,3,30,1537, - 8,30,1,30,1,30,3,30,1541,8,30,1,30,1,30,3,30,1545,8,30,1,30,1,30, - 3,30,1549,8,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30, - 1560,8,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30,1595,8,30,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,3,31,1652,8,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32, - 1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32, - 1,32,1,32,1,32,3,32,1678,8,32,3,32,1680,8,32,3,32,1682,8,32,1,32, - 1,32,3,32,1686,8,32,1,33,1,33,1,33,1,33,1,33,5,33,1693,8,33,10,33, - 12,33,1696,9,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,5,33,1705,8,33, - 10,33,12,33,1708,9,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1, - 33,1,33,1,33,3,33,1721,8,33,3,33,1723,8,33,1,33,1,33,1,33,1,33,1, - 33,1,33,1,33,4,33,1732,8,33,11,33,12,33,1733,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,4,33,1743,8,33,11,33,12,33,1744,1,33,1,33,1,33,1, - 33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,1761,8, - 33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1, - 33,1,33,4,33,1777,8,33,11,33,12,33,1778,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,3,33,1788,8,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,33,1,33,1,33,3,33,1817,8,33,1,34,1,34,1,34,1,34, - 1,34,3,34,1824,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1833, - 8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1844,8,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1855,8,34,1,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1866,8,34,1,34,1,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1879,8,34,1,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1892,8,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1905, - 8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34, - 1918,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 3,34,1931,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,3,34,1944,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,1,34,3,34,1957,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,3,34,1968,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 3,34,1979,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34, - 1990,8,34,1,34,1,34,3,34,1994,8,34,1,34,1,34,3,34,1998,8,34,1,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,2009,8,34,1,34,1,34, - 3,34,2013,8,34,1,34,1,34,3,34,2017,8,34,1,34,1,34,1,34,1,34,1,34, - 1,34,1,34,1,34,1,34,3,34,2028,8,34,1,34,1,34,3,34,2032,8,34,1,34, - 1,34,3,34,2036,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 3,34,2047,8,34,1,34,1,34,3,34,2051,8,34,1,34,1,34,3,34,2055,8,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 3,34,2070,8,34,1,34,1,34,3,34,2074,8,34,1,34,1,34,3,34,2078,8,34, - 1,34,1,34,3,34,2082,8,34,1,34,1,34,3,34,2086,8,34,1,34,0,6,32,34, - 36,38,40,46,35,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34, - 36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,0,1,1,0,222,227, - 2408,0,75,1,0,0,0,2,84,1,0,0,0,4,97,1,0,0,0,6,118,1,0,0,0,8,137, - 1,0,0,0,10,139,1,0,0,0,12,148,1,0,0,0,14,154,1,0,0,0,16,162,1,0, - 0,0,18,171,1,0,0,0,20,188,1,0,0,0,22,190,1,0,0,0,24,193,1,0,0,0, - 26,196,1,0,0,0,28,204,1,0,0,0,30,206,1,0,0,0,32,212,1,0,0,0,34,226, - 1,0,0,0,36,246,1,0,0,0,38,260,1,0,0,0,40,277,1,0,0,0,42,296,1,0, - 0,0,44,303,1,0,0,0,46,305,1,0,0,0,48,355,1,0,0,0,50,414,1,0,0,0, - 52,416,1,0,0,0,54,424,1,0,0,0,56,917,1,0,0,0,58,1287,1,0,0,0,60, - 1594,1,0,0,0,62,1651,1,0,0,0,64,1685,1,0,0,0,66,1816,1,0,0,0,68, - 2085,1,0,0,0,70,74,3,2,1,0,71,74,3,4,2,0,72,74,3,8,4,0,73,70,1,0, - 0,0,73,71,1,0,0,0,73,72,1,0,0,0,74,77,1,0,0,0,75,73,1,0,0,0,75,76, - 1,0,0,0,76,78,1,0,0,0,77,75,1,0,0,0,78,80,3,28,14,0,79,81,5,233, - 0,0,80,79,1,0,0,0,80,81,1,0,0,0,81,82,1,0,0,0,82,83,5,0,0,1,83,1, - 1,0,0,0,84,85,5,244,0,0,85,87,5,230,0,0,86,88,3,6,3,0,87,86,1,0, - 0,0,87,88,1,0,0,0,88,89,1,0,0,0,89,90,5,231,0,0,90,93,5,234,0,0, - 91,94,3,28,14,0,92,94,3,16,8,0,93,91,1,0,0,0,93,92,1,0,0,0,94,95, - 1,0,0,0,95,96,5,233,0,0,96,3,1,0,0,0,97,111,5,244,0,0,98,99,5,235, - 0,0,99,104,3,28,14,0,100,101,5,232,0,0,101,103,3,28,14,0,102,100, - 1,0,0,0,103,106,1,0,0,0,104,102,1,0,0,0,104,105,1,0,0,0,105,107, - 1,0,0,0,106,104,1,0,0,0,107,108,5,236,0,0,108,110,1,0,0,0,109,98, - 1,0,0,0,110,113,1,0,0,0,111,109,1,0,0,0,111,112,1,0,0,0,112,114, - 1,0,0,0,113,111,1,0,0,0,114,115,7,0,0,0,115,116,3,28,14,0,116,117, - 5,233,0,0,117,5,1,0,0,0,118,123,5,244,0,0,119,120,5,232,0,0,120, - 122,5,244,0,0,121,119,1,0,0,0,122,125,1,0,0,0,123,121,1,0,0,0,123, - 124,1,0,0,0,124,7,1,0,0,0,125,123,1,0,0,0,126,138,3,10,5,0,127,138, - 3,12,6,0,128,138,3,16,8,0,129,138,3,22,11,0,130,138,3,24,12,0,131, - 138,3,26,13,0,132,138,3,4,2,0,133,138,3,14,7,0,134,135,3,28,14,0, - 135,136,5,233,0,0,136,138,1,0,0,0,137,126,1,0,0,0,137,127,1,0,0, - 0,137,128,1,0,0,0,137,129,1,0,0,0,137,130,1,0,0,0,137,131,1,0,0, - 0,137,132,1,0,0,0,137,133,1,0,0,0,137,134,1,0,0,0,138,9,1,0,0,0, - 139,140,5,159,0,0,140,141,5,230,0,0,141,142,3,28,14,0,142,143,5, - 231,0,0,143,146,3,8,4,0,144,145,5,160,0,0,145,147,3,8,4,0,146,144, - 1,0,0,0,146,147,1,0,0,0,147,11,1,0,0,0,148,149,5,161,0,0,149,150, - 5,230,0,0,150,151,3,28,14,0,151,152,5,231,0,0,152,153,3,8,4,0,153, - 13,1,0,0,0,154,155,5,162,0,0,155,156,5,230,0,0,156,157,5,244,0,0, - 157,158,5,163,0,0,158,159,3,28,14,0,159,160,5,231,0,0,160,161,3, - 8,4,0,161,15,1,0,0,0,162,166,5,239,0,0,163,165,3,8,4,0,164,163,1, - 0,0,0,165,168,1,0,0,0,166,164,1,0,0,0,166,167,1,0,0,0,167,169,1, - 0,0,0,168,166,1,0,0,0,169,170,5,240,0,0,170,17,1,0,0,0,171,176,3, - 20,10,0,172,173,5,232,0,0,173,175,3,20,10,0,174,172,1,0,0,0,175, - 178,1,0,0,0,176,174,1,0,0,0,176,177,1,0,0,0,177,19,1,0,0,0,178,176, - 1,0,0,0,179,180,5,244,0,0,180,181,5,238,0,0,181,189,3,28,14,0,182, - 183,5,243,0,0,183,184,5,238,0,0,184,189,3,28,14,0,185,186,5,241, - 0,0,186,187,5,238,0,0,187,189,3,28,14,0,188,179,1,0,0,0,188,182, - 1,0,0,0,188,185,1,0,0,0,189,21,1,0,0,0,190,191,5,164,0,0,191,192, - 5,233,0,0,192,23,1,0,0,0,193,194,5,165,0,0,194,195,5,233,0,0,195, - 25,1,0,0,0,196,198,5,166,0,0,197,199,3,28,14,0,198,197,1,0,0,0,198, - 199,1,0,0,0,199,200,1,0,0,0,200,201,5,233,0,0,201,27,1,0,0,0,202, - 205,3,30,15,0,203,205,3,32,16,0,204,202,1,0,0,0,204,203,1,0,0,0, - 205,29,1,0,0,0,206,207,3,32,16,0,207,208,5,237,0,0,208,209,3,28, - 14,0,209,210,5,238,0,0,210,211,3,28,14,0,211,31,1,0,0,0,212,213, - 6,16,-1,0,213,214,3,34,17,0,214,223,1,0,0,0,215,216,10,3,0,0,216, - 217,5,221,0,0,217,222,3,34,17,0,218,219,10,2,0,0,219,220,5,228,0, - 0,220,222,3,34,17,0,221,215,1,0,0,0,221,218,1,0,0,0,222,225,1,0, - 0,0,223,221,1,0,0,0,223,224,1,0,0,0,224,33,1,0,0,0,225,223,1,0,0, - 0,226,227,6,17,-1,0,227,228,3,40,20,0,228,243,1,0,0,0,229,230,10, - 5,0,0,230,231,5,218,0,0,231,242,3,40,20,0,232,233,10,4,0,0,233,234, - 5,217,0,0,234,242,3,40,20,0,235,236,10,3,0,0,236,237,5,220,0,0,237, - 242,3,40,20,0,238,239,10,2,0,0,239,240,5,219,0,0,240,242,3,40,20, - 0,241,229,1,0,0,0,241,232,1,0,0,0,241,235,1,0,0,0,241,238,1,0,0, - 0,242,245,1,0,0,0,243,241,1,0,0,0,243,244,1,0,0,0,244,35,1,0,0,0, - 245,243,1,0,0,0,246,247,6,18,-1,0,247,248,3,38,19,0,248,257,1,0, - 0,0,249,250,10,3,0,0,250,251,5,209,0,0,251,256,3,38,19,0,252,253, - 10,2,0,0,253,254,5,210,0,0,254,256,3,38,19,0,255,249,1,0,0,0,255, - 252,1,0,0,0,256,259,1,0,0,0,257,255,1,0,0,0,257,258,1,0,0,0,258, - 37,1,0,0,0,259,257,1,0,0,0,260,261,6,19,-1,0,261,262,3,42,21,0,262, - 274,1,0,0,0,263,264,10,4,0,0,264,265,5,211,0,0,265,273,3,42,21,0, - 266,267,10,3,0,0,267,268,5,212,0,0,268,273,3,42,21,0,269,270,10, - 2,0,0,270,271,5,213,0,0,271,273,3,42,21,0,272,263,1,0,0,0,272,266, - 1,0,0,0,272,269,1,0,0,0,273,276,1,0,0,0,274,272,1,0,0,0,274,275, - 1,0,0,0,275,39,1,0,0,0,276,274,1,0,0,0,277,278,6,20,-1,0,278,279, - 3,36,18,0,279,288,1,0,0,0,280,281,10,3,0,0,281,282,5,215,0,0,282, - 287,3,36,18,0,283,284,10,2,0,0,284,285,5,216,0,0,285,287,3,36,18, - 0,286,280,1,0,0,0,286,283,1,0,0,0,287,290,1,0,0,0,288,286,1,0,0, - 0,288,289,1,0,0,0,289,41,1,0,0,0,290,288,1,0,0,0,291,292,3,44,22, - 0,292,293,5,214,0,0,293,294,3,42,21,0,294,297,1,0,0,0,295,297,3, - 44,22,0,296,291,1,0,0,0,296,295,1,0,0,0,297,43,1,0,0,0,298,299,5, - 209,0,0,299,304,3,44,22,0,300,301,5,210,0,0,301,304,3,44,22,0,302, - 304,3,46,23,0,303,298,1,0,0,0,303,300,1,0,0,0,303,302,1,0,0,0,304, - 45,1,0,0,0,305,306,6,23,-1,0,306,307,3,50,25,0,307,322,1,0,0,0,308, - 309,10,2,0,0,309,310,5,235,0,0,310,315,3,48,24,0,311,312,5,232,0, - 0,312,314,3,48,24,0,313,311,1,0,0,0,314,317,1,0,0,0,315,313,1,0, - 0,0,315,316,1,0,0,0,316,318,1,0,0,0,317,315,1,0,0,0,318,319,5,236, - 0,0,319,321,1,0,0,0,320,308,1,0,0,0,321,324,1,0,0,0,322,320,1,0, - 0,0,322,323,1,0,0,0,323,47,1,0,0,0,324,322,1,0,0,0,325,326,3,28, - 14,0,326,327,5,238,0,0,327,328,3,28,14,0,328,329,5,238,0,0,329,330, - 3,28,14,0,330,356,1,0,0,0,331,332,3,28,14,0,332,333,5,238,0,0,333, - 334,3,28,14,0,334,356,1,0,0,0,335,336,5,238,0,0,336,337,3,28,14, - 0,337,338,5,238,0,0,338,339,3,28,14,0,339,356,1,0,0,0,340,341,5, - 238,0,0,341,356,3,28,14,0,342,343,3,28,14,0,343,344,5,238,0,0,344, - 345,5,238,0,0,345,346,3,28,14,0,346,356,1,0,0,0,347,348,3,28,14, - 0,348,349,5,238,0,0,349,356,1,0,0,0,350,351,5,238,0,0,351,352,5, - 238,0,0,352,356,3,28,14,0,353,356,5,238,0,0,354,356,3,28,14,0,355, - 325,1,0,0,0,355,331,1,0,0,0,355,335,1,0,0,0,355,340,1,0,0,0,355, - 342,1,0,0,0,355,347,1,0,0,0,355,350,1,0,0,0,355,353,1,0,0,0,355, - 354,1,0,0,0,356,49,1,0,0,0,357,415,3,54,27,0,358,415,3,56,28,0,359, - 415,3,58,29,0,360,415,3,60,30,0,361,415,3,62,31,0,362,415,3,64,32, - 0,363,415,3,66,33,0,364,415,3,68,34,0,365,415,5,244,0,0,366,415, - 5,241,0,0,367,415,5,242,0,0,368,415,5,243,0,0,369,370,5,230,0,0, - 370,371,3,6,3,0,371,372,5,231,0,0,372,375,5,234,0,0,373,376,3,28, - 14,0,374,376,3,16,8,0,375,373,1,0,0,0,375,374,1,0,0,0,376,415,1, - 0,0,0,377,378,5,230,0,0,378,379,3,28,14,0,379,380,5,231,0,0,380, - 415,1,0,0,0,381,382,5,230,0,0,382,383,3,28,14,0,383,384,5,231,0, - 0,384,415,1,0,0,0,385,386,5,229,0,0,386,387,3,28,14,0,387,388,5, - 229,0,0,388,415,1,0,0,0,389,390,5,235,0,0,390,395,3,28,14,0,391, - 392,5,232,0,0,392,394,3,28,14,0,393,391,1,0,0,0,394,397,1,0,0,0, - 395,393,1,0,0,0,395,396,1,0,0,0,396,398,1,0,0,0,397,395,1,0,0,0, - 398,399,5,236,0,0,399,415,1,0,0,0,400,402,5,239,0,0,401,403,3,18, - 9,0,402,401,1,0,0,0,402,403,1,0,0,0,403,404,1,0,0,0,404,415,5,240, - 0,0,405,406,5,244,0,0,406,408,5,230,0,0,407,409,3,52,26,0,408,407, - 1,0,0,0,408,409,1,0,0,0,409,410,1,0,0,0,410,415,5,231,0,0,411,415, - 5,185,0,0,412,415,5,164,0,0,413,415,5,165,0,0,414,357,1,0,0,0,414, - 358,1,0,0,0,414,359,1,0,0,0,414,360,1,0,0,0,414,361,1,0,0,0,414, - 362,1,0,0,0,414,363,1,0,0,0,414,364,1,0,0,0,414,365,1,0,0,0,414, - 366,1,0,0,0,414,367,1,0,0,0,414,368,1,0,0,0,414,369,1,0,0,0,414, - 377,1,0,0,0,414,381,1,0,0,0,414,385,1,0,0,0,414,389,1,0,0,0,414, - 400,1,0,0,0,414,405,1,0,0,0,414,411,1,0,0,0,414,412,1,0,0,0,414, - 413,1,0,0,0,415,51,1,0,0,0,416,421,3,28,14,0,417,418,5,232,0,0,418, - 420,3,28,14,0,419,417,1,0,0,0,420,423,1,0,0,0,421,419,1,0,0,0,421, - 422,1,0,0,0,422,53,1,0,0,0,423,421,1,0,0,0,424,425,5,167,0,0,425, - 426,5,230,0,0,426,427,5,231,0,0,427,55,1,0,0,0,428,429,5,1,0,0,429, - 430,5,230,0,0,430,431,3,28,14,0,431,432,5,231,0,0,432,918,1,0,0, - 0,433,434,5,2,0,0,434,435,5,230,0,0,435,436,3,28,14,0,436,437,5, - 231,0,0,437,918,1,0,0,0,438,439,5,3,0,0,439,440,5,230,0,0,440,441, - 3,28,14,0,441,442,5,231,0,0,442,918,1,0,0,0,443,444,5,4,0,0,444, - 445,5,230,0,0,445,446,3,28,14,0,446,447,5,231,0,0,447,918,1,0,0, - 0,448,449,5,5,0,0,449,450,5,230,0,0,450,451,3,28,14,0,451,452,5, - 231,0,0,452,918,1,0,0,0,453,454,5,6,0,0,454,455,5,230,0,0,455,456, - 3,28,14,0,456,457,5,231,0,0,457,918,1,0,0,0,458,459,5,8,0,0,459, - 460,5,230,0,0,460,461,3,28,14,0,461,462,5,231,0,0,462,918,1,0,0, - 0,463,464,5,9,0,0,464,465,5,230,0,0,465,466,3,28,14,0,466,467,5, - 231,0,0,467,918,1,0,0,0,468,469,5,10,0,0,469,470,5,230,0,0,470,471, - 3,28,14,0,471,472,5,231,0,0,472,918,1,0,0,0,473,474,5,11,0,0,474, - 475,5,230,0,0,475,476,3,28,14,0,476,477,5,231,0,0,477,918,1,0,0, - 0,478,479,5,12,0,0,479,480,5,230,0,0,480,481,3,28,14,0,481,482,5, - 231,0,0,482,918,1,0,0,0,483,484,5,13,0,0,484,485,5,230,0,0,485,486, - 3,28,14,0,486,487,5,231,0,0,487,918,1,0,0,0,488,489,5,14,0,0,489, - 490,5,230,0,0,490,491,3,28,14,0,491,492,5,231,0,0,492,918,1,0,0, - 0,493,494,5,15,0,0,494,495,5,230,0,0,495,496,3,28,14,0,496,497,5, - 231,0,0,497,918,1,0,0,0,498,499,5,16,0,0,499,500,5,230,0,0,500,501, - 3,28,14,0,501,502,5,231,0,0,502,918,1,0,0,0,503,504,5,17,0,0,504, - 505,5,230,0,0,505,506,3,28,14,0,506,507,5,231,0,0,507,918,1,0,0, - 0,508,509,5,18,0,0,509,510,5,230,0,0,510,511,3,28,14,0,511,512,5, - 231,0,0,512,918,1,0,0,0,513,514,5,23,0,0,514,515,5,230,0,0,515,518, - 3,28,14,0,516,517,5,232,0,0,517,519,3,28,14,0,518,516,1,0,0,0,518, - 519,1,0,0,0,519,520,1,0,0,0,520,521,5,231,0,0,521,918,1,0,0,0,522, - 523,5,25,0,0,523,524,5,230,0,0,524,525,3,28,14,0,525,526,5,231,0, - 0,526,918,1,0,0,0,527,528,5,26,0,0,528,529,5,230,0,0,529,530,3,28, - 14,0,530,531,5,231,0,0,531,918,1,0,0,0,532,533,5,27,0,0,533,534, - 5,230,0,0,534,535,3,28,14,0,535,536,5,231,0,0,536,918,1,0,0,0,537, - 538,5,28,0,0,538,539,5,230,0,0,539,540,3,28,14,0,540,541,5,231,0, - 0,541,918,1,0,0,0,542,543,5,30,0,0,543,544,5,230,0,0,544,545,3,28, - 14,0,545,546,5,231,0,0,546,918,1,0,0,0,547,548,5,34,0,0,548,549, - 5,230,0,0,549,550,3,28,14,0,550,551,5,231,0,0,551,918,1,0,0,0,552, - 553,5,35,0,0,553,554,5,230,0,0,554,555,3,28,14,0,555,556,5,231,0, - 0,556,918,1,0,0,0,557,558,5,41,0,0,558,559,5,230,0,0,559,560,3,28, - 14,0,560,561,5,231,0,0,561,918,1,0,0,0,562,563,5,42,0,0,563,564, - 5,230,0,0,564,565,3,28,14,0,565,566,5,231,0,0,566,918,1,0,0,0,567, - 568,5,43,0,0,568,569,5,230,0,0,569,570,3,28,14,0,570,571,5,231,0, - 0,571,918,1,0,0,0,572,573,5,44,0,0,573,574,5,230,0,0,574,575,3,28, - 14,0,575,576,5,231,0,0,576,918,1,0,0,0,577,578,5,45,0,0,578,579, - 5,230,0,0,579,580,3,28,14,0,580,581,5,231,0,0,581,918,1,0,0,0,582, - 583,5,36,0,0,583,584,5,230,0,0,584,585,3,28,14,0,585,586,5,231,0, - 0,586,918,1,0,0,0,587,588,5,58,0,0,588,589,5,230,0,0,589,590,3,28, - 14,0,590,591,5,231,0,0,591,918,1,0,0,0,592,593,5,59,0,0,593,594, - 5,230,0,0,594,597,3,28,14,0,595,596,5,232,0,0,596,598,3,28,14,0, - 597,595,1,0,0,0,597,598,1,0,0,0,598,599,1,0,0,0,599,600,5,231,0, - 0,600,918,1,0,0,0,601,602,5,60,0,0,602,603,5,230,0,0,603,604,3,28, - 14,0,604,605,5,231,0,0,605,918,1,0,0,0,606,607,5,61,0,0,607,608, - 5,230,0,0,608,609,3,28,14,0,609,610,5,231,0,0,610,918,1,0,0,0,611, - 612,5,62,0,0,612,613,5,230,0,0,613,614,3,28,14,0,614,615,5,231,0, - 0,615,918,1,0,0,0,616,617,5,168,0,0,617,618,5,230,0,0,618,625,3, - 28,14,0,619,620,5,232,0,0,620,623,3,28,14,0,621,622,5,232,0,0,622, - 624,3,28,14,0,623,621,1,0,0,0,623,624,1,0,0,0,624,626,1,0,0,0,625, - 619,1,0,0,0,625,626,1,0,0,0,626,627,1,0,0,0,627,628,5,231,0,0,628, - 918,1,0,0,0,629,630,5,70,0,0,630,631,5,230,0,0,631,632,3,28,14,0, - 632,633,5,231,0,0,633,918,1,0,0,0,634,635,5,71,0,0,635,636,5,230, - 0,0,636,637,3,28,14,0,637,638,5,231,0,0,638,918,1,0,0,0,639,640, - 5,72,0,0,640,641,5,230,0,0,641,644,3,28,14,0,642,643,5,232,0,0,643, - 645,3,28,14,0,644,642,1,0,0,0,644,645,1,0,0,0,645,646,1,0,0,0,646, - 647,5,231,0,0,647,918,1,0,0,0,648,649,5,74,0,0,649,650,5,230,0,0, - 650,651,3,28,14,0,651,652,5,231,0,0,652,918,1,0,0,0,653,654,5,75, - 0,0,654,655,5,230,0,0,655,656,3,28,14,0,656,657,5,231,0,0,657,918, - 1,0,0,0,658,659,5,76,0,0,659,660,5,230,0,0,660,663,3,28,14,0,661, - 662,5,232,0,0,662,664,3,28,14,0,663,661,1,0,0,0,663,664,1,0,0,0, - 664,665,1,0,0,0,665,666,5,231,0,0,666,918,1,0,0,0,667,668,5,87,0, - 0,668,669,5,230,0,0,669,670,3,28,14,0,670,671,5,231,0,0,671,918, - 1,0,0,0,672,673,5,88,0,0,673,674,5,230,0,0,674,675,3,28,14,0,675, - 676,5,231,0,0,676,918,1,0,0,0,677,678,5,89,0,0,678,679,5,230,0,0, - 679,680,3,28,14,0,680,681,5,231,0,0,681,918,1,0,0,0,682,683,5,90, - 0,0,683,684,5,230,0,0,684,685,3,28,14,0,685,686,5,231,0,0,686,918, - 1,0,0,0,687,688,5,91,0,0,688,689,5,230,0,0,689,690,3,28,14,0,690, - 691,5,231,0,0,691,918,1,0,0,0,692,693,5,96,0,0,693,694,5,230,0,0, - 694,695,3,28,14,0,695,696,5,232,0,0,696,699,3,28,14,0,697,698,5, - 232,0,0,698,700,3,28,14,0,699,697,1,0,0,0,699,700,1,0,0,0,700,701, - 1,0,0,0,701,702,5,231,0,0,702,918,1,0,0,0,703,704,5,77,0,0,704,705, - 5,230,0,0,705,706,3,28,14,0,706,707,5,231,0,0,707,918,1,0,0,0,708, - 709,5,123,0,0,709,710,5,230,0,0,710,711,3,28,14,0,711,712,5,231, - 0,0,712,918,1,0,0,0,713,714,5,124,0,0,714,715,5,230,0,0,715,716, - 3,28,14,0,716,717,5,231,0,0,717,918,1,0,0,0,718,719,5,125,0,0,719, - 720,5,230,0,0,720,721,3,28,14,0,721,722,5,231,0,0,722,918,1,0,0, - 0,723,724,5,126,0,0,724,725,5,230,0,0,725,726,3,28,14,0,726,727, - 5,231,0,0,727,918,1,0,0,0,728,729,5,169,0,0,729,730,5,230,0,0,730, - 737,3,28,14,0,731,732,5,232,0,0,732,735,3,28,14,0,733,734,5,232, - 0,0,734,736,3,28,14,0,735,733,1,0,0,0,735,736,1,0,0,0,736,738,1, - 0,0,0,737,731,1,0,0,0,737,738,1,0,0,0,738,739,1,0,0,0,739,740,5, - 231,0,0,740,918,1,0,0,0,741,742,5,170,0,0,742,743,5,230,0,0,743, - 746,3,28,14,0,744,745,5,232,0,0,745,747,3,28,14,0,746,744,1,0,0, - 0,746,747,1,0,0,0,747,748,1,0,0,0,748,749,5,231,0,0,749,918,1,0, - 0,0,750,751,5,171,0,0,751,752,5,230,0,0,752,755,3,28,14,0,753,754, - 5,232,0,0,754,756,3,28,14,0,755,753,1,0,0,0,755,756,1,0,0,0,756, - 757,1,0,0,0,757,758,5,231,0,0,758,918,1,0,0,0,759,760,5,172,0,0, - 760,761,5,230,0,0,761,764,3,28,14,0,762,763,5,232,0,0,763,765,3, - 28,14,0,764,762,1,0,0,0,764,765,1,0,0,0,765,766,1,0,0,0,766,767, - 5,231,0,0,767,918,1,0,0,0,768,769,5,173,0,0,769,770,5,230,0,0,770, - 773,3,28,14,0,771,772,5,232,0,0,772,774,3,28,14,0,773,771,1,0,0, - 0,773,774,1,0,0,0,774,775,1,0,0,0,775,776,5,231,0,0,776,918,1,0, - 0,0,777,778,5,68,0,0,778,779,5,230,0,0,779,780,3,28,14,0,780,781, - 5,231,0,0,781,918,1,0,0,0,782,783,5,69,0,0,783,784,5,230,0,0,784, - 785,3,28,14,0,785,786,5,231,0,0,786,918,1,0,0,0,787,788,5,174,0, - 0,788,789,5,230,0,0,789,790,3,28,14,0,790,791,5,231,0,0,791,918, - 1,0,0,0,792,793,5,97,0,0,793,794,5,230,0,0,794,795,3,28,14,0,795, - 796,5,231,0,0,796,918,1,0,0,0,797,798,5,102,0,0,798,799,5,230,0, - 0,799,800,3,28,14,0,800,801,5,231,0,0,801,918,1,0,0,0,802,803,5, - 103,0,0,803,804,5,230,0,0,804,805,3,28,14,0,805,806,5,231,0,0,806, - 918,1,0,0,0,807,808,5,113,0,0,808,809,5,230,0,0,809,810,3,28,14, - 0,810,811,5,231,0,0,811,918,1,0,0,0,812,813,5,114,0,0,813,814,5, - 230,0,0,814,815,3,28,14,0,815,816,5,231,0,0,816,918,1,0,0,0,817, - 818,5,115,0,0,818,819,5,230,0,0,819,820,3,28,14,0,820,821,5,231, - 0,0,821,918,1,0,0,0,822,823,5,132,0,0,823,824,5,230,0,0,824,825, - 3,28,14,0,825,826,5,231,0,0,826,918,1,0,0,0,827,828,5,133,0,0,828, - 829,5,230,0,0,829,830,3,28,14,0,830,831,5,231,0,0,831,918,1,0,0, - 0,832,833,5,134,0,0,833,834,5,230,0,0,834,835,3,28,14,0,835,836, - 5,231,0,0,836,918,1,0,0,0,837,838,5,183,0,0,838,839,5,230,0,0,839, - 840,3,28,14,0,840,841,5,231,0,0,841,918,1,0,0,0,842,843,5,32,0,0, - 843,844,5,230,0,0,844,845,3,28,14,0,845,846,5,231,0,0,846,918,1, - 0,0,0,847,848,5,140,0,0,848,849,5,230,0,0,849,852,3,28,14,0,850, - 851,5,232,0,0,851,853,3,28,14,0,852,850,1,0,0,0,852,853,1,0,0,0, - 853,854,1,0,0,0,854,855,5,231,0,0,855,918,1,0,0,0,856,857,5,141, - 0,0,857,858,5,230,0,0,858,861,3,28,14,0,859,860,5,232,0,0,860,862, - 3,28,14,0,861,859,1,0,0,0,861,862,1,0,0,0,862,863,1,0,0,0,863,864, - 5,231,0,0,864,918,1,0,0,0,865,866,5,142,0,0,866,867,5,230,0,0,867, - 870,3,28,14,0,868,869,5,232,0,0,869,871,3,28,14,0,870,868,1,0,0, - 0,870,871,1,0,0,0,871,872,1,0,0,0,872,873,5,231,0,0,873,918,1,0, - 0,0,874,875,5,143,0,0,875,876,5,230,0,0,876,879,3,28,14,0,877,878, - 5,232,0,0,878,880,3,28,14,0,879,877,1,0,0,0,879,880,1,0,0,0,880, - 881,1,0,0,0,881,882,5,231,0,0,882,918,1,0,0,0,883,884,5,130,0,0, - 884,885,5,230,0,0,885,886,3,28,14,0,886,887,5,231,0,0,887,918,1, - 0,0,0,888,889,5,131,0,0,889,890,5,230,0,0,890,891,3,28,14,0,891, - 892,5,231,0,0,892,918,1,0,0,0,893,894,5,104,0,0,894,895,5,230,0, - 0,895,896,3,28,14,0,896,897,5,231,0,0,897,918,1,0,0,0,898,899,5, - 105,0,0,899,900,5,230,0,0,900,901,3,28,14,0,901,902,5,231,0,0,902, - 918,1,0,0,0,903,904,5,156,0,0,904,905,5,230,0,0,905,906,3,28,14, - 0,906,907,5,231,0,0,907,918,1,0,0,0,908,909,5,157,0,0,909,910,5, - 230,0,0,910,913,3,28,14,0,911,912,5,232,0,0,912,914,3,28,14,0,913, - 911,1,0,0,0,913,914,1,0,0,0,914,915,1,0,0,0,915,916,5,231,0,0,916, - 918,1,0,0,0,917,428,1,0,0,0,917,433,1,0,0,0,917,438,1,0,0,0,917, - 443,1,0,0,0,917,448,1,0,0,0,917,453,1,0,0,0,917,458,1,0,0,0,917, - 463,1,0,0,0,917,468,1,0,0,0,917,473,1,0,0,0,917,478,1,0,0,0,917, - 483,1,0,0,0,917,488,1,0,0,0,917,493,1,0,0,0,917,498,1,0,0,0,917, - 503,1,0,0,0,917,508,1,0,0,0,917,513,1,0,0,0,917,522,1,0,0,0,917, - 527,1,0,0,0,917,532,1,0,0,0,917,537,1,0,0,0,917,542,1,0,0,0,917, - 547,1,0,0,0,917,552,1,0,0,0,917,557,1,0,0,0,917,562,1,0,0,0,917, - 567,1,0,0,0,917,572,1,0,0,0,917,577,1,0,0,0,917,582,1,0,0,0,917, - 587,1,0,0,0,917,592,1,0,0,0,917,601,1,0,0,0,917,606,1,0,0,0,917, - 611,1,0,0,0,917,616,1,0,0,0,917,629,1,0,0,0,917,634,1,0,0,0,917, - 639,1,0,0,0,917,648,1,0,0,0,917,653,1,0,0,0,917,658,1,0,0,0,917, - 667,1,0,0,0,917,672,1,0,0,0,917,677,1,0,0,0,917,682,1,0,0,0,917, - 687,1,0,0,0,917,692,1,0,0,0,917,703,1,0,0,0,917,708,1,0,0,0,917, - 713,1,0,0,0,917,718,1,0,0,0,917,723,1,0,0,0,917,728,1,0,0,0,917, - 741,1,0,0,0,917,750,1,0,0,0,917,759,1,0,0,0,917,768,1,0,0,0,917, - 777,1,0,0,0,917,782,1,0,0,0,917,787,1,0,0,0,917,792,1,0,0,0,917, - 797,1,0,0,0,917,802,1,0,0,0,917,807,1,0,0,0,917,812,1,0,0,0,917, - 817,1,0,0,0,917,822,1,0,0,0,917,827,1,0,0,0,917,832,1,0,0,0,917, - 837,1,0,0,0,917,842,1,0,0,0,917,847,1,0,0,0,917,856,1,0,0,0,917, - 865,1,0,0,0,917,874,1,0,0,0,917,883,1,0,0,0,917,888,1,0,0,0,917, - 893,1,0,0,0,917,898,1,0,0,0,917,903,1,0,0,0,917,908,1,0,0,0,918, - 57,1,0,0,0,919,920,5,29,0,0,920,921,5,230,0,0,921,922,3,28,14,0, - 922,923,5,232,0,0,923,924,3,28,14,0,924,925,5,231,0,0,925,1288,1, - 0,0,0,926,927,5,7,0,0,927,928,5,230,0,0,928,929,3,28,14,0,929,930, - 5,232,0,0,930,931,3,28,14,0,931,932,5,231,0,0,932,1288,1,0,0,0,933, - 934,5,21,0,0,934,935,5,230,0,0,935,936,3,28,14,0,936,937,5,232,0, - 0,937,938,3,28,14,0,938,939,5,231,0,0,939,1288,1,0,0,0,940,941,5, - 22,0,0,941,942,5,230,0,0,942,943,3,28,14,0,943,944,5,232,0,0,944, - 945,3,28,14,0,945,946,5,231,0,0,946,1288,1,0,0,0,947,948,5,24,0, - 0,948,949,5,230,0,0,949,952,3,28,14,0,950,951,5,232,0,0,951,953, - 3,28,14,0,952,950,1,0,0,0,952,953,1,0,0,0,953,954,1,0,0,0,954,955, - 5,231,0,0,955,1288,1,0,0,0,956,957,5,39,0,0,957,958,5,230,0,0,958, - 959,3,28,14,0,959,960,5,232,0,0,960,961,3,28,14,0,961,962,5,231, - 0,0,962,1288,1,0,0,0,963,964,5,56,0,0,964,965,5,230,0,0,965,966, - 3,28,14,0,966,967,5,232,0,0,967,968,3,28,14,0,968,969,5,231,0,0, - 969,1288,1,0,0,0,970,971,5,57,0,0,971,972,5,230,0,0,972,973,3,28, - 14,0,973,974,5,232,0,0,974,975,3,28,14,0,975,976,5,231,0,0,976,1288, - 1,0,0,0,977,978,5,63,0,0,978,979,5,230,0,0,979,980,3,28,14,0,980, - 981,5,232,0,0,981,982,3,28,14,0,982,983,5,231,0,0,983,1288,1,0,0, - 0,984,985,5,64,0,0,985,986,5,230,0,0,986,987,3,28,14,0,987,988,5, - 232,0,0,988,989,3,28,14,0,989,990,5,231,0,0,990,1288,1,0,0,0,991, - 992,5,65,0,0,992,993,5,230,0,0,993,994,3,28,14,0,994,995,5,232,0, - 0,995,996,3,28,14,0,996,997,5,231,0,0,997,1288,1,0,0,0,998,999,5, - 66,0,0,999,1000,5,230,0,0,1000,1001,3,28,14,0,1001,1002,5,232,0, - 0,1002,1003,3,28,14,0,1003,1004,5,231,0,0,1004,1288,1,0,0,0,1005, - 1006,5,86,0,0,1006,1007,5,230,0,0,1007,1008,3,28,14,0,1008,1009, - 5,232,0,0,1009,1010,3,28,14,0,1010,1011,5,231,0,0,1011,1288,1,0, - 0,0,1012,1013,5,176,0,0,1013,1014,5,230,0,0,1014,1015,3,28,14,0, - 1015,1016,5,232,0,0,1016,1017,3,28,14,0,1017,1018,5,231,0,0,1018, - 1288,1,0,0,0,1019,1020,5,177,0,0,1020,1021,5,230,0,0,1021,1022,3, - 28,14,0,1022,1023,5,232,0,0,1023,1024,3,28,14,0,1024,1025,5,231, - 0,0,1025,1288,1,0,0,0,1026,1027,5,175,0,0,1027,1028,5,230,0,0,1028, - 1029,3,28,14,0,1029,1030,5,232,0,0,1030,1031,3,28,14,0,1031,1032, - 5,231,0,0,1032,1288,1,0,0,0,1033,1034,5,181,0,0,1034,1035,5,230, - 0,0,1035,1036,3,28,14,0,1036,1037,5,232,0,0,1037,1038,3,28,14,0, - 1038,1039,5,231,0,0,1039,1288,1,0,0,0,1040,1041,5,182,0,0,1041,1042, - 5,230,0,0,1042,1043,3,28,14,0,1043,1044,5,232,0,0,1044,1045,3,28, - 14,0,1045,1046,5,231,0,0,1046,1288,1,0,0,0,1047,1048,5,98,0,0,1048, - 1049,5,230,0,0,1049,1050,3,28,14,0,1050,1051,5,232,0,0,1051,1052, - 3,28,14,0,1052,1053,5,231,0,0,1053,1288,1,0,0,0,1054,1055,5,120, - 0,0,1055,1056,5,230,0,0,1056,1057,3,28,14,0,1057,1058,5,232,0,0, - 1058,1059,3,28,14,0,1059,1060,5,232,0,0,1060,1061,3,28,14,0,1061, - 1062,5,231,0,0,1062,1288,1,0,0,0,1063,1064,5,51,0,0,1064,1065,5, - 230,0,0,1065,1066,3,28,14,0,1066,1067,5,232,0,0,1067,1068,3,28,14, - 0,1068,1069,5,231,0,0,1069,1288,1,0,0,0,1070,1071,5,73,0,0,1071, - 1072,5,230,0,0,1072,1073,3,28,14,0,1073,1074,5,232,0,0,1074,1077, - 3,28,14,0,1075,1076,5,232,0,0,1076,1078,3,28,14,0,1077,1075,1,0, - 0,0,1077,1078,1,0,0,0,1078,1079,1,0,0,0,1079,1080,5,231,0,0,1080, - 1288,1,0,0,0,1081,1082,5,78,0,0,1082,1083,5,230,0,0,1083,1084,3, - 28,14,0,1084,1085,5,232,0,0,1085,1086,3,28,14,0,1086,1087,5,231, - 0,0,1087,1288,1,0,0,0,1088,1089,5,79,0,0,1089,1090,5,230,0,0,1090, - 1091,3,28,14,0,1091,1092,5,232,0,0,1092,1093,3,28,14,0,1093,1094, - 5,231,0,0,1094,1288,1,0,0,0,1095,1096,5,101,0,0,1096,1097,5,230, - 0,0,1097,1098,3,28,14,0,1098,1099,5,232,0,0,1099,1100,3,28,14,0, - 1100,1101,5,231,0,0,1101,1288,1,0,0,0,1102,1103,5,122,0,0,1103,1104, - 5,230,0,0,1104,1105,3,28,14,0,1105,1106,5,232,0,0,1106,1107,3,28, - 14,0,1107,1108,5,231,0,0,1108,1288,1,0,0,0,1109,1110,5,99,0,0,1110, - 1111,5,230,0,0,1111,1112,3,28,14,0,1112,1113,5,232,0,0,1113,1114, - 3,28,14,0,1114,1115,5,231,0,0,1115,1288,1,0,0,0,1116,1117,5,119, - 0,0,1117,1118,5,230,0,0,1118,1125,3,46,23,0,1119,1120,5,232,0,0, - 1120,1123,3,28,14,0,1121,1122,5,232,0,0,1122,1124,3,28,14,0,1123, - 1121,1,0,0,0,1123,1124,1,0,0,0,1124,1126,1,0,0,0,1125,1119,1,0,0, - 0,1125,1126,1,0,0,0,1126,1127,1,0,0,0,1127,1128,5,231,0,0,1128,1288, - 1,0,0,0,1129,1130,5,109,0,0,1130,1131,5,230,0,0,1131,1132,3,28,14, - 0,1132,1133,5,232,0,0,1133,1134,3,28,14,0,1134,1135,5,231,0,0,1135, - 1288,1,0,0,0,1136,1137,5,110,0,0,1137,1138,5,230,0,0,1138,1139,3, - 28,14,0,1139,1140,5,232,0,0,1140,1141,3,28,14,0,1141,1142,5,231, - 0,0,1142,1288,1,0,0,0,1143,1144,5,111,0,0,1144,1145,5,230,0,0,1145, - 1146,3,28,14,0,1146,1147,5,232,0,0,1147,1148,3,28,14,0,1148,1149, - 5,231,0,0,1149,1288,1,0,0,0,1150,1151,5,100,0,0,1151,1152,5,230, - 0,0,1152,1153,3,28,14,0,1153,1154,5,232,0,0,1154,1155,3,28,14,0, - 1155,1156,5,231,0,0,1156,1288,1,0,0,0,1157,1158,5,112,0,0,1158,1159, - 5,230,0,0,1159,1160,3,28,14,0,1160,1161,5,232,0,0,1161,1172,3,28, - 14,0,1162,1163,5,232,0,0,1163,1170,3,28,14,0,1164,1165,5,232,0,0, - 1165,1168,3,28,14,0,1166,1167,5,232,0,0,1167,1169,3,28,14,0,1168, - 1166,1,0,0,0,1168,1169,1,0,0,0,1169,1171,1,0,0,0,1170,1164,1,0,0, - 0,1170,1171,1,0,0,0,1171,1173,1,0,0,0,1172,1162,1,0,0,0,1172,1173, - 1,0,0,0,1173,1174,1,0,0,0,1174,1175,5,231,0,0,1175,1288,1,0,0,0, - 1176,1177,5,116,0,0,1177,1178,5,230,0,0,1178,1179,3,28,14,0,1179, - 1180,5,232,0,0,1180,1181,3,28,14,0,1181,1182,5,231,0,0,1182,1288, - 1,0,0,0,1183,1184,5,117,0,0,1184,1185,5,230,0,0,1185,1186,3,28,14, - 0,1186,1187,5,232,0,0,1187,1188,3,28,14,0,1188,1189,5,231,0,0,1189, - 1288,1,0,0,0,1190,1191,5,118,0,0,1191,1192,5,230,0,0,1192,1193,3, - 28,14,0,1193,1194,5,232,0,0,1194,1195,3,28,14,0,1195,1196,5,231, - 0,0,1196,1288,1,0,0,0,1197,1198,5,135,0,0,1198,1199,5,230,0,0,1199, - 1202,3,28,14,0,1200,1201,5,232,0,0,1201,1203,3,28,14,0,1202,1200, - 1,0,0,0,1202,1203,1,0,0,0,1203,1204,1,0,0,0,1204,1205,5,231,0,0, - 1205,1288,1,0,0,0,1206,1207,5,136,0,0,1207,1208,5,230,0,0,1208,1211, - 3,28,14,0,1209,1210,5,232,0,0,1210,1212,3,28,14,0,1211,1209,1,0, - 0,0,1211,1212,1,0,0,0,1212,1213,1,0,0,0,1213,1214,5,231,0,0,1214, - 1288,1,0,0,0,1215,1216,5,137,0,0,1216,1217,5,230,0,0,1217,1218,3, - 28,14,0,1218,1219,5,232,0,0,1219,1222,3,28,14,0,1220,1221,5,232, - 0,0,1221,1223,3,28,14,0,1222,1220,1,0,0,0,1222,1223,1,0,0,0,1223, - 1224,1,0,0,0,1224,1225,5,231,0,0,1225,1288,1,0,0,0,1226,1227,5,138, - 0,0,1227,1228,5,230,0,0,1228,1229,3,28,14,0,1229,1230,5,232,0,0, - 1230,1231,3,28,14,0,1231,1232,5,231,0,0,1232,1288,1,0,0,0,1233,1234, - 5,139,0,0,1234,1235,5,230,0,0,1235,1236,3,28,14,0,1236,1237,5,232, - 0,0,1237,1238,3,28,14,0,1238,1239,5,232,0,0,1239,1240,3,28,14,0, - 1240,1241,5,231,0,0,1241,1288,1,0,0,0,1242,1243,5,150,0,0,1243,1244, - 5,230,0,0,1244,1245,3,28,14,0,1245,1246,5,231,0,0,1246,1288,1,0, - 0,0,1247,1248,5,151,0,0,1248,1249,5,230,0,0,1249,1255,3,28,14,0, - 1250,1251,5,232,0,0,1251,1252,3,28,14,0,1252,1253,5,232,0,0,1253, - 1254,3,28,14,0,1254,1256,1,0,0,0,1255,1250,1,0,0,0,1255,1256,1,0, - 0,0,1256,1257,1,0,0,0,1257,1258,5,231,0,0,1258,1288,1,0,0,0,1259, - 1260,5,152,0,0,1260,1261,5,230,0,0,1261,1262,3,28,14,0,1262,1263, - 5,232,0,0,1263,1264,3,28,14,0,1264,1265,5,231,0,0,1265,1288,1,0, - 0,0,1266,1267,5,153,0,0,1267,1268,5,230,0,0,1268,1269,3,28,14,0, - 1269,1270,5,232,0,0,1270,1271,3,28,14,0,1271,1272,5,231,0,0,1272, - 1288,1,0,0,0,1273,1274,5,154,0,0,1274,1275,5,230,0,0,1275,1276,3, - 28,14,0,1276,1277,5,232,0,0,1277,1278,3,28,14,0,1278,1279,5,231, - 0,0,1279,1288,1,0,0,0,1280,1281,5,121,0,0,1281,1282,5,230,0,0,1282, - 1283,3,28,14,0,1283,1284,5,232,0,0,1284,1285,3,28,14,0,1285,1286, - 5,231,0,0,1286,1288,1,0,0,0,1287,919,1,0,0,0,1287,926,1,0,0,0,1287, - 933,1,0,0,0,1287,940,1,0,0,0,1287,947,1,0,0,0,1287,956,1,0,0,0,1287, - 963,1,0,0,0,1287,970,1,0,0,0,1287,977,1,0,0,0,1287,984,1,0,0,0,1287, - 991,1,0,0,0,1287,998,1,0,0,0,1287,1005,1,0,0,0,1287,1012,1,0,0,0, - 1287,1019,1,0,0,0,1287,1026,1,0,0,0,1287,1033,1,0,0,0,1287,1040, - 1,0,0,0,1287,1047,1,0,0,0,1287,1054,1,0,0,0,1287,1063,1,0,0,0,1287, - 1070,1,0,0,0,1287,1081,1,0,0,0,1287,1088,1,0,0,0,1287,1095,1,0,0, - 0,1287,1102,1,0,0,0,1287,1109,1,0,0,0,1287,1116,1,0,0,0,1287,1129, - 1,0,0,0,1287,1136,1,0,0,0,1287,1143,1,0,0,0,1287,1150,1,0,0,0,1287, - 1157,1,0,0,0,1287,1176,1,0,0,0,1287,1183,1,0,0,0,1287,1190,1,0,0, - 0,1287,1197,1,0,0,0,1287,1206,1,0,0,0,1287,1215,1,0,0,0,1287,1226, - 1,0,0,0,1287,1233,1,0,0,0,1287,1242,1,0,0,0,1287,1247,1,0,0,0,1287, - 1259,1,0,0,0,1287,1266,1,0,0,0,1287,1273,1,0,0,0,1287,1280,1,0,0, - 0,1288,59,1,0,0,0,1289,1290,5,31,0,0,1290,1291,5,230,0,0,1291,1292, - 3,28,14,0,1292,1293,5,232,0,0,1293,1294,3,28,14,0,1294,1295,5,232, - 0,0,1295,1296,3,28,14,0,1296,1297,5,231,0,0,1297,1595,1,0,0,0,1298, - 1299,5,38,0,0,1299,1300,5,230,0,0,1300,1301,3,28,14,0,1301,1302, - 5,232,0,0,1302,1303,3,28,14,0,1303,1304,5,232,0,0,1304,1305,3,28, - 14,0,1305,1306,5,231,0,0,1306,1595,1,0,0,0,1307,1308,5,40,0,0,1308, - 1309,5,230,0,0,1309,1310,3,28,14,0,1310,1311,5,232,0,0,1311,1312, - 3,28,14,0,1312,1313,5,232,0,0,1313,1314,3,28,14,0,1314,1315,5,231, - 0,0,1315,1595,1,0,0,0,1316,1317,5,50,0,0,1317,1318,5,230,0,0,1318, - 1319,3,28,14,0,1319,1320,5,232,0,0,1320,1321,3,28,14,0,1321,1322, - 5,232,0,0,1322,1323,3,28,14,0,1323,1324,5,231,0,0,1324,1595,1,0, - 0,0,1325,1326,5,53,0,0,1326,1327,5,230,0,0,1327,1328,3,28,14,0,1328, - 1329,5,232,0,0,1329,1330,3,28,14,0,1330,1331,5,232,0,0,1331,1332, - 3,28,14,0,1332,1333,5,231,0,0,1333,1595,1,0,0,0,1334,1335,5,67,0, - 0,1335,1336,5,230,0,0,1336,1337,3,28,14,0,1337,1338,5,232,0,0,1338, - 1339,3,28,14,0,1339,1340,5,232,0,0,1340,1341,3,28,14,0,1341,1342, - 5,231,0,0,1342,1595,1,0,0,0,1343,1344,5,80,0,0,1344,1345,5,230,0, - 0,1345,1346,3,28,14,0,1346,1347,5,232,0,0,1347,1348,3,28,14,0,1348, - 1349,5,232,0,0,1349,1350,3,28,14,0,1350,1351,5,231,0,0,1351,1595, - 1,0,0,0,1352,1353,5,81,0,0,1353,1354,5,230,0,0,1354,1355,3,28,14, - 0,1355,1356,5,232,0,0,1356,1357,3,28,14,0,1357,1358,5,232,0,0,1358, - 1359,3,28,14,0,1359,1360,5,231,0,0,1360,1595,1,0,0,0,1361,1362,5, - 82,0,0,1362,1363,5,230,0,0,1363,1364,3,28,14,0,1364,1365,5,232,0, - 0,1365,1366,3,28,14,0,1366,1367,5,232,0,0,1367,1368,3,28,14,0,1368, - 1369,5,231,0,0,1369,1595,1,0,0,0,1370,1371,5,83,0,0,1371,1372,5, - 230,0,0,1372,1373,3,28,14,0,1373,1374,5,232,0,0,1374,1375,3,28,14, - 0,1375,1376,5,232,0,0,1376,1377,3,28,14,0,1377,1378,5,231,0,0,1378, - 1595,1,0,0,0,1379,1380,5,184,0,0,1380,1381,5,230,0,0,1381,1382,3, - 28,14,0,1382,1383,5,232,0,0,1383,1384,3,28,14,0,1384,1385,5,232, - 0,0,1385,1386,3,28,14,0,1386,1387,5,231,0,0,1387,1595,1,0,0,0,1388, - 1389,5,33,0,0,1389,1390,5,230,0,0,1390,1393,3,28,14,0,1391,1392, - 5,232,0,0,1392,1394,3,28,14,0,1393,1391,1,0,0,0,1393,1394,1,0,0, - 0,1394,1395,1,0,0,0,1395,1396,5,231,0,0,1396,1595,1,0,0,0,1397,1398, - 5,108,0,0,1398,1399,5,230,0,0,1399,1400,3,28,14,0,1400,1401,5,232, - 0,0,1401,1402,3,28,14,0,1402,1403,5,232,0,0,1403,1406,3,28,14,0, - 1404,1405,5,232,0,0,1405,1407,3,28,14,0,1406,1404,1,0,0,0,1406,1407, - 1,0,0,0,1407,1408,1,0,0,0,1408,1409,5,231,0,0,1409,1595,1,0,0,0, - 1410,1411,5,54,0,0,1411,1412,5,230,0,0,1412,1413,3,28,14,0,1413, - 1414,5,232,0,0,1414,1415,3,28,14,0,1415,1416,5,232,0,0,1416,1417, - 3,28,14,0,1417,1418,5,231,0,0,1418,1595,1,0,0,0,1419,1420,5,180, - 0,0,1420,1421,5,230,0,0,1421,1422,3,28,14,0,1422,1423,5,232,0,0, - 1423,1426,3,28,14,0,1424,1425,5,232,0,0,1425,1427,3,28,14,0,1426, - 1424,1,0,0,0,1426,1427,1,0,0,0,1427,1428,1,0,0,0,1428,1429,5,231, - 0,0,1429,1595,1,0,0,0,1430,1431,5,144,0,0,1431,1432,5,230,0,0,1432, - 1438,3,28,14,0,1433,1434,5,232,0,0,1434,1435,3,28,14,0,1435,1436, - 5,232,0,0,1436,1437,3,28,14,0,1437,1439,1,0,0,0,1438,1433,1,0,0, - 0,1438,1439,1,0,0,0,1439,1440,1,0,0,0,1440,1441,5,231,0,0,1441,1595, - 1,0,0,0,1442,1443,5,145,0,0,1443,1444,5,230,0,0,1444,1450,3,28,14, - 0,1445,1446,5,232,0,0,1446,1447,3,28,14,0,1447,1448,5,232,0,0,1448, - 1449,3,28,14,0,1449,1451,1,0,0,0,1450,1445,1,0,0,0,1450,1451,1,0, - 0,0,1451,1452,1,0,0,0,1452,1453,5,231,0,0,1453,1595,1,0,0,0,1454, - 1455,5,148,0,0,1455,1456,5,230,0,0,1456,1462,3,28,14,0,1457,1458, - 5,232,0,0,1458,1459,3,28,14,0,1459,1460,5,232,0,0,1460,1461,3,28, - 14,0,1461,1463,1,0,0,0,1462,1457,1,0,0,0,1462,1463,1,0,0,0,1463, - 1466,1,0,0,0,1464,1465,5,232,0,0,1465,1467,3,28,14,0,1466,1464,1, - 0,0,0,1466,1467,1,0,0,0,1467,1468,1,0,0,0,1468,1469,5,231,0,0,1469, - 1595,1,0,0,0,1470,1471,5,149,0,0,1471,1472,5,230,0,0,1472,1478,3, - 28,14,0,1473,1474,5,232,0,0,1474,1475,3,28,14,0,1475,1476,5,232, - 0,0,1476,1477,3,28,14,0,1477,1479,1,0,0,0,1478,1473,1,0,0,0,1478, - 1479,1,0,0,0,1479,1482,1,0,0,0,1480,1481,5,232,0,0,1481,1483,3,28, - 14,0,1482,1480,1,0,0,0,1482,1483,1,0,0,0,1483,1484,1,0,0,0,1484, - 1485,5,231,0,0,1485,1595,1,0,0,0,1486,1487,5,106,0,0,1487,1488,5, - 230,0,0,1488,1489,3,28,14,0,1489,1490,5,232,0,0,1490,1491,3,28,14, - 0,1491,1492,5,232,0,0,1492,1493,3,28,14,0,1493,1494,5,231,0,0,1494, - 1595,1,0,0,0,1495,1496,5,146,0,0,1496,1497,5,230,0,0,1497,1503,3, - 28,14,0,1498,1499,5,232,0,0,1499,1500,3,28,14,0,1500,1501,5,232, - 0,0,1501,1502,3,28,14,0,1502,1504,1,0,0,0,1503,1498,1,0,0,0,1503, - 1504,1,0,0,0,1504,1505,1,0,0,0,1505,1506,5,231,0,0,1506,1595,1,0, - 0,0,1507,1508,5,147,0,0,1508,1509,5,230,0,0,1509,1515,3,28,14,0, - 1510,1511,5,232,0,0,1511,1512,3,28,14,0,1512,1513,5,232,0,0,1513, - 1514,3,28,14,0,1514,1516,1,0,0,0,1515,1510,1,0,0,0,1515,1516,1,0, - 0,0,1516,1517,1,0,0,0,1517,1518,5,231,0,0,1518,1595,1,0,0,0,1519, - 1520,5,155,0,0,1520,1521,5,230,0,0,1521,1522,3,28,14,0,1522,1523, - 5,232,0,0,1523,1524,3,28,14,0,1524,1525,5,232,0,0,1525,1528,3,28, - 14,0,1526,1527,5,232,0,0,1527,1529,3,28,14,0,1528,1526,1,0,0,0,1528, - 1529,1,0,0,0,1529,1532,1,0,0,0,1530,1531,5,232,0,0,1531,1533,3,28, - 14,0,1532,1530,1,0,0,0,1532,1533,1,0,0,0,1533,1536,1,0,0,0,1534, - 1535,5,232,0,0,1535,1537,3,28,14,0,1536,1534,1,0,0,0,1536,1537,1, - 0,0,0,1537,1540,1,0,0,0,1538,1539,5,232,0,0,1539,1541,3,28,14,0, - 1540,1538,1,0,0,0,1540,1541,1,0,0,0,1541,1544,1,0,0,0,1542,1543, - 5,232,0,0,1543,1545,3,28,14,0,1544,1542,1,0,0,0,1544,1545,1,0,0, - 0,1545,1548,1,0,0,0,1546,1547,5,232,0,0,1547,1549,3,28,14,0,1548, - 1546,1,0,0,0,1548,1549,1,0,0,0,1549,1550,1,0,0,0,1550,1551,5,231, - 0,0,1551,1595,1,0,0,0,1552,1553,5,186,0,0,1553,1554,5,230,0,0,1554, - 1555,3,28,14,0,1555,1556,5,232,0,0,1556,1559,3,28,14,0,1557,1558, - 5,232,0,0,1558,1560,3,28,14,0,1559,1557,1,0,0,0,1559,1560,1,0,0, - 0,1560,1561,1,0,0,0,1561,1562,5,231,0,0,1562,1595,1,0,0,0,1563,1564, - 5,187,0,0,1564,1565,5,230,0,0,1565,1566,3,28,14,0,1566,1567,5,232, - 0,0,1567,1568,3,28,14,0,1568,1569,5,232,0,0,1569,1570,3,28,14,0, - 1570,1571,5,231,0,0,1571,1595,1,0,0,0,1572,1573,5,188,0,0,1573,1574, - 5,230,0,0,1574,1575,3,28,14,0,1575,1576,5,232,0,0,1576,1577,3,28, - 14,0,1577,1578,5,232,0,0,1578,1579,3,28,14,0,1579,1580,5,232,0,0, - 1580,1581,3,28,14,0,1581,1582,5,231,0,0,1582,1595,1,0,0,0,1583,1584, - 5,189,0,0,1584,1585,5,230,0,0,1585,1586,3,28,14,0,1586,1587,5,232, - 0,0,1587,1588,3,28,14,0,1588,1589,5,232,0,0,1589,1590,3,28,14,0, - 1590,1591,5,232,0,0,1591,1592,3,28,14,0,1592,1593,5,231,0,0,1593, - 1595,1,0,0,0,1594,1289,1,0,0,0,1594,1298,1,0,0,0,1594,1307,1,0,0, - 0,1594,1316,1,0,0,0,1594,1325,1,0,0,0,1594,1334,1,0,0,0,1594,1343, - 1,0,0,0,1594,1352,1,0,0,0,1594,1361,1,0,0,0,1594,1370,1,0,0,0,1594, - 1379,1,0,0,0,1594,1388,1,0,0,0,1594,1397,1,0,0,0,1594,1410,1,0,0, - 0,1594,1419,1,0,0,0,1594,1430,1,0,0,0,1594,1442,1,0,0,0,1594,1454, - 1,0,0,0,1594,1470,1,0,0,0,1594,1486,1,0,0,0,1594,1495,1,0,0,0,1594, - 1507,1,0,0,0,1594,1519,1,0,0,0,1594,1552,1,0,0,0,1594,1563,1,0,0, - 0,1594,1572,1,0,0,0,1594,1583,1,0,0,0,1595,61,1,0,0,0,1596,1597, - 5,49,0,0,1597,1598,5,230,0,0,1598,1599,3,28,14,0,1599,1600,5,232, - 0,0,1600,1601,3,28,14,0,1601,1602,5,232,0,0,1602,1603,3,28,14,0, - 1603,1604,5,232,0,0,1604,1605,3,28,14,0,1605,1606,5,231,0,0,1606, - 1652,1,0,0,0,1607,1608,5,37,0,0,1608,1609,5,230,0,0,1609,1610,3, - 28,14,0,1610,1611,5,232,0,0,1611,1612,3,28,14,0,1612,1613,5,232, - 0,0,1613,1614,3,28,14,0,1614,1615,5,232,0,0,1615,1616,3,28,14,0, - 1616,1617,5,231,0,0,1617,1652,1,0,0,0,1618,1619,5,55,0,0,1619,1620, - 5,230,0,0,1620,1621,3,28,14,0,1621,1622,5,232,0,0,1622,1623,3,28, - 14,0,1623,1624,5,232,0,0,1624,1625,3,28,14,0,1625,1626,5,232,0,0, - 1626,1627,3,28,14,0,1627,1628,5,231,0,0,1628,1652,1,0,0,0,1629,1630, - 5,84,0,0,1630,1631,5,230,0,0,1631,1632,3,28,14,0,1632,1633,5,232, - 0,0,1633,1634,3,28,14,0,1634,1635,5,232,0,0,1635,1636,3,28,14,0, - 1636,1637,5,232,0,0,1637,1638,3,28,14,0,1638,1639,5,231,0,0,1639, - 1652,1,0,0,0,1640,1641,5,107,0,0,1641,1642,5,230,0,0,1642,1643,3, - 28,14,0,1643,1644,5,232,0,0,1644,1645,3,28,14,0,1645,1646,5,232, - 0,0,1646,1647,3,28,14,0,1647,1648,5,232,0,0,1648,1649,3,28,14,0, - 1649,1650,5,231,0,0,1650,1652,1,0,0,0,1651,1596,1,0,0,0,1651,1607, - 1,0,0,0,1651,1618,1,0,0,0,1651,1629,1,0,0,0,1651,1640,1,0,0,0,1652, - 63,1,0,0,0,1653,1654,5,85,0,0,1654,1655,5,230,0,0,1655,1656,3,28, - 14,0,1656,1657,5,232,0,0,1657,1658,3,28,14,0,1658,1659,5,232,0,0, - 1659,1660,3,28,14,0,1660,1661,5,232,0,0,1661,1662,3,28,14,0,1662, - 1663,5,232,0,0,1663,1664,3,28,14,0,1664,1665,5,231,0,0,1665,1686, - 1,0,0,0,1666,1667,5,158,0,0,1667,1668,5,230,0,0,1668,1669,3,28,14, - 0,1669,1670,5,232,0,0,1670,1681,3,28,14,0,1671,1672,5,232,0,0,1672, - 1679,3,28,14,0,1673,1674,5,232,0,0,1674,1677,3,28,14,0,1675,1676, - 5,232,0,0,1676,1678,3,28,14,0,1677,1675,1,0,0,0,1677,1678,1,0,0, - 0,1678,1680,1,0,0,0,1679,1673,1,0,0,0,1679,1680,1,0,0,0,1680,1682, - 1,0,0,0,1681,1671,1,0,0,0,1681,1682,1,0,0,0,1682,1683,1,0,0,0,1683, - 1684,5,231,0,0,1684,1686,1,0,0,0,1685,1653,1,0,0,0,1685,1666,1,0, - 0,0,1686,65,1,0,0,0,1687,1688,5,19,0,0,1688,1689,5,230,0,0,1689, - 1694,3,28,14,0,1690,1691,5,232,0,0,1691,1693,3,28,14,0,1692,1690, - 1,0,0,0,1693,1696,1,0,0,0,1694,1692,1,0,0,0,1694,1695,1,0,0,0,1695, - 1697,1,0,0,0,1696,1694,1,0,0,0,1697,1698,5,231,0,0,1698,1817,1,0, - 0,0,1699,1700,5,20,0,0,1700,1701,5,230,0,0,1701,1706,3,28,14,0,1702, - 1703,5,232,0,0,1703,1705,3,28,14,0,1704,1702,1,0,0,0,1705,1708,1, - 0,0,0,1706,1704,1,0,0,0,1706,1707,1,0,0,0,1707,1709,1,0,0,0,1708, - 1706,1,0,0,0,1709,1710,5,231,0,0,1710,1817,1,0,0,0,1711,1712,5,46, - 0,0,1712,1713,5,230,0,0,1713,1714,3,28,14,0,1714,1715,5,232,0,0, - 1715,1722,3,28,14,0,1716,1717,5,232,0,0,1717,1720,3,28,14,0,1718, - 1719,5,232,0,0,1719,1721,3,28,14,0,1720,1718,1,0,0,0,1720,1721,1, - 0,0,0,1721,1723,1,0,0,0,1722,1716,1,0,0,0,1722,1723,1,0,0,0,1723, - 1724,1,0,0,0,1724,1725,5,231,0,0,1725,1817,1,0,0,0,1726,1727,5,47, - 0,0,1727,1728,5,230,0,0,1728,1731,3,28,14,0,1729,1730,5,232,0,0, - 1730,1732,3,28,14,0,1731,1729,1,0,0,0,1732,1733,1,0,0,0,1733,1731, - 1,0,0,0,1733,1734,1,0,0,0,1734,1735,1,0,0,0,1735,1736,5,231,0,0, - 1736,1817,1,0,0,0,1737,1738,5,48,0,0,1738,1739,5,230,0,0,1739,1742, - 3,28,14,0,1740,1741,5,232,0,0,1741,1743,3,28,14,0,1742,1740,1,0, - 0,0,1743,1744,1,0,0,0,1744,1742,1,0,0,0,1744,1745,1,0,0,0,1745,1746, - 1,0,0,0,1746,1747,5,231,0,0,1747,1817,1,0,0,0,1748,1749,5,52,0,0, - 1749,1750,5,230,0,0,1750,1751,3,28,14,0,1751,1752,5,232,0,0,1752, - 1753,3,28,14,0,1753,1754,5,231,0,0,1754,1817,1,0,0,0,1755,1756,5, - 178,0,0,1756,1757,5,230,0,0,1757,1760,3,28,14,0,1758,1759,5,232, - 0,0,1759,1761,3,28,14,0,1760,1758,1,0,0,0,1760,1761,1,0,0,0,1761, - 1762,1,0,0,0,1762,1763,5,231,0,0,1763,1817,1,0,0,0,1764,1765,5,179, - 0,0,1765,1766,5,230,0,0,1766,1767,3,28,14,0,1767,1768,5,232,0,0, - 1768,1769,3,28,14,0,1769,1770,5,231,0,0,1770,1817,1,0,0,0,1771,1772, - 5,127,0,0,1772,1773,5,230,0,0,1773,1776,3,28,14,0,1774,1775,5,232, - 0,0,1775,1777,3,28,14,0,1776,1774,1,0,0,0,1777,1778,1,0,0,0,1778, - 1776,1,0,0,0,1778,1779,1,0,0,0,1779,1780,1,0,0,0,1780,1781,5,231, - 0,0,1781,1817,1,0,0,0,1782,1783,5,128,0,0,1783,1784,5,230,0,0,1784, - 1787,3,28,14,0,1785,1786,5,232,0,0,1786,1788,3,28,14,0,1787,1785, - 1,0,0,0,1787,1788,1,0,0,0,1788,1789,1,0,0,0,1789,1790,5,231,0,0, - 1790,1817,1,0,0,0,1791,1792,5,129,0,0,1792,1793,5,230,0,0,1793,1794, - 3,28,14,0,1794,1795,5,231,0,0,1795,1817,1,0,0,0,1796,1797,5,92,0, - 0,1797,1798,5,230,0,0,1798,1799,3,28,14,0,1799,1800,5,231,0,0,1800, - 1817,1,0,0,0,1801,1802,5,93,0,0,1802,1803,5,230,0,0,1803,1804,3, - 28,14,0,1804,1805,5,231,0,0,1805,1817,1,0,0,0,1806,1807,5,94,0,0, - 1807,1808,5,230,0,0,1808,1809,3,28,14,0,1809,1810,5,231,0,0,1810, - 1817,1,0,0,0,1811,1812,5,95,0,0,1812,1813,5,230,0,0,1813,1814,3, - 28,14,0,1814,1815,5,231,0,0,1815,1817,1,0,0,0,1816,1687,1,0,0,0, - 1816,1699,1,0,0,0,1816,1711,1,0,0,0,1816,1726,1,0,0,0,1816,1737, - 1,0,0,0,1816,1748,1,0,0,0,1816,1755,1,0,0,0,1816,1764,1,0,0,0,1816, - 1771,1,0,0,0,1816,1782,1,0,0,0,1816,1791,1,0,0,0,1816,1796,1,0,0, - 0,1816,1801,1,0,0,0,1816,1806,1,0,0,0,1816,1811,1,0,0,0,1817,67, - 1,0,0,0,1818,1819,5,190,0,0,1819,1820,5,230,0,0,1820,1823,3,28,14, - 0,1821,1822,5,232,0,0,1822,1824,3,28,14,0,1823,1821,1,0,0,0,1823, - 1824,1,0,0,0,1824,1825,1,0,0,0,1825,1826,5,231,0,0,1826,2086,1,0, - 0,0,1827,1828,5,191,0,0,1828,1829,5,230,0,0,1829,1832,3,28,14,0, - 1830,1831,5,232,0,0,1831,1833,3,28,14,0,1832,1830,1,0,0,0,1832,1833, - 1,0,0,0,1833,1834,1,0,0,0,1834,1835,5,231,0,0,1835,2086,1,0,0,0, - 1836,1837,5,193,0,0,1837,1838,5,230,0,0,1838,1839,3,28,14,0,1839, - 1840,5,232,0,0,1840,1843,3,28,14,0,1841,1842,5,232,0,0,1842,1844, - 3,28,14,0,1843,1841,1,0,0,0,1843,1844,1,0,0,0,1844,1845,1,0,0,0, - 1845,1846,5,231,0,0,1846,2086,1,0,0,0,1847,1848,5,195,0,0,1848,1849, - 5,230,0,0,1849,1850,3,28,14,0,1850,1851,5,232,0,0,1851,1854,3,28, - 14,0,1852,1853,5,232,0,0,1853,1855,3,28,14,0,1854,1852,1,0,0,0,1854, - 1855,1,0,0,0,1855,1856,1,0,0,0,1856,1857,5,231,0,0,1857,2086,1,0, - 0,0,1858,1859,5,196,0,0,1859,1860,5,230,0,0,1860,1861,3,28,14,0, - 1861,1862,5,232,0,0,1862,1865,3,28,14,0,1863,1864,5,232,0,0,1864, - 1866,3,28,14,0,1865,1863,1,0,0,0,1865,1866,1,0,0,0,1866,1867,1,0, - 0,0,1867,1868,5,231,0,0,1868,2086,1,0,0,0,1869,1870,5,192,0,0,1870, - 1871,5,230,0,0,1871,1872,3,28,14,0,1872,1873,5,232,0,0,1873,1874, - 3,28,14,0,1874,1875,5,232,0,0,1875,1878,3,28,14,0,1876,1877,5,232, - 0,0,1877,1879,3,28,14,0,1878,1876,1,0,0,0,1878,1879,1,0,0,0,1879, - 1880,1,0,0,0,1880,1881,5,231,0,0,1881,2086,1,0,0,0,1882,1883,5,194, - 0,0,1883,1884,5,230,0,0,1884,1885,3,28,14,0,1885,1886,5,232,0,0, - 1886,1887,3,28,14,0,1887,1888,5,232,0,0,1888,1891,3,28,14,0,1889, - 1890,5,232,0,0,1890,1892,3,28,14,0,1891,1889,1,0,0,0,1891,1892,1, - 0,0,0,1892,1893,1,0,0,0,1893,1894,5,231,0,0,1894,2086,1,0,0,0,1895, - 1896,5,197,0,0,1896,1897,5,230,0,0,1897,1898,3,28,14,0,1898,1899, - 5,232,0,0,1899,1900,3,28,14,0,1900,1901,5,232,0,0,1901,1904,3,28, - 14,0,1902,1903,5,232,0,0,1903,1905,3,28,14,0,1904,1902,1,0,0,0,1904, - 1905,1,0,0,0,1905,1906,1,0,0,0,1906,1907,5,231,0,0,1907,2086,1,0, - 0,0,1908,1909,5,198,0,0,1909,1910,5,230,0,0,1910,1911,3,28,14,0, - 1911,1912,5,232,0,0,1912,1913,3,28,14,0,1913,1914,5,232,0,0,1914, - 1917,3,28,14,0,1915,1916,5,232,0,0,1916,1918,3,28,14,0,1917,1915, - 1,0,0,0,1917,1918,1,0,0,0,1918,1919,1,0,0,0,1919,1920,5,231,0,0, - 1920,2086,1,0,0,0,1921,1922,5,199,0,0,1922,1923,5,230,0,0,1923,1924, - 3,28,14,0,1924,1925,5,232,0,0,1925,1926,3,28,14,0,1926,1927,5,232, - 0,0,1927,1930,3,28,14,0,1928,1929,5,232,0,0,1929,1931,3,28,14,0, - 1930,1928,1,0,0,0,1930,1931,1,0,0,0,1931,1932,1,0,0,0,1932,1933, - 5,231,0,0,1933,2086,1,0,0,0,1934,1935,5,200,0,0,1935,1936,5,230, - 0,0,1936,1937,3,28,14,0,1937,1938,5,232,0,0,1938,1939,3,28,14,0, - 1939,1940,5,232,0,0,1940,1943,3,28,14,0,1941,1942,5,232,0,0,1942, - 1944,3,28,14,0,1943,1941,1,0,0,0,1943,1944,1,0,0,0,1944,1945,1,0, - 0,0,1945,1946,5,231,0,0,1946,2086,1,0,0,0,1947,1948,5,201,0,0,1948, - 1949,5,230,0,0,1949,1950,3,28,14,0,1950,1951,5,232,0,0,1951,1952, - 3,28,14,0,1952,1953,5,232,0,0,1953,1956,3,28,14,0,1954,1955,5,232, - 0,0,1955,1957,3,28,14,0,1956,1954,1,0,0,0,1956,1957,1,0,0,0,1957, - 1958,1,0,0,0,1958,1959,5,231,0,0,1959,2086,1,0,0,0,1960,1961,5,202, - 0,0,1961,1962,5,230,0,0,1962,1963,3,28,14,0,1963,1964,5,232,0,0, - 1964,1967,3,28,14,0,1965,1966,5,232,0,0,1966,1968,3,28,14,0,1967, - 1965,1,0,0,0,1967,1968,1,0,0,0,1968,1969,1,0,0,0,1969,1970,5,231, - 0,0,1970,2086,1,0,0,0,1971,1972,5,203,0,0,1972,1973,5,230,0,0,1973, - 1974,3,28,14,0,1974,1975,5,232,0,0,1975,1978,3,28,14,0,1976,1977, - 5,232,0,0,1977,1979,3,28,14,0,1978,1976,1,0,0,0,1978,1979,1,0,0, - 0,1979,1980,1,0,0,0,1980,1981,5,231,0,0,1981,2086,1,0,0,0,1982,1983, - 5,204,0,0,1983,1984,5,230,0,0,1984,1985,3,28,14,0,1985,1986,5,232, - 0,0,1986,1989,3,28,14,0,1987,1988,5,232,0,0,1988,1990,3,28,14,0, - 1989,1987,1,0,0,0,1989,1990,1,0,0,0,1990,1993,1,0,0,0,1991,1992, - 5,232,0,0,1992,1994,3,28,14,0,1993,1991,1,0,0,0,1993,1994,1,0,0, - 0,1994,1997,1,0,0,0,1995,1996,5,232,0,0,1996,1998,3,28,14,0,1997, - 1995,1,0,0,0,1997,1998,1,0,0,0,1998,1999,1,0,0,0,1999,2000,5,231, - 0,0,2000,2086,1,0,0,0,2001,2002,5,205,0,0,2002,2003,5,230,0,0,2003, - 2004,3,28,14,0,2004,2005,5,232,0,0,2005,2008,3,28,14,0,2006,2007, - 5,232,0,0,2007,2009,3,28,14,0,2008,2006,1,0,0,0,2008,2009,1,0,0, - 0,2009,2012,1,0,0,0,2010,2011,5,232,0,0,2011,2013,3,28,14,0,2012, - 2010,1,0,0,0,2012,2013,1,0,0,0,2013,2016,1,0,0,0,2014,2015,5,232, - 0,0,2015,2017,3,28,14,0,2016,2014,1,0,0,0,2016,2017,1,0,0,0,2017, - 2018,1,0,0,0,2018,2019,5,231,0,0,2019,2086,1,0,0,0,2020,2021,5,206, - 0,0,2021,2022,5,230,0,0,2022,2023,3,28,14,0,2023,2024,5,232,0,0, - 2024,2027,3,28,14,0,2025,2026,5,232,0,0,2026,2028,3,28,14,0,2027, - 2025,1,0,0,0,2027,2028,1,0,0,0,2028,2031,1,0,0,0,2029,2030,5,232, - 0,0,2030,2032,3,28,14,0,2031,2029,1,0,0,0,2031,2032,1,0,0,0,2032, - 2035,1,0,0,0,2033,2034,5,232,0,0,2034,2036,3,28,14,0,2035,2033,1, - 0,0,0,2035,2036,1,0,0,0,2036,2037,1,0,0,0,2037,2038,5,231,0,0,2038, - 2086,1,0,0,0,2039,2040,5,207,0,0,2040,2041,5,230,0,0,2041,2042,3, - 28,14,0,2042,2043,5,232,0,0,2043,2046,3,28,14,0,2044,2045,5,232, - 0,0,2045,2047,3,28,14,0,2046,2044,1,0,0,0,2046,2047,1,0,0,0,2047, - 2050,1,0,0,0,2048,2049,5,232,0,0,2049,2051,3,28,14,0,2050,2048,1, - 0,0,0,2050,2051,1,0,0,0,2051,2054,1,0,0,0,2052,2053,5,232,0,0,2053, - 2055,3,28,14,0,2054,2052,1,0,0,0,2054,2055,1,0,0,0,2055,2056,1,0, - 0,0,2056,2057,5,231,0,0,2057,2086,1,0,0,0,2058,2059,5,208,0,0,2059, - 2060,5,230,0,0,2060,2061,3,28,14,0,2061,2062,5,232,0,0,2062,2063, - 3,28,14,0,2063,2064,5,232,0,0,2064,2065,3,28,14,0,2065,2066,5,232, - 0,0,2066,2069,3,28,14,0,2067,2068,5,232,0,0,2068,2070,3,28,14,0, - 2069,2067,1,0,0,0,2069,2070,1,0,0,0,2070,2073,1,0,0,0,2071,2072, - 5,232,0,0,2072,2074,3,28,14,0,2073,2071,1,0,0,0,2073,2074,1,0,0, - 0,2074,2077,1,0,0,0,2075,2076,5,232,0,0,2076,2078,3,28,14,0,2077, - 2075,1,0,0,0,2077,2078,1,0,0,0,2078,2081,1,0,0,0,2079,2080,5,232, - 0,0,2080,2082,3,28,14,0,2081,2079,1,0,0,0,2081,2082,1,0,0,0,2082, - 2083,1,0,0,0,2083,2084,5,231,0,0,2084,2086,1,0,0,0,2085,1818,1,0, - 0,0,2085,1827,1,0,0,0,2085,1836,1,0,0,0,2085,1847,1,0,0,0,2085,1858, - 1,0,0,0,2085,1869,1,0,0,0,2085,1882,1,0,0,0,2085,1895,1,0,0,0,2085, - 1908,1,0,0,0,2085,1921,1,0,0,0,2085,1934,1,0,0,0,2085,1947,1,0,0, - 0,2085,1960,1,0,0,0,2085,1971,1,0,0,0,2085,1982,1,0,0,0,2085,2001, - 1,0,0,0,2085,2020,1,0,0,0,2085,2039,1,0,0,0,2085,2058,1,0,0,0,2086, - 69,1,0,0,0,132,73,75,80,87,93,104,111,123,137,146,166,176,188,198, - 204,221,223,241,243,255,257,272,274,286,288,296,303,315,322,355, - 375,395,402,408,414,421,518,597,623,625,644,663,699,735,737,746, - 755,764,773,852,861,870,879,913,917,952,1077,1123,1125,1168,1170, - 1172,1202,1211,1222,1255,1287,1393,1406,1426,1438,1450,1462,1466, - 1478,1482,1503,1515,1528,1532,1536,1540,1544,1548,1559,1594,1651, - 1677,1679,1681,1685,1694,1706,1720,1722,1733,1744,1760,1778,1787, - 1816,1823,1832,1843,1854,1865,1878,1891,1904,1917,1930,1943,1956, - 1967,1978,1989,1993,1997,2008,2012,2016,2027,2031,2035,2046,2050, - 2054,2069,2073,2077,2081,2085 - ] - -class MathExprParser ( Parser ): - - grammarFileName = "MathExpr.g4" - - atn = ATNDeserializer().deserialize(serializedATN()) - - decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] - - sharedContextCache = PredictionContextCache() - - 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'", "'linspace'", "'logspace'", - "'topk'", "'botk'", "'pinv'", "'sum'", "'mean'", "'std'", - "'var'", "", "", "'quantile'", "'dot'", - "'moment'", "'erf'", "'erfinv'", "'any'", "'all'", - "'edge'", "", "'median'", "'mode'", "'cumsum'", - "'cumprod'", "", "", "", - "", "", "'smootherstep'", "", - "'remap'", "", "", "'keys'", "", - "", "", "", "", - "", "", "'repeat'", "'flatten'", - "'append'", "'get_value'", "'flow_apply'", "", - "'motion_mask'", "'flow_to_image'", "", "", - "'where'", "", "'overlay'", "'pad'", "'cross'", - "'matmul'", "'rife'", "", "", "'shape'", - "", "", "", "'tensor'", - "'add_key'", "", "'stack_push'", "'stack_pop'", - "'stack_clear'", "'stack_has'", "'stack_get'", "", - "'stack'", "'nonzero'", "'int'", "'float'", "'upper'", - "'lower'", "'trim'", "'split'", "'join'", "", - "'find'", "'replace'", "'dilate'", "'erode'", "'morph_open'", - "'morph_close'", "'rgb_to_oklab'", "'rgb_to_cielab'", - "'oklab_to_rgb'", "'cielab_to_rgb'", "'rgb_to_hsv'", - "'hsv_to_rgb'", "'int_to_rgb'", "'rgb_to_int'", "'interpolate_linear'", - "'interpolate_area'", "", "'text_image'", - "", "", "", "'if'", "'else'", - "'while'", "'for'", "'in'", "'break'", "'continue'", - "'return'", "", "'sort'", "'argsort'", "'argmin'", - "'argmax'", "'softmax'", "'softmin'", "'unique'", "'flip'", - "'startswith'", "'endswith'", "'squeeze'", "'unsqueeze'", - "'roll'", "'cov'", "", "'entropy'", "'crop'", - "", "", "'gather'", "'scatter'", - "'scatter_add'", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "'<<'", "'>>'", - "'>='", "'>'", "'<='", "'<'", "'=='", "'='", "'+='", - "'-='", "'*='", "'/='", "'%='", "'!='", "'|'", "'('", - "')'", "','", "';'", "'->'", "'['", "']'", "'?'", "':'", - "'{'", "'}'" ] - - 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", "TRANSPOSE", "PERM", "RESHAPE", "RANGE", "LINSPACE", - "LOGSPACE", "TOPK", "BOTK", "PINV", "SUM", "MEAN", - "STD", "VAR", "QUARTILE", "PERCENTILE", "QUANTILE", - "DOT", "MOMENT", "ERF", "ERFINV", "ANY", "ALL", "EDGE", - "GAUSSIAN", "MEDIAN", "MODE", "CUMSUM", "CUMPROD", - "TOPK_IND", "BOTK_IND", "CUBIC_EASE", "ELASTIC_EASE", - "SINE_EASE", "SMOOTHERSTEP", "DIST", "REMAP", "COSSIM", - "COUNT", "KEYS", "ENABLE_TRACKING", "DISABLE_TRACKING", - "RESET_TRACKING", "GET_CHANGED_KEYS", "GET_ADDED_KEYS", - "GET_REMOVED_KEYS", "GET_UNCHANGED_KEYS", "REPEAT", - "FLATTEN", "APPEND", "GET_VALUE", "FLOW_APPLY", "BATCH_SHUFFLE", - "MOTION_MASK", "FLOW_TO_IMAGE", "FLOW_MAG", "FLOW_ANG", - "WHERE", "HISTOGRAM", "OVERLAY", "PAD", "CROSS", "MATMUL", - "RIFE", "BNOT", "BITCOUNT", "SHAPE", "BAND", "XOR", - "BOR", "TENSOR", "ADD_KEY", "REMOVE_KEY", "PUSH", - "POP", "CLEAR", "HAS", "GET", "CONCAT", "STACK", "NONZERO", - "INT", "FLOAT", "UPPER", "LOWER", "TRIM", "SPLIT", - "JOIN", "SUBSTRING", "FIND", "REPLACE", "DILATE", - "ERODE", "MORPH_OPEN", "MORPH_CLOSE", "RGB_TO_OKLAB", - "RGB_TO_CIELAB", "OKLAB_TO_RGB", "CIELAB_TO_RGB", - "RGB_TO_HSV", "HSV_TO_RGB", "INT_TO_RGB", "RGB_TO_INT", - "INTERPOLATE_LINEAR", "INTERPOLATE_AREA", "INTERPOLATE_NEAREST", - "TEXT_IMAGE", "AS_NESTED", "SVD", "DIAG", "IF", "ELSE", - "WHILE", "FOR", "IN", "BREAK", "CONTINUE", "RETURN", - "TIMESTAMP", "SORT", "ARGSORT", "ARGMIN", "ARGMAX", - "SOFTMAX", "SOFTMIN", "UNIQUE", "FLIP", "STARTSWITH", - "ENDSWITH", "SQUEEZE", "UNSQUEEZE", "ROLL", "COV", - "CORR", "ENTROPY", "CROP", "NONE", "COORDS", "GATHER", - "SCATTER", "SCATTER_ADD", "NOISE", "RAND", "CAUCHY", - "EXPONENTIAL", "LOGNORMAL", "BERNOULLI", "POISSON", - "GAMMADIST", "BETADIST", "LAPLACEDIST", "GUMBELDIST", - "WEIBULLDIST", "CHI2DIST", "STUDENTTDIST", "PERLIN", - "CELLULAR", "PLASMA", "RIDGED", "DOMAIN_WARP", "PLUS", - "MINUS", "MULT", "DIV", "MOD", "POW", "LSHIFT", "RSHIFT", - "GE", "GT", "LE", "LT", "EQ", "EQUEALS", "PLUS_EQ", - "MINUS_EQ", "MULT_EQ", "DIV_EQ", "MOD_EQ", "NE", "PIPE", - "LPAREN", "RPAREN", "COMMA", "SEMICOLON", "ARROW", - "LBRACKET", "RBRACKET", "QUESTION", "COLON", "LBRACE", - "RBRACE", "NUMBER", "CONSTANT", "STRING", "VARIABLE", - "SL_COMMENT", "ML_COMMENT", "WS" ] - - RULE_start = 0 - RULE_funcDef = 1 - RULE_varDef = 2 - RULE_paramList = 3 - RULE_stmt = 4 - RULE_ifStmt = 5 - RULE_whileStmt = 6 - RULE_forStmt = 7 - RULE_block = 8 - RULE_dictEntryList = 9 - RULE_dictEntry = 10 - RULE_breakStmt = 11 - RULE_continueStmt = 12 - RULE_returnStmt = 13 - RULE_expr = 14 - RULE_ternaryExpr = 15 - RULE_compExpr = 16 - RULE_relationalExpr = 17 - RULE_addExpr = 18 - RULE_mulExpr = 19 - RULE_shiftExpr = 20 - RULE_powExpr = 21 - RULE_unaryExpr = 22 - RULE_indexExpr = 23 - RULE_sliceElement = 24 - RULE_atom = 25 - RULE_exprList = 26 - RULE_func0 = 27 - RULE_func1 = 28 - RULE_func2 = 29 - RULE_func3 = 30 - RULE_func4 = 31 - RULE_func5 = 32 - RULE_funcN = 33 - RULE_funcNoise = 34 - - ruleNames = [ "start", "funcDef", "varDef", "paramList", "stmt", "ifStmt", - "whileStmt", "forStmt", "block", "dictEntryList", "dictEntry", - "breakStmt", "continueStmt", "returnStmt", "expr", "ternaryExpr", - "compExpr", "relationalExpr", "addExpr", "mulExpr", "shiftExpr", - "powExpr", "unaryExpr", "indexExpr", "sliceElement", - "atom", "exprList", "func0", "func1", "func2", "func3", - "func4", "func5", "funcN", "funcNoise" ] - - EOF = Token.EOF - 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 - TRANSPOSE=50 - PERM=51 - RESHAPE=52 - RANGE=53 - LINSPACE=54 - LOGSPACE=55 - TOPK=56 - BOTK=57 - PINV=58 - SUM=59 - MEAN=60 - STD=61 - VAR=62 - QUARTILE=63 - PERCENTILE=64 - QUANTILE=65 - DOT=66 - MOMENT=67 - ERF=68 - ERFINV=69 - ANY=70 - ALL=71 - EDGE=72 - GAUSSIAN=73 - MEDIAN=74 - MODE=75 - CUMSUM=76 - CUMPROD=77 - TOPK_IND=78 - BOTK_IND=79 - CUBIC_EASE=80 - ELASTIC_EASE=81 - SINE_EASE=82 - SMOOTHERSTEP=83 - DIST=84 - REMAP=85 - COSSIM=86 - COUNT=87 - KEYS=88 - ENABLE_TRACKING=89 - DISABLE_TRACKING=90 - RESET_TRACKING=91 - GET_CHANGED_KEYS=92 - GET_ADDED_KEYS=93 - GET_REMOVED_KEYS=94 - GET_UNCHANGED_KEYS=95 - REPEAT=96 - FLATTEN=97 - APPEND=98 - GET_VALUE=99 - FLOW_APPLY=100 - BATCH_SHUFFLE=101 - MOTION_MASK=102 - FLOW_TO_IMAGE=103 - FLOW_MAG=104 - FLOW_ANG=105 - WHERE=106 - HISTOGRAM=107 - OVERLAY=108 - PAD=109 - CROSS=110 - MATMUL=111 - RIFE=112 - BNOT=113 - BITCOUNT=114 - SHAPE=115 - BAND=116 - XOR=117 - BOR=118 - TENSOR=119 - ADD_KEY=120 - REMOVE_KEY=121 - PUSH=122 - POP=123 - CLEAR=124 - HAS=125 - GET=126 - CONCAT=127 - STACK=128 - NONZERO=129 - INT=130 - FLOAT=131 - UPPER=132 - LOWER=133 - TRIM=134 - SPLIT=135 - JOIN=136 - SUBSTRING=137 - FIND=138 - REPLACE=139 - DILATE=140 - ERODE=141 - MORPH_OPEN=142 - MORPH_CLOSE=143 - RGB_TO_OKLAB=144 - RGB_TO_CIELAB=145 - OKLAB_TO_RGB=146 - CIELAB_TO_RGB=147 - RGB_TO_HSV=148 - HSV_TO_RGB=149 - INT_TO_RGB=150 - RGB_TO_INT=151 - INTERPOLATE_LINEAR=152 - INTERPOLATE_AREA=153 - INTERPOLATE_NEAREST=154 - TEXT_IMAGE=155 - AS_NESTED=156 - SVD=157 - DIAG=158 - IF=159 - ELSE=160 - WHILE=161 - FOR=162 - IN=163 - BREAK=164 - CONTINUE=165 - RETURN=166 - TIMESTAMP=167 - SORT=168 - ARGSORT=169 - ARGMIN=170 - ARGMAX=171 - SOFTMAX=172 - SOFTMIN=173 - UNIQUE=174 - FLIP=175 - STARTSWITH=176 - ENDSWITH=177 - SQUEEZE=178 - UNSQUEEZE=179 - ROLL=180 - COV=181 - CORR=182 - ENTROPY=183 - CROP=184 - NONE=185 - COORDS=186 - GATHER=187 - SCATTER=188 - SCATTER_ADD=189 - NOISE=190 - RAND=191 - CAUCHY=192 - EXPONENTIAL=193 - LOGNORMAL=194 - BERNOULLI=195 - POISSON=196 - GAMMADIST=197 - BETADIST=198 - LAPLACEDIST=199 - GUMBELDIST=200 - WEIBULLDIST=201 - CHI2DIST=202 - STUDENTTDIST=203 - PERLIN=204 - CELLULAR=205 - PLASMA=206 - RIDGED=207 - DOMAIN_WARP=208 - PLUS=209 - MINUS=210 - MULT=211 - DIV=212 - MOD=213 - POW=214 - LSHIFT=215 - RSHIFT=216 - GE=217 - GT=218 - LE=219 - LT=220 - EQ=221 - EQUEALS=222 - PLUS_EQ=223 - MINUS_EQ=224 - MULT_EQ=225 - DIV_EQ=226 - MOD_EQ=227 - NE=228 - PIPE=229 - LPAREN=230 - RPAREN=231 - COMMA=232 - SEMICOLON=233 - ARROW=234 - LBRACKET=235 - RBRACKET=236 - QUESTION=237 - COLON=238 - LBRACE=239 - RBRACE=240 - NUMBER=241 - CONSTANT=242 - STRING=243 - VARIABLE=244 - SL_COMMENT=245 - ML_COMMENT=246 - WS=247 - - def __init__(self, input:TokenStream, output:TextIO = sys.stdout): - super().__init__(input, output) - self.checkVersion("4.13.2") - self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) - self._predicates = None - - - - - class StartContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def EOF(self): - return self.getToken(MathExprParser.EOF, 0) - - def funcDef(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.FuncDefContext) - else: - return self.getTypedRuleContext(MathExprParser.FuncDefContext,i) - - - def varDef(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.VarDefContext) - else: - return self.getTypedRuleContext(MathExprParser.VarDefContext,i) - - - def stmt(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.StmtContext) - else: - return self.getTypedRuleContext(MathExprParser.StmtContext,i) - - - def SEMICOLON(self): - return self.getToken(MathExprParser.SEMICOLON, 0) - - def getRuleIndex(self): - return MathExprParser.RULE_start - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStart" ): - listener.enterStart(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStart" ): - listener.exitStart(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStart" ): - return visitor.visitStart(self) - else: - return visitor.visitChildren(self) - - - - - def start(self): - - localctx = MathExprParser.StartContext(self, self._ctx, self.state) - self.enterRule(localctx, 0, self.RULE_start) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 75 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,1,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - self.state = 73 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,0,self._ctx) - if la_ == 1: - self.state = 70 - self.funcDef() - pass - - elif la_ == 2: - self.state = 71 - self.varDef() - pass - - elif la_ == 3: - self.state = 72 - self.stmt() - pass - - - self.state = 77 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,1,self._ctx) - - self.state = 78 - self.expr() - self.state = 80 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==233: - self.state = 79 - self.match(MathExprParser.SEMICOLON) - - - self.state = 82 - self.match(MathExprParser.EOF) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class FuncDefContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_funcDef - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class FunctionDefContext(FuncDefContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncDefContext - super().__init__(parser) - self.copyFrom(ctx) - - def VARIABLE(self): - return self.getToken(MathExprParser.VARIABLE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def ARROW(self): - return self.getToken(MathExprParser.ARROW, 0) - def SEMICOLON(self): - return self.getToken(MathExprParser.SEMICOLON, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def block(self): - return self.getTypedRuleContext(MathExprParser.BlockContext,0) - - def paramList(self): - return self.getTypedRuleContext(MathExprParser.ParamListContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunctionDef" ): - listener.enterFunctionDef(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunctionDef" ): - listener.exitFunctionDef(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunctionDef" ): - return visitor.visitFunctionDef(self) - else: - return visitor.visitChildren(self) - - - - def funcDef(self): - - localctx = MathExprParser.FuncDefContext(self, self._ctx, self.state) - self.enterRule(localctx, 2, self.RULE_funcDef) - self._la = 0 # Token type - try: - localctx = MathExprParser.FunctionDefContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 84 - self.match(MathExprParser.VARIABLE) - self.state = 85 - self.match(MathExprParser.LPAREN) - self.state = 87 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==244: - self.state = 86 - self.paramList() - - - self.state = 89 - self.match(MathExprParser.RPAREN) - self.state = 90 - self.match(MathExprParser.ARROW) - self.state = 93 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,4,self._ctx) - if la_ == 1: - self.state = 91 - self.expr() - pass - - elif la_ == 2: - self.state = 92 - self.block() - pass - - - self.state = 95 - self.match(MathExprParser.SEMICOLON) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class VarDefContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def VARIABLE(self): - return self.getToken(MathExprParser.VARIABLE, 0) - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - - def SEMICOLON(self): - return self.getToken(MathExprParser.SEMICOLON, 0) - - def EQUEALS(self): - return self.getToken(MathExprParser.EQUEALS, 0) - - def PLUS_EQ(self): - return self.getToken(MathExprParser.PLUS_EQ, 0) - - def MINUS_EQ(self): - return self.getToken(MathExprParser.MINUS_EQ, 0) - - def MULT_EQ(self): - return self.getToken(MathExprParser.MULT_EQ, 0) - - def DIV_EQ(self): - return self.getToken(MathExprParser.DIV_EQ, 0) - - def MOD_EQ(self): - return self.getToken(MathExprParser.MOD_EQ, 0) - - def LBRACKET(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.LBRACKET) - else: - return self.getToken(MathExprParser.LBRACKET, i) - - def RBRACKET(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.RBRACKET) - else: - return self.getToken(MathExprParser.RBRACKET, i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def getRuleIndex(self): - return MathExprParser.RULE_varDef - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVarDef" ): - listener.enterVarDef(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVarDef" ): - listener.exitVarDef(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVarDef" ): - return visitor.visitVarDef(self) - else: - return visitor.visitChildren(self) - - - - - def varDef(self): - - localctx = MathExprParser.VarDefContext(self, self._ctx, self.state) - self.enterRule(localctx, 4, self.RULE_varDef) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 97 - self.match(MathExprParser.VARIABLE) - self.state = 111 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==235: - self.state = 98 - self.match(MathExprParser.LBRACKET) - self.state = 99 - self.expr() - self.state = 104 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==232: - self.state = 100 - self.match(MathExprParser.COMMA) - self.state = 101 - self.expr() - self.state = 106 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 107 - self.match(MathExprParser.RBRACKET) - self.state = 113 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 114 - _la = self._input.LA(1) - if not(((((_la - 222)) & ~0x3f) == 0 and ((1 << (_la - 222)) & 63) != 0)): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 115 - self.expr() - self.state = 116 - self.match(MathExprParser.SEMICOLON) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class ParamListContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def VARIABLE(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.VARIABLE) - else: - return self.getToken(MathExprParser.VARIABLE, i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def getRuleIndex(self): - return MathExprParser.RULE_paramList - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterParamList" ): - listener.enterParamList(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitParamList" ): - listener.exitParamList(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitParamList" ): - return visitor.visitParamList(self) - else: - return visitor.visitChildren(self) - - - - - def paramList(self): - - localctx = MathExprParser.ParamListContext(self, self._ctx, self.state) - self.enterRule(localctx, 6, self.RULE_paramList) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 118 - self.match(MathExprParser.VARIABLE) - self.state = 123 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==232: - self.state = 119 - self.match(MathExprParser.COMMA) - self.state = 120 - self.match(MathExprParser.VARIABLE) - self.state = 125 - self._errHandler.sync(self) - _la = self._input.LA(1) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class StmtContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_stmt - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class BreakStatementContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def breakStmt(self): - return self.getTypedRuleContext(MathExprParser.BreakStmtContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBreakStatement" ): - listener.enterBreakStatement(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBreakStatement" ): - listener.exitBreakStatement(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBreakStatement" ): - return visitor.visitBreakStatement(self) - else: - return visitor.visitChildren(self) - - - class VarDefStmtContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def varDef(self): - return self.getTypedRuleContext(MathExprParser.VarDefContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVarDefStmt" ): - listener.enterVarDefStmt(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVarDefStmt" ): - listener.exitVarDefStmt(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVarDefStmt" ): - return visitor.visitVarDefStmt(self) - else: - return visitor.visitChildren(self) - - - class IfStatementContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def ifStmt(self): - return self.getTypedRuleContext(MathExprParser.IfStmtContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIfStatement" ): - listener.enterIfStatement(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIfStatement" ): - listener.exitIfStatement(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIfStatement" ): - return visitor.visitIfStatement(self) - else: - return visitor.visitChildren(self) - - - class ReturnStatementContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def returnStmt(self): - return self.getTypedRuleContext(MathExprParser.ReturnStmtContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterReturnStatement" ): - listener.enterReturnStatement(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitReturnStatement" ): - listener.exitReturnStatement(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitReturnStatement" ): - return visitor.visitReturnStatement(self) - else: - return visitor.visitChildren(self) - - - class ExprStatementContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def SEMICOLON(self): - return self.getToken(MathExprParser.SEMICOLON, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExprStatement" ): - listener.enterExprStatement(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExprStatement" ): - listener.exitExprStatement(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprStatement" ): - return visitor.visitExprStatement(self) - else: - return visitor.visitChildren(self) - - - class BlockStatementContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def block(self): - return self.getTypedRuleContext(MathExprParser.BlockContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBlockStatement" ): - listener.enterBlockStatement(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBlockStatement" ): - listener.exitBlockStatement(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBlockStatement" ): - return visitor.visitBlockStatement(self) - else: - return visitor.visitChildren(self) - - - class WhileStatementContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def whileStmt(self): - return self.getTypedRuleContext(MathExprParser.WhileStmtContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterWhileStatement" ): - listener.enterWhileStatement(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitWhileStatement" ): - listener.exitWhileStatement(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitWhileStatement" ): - return visitor.visitWhileStatement(self) - else: - return visitor.visitChildren(self) - - - class ForStatementContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def forStmt(self): - return self.getTypedRuleContext(MathExprParser.ForStmtContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterForStatement" ): - listener.enterForStatement(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitForStatement" ): - listener.exitForStatement(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitForStatement" ): - return visitor.visitForStatement(self) - else: - return visitor.visitChildren(self) - - - class ContinueStatementContext(StmtContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.StmtContext - super().__init__(parser) - self.copyFrom(ctx) - - def continueStmt(self): - return self.getTypedRuleContext(MathExprParser.ContinueStmtContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterContinueStatement" ): - listener.enterContinueStatement(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitContinueStatement" ): - listener.exitContinueStatement(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitContinueStatement" ): - return visitor.visitContinueStatement(self) - else: - return visitor.visitChildren(self) - - - - def stmt(self): - - localctx = MathExprParser.StmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 8, self.RULE_stmt) - try: - self.state = 137 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,8,self._ctx) - if la_ == 1: - localctx = MathExprParser.IfStatementContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 126 - self.ifStmt() - pass - - elif la_ == 2: - localctx = MathExprParser.WhileStatementContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 127 - self.whileStmt() - pass - - elif la_ == 3: - localctx = MathExprParser.BlockStatementContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 128 - self.block() - pass - - elif la_ == 4: - localctx = MathExprParser.BreakStatementContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 129 - self.breakStmt() - pass - - elif la_ == 5: - localctx = MathExprParser.ContinueStatementContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 130 - self.continueStmt() - pass - - elif la_ == 6: - localctx = MathExprParser.ReturnStatementContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 131 - self.returnStmt() - pass - - elif la_ == 7: - localctx = MathExprParser.VarDefStmtContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 132 - self.varDef() - pass - - elif la_ == 8: - localctx = MathExprParser.ForStatementContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 133 - self.forStmt() - pass - - elif la_ == 9: - localctx = MathExprParser.ExprStatementContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 134 - self.expr() - self.state = 135 - self.match(MathExprParser.SEMICOLON) - pass - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class IfStmtContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def IF(self): - return self.getToken(MathExprParser.IF, 0) - - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def stmt(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.StmtContext) - else: - return self.getTypedRuleContext(MathExprParser.StmtContext,i) - - - def ELSE(self): - return self.getToken(MathExprParser.ELSE, 0) - - def getRuleIndex(self): - return MathExprParser.RULE_ifStmt - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIfStmt" ): - listener.enterIfStmt(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIfStmt" ): - listener.exitIfStmt(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIfStmt" ): - return visitor.visitIfStmt(self) - else: - return visitor.visitChildren(self) - - - - - def ifStmt(self): - - localctx = MathExprParser.IfStmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 10, self.RULE_ifStmt) - try: - self.enterOuterAlt(localctx, 1) - self.state = 139 - self.match(MathExprParser.IF) - self.state = 140 - self.match(MathExprParser.LPAREN) - self.state = 141 - self.expr() - self.state = 142 - self.match(MathExprParser.RPAREN) - self.state = 143 - self.stmt() - self.state = 146 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,9,self._ctx) - if la_ == 1: - self.state = 144 - self.match(MathExprParser.ELSE) - self.state = 145 - self.stmt() - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class WhileStmtContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def WHILE(self): - return self.getToken(MathExprParser.WHILE, 0) - - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def stmt(self): - return self.getTypedRuleContext(MathExprParser.StmtContext,0) - - - def getRuleIndex(self): - return MathExprParser.RULE_whileStmt - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterWhileStmt" ): - listener.enterWhileStmt(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitWhileStmt" ): - listener.exitWhileStmt(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitWhileStmt" ): - return visitor.visitWhileStmt(self) - else: - return visitor.visitChildren(self) - - - - - def whileStmt(self): - - localctx = MathExprParser.WhileStmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_whileStmt) - try: - self.enterOuterAlt(localctx, 1) - self.state = 148 - self.match(MathExprParser.WHILE) - self.state = 149 - self.match(MathExprParser.LPAREN) - self.state = 150 - self.expr() - self.state = 151 - self.match(MathExprParser.RPAREN) - self.state = 152 - self.stmt() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class ForStmtContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def FOR(self): - return self.getToken(MathExprParser.FOR, 0) - - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - - def VARIABLE(self): - return self.getToken(MathExprParser.VARIABLE, 0) - - def IN(self): - return self.getToken(MathExprParser.IN, 0) - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def stmt(self): - return self.getTypedRuleContext(MathExprParser.StmtContext,0) - - - def getRuleIndex(self): - return MathExprParser.RULE_forStmt - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterForStmt" ): - listener.enterForStmt(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitForStmt" ): - listener.exitForStmt(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitForStmt" ): - return visitor.visitForStmt(self) - else: - return visitor.visitChildren(self) - - - - - def forStmt(self): - - localctx = MathExprParser.ForStmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 14, self.RULE_forStmt) - try: - self.enterOuterAlt(localctx, 1) - self.state = 154 - self.match(MathExprParser.FOR) - self.state = 155 - self.match(MathExprParser.LPAREN) - self.state = 156 - self.match(MathExprParser.VARIABLE) - self.state = 157 - self.match(MathExprParser.IN) - self.state = 158 - self.expr() - self.state = 159 - self.match(MathExprParser.RPAREN) - self.state = 160 - self.stmt() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class BlockContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def LBRACE(self): - return self.getToken(MathExprParser.LBRACE, 0) - - def RBRACE(self): - return self.getToken(MathExprParser.RBRACE, 0) - - def stmt(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.StmtContext) - else: - return self.getTypedRuleContext(MathExprParser.StmtContext,i) - - - def getRuleIndex(self): - return MathExprParser.RULE_block - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBlock" ): - listener.enterBlock(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBlock" ): - listener.exitBlock(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBlock" ): - return visitor.visitBlock(self) - else: - return visitor.visitChildren(self) - - - - - def block(self): - - localctx = MathExprParser.BlockContext(self, self._ctx, self.state) - self.enterRule(localctx, 16, self.RULE_block) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 162 - self.match(MathExprParser.LBRACE) - self.state = 166 - self._errHandler.sync(self) - _la = self._input.LA(1) - while (((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -38654705665) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 8594195200081919) != 0): - self.state = 163 - self.stmt() - self.state = 168 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 169 - self.match(MathExprParser.RBRACE) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class DictEntryListContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def dictEntry(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.DictEntryContext) - else: - return self.getTypedRuleContext(MathExprParser.DictEntryContext,i) - - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def getRuleIndex(self): - return MathExprParser.RULE_dictEntryList - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDictEntryList" ): - listener.enterDictEntryList(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDictEntryList" ): - listener.exitDictEntryList(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDictEntryList" ): - return visitor.visitDictEntryList(self) - else: - return visitor.visitChildren(self) - - - - - def dictEntryList(self): - - localctx = MathExprParser.DictEntryListContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_dictEntryList) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 171 - self.dictEntry() - self.state = 176 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==232: - self.state = 172 - self.match(MathExprParser.COMMA) - self.state = 173 - self.dictEntry() - self.state = 178 - self._errHandler.sync(self) - _la = self._input.LA(1) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class DictEntryContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def VARIABLE(self): - return self.getToken(MathExprParser.VARIABLE, 0) - - def COLON(self): - return self.getToken(MathExprParser.COLON, 0) - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def STRING(self): - return self.getToken(MathExprParser.STRING, 0) - - def NUMBER(self): - return self.getToken(MathExprParser.NUMBER, 0) - - def getRuleIndex(self): - return MathExprParser.RULE_dictEntry - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDictEntry" ): - listener.enterDictEntry(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDictEntry" ): - listener.exitDictEntry(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDictEntry" ): - return visitor.visitDictEntry(self) - else: - return visitor.visitChildren(self) - - - - - def dictEntry(self): - - localctx = MathExprParser.DictEntryContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_dictEntry) - try: - self.state = 188 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [244]: - self.enterOuterAlt(localctx, 1) - self.state = 179 - self.match(MathExprParser.VARIABLE) - self.state = 180 - self.match(MathExprParser.COLON) - self.state = 181 - self.expr() - pass - elif token in [243]: - self.enterOuterAlt(localctx, 2) - self.state = 182 - self.match(MathExprParser.STRING) - self.state = 183 - self.match(MathExprParser.COLON) - self.state = 184 - self.expr() - pass - elif token in [241]: - self.enterOuterAlt(localctx, 3) - self.state = 185 - self.match(MathExprParser.NUMBER) - self.state = 186 - self.match(MathExprParser.COLON) - self.state = 187 - self.expr() - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class BreakStmtContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def BREAK(self): - return self.getToken(MathExprParser.BREAK, 0) - - def SEMICOLON(self): - return self.getToken(MathExprParser.SEMICOLON, 0) - - def getRuleIndex(self): - return MathExprParser.RULE_breakStmt - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBreakStmt" ): - listener.enterBreakStmt(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBreakStmt" ): - listener.exitBreakStmt(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBreakStmt" ): - return visitor.visitBreakStmt(self) - else: - return visitor.visitChildren(self) - - - - - def breakStmt(self): - - localctx = MathExprParser.BreakStmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_breakStmt) - try: - self.enterOuterAlt(localctx, 1) - self.state = 190 - self.match(MathExprParser.BREAK) - self.state = 191 - self.match(MathExprParser.SEMICOLON) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class ContinueStmtContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def CONTINUE(self): - return self.getToken(MathExprParser.CONTINUE, 0) - - def SEMICOLON(self): - return self.getToken(MathExprParser.SEMICOLON, 0) - - def getRuleIndex(self): - return MathExprParser.RULE_continueStmt - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterContinueStmt" ): - listener.enterContinueStmt(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitContinueStmt" ): - listener.exitContinueStmt(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitContinueStmt" ): - return visitor.visitContinueStmt(self) - else: - return visitor.visitChildren(self) - - - - - def continueStmt(self): - - localctx = MathExprParser.ContinueStmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_continueStmt) - try: - self.enterOuterAlt(localctx, 1) - self.state = 193 - self.match(MathExprParser.CONTINUE) - self.state = 194 - self.match(MathExprParser.SEMICOLON) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class ReturnStmtContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def RETURN(self): - return self.getToken(MathExprParser.RETURN, 0) - - def SEMICOLON(self): - return self.getToken(MathExprParser.SEMICOLON, 0) - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def getRuleIndex(self): - return MathExprParser.RULE_returnStmt - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterReturnStmt" ): - listener.enterReturnStmt(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitReturnStmt" ): - listener.exitReturnStmt(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitReturnStmt" ): - return visitor.visitReturnStmt(self) - else: - return visitor.visitChildren(self) - - - - - def returnStmt(self): - - localctx = MathExprParser.ReturnStmtContext(self, self._ctx, self.state) - self.enterRule(localctx, 26, self.RULE_returnStmt) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 196 - self.match(MathExprParser.RETURN) - self.state = 198 - self._errHandler.sync(self) - _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -341449900033) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 8594195200081919) != 0): - self.state = 197 - self.expr() - - - self.state = 200 - self.match(MathExprParser.SEMICOLON) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class ExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def ternaryExpr(self): - return self.getTypedRuleContext(MathExprParser.TernaryExprContext,0) - - - def compExpr(self): - return self.getTypedRuleContext(MathExprParser.CompExprContext,0) - - - def getRuleIndex(self): - return MathExprParser.RULE_expr - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpr" ): - listener.enterExpr(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpr" ): - listener.exitExpr(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpr" ): - return visitor.visitExpr(self) - else: - return visitor.visitChildren(self) - - - - - def expr(self): - - localctx = MathExprParser.ExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 28, self.RULE_expr) - try: - self.state = 204 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,14,self._ctx) - if la_ == 1: - self.enterOuterAlt(localctx, 1) - self.state = 202 - self.ternaryExpr() - pass - - elif la_ == 2: - self.enterOuterAlt(localctx, 2) - self.state = 203 - self.compExpr(0) - pass - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class TernaryExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_ternaryExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class TernaryExpContext(TernaryExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.TernaryExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def compExpr(self): - return self.getTypedRuleContext(MathExprParser.CompExprContext,0) - - def QUESTION(self): - return self.getToken(MathExprParser.QUESTION, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COLON(self): - return self.getToken(MathExprParser.COLON, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTernaryExp" ): - listener.enterTernaryExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTernaryExp" ): - listener.exitTernaryExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTernaryExp" ): - return visitor.visitTernaryExp(self) - else: - return visitor.visitChildren(self) - - - - def ternaryExpr(self): - - localctx = MathExprParser.TernaryExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 30, self.RULE_ternaryExpr) - try: - localctx = MathExprParser.TernaryExpContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 206 - self.compExpr(0) - self.state = 207 - self.match(MathExprParser.QUESTION) - self.state = 208 - self.expr() - self.state = 209 - self.match(MathExprParser.COLON) - self.state = 210 - self.expr() - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class CompExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_compExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - class ToRelationalContext(CompExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.CompExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def relationalExpr(self): - return self.getTypedRuleContext(MathExprParser.RelationalExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterToRelational" ): - listener.enterToRelational(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitToRelational" ): - listener.exitToRelational(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitToRelational" ): - return visitor.visitToRelational(self) - else: - return visitor.visitChildren(self) - - - class EqExpContext(CompExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.CompExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def compExpr(self): - return self.getTypedRuleContext(MathExprParser.CompExprContext,0) - - def EQ(self): - return self.getToken(MathExprParser.EQ, 0) - def relationalExpr(self): - return self.getTypedRuleContext(MathExprParser.RelationalExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEqExp" ): - listener.enterEqExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEqExp" ): - listener.exitEqExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEqExp" ): - return visitor.visitEqExp(self) - else: - return visitor.visitChildren(self) - - - class NeExpContext(CompExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.CompExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def compExpr(self): - return self.getTypedRuleContext(MathExprParser.CompExprContext,0) - - def NE(self): - return self.getToken(MathExprParser.NE, 0) - def relationalExpr(self): - return self.getTypedRuleContext(MathExprParser.RelationalExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNeExp" ): - listener.enterNeExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNeExp" ): - listener.exitNeExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNeExp" ): - return visitor.visitNeExp(self) - else: - return visitor.visitChildren(self) - - - - def compExpr(self, _p:int=0): - _parentctx = self._ctx - _parentState = self.state - localctx = MathExprParser.CompExprContext(self, self._ctx, _parentState) - _prevctx = localctx - _startState = 32 - self.enterRecursionRule(localctx, 32, self.RULE_compExpr, _p) - try: - self.enterOuterAlt(localctx, 1) - localctx = MathExprParser.ToRelationalContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - - self.state = 213 - self.relationalExpr(0) - self._ctx.stop = self._input.LT(-1) - self.state = 223 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,16,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - if self._parseListeners is not None: - self.triggerExitRuleEvent() - _prevctx = localctx - self.state = 221 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,15,self._ctx) - if la_ == 1: - localctx = MathExprParser.EqExpContext(self, MathExprParser.CompExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_compExpr) - self.state = 215 - if not self.precpred(self._ctx, 3): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 216 - self.match(MathExprParser.EQ) - self.state = 217 - self.relationalExpr(0) - pass - - elif la_ == 2: - localctx = MathExprParser.NeExpContext(self, MathExprParser.CompExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_compExpr) - self.state = 218 - if not self.precpred(self._ctx, 2): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 219 - self.match(MathExprParser.NE) - self.state = 220 - self.relationalExpr(0) - pass - - - self.state = 225 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,16,self._ctx) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.unrollRecursionContexts(_parentctx) - return localctx - - - class RelationalExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_relationalExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - class ToShiftContext(RelationalExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.RelationalExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def shiftExpr(self): - return self.getTypedRuleContext(MathExprParser.ShiftExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterToShift" ): - listener.enterToShift(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitToShift" ): - listener.exitToShift(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitToShift" ): - return visitor.visitToShift(self) - else: - return visitor.visitChildren(self) - - - class LtExpContext(RelationalExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.RelationalExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def relationalExpr(self): - return self.getTypedRuleContext(MathExprParser.RelationalExprContext,0) - - def LT(self): - return self.getToken(MathExprParser.LT, 0) - def shiftExpr(self): - return self.getTypedRuleContext(MathExprParser.ShiftExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLtExp" ): - listener.enterLtExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLtExp" ): - listener.exitLtExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLtExp" ): - return visitor.visitLtExp(self) - else: - return visitor.visitChildren(self) - - - class GeExpContext(RelationalExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.RelationalExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def relationalExpr(self): - return self.getTypedRuleContext(MathExprParser.RelationalExprContext,0) - - def GE(self): - return self.getToken(MathExprParser.GE, 0) - def shiftExpr(self): - return self.getTypedRuleContext(MathExprParser.ShiftExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGeExp" ): - listener.enterGeExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGeExp" ): - listener.exitGeExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGeExp" ): - return visitor.visitGeExp(self) - else: - return visitor.visitChildren(self) - - - class LeExpContext(RelationalExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.RelationalExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def relationalExpr(self): - return self.getTypedRuleContext(MathExprParser.RelationalExprContext,0) - - def LE(self): - return self.getToken(MathExprParser.LE, 0) - def shiftExpr(self): - return self.getTypedRuleContext(MathExprParser.ShiftExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLeExp" ): - listener.enterLeExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLeExp" ): - listener.exitLeExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLeExp" ): - return visitor.visitLeExp(self) - else: - return visitor.visitChildren(self) - - - class GtExpContext(RelationalExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.RelationalExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def relationalExpr(self): - return self.getTypedRuleContext(MathExprParser.RelationalExprContext,0) - - def GT(self): - return self.getToken(MathExprParser.GT, 0) - def shiftExpr(self): - return self.getTypedRuleContext(MathExprParser.ShiftExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGtExp" ): - listener.enterGtExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGtExp" ): - listener.exitGtExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGtExp" ): - return visitor.visitGtExp(self) - else: - return visitor.visitChildren(self) - - - - def relationalExpr(self, _p:int=0): - _parentctx = self._ctx - _parentState = self.state - localctx = MathExprParser.RelationalExprContext(self, self._ctx, _parentState) - _prevctx = localctx - _startState = 34 - self.enterRecursionRule(localctx, 34, self.RULE_relationalExpr, _p) - try: - self.enterOuterAlt(localctx, 1) - localctx = MathExprParser.ToShiftContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - - self.state = 227 - self.shiftExpr(0) - self._ctx.stop = self._input.LT(-1) - self.state = 243 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,18,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - if self._parseListeners is not None: - self.triggerExitRuleEvent() - _prevctx = localctx - self.state = 241 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,17,self._ctx) - if la_ == 1: - localctx = MathExprParser.GtExpContext(self, MathExprParser.RelationalExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpr) - self.state = 229 - if not self.precpred(self._ctx, 5): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 230 - self.match(MathExprParser.GT) - self.state = 231 - self.shiftExpr(0) - pass - - elif la_ == 2: - localctx = MathExprParser.GeExpContext(self, MathExprParser.RelationalExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpr) - self.state = 232 - if not self.precpred(self._ctx, 4): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 233 - self.match(MathExprParser.GE) - self.state = 234 - self.shiftExpr(0) - pass - - elif la_ == 3: - localctx = MathExprParser.LtExpContext(self, MathExprParser.RelationalExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpr) - self.state = 235 - if not self.precpred(self._ctx, 3): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 236 - self.match(MathExprParser.LT) - self.state = 237 - self.shiftExpr(0) - pass - - elif la_ == 4: - localctx = MathExprParser.LeExpContext(self, MathExprParser.RelationalExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_relationalExpr) - self.state = 238 - if not self.precpred(self._ctx, 2): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 239 - self.match(MathExprParser.LE) - self.state = 240 - self.shiftExpr(0) - pass - - - self.state = 245 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,18,self._ctx) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.unrollRecursionContexts(_parentctx) - return localctx - - - class AddExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_addExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - class AddExpContext(AddExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AddExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def addExpr(self): - return self.getTypedRuleContext(MathExprParser.AddExprContext,0) - - def PLUS(self): - return self.getToken(MathExprParser.PLUS, 0) - def mulExpr(self): - return self.getTypedRuleContext(MathExprParser.MulExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAddExp" ): - listener.enterAddExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAddExp" ): - listener.exitAddExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAddExp" ): - return visitor.visitAddExp(self) - else: - return visitor.visitChildren(self) - - - class ToMulContext(AddExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AddExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def mulExpr(self): - return self.getTypedRuleContext(MathExprParser.MulExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterToMul" ): - listener.enterToMul(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitToMul" ): - listener.exitToMul(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitToMul" ): - return visitor.visitToMul(self) - else: - return visitor.visitChildren(self) - - - class SubExpContext(AddExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AddExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def addExpr(self): - return self.getTypedRuleContext(MathExprParser.AddExprContext,0) - - def MINUS(self): - return self.getToken(MathExprParser.MINUS, 0) - def mulExpr(self): - return self.getTypedRuleContext(MathExprParser.MulExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSubExp" ): - listener.enterSubExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSubExp" ): - listener.exitSubExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSubExp" ): - return visitor.visitSubExp(self) - else: - return visitor.visitChildren(self) - - - - def addExpr(self, _p:int=0): - _parentctx = self._ctx - _parentState = self.state - localctx = MathExprParser.AddExprContext(self, self._ctx, _parentState) - _prevctx = localctx - _startState = 36 - self.enterRecursionRule(localctx, 36, self.RULE_addExpr, _p) - try: - self.enterOuterAlt(localctx, 1) - localctx = MathExprParser.ToMulContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - - self.state = 247 - self.mulExpr(0) - self._ctx.stop = self._input.LT(-1) - self.state = 257 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - if self._parseListeners is not None: - self.triggerExitRuleEvent() - _prevctx = localctx - self.state = 255 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,19,self._ctx) - if la_ == 1: - localctx = MathExprParser.AddExpContext(self, MathExprParser.AddExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_addExpr) - self.state = 249 - if not self.precpred(self._ctx, 3): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 250 - self.match(MathExprParser.PLUS) - self.state = 251 - self.mulExpr(0) - pass - - elif la_ == 2: - localctx = MathExprParser.SubExpContext(self, MathExprParser.AddExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_addExpr) - self.state = 252 - if not self.precpred(self._ctx, 2): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 253 - self.match(MathExprParser.MINUS) - self.state = 254 - self.mulExpr(0) - pass - - - self.state = 259 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,20,self._ctx) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.unrollRecursionContexts(_parentctx) - return localctx - - - class MulExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_mulExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - class MulExpContext(MulExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.MulExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def mulExpr(self): - return self.getTypedRuleContext(MathExprParser.MulExprContext,0) - - def MULT(self): - return self.getToken(MathExprParser.MULT, 0) - def powExpr(self): - return self.getTypedRuleContext(MathExprParser.PowExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMulExp" ): - listener.enterMulExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMulExp" ): - listener.exitMulExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMulExp" ): - return visitor.visitMulExp(self) - else: - return visitor.visitChildren(self) - - - class ModExpContext(MulExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.MulExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def mulExpr(self): - return self.getTypedRuleContext(MathExprParser.MulExprContext,0) - - def MOD(self): - return self.getToken(MathExprParser.MOD, 0) - def powExpr(self): - return self.getTypedRuleContext(MathExprParser.PowExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterModExp" ): - listener.enterModExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitModExp" ): - listener.exitModExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitModExp" ): - return visitor.visitModExp(self) - else: - return visitor.visitChildren(self) - - - class DivExpContext(MulExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.MulExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def mulExpr(self): - return self.getTypedRuleContext(MathExprParser.MulExprContext,0) - - def DIV(self): - return self.getToken(MathExprParser.DIV, 0) - def powExpr(self): - return self.getTypedRuleContext(MathExprParser.PowExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDivExp" ): - listener.enterDivExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDivExp" ): - listener.exitDivExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDivExp" ): - return visitor.visitDivExp(self) - else: - return visitor.visitChildren(self) - - - class ToPowContext(MulExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.MulExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def powExpr(self): - return self.getTypedRuleContext(MathExprParser.PowExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterToPow" ): - listener.enterToPow(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitToPow" ): - listener.exitToPow(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitToPow" ): - return visitor.visitToPow(self) - else: - return visitor.visitChildren(self) - - - - def mulExpr(self, _p:int=0): - _parentctx = self._ctx - _parentState = self.state - localctx = MathExprParser.MulExprContext(self, self._ctx, _parentState) - _prevctx = localctx - _startState = 38 - self.enterRecursionRule(localctx, 38, self.RULE_mulExpr, _p) - try: - self.enterOuterAlt(localctx, 1) - localctx = MathExprParser.ToPowContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - - self.state = 261 - self.powExpr() - self._ctx.stop = self._input.LT(-1) - self.state = 274 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - if self._parseListeners is not None: - self.triggerExitRuleEvent() - _prevctx = localctx - self.state = 272 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,21,self._ctx) - if la_ == 1: - localctx = MathExprParser.MulExpContext(self, MathExprParser.MulExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_mulExpr) - self.state = 263 - if not self.precpred(self._ctx, 4): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 264 - self.match(MathExprParser.MULT) - self.state = 265 - self.powExpr() - pass - - elif la_ == 2: - localctx = MathExprParser.DivExpContext(self, MathExprParser.MulExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_mulExpr) - self.state = 266 - if not self.precpred(self._ctx, 3): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 267 - self.match(MathExprParser.DIV) - self.state = 268 - self.powExpr() - pass - - elif la_ == 3: - localctx = MathExprParser.ModExpContext(self, MathExprParser.MulExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_mulExpr) - self.state = 269 - if not self.precpred(self._ctx, 2): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 270 - self.match(MathExprParser.MOD) - self.state = 271 - self.powExpr() - pass - - - self.state = 276 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,22,self._ctx) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.unrollRecursionContexts(_parentctx) - return localctx - - - class ShiftExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_shiftExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - class ToAddContext(ShiftExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.ShiftExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def addExpr(self): - return self.getTypedRuleContext(MathExprParser.AddExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterToAdd" ): - listener.enterToAdd(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitToAdd" ): - listener.exitToAdd(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitToAdd" ): - return visitor.visitToAdd(self) - else: - return visitor.visitChildren(self) - - - class RShiftExpContext(ShiftExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.ShiftExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def shiftExpr(self): - return self.getTypedRuleContext(MathExprParser.ShiftExprContext,0) - - def RSHIFT(self): - return self.getToken(MathExprParser.RSHIFT, 0) - def addExpr(self): - return self.getTypedRuleContext(MathExprParser.AddExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRShiftExp" ): - listener.enterRShiftExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRShiftExp" ): - listener.exitRShiftExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRShiftExp" ): - return visitor.visitRShiftExp(self) - else: - return visitor.visitChildren(self) - - - class LShiftExpContext(ShiftExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.ShiftExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def shiftExpr(self): - return self.getTypedRuleContext(MathExprParser.ShiftExprContext,0) - - def LSHIFT(self): - return self.getToken(MathExprParser.LSHIFT, 0) - def addExpr(self): - return self.getTypedRuleContext(MathExprParser.AddExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLShiftExp" ): - listener.enterLShiftExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLShiftExp" ): - listener.exitLShiftExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLShiftExp" ): - return visitor.visitLShiftExp(self) - else: - return visitor.visitChildren(self) - - - - def shiftExpr(self, _p:int=0): - _parentctx = self._ctx - _parentState = self.state - localctx = MathExprParser.ShiftExprContext(self, self._ctx, _parentState) - _prevctx = localctx - _startState = 40 - self.enterRecursionRule(localctx, 40, self.RULE_shiftExpr, _p) - try: - self.enterOuterAlt(localctx, 1) - localctx = MathExprParser.ToAddContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - - self.state = 278 - self.addExpr(0) - self._ctx.stop = self._input.LT(-1) - self.state = 288 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - if self._parseListeners is not None: - self.triggerExitRuleEvent() - _prevctx = localctx - self.state = 286 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,23,self._ctx) - if la_ == 1: - localctx = MathExprParser.LShiftExpContext(self, MathExprParser.ShiftExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpr) - self.state = 280 - if not self.precpred(self._ctx, 3): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 281 - self.match(MathExprParser.LSHIFT) - self.state = 282 - self.addExpr(0) - pass - - elif la_ == 2: - localctx = MathExprParser.RShiftExpContext(self, MathExprParser.ShiftExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_shiftExpr) - self.state = 283 - if not self.precpred(self._ctx, 2): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 284 - self.match(MathExprParser.RSHIFT) - self.state = 285 - self.addExpr(0) - pass - - - self.state = 290 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,24,self._ctx) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.unrollRecursionContexts(_parentctx) - return localctx - - - class PowExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_powExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class PowExpContext(PowExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.PowExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def unaryExpr(self): - return self.getTypedRuleContext(MathExprParser.UnaryExprContext,0) - - def POW(self): - return self.getToken(MathExprParser.POW, 0) - def powExpr(self): - return self.getTypedRuleContext(MathExprParser.PowExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPowExp" ): - listener.enterPowExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPowExp" ): - listener.exitPowExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPowExp" ): - return visitor.visitPowExp(self) - else: - return visitor.visitChildren(self) - - - class ToUnaryContext(PowExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.PowExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def unaryExpr(self): - return self.getTypedRuleContext(MathExprParser.UnaryExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterToUnary" ): - listener.enterToUnary(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitToUnary" ): - listener.exitToUnary(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitToUnary" ): - return visitor.visitToUnary(self) - else: - return visitor.visitChildren(self) - - - - def powExpr(self): - - localctx = MathExprParser.PowExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 42, self.RULE_powExpr) - try: - self.state = 296 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,25,self._ctx) - if la_ == 1: - localctx = MathExprParser.PowExpContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 291 - self.unaryExpr() - self.state = 292 - self.match(MathExprParser.POW) - self.state = 293 - self.powExpr() - pass - - elif la_ == 2: - localctx = MathExprParser.ToUnaryContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 295 - self.unaryExpr() - pass - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class UnaryExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_unaryExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class UnaryPlusContext(UnaryExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.UnaryExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def PLUS(self): - return self.getToken(MathExprParser.PLUS, 0) - def unaryExpr(self): - return self.getTypedRuleContext(MathExprParser.UnaryExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUnaryPlus" ): - listener.enterUnaryPlus(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUnaryPlus" ): - listener.exitUnaryPlus(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUnaryPlus" ): - return visitor.visitUnaryPlus(self) - else: - return visitor.visitChildren(self) - - - class UnaryMinusContext(UnaryExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.UnaryExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def MINUS(self): - return self.getToken(MathExprParser.MINUS, 0) - def unaryExpr(self): - return self.getTypedRuleContext(MathExprParser.UnaryExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUnaryMinus" ): - listener.enterUnaryMinus(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUnaryMinus" ): - listener.exitUnaryMinus(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUnaryMinus" ): - return visitor.visitUnaryMinus(self) - else: - return visitor.visitChildren(self) - - - class ToIndexContext(UnaryExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.UnaryExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def indexExpr(self): - return self.getTypedRuleContext(MathExprParser.IndexExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterToIndex" ): - listener.enterToIndex(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitToIndex" ): - listener.exitToIndex(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitToIndex" ): - return visitor.visitToIndex(self) - else: - return visitor.visitChildren(self) - - - - def unaryExpr(self): - - localctx = MathExprParser.UnaryExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 44, self.RULE_unaryExpr) - try: - self.state = 303 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [209]: - localctx = MathExprParser.UnaryPlusContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 298 - self.match(MathExprParser.PLUS) - self.state = 299 - self.unaryExpr() - pass - elif token in [210]: - localctx = MathExprParser.UnaryMinusContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 300 - self.match(MathExprParser.MINUS) - self.state = 301 - self.unaryExpr() - pass - 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, 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, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 164, 165, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 229, 230, 235, 239, 241, 242, 243, 244]: - localctx = MathExprParser.ToIndexContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 302 - self.indexExpr(0) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class IndexExprContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_indexExpr - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - class IndexExpContext(IndexExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.IndexExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def indexExpr(self): - return self.getTypedRuleContext(MathExprParser.IndexExprContext,0) - - def LBRACKET(self): - return self.getToken(MathExprParser.LBRACKET, 0) - def sliceElement(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.SliceElementContext) - else: - return self.getTypedRuleContext(MathExprParser.SliceElementContext,i) - - def RBRACKET(self): - return self.getToken(MathExprParser.RBRACKET, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIndexExp" ): - listener.enterIndexExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIndexExp" ): - listener.exitIndexExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIndexExp" ): - return visitor.visitIndexExp(self) - else: - return visitor.visitChildren(self) - - - class ToAtomContext(IndexExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.IndexExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def atom(self): - return self.getTypedRuleContext(MathExprParser.AtomContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterToAtom" ): - listener.enterToAtom(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitToAtom" ): - listener.exitToAtom(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitToAtom" ): - return visitor.visitToAtom(self) - else: - return visitor.visitChildren(self) - - - - def indexExpr(self, _p:int=0): - _parentctx = self._ctx - _parentState = self.state - localctx = MathExprParser.IndexExprContext(self, self._ctx, _parentState) - _prevctx = localctx - _startState = 46 - self.enterRecursionRule(localctx, 46, self.RULE_indexExpr, _p) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - localctx = MathExprParser.ToAtomContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - - self.state = 306 - self.atom() - self._ctx.stop = self._input.LT(-1) - self.state = 322 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) - while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: - if _alt==1: - if self._parseListeners is not None: - self.triggerExitRuleEvent() - _prevctx = localctx - localctx = MathExprParser.IndexExpContext(self, MathExprParser.IndexExprContext(self, _parentctx, _parentState)) - self.pushNewRecursionContext(localctx, _startState, self.RULE_indexExpr) - self.state = 308 - if not self.precpred(self._ctx, 2): - from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 309 - self.match(MathExprParser.LBRACKET) - self.state = 310 - self.sliceElement() - self.state = 315 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==232: - self.state = 311 - self.match(MathExprParser.COMMA) - self.state = 312 - self.sliceElement() - self.state = 317 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 318 - self.match(MathExprParser.RBRACKET) - self.state = 324 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,28,self._ctx) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.unrollRecursionContexts(_parentctx) - return localctx - - - class SliceElementContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_sliceElement - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class IndexOnlyContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIndexOnly" ): - listener.enterIndexOnly(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIndexOnly" ): - listener.exitIndexOnly(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIndexOnly" ): - return visitor.visitIndexOnly(self) - else: - return visitor.visitChildren(self) - - - class SliceContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COLON(self): - return self.getToken(MathExprParser.COLON, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSlice" ): - listener.enterSlice(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSlice" ): - listener.exitSlice(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSlice" ): - return visitor.visitSlice(self) - else: - return visitor.visitChildren(self) - - - class SliceColonStartContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def COLON(self): - return self.getToken(MathExprParser.COLON, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSliceColonStart" ): - listener.enterSliceColonStart(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSliceColonStart" ): - listener.exitSliceColonStart(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSliceColonStart" ): - return visitor.visitSliceColonStart(self) - else: - return visitor.visitChildren(self) - - - class SliceColonStartStepContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def COLON(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COLON) - else: - return self.getToken(MathExprParser.COLON, i) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSliceColonStartStep" ): - listener.enterSliceColonStartStep(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSliceColonStartStep" ): - listener.exitSliceColonStartStep(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSliceColonStartStep" ): - return visitor.visitSliceColonStartStep(self) - else: - return visitor.visitChildren(self) - - - class SliceExprContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def COLON(self): - return self.getToken(MathExprParser.COLON, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSliceExpr" ): - listener.enterSliceExpr(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSliceExpr" ): - listener.exitSliceExpr(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSliceExpr" ): - return visitor.visitSliceExpr(self) - else: - return visitor.visitChildren(self) - - - class SliceColonStepContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def COLON(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COLON) - else: - return self.getToken(MathExprParser.COLON, i) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSliceColonStep" ): - listener.enterSliceColonStep(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSliceColonStep" ): - listener.exitSliceColonStep(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSliceColonStep" ): - return visitor.visitSliceColonStep(self) - else: - return visitor.visitChildren(self) - - - class SliceWithStepContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COLON(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COLON) - else: - return self.getToken(MathExprParser.COLON, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSliceWithStep" ): - listener.enterSliceWithStep(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSliceWithStep" ): - listener.exitSliceWithStep(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSliceWithStep" ): - return visitor.visitSliceWithStep(self) - else: - return visitor.visitChildren(self) - - - class SliceExprColonStepContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COLON(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COLON) - else: - return self.getToken(MathExprParser.COLON, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSliceExprColonStep" ): - listener.enterSliceExprColonStep(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSliceExprColonStep" ): - listener.exitSliceExprColonStep(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSliceExprColonStep" ): - return visitor.visitSliceExprColonStep(self) - else: - return visitor.visitChildren(self) - - - class SliceOnlyContext(SliceElementContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.SliceElementContext - super().__init__(parser) - self.copyFrom(ctx) - - def COLON(self): - return self.getToken(MathExprParser.COLON, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSliceOnly" ): - listener.enterSliceOnly(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSliceOnly" ): - listener.exitSliceOnly(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSliceOnly" ): - return visitor.visitSliceOnly(self) - else: - return visitor.visitChildren(self) - - - - def sliceElement(self): - - localctx = MathExprParser.SliceElementContext(self, self._ctx, self.state) - self.enterRule(localctx, 48, self.RULE_sliceElement) - try: - self.state = 355 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,29,self._ctx) - if la_ == 1: - localctx = MathExprParser.SliceWithStepContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 325 - self.expr() - self.state = 326 - self.match(MathExprParser.COLON) - self.state = 327 - self.expr() - self.state = 328 - self.match(MathExprParser.COLON) - self.state = 329 - self.expr() - pass - - elif la_ == 2: - localctx = MathExprParser.SliceContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 331 - self.expr() - self.state = 332 - self.match(MathExprParser.COLON) - self.state = 333 - self.expr() - pass - - elif la_ == 3: - localctx = MathExprParser.SliceColonStartStepContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 335 - self.match(MathExprParser.COLON) - self.state = 336 - self.expr() - self.state = 337 - self.match(MathExprParser.COLON) - self.state = 338 - self.expr() - pass - - elif la_ == 4: - localctx = MathExprParser.SliceColonStartContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 340 - self.match(MathExprParser.COLON) - self.state = 341 - self.expr() - pass - - elif la_ == 5: - localctx = MathExprParser.SliceExprColonStepContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 342 - self.expr() - self.state = 343 - self.match(MathExprParser.COLON) - self.state = 344 - self.match(MathExprParser.COLON) - self.state = 345 - self.expr() - pass - - elif la_ == 6: - localctx = MathExprParser.SliceExprContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 347 - self.expr() - self.state = 348 - self.match(MathExprParser.COLON) - pass - - elif la_ == 7: - localctx = MathExprParser.SliceColonStepContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 350 - self.match(MathExprParser.COLON) - self.state = 351 - self.match(MathExprParser.COLON) - self.state = 352 - self.expr() - pass - - elif la_ == 8: - localctx = MathExprParser.SliceOnlyContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 353 - self.match(MathExprParser.COLON) - pass - - elif la_ == 9: - localctx = MathExprParser.IndexOnlyContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 354 - self.expr() - pass - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class AtomContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_atom - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class Func5ExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def func5(self): - return self.getTypedRuleContext(MathExprParser.Func5Context,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunc5Exp" ): - listener.enterFunc5Exp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunc5Exp" ): - listener.exitFunc5Exp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunc5Exp" ): - return visitor.visitFunc5Exp(self) - else: - return visitor.visitChildren(self) - - - class Func4ExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def func4(self): - return self.getTypedRuleContext(MathExprParser.Func4Context,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunc4Exp" ): - listener.enterFunc4Exp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunc4Exp" ): - listener.exitFunc4Exp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunc4Exp" ): - return visitor.visitFunc4Exp(self) - else: - return visitor.visitChildren(self) - - - class Func2ExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def func2(self): - return self.getTypedRuleContext(MathExprParser.Func2Context,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunc2Exp" ): - listener.enterFunc2Exp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunc2Exp" ): - listener.exitFunc2Exp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunc2Exp" ): - return visitor.visitFunc2Exp(self) - else: - return visitor.visitChildren(self) - - - class Func3ExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def func3(self): - return self.getTypedRuleContext(MathExprParser.Func3Context,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunc3Exp" ): - listener.enterFunc3Exp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunc3Exp" ): - listener.exitFunc3Exp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunc3Exp" ): - return visitor.visitFunc3Exp(self) - else: - return visitor.visitChildren(self) - - - class StringExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def STRING(self): - return self.getToken(MathExprParser.STRING, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStringExp" ): - listener.enterStringExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStringExp" ): - listener.exitStringExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStringExp" ): - return visitor.visitStringExp(self) - else: - return visitor.visitChildren(self) - - - class LambdaExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def paramList(self): - return self.getTypedRuleContext(MathExprParser.ParamListContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def ARROW(self): - return self.getToken(MathExprParser.ARROW, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def block(self): - return self.getTypedRuleContext(MathExprParser.BlockContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLambdaExp" ): - listener.enterLambdaExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLambdaExp" ): - listener.exitLambdaExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLambdaExp" ): - return visitor.visitLambdaExp(self) - else: - return visitor.visitChildren(self) - - - class ConstantExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def CONSTANT(self): - return self.getToken(MathExprParser.CONSTANT, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterConstantExp" ): - listener.enterConstantExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitConstantExp" ): - listener.exitConstantExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitConstantExp" ): - return visitor.visitConstantExp(self) - else: - return visitor.visitChildren(self) - - - class NoneExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def NONE(self): - return self.getToken(MathExprParser.NONE, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNoneExp" ): - listener.enterNoneExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNoneExp" ): - listener.exitNoneExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNoneExp" ): - return visitor.visitNoneExp(self) - else: - return visitor.visitChildren(self) - - - class BreakExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def BREAK(self): - return self.getToken(MathExprParser.BREAK, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBreakExp" ): - listener.enterBreakExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBreakExp" ): - listener.exitBreakExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBreakExp" ): - return visitor.visitBreakExp(self) - else: - return visitor.visitChildren(self) - - - class FuncNExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def funcN(self): - return self.getTypedRuleContext(MathExprParser.FuncNContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFuncNExp" ): - listener.enterFuncNExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFuncNExp" ): - listener.exitFuncNExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFuncNExp" ): - return visitor.visitFuncNExp(self) - else: - return visitor.visitChildren(self) - - - class AbsExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def PIPE(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.PIPE) - else: - return self.getToken(MathExprParser.PIPE, i) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAbsExp" ): - listener.enterAbsExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAbsExp" ): - listener.exitAbsExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAbsExp" ): - return visitor.visitAbsExp(self) - else: - return visitor.visitChildren(self) - - - class ListExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def LBRACKET(self): - return self.getToken(MathExprParser.LBRACKET, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RBRACKET(self): - return self.getToken(MathExprParser.RBRACKET, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterListExp" ): - listener.enterListExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitListExp" ): - listener.exitListExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitListExp" ): - return visitor.visitListExp(self) - else: - return visitor.visitChildren(self) - - - class ContinueExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def CONTINUE(self): - return self.getToken(MathExprParser.CONTINUE, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterContinueExp" ): - listener.enterContinueExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitContinueExp" ): - listener.exitContinueExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitContinueExp" ): - return visitor.visitContinueExp(self) - else: - return visitor.visitChildren(self) - - - class VariableExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def VARIABLE(self): - return self.getToken(MathExprParser.VARIABLE, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVariableExp" ): - listener.enterVariableExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVariableExp" ): - listener.exitVariableExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVariableExp" ): - return visitor.visitVariableExp(self) - else: - return visitor.visitChildren(self) - - - class CallExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def VARIABLE(self): - return self.getToken(MathExprParser.VARIABLE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def exprList(self): - return self.getTypedRuleContext(MathExprParser.ExprListContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCallExp" ): - listener.enterCallExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCallExp" ): - listener.exitCallExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCallExp" ): - return visitor.visitCallExp(self) - else: - return visitor.visitChildren(self) - - - class ParenExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterParenExp" ): - listener.enterParenExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitParenExp" ): - listener.exitParenExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitParenExp" ): - return visitor.visitParenExp(self) - else: - return visitor.visitChildren(self) - - - class FuncNoiseExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def funcNoise(self): - return self.getTypedRuleContext(MathExprParser.FuncNoiseContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFuncNoiseExp" ): - listener.enterFuncNoiseExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFuncNoiseExp" ): - listener.exitFuncNoiseExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFuncNoiseExp" ): - return visitor.visitFuncNoiseExp(self) - else: - return visitor.visitChildren(self) - - - class Func1ExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def func1(self): - return self.getTypedRuleContext(MathExprParser.Func1Context,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunc1Exp" ): - listener.enterFunc1Exp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunc1Exp" ): - listener.exitFunc1Exp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunc1Exp" ): - return visitor.visitFunc1Exp(self) - else: - return visitor.visitChildren(self) - - - class DictExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def LBRACE(self): - return self.getToken(MathExprParser.LBRACE, 0) - def RBRACE(self): - return self.getToken(MathExprParser.RBRACE, 0) - def dictEntryList(self): - return self.getTypedRuleContext(MathExprParser.DictEntryListContext,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDictExp" ): - listener.enterDictExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDictExp" ): - listener.exitDictExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDictExp" ): - return visitor.visitDictExp(self) - else: - return visitor.visitChildren(self) - - - class Func0ExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def func0(self): - return self.getTypedRuleContext(MathExprParser.Func0Context,0) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFunc0Exp" ): - listener.enterFunc0Exp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFunc0Exp" ): - listener.exitFunc0Exp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFunc0Exp" ): - return visitor.visitFunc0Exp(self) - else: - return visitor.visitChildren(self) - - - class NumberExpContext(AtomContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.AtomContext - super().__init__(parser) - self.copyFrom(ctx) - - def NUMBER(self): - return self.getToken(MathExprParser.NUMBER, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNumberExp" ): - listener.enterNumberExp(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNumberExp" ): - listener.exitNumberExp(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNumberExp" ): - return visitor.visitNumberExp(self) - else: - return visitor.visitChildren(self) - - - - def atom(self): - - localctx = MathExprParser.AtomContext(self, self._ctx, self.state) - self.enterRule(localctx, 50, self.RULE_atom) - self._la = 0 # Token type - try: - self.state = 414 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,34,self._ctx) - if la_ == 1: - localctx = MathExprParser.Func0ExpContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 357 - self.func0() - pass - - elif la_ == 2: - localctx = MathExprParser.Func1ExpContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 358 - self.func1() - pass - - elif la_ == 3: - localctx = MathExprParser.Func2ExpContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 359 - self.func2() - pass - - elif la_ == 4: - localctx = MathExprParser.Func3ExpContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 360 - self.func3() - pass - - elif la_ == 5: - localctx = MathExprParser.Func4ExpContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 361 - self.func4() - pass - - elif la_ == 6: - localctx = MathExprParser.Func5ExpContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 362 - self.func5() - pass - - elif la_ == 7: - localctx = MathExprParser.FuncNExpContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 363 - self.funcN() - pass - - elif la_ == 8: - localctx = MathExprParser.FuncNoiseExpContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 364 - self.funcNoise() - pass - - elif la_ == 9: - localctx = MathExprParser.VariableExpContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 365 - self.match(MathExprParser.VARIABLE) - pass - - elif la_ == 10: - localctx = MathExprParser.NumberExpContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 366 - self.match(MathExprParser.NUMBER) - pass - - elif la_ == 11: - localctx = MathExprParser.ConstantExpContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 367 - self.match(MathExprParser.CONSTANT) - pass - - elif la_ == 12: - localctx = MathExprParser.StringExpContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 368 - self.match(MathExprParser.STRING) - pass - - elif la_ == 13: - localctx = MathExprParser.LambdaExpContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 369 - self.match(MathExprParser.LPAREN) - self.state = 370 - self.paramList() - self.state = 371 - self.match(MathExprParser.RPAREN) - self.state = 372 - self.match(MathExprParser.ARROW) - self.state = 375 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,30,self._ctx) - if la_ == 1: - self.state = 373 - self.expr() - pass - - elif la_ == 2: - self.state = 374 - self.block() - pass - - - pass - - elif la_ == 14: - localctx = MathExprParser.ParenExpContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 377 - self.match(MathExprParser.LPAREN) - self.state = 378 - self.expr() - self.state = 379 - self.match(MathExprParser.RPAREN) - pass - - elif la_ == 15: - localctx = MathExprParser.ParenExpContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 381 - self.match(MathExprParser.LPAREN) - self.state = 382 - self.expr() - self.state = 383 - self.match(MathExprParser.RPAREN) - pass - - elif la_ == 16: - localctx = MathExprParser.AbsExpContext(self, localctx) - self.enterOuterAlt(localctx, 16) - self.state = 385 - self.match(MathExprParser.PIPE) - self.state = 386 - self.expr() - self.state = 387 - self.match(MathExprParser.PIPE) - pass - - elif la_ == 17: - localctx = MathExprParser.ListExpContext(self, localctx) - self.enterOuterAlt(localctx, 17) - self.state = 389 - self.match(MathExprParser.LBRACKET) - self.state = 390 - self.expr() - self.state = 395 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==232: - self.state = 391 - self.match(MathExprParser.COMMA) - self.state = 392 - self.expr() - self.state = 397 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 398 - self.match(MathExprParser.RBRACKET) - pass - - elif la_ == 18: - localctx = MathExprParser.DictExpContext(self, localctx) - self.enterOuterAlt(localctx, 18) - self.state = 400 - self.match(MathExprParser.LBRACE) - self.state = 402 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((((_la - 241)) & ~0x3f) == 0 and ((1 << (_la - 241)) & 13) != 0): - self.state = 401 - self.dictEntryList() - - - self.state = 404 - self.match(MathExprParser.RBRACE) - pass - - elif la_ == 19: - localctx = MathExprParser.CallExpContext(self, localctx) - self.enterOuterAlt(localctx, 19) - self.state = 405 - self.match(MathExprParser.VARIABLE) - self.state = 406 - self.match(MathExprParser.LPAREN) - self.state = 408 - self._errHandler.sync(self) - _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -341449900033) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 8594195200081919) != 0): - self.state = 407 - self.exprList() - - - self.state = 410 - self.match(MathExprParser.RPAREN) - pass - - elif la_ == 20: - localctx = MathExprParser.NoneExpContext(self, localctx) - self.enterOuterAlt(localctx, 20) - self.state = 411 - self.match(MathExprParser.NONE) - pass - - elif la_ == 21: - localctx = MathExprParser.BreakExpContext(self, localctx) - self.enterOuterAlt(localctx, 21) - self.state = 412 - self.match(MathExprParser.BREAK) - pass - - elif la_ == 22: - localctx = MathExprParser.ContinueExpContext(self, localctx) - self.enterOuterAlt(localctx, 22) - self.state = 413 - self.match(MathExprParser.CONTINUE) - pass - - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class ExprListContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def getRuleIndex(self): - return MathExprParser.RULE_exprList - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExprList" ): - listener.enterExprList(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExprList" ): - listener.exitExprList(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExprList" ): - return visitor.visitExprList(self) - else: - return visitor.visitChildren(self) - - - - - def exprList(self): - - localctx = MathExprParser.ExprListContext(self, self._ctx, self.state) - self.enterRule(localctx, 52, self.RULE_exprList) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 416 - self.expr() - self.state = 421 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==232: - self.state = 417 - self.match(MathExprParser.COMMA) - self.state = 418 - self.expr() - self.state = 423 - self._errHandler.sync(self) - _la = self._input.LA(1) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class Func0Context(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_func0 - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class TimestampFuncContext(Func0Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func0Context - super().__init__(parser) - self.copyFrom(ctx) - - def TIMESTAMP(self): - return self.getToken(MathExprParser.TIMESTAMP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTimestampFunc" ): - listener.enterTimestampFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTimestampFunc" ): - listener.exitTimestampFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTimestampFunc" ): - return visitor.visitTimestampFunc(self) - else: - return visitor.visitChildren(self) - - - - def func0(self): - - localctx = MathExprParser.Func0Context(self, self._ctx, self.state) - self.enterRule(localctx, 54, self.RULE_func0) - try: - localctx = MathExprParser.TimestampFuncContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 424 - self.match(MathExprParser.TIMESTAMP) - self.state = 425 - self.match(MathExprParser.LPAREN) - self.state = 426 - self.match(MathExprParser.RPAREN) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class Func1Context(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_func1 - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class SoftplusFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SOFTPLUS(self): - return self.getToken(MathExprParser.SOFTPLUS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSoftplusFunc" ): - listener.enterSoftplusFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSoftplusFunc" ): - listener.exitSoftplusFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSoftplusFunc" ): - return visitor.visitSoftplusFunc(self) - else: - return visitor.visitChildren(self) - - - class SoftminFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SOFTMIN(self): - return self.getToken(MathExprParser.SOFTMIN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSoftminFunc" ): - listener.enterSoftminFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSoftminFunc" ): - listener.exitSoftminFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSoftminFunc" ): - return visitor.visitSoftminFunc(self) - else: - return visitor.visitChildren(self) - - - class AcoshFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ACOSH(self): - return self.getToken(MathExprParser.ACOSH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAcoshFunc" ): - listener.enterAcoshFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAcoshFunc" ): - listener.exitAcoshFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAcoshFunc" ): - return visitor.visitAcoshFunc(self) - else: - return visitor.visitChildren(self) - - - class SvdFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SVD(self): - return self.getToken(MathExprParser.SVD, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSvdFunc" ): - listener.enterSvdFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSvdFunc" ): - listener.exitSvdFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSvdFunc" ): - return visitor.visitSvdFunc(self) - else: - return visitor.visitChildren(self) - - - class SqrtFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SQRT(self): - return self.getToken(MathExprParser.SQRT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSqrtFunc" ): - listener.enterSqrtFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSqrtFunc" ): - listener.exitSqrtFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSqrtFunc" ): - return visitor.visitSqrtFunc(self) - else: - return visitor.visitChildren(self) - - - class FloorFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def FLOOR(self): - return self.getToken(MathExprParser.FLOOR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFloorFunc" ): - listener.enterFloorFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFloorFunc" ): - listener.exitFloorFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFloorFunc" ): - return visitor.visitFloorFunc(self) - else: - return visitor.visitChildren(self) - - - class ResetTrackingFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def RESET_TRACKING(self): - return self.getToken(MathExprParser.RESET_TRACKING, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterResetTrackingFunc" ): - listener.enterResetTrackingFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitResetTrackingFunc" ): - listener.exitResetTrackingFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitResetTrackingFunc" ): - return visitor.visitResetTrackingFunc(self) - else: - return visitor.visitChildren(self) - - - class MeanFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def MEAN(self): - return self.getToken(MathExprParser.MEAN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMeanFunc" ): - listener.enterMeanFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMeanFunc" ): - listener.exitMeanFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMeanFunc" ): - return visitor.visitMeanFunc(self) - else: - return visitor.visitChildren(self) - - - class CeilFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def CEIL(self): - return self.getToken(MathExprParser.CEIL, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCeilFunc" ): - listener.enterCeilFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCeilFunc" ): - listener.exitCeilFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCeilFunc" ): - return visitor.visitCeilFunc(self) - else: - return visitor.visitChildren(self) - - - class MotionMaskFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def MOTION_MASK(self): - return self.getToken(MathExprParser.MOTION_MASK, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMotionMaskFunc" ): - listener.enterMotionMaskFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMotionMaskFunc" ): - listener.exitMotionMaskFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMotionMaskFunc" ): - return visitor.visitMotionMaskFunc(self) - else: - return visitor.visitChildren(self) - - - class EntropyFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ENTROPY(self): - return self.getToken(MathExprParser.ENTROPY, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEntropyFunc" ): - listener.enterEntropyFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEntropyFunc" ): - listener.exitEntropyFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEntropyFunc" ): - return visitor.visitEntropyFunc(self) - else: - return visitor.visitChildren(self) - - - class EnableTrackingFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ENABLE_TRACKING(self): - return self.getToken(MathExprParser.ENABLE_TRACKING, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEnableTrackingFunc" ): - listener.enterEnableTrackingFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEnableTrackingFunc" ): - listener.exitEnableTrackingFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEnableTrackingFunc" ): - return visitor.visitEnableTrackingFunc(self) - else: - return visitor.visitChildren(self) - - - class AbsFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ABS(self): - return self.getToken(MathExprParser.ABS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAbsFunc" ): - listener.enterAbsFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAbsFunc" ): - listener.exitAbsFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAbsFunc" ): - return visitor.visitAbsFunc(self) - else: - return visitor.visitChildren(self) - - - class AtanFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ATAN(self): - return self.getToken(MathExprParser.ATAN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAtanFunc" ): - listener.enterAtanFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAtanFunc" ): - listener.exitAtanFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAtanFunc" ): - return visitor.visitAtanFunc(self) - else: - return visitor.visitChildren(self) - - - class TrimFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def TRIM(self): - return self.getToken(MathExprParser.TRIM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTrimFunc" ): - listener.enterTrimFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTrimFunc" ): - listener.exitTrimFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTrimFunc" ): - return visitor.visitTrimFunc(self) - else: - return visitor.visitChildren(self) - - - class SinhFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SINH(self): - return self.getToken(MathExprParser.SINH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSinhFunc" ): - listener.enterSinhFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSinhFunc" ): - listener.exitSinhFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSinhFunc" ): - return visitor.visitSinhFunc(self) - else: - return visitor.visitChildren(self) - - - class SigmoidFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SIGM(self): - return self.getToken(MathExprParser.SIGM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSigmoidFunc" ): - listener.enterSigmoidFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSigmoidFunc" ): - listener.exitSigmoidFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSigmoidFunc" ): - return visitor.visitSigmoidFunc(self) - else: - return visitor.visitChildren(self) - - - class BitNotFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def BNOT(self): - return self.getToken(MathExprParser.BNOT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBitNotFunc" ): - listener.enterBitNotFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBitNotFunc" ): - listener.exitBitNotFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBitNotFunc" ): - return visitor.visitBitNotFunc(self) - else: - return visitor.visitChildren(self) - - - class LogFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def LOG(self): - return self.getToken(MathExprParser.LOG, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLogFunc" ): - listener.enterLogFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLogFunc" ): - listener.exitLogFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLogFunc" ): - return visitor.visitLogFunc(self) - else: - return visitor.visitChildren(self) - - - class TNormFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def TNORM(self): - return self.getToken(MathExprParser.TNORM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTNormFunc" ): - listener.enterTNormFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTNormFunc" ): - listener.exitTNormFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTNormFunc" ): - return visitor.visitTNormFunc(self) - else: - return visitor.visitChildren(self) - - - class SinFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SIN(self): - return self.getToken(MathExprParser.SIN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSinFunc" ): - listener.enterSinFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSinFunc" ): - listener.exitSinFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSinFunc" ): - return visitor.visitSinFunc(self) - else: - return visitor.visitChildren(self) - - - class FlattenFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def FLATTEN(self): - return self.getToken(MathExprParser.FLATTEN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFlattenFunc" ): - listener.enterFlattenFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFlattenFunc" ): - listener.exitFlattenFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFlattenFunc" ): - return visitor.visitFlattenFunc(self) - else: - return visitor.visitChildren(self) - - - class AcosFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ACOS(self): - return self.getToken(MathExprParser.ACOS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAcosFunc" ): - listener.enterAcosFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAcosFunc" ): - listener.exitAcosFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAcosFunc" ): - return visitor.visitAcosFunc(self) - else: - return visitor.visitChildren(self) - - - class CoshFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def COSH(self): - return self.getToken(MathExprParser.COSH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCoshFunc" ): - listener.enterCoshFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCoshFunc" ): - listener.exitCoshFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCoshFunc" ): - return visitor.visitCoshFunc(self) - else: - return visitor.visitChildren(self) - - - class AnglFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ANGL(self): - return self.getToken(MathExprParser.ANGL, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAnglFunc" ): - listener.enterAnglFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAnglFunc" ): - listener.exitAnglFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAnglFunc" ): - return visitor.visitAnglFunc(self) - else: - return visitor.visitChildren(self) - - - class CumsumFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def CUMSUM(self): - return self.getToken(MathExprParser.CUMSUM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCumsumFunc" ): - listener.enterCumsumFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCumsumFunc" ): - listener.exitCumsumFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCumsumFunc" ): - return visitor.visitCumsumFunc(self) - else: - return visitor.visitChildren(self) - - - class GetFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def GET(self): - return self.getToken(MathExprParser.GET, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGetFunc" ): - listener.enterGetFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGetFunc" ): - listener.exitGetFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGetFunc" ): - return visitor.visitGetFunc(self) - else: - return visitor.visitChildren(self) - - - class SignFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SIGN(self): - return self.getToken(MathExprParser.SIGN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSignFunc" ): - listener.enterSignFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSignFunc" ): - listener.exitSignFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSignFunc" ): - return visitor.visitSignFunc(self) - else: - return visitor.visitChildren(self) - - - class TanFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def TAN(self): - return self.getToken(MathExprParser.TAN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTanFunc" ): - listener.enterTanFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTanFunc" ): - listener.exitTanFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTanFunc" ): - return visitor.visitTanFunc(self) - else: - return visitor.visitChildren(self) - - - class PinvFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def PINV(self): - return self.getToken(MathExprParser.PINV, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPinvFunc" ): - listener.enterPinvFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPinvFunc" ): - listener.exitPinvFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPinvFunc" ): - return visitor.visitPinvFunc(self) - else: - return visitor.visitChildren(self) - - - class FractFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def FRACT(self): - return self.getToken(MathExprParser.FRACT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFractFunc" ): - listener.enterFractFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFractFunc" ): - listener.exitFractFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFractFunc" ): - return visitor.visitFractFunc(self) - else: - return visitor.visitChildren(self) - - - class GammaFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def GAMMA(self): - return self.getToken(MathExprParser.GAMMA, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGammaFunc" ): - listener.enterGammaFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGammaFunc" ): - listener.exitGammaFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGammaFunc" ): - return visitor.visitGammaFunc(self) - else: - return visitor.visitChildren(self) - - - class SoftmaxFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SOFTMAX(self): - return self.getToken(MathExprParser.SOFTMAX, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSoftmaxFunc" ): - listener.enterSoftmaxFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSoftmaxFunc" ): - listener.exitSoftmaxFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSoftmaxFunc" ): - return visitor.visitSoftmaxFunc(self) - else: - return visitor.visitChildren(self) - - - class SfftFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SFFT(self): - return self.getToken(MathExprParser.SFFT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSfftFunc" ): - listener.enterSfftFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSfftFunc" ): - listener.exitSfftFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSfftFunc" ): - return visitor.visitSfftFunc(self) - else: - return visitor.visitChildren(self) - - - class VarFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def VAR(self): - return self.getToken(MathExprParser.VAR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVarFunc" ): - listener.enterVarFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVarFunc" ): - listener.exitVarFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitVarFunc" ): - return visitor.visitVarFunc(self) - else: - return visitor.visitChildren(self) - - - class AsinFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ASIN(self): - return self.getToken(MathExprParser.ASIN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAsinFunc" ): - listener.enterAsinFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAsinFunc" ): - listener.exitAsinFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAsinFunc" ): - return visitor.visitAsinFunc(self) - else: - return visitor.visitChildren(self) - - - class CountFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def COUNT(self): - return self.getToken(MathExprParser.COUNT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCountFunc" ): - listener.enterCountFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCountFunc" ): - listener.exitCountFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCountFunc" ): - return visitor.visitCountFunc(self) - else: - return visitor.visitChildren(self) - - - class AsinhFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ASINH(self): - return self.getToken(MathExprParser.ASINH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAsinhFunc" ): - listener.enterAsinhFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAsinhFunc" ): - listener.exitAsinhFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAsinhFunc" ): - return visitor.visitAsinhFunc(self) - else: - return visitor.visitChildren(self) - - - class FloatFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def FLOAT(self): - return self.getToken(MathExprParser.FLOAT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFloatFunc" ): - listener.enterFloatFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFloatFunc" ): - listener.exitFloatFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFloatFunc" ): - return visitor.visitFloatFunc(self) - else: - return visitor.visitChildren(self) - - - class AllFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ALL(self): - return self.getToken(MathExprParser.ALL, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAllFunc" ): - listener.enterAllFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAllFunc" ): - listener.exitAllFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAllFunc" ): - return visitor.visitAllFunc(self) - else: - return visitor.visitChildren(self) - - - class AtanhFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ATANH(self): - return self.getToken(MathExprParser.ATANH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAtanhFunc" ): - listener.enterAtanhFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAtanhFunc" ): - listener.exitAtanhFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAtanhFunc" ): - return visitor.visitAtanhFunc(self) - else: - return visitor.visitChildren(self) - - - class ClearFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def CLEAR(self): - return self.getToken(MathExprParser.CLEAR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterClearFunc" ): - listener.enterClearFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitClearFunc" ): - listener.exitClearFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitClearFunc" ): - return visitor.visitClearFunc(self) - else: - return visitor.visitChildren(self) - - - class ErfinvFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ERFINV(self): - return self.getToken(MathExprParser.ERFINV, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterErfinvFunc" ): - listener.enterErfinvFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitErfinvFunc" ): - listener.exitErfinvFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitErfinvFunc" ): - return visitor.visitErfinvFunc(self) - else: - return visitor.visitChildren(self) - - - class FlowToImageFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def FLOW_TO_IMAGE(self): - return self.getToken(MathExprParser.FLOW_TO_IMAGE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFlowToImageFunc" ): - listener.enterFlowToImageFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFlowToImageFunc" ): - listener.exitFlowToImageFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFlowToImageFunc" ): - return visitor.visitFlowToImageFunc(self) - else: - return visitor.visitChildren(self) - - - class PopFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def POP(self): - return self.getToken(MathExprParser.POP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPopFunc" ): - listener.enterPopFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPopFunc" ): - listener.exitPopFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPopFunc" ): - return visitor.visitPopFunc(self) - else: - return visitor.visitChildren(self) - - - class MedianFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def MEDIAN(self): - return self.getToken(MathExprParser.MEDIAN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMedianFunc" ): - listener.enterMedianFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMedianFunc" ): - listener.exitMedianFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMedianFunc" ): - return visitor.visitMedianFunc(self) - else: - return visitor.visitChildren(self) - - - class PrintShapeFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def PRINT_SHAPE(self): - return self.getToken(MathExprParser.PRINT_SHAPE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPrintShapeFunc" ): - listener.enterPrintShapeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPrintShapeFunc" ): - listener.exitPrintShapeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPrintShapeFunc" ): - return visitor.visitPrintShapeFunc(self) - else: - return visitor.visitChildren(self) - - - class SortFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SORT(self): - return self.getToken(MathExprParser.SORT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSortFunc" ): - listener.enterSortFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSortFunc" ): - listener.exitSortFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSortFunc" ): - return visitor.visitSortFunc(self) - else: - return visitor.visitChildren(self) - - - class MorphOpenFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def MORPH_OPEN(self): - return self.getToken(MathExprParser.MORPH_OPEN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMorphOpenFunc" ): - listener.enterMorphOpenFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMorphOpenFunc" ): - listener.exitMorphOpenFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMorphOpenFunc" ): - return visitor.visitMorphOpenFunc(self) - else: - return visitor.visitChildren(self) - - - class FlowAngFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def FLOW_ANG(self): - return self.getToken(MathExprParser.FLOW_ANG, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFlowAngFunc" ): - listener.enterFlowAngFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFlowAngFunc" ): - listener.exitFlowAngFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFlowAngFunc" ): - return visitor.visitFlowAngFunc(self) - else: - return visitor.visitChildren(self) - - - class TanhFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def TANH(self): - return self.getToken(MathExprParser.TANH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTanhFunc" ): - listener.enterTanhFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTanhFunc" ): - listener.exitTanhFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTanhFunc" ): - return visitor.visitTanhFunc(self) - else: - return visitor.visitChildren(self) - - - class AnyFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ANY(self): - return self.getToken(MathExprParser.ANY, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAnyFunc" ): - listener.enterAnyFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAnyFunc" ): - listener.exitAnyFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAnyFunc" ): - return visitor.visitAnyFunc(self) - else: - return visitor.visitChildren(self) - - - class ModeFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def MODE(self): - return self.getToken(MathExprParser.MODE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterModeFunc" ): - listener.enterModeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitModeFunc" ): - listener.exitModeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitModeFunc" ): - return visitor.visitModeFunc(self) - else: - return visitor.visitChildren(self) - - - class KeysFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def KEYS(self): - return self.getToken(MathExprParser.KEYS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterKeysFunc" ): - listener.enterKeysFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitKeysFunc" ): - listener.exitKeysFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitKeysFunc" ): - return visitor.visitKeysFunc(self) - else: - return visitor.visitChildren(self) - - - class ErodeFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ERODE(self): - return self.getToken(MathExprParser.ERODE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterErodeFunc" ): - listener.enterErodeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitErodeFunc" ): - listener.exitErodeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitErodeFunc" ): - return visitor.visitErodeFunc(self) - else: - return visitor.visitChildren(self) - - - class ErfFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ERF(self): - return self.getToken(MathExprParser.ERF, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterErfFunc" ): - listener.enterErfFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitErfFunc" ): - listener.exitErfFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitErfFunc" ): - return visitor.visitErfFunc(self) - else: - return visitor.visitChildren(self) - - - class UniqueFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def UNIQUE(self): - return self.getToken(MathExprParser.UNIQUE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUniqueFunc" ): - listener.enterUniqueFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUniqueFunc" ): - listener.exitUniqueFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUniqueFunc" ): - return visitor.visitUniqueFunc(self) - else: - return visitor.visitChildren(self) - - - class RoundFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ROUND(self): - return self.getToken(MathExprParser.ROUND, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRoundFunc" ): - listener.enterRoundFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRoundFunc" ): - listener.exitRoundFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRoundFunc" ): - return visitor.visitRoundFunc(self) - else: - return visitor.visitChildren(self) - - - class GeluFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def GELU(self): - return self.getToken(MathExprParser.GELU, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGeluFunc" ): - listener.enterGeluFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGeluFunc" ): - listener.exitGeluFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGeluFunc" ): - return visitor.visitGeluFunc(self) - else: - return visitor.visitChildren(self) - - - class PrintFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def PRNT(self): - return self.getToken(MathExprParser.PRNT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPrintFunc" ): - listener.enterPrintFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPrintFunc" ): - listener.exitPrintFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPrintFunc" ): - return visitor.visitPrintFunc(self) - else: - return visitor.visitChildren(self) - - - class ArgmaxFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ARGMAX(self): - return self.getToken(MathExprParser.ARGMAX, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterArgmaxFunc" ): - listener.enterArgmaxFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitArgmaxFunc" ): - listener.exitArgmaxFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitArgmaxFunc" ): - return visitor.visitArgmaxFunc(self) - else: - return visitor.visitChildren(self) - - - class UpperFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def UPPER(self): - return self.getToken(MathExprParser.UPPER, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUpperFunc" ): - listener.enterUpperFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUpperFunc" ): - listener.exitUpperFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUpperFunc" ): - return visitor.visitUpperFunc(self) - else: - return visitor.visitChildren(self) - - - class ReluFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def RELU(self): - return self.getToken(MathExprParser.RELU, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterReluFunc" ): - listener.enterReluFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitReluFunc" ): - listener.exitReluFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitReluFunc" ): - return visitor.visitReluFunc(self) - else: - return visitor.visitChildren(self) - - - class ShapeFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SHAPE(self): - return self.getToken(MathExprParser.SHAPE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterShapeFunc" ): - listener.enterShapeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitShapeFunc" ): - listener.exitShapeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitShapeFunc" ): - return visitor.visitShapeFunc(self) - else: - return visitor.visitChildren(self) - - - class IntFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def INT(self): - return self.getToken(MathExprParser.INT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterIntFunc" ): - listener.enterIntFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitIntFunc" ): - listener.exitIntFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitIntFunc" ): - return visitor.visitIntFunc(self) - else: - return visitor.visitChildren(self) - - - class EdgeFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def EDGE(self): - return self.getToken(MathExprParser.EDGE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEdgeFunc" ): - listener.enterEdgeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEdgeFunc" ): - listener.exitEdgeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEdgeFunc" ): - return visitor.visitEdgeFunc(self) - else: - return visitor.visitChildren(self) - - - class LnFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def LN(self): - return self.getToken(MathExprParser.LN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLnFunc" ): - listener.enterLnFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLnFunc" ): - listener.exitLnFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLnFunc" ): - return visitor.visitLnFunc(self) - else: - return visitor.visitChildren(self) - - - class BitCountFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def BITCOUNT(self): - return self.getToken(MathExprParser.BITCOUNT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBitCountFunc" ): - listener.enterBitCountFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBitCountFunc" ): - listener.exitBitCountFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBitCountFunc" ): - return visitor.visitBitCountFunc(self) - else: - return visitor.visitChildren(self) - - - class ArgminFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ARGMIN(self): - return self.getToken(MathExprParser.ARGMIN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterArgminFunc" ): - listener.enterArgminFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitArgminFunc" ): - listener.exitArgminFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitArgminFunc" ): - return visitor.visitArgminFunc(self) - else: - return visitor.visitChildren(self) - - - class StdFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def STD(self): - return self.getToken(MathExprParser.STD, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStdFunc" ): - listener.enterStdFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStdFunc" ): - listener.exitStdFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStdFunc" ): - return visitor.visitStdFunc(self) - else: - return visitor.visitChildren(self) - - - class DilateFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def DILATE(self): - return self.getToken(MathExprParser.DILATE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDilateFunc" ): - listener.enterDilateFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDilateFunc" ): - listener.exitDilateFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDilateFunc" ): - return visitor.visitDilateFunc(self) - else: - return visitor.visitChildren(self) - - - class AsNestedFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def AS_NESTED(self): - return self.getToken(MathExprParser.AS_NESTED, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAsNestedFunc" ): - listener.enterAsNestedFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAsNestedFunc" ): - listener.exitAsNestedFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAsNestedFunc" ): - return visitor.visitAsNestedFunc(self) - else: - return visitor.visitChildren(self) - - - class SumFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def SUM(self): - return self.getToken(MathExprParser.SUM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSumFunc" ): - listener.enterSumFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSumFunc" ): - listener.exitSumFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSumFunc" ): - return visitor.visitSumFunc(self) - else: - return visitor.visitChildren(self) - - - class HasFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def HAS(self): - return self.getToken(MathExprParser.HAS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterHasFunc" ): - listener.enterHasFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitHasFunc" ): - listener.exitHasFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitHasFunc" ): - return visitor.visitHasFunc(self) - else: - return visitor.visitChildren(self) - - - class DisableTrackingFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def DISABLE_TRACKING(self): - return self.getToken(MathExprParser.DISABLE_TRACKING, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDisableTrackingFunc" ): - listener.enterDisableTrackingFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDisableTrackingFunc" ): - listener.exitDisableTrackingFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDisableTrackingFunc" ): - return visitor.visitDisableTrackingFunc(self) - else: - return visitor.visitChildren(self) - - - class FlowMagFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def FLOW_MAG(self): - return self.getToken(MathExprParser.FLOW_MAG, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFlowMagFunc" ): - listener.enterFlowMagFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFlowMagFunc" ): - listener.exitFlowMagFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFlowMagFunc" ): - return visitor.visitFlowMagFunc(self) - else: - return visitor.visitChildren(self) - - - class CosFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def COS(self): - return self.getToken(MathExprParser.COS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCosFunc" ): - listener.enterCosFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCosFunc" ): - listener.exitCosFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCosFunc" ): - return visitor.visitCosFunc(self) - else: - return visitor.visitChildren(self) - - - class ArgsortFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def ARGSORT(self): - return self.getToken(MathExprParser.ARGSORT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterArgsortFunc" ): - listener.enterArgsortFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitArgsortFunc" ): - listener.exitArgsortFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitArgsortFunc" ): - return visitor.visitArgsortFunc(self) - else: - return visitor.visitChildren(self) - - - class CumprodFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def CUMPROD(self): - return self.getToken(MathExprParser.CUMPROD, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCumprodFunc" ): - listener.enterCumprodFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCumprodFunc" ): - listener.exitCumprodFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCumprodFunc" ): - return visitor.visitCumprodFunc(self) - else: - return visitor.visitChildren(self) - - - class RepeatFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def REPEAT(self): - return self.getToken(MathExprParser.REPEAT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRepeatFunc" ): - listener.enterRepeatFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRepeatFunc" ): - listener.exitRepeatFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRepeatFunc" ): - return visitor.visitRepeatFunc(self) - else: - return visitor.visitChildren(self) - - - class MorphCloseFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def MORPH_CLOSE(self): - return self.getToken(MathExprParser.MORPH_CLOSE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMorphCloseFunc" ): - listener.enterMorphCloseFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMorphCloseFunc" ): - listener.exitMorphCloseFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMorphCloseFunc" ): - return visitor.visitMorphCloseFunc(self) - else: - return visitor.visitChildren(self) - - - class ExpFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def EXP(self): - return self.getToken(MathExprParser.EXP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExpFunc" ): - listener.enterExpFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExpFunc" ): - listener.exitExpFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExpFunc" ): - return visitor.visitExpFunc(self) - else: - return visitor.visitChildren(self) - - - class LowerFuncContext(Func1Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func1Context - super().__init__(parser) - self.copyFrom(ctx) - - def LOWER(self): - return self.getToken(MathExprParser.LOWER, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLowerFunc" ): - listener.enterLowerFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLowerFunc" ): - listener.exitLowerFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLowerFunc" ): - return visitor.visitLowerFunc(self) - else: - return visitor.visitChildren(self) - - - - def func1(self): - - localctx = MathExprParser.Func1Context(self, self._ctx, self.state) - self.enterRule(localctx, 56, self.RULE_func1) - self._la = 0 # Token type - try: - self.state = 917 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [1]: - localctx = MathExprParser.SinFuncContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 428 - self.match(MathExprParser.SIN) - self.state = 429 - self.match(MathExprParser.LPAREN) - self.state = 430 - self.expr() - self.state = 431 - self.match(MathExprParser.RPAREN) - pass - elif token in [2]: - localctx = MathExprParser.CosFuncContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 433 - self.match(MathExprParser.COS) - self.state = 434 - self.match(MathExprParser.LPAREN) - self.state = 435 - self.expr() - self.state = 436 - self.match(MathExprParser.RPAREN) - pass - elif token in [3]: - localctx = MathExprParser.TanFuncContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 438 - self.match(MathExprParser.TAN) - self.state = 439 - self.match(MathExprParser.LPAREN) - self.state = 440 - self.expr() - self.state = 441 - self.match(MathExprParser.RPAREN) - pass - elif token in [4]: - localctx = MathExprParser.AsinFuncContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 443 - self.match(MathExprParser.ASIN) - self.state = 444 - self.match(MathExprParser.LPAREN) - self.state = 445 - self.expr() - self.state = 446 - self.match(MathExprParser.RPAREN) - pass - elif token in [5]: - localctx = MathExprParser.AcosFuncContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 448 - self.match(MathExprParser.ACOS) - self.state = 449 - self.match(MathExprParser.LPAREN) - self.state = 450 - self.expr() - self.state = 451 - self.match(MathExprParser.RPAREN) - pass - elif token in [6]: - localctx = MathExprParser.AtanFuncContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 453 - self.match(MathExprParser.ATAN) - self.state = 454 - self.match(MathExprParser.LPAREN) - self.state = 455 - self.expr() - self.state = 456 - self.match(MathExprParser.RPAREN) - pass - elif token in [8]: - localctx = MathExprParser.SinhFuncContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 458 - self.match(MathExprParser.SINH) - self.state = 459 - self.match(MathExprParser.LPAREN) - self.state = 460 - self.expr() - self.state = 461 - self.match(MathExprParser.RPAREN) - pass - elif token in [9]: - localctx = MathExprParser.CoshFuncContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 463 - self.match(MathExprParser.COSH) - self.state = 464 - self.match(MathExprParser.LPAREN) - self.state = 465 - self.expr() - self.state = 466 - self.match(MathExprParser.RPAREN) - pass - elif token in [10]: - localctx = MathExprParser.TanhFuncContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 468 - self.match(MathExprParser.TANH) - self.state = 469 - self.match(MathExprParser.LPAREN) - self.state = 470 - self.expr() - self.state = 471 - self.match(MathExprParser.RPAREN) - pass - elif token in [11]: - localctx = MathExprParser.AsinhFuncContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 473 - self.match(MathExprParser.ASINH) - self.state = 474 - self.match(MathExprParser.LPAREN) - self.state = 475 - self.expr() - self.state = 476 - self.match(MathExprParser.RPAREN) - pass - elif token in [12]: - localctx = MathExprParser.AcoshFuncContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 478 - self.match(MathExprParser.ACOSH) - self.state = 479 - self.match(MathExprParser.LPAREN) - self.state = 480 - self.expr() - self.state = 481 - self.match(MathExprParser.RPAREN) - pass - elif token in [13]: - localctx = MathExprParser.AtanhFuncContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 483 - self.match(MathExprParser.ATANH) - self.state = 484 - self.match(MathExprParser.LPAREN) - self.state = 485 - self.expr() - self.state = 486 - self.match(MathExprParser.RPAREN) - pass - elif token in [14]: - localctx = MathExprParser.AbsFuncContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 488 - self.match(MathExprParser.ABS) - self.state = 489 - self.match(MathExprParser.LPAREN) - self.state = 490 - self.expr() - self.state = 491 - self.match(MathExprParser.RPAREN) - pass - elif token in [15]: - localctx = MathExprParser.SqrtFuncContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 493 - self.match(MathExprParser.SQRT) - self.state = 494 - self.match(MathExprParser.LPAREN) - self.state = 495 - self.expr() - self.state = 496 - self.match(MathExprParser.RPAREN) - pass - elif token in [16]: - localctx = MathExprParser.LnFuncContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 498 - self.match(MathExprParser.LN) - self.state = 499 - self.match(MathExprParser.LPAREN) - self.state = 500 - self.expr() - self.state = 501 - self.match(MathExprParser.RPAREN) - pass - elif token in [17]: - localctx = MathExprParser.LogFuncContext(self, localctx) - self.enterOuterAlt(localctx, 16) - self.state = 503 - self.match(MathExprParser.LOG) - self.state = 504 - self.match(MathExprParser.LPAREN) - self.state = 505 - self.expr() - self.state = 506 - self.match(MathExprParser.RPAREN) - pass - elif token in [18]: - localctx = MathExprParser.ExpFuncContext(self, localctx) - self.enterOuterAlt(localctx, 17) - self.state = 508 - self.match(MathExprParser.EXP) - self.state = 509 - self.match(MathExprParser.LPAREN) - self.state = 510 - self.expr() - self.state = 511 - self.match(MathExprParser.RPAREN) - pass - elif token in [23]: - localctx = MathExprParser.TNormFuncContext(self, localctx) - self.enterOuterAlt(localctx, 18) - self.state = 513 - self.match(MathExprParser.TNORM) - self.state = 514 - self.match(MathExprParser.LPAREN) - self.state = 515 - self.expr() - self.state = 518 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 516 - self.match(MathExprParser.COMMA) - self.state = 517 - self.expr() - - - self.state = 520 - self.match(MathExprParser.RPAREN) - pass - elif token in [25]: - localctx = MathExprParser.FloorFuncContext(self, localctx) - self.enterOuterAlt(localctx, 19) - self.state = 522 - self.match(MathExprParser.FLOOR) - self.state = 523 - self.match(MathExprParser.LPAREN) - self.state = 524 - self.expr() - self.state = 525 - self.match(MathExprParser.RPAREN) - pass - elif token in [26]: - localctx = MathExprParser.CeilFuncContext(self, localctx) - self.enterOuterAlt(localctx, 20) - self.state = 527 - self.match(MathExprParser.CEIL) - self.state = 528 - self.match(MathExprParser.LPAREN) - self.state = 529 - self.expr() - self.state = 530 - self.match(MathExprParser.RPAREN) - pass - elif token in [27]: - localctx = MathExprParser.RoundFuncContext(self, localctx) - self.enterOuterAlt(localctx, 21) - self.state = 532 - self.match(MathExprParser.ROUND) - self.state = 533 - self.match(MathExprParser.LPAREN) - self.state = 534 - self.expr() - self.state = 535 - self.match(MathExprParser.RPAREN) - pass - elif token in [28]: - localctx = MathExprParser.GammaFuncContext(self, localctx) - self.enterOuterAlt(localctx, 22) - self.state = 537 - self.match(MathExprParser.GAMMA) - self.state = 538 - self.match(MathExprParser.LPAREN) - self.state = 539 - self.expr() - self.state = 540 - self.match(MathExprParser.RPAREN) - pass - elif token in [30]: - localctx = MathExprParser.SigmoidFuncContext(self, localctx) - self.enterOuterAlt(localctx, 23) - self.state = 542 - self.match(MathExprParser.SIGM) - self.state = 543 - self.match(MathExprParser.LPAREN) - self.state = 544 - self.expr() - self.state = 545 - self.match(MathExprParser.RPAREN) - pass - elif token in [34]: - localctx = MathExprParser.AnglFuncContext(self, localctx) - self.enterOuterAlt(localctx, 24) - self.state = 547 - self.match(MathExprParser.ANGL) - self.state = 548 - self.match(MathExprParser.LPAREN) - self.state = 549 - self.expr() - self.state = 550 - self.match(MathExprParser.RPAREN) - pass - elif token in [35]: - localctx = MathExprParser.PrintFuncContext(self, localctx) - self.enterOuterAlt(localctx, 25) - self.state = 552 - self.match(MathExprParser.PRNT) - self.state = 553 - self.match(MathExprParser.LPAREN) - self.state = 554 - self.expr() - self.state = 555 - self.match(MathExprParser.RPAREN) - pass - elif token in [41]: - localctx = MathExprParser.FractFuncContext(self, localctx) - self.enterOuterAlt(localctx, 26) - self.state = 557 - self.match(MathExprParser.FRACT) - self.state = 558 - self.match(MathExprParser.LPAREN) - self.state = 559 - self.expr() - self.state = 560 - self.match(MathExprParser.RPAREN) - pass - elif token in [42]: - localctx = MathExprParser.ReluFuncContext(self, localctx) - self.enterOuterAlt(localctx, 27) - self.state = 562 - self.match(MathExprParser.RELU) - self.state = 563 - self.match(MathExprParser.LPAREN) - self.state = 564 - self.expr() - self.state = 565 - self.match(MathExprParser.RPAREN) - pass - elif token in [43]: - localctx = MathExprParser.SoftplusFuncContext(self, localctx) - self.enterOuterAlt(localctx, 28) - self.state = 567 - self.match(MathExprParser.SOFTPLUS) - self.state = 568 - self.match(MathExprParser.LPAREN) - self.state = 569 - self.expr() - self.state = 570 - self.match(MathExprParser.RPAREN) - pass - elif token in [44]: - localctx = MathExprParser.GeluFuncContext(self, localctx) - self.enterOuterAlt(localctx, 29) - self.state = 572 - self.match(MathExprParser.GELU) - self.state = 573 - self.match(MathExprParser.LPAREN) - self.state = 574 - self.expr() - self.state = 575 - self.match(MathExprParser.RPAREN) - pass - elif token in [45]: - localctx = MathExprParser.SignFuncContext(self, localctx) - self.enterOuterAlt(localctx, 30) - self.state = 577 - self.match(MathExprParser.SIGN) - self.state = 578 - self.match(MathExprParser.LPAREN) - self.state = 579 - self.expr() - self.state = 580 - self.match(MathExprParser.RPAREN) - pass - elif token in [36]: - localctx = MathExprParser.PrintShapeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 31) - self.state = 582 - self.match(MathExprParser.PRINT_SHAPE) - self.state = 583 - self.match(MathExprParser.LPAREN) - self.state = 584 - self.expr() - self.state = 585 - self.match(MathExprParser.RPAREN) - pass - elif token in [58]: - localctx = MathExprParser.PinvFuncContext(self, localctx) - self.enterOuterAlt(localctx, 32) - self.state = 587 - self.match(MathExprParser.PINV) - self.state = 588 - self.match(MathExprParser.LPAREN) - self.state = 589 - self.expr() - self.state = 590 - self.match(MathExprParser.RPAREN) - pass - elif token in [59]: - localctx = MathExprParser.SumFuncContext(self, localctx) - self.enterOuterAlt(localctx, 33) - self.state = 592 - self.match(MathExprParser.SUM) - self.state = 593 - self.match(MathExprParser.LPAREN) - self.state = 594 - self.expr() - self.state = 597 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 595 - self.match(MathExprParser.COMMA) - self.state = 596 - self.expr() - - - self.state = 599 - self.match(MathExprParser.RPAREN) - pass - elif token in [60]: - localctx = MathExprParser.MeanFuncContext(self, localctx) - self.enterOuterAlt(localctx, 34) - self.state = 601 - self.match(MathExprParser.MEAN) - self.state = 602 - self.match(MathExprParser.LPAREN) - self.state = 603 - self.expr() - self.state = 604 - self.match(MathExprParser.RPAREN) - pass - elif token in [61]: - localctx = MathExprParser.StdFuncContext(self, localctx) - self.enterOuterAlt(localctx, 35) - self.state = 606 - self.match(MathExprParser.STD) - self.state = 607 - self.match(MathExprParser.LPAREN) - self.state = 608 - self.expr() - self.state = 609 - self.match(MathExprParser.RPAREN) - pass - elif token in [62]: - localctx = MathExprParser.VarFuncContext(self, localctx) - self.enterOuterAlt(localctx, 36) - self.state = 611 - self.match(MathExprParser.VAR) - self.state = 612 - self.match(MathExprParser.LPAREN) - self.state = 613 - self.expr() - self.state = 614 - self.match(MathExprParser.RPAREN) - pass - elif token in [168]: - localctx = MathExprParser.SortFuncContext(self, localctx) - self.enterOuterAlt(localctx, 37) - self.state = 616 - self.match(MathExprParser.SORT) - self.state = 617 - self.match(MathExprParser.LPAREN) - self.state = 618 - self.expr() - self.state = 625 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 619 - self.match(MathExprParser.COMMA) - self.state = 620 - self.expr() - self.state = 623 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 621 - self.match(MathExprParser.COMMA) - self.state = 622 - self.expr() - - - - - self.state = 627 - self.match(MathExprParser.RPAREN) - pass - elif token in [70]: - localctx = MathExprParser.AnyFuncContext(self, localctx) - self.enterOuterAlt(localctx, 38) - self.state = 629 - self.match(MathExprParser.ANY) - self.state = 630 - self.match(MathExprParser.LPAREN) - self.state = 631 - self.expr() - self.state = 632 - self.match(MathExprParser.RPAREN) - pass - elif token in [71]: - localctx = MathExprParser.AllFuncContext(self, localctx) - self.enterOuterAlt(localctx, 39) - self.state = 634 - self.match(MathExprParser.ALL) - self.state = 635 - self.match(MathExprParser.LPAREN) - self.state = 636 - self.expr() - self.state = 637 - self.match(MathExprParser.RPAREN) - pass - elif token in [72]: - localctx = MathExprParser.EdgeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 40) - self.state = 639 - self.match(MathExprParser.EDGE) - self.state = 640 - self.match(MathExprParser.LPAREN) - self.state = 641 - self.expr() - self.state = 644 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 642 - self.match(MathExprParser.COMMA) - self.state = 643 - self.expr() - - - self.state = 646 - self.match(MathExprParser.RPAREN) - pass - elif token in [74]: - localctx = MathExprParser.MedianFuncContext(self, localctx) - self.enterOuterAlt(localctx, 41) - self.state = 648 - self.match(MathExprParser.MEDIAN) - self.state = 649 - self.match(MathExprParser.LPAREN) - self.state = 650 - self.expr() - self.state = 651 - self.match(MathExprParser.RPAREN) - pass - elif token in [75]: - localctx = MathExprParser.ModeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 42) - self.state = 653 - self.match(MathExprParser.MODE) - self.state = 654 - self.match(MathExprParser.LPAREN) - self.state = 655 - self.expr() - self.state = 656 - self.match(MathExprParser.RPAREN) - pass - elif token in [76]: - localctx = MathExprParser.CumsumFuncContext(self, localctx) - self.enterOuterAlt(localctx, 43) - self.state = 658 - self.match(MathExprParser.CUMSUM) - self.state = 659 - self.match(MathExprParser.LPAREN) - self.state = 660 - self.expr() - self.state = 663 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 661 - self.match(MathExprParser.COMMA) - self.state = 662 - self.expr() - - - self.state = 665 - self.match(MathExprParser.RPAREN) - pass - elif token in [87]: - localctx = MathExprParser.CountFuncContext(self, localctx) - self.enterOuterAlt(localctx, 44) - self.state = 667 - self.match(MathExprParser.COUNT) - self.state = 668 - self.match(MathExprParser.LPAREN) - self.state = 669 - self.expr() - self.state = 670 - self.match(MathExprParser.RPAREN) - pass - elif token in [88]: - localctx = MathExprParser.KeysFuncContext(self, localctx) - self.enterOuterAlt(localctx, 45) - self.state = 672 - self.match(MathExprParser.KEYS) - self.state = 673 - self.match(MathExprParser.LPAREN) - self.state = 674 - self.expr() - self.state = 675 - self.match(MathExprParser.RPAREN) - pass - elif token in [89]: - localctx = MathExprParser.EnableTrackingFuncContext(self, localctx) - self.enterOuterAlt(localctx, 46) - self.state = 677 - self.match(MathExprParser.ENABLE_TRACKING) - self.state = 678 - self.match(MathExprParser.LPAREN) - self.state = 679 - self.expr() - self.state = 680 - self.match(MathExprParser.RPAREN) - pass - elif token in [90]: - localctx = MathExprParser.DisableTrackingFuncContext(self, localctx) - self.enterOuterAlt(localctx, 47) - self.state = 682 - self.match(MathExprParser.DISABLE_TRACKING) - self.state = 683 - self.match(MathExprParser.LPAREN) - self.state = 684 - self.expr() - self.state = 685 - self.match(MathExprParser.RPAREN) - pass - elif token in [91]: - localctx = MathExprParser.ResetTrackingFuncContext(self, localctx) - self.enterOuterAlt(localctx, 48) - self.state = 687 - self.match(MathExprParser.RESET_TRACKING) - self.state = 688 - self.match(MathExprParser.LPAREN) - self.state = 689 - self.expr() - self.state = 690 - self.match(MathExprParser.RPAREN) - pass - elif token in [96]: - localctx = MathExprParser.RepeatFuncContext(self, localctx) - self.enterOuterAlt(localctx, 49) - self.state = 692 - self.match(MathExprParser.REPEAT) - self.state = 693 - self.match(MathExprParser.LPAREN) - self.state = 694 - self.expr() - self.state = 695 - self.match(MathExprParser.COMMA) - self.state = 696 - self.expr() - self.state = 699 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 697 - self.match(MathExprParser.COMMA) - self.state = 698 - self.expr() - - - self.state = 701 - self.match(MathExprParser.RPAREN) - pass - elif token in [77]: - localctx = MathExprParser.CumprodFuncContext(self, localctx) - self.enterOuterAlt(localctx, 50) - self.state = 703 - self.match(MathExprParser.CUMPROD) - self.state = 704 - self.match(MathExprParser.LPAREN) - self.state = 705 - self.expr() - self.state = 706 - self.match(MathExprParser.RPAREN) - pass - elif token in [123]: - localctx = MathExprParser.PopFuncContext(self, localctx) - self.enterOuterAlt(localctx, 51) - self.state = 708 - self.match(MathExprParser.POP) - self.state = 709 - self.match(MathExprParser.LPAREN) - self.state = 710 - self.expr() - self.state = 711 - self.match(MathExprParser.RPAREN) - pass - elif token in [124]: - localctx = MathExprParser.ClearFuncContext(self, localctx) - self.enterOuterAlt(localctx, 52) - self.state = 713 - self.match(MathExprParser.CLEAR) - self.state = 714 - self.match(MathExprParser.LPAREN) - self.state = 715 - self.expr() - self.state = 716 - self.match(MathExprParser.RPAREN) - pass - elif token in [125]: - localctx = MathExprParser.HasFuncContext(self, localctx) - self.enterOuterAlt(localctx, 53) - self.state = 718 - self.match(MathExprParser.HAS) - self.state = 719 - self.match(MathExprParser.LPAREN) - self.state = 720 - self.expr() - self.state = 721 - self.match(MathExprParser.RPAREN) - pass - elif token in [126]: - localctx = MathExprParser.GetFuncContext(self, localctx) - self.enterOuterAlt(localctx, 54) - self.state = 723 - self.match(MathExprParser.GET) - self.state = 724 - self.match(MathExprParser.LPAREN) - self.state = 725 - self.expr() - self.state = 726 - self.match(MathExprParser.RPAREN) - pass - elif token in [169]: - localctx = MathExprParser.ArgsortFuncContext(self, localctx) - self.enterOuterAlt(localctx, 55) - self.state = 728 - self.match(MathExprParser.ARGSORT) - self.state = 729 - self.match(MathExprParser.LPAREN) - self.state = 730 - self.expr() - self.state = 737 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 731 - self.match(MathExprParser.COMMA) - self.state = 732 - self.expr() - self.state = 735 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 733 - self.match(MathExprParser.COMMA) - self.state = 734 - self.expr() - - - - - self.state = 739 - self.match(MathExprParser.RPAREN) - pass - elif token in [170]: - localctx = MathExprParser.ArgminFuncContext(self, localctx) - self.enterOuterAlt(localctx, 56) - self.state = 741 - self.match(MathExprParser.ARGMIN) - self.state = 742 - self.match(MathExprParser.LPAREN) - self.state = 743 - self.expr() - self.state = 746 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 744 - self.match(MathExprParser.COMMA) - self.state = 745 - self.expr() - - - self.state = 748 - self.match(MathExprParser.RPAREN) - pass - elif token in [171]: - localctx = MathExprParser.ArgmaxFuncContext(self, localctx) - self.enterOuterAlt(localctx, 57) - self.state = 750 - self.match(MathExprParser.ARGMAX) - self.state = 751 - self.match(MathExprParser.LPAREN) - self.state = 752 - self.expr() - self.state = 755 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 753 - self.match(MathExprParser.COMMA) - self.state = 754 - self.expr() - - - self.state = 757 - self.match(MathExprParser.RPAREN) - pass - elif token in [172]: - localctx = MathExprParser.SoftmaxFuncContext(self, localctx) - self.enterOuterAlt(localctx, 58) - self.state = 759 - self.match(MathExprParser.SOFTMAX) - self.state = 760 - self.match(MathExprParser.LPAREN) - self.state = 761 - self.expr() - self.state = 764 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 762 - self.match(MathExprParser.COMMA) - self.state = 763 - self.expr() - - - self.state = 766 - self.match(MathExprParser.RPAREN) - pass - elif token in [173]: - localctx = MathExprParser.SoftminFuncContext(self, localctx) - self.enterOuterAlt(localctx, 59) - self.state = 768 - self.match(MathExprParser.SOFTMIN) - self.state = 769 - self.match(MathExprParser.LPAREN) - self.state = 770 - self.expr() - self.state = 773 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 771 - self.match(MathExprParser.COMMA) - self.state = 772 - self.expr() - - - self.state = 775 - self.match(MathExprParser.RPAREN) - pass - elif token in [68]: - localctx = MathExprParser.ErfFuncContext(self, localctx) - self.enterOuterAlt(localctx, 60) - self.state = 777 - self.match(MathExprParser.ERF) - self.state = 778 - self.match(MathExprParser.LPAREN) - self.state = 779 - self.expr() - self.state = 780 - self.match(MathExprParser.RPAREN) - pass - elif token in [69]: - localctx = MathExprParser.ErfinvFuncContext(self, localctx) - self.enterOuterAlt(localctx, 61) - self.state = 782 - self.match(MathExprParser.ERFINV) - self.state = 783 - self.match(MathExprParser.LPAREN) - self.state = 784 - self.expr() - self.state = 785 - self.match(MathExprParser.RPAREN) - pass - elif token in [174]: - localctx = MathExprParser.UniqueFuncContext(self, localctx) - self.enterOuterAlt(localctx, 62) - self.state = 787 - self.match(MathExprParser.UNIQUE) - self.state = 788 - self.match(MathExprParser.LPAREN) - self.state = 789 - self.expr() - self.state = 790 - self.match(MathExprParser.RPAREN) - pass - elif token in [97]: - localctx = MathExprParser.FlattenFuncContext(self, localctx) - self.enterOuterAlt(localctx, 63) - self.state = 792 - self.match(MathExprParser.FLATTEN) - self.state = 793 - self.match(MathExprParser.LPAREN) - self.state = 794 - self.expr() - self.state = 795 - self.match(MathExprParser.RPAREN) - pass - elif token in [102]: - localctx = MathExprParser.MotionMaskFuncContext(self, localctx) - self.enterOuterAlt(localctx, 64) - self.state = 797 - self.match(MathExprParser.MOTION_MASK) - self.state = 798 - self.match(MathExprParser.LPAREN) - self.state = 799 - self.expr() - self.state = 800 - self.match(MathExprParser.RPAREN) - pass - elif token in [103]: - localctx = MathExprParser.FlowToImageFuncContext(self, localctx) - self.enterOuterAlt(localctx, 65) - self.state = 802 - self.match(MathExprParser.FLOW_TO_IMAGE) - self.state = 803 - self.match(MathExprParser.LPAREN) - self.state = 804 - self.expr() - self.state = 805 - self.match(MathExprParser.RPAREN) - pass - elif token in [113]: - localctx = MathExprParser.BitNotFuncContext(self, localctx) - self.enterOuterAlt(localctx, 66) - self.state = 807 - self.match(MathExprParser.BNOT) - self.state = 808 - self.match(MathExprParser.LPAREN) - self.state = 809 - self.expr() - self.state = 810 - self.match(MathExprParser.RPAREN) - pass - elif token in [114]: - localctx = MathExprParser.BitCountFuncContext(self, localctx) - self.enterOuterAlt(localctx, 67) - self.state = 812 - self.match(MathExprParser.BITCOUNT) - self.state = 813 - self.match(MathExprParser.LPAREN) - self.state = 814 - self.expr() - self.state = 815 - self.match(MathExprParser.RPAREN) - pass - elif token in [115]: - localctx = MathExprParser.ShapeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 68) - self.state = 817 - self.match(MathExprParser.SHAPE) - self.state = 818 - self.match(MathExprParser.LPAREN) - self.state = 819 - self.expr() - self.state = 820 - self.match(MathExprParser.RPAREN) - pass - elif token in [132]: - localctx = MathExprParser.UpperFuncContext(self, localctx) - self.enterOuterAlt(localctx, 69) - self.state = 822 - self.match(MathExprParser.UPPER) - self.state = 823 - self.match(MathExprParser.LPAREN) - self.state = 824 - self.expr() - self.state = 825 - self.match(MathExprParser.RPAREN) - pass - elif token in [133]: - localctx = MathExprParser.LowerFuncContext(self, localctx) - self.enterOuterAlt(localctx, 70) - self.state = 827 - self.match(MathExprParser.LOWER) - self.state = 828 - self.match(MathExprParser.LPAREN) - self.state = 829 - self.expr() - self.state = 830 - self.match(MathExprParser.RPAREN) - pass - elif token in [134]: - localctx = MathExprParser.TrimFuncContext(self, localctx) - self.enterOuterAlt(localctx, 71) - self.state = 832 - self.match(MathExprParser.TRIM) - self.state = 833 - self.match(MathExprParser.LPAREN) - self.state = 834 - self.expr() - self.state = 835 - self.match(MathExprParser.RPAREN) - pass - elif token in [183]: - localctx = MathExprParser.EntropyFuncContext(self, localctx) - self.enterOuterAlt(localctx, 72) - self.state = 837 - self.match(MathExprParser.ENTROPY) - self.state = 838 - self.match(MathExprParser.LPAREN) - self.state = 839 - self.expr() - self.state = 840 - self.match(MathExprParser.RPAREN) - pass - elif token in [32]: - localctx = MathExprParser.SfftFuncContext(self, localctx) - self.enterOuterAlt(localctx, 73) - self.state = 842 - self.match(MathExprParser.SFFT) - self.state = 843 - self.match(MathExprParser.LPAREN) - self.state = 844 - self.expr() - self.state = 845 - self.match(MathExprParser.RPAREN) - pass - elif token in [140]: - localctx = MathExprParser.DilateFuncContext(self, localctx) - self.enterOuterAlt(localctx, 74) - self.state = 847 - self.match(MathExprParser.DILATE) - self.state = 848 - self.match(MathExprParser.LPAREN) - self.state = 849 - self.expr() - self.state = 852 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 850 - self.match(MathExprParser.COMMA) - self.state = 851 - self.expr() - - - self.state = 854 - self.match(MathExprParser.RPAREN) - pass - elif token in [141]: - localctx = MathExprParser.ErodeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 75) - self.state = 856 - self.match(MathExprParser.ERODE) - self.state = 857 - self.match(MathExprParser.LPAREN) - self.state = 858 - self.expr() - self.state = 861 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 859 - self.match(MathExprParser.COMMA) - self.state = 860 - self.expr() - - - self.state = 863 - self.match(MathExprParser.RPAREN) - pass - elif token in [142]: - localctx = MathExprParser.MorphOpenFuncContext(self, localctx) - self.enterOuterAlt(localctx, 76) - self.state = 865 - self.match(MathExprParser.MORPH_OPEN) - self.state = 866 - self.match(MathExprParser.LPAREN) - self.state = 867 - self.expr() - self.state = 870 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 868 - self.match(MathExprParser.COMMA) - self.state = 869 - self.expr() - - - self.state = 872 - self.match(MathExprParser.RPAREN) - pass - elif token in [143]: - localctx = MathExprParser.MorphCloseFuncContext(self, localctx) - self.enterOuterAlt(localctx, 77) - self.state = 874 - self.match(MathExprParser.MORPH_CLOSE) - self.state = 875 - self.match(MathExprParser.LPAREN) - self.state = 876 - self.expr() - self.state = 879 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 877 - self.match(MathExprParser.COMMA) - self.state = 878 - self.expr() - - - self.state = 881 - self.match(MathExprParser.RPAREN) - pass - elif token in [130]: - localctx = MathExprParser.IntFuncContext(self, localctx) - self.enterOuterAlt(localctx, 78) - self.state = 883 - self.match(MathExprParser.INT) - self.state = 884 - self.match(MathExprParser.LPAREN) - self.state = 885 - self.expr() - self.state = 886 - self.match(MathExprParser.RPAREN) - pass - elif token in [131]: - localctx = MathExprParser.FloatFuncContext(self, localctx) - self.enterOuterAlt(localctx, 79) - self.state = 888 - self.match(MathExprParser.FLOAT) - self.state = 889 - self.match(MathExprParser.LPAREN) - self.state = 890 - self.expr() - self.state = 891 - self.match(MathExprParser.RPAREN) - pass - elif token in [104]: - localctx = MathExprParser.FlowMagFuncContext(self, localctx) - self.enterOuterAlt(localctx, 80) - self.state = 893 - self.match(MathExprParser.FLOW_MAG) - self.state = 894 - self.match(MathExprParser.LPAREN) - self.state = 895 - self.expr() - self.state = 896 - self.match(MathExprParser.RPAREN) - pass - elif token in [105]: - localctx = MathExprParser.FlowAngFuncContext(self, localctx) - self.enterOuterAlt(localctx, 81) - self.state = 898 - self.match(MathExprParser.FLOW_ANG) - self.state = 899 - self.match(MathExprParser.LPAREN) - self.state = 900 - self.expr() - self.state = 901 - self.match(MathExprParser.RPAREN) - pass - elif token in [156]: - localctx = MathExprParser.AsNestedFuncContext(self, localctx) - self.enterOuterAlt(localctx, 82) - self.state = 903 - self.match(MathExprParser.AS_NESTED) - self.state = 904 - self.match(MathExprParser.LPAREN) - self.state = 905 - self.expr() - self.state = 906 - self.match(MathExprParser.RPAREN) - pass - elif token in [157]: - localctx = MathExprParser.SvdFuncContext(self, localctx) - self.enterOuterAlt(localctx, 83) - self.state = 908 - self.match(MathExprParser.SVD) - self.state = 909 - self.match(MathExprParser.LPAREN) - self.state = 910 - self.expr() - self.state = 913 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 911 - self.match(MathExprParser.COMMA) - self.state = 912 - self.expr() - - - self.state = 915 - self.match(MathExprParser.RPAREN) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class Func2Context(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_func2 - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class StartswithFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def STARTSWITH(self): - return self.getToken(MathExprParser.STARTSWITH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStartswithFunc" ): - listener.enterStartswithFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStartswithFunc" ): - listener.exitStartswithFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStartswithFunc" ): - return visitor.visitStartswithFunc(self) - else: - return visitor.visitChildren(self) - - - class RemoveKeyFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def REMOVE_KEY(self): - return self.getToken(MathExprParser.REMOVE_KEY, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRemoveKeyFunc" ): - listener.enterRemoveKeyFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRemoveKeyFunc" ): - listener.exitRemoveKeyFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRemoveKeyFunc" ): - return visitor.visitRemoveKeyFunc(self) - else: - return visitor.visitChildren(self) - - - class CorrFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def CORR(self): - return self.getToken(MathExprParser.CORR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCorrFunc" ): - listener.enterCorrFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCorrFunc" ): - listener.exitCorrFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCorrFunc" ): - return visitor.visitCorrFunc(self) - else: - return visitor.visitChildren(self) - - - class CovFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def COV(self): - return self.getToken(MathExprParser.COV, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCovFunc" ): - listener.enterCovFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCovFunc" ): - listener.exitCovFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCovFunc" ): - return visitor.visitCovFunc(self) - else: - return visitor.visitChildren(self) - - - class PadFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def PAD(self): - return self.getToken(MathExprParser.PAD, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPadFunc" ): - listener.enterPadFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPadFunc" ): - listener.exitPadFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPadFunc" ): - return visitor.visitPadFunc(self) - else: - return visitor.visitChildren(self) - - - class InterpolateAreaFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def INTERPOLATE_AREA(self): - return self.getToken(MathExprParser.INTERPOLATE_AREA, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterInterpolateAreaFunc" ): - listener.enterInterpolateAreaFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitInterpolateAreaFunc" ): - listener.exitInterpolateAreaFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitInterpolateAreaFunc" ): - return visitor.visitInterpolateAreaFunc(self) - else: - return visitor.visitChildren(self) - - - class BotkFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def BOTK(self): - return self.getToken(MathExprParser.BOTK, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBotkFunc" ): - listener.enterBotkFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBotkFunc" ): - listener.exitBotkFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBotkFunc" ): - return visitor.visitBotkFunc(self) - else: - return visitor.visitChildren(self) - - - class BotkIndFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def BOTK_IND(self): - return self.getToken(MathExprParser.BOTK_IND, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBotkIndFunc" ): - listener.enterBotkIndFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBotkIndFunc" ): - listener.exitBotkIndFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBotkIndFunc" ): - return visitor.visitBotkIndFunc(self) - else: - return visitor.visitChildren(self) - - - class PowFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def POWE(self): - return self.getToken(MathExprParser.POWE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPowFunc" ): - listener.enterPowFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPowFunc" ): - listener.exitPowFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPowFunc" ): - return visitor.visitPowFunc(self) - else: - return visitor.visitChildren(self) - - - class DotFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def DOT(self): - return self.getToken(MathExprParser.DOT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDotFunc" ): - listener.enterDotFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDotFunc" ): - listener.exitDotFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDotFunc" ): - return visitor.visitDotFunc(self) - else: - return visitor.visitChildren(self) - - - class AppendFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def APPEND(self): - return self.getToken(MathExprParser.APPEND, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAppendFunc" ): - listener.enterAppendFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAppendFunc" ): - listener.exitAppendFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAppendFunc" ): - return visitor.visitAppendFunc(self) - else: - return visitor.visitChildren(self) - - - class SNormFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def SNORM(self): - return self.getToken(MathExprParser.SNORM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSNormFunc" ): - listener.enterSNormFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSNormFunc" ): - listener.exitSNormFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSNormFunc" ): - return visitor.visitSNormFunc(self) - else: - return visitor.visitChildren(self) - - - class FlipFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def FLIP(self): - return self.getToken(MathExprParser.FLIP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFlipFunc" ): - listener.enterFlipFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFlipFunc" ): - listener.exitFlipFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFlipFunc" ): - return visitor.visitFlipFunc(self) - else: - return visitor.visitChildren(self) - - - class BitAndFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def BAND(self): - return self.getToken(MathExprParser.BAND, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBitAndFunc" ): - listener.enterBitAndFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBitAndFunc" ): - listener.exitBitAndFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBitAndFunc" ): - return visitor.visitBitAndFunc(self) - else: - return visitor.visitChildren(self) - - - class SplitFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def SPLIT(self): - return self.getToken(MathExprParser.SPLIT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSplitFunc" ): - listener.enterSplitFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSplitFunc" ): - listener.exitSplitFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSplitFunc" ): - return visitor.visitSplitFunc(self) - else: - return visitor.visitChildren(self) - - - class PermuteFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def PERM(self): - return self.getToken(MathExprParser.PERM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPermuteFunc" ): - listener.enterPermuteFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPermuteFunc" ): - listener.exitPermuteFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPermuteFunc" ): - return visitor.visitPermuteFunc(self) - else: - return visitor.visitChildren(self) - - - class BitOrFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def BOR(self): - return self.getToken(MathExprParser.BOR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBitOrFunc" ): - listener.enterBitOrFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBitOrFunc" ): - listener.exitBitOrFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBitOrFunc" ): - return visitor.visitBitOrFunc(self) - else: - return visitor.visitChildren(self) - - - class InterpolateLinearFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def INTERPOLATE_LINEAR(self): - return self.getToken(MathExprParser.INTERPOLATE_LINEAR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterInterpolateLinearFunc" ): - listener.enterInterpolateLinearFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitInterpolateLinearFunc" ): - listener.exitInterpolateLinearFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitInterpolateLinearFunc" ): - return visitor.visitInterpolateLinearFunc(self) - else: - return visitor.visitChildren(self) - - - class EmptyTensorFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def TENSOR(self): - return self.getToken(MathExprParser.TENSOR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def indexExpr(self): - return self.getTypedRuleContext(MathExprParser.IndexExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEmptyTensorFunc" ): - listener.enterEmptyTensorFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEmptyTensorFunc" ): - listener.exitEmptyTensorFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEmptyTensorFunc" ): - return visitor.visitEmptyTensorFunc(self) - else: - return visitor.visitChildren(self) - - - class TopkFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def TOPK(self): - return self.getToken(MathExprParser.TOPK, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTopkFunc" ): - listener.enterTopkFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTopkFunc" ): - listener.exitTopkFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTopkFunc" ): - return visitor.visitTopkFunc(self) - else: - return visitor.visitChildren(self) - - - class PercentileFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def PERCENTILE(self): - return self.getToken(MathExprParser.PERCENTILE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPercentileFunc" ): - listener.enterPercentileFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPercentileFunc" ): - listener.exitPercentileFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPercentileFunc" ): - return visitor.visitPercentileFunc(self) - else: - return visitor.visitChildren(self) - - - class TopkIndFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def TOPK_IND(self): - return self.getToken(MathExprParser.TOPK_IND, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTopkIndFunc" ): - listener.enterTopkIndFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTopkIndFunc" ): - listener.exitTopkIndFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTopkIndFunc" ): - return visitor.visitTopkIndFunc(self) - else: - return visitor.visitChildren(self) - - - class FlowApplyFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def FLOW_APPLY(self): - return self.getToken(MathExprParser.FLOW_APPLY, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFlowApplyFunc" ): - listener.enterFlowApplyFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFlowApplyFunc" ): - listener.exitFlowApplyFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFlowApplyFunc" ): - return visitor.visitFlowApplyFunc(self) - else: - return visitor.visitChildren(self) - - - class BatchShuffleFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def BATCH_SHUFFLE(self): - return self.getToken(MathExprParser.BATCH_SHUFFLE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBatchShuffleFunc" ): - listener.enterBatchShuffleFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBatchShuffleFunc" ): - listener.exitBatchShuffleFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBatchShuffleFunc" ): - return visitor.visitBatchShuffleFunc(self) - else: - return visitor.visitChildren(self) - - - class FindFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def FIND(self): - return self.getToken(MathExprParser.FIND, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFindFunc" ): - listener.enterFindFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFindFunc" ): - listener.exitFindFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFindFunc" ): - return visitor.visitFindFunc(self) - else: - return visitor.visitChildren(self) - - - class Int_to_rgbFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def INT_TO_RGB(self): - return self.getToken(MathExprParser.INT_TO_RGB, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterInt_to_rgbFunc" ): - listener.enterInt_to_rgbFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitInt_to_rgbFunc" ): - listener.exitInt_to_rgbFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitInt_to_rgbFunc" ): - return visitor.visitInt_to_rgbFunc(self) - else: - return visitor.visitChildren(self) - - - class MatmulFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def MATMUL(self): - return self.getToken(MathExprParser.MATMUL, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMatmulFunc" ): - listener.enterMatmulFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMatmulFunc" ): - listener.exitMatmulFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMatmulFunc" ): - return visitor.visitMatmulFunc(self) - else: - return visitor.visitChildren(self) - - - class StepFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def STEP(self): - return self.getToken(MathExprParser.STEP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStepFunc" ): - listener.enterStepFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStepFunc" ): - listener.exitStepFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStepFunc" ): - return visitor.visitStepFunc(self) - else: - return visitor.visitChildren(self) - - - class JoinFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def JOIN(self): - return self.getToken(MathExprParser.JOIN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterJoinFunc" ): - listener.enterJoinFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitJoinFunc" ): - listener.exitJoinFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitJoinFunc" ): - return visitor.visitJoinFunc(self) - else: - return visitor.visitChildren(self) - - - class Atan2FuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def ATAN2(self): - return self.getToken(MathExprParser.ATAN2, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAtan2Func" ): - listener.enterAtan2Func(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAtan2Func" ): - listener.exitAtan2Func(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAtan2Func" ): - return visitor.visitAtan2Func(self) - else: - return visitor.visitChildren(self) - - - class QuantileFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def QUANTILE(self): - return self.getToken(MathExprParser.QUANTILE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterQuantileFunc" ): - listener.enterQuantileFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitQuantileFunc" ): - listener.exitQuantileFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitQuantileFunc" ): - return visitor.visitQuantileFunc(self) - else: - return visitor.visitChildren(self) - - - class InterpolateNearestExactFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def INTERPOLATE_NEAREST(self): - return self.getToken(MathExprParser.INTERPOLATE_NEAREST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterInterpolateNearestExactFunc" ): - listener.enterInterpolateNearestExactFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitInterpolateNearestExactFunc" ): - listener.exitInterpolateNearestExactFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitInterpolateNearestExactFunc" ): - return visitor.visitInterpolateNearestExactFunc(self) - else: - return visitor.visitChildren(self) - - - class AddKeyFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def ADD_KEY(self): - return self.getToken(MathExprParser.ADD_KEY, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterAddKeyFunc" ): - listener.enterAddKeyFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitAddKeyFunc" ): - listener.exitAddKeyFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitAddKeyFunc" ): - return visitor.visitAddKeyFunc(self) - else: - return visitor.visitChildren(self) - - - class BitXorFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def XOR(self): - return self.getToken(MathExprParser.XOR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBitXorFunc" ): - listener.enterBitXorFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBitXorFunc" ): - listener.exitBitXorFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBitXorFunc" ): - return visitor.visitBitXorFunc(self) - else: - return visitor.visitChildren(self) - - - class Rgb_to_intFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def RGB_TO_INT(self): - return self.getToken(MathExprParser.RGB_TO_INT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRgb_to_intFunc" ): - listener.enterRgb_to_intFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRgb_to_intFunc" ): - listener.exitRgb_to_intFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRgb_to_intFunc" ): - return visitor.visitRgb_to_intFunc(self) - else: - return visitor.visitChildren(self) - - - class TMaxFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def TMAX(self): - return self.getToken(MathExprParser.TMAX, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTMaxFunc" ): - listener.enterTMaxFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTMaxFunc" ): - listener.exitTMaxFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTMaxFunc" ): - return visitor.visitTMaxFunc(self) - else: - return visitor.visitChildren(self) - - - class PushFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def PUSH(self): - return self.getToken(MathExprParser.PUSH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPushFunc" ): - listener.enterPushFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPushFunc" ): - listener.exitPushFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPushFunc" ): - return visitor.visitPushFunc(self) - else: - return visitor.visitChildren(self) - - - class GetValueFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def GET_VALUE(self): - return self.getToken(MathExprParser.GET_VALUE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGetValueFunc" ): - listener.enterGetValueFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGetValueFunc" ): - listener.exitGetValueFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGetValueFunc" ): - return visitor.visitGetValueFunc(self) - else: - return visitor.visitChildren(self) - - - class CossimFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def COSSIM(self): - return self.getToken(MathExprParser.COSSIM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCossimFunc" ): - listener.enterCossimFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCossimFunc" ): - listener.exitCossimFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCossimFunc" ): - return visitor.visitCossimFunc(self) - else: - return visitor.visitChildren(self) - - - class CrossFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def CROSS(self): - return self.getToken(MathExprParser.CROSS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCrossFunc" ): - listener.enterCrossFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCrossFunc" ): - listener.exitCrossFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCrossFunc" ): - return visitor.visitCrossFunc(self) - else: - return visitor.visitChildren(self) - - - class RifeFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def RIFE(self): - return self.getToken(MathExprParser.RIFE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRifeFunc" ): - listener.enterRifeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRifeFunc" ): - listener.exitRifeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRifeFunc" ): - return visitor.visitRifeFunc(self) - else: - return visitor.visitChildren(self) - - - class EndswithFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def ENDSWITH(self): - return self.getToken(MathExprParser.ENDSWITH, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEndswithFunc" ): - listener.enterEndswithFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEndswithFunc" ): - listener.exitEndswithFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEndswithFunc" ): - return visitor.visitEndswithFunc(self) - else: - return visitor.visitChildren(self) - - - class GaussianFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def GAUSSIAN(self): - return self.getToken(MathExprParser.GAUSSIAN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGaussianFunc" ): - listener.enterGaussianFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGaussianFunc" ): - listener.exitGaussianFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGaussianFunc" ): - return visitor.visitGaussianFunc(self) - else: - return visitor.visitChildren(self) - - - class SubstringFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def SUBSTRING(self): - return self.getToken(MathExprParser.SUBSTRING, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSubstringFunc" ): - listener.enterSubstringFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSubstringFunc" ): - listener.exitSubstringFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSubstringFunc" ): - return visitor.visitSubstringFunc(self) - else: - return visitor.visitChildren(self) - - - class QuartileFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def QUARTILE(self): - return self.getToken(MathExprParser.QUARTILE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterQuartileFunc" ): - listener.enterQuartileFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitQuartileFunc" ): - listener.exitQuartileFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitQuartileFunc" ): - return visitor.visitQuartileFunc(self) - else: - return visitor.visitChildren(self) - - - class TMinFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def TMIN(self): - return self.getToken(MathExprParser.TMIN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTMinFunc" ): - listener.enterTMinFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTMinFunc" ): - listener.exitTMinFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTMinFunc" ): - return visitor.visitTMinFunc(self) - else: - return visitor.visitChildren(self) - - - class ReplaceFuncContext(Func2Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context - super().__init__(parser) - self.copyFrom(ctx) - - def REPLACE(self): - return self.getToken(MathExprParser.REPLACE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterReplaceFunc" ): - listener.enterReplaceFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitReplaceFunc" ): - listener.exitReplaceFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitReplaceFunc" ): - return visitor.visitReplaceFunc(self) - else: - return visitor.visitChildren(self) - - - - def func2(self): - - localctx = MathExprParser.Func2Context(self, self._ctx, self.state) - self.enterRule(localctx, 58, self.RULE_func2) - self._la = 0 # Token type - try: - self.state = 1287 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [29]: - localctx = MathExprParser.PowFuncContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 919 - self.match(MathExprParser.POWE) - self.state = 920 - self.match(MathExprParser.LPAREN) - self.state = 921 - self.expr() - self.state = 922 - self.match(MathExprParser.COMMA) - self.state = 923 - self.expr() - self.state = 924 - self.match(MathExprParser.RPAREN) - pass - elif token in [7]: - localctx = MathExprParser.Atan2FuncContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 926 - self.match(MathExprParser.ATAN2) - self.state = 927 - self.match(MathExprParser.LPAREN) - self.state = 928 - self.expr() - self.state = 929 - self.match(MathExprParser.COMMA) - self.state = 930 - self.expr() - self.state = 931 - self.match(MathExprParser.RPAREN) - pass - elif token in [21]: - localctx = MathExprParser.TMinFuncContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 933 - self.match(MathExprParser.TMIN) - self.state = 934 - self.match(MathExprParser.LPAREN) - self.state = 935 - self.expr() - self.state = 936 - self.match(MathExprParser.COMMA) - self.state = 937 - self.expr() - self.state = 938 - self.match(MathExprParser.RPAREN) - pass - elif token in [22]: - localctx = MathExprParser.TMaxFuncContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 940 - self.match(MathExprParser.TMAX) - self.state = 941 - self.match(MathExprParser.LPAREN) - self.state = 942 - self.expr() - self.state = 943 - self.match(MathExprParser.COMMA) - self.state = 944 - self.expr() - self.state = 945 - self.match(MathExprParser.RPAREN) - pass - elif token in [24]: - localctx = MathExprParser.SNormFuncContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 947 - self.match(MathExprParser.SNORM) - self.state = 948 - self.match(MathExprParser.LPAREN) - self.state = 949 - self.expr() - self.state = 952 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 950 - self.match(MathExprParser.COMMA) - self.state = 951 - self.expr() - - - self.state = 954 - self.match(MathExprParser.RPAREN) - pass - elif token in [39]: - localctx = MathExprParser.StepFuncContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 956 - self.match(MathExprParser.STEP) - self.state = 957 - self.match(MathExprParser.LPAREN) - self.state = 958 - self.expr() - self.state = 959 - self.match(MathExprParser.COMMA) - self.state = 960 - self.expr() - self.state = 961 - self.match(MathExprParser.RPAREN) - pass - elif token in [56]: - localctx = MathExprParser.TopkFuncContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 963 - self.match(MathExprParser.TOPK) - self.state = 964 - self.match(MathExprParser.LPAREN) - self.state = 965 - self.expr() - self.state = 966 - self.match(MathExprParser.COMMA) - self.state = 967 - self.expr() - self.state = 968 - self.match(MathExprParser.RPAREN) - pass - elif token in [57]: - localctx = MathExprParser.BotkFuncContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 970 - self.match(MathExprParser.BOTK) - self.state = 971 - self.match(MathExprParser.LPAREN) - self.state = 972 - self.expr() - self.state = 973 - self.match(MathExprParser.COMMA) - self.state = 974 - self.expr() - self.state = 975 - self.match(MathExprParser.RPAREN) - pass - elif token in [63]: - localctx = MathExprParser.QuartileFuncContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 977 - self.match(MathExprParser.QUARTILE) - self.state = 978 - self.match(MathExprParser.LPAREN) - self.state = 979 - self.expr() - self.state = 980 - self.match(MathExprParser.COMMA) - self.state = 981 - self.expr() - self.state = 982 - self.match(MathExprParser.RPAREN) - pass - elif token in [64]: - localctx = MathExprParser.PercentileFuncContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 984 - self.match(MathExprParser.PERCENTILE) - self.state = 985 - self.match(MathExprParser.LPAREN) - self.state = 986 - self.expr() - self.state = 987 - self.match(MathExprParser.COMMA) - self.state = 988 - self.expr() - self.state = 989 - self.match(MathExprParser.RPAREN) - pass - elif token in [65]: - localctx = MathExprParser.QuantileFuncContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 991 - self.match(MathExprParser.QUANTILE) - self.state = 992 - self.match(MathExprParser.LPAREN) - self.state = 993 - self.expr() - self.state = 994 - self.match(MathExprParser.COMMA) - self.state = 995 - self.expr() - self.state = 996 - self.match(MathExprParser.RPAREN) - pass - elif token in [66]: - localctx = MathExprParser.DotFuncContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 998 - self.match(MathExprParser.DOT) - self.state = 999 - self.match(MathExprParser.LPAREN) - self.state = 1000 - self.expr() - self.state = 1001 - self.match(MathExprParser.COMMA) - self.state = 1002 - self.expr() - self.state = 1003 - self.match(MathExprParser.RPAREN) - pass - elif token in [86]: - localctx = MathExprParser.CossimFuncContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 1005 - self.match(MathExprParser.COSSIM) - self.state = 1006 - self.match(MathExprParser.LPAREN) - self.state = 1007 - self.expr() - self.state = 1008 - self.match(MathExprParser.COMMA) - self.state = 1009 - self.expr() - self.state = 1010 - self.match(MathExprParser.RPAREN) - pass - elif token in [176]: - localctx = MathExprParser.StartswithFuncContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 1012 - self.match(MathExprParser.STARTSWITH) - self.state = 1013 - self.match(MathExprParser.LPAREN) - self.state = 1014 - self.expr() - self.state = 1015 - self.match(MathExprParser.COMMA) - self.state = 1016 - self.expr() - self.state = 1017 - self.match(MathExprParser.RPAREN) - pass - elif token in [177]: - localctx = MathExprParser.EndswithFuncContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 1019 - self.match(MathExprParser.ENDSWITH) - self.state = 1020 - self.match(MathExprParser.LPAREN) - self.state = 1021 - self.expr() - self.state = 1022 - self.match(MathExprParser.COMMA) - self.state = 1023 - self.expr() - self.state = 1024 - self.match(MathExprParser.RPAREN) - pass - elif token in [175]: - localctx = MathExprParser.FlipFuncContext(self, localctx) - self.enterOuterAlt(localctx, 16) - self.state = 1026 - self.match(MathExprParser.FLIP) - self.state = 1027 - self.match(MathExprParser.LPAREN) - self.state = 1028 - self.expr() - self.state = 1029 - self.match(MathExprParser.COMMA) - self.state = 1030 - self.expr() - self.state = 1031 - self.match(MathExprParser.RPAREN) - pass - elif token in [181]: - localctx = MathExprParser.CovFuncContext(self, localctx) - self.enterOuterAlt(localctx, 17) - self.state = 1033 - self.match(MathExprParser.COV) - self.state = 1034 - self.match(MathExprParser.LPAREN) - self.state = 1035 - self.expr() - self.state = 1036 - self.match(MathExprParser.COMMA) - self.state = 1037 - self.expr() - self.state = 1038 - self.match(MathExprParser.RPAREN) - pass - elif token in [182]: - localctx = MathExprParser.CorrFuncContext(self, localctx) - self.enterOuterAlt(localctx, 18) - self.state = 1040 - self.match(MathExprParser.CORR) - self.state = 1041 - self.match(MathExprParser.LPAREN) - self.state = 1042 - self.expr() - self.state = 1043 - self.match(MathExprParser.COMMA) - self.state = 1044 - self.expr() - self.state = 1045 - self.match(MathExprParser.RPAREN) - pass - elif token in [98]: - localctx = MathExprParser.AppendFuncContext(self, localctx) - self.enterOuterAlt(localctx, 19) - self.state = 1047 - self.match(MathExprParser.APPEND) - self.state = 1048 - self.match(MathExprParser.LPAREN) - self.state = 1049 - self.expr() - self.state = 1050 - self.match(MathExprParser.COMMA) - self.state = 1051 - self.expr() - self.state = 1052 - self.match(MathExprParser.RPAREN) - pass - elif token in [120]: - localctx = MathExprParser.AddKeyFuncContext(self, localctx) - self.enterOuterAlt(localctx, 20) - self.state = 1054 - self.match(MathExprParser.ADD_KEY) - self.state = 1055 - self.match(MathExprParser.LPAREN) - self.state = 1056 - self.expr() - self.state = 1057 - self.match(MathExprParser.COMMA) - self.state = 1058 - self.expr() - self.state = 1059 - self.match(MathExprParser.COMMA) - self.state = 1060 - self.expr() - self.state = 1061 - self.match(MathExprParser.RPAREN) - pass - elif token in [51]: - localctx = MathExprParser.PermuteFuncContext(self, localctx) - self.enterOuterAlt(localctx, 21) - self.state = 1063 - self.match(MathExprParser.PERM) - self.state = 1064 - self.match(MathExprParser.LPAREN) - self.state = 1065 - self.expr() - self.state = 1066 - self.match(MathExprParser.COMMA) - self.state = 1067 - self.expr() - self.state = 1068 - self.match(MathExprParser.RPAREN) - pass - elif token in [73]: - localctx = MathExprParser.GaussianFuncContext(self, localctx) - self.enterOuterAlt(localctx, 22) - self.state = 1070 - self.match(MathExprParser.GAUSSIAN) - self.state = 1071 - self.match(MathExprParser.LPAREN) - self.state = 1072 - self.expr() - self.state = 1073 - self.match(MathExprParser.COMMA) - self.state = 1074 - self.expr() - self.state = 1077 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1075 - self.match(MathExprParser.COMMA) - self.state = 1076 - self.expr() - - - self.state = 1079 - self.match(MathExprParser.RPAREN) - pass - elif token in [78]: - localctx = MathExprParser.TopkIndFuncContext(self, localctx) - self.enterOuterAlt(localctx, 23) - self.state = 1081 - self.match(MathExprParser.TOPK_IND) - self.state = 1082 - self.match(MathExprParser.LPAREN) - self.state = 1083 - self.expr() - self.state = 1084 - self.match(MathExprParser.COMMA) - self.state = 1085 - self.expr() - self.state = 1086 - self.match(MathExprParser.RPAREN) - pass - elif token in [79]: - localctx = MathExprParser.BotkIndFuncContext(self, localctx) - self.enterOuterAlt(localctx, 24) - self.state = 1088 - self.match(MathExprParser.BOTK_IND) - self.state = 1089 - self.match(MathExprParser.LPAREN) - self.state = 1090 - self.expr() - self.state = 1091 - self.match(MathExprParser.COMMA) - self.state = 1092 - self.expr() - self.state = 1093 - self.match(MathExprParser.RPAREN) - pass - elif token in [101]: - localctx = MathExprParser.BatchShuffleFuncContext(self, localctx) - self.enterOuterAlt(localctx, 25) - self.state = 1095 - self.match(MathExprParser.BATCH_SHUFFLE) - self.state = 1096 - self.match(MathExprParser.LPAREN) - self.state = 1097 - self.expr() - self.state = 1098 - self.match(MathExprParser.COMMA) - self.state = 1099 - self.expr() - self.state = 1100 - self.match(MathExprParser.RPAREN) - pass - elif token in [122]: - localctx = MathExprParser.PushFuncContext(self, localctx) - self.enterOuterAlt(localctx, 26) - self.state = 1102 - self.match(MathExprParser.PUSH) - self.state = 1103 - self.match(MathExprParser.LPAREN) - self.state = 1104 - self.expr() - self.state = 1105 - self.match(MathExprParser.COMMA) - self.state = 1106 - self.expr() - self.state = 1107 - self.match(MathExprParser.RPAREN) - pass - elif token in [99]: - localctx = MathExprParser.GetValueFuncContext(self, localctx) - self.enterOuterAlt(localctx, 27) - self.state = 1109 - self.match(MathExprParser.GET_VALUE) - self.state = 1110 - self.match(MathExprParser.LPAREN) - self.state = 1111 - self.expr() - self.state = 1112 - self.match(MathExprParser.COMMA) - self.state = 1113 - self.expr() - self.state = 1114 - self.match(MathExprParser.RPAREN) - pass - elif token in [119]: - localctx = MathExprParser.EmptyTensorFuncContext(self, localctx) - self.enterOuterAlt(localctx, 28) - self.state = 1116 - self.match(MathExprParser.TENSOR) - self.state = 1117 - self.match(MathExprParser.LPAREN) - self.state = 1118 - self.indexExpr(0) - self.state = 1125 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1119 - self.match(MathExprParser.COMMA) - self.state = 1120 - self.expr() - self.state = 1123 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1121 - self.match(MathExprParser.COMMA) - self.state = 1122 - self.expr() - - - - - self.state = 1127 - self.match(MathExprParser.RPAREN) - pass - elif token in [109]: - localctx = MathExprParser.PadFuncContext(self, localctx) - self.enterOuterAlt(localctx, 29) - self.state = 1129 - self.match(MathExprParser.PAD) - self.state = 1130 - self.match(MathExprParser.LPAREN) - self.state = 1131 - self.expr() - self.state = 1132 - self.match(MathExprParser.COMMA) - self.state = 1133 - self.expr() - self.state = 1134 - self.match(MathExprParser.RPAREN) - pass - elif token in [110]: - localctx = MathExprParser.CrossFuncContext(self, localctx) - self.enterOuterAlt(localctx, 30) - self.state = 1136 - self.match(MathExprParser.CROSS) - self.state = 1137 - self.match(MathExprParser.LPAREN) - self.state = 1138 - self.expr() - self.state = 1139 - self.match(MathExprParser.COMMA) - self.state = 1140 - self.expr() - self.state = 1141 - self.match(MathExprParser.RPAREN) - pass - elif token in [111]: - localctx = MathExprParser.MatmulFuncContext(self, localctx) - self.enterOuterAlt(localctx, 31) - self.state = 1143 - self.match(MathExprParser.MATMUL) - self.state = 1144 - self.match(MathExprParser.LPAREN) - self.state = 1145 - self.expr() - self.state = 1146 - self.match(MathExprParser.COMMA) - self.state = 1147 - self.expr() - self.state = 1148 - self.match(MathExprParser.RPAREN) - pass - elif token in [100]: - localctx = MathExprParser.FlowApplyFuncContext(self, localctx) - self.enterOuterAlt(localctx, 32) - self.state = 1150 - self.match(MathExprParser.FLOW_APPLY) - self.state = 1151 - self.match(MathExprParser.LPAREN) - self.state = 1152 - self.expr() - self.state = 1153 - self.match(MathExprParser.COMMA) - self.state = 1154 - self.expr() - self.state = 1155 - self.match(MathExprParser.RPAREN) - pass - elif token in [112]: - localctx = MathExprParser.RifeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 33) - self.state = 1157 - self.match(MathExprParser.RIFE) - self.state = 1158 - self.match(MathExprParser.LPAREN) - self.state = 1159 - self.expr() - self.state = 1160 - self.match(MathExprParser.COMMA) - self.state = 1161 - self.expr() - self.state = 1172 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1162 - self.match(MathExprParser.COMMA) - self.state = 1163 - self.expr() - self.state = 1170 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1164 - self.match(MathExprParser.COMMA) - self.state = 1165 - self.expr() - self.state = 1168 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1166 - self.match(MathExprParser.COMMA) - self.state = 1167 - self.expr() - - - - - - - self.state = 1174 - self.match(MathExprParser.RPAREN) - pass - elif token in [116]: - localctx = MathExprParser.BitAndFuncContext(self, localctx) - self.enterOuterAlt(localctx, 34) - self.state = 1176 - self.match(MathExprParser.BAND) - self.state = 1177 - self.match(MathExprParser.LPAREN) - self.state = 1178 - self.expr() - self.state = 1179 - self.match(MathExprParser.COMMA) - self.state = 1180 - self.expr() - self.state = 1181 - self.match(MathExprParser.RPAREN) - pass - elif token in [117]: - localctx = MathExprParser.BitXorFuncContext(self, localctx) - self.enterOuterAlt(localctx, 35) - self.state = 1183 - self.match(MathExprParser.XOR) - self.state = 1184 - self.match(MathExprParser.LPAREN) - self.state = 1185 - self.expr() - self.state = 1186 - self.match(MathExprParser.COMMA) - self.state = 1187 - self.expr() - self.state = 1188 - self.match(MathExprParser.RPAREN) - pass - elif token in [118]: - localctx = MathExprParser.BitOrFuncContext(self, localctx) - self.enterOuterAlt(localctx, 36) - self.state = 1190 - self.match(MathExprParser.BOR) - self.state = 1191 - self.match(MathExprParser.LPAREN) - self.state = 1192 - self.expr() - self.state = 1193 - self.match(MathExprParser.COMMA) - self.state = 1194 - self.expr() - self.state = 1195 - self.match(MathExprParser.RPAREN) - pass - elif token in [135]: - localctx = MathExprParser.SplitFuncContext(self, localctx) - self.enterOuterAlt(localctx, 37) - self.state = 1197 - self.match(MathExprParser.SPLIT) - self.state = 1198 - self.match(MathExprParser.LPAREN) - self.state = 1199 - self.expr() - self.state = 1202 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1200 - self.match(MathExprParser.COMMA) - self.state = 1201 - self.expr() - - - self.state = 1204 - self.match(MathExprParser.RPAREN) - pass - elif token in [136]: - localctx = MathExprParser.JoinFuncContext(self, localctx) - self.enterOuterAlt(localctx, 38) - self.state = 1206 - self.match(MathExprParser.JOIN) - self.state = 1207 - self.match(MathExprParser.LPAREN) - self.state = 1208 - self.expr() - self.state = 1211 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1209 - self.match(MathExprParser.COMMA) - self.state = 1210 - self.expr() - - - self.state = 1213 - self.match(MathExprParser.RPAREN) - pass - elif token in [137]: - localctx = MathExprParser.SubstringFuncContext(self, localctx) - self.enterOuterAlt(localctx, 39) - self.state = 1215 - self.match(MathExprParser.SUBSTRING) - self.state = 1216 - self.match(MathExprParser.LPAREN) - self.state = 1217 - self.expr() - self.state = 1218 - self.match(MathExprParser.COMMA) - self.state = 1219 - self.expr() - self.state = 1222 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1220 - self.match(MathExprParser.COMMA) - self.state = 1221 - self.expr() - - - self.state = 1224 - self.match(MathExprParser.RPAREN) - pass - elif token in [138]: - localctx = MathExprParser.FindFuncContext(self, localctx) - self.enterOuterAlt(localctx, 40) - self.state = 1226 - self.match(MathExprParser.FIND) - self.state = 1227 - self.match(MathExprParser.LPAREN) - self.state = 1228 - self.expr() - self.state = 1229 - self.match(MathExprParser.COMMA) - self.state = 1230 - self.expr() - self.state = 1231 - self.match(MathExprParser.RPAREN) - pass - elif token in [139]: - localctx = MathExprParser.ReplaceFuncContext(self, localctx) - self.enterOuterAlt(localctx, 41) - self.state = 1233 - self.match(MathExprParser.REPLACE) - self.state = 1234 - self.match(MathExprParser.LPAREN) - self.state = 1235 - self.expr() - self.state = 1236 - self.match(MathExprParser.COMMA) - self.state = 1237 - self.expr() - self.state = 1238 - self.match(MathExprParser.COMMA) - self.state = 1239 - self.expr() - self.state = 1240 - self.match(MathExprParser.RPAREN) - pass - elif token in [150]: - localctx = MathExprParser.Int_to_rgbFuncContext(self, localctx) - self.enterOuterAlt(localctx, 42) - self.state = 1242 - self.match(MathExprParser.INT_TO_RGB) - self.state = 1243 - self.match(MathExprParser.LPAREN) - self.state = 1244 - self.expr() - self.state = 1245 - self.match(MathExprParser.RPAREN) - pass - elif token in [151]: - localctx = MathExprParser.Rgb_to_intFuncContext(self, localctx) - self.enterOuterAlt(localctx, 43) - self.state = 1247 - self.match(MathExprParser.RGB_TO_INT) - self.state = 1248 - self.match(MathExprParser.LPAREN) - self.state = 1249 - self.expr() - self.state = 1255 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1250 - self.match(MathExprParser.COMMA) - self.state = 1251 - self.expr() - self.state = 1252 - self.match(MathExprParser.COMMA) - self.state = 1253 - self.expr() - - - self.state = 1257 - self.match(MathExprParser.RPAREN) - pass - elif token in [152]: - localctx = MathExprParser.InterpolateLinearFuncContext(self, localctx) - self.enterOuterAlt(localctx, 44) - self.state = 1259 - self.match(MathExprParser.INTERPOLATE_LINEAR) - self.state = 1260 - self.match(MathExprParser.LPAREN) - self.state = 1261 - self.expr() - self.state = 1262 - self.match(MathExprParser.COMMA) - self.state = 1263 - self.expr() - self.state = 1264 - self.match(MathExprParser.RPAREN) - pass - elif token in [153]: - localctx = MathExprParser.InterpolateAreaFuncContext(self, localctx) - self.enterOuterAlt(localctx, 45) - self.state = 1266 - self.match(MathExprParser.INTERPOLATE_AREA) - self.state = 1267 - self.match(MathExprParser.LPAREN) - self.state = 1268 - self.expr() - self.state = 1269 - self.match(MathExprParser.COMMA) - self.state = 1270 - self.expr() - self.state = 1271 - self.match(MathExprParser.RPAREN) - pass - elif token in [154]: - localctx = MathExprParser.InterpolateNearestExactFuncContext(self, localctx) - self.enterOuterAlt(localctx, 46) - self.state = 1273 - self.match(MathExprParser.INTERPOLATE_NEAREST) - self.state = 1274 - self.match(MathExprParser.LPAREN) - self.state = 1275 - self.expr() - self.state = 1276 - self.match(MathExprParser.COMMA) - self.state = 1277 - self.expr() - self.state = 1278 - self.match(MathExprParser.RPAREN) - pass - elif token in [121]: - localctx = MathExprParser.RemoveKeyFuncContext(self, localctx) - self.enterOuterAlt(localctx, 47) - self.state = 1280 - self.match(MathExprParser.REMOVE_KEY) - self.state = 1281 - self.match(MathExprParser.LPAREN) - self.state = 1282 - self.expr() - self.state = 1283 - self.match(MathExprParser.COMMA) - self.state = 1284 - self.expr() - self.state = 1285 - self.match(MathExprParser.RPAREN) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class Func3Context(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_func3 - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class SmootherstepFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def SMOOTHERSTEP(self): - return self.getToken(MathExprParser.SMOOTHERSTEP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSmootherstepFunc" ): - listener.enterSmootherstepFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSmootherstepFunc" ): - listener.exitSmootherstepFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSmootherstepFunc" ): - return visitor.visitSmootherstepFunc(self) - else: - return visitor.visitChildren(self) - - - class ScatterAddFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def SCATTER_ADD(self): - return self.getToken(MathExprParser.SCATTER_ADD, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterScatterAddFunc" ): - listener.enterScatterAddFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitScatterAddFunc" ): - listener.exitScatterAddFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitScatterAddFunc" ): - return visitor.visitScatterAddFunc(self) - else: - return visitor.visitChildren(self) - - - class CoordsFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def COORDS(self): - return self.getToken(MathExprParser.COORDS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCoordsFunc" ): - listener.enterCoordsFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCoordsFunc" ): - listener.exitCoordsFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCoordsFunc" ): - return visitor.visitCoordsFunc(self) - else: - return visitor.visitChildren(self) - - - class ClampFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def CLAMP(self): - return self.getToken(MathExprParser.CLAMP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterClampFunc" ): - listener.enterClampFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitClampFunc" ): - listener.exitClampFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitClampFunc" ): - return visitor.visitClampFunc(self) - else: - return visitor.visitChildren(self) - - - class SineEaseFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def SINE_EASE(self): - return self.getToken(MathExprParser.SINE_EASE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSineEaseFunc" ): - listener.enterSineEaseFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSineEaseFunc" ): - listener.exitSineEaseFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSineEaseFunc" ): - return visitor.visitSineEaseFunc(self) - else: - return visitor.visitChildren(self) - - - class TextImageFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def TEXT_IMAGE(self): - return self.getToken(MathExprParser.TEXT_IMAGE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTextImageFunc" ): - listener.enterTextImageFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTextImageFunc" ): - listener.exitTextImageFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTextImageFunc" ): - return visitor.visitTextImageFunc(self) - else: - return visitor.visitChildren(self) - - - class RollFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def ROLL(self): - return self.getToken(MathExprParser.ROLL, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRollFunc" ): - listener.enterRollFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRollFunc" ): - listener.exitRollFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRollFunc" ): - return visitor.visitRollFunc(self) - else: - return visitor.visitChildren(self) - - - class RgbToCielabFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def RGB_TO_CIELAB(self): - return self.getToken(MathExprParser.RGB_TO_CIELAB, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRgbToCielabFunc" ): - listener.enterRgbToCielabFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRgbToCielabFunc" ): - listener.exitRgbToCielabFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRgbToCielabFunc" ): - return visitor.visitRgbToCielabFunc(self) - else: - return visitor.visitChildren(self) - - - class ScatterFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def SCATTER(self): - return self.getToken(MathExprParser.SCATTER, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterScatterFunc" ): - listener.enterScatterFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitScatterFunc" ): - listener.exitScatterFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitScatterFunc" ): - return visitor.visitScatterFunc(self) - else: - return visitor.visitChildren(self) - - - class ElasticEaseFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def ELASTIC_EASE(self): - return self.getToken(MathExprParser.ELASTIC_EASE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterElasticEaseFunc" ): - listener.enterElasticEaseFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitElasticEaseFunc" ): - listener.exitElasticEaseFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitElasticEaseFunc" ): - return visitor.visitElasticEaseFunc(self) - else: - return visitor.visitChildren(self) - - - class RangeFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def RANGE(self): - return self.getToken(MathExprParser.RANGE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRangeFunc" ): - listener.enterRangeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRangeFunc" ): - listener.exitRangeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRangeFunc" ): - return visitor.visitRangeFunc(self) - else: - return visitor.visitChildren(self) - - - class WhereFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def WHERE(self): - return self.getToken(MathExprParser.WHERE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterWhereFunc" ): - listener.enterWhereFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitWhereFunc" ): - listener.exitWhereFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitWhereFunc" ): - return visitor.visitWhereFunc(self) - else: - return visitor.visitChildren(self) - - - class GatherFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def GATHER(self): - return self.getToken(MathExprParser.GATHER, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGatherFunc" ): - listener.enterGatherFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGatherFunc" ): - listener.exitGatherFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGatherFunc" ): - return visitor.visitGatherFunc(self) - else: - return visitor.visitChildren(self) - - - class RgbToOklabFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def RGB_TO_OKLAB(self): - return self.getToken(MathExprParser.RGB_TO_OKLAB, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRgbToOklabFunc" ): - listener.enterRgbToOklabFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRgbToOklabFunc" ): - listener.exitRgbToOklabFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRgbToOklabFunc" ): - return visitor.visitRgbToOklabFunc(self) - else: - return visitor.visitChildren(self) - - - class CielabToRgbFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def CIELAB_TO_RGB(self): - return self.getToken(MathExprParser.CIELAB_TO_RGB, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCielabToRgbFunc" ): - listener.enterCielabToRgbFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCielabToRgbFunc" ): - listener.exitCielabToRgbFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCielabToRgbFunc" ): - return visitor.visitCielabToRgbFunc(self) - else: - return visitor.visitChildren(self) - - - class CubicEaseFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def CUBIC_EASE(self): - return self.getToken(MathExprParser.CUBIC_EASE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCubicEaseFunc" ): - listener.enterCubicEaseFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCubicEaseFunc" ): - listener.exitCubicEaseFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCubicEaseFunc" ): - return visitor.visitCubicEaseFunc(self) - else: - return visitor.visitChildren(self) - - - class HsvToRgbFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def HSV_TO_RGB(self): - return self.getToken(MathExprParser.HSV_TO_RGB, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterHsvToRgbFunc" ): - listener.enterHsvToRgbFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitHsvToRgbFunc" ): - listener.exitHsvToRgbFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitHsvToRgbFunc" ): - return visitor.visitHsvToRgbFunc(self) - else: - return visitor.visitChildren(self) - - - class SmoothstepFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def SMOOTHSTEP(self): - return self.getToken(MathExprParser.SMOOTHSTEP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSmoothstepFunc" ): - listener.enterSmoothstepFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSmoothstepFunc" ): - listener.exitSmoothstepFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSmoothstepFunc" ): - return visitor.visitSmoothstepFunc(self) - else: - return visitor.visitChildren(self) - - - class TransposeFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def TRANSPOSE(self): - return self.getToken(MathExprParser.TRANSPOSE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterTransposeFunc" ): - listener.enterTransposeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitTransposeFunc" ): - listener.exitTransposeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitTransposeFunc" ): - return visitor.visitTransposeFunc(self) - else: - return visitor.visitChildren(self) - - - class LinspaceFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def LINSPACE(self): - return self.getToken(MathExprParser.LINSPACE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLinspaceFunc" ): - listener.enterLinspaceFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLinspaceFunc" ): - listener.exitLinspaceFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLinspaceFunc" ): - return visitor.visitLinspaceFunc(self) - else: - return visitor.visitChildren(self) - - - class OklabToRgbFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def OKLAB_TO_RGB(self): - return self.getToken(MathExprParser.OKLAB_TO_RGB, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterOklabToRgbFunc" ): - listener.enterOklabToRgbFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitOklabToRgbFunc" ): - listener.exitOklabToRgbFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitOklabToRgbFunc" ): - return visitor.visitOklabToRgbFunc(self) - else: - return visitor.visitChildren(self) - - - class OverlayFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def OVERLAY(self): - return self.getToken(MathExprParser.OVERLAY, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterOverlayFunc" ): - listener.enterOverlayFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitOverlayFunc" ): - listener.exitOverlayFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitOverlayFunc" ): - return visitor.visitOverlayFunc(self) - else: - return visitor.visitChildren(self) - - - class MomentFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def MOMENT(self): - return self.getToken(MathExprParser.MOMENT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMomentFunc" ): - listener.enterMomentFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMomentFunc" ): - listener.exitMomentFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMomentFunc" ): - return visitor.visitMomentFunc(self) - else: - return visitor.visitChildren(self) - - - class LerpFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def LERP(self): - return self.getToken(MathExprParser.LERP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLerpFunc" ): - listener.enterLerpFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLerpFunc" ): - listener.exitLerpFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLerpFunc" ): - return visitor.visitLerpFunc(self) - else: - return visitor.visitChildren(self) - - - class RgbToHsvFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def RGB_TO_HSV(self): - return self.getToken(MathExprParser.RGB_TO_HSV, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRgbToHsvFunc" ): - listener.enterRgbToHsvFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRgbToHsvFunc" ): - listener.exitRgbToHsvFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRgbToHsvFunc" ): - return visitor.visitRgbToHsvFunc(self) - else: - return visitor.visitChildren(self) - - - class SifftFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def SIFFT(self): - return self.getToken(MathExprParser.SIFFT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSifftFunc" ): - listener.enterSifftFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSifftFunc" ): - listener.exitSifftFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSifftFunc" ): - return visitor.visitSifftFunc(self) - else: - return visitor.visitChildren(self) - - - class CropFuncContext(Func3Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func3Context - super().__init__(parser) - self.copyFrom(ctx) - - def CROP(self): - return self.getToken(MathExprParser.CROP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCropFunc" ): - listener.enterCropFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCropFunc" ): - listener.exitCropFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCropFunc" ): - return visitor.visitCropFunc(self) - else: - return visitor.visitChildren(self) - - - - def func3(self): - - localctx = MathExprParser.Func3Context(self, self._ctx, self.state) - self.enterRule(localctx, 60, self.RULE_func3) - self._la = 0 # Token type - try: - self.state = 1594 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [31]: - localctx = MathExprParser.ClampFuncContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1289 - self.match(MathExprParser.CLAMP) - self.state = 1290 - self.match(MathExprParser.LPAREN) - self.state = 1291 - self.expr() - self.state = 1292 - self.match(MathExprParser.COMMA) - self.state = 1293 - self.expr() - self.state = 1294 - self.match(MathExprParser.COMMA) - self.state = 1295 - self.expr() - self.state = 1296 - self.match(MathExprParser.RPAREN) - pass - elif token in [38]: - localctx = MathExprParser.LerpFuncContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1298 - self.match(MathExprParser.LERP) - self.state = 1299 - self.match(MathExprParser.LPAREN) - self.state = 1300 - self.expr() - self.state = 1301 - self.match(MathExprParser.COMMA) - self.state = 1302 - self.expr() - self.state = 1303 - self.match(MathExprParser.COMMA) - self.state = 1304 - self.expr() - self.state = 1305 - self.match(MathExprParser.RPAREN) - pass - elif token in [40]: - localctx = MathExprParser.SmoothstepFuncContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1307 - self.match(MathExprParser.SMOOTHSTEP) - self.state = 1308 - self.match(MathExprParser.LPAREN) - self.state = 1309 - self.expr() - self.state = 1310 - self.match(MathExprParser.COMMA) - self.state = 1311 - self.expr() - self.state = 1312 - self.match(MathExprParser.COMMA) - self.state = 1313 - self.expr() - self.state = 1314 - self.match(MathExprParser.RPAREN) - pass - elif token in [50]: - localctx = MathExprParser.TransposeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 1316 - self.match(MathExprParser.TRANSPOSE) - self.state = 1317 - self.match(MathExprParser.LPAREN) - self.state = 1318 - self.expr() - self.state = 1319 - self.match(MathExprParser.COMMA) - self.state = 1320 - self.expr() - self.state = 1321 - self.match(MathExprParser.COMMA) - self.state = 1322 - self.expr() - self.state = 1323 - self.match(MathExprParser.RPAREN) - pass - elif token in [53]: - localctx = MathExprParser.RangeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 1325 - self.match(MathExprParser.RANGE) - self.state = 1326 - self.match(MathExprParser.LPAREN) - self.state = 1327 - self.expr() - self.state = 1328 - self.match(MathExprParser.COMMA) - self.state = 1329 - self.expr() - self.state = 1330 - self.match(MathExprParser.COMMA) - self.state = 1331 - self.expr() - self.state = 1332 - self.match(MathExprParser.RPAREN) - pass - elif token in [67]: - localctx = MathExprParser.MomentFuncContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 1334 - self.match(MathExprParser.MOMENT) - self.state = 1335 - self.match(MathExprParser.LPAREN) - self.state = 1336 - self.expr() - self.state = 1337 - self.match(MathExprParser.COMMA) - self.state = 1338 - self.expr() - self.state = 1339 - self.match(MathExprParser.COMMA) - self.state = 1340 - self.expr() - self.state = 1341 - self.match(MathExprParser.RPAREN) - pass - elif token in [80]: - localctx = MathExprParser.CubicEaseFuncContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 1343 - self.match(MathExprParser.CUBIC_EASE) - self.state = 1344 - self.match(MathExprParser.LPAREN) - self.state = 1345 - self.expr() - self.state = 1346 - self.match(MathExprParser.COMMA) - self.state = 1347 - self.expr() - self.state = 1348 - self.match(MathExprParser.COMMA) - self.state = 1349 - self.expr() - self.state = 1350 - self.match(MathExprParser.RPAREN) - pass - elif token in [81]: - localctx = MathExprParser.ElasticEaseFuncContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 1352 - self.match(MathExprParser.ELASTIC_EASE) - self.state = 1353 - self.match(MathExprParser.LPAREN) - self.state = 1354 - self.expr() - self.state = 1355 - self.match(MathExprParser.COMMA) - self.state = 1356 - self.expr() - self.state = 1357 - self.match(MathExprParser.COMMA) - self.state = 1358 - self.expr() - self.state = 1359 - self.match(MathExprParser.RPAREN) - pass - elif token in [82]: - localctx = MathExprParser.SineEaseFuncContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 1361 - self.match(MathExprParser.SINE_EASE) - self.state = 1362 - self.match(MathExprParser.LPAREN) - self.state = 1363 - self.expr() - self.state = 1364 - self.match(MathExprParser.COMMA) - self.state = 1365 - self.expr() - self.state = 1366 - self.match(MathExprParser.COMMA) - self.state = 1367 - self.expr() - self.state = 1368 - self.match(MathExprParser.RPAREN) - pass - elif token in [83]: - localctx = MathExprParser.SmootherstepFuncContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 1370 - self.match(MathExprParser.SMOOTHERSTEP) - self.state = 1371 - self.match(MathExprParser.LPAREN) - self.state = 1372 - self.expr() - self.state = 1373 - self.match(MathExprParser.COMMA) - self.state = 1374 - self.expr() - self.state = 1375 - self.match(MathExprParser.COMMA) - self.state = 1376 - self.expr() - self.state = 1377 - self.match(MathExprParser.RPAREN) - pass - elif token in [184]: - localctx = MathExprParser.CropFuncContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 1379 - self.match(MathExprParser.CROP) - self.state = 1380 - self.match(MathExprParser.LPAREN) - self.state = 1381 - self.expr() - self.state = 1382 - self.match(MathExprParser.COMMA) - self.state = 1383 - self.expr() - self.state = 1384 - self.match(MathExprParser.COMMA) - self.state = 1385 - self.expr() - self.state = 1386 - self.match(MathExprParser.RPAREN) - pass - elif token in [33]: - localctx = MathExprParser.SifftFuncContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 1388 - self.match(MathExprParser.SIFFT) - self.state = 1389 - self.match(MathExprParser.LPAREN) - self.state = 1390 - self.expr() - self.state = 1393 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1391 - self.match(MathExprParser.COMMA) - self.state = 1392 - self.expr() - - - self.state = 1395 - self.match(MathExprParser.RPAREN) - pass - elif token in [108]: - localctx = MathExprParser.OverlayFuncContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 1397 - self.match(MathExprParser.OVERLAY) - self.state = 1398 - self.match(MathExprParser.LPAREN) - self.state = 1399 - self.expr() - self.state = 1400 - self.match(MathExprParser.COMMA) - self.state = 1401 - self.expr() - self.state = 1402 - self.match(MathExprParser.COMMA) - self.state = 1403 - self.expr() - self.state = 1406 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1404 - self.match(MathExprParser.COMMA) - self.state = 1405 - self.expr() - - - self.state = 1408 - self.match(MathExprParser.RPAREN) - pass - elif token in [54]: - localctx = MathExprParser.LinspaceFuncContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 1410 - self.match(MathExprParser.LINSPACE) - self.state = 1411 - self.match(MathExprParser.LPAREN) - self.state = 1412 - self.expr() - self.state = 1413 - self.match(MathExprParser.COMMA) - self.state = 1414 - self.expr() - self.state = 1415 - self.match(MathExprParser.COMMA) - self.state = 1416 - self.expr() - self.state = 1417 - self.match(MathExprParser.RPAREN) - pass - elif token in [180]: - localctx = MathExprParser.RollFuncContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 1419 - self.match(MathExprParser.ROLL) - self.state = 1420 - self.match(MathExprParser.LPAREN) - self.state = 1421 - self.expr() - self.state = 1422 - self.match(MathExprParser.COMMA) - self.state = 1423 - self.expr() - self.state = 1426 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1424 - self.match(MathExprParser.COMMA) - self.state = 1425 - self.expr() - - - self.state = 1428 - self.match(MathExprParser.RPAREN) - pass - elif token in [144]: - localctx = MathExprParser.RgbToOklabFuncContext(self, localctx) - self.enterOuterAlt(localctx, 16) - self.state = 1430 - self.match(MathExprParser.RGB_TO_OKLAB) - self.state = 1431 - self.match(MathExprParser.LPAREN) - self.state = 1432 - self.expr() - self.state = 1438 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1433 - self.match(MathExprParser.COMMA) - self.state = 1434 - self.expr() - self.state = 1435 - self.match(MathExprParser.COMMA) - self.state = 1436 - self.expr() - - - self.state = 1440 - self.match(MathExprParser.RPAREN) - pass - elif token in [145]: - localctx = MathExprParser.RgbToCielabFuncContext(self, localctx) - self.enterOuterAlt(localctx, 17) - self.state = 1442 - self.match(MathExprParser.RGB_TO_CIELAB) - self.state = 1443 - self.match(MathExprParser.LPAREN) - self.state = 1444 - self.expr() - self.state = 1450 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1445 - self.match(MathExprParser.COMMA) - self.state = 1446 - self.expr() - self.state = 1447 - self.match(MathExprParser.COMMA) - self.state = 1448 - self.expr() - - - self.state = 1452 - self.match(MathExprParser.RPAREN) - pass - elif token in [148]: - localctx = MathExprParser.RgbToHsvFuncContext(self, localctx) - self.enterOuterAlt(localctx, 18) - self.state = 1454 - self.match(MathExprParser.RGB_TO_HSV) - self.state = 1455 - self.match(MathExprParser.LPAREN) - self.state = 1456 - self.expr() - self.state = 1462 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,72,self._ctx) - if la_ == 1: - self.state = 1457 - self.match(MathExprParser.COMMA) - self.state = 1458 - self.expr() - self.state = 1459 - self.match(MathExprParser.COMMA) - self.state = 1460 - self.expr() - - - self.state = 1466 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1464 - self.match(MathExprParser.COMMA) - self.state = 1465 - self.expr() - - - self.state = 1468 - self.match(MathExprParser.RPAREN) - pass - elif token in [149]: - localctx = MathExprParser.HsvToRgbFuncContext(self, localctx) - self.enterOuterAlt(localctx, 19) - self.state = 1470 - self.match(MathExprParser.HSV_TO_RGB) - self.state = 1471 - self.match(MathExprParser.LPAREN) - self.state = 1472 - self.expr() - self.state = 1478 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,74,self._ctx) - if la_ == 1: - self.state = 1473 - self.match(MathExprParser.COMMA) - self.state = 1474 - self.expr() - self.state = 1475 - self.match(MathExprParser.COMMA) - self.state = 1476 - self.expr() - - - self.state = 1482 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1480 - self.match(MathExprParser.COMMA) - self.state = 1481 - self.expr() - - - self.state = 1484 - self.match(MathExprParser.RPAREN) - pass - elif token in [106]: - localctx = MathExprParser.WhereFuncContext(self, localctx) - self.enterOuterAlt(localctx, 20) - self.state = 1486 - self.match(MathExprParser.WHERE) - self.state = 1487 - self.match(MathExprParser.LPAREN) - self.state = 1488 - self.expr() - self.state = 1489 - self.match(MathExprParser.COMMA) - self.state = 1490 - self.expr() - self.state = 1491 - self.match(MathExprParser.COMMA) - self.state = 1492 - self.expr() - self.state = 1493 - self.match(MathExprParser.RPAREN) - pass - elif token in [146]: - localctx = MathExprParser.OklabToRgbFuncContext(self, localctx) - self.enterOuterAlt(localctx, 21) - self.state = 1495 - self.match(MathExprParser.OKLAB_TO_RGB) - self.state = 1496 - self.match(MathExprParser.LPAREN) - self.state = 1497 - self.expr() - self.state = 1503 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1498 - self.match(MathExprParser.COMMA) - self.state = 1499 - self.expr() - self.state = 1500 - self.match(MathExprParser.COMMA) - self.state = 1501 - self.expr() - - - self.state = 1505 - self.match(MathExprParser.RPAREN) - pass - elif token in [147]: - localctx = MathExprParser.CielabToRgbFuncContext(self, localctx) - self.enterOuterAlt(localctx, 22) - self.state = 1507 - self.match(MathExprParser.CIELAB_TO_RGB) - self.state = 1508 - self.match(MathExprParser.LPAREN) - self.state = 1509 - self.expr() - self.state = 1515 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1510 - self.match(MathExprParser.COMMA) - self.state = 1511 - self.expr() - self.state = 1512 - self.match(MathExprParser.COMMA) - self.state = 1513 - self.expr() - - - self.state = 1517 - self.match(MathExprParser.RPAREN) - pass - elif token in [155]: - localctx = MathExprParser.TextImageFuncContext(self, localctx) - self.enterOuterAlt(localctx, 23) - self.state = 1519 - self.match(MathExprParser.TEXT_IMAGE) - self.state = 1520 - self.match(MathExprParser.LPAREN) - self.state = 1521 - self.expr() - self.state = 1522 - self.match(MathExprParser.COMMA) - self.state = 1523 - self.expr() - self.state = 1524 - self.match(MathExprParser.COMMA) - self.state = 1525 - self.expr() - self.state = 1528 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,78,self._ctx) - if la_ == 1: - self.state = 1526 - self.match(MathExprParser.COMMA) - self.state = 1527 - self.expr() - - - self.state = 1532 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,79,self._ctx) - if la_ == 1: - self.state = 1530 - self.match(MathExprParser.COMMA) - self.state = 1531 - self.expr() - - - self.state = 1536 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,80,self._ctx) - if la_ == 1: - self.state = 1534 - self.match(MathExprParser.COMMA) - self.state = 1535 - self.expr() - - - self.state = 1540 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,81,self._ctx) - if la_ == 1: - self.state = 1538 - self.match(MathExprParser.COMMA) - self.state = 1539 - self.expr() - - - self.state = 1544 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,82,self._ctx) - if la_ == 1: - self.state = 1542 - self.match(MathExprParser.COMMA) - self.state = 1543 - self.expr() - - - self.state = 1548 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1546 - self.match(MathExprParser.COMMA) - self.state = 1547 - self.expr() - - - self.state = 1550 - self.match(MathExprParser.RPAREN) - pass - elif token in [186]: - localctx = MathExprParser.CoordsFuncContext(self, localctx) - self.enterOuterAlt(localctx, 24) - self.state = 1552 - self.match(MathExprParser.COORDS) - self.state = 1553 - self.match(MathExprParser.LPAREN) - self.state = 1554 - self.expr() - self.state = 1555 - self.match(MathExprParser.COMMA) - self.state = 1556 - self.expr() - self.state = 1559 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1557 - self.match(MathExprParser.COMMA) - self.state = 1558 - self.expr() - - - self.state = 1561 - self.match(MathExprParser.RPAREN) - pass - elif token in [187]: - localctx = MathExprParser.GatherFuncContext(self, localctx) - self.enterOuterAlt(localctx, 25) - self.state = 1563 - self.match(MathExprParser.GATHER) - self.state = 1564 - self.match(MathExprParser.LPAREN) - self.state = 1565 - self.expr() - self.state = 1566 - self.match(MathExprParser.COMMA) - self.state = 1567 - self.expr() - self.state = 1568 - self.match(MathExprParser.COMMA) - self.state = 1569 - self.expr() - self.state = 1570 - self.match(MathExprParser.RPAREN) - pass - elif token in [188]: - localctx = MathExprParser.ScatterFuncContext(self, localctx) - self.enterOuterAlt(localctx, 26) - self.state = 1572 - self.match(MathExprParser.SCATTER) - self.state = 1573 - self.match(MathExprParser.LPAREN) - self.state = 1574 - self.expr() - self.state = 1575 - self.match(MathExprParser.COMMA) - self.state = 1576 - self.expr() - self.state = 1577 - self.match(MathExprParser.COMMA) - self.state = 1578 - self.expr() - self.state = 1579 - self.match(MathExprParser.COMMA) - self.state = 1580 - self.expr() - self.state = 1581 - self.match(MathExprParser.RPAREN) - pass - elif token in [189]: - localctx = MathExprParser.ScatterAddFuncContext(self, localctx) - self.enterOuterAlt(localctx, 27) - self.state = 1583 - self.match(MathExprParser.SCATTER_ADD) - self.state = 1584 - self.match(MathExprParser.LPAREN) - self.state = 1585 - self.expr() - self.state = 1586 - self.match(MathExprParser.COMMA) - self.state = 1587 - self.expr() - self.state = 1588 - self.match(MathExprParser.COMMA) - self.state = 1589 - self.expr() - self.state = 1590 - self.match(MathExprParser.COMMA) - self.state = 1591 - self.expr() - self.state = 1592 - self.match(MathExprParser.RPAREN) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class Func4Context(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_func4 - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class DistFuncContext(Func4Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func4Context - super().__init__(parser) - self.copyFrom(ctx) - - def DIST(self): - return self.getToken(MathExprParser.DIST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDistFunc" ): - listener.enterDistFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDistFunc" ): - listener.exitDistFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDistFunc" ): - return visitor.visitDistFunc(self) - else: - return visitor.visitChildren(self) - - - class HistogramFuncContext(Func4Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func4Context - super().__init__(parser) - self.copyFrom(ctx) - - def HISTOGRAM(self): - return self.getToken(MathExprParser.HISTOGRAM, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterHistogramFunc" ): - listener.enterHistogramFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitHistogramFunc" ): - listener.exitHistogramFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitHistogramFunc" ): - return visitor.visitHistogramFunc(self) - else: - return visitor.visitChildren(self) - - - class LogspaceFuncContext(Func4Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func4Context - super().__init__(parser) - self.copyFrom(ctx) - - def LOGSPACE(self): - return self.getToken(MathExprParser.LOGSPACE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLogspaceFunc" ): - listener.enterLogspaceFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLogspaceFunc" ): - listener.exitLogspaceFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLogspaceFunc" ): - return visitor.visitLogspaceFunc(self) - else: - return visitor.visitChildren(self) - - - class NvlFuncContext(Func4Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func4Context - super().__init__(parser) - self.copyFrom(ctx) - - def NVL(self): - return self.getToken(MathExprParser.NVL, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNvlFunc" ): - listener.enterNvlFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNvlFunc" ): - listener.exitNvlFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNvlFunc" ): - return visitor.visitNvlFunc(self) - else: - return visitor.visitChildren(self) - - - class SwapFuncContext(Func4Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func4Context - super().__init__(parser) - self.copyFrom(ctx) - - def SWAP(self): - return self.getToken(MathExprParser.SWAP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSwapFunc" ): - listener.enterSwapFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSwapFunc" ): - listener.exitSwapFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSwapFunc" ): - return visitor.visitSwapFunc(self) - else: - return visitor.visitChildren(self) - - - - def func4(self): - - localctx = MathExprParser.Func4Context(self, self._ctx, self.state) - self.enterRule(localctx, 62, self.RULE_func4) - try: - self.state = 1651 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [49]: - localctx = MathExprParser.SwapFuncContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1596 - self.match(MathExprParser.SWAP) - self.state = 1597 - self.match(MathExprParser.LPAREN) - self.state = 1598 - self.expr() - self.state = 1599 - self.match(MathExprParser.COMMA) - self.state = 1600 - self.expr() - self.state = 1601 - self.match(MathExprParser.COMMA) - self.state = 1602 - self.expr() - self.state = 1603 - self.match(MathExprParser.COMMA) - self.state = 1604 - self.expr() - self.state = 1605 - self.match(MathExprParser.RPAREN) - pass - elif token in [37]: - localctx = MathExprParser.NvlFuncContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1607 - self.match(MathExprParser.NVL) - self.state = 1608 - self.match(MathExprParser.LPAREN) - self.state = 1609 - self.expr() - self.state = 1610 - self.match(MathExprParser.COMMA) - self.state = 1611 - self.expr() - self.state = 1612 - self.match(MathExprParser.COMMA) - self.state = 1613 - self.expr() - self.state = 1614 - self.match(MathExprParser.COMMA) - self.state = 1615 - self.expr() - self.state = 1616 - self.match(MathExprParser.RPAREN) - pass - elif token in [55]: - localctx = MathExprParser.LogspaceFuncContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1618 - self.match(MathExprParser.LOGSPACE) - self.state = 1619 - self.match(MathExprParser.LPAREN) - self.state = 1620 - self.expr() - self.state = 1621 - self.match(MathExprParser.COMMA) - self.state = 1622 - self.expr() - self.state = 1623 - self.match(MathExprParser.COMMA) - self.state = 1624 - self.expr() - self.state = 1625 - self.match(MathExprParser.COMMA) - self.state = 1626 - self.expr() - self.state = 1627 - self.match(MathExprParser.RPAREN) - pass - elif token in [84]: - localctx = MathExprParser.DistFuncContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 1629 - self.match(MathExprParser.DIST) - self.state = 1630 - self.match(MathExprParser.LPAREN) - self.state = 1631 - self.expr() - self.state = 1632 - self.match(MathExprParser.COMMA) - self.state = 1633 - self.expr() - self.state = 1634 - self.match(MathExprParser.COMMA) - self.state = 1635 - self.expr() - self.state = 1636 - self.match(MathExprParser.COMMA) - self.state = 1637 - self.expr() - self.state = 1638 - self.match(MathExprParser.RPAREN) - pass - elif token in [107]: - localctx = MathExprParser.HistogramFuncContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 1640 - self.match(MathExprParser.HISTOGRAM) - self.state = 1641 - self.match(MathExprParser.LPAREN) - self.state = 1642 - self.expr() - self.state = 1643 - self.match(MathExprParser.COMMA) - self.state = 1644 - self.expr() - self.state = 1645 - self.match(MathExprParser.COMMA) - self.state = 1646 - self.expr() - self.state = 1647 - self.match(MathExprParser.COMMA) - self.state = 1648 - self.expr() - self.state = 1649 - self.match(MathExprParser.RPAREN) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class Func5Context(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_func5 - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class DiagonalMatrixFuncContext(Func5Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func5Context - super().__init__(parser) - self.copyFrom(ctx) - - def DIAG(self): - return self.getToken(MathExprParser.DIAG, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDiagonalMatrixFunc" ): - listener.enterDiagonalMatrixFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDiagonalMatrixFunc" ): - listener.exitDiagonalMatrixFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDiagonalMatrixFunc" ): - return visitor.visitDiagonalMatrixFunc(self) - else: - return visitor.visitChildren(self) - - - class RemapFuncContext(Func5Context): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func5Context - super().__init__(parser) - self.copyFrom(ctx) - - def REMAP(self): - return self.getToken(MathExprParser.REMAP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRemapFunc" ): - listener.enterRemapFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRemapFunc" ): - listener.exitRemapFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRemapFunc" ): - return visitor.visitRemapFunc(self) - else: - return visitor.visitChildren(self) - - - - def func5(self): - - localctx = MathExprParser.Func5Context(self, self._ctx, self.state) - self.enterRule(localctx, 64, self.RULE_func5) - self._la = 0 # Token type - try: - self.state = 1685 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [85]: - localctx = MathExprParser.RemapFuncContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1653 - self.match(MathExprParser.REMAP) - self.state = 1654 - self.match(MathExprParser.LPAREN) - self.state = 1655 - self.expr() - self.state = 1656 - self.match(MathExprParser.COMMA) - self.state = 1657 - self.expr() - self.state = 1658 - self.match(MathExprParser.COMMA) - self.state = 1659 - self.expr() - self.state = 1660 - self.match(MathExprParser.COMMA) - self.state = 1661 - self.expr() - self.state = 1662 - self.match(MathExprParser.COMMA) - self.state = 1663 - self.expr() - self.state = 1664 - self.match(MathExprParser.RPAREN) - pass - elif token in [158]: - localctx = MathExprParser.DiagonalMatrixFuncContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1666 - self.match(MathExprParser.DIAG) - self.state = 1667 - self.match(MathExprParser.LPAREN) - self.state = 1668 - self.expr() - self.state = 1669 - self.match(MathExprParser.COMMA) - self.state = 1670 - self.expr() - self.state = 1681 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1671 - self.match(MathExprParser.COMMA) - self.state = 1672 - self.expr() - self.state = 1679 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1673 - self.match(MathExprParser.COMMA) - self.state = 1674 - self.expr() - self.state = 1677 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1675 - self.match(MathExprParser.COMMA) - self.state = 1676 - self.expr() - - - - - - - self.state = 1683 - self.match(MathExprParser.RPAREN) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class FuncNContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_funcN - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class NonzeroFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def NONZERO(self): - return self.getToken(MathExprParser.NONZERO, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNonzeroFunc" ): - listener.enterNonzeroFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNonzeroFunc" ): - listener.exitNonzeroFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNonzeroFunc" ): - return visitor.visitNonzeroFunc(self) - else: - return visitor.visitChildren(self) - - - class ConcatFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def CONCAT(self): - return self.getToken(MathExprParser.CONCAT, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterConcatFunc" ): - listener.enterConcatFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitConcatFunc" ): - listener.exitConcatFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitConcatFunc" ): - return visitor.visitConcatFunc(self) - else: - return visitor.visitChildren(self) - - - class SqueezeFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def SQUEEZE(self): - return self.getToken(MathExprParser.SQUEEZE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSqueezeFunc" ): - listener.enterSqueezeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSqueezeFunc" ): - listener.exitSqueezeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSqueezeFunc" ): - return visitor.visitSqueezeFunc(self) - else: - return visitor.visitChildren(self) - - - class StackFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def STACK(self): - return self.getToken(MathExprParser.STACK, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStackFunc" ): - listener.enterStackFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStackFunc" ): - listener.exitStackFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStackFunc" ): - return visitor.visitStackFunc(self) - else: - return visitor.visitChildren(self) - - - class GetRemovedKeysFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def GET_REMOVED_KEYS(self): - return self.getToken(MathExprParser.GET_REMOVED_KEYS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGetRemovedKeysFunc" ): - listener.enterGetRemovedKeysFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGetRemovedKeysFunc" ): - listener.exitGetRemovedKeysFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGetRemovedKeysFunc" ): - return visitor.visitGetRemovedKeysFunc(self) - else: - return visitor.visitChildren(self) - - - class EzConvFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def EZCONV(self): - return self.getToken(MathExprParser.EZCONV, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterEzConvFunc" ): - listener.enterEzConvFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitEzConvFunc" ): - listener.exitEzConvFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitEzConvFunc" ): - return visitor.visitEzConvFunc(self) - else: - return visitor.visitChildren(self) - - - class ReshapeFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def RESHAPE(self): - return self.getToken(MathExprParser.RESHAPE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterReshapeFunc" ): - listener.enterReshapeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitReshapeFunc" ): - listener.exitReshapeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitReshapeFunc" ): - return visitor.visitReshapeFunc(self) - else: - return visitor.visitChildren(self) - - - class ConvFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def CONV(self): - return self.getToken(MathExprParser.CONV, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterConvFunc" ): - listener.enterConvFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitConvFunc" ): - listener.exitConvFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitConvFunc" ): - return visitor.visitConvFunc(self) - else: - return visitor.visitChildren(self) - - - class SMaxFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def SMAX(self): - return self.getToken(MathExprParser.SMAX, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSMaxFunc" ): - listener.enterSMaxFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSMaxFunc" ): - listener.exitSMaxFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSMaxFunc" ): - return visitor.visitSMaxFunc(self) - else: - return visitor.visitChildren(self) - - - class MapFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def MAP(self): - return self.getToken(MathExprParser.MAP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMapFunc" ): - listener.enterMapFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMapFunc" ): - listener.exitMapFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMapFunc" ): - return visitor.visitMapFunc(self) - else: - return visitor.visitChildren(self) - - - class GetUnchangedKeysFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def GET_UNCHANGED_KEYS(self): - return self.getToken(MathExprParser.GET_UNCHANGED_KEYS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGetUnchangedKeysFunc" ): - listener.enterGetUnchangedKeysFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGetUnchangedKeysFunc" ): - listener.exitGetUnchangedKeysFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGetUnchangedKeysFunc" ): - return visitor.visitGetUnchangedKeysFunc(self) - else: - return visitor.visitChildren(self) - - - class GetAddedKeysFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def GET_ADDED_KEYS(self): - return self.getToken(MathExprParser.GET_ADDED_KEYS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGetAddedKeysFunc" ): - listener.enterGetAddedKeysFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGetAddedKeysFunc" ): - listener.exitGetAddedKeysFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGetAddedKeysFunc" ): - return visitor.visitGetAddedKeysFunc(self) - else: - return visitor.visitChildren(self) - - - class UnsqueezeFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def UNSQUEEZE(self): - return self.getToken(MathExprParser.UNSQUEEZE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterUnsqueezeFunc" ): - listener.enterUnsqueezeFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitUnsqueezeFunc" ): - listener.exitUnsqueezeFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitUnsqueezeFunc" ): - return visitor.visitUnsqueezeFunc(self) - else: - return visitor.visitChildren(self) - - - class GetChangedKeysFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def GET_CHANGED_KEYS(self): - return self.getToken(MathExprParser.GET_CHANGED_KEYS, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self): - return self.getTypedRuleContext(MathExprParser.ExprContext,0) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGetChangedKeysFunc" ): - listener.enterGetChangedKeysFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGetChangedKeysFunc" ): - listener.exitGetChangedKeysFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGetChangedKeysFunc" ): - return visitor.visitGetChangedKeysFunc(self) - else: - return visitor.visitChildren(self) - - - class SMinFuncContext(FuncNContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext - super().__init__(parser) - self.copyFrom(ctx) - - def SMIN(self): - return self.getToken(MathExprParser.SMIN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterSMinFunc" ): - listener.enterSMinFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitSMinFunc" ): - listener.exitSMinFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitSMinFunc" ): - return visitor.visitSMinFunc(self) - else: - return visitor.visitChildren(self) - - - - def funcN(self): - - localctx = MathExprParser.FuncNContext(self, self._ctx, self.state) - self.enterRule(localctx, 66, self.RULE_funcN) - self._la = 0 # Token type - try: - self.state = 1816 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [19]: - localctx = MathExprParser.SMinFuncContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1687 - self.match(MathExprParser.SMIN) - self.state = 1688 - self.match(MathExprParser.LPAREN) - self.state = 1689 - self.expr() - self.state = 1694 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==232: - self.state = 1690 - self.match(MathExprParser.COMMA) - self.state = 1691 - self.expr() - self.state = 1696 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1697 - self.match(MathExprParser.RPAREN) - pass - elif token in [20]: - localctx = MathExprParser.SMaxFuncContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1699 - self.match(MathExprParser.SMAX) - self.state = 1700 - self.match(MathExprParser.LPAREN) - self.state = 1701 - self.expr() - self.state = 1706 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la==232: - self.state = 1702 - self.match(MathExprParser.COMMA) - self.state = 1703 - self.expr() - self.state = 1708 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 1709 - self.match(MathExprParser.RPAREN) - pass - elif token in [46]: - localctx = MathExprParser.MapFuncContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1711 - self.match(MathExprParser.MAP) - self.state = 1712 - self.match(MathExprParser.LPAREN) - self.state = 1713 - self.expr() - self.state = 1714 - self.match(MathExprParser.COMMA) - self.state = 1715 - self.expr() - self.state = 1722 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1716 - self.match(MathExprParser.COMMA) - self.state = 1717 - self.expr() - self.state = 1720 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1718 - self.match(MathExprParser.COMMA) - self.state = 1719 - self.expr() - - - - - self.state = 1724 - self.match(MathExprParser.RPAREN) - pass - elif token in [47]: - localctx = MathExprParser.EzConvFuncContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 1726 - self.match(MathExprParser.EZCONV) - self.state = 1727 - self.match(MathExprParser.LPAREN) - self.state = 1728 - self.expr() - self.state = 1731 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 1729 - self.match(MathExprParser.COMMA) - self.state = 1730 - self.expr() - self.state = 1733 - self._errHandler.sync(self) - _la = self._input.LA(1) - if not (_la==232): - break - - self.state = 1735 - self.match(MathExprParser.RPAREN) - pass - elif token in [48]: - localctx = MathExprParser.ConvFuncContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 1737 - self.match(MathExprParser.CONV) - self.state = 1738 - self.match(MathExprParser.LPAREN) - self.state = 1739 - self.expr() - self.state = 1742 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 1740 - self.match(MathExprParser.COMMA) - self.state = 1741 - self.expr() - self.state = 1744 - self._errHandler.sync(self) - _la = self._input.LA(1) - if not (_la==232): - break - - self.state = 1746 - self.match(MathExprParser.RPAREN) - pass - elif token in [52]: - localctx = MathExprParser.ReshapeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 1748 - self.match(MathExprParser.RESHAPE) - self.state = 1749 - self.match(MathExprParser.LPAREN) - self.state = 1750 - self.expr() - self.state = 1751 - self.match(MathExprParser.COMMA) - self.state = 1752 - self.expr() - self.state = 1753 - self.match(MathExprParser.RPAREN) - pass - elif token in [178]: - localctx = MathExprParser.SqueezeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 1755 - self.match(MathExprParser.SQUEEZE) - self.state = 1756 - self.match(MathExprParser.LPAREN) - self.state = 1757 - self.expr() - self.state = 1760 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1758 - self.match(MathExprParser.COMMA) - self.state = 1759 - self.expr() - - - self.state = 1762 - self.match(MathExprParser.RPAREN) - pass - elif token in [179]: - localctx = MathExprParser.UnsqueezeFuncContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 1764 - self.match(MathExprParser.UNSQUEEZE) - self.state = 1765 - self.match(MathExprParser.LPAREN) - self.state = 1766 - self.expr() - self.state = 1767 - self.match(MathExprParser.COMMA) - self.state = 1768 - self.expr() - self.state = 1769 - self.match(MathExprParser.RPAREN) - pass - elif token in [127]: - localctx = MathExprParser.ConcatFuncContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 1771 - self.match(MathExprParser.CONCAT) - self.state = 1772 - self.match(MathExprParser.LPAREN) - self.state = 1773 - self.expr() - self.state = 1776 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 1774 - self.match(MathExprParser.COMMA) - self.state = 1775 - self.expr() - self.state = 1778 - self._errHandler.sync(self) - _la = self._input.LA(1) - if not (_la==232): - break - - self.state = 1780 - self.match(MathExprParser.RPAREN) - pass - elif token in [128]: - localctx = MathExprParser.StackFuncContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 1782 - self.match(MathExprParser.STACK) - self.state = 1783 - self.match(MathExprParser.LPAREN) - self.state = 1784 - self.expr() - self.state = 1787 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1785 - self.match(MathExprParser.COMMA) - self.state = 1786 - self.expr() - - - self.state = 1789 - self.match(MathExprParser.RPAREN) - pass - elif token in [129]: - localctx = MathExprParser.NonzeroFuncContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 1791 - self.match(MathExprParser.NONZERO) - self.state = 1792 - self.match(MathExprParser.LPAREN) - self.state = 1793 - self.expr() - self.state = 1794 - self.match(MathExprParser.RPAREN) - pass - elif token in [92]: - localctx = MathExprParser.GetChangedKeysFuncContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 1796 - self.match(MathExprParser.GET_CHANGED_KEYS) - self.state = 1797 - self.match(MathExprParser.LPAREN) - self.state = 1798 - self.expr() - self.state = 1799 - self.match(MathExprParser.RPAREN) - pass - elif token in [93]: - localctx = MathExprParser.GetAddedKeysFuncContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 1801 - self.match(MathExprParser.GET_ADDED_KEYS) - self.state = 1802 - self.match(MathExprParser.LPAREN) - self.state = 1803 - self.expr() - self.state = 1804 - self.match(MathExprParser.RPAREN) - pass - elif token in [94]: - localctx = MathExprParser.GetRemovedKeysFuncContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 1806 - self.match(MathExprParser.GET_REMOVED_KEYS) - self.state = 1807 - self.match(MathExprParser.LPAREN) - self.state = 1808 - self.expr() - self.state = 1809 - self.match(MathExprParser.RPAREN) - pass - elif token in [95]: - localctx = MathExprParser.GetUnchangedKeysFuncContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 1811 - self.match(MathExprParser.GET_UNCHANGED_KEYS) - self.state = 1812 - self.match(MathExprParser.LPAREN) - self.state = 1813 - self.expr() - self.state = 1814 - self.match(MathExprParser.RPAREN) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class FuncNoiseContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - - def getRuleIndex(self): - return MathExprParser.RULE_funcNoise - - - def copyFrom(self, ctx:ParserRuleContext): - super().copyFrom(ctx) - - - - class ExponentialFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def EXPONENTIAL(self): - return self.getToken(MathExprParser.EXPONENTIAL, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterExponentialFunc" ): - listener.enterExponentialFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitExponentialFunc" ): - listener.exitExponentialFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitExponentialFunc" ): - return visitor.visitExponentialFunc(self) - else: - return visitor.visitChildren(self) - - - class PoissonFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def POISSON(self): - return self.getToken(MathExprParser.POISSON, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPoissonFunc" ): - listener.enterPoissonFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPoissonFunc" ): - listener.exitPoissonFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPoissonFunc" ): - return visitor.visitPoissonFunc(self) - else: - return visitor.visitChildren(self) - - - class LaplaceDistFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def LAPLACEDIST(self): - return self.getToken(MathExprParser.LAPLACEDIST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLaplaceDistFunc" ): - listener.enterLaplaceDistFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLaplaceDistFunc" ): - listener.exitLaplaceDistFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLaplaceDistFunc" ): - return visitor.visitLaplaceDistFunc(self) - else: - return visitor.visitChildren(self) - - - class CellularFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def CELLULAR(self): - return self.getToken(MathExprParser.CELLULAR, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCellularFunc" ): - listener.enterCellularFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCellularFunc" ): - listener.exitCellularFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCellularFunc" ): - return visitor.visitCellularFunc(self) - else: - return visitor.visitChildren(self) - - - class NoiseFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def NOISE(self): - return self.getToken(MathExprParser.NOISE, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterNoiseFunc" ): - listener.enterNoiseFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitNoiseFunc" ): - listener.exitNoiseFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitNoiseFunc" ): - return visitor.visitNoiseFunc(self) - else: - return visitor.visitChildren(self) - - - class BetaDistFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def BETADIST(self): - return self.getToken(MathExprParser.BETADIST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBetaDistFunc" ): - listener.enterBetaDistFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBetaDistFunc" ): - listener.exitBetaDistFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBetaDistFunc" ): - return visitor.visitBetaDistFunc(self) - else: - return visitor.visitChildren(self) - - - class BernoulliFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def BERNOULLI(self): - return self.getToken(MathExprParser.BERNOULLI, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBernoulliFunc" ): - listener.enterBernoulliFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBernoulliFunc" ): - listener.exitBernoulliFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBernoulliFunc" ): - return visitor.visitBernoulliFunc(self) - else: - return visitor.visitChildren(self) - - - class GammaDistFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def GAMMADIST(self): - return self.getToken(MathExprParser.GAMMADIST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGammaDistFunc" ): - listener.enterGammaDistFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGammaDistFunc" ): - listener.exitGammaDistFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGammaDistFunc" ): - return visitor.visitGammaDistFunc(self) - else: - return visitor.visitChildren(self) - - - class WeibullDistFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def WEIBULLDIST(self): - return self.getToken(MathExprParser.WEIBULLDIST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterWeibullDistFunc" ): - listener.enterWeibullDistFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitWeibullDistFunc" ): - listener.exitWeibullDistFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitWeibullDistFunc" ): - return visitor.visitWeibullDistFunc(self) - else: - return visitor.visitChildren(self) - - - class LogNormalFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def LOGNORMAL(self): - return self.getToken(MathExprParser.LOGNORMAL, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterLogNormalFunc" ): - listener.enterLogNormalFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitLogNormalFunc" ): - listener.exitLogNormalFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitLogNormalFunc" ): - return visitor.visitLogNormalFunc(self) - else: - return visitor.visitChildren(self) - - - class PerlinFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def PERLIN(self): - return self.getToken(MathExprParser.PERLIN, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPerlinFunc" ): - listener.enterPerlinFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPerlinFunc" ): - listener.exitPerlinFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPerlinFunc" ): - return visitor.visitPerlinFunc(self) - else: - return visitor.visitChildren(self) - - - class PlasmaFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def PLASMA(self): - return self.getToken(MathExprParser.PLASMA, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPlasmaFunc" ): - listener.enterPlasmaFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPlasmaFunc" ): - listener.exitPlasmaFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitPlasmaFunc" ): - return visitor.visitPlasmaFunc(self) - else: - return visitor.visitChildren(self) - - - class DomainWarpFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def DOMAIN_WARP(self): - return self.getToken(MathExprParser.DOMAIN_WARP, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterDomainWarpFunc" ): - listener.enterDomainWarpFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitDomainWarpFunc" ): - listener.exitDomainWarpFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitDomainWarpFunc" ): - return visitor.visitDomainWarpFunc(self) - else: - return visitor.visitChildren(self) - - - class RidgedFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def RIDGED(self): - return self.getToken(MathExprParser.RIDGED, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRidgedFunc" ): - listener.enterRidgedFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRidgedFunc" ): - listener.exitRidgedFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRidgedFunc" ): - return visitor.visitRidgedFunc(self) - else: - return visitor.visitChildren(self) - - - class GumbelDistFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def GUMBELDIST(self): - return self.getToken(MathExprParser.GUMBELDIST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterGumbelDistFunc" ): - listener.enterGumbelDistFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitGumbelDistFunc" ): - listener.exitGumbelDistFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitGumbelDistFunc" ): - return visitor.visitGumbelDistFunc(self) - else: - return visitor.visitChildren(self) - - - class CauchyFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def CAUCHY(self): - return self.getToken(MathExprParser.CAUCHY, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterCauchyFunc" ): - listener.enterCauchyFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitCauchyFunc" ): - listener.exitCauchyFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitCauchyFunc" ): - return visitor.visitCauchyFunc(self) - else: - return visitor.visitChildren(self) - - - class StudentTDistFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def STUDENTTDIST(self): - return self.getToken(MathExprParser.STUDENTTDIST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterStudentTDistFunc" ): - listener.enterStudentTDistFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitStudentTDistFunc" ): - listener.exitStudentTDistFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitStudentTDistFunc" ): - return visitor.visitStudentTDistFunc(self) - else: - return visitor.visitChildren(self) - - - class Chi2DistFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def CHI2DIST(self): - return self.getToken(MathExprParser.CHI2DIST, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def COMMA(self, i:int=None): - if i is None: - return self.getTokens(MathExprParser.COMMA) - else: - return self.getToken(MathExprParser.COMMA, i) - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterChi2DistFunc" ): - listener.enterChi2DistFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitChi2DistFunc" ): - listener.exitChi2DistFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitChi2DistFunc" ): - return visitor.visitChi2DistFunc(self) - else: - return visitor.visitChildren(self) - - - class RandFuncContext(FuncNoiseContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNoiseContext - super().__init__(parser) - self.copyFrom(ctx) - - def RAND(self): - return self.getToken(MathExprParser.RAND, 0) - def LPAREN(self): - return self.getToken(MathExprParser.LPAREN, 0) - def expr(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(MathExprParser.ExprContext) - else: - return self.getTypedRuleContext(MathExprParser.ExprContext,i) - - def RPAREN(self): - return self.getToken(MathExprParser.RPAREN, 0) - def COMMA(self): - return self.getToken(MathExprParser.COMMA, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterRandFunc" ): - listener.enterRandFunc(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitRandFunc" ): - listener.exitRandFunc(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitRandFunc" ): - return visitor.visitRandFunc(self) - else: - return visitor.visitChildren(self) - - - - def funcNoise(self): - - localctx = MathExprParser.FuncNoiseContext(self, self._ctx, self.state) - self.enterRule(localctx, 68, self.RULE_funcNoise) - self._la = 0 # Token type - try: - self.state = 2085 - self._errHandler.sync(self) - token = self._input.LA(1) - if token in [190]: - localctx = MathExprParser.NoiseFuncContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 1818 - self.match(MathExprParser.NOISE) - self.state = 1819 - self.match(MathExprParser.LPAREN) - self.state = 1820 - self.expr() - self.state = 1823 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1821 - self.match(MathExprParser.COMMA) - self.state = 1822 - self.expr() - - - self.state = 1825 - self.match(MathExprParser.RPAREN) - pass - elif token in [191]: - localctx = MathExprParser.RandFuncContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 1827 - self.match(MathExprParser.RAND) - self.state = 1828 - self.match(MathExprParser.LPAREN) - self.state = 1829 - self.expr() - self.state = 1832 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1830 - self.match(MathExprParser.COMMA) - self.state = 1831 - self.expr() - - - self.state = 1834 - self.match(MathExprParser.RPAREN) - pass - elif token in [193]: - localctx = MathExprParser.ExponentialFuncContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 1836 - self.match(MathExprParser.EXPONENTIAL) - self.state = 1837 - self.match(MathExprParser.LPAREN) - self.state = 1838 - self.expr() - self.state = 1839 - self.match(MathExprParser.COMMA) - self.state = 1840 - self.expr() - self.state = 1843 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1841 - self.match(MathExprParser.COMMA) - self.state = 1842 - self.expr() - - - self.state = 1845 - self.match(MathExprParser.RPAREN) - pass - elif token in [195]: - localctx = MathExprParser.BernoulliFuncContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 1847 - self.match(MathExprParser.BERNOULLI) - self.state = 1848 - self.match(MathExprParser.LPAREN) - self.state = 1849 - self.expr() - self.state = 1850 - self.match(MathExprParser.COMMA) - self.state = 1851 - self.expr() - self.state = 1854 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1852 - self.match(MathExprParser.COMMA) - self.state = 1853 - self.expr() - - - self.state = 1856 - self.match(MathExprParser.RPAREN) - pass - elif token in [196]: - localctx = MathExprParser.PoissonFuncContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 1858 - self.match(MathExprParser.POISSON) - self.state = 1859 - self.match(MathExprParser.LPAREN) - self.state = 1860 - self.expr() - self.state = 1861 - self.match(MathExprParser.COMMA) - self.state = 1862 - self.expr() - self.state = 1865 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1863 - self.match(MathExprParser.COMMA) - self.state = 1864 - self.expr() - - - self.state = 1867 - self.match(MathExprParser.RPAREN) - pass - elif token in [192]: - localctx = MathExprParser.CauchyFuncContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 1869 - self.match(MathExprParser.CAUCHY) - self.state = 1870 - self.match(MathExprParser.LPAREN) - self.state = 1871 - self.expr() - self.state = 1872 - self.match(MathExprParser.COMMA) - self.state = 1873 - self.expr() - self.state = 1874 - self.match(MathExprParser.COMMA) - self.state = 1875 - self.expr() - self.state = 1878 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1876 - self.match(MathExprParser.COMMA) - self.state = 1877 - self.expr() - - - self.state = 1880 - self.match(MathExprParser.RPAREN) - pass - elif token in [194]: - localctx = MathExprParser.LogNormalFuncContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 1882 - self.match(MathExprParser.LOGNORMAL) - self.state = 1883 - self.match(MathExprParser.LPAREN) - self.state = 1884 - self.expr() - self.state = 1885 - self.match(MathExprParser.COMMA) - self.state = 1886 - self.expr() - self.state = 1887 - self.match(MathExprParser.COMMA) - self.state = 1888 - self.expr() - self.state = 1891 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1889 - self.match(MathExprParser.COMMA) - self.state = 1890 - self.expr() - - - self.state = 1893 - self.match(MathExprParser.RPAREN) - pass - elif token in [197]: - localctx = MathExprParser.GammaDistFuncContext(self, localctx) - self.enterOuterAlt(localctx, 8) - self.state = 1895 - self.match(MathExprParser.GAMMADIST) - self.state = 1896 - self.match(MathExprParser.LPAREN) - self.state = 1897 - self.expr() - self.state = 1898 - self.match(MathExprParser.COMMA) - self.state = 1899 - self.expr() - self.state = 1900 - self.match(MathExprParser.COMMA) - self.state = 1901 - self.expr() - self.state = 1904 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1902 - self.match(MathExprParser.COMMA) - self.state = 1903 - self.expr() - - - self.state = 1906 - self.match(MathExprParser.RPAREN) - pass - elif token in [198]: - localctx = MathExprParser.BetaDistFuncContext(self, localctx) - self.enterOuterAlt(localctx, 9) - self.state = 1908 - self.match(MathExprParser.BETADIST) - self.state = 1909 - self.match(MathExprParser.LPAREN) - self.state = 1910 - self.expr() - self.state = 1911 - self.match(MathExprParser.COMMA) - self.state = 1912 - self.expr() - self.state = 1913 - self.match(MathExprParser.COMMA) - self.state = 1914 - self.expr() - self.state = 1917 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1915 - self.match(MathExprParser.COMMA) - self.state = 1916 - self.expr() - - - self.state = 1919 - self.match(MathExprParser.RPAREN) - pass - elif token in [199]: - localctx = MathExprParser.LaplaceDistFuncContext(self, localctx) - self.enterOuterAlt(localctx, 10) - self.state = 1921 - self.match(MathExprParser.LAPLACEDIST) - self.state = 1922 - self.match(MathExprParser.LPAREN) - self.state = 1923 - self.expr() - self.state = 1924 - self.match(MathExprParser.COMMA) - self.state = 1925 - self.expr() - self.state = 1926 - self.match(MathExprParser.COMMA) - self.state = 1927 - self.expr() - self.state = 1930 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1928 - self.match(MathExprParser.COMMA) - self.state = 1929 - self.expr() - - - self.state = 1932 - self.match(MathExprParser.RPAREN) - pass - elif token in [200]: - localctx = MathExprParser.GumbelDistFuncContext(self, localctx) - self.enterOuterAlt(localctx, 11) - self.state = 1934 - self.match(MathExprParser.GUMBELDIST) - self.state = 1935 - self.match(MathExprParser.LPAREN) - self.state = 1936 - self.expr() - self.state = 1937 - self.match(MathExprParser.COMMA) - self.state = 1938 - self.expr() - self.state = 1939 - self.match(MathExprParser.COMMA) - self.state = 1940 - self.expr() - self.state = 1943 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1941 - self.match(MathExprParser.COMMA) - self.state = 1942 - self.expr() - - - self.state = 1945 - self.match(MathExprParser.RPAREN) - pass - elif token in [201]: - localctx = MathExprParser.WeibullDistFuncContext(self, localctx) - self.enterOuterAlt(localctx, 12) - self.state = 1947 - self.match(MathExprParser.WEIBULLDIST) - self.state = 1948 - self.match(MathExprParser.LPAREN) - self.state = 1949 - self.expr() - self.state = 1950 - self.match(MathExprParser.COMMA) - self.state = 1951 - self.expr() - self.state = 1952 - self.match(MathExprParser.COMMA) - self.state = 1953 - self.expr() - self.state = 1956 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1954 - self.match(MathExprParser.COMMA) - self.state = 1955 - self.expr() - - - self.state = 1958 - self.match(MathExprParser.RPAREN) - pass - elif token in [202]: - localctx = MathExprParser.Chi2DistFuncContext(self, localctx) - self.enterOuterAlt(localctx, 13) - self.state = 1960 - self.match(MathExprParser.CHI2DIST) - self.state = 1961 - self.match(MathExprParser.LPAREN) - self.state = 1962 - self.expr() - self.state = 1963 - self.match(MathExprParser.COMMA) - self.state = 1964 - self.expr() - self.state = 1967 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1965 - self.match(MathExprParser.COMMA) - self.state = 1966 - self.expr() - - - self.state = 1969 - self.match(MathExprParser.RPAREN) - pass - elif token in [203]: - localctx = MathExprParser.StudentTDistFuncContext(self, localctx) - self.enterOuterAlt(localctx, 14) - self.state = 1971 - self.match(MathExprParser.STUDENTTDIST) - self.state = 1972 - self.match(MathExprParser.LPAREN) - self.state = 1973 - self.expr() - self.state = 1974 - self.match(MathExprParser.COMMA) - self.state = 1975 - self.expr() - self.state = 1978 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1976 - self.match(MathExprParser.COMMA) - self.state = 1977 - self.expr() - - - self.state = 1980 - self.match(MathExprParser.RPAREN) - pass - elif token in [204]: - localctx = MathExprParser.PerlinFuncContext(self, localctx) - self.enterOuterAlt(localctx, 15) - self.state = 1982 - self.match(MathExprParser.PERLIN) - self.state = 1983 - self.match(MathExprParser.LPAREN) - self.state = 1984 - self.expr() - self.state = 1985 - self.match(MathExprParser.COMMA) - self.state = 1986 - self.expr() - self.state = 1989 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,115,self._ctx) - if la_ == 1: - self.state = 1987 - self.match(MathExprParser.COMMA) - self.state = 1988 - self.expr() - - - self.state = 1993 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,116,self._ctx) - if la_ == 1: - self.state = 1991 - self.match(MathExprParser.COMMA) - self.state = 1992 - self.expr() - - - self.state = 1997 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 1995 - self.match(MathExprParser.COMMA) - self.state = 1996 - self.expr() - - - self.state = 1999 - self.match(MathExprParser.RPAREN) - pass - elif token in [205]: - localctx = MathExprParser.CellularFuncContext(self, localctx) - self.enterOuterAlt(localctx, 16) - self.state = 2001 - self.match(MathExprParser.CELLULAR) - self.state = 2002 - self.match(MathExprParser.LPAREN) - self.state = 2003 - self.expr() - self.state = 2004 - self.match(MathExprParser.COMMA) - self.state = 2005 - self.expr() - self.state = 2008 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,118,self._ctx) - if la_ == 1: - self.state = 2006 - self.match(MathExprParser.COMMA) - self.state = 2007 - self.expr() - - - self.state = 2012 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,119,self._ctx) - if la_ == 1: - self.state = 2010 - self.match(MathExprParser.COMMA) - self.state = 2011 - self.expr() - - - self.state = 2016 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 2014 - self.match(MathExprParser.COMMA) - self.state = 2015 - self.expr() - - - self.state = 2018 - self.match(MathExprParser.RPAREN) - pass - elif token in [206]: - localctx = MathExprParser.PlasmaFuncContext(self, localctx) - self.enterOuterAlt(localctx, 17) - self.state = 2020 - self.match(MathExprParser.PLASMA) - self.state = 2021 - self.match(MathExprParser.LPAREN) - self.state = 2022 - self.expr() - self.state = 2023 - self.match(MathExprParser.COMMA) - self.state = 2024 - self.expr() - self.state = 2027 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,121,self._ctx) - if la_ == 1: - self.state = 2025 - self.match(MathExprParser.COMMA) - self.state = 2026 - self.expr() - - - self.state = 2031 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,122,self._ctx) - if la_ == 1: - self.state = 2029 - self.match(MathExprParser.COMMA) - self.state = 2030 - self.expr() - - - self.state = 2035 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 2033 - self.match(MathExprParser.COMMA) - self.state = 2034 - self.expr() - - - self.state = 2037 - self.match(MathExprParser.RPAREN) - pass - elif token in [207]: - localctx = MathExprParser.RidgedFuncContext(self, localctx) - self.enterOuterAlt(localctx, 18) - self.state = 2039 - self.match(MathExprParser.RIDGED) - self.state = 2040 - self.match(MathExprParser.LPAREN) - self.state = 2041 - self.expr() - self.state = 2042 - self.match(MathExprParser.COMMA) - self.state = 2043 - self.expr() - self.state = 2046 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,124,self._ctx) - if la_ == 1: - self.state = 2044 - self.match(MathExprParser.COMMA) - self.state = 2045 - self.expr() - - - self.state = 2050 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,125,self._ctx) - if la_ == 1: - self.state = 2048 - self.match(MathExprParser.COMMA) - self.state = 2049 - self.expr() - - - self.state = 2054 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 2052 - self.match(MathExprParser.COMMA) - self.state = 2053 - self.expr() - - - self.state = 2056 - self.match(MathExprParser.RPAREN) - pass - elif token in [208]: - localctx = MathExprParser.DomainWarpFuncContext(self, localctx) - self.enterOuterAlt(localctx, 19) - self.state = 2058 - self.match(MathExprParser.DOMAIN_WARP) - self.state = 2059 - self.match(MathExprParser.LPAREN) - self.state = 2060 - self.expr() - self.state = 2061 - self.match(MathExprParser.COMMA) - self.state = 2062 - self.expr() - self.state = 2063 - self.match(MathExprParser.COMMA) - self.state = 2064 - self.expr() - self.state = 2065 - self.match(MathExprParser.COMMA) - self.state = 2066 - self.expr() - self.state = 2069 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,127,self._ctx) - if la_ == 1: - self.state = 2067 - self.match(MathExprParser.COMMA) - self.state = 2068 - self.expr() - - - self.state = 2073 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,128,self._ctx) - if la_ == 1: - self.state = 2071 - self.match(MathExprParser.COMMA) - self.state = 2072 - self.expr() - - - self.state = 2077 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,129,self._ctx) - if la_ == 1: - self.state = 2075 - self.match(MathExprParser.COMMA) - self.state = 2076 - self.expr() - - - self.state = 2081 - self._errHandler.sync(self) - _la = self._input.LA(1) - if _la==232: - self.state = 2079 - self.match(MathExprParser.COMMA) - self.state = 2080 - self.expr() - - - self.state = 2083 - self.match(MathExprParser.RPAREN) - pass - else: - raise NoViableAltException(self) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - - def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): - if self._predicates == None: - self._predicates = dict() - self._predicates[16] = self.compExpr_sempred - self._predicates[17] = self.relationalExpr_sempred - self._predicates[18] = self.addExpr_sempred - self._predicates[19] = self.mulExpr_sempred - self._predicates[20] = self.shiftExpr_sempred - self._predicates[23] = self.indexExpr_sempred - pred = self._predicates.get(ruleIndex, None) - if pred is None: - raise Exception("No predicate with index:" + str(ruleIndex)) - else: - return pred(localctx, predIndex) - - def compExpr_sempred(self, localctx:CompExprContext, predIndex:int): - if predIndex == 0: - return self.precpred(self._ctx, 3) - - - if predIndex == 1: - return self.precpred(self._ctx, 2) - - - def relationalExpr_sempred(self, localctx:RelationalExprContext, predIndex:int): - if predIndex == 2: - return self.precpred(self._ctx, 5) - - - if predIndex == 3: - return self.precpred(self._ctx, 4) - - - if predIndex == 4: - return self.precpred(self._ctx, 3) - - - if predIndex == 5: - return self.precpred(self._ctx, 2) - - - def addExpr_sempred(self, localctx:AddExprContext, predIndex:int): - if predIndex == 6: - return self.precpred(self._ctx, 3) - - - if predIndex == 7: - return self.precpred(self._ctx, 2) - - - def mulExpr_sempred(self, localctx:MulExprContext, predIndex:int): - if predIndex == 8: - return self.precpred(self._ctx, 4) - - - if predIndex == 9: - return self.precpred(self._ctx, 3) - - - if predIndex == 10: - return self.precpred(self._ctx, 2) - - - def shiftExpr_sempred(self, localctx:ShiftExprContext, predIndex:int): - if predIndex == 11: - return self.precpred(self._ctx, 3) - - - if predIndex == 12: - return self.precpred(self._ctx, 2) - - - def indexExpr_sempred(self, localctx:IndexExprContext, predIndex:int): - if predIndex == 13: - return self.precpred(self._ctx, 2) - - - - - diff --git a/more_math/Parser/MathExprVisitor.py b/more_math/Parser/MathExprVisitor.py deleted file mode 100644 index d27b0b0..0000000 --- a/more_math/Parser/MathExprVisitor.py +++ /dev/null @@ -1,1408 +0,0 @@ -# Generated from MathExpr.g4 by ANTLR 4.13.2 -from antlr4 import * -if "." in __name__: - from .MathExprParser import MathExprParser -else: - from MathExprParser import MathExprParser - -# This class defines a complete generic visitor for a parse tree produced by MathExprParser. - -class MathExprVisitor(ParseTreeVisitor): - - # Visit a parse tree produced by MathExprParser#start. - def visitStart(self, ctx:MathExprParser.StartContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FunctionDef. - def visitFunctionDef(self, ctx:MathExprParser.FunctionDefContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#varDef. - def visitVarDef(self, ctx:MathExprParser.VarDefContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#paramList. - def visitParamList(self, ctx:MathExprParser.ParamListContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#IfStatement. - def visitIfStatement(self, ctx:MathExprParser.IfStatementContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#WhileStatement. - def visitWhileStatement(self, ctx:MathExprParser.WhileStatementContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BlockStatement. - def visitBlockStatement(self, ctx:MathExprParser.BlockStatementContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BreakStatement. - def visitBreakStatement(self, ctx:MathExprParser.BreakStatementContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ContinueStatement. - def visitContinueStatement(self, ctx:MathExprParser.ContinueStatementContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ReturnStatement. - def visitReturnStatement(self, ctx:MathExprParser.ReturnStatementContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#VarDefStmt. - def visitVarDefStmt(self, ctx:MathExprParser.VarDefStmtContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ForStatement. - def visitForStatement(self, ctx:MathExprParser.ForStatementContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ExprStatement. - def visitExprStatement(self, ctx:MathExprParser.ExprStatementContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ifStmt. - def visitIfStmt(self, ctx:MathExprParser.IfStmtContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#whileStmt. - def visitWhileStmt(self, ctx:MathExprParser.WhileStmtContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#forStmt. - def visitForStmt(self, ctx:MathExprParser.ForStmtContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#block. - def visitBlock(self, ctx:MathExprParser.BlockContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#dictEntryList. - def visitDictEntryList(self, ctx:MathExprParser.DictEntryListContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#dictEntry. - def visitDictEntry(self, ctx:MathExprParser.DictEntryContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#breakStmt. - def visitBreakStmt(self, ctx:MathExprParser.BreakStmtContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#continueStmt. - def visitContinueStmt(self, ctx:MathExprParser.ContinueStmtContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#returnStmt. - def visitReturnStmt(self, ctx:MathExprParser.ReturnStmtContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#expr. - def visitExpr(self, ctx:MathExprParser.ExprContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TernaryExp. - def visitTernaryExp(self, ctx:MathExprParser.TernaryExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ToRelational. - def visitToRelational(self, ctx:MathExprParser.ToRelationalContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#EqExp. - def visitEqExp(self, ctx:MathExprParser.EqExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#NeExp. - def visitNeExp(self, ctx:MathExprParser.NeExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ToShift. - def visitToShift(self, ctx:MathExprParser.ToShiftContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LtExp. - def visitLtExp(self, ctx:MathExprParser.LtExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GeExp. - def visitGeExp(self, ctx:MathExprParser.GeExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LeExp. - def visitLeExp(self, ctx:MathExprParser.LeExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GtExp. - def visitGtExp(self, ctx:MathExprParser.GtExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AddExp. - def visitAddExp(self, ctx:MathExprParser.AddExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ToMul. - def visitToMul(self, ctx:MathExprParser.ToMulContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SubExp. - def visitSubExp(self, ctx:MathExprParser.SubExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MulExp. - def visitMulExp(self, ctx:MathExprParser.MulExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ModExp. - def visitModExp(self, ctx:MathExprParser.ModExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#DivExp. - def visitDivExp(self, ctx:MathExprParser.DivExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ToPow. - def visitToPow(self, ctx:MathExprParser.ToPowContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ToAdd. - def visitToAdd(self, ctx:MathExprParser.ToAddContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RShiftExp. - def visitRShiftExp(self, ctx:MathExprParser.RShiftExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LShiftExp. - def visitLShiftExp(self, ctx:MathExprParser.LShiftExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PowExp. - def visitPowExp(self, ctx:MathExprParser.PowExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ToUnary. - def visitToUnary(self, ctx:MathExprParser.ToUnaryContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#UnaryPlus. - def visitUnaryPlus(self, ctx:MathExprParser.UnaryPlusContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#UnaryMinus. - def visitUnaryMinus(self, ctx:MathExprParser.UnaryMinusContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ToIndex. - def visitToIndex(self, ctx:MathExprParser.ToIndexContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#IndexExp. - def visitIndexExp(self, ctx:MathExprParser.IndexExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ToAtom. - def visitToAtom(self, ctx:MathExprParser.ToAtomContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SliceWithStep. - def visitSliceWithStep(self, ctx:MathExprParser.SliceWithStepContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Slice. - def visitSlice(self, ctx:MathExprParser.SliceContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SliceColonStartStep. - def visitSliceColonStartStep(self, ctx:MathExprParser.SliceColonStartStepContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SliceColonStart. - def visitSliceColonStart(self, ctx:MathExprParser.SliceColonStartContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SliceExprColonStep. - def visitSliceExprColonStep(self, ctx:MathExprParser.SliceExprColonStepContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SliceExpr. - def visitSliceExpr(self, ctx:MathExprParser.SliceExprContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SliceColonStep. - def visitSliceColonStep(self, ctx:MathExprParser.SliceColonStepContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SliceOnly. - def visitSliceOnly(self, ctx:MathExprParser.SliceOnlyContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#IndexOnly. - def visitIndexOnly(self, ctx:MathExprParser.IndexOnlyContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Func0Exp. - def visitFunc0Exp(self, ctx:MathExprParser.Func0ExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Func1Exp. - def visitFunc1Exp(self, ctx:MathExprParser.Func1ExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Func2Exp. - def visitFunc2Exp(self, ctx:MathExprParser.Func2ExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Func3Exp. - def visitFunc3Exp(self, ctx:MathExprParser.Func3ExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Func4Exp. - def visitFunc4Exp(self, ctx:MathExprParser.Func4ExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Func5Exp. - def visitFunc5Exp(self, ctx:MathExprParser.Func5ExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FuncNExp. - def visitFuncNExp(self, ctx:MathExprParser.FuncNExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FuncNoiseExp. - def visitFuncNoiseExp(self, ctx:MathExprParser.FuncNoiseExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#VariableExp. - def visitVariableExp(self, ctx:MathExprParser.VariableExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#NumberExp. - def visitNumberExp(self, ctx:MathExprParser.NumberExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ConstantExp. - def visitConstantExp(self, ctx:MathExprParser.ConstantExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#StringExp. - def visitStringExp(self, ctx:MathExprParser.StringExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LambdaExp. - def visitLambdaExp(self, ctx:MathExprParser.LambdaExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ParenExp. - def visitParenExp(self, ctx:MathExprParser.ParenExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AbsExp. - def visitAbsExp(self, ctx:MathExprParser.AbsExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ListExp. - def visitListExp(self, ctx:MathExprParser.ListExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#DictExp. - def visitDictExp(self, ctx:MathExprParser.DictExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CallExp. - def visitCallExp(self, ctx:MathExprParser.CallExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#NoneExp. - def visitNoneExp(self, ctx:MathExprParser.NoneExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BreakExp. - def visitBreakExp(self, ctx:MathExprParser.BreakExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ContinueExp. - def visitContinueExp(self, ctx:MathExprParser.ContinueExpContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#exprList. - def visitExprList(self, ctx:MathExprParser.ExprListContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TimestampFunc. - def visitTimestampFunc(self, ctx:MathExprParser.TimestampFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SinFunc. - def visitSinFunc(self, ctx:MathExprParser.SinFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CosFunc. - def visitCosFunc(self, ctx:MathExprParser.CosFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TanFunc. - def visitTanFunc(self, ctx:MathExprParser.TanFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AsinFunc. - def visitAsinFunc(self, ctx:MathExprParser.AsinFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AcosFunc. - def visitAcosFunc(self, ctx:MathExprParser.AcosFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AtanFunc. - def visitAtanFunc(self, ctx:MathExprParser.AtanFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SinhFunc. - def visitSinhFunc(self, ctx:MathExprParser.SinhFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CoshFunc. - def visitCoshFunc(self, ctx:MathExprParser.CoshFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TanhFunc. - def visitTanhFunc(self, ctx:MathExprParser.TanhFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AsinhFunc. - def visitAsinhFunc(self, ctx:MathExprParser.AsinhFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AcoshFunc. - def visitAcoshFunc(self, ctx:MathExprParser.AcoshFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AtanhFunc. - def visitAtanhFunc(self, ctx:MathExprParser.AtanhFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AbsFunc. - def visitAbsFunc(self, ctx:MathExprParser.AbsFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SqrtFunc. - def visitSqrtFunc(self, ctx:MathExprParser.SqrtFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LnFunc. - def visitLnFunc(self, ctx:MathExprParser.LnFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LogFunc. - def visitLogFunc(self, ctx:MathExprParser.LogFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ExpFunc. - def visitExpFunc(self, ctx:MathExprParser.ExpFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TNormFunc. - def visitTNormFunc(self, ctx:MathExprParser.TNormFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FloorFunc. - def visitFloorFunc(self, ctx:MathExprParser.FloorFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CeilFunc. - def visitCeilFunc(self, ctx:MathExprParser.CeilFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RoundFunc. - def visitRoundFunc(self, ctx:MathExprParser.RoundFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GammaFunc. - def visitGammaFunc(self, ctx:MathExprParser.GammaFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#sigmoidFunc. - def visitSigmoidFunc(self, ctx:MathExprParser.SigmoidFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#anglFunc. - def visitAnglFunc(self, ctx:MathExprParser.AnglFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#printFunc. - def visitPrintFunc(self, ctx:MathExprParser.PrintFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FractFunc. - def visitFractFunc(self, ctx:MathExprParser.FractFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ReluFunc. - def visitReluFunc(self, ctx:MathExprParser.ReluFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SoftplusFunc. - def visitSoftplusFunc(self, ctx:MathExprParser.SoftplusFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GeluFunc. - def visitGeluFunc(self, ctx:MathExprParser.GeluFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SignFunc. - def visitSignFunc(self, ctx:MathExprParser.SignFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PrintShapeFunc. - def visitPrintShapeFunc(self, ctx:MathExprParser.PrintShapeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PinvFunc. - def visitPinvFunc(self, ctx:MathExprParser.PinvFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SumFunc. - def visitSumFunc(self, ctx:MathExprParser.SumFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MeanFunc. - def visitMeanFunc(self, ctx:MathExprParser.MeanFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#StdFunc. - def visitStdFunc(self, ctx:MathExprParser.StdFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#VarFunc. - def visitVarFunc(self, ctx:MathExprParser.VarFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SortFunc. - def visitSortFunc(self, ctx:MathExprParser.SortFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AnyFunc. - def visitAnyFunc(self, ctx:MathExprParser.AnyFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AllFunc. - def visitAllFunc(self, ctx:MathExprParser.AllFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#EdgeFunc. - def visitEdgeFunc(self, ctx:MathExprParser.EdgeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MedianFunc. - def visitMedianFunc(self, ctx:MathExprParser.MedianFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ModeFunc. - def visitModeFunc(self, ctx:MathExprParser.ModeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CumsumFunc. - def visitCumsumFunc(self, ctx:MathExprParser.CumsumFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CountFunc. - def visitCountFunc(self, ctx:MathExprParser.CountFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#KeysFunc. - def visitKeysFunc(self, ctx:MathExprParser.KeysFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#EnableTrackingFunc. - def visitEnableTrackingFunc(self, ctx:MathExprParser.EnableTrackingFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#DisableTrackingFunc. - def visitDisableTrackingFunc(self, ctx:MathExprParser.DisableTrackingFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ResetTrackingFunc. - def visitResetTrackingFunc(self, ctx:MathExprParser.ResetTrackingFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RepeatFunc. - def visitRepeatFunc(self, ctx:MathExprParser.RepeatFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CumprodFunc. - def visitCumprodFunc(self, ctx:MathExprParser.CumprodFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PopFunc. - def visitPopFunc(self, ctx:MathExprParser.PopFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ClearFunc. - def visitClearFunc(self, ctx:MathExprParser.ClearFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#HasFunc. - def visitHasFunc(self, ctx:MathExprParser.HasFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GetFunc. - def visitGetFunc(self, ctx:MathExprParser.GetFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ArgsortFunc. - def visitArgsortFunc(self, ctx:MathExprParser.ArgsortFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ArgminFunc. - def visitArgminFunc(self, ctx:MathExprParser.ArgminFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ArgmaxFunc. - def visitArgmaxFunc(self, ctx:MathExprParser.ArgmaxFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SoftmaxFunc. - def visitSoftmaxFunc(self, ctx:MathExprParser.SoftmaxFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SoftminFunc. - def visitSoftminFunc(self, ctx:MathExprParser.SoftminFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ErfFunc. - def visitErfFunc(self, ctx:MathExprParser.ErfFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ErfinvFunc. - def visitErfinvFunc(self, ctx:MathExprParser.ErfinvFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#UniqueFunc. - def visitUniqueFunc(self, ctx:MathExprParser.UniqueFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FlattenFunc. - def visitFlattenFunc(self, ctx:MathExprParser.FlattenFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MotionMaskFunc. - def visitMotionMaskFunc(self, ctx:MathExprParser.MotionMaskFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FlowToImageFunc. - def visitFlowToImageFunc(self, ctx:MathExprParser.FlowToImageFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BitNotFunc. - def visitBitNotFunc(self, ctx:MathExprParser.BitNotFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BitCountFunc. - def visitBitCountFunc(self, ctx:MathExprParser.BitCountFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ShapeFunc. - def visitShapeFunc(self, ctx:MathExprParser.ShapeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#UpperFunc. - def visitUpperFunc(self, ctx:MathExprParser.UpperFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LowerFunc. - def visitLowerFunc(self, ctx:MathExprParser.LowerFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TrimFunc. - def visitTrimFunc(self, ctx:MathExprParser.TrimFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#EntropyFunc. - def visitEntropyFunc(self, ctx:MathExprParser.EntropyFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SfftFunc. - def visitSfftFunc(self, ctx:MathExprParser.SfftFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#DilateFunc. - def visitDilateFunc(self, ctx:MathExprParser.DilateFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ErodeFunc. - def visitErodeFunc(self, ctx:MathExprParser.ErodeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MorphOpenFunc. - def visitMorphOpenFunc(self, ctx:MathExprParser.MorphOpenFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MorphCloseFunc. - def visitMorphCloseFunc(self, ctx:MathExprParser.MorphCloseFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#IntFunc. - def visitIntFunc(self, ctx:MathExprParser.IntFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FloatFunc. - def visitFloatFunc(self, ctx:MathExprParser.FloatFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FlowMagFunc. - def visitFlowMagFunc(self, ctx:MathExprParser.FlowMagFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FlowAngFunc. - def visitFlowAngFunc(self, ctx:MathExprParser.FlowAngFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AsNestedFunc. - def visitAsNestedFunc(self, ctx:MathExprParser.AsNestedFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SvdFunc. - def visitSvdFunc(self, ctx:MathExprParser.SvdFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PowFunc. - def visitPowFunc(self, ctx:MathExprParser.PowFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Atan2Func. - def visitAtan2Func(self, ctx:MathExprParser.Atan2FuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TMinFunc. - def visitTMinFunc(self, ctx:MathExprParser.TMinFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TMaxFunc. - def visitTMaxFunc(self, ctx:MathExprParser.TMaxFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SNormFunc. - def visitSNormFunc(self, ctx:MathExprParser.SNormFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#StepFunc. - def visitStepFunc(self, ctx:MathExprParser.StepFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TopkFunc. - def visitTopkFunc(self, ctx:MathExprParser.TopkFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BotkFunc. - def visitBotkFunc(self, ctx:MathExprParser.BotkFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#QuartileFunc. - def visitQuartileFunc(self, ctx:MathExprParser.QuartileFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PercentileFunc. - def visitPercentileFunc(self, ctx:MathExprParser.PercentileFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#QuantileFunc. - def visitQuantileFunc(self, ctx:MathExprParser.QuantileFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#DotFunc. - def visitDotFunc(self, ctx:MathExprParser.DotFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CossimFunc. - def visitCossimFunc(self, ctx:MathExprParser.CossimFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#StartswithFunc. - def visitStartswithFunc(self, ctx:MathExprParser.StartswithFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#EndswithFunc. - def visitEndswithFunc(self, ctx:MathExprParser.EndswithFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FlipFunc. - def visitFlipFunc(self, ctx:MathExprParser.FlipFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CovFunc. - def visitCovFunc(self, ctx:MathExprParser.CovFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CorrFunc. - def visitCorrFunc(self, ctx:MathExprParser.CorrFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AppendFunc. - def visitAppendFunc(self, ctx:MathExprParser.AppendFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#AddKeyFunc. - def visitAddKeyFunc(self, ctx:MathExprParser.AddKeyFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PermuteFunc. - def visitPermuteFunc(self, ctx:MathExprParser.PermuteFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GaussianFunc. - def visitGaussianFunc(self, ctx:MathExprParser.GaussianFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TopkIndFunc. - def visitTopkIndFunc(self, ctx:MathExprParser.TopkIndFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BotkIndFunc. - def visitBotkIndFunc(self, ctx:MathExprParser.BotkIndFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BatchShuffleFunc. - def visitBatchShuffleFunc(self, ctx:MathExprParser.BatchShuffleFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PushFunc. - def visitPushFunc(self, ctx:MathExprParser.PushFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GetValueFunc. - def visitGetValueFunc(self, ctx:MathExprParser.GetValueFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#EmptyTensorFunc. - def visitEmptyTensorFunc(self, ctx:MathExprParser.EmptyTensorFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PadFunc. - def visitPadFunc(self, ctx:MathExprParser.PadFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CrossFunc. - def visitCrossFunc(self, ctx:MathExprParser.CrossFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MatmulFunc. - def visitMatmulFunc(self, ctx:MathExprParser.MatmulFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FlowApplyFunc. - def visitFlowApplyFunc(self, ctx:MathExprParser.FlowApplyFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RifeFunc. - def visitRifeFunc(self, ctx:MathExprParser.RifeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BitAndFunc. - def visitBitAndFunc(self, ctx:MathExprParser.BitAndFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BitXorFunc. - def visitBitXorFunc(self, ctx:MathExprParser.BitXorFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BitOrFunc. - def visitBitOrFunc(self, ctx:MathExprParser.BitOrFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SplitFunc. - def visitSplitFunc(self, ctx:MathExprParser.SplitFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#JoinFunc. - def visitJoinFunc(self, ctx:MathExprParser.JoinFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SubstringFunc. - def visitSubstringFunc(self, ctx:MathExprParser.SubstringFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#FindFunc. - def visitFindFunc(self, ctx:MathExprParser.FindFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ReplaceFunc. - def visitReplaceFunc(self, ctx:MathExprParser.ReplaceFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Int_to_rgbFunc. - def visitInt_to_rgbFunc(self, ctx:MathExprParser.Int_to_rgbFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Rgb_to_intFunc. - def visitRgb_to_intFunc(self, ctx:MathExprParser.Rgb_to_intFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#InterpolateLinearFunc. - def visitInterpolateLinearFunc(self, ctx:MathExprParser.InterpolateLinearFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#InterpolateAreaFunc. - def visitInterpolateAreaFunc(self, ctx:MathExprParser.InterpolateAreaFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#InterpolateNearestExactFunc. - def visitInterpolateNearestExactFunc(self, ctx:MathExprParser.InterpolateNearestExactFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RemoveKeyFunc. - def visitRemoveKeyFunc(self, ctx:MathExprParser.RemoveKeyFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ClampFunc. - def visitClampFunc(self, ctx:MathExprParser.ClampFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LerpFunc. - def visitLerpFunc(self, ctx:MathExprParser.LerpFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SmoothstepFunc. - def visitSmoothstepFunc(self, ctx:MathExprParser.SmoothstepFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TransposeFunc. - def visitTransposeFunc(self, ctx:MathExprParser.TransposeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RangeFunc. - def visitRangeFunc(self, ctx:MathExprParser.RangeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MomentFunc. - def visitMomentFunc(self, ctx:MathExprParser.MomentFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CubicEaseFunc. - def visitCubicEaseFunc(self, ctx:MathExprParser.CubicEaseFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ElasticEaseFunc. - def visitElasticEaseFunc(self, ctx:MathExprParser.ElasticEaseFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SineEaseFunc. - def visitSineEaseFunc(self, ctx:MathExprParser.SineEaseFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SmootherstepFunc. - def visitSmootherstepFunc(self, ctx:MathExprParser.SmootherstepFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CropFunc. - def visitCropFunc(self, ctx:MathExprParser.CropFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SifftFunc. - def visitSifftFunc(self, ctx:MathExprParser.SifftFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#OverlayFunc. - def visitOverlayFunc(self, ctx:MathExprParser.OverlayFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LinspaceFunc. - def visitLinspaceFunc(self, ctx:MathExprParser.LinspaceFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RollFunc. - def visitRollFunc(self, ctx:MathExprParser.RollFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RgbToOklabFunc. - def visitRgbToOklabFunc(self, ctx:MathExprParser.RgbToOklabFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RgbToCielabFunc. - def visitRgbToCielabFunc(self, ctx:MathExprParser.RgbToCielabFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RgbToHsvFunc. - def visitRgbToHsvFunc(self, ctx:MathExprParser.RgbToHsvFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#HsvToRgbFunc. - def visitHsvToRgbFunc(self, ctx:MathExprParser.HsvToRgbFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#WhereFunc. - def visitWhereFunc(self, ctx:MathExprParser.WhereFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#OklabToRgbFunc. - def visitOklabToRgbFunc(self, ctx:MathExprParser.OklabToRgbFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CielabToRgbFunc. - def visitCielabToRgbFunc(self, ctx:MathExprParser.CielabToRgbFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#TextImageFunc. - def visitTextImageFunc(self, ctx:MathExprParser.TextImageFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CoordsFunc. - def visitCoordsFunc(self, ctx:MathExprParser.CoordsFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GatherFunc. - def visitGatherFunc(self, ctx:MathExprParser.GatherFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ScatterFunc. - def visitScatterFunc(self, ctx:MathExprParser.ScatterFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ScatterAddFunc. - def visitScatterAddFunc(self, ctx:MathExprParser.ScatterAddFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SwapFunc. - def visitSwapFunc(self, ctx:MathExprParser.SwapFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#NvlFunc. - def visitNvlFunc(self, ctx:MathExprParser.NvlFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LogspaceFunc. - def visitLogspaceFunc(self, ctx:MathExprParser.LogspaceFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#DistFunc. - def visitDistFunc(self, ctx:MathExprParser.DistFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#HistogramFunc. - def visitHistogramFunc(self, ctx:MathExprParser.HistogramFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RemapFunc. - def visitRemapFunc(self, ctx:MathExprParser.RemapFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#DiagonalMatrixFunc. - def visitDiagonalMatrixFunc(self, ctx:MathExprParser.DiagonalMatrixFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SMinFunc. - def visitSMinFunc(self, ctx:MathExprParser.SMinFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SMaxFunc. - def visitSMaxFunc(self, ctx:MathExprParser.SMaxFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#MapFunc. - def visitMapFunc(self, ctx:MathExprParser.MapFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#EzConvFunc. - def visitEzConvFunc(self, ctx:MathExprParser.EzConvFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ConvFunc. - def visitConvFunc(self, ctx:MathExprParser.ConvFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ReshapeFunc. - def visitReshapeFunc(self, ctx:MathExprParser.ReshapeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#SqueezeFunc. - def visitSqueezeFunc(self, ctx:MathExprParser.SqueezeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#UnsqueezeFunc. - def visitUnsqueezeFunc(self, ctx:MathExprParser.UnsqueezeFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ConcatFunc. - def visitConcatFunc(self, ctx:MathExprParser.ConcatFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#StackFunc. - def visitStackFunc(self, ctx:MathExprParser.StackFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#NonzeroFunc. - def visitNonzeroFunc(self, ctx:MathExprParser.NonzeroFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GetChangedKeysFunc. - def visitGetChangedKeysFunc(self, ctx:MathExprParser.GetChangedKeysFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GetAddedKeysFunc. - def visitGetAddedKeysFunc(self, ctx:MathExprParser.GetAddedKeysFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GetRemovedKeysFunc. - def visitGetRemovedKeysFunc(self, ctx:MathExprParser.GetRemovedKeysFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GetUnchangedKeysFunc. - def visitGetUnchangedKeysFunc(self, ctx:MathExprParser.GetUnchangedKeysFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#NoiseFunc. - def visitNoiseFunc(self, ctx:MathExprParser.NoiseFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RandFunc. - def visitRandFunc(self, ctx:MathExprParser.RandFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#ExponentialFunc. - def visitExponentialFunc(self, ctx:MathExprParser.ExponentialFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BernoulliFunc. - def visitBernoulliFunc(self, ctx:MathExprParser.BernoulliFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PoissonFunc. - def visitPoissonFunc(self, ctx:MathExprParser.PoissonFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CauchyFunc. - def visitCauchyFunc(self, ctx:MathExprParser.CauchyFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LogNormalFunc. - def visitLogNormalFunc(self, ctx:MathExprParser.LogNormalFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GammaDistFunc. - def visitGammaDistFunc(self, ctx:MathExprParser.GammaDistFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#BetaDistFunc. - def visitBetaDistFunc(self, ctx:MathExprParser.BetaDistFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#LaplaceDistFunc. - def visitLaplaceDistFunc(self, ctx:MathExprParser.LaplaceDistFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#GumbelDistFunc. - def visitGumbelDistFunc(self, ctx:MathExprParser.GumbelDistFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#WeibullDistFunc. - def visitWeibullDistFunc(self, ctx:MathExprParser.WeibullDistFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#Chi2DistFunc. - def visitChi2DistFunc(self, ctx:MathExprParser.Chi2DistFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#StudentTDistFunc. - def visitStudentTDistFunc(self, ctx:MathExprParser.StudentTDistFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PerlinFunc. - def visitPerlinFunc(self, ctx:MathExprParser.PerlinFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#CellularFunc. - def visitCellularFunc(self, ctx:MathExprParser.CellularFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#PlasmaFunc. - def visitPlasmaFunc(self, ctx:MathExprParser.PlasmaFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#RidgedFunc. - def visitRidgedFunc(self, ctx:MathExprParser.RidgedFuncContext): - return self.visitChildren(ctx) - - - # Visit a parse tree produced by MathExprParser#DomainWarpFunc. - def visitDomainWarpFunc(self, ctx:MathExprParser.DomainWarpFuncContext): - return self.visitChildren(ctx) - - - -del MathExprParser \ No newline at end of file diff --git a/test_bitwise_fix.py b/test_bitwise_fix.py deleted file mode 100644 index 1067e81..0000000 --- a/test_bitwise_fix.py +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env python3 -"""Quick test to verify bitwise operations work with tensors""" -import sys -sys.path.insert(0, r'D:\stability\Data\Packages\ComfyUI') - -import torch -from custom_nodes.more_math.more_math.Parser.UnifiedMathVisitor import UnifiedMathVisitor - -def test_bitwise_xor_float(): - """Test XOR with float tensors (the reported bug)""" - print("Testing bitwise XOR with float tensors...") - - # Create float tensors (this was causing the error) - a = torch.tensor([1.0, 2.0, 3.0], dtype=torch.float32) - b = torch.tensor([4.0, 5.0, 6.0], dtype=torch.float32) - - visitor = UnifiedMathVisitor({"a": a, "b": b}) - - try: - # This should convert to int64, perform XOR, then convert back - result = visitor._bitwise_op(a, b, torch.bitwise_xor, lambda x, y: x ^ y) - print("✓ XOR succeeded!") - print(f" Input a (float32): {a}") - print(f" Input b (float32): {b}") - print(f" Result: {result}") - print(f" Result dtype: {result.dtype}") - return True - except Exception as e: - print(f"✗ XOR failed: {e}") - return False - -def test_bitwise_and_float(): - """Test AND with float tensors""" - print("\nTesting bitwise AND with float tensors...") - - a = torch.tensor([15.0, 14.0, 13.0], dtype=torch.float32) - b = torch.tensor([7.0, 3.0, 1.0], dtype=torch.float32) - - visitor = UnifiedMathVisitor({"a": a, "b": b}) - - try: - result = visitor._bitwise_op(a, b, torch.bitwise_and, lambda x, y: x & y) - print("✓ AND succeeded!") - print(f" Input a (float32): {a}") - print(f" Input b (float32): {b}") - print(f" Result: {result}") - print(f" Result dtype: {result.dtype}") - return True - except Exception as e: - print(f"✗ AND failed: {e}") - return False - -def test_bitwise_or_float(): - """Test OR with float tensors""" - print("\nTesting bitwise OR with float tensors...") - - a = torch.tensor([15.0, 14.0, 13.0], dtype=torch.float32) - b = torch.tensor([7.0, 3.0, 1.0], dtype=torch.float32) - - visitor = UnifiedMathVisitor({"a": a, "b": b}) - - try: - result = visitor._bitwise_op(a, b, torch.bitwise_or, lambda x, y: x | y) - print("✓ OR succeeded!") - print(f" Input a (float32): {a}") - print(f" Input b (float32): {b}") - print(f" Result: {result}") - print(f" Result dtype: {result.dtype}") - return True - except Exception as e: - print(f"✗ OR failed: {e}") - return False - -def test_bitwise_not_float(): - """Test NOT with float tensors""" - print("\nTesting bitwise NOT with float tensors...") - - a = torch.tensor([1.0, 2.0, 3.0], dtype=torch.float32) - - visitor = UnifiedMathVisitor({"a": a}) - - try: - result = visitor._bitwise_not(a) - print("✓ NOT succeeded!") - print(f" Input a (float32): {a}") - print(f" Result: {result}") - print(f" Result dtype: {result.dtype}") - return True - except Exception as e: - print(f"✗ NOT failed: {e}") - return False - -def test_int_tensors_preserved(): - """Ensure int tensors still work as before""" - print("\nTesting that int tensor dtypes are preserved...") - - a = torch.tensor([15, 14, 13], dtype=torch.int16) - b = torch.tensor([7, 3, 1], dtype=torch.int16) - - visitor = UnifiedMathVisitor({"a": a, "b": b}) - - try: - result = visitor._bitwise_op(a, b, torch.bitwise_and, lambda x, y: x & y) - assert result.dtype == torch.int16, f"Expected int16, got {result.dtype}" - print("✓ Int16 dtype preserved!") - print(f" Input a (int16): {a}") - print(f" Input b (int16): {b}") - print(f" Result (int16): {result}") - return True - except Exception as e: - print(f"✗ Int16 test failed: {e}") - return False - -if __name__ == "__main__": - print("=" * 70) - print("Bitwise Operations Fix Verification") - print("=" * 70) - - results = [ - test_bitwise_xor_float(), - test_bitwise_and_float(), - test_bitwise_or_float(), - test_bitwise_not_float(), - test_int_tensors_preserved(), - ] - - print("\n" + "=" * 70) - if all(results): - print("✓ All tests passed!") - else: - print("✗ Some tests failed") - sys.exit(1) - print("=" * 70) diff --git a/test_bitwise_shifts.py b/test_bitwise_shifts.py deleted file mode 100644 index 4faed22..0000000 --- a/test_bitwise_shifts.py +++ /dev/null @@ -1,170 +0,0 @@ -#!/usr/bin/env python3 -""" -Test bitwise shift operators and bit count function -""" -import torch -import sys -sys.path.insert(0, 'custom_nodes/more_math') - -from more_math.Parser.MathExprParser import MathExprParser -from more_math.Parser.UnifiedMathVisitor import UnifiedMathVisitor -from antlr4 import InputStream, CommonTokenFactory - -def parse_and_evaluate(expression, variables=None): - """Parse and evaluate a math expression""" - if variables is None: - variables = {} - - input_stream = InputStream(expression) - lexer = MathExprParser(input_stream).lexer - stream = CommonTokenFactory() - parser = MathExprParser(input_stream) - tree = parser.start() - - visitor = UnifiedMathVisitor(variables, device='cpu') - result = visitor.visit(tree) - return result - -def test_bit_shifts(): - """Test bitwise shift operators""" - print("=" * 60) - print("Testing Bitwise Shift Operators") - print("=" * 60) - - test_cases = [ - # Left shift: 5 << 2 = 20 (0101 << 2 = 10100) - ("5 << 2", {}, 20), - - # Right shift: 20 >> 2 = 5 (10100 >> 2 = 0101) - ("20 >> 2", {}, 5), - - # Left shift with variable - ("x << 3", {"x": 4}, 32), # 4 << 3 = 32 - - # Right shift with variable - ("x >> 2", {"x": 16}, 4), # 16 >> 2 = 4 - - # Chained shifts - ("(8 << 2) >> 3", {}, 4), # (32) >> 3 = 4 - ] - - for expr, vars, expected in test_cases: - try: - result = parse_and_evaluate(expr, vars) - status = "✓" if result == expected else "✗" - print(f"{status} {expr:30} = {result:10} (expected {expected})") - except Exception as e: - print(f"✗ {expr:30} ERROR: {e}") - -def test_bit_count(): - """Test bit count function""" - print("\n" + "=" * 60) - print("Testing Bitwise Bit Count Function") - print("=" * 60) - - test_cases = [ - # bitcount(5) = 2 (0101 has 2 set bits) - ("bitcount(5)", {}, 2), - - # bitcount(15) = 4 (1111 has 4 set bits) - ("bitcount(15)", {}, 4), - - # bitcount(7) = 3 (111 has 3 set bits) - ("bitcount(7)", {}, 3), - - # bitcount(255) = 8 (11111111 has 8 set bits) - ("bitcount(255)", {}, 8), - - # bitcount(0) = 0 - ("bitcount(0)", {}, 0), - - # With variable - ("bitcount(x)", {"x": 31}, 5), # 31 = 11111 = 5 bits set - ] - - for expr, vars, expected in test_cases: - try: - result = parse_and_evaluate(expr, vars) - status = "✓" if result == expected else "✗" - print(f"{status} {expr:30} = {result:10} (expected {expected})") - except Exception as e: - print(f"✗ {expr:30} ERROR: {e}") - -def test_bit_shifts_with_tensors(): - """Test bitwise shifts with tensors""" - print("\n" + "=" * 60) - print("Testing Bitwise Shifts with Tensors") - print("=" * 60) - - vars = { - "a": torch.tensor([1, 2, 4, 8], dtype=torch.int32), - "shift": 2, - } - - try: - result = parse_and_evaluate("a << shift", vars) - expected = torch.tensor([4, 8, 16, 32], dtype=torch.int32) - match = torch.equal(result, expected) - status = "✓" if match else "✗" - print(f"{status} tensor_shift_left: [1,2,4,8] << 2 = {result.tolist()}") - except Exception as e: - print(f"✗ tensor_shift_left ERROR: {e}") - - try: - result = parse_and_evaluate("a >> shift", vars) - expected = torch.tensor([0, 0, 1, 2], dtype=torch.int32) - match = torch.equal(result, expected) - status = "✓" if match else "✗" - print(f"{status} tensor_shift_right: [1,2,4,8] >> 2 = {result.tolist()}") - except Exception as e: - print(f"✗ tensor_shift_right ERROR: {e}") - -def test_bit_count_with_tensors(): - """Test bit count with tensors""" - print("\n" + "=" * 60) - print("Testing Bit Count with Tensors") - print("=" * 60) - - vars = { - "nums": torch.tensor([5, 15, 7, 255], dtype=torch.int32), - } - - try: - result = parse_and_evaluate("bitcount(nums)", vars) - # Expected: [2, 4, 3, 8] set bits - print(f"✓ bitcount([5,15,7,255]): {result}") - except Exception as e: - print(f"✗ bitcount_tensor ERROR: {e}") - -def test_combinations(): - """Test combinations of shift and bit count""" - print("\n" + "=" * 60) - print("Testing Combinations") - print("=" * 60) - - test_cases = [ - # Shift then count bits - ("bitcount(5 << 2)", {}, 2), # 5 << 2 = 20 (10100) = 2 bits - - # Combined with other operators - ("(5 << 2) | (3 << 4)", {}, 0xCC), # 20 | 48 = 0xCC = 204 - ] - - for expr, vars, expected in test_cases: - try: - result = parse_and_evaluate(expr, vars) - status = "✓" if result == expected else "✗" - print(f"{status} {expr:35} = {result:10} (expected {expected})") - except Exception as e: - print(f"✗ {expr:35} ERROR: {e}") - -if __name__ == "__main__": - test_bit_shifts() - test_bit_count() - test_bit_shifts_with_tensors() - test_bit_count_with_tensors() - test_combinations() - - print("\n" + "=" * 60) - print("All tests completed!") - print("=" * 60) From 2964febfa27bb4527bcb9eaa077d51131d4fc914 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:55:17 +0200 Subject: [PATCH 10/13] Fix converter node defaults Co-Authored-By: Claude Opus 5.5 --- more_math/nodes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/more_math/nodes.py b/more_math/nodes.py index c657ef1..d2f0fe7 100644 --- a/more_math/nodes.py +++ b/more_math/nodes.py @@ -100,7 +100,7 @@ class BoolToIntNode(io.ComfyNode): display_name="Bool -> Int", category="More math/converters", inputs=[ - io.Boolean.Input(id="value", default=0), + io.Boolean.Input(id="value", default=False), ], outputs=[ io.Int.Output(), @@ -125,7 +125,7 @@ class IntToBoolNode(io.ComfyNode): category="More math/converters", display_name="Int -> bool", inputs=[ - io.Int.Input(id="value", default=0.0), + io.Int.Input(id="value", default=0), ], outputs=[ io.Boolean.Output(), From b889abdc8066c69413d640403390413bb9ac6718 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:55:17 +0200 Subject: [PATCH 11/13] Remove import guard from root __init__ Co-Authored-By: Claude Opus 5.5 --- __init__.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/__init__.py b/__init__.py index 970b7d5..55b7ce9 100644 --- a/__init__.py +++ b/__init__.py @@ -1,10 +1,4 @@ -import traceback - -try: - from .more_math.nodes import comfy_entrypoint as comfy_entrypoint -except ImportError: - print("Something is seriously wrong") - traceback.print_exc() +from .more_math.nodes import comfy_entrypoint as comfy_entrypoint WEB_DIRECTORY = "./web" -__all__ = ["comfy_entrypoint", "WEB_DIRECTORY"] \ No newline at end of file +__all__ = ["comfy_entrypoint", "WEB_DIRECTORY"] From 0d2154e57ac5fdb6b9f9e582818552297c789c1d Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 12:55:17 +0200 Subject: [PATCH 12/13] Add numpy and scipy to requirements Co-Authored-By: Claude Opus 5.5 --- requirements.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 69c7a25..0ae5562 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ antlr4-python3-runtime torch -pillow \ No newline at end of file +pillow +numpy +scipy From 6fb7a6269976e1d8f75556844bfc82263a54eee1 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Sun, 18 Oct 2026 14:31:14 +0200 Subject: [PATCH 13/13] partial Revert "Load RAFT through model management instead of downloading it" This partially reverts commit 08fbf104ea8b167757c5e88ffdf9c895dc74666b. --- README.md | 2 +- more_math/Parser/optical_flow_utils.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 943cc4f..cf1e5cf 100644 --- a/README.md +++ b/README.md @@ -319,7 +319,7 @@ You can also get the node from comfy manager under the name of More math. ### 4) Optical Flow - `rife(img1, img2, [tiling_size, iterations, multi_scale])`: compute optical flow using a RAFT-based model. - - uses the first checkpoint in `models/optical_flow`. Download https://download.pytorch.org/models/raft_large_C_T_SKHT_V2-ff5fadd5.pth (torchvision RAFT-large) and put it there. + - uses the first checkpoint in `models/optical_flow`; if there is none, torchvision's RAFT-large weights are downloaded once and saved there. - `tiling_size` chunks the image into overlapping `tiling_size`x`tiling_size` tiles to conserve memory; defaults to `0` (auto-enables `1024`x`1024` tiling above 2MPx); a value between `0` and `1` is taken as a fraction of the resolution instead. - `iterations` defaults to `12`. - `multi_scale` (default `false`) also runs a low-resolution pass of the base image to help catch large movements. diff --git a/more_math/Parser/optical_flow_utils.py b/more_math/Parser/optical_flow_utils.py index 8f7075c..66aa44f 100644 --- a/more_math/Parser/optical_flow_utils.py +++ b/more_math/Parser/optical_flow_utils.py @@ -18,13 +18,17 @@ def get_raft_model(): global _raft_patcher if _raft_patcher is None: names = folder_paths.get_filename_list("optical_flow") - if not names: - raise FileNotFoundError(f"Optical flow needs the RAFT model, which is not downloaded automatically. Download {Raft_Large_Weights.DEFAULT.url} (~20 MB) and save it to {folder_paths.get_folder_paths('optical_flow')[0]}") model = raft_large(weights=None, progress=False) model.load_state_dict(comfy.utils.load_torch_file(folder_paths.get_full_path_or_raise("optical_flow", names[0]), safe_load=True)) _raft_patcher = comfy.model_patcher.ModelPatcher(model.eval(), load_device=comfy.model_management.get_torch_device(), offload_device=comfy.model_management.unet_offload_device()) comfy.model_management.load_model_gpu(_raft_patcher) return _raft_patcher.model + if names: + model = raft_large(weights=None, progress=False) + model.load_state_dict(comfy.utils.load_torch_file(folder_paths.get_full_path_or_raise("optical_flow", names[0]), safe_load=True)) + else: + # No local checkpoint: download torchvision's RAFT weights once and keep a copy in models/optical_flow + weights = Raft_Large_Weights.DEFAULT def warp(x, flow, padding_mode='reflection'): """