diff --git a/README.md b/README.md index eec4c977..5133b696 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,13 @@ [![Doc](https://readthedocs.org/projects/fugue/badge)](https://triad.readthedocs.org) An abstraction layer for distributed computation + +## Tutorials + +### The simplest way to start: +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/fugue-project/tutorials/master) + +### Run the tutorial using docker +``` +docker run -p 8888:8888 fugueproject/tutorials:latest +``` diff --git a/fugue/__init__.py b/fugue/__init__.py index 696a8297..11b5a8a7 100644 --- a/fugue/__init__.py +++ b/fugue/__init__.py @@ -1,6 +1,9 @@ # flake8: noqa -__version__ = "0.2.8" +__version__ = "0.2.9" + +from triad.collections import Schema +from triad.collections.fs import FileSystem from fugue.collections.partition import PartitionCursor, PartitionSpec from fugue.dataframe.array_dataframe import ArrayDataFrame @@ -15,6 +18,11 @@ from fugue.extensions.creator import Creator, creator from fugue.extensions.outputter import Outputter, outputter from fugue.extensions.processor import Processor, processor -from fugue.extensions.transformer import CoTransformer, Transformer, transformer +from fugue.extensions.transformer import ( + CoTransformer, + Transformer, + transformer, + cotransformer, +) from fugue.workflow.workflow import FugueWorkflow, WorkflowDataFrame from fugue.workflow.workflow_context import FugueWorkflowContext diff --git a/fugue/dataframe/dataframe.py b/fugue/dataframe/dataframe.py index ccfb808a..29cb2dc5 100644 --- a/fugue/dataframe/dataframe.py +++ b/fugue/dataframe/dataframe.py @@ -169,7 +169,11 @@ def show( print("") if len(self.metadata) > 0: print("Metadata:") - print(self.metadata.to_json(indent=True)) + try: + # try pretty print, but if not convertible to json, print original + print(self.metadata.to_json(indent=True)) + except Exception: # pragma: no cover + print(self.metadata) print("") def head(self, n: int, columns: Optional[List[str]] = None) -> List[Any]: diff --git a/fugue/execution/execution_engine.py b/fugue/execution/execution_engine.py index 5e33b271..14069732 100644 --- a/fugue/execution/execution_engine.py +++ b/fugue/execution/execution_engine.py @@ -17,6 +17,7 @@ from triad.exceptions import InvalidOperationError from triad.utils.assertion import assert_or_throw from triad.utils.convert import to_size +from triad.utils.string import validate_triad_var_name _DEFAULT_JOIN_KEYS: List[str] = [] @@ -116,8 +117,10 @@ def serialize_by_partition( partition_spec: PartitionSpec, df_name: str, temp_path: Optional[str] = None, - to_file_threshold: int = -1, + to_file_threshold: Any = -1, + has_name: bool = False, ) -> DataFrame: + to_file_threshold = _get_file_threshold(to_file_threshold) on = list(filter(lambda k: k in df.schema, partition_spec.partition_by)) presort = list( filter(lambda p: p[0] in df.schema, partition_spec.presort.items()) @@ -135,7 +138,8 @@ def serialize_by_partition( metadata = dict( serialized=True, serialized_cols={df_name: col_name}, - schemas={df_name: df.schema}, + schemas={df_name: str(df.schema)}, + serialized_has_name=has_name, ) return self.map(df, s.run, output_schema, partition_spec, metadata) @@ -147,6 +151,8 @@ def zip( partition_spec: PartitionSpec = EMPTY_PARTITION_SPEC, temp_path: Optional[str] = None, to_file_threshold: Any = -1, + df1_name: Optional[str] = None, + df2_name: Optional[str] = None, ): on = list(partition_spec.partition_by) how = how.lower() @@ -154,9 +160,6 @@ def zip( "semi" not in how and "anti" not in how, InvalidOperationError("zip does not support semi or anti joins"), ) - to_file_threshold = ( - -1 if to_file_threshold == -1 else to_size(to_file_threshold) - ) serialized_cols: Dict[str, Any] = {} schemas: Dict[str, Any] = {} if len(on) == 0: @@ -171,14 +174,17 @@ def zip( ) partition_spec = PartitionSpec(partition_spec, by=on) - def update_df(df: DataFrame) -> DataFrame: + def update_df(df: DataFrame, name: Optional[str]) -> DataFrame: + if name is None: + name = f"_{len(serialized_cols)}" if not df.metadata.get("serialized", False): df = self.serialize_by_partition( df, partition_spec, - f"_{len(serialized_cols)}", + name, temp_path, to_file_threshold, + has_name=name is not None, ) for k in df.metadata["serialized_cols"].keys(): assert_or_throw( @@ -188,13 +194,58 @@ def update_df(df: DataFrame) -> DataFrame: schemas[k] = df.metadata["schemas"][k] return df - df1 = update_df(df1) - df2 = update_df(df2) + df1 = update_df(df1, df1_name) + df2 = update_df(df2, df2_name) metadata = dict( - serialized=True, serialized_cols=serialized_cols, schemas=schemas + serialized=True, + serialized_cols=serialized_cols, + schemas=schemas, + serialized_has_name=df1_name is not None or df2_name is not None, ) return self.join(df1, df2, how=how, on=on, metadata=metadata) + def zip_all( + self, + dfs: DataFrames, + how: str = "inner", + partition_spec: PartitionSpec = EMPTY_PARTITION_SPEC, + temp_path: Optional[str] = None, + to_file_threshold: Any = -1, + ) -> DataFrame: + assert_or_throw(len(dfs) > 0, "can't zip 0 dataframes") + pairs = list(dfs.items()) + has_name = dfs.has_key + if len(dfs) == 1: + return self.serialize_by_partition( + pairs[0][1], + partition_spec, + pairs[0][0], + temp_path, + to_file_threshold, + has_name=has_name, + ) + df = self.zip( + pairs[0][1], + pairs[1][1], + how=how, + partition_spec=partition_spec, + temp_path=temp_path, + to_file_threshold=to_file_threshold, + df1_name=pairs[0][0] if has_name else None, + df2_name=pairs[1][0] if has_name else None, + ) + for i in range(2, len(dfs)): + df = self.zip( + df, + pairs[i][1], + how=how, + partition_spec=partition_spec, + temp_path=temp_path, + to_file_threshold=to_file_threshold, + df2_name=pairs[i][0] if has_name else None, + ) + return df + def comap( self, df: DataFrame, @@ -243,9 +294,19 @@ def __deepcopy__(self, memo: Any) -> "ExecutionEngine": return self +def _get_file_threshold(size: Any) -> int: + if size is None: + return -1 + if isinstance(size, int): + return size + return to_size(size) + + def _df_name_to_serialize_col(name: str): assert_or_throw(name is not None, "Dataframe name can't be None") - return "__blob__" + name + "__" + name = "__blob__" + name + "__" + assert_or_throw(validate_triad_var_name(name), "Invalid name " + name) + return name class _PartitionSerializer(object): @@ -271,9 +332,10 @@ def __init__( ): self.schemas = df.metadata["schemas"] self.df_idx = [ - (df.schema.index_of_key(v), self.schemas[k]) + (df.schema.index_of_key(v), k, self.schemas[k]) for k, v in df.metadata["serialized_cols"].items() ] + self.named = df.metadata.get("serialized_has_name", False) self.func = func self._on_init = on_init @@ -281,9 +343,7 @@ def on_init(self, partition_no, df: DataFrame) -> None: if self._on_init is None: return # TODO: currently, get_output_schema only gets empty dataframes - empty_dfs = DataFrames( - {k: ArrayDataFrame([], v) for k, v in self.schemas.items()} - ) + empty_dfs = _generate_comap_empty_dfs(self.schemas, self.named) self._on_init(partition_no, empty_dfs) def run(self, cursor: PartitionCursor, df: LocalDataFrame) -> LocalDataFrame: @@ -295,11 +355,21 @@ def run(self, cursor: PartitionCursor, df: LocalDataFrame) -> LocalDataFrame: dfs = DataFrames(list(self._get_dfs(data[0]))) return self.func(cursor, dfs) - def _get_dfs(self, row: Any) -> Iterable[DataFrame]: - for k, v in self.df_idx: + def _get_dfs(self, row: Any) -> Iterable[Any]: + for k, name, v in self.df_idx: if row[k] is None: - yield ArrayDataFrame([], v) + df: DataFrame = ArrayDataFrame([], v) else: - df = deserialize_df(row[k]) + df = deserialize_df(row[k]) # type: ignore assert df is not None + if self.named: + yield name, df + else: yield df + + +def _generate_comap_empty_dfs(schemas: Any, named: bool) -> DataFrames: + if named: + return DataFrames({k: ArrayDataFrame([], v) for k, v in schemas.items()}) + else: + return DataFrames([ArrayDataFrame([], v) for v in schemas.values()]) diff --git a/fugue/extensions/__init__.py b/fugue/extensions/__init__.py index afd40ca2..40834d3f 100644 --- a/fugue/extensions/__init__.py +++ b/fugue/extensions/__init__.py @@ -1,5 +1,10 @@ # flake8: noqa -from fugue.extensions.transformer import Transformer, CoTransformer, transformer +from fugue.extensions.transformer import ( + Transformer, + CoTransformer, + transformer, + cotransformer, +) from fugue.extensions.creator import Creator, creator from fugue.extensions.processor import Processor, processor from fugue.extensions.outputter import Outputter, outputter diff --git a/fugue/extensions/builtins/outputters.py b/fugue/extensions/builtins/outputters.py index 5d3439b7..ac6aba06 100644 --- a/fugue/extensions/builtins/outputters.py +++ b/fugue/extensions/builtins/outputters.py @@ -10,7 +10,7 @@ def process(self, dfs: DataFrames) -> None: df.show( self.params.get("rows", 10), self.params.get("show_count", False), - title=self.params.get("title", ""), + title=self.params.get_or_none("title", str), ) diff --git a/fugue/extensions/builtins/processors.py b/fugue/extensions/builtins/processors.py index a1d93924..ae2fed28 100644 --- a/fugue/extensions/builtins/processors.py +++ b/fugue/extensions/builtins/processors.py @@ -10,6 +10,7 @@ ) from fugue.exceptions import FugueWorkflowError from fugue.execution import SQLEngine +from fugue.execution.execution_engine import _generate_comap_empty_dfs from fugue.extensions.processor import Processor from fugue.extensions.transformer import CoTransformer, Transformer, to_transformer from triad.collections import ParamDict @@ -56,8 +57,8 @@ def cotransform(self, df: DataFrame, tf: CoTransformer) -> DataFrame: ) tf._key_schema = df.schema - list(df.metadata["serialized_cols"].values()) # TODO: currently, get_output_schema only gets empty dataframes - empty_dfs = DataFrames( - {k: ArrayDataFrame([], v) for k, v in df.metadata["schemas"].items()} + empty_dfs = _generate_comap_empty_dfs( + df.metadata["schemas"], df.metadata.get("serialized_has_name", False) ) tf._output_schema = Schema(tf.get_output_schema(empty_dfs)) tr = _CoTransformerRunner(df, tf, self._ignore_errors) @@ -100,30 +101,13 @@ def process(self, dfs: DataFrames) -> DataFrame: # TODO: this should also search on workflow conf temp_path = self.params.get_or_none("temp_path", str) to_file_threshold = self.params.get_or_none("to_file_threshold", object) - if to_file_threshold is None: # pragma: no cover - to_file_threshold = -1 - if len(dfs) == 1: - return self.execution_engine.serialize_by_partition( - dfs[0], partition_spec, "_0", temp_path, to_file_threshold - ) - df = self.execution_engine.zip( - dfs[0], - dfs[1], + return self.execution_engine.zip_all( + dfs, how=how, partition_spec=partition_spec, temp_path=temp_path, to_file_threshold=to_file_threshold, ) - for i in range(2, len(dfs)): - df = self.execution_engine.zip( - df, - dfs[i], - how=how, - partition_spec=partition_spec, - temp_path=temp_path, - to_file_threshold=to_file_threshold, - ) - return df class Rename(Processor): diff --git a/fugue/extensions/transformer/convert.py b/fugue/extensions/transformer/convert.py index 58071e63..b8c3b821 100644 --- a/fugue/extensions/transformer/convert.py +++ b/fugue/extensions/transformer/convert.py @@ -77,11 +77,13 @@ def __uuid__(self) -> str: return to_uuid(self._wrapper.__uuid__(), self._output_schema_arg) def _parse_schema(self, obj: Any, df: DataFrame) -> Schema: + if callable(obj): + return obj(df, **self.params) if isinstance(obj, str): return df.schema.transform(obj) if isinstance(obj, List): return df.schema.transform(*obj) - return df.schema.transform(obj) + raise NotImplementedError # pragma: no cover @staticmethod def from_func(func: Callable, schema: Any) -> "_FuncAsTransformer": @@ -98,14 +100,30 @@ def from_func(func: Callable, schema: Any) -> "_FuncAsTransformer": class _FuncAsCoTransformer(CoTransformer): def get_output_schema(self, dfs: DataFrames) -> Any: - return self._parse_schema(self._output_schema_arg) # type: ignore + return self._parse_schema(self._output_schema_arg, dfs) # type: ignore @no_type_check def transform(self, dfs: DataFrames) -> LocalDataFrame: - args: List[Any] = [dfs] if self._dfs_input else list(dfs.values()) - return self._wrapper.run( # type: ignore - args, self.params, ignore_unknown=False, output_schema=self.output_schema - ) + if self._dfs_input: # function has DataFrames input + return self._wrapper.run( # type: ignore + [dfs], + self.params, + ignore_unknown=False, + output_schema=self.output_schema, + ) + if not dfs.has_key: # input does not have key + return self._wrapper.run( # type: ignore + list(dfs.values()), + self.params, + ignore_unknown=False, + output_schema=self.output_schema, + ) + else: # input DataFrames has key + p = dict(dfs) + p.update(self.params) + return self._wrapper.run( # type: ignore + [], p, ignore_unknown=False, output_schema=self.output_schema + ) def __call__(self, *args: Any, **kwargs: Any) -> Any: return self._wrapper(*args, **kwargs) # type: ignore @@ -116,15 +134,15 @@ def __uuid__(self) -> str: self._wrapper.__uuid__(), self._output_schema_arg, self._dfs_input ) - def _parse_schema(self, obj: Any) -> Schema: - if obj is None: - return Schema() + def _parse_schema(self, obj: Any, dfs: DataFrames) -> Schema: + if callable(obj): + return obj(dfs, **self.params) if isinstance(obj, str): return Schema(obj) if isinstance(obj, List): s = Schema() for x in obj: - s += self._parse_schema(x) + s += self._parse_schema(x, dfs) return s return Schema(obj) diff --git a/fugue/workflow/tasks.py b/fugue/workflow/tasks.py index e90f13ba..b0e4ca85 100644 --- a/fugue/workflow/tasks.py +++ b/fugue/workflow/tasks.py @@ -56,9 +56,10 @@ def __init__( deterministic=deterministic, lazy=lazy, ) - self._persist: Any = self.params.get_or_none("persist", object) - self._broadcast = self.params.get("broadcast", False) - # self._partition = self.params.get_or_none("partition", PartitionSpec) + self._persist: Any = None + self._broadcast = False + self._checkpoint = False + self._checkpoint_namespace: Optional[str] = None def __uuid__(self) -> str: return to_uuid( @@ -72,17 +73,14 @@ def __uuid__(self) -> str: self.node_spec, str(self._persist), self._broadcast, - # self._partition + self._checkpoint, + self._checkpoint_namespace, ) @abstractmethod def execute(self, ctx: TaskContext) -> None: # pragma: no cover raise NotImplementedError - @property - def params(self) -> ParamDict: - return self.metadata - @property def single_output_expression(self) -> str: assert_or_throw( @@ -100,6 +98,11 @@ def __copy__(self) -> "FugueTask": def __deepcopy__(self, memo: Any) -> "FugueTask": raise InvalidOperationError("can't copy") + def checkpoint(self, namespace: Any = None): + # TODO: currently checkpoint is not taking effect + self._checkpoint = True + self._checkpoint_namespace = None if namespace is None else str(namespace) + def persist(self, level: Any) -> "FugueTask": self._persist = "" if level is None else level return self diff --git a/fugue/workflow/workflow.py b/fugue/workflow/workflow.py index 222ec9d8..a1bf3697 100644 --- a/fugue/workflow/workflow.py +++ b/fugue/workflow/workflow.py @@ -154,6 +154,10 @@ def full_outer_join( def cross_join(self: TDF, *dfs: Any) -> TDF: return self.join(*dfs, how="cross") + def checkpoint(self: TDF, namespace: Any = None) -> TDF: + self._task.checkpoint(namespace) + return self + def persist(self: TDF, level: Any = None) -> TDF: self._task.persist("" if level is None else level) return self diff --git a/fugue_sql/antlr/fugue_sql.g4 b/fugue_sql/antlr/fugue_sql.g4 index fee9056b..aecd071f 100644 --- a/fugue_sql/antlr/fugue_sql.g4 +++ b/fugue_sql/antlr/fugue_sql.g4 @@ -185,7 +185,11 @@ fuguePath fuguePersist : PERSIST (value=fuguePersistValue)? - | checkpoint=CHECKPOINT + | checkpoint=CHECKPOINT (ns=fugueCheckpointNamespace)? + ; + +fugueCheckpointNamespace + : STRING ; fuguePersistValue @@ -216,7 +220,7 @@ fugueAssignment: fugueAssignmentSign : COLONEQUAL - // | CHECKPOINTSIGN // TODO: add checkpoint + | CHECKPOINTSIGN | {self.simpleAssign}? EQUAL ; diff --git a/fugue_sql/antlr/fugue_sqlParser.py b/fugue_sql/antlr/fugue_sqlParser.py index ba6d237e..ffa18b2e 100644 --- a/fugue_sql/antlr/fugue_sqlParser.py +++ b/fugue_sql/antlr/fugue_sqlParser.py @@ -12,7 +12,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0149") - buf.write("\u0dfc\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\u0e04\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23") buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31") @@ -49,2043 +49,2048 @@ def serializedATN(): buf.write("\t\u00bc\4\u00bd\t\u00bd\4\u00be\t\u00be\4\u00bf\t\u00bf") buf.write("\4\u00c0\t\u00c0\4\u00c1\t\u00c1\4\u00c2\t\u00c2\4\u00c3") buf.write("\t\u00c3\4\u00c4\t\u00c4\4\u00c5\t\u00c5\4\u00c6\t\u00c6") - buf.write("\4\u00c7\t\u00c7\4\u00c8\t\u00c8\3\2\6\2\u0192\n\2\r\2") - buf.write("\16\2\u0193\3\2\3\2\3\3\3\3\3\3\3\4\3\4\3\4\3\4\5\4\u019f") - buf.write("\n\4\3\5\3\5\5\5\u01a3\n\5\3\6\5\6\u01a6\n\6\3\6\5\6\u01a9") - buf.write("\n\6\3\6\3\6\5\6\u01ad\n\6\3\6\5\6\u01b0\n\6\3\7\5\7\u01b3") - buf.write("\n\7\3\7\3\7\5\7\u01b7\n\7\3\7\5\7\u01ba\n\7\3\b\3\b\3") - buf.write("\b\3\b\3\b\3\b\5\b\u01c2\n\b\3\t\3\t\5\t\u01c6\n\t\3\t") - buf.write("\5\t\u01c9\n\t\3\t\3\t\3\n\3\n\5\n\u01cf\n\n\3\n\5\n\u01d2") - buf.write("\n\n\3\n\3\n\3\13\3\13\3\13\5\13\u01d9\n\13\3\13\3\13") - buf.write("\5\13\u01dd\n\13\3\13\3\13\5\13\u01e1\n\13\3\f\3\f\3\f") - buf.write("\3\r\3\r\5\r\u01e8\n\r\3\r\3\r\3\r\3\r\3\16\3\16\5\16") - buf.write("\u01f0\n\16\3\16\3\16\5\16\u01f4\n\16\3\16\3\16\5\16\u01f8") - buf.write("\n\16\3\17\3\17\5\17\u01fc\n\17\3\17\5\17\u01ff\n\17\3") - buf.write("\17\3\17\3\17\5\17\u0204\n\17\3\20\3\20\5\20\u0208\n\20") - buf.write("\3\20\3\20\5\20\u020c\n\20\3\20\5\20\u020f\n\20\3\20\3") - buf.write("\20\5\20\u0213\n\20\3\21\3\21\5\21\u0217\n\21\3\21\5\21") - buf.write("\u021a\n\21\3\21\3\21\5\21\u021e\n\21\3\21\5\21\u0221") - buf.write("\n\21\3\21\3\21\5\21\u0225\n\21\3\22\3\22\3\23\3\23\5") - buf.write("\23\u022b\n\23\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27") - buf.write("\5\27\u0235\n\27\3\27\5\27\u0238\n\27\3\30\3\30\3\31\3") - buf.write("\31\3\32\3\32\3\32\7\32\u0241\n\32\f\32\16\32\u0244\13") - buf.write("\32\3\32\3\32\3\32\7\32\u0249\n\32\f\32\16\32\u024c\13") - buf.write("\32\5\32\u024e\n\32\3\33\3\33\3\33\3\33\3\34\3\34\3\34") - buf.write("\3\34\3\34\5\34\u0259\n\34\3\35\3\35\3\35\3\36\3\36\3") - buf.write("\36\5\36\u0261\n\36\3\37\3\37\3\37\5\37\u0266\n\37\3\37") - buf.write("\3\37\5\37\u026a\n\37\3 \3 \3 \5 \u026f\n \3 \3 \5 \u0273") - buf.write("\n \3!\3!\3!\7!\u0278\n!\f!\16!\u027b\13!\3\"\3\"\3\"") - buf.write("\3\"\3\"\3\"\3\"\3\"\5\"\u0285\n\"\3#\5#\u0288\n#\3#\3") - buf.write("#\3#\3#\5#\u028e\n#\3#\3#\5#\u0292\n#\3#\5#\u0295\n#\3") - buf.write("#\3#\3#\3#\3#\5#\u029c\n#\5#\u029e\n#\3$\3$\3%\3%\3%\3") - buf.write("%\3%\3%\5%\u02a8\n%\3%\3%\3%\7%\u02ad\n%\f%\16%\u02b0") - buf.write("\13%\3&\5&\u02b3\n&\3&\3&\5&\u02b7\n&\3&\3&\3&\5&\u02bc") - buf.write("\n&\3\'\3\'\3\'\5\'\u02c1\n\'\3\'\5\'\u02c4\n\'\3(\3(") - buf.write("\3(\7(\u02c9\n(\f(\16(\u02cc\13(\3)\3)\3)\7)\u02d1\n)") - buf.write("\f)\16)\u02d4\13)\3*\3*\5*\u02d8\n*\3+\3+\3,\3,\3,\7,") - buf.write("\u02df\n,\f,\16,\u02e2\13,\3-\3-\5-\u02e6\n-\3.\3.\3.") - buf.write("\7.\u02eb\n.\f.\16.\u02ee\13.\3/\3/\3/\3/\3\60\3\60\3") - buf.write("\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\5\61\u02ff") - buf.write("\n\61\3\62\3\62\3\63\3\63\3\63\5\63\u0306\n\63\3\63\3") - buf.write("\63\3\63\3\63\3\63\3\63\3\63\5\63\u030f\n\63\3\63\3\63") - buf.write("\3\63\3\63\5\63\u0315\n\63\3\64\3\64\3\64\7\64\u031a\n") - buf.write("\64\f\64\16\64\u031d\13\64\3\65\3\65\3\65\3\65\3\66\3") - buf.write("\66\5\66\u0325\n\66\3\67\3\67\3\67\3\67\7\67\u032b\n\67") - buf.write("\f\67\16\67\u032e\13\67\3\67\5\67\u0331\n\67\3\67\3\67") - buf.write("\3\67\3\67\5\67\u0337\n\67\38\38\38\38\38\38\58\u033f") - buf.write("\n8\39\39\3:\3:\3;\3;\3<\3<\3=\3=\3>\3>\7>\u034d\n>\f") - buf.write(">\16>\u0350\13>\3>\3>\3?\3?\3?\3@\3@\3@\3A\3A\3A\3B\3") - buf.write("B\3B\3C\3C\3C\3D\3D\3D\3E\3E\5E\u0368\nE\3E\3E\3E\5E\u036d") - buf.write("\nE\3E\3E\3E\3E\3E\3E\5E\u0375\nE\3E\3E\3E\3E\3E\3E\7") - buf.write("E\u037d\nE\fE\16E\u0380\13E\3E\3E\3E\3E\3E\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\3E\3E\3E\3E\5E\u0393\nE\3E\3E\5E\u0397\n") - buf.write("E\3E\3E\3E\3E\5E\u039d\nE\3E\5E\u03a0\nE\3E\5E\u03a3\n") - buf.write("E\3E\3E\3E\3E\3E\5E\u03aa\nE\3E\3E\3E\5E\u03af\nE\3E\5") - buf.write("E\u03b2\nE\3E\3E\3E\3E\3E\5E\u03b9\nE\3E\3E\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\5E\u03c5\nE\3E\3E\3E\3E\3E\3E\3E\7E\u03ce") - buf.write("\nE\fE\16E\u03d1\13E\3E\5E\u03d4\nE\3E\5E\u03d7\nE\3E") - buf.write("\3E\3E\3E\3E\5E\u03de\nE\3E\3E\3E\3E\3E\3E\3E\3E\3E\7") - buf.write("E\u03e9\nE\fE\16E\u03ec\13E\3E\3E\3E\3E\3E\5E\u03f3\n") - buf.write("E\3E\3E\3E\5E\u03f8\nE\3E\5E\u03fb\nE\3E\3E\3E\3E\5E\u0401") - buf.write("\nE\3E\3E\3E\3E\3E\3E\3E\3E\3E\5E\u040c\nE\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\5E\u044c\nE\3E\3E\3E\3E\3E\3E\3E\5E\u0455") - buf.write("\nE\3E\3E\5E\u0459\nE\3E\3E\3E\3E\5E\u045f\nE\3E\3E\5") - buf.write("E\u0463\nE\3E\3E\3E\5E\u0468\nE\3E\3E\3E\3E\5E\u046e\n") - buf.write("E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\5E\u047a\nE\3E\3E\3E\3") - buf.write("E\3E\3E\5E\u0482\nE\3E\3E\3E\3E\5E\u0488\nE\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\3E\3E\3E\5E\u0495\nE\3E\6E\u0498\nE\rE\16") - buf.write("E\u0499\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\5E\u04aa") - buf.write("\nE\3E\3E\3E\7E\u04af\nE\fE\16E\u04b2\13E\3E\5E\u04b5") - buf.write("\nE\3E\3E\3E\3E\5E\u04bb\nE\3E\3E\3E\3E\3E\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\5E\u04ca\nE\3E\3E\5E\u04ce\nE\3E\3E\3E\3") - buf.write("E\5E\u04d4\nE\3E\3E\3E\3E\5E\u04da\nE\3E\5E\u04dd\nE\3") - buf.write("E\5E\u04e0\nE\3E\3E\3E\3E\5E\u04e6\nE\3E\3E\5E\u04ea\n") - buf.write("E\3E\3E\3E\3E\3E\3E\7E\u04f2\nE\fE\16E\u04f5\13E\3E\3") - buf.write("E\3E\3E\3E\3E\5E\u04fd\nE\3E\5E\u0500\nE\3E\3E\3E\3E\3") - buf.write("E\3E\3E\5E\u0509\nE\3E\3E\3E\5E\u050e\nE\3E\3E\3E\3E\5") - buf.write("E\u0514\nE\3E\3E\3E\3E\3E\5E\u051b\nE\3E\5E\u051e\nE\3") - buf.write("E\3E\3E\3E\5E\u0524\nE\3E\3E\3E\3E\3E\3E\3E\7E\u052d\n") - buf.write("E\fE\16E\u0530\13E\5E\u0532\nE\3E\3E\5E\u0536\nE\3E\3") - buf.write("E\3E\5E\u053b\nE\3E\3E\3E\5E\u0540\nE\3E\3E\3E\3E\3E\5") - buf.write("E\u0547\nE\3E\5E\u054a\nE\3E\5E\u054d\nE\3E\3E\3E\3E\3") - buf.write("E\5E\u0554\nE\3E\3E\3E\5E\u0559\nE\3E\3E\3E\3E\3E\3E\3") - buf.write("E\5E\u0562\nE\3E\3E\3E\3E\3E\3E\5E\u056a\nE\3E\3E\3E\3") - buf.write("E\5E\u0570\nE\3E\5E\u0573\nE\3E\5E\u0576\nE\3E\3E\3E\3") - buf.write("E\5E\u057c\nE\3E\3E\5E\u0580\nE\3E\3E\5E\u0584\nE\3E\3") - buf.write("E\5E\u0588\nE\5E\u058a\nE\3E\3E\3E\3E\3E\3E\5E\u0592\n") - buf.write("E\3E\3E\3E\3E\3E\3E\5E\u059a\nE\3E\3E\3E\3E\5E\u05a0\n") - buf.write("E\3E\3E\3E\3E\5E\u05a6\nE\3E\5E\u05a9\nE\3E\3E\5E\u05ad") - buf.write("\nE\3E\5E\u05b0\nE\3E\3E\5E\u05b4\nE\3E\3E\3E\3E\3E\3") - buf.write("E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\7E\u05cb") - buf.write("\nE\fE\16E\u05ce\13E\5E\u05d0\nE\3E\3E\5E\u05d4\nE\3E") - buf.write("\3E\3E\3E\5E\u05da\nE\3E\5E\u05dd\nE\3E\5E\u05e0\nE\3") - buf.write("E\3E\3E\3E\5E\u05e6\nE\3E\3E\3E\3E\3E\3E\5E\u05ee\nE\3") - buf.write("E\3E\3E\5E\u05f3\nE\3E\3E\3E\3E\5E\u05f9\nE\3E\3E\3E\3") - buf.write("E\5E\u05ff\nE\3E\3E\3E\3E\3E\3E\3E\3E\7E\u0609\nE\fE\16") - buf.write("E\u060c\13E\5E\u060e\nE\3E\3E\3E\7E\u0613\nE\fE\16E\u0616") - buf.write("\13E\3E\3E\7E\u061a\nE\fE\16E\u061d\13E\3E\3E\3E\7E\u0622") - buf.write("\nE\fE\16E\u0625\13E\5E\u0627\nE\3F\3F\3F\3F\3F\3F\5F") - buf.write("\u062f\nF\3F\3F\5F\u0633\nF\3F\3F\3F\3F\3F\5F\u063a\n") + buf.write("\4\u00c7\t\u00c7\4\u00c8\t\u00c8\4\u00c9\t\u00c9\3\2\6") + buf.write("\2\u0194\n\2\r\2\16\2\u0195\3\2\3\2\3\3\3\3\3\3\3\4\3") + buf.write("\4\3\4\3\4\5\4\u01a1\n\4\3\5\3\5\5\5\u01a5\n\5\3\6\5\6") + buf.write("\u01a8\n\6\3\6\5\6\u01ab\n\6\3\6\3\6\5\6\u01af\n\6\3\6") + buf.write("\5\6\u01b2\n\6\3\7\5\7\u01b5\n\7\3\7\3\7\5\7\u01b9\n\7") + buf.write("\3\7\5\7\u01bc\n\7\3\b\3\b\3\b\3\b\3\b\3\b\5\b\u01c4\n") + buf.write("\b\3\t\3\t\5\t\u01c8\n\t\3\t\5\t\u01cb\n\t\3\t\3\t\3\n") + buf.write("\3\n\5\n\u01d1\n\n\3\n\5\n\u01d4\n\n\3\n\3\n\3\13\3\13") + buf.write("\3\13\5\13\u01db\n\13\3\13\3\13\5\13\u01df\n\13\3\13\3") + buf.write("\13\5\13\u01e3\n\13\3\f\3\f\3\f\3\r\3\r\5\r\u01ea\n\r") + buf.write("\3\r\3\r\3\r\3\r\3\16\3\16\5\16\u01f2\n\16\3\16\3\16\5") + buf.write("\16\u01f6\n\16\3\16\3\16\5\16\u01fa\n\16\3\17\3\17\5\17") + buf.write("\u01fe\n\17\3\17\5\17\u0201\n\17\3\17\3\17\3\17\5\17\u0206") + buf.write("\n\17\3\20\3\20\5\20\u020a\n\20\3\20\3\20\5\20\u020e\n") + buf.write("\20\3\20\5\20\u0211\n\20\3\20\3\20\5\20\u0215\n\20\3\21") + buf.write("\3\21\5\21\u0219\n\21\3\21\5\21\u021c\n\21\3\21\3\21\5") + buf.write("\21\u0220\n\21\3\21\5\21\u0223\n\21\3\21\3\21\5\21\u0227") + buf.write("\n\21\3\22\3\22\3\23\3\23\5\23\u022d\n\23\3\24\3\24\3") + buf.write("\25\3\25\3\26\3\26\3\27\3\27\5\27\u0237\n\27\3\27\3\27") + buf.write("\5\27\u023b\n\27\5\27\u023d\n\27\3\30\3\30\3\31\3\31\3") + buf.write("\32\3\32\3\33\3\33\3\33\7\33\u0248\n\33\f\33\16\33\u024b") + buf.write("\13\33\3\33\3\33\3\33\7\33\u0250\n\33\f\33\16\33\u0253") + buf.write("\13\33\5\33\u0255\n\33\3\34\3\34\3\34\3\34\3\35\3\35\3") + buf.write("\35\3\35\3\35\5\35\u0260\n\35\3\36\3\36\3\36\3\37\3\37") + buf.write("\3\37\3\37\5\37\u0269\n\37\3 \3 \3 \5 \u026e\n \3 \3 ") + buf.write("\5 \u0272\n \3!\3!\3!\5!\u0277\n!\3!\3!\5!\u027b\n!\3") + buf.write("\"\3\"\3\"\7\"\u0280\n\"\f\"\16\"\u0283\13\"\3#\3#\3#") + buf.write("\3#\3#\3#\3#\3#\5#\u028d\n#\3$\5$\u0290\n$\3$\3$\3$\3") + buf.write("$\5$\u0296\n$\3$\3$\5$\u029a\n$\3$\5$\u029d\n$\3$\3$\3") + buf.write("$\3$\3$\5$\u02a4\n$\5$\u02a6\n$\3%\3%\3&\3&\3&\3&\3&\3") + buf.write("&\5&\u02b0\n&\3&\3&\3&\7&\u02b5\n&\f&\16&\u02b8\13&\3") + buf.write("\'\5\'\u02bb\n\'\3\'\3\'\5\'\u02bf\n\'\3\'\3\'\3\'\5\'") + buf.write("\u02c4\n\'\3(\3(\3(\5(\u02c9\n(\3(\5(\u02cc\n(\3)\3)\3") + buf.write(")\7)\u02d1\n)\f)\16)\u02d4\13)\3*\3*\3*\7*\u02d9\n*\f") + buf.write("*\16*\u02dc\13*\3+\3+\5+\u02e0\n+\3,\3,\3-\3-\3-\7-\u02e7") + buf.write("\n-\f-\16-\u02ea\13-\3.\3.\5.\u02ee\n.\3/\3/\3/\7/\u02f3") + buf.write("\n/\f/\16/\u02f6\13/\3\60\3\60\3\60\3\60\3\61\3\61\3\62") + buf.write("\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\5\62\u0307\n") + buf.write("\62\3\63\3\63\3\64\3\64\3\64\5\64\u030e\n\64\3\64\3\64") + buf.write("\3\64\3\64\3\64\3\64\3\64\5\64\u0317\n\64\3\64\3\64\3") + buf.write("\64\3\64\5\64\u031d\n\64\3\65\3\65\3\65\7\65\u0322\n\65") + buf.write("\f\65\16\65\u0325\13\65\3\66\3\66\3\66\3\66\3\67\3\67") + buf.write("\5\67\u032d\n\67\38\38\38\38\78\u0333\n8\f8\168\u0336") + buf.write("\138\38\58\u0339\n8\38\38\38\38\58\u033f\n8\39\39\39\3") + buf.write("9\39\39\59\u0347\n9\3:\3:\3;\3;\3<\3<\3=\3=\3>\3>\3?\3") + buf.write("?\7?\u0355\n?\f?\16?\u0358\13?\3?\3?\3@\3@\3@\3A\3A\3") + buf.write("A\3B\3B\3B\3C\3C\3C\3D\3D\3D\3E\3E\3E\3F\3F\5F\u0370\n") + buf.write("F\3F\3F\3F\5F\u0375\nF\3F\3F\3F\3F\3F\3F\5F\u037d\nF\3") + buf.write("F\3F\3F\3F\3F\3F\7F\u0385\nF\fF\16F\u0388\13F\3F\3F\3") + buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\5F\u039b\n") + buf.write("F\3F\3F\5F\u039f\nF\3F\3F\3F\3F\5F\u03a5\nF\3F\5F\u03a8") + buf.write("\nF\3F\5F\u03ab\nF\3F\3F\3F\3F\3F\5F\u03b2\nF\3F\3F\3") + buf.write("F\5F\u03b7\nF\3F\5F\u03ba\nF\3F\3F\3F\3F\3F\5F\u03c1\n") + buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\5F\u03cd\nF\3F\3F\3F\3") + buf.write("F\3F\3F\3F\7F\u03d6\nF\fF\16F\u03d9\13F\3F\5F\u03dc\n") + buf.write("F\3F\5F\u03df\nF\3F\3F\3F\3F\3F\5F\u03e6\nF\3F\3F\3F\3") + buf.write("F\3F\3F\3F\3F\3F\7F\u03f1\nF\fF\16F\u03f4\13F\3F\3F\3") + buf.write("F\3F\3F\5F\u03fb\nF\3F\3F\3F\5F\u0400\nF\3F\5F\u0403\n") + buf.write("F\3F\3F\3F\3F\5F\u0409\nF\3F\3F\3F\3F\3F\3F\3F\3F\3F\5") + buf.write("F\u0414\nF\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3") buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3") buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3") - buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3") - buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3") - buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3") - buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3") - buf.write("F\3F\3F\3F\3F\3F\3F\5F\u06ae\nF\3F\3F\3F\3F\3F\3F\5F\u06b6") - buf.write("\nF\3F\3F\3F\3F\3F\3F\5F\u06be\nF\3F\3F\3F\3F\3F\3F\3") - buf.write("F\5F\u06c7\nF\3F\3F\3F\3F\3F\3F\3F\3F\5F\u06d1\nF\3G\3") - buf.write("G\5G\u06d5\nG\3G\5G\u06d8\nG\3G\3G\3G\3G\5G\u06de\nG\3") - buf.write("G\3G\3H\3H\5H\u06e4\nH\3H\3H\3H\3H\3I\3I\3I\3I\3I\3I\5") - buf.write("I\u06f0\nI\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\5J\u06fc\nJ\3") - buf.write("J\3J\3J\5J\u0701\nJ\3K\3K\3K\3L\3L\3L\3M\5M\u070a\nM\3") - buf.write("M\3M\3M\3N\3N\3N\5N\u0712\nN\3N\3N\3N\3N\3N\5N\u0719\n") - buf.write("N\5N\u071b\nN\3N\3N\3N\5N\u0720\nN\3N\3N\5N\u0724\nN\3") - buf.write("N\3N\3N\5N\u0729\nN\3N\3N\3N\5N\u072e\nN\3N\3N\3N\5N\u0733") - buf.write("\nN\3N\5N\u0736\nN\3N\3N\3N\5N\u073b\nN\3N\3N\5N\u073f") - buf.write("\nN\3N\3N\3N\5N\u0744\nN\5N\u0746\nN\3O\3O\5O\u074a\n") - buf.write("O\3P\3P\3P\3P\3P\7P\u0751\nP\fP\16P\u0754\13P\3P\3P\3") - buf.write("Q\3Q\3Q\5Q\u075b\nQ\3R\3R\3S\3S\3S\3S\3S\5S\u0764\nS\3") - buf.write("T\3T\3T\7T\u0769\nT\fT\16T\u076c\13T\3U\3U\3U\3U\7U\u0772") - buf.write("\nU\fU\16U\u0775\13U\3V\3V\5V\u0779\nV\3V\5V\u077c\nV") - buf.write("\3V\3V\3V\3V\3W\3W\3W\3X\3X\3X\3X\3X\3X\3X\3X\3X\3X\7") - buf.write("X\u078f\nX\fX\16X\u0792\13X\3Y\3Y\3Y\3Y\7Y\u0798\nY\f") - buf.write("Y\16Y\u079b\13Y\3Y\3Y\3Z\3Z\5Z\u07a1\nZ\3Z\5Z\u07a4\n") - buf.write("Z\3[\3[\3[\7[\u07a9\n[\f[\16[\u07ac\13[\3[\5[\u07af\n") - buf.write("[\3\\\3\\\3\\\3\\\5\\\u07b5\n\\\3]\3]\3]\3]\7]\u07bb\n") - buf.write("]\f]\16]\u07be\13]\3]\3]\3^\3^\3^\3^\7^\u07c6\n^\f^\16") - buf.write("^\u07c9\13^\3^\3^\3_\3_\3_\3_\3_\3_\5_\u07d3\n_\3`\3`") - buf.write("\3`\3`\3`\5`\u07da\n`\3a\3a\3a\3a\5a\u07e0\na\3b\3b\3") - buf.write("b\3c\3c\3c\3c\3c\3c\6c\u07eb\nc\rc\16c\u07ec\3c\3c\3c") - buf.write("\3c\3c\5c\u07f4\nc\3c\3c\3c\3c\3c\5c\u07fb\nc\3c\3c\3") - buf.write("c\3c\3c\3c\3c\3c\3c\3c\5c\u0807\nc\3c\3c\3c\3c\7c\u080d") - buf.write("\nc\fc\16c\u0810\13c\3c\7c\u0813\nc\fc\16c\u0816\13c\5") - buf.write("c\u0818\nc\3d\3d\3d\3d\3d\7d\u081f\nd\fd\16d\u0822\13") - buf.write("d\5d\u0824\nd\3d\3d\3d\3d\3d\7d\u082b\nd\fd\16d\u082e") - buf.write("\13d\5d\u0830\nd\3d\3d\3d\3d\3d\7d\u0837\nd\fd\16d\u083a") - buf.write("\13d\5d\u083c\nd\3d\3d\3d\3d\3d\7d\u0843\nd\fd\16d\u0846") - buf.write("\13d\5d\u0848\nd\3d\5d\u084b\nd\3d\3d\3d\5d\u0850\nd\5") - buf.write("d\u0852\nd\3e\3e\3e\3f\3f\3f\3f\3f\3f\3f\5f\u085e\nf\3") - buf.write("f\3f\3f\3f\3f\5f\u0865\nf\3f\3f\3f\3f\3f\5f\u086c\nf\3") - buf.write("f\7f\u086f\nf\ff\16f\u0872\13f\3g\3g\3g\3g\3g\5g\u0879") - buf.write("\ng\3h\3h\5h\u087d\nh\3h\3h\5h\u0881\nh\3i\3i\6i\u0885") - buf.write("\ni\ri\16i\u0886\3j\3j\5j\u088b\nj\3j\3j\3j\3j\7j\u0891") - buf.write("\nj\fj\16j\u0894\13j\3j\5j\u0897\nj\3j\5j\u089a\nj\3j") - buf.write("\5j\u089d\nj\3j\5j\u08a0\nj\3j\3j\5j\u08a4\nj\3k\3k\3") - buf.write("k\5k\u08a9\nk\3k\3k\3k\7k\u08ae\nk\fk\16k\u08b1\13k\3") - buf.write("k\5k\u08b4\nk\3k\5k\u08b7\nk\3k\5k\u08ba\nk\3k\5k\u08bd") - buf.write("\nk\5k\u08bf\nk\3l\5l\u08c2\nl\3m\3m\3m\3m\3m\3m\3m\3") - buf.write("m\3m\3m\5m\u08ce\nm\3m\5m\u08d1\nm\3m\3m\5m\u08d5\nm\3") - buf.write("m\3m\3m\3m\3m\3m\3m\3m\5m\u08df\nm\3m\3m\5m\u08e3\nm\5") - buf.write("m\u08e5\nm\3m\5m\u08e8\nm\3m\3m\5m\u08ec\nm\3n\3n\7n\u08f0") - buf.write("\nn\fn\16n\u08f3\13n\3n\5n\u08f6\nn\3n\3n\3o\3o\3o\3p") - buf.write("\3p\3p\3p\5p\u0901\np\3p\3p\3p\3q\3q\3q\3q\3q\5q\u090b") - buf.write("\nq\3q\3q\3q\3r\3r\3r\3r\3r\3r\3r\5r\u0917\nr\3s\3s\3") - buf.write("s\3s\3s\3s\3s\3s\3s\3s\3s\7s\u0924\ns\fs\16s\u0927\13") - buf.write("s\3s\3s\5s\u092b\ns\3t\3t\3t\7t\u0930\nt\ft\16t\u0933") - buf.write("\13t\3u\3u\3u\3u\3v\3v\3v\3w\3w\3w\3x\3x\3x\5x\u0942\n") - buf.write("x\3x\7x\u0945\nx\fx\16x\u0948\13x\3x\3x\3y\3y\3y\3y\3") - buf.write("y\3y\7y\u0952\ny\fy\16y\u0955\13y\3y\3y\5y\u0959\ny\3") - buf.write("z\3z\3z\3z\7z\u095f\nz\fz\16z\u0962\13z\3z\7z\u0965\n") - buf.write("z\fz\16z\u0968\13z\3z\5z\u096b\nz\3{\3{\3{\3{\3{\7{\u0972") - buf.write("\n{\f{\16{\u0975\13{\3{\3{\3{\3{\3{\3{\3{\3{\3{\3{\7{") - buf.write("\u0981\n{\f{\16{\u0984\13{\3{\3{\5{\u0988\n{\3{\3{\3{") - buf.write("\3{\3{\3{\3{\3{\7{\u0992\n{\f{\16{\u0995\13{\3{\3{\5{") - buf.write("\u0999\n{\3|\3|\3|\3|\7|\u099f\n|\f|\16|\u09a2\13|\5|") - buf.write("\u09a4\n|\3|\3|\5|\u09a8\n|\3}\3}\3}\3}\3}\3}\3}\3}\3") - buf.write("}\3}\7}\u09b4\n}\f}\16}\u09b7\13}\3}\3}\3}\3~\3~\3~\3") - buf.write("~\3~\7~\u09c1\n~\f~\16~\u09c4\13~\3~\3~\5~\u09c8\n~\3") - buf.write("\177\3\177\5\177\u09cc\n\177\3\177\5\177\u09cf\n\177\3") - buf.write("\u0080\3\u0080\3\u0080\5\u0080\u09d4\n\u0080\3\u0080\3") - buf.write("\u0080\3\u0080\3\u0080\3\u0080\7\u0080\u09db\n\u0080\f") - buf.write("\u0080\16\u0080\u09de\13\u0080\5\u0080\u09e0\n\u0080\3") - buf.write("\u0080\3\u0080\3\u0080\5\u0080\u09e5\n\u0080\3\u0080\3") - buf.write("\u0080\3\u0080\7\u0080\u09ea\n\u0080\f\u0080\16\u0080") - buf.write("\u09ed\13\u0080\5\u0080\u09ef\n\u0080\3\u0081\3\u0081") - buf.write("\3\u0082\3\u0082\7\u0082\u09f5\n\u0082\f\u0082\16\u0082") - buf.write("\u09f8\13\u0082\3\u0083\3\u0083\3\u0083\3\u0083\5\u0083") - buf.write("\u09fe\n\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083") - buf.write("\5\u0083\u0a05\n\u0083\3\u0084\5\u0084\u0a08\n\u0084\3") - buf.write("\u0084\3\u0084\3\u0084\5\u0084\u0a0d\n\u0084\3\u0084\5") - buf.write("\u0084\u0a10\n\u0084\3\u0084\3\u0084\3\u0084\5\u0084\u0a15") - buf.write("\n\u0084\3\u0084\3\u0084\5\u0084\u0a19\n\u0084\3\u0084") - buf.write("\5\u0084\u0a1c\n\u0084\3\u0084\5\u0084\u0a1f\n\u0084\3") - buf.write("\u0085\3\u0085\3\u0085\3\u0085\5\u0085\u0a25\n\u0085\3") - buf.write("\u0086\3\u0086\3\u0086\5\u0086\u0a2a\n\u0086\3\u0086\3") - buf.write("\u0086\3\u0087\5\u0087\u0a2f\n\u0087\3\u0087\3\u0087\3") - buf.write("\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087") - buf.write("\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087") - buf.write("\5\u0087\u0a41\n\u0087\5\u0087\u0a43\n\u0087\3\u0087\5") - buf.write("\u0087\u0a46\n\u0087\3\u0088\3\u0088\3\u0088\3\u0088\3") - buf.write("\u0089\3\u0089\3\u0089\7\u0089\u0a4f\n\u0089\f\u0089\16") - buf.write("\u0089\u0a52\13\u0089\3\u008a\3\u008a\3\u008a\3\u008a") - buf.write("\7\u008a\u0a58\n\u008a\f\u008a\16\u008a\u0a5b\13\u008a") - buf.write("\3\u008a\3\u008a\3\u008b\3\u008b\5\u008b\u0a61\n\u008b") - buf.write("\3\u008c\3\u008c\3\u008c\3\u008c\7\u008c\u0a67\n\u008c") - buf.write("\f\u008c\16\u008c\u0a6a\13\u008c\3\u008c\3\u008c\3\u008d") - buf.write("\3\u008d\5\u008d\u0a70\n\u008d\3\u008e\3\u008e\5\u008e") - buf.write("\u0a74\n\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e") - buf.write("\3\u008e\5\u008e\u0a7c\n\u008e\3\u008e\3\u008e\3\u008e") - buf.write("\3\u008e\3\u008e\3\u008e\5\u008e\u0a84\n\u008e\3\u008e") - buf.write("\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\5\u008e\u0a8c") - buf.write("\n\u008e\3\u008e\3\u008e\3\u008e\3\u008e\5\u008e\u0a92") - buf.write("\n\u008e\3\u008f\3\u008f\3\u008f\3\u008f\7\u008f\u0a98") - buf.write("\n\u008f\f\u008f\16\u008f\u0a9b\13\u008f\3\u008f\3\u008f") - buf.write("\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090\7\u0090\u0aa4") - buf.write("\n\u0090\f\u0090\16\u0090\u0aa7\13\u0090\5\u0090\u0aa9") - buf.write("\n\u0090\3\u0090\3\u0090\3\u0090\3\u0091\5\u0091\u0aaf") - buf.write("\n\u0091\3\u0091\3\u0091\5\u0091\u0ab3\n\u0091\5\u0091") - buf.write("\u0ab5\n\u0091\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092") - buf.write("\3\u0092\3\u0092\5\u0092\u0abe\n\u0092\3\u0092\3\u0092") - buf.write("\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092") - buf.write("\3\u0092\5\u0092\u0aca\n\u0092\5\u0092\u0acc\n\u0092\3") - buf.write("\u0092\3\u0092\3\u0092\3\u0092\3\u0092\5\u0092\u0ad3\n") - buf.write("\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\5\u0092") - buf.write("\u0ada\n\u0092\3\u0092\3\u0092\3\u0092\3\u0092\5\u0092") - buf.write("\u0ae0\n\u0092\3\u0092\3\u0092\3\u0092\3\u0092\5\u0092") - buf.write("\u0ae6\n\u0092\5\u0092\u0ae8\n\u0092\3\u0093\3\u0093\3") - buf.write("\u0093\7\u0093\u0aed\n\u0093\f\u0093\16\u0093\u0af0\13") - buf.write("\u0093\3\u0094\3\u0094\3\u0094\7\u0094\u0af5\n\u0094\f") - buf.write("\u0094\16\u0094\u0af8\13\u0094\3\u0095\3\u0095\3\u0095") - buf.write("\5\u0095\u0afd\n\u0095\3\u0095\3\u0095\3\u0096\3\u0096") - buf.write("\3\u0096\5\u0096\u0b04\n\u0096\3\u0096\3\u0096\3\u0097") - buf.write("\3\u0097\5\u0097\u0b0a\n\u0097\3\u0097\3\u0097\5\u0097") - buf.write("\u0b0e\n\u0097\5\u0097\u0b10\n\u0097\3\u0098\3\u0098\3") - buf.write("\u0098\7\u0098\u0b15\n\u0098\f\u0098\16\u0098\u0b18\13") - buf.write("\u0098\3\u0099\3\u0099\3\u0099\3\u0099\7\u0099\u0b1e\n") - buf.write("\u0099\f\u0099\16\u0099\u0b21\13\u0099\3\u0099\3\u0099") - buf.write("\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\7\u009a") - buf.write("\u0b2b\n\u009a\f\u009a\16\u009a\u0b2e\13\u009a\3\u009a") - buf.write("\3\u009a\5\u009a\u0b32\n\u009a\3\u009b\3\u009b\5\u009b") - buf.write("\u0b36\n\u009b\3\u009c\3\u009c\3\u009d\3\u009d\3\u009d") - buf.write("\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d\3\u009d") - buf.write("\5\u009d\u0b44\n\u009d\5\u009d\u0b46\n\u009d\3\u009d\3") - buf.write("\u009d\3\u009d\3\u009d\3\u009d\3\u009d\7\u009d\u0b4e\n") - buf.write("\u009d\f\u009d\16\u009d\u0b51\13\u009d\3\u009e\5\u009e") - buf.write("\u0b54\n\u009e\3\u009e\3\u009e\3\u009e\3\u009e\3\u009e") - buf.write("\3\u009e\5\u009e\u0b5c\n\u009e\3\u009e\3\u009e\3\u009e") - buf.write("\3\u009e\3\u009e\7\u009e\u0b63\n\u009e\f\u009e\16\u009e") - buf.write("\u0b66\13\u009e\3\u009e\3\u009e\3\u009e\5\u009e\u0b6b") - buf.write("\n\u009e\3\u009e\3\u009e\3\u009e\3\u009e\3\u009e\3\u009e") - buf.write("\5\u009e\u0b73\n\u009e\3\u009e\3\u009e\3\u009e\5\u009e") - buf.write("\u0b78\n\u009e\3\u009e\3\u009e\3\u009e\3\u009e\3\u009e") - buf.write("\3\u009e\3\u009e\3\u009e\7\u009e\u0b82\n\u009e\f\u009e") - buf.write("\16\u009e\u0b85\13\u009e\3\u009e\3\u009e\5\u009e\u0b89") - buf.write("\n\u009e\3\u009e\5\u009e\u0b8c\n\u009e\3\u009e\3\u009e") - buf.write("\3\u009e\3\u009e\5\u009e\u0b92\n\u009e\3\u009e\3\u009e") - buf.write("\5\u009e\u0b96\n\u009e\3\u009e\3\u009e\3\u009e\5\u009e") - buf.write("\u0b9b\n\u009e\3\u009e\3\u009e\3\u009e\5\u009e\u0ba0\n") - buf.write("\u009e\3\u009e\3\u009e\3\u009e\5\u009e\u0ba5\n\u009e\3") - buf.write("\u009f\3\u009f\3\u009f\3\u009f\5\u009f\u0bab\n\u009f\3") - buf.write("\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f") + buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\5F\u0454\nF\3F\3F\3") + buf.write("F\3F\3F\3F\3F\5F\u045d\nF\3F\3F\5F\u0461\nF\3F\3F\3F\3") + buf.write("F\5F\u0467\nF\3F\3F\5F\u046b\nF\3F\3F\3F\5F\u0470\nF\3") + buf.write("F\3F\3F\3F\5F\u0476\nF\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\5") + buf.write("F\u0482\nF\3F\3F\3F\3F\3F\3F\5F\u048a\nF\3F\3F\3F\3F\5") + buf.write("F\u0490\nF\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\5F\u049d\n") + buf.write("F\3F\6F\u04a0\nF\rF\16F\u04a1\3F\3F\3F\3F\3F\3F\3F\3F") + buf.write("\3F\3F\3F\3F\3F\3F\5F\u04b2\nF\3F\3F\3F\7F\u04b7\nF\f") + buf.write("F\16F\u04ba\13F\3F\5F\u04bd\nF\3F\3F\3F\3F\5F\u04c3\n") + buf.write("F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\5F\u04d2\nF\3") + buf.write("F\3F\5F\u04d6\nF\3F\3F\3F\3F\5F\u04dc\nF\3F\3F\3F\3F\5") + buf.write("F\u04e2\nF\3F\5F\u04e5\nF\3F\5F\u04e8\nF\3F\3F\3F\3F\5") + buf.write("F\u04ee\nF\3F\3F\5F\u04f2\nF\3F\3F\3F\3F\3F\3F\7F\u04fa") + buf.write("\nF\fF\16F\u04fd\13F\3F\3F\3F\3F\3F\3F\5F\u0505\nF\3F") + buf.write("\5F\u0508\nF\3F\3F\3F\3F\3F\3F\3F\5F\u0511\nF\3F\3F\3") + buf.write("F\5F\u0516\nF\3F\3F\3F\3F\5F\u051c\nF\3F\3F\3F\3F\3F\5") + buf.write("F\u0523\nF\3F\5F\u0526\nF\3F\3F\3F\3F\5F\u052c\nF\3F\3") + buf.write("F\3F\3F\3F\3F\3F\7F\u0535\nF\fF\16F\u0538\13F\5F\u053a") + buf.write("\nF\3F\3F\5F\u053e\nF\3F\3F\3F\5F\u0543\nF\3F\3F\3F\5") + buf.write("F\u0548\nF\3F\3F\3F\3F\3F\5F\u054f\nF\3F\5F\u0552\nF\3") + buf.write("F\5F\u0555\nF\3F\3F\3F\3F\3F\5F\u055c\nF\3F\3F\3F\5F\u0561") + buf.write("\nF\3F\3F\3F\3F\3F\3F\3F\5F\u056a\nF\3F\3F\3F\3F\3F\3") + buf.write("F\5F\u0572\nF\3F\3F\3F\3F\5F\u0578\nF\3F\5F\u057b\nF\3") + buf.write("F\5F\u057e\nF\3F\3F\3F\3F\5F\u0584\nF\3F\3F\5F\u0588\n") + buf.write("F\3F\3F\5F\u058c\nF\3F\3F\5F\u0590\nF\5F\u0592\nF\3F\3") + buf.write("F\3F\3F\3F\3F\5F\u059a\nF\3F\3F\3F\3F\3F\3F\5F\u05a2\n") + buf.write("F\3F\3F\3F\3F\5F\u05a8\nF\3F\3F\3F\3F\5F\u05ae\nF\3F\5") + buf.write("F\u05b1\nF\3F\3F\5F\u05b5\nF\3F\5F\u05b8\nF\3F\3F\5F\u05bc") + buf.write("\nF\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3") + buf.write("F\3F\3F\3F\3F\7F\u05d3\nF\fF\16F\u05d6\13F\5F\u05d8\n") + buf.write("F\3F\3F\5F\u05dc\nF\3F\3F\3F\3F\5F\u05e2\nF\3F\5F\u05e5") + buf.write("\nF\3F\5F\u05e8\nF\3F\3F\3F\3F\5F\u05ee\nF\3F\3F\3F\3") + buf.write("F\3F\3F\5F\u05f6\nF\3F\3F\3F\5F\u05fb\nF\3F\3F\3F\3F\5") + buf.write("F\u0601\nF\3F\3F\3F\3F\5F\u0607\nF\3F\3F\3F\3F\3F\3F\3") + buf.write("F\3F\7F\u0611\nF\fF\16F\u0614\13F\5F\u0616\nF\3F\3F\3") + buf.write("F\7F\u061b\nF\fF\16F\u061e\13F\3F\3F\7F\u0622\nF\fF\16") + buf.write("F\u0625\13F\3F\3F\3F\7F\u062a\nF\fF\16F\u062d\13F\5F\u062f") + buf.write("\nF\3G\3G\3G\3G\3G\3G\5G\u0637\nG\3G\3G\5G\u063b\nG\3") + buf.write("G\3G\3G\3G\3G\5G\u0642\nG\3G\3G\3G\3G\3G\3G\3G\3G\3G\3") + buf.write("G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3") + buf.write("G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3") + buf.write("G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3") + buf.write("G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3") + buf.write("G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3") + buf.write("G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\5G\u06b6\n") + buf.write("G\3G\3G\3G\3G\3G\3G\5G\u06be\nG\3G\3G\3G\3G\3G\3G\5G\u06c6") + buf.write("\nG\3G\3G\3G\3G\3G\3G\3G\5G\u06cf\nG\3G\3G\3G\3G\3G\3") + buf.write("G\3G\3G\5G\u06d9\nG\3H\3H\5H\u06dd\nH\3H\5H\u06e0\nH\3") + buf.write("H\3H\3H\3H\5H\u06e6\nH\3H\3H\3I\3I\5I\u06ec\nI\3I\3I\3") + buf.write("I\3I\3J\3J\3J\3J\3J\3J\5J\u06f8\nJ\3J\3J\3J\3J\3K\3K\3") + buf.write("K\3K\3K\3K\5K\u0704\nK\3K\3K\3K\5K\u0709\nK\3L\3L\3L\3") + buf.write("M\3M\3M\3N\5N\u0712\nN\3N\3N\3N\3O\3O\3O\5O\u071a\nO\3") + buf.write("O\3O\3O\3O\3O\5O\u0721\nO\5O\u0723\nO\3O\3O\3O\5O\u0728") + buf.write("\nO\3O\3O\5O\u072c\nO\3O\3O\3O\5O\u0731\nO\3O\3O\3O\5") + buf.write("O\u0736\nO\3O\3O\3O\5O\u073b\nO\3O\5O\u073e\nO\3O\3O\3") + buf.write("O\5O\u0743\nO\3O\3O\5O\u0747\nO\3O\3O\3O\5O\u074c\nO\5") + buf.write("O\u074e\nO\3P\3P\5P\u0752\nP\3Q\3Q\3Q\3Q\3Q\7Q\u0759\n") + buf.write("Q\fQ\16Q\u075c\13Q\3Q\3Q\3R\3R\3R\5R\u0763\nR\3S\3S\3") + buf.write("T\3T\3T\3T\3T\5T\u076c\nT\3U\3U\3U\7U\u0771\nU\fU\16U") + buf.write("\u0774\13U\3V\3V\3V\3V\7V\u077a\nV\fV\16V\u077d\13V\3") + buf.write("W\3W\5W\u0781\nW\3W\5W\u0784\nW\3W\3W\3W\3W\3X\3X\3X\3") + buf.write("Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Y\7Y\u0797\nY\fY\16Y\u079a") + buf.write("\13Y\3Z\3Z\3Z\3Z\7Z\u07a0\nZ\fZ\16Z\u07a3\13Z\3Z\3Z\3") + buf.write("[\3[\5[\u07a9\n[\3[\5[\u07ac\n[\3\\\3\\\3\\\7\\\u07b1") + buf.write("\n\\\f\\\16\\\u07b4\13\\\3\\\5\\\u07b7\n\\\3]\3]\3]\3") + buf.write("]\5]\u07bd\n]\3^\3^\3^\3^\7^\u07c3\n^\f^\16^\u07c6\13") + buf.write("^\3^\3^\3_\3_\3_\3_\7_\u07ce\n_\f_\16_\u07d1\13_\3_\3") + buf.write("_\3`\3`\3`\3`\3`\3`\5`\u07db\n`\3a\3a\3a\3a\3a\5a\u07e2") + buf.write("\na\3b\3b\3b\3b\5b\u07e8\nb\3c\3c\3c\3d\3d\3d\3d\3d\3") + buf.write("d\6d\u07f3\nd\rd\16d\u07f4\3d\3d\3d\3d\3d\5d\u07fc\nd") + buf.write("\3d\3d\3d\3d\3d\5d\u0803\nd\3d\3d\3d\3d\3d\3d\3d\3d\3") + buf.write("d\3d\5d\u080f\nd\3d\3d\3d\3d\7d\u0815\nd\fd\16d\u0818") + buf.write("\13d\3d\7d\u081b\nd\fd\16d\u081e\13d\5d\u0820\nd\3e\3") + buf.write("e\3e\3e\3e\7e\u0827\ne\fe\16e\u082a\13e\5e\u082c\ne\3") + buf.write("e\3e\3e\3e\3e\7e\u0833\ne\fe\16e\u0836\13e\5e\u0838\n") + buf.write("e\3e\3e\3e\3e\3e\7e\u083f\ne\fe\16e\u0842\13e\5e\u0844") + buf.write("\ne\3e\3e\3e\3e\3e\7e\u084b\ne\fe\16e\u084e\13e\5e\u0850") + buf.write("\ne\3e\5e\u0853\ne\3e\3e\3e\5e\u0858\ne\5e\u085a\ne\3") + buf.write("f\3f\3f\3g\3g\3g\3g\3g\3g\3g\5g\u0866\ng\3g\3g\3g\3g\3") + buf.write("g\5g\u086d\ng\3g\3g\3g\3g\3g\5g\u0874\ng\3g\7g\u0877\n") + buf.write("g\fg\16g\u087a\13g\3h\3h\3h\3h\3h\5h\u0881\nh\3i\3i\5") + buf.write("i\u0885\ni\3i\3i\5i\u0889\ni\3j\3j\6j\u088d\nj\rj\16j") + buf.write("\u088e\3k\3k\5k\u0893\nk\3k\3k\3k\3k\7k\u0899\nk\fk\16") + buf.write("k\u089c\13k\3k\5k\u089f\nk\3k\5k\u08a2\nk\3k\5k\u08a5") + buf.write("\nk\3k\5k\u08a8\nk\3k\3k\5k\u08ac\nk\3l\3l\3l\5l\u08b1") + buf.write("\nl\3l\3l\3l\7l\u08b6\nl\fl\16l\u08b9\13l\3l\5l\u08bc") + buf.write("\nl\3l\5l\u08bf\nl\3l\5l\u08c2\nl\3l\5l\u08c5\nl\5l\u08c7") + buf.write("\nl\3m\5m\u08ca\nm\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\5n\u08d6") + buf.write("\nn\3n\5n\u08d9\nn\3n\3n\5n\u08dd\nn\3n\3n\3n\3n\3n\3") + buf.write("n\3n\3n\5n\u08e7\nn\3n\3n\5n\u08eb\nn\5n\u08ed\nn\3n\5") + buf.write("n\u08f0\nn\3n\3n\5n\u08f4\nn\3o\3o\7o\u08f8\no\fo\16o") + buf.write("\u08fb\13o\3o\5o\u08fe\no\3o\3o\3p\3p\3p\3q\3q\3q\3q\5") + buf.write("q\u0909\nq\3q\3q\3q\3r\3r\3r\3r\3r\5r\u0913\nr\3r\3r\3") + buf.write("r\3s\3s\3s\3s\3s\3s\3s\5s\u091f\ns\3t\3t\3t\3t\3t\3t\3") + buf.write("t\3t\3t\3t\3t\7t\u092c\nt\ft\16t\u092f\13t\3t\3t\5t\u0933") + buf.write("\nt\3u\3u\3u\7u\u0938\nu\fu\16u\u093b\13u\3v\3v\3v\3v") + buf.write("\3w\3w\3w\3x\3x\3x\3y\3y\3y\5y\u094a\ny\3y\7y\u094d\n") + buf.write("y\fy\16y\u0950\13y\3y\3y\3z\3z\3z\3z\3z\3z\7z\u095a\n") + buf.write("z\fz\16z\u095d\13z\3z\3z\5z\u0961\nz\3{\3{\3{\3{\7{\u0967") + buf.write("\n{\f{\16{\u096a\13{\3{\7{\u096d\n{\f{\16{\u0970\13{\3") + buf.write("{\5{\u0973\n{\3|\3|\3|\3|\3|\7|\u097a\n|\f|\16|\u097d") + buf.write("\13|\3|\3|\3|\3|\3|\3|\3|\3|\3|\3|\7|\u0989\n|\f|\16|") + buf.write("\u098c\13|\3|\3|\5|\u0990\n|\3|\3|\3|\3|\3|\3|\3|\3|\7") + buf.write("|\u099a\n|\f|\16|\u099d\13|\3|\3|\5|\u09a1\n|\3}\3}\3") + buf.write("}\3}\7}\u09a7\n}\f}\16}\u09aa\13}\5}\u09ac\n}\3}\3}\5") + buf.write("}\u09b0\n}\3~\3~\3~\3~\3~\3~\3~\3~\3~\3~\7~\u09bc\n~\f") + buf.write("~\16~\u09bf\13~\3~\3~\3~\3\177\3\177\3\177\3\177\3\177") + buf.write("\7\177\u09c9\n\177\f\177\16\177\u09cc\13\177\3\177\3\177") + buf.write("\5\177\u09d0\n\177\3\u0080\3\u0080\5\u0080\u09d4\n\u0080") + buf.write("\3\u0080\5\u0080\u09d7\n\u0080\3\u0081\3\u0081\3\u0081") + buf.write("\5\u0081\u09dc\n\u0081\3\u0081\3\u0081\3\u0081\3\u0081") + buf.write("\3\u0081\7\u0081\u09e3\n\u0081\f\u0081\16\u0081\u09e6") + buf.write("\13\u0081\5\u0081\u09e8\n\u0081\3\u0081\3\u0081\3\u0081") + buf.write("\5\u0081\u09ed\n\u0081\3\u0081\3\u0081\3\u0081\7\u0081") + buf.write("\u09f2\n\u0081\f\u0081\16\u0081\u09f5\13\u0081\5\u0081") + buf.write("\u09f7\n\u0081\3\u0082\3\u0082\3\u0083\3\u0083\7\u0083") + buf.write("\u09fd\n\u0083\f\u0083\16\u0083\u0a00\13\u0083\3\u0084") + buf.write("\3\u0084\3\u0084\3\u0084\5\u0084\u0a06\n\u0084\3\u0084") + buf.write("\3\u0084\3\u0084\3\u0084\3\u0084\5\u0084\u0a0d\n\u0084") + buf.write("\3\u0085\5\u0085\u0a10\n\u0085\3\u0085\3\u0085\3\u0085") + buf.write("\5\u0085\u0a15\n\u0085\3\u0085\5\u0085\u0a18\n\u0085\3") + buf.write("\u0085\3\u0085\3\u0085\5\u0085\u0a1d\n\u0085\3\u0085\3") + buf.write("\u0085\5\u0085\u0a21\n\u0085\3\u0085\5\u0085\u0a24\n\u0085") + buf.write("\3\u0085\5\u0085\u0a27\n\u0085\3\u0086\3\u0086\3\u0086") + buf.write("\3\u0086\5\u0086\u0a2d\n\u0086\3\u0087\3\u0087\3\u0087") + buf.write("\5\u0087\u0a32\n\u0087\3\u0087\3\u0087\3\u0088\5\u0088") + buf.write("\u0a37\n\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088") + buf.write("\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088\3\u0088") + buf.write("\3\u0088\3\u0088\3\u0088\3\u0088\5\u0088\u0a49\n\u0088") + buf.write("\5\u0088\u0a4b\n\u0088\3\u0088\5\u0088\u0a4e\n\u0088\3") + buf.write("\u0089\3\u0089\3\u0089\3\u0089\3\u008a\3\u008a\3\u008a") + buf.write("\7\u008a\u0a57\n\u008a\f\u008a\16\u008a\u0a5a\13\u008a") + buf.write("\3\u008b\3\u008b\3\u008b\3\u008b\7\u008b\u0a60\n\u008b") + buf.write("\f\u008b\16\u008b\u0a63\13\u008b\3\u008b\3\u008b\3\u008c") + buf.write("\3\u008c\5\u008c\u0a69\n\u008c\3\u008d\3\u008d\3\u008d") + buf.write("\3\u008d\7\u008d\u0a6f\n\u008d\f\u008d\16\u008d\u0a72") + buf.write("\13\u008d\3\u008d\3\u008d\3\u008e\3\u008e\5\u008e\u0a78") + buf.write("\n\u008e\3\u008f\3\u008f\5\u008f\u0a7c\n\u008f\3\u008f") + buf.write("\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u008f\u0a84") + buf.write("\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f") + buf.write("\5\u008f\u0a8c\n\u008f\3\u008f\3\u008f\3\u008f\3\u008f") + buf.write("\3\u008f\3\u008f\5\u008f\u0a94\n\u008f\3\u008f\3\u008f") + buf.write("\3\u008f\3\u008f\5\u008f\u0a9a\n\u008f\3\u0090\3\u0090") + buf.write("\3\u0090\3\u0090\7\u0090\u0aa0\n\u0090\f\u0090\16\u0090") + buf.write("\u0aa3\13\u0090\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091") + buf.write("\3\u0091\3\u0091\7\u0091\u0aac\n\u0091\f\u0091\16\u0091") + buf.write("\u0aaf\13\u0091\5\u0091\u0ab1\n\u0091\3\u0091\3\u0091") + buf.write("\3\u0091\3\u0092\5\u0092\u0ab7\n\u0092\3\u0092\3\u0092") + buf.write("\5\u0092\u0abb\n\u0092\5\u0092\u0abd\n\u0092\3\u0093\3") + buf.write("\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\5\u0093") + buf.write("\u0ac6\n\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093") + buf.write("\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\5\u0093\u0ad2") + buf.write("\n\u0093\5\u0093\u0ad4\n\u0093\3\u0093\3\u0093\3\u0093") + buf.write("\3\u0093\3\u0093\5\u0093\u0adb\n\u0093\3\u0093\3\u0093") + buf.write("\3\u0093\3\u0093\3\u0093\5\u0093\u0ae2\n\u0093\3\u0093") + buf.write("\3\u0093\3\u0093\3\u0093\5\u0093\u0ae8\n\u0093\3\u0093") + buf.write("\3\u0093\3\u0093\3\u0093\5\u0093\u0aee\n\u0093\5\u0093") + buf.write("\u0af0\n\u0093\3\u0094\3\u0094\3\u0094\7\u0094\u0af5\n") + buf.write("\u0094\f\u0094\16\u0094\u0af8\13\u0094\3\u0095\3\u0095") + buf.write("\3\u0095\7\u0095\u0afd\n\u0095\f\u0095\16\u0095\u0b00") + buf.write("\13\u0095\3\u0096\3\u0096\3\u0096\5\u0096\u0b05\n\u0096") + buf.write("\3\u0096\3\u0096\3\u0097\3\u0097\3\u0097\5\u0097\u0b0c") + buf.write("\n\u0097\3\u0097\3\u0097\3\u0098\3\u0098\5\u0098\u0b12") + buf.write("\n\u0098\3\u0098\3\u0098\5\u0098\u0b16\n\u0098\5\u0098") + buf.write("\u0b18\n\u0098\3\u0099\3\u0099\3\u0099\7\u0099\u0b1d\n") + buf.write("\u0099\f\u0099\16\u0099\u0b20\13\u0099\3\u009a\3\u009a") + buf.write("\3\u009a\3\u009a\7\u009a\u0b26\n\u009a\f\u009a\16\u009a") + buf.write("\u0b29\13\u009a\3\u009a\3\u009a\3\u009b\3\u009b\3\u009b") + buf.write("\3\u009b\3\u009b\3\u009b\7\u009b\u0b33\n\u009b\f\u009b") + buf.write("\16\u009b\u0b36\13\u009b\3\u009b\3\u009b\5\u009b\u0b3a") + buf.write("\n\u009b\3\u009c\3\u009c\5\u009c\u0b3e\n\u009c\3\u009d") + buf.write("\3\u009d\3\u009e\3\u009e\3\u009e\3\u009e\3\u009e\3\u009e") + buf.write("\3\u009e\3\u009e\3\u009e\3\u009e\5\u009e\u0b4c\n\u009e") + buf.write("\5\u009e\u0b4e\n\u009e\3\u009e\3\u009e\3\u009e\3\u009e") + buf.write("\3\u009e\3\u009e\7\u009e\u0b56\n\u009e\f\u009e\16\u009e") + buf.write("\u0b59\13\u009e\3\u009f\5\u009f\u0b5c\n\u009f\3\u009f") + buf.write("\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\5\u009f\u0b64") + buf.write("\n\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\7\u009f") + buf.write("\u0b6b\n\u009f\f\u009f\16\u009f\u0b6e\13\u009f\3\u009f") + buf.write("\3\u009f\3\u009f\5\u009f\u0b73\n\u009f\3\u009f\3\u009f") + buf.write("\3\u009f\3\u009f\3\u009f\3\u009f\5\u009f\u0b7b\n\u009f") + buf.write("\3\u009f\3\u009f\3\u009f\5\u009f\u0b80\n\u009f\3\u009f") buf.write("\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f") - buf.write("\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\7\u009f\u0bc0") - buf.write("\n\u009f\f\u009f\16\u009f\u0bc3\13\u009f\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\6\u00a0\u0bc9\n\u00a0\r\u00a0\16\u00a0") - buf.write("\u0bca\3\u00a0\3\u00a0\5\u00a0\u0bcf\n\u00a0\3\u00a0\3") - buf.write("\u00a0\3\u00a0\3\u00a0\3\u00a0\6\u00a0\u0bd6\n\u00a0\r") - buf.write("\u00a0\16\u00a0\u0bd7\3\u00a0\3\u00a0\5\u00a0\u0bdc\n") + buf.write("\7\u009f\u0b8a\n\u009f\f\u009f\16\u009f\u0b8d\13\u009f") + buf.write("\3\u009f\3\u009f\5\u009f\u0b91\n\u009f\3\u009f\5\u009f") + buf.write("\u0b94\n\u009f\3\u009f\3\u009f\3\u009f\3\u009f\5\u009f") + buf.write("\u0b9a\n\u009f\3\u009f\3\u009f\5\u009f\u0b9e\n\u009f\3") + buf.write("\u009f\3\u009f\3\u009f\5\u009f\u0ba3\n\u009f\3\u009f\3") + buf.write("\u009f\3\u009f\5\u009f\u0ba8\n\u009f\3\u009f\3\u009f\3") + buf.write("\u009f\5\u009f\u0bad\n\u009f\3\u00a0\3\u00a0\3\u00a0\3") + buf.write("\u00a0\5\u00a0\u0bb3\n\u00a0\3\u00a0\3\u00a0\3\u00a0\3") buf.write("\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\7\u00a0\u0bec\n\u00a0\f\u00a0\16\u00a0\u0bef") - buf.write("\13\u00a0\5\u00a0\u0bf1\n\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\5\u00a0\u0bf9\n\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\5\u00a0") - buf.write("\u0c02\n\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\6\u00a0\u0c17\n\u00a0\r\u00a0\16\u00a0\u0c18\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\5\u00a0\u0c24\n\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\7\u00a0\u0c29\n\u00a0\f\u00a0\16\u00a0\u0c2c\13\u00a0") - buf.write("\5\u00a0\u0c2e\n\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\5\u00a0\u0c37\n\u00a0\3\u00a0") - buf.write("\3\u00a0\5\u00a0\u0c3b\n\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\6\u00a0\u0c45") - buf.write("\n\u00a0\r\u00a0\16\u00a0\u0c46\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\5\u00a0") - buf.write("\u0c60\n\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\5\u00a0\u0c67\n\u00a0\3\u00a0\5\u00a0\u0c6a\n\u00a0\3") - buf.write("\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\5\u00a0") - buf.write("\u0c79\n\u00a0\3\u00a0\3\u00a0\5\u00a0\u0c7d\n\u00a0\3") - buf.write("\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0\3\u00a0") - buf.write("\3\u00a0\7\u00a0\u0c87\n\u00a0\f\u00a0\16\u00a0\u0c8a") - buf.write("\13\u00a0\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") - buf.write("\3\u00a1\3\u00a1\6\u00a1\u0c94\n\u00a1\r\u00a1\16\u00a1") - buf.write("\u0c95\5\u00a1\u0c98\n\u00a1\3\u00a2\3\u00a2\3\u00a2\3") - buf.write("\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u0ca2\n") - buf.write("\u00a2\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a5\3\u00a5") - buf.write("\3\u00a6\3\u00a6\3\u00a7\3\u00a7\3\u00a7\5\u00a7\u0caf") - buf.write("\n\u00a7\3\u00a8\3\u00a8\5\u00a8\u0cb3\n\u00a8\3\u00a9") - buf.write("\3\u00a9\3\u00a9\6\u00a9\u0cb8\n\u00a9\r\u00a9\16\u00a9") - buf.write("\u0cb9\3\u00aa\3\u00aa\3\u00aa\5\u00aa\u0cbf\n\u00aa\3") - buf.write("\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ac\5\u00ac") - buf.write("\u0cc7\n\u00ac\3\u00ac\3\u00ac\5\u00ac\u0ccb\n\u00ac\3") - buf.write("\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ad\3\u00ad") - buf.write("\5\u00ad\u0cd4\n\u00ad\3\u00ae\3\u00ae\3\u00ae\5\u00ae") - buf.write("\u0cd9\n\u00ae\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af") - buf.write("\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af\3\u00af") - buf.write("\3\u00af\3\u00af\3\u00af\5\u00af\u0cea\n\u00af\3\u00af") - buf.write("\3\u00af\5\u00af\u0cee\n\u00af\3\u00af\3\u00af\3\u00af") - buf.write("\3\u00af\3\u00af\7\u00af\u0cf5\n\u00af\f\u00af\16\u00af") - buf.write("\u0cf8\13\u00af\3\u00af\5\u00af\u0cfb\n\u00af\5\u00af") - buf.write("\u0cfd\n\u00af\3\u00b0\3\u00b0\3\u00b0\7\u00b0\u0d02\n") - buf.write("\u00b0\f\u00b0\16\u00b0\u0d05\13\u00b0\3\u00b1\3\u00b1") - buf.write("\3\u00b1\3\u00b1\5\u00b1\u0d0b\n\u00b1\3\u00b1\5\u00b1") - buf.write("\u0d0e\n\u00b1\3\u00b1\5\u00b1\u0d11\n\u00b1\3\u00b2\3") - buf.write("\u00b2\3\u00b2\7\u00b2\u0d16\n\u00b2\f\u00b2\16\u00b2") - buf.write("\u0d19\13\u00b2\3\u00b3\3\u00b3\3\u00b3\3\u00b3\5\u00b3") - buf.write("\u0d1f\n\u00b3\3\u00b3\5\u00b3\u0d22\n\u00b3\3\u00b4\3") - buf.write("\u00b4\3\u00b4\7\u00b4\u0d27\n\u00b4\f\u00b4\16\u00b4") - buf.write("\u0d2a\13\u00b4\3\u00b5\3\u00b5\3\u00b5\3\u00b5\3\u00b5") - buf.write("\5\u00b5\u0d31\n\u00b5\3\u00b5\5\u00b5\u0d34\n\u00b5\3") - buf.write("\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b6\3\u00b7\3\u00b7") - buf.write("\3\u00b7\3\u00b7\7\u00b7\u0d3f\n\u00b7\f\u00b7\16\u00b7") - buf.write("\u0d42\13\u00b7\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b9") - buf.write("\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9") - buf.write("\3\u00b9\3\u00b9\3\u00b9\7\u00b9\u0d53\n\u00b9\f\u00b9") - buf.write("\16\u00b9\u0d56\13\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9") - buf.write("\3\u00b9\7\u00b9\u0d5d\n\u00b9\f\u00b9\16\u00b9\u0d60") - buf.write("\13\u00b9\5\u00b9\u0d62\n\u00b9\3\u00b9\3\u00b9\3\u00b9") - buf.write("\3\u00b9\3\u00b9\7\u00b9\u0d69\n\u00b9\f\u00b9\16\u00b9") - buf.write("\u0d6c\13\u00b9\5\u00b9\u0d6e\n\u00b9\5\u00b9\u0d70\n") - buf.write("\u00b9\3\u00b9\5\u00b9\u0d73\n\u00b9\3\u00b9\5\u00b9\u0d76") - buf.write("\n\u00b9\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba") - buf.write("\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba") - buf.write("\3\u00ba\3\u00ba\3\u00ba\5\u00ba\u0d88\n\u00ba\3\u00bb") - buf.write("\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\5\u00bb") - buf.write("\u0d91\n\u00bb\3\u00bc\3\u00bc\3\u00bc\7\u00bc\u0d96\n") - buf.write("\u00bc\f\u00bc\16\u00bc\u0d99\13\u00bc\3\u00bd\3\u00bd") - buf.write("\3\u00bd\3\u00bd\5\u00bd\u0d9f\n\u00bd\3\u00be\3\u00be") - buf.write("\3\u00be\7\u00be\u0da4\n\u00be\f\u00be\16\u00be\u0da7") - buf.write("\13\u00be\3\u00bf\3\u00bf\3\u00bf\3\u00c0\3\u00c0\6\u00c0") - buf.write("\u0dae\n\u00c0\r\u00c0\16\u00c0\u0daf\3\u00c0\5\u00c0") - buf.write("\u0db3\n\u00c0\3\u00c1\3\u00c1\3\u00c1\5\u00c1\u0db8\n") - buf.write("\u00c1\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2\3\u00c2") - buf.write("\5\u00c2\u0dc0\n\u00c2\3\u00c3\3\u00c3\3\u00c4\3\u00c4") - buf.write("\5\u00c4\u0dc6\n\u00c4\3\u00c4\3\u00c4\3\u00c4\5\u00c4") - buf.write("\u0dcb\n\u00c4\3\u00c4\3\u00c4\3\u00c4\5\u00c4\u0dd0\n") - buf.write("\u00c4\3\u00c4\3\u00c4\5\u00c4\u0dd4\n\u00c4\3\u00c4\3") - buf.write("\u00c4\5\u00c4\u0dd8\n\u00c4\3\u00c4\3\u00c4\5\u00c4\u0ddc") - buf.write("\n\u00c4\3\u00c4\3\u00c4\5\u00c4\u0de0\n\u00c4\3\u00c4") - buf.write("\3\u00c4\5\u00c4\u0de4\n\u00c4\3\u00c4\3\u00c4\5\u00c4") - buf.write("\u0de8\n\u00c4\3\u00c4\5\u00c4\u0deb\n\u00c4\3\u00c5\3") - buf.write("\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5\3\u00c5\5\u00c5") - buf.write("\u0df4\n\u00c5\3\u00c6\3\u00c6\3\u00c7\3\u00c7\3\u00c8") - buf.write("\3\u00c8\3\u00c8\7\u05cc\u060a\u0614\u061b\u0623\7H\u00ca") - buf.write("\u0138\u013c\u013e\u00c9\2\4\6\b\n\f\16\20\22\24\26\30") - buf.write("\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`b") - buf.write("dfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c") - buf.write("\u008e\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e") - buf.write("\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0") - buf.write("\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2") - buf.write("\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4") - buf.write("\u00d6\u00d8\u00da\u00dc\u00de\u00e0\u00e2\u00e4\u00e6") - buf.write("\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8") - buf.write("\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a") - buf.write("\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c") - buf.write("\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e") - buf.write("\u0130\u0132\u0134\u0136\u0138\u013a\u013c\u013e\u0140") - buf.write("\u0142\u0144\u0146\u0148\u014a\u014c\u014e\u0150\u0152") - buf.write("\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164") - buf.write("\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176") - buf.write("\u0178\u017a\u017c\u017e\u0180\u0182\u0184\u0186\u0188") - buf.write("\u018a\u018c\u018e\2\63\5\2##\u00c8\u00c8\u0109\u0109") - buf.write("\3\2$&\4\2\4\4\u0127\u0127\3\2\23\25\3\2\u0130\u0133\4") - buf.write("\2\66\66dd\5\2\f\rxx\u0110\u0110\4\2\16\16\u00b9\u00b9") - buf.write("\4\2``\u00d3\u00d3\4\2??\u00e1\u00e1\4\2^^\u00b5\u00b5") - buf.write("\4\2\u0083\u0083\u0090\u0090\3\2JK\4\2\u0102\u0102\u0120") - buf.write("\u0120\4\2..BB\7\2GGSSuu\u0082\u0082\u00ac\u00ac\3\2d") - buf.write("e\4\2uu\u0082\u0082\4\2\u00b9\u00b9\u013b\u013b\4\2++") - buf.write("\u00a6\u00a6\5\2]]\u00b4\u00b4\u00eb\u00eb\6\2pp\u0097") - buf.write("\u0097\u00f4\u00f4\u0116\u0116\5\2pp\u00f4\u00f4\u0116") - buf.write("\u0116\4\2}}\u009e\u009e\4\2--ii\4\2\u013f\u013f\u0141") - buf.write("\u0141\5\2--\62\62\u00f8\u00f8\5\2xx\u0110\u0110\u0118") - buf.write("\u0118\4\2\u0130\u0131\u0136\u0136\3\2\u0132\u0135\4\2") - buf.write("\u0130\u0131\u0139\u0139\4\2XXZZ\3\2\u0100\u0101\4\2\3") - buf.write("\3\u0083\u0083\4\2\3\3\177\177\5\2::\u00a1\u00a1\u010b") - buf.write("\u010b\3\2\u0127\u0128\3\2\u0130\u013a\6\2\60\60\u0090") - buf.write("\u0090\u00b8\u00b8\u00c0\u00c0\4\2xx\u0110\u0110\3\2\u0130") - buf.write("\u0131\4\2jj\u00c9\u00c9\4\2\u00c1\u00c1\u00f9\u00f9\4") - buf.write("\2~~\u00d0\u00d0\3\2\u0140\u0141\4\2kk\u00f3\u00f3\65") - buf.write("\2+,./\63\64\66\6799;?BBDGIIKQSSVW\\^`hjkooqwzz|~\u0081") - buf.write("\u0082\u0085\u0087\u008a\u008a\u008d\u008f\u0091\u0092") - buf.write("\u0094\u0096\u0098\u0098\u009b\u009b\u009d\u00a0\u00a3") - buf.write("\u00b0\u00b3\u00b5\u00b7\u00b7\u00ba\u00bb\u00be\u00bf") - buf.write("\u00c2\u00c2\u00c4\u00c5\u00c7\u00d0\u00d2\u00da\u00dc") - buf.write("\u00e2\u00e4\u00eb\u00ef\u00f1\u00f3\u00f3\u00f5\u00f7") - buf.write("\u00f9\u0101\u0103\u0107\u010a\u010a\u010c\u0111\u0113") - buf.write("\u0115\u0119\u011c\u011f\u0121\u0124\u0124\u0135\u0135") - buf.write("\21\2\61\61UUpp\u0084\u0084\u0093\u0093\u0097\u0097\u009c") - buf.write("\u009c\u00a2\u00a2\u00b6\u00b6\u00bc\u00bc\u00e3\u00e3") - buf.write("\u00ee\u00ee\u00f4\u00f4\u0116\u0116\u011e\u011e\23\2") - buf.write("+\60\62TVoq\u0083\u0085\u0092\u0094\u0096\u0098\u009b") - buf.write("\u009d\u00a1\u00a3\u00b5\u00b7\u00bb\u00bd\u00e2\u00e4") - buf.write("\u00ed\u00ef\u00f3\u00f5\u0115\u0117\u011d\u011f\u0126") - buf.write("\u0135\u0135\2\u0ff7\2\u0191\3\2\2\2\4\u0197\3\2\2\2\6") - buf.write("\u019e\3\2\2\2\b\u01a2\3\2\2\2\n\u01a5\3\2\2\2\f\u01b2") - buf.write("\3\2\2\2\16\u01c1\3\2\2\2\20\u01c3\3\2\2\2\22\u01cc\3") - buf.write("\2\2\2\24\u01d5\3\2\2\2\26\u01e2\3\2\2\2\30\u01e5\3\2") - buf.write("\2\2\32\u01ed\3\2\2\2\34\u01f9\3\2\2\2\36\u0205\3\2\2") - buf.write("\2 \u0214\3\2\2\2\"\u0226\3\2\2\2$\u022a\3\2\2\2&\u022c") - buf.write("\3\2\2\2(\u022e\3\2\2\2*\u0230\3\2\2\2,\u0237\3\2\2\2") - buf.write(".\u0239\3\2\2\2\60\u023b\3\2\2\2\62\u024d\3\2\2\2\64\u024f") - buf.write("\3\2\2\2\66\u0258\3\2\2\28\u025a\3\2\2\2:\u0260\3\2\2") - buf.write("\2<\u0262\3\2\2\2>\u026b\3\2\2\2@\u0274\3\2\2\2B\u0284") - buf.write("\3\2\2\2D\u029d\3\2\2\2F\u029f\3\2\2\2H\u02a7\3\2\2\2") - buf.write("J\u02bb\3\2\2\2L\u02c3\3\2\2\2N\u02c5\3\2\2\2P\u02cd\3") - buf.write("\2\2\2R\u02d5\3\2\2\2T\u02d9\3\2\2\2V\u02db\3\2\2\2X\u02e5") - buf.write("\3\2\2\2Z\u02e7\3\2\2\2\\\u02ef\3\2\2\2^\u02f3\3\2\2\2") - buf.write("`\u02fe\3\2\2\2b\u0300\3\2\2\2d\u0314\3\2\2\2f\u0316\3") - buf.write("\2\2\2h\u031e\3\2\2\2j\u0324\3\2\2\2l\u0336\3\2\2\2n\u033e") - buf.write("\3\2\2\2p\u0340\3\2\2\2r\u0342\3\2\2\2t\u0344\3\2\2\2") - buf.write("v\u0346\3\2\2\2x\u0348\3\2\2\2z\u034a\3\2\2\2|\u0353\3") - buf.write("\2\2\2~\u0356\3\2\2\2\u0080\u0359\3\2\2\2\u0082\u035c") - buf.write("\3\2\2\2\u0084\u035f\3\2\2\2\u0086\u0362\3\2\2\2\u0088") - buf.write("\u0626\3\2\2\2\u008a\u06d0\3\2\2\2\u008c\u06d2\3\2\2\2") - buf.write("\u008e\u06e3\3\2\2\2\u0090\u06e9\3\2\2\2\u0092\u06f5\3") - buf.write("\2\2\2\u0094\u0702\3\2\2\2\u0096\u0705\3\2\2\2\u0098\u0709") - buf.write("\3\2\2\2\u009a\u0745\3\2\2\2\u009c\u0747\3\2\2\2\u009e") - buf.write("\u074b\3\2\2\2\u00a0\u0757\3\2\2\2\u00a2\u075c\3\2\2\2") - buf.write("\u00a4\u0763\3\2\2\2\u00a6\u0765\3\2\2\2\u00a8\u076d\3") - buf.write("\2\2\2\u00aa\u0776\3\2\2\2\u00ac\u0781\3\2\2\2\u00ae\u0790") - buf.write("\3\2\2\2\u00b0\u0793\3\2\2\2\u00b2\u079e\3\2\2\2\u00b4") - buf.write("\u07ae\3\2\2\2\u00b6\u07b4\3\2\2\2\u00b8\u07b6\3\2\2\2") - buf.write("\u00ba\u07c1\3\2\2\2\u00bc\u07d2\3\2\2\2\u00be\u07d9\3") - buf.write("\2\2\2\u00c0\u07db\3\2\2\2\u00c2\u07e1\3\2\2\2\u00c4\u0817") - buf.write("\3\2\2\2\u00c6\u0823\3\2\2\2\u00c8\u0853\3\2\2\2\u00ca") - buf.write("\u0856\3\2\2\2\u00cc\u0878\3\2\2\2\u00ce\u087a\3\2\2\2") - buf.write("\u00d0\u0882\3\2\2\2\u00d2\u08a3\3\2\2\2\u00d4\u08be\3") - buf.write("\2\2\2\u00d6\u08c1\3\2\2\2\u00d8\u08cd\3\2\2\2\u00da\u08ed") - buf.write("\3\2\2\2\u00dc\u08f9\3\2\2\2\u00de\u08fc\3\2\2\2\u00e0") - buf.write("\u0905\3\2\2\2\u00e2\u0916\3\2\2\2\u00e4\u092a\3\2\2\2") - buf.write("\u00e6\u092c\3\2\2\2\u00e8\u0934\3\2\2\2\u00ea\u0938\3") - buf.write("\2\2\2\u00ec\u093b\3\2\2\2\u00ee\u093e\3\2\2\2\u00f0\u0958") - buf.write("\3\2\2\2\u00f2\u095a\3\2\2\2\u00f4\u0998\3\2\2\2\u00f6") - buf.write("\u09a7\3\2\2\2\u00f8\u09a9\3\2\2\2\u00fa\u09c7\3\2\2\2") - buf.write("\u00fc\u09c9\3\2\2\2\u00fe\u09d0\3\2\2\2\u0100\u09f0\3") - buf.write("\2\2\2\u0102\u09f2\3\2\2\2\u0104\u0a04\3\2\2\2\u0106\u0a1e") - buf.write("\3\2\2\2\u0108\u0a24\3\2\2\2\u010a\u0a26\3\2\2\2\u010c") - buf.write("\u0a45\3\2\2\2\u010e\u0a47\3\2\2\2\u0110\u0a4b\3\2\2\2") - buf.write("\u0112\u0a53\3\2\2\2\u0114\u0a5e\3\2\2\2\u0116\u0a62\3") - buf.write("\2\2\2\u0118\u0a6d\3\2\2\2\u011a\u0a91\3\2\2\2\u011c\u0a93") - buf.write("\3\2\2\2\u011e\u0a9e\3\2\2\2\u0120\u0ab4\3\2\2\2\u0122") - buf.write("\u0ae7\3\2\2\2\u0124\u0ae9\3\2\2\2\u0126\u0af1\3\2\2\2") - buf.write("\u0128\u0afc\3\2\2\2\u012a\u0b03\3\2\2\2\u012c\u0b07\3") - buf.write("\2\2\2\u012e\u0b11\3\2\2\2\u0130\u0b19\3\2\2\2\u0132\u0b31") - buf.write("\3\2\2\2\u0134\u0b35\3\2\2\2\u0136\u0b37\3\2\2\2\u0138") - buf.write("\u0b45\3\2\2\2\u013a\u0ba4\3\2\2\2\u013c\u0baa\3\2\2\2") - buf.write("\u013e\u0c7c\3\2\2\2\u0140\u0c97\3\2\2\2\u0142\u0ca1\3") - buf.write("\2\2\2\u0144\u0ca3\3\2\2\2\u0146\u0ca5\3\2\2\2\u0148\u0ca7") - buf.write("\3\2\2\2\u014a\u0ca9\3\2\2\2\u014c\u0cab\3\2\2\2\u014e") - buf.write("\u0cb0\3\2\2\2\u0150\u0cb7\3\2\2\2\u0152\u0cbb\3\2\2\2") - buf.write("\u0154\u0cc0\3\2\2\2\u0156\u0cca\3\2\2\2\u0158\u0cd3\3") - buf.write("\2\2\2\u015a\u0cd8\3\2\2\2\u015c\u0cfc\3\2\2\2\u015e\u0cfe") - buf.write("\3\2\2\2\u0160\u0d06\3\2\2\2\u0162\u0d12\3\2\2\2\u0164") - buf.write("\u0d1a\3\2\2\2\u0166\u0d23\3\2\2\2\u0168\u0d2b\3\2\2\2") - buf.write("\u016a\u0d35\3\2\2\2\u016c\u0d3a\3\2\2\2\u016e\u0d43\3") - buf.write("\2\2\2\u0170\u0d75\3\2\2\2\u0172\u0d87\3\2\2\2\u0174\u0d90") - buf.write("\3\2\2\2\u0176\u0d92\3\2\2\2\u0178\u0d9e\3\2\2\2\u017a") - buf.write("\u0da0\3\2\2\2\u017c\u0da8\3\2\2\2\u017e\u0db2\3\2\2\2") - buf.write("\u0180\u0db7\3\2\2\2\u0182\u0dbf\3\2\2\2\u0184\u0dc1\3") - buf.write("\2\2\2\u0186\u0dea\3\2\2\2\u0188\u0df3\3\2\2\2\u018a\u0df5") - buf.write("\3\2\2\2\u018c\u0df7\3\2\2\2\u018e\u0df9\3\2\2\2\u0190") - buf.write("\u0192\5\6\4\2\u0191\u0190\3\2\2\2\u0192\u0193\3\2\2\2") - buf.write("\u0193\u0191\3\2\2\2\u0193\u0194\3\2\2\2\u0194\u0195\3") - buf.write("\2\2\2\u0195\u0196\7\2\2\3\u0196\3\3\2\2\2\u0197\u0198") - buf.write("\5\6\4\2\u0198\u0199\7\2\2\3\u0199\5\3\2\2\2\u019a\u019f") - buf.write("\5\b\5\2\u019b\u019f\5\34\17\2\u019c\u019f\5\36\20\2\u019d") - buf.write("\u019f\5 \21\2\u019e\u019a\3\2\2\2\u019e\u019b\3\2\2\2") - buf.write("\u019e\u019c\3\2\2\2\u019e\u019d\3\2\2\2\u019f\7\3\2\2") - buf.write("\2\u01a0\u01a3\5\f\7\2\u01a1\u01a3\5\n\6\2\u01a2\u01a0") - buf.write("\3\2\2\2\u01a2\u01a1\3\2\2\2\u01a3\t\3\2\2\2\u01a4\u01a6") - buf.write("\58\35\2\u01a5\u01a4\3\2\2\2\u01a5\u01a6\3\2\2\2\u01a6") - buf.write("\u01a8\3\2\2\2\u01a7\u01a9\5D#\2\u01a8\u01a7\3\2\2\2\u01a8") - buf.write("\u01a9\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01ac\5\u0098") - buf.write("M\2\u01ab\u01ad\5,\27\2\u01ac\u01ab\3\2\2\2\u01ac\u01ad") - buf.write("\3\2\2\2\u01ad\u01af\3\2\2\2\u01ae\u01b0\5\60\31\2\u01af") - buf.write("\u01ae\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\13\3\2\2\2\u01b1") - buf.write("\u01b3\58\35\2\u01b2\u01b1\3\2\2\2\u01b2\u01b3\3\2\2\2") - buf.write("\u01b3\u01b4\3\2\2\2\u01b4\u01b6\5\16\b\2\u01b5\u01b7") - buf.write("\5,\27\2\u01b6\u01b5\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b7") - buf.write("\u01b9\3\2\2\2\u01b8\u01ba\5\60\31\2\u01b9\u01b8\3\2\2") - buf.write("\2\u01b9\u01ba\3\2\2\2\u01ba\r\3\2\2\2\u01bb\u01c2\5\20") - buf.write("\t\2\u01bc\u01c2\5\22\n\2\u01bd\u01c2\5\24\13\2\u01be") - buf.write("\u01c2\5\26\f\2\u01bf\u01c2\5\30\r\2\u01c0\u01c2\5\32") - buf.write("\16\2\u01c1\u01bb\3\2\2\2\u01c1\u01bc\3\2\2\2\u01c1\u01bd") - buf.write("\3\2\2\2\u01c1\u01be\3\2\2\2\u01c1\u01bf\3\2\2\2\u01c1") - buf.write("\u01c0\3\2\2\2\u01c2\17\3\2\2\2\u01c3\u01c5\7\u010e\2") - buf.write("\2\u01c4\u01c6\5\62\32\2\u01c5\u01c4\3\2\2\2\u01c5\u01c6") - buf.write("\3\2\2\2\u01c6\u01c8\3\2\2\2\u01c7\u01c9\5D#\2\u01c8\u01c7") - buf.write("\3\2\2\2\u01c8\u01c9\3\2\2\2\u01c9\u01ca\3\2\2\2\u01ca") - buf.write("\u01cb\5<\37\2\u01cb\21\3\2\2\2\u01cc\u01ce\7\32\2\2\u01cd") - buf.write("\u01cf\5\62\32\2\u01ce\u01cd\3\2\2\2\u01ce\u01cf\3\2\2") - buf.write("\2\u01cf\u01d1\3\2\2\2\u01d0\u01d2\5D#\2\u01d1\u01d0\3") - buf.write("\2\2\2\u01d1\u01d2\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\u01d4") - buf.write("\5> \2\u01d4\23\3\2\2\2\u01d5\u01d6\7\37\2\2\u01d6\u01d8") - buf.write("\5\62\32\2\u01d7\u01d9\5B\"\2\u01d8\u01d7\3\2\2\2\u01d8") - buf.write("\u01d9\3\2\2\2\u01d9\u01dc\3\2\2\2\u01da\u01db\7=\2\2") - buf.write("\u01db\u01dd\5N(\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2") - buf.write("\2\2\u01dd\u01e0\3\2\2\2\u01de\u01df\7\26\2\2\u01df\u01e1") - buf.write("\5P)\2\u01e0\u01de\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1\25") - buf.write("\3\2\2\2\u01e2\u01e3\7T\2\2\u01e3\u01e4\5> \2\u01e4\27") - buf.write("\3\2\2\2\u01e5\u01e7\7T\2\2\u01e6\u01e8\7\\\2\2\u01e7") - buf.write("\u01e6\3\2\2\2\u01e7\u01e8\3\2\2\2\u01e8\u01e9\3\2\2\2") - buf.write("\u01e9\u01ea\5l\67\2\u01ea\u01eb\7\u00eb\2\2\u01eb\u01ec") - buf.write("\5Z.\2\u01ec\31\3\2\2\2\u01ed\u01ef\7\u00a7\2\2\u01ee") - buf.write("\u01f0\5(\25\2\u01ef\u01ee\3\2\2\2\u01ef\u01f0\3\2\2\2") - buf.write("\u01f0\u01f1\3\2\2\2\u01f1\u01f3\5*\26\2\u01f2\u01f4\5") - buf.write("L\'\2\u01f3\u01f2\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f7") - buf.write("\3\2\2\2\u01f5\u01f6\7K\2\2\u01f6\u01f8\5$\23\2\u01f7") - buf.write("\u01f5\3\2\2\2\u01f7\u01f8\3\2\2\2\u01f8\33\3\2\2\2\u01f9") - buf.write("\u01fb\7\33\2\2\u01fa\u01fc\5\62\32\2\u01fb\u01fa\3\2") - buf.write("\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fe\3\2\2\2\u01fd\u01ff") - buf.write("\5D#\2\u01fe\u01fd\3\2\2\2\u01fe\u01ff\3\2\2\2\u01ff\u0200") - buf.write("\3\2\2\2\u0200\u0201\7\u011e\2\2\u0201\u0203\5@!\2\u0202") - buf.write("\u0204\5L\'\2\u0203\u0202\3\2\2\2\u0203\u0204\3\2\2\2") - buf.write("\u0204\35\3\2\2\2\u0205\u0207\7 \2\2\u0206\u0208\5\62") - buf.write("\32\2\u0207\u0206\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u020b") - buf.write("\3\2\2\2\u0209\u020a\7\u00ea\2\2\u020a\u020c\7\u013f\2") - buf.write("\2\u020b\u0209\3\2\2\2\u020b\u020c\3\2\2\2\u020c\u020e") - buf.write("\3\2\2\2\u020d\u020f\7\34\2\2\u020e\u020d\3\2\2\2\u020e") - buf.write("\u020f\3\2\2\2\u020f\u0212\3\2\2\2\u0210\u0211\7!\2\2") - buf.write("\u0211\u0213\7\u013b\2\2\u0212\u0210\3\2\2\2\u0212\u0213") - buf.write("\3\2\2\2\u0213\37\3\2\2\2\u0214\u0216\7\"\2\2\u0215\u0217") - buf.write("\5\66\34\2\u0216\u0215\3\2\2\2\u0216\u0217\3\2\2\2\u0217") - buf.write("\u0219\3\2\2\2\u0218\u021a\5D#\2\u0219\u0218\3\2\2\2\u0219") - buf.write("\u021a\3\2\2\2\u021a\u021b\3\2\2\2\u021b\u021d\5&\24\2") - buf.write("\u021c\u021e\5\"\22\2\u021d\u021c\3\2\2\2\u021d\u021e") - buf.write("\3\2\2\2\u021e\u0220\3\2\2\2\u021f\u0221\5(\25\2\u0220") - buf.write("\u021f\3\2\2\2\u0220\u0221\3\2\2\2\u0221\u0222\3\2\2\2") - buf.write("\u0222\u0224\5*\26\2\u0223\u0225\5L\'\2\u0224\u0223\3") - buf.write("\2\2\2\u0224\u0225\3\2\2\2\u0225!\3\2\2\2\u0226\u0227") - buf.write("\7\'\2\2\u0227#\3\2\2\2\u0228\u022b\5Z.\2\u0229\u022b") - buf.write("\5N(\2\u022a\u0228\3\2\2\2\u022a\u0229\3\2\2\2\u022b%") - buf.write("\3\2\2\2\u022c\u022d\t\2\2\2\u022d\'\3\2\2\2\u022e\u022f") - buf.write("\t\3\2\2\u022f)\3\2\2\2\u0230\u0231\7\u013b\2\2\u0231") - buf.write("+\3\2\2\2\u0232\u0234\7\27\2\2\u0233\u0235\5.\30\2\u0234") - buf.write("\u0233\3\2\2\2\u0234\u0235\3\2\2\2\u0235\u0238\3\2\2\2") - buf.write("\u0236\u0238\7)\2\2\u0237\u0232\3\2\2\2\u0237\u0236\3") - buf.write("\2\2\2\u0238-\3\2\2\2\u0239\u023a\5\u0126\u0094\2\u023a") - buf.write("/\3\2\2\2\u023b\u023c\7\30\2\2\u023c\61\3\2\2\2\u023d") - buf.write("\u0242\5\66\34\2\u023e\u023f\7\3\2\2\u023f\u0241\5\66") - buf.write("\34\2\u0240\u023e\3\2\2\2\u0241\u0244\3\2\2\2\u0242\u0240") - buf.write("\3\2\2\2\u0242\u0243\3\2\2\2\u0243\u024e\3\2\2\2\u0244") - buf.write("\u0242\3\2\2\2\u0245\u024a\5\64\33\2\u0246\u0247\7\3\2") - buf.write("\2\u0247\u0249\5\64\33\2\u0248\u0246\3\2\2\2\u0249\u024c") - buf.write("\3\2\2\2\u024a\u0248\3\2\2\2\u024a\u024b\3\2\2\2\u024b") - buf.write("\u024e\3\2\2\2\u024c\u024a\3\2\2\2\u024d\u023d\3\2\2\2") - buf.write("\u024d\u0245\3\2\2\2\u024e\63\3\2\2\2\u024f\u0250\5x=") - buf.write("\2\u0250\u0251\t\4\2\2\u0251\u0252\5\66\34\2\u0252\65") - buf.write("\3\2\2\2\u0253\u0259\5x=\2\u0254\u0255\7\5\2\2\u0255\u0256") - buf.write("\5\b\5\2\u0256\u0257\7\6\2\2\u0257\u0259\3\2\2\2\u0258") - buf.write("\u0253\3\2\2\2\u0258\u0254\3\2\2\2\u0259\67\3\2\2\2\u025a") - buf.write("\u025b\5x=\2\u025b\u025c\5:\36\2\u025c9\3\2\2\2\u025d") - buf.write("\u0261\7(\2\2\u025e\u025f\6\36\2\2\u025f\u0261\7\u0127") - buf.write("\2\2\u0260\u025d\3\2\2\2\u0260\u025e\3\2\2\2\u0261;\3") - buf.write("\2\2\2\u0262\u0263\7\u011e\2\2\u0263\u0265\5@!\2\u0264") - buf.write("\u0266\5L\'\2\u0265\u0264\3\2\2\2\u0265\u0266\3\2\2\2") - buf.write("\u0266\u0269\3\2\2\2\u0267\u0268\7\u00eb\2\2\u0268\u026a") - buf.write("\5V,\2\u0269\u0267\3\2\2\2\u0269\u026a\3\2\2\2\u026a=") - buf.write("\3\2\2\2\u026b\u026c\7\u011e\2\2\u026c\u026e\5@!\2\u026d") - buf.write("\u026f\5L\'\2\u026e\u026d\3\2\2\2\u026e\u026f\3\2\2\2") - buf.write("\u026f\u0272\3\2\2\2\u0270\u0271\7\u00eb\2\2\u0271\u0273") - buf.write("\5Z.\2\u0272\u0270\3\2\2\2\u0272\u0273\3\2\2\2\u0273?") - buf.write("\3\2\2\2\u0274\u0279\5x=\2\u0275\u0276\7\7\2\2\u0276\u0278") - buf.write("\5x=\2\u0277\u0275\3\2\2\2\u0278\u027b\3\2\2\2\u0279\u0277") - buf.write("\3\2\2\2\u0279\u027a\3\2\2\2\u027aA\3\2\2\2\u027b\u0279") - buf.write("\3\2\2\2\u027c\u0285\7U\2\2\u027d\u0285\7\u0093\2\2\u027e") - buf.write("\u027f\7\u00a2\2\2\u027f\u0285\7\u00c3\2\2\u0280\u0281") - buf.write("\7\u00e3\2\2\u0281\u0285\7\u00c3\2\2\u0282\u0283\7\u0084") - buf.write("\2\2\u0283\u0285\7\u00c3\2\2\u0284\u027c\3\2\2\2\u0284") - buf.write("\u027d\3\2\2\2\u0284\u027e\3\2\2\2\u0284\u0280\3\2\2\2") - buf.write("\u0284\u0282\3\2\2\2\u0285C\3\2\2\2\u0286\u0288\5F$\2") - buf.write("\u0287\u0286\3\2\2\2\u0287\u0288\3\2\2\2\u0288\u0289\3") - buf.write("\2\2\2\u0289\u028a\7\36\2\2\u028a\u028d\5H%\2\u028b\u028c") - buf.write("\7=\2\2\u028c\u028e\5N(\2\u028d\u028b\3\2\2\2\u028d\u028e") - buf.write("\3\2\2\2\u028e\u0291\3\2\2\2\u028f\u0290\7\26\2\2\u0290") - buf.write("\u0292\5P)\2\u0291\u028f\3\2\2\2\u0291\u0292\3\2\2\2\u0292") - buf.write("\u029e\3\2\2\2\u0293\u0295\5F$\2\u0294\u0293\3\2\2\2\u0294") - buf.write("\u0295\3\2\2\2\u0295\u0296\3\2\2\2\u0296\u0297\7\36\2") - buf.write("\2\u0297\u0298\7=\2\2\u0298\u029b\5N(\2\u0299\u029a\7") - buf.write("\26\2\2\u029a\u029c\5P)\2\u029b\u0299\3\2\2\2\u029b\u029c") - buf.write("\3\2\2\2\u029c\u029e\3\2\2\2\u029d\u0287\3\2\2\2\u029d") - buf.write("\u0294\3\2\2\2\u029eE\3\2\2\2\u029f\u02a0\t\5\2\2\u02a0") - buf.write("G\3\2\2\2\u02a1\u02a2\b%\1\2\u02a2\u02a8\5J&\2\u02a3\u02a4") - buf.write("\7\5\2\2\u02a4\u02a5\5H%\2\u02a5\u02a6\7\6\2\2\u02a6\u02a8") - buf.write("\3\2\2\2\u02a7\u02a1\3\2\2\2\u02a7\u02a3\3\2\2\2\u02a8") - buf.write("\u02ae\3\2\2\2\u02a9\u02aa\f\3\2\2\u02aa\u02ab\t\6\2\2") - buf.write("\u02ab\u02ad\5H%\4\u02ac\u02a9\3\2\2\2\u02ad\u02b0\3\2") - buf.write("\2\2\u02ae\u02ac\3\2\2\2\u02ae\u02af\3\2\2\2\u02afI\3") - buf.write("\2\2\2\u02b0\u02ae\3\2\2\2\u02b1\u02b3\7\u0131\2\2\u02b2") - buf.write("\u02b1\3\2\2\2\u02b2\u02b3\3\2\2\2\u02b3\u02b4\3\2\2\2") - buf.write("\u02b4\u02bc\7\u0141\2\2\u02b5\u02b7\7\u0131\2\2\u02b6") - buf.write("\u02b5\3\2\2\2\u02b6\u02b7\3\2\2\2\u02b7\u02b8\3\2\2\2") - buf.write("\u02b8\u02bc\7\u013f\2\2\u02b9\u02bc\7\34\2\2\u02ba\u02bc") - buf.write("\7\35\2\2\u02bb\u02b2\3\2\2\2\u02bb\u02b6\3\2\2\2\u02bb") - buf.write("\u02b9\3\2\2\2\u02bb\u02ba\3\2\2\2\u02bcK\3\2\2\2\u02bd") - buf.write("\u02be\7\31\2\2\u02be\u02c4\5f\64\2\u02bf\u02c1\7\31\2") - buf.write("\2\u02c0\u02bf\3\2\2\2\u02c0\u02c1\3\2\2\2\u02c1\u02c2") - buf.write("\3\2\2\2\u02c2\u02c4\5d\63\2\u02c3\u02bd\3\2\2\2\u02c3") - buf.write("\u02c0\3\2\2\2\u02c4M\3\2\2\2\u02c5\u02ca\5T+\2\u02c6") - buf.write("\u02c7\7\3\2\2\u02c7\u02c9\5T+\2\u02c8\u02c6\3\2\2\2\u02c9") - buf.write("\u02cc\3\2\2\2\u02ca\u02c8\3\2\2\2\u02ca\u02cb\3\2\2\2") - buf.write("\u02cbO\3\2\2\2\u02cc\u02ca\3\2\2\2\u02cd\u02d2\5R*\2") - buf.write("\u02ce\u02cf\7\3\2\2\u02cf\u02d1\5R*\2\u02d0\u02ce\3\2") + buf.write("\3\u00a0\3\u00a0\7\u00a0\u0bc8\n\u00a0\f\u00a0\16\u00a0") + buf.write("\u0bcb\13\u00a0\3\u00a1\3\u00a1\3\u00a1\3\u00a1\6\u00a1") + buf.write("\u0bd1\n\u00a1\r\u00a1\16\u00a1\u0bd2\3\u00a1\3\u00a1") + buf.write("\5\u00a1\u0bd7\n\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\6\u00a1\u0bde\n\u00a1\r\u00a1\16\u00a1\u0bdf") + buf.write("\3\u00a1\3\u00a1\5\u00a1\u0be4\n\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\7\u00a1\u0bf4") + buf.write("\n\u00a1\f\u00a1\16\u00a1\u0bf7\13\u00a1\5\u00a1\u0bf9") + buf.write("\n\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\5\u00a1\u0c01\n\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u0c0a\n\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\6\u00a1\u0c1f\n\u00a1") + buf.write("\r\u00a1\16\u00a1\u0c20\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u0c2c") + buf.write("\n\u00a1\3\u00a1\3\u00a1\3\u00a1\7\u00a1\u0c31\n\u00a1") + buf.write("\f\u00a1\16\u00a1\u0c34\13\u00a1\5\u00a1\u0c36\n\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\5\u00a1\u0c3f\n\u00a1\3\u00a1\3\u00a1\5\u00a1\u0c43\n") + buf.write("\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\6\u00a1\u0c4d\n\u00a1\r\u00a1\16\u00a1") + buf.write("\u0c4e\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u0c68\n\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u0c6f\n\u00a1") + buf.write("\3\u00a1\5\u00a1\u0c72\n\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\5\u00a1\u0c81\n\u00a1\3\u00a1") + buf.write("\3\u00a1\5\u00a1\u0c85\n\u00a1\3\u00a1\3\u00a1\3\u00a1") + buf.write("\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\7\u00a1\u0c8f") + buf.write("\n\u00a1\f\u00a1\16\u00a1\u0c92\13\u00a1\3\u00a2\3\u00a2") + buf.write("\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\3\u00a2\6\u00a2") + buf.write("\u0c9c\n\u00a2\r\u00a2\16\u00a2\u0c9d\5\u00a2\u0ca0\n") + buf.write("\u00a2\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3\3\u00a3") + buf.write("\3\u00a3\3\u00a3\5\u00a3\u0caa\n\u00a3\3\u00a4\3\u00a4") + buf.write("\3\u00a5\3\u00a5\3\u00a6\3\u00a6\3\u00a7\3\u00a7\3\u00a8") + buf.write("\3\u00a8\3\u00a8\5\u00a8\u0cb7\n\u00a8\3\u00a9\3\u00a9") + buf.write("\5\u00a9\u0cbb\n\u00a9\3\u00aa\3\u00aa\3\u00aa\6\u00aa") + buf.write("\u0cc0\n\u00aa\r\u00aa\16\u00aa\u0cc1\3\u00ab\3\u00ab") + buf.write("\3\u00ab\5\u00ab\u0cc7\n\u00ab\3\u00ac\3\u00ac\3\u00ac") + buf.write("\3\u00ac\3\u00ac\3\u00ad\5\u00ad\u0ccf\n\u00ad\3\u00ad") + buf.write("\3\u00ad\5\u00ad\u0cd3\n\u00ad\3\u00ae\3\u00ae\3\u00ae") + buf.write("\3\u00ae\3\u00ae\3\u00ae\3\u00ae\5\u00ae\u0cdc\n\u00ae") + buf.write("\3\u00af\3\u00af\3\u00af\5\u00af\u0ce1\n\u00af\3\u00b0") + buf.write("\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0") + buf.write("\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0") + buf.write("\5\u00b0\u0cf2\n\u00b0\3\u00b0\3\u00b0\5\u00b0\u0cf6\n") + buf.write("\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0\3\u00b0\7\u00b0") + buf.write("\u0cfd\n\u00b0\f\u00b0\16\u00b0\u0d00\13\u00b0\3\u00b0") + buf.write("\5\u00b0\u0d03\n\u00b0\5\u00b0\u0d05\n\u00b0\3\u00b1\3") + buf.write("\u00b1\3\u00b1\7\u00b1\u0d0a\n\u00b1\f\u00b1\16\u00b1") + buf.write("\u0d0d\13\u00b1\3\u00b2\3\u00b2\3\u00b2\3\u00b2\5\u00b2") + buf.write("\u0d13\n\u00b2\3\u00b2\5\u00b2\u0d16\n\u00b2\3\u00b2\5") + buf.write("\u00b2\u0d19\n\u00b2\3\u00b3\3\u00b3\3\u00b3\7\u00b3\u0d1e") + buf.write("\n\u00b3\f\u00b3\16\u00b3\u0d21\13\u00b3\3\u00b4\3\u00b4") + buf.write("\3\u00b4\3\u00b4\5\u00b4\u0d27\n\u00b4\3\u00b4\5\u00b4") + buf.write("\u0d2a\n\u00b4\3\u00b5\3\u00b5\3\u00b5\7\u00b5\u0d2f\n") + buf.write("\u00b5\f\u00b5\16\u00b5\u0d32\13\u00b5\3\u00b6\3\u00b6") + buf.write("\3\u00b6\3\u00b6\3\u00b6\5\u00b6\u0d39\n\u00b6\3\u00b6") + buf.write("\5\u00b6\u0d3c\n\u00b6\3\u00b7\3\u00b7\3\u00b7\3\u00b7") + buf.write("\3\u00b7\3\u00b8\3\u00b8\3\u00b8\3\u00b8\7\u00b8\u0d47") + buf.write("\n\u00b8\f\u00b8\16\u00b8\u0d4a\13\u00b8\3\u00b9\3\u00b9") + buf.write("\3\u00b9\3\u00b9\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba") + buf.write("\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\7\u00ba") + buf.write("\u0d5b\n\u00ba\f\u00ba\16\u00ba\u0d5e\13\u00ba\3\u00ba") + buf.write("\3\u00ba\3\u00ba\3\u00ba\3\u00ba\7\u00ba\u0d65\n\u00ba") + buf.write("\f\u00ba\16\u00ba\u0d68\13\u00ba\5\u00ba\u0d6a\n\u00ba") + buf.write("\3\u00ba\3\u00ba\3\u00ba\3\u00ba\3\u00ba\7\u00ba\u0d71") + buf.write("\n\u00ba\f\u00ba\16\u00ba\u0d74\13\u00ba\5\u00ba\u0d76") + buf.write("\n\u00ba\5\u00ba\u0d78\n\u00ba\3\u00ba\5\u00ba\u0d7b\n") + buf.write("\u00ba\3\u00ba\5\u00ba\u0d7e\n\u00ba\3\u00bb\3\u00bb\3") + buf.write("\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb") + buf.write("\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb") + buf.write("\5\u00bb\u0d90\n\u00bb\3\u00bc\3\u00bc\3\u00bc\3\u00bc") + buf.write("\3\u00bc\3\u00bc\3\u00bc\5\u00bc\u0d99\n\u00bc\3\u00bd") + buf.write("\3\u00bd\3\u00bd\7\u00bd\u0d9e\n\u00bd\f\u00bd\16\u00bd") + buf.write("\u0da1\13\u00bd\3\u00be\3\u00be\3\u00be\3\u00be\5\u00be") + buf.write("\u0da7\n\u00be\3\u00bf\3\u00bf\3\u00bf\7\u00bf\u0dac\n") + buf.write("\u00bf\f\u00bf\16\u00bf\u0daf\13\u00bf\3\u00c0\3\u00c0") + buf.write("\3\u00c0\3\u00c1\3\u00c1\6\u00c1\u0db6\n\u00c1\r\u00c1") + buf.write("\16\u00c1\u0db7\3\u00c1\5\u00c1\u0dbb\n\u00c1\3\u00c2") + buf.write("\3\u00c2\3\u00c2\5\u00c2\u0dc0\n\u00c2\3\u00c3\3\u00c3") + buf.write("\3\u00c3\3\u00c3\3\u00c3\3\u00c3\5\u00c3\u0dc8\n\u00c3") + buf.write("\3\u00c4\3\u00c4\3\u00c5\3\u00c5\5\u00c5\u0dce\n\u00c5") + buf.write("\3\u00c5\3\u00c5\3\u00c5\5\u00c5\u0dd3\n\u00c5\3\u00c5") + buf.write("\3\u00c5\3\u00c5\5\u00c5\u0dd8\n\u00c5\3\u00c5\3\u00c5") + buf.write("\5\u00c5\u0ddc\n\u00c5\3\u00c5\3\u00c5\5\u00c5\u0de0\n") + buf.write("\u00c5\3\u00c5\3\u00c5\5\u00c5\u0de4\n\u00c5\3\u00c5\3") + buf.write("\u00c5\5\u00c5\u0de8\n\u00c5\3\u00c5\3\u00c5\5\u00c5\u0dec") + buf.write("\n\u00c5\3\u00c5\3\u00c5\5\u00c5\u0df0\n\u00c5\3\u00c5") + buf.write("\5\u00c5\u0df3\n\u00c5\3\u00c6\3\u00c6\3\u00c6\3\u00c6") + buf.write("\3\u00c6\3\u00c6\3\u00c6\5\u00c6\u0dfc\n\u00c6\3\u00c7") + buf.write("\3\u00c7\3\u00c8\3\u00c8\3\u00c9\3\u00c9\3\u00c9\7\u05d4") + buf.write("\u0612\u061c\u0623\u062b\7J\u00cc\u013a\u013e\u0140\u00ca") + buf.write("\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62") + buf.write("\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082") + buf.write("\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094") + buf.write("\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6") + buf.write("\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8") + buf.write("\u00ba\u00bc\u00be\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca") + buf.write("\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc") + buf.write("\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee") + buf.write("\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100") + buf.write("\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112") + buf.write("\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124") + buf.write("\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136") + buf.write("\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148") + buf.write("\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a") + buf.write("\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c") + buf.write("\u016e\u0170\u0172\u0174\u0176\u0178\u017a\u017c\u017e") + buf.write("\u0180\u0182\u0184\u0186\u0188\u018a\u018c\u018e\u0190") + buf.write("\2\63\5\2##\u00c8\u00c8\u0109\u0109\3\2$&\4\2\4\4\u0127") + buf.write("\u0127\3\2\23\25\3\2\u0130\u0133\4\2\66\66dd\5\2\f\rx") + buf.write("x\u0110\u0110\4\2\16\16\u00b9\u00b9\4\2``\u00d3\u00d3") + buf.write("\4\2??\u00e1\u00e1\4\2^^\u00b5\u00b5\4\2\u0083\u0083\u0090") + buf.write("\u0090\3\2JK\4\2\u0102\u0102\u0120\u0120\4\2..BB\7\2G") + buf.write("GSSuu\u0082\u0082\u00ac\u00ac\3\2de\4\2uu\u0082\u0082") + buf.write("\4\2\u00b9\u00b9\u013b\u013b\4\2++\u00a6\u00a6\5\2]]\u00b4") + buf.write("\u00b4\u00eb\u00eb\6\2pp\u0097\u0097\u00f4\u00f4\u0116") + buf.write("\u0116\5\2pp\u00f4\u00f4\u0116\u0116\4\2}}\u009e\u009e") + buf.write("\4\2--ii\4\2\u013f\u013f\u0141\u0141\5\2--\62\62\u00f8") + buf.write("\u00f8\5\2xx\u0110\u0110\u0118\u0118\4\2\u0130\u0131\u0136") + buf.write("\u0136\3\2\u0132\u0135\4\2\u0130\u0131\u0139\u0139\4\2") + buf.write("XXZZ\3\2\u0100\u0101\4\2\3\3\u0083\u0083\4\2\3\3\177\177") + buf.write("\5\2::\u00a1\u00a1\u010b\u010b\3\2\u0127\u0128\3\2\u0130") + buf.write("\u013a\6\2\60\60\u0090\u0090\u00b8\u00b8\u00c0\u00c0\4") + buf.write("\2xx\u0110\u0110\3\2\u0130\u0131\4\2jj\u00c9\u00c9\4\2") + buf.write("\u00c1\u00c1\u00f9\u00f9\4\2~~\u00d0\u00d0\3\2\u0140\u0141") + buf.write("\4\2kk\u00f3\u00f3\65\2+,./\63\64\66\6799;?BBDGIIKQSS") + buf.write("VW\\^`hjkooqwzz|~\u0081\u0082\u0085\u0087\u008a\u008a") + buf.write("\u008d\u008f\u0091\u0092\u0094\u0096\u0098\u0098\u009b") + buf.write("\u009b\u009d\u00a0\u00a3\u00b0\u00b3\u00b5\u00b7\u00b7") + buf.write("\u00ba\u00bb\u00be\u00bf\u00c2\u00c2\u00c4\u00c5\u00c7") + buf.write("\u00d0\u00d2\u00da\u00dc\u00e2\u00e4\u00eb\u00ef\u00f1") + buf.write("\u00f3\u00f3\u00f5\u00f7\u00f9\u0101\u0103\u0107\u010a") + buf.write("\u010a\u010c\u0111\u0113\u0115\u0119\u011c\u011f\u0121") + buf.write("\u0124\u0124\u0135\u0135\21\2\61\61UUpp\u0084\u0084\u0093") + buf.write("\u0093\u0097\u0097\u009c\u009c\u00a2\u00a2\u00b6\u00b6") + buf.write("\u00bc\u00bc\u00e3\u00e3\u00ee\u00ee\u00f4\u00f4\u0116") + buf.write("\u0116\u011e\u011e\23\2+\60\62TVoq\u0083\u0085\u0092\u0094") + buf.write("\u0096\u0098\u009b\u009d\u00a1\u00a3\u00b5\u00b7\u00bb") + buf.write("\u00bd\u00e2\u00e4\u00ed\u00ef\u00f3\u00f5\u0115\u0117") + buf.write("\u011d\u011f\u0126\u0135\u0135\2\u1000\2\u0193\3\2\2\2") + buf.write("\4\u0199\3\2\2\2\6\u01a0\3\2\2\2\b\u01a4\3\2\2\2\n\u01a7") + buf.write("\3\2\2\2\f\u01b4\3\2\2\2\16\u01c3\3\2\2\2\20\u01c5\3\2") + buf.write("\2\2\22\u01ce\3\2\2\2\24\u01d7\3\2\2\2\26\u01e4\3\2\2") + buf.write("\2\30\u01e7\3\2\2\2\32\u01ef\3\2\2\2\34\u01fb\3\2\2\2") + buf.write("\36\u0207\3\2\2\2 \u0216\3\2\2\2\"\u0228\3\2\2\2$\u022c") + buf.write("\3\2\2\2&\u022e\3\2\2\2(\u0230\3\2\2\2*\u0232\3\2\2\2") + buf.write(",\u023c\3\2\2\2.\u023e\3\2\2\2\60\u0240\3\2\2\2\62\u0242") + buf.write("\3\2\2\2\64\u0254\3\2\2\2\66\u0256\3\2\2\28\u025f\3\2") + buf.write("\2\2:\u0261\3\2\2\2<\u0268\3\2\2\2>\u026a\3\2\2\2@\u0273") + buf.write("\3\2\2\2B\u027c\3\2\2\2D\u028c\3\2\2\2F\u02a5\3\2\2\2") + buf.write("H\u02a7\3\2\2\2J\u02af\3\2\2\2L\u02c3\3\2\2\2N\u02cb\3") + buf.write("\2\2\2P\u02cd\3\2\2\2R\u02d5\3\2\2\2T\u02dd\3\2\2\2V\u02e1") + buf.write("\3\2\2\2X\u02e3\3\2\2\2Z\u02ed\3\2\2\2\\\u02ef\3\2\2\2") + buf.write("^\u02f7\3\2\2\2`\u02fb\3\2\2\2b\u0306\3\2\2\2d\u0308\3") + buf.write("\2\2\2f\u031c\3\2\2\2h\u031e\3\2\2\2j\u0326\3\2\2\2l\u032c") + buf.write("\3\2\2\2n\u033e\3\2\2\2p\u0346\3\2\2\2r\u0348\3\2\2\2") + buf.write("t\u034a\3\2\2\2v\u034c\3\2\2\2x\u034e\3\2\2\2z\u0350\3") + buf.write("\2\2\2|\u0352\3\2\2\2~\u035b\3\2\2\2\u0080\u035e\3\2\2") + buf.write("\2\u0082\u0361\3\2\2\2\u0084\u0364\3\2\2\2\u0086\u0367") + buf.write("\3\2\2\2\u0088\u036a\3\2\2\2\u008a\u062e\3\2\2\2\u008c") + buf.write("\u06d8\3\2\2\2\u008e\u06da\3\2\2\2\u0090\u06eb\3\2\2\2") + buf.write("\u0092\u06f1\3\2\2\2\u0094\u06fd\3\2\2\2\u0096\u070a\3") + buf.write("\2\2\2\u0098\u070d\3\2\2\2\u009a\u0711\3\2\2\2\u009c\u074d") + buf.write("\3\2\2\2\u009e\u074f\3\2\2\2\u00a0\u0753\3\2\2\2\u00a2") + buf.write("\u075f\3\2\2\2\u00a4\u0764\3\2\2\2\u00a6\u076b\3\2\2\2") + buf.write("\u00a8\u076d\3\2\2\2\u00aa\u0775\3\2\2\2\u00ac\u077e\3") + buf.write("\2\2\2\u00ae\u0789\3\2\2\2\u00b0\u0798\3\2\2\2\u00b2\u079b") + buf.write("\3\2\2\2\u00b4\u07a6\3\2\2\2\u00b6\u07b6\3\2\2\2\u00b8") + buf.write("\u07bc\3\2\2\2\u00ba\u07be\3\2\2\2\u00bc\u07c9\3\2\2\2") + buf.write("\u00be\u07da\3\2\2\2\u00c0\u07e1\3\2\2\2\u00c2\u07e3\3") + buf.write("\2\2\2\u00c4\u07e9\3\2\2\2\u00c6\u081f\3\2\2\2\u00c8\u082b") + buf.write("\3\2\2\2\u00ca\u085b\3\2\2\2\u00cc\u085e\3\2\2\2\u00ce") + buf.write("\u0880\3\2\2\2\u00d0\u0882\3\2\2\2\u00d2\u088a\3\2\2\2") + buf.write("\u00d4\u08ab\3\2\2\2\u00d6\u08c6\3\2\2\2\u00d8\u08c9\3") + buf.write("\2\2\2\u00da\u08d5\3\2\2\2\u00dc\u08f5\3\2\2\2\u00de\u0901") + buf.write("\3\2\2\2\u00e0\u0904\3\2\2\2\u00e2\u090d\3\2\2\2\u00e4") + buf.write("\u091e\3\2\2\2\u00e6\u0932\3\2\2\2\u00e8\u0934\3\2\2\2") + buf.write("\u00ea\u093c\3\2\2\2\u00ec\u0940\3\2\2\2\u00ee\u0943\3") + buf.write("\2\2\2\u00f0\u0946\3\2\2\2\u00f2\u0960\3\2\2\2\u00f4\u0962") + buf.write("\3\2\2\2\u00f6\u09a0\3\2\2\2\u00f8\u09af\3\2\2\2\u00fa") + buf.write("\u09b1\3\2\2\2\u00fc\u09cf\3\2\2\2\u00fe\u09d1\3\2\2\2") + buf.write("\u0100\u09d8\3\2\2\2\u0102\u09f8\3\2\2\2\u0104\u09fa\3") + buf.write("\2\2\2\u0106\u0a0c\3\2\2\2\u0108\u0a26\3\2\2\2\u010a\u0a2c") + buf.write("\3\2\2\2\u010c\u0a2e\3\2\2\2\u010e\u0a4d\3\2\2\2\u0110") + buf.write("\u0a4f\3\2\2\2\u0112\u0a53\3\2\2\2\u0114\u0a5b\3\2\2\2") + buf.write("\u0116\u0a66\3\2\2\2\u0118\u0a6a\3\2\2\2\u011a\u0a75\3") + buf.write("\2\2\2\u011c\u0a99\3\2\2\2\u011e\u0a9b\3\2\2\2\u0120\u0aa6") + buf.write("\3\2\2\2\u0122\u0abc\3\2\2\2\u0124\u0aef\3\2\2\2\u0126") + buf.write("\u0af1\3\2\2\2\u0128\u0af9\3\2\2\2\u012a\u0b04\3\2\2\2") + buf.write("\u012c\u0b0b\3\2\2\2\u012e\u0b0f\3\2\2\2\u0130\u0b19\3") + buf.write("\2\2\2\u0132\u0b21\3\2\2\2\u0134\u0b39\3\2\2\2\u0136\u0b3d") + buf.write("\3\2\2\2\u0138\u0b3f\3\2\2\2\u013a\u0b4d\3\2\2\2\u013c") + buf.write("\u0bac\3\2\2\2\u013e\u0bb2\3\2\2\2\u0140\u0c84\3\2\2\2") + buf.write("\u0142\u0c9f\3\2\2\2\u0144\u0ca9\3\2\2\2\u0146\u0cab\3") + buf.write("\2\2\2\u0148\u0cad\3\2\2\2\u014a\u0caf\3\2\2\2\u014c\u0cb1") + buf.write("\3\2\2\2\u014e\u0cb3\3\2\2\2\u0150\u0cb8\3\2\2\2\u0152") + buf.write("\u0cbf\3\2\2\2\u0154\u0cc3\3\2\2\2\u0156\u0cc8\3\2\2\2") + buf.write("\u0158\u0cd2\3\2\2\2\u015a\u0cdb\3\2\2\2\u015c\u0ce0\3") + buf.write("\2\2\2\u015e\u0d04\3\2\2\2\u0160\u0d06\3\2\2\2\u0162\u0d0e") + buf.write("\3\2\2\2\u0164\u0d1a\3\2\2\2\u0166\u0d22\3\2\2\2\u0168") + buf.write("\u0d2b\3\2\2\2\u016a\u0d33\3\2\2\2\u016c\u0d3d\3\2\2\2") + buf.write("\u016e\u0d42\3\2\2\2\u0170\u0d4b\3\2\2\2\u0172\u0d7d\3") + buf.write("\2\2\2\u0174\u0d8f\3\2\2\2\u0176\u0d98\3\2\2\2\u0178\u0d9a") + buf.write("\3\2\2\2\u017a\u0da6\3\2\2\2\u017c\u0da8\3\2\2\2\u017e") + buf.write("\u0db0\3\2\2\2\u0180\u0dba\3\2\2\2\u0182\u0dbf\3\2\2\2") + buf.write("\u0184\u0dc7\3\2\2\2\u0186\u0dc9\3\2\2\2\u0188\u0df2\3") + buf.write("\2\2\2\u018a\u0dfb\3\2\2\2\u018c\u0dfd\3\2\2\2\u018e\u0dff") + buf.write("\3\2\2\2\u0190\u0e01\3\2\2\2\u0192\u0194\5\6\4\2\u0193") + buf.write("\u0192\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0193\3\2\2\2") + buf.write("\u0195\u0196\3\2\2\2\u0196\u0197\3\2\2\2\u0197\u0198\7") + buf.write("\2\2\3\u0198\3\3\2\2\2\u0199\u019a\5\6\4\2\u019a\u019b") + buf.write("\7\2\2\3\u019b\5\3\2\2\2\u019c\u01a1\5\b\5\2\u019d\u01a1") + buf.write("\5\34\17\2\u019e\u01a1\5\36\20\2\u019f\u01a1\5 \21\2\u01a0") + buf.write("\u019c\3\2\2\2\u01a0\u019d\3\2\2\2\u01a0\u019e\3\2\2\2") + buf.write("\u01a0\u019f\3\2\2\2\u01a1\7\3\2\2\2\u01a2\u01a5\5\f\7") + buf.write("\2\u01a3\u01a5\5\n\6\2\u01a4\u01a2\3\2\2\2\u01a4\u01a3") + buf.write("\3\2\2\2\u01a5\t\3\2\2\2\u01a6\u01a8\5:\36\2\u01a7\u01a6") + buf.write("\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8\u01aa\3\2\2\2\u01a9") + buf.write("\u01ab\5F$\2\u01aa\u01a9\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab") + buf.write("\u01ac\3\2\2\2\u01ac\u01ae\5\u009aN\2\u01ad\u01af\5,\27") + buf.write("\2\u01ae\u01ad\3\2\2\2\u01ae\u01af\3\2\2\2\u01af\u01b1") + buf.write("\3\2\2\2\u01b0\u01b2\5\62\32\2\u01b1\u01b0\3\2\2\2\u01b1") + buf.write("\u01b2\3\2\2\2\u01b2\13\3\2\2\2\u01b3\u01b5\5:\36\2\u01b4") + buf.write("\u01b3\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01b6\3\2\2\2") + buf.write("\u01b6\u01b8\5\16\b\2\u01b7\u01b9\5,\27\2\u01b8\u01b7") + buf.write("\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\u01bb\3\2\2\2\u01ba") + buf.write("\u01bc\5\62\32\2\u01bb\u01ba\3\2\2\2\u01bb\u01bc\3\2\2") + buf.write("\2\u01bc\r\3\2\2\2\u01bd\u01c4\5\20\t\2\u01be\u01c4\5") + buf.write("\22\n\2\u01bf\u01c4\5\24\13\2\u01c0\u01c4\5\26\f\2\u01c1") + buf.write("\u01c4\5\30\r\2\u01c2\u01c4\5\32\16\2\u01c3\u01bd\3\2") + buf.write("\2\2\u01c3\u01be\3\2\2\2\u01c3\u01bf\3\2\2\2\u01c3\u01c0") + buf.write("\3\2\2\2\u01c3\u01c1\3\2\2\2\u01c3\u01c2\3\2\2\2\u01c4") + buf.write("\17\3\2\2\2\u01c5\u01c7\7\u010e\2\2\u01c6\u01c8\5\64\33") + buf.write("\2\u01c7\u01c6\3\2\2\2\u01c7\u01c8\3\2\2\2\u01c8\u01ca") + buf.write("\3\2\2\2\u01c9\u01cb\5F$\2\u01ca\u01c9\3\2\2\2\u01ca\u01cb") + buf.write("\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\u01cd\5> \2\u01cd\21") + buf.write("\3\2\2\2\u01ce\u01d0\7\32\2\2\u01cf\u01d1\5\64\33\2\u01d0") + buf.write("\u01cf\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d3\3\2\2\2") + buf.write("\u01d2\u01d4\5F$\2\u01d3\u01d2\3\2\2\2\u01d3\u01d4\3\2") + buf.write("\2\2\u01d4\u01d5\3\2\2\2\u01d5\u01d6\5@!\2\u01d6\23\3") + buf.write("\2\2\2\u01d7\u01d8\7\37\2\2\u01d8\u01da\5\64\33\2\u01d9") + buf.write("\u01db\5D#\2\u01da\u01d9\3\2\2\2\u01da\u01db\3\2\2\2\u01db") + buf.write("\u01de\3\2\2\2\u01dc\u01dd\7=\2\2\u01dd\u01df\5P)\2\u01de") + buf.write("\u01dc\3\2\2\2\u01de\u01df\3\2\2\2\u01df\u01e2\3\2\2\2") + buf.write("\u01e0\u01e1\7\26\2\2\u01e1\u01e3\5R*\2\u01e2\u01e0\3") + buf.write("\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\25\3\2\2\2\u01e4\u01e5") + buf.write("\7T\2\2\u01e5\u01e6\5@!\2\u01e6\27\3\2\2\2\u01e7\u01e9") + buf.write("\7T\2\2\u01e8\u01ea\7\\\2\2\u01e9\u01e8\3\2\2\2\u01e9") + buf.write("\u01ea\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\5n8\2\u01ec") + buf.write("\u01ed\7\u00eb\2\2\u01ed\u01ee\5\\/\2\u01ee\31\3\2\2\2") + buf.write("\u01ef\u01f1\7\u00a7\2\2\u01f0\u01f2\5(\25\2\u01f1\u01f0") + buf.write("\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\3\2\2\2\u01f3") + buf.write("\u01f5\5*\26\2\u01f4\u01f6\5N(\2\u01f5\u01f4\3\2\2\2\u01f5") + buf.write("\u01f6\3\2\2\2\u01f6\u01f9\3\2\2\2\u01f7\u01f8\7K\2\2") + buf.write("\u01f8\u01fa\5$\23\2\u01f9\u01f7\3\2\2\2\u01f9\u01fa\3") + buf.write("\2\2\2\u01fa\33\3\2\2\2\u01fb\u01fd\7\33\2\2\u01fc\u01fe") + buf.write("\5\64\33\2\u01fd\u01fc\3\2\2\2\u01fd\u01fe\3\2\2\2\u01fe") + buf.write("\u0200\3\2\2\2\u01ff\u0201\5F$\2\u0200\u01ff\3\2\2\2\u0200") + buf.write("\u0201\3\2\2\2\u0201\u0202\3\2\2\2\u0202\u0203\7\u011e") + buf.write("\2\2\u0203\u0205\5B\"\2\u0204\u0206\5N(\2\u0205\u0204") + buf.write("\3\2\2\2\u0205\u0206\3\2\2\2\u0206\35\3\2\2\2\u0207\u0209") + buf.write("\7 \2\2\u0208\u020a\5\64\33\2\u0209\u0208\3\2\2\2\u0209") + buf.write("\u020a\3\2\2\2\u020a\u020d\3\2\2\2\u020b\u020c\7\u00ea") + buf.write("\2\2\u020c\u020e\7\u013f\2\2\u020d\u020b\3\2\2\2\u020d") + buf.write("\u020e\3\2\2\2\u020e\u0210\3\2\2\2\u020f\u0211\7\34\2") + buf.write("\2\u0210\u020f\3\2\2\2\u0210\u0211\3\2\2\2\u0211\u0214") + buf.write("\3\2\2\2\u0212\u0213\7!\2\2\u0213\u0215\7\u013b\2\2\u0214") + buf.write("\u0212\3\2\2\2\u0214\u0215\3\2\2\2\u0215\37\3\2\2\2\u0216") + buf.write("\u0218\7\"\2\2\u0217\u0219\58\35\2\u0218\u0217\3\2\2\2") + buf.write("\u0218\u0219\3\2\2\2\u0219\u021b\3\2\2\2\u021a\u021c\5") + buf.write("F$\2\u021b\u021a\3\2\2\2\u021b\u021c\3\2\2\2\u021c\u021d") + buf.write("\3\2\2\2\u021d\u021f\5&\24\2\u021e\u0220\5\"\22\2\u021f") + buf.write("\u021e\3\2\2\2\u021f\u0220\3\2\2\2\u0220\u0222\3\2\2\2") + buf.write("\u0221\u0223\5(\25\2\u0222\u0221\3\2\2\2\u0222\u0223\3") + buf.write("\2\2\2\u0223\u0224\3\2\2\2\u0224\u0226\5*\26\2\u0225\u0227") + buf.write("\5N(\2\u0226\u0225\3\2\2\2\u0226\u0227\3\2\2\2\u0227!") + buf.write("\3\2\2\2\u0228\u0229\7\'\2\2\u0229#\3\2\2\2\u022a\u022d") + buf.write("\5\\/\2\u022b\u022d\5P)\2\u022c\u022a\3\2\2\2\u022c\u022b") + buf.write("\3\2\2\2\u022d%\3\2\2\2\u022e\u022f\t\2\2\2\u022f\'\3") + buf.write("\2\2\2\u0230\u0231\t\3\2\2\u0231)\3\2\2\2\u0232\u0233") + buf.write("\7\u013b\2\2\u0233+\3\2\2\2\u0234\u0236\7\27\2\2\u0235") + buf.write("\u0237\5\60\31\2\u0236\u0235\3\2\2\2\u0236\u0237\3\2\2") + buf.write("\2\u0237\u023d\3\2\2\2\u0238\u023a\7)\2\2\u0239\u023b") + buf.write("\5.\30\2\u023a\u0239\3\2\2\2\u023a\u023b\3\2\2\2\u023b") + buf.write("\u023d\3\2\2\2\u023c\u0234\3\2\2\2\u023c\u0238\3\2\2\2") + buf.write("\u023d-\3\2\2\2\u023e\u023f\7\u013b\2\2\u023f/\3\2\2\2") + buf.write("\u0240\u0241\5\u0128\u0095\2\u0241\61\3\2\2\2\u0242\u0243") + buf.write("\7\30\2\2\u0243\63\3\2\2\2\u0244\u0249\58\35\2\u0245\u0246") + buf.write("\7\3\2\2\u0246\u0248\58\35\2\u0247\u0245\3\2\2\2\u0248") + buf.write("\u024b\3\2\2\2\u0249\u0247\3\2\2\2\u0249\u024a\3\2\2\2") + buf.write("\u024a\u0255\3\2\2\2\u024b\u0249\3\2\2\2\u024c\u0251\5") + buf.write("\66\34\2\u024d\u024e\7\3\2\2\u024e\u0250\5\66\34\2\u024f") + buf.write("\u024d\3\2\2\2\u0250\u0253\3\2\2\2\u0251\u024f\3\2\2\2") + buf.write("\u0251\u0252\3\2\2\2\u0252\u0255\3\2\2\2\u0253\u0251\3") + buf.write("\2\2\2\u0254\u0244\3\2\2\2\u0254\u024c\3\2\2\2\u0255\65") + buf.write("\3\2\2\2\u0256\u0257\5z>\2\u0257\u0258\t\4\2\2\u0258\u0259") + buf.write("\58\35\2\u0259\67\3\2\2\2\u025a\u0260\5z>\2\u025b\u025c") + buf.write("\7\5\2\2\u025c\u025d\5\b\5\2\u025d\u025e\7\6\2\2\u025e") + buf.write("\u0260\3\2\2\2\u025f\u025a\3\2\2\2\u025f\u025b\3\2\2\2") + buf.write("\u02609\3\2\2\2\u0261\u0262\5z>\2\u0262\u0263\5<\37\2") + buf.write("\u0263;\3\2\2\2\u0264\u0269\7(\2\2\u0265\u0269\7*\2\2") + buf.write("\u0266\u0267\6\37\2\2\u0267\u0269\7\u0127\2\2\u0268\u0264") + buf.write("\3\2\2\2\u0268\u0265\3\2\2\2\u0268\u0266\3\2\2\2\u0269") + buf.write("=\3\2\2\2\u026a\u026b\7\u011e\2\2\u026b\u026d\5B\"\2\u026c") + buf.write("\u026e\5N(\2\u026d\u026c\3\2\2\2\u026d\u026e\3\2\2\2\u026e") + buf.write("\u0271\3\2\2\2\u026f\u0270\7\u00eb\2\2\u0270\u0272\5X") + buf.write("-\2\u0271\u026f\3\2\2\2\u0271\u0272\3\2\2\2\u0272?\3\2") + buf.write("\2\2\u0273\u0274\7\u011e\2\2\u0274\u0276\5B\"\2\u0275") + buf.write("\u0277\5N(\2\u0276\u0275\3\2\2\2\u0276\u0277\3\2\2\2\u0277") + buf.write("\u027a\3\2\2\2\u0278\u0279\7\u00eb\2\2\u0279\u027b\5\\") + buf.write("/\2\u027a\u0278\3\2\2\2\u027a\u027b\3\2\2\2\u027bA\3\2") + buf.write("\2\2\u027c\u0281\5z>\2\u027d\u027e\7\7\2\2\u027e\u0280") + buf.write("\5z>\2\u027f\u027d\3\2\2\2\u0280\u0283\3\2\2\2\u0281\u027f") + buf.write("\3\2\2\2\u0281\u0282\3\2\2\2\u0282C\3\2\2\2\u0283\u0281") + buf.write("\3\2\2\2\u0284\u028d\7U\2\2\u0285\u028d\7\u0093\2\2\u0286") + buf.write("\u0287\7\u00a2\2\2\u0287\u028d\7\u00c3\2\2\u0288\u0289") + buf.write("\7\u00e3\2\2\u0289\u028d\7\u00c3\2\2\u028a\u028b\7\u0084") + buf.write("\2\2\u028b\u028d\7\u00c3\2\2\u028c\u0284\3\2\2\2\u028c") + buf.write("\u0285\3\2\2\2\u028c\u0286\3\2\2\2\u028c\u0288\3\2\2\2") + buf.write("\u028c\u028a\3\2\2\2\u028dE\3\2\2\2\u028e\u0290\5H%\2") + buf.write("\u028f\u028e\3\2\2\2\u028f\u0290\3\2\2\2\u0290\u0291\3") + buf.write("\2\2\2\u0291\u0292\7\36\2\2\u0292\u0295\5J&\2\u0293\u0294") + buf.write("\7=\2\2\u0294\u0296\5P)\2\u0295\u0293\3\2\2\2\u0295\u0296") + buf.write("\3\2\2\2\u0296\u0299\3\2\2\2\u0297\u0298\7\26\2\2\u0298") + buf.write("\u029a\5R*\2\u0299\u0297\3\2\2\2\u0299\u029a\3\2\2\2\u029a") + buf.write("\u02a6\3\2\2\2\u029b\u029d\5H%\2\u029c\u029b\3\2\2\2\u029c") + buf.write("\u029d\3\2\2\2\u029d\u029e\3\2\2\2\u029e\u029f\7\36\2") + buf.write("\2\u029f\u02a0\7=\2\2\u02a0\u02a3\5P)\2\u02a1\u02a2\7") + buf.write("\26\2\2\u02a2\u02a4\5R*\2\u02a3\u02a1\3\2\2\2\u02a3\u02a4") + buf.write("\3\2\2\2\u02a4\u02a6\3\2\2\2\u02a5\u028f\3\2\2\2\u02a5") + buf.write("\u029c\3\2\2\2\u02a6G\3\2\2\2\u02a7\u02a8\t\5\2\2\u02a8") + buf.write("I\3\2\2\2\u02a9\u02aa\b&\1\2\u02aa\u02b0\5L\'\2\u02ab") + buf.write("\u02ac\7\5\2\2\u02ac\u02ad\5J&\2\u02ad\u02ae\7\6\2\2\u02ae") + buf.write("\u02b0\3\2\2\2\u02af\u02a9\3\2\2\2\u02af\u02ab\3\2\2\2") + buf.write("\u02b0\u02b6\3\2\2\2\u02b1\u02b2\f\3\2\2\u02b2\u02b3\t") + buf.write("\6\2\2\u02b3\u02b5\5J&\4\u02b4\u02b1\3\2\2\2\u02b5\u02b8") + buf.write("\3\2\2\2\u02b6\u02b4\3\2\2\2\u02b6\u02b7\3\2\2\2\u02b7") + buf.write("K\3\2\2\2\u02b8\u02b6\3\2\2\2\u02b9\u02bb\7\u0131\2\2") + buf.write("\u02ba\u02b9\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bb\u02bc\3") + buf.write("\2\2\2\u02bc\u02c4\7\u0141\2\2\u02bd\u02bf\7\u0131\2\2") + buf.write("\u02be\u02bd\3\2\2\2\u02be\u02bf\3\2\2\2\u02bf\u02c0\3") + buf.write("\2\2\2\u02c0\u02c4\7\u013f\2\2\u02c1\u02c4\7\34\2\2\u02c2") + buf.write("\u02c4\7\35\2\2\u02c3\u02ba\3\2\2\2\u02c3\u02be\3\2\2") + buf.write("\2\u02c3\u02c1\3\2\2\2\u02c3\u02c2\3\2\2\2\u02c4M\3\2") + buf.write("\2\2\u02c5\u02c6\7\31\2\2\u02c6\u02cc\5h\65\2\u02c7\u02c9") + buf.write("\7\31\2\2\u02c8\u02c7\3\2\2\2\u02c8\u02c9\3\2\2\2\u02c9") + buf.write("\u02ca\3\2\2\2\u02ca\u02cc\5f\64\2\u02cb\u02c5\3\2\2\2") + buf.write("\u02cb\u02c8\3\2\2\2\u02ccO\3\2\2\2\u02cd\u02d2\5V,\2") + buf.write("\u02ce\u02cf\7\3\2\2\u02cf\u02d1\5V,\2\u02d0\u02ce\3\2") buf.write("\2\2\u02d1\u02d4\3\2\2\2\u02d2\u02d0\3\2\2\2\u02d2\u02d3") - buf.write("\3\2\2\2\u02d3Q\3\2\2\2\u02d4\u02d2\3\2\2\2\u02d5\u02d7") - buf.write("\5T+\2\u02d6\u02d8\t\7\2\2\u02d7\u02d6\3\2\2\2\u02d7\u02d8") - buf.write("\3\2\2\2\u02d8S\3\2\2\2\u02d9\u02da\5x=\2\u02daU\3\2\2") - buf.write("\2\u02db\u02e0\5X-\2\u02dc\u02dd\7\3\2\2\u02dd\u02df\5") - buf.write("X-\2\u02de\u02dc\3\2\2\2\u02df\u02e2\3\2\2\2\u02e0\u02de") - buf.write("\3\2\2\2\u02e0\u02e1\3\2\2\2\u02e1W\3\2\2\2\u02e2\u02e0") - buf.write("\3\2\2\2\u02e3\u02e6\5\\/\2\u02e4\u02e6\7\u0132\2\2\u02e5") - buf.write("\u02e3\3\2\2\2\u02e5\u02e4\3\2\2\2\u02e6Y\3\2\2\2\u02e7") - buf.write("\u02ec\5\\/\2\u02e8\u02e9\7\3\2\2\u02e9\u02eb\5\\/\2\u02ea") - buf.write("\u02e8\3\2\2\2\u02eb\u02ee\3\2\2\2\u02ec\u02ea\3\2\2\2") - buf.write("\u02ec\u02ed\3\2\2\2\u02ed[\3\2\2\2\u02ee\u02ec\3\2\2") - buf.write("\2\u02ef\u02f0\5^\60\2\u02f0\u02f1\7\4\2\2\u02f1\u02f2") - buf.write("\5`\61\2\u02f2]\3\2\2\2\u02f3\u02f4\5x=\2\u02f4_\3\2\2") - buf.write("\2\u02f5\u02ff\5x=\2\u02f6\u02f7\7\b\2\2\u02f7\u02f8\5") - buf.write("`\61\2\u02f8\u02f9\7\t\2\2\u02f9\u02ff\3\2\2\2\u02fa\u02fb") - buf.write("\7\n\2\2\u02fb\u02fc\5Z.\2\u02fc\u02fd\7\13\2\2\u02fd") - buf.write("\u02ff\3\2\2\2\u02fe\u02f5\3\2\2\2\u02fe\u02f6\3\2\2\2") - buf.write("\u02fe\u02fa\3\2\2\2\u02ffa\3\2\2\2\u0300\u0301\5n8\2") - buf.write("\u0301c\3\2\2\2\u0302\u0303\7\n\2\2\u0303\u0305\5f\64") - buf.write("\2\u0304\u0306\7\3\2\2\u0305\u0304\3\2\2\2\u0305\u0306") - buf.write("\3\2\2\2\u0306\u0307\3\2\2\2\u0307\u0308\7\13\2\2\u0308") - buf.write("\u0315\3\2\2\2\u0309\u030a\7\n\2\2\u030a\u0315\7\13\2") - buf.write("\2\u030b\u030c\7\5\2\2\u030c\u030e\5f\64\2\u030d\u030f") - buf.write("\7\3\2\2\u030e\u030d\3\2\2\2\u030e\u030f\3\2\2\2\u030f") - buf.write("\u0310\3\2\2\2\u0310\u0311\7\6\2\2\u0311\u0315\3\2\2\2") - buf.write("\u0312\u0313\7\5\2\2\u0313\u0315\7\6\2\2\u0314\u0302\3") - buf.write("\2\2\2\u0314\u0309\3\2\2\2\u0314\u030b\3\2\2\2\u0314\u0312") - buf.write("\3\2\2\2\u0315e\3\2\2\2\u0316\u031b\5h\65\2\u0317\u0318") - buf.write("\7\3\2\2\u0318\u031a\5h\65\2\u0319\u0317\3\2\2\2\u031a") - buf.write("\u031d\3\2\2\2\u031b\u0319\3\2\2\2\u031b\u031c\3\2\2\2") - buf.write("\u031cg\3\2\2\2\u031d\u031b\3\2\2\2\u031e\u031f\5j\66") - buf.write("\2\u031f\u0320\t\4\2\2\u0320\u0321\5n8\2\u0321i\3\2\2") - buf.write("\2\u0322\u0325\5x=\2\u0323\u0325\5r:\2\u0324\u0322\3\2") - buf.write("\2\2\u0324\u0323\3\2\2\2\u0325k\3\2\2\2\u0326\u0327\7") - buf.write("\b\2\2\u0327\u032c\5n8\2\u0328\u0329\7\3\2\2\u0329\u032b") - buf.write("\5n8\2\u032a\u0328\3\2\2\2\u032b\u032e\3\2\2\2\u032c\u032a") - buf.write("\3\2\2\2\u032c\u032d\3\2\2\2\u032d\u0330\3\2\2\2\u032e") - buf.write("\u032c\3\2\2\2\u032f\u0331\7\3\2\2\u0330\u032f\3\2\2\2") - buf.write("\u0330\u0331\3\2\2\2\u0331\u0332\3\2\2\2\u0332\u0333\7") - buf.write("\t\2\2\u0333\u0337\3\2\2\2\u0334\u0335\7\b\2\2\u0335\u0337") - buf.write("\7\t\2\2\u0336\u0326\3\2\2\2\u0336\u0334\3\2\2\2\u0337") - buf.write("m\3\2\2\2\u0338\u033f\5r:\2\u0339\u033f\5p9\2\u033a\u033f") - buf.write("\5d\63\2\u033b\u033f\5l\67\2\u033c\u033f\5t;\2\u033d\u033f") - buf.write("\5v<\2\u033e\u0338\3\2\2\2\u033e\u0339\3\2\2\2\u033e\u033a") - buf.write("\3\2\2\2\u033e\u033b\3\2\2\2\u033e\u033c\3\2\2\2\u033e") - buf.write("\u033d\3\2\2\2\u033fo\3\2\2\2\u0340\u0341\5\u0186\u00c4") - buf.write("\2\u0341q\3\2\2\2\u0342\u0343\7\u013b\2\2\u0343s\3\2\2") - buf.write("\2\u0344\u0345\t\b\2\2\u0345u\3\2\2\2\u0346\u0347\t\t") - buf.write("\2\2\u0347w\3\2\2\2\u0348\u0349\5\u0180\u00c1\2\u0349") - buf.write("y\3\2\2\2\u034a\u034e\5\u0088E\2\u034b\u034d\7\17\2\2") - buf.write("\u034c\u034b\3\2\2\2\u034d\u0350\3\2\2\2\u034e\u034c\3") - buf.write("\2\2\2\u034e\u034f\3\2\2\2\u034f\u0351\3\2\2\2\u0350\u034e") - buf.write("\3\2\2\2\u0351\u0352\7\2\2\3\u0352{\3\2\2\2\u0353\u0354") - buf.write("\5\u012c\u0097\2\u0354\u0355\7\2\2\3\u0355}\3\2\2\2\u0356") - buf.write("\u0357\5\u0128\u0095\2\u0357\u0358\7\2\2\3\u0358\177\3") - buf.write("\2\2\2\u0359\u035a\5\u0126\u0094\2\u035a\u035b\7\2\2\3") - buf.write("\u035b\u0081\3\2\2\2\u035c\u035d\5\u012a\u0096\2\u035d") - buf.write("\u035e\7\2\2\3\u035e\u0083\3\2\2\2\u035f\u0360\5\u015c") - buf.write("\u00af\2\u0360\u0361\7\2\2\3\u0361\u0085\3\2\2\2\u0362") - buf.write("\u0363\5\u0162\u00b2\2\u0363\u0364\7\2\2\3\u0364\u0087") - buf.write("\3\2\2\2\u0365\u0627\5\u0098M\2\u0366\u0368\5\u00a8U\2") - buf.write("\u0367\u0366\3\2\2\2\u0367\u0368\3\2\2\2\u0368\u0369\3") - buf.write("\2\2\2\u0369\u0627\5\u00c4c\2\u036a\u036c\7\u011c\2\2") - buf.write("\u036b\u036d\7\u00b4\2\2\u036c\u036b\3\2\2\2\u036c\u036d") - buf.write("\3\2\2\2\u036d\u036e\3\2\2\2\u036e\u0627\5\u0126\u0094") - buf.write("\2\u036f\u0370\7T\2\2\u0370\u0374\5\u00a2R\2\u0371\u0372") - buf.write("\7\u008d\2\2\u0372\u0373\7\u00b8\2\2\u0373\u0375\7r\2") - buf.write("\2\u0374\u0371\3\2\2\2\u0374\u0375\3\2\2\2\u0375\u0376") - buf.write("\3\2\2\2\u0376\u037e\5\u0126\u0094\2\u0377\u037d\5\u0096") - buf.write("L\2\u0378\u037d\5\u0094K\2\u0379\u037a\7\u0125\2\2\u037a") - buf.write("\u037b\t\n\2\2\u037b\u037d\5\u00b0Y\2\u037c\u0377\3\2") - buf.write("\2\2\u037c\u0378\3\2\2\2\u037c\u0379\3\2\2\2\u037d\u0380") - buf.write("\3\2\2\2\u037e\u037c\3\2\2\2\u037e\u037f\3\2\2\2\u037f") - buf.write("\u0627\3\2\2\2\u0380\u037e\3\2\2\2\u0381\u0382\7.\2\2") - buf.write("\u0382\u0383\5\u00a2R\2\u0383\u0384\5\u0126\u0094\2\u0384") - buf.write("\u0385\7\u00f3\2\2\u0385\u0386\t\n\2\2\u0386\u0387\5\u00b0") - buf.write("Y\2\u0387\u0627\3\2\2\2\u0388\u0389\7.\2\2\u0389\u038a") - buf.write("\5\u00a2R\2\u038a\u038b\5\u0126\u0094\2\u038b\u038c\7") - buf.write("\u00f3\2\2\u038c\u038d\5\u0094K\2\u038d\u0627\3\2\2\2") - buf.write("\u038e\u038f\7k\2\2\u038f\u0392\5\u00a2R\2\u0390\u0391") - buf.write("\7\u008d\2\2\u0391\u0393\7r\2\2\u0392\u0390\3\2\2\2\u0392") - buf.write("\u0393\3\2\2\2\u0393\u0394\3\2\2\2\u0394\u0396\5\u0126") - buf.write("\u0094\2\u0395\u0397\t\13\2\2\u0396\u0395\3\2\2\2\u0396") - buf.write("\u0397\3\2\2\2\u0397\u0627\3\2\2\2\u0398\u0399\7\u00f6") - buf.write("\2\2\u0399\u039c\t\f\2\2\u039a\u039b\t\r\2\2\u039b\u039d") - buf.write("\5\u0126\u0094\2\u039c\u039a\3\2\2\2\u039c\u039d\3\2\2") - buf.write("\2\u039d\u03a2\3\2\2\2\u039e\u03a0\7\u00a3\2\2\u039f\u039e") - buf.write("\3\2\2\2\u039f\u03a0\3\2\2\2\u03a0\u03a1\3\2\2\2\u03a1") - buf.write("\u03a3\7\u013b\2\2\u03a2\u039f\3\2\2\2\u03a2\u03a3\3\2") - buf.write("\2\2\u03a3\u0627\3\2\2\2\u03a4\u03a9\5\u008cG\2\u03a5") - buf.write("\u03a6\7\5\2\2\u03a6\u03a7\5\u0162\u00b2\2\u03a7\u03a8") - buf.write("\7\6\2\2\u03a8\u03aa\3\2\2\2\u03a9\u03a5\3\2\2\2\u03a9") - buf.write("\u03aa\3\2\2\2\u03aa\u03ab\3\2\2\2\u03ab\u03ac\5\u00ac") - buf.write("W\2\u03ac\u03b1\5\u00aeX\2\u03ad\u03af\7\65\2\2\u03ae") - buf.write("\u03ad\3\2\2\2\u03ae\u03af\3\2\2\2\u03af\u03b0\3\2\2\2") - buf.write("\u03b0\u03b2\5\u0098M\2\u03b1\u03ae\3\2\2\2\u03b1\u03b2") - buf.write("\3\2\2\2\u03b2\u0627\3\2\2\2\u03b3\u03b8\5\u008cG\2\u03b4") - buf.write("\u03b5\7\5\2\2\u03b5\u03b6\5\u0162\u00b2\2\u03b6\u03b7") - buf.write("\7\6\2\2\u03b7\u03b9\3\2\2\2\u03b8\u03b4\3\2\2\2\u03b8") - buf.write("\u03b9\3\2\2\2\u03b9\u03cf\3\2\2\2\u03ba\u03ce\5\u0096") - buf.write("L\2\u03bb\u03bc\7\u00ca\2\2\u03bc\u03bd\7=\2\2\u03bd\u03be") - buf.write("\7\5\2\2\u03be\u03bf\5\u0162\u00b2\2\u03bf\u03c0\7\6\2") - buf.write("\2\u03c0\u03c5\3\2\2\2\u03c1\u03c2\7\u00ca\2\2\u03c2\u03c3") - buf.write("\7=\2\2\u03c3\u03c5\5\u010e\u0088\2\u03c4\u03bb\3\2\2") - buf.write("\2\u03c4\u03c1\3\2\2\2\u03c5\u03ce\3\2\2\2\u03c6\u03ce") - buf.write("\5\u0090I\2\u03c7\u03ce\5\u0092J\2\u03c8\u03ce\5\u0122") - buf.write("\u0092\2\u03c9\u03ce\5\u00bc_\2\u03ca\u03ce\5\u0094K\2") - buf.write("\u03cb\u03cc\7\u0105\2\2\u03cc\u03ce\5\u00b0Y\2\u03cd") - buf.write("\u03ba\3\2\2\2\u03cd\u03c4\3\2\2\2\u03cd\u03c6\3\2\2\2") - buf.write("\u03cd\u03c7\3\2\2\2\u03cd\u03c8\3\2\2\2\u03cd\u03c9\3") - buf.write("\2\2\2\u03cd\u03ca\3\2\2\2\u03cd\u03cb\3\2\2\2\u03ce\u03d1") - buf.write("\3\2\2\2\u03cf\u03cd\3\2\2\2\u03cf\u03d0\3\2\2\2\u03d0") - buf.write("\u03d6\3\2\2\2\u03d1\u03cf\3\2\2\2\u03d2\u03d4\7\65\2") - buf.write("\2\u03d3\u03d2\3\2\2\2\u03d3\u03d4\3\2\2\2\u03d4\u03d5") - buf.write("\3\2\2\2\u03d5\u03d7\5\u0098M\2\u03d6\u03d3\3\2\2\2\u03d6") - buf.write("\u03d7\3\2\2\2\u03d7\u0627\3\2\2\2\u03d8\u03d9\7T\2\2") - buf.write("\u03d9\u03dd\7\u0102\2\2\u03da\u03db\7\u008d\2\2\u03db") - buf.write("\u03dc\7\u00b8\2\2\u03dc\u03de\7r\2\2\u03dd\u03da\3\2") - buf.write("\2\2\u03dd\u03de\3\2\2\2\u03de\u03df\3\2\2\2\u03df\u03e0") - buf.write("\5\u0128\u0095\2\u03e0\u03e1\7\u00a3\2\2\u03e1\u03ea\5") - buf.write("\u0128\u0095\2\u03e2\u03e9\5\u00acW\2\u03e3\u03e9\5\u0122") - buf.write("\u0092\2\u03e4\u03e9\5\u00bc_\2\u03e5\u03e9\5\u0094K\2") - buf.write("\u03e6\u03e7\7\u0105\2\2\u03e7\u03e9\5\u00b0Y\2\u03e8") - buf.write("\u03e2\3\2\2\2\u03e8\u03e3\3\2\2\2\u03e8\u03e4\3\2\2\2") - buf.write("\u03e8\u03e5\3\2\2\2\u03e8\u03e6\3\2\2\2\u03e9\u03ec\3") - buf.write("\2\2\2\u03ea\u03e8\3\2\2\2\u03ea\u03eb\3\2\2\2\u03eb\u0627") - buf.write("\3\2\2\2\u03ec\u03ea\3\2\2\2\u03ed\u03f2\5\u008eH\2\u03ee") - buf.write("\u03ef\7\5\2\2\u03ef\u03f0\5\u0162\u00b2\2\u03f0\u03f1") - buf.write("\7\6\2\2\u03f1\u03f3\3\2\2\2\u03f2\u03ee\3\2\2\2\u03f2") - buf.write("\u03f3\3\2\2\2\u03f3\u03f4\3\2\2\2\u03f4\u03f5\5\u00ac") - buf.write("W\2\u03f5\u03fa\5\u00aeX\2\u03f6\u03f8\7\65\2\2\u03f7") - buf.write("\u03f6\3\2\2\2\u03f7\u03f8\3\2\2\2\u03f8\u03f9\3\2\2\2") - buf.write("\u03f9\u03fb\5\u0098M\2\u03fa\u03f7\3\2\2\2\u03fa\u03fb") - buf.write("\3\2\2\2\u03fb\u0627\3\2\2\2\u03fc\u03fd\7/\2\2\u03fd") - buf.write("\u03fe\7\u0102\2\2\u03fe\u0400\5\u0126\u0094\2\u03ff\u0401") - buf.write("\5\u009eP\2\u0400\u03ff\3\2\2\2\u0400\u0401\3\2\2\2\u0401") - buf.write("\u0402\3\2\2\2\u0402\u0403\7P\2\2\u0403\u040b\7\u00fc") - buf.write("\2\2\u0404\u040c\5\u0180\u00c1\2\u0405\u0406\7\177\2\2") - buf.write("\u0406\u0407\7K\2\2\u0407\u040c\5\u0110\u0089\2\u0408") - buf.write("\u0409\7\177\2\2\u0409\u040a\7-\2\2\u040a\u040c\7K\2\2") - buf.write("\u040b\u0404\3\2\2\2\u040b\u0405\3\2\2\2\u040b\u0408\3") - buf.write("\2\2\2\u040b\u040c\3\2\2\2\u040c\u0627\3\2\2\2\u040d\u040e") - buf.write("\7.\2\2\u040e\u040f\7\u0102\2\2\u040f\u0410\5\u0126\u0094") - buf.write("\2\u0410\u0411\7+\2\2\u0411\u0412\t\16\2\2\u0412\u0413") - buf.write("\5\u015e\u00b0\2\u0413\u0627\3\2\2\2\u0414\u0415\7.\2") - buf.write("\2\u0415\u0416\7\u0102\2\2\u0416\u0417\5\u0126\u0094\2") - buf.write("\u0417\u0418\7+\2\2\u0418\u0419\t\16\2\2\u0419\u041a\7") - buf.write("\5\2\2\u041a\u041b\5\u015e\u00b0\2\u041b\u041c\7\6\2\2") - buf.write("\u041c\u0627\3\2\2\2\u041d\u041e\7.\2\2\u041e\u041f\7") - buf.write("\u0102\2\2\u041f\u0420\5\u0126\u0094\2\u0420\u0421\7\u00dd") - buf.write("\2\2\u0421\u0422\7J\2\2\u0422\u0423\5\u0126\u0094\2\u0423") - buf.write("\u0424\7\u0109\2\2\u0424\u0425\5\u017c\u00bf\2\u0425\u0627") - buf.write("\3\2\2\2\u0426\u0427\7.\2\2\u0427\u0428\7\u0102\2\2\u0428") - buf.write("\u0429\5\u0126\u0094\2\u0429\u042a\7k\2\2\u042a\u042b") - buf.write("\t\16\2\2\u042b\u042c\7\5\2\2\u042c\u042d\5\u0124\u0093") - buf.write("\2\u042d\u042e\7\6\2\2\u042e\u0627\3\2\2\2\u042f\u0430") - buf.write("\7.\2\2\u0430\u0431\7\u0102\2\2\u0431\u0432\5\u0126\u0094") - buf.write("\2\u0432\u0433\7k\2\2\u0433\u0434\t\16\2\2\u0434\u0435") - buf.write("\5\u0124\u0093\2\u0435\u0627\3\2\2\2\u0436\u0437\7.\2") - buf.write("\2\u0437\u0438\t\17\2\2\u0438\u0439\5\u0126\u0094\2\u0439") - buf.write("\u043a\7\u00dd\2\2\u043a\u043b\7\u0109\2\2\u043b\u043c") - buf.write("\5\u0126\u0094\2\u043c\u0627\3\2\2\2\u043d\u043e\7.\2") - buf.write("\2\u043e\u043f\t\17\2\2\u043f\u0440\5\u0126\u0094\2\u0440") - buf.write("\u0441\7\u00f3\2\2\u0441\u0442\7\u0105\2\2\u0442\u0443") - buf.write("\5\u00b0Y\2\u0443\u0627\3\2\2\2\u0444\u0445\7.\2\2\u0445") - buf.write("\u0446\t\17\2\2\u0446\u0447\5\u0126\u0094\2\u0447\u0448") - buf.write("\7\u011a\2\2\u0448\u044b\7\u0105\2\2\u0449\u044a\7\u008d") - buf.write("\2\2\u044a\u044c\7r\2\2\u044b\u0449\3\2\2\2\u044b\u044c") - buf.write("\3\2\2\2\u044c\u044d\3\2\2\2\u044d\u044e\5\u00b0Y\2\u044e") - buf.write("\u0627\3\2\2\2\u044f\u0450\7.\2\2\u0450\u0451\7\u0102") - buf.write("\2\2\u0451\u0452\5\u0126\u0094\2\u0452\u0454\t\20\2\2") - buf.write("\u0453\u0455\7J\2\2\u0454\u0453\3\2\2\2\u0454\u0455\3") - buf.write("\2\2\2\u0455\u0456\3\2\2\2\u0456\u0458\5\u0126\u0094\2") - buf.write("\u0457\u0459\5\u0188\u00c5\2\u0458\u0457\3\2\2\2\u0458") - buf.write("\u0459\3\2\2\2\u0459\u0627\3\2\2\2\u045a\u045b\7.\2\2") - buf.write("\u045b\u045c\7\u0102\2\2\u045c\u045e\5\u0126\u0094\2\u045d") - buf.write("\u045f\5\u009eP\2\u045e\u045d\3\2\2\2\u045e\u045f\3\2") - buf.write("\2\2\u045f\u0460\3\2\2\2\u0460\u0462\7B\2\2\u0461\u0463") - buf.write("\7J\2\2\u0462\u0461\3\2\2\2\u0462\u0463\3\2\2\2\u0463") - buf.write("\u0464\3\2\2\2\u0464\u0465\5\u0126\u0094\2\u0465\u0467") - buf.write("\5\u0164\u00b3\2\u0466\u0468\5\u015a\u00ae\2\u0467\u0466") - buf.write("\3\2\2\2\u0467\u0468\3\2\2\2\u0468\u0627\3\2\2\2\u0469") - buf.write("\u046a\7.\2\2\u046a\u046b\7\u0102\2\2\u046b\u046d\5\u0126") - buf.write("\u0094\2\u046c\u046e\5\u009eP\2\u046d\u046c\3\2\2\2\u046d") - buf.write("\u046e\3\2\2\2\u046e\u046f\3\2\2\2\u046f\u0470\7\u00df") - buf.write("\2\2\u0470\u0471\7K\2\2\u0471\u0472\7\5\2\2\u0472\u0473") - buf.write("\5\u015e\u00b0\2\u0473\u0474\7\6\2\2\u0474\u0627\3\2\2") - buf.write("\2\u0475\u0476\7.\2\2\u0476\u0477\7\u0102\2\2\u0477\u0479") - buf.write("\5\u0126\u0094\2\u0478\u047a\5\u009eP\2\u0479\u0478\3") - buf.write("\2\2\2\u0479\u047a\3\2\2\2\u047a\u047b\3\2\2\2\u047b\u047c") - buf.write("\7\u00f3\2\2\u047c\u047d\7\u00f0\2\2\u047d\u0481\7\u013b") - buf.write("\2\2\u047e\u047f\7\u0125\2\2\u047f\u0480\7\u00f1\2\2\u0480") - buf.write("\u0482\5\u00b0Y\2\u0481\u047e\3\2\2\2\u0481\u0482\3\2") - buf.write("\2\2\u0482\u0627\3\2\2\2\u0483\u0484\7.\2\2\u0484\u0485") - buf.write("\7\u0102\2\2\u0485\u0487\5\u0126\u0094\2\u0486\u0488\5") - buf.write("\u009eP\2\u0487\u0486\3\2\2\2\u0487\u0488\3\2\2\2\u0488") - buf.write("\u0489\3\2\2\2\u0489\u048a\7\u00f3\2\2\u048a\u048b\7\u00f1") - buf.write("\2\2\u048b\u048c\5\u00b0Y\2\u048c\u0627\3\2\2\2\u048d") - buf.write("\u048e\7.\2\2\u048e\u048f\t\17\2\2\u048f\u0490\5\u0126") - buf.write("\u0094\2\u0490\u0494\7+\2\2\u0491\u0492\7\u008d\2\2\u0492") - buf.write("\u0493\7\u00b8\2\2\u0493\u0495\7r\2\2\u0494\u0491\3\2") - buf.write("\2\2\u0494\u0495\3\2\2\2\u0495\u0497\3\2\2\2\u0496\u0498") - buf.write("\5\u009cO\2\u0497\u0496\3\2\2\2\u0498\u0499\3\2\2\2\u0499") - buf.write("\u0497\3\2\2\2\u0499\u049a\3\2\2\2\u049a\u0627\3\2\2\2") - buf.write("\u049b\u049c\7.\2\2\u049c\u049d\7\u0102\2\2\u049d\u049e") - buf.write("\5\u0126\u0094\2\u049e\u049f\5\u009eP\2\u049f\u04a0\7") - buf.write("\u00dd\2\2\u04a0\u04a1\7\u0109\2\2\u04a1\u04a2\5\u009e") - buf.write("P\2\u04a2\u0627\3\2\2\2\u04a3\u04a4\7.\2\2\u04a4\u04a5") - buf.write("\t\17\2\2\u04a5\u04a6\5\u0126\u0094\2\u04a6\u04a9\7k\2") - buf.write("\2\u04a7\u04a8\7\u008d\2\2\u04a8\u04aa\7r\2\2\u04a9\u04a7") - buf.write("\3\2\2\2\u04a9\u04aa\3\2\2\2\u04aa\u04ab\3\2\2\2\u04ab") - buf.write("\u04b0\5\u009eP\2\u04ac\u04ad\7\3\2\2\u04ad\u04af\5\u009e") - buf.write("P\2\u04ae\u04ac\3\2\2\2\u04af\u04b2\3\2\2\2\u04b0\u04ae") - buf.write("\3\2\2\2\u04b0\u04b1\3\2\2\2\u04b1\u04b4\3\2\2\2\u04b2") - buf.write("\u04b0\3\2\2\2\u04b3\u04b5\7\u00d4\2\2\u04b4\u04b3\3\2") - buf.write("\2\2\u04b4\u04b5\3\2\2\2\u04b5\u0627\3\2\2\2\u04b6\u04b7") - buf.write("\7.\2\2\u04b7\u04b8\7\u0102\2\2\u04b8\u04ba\5\u0126\u0094") - buf.write("\2\u04b9\u04bb\5\u009eP\2\u04ba\u04b9\3\2\2\2\u04ba\u04bb") - buf.write("\3\2\2\2\u04bb\u04bc\3\2\2\2\u04bc\u04bd\7\u00f3\2\2\u04bd") - buf.write("\u04be\5\u0094K\2\u04be\u0627\3\2\2\2\u04bf\u04c0\7.\2") - buf.write("\2\u04c0\u04c1\7\u0102\2\2\u04c1\u04c2\5\u0126\u0094\2") - buf.write("\u04c2\u04c3\7\u00d9\2\2\u04c3\u04c4\7\u00cb\2\2\u04c4") - buf.write("\u0627\3\2\2\2\u04c5\u04c6\7k\2\2\u04c6\u04c9\7\u0102") - buf.write("\2\2\u04c7\u04c8\7\u008d\2\2\u04c8\u04ca\7r\2\2\u04c9") - buf.write("\u04c7\3\2\2\2\u04c9\u04ca\3\2\2\2\u04ca\u04cb\3\2\2\2") - buf.write("\u04cb\u04cd\5\u0126\u0094\2\u04cc\u04ce\7\u00d4\2\2\u04cd") - buf.write("\u04cc\3\2\2\2\u04cd\u04ce\3\2\2\2\u04ce\u0627\3\2\2\2") - buf.write("\u04cf\u04d0\7k\2\2\u04d0\u04d3\7\u0120\2\2\u04d1\u04d2") - buf.write("\7\u008d\2\2\u04d2\u04d4\7r\2\2\u04d3\u04d1\3\2\2\2\u04d3") - buf.write("\u04d4\3\2\2\2\u04d4\u04d5\3\2\2\2\u04d5\u0627\5\u0126") - buf.write("\u0094\2\u04d6\u04d9\7T\2\2\u04d7\u04d8\7\u00c0\2\2\u04d8") - buf.write("\u04da\7\u00df\2\2\u04d9\u04d7\3\2\2\2\u04d9\u04da\3\2") - buf.write("\2\2\u04da\u04df\3\2\2\2\u04db\u04dd\7\u0087\2\2\u04dc") - buf.write("\u04db\3\2\2\2\u04dc\u04dd\3\2\2\2\u04dd\u04de\3\2\2\2") - buf.write("\u04de\u04e0\7\u0106\2\2\u04df\u04dc\3\2\2\2\u04df\u04e0") - buf.write("\3\2\2\2\u04e0\u04e1\3\2\2\2\u04e1\u04e5\7\u0120\2\2\u04e2") - buf.write("\u04e3\7\u008d\2\2\u04e3\u04e4\7\u00b8\2\2\u04e4\u04e6") - buf.write("\7r\2\2\u04e5\u04e2\3\2\2\2\u04e5\u04e6\3\2\2\2\u04e6") - buf.write("\u04e7\3\2\2\2\u04e7\u04e9\5\u0126\u0094\2\u04e8\u04ea") - buf.write("\5\u0116\u008c\2\u04e9\u04e8\3\2\2\2\u04e9\u04ea\3\2\2") - buf.write("\2\u04ea\u04f3\3\2\2\2\u04eb\u04f2\5\u0096L\2\u04ec\u04ed") - buf.write("\7\u00ca\2\2\u04ed\u04ee\7\u00bc\2\2\u04ee\u04f2\5\u010e") - buf.write("\u0088\2\u04ef\u04f0\7\u0105\2\2\u04f0\u04f2\5\u00b0Y") - buf.write("\2\u04f1\u04eb\3\2\2\2\u04f1\u04ec\3\2\2\2\u04f1\u04ef") - buf.write("\3\2\2\2\u04f2\u04f5\3\2\2\2\u04f3\u04f1\3\2\2\2\u04f3") - buf.write("\u04f4\3\2\2\2\u04f4\u04f6\3\2\2\2\u04f5\u04f3\3\2\2\2") - buf.write("\u04f6\u04f7\7\65\2\2\u04f7\u04f8\5\u0098M\2\u04f8\u0627") - buf.write("\3\2\2\2\u04f9\u04fc\7T\2\2\u04fa\u04fb\7\u00c0\2\2\u04fb") - buf.write("\u04fd\7\u00df\2\2\u04fc\u04fa\3\2\2\2\u04fc\u04fd\3\2") - buf.write("\2\2\u04fd\u04ff\3\2\2\2\u04fe\u0500\7\u0087\2\2\u04ff") - buf.write("\u04fe\3\2\2\2\u04ff\u0500\3\2\2\2\u0500\u0501\3\2\2\2") - buf.write("\u0501\u0502\7\u0106\2\2\u0502\u0503\7\u0120\2\2\u0503") - buf.write("\u0508\5\u0128\u0095\2\u0504\u0505\7\5\2\2\u0505\u0506") - buf.write("\5\u0162\u00b2\2\u0506\u0507\7\6\2\2\u0507\u0509\3\2\2") - buf.write("\2\u0508\u0504\3\2\2\2\u0508\u0509\3\2\2\2\u0509\u050a") - buf.write("\3\2\2\2\u050a\u050d\5\u00acW\2\u050b\u050c\7\u00bf\2") - buf.write("\2\u050c\u050e\5\u00b0Y\2\u050d\u050b\3\2\2\2\u050d\u050e") - buf.write("\3\2\2\2\u050e\u0627\3\2\2\2\u050f\u0510\7.\2\2\u0510") - buf.write("\u0511\7\u0120\2\2\u0511\u0513\5\u0126\u0094\2\u0512\u0514") - buf.write("\7\65\2\2\u0513\u0512\3\2\2\2\u0513\u0514\3\2\2\2\u0514") - buf.write("\u0515\3\2\2\2\u0515\u0516\5\u0098M\2\u0516\u0627\3\2") - buf.write("\2\2\u0517\u051a\7T\2\2\u0518\u0519\7\u00c0\2\2\u0519") - buf.write("\u051b\7\u00df\2\2\u051a\u0518\3\2\2\2\u051a\u051b\3\2") - buf.write("\2\2\u051b\u051d\3\2\2\2\u051c\u051e\7\u0106\2\2\u051d") - buf.write("\u051c\3\2\2\2\u051d\u051e\3\2\2\2\u051e\u051f\3\2\2\2") - buf.write("\u051f\u0523\7\u0085\2\2\u0520\u0521\7\u008d\2\2\u0521") - buf.write("\u0522\7\u00b8\2\2\u0522\u0524\7r\2\2\u0523\u0520\3\2") - buf.write("\2\2\u0523\u0524\3\2\2\2\u0524\u0525\3\2\2\2\u0525\u0526") - buf.write("\5\u0126\u0094\2\u0526\u0527\7\65\2\2\u0527\u0531\7\u013b") - buf.write("\2\2\u0528\u0529\7\u011e\2\2\u0529\u052e\5\u00c2b\2\u052a") - buf.write("\u052b\7\3\2\2\u052b\u052d\5\u00c2b\2\u052c\u052a\3\2") - buf.write("\2\2\u052d\u0530\3\2\2\2\u052e\u052c\3\2\2\2\u052e\u052f") - buf.write("\3\2\2\2\u052f\u0532\3\2\2\2\u0530\u052e\3\2\2\2\u0531") - buf.write("\u0528\3\2\2\2\u0531\u0532\3\2\2\2\u0532\u0627\3\2\2\2") - buf.write("\u0533\u0535\7k\2\2\u0534\u0536\7\u0106\2\2\u0535\u0534") - buf.write("\3\2\2\2\u0535\u0536\3\2\2\2\u0536\u0537\3\2\2\2\u0537") - buf.write("\u053a\7\u0085\2\2\u0538\u0539\7\u008d\2\2\u0539\u053b") - buf.write("\7r\2\2\u053a\u0538\3\2\2\2\u053a\u053b\3\2\2\2\u053b") - buf.write("\u053c\3\2\2\2\u053c\u0627\5\u0126\u0094\2\u053d\u053f") - buf.write("\7s\2\2\u053e\u0540\t\21\2\2\u053f\u053e\3\2\2\2\u053f") - buf.write("\u0540\3\2\2\2\u0540\u0541\3\2\2\2\u0541\u0627\5\u0088") - buf.write("E\2\u0542\u0543\7\u00f6\2\2\u0543\u0546\7\u0103\2\2\u0544") - buf.write("\u0545\t\r\2\2\u0545\u0547\5\u0126\u0094\2\u0546\u0544") - buf.write("\3\2\2\2\u0546\u0547\3\2\2\2\u0547\u054c\3\2\2\2\u0548") - buf.write("\u054a\7\u00a3\2\2\u0549\u0548\3\2\2\2\u0549\u054a\3\2") - buf.write("\2\2\u054a\u054b\3\2\2\2\u054b\u054d\7\u013b\2\2\u054c") - buf.write("\u0549\3\2\2\2\u054c\u054d\3\2\2\2\u054d\u0627\3\2\2\2") - buf.write("\u054e\u054f\7\u00f6\2\2\u054f\u0550\7\u0102\2\2\u0550") - buf.write("\u0553\7u\2\2\u0551\u0552\t\r\2\2\u0552\u0554\5\u0126") - buf.write("\u0094\2\u0553\u0551\3\2\2\2\u0553\u0554\3\2\2\2\u0554") - buf.write("\u0555\3\2\2\2\u0555\u0556\7\u00a3\2\2\u0556\u0558\7\u013b") - buf.write("\2\2\u0557\u0559\5\u009eP\2\u0558\u0557\3\2\2\2\u0558") - buf.write("\u0559\3\2\2\2\u0559\u0627\3\2\2\2\u055a\u055b\7\u00f6") - buf.write("\2\2\u055b\u055c\7\u0105\2\2\u055c\u0561\5\u0126\u0094") - buf.write("\2\u055d\u055e\7\5\2\2\u055e\u055f\5\u00b4[\2\u055f\u0560") - buf.write("\7\6\2\2\u0560\u0562\3\2\2\2\u0561\u055d\3\2\2\2\u0561") - buf.write("\u0562\3\2\2\2\u0562\u0627\3\2\2\2\u0563\u0564\7\u00f6") - buf.write("\2\2\u0564\u0565\7K\2\2\u0565\u0566\t\r\2\2\u0566\u0569") - buf.write("\5\u0126\u0094\2\u0567\u0568\t\r\2\2\u0568\u056a\5\u0126") - buf.write("\u0094\2\u0569\u0567\3\2\2\2\u0569\u056a\3\2\2\2\u056a") - buf.write("\u0627\3\2\2\2\u056b\u056c\7\u00f6\2\2\u056c\u056f\7\u0121") - buf.write("\2\2\u056d\u056e\t\r\2\2\u056e\u0570\5\u0126\u0094\2\u056f") - buf.write("\u056d\3\2\2\2\u056f\u0570\3\2\2\2\u0570\u0575\3\2\2\2") - buf.write("\u0571\u0573\7\u00a3\2\2\u0572\u0571\3\2\2\2\u0572\u0573") - buf.write("\3\2\2\2\u0573\u0574\3\2\2\2\u0574\u0576\7\u013b\2\2\u0575") - buf.write("\u0572\3\2\2\2\u0575\u0576\3\2\2\2\u0576\u0627\3\2\2\2") - buf.write("\u0577\u0578\7\u00f6\2\2\u0578\u0579\7\u00cb\2\2\u0579") - buf.write("\u057b\5\u0126\u0094\2\u057a\u057c\5\u009eP\2\u057b\u057a") - buf.write("\3\2\2\2\u057b\u057c\3\2\2\2\u057c\u0627\3\2\2\2\u057d") - buf.write("\u057f\7\u00f6\2\2\u057e\u0580\5\u0180\u00c1\2\u057f\u057e") - buf.write("\3\2\2\2\u057f\u0580\3\2\2\2\u0580\u0581\3\2\2\2\u0581") - buf.write("\u0589\7\u0086\2\2\u0582\u0584\7\u00a3\2\2\u0583\u0582") - buf.write("\3\2\2\2\u0583\u0584\3\2\2\2\u0584\u0587\3\2\2\2\u0585") - buf.write("\u0588\5\u0126\u0094\2\u0586\u0588\7\u013b\2\2\u0587\u0585") - buf.write("\3\2\2\2\u0587\u0586\3\2\2\2\u0588\u058a\3\2\2\2\u0589") - buf.write("\u0583\3\2\2\2\u0589\u058a\3\2\2\2\u058a\u0627\3\2\2\2") - buf.write("\u058b\u058c\7\u00f6\2\2\u058c\u058d\7T\2\2\u058d\u058e") - buf.write("\7\u0102\2\2\u058e\u0591\5\u0126\u0094\2\u058f\u0590\7") - buf.write("\65\2\2\u0590\u0592\7\u00f0\2\2\u0591\u058f\3\2\2\2\u0591") - buf.write("\u0592\3\2\2\2\u0592\u0627\3\2\2\2\u0593\u0594\7\u00f6") - buf.write("\2\2\u0594\u0595\7W\2\2\u0595\u0627\7\u00b4\2\2\u0596") - buf.write("\u0597\t\22\2\2\u0597\u0599\7\u0085\2\2\u0598\u059a\7") - buf.write("u\2\2\u0599\u0598\3\2\2\2\u0599\u059a\3\2\2\2\u059a\u059b") - buf.write("\3\2\2\2\u059b\u0627\5\u00a4S\2\u059c\u059d\t\22\2\2\u059d") - buf.write("\u059f\5\u00a2R\2\u059e\u05a0\7u\2\2\u059f\u059e\3\2\2") - buf.write("\2\u059f\u05a0\3\2\2\2\u05a0\u05a1\3\2\2\2\u05a1\u05a2") - buf.write("\5\u0126\u0094\2\u05a2\u0627\3\2\2\2\u05a3\u05a5\t\22") - buf.write("\2\2\u05a4\u05a6\7\u0102\2\2\u05a5\u05a4\3\2\2\2\u05a5") - buf.write("\u05a6\3\2\2\2\u05a6\u05a8\3\2\2\2\u05a7\u05a9\t\23\2") - buf.write("\2\u05a8\u05a7\3\2\2\2\u05a8\u05a9\3\2\2\2\u05a9\u05aa") - buf.write("\3\2\2\2\u05aa\u05ac\5\u0126\u0094\2\u05ab\u05ad\5\u009e") - buf.write("P\2\u05ac\u05ab\3\2\2\2\u05ac\u05ad\3\2\2\2\u05ad\u05af") - buf.write("\3\2\2\2\u05ae\u05b0\5\u00a6T\2\u05af\u05ae\3\2\2\2\u05af") - buf.write("\u05b0\3\2\2\2\u05b0\u0627\3\2\2\2\u05b1\u05b3\t\22\2") - buf.write("\2\u05b2\u05b4\7\u00d5\2\2\u05b3\u05b2\3\2\2\2\u05b3\u05b4") - buf.write("\3\2\2\2\u05b4\u05b5\3\2\2\2\u05b5\u0627\5\u0098M\2\u05b6") - buf.write("\u05b7\7L\2\2\u05b7\u05b8\7\u00bc\2\2\u05b8\u05b9\5\u00a2") - buf.write("R\2\u05b9\u05ba\5\u0126\u0094\2\u05ba\u05bb\7\u009a\2") - buf.write("\2\u05bb\u05bc\t\24\2\2\u05bc\u0627\3\2\2\2\u05bd\u05be") - buf.write("\7L\2\2\u05be\u05bf\7\u00bc\2\2\u05bf\u05c0\7\u0102\2") - buf.write("\2\u05c0\u05c1\5\u0126\u0094\2\u05c1\u05c2\7\u009a\2\2") - buf.write("\u05c2\u05c3\t\24\2\2\u05c3\u0627\3\2\2\2\u05c4\u05c5") - buf.write("\7\u00dc\2\2\u05c5\u05c6\7\u0102\2\2\u05c6\u0627\5\u0126") - buf.write("\u0094\2\u05c7\u05cf\7\u00dc\2\2\u05c8\u05d0\7\u013b\2") - buf.write("\2\u05c9\u05cb\13\2\2\2\u05ca\u05c9\3\2\2\2\u05cb\u05ce") - buf.write("\3\2\2\2\u05cc\u05cd\3\2\2\2\u05cc\u05ca\3\2\2\2\u05cd") - buf.write("\u05d0\3\2\2\2\u05ce\u05cc\3\2\2\2\u05cf\u05c8\3\2\2\2") - buf.write("\u05cf\u05cc\3\2\2\2\u05d0\u0627\3\2\2\2\u05d1\u05d3\7") - buf.write(">\2\2\u05d2\u05d4\7\u00a0\2\2\u05d3\u05d2\3\2\2\2\u05d3") - buf.write("\u05d4\3\2\2\2\u05d4\u05d5\3\2\2\2\u05d5\u05d6\7\u0102") - buf.write("\2\2\u05d6\u05d9\5\u0126\u0094\2\u05d7\u05d8\7\u00bf\2") - buf.write("\2\u05d8\u05da\5\u00b0Y\2\u05d9\u05d7\3\2\2\2\u05d9\u05da") - buf.write("\3\2\2\2\u05da\u05df\3\2\2\2\u05db\u05dd\7\65\2\2\u05dc") - buf.write("\u05db\3\2\2\2\u05dc\u05dd\3\2\2\2\u05dd\u05de\3\2\2\2") - buf.write("\u05de\u05e0\5\u0098M\2\u05df\u05dc\3\2\2\2\u05df\u05e0") - buf.write("\3\2\2\2\u05e0\u0627\3\2\2\2\u05e1\u05e2\7\u0115\2\2\u05e2") - buf.write("\u05e5\7\u0102\2\2\u05e3\u05e4\7\u008d\2\2\u05e4\u05e6") - buf.write("\7r\2\2\u05e5\u05e3\3\2\2\2\u05e5\u05e6\3\2\2\2\u05e6") - buf.write("\u05e7\3\2\2\2\u05e7\u0627\5\u0126\u0094\2\u05e8\u05e9") - buf.write("\7D\2\2\u05e9\u0627\7>\2\2\u05ea\u05eb\7\u00a7\2\2\u05eb") - buf.write("\u05ed\7\\\2\2\u05ec\u05ee\7\u00a8\2\2\u05ed\u05ec\3\2") - buf.write("\2\2\u05ed\u05ee\3\2\2\2\u05ee\u05ef\3\2\2\2\u05ef\u05f0") - buf.write("\7\u0094\2\2\u05f0\u05f2\7\u013b\2\2\u05f1\u05f3\7\u00c8") - buf.write("\2\2\u05f2\u05f1\3\2\2\2\u05f2\u05f3\3\2\2\2\u05f3\u05f4") - buf.write("\3\2\2\2\u05f4\u05f5\7\u0099\2\2\u05f5\u05f6\7\u0102\2") - buf.write("\2\u05f6\u05f8\5\u0126\u0094\2\u05f7\u05f9\5\u009eP\2") - buf.write("\u05f8\u05f7\3\2\2\2\u05f8\u05f9\3\2\2\2\u05f9\u0627\3") - buf.write("\2\2\2\u05fa\u05fb\7\u0111\2\2\u05fb\u05fc\7\u0102\2\2") - buf.write("\u05fc\u05fe\5\u0126\u0094\2\u05fd\u05ff\5\u009eP\2\u05fe") - buf.write("\u05fd\3\2\2\2\u05fe\u05ff\3\2\2\2\u05ff\u0627\3\2\2\2") - buf.write("\u0600\u0601\7\u00b3\2\2\u0601\u0602\7\u00de\2\2\u0602") - buf.write("\u0603\7\u0102\2\2\u0603\u0627\5\u0126\u0094\2\u0604\u0605") - buf.write("\t\25\2\2\u0605\u060d\5\u0180\u00c1\2\u0606\u060e\7\u013b") - buf.write("\2\2\u0607\u0609\13\2\2\2\u0608\u0607\3\2\2\2\u0609\u060c") - buf.write("\3\2\2\2\u060a\u060b\3\2\2\2\u060a\u0608\3\2\2\2\u060b") - buf.write("\u060e\3\2\2\2\u060c\u060a\3\2\2\2\u060d\u0606\3\2\2\2") - buf.write("\u060d\u060a\3\2\2\2\u060e\u0627\3\2\2\2\u060f\u0610\7") - buf.write("\u00f3\2\2\u0610\u0614\7\u00e5\2\2\u0611\u0613\13\2\2") - buf.write("\2\u0612\u0611\3\2\2\2\u0613\u0616\3\2\2\2\u0614\u0615") - buf.write("\3\2\2\2\u0614\u0612\3\2\2\2\u0615\u0627\3\2\2\2\u0616") - buf.write("\u0614\3\2\2\2\u0617\u061b\7\u00f3\2\2\u0618\u061a\13") - buf.write("\2\2\2\u0619\u0618\3\2\2\2\u061a\u061d\3\2\2\2\u061b\u061c") - buf.write("\3\2\2\2\u061b\u0619\3\2\2\2\u061c\u0627\3\2\2\2\u061d") - buf.write("\u061b\3\2\2\2\u061e\u0627\7\u00e0\2\2\u061f\u0623\5\u008a") - buf.write("F\2\u0620\u0622\13\2\2\2\u0621\u0620\3\2\2\2\u0622\u0625") - buf.write("\3\2\2\2\u0623\u0624\3\2\2\2\u0623\u0621\3\2\2\2\u0624") - buf.write("\u0627\3\2\2\2\u0625\u0623\3\2\2\2\u0626\u0365\3\2\2\2") - buf.write("\u0626\u0367\3\2\2\2\u0626\u036a\3\2\2\2\u0626\u036f\3") - buf.write("\2\2\2\u0626\u0381\3\2\2\2\u0626\u0388\3\2\2\2\u0626\u038e") - buf.write("\3\2\2\2\u0626\u0398\3\2\2\2\u0626\u03a4\3\2\2\2\u0626") - buf.write("\u03b3\3\2\2\2\u0626\u03d8\3\2\2\2\u0626\u03ed\3\2\2\2") - buf.write("\u0626\u03fc\3\2\2\2\u0626\u040d\3\2\2\2\u0626\u0414\3") - buf.write("\2\2\2\u0626\u041d\3\2\2\2\u0626\u0426\3\2\2\2\u0626\u042f") - buf.write("\3\2\2\2\u0626\u0436\3\2\2\2\u0626\u043d\3\2\2\2\u0626") - buf.write("\u0444\3\2\2\2\u0626\u044f\3\2\2\2\u0626\u045a\3\2\2\2") - buf.write("\u0626\u0469\3\2\2\2\u0626\u0475\3\2\2\2\u0626\u0483\3") - buf.write("\2\2\2\u0626\u048d\3\2\2\2\u0626\u049b\3\2\2\2\u0626\u04a3") - buf.write("\3\2\2\2\u0626\u04b6\3\2\2\2\u0626\u04bf\3\2\2\2\u0626") - buf.write("\u04c5\3\2\2\2\u0626\u04cf\3\2\2\2\u0626\u04d6\3\2\2\2") - buf.write("\u0626\u04f9\3\2\2\2\u0626\u050f\3\2\2\2\u0626\u0517\3") - buf.write("\2\2\2\u0626\u0533\3\2\2\2\u0626\u053d\3\2\2\2\u0626\u0542") - buf.write("\3\2\2\2\u0626\u054e\3\2\2\2\u0626\u055a\3\2\2\2\u0626") - buf.write("\u0563\3\2\2\2\u0626\u056b\3\2\2\2\u0626\u0577\3\2\2\2") - buf.write("\u0626\u057d\3\2\2\2\u0626\u058b\3\2\2\2\u0626\u0593\3") - buf.write("\2\2\2\u0626\u0596\3\2\2\2\u0626\u059c\3\2\2\2\u0626\u05a3") - buf.write("\3\2\2\2\u0626\u05b1\3\2\2\2\u0626\u05b6\3\2\2\2\u0626") - buf.write("\u05bd\3\2\2\2\u0626\u05c4\3\2\2\2\u0626\u05c7\3\2\2\2") - buf.write("\u0626\u05d1\3\2\2\2\u0626\u05e1\3\2\2\2\u0626\u05e8\3") - buf.write("\2\2\2\u0626\u05ea\3\2\2\2\u0626\u05fa\3\2\2\2\u0626\u0600") - buf.write("\3\2\2\2\u0626\u0604\3\2\2\2\u0626\u060f\3\2\2\2\u0626") - buf.write("\u0617\3\2\2\2\u0626\u061e\3\2\2\2\u0626\u061f\3\2\2\2") - buf.write("\u0627\u0089\3\2\2\2\u0628\u0629\7T\2\2\u0629\u06d1\7") - buf.write("\u00e5\2\2\u062a\u062b\7k\2\2\u062b\u06d1\7\u00e5\2\2") - buf.write("\u062c\u062e\7\u0088\2\2\u062d\u062f\7\u00e5\2\2\u062e") - buf.write("\u062d\3\2\2\2\u062e\u062f\3\2\2\2\u062f\u06d1\3\2\2\2") - buf.write("\u0630\u0632\7\u00e2\2\2\u0631\u0633\7\u00e5\2\2\u0632") - buf.write("\u0631\3\2\2\2\u0632\u0633\3\2\2\2\u0633\u06d1\3\2\2\2") - buf.write("\u0634\u0635\7\u00f6\2\2\u0635\u06d1\7\u0088\2\2\u0636") - buf.write("\u0637\7\u00f6\2\2\u0637\u0639\7\u00e5\2\2\u0638\u063a") - buf.write("\7\u0088\2\2\u0639\u0638\3\2\2\2\u0639\u063a\3\2\2\2\u063a") - buf.write("\u06d1\3\2\2\2\u063b\u063c\7\u00f6\2\2\u063c\u06d1\7\u00d2") - buf.write("\2\2\u063d\u063e\7\u00f6\2\2\u063e\u06d1\7\u00e6\2\2\u063f") - buf.write("\u0640\7\u00f6\2\2\u0640\u0641\7W\2\2\u0641\u06d1\7\u00e6") - buf.write("\2\2\u0642\u0643\7t\2\2\u0643\u06d1\7\u0102\2\2\u0644") - buf.write("\u0645\7\u008f\2\2\u0645\u06d1\7\u0102\2\2\u0646\u0647") - buf.write("\7\u00f6\2\2\u0647\u06d1\7O\2\2\u0648\u0649\7\u00f6\2") - buf.write("\2\u0649\u064a\7T\2\2\u064a\u06d1\7\u0102\2\2\u064b\u064c") - buf.write("\7\u00f6\2\2\u064c\u06d1\7\u010d\2\2\u064d\u064e\7\u00f6") - buf.write("\2\2\u064e\u06d1\7\u0092\2\2\u064f\u0650\7\u00f6\2\2\u0650") - buf.write("\u06d1\7\u00ab\2\2\u0651\u0652\7T\2\2\u0652\u06d1\7\u0091") - buf.write("\2\2\u0653\u0654\7k\2\2\u0654\u06d1\7\u0091\2\2\u0655") - buf.write("\u0656\7.\2\2\u0656\u06d1\7\u0091\2\2\u0657\u0658\7\u00aa") - buf.write("\2\2\u0658\u06d1\7\u0102\2\2\u0659\u065a\7\u00aa\2\2\u065a") - buf.write("\u06d1\7]\2\2\u065b\u065c\7\u0119\2\2\u065c\u06d1\7\u0102") - buf.write("\2\2\u065d\u065e\7\u0119\2\2\u065e\u06d1\7]\2\2\u065f") - buf.write("\u0660\7T\2\2\u0660\u0661\7\u0106\2\2\u0661\u06d1\7\u00ad") - buf.write("\2\2\u0662\u0663\7k\2\2\u0663\u0664\7\u0106\2\2\u0664") - buf.write("\u06d1\7\u00ad\2\2\u0665\u0666\7.\2\2\u0666\u0667\7\u0102") - buf.write("\2\2\u0667\u0668\5\u0128\u0095\2\u0668\u0669\7\u00b8\2") - buf.write("\2\u0669\u066a\7F\2\2\u066a\u06d1\3\2\2\2\u066b\u066c") - buf.write("\7.\2\2\u066c\u066d\7\u0102\2\2\u066d\u066e\5\u0128\u0095") - buf.write("\2\u066e\u066f\7F\2\2\u066f\u0670\7=\2\2\u0670\u06d1\3") - buf.write("\2\2\2\u0671\u0672\7.\2\2\u0672\u0673\7\u0102\2\2\u0673") - buf.write("\u0674\5\u0128\u0095\2\u0674\u0675\7\u00b8\2\2\u0675\u0676") - buf.write("\7\u00fa\2\2\u0676\u06d1\3\2\2\2\u0677\u0678\7.\2\2\u0678") - buf.write("\u0679\7\u0102\2\2\u0679\u067a\5\u0128\u0095\2\u067a\u067b") - buf.write("\7\u00f7\2\2\u067b\u067c\7=\2\2\u067c\u06d1\3\2\2\2\u067d") - buf.write("\u067e\7.\2\2\u067e\u067f\7\u0102\2\2\u067f\u0680\5\u0128") - buf.write("\u0095\2\u0680\u0681\7\u00b8\2\2\u0681\u0682\7\u00f7\2") - buf.write("\2\u0682\u06d1\3\2\2\2\u0683\u0684\7.\2\2\u0684\u0685") - buf.write("\7\u0102\2\2\u0685\u0686\5\u0128\u0095\2\u0686\u0687\7") - buf.write("\u00b8\2\2\u0687\u0688\7\u00fd\2\2\u0688\u0689\7\65\2") - buf.write("\2\u0689\u068a\7g\2\2\u068a\u06d1\3\2\2\2\u068b\u068c") - buf.write("\7.\2\2\u068c\u068d\7\u0102\2\2\u068d\u068e\5\u0128\u0095") - buf.write("\2\u068e\u068f\7\u00f3\2\2\u068f\u0690\7\u00f7\2\2\u0690") - buf.write("\u0691\7\u00a9\2\2\u0691\u06d1\3\2\2\2\u0692\u0693\7.") - buf.write("\2\2\u0693\u0694\7\u0102\2\2\u0694\u0695\5\u0128\u0095") - buf.write("\2\u0695\u0696\7q\2\2\u0696\u0697\7\u00c9\2\2\u0697\u06d1") - buf.write("\3\2\2\2\u0698\u0699\7.\2\2\u0699\u069a\7\u0102\2\2\u069a") - buf.write("\u069b\5\u0128\u0095\2\u069b\u069c\7\63\2\2\u069c\u069d") - buf.write("\7\u00c9\2\2\u069d\u06d1\3\2\2\2\u069e\u069f\7.\2\2\u069f") - buf.write("\u06a0\7\u0102\2\2\u06a0\u06a1\5\u0128\u0095\2\u06a1\u06a2") - buf.write("\7\u0113\2\2\u06a2\u06a3\7\u00c9\2\2\u06a3\u06d1\3\2\2") - buf.write("\2\u06a4\u06a5\7.\2\2\u06a5\u06a6\7\u0102\2\2\u06a6\u06a7") - buf.write("\5\u0128\u0095\2\u06a7\u06a8\7\u010a\2\2\u06a8\u06d1\3") - buf.write("\2\2\2\u06a9\u06aa\7.\2\2\u06aa\u06ab\7\u0102\2\2\u06ab") - buf.write("\u06ad\5\u0128\u0095\2\u06ac\u06ae\5\u009eP\2\u06ad\u06ac") - buf.write("\3\2\2\2\u06ad\u06ae\3\2\2\2\u06ae\u06af\3\2\2\2\u06af") - buf.write("\u06b0\7N\2\2\u06b0\u06d1\3\2\2\2\u06b1\u06b2\7.\2\2\u06b2") - buf.write("\u06b3\7\u0102\2\2\u06b3\u06b5\5\u0128\u0095\2\u06b4\u06b6") - buf.write("\5\u009eP\2\u06b5\u06b4\3\2\2\2\u06b5\u06b6\3\2\2\2\u06b6") - buf.write("\u06b7\3\2\2\2\u06b7\u06b8\7Q\2\2\u06b8\u06d1\3\2\2\2") - buf.write("\u06b9\u06ba\7.\2\2\u06ba\u06bb\7\u0102\2\2\u06bb\u06bd") - buf.write("\5\u0128\u0095\2\u06bc\u06be\5\u009eP\2\u06bd\u06bc\3") - buf.write("\2\2\2\u06bd\u06be\3\2\2\2\u06be\u06bf\3\2\2\2\u06bf\u06c0") - buf.write("\7\u00f3\2\2\u06c0\u06c1\7|\2\2\u06c1\u06d1\3\2\2\2\u06c2") - buf.write("\u06c3\7.\2\2\u06c3\u06c4\7\u0102\2\2\u06c4\u06c6\5\u0128") - buf.write("\u0095\2\u06c5\u06c7\5\u009eP\2\u06c6\u06c5\3\2\2\2\u06c6") - buf.write("\u06c7\3\2\2\2\u06c7\u06c8\3\2\2\2\u06c8\u06c9\7\u00df") - buf.write("\2\2\u06c9\u06ca\7K\2\2\u06ca\u06d1\3\2\2\2\u06cb\u06cc") - buf.write("\7\u00fb\2\2\u06cc\u06d1\7\u010c\2\2\u06cd\u06d1\7M\2") - buf.write("\2\u06ce\u06d1\7\u00e7\2\2\u06cf\u06d1\7f\2\2\u06d0\u0628") - buf.write("\3\2\2\2\u06d0\u062a\3\2\2\2\u06d0\u062c\3\2\2\2\u06d0") - buf.write("\u0630\3\2\2\2\u06d0\u0634\3\2\2\2\u06d0\u0636\3\2\2\2") - buf.write("\u06d0\u063b\3\2\2\2\u06d0\u063d\3\2\2\2\u06d0\u063f\3") - buf.write("\2\2\2\u06d0\u0642\3\2\2\2\u06d0\u0644\3\2\2\2\u06d0\u0646") - buf.write("\3\2\2\2\u06d0\u0648\3\2\2\2\u06d0\u064b\3\2\2\2\u06d0") - buf.write("\u064d\3\2\2\2\u06d0\u064f\3\2\2\2\u06d0\u0651\3\2\2\2") - buf.write("\u06d0\u0653\3\2\2\2\u06d0\u0655\3\2\2\2\u06d0\u0657\3") - buf.write("\2\2\2\u06d0\u0659\3\2\2\2\u06d0\u065b\3\2\2\2\u06d0\u065d") - buf.write("\3\2\2\2\u06d0\u065f\3\2\2\2\u06d0\u0662\3\2\2\2\u06d0") - buf.write("\u0665\3\2\2\2\u06d0\u066b\3\2\2\2\u06d0\u0671\3\2\2\2") - buf.write("\u06d0\u0677\3\2\2\2\u06d0\u067d\3\2\2\2\u06d0\u0683\3") - buf.write("\2\2\2\u06d0\u068b\3\2\2\2\u06d0\u0692\3\2\2\2\u06d0\u0698") - buf.write("\3\2\2\2\u06d0\u069e\3\2\2\2\u06d0\u06a4\3\2\2\2\u06d0") - buf.write("\u06a9\3\2\2\2\u06d0\u06b1\3\2\2\2\u06d0\u06b9\3\2\2\2") - buf.write("\u06d0\u06c2\3\2\2\2\u06d0\u06cb\3\2\2\2\u06d0\u06cd\3") - buf.write("\2\2\2\u06d0\u06ce\3\2\2\2\u06d0\u06cf\3\2\2\2\u06d1\u008b") - buf.write("\3\2\2\2\u06d2\u06d4\7T\2\2\u06d3\u06d5\7\u0106\2\2\u06d4") - buf.write("\u06d3\3\2\2\2\u06d4\u06d5\3\2\2\2\u06d5\u06d7\3\2\2\2") - buf.write("\u06d6\u06d8\7v\2\2\u06d7\u06d6\3\2\2\2\u06d7\u06d8\3") - buf.write("\2\2\2\u06d8\u06d9\3\2\2\2\u06d9\u06dd\7\u0102\2\2\u06da") - buf.write("\u06db\7\u008d\2\2\u06db\u06dc\7\u00b8\2\2\u06dc\u06de") - buf.write("\7r\2\2\u06dd\u06da\3\2\2\2\u06dd\u06de\3\2\2\2\u06de") - buf.write("\u06df\3\2\2\2\u06df\u06e0\5\u0126\u0094\2\u06e0\u008d") - buf.write("\3\2\2\2\u06e1\u06e2\7T\2\2\u06e2\u06e4\7\u00c0\2\2\u06e3") - buf.write("\u06e1\3\2\2\2\u06e3\u06e4\3\2\2\2\u06e4\u06e5\3\2\2\2") - buf.write("\u06e5\u06e6\7\u00df\2\2\u06e6\u06e7\7\u0102\2\2\u06e7") - buf.write("\u06e8\5\u0126\u0094\2\u06e8\u008f\3\2\2\2\u06e9\u06ea") - buf.write("\7F\2\2\u06ea\u06eb\7=\2\2\u06eb\u06ef\5\u010e\u0088\2") - buf.write("\u06ec\u06ed\7\u00fa\2\2\u06ed\u06ee\7=\2\2\u06ee\u06f0") - buf.write("\5\u0112\u008a\2\u06ef\u06ec\3\2\2\2\u06ef\u06f0\3\2\2") - buf.write("\2\u06f0\u06f1\3\2\2\2\u06f1\u06f2\7\u0099\2\2\u06f2\u06f3") - buf.write("\7\u013f\2\2\u06f3\u06f4\7<\2\2\u06f4\u0091\3\2\2\2\u06f5") - buf.write("\u06f6\7\u00f7\2\2\u06f6\u06f7\7=\2\2\u06f7\u06f8\5\u010e") - buf.write("\u0088\2\u06f8\u06fb\7\u00bc\2\2\u06f9\u06fc\5\u00b8]") - buf.write("\2\u06fa\u06fc\5\u00ba^\2\u06fb\u06f9\3\2\2\2\u06fb\u06fa") - buf.write("\3\2\2\2\u06fc\u0700\3\2\2\2\u06fd\u06fe\7\u00fd\2\2\u06fe") - buf.write("\u06ff\7\65\2\2\u06ff\u0701\7g\2\2\u0700\u06fd\3\2\2\2") - buf.write("\u0700\u0701\3\2\2\2\u0701\u0093\3\2\2\2\u0702\u0703\7") - buf.write("\u00a9\2\2\u0703\u0704\7\u013b\2\2\u0704\u0095\3\2\2\2") - buf.write("\u0705\u0706\7L\2\2\u0706\u0707\7\u013b\2\2\u0707\u0097") - buf.write("\3\2\2\2\u0708\u070a\5\u00a8U\2\u0709\u0708\3\2\2\2\u0709") - buf.write("\u070a\3\2\2\2\u070a\u070b\3\2\2\2\u070b\u070c\5\u00ca") - buf.write("f\2\u070c\u070d\5\u00c6d\2\u070d\u0099\3\2\2\2\u070e\u070f") - buf.write("\7\u0096\2\2\u070f\u0711\7\u00c8\2\2\u0710\u0712\7\u0102") - buf.write("\2\2\u0711\u0710\3\2\2\2\u0711\u0712\3\2\2\2\u0712\u0713") - buf.write("\3\2\2\2\u0713\u071a\5\u0126\u0094\2\u0714\u0718\5\u009e") - buf.write("P\2\u0715\u0716\7\u008d\2\2\u0716\u0717\7\u00b8\2\2\u0717") - buf.write("\u0719\7r\2\2\u0718\u0715\3\2\2\2\u0718\u0719\3\2\2\2") - buf.write("\u0719\u071b\3\2\2\2\u071a\u0714\3\2\2\2\u071a\u071b\3") - buf.write("\2\2\2\u071b\u0746\3\2\2\2\u071c\u071d\7\u0096\2\2\u071d") - buf.write("\u071f\7\u0099\2\2\u071e\u0720\7\u0102\2\2\u071f\u071e") - buf.write("\3\2\2\2\u071f\u0720\3\2\2\2\u0720\u0721\3\2\2\2\u0721") - buf.write("\u0723\5\u0126\u0094\2\u0722\u0724\5\u009eP\2\u0723\u0722") - buf.write("\3\2\2\2\u0723\u0724\3\2\2\2\u0724\u0728\3\2\2\2\u0725") - buf.write("\u0726\7\u008d\2\2\u0726\u0727\7\u00b8\2\2\u0727\u0729") - buf.write("\7r\2\2\u0728\u0725\3\2\2\2\u0728\u0729\3\2\2\2\u0729") - buf.write("\u0746\3\2\2\2\u072a\u072b\7\u0096\2\2\u072b\u072d\7\u00c8") - buf.write("\2\2\u072c\u072e\7\u00a8\2\2\u072d\u072c\3\2\2\2\u072d") - buf.write("\u072e\3\2\2\2\u072e\u072f\3\2\2\2\u072f\u0730\7h\2\2") - buf.write("\u0730\u0732\7\u013b\2\2\u0731\u0733\5\u0122\u0092\2\u0732") - buf.write("\u0731\3\2\2\2\u0732\u0733\3\2\2\2\u0733\u0735\3\2\2\2") - buf.write("\u0734\u0736\5\u00bc_\2\u0735\u0734\3\2\2\2\u0735\u0736") - buf.write("\3\2\2\2\u0736\u0746\3\2\2\2\u0737\u0738\7\u0096\2\2\u0738") - buf.write("\u073a\7\u00c8\2\2\u0739\u073b\7\u00a8\2\2\u073a\u0739") - buf.write("\3\2\2\2\u073a\u073b\3\2\2\2\u073b\u073c\3\2\2\2\u073c") - buf.write("\u073e\7h\2\2\u073d\u073f\7\u013b\2\2\u073e\u073d\3\2") - buf.write("\2\2\u073e\u073f\3\2\2\2\u073f\u0740\3\2\2\2\u0740\u0743") - buf.write("\5\u00acW\2\u0741\u0742\7\u00bf\2\2\u0742\u0744\5\u00b0") - buf.write("Y\2\u0743\u0741\3\2\2\2\u0743\u0744\3\2\2\2\u0744\u0746") - buf.write("\3\2\2\2\u0745\u070e\3\2\2\2\u0745\u071c\3\2\2\2\u0745") - buf.write("\u072a\3\2\2\2\u0745\u0737\3\2\2\2\u0746\u009b\3\2\2\2") - buf.write("\u0747\u0749\5\u009eP\2\u0748\u074a\5\u0094K\2\u0749\u0748") - buf.write("\3\2\2\2\u0749\u074a\3\2\2\2\u074a\u009d\3\2\2\2\u074b") - buf.write("\u074c\7\u00c9\2\2\u074c\u074d\7\5\2\2\u074d\u0752\5\u00a0") - buf.write("Q\2\u074e\u074f\7\3\2\2\u074f\u0751\5\u00a0Q\2\u0750\u074e") - buf.write("\3\2\2\2\u0751\u0754\3\2\2\2\u0752\u0750\3\2\2\2\u0752") - buf.write("\u0753\3\2\2\2\u0753\u0755\3\2\2\2\u0754\u0752\3\2\2\2") - buf.write("\u0755\u0756\7\6\2\2\u0756\u009f\3\2\2\2\u0757\u075a\5") - buf.write("\u0180\u00c1\2\u0758\u0759\7\u0127\2\2\u0759\u075b\5\u0140") - buf.write("\u00a1\2\u075a\u0758\3\2\2\2\u075a\u075b\3\2\2\2\u075b") - buf.write("\u00a1\3\2\2\2\u075c\u075d\t\26\2\2\u075d\u00a3\3\2\2") - buf.write("\2\u075e\u0764\5\u017a\u00be\2\u075f\u0764\7\u013b\2\2") - buf.write("\u0760\u0764\5\u0142\u00a2\2\u0761\u0764\5\u0146\u00a4") - buf.write("\2\u0762\u0764\5\u0148\u00a5\2\u0763\u075e\3\2\2\2\u0763") - buf.write("\u075f\3\2\2\2\u0763\u0760\3\2\2\2\u0763\u0761\3\2\2\2") - buf.write("\u0763\u0762\3\2\2\2\u0764\u00a5\3\2\2\2\u0765\u076a\5") - buf.write("\u0180\u00c1\2\u0766\u0767\7\7\2\2\u0767\u0769\5\u0180") - buf.write("\u00c1\2\u0768\u0766\3\2\2\2\u0769\u076c\3\2\2\2\u076a") - buf.write("\u0768\3\2\2\2\u076a\u076b\3\2\2\2\u076b\u00a7\3\2\2\2") - buf.write("\u076c\u076a\3\2\2\2\u076d\u076e\7\u0125\2\2\u076e\u0773") - buf.write("\5\u00aaV\2\u076f\u0770\7\3\2\2\u0770\u0772\5\u00aaV\2") - buf.write("\u0771\u076f\3\2\2\2\u0772\u0775\3\2\2\2\u0773\u0771\3") - buf.write("\2\2\2\u0773\u0774\3\2\2\2\u0774\u00a9\3\2\2\2\u0775\u0773") - buf.write("\3\2\2\2\u0776\u0778\5\u017c\u00bf\2\u0777\u0779\5\u010e") - buf.write("\u0088\2\u0778\u0777\3\2\2\2\u0778\u0779\3\2\2\2\u0779") - buf.write("\u077b\3\2\2\2\u077a\u077c\7\65\2\2\u077b\u077a\3\2\2") - buf.write("\2\u077b\u077c\3\2\2\2\u077c\u077d\3\2\2\2\u077d\u077e") - buf.write("\7\5\2\2\u077e\u077f\5\u0098M\2\u077f\u0780\7\6\2\2\u0780") - buf.write("\u00ab\3\2\2\2\u0781\u0782\7\u011e\2\2\u0782\u0783\5\u0126") - buf.write("\u0094\2\u0783\u00ad\3\2\2\2\u0784\u0785\7\u00bf\2\2\u0785") - buf.write("\u078f\5\u00b0Y\2\u0786\u0787\7\u00ca\2\2\u0787\u0788") - buf.write("\7=\2\2\u0788\u078f\5\u0130\u0099\2\u0789\u078f\5\u0090") - buf.write("I\2\u078a\u078f\5\u0094K\2\u078b\u078f\5\u0096L\2\u078c") - buf.write("\u078d\7\u0105\2\2\u078d\u078f\5\u00b0Y\2\u078e\u0784") - buf.write("\3\2\2\2\u078e\u0786\3\2\2\2\u078e\u0789\3\2\2\2\u078e") - buf.write("\u078a\3\2\2\2\u078e\u078b\3\2\2\2\u078e\u078c\3\2\2\2") - buf.write("\u078f\u0792\3\2\2\2\u0790\u078e\3\2\2\2\u0790\u0791\3") - buf.write("\2\2\2\u0791\u00af\3\2\2\2\u0792\u0790\3\2\2\2\u0793\u0794") - buf.write("\7\5\2\2\u0794\u0799\5\u00b2Z\2\u0795\u0796\7\3\2\2\u0796") - buf.write("\u0798\5\u00b2Z\2\u0797\u0795\3\2\2\2\u0798\u079b\3\2") - buf.write("\2\2\u0799\u0797\3\2\2\2\u0799\u079a\3\2\2\2\u079a\u079c") - buf.write("\3\2\2\2\u079b\u0799\3\2\2\2\u079c\u079d\7\6\2\2\u079d") - buf.write("\u00b1\3\2\2\2\u079e\u07a3\5\u00b4[\2\u079f\u07a1\7\u0127") - buf.write("\2\2\u07a0\u079f\3\2\2\2\u07a0\u07a1\3\2\2\2\u07a1\u07a2") - buf.write("\3\2\2\2\u07a2\u07a4\5\u00b6\\\2\u07a3\u07a0\3\2\2\2\u07a3") - buf.write("\u07a4\3\2\2\2\u07a4\u00b3\3\2\2\2\u07a5\u07aa\5\u0180") - buf.write("\u00c1\2\u07a6\u07a7\7\7\2\2\u07a7\u07a9\5\u0180\u00c1") - buf.write("\2\u07a8\u07a6\3\2\2\2\u07a9\u07ac\3\2\2\2\u07aa\u07a8") - buf.write("\3\2\2\2\u07aa\u07ab\3\2\2\2\u07ab\u07af\3\2\2\2\u07ac") - buf.write("\u07aa\3\2\2\2\u07ad\u07af\7\u013b\2\2\u07ae\u07a5\3\2") - buf.write("\2\2\u07ae\u07ad\3\2\2\2\u07af\u00b5\3\2\2\2\u07b0\u07b5") - buf.write("\7\u013f\2\2\u07b1\u07b5\7\u0141\2\2\u07b2\u07b5\5\u014a") - buf.write("\u00a6\2\u07b3\u07b5\7\u013b\2\2\u07b4\u07b0\3\2\2\2\u07b4") - buf.write("\u07b1\3\2\2\2\u07b4\u07b2\3\2\2\2\u07b4\u07b3\3\2\2\2") - buf.write("\u07b5\u00b7\3\2\2\2\u07b6\u07b7\7\5\2\2\u07b7\u07bc\5") - buf.write("\u0140\u00a1\2\u07b8\u07b9\7\3\2\2\u07b9\u07bb\5\u0140") - buf.write("\u00a1\2\u07ba\u07b8\3\2\2\2\u07bb\u07be\3\2\2\2\u07bc") - buf.write("\u07ba\3\2\2\2\u07bc\u07bd\3\2\2\2\u07bd\u07bf\3\2\2\2") - buf.write("\u07be\u07bc\3\2\2\2\u07bf\u07c0\7\6\2\2\u07c0\u00b9\3") - buf.write("\2\2\2\u07c1\u07c2\7\5\2\2\u07c2\u07c7\5\u00b8]\2\u07c3") - buf.write("\u07c4\7\3\2\2\u07c4\u07c6\5\u00b8]\2\u07c5\u07c3\3\2") - buf.write("\2\2\u07c6\u07c9\3\2\2\2\u07c7\u07c5\3\2\2\2\u07c7\u07c8") - buf.write("\3\2\2\2\u07c8\u07ca\3\2\2\2\u07c9\u07c7\3\2\2\2\u07ca") - buf.write("\u07cb\7\6\2\2\u07cb\u00bb\3\2\2\2\u07cc\u07cd\7\u00fd") - buf.write("\2\2\u07cd\u07ce\7\65\2\2\u07ce\u07d3\5\u00be`\2\u07cf") - buf.write("\u07d0\7\u00fd\2\2\u07d0\u07d1\7=\2\2\u07d1\u07d3\5\u00c0") - buf.write("a\2\u07d2\u07cc\3\2\2\2\u07d2\u07cf\3\2\2\2\u07d3\u00bd") - buf.write("\3\2\2\2\u07d4\u07d5\7\u0095\2\2\u07d5\u07d6\7\u013b\2") - buf.write("\2\u07d6\u07d7\7\u00c4\2\2\u07d7\u07da\7\u013b\2\2\u07d8") - buf.write("\u07da\5\u0180\u00c1\2\u07d9\u07d4\3\2\2\2\u07d9\u07d8") - buf.write("\3\2\2\2\u07da\u00bf\3\2\2\2\u07db\u07df\7\u013b\2\2\u07dc") - buf.write("\u07dd\7\u0125\2\2\u07dd\u07de\7\u00f1\2\2\u07de\u07e0") - buf.write("\5\u00b0Y\2\u07df\u07dc\3\2\2\2\u07df\u07e0\3\2\2\2\u07e0") - buf.write("\u00c1\3\2\2\2\u07e1\u07e2\5\u0180\u00c1\2\u07e2\u07e3") - buf.write("\7\u013b\2\2\u07e3\u00c3\3\2\2\2\u07e4\u07e5\5\u009aN") - buf.write("\2\u07e5\u07e6\5\u00caf\2\u07e6\u07e7\5\u00c6d\2\u07e7") - buf.write("\u0818\3\2\2\2\u07e8\u07ea\5\u00f2z\2\u07e9\u07eb\5\u00c8") - buf.write("e\2\u07ea\u07e9\3\2\2\2\u07eb\u07ec\3\2\2\2\u07ec\u07ea") - buf.write("\3\2\2\2\u07ec\u07ed\3\2\2\2\u07ed\u0818\3\2\2\2\u07ee") - buf.write("\u07ef\7b\2\2\u07ef\u07f0\7\u0083\2\2\u07f0\u07f1\5\u0126") - buf.write("\u0094\2\u07f1\u07f3\5\u0120\u0091\2\u07f2\u07f4\5\u00ea") - buf.write("v\2\u07f3\u07f2\3\2\2\2\u07f3\u07f4\3\2\2\2\u07f4\u0818") - buf.write("\3\2\2\2\u07f5\u07f6\7\u011b\2\2\u07f6\u07f7\5\u0126\u0094") - buf.write("\2\u07f7\u07f8\5\u0120\u0091\2\u07f8\u07fa\5\u00dco\2") - buf.write("\u07f9\u07fb\5\u00eav\2\u07fa\u07f9\3\2\2\2\u07fa\u07fb") - buf.write("\3\2\2\2\u07fb\u0818\3\2\2\2\u07fc\u07fd\7\u00b0\2\2\u07fd") - buf.write("\u07fe\7\u0099\2\2\u07fe\u07ff\5\u0126\u0094\2\u07ff\u0800") - buf.write("\5\u0120\u0091\2\u0800\u0806\7\u011e\2\2\u0801\u0807\5") - buf.write("\u0126\u0094\2\u0802\u0803\7\5\2\2\u0803\u0804\5\u0098") - buf.write("M\2\u0804\u0805\7\6\2\2\u0805\u0807\3\2\2\2\u0806\u0801") - buf.write("\3\2\2\2\u0806\u0802\3\2\2\2\u0807\u0808\3\2\2\2\u0808") - buf.write("\u0809\5\u0120\u0091\2\u0809\u080a\7\u00bc\2\2\u080a\u080e") - buf.write("\5\u0138\u009d\2\u080b\u080d\5\u00dep\2\u080c\u080b\3") - buf.write("\2\2\2\u080d\u0810\3\2\2\2\u080e\u080c\3\2\2\2\u080e\u080f") - buf.write("\3\2\2\2\u080f\u0814\3\2\2\2\u0810\u080e\3\2\2\2\u0811") - buf.write("\u0813\5\u00e0q\2\u0812\u0811\3\2\2\2\u0813\u0816\3\2") - buf.write("\2\2\u0814\u0812\3\2\2\2\u0814\u0815\3\2\2\2\u0815\u0818") - buf.write("\3\2\2\2\u0816\u0814\3\2\2\2\u0817\u07e4\3\2\2\2\u0817") - buf.write("\u07e8\3\2\2\2\u0817\u07ee\3\2\2\2\u0817\u07f5\3\2\2\2") - buf.write("\u0817\u07fc\3\2\2\2\u0818\u00c5\3\2\2\2\u0819\u081a\7") - buf.write("\u00c1\2\2\u081a\u081b\7=\2\2\u081b\u0820\5\u00ceh\2\u081c") - buf.write("\u081d\7\3\2\2\u081d\u081f\5\u00ceh\2\u081e\u081c\3\2") - buf.write("\2\2\u081f\u0822\3\2\2\2\u0820\u081e\3\2\2\2\u0820\u0821") - buf.write("\3\2\2\2\u0821\u0824\3\2\2\2\u0822\u0820\3\2\2\2\u0823") - buf.write("\u0819\3\2\2\2\u0823\u0824\3\2\2\2\u0824\u082f\3\2\2\2") - buf.write("\u0825\u0826\7E\2\2\u0826\u0827\7=\2\2\u0827\u082c\5\u0136") - buf.write("\u009c\2\u0828\u0829\7\3\2\2\u0829\u082b\5\u0136\u009c") - buf.write("\2\u082a\u0828\3\2\2\2\u082b\u082e\3\2\2\2\u082c\u082a") - buf.write("\3\2\2\2\u082c\u082d\3\2\2\2\u082d\u0830\3\2\2\2\u082e") - buf.write("\u082c\3\2\2\2\u082f\u0825\3\2\2\2\u082f\u0830\3\2\2\2") - buf.write("\u0830\u083b\3\2\2\2\u0831\u0832\7j\2\2\u0832\u0833\7") - buf.write("=\2\2\u0833\u0838\5\u0136\u009c\2\u0834\u0835\7\3\2\2") - buf.write("\u0835\u0837\5\u0136\u009c\2\u0836\u0834\3\2\2\2\u0837") - buf.write("\u083a\3\2\2\2\u0838\u0836\3\2\2\2\u0838\u0839\3\2\2\2") - buf.write("\u0839\u083c\3\2\2\2\u083a\u0838\3\2\2\2\u083b\u0831\3") - buf.write("\2\2\2\u083b\u083c\3\2\2\2\u083c\u0847\3\2\2\2\u083d\u083e") - buf.write("\7\u00f9\2\2\u083e\u083f\7=\2\2\u083f\u0844\5\u00ceh\2") - buf.write("\u0840\u0841\7\3\2\2\u0841\u0843\5\u00ceh\2\u0842\u0840") - buf.write("\3\2\2\2\u0843\u0846\3\2\2\2\u0844\u0842\3\2\2\2\u0844") - buf.write("\u0845\3\2\2\2\u0845\u0848\3\2\2\2\u0846\u0844\3\2\2\2") - buf.write("\u0847\u083d\3\2\2\2\u0847\u0848\3\2\2\2\u0848\u084a\3") - buf.write("\2\2\2\u0849\u084b\5\u016c\u00b7\2\u084a\u0849\3\2\2\2") - buf.write("\u084a\u084b\3\2\2\2\u084b\u0851\3\2\2\2\u084c\u084f\7") - buf.write("\u00a4\2\2\u084d\u0850\7-\2\2\u084e\u0850\5\u0136\u009c") - buf.write("\2\u084f\u084d\3\2\2\2\u084f\u084e\3\2\2\2\u0850\u0852") - buf.write("\3\2\2\2\u0851\u084c\3\2\2\2\u0851\u0852\3\2\2\2\u0852") - buf.write("\u00c7\3\2\2\2\u0853\u0854\5\u009aN\2\u0854\u0855\5\u00d2") - buf.write("j\2\u0855\u00c9\3\2\2\2\u0856\u0857\bf\1\2\u0857\u0858") - buf.write("\5\u00ccg\2\u0858\u0870\3\2\2\2\u0859\u085a\f\5\2\2\u085a") - buf.write("\u085b\6f\5\2\u085b\u085d\t\27\2\2\u085c\u085e\5\u0100") - buf.write("\u0081\2\u085d\u085c\3\2\2\2\u085d\u085e\3\2\2\2\u085e") - buf.write("\u085f\3\2\2\2\u085f\u086f\5\u00caf\6\u0860\u0861\f\4") - buf.write("\2\2\u0861\u0862\6f\7\2\u0862\u0864\7\u0097\2\2\u0863") - buf.write("\u0865\5\u0100\u0081\2\u0864\u0863\3\2\2\2\u0864\u0865") - buf.write("\3\2\2\2\u0865\u0866\3\2\2\2\u0866\u086f\5\u00caf\5\u0867") - buf.write("\u0868\f\3\2\2\u0868\u0869\6f\t\2\u0869\u086b\t\30\2\2") - buf.write("\u086a\u086c\5\u0100\u0081\2\u086b\u086a\3\2\2\2\u086b") - buf.write("\u086c\3\2\2\2\u086c\u086d\3\2\2\2\u086d\u086f\5\u00ca") - buf.write("f\4\u086e\u0859\3\2\2\2\u086e\u0860\3\2\2\2\u086e\u0867") - buf.write("\3\2\2\2\u086f\u0872\3\2\2\2\u0870\u086e\3\2\2\2\u0870") - buf.write("\u0871\3\2\2\2\u0871\u00cb\3\2\2\2\u0872\u0870\3\2\2\2") - buf.write("\u0873\u0879\5\u00d4k\2\u0874\u0879\5\u00d0i\2\u0875\u0876") - buf.write("\7\u0102\2\2\u0876\u0879\5\u0126\u0094\2\u0877\u0879\5") - buf.write("\u011c\u008f\2\u0878\u0873\3\2\2\2\u0878\u0874\3\2\2\2") - buf.write("\u0878\u0875\3\2\2\2\u0878\u0877\3\2\2\2\u0879\u00cd\3") - buf.write("\2\2\2\u087a\u087c\5\u0136\u009c\2\u087b\u087d\t\7\2\2") - buf.write("\u087c\u087b\3\2\2\2\u087c\u087d\3\2\2\2\u087d\u0880\3") - buf.write("\2\2\2\u087e\u087f\7\u00ba\2\2\u087f\u0881\t\31\2\2\u0880") - buf.write("\u087e\3\2\2\2\u0880\u0881\3\2\2\2\u0881\u00cf\3\2\2\2") - buf.write("\u0882\u0884\5\u00f2z\2\u0883\u0885\5\u00d2j\2\u0884\u0883") - buf.write("\3\2\2\2\u0885\u0886\3\2\2\2\u0886\u0884\3\2\2\2\u0886") - buf.write("\u0887\3\2\2\2\u0887\u00d1\3\2\2\2\u0888\u088a\5\u00d8") - buf.write("m\2\u0889\u088b\5\u00eav\2\u088a\u0889\3\2\2\2\u088a\u088b") - buf.write("\3\2\2\2\u088b\u088c\3\2\2\2\u088c\u088d\5\u00c6d\2\u088d") - buf.write("\u08a4\3\2\2\2\u088e\u0892\5\u00dan\2\u088f\u0891\5\u00fe") - buf.write("\u0080\2\u0890\u088f\3\2\2\2\u0891\u0894\3\2\2\2\u0892") - buf.write("\u0890\3\2\2\2\u0892\u0893\3\2\2\2\u0893\u0896\3\2\2\2") - buf.write("\u0894\u0892\3\2\2\2\u0895\u0897\5\u00eav\2\u0896\u0895") - buf.write("\3\2\2\2\u0896\u0897\3\2\2\2\u0897\u0899\3\2\2\2\u0898") - buf.write("\u089a\5\u00f4{\2\u0899\u0898\3\2\2\2\u0899\u089a\3\2") - buf.write("\2\2\u089a\u089c\3\2\2\2\u089b\u089d\5\u00ecw\2\u089c") - buf.write("\u089b\3\2\2\2\u089c\u089d\3\2\2\2\u089d\u089f\3\2\2\2") - buf.write("\u089e\u08a0\5\u016c\u00b7\2\u089f\u089e\3\2\2\2\u089f") - buf.write("\u08a0\3\2\2\2\u08a0\u08a1\3\2\2\2\u08a1\u08a2\5\u00c6") - buf.write("d\2\u08a2\u08a4\3\2\2\2\u08a3\u0888\3\2\2\2\u08a3\u088e") - buf.write("\3\2\2\2\u08a4\u00d3\3\2\2\2\u08a5\u08a6\5\u00d8m\2\u08a6") - buf.write("\u08a8\5\u00d6l\2\u08a7\u08a9\5\u00eav\2\u08a8\u08a7\3") - buf.write("\2\2\2\u08a8\u08a9\3\2\2\2\u08a9\u08bf\3\2\2\2\u08aa\u08ab") - buf.write("\5\u00dan\2\u08ab\u08af\5\u00d6l\2\u08ac\u08ae\5\u00fe") - buf.write("\u0080\2\u08ad\u08ac\3\2\2\2\u08ae\u08b1\3\2\2\2\u08af") - buf.write("\u08ad\3\2\2\2\u08af\u08b0\3\2\2\2\u08b0\u08b3\3\2\2\2") - buf.write("\u08b1\u08af\3\2\2\2\u08b2\u08b4\5\u00eav\2\u08b3\u08b2") - buf.write("\3\2\2\2\u08b3\u08b4\3\2\2\2\u08b4\u08b6\3\2\2\2\u08b5") - buf.write("\u08b7\5\u00f4{\2\u08b6\u08b5\3\2\2\2\u08b6\u08b7\3\2") - buf.write("\2\2\u08b7\u08b9\3\2\2\2\u08b8\u08ba\5\u00ecw\2\u08b9") - buf.write("\u08b8\3\2\2\2\u08b9\u08ba\3\2\2\2\u08ba\u08bc\3\2\2\2") - buf.write("\u08bb\u08bd\5\u016c\u00b7\2\u08bc\u08bb\3\2\2\2\u08bc") - buf.write("\u08bd\3\2\2\2\u08bd\u08bf\3\2\2\2\u08be\u08a5\3\2\2\2") - buf.write("\u08be\u08aa\3\2\2\2\u08bf\u00d5\3\2\2\2\u08c0\u08c2\5") - buf.write("\u00f2z\2\u08c1\u08c0\3\2\2\2\u08c1\u08c2\3\2\2\2\u08c2") - buf.write("\u00d7\3\2\2\2\u08c3\u08c4\7\u00ed\2\2\u08c4\u08c5\7\u010e") - buf.write("\2\2\u08c5\u08c6\7\5\2\2\u08c6\u08c7\5\u012e\u0098\2\u08c7") - buf.write("\u08c8\7\6\2\2\u08c8\u08ce\3\2\2\2\u08c9\u08ca\7\u00ae") - buf.write("\2\2\u08ca\u08ce\5\u012e\u0098\2\u08cb\u08cc\7\u00da\2") - buf.write("\2\u08cc\u08ce\5\u012e\u0098\2\u08cd\u08c3\3\2\2\2\u08cd") - buf.write("\u08c9\3\2\2\2\u08cd\u08cb\3\2\2\2\u08ce\u08d0\3\2\2\2") - buf.write("\u08cf\u08d1\5\u0122\u0092\2\u08d0\u08cf\3\2\2\2\u08d0") - buf.write("\u08d1\3\2\2\2\u08d1\u08d4\3\2\2\2\u08d2\u08d3\7\u00d8") - buf.write("\2\2\u08d3\u08d5\7\u013b\2\2\u08d4\u08d2\3\2\2\2\u08d4") - buf.write("\u08d5\3\2\2\2\u08d5\u08d6\3\2\2\2\u08d6\u08d7\7\u011e") - buf.write("\2\2\u08d7\u08e4\7\u013b\2\2\u08d8\u08e2\7\65\2\2\u08d9") - buf.write("\u08e3\5\u0110\u0089\2\u08da\u08e3\5\u0162\u00b2\2\u08db") - buf.write("\u08de\7\5\2\2\u08dc\u08df\5\u0110\u0089\2\u08dd\u08df") - buf.write("\5\u0162\u00b2\2\u08de\u08dc\3\2\2\2\u08de\u08dd\3\2\2") - buf.write("\2\u08df\u08e0\3\2\2\2\u08e0\u08e1\7\6\2\2\u08e1\u08e3") - buf.write("\3\2\2\2\u08e2\u08d9\3\2\2\2\u08e2\u08da\3\2\2\2\u08e2") - buf.write("\u08db\3\2\2\2\u08e3\u08e5\3\2\2\2\u08e4\u08d8\3\2\2\2") - buf.write("\u08e4\u08e5\3\2\2\2\u08e5\u08e7\3\2\2\2\u08e6\u08e8\5") - buf.write("\u0122\u0092\2\u08e7\u08e6\3\2\2\2\u08e7\u08e8\3\2\2\2") - buf.write("\u08e8\u08eb\3\2\2\2\u08e9\u08ea\7\u00d7\2\2\u08ea\u08ec") - buf.write("\7\u013b\2\2\u08eb\u08e9\3\2\2\2\u08eb\u08ec\3\2\2\2\u08ec") - buf.write("\u00d9\3\2\2\2\u08ed\u08f1\7\u00ed\2\2\u08ee\u08f0\5\u00ee") - buf.write("x\2\u08ef\u08ee\3\2\2\2\u08f0\u08f3\3\2\2\2\u08f1\u08ef") - buf.write("\3\2\2\2\u08f1\u08f2\3\2\2\2\u08f2\u08f5\3\2\2\2\u08f3") - buf.write("\u08f1\3\2\2\2\u08f4\u08f6\5\u0100\u0081\2\u08f5\u08f4") - buf.write("\3\2\2\2\u08f5\u08f6\3\2\2\2\u08f6\u08f7\3\2\2\2\u08f7") - buf.write("\u08f8\5\u012e\u0098\2\u08f8\u00db\3\2\2\2\u08f9\u08fa") - buf.write("\7\u00f3\2\2\u08fa\u08fb\5\u00e6t\2\u08fb\u00dd\3\2\2") - buf.write("\2\u08fc\u08fd\7\u0122\2\2\u08fd\u0900\7\u00af\2\2\u08fe") - buf.write("\u08ff\7\60\2\2\u08ff\u0901\5\u0138\u009d\2\u0900\u08fe") - buf.write("\3\2\2\2\u0900\u0901\3\2\2\2\u0901\u0902\3\2\2\2\u0902") - buf.write("\u0903\7\u0108\2\2\u0903\u0904\5\u00e2r\2\u0904\u00df") - buf.write("\3\2\2\2\u0905\u0906\7\u0122\2\2\u0906\u0907\7\u00b8\2") - buf.write("\2\u0907\u090a\7\u00af\2\2\u0908\u0909\7\60\2\2\u0909") - buf.write("\u090b\5\u0138\u009d\2\u090a\u0908\3\2\2\2\u090a\u090b") - buf.write("\3\2\2\2\u090b\u090c\3\2\2\2\u090c\u090d\7\u0108\2\2\u090d") - buf.write("\u090e\5\u00e4s\2\u090e\u00e1\3\2\2\2\u090f\u0917\7b\2") - buf.write("\2\u0910\u0911\7\u011b\2\2\u0911\u0912\7\u00f3\2\2\u0912") - buf.write("\u0917\7\u0132\2\2\u0913\u0914\7\u011b\2\2\u0914\u0915") - buf.write("\7\u00f3\2\2\u0915\u0917\5\u00e6t\2\u0916\u090f\3\2\2") - buf.write("\2\u0916\u0910\3\2\2\2\u0916\u0913\3\2\2\2\u0917\u00e3") - buf.write("\3\2\2\2\u0918\u0919\7\u0096\2\2\u0919\u092b\7\u0132\2") - buf.write("\2\u091a\u091b\7\u0096\2\2\u091b\u091c\7\5\2\2\u091c\u091d") - buf.write("\5\u0124\u0093\2\u091d\u091e\7\6\2\2\u091e\u091f\7\u011f") - buf.write("\2\2\u091f\u0920\7\5\2\2\u0920\u0925\5\u0136\u009c\2\u0921") - buf.write("\u0922\7\3\2\2\u0922\u0924\5\u0136\u009c\2\u0923\u0921") - buf.write("\3\2\2\2\u0924\u0927\3\2\2\2\u0925\u0923\3\2\2\2\u0925") - buf.write("\u0926\3\2\2\2\u0926\u0928\3\2\2\2\u0927\u0925\3\2\2\2") - buf.write("\u0928\u0929\7\6\2\2\u0929\u092b\3\2\2\2\u092a\u0918\3") - buf.write("\2\2\2\u092a\u091a\3\2\2\2\u092b\u00e5\3\2\2\2\u092c\u0931") - buf.write("\5\u00e8u\2\u092d\u092e\7\3\2\2\u092e\u0930\5\u00e8u\2") - buf.write("\u092f\u092d\3\2\2\2\u0930\u0933\3\2\2\2\u0931\u092f\3") - buf.write("\2\2\2\u0931\u0932\3\2\2\2\u0932\u00e7\3\2\2\2\u0933\u0931") - buf.write("\3\2\2\2\u0934\u0935\5\u0126\u0094\2\u0935\u0936\7\u0127") - buf.write("\2\2\u0936\u0937\5\u0136\u009c\2\u0937\u00e9\3\2\2\2\u0938") - buf.write("\u0939\7\u0123\2\2\u0939\u093a\5\u0138\u009d\2\u093a\u00eb") - buf.write("\3\2\2\2\u093b\u093c\7\u008b\2\2\u093c\u093d\5\u0138\u009d") - buf.write("\2\u093d\u00ed\3\2\2\2\u093e\u093f\7\20\2\2\u093f\u0946") - buf.write("\5\u00f0y\2\u0940\u0942\7\3\2\2\u0941\u0940\3\2\2\2\u0941") - buf.write("\u0942\3\2\2\2\u0942\u0943\3\2\2\2\u0943\u0945\5\u00f0") - buf.write("y\2\u0944\u0941\3\2\2\2\u0945\u0948\3\2\2\2\u0946\u0944") - buf.write("\3\2\2\2\u0946\u0947\3\2\2\2\u0947\u0949\3\2\2\2\u0948") - buf.write("\u0946\3\2\2\2\u0949\u094a\7\21\2\2\u094a\u00ef\3\2\2") - buf.write("\2\u094b\u0959\5\u0180\u00c1\2\u094c\u094d\5\u0180\u00c1") - buf.write("\2\u094d\u094e\7\5\2\2\u094e\u0953\5\u013e\u00a0\2\u094f") - buf.write("\u0950\7\3\2\2\u0950\u0952\5\u013e\u00a0\2\u0951\u094f") - buf.write("\3\2\2\2\u0952\u0955\3\2\2\2\u0953\u0951\3\2\2\2\u0953") - buf.write("\u0954\3\2\2\2\u0954\u0956\3\2\2\2\u0955\u0953\3\2\2\2") - buf.write("\u0956\u0957\7\6\2\2\u0957\u0959\3\2\2\2\u0958\u094b\3") - buf.write("\2\2\2\u0958\u094c\3\2\2\2\u0959\u00f1\3\2\2\2\u095a\u095b") - buf.write("\7\u0083\2\2\u095b\u0960\5\u0102\u0082\2\u095c\u095d\7") - buf.write("\3\2\2\u095d\u095f\5\u0102\u0082\2\u095e\u095c\3\2\2\2") - buf.write("\u095f\u0962\3\2\2\2\u0960\u095e\3\2\2\2\u0960\u0961\3") - buf.write("\2\2\2\u0961\u0966\3\2\2\2\u0962\u0960\3\2\2\2\u0963\u0965") - buf.write("\5\u00fe\u0080\2\u0964\u0963\3\2\2\2\u0965\u0968\3\2\2") - buf.write("\2\u0966\u0964\3\2\2\2\u0966\u0967\3\2\2\2\u0967\u096a") - buf.write("\3\2\2\2\u0968\u0966\3\2\2\2\u0969\u096b\5\u00f8}\2\u096a") - buf.write("\u0969\3\2\2\2\u096a\u096b\3\2\2\2\u096b\u00f3\3\2\2\2") - buf.write("\u096c\u096d\7\u0089\2\2\u096d\u096e\7=\2\2\u096e\u0973") - buf.write("\5\u0136\u009c\2\u096f\u0970\7\3\2\2\u0970\u0972\5\u0136") - buf.write("\u009c\2\u0971\u096f\3\2\2\2\u0972\u0975\3\2\2\2\u0973") - buf.write("\u0971\3\2\2\2\u0973\u0974\3\2\2\2\u0974\u0987\3\2\2\2") - buf.write("\u0975\u0973\3\2\2\2\u0976\u0977\7\u0125\2\2\u0977\u0988") - buf.write("\7\u00e8\2\2\u0978\u0979\7\u0125\2\2\u0979\u0988\7V\2") - buf.write("\2\u097a\u097b\7\u008a\2\2\u097b\u097c\7\u00f5\2\2\u097c") - buf.write("\u097d\7\5\2\2\u097d\u0982\5\u00f6|\2\u097e\u097f\7\3") - buf.write("\2\2\u097f\u0981\5\u00f6|\2\u0980\u097e\3\2\2\2\u0981") - buf.write("\u0984\3\2\2\2\u0982\u0980\3\2\2\2\u0982\u0983\3\2\2\2") - buf.write("\u0983\u0985\3\2\2\2\u0984\u0982\3\2\2\2\u0985\u0986\7") - buf.write("\6\2\2\u0986\u0988\3\2\2\2\u0987\u0976\3\2\2\2\u0987\u0978") - buf.write("\3\2\2\2\u0987\u097a\3\2\2\2\u0987\u0988\3\2\2\2\u0988") - buf.write("\u0999\3\2\2\2\u0989\u098a\7\u0089\2\2\u098a\u098b\7=") - buf.write("\2\2\u098b\u098c\7\u008a\2\2\u098c\u098d\7\u00f5\2\2\u098d") - buf.write("\u098e\7\5\2\2\u098e\u0993\5\u00f6|\2\u098f\u0990\7\3") - buf.write("\2\2\u0990\u0992\5\u00f6|\2\u0991\u098f\3\2\2\2\u0992") - buf.write("\u0995\3\2\2\2\u0993\u0991\3\2\2\2\u0993\u0994\3\2\2\2") - buf.write("\u0994\u0996\3\2\2\2\u0995\u0993\3\2\2\2\u0996\u0997\7") - buf.write("\6\2\2\u0997\u0999\3\2\2\2\u0998\u096c\3\2\2\2\u0998\u0989") - buf.write("\3\2\2\2\u0999\u00f5\3\2\2\2\u099a\u09a3\7\5\2\2\u099b") - buf.write("\u09a0\5\u0136\u009c\2\u099c\u099d\7\3\2\2\u099d\u099f") - buf.write("\5\u0136\u009c\2\u099e\u099c\3\2\2\2\u099f\u09a2\3\2\2") - buf.write("\2\u09a0\u099e\3\2\2\2\u09a0\u09a1\3\2\2\2\u09a1\u09a4") - buf.write("\3\2\2\2\u09a2\u09a0\3\2\2\2\u09a3\u099b\3\2\2\2\u09a3") - buf.write("\u09a4\3\2\2\2\u09a4\u09a5\3\2\2\2\u09a5\u09a8\7\6\2\2") - buf.write("\u09a6\u09a8\5\u0136\u009c\2\u09a7\u099a\3\2\2\2\u09a7") - buf.write("\u09a6\3\2\2\2\u09a8\u00f7\3\2\2\2\u09a9\u09aa\7\u00cd") - buf.write("\2\2\u09aa\u09ab\7\5\2\2\u09ab\u09ac\5\u012e\u0098\2\u09ac") - buf.write("\u09ad\7\177\2\2\u09ad\u09ae\5\u00fa~\2\u09ae\u09af\7") - buf.write("\u0090\2\2\u09af\u09b0\7\5\2\2\u09b0\u09b5\5\u00fc\177") - buf.write("\2\u09b1\u09b2\7\3\2\2\u09b2\u09b4\5\u00fc\177\2\u09b3") - buf.write("\u09b1\3\2\2\2\u09b4\u09b7\3\2\2\2\u09b5\u09b3\3\2\2\2") - buf.write("\u09b5\u09b6\3\2\2\2\u09b6\u09b8\3\2\2\2\u09b7\u09b5\3") - buf.write("\2\2\2\u09b8\u09b9\7\6\2\2\u09b9\u09ba\7\6\2\2\u09ba\u00f9") - buf.write("\3\2\2\2\u09bb\u09c8\5\u0180\u00c1\2\u09bc\u09bd\7\5\2") - buf.write("\2\u09bd\u09c2\5\u0180\u00c1\2\u09be\u09bf\7\3\2\2\u09bf") - buf.write("\u09c1\5\u0180\u00c1\2\u09c0\u09be\3\2\2\2\u09c1\u09c4") - buf.write("\3\2\2\2\u09c2\u09c0\3\2\2\2\u09c2\u09c3\3\2\2\2\u09c3") - buf.write("\u09c5\3\2\2\2\u09c4\u09c2\3\2\2\2\u09c5\u09c6\7\6\2\2") - buf.write("\u09c6\u09c8\3\2\2\2\u09c7\u09bb\3\2\2\2\u09c7\u09bc\3") - buf.write("\2\2\2\u09c8\u00fb\3\2\2\2\u09c9\u09ce\5\u0136\u009c\2") - buf.write("\u09ca\u09cc\7\65\2\2\u09cb\u09ca\3\2\2\2\u09cb\u09cc") - buf.write("\3\2\2\2\u09cc\u09cd\3\2\2\2\u09cd\u09cf\5\u0180\u00c1") - buf.write("\2\u09ce\u09cb\3\2\2\2\u09ce\u09cf\3\2\2\2\u09cf\u00fd") - buf.write("\3\2\2\2\u09d0\u09d1\7\u009f\2\2\u09d1\u09d3\7\u0120\2") - buf.write("\2\u09d2\u09d4\7\u00c3\2\2\u09d3\u09d2\3\2\2\2\u09d3\u09d4") - buf.write("\3\2\2\2\u09d4\u09d5\3\2\2\2\u09d5\u09d6\5\u017a\u00be") - buf.write("\2\u09d6\u09df\7\5\2\2\u09d7\u09dc\5\u0136\u009c\2\u09d8") - buf.write("\u09d9\7\3\2\2\u09d9\u09db\5\u0136\u009c\2\u09da\u09d8") - buf.write("\3\2\2\2\u09db\u09de\3\2\2\2\u09dc\u09da\3\2\2\2\u09dc") - buf.write("\u09dd\3\2\2\2\u09dd\u09e0\3\2\2\2\u09de\u09dc\3\2\2\2") - buf.write("\u09df\u09d7\3\2\2\2\u09df\u09e0\3\2\2\2\u09e0\u09e1\3") - buf.write("\2\2\2\u09e1\u09e2\7\6\2\2\u09e2\u09ee\5\u0180\u00c1\2") - buf.write("\u09e3\u09e5\7\65\2\2\u09e4\u09e3\3\2\2\2\u09e4\u09e5") - buf.write("\3\2\2\2\u09e5\u09e6\3\2\2\2\u09e6\u09eb\5\u0180\u00c1") - buf.write("\2\u09e7\u09e8\7\3\2\2\u09e8\u09ea\5\u0180\u00c1\2\u09e9") - buf.write("\u09e7\3\2\2\2\u09ea\u09ed\3\2\2\2\u09eb\u09e9\3\2\2\2") - buf.write("\u09eb\u09ec\3\2\2\2\u09ec\u09ef\3\2\2\2\u09ed\u09eb\3") - buf.write("\2\2\2\u09ee\u09e4\3\2\2\2\u09ee\u09ef\3\2\2\2\u09ef\u00ff") - buf.write("\3\2\2\2\u09f0\u09f1\t\32\2\2\u09f1\u0101\3\2\2\2\u09f2") - buf.write("\u09f6\5\u011a\u008e\2\u09f3\u09f5\5\u0104\u0083\2\u09f4") - buf.write("\u09f3\3\2\2\2\u09f5\u09f8\3\2\2\2\u09f6\u09f4\3\2\2\2") - buf.write("\u09f6\u09f7\3\2\2\2\u09f7\u0103\3\2\2\2\u09f8\u09f6\3") - buf.write("\2\2\2\u09f9\u09fa\5\u0106\u0084\2\u09fa\u09fb\7\u009c") - buf.write("\2\2\u09fb\u09fd\5\u011a\u008e\2\u09fc\u09fe\5\u0108\u0085") - buf.write("\2\u09fd\u09fc\3\2\2\2\u09fd\u09fe\3\2\2\2\u09fe\u0a05") - buf.write("\3\2\2\2\u09ff\u0a00\7\u00b6\2\2\u0a00\u0a01\5\u0106\u0084") - buf.write("\2\u0a01\u0a02\7\u009c\2\2\u0a02\u0a03\5\u011a\u008e\2") - buf.write("\u0a03\u0a05\3\2\2\2\u0a04\u09f9\3\2\2\2\u0a04\u09ff\3") - buf.write("\2\2\2\u0a05\u0105\3\2\2\2\u0a06\u0a08\7\u0093\2\2\u0a07") - buf.write("\u0a06\3\2\2\2\u0a07\u0a08\3\2\2\2\u0a08\u0a1f\3\2\2\2") - buf.write("\u0a09\u0a1f\7U\2\2\u0a0a\u0a0c\7\u00a2\2\2\u0a0b\u0a0d") - buf.write("\7\u00c3\2\2\u0a0c\u0a0b\3\2\2\2\u0a0c\u0a0d\3\2\2\2\u0a0d") - buf.write("\u0a1f\3\2\2\2\u0a0e\u0a10\7\u00a2\2\2\u0a0f\u0a0e\3\2") - buf.write("\2\2\u0a0f\u0a10\3\2\2\2\u0a10\u0a11\3\2\2\2\u0a11\u0a1f") - buf.write("\7\u00ee\2\2\u0a12\u0a14\7\u00e3\2\2\u0a13\u0a15\7\u00c3") - buf.write("\2\2\u0a14\u0a13\3\2\2\2\u0a14\u0a15\3\2\2\2\u0a15\u0a1f") - buf.write("\3\2\2\2\u0a16\u0a18\7\u0084\2\2\u0a17\u0a19\7\u00c3\2") - buf.write("\2\u0a18\u0a17\3\2\2\2\u0a18\u0a19\3\2\2\2\u0a19\u0a1f") - buf.write("\3\2\2\2\u0a1a\u0a1c\7\u00a2\2\2\u0a1b\u0a1a\3\2\2\2\u0a1b") - buf.write("\u0a1c\3\2\2\2\u0a1c\u0a1d\3\2\2\2\u0a1d\u0a1f\7\61\2") - buf.write("\2\u0a1e\u0a07\3\2\2\2\u0a1e\u0a09\3\2\2\2\u0a1e\u0a0a") - buf.write("\3\2\2\2\u0a1e\u0a0f\3\2\2\2\u0a1e\u0a12\3\2\2\2\u0a1e") - buf.write("\u0a16\3\2\2\2\u0a1e\u0a1b\3\2\2\2\u0a1f\u0107\3\2\2\2") - buf.write("\u0a20\u0a21\7\u00bc\2\2\u0a21\u0a25\5\u0138\u009d\2\u0a22") - buf.write("\u0a23\7\u011e\2\2\u0a23\u0a25\5\u010e\u0088\2\u0a24\u0a20") - buf.write("\3\2\2\2\u0a24\u0a22\3\2\2\2\u0a25\u0109\3\2\2\2\u0a26") - buf.write("\u0a27\7\u0104\2\2\u0a27\u0a29\7\5\2\2\u0a28\u0a2a\5\u010c") - buf.write("\u0087\2\u0a29\u0a28\3\2\2\2\u0a29\u0a2a\3\2\2\2\u0a2a") - buf.write("\u0a2b\3\2\2\2\u0a2b\u0a2c\7\6\2\2\u0a2c\u010b\3\2\2\2") - buf.write("\u0a2d\u0a2f\7\u0131\2\2\u0a2e\u0a2d\3\2\2\2\u0a2e\u0a2f") - buf.write("\3\2\2\2\u0a2f\u0a30\3\2\2\2\u0a30\u0a31\t\33\2\2\u0a31") - buf.write("\u0a46\7\u00cc\2\2\u0a32\u0a33\5\u0136\u009c\2\u0a33\u0a34") - buf.write("\7\u00ea\2\2\u0a34\u0a46\3\2\2\2\u0a35\u0a36\7;\2\2\u0a36") - buf.write("\u0a37\7\u013f\2\2\u0a37\u0a38\7\u00c2\2\2\u0a38\u0a39") - buf.write("\7\u00bb\2\2\u0a39\u0a42\7\u013f\2\2\u0a3a\u0a40\7\u00bc") - buf.write("\2\2\u0a3b\u0a41\5\u0180\u00c1\2\u0a3c\u0a3d\5\u017a\u00be") - buf.write("\2\u0a3d\u0a3e\7\5\2\2\u0a3e\u0a3f\7\6\2\2\u0a3f\u0a41") - buf.write("\3\2\2\2\u0a40\u0a3b\3\2\2\2\u0a40\u0a3c\3\2\2\2\u0a41") - buf.write("\u0a43\3\2\2\2\u0a42\u0a3a\3\2\2\2\u0a42\u0a43\3\2\2\2") - buf.write("\u0a43\u0a46\3\2\2\2\u0a44\u0a46\5\u0136\u009c\2\u0a45") - buf.write("\u0a2e\3\2\2\2\u0a45\u0a32\3\2\2\2\u0a45\u0a35\3\2\2\2") - buf.write("\u0a45\u0a44\3\2\2\2\u0a46\u010d\3\2\2\2\u0a47\u0a48\7") - buf.write("\5\2\2\u0a48\u0a49\5\u0110\u0089\2\u0a49\u0a4a\7\6\2\2") - buf.write("\u0a4a\u010f\3\2\2\2\u0a4b\u0a50\5\u017c\u00bf\2\u0a4c") - buf.write("\u0a4d\7\3\2\2\u0a4d\u0a4f\5\u017c\u00bf\2\u0a4e\u0a4c") - buf.write("\3\2\2\2\u0a4f\u0a52\3\2\2\2\u0a50\u0a4e\3\2\2\2\u0a50") - buf.write("\u0a51\3\2\2\2\u0a51\u0111\3\2\2\2\u0a52\u0a50\3\2\2\2") - buf.write("\u0a53\u0a54\7\5\2\2\u0a54\u0a59\5\u0114\u008b\2\u0a55") - buf.write("\u0a56\7\3\2\2\u0a56\u0a58\5\u0114\u008b\2\u0a57\u0a55") - buf.write("\3\2\2\2\u0a58\u0a5b\3\2\2\2\u0a59\u0a57\3\2\2\2\u0a59") - buf.write("\u0a5a\3\2\2\2\u0a5a\u0a5c\3\2\2\2\u0a5b\u0a59\3\2\2\2") - buf.write("\u0a5c\u0a5d\7\6\2\2\u0a5d\u0113\3\2\2\2\u0a5e\u0a60\5") - buf.write("\u017c\u00bf\2\u0a5f\u0a61\t\7\2\2\u0a60\u0a5f\3\2\2\2") - buf.write("\u0a60\u0a61\3\2\2\2\u0a61\u0115\3\2\2\2\u0a62\u0a63\7") - buf.write("\5\2\2\u0a63\u0a68\5\u0118\u008d\2\u0a64\u0a65\7\3\2\2") - buf.write("\u0a65\u0a67\5\u0118\u008d\2\u0a66\u0a64\3\2\2\2\u0a67") - buf.write("\u0a6a\3\2\2\2\u0a68\u0a66\3\2\2\2\u0a68\u0a69\3\2\2\2") - buf.write("\u0a69\u0a6b\3\2\2\2\u0a6a\u0a68\3\2\2\2\u0a6b\u0a6c\7") - buf.write("\6\2\2\u0a6c\u0117\3\2\2\2\u0a6d\u0a6f\5\u0180\u00c1\2") - buf.write("\u0a6e\u0a70\5\u0096L\2\u0a6f\u0a6e\3\2\2\2\u0a6f\u0a70") - buf.write("\3\2\2\2\u0a70\u0119\3\2\2\2\u0a71\u0a73\5\u0126\u0094") - buf.write("\2\u0a72\u0a74\5\u010a\u0086\2\u0a73\u0a72\3\2\2\2\u0a73") - buf.write("\u0a74\3\2\2\2\u0a74\u0a75\3\2\2\2\u0a75\u0a76\5\u0120") - buf.write("\u0091\2\u0a76\u0a92\3\2\2\2\u0a77\u0a78\7\5\2\2\u0a78") - buf.write("\u0a79\5\u0098M\2\u0a79\u0a7b\7\6\2\2\u0a7a\u0a7c\5\u010a") - buf.write("\u0086\2\u0a7b\u0a7a\3\2\2\2\u0a7b\u0a7c\3\2\2\2\u0a7c") - buf.write("\u0a7d\3\2\2\2\u0a7d\u0a7e\5\u0120\u0091\2\u0a7e\u0a92") - buf.write("\3\2\2\2\u0a7f\u0a80\7\5\2\2\u0a80\u0a81\5\f\7\2\u0a81") - buf.write("\u0a83\7\6\2\2\u0a82\u0a84\5\u010a\u0086\2\u0a83\u0a82") - buf.write("\3\2\2\2\u0a83\u0a84\3\2\2\2\u0a84\u0a85\3\2\2\2\u0a85") - buf.write("\u0a86\5\u0120\u0091\2\u0a86\u0a92\3\2\2\2\u0a87\u0a88") - buf.write("\7\5\2\2\u0a88\u0a89\5\u0102\u0082\2\u0a89\u0a8b\7\6\2") - buf.write("\2\u0a8a\u0a8c\5\u010a\u0086\2\u0a8b\u0a8a\3\2\2\2\u0a8b") - buf.write("\u0a8c\3\2\2\2\u0a8c\u0a8d\3\2\2\2\u0a8d\u0a8e\5\u0120") - buf.write("\u0091\2\u0a8e\u0a92\3\2\2\2\u0a8f\u0a92\5\u011c\u008f") - buf.write("\2\u0a90\u0a92\5\u011e\u0090\2\u0a91\u0a71\3\2\2\2\u0a91") - buf.write("\u0a77\3\2\2\2\u0a91\u0a7f\3\2\2\2\u0a91\u0a87\3\2\2\2") - buf.write("\u0a91\u0a8f\3\2\2\2\u0a91\u0a90\3\2\2\2\u0a92\u011b\3") - buf.write("\2\2\2\u0a93\u0a94\7\u011f\2\2\u0a94\u0a99\5\u0136\u009c") - buf.write("\2\u0a95\u0a96\7\3\2\2\u0a96\u0a98\5\u0136\u009c\2\u0a97") - buf.write("\u0a95\3\2\2\2\u0a98\u0a9b\3\2\2\2\u0a99\u0a97\3\2\2\2") - buf.write("\u0a99\u0a9a\3\2\2\2\u0a9a\u0a9c\3\2\2\2\u0a9b\u0a99\3") - buf.write("\2\2\2\u0a9c\u0a9d\5\u0120\u0091\2\u0a9d\u011d\3\2\2\2") - buf.write("\u0a9e\u0a9f\5\u017c\u00bf\2\u0a9f\u0aa8\7\5\2\2\u0aa0") - buf.write("\u0aa5\5\u0136\u009c\2\u0aa1\u0aa2\7\3\2\2\u0aa2\u0aa4") - buf.write("\5\u0136\u009c\2\u0aa3\u0aa1\3\2\2\2\u0aa4\u0aa7\3\2\2") - buf.write("\2\u0aa5\u0aa3\3\2\2\2\u0aa5\u0aa6\3\2\2\2\u0aa6\u0aa9") - buf.write("\3\2\2\2\u0aa7\u0aa5\3\2\2\2\u0aa8\u0aa0\3\2\2\2\u0aa8") - buf.write("\u0aa9\3\2\2\2\u0aa9\u0aaa\3\2\2\2\u0aaa\u0aab\7\6\2\2") - buf.write("\u0aab\u0aac\5\u0120\u0091\2\u0aac\u011f\3\2\2\2\u0aad") - buf.write("\u0aaf\7\65\2\2\u0aae\u0aad\3\2\2\2\u0aae\u0aaf\3\2\2") - buf.write("\2\u0aaf\u0ab0\3\2\2\2\u0ab0\u0ab2\5\u0182\u00c2\2\u0ab1") - buf.write("\u0ab3\5\u010e\u0088\2\u0ab2\u0ab1\3\2\2\2\u0ab2\u0ab3") - buf.write("\3\2\2\2\u0ab3\u0ab5\3\2\2\2\u0ab4\u0aae\3\2\2\2\u0ab4") - buf.write("\u0ab5\3\2\2\2\u0ab5\u0121\3\2\2\2\u0ab6\u0ab7\7\u00e9") - buf.write("\2\2\u0ab7\u0ab8\7\u0081\2\2\u0ab8\u0ab9\7\u00f0\2\2\u0ab9") - buf.write("\u0abd\7\u013b\2\2\u0aba\u0abb\7\u0125\2\2\u0abb\u0abc") - buf.write("\7\u00f1\2\2\u0abc\u0abe\5\u00b0Y\2\u0abd\u0aba\3\2\2") - buf.write("\2\u0abd\u0abe\3\2\2\2\u0abe\u0ae8\3\2\2\2\u0abf\u0ac0") - buf.write("\7\u00e9\2\2\u0ac0\u0ac1\7\u0081\2\2\u0ac1\u0acb\7c\2") - buf.write("\2\u0ac2\u0ac3\7z\2\2\u0ac3\u0ac4\7\u0107\2\2\u0ac4\u0ac5") - buf.write("\7=\2\2\u0ac5\u0ac9\7\u013b\2\2\u0ac6\u0ac7\7o\2\2\u0ac7") - buf.write("\u0ac8\7=\2\2\u0ac8\u0aca\7\u013b\2\2\u0ac9\u0ac6\3\2") - buf.write("\2\2\u0ac9\u0aca\3\2\2\2\u0aca\u0acc\3\2\2\2\u0acb\u0ac2") - buf.write("\3\2\2\2\u0acb\u0acc\3\2\2\2\u0acc\u0ad2\3\2\2\2\u0acd") - buf.write("\u0ace\7I\2\2\u0ace\u0acf\7\u009b\2\2\u0acf\u0ad0\7\u0107") - buf.write("\2\2\u0ad0\u0ad1\7=\2\2\u0ad1\u0ad3\7\u013b\2\2\u0ad2") - buf.write("\u0acd\3\2\2\2\u0ad2\u0ad3\3\2\2\2\u0ad3\u0ad9\3\2\2\2") - buf.write("\u0ad4\u0ad5\7\u00ae\2\2\u0ad5\u0ad6\7\u009d\2\2\u0ad6") - buf.write("\u0ad7\7\u0107\2\2\u0ad7\u0ad8\7=\2\2\u0ad8\u0ada\7\u013b") - buf.write("\2\2\u0ad9\u0ad4\3\2\2\2\u0ad9\u0ada\3\2\2\2\u0ada\u0adf") - buf.write("\3\2\2\2\u0adb\u0adc\7\u00a5\2\2\u0adc\u0add\7\u0107\2") - buf.write("\2\u0add\u0ade\7=\2\2\u0ade\u0ae0\7\u013b\2\2\u0adf\u0adb") - buf.write("\3\2\2\2\u0adf\u0ae0\3\2\2\2\u0ae0\u0ae5\3\2\2\2\u0ae1") - buf.write("\u0ae2\7\u00b9\2\2\u0ae2\u0ae3\7a\2\2\u0ae3\u0ae4\7\65") - buf.write("\2\2\u0ae4\u0ae6\7\u013b\2\2\u0ae5\u0ae1\3\2\2\2\u0ae5") - buf.write("\u0ae6\3\2\2\2\u0ae6\u0ae8\3\2\2\2\u0ae7\u0ab6\3\2\2\2") - buf.write("\u0ae7\u0abf\3\2\2\2\u0ae8\u0123\3\2\2\2\u0ae9\u0aee\5") - buf.write("\u0126\u0094\2\u0aea\u0aeb\7\3\2\2\u0aeb\u0aed\5\u0126") - buf.write("\u0094\2\u0aec\u0aea\3\2\2\2\u0aed\u0af0\3\2\2\2\u0aee") - buf.write("\u0aec\3\2\2\2\u0aee\u0aef\3\2\2\2\u0aef\u0125\3\2\2\2") - buf.write("\u0af0\u0aee\3\2\2\2\u0af1\u0af6\5\u017c\u00bf\2\u0af2") - buf.write("\u0af3\7\7\2\2\u0af3\u0af5\5\u017c\u00bf\2\u0af4\u0af2") - buf.write("\3\2\2\2\u0af5\u0af8\3\2\2\2\u0af6\u0af4\3\2\2\2\u0af6") - buf.write("\u0af7\3\2\2\2\u0af7\u0127\3\2\2\2\u0af8\u0af6\3\2\2\2") - buf.write("\u0af9\u0afa\5\u017c\u00bf\2\u0afa\u0afb\7\7\2\2\u0afb") - buf.write("\u0afd\3\2\2\2\u0afc\u0af9\3\2\2\2\u0afc\u0afd\3\2\2\2") - buf.write("\u0afd\u0afe\3\2\2\2\u0afe\u0aff\5\u017c\u00bf\2\u0aff") - buf.write("\u0129\3\2\2\2\u0b00\u0b01\5\u017c\u00bf\2\u0b01\u0b02") - buf.write("\7\7\2\2\u0b02\u0b04\3\2\2\2\u0b03\u0b00\3\2\2\2\u0b03") - buf.write("\u0b04\3\2\2\2\u0b04\u0b05\3\2\2\2\u0b05\u0b06\5\u017c") - buf.write("\u00bf\2\u0b06\u012b\3\2\2\2\u0b07\u0b0f\5\u0136\u009c") - buf.write("\2\u0b08\u0b0a\7\65\2\2\u0b09\u0b08\3\2\2\2\u0b09\u0b0a") - buf.write("\3\2\2\2\u0b0a\u0b0d\3\2\2\2\u0b0b\u0b0e\5\u017c\u00bf") - buf.write("\2\u0b0c\u0b0e\5\u010e\u0088\2\u0b0d\u0b0b\3\2\2\2\u0b0d") - buf.write("\u0b0c\3\2\2\2\u0b0e\u0b10\3\2\2\2\u0b0f\u0b09\3\2\2\2") - buf.write("\u0b0f\u0b10\3\2\2\2\u0b10\u012d\3\2\2\2\u0b11\u0b16\5") - buf.write("\u012c\u0097\2\u0b12\u0b13\7\3\2\2\u0b13\u0b15\5\u012c") - buf.write("\u0097\2\u0b14\u0b12\3\2\2\2\u0b15\u0b18\3\2\2\2\u0b16") - buf.write("\u0b14\3\2\2\2\u0b16\u0b17\3\2\2\2\u0b17\u012f\3\2\2\2") - buf.write("\u0b18\u0b16\3\2\2\2\u0b19\u0b1a\7\5\2\2\u0b1a\u0b1f\5") - buf.write("\u0132\u009a\2\u0b1b\u0b1c\7\3\2\2\u0b1c\u0b1e\5\u0132") - buf.write("\u009a\2\u0b1d\u0b1b\3\2\2\2\u0b1e\u0b21\3\2\2\2\u0b1f") - buf.write("\u0b1d\3\2\2\2\u0b1f\u0b20\3\2\2\2\u0b20\u0b22\3\2\2\2") - buf.write("\u0b21\u0b1f\3\2\2\2\u0b22\u0b23\7\6\2\2\u0b23\u0131\3") - buf.write("\2\2\2\u0b24\u0b32\5\u017a\u00be\2\u0b25\u0b26\5\u0180") - buf.write("\u00c1\2\u0b26\u0b27\7\5\2\2\u0b27\u0b2c\5\u0134\u009b") - buf.write("\2\u0b28\u0b29\7\3\2\2\u0b29\u0b2b\5\u0134\u009b\2\u0b2a") - buf.write("\u0b28\3\2\2\2\u0b2b\u0b2e\3\2\2\2\u0b2c\u0b2a\3\2\2\2") - buf.write("\u0b2c\u0b2d\3\2\2\2\u0b2d\u0b2f\3\2\2\2\u0b2e\u0b2c\3") - buf.write("\2\2\2\u0b2f\u0b30\7\6\2\2\u0b30\u0b32\3\2\2\2\u0b31\u0b24") - buf.write("\3\2\2\2\u0b31\u0b25\3\2\2\2\u0b32\u0133\3\2\2\2\u0b33") - buf.write("\u0b36\5\u017a\u00be\2\u0b34\u0b36\5\u0140\u00a1\2\u0b35") - buf.write("\u0b33\3\2\2\2\u0b35\u0b34\3\2\2\2\u0b36\u0135\3\2\2\2") - buf.write("\u0b37\u0b38\5\u0138\u009d\2\u0b38\u0137\3\2\2\2\u0b39") - buf.write("\u0b3a\b\u009d\1\2\u0b3a\u0b3b\7\u00b8\2\2\u0b3b\u0b46") - buf.write("\5\u0138\u009d\7\u0b3c\u0b3d\7r\2\2\u0b3d\u0b3e\7\5\2") - buf.write("\2\u0b3e\u0b3f\5\u0098M\2\u0b3f\u0b40\7\6\2\2\u0b40\u0b46") - buf.write("\3\2\2\2\u0b41\u0b43\5\u013c\u009f\2\u0b42\u0b44\5\u013a") - buf.write("\u009e\2\u0b43\u0b42\3\2\2\2\u0b43\u0b44\3\2\2\2\u0b44") - buf.write("\u0b46\3\2\2\2\u0b45\u0b39\3\2\2\2\u0b45\u0b3c\3\2\2\2") - buf.write("\u0b45\u0b41\3\2\2\2\u0b46\u0b4f\3\2\2\2\u0b47\u0b48\f") - buf.write("\4\2\2\u0b48\u0b49\7\60\2\2\u0b49\u0b4e\5\u0138\u009d") - buf.write("\5\u0b4a\u0b4b\f\3\2\2\u0b4b\u0b4c\7\u00c0\2\2\u0b4c\u0b4e") - buf.write("\5\u0138\u009d\4\u0b4d\u0b47\3\2\2\2\u0b4d\u0b4a\3\2\2") - buf.write("\2\u0b4e\u0b51\3\2\2\2\u0b4f\u0b4d\3\2\2\2\u0b4f\u0b50") - buf.write("\3\2\2\2\u0b50\u0139\3\2\2\2\u0b51\u0b4f\3\2\2\2\u0b52") - buf.write("\u0b54\7\u00b8\2\2\u0b53\u0b52\3\2\2\2\u0b53\u0b54\3\2") - buf.write("\2\2\u0b54\u0b55\3\2\2\2\u0b55\u0b56\79\2\2\u0b56\u0b57") - buf.write("\5\u013c\u009f\2\u0b57\u0b58\7\60\2\2\u0b58\u0b59\5\u013c") - buf.write("\u009f\2\u0b59\u0ba5\3\2\2\2\u0b5a\u0b5c\7\u00b8\2\2\u0b5b") - buf.write("\u0b5a\3\2\2\2\u0b5b\u0b5c\3\2\2\2\u0b5c\u0b5d\3\2\2\2") - buf.write("\u0b5d\u0b5e\7\u0090\2\2\u0b5e\u0b5f\7\5\2\2\u0b5f\u0b64") - buf.write("\5\u0136\u009c\2\u0b60\u0b61\7\3\2\2\u0b61\u0b63\5\u0136") - buf.write("\u009c\2\u0b62\u0b60\3\2\2\2\u0b63\u0b66\3\2\2\2\u0b64") - buf.write("\u0b62\3\2\2\2\u0b64\u0b65\3\2\2\2\u0b65\u0b67\3\2\2\2") - buf.write("\u0b66\u0b64\3\2\2\2\u0b67\u0b68\7\6\2\2\u0b68\u0ba5\3") - buf.write("\2\2\2\u0b69\u0b6b\7\u00b8\2\2\u0b6a\u0b69\3\2\2\2\u0b6a") - buf.write("\u0b6b\3\2\2\2\u0b6b\u0b6c\3\2\2\2\u0b6c\u0b6d\7\u0090") - buf.write("\2\2\u0b6d\u0b6e\7\5\2\2\u0b6e\u0b6f\5\u0098M\2\u0b6f") - buf.write("\u0b70\7\6\2\2\u0b70\u0ba5\3\2\2\2\u0b71\u0b73\7\u00b8") - buf.write("\2\2\u0b72\u0b71\3\2\2\2\u0b72\u0b73\3\2\2\2\u0b73\u0b74") - buf.write("\3\2\2\2\u0b74\u0b75\7\u00e4\2\2\u0b75\u0ba5\5\u013c\u009f") - buf.write("\2\u0b76\u0b78\7\u00b8\2\2\u0b77\u0b76\3\2\2\2\u0b77\u0b78") - buf.write("\3\2\2\2\u0b78\u0b79\3\2\2\2\u0b79\u0b7a\7\u00a3\2\2\u0b7a") - buf.write("\u0b88\t\34\2\2\u0b7b\u0b7c\7\5\2\2\u0b7c\u0b89\7\6\2") - buf.write("\2\u0b7d\u0b7e\7\5\2\2\u0b7e\u0b83\5\u0136\u009c\2\u0b7f") - buf.write("\u0b80\7\3\2\2\u0b80\u0b82\5\u0136\u009c\2\u0b81\u0b7f") - buf.write("\3\2\2\2\u0b82\u0b85\3\2\2\2\u0b83\u0b81\3\2\2\2\u0b83") - buf.write("\u0b84\3\2\2\2\u0b84\u0b86\3\2\2\2\u0b85\u0b83\3\2\2\2") - buf.write("\u0b86\u0b87\7\6\2\2\u0b87\u0b89\3\2\2\2\u0b88\u0b7b\3") - buf.write("\2\2\2\u0b88\u0b7d\3\2\2\2\u0b89\u0ba5\3\2\2\2\u0b8a\u0b8c") - buf.write("\7\u00b8\2\2\u0b8b\u0b8a\3\2\2\2\u0b8b\u0b8c\3\2\2\2\u0b8c") - buf.write("\u0b8d\3\2\2\2\u0b8d\u0b8e\7\u00a3\2\2\u0b8e\u0b91\5\u013c") - buf.write("\u009f\2\u0b8f\u0b90\7n\2\2\u0b90\u0b92\7\u013b\2\2\u0b91") - buf.write("\u0b8f\3\2\2\2\u0b91\u0b92\3\2\2\2\u0b92\u0ba5\3\2\2\2") - buf.write("\u0b93\u0b95\7\u009a\2\2\u0b94\u0b96\7\u00b8\2\2\u0b95") - buf.write("\u0b94\3\2\2\2\u0b95\u0b96\3\2\2\2\u0b96\u0b97\3\2\2\2") - buf.write("\u0b97\u0ba5\7\u00b9\2\2\u0b98\u0b9a\7\u009a\2\2\u0b99") - buf.write("\u0b9b\7\u00b8\2\2\u0b9a\u0b99\3\2\2\2\u0b9a\u0b9b\3\2") - buf.write("\2\2\u0b9b\u0b9c\3\2\2\2\u0b9c\u0ba5\t\35\2\2\u0b9d\u0b9f") - buf.write("\7\u009a\2\2\u0b9e\u0ba0\7\u00b8\2\2\u0b9f\u0b9e\3\2\2") - buf.write("\2\u0b9f\u0ba0\3\2\2\2\u0ba0\u0ba1\3\2\2\2\u0ba1\u0ba2") - buf.write("\7i\2\2\u0ba2\u0ba3\7\u0083\2\2\u0ba3\u0ba5\5\u013c\u009f") - buf.write("\2\u0ba4\u0b53\3\2\2\2\u0ba4\u0b5b\3\2\2\2\u0ba4\u0b6a") - buf.write("\3\2\2\2\u0ba4\u0b72\3\2\2\2\u0ba4\u0b77\3\2\2\2\u0ba4") - buf.write("\u0b8b\3\2\2\2\u0ba4\u0b93\3\2\2\2\u0ba4\u0b98\3\2\2\2") - buf.write("\u0ba4\u0b9d\3\2\2\2\u0ba5\u013b\3\2\2\2\u0ba6\u0ba7\b") - buf.write("\u009f\1\2\u0ba7\u0bab\5\u013e\u00a0\2\u0ba8\u0ba9\t\36") - buf.write("\2\2\u0ba9\u0bab\5\u013c\u009f\t\u0baa\u0ba6\3\2\2\2\u0baa") - buf.write("\u0ba8\3\2\2\2\u0bab\u0bc1\3\2\2\2\u0bac\u0bad\f\b\2\2") - buf.write("\u0bad\u0bae\t\37\2\2\u0bae\u0bc0\5\u013c\u009f\t\u0baf") - buf.write("\u0bb0\f\7\2\2\u0bb0\u0bb1\t \2\2\u0bb1\u0bc0\5\u013c") - buf.write("\u009f\b\u0bb2\u0bb3\f\6\2\2\u0bb3\u0bb4\7\u0137\2\2\u0bb4") - buf.write("\u0bc0\5\u013c\u009f\7\u0bb5\u0bb6\f\5\2\2\u0bb6\u0bb7") - buf.write("\7\u013a\2\2\u0bb7\u0bc0\5\u013c\u009f\6\u0bb8\u0bb9\f") - buf.write("\4\2\2\u0bb9\u0bba\7\u0138\2\2\u0bba\u0bc0\5\u013c\u009f") - buf.write("\5\u0bbb\u0bbc\f\3\2\2\u0bbc\u0bbd\5\u0142\u00a2\2\u0bbd") - buf.write("\u0bbe\5\u013c\u009f\4\u0bbe\u0bc0\3\2\2\2\u0bbf\u0bac") - buf.write("\3\2\2\2\u0bbf\u0baf\3\2\2\2\u0bbf\u0bb2\3\2\2\2\u0bbf") - buf.write("\u0bb5\3\2\2\2\u0bbf\u0bb8\3\2\2\2\u0bbf\u0bbb\3\2\2\2") - buf.write("\u0bc0\u0bc3\3\2\2\2\u0bc1\u0bbf\3\2\2\2\u0bc1\u0bc2\3") - buf.write("\2\2\2\u0bc2\u013d\3\2\2\2\u0bc3\u0bc1\3\2\2\2\u0bc4\u0bc5") - buf.write("\b\u00a0\1\2\u0bc5\u0c7d\t!\2\2\u0bc6\u0bc8\7@\2\2\u0bc7") - buf.write("\u0bc9\5\u016a\u00b6\2\u0bc8\u0bc7\3\2\2\2\u0bc9\u0bca") - buf.write("\3\2\2\2\u0bca\u0bc8\3\2\2\2\u0bca\u0bcb\3\2\2\2\u0bcb") - buf.write("\u0bce\3\2\2\2\u0bcc\u0bcd\7l\2\2\u0bcd\u0bcf\5\u0136") - buf.write("\u009c\2\u0bce\u0bcc\3\2\2\2\u0bce\u0bcf\3\2\2\2\u0bcf") - buf.write("\u0bd0\3\2\2\2\u0bd0\u0bd1\7m\2\2\u0bd1\u0c7d\3\2\2\2") - buf.write("\u0bd2\u0bd3\7@\2\2\u0bd3\u0bd5\5\u0136\u009c\2\u0bd4") - buf.write("\u0bd6\5\u016a\u00b6\2\u0bd5\u0bd4\3\2\2\2\u0bd6\u0bd7") - buf.write("\3\2\2\2\u0bd7\u0bd5\3\2\2\2\u0bd7\u0bd8\3\2\2\2\u0bd8") - buf.write("\u0bdb\3\2\2\2\u0bd9\u0bda\7l\2\2\u0bda\u0bdc\5\u0136") - buf.write("\u009c\2\u0bdb\u0bd9\3\2\2\2\u0bdb\u0bdc\3\2\2\2\u0bdc") - buf.write("\u0bdd\3\2\2\2\u0bdd\u0bde\7m\2\2\u0bde\u0c7d\3\2\2\2") - buf.write("\u0bdf\u0be0\7A\2\2\u0be0\u0be1\7\5\2\2\u0be1\u0be2\5") - buf.write("\u0136\u009c\2\u0be2\u0be3\7\65\2\2\u0be3\u0be4\5\u015c") - buf.write("\u00af\2\u0be4\u0be5\7\6\2\2\u0be5\u0c7d\3\2\2\2\u0be6") - buf.write("\u0be7\7\u00ff\2\2\u0be7\u0bf0\7\5\2\2\u0be8\u0bed\5\u012c") - buf.write("\u0097\2\u0be9\u0bea\7\3\2\2\u0bea\u0bec\5\u012c\u0097") - buf.write("\2\u0beb\u0be9\3\2\2\2\u0bec\u0bef\3\2\2\2\u0bed\u0beb") - buf.write("\3\2\2\2\u0bed\u0bee\3\2\2\2\u0bee\u0bf1\3\2\2\2\u0bef") - buf.write("\u0bed\3\2\2\2\u0bf0\u0be8\3\2\2\2\u0bf0\u0bf1\3\2\2\2") - buf.write("\u0bf1\u0bf2\3\2\2\2\u0bf2\u0c7d\7\6\2\2\u0bf3\u0bf4\7") - buf.write("}\2\2\u0bf4\u0bf5\7\5\2\2\u0bf5\u0bf8\5\u0136\u009c\2") - buf.write("\u0bf6\u0bf7\7\u008e\2\2\u0bf7\u0bf9\7\u00ba\2\2\u0bf8") - buf.write("\u0bf6\3\2\2\2\u0bf8\u0bf9\3\2\2\2\u0bf9\u0bfa\3\2\2\2") - buf.write("\u0bfa\u0bfb\7\6\2\2\u0bfb\u0c7d\3\2\2\2\u0bfc\u0bfd\7") - buf.write("\u009e\2\2\u0bfd\u0bfe\7\5\2\2\u0bfe\u0c01\5\u0136\u009c") - buf.write("\2\u0bff\u0c00\7\u008e\2\2\u0c00\u0c02\7\u00ba\2\2\u0c01") - buf.write("\u0bff\3\2\2\2\u0c01\u0c02\3\2\2\2\u0c02\u0c03\3\2\2\2") - buf.write("\u0c03\u0c04\7\6\2\2\u0c04\u0c7d\3\2\2\2\u0c05\u0c06\7") - buf.write("\u00cf\2\2\u0c06\u0c07\7\5\2\2\u0c07\u0c08\5\u013c\u009f") - buf.write("\2\u0c08\u0c09\7\u0090\2\2\u0c09\u0c0a\5\u013c\u009f\2") - buf.write("\u0c0a\u0c0b\7\6\2\2\u0c0b\u0c7d\3\2\2\2\u0c0c\u0c7d\5") - buf.write("\u0140\u00a1\2\u0c0d\u0c7d\7\u0132\2\2\u0c0e\u0c0f\5\u017a") - buf.write("\u00be\2\u0c0f\u0c10\7\7\2\2\u0c10\u0c11\7\u0132\2\2\u0c11") - buf.write("\u0c7d\3\2\2\2\u0c12\u0c13\7\5\2\2\u0c13\u0c16\5\u012c") - buf.write("\u0097\2\u0c14\u0c15\7\3\2\2\u0c15\u0c17\5\u012c\u0097") - buf.write("\2\u0c16\u0c14\3\2\2\2\u0c17\u0c18\3\2\2\2\u0c18\u0c16") - buf.write("\3\2\2\2\u0c18\u0c19\3\2\2\2\u0c19\u0c1a\3\2\2\2\u0c1a") - buf.write("\u0c1b\7\6\2\2\u0c1b\u0c7d\3\2\2\2\u0c1c\u0c1d\7\5\2\2") - buf.write("\u0c1d\u0c1e\5\u0098M\2\u0c1e\u0c1f\7\6\2\2\u0c1f\u0c7d") - buf.write("\3\2\2\2\u0c20\u0c21\5\u0178\u00bd\2\u0c21\u0c2d\7\5\2") - buf.write("\2\u0c22\u0c24\5\u0100\u0081\2\u0c23\u0c22\3\2\2\2\u0c23") - buf.write("\u0c24\3\2\2\2\u0c24\u0c25\3\2\2\2\u0c25\u0c2a\5\u0136") - buf.write("\u009c\2\u0c26\u0c27\7\3\2\2\u0c27\u0c29\5\u0136\u009c") - buf.write("\2\u0c28\u0c26\3\2\2\2\u0c29\u0c2c\3\2\2\2\u0c2a\u0c28") - buf.write("\3\2\2\2\u0c2a\u0c2b\3\2\2\2\u0c2b\u0c2e\3\2\2\2\u0c2c") - buf.write("\u0c2a\3\2\2\2\u0c2d\u0c23\3\2\2\2\u0c2d\u0c2e\3\2\2\2") - buf.write("\u0c2e\u0c2f\3\2\2\2\u0c2f\u0c36\7\6\2\2\u0c30\u0c31\7") - buf.write("{\2\2\u0c31\u0c32\7\5\2\2\u0c32\u0c33\7\u0123\2\2\u0c33") - buf.write("\u0c34\5\u0138\u009d\2\u0c34\u0c35\7\6\2\2\u0c35\u0c37") - buf.write("\3\2\2\2\u0c36\u0c30\3\2\2\2\u0c36\u0c37\3\2\2\2\u0c37") - buf.write("\u0c3a\3\2\2\2\u0c38\u0c39\7\u00c5\2\2\u0c39\u0c3b\5\u0170") - buf.write("\u00b9\2\u0c3a\u0c38\3\2\2\2\u0c3a\u0c3b\3\2\2\2\u0c3b") - buf.write("\u0c7d\3\2\2\2\u0c3c\u0c3d\5\u0180\u00c1\2\u0c3d\u0c3e") - buf.write("\7\22\2\2\u0c3e\u0c3f\5\u0136\u009c\2\u0c3f\u0c7d\3\2") - buf.write("\2\2\u0c40\u0c41\7\5\2\2\u0c41\u0c44\5\u0180\u00c1\2\u0c42") - buf.write("\u0c43\7\3\2\2\u0c43\u0c45\5\u0180\u00c1\2\u0c44\u0c42") - buf.write("\3\2\2\2\u0c45\u0c46\3\2\2\2\u0c46\u0c44\3\2\2\2\u0c46") - buf.write("\u0c47\3\2\2\2\u0c47\u0c48\3\2\2\2\u0c48\u0c49\7\6\2\2") - buf.write("\u0c49\u0c4a\7\22\2\2\u0c4a\u0c4b\5\u0136\u009c\2\u0c4b") - buf.write("\u0c7d\3\2\2\2\u0c4c\u0c7d\5\u0180\u00c1\2\u0c4d\u0c4e") - buf.write("\7\5\2\2\u0c4e\u0c4f\5\u0136\u009c\2\u0c4f\u0c50\7\6\2") - buf.write("\2\u0c50\u0c7d\3\2\2\2\u0c51\u0c52\7w\2\2\u0c52\u0c53") - buf.write("\7\5\2\2\u0c53\u0c54\5\u0180\u00c1\2\u0c54\u0c55\7\u0083") - buf.write("\2\2\u0c55\u0c56\5\u013c\u009f\2\u0c56\u0c57\7\6\2\2\u0c57") - buf.write("\u0c7d\3\2\2\2\u0c58\u0c59\t\"\2\2\u0c59\u0c5a\7\5\2\2") - buf.write("\u0c5a\u0c5b\5\u013c\u009f\2\u0c5b\u0c5c\t#\2\2\u0c5c") - buf.write("\u0c5f\5\u013c\u009f\2\u0c5d\u0c5e\t$\2\2\u0c5e\u0c60") - buf.write("\5\u013c\u009f\2\u0c5f\u0c5d\3\2\2\2\u0c5f\u0c60\3\2\2") - buf.write("\2\u0c60\u0c61\3\2\2\2\u0c61\u0c62\7\6\2\2\u0c62\u0c7d") - buf.write("\3\2\2\2\u0c63\u0c64\7\u010f\2\2\u0c64\u0c66\7\5\2\2\u0c65") - buf.write("\u0c67\t%\2\2\u0c66\u0c65\3\2\2\2\u0c66\u0c67\3\2\2\2") - buf.write("\u0c67\u0c69\3\2\2\2\u0c68\u0c6a\5\u013c\u009f\2\u0c69") - buf.write("\u0c68\3\2\2\2\u0c69\u0c6a\3\2\2\2\u0c6a\u0c6b\3\2\2\2") - buf.write("\u0c6b\u0c6c\7\u0083\2\2\u0c6c\u0c6d\5\u013c\u009f\2\u0c6d") - buf.write("\u0c6e\7\6\2\2\u0c6e\u0c7d\3\2\2\2\u0c6f\u0c70\7\u00c7") - buf.write("\2\2\u0c70\u0c71\7\5\2\2\u0c71\u0c72\5\u013c\u009f\2\u0c72") - buf.write("\u0c73\7\u00ce\2\2\u0c73\u0c74\5\u013c\u009f\2\u0c74\u0c75") - buf.write("\7\u0083\2\2\u0c75\u0c78\5\u013c\u009f\2\u0c76\u0c77\7") - buf.write("\177\2\2\u0c77\u0c79\5\u013c\u009f\2\u0c78\u0c76\3\2\2") - buf.write("\2\u0c78\u0c79\3\2\2\2\u0c79\u0c7a\3\2\2\2\u0c7a\u0c7b") - buf.write("\7\6\2\2\u0c7b\u0c7d\3\2\2\2\u0c7c\u0bc4\3\2\2\2\u0c7c") - buf.write("\u0bc6\3\2\2\2\u0c7c\u0bd2\3\2\2\2\u0c7c\u0bdf\3\2\2\2") - buf.write("\u0c7c\u0be6\3\2\2\2\u0c7c\u0bf3\3\2\2\2\u0c7c\u0bfc\3") - buf.write("\2\2\2\u0c7c\u0c05\3\2\2\2\u0c7c\u0c0c\3\2\2\2\u0c7c\u0c0d") - buf.write("\3\2\2\2\u0c7c\u0c0e\3\2\2\2\u0c7c\u0c12\3\2\2\2\u0c7c") - buf.write("\u0c1c\3\2\2\2\u0c7c\u0c20\3\2\2\2\u0c7c\u0c3c\3\2\2\2") - buf.write("\u0c7c\u0c40\3\2\2\2\u0c7c\u0c4c\3\2\2\2\u0c7c\u0c4d\3") - buf.write("\2\2\2\u0c7c\u0c51\3\2\2\2\u0c7c\u0c58\3\2\2\2\u0c7c\u0c63") - buf.write("\3\2\2\2\u0c7c\u0c6f\3\2\2\2\u0c7d\u0c88\3\2\2\2\u0c7e") - buf.write("\u0c7f\f\n\2\2\u0c7f\u0c80\7\b\2\2\u0c80\u0c81\5\u013c") - buf.write("\u009f\2\u0c81\u0c82\7\t\2\2\u0c82\u0c87\3\2\2\2\u0c83") - buf.write("\u0c84\f\b\2\2\u0c84\u0c85\7\7\2\2\u0c85\u0c87\5\u0180") - buf.write("\u00c1\2\u0c86\u0c7e\3\2\2\2\u0c86\u0c83\3\2\2\2\u0c87") - buf.write("\u0c8a\3\2\2\2\u0c88\u0c86\3\2\2\2\u0c88\u0c89\3\2\2\2") - buf.write("\u0c89\u013f\3\2\2\2\u0c8a\u0c88\3\2\2\2\u0c8b\u0c98\7") - buf.write("\u00b9\2\2\u0c8c\u0c98\5\u014c\u00a7\2\u0c8d\u0c8e\5\u0180") - buf.write("\u00c1\2\u0c8e\u0c8f\7\u013b\2\2\u0c8f\u0c98\3\2\2\2\u0c90") - buf.write("\u0c98\5\u0186\u00c4\2\u0c91\u0c98\5\u014a\u00a6\2\u0c92") - buf.write("\u0c94\7\u013b\2\2\u0c93\u0c92\3\2\2\2\u0c94\u0c95\3\2") - buf.write("\2\2\u0c95\u0c93\3\2\2\2\u0c95\u0c96\3\2\2\2\u0c96\u0c98") - buf.write("\3\2\2\2\u0c97\u0c8b\3\2\2\2\u0c97\u0c8c\3\2\2\2\u0c97") - buf.write("\u0c8d\3\2\2\2\u0c97\u0c90\3\2\2\2\u0c97\u0c91\3\2\2\2") - buf.write("\u0c97\u0c93\3\2\2\2\u0c98\u0141\3\2\2\2\u0c99\u0ca2\5") - buf.write("\u0144\u00a3\2\u0c9a\u0ca2\7\u012a\2\2\u0c9b\u0ca2\7\u012b") - buf.write("\2\2\u0c9c\u0ca2\7\u012c\2\2\u0c9d\u0ca2\7\u012d\2\2\u0c9e") - buf.write("\u0ca2\7\u012e\2\2\u0c9f\u0ca2\7\u012f\2\2\u0ca0\u0ca2") - buf.write("\7\u0129\2\2\u0ca1\u0c99\3\2\2\2\u0ca1\u0c9a\3\2\2\2\u0ca1") - buf.write("\u0c9b\3\2\2\2\u0ca1\u0c9c\3\2\2\2\u0ca1\u0c9d\3\2\2\2") - buf.write("\u0ca1\u0c9e\3\2\2\2\u0ca1\u0c9f\3\2\2\2\u0ca1\u0ca0\3") - buf.write("\2\2\2\u0ca2\u0143\3\2\2\2\u0ca3\u0ca4\t&\2\2\u0ca4\u0145") - buf.write("\3\2\2\2\u0ca5\u0ca6\t\'\2\2\u0ca6\u0147\3\2\2\2\u0ca7") - buf.write("\u0ca8\t(\2\2\u0ca8\u0149\3\2\2\2\u0ca9\u0caa\t)\2\2\u0caa") - buf.write("\u014b\3\2\2\2\u0cab\u0cae\7\u0098\2\2\u0cac\u0caf\5\u014e") - buf.write("\u00a8\2\u0cad\u0caf\5\u0152\u00aa\2\u0cae\u0cac\3\2\2") - buf.write("\2\u0cae\u0cad\3\2\2\2\u0cae\u0caf\3\2\2\2\u0caf\u014d") - buf.write("\3\2\2\2\u0cb0\u0cb2\5\u0150\u00a9\2\u0cb1\u0cb3\5\u0154") - buf.write("\u00ab\2\u0cb2\u0cb1\3\2\2\2\u0cb2\u0cb3\3\2\2\2\u0cb3") - buf.write("\u014f\3\2\2\2\u0cb4\u0cb5\5\u0156\u00ac\2\u0cb5\u0cb6") - buf.write("\5\u0158\u00ad\2\u0cb6\u0cb8\3\2\2\2\u0cb7\u0cb4\3\2\2") - buf.write("\2\u0cb8\u0cb9\3\2\2\2\u0cb9\u0cb7\3\2\2\2\u0cb9\u0cba") - buf.write("\3\2\2\2\u0cba\u0151\3\2\2\2\u0cbb\u0cbe\5\u0154\u00ab") - buf.write("\2\u0cbc\u0cbf\5\u0150\u00a9\2\u0cbd\u0cbf\5\u0154\u00ab") - buf.write("\2\u0cbe\u0cbc\3\2\2\2\u0cbe\u0cbd\3\2\2\2\u0cbe\u0cbf") - buf.write("\3\2\2\2\u0cbf\u0153\3\2\2\2\u0cc0\u0cc1\5\u0156\u00ac") - buf.write("\2\u0cc1\u0cc2\5\u0158\u00ad\2\u0cc2\u0cc3\7\u0109\2\2") - buf.write("\u0cc3\u0cc4\5\u0158\u00ad\2\u0cc4\u0155\3\2\2\2\u0cc5") - buf.write("\u0cc7\t*\2\2\u0cc6\u0cc5\3\2\2\2\u0cc6\u0cc7\3\2\2\2") - buf.write("\u0cc7\u0cc8\3\2\2\2\u0cc8\u0ccb\t\33\2\2\u0cc9\u0ccb") - buf.write("\7\u013b\2\2\u0cca\u0cc6\3\2\2\2\u0cca\u0cc9\3\2\2\2\u0ccb") - buf.write("\u0157\3\2\2\2\u0ccc\u0cd4\7_\2\2\u0ccd\u0cd4\7\u008c") - buf.write("\2\2\u0cce\u0cd4\7\u00b1\2\2\u0ccf\u0cd4\7\u00b2\2\2\u0cd0") - buf.write("\u0cd4\7\u00ec\2\2\u0cd1\u0cd4\7\u0126\2\2\u0cd2\u0cd4") - buf.write("\5\u0180\u00c1\2\u0cd3\u0ccc\3\2\2\2\u0cd3\u0ccd\3\2\2") - buf.write("\2\u0cd3\u0cce\3\2\2\2\u0cd3\u0ccf\3\2\2\2\u0cd3\u0cd0") - buf.write("\3\2\2\2\u0cd3\u0cd1\3\2\2\2\u0cd3\u0cd2\3\2\2\2\u0cd4") - buf.write("\u0159\3\2\2\2\u0cd5\u0cd9\7}\2\2\u0cd6\u0cd7\7,\2\2\u0cd7") - buf.write("\u0cd9\5\u017c\u00bf\2\u0cd8\u0cd5\3\2\2\2\u0cd8\u0cd6") - buf.write("\3\2\2\2\u0cd9\u015b\3\2\2\2\u0cda\u0cdb\7\64\2\2\u0cdb") - buf.write("\u0cdc\7\u012c\2\2\u0cdc\u0cdd\5\u015c\u00af\2\u0cdd\u0cde") - buf.write("\7\u012e\2\2\u0cde\u0cfd\3\2\2\2\u0cdf\u0ce0\7\u00ae\2") - buf.write("\2\u0ce0\u0ce1\7\u012c\2\2\u0ce1\u0ce2\5\u015c\u00af\2") - buf.write("\u0ce2\u0ce3\7\3\2\2\u0ce3\u0ce4\5\u015c\u00af\2\u0ce4") - buf.write("\u0ce5\7\u012e\2\2\u0ce5\u0cfd\3\2\2\2\u0ce6\u0ced\7\u00ff") - buf.write("\2\2\u0ce7\u0ce9\7\u012c\2\2\u0ce8\u0cea\5\u0166\u00b4") - buf.write("\2\u0ce9\u0ce8\3\2\2\2\u0ce9\u0cea\3\2\2\2\u0cea\u0ceb") - buf.write("\3\2\2\2\u0ceb\u0cee\7\u012e\2\2\u0cec\u0cee\7\u012a\2") - buf.write("\2\u0ced\u0ce7\3\2\2\2\u0ced\u0cec\3\2\2\2\u0cee\u0cfd") - buf.write("\3\2\2\2\u0cef\u0cfa\5\u0180\u00c1\2\u0cf0\u0cf1\7\5\2") - buf.write("\2\u0cf1\u0cf6\7\u013f\2\2\u0cf2\u0cf3\7\3\2\2\u0cf3\u0cf5") - buf.write("\7\u013f\2\2\u0cf4\u0cf2\3\2\2\2\u0cf5\u0cf8\3\2\2\2\u0cf6") - buf.write("\u0cf4\3\2\2\2\u0cf6\u0cf7\3\2\2\2\u0cf7\u0cf9\3\2\2\2") - buf.write("\u0cf8\u0cf6\3\2\2\2\u0cf9\u0cfb\7\6\2\2\u0cfa\u0cf0\3") - buf.write("\2\2\2\u0cfa\u0cfb\3\2\2\2\u0cfb\u0cfd\3\2\2\2\u0cfc\u0cda") - buf.write("\3\2\2\2\u0cfc\u0cdf\3\2\2\2\u0cfc\u0ce6\3\2\2\2\u0cfc") - buf.write("\u0cef\3\2\2\2\u0cfd\u015d\3\2\2\2\u0cfe\u0d03\5\u0160") - buf.write("\u00b1\2\u0cff\u0d00\7\3\2\2\u0d00\u0d02\5\u0160\u00b1") - buf.write("\2\u0d01\u0cff\3\2\2\2\u0d02\u0d05\3\2\2\2\u0d03\u0d01") - buf.write("\3\2\2\2\u0d03\u0d04\3\2\2\2\u0d04\u015f\3\2\2\2\u0d05") - buf.write("\u0d03\3\2\2\2\u0d06\u0d07\5\u0126\u0094\2\u0d07\u0d0a") - buf.write("\5\u015c\u00af\2\u0d08\u0d09\7\u00b8\2\2\u0d09\u0d0b\7") - buf.write("\u00b9\2\2\u0d0a\u0d08\3\2\2\2\u0d0a\u0d0b\3\2\2\2\u0d0b") - buf.write("\u0d0d\3\2\2\2\u0d0c\u0d0e\5\u0096L\2\u0d0d\u0d0c\3\2") - buf.write("\2\2\u0d0d\u0d0e\3\2\2\2\u0d0e\u0d10\3\2\2\2\u0d0f\u0d11") - buf.write("\5\u015a\u00ae\2\u0d10\u0d0f\3\2\2\2\u0d10\u0d11\3\2\2") - buf.write("\2\u0d11\u0161\3\2\2\2\u0d12\u0d17\5\u0164\u00b3\2\u0d13") - buf.write("\u0d14\7\3\2\2\u0d14\u0d16\5\u0164\u00b3\2\u0d15\u0d13") - buf.write("\3\2\2\2\u0d16\u0d19\3\2\2\2\u0d17\u0d15\3\2\2\2\u0d17") - buf.write("\u0d18\3\2\2\2\u0d18\u0163\3\2\2\2\u0d19\u0d17\3\2\2\2") - buf.write("\u0d1a\u0d1b\5\u017c\u00bf\2\u0d1b\u0d1e\5\u015c\u00af") - buf.write("\2\u0d1c\u0d1d\7\u00b8\2\2\u0d1d\u0d1f\7\u00b9\2\2\u0d1e") - buf.write("\u0d1c\3\2\2\2\u0d1e\u0d1f\3\2\2\2\u0d1f\u0d21\3\2\2\2") - buf.write("\u0d20\u0d22\5\u0096L\2\u0d21\u0d20\3\2\2\2\u0d21\u0d22") - buf.write("\3\2\2\2\u0d22\u0165\3\2\2\2\u0d23\u0d28\5\u0168\u00b5") - buf.write("\2\u0d24\u0d25\7\3\2\2\u0d25\u0d27\5\u0168\u00b5\2\u0d26") - buf.write("\u0d24\3\2\2\2\u0d27\u0d2a\3\2\2\2\u0d28\u0d26\3\2\2\2") - buf.write("\u0d28\u0d29\3\2\2\2\u0d29\u0167\3\2\2\2\u0d2a\u0d28\3") - buf.write("\2\2\2\u0d2b\u0d2c\5\u0180\u00c1\2\u0d2c\u0d2d\7\4\2\2") - buf.write("\u0d2d\u0d30\5\u015c\u00af\2\u0d2e\u0d2f\7\u00b8\2\2\u0d2f") - buf.write("\u0d31\7\u00b9\2\2\u0d30\u0d2e\3\2\2\2\u0d30\u0d31\3\2") - buf.write("\2\2\u0d31\u0d33\3\2\2\2\u0d32\u0d34\5\u0096L\2\u0d33") - buf.write("\u0d32\3\2\2\2\u0d33\u0d34\3\2\2\2\u0d34\u0169\3\2\2\2") - buf.write("\u0d35\u0d36\7\u0122\2\2\u0d36\u0d37\5\u0136\u009c\2\u0d37") - buf.write("\u0d38\7\u0108\2\2\u0d38\u0d39\5\u0136\u009c\2\u0d39\u016b") - buf.write("\3\2\2\2\u0d3a\u0d3b\7\u0124\2\2\u0d3b\u0d40\5\u016e\u00b8") - buf.write("\2\u0d3c\u0d3d\7\3\2\2\u0d3d\u0d3f\5\u016e\u00b8\2\u0d3e") - buf.write("\u0d3c\3\2\2\2\u0d3f\u0d42\3\2\2\2\u0d40\u0d3e\3\2\2\2") - buf.write("\u0d40\u0d41\3\2\2\2\u0d41\u016d\3\2\2\2\u0d42\u0d40\3") - buf.write("\2\2\2\u0d43\u0d44\5\u017c\u00bf\2\u0d44\u0d45\7\65\2") - buf.write("\2\u0d45\u0d46\5\u0170\u00b9\2\u0d46\u016f\3\2\2\2\u0d47") - buf.write("\u0d76\5\u017c\u00bf\2\u0d48\u0d49\7\5\2\2\u0d49\u0d4a") - buf.write("\5\u017c\u00bf\2\u0d4a\u0d4b\7\6\2\2\u0d4b\u0d76\3\2\2") - buf.write("\2\u0d4c\u0d6f\7\5\2\2\u0d4d\u0d4e\7E\2\2\u0d4e\u0d4f") - buf.write("\7=\2\2\u0d4f\u0d54\5\u0136\u009c\2\u0d50\u0d51\7\3\2") - buf.write("\2\u0d51\u0d53\5\u0136\u009c\2\u0d52\u0d50\3\2\2\2\u0d53") - buf.write("\u0d56\3\2\2\2\u0d54\u0d52\3\2\2\2\u0d54\u0d55\3\2\2\2") - buf.write("\u0d55\u0d70\3\2\2\2\u0d56\u0d54\3\2\2\2\u0d57\u0d58\t") - buf.write("+\2\2\u0d58\u0d59\7=\2\2\u0d59\u0d5e\5\u0136\u009c\2\u0d5a") - buf.write("\u0d5b\7\3\2\2\u0d5b\u0d5d\5\u0136\u009c\2\u0d5c\u0d5a") - buf.write("\3\2\2\2\u0d5d\u0d60\3\2\2\2\u0d5e\u0d5c\3\2\2\2\u0d5e") - buf.write("\u0d5f\3\2\2\2\u0d5f\u0d62\3\2\2\2\u0d60\u0d5e\3\2\2\2") - buf.write("\u0d61\u0d57\3\2\2\2\u0d61\u0d62\3\2\2\2\u0d62\u0d6d\3") - buf.write("\2\2\2\u0d63\u0d64\t,\2\2\u0d64\u0d65\7=\2\2\u0d65\u0d6a") - buf.write("\5\u00ceh\2\u0d66\u0d67\7\3\2\2\u0d67\u0d69\5\u00ceh\2") - buf.write("\u0d68\u0d66\3\2\2\2\u0d69\u0d6c\3\2\2\2\u0d6a\u0d68\3") - buf.write("\2\2\2\u0d6a\u0d6b\3\2\2\2\u0d6b\u0d6e\3\2\2\2\u0d6c\u0d6a") - buf.write("\3\2\2\2\u0d6d\u0d63\3\2\2\2\u0d6d\u0d6e\3\2\2\2\u0d6e") - buf.write("\u0d70\3\2\2\2\u0d6f\u0d4d\3\2\2\2\u0d6f\u0d61\3\2\2\2") - buf.write("\u0d70\u0d72\3\2\2\2\u0d71\u0d73\5\u0172\u00ba\2\u0d72") - buf.write("\u0d71\3\2\2\2\u0d72\u0d73\3\2\2\2\u0d73\u0d74\3\2\2\2") - buf.write("\u0d74\u0d76\7\6\2\2\u0d75\u0d47\3\2\2\2\u0d75\u0d48\3") - buf.write("\2\2\2\u0d75\u0d4c\3\2\2\2\u0d76\u0171\3\2\2\2\u0d77\u0d78") - buf.write("\7\u00d6\2\2\u0d78\u0d88\5\u0174\u00bb\2\u0d79\u0d7a\7") - buf.write("\u00ea\2\2\u0d7a\u0d88\5\u0174\u00bb\2\u0d7b\u0d7c\7\u00d6") - buf.write("\2\2\u0d7c\u0d7d\79\2\2\u0d7d\u0d7e\5\u0174\u00bb\2\u0d7e") - buf.write("\u0d7f\7\60\2\2\u0d7f\u0d80\5\u0174\u00bb\2\u0d80\u0d88") - buf.write("\3\2\2\2\u0d81\u0d82\7\u00ea\2\2\u0d82\u0d83\79\2\2\u0d83") - buf.write("\u0d84\5\u0174\u00bb\2\u0d84\u0d85\7\60\2\2\u0d85\u0d86") - buf.write("\5\u0174\u00bb\2\u0d86\u0d88\3\2\2\2\u0d87\u0d77\3\2\2") - buf.write("\2\u0d87\u0d79\3\2\2\2\u0d87\u0d7b\3\2\2\2\u0d87\u0d81") - buf.write("\3\2\2\2\u0d88\u0173\3\2\2\2\u0d89\u0d8a\7\u0114\2\2\u0d8a") - buf.write("\u0d91\t-\2\2\u0d8b\u0d8c\7W\2\2\u0d8c\u0d91\7\u00e9\2") - buf.write("\2\u0d8d\u0d8e\5\u0136\u009c\2\u0d8e\u0d8f\t-\2\2\u0d8f") - buf.write("\u0d91\3\2\2\2\u0d90\u0d89\3\2\2\2\u0d90\u0d8b\3\2\2\2") - buf.write("\u0d90\u0d8d\3\2\2\2\u0d91\u0175\3\2\2\2\u0d92\u0d97\5") - buf.write("\u017a\u00be\2\u0d93\u0d94\7\3\2\2\u0d94\u0d96\5\u017a") - buf.write("\u00be\2\u0d95\u0d93\3\2\2\2\u0d96\u0d99\3\2\2\2\u0d97") - buf.write("\u0d95\3\2\2\2\u0d97\u0d98\3\2\2\2\u0d98\u0177\3\2\2\2") - buf.write("\u0d99\u0d97\3\2\2\2\u0d9a\u0d9f\5\u017a\u00be\2\u0d9b") - buf.write("\u0d9f\7{\2\2\u0d9c\u0d9f\7\u00a2\2\2\u0d9d\u0d9f\7\u00e3") - buf.write("\2\2\u0d9e\u0d9a\3\2\2\2\u0d9e\u0d9b\3\2\2\2\u0d9e\u0d9c") - buf.write("\3\2\2\2\u0d9e\u0d9d\3\2\2\2\u0d9f\u0179\3\2\2\2\u0da0") - buf.write("\u0da5\5\u0180\u00c1\2\u0da1\u0da2\7\7\2\2\u0da2\u0da4") - buf.write("\5\u0180\u00c1\2\u0da3\u0da1\3\2\2\2\u0da4\u0da7\3\2\2") - buf.write("\2\u0da5\u0da3\3\2\2\2\u0da5\u0da6\3\2\2\2\u0da6\u017b") - buf.write("\3\2\2\2\u0da7\u0da5\3\2\2\2\u0da8\u0da9\5\u0180\u00c1") - buf.write("\2\u0da9\u0daa\5\u017e\u00c0\2\u0daa\u017d\3\2\2\2\u0dab") - buf.write("\u0dac\7\u0131\2\2\u0dac\u0dae\5\u0180\u00c1\2\u0dad\u0dab") - buf.write("\3\2\2\2\u0dae\u0daf\3\2\2\2\u0daf\u0dad\3\2\2\2\u0daf") - buf.write("\u0db0\3\2\2\2\u0db0\u0db3\3\2\2\2\u0db1\u0db3\3\2\2\2") - buf.write("\u0db2\u0dad\3\2\2\2\u0db2\u0db1\3\2\2\2\u0db3\u017f\3") - buf.write("\2\2\2\u0db4\u0db8\5\u0182\u00c2\2\u0db5\u0db6\6\u00c1") - buf.write("\24\2\u0db6\u0db8\5\u018c\u00c7\2\u0db7\u0db4\3\2\2\2") - buf.write("\u0db7\u0db5\3\2\2\2\u0db8\u0181\3\2\2\2\u0db9\u0dc0\7") - buf.write("\u0144\2\2\u0dba\u0dc0\5\u0184\u00c3\2\u0dbb\u0dbc\6\u00c2") - buf.write("\25\2\u0dbc\u0dc0\5\u018a\u00c6\2\u0dbd\u0dbe\6\u00c2") - buf.write("\26\2\u0dbe\u0dc0\5\u018e\u00c8\2\u0dbf\u0db9\3\2\2\2") - buf.write("\u0dbf\u0dba\3\2\2\2\u0dbf\u0dbb\3\2\2\2\u0dbf\u0dbd\3") - buf.write("\2\2\2\u0dc0\u0183\3\2\2\2\u0dc1\u0dc2\7\u0145\2\2\u0dc2") - buf.write("\u0185\3\2\2\2\u0dc3\u0dc5\6\u00c4\27\2\u0dc4\u0dc6\7") - buf.write("\u0131\2\2\u0dc5\u0dc4\3\2\2\2\u0dc5\u0dc6\3\2\2\2\u0dc6") - buf.write("\u0dc7\3\2\2\2\u0dc7\u0deb\7\u0140\2\2\u0dc8\u0dca\6\u00c4") - buf.write("\30\2\u0dc9\u0dcb\7\u0131\2\2\u0dca\u0dc9\3\2\2\2\u0dca") - buf.write("\u0dcb\3\2\2\2\u0dcb\u0dcc\3\2\2\2\u0dcc\u0deb\7\u0141") - buf.write("\2\2\u0dcd\u0dcf\6\u00c4\31\2\u0dce\u0dd0\7\u0131\2\2") - buf.write("\u0dcf\u0dce\3\2\2\2\u0dcf\u0dd0\3\2\2\2\u0dd0\u0dd1\3") - buf.write("\2\2\2\u0dd1\u0deb\t.\2\2\u0dd2\u0dd4\7\u0131\2\2\u0dd3") - buf.write("\u0dd2\3\2\2\2\u0dd3\u0dd4\3\2\2\2\u0dd4\u0dd5\3\2\2\2") - buf.write("\u0dd5\u0deb\7\u013f\2\2\u0dd6\u0dd8\7\u0131\2\2\u0dd7") - buf.write("\u0dd6\3\2\2\2\u0dd7\u0dd8\3\2\2\2\u0dd8\u0dd9\3\2\2\2") - buf.write("\u0dd9\u0deb\7\u013c\2\2\u0dda\u0ddc\7\u0131\2\2\u0ddb") + buf.write("\3\2\2\2\u02d3Q\3\2\2\2\u02d4\u02d2\3\2\2\2\u02d5\u02da") + buf.write("\5T+\2\u02d6\u02d7\7\3\2\2\u02d7\u02d9\5T+\2\u02d8\u02d6") + buf.write("\3\2\2\2\u02d9\u02dc\3\2\2\2\u02da\u02d8\3\2\2\2\u02da") + buf.write("\u02db\3\2\2\2\u02dbS\3\2\2\2\u02dc\u02da\3\2\2\2\u02dd") + buf.write("\u02df\5V,\2\u02de\u02e0\t\7\2\2\u02df\u02de\3\2\2\2\u02df") + buf.write("\u02e0\3\2\2\2\u02e0U\3\2\2\2\u02e1\u02e2\5z>\2\u02e2") + buf.write("W\3\2\2\2\u02e3\u02e8\5Z.\2\u02e4\u02e5\7\3\2\2\u02e5") + buf.write("\u02e7\5Z.\2\u02e6\u02e4\3\2\2\2\u02e7\u02ea\3\2\2\2\u02e8") + buf.write("\u02e6\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9Y\3\2\2\2\u02ea") + buf.write("\u02e8\3\2\2\2\u02eb\u02ee\5^\60\2\u02ec\u02ee\7\u0132") + buf.write("\2\2\u02ed\u02eb\3\2\2\2\u02ed\u02ec\3\2\2\2\u02ee[\3") + buf.write("\2\2\2\u02ef\u02f4\5^\60\2\u02f0\u02f1\7\3\2\2\u02f1\u02f3") + buf.write("\5^\60\2\u02f2\u02f0\3\2\2\2\u02f3\u02f6\3\2\2\2\u02f4") + buf.write("\u02f2\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5]\3\2\2\2\u02f6") + buf.write("\u02f4\3\2\2\2\u02f7\u02f8\5`\61\2\u02f8\u02f9\7\4\2\2") + buf.write("\u02f9\u02fa\5b\62\2\u02fa_\3\2\2\2\u02fb\u02fc\5z>\2") + buf.write("\u02fca\3\2\2\2\u02fd\u0307\5z>\2\u02fe\u02ff\7\b\2\2") + buf.write("\u02ff\u0300\5b\62\2\u0300\u0301\7\t\2\2\u0301\u0307\3") + buf.write("\2\2\2\u0302\u0303\7\n\2\2\u0303\u0304\5\\/\2\u0304\u0305") + buf.write("\7\13\2\2\u0305\u0307\3\2\2\2\u0306\u02fd\3\2\2\2\u0306") + buf.write("\u02fe\3\2\2\2\u0306\u0302\3\2\2\2\u0307c\3\2\2\2\u0308") + buf.write("\u0309\5p9\2\u0309e\3\2\2\2\u030a\u030b\7\n\2\2\u030b") + buf.write("\u030d\5h\65\2\u030c\u030e\7\3\2\2\u030d\u030c\3\2\2\2") + buf.write("\u030d\u030e\3\2\2\2\u030e\u030f\3\2\2\2\u030f\u0310\7") + buf.write("\13\2\2\u0310\u031d\3\2\2\2\u0311\u0312\7\n\2\2\u0312") + buf.write("\u031d\7\13\2\2\u0313\u0314\7\5\2\2\u0314\u0316\5h\65") + buf.write("\2\u0315\u0317\7\3\2\2\u0316\u0315\3\2\2\2\u0316\u0317") + buf.write("\3\2\2\2\u0317\u0318\3\2\2\2\u0318\u0319\7\6\2\2\u0319") + buf.write("\u031d\3\2\2\2\u031a\u031b\7\5\2\2\u031b\u031d\7\6\2\2") + buf.write("\u031c\u030a\3\2\2\2\u031c\u0311\3\2\2\2\u031c\u0313\3") + buf.write("\2\2\2\u031c\u031a\3\2\2\2\u031dg\3\2\2\2\u031e\u0323") + buf.write("\5j\66\2\u031f\u0320\7\3\2\2\u0320\u0322\5j\66\2\u0321") + buf.write("\u031f\3\2\2\2\u0322\u0325\3\2\2\2\u0323\u0321\3\2\2\2") + buf.write("\u0323\u0324\3\2\2\2\u0324i\3\2\2\2\u0325\u0323\3\2\2") + buf.write("\2\u0326\u0327\5l\67\2\u0327\u0328\t\4\2\2\u0328\u0329") + buf.write("\5p9\2\u0329k\3\2\2\2\u032a\u032d\5z>\2\u032b\u032d\5") + buf.write("t;\2\u032c\u032a\3\2\2\2\u032c\u032b\3\2\2\2\u032dm\3") + buf.write("\2\2\2\u032e\u032f\7\b\2\2\u032f\u0334\5p9\2\u0330\u0331") + buf.write("\7\3\2\2\u0331\u0333\5p9\2\u0332\u0330\3\2\2\2\u0333\u0336") + buf.write("\3\2\2\2\u0334\u0332\3\2\2\2\u0334\u0335\3\2\2\2\u0335") + buf.write("\u0338\3\2\2\2\u0336\u0334\3\2\2\2\u0337\u0339\7\3\2\2") + buf.write("\u0338\u0337\3\2\2\2\u0338\u0339\3\2\2\2\u0339\u033a\3") + buf.write("\2\2\2\u033a\u033b\7\t\2\2\u033b\u033f\3\2\2\2\u033c\u033d") + buf.write("\7\b\2\2\u033d\u033f\7\t\2\2\u033e\u032e\3\2\2\2\u033e") + buf.write("\u033c\3\2\2\2\u033fo\3\2\2\2\u0340\u0347\5t;\2\u0341") + buf.write("\u0347\5r:\2\u0342\u0347\5f\64\2\u0343\u0347\5n8\2\u0344") + buf.write("\u0347\5v<\2\u0345\u0347\5x=\2\u0346\u0340\3\2\2\2\u0346") + buf.write("\u0341\3\2\2\2\u0346\u0342\3\2\2\2\u0346\u0343\3\2\2\2") + buf.write("\u0346\u0344\3\2\2\2\u0346\u0345\3\2\2\2\u0347q\3\2\2") + buf.write("\2\u0348\u0349\5\u0188\u00c5\2\u0349s\3\2\2\2\u034a\u034b") + buf.write("\7\u013b\2\2\u034bu\3\2\2\2\u034c\u034d\t\b\2\2\u034d") + buf.write("w\3\2\2\2\u034e\u034f\t\t\2\2\u034fy\3\2\2\2\u0350\u0351") + buf.write("\5\u0182\u00c2\2\u0351{\3\2\2\2\u0352\u0356\5\u008aF\2") + buf.write("\u0353\u0355\7\17\2\2\u0354\u0353\3\2\2\2\u0355\u0358") + buf.write("\3\2\2\2\u0356\u0354\3\2\2\2\u0356\u0357\3\2\2\2\u0357") + buf.write("\u0359\3\2\2\2\u0358\u0356\3\2\2\2\u0359\u035a\7\2\2\3") + buf.write("\u035a}\3\2\2\2\u035b\u035c\5\u012e\u0098\2\u035c\u035d") + buf.write("\7\2\2\3\u035d\177\3\2\2\2\u035e\u035f\5\u012a\u0096\2") + buf.write("\u035f\u0360\7\2\2\3\u0360\u0081\3\2\2\2\u0361\u0362\5") + buf.write("\u0128\u0095\2\u0362\u0363\7\2\2\3\u0363\u0083\3\2\2\2") + buf.write("\u0364\u0365\5\u012c\u0097\2\u0365\u0366\7\2\2\3\u0366") + buf.write("\u0085\3\2\2\2\u0367\u0368\5\u015e\u00b0\2\u0368\u0369") + buf.write("\7\2\2\3\u0369\u0087\3\2\2\2\u036a\u036b\5\u0164\u00b3") + buf.write("\2\u036b\u036c\7\2\2\3\u036c\u0089\3\2\2\2\u036d\u062f") + buf.write("\5\u009aN\2\u036e\u0370\5\u00aaV\2\u036f\u036e\3\2\2\2") + buf.write("\u036f\u0370\3\2\2\2\u0370\u0371\3\2\2\2\u0371\u062f\5") + buf.write("\u00c6d\2\u0372\u0374\7\u011c\2\2\u0373\u0375\7\u00b4") + buf.write("\2\2\u0374\u0373\3\2\2\2\u0374\u0375\3\2\2\2\u0375\u0376") + buf.write("\3\2\2\2\u0376\u062f\5\u0128\u0095\2\u0377\u0378\7T\2") + buf.write("\2\u0378\u037c\5\u00a4S\2\u0379\u037a\7\u008d\2\2\u037a") + buf.write("\u037b\7\u00b8\2\2\u037b\u037d\7r\2\2\u037c\u0379\3\2") + buf.write("\2\2\u037c\u037d\3\2\2\2\u037d\u037e\3\2\2\2\u037e\u0386") + buf.write("\5\u0128\u0095\2\u037f\u0385\5\u0098M\2\u0380\u0385\5") + buf.write("\u0096L\2\u0381\u0382\7\u0125\2\2\u0382\u0383\t\n\2\2") + buf.write("\u0383\u0385\5\u00b2Z\2\u0384\u037f\3\2\2\2\u0384\u0380") + buf.write("\3\2\2\2\u0384\u0381\3\2\2\2\u0385\u0388\3\2\2\2\u0386") + buf.write("\u0384\3\2\2\2\u0386\u0387\3\2\2\2\u0387\u062f\3\2\2\2") + buf.write("\u0388\u0386\3\2\2\2\u0389\u038a\7.\2\2\u038a\u038b\5") + buf.write("\u00a4S\2\u038b\u038c\5\u0128\u0095\2\u038c\u038d\7\u00f3") + buf.write("\2\2\u038d\u038e\t\n\2\2\u038e\u038f\5\u00b2Z\2\u038f") + buf.write("\u062f\3\2\2\2\u0390\u0391\7.\2\2\u0391\u0392\5\u00a4") + buf.write("S\2\u0392\u0393\5\u0128\u0095\2\u0393\u0394\7\u00f3\2") + buf.write("\2\u0394\u0395\5\u0096L\2\u0395\u062f\3\2\2\2\u0396\u0397") + buf.write("\7k\2\2\u0397\u039a\5\u00a4S\2\u0398\u0399\7\u008d\2\2") + buf.write("\u0399\u039b\7r\2\2\u039a\u0398\3\2\2\2\u039a\u039b\3") + buf.write("\2\2\2\u039b\u039c\3\2\2\2\u039c\u039e\5\u0128\u0095\2") + buf.write("\u039d\u039f\t\13\2\2\u039e\u039d\3\2\2\2\u039e\u039f") + buf.write("\3\2\2\2\u039f\u062f\3\2\2\2\u03a0\u03a1\7\u00f6\2\2\u03a1") + buf.write("\u03a4\t\f\2\2\u03a2\u03a3\t\r\2\2\u03a3\u03a5\5\u0128") + buf.write("\u0095\2\u03a4\u03a2\3\2\2\2\u03a4\u03a5\3\2\2\2\u03a5") + buf.write("\u03aa\3\2\2\2\u03a6\u03a8\7\u00a3\2\2\u03a7\u03a6\3\2") + buf.write("\2\2\u03a7\u03a8\3\2\2\2\u03a8\u03a9\3\2\2\2\u03a9\u03ab") + buf.write("\7\u013b\2\2\u03aa\u03a7\3\2\2\2\u03aa\u03ab\3\2\2\2\u03ab") + buf.write("\u062f\3\2\2\2\u03ac\u03b1\5\u008eH\2\u03ad\u03ae\7\5") + buf.write("\2\2\u03ae\u03af\5\u0164\u00b3\2\u03af\u03b0\7\6\2\2\u03b0") + buf.write("\u03b2\3\2\2\2\u03b1\u03ad\3\2\2\2\u03b1\u03b2\3\2\2\2") + buf.write("\u03b2\u03b3\3\2\2\2\u03b3\u03b4\5\u00aeX\2\u03b4\u03b9") + buf.write("\5\u00b0Y\2\u03b5\u03b7\7\65\2\2\u03b6\u03b5\3\2\2\2\u03b6") + buf.write("\u03b7\3\2\2\2\u03b7\u03b8\3\2\2\2\u03b8\u03ba\5\u009a") + buf.write("N\2\u03b9\u03b6\3\2\2\2\u03b9\u03ba\3\2\2\2\u03ba\u062f") + buf.write("\3\2\2\2\u03bb\u03c0\5\u008eH\2\u03bc\u03bd\7\5\2\2\u03bd") + buf.write("\u03be\5\u0164\u00b3\2\u03be\u03bf\7\6\2\2\u03bf\u03c1") + buf.write("\3\2\2\2\u03c0\u03bc\3\2\2\2\u03c0\u03c1\3\2\2\2\u03c1") + buf.write("\u03d7\3\2\2\2\u03c2\u03d6\5\u0098M\2\u03c3\u03c4\7\u00ca") + buf.write("\2\2\u03c4\u03c5\7=\2\2\u03c5\u03c6\7\5\2\2\u03c6\u03c7") + buf.write("\5\u0164\u00b3\2\u03c7\u03c8\7\6\2\2\u03c8\u03cd\3\2\2") + buf.write("\2\u03c9\u03ca\7\u00ca\2\2\u03ca\u03cb\7=\2\2\u03cb\u03cd") + buf.write("\5\u0110\u0089\2\u03cc\u03c3\3\2\2\2\u03cc\u03c9\3\2\2") + buf.write("\2\u03cd\u03d6\3\2\2\2\u03ce\u03d6\5\u0092J\2\u03cf\u03d6") + buf.write("\5\u0094K\2\u03d0\u03d6\5\u0124\u0093\2\u03d1\u03d6\5") + buf.write("\u00be`\2\u03d2\u03d6\5\u0096L\2\u03d3\u03d4\7\u0105\2") + buf.write("\2\u03d4\u03d6\5\u00b2Z\2\u03d5\u03c2\3\2\2\2\u03d5\u03cc") + buf.write("\3\2\2\2\u03d5\u03ce\3\2\2\2\u03d5\u03cf\3\2\2\2\u03d5") + buf.write("\u03d0\3\2\2\2\u03d5\u03d1\3\2\2\2\u03d5\u03d2\3\2\2\2") + buf.write("\u03d5\u03d3\3\2\2\2\u03d6\u03d9\3\2\2\2\u03d7\u03d5\3") + buf.write("\2\2\2\u03d7\u03d8\3\2\2\2\u03d8\u03de\3\2\2\2\u03d9\u03d7") + buf.write("\3\2\2\2\u03da\u03dc\7\65\2\2\u03db\u03da\3\2\2\2\u03db") + buf.write("\u03dc\3\2\2\2\u03dc\u03dd\3\2\2\2\u03dd\u03df\5\u009a") + buf.write("N\2\u03de\u03db\3\2\2\2\u03de\u03df\3\2\2\2\u03df\u062f") + buf.write("\3\2\2\2\u03e0\u03e1\7T\2\2\u03e1\u03e5\7\u0102\2\2\u03e2") + buf.write("\u03e3\7\u008d\2\2\u03e3\u03e4\7\u00b8\2\2\u03e4\u03e6") + buf.write("\7r\2\2\u03e5\u03e2\3\2\2\2\u03e5\u03e6\3\2\2\2\u03e6") + buf.write("\u03e7\3\2\2\2\u03e7\u03e8\5\u012a\u0096\2\u03e8\u03e9") + buf.write("\7\u00a3\2\2\u03e9\u03f2\5\u012a\u0096\2\u03ea\u03f1\5") + buf.write("\u00aeX\2\u03eb\u03f1\5\u0124\u0093\2\u03ec\u03f1\5\u00be") + buf.write("`\2\u03ed\u03f1\5\u0096L\2\u03ee\u03ef\7\u0105\2\2\u03ef") + buf.write("\u03f1\5\u00b2Z\2\u03f0\u03ea\3\2\2\2\u03f0\u03eb\3\2") + buf.write("\2\2\u03f0\u03ec\3\2\2\2\u03f0\u03ed\3\2\2\2\u03f0\u03ee") + buf.write("\3\2\2\2\u03f1\u03f4\3\2\2\2\u03f2\u03f0\3\2\2\2\u03f2") + buf.write("\u03f3\3\2\2\2\u03f3\u062f\3\2\2\2\u03f4\u03f2\3\2\2\2") + buf.write("\u03f5\u03fa\5\u0090I\2\u03f6\u03f7\7\5\2\2\u03f7\u03f8") + buf.write("\5\u0164\u00b3\2\u03f8\u03f9\7\6\2\2\u03f9\u03fb\3\2\2") + buf.write("\2\u03fa\u03f6\3\2\2\2\u03fa\u03fb\3\2\2\2\u03fb\u03fc") + buf.write("\3\2\2\2\u03fc\u03fd\5\u00aeX\2\u03fd\u0402\5\u00b0Y\2") + buf.write("\u03fe\u0400\7\65\2\2\u03ff\u03fe\3\2\2\2\u03ff\u0400") + buf.write("\3\2\2\2\u0400\u0401\3\2\2\2\u0401\u0403\5\u009aN\2\u0402") + buf.write("\u03ff\3\2\2\2\u0402\u0403\3\2\2\2\u0403\u062f\3\2\2\2") + buf.write("\u0404\u0405\7/\2\2\u0405\u0406\7\u0102\2\2\u0406\u0408") + buf.write("\5\u0128\u0095\2\u0407\u0409\5\u00a0Q\2\u0408\u0407\3") + buf.write("\2\2\2\u0408\u0409\3\2\2\2\u0409\u040a\3\2\2\2\u040a\u040b") + buf.write("\7P\2\2\u040b\u0413\7\u00fc\2\2\u040c\u0414\5\u0182\u00c2") + buf.write("\2\u040d\u040e\7\177\2\2\u040e\u040f\7K\2\2\u040f\u0414") + buf.write("\5\u0112\u008a\2\u0410\u0411\7\177\2\2\u0411\u0412\7-") + buf.write("\2\2\u0412\u0414\7K\2\2\u0413\u040c\3\2\2\2\u0413\u040d") + buf.write("\3\2\2\2\u0413\u0410\3\2\2\2\u0413\u0414\3\2\2\2\u0414") + buf.write("\u062f\3\2\2\2\u0415\u0416\7.\2\2\u0416\u0417\7\u0102") + buf.write("\2\2\u0417\u0418\5\u0128\u0095\2\u0418\u0419\7+\2\2\u0419") + buf.write("\u041a\t\16\2\2\u041a\u041b\5\u0160\u00b1\2\u041b\u062f") + buf.write("\3\2\2\2\u041c\u041d\7.\2\2\u041d\u041e\7\u0102\2\2\u041e") + buf.write("\u041f\5\u0128\u0095\2\u041f\u0420\7+\2\2\u0420\u0421") + buf.write("\t\16\2\2\u0421\u0422\7\5\2\2\u0422\u0423\5\u0160\u00b1") + buf.write("\2\u0423\u0424\7\6\2\2\u0424\u062f\3\2\2\2\u0425\u0426") + buf.write("\7.\2\2\u0426\u0427\7\u0102\2\2\u0427\u0428\5\u0128\u0095") + buf.write("\2\u0428\u0429\7\u00dd\2\2\u0429\u042a\7J\2\2\u042a\u042b") + buf.write("\5\u0128\u0095\2\u042b\u042c\7\u0109\2\2\u042c\u042d\5") + buf.write("\u017e\u00c0\2\u042d\u062f\3\2\2\2\u042e\u042f\7.\2\2") + buf.write("\u042f\u0430\7\u0102\2\2\u0430\u0431\5\u0128\u0095\2\u0431") + buf.write("\u0432\7k\2\2\u0432\u0433\t\16\2\2\u0433\u0434\7\5\2\2") + buf.write("\u0434\u0435\5\u0126\u0094\2\u0435\u0436\7\6\2\2\u0436") + buf.write("\u062f\3\2\2\2\u0437\u0438\7.\2\2\u0438\u0439\7\u0102") + buf.write("\2\2\u0439\u043a\5\u0128\u0095\2\u043a\u043b\7k\2\2\u043b") + buf.write("\u043c\t\16\2\2\u043c\u043d\5\u0126\u0094\2\u043d\u062f") + buf.write("\3\2\2\2\u043e\u043f\7.\2\2\u043f\u0440\t\17\2\2\u0440") + buf.write("\u0441\5\u0128\u0095\2\u0441\u0442\7\u00dd\2\2\u0442\u0443") + buf.write("\7\u0109\2\2\u0443\u0444\5\u0128\u0095\2\u0444\u062f\3") + buf.write("\2\2\2\u0445\u0446\7.\2\2\u0446\u0447\t\17\2\2\u0447\u0448") + buf.write("\5\u0128\u0095\2\u0448\u0449\7\u00f3\2\2\u0449\u044a\7") + buf.write("\u0105\2\2\u044a\u044b\5\u00b2Z\2\u044b\u062f\3\2\2\2") + buf.write("\u044c\u044d\7.\2\2\u044d\u044e\t\17\2\2\u044e\u044f\5") + buf.write("\u0128\u0095\2\u044f\u0450\7\u011a\2\2\u0450\u0453\7\u0105") + buf.write("\2\2\u0451\u0452\7\u008d\2\2\u0452\u0454\7r\2\2\u0453") + buf.write("\u0451\3\2\2\2\u0453\u0454\3\2\2\2\u0454\u0455\3\2\2\2") + buf.write("\u0455\u0456\5\u00b2Z\2\u0456\u062f\3\2\2\2\u0457\u0458") + buf.write("\7.\2\2\u0458\u0459\7\u0102\2\2\u0459\u045a\5\u0128\u0095") + buf.write("\2\u045a\u045c\t\20\2\2\u045b\u045d\7J\2\2\u045c\u045b") + buf.write("\3\2\2\2\u045c\u045d\3\2\2\2\u045d\u045e\3\2\2\2\u045e") + buf.write("\u0460\5\u0128\u0095\2\u045f\u0461\5\u018a\u00c6\2\u0460") + buf.write("\u045f\3\2\2\2\u0460\u0461\3\2\2\2\u0461\u062f\3\2\2\2") + buf.write("\u0462\u0463\7.\2\2\u0463\u0464\7\u0102\2\2\u0464\u0466") + buf.write("\5\u0128\u0095\2\u0465\u0467\5\u00a0Q\2\u0466\u0465\3") + buf.write("\2\2\2\u0466\u0467\3\2\2\2\u0467\u0468\3\2\2\2\u0468\u046a") + buf.write("\7B\2\2\u0469\u046b\7J\2\2\u046a\u0469\3\2\2\2\u046a\u046b") + buf.write("\3\2\2\2\u046b\u046c\3\2\2\2\u046c\u046d\5\u0128\u0095") + buf.write("\2\u046d\u046f\5\u0166\u00b4\2\u046e\u0470\5\u015c\u00af") + buf.write("\2\u046f\u046e\3\2\2\2\u046f\u0470\3\2\2\2\u0470\u062f") + buf.write("\3\2\2\2\u0471\u0472\7.\2\2\u0472\u0473\7\u0102\2\2\u0473") + buf.write("\u0475\5\u0128\u0095\2\u0474\u0476\5\u00a0Q\2\u0475\u0474") + buf.write("\3\2\2\2\u0475\u0476\3\2\2\2\u0476\u0477\3\2\2\2\u0477") + buf.write("\u0478\7\u00df\2\2\u0478\u0479\7K\2\2\u0479\u047a\7\5") + buf.write("\2\2\u047a\u047b\5\u0160\u00b1\2\u047b\u047c\7\6\2\2\u047c") + buf.write("\u062f\3\2\2\2\u047d\u047e\7.\2\2\u047e\u047f\7\u0102") + buf.write("\2\2\u047f\u0481\5\u0128\u0095\2\u0480\u0482\5\u00a0Q") + buf.write("\2\u0481\u0480\3\2\2\2\u0481\u0482\3\2\2\2\u0482\u0483") + buf.write("\3\2\2\2\u0483\u0484\7\u00f3\2\2\u0484\u0485\7\u00f0\2") + buf.write("\2\u0485\u0489\7\u013b\2\2\u0486\u0487\7\u0125\2\2\u0487") + buf.write("\u0488\7\u00f1\2\2\u0488\u048a\5\u00b2Z\2\u0489\u0486") + buf.write("\3\2\2\2\u0489\u048a\3\2\2\2\u048a\u062f\3\2\2\2\u048b") + buf.write("\u048c\7.\2\2\u048c\u048d\7\u0102\2\2\u048d\u048f\5\u0128") + buf.write("\u0095\2\u048e\u0490\5\u00a0Q\2\u048f\u048e\3\2\2\2\u048f") + buf.write("\u0490\3\2\2\2\u0490\u0491\3\2\2\2\u0491\u0492\7\u00f3") + buf.write("\2\2\u0492\u0493\7\u00f1\2\2\u0493\u0494\5\u00b2Z\2\u0494") + buf.write("\u062f\3\2\2\2\u0495\u0496\7.\2\2\u0496\u0497\t\17\2\2") + buf.write("\u0497\u0498\5\u0128\u0095\2\u0498\u049c\7+\2\2\u0499") + buf.write("\u049a\7\u008d\2\2\u049a\u049b\7\u00b8\2\2\u049b\u049d") + buf.write("\7r\2\2\u049c\u0499\3\2\2\2\u049c\u049d\3\2\2\2\u049d") + buf.write("\u049f\3\2\2\2\u049e\u04a0\5\u009eP\2\u049f\u049e\3\2") + buf.write("\2\2\u04a0\u04a1\3\2\2\2\u04a1\u049f\3\2\2\2\u04a1\u04a2") + buf.write("\3\2\2\2\u04a2\u062f\3\2\2\2\u04a3\u04a4\7.\2\2\u04a4") + buf.write("\u04a5\7\u0102\2\2\u04a5\u04a6\5\u0128\u0095\2\u04a6\u04a7") + buf.write("\5\u00a0Q\2\u04a7\u04a8\7\u00dd\2\2\u04a8\u04a9\7\u0109") + buf.write("\2\2\u04a9\u04aa\5\u00a0Q\2\u04aa\u062f\3\2\2\2\u04ab") + buf.write("\u04ac\7.\2\2\u04ac\u04ad\t\17\2\2\u04ad\u04ae\5\u0128") + buf.write("\u0095\2\u04ae\u04b1\7k\2\2\u04af\u04b0\7\u008d\2\2\u04b0") + buf.write("\u04b2\7r\2\2\u04b1\u04af\3\2\2\2\u04b1\u04b2\3\2\2\2") + buf.write("\u04b2\u04b3\3\2\2\2\u04b3\u04b8\5\u00a0Q\2\u04b4\u04b5") + buf.write("\7\3\2\2\u04b5\u04b7\5\u00a0Q\2\u04b6\u04b4\3\2\2\2\u04b7") + buf.write("\u04ba\3\2\2\2\u04b8\u04b6\3\2\2\2\u04b8\u04b9\3\2\2\2") + buf.write("\u04b9\u04bc\3\2\2\2\u04ba\u04b8\3\2\2\2\u04bb\u04bd\7") + buf.write("\u00d4\2\2\u04bc\u04bb\3\2\2\2\u04bc\u04bd\3\2\2\2\u04bd") + buf.write("\u062f\3\2\2\2\u04be\u04bf\7.\2\2\u04bf\u04c0\7\u0102") + buf.write("\2\2\u04c0\u04c2\5\u0128\u0095\2\u04c1\u04c3\5\u00a0Q") + buf.write("\2\u04c2\u04c1\3\2\2\2\u04c2\u04c3\3\2\2\2\u04c3\u04c4") + buf.write("\3\2\2\2\u04c4\u04c5\7\u00f3\2\2\u04c5\u04c6\5\u0096L") + buf.write("\2\u04c6\u062f\3\2\2\2\u04c7\u04c8\7.\2\2\u04c8\u04c9") + buf.write("\7\u0102\2\2\u04c9\u04ca\5\u0128\u0095\2\u04ca\u04cb\7") + buf.write("\u00d9\2\2\u04cb\u04cc\7\u00cb\2\2\u04cc\u062f\3\2\2\2") + buf.write("\u04cd\u04ce\7k\2\2\u04ce\u04d1\7\u0102\2\2\u04cf\u04d0") + buf.write("\7\u008d\2\2\u04d0\u04d2\7r\2\2\u04d1\u04cf\3\2\2\2\u04d1") + buf.write("\u04d2\3\2\2\2\u04d2\u04d3\3\2\2\2\u04d3\u04d5\5\u0128") + buf.write("\u0095\2\u04d4\u04d6\7\u00d4\2\2\u04d5\u04d4\3\2\2\2\u04d5") + buf.write("\u04d6\3\2\2\2\u04d6\u062f\3\2\2\2\u04d7\u04d8\7k\2\2") + buf.write("\u04d8\u04db\7\u0120\2\2\u04d9\u04da\7\u008d\2\2\u04da") + buf.write("\u04dc\7r\2\2\u04db\u04d9\3\2\2\2\u04db\u04dc\3\2\2\2") + buf.write("\u04dc\u04dd\3\2\2\2\u04dd\u062f\5\u0128\u0095\2\u04de") + buf.write("\u04e1\7T\2\2\u04df\u04e0\7\u00c0\2\2\u04e0\u04e2\7\u00df") + buf.write("\2\2\u04e1\u04df\3\2\2\2\u04e1\u04e2\3\2\2\2\u04e2\u04e7") + buf.write("\3\2\2\2\u04e3\u04e5\7\u0087\2\2\u04e4\u04e3\3\2\2\2\u04e4") + buf.write("\u04e5\3\2\2\2\u04e5\u04e6\3\2\2\2\u04e6\u04e8\7\u0106") + buf.write("\2\2\u04e7\u04e4\3\2\2\2\u04e7\u04e8\3\2\2\2\u04e8\u04e9") + buf.write("\3\2\2\2\u04e9\u04ed\7\u0120\2\2\u04ea\u04eb\7\u008d\2") + buf.write("\2\u04eb\u04ec\7\u00b8\2\2\u04ec\u04ee\7r\2\2\u04ed\u04ea") + buf.write("\3\2\2\2\u04ed\u04ee\3\2\2\2\u04ee\u04ef\3\2\2\2\u04ef") + buf.write("\u04f1\5\u0128\u0095\2\u04f0\u04f2\5\u0118\u008d\2\u04f1") + buf.write("\u04f0\3\2\2\2\u04f1\u04f2\3\2\2\2\u04f2\u04fb\3\2\2\2") + buf.write("\u04f3\u04fa\5\u0098M\2\u04f4\u04f5\7\u00ca\2\2\u04f5") + buf.write("\u04f6\7\u00bc\2\2\u04f6\u04fa\5\u0110\u0089\2\u04f7\u04f8") + buf.write("\7\u0105\2\2\u04f8\u04fa\5\u00b2Z\2\u04f9\u04f3\3\2\2") + buf.write("\2\u04f9\u04f4\3\2\2\2\u04f9\u04f7\3\2\2\2\u04fa\u04fd") + buf.write("\3\2\2\2\u04fb\u04f9\3\2\2\2\u04fb\u04fc\3\2\2\2\u04fc") + buf.write("\u04fe\3\2\2\2\u04fd\u04fb\3\2\2\2\u04fe\u04ff\7\65\2") + buf.write("\2\u04ff\u0500\5\u009aN\2\u0500\u062f\3\2\2\2\u0501\u0504") + buf.write("\7T\2\2\u0502\u0503\7\u00c0\2\2\u0503\u0505\7\u00df\2") + buf.write("\2\u0504\u0502\3\2\2\2\u0504\u0505\3\2\2\2\u0505\u0507") + buf.write("\3\2\2\2\u0506\u0508\7\u0087\2\2\u0507\u0506\3\2\2\2\u0507") + buf.write("\u0508\3\2\2\2\u0508\u0509\3\2\2\2\u0509\u050a\7\u0106") + buf.write("\2\2\u050a\u050b\7\u0120\2\2\u050b\u0510\5\u012a\u0096") + buf.write("\2\u050c\u050d\7\5\2\2\u050d\u050e\5\u0164\u00b3\2\u050e") + buf.write("\u050f\7\6\2\2\u050f\u0511\3\2\2\2\u0510\u050c\3\2\2\2") + buf.write("\u0510\u0511\3\2\2\2\u0511\u0512\3\2\2\2\u0512\u0515\5") + buf.write("\u00aeX\2\u0513\u0514\7\u00bf\2\2\u0514\u0516\5\u00b2") + buf.write("Z\2\u0515\u0513\3\2\2\2\u0515\u0516\3\2\2\2\u0516\u062f") + buf.write("\3\2\2\2\u0517\u0518\7.\2\2\u0518\u0519\7\u0120\2\2\u0519") + buf.write("\u051b\5\u0128\u0095\2\u051a\u051c\7\65\2\2\u051b\u051a") + buf.write("\3\2\2\2\u051b\u051c\3\2\2\2\u051c\u051d\3\2\2\2\u051d") + buf.write("\u051e\5\u009aN\2\u051e\u062f\3\2\2\2\u051f\u0522\7T\2") + buf.write("\2\u0520\u0521\7\u00c0\2\2\u0521\u0523\7\u00df\2\2\u0522") + buf.write("\u0520\3\2\2\2\u0522\u0523\3\2\2\2\u0523\u0525\3\2\2\2") + buf.write("\u0524\u0526\7\u0106\2\2\u0525\u0524\3\2\2\2\u0525\u0526") + buf.write("\3\2\2\2\u0526\u0527\3\2\2\2\u0527\u052b\7\u0085\2\2\u0528") + buf.write("\u0529\7\u008d\2\2\u0529\u052a\7\u00b8\2\2\u052a\u052c") + buf.write("\7r\2\2\u052b\u0528\3\2\2\2\u052b\u052c\3\2\2\2\u052c") + buf.write("\u052d\3\2\2\2\u052d\u052e\5\u0128\u0095\2\u052e\u052f") + buf.write("\7\65\2\2\u052f\u0539\7\u013b\2\2\u0530\u0531\7\u011e") + buf.write("\2\2\u0531\u0536\5\u00c4c\2\u0532\u0533\7\3\2\2\u0533") + buf.write("\u0535\5\u00c4c\2\u0534\u0532\3\2\2\2\u0535\u0538\3\2") + buf.write("\2\2\u0536\u0534\3\2\2\2\u0536\u0537\3\2\2\2\u0537\u053a") + buf.write("\3\2\2\2\u0538\u0536\3\2\2\2\u0539\u0530\3\2\2\2\u0539") + buf.write("\u053a\3\2\2\2\u053a\u062f\3\2\2\2\u053b\u053d\7k\2\2") + buf.write("\u053c\u053e\7\u0106\2\2\u053d\u053c\3\2\2\2\u053d\u053e") + buf.write("\3\2\2\2\u053e\u053f\3\2\2\2\u053f\u0542\7\u0085\2\2\u0540") + buf.write("\u0541\7\u008d\2\2\u0541\u0543\7r\2\2\u0542\u0540\3\2") + buf.write("\2\2\u0542\u0543\3\2\2\2\u0543\u0544\3\2\2\2\u0544\u062f") + buf.write("\5\u0128\u0095\2\u0545\u0547\7s\2\2\u0546\u0548\t\21\2") + buf.write("\2\u0547\u0546\3\2\2\2\u0547\u0548\3\2\2\2\u0548\u0549") + buf.write("\3\2\2\2\u0549\u062f\5\u008aF\2\u054a\u054b\7\u00f6\2") + buf.write("\2\u054b\u054e\7\u0103\2\2\u054c\u054d\t\r\2\2\u054d\u054f") + buf.write("\5\u0128\u0095\2\u054e\u054c\3\2\2\2\u054e\u054f\3\2\2") + buf.write("\2\u054f\u0554\3\2\2\2\u0550\u0552\7\u00a3\2\2\u0551\u0550") + buf.write("\3\2\2\2\u0551\u0552\3\2\2\2\u0552\u0553\3\2\2\2\u0553") + buf.write("\u0555\7\u013b\2\2\u0554\u0551\3\2\2\2\u0554\u0555\3\2") + buf.write("\2\2\u0555\u062f\3\2\2\2\u0556\u0557\7\u00f6\2\2\u0557") + buf.write("\u0558\7\u0102\2\2\u0558\u055b\7u\2\2\u0559\u055a\t\r") + buf.write("\2\2\u055a\u055c\5\u0128\u0095\2\u055b\u0559\3\2\2\2\u055b") + buf.write("\u055c\3\2\2\2\u055c\u055d\3\2\2\2\u055d\u055e\7\u00a3") + buf.write("\2\2\u055e\u0560\7\u013b\2\2\u055f\u0561\5\u00a0Q\2\u0560") + buf.write("\u055f\3\2\2\2\u0560\u0561\3\2\2\2\u0561\u062f\3\2\2\2") + buf.write("\u0562\u0563\7\u00f6\2\2\u0563\u0564\7\u0105\2\2\u0564") + buf.write("\u0569\5\u0128\u0095\2\u0565\u0566\7\5\2\2\u0566\u0567") + buf.write("\5\u00b6\\\2\u0567\u0568\7\6\2\2\u0568\u056a\3\2\2\2\u0569") + buf.write("\u0565\3\2\2\2\u0569\u056a\3\2\2\2\u056a\u062f\3\2\2\2") + buf.write("\u056b\u056c\7\u00f6\2\2\u056c\u056d\7K\2\2\u056d\u056e") + buf.write("\t\r\2\2\u056e\u0571\5\u0128\u0095\2\u056f\u0570\t\r\2") + buf.write("\2\u0570\u0572\5\u0128\u0095\2\u0571\u056f\3\2\2\2\u0571") + buf.write("\u0572\3\2\2\2\u0572\u062f\3\2\2\2\u0573\u0574\7\u00f6") + buf.write("\2\2\u0574\u0577\7\u0121\2\2\u0575\u0576\t\r\2\2\u0576") + buf.write("\u0578\5\u0128\u0095\2\u0577\u0575\3\2\2\2\u0577\u0578") + buf.write("\3\2\2\2\u0578\u057d\3\2\2\2\u0579\u057b\7\u00a3\2\2\u057a") + buf.write("\u0579\3\2\2\2\u057a\u057b\3\2\2\2\u057b\u057c\3\2\2\2") + buf.write("\u057c\u057e\7\u013b\2\2\u057d\u057a\3\2\2\2\u057d\u057e") + buf.write("\3\2\2\2\u057e\u062f\3\2\2\2\u057f\u0580\7\u00f6\2\2\u0580") + buf.write("\u0581\7\u00cb\2\2\u0581\u0583\5\u0128\u0095\2\u0582\u0584") + buf.write("\5\u00a0Q\2\u0583\u0582\3\2\2\2\u0583\u0584\3\2\2\2\u0584") + buf.write("\u062f\3\2\2\2\u0585\u0587\7\u00f6\2\2\u0586\u0588\5\u0182") + buf.write("\u00c2\2\u0587\u0586\3\2\2\2\u0587\u0588\3\2\2\2\u0588") + buf.write("\u0589\3\2\2\2\u0589\u0591\7\u0086\2\2\u058a\u058c\7\u00a3") + buf.write("\2\2\u058b\u058a\3\2\2\2\u058b\u058c\3\2\2\2\u058c\u058f") + buf.write("\3\2\2\2\u058d\u0590\5\u0128\u0095\2\u058e\u0590\7\u013b") + buf.write("\2\2\u058f\u058d\3\2\2\2\u058f\u058e\3\2\2\2\u0590\u0592") + buf.write("\3\2\2\2\u0591\u058b\3\2\2\2\u0591\u0592\3\2\2\2\u0592") + buf.write("\u062f\3\2\2\2\u0593\u0594\7\u00f6\2\2\u0594\u0595\7T") + buf.write("\2\2\u0595\u0596\7\u0102\2\2\u0596\u0599\5\u0128\u0095") + buf.write("\2\u0597\u0598\7\65\2\2\u0598\u059a\7\u00f0\2\2\u0599") + buf.write("\u0597\3\2\2\2\u0599\u059a\3\2\2\2\u059a\u062f\3\2\2\2") + buf.write("\u059b\u059c\7\u00f6\2\2\u059c\u059d\7W\2\2\u059d\u062f") + buf.write("\7\u00b4\2\2\u059e\u059f\t\22\2\2\u059f\u05a1\7\u0085") + buf.write("\2\2\u05a0\u05a2\7u\2\2\u05a1\u05a0\3\2\2\2\u05a1\u05a2") + buf.write("\3\2\2\2\u05a2\u05a3\3\2\2\2\u05a3\u062f\5\u00a6T\2\u05a4") + buf.write("\u05a5\t\22\2\2\u05a5\u05a7\5\u00a4S\2\u05a6\u05a8\7u") + buf.write("\2\2\u05a7\u05a6\3\2\2\2\u05a7\u05a8\3\2\2\2\u05a8\u05a9") + buf.write("\3\2\2\2\u05a9\u05aa\5\u0128\u0095\2\u05aa\u062f\3\2\2") + buf.write("\2\u05ab\u05ad\t\22\2\2\u05ac\u05ae\7\u0102\2\2\u05ad") + buf.write("\u05ac\3\2\2\2\u05ad\u05ae\3\2\2\2\u05ae\u05b0\3\2\2\2") + buf.write("\u05af\u05b1\t\23\2\2\u05b0\u05af\3\2\2\2\u05b0\u05b1") + buf.write("\3\2\2\2\u05b1\u05b2\3\2\2\2\u05b2\u05b4\5\u0128\u0095") + buf.write("\2\u05b3\u05b5\5\u00a0Q\2\u05b4\u05b3\3\2\2\2\u05b4\u05b5") + buf.write("\3\2\2\2\u05b5\u05b7\3\2\2\2\u05b6\u05b8\5\u00a8U\2\u05b7") + buf.write("\u05b6\3\2\2\2\u05b7\u05b8\3\2\2\2\u05b8\u062f\3\2\2\2") + buf.write("\u05b9\u05bb\t\22\2\2\u05ba\u05bc\7\u00d5\2\2\u05bb\u05ba") + buf.write("\3\2\2\2\u05bb\u05bc\3\2\2\2\u05bc\u05bd\3\2\2\2\u05bd") + buf.write("\u062f\5\u009aN\2\u05be\u05bf\7L\2\2\u05bf\u05c0\7\u00bc") + buf.write("\2\2\u05c0\u05c1\5\u00a4S\2\u05c1\u05c2\5\u0128\u0095") + buf.write("\2\u05c2\u05c3\7\u009a\2\2\u05c3\u05c4\t\24\2\2\u05c4") + buf.write("\u062f\3\2\2\2\u05c5\u05c6\7L\2\2\u05c6\u05c7\7\u00bc") + buf.write("\2\2\u05c7\u05c8\7\u0102\2\2\u05c8\u05c9\5\u0128\u0095") + buf.write("\2\u05c9\u05ca\7\u009a\2\2\u05ca\u05cb\t\24\2\2\u05cb") + buf.write("\u062f\3\2\2\2\u05cc\u05cd\7\u00dc\2\2\u05cd\u05ce\7\u0102") + buf.write("\2\2\u05ce\u062f\5\u0128\u0095\2\u05cf\u05d7\7\u00dc\2") + buf.write("\2\u05d0\u05d8\7\u013b\2\2\u05d1\u05d3\13\2\2\2\u05d2") + buf.write("\u05d1\3\2\2\2\u05d3\u05d6\3\2\2\2\u05d4\u05d5\3\2\2\2") + buf.write("\u05d4\u05d2\3\2\2\2\u05d5\u05d8\3\2\2\2\u05d6\u05d4\3") + buf.write("\2\2\2\u05d7\u05d0\3\2\2\2\u05d7\u05d4\3\2\2\2\u05d8\u062f") + buf.write("\3\2\2\2\u05d9\u05db\7>\2\2\u05da\u05dc\7\u00a0\2\2\u05db") + buf.write("\u05da\3\2\2\2\u05db\u05dc\3\2\2\2\u05dc\u05dd\3\2\2\2") + buf.write("\u05dd\u05de\7\u0102\2\2\u05de\u05e1\5\u0128\u0095\2\u05df") + buf.write("\u05e0\7\u00bf\2\2\u05e0\u05e2\5\u00b2Z\2\u05e1\u05df") + buf.write("\3\2\2\2\u05e1\u05e2\3\2\2\2\u05e2\u05e7\3\2\2\2\u05e3") + buf.write("\u05e5\7\65\2\2\u05e4\u05e3\3\2\2\2\u05e4\u05e5\3\2\2") + buf.write("\2\u05e5\u05e6\3\2\2\2\u05e6\u05e8\5\u009aN\2\u05e7\u05e4") + buf.write("\3\2\2\2\u05e7\u05e8\3\2\2\2\u05e8\u062f\3\2\2\2\u05e9") + buf.write("\u05ea\7\u0115\2\2\u05ea\u05ed\7\u0102\2\2\u05eb\u05ec") + buf.write("\7\u008d\2\2\u05ec\u05ee\7r\2\2\u05ed\u05eb\3\2\2\2\u05ed") + buf.write("\u05ee\3\2\2\2\u05ee\u05ef\3\2\2\2\u05ef\u062f\5\u0128") + buf.write("\u0095\2\u05f0\u05f1\7D\2\2\u05f1\u062f\7>\2\2\u05f2\u05f3") + buf.write("\7\u00a7\2\2\u05f3\u05f5\7\\\2\2\u05f4\u05f6\7\u00a8\2") + buf.write("\2\u05f5\u05f4\3\2\2\2\u05f5\u05f6\3\2\2\2\u05f6\u05f7") + buf.write("\3\2\2\2\u05f7\u05f8\7\u0094\2\2\u05f8\u05fa\7\u013b\2") + buf.write("\2\u05f9\u05fb\7\u00c8\2\2\u05fa\u05f9\3\2\2\2\u05fa\u05fb") + buf.write("\3\2\2\2\u05fb\u05fc\3\2\2\2\u05fc\u05fd\7\u0099\2\2\u05fd") + buf.write("\u05fe\7\u0102\2\2\u05fe\u0600\5\u0128\u0095\2\u05ff\u0601") + buf.write("\5\u00a0Q\2\u0600\u05ff\3\2\2\2\u0600\u0601\3\2\2\2\u0601") + buf.write("\u062f\3\2\2\2\u0602\u0603\7\u0111\2\2\u0603\u0604\7\u0102") + buf.write("\2\2\u0604\u0606\5\u0128\u0095\2\u0605\u0607\5\u00a0Q") + buf.write("\2\u0606\u0605\3\2\2\2\u0606\u0607\3\2\2\2\u0607\u062f") + buf.write("\3\2\2\2\u0608\u0609\7\u00b3\2\2\u0609\u060a\7\u00de\2") + buf.write("\2\u060a\u060b\7\u0102\2\2\u060b\u062f\5\u0128\u0095\2") + buf.write("\u060c\u060d\t\25\2\2\u060d\u0615\5\u0182\u00c2\2\u060e") + buf.write("\u0616\7\u013b\2\2\u060f\u0611\13\2\2\2\u0610\u060f\3") + buf.write("\2\2\2\u0611\u0614\3\2\2\2\u0612\u0613\3\2\2\2\u0612\u0610") + buf.write("\3\2\2\2\u0613\u0616\3\2\2\2\u0614\u0612\3\2\2\2\u0615") + buf.write("\u060e\3\2\2\2\u0615\u0612\3\2\2\2\u0616\u062f\3\2\2\2") + buf.write("\u0617\u0618\7\u00f3\2\2\u0618\u061c\7\u00e5\2\2\u0619") + buf.write("\u061b\13\2\2\2\u061a\u0619\3\2\2\2\u061b\u061e\3\2\2") + buf.write("\2\u061c\u061d\3\2\2\2\u061c\u061a\3\2\2\2\u061d\u062f") + buf.write("\3\2\2\2\u061e\u061c\3\2\2\2\u061f\u0623\7\u00f3\2\2\u0620") + buf.write("\u0622\13\2\2\2\u0621\u0620\3\2\2\2\u0622\u0625\3\2\2") + buf.write("\2\u0623\u0624\3\2\2\2\u0623\u0621\3\2\2\2\u0624\u062f") + buf.write("\3\2\2\2\u0625\u0623\3\2\2\2\u0626\u062f\7\u00e0\2\2\u0627") + buf.write("\u062b\5\u008cG\2\u0628\u062a\13\2\2\2\u0629\u0628\3\2") + buf.write("\2\2\u062a\u062d\3\2\2\2\u062b\u062c\3\2\2\2\u062b\u0629") + buf.write("\3\2\2\2\u062c\u062f\3\2\2\2\u062d\u062b\3\2\2\2\u062e") + buf.write("\u036d\3\2\2\2\u062e\u036f\3\2\2\2\u062e\u0372\3\2\2\2") + buf.write("\u062e\u0377\3\2\2\2\u062e\u0389\3\2\2\2\u062e\u0390\3") + buf.write("\2\2\2\u062e\u0396\3\2\2\2\u062e\u03a0\3\2\2\2\u062e\u03ac") + buf.write("\3\2\2\2\u062e\u03bb\3\2\2\2\u062e\u03e0\3\2\2\2\u062e") + buf.write("\u03f5\3\2\2\2\u062e\u0404\3\2\2\2\u062e\u0415\3\2\2\2") + buf.write("\u062e\u041c\3\2\2\2\u062e\u0425\3\2\2\2\u062e\u042e\3") + buf.write("\2\2\2\u062e\u0437\3\2\2\2\u062e\u043e\3\2\2\2\u062e\u0445") + buf.write("\3\2\2\2\u062e\u044c\3\2\2\2\u062e\u0457\3\2\2\2\u062e") + buf.write("\u0462\3\2\2\2\u062e\u0471\3\2\2\2\u062e\u047d\3\2\2\2") + buf.write("\u062e\u048b\3\2\2\2\u062e\u0495\3\2\2\2\u062e\u04a3\3") + buf.write("\2\2\2\u062e\u04ab\3\2\2\2\u062e\u04be\3\2\2\2\u062e\u04c7") + buf.write("\3\2\2\2\u062e\u04cd\3\2\2\2\u062e\u04d7\3\2\2\2\u062e") + buf.write("\u04de\3\2\2\2\u062e\u0501\3\2\2\2\u062e\u0517\3\2\2\2") + buf.write("\u062e\u051f\3\2\2\2\u062e\u053b\3\2\2\2\u062e\u0545\3") + buf.write("\2\2\2\u062e\u054a\3\2\2\2\u062e\u0556\3\2\2\2\u062e\u0562") + buf.write("\3\2\2\2\u062e\u056b\3\2\2\2\u062e\u0573\3\2\2\2\u062e") + buf.write("\u057f\3\2\2\2\u062e\u0585\3\2\2\2\u062e\u0593\3\2\2\2") + buf.write("\u062e\u059b\3\2\2\2\u062e\u059e\3\2\2\2\u062e\u05a4\3") + buf.write("\2\2\2\u062e\u05ab\3\2\2\2\u062e\u05b9\3\2\2\2\u062e\u05be") + buf.write("\3\2\2\2\u062e\u05c5\3\2\2\2\u062e\u05cc\3\2\2\2\u062e") + buf.write("\u05cf\3\2\2\2\u062e\u05d9\3\2\2\2\u062e\u05e9\3\2\2\2") + buf.write("\u062e\u05f0\3\2\2\2\u062e\u05f2\3\2\2\2\u062e\u0602\3") + buf.write("\2\2\2\u062e\u0608\3\2\2\2\u062e\u060c\3\2\2\2\u062e\u0617") + buf.write("\3\2\2\2\u062e\u061f\3\2\2\2\u062e\u0626\3\2\2\2\u062e") + buf.write("\u0627\3\2\2\2\u062f\u008b\3\2\2\2\u0630\u0631\7T\2\2") + buf.write("\u0631\u06d9\7\u00e5\2\2\u0632\u0633\7k\2\2\u0633\u06d9") + buf.write("\7\u00e5\2\2\u0634\u0636\7\u0088\2\2\u0635\u0637\7\u00e5") + buf.write("\2\2\u0636\u0635\3\2\2\2\u0636\u0637\3\2\2\2\u0637\u06d9") + buf.write("\3\2\2\2\u0638\u063a\7\u00e2\2\2\u0639\u063b\7\u00e5\2") + buf.write("\2\u063a\u0639\3\2\2\2\u063a\u063b\3\2\2\2\u063b\u06d9") + buf.write("\3\2\2\2\u063c\u063d\7\u00f6\2\2\u063d\u06d9\7\u0088\2") + buf.write("\2\u063e\u063f\7\u00f6\2\2\u063f\u0641\7\u00e5\2\2\u0640") + buf.write("\u0642\7\u0088\2\2\u0641\u0640\3\2\2\2\u0641\u0642\3\2") + buf.write("\2\2\u0642\u06d9\3\2\2\2\u0643\u0644\7\u00f6\2\2\u0644") + buf.write("\u06d9\7\u00d2\2\2\u0645\u0646\7\u00f6\2\2\u0646\u06d9") + buf.write("\7\u00e6\2\2\u0647\u0648\7\u00f6\2\2\u0648\u0649\7W\2") + buf.write("\2\u0649\u06d9\7\u00e6\2\2\u064a\u064b\7t\2\2\u064b\u06d9") + buf.write("\7\u0102\2\2\u064c\u064d\7\u008f\2\2\u064d\u06d9\7\u0102") + buf.write("\2\2\u064e\u064f\7\u00f6\2\2\u064f\u06d9\7O\2\2\u0650") + buf.write("\u0651\7\u00f6\2\2\u0651\u0652\7T\2\2\u0652\u06d9\7\u0102") + buf.write("\2\2\u0653\u0654\7\u00f6\2\2\u0654\u06d9\7\u010d\2\2\u0655") + buf.write("\u0656\7\u00f6\2\2\u0656\u06d9\7\u0092\2\2\u0657\u0658") + buf.write("\7\u00f6\2\2\u0658\u06d9\7\u00ab\2\2\u0659\u065a\7T\2") + buf.write("\2\u065a\u06d9\7\u0091\2\2\u065b\u065c\7k\2\2\u065c\u06d9") + buf.write("\7\u0091\2\2\u065d\u065e\7.\2\2\u065e\u06d9\7\u0091\2") + buf.write("\2\u065f\u0660\7\u00aa\2\2\u0660\u06d9\7\u0102\2\2\u0661") + buf.write("\u0662\7\u00aa\2\2\u0662\u06d9\7]\2\2\u0663\u0664\7\u0119") + buf.write("\2\2\u0664\u06d9\7\u0102\2\2\u0665\u0666\7\u0119\2\2\u0666") + buf.write("\u06d9\7]\2\2\u0667\u0668\7T\2\2\u0668\u0669\7\u0106\2") + buf.write("\2\u0669\u06d9\7\u00ad\2\2\u066a\u066b\7k\2\2\u066b\u066c") + buf.write("\7\u0106\2\2\u066c\u06d9\7\u00ad\2\2\u066d\u066e\7.\2") + buf.write("\2\u066e\u066f\7\u0102\2\2\u066f\u0670\5\u012a\u0096\2") + buf.write("\u0670\u0671\7\u00b8\2\2\u0671\u0672\7F\2\2\u0672\u06d9") + buf.write("\3\2\2\2\u0673\u0674\7.\2\2\u0674\u0675\7\u0102\2\2\u0675") + buf.write("\u0676\5\u012a\u0096\2\u0676\u0677\7F\2\2\u0677\u0678") + buf.write("\7=\2\2\u0678\u06d9\3\2\2\2\u0679\u067a\7.\2\2\u067a\u067b") + buf.write("\7\u0102\2\2\u067b\u067c\5\u012a\u0096\2\u067c\u067d\7") + buf.write("\u00b8\2\2\u067d\u067e\7\u00fa\2\2\u067e\u06d9\3\2\2\2") + buf.write("\u067f\u0680\7.\2\2\u0680\u0681\7\u0102\2\2\u0681\u0682") + buf.write("\5\u012a\u0096\2\u0682\u0683\7\u00f7\2\2\u0683\u0684\7") + buf.write("=\2\2\u0684\u06d9\3\2\2\2\u0685\u0686\7.\2\2\u0686\u0687") + buf.write("\7\u0102\2\2\u0687\u0688\5\u012a\u0096\2\u0688\u0689\7") + buf.write("\u00b8\2\2\u0689\u068a\7\u00f7\2\2\u068a\u06d9\3\2\2\2") + buf.write("\u068b\u068c\7.\2\2\u068c\u068d\7\u0102\2\2\u068d\u068e") + buf.write("\5\u012a\u0096\2\u068e\u068f\7\u00b8\2\2\u068f\u0690\7") + buf.write("\u00fd\2\2\u0690\u0691\7\65\2\2\u0691\u0692\7g\2\2\u0692") + buf.write("\u06d9\3\2\2\2\u0693\u0694\7.\2\2\u0694\u0695\7\u0102") + buf.write("\2\2\u0695\u0696\5\u012a\u0096\2\u0696\u0697\7\u00f3\2") + buf.write("\2\u0697\u0698\7\u00f7\2\2\u0698\u0699\7\u00a9\2\2\u0699") + buf.write("\u06d9\3\2\2\2\u069a\u069b\7.\2\2\u069b\u069c\7\u0102") + buf.write("\2\2\u069c\u069d\5\u012a\u0096\2\u069d\u069e\7q\2\2\u069e") + buf.write("\u069f\7\u00c9\2\2\u069f\u06d9\3\2\2\2\u06a0\u06a1\7.") + buf.write("\2\2\u06a1\u06a2\7\u0102\2\2\u06a2\u06a3\5\u012a\u0096") + buf.write("\2\u06a3\u06a4\7\63\2\2\u06a4\u06a5\7\u00c9\2\2\u06a5") + buf.write("\u06d9\3\2\2\2\u06a6\u06a7\7.\2\2\u06a7\u06a8\7\u0102") + buf.write("\2\2\u06a8\u06a9\5\u012a\u0096\2\u06a9\u06aa\7\u0113\2") + buf.write("\2\u06aa\u06ab\7\u00c9\2\2\u06ab\u06d9\3\2\2\2\u06ac\u06ad") + buf.write("\7.\2\2\u06ad\u06ae\7\u0102\2\2\u06ae\u06af\5\u012a\u0096") + buf.write("\2\u06af\u06b0\7\u010a\2\2\u06b0\u06d9\3\2\2\2\u06b1\u06b2") + buf.write("\7.\2\2\u06b2\u06b3\7\u0102\2\2\u06b3\u06b5\5\u012a\u0096") + buf.write("\2\u06b4\u06b6\5\u00a0Q\2\u06b5\u06b4\3\2\2\2\u06b5\u06b6") + buf.write("\3\2\2\2\u06b6\u06b7\3\2\2\2\u06b7\u06b8\7N\2\2\u06b8") + buf.write("\u06d9\3\2\2\2\u06b9\u06ba\7.\2\2\u06ba\u06bb\7\u0102") + buf.write("\2\2\u06bb\u06bd\5\u012a\u0096\2\u06bc\u06be\5\u00a0Q") + buf.write("\2\u06bd\u06bc\3\2\2\2\u06bd\u06be\3\2\2\2\u06be\u06bf") + buf.write("\3\2\2\2\u06bf\u06c0\7Q\2\2\u06c0\u06d9\3\2\2\2\u06c1") + buf.write("\u06c2\7.\2\2\u06c2\u06c3\7\u0102\2\2\u06c3\u06c5\5\u012a") + buf.write("\u0096\2\u06c4\u06c6\5\u00a0Q\2\u06c5\u06c4\3\2\2\2\u06c5") + buf.write("\u06c6\3\2\2\2\u06c6\u06c7\3\2\2\2\u06c7\u06c8\7\u00f3") + buf.write("\2\2\u06c8\u06c9\7|\2\2\u06c9\u06d9\3\2\2\2\u06ca\u06cb") + buf.write("\7.\2\2\u06cb\u06cc\7\u0102\2\2\u06cc\u06ce\5\u012a\u0096") + buf.write("\2\u06cd\u06cf\5\u00a0Q\2\u06ce\u06cd\3\2\2\2\u06ce\u06cf") + buf.write("\3\2\2\2\u06cf\u06d0\3\2\2\2\u06d0\u06d1\7\u00df\2\2\u06d1") + buf.write("\u06d2\7K\2\2\u06d2\u06d9\3\2\2\2\u06d3\u06d4\7\u00fb") + buf.write("\2\2\u06d4\u06d9\7\u010c\2\2\u06d5\u06d9\7M\2\2\u06d6") + buf.write("\u06d9\7\u00e7\2\2\u06d7\u06d9\7f\2\2\u06d8\u0630\3\2") + buf.write("\2\2\u06d8\u0632\3\2\2\2\u06d8\u0634\3\2\2\2\u06d8\u0638") + buf.write("\3\2\2\2\u06d8\u063c\3\2\2\2\u06d8\u063e\3\2\2\2\u06d8") + buf.write("\u0643\3\2\2\2\u06d8\u0645\3\2\2\2\u06d8\u0647\3\2\2\2") + buf.write("\u06d8\u064a\3\2\2\2\u06d8\u064c\3\2\2\2\u06d8\u064e\3") + buf.write("\2\2\2\u06d8\u0650\3\2\2\2\u06d8\u0653\3\2\2\2\u06d8\u0655") + buf.write("\3\2\2\2\u06d8\u0657\3\2\2\2\u06d8\u0659\3\2\2\2\u06d8") + buf.write("\u065b\3\2\2\2\u06d8\u065d\3\2\2\2\u06d8\u065f\3\2\2\2") + buf.write("\u06d8\u0661\3\2\2\2\u06d8\u0663\3\2\2\2\u06d8\u0665\3") + buf.write("\2\2\2\u06d8\u0667\3\2\2\2\u06d8\u066a\3\2\2\2\u06d8\u066d") + buf.write("\3\2\2\2\u06d8\u0673\3\2\2\2\u06d8\u0679\3\2\2\2\u06d8") + buf.write("\u067f\3\2\2\2\u06d8\u0685\3\2\2\2\u06d8\u068b\3\2\2\2") + buf.write("\u06d8\u0693\3\2\2\2\u06d8\u069a\3\2\2\2\u06d8\u06a0\3") + buf.write("\2\2\2\u06d8\u06a6\3\2\2\2\u06d8\u06ac\3\2\2\2\u06d8\u06b1") + buf.write("\3\2\2\2\u06d8\u06b9\3\2\2\2\u06d8\u06c1\3\2\2\2\u06d8") + buf.write("\u06ca\3\2\2\2\u06d8\u06d3\3\2\2\2\u06d8\u06d5\3\2\2\2") + buf.write("\u06d8\u06d6\3\2\2\2\u06d8\u06d7\3\2\2\2\u06d9\u008d\3") + buf.write("\2\2\2\u06da\u06dc\7T\2\2\u06db\u06dd\7\u0106\2\2\u06dc") + buf.write("\u06db\3\2\2\2\u06dc\u06dd\3\2\2\2\u06dd\u06df\3\2\2\2") + buf.write("\u06de\u06e0\7v\2\2\u06df\u06de\3\2\2\2\u06df\u06e0\3") + buf.write("\2\2\2\u06e0\u06e1\3\2\2\2\u06e1\u06e5\7\u0102\2\2\u06e2") + buf.write("\u06e3\7\u008d\2\2\u06e3\u06e4\7\u00b8\2\2\u06e4\u06e6") + buf.write("\7r\2\2\u06e5\u06e2\3\2\2\2\u06e5\u06e6\3\2\2\2\u06e6") + buf.write("\u06e7\3\2\2\2\u06e7\u06e8\5\u0128\u0095\2\u06e8\u008f") + buf.write("\3\2\2\2\u06e9\u06ea\7T\2\2\u06ea\u06ec\7\u00c0\2\2\u06eb") + buf.write("\u06e9\3\2\2\2\u06eb\u06ec\3\2\2\2\u06ec\u06ed\3\2\2\2") + buf.write("\u06ed\u06ee\7\u00df\2\2\u06ee\u06ef\7\u0102\2\2\u06ef") + buf.write("\u06f0\5\u0128\u0095\2\u06f0\u0091\3\2\2\2\u06f1\u06f2") + buf.write("\7F\2\2\u06f2\u06f3\7=\2\2\u06f3\u06f7\5\u0110\u0089\2") + buf.write("\u06f4\u06f5\7\u00fa\2\2\u06f5\u06f6\7=\2\2\u06f6\u06f8") + buf.write("\5\u0114\u008b\2\u06f7\u06f4\3\2\2\2\u06f7\u06f8\3\2\2") + buf.write("\2\u06f8\u06f9\3\2\2\2\u06f9\u06fa\7\u0099\2\2\u06fa\u06fb") + buf.write("\7\u013f\2\2\u06fb\u06fc\7<\2\2\u06fc\u0093\3\2\2\2\u06fd") + buf.write("\u06fe\7\u00f7\2\2\u06fe\u06ff\7=\2\2\u06ff\u0700\5\u0110") + buf.write("\u0089\2\u0700\u0703\7\u00bc\2\2\u0701\u0704\5\u00ba^") + buf.write("\2\u0702\u0704\5\u00bc_\2\u0703\u0701\3\2\2\2\u0703\u0702") + buf.write("\3\2\2\2\u0704\u0708\3\2\2\2\u0705\u0706\7\u00fd\2\2\u0706") + buf.write("\u0707\7\65\2\2\u0707\u0709\7g\2\2\u0708\u0705\3\2\2\2") + buf.write("\u0708\u0709\3\2\2\2\u0709\u0095\3\2\2\2\u070a\u070b\7") + buf.write("\u00a9\2\2\u070b\u070c\7\u013b\2\2\u070c\u0097\3\2\2\2") + buf.write("\u070d\u070e\7L\2\2\u070e\u070f\7\u013b\2\2\u070f\u0099") + buf.write("\3\2\2\2\u0710\u0712\5\u00aaV\2\u0711\u0710\3\2\2\2\u0711") + buf.write("\u0712\3\2\2\2\u0712\u0713\3\2\2\2\u0713\u0714\5\u00cc") + buf.write("g\2\u0714\u0715\5\u00c8e\2\u0715\u009b\3\2\2\2\u0716\u0717") + buf.write("\7\u0096\2\2\u0717\u0719\7\u00c8\2\2\u0718\u071a\7\u0102") + buf.write("\2\2\u0719\u0718\3\2\2\2\u0719\u071a\3\2\2\2\u071a\u071b") + buf.write("\3\2\2\2\u071b\u0722\5\u0128\u0095\2\u071c\u0720\5\u00a0") + buf.write("Q\2\u071d\u071e\7\u008d\2\2\u071e\u071f\7\u00b8\2\2\u071f") + buf.write("\u0721\7r\2\2\u0720\u071d\3\2\2\2\u0720\u0721\3\2\2\2") + buf.write("\u0721\u0723\3\2\2\2\u0722\u071c\3\2\2\2\u0722\u0723\3") + buf.write("\2\2\2\u0723\u074e\3\2\2\2\u0724\u0725\7\u0096\2\2\u0725") + buf.write("\u0727\7\u0099\2\2\u0726\u0728\7\u0102\2\2\u0727\u0726") + buf.write("\3\2\2\2\u0727\u0728\3\2\2\2\u0728\u0729\3\2\2\2\u0729") + buf.write("\u072b\5\u0128\u0095\2\u072a\u072c\5\u00a0Q\2\u072b\u072a") + buf.write("\3\2\2\2\u072b\u072c\3\2\2\2\u072c\u0730\3\2\2\2\u072d") + buf.write("\u072e\7\u008d\2\2\u072e\u072f\7\u00b8\2\2\u072f\u0731") + buf.write("\7r\2\2\u0730\u072d\3\2\2\2\u0730\u0731\3\2\2\2\u0731") + buf.write("\u074e\3\2\2\2\u0732\u0733\7\u0096\2\2\u0733\u0735\7\u00c8") + buf.write("\2\2\u0734\u0736\7\u00a8\2\2\u0735\u0734\3\2\2\2\u0735") + buf.write("\u0736\3\2\2\2\u0736\u0737\3\2\2\2\u0737\u0738\7h\2\2") + buf.write("\u0738\u073a\7\u013b\2\2\u0739\u073b\5\u0124\u0093\2\u073a") + buf.write("\u0739\3\2\2\2\u073a\u073b\3\2\2\2\u073b\u073d\3\2\2\2") + buf.write("\u073c\u073e\5\u00be`\2\u073d\u073c\3\2\2\2\u073d\u073e") + buf.write("\3\2\2\2\u073e\u074e\3\2\2\2\u073f\u0740\7\u0096\2\2\u0740") + buf.write("\u0742\7\u00c8\2\2\u0741\u0743\7\u00a8\2\2\u0742\u0741") + buf.write("\3\2\2\2\u0742\u0743\3\2\2\2\u0743\u0744\3\2\2\2\u0744") + buf.write("\u0746\7h\2\2\u0745\u0747\7\u013b\2\2\u0746\u0745\3\2") + buf.write("\2\2\u0746\u0747\3\2\2\2\u0747\u0748\3\2\2\2\u0748\u074b") + buf.write("\5\u00aeX\2\u0749\u074a\7\u00bf\2\2\u074a\u074c\5\u00b2") + buf.write("Z\2\u074b\u0749\3\2\2\2\u074b\u074c\3\2\2\2\u074c\u074e") + buf.write("\3\2\2\2\u074d\u0716\3\2\2\2\u074d\u0724\3\2\2\2\u074d") + buf.write("\u0732\3\2\2\2\u074d\u073f\3\2\2\2\u074e\u009d\3\2\2\2") + buf.write("\u074f\u0751\5\u00a0Q\2\u0750\u0752\5\u0096L\2\u0751\u0750") + buf.write("\3\2\2\2\u0751\u0752\3\2\2\2\u0752\u009f\3\2\2\2\u0753") + buf.write("\u0754\7\u00c9\2\2\u0754\u0755\7\5\2\2\u0755\u075a\5\u00a2") + buf.write("R\2\u0756\u0757\7\3\2\2\u0757\u0759\5\u00a2R\2\u0758\u0756") + buf.write("\3\2\2\2\u0759\u075c\3\2\2\2\u075a\u0758\3\2\2\2\u075a") + buf.write("\u075b\3\2\2\2\u075b\u075d\3\2\2\2\u075c\u075a\3\2\2\2") + buf.write("\u075d\u075e\7\6\2\2\u075e\u00a1\3\2\2\2\u075f\u0762\5") + buf.write("\u0182\u00c2\2\u0760\u0761\7\u0127\2\2\u0761\u0763\5\u0142") + buf.write("\u00a2\2\u0762\u0760\3\2\2\2\u0762\u0763\3\2\2\2\u0763") + buf.write("\u00a3\3\2\2\2\u0764\u0765\t\26\2\2\u0765\u00a5\3\2\2") + buf.write("\2\u0766\u076c\5\u017c\u00bf\2\u0767\u076c\7\u013b\2\2") + buf.write("\u0768\u076c\5\u0144\u00a3\2\u0769\u076c\5\u0148\u00a5") + buf.write("\2\u076a\u076c\5\u014a\u00a6\2\u076b\u0766\3\2\2\2\u076b") + buf.write("\u0767\3\2\2\2\u076b\u0768\3\2\2\2\u076b\u0769\3\2\2\2") + buf.write("\u076b\u076a\3\2\2\2\u076c\u00a7\3\2\2\2\u076d\u0772\5") + buf.write("\u0182\u00c2\2\u076e\u076f\7\7\2\2\u076f\u0771\5\u0182") + buf.write("\u00c2\2\u0770\u076e\3\2\2\2\u0771\u0774\3\2\2\2\u0772") + buf.write("\u0770\3\2\2\2\u0772\u0773\3\2\2\2\u0773\u00a9\3\2\2\2") + buf.write("\u0774\u0772\3\2\2\2\u0775\u0776\7\u0125\2\2\u0776\u077b") + buf.write("\5\u00acW\2\u0777\u0778\7\3\2\2\u0778\u077a\5\u00acW\2") + buf.write("\u0779\u0777\3\2\2\2\u077a\u077d\3\2\2\2\u077b\u0779\3") + buf.write("\2\2\2\u077b\u077c\3\2\2\2\u077c\u00ab\3\2\2\2\u077d\u077b") + buf.write("\3\2\2\2\u077e\u0780\5\u017e\u00c0\2\u077f\u0781\5\u0110") + buf.write("\u0089\2\u0780\u077f\3\2\2\2\u0780\u0781\3\2\2\2\u0781") + buf.write("\u0783\3\2\2\2\u0782\u0784\7\65\2\2\u0783\u0782\3\2\2") + buf.write("\2\u0783\u0784\3\2\2\2\u0784\u0785\3\2\2\2\u0785\u0786") + buf.write("\7\5\2\2\u0786\u0787\5\u009aN\2\u0787\u0788\7\6\2\2\u0788") + buf.write("\u00ad\3\2\2\2\u0789\u078a\7\u011e\2\2\u078a\u078b\5\u0128") + buf.write("\u0095\2\u078b\u00af\3\2\2\2\u078c\u078d\7\u00bf\2\2\u078d") + buf.write("\u0797\5\u00b2Z\2\u078e\u078f\7\u00ca\2\2\u078f\u0790") + buf.write("\7=\2\2\u0790\u0797\5\u0132\u009a\2\u0791\u0797\5\u0092") + buf.write("J\2\u0792\u0797\5\u0096L\2\u0793\u0797\5\u0098M\2\u0794") + buf.write("\u0795\7\u0105\2\2\u0795\u0797\5\u00b2Z\2\u0796\u078c") + buf.write("\3\2\2\2\u0796\u078e\3\2\2\2\u0796\u0791\3\2\2\2\u0796") + buf.write("\u0792\3\2\2\2\u0796\u0793\3\2\2\2\u0796\u0794\3\2\2\2") + buf.write("\u0797\u079a\3\2\2\2\u0798\u0796\3\2\2\2\u0798\u0799\3") + buf.write("\2\2\2\u0799\u00b1\3\2\2\2\u079a\u0798\3\2\2\2\u079b\u079c") + buf.write("\7\5\2\2\u079c\u07a1\5\u00b4[\2\u079d\u079e\7\3\2\2\u079e") + buf.write("\u07a0\5\u00b4[\2\u079f\u079d\3\2\2\2\u07a0\u07a3\3\2") + buf.write("\2\2\u07a1\u079f\3\2\2\2\u07a1\u07a2\3\2\2\2\u07a2\u07a4") + buf.write("\3\2\2\2\u07a3\u07a1\3\2\2\2\u07a4\u07a5\7\6\2\2\u07a5") + buf.write("\u00b3\3\2\2\2\u07a6\u07ab\5\u00b6\\\2\u07a7\u07a9\7\u0127") + buf.write("\2\2\u07a8\u07a7\3\2\2\2\u07a8\u07a9\3\2\2\2\u07a9\u07aa") + buf.write("\3\2\2\2\u07aa\u07ac\5\u00b8]\2\u07ab\u07a8\3\2\2\2\u07ab") + buf.write("\u07ac\3\2\2\2\u07ac\u00b5\3\2\2\2\u07ad\u07b2\5\u0182") + buf.write("\u00c2\2\u07ae\u07af\7\7\2\2\u07af\u07b1\5\u0182\u00c2") + buf.write("\2\u07b0\u07ae\3\2\2\2\u07b1\u07b4\3\2\2\2\u07b2\u07b0") + buf.write("\3\2\2\2\u07b2\u07b3\3\2\2\2\u07b3\u07b7\3\2\2\2\u07b4") + buf.write("\u07b2\3\2\2\2\u07b5\u07b7\7\u013b\2\2\u07b6\u07ad\3\2") + buf.write("\2\2\u07b6\u07b5\3\2\2\2\u07b7\u00b7\3\2\2\2\u07b8\u07bd") + buf.write("\7\u013f\2\2\u07b9\u07bd\7\u0141\2\2\u07ba\u07bd\5\u014c") + buf.write("\u00a7\2\u07bb\u07bd\7\u013b\2\2\u07bc\u07b8\3\2\2\2\u07bc") + buf.write("\u07b9\3\2\2\2\u07bc\u07ba\3\2\2\2\u07bc\u07bb\3\2\2\2") + buf.write("\u07bd\u00b9\3\2\2\2\u07be\u07bf\7\5\2\2\u07bf\u07c4\5") + buf.write("\u0142\u00a2\2\u07c0\u07c1\7\3\2\2\u07c1\u07c3\5\u0142") + buf.write("\u00a2\2\u07c2\u07c0\3\2\2\2\u07c3\u07c6\3\2\2\2\u07c4") + buf.write("\u07c2\3\2\2\2\u07c4\u07c5\3\2\2\2\u07c5\u07c7\3\2\2\2") + buf.write("\u07c6\u07c4\3\2\2\2\u07c7\u07c8\7\6\2\2\u07c8\u00bb\3") + buf.write("\2\2\2\u07c9\u07ca\7\5\2\2\u07ca\u07cf\5\u00ba^\2\u07cb") + buf.write("\u07cc\7\3\2\2\u07cc\u07ce\5\u00ba^\2\u07cd\u07cb\3\2") + buf.write("\2\2\u07ce\u07d1\3\2\2\2\u07cf\u07cd\3\2\2\2\u07cf\u07d0") + buf.write("\3\2\2\2\u07d0\u07d2\3\2\2\2\u07d1\u07cf\3\2\2\2\u07d2") + buf.write("\u07d3\7\6\2\2\u07d3\u00bd\3\2\2\2\u07d4\u07d5\7\u00fd") + buf.write("\2\2\u07d5\u07d6\7\65\2\2\u07d6\u07db\5\u00c0a\2\u07d7") + buf.write("\u07d8\7\u00fd\2\2\u07d8\u07d9\7=\2\2\u07d9\u07db\5\u00c2") + buf.write("b\2\u07da\u07d4\3\2\2\2\u07da\u07d7\3\2\2\2\u07db\u00bf") + buf.write("\3\2\2\2\u07dc\u07dd\7\u0095\2\2\u07dd\u07de\7\u013b\2") + buf.write("\2\u07de\u07df\7\u00c4\2\2\u07df\u07e2\7\u013b\2\2\u07e0") + buf.write("\u07e2\5\u0182\u00c2\2\u07e1\u07dc\3\2\2\2\u07e1\u07e0") + buf.write("\3\2\2\2\u07e2\u00c1\3\2\2\2\u07e3\u07e7\7\u013b\2\2\u07e4") + buf.write("\u07e5\7\u0125\2\2\u07e5\u07e6\7\u00f1\2\2\u07e6\u07e8") + buf.write("\5\u00b2Z\2\u07e7\u07e4\3\2\2\2\u07e7\u07e8\3\2\2\2\u07e8") + buf.write("\u00c3\3\2\2\2\u07e9\u07ea\5\u0182\u00c2\2\u07ea\u07eb") + buf.write("\7\u013b\2\2\u07eb\u00c5\3\2\2\2\u07ec\u07ed\5\u009cO") + buf.write("\2\u07ed\u07ee\5\u00ccg\2\u07ee\u07ef\5\u00c8e\2\u07ef") + buf.write("\u0820\3\2\2\2\u07f0\u07f2\5\u00f4{\2\u07f1\u07f3\5\u00ca") + buf.write("f\2\u07f2\u07f1\3\2\2\2\u07f3\u07f4\3\2\2\2\u07f4\u07f2") + buf.write("\3\2\2\2\u07f4\u07f5\3\2\2\2\u07f5\u0820\3\2\2\2\u07f6") + buf.write("\u07f7\7b\2\2\u07f7\u07f8\7\u0083\2\2\u07f8\u07f9\5\u0128") + buf.write("\u0095\2\u07f9\u07fb\5\u0122\u0092\2\u07fa\u07fc\5\u00ec") + buf.write("w\2\u07fb\u07fa\3\2\2\2\u07fb\u07fc\3\2\2\2\u07fc\u0820") + buf.write("\3\2\2\2\u07fd\u07fe\7\u011b\2\2\u07fe\u07ff\5\u0128\u0095") + buf.write("\2\u07ff\u0800\5\u0122\u0092\2\u0800\u0802\5\u00dep\2") + buf.write("\u0801\u0803\5\u00ecw\2\u0802\u0801\3\2\2\2\u0802\u0803") + buf.write("\3\2\2\2\u0803\u0820\3\2\2\2\u0804\u0805\7\u00b0\2\2\u0805") + buf.write("\u0806\7\u0099\2\2\u0806\u0807\5\u0128\u0095\2\u0807\u0808") + buf.write("\5\u0122\u0092\2\u0808\u080e\7\u011e\2\2\u0809\u080f\5") + buf.write("\u0128\u0095\2\u080a\u080b\7\5\2\2\u080b\u080c\5\u009a") + buf.write("N\2\u080c\u080d\7\6\2\2\u080d\u080f\3\2\2\2\u080e\u0809") + buf.write("\3\2\2\2\u080e\u080a\3\2\2\2\u080f\u0810\3\2\2\2\u0810") + buf.write("\u0811\5\u0122\u0092\2\u0811\u0812\7\u00bc\2\2\u0812\u0816") + buf.write("\5\u013a\u009e\2\u0813\u0815\5\u00e0q\2\u0814\u0813\3") + buf.write("\2\2\2\u0815\u0818\3\2\2\2\u0816\u0814\3\2\2\2\u0816\u0817") + buf.write("\3\2\2\2\u0817\u081c\3\2\2\2\u0818\u0816\3\2\2\2\u0819") + buf.write("\u081b\5\u00e2r\2\u081a\u0819\3\2\2\2\u081b\u081e\3\2") + buf.write("\2\2\u081c\u081a\3\2\2\2\u081c\u081d\3\2\2\2\u081d\u0820") + buf.write("\3\2\2\2\u081e\u081c\3\2\2\2\u081f\u07ec\3\2\2\2\u081f") + buf.write("\u07f0\3\2\2\2\u081f\u07f6\3\2\2\2\u081f\u07fd\3\2\2\2") + buf.write("\u081f\u0804\3\2\2\2\u0820\u00c7\3\2\2\2\u0821\u0822\7") + buf.write("\u00c1\2\2\u0822\u0823\7=\2\2\u0823\u0828\5\u00d0i\2\u0824") + buf.write("\u0825\7\3\2\2\u0825\u0827\5\u00d0i\2\u0826\u0824\3\2") + buf.write("\2\2\u0827\u082a\3\2\2\2\u0828\u0826\3\2\2\2\u0828\u0829") + buf.write("\3\2\2\2\u0829\u082c\3\2\2\2\u082a\u0828\3\2\2\2\u082b") + buf.write("\u0821\3\2\2\2\u082b\u082c\3\2\2\2\u082c\u0837\3\2\2\2") + buf.write("\u082d\u082e\7E\2\2\u082e\u082f\7=\2\2\u082f\u0834\5\u0138") + buf.write("\u009d\2\u0830\u0831\7\3\2\2\u0831\u0833\5\u0138\u009d") + buf.write("\2\u0832\u0830\3\2\2\2\u0833\u0836\3\2\2\2\u0834\u0832") + buf.write("\3\2\2\2\u0834\u0835\3\2\2\2\u0835\u0838\3\2\2\2\u0836") + buf.write("\u0834\3\2\2\2\u0837\u082d\3\2\2\2\u0837\u0838\3\2\2\2") + buf.write("\u0838\u0843\3\2\2\2\u0839\u083a\7j\2\2\u083a\u083b\7") + buf.write("=\2\2\u083b\u0840\5\u0138\u009d\2\u083c\u083d\7\3\2\2") + buf.write("\u083d\u083f\5\u0138\u009d\2\u083e\u083c\3\2\2\2\u083f") + buf.write("\u0842\3\2\2\2\u0840\u083e\3\2\2\2\u0840\u0841\3\2\2\2") + buf.write("\u0841\u0844\3\2\2\2\u0842\u0840\3\2\2\2\u0843\u0839\3") + buf.write("\2\2\2\u0843\u0844\3\2\2\2\u0844\u084f\3\2\2\2\u0845\u0846") + buf.write("\7\u00f9\2\2\u0846\u0847\7=\2\2\u0847\u084c\5\u00d0i\2") + buf.write("\u0848\u0849\7\3\2\2\u0849\u084b\5\u00d0i\2\u084a\u0848") + buf.write("\3\2\2\2\u084b\u084e\3\2\2\2\u084c\u084a\3\2\2\2\u084c") + buf.write("\u084d\3\2\2\2\u084d\u0850\3\2\2\2\u084e\u084c\3\2\2\2") + buf.write("\u084f\u0845\3\2\2\2\u084f\u0850\3\2\2\2\u0850\u0852\3") + buf.write("\2\2\2\u0851\u0853\5\u016e\u00b8\2\u0852\u0851\3\2\2\2") + buf.write("\u0852\u0853\3\2\2\2\u0853\u0859\3\2\2\2\u0854\u0857\7") + buf.write("\u00a4\2\2\u0855\u0858\7-\2\2\u0856\u0858\5\u0138\u009d") + buf.write("\2\u0857\u0855\3\2\2\2\u0857\u0856\3\2\2\2\u0858\u085a") + buf.write("\3\2\2\2\u0859\u0854\3\2\2\2\u0859\u085a\3\2\2\2\u085a") + buf.write("\u00c9\3\2\2\2\u085b\u085c\5\u009cO\2\u085c\u085d\5\u00d4") + buf.write("k\2\u085d\u00cb\3\2\2\2\u085e\u085f\bg\1\2\u085f\u0860") + buf.write("\5\u00ceh\2\u0860\u0878\3\2\2\2\u0861\u0862\f\5\2\2\u0862") + buf.write("\u0863\6g\5\2\u0863\u0865\t\27\2\2\u0864\u0866\5\u0102") + buf.write("\u0082\2\u0865\u0864\3\2\2\2\u0865\u0866\3\2\2\2\u0866") + buf.write("\u0867\3\2\2\2\u0867\u0877\5\u00ccg\6\u0868\u0869\f\4") + buf.write("\2\2\u0869\u086a\6g\7\2\u086a\u086c\7\u0097\2\2\u086b") + buf.write("\u086d\5\u0102\u0082\2\u086c\u086b\3\2\2\2\u086c\u086d") + buf.write("\3\2\2\2\u086d\u086e\3\2\2\2\u086e\u0877\5\u00ccg\5\u086f") + buf.write("\u0870\f\3\2\2\u0870\u0871\6g\t\2\u0871\u0873\t\30\2\2") + buf.write("\u0872\u0874\5\u0102\u0082\2\u0873\u0872\3\2\2\2\u0873") + buf.write("\u0874\3\2\2\2\u0874\u0875\3\2\2\2\u0875\u0877\5\u00cc") + buf.write("g\4\u0876\u0861\3\2\2\2\u0876\u0868\3\2\2\2\u0876\u086f") + buf.write("\3\2\2\2\u0877\u087a\3\2\2\2\u0878\u0876\3\2\2\2\u0878") + buf.write("\u0879\3\2\2\2\u0879\u00cd\3\2\2\2\u087a\u0878\3\2\2\2") + buf.write("\u087b\u0881\5\u00d6l\2\u087c\u0881\5\u00d2j\2\u087d\u087e") + buf.write("\7\u0102\2\2\u087e\u0881\5\u0128\u0095\2\u087f\u0881\5") + buf.write("\u011e\u0090\2\u0880\u087b\3\2\2\2\u0880\u087c\3\2\2\2") + buf.write("\u0880\u087d\3\2\2\2\u0880\u087f\3\2\2\2\u0881\u00cf\3") + buf.write("\2\2\2\u0882\u0884\5\u0138\u009d\2\u0883\u0885\t\7\2\2") + buf.write("\u0884\u0883\3\2\2\2\u0884\u0885\3\2\2\2\u0885\u0888\3") + buf.write("\2\2\2\u0886\u0887\7\u00ba\2\2\u0887\u0889\t\31\2\2\u0888") + buf.write("\u0886\3\2\2\2\u0888\u0889\3\2\2\2\u0889\u00d1\3\2\2\2") + buf.write("\u088a\u088c\5\u00f4{\2\u088b\u088d\5\u00d4k\2\u088c\u088b") + buf.write("\3\2\2\2\u088d\u088e\3\2\2\2\u088e\u088c\3\2\2\2\u088e") + buf.write("\u088f\3\2\2\2\u088f\u00d3\3\2\2\2\u0890\u0892\5\u00da") + buf.write("n\2\u0891\u0893\5\u00ecw\2\u0892\u0891\3\2\2\2\u0892\u0893") + buf.write("\3\2\2\2\u0893\u0894\3\2\2\2\u0894\u0895\5\u00c8e\2\u0895") + buf.write("\u08ac\3\2\2\2\u0896\u089a\5\u00dco\2\u0897\u0899\5\u0100") + buf.write("\u0081\2\u0898\u0897\3\2\2\2\u0899\u089c\3\2\2\2\u089a") + buf.write("\u0898\3\2\2\2\u089a\u089b\3\2\2\2\u089b\u089e\3\2\2\2") + buf.write("\u089c\u089a\3\2\2\2\u089d\u089f\5\u00ecw\2\u089e\u089d") + buf.write("\3\2\2\2\u089e\u089f\3\2\2\2\u089f\u08a1\3\2\2\2\u08a0") + buf.write("\u08a2\5\u00f6|\2\u08a1\u08a0\3\2\2\2\u08a1\u08a2\3\2") + buf.write("\2\2\u08a2\u08a4\3\2\2\2\u08a3\u08a5\5\u00eex\2\u08a4") + buf.write("\u08a3\3\2\2\2\u08a4\u08a5\3\2\2\2\u08a5\u08a7\3\2\2\2") + buf.write("\u08a6\u08a8\5\u016e\u00b8\2\u08a7\u08a6\3\2\2\2\u08a7") + buf.write("\u08a8\3\2\2\2\u08a8\u08a9\3\2\2\2\u08a9\u08aa\5\u00c8") + buf.write("e\2\u08aa\u08ac\3\2\2\2\u08ab\u0890\3\2\2\2\u08ab\u0896") + buf.write("\3\2\2\2\u08ac\u00d5\3\2\2\2\u08ad\u08ae\5\u00dan\2\u08ae") + buf.write("\u08b0\5\u00d8m\2\u08af\u08b1\5\u00ecw\2\u08b0\u08af\3") + buf.write("\2\2\2\u08b0\u08b1\3\2\2\2\u08b1\u08c7\3\2\2\2\u08b2\u08b3") + buf.write("\5\u00dco\2\u08b3\u08b7\5\u00d8m\2\u08b4\u08b6\5\u0100") + buf.write("\u0081\2\u08b5\u08b4\3\2\2\2\u08b6\u08b9\3\2\2\2\u08b7") + buf.write("\u08b5\3\2\2\2\u08b7\u08b8\3\2\2\2\u08b8\u08bb\3\2\2\2") + buf.write("\u08b9\u08b7\3\2\2\2\u08ba\u08bc\5\u00ecw\2\u08bb\u08ba") + buf.write("\3\2\2\2\u08bb\u08bc\3\2\2\2\u08bc\u08be\3\2\2\2\u08bd") + buf.write("\u08bf\5\u00f6|\2\u08be\u08bd\3\2\2\2\u08be\u08bf\3\2") + buf.write("\2\2\u08bf\u08c1\3\2\2\2\u08c0\u08c2\5\u00eex\2\u08c1") + buf.write("\u08c0\3\2\2\2\u08c1\u08c2\3\2\2\2\u08c2\u08c4\3\2\2\2") + buf.write("\u08c3\u08c5\5\u016e\u00b8\2\u08c4\u08c3\3\2\2\2\u08c4") + buf.write("\u08c5\3\2\2\2\u08c5\u08c7\3\2\2\2\u08c6\u08ad\3\2\2\2") + buf.write("\u08c6\u08b2\3\2\2\2\u08c7\u00d7\3\2\2\2\u08c8\u08ca\5") + buf.write("\u00f4{\2\u08c9\u08c8\3\2\2\2\u08c9\u08ca\3\2\2\2\u08ca") + buf.write("\u00d9\3\2\2\2\u08cb\u08cc\7\u00ed\2\2\u08cc\u08cd\7\u010e") + buf.write("\2\2\u08cd\u08ce\7\5\2\2\u08ce\u08cf\5\u0130\u0099\2\u08cf") + buf.write("\u08d0\7\6\2\2\u08d0\u08d6\3\2\2\2\u08d1\u08d2\7\u00ae") + buf.write("\2\2\u08d2\u08d6\5\u0130\u0099\2\u08d3\u08d4\7\u00da\2") + buf.write("\2\u08d4\u08d6\5\u0130\u0099\2\u08d5\u08cb\3\2\2\2\u08d5") + buf.write("\u08d1\3\2\2\2\u08d5\u08d3\3\2\2\2\u08d6\u08d8\3\2\2\2") + buf.write("\u08d7\u08d9\5\u0124\u0093\2\u08d8\u08d7\3\2\2\2\u08d8") + buf.write("\u08d9\3\2\2\2\u08d9\u08dc\3\2\2\2\u08da\u08db\7\u00d8") + buf.write("\2\2\u08db\u08dd\7\u013b\2\2\u08dc\u08da\3\2\2\2\u08dc") + buf.write("\u08dd\3\2\2\2\u08dd\u08de\3\2\2\2\u08de\u08df\7\u011e") + buf.write("\2\2\u08df\u08ec\7\u013b\2\2\u08e0\u08ea\7\65\2\2\u08e1") + buf.write("\u08eb\5\u0112\u008a\2\u08e2\u08eb\5\u0164\u00b3\2\u08e3") + buf.write("\u08e6\7\5\2\2\u08e4\u08e7\5\u0112\u008a\2\u08e5\u08e7") + buf.write("\5\u0164\u00b3\2\u08e6\u08e4\3\2\2\2\u08e6\u08e5\3\2\2") + buf.write("\2\u08e7\u08e8\3\2\2\2\u08e8\u08e9\7\6\2\2\u08e9\u08eb") + buf.write("\3\2\2\2\u08ea\u08e1\3\2\2\2\u08ea\u08e2\3\2\2\2\u08ea") + buf.write("\u08e3\3\2\2\2\u08eb\u08ed\3\2\2\2\u08ec\u08e0\3\2\2\2") + buf.write("\u08ec\u08ed\3\2\2\2\u08ed\u08ef\3\2\2\2\u08ee\u08f0\5") + buf.write("\u0124\u0093\2\u08ef\u08ee\3\2\2\2\u08ef\u08f0\3\2\2\2") + buf.write("\u08f0\u08f3\3\2\2\2\u08f1\u08f2\7\u00d7\2\2\u08f2\u08f4") + buf.write("\7\u013b\2\2\u08f3\u08f1\3\2\2\2\u08f3\u08f4\3\2\2\2\u08f4") + buf.write("\u00db\3\2\2\2\u08f5\u08f9\7\u00ed\2\2\u08f6\u08f8\5\u00f0") + buf.write("y\2\u08f7\u08f6\3\2\2\2\u08f8\u08fb\3\2\2\2\u08f9\u08f7") + buf.write("\3\2\2\2\u08f9\u08fa\3\2\2\2\u08fa\u08fd\3\2\2\2\u08fb") + buf.write("\u08f9\3\2\2\2\u08fc\u08fe\5\u0102\u0082\2\u08fd\u08fc") + buf.write("\3\2\2\2\u08fd\u08fe\3\2\2\2\u08fe\u08ff\3\2\2\2\u08ff") + buf.write("\u0900\5\u0130\u0099\2\u0900\u00dd\3\2\2\2\u0901\u0902") + buf.write("\7\u00f3\2\2\u0902\u0903\5\u00e8u\2\u0903\u00df\3\2\2") + buf.write("\2\u0904\u0905\7\u0122\2\2\u0905\u0908\7\u00af\2\2\u0906") + buf.write("\u0907\7\60\2\2\u0907\u0909\5\u013a\u009e\2\u0908\u0906") + buf.write("\3\2\2\2\u0908\u0909\3\2\2\2\u0909\u090a\3\2\2\2\u090a") + buf.write("\u090b\7\u0108\2\2\u090b\u090c\5\u00e4s\2\u090c\u00e1") + buf.write("\3\2\2\2\u090d\u090e\7\u0122\2\2\u090e\u090f\7\u00b8\2") + buf.write("\2\u090f\u0912\7\u00af\2\2\u0910\u0911\7\60\2\2\u0911") + buf.write("\u0913\5\u013a\u009e\2\u0912\u0910\3\2\2\2\u0912\u0913") + buf.write("\3\2\2\2\u0913\u0914\3\2\2\2\u0914\u0915\7\u0108\2\2\u0915") + buf.write("\u0916\5\u00e6t\2\u0916\u00e3\3\2\2\2\u0917\u091f\7b\2") + buf.write("\2\u0918\u0919\7\u011b\2\2\u0919\u091a\7\u00f3\2\2\u091a") + buf.write("\u091f\7\u0132\2\2\u091b\u091c\7\u011b\2\2\u091c\u091d") + buf.write("\7\u00f3\2\2\u091d\u091f\5\u00e8u\2\u091e\u0917\3\2\2") + buf.write("\2\u091e\u0918\3\2\2\2\u091e\u091b\3\2\2\2\u091f\u00e5") + buf.write("\3\2\2\2\u0920\u0921\7\u0096\2\2\u0921\u0933\7\u0132\2") + buf.write("\2\u0922\u0923\7\u0096\2\2\u0923\u0924\7\5\2\2\u0924\u0925") + buf.write("\5\u0126\u0094\2\u0925\u0926\7\6\2\2\u0926\u0927\7\u011f") + buf.write("\2\2\u0927\u0928\7\5\2\2\u0928\u092d\5\u0138\u009d\2\u0929") + buf.write("\u092a\7\3\2\2\u092a\u092c\5\u0138\u009d\2\u092b\u0929") + buf.write("\3\2\2\2\u092c\u092f\3\2\2\2\u092d\u092b\3\2\2\2\u092d") + buf.write("\u092e\3\2\2\2\u092e\u0930\3\2\2\2\u092f\u092d\3\2\2\2") + buf.write("\u0930\u0931\7\6\2\2\u0931\u0933\3\2\2\2\u0932\u0920\3") + buf.write("\2\2\2\u0932\u0922\3\2\2\2\u0933\u00e7\3\2\2\2\u0934\u0939") + buf.write("\5\u00eav\2\u0935\u0936\7\3\2\2\u0936\u0938\5\u00eav\2") + buf.write("\u0937\u0935\3\2\2\2\u0938\u093b\3\2\2\2\u0939\u0937\3") + buf.write("\2\2\2\u0939\u093a\3\2\2\2\u093a\u00e9\3\2\2\2\u093b\u0939") + buf.write("\3\2\2\2\u093c\u093d\5\u0128\u0095\2\u093d\u093e\7\u0127") + buf.write("\2\2\u093e\u093f\5\u0138\u009d\2\u093f\u00eb\3\2\2\2\u0940") + buf.write("\u0941\7\u0123\2\2\u0941\u0942\5\u013a\u009e\2\u0942\u00ed") + buf.write("\3\2\2\2\u0943\u0944\7\u008b\2\2\u0944\u0945\5\u013a\u009e") + buf.write("\2\u0945\u00ef\3\2\2\2\u0946\u0947\7\20\2\2\u0947\u094e") + buf.write("\5\u00f2z\2\u0948\u094a\7\3\2\2\u0949\u0948\3\2\2\2\u0949") + buf.write("\u094a\3\2\2\2\u094a\u094b\3\2\2\2\u094b\u094d\5\u00f2") + buf.write("z\2\u094c\u0949\3\2\2\2\u094d\u0950\3\2\2\2\u094e\u094c") + buf.write("\3\2\2\2\u094e\u094f\3\2\2\2\u094f\u0951\3\2\2\2\u0950") + buf.write("\u094e\3\2\2\2\u0951\u0952\7\21\2\2\u0952\u00f1\3\2\2") + buf.write("\2\u0953\u0961\5\u0182\u00c2\2\u0954\u0955\5\u0182\u00c2") + buf.write("\2\u0955\u0956\7\5\2\2\u0956\u095b\5\u0140\u00a1\2\u0957") + buf.write("\u0958\7\3\2\2\u0958\u095a\5\u0140\u00a1\2\u0959\u0957") + buf.write("\3\2\2\2\u095a\u095d\3\2\2\2\u095b\u0959\3\2\2\2\u095b") + buf.write("\u095c\3\2\2\2\u095c\u095e\3\2\2\2\u095d\u095b\3\2\2\2") + buf.write("\u095e\u095f\7\6\2\2\u095f\u0961\3\2\2\2\u0960\u0953\3") + buf.write("\2\2\2\u0960\u0954\3\2\2\2\u0961\u00f3\3\2\2\2\u0962\u0963") + buf.write("\7\u0083\2\2\u0963\u0968\5\u0104\u0083\2\u0964\u0965\7") + buf.write("\3\2\2\u0965\u0967\5\u0104\u0083\2\u0966\u0964\3\2\2\2") + buf.write("\u0967\u096a\3\2\2\2\u0968\u0966\3\2\2\2\u0968\u0969\3") + buf.write("\2\2\2\u0969\u096e\3\2\2\2\u096a\u0968\3\2\2\2\u096b\u096d") + buf.write("\5\u0100\u0081\2\u096c\u096b\3\2\2\2\u096d\u0970\3\2\2") + buf.write("\2\u096e\u096c\3\2\2\2\u096e\u096f\3\2\2\2\u096f\u0972") + buf.write("\3\2\2\2\u0970\u096e\3\2\2\2\u0971\u0973\5\u00fa~\2\u0972") + buf.write("\u0971\3\2\2\2\u0972\u0973\3\2\2\2\u0973\u00f5\3\2\2\2") + buf.write("\u0974\u0975\7\u0089\2\2\u0975\u0976\7=\2\2\u0976\u097b") + buf.write("\5\u0138\u009d\2\u0977\u0978\7\3\2\2\u0978\u097a\5\u0138") + buf.write("\u009d\2\u0979\u0977\3\2\2\2\u097a\u097d\3\2\2\2\u097b") + buf.write("\u0979\3\2\2\2\u097b\u097c\3\2\2\2\u097c\u098f\3\2\2\2") + buf.write("\u097d\u097b\3\2\2\2\u097e\u097f\7\u0125\2\2\u097f\u0990") + buf.write("\7\u00e8\2\2\u0980\u0981\7\u0125\2\2\u0981\u0990\7V\2") + buf.write("\2\u0982\u0983\7\u008a\2\2\u0983\u0984\7\u00f5\2\2\u0984") + buf.write("\u0985\7\5\2\2\u0985\u098a\5\u00f8}\2\u0986\u0987\7\3") + buf.write("\2\2\u0987\u0989\5\u00f8}\2\u0988\u0986\3\2\2\2\u0989") + buf.write("\u098c\3\2\2\2\u098a\u0988\3\2\2\2\u098a\u098b\3\2\2\2") + buf.write("\u098b\u098d\3\2\2\2\u098c\u098a\3\2\2\2\u098d\u098e\7") + buf.write("\6\2\2\u098e\u0990\3\2\2\2\u098f\u097e\3\2\2\2\u098f\u0980") + buf.write("\3\2\2\2\u098f\u0982\3\2\2\2\u098f\u0990\3\2\2\2\u0990") + buf.write("\u09a1\3\2\2\2\u0991\u0992\7\u0089\2\2\u0992\u0993\7=") + buf.write("\2\2\u0993\u0994\7\u008a\2\2\u0994\u0995\7\u00f5\2\2\u0995") + buf.write("\u0996\7\5\2\2\u0996\u099b\5\u00f8}\2\u0997\u0998\7\3") + buf.write("\2\2\u0998\u099a\5\u00f8}\2\u0999\u0997\3\2\2\2\u099a") + buf.write("\u099d\3\2\2\2\u099b\u0999\3\2\2\2\u099b\u099c\3\2\2\2") + buf.write("\u099c\u099e\3\2\2\2\u099d\u099b\3\2\2\2\u099e\u099f\7") + buf.write("\6\2\2\u099f\u09a1\3\2\2\2\u09a0\u0974\3\2\2\2\u09a0\u0991") + buf.write("\3\2\2\2\u09a1\u00f7\3\2\2\2\u09a2\u09ab\7\5\2\2\u09a3") + buf.write("\u09a8\5\u0138\u009d\2\u09a4\u09a5\7\3\2\2\u09a5\u09a7") + buf.write("\5\u0138\u009d\2\u09a6\u09a4\3\2\2\2\u09a7\u09aa\3\2\2") + buf.write("\2\u09a8\u09a6\3\2\2\2\u09a8\u09a9\3\2\2\2\u09a9\u09ac") + buf.write("\3\2\2\2\u09aa\u09a8\3\2\2\2\u09ab\u09a3\3\2\2\2\u09ab") + buf.write("\u09ac\3\2\2\2\u09ac\u09ad\3\2\2\2\u09ad\u09b0\7\6\2\2") + buf.write("\u09ae\u09b0\5\u0138\u009d\2\u09af\u09a2\3\2\2\2\u09af") + buf.write("\u09ae\3\2\2\2\u09b0\u00f9\3\2\2\2\u09b1\u09b2\7\u00cd") + buf.write("\2\2\u09b2\u09b3\7\5\2\2\u09b3\u09b4\5\u0130\u0099\2\u09b4") + buf.write("\u09b5\7\177\2\2\u09b5\u09b6\5\u00fc\177\2\u09b6\u09b7") + buf.write("\7\u0090\2\2\u09b7\u09b8\7\5\2\2\u09b8\u09bd\5\u00fe\u0080") + buf.write("\2\u09b9\u09ba\7\3\2\2\u09ba\u09bc\5\u00fe\u0080\2\u09bb") + buf.write("\u09b9\3\2\2\2\u09bc\u09bf\3\2\2\2\u09bd\u09bb\3\2\2\2") + buf.write("\u09bd\u09be\3\2\2\2\u09be\u09c0\3\2\2\2\u09bf\u09bd\3") + buf.write("\2\2\2\u09c0\u09c1\7\6\2\2\u09c1\u09c2\7\6\2\2\u09c2\u00fb") + buf.write("\3\2\2\2\u09c3\u09d0\5\u0182\u00c2\2\u09c4\u09c5\7\5\2") + buf.write("\2\u09c5\u09ca\5\u0182\u00c2\2\u09c6\u09c7\7\3\2\2\u09c7") + buf.write("\u09c9\5\u0182\u00c2\2\u09c8\u09c6\3\2\2\2\u09c9\u09cc") + buf.write("\3\2\2\2\u09ca\u09c8\3\2\2\2\u09ca\u09cb\3\2\2\2\u09cb") + buf.write("\u09cd\3\2\2\2\u09cc\u09ca\3\2\2\2\u09cd\u09ce\7\6\2\2") + buf.write("\u09ce\u09d0\3\2\2\2\u09cf\u09c3\3\2\2\2\u09cf\u09c4\3") + buf.write("\2\2\2\u09d0\u00fd\3\2\2\2\u09d1\u09d6\5\u0138\u009d\2") + buf.write("\u09d2\u09d4\7\65\2\2\u09d3\u09d2\3\2\2\2\u09d3\u09d4") + buf.write("\3\2\2\2\u09d4\u09d5\3\2\2\2\u09d5\u09d7\5\u0182\u00c2") + buf.write("\2\u09d6\u09d3\3\2\2\2\u09d6\u09d7\3\2\2\2\u09d7\u00ff") + buf.write("\3\2\2\2\u09d8\u09d9\7\u009f\2\2\u09d9\u09db\7\u0120\2") + buf.write("\2\u09da\u09dc\7\u00c3\2\2\u09db\u09da\3\2\2\2\u09db\u09dc") + buf.write("\3\2\2\2\u09dc\u09dd\3\2\2\2\u09dd\u09de\5\u017c\u00bf") + buf.write("\2\u09de\u09e7\7\5\2\2\u09df\u09e4\5\u0138\u009d\2\u09e0") + buf.write("\u09e1\7\3\2\2\u09e1\u09e3\5\u0138\u009d\2\u09e2\u09e0") + buf.write("\3\2\2\2\u09e3\u09e6\3\2\2\2\u09e4\u09e2\3\2\2\2\u09e4") + buf.write("\u09e5\3\2\2\2\u09e5\u09e8\3\2\2\2\u09e6\u09e4\3\2\2\2") + buf.write("\u09e7\u09df\3\2\2\2\u09e7\u09e8\3\2\2\2\u09e8\u09e9\3") + buf.write("\2\2\2\u09e9\u09ea\7\6\2\2\u09ea\u09f6\5\u0182\u00c2\2") + buf.write("\u09eb\u09ed\7\65\2\2\u09ec\u09eb\3\2\2\2\u09ec\u09ed") + buf.write("\3\2\2\2\u09ed\u09ee\3\2\2\2\u09ee\u09f3\5\u0182\u00c2") + buf.write("\2\u09ef\u09f0\7\3\2\2\u09f0\u09f2\5\u0182\u00c2\2\u09f1") + buf.write("\u09ef\3\2\2\2\u09f2\u09f5\3\2\2\2\u09f3\u09f1\3\2\2\2") + buf.write("\u09f3\u09f4\3\2\2\2\u09f4\u09f7\3\2\2\2\u09f5\u09f3\3") + buf.write("\2\2\2\u09f6\u09ec\3\2\2\2\u09f6\u09f7\3\2\2\2\u09f7\u0101") + buf.write("\3\2\2\2\u09f8\u09f9\t\32\2\2\u09f9\u0103\3\2\2\2\u09fa") + buf.write("\u09fe\5\u011c\u008f\2\u09fb\u09fd\5\u0106\u0084\2\u09fc") + buf.write("\u09fb\3\2\2\2\u09fd\u0a00\3\2\2\2\u09fe\u09fc\3\2\2\2") + buf.write("\u09fe\u09ff\3\2\2\2\u09ff\u0105\3\2\2\2\u0a00\u09fe\3") + buf.write("\2\2\2\u0a01\u0a02\5\u0108\u0085\2\u0a02\u0a03\7\u009c") + buf.write("\2\2\u0a03\u0a05\5\u011c\u008f\2\u0a04\u0a06\5\u010a\u0086") + buf.write("\2\u0a05\u0a04\3\2\2\2\u0a05\u0a06\3\2\2\2\u0a06\u0a0d") + buf.write("\3\2\2\2\u0a07\u0a08\7\u00b6\2\2\u0a08\u0a09\5\u0108\u0085") + buf.write("\2\u0a09\u0a0a\7\u009c\2\2\u0a0a\u0a0b\5\u011c\u008f\2") + buf.write("\u0a0b\u0a0d\3\2\2\2\u0a0c\u0a01\3\2\2\2\u0a0c\u0a07\3") + buf.write("\2\2\2\u0a0d\u0107\3\2\2\2\u0a0e\u0a10\7\u0093\2\2\u0a0f") + buf.write("\u0a0e\3\2\2\2\u0a0f\u0a10\3\2\2\2\u0a10\u0a27\3\2\2\2") + buf.write("\u0a11\u0a27\7U\2\2\u0a12\u0a14\7\u00a2\2\2\u0a13\u0a15") + buf.write("\7\u00c3\2\2\u0a14\u0a13\3\2\2\2\u0a14\u0a15\3\2\2\2\u0a15") + buf.write("\u0a27\3\2\2\2\u0a16\u0a18\7\u00a2\2\2\u0a17\u0a16\3\2") + buf.write("\2\2\u0a17\u0a18\3\2\2\2\u0a18\u0a19\3\2\2\2\u0a19\u0a27") + buf.write("\7\u00ee\2\2\u0a1a\u0a1c\7\u00e3\2\2\u0a1b\u0a1d\7\u00c3") + buf.write("\2\2\u0a1c\u0a1b\3\2\2\2\u0a1c\u0a1d\3\2\2\2\u0a1d\u0a27") + buf.write("\3\2\2\2\u0a1e\u0a20\7\u0084\2\2\u0a1f\u0a21\7\u00c3\2") + buf.write("\2\u0a20\u0a1f\3\2\2\2\u0a20\u0a21\3\2\2\2\u0a21\u0a27") + buf.write("\3\2\2\2\u0a22\u0a24\7\u00a2\2\2\u0a23\u0a22\3\2\2\2\u0a23") + buf.write("\u0a24\3\2\2\2\u0a24\u0a25\3\2\2\2\u0a25\u0a27\7\61\2") + buf.write("\2\u0a26\u0a0f\3\2\2\2\u0a26\u0a11\3\2\2\2\u0a26\u0a12") + buf.write("\3\2\2\2\u0a26\u0a17\3\2\2\2\u0a26\u0a1a\3\2\2\2\u0a26") + buf.write("\u0a1e\3\2\2\2\u0a26\u0a23\3\2\2\2\u0a27\u0109\3\2\2\2") + buf.write("\u0a28\u0a29\7\u00bc\2\2\u0a29\u0a2d\5\u013a\u009e\2\u0a2a") + buf.write("\u0a2b\7\u011e\2\2\u0a2b\u0a2d\5\u0110\u0089\2\u0a2c\u0a28") + buf.write("\3\2\2\2\u0a2c\u0a2a\3\2\2\2\u0a2d\u010b\3\2\2\2\u0a2e") + buf.write("\u0a2f\7\u0104\2\2\u0a2f\u0a31\7\5\2\2\u0a30\u0a32\5\u010e") + buf.write("\u0088\2\u0a31\u0a30\3\2\2\2\u0a31\u0a32\3\2\2\2\u0a32") + buf.write("\u0a33\3\2\2\2\u0a33\u0a34\7\6\2\2\u0a34\u010d\3\2\2\2") + buf.write("\u0a35\u0a37\7\u0131\2\2\u0a36\u0a35\3\2\2\2\u0a36\u0a37") + buf.write("\3\2\2\2\u0a37\u0a38\3\2\2\2\u0a38\u0a39\t\33\2\2\u0a39") + buf.write("\u0a4e\7\u00cc\2\2\u0a3a\u0a3b\5\u0138\u009d\2\u0a3b\u0a3c") + buf.write("\7\u00ea\2\2\u0a3c\u0a4e\3\2\2\2\u0a3d\u0a3e\7;\2\2\u0a3e") + buf.write("\u0a3f\7\u013f\2\2\u0a3f\u0a40\7\u00c2\2\2\u0a40\u0a41") + buf.write("\7\u00bb\2\2\u0a41\u0a4a\7\u013f\2\2\u0a42\u0a48\7\u00bc") + buf.write("\2\2\u0a43\u0a49\5\u0182\u00c2\2\u0a44\u0a45\5\u017c\u00bf") + buf.write("\2\u0a45\u0a46\7\5\2\2\u0a46\u0a47\7\6\2\2\u0a47\u0a49") + buf.write("\3\2\2\2\u0a48\u0a43\3\2\2\2\u0a48\u0a44\3\2\2\2\u0a49") + buf.write("\u0a4b\3\2\2\2\u0a4a\u0a42\3\2\2\2\u0a4a\u0a4b\3\2\2\2") + buf.write("\u0a4b\u0a4e\3\2\2\2\u0a4c\u0a4e\5\u0138\u009d\2\u0a4d") + buf.write("\u0a36\3\2\2\2\u0a4d\u0a3a\3\2\2\2\u0a4d\u0a3d\3\2\2\2") + buf.write("\u0a4d\u0a4c\3\2\2\2\u0a4e\u010f\3\2\2\2\u0a4f\u0a50\7") + buf.write("\5\2\2\u0a50\u0a51\5\u0112\u008a\2\u0a51\u0a52\7\6\2\2") + buf.write("\u0a52\u0111\3\2\2\2\u0a53\u0a58\5\u017e\u00c0\2\u0a54") + buf.write("\u0a55\7\3\2\2\u0a55\u0a57\5\u017e\u00c0\2\u0a56\u0a54") + buf.write("\3\2\2\2\u0a57\u0a5a\3\2\2\2\u0a58\u0a56\3\2\2\2\u0a58") + buf.write("\u0a59\3\2\2\2\u0a59\u0113\3\2\2\2\u0a5a\u0a58\3\2\2\2") + buf.write("\u0a5b\u0a5c\7\5\2\2\u0a5c\u0a61\5\u0116\u008c\2\u0a5d") + buf.write("\u0a5e\7\3\2\2\u0a5e\u0a60\5\u0116\u008c\2\u0a5f\u0a5d") + buf.write("\3\2\2\2\u0a60\u0a63\3\2\2\2\u0a61\u0a5f\3\2\2\2\u0a61") + buf.write("\u0a62\3\2\2\2\u0a62\u0a64\3\2\2\2\u0a63\u0a61\3\2\2\2") + buf.write("\u0a64\u0a65\7\6\2\2\u0a65\u0115\3\2\2\2\u0a66\u0a68\5") + buf.write("\u017e\u00c0\2\u0a67\u0a69\t\7\2\2\u0a68\u0a67\3\2\2\2") + buf.write("\u0a68\u0a69\3\2\2\2\u0a69\u0117\3\2\2\2\u0a6a\u0a6b\7") + buf.write("\5\2\2\u0a6b\u0a70\5\u011a\u008e\2\u0a6c\u0a6d\7\3\2\2") + buf.write("\u0a6d\u0a6f\5\u011a\u008e\2\u0a6e\u0a6c\3\2\2\2\u0a6f") + buf.write("\u0a72\3\2\2\2\u0a70\u0a6e\3\2\2\2\u0a70\u0a71\3\2\2\2") + buf.write("\u0a71\u0a73\3\2\2\2\u0a72\u0a70\3\2\2\2\u0a73\u0a74\7") + buf.write("\6\2\2\u0a74\u0119\3\2\2\2\u0a75\u0a77\5\u0182\u00c2\2") + buf.write("\u0a76\u0a78\5\u0098M\2\u0a77\u0a76\3\2\2\2\u0a77\u0a78") + buf.write("\3\2\2\2\u0a78\u011b\3\2\2\2\u0a79\u0a7b\5\u0128\u0095") + buf.write("\2\u0a7a\u0a7c\5\u010c\u0087\2\u0a7b\u0a7a\3\2\2\2\u0a7b") + buf.write("\u0a7c\3\2\2\2\u0a7c\u0a7d\3\2\2\2\u0a7d\u0a7e\5\u0122") + buf.write("\u0092\2\u0a7e\u0a9a\3\2\2\2\u0a7f\u0a80\7\5\2\2\u0a80") + buf.write("\u0a81\5\u009aN\2\u0a81\u0a83\7\6\2\2\u0a82\u0a84\5\u010c") + buf.write("\u0087\2\u0a83\u0a82\3\2\2\2\u0a83\u0a84\3\2\2\2\u0a84") + buf.write("\u0a85\3\2\2\2\u0a85\u0a86\5\u0122\u0092\2\u0a86\u0a9a") + buf.write("\3\2\2\2\u0a87\u0a88\7\5\2\2\u0a88\u0a89\5\f\7\2\u0a89") + buf.write("\u0a8b\7\6\2\2\u0a8a\u0a8c\5\u010c\u0087\2\u0a8b\u0a8a") + buf.write("\3\2\2\2\u0a8b\u0a8c\3\2\2\2\u0a8c\u0a8d\3\2\2\2\u0a8d") + buf.write("\u0a8e\5\u0122\u0092\2\u0a8e\u0a9a\3\2\2\2\u0a8f\u0a90") + buf.write("\7\5\2\2\u0a90\u0a91\5\u0104\u0083\2\u0a91\u0a93\7\6\2") + buf.write("\2\u0a92\u0a94\5\u010c\u0087\2\u0a93\u0a92\3\2\2\2\u0a93") + buf.write("\u0a94\3\2\2\2\u0a94\u0a95\3\2\2\2\u0a95\u0a96\5\u0122") + buf.write("\u0092\2\u0a96\u0a9a\3\2\2\2\u0a97\u0a9a\5\u011e\u0090") + buf.write("\2\u0a98\u0a9a\5\u0120\u0091\2\u0a99\u0a79\3\2\2\2\u0a99") + buf.write("\u0a7f\3\2\2\2\u0a99\u0a87\3\2\2\2\u0a99\u0a8f\3\2\2\2") + buf.write("\u0a99\u0a97\3\2\2\2\u0a99\u0a98\3\2\2\2\u0a9a\u011d\3") + buf.write("\2\2\2\u0a9b\u0a9c\7\u011f\2\2\u0a9c\u0aa1\5\u0138\u009d") + buf.write("\2\u0a9d\u0a9e\7\3\2\2\u0a9e\u0aa0\5\u0138\u009d\2\u0a9f") + buf.write("\u0a9d\3\2\2\2\u0aa0\u0aa3\3\2\2\2\u0aa1\u0a9f\3\2\2\2") + buf.write("\u0aa1\u0aa2\3\2\2\2\u0aa2\u0aa4\3\2\2\2\u0aa3\u0aa1\3") + buf.write("\2\2\2\u0aa4\u0aa5\5\u0122\u0092\2\u0aa5\u011f\3\2\2\2") + buf.write("\u0aa6\u0aa7\5\u017e\u00c0\2\u0aa7\u0ab0\7\5\2\2\u0aa8") + buf.write("\u0aad\5\u0138\u009d\2\u0aa9\u0aaa\7\3\2\2\u0aaa\u0aac") + buf.write("\5\u0138\u009d\2\u0aab\u0aa9\3\2\2\2\u0aac\u0aaf\3\2\2") + buf.write("\2\u0aad\u0aab\3\2\2\2\u0aad\u0aae\3\2\2\2\u0aae\u0ab1") + buf.write("\3\2\2\2\u0aaf\u0aad\3\2\2\2\u0ab0\u0aa8\3\2\2\2\u0ab0") + buf.write("\u0ab1\3\2\2\2\u0ab1\u0ab2\3\2\2\2\u0ab2\u0ab3\7\6\2\2") + buf.write("\u0ab3\u0ab4\5\u0122\u0092\2\u0ab4\u0121\3\2\2\2\u0ab5") + buf.write("\u0ab7\7\65\2\2\u0ab6\u0ab5\3\2\2\2\u0ab6\u0ab7\3\2\2") + buf.write("\2\u0ab7\u0ab8\3\2\2\2\u0ab8\u0aba\5\u0184\u00c3\2\u0ab9") + buf.write("\u0abb\5\u0110\u0089\2\u0aba\u0ab9\3\2\2\2\u0aba\u0abb") + buf.write("\3\2\2\2\u0abb\u0abd\3\2\2\2\u0abc\u0ab6\3\2\2\2\u0abc") + buf.write("\u0abd\3\2\2\2\u0abd\u0123\3\2\2\2\u0abe\u0abf\7\u00e9") + buf.write("\2\2\u0abf\u0ac0\7\u0081\2\2\u0ac0\u0ac1\7\u00f0\2\2\u0ac1") + buf.write("\u0ac5\7\u013b\2\2\u0ac2\u0ac3\7\u0125\2\2\u0ac3\u0ac4") + buf.write("\7\u00f1\2\2\u0ac4\u0ac6\5\u00b2Z\2\u0ac5\u0ac2\3\2\2") + buf.write("\2\u0ac5\u0ac6\3\2\2\2\u0ac6\u0af0\3\2\2\2\u0ac7\u0ac8") + buf.write("\7\u00e9\2\2\u0ac8\u0ac9\7\u0081\2\2\u0ac9\u0ad3\7c\2") + buf.write("\2\u0aca\u0acb\7z\2\2\u0acb\u0acc\7\u0107\2\2\u0acc\u0acd") + buf.write("\7=\2\2\u0acd\u0ad1\7\u013b\2\2\u0ace\u0acf\7o\2\2\u0acf") + buf.write("\u0ad0\7=\2\2\u0ad0\u0ad2\7\u013b\2\2\u0ad1\u0ace\3\2") + buf.write("\2\2\u0ad1\u0ad2\3\2\2\2\u0ad2\u0ad4\3\2\2\2\u0ad3\u0aca") + buf.write("\3\2\2\2\u0ad3\u0ad4\3\2\2\2\u0ad4\u0ada\3\2\2\2\u0ad5") + buf.write("\u0ad6\7I\2\2\u0ad6\u0ad7\7\u009b\2\2\u0ad7\u0ad8\7\u0107") + buf.write("\2\2\u0ad8\u0ad9\7=\2\2\u0ad9\u0adb\7\u013b\2\2\u0ada") + buf.write("\u0ad5\3\2\2\2\u0ada\u0adb\3\2\2\2\u0adb\u0ae1\3\2\2\2") + buf.write("\u0adc\u0add\7\u00ae\2\2\u0add\u0ade\7\u009d\2\2\u0ade") + buf.write("\u0adf\7\u0107\2\2\u0adf\u0ae0\7=\2\2\u0ae0\u0ae2\7\u013b") + buf.write("\2\2\u0ae1\u0adc\3\2\2\2\u0ae1\u0ae2\3\2\2\2\u0ae2\u0ae7") + buf.write("\3\2\2\2\u0ae3\u0ae4\7\u00a5\2\2\u0ae4\u0ae5\7\u0107\2") + buf.write("\2\u0ae5\u0ae6\7=\2\2\u0ae6\u0ae8\7\u013b\2\2\u0ae7\u0ae3") + buf.write("\3\2\2\2\u0ae7\u0ae8\3\2\2\2\u0ae8\u0aed\3\2\2\2\u0ae9") + buf.write("\u0aea\7\u00b9\2\2\u0aea\u0aeb\7a\2\2\u0aeb\u0aec\7\65") + buf.write("\2\2\u0aec\u0aee\7\u013b\2\2\u0aed\u0ae9\3\2\2\2\u0aed") + buf.write("\u0aee\3\2\2\2\u0aee\u0af0\3\2\2\2\u0aef\u0abe\3\2\2\2") + buf.write("\u0aef\u0ac7\3\2\2\2\u0af0\u0125\3\2\2\2\u0af1\u0af6\5") + buf.write("\u0128\u0095\2\u0af2\u0af3\7\3\2\2\u0af3\u0af5\5\u0128") + buf.write("\u0095\2\u0af4\u0af2\3\2\2\2\u0af5\u0af8\3\2\2\2\u0af6") + buf.write("\u0af4\3\2\2\2\u0af6\u0af7\3\2\2\2\u0af7\u0127\3\2\2\2") + buf.write("\u0af8\u0af6\3\2\2\2\u0af9\u0afe\5\u017e\u00c0\2\u0afa") + buf.write("\u0afb\7\7\2\2\u0afb\u0afd\5\u017e\u00c0\2\u0afc\u0afa") + buf.write("\3\2\2\2\u0afd\u0b00\3\2\2\2\u0afe\u0afc\3\2\2\2\u0afe") + buf.write("\u0aff\3\2\2\2\u0aff\u0129\3\2\2\2\u0b00\u0afe\3\2\2\2") + buf.write("\u0b01\u0b02\5\u017e\u00c0\2\u0b02\u0b03\7\7\2\2\u0b03") + buf.write("\u0b05\3\2\2\2\u0b04\u0b01\3\2\2\2\u0b04\u0b05\3\2\2\2") + buf.write("\u0b05\u0b06\3\2\2\2\u0b06\u0b07\5\u017e\u00c0\2\u0b07") + buf.write("\u012b\3\2\2\2\u0b08\u0b09\5\u017e\u00c0\2\u0b09\u0b0a") + buf.write("\7\7\2\2\u0b0a\u0b0c\3\2\2\2\u0b0b\u0b08\3\2\2\2\u0b0b") + buf.write("\u0b0c\3\2\2\2\u0b0c\u0b0d\3\2\2\2\u0b0d\u0b0e\5\u017e") + buf.write("\u00c0\2\u0b0e\u012d\3\2\2\2\u0b0f\u0b17\5\u0138\u009d") + buf.write("\2\u0b10\u0b12\7\65\2\2\u0b11\u0b10\3\2\2\2\u0b11\u0b12") + buf.write("\3\2\2\2\u0b12\u0b15\3\2\2\2\u0b13\u0b16\5\u017e\u00c0") + buf.write("\2\u0b14\u0b16\5\u0110\u0089\2\u0b15\u0b13\3\2\2\2\u0b15") + buf.write("\u0b14\3\2\2\2\u0b16\u0b18\3\2\2\2\u0b17\u0b11\3\2\2\2") + buf.write("\u0b17\u0b18\3\2\2\2\u0b18\u012f\3\2\2\2\u0b19\u0b1e\5") + buf.write("\u012e\u0098\2\u0b1a\u0b1b\7\3\2\2\u0b1b\u0b1d\5\u012e") + buf.write("\u0098\2\u0b1c\u0b1a\3\2\2\2\u0b1d\u0b20\3\2\2\2\u0b1e") + buf.write("\u0b1c\3\2\2\2\u0b1e\u0b1f\3\2\2\2\u0b1f\u0131\3\2\2\2") + buf.write("\u0b20\u0b1e\3\2\2\2\u0b21\u0b22\7\5\2\2\u0b22\u0b27\5") + buf.write("\u0134\u009b\2\u0b23\u0b24\7\3\2\2\u0b24\u0b26\5\u0134") + buf.write("\u009b\2\u0b25\u0b23\3\2\2\2\u0b26\u0b29\3\2\2\2\u0b27") + buf.write("\u0b25\3\2\2\2\u0b27\u0b28\3\2\2\2\u0b28\u0b2a\3\2\2\2") + buf.write("\u0b29\u0b27\3\2\2\2\u0b2a\u0b2b\7\6\2\2\u0b2b\u0133\3") + buf.write("\2\2\2\u0b2c\u0b3a\5\u017c\u00bf\2\u0b2d\u0b2e\5\u0182") + buf.write("\u00c2\2\u0b2e\u0b2f\7\5\2\2\u0b2f\u0b34\5\u0136\u009c") + buf.write("\2\u0b30\u0b31\7\3\2\2\u0b31\u0b33\5\u0136\u009c\2\u0b32") + buf.write("\u0b30\3\2\2\2\u0b33\u0b36\3\2\2\2\u0b34\u0b32\3\2\2\2") + buf.write("\u0b34\u0b35\3\2\2\2\u0b35\u0b37\3\2\2\2\u0b36\u0b34\3") + buf.write("\2\2\2\u0b37\u0b38\7\6\2\2\u0b38\u0b3a\3\2\2\2\u0b39\u0b2c") + buf.write("\3\2\2\2\u0b39\u0b2d\3\2\2\2\u0b3a\u0135\3\2\2\2\u0b3b") + buf.write("\u0b3e\5\u017c\u00bf\2\u0b3c\u0b3e\5\u0142\u00a2\2\u0b3d") + buf.write("\u0b3b\3\2\2\2\u0b3d\u0b3c\3\2\2\2\u0b3e\u0137\3\2\2\2") + buf.write("\u0b3f\u0b40\5\u013a\u009e\2\u0b40\u0139\3\2\2\2\u0b41") + buf.write("\u0b42\b\u009e\1\2\u0b42\u0b43\7\u00b8\2\2\u0b43\u0b4e") + buf.write("\5\u013a\u009e\7\u0b44\u0b45\7r\2\2\u0b45\u0b46\7\5\2") + buf.write("\2\u0b46\u0b47\5\u009aN\2\u0b47\u0b48\7\6\2\2\u0b48\u0b4e") + buf.write("\3\2\2\2\u0b49\u0b4b\5\u013e\u00a0\2\u0b4a\u0b4c\5\u013c") + buf.write("\u009f\2\u0b4b\u0b4a\3\2\2\2\u0b4b\u0b4c\3\2\2\2\u0b4c") + buf.write("\u0b4e\3\2\2\2\u0b4d\u0b41\3\2\2\2\u0b4d\u0b44\3\2\2\2") + buf.write("\u0b4d\u0b49\3\2\2\2\u0b4e\u0b57\3\2\2\2\u0b4f\u0b50\f") + buf.write("\4\2\2\u0b50\u0b51\7\60\2\2\u0b51\u0b56\5\u013a\u009e") + buf.write("\5\u0b52\u0b53\f\3\2\2\u0b53\u0b54\7\u00c0\2\2\u0b54\u0b56") + buf.write("\5\u013a\u009e\4\u0b55\u0b4f\3\2\2\2\u0b55\u0b52\3\2\2") + buf.write("\2\u0b56\u0b59\3\2\2\2\u0b57\u0b55\3\2\2\2\u0b57\u0b58") + buf.write("\3\2\2\2\u0b58\u013b\3\2\2\2\u0b59\u0b57\3\2\2\2\u0b5a") + buf.write("\u0b5c\7\u00b8\2\2\u0b5b\u0b5a\3\2\2\2\u0b5b\u0b5c\3\2") + buf.write("\2\2\u0b5c\u0b5d\3\2\2\2\u0b5d\u0b5e\79\2\2\u0b5e\u0b5f") + buf.write("\5\u013e\u00a0\2\u0b5f\u0b60\7\60\2\2\u0b60\u0b61\5\u013e") + buf.write("\u00a0\2\u0b61\u0bad\3\2\2\2\u0b62\u0b64\7\u00b8\2\2\u0b63") + buf.write("\u0b62\3\2\2\2\u0b63\u0b64\3\2\2\2\u0b64\u0b65\3\2\2\2") + buf.write("\u0b65\u0b66\7\u0090\2\2\u0b66\u0b67\7\5\2\2\u0b67\u0b6c") + buf.write("\5\u0138\u009d\2\u0b68\u0b69\7\3\2\2\u0b69\u0b6b\5\u0138") + buf.write("\u009d\2\u0b6a\u0b68\3\2\2\2\u0b6b\u0b6e\3\2\2\2\u0b6c") + buf.write("\u0b6a\3\2\2\2\u0b6c\u0b6d\3\2\2\2\u0b6d\u0b6f\3\2\2\2") + buf.write("\u0b6e\u0b6c\3\2\2\2\u0b6f\u0b70\7\6\2\2\u0b70\u0bad\3") + buf.write("\2\2\2\u0b71\u0b73\7\u00b8\2\2\u0b72\u0b71\3\2\2\2\u0b72") + buf.write("\u0b73\3\2\2\2\u0b73\u0b74\3\2\2\2\u0b74\u0b75\7\u0090") + buf.write("\2\2\u0b75\u0b76\7\5\2\2\u0b76\u0b77\5\u009aN\2\u0b77") + buf.write("\u0b78\7\6\2\2\u0b78\u0bad\3\2\2\2\u0b79\u0b7b\7\u00b8") + buf.write("\2\2\u0b7a\u0b79\3\2\2\2\u0b7a\u0b7b\3\2\2\2\u0b7b\u0b7c") + buf.write("\3\2\2\2\u0b7c\u0b7d\7\u00e4\2\2\u0b7d\u0bad\5\u013e\u00a0") + buf.write("\2\u0b7e\u0b80\7\u00b8\2\2\u0b7f\u0b7e\3\2\2\2\u0b7f\u0b80") + buf.write("\3\2\2\2\u0b80\u0b81\3\2\2\2\u0b81\u0b82\7\u00a3\2\2\u0b82") + buf.write("\u0b90\t\34\2\2\u0b83\u0b84\7\5\2\2\u0b84\u0b91\7\6\2") + buf.write("\2\u0b85\u0b86\7\5\2\2\u0b86\u0b8b\5\u0138\u009d\2\u0b87") + buf.write("\u0b88\7\3\2\2\u0b88\u0b8a\5\u0138\u009d\2\u0b89\u0b87") + buf.write("\3\2\2\2\u0b8a\u0b8d\3\2\2\2\u0b8b\u0b89\3\2\2\2\u0b8b") + buf.write("\u0b8c\3\2\2\2\u0b8c\u0b8e\3\2\2\2\u0b8d\u0b8b\3\2\2\2") + buf.write("\u0b8e\u0b8f\7\6\2\2\u0b8f\u0b91\3\2\2\2\u0b90\u0b83\3") + buf.write("\2\2\2\u0b90\u0b85\3\2\2\2\u0b91\u0bad\3\2\2\2\u0b92\u0b94") + buf.write("\7\u00b8\2\2\u0b93\u0b92\3\2\2\2\u0b93\u0b94\3\2\2\2\u0b94") + buf.write("\u0b95\3\2\2\2\u0b95\u0b96\7\u00a3\2\2\u0b96\u0b99\5\u013e") + buf.write("\u00a0\2\u0b97\u0b98\7n\2\2\u0b98\u0b9a\7\u013b\2\2\u0b99") + buf.write("\u0b97\3\2\2\2\u0b99\u0b9a\3\2\2\2\u0b9a\u0bad\3\2\2\2") + buf.write("\u0b9b\u0b9d\7\u009a\2\2\u0b9c\u0b9e\7\u00b8\2\2\u0b9d") + buf.write("\u0b9c\3\2\2\2\u0b9d\u0b9e\3\2\2\2\u0b9e\u0b9f\3\2\2\2") + buf.write("\u0b9f\u0bad\7\u00b9\2\2\u0ba0\u0ba2\7\u009a\2\2\u0ba1") + buf.write("\u0ba3\7\u00b8\2\2\u0ba2\u0ba1\3\2\2\2\u0ba2\u0ba3\3\2") + buf.write("\2\2\u0ba3\u0ba4\3\2\2\2\u0ba4\u0bad\t\35\2\2\u0ba5\u0ba7") + buf.write("\7\u009a\2\2\u0ba6\u0ba8\7\u00b8\2\2\u0ba7\u0ba6\3\2\2") + buf.write("\2\u0ba7\u0ba8\3\2\2\2\u0ba8\u0ba9\3\2\2\2\u0ba9\u0baa") + buf.write("\7i\2\2\u0baa\u0bab\7\u0083\2\2\u0bab\u0bad\5\u013e\u00a0") + buf.write("\2\u0bac\u0b5b\3\2\2\2\u0bac\u0b63\3\2\2\2\u0bac\u0b72") + buf.write("\3\2\2\2\u0bac\u0b7a\3\2\2\2\u0bac\u0b7f\3\2\2\2\u0bac") + buf.write("\u0b93\3\2\2\2\u0bac\u0b9b\3\2\2\2\u0bac\u0ba0\3\2\2\2") + buf.write("\u0bac\u0ba5\3\2\2\2\u0bad\u013d\3\2\2\2\u0bae\u0baf\b") + buf.write("\u00a0\1\2\u0baf\u0bb3\5\u0140\u00a1\2\u0bb0\u0bb1\t\36") + buf.write("\2\2\u0bb1\u0bb3\5\u013e\u00a0\t\u0bb2\u0bae\3\2\2\2\u0bb2") + buf.write("\u0bb0\3\2\2\2\u0bb3\u0bc9\3\2\2\2\u0bb4\u0bb5\f\b\2\2") + buf.write("\u0bb5\u0bb6\t\37\2\2\u0bb6\u0bc8\5\u013e\u00a0\t\u0bb7") + buf.write("\u0bb8\f\7\2\2\u0bb8\u0bb9\t \2\2\u0bb9\u0bc8\5\u013e") + buf.write("\u00a0\b\u0bba\u0bbb\f\6\2\2\u0bbb\u0bbc\7\u0137\2\2\u0bbc") + buf.write("\u0bc8\5\u013e\u00a0\7\u0bbd\u0bbe\f\5\2\2\u0bbe\u0bbf") + buf.write("\7\u013a\2\2\u0bbf\u0bc8\5\u013e\u00a0\6\u0bc0\u0bc1\f") + buf.write("\4\2\2\u0bc1\u0bc2\7\u0138\2\2\u0bc2\u0bc8\5\u013e\u00a0") + buf.write("\5\u0bc3\u0bc4\f\3\2\2\u0bc4\u0bc5\5\u0144\u00a3\2\u0bc5") + buf.write("\u0bc6\5\u013e\u00a0\4\u0bc6\u0bc8\3\2\2\2\u0bc7\u0bb4") + buf.write("\3\2\2\2\u0bc7\u0bb7\3\2\2\2\u0bc7\u0bba\3\2\2\2\u0bc7") + buf.write("\u0bbd\3\2\2\2\u0bc7\u0bc0\3\2\2\2\u0bc7\u0bc3\3\2\2\2") + buf.write("\u0bc8\u0bcb\3\2\2\2\u0bc9\u0bc7\3\2\2\2\u0bc9\u0bca\3") + buf.write("\2\2\2\u0bca\u013f\3\2\2\2\u0bcb\u0bc9\3\2\2\2\u0bcc\u0bcd") + buf.write("\b\u00a1\1\2\u0bcd\u0c85\t!\2\2\u0bce\u0bd0\7@\2\2\u0bcf") + buf.write("\u0bd1\5\u016c\u00b7\2\u0bd0\u0bcf\3\2\2\2\u0bd1\u0bd2") + buf.write("\3\2\2\2\u0bd2\u0bd0\3\2\2\2\u0bd2\u0bd3\3\2\2\2\u0bd3") + buf.write("\u0bd6\3\2\2\2\u0bd4\u0bd5\7l\2\2\u0bd5\u0bd7\5\u0138") + buf.write("\u009d\2\u0bd6\u0bd4\3\2\2\2\u0bd6\u0bd7\3\2\2\2\u0bd7") + buf.write("\u0bd8\3\2\2\2\u0bd8\u0bd9\7m\2\2\u0bd9\u0c85\3\2\2\2") + buf.write("\u0bda\u0bdb\7@\2\2\u0bdb\u0bdd\5\u0138\u009d\2\u0bdc") + buf.write("\u0bde\5\u016c\u00b7\2\u0bdd\u0bdc\3\2\2\2\u0bde\u0bdf") + buf.write("\3\2\2\2\u0bdf\u0bdd\3\2\2\2\u0bdf\u0be0\3\2\2\2\u0be0") + buf.write("\u0be3\3\2\2\2\u0be1\u0be2\7l\2\2\u0be2\u0be4\5\u0138") + buf.write("\u009d\2\u0be3\u0be1\3\2\2\2\u0be3\u0be4\3\2\2\2\u0be4") + buf.write("\u0be5\3\2\2\2\u0be5\u0be6\7m\2\2\u0be6\u0c85\3\2\2\2") + buf.write("\u0be7\u0be8\7A\2\2\u0be8\u0be9\7\5\2\2\u0be9\u0bea\5") + buf.write("\u0138\u009d\2\u0bea\u0beb\7\65\2\2\u0beb\u0bec\5\u015e") + buf.write("\u00b0\2\u0bec\u0bed\7\6\2\2\u0bed\u0c85\3\2\2\2\u0bee") + buf.write("\u0bef\7\u00ff\2\2\u0bef\u0bf8\7\5\2\2\u0bf0\u0bf5\5\u012e") + buf.write("\u0098\2\u0bf1\u0bf2\7\3\2\2\u0bf2\u0bf4\5\u012e\u0098") + buf.write("\2\u0bf3\u0bf1\3\2\2\2\u0bf4\u0bf7\3\2\2\2\u0bf5\u0bf3") + buf.write("\3\2\2\2\u0bf5\u0bf6\3\2\2\2\u0bf6\u0bf9\3\2\2\2\u0bf7") + buf.write("\u0bf5\3\2\2\2\u0bf8\u0bf0\3\2\2\2\u0bf8\u0bf9\3\2\2\2") + buf.write("\u0bf9\u0bfa\3\2\2\2\u0bfa\u0c85\7\6\2\2\u0bfb\u0bfc\7") + buf.write("}\2\2\u0bfc\u0bfd\7\5\2\2\u0bfd\u0c00\5\u0138\u009d\2") + buf.write("\u0bfe\u0bff\7\u008e\2\2\u0bff\u0c01\7\u00ba\2\2\u0c00") + buf.write("\u0bfe\3\2\2\2\u0c00\u0c01\3\2\2\2\u0c01\u0c02\3\2\2\2") + buf.write("\u0c02\u0c03\7\6\2\2\u0c03\u0c85\3\2\2\2\u0c04\u0c05\7") + buf.write("\u009e\2\2\u0c05\u0c06\7\5\2\2\u0c06\u0c09\5\u0138\u009d") + buf.write("\2\u0c07\u0c08\7\u008e\2\2\u0c08\u0c0a\7\u00ba\2\2\u0c09") + buf.write("\u0c07\3\2\2\2\u0c09\u0c0a\3\2\2\2\u0c0a\u0c0b\3\2\2\2") + buf.write("\u0c0b\u0c0c\7\6\2\2\u0c0c\u0c85\3\2\2\2\u0c0d\u0c0e\7") + buf.write("\u00cf\2\2\u0c0e\u0c0f\7\5\2\2\u0c0f\u0c10\5\u013e\u00a0") + buf.write("\2\u0c10\u0c11\7\u0090\2\2\u0c11\u0c12\5\u013e\u00a0\2") + buf.write("\u0c12\u0c13\7\6\2\2\u0c13\u0c85\3\2\2\2\u0c14\u0c85\5") + buf.write("\u0142\u00a2\2\u0c15\u0c85\7\u0132\2\2\u0c16\u0c17\5\u017c") + buf.write("\u00bf\2\u0c17\u0c18\7\7\2\2\u0c18\u0c19\7\u0132\2\2\u0c19") + buf.write("\u0c85\3\2\2\2\u0c1a\u0c1b\7\5\2\2\u0c1b\u0c1e\5\u012e") + buf.write("\u0098\2\u0c1c\u0c1d\7\3\2\2\u0c1d\u0c1f\5\u012e\u0098") + buf.write("\2\u0c1e\u0c1c\3\2\2\2\u0c1f\u0c20\3\2\2\2\u0c20\u0c1e") + buf.write("\3\2\2\2\u0c20\u0c21\3\2\2\2\u0c21\u0c22\3\2\2\2\u0c22") + buf.write("\u0c23\7\6\2\2\u0c23\u0c85\3\2\2\2\u0c24\u0c25\7\5\2\2") + buf.write("\u0c25\u0c26\5\u009aN\2\u0c26\u0c27\7\6\2\2\u0c27\u0c85") + buf.write("\3\2\2\2\u0c28\u0c29\5\u017a\u00be\2\u0c29\u0c35\7\5\2") + buf.write("\2\u0c2a\u0c2c\5\u0102\u0082\2\u0c2b\u0c2a\3\2\2\2\u0c2b") + buf.write("\u0c2c\3\2\2\2\u0c2c\u0c2d\3\2\2\2\u0c2d\u0c32\5\u0138") + buf.write("\u009d\2\u0c2e\u0c2f\7\3\2\2\u0c2f\u0c31\5\u0138\u009d") + buf.write("\2\u0c30\u0c2e\3\2\2\2\u0c31\u0c34\3\2\2\2\u0c32\u0c30") + buf.write("\3\2\2\2\u0c32\u0c33\3\2\2\2\u0c33\u0c36\3\2\2\2\u0c34") + buf.write("\u0c32\3\2\2\2\u0c35\u0c2b\3\2\2\2\u0c35\u0c36\3\2\2\2") + buf.write("\u0c36\u0c37\3\2\2\2\u0c37\u0c3e\7\6\2\2\u0c38\u0c39\7") + buf.write("{\2\2\u0c39\u0c3a\7\5\2\2\u0c3a\u0c3b\7\u0123\2\2\u0c3b") + buf.write("\u0c3c\5\u013a\u009e\2\u0c3c\u0c3d\7\6\2\2\u0c3d\u0c3f") + buf.write("\3\2\2\2\u0c3e\u0c38\3\2\2\2\u0c3e\u0c3f\3\2\2\2\u0c3f") + buf.write("\u0c42\3\2\2\2\u0c40\u0c41\7\u00c5\2\2\u0c41\u0c43\5\u0172") + buf.write("\u00ba\2\u0c42\u0c40\3\2\2\2\u0c42\u0c43\3\2\2\2\u0c43") + buf.write("\u0c85\3\2\2\2\u0c44\u0c45\5\u0182\u00c2\2\u0c45\u0c46") + buf.write("\7\22\2\2\u0c46\u0c47\5\u0138\u009d\2\u0c47\u0c85\3\2") + buf.write("\2\2\u0c48\u0c49\7\5\2\2\u0c49\u0c4c\5\u0182\u00c2\2\u0c4a") + buf.write("\u0c4b\7\3\2\2\u0c4b\u0c4d\5\u0182\u00c2\2\u0c4c\u0c4a") + buf.write("\3\2\2\2\u0c4d\u0c4e\3\2\2\2\u0c4e\u0c4c\3\2\2\2\u0c4e") + buf.write("\u0c4f\3\2\2\2\u0c4f\u0c50\3\2\2\2\u0c50\u0c51\7\6\2\2") + buf.write("\u0c51\u0c52\7\22\2\2\u0c52\u0c53\5\u0138\u009d\2\u0c53") + buf.write("\u0c85\3\2\2\2\u0c54\u0c85\5\u0182\u00c2\2\u0c55\u0c56") + buf.write("\7\5\2\2\u0c56\u0c57\5\u0138\u009d\2\u0c57\u0c58\7\6\2") + buf.write("\2\u0c58\u0c85\3\2\2\2\u0c59\u0c5a\7w\2\2\u0c5a\u0c5b") + buf.write("\7\5\2\2\u0c5b\u0c5c\5\u0182\u00c2\2\u0c5c\u0c5d\7\u0083") + buf.write("\2\2\u0c5d\u0c5e\5\u013e\u00a0\2\u0c5e\u0c5f\7\6\2\2\u0c5f") + buf.write("\u0c85\3\2\2\2\u0c60\u0c61\t\"\2\2\u0c61\u0c62\7\5\2\2") + buf.write("\u0c62\u0c63\5\u013e\u00a0\2\u0c63\u0c64\t#\2\2\u0c64") + buf.write("\u0c67\5\u013e\u00a0\2\u0c65\u0c66\t$\2\2\u0c66\u0c68") + buf.write("\5\u013e\u00a0\2\u0c67\u0c65\3\2\2\2\u0c67\u0c68\3\2\2") + buf.write("\2\u0c68\u0c69\3\2\2\2\u0c69\u0c6a\7\6\2\2\u0c6a\u0c85") + buf.write("\3\2\2\2\u0c6b\u0c6c\7\u010f\2\2\u0c6c\u0c6e\7\5\2\2\u0c6d") + buf.write("\u0c6f\t%\2\2\u0c6e\u0c6d\3\2\2\2\u0c6e\u0c6f\3\2\2\2") + buf.write("\u0c6f\u0c71\3\2\2\2\u0c70\u0c72\5\u013e\u00a0\2\u0c71") + buf.write("\u0c70\3\2\2\2\u0c71\u0c72\3\2\2\2\u0c72\u0c73\3\2\2\2") + buf.write("\u0c73\u0c74\7\u0083\2\2\u0c74\u0c75\5\u013e\u00a0\2\u0c75") + buf.write("\u0c76\7\6\2\2\u0c76\u0c85\3\2\2\2\u0c77\u0c78\7\u00c7") + buf.write("\2\2\u0c78\u0c79\7\5\2\2\u0c79\u0c7a\5\u013e\u00a0\2\u0c7a") + buf.write("\u0c7b\7\u00ce\2\2\u0c7b\u0c7c\5\u013e\u00a0\2\u0c7c\u0c7d") + buf.write("\7\u0083\2\2\u0c7d\u0c80\5\u013e\u00a0\2\u0c7e\u0c7f\7") + buf.write("\177\2\2\u0c7f\u0c81\5\u013e\u00a0\2\u0c80\u0c7e\3\2\2") + buf.write("\2\u0c80\u0c81\3\2\2\2\u0c81\u0c82\3\2\2\2\u0c82\u0c83") + buf.write("\7\6\2\2\u0c83\u0c85\3\2\2\2\u0c84\u0bcc\3\2\2\2\u0c84") + buf.write("\u0bce\3\2\2\2\u0c84\u0bda\3\2\2\2\u0c84\u0be7\3\2\2\2") + buf.write("\u0c84\u0bee\3\2\2\2\u0c84\u0bfb\3\2\2\2\u0c84\u0c04\3") + buf.write("\2\2\2\u0c84\u0c0d\3\2\2\2\u0c84\u0c14\3\2\2\2\u0c84\u0c15") + buf.write("\3\2\2\2\u0c84\u0c16\3\2\2\2\u0c84\u0c1a\3\2\2\2\u0c84") + buf.write("\u0c24\3\2\2\2\u0c84\u0c28\3\2\2\2\u0c84\u0c44\3\2\2\2") + buf.write("\u0c84\u0c48\3\2\2\2\u0c84\u0c54\3\2\2\2\u0c84\u0c55\3") + buf.write("\2\2\2\u0c84\u0c59\3\2\2\2\u0c84\u0c60\3\2\2\2\u0c84\u0c6b") + buf.write("\3\2\2\2\u0c84\u0c77\3\2\2\2\u0c85\u0c90\3\2\2\2\u0c86") + buf.write("\u0c87\f\n\2\2\u0c87\u0c88\7\b\2\2\u0c88\u0c89\5\u013e") + buf.write("\u00a0\2\u0c89\u0c8a\7\t\2\2\u0c8a\u0c8f\3\2\2\2\u0c8b") + buf.write("\u0c8c\f\b\2\2\u0c8c\u0c8d\7\7\2\2\u0c8d\u0c8f\5\u0182") + buf.write("\u00c2\2\u0c8e\u0c86\3\2\2\2\u0c8e\u0c8b\3\2\2\2\u0c8f") + buf.write("\u0c92\3\2\2\2\u0c90\u0c8e\3\2\2\2\u0c90\u0c91\3\2\2\2") + buf.write("\u0c91\u0141\3\2\2\2\u0c92\u0c90\3\2\2\2\u0c93\u0ca0\7") + buf.write("\u00b9\2\2\u0c94\u0ca0\5\u014e\u00a8\2\u0c95\u0c96\5\u0182") + buf.write("\u00c2\2\u0c96\u0c97\7\u013b\2\2\u0c97\u0ca0\3\2\2\2\u0c98") + buf.write("\u0ca0\5\u0188\u00c5\2\u0c99\u0ca0\5\u014c\u00a7\2\u0c9a") + buf.write("\u0c9c\7\u013b\2\2\u0c9b\u0c9a\3\2\2\2\u0c9c\u0c9d\3\2") + buf.write("\2\2\u0c9d\u0c9b\3\2\2\2\u0c9d\u0c9e\3\2\2\2\u0c9e\u0ca0") + buf.write("\3\2\2\2\u0c9f\u0c93\3\2\2\2\u0c9f\u0c94\3\2\2\2\u0c9f") + buf.write("\u0c95\3\2\2\2\u0c9f\u0c98\3\2\2\2\u0c9f\u0c99\3\2\2\2") + buf.write("\u0c9f\u0c9b\3\2\2\2\u0ca0\u0143\3\2\2\2\u0ca1\u0caa\5") + buf.write("\u0146\u00a4\2\u0ca2\u0caa\7\u012a\2\2\u0ca3\u0caa\7\u012b") + buf.write("\2\2\u0ca4\u0caa\7\u012c\2\2\u0ca5\u0caa\7\u012d\2\2\u0ca6") + buf.write("\u0caa\7\u012e\2\2\u0ca7\u0caa\7\u012f\2\2\u0ca8\u0caa") + buf.write("\7\u0129\2\2\u0ca9\u0ca1\3\2\2\2\u0ca9\u0ca2\3\2\2\2\u0ca9") + buf.write("\u0ca3\3\2\2\2\u0ca9\u0ca4\3\2\2\2\u0ca9\u0ca5\3\2\2\2") + buf.write("\u0ca9\u0ca6\3\2\2\2\u0ca9\u0ca7\3\2\2\2\u0ca9\u0ca8\3") + buf.write("\2\2\2\u0caa\u0145\3\2\2\2\u0cab\u0cac\t&\2\2\u0cac\u0147") + buf.write("\3\2\2\2\u0cad\u0cae\t\'\2\2\u0cae\u0149\3\2\2\2\u0caf") + buf.write("\u0cb0\t(\2\2\u0cb0\u014b\3\2\2\2\u0cb1\u0cb2\t)\2\2\u0cb2") + buf.write("\u014d\3\2\2\2\u0cb3\u0cb6\7\u0098\2\2\u0cb4\u0cb7\5\u0150") + buf.write("\u00a9\2\u0cb5\u0cb7\5\u0154\u00ab\2\u0cb6\u0cb4\3\2\2") + buf.write("\2\u0cb6\u0cb5\3\2\2\2\u0cb6\u0cb7\3\2\2\2\u0cb7\u014f") + buf.write("\3\2\2\2\u0cb8\u0cba\5\u0152\u00aa\2\u0cb9\u0cbb\5\u0156") + buf.write("\u00ac\2\u0cba\u0cb9\3\2\2\2\u0cba\u0cbb\3\2\2\2\u0cbb") + buf.write("\u0151\3\2\2\2\u0cbc\u0cbd\5\u0158\u00ad\2\u0cbd\u0cbe") + buf.write("\5\u015a\u00ae\2\u0cbe\u0cc0\3\2\2\2\u0cbf\u0cbc\3\2\2") + buf.write("\2\u0cc0\u0cc1\3\2\2\2\u0cc1\u0cbf\3\2\2\2\u0cc1\u0cc2") + buf.write("\3\2\2\2\u0cc2\u0153\3\2\2\2\u0cc3\u0cc6\5\u0156\u00ac") + buf.write("\2\u0cc4\u0cc7\5\u0152\u00aa\2\u0cc5\u0cc7\5\u0156\u00ac") + buf.write("\2\u0cc6\u0cc4\3\2\2\2\u0cc6\u0cc5\3\2\2\2\u0cc6\u0cc7") + buf.write("\3\2\2\2\u0cc7\u0155\3\2\2\2\u0cc8\u0cc9\5\u0158\u00ad") + buf.write("\2\u0cc9\u0cca\5\u015a\u00ae\2\u0cca\u0ccb\7\u0109\2\2") + buf.write("\u0ccb\u0ccc\5\u015a\u00ae\2\u0ccc\u0157\3\2\2\2\u0ccd") + buf.write("\u0ccf\t*\2\2\u0cce\u0ccd\3\2\2\2\u0cce\u0ccf\3\2\2\2") + buf.write("\u0ccf\u0cd0\3\2\2\2\u0cd0\u0cd3\t\33\2\2\u0cd1\u0cd3") + buf.write("\7\u013b\2\2\u0cd2\u0cce\3\2\2\2\u0cd2\u0cd1\3\2\2\2\u0cd3") + buf.write("\u0159\3\2\2\2\u0cd4\u0cdc\7_\2\2\u0cd5\u0cdc\7\u008c") + buf.write("\2\2\u0cd6\u0cdc\7\u00b1\2\2\u0cd7\u0cdc\7\u00b2\2\2\u0cd8") + buf.write("\u0cdc\7\u00ec\2\2\u0cd9\u0cdc\7\u0126\2\2\u0cda\u0cdc") + buf.write("\5\u0182\u00c2\2\u0cdb\u0cd4\3\2\2\2\u0cdb\u0cd5\3\2\2") + buf.write("\2\u0cdb\u0cd6\3\2\2\2\u0cdb\u0cd7\3\2\2\2\u0cdb\u0cd8") + buf.write("\3\2\2\2\u0cdb\u0cd9\3\2\2\2\u0cdb\u0cda\3\2\2\2\u0cdc") + buf.write("\u015b\3\2\2\2\u0cdd\u0ce1\7}\2\2\u0cde\u0cdf\7,\2\2\u0cdf") + buf.write("\u0ce1\5\u017e\u00c0\2\u0ce0\u0cdd\3\2\2\2\u0ce0\u0cde") + buf.write("\3\2\2\2\u0ce1\u015d\3\2\2\2\u0ce2\u0ce3\7\64\2\2\u0ce3") + buf.write("\u0ce4\7\u012c\2\2\u0ce4\u0ce5\5\u015e\u00b0\2\u0ce5\u0ce6") + buf.write("\7\u012e\2\2\u0ce6\u0d05\3\2\2\2\u0ce7\u0ce8\7\u00ae\2") + buf.write("\2\u0ce8\u0ce9\7\u012c\2\2\u0ce9\u0cea\5\u015e\u00b0\2") + buf.write("\u0cea\u0ceb\7\3\2\2\u0ceb\u0cec\5\u015e\u00b0\2\u0cec") + buf.write("\u0ced\7\u012e\2\2\u0ced\u0d05\3\2\2\2\u0cee\u0cf5\7\u00ff") + buf.write("\2\2\u0cef\u0cf1\7\u012c\2\2\u0cf0\u0cf2\5\u0168\u00b5") + buf.write("\2\u0cf1\u0cf0\3\2\2\2\u0cf1\u0cf2\3\2\2\2\u0cf2\u0cf3") + buf.write("\3\2\2\2\u0cf3\u0cf6\7\u012e\2\2\u0cf4\u0cf6\7\u012a\2") + buf.write("\2\u0cf5\u0cef\3\2\2\2\u0cf5\u0cf4\3\2\2\2\u0cf6\u0d05") + buf.write("\3\2\2\2\u0cf7\u0d02\5\u0182\u00c2\2\u0cf8\u0cf9\7\5\2") + buf.write("\2\u0cf9\u0cfe\7\u013f\2\2\u0cfa\u0cfb\7\3\2\2\u0cfb\u0cfd") + buf.write("\7\u013f\2\2\u0cfc\u0cfa\3\2\2\2\u0cfd\u0d00\3\2\2\2\u0cfe") + buf.write("\u0cfc\3\2\2\2\u0cfe\u0cff\3\2\2\2\u0cff\u0d01\3\2\2\2") + buf.write("\u0d00\u0cfe\3\2\2\2\u0d01\u0d03\7\6\2\2\u0d02\u0cf8\3") + buf.write("\2\2\2\u0d02\u0d03\3\2\2\2\u0d03\u0d05\3\2\2\2\u0d04\u0ce2") + buf.write("\3\2\2\2\u0d04\u0ce7\3\2\2\2\u0d04\u0cee\3\2\2\2\u0d04") + buf.write("\u0cf7\3\2\2\2\u0d05\u015f\3\2\2\2\u0d06\u0d0b\5\u0162") + buf.write("\u00b2\2\u0d07\u0d08\7\3\2\2\u0d08\u0d0a\5\u0162\u00b2") + buf.write("\2\u0d09\u0d07\3\2\2\2\u0d0a\u0d0d\3\2\2\2\u0d0b\u0d09") + buf.write("\3\2\2\2\u0d0b\u0d0c\3\2\2\2\u0d0c\u0161\3\2\2\2\u0d0d") + buf.write("\u0d0b\3\2\2\2\u0d0e\u0d0f\5\u0128\u0095\2\u0d0f\u0d12") + buf.write("\5\u015e\u00b0\2\u0d10\u0d11\7\u00b8\2\2\u0d11\u0d13\7") + buf.write("\u00b9\2\2\u0d12\u0d10\3\2\2\2\u0d12\u0d13\3\2\2\2\u0d13") + buf.write("\u0d15\3\2\2\2\u0d14\u0d16\5\u0098M\2\u0d15\u0d14\3\2") + buf.write("\2\2\u0d15\u0d16\3\2\2\2\u0d16\u0d18\3\2\2\2\u0d17\u0d19") + buf.write("\5\u015c\u00af\2\u0d18\u0d17\3\2\2\2\u0d18\u0d19\3\2\2") + buf.write("\2\u0d19\u0163\3\2\2\2\u0d1a\u0d1f\5\u0166\u00b4\2\u0d1b") + buf.write("\u0d1c\7\3\2\2\u0d1c\u0d1e\5\u0166\u00b4\2\u0d1d\u0d1b") + buf.write("\3\2\2\2\u0d1e\u0d21\3\2\2\2\u0d1f\u0d1d\3\2\2\2\u0d1f") + buf.write("\u0d20\3\2\2\2\u0d20\u0165\3\2\2\2\u0d21\u0d1f\3\2\2\2") + buf.write("\u0d22\u0d23\5\u017e\u00c0\2\u0d23\u0d26\5\u015e\u00b0") + buf.write("\2\u0d24\u0d25\7\u00b8\2\2\u0d25\u0d27\7\u00b9\2\2\u0d26") + buf.write("\u0d24\3\2\2\2\u0d26\u0d27\3\2\2\2\u0d27\u0d29\3\2\2\2") + buf.write("\u0d28\u0d2a\5\u0098M\2\u0d29\u0d28\3\2\2\2\u0d29\u0d2a") + buf.write("\3\2\2\2\u0d2a\u0167\3\2\2\2\u0d2b\u0d30\5\u016a\u00b6") + buf.write("\2\u0d2c\u0d2d\7\3\2\2\u0d2d\u0d2f\5\u016a\u00b6\2\u0d2e") + buf.write("\u0d2c\3\2\2\2\u0d2f\u0d32\3\2\2\2\u0d30\u0d2e\3\2\2\2") + buf.write("\u0d30\u0d31\3\2\2\2\u0d31\u0169\3\2\2\2\u0d32\u0d30\3") + buf.write("\2\2\2\u0d33\u0d34\5\u0182\u00c2\2\u0d34\u0d35\7\4\2\2") + buf.write("\u0d35\u0d38\5\u015e\u00b0\2\u0d36\u0d37\7\u00b8\2\2\u0d37") + buf.write("\u0d39\7\u00b9\2\2\u0d38\u0d36\3\2\2\2\u0d38\u0d39\3\2") + buf.write("\2\2\u0d39\u0d3b\3\2\2\2\u0d3a\u0d3c\5\u0098M\2\u0d3b") + buf.write("\u0d3a\3\2\2\2\u0d3b\u0d3c\3\2\2\2\u0d3c\u016b\3\2\2\2") + buf.write("\u0d3d\u0d3e\7\u0122\2\2\u0d3e\u0d3f\5\u0138\u009d\2\u0d3f") + buf.write("\u0d40\7\u0108\2\2\u0d40\u0d41\5\u0138\u009d\2\u0d41\u016d") + buf.write("\3\2\2\2\u0d42\u0d43\7\u0124\2\2\u0d43\u0d48\5\u0170\u00b9") + buf.write("\2\u0d44\u0d45\7\3\2\2\u0d45\u0d47\5\u0170\u00b9\2\u0d46") + buf.write("\u0d44\3\2\2\2\u0d47\u0d4a\3\2\2\2\u0d48\u0d46\3\2\2\2") + buf.write("\u0d48\u0d49\3\2\2\2\u0d49\u016f\3\2\2\2\u0d4a\u0d48\3") + buf.write("\2\2\2\u0d4b\u0d4c\5\u017e\u00c0\2\u0d4c\u0d4d\7\65\2") + buf.write("\2\u0d4d\u0d4e\5\u0172\u00ba\2\u0d4e\u0171\3\2\2\2\u0d4f") + buf.write("\u0d7e\5\u017e\u00c0\2\u0d50\u0d51\7\5\2\2\u0d51\u0d52") + buf.write("\5\u017e\u00c0\2\u0d52\u0d53\7\6\2\2\u0d53\u0d7e\3\2\2") + buf.write("\2\u0d54\u0d77\7\5\2\2\u0d55\u0d56\7E\2\2\u0d56\u0d57") + buf.write("\7=\2\2\u0d57\u0d5c\5\u0138\u009d\2\u0d58\u0d59\7\3\2") + buf.write("\2\u0d59\u0d5b\5\u0138\u009d\2\u0d5a\u0d58\3\2\2\2\u0d5b") + buf.write("\u0d5e\3\2\2\2\u0d5c\u0d5a\3\2\2\2\u0d5c\u0d5d\3\2\2\2") + buf.write("\u0d5d\u0d78\3\2\2\2\u0d5e\u0d5c\3\2\2\2\u0d5f\u0d60\t") + buf.write("+\2\2\u0d60\u0d61\7=\2\2\u0d61\u0d66\5\u0138\u009d\2\u0d62") + buf.write("\u0d63\7\3\2\2\u0d63\u0d65\5\u0138\u009d\2\u0d64\u0d62") + buf.write("\3\2\2\2\u0d65\u0d68\3\2\2\2\u0d66\u0d64\3\2\2\2\u0d66") + buf.write("\u0d67\3\2\2\2\u0d67\u0d6a\3\2\2\2\u0d68\u0d66\3\2\2\2") + buf.write("\u0d69\u0d5f\3\2\2\2\u0d69\u0d6a\3\2\2\2\u0d6a\u0d75\3") + buf.write("\2\2\2\u0d6b\u0d6c\t,\2\2\u0d6c\u0d6d\7=\2\2\u0d6d\u0d72") + buf.write("\5\u00d0i\2\u0d6e\u0d6f\7\3\2\2\u0d6f\u0d71\5\u00d0i\2") + buf.write("\u0d70\u0d6e\3\2\2\2\u0d71\u0d74\3\2\2\2\u0d72\u0d70\3") + buf.write("\2\2\2\u0d72\u0d73\3\2\2\2\u0d73\u0d76\3\2\2\2\u0d74\u0d72") + buf.write("\3\2\2\2\u0d75\u0d6b\3\2\2\2\u0d75\u0d76\3\2\2\2\u0d76") + buf.write("\u0d78\3\2\2\2\u0d77\u0d55\3\2\2\2\u0d77\u0d69\3\2\2\2") + buf.write("\u0d78\u0d7a\3\2\2\2\u0d79\u0d7b\5\u0174\u00bb\2\u0d7a") + buf.write("\u0d79\3\2\2\2\u0d7a\u0d7b\3\2\2\2\u0d7b\u0d7c\3\2\2\2") + buf.write("\u0d7c\u0d7e\7\6\2\2\u0d7d\u0d4f\3\2\2\2\u0d7d\u0d50\3") + buf.write("\2\2\2\u0d7d\u0d54\3\2\2\2\u0d7e\u0173\3\2\2\2\u0d7f\u0d80") + buf.write("\7\u00d6\2\2\u0d80\u0d90\5\u0176\u00bc\2\u0d81\u0d82\7") + buf.write("\u00ea\2\2\u0d82\u0d90\5\u0176\u00bc\2\u0d83\u0d84\7\u00d6") + buf.write("\2\2\u0d84\u0d85\79\2\2\u0d85\u0d86\5\u0176\u00bc\2\u0d86") + buf.write("\u0d87\7\60\2\2\u0d87\u0d88\5\u0176\u00bc\2\u0d88\u0d90") + buf.write("\3\2\2\2\u0d89\u0d8a\7\u00ea\2\2\u0d8a\u0d8b\79\2\2\u0d8b") + buf.write("\u0d8c\5\u0176\u00bc\2\u0d8c\u0d8d\7\60\2\2\u0d8d\u0d8e") + buf.write("\5\u0176\u00bc\2\u0d8e\u0d90\3\2\2\2\u0d8f\u0d7f\3\2\2") + buf.write("\2\u0d8f\u0d81\3\2\2\2\u0d8f\u0d83\3\2\2\2\u0d8f\u0d89") + buf.write("\3\2\2\2\u0d90\u0175\3\2\2\2\u0d91\u0d92\7\u0114\2\2\u0d92") + buf.write("\u0d99\t-\2\2\u0d93\u0d94\7W\2\2\u0d94\u0d99\7\u00e9\2") + buf.write("\2\u0d95\u0d96\5\u0138\u009d\2\u0d96\u0d97\t-\2\2\u0d97") + buf.write("\u0d99\3\2\2\2\u0d98\u0d91\3\2\2\2\u0d98\u0d93\3\2\2\2") + buf.write("\u0d98\u0d95\3\2\2\2\u0d99\u0177\3\2\2\2\u0d9a\u0d9f\5") + buf.write("\u017c\u00bf\2\u0d9b\u0d9c\7\3\2\2\u0d9c\u0d9e\5\u017c") + buf.write("\u00bf\2\u0d9d\u0d9b\3\2\2\2\u0d9e\u0da1\3\2\2\2\u0d9f") + buf.write("\u0d9d\3\2\2\2\u0d9f\u0da0\3\2\2\2\u0da0\u0179\3\2\2\2") + buf.write("\u0da1\u0d9f\3\2\2\2\u0da2\u0da7\5\u017c\u00bf\2\u0da3") + buf.write("\u0da7\7{\2\2\u0da4\u0da7\7\u00a2\2\2\u0da5\u0da7\7\u00e3") + buf.write("\2\2\u0da6\u0da2\3\2\2\2\u0da6\u0da3\3\2\2\2\u0da6\u0da4") + buf.write("\3\2\2\2\u0da6\u0da5\3\2\2\2\u0da7\u017b\3\2\2\2\u0da8") + buf.write("\u0dad\5\u0182\u00c2\2\u0da9\u0daa\7\7\2\2\u0daa\u0dac") + buf.write("\5\u0182\u00c2\2\u0dab\u0da9\3\2\2\2\u0dac\u0daf\3\2\2") + buf.write("\2\u0dad\u0dab\3\2\2\2\u0dad\u0dae\3\2\2\2\u0dae\u017d") + buf.write("\3\2\2\2\u0daf\u0dad\3\2\2\2\u0db0\u0db1\5\u0182\u00c2") + buf.write("\2\u0db1\u0db2\5\u0180\u00c1\2\u0db2\u017f\3\2\2\2\u0db3") + buf.write("\u0db4\7\u0131\2\2\u0db4\u0db6\5\u0182\u00c2\2\u0db5\u0db3") + buf.write("\3\2\2\2\u0db6\u0db7\3\2\2\2\u0db7\u0db5\3\2\2\2\u0db7") + buf.write("\u0db8\3\2\2\2\u0db8\u0dbb\3\2\2\2\u0db9\u0dbb\3\2\2\2") + buf.write("\u0dba\u0db5\3\2\2\2\u0dba\u0db9\3\2\2\2\u0dbb\u0181\3") + buf.write("\2\2\2\u0dbc\u0dc0\5\u0184\u00c3\2\u0dbd\u0dbe\6\u00c2") + buf.write("\24\2\u0dbe\u0dc0\5\u018e\u00c8\2\u0dbf\u0dbc\3\2\2\2") + buf.write("\u0dbf\u0dbd\3\2\2\2\u0dc0\u0183\3\2\2\2\u0dc1\u0dc8\7") + buf.write("\u0144\2\2\u0dc2\u0dc8\5\u0186\u00c4\2\u0dc3\u0dc4\6\u00c3") + buf.write("\25\2\u0dc4\u0dc8\5\u018c\u00c7\2\u0dc5\u0dc6\6\u00c3") + buf.write("\26\2\u0dc6\u0dc8\5\u0190\u00c9\2\u0dc7\u0dc1\3\2\2\2") + buf.write("\u0dc7\u0dc2\3\2\2\2\u0dc7\u0dc3\3\2\2\2\u0dc7\u0dc5\3") + buf.write("\2\2\2\u0dc8\u0185\3\2\2\2\u0dc9\u0dca\7\u0145\2\2\u0dca") + buf.write("\u0187\3\2\2\2\u0dcb\u0dcd\6\u00c5\27\2\u0dcc\u0dce\7") + buf.write("\u0131\2\2\u0dcd\u0dcc\3\2\2\2\u0dcd\u0dce\3\2\2\2\u0dce") + buf.write("\u0dcf\3\2\2\2\u0dcf\u0df3\7\u0140\2\2\u0dd0\u0dd2\6\u00c5") + buf.write("\30\2\u0dd1\u0dd3\7\u0131\2\2\u0dd2\u0dd1\3\2\2\2\u0dd2") + buf.write("\u0dd3\3\2\2\2\u0dd3\u0dd4\3\2\2\2\u0dd4\u0df3\7\u0141") + buf.write("\2\2\u0dd5\u0dd7\6\u00c5\31\2\u0dd6\u0dd8\7\u0131\2\2") + buf.write("\u0dd7\u0dd6\3\2\2\2\u0dd7\u0dd8\3\2\2\2\u0dd8\u0dd9\3") + buf.write("\2\2\2\u0dd9\u0df3\t.\2\2\u0dda\u0ddc\7\u0131\2\2\u0ddb") buf.write("\u0dda\3\2\2\2\u0ddb\u0ddc\3\2\2\2\u0ddc\u0ddd\3\2\2\2") - buf.write("\u0ddd\u0deb\7\u013d\2\2\u0dde\u0de0\7\u0131\2\2\u0ddf") + buf.write("\u0ddd\u0df3\7\u013f\2\2\u0dde\u0de0\7\u0131\2\2\u0ddf") buf.write("\u0dde\3\2\2\2\u0ddf\u0de0\3\2\2\2\u0de0\u0de1\3\2\2\2") - buf.write("\u0de1\u0deb\7\u013e\2\2\u0de2\u0de4\7\u0131\2\2\u0de3") + buf.write("\u0de1\u0df3\7\u013c\2\2\u0de2\u0de4\7\u0131\2\2\u0de3") buf.write("\u0de2\3\2\2\2\u0de3\u0de4\3\2\2\2\u0de4\u0de5\3\2\2\2") - buf.write("\u0de5\u0deb\7\u0142\2\2\u0de6\u0de8\7\u0131\2\2\u0de7") + buf.write("\u0de5\u0df3\7\u013d\2\2\u0de6\u0de8\7\u0131\2\2\u0de7") buf.write("\u0de6\3\2\2\2\u0de7\u0de8\3\2\2\2\u0de8\u0de9\3\2\2\2") - buf.write("\u0de9\u0deb\7\u0143\2\2\u0dea\u0dc3\3\2\2\2\u0dea\u0dc8") - buf.write("\3\2\2\2\u0dea\u0dcd\3\2\2\2\u0dea\u0dd3\3\2\2\2\u0dea") - buf.write("\u0dd7\3\2\2\2\u0dea\u0ddb\3\2\2\2\u0dea\u0ddf\3\2\2\2") - buf.write("\u0dea\u0de3\3\2\2\2\u0dea\u0de7\3\2\2\2\u0deb\u0187\3") - buf.write("\2\2\2\u0dec\u0ded\7\u0112\2\2\u0ded\u0df4\5\u015c\u00af") - buf.write("\2\u0dee\u0df4\5\u0096L\2\u0def\u0df4\5\u015a\u00ae\2") - buf.write("\u0df0\u0df1\t/\2\2\u0df1\u0df2\7\u00b8\2\2\u0df2\u0df4") - buf.write("\7\u00b9\2\2\u0df3\u0dec\3\2\2\2\u0df3\u0dee\3\2\2\2\u0df3") - buf.write("\u0def\3\2\2\2\u0df3\u0df0\3\2\2\2\u0df4\u0189\3\2\2\2") - buf.write("\u0df5\u0df6\t\60\2\2\u0df6\u018b\3\2\2\2\u0df7\u0df8") - buf.write("\t\61\2\2\u0df8\u018d\3\2\2\2\u0df9\u0dfa\t\62\2\2\u0dfa") - buf.write("\u018f\3\2\2\2\u01d6\u0193\u019e\u01a2\u01a5\u01a8\u01ac") - buf.write("\u01af\u01b2\u01b6\u01b9\u01c1\u01c5\u01c8\u01ce\u01d1") - buf.write("\u01d8\u01dc\u01e0\u01e7\u01ef\u01f3\u01f7\u01fb\u01fe") - buf.write("\u0203\u0207\u020b\u020e\u0212\u0216\u0219\u021d\u0220") - buf.write("\u0224\u022a\u0234\u0237\u0242\u024a\u024d\u0258\u0260") - buf.write("\u0265\u0269\u026e\u0272\u0279\u0284\u0287\u028d\u0291") - buf.write("\u0294\u029b\u029d\u02a7\u02ae\u02b2\u02b6\u02bb\u02c0") - buf.write("\u02c3\u02ca\u02d2\u02d7\u02e0\u02e5\u02ec\u02fe\u0305") - buf.write("\u030e\u0314\u031b\u0324\u032c\u0330\u0336\u033e\u034e") - buf.write("\u0367\u036c\u0374\u037c\u037e\u0392\u0396\u039c\u039f") - buf.write("\u03a2\u03a9\u03ae\u03b1\u03b8\u03c4\u03cd\u03cf\u03d3") - buf.write("\u03d6\u03dd\u03e8\u03ea\u03f2\u03f7\u03fa\u0400\u040b") - buf.write("\u044b\u0454\u0458\u045e\u0462\u0467\u046d\u0479\u0481") - buf.write("\u0487\u0494\u0499\u04a9\u04b0\u04b4\u04ba\u04c9\u04cd") - buf.write("\u04d3\u04d9\u04dc\u04df\u04e5\u04e9\u04f1\u04f3\u04fc") - buf.write("\u04ff\u0508\u050d\u0513\u051a\u051d\u0523\u052e\u0531") - buf.write("\u0535\u053a\u053f\u0546\u0549\u054c\u0553\u0558\u0561") - buf.write("\u0569\u056f\u0572\u0575\u057b\u057f\u0583\u0587\u0589") - buf.write("\u0591\u0599\u059f\u05a5\u05a8\u05ac\u05af\u05b3\u05cc") - buf.write("\u05cf\u05d3\u05d9\u05dc\u05df\u05e5\u05ed\u05f2\u05f8") - buf.write("\u05fe\u060a\u060d\u0614\u061b\u0623\u0626\u062e\u0632") - buf.write("\u0639\u06ad\u06b5\u06bd\u06c6\u06d0\u06d4\u06d7\u06dd") - buf.write("\u06e3\u06ef\u06fb\u0700\u0709\u0711\u0718\u071a\u071f") - buf.write("\u0723\u0728\u072d\u0732\u0735\u073a\u073e\u0743\u0745") - buf.write("\u0749\u0752\u075a\u0763\u076a\u0773\u0778\u077b\u078e") - buf.write("\u0790\u0799\u07a0\u07a3\u07aa\u07ae\u07b4\u07bc\u07c7") - buf.write("\u07d2\u07d9\u07df\u07ec\u07f3\u07fa\u0806\u080e\u0814") - buf.write("\u0817\u0820\u0823\u082c\u082f\u0838\u083b\u0844\u0847") - buf.write("\u084a\u084f\u0851\u085d\u0864\u086b\u086e\u0870\u0878") - buf.write("\u087c\u0880\u0886\u088a\u0892\u0896\u0899\u089c\u089f") - buf.write("\u08a3\u08a8\u08af\u08b3\u08b6\u08b9\u08bc\u08be\u08c1") - buf.write("\u08cd\u08d0\u08d4\u08de\u08e2\u08e4\u08e7\u08eb\u08f1") - buf.write("\u08f5\u0900\u090a\u0916\u0925\u092a\u0931\u0941\u0946") - buf.write("\u0953\u0958\u0960\u0966\u096a\u0973\u0982\u0987\u0993") - buf.write("\u0998\u09a0\u09a3\u09a7\u09b5\u09c2\u09c7\u09cb\u09ce") - buf.write("\u09d3\u09dc\u09df\u09e4\u09eb\u09ee\u09f6\u09fd\u0a04") - buf.write("\u0a07\u0a0c\u0a0f\u0a14\u0a18\u0a1b\u0a1e\u0a24\u0a29") - buf.write("\u0a2e\u0a40\u0a42\u0a45\u0a50\u0a59\u0a60\u0a68\u0a6f") - buf.write("\u0a73\u0a7b\u0a83\u0a8b\u0a91\u0a99\u0aa5\u0aa8\u0aae") - buf.write("\u0ab2\u0ab4\u0abd\u0ac9\u0acb\u0ad2\u0ad9\u0adf\u0ae5") - buf.write("\u0ae7\u0aee\u0af6\u0afc\u0b03\u0b09\u0b0d\u0b0f\u0b16") - buf.write("\u0b1f\u0b2c\u0b31\u0b35\u0b43\u0b45\u0b4d\u0b4f\u0b53") - buf.write("\u0b5b\u0b64\u0b6a\u0b72\u0b77\u0b83\u0b88\u0b8b\u0b91") - buf.write("\u0b95\u0b9a\u0b9f\u0ba4\u0baa\u0bbf\u0bc1\u0bca\u0bce") - buf.write("\u0bd7\u0bdb\u0bed\u0bf0\u0bf8\u0c01\u0c18\u0c23\u0c2a") - buf.write("\u0c2d\u0c36\u0c3a\u0c46\u0c5f\u0c66\u0c69\u0c78\u0c7c") - buf.write("\u0c86\u0c88\u0c95\u0c97\u0ca1\u0cae\u0cb2\u0cb9\u0cbe") - buf.write("\u0cc6\u0cca\u0cd3\u0cd8\u0ce9\u0ced\u0cf6\u0cfa\u0cfc") - buf.write("\u0d03\u0d0a\u0d0d\u0d10\u0d17\u0d1e\u0d21\u0d28\u0d30") - buf.write("\u0d33\u0d40\u0d54\u0d5e\u0d61\u0d6a\u0d6d\u0d6f\u0d72") - buf.write("\u0d75\u0d87\u0d90\u0d97\u0d9e\u0da5\u0daf\u0db2\u0db7") - buf.write("\u0dbf\u0dc5\u0dca\u0dcf\u0dd3\u0dd7\u0ddb\u0ddf\u0de3") - buf.write("\u0de7\u0dea\u0df3") + buf.write("\u0de9\u0df3\7\u013e\2\2\u0dea\u0dec\7\u0131\2\2\u0deb") + buf.write("\u0dea\3\2\2\2\u0deb\u0dec\3\2\2\2\u0dec\u0ded\3\2\2\2") + buf.write("\u0ded\u0df3\7\u0142\2\2\u0dee\u0df0\7\u0131\2\2\u0def") + buf.write("\u0dee\3\2\2\2\u0def\u0df0\3\2\2\2\u0df0\u0df1\3\2\2\2") + buf.write("\u0df1\u0df3\7\u0143\2\2\u0df2\u0dcb\3\2\2\2\u0df2\u0dd0") + buf.write("\3\2\2\2\u0df2\u0dd5\3\2\2\2\u0df2\u0ddb\3\2\2\2\u0df2") + buf.write("\u0ddf\3\2\2\2\u0df2\u0de3\3\2\2\2\u0df2\u0de7\3\2\2\2") + buf.write("\u0df2\u0deb\3\2\2\2\u0df2\u0def\3\2\2\2\u0df3\u0189\3") + buf.write("\2\2\2\u0df4\u0df5\7\u0112\2\2\u0df5\u0dfc\5\u015e\u00b0") + buf.write("\2\u0df6\u0dfc\5\u0098M\2\u0df7\u0dfc\5\u015c\u00af\2") + buf.write("\u0df8\u0df9\t/\2\2\u0df9\u0dfa\7\u00b8\2\2\u0dfa\u0dfc") + buf.write("\7\u00b9\2\2\u0dfb\u0df4\3\2\2\2\u0dfb\u0df6\3\2\2\2\u0dfb") + buf.write("\u0df7\3\2\2\2\u0dfb\u0df8\3\2\2\2\u0dfc\u018b\3\2\2\2") + buf.write("\u0dfd\u0dfe\t\60\2\2\u0dfe\u018d\3\2\2\2\u0dff\u0e00") + buf.write("\t\61\2\2\u0e00\u018f\3\2\2\2\u0e01\u0e02\t\62\2\2\u0e02") + buf.write("\u0191\3\2\2\2\u01d7\u0195\u01a0\u01a4\u01a7\u01aa\u01ae") + buf.write("\u01b1\u01b4\u01b8\u01bb\u01c3\u01c7\u01ca\u01d0\u01d3") + buf.write("\u01da\u01de\u01e2\u01e9\u01f1\u01f5\u01f9\u01fd\u0200") + buf.write("\u0205\u0209\u020d\u0210\u0214\u0218\u021b\u021f\u0222") + buf.write("\u0226\u022c\u0236\u023a\u023c\u0249\u0251\u0254\u025f") + buf.write("\u0268\u026d\u0271\u0276\u027a\u0281\u028c\u028f\u0295") + buf.write("\u0299\u029c\u02a3\u02a5\u02af\u02b6\u02ba\u02be\u02c3") + buf.write("\u02c8\u02cb\u02d2\u02da\u02df\u02e8\u02ed\u02f4\u0306") + buf.write("\u030d\u0316\u031c\u0323\u032c\u0334\u0338\u033e\u0346") + buf.write("\u0356\u036f\u0374\u037c\u0384\u0386\u039a\u039e\u03a4") + buf.write("\u03a7\u03aa\u03b1\u03b6\u03b9\u03c0\u03cc\u03d5\u03d7") + buf.write("\u03db\u03de\u03e5\u03f0\u03f2\u03fa\u03ff\u0402\u0408") + buf.write("\u0413\u0453\u045c\u0460\u0466\u046a\u046f\u0475\u0481") + buf.write("\u0489\u048f\u049c\u04a1\u04b1\u04b8\u04bc\u04c2\u04d1") + buf.write("\u04d5\u04db\u04e1\u04e4\u04e7\u04ed\u04f1\u04f9\u04fb") + buf.write("\u0504\u0507\u0510\u0515\u051b\u0522\u0525\u052b\u0536") + buf.write("\u0539\u053d\u0542\u0547\u054e\u0551\u0554\u055b\u0560") + buf.write("\u0569\u0571\u0577\u057a\u057d\u0583\u0587\u058b\u058f") + buf.write("\u0591\u0599\u05a1\u05a7\u05ad\u05b0\u05b4\u05b7\u05bb") + buf.write("\u05d4\u05d7\u05db\u05e1\u05e4\u05e7\u05ed\u05f5\u05fa") + buf.write("\u0600\u0606\u0612\u0615\u061c\u0623\u062b\u062e\u0636") + buf.write("\u063a\u0641\u06b5\u06bd\u06c5\u06ce\u06d8\u06dc\u06df") + buf.write("\u06e5\u06eb\u06f7\u0703\u0708\u0711\u0719\u0720\u0722") + buf.write("\u0727\u072b\u0730\u0735\u073a\u073d\u0742\u0746\u074b") + buf.write("\u074d\u0751\u075a\u0762\u076b\u0772\u077b\u0780\u0783") + buf.write("\u0796\u0798\u07a1\u07a8\u07ab\u07b2\u07b6\u07bc\u07c4") + buf.write("\u07cf\u07da\u07e1\u07e7\u07f4\u07fb\u0802\u080e\u0816") + buf.write("\u081c\u081f\u0828\u082b\u0834\u0837\u0840\u0843\u084c") + buf.write("\u084f\u0852\u0857\u0859\u0865\u086c\u0873\u0876\u0878") + buf.write("\u0880\u0884\u0888\u088e\u0892\u089a\u089e\u08a1\u08a4") + buf.write("\u08a7\u08ab\u08b0\u08b7\u08bb\u08be\u08c1\u08c4\u08c6") + buf.write("\u08c9\u08d5\u08d8\u08dc\u08e6\u08ea\u08ec\u08ef\u08f3") + buf.write("\u08f9\u08fd\u0908\u0912\u091e\u092d\u0932\u0939\u0949") + buf.write("\u094e\u095b\u0960\u0968\u096e\u0972\u097b\u098a\u098f") + buf.write("\u099b\u09a0\u09a8\u09ab\u09af\u09bd\u09ca\u09cf\u09d3") + buf.write("\u09d6\u09db\u09e4\u09e7\u09ec\u09f3\u09f6\u09fe\u0a05") + buf.write("\u0a0c\u0a0f\u0a14\u0a17\u0a1c\u0a20\u0a23\u0a26\u0a2c") + buf.write("\u0a31\u0a36\u0a48\u0a4a\u0a4d\u0a58\u0a61\u0a68\u0a70") + buf.write("\u0a77\u0a7b\u0a83\u0a8b\u0a93\u0a99\u0aa1\u0aad\u0ab0") + buf.write("\u0ab6\u0aba\u0abc\u0ac5\u0ad1\u0ad3\u0ada\u0ae1\u0ae7") + buf.write("\u0aed\u0aef\u0af6\u0afe\u0b04\u0b0b\u0b11\u0b15\u0b17") + buf.write("\u0b1e\u0b27\u0b34\u0b39\u0b3d\u0b4b\u0b4d\u0b55\u0b57") + buf.write("\u0b5b\u0b63\u0b6c\u0b72\u0b7a\u0b7f\u0b8b\u0b90\u0b93") + buf.write("\u0b99\u0b9d\u0ba2\u0ba7\u0bac\u0bb2\u0bc7\u0bc9\u0bd2") + buf.write("\u0bd6\u0bdf\u0be3\u0bf5\u0bf8\u0c00\u0c09\u0c20\u0c2b") + buf.write("\u0c32\u0c35\u0c3e\u0c42\u0c4e\u0c67\u0c6e\u0c71\u0c80") + buf.write("\u0c84\u0c8e\u0c90\u0c9d\u0c9f\u0ca9\u0cb6\u0cba\u0cc1") + buf.write("\u0cc6\u0cce\u0cd2\u0cdb\u0ce0\u0cf1\u0cf5\u0cfe\u0d02") + buf.write("\u0d04\u0d0b\u0d12\u0d15\u0d18\u0d1f\u0d26\u0d29\u0d30") + buf.write("\u0d38\u0d3b\u0d48\u0d5c\u0d66\u0d69\u0d72\u0d75\u0d77") + buf.write("\u0d7a\u0d7d\u0d8f\u0d98\u0d9f\u0da6\u0dad\u0db7\u0dba") + buf.write("\u0dbf\u0dc7\u0dcd\u0dd2\u0dd7\u0ddb\u0ddf\u0de3\u0de7") + buf.write("\u0deb\u0def\u0df2\u0dfb") return buf.getvalue() @@ -2253,183 +2258,184 @@ class fugue_sqlParser ( Parser ): RULE_fugueFileFormat = 19 RULE_fuguePath = 20 RULE_fuguePersist = 21 - RULE_fuguePersistValue = 22 - RULE_fugueBroadcast = 23 - RULE_fugueDataFrames = 24 - RULE_fugueDataFramePair = 25 - RULE_fugueDataFrame = 26 - RULE_fugueAssignment = 27 - RULE_fugueAssignmentSign = 28 - RULE_fugueSingleOutputExtensionCommonWild = 29 - RULE_fugueSingleOutputExtensionCommon = 30 - RULE_fugueExtension = 31 - RULE_fugueZipType = 32 - RULE_fuguePrepartition = 33 - RULE_fuguePartitionAlgo = 34 - RULE_fuguePartitionNum = 35 - RULE_fuguePartitionNumber = 36 - RULE_fugueParams = 37 - RULE_fugueCols = 38 - RULE_fugueColsSort = 39 - RULE_fugueColSort = 40 - RULE_fugueColumnIdentifier = 41 - RULE_fugueWildSchema = 42 - RULE_fugueWildSchemaPair = 43 - RULE_fugueSchema = 44 - RULE_fugueSchemaPair = 45 - RULE_fugueSchemaKey = 46 - RULE_fugueSchemaType = 47 - RULE_fugueJson = 48 - RULE_fugueJsonObj = 49 - RULE_fugueJsonPairs = 50 - RULE_fugueJsonPair = 51 - RULE_fugueJsonKey = 52 - RULE_fugueJsonArray = 53 - RULE_fugueJsonValue = 54 - RULE_fugueJsonNumber = 55 - RULE_fugueJsonString = 56 - RULE_fugueJsonBool = 57 - RULE_fugueJsonNull = 58 - RULE_fugueIdentifier = 59 - RULE_singleStatement = 60 - RULE_singleExpression = 61 - RULE_singleTableIdentifier = 62 - RULE_singleMultipartIdentifier = 63 - RULE_singleFunctionIdentifier = 64 - RULE_singleDataType = 65 - RULE_singleTableSchema = 66 - RULE_statement = 67 - RULE_unsupportedHiveNativeCommands = 68 - RULE_createTableHeader = 69 - RULE_replaceTableHeader = 70 - RULE_bucketSpec = 71 - RULE_skewSpec = 72 - RULE_locationSpec = 73 - RULE_commentSpec = 74 - RULE_query = 75 - RULE_insertInto = 76 - RULE_partitionSpecLocation = 77 - RULE_partitionSpec = 78 - RULE_partitionVal = 79 - RULE_namespace = 80 - RULE_describeFuncName = 81 - RULE_describeColName = 82 - RULE_ctes = 83 - RULE_namedQuery = 84 - RULE_tableProvider = 85 - RULE_createTableClauses = 86 - RULE_tablePropertyList = 87 - RULE_tableProperty = 88 - RULE_tablePropertyKey = 89 - RULE_tablePropertyValue = 90 - RULE_constantList = 91 - RULE_nestedConstantList = 92 - RULE_createFileFormat = 93 - RULE_fileFormat = 94 - RULE_storageHandler = 95 - RULE_resource = 96 - RULE_dmlStatementNoWith = 97 - RULE_queryOrganization = 98 - RULE_multiInsertQueryBody = 99 - RULE_queryTerm = 100 - RULE_queryPrimary = 101 - RULE_sortItem = 102 - RULE_fromStatement = 103 - RULE_fromStatementBody = 104 - RULE_querySpecification = 105 - RULE_optionalFromClause = 106 - RULE_transformClause = 107 - RULE_selectClause = 108 - RULE_setClause = 109 - RULE_matchedClause = 110 - RULE_notMatchedClause = 111 - RULE_matchedAction = 112 - RULE_notMatchedAction = 113 - RULE_assignmentList = 114 - RULE_assignment = 115 - RULE_whereClause = 116 - RULE_havingClause = 117 - RULE_hint = 118 - RULE_hintStatement = 119 - RULE_fromClause = 120 - RULE_aggregationClause = 121 - RULE_groupingSet = 122 - RULE_pivotClause = 123 - RULE_pivotColumn = 124 - RULE_pivotValue = 125 - RULE_lateralView = 126 - RULE_setQuantifier = 127 - RULE_relation = 128 - RULE_joinRelation = 129 - RULE_joinType = 130 - RULE_joinCriteria = 131 - RULE_sample = 132 - RULE_sampleMethod = 133 - RULE_identifierList = 134 - RULE_identifierSeq = 135 - RULE_orderedIdentifierList = 136 - RULE_orderedIdentifier = 137 - RULE_identifierCommentList = 138 - RULE_identifierComment = 139 - RULE_relationPrimary = 140 - RULE_inlineTable = 141 - RULE_functionTable = 142 - RULE_tableAlias = 143 - RULE_rowFormat = 144 - RULE_multipartIdentifierList = 145 - RULE_multipartIdentifier = 146 - RULE_tableIdentifier = 147 - RULE_functionIdentifier = 148 - RULE_namedExpression = 149 - RULE_namedExpressionSeq = 150 - RULE_transformList = 151 - RULE_transform = 152 - RULE_transformArgument = 153 - RULE_expression = 154 - RULE_booleanExpression = 155 - RULE_predicate = 156 - RULE_valueExpression = 157 - RULE_primaryExpression = 158 - RULE_constant = 159 - RULE_comparisonOperator = 160 - RULE_comparisonEqualOperator = 161 - RULE_arithmeticOperator = 162 - RULE_predicateOperator = 163 - RULE_booleanValue = 164 - RULE_interval = 165 - RULE_errorCapturingMultiUnitsInterval = 166 - RULE_multiUnitsInterval = 167 - RULE_errorCapturingUnitToUnitInterval = 168 - RULE_unitToUnitInterval = 169 - RULE_intervalValue = 170 - RULE_intervalUnit = 171 - RULE_colPosition = 172 - RULE_dataType = 173 - RULE_qualifiedColTypeWithPositionList = 174 - RULE_qualifiedColTypeWithPosition = 175 - RULE_colTypeList = 176 - RULE_colType = 177 - RULE_complexColTypeList = 178 - RULE_complexColType = 179 - RULE_whenClause = 180 - RULE_windowClause = 181 - RULE_namedWindow = 182 - RULE_windowSpec = 183 - RULE_windowFrame = 184 - RULE_frameBound = 185 - RULE_qualifiedNameList = 186 - RULE_functionName = 187 - RULE_qualifiedName = 188 - RULE_errorCapturingIdentifier = 189 - RULE_errorCapturingIdentifierExtra = 190 - RULE_identifier = 191 - RULE_strictIdentifier = 192 - RULE_quotedIdentifier = 193 - RULE_number = 194 - RULE_alterColumnAction = 195 - RULE_ansiNonReserved = 196 - RULE_strictNonReserved = 197 - RULE_nonReserved = 198 + RULE_fugueCheckpointNamespace = 22 + RULE_fuguePersistValue = 23 + RULE_fugueBroadcast = 24 + RULE_fugueDataFrames = 25 + RULE_fugueDataFramePair = 26 + RULE_fugueDataFrame = 27 + RULE_fugueAssignment = 28 + RULE_fugueAssignmentSign = 29 + RULE_fugueSingleOutputExtensionCommonWild = 30 + RULE_fugueSingleOutputExtensionCommon = 31 + RULE_fugueExtension = 32 + RULE_fugueZipType = 33 + RULE_fuguePrepartition = 34 + RULE_fuguePartitionAlgo = 35 + RULE_fuguePartitionNum = 36 + RULE_fuguePartitionNumber = 37 + RULE_fugueParams = 38 + RULE_fugueCols = 39 + RULE_fugueColsSort = 40 + RULE_fugueColSort = 41 + RULE_fugueColumnIdentifier = 42 + RULE_fugueWildSchema = 43 + RULE_fugueWildSchemaPair = 44 + RULE_fugueSchema = 45 + RULE_fugueSchemaPair = 46 + RULE_fugueSchemaKey = 47 + RULE_fugueSchemaType = 48 + RULE_fugueJson = 49 + RULE_fugueJsonObj = 50 + RULE_fugueJsonPairs = 51 + RULE_fugueJsonPair = 52 + RULE_fugueJsonKey = 53 + RULE_fugueJsonArray = 54 + RULE_fugueJsonValue = 55 + RULE_fugueJsonNumber = 56 + RULE_fugueJsonString = 57 + RULE_fugueJsonBool = 58 + RULE_fugueJsonNull = 59 + RULE_fugueIdentifier = 60 + RULE_singleStatement = 61 + RULE_singleExpression = 62 + RULE_singleTableIdentifier = 63 + RULE_singleMultipartIdentifier = 64 + RULE_singleFunctionIdentifier = 65 + RULE_singleDataType = 66 + RULE_singleTableSchema = 67 + RULE_statement = 68 + RULE_unsupportedHiveNativeCommands = 69 + RULE_createTableHeader = 70 + RULE_replaceTableHeader = 71 + RULE_bucketSpec = 72 + RULE_skewSpec = 73 + RULE_locationSpec = 74 + RULE_commentSpec = 75 + RULE_query = 76 + RULE_insertInto = 77 + RULE_partitionSpecLocation = 78 + RULE_partitionSpec = 79 + RULE_partitionVal = 80 + RULE_namespace = 81 + RULE_describeFuncName = 82 + RULE_describeColName = 83 + RULE_ctes = 84 + RULE_namedQuery = 85 + RULE_tableProvider = 86 + RULE_createTableClauses = 87 + RULE_tablePropertyList = 88 + RULE_tableProperty = 89 + RULE_tablePropertyKey = 90 + RULE_tablePropertyValue = 91 + RULE_constantList = 92 + RULE_nestedConstantList = 93 + RULE_createFileFormat = 94 + RULE_fileFormat = 95 + RULE_storageHandler = 96 + RULE_resource = 97 + RULE_dmlStatementNoWith = 98 + RULE_queryOrganization = 99 + RULE_multiInsertQueryBody = 100 + RULE_queryTerm = 101 + RULE_queryPrimary = 102 + RULE_sortItem = 103 + RULE_fromStatement = 104 + RULE_fromStatementBody = 105 + RULE_querySpecification = 106 + RULE_optionalFromClause = 107 + RULE_transformClause = 108 + RULE_selectClause = 109 + RULE_setClause = 110 + RULE_matchedClause = 111 + RULE_notMatchedClause = 112 + RULE_matchedAction = 113 + RULE_notMatchedAction = 114 + RULE_assignmentList = 115 + RULE_assignment = 116 + RULE_whereClause = 117 + RULE_havingClause = 118 + RULE_hint = 119 + RULE_hintStatement = 120 + RULE_fromClause = 121 + RULE_aggregationClause = 122 + RULE_groupingSet = 123 + RULE_pivotClause = 124 + RULE_pivotColumn = 125 + RULE_pivotValue = 126 + RULE_lateralView = 127 + RULE_setQuantifier = 128 + RULE_relation = 129 + RULE_joinRelation = 130 + RULE_joinType = 131 + RULE_joinCriteria = 132 + RULE_sample = 133 + RULE_sampleMethod = 134 + RULE_identifierList = 135 + RULE_identifierSeq = 136 + RULE_orderedIdentifierList = 137 + RULE_orderedIdentifier = 138 + RULE_identifierCommentList = 139 + RULE_identifierComment = 140 + RULE_relationPrimary = 141 + RULE_inlineTable = 142 + RULE_functionTable = 143 + RULE_tableAlias = 144 + RULE_rowFormat = 145 + RULE_multipartIdentifierList = 146 + RULE_multipartIdentifier = 147 + RULE_tableIdentifier = 148 + RULE_functionIdentifier = 149 + RULE_namedExpression = 150 + RULE_namedExpressionSeq = 151 + RULE_transformList = 152 + RULE_transform = 153 + RULE_transformArgument = 154 + RULE_expression = 155 + RULE_booleanExpression = 156 + RULE_predicate = 157 + RULE_valueExpression = 158 + RULE_primaryExpression = 159 + RULE_constant = 160 + RULE_comparisonOperator = 161 + RULE_comparisonEqualOperator = 162 + RULE_arithmeticOperator = 163 + RULE_predicateOperator = 164 + RULE_booleanValue = 165 + RULE_interval = 166 + RULE_errorCapturingMultiUnitsInterval = 167 + RULE_multiUnitsInterval = 168 + RULE_errorCapturingUnitToUnitInterval = 169 + RULE_unitToUnitInterval = 170 + RULE_intervalValue = 171 + RULE_intervalUnit = 172 + RULE_colPosition = 173 + RULE_dataType = 174 + RULE_qualifiedColTypeWithPositionList = 175 + RULE_qualifiedColTypeWithPosition = 176 + RULE_colTypeList = 177 + RULE_colType = 178 + RULE_complexColTypeList = 179 + RULE_complexColType = 180 + RULE_whenClause = 181 + RULE_windowClause = 182 + RULE_namedWindow = 183 + RULE_windowSpec = 184 + RULE_windowFrame = 185 + RULE_frameBound = 186 + RULE_qualifiedNameList = 187 + RULE_functionName = 188 + RULE_qualifiedName = 189 + RULE_errorCapturingIdentifier = 190 + RULE_errorCapturingIdentifierExtra = 191 + RULE_identifier = 192 + RULE_strictIdentifier = 193 + RULE_quotedIdentifier = 194 + RULE_number = 195 + RULE_alterColumnAction = 196 + RULE_ansiNonReserved = 197 + RULE_strictNonReserved = 198 + RULE_nonReserved = 199 ruleNames = [ "fugueLanguage", "fugueSingleStatement", "fugueSingleTask", "fugueNestableTask", "fugueSelectTask", "fugueNestableTaskNoSelect", @@ -2438,9 +2444,10 @@ class fugue_sqlParser ( Parser ): "fugueCreateDataTask", "fugueLoadTask", "fugueOutputTask", "fuguePrintTask", "fugueSaveTask", "fugueSingleFile", "fugueLoadColumns", "fugueSaveMode", "fugueFileFormat", - "fuguePath", "fuguePersist", "fuguePersistValue", "fugueBroadcast", - "fugueDataFrames", "fugueDataFramePair", "fugueDataFrame", - "fugueAssignment", "fugueAssignmentSign", "fugueSingleOutputExtensionCommonWild", + "fuguePath", "fuguePersist", "fugueCheckpointNamespace", + "fuguePersistValue", "fugueBroadcast", "fugueDataFrames", + "fugueDataFramePair", "fugueDataFrame", "fugueAssignment", + "fugueAssignmentSign", "fugueSingleOutputExtensionCommonWild", "fugueSingleOutputExtensionCommon", "fugueExtension", "fugueZipType", "fuguePrepartition", "fuguePartitionAlgo", "fuguePartitionNum", "fuguePartitionNumber", "fugueParams", @@ -2926,21 +2933,21 @@ def fugueLanguage(self): self.enterRule(localctx, 0, self.RULE_fugueLanguage) try: self.enterOuterAlt(localctx, 1) - self.state = 399 + self.state = 401 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 398 + self.state = 400 self.fugueSingleTask() else: raise NoViableAltException(self) - self.state = 401 + self.state = 403 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,0,self._ctx) - self.state = 403 + self.state = 405 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -2982,9 +2989,9 @@ def fugueSingleStatement(self): self.enterRule(localctx, 2, self.RULE_fugueSingleStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 405 + self.state = 407 self.fugueSingleTask() - self.state = 406 + self.state = 408 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -3034,30 +3041,30 @@ def fugueSingleTask(self): localctx = fugue_sqlParser.FugueSingleTaskContext(self, self._ctx, self.state) self.enterRule(localctx, 4, self.RULE_fugueSingleTask) try: - self.state = 412 + self.state = 414 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,1,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 408 + self.state = 410 self.fugueNestableTask() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 409 + self.state = 411 self.fugueOutputTask() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 410 + self.state = 412 self.fuguePrintTask() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 411 + self.state = 413 self.fugueSaveTask() pass @@ -3102,18 +3109,18 @@ def fugueNestableTask(self): localctx = fugue_sqlParser.FugueNestableTaskContext(self, self._ctx, self.state) self.enterRule(localctx, 6, self.RULE_fugueNestableTask) try: - self.state = 416 + self.state = 418 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,2,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 414 + self.state = 416 self.fugueNestableTaskNoSelect() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 415 + self.state = 417 self.fugueSelectTask() pass @@ -3177,37 +3184,37 @@ def fugueSelectTask(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 419 + self.state = 421 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,3,self._ctx) if la_ == 1: - self.state = 418 + self.state = 420 localctx.assign = self.fugueAssignment() - self.state = 422 + self.state = 424 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.HASH) | (1 << fugue_sqlParser.RAND) | (1 << fugue_sqlParser.EVEN) | (1 << fugue_sqlParser.PREPARTITION))) != 0): - self.state = 421 + self.state = 423 localctx.partition = self.fuguePrepartition() - self.state = 424 - localctx.q = self.query() self.state = 426 + localctx.q = self.query() + self.state = 428 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,5,self._ctx) if la_ == 1: - self.state = 425 + self.state = 427 localctx.persist = self.fuguePersist() - self.state = 429 + self.state = 431 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,6,self._ctx) if la_ == 1: - self.state = 428 + self.state = 430 localctx.broadcast = self.fugueBroadcast() @@ -3264,29 +3271,29 @@ def fugueNestableTaskNoSelect(self): self.enterRule(localctx, 10, self.RULE_fugueNestableTaskNoSelect) try: self.enterOuterAlt(localctx, 1) - self.state = 432 + self.state = 434 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,7,self._ctx) if la_ == 1: - self.state = 431 + self.state = 433 localctx.assign = self.fugueAssignment() - self.state = 434 - localctx.df = self.fugueNestableTaskCollectionNoSelect() self.state = 436 + localctx.df = self.fugueNestableTaskCollectionNoSelect() + self.state = 438 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,8,self._ctx) if la_ == 1: - self.state = 435 + self.state = 437 localctx.persist = self.fuguePersist() - self.state = 439 + self.state = 441 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,9,self._ctx) if la_ == 1: - self.state = 438 + self.state = 440 localctx.broadcast = self.fugueBroadcast() @@ -3346,42 +3353,42 @@ def fugueNestableTaskCollectionNoSelect(self): localctx = fugue_sqlParser.FugueNestableTaskCollectionNoSelectContext(self, self._ctx, self.state) self.enterRule(localctx, 12, self.RULE_fugueNestableTaskCollectionNoSelect) try: - self.state = 447 + self.state = 449 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,10,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 441 + self.state = 443 self.fugueTransformTask() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 442 + self.state = 444 self.fugueProcessTask() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 443 + self.state = 445 self.fugueZipTask() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 444 + self.state = 446 self.fugueCreateTask() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 445 + self.state = 447 self.fugueCreateDataTask() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 446 + self.state = 448 self.fugueLoadTask() pass @@ -3438,25 +3445,25 @@ def fugueTransformTask(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 449 - self.match(fugue_sqlParser.TRANSFORM) self.state = 451 + self.match(fugue_sqlParser.TRANSFORM) + self.state = 453 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: - self.state = 450 + self.state = 452 localctx.dfs = self.fugueDataFrames() - self.state = 454 + self.state = 456 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.HASH) | (1 << fugue_sqlParser.RAND) | (1 << fugue_sqlParser.EVEN) | (1 << fugue_sqlParser.PREPARTITION))) != 0): - self.state = 453 + self.state = 455 localctx.partition = self.fuguePrepartition() - self.state = 456 + self.state = 458 localctx.params = self.fugueSingleOutputExtensionCommonWild() except RecognitionException as re: localctx.exception = re @@ -3510,25 +3517,25 @@ def fugueProcessTask(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 458 - self.match(fugue_sqlParser.PROCESS) self.state = 460 + self.match(fugue_sqlParser.PROCESS) + self.state = 462 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,13,self._ctx) if la_ == 1: - self.state = 459 + self.state = 461 localctx.dfs = self.fugueDataFrames() - self.state = 463 + self.state = 465 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.HASH) | (1 << fugue_sqlParser.RAND) | (1 << fugue_sqlParser.EVEN) | (1 << fugue_sqlParser.PREPARTITION))) != 0): - self.state = 462 + self.state = 464 localctx.partition = self.fuguePrepartition() - self.state = 465 + self.state = 467 localctx.params = self.fugueSingleOutputExtensionCommon() except RecognitionException as re: localctx.exception = re @@ -3592,35 +3599,35 @@ def fugueZipTask(self): self.enterRule(localctx, 18, self.RULE_fugueZipTask) try: self.enterOuterAlt(localctx, 1) - self.state = 467 + self.state = 469 self.match(fugue_sqlParser.ZIP) - self.state = 468 - localctx.dfs = self.fugueDataFrames() self.state = 470 + localctx.dfs = self.fugueDataFrames() + self.state = 472 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,15,self._ctx) if la_ == 1: - self.state = 469 + self.state = 471 localctx.how = self.fugueZipType() - self.state = 474 + self.state = 476 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,16,self._ctx) if la_ == 1: - self.state = 472 + self.state = 474 self.match(fugue_sqlParser.BY) - self.state = 473 + self.state = 475 localctx.by = self.fugueCols() - self.state = 478 + self.state = 480 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,17,self._ctx) if la_ == 1: - self.state = 476 + self.state = 478 self.match(fugue_sqlParser.PRESORT) - self.state = 477 + self.state = 479 localctx.presort = self.fugueColsSort() @@ -3665,9 +3672,9 @@ def fugueCreateTask(self): self.enterRule(localctx, 20, self.RULE_fugueCreateTask) try: self.enterOuterAlt(localctx, 1) - self.state = 480 + self.state = 482 self.match(fugue_sqlParser.CREATE) - self.state = 481 + self.state = 483 localctx.params = self.fugueSingleOutputExtensionCommon() except RecognitionException as re: localctx.exception = re @@ -3722,21 +3729,21 @@ def fugueCreateDataTask(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 483 - self.match(fugue_sqlParser.CREATE) self.state = 485 + self.match(fugue_sqlParser.CREATE) + self.state = 487 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.DATA: - self.state = 484 + self.state = 486 self.match(fugue_sqlParser.DATA) - self.state = 487 + self.state = 489 localctx.data = self.fugueJsonArray() - self.state = 488 + self.state = 490 self.match(fugue_sqlParser.SCHEMA) - self.state = 489 + self.state = 491 localctx.schema = self.fugueSchema() except RecognitionException as re: localctx.exception = re @@ -3798,33 +3805,33 @@ def fugueLoadTask(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 491 - self.match(fugue_sqlParser.LOAD) self.state = 493 + self.match(fugue_sqlParser.LOAD) + self.state = 495 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.PARQUET) | (1 << fugue_sqlParser.CSV) | (1 << fugue_sqlParser.JSON))) != 0): - self.state = 492 + self.state = 494 localctx.fmt = self.fugueFileFormat() - self.state = 495 - localctx.path = self.fuguePath() self.state = 497 + localctx.path = self.fuguePath() + self.state = 499 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,20,self._ctx) if la_ == 1: - self.state = 496 + self.state = 498 localctx.params = self.fugueParams() - self.state = 501 + self.state = 503 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,21,self._ctx) if la_ == 1: - self.state = 499 + self.state = 501 self.match(fugue_sqlParser.COLUMNS) - self.state = 500 + self.state = 502 localctx.columns = self.fugueLoadColumns() @@ -3888,33 +3895,33 @@ def fugueOutputTask(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 503 - self.match(fugue_sqlParser.OUTPUT) self.state = 505 + self.match(fugue_sqlParser.OUTPUT) + self.state = 507 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,22,self._ctx) if la_ == 1: - self.state = 504 + self.state = 506 localctx.dfs = self.fugueDataFrames() - self.state = 508 + self.state = 510 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.HASH) | (1 << fugue_sqlParser.RAND) | (1 << fugue_sqlParser.EVEN) | (1 << fugue_sqlParser.PREPARTITION))) != 0): - self.state = 507 + self.state = 509 localctx.partition = self.fuguePrepartition() - self.state = 510 + self.state = 512 self.match(fugue_sqlParser.USING) - self.state = 511 - localctx.using = self.fugueExtension() self.state = 513 + localctx.using = self.fugueExtension() + self.state = 515 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,24,self._ctx) if la_ == 1: - self.state = 512 + self.state = 514 localctx.params = self.fugueParams() @@ -3977,41 +3984,41 @@ def fuguePrintTask(self): self.enterRule(localctx, 28, self.RULE_fuguePrintTask) try: self.enterOuterAlt(localctx, 1) - self.state = 515 - self.match(fugue_sqlParser.PRINT) self.state = 517 + self.match(fugue_sqlParser.PRINT) + self.state = 519 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,25,self._ctx) if la_ == 1: - self.state = 516 + self.state = 518 localctx.dfs = self.fugueDataFrames() - self.state = 521 + self.state = 523 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,26,self._ctx) if la_ == 1: - self.state = 519 + self.state = 521 self.match(fugue_sqlParser.ROWS) - self.state = 520 + self.state = 522 localctx.rows = self.match(fugue_sqlParser.INTEGER_VALUE) - self.state = 524 + self.state = 526 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,27,self._ctx) if la_ == 1: - self.state = 523 + self.state = 525 localctx.count = self.match(fugue_sqlParser.ROWCOUNT) - self.state = 528 + self.state = 530 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,28,self._ctx) if la_ == 1: - self.state = 526 + self.state = 528 self.match(fugue_sqlParser.TITLE) - self.state = 527 + self.state = 529 localctx.title = self.match(fugue_sqlParser.STRING) @@ -4087,49 +4094,49 @@ def fugueSaveTask(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 530 - self.match(fugue_sqlParser.SAVE) self.state = 532 + self.match(fugue_sqlParser.SAVE) + self.state = 534 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,29,self._ctx) if la_ == 1: - self.state = 531 + self.state = 533 localctx.df = self.fugueDataFrame() - self.state = 535 + self.state = 537 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.HASH) | (1 << fugue_sqlParser.RAND) | (1 << fugue_sqlParser.EVEN) | (1 << fugue_sqlParser.PREPARTITION))) != 0): - self.state = 534 + self.state = 536 localctx.partition = self.fuguePrepartition() - self.state = 537 - localctx.m = self.fugueSaveMode() self.state = 539 + localctx.m = self.fugueSaveMode() + self.state = 541 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.SINGLE: - self.state = 538 + self.state = 540 localctx.single = self.fugueSingleFile() - self.state = 542 + self.state = 544 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.PARQUET) | (1 << fugue_sqlParser.CSV) | (1 << fugue_sqlParser.JSON))) != 0): - self.state = 541 + self.state = 543 localctx.fmt = self.fugueFileFormat() - self.state = 544 - localctx.path = self.fuguePath() self.state = 546 + localctx.path = self.fuguePath() + self.state = 548 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,33,self._ctx) if la_ == 1: - self.state = 545 + self.state = 547 localctx.params = self.fugueParams() @@ -4170,7 +4177,7 @@ def fugueSingleFile(self): self.enterRule(localctx, 32, self.RULE_fugueSingleFile) try: self.enterOuterAlt(localctx, 1) - self.state = 548 + self.state = 550 localctx.single = self.match(fugue_sqlParser.SINGLE) except RecognitionException as re: localctx.exception = re @@ -4214,18 +4221,18 @@ def fugueLoadColumns(self): localctx = fugue_sqlParser.FugueLoadColumnsContext(self, self._ctx, self.state) self.enterRule(localctx, 34, self.RULE_fugueLoadColumns) try: - self.state = 552 + self.state = 554 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,34,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 550 + self.state = 552 localctx.schema = self.fugueSchema() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 551 + self.state = 553 localctx.cols = self.fugueCols() pass @@ -4273,7 +4280,7 @@ def fugueSaveMode(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 554 + self.state = 556 _la = self._input.LA(1) if not(_la==fugue_sqlParser.APPEND or _la==fugue_sqlParser.OVERWRITE or _la==fugue_sqlParser.TO): self._errHandler.recoverInline(self) @@ -4323,7 +4330,7 @@ def fugueFileFormat(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 556 + self.state = 558 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.PARQUET) | (1 << fugue_sqlParser.CSV) | (1 << fugue_sqlParser.JSON))) != 0)): self._errHandler.recoverInline(self) @@ -4366,7 +4373,7 @@ def fuguePath(self): self.enterRule(localctx, 40, self.RULE_fuguePath) try: self.enterOuterAlt(localctx, 1) - self.state = 558 + self.state = 560 self.match(fugue_sqlParser.STRING) except RecognitionException as re: localctx.exception = re @@ -4384,6 +4391,7 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): self.parser = parser self.value = None # FuguePersistValueContext self.checkpoint = None # Token + self.ns = None # FugueCheckpointNamespaceContext def PERSIST(self): return self.getToken(fugue_sqlParser.PERSIST, 0) @@ -4395,6 +4403,10 @@ def fuguePersistValue(self): def CHECKPOINT(self): return self.getToken(fugue_sqlParser.CHECKPOINT, 0) + def fugueCheckpointNamespace(self): + return self.getTypedRuleContext(fugue_sqlParser.FugueCheckpointNamespaceContext,0) + + def getRuleIndex(self): return fugue_sqlParser.RULE_fuguePersist @@ -4412,26 +4424,34 @@ def fuguePersist(self): localctx = fugue_sqlParser.FuguePersistContext(self, self._ctx, self.state) self.enterRule(localctx, 42, self.RULE_fuguePersist) try: - self.state = 565 + self.state = 570 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.PERSIST]: self.enterOuterAlt(localctx, 1) - self.state = 560 - self.match(fugue_sqlParser.PERSIST) self.state = 562 + self.match(fugue_sqlParser.PERSIST) + self.state = 564 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,35,self._ctx) if la_ == 1: - self.state = 561 + self.state = 563 localctx.value = self.fuguePersistValue() pass elif token in [fugue_sqlParser.CHECKPOINT]: self.enterOuterAlt(localctx, 2) - self.state = 564 + self.state = 566 localctx.checkpoint = self.match(fugue_sqlParser.CHECKPOINT) + self.state = 568 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,36,self._ctx) + if la_ == 1: + self.state = 567 + localctx.ns = self.fugueCheckpointNamespace() + + pass else: raise NoViableAltException(self) @@ -4445,6 +4465,44 @@ def fuguePersist(self): return localctx + class FugueCheckpointNamespaceContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def STRING(self): + return self.getToken(fugue_sqlParser.STRING, 0) + + def getRuleIndex(self): + return fugue_sqlParser.RULE_fugueCheckpointNamespace + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFugueCheckpointNamespace" ): + return visitor.visitFugueCheckpointNamespace(self) + else: + return visitor.visitChildren(self) + + + + + def fugueCheckpointNamespace(self): + + localctx = fugue_sqlParser.FugueCheckpointNamespaceContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_fugueCheckpointNamespace) + try: + self.enterOuterAlt(localctx, 1) + self.state = 572 + self.match(fugue_sqlParser.STRING) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FuguePersistValueContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -4470,10 +4528,10 @@ def accept(self, visitor:ParseTreeVisitor): def fuguePersistValue(self): localctx = fugue_sqlParser.FuguePersistValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 44, self.RULE_fuguePersistValue) + self.enterRule(localctx, 46, self.RULE_fuguePersistValue) try: self.enterOuterAlt(localctx, 1) - self.state = 567 + self.state = 574 self.multipartIdentifier() except RecognitionException as re: localctx.exception = re @@ -4508,10 +4566,10 @@ def accept(self, visitor:ParseTreeVisitor): def fugueBroadcast(self): localctx = fugue_sqlParser.FugueBroadcastContext(self, self._ctx, self.state) - self.enterRule(localctx, 46, self.RULE_fugueBroadcast) + self.enterRule(localctx, 48, self.RULE_fugueBroadcast) try: self.enterOuterAlt(localctx, 1) - self.state = 569 + self.state = 576 self.match(fugue_sqlParser.BROADCAST) except RecognitionException as re: localctx.exception = re @@ -4582,48 +4640,48 @@ def accept(self, visitor:ParseTreeVisitor): def fugueDataFrames(self): localctx = fugue_sqlParser.FugueDataFramesContext(self, self._ctx, self.state) - self.enterRule(localctx, 48, self.RULE_fugueDataFrames) + self.enterRule(localctx, 50, self.RULE_fugueDataFrames) try: - self.state = 587 + self.state = 594 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,39,self._ctx) + la_ = self._interp.adaptivePredict(self._input,40,self._ctx) if la_ == 1: localctx = fugue_sqlParser.FugueDataFramesListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 571 + self.state = 578 self.fugueDataFrame() - self.state = 576 + self.state = 583 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,37,self._ctx) + _alt = self._interp.adaptivePredict(self._input,38,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 572 + self.state = 579 self.match(fugue_sqlParser.T__0) - self.state = 573 + self.state = 580 self.fugueDataFrame() - self.state = 578 + self.state = 585 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,37,self._ctx) + _alt = self._interp.adaptivePredict(self._input,38,self._ctx) pass elif la_ == 2: localctx = fugue_sqlParser.FugueDataFramesDictContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 579 + self.state = 586 self.fugueDataFramePair() - self.state = 584 + self.state = 591 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,38,self._ctx) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 580 + self.state = 587 self.match(fugue_sqlParser.T__0) - self.state = 581 + self.state = 588 self.fugueDataFramePair() - self.state = 586 + self.state = 593 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,38,self._ctx) + _alt = self._interp.adaptivePredict(self._input,39,self._ctx) pass @@ -4671,20 +4729,20 @@ def accept(self, visitor:ParseTreeVisitor): def fugueDataFramePair(self): localctx = fugue_sqlParser.FugueDataFramePairContext(self, self._ctx, self.state) - self.enterRule(localctx, 50, self.RULE_fugueDataFramePair) + self.enterRule(localctx, 52, self.RULE_fugueDataFramePair) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 589 + self.state = 596 localctx.key = self.fugueIdentifier() - self.state = 590 + self.state = 597 _la = self._input.LA(1) if not(_la==fugue_sqlParser.T__1 or _la==fugue_sqlParser.EQUAL): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 591 + self.state = 598 localctx.value = self.fugueDataFrame() except RecognitionException as re: localctx.exception = re @@ -4750,26 +4808,26 @@ def accept(self, visitor:ParseTreeVisitor): def fugueDataFrame(self): localctx = fugue_sqlParser.FugueDataFrameContext(self, self._ctx, self.state) - self.enterRule(localctx, 52, self.RULE_fugueDataFrame) + self.enterRule(localctx, 54, self.RULE_fugueDataFrame) try: - self.state = 598 + self.state = 605 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,40,self._ctx) + la_ = self._interp.adaptivePredict(self._input,41,self._ctx) if la_ == 1: localctx = fugue_sqlParser.FugueDataFrameSourceContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 593 + self.state = 600 self.fugueIdentifier() pass elif la_ == 2: localctx = fugue_sqlParser.FugueDataFrameNestedContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 594 + self.state = 601 self.match(fugue_sqlParser.T__2) - self.state = 595 + self.state = 602 localctx.task = self.fugueNestableTask() - self.state = 596 + self.state = 603 self.match(fugue_sqlParser.T__3) pass @@ -4814,12 +4872,12 @@ def accept(self, visitor:ParseTreeVisitor): def fugueAssignment(self): localctx = fugue_sqlParser.FugueAssignmentContext(self, self._ctx, self.state) - self.enterRule(localctx, 54, self.RULE_fugueAssignment) + self.enterRule(localctx, 56, self.RULE_fugueAssignment) try: self.enterOuterAlt(localctx, 1) - self.state = 600 + self.state = 607 localctx.varname = self.fugueIdentifier() - self.state = 601 + self.state = 608 localctx.sign = self.fugueAssignmentSign() except RecognitionException as re: localctx.exception = re @@ -4839,6 +4897,9 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def COLONEQUAL(self): return self.getToken(fugue_sqlParser.COLONEQUAL, 0) + def CHECKPOINTSIGN(self): + return self.getToken(fugue_sqlParser.CHECKPOINTSIGN, 0) + def EQUAL(self): return self.getToken(fugue_sqlParser.EQUAL, 0) @@ -4857,24 +4918,30 @@ def accept(self, visitor:ParseTreeVisitor): def fugueAssignmentSign(self): localctx = fugue_sqlParser.FugueAssignmentSignContext(self, self._ctx, self.state) - self.enterRule(localctx, 56, self.RULE_fugueAssignmentSign) + self.enterRule(localctx, 58, self.RULE_fugueAssignmentSign) try: - self.state = 606 + self.state = 614 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,41,self._ctx) + la_ = self._interp.adaptivePredict(self._input,42,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 603 + self.state = 610 self.match(fugue_sqlParser.COLONEQUAL) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 604 + self.state = 611 + self.match(fugue_sqlParser.CHECKPOINTSIGN) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 612 if not self.simpleAssign: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.simpleAssign") - self.state = 605 + self.state = 613 self.match(fugue_sqlParser.EQUAL) pass @@ -4930,28 +4997,28 @@ def accept(self, visitor:ParseTreeVisitor): def fugueSingleOutputExtensionCommonWild(self): localctx = fugue_sqlParser.FugueSingleOutputExtensionCommonWildContext(self, self._ctx, self.state) - self.enterRule(localctx, 58, self.RULE_fugueSingleOutputExtensionCommonWild) + self.enterRule(localctx, 60, self.RULE_fugueSingleOutputExtensionCommonWild) try: self.enterOuterAlt(localctx, 1) - self.state = 608 + self.state = 616 self.match(fugue_sqlParser.USING) - self.state = 609 + self.state = 617 localctx.using = self.fugueExtension() - self.state = 611 + self.state = 619 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,42,self._ctx) + la_ = self._interp.adaptivePredict(self._input,43,self._ctx) if la_ == 1: - self.state = 610 + self.state = 618 localctx.params = self.fugueParams() - self.state = 615 + self.state = 623 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,43,self._ctx) + la_ = self._interp.adaptivePredict(self._input,44,self._ctx) if la_ == 1: - self.state = 613 + self.state = 621 self.match(fugue_sqlParser.SCHEMA) - self.state = 614 + self.state = 622 localctx.schema = self.fugueWildSchema() @@ -5006,28 +5073,28 @@ def accept(self, visitor:ParseTreeVisitor): def fugueSingleOutputExtensionCommon(self): localctx = fugue_sqlParser.FugueSingleOutputExtensionCommonContext(self, self._ctx, self.state) - self.enterRule(localctx, 60, self.RULE_fugueSingleOutputExtensionCommon) + self.enterRule(localctx, 62, self.RULE_fugueSingleOutputExtensionCommon) try: self.enterOuterAlt(localctx, 1) - self.state = 617 + self.state = 625 self.match(fugue_sqlParser.USING) - self.state = 618 + self.state = 626 localctx.using = self.fugueExtension() - self.state = 620 + self.state = 628 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,44,self._ctx) + la_ = self._interp.adaptivePredict(self._input,45,self._ctx) if la_ == 1: - self.state = 619 + self.state = 627 localctx.params = self.fugueParams() - self.state = 624 + self.state = 632 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,45,self._ctx) + la_ = self._interp.adaptivePredict(self._input,46,self._ctx) if la_ == 1: - self.state = 622 + self.state = 630 self.match(fugue_sqlParser.SCHEMA) - self.state = 623 + self.state = 631 localctx.schema = self.fugueSchema() @@ -5068,23 +5135,23 @@ def accept(self, visitor:ParseTreeVisitor): def fugueExtension(self): localctx = fugue_sqlParser.FugueExtensionContext(self, self._ctx, self.state) - self.enterRule(localctx, 62, self.RULE_fugueExtension) + self.enterRule(localctx, 64, self.RULE_fugueExtension) try: self.enterOuterAlt(localctx, 1) - self.state = 626 + self.state = 634 self.fugueIdentifier() - self.state = 631 + self.state = 639 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,46,self._ctx) + _alt = self._interp.adaptivePredict(self._input,47,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 627 + self.state = 635 self.match(fugue_sqlParser.T__4) - self.state = 628 + self.state = 636 self.fugueIdentifier() - self.state = 633 + self.state = 641 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,46,self._ctx) + _alt = self._interp.adaptivePredict(self._input,47,self._ctx) except RecognitionException as re: localctx.exception = re @@ -5134,40 +5201,40 @@ def accept(self, visitor:ParseTreeVisitor): def fugueZipType(self): localctx = fugue_sqlParser.FugueZipTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 64, self.RULE_fugueZipType) + self.enterRule(localctx, 66, self.RULE_fugueZipType) try: - self.state = 642 + self.state = 650 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.CROSS]: self.enterOuterAlt(localctx, 1) - self.state = 634 + self.state = 642 self.match(fugue_sqlParser.CROSS) pass elif token in [fugue_sqlParser.INNER]: self.enterOuterAlt(localctx, 2) - self.state = 635 + self.state = 643 self.match(fugue_sqlParser.INNER) pass elif token in [fugue_sqlParser.LEFT]: self.enterOuterAlt(localctx, 3) - self.state = 636 + self.state = 644 self.match(fugue_sqlParser.LEFT) - self.state = 637 + self.state = 645 self.match(fugue_sqlParser.OUTER) pass elif token in [fugue_sqlParser.RIGHT]: self.enterOuterAlt(localctx, 4) - self.state = 638 + self.state = 646 self.match(fugue_sqlParser.RIGHT) - self.state = 639 + self.state = 647 self.match(fugue_sqlParser.OUTER) pass elif token in [fugue_sqlParser.FULL]: self.enterOuterAlt(localctx, 5) - self.state = 640 + self.state = 648 self.match(fugue_sqlParser.FULL) - self.state = 641 + self.state = 649 self.match(fugue_sqlParser.OUTER) pass else: @@ -5232,43 +5299,43 @@ def accept(self, visitor:ParseTreeVisitor): def fuguePrepartition(self): localctx = fugue_sqlParser.FuguePrepartitionContext(self, self._ctx, self.state) - self.enterRule(localctx, 66, self.RULE_fuguePrepartition) + self.enterRule(localctx, 68, self.RULE_fuguePrepartition) self._la = 0 # Token type try: - self.state = 667 + self.state = 675 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,53,self._ctx) + la_ = self._interp.adaptivePredict(self._input,54,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 645 + self.state = 653 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.HASH) | (1 << fugue_sqlParser.RAND) | (1 << fugue_sqlParser.EVEN))) != 0): - self.state = 644 + self.state = 652 localctx.algo = self.fuguePartitionAlgo() - self.state = 647 + self.state = 655 self.match(fugue_sqlParser.PREPARTITION) - self.state = 648 + self.state = 656 localctx.num = self.fuguePartitionNum(0) - self.state = 651 + self.state = 659 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.BY: - self.state = 649 + self.state = 657 self.match(fugue_sqlParser.BY) - self.state = 650 + self.state = 658 localctx.by = self.fugueCols() - self.state = 655 + self.state = 663 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PRESORT: - self.state = 653 + self.state = 661 self.match(fugue_sqlParser.PRESORT) - self.state = 654 + self.state = 662 localctx.presort = self.fugueColsSort() @@ -5276,27 +5343,27 @@ def fuguePrepartition(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 658 + self.state = 666 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.HASH) | (1 << fugue_sqlParser.RAND) | (1 << fugue_sqlParser.EVEN))) != 0): - self.state = 657 + self.state = 665 localctx.algo = self.fuguePartitionAlgo() - self.state = 660 + self.state = 668 self.match(fugue_sqlParser.PREPARTITION) - self.state = 661 + self.state = 669 self.match(fugue_sqlParser.BY) - self.state = 662 + self.state = 670 localctx.by = self.fugueCols() - self.state = 665 + self.state = 673 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PRESORT: - self.state = 663 + self.state = 671 self.match(fugue_sqlParser.PRESORT) - self.state = 664 + self.state = 672 localctx.presort = self.fugueColsSort() @@ -5342,11 +5409,11 @@ def accept(self, visitor:ParseTreeVisitor): def fuguePartitionAlgo(self): localctx = fugue_sqlParser.FuguePartitionAlgoContext(self, self._ctx, self.state) - self.enterRule(localctx, 68, self.RULE_fuguePartitionAlgo) + self.enterRule(localctx, 70, self.RULE_fuguePartitionAlgo) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 669 + self.state = 677 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.HASH) | (1 << fugue_sqlParser.RAND) | (1 << fugue_sqlParser.EVEN))) != 0)): self._errHandler.recoverInline(self) @@ -5407,33 +5474,33 @@ def fuguePartitionNum(self, _p:int=0): _parentState = self.state localctx = fugue_sqlParser.FuguePartitionNumContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 70 - self.enterRecursionRule(localctx, 70, self.RULE_fuguePartitionNum, _p) + _startState = 72 + self.enterRecursionRule(localctx, 72, self.RULE_fuguePartitionNum, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 677 + self.state = 685 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.ROWCOUNT, fugue_sqlParser.CONCURRENCY, fugue_sqlParser.MINUS, fugue_sqlParser.INTEGER_VALUE, fugue_sqlParser.DECIMAL_VALUE]: - self.state = 672 + self.state = 680 self.fuguePartitionNumber() pass elif token in [fugue_sqlParser.T__2]: - self.state = 673 + self.state = 681 self.match(fugue_sqlParser.T__2) - self.state = 674 + self.state = 682 self.fuguePartitionNum(0) - self.state = 675 + self.state = 683 self.match(fugue_sqlParser.T__3) pass else: raise NoViableAltException(self) self._ctx.stop = self._input.LT(-1) - self.state = 684 + self.state = 692 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,55,self._ctx) + _alt = self._interp.adaptivePredict(self._input,56,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: @@ -5441,22 +5508,22 @@ def fuguePartitionNum(self, _p:int=0): _prevctx = localctx localctx = fugue_sqlParser.FuguePartitionNumContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_fuguePartitionNum) - self.state = 679 + self.state = 687 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 680 + self.state = 688 _la = self._input.LA(1) if not(((((_la - 302)) & ~0x3f) == 0 and ((1 << (_la - 302)) & ((1 << (fugue_sqlParser.PLUS - 302)) | (1 << (fugue_sqlParser.MINUS - 302)) | (1 << (fugue_sqlParser.ASTERISK - 302)) | (1 << (fugue_sqlParser.SLASH - 302)))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 681 + self.state = 689 self.fuguePartitionNum(2) - self.state = 686 + self.state = 694 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,55,self._ctx) + _alt = self._interp.adaptivePredict(self._input,56,self._ctx) except RecognitionException as re: localctx.exception = re @@ -5503,49 +5570,49 @@ def accept(self, visitor:ParseTreeVisitor): def fuguePartitionNumber(self): localctx = fugue_sqlParser.FuguePartitionNumberContext(self, self._ctx, self.state) - self.enterRule(localctx, 72, self.RULE_fuguePartitionNumber) + self.enterRule(localctx, 74, self.RULE_fuguePartitionNumber) self._la = 0 # Token type try: - self.state = 697 + self.state = 705 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,58,self._ctx) + la_ = self._interp.adaptivePredict(self._input,59,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 688 + self.state = 696 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 687 + self.state = 695 self.match(fugue_sqlParser.MINUS) - self.state = 690 + self.state = 698 self.match(fugue_sqlParser.DECIMAL_VALUE) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 692 + self.state = 700 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 691 + self.state = 699 self.match(fugue_sqlParser.MINUS) - self.state = 694 + self.state = 702 self.match(fugue_sqlParser.INTEGER_VALUE) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 695 + self.state = 703 self.match(fugue_sqlParser.ROWCOUNT) pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 696 + self.state = 704 self.match(fugue_sqlParser.CONCURRENCY) pass @@ -5619,33 +5686,33 @@ def accept(self, visitor:ParseTreeVisitor): def fugueParams(self): localctx = fugue_sqlParser.FugueParamsContext(self, self._ctx, self.state) - self.enterRule(localctx, 74, self.RULE_fugueParams) + self.enterRule(localctx, 76, self.RULE_fugueParams) self._la = 0 # Token type try: - self.state = 705 + self.state = 713 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,60,self._ctx) + la_ = self._interp.adaptivePredict(self._input,61,self._ctx) if la_ == 1: localctx = fugue_sqlParser.FugueParamsPairsContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 699 + self.state = 707 self.match(fugue_sqlParser.PARAMS) - self.state = 700 + self.state = 708 localctx.pairs = self.fugueJsonPairs() pass elif la_ == 2: localctx = fugue_sqlParser.FugueParamsObjContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 702 + self.state = 710 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARAMS: - self.state = 701 + self.state = 709 self.match(fugue_sqlParser.PARAMS) - self.state = 704 + self.state = 712 localctx.obj = self.fugueJsonObj() pass @@ -5687,23 +5754,23 @@ def accept(self, visitor:ParseTreeVisitor): def fugueCols(self): localctx = fugue_sqlParser.FugueColsContext(self, self._ctx, self.state) - self.enterRule(localctx, 76, self.RULE_fugueCols) + self.enterRule(localctx, 78, self.RULE_fugueCols) try: self.enterOuterAlt(localctx, 1) - self.state = 707 + self.state = 715 self.fugueColumnIdentifier() - self.state = 712 + self.state = 720 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + _alt = self._interp.adaptivePredict(self._input,62,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 708 + self.state = 716 self.match(fugue_sqlParser.T__0) - self.state = 709 + self.state = 717 self.fugueColumnIdentifier() - self.state = 714 + self.state = 722 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,61,self._ctx) + _alt = self._interp.adaptivePredict(self._input,62,self._ctx) except RecognitionException as re: localctx.exception = re @@ -5742,23 +5809,23 @@ def accept(self, visitor:ParseTreeVisitor): def fugueColsSort(self): localctx = fugue_sqlParser.FugueColsSortContext(self, self._ctx, self.state) - self.enterRule(localctx, 78, self.RULE_fugueColsSort) + self.enterRule(localctx, 80, self.RULE_fugueColsSort) try: self.enterOuterAlt(localctx, 1) - self.state = 715 + self.state = 723 self.fugueColSort() - self.state = 720 + self.state = 728 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,62,self._ctx) + _alt = self._interp.adaptivePredict(self._input,63,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 716 + self.state = 724 self.match(fugue_sqlParser.T__0) - self.state = 717 + self.state = 725 self.fugueColSort() - self.state = 722 + self.state = 730 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,62,self._ctx) + _alt = self._interp.adaptivePredict(self._input,63,self._ctx) except RecognitionException as re: localctx.exception = re @@ -5800,17 +5867,17 @@ def accept(self, visitor:ParseTreeVisitor): def fugueColSort(self): localctx = fugue_sqlParser.FugueColSortContext(self, self._ctx, self.state) - self.enterRule(localctx, 80, self.RULE_fugueColSort) + self.enterRule(localctx, 82, self.RULE_fugueColSort) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 723 + self.state = 731 self.fugueColumnIdentifier() - self.state = 725 + self.state = 733 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,63,self._ctx) + la_ = self._interp.adaptivePredict(self._input,64,self._ctx) if la_ == 1: - self.state = 724 + self.state = 732 _la = self._input.LA(1) if not(_la==fugue_sqlParser.ASC or _la==fugue_sqlParser.DESC): self._errHandler.recoverInline(self) @@ -5853,10 +5920,10 @@ def accept(self, visitor:ParseTreeVisitor): def fugueColumnIdentifier(self): localctx = fugue_sqlParser.FugueColumnIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 82, self.RULE_fugueColumnIdentifier) + self.enterRule(localctx, 84, self.RULE_fugueColumnIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 727 + self.state = 735 self.fugueIdentifier() except RecognitionException as re: localctx.exception = re @@ -5895,23 +5962,23 @@ def accept(self, visitor:ParseTreeVisitor): def fugueWildSchema(self): localctx = fugue_sqlParser.FugueWildSchemaContext(self, self._ctx, self.state) - self.enterRule(localctx, 84, self.RULE_fugueWildSchema) + self.enterRule(localctx, 86, self.RULE_fugueWildSchema) try: self.enterOuterAlt(localctx, 1) - self.state = 729 + self.state = 737 self.fugueWildSchemaPair() - self.state = 734 + self.state = 742 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,64,self._ctx) + _alt = self._interp.adaptivePredict(self._input,65,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 730 + self.state = 738 self.match(fugue_sqlParser.T__0) - self.state = 731 + self.state = 739 self.fugueWildSchemaPair() - self.state = 736 + self.state = 744 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,64,self._ctx) + _alt = self._interp.adaptivePredict(self._input,65,self._ctx) except RecognitionException as re: localctx.exception = re @@ -5951,20 +6018,20 @@ def accept(self, visitor:ParseTreeVisitor): def fugueWildSchemaPair(self): localctx = fugue_sqlParser.FugueWildSchemaPairContext(self, self._ctx, self.state) - self.enterRule(localctx, 86, self.RULE_fugueWildSchemaPair) + self.enterRule(localctx, 88, self.RULE_fugueWildSchemaPair) try: - self.state = 739 + self.state = 747 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,65,self._ctx) + la_ = self._interp.adaptivePredict(self._input,66,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 737 + self.state = 745 localctx.pair = self.fugueSchemaPair() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 738 + self.state = 746 self.match(fugue_sqlParser.ASTERISK) pass @@ -6006,23 +6073,23 @@ def accept(self, visitor:ParseTreeVisitor): def fugueSchema(self): localctx = fugue_sqlParser.FugueSchemaContext(self, self._ctx, self.state) - self.enterRule(localctx, 88, self.RULE_fugueSchema) + self.enterRule(localctx, 90, self.RULE_fugueSchema) try: self.enterOuterAlt(localctx, 1) - self.state = 741 + self.state = 749 self.fugueSchemaPair() - self.state = 746 + self.state = 754 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,66,self._ctx) + _alt = self._interp.adaptivePredict(self._input,67,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 742 + self.state = 750 self.match(fugue_sqlParser.T__0) - self.state = 743 + self.state = 751 self.fugueSchemaPair() - self.state = 748 + self.state = 756 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,66,self._ctx) + _alt = self._interp.adaptivePredict(self._input,67,self._ctx) except RecognitionException as re: localctx.exception = re @@ -6064,14 +6131,14 @@ def accept(self, visitor:ParseTreeVisitor): def fugueSchemaPair(self): localctx = fugue_sqlParser.FugueSchemaPairContext(self, self._ctx, self.state) - self.enterRule(localctx, 90, self.RULE_fugueSchemaPair) + self.enterRule(localctx, 92, self.RULE_fugueSchemaPair) try: self.enterOuterAlt(localctx, 1) - self.state = 749 + self.state = 757 localctx.key = self.fugueSchemaKey() - self.state = 750 + self.state = 758 self.match(fugue_sqlParser.T__1) - self.state = 751 + self.state = 759 localctx.value = self.fugueSchemaType() except RecognitionException as re: localctx.exception = re @@ -6107,10 +6174,10 @@ def accept(self, visitor:ParseTreeVisitor): def fugueSchemaKey(self): localctx = fugue_sqlParser.FugueSchemaKeyContext(self, self._ctx, self.state) - self.enterRule(localctx, 92, self.RULE_fugueSchemaKey) + self.enterRule(localctx, 94, self.RULE_fugueSchemaKey) try: self.enterOuterAlt(localctx, 1) - self.state = 753 + self.state = 761 self.fugueIdentifier() except RecognitionException as re: localctx.exception = re @@ -6192,37 +6259,37 @@ def accept(self, visitor:ParseTreeVisitor): def fugueSchemaType(self): localctx = fugue_sqlParser.FugueSchemaTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 94, self.RULE_fugueSchemaType) + self.enterRule(localctx, 96, self.RULE_fugueSchemaType) try: - self.state = 764 + self.state = 772 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,67,self._ctx) + la_ = self._interp.adaptivePredict(self._input,68,self._ctx) if la_ == 1: localctx = fugue_sqlParser.FugueSchemaSimpleTypeContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 755 + self.state = 763 self.fugueIdentifier() pass elif la_ == 2: localctx = fugue_sqlParser.FugueSchemaListTypeContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 756 + self.state = 764 self.match(fugue_sqlParser.T__5) - self.state = 757 + self.state = 765 self.fugueSchemaType() - self.state = 758 + self.state = 766 self.match(fugue_sqlParser.T__6) pass elif la_ == 3: localctx = fugue_sqlParser.FugueSchemaStructTypeContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 760 + self.state = 768 self.match(fugue_sqlParser.T__7) - self.state = 761 + self.state = 769 self.fugueSchema() - self.state = 762 + self.state = 770 self.match(fugue_sqlParser.T__8) pass @@ -6261,10 +6328,10 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJson(self): localctx = fugue_sqlParser.FugueJsonContext(self, self._ctx, self.state) - self.enterRule(localctx, 96, self.RULE_fugueJson) + self.enterRule(localctx, 98, self.RULE_fugueJson) try: self.enterOuterAlt(localctx, 1) - self.state = 766 + self.state = 774 self.fugueJsonValue() except RecognitionException as re: localctx.exception = re @@ -6300,61 +6367,61 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonObj(self): localctx = fugue_sqlParser.FugueJsonObjContext(self, self._ctx, self.state) - self.enterRule(localctx, 98, self.RULE_fugueJsonObj) + self.enterRule(localctx, 100, self.RULE_fugueJsonObj) self._la = 0 # Token type try: - self.state = 786 + self.state = 794 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,70,self._ctx) + la_ = self._interp.adaptivePredict(self._input,71,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 768 + self.state = 776 self.match(fugue_sqlParser.T__7) - self.state = 769 + self.state = 777 self.fugueJsonPairs() - self.state = 771 + self.state = 779 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__0: - self.state = 770 + self.state = 778 self.match(fugue_sqlParser.T__0) - self.state = 773 + self.state = 781 self.match(fugue_sqlParser.T__8) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 775 + self.state = 783 self.match(fugue_sqlParser.T__7) - self.state = 776 + self.state = 784 self.match(fugue_sqlParser.T__8) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 777 + self.state = 785 self.match(fugue_sqlParser.T__2) - self.state = 778 + self.state = 786 self.fugueJsonPairs() - self.state = 780 + self.state = 788 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__0: - self.state = 779 + self.state = 787 self.match(fugue_sqlParser.T__0) - self.state = 782 + self.state = 790 self.match(fugue_sqlParser.T__3) pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 784 + self.state = 792 self.match(fugue_sqlParser.T__2) - self.state = 785 + self.state = 793 self.match(fugue_sqlParser.T__3) pass @@ -6396,23 +6463,23 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonPairs(self): localctx = fugue_sqlParser.FugueJsonPairsContext(self, self._ctx, self.state) - self.enterRule(localctx, 100, self.RULE_fugueJsonPairs) + self.enterRule(localctx, 102, self.RULE_fugueJsonPairs) try: self.enterOuterAlt(localctx, 1) - self.state = 788 + self.state = 796 self.fugueJsonPair() - self.state = 793 + self.state = 801 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,71,self._ctx) + _alt = self._interp.adaptivePredict(self._input,72,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 789 + self.state = 797 self.match(fugue_sqlParser.T__0) - self.state = 790 + self.state = 798 self.fugueJsonPair() - self.state = 795 + self.state = 803 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,71,self._ctx) + _alt = self._interp.adaptivePredict(self._input,72,self._ctx) except RecognitionException as re: localctx.exception = re @@ -6457,20 +6524,20 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonPair(self): localctx = fugue_sqlParser.FugueJsonPairContext(self, self._ctx, self.state) - self.enterRule(localctx, 102, self.RULE_fugueJsonPair) + self.enterRule(localctx, 104, self.RULE_fugueJsonPair) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 796 + self.state = 804 localctx.key = self.fugueJsonKey() - self.state = 797 + self.state = 805 _la = self._input.LA(1) if not(_la==fugue_sqlParser.T__1 or _la==fugue_sqlParser.EQUAL): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 798 + self.state = 806 localctx.value = self.fugueJsonValue() except RecognitionException as re: localctx.exception = re @@ -6510,20 +6577,20 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonKey(self): localctx = fugue_sqlParser.FugueJsonKeyContext(self, self._ctx, self.state) - self.enterRule(localctx, 104, self.RULE_fugueJsonKey) + self.enterRule(localctx, 106, self.RULE_fugueJsonKey) try: - self.state = 802 + self.state = 810 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,72,self._ctx) + la_ = self._interp.adaptivePredict(self._input,73,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 800 + self.state = 808 self.fugueIdentifier() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 801 + self.state = 809 self.fugueJsonString() pass @@ -6565,48 +6632,48 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonArray(self): localctx = fugue_sqlParser.FugueJsonArrayContext(self, self._ctx, self.state) - self.enterRule(localctx, 106, self.RULE_fugueJsonArray) + self.enterRule(localctx, 108, self.RULE_fugueJsonArray) self._la = 0 # Token type try: - self.state = 820 + self.state = 828 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,75,self._ctx) + la_ = self._interp.adaptivePredict(self._input,76,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 804 + self.state = 812 self.match(fugue_sqlParser.T__5) - self.state = 805 + self.state = 813 self.fugueJsonValue() - self.state = 810 + self.state = 818 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,73,self._ctx) + _alt = self._interp.adaptivePredict(self._input,74,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 806 + self.state = 814 self.match(fugue_sqlParser.T__0) - self.state = 807 + self.state = 815 self.fugueJsonValue() - self.state = 812 + self.state = 820 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,73,self._ctx) + _alt = self._interp.adaptivePredict(self._input,74,self._ctx) - self.state = 814 + self.state = 822 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__0: - self.state = 813 + self.state = 821 self.match(fugue_sqlParser.T__0) - self.state = 816 + self.state = 824 self.match(fugue_sqlParser.T__6) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 818 + self.state = 826 self.match(fugue_sqlParser.T__5) - self.state = 819 + self.state = 827 self.match(fugue_sqlParser.T__6) pass @@ -6665,44 +6732,44 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonValue(self): localctx = fugue_sqlParser.FugueJsonValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 108, self.RULE_fugueJsonValue) + self.enterRule(localctx, 110, self.RULE_fugueJsonValue) try: - self.state = 828 + self.state = 836 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,76,self._ctx) + la_ = self._interp.adaptivePredict(self._input,77,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 822 + self.state = 830 self.fugueJsonString() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 823 + self.state = 831 self.fugueJsonNumber() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 824 + self.state = 832 self.fugueJsonObj() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 825 + self.state = 833 self.fugueJsonArray() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 826 + self.state = 834 self.fugueJsonBool() pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 827 + self.state = 835 self.fugueJsonNull() pass @@ -6741,10 +6808,10 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonNumber(self): localctx = fugue_sqlParser.FugueJsonNumberContext(self, self._ctx, self.state) - self.enterRule(localctx, 110, self.RULE_fugueJsonNumber) + self.enterRule(localctx, 112, self.RULE_fugueJsonNumber) try: self.enterOuterAlt(localctx, 1) - self.state = 830 + self.state = 838 self.number() except RecognitionException as re: localctx.exception = re @@ -6779,10 +6846,10 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonString(self): localctx = fugue_sqlParser.FugueJsonStringContext(self, self._ctx, self.state) - self.enterRule(localctx, 112, self.RULE_fugueJsonString) + self.enterRule(localctx, 114, self.RULE_fugueJsonString) try: self.enterOuterAlt(localctx, 1) - self.state = 832 + self.state = 840 self.match(fugue_sqlParser.STRING) except RecognitionException as re: localctx.exception = re @@ -6820,11 +6887,11 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonBool(self): localctx = fugue_sqlParser.FugueJsonBoolContext(self, self._ctx, self.state) - self.enterRule(localctx, 114, self.RULE_fugueJsonBool) + self.enterRule(localctx, 116, self.RULE_fugueJsonBool) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 834 + self.state = 842 _la = self._input.LA(1) if not(_la==fugue_sqlParser.T__9 or _la==fugue_sqlParser.T__10 or _la==fugue_sqlParser.FALSE or _la==fugue_sqlParser.TRUE): self._errHandler.recoverInline(self) @@ -6864,11 +6931,11 @@ def accept(self, visitor:ParseTreeVisitor): def fugueJsonNull(self): localctx = fugue_sqlParser.FugueJsonNullContext(self, self._ctx, self.state) - self.enterRule(localctx, 116, self.RULE_fugueJsonNull) + self.enterRule(localctx, 118, self.RULE_fugueJsonNull) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 836 + self.state = 844 _la = self._input.LA(1) if not(_la==fugue_sqlParser.T__11 or _la==fugue_sqlParser.NULL): self._errHandler.recoverInline(self) @@ -6909,10 +6976,10 @@ def accept(self, visitor:ParseTreeVisitor): def fugueIdentifier(self): localctx = fugue_sqlParser.FugueIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 118, self.RULE_fugueIdentifier) + self.enterRule(localctx, 120, self.RULE_fugueIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 838 + self.state = 846 self.identifier() except RecognitionException as re: localctx.exception = re @@ -6951,23 +7018,23 @@ def accept(self, visitor:ParseTreeVisitor): def singleStatement(self): localctx = fugue_sqlParser.SingleStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 120, self.RULE_singleStatement) + self.enterRule(localctx, 122, self.RULE_singleStatement) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 840 + self.state = 848 self.statement() - self.state = 844 + self.state = 852 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__12: - self.state = 841 + self.state = 849 self.match(fugue_sqlParser.T__12) - self.state = 846 + self.state = 854 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 847 + self.state = 855 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -7006,12 +7073,12 @@ def accept(self, visitor:ParseTreeVisitor): def singleExpression(self): localctx = fugue_sqlParser.SingleExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 122, self.RULE_singleExpression) + self.enterRule(localctx, 124, self.RULE_singleExpression) try: self.enterOuterAlt(localctx, 1) - self.state = 849 + self.state = 857 self.namedExpression() - self.state = 850 + self.state = 858 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -7050,12 +7117,12 @@ def accept(self, visitor:ParseTreeVisitor): def singleTableIdentifier(self): localctx = fugue_sqlParser.SingleTableIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 124, self.RULE_singleTableIdentifier) + self.enterRule(localctx, 126, self.RULE_singleTableIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 852 + self.state = 860 self.tableIdentifier() - self.state = 853 + self.state = 861 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -7094,12 +7161,12 @@ def accept(self, visitor:ParseTreeVisitor): def singleMultipartIdentifier(self): localctx = fugue_sqlParser.SingleMultipartIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 126, self.RULE_singleMultipartIdentifier) + self.enterRule(localctx, 128, self.RULE_singleMultipartIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 855 + self.state = 863 self.multipartIdentifier() - self.state = 856 + self.state = 864 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -7138,12 +7205,12 @@ def accept(self, visitor:ParseTreeVisitor): def singleFunctionIdentifier(self): localctx = fugue_sqlParser.SingleFunctionIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 128, self.RULE_singleFunctionIdentifier) + self.enterRule(localctx, 130, self.RULE_singleFunctionIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 858 + self.state = 866 self.functionIdentifier() - self.state = 859 + self.state = 867 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -7182,12 +7249,12 @@ def accept(self, visitor:ParseTreeVisitor): def singleDataType(self): localctx = fugue_sqlParser.SingleDataTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 130, self.RULE_singleDataType) + self.enterRule(localctx, 132, self.RULE_singleDataType) try: self.enterOuterAlt(localctx, 1) - self.state = 861 + self.state = 869 self.dataType() - self.state = 862 + self.state = 870 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -7226,12 +7293,12 @@ def accept(self, visitor:ParseTreeVisitor): def singleTableSchema(self): localctx = fugue_sqlParser.SingleTableSchemaContext(self, self._ctx, self.state) - self.enterRule(localctx, 132, self.RULE_singleTableSchema) + self.enterRule(localctx, 134, self.RULE_singleTableSchema) try: self.enterOuterAlt(localctx, 1) - self.state = 864 + self.state = 872 self.colTypeList() - self.state = 865 + self.state = 873 self.match(fugue_sqlParser.EOF) except RecognitionException as re: localctx.exception = re @@ -9268,104 +9335,104 @@ def accept(self, visitor:ParseTreeVisitor): def statement(self): localctx = fugue_sqlParser.StatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 134, self.RULE_statement) + self.enterRule(localctx, 136, self.RULE_statement) self._la = 0 # Token type try: - self.state = 1572 + self.state = 1580 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,183,self._ctx) + la_ = self._interp.adaptivePredict(self._input,184,self._ctx) if la_ == 1: localctx = fugue_sqlParser.StatementDefaultContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 867 + self.state = 875 self.query() pass elif la_ == 2: localctx = fugue_sqlParser.DmlStatementContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 869 + self.state = 877 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.WITH: - self.state = 868 + self.state = 876 self.ctes() - self.state = 871 + self.state = 879 self.dmlStatementNoWith() pass elif la_ == 3: localctx = fugue_sqlParser.UseContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 872 + self.state = 880 self.match(fugue_sqlParser.USE) - self.state = 874 + self.state = 882 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,79,self._ctx) + la_ = self._interp.adaptivePredict(self._input,80,self._ctx) if la_ == 1: - self.state = 873 + self.state = 881 self.match(fugue_sqlParser.NAMESPACE) - self.state = 876 + self.state = 884 self.multipartIdentifier() pass elif la_ == 4: localctx = fugue_sqlParser.CreateNamespaceContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 877 + self.state = 885 self.match(fugue_sqlParser.CREATE) - self.state = 878 + self.state = 886 self.namespace() - self.state = 882 + self.state = 890 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,80,self._ctx) + la_ = self._interp.adaptivePredict(self._input,81,self._ctx) if la_ == 1: - self.state = 879 + self.state = 887 self.match(fugue_sqlParser.IF) - self.state = 880 + self.state = 888 self.match(fugue_sqlParser.NOT) - self.state = 881 + self.state = 889 self.match(fugue_sqlParser.EXISTS) - self.state = 884 - self.multipartIdentifier() self.state = 892 + self.multipartIdentifier() + self.state = 900 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.COMMENT or _la==fugue_sqlParser.LOCATION or _la==fugue_sqlParser.WITH: - self.state = 890 + self.state = 898 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.COMMENT]: - self.state = 885 + self.state = 893 self.commentSpec() pass elif token in [fugue_sqlParser.LOCATION]: - self.state = 886 + self.state = 894 self.locationSpec() pass elif token in [fugue_sqlParser.WITH]: - self.state = 887 + self.state = 895 self.match(fugue_sqlParser.WITH) - self.state = 888 + self.state = 896 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DBPROPERTIES or _la==fugue_sqlParser.PROPERTIES): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 889 + self.state = 897 self.tablePropertyList() pass else: raise NoViableAltException(self) - self.state = 894 + self.state = 902 self._errHandler.sync(self) _la = self._input.LA(1) @@ -9374,64 +9441,64 @@ def statement(self): elif la_ == 5: localctx = fugue_sqlParser.SetNamespacePropertiesContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 895 + self.state = 903 self.match(fugue_sqlParser.ALTER) - self.state = 896 + self.state = 904 self.namespace() - self.state = 897 + self.state = 905 self.multipartIdentifier() - self.state = 898 + self.state = 906 self.match(fugue_sqlParser.SET) - self.state = 899 + self.state = 907 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DBPROPERTIES or _la==fugue_sqlParser.PROPERTIES): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 900 + self.state = 908 self.tablePropertyList() pass elif la_ == 6: localctx = fugue_sqlParser.SetNamespaceLocationContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 902 + self.state = 910 self.match(fugue_sqlParser.ALTER) - self.state = 903 + self.state = 911 self.namespace() - self.state = 904 + self.state = 912 self.multipartIdentifier() - self.state = 905 + self.state = 913 self.match(fugue_sqlParser.SET) - self.state = 906 + self.state = 914 self.locationSpec() pass elif la_ == 7: localctx = fugue_sqlParser.DropNamespaceContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 908 + self.state = 916 self.match(fugue_sqlParser.DROP) - self.state = 909 + self.state = 917 self.namespace() - self.state = 912 + self.state = 920 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,83,self._ctx) + la_ = self._interp.adaptivePredict(self._input,84,self._ctx) if la_ == 1: - self.state = 910 + self.state = 918 self.match(fugue_sqlParser.IF) - self.state = 911 + self.state = 919 self.match(fugue_sqlParser.EXISTS) - self.state = 914 + self.state = 922 self.multipartIdentifier() - self.state = 916 + self.state = 924 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.CASCADE or _la==fugue_sqlParser.RESTRICT: - self.state = 915 + self.state = 923 _la = self._input.LA(1) if not(_la==fugue_sqlParser.CASCADE or _la==fugue_sqlParser.RESTRICT): self._errHandler.recoverInline(self) @@ -9445,43 +9512,43 @@ def statement(self): elif la_ == 8: localctx = fugue_sqlParser.ShowNamespacesContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 918 + self.state = 926 self.match(fugue_sqlParser.SHOW) - self.state = 919 + self.state = 927 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DATABASES or _la==fugue_sqlParser.NAMESPACES): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 922 + self.state = 930 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN: - self.state = 920 + self.state = 928 _la = self._input.LA(1) if not(_la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 921 + self.state = 929 self.multipartIdentifier() - self.state = 928 + self.state = 936 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LIKE or _la==fugue_sqlParser.STRING: - self.state = 925 + self.state = 933 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LIKE: - self.state = 924 + self.state = 932 self.match(fugue_sqlParser.LIKE) - self.state = 927 + self.state = 935 localctx.pattern = self.match(fugue_sqlParser.STRING) @@ -9490,37 +9557,37 @@ def statement(self): elif la_ == 9: localctx = fugue_sqlParser.CreateTableContext(self, localctx) self.enterOuterAlt(localctx, 9) - self.state = 930 + self.state = 938 self.createTableHeader() - self.state = 935 + self.state = 943 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__2: - self.state = 931 + self.state = 939 self.match(fugue_sqlParser.T__2) - self.state = 932 + self.state = 940 self.colTypeList() - self.state = 933 + self.state = 941 self.match(fugue_sqlParser.T__3) - self.state = 937 + self.state = 945 self.tableProvider() - self.state = 938 + self.state = 946 self.createTableClauses() - self.state = 943 + self.state = 951 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS or _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.MAP or ((((_la - 216)) & ~0x3f) == 0 and ((1 << (_la - 216)) & ((1 << (fugue_sqlParser.REDUCE - 216)) | (1 << (fugue_sqlParser.SELECT - 216)) | (1 << (fugue_sqlParser.TABLE - 216)))) != 0) or _la==fugue_sqlParser.VALUES or _la==fugue_sqlParser.WITH: - self.state = 940 + self.state = 948 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS: - self.state = 939 + self.state = 947 self.match(fugue_sqlParser.AS) - self.state = 942 + self.state = 950 self.query() @@ -9529,105 +9596,105 @@ def statement(self): elif la_ == 10: localctx = fugue_sqlParser.CreateHiveTableContext(self, localctx) self.enterOuterAlt(localctx, 10) - self.state = 945 + self.state = 953 self.createTableHeader() - self.state = 950 + self.state = 958 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__2: - self.state = 946 + self.state = 954 self.match(fugue_sqlParser.T__2) - self.state = 947 + self.state = 955 localctx.columns = self.colTypeList() - self.state = 948 + self.state = 956 self.match(fugue_sqlParser.T__3) - self.state = 973 + self.state = 981 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.CLUSTERED or _la==fugue_sqlParser.COMMENT or _la==fugue_sqlParser.LOCATION or _la==fugue_sqlParser.PARTITIONED or ((((_la - 231)) & ~0x3f) == 0 and ((1 << (_la - 231)) & ((1 << (fugue_sqlParser.ROW - 231)) | (1 << (fugue_sqlParser.SKEWED - 231)) | (1 << (fugue_sqlParser.STORED - 231)) | (1 << (fugue_sqlParser.TBLPROPERTIES - 231)))) != 0): - self.state = 971 + self.state = 979 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.COMMENT]: - self.state = 952 + self.state = 960 self.commentSpec() pass elif token in [fugue_sqlParser.PARTITIONED]: - self.state = 962 + self.state = 970 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,92,self._ctx) + la_ = self._interp.adaptivePredict(self._input,93,self._ctx) if la_ == 1: - self.state = 953 + self.state = 961 self.match(fugue_sqlParser.PARTITIONED) - self.state = 954 + self.state = 962 self.match(fugue_sqlParser.BY) - self.state = 955 + self.state = 963 self.match(fugue_sqlParser.T__2) - self.state = 956 + self.state = 964 localctx.partitionColumns = self.colTypeList() - self.state = 957 + self.state = 965 self.match(fugue_sqlParser.T__3) pass elif la_ == 2: - self.state = 959 + self.state = 967 self.match(fugue_sqlParser.PARTITIONED) - self.state = 960 + self.state = 968 self.match(fugue_sqlParser.BY) - self.state = 961 + self.state = 969 localctx.partitionColumnNames = self.identifierList() pass pass elif token in [fugue_sqlParser.CLUSTERED]: - self.state = 964 + self.state = 972 self.bucketSpec() pass elif token in [fugue_sqlParser.SKEWED]: - self.state = 965 + self.state = 973 self.skewSpec() pass elif token in [fugue_sqlParser.ROW]: - self.state = 966 + self.state = 974 self.rowFormat() pass elif token in [fugue_sqlParser.STORED]: - self.state = 967 + self.state = 975 self.createFileFormat() pass elif token in [fugue_sqlParser.LOCATION]: - self.state = 968 + self.state = 976 self.locationSpec() pass elif token in [fugue_sqlParser.TBLPROPERTIES]: - self.state = 969 + self.state = 977 self.match(fugue_sqlParser.TBLPROPERTIES) - self.state = 970 + self.state = 978 localctx.tableProps = self.tablePropertyList() pass else: raise NoViableAltException(self) - self.state = 975 + self.state = 983 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 980 + self.state = 988 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS or _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.MAP or ((((_la - 216)) & ~0x3f) == 0 and ((1 << (_la - 216)) & ((1 << (fugue_sqlParser.REDUCE - 216)) | (1 << (fugue_sqlParser.SELECT - 216)) | (1 << (fugue_sqlParser.TABLE - 216)))) != 0) or _la==fugue_sqlParser.VALUES or _la==fugue_sqlParser.WITH: - self.state = 977 + self.state = 985 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS: - self.state = 976 + self.state = 984 self.match(fugue_sqlParser.AS) - self.state = 979 + self.state = 987 self.query() @@ -9636,61 +9703,61 @@ def statement(self): elif la_ == 11: localctx = fugue_sqlParser.CreateTableLikeContext(self, localctx) self.enterOuterAlt(localctx, 11) - self.state = 982 + self.state = 990 self.match(fugue_sqlParser.CREATE) - self.state = 983 + self.state = 991 self.match(fugue_sqlParser.TABLE) - self.state = 987 + self.state = 995 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,97,self._ctx) + la_ = self._interp.adaptivePredict(self._input,98,self._ctx) if la_ == 1: - self.state = 984 + self.state = 992 self.match(fugue_sqlParser.IF) - self.state = 985 + self.state = 993 self.match(fugue_sqlParser.NOT) - self.state = 986 + self.state = 994 self.match(fugue_sqlParser.EXISTS) - self.state = 989 + self.state = 997 localctx.target = self.tableIdentifier() - self.state = 990 + self.state = 998 self.match(fugue_sqlParser.LIKE) - self.state = 991 + self.state = 999 localctx.source = self.tableIdentifier() - self.state = 1000 + self.state = 1008 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.LOCATION or ((((_la - 231)) & ~0x3f) == 0 and ((1 << (_la - 231)) & ((1 << (fugue_sqlParser.ROW - 231)) | (1 << (fugue_sqlParser.STORED - 231)) | (1 << (fugue_sqlParser.TBLPROPERTIES - 231)) | (1 << (fugue_sqlParser.USING - 231)))) != 0): - self.state = 998 + self.state = 1006 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.USING]: - self.state = 992 + self.state = 1000 self.tableProvider() pass elif token in [fugue_sqlParser.ROW]: - self.state = 993 + self.state = 1001 self.rowFormat() pass elif token in [fugue_sqlParser.STORED]: - self.state = 994 + self.state = 1002 self.createFileFormat() pass elif token in [fugue_sqlParser.LOCATION]: - self.state = 995 + self.state = 1003 self.locationSpec() pass elif token in [fugue_sqlParser.TBLPROPERTIES]: - self.state = 996 + self.state = 1004 self.match(fugue_sqlParser.TBLPROPERTIES) - self.state = 997 + self.state = 1005 localctx.tableProps = self.tablePropertyList() pass else: raise NoViableAltException(self) - self.state = 1002 + self.state = 1010 self._errHandler.sync(self) _la = self._input.LA(1) @@ -9699,37 +9766,37 @@ def statement(self): elif la_ == 12: localctx = fugue_sqlParser.ReplaceTableContext(self, localctx) self.enterOuterAlt(localctx, 12) - self.state = 1003 + self.state = 1011 self.replaceTableHeader() - self.state = 1008 + self.state = 1016 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__2: - self.state = 1004 + self.state = 1012 self.match(fugue_sqlParser.T__2) - self.state = 1005 + self.state = 1013 self.colTypeList() - self.state = 1006 + self.state = 1014 self.match(fugue_sqlParser.T__3) - self.state = 1010 + self.state = 1018 self.tableProvider() - self.state = 1011 + self.state = 1019 self.createTableClauses() - self.state = 1016 + self.state = 1024 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS or _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.MAP or ((((_la - 216)) & ~0x3f) == 0 and ((1 << (_la - 216)) & ((1 << (fugue_sqlParser.REDUCE - 216)) | (1 << (fugue_sqlParser.SELECT - 216)) | (1 << (fugue_sqlParser.TABLE - 216)))) != 0) or _la==fugue_sqlParser.VALUES or _la==fugue_sqlParser.WITH: - self.state = 1013 + self.state = 1021 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS: - self.state = 1012 + self.state = 1020 self.match(fugue_sqlParser.AS) - self.state = 1015 + self.state = 1023 self.query() @@ -9738,45 +9805,45 @@ def statement(self): elif la_ == 13: localctx = fugue_sqlParser.AnalyzeContext(self, localctx) self.enterOuterAlt(localctx, 13) - self.state = 1018 + self.state = 1026 self.match(fugue_sqlParser.ANALYZE) - self.state = 1019 + self.state = 1027 self.match(fugue_sqlParser.TABLE) - self.state = 1020 + self.state = 1028 self.multipartIdentifier() - self.state = 1022 + self.state = 1030 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1021 + self.state = 1029 self.partitionSpec() - self.state = 1024 + self.state = 1032 self.match(fugue_sqlParser.COMPUTE) - self.state = 1025 - self.match(fugue_sqlParser.STATISTICS) self.state = 1033 + self.match(fugue_sqlParser.STATISTICS) + self.state = 1041 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,104,self._ctx) + la_ = self._interp.adaptivePredict(self._input,105,self._ctx) if la_ == 1: - self.state = 1026 + self.state = 1034 self.identifier() elif la_ == 2: - self.state = 1027 + self.state = 1035 self.match(fugue_sqlParser.FOR) - self.state = 1028 + self.state = 1036 self.match(fugue_sqlParser.COLUMNS) - self.state = 1029 + self.state = 1037 self.identifierSeq() elif la_ == 3: - self.state = 1030 + self.state = 1038 self.match(fugue_sqlParser.FOR) - self.state = 1031 + self.state = 1039 self.match(fugue_sqlParser.ALL) - self.state = 1032 + self.state = 1040 self.match(fugue_sqlParser.COLUMNS) @@ -9785,227 +9852,227 @@ def statement(self): elif la_ == 14: localctx = fugue_sqlParser.AddTableColumnsContext(self, localctx) self.enterOuterAlt(localctx, 14) - self.state = 1035 + self.state = 1043 self.match(fugue_sqlParser.ALTER) - self.state = 1036 + self.state = 1044 self.match(fugue_sqlParser.TABLE) - self.state = 1037 + self.state = 1045 self.multipartIdentifier() - self.state = 1038 + self.state = 1046 self.match(fugue_sqlParser.ADD) - self.state = 1039 + self.state = 1047 _la = self._input.LA(1) if not(_la==fugue_sqlParser.COLUMN or _la==fugue_sqlParser.COLUMNS): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1040 + self.state = 1048 localctx.columns = self.qualifiedColTypeWithPositionList() pass elif la_ == 15: localctx = fugue_sqlParser.AddTableColumnsContext(self, localctx) self.enterOuterAlt(localctx, 15) - self.state = 1042 + self.state = 1050 self.match(fugue_sqlParser.ALTER) - self.state = 1043 + self.state = 1051 self.match(fugue_sqlParser.TABLE) - self.state = 1044 + self.state = 1052 self.multipartIdentifier() - self.state = 1045 + self.state = 1053 self.match(fugue_sqlParser.ADD) - self.state = 1046 + self.state = 1054 _la = self._input.LA(1) if not(_la==fugue_sqlParser.COLUMN or _la==fugue_sqlParser.COLUMNS): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1047 + self.state = 1055 self.match(fugue_sqlParser.T__2) - self.state = 1048 + self.state = 1056 localctx.columns = self.qualifiedColTypeWithPositionList() - self.state = 1049 + self.state = 1057 self.match(fugue_sqlParser.T__3) pass elif la_ == 16: localctx = fugue_sqlParser.RenameTableColumnContext(self, localctx) self.enterOuterAlt(localctx, 16) - self.state = 1051 + self.state = 1059 self.match(fugue_sqlParser.ALTER) - self.state = 1052 + self.state = 1060 self.match(fugue_sqlParser.TABLE) - self.state = 1053 + self.state = 1061 localctx.table = self.multipartIdentifier() - self.state = 1054 + self.state = 1062 self.match(fugue_sqlParser.RENAME) - self.state = 1055 + self.state = 1063 self.match(fugue_sqlParser.COLUMN) - self.state = 1056 + self.state = 1064 localctx.ifrom = self.multipartIdentifier() - self.state = 1057 + self.state = 1065 self.match(fugue_sqlParser.TO) - self.state = 1058 + self.state = 1066 localctx.to = self.errorCapturingIdentifier() pass elif la_ == 17: localctx = fugue_sqlParser.DropTableColumnsContext(self, localctx) self.enterOuterAlt(localctx, 17) - self.state = 1060 + self.state = 1068 self.match(fugue_sqlParser.ALTER) - self.state = 1061 + self.state = 1069 self.match(fugue_sqlParser.TABLE) - self.state = 1062 + self.state = 1070 self.multipartIdentifier() - self.state = 1063 + self.state = 1071 self.match(fugue_sqlParser.DROP) - self.state = 1064 + self.state = 1072 _la = self._input.LA(1) if not(_la==fugue_sqlParser.COLUMN or _la==fugue_sqlParser.COLUMNS): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1065 + self.state = 1073 self.match(fugue_sqlParser.T__2) - self.state = 1066 + self.state = 1074 localctx.columns = self.multipartIdentifierList() - self.state = 1067 + self.state = 1075 self.match(fugue_sqlParser.T__3) pass elif la_ == 18: localctx = fugue_sqlParser.DropTableColumnsContext(self, localctx) self.enterOuterAlt(localctx, 18) - self.state = 1069 + self.state = 1077 self.match(fugue_sqlParser.ALTER) - self.state = 1070 + self.state = 1078 self.match(fugue_sqlParser.TABLE) - self.state = 1071 + self.state = 1079 self.multipartIdentifier() - self.state = 1072 + self.state = 1080 self.match(fugue_sqlParser.DROP) - self.state = 1073 + self.state = 1081 _la = self._input.LA(1) if not(_la==fugue_sqlParser.COLUMN or _la==fugue_sqlParser.COLUMNS): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1074 + self.state = 1082 localctx.columns = self.multipartIdentifierList() pass elif la_ == 19: localctx = fugue_sqlParser.RenameTableContext(self, localctx) self.enterOuterAlt(localctx, 19) - self.state = 1076 + self.state = 1084 self.match(fugue_sqlParser.ALTER) - self.state = 1077 + self.state = 1085 _la = self._input.LA(1) if not(_la==fugue_sqlParser.TABLE or _la==fugue_sqlParser.VIEW): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1078 + self.state = 1086 localctx.ifrom = self.multipartIdentifier() - self.state = 1079 + self.state = 1087 self.match(fugue_sqlParser.RENAME) - self.state = 1080 + self.state = 1088 self.match(fugue_sqlParser.TO) - self.state = 1081 + self.state = 1089 localctx.to = self.multipartIdentifier() pass elif la_ == 20: localctx = fugue_sqlParser.SetTablePropertiesContext(self, localctx) self.enterOuterAlt(localctx, 20) - self.state = 1083 + self.state = 1091 self.match(fugue_sqlParser.ALTER) - self.state = 1084 + self.state = 1092 _la = self._input.LA(1) if not(_la==fugue_sqlParser.TABLE or _la==fugue_sqlParser.VIEW): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1085 + self.state = 1093 self.multipartIdentifier() - self.state = 1086 + self.state = 1094 self.match(fugue_sqlParser.SET) - self.state = 1087 + self.state = 1095 self.match(fugue_sqlParser.TBLPROPERTIES) - self.state = 1088 + self.state = 1096 self.tablePropertyList() pass elif la_ == 21: localctx = fugue_sqlParser.UnsetTablePropertiesContext(self, localctx) self.enterOuterAlt(localctx, 21) - self.state = 1090 + self.state = 1098 self.match(fugue_sqlParser.ALTER) - self.state = 1091 + self.state = 1099 _la = self._input.LA(1) if not(_la==fugue_sqlParser.TABLE or _la==fugue_sqlParser.VIEW): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1092 + self.state = 1100 self.multipartIdentifier() - self.state = 1093 + self.state = 1101 self.match(fugue_sqlParser.UNSET) - self.state = 1094 + self.state = 1102 self.match(fugue_sqlParser.TBLPROPERTIES) - self.state = 1097 + self.state = 1105 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.IF: - self.state = 1095 + self.state = 1103 self.match(fugue_sqlParser.IF) - self.state = 1096 + self.state = 1104 self.match(fugue_sqlParser.EXISTS) - self.state = 1099 + self.state = 1107 self.tablePropertyList() pass elif la_ == 22: localctx = fugue_sqlParser.AlterTableAlterColumnContext(self, localctx) self.enterOuterAlt(localctx, 22) - self.state = 1101 + self.state = 1109 self.match(fugue_sqlParser.ALTER) - self.state = 1102 + self.state = 1110 self.match(fugue_sqlParser.TABLE) - self.state = 1103 + self.state = 1111 localctx.table = self.multipartIdentifier() - self.state = 1104 + self.state = 1112 _la = self._input.LA(1) if not(_la==fugue_sqlParser.ALTER or _la==fugue_sqlParser.CHANGE): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1106 + self.state = 1114 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,106,self._ctx) + la_ = self._interp.adaptivePredict(self._input,107,self._ctx) if la_ == 1: - self.state = 1105 + self.state = 1113 self.match(fugue_sqlParser.COLUMN) - self.state = 1108 + self.state = 1116 localctx.column = self.multipartIdentifier() - self.state = 1110 + self.state = 1118 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AFTER or ((((_la - 74)) & ~0x3f) == 0 and ((1 << (_la - 74)) & ((1 << (fugue_sqlParser.COMMENT - 74)) | (1 << (fugue_sqlParser.DROP - 74)) | (1 << (fugue_sqlParser.FIRST - 74)))) != 0) or _la==fugue_sqlParser.SET or _la==fugue_sqlParser.TYPE: - self.state = 1109 + self.state = 1117 self.alterColumnAction() @@ -10014,39 +10081,39 @@ def statement(self): elif la_ == 23: localctx = fugue_sqlParser.HiveChangeColumnContext(self, localctx) self.enterOuterAlt(localctx, 23) - self.state = 1112 + self.state = 1120 self.match(fugue_sqlParser.ALTER) - self.state = 1113 + self.state = 1121 self.match(fugue_sqlParser.TABLE) - self.state = 1114 + self.state = 1122 localctx.table = self.multipartIdentifier() - self.state = 1116 + self.state = 1124 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1115 + self.state = 1123 self.partitionSpec() - self.state = 1118 + self.state = 1126 self.match(fugue_sqlParser.CHANGE) - self.state = 1120 + self.state = 1128 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,109,self._ctx) + la_ = self._interp.adaptivePredict(self._input,110,self._ctx) if la_ == 1: - self.state = 1119 + self.state = 1127 self.match(fugue_sqlParser.COLUMN) - self.state = 1122 + self.state = 1130 localctx.colName = self.multipartIdentifier() - self.state = 1123 + self.state = 1131 self.colType() - self.state = 1125 + self.state = 1133 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AFTER or _la==fugue_sqlParser.FIRST: - self.state = 1124 + self.state = 1132 self.colPosition() @@ -10055,64 +10122,64 @@ def statement(self): elif la_ == 24: localctx = fugue_sqlParser.HiveReplaceColumnsContext(self, localctx) self.enterOuterAlt(localctx, 24) - self.state = 1127 + self.state = 1135 self.match(fugue_sqlParser.ALTER) - self.state = 1128 + self.state = 1136 self.match(fugue_sqlParser.TABLE) - self.state = 1129 + self.state = 1137 localctx.table = self.multipartIdentifier() - self.state = 1131 + self.state = 1139 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1130 + self.state = 1138 self.partitionSpec() - self.state = 1133 + self.state = 1141 self.match(fugue_sqlParser.REPLACE) - self.state = 1134 + self.state = 1142 self.match(fugue_sqlParser.COLUMNS) - self.state = 1135 + self.state = 1143 self.match(fugue_sqlParser.T__2) - self.state = 1136 + self.state = 1144 localctx.columns = self.qualifiedColTypeWithPositionList() - self.state = 1137 + self.state = 1145 self.match(fugue_sqlParser.T__3) pass elif la_ == 25: localctx = fugue_sqlParser.SetTableSerDeContext(self, localctx) self.enterOuterAlt(localctx, 25) - self.state = 1139 + self.state = 1147 self.match(fugue_sqlParser.ALTER) - self.state = 1140 + self.state = 1148 self.match(fugue_sqlParser.TABLE) - self.state = 1141 + self.state = 1149 self.multipartIdentifier() - self.state = 1143 + self.state = 1151 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1142 + self.state = 1150 self.partitionSpec() - self.state = 1145 + self.state = 1153 self.match(fugue_sqlParser.SET) - self.state = 1146 + self.state = 1154 self.match(fugue_sqlParser.SERDE) - self.state = 1147 + self.state = 1155 self.match(fugue_sqlParser.STRING) - self.state = 1151 + self.state = 1159 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.WITH: - self.state = 1148 + self.state = 1156 self.match(fugue_sqlParser.WITH) - self.state = 1149 + self.state = 1157 self.match(fugue_sqlParser.SERDEPROPERTIES) - self.state = 1150 + self.state = 1158 self.tablePropertyList() @@ -10121,63 +10188,63 @@ def statement(self): elif la_ == 26: localctx = fugue_sqlParser.SetTableSerDeContext(self, localctx) self.enterOuterAlt(localctx, 26) - self.state = 1153 + self.state = 1161 self.match(fugue_sqlParser.ALTER) - self.state = 1154 + self.state = 1162 self.match(fugue_sqlParser.TABLE) - self.state = 1155 + self.state = 1163 self.multipartIdentifier() - self.state = 1157 + self.state = 1165 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1156 + self.state = 1164 self.partitionSpec() - self.state = 1159 + self.state = 1167 self.match(fugue_sqlParser.SET) - self.state = 1160 + self.state = 1168 self.match(fugue_sqlParser.SERDEPROPERTIES) - self.state = 1161 + self.state = 1169 self.tablePropertyList() pass elif la_ == 27: localctx = fugue_sqlParser.AddTablePartitionContext(self, localctx) self.enterOuterAlt(localctx, 27) - self.state = 1163 + self.state = 1171 self.match(fugue_sqlParser.ALTER) - self.state = 1164 + self.state = 1172 _la = self._input.LA(1) if not(_la==fugue_sqlParser.TABLE or _la==fugue_sqlParser.VIEW): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1165 + self.state = 1173 self.multipartIdentifier() - self.state = 1166 + self.state = 1174 self.match(fugue_sqlParser.ADD) - self.state = 1170 + self.state = 1178 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.IF: - self.state = 1167 + self.state = 1175 self.match(fugue_sqlParser.IF) - self.state = 1168 + self.state = 1176 self.match(fugue_sqlParser.NOT) - self.state = 1169 + self.state = 1177 self.match(fugue_sqlParser.EXISTS) - self.state = 1173 + self.state = 1181 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 1172 + self.state = 1180 self.partitionSpecLocation() - self.state = 1175 + self.state = 1183 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==fugue_sqlParser.PARTITION): @@ -10188,67 +10255,67 @@ def statement(self): elif la_ == 28: localctx = fugue_sqlParser.RenameTablePartitionContext(self, localctx) self.enterOuterAlt(localctx, 28) - self.state = 1177 + self.state = 1185 self.match(fugue_sqlParser.ALTER) - self.state = 1178 + self.state = 1186 self.match(fugue_sqlParser.TABLE) - self.state = 1179 + self.state = 1187 self.multipartIdentifier() - self.state = 1180 + self.state = 1188 localctx.ifrom = self.partitionSpec() - self.state = 1181 + self.state = 1189 self.match(fugue_sqlParser.RENAME) - self.state = 1182 + self.state = 1190 self.match(fugue_sqlParser.TO) - self.state = 1183 + self.state = 1191 localctx.to = self.partitionSpec() pass elif la_ == 29: localctx = fugue_sqlParser.DropTablePartitionsContext(self, localctx) self.enterOuterAlt(localctx, 29) - self.state = 1185 + self.state = 1193 self.match(fugue_sqlParser.ALTER) - self.state = 1186 + self.state = 1194 _la = self._input.LA(1) if not(_la==fugue_sqlParser.TABLE or _la==fugue_sqlParser.VIEW): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1187 + self.state = 1195 self.multipartIdentifier() - self.state = 1188 + self.state = 1196 self.match(fugue_sqlParser.DROP) - self.state = 1191 + self.state = 1199 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.IF: - self.state = 1189 + self.state = 1197 self.match(fugue_sqlParser.IF) - self.state = 1190 + self.state = 1198 self.match(fugue_sqlParser.EXISTS) - self.state = 1193 + self.state = 1201 self.partitionSpec() - self.state = 1198 + self.state = 1206 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 1194 + self.state = 1202 self.match(fugue_sqlParser.T__0) - self.state = 1195 + self.state = 1203 self.partitionSpec() - self.state = 1200 + self.state = 1208 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1202 + self.state = 1210 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PURGE: - self.state = 1201 + self.state = 1209 self.match(fugue_sqlParser.PURGE) @@ -10257,65 +10324,65 @@ def statement(self): elif la_ == 30: localctx = fugue_sqlParser.SetTableLocationContext(self, localctx) self.enterOuterAlt(localctx, 30) - self.state = 1204 + self.state = 1212 self.match(fugue_sqlParser.ALTER) - self.state = 1205 + self.state = 1213 self.match(fugue_sqlParser.TABLE) - self.state = 1206 + self.state = 1214 self.multipartIdentifier() - self.state = 1208 + self.state = 1216 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1207 + self.state = 1215 self.partitionSpec() - self.state = 1210 + self.state = 1218 self.match(fugue_sqlParser.SET) - self.state = 1211 + self.state = 1219 self.locationSpec() pass elif la_ == 31: localctx = fugue_sqlParser.RecoverPartitionsContext(self, localctx) self.enterOuterAlt(localctx, 31) - self.state = 1213 + self.state = 1221 self.match(fugue_sqlParser.ALTER) - self.state = 1214 + self.state = 1222 self.match(fugue_sqlParser.TABLE) - self.state = 1215 + self.state = 1223 self.multipartIdentifier() - self.state = 1216 + self.state = 1224 self.match(fugue_sqlParser.RECOVER) - self.state = 1217 + self.state = 1225 self.match(fugue_sqlParser.PARTITIONS) pass elif la_ == 32: localctx = fugue_sqlParser.DropTableContext(self, localctx) self.enterOuterAlt(localctx, 32) - self.state = 1219 + self.state = 1227 self.match(fugue_sqlParser.DROP) - self.state = 1220 + self.state = 1228 self.match(fugue_sqlParser.TABLE) - self.state = 1223 + self.state = 1231 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,121,self._ctx) + la_ = self._interp.adaptivePredict(self._input,122,self._ctx) if la_ == 1: - self.state = 1221 + self.state = 1229 self.match(fugue_sqlParser.IF) - self.state = 1222 + self.state = 1230 self.match(fugue_sqlParser.EXISTS) - self.state = 1225 + self.state = 1233 self.multipartIdentifier() - self.state = 1227 + self.state = 1235 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PURGE: - self.state = 1226 + self.state = 1234 self.match(fugue_sqlParser.PURGE) @@ -10324,167 +10391,167 @@ def statement(self): elif la_ == 33: localctx = fugue_sqlParser.DropViewContext(self, localctx) self.enterOuterAlt(localctx, 33) - self.state = 1229 + self.state = 1237 self.match(fugue_sqlParser.DROP) - self.state = 1230 + self.state = 1238 self.match(fugue_sqlParser.VIEW) - self.state = 1233 + self.state = 1241 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,123,self._ctx) + la_ = self._interp.adaptivePredict(self._input,124,self._ctx) if la_ == 1: - self.state = 1231 + self.state = 1239 self.match(fugue_sqlParser.IF) - self.state = 1232 + self.state = 1240 self.match(fugue_sqlParser.EXISTS) - self.state = 1235 + self.state = 1243 self.multipartIdentifier() pass elif la_ == 34: localctx = fugue_sqlParser.CreateViewContext(self, localctx) self.enterOuterAlt(localctx, 34) - self.state = 1236 + self.state = 1244 self.match(fugue_sqlParser.CREATE) - self.state = 1239 + self.state = 1247 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OR: - self.state = 1237 + self.state = 1245 self.match(fugue_sqlParser.OR) - self.state = 1238 + self.state = 1246 self.match(fugue_sqlParser.REPLACE) - self.state = 1245 + self.state = 1253 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.GLOBAL or _la==fugue_sqlParser.TEMPORARY: - self.state = 1242 + self.state = 1250 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.GLOBAL: - self.state = 1241 + self.state = 1249 self.match(fugue_sqlParser.GLOBAL) - self.state = 1244 + self.state = 1252 self.match(fugue_sqlParser.TEMPORARY) - self.state = 1247 + self.state = 1255 self.match(fugue_sqlParser.VIEW) - self.state = 1251 + self.state = 1259 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,127,self._ctx) + la_ = self._interp.adaptivePredict(self._input,128,self._ctx) if la_ == 1: - self.state = 1248 + self.state = 1256 self.match(fugue_sqlParser.IF) - self.state = 1249 + self.state = 1257 self.match(fugue_sqlParser.NOT) - self.state = 1250 + self.state = 1258 self.match(fugue_sqlParser.EXISTS) - self.state = 1253 + self.state = 1261 self.multipartIdentifier() - self.state = 1255 + self.state = 1263 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__2: - self.state = 1254 + self.state = 1262 self.identifierCommentList() - self.state = 1265 + self.state = 1273 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.COMMENT or _la==fugue_sqlParser.PARTITIONED or _la==fugue_sqlParser.TBLPROPERTIES: - self.state = 1263 + self.state = 1271 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.COMMENT]: - self.state = 1257 + self.state = 1265 self.commentSpec() pass elif token in [fugue_sqlParser.PARTITIONED]: - self.state = 1258 + self.state = 1266 self.match(fugue_sqlParser.PARTITIONED) - self.state = 1259 + self.state = 1267 self.match(fugue_sqlParser.ON) - self.state = 1260 + self.state = 1268 self.identifierList() pass elif token in [fugue_sqlParser.TBLPROPERTIES]: - self.state = 1261 + self.state = 1269 self.match(fugue_sqlParser.TBLPROPERTIES) - self.state = 1262 + self.state = 1270 self.tablePropertyList() pass else: raise NoViableAltException(self) - self.state = 1267 + self.state = 1275 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1268 + self.state = 1276 self.match(fugue_sqlParser.AS) - self.state = 1269 + self.state = 1277 self.query() pass elif la_ == 35: localctx = fugue_sqlParser.CreateTempViewUsingContext(self, localctx) self.enterOuterAlt(localctx, 35) - self.state = 1271 + self.state = 1279 self.match(fugue_sqlParser.CREATE) - self.state = 1274 + self.state = 1282 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OR: - self.state = 1272 + self.state = 1280 self.match(fugue_sqlParser.OR) - self.state = 1273 + self.state = 1281 self.match(fugue_sqlParser.REPLACE) - self.state = 1277 + self.state = 1285 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.GLOBAL: - self.state = 1276 + self.state = 1284 self.match(fugue_sqlParser.GLOBAL) - self.state = 1279 + self.state = 1287 self.match(fugue_sqlParser.TEMPORARY) - self.state = 1280 + self.state = 1288 self.match(fugue_sqlParser.VIEW) - self.state = 1281 + self.state = 1289 self.tableIdentifier() - self.state = 1286 + self.state = 1294 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__2: - self.state = 1282 + self.state = 1290 self.match(fugue_sqlParser.T__2) - self.state = 1283 + self.state = 1291 self.colTypeList() - self.state = 1284 + self.state = 1292 self.match(fugue_sqlParser.T__3) - self.state = 1288 + self.state = 1296 self.tableProvider() - self.state = 1291 + self.state = 1299 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OPTIONS: - self.state = 1289 + self.state = 1297 self.match(fugue_sqlParser.OPTIONS) - self.state = 1290 + self.state = 1298 self.tablePropertyList() @@ -10493,84 +10560,84 @@ def statement(self): elif la_ == 36: localctx = fugue_sqlParser.AlterViewQueryContext(self, localctx) self.enterOuterAlt(localctx, 36) - self.state = 1293 + self.state = 1301 self.match(fugue_sqlParser.ALTER) - self.state = 1294 + self.state = 1302 self.match(fugue_sqlParser.VIEW) - self.state = 1295 + self.state = 1303 self.multipartIdentifier() - self.state = 1297 + self.state = 1305 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS: - self.state = 1296 + self.state = 1304 self.match(fugue_sqlParser.AS) - self.state = 1299 + self.state = 1307 self.query() pass elif la_ == 37: localctx = fugue_sqlParser.CreateFunctionContext(self, localctx) self.enterOuterAlt(localctx, 37) - self.state = 1301 + self.state = 1309 self.match(fugue_sqlParser.CREATE) - self.state = 1304 + self.state = 1312 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OR: - self.state = 1302 + self.state = 1310 self.match(fugue_sqlParser.OR) - self.state = 1303 + self.state = 1311 self.match(fugue_sqlParser.REPLACE) - self.state = 1307 + self.state = 1315 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.TEMPORARY: - self.state = 1306 + self.state = 1314 self.match(fugue_sqlParser.TEMPORARY) - self.state = 1309 + self.state = 1317 self.match(fugue_sqlParser.FUNCTION) - self.state = 1313 + self.state = 1321 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,138,self._ctx) + la_ = self._interp.adaptivePredict(self._input,139,self._ctx) if la_ == 1: - self.state = 1310 + self.state = 1318 self.match(fugue_sqlParser.IF) - self.state = 1311 + self.state = 1319 self.match(fugue_sqlParser.NOT) - self.state = 1312 + self.state = 1320 self.match(fugue_sqlParser.EXISTS) - self.state = 1315 + self.state = 1323 self.multipartIdentifier() - self.state = 1316 + self.state = 1324 self.match(fugue_sqlParser.AS) - self.state = 1317 + self.state = 1325 localctx.className = self.match(fugue_sqlParser.STRING) - self.state = 1327 + self.state = 1335 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.USING: - self.state = 1318 + self.state = 1326 self.match(fugue_sqlParser.USING) - self.state = 1319 + self.state = 1327 self.resource() - self.state = 1324 + self.state = 1332 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 1320 + self.state = 1328 self.match(fugue_sqlParser.T__0) - self.state = 1321 + self.state = 1329 self.resource() - self.state = 1326 + self.state = 1334 self._errHandler.sync(self) _la = self._input.LA(1) @@ -10581,42 +10648,42 @@ def statement(self): elif la_ == 38: localctx = fugue_sqlParser.DropFunctionContext(self, localctx) self.enterOuterAlt(localctx, 38) - self.state = 1329 + self.state = 1337 self.match(fugue_sqlParser.DROP) - self.state = 1331 + self.state = 1339 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.TEMPORARY: - self.state = 1330 + self.state = 1338 self.match(fugue_sqlParser.TEMPORARY) - self.state = 1333 + self.state = 1341 self.match(fugue_sqlParser.FUNCTION) - self.state = 1336 + self.state = 1344 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,142,self._ctx) + la_ = self._interp.adaptivePredict(self._input,143,self._ctx) if la_ == 1: - self.state = 1334 + self.state = 1342 self.match(fugue_sqlParser.IF) - self.state = 1335 + self.state = 1343 self.match(fugue_sqlParser.EXISTS) - self.state = 1338 + self.state = 1346 self.multipartIdentifier() pass elif la_ == 39: localctx = fugue_sqlParser.ExplainContext(self, localctx) self.enterOuterAlt(localctx, 39) - self.state = 1339 + self.state = 1347 self.match(fugue_sqlParser.EXPLAIN) - self.state = 1341 + self.state = 1349 self._errHandler.sync(self) _la = self._input.LA(1) if ((((_la - 69)) & ~0x3f) == 0 and ((1 << (_la - 69)) & ((1 << (fugue_sqlParser.CODEGEN - 69)) | (1 << (fugue_sqlParser.COST - 69)) | (1 << (fugue_sqlParser.EXTENDED - 69)) | (1 << (fugue_sqlParser.FORMATTED - 69)))) != 0) or _la==fugue_sqlParser.LOGICAL: - self.state = 1340 + self.state = 1348 _la = self._input.LA(1) if not(((((_la - 69)) & ~0x3f) == 0 and ((1 << (_la - 69)) & ((1 << (fugue_sqlParser.CODEGEN - 69)) | (1 << (fugue_sqlParser.COST - 69)) | (1 << (fugue_sqlParser.EXTENDED - 69)) | (1 << (fugue_sqlParser.FORMATTED - 69)))) != 0) or _la==fugue_sqlParser.LOGICAL): self._errHandler.recoverInline(self) @@ -10625,45 +10692,45 @@ def statement(self): self.consume() - self.state = 1343 + self.state = 1351 self.statement() pass elif la_ == 40: localctx = fugue_sqlParser.ShowTablesContext(self, localctx) self.enterOuterAlt(localctx, 40) - self.state = 1344 + self.state = 1352 self.match(fugue_sqlParser.SHOW) - self.state = 1345 + self.state = 1353 self.match(fugue_sqlParser.TABLES) - self.state = 1348 + self.state = 1356 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN: - self.state = 1346 + self.state = 1354 _la = self._input.LA(1) if not(_la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1347 + self.state = 1355 self.multipartIdentifier() - self.state = 1354 + self.state = 1362 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LIKE or _la==fugue_sqlParser.STRING: - self.state = 1351 + self.state = 1359 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LIKE: - self.state = 1350 + self.state = 1358 self.match(fugue_sqlParser.LIKE) - self.state = 1353 + self.state = 1361 localctx.pattern = self.match(fugue_sqlParser.STRING) @@ -10672,36 +10739,36 @@ def statement(self): elif la_ == 41: localctx = fugue_sqlParser.ShowTableContext(self, localctx) self.enterOuterAlt(localctx, 41) - self.state = 1356 + self.state = 1364 self.match(fugue_sqlParser.SHOW) - self.state = 1357 + self.state = 1365 self.match(fugue_sqlParser.TABLE) - self.state = 1358 + self.state = 1366 self.match(fugue_sqlParser.EXTENDED) - self.state = 1361 + self.state = 1369 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN: - self.state = 1359 + self.state = 1367 _la = self._input.LA(1) if not(_la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1360 + self.state = 1368 localctx.ns = self.multipartIdentifier() - self.state = 1363 + self.state = 1371 self.match(fugue_sqlParser.LIKE) - self.state = 1364 + self.state = 1372 localctx.pattern = self.match(fugue_sqlParser.STRING) - self.state = 1366 + self.state = 1374 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1365 + self.state = 1373 self.partitionSpec() @@ -10710,21 +10777,21 @@ def statement(self): elif la_ == 42: localctx = fugue_sqlParser.ShowTblPropertiesContext(self, localctx) self.enterOuterAlt(localctx, 42) - self.state = 1368 + self.state = 1376 self.match(fugue_sqlParser.SHOW) - self.state = 1369 + self.state = 1377 self.match(fugue_sqlParser.TBLPROPERTIES) - self.state = 1370 + self.state = 1378 localctx.table = self.multipartIdentifier() - self.state = 1375 + self.state = 1383 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__2: - self.state = 1371 + self.state = 1379 self.match(fugue_sqlParser.T__2) - self.state = 1372 + self.state = 1380 localctx.key = self.tablePropertyKey() - self.state = 1373 + self.state = 1381 self.match(fugue_sqlParser.T__3) @@ -10733,31 +10800,31 @@ def statement(self): elif la_ == 43: localctx = fugue_sqlParser.ShowColumnsContext(self, localctx) self.enterOuterAlt(localctx, 43) - self.state = 1377 + self.state = 1385 self.match(fugue_sqlParser.SHOW) - self.state = 1378 + self.state = 1386 self.match(fugue_sqlParser.COLUMNS) - self.state = 1379 + self.state = 1387 _la = self._input.LA(1) if not(_la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1380 + self.state = 1388 localctx.table = self.multipartIdentifier() - self.state = 1383 + self.state = 1391 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN: - self.state = 1381 + self.state = 1389 _la = self._input.LA(1) if not(_la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1382 + self.state = 1390 localctx.ns = self.multipartIdentifier() @@ -10766,38 +10833,38 @@ def statement(self): elif la_ == 44: localctx = fugue_sqlParser.ShowViewsContext(self, localctx) self.enterOuterAlt(localctx, 44) - self.state = 1385 + self.state = 1393 self.match(fugue_sqlParser.SHOW) - self.state = 1386 + self.state = 1394 self.match(fugue_sqlParser.VIEWS) - self.state = 1389 + self.state = 1397 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN: - self.state = 1387 + self.state = 1395 _la = self._input.LA(1) if not(_la==fugue_sqlParser.FROM or _la==fugue_sqlParser.IN): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1388 + self.state = 1396 self.multipartIdentifier() - self.state = 1395 + self.state = 1403 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LIKE or _la==fugue_sqlParser.STRING: - self.state = 1392 + self.state = 1400 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LIKE: - self.state = 1391 + self.state = 1399 self.match(fugue_sqlParser.LIKE) - self.state = 1394 + self.state = 1402 localctx.pattern = self.match(fugue_sqlParser.STRING) @@ -10806,17 +10873,17 @@ def statement(self): elif la_ == 45: localctx = fugue_sqlParser.ShowPartitionsContext(self, localctx) self.enterOuterAlt(localctx, 45) - self.state = 1397 + self.state = 1405 self.match(fugue_sqlParser.SHOW) - self.state = 1398 + self.state = 1406 self.match(fugue_sqlParser.PARTITIONS) - self.state = 1399 + self.state = 1407 self.multipartIdentifier() - self.state = 1401 + self.state = 1409 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1400 + self.state = 1408 self.partitionSpec() @@ -10825,40 +10892,40 @@ def statement(self): elif la_ == 46: localctx = fugue_sqlParser.ShowFunctionsContext(self, localctx) self.enterOuterAlt(localctx, 46) - self.state = 1403 + self.state = 1411 self.match(fugue_sqlParser.SHOW) - self.state = 1405 + self.state = 1413 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,155,self._ctx) + la_ = self._interp.adaptivePredict(self._input,156,self._ctx) if la_ == 1: - self.state = 1404 + self.state = 1412 self.identifier() - self.state = 1407 - self.match(fugue_sqlParser.FUNCTIONS) self.state = 1415 + self.match(fugue_sqlParser.FUNCTIONS) + self.state = 1423 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,158,self._ctx) + la_ = self._interp.adaptivePredict(self._input,159,self._ctx) if la_ == 1: - self.state = 1409 + self.state = 1417 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,156,self._ctx) + la_ = self._interp.adaptivePredict(self._input,157,self._ctx) if la_ == 1: - self.state = 1408 + self.state = 1416 self.match(fugue_sqlParser.LIKE) - self.state = 1413 + self.state = 1421 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,157,self._ctx) + la_ = self._interp.adaptivePredict(self._input,158,self._ctx) if la_ == 1: - self.state = 1411 + self.state = 1419 self.multipartIdentifier() pass elif la_ == 2: - self.state = 1412 + self.state = 1420 localctx.pattern = self.match(fugue_sqlParser.STRING) pass @@ -10870,21 +10937,21 @@ def statement(self): elif la_ == 47: localctx = fugue_sqlParser.ShowCreateTableContext(self, localctx) self.enterOuterAlt(localctx, 47) - self.state = 1417 + self.state = 1425 self.match(fugue_sqlParser.SHOW) - self.state = 1418 + self.state = 1426 self.match(fugue_sqlParser.CREATE) - self.state = 1419 + self.state = 1427 self.match(fugue_sqlParser.TABLE) - self.state = 1420 + self.state = 1428 self.multipartIdentifier() - self.state = 1423 + self.state = 1431 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS: - self.state = 1421 + self.state = 1429 self.match(fugue_sqlParser.AS) - self.state = 1422 + self.state = 1430 self.match(fugue_sqlParser.SERDE) @@ -10893,85 +10960,85 @@ def statement(self): elif la_ == 48: localctx = fugue_sqlParser.ShowCurrentNamespaceContext(self, localctx) self.enterOuterAlt(localctx, 48) - self.state = 1425 + self.state = 1433 self.match(fugue_sqlParser.SHOW) - self.state = 1426 + self.state = 1434 self.match(fugue_sqlParser.CURRENT) - self.state = 1427 + self.state = 1435 self.match(fugue_sqlParser.NAMESPACE) pass elif la_ == 49: localctx = fugue_sqlParser.DescribeFunctionContext(self, localctx) self.enterOuterAlt(localctx, 49) - self.state = 1428 + self.state = 1436 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DESC or _la==fugue_sqlParser.DESCRIBE): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1429 + self.state = 1437 self.match(fugue_sqlParser.FUNCTION) - self.state = 1431 + self.state = 1439 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,160,self._ctx) + la_ = self._interp.adaptivePredict(self._input,161,self._ctx) if la_ == 1: - self.state = 1430 + self.state = 1438 self.match(fugue_sqlParser.EXTENDED) - self.state = 1433 + self.state = 1441 self.describeFuncName() pass elif la_ == 50: localctx = fugue_sqlParser.DescribeNamespaceContext(self, localctx) self.enterOuterAlt(localctx, 50) - self.state = 1434 + self.state = 1442 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DESC or _la==fugue_sqlParser.DESCRIBE): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1435 + self.state = 1443 self.namespace() - self.state = 1437 + self.state = 1445 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,161,self._ctx) + la_ = self._interp.adaptivePredict(self._input,162,self._ctx) if la_ == 1: - self.state = 1436 + self.state = 1444 self.match(fugue_sqlParser.EXTENDED) - self.state = 1439 + self.state = 1447 self.multipartIdentifier() pass elif la_ == 51: localctx = fugue_sqlParser.DescribeRelationContext(self, localctx) self.enterOuterAlt(localctx, 51) - self.state = 1441 + self.state = 1449 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DESC or _la==fugue_sqlParser.DESCRIBE): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1443 + self.state = 1451 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,162,self._ctx) + la_ = self._interp.adaptivePredict(self._input,163,self._ctx) if la_ == 1: - self.state = 1442 + self.state = 1450 self.match(fugue_sqlParser.TABLE) - self.state = 1446 + self.state = 1454 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,163,self._ctx) + la_ = self._interp.adaptivePredict(self._input,164,self._ctx) if la_ == 1: - self.state = 1445 + self.state = 1453 localctx.option = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.EXTENDED or _la==fugue_sqlParser.FORMATTED): @@ -10981,21 +11048,21 @@ def statement(self): self.consume() - self.state = 1448 + self.state = 1456 self.multipartIdentifier() - self.state = 1450 + self.state = 1458 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,164,self._ctx) + la_ = self._interp.adaptivePredict(self._input,165,self._ctx) if la_ == 1: - self.state = 1449 + self.state = 1457 self.partitionSpec() - self.state = 1453 + self.state = 1461 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,165,self._ctx) + la_ = self._interp.adaptivePredict(self._input,166,self._ctx) if la_ == 1: - self.state = 1452 + self.state = 1460 self.describeColName() @@ -11004,39 +11071,39 @@ def statement(self): elif la_ == 52: localctx = fugue_sqlParser.DescribeQueryContext(self, localctx) self.enterOuterAlt(localctx, 52) - self.state = 1455 + self.state = 1463 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DESC or _la==fugue_sqlParser.DESCRIBE): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 1457 + self.state = 1465 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.QUERY: - self.state = 1456 + self.state = 1464 self.match(fugue_sqlParser.QUERY) - self.state = 1459 + self.state = 1467 self.query() pass elif la_ == 53: localctx = fugue_sqlParser.CommentNamespaceContext(self, localctx) self.enterOuterAlt(localctx, 53) - self.state = 1460 + self.state = 1468 self.match(fugue_sqlParser.COMMENT) - self.state = 1461 + self.state = 1469 self.match(fugue_sqlParser.ON) - self.state = 1462 + self.state = 1470 self.namespace() - self.state = 1463 + self.state = 1471 self.multipartIdentifier() - self.state = 1464 + self.state = 1472 self.match(fugue_sqlParser.IS) - self.state = 1465 + self.state = 1473 localctx.comment = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.NULL or _la==fugue_sqlParser.STRING): @@ -11049,17 +11116,17 @@ def statement(self): elif la_ == 54: localctx = fugue_sqlParser.CommentTableContext(self, localctx) self.enterOuterAlt(localctx, 54) - self.state = 1467 + self.state = 1475 self.match(fugue_sqlParser.COMMENT) - self.state = 1468 + self.state = 1476 self.match(fugue_sqlParser.ON) - self.state = 1469 + self.state = 1477 self.match(fugue_sqlParser.TABLE) - self.state = 1470 + self.state = 1478 self.multipartIdentifier() - self.state = 1471 + self.state = 1479 self.match(fugue_sqlParser.IS) - self.state = 1472 + self.state = 1480 localctx.comment = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.NULL or _la==fugue_sqlParser.STRING): @@ -11072,38 +11139,38 @@ def statement(self): elif la_ == 55: localctx = fugue_sqlParser.RefreshTableContext(self, localctx) self.enterOuterAlt(localctx, 55) - self.state = 1474 + self.state = 1482 self.match(fugue_sqlParser.REFRESH) - self.state = 1475 + self.state = 1483 self.match(fugue_sqlParser.TABLE) - self.state = 1476 + self.state = 1484 self.multipartIdentifier() pass elif la_ == 56: localctx = fugue_sqlParser.RefreshResourceContext(self, localctx) self.enterOuterAlt(localctx, 56) - self.state = 1477 - self.match(fugue_sqlParser.REFRESH) self.state = 1485 + self.match(fugue_sqlParser.REFRESH) + self.state = 1493 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,168,self._ctx) + la_ = self._interp.adaptivePredict(self._input,169,self._ctx) if la_ == 1: - self.state = 1478 + self.state = 1486 self.match(fugue_sqlParser.STRING) pass elif la_ == 2: - self.state = 1482 + self.state = 1490 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,167,self._ctx) + _alt = self._interp.adaptivePredict(self._input,168,self._ctx) while _alt!=1 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1+1: - self.state = 1479 + self.state = 1487 self.matchWildcard() - self.state = 1484 + self.state = 1492 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,167,self._ctx) + _alt = self._interp.adaptivePredict(self._input,168,self._ctx) pass @@ -11113,43 +11180,43 @@ def statement(self): elif la_ == 57: localctx = fugue_sqlParser.CacheTableContext(self, localctx) self.enterOuterAlt(localctx, 57) - self.state = 1487 + self.state = 1495 self.match(fugue_sqlParser.CACHE) - self.state = 1489 + self.state = 1497 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LAZY: - self.state = 1488 + self.state = 1496 self.match(fugue_sqlParser.LAZY) - self.state = 1491 + self.state = 1499 self.match(fugue_sqlParser.TABLE) - self.state = 1492 + self.state = 1500 self.multipartIdentifier() - self.state = 1495 + self.state = 1503 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OPTIONS: - self.state = 1493 + self.state = 1501 self.match(fugue_sqlParser.OPTIONS) - self.state = 1494 + self.state = 1502 localctx.options = self.tablePropertyList() - self.state = 1501 + self.state = 1509 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS or _la==fugue_sqlParser.FROM or _la==fugue_sqlParser.MAP or ((((_la - 216)) & ~0x3f) == 0 and ((1 << (_la - 216)) & ((1 << (fugue_sqlParser.REDUCE - 216)) | (1 << (fugue_sqlParser.SELECT - 216)) | (1 << (fugue_sqlParser.TABLE - 216)))) != 0) or _la==fugue_sqlParser.VALUES or _la==fugue_sqlParser.WITH: - self.state = 1498 + self.state = 1506 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS: - self.state = 1497 + self.state = 1505 self.match(fugue_sqlParser.AS) - self.state = 1500 + self.state = 1508 self.query() @@ -11158,71 +11225,71 @@ def statement(self): elif la_ == 58: localctx = fugue_sqlParser.UncacheTableContext(self, localctx) self.enterOuterAlt(localctx, 58) - self.state = 1503 + self.state = 1511 self.match(fugue_sqlParser.UNCACHE) - self.state = 1504 + self.state = 1512 self.match(fugue_sqlParser.TABLE) - self.state = 1507 + self.state = 1515 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,173,self._ctx) + la_ = self._interp.adaptivePredict(self._input,174,self._ctx) if la_ == 1: - self.state = 1505 + self.state = 1513 self.match(fugue_sqlParser.IF) - self.state = 1506 + self.state = 1514 self.match(fugue_sqlParser.EXISTS) - self.state = 1509 + self.state = 1517 self.multipartIdentifier() pass elif la_ == 59: localctx = fugue_sqlParser.ClearCacheContext(self, localctx) self.enterOuterAlt(localctx, 59) - self.state = 1510 + self.state = 1518 self.match(fugue_sqlParser.CLEAR) - self.state = 1511 + self.state = 1519 self.match(fugue_sqlParser.CACHE) pass elif la_ == 60: localctx = fugue_sqlParser.LoadDataContext(self, localctx) self.enterOuterAlt(localctx, 60) - self.state = 1512 + self.state = 1520 self.match(fugue_sqlParser.LOAD) - self.state = 1513 + self.state = 1521 self.match(fugue_sqlParser.DATA) - self.state = 1515 + self.state = 1523 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LOCAL: - self.state = 1514 + self.state = 1522 self.match(fugue_sqlParser.LOCAL) - self.state = 1517 + self.state = 1525 self.match(fugue_sqlParser.INPATH) - self.state = 1518 + self.state = 1526 localctx.path = self.match(fugue_sqlParser.STRING) - self.state = 1520 + self.state = 1528 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OVERWRITE: - self.state = 1519 + self.state = 1527 self.match(fugue_sqlParser.OVERWRITE) - self.state = 1522 + self.state = 1530 self.match(fugue_sqlParser.INTO) - self.state = 1523 + self.state = 1531 self.match(fugue_sqlParser.TABLE) - self.state = 1524 + self.state = 1532 self.multipartIdentifier() - self.state = 1526 + self.state = 1534 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1525 + self.state = 1533 self.partitionSpec() @@ -11231,17 +11298,17 @@ def statement(self): elif la_ == 61: localctx = fugue_sqlParser.TruncateTableContext(self, localctx) self.enterOuterAlt(localctx, 61) - self.state = 1528 + self.state = 1536 self.match(fugue_sqlParser.TRUNCATE) - self.state = 1529 + self.state = 1537 self.match(fugue_sqlParser.TABLE) - self.state = 1530 + self.state = 1538 self.multipartIdentifier() - self.state = 1532 + self.state = 1540 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1531 + self.state = 1539 self.partitionSpec() @@ -11250,20 +11317,20 @@ def statement(self): elif la_ == 62: localctx = fugue_sqlParser.RepairTableContext(self, localctx) self.enterOuterAlt(localctx, 62) - self.state = 1534 + self.state = 1542 self.match(fugue_sqlParser.MSCK) - self.state = 1535 + self.state = 1543 self.match(fugue_sqlParser.REPAIR) - self.state = 1536 + self.state = 1544 self.match(fugue_sqlParser.TABLE) - self.state = 1537 + self.state = 1545 self.multipartIdentifier() pass elif la_ == 63: localctx = fugue_sqlParser.ManageResourceContext(self, localctx) self.enterOuterAlt(localctx, 63) - self.state = 1538 + self.state = 1546 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.ADD or _la==fugue_sqlParser.LIST): @@ -11271,27 +11338,27 @@ def statement(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 1539 - self.identifier() self.state = 1547 + self.identifier() + self.state = 1555 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,179,self._ctx) + la_ = self._interp.adaptivePredict(self._input,180,self._ctx) if la_ == 1: - self.state = 1540 + self.state = 1548 self.match(fugue_sqlParser.STRING) pass elif la_ == 2: - self.state = 1544 + self.state = 1552 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,178,self._ctx) + _alt = self._interp.adaptivePredict(self._input,179,self._ctx) while _alt!=1 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1+1: - self.state = 1541 + self.state = 1549 self.matchWildcard() - self.state = 1546 + self.state = 1554 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,178,self._ctx) + _alt = self._interp.adaptivePredict(self._input,179,self._ctx) pass @@ -11301,63 +11368,63 @@ def statement(self): elif la_ == 64: localctx = fugue_sqlParser.FailNativeCommandContext(self, localctx) self.enterOuterAlt(localctx, 64) - self.state = 1549 + self.state = 1557 self.match(fugue_sqlParser.SET) - self.state = 1550 + self.state = 1558 self.match(fugue_sqlParser.ROLE) - self.state = 1554 + self.state = 1562 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,180,self._ctx) + _alt = self._interp.adaptivePredict(self._input,181,self._ctx) while _alt!=1 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1+1: - self.state = 1551 + self.state = 1559 self.matchWildcard() - self.state = 1556 + self.state = 1564 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,180,self._ctx) + _alt = self._interp.adaptivePredict(self._input,181,self._ctx) pass elif la_ == 65: localctx = fugue_sqlParser.SetConfigurationContext(self, localctx) self.enterOuterAlt(localctx, 65) - self.state = 1557 + self.state = 1565 self.match(fugue_sqlParser.SET) - self.state = 1561 + self.state = 1569 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,181,self._ctx) + _alt = self._interp.adaptivePredict(self._input,182,self._ctx) while _alt!=1 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1+1: - self.state = 1558 + self.state = 1566 self.matchWildcard() - self.state = 1563 + self.state = 1571 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,181,self._ctx) + _alt = self._interp.adaptivePredict(self._input,182,self._ctx) pass elif la_ == 66: localctx = fugue_sqlParser.ResetConfigurationContext(self, localctx) self.enterOuterAlt(localctx, 66) - self.state = 1564 + self.state = 1572 self.match(fugue_sqlParser.RESET) pass elif la_ == 67: localctx = fugue_sqlParser.FailNativeCommandContext(self, localctx) self.enterOuterAlt(localctx, 67) - self.state = 1565 + self.state = 1573 self.unsupportedHiveNativeCommands() - self.state = 1569 + self.state = 1577 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,182,self._ctx) + _alt = self._interp.adaptivePredict(self._input,183,self._ctx) while _alt!=1 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1+1: - self.state = 1566 + self.state = 1574 self.matchWildcard() - self.state = 1571 + self.state = 1579 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,182,self._ctx) + _alt = self._interp.adaptivePredict(self._input,183,self._ctx) pass @@ -11550,37 +11617,37 @@ def accept(self, visitor:ParseTreeVisitor): def unsupportedHiveNativeCommands(self): localctx = fugue_sqlParser.UnsupportedHiveNativeCommandsContext(self, self._ctx, self.state) - self.enterRule(localctx, 136, self.RULE_unsupportedHiveNativeCommands) + self.enterRule(localctx, 138, self.RULE_unsupportedHiveNativeCommands) self._la = 0 # Token type try: - self.state = 1742 + self.state = 1750 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,191,self._ctx) + la_ = self._interp.adaptivePredict(self._input,192,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 1574 + self.state = 1582 localctx.kw1 = self.match(fugue_sqlParser.CREATE) - self.state = 1575 + self.state = 1583 localctx.kw2 = self.match(fugue_sqlParser.ROLE) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 1576 + self.state = 1584 localctx.kw1 = self.match(fugue_sqlParser.DROP) - self.state = 1577 + self.state = 1585 localctx.kw2 = self.match(fugue_sqlParser.ROLE) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 1578 + self.state = 1586 localctx.kw1 = self.match(fugue_sqlParser.GRANT) - self.state = 1580 + self.state = 1588 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,184,self._ctx) + la_ = self._interp.adaptivePredict(self._input,185,self._ctx) if la_ == 1: - self.state = 1579 + self.state = 1587 localctx.kw2 = self.match(fugue_sqlParser.ROLE) @@ -11588,13 +11655,13 @@ def unsupportedHiveNativeCommands(self): elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 1582 + self.state = 1590 localctx.kw1 = self.match(fugue_sqlParser.REVOKE) - self.state = 1584 + self.state = 1592 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,185,self._ctx) + la_ = self._interp.adaptivePredict(self._input,186,self._ctx) if la_ == 1: - self.state = 1583 + self.state = 1591 localctx.kw2 = self.match(fugue_sqlParser.ROLE) @@ -11602,23 +11669,23 @@ def unsupportedHiveNativeCommands(self): elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 1586 + self.state = 1594 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1587 + self.state = 1595 localctx.kw2 = self.match(fugue_sqlParser.GRANT) pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 1588 + self.state = 1596 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1589 + self.state = 1597 localctx.kw2 = self.match(fugue_sqlParser.ROLE) - self.state = 1591 + self.state = 1599 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,186,self._ctx) + la_ = self._interp.adaptivePredict(self._input,187,self._ctx) if la_ == 1: - self.state = 1590 + self.state = 1598 localctx.kw3 = self.match(fugue_sqlParser.GRANT) @@ -11626,429 +11693,429 @@ def unsupportedHiveNativeCommands(self): elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 1593 + self.state = 1601 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1594 + self.state = 1602 localctx.kw2 = self.match(fugue_sqlParser.PRINCIPALS) pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 1595 + self.state = 1603 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1596 + self.state = 1604 localctx.kw2 = self.match(fugue_sqlParser.ROLES) pass elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 1597 + self.state = 1605 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1598 + self.state = 1606 localctx.kw2 = self.match(fugue_sqlParser.CURRENT) - self.state = 1599 + self.state = 1607 localctx.kw3 = self.match(fugue_sqlParser.ROLES) pass elif la_ == 10: self.enterOuterAlt(localctx, 10) - self.state = 1600 + self.state = 1608 localctx.kw1 = self.match(fugue_sqlParser.EXPORT) - self.state = 1601 + self.state = 1609 localctx.kw2 = self.match(fugue_sqlParser.TABLE) pass elif la_ == 11: self.enterOuterAlt(localctx, 11) - self.state = 1602 + self.state = 1610 localctx.kw1 = self.match(fugue_sqlParser.IMPORT) - self.state = 1603 + self.state = 1611 localctx.kw2 = self.match(fugue_sqlParser.TABLE) pass elif la_ == 12: self.enterOuterAlt(localctx, 12) - self.state = 1604 + self.state = 1612 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1605 + self.state = 1613 localctx.kw2 = self.match(fugue_sqlParser.COMPACTIONS) pass elif la_ == 13: self.enterOuterAlt(localctx, 13) - self.state = 1606 + self.state = 1614 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1607 + self.state = 1615 localctx.kw2 = self.match(fugue_sqlParser.CREATE) - self.state = 1608 + self.state = 1616 localctx.kw3 = self.match(fugue_sqlParser.TABLE) pass elif la_ == 14: self.enterOuterAlt(localctx, 14) - self.state = 1609 + self.state = 1617 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1610 + self.state = 1618 localctx.kw2 = self.match(fugue_sqlParser.TRANSACTIONS) pass elif la_ == 15: self.enterOuterAlt(localctx, 15) - self.state = 1611 + self.state = 1619 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1612 + self.state = 1620 localctx.kw2 = self.match(fugue_sqlParser.INDEXES) pass elif la_ == 16: self.enterOuterAlt(localctx, 16) - self.state = 1613 + self.state = 1621 localctx.kw1 = self.match(fugue_sqlParser.SHOW) - self.state = 1614 + self.state = 1622 localctx.kw2 = self.match(fugue_sqlParser.LOCKS) pass elif la_ == 17: self.enterOuterAlt(localctx, 17) - self.state = 1615 + self.state = 1623 localctx.kw1 = self.match(fugue_sqlParser.CREATE) - self.state = 1616 + self.state = 1624 localctx.kw2 = self.match(fugue_sqlParser.INDEX) pass elif la_ == 18: self.enterOuterAlt(localctx, 18) - self.state = 1617 + self.state = 1625 localctx.kw1 = self.match(fugue_sqlParser.DROP) - self.state = 1618 + self.state = 1626 localctx.kw2 = self.match(fugue_sqlParser.INDEX) pass elif la_ == 19: self.enterOuterAlt(localctx, 19) - self.state = 1619 + self.state = 1627 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1620 + self.state = 1628 localctx.kw2 = self.match(fugue_sqlParser.INDEX) pass elif la_ == 20: self.enterOuterAlt(localctx, 20) - self.state = 1621 + self.state = 1629 localctx.kw1 = self.match(fugue_sqlParser.LOCK) - self.state = 1622 + self.state = 1630 localctx.kw2 = self.match(fugue_sqlParser.TABLE) pass elif la_ == 21: self.enterOuterAlt(localctx, 21) - self.state = 1623 + self.state = 1631 localctx.kw1 = self.match(fugue_sqlParser.LOCK) - self.state = 1624 + self.state = 1632 localctx.kw2 = self.match(fugue_sqlParser.DATABASE) pass elif la_ == 22: self.enterOuterAlt(localctx, 22) - self.state = 1625 + self.state = 1633 localctx.kw1 = self.match(fugue_sqlParser.UNLOCK) - self.state = 1626 + self.state = 1634 localctx.kw2 = self.match(fugue_sqlParser.TABLE) pass elif la_ == 23: self.enterOuterAlt(localctx, 23) - self.state = 1627 + self.state = 1635 localctx.kw1 = self.match(fugue_sqlParser.UNLOCK) - self.state = 1628 + self.state = 1636 localctx.kw2 = self.match(fugue_sqlParser.DATABASE) pass elif la_ == 24: self.enterOuterAlt(localctx, 24) - self.state = 1629 + self.state = 1637 localctx.kw1 = self.match(fugue_sqlParser.CREATE) - self.state = 1630 + self.state = 1638 localctx.kw2 = self.match(fugue_sqlParser.TEMPORARY) - self.state = 1631 + self.state = 1639 localctx.kw3 = self.match(fugue_sqlParser.MACRO) pass elif la_ == 25: self.enterOuterAlt(localctx, 25) - self.state = 1632 + self.state = 1640 localctx.kw1 = self.match(fugue_sqlParser.DROP) - self.state = 1633 + self.state = 1641 localctx.kw2 = self.match(fugue_sqlParser.TEMPORARY) - self.state = 1634 + self.state = 1642 localctx.kw3 = self.match(fugue_sqlParser.MACRO) pass elif la_ == 26: self.enterOuterAlt(localctx, 26) - self.state = 1635 + self.state = 1643 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1636 + self.state = 1644 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1637 + self.state = 1645 self.tableIdentifier() - self.state = 1638 + self.state = 1646 localctx.kw3 = self.match(fugue_sqlParser.NOT) - self.state = 1639 + self.state = 1647 localctx.kw4 = self.match(fugue_sqlParser.CLUSTERED) pass elif la_ == 27: self.enterOuterAlt(localctx, 27) - self.state = 1641 + self.state = 1649 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1642 + self.state = 1650 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1643 + self.state = 1651 self.tableIdentifier() - self.state = 1644 + self.state = 1652 localctx.kw3 = self.match(fugue_sqlParser.CLUSTERED) - self.state = 1645 + self.state = 1653 localctx.kw4 = self.match(fugue_sqlParser.BY) pass elif la_ == 28: self.enterOuterAlt(localctx, 28) - self.state = 1647 + self.state = 1655 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1648 + self.state = 1656 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1649 + self.state = 1657 self.tableIdentifier() - self.state = 1650 + self.state = 1658 localctx.kw3 = self.match(fugue_sqlParser.NOT) - self.state = 1651 + self.state = 1659 localctx.kw4 = self.match(fugue_sqlParser.SORTED) pass elif la_ == 29: self.enterOuterAlt(localctx, 29) - self.state = 1653 + self.state = 1661 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1654 + self.state = 1662 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1655 + self.state = 1663 self.tableIdentifier() - self.state = 1656 + self.state = 1664 localctx.kw3 = self.match(fugue_sqlParser.SKEWED) - self.state = 1657 + self.state = 1665 localctx.kw4 = self.match(fugue_sqlParser.BY) pass elif la_ == 30: self.enterOuterAlt(localctx, 30) - self.state = 1659 + self.state = 1667 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1660 + self.state = 1668 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1661 + self.state = 1669 self.tableIdentifier() - self.state = 1662 + self.state = 1670 localctx.kw3 = self.match(fugue_sqlParser.NOT) - self.state = 1663 + self.state = 1671 localctx.kw4 = self.match(fugue_sqlParser.SKEWED) pass elif la_ == 31: self.enterOuterAlt(localctx, 31) - self.state = 1665 + self.state = 1673 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1666 + self.state = 1674 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1667 + self.state = 1675 self.tableIdentifier() - self.state = 1668 + self.state = 1676 localctx.kw3 = self.match(fugue_sqlParser.NOT) - self.state = 1669 + self.state = 1677 localctx.kw4 = self.match(fugue_sqlParser.STORED) - self.state = 1670 + self.state = 1678 localctx.kw5 = self.match(fugue_sqlParser.AS) - self.state = 1671 + self.state = 1679 localctx.kw6 = self.match(fugue_sqlParser.DIRECTORIES) pass elif la_ == 32: self.enterOuterAlt(localctx, 32) - self.state = 1673 + self.state = 1681 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1674 + self.state = 1682 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1675 + self.state = 1683 self.tableIdentifier() - self.state = 1676 + self.state = 1684 localctx.kw3 = self.match(fugue_sqlParser.SET) - self.state = 1677 + self.state = 1685 localctx.kw4 = self.match(fugue_sqlParser.SKEWED) - self.state = 1678 + self.state = 1686 localctx.kw5 = self.match(fugue_sqlParser.LOCATION) pass elif la_ == 33: self.enterOuterAlt(localctx, 33) - self.state = 1680 + self.state = 1688 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1681 + self.state = 1689 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1682 + self.state = 1690 self.tableIdentifier() - self.state = 1683 + self.state = 1691 localctx.kw3 = self.match(fugue_sqlParser.EXCHANGE) - self.state = 1684 + self.state = 1692 localctx.kw4 = self.match(fugue_sqlParser.PARTITION) pass elif la_ == 34: self.enterOuterAlt(localctx, 34) - self.state = 1686 + self.state = 1694 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1687 + self.state = 1695 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1688 + self.state = 1696 self.tableIdentifier() - self.state = 1689 + self.state = 1697 localctx.kw3 = self.match(fugue_sqlParser.ARCHIVE) - self.state = 1690 + self.state = 1698 localctx.kw4 = self.match(fugue_sqlParser.PARTITION) pass elif la_ == 35: self.enterOuterAlt(localctx, 35) - self.state = 1692 + self.state = 1700 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1693 + self.state = 1701 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1694 + self.state = 1702 self.tableIdentifier() - self.state = 1695 + self.state = 1703 localctx.kw3 = self.match(fugue_sqlParser.UNARCHIVE) - self.state = 1696 + self.state = 1704 localctx.kw4 = self.match(fugue_sqlParser.PARTITION) pass elif la_ == 36: self.enterOuterAlt(localctx, 36) - self.state = 1698 + self.state = 1706 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1699 + self.state = 1707 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1700 + self.state = 1708 self.tableIdentifier() - self.state = 1701 + self.state = 1709 localctx.kw3 = self.match(fugue_sqlParser.TOUCH) pass elif la_ == 37: self.enterOuterAlt(localctx, 37) - self.state = 1703 + self.state = 1711 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1704 + self.state = 1712 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1705 + self.state = 1713 self.tableIdentifier() - self.state = 1707 + self.state = 1715 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1706 + self.state = 1714 self.partitionSpec() - self.state = 1709 + self.state = 1717 localctx.kw3 = self.match(fugue_sqlParser.COMPACT) pass elif la_ == 38: self.enterOuterAlt(localctx, 38) - self.state = 1711 + self.state = 1719 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1712 + self.state = 1720 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1713 + self.state = 1721 self.tableIdentifier() - self.state = 1715 + self.state = 1723 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1714 + self.state = 1722 self.partitionSpec() - self.state = 1717 + self.state = 1725 localctx.kw3 = self.match(fugue_sqlParser.CONCATENATE) pass elif la_ == 39: self.enterOuterAlt(localctx, 39) - self.state = 1719 + self.state = 1727 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1720 + self.state = 1728 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1721 + self.state = 1729 self.tableIdentifier() - self.state = 1723 + self.state = 1731 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1722 + self.state = 1730 self.partitionSpec() - self.state = 1725 + self.state = 1733 localctx.kw3 = self.match(fugue_sqlParser.SET) - self.state = 1726 + self.state = 1734 localctx.kw4 = self.match(fugue_sqlParser.FILEFORMAT) pass elif la_ == 40: self.enterOuterAlt(localctx, 40) - self.state = 1728 + self.state = 1736 localctx.kw1 = self.match(fugue_sqlParser.ALTER) - self.state = 1729 + self.state = 1737 localctx.kw2 = self.match(fugue_sqlParser.TABLE) - self.state = 1730 + self.state = 1738 self.tableIdentifier() - self.state = 1732 + self.state = 1740 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1731 + self.state = 1739 self.partitionSpec() - self.state = 1734 + self.state = 1742 localctx.kw3 = self.match(fugue_sqlParser.REPLACE) - self.state = 1735 + self.state = 1743 localctx.kw4 = self.match(fugue_sqlParser.COLUMNS) pass elif la_ == 41: self.enterOuterAlt(localctx, 41) - self.state = 1737 + self.state = 1745 localctx.kw1 = self.match(fugue_sqlParser.START) - self.state = 1738 + self.state = 1746 localctx.kw2 = self.match(fugue_sqlParser.TRANSACTION) pass elif la_ == 42: self.enterOuterAlt(localctx, 42) - self.state = 1739 + self.state = 1747 localctx.kw1 = self.match(fugue_sqlParser.COMMIT) pass elif la_ == 43: self.enterOuterAlt(localctx, 43) - self.state = 1740 + self.state = 1748 localctx.kw1 = self.match(fugue_sqlParser.ROLLBACK) pass elif la_ == 44: self.enterOuterAlt(localctx, 44) - self.state = 1741 + self.state = 1749 localctx.kw1 = self.match(fugue_sqlParser.DFS) pass @@ -12108,43 +12175,43 @@ def accept(self, visitor:ParseTreeVisitor): def createTableHeader(self): localctx = fugue_sqlParser.CreateTableHeaderContext(self, self._ctx, self.state) - self.enterRule(localctx, 138, self.RULE_createTableHeader) + self.enterRule(localctx, 140, self.RULE_createTableHeader) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1744 + self.state = 1752 self.match(fugue_sqlParser.CREATE) - self.state = 1746 + self.state = 1754 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.TEMPORARY: - self.state = 1745 + self.state = 1753 self.match(fugue_sqlParser.TEMPORARY) - self.state = 1749 + self.state = 1757 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.EXTERNAL: - self.state = 1748 + self.state = 1756 self.match(fugue_sqlParser.EXTERNAL) - self.state = 1751 + self.state = 1759 self.match(fugue_sqlParser.TABLE) - self.state = 1755 + self.state = 1763 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,194,self._ctx) + la_ = self._interp.adaptivePredict(self._input,195,self._ctx) if la_ == 1: - self.state = 1752 + self.state = 1760 self.match(fugue_sqlParser.IF) - self.state = 1753 + self.state = 1761 self.match(fugue_sqlParser.NOT) - self.state = 1754 + self.state = 1762 self.match(fugue_sqlParser.EXISTS) - self.state = 1757 + self.state = 1765 self.multipartIdentifier() except RecognitionException as re: localctx.exception = re @@ -12192,25 +12259,25 @@ def accept(self, visitor:ParseTreeVisitor): def replaceTableHeader(self): localctx = fugue_sqlParser.ReplaceTableHeaderContext(self, self._ctx, self.state) - self.enterRule(localctx, 140, self.RULE_replaceTableHeader) + self.enterRule(localctx, 142, self.RULE_replaceTableHeader) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1761 + self.state = 1769 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.CREATE: - self.state = 1759 + self.state = 1767 self.match(fugue_sqlParser.CREATE) - self.state = 1760 + self.state = 1768 self.match(fugue_sqlParser.OR) - self.state = 1763 + self.state = 1771 self.match(fugue_sqlParser.REPLACE) - self.state = 1764 + self.state = 1772 self.match(fugue_sqlParser.TABLE) - self.state = 1765 + self.state = 1773 self.multipartIdentifier() except RecognitionException as re: localctx.exception = re @@ -12271,33 +12338,33 @@ def accept(self, visitor:ParseTreeVisitor): def bucketSpec(self): localctx = fugue_sqlParser.BucketSpecContext(self, self._ctx, self.state) - self.enterRule(localctx, 142, self.RULE_bucketSpec) + self.enterRule(localctx, 144, self.RULE_bucketSpec) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1767 + self.state = 1775 self.match(fugue_sqlParser.CLUSTERED) - self.state = 1768 + self.state = 1776 self.match(fugue_sqlParser.BY) - self.state = 1769 + self.state = 1777 self.identifierList() - self.state = 1773 + self.state = 1781 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.SORTED: - self.state = 1770 + self.state = 1778 self.match(fugue_sqlParser.SORTED) - self.state = 1771 + self.state = 1779 self.match(fugue_sqlParser.BY) - self.state = 1772 + self.state = 1780 self.orderedIdentifierList() - self.state = 1775 + self.state = 1783 self.match(fugue_sqlParser.INTO) - self.state = 1776 + self.state = 1784 self.match(fugue_sqlParser.INTEGER_VALUE) - self.state = 1777 + self.state = 1785 self.match(fugue_sqlParser.BUCKETS) except RecognitionException as re: localctx.exception = re @@ -12359,40 +12426,40 @@ def accept(self, visitor:ParseTreeVisitor): def skewSpec(self): localctx = fugue_sqlParser.SkewSpecContext(self, self._ctx, self.state) - self.enterRule(localctx, 144, self.RULE_skewSpec) + self.enterRule(localctx, 146, self.RULE_skewSpec) try: self.enterOuterAlt(localctx, 1) - self.state = 1779 + self.state = 1787 self.match(fugue_sqlParser.SKEWED) - self.state = 1780 + self.state = 1788 self.match(fugue_sqlParser.BY) - self.state = 1781 + self.state = 1789 self.identifierList() - self.state = 1782 + self.state = 1790 self.match(fugue_sqlParser.ON) - self.state = 1785 + self.state = 1793 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,197,self._ctx) + la_ = self._interp.adaptivePredict(self._input,198,self._ctx) if la_ == 1: - self.state = 1783 + self.state = 1791 self.constantList() pass elif la_ == 2: - self.state = 1784 + self.state = 1792 self.nestedConstantList() pass - self.state = 1790 + self.state = 1798 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,198,self._ctx) + la_ = self._interp.adaptivePredict(self._input,199,self._ctx) if la_ == 1: - self.state = 1787 + self.state = 1795 self.match(fugue_sqlParser.STORED) - self.state = 1788 + self.state = 1796 self.match(fugue_sqlParser.AS) - self.state = 1789 + self.state = 1797 self.match(fugue_sqlParser.DIRECTORIES) @@ -12432,12 +12499,12 @@ def accept(self, visitor:ParseTreeVisitor): def locationSpec(self): localctx = fugue_sqlParser.LocationSpecContext(self, self._ctx, self.state) - self.enterRule(localctx, 146, self.RULE_locationSpec) + self.enterRule(localctx, 148, self.RULE_locationSpec) try: self.enterOuterAlt(localctx, 1) - self.state = 1792 + self.state = 1800 self.match(fugue_sqlParser.LOCATION) - self.state = 1793 + self.state = 1801 self.match(fugue_sqlParser.STRING) except RecognitionException as re: localctx.exception = re @@ -12475,12 +12542,12 @@ def accept(self, visitor:ParseTreeVisitor): def commentSpec(self): localctx = fugue_sqlParser.CommentSpecContext(self, self._ctx, self.state) - self.enterRule(localctx, 148, self.RULE_commentSpec) + self.enterRule(localctx, 150, self.RULE_commentSpec) try: self.enterOuterAlt(localctx, 1) - self.state = 1795 + self.state = 1803 self.match(fugue_sqlParser.COMMENT) - self.state = 1796 + self.state = 1804 self.match(fugue_sqlParser.STRING) except RecognitionException as re: localctx.exception = re @@ -12524,21 +12591,21 @@ def accept(self, visitor:ParseTreeVisitor): def query(self): localctx = fugue_sqlParser.QueryContext(self, self._ctx, self.state) - self.enterRule(localctx, 150, self.RULE_query) + self.enterRule(localctx, 152, self.RULE_query) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1799 + self.state = 1807 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.WITH: - self.state = 1798 + self.state = 1806 self.ctes() - self.state = 1801 + self.state = 1809 self.queryTerm(0) - self.state = 1802 + self.state = 1810 self.queryOrganization() except RecognitionException as re: localctx.exception = re @@ -12698,44 +12765,44 @@ def accept(self, visitor:ParseTreeVisitor): def insertInto(self): localctx = fugue_sqlParser.InsertIntoContext(self, self._ctx, self.state) - self.enterRule(localctx, 152, self.RULE_insertInto) + self.enterRule(localctx, 154, self.RULE_insertInto) self._la = 0 # Token type try: - self.state = 1859 + self.state = 1867 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,212,self._ctx) + la_ = self._interp.adaptivePredict(self._input,213,self._ctx) if la_ == 1: localctx = fugue_sqlParser.InsertOverwriteTableContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 1804 + self.state = 1812 self.match(fugue_sqlParser.INSERT) - self.state = 1805 + self.state = 1813 self.match(fugue_sqlParser.OVERWRITE) - self.state = 1807 + self.state = 1815 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,200,self._ctx) + la_ = self._interp.adaptivePredict(self._input,201,self._ctx) if la_ == 1: - self.state = 1806 + self.state = 1814 self.match(fugue_sqlParser.TABLE) - self.state = 1809 + self.state = 1817 self.multipartIdentifier() - self.state = 1816 + self.state = 1824 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1810 + self.state = 1818 self.partitionSpec() - self.state = 1814 + self.state = 1822 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.IF: - self.state = 1811 + self.state = 1819 self.match(fugue_sqlParser.IF) - self.state = 1812 + self.state = 1820 self.match(fugue_sqlParser.NOT) - self.state = 1813 + self.state = 1821 self.match(fugue_sqlParser.EXISTS) @@ -12746,37 +12813,37 @@ def insertInto(self): elif la_ == 2: localctx = fugue_sqlParser.InsertIntoTableContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 1818 + self.state = 1826 self.match(fugue_sqlParser.INSERT) - self.state = 1819 + self.state = 1827 self.match(fugue_sqlParser.INTO) - self.state = 1821 + self.state = 1829 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,203,self._ctx) + la_ = self._interp.adaptivePredict(self._input,204,self._ctx) if la_ == 1: - self.state = 1820 + self.state = 1828 self.match(fugue_sqlParser.TABLE) - self.state = 1823 + self.state = 1831 self.multipartIdentifier() - self.state = 1825 + self.state = 1833 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PARTITION: - self.state = 1824 + self.state = 1832 self.partitionSpec() - self.state = 1830 + self.state = 1838 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.IF: - self.state = 1827 + self.state = 1835 self.match(fugue_sqlParser.IF) - self.state = 1828 + self.state = 1836 self.match(fugue_sqlParser.NOT) - self.state = 1829 + self.state = 1837 self.match(fugue_sqlParser.EXISTS) @@ -12785,35 +12852,35 @@ def insertInto(self): elif la_ == 3: localctx = fugue_sqlParser.InsertOverwriteHiveDirContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 1832 + self.state = 1840 self.match(fugue_sqlParser.INSERT) - self.state = 1833 + self.state = 1841 self.match(fugue_sqlParser.OVERWRITE) - self.state = 1835 + self.state = 1843 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LOCAL: - self.state = 1834 + self.state = 1842 self.match(fugue_sqlParser.LOCAL) - self.state = 1837 + self.state = 1845 self.match(fugue_sqlParser.DIRECTORY) - self.state = 1838 + self.state = 1846 localctx.path = self.match(fugue_sqlParser.STRING) - self.state = 1840 + self.state = 1848 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ROW: - self.state = 1839 + self.state = 1847 self.rowFormat() - self.state = 1843 + self.state = 1851 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.STORED: - self.state = 1842 + self.state = 1850 self.createFileFormat() @@ -12822,37 +12889,37 @@ def insertInto(self): elif la_ == 4: localctx = fugue_sqlParser.InsertOverwriteDirContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 1845 + self.state = 1853 self.match(fugue_sqlParser.INSERT) - self.state = 1846 + self.state = 1854 self.match(fugue_sqlParser.OVERWRITE) - self.state = 1848 + self.state = 1856 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LOCAL: - self.state = 1847 + self.state = 1855 self.match(fugue_sqlParser.LOCAL) - self.state = 1850 + self.state = 1858 self.match(fugue_sqlParser.DIRECTORY) - self.state = 1852 + self.state = 1860 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.STRING: - self.state = 1851 + self.state = 1859 localctx.path = self.match(fugue_sqlParser.STRING) - self.state = 1854 + self.state = 1862 self.tableProvider() - self.state = 1857 + self.state = 1865 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OPTIONS: - self.state = 1855 + self.state = 1863 self.match(fugue_sqlParser.OPTIONS) - self.state = 1856 + self.state = 1864 localctx.options = self.tablePropertyList() @@ -12897,17 +12964,17 @@ def accept(self, visitor:ParseTreeVisitor): def partitionSpecLocation(self): localctx = fugue_sqlParser.PartitionSpecLocationContext(self, self._ctx, self.state) - self.enterRule(localctx, 154, self.RULE_partitionSpecLocation) + self.enterRule(localctx, 156, self.RULE_partitionSpecLocation) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1861 + self.state = 1869 self.partitionSpec() - self.state = 1863 + self.state = 1871 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LOCATION: - self.state = 1862 + self.state = 1870 self.locationSpec() @@ -12951,29 +13018,29 @@ def accept(self, visitor:ParseTreeVisitor): def partitionSpec(self): localctx = fugue_sqlParser.PartitionSpecContext(self, self._ctx, self.state) - self.enterRule(localctx, 156, self.RULE_partitionSpec) + self.enterRule(localctx, 158, self.RULE_partitionSpec) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1865 + self.state = 1873 self.match(fugue_sqlParser.PARTITION) - self.state = 1866 + self.state = 1874 self.match(fugue_sqlParser.T__2) - self.state = 1867 + self.state = 1875 self.partitionVal() - self.state = 1872 + self.state = 1880 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 1868 + self.state = 1876 self.match(fugue_sqlParser.T__0) - self.state = 1869 + self.state = 1877 self.partitionVal() - self.state = 1874 + self.state = 1882 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1875 + self.state = 1883 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -13016,19 +13083,19 @@ def accept(self, visitor:ParseTreeVisitor): def partitionVal(self): localctx = fugue_sqlParser.PartitionValContext(self, self._ctx, self.state) - self.enterRule(localctx, 158, self.RULE_partitionVal) + self.enterRule(localctx, 160, self.RULE_partitionVal) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1877 + self.state = 1885 self.identifier() - self.state = 1880 + self.state = 1888 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.EQUAL: - self.state = 1878 + self.state = 1886 self.match(fugue_sqlParser.EQUAL) - self.state = 1879 + self.state = 1887 self.constant() @@ -13071,11 +13138,11 @@ def accept(self, visitor:ParseTreeVisitor): def namespace(self): localctx = fugue_sqlParser.NamespaceContext(self, self._ctx, self.state) - self.enterRule(localctx, 160, self.RULE_namespace) + self.enterRule(localctx, 162, self.RULE_namespace) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1882 + self.state = 1890 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DATABASE or _la==fugue_sqlParser.NAMESPACE or _la==fugue_sqlParser.SCHEMA): self._errHandler.recoverInline(self) @@ -13131,38 +13198,38 @@ def accept(self, visitor:ParseTreeVisitor): def describeFuncName(self): localctx = fugue_sqlParser.DescribeFuncNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 162, self.RULE_describeFuncName) + self.enterRule(localctx, 164, self.RULE_describeFuncName) try: - self.state = 1889 + self.state = 1897 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,216,self._ctx) + la_ = self._interp.adaptivePredict(self._input,217,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 1884 + self.state = 1892 self.qualifiedName() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 1885 + self.state = 1893 self.match(fugue_sqlParser.STRING) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 1886 + self.state = 1894 self.comparisonOperator() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 1887 + self.state = 1895 self.arithmeticOperator() pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 1888 + self.state = 1896 self.predicateOperator() pass @@ -13206,23 +13273,23 @@ def accept(self, visitor:ParseTreeVisitor): def describeColName(self): localctx = fugue_sqlParser.DescribeColNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 164, self.RULE_describeColName) + self.enterRule(localctx, 166, self.RULE_describeColName) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1891 + self.state = 1899 localctx._identifier = self.identifier() localctx.nameParts.append(localctx._identifier) - self.state = 1896 + self.state = 1904 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__4: - self.state = 1892 + self.state = 1900 self.match(fugue_sqlParser.T__4) - self.state = 1893 + self.state = 1901 localctx._identifier = self.identifier() localctx.nameParts.append(localctx._identifier) - self.state = 1898 + self.state = 1906 self._errHandler.sync(self) _la = self._input.LA(1) @@ -13266,23 +13333,23 @@ def accept(self, visitor:ParseTreeVisitor): def ctes(self): localctx = fugue_sqlParser.CtesContext(self, self._ctx, self.state) - self.enterRule(localctx, 166, self.RULE_ctes) + self.enterRule(localctx, 168, self.RULE_ctes) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1899 + self.state = 1907 self.match(fugue_sqlParser.WITH) - self.state = 1900 + self.state = 1908 self.namedQuery() - self.state = 1905 + self.state = 1913 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 1901 + self.state = 1909 self.match(fugue_sqlParser.T__0) - self.state = 1902 + self.state = 1910 self.namedQuery() - self.state = 1907 + self.state = 1915 self._errHandler.sync(self) _la = self._input.LA(1) @@ -13333,33 +13400,33 @@ def accept(self, visitor:ParseTreeVisitor): def namedQuery(self): localctx = fugue_sqlParser.NamedQueryContext(self, self._ctx, self.state) - self.enterRule(localctx, 168, self.RULE_namedQuery) + self.enterRule(localctx, 170, self.RULE_namedQuery) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1908 + self.state = 1916 localctx.name = self.errorCapturingIdentifier() - self.state = 1910 + self.state = 1918 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,219,self._ctx) + la_ = self._interp.adaptivePredict(self._input,220,self._ctx) if la_ == 1: - self.state = 1909 + self.state = 1917 localctx.columnAliases = self.identifierList() - self.state = 1913 + self.state = 1921 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AS: - self.state = 1912 + self.state = 1920 self.match(fugue_sqlParser.AS) - self.state = 1915 + self.state = 1923 self.match(fugue_sqlParser.T__2) - self.state = 1916 + self.state = 1924 self.query() - self.state = 1917 + self.state = 1925 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -13398,12 +13465,12 @@ def accept(self, visitor:ParseTreeVisitor): def tableProvider(self): localctx = fugue_sqlParser.TableProviderContext(self, self._ctx, self.state) - self.enterRule(localctx, 170, self.RULE_tableProvider) + self.enterRule(localctx, 172, self.RULE_tableProvider) try: self.enterOuterAlt(localctx, 1) - self.state = 1919 + self.state = 1927 self.match(fugue_sqlParser.USING) - self.state = 1920 + self.state = 1928 self.multipartIdentifier() except RecognitionException as re: localctx.exception = re @@ -13497,53 +13564,53 @@ def accept(self, visitor:ParseTreeVisitor): def createTableClauses(self): localctx = fugue_sqlParser.CreateTableClausesContext(self, self._ctx, self.state) - self.enterRule(localctx, 172, self.RULE_createTableClauses) + self.enterRule(localctx, 174, self.RULE_createTableClauses) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1934 + self.state = 1942 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.CLUSTERED or _la==fugue_sqlParser.COMMENT or ((((_la - 167)) & ~0x3f) == 0 and ((1 << (_la - 167)) & ((1 << (fugue_sqlParser.LOCATION - 167)) | (1 << (fugue_sqlParser.OPTIONS - 167)) | (1 << (fugue_sqlParser.PARTITIONED - 167)))) != 0) or _la==fugue_sqlParser.TBLPROPERTIES: - self.state = 1932 + self.state = 1940 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.OPTIONS]: - self.state = 1922 + self.state = 1930 self.match(fugue_sqlParser.OPTIONS) - self.state = 1923 + self.state = 1931 localctx.options = self.tablePropertyList() pass elif token in [fugue_sqlParser.PARTITIONED]: - self.state = 1924 + self.state = 1932 self.match(fugue_sqlParser.PARTITIONED) - self.state = 1925 + self.state = 1933 self.match(fugue_sqlParser.BY) - self.state = 1926 + self.state = 1934 localctx.partitioning = self.transformList() pass elif token in [fugue_sqlParser.CLUSTERED]: - self.state = 1927 + self.state = 1935 self.bucketSpec() pass elif token in [fugue_sqlParser.LOCATION]: - self.state = 1928 + self.state = 1936 self.locationSpec() pass elif token in [fugue_sqlParser.COMMENT]: - self.state = 1929 + self.state = 1937 self.commentSpec() pass elif token in [fugue_sqlParser.TBLPROPERTIES]: - self.state = 1930 + self.state = 1938 self.match(fugue_sqlParser.TBLPROPERTIES) - self.state = 1931 + self.state = 1939 localctx.tableProps = self.tablePropertyList() pass else: raise NoViableAltException(self) - self.state = 1936 + self.state = 1944 self._errHandler.sync(self) _la = self._input.LA(1) @@ -13584,27 +13651,27 @@ def accept(self, visitor:ParseTreeVisitor): def tablePropertyList(self): localctx = fugue_sqlParser.TablePropertyListContext(self, self._ctx, self.state) - self.enterRule(localctx, 174, self.RULE_tablePropertyList) + self.enterRule(localctx, 176, self.RULE_tablePropertyList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1937 + self.state = 1945 self.match(fugue_sqlParser.T__2) - self.state = 1938 + self.state = 1946 self.tableProperty() - self.state = 1943 + self.state = 1951 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 1939 + self.state = 1947 self.match(fugue_sqlParser.T__0) - self.state = 1940 + self.state = 1948 self.tableProperty() - self.state = 1945 + self.state = 1953 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1946 + self.state = 1954 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -13649,25 +13716,25 @@ def accept(self, visitor:ParseTreeVisitor): def tableProperty(self): localctx = fugue_sqlParser.TablePropertyContext(self, self._ctx, self.state) - self.enterRule(localctx, 176, self.RULE_tableProperty) + self.enterRule(localctx, 178, self.RULE_tableProperty) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1948 + self.state = 1956 localctx.key = self.tablePropertyKey() - self.state = 1953 + self.state = 1961 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.FALSE or ((((_la - 270)) & ~0x3f) == 0 and ((1 << (_la - 270)) & ((1 << (fugue_sqlParser.TRUE - 270)) | (1 << (fugue_sqlParser.EQUAL - 270)) | (1 << (fugue_sqlParser.STRING - 270)) | (1 << (fugue_sqlParser.INTEGER_VALUE - 270)) | (1 << (fugue_sqlParser.DECIMAL_VALUE - 270)))) != 0): - self.state = 1950 + self.state = 1958 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.EQUAL: - self.state = 1949 + self.state = 1957 self.match(fugue_sqlParser.EQUAL) - self.state = 1952 + self.state = 1960 localctx.value = self.tablePropertyValue() @@ -13711,25 +13778,25 @@ def accept(self, visitor:ParseTreeVisitor): def tablePropertyKey(self): localctx = fugue_sqlParser.TablePropertyKeyContext(self, self._ctx, self.state) - self.enterRule(localctx, 178, self.RULE_tablePropertyKey) + self.enterRule(localctx, 180, self.RULE_tablePropertyKey) self._la = 0 # Token type try: - self.state = 1964 + self.state = 1972 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,227,self._ctx) + la_ = self._interp.adaptivePredict(self._input,228,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 1955 + self.state = 1963 self.identifier() - self.state = 1960 + self.state = 1968 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__4: - self.state = 1956 + self.state = 1964 self.match(fugue_sqlParser.T__4) - self.state = 1957 + self.state = 1965 self.identifier() - self.state = 1962 + self.state = 1970 self._errHandler.sync(self) _la = self._input.LA(1) @@ -13737,7 +13804,7 @@ def tablePropertyKey(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 1963 + self.state = 1971 self.match(fugue_sqlParser.STRING) pass @@ -13785,29 +13852,29 @@ def accept(self, visitor:ParseTreeVisitor): def tablePropertyValue(self): localctx = fugue_sqlParser.TablePropertyValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 180, self.RULE_tablePropertyValue) + self.enterRule(localctx, 182, self.RULE_tablePropertyValue) try: - self.state = 1970 + self.state = 1978 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.INTEGER_VALUE]: self.enterOuterAlt(localctx, 1) - self.state = 1966 + self.state = 1974 self.match(fugue_sqlParser.INTEGER_VALUE) pass elif token in [fugue_sqlParser.DECIMAL_VALUE]: self.enterOuterAlt(localctx, 2) - self.state = 1967 + self.state = 1975 self.match(fugue_sqlParser.DECIMAL_VALUE) pass elif token in [fugue_sqlParser.FALSE, fugue_sqlParser.TRUE]: self.enterOuterAlt(localctx, 3) - self.state = 1968 + self.state = 1976 self.booleanValue() pass elif token in [fugue_sqlParser.STRING]: self.enterOuterAlt(localctx, 4) - self.state = 1969 + self.state = 1977 self.match(fugue_sqlParser.STRING) pass else: @@ -13850,27 +13917,27 @@ def accept(self, visitor:ParseTreeVisitor): def constantList(self): localctx = fugue_sqlParser.ConstantListContext(self, self._ctx, self.state) - self.enterRule(localctx, 182, self.RULE_constantList) + self.enterRule(localctx, 184, self.RULE_constantList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1972 + self.state = 1980 self.match(fugue_sqlParser.T__2) - self.state = 1973 + self.state = 1981 self.constant() - self.state = 1978 + self.state = 1986 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 1974 + self.state = 1982 self.match(fugue_sqlParser.T__0) - self.state = 1975 + self.state = 1983 self.constant() - self.state = 1980 + self.state = 1988 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1981 + self.state = 1989 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -13909,27 +13976,27 @@ def accept(self, visitor:ParseTreeVisitor): def nestedConstantList(self): localctx = fugue_sqlParser.NestedConstantListContext(self, self._ctx, self.state) - self.enterRule(localctx, 184, self.RULE_nestedConstantList) + self.enterRule(localctx, 186, self.RULE_nestedConstantList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1983 + self.state = 1991 self.match(fugue_sqlParser.T__2) - self.state = 1984 + self.state = 1992 self.constantList() - self.state = 1989 + self.state = 1997 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 1985 + self.state = 1993 self.match(fugue_sqlParser.T__0) - self.state = 1986 + self.state = 1994 self.constantList() - self.state = 1991 + self.state = 1999 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1992 + self.state = 2000 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -13978,28 +14045,28 @@ def accept(self, visitor:ParseTreeVisitor): def createFileFormat(self): localctx = fugue_sqlParser.CreateFileFormatContext(self, self._ctx, self.state) - self.enterRule(localctx, 186, self.RULE_createFileFormat) + self.enterRule(localctx, 188, self.RULE_createFileFormat) try: - self.state = 2000 + self.state = 2008 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,231,self._ctx) + la_ = self._interp.adaptivePredict(self._input,232,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 1994 + self.state = 2002 self.match(fugue_sqlParser.STORED) - self.state = 1995 + self.state = 2003 self.match(fugue_sqlParser.AS) - self.state = 1996 + self.state = 2004 self.fileFormat() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 1997 + self.state = 2005 self.match(fugue_sqlParser.STORED) - self.state = 1998 + self.state = 2006 self.match(fugue_sqlParser.BY) - self.state = 1999 + self.state = 2007 self.storageHandler() pass @@ -14075,28 +14142,28 @@ def accept(self, visitor:ParseTreeVisitor): def fileFormat(self): localctx = fugue_sqlParser.FileFormatContext(self, self._ctx, self.state) - self.enterRule(localctx, 188, self.RULE_fileFormat) + self.enterRule(localctx, 190, self.RULE_fileFormat) try: - self.state = 2007 + self.state = 2015 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,232,self._ctx) + la_ = self._interp.adaptivePredict(self._input,233,self._ctx) if la_ == 1: localctx = fugue_sqlParser.TableFileFormatContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 2002 + self.state = 2010 self.match(fugue_sqlParser.INPUTFORMAT) - self.state = 2003 + self.state = 2011 localctx.inFmt = self.match(fugue_sqlParser.STRING) - self.state = 2004 + self.state = 2012 self.match(fugue_sqlParser.OUTPUTFORMAT) - self.state = 2005 + self.state = 2013 localctx.outFmt = self.match(fugue_sqlParser.STRING) pass elif la_ == 2: localctx = fugue_sqlParser.GenericFileFormatContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 2006 + self.state = 2014 self.identifier() pass @@ -14144,20 +14211,20 @@ def accept(self, visitor:ParseTreeVisitor): def storageHandler(self): localctx = fugue_sqlParser.StorageHandlerContext(self, self._ctx, self.state) - self.enterRule(localctx, 190, self.RULE_storageHandler) + self.enterRule(localctx, 192, self.RULE_storageHandler) try: self.enterOuterAlt(localctx, 1) - self.state = 2009 + self.state = 2017 self.match(fugue_sqlParser.STRING) - self.state = 2013 + self.state = 2021 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,233,self._ctx) + la_ = self._interp.adaptivePredict(self._input,234,self._ctx) if la_ == 1: - self.state = 2010 + self.state = 2018 self.match(fugue_sqlParser.WITH) - self.state = 2011 + self.state = 2019 self.match(fugue_sqlParser.SERDEPROPERTIES) - self.state = 2012 + self.state = 2020 self.tablePropertyList() @@ -14198,12 +14265,12 @@ def accept(self, visitor:ParseTreeVisitor): def resource(self): localctx = fugue_sqlParser.ResourceContext(self, self._ctx, self.state) - self.enterRule(localctx, 192, self.RULE_resource) + self.enterRule(localctx, 194, self.RULE_resource) try: self.enterOuterAlt(localctx, 1) - self.state = 2015 + self.state = 2023 self.identifier() - self.state = 2016 + self.state = 2024 self.match(fugue_sqlParser.STRING) except RecognitionException as re: localctx.exception = re @@ -14393,34 +14460,34 @@ def accept(self, visitor:ParseTreeVisitor): def dmlStatementNoWith(self): localctx = fugue_sqlParser.DmlStatementNoWithContext(self, self._ctx, self.state) - self.enterRule(localctx, 194, self.RULE_dmlStatementNoWith) + self.enterRule(localctx, 196, self.RULE_dmlStatementNoWith) self._la = 0 # Token type try: - self.state = 2069 + self.state = 2077 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.INSERT]: localctx = fugue_sqlParser.SingleInsertQueryContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 2018 + self.state = 2026 self.insertInto() - self.state = 2019 + self.state = 2027 self.queryTerm(0) - self.state = 2020 + self.state = 2028 self.queryOrganization() pass elif token in [fugue_sqlParser.FROM]: localctx = fugue_sqlParser.MultiInsertQueryContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 2022 + self.state = 2030 self.fromClause() - self.state = 2024 + self.state = 2032 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 2023 + self.state = 2031 self.multiInsertQueryBody() - self.state = 2026 + self.state = 2034 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==fugue_sqlParser.INSERT): @@ -14430,19 +14497,19 @@ def dmlStatementNoWith(self): elif token in [fugue_sqlParser.DELETE]: localctx = fugue_sqlParser.DeleteFromTableContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 2028 + self.state = 2036 self.match(fugue_sqlParser.DELETE) - self.state = 2029 + self.state = 2037 self.match(fugue_sqlParser.FROM) - self.state = 2030 + self.state = 2038 self.multipartIdentifier() - self.state = 2031 + self.state = 2039 self.tableAlias() - self.state = 2033 + self.state = 2041 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.WHERE: - self.state = 2032 + self.state = 2040 self.whereClause() @@ -14450,19 +14517,19 @@ def dmlStatementNoWith(self): elif token in [fugue_sqlParser.UPDATE]: localctx = fugue_sqlParser.UpdateTableContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 2035 + self.state = 2043 self.match(fugue_sqlParser.UPDATE) - self.state = 2036 + self.state = 2044 self.multipartIdentifier() - self.state = 2037 + self.state = 2045 self.tableAlias() - self.state = 2038 + self.state = 2046 self.setClause() - self.state = 2040 + self.state = 2048 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.WHERE: - self.state = 2039 + self.state = 2047 self.whereClause() @@ -14470,58 +14537,58 @@ def dmlStatementNoWith(self): elif token in [fugue_sqlParser.MERGE]: localctx = fugue_sqlParser.MergeIntoTableContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 2042 + self.state = 2050 self.match(fugue_sqlParser.MERGE) - self.state = 2043 + self.state = 2051 self.match(fugue_sqlParser.INTO) - self.state = 2044 + self.state = 2052 localctx.target = self.multipartIdentifier() - self.state = 2045 + self.state = 2053 localctx.targetAlias = self.tableAlias() - self.state = 2046 + self.state = 2054 self.match(fugue_sqlParser.USING) - self.state = 2052 + self.state = 2060 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,237,self._ctx) + la_ = self._interp.adaptivePredict(self._input,238,self._ctx) if la_ == 1: - self.state = 2047 + self.state = 2055 localctx.source = self.multipartIdentifier() pass elif la_ == 2: - self.state = 2048 + self.state = 2056 self.match(fugue_sqlParser.T__2) - self.state = 2049 + self.state = 2057 localctx.sourceQuery = self.query() - self.state = 2050 + self.state = 2058 self.match(fugue_sqlParser.T__3) pass - self.state = 2054 + self.state = 2062 localctx.sourceAlias = self.tableAlias() - self.state = 2055 + self.state = 2063 self.match(fugue_sqlParser.ON) - self.state = 2056 + self.state = 2064 localctx.mergeCondition = self.booleanExpression(0) - self.state = 2060 + self.state = 2068 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,238,self._ctx) + _alt = self._interp.adaptivePredict(self._input,239,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2057 + self.state = 2065 self.matchedClause() - self.state = 2062 + self.state = 2070 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,238,self._ctx) + _alt = self._interp.adaptivePredict(self._input,239,self._ctx) - self.state = 2066 + self.state = 2074 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.WHEN: - self.state = 2063 + self.state = 2071 self.notMatchedClause() - self.state = 2068 + self.state = 2076 self._errHandler.sync(self) _la = self._input.LA(1) @@ -14608,141 +14675,141 @@ def accept(self, visitor:ParseTreeVisitor): def queryOrganization(self): localctx = fugue_sqlParser.QueryOrganizationContext(self, self._ctx, self.state) - self.enterRule(localctx, 196, self.RULE_queryOrganization) + self.enterRule(localctx, 198, self.RULE_queryOrganization) try: self.enterOuterAlt(localctx, 1) - self.state = 2081 + self.state = 2089 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,242,self._ctx) + la_ = self._interp.adaptivePredict(self._input,243,self._ctx) if la_ == 1: - self.state = 2071 + self.state = 2079 self.match(fugue_sqlParser.ORDER) - self.state = 2072 + self.state = 2080 self.match(fugue_sqlParser.BY) - self.state = 2073 + self.state = 2081 localctx._sortItem = self.sortItem() localctx.order.append(localctx._sortItem) - self.state = 2078 + self.state = 2086 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,241,self._ctx) + _alt = self._interp.adaptivePredict(self._input,242,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2074 + self.state = 2082 self.match(fugue_sqlParser.T__0) - self.state = 2075 + self.state = 2083 localctx._sortItem = self.sortItem() localctx.order.append(localctx._sortItem) - self.state = 2080 + self.state = 2088 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,241,self._ctx) + _alt = self._interp.adaptivePredict(self._input,242,self._ctx) - self.state = 2093 + self.state = 2101 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,244,self._ctx) + la_ = self._interp.adaptivePredict(self._input,245,self._ctx) if la_ == 1: - self.state = 2083 + self.state = 2091 self.match(fugue_sqlParser.CLUSTER) - self.state = 2084 + self.state = 2092 self.match(fugue_sqlParser.BY) - self.state = 2085 + self.state = 2093 localctx._expression = self.expression() localctx.clusterBy.append(localctx._expression) - self.state = 2090 + self.state = 2098 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,243,self._ctx) + _alt = self._interp.adaptivePredict(self._input,244,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2086 + self.state = 2094 self.match(fugue_sqlParser.T__0) - self.state = 2087 + self.state = 2095 localctx._expression = self.expression() localctx.clusterBy.append(localctx._expression) - self.state = 2092 + self.state = 2100 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,243,self._ctx) + _alt = self._interp.adaptivePredict(self._input,244,self._ctx) - self.state = 2105 + self.state = 2113 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,246,self._ctx) + la_ = self._interp.adaptivePredict(self._input,247,self._ctx) if la_ == 1: - self.state = 2095 + self.state = 2103 self.match(fugue_sqlParser.DISTRIBUTE) - self.state = 2096 + self.state = 2104 self.match(fugue_sqlParser.BY) - self.state = 2097 + self.state = 2105 localctx._expression = self.expression() localctx.distributeBy.append(localctx._expression) - self.state = 2102 + self.state = 2110 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,245,self._ctx) + _alt = self._interp.adaptivePredict(self._input,246,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2098 + self.state = 2106 self.match(fugue_sqlParser.T__0) - self.state = 2099 + self.state = 2107 localctx._expression = self.expression() localctx.distributeBy.append(localctx._expression) - self.state = 2104 + self.state = 2112 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,245,self._ctx) + _alt = self._interp.adaptivePredict(self._input,246,self._ctx) - self.state = 2117 + self.state = 2125 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,248,self._ctx) + la_ = self._interp.adaptivePredict(self._input,249,self._ctx) if la_ == 1: - self.state = 2107 + self.state = 2115 self.match(fugue_sqlParser.SORT) - self.state = 2108 + self.state = 2116 self.match(fugue_sqlParser.BY) - self.state = 2109 + self.state = 2117 localctx._sortItem = self.sortItem() localctx.sort.append(localctx._sortItem) - self.state = 2114 + self.state = 2122 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,247,self._ctx) + _alt = self._interp.adaptivePredict(self._input,248,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2110 + self.state = 2118 self.match(fugue_sqlParser.T__0) - self.state = 2111 + self.state = 2119 localctx._sortItem = self.sortItem() localctx.sort.append(localctx._sortItem) - self.state = 2116 + self.state = 2124 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,247,self._ctx) + _alt = self._interp.adaptivePredict(self._input,248,self._ctx) - self.state = 2120 + self.state = 2128 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,249,self._ctx) + la_ = self._interp.adaptivePredict(self._input,250,self._ctx) if la_ == 1: - self.state = 2119 + self.state = 2127 self.windowClause() - self.state = 2127 + self.state = 2135 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,251,self._ctx) + la_ = self._interp.adaptivePredict(self._input,252,self._ctx) if la_ == 1: - self.state = 2122 + self.state = 2130 self.match(fugue_sqlParser.LIMIT) - self.state = 2125 + self.state = 2133 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,250,self._ctx) + la_ = self._interp.adaptivePredict(self._input,251,self._ctx) if la_ == 1: - self.state = 2123 + self.state = 2131 self.match(fugue_sqlParser.ALL) pass elif la_ == 2: - self.state = 2124 + self.state = 2132 localctx.limit = self.expression() pass @@ -14787,12 +14854,12 @@ def accept(self, visitor:ParseTreeVisitor): def multiInsertQueryBody(self): localctx = fugue_sqlParser.MultiInsertQueryBodyContext(self, self._ctx, self.state) - self.enterRule(localctx, 198, self.RULE_multiInsertQueryBody) + self.enterRule(localctx, 200, self.RULE_multiInsertQueryBody) try: self.enterOuterAlt(localctx, 1) - self.state = 2129 + self.state = 2137 self.insertInto() - self.state = 2130 + self.state = 2138 self.fromStatementBody() except RecognitionException as re: localctx.exception = re @@ -14875,8 +14942,8 @@ def queryTerm(self, _p:int=0): _parentState = self.state localctx = fugue_sqlParser.QueryTermContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 200 - self.enterRecursionRule(localctx, 200, self.RULE_queryTerm, _p) + _startState = 202 + self.enterRecursionRule(localctx, 202, self.RULE_queryTerm, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) @@ -14884,33 +14951,33 @@ def queryTerm(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 2133 + self.state = 2141 self.queryPrimary() self._ctx.stop = self._input.LT(-1) - self.state = 2158 + self.state = 2166 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,256,self._ctx) + _alt = self._interp.adaptivePredict(self._input,257,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 = 2156 + self.state = 2164 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,255,self._ctx) + la_ = self._interp.adaptivePredict(self._input,256,self._ctx) if la_ == 1: localctx = fugue_sqlParser.SetOperationContext(self, fugue_sqlParser.QueryTermContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_queryTerm) - self.state = 2135 + self.state = 2143 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 2136 + self.state = 2144 if not fugue_sqlParser.legacy_setops_precedence_enbled: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "fugue_sqlParser.legacy_setops_precedence_enbled") - self.state = 2137 + self.state = 2145 localctx.operator = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.EXCEPT or _la==fugue_sqlParser.INTERSECT or _la==fugue_sqlParser.SETMINUS or _la==fugue_sqlParser.UNION): @@ -14918,15 +14985,15 @@ def queryTerm(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 2139 + self.state = 2147 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ALL or _la==fugue_sqlParser.DISTINCT: - self.state = 2138 + self.state = 2146 self.setQuantifier() - self.state = 2141 + self.state = 2149 localctx.right = self.queryTerm(4) pass @@ -14934,25 +15001,25 @@ def queryTerm(self, _p:int=0): localctx = fugue_sqlParser.SetOperationContext(self, fugue_sqlParser.QueryTermContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_queryTerm) - self.state = 2142 + self.state = 2150 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 2143 + self.state = 2151 if not not fugue_sqlParser.legacy_setops_precedence_enbled: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "not fugue_sqlParser.legacy_setops_precedence_enbled") - self.state = 2144 + self.state = 2152 localctx.operator = self.match(fugue_sqlParser.INTERSECT) - self.state = 2146 + self.state = 2154 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ALL or _la==fugue_sqlParser.DISTINCT: - self.state = 2145 + self.state = 2153 self.setQuantifier() - self.state = 2148 + self.state = 2156 localctx.right = self.queryTerm(3) pass @@ -14960,15 +15027,15 @@ def queryTerm(self, _p:int=0): localctx = fugue_sqlParser.SetOperationContext(self, fugue_sqlParser.QueryTermContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_queryTerm) - self.state = 2149 + self.state = 2157 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 2150 + self.state = 2158 if not not fugue_sqlParser.legacy_setops_precedence_enbled: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "not fugue_sqlParser.legacy_setops_precedence_enbled") - self.state = 2151 + self.state = 2159 localctx.operator = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.EXCEPT or _la==fugue_sqlParser.SETMINUS or _la==fugue_sqlParser.UNION): @@ -14976,22 +15043,22 @@ def queryTerm(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 2153 + self.state = 2161 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ALL or _la==fugue_sqlParser.DISTINCT: - self.state = 2152 + self.state = 2160 self.setQuantifier() - self.state = 2155 + self.state = 2163 localctx.right = self.queryTerm(2) pass - self.state = 2160 + self.state = 2168 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,256,self._ctx) + _alt = self._interp.adaptivePredict(self._input,257,self._ctx) except RecognitionException as re: localctx.exception = re @@ -15092,35 +15159,35 @@ def accept(self, visitor:ParseTreeVisitor): def queryPrimary(self): localctx = fugue_sqlParser.QueryPrimaryContext(self, self._ctx, self.state) - self.enterRule(localctx, 202, self.RULE_queryPrimary) + self.enterRule(localctx, 204, self.RULE_queryPrimary) try: - self.state = 2166 + self.state = 2174 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.MAP, fugue_sqlParser.REDUCE, fugue_sqlParser.SELECT]: localctx = fugue_sqlParser.QueryPrimaryDefaultContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 2161 + self.state = 2169 self.querySpecification() pass elif token in [fugue_sqlParser.FROM]: localctx = fugue_sqlParser.FromStmtContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 2162 + self.state = 2170 self.fromStatement() pass elif token in [fugue_sqlParser.TABLE]: localctx = fugue_sqlParser.TableContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 2163 + self.state = 2171 self.match(fugue_sqlParser.TABLE) - self.state = 2164 + self.state = 2172 self.multipartIdentifier() pass elif token in [fugue_sqlParser.VALUES]: localctx = fugue_sqlParser.InlineTableDefault1Context(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 2165 + self.state = 2173 self.inlineTable() pass else: @@ -15177,17 +15244,17 @@ def accept(self, visitor:ParseTreeVisitor): def sortItem(self): localctx = fugue_sqlParser.SortItemContext(self, self._ctx, self.state) - self.enterRule(localctx, 204, self.RULE_sortItem) + self.enterRule(localctx, 206, self.RULE_sortItem) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2168 + self.state = 2176 self.expression() - self.state = 2170 + self.state = 2178 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,258,self._ctx) + la_ = self._interp.adaptivePredict(self._input,259,self._ctx) if la_ == 1: - self.state = 2169 + self.state = 2177 localctx.ordering = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.ASC or _la==fugue_sqlParser.DESC): @@ -15197,13 +15264,13 @@ def sortItem(self): self.consume() - self.state = 2174 + self.state = 2182 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,259,self._ctx) + la_ = self._interp.adaptivePredict(self._input,260,self._ctx) if la_ == 1: - self.state = 2172 + self.state = 2180 self.match(fugue_sqlParser.NULLS) - self.state = 2173 + self.state = 2181 localctx.nullOrder = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.FIRST or _la==fugue_sqlParser.LAST): @@ -15254,24 +15321,24 @@ def accept(self, visitor:ParseTreeVisitor): def fromStatement(self): localctx = fugue_sqlParser.FromStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 206, self.RULE_fromStatement) + self.enterRule(localctx, 208, self.RULE_fromStatement) try: self.enterOuterAlt(localctx, 1) - self.state = 2176 + self.state = 2184 self.fromClause() - self.state = 2178 + self.state = 2186 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 2177 + self.state = 2185 self.fromStatementBody() else: raise NoViableAltException(self) - self.state = 2180 + self.state = 2188 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,260,self._ctx) + _alt = self._interp.adaptivePredict(self._input,261,self._ctx) except RecognitionException as re: localctx.exception = re @@ -15338,75 +15405,75 @@ def accept(self, visitor:ParseTreeVisitor): def fromStatementBody(self): localctx = fugue_sqlParser.FromStatementBodyContext(self, self._ctx, self.state) - self.enterRule(localctx, 208, self.RULE_fromStatementBody) + self.enterRule(localctx, 210, self.RULE_fromStatementBody) try: - self.state = 2209 + self.state = 2217 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,267,self._ctx) + la_ = self._interp.adaptivePredict(self._input,268,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2182 + self.state = 2190 self.transformClause() - self.state = 2184 + self.state = 2192 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,261,self._ctx) + la_ = self._interp.adaptivePredict(self._input,262,self._ctx) if la_ == 1: - self.state = 2183 + self.state = 2191 self.whereClause() - self.state = 2186 + self.state = 2194 self.queryOrganization() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2188 + self.state = 2196 self.selectClause() - self.state = 2192 + self.state = 2200 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,262,self._ctx) + _alt = self._interp.adaptivePredict(self._input,263,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2189 + self.state = 2197 self.lateralView() - self.state = 2194 + self.state = 2202 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,262,self._ctx) + _alt = self._interp.adaptivePredict(self._input,263,self._ctx) - self.state = 2196 + self.state = 2204 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,263,self._ctx) + la_ = self._interp.adaptivePredict(self._input,264,self._ctx) if la_ == 1: - self.state = 2195 + self.state = 2203 self.whereClause() - self.state = 2199 + self.state = 2207 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,264,self._ctx) + la_ = self._interp.adaptivePredict(self._input,265,self._ctx) if la_ == 1: - self.state = 2198 + self.state = 2206 self.aggregationClause() - self.state = 2202 + self.state = 2210 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,265,self._ctx) + la_ = self._interp.adaptivePredict(self._input,266,self._ctx) if la_ == 1: - self.state = 2201 + self.state = 2209 self.havingClause() - self.state = 2205 + self.state = 2213 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,266,self._ctx) + la_ = self._interp.adaptivePredict(self._input,267,self._ctx) if la_ == 1: - self.state = 2204 + self.state = 2212 self.windowClause() - self.state = 2207 + self.state = 2215 self.queryOrganization() pass @@ -15501,23 +15568,23 @@ def accept(self, visitor:ParseTreeVisitor): def querySpecification(self): localctx = fugue_sqlParser.QuerySpecificationContext(self, self._ctx, self.state) - self.enterRule(localctx, 210, self.RULE_querySpecification) + self.enterRule(localctx, 212, self.RULE_querySpecification) try: - self.state = 2236 + self.state = 2244 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,274,self._ctx) + la_ = self._interp.adaptivePredict(self._input,275,self._ctx) if la_ == 1: localctx = fugue_sqlParser.TransformQuerySpecificationContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 2211 + self.state = 2219 self.transformClause() - self.state = 2212 + self.state = 2220 self.optionalFromClause() - self.state = 2214 + self.state = 2222 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,268,self._ctx) + la_ = self._interp.adaptivePredict(self._input,269,self._ctx) if la_ == 1: - self.state = 2213 + self.state = 2221 self.whereClause() @@ -15526,50 +15593,50 @@ def querySpecification(self): elif la_ == 2: localctx = fugue_sqlParser.RegularQuerySpecificationContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 2216 + self.state = 2224 self.selectClause() - self.state = 2217 + self.state = 2225 self.optionalFromClause() - self.state = 2221 + self.state = 2229 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,269,self._ctx) + _alt = self._interp.adaptivePredict(self._input,270,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2218 + self.state = 2226 self.lateralView() - self.state = 2223 + self.state = 2231 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,269,self._ctx) + _alt = self._interp.adaptivePredict(self._input,270,self._ctx) - self.state = 2225 + self.state = 2233 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,270,self._ctx) + la_ = self._interp.adaptivePredict(self._input,271,self._ctx) if la_ == 1: - self.state = 2224 + self.state = 2232 self.whereClause() - self.state = 2228 + self.state = 2236 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,271,self._ctx) + la_ = self._interp.adaptivePredict(self._input,272,self._ctx) if la_ == 1: - self.state = 2227 + self.state = 2235 self.aggregationClause() - self.state = 2231 + self.state = 2239 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,272,self._ctx) + la_ = self._interp.adaptivePredict(self._input,273,self._ctx) if la_ == 1: - self.state = 2230 + self.state = 2238 self.havingClause() - self.state = 2234 + self.state = 2242 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,273,self._ctx) + la_ = self._interp.adaptivePredict(self._input,274,self._ctx) if la_ == 1: - self.state = 2233 + self.state = 2241 self.windowClause() @@ -15610,14 +15677,14 @@ def accept(self, visitor:ParseTreeVisitor): def optionalFromClause(self): localctx = fugue_sqlParser.OptionalFromClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 212, self.RULE_optionalFromClause) + self.enterRule(localctx, 214, self.RULE_optionalFromClause) try: self.enterOuterAlt(localctx, 1) - self.state = 2239 + self.state = 2247 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,275,self._ctx) + la_ = self._interp.adaptivePredict(self._input,276,self._ctx) if la_ == 1: - self.state = 2238 + self.state = 2246 self.fromClause() @@ -15706,120 +15773,120 @@ def accept(self, visitor:ParseTreeVisitor): def transformClause(self): localctx = fugue_sqlParser.TransformClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 214, self.RULE_transformClause) + self.enterRule(localctx, 216, self.RULE_transformClause) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2251 + self.state = 2259 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.SELECT]: - self.state = 2241 + self.state = 2249 self.match(fugue_sqlParser.SELECT) - self.state = 2242 + self.state = 2250 localctx.kind = self.match(fugue_sqlParser.TRANSFORM) - self.state = 2243 + self.state = 2251 self.match(fugue_sqlParser.T__2) - self.state = 2244 + self.state = 2252 self.namedExpressionSeq() - self.state = 2245 + self.state = 2253 self.match(fugue_sqlParser.T__3) pass elif token in [fugue_sqlParser.MAP]: - self.state = 2247 + self.state = 2255 localctx.kind = self.match(fugue_sqlParser.MAP) - self.state = 2248 + self.state = 2256 self.namedExpressionSeq() pass elif token in [fugue_sqlParser.REDUCE]: - self.state = 2249 + self.state = 2257 localctx.kind = self.match(fugue_sqlParser.REDUCE) - self.state = 2250 + self.state = 2258 self.namedExpressionSeq() pass else: raise NoViableAltException(self) - self.state = 2254 + self.state = 2262 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ROW: - self.state = 2253 + self.state = 2261 localctx.inRowFormat = self.rowFormat() - self.state = 2258 + self.state = 2266 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.RECORDWRITER: - self.state = 2256 + self.state = 2264 self.match(fugue_sqlParser.RECORDWRITER) - self.state = 2257 + self.state = 2265 localctx.recordWriter = self.match(fugue_sqlParser.STRING) - self.state = 2260 + self.state = 2268 self.match(fugue_sqlParser.USING) - self.state = 2261 + self.state = 2269 localctx.script = self.match(fugue_sqlParser.STRING) - self.state = 2274 + self.state = 2282 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,281,self._ctx) + la_ = self._interp.adaptivePredict(self._input,282,self._ctx) if la_ == 1: - self.state = 2262 + self.state = 2270 self.match(fugue_sqlParser.AS) - self.state = 2272 + self.state = 2280 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,280,self._ctx) + la_ = self._interp.adaptivePredict(self._input,281,self._ctx) if la_ == 1: - self.state = 2263 + self.state = 2271 self.identifierSeq() pass elif la_ == 2: - self.state = 2264 + self.state = 2272 self.colTypeList() pass elif la_ == 3: - self.state = 2265 + self.state = 2273 self.match(fugue_sqlParser.T__2) - self.state = 2268 + self.state = 2276 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,279,self._ctx) + la_ = self._interp.adaptivePredict(self._input,280,self._ctx) if la_ == 1: - self.state = 2266 + self.state = 2274 self.identifierSeq() pass elif la_ == 2: - self.state = 2267 + self.state = 2275 self.colTypeList() pass - self.state = 2270 + self.state = 2278 self.match(fugue_sqlParser.T__3) pass - self.state = 2277 + self.state = 2285 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,282,self._ctx) + la_ = self._interp.adaptivePredict(self._input,283,self._ctx) if la_ == 1: - self.state = 2276 + self.state = 2284 localctx.outRowFormat = self.rowFormat() - self.state = 2281 + self.state = 2289 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,283,self._ctx) + la_ = self._interp.adaptivePredict(self._input,284,self._ctx) if la_ == 1: - self.state = 2279 + self.state = 2287 self.match(fugue_sqlParser.RECORDREADER) - self.state = 2280 + self.state = 2288 localctx.recordReader = self.match(fugue_sqlParser.STRING) @@ -15873,32 +15940,32 @@ def accept(self, visitor:ParseTreeVisitor): def selectClause(self): localctx = fugue_sqlParser.SelectClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 216, self.RULE_selectClause) + self.enterRule(localctx, 218, self.RULE_selectClause) try: self.enterOuterAlt(localctx, 1) - self.state = 2283 + self.state = 2291 self.match(fugue_sqlParser.SELECT) - self.state = 2287 + self.state = 2295 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,284,self._ctx) + _alt = self._interp.adaptivePredict(self._input,285,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2284 + self.state = 2292 localctx._hint = self.hint() localctx.hints.append(localctx._hint) - self.state = 2289 + self.state = 2297 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,284,self._ctx) + _alt = self._interp.adaptivePredict(self._input,285,self._ctx) - self.state = 2291 + self.state = 2299 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,285,self._ctx) + la_ = self._interp.adaptivePredict(self._input,286,self._ctx) if la_ == 1: - self.state = 2290 + self.state = 2298 self.setQuantifier() - self.state = 2293 + self.state = 2301 self.namedExpressionSeq() except RecognitionException as re: localctx.exception = re @@ -15937,12 +16004,12 @@ def accept(self, visitor:ParseTreeVisitor): def setClause(self): localctx = fugue_sqlParser.SetClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 218, self.RULE_setClause) + self.enterRule(localctx, 220, self.RULE_setClause) try: self.enterOuterAlt(localctx, 1) - self.state = 2295 + self.state = 2303 self.match(fugue_sqlParser.SET) - self.state = 2296 + self.state = 2304 self.assignmentList() except RecognitionException as re: localctx.exception = re @@ -15995,27 +16062,27 @@ def accept(self, visitor:ParseTreeVisitor): def matchedClause(self): localctx = fugue_sqlParser.MatchedClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 220, self.RULE_matchedClause) + self.enterRule(localctx, 222, self.RULE_matchedClause) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2298 + self.state = 2306 self.match(fugue_sqlParser.WHEN) - self.state = 2299 + self.state = 2307 self.match(fugue_sqlParser.MATCHED) - self.state = 2302 + self.state = 2310 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AND: - self.state = 2300 + self.state = 2308 self.match(fugue_sqlParser.AND) - self.state = 2301 + self.state = 2309 localctx.matchedCond = self.booleanExpression(0) - self.state = 2304 + self.state = 2312 self.match(fugue_sqlParser.THEN) - self.state = 2305 + self.state = 2313 self.matchedAction() except RecognitionException as re: localctx.exception = re @@ -16071,29 +16138,29 @@ def accept(self, visitor:ParseTreeVisitor): def notMatchedClause(self): localctx = fugue_sqlParser.NotMatchedClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 222, self.RULE_notMatchedClause) + self.enterRule(localctx, 224, self.RULE_notMatchedClause) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2307 + self.state = 2315 self.match(fugue_sqlParser.WHEN) - self.state = 2308 + self.state = 2316 self.match(fugue_sqlParser.NOT) - self.state = 2309 + self.state = 2317 self.match(fugue_sqlParser.MATCHED) - self.state = 2312 + self.state = 2320 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AND: - self.state = 2310 + self.state = 2318 self.match(fugue_sqlParser.AND) - self.state = 2311 + self.state = 2319 localctx.notMatchedCond = self.booleanExpression(0) - self.state = 2314 + self.state = 2322 self.match(fugue_sqlParser.THEN) - self.state = 2315 + self.state = 2323 self.notMatchedAction() except RecognitionException as re: localctx.exception = re @@ -16141,34 +16208,34 @@ def accept(self, visitor:ParseTreeVisitor): def matchedAction(self): localctx = fugue_sqlParser.MatchedActionContext(self, self._ctx, self.state) - self.enterRule(localctx, 224, self.RULE_matchedAction) + self.enterRule(localctx, 226, self.RULE_matchedAction) try: - self.state = 2324 + self.state = 2332 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,288,self._ctx) + la_ = self._interp.adaptivePredict(self._input,289,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2317 + self.state = 2325 self.match(fugue_sqlParser.DELETE) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2318 + self.state = 2326 self.match(fugue_sqlParser.UPDATE) - self.state = 2319 + self.state = 2327 self.match(fugue_sqlParser.SET) - self.state = 2320 + self.state = 2328 self.match(fugue_sqlParser.ASTERISK) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 2321 + self.state = 2329 self.match(fugue_sqlParser.UPDATE) - self.state = 2322 + self.state = 2330 self.match(fugue_sqlParser.SET) - self.state = 2323 + self.state = 2331 self.assignmentList() pass @@ -16224,49 +16291,49 @@ def accept(self, visitor:ParseTreeVisitor): def notMatchedAction(self): localctx = fugue_sqlParser.NotMatchedActionContext(self, self._ctx, self.state) - self.enterRule(localctx, 226, self.RULE_notMatchedAction) + self.enterRule(localctx, 228, self.RULE_notMatchedAction) self._la = 0 # Token type try: - self.state = 2344 + self.state = 2352 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,290,self._ctx) + la_ = self._interp.adaptivePredict(self._input,291,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2326 + self.state = 2334 self.match(fugue_sqlParser.INSERT) - self.state = 2327 + self.state = 2335 self.match(fugue_sqlParser.ASTERISK) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2328 + self.state = 2336 self.match(fugue_sqlParser.INSERT) - self.state = 2329 + self.state = 2337 self.match(fugue_sqlParser.T__2) - self.state = 2330 + self.state = 2338 localctx.columns = self.multipartIdentifierList() - self.state = 2331 + self.state = 2339 self.match(fugue_sqlParser.T__3) - self.state = 2332 + self.state = 2340 self.match(fugue_sqlParser.VALUES) - self.state = 2333 + self.state = 2341 self.match(fugue_sqlParser.T__2) - self.state = 2334 + self.state = 2342 self.expression() - self.state = 2339 + self.state = 2347 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2335 + self.state = 2343 self.match(fugue_sqlParser.T__0) - self.state = 2336 + self.state = 2344 self.expression() - self.state = 2341 + self.state = 2349 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2342 + self.state = 2350 self.match(fugue_sqlParser.T__3) pass @@ -16308,21 +16375,21 @@ def accept(self, visitor:ParseTreeVisitor): def assignmentList(self): localctx = fugue_sqlParser.AssignmentListContext(self, self._ctx, self.state) - self.enterRule(localctx, 228, self.RULE_assignmentList) + self.enterRule(localctx, 230, self.RULE_assignmentList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2346 + self.state = 2354 self.assignment() - self.state = 2351 + self.state = 2359 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2347 + self.state = 2355 self.match(fugue_sqlParser.T__0) - self.state = 2348 + self.state = 2356 self.assignment() - self.state = 2353 + self.state = 2361 self._errHandler.sync(self) _la = self._input.LA(1) @@ -16369,14 +16436,14 @@ def accept(self, visitor:ParseTreeVisitor): def assignment(self): localctx = fugue_sqlParser.AssignmentContext(self, self._ctx, self.state) - self.enterRule(localctx, 230, self.RULE_assignment) + self.enterRule(localctx, 232, self.RULE_assignment) try: self.enterOuterAlt(localctx, 1) - self.state = 2354 + self.state = 2362 localctx.key = self.multipartIdentifier() - self.state = 2355 + self.state = 2363 self.match(fugue_sqlParser.EQUAL) - self.state = 2356 + self.state = 2364 localctx.value = self.expression() except RecognitionException as re: localctx.exception = re @@ -16415,12 +16482,12 @@ def accept(self, visitor:ParseTreeVisitor): def whereClause(self): localctx = fugue_sqlParser.WhereClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 232, self.RULE_whereClause) + self.enterRule(localctx, 234, self.RULE_whereClause) try: self.enterOuterAlt(localctx, 1) - self.state = 2358 + self.state = 2366 self.match(fugue_sqlParser.WHERE) - self.state = 2359 + self.state = 2367 self.booleanExpression(0) except RecognitionException as re: localctx.exception = re @@ -16459,12 +16526,12 @@ def accept(self, visitor:ParseTreeVisitor): def havingClause(self): localctx = fugue_sqlParser.HavingClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 234, self.RULE_havingClause) + self.enterRule(localctx, 236, self.RULE_havingClause) try: self.enterOuterAlt(localctx, 1) - self.state = 2361 + self.state = 2369 self.match(fugue_sqlParser.HAVING) - self.state = 2362 + self.state = 2370 self.booleanExpression(0) except RecognitionException as re: localctx.exception = re @@ -16505,35 +16572,35 @@ def accept(self, visitor:ParseTreeVisitor): def hint(self): localctx = fugue_sqlParser.HintContext(self, self._ctx, self.state) - self.enterRule(localctx, 236, self.RULE_hint) + self.enterRule(localctx, 238, self.RULE_hint) try: self.enterOuterAlt(localctx, 1) - self.state = 2364 + self.state = 2372 self.match(fugue_sqlParser.T__13) - self.state = 2365 + self.state = 2373 localctx._hintStatement = self.hintStatement() localctx.hintStatements.append(localctx._hintStatement) - self.state = 2372 + self.state = 2380 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,293,self._ctx) + _alt = self._interp.adaptivePredict(self._input,294,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2367 + self.state = 2375 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,292,self._ctx) + la_ = self._interp.adaptivePredict(self._input,293,self._ctx) if la_ == 1: - self.state = 2366 + self.state = 2374 self.match(fugue_sqlParser.T__0) - self.state = 2369 + self.state = 2377 localctx._hintStatement = self.hintStatement() localctx.hintStatements.append(localctx._hintStatement) - self.state = 2374 + self.state = 2382 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,293,self._ctx) + _alt = self._interp.adaptivePredict(self._input,294,self._ctx) - self.state = 2375 + self.state = 2383 self.match(fugue_sqlParser.T__14) except RecognitionException as re: localctx.exception = re @@ -16579,41 +16646,41 @@ def accept(self, visitor:ParseTreeVisitor): def hintStatement(self): localctx = fugue_sqlParser.HintStatementContext(self, self._ctx, self.state) - self.enterRule(localctx, 238, self.RULE_hintStatement) + self.enterRule(localctx, 240, self.RULE_hintStatement) self._la = 0 # Token type try: - self.state = 2390 + self.state = 2398 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,295,self._ctx) + la_ = self._interp.adaptivePredict(self._input,296,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2377 + self.state = 2385 localctx.hintName = self.identifier() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2378 + self.state = 2386 localctx.hintName = self.identifier() - self.state = 2379 + self.state = 2387 self.match(fugue_sqlParser.T__2) - self.state = 2380 + self.state = 2388 localctx._primaryExpression = self.primaryExpression(0) localctx.parameters.append(localctx._primaryExpression) - self.state = 2385 + self.state = 2393 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2381 + self.state = 2389 self.match(fugue_sqlParser.T__0) - self.state = 2382 + self.state = 2390 localctx._primaryExpression = self.primaryExpression(0) localctx.parameters.append(localctx._primaryExpression) - self.state = 2387 + self.state = 2395 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2388 + self.state = 2396 self.match(fugue_sqlParser.T__3) pass @@ -16669,42 +16736,42 @@ def accept(self, visitor:ParseTreeVisitor): def fromClause(self): localctx = fugue_sqlParser.FromClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 240, self.RULE_fromClause) + self.enterRule(localctx, 242, self.RULE_fromClause) try: self.enterOuterAlt(localctx, 1) - self.state = 2392 + self.state = 2400 self.match(fugue_sqlParser.FROM) - self.state = 2393 + self.state = 2401 self.relation() - self.state = 2398 + self.state = 2406 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,296,self._ctx) + _alt = self._interp.adaptivePredict(self._input,297,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2394 + self.state = 2402 self.match(fugue_sqlParser.T__0) - self.state = 2395 + self.state = 2403 self.relation() - self.state = 2400 + self.state = 2408 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,296,self._ctx) + _alt = self._interp.adaptivePredict(self._input,297,self._ctx) - self.state = 2404 + self.state = 2412 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,297,self._ctx) + _alt = self._interp.adaptivePredict(self._input,298,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2401 + self.state = 2409 self.lateralView() - self.state = 2406 + self.state = 2414 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,297,self._ctx) + _alt = self._interp.adaptivePredict(self._input,298,self._ctx) - self.state = 2408 + self.state = 2416 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,298,self._ctx) + la_ = self._interp.adaptivePredict(self._input,299,self._ctx) if la_ == 1: - self.state = 2407 + self.state = 2415 self.pivotClause() @@ -16776,72 +16843,72 @@ def accept(self, visitor:ParseTreeVisitor): def aggregationClause(self): localctx = fugue_sqlParser.AggregationClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 242, self.RULE_aggregationClause) + self.enterRule(localctx, 244, self.RULE_aggregationClause) self._la = 0 # Token type try: - self.state = 2454 + self.state = 2462 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,303,self._ctx) + la_ = self._interp.adaptivePredict(self._input,304,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2410 + self.state = 2418 self.match(fugue_sqlParser.GROUP) - self.state = 2411 + self.state = 2419 self.match(fugue_sqlParser.BY) - self.state = 2412 + self.state = 2420 localctx._expression = self.expression() localctx.groupingExpressions.append(localctx._expression) - self.state = 2417 + self.state = 2425 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,299,self._ctx) + _alt = self._interp.adaptivePredict(self._input,300,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2413 + self.state = 2421 self.match(fugue_sqlParser.T__0) - self.state = 2414 + self.state = 2422 localctx._expression = self.expression() localctx.groupingExpressions.append(localctx._expression) - self.state = 2419 + self.state = 2427 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,299,self._ctx) + _alt = self._interp.adaptivePredict(self._input,300,self._ctx) - self.state = 2437 + self.state = 2445 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,301,self._ctx) + la_ = self._interp.adaptivePredict(self._input,302,self._ctx) if la_ == 1: - self.state = 2420 + self.state = 2428 self.match(fugue_sqlParser.WITH) - self.state = 2421 + self.state = 2429 localctx.kind = self.match(fugue_sqlParser.ROLLUP) elif la_ == 2: - self.state = 2422 + self.state = 2430 self.match(fugue_sqlParser.WITH) - self.state = 2423 + self.state = 2431 localctx.kind = self.match(fugue_sqlParser.CUBE) elif la_ == 3: - self.state = 2424 + self.state = 2432 localctx.kind = self.match(fugue_sqlParser.GROUPING) - self.state = 2425 + self.state = 2433 self.match(fugue_sqlParser.SETS) - self.state = 2426 + self.state = 2434 self.match(fugue_sqlParser.T__2) - self.state = 2427 + self.state = 2435 self.groupingSet() - self.state = 2432 + self.state = 2440 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2428 + self.state = 2436 self.match(fugue_sqlParser.T__0) - self.state = 2429 + self.state = 2437 self.groupingSet() - self.state = 2434 + self.state = 2442 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2435 + self.state = 2443 self.match(fugue_sqlParser.T__3) @@ -16849,31 +16916,31 @@ def aggregationClause(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2439 + self.state = 2447 self.match(fugue_sqlParser.GROUP) - self.state = 2440 + self.state = 2448 self.match(fugue_sqlParser.BY) - self.state = 2441 + self.state = 2449 localctx.kind = self.match(fugue_sqlParser.GROUPING) - self.state = 2442 + self.state = 2450 self.match(fugue_sqlParser.SETS) - self.state = 2443 + self.state = 2451 self.match(fugue_sqlParser.T__2) - self.state = 2444 + self.state = 2452 self.groupingSet() - self.state = 2449 + self.state = 2457 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2445 + self.state = 2453 self.match(fugue_sqlParser.T__0) - self.state = 2446 + self.state = 2454 self.groupingSet() - self.state = 2451 + self.state = 2459 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2452 + self.state = 2460 self.match(fugue_sqlParser.T__3) pass @@ -16915,43 +16982,43 @@ def accept(self, visitor:ParseTreeVisitor): def groupingSet(self): localctx = fugue_sqlParser.GroupingSetContext(self, self._ctx, self.state) - self.enterRule(localctx, 244, self.RULE_groupingSet) + self.enterRule(localctx, 246, self.RULE_groupingSet) self._la = 0 # Token type try: - self.state = 2469 + self.state = 2477 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,306,self._ctx) + la_ = self._interp.adaptivePredict(self._input,307,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2456 + self.state = 2464 self.match(fugue_sqlParser.T__2) - self.state = 2465 + self.state = 2473 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,305,self._ctx) + la_ = self._interp.adaptivePredict(self._input,306,self._ctx) if la_ == 1: - self.state = 2457 + self.state = 2465 self.expression() - self.state = 2462 + self.state = 2470 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2458 + self.state = 2466 self.match(fugue_sqlParser.T__0) - self.state = 2459 + self.state = 2467 self.expression() - self.state = 2464 + self.state = 2472 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2467 + self.state = 2475 self.match(fugue_sqlParser.T__3) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2468 + self.state = 2476 self.expression() pass @@ -17013,43 +17080,43 @@ def accept(self, visitor:ParseTreeVisitor): def pivotClause(self): localctx = fugue_sqlParser.PivotClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 246, self.RULE_pivotClause) + self.enterRule(localctx, 248, self.RULE_pivotClause) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2471 + self.state = 2479 self.match(fugue_sqlParser.PIVOT) - self.state = 2472 + self.state = 2480 self.match(fugue_sqlParser.T__2) - self.state = 2473 + self.state = 2481 localctx.aggregates = self.namedExpressionSeq() - self.state = 2474 + self.state = 2482 self.match(fugue_sqlParser.FOR) - self.state = 2475 + self.state = 2483 self.pivotColumn() - self.state = 2476 + self.state = 2484 self.match(fugue_sqlParser.IN) - self.state = 2477 + self.state = 2485 self.match(fugue_sqlParser.T__2) - self.state = 2478 + self.state = 2486 localctx._pivotValue = self.pivotValue() localctx.pivotValues.append(localctx._pivotValue) - self.state = 2483 + self.state = 2491 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2479 + self.state = 2487 self.match(fugue_sqlParser.T__0) - self.state = 2480 + self.state = 2488 localctx._pivotValue = self.pivotValue() localctx.pivotValues.append(localctx._pivotValue) - self.state = 2485 + self.state = 2493 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2486 + self.state = 2494 self.match(fugue_sqlParser.T__3) - self.state = 2487 + self.state = 2495 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -17090,40 +17157,40 @@ def accept(self, visitor:ParseTreeVisitor): def pivotColumn(self): localctx = fugue_sqlParser.PivotColumnContext(self, self._ctx, self.state) - self.enterRule(localctx, 248, self.RULE_pivotColumn) + self.enterRule(localctx, 250, self.RULE_pivotColumn) self._la = 0 # Token type try: - self.state = 2501 + self.state = 2509 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,309,self._ctx) + la_ = self._interp.adaptivePredict(self._input,310,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2489 + self.state = 2497 localctx._identifier = self.identifier() localctx.identifiers.append(localctx._identifier) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2490 + self.state = 2498 self.match(fugue_sqlParser.T__2) - self.state = 2491 + self.state = 2499 localctx._identifier = self.identifier() localctx.identifiers.append(localctx._identifier) - self.state = 2496 + self.state = 2504 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2492 + self.state = 2500 self.match(fugue_sqlParser.T__0) - self.state = 2493 + self.state = 2501 localctx._identifier = self.identifier() localctx.identifiers.append(localctx._identifier) - self.state = 2498 + self.state = 2506 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2499 + self.state = 2507 self.match(fugue_sqlParser.T__3) pass @@ -17169,24 +17236,24 @@ def accept(self, visitor:ParseTreeVisitor): def pivotValue(self): localctx = fugue_sqlParser.PivotValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 250, self.RULE_pivotValue) + self.enterRule(localctx, 252, self.RULE_pivotValue) try: self.enterOuterAlt(localctx, 1) - self.state = 2503 + self.state = 2511 self.expression() - self.state = 2508 + self.state = 2516 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,311,self._ctx) + la_ = self._interp.adaptivePredict(self._input,312,self._ctx) if la_ == 1: - self.state = 2505 + self.state = 2513 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,310,self._ctx) + la_ = self._interp.adaptivePredict(self._input,311,self._ctx) if la_ == 1: - self.state = 2504 + self.state = 2512 self.match(fugue_sqlParser.AS) - self.state = 2507 + self.state = 2515 self.identifier() @@ -17253,78 +17320,78 @@ def accept(self, visitor:ParseTreeVisitor): def lateralView(self): localctx = fugue_sqlParser.LateralViewContext(self, self._ctx, self.state) - self.enterRule(localctx, 252, self.RULE_lateralView) + self.enterRule(localctx, 254, self.RULE_lateralView) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2510 + self.state = 2518 self.match(fugue_sqlParser.LATERAL) - self.state = 2511 + self.state = 2519 self.match(fugue_sqlParser.VIEW) - self.state = 2513 + self.state = 2521 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,312,self._ctx) + la_ = self._interp.adaptivePredict(self._input,313,self._ctx) if la_ == 1: - self.state = 2512 + self.state = 2520 self.match(fugue_sqlParser.OUTER) - self.state = 2515 + self.state = 2523 self.qualifiedName() - self.state = 2516 + self.state = 2524 self.match(fugue_sqlParser.T__2) - self.state = 2525 + self.state = 2533 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,314,self._ctx) + la_ = self._interp.adaptivePredict(self._input,315,self._ctx) if la_ == 1: - self.state = 2517 + self.state = 2525 self.expression() - self.state = 2522 + self.state = 2530 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2518 + self.state = 2526 self.match(fugue_sqlParser.T__0) - self.state = 2519 + self.state = 2527 self.expression() - self.state = 2524 + self.state = 2532 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2527 + self.state = 2535 self.match(fugue_sqlParser.T__3) - self.state = 2528 + self.state = 2536 localctx.tblName = self.identifier() - self.state = 2540 + self.state = 2548 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,317,self._ctx) + la_ = self._interp.adaptivePredict(self._input,318,self._ctx) if la_ == 1: - self.state = 2530 + self.state = 2538 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,315,self._ctx) + la_ = self._interp.adaptivePredict(self._input,316,self._ctx) if la_ == 1: - self.state = 2529 + self.state = 2537 self.match(fugue_sqlParser.AS) - self.state = 2532 + self.state = 2540 localctx._identifier = self.identifier() localctx.colName.append(localctx._identifier) - self.state = 2537 + self.state = 2545 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,316,self._ctx) + _alt = self._interp.adaptivePredict(self._input,317,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2533 + self.state = 2541 self.match(fugue_sqlParser.T__0) - self.state = 2534 + self.state = 2542 localctx._identifier = self.identifier() localctx.colName.append(localctx._identifier) - self.state = 2539 + self.state = 2547 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,316,self._ctx) + _alt = self._interp.adaptivePredict(self._input,317,self._ctx) @@ -17364,11 +17431,11 @@ def accept(self, visitor:ParseTreeVisitor): def setQuantifier(self): localctx = fugue_sqlParser.SetQuantifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 254, self.RULE_setQuantifier) + self.enterRule(localctx, 256, self.RULE_setQuantifier) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2542 + self.state = 2550 _la = self._input.LA(1) if not(_la==fugue_sqlParser.ALL or _la==fugue_sqlParser.DISTINCT): self._errHandler.recoverInline(self) @@ -17416,21 +17483,21 @@ def accept(self, visitor:ParseTreeVisitor): def relation(self): localctx = fugue_sqlParser.RelationContext(self, self._ctx, self.state) - self.enterRule(localctx, 256, self.RULE_relation) + self.enterRule(localctx, 258, self.RULE_relation) try: self.enterOuterAlt(localctx, 1) - self.state = 2544 + self.state = 2552 self.relationPrimary() - self.state = 2548 + self.state = 2556 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,318,self._ctx) + _alt = self._interp.adaptivePredict(self._input,319,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2545 + self.state = 2553 self.joinRelation() - self.state = 2550 + self.state = 2558 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,318,self._ctx) + _alt = self._interp.adaptivePredict(self._input,319,self._ctx) except RecognitionException as re: localctx.exception = re @@ -17481,37 +17548,37 @@ def accept(self, visitor:ParseTreeVisitor): def joinRelation(self): localctx = fugue_sqlParser.JoinRelationContext(self, self._ctx, self.state) - self.enterRule(localctx, 258, self.RULE_joinRelation) + self.enterRule(localctx, 260, self.RULE_joinRelation) try: - self.state = 2562 + self.state = 2570 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.ANTI, fugue_sqlParser.CROSS, fugue_sqlParser.FULL, fugue_sqlParser.INNER, fugue_sqlParser.JOIN, fugue_sqlParser.LEFT, fugue_sqlParser.RIGHT, fugue_sqlParser.SEMI]: self.enterOuterAlt(localctx, 1) - self.state = 2551 + self.state = 2559 self.joinType() - self.state = 2552 + self.state = 2560 self.match(fugue_sqlParser.JOIN) - self.state = 2553 + self.state = 2561 localctx.right = self.relationPrimary() - self.state = 2555 + self.state = 2563 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,319,self._ctx) + la_ = self._interp.adaptivePredict(self._input,320,self._ctx) if la_ == 1: - self.state = 2554 + self.state = 2562 self.joinCriteria() pass elif token in [fugue_sqlParser.NATURAL]: self.enterOuterAlt(localctx, 2) - self.state = 2557 + self.state = 2565 self.match(fugue_sqlParser.NATURAL) - self.state = 2558 + self.state = 2566 self.joinType() - self.state = 2559 + self.state = 2567 self.match(fugue_sqlParser.JOIN) - self.state = 2560 + self.state = 2568 localctx.right = self.relationPrimary() pass else: @@ -17571,19 +17638,19 @@ def accept(self, visitor:ParseTreeVisitor): def joinType(self): localctx = fugue_sqlParser.JoinTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 260, self.RULE_joinType) + self.enterRule(localctx, 262, self.RULE_joinType) self._la = 0 # Token type try: - self.state = 2588 + self.state = 2596 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,327,self._ctx) + la_ = self._interp.adaptivePredict(self._input,328,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2565 + self.state = 2573 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.INNER: - self.state = 2564 + self.state = 2572 self.match(fugue_sqlParser.INNER) @@ -17591,19 +17658,19 @@ def joinType(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2567 + self.state = 2575 self.match(fugue_sqlParser.CROSS) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 2568 + self.state = 2576 self.match(fugue_sqlParser.LEFT) - self.state = 2570 + self.state = 2578 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OUTER: - self.state = 2569 + self.state = 2577 self.match(fugue_sqlParser.OUTER) @@ -17611,27 +17678,27 @@ def joinType(self): elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 2573 + self.state = 2581 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LEFT: - self.state = 2572 + self.state = 2580 self.match(fugue_sqlParser.LEFT) - self.state = 2575 + self.state = 2583 self.match(fugue_sqlParser.SEMI) pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 2576 + self.state = 2584 self.match(fugue_sqlParser.RIGHT) - self.state = 2578 + self.state = 2586 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OUTER: - self.state = 2577 + self.state = 2585 self.match(fugue_sqlParser.OUTER) @@ -17639,13 +17706,13 @@ def joinType(self): elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 2580 + self.state = 2588 self.match(fugue_sqlParser.FULL) - self.state = 2582 + self.state = 2590 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.OUTER: - self.state = 2581 + self.state = 2589 self.match(fugue_sqlParser.OUTER) @@ -17653,15 +17720,15 @@ def joinType(self): elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 2585 + self.state = 2593 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.LEFT: - self.state = 2584 + self.state = 2592 self.match(fugue_sqlParser.LEFT) - self.state = 2587 + self.state = 2595 self.match(fugue_sqlParser.ANTI) pass @@ -17710,23 +17777,23 @@ def accept(self, visitor:ParseTreeVisitor): def joinCriteria(self): localctx = fugue_sqlParser.JoinCriteriaContext(self, self._ctx, self.state) - self.enterRule(localctx, 262, self.RULE_joinCriteria) + self.enterRule(localctx, 264, self.RULE_joinCriteria) try: - self.state = 2594 + self.state = 2602 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.ON]: self.enterOuterAlt(localctx, 1) - self.state = 2590 + self.state = 2598 self.match(fugue_sqlParser.ON) - self.state = 2591 + self.state = 2599 self.booleanExpression(0) pass elif token in [fugue_sqlParser.USING]: self.enterOuterAlt(localctx, 2) - self.state = 2592 + self.state = 2600 self.match(fugue_sqlParser.USING) - self.state = 2593 + self.state = 2601 self.identifierList() pass else: @@ -17769,22 +17836,22 @@ def accept(self, visitor:ParseTreeVisitor): def sample(self): localctx = fugue_sqlParser.SampleContext(self, self._ctx, self.state) - self.enterRule(localctx, 264, self.RULE_sample) + self.enterRule(localctx, 266, self.RULE_sample) try: self.enterOuterAlt(localctx, 1) - self.state = 2596 + self.state = 2604 self.match(fugue_sqlParser.TABLESAMPLE) - self.state = 2597 + self.state = 2605 self.match(fugue_sqlParser.T__2) - self.state = 2599 + self.state = 2607 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,329,self._ctx) + la_ = self._interp.adaptivePredict(self._input,330,self._ctx) if la_ == 1: - self.state = 2598 + self.state = 2606 self.sampleMethod() - self.state = 2601 + self.state = 2609 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -17912,24 +17979,24 @@ def accept(self, visitor:ParseTreeVisitor): def sampleMethod(self): localctx = fugue_sqlParser.SampleMethodContext(self, self._ctx, self.state) - self.enterRule(localctx, 266, self.RULE_sampleMethod) + self.enterRule(localctx, 268, self.RULE_sampleMethod) self._la = 0 # Token type try: - self.state = 2627 + self.state = 2635 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,333,self._ctx) + la_ = self._interp.adaptivePredict(self._input,334,self._ctx) if la_ == 1: localctx = fugue_sqlParser.SampleByPercentileContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 2604 + self.state = 2612 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 2603 + self.state = 2611 localctx.negativeSign = self.match(fugue_sqlParser.MINUS) - self.state = 2606 + self.state = 2614 localctx.percentage = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.INTEGER_VALUE or _la==fugue_sqlParser.DECIMAL_VALUE): @@ -17937,52 +18004,52 @@ def sampleMethod(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 2607 + self.state = 2615 self.match(fugue_sqlParser.PERCENTLIT) pass elif la_ == 2: localctx = fugue_sqlParser.SampleByRowsContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 2608 + self.state = 2616 self.expression() - self.state = 2609 + self.state = 2617 self.match(fugue_sqlParser.ROWS) pass elif la_ == 3: localctx = fugue_sqlParser.SampleByBucketContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 2611 + self.state = 2619 localctx.sampleType = self.match(fugue_sqlParser.BUCKET) - self.state = 2612 + self.state = 2620 localctx.numerator = self.match(fugue_sqlParser.INTEGER_VALUE) - self.state = 2613 + self.state = 2621 self.match(fugue_sqlParser.OUT) - self.state = 2614 + self.state = 2622 self.match(fugue_sqlParser.OF) - self.state = 2615 + self.state = 2623 localctx.denominator = self.match(fugue_sqlParser.INTEGER_VALUE) - self.state = 2624 + self.state = 2632 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ON: - self.state = 2616 + self.state = 2624 self.match(fugue_sqlParser.ON) - self.state = 2622 + self.state = 2630 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,331,self._ctx) + la_ = self._interp.adaptivePredict(self._input,332,self._ctx) if la_ == 1: - self.state = 2617 + self.state = 2625 self.identifier() pass elif la_ == 2: - self.state = 2618 + self.state = 2626 self.qualifiedName() - self.state = 2619 + self.state = 2627 self.match(fugue_sqlParser.T__2) - self.state = 2620 + self.state = 2628 self.match(fugue_sqlParser.T__3) pass @@ -17994,7 +18061,7 @@ def sampleMethod(self): elif la_ == 4: localctx = fugue_sqlParser.SampleByBytesContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 2626 + self.state = 2634 localctx.bytes = self.expression() pass @@ -18033,14 +18100,14 @@ def accept(self, visitor:ParseTreeVisitor): def identifierList(self): localctx = fugue_sqlParser.IdentifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 268, self.RULE_identifierList) + self.enterRule(localctx, 270, self.RULE_identifierList) try: self.enterOuterAlt(localctx, 1) - self.state = 2629 + self.state = 2637 self.match(fugue_sqlParser.T__2) - self.state = 2630 + self.state = 2638 self.identifierSeq() - self.state = 2631 + self.state = 2639 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -18081,25 +18148,25 @@ def accept(self, visitor:ParseTreeVisitor): def identifierSeq(self): localctx = fugue_sqlParser.IdentifierSeqContext(self, self._ctx, self.state) - self.enterRule(localctx, 270, self.RULE_identifierSeq) + self.enterRule(localctx, 272, self.RULE_identifierSeq) try: self.enterOuterAlt(localctx, 1) - self.state = 2633 + self.state = 2641 localctx._errorCapturingIdentifier = self.errorCapturingIdentifier() localctx.ident.append(localctx._errorCapturingIdentifier) - self.state = 2638 + self.state = 2646 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,334,self._ctx) + _alt = self._interp.adaptivePredict(self._input,335,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2634 + self.state = 2642 self.match(fugue_sqlParser.T__0) - self.state = 2635 + self.state = 2643 localctx._errorCapturingIdentifier = self.errorCapturingIdentifier() localctx.ident.append(localctx._errorCapturingIdentifier) - self.state = 2640 + self.state = 2648 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,334,self._ctx) + _alt = self._interp.adaptivePredict(self._input,335,self._ctx) except RecognitionException as re: localctx.exception = re @@ -18138,27 +18205,27 @@ def accept(self, visitor:ParseTreeVisitor): def orderedIdentifierList(self): localctx = fugue_sqlParser.OrderedIdentifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 272, self.RULE_orderedIdentifierList) + self.enterRule(localctx, 274, self.RULE_orderedIdentifierList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2641 + self.state = 2649 self.match(fugue_sqlParser.T__2) - self.state = 2642 + self.state = 2650 self.orderedIdentifier() - self.state = 2647 + self.state = 2655 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2643 + self.state = 2651 self.match(fugue_sqlParser.T__0) - self.state = 2644 + self.state = 2652 self.orderedIdentifier() - self.state = 2649 + self.state = 2657 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2650 + self.state = 2658 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -18202,17 +18269,17 @@ def accept(self, visitor:ParseTreeVisitor): def orderedIdentifier(self): localctx = fugue_sqlParser.OrderedIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 274, self.RULE_orderedIdentifier) + self.enterRule(localctx, 276, self.RULE_orderedIdentifier) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2652 + self.state = 2660 localctx.ident = self.errorCapturingIdentifier() - self.state = 2654 + self.state = 2662 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ASC or _la==fugue_sqlParser.DESC: - self.state = 2653 + self.state = 2661 localctx.ordering = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.ASC or _la==fugue_sqlParser.DESC): @@ -18259,27 +18326,27 @@ def accept(self, visitor:ParseTreeVisitor): def identifierCommentList(self): localctx = fugue_sqlParser.IdentifierCommentListContext(self, self._ctx, self.state) - self.enterRule(localctx, 276, self.RULE_identifierCommentList) + self.enterRule(localctx, 278, self.RULE_identifierCommentList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2656 + self.state = 2664 self.match(fugue_sqlParser.T__2) - self.state = 2657 + self.state = 2665 self.identifierComment() - self.state = 2662 + self.state = 2670 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2658 + self.state = 2666 self.match(fugue_sqlParser.T__0) - self.state = 2659 + self.state = 2667 self.identifierComment() - self.state = 2664 + self.state = 2672 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2665 + self.state = 2673 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -18319,17 +18386,17 @@ def accept(self, visitor:ParseTreeVisitor): def identifierComment(self): localctx = fugue_sqlParser.IdentifierCommentContext(self, self._ctx, self.state) - self.enterRule(localctx, 278, self.RULE_identifierComment) + self.enterRule(localctx, 280, self.RULE_identifierComment) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2667 + self.state = 2675 self.identifier() - self.state = 2669 + self.state = 2677 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.COMMENT: - self.state = 2668 + self.state = 2676 self.commentSpec() @@ -18488,102 +18555,102 @@ def accept(self, visitor:ParseTreeVisitor): def relationPrimary(self): localctx = fugue_sqlParser.RelationPrimaryContext(self, self._ctx, self.state) - self.enterRule(localctx, 280, self.RULE_relationPrimary) + self.enterRule(localctx, 282, self.RULE_relationPrimary) try: - self.state = 2703 + self.state = 2711 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,343,self._ctx) + la_ = self._interp.adaptivePredict(self._input,344,self._ctx) if la_ == 1: localctx = fugue_sqlParser.TableNameContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 2671 + self.state = 2679 self.multipartIdentifier() - self.state = 2673 + self.state = 2681 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,339,self._ctx) + la_ = self._interp.adaptivePredict(self._input,340,self._ctx) if la_ == 1: - self.state = 2672 + self.state = 2680 self.sample() - self.state = 2675 + self.state = 2683 self.tableAlias() pass elif la_ == 2: localctx = fugue_sqlParser.AliasedQueryContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 2677 + self.state = 2685 self.match(fugue_sqlParser.T__2) - self.state = 2678 + self.state = 2686 self.query() - self.state = 2679 + self.state = 2687 self.match(fugue_sqlParser.T__3) - self.state = 2681 + self.state = 2689 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,340,self._ctx) + la_ = self._interp.adaptivePredict(self._input,341,self._ctx) if la_ == 1: - self.state = 2680 + self.state = 2688 self.sample() - self.state = 2683 + self.state = 2691 self.tableAlias() pass elif la_ == 3: localctx = fugue_sqlParser.AliasedFugueNestedContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 2685 + self.state = 2693 self.match(fugue_sqlParser.T__2) - self.state = 2686 + self.state = 2694 self.fugueNestableTaskNoSelect() - self.state = 2687 + self.state = 2695 self.match(fugue_sqlParser.T__3) - self.state = 2689 + self.state = 2697 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,341,self._ctx) + la_ = self._interp.adaptivePredict(self._input,342,self._ctx) if la_ == 1: - self.state = 2688 + self.state = 2696 self.sample() - self.state = 2691 + self.state = 2699 self.tableAlias() pass elif la_ == 4: localctx = fugue_sqlParser.AliasedRelationContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 2693 + self.state = 2701 self.match(fugue_sqlParser.T__2) - self.state = 2694 + self.state = 2702 self.relation() - self.state = 2695 + self.state = 2703 self.match(fugue_sqlParser.T__3) - self.state = 2697 + self.state = 2705 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,342,self._ctx) + la_ = self._interp.adaptivePredict(self._input,343,self._ctx) if la_ == 1: - self.state = 2696 + self.state = 2704 self.sample() - self.state = 2699 + self.state = 2707 self.tableAlias() pass elif la_ == 5: localctx = fugue_sqlParser.InlineTableDefault2Context(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 2701 + self.state = 2709 self.inlineTable() pass elif la_ == 6: localctx = fugue_sqlParser.TableValuedFunctionContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 2702 + self.state = 2710 self.functionTable() pass @@ -18632,27 +18699,27 @@ def accept(self, visitor:ParseTreeVisitor): def inlineTable(self): localctx = fugue_sqlParser.InlineTableContext(self, self._ctx, self.state) - self.enterRule(localctx, 282, self.RULE_inlineTable) + self.enterRule(localctx, 284, self.RULE_inlineTable) try: self.enterOuterAlt(localctx, 1) - self.state = 2705 + self.state = 2713 self.match(fugue_sqlParser.VALUES) - self.state = 2706 + self.state = 2714 self.expression() - self.state = 2711 + self.state = 2719 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,344,self._ctx) + _alt = self._interp.adaptivePredict(self._input,345,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2707 + self.state = 2715 self.match(fugue_sqlParser.T__0) - self.state = 2708 + self.state = 2716 self.expression() - self.state = 2713 + self.state = 2721 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,344,self._ctx) + _alt = self._interp.adaptivePredict(self._input,345,self._ctx) - self.state = 2714 + self.state = 2722 self.tableAlias() except RecognitionException as re: localctx.exception = re @@ -18700,37 +18767,37 @@ def accept(self, visitor:ParseTreeVisitor): def functionTable(self): localctx = fugue_sqlParser.FunctionTableContext(self, self._ctx, self.state) - self.enterRule(localctx, 284, self.RULE_functionTable) + self.enterRule(localctx, 286, self.RULE_functionTable) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2716 + self.state = 2724 localctx.funcName = self.errorCapturingIdentifier() - self.state = 2717 + self.state = 2725 self.match(fugue_sqlParser.T__2) - self.state = 2726 + self.state = 2734 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,346,self._ctx) + la_ = self._interp.adaptivePredict(self._input,347,self._ctx) if la_ == 1: - self.state = 2718 + self.state = 2726 self.expression() - self.state = 2723 + self.state = 2731 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2719 + self.state = 2727 self.match(fugue_sqlParser.T__0) - self.state = 2720 + self.state = 2728 self.expression() - self.state = 2725 + self.state = 2733 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2728 + self.state = 2736 self.match(fugue_sqlParser.T__3) - self.state = 2729 + self.state = 2737 self.tableAlias() except RecognitionException as re: localctx.exception = re @@ -18773,28 +18840,28 @@ def accept(self, visitor:ParseTreeVisitor): def tableAlias(self): localctx = fugue_sqlParser.TableAliasContext(self, self._ctx, self.state) - self.enterRule(localctx, 286, self.RULE_tableAlias) + self.enterRule(localctx, 288, self.RULE_tableAlias) try: self.enterOuterAlt(localctx, 1) - self.state = 2738 + self.state = 2746 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,349,self._ctx) + la_ = self._interp.adaptivePredict(self._input,350,self._ctx) if la_ == 1: - self.state = 2732 + self.state = 2740 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,347,self._ctx) + la_ = self._interp.adaptivePredict(self._input,348,self._ctx) if la_ == 1: - self.state = 2731 + self.state = 2739 self.match(fugue_sqlParser.AS) - self.state = 2734 + self.state = 2742 self.strictIdentifier() - self.state = 2736 + self.state = 2744 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,348,self._ctx) + la_ = self._interp.adaptivePredict(self._input,349,self._ctx) if la_ == 1: - self.state = 2735 + self.state = 2743 self.identifierList() @@ -18921,31 +18988,31 @@ def accept(self, visitor:ParseTreeVisitor): def rowFormat(self): localctx = fugue_sqlParser.RowFormatContext(self, self._ctx, self.state) - self.enterRule(localctx, 288, self.RULE_rowFormat) + self.enterRule(localctx, 290, self.RULE_rowFormat) try: - self.state = 2789 + self.state = 2797 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,357,self._ctx) + la_ = self._interp.adaptivePredict(self._input,358,self._ctx) if la_ == 1: localctx = fugue_sqlParser.RowFormatSerdeContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 2740 + self.state = 2748 self.match(fugue_sqlParser.ROW) - self.state = 2741 + self.state = 2749 self.match(fugue_sqlParser.FORMAT) - self.state = 2742 + self.state = 2750 self.match(fugue_sqlParser.SERDE) - self.state = 2743 + self.state = 2751 localctx.name = self.match(fugue_sqlParser.STRING) - self.state = 2747 + self.state = 2755 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,350,self._ctx) + la_ = self._interp.adaptivePredict(self._input,351,self._ctx) if la_ == 1: - self.state = 2744 + self.state = 2752 self.match(fugue_sqlParser.WITH) - self.state = 2745 + self.state = 2753 self.match(fugue_sqlParser.SERDEPROPERTIES) - self.state = 2746 + self.state = 2754 localctx.props = self.tablePropertyList() @@ -18954,95 +19021,95 @@ def rowFormat(self): elif la_ == 2: localctx = fugue_sqlParser.RowFormatDelimitedContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 2749 + self.state = 2757 self.match(fugue_sqlParser.ROW) - self.state = 2750 + self.state = 2758 self.match(fugue_sqlParser.FORMAT) - self.state = 2751 + self.state = 2759 self.match(fugue_sqlParser.DELIMITED) - self.state = 2761 + self.state = 2769 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,352,self._ctx) + la_ = self._interp.adaptivePredict(self._input,353,self._ctx) if la_ == 1: - self.state = 2752 + self.state = 2760 self.match(fugue_sqlParser.FIELDS) - self.state = 2753 + self.state = 2761 self.match(fugue_sqlParser.TERMINATED) - self.state = 2754 + self.state = 2762 self.match(fugue_sqlParser.BY) - self.state = 2755 + self.state = 2763 localctx.fieldsTerminatedBy = self.match(fugue_sqlParser.STRING) - self.state = 2759 + self.state = 2767 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,351,self._ctx) + la_ = self._interp.adaptivePredict(self._input,352,self._ctx) if la_ == 1: - self.state = 2756 + self.state = 2764 self.match(fugue_sqlParser.ESCAPED) - self.state = 2757 + self.state = 2765 self.match(fugue_sqlParser.BY) - self.state = 2758 + self.state = 2766 localctx.escapedBy = self.match(fugue_sqlParser.STRING) - self.state = 2768 + self.state = 2776 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,353,self._ctx) + la_ = self._interp.adaptivePredict(self._input,354,self._ctx) if la_ == 1: - self.state = 2763 + self.state = 2771 self.match(fugue_sqlParser.COLLECTION) - self.state = 2764 + self.state = 2772 self.match(fugue_sqlParser.ITEMS) - self.state = 2765 + self.state = 2773 self.match(fugue_sqlParser.TERMINATED) - self.state = 2766 + self.state = 2774 self.match(fugue_sqlParser.BY) - self.state = 2767 + self.state = 2775 localctx.collectionItemsTerminatedBy = self.match(fugue_sqlParser.STRING) - self.state = 2775 + self.state = 2783 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,354,self._ctx) + la_ = self._interp.adaptivePredict(self._input,355,self._ctx) if la_ == 1: - self.state = 2770 + self.state = 2778 self.match(fugue_sqlParser.MAP) - self.state = 2771 + self.state = 2779 self.match(fugue_sqlParser.KEYS) - self.state = 2772 + self.state = 2780 self.match(fugue_sqlParser.TERMINATED) - self.state = 2773 + self.state = 2781 self.match(fugue_sqlParser.BY) - self.state = 2774 + self.state = 2782 localctx.keysTerminatedBy = self.match(fugue_sqlParser.STRING) - self.state = 2781 + self.state = 2789 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,355,self._ctx) + la_ = self._interp.adaptivePredict(self._input,356,self._ctx) if la_ == 1: - self.state = 2777 + self.state = 2785 self.match(fugue_sqlParser.LINES) - self.state = 2778 + self.state = 2786 self.match(fugue_sqlParser.TERMINATED) - self.state = 2779 + self.state = 2787 self.match(fugue_sqlParser.BY) - self.state = 2780 + self.state = 2788 localctx.linesSeparatedBy = self.match(fugue_sqlParser.STRING) - self.state = 2787 + self.state = 2795 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,356,self._ctx) + la_ = self._interp.adaptivePredict(self._input,357,self._ctx) if la_ == 1: - self.state = 2783 + self.state = 2791 self.match(fugue_sqlParser.NULL) - self.state = 2784 + self.state = 2792 self.match(fugue_sqlParser.DEFINED) - self.state = 2785 + self.state = 2793 self.match(fugue_sqlParser.AS) - self.state = 2786 + self.state = 2794 localctx.nullDefinedAs = self.match(fugue_sqlParser.STRING) @@ -19086,21 +19153,21 @@ def accept(self, visitor:ParseTreeVisitor): def multipartIdentifierList(self): localctx = fugue_sqlParser.MultipartIdentifierListContext(self, self._ctx, self.state) - self.enterRule(localctx, 290, self.RULE_multipartIdentifierList) + self.enterRule(localctx, 292, self.RULE_multipartIdentifierList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2791 + self.state = 2799 self.multipartIdentifier() - self.state = 2796 + self.state = 2804 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2792 + self.state = 2800 self.match(fugue_sqlParser.T__0) - self.state = 2793 + self.state = 2801 self.multipartIdentifier() - self.state = 2798 + self.state = 2806 self._errHandler.sync(self) _la = self._input.LA(1) @@ -19143,25 +19210,25 @@ def accept(self, visitor:ParseTreeVisitor): def multipartIdentifier(self): localctx = fugue_sqlParser.MultipartIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 292, self.RULE_multipartIdentifier) + self.enterRule(localctx, 294, self.RULE_multipartIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 2799 + self.state = 2807 localctx._errorCapturingIdentifier = self.errorCapturingIdentifier() localctx.parts.append(localctx._errorCapturingIdentifier) - self.state = 2804 + self.state = 2812 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,359,self._ctx) + _alt = self._interp.adaptivePredict(self._input,360,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2800 + self.state = 2808 self.match(fugue_sqlParser.T__4) - self.state = 2801 + self.state = 2809 localctx._errorCapturingIdentifier = self.errorCapturingIdentifier() localctx.parts.append(localctx._errorCapturingIdentifier) - self.state = 2806 + self.state = 2814 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,359,self._ctx) + _alt = self._interp.adaptivePredict(self._input,360,self._ctx) except RecognitionException as re: localctx.exception = re @@ -19202,20 +19269,20 @@ def accept(self, visitor:ParseTreeVisitor): def tableIdentifier(self): localctx = fugue_sqlParser.TableIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 294, self.RULE_tableIdentifier) + self.enterRule(localctx, 296, self.RULE_tableIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 2810 + self.state = 2818 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,360,self._ctx) + la_ = self._interp.adaptivePredict(self._input,361,self._ctx) if la_ == 1: - self.state = 2807 + self.state = 2815 localctx.db = self.errorCapturingIdentifier() - self.state = 2808 + self.state = 2816 self.match(fugue_sqlParser.T__4) - self.state = 2812 + self.state = 2820 localctx.table = self.errorCapturingIdentifier() except RecognitionException as re: localctx.exception = re @@ -19256,20 +19323,20 @@ def accept(self, visitor:ParseTreeVisitor): def functionIdentifier(self): localctx = fugue_sqlParser.FunctionIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 296, self.RULE_functionIdentifier) + self.enterRule(localctx, 298, self.RULE_functionIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 2817 + self.state = 2825 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,361,self._ctx) + la_ = self._interp.adaptivePredict(self._input,362,self._ctx) if la_ == 1: - self.state = 2814 + self.state = 2822 localctx.db = self.errorCapturingIdentifier() - self.state = 2815 + self.state = 2823 self.match(fugue_sqlParser.T__4) - self.state = 2819 + self.state = 2827 localctx.function = self.errorCapturingIdentifier() except RecognitionException as re: localctx.exception = re @@ -19317,33 +19384,33 @@ def accept(self, visitor:ParseTreeVisitor): def namedExpression(self): localctx = fugue_sqlParser.NamedExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 298, self.RULE_namedExpression) + self.enterRule(localctx, 300, self.RULE_namedExpression) try: self.enterOuterAlt(localctx, 1) - self.state = 2821 - self.expression() self.state = 2829 + self.expression() + self.state = 2837 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,364,self._ctx) + la_ = self._interp.adaptivePredict(self._input,365,self._ctx) if la_ == 1: - self.state = 2823 + self.state = 2831 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,362,self._ctx) + la_ = self._interp.adaptivePredict(self._input,363,self._ctx) if la_ == 1: - self.state = 2822 + self.state = 2830 self.match(fugue_sqlParser.AS) - self.state = 2827 + self.state = 2835 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,363,self._ctx) + la_ = self._interp.adaptivePredict(self._input,364,self._ctx) if la_ == 1: - self.state = 2825 + self.state = 2833 localctx.name = self.errorCapturingIdentifier() pass elif la_ == 2: - self.state = 2826 + self.state = 2834 self.identifierList() pass @@ -19387,23 +19454,23 @@ def accept(self, visitor:ParseTreeVisitor): def namedExpressionSeq(self): localctx = fugue_sqlParser.NamedExpressionSeqContext(self, self._ctx, self.state) - self.enterRule(localctx, 300, self.RULE_namedExpressionSeq) + self.enterRule(localctx, 302, self.RULE_namedExpressionSeq) try: self.enterOuterAlt(localctx, 1) - self.state = 2831 + self.state = 2839 self.namedExpression() - self.state = 2836 + self.state = 2844 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,365,self._ctx) + _alt = self._interp.adaptivePredict(self._input,366,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 2832 + self.state = 2840 self.match(fugue_sqlParser.T__0) - self.state = 2833 + self.state = 2841 self.namedExpression() - self.state = 2838 + self.state = 2846 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,365,self._ctx) + _alt = self._interp.adaptivePredict(self._input,366,self._ctx) except RecognitionException as re: localctx.exception = re @@ -19444,29 +19511,29 @@ def accept(self, visitor:ParseTreeVisitor): def transformList(self): localctx = fugue_sqlParser.TransformListContext(self, self._ctx, self.state) - self.enterRule(localctx, 302, self.RULE_transformList) + self.enterRule(localctx, 304, self.RULE_transformList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2839 + self.state = 2847 self.match(fugue_sqlParser.T__2) - self.state = 2840 + self.state = 2848 localctx._transform = self.transform() localctx.transforms.append(localctx._transform) - self.state = 2845 + self.state = 2853 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2841 + self.state = 2849 self.match(fugue_sqlParser.T__0) - self.state = 2842 + self.state = 2850 localctx._transform = self.transform() localctx.transforms.append(localctx._transform) - self.state = 2847 + self.state = 2855 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2848 + self.state = 2856 self.match(fugue_sqlParser.T__3) except RecognitionException as re: localctx.exception = re @@ -19540,43 +19607,43 @@ def accept(self, visitor:ParseTreeVisitor): def transform(self): localctx = fugue_sqlParser.TransformContext(self, self._ctx, self.state) - self.enterRule(localctx, 304, self.RULE_transform) + self.enterRule(localctx, 306, self.RULE_transform) self._la = 0 # Token type try: - self.state = 2863 + self.state = 2871 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,368,self._ctx) + la_ = self._interp.adaptivePredict(self._input,369,self._ctx) if la_ == 1: localctx = fugue_sqlParser.IdentityTransformContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 2850 + self.state = 2858 self.qualifiedName() pass elif la_ == 2: localctx = fugue_sqlParser.ApplyTransformContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 2851 + self.state = 2859 localctx.transformName = self.identifier() - self.state = 2852 + self.state = 2860 self.match(fugue_sqlParser.T__2) - self.state = 2853 + self.state = 2861 localctx._transformArgument = self.transformArgument() localctx.argument.append(localctx._transformArgument) - self.state = 2858 + self.state = 2866 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2854 + self.state = 2862 self.match(fugue_sqlParser.T__0) - self.state = 2855 + self.state = 2863 localctx._transformArgument = self.transformArgument() localctx.argument.append(localctx._transformArgument) - self.state = 2860 + self.state = 2868 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2861 + self.state = 2869 self.match(fugue_sqlParser.T__3) pass @@ -19619,20 +19686,20 @@ def accept(self, visitor:ParseTreeVisitor): def transformArgument(self): localctx = fugue_sqlParser.TransformArgumentContext(self, self._ctx, self.state) - self.enterRule(localctx, 306, self.RULE_transformArgument) + self.enterRule(localctx, 308, self.RULE_transformArgument) try: - self.state = 2867 + self.state = 2875 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,369,self._ctx) + la_ = self._interp.adaptivePredict(self._input,370,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2865 + self.state = 2873 self.qualifiedName() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2866 + self.state = 2874 self.constant() pass @@ -19671,10 +19738,10 @@ def accept(self, visitor:ParseTreeVisitor): def expression(self): localctx = fugue_sqlParser.ExpressionContext(self, self._ctx, self.state) - self.enterRule(localctx, 308, self.RULE_expression) + self.enterRule(localctx, 310, self.RULE_expression) try: self.enterOuterAlt(localctx, 1) - self.state = 2869 + self.state = 2877 self.booleanExpression(0) except RecognitionException as re: localctx.exception = re @@ -19791,21 +19858,21 @@ def booleanExpression(self, _p:int=0): _parentState = self.state localctx = fugue_sqlParser.BooleanExpressionContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 310 - self.enterRecursionRule(localctx, 310, self.RULE_booleanExpression, _p) + _startState = 312 + self.enterRecursionRule(localctx, 312, self.RULE_booleanExpression, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 2883 + self.state = 2891 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,371,self._ctx) + la_ = self._interp.adaptivePredict(self._input,372,self._ctx) if la_ == 1: localctx = fugue_sqlParser.LogicalNotContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 2872 + self.state = 2880 self.match(fugue_sqlParser.NOT) - self.state = 2873 + self.state = 2881 self.booleanExpression(5) pass @@ -19813,13 +19880,13 @@ def booleanExpression(self, _p:int=0): localctx = fugue_sqlParser.ExistsContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 2874 + self.state = 2882 self.match(fugue_sqlParser.EXISTS) - self.state = 2875 + self.state = 2883 self.match(fugue_sqlParser.T__2) - self.state = 2876 + self.state = 2884 self.query() - self.state = 2877 + self.state = 2885 self.match(fugue_sqlParser.T__3) pass @@ -19827,13 +19894,13 @@ def booleanExpression(self, _p:int=0): localctx = fugue_sqlParser.PredicatedContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 2879 + self.state = 2887 self.valueExpression(0) - self.state = 2881 + self.state = 2889 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,370,self._ctx) + la_ = self._interp.adaptivePredict(self._input,371,self._ctx) if la_ == 1: - self.state = 2880 + self.state = 2888 self.predicate() @@ -19841,28 +19908,28 @@ def booleanExpression(self, _p:int=0): self._ctx.stop = self._input.LT(-1) - self.state = 2893 + self.state = 2901 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,373,self._ctx) + _alt = self._interp.adaptivePredict(self._input,374,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 = 2891 + self.state = 2899 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,372,self._ctx) + la_ = self._interp.adaptivePredict(self._input,373,self._ctx) if la_ == 1: localctx = fugue_sqlParser.LogicalBinaryContext(self, fugue_sqlParser.BooleanExpressionContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_booleanExpression) - self.state = 2885 + self.state = 2893 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 2886 + self.state = 2894 localctx.operator = self.match(fugue_sqlParser.AND) - self.state = 2887 + self.state = 2895 localctx.right = self.booleanExpression(3) pass @@ -19870,20 +19937,20 @@ def booleanExpression(self, _p:int=0): localctx = fugue_sqlParser.LogicalBinaryContext(self, fugue_sqlParser.BooleanExpressionContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_booleanExpression) - self.state = 2888 + self.state = 2896 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 2889 + self.state = 2897 localctx.operator = self.match(fugue_sqlParser.OR) - self.state = 2890 + self.state = 2898 localctx.right = self.booleanExpression(2) pass - self.state = 2895 + self.state = 2903 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,373,self._ctx) + _alt = self._interp.adaptivePredict(self._input,374,self._ctx) except RecognitionException as re: localctx.exception = re @@ -19994,113 +20061,113 @@ def accept(self, visitor:ParseTreeVisitor): def predicate(self): localctx = fugue_sqlParser.PredicateContext(self, self._ctx, self.state) - self.enterRule(localctx, 312, self.RULE_predicate) + self.enterRule(localctx, 314, self.RULE_predicate) self._la = 0 # Token type try: - self.state = 2978 + self.state = 2986 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,387,self._ctx) + la_ = self._interp.adaptivePredict(self._input,388,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 2897 + self.state = 2905 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2896 + self.state = 2904 self.match(fugue_sqlParser.NOT) - self.state = 2899 + self.state = 2907 localctx.kind = self.match(fugue_sqlParser.BETWEEN) - self.state = 2900 + self.state = 2908 localctx.lower = self.valueExpression(0) - self.state = 2901 + self.state = 2909 self.match(fugue_sqlParser.AND) - self.state = 2902 + self.state = 2910 localctx.upper = self.valueExpression(0) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 2905 + self.state = 2913 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2904 + self.state = 2912 self.match(fugue_sqlParser.NOT) - self.state = 2907 + self.state = 2915 localctx.kind = self.match(fugue_sqlParser.IN) - self.state = 2908 + self.state = 2916 self.match(fugue_sqlParser.T__2) - self.state = 2909 + self.state = 2917 self.expression() - self.state = 2914 + self.state = 2922 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2910 + self.state = 2918 self.match(fugue_sqlParser.T__0) - self.state = 2911 + self.state = 2919 self.expression() - self.state = 2916 + self.state = 2924 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2917 + self.state = 2925 self.match(fugue_sqlParser.T__3) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 2920 + self.state = 2928 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2919 + self.state = 2927 self.match(fugue_sqlParser.NOT) - self.state = 2922 + self.state = 2930 localctx.kind = self.match(fugue_sqlParser.IN) - self.state = 2923 + self.state = 2931 self.match(fugue_sqlParser.T__2) - self.state = 2924 + self.state = 2932 self.query() - self.state = 2925 + self.state = 2933 self.match(fugue_sqlParser.T__3) pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 2928 + self.state = 2936 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2927 + self.state = 2935 self.match(fugue_sqlParser.NOT) - self.state = 2930 + self.state = 2938 localctx.kind = self.match(fugue_sqlParser.RLIKE) - self.state = 2931 + self.state = 2939 localctx.pattern = self.valueExpression(0) pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 2933 + self.state = 2941 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2932 + self.state = 2940 self.match(fugue_sqlParser.NOT) - self.state = 2935 + self.state = 2943 localctx.kind = self.match(fugue_sqlParser.LIKE) - self.state = 2936 + self.state = 2944 localctx.quantifier = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.ALL or _la==fugue_sqlParser.ANY or _la==fugue_sqlParser.SOME): @@ -20108,34 +20175,34 @@ def predicate(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 2950 + self.state = 2958 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,381,self._ctx) + la_ = self._interp.adaptivePredict(self._input,382,self._ctx) if la_ == 1: - self.state = 2937 + self.state = 2945 self.match(fugue_sqlParser.T__2) - self.state = 2938 + self.state = 2946 self.match(fugue_sqlParser.T__3) pass elif la_ == 2: - self.state = 2939 + self.state = 2947 self.match(fugue_sqlParser.T__2) - self.state = 2940 + self.state = 2948 self.expression() - self.state = 2945 + self.state = 2953 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 2941 + self.state = 2949 self.match(fugue_sqlParser.T__0) - self.state = 2942 + self.state = 2950 self.expression() - self.state = 2947 + self.state = 2955 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 2948 + self.state = 2956 self.match(fugue_sqlParser.T__3) pass @@ -20144,25 +20211,25 @@ def predicate(self): elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 2953 + self.state = 2961 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2952 + self.state = 2960 self.match(fugue_sqlParser.NOT) - self.state = 2955 + self.state = 2963 localctx.kind = self.match(fugue_sqlParser.LIKE) - self.state = 2956 + self.state = 2964 localctx.pattern = self.valueExpression(0) - self.state = 2959 + self.state = 2967 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,383,self._ctx) + la_ = self._interp.adaptivePredict(self._input,384,self._ctx) if la_ == 1: - self.state = 2957 + self.state = 2965 self.match(fugue_sqlParser.ESCAPE) - self.state = 2958 + self.state = 2966 localctx.escapeChar = self.match(fugue_sqlParser.STRING) @@ -20170,33 +20237,33 @@ def predicate(self): elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 2961 + self.state = 2969 self.match(fugue_sqlParser.IS) - self.state = 2963 + self.state = 2971 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2962 + self.state = 2970 self.match(fugue_sqlParser.NOT) - self.state = 2965 + self.state = 2973 localctx.kind = self.match(fugue_sqlParser.NULL) pass elif la_ == 8: self.enterOuterAlt(localctx, 8) - self.state = 2966 + self.state = 2974 self.match(fugue_sqlParser.IS) - self.state = 2968 + self.state = 2976 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2967 + self.state = 2975 self.match(fugue_sqlParser.NOT) - self.state = 2970 + self.state = 2978 localctx.kind = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.FALSE or _la==fugue_sqlParser.TRUE or _la==fugue_sqlParser.UNKNOWN): @@ -20208,21 +20275,21 @@ def predicate(self): elif la_ == 9: self.enterOuterAlt(localctx, 9) - self.state = 2971 + self.state = 2979 self.match(fugue_sqlParser.IS) - self.state = 2973 + self.state = 2981 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 2972 + self.state = 2980 self.match(fugue_sqlParser.NOT) - self.state = 2975 + self.state = 2983 localctx.kind = self.match(fugue_sqlParser.DISTINCT) - self.state = 2976 + self.state = 2984 self.match(fugue_sqlParser.FROM) - self.state = 2977 + self.state = 2985 localctx.right = self.valueExpression(0) pass @@ -20366,20 +20433,20 @@ def valueExpression(self, _p:int=0): _parentState = self.state localctx = fugue_sqlParser.ValueExpressionContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 314 - self.enterRecursionRule(localctx, 314, self.RULE_valueExpression, _p) + _startState = 316 + self.enterRecursionRule(localctx, 316, self.RULE_valueExpression, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 2984 + self.state = 2992 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,388,self._ctx) + la_ = self._interp.adaptivePredict(self._input,389,self._ctx) if la_ == 1: localctx = fugue_sqlParser.ValueExpressionDefaultContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 2981 + self.state = 2989 self.primaryExpression(0) pass @@ -20387,7 +20454,7 @@ def valueExpression(self, _p:int=0): localctx = fugue_sqlParser.ArithmeticUnaryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 2982 + self.state = 2990 localctx.operator = self._input.LT(1) _la = self._input.LA(1) if not(((((_la - 302)) & ~0x3f) == 0 and ((1 << (_la - 302)) & ((1 << (fugue_sqlParser.PLUS - 302)) | (1 << (fugue_sqlParser.MINUS - 302)) | (1 << (fugue_sqlParser.TILDE - 302)))) != 0)): @@ -20395,32 +20462,32 @@ def valueExpression(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 2983 + self.state = 2991 self.valueExpression(7) pass self._ctx.stop = self._input.LT(-1) - self.state = 3007 + self.state = 3015 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,390,self._ctx) + _alt = self._interp.adaptivePredict(self._input,391,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 = 3005 + self.state = 3013 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,389,self._ctx) + la_ = self._interp.adaptivePredict(self._input,390,self._ctx) if la_ == 1: localctx = fugue_sqlParser.ArithmeticBinaryContext(self, fugue_sqlParser.ValueExpressionContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_valueExpression) - self.state = 2986 + self.state = 2994 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 2987 + self.state = 2995 localctx.operator = self._input.LT(1) _la = self._input.LA(1) if not(((((_la - 304)) & ~0x3f) == 0 and ((1 << (_la - 304)) & ((1 << (fugue_sqlParser.ASTERISK - 304)) | (1 << (fugue_sqlParser.SLASH - 304)) | (1 << (fugue_sqlParser.PERCENT - 304)) | (1 << (fugue_sqlParser.DIV - 304)))) != 0)): @@ -20428,7 +20495,7 @@ def valueExpression(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 2988 + self.state = 2996 localctx.right = self.valueExpression(7) pass @@ -20436,11 +20503,11 @@ def valueExpression(self, _p:int=0): localctx = fugue_sqlParser.ArithmeticBinaryContext(self, fugue_sqlParser.ValueExpressionContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_valueExpression) - self.state = 2989 + self.state = 2997 if not self.precpred(self._ctx, 5): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 5)") - self.state = 2990 + self.state = 2998 localctx.operator = self._input.LT(1) _la = self._input.LA(1) if not(((((_la - 302)) & ~0x3f) == 0 and ((1 << (_la - 302)) & ((1 << (fugue_sqlParser.PLUS - 302)) | (1 << (fugue_sqlParser.MINUS - 302)) | (1 << (fugue_sqlParser.CONCAT_PIPE - 302)))) != 0)): @@ -20448,7 +20515,7 @@ def valueExpression(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 2991 + self.state = 2999 localctx.right = self.valueExpression(6) pass @@ -20456,13 +20523,13 @@ def valueExpression(self, _p:int=0): localctx = fugue_sqlParser.ArithmeticBinaryContext(self, fugue_sqlParser.ValueExpressionContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_valueExpression) - self.state = 2992 + self.state = 3000 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 2993 + self.state = 3001 localctx.operator = self.match(fugue_sqlParser.AMPERSAND) - self.state = 2994 + self.state = 3002 localctx.right = self.valueExpression(5) pass @@ -20470,13 +20537,13 @@ def valueExpression(self, _p:int=0): localctx = fugue_sqlParser.ArithmeticBinaryContext(self, fugue_sqlParser.ValueExpressionContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_valueExpression) - self.state = 2995 + self.state = 3003 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 2996 + self.state = 3004 localctx.operator = self.match(fugue_sqlParser.HAT) - self.state = 2997 + self.state = 3005 localctx.right = self.valueExpression(4) pass @@ -20484,13 +20551,13 @@ def valueExpression(self, _p:int=0): localctx = fugue_sqlParser.ArithmeticBinaryContext(self, fugue_sqlParser.ValueExpressionContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_valueExpression) - self.state = 2998 + self.state = 3006 if not self.precpred(self._ctx, 2): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 2999 + self.state = 3007 localctx.operator = self.match(fugue_sqlParser.PIPE) - self.state = 3000 + self.state = 3008 localctx.right = self.valueExpression(3) pass @@ -20498,20 +20565,20 @@ def valueExpression(self, _p:int=0): localctx = fugue_sqlParser.ComparisonContext(self, fugue_sqlParser.ValueExpressionContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_valueExpression) - self.state = 3001 + self.state = 3009 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 3002 + self.state = 3010 self.comparisonOperator() - self.state = 3003 + self.state = 3011 localctx.right = self.valueExpression(2) pass - self.state = 3009 + self.state = 3017 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,390,self._ctx) + _alt = self._interp.adaptivePredict(self._input,391,self._ctx) except RecognitionException as re: localctx.exception = re @@ -21083,20 +21150,20 @@ def primaryExpression(self, _p:int=0): _parentState = self.state localctx = fugue_sqlParser.PrimaryExpressionContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 316 - self.enterRecursionRule(localctx, 316, self.RULE_primaryExpression, _p) + _startState = 318 + self.enterRecursionRule(localctx, 318, self.RULE_primaryExpression, _p) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3194 + self.state = 3202 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,410,self._ctx) + la_ = self._interp.adaptivePredict(self._input,411,self._ctx) if la_ == 1: localctx = fugue_sqlParser.CurrentDatetimeContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3011 + self.state = 3019 localctx.name = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.CURRENT_DATE or _la==fugue_sqlParser.CURRENT_TIMESTAMP): @@ -21110,31 +21177,31 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.SearchedCaseContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3012 + self.state = 3020 self.match(fugue_sqlParser.CASE) - self.state = 3014 + self.state = 3022 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 3013 + self.state = 3021 self.whenClause() - self.state = 3016 + self.state = 3024 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==fugue_sqlParser.WHEN): break - self.state = 3020 + self.state = 3028 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ELSE: - self.state = 3018 + self.state = 3026 self.match(fugue_sqlParser.ELSE) - self.state = 3019 + self.state = 3027 localctx.elseExpression = self.expression() - self.state = 3022 + self.state = 3030 self.match(fugue_sqlParser.END) pass @@ -21142,33 +21209,33 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.SimpleCaseContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3024 + self.state = 3032 self.match(fugue_sqlParser.CASE) - self.state = 3025 + self.state = 3033 localctx.value = self.expression() - self.state = 3027 + self.state = 3035 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 3026 + self.state = 3034 self.whenClause() - self.state = 3029 + self.state = 3037 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==fugue_sqlParser.WHEN): break - self.state = 3033 + self.state = 3041 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ELSE: - self.state = 3031 + self.state = 3039 self.match(fugue_sqlParser.ELSE) - self.state = 3032 + self.state = 3040 localctx.elseExpression = self.expression() - self.state = 3035 + self.state = 3043 self.match(fugue_sqlParser.END) pass @@ -21176,17 +21243,17 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.CastContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3037 + self.state = 3045 self.match(fugue_sqlParser.CAST) - self.state = 3038 + self.state = 3046 self.match(fugue_sqlParser.T__2) - self.state = 3039 + self.state = 3047 self.expression() - self.state = 3040 + self.state = 3048 self.match(fugue_sqlParser.AS) - self.state = 3041 + self.state = 3049 self.dataType() - self.state = 3042 + self.state = 3050 self.match(fugue_sqlParser.T__3) pass @@ -21194,33 +21261,33 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.StructContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3044 + self.state = 3052 self.match(fugue_sqlParser.STRUCT) - self.state = 3045 + self.state = 3053 self.match(fugue_sqlParser.T__2) - self.state = 3054 + self.state = 3062 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,396,self._ctx) + la_ = self._interp.adaptivePredict(self._input,397,self._ctx) if la_ == 1: - self.state = 3046 + self.state = 3054 localctx._namedExpression = self.namedExpression() localctx.argument.append(localctx._namedExpression) - self.state = 3051 + self.state = 3059 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3047 + self.state = 3055 self.match(fugue_sqlParser.T__0) - self.state = 3048 + self.state = 3056 localctx._namedExpression = self.namedExpression() localctx.argument.append(localctx._namedExpression) - self.state = 3053 + self.state = 3061 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 3056 + self.state = 3064 self.match(fugue_sqlParser.T__3) pass @@ -21228,23 +21295,23 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.FirstContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3057 + self.state = 3065 self.match(fugue_sqlParser.FIRST) - self.state = 3058 + self.state = 3066 self.match(fugue_sqlParser.T__2) - self.state = 3059 + self.state = 3067 self.expression() - self.state = 3062 + self.state = 3070 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.IGNORE: - self.state = 3060 + self.state = 3068 self.match(fugue_sqlParser.IGNORE) - self.state = 3061 + self.state = 3069 self.match(fugue_sqlParser.NULLS) - self.state = 3064 + self.state = 3072 self.match(fugue_sqlParser.T__3) pass @@ -21252,23 +21319,23 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.LastContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3066 + self.state = 3074 self.match(fugue_sqlParser.LAST) - self.state = 3067 + self.state = 3075 self.match(fugue_sqlParser.T__2) - self.state = 3068 + self.state = 3076 self.expression() - self.state = 3071 + self.state = 3079 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.IGNORE: - self.state = 3069 + self.state = 3077 self.match(fugue_sqlParser.IGNORE) - self.state = 3070 + self.state = 3078 self.match(fugue_sqlParser.NULLS) - self.state = 3073 + self.state = 3081 self.match(fugue_sqlParser.T__3) pass @@ -21276,17 +21343,17 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.PositionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3075 + self.state = 3083 self.match(fugue_sqlParser.POSITION) - self.state = 3076 + self.state = 3084 self.match(fugue_sqlParser.T__2) - self.state = 3077 + self.state = 3085 localctx.substr = self.valueExpression(0) - self.state = 3078 + self.state = 3086 self.match(fugue_sqlParser.IN) - self.state = 3079 + self.state = 3087 localctx.istr = self.valueExpression(0) - self.state = 3080 + self.state = 3088 self.match(fugue_sqlParser.T__3) pass @@ -21294,7 +21361,7 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.ConstantDefaultContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3082 + self.state = 3090 self.constant() pass @@ -21302,7 +21369,7 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.StarContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3083 + self.state = 3091 self.match(fugue_sqlParser.ASTERISK) pass @@ -21310,11 +21377,11 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.StarContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3084 + self.state = 3092 self.qualifiedName() - self.state = 3085 + self.state = 3093 self.match(fugue_sqlParser.T__4) - self.state = 3086 + self.state = 3094 self.match(fugue_sqlParser.ASTERISK) pass @@ -21322,25 +21389,25 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.RowConstructorContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3088 + self.state = 3096 self.match(fugue_sqlParser.T__2) - self.state = 3089 + self.state = 3097 self.namedExpression() - self.state = 3092 + self.state = 3100 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 3090 + self.state = 3098 self.match(fugue_sqlParser.T__0) - self.state = 3091 + self.state = 3099 self.namedExpression() - self.state = 3094 + self.state = 3102 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==fugue_sqlParser.T__0): break - self.state = 3096 + self.state = 3104 self.match(fugue_sqlParser.T__3) pass @@ -21348,11 +21415,11 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.SubqueryExpressionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3098 + self.state = 3106 self.match(fugue_sqlParser.T__2) - self.state = 3099 + self.state = 3107 self.query() - self.state = 3100 + self.state = 3108 self.match(fugue_sqlParser.T__3) pass @@ -21360,65 +21427,65 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.FunctionCallContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3102 + self.state = 3110 self.functionName() - self.state = 3103 + self.state = 3111 self.match(fugue_sqlParser.T__2) - self.state = 3115 + self.state = 3123 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,402,self._ctx) + la_ = self._interp.adaptivePredict(self._input,403,self._ctx) if la_ == 1: - self.state = 3105 + self.state = 3113 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,400,self._ctx) + la_ = self._interp.adaptivePredict(self._input,401,self._ctx) if la_ == 1: - self.state = 3104 + self.state = 3112 self.setQuantifier() - self.state = 3107 + self.state = 3115 localctx._expression = self.expression() localctx.argument.append(localctx._expression) - self.state = 3112 + self.state = 3120 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3108 + self.state = 3116 self.match(fugue_sqlParser.T__0) - self.state = 3109 + self.state = 3117 localctx._expression = self.expression() localctx.argument.append(localctx._expression) - self.state = 3114 + self.state = 3122 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 3117 + self.state = 3125 self.match(fugue_sqlParser.T__3) - self.state = 3124 + self.state = 3132 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,403,self._ctx) + la_ = self._interp.adaptivePredict(self._input,404,self._ctx) if la_ == 1: - self.state = 3118 + self.state = 3126 self.match(fugue_sqlParser.FILTER) - self.state = 3119 + self.state = 3127 self.match(fugue_sqlParser.T__2) - self.state = 3120 + self.state = 3128 self.match(fugue_sqlParser.WHERE) - self.state = 3121 + self.state = 3129 localctx.where = self.booleanExpression(0) - self.state = 3122 + self.state = 3130 self.match(fugue_sqlParser.T__3) - self.state = 3128 + self.state = 3136 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,404,self._ctx) + la_ = self._interp.adaptivePredict(self._input,405,self._ctx) if la_ == 1: - self.state = 3126 + self.state = 3134 self.match(fugue_sqlParser.OVER) - self.state = 3127 + self.state = 3135 self.windowSpec() @@ -21428,11 +21495,11 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.LambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3130 + self.state = 3138 self.identifier() - self.state = 3131 + self.state = 3139 self.match(fugue_sqlParser.T__15) - self.state = 3132 + self.state = 3140 self.expression() pass @@ -21440,29 +21507,29 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.LambdaContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3134 + self.state = 3142 self.match(fugue_sqlParser.T__2) - self.state = 3135 + self.state = 3143 self.identifier() - self.state = 3138 + self.state = 3146 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 3136 + self.state = 3144 self.match(fugue_sqlParser.T__0) - self.state = 3137 + self.state = 3145 self.identifier() - self.state = 3140 + self.state = 3148 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==fugue_sqlParser.T__0): break - self.state = 3142 + self.state = 3150 self.match(fugue_sqlParser.T__3) - self.state = 3143 + self.state = 3151 self.match(fugue_sqlParser.T__15) - self.state = 3144 + self.state = 3152 self.expression() pass @@ -21470,7 +21537,7 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.ColumnReferenceContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3146 + self.state = 3154 self.identifier() pass @@ -21478,11 +21545,11 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.ParenthesizedExpressionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3147 + self.state = 3155 self.match(fugue_sqlParser.T__2) - self.state = 3148 + self.state = 3156 self.expression() - self.state = 3149 + self.state = 3157 self.match(fugue_sqlParser.T__3) pass @@ -21490,17 +21557,17 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.ExtractContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3151 + self.state = 3159 self.match(fugue_sqlParser.EXTRACT) - self.state = 3152 + self.state = 3160 self.match(fugue_sqlParser.T__2) - self.state = 3153 + self.state = 3161 localctx.field = self.identifier() - self.state = 3154 + self.state = 3162 self.match(fugue_sqlParser.FROM) - self.state = 3155 + self.state = 3163 localctx.source = self.valueExpression(0) - self.state = 3156 + self.state = 3164 self.match(fugue_sqlParser.T__3) pass @@ -21508,42 +21575,42 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.SubstringContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3158 + self.state = 3166 _la = self._input.LA(1) if not(_la==fugue_sqlParser.SUBSTR or _la==fugue_sqlParser.SUBSTRING): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 3159 + self.state = 3167 self.match(fugue_sqlParser.T__2) - self.state = 3160 + self.state = 3168 localctx.istr = self.valueExpression(0) - self.state = 3161 + self.state = 3169 _la = self._input.LA(1) if not(_la==fugue_sqlParser.T__0 or _la==fugue_sqlParser.FROM): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 3162 + self.state = 3170 localctx.pos = self.valueExpression(0) - self.state = 3165 + self.state = 3173 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.T__0 or _la==fugue_sqlParser.FOR: - self.state = 3163 + self.state = 3171 _la = self._input.LA(1) if not(_la==fugue_sqlParser.T__0 or _la==fugue_sqlParser.FOR): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 3164 + self.state = 3172 localctx.ilen = self.valueExpression(0) - self.state = 3167 + self.state = 3175 self.match(fugue_sqlParser.T__3) pass @@ -21551,15 +21618,15 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.TrimContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3169 + self.state = 3177 self.match(fugue_sqlParser.TRIM) - self.state = 3170 + self.state = 3178 self.match(fugue_sqlParser.T__2) - self.state = 3172 + self.state = 3180 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,407,self._ctx) + la_ = self._interp.adaptivePredict(self._input,408,self._ctx) if la_ == 1: - self.state = 3171 + self.state = 3179 localctx.trimOption = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.BOTH or _la==fugue_sqlParser.LEADING or _la==fugue_sqlParser.TRAILING): @@ -21569,19 +21636,19 @@ def primaryExpression(self, _p:int=0): self.consume() - self.state = 3175 + self.state = 3183 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,408,self._ctx) + la_ = self._interp.adaptivePredict(self._input,409,self._ctx) if la_ == 1: - self.state = 3174 + self.state = 3182 localctx.trimStr = self.valueExpression(0) - self.state = 3177 + self.state = 3185 self.match(fugue_sqlParser.FROM) - self.state = 3178 + self.state = 3186 localctx.srcStr = self.valueExpression(0) - self.state = 3179 + self.state = 3187 self.match(fugue_sqlParser.T__3) pass @@ -21589,60 +21656,60 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.OverlayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 3181 + self.state = 3189 self.match(fugue_sqlParser.OVERLAY) - self.state = 3182 + self.state = 3190 self.match(fugue_sqlParser.T__2) - self.state = 3183 + self.state = 3191 localctx.iinput = self.valueExpression(0) - self.state = 3184 + self.state = 3192 self.match(fugue_sqlParser.PLACING) - self.state = 3185 + self.state = 3193 localctx.replace = self.valueExpression(0) - self.state = 3186 + self.state = 3194 self.match(fugue_sqlParser.FROM) - self.state = 3187 + self.state = 3195 localctx.position = self.valueExpression(0) - self.state = 3190 + self.state = 3198 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.FOR: - self.state = 3188 + self.state = 3196 self.match(fugue_sqlParser.FOR) - self.state = 3189 + self.state = 3197 localctx.length = self.valueExpression(0) - self.state = 3192 + self.state = 3200 self.match(fugue_sqlParser.T__3) pass self._ctx.stop = self._input.LT(-1) - self.state = 3206 + self.state = 3214 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,412,self._ctx) + _alt = self._interp.adaptivePredict(self._input,413,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 = 3204 + self.state = 3212 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,411,self._ctx) + la_ = self._interp.adaptivePredict(self._input,412,self._ctx) if la_ == 1: localctx = fugue_sqlParser.SubscriptContext(self, fugue_sqlParser.PrimaryExpressionContext(self, _parentctx, _parentState)) localctx.value = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_primaryExpression) - self.state = 3196 + self.state = 3204 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 3197 + self.state = 3205 self.match(fugue_sqlParser.T__5) - self.state = 3198 + self.state = 3206 localctx.index = self.valueExpression(0) - self.state = 3199 + self.state = 3207 self.match(fugue_sqlParser.T__6) pass @@ -21650,20 +21717,20 @@ def primaryExpression(self, _p:int=0): localctx = fugue_sqlParser.DereferenceContext(self, fugue_sqlParser.PrimaryExpressionContext(self, _parentctx, _parentState)) localctx.base = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_primaryExpression) - self.state = 3201 + self.state = 3209 if not self.precpred(self._ctx, 6): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 6)") - self.state = 3202 + self.state = 3210 self.match(fugue_sqlParser.T__4) - self.state = 3203 + self.state = 3211 localctx.fieldName = self.identifier() pass - self.state = 3208 + self.state = 3216 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,412,self._ctx) + _alt = self._interp.adaptivePredict(self._input,413,self._ctx) except RecognitionException as re: localctx.exception = re @@ -21799,64 +21866,64 @@ def accept(self, visitor:ParseTreeVisitor): def constant(self): localctx = fugue_sqlParser.ConstantContext(self, self._ctx, self.state) - self.enterRule(localctx, 318, self.RULE_constant) + self.enterRule(localctx, 320, self.RULE_constant) try: - self.state = 3221 + self.state = 3229 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,414,self._ctx) + la_ = self._interp.adaptivePredict(self._input,415,self._ctx) if la_ == 1: localctx = fugue_sqlParser.NullLiteralContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 3209 + self.state = 3217 self.match(fugue_sqlParser.NULL) pass elif la_ == 2: localctx = fugue_sqlParser.IntervalLiteralContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 3210 + self.state = 3218 self.interval() pass elif la_ == 3: localctx = fugue_sqlParser.TypeConstructorContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 3211 + self.state = 3219 self.identifier() - self.state = 3212 + self.state = 3220 self.match(fugue_sqlParser.STRING) pass elif la_ == 4: localctx = fugue_sqlParser.NumericLiteralContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 3214 + self.state = 3222 self.number() pass elif la_ == 5: localctx = fugue_sqlParser.BooleanLiteralContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 3215 + self.state = 3223 self.booleanValue() pass elif la_ == 6: localctx = fugue_sqlParser.StringLiteralContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 3217 + self.state = 3225 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 3216 + self.state = 3224 self.match(fugue_sqlParser.STRING) else: raise NoViableAltException(self) - self.state = 3219 + self.state = 3227 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,413,self._ctx) + _alt = self._interp.adaptivePredict(self._input,414,self._ctx) pass @@ -21916,49 +21983,49 @@ def accept(self, visitor:ParseTreeVisitor): def comparisonOperator(self): localctx = fugue_sqlParser.ComparisonOperatorContext(self, self._ctx, self.state) - self.enterRule(localctx, 320, self.RULE_comparisonOperator) + self.enterRule(localctx, 322, self.RULE_comparisonOperator) try: - self.state = 3231 + self.state = 3239 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.EQUAL, fugue_sqlParser.DOUBLEEQUAL]: self.enterOuterAlt(localctx, 1) - self.state = 3223 + self.state = 3231 self.comparisonEqualOperator() pass elif token in [fugue_sqlParser.NEQ]: self.enterOuterAlt(localctx, 2) - self.state = 3224 + self.state = 3232 self.match(fugue_sqlParser.NEQ) pass elif token in [fugue_sqlParser.NEQJ]: self.enterOuterAlt(localctx, 3) - self.state = 3225 + self.state = 3233 self.match(fugue_sqlParser.NEQJ) pass elif token in [fugue_sqlParser.LT]: self.enterOuterAlt(localctx, 4) - self.state = 3226 + self.state = 3234 self.match(fugue_sqlParser.LT) pass elif token in [fugue_sqlParser.LTE]: self.enterOuterAlt(localctx, 5) - self.state = 3227 + self.state = 3235 self.match(fugue_sqlParser.LTE) pass elif token in [fugue_sqlParser.GT]: self.enterOuterAlt(localctx, 6) - self.state = 3228 + self.state = 3236 self.match(fugue_sqlParser.GT) pass elif token in [fugue_sqlParser.GTE]: self.enterOuterAlt(localctx, 7) - self.state = 3229 + self.state = 3237 self.match(fugue_sqlParser.GTE) pass elif token in [fugue_sqlParser.NSEQ]: self.enterOuterAlt(localctx, 8) - self.state = 3230 + self.state = 3238 self.match(fugue_sqlParser.NSEQ) pass else: @@ -22000,11 +22067,11 @@ def accept(self, visitor:ParseTreeVisitor): def comparisonEqualOperator(self): localctx = fugue_sqlParser.ComparisonEqualOperatorContext(self, self._ctx, self.state) - self.enterRule(localctx, 322, self.RULE_comparisonEqualOperator) + self.enterRule(localctx, 324, self.RULE_comparisonEqualOperator) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3233 + self.state = 3241 _la = self._input.LA(1) if not(_la==fugue_sqlParser.EQUAL or _la==fugue_sqlParser.DOUBLEEQUAL): self._errHandler.recoverInline(self) @@ -22074,11 +22141,11 @@ def accept(self, visitor:ParseTreeVisitor): def arithmeticOperator(self): localctx = fugue_sqlParser.ArithmeticOperatorContext(self, self._ctx, self.state) - self.enterRule(localctx, 324, self.RULE_arithmeticOperator) + self.enterRule(localctx, 326, self.RULE_arithmeticOperator) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3235 + self.state = 3243 _la = self._input.LA(1) if not(((((_la - 302)) & ~0x3f) == 0 and ((1 << (_la - 302)) & ((1 << (fugue_sqlParser.PLUS - 302)) | (1 << (fugue_sqlParser.MINUS - 302)) | (1 << (fugue_sqlParser.ASTERISK - 302)) | (1 << (fugue_sqlParser.SLASH - 302)) | (1 << (fugue_sqlParser.PERCENT - 302)) | (1 << (fugue_sqlParser.DIV - 302)) | (1 << (fugue_sqlParser.TILDE - 302)) | (1 << (fugue_sqlParser.AMPERSAND - 302)) | (1 << (fugue_sqlParser.PIPE - 302)) | (1 << (fugue_sqlParser.CONCAT_PIPE - 302)) | (1 << (fugue_sqlParser.HAT - 302)))) != 0)): self._errHandler.recoverInline(self) @@ -22127,11 +22194,11 @@ def accept(self, visitor:ParseTreeVisitor): def predicateOperator(self): localctx = fugue_sqlParser.PredicateOperatorContext(self, self._ctx, self.state) - self.enterRule(localctx, 326, self.RULE_predicateOperator) + self.enterRule(localctx, 328, self.RULE_predicateOperator) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3237 + self.state = 3245 _la = self._input.LA(1) if not(_la==fugue_sqlParser.AND or ((((_la - 142)) & ~0x3f) == 0 and ((1 << (_la - 142)) & ((1 << (fugue_sqlParser.IN - 142)) | (1 << (fugue_sqlParser.NOT - 142)) | (1 << (fugue_sqlParser.OR - 142)))) != 0)): self._errHandler.recoverInline(self) @@ -22174,11 +22241,11 @@ def accept(self, visitor:ParseTreeVisitor): def booleanValue(self): localctx = fugue_sqlParser.BooleanValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 328, self.RULE_booleanValue) + self.enterRule(localctx, 330, self.RULE_booleanValue) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3239 + self.state = 3247 _la = self._input.LA(1) if not(_la==fugue_sqlParser.FALSE or _la==fugue_sqlParser.TRUE): self._errHandler.recoverInline(self) @@ -22226,20 +22293,20 @@ def accept(self, visitor:ParseTreeVisitor): def interval(self): localctx = fugue_sqlParser.IntervalContext(self, self._ctx, self.state) - self.enterRule(localctx, 330, self.RULE_interval) + self.enterRule(localctx, 332, self.RULE_interval) try: self.enterOuterAlt(localctx, 1) - self.state = 3241 + self.state = 3249 self.match(fugue_sqlParser.INTERVAL) - self.state = 3244 + self.state = 3252 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,416,self._ctx) + la_ = self._interp.adaptivePredict(self._input,417,self._ctx) if la_ == 1: - self.state = 3242 + self.state = 3250 self.errorCapturingMultiUnitsInterval() elif la_ == 2: - self.state = 3243 + self.state = 3251 self.errorCapturingUnitToUnitInterval() @@ -22281,16 +22348,16 @@ def accept(self, visitor:ParseTreeVisitor): def errorCapturingMultiUnitsInterval(self): localctx = fugue_sqlParser.ErrorCapturingMultiUnitsIntervalContext(self, self._ctx, self.state) - self.enterRule(localctx, 332, self.RULE_errorCapturingMultiUnitsInterval) + self.enterRule(localctx, 334, self.RULE_errorCapturingMultiUnitsInterval) try: self.enterOuterAlt(localctx, 1) - self.state = 3246 + self.state = 3254 self.multiUnitsInterval() - self.state = 3248 + self.state = 3256 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,417,self._ctx) + la_ = self._interp.adaptivePredict(self._input,418,self._ctx) if la_ == 1: - self.state = 3247 + self.state = 3255 self.unitToUnitInterval() @@ -22338,24 +22405,24 @@ def accept(self, visitor:ParseTreeVisitor): def multiUnitsInterval(self): localctx = fugue_sqlParser.MultiUnitsIntervalContext(self, self._ctx, self.state) - self.enterRule(localctx, 334, self.RULE_multiUnitsInterval) + self.enterRule(localctx, 336, self.RULE_multiUnitsInterval) try: self.enterOuterAlt(localctx, 1) - self.state = 3253 + self.state = 3261 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 3250 + self.state = 3258 self.intervalValue() - self.state = 3251 + self.state = 3259 self.intervalUnit() else: raise NoViableAltException(self) - self.state = 3255 + self.state = 3263 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,418,self._ctx) + _alt = self._interp.adaptivePredict(self._input,419,self._ctx) except RecognitionException as re: localctx.exception = re @@ -22401,20 +22468,20 @@ def accept(self, visitor:ParseTreeVisitor): def errorCapturingUnitToUnitInterval(self): localctx = fugue_sqlParser.ErrorCapturingUnitToUnitIntervalContext(self, self._ctx, self.state) - self.enterRule(localctx, 336, self.RULE_errorCapturingUnitToUnitInterval) + self.enterRule(localctx, 338, self.RULE_errorCapturingUnitToUnitInterval) try: self.enterOuterAlt(localctx, 1) - self.state = 3257 + self.state = 3265 localctx.body = self.unitToUnitInterval() - self.state = 3260 + self.state = 3268 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,419,self._ctx) + la_ = self._interp.adaptivePredict(self._input,420,self._ctx) if la_ == 1: - self.state = 3258 + self.state = 3266 localctx.error1 = self.multiUnitsInterval() elif la_ == 2: - self.state = 3259 + self.state = 3267 localctx.error2 = self.unitToUnitInterval() @@ -22465,16 +22532,16 @@ def accept(self, visitor:ParseTreeVisitor): def unitToUnitInterval(self): localctx = fugue_sqlParser.UnitToUnitIntervalContext(self, self._ctx, self.state) - self.enterRule(localctx, 338, self.RULE_unitToUnitInterval) + self.enterRule(localctx, 340, self.RULE_unitToUnitInterval) try: self.enterOuterAlt(localctx, 1) - self.state = 3262 + self.state = 3270 localctx.value = self.intervalValue() - self.state = 3263 + self.state = 3271 localctx.ifrom = self.intervalUnit() - self.state = 3264 + self.state = 3272 self.match(fugue_sqlParser.TO) - self.state = 3265 + self.state = 3273 localctx.to = self.intervalUnit() except RecognitionException as re: localctx.exception = re @@ -22521,19 +22588,19 @@ def accept(self, visitor:ParseTreeVisitor): def intervalValue(self): localctx = fugue_sqlParser.IntervalValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 340, self.RULE_intervalValue) + self.enterRule(localctx, 342, self.RULE_intervalValue) self._la = 0 # Token type try: - self.state = 3272 + self.state = 3280 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.PLUS, fugue_sqlParser.MINUS, fugue_sqlParser.INTEGER_VALUE, fugue_sqlParser.DECIMAL_VALUE]: self.enterOuterAlt(localctx, 1) - self.state = 3268 + self.state = 3276 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.PLUS or _la==fugue_sqlParser.MINUS: - self.state = 3267 + self.state = 3275 _la = self._input.LA(1) if not(_la==fugue_sqlParser.PLUS or _la==fugue_sqlParser.MINUS): self._errHandler.recoverInline(self) @@ -22542,7 +22609,7 @@ def intervalValue(self): self.consume() - self.state = 3270 + self.state = 3278 _la = self._input.LA(1) if not(_la==fugue_sqlParser.INTEGER_VALUE or _la==fugue_sqlParser.DECIMAL_VALUE): self._errHandler.recoverInline(self) @@ -22552,7 +22619,7 @@ def intervalValue(self): pass elif token in [fugue_sqlParser.STRING]: self.enterOuterAlt(localctx, 2) - self.state = 3271 + self.state = 3279 self.match(fugue_sqlParser.STRING) pass else: @@ -22610,50 +22677,50 @@ def accept(self, visitor:ParseTreeVisitor): def intervalUnit(self): localctx = fugue_sqlParser.IntervalUnitContext(self, self._ctx, self.state) - self.enterRule(localctx, 342, self.RULE_intervalUnit) + self.enterRule(localctx, 344, self.RULE_intervalUnit) try: - self.state = 3281 + self.state = 3289 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,422,self._ctx) + la_ = self._interp.adaptivePredict(self._input,423,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 3274 + self.state = 3282 self.match(fugue_sqlParser.DAY) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 3275 + self.state = 3283 self.match(fugue_sqlParser.HOUR) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 3276 + self.state = 3284 self.match(fugue_sqlParser.MINUTE) pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 3277 + self.state = 3285 self.match(fugue_sqlParser.MONTH) pass elif la_ == 5: self.enterOuterAlt(localctx, 5) - self.state = 3278 + self.state = 3286 self.match(fugue_sqlParser.SECOND) pass elif la_ == 6: self.enterOuterAlt(localctx, 6) - self.state = 3279 + self.state = 3287 self.match(fugue_sqlParser.YEAR) pass elif la_ == 7: self.enterOuterAlt(localctx, 7) - self.state = 3280 + self.state = 3288 self.identifier() pass @@ -22700,21 +22767,21 @@ def accept(self, visitor:ParseTreeVisitor): def colPosition(self): localctx = fugue_sqlParser.ColPositionContext(self, self._ctx, self.state) - self.enterRule(localctx, 344, self.RULE_colPosition) + self.enterRule(localctx, 346, self.RULE_colPosition) try: - self.state = 3286 + self.state = 3294 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.FIRST]: self.enterOuterAlt(localctx, 1) - self.state = 3283 + self.state = 3291 localctx.position = self.match(fugue_sqlParser.FIRST) pass elif token in [fugue_sqlParser.AFTER]: self.enterOuterAlt(localctx, 2) - self.state = 3284 + self.state = 3292 localctx.position = self.match(fugue_sqlParser.AFTER) - self.state = 3285 + self.state = 3293 localctx.afterCol = self.errorCapturingIdentifier() pass else: @@ -22807,66 +22874,66 @@ def accept(self, visitor:ParseTreeVisitor): def dataType(self): localctx = fugue_sqlParser.DataTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 346, self.RULE_dataType) + self.enterRule(localctx, 348, self.RULE_dataType) self._la = 0 # Token type try: - self.state = 3322 + self.state = 3330 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,428,self._ctx) + la_ = self._interp.adaptivePredict(self._input,429,self._ctx) if la_ == 1: localctx = fugue_sqlParser.ComplexDataTypeContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 3288 + self.state = 3296 localctx.icomplex = self.match(fugue_sqlParser.ARRAY) - self.state = 3289 + self.state = 3297 self.match(fugue_sqlParser.LT) - self.state = 3290 + self.state = 3298 self.dataType() - self.state = 3291 + self.state = 3299 self.match(fugue_sqlParser.GT) pass elif la_ == 2: localctx = fugue_sqlParser.ComplexDataTypeContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 3293 + self.state = 3301 localctx.icomplex = self.match(fugue_sqlParser.MAP) - self.state = 3294 + self.state = 3302 self.match(fugue_sqlParser.LT) - self.state = 3295 + self.state = 3303 self.dataType() - self.state = 3296 + self.state = 3304 self.match(fugue_sqlParser.T__0) - self.state = 3297 + self.state = 3305 self.dataType() - self.state = 3298 + self.state = 3306 self.match(fugue_sqlParser.GT) pass elif la_ == 3: localctx = fugue_sqlParser.ComplexDataTypeContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 3300 + self.state = 3308 localctx.icomplex = self.match(fugue_sqlParser.STRUCT) - self.state = 3307 + self.state = 3315 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.LT]: - self.state = 3301 + self.state = 3309 self.match(fugue_sqlParser.LT) - self.state = 3303 + self.state = 3311 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,424,self._ctx) + la_ = self._interp.adaptivePredict(self._input,425,self._ctx) if la_ == 1: - self.state = 3302 + self.state = 3310 self.complexColTypeList() - self.state = 3305 + self.state = 3313 self.match(fugue_sqlParser.GT) pass elif token in [fugue_sqlParser.NEQ]: - self.state = 3306 + self.state = 3314 self.match(fugue_sqlParser.NEQ) pass else: @@ -22877,29 +22944,29 @@ def dataType(self): elif la_ == 4: localctx = fugue_sqlParser.PrimitiveDataTypeContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 3309 + self.state = 3317 self.identifier() - self.state = 3320 + self.state = 3328 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,427,self._ctx) + la_ = self._interp.adaptivePredict(self._input,428,self._ctx) if la_ == 1: - self.state = 3310 + self.state = 3318 self.match(fugue_sqlParser.T__2) - self.state = 3311 + self.state = 3319 self.match(fugue_sqlParser.INTEGER_VALUE) - self.state = 3316 + self.state = 3324 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3312 + self.state = 3320 self.match(fugue_sqlParser.T__0) - self.state = 3313 + self.state = 3321 self.match(fugue_sqlParser.INTEGER_VALUE) - self.state = 3318 + self.state = 3326 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 3319 + self.state = 3327 self.match(fugue_sqlParser.T__3) @@ -22943,21 +23010,21 @@ def accept(self, visitor:ParseTreeVisitor): def qualifiedColTypeWithPositionList(self): localctx = fugue_sqlParser.QualifiedColTypeWithPositionListContext(self, self._ctx, self.state) - self.enterRule(localctx, 348, self.RULE_qualifiedColTypeWithPositionList) + self.enterRule(localctx, 350, self.RULE_qualifiedColTypeWithPositionList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3324 + self.state = 3332 self.qualifiedColTypeWithPosition() - self.state = 3329 + self.state = 3337 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3325 + self.state = 3333 self.match(fugue_sqlParser.T__0) - self.state = 3326 + self.state = 3334 self.qualifiedColTypeWithPosition() - self.state = 3331 + self.state = 3339 self._errHandler.sync(self) _la = self._input.LA(1) @@ -23014,37 +23081,37 @@ def accept(self, visitor:ParseTreeVisitor): def qualifiedColTypeWithPosition(self): localctx = fugue_sqlParser.QualifiedColTypeWithPositionContext(self, self._ctx, self.state) - self.enterRule(localctx, 350, self.RULE_qualifiedColTypeWithPosition) + self.enterRule(localctx, 352, self.RULE_qualifiedColTypeWithPosition) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3332 + self.state = 3340 localctx.name = self.multipartIdentifier() - self.state = 3333 + self.state = 3341 self.dataType() - self.state = 3336 + self.state = 3344 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 3334 + self.state = 3342 self.match(fugue_sqlParser.NOT) - self.state = 3335 + self.state = 3343 self.match(fugue_sqlParser.NULL) - self.state = 3339 + self.state = 3347 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.COMMENT: - self.state = 3338 + self.state = 3346 self.commentSpec() - self.state = 3342 + self.state = 3350 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.AFTER or _la==fugue_sqlParser.FIRST: - self.state = 3341 + self.state = 3349 self.colPosition() @@ -23085,23 +23152,23 @@ def accept(self, visitor:ParseTreeVisitor): def colTypeList(self): localctx = fugue_sqlParser.ColTypeListContext(self, self._ctx, self.state) - self.enterRule(localctx, 352, self.RULE_colTypeList) + self.enterRule(localctx, 354, self.RULE_colTypeList) try: self.enterOuterAlt(localctx, 1) - self.state = 3344 + self.state = 3352 self.colType() - self.state = 3349 + self.state = 3357 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,433,self._ctx) + _alt = self._interp.adaptivePredict(self._input,434,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 3345 + self.state = 3353 self.match(fugue_sqlParser.T__0) - self.state = 3346 + self.state = 3354 self.colType() - self.state = 3351 + self.state = 3359 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,433,self._ctx) + _alt = self._interp.adaptivePredict(self._input,434,self._ctx) except RecognitionException as re: localctx.exception = re @@ -23152,28 +23219,28 @@ def accept(self, visitor:ParseTreeVisitor): def colType(self): localctx = fugue_sqlParser.ColTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 354, self.RULE_colType) + self.enterRule(localctx, 356, self.RULE_colType) try: self.enterOuterAlt(localctx, 1) - self.state = 3352 + self.state = 3360 localctx.colName = self.errorCapturingIdentifier() - self.state = 3353 + self.state = 3361 self.dataType() - self.state = 3356 + self.state = 3364 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,434,self._ctx) + la_ = self._interp.adaptivePredict(self._input,435,self._ctx) if la_ == 1: - self.state = 3354 + self.state = 3362 self.match(fugue_sqlParser.NOT) - self.state = 3355 + self.state = 3363 self.match(fugue_sqlParser.NULL) - self.state = 3359 + self.state = 3367 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,435,self._ctx) + la_ = self._interp.adaptivePredict(self._input,436,self._ctx) if la_ == 1: - self.state = 3358 + self.state = 3366 self.commentSpec() @@ -23214,21 +23281,21 @@ def accept(self, visitor:ParseTreeVisitor): def complexColTypeList(self): localctx = fugue_sqlParser.ComplexColTypeListContext(self, self._ctx, self.state) - self.enterRule(localctx, 356, self.RULE_complexColTypeList) + self.enterRule(localctx, 358, self.RULE_complexColTypeList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3361 + self.state = 3369 self.complexColType() - self.state = 3366 + self.state = 3374 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3362 + self.state = 3370 self.match(fugue_sqlParser.T__0) - self.state = 3363 + self.state = 3371 self.complexColType() - self.state = 3368 + self.state = 3376 self._errHandler.sync(self) _la = self._input.LA(1) @@ -23280,31 +23347,31 @@ def accept(self, visitor:ParseTreeVisitor): def complexColType(self): localctx = fugue_sqlParser.ComplexColTypeContext(self, self._ctx, self.state) - self.enterRule(localctx, 358, self.RULE_complexColType) + self.enterRule(localctx, 360, self.RULE_complexColType) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3369 + self.state = 3377 self.identifier() - self.state = 3370 + self.state = 3378 self.match(fugue_sqlParser.T__1) - self.state = 3371 + self.state = 3379 self.dataType() - self.state = 3374 + self.state = 3382 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.NOT: - self.state = 3372 + self.state = 3380 self.match(fugue_sqlParser.NOT) - self.state = 3373 + self.state = 3381 self.match(fugue_sqlParser.NULL) - self.state = 3377 + self.state = 3385 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.COMMENT: - self.state = 3376 + self.state = 3384 self.commentSpec() @@ -23353,16 +23420,16 @@ def accept(self, visitor:ParseTreeVisitor): def whenClause(self): localctx = fugue_sqlParser.WhenClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 360, self.RULE_whenClause) + self.enterRule(localctx, 362, self.RULE_whenClause) try: self.enterOuterAlt(localctx, 1) - self.state = 3379 + self.state = 3387 self.match(fugue_sqlParser.WHEN) - self.state = 3380 + self.state = 3388 localctx.condition = self.expression() - self.state = 3381 + self.state = 3389 self.match(fugue_sqlParser.THEN) - self.state = 3382 + self.state = 3390 localctx.result = self.expression() except RecognitionException as re: localctx.exception = re @@ -23404,25 +23471,25 @@ def accept(self, visitor:ParseTreeVisitor): def windowClause(self): localctx = fugue_sqlParser.WindowClauseContext(self, self._ctx, self.state) - self.enterRule(localctx, 362, self.RULE_windowClause) + self.enterRule(localctx, 364, self.RULE_windowClause) try: self.enterOuterAlt(localctx, 1) - self.state = 3384 + self.state = 3392 self.match(fugue_sqlParser.WINDOW) - self.state = 3385 + self.state = 3393 self.namedWindow() - self.state = 3390 + self.state = 3398 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,439,self._ctx) + _alt = self._interp.adaptivePredict(self._input,440,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 3386 + self.state = 3394 self.match(fugue_sqlParser.T__0) - self.state = 3387 + self.state = 3395 self.namedWindow() - self.state = 3392 + self.state = 3400 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,439,self._ctx) + _alt = self._interp.adaptivePredict(self._input,440,self._ctx) except RecognitionException as re: localctx.exception = re @@ -23466,14 +23533,14 @@ def accept(self, visitor:ParseTreeVisitor): def namedWindow(self): localctx = fugue_sqlParser.NamedWindowContext(self, self._ctx, self.state) - self.enterRule(localctx, 364, self.RULE_namedWindow) + self.enterRule(localctx, 366, self.RULE_namedWindow) try: self.enterOuterAlt(localctx, 1) - self.state = 3393 + self.state = 3401 localctx.name = self.errorCapturingIdentifier() - self.state = 3394 + self.state = 3402 self.match(fugue_sqlParser.AS) - self.state = 3395 + self.state = 3403 self.windowSpec() except RecognitionException as re: localctx.exception = re @@ -23568,116 +23635,116 @@ def accept(self, visitor:ParseTreeVisitor): def windowSpec(self): localctx = fugue_sqlParser.WindowSpecContext(self, self._ctx, self.state) - self.enterRule(localctx, 366, self.RULE_windowSpec) + self.enterRule(localctx, 368, self.RULE_windowSpec) self._la = 0 # Token type try: - self.state = 3443 + self.state = 3451 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,447,self._ctx) + la_ = self._interp.adaptivePredict(self._input,448,self._ctx) if la_ == 1: localctx = fugue_sqlParser.WindowRefContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 3397 + self.state = 3405 localctx.name = self.errorCapturingIdentifier() pass elif la_ == 2: localctx = fugue_sqlParser.WindowRefContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 3398 + self.state = 3406 self.match(fugue_sqlParser.T__2) - self.state = 3399 + self.state = 3407 localctx.name = self.errorCapturingIdentifier() - self.state = 3400 + self.state = 3408 self.match(fugue_sqlParser.T__3) pass elif la_ == 3: localctx = fugue_sqlParser.WindowDefContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 3402 + self.state = 3410 self.match(fugue_sqlParser.T__2) - self.state = 3437 + self.state = 3445 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.CLUSTER]: - self.state = 3403 + self.state = 3411 self.match(fugue_sqlParser.CLUSTER) - self.state = 3404 + self.state = 3412 self.match(fugue_sqlParser.BY) - self.state = 3405 + self.state = 3413 localctx._expression = self.expression() localctx.partition.append(localctx._expression) - self.state = 3410 + self.state = 3418 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3406 + self.state = 3414 self.match(fugue_sqlParser.T__0) - self.state = 3407 + self.state = 3415 localctx._expression = self.expression() localctx.partition.append(localctx._expression) - self.state = 3412 + self.state = 3420 self._errHandler.sync(self) _la = self._input.LA(1) pass elif token in [fugue_sqlParser.T__3, fugue_sqlParser.DISTRIBUTE, fugue_sqlParser.ORDER, fugue_sqlParser.PARTITION, fugue_sqlParser.RANGE, fugue_sqlParser.ROWS, fugue_sqlParser.SORT]: - self.state = 3423 + self.state = 3431 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.DISTRIBUTE or _la==fugue_sqlParser.PARTITION: - self.state = 3413 + self.state = 3421 _la = self._input.LA(1) if not(_la==fugue_sqlParser.DISTRIBUTE or _la==fugue_sqlParser.PARTITION): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 3414 + self.state = 3422 self.match(fugue_sqlParser.BY) - self.state = 3415 + self.state = 3423 localctx._expression = self.expression() localctx.partition.append(localctx._expression) - self.state = 3420 + self.state = 3428 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3416 + self.state = 3424 self.match(fugue_sqlParser.T__0) - self.state = 3417 + self.state = 3425 localctx._expression = self.expression() localctx.partition.append(localctx._expression) - self.state = 3422 + self.state = 3430 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 3435 + self.state = 3443 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.ORDER or _la==fugue_sqlParser.SORT: - self.state = 3425 + self.state = 3433 _la = self._input.LA(1) if not(_la==fugue_sqlParser.ORDER or _la==fugue_sqlParser.SORT): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 3426 + self.state = 3434 self.match(fugue_sqlParser.BY) - self.state = 3427 + self.state = 3435 self.sortItem() - self.state = 3432 + self.state = 3440 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3428 + self.state = 3436 self.match(fugue_sqlParser.T__0) - self.state = 3429 + self.state = 3437 self.sortItem() - self.state = 3434 + self.state = 3442 self._errHandler.sync(self) _la = self._input.LA(1) @@ -23687,15 +23754,15 @@ def windowSpec(self): else: raise NoViableAltException(self) - self.state = 3440 + self.state = 3448 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.RANGE or _la==fugue_sqlParser.ROWS: - self.state = 3439 + self.state = 3447 self.windowFrame() - self.state = 3442 + self.state = 3450 self.match(fugue_sqlParser.T__3) pass @@ -23752,52 +23819,52 @@ def accept(self, visitor:ParseTreeVisitor): def windowFrame(self): localctx = fugue_sqlParser.WindowFrameContext(self, self._ctx, self.state) - self.enterRule(localctx, 368, self.RULE_windowFrame) + self.enterRule(localctx, 370, self.RULE_windowFrame) try: - self.state = 3461 + self.state = 3469 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,448,self._ctx) + la_ = self._interp.adaptivePredict(self._input,449,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 3445 + self.state = 3453 localctx.frameType = self.match(fugue_sqlParser.RANGE) - self.state = 3446 + self.state = 3454 localctx.start = self.frameBound() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 3447 + self.state = 3455 localctx.frameType = self.match(fugue_sqlParser.ROWS) - self.state = 3448 + self.state = 3456 localctx.start = self.frameBound() pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 3449 + self.state = 3457 localctx.frameType = self.match(fugue_sqlParser.RANGE) - self.state = 3450 + self.state = 3458 self.match(fugue_sqlParser.BETWEEN) - self.state = 3451 + self.state = 3459 localctx.start = self.frameBound() - self.state = 3452 + self.state = 3460 self.match(fugue_sqlParser.AND) - self.state = 3453 + self.state = 3461 localctx.end = self.frameBound() pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 3455 + self.state = 3463 localctx.frameType = self.match(fugue_sqlParser.ROWS) - self.state = 3456 + self.state = 3464 self.match(fugue_sqlParser.BETWEEN) - self.state = 3457 + self.state = 3465 localctx.start = self.frameBound() - self.state = 3458 + self.state = 3466 self.match(fugue_sqlParser.AND) - self.state = 3459 + self.state = 3467 localctx.end = self.frameBound() pass @@ -23852,17 +23919,17 @@ def accept(self, visitor:ParseTreeVisitor): def frameBound(self): localctx = fugue_sqlParser.FrameBoundContext(self, self._ctx, self.state) - self.enterRule(localctx, 370, self.RULE_frameBound) + self.enterRule(localctx, 372, self.RULE_frameBound) self._la = 0 # Token type try: - self.state = 3470 + self.state = 3478 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,449,self._ctx) + la_ = self._interp.adaptivePredict(self._input,450,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 3463 + self.state = 3471 self.match(fugue_sqlParser.UNBOUNDED) - self.state = 3464 + self.state = 3472 localctx.boundType = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.FOLLOWING or _la==fugue_sqlParser.PRECEDING): @@ -23874,17 +23941,17 @@ def frameBound(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 3465 + self.state = 3473 localctx.boundType = self.match(fugue_sqlParser.CURRENT) - self.state = 3466 + self.state = 3474 self.match(fugue_sqlParser.ROW) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 3467 + self.state = 3475 self.expression() - self.state = 3468 + self.state = 3476 localctx.boundType = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.FOLLOWING or _la==fugue_sqlParser.PRECEDING): @@ -23932,21 +23999,21 @@ def accept(self, visitor:ParseTreeVisitor): def qualifiedNameList(self): localctx = fugue_sqlParser.QualifiedNameListContext(self, self._ctx, self.state) - self.enterRule(localctx, 372, self.RULE_qualifiedNameList) + self.enterRule(localctx, 374, self.RULE_qualifiedNameList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3472 + self.state = 3480 self.qualifiedName() - self.state = 3477 + self.state = 3485 self._errHandler.sync(self) _la = self._input.LA(1) while _la==fugue_sqlParser.T__0: - self.state = 3473 + self.state = 3481 self.match(fugue_sqlParser.T__0) - self.state = 3474 + self.state = 3482 self.qualifiedName() - self.state = 3479 + self.state = 3487 self._errHandler.sync(self) _la = self._input.LA(1) @@ -23993,32 +24060,32 @@ def accept(self, visitor:ParseTreeVisitor): def functionName(self): localctx = fugue_sqlParser.FunctionNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 374, self.RULE_functionName) + self.enterRule(localctx, 376, self.RULE_functionName) try: - self.state = 3484 + self.state = 3492 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,451,self._ctx) + la_ = self._interp.adaptivePredict(self._input,452,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 3480 + self.state = 3488 self.qualifiedName() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 3481 + self.state = 3489 self.match(fugue_sqlParser.FILTER) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 3482 + self.state = 3490 self.match(fugue_sqlParser.LEFT) pass elif la_ == 4: self.enterOuterAlt(localctx, 4) - self.state = 3483 + self.state = 3491 self.match(fugue_sqlParser.RIGHT) pass @@ -24060,23 +24127,23 @@ def accept(self, visitor:ParseTreeVisitor): def qualifiedName(self): localctx = fugue_sqlParser.QualifiedNameContext(self, self._ctx, self.state) - self.enterRule(localctx, 376, self.RULE_qualifiedName) + self.enterRule(localctx, 378, self.RULE_qualifiedName) try: self.enterOuterAlt(localctx, 1) - self.state = 3486 + self.state = 3494 self.identifier() - self.state = 3491 + self.state = 3499 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,452,self._ctx) + _alt = self._interp.adaptivePredict(self._input,453,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 3487 + self.state = 3495 self.match(fugue_sqlParser.T__4) - self.state = 3488 + self.state = 3496 self.identifier() - self.state = 3493 + self.state = 3501 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,452,self._ctx) + _alt = self._interp.adaptivePredict(self._input,453,self._ctx) except RecognitionException as re: localctx.exception = re @@ -24116,12 +24183,12 @@ def accept(self, visitor:ParseTreeVisitor): def errorCapturingIdentifier(self): localctx = fugue_sqlParser.ErrorCapturingIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 378, self.RULE_errorCapturingIdentifier) + self.enterRule(localctx, 380, self.RULE_errorCapturingIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 3494 + self.state = 3502 self.identifier() - self.state = 3495 + self.state = 3503 self.errorCapturingIdentifierExtra() except RecognitionException as re: localctx.exception = re @@ -24191,29 +24258,29 @@ def accept(self, visitor:ParseTreeVisitor): def errorCapturingIdentifierExtra(self): localctx = fugue_sqlParser.ErrorCapturingIdentifierExtraContext(self, self._ctx, self.state) - self.enterRule(localctx, 380, self.RULE_errorCapturingIdentifierExtra) + self.enterRule(localctx, 382, self.RULE_errorCapturingIdentifierExtra) try: - self.state = 3504 + self.state = 3512 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,454,self._ctx) + la_ = self._interp.adaptivePredict(self._input,455,self._ctx) if la_ == 1: localctx = fugue_sqlParser.ErrorIdentContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 3499 + self.state = 3507 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt == 1: - self.state = 3497 + self.state = 3505 self.match(fugue_sqlParser.MINUS) - self.state = 3498 + self.state = 3506 self.identifier() else: raise NoViableAltException(self) - self.state = 3501 + self.state = 3509 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,453,self._ctx) + _alt = self._interp.adaptivePredict(self._input,454,self._ctx) pass @@ -24262,24 +24329,24 @@ def accept(self, visitor:ParseTreeVisitor): def identifier(self): localctx = fugue_sqlParser.IdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 382, self.RULE_identifier) + self.enterRule(localctx, 384, self.RULE_identifier) try: - self.state = 3509 + self.state = 3517 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,455,self._ctx) + la_ = self._interp.adaptivePredict(self._input,456,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 3506 + self.state = 3514 self.strictIdentifier() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 3507 + self.state = 3515 if not not self.SQL_standard_keyword_behavior: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "not self.SQL_standard_keyword_behavior") - self.state = 3508 + self.state = 3516 self.strictNonReserved() pass @@ -24352,44 +24419,44 @@ def accept(self, visitor:ParseTreeVisitor): def strictIdentifier(self): localctx = fugue_sqlParser.StrictIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 384, self.RULE_strictIdentifier) + self.enterRule(localctx, 386, self.RULE_strictIdentifier) try: - self.state = 3517 + self.state = 3525 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,456,self._ctx) + la_ = self._interp.adaptivePredict(self._input,457,self._ctx) if la_ == 1: localctx = fugue_sqlParser.UnquotedIdentifierContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 3511 + self.state = 3519 self.match(fugue_sqlParser.IDENTIFIER) pass elif la_ == 2: localctx = fugue_sqlParser.QuotedIdentifierAlternativeContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 3512 + self.state = 3520 self.quotedIdentifier() pass elif la_ == 3: localctx = fugue_sqlParser.UnquotedIdentifierContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 3513 + self.state = 3521 if not self.SQL_standard_keyword_behavior: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.SQL_standard_keyword_behavior") - self.state = 3514 + self.state = 3522 self.ansiNonReserved() pass elif la_ == 4: localctx = fugue_sqlParser.UnquotedIdentifierContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 3515 + self.state = 3523 if not not self.SQL_standard_keyword_behavior: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "not self.SQL_standard_keyword_behavior") - self.state = 3516 + self.state = 3524 self.nonReserved() pass @@ -24427,10 +24494,10 @@ def accept(self, visitor:ParseTreeVisitor): def quotedIdentifier(self): localctx = fugue_sqlParser.QuotedIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 386, self.RULE_quotedIdentifier) + self.enterRule(localctx, 388, self.RULE_quotedIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 3519 + self.state = 3527 self.match(fugue_sqlParser.BACKQUOTED_IDENTIFIER) except RecognitionException as re: localctx.exception = re @@ -24625,66 +24692,66 @@ def accept(self, visitor:ParseTreeVisitor): def number(self): localctx = fugue_sqlParser.NumberContext(self, self._ctx, self.state) - self.enterRule(localctx, 388, self.RULE_number) + self.enterRule(localctx, 390, self.RULE_number) self._la = 0 # Token type try: - self.state = 3560 + self.state = 3568 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,466,self._ctx) + la_ = self._interp.adaptivePredict(self._input,467,self._ctx) if la_ == 1: localctx = fugue_sqlParser.ExponentLiteralContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 3521 + self.state = 3529 if not not fugue_sqlParser.legacy_exponent_literal_as_decimal_enabled: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "not fugue_sqlParser.legacy_exponent_literal_as_decimal_enabled") - self.state = 3523 + self.state = 3531 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3522 + self.state = 3530 self.match(fugue_sqlParser.MINUS) - self.state = 3525 + self.state = 3533 self.match(fugue_sqlParser.EXPONENT_VALUE) pass elif la_ == 2: localctx = fugue_sqlParser.DecimalLiteralContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 3526 + self.state = 3534 if not not fugue_sqlParser.legacy_exponent_literal_as_decimal_enabled: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "not fugue_sqlParser.legacy_exponent_literal_as_decimal_enabled") - self.state = 3528 + self.state = 3536 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3527 + self.state = 3535 self.match(fugue_sqlParser.MINUS) - self.state = 3530 + self.state = 3538 self.match(fugue_sqlParser.DECIMAL_VALUE) pass elif la_ == 3: localctx = fugue_sqlParser.LegacyDecimalLiteralContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 3531 + self.state = 3539 if not fugue_sqlParser.legacy_exponent_literal_as_decimal_enabled: from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "fugue_sqlParser.legacy_exponent_literal_as_decimal_enabled") - self.state = 3533 + self.state = 3541 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3532 + self.state = 3540 self.match(fugue_sqlParser.MINUS) - self.state = 3535 + self.state = 3543 _la = self._input.LA(1) if not(_la==fugue_sqlParser.EXPONENT_VALUE or _la==fugue_sqlParser.DECIMAL_VALUE): self._errHandler.recoverInline(self) @@ -24696,90 +24763,90 @@ def number(self): elif la_ == 4: localctx = fugue_sqlParser.IntegerLiteralContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 3537 + self.state = 3545 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3536 + self.state = 3544 self.match(fugue_sqlParser.MINUS) - self.state = 3539 + self.state = 3547 self.match(fugue_sqlParser.INTEGER_VALUE) pass elif la_ == 5: localctx = fugue_sqlParser.BigIntLiteralContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 3541 + self.state = 3549 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3540 + self.state = 3548 self.match(fugue_sqlParser.MINUS) - self.state = 3543 + self.state = 3551 self.match(fugue_sqlParser.BIGINT_LITERAL) pass elif la_ == 6: localctx = fugue_sqlParser.SmallIntLiteralContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 3545 + self.state = 3553 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3544 + self.state = 3552 self.match(fugue_sqlParser.MINUS) - self.state = 3547 + self.state = 3555 self.match(fugue_sqlParser.SMALLINT_LITERAL) pass elif la_ == 7: localctx = fugue_sqlParser.TinyIntLiteralContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 3549 + self.state = 3557 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3548 + self.state = 3556 self.match(fugue_sqlParser.MINUS) - self.state = 3551 + self.state = 3559 self.match(fugue_sqlParser.TINYINT_LITERAL) pass elif la_ == 8: localctx = fugue_sqlParser.DoubleLiteralContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 3553 + self.state = 3561 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3552 + self.state = 3560 self.match(fugue_sqlParser.MINUS) - self.state = 3555 + self.state = 3563 self.match(fugue_sqlParser.DOUBLE_LITERAL) pass elif la_ == 9: localctx = fugue_sqlParser.BigDecimalLiteralContext(self, localctx) self.enterOuterAlt(localctx, 9) - self.state = 3557 + self.state = 3565 self._errHandler.sync(self) _la = self._input.LA(1) if _la==fugue_sqlParser.MINUS: - self.state = 3556 + self.state = 3564 self.match(fugue_sqlParser.MINUS) - self.state = 3559 + self.state = 3567 self.match(fugue_sqlParser.BIGDECIMAL_LITERAL) pass @@ -24842,32 +24909,32 @@ def accept(self, visitor:ParseTreeVisitor): def alterColumnAction(self): localctx = fugue_sqlParser.AlterColumnActionContext(self, self._ctx, self.state) - self.enterRule(localctx, 390, self.RULE_alterColumnAction) + self.enterRule(localctx, 392, self.RULE_alterColumnAction) self._la = 0 # Token type try: - self.state = 3569 + self.state = 3577 self._errHandler.sync(self) token = self._input.LA(1) if token in [fugue_sqlParser.TYPE]: self.enterOuterAlt(localctx, 1) - self.state = 3562 + self.state = 3570 self.match(fugue_sqlParser.TYPE) - self.state = 3563 + self.state = 3571 self.dataType() pass elif token in [fugue_sqlParser.COMMENT]: self.enterOuterAlt(localctx, 2) - self.state = 3564 + self.state = 3572 self.commentSpec() pass elif token in [fugue_sqlParser.AFTER, fugue_sqlParser.FIRST]: self.enterOuterAlt(localctx, 3) - self.state = 3565 + self.state = 3573 self.colPosition() pass elif token in [fugue_sqlParser.DROP, fugue_sqlParser.SET]: self.enterOuterAlt(localctx, 4) - self.state = 3566 + self.state = 3574 localctx.setOrDrop = self._input.LT(1) _la = self._input.LA(1) if not(_la==fugue_sqlParser.DROP or _la==fugue_sqlParser.SET): @@ -24875,9 +24942,9 @@ def alterColumnAction(self): else: self._errHandler.reportMatch(self) self.consume() - self.state = 3567 + self.state = 3575 self.match(fugue_sqlParser.NOT) - self.state = 3568 + self.state = 3576 self.match(fugue_sqlParser.NULL) pass else: @@ -25438,11 +25505,11 @@ def accept(self, visitor:ParseTreeVisitor): def ansiNonReserved(self): localctx = fugue_sqlParser.AnsiNonReservedContext(self, self._ctx, self.state) - self.enterRule(localctx, 392, self.RULE_ansiNonReserved) + self.enterRule(localctx, 394, self.RULE_ansiNonReserved) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3571 + self.state = 3579 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.ADD) | (1 << fugue_sqlParser.AFTER) | (1 << fugue_sqlParser.ALTER) | (1 << fugue_sqlParser.ANALYZE) | (1 << fugue_sqlParser.ARCHIVE) | (1 << fugue_sqlParser.ARRAY) | (1 << fugue_sqlParser.ASC) | (1 << fugue_sqlParser.AT) | (1 << fugue_sqlParser.BETWEEN) | (1 << fugue_sqlParser.BUCKET) | (1 << fugue_sqlParser.BUCKETS) | (1 << fugue_sqlParser.BY) | (1 << fugue_sqlParser.CACHE) | (1 << fugue_sqlParser.CASCADE))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (fugue_sqlParser.CHANGE - 64)) | (1 << (fugue_sqlParser.CLEAR - 64)) | (1 << (fugue_sqlParser.CLUSTER - 64)) | (1 << (fugue_sqlParser.CLUSTERED - 64)) | (1 << (fugue_sqlParser.CODEGEN - 64)) | (1 << (fugue_sqlParser.COLLECTION - 64)) | (1 << (fugue_sqlParser.COLUMNS - 64)) | (1 << (fugue_sqlParser.COMMENT - 64)) | (1 << (fugue_sqlParser.COMMIT - 64)) | (1 << (fugue_sqlParser.COMPACT - 64)) | (1 << (fugue_sqlParser.COMPACTIONS - 64)) | (1 << (fugue_sqlParser.COMPUTE - 64)) | (1 << (fugue_sqlParser.CONCATENATE - 64)) | (1 << (fugue_sqlParser.COST - 64)) | (1 << (fugue_sqlParser.CUBE - 64)) | (1 << (fugue_sqlParser.CURRENT - 64)) | (1 << (fugue_sqlParser.DATA - 64)) | (1 << (fugue_sqlParser.DATABASE - 64)) | (1 << (fugue_sqlParser.DATABASES - 64)) | (1 << (fugue_sqlParser.DBPROPERTIES - 64)) | (1 << (fugue_sqlParser.DEFINED - 64)) | (1 << (fugue_sqlParser.DELETE - 64)) | (1 << (fugue_sqlParser.DELIMITED - 64)) | (1 << (fugue_sqlParser.DESC - 64)) | (1 << (fugue_sqlParser.DESCRIBE - 64)) | (1 << (fugue_sqlParser.DFS - 64)) | (1 << (fugue_sqlParser.DIRECTORIES - 64)) | (1 << (fugue_sqlParser.DIRECTORY - 64)) | (1 << (fugue_sqlParser.DISTRIBUTE - 64)) | (1 << (fugue_sqlParser.DROP - 64)) | (1 << (fugue_sqlParser.ESCAPED - 64)) | (1 << (fugue_sqlParser.EXCHANGE - 64)) | (1 << (fugue_sqlParser.EXISTS - 64)) | (1 << (fugue_sqlParser.EXPLAIN - 64)) | (1 << (fugue_sqlParser.EXPORT - 64)) | (1 << (fugue_sqlParser.EXTENDED - 64)) | (1 << (fugue_sqlParser.EXTERNAL - 64)) | (1 << (fugue_sqlParser.EXTRACT - 64)) | (1 << (fugue_sqlParser.FIELDS - 64)) | (1 << (fugue_sqlParser.FILEFORMAT - 64)) | (1 << (fugue_sqlParser.FIRST - 64)) | (1 << (fugue_sqlParser.FOLLOWING - 64)) | (1 << (fugue_sqlParser.FORMAT - 64)))) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & ((1 << (fugue_sqlParser.FORMATTED - 128)) | (1 << (fugue_sqlParser.FUNCTION - 128)) | (1 << (fugue_sqlParser.FUNCTIONS - 128)) | (1 << (fugue_sqlParser.GLOBAL - 128)) | (1 << (fugue_sqlParser.GROUPING - 128)) | (1 << (fugue_sqlParser.IF - 128)) | (1 << (fugue_sqlParser.IGNORE - 128)) | (1 << (fugue_sqlParser.IMPORT - 128)) | (1 << (fugue_sqlParser.INDEX - 128)) | (1 << (fugue_sqlParser.INDEXES - 128)) | (1 << (fugue_sqlParser.INPATH - 128)) | (1 << (fugue_sqlParser.INPUTFORMAT - 128)) | (1 << (fugue_sqlParser.INSERT - 128)) | (1 << (fugue_sqlParser.INTERVAL - 128)) | (1 << (fugue_sqlParser.ITEMS - 128)) | (1 << (fugue_sqlParser.KEYS - 128)) | (1 << (fugue_sqlParser.LAST - 128)) | (1 << (fugue_sqlParser.LATERAL - 128)) | (1 << (fugue_sqlParser.LAZY - 128)) | (1 << (fugue_sqlParser.LIKE - 128)) | (1 << (fugue_sqlParser.LIMIT - 128)) | (1 << (fugue_sqlParser.LINES - 128)) | (1 << (fugue_sqlParser.LIST - 128)) | (1 << (fugue_sqlParser.LOAD - 128)) | (1 << (fugue_sqlParser.LOCAL - 128)) | (1 << (fugue_sqlParser.LOCATION - 128)) | (1 << (fugue_sqlParser.LOCK - 128)) | (1 << (fugue_sqlParser.LOCKS - 128)) | (1 << (fugue_sqlParser.LOGICAL - 128)) | (1 << (fugue_sqlParser.MACRO - 128)) | (1 << (fugue_sqlParser.MAP - 128)) | (1 << (fugue_sqlParser.MATCHED - 128)) | (1 << (fugue_sqlParser.MERGE - 128)) | (1 << (fugue_sqlParser.MSCK - 128)) | (1 << (fugue_sqlParser.NAMESPACE - 128)) | (1 << (fugue_sqlParser.NAMESPACES - 128)) | (1 << (fugue_sqlParser.NO - 128)) | (1 << (fugue_sqlParser.NULLS - 128)) | (1 << (fugue_sqlParser.OF - 128)) | (1 << (fugue_sqlParser.OPTION - 128)) | (1 << (fugue_sqlParser.OPTIONS - 128)))) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & ((1 << (fugue_sqlParser.OUT - 192)) | (1 << (fugue_sqlParser.OUTPUTFORMAT - 192)) | (1 << (fugue_sqlParser.OVER - 192)) | (1 << (fugue_sqlParser.OVERLAY - 192)) | (1 << (fugue_sqlParser.OVERWRITE - 192)) | (1 << (fugue_sqlParser.PARTITION - 192)) | (1 << (fugue_sqlParser.PARTITIONED - 192)) | (1 << (fugue_sqlParser.PARTITIONS - 192)) | (1 << (fugue_sqlParser.PERCENTLIT - 192)) | (1 << (fugue_sqlParser.PIVOT - 192)) | (1 << (fugue_sqlParser.PLACING - 192)) | (1 << (fugue_sqlParser.POSITION - 192)) | (1 << (fugue_sqlParser.PRECEDING - 192)) | (1 << (fugue_sqlParser.PRINCIPALS - 192)) | (1 << (fugue_sqlParser.PROPERTIES - 192)) | (1 << (fugue_sqlParser.PURGE - 192)) | (1 << (fugue_sqlParser.QUERY - 192)) | (1 << (fugue_sqlParser.RANGE - 192)) | (1 << (fugue_sqlParser.RECORDREADER - 192)) | (1 << (fugue_sqlParser.RECORDWRITER - 192)) | (1 << (fugue_sqlParser.RECOVER - 192)) | (1 << (fugue_sqlParser.REDUCE - 192)) | (1 << (fugue_sqlParser.REFRESH - 192)) | (1 << (fugue_sqlParser.RENAME - 192)) | (1 << (fugue_sqlParser.REPAIR - 192)) | (1 << (fugue_sqlParser.REPLACE - 192)) | (1 << (fugue_sqlParser.RESET - 192)) | (1 << (fugue_sqlParser.RESTRICT - 192)) | (1 << (fugue_sqlParser.REVOKE - 192)) | (1 << (fugue_sqlParser.RLIKE - 192)) | (1 << (fugue_sqlParser.ROLE - 192)) | (1 << (fugue_sqlParser.ROLES - 192)) | (1 << (fugue_sqlParser.ROLLBACK - 192)) | (1 << (fugue_sqlParser.ROLLUP - 192)) | (1 << (fugue_sqlParser.ROW - 192)) | (1 << (fugue_sqlParser.ROWS - 192)) | (1 << (fugue_sqlParser.SCHEMA - 192)) | (1 << (fugue_sqlParser.SEPARATED - 192)) | (1 << (fugue_sqlParser.SERDE - 192)) | (1 << (fugue_sqlParser.SERDEPROPERTIES - 192)) | (1 << (fugue_sqlParser.SET - 192)) | (1 << (fugue_sqlParser.SETS - 192)) | (1 << (fugue_sqlParser.SHOW - 192)) | (1 << (fugue_sqlParser.SKEWED - 192)) | (1 << (fugue_sqlParser.SORT - 192)) | (1 << (fugue_sqlParser.SORTED - 192)) | (1 << (fugue_sqlParser.START - 192)) | (1 << (fugue_sqlParser.STATISTICS - 192)) | (1 << (fugue_sqlParser.STORED - 192)) | (1 << (fugue_sqlParser.STRATIFY - 192)) | (1 << (fugue_sqlParser.STRUCT - 192)) | (1 << (fugue_sqlParser.SUBSTR - 192)) | (1 << (fugue_sqlParser.SUBSTRING - 192)))) != 0) or ((((_la - 257)) & ~0x3f) == 0 and ((1 << (_la - 257)) & ((1 << (fugue_sqlParser.TABLES - 257)) | (1 << (fugue_sqlParser.TABLESAMPLE - 257)) | (1 << (fugue_sqlParser.TBLPROPERTIES - 257)) | (1 << (fugue_sqlParser.TEMPORARY - 257)) | (1 << (fugue_sqlParser.TERMINATED - 257)) | (1 << (fugue_sqlParser.TOUCH - 257)) | (1 << (fugue_sqlParser.TRANSACTION - 257)) | (1 << (fugue_sqlParser.TRANSACTIONS - 257)) | (1 << (fugue_sqlParser.TRANSFORM - 257)) | (1 << (fugue_sqlParser.TRIM - 257)) | (1 << (fugue_sqlParser.TRUE - 257)) | (1 << (fugue_sqlParser.TRUNCATE - 257)) | (1 << (fugue_sqlParser.UNARCHIVE - 257)) | (1 << (fugue_sqlParser.UNBOUNDED - 257)) | (1 << (fugue_sqlParser.UNCACHE - 257)) | (1 << (fugue_sqlParser.UNLOCK - 257)) | (1 << (fugue_sqlParser.UNSET - 257)) | (1 << (fugue_sqlParser.UPDATE - 257)) | (1 << (fugue_sqlParser.USE - 257)) | (1 << (fugue_sqlParser.VALUES - 257)) | (1 << (fugue_sqlParser.VIEW - 257)) | (1 << (fugue_sqlParser.VIEWS - 257)) | (1 << (fugue_sqlParser.WINDOW - 257)) | (1 << (fugue_sqlParser.DIV - 257)))) != 0)): self._errHandler.recoverInline(self) @@ -25524,11 +25591,11 @@ def accept(self, visitor:ParseTreeVisitor): def strictNonReserved(self): localctx = fugue_sqlParser.StrictNonReservedContext(self, self._ctx, self.state) - self.enterRule(localctx, 394, self.RULE_strictNonReserved) + self.enterRule(localctx, 396, self.RULE_strictNonReserved) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3573 + self.state = 3581 _la = self._input.LA(1) if not(((((_la - 47)) & ~0x3f) == 0 and ((1 << (_la - 47)) & ((1 << (fugue_sqlParser.ANTI - 47)) | (1 << (fugue_sqlParser.CROSS - 47)) | (1 << (fugue_sqlParser.EXCEPT - 47)))) != 0) or ((((_la - 130)) & ~0x3f) == 0 and ((1 << (_la - 130)) & ((1 << (fugue_sqlParser.FULL - 130)) | (1 << (fugue_sqlParser.INNER - 130)) | (1 << (fugue_sqlParser.INTERSECT - 130)) | (1 << (fugue_sqlParser.JOIN - 130)) | (1 << (fugue_sqlParser.LEFT - 130)) | (1 << (fugue_sqlParser.NATURAL - 130)) | (1 << (fugue_sqlParser.ON - 130)))) != 0) or ((((_la - 225)) & ~0x3f) == 0 and ((1 << (_la - 225)) & ((1 << (fugue_sqlParser.RIGHT - 225)) | (1 << (fugue_sqlParser.SEMI - 225)) | (1 << (fugue_sqlParser.SETMINUS - 225)) | (1 << (fugue_sqlParser.UNION - 225)) | (1 << (fugue_sqlParser.USING - 225)))) != 0)): self._errHandler.recoverInline(self) @@ -26279,11 +26346,11 @@ def accept(self, visitor:ParseTreeVisitor): def nonReserved(self): localctx = fugue_sqlParser.NonReservedContext(self, self._ctx, self.state) - self.enterRule(localctx, 396, self.RULE_nonReserved) + self.enterRule(localctx, 398, self.RULE_nonReserved) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 3575 + self.state = 3583 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << fugue_sqlParser.ADD) | (1 << fugue_sqlParser.AFTER) | (1 << fugue_sqlParser.ALL) | (1 << fugue_sqlParser.ALTER) | (1 << fugue_sqlParser.ANALYZE) | (1 << fugue_sqlParser.AND) | (1 << fugue_sqlParser.ANY) | (1 << fugue_sqlParser.ARCHIVE) | (1 << fugue_sqlParser.ARRAY) | (1 << fugue_sqlParser.AS) | (1 << fugue_sqlParser.ASC) | (1 << fugue_sqlParser.AT) | (1 << fugue_sqlParser.AUTHORIZATION) | (1 << fugue_sqlParser.BETWEEN) | (1 << fugue_sqlParser.BOTH) | (1 << fugue_sqlParser.BUCKET) | (1 << fugue_sqlParser.BUCKETS) | (1 << fugue_sqlParser.BY) | (1 << fugue_sqlParser.CACHE) | (1 << fugue_sqlParser.CASCADE) | (1 << fugue_sqlParser.CASE) | (1 << fugue_sqlParser.CAST))) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & ((1 << (fugue_sqlParser.CHANGE - 64)) | (1 << (fugue_sqlParser.CHECK - 64)) | (1 << (fugue_sqlParser.CLEAR - 64)) | (1 << (fugue_sqlParser.CLUSTER - 64)) | (1 << (fugue_sqlParser.CLUSTERED - 64)) | (1 << (fugue_sqlParser.CODEGEN - 64)) | (1 << (fugue_sqlParser.COLLATE - 64)) | (1 << (fugue_sqlParser.COLLECTION - 64)) | (1 << (fugue_sqlParser.COLUMN - 64)) | (1 << (fugue_sqlParser.COLUMNS - 64)) | (1 << (fugue_sqlParser.COMMENT - 64)) | (1 << (fugue_sqlParser.COMMIT - 64)) | (1 << (fugue_sqlParser.COMPACT - 64)) | (1 << (fugue_sqlParser.COMPACTIONS - 64)) | (1 << (fugue_sqlParser.COMPUTE - 64)) | (1 << (fugue_sqlParser.CONCATENATE - 64)) | (1 << (fugue_sqlParser.CONSTRAINT - 64)) | (1 << (fugue_sqlParser.COST - 64)) | (1 << (fugue_sqlParser.CREATE - 64)) | (1 << (fugue_sqlParser.CUBE - 64)) | (1 << (fugue_sqlParser.CURRENT - 64)) | (1 << (fugue_sqlParser.CURRENT_DATE - 64)) | (1 << (fugue_sqlParser.CURRENT_TIME - 64)) | (1 << (fugue_sqlParser.CURRENT_TIMESTAMP - 64)) | (1 << (fugue_sqlParser.CURRENT_USER - 64)) | (1 << (fugue_sqlParser.DATA - 64)) | (1 << (fugue_sqlParser.DATABASE - 64)) | (1 << (fugue_sqlParser.DATABASES - 64)) | (1 << (fugue_sqlParser.DAY - 64)) | (1 << (fugue_sqlParser.DBPROPERTIES - 64)) | (1 << (fugue_sqlParser.DEFINED - 64)) | (1 << (fugue_sqlParser.DELETE - 64)) | (1 << (fugue_sqlParser.DELIMITED - 64)) | (1 << (fugue_sqlParser.DESC - 64)) | (1 << (fugue_sqlParser.DESCRIBE - 64)) | (1 << (fugue_sqlParser.DFS - 64)) | (1 << (fugue_sqlParser.DIRECTORIES - 64)) | (1 << (fugue_sqlParser.DIRECTORY - 64)) | (1 << (fugue_sqlParser.DISTINCT - 64)) | (1 << (fugue_sqlParser.DISTRIBUTE - 64)) | (1 << (fugue_sqlParser.DROP - 64)) | (1 << (fugue_sqlParser.ELSE - 64)) | (1 << (fugue_sqlParser.END - 64)) | (1 << (fugue_sqlParser.ESCAPE - 64)) | (1 << (fugue_sqlParser.ESCAPED - 64)) | (1 << (fugue_sqlParser.EXCHANGE - 64)) | (1 << (fugue_sqlParser.EXISTS - 64)) | (1 << (fugue_sqlParser.EXPLAIN - 64)) | (1 << (fugue_sqlParser.EXPORT - 64)) | (1 << (fugue_sqlParser.EXTENDED - 64)) | (1 << (fugue_sqlParser.EXTERNAL - 64)) | (1 << (fugue_sqlParser.EXTRACT - 64)) | (1 << (fugue_sqlParser.FALSE - 64)) | (1 << (fugue_sqlParser.FETCH - 64)) | (1 << (fugue_sqlParser.FIELDS - 64)) | (1 << (fugue_sqlParser.FILTER - 64)) | (1 << (fugue_sqlParser.FILEFORMAT - 64)) | (1 << (fugue_sqlParser.FIRST - 64)) | (1 << (fugue_sqlParser.FOLLOWING - 64)) | (1 << (fugue_sqlParser.FOR - 64)) | (1 << (fugue_sqlParser.FOREIGN - 64)) | (1 << (fugue_sqlParser.FORMAT - 64)))) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & ((1 << (fugue_sqlParser.FORMATTED - 128)) | (1 << (fugue_sqlParser.FROM - 128)) | (1 << (fugue_sqlParser.FUNCTION - 128)) | (1 << (fugue_sqlParser.FUNCTIONS - 128)) | (1 << (fugue_sqlParser.GLOBAL - 128)) | (1 << (fugue_sqlParser.GRANT - 128)) | (1 << (fugue_sqlParser.GROUP - 128)) | (1 << (fugue_sqlParser.GROUPING - 128)) | (1 << (fugue_sqlParser.HAVING - 128)) | (1 << (fugue_sqlParser.HOUR - 128)) | (1 << (fugue_sqlParser.IF - 128)) | (1 << (fugue_sqlParser.IGNORE - 128)) | (1 << (fugue_sqlParser.IMPORT - 128)) | (1 << (fugue_sqlParser.IN - 128)) | (1 << (fugue_sqlParser.INDEX - 128)) | (1 << (fugue_sqlParser.INDEXES - 128)) | (1 << (fugue_sqlParser.INPATH - 128)) | (1 << (fugue_sqlParser.INPUTFORMAT - 128)) | (1 << (fugue_sqlParser.INSERT - 128)) | (1 << (fugue_sqlParser.INTERVAL - 128)) | (1 << (fugue_sqlParser.INTO - 128)) | (1 << (fugue_sqlParser.IS - 128)) | (1 << (fugue_sqlParser.ITEMS - 128)) | (1 << (fugue_sqlParser.KEYS - 128)) | (1 << (fugue_sqlParser.LAST - 128)) | (1 << (fugue_sqlParser.LATERAL - 128)) | (1 << (fugue_sqlParser.LAZY - 128)) | (1 << (fugue_sqlParser.LEADING - 128)) | (1 << (fugue_sqlParser.LIKE - 128)) | (1 << (fugue_sqlParser.LIMIT - 128)) | (1 << (fugue_sqlParser.LINES - 128)) | (1 << (fugue_sqlParser.LIST - 128)) | (1 << (fugue_sqlParser.LOAD - 128)) | (1 << (fugue_sqlParser.LOCAL - 128)) | (1 << (fugue_sqlParser.LOCATION - 128)) | (1 << (fugue_sqlParser.LOCK - 128)) | (1 << (fugue_sqlParser.LOCKS - 128)) | (1 << (fugue_sqlParser.LOGICAL - 128)) | (1 << (fugue_sqlParser.MACRO - 128)) | (1 << (fugue_sqlParser.MAP - 128)) | (1 << (fugue_sqlParser.MATCHED - 128)) | (1 << (fugue_sqlParser.MERGE - 128)) | (1 << (fugue_sqlParser.MINUTE - 128)) | (1 << (fugue_sqlParser.MONTH - 128)) | (1 << (fugue_sqlParser.MSCK - 128)) | (1 << (fugue_sqlParser.NAMESPACE - 128)) | (1 << (fugue_sqlParser.NAMESPACES - 128)) | (1 << (fugue_sqlParser.NO - 128)) | (1 << (fugue_sqlParser.NOT - 128)) | (1 << (fugue_sqlParser.NULL - 128)) | (1 << (fugue_sqlParser.NULLS - 128)) | (1 << (fugue_sqlParser.OF - 128)) | (1 << (fugue_sqlParser.ONLY - 128)) | (1 << (fugue_sqlParser.OPTION - 128)) | (1 << (fugue_sqlParser.OPTIONS - 128)) | (1 << (fugue_sqlParser.OR - 128)) | (1 << (fugue_sqlParser.ORDER - 128)))) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & ((1 << (fugue_sqlParser.OUT - 192)) | (1 << (fugue_sqlParser.OUTER - 192)) | (1 << (fugue_sqlParser.OUTPUTFORMAT - 192)) | (1 << (fugue_sqlParser.OVER - 192)) | (1 << (fugue_sqlParser.OVERLAPS - 192)) | (1 << (fugue_sqlParser.OVERLAY - 192)) | (1 << (fugue_sqlParser.OVERWRITE - 192)) | (1 << (fugue_sqlParser.PARTITION - 192)) | (1 << (fugue_sqlParser.PARTITIONED - 192)) | (1 << (fugue_sqlParser.PARTITIONS - 192)) | (1 << (fugue_sqlParser.PERCENTLIT - 192)) | (1 << (fugue_sqlParser.PIVOT - 192)) | (1 << (fugue_sqlParser.PLACING - 192)) | (1 << (fugue_sqlParser.POSITION - 192)) | (1 << (fugue_sqlParser.PRECEDING - 192)) | (1 << (fugue_sqlParser.PRIMARY - 192)) | (1 << (fugue_sqlParser.PRINCIPALS - 192)) | (1 << (fugue_sqlParser.PROPERTIES - 192)) | (1 << (fugue_sqlParser.PURGE - 192)) | (1 << (fugue_sqlParser.QUERY - 192)) | (1 << (fugue_sqlParser.RANGE - 192)) | (1 << (fugue_sqlParser.RECORDREADER - 192)) | (1 << (fugue_sqlParser.RECORDWRITER - 192)) | (1 << (fugue_sqlParser.RECOVER - 192)) | (1 << (fugue_sqlParser.REDUCE - 192)) | (1 << (fugue_sqlParser.REFERENCES - 192)) | (1 << (fugue_sqlParser.REFRESH - 192)) | (1 << (fugue_sqlParser.RENAME - 192)) | (1 << (fugue_sqlParser.REPAIR - 192)) | (1 << (fugue_sqlParser.REPLACE - 192)) | (1 << (fugue_sqlParser.RESET - 192)) | (1 << (fugue_sqlParser.RESTRICT - 192)) | (1 << (fugue_sqlParser.REVOKE - 192)) | (1 << (fugue_sqlParser.RLIKE - 192)) | (1 << (fugue_sqlParser.ROLE - 192)) | (1 << (fugue_sqlParser.ROLES - 192)) | (1 << (fugue_sqlParser.ROLLBACK - 192)) | (1 << (fugue_sqlParser.ROLLUP - 192)) | (1 << (fugue_sqlParser.ROW - 192)) | (1 << (fugue_sqlParser.ROWS - 192)) | (1 << (fugue_sqlParser.SCHEMA - 192)) | (1 << (fugue_sqlParser.SECOND - 192)) | (1 << (fugue_sqlParser.SELECT - 192)) | (1 << (fugue_sqlParser.SEPARATED - 192)) | (1 << (fugue_sqlParser.SERDE - 192)) | (1 << (fugue_sqlParser.SERDEPROPERTIES - 192)) | (1 << (fugue_sqlParser.SESSION_USER - 192)) | (1 << (fugue_sqlParser.SET - 192)) | (1 << (fugue_sqlParser.SETS - 192)) | (1 << (fugue_sqlParser.SHOW - 192)) | (1 << (fugue_sqlParser.SKEWED - 192)) | (1 << (fugue_sqlParser.SOME - 192)) | (1 << (fugue_sqlParser.SORT - 192)) | (1 << (fugue_sqlParser.SORTED - 192)) | (1 << (fugue_sqlParser.START - 192)) | (1 << (fugue_sqlParser.STATISTICS - 192)) | (1 << (fugue_sqlParser.STORED - 192)) | (1 << (fugue_sqlParser.STRATIFY - 192)) | (1 << (fugue_sqlParser.STRUCT - 192)) | (1 << (fugue_sqlParser.SUBSTR - 192)) | (1 << (fugue_sqlParser.SUBSTRING - 192)))) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & ((1 << (fugue_sqlParser.TABLE - 256)) | (1 << (fugue_sqlParser.TABLES - 256)) | (1 << (fugue_sqlParser.TABLESAMPLE - 256)) | (1 << (fugue_sqlParser.TBLPROPERTIES - 256)) | (1 << (fugue_sqlParser.TEMPORARY - 256)) | (1 << (fugue_sqlParser.TERMINATED - 256)) | (1 << (fugue_sqlParser.THEN - 256)) | (1 << (fugue_sqlParser.TO - 256)) | (1 << (fugue_sqlParser.TOUCH - 256)) | (1 << (fugue_sqlParser.TRAILING - 256)) | (1 << (fugue_sqlParser.TRANSACTION - 256)) | (1 << (fugue_sqlParser.TRANSACTIONS - 256)) | (1 << (fugue_sqlParser.TRANSFORM - 256)) | (1 << (fugue_sqlParser.TRIM - 256)) | (1 << (fugue_sqlParser.TRUE - 256)) | (1 << (fugue_sqlParser.TRUNCATE - 256)) | (1 << (fugue_sqlParser.TYPE - 256)) | (1 << (fugue_sqlParser.UNARCHIVE - 256)) | (1 << (fugue_sqlParser.UNBOUNDED - 256)) | (1 << (fugue_sqlParser.UNCACHE - 256)) | (1 << (fugue_sqlParser.UNIQUE - 256)) | (1 << (fugue_sqlParser.UNKNOWN - 256)) | (1 << (fugue_sqlParser.UNLOCK - 256)) | (1 << (fugue_sqlParser.UNSET - 256)) | (1 << (fugue_sqlParser.UPDATE - 256)) | (1 << (fugue_sqlParser.USE - 256)) | (1 << (fugue_sqlParser.USER - 256)) | (1 << (fugue_sqlParser.VALUES - 256)) | (1 << (fugue_sqlParser.VIEW - 256)) | (1 << (fugue_sqlParser.VIEWS - 256)) | (1 << (fugue_sqlParser.WHEN - 256)) | (1 << (fugue_sqlParser.WHERE - 256)) | (1 << (fugue_sqlParser.WINDOW - 256)) | (1 << (fugue_sqlParser.WITH - 256)) | (1 << (fugue_sqlParser.YEAR - 256)) | (1 << (fugue_sqlParser.DIV - 256)))) != 0)): self._errHandler.recoverInline(self) @@ -26303,15 +26370,15 @@ def nonReserved(self): def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() - self._predicates[28] = self.fugueAssignmentSign_sempred - self._predicates[35] = self.fuguePartitionNum_sempred - self._predicates[100] = self.queryTerm_sempred - self._predicates[155] = self.booleanExpression_sempred - self._predicates[157] = self.valueExpression_sempred - self._predicates[158] = self.primaryExpression_sempred - self._predicates[191] = self.identifier_sempred - self._predicates[192] = self.strictIdentifier_sempred - self._predicates[194] = self.number_sempred + self._predicates[29] = self.fugueAssignmentSign_sempred + self._predicates[36] = self.fuguePartitionNum_sempred + self._predicates[101] = self.queryTerm_sempred + self._predicates[156] = self.booleanExpression_sempred + self._predicates[158] = self.valueExpression_sempred + self._predicates[159] = self.primaryExpression_sempred + self._predicates[192] = self.identifier_sempred + self._predicates[193] = self.strictIdentifier_sempred + self._predicates[195] = self.number_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) diff --git a/fugue_sql/antlr/fugue_sqlVisitor.py b/fugue_sql/antlr/fugue_sqlVisitor.py index 76f603d8..d239296e 100644 --- a/fugue_sql/antlr/fugue_sqlVisitor.py +++ b/fugue_sql/antlr/fugue_sqlVisitor.py @@ -119,6 +119,11 @@ def visitFuguePersist(self, ctx:fugue_sqlParser.FuguePersistContext): return self.visitChildren(ctx) + # Visit a parse tree produced by fugue_sqlParser#fugueCheckpointNamespace. + def visitFugueCheckpointNamespace(self, ctx:fugue_sqlParser.FugueCheckpointNamespaceContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by fugue_sqlParser#fuguePersistValue. def visitFuguePersistValue(self, ctx:fugue_sqlParser.FuguePersistValueContext): return self.visitChildren(ctx) diff --git a/fugue_sql/visitors.py b/fugue_sql/visitors.py index f8efb74a..fde2a1cf 100644 --- a/fugue_sql/visitors.py +++ b/fugue_sql/visitors.py @@ -204,14 +204,20 @@ def visitFuguePath(self, ctx: fp.FuguePathContext) -> Any: def visitFuguePersist(self, ctx: fp.FuguePersistContext) -> Any: if ctx.checkpoint: + if ctx.ns: + return True, self.visit(ctx.ns) return True, None - if ctx.value is None: - return False, None - return False, self.visit(ctx.value) + else: + if ctx.value is None: + return False, None + return False, self.visit(ctx.value) def visitFuguePersistValue(self, ctx: fp.FuguePersistValueContext) -> Any: return self.ctxToStr(ctx, delimit="") + def visitFugueCheckpointNamespace(self, ctx: fp.FugueCheckpointNamespaceContext): + return str(eval(self.ctxToStr(ctx))) + class _Extensions(_VisitorBase): def __init__( @@ -510,15 +516,17 @@ def _process_assignable(self, df: WorkflowDataFrame, ctx: Tree): varname, sign = None, None need_checkpoint = sign == "??" if "persist" in data: - is_checkpoint, persist_value = data["persist"] - if need_checkpoint or is_checkpoint: # pragma: no cover + is_checkpoint, value = data["persist"] + if need_checkpoint or is_checkpoint: assert_or_throw( is_checkpoint, FugueSQLSyntaxError("can't persist when checkpoint is specified"), ) - raise NotImplementedError + df = df.checkpoint(value) else: - df = df.persist(persist_value) + df = df.persist(value) + elif need_checkpoint: + df = df.checkpoint() if "broadcast" in data: df = df.broadcast() if varname is not None: diff --git a/fugue_test/builtin_suite.py b/fugue_test/builtin_suite.py index ee7d9434..eb6fa077 100644 --- a/fugue_test/builtin_suite.py +++ b/fugue_test/builtin_suite.py @@ -4,6 +4,7 @@ import pandas as pd import pytest +from fugue import FileSystem, Schema from fugue.dataframe import DataFrame, DataFrames, LocalDataFrame, PandasDataFrame from fugue.dataframe.array_dataframe import ArrayDataFrame from fugue.dataframe.utils import _df_eq as df_eq @@ -18,7 +19,6 @@ transformer, ) from fugue.workflow.workflow import FugueInteractiveWorkflow, FugueWorkflow -from triad.collections.fs import FileSystem class BuiltInTests(object): @@ -53,12 +53,19 @@ def test_create_show(self): dag.df([[0]], "a:int").persist().partition(num=2).show() dag.df(dag.df([[0]], "a:int")).persist().broadcast().show() + def test_checkpoint_no_effect(self): + with self.dag() as dag: + dag.df([[0]], "a:int").checkpoint().partition(num=2).show() + dag.df(dag.df([[0]], "a:int")).checkpoint("dummy").broadcast().show() + def test_create_process_output(self): with self.dag() as dag: a = dag.create(mock_creator, params=dict(p=2)) a.assert_eq(ArrayDataFrame([[2]], "a:int")) b = dag.process(a, a, using=mock_processor) b.assert_eq(ArrayDataFrame([[2]], "a:int")) + b = dag.process(dict(df1=a, df2=a), using=mock_processor) + b.assert_eq(ArrayDataFrame([[2]], "a:int")) dag.output(a, b, using=mock_outputter) b2 = dag.process(a, a, a, using=mock_processor2) b2.assert_eq(ArrayDataFrame([[3]], "a:int")) @@ -66,6 +73,7 @@ def test_create_process_output(self): b2.assert_eq(ArrayDataFrame([[3]], "a:int")) a.process(mock_processor2).assert_eq(ArrayDataFrame([[1]], "a:int")) a.output(mock_outputter2) + dag.output(dict(df=a), using=mock_outputter2) a.partition(num=3).output(MockOutputter3) dag.output(dict(aa=a, bb=b), using=MockOutputter4) @@ -97,6 +105,9 @@ def test_transform(self): c = a.transform(mock_tf0) dag.df([[1, 2, 1], [3, 4, 1]], "a:double,b:int,p:int").assert_eq(c) + c = a.transform(mock_tf0, params=dict(col="x")) + dag.df([[1, 2, 1], [3, 4, 1]], "a:double,b:int,x:int").assert_eq(c) + a = dag.df( [[1, 2], [None, 1], [3, 4], [None, 4]], "a:double,b:int", dict(x=1) ) @@ -152,7 +163,15 @@ def test_cotransform(self): c = dag.transform(a.zip(b), using=mock_co_tf1, params=dict(p=10)) e = dag.df([[1, 2, 1, 10]], "a:int,ct1:int,ct2:int,p:int") e.assert_eq(c) + a.zip(b).transform(mock_co_tf1, params=dict(p=10)).assert_eq(e) + + c = dag.transform( + a.zip(b), using=mock_co_tf1, params=dict(p=10, col="x") + ) + e = dag.df([[1, 2, 1, 10]], "a:int,ct1:int,ct2:int,x:int") + e.assert_eq(c) + # interfaceless c = dag.transform( a.zip(b), @@ -181,6 +200,42 @@ def test_cotransform(self): e = dag.df([[1, 2, 1]], "a:int,ct1:int,p:int") e.assert_eq(c) + def test_cotransform_with_key(self): + with self.dag() as dag: + a = dag.df([[1, 2], [1, 3], [2, 1]], "a:int,b:int", dict(x=1)) + b = dag.df([[1, 2], [3, 4]], "a:int,c:int", dict(x=1)) + dag.zip(dict(x=a, y=b)).show() + c = dag.zip(dict(x=a, y=b)).transform( + MockCoTransform1, params=dict(named=True) + ) + e = dag.df([[1, 2, 1, 1]], "a:int,ct1:int,ct2:int,p:int") + e.assert_eq(c) + + c = dag.zip(dict(df1=a, df2=b)).transform( + mock_co_tf1, params=dict(p=10) + ) + e = dag.df([[1, 2, 1, 10]], "a:int,ct1:int,ct2:int,p:int") + e.assert_eq(c) + + c = dag.zip(dict(df2=a, df1=b)).transform( + mock_co_tf1, params=dict(p=10) + ) + e = dag.df([[1, 1, 2, 10]], "a:int,ct1:int,ct2:int,p:int") + e.assert_eq(c) + + c = dag.transform( + dag.zip(dict(x=a, y=b)), + using=mock_co_tf2, + schema="a:int,ct1:int,ct2:int,p:int", + params=dict(p=10), + ) + e = dag.df([[1, 2, 1, 10]], "a:int,ct1:int,ct2:int,p:int") + e.assert_eq(c) + + c = dag.zip(dict(df1=a)).transform(mock_co_tf3) + e = dag.df([[1, 3, 1]], "a:int,ct1:int,p:int") + e.assert_eq(c) + def test_join(self): with self.dag() as dag: a = dag.df([[1, 10], [2, 20], [3, 30]], "a:int,b:int") @@ -384,9 +439,9 @@ def transform(self, df: LocalDataFrame) -> LocalDataFrame: return PandasDataFrame(pdf, self.output_schema) -@transformer(lambda s: s + "p:int") -def mock_tf0(df: pd.DataFrame, p=1) -> pd.DataFrame: - df["p"] = p +@transformer(lambda df, **kwargs: df.schema + (kwargs.get("col", "p") + ":int")) +def mock_tf0(df: pd.DataFrame, p=1, col="p") -> pd.DataFrame: + df[col] = p return df @@ -410,11 +465,19 @@ class MockCoTransform1(CoTransformer): def get_output_schema(self, dfs: DataFrames) -> Any: assert "test" in self.workflow_conf assert 2 == len(dfs) + if self.params.get("named", False): + assert dfs.has_key + else: + assert not dfs.has_key return [self.key_schema, "ct1:int,ct2:int,p:int"] def on_init(self, dfs: DataFrames) -> None: assert "test" in self.workflow_conf assert 2 == len(dfs) + if self.params.get("named", False): + assert dfs.has_key + else: + assert not dfs.has_key self.pn = self.cursor.physical_partition_no self.ks = self.key_schema if "on_init_called" not in self.__dict__: @@ -426,6 +489,10 @@ def transform(self, dfs: DataFrames) -> LocalDataFrame: assert 1 == self.on_init_called assert "test" in self.workflow_conf assert 2 == len(dfs) + if self.params.get("named", False): + assert dfs.has_key + else: + assert not dfs.has_key row = self.cursor.key_value_array + [ dfs[0].count(), dfs[1].count(), @@ -434,9 +501,11 @@ def transform(self, dfs: DataFrames) -> LocalDataFrame: return ArrayDataFrame([row], self.output_schema) -@cotransformer("a:int,ct1:int,ct2:int,p:int") +@cotransformer( + lambda dfs, **kwargs: "a:int,ct1:int,ct2:int," + kwargs.get("col", "p") + ":int" +) def mock_co_tf1( - df1: List[Dict[str, Any]], df2: List[List[Any]], p=1 + df1: List[Dict[str, Any]], df2: List[List[Any]], p=1, col="p" ) -> List[List[Any]]: return [[df1[0]["a"], len(df1), len(df2), p]] @@ -445,7 +514,7 @@ def mock_co_tf2(dfs: DataFrames, p=1) -> List[List[Any]]: return [[dfs[0].peek_dict()["a"], dfs[0].count(), dfs[1].count(), p]] -@cotransformer("a:int,ct1:int,p:int") +@cotransformer(Schema("a:int,ct1:int,p:int")) def mock_co_tf3(df1: List[Dict[str, Any]], p=1) -> List[List[Any]]: return [[df1[0]["a"], len(df1), p]] diff --git a/fugue_test/execution_suite.py b/fugue_test/execution_suite.py index 960b15a1..a9852bc8 100644 --- a/fugue_test/execution_suite.py +++ b/fugue_test/execution_suite.py @@ -12,6 +12,7 @@ from fugue.execution.execution_engine import ExecutionEngine from pytest import raises from triad.exceptions import InvalidOperationError +from fugue.dataframe.dataframes import DataFrames class ExecutionEngineTests(object): @@ -300,6 +301,7 @@ def test_zip(self): # test zip with serialized dfs z1 = e.persist(e.zip(sa, sb, how="inner", partition_spec=ps)) assert 1 == z1.count() + assert not z1.metadata.get("serialized_has_name", False) z2 = e.persist(e.zip(sa, sb, how="left_outer", partition_spec=ps)) assert 2 == z2.count() @@ -346,6 +348,53 @@ def test_zip(self): assert z6.count() == 2 assert len(z6.schema) == 3 + z7 = e.zip(a, b, df1_name="x", df2_name="y") + z7.show() + assert z7.metadata.get("serialized_has_name", False) + + def test_zip_all(self): + e = self.engine + a = e.to_df([[1, 2], [3, 4], [1, 5]], "a:int,b:int") + z = e.persist(e.zip_all(DataFrames(a))) + assert 1 == z.count() + assert z.metadata.get("serialized", False) + assert not z.metadata.get("serialized_has_name", False) + z = e.persist(e.zip_all(DataFrames(x=a))) + assert 1 == z.count() + assert z.metadata.get("serialized", False) + assert z.metadata.get("serialized_has_name", False) + z = e.persist( + e.zip_all(DataFrames(x=a), partition_spec=PartitionSpec(by=["a"])) + ) + assert 2 == z.count() + assert z.metadata.get("serialized", False) + assert z.metadata.get("serialized_has_name", False) + + b = e.to_df([[6, 1], [2, 7]], "c:int,a:int") + c = e.to_df([[6, 1], [2, 7]], "d:int,a:int") + z = e.persist(e.zip_all(DataFrames(a, b, c))) + assert 1 == z.count() + assert not z.metadata.get("serialized_has_name", False) + z = e.persist(e.zip_all(DataFrames(x=a, y=b, z=c))) + assert 1 == z.count() + assert z.metadata.get("serialized_has_name", False) + + z = e.persist(e.zip_all(DataFrames(b, b))) + assert 2 == z.count() + assert not z.metadata.get("serialized_has_name", False) + assert ["a", "c"] in z.schema + z = e.persist(e.zip_all(DataFrames(x=b, y=b))) + assert 2 == z.count() + assert z.metadata.get("serialized_has_name", False) + assert ["a", "c"] in z.schema + + z = e.persist( + e.zip_all(DataFrames(b, b), partition_spec=PartitionSpec(by=["a"])) + ) + assert 2 == z.count() + assert not z.metadata.get("serialized_has_name", False) + assert "c" not in z.schema + def test_comap(self): ps = PartitionSpec(presort="b,c") e = self.engine @@ -365,6 +414,7 @@ def comap(cursor, dfs): return ArrayDataFrame([keys + [v]], cursor.key_schema + "v:str") def on_init(partition_no, dfs): + assert not dfs.has_key assert partition_no >= 0 assert len(dfs) > 0 @@ -394,6 +444,60 @@ def on_init(partition_no, dfs): res = e.comap(z4, comap, "v:str", PartitionSpec(), metadata=dict(a=1)) df_eq(res, [["_03,_12"]], "v:str", metadata=dict(a=1), throw=True) + def test_comap_with_key(self): + e = self.engine + a = e.to_df([[1, 2], [3, 4], [1, 5]], "a:int,b:int") + b = e.to_df([[6, 1], [2, 7]], "c:int,a:int") + c = e.to_df([[6, 1]], "c:int,a:int") + z1 = e.persist(e.zip(a, b, df1_name="x", df2_name="y")) + z2 = e.persist(e.zip_all(DataFrames(x=a, y=b, z=b))) + z3 = e.persist( + e.zip_all(DataFrames(z=c), partition_spec=PartitionSpec(by=["a"])) + ) + + def comap(cursor, dfs): + assert dfs.has_key + v = ",".join([k + str(v.count()) for k, v in dfs.items()]) + keys = cursor.key_value_array + # if len(keys) == 0: + # return ArrayDataFrame([[v]], "v:str") + return ArrayDataFrame([keys + [v]], cursor.key_schema + "v:str") + + def on_init(partition_no, dfs): + assert dfs.has_key + assert partition_no >= 0 + assert len(dfs) > 0 + + res = e.comap( + z1, + comap, + "a:int,v:str", + PartitionSpec(), + metadata=dict(a=1), + on_init=on_init, + ) + df_eq(res, [[1, "x2,y1"]], "a:int,v:str", metadata=dict(a=1), throw=True) + + res = e.comap( + z2, + comap, + "a:int,v:str", + PartitionSpec(), + metadata=dict(a=1), + on_init=on_init, + ) + df_eq(res, [[1, "x2,y1,z1"]], "a:int,v:str", metadata=dict(a=1), throw=True) + + res = e.comap( + z3, + comap, + "a:int,v:str", + PartitionSpec(), + metadata=dict(a=1), + on_init=on_init, + ) + df_eq(res, [[1, "z1"]], "a:int,v:str", metadata=dict(a=1), throw=True) + @pytest.fixture(autouse=True) def init_tmpdir(self, tmpdir): self.tmpdir = tmpdir diff --git a/tests/fugue/execution/test_naive_execution_engine.py b/tests/fugue/execution/test_naive_execution_engine.py index c268800a..d381847a 100644 --- a/tests/fugue/execution/test_naive_execution_engine.py +++ b/tests/fugue/execution/test_naive_execution_engine.py @@ -1,6 +1,7 @@ from fugue.execution import NativeExecutionEngine from fugue_test.execution_suite import ExecutionEngineTests from fugue_test.builtin_suite import BuiltInTests +from fugue.execution.execution_engine import _get_file_threshold class NativeExecutionEngineTests(ExecutionEngineTests.Tests): @@ -17,3 +18,9 @@ class NativeExecutionEngineBuiltInTests(BuiltInTests.Tests): def make_engine(self): e = NativeExecutionEngine(dict(test=True)) return e + + +def test_get_file_threshold(): + assert -1 == _get_file_threshold(None) + assert -2 == _get_file_threshold(-2) + assert 1024 == _get_file_threshold("1k") diff --git a/tests/fugue/extensions/transformer/test_convert_transformer.py b/tests/fugue/extensions/transformer/test_convert_transformer.py index 8f6c2579..abc09d7d 100644 --- a/tests/fugue/extensions/transformer/test_convert_transformer.py +++ b/tests/fugue/extensions/transformer/test_convert_transformer.py @@ -15,6 +15,8 @@ def test_transformer(): assert t1.output_schema == "a:int,b:int" t2._output_schema = t2.get_output_schema(df) assert t2.output_schema == "b:int,a:int" + t3._output_schema = t3.get_output_schema(df) + assert t3.output_schema == "a:int,b:int" assert [[0, 1]] == list(t3(df.as_array_iterable())) @@ -86,7 +88,7 @@ def t2(df: Iterable[Dict[str, Any]]) -> Iterable[Dict[str, Any]]: yield r -@transformer("*, b:int") +@transformer(Schema("a:int, b:int")) def t3(df: Iterable[List[Any]]) -> Iterable[List[Any]]: for r in df: r += [1] diff --git a/tests/fugue/workflow/test_workflow.py b/tests/fugue/workflow/test_workflow.py index ee064812..9c3e5d60 100644 --- a/tests/fugue/workflow/test_workflow.py +++ b/tests/fugue/workflow/test_workflow.py @@ -98,40 +98,7 @@ def test_interactive_workflow(): a.assert_eq(b) # dummy value from cache makes them equal -def test_workflow_determinism(): - # TODO: need more thorough test, need to separate out a test file - builder1 = FugueWorkflow() - a1 = builder1.create_data([[0], [0], [1]], "a:int32") - b1 = a1.transform("mock_tf1", "*,b:int", pre_partition=dict(by=["a"], num=2)) - a1.show() - - builder2 = FugueWorkflow() - a2 = builder2.create_data([[0], [0], [1]], Schema("a:int")) - b2 = a2.transform("mock_tf1", "*,b:int", pre_partition=dict(num="2", by=["a"])) - a2.show() - - assert builder1.spec_uuid() == builder1.spec_uuid() - assert a1.spec_uuid() == a2.spec_uuid() - assert b1.spec_uuid() == b2.spec_uuid() - assert builder1.spec_uuid() == builder2.spec_uuid() - - builder3 = FugueWorkflow() - a3 = builder2.create_data([[0], [0], [1]], Schema("a:int")) - b3 = a2.transform("mock_tf1", "*,b:str", pre_partition=dict(num="2", by=["a"])) - a3.show() - - assert a1.spec_uuid() == a3.spec_uuid() - assert b1.spec_uuid() != b3.spec_uuid() - assert builder1.spec_uuid() != builder3.spec_uuid() - - builder3 = FugueWorkflow() - a3 = builder2.create_data([[0], [0], [1]], Schema("a:int")) - b3 = a2.transform("mock_tf1", "*,b:int", pre_partition=dict(num="200", by=["a"])) - a3.show() - - assert a1.spec_uuid() == a3.spec_uuid() - assert b1.spec_uuid() != b3.spec_uuid() - assert builder1.spec_uuid() != builder3.spec_uuid() + diff --git a/tests/fugue/workflow/test_workflow_determinism.py b/tests/fugue/workflow/test_workflow_determinism.py new file mode 100644 index 00000000..53eed8ab --- /dev/null +++ b/tests/fugue/workflow/test_workflow_determinism.py @@ -0,0 +1,61 @@ +from fugue import FugueWorkflow, Schema, FileSystem +from typing import List, Any, Dict, Iterable + + +def test_checkpoint(): + dag = FugueWorkflow() + id0 = FugueWorkflow().df( + [[0]], "a:int32").workflow.spec_uuid() + id1 = FugueWorkflow().df( + [[0]], "a:int32").checkpoint().workflow.spec_uuid() + id2 = FugueWorkflow().df( + [[0]], "a:int32").checkpoint("1").workflow.spec_uuid() + id3 = FugueWorkflow().df( + [[0]], "a:int32").checkpoint(1).workflow.spec_uuid() + + assert id1 != id0 + assert id1 != id2 + assert id2 != id0 + assert id2 == id3 + + +def test_workflow_determinism(): + # TODO: need more thorough test, separate this to small ones and remove it + builder1 = FugueWorkflow() + a1 = builder1.create_data([[0], [0], [1]], "a:int32") + b1 = a1.transform("mock_tf1", "*,b:int", pre_partition=dict(by=["a"], num=2)) + a1.show() + + builder2 = FugueWorkflow() + a2 = builder2.create_data([[0], [0], [1]], Schema("a:int")) + b2 = a2.transform("mock_tf1", "*,b:int", pre_partition=dict(num="2", by=["a"])) + a2.show() + + assert builder1.spec_uuid() == builder1.spec_uuid() + assert a1.spec_uuid() == a2.spec_uuid() + assert b1.spec_uuid() == b2.spec_uuid() + assert builder1.spec_uuid() == builder2.spec_uuid() + + builder3 = FugueWorkflow() + a3 = builder2.create_data([[0], [0], [1]], Schema("a:int")) + b3 = a2.transform("mock_tf1", "*,b:str", pre_partition=dict(num="2", by=["a"])) + a3.show() + + assert a1.spec_uuid() == a3.spec_uuid() + assert b1.spec_uuid() != b3.spec_uuid() + assert builder1.spec_uuid() != builder3.spec_uuid() + + builder3 = FugueWorkflow() + a3 = builder2.create_data([[0], [0], [1]], Schema("a:int")) + b3 = a2.transform("mock_tf1", "*,b:int", pre_partition=dict(num="200", by=["a"])) + a3.show() + + assert a1.spec_uuid() == a3.spec_uuid() + assert b1.spec_uuid() != b3.spec_uuid() + assert builder1.spec_uuid() != builder3.spec_uuid() + + +def mock_tf1(df: List[Dict[str, Any]], v: int = 1) -> Iterable[Dict[str, Any]]: + for r in df: + r["b"] = v * len(df) + yield r diff --git a/tests/fugue_sql/test_syntax.py b/tests/fugue_sql/test_syntax.py index d2d07189..31a8d0a3 100644 --- a/tests/fugue_sql/test_syntax.py +++ b/tests/fugue_sql/test_syntax.py @@ -44,10 +44,15 @@ def test_partition_syntax(): simple_assign=True) -def test_persist_broadcast_syntax(): +def test_persist_broadcast_checkpoint_syntax(): good_single_syntax( - "a = select a", ["", "checkpoint", "PERSIst", - "persist a12", "persist a.b.c"], ["BROADCAst"], + "a = select a", ["", "PERSIst", + "persist a12", "persist a.b.c", + "checkpoint", "checkpoint 'x'"], ["BROADCAst"], + ignore_case=True, + simple_assign=True) + good_single_syntax( + "a ?? select a", ["", "checkpoint", "checkpoint 'x'"], ["BROADCAst"], ignore_case=True, simple_assign=True) diff --git a/tests/fugue_sql/test_workflow_parse.py b/tests/fugue_sql/test_workflow_parse.py index 605abea5..045496f5 100644 --- a/tests/fugue_sql/test_workflow_parse.py +++ b/tests/fugue_sql/test_workflow_parse.py @@ -154,6 +154,34 @@ def test_output(): """, dag) +def test_persist_checkpoint_broadcast(): + dag = FugueWorkflow() + dag.create(mock_create1).persist() + dag.create(mock_create1).persist("a.b") + + dag.create(mock_create1).broadcast() + dag.create(mock_create1).persist("a.b").broadcast() + + dag.create(mock_create1).checkpoint() + dag.create(mock_create1).checkpoint() + dag.create(mock_create1).checkpoint("xy z") + dag.create(mock_create1).checkpoint("xy z").broadcast() + assert_eq(""" + create using mock_create1 persist + a=create using mock_create1 persist a.b + + create using mock_create1 broadcast + a=create using mock_create1 persist a.b broadcast + + create using mock_create1 checkpoint + a?? create using mock_create1 + a=create using mock_create1 checkpoint "xy z" + a??create using mock_create1 checkpoint "xy z" broadcast + """, dag) + + + + def test_select(): dag = FugueWorkflow() a = dag.create(mock_create1, params=dict(n=1))