{"version":3,"sources":["../src/index.ts","../src/allDialects.ts","../src/expandPhrases.ts","../src/lexer/token.ts","../src/languages/bigquery/bigquery.functions.ts","../src/languages/bigquery/bigquery.keywords.ts","../src/languages/bigquery/bigquery.formatter.ts","../src/languages/db2/db2.functions.ts","../src/languages/db2/db2.keywords.ts","../src/languages/db2/db2.formatter.ts","../src/languages/db2i/db2i.functions.ts","../src/languages/db2i/db2i.keywords.ts","../src/languages/db2i/db2i.formatter.ts","../src/languages/hive/hive.functions.ts","../src/languages/hive/hive.keywords.ts","../src/languages/hive/hive.formatter.ts","../src/languages/mariadb/likeMariaDb.ts","../src/languages/mariadb/mariadb.keywords.ts","../src/languages/mariadb/mariadb.functions.ts","../src/languages/mariadb/mariadb.formatter.ts","../src/languages/mysql/mysql.keywords.ts","../src/languages/mysql/mysql.functions.ts","../src/languages/mysql/mysql.formatter.ts","../src/languages/tidb/tidb.keywords.ts","../src/languages/tidb/tidb.functions.ts","../src/languages/tidb/tidb.formatter.ts","../src/languages/n1ql/n1ql.functions.ts","../src/languages/n1ql/n1ql.keywords.ts","../src/languages/n1ql/n1ql.formatter.ts","../src/languages/plsql/plsql.keywords.ts","../src/languages/plsql/plsql.functions.ts","../src/languages/plsql/plsql.formatter.ts","../src/languages/postgresql/postgresql.functions.ts","../src/languages/postgresql/postgresql.keywords.ts","../src/languages/postgresql/postgresql.formatter.ts","../src/languages/redshift/redshift.functions.ts","../src/languages/redshift/redshift.keywords.ts","../src/languages/redshift/redshift.formatter.ts","../src/languages/spark/spark.keywords.ts","../src/languages/spark/spark.functions.ts","../src/languages/spark/spark.formatter.ts","../src/languages/sqlite/sqlite.functions.ts","../src/languages/sqlite/sqlite.keywords.ts","../src/languages/sqlite/sqlite.formatter.ts","../src/languages/sql/sql.functions.ts","../src/languages/sql/sql.keywords.ts","../src/languages/sql/sql.formatter.ts","../src/languages/trino/trino.functions.ts","../src/languages/trino/trino.keywords.ts","../src/languages/trino/trino.formatter.ts","../src/languages/transactsql/transactsql.functions.ts","../src/languages/transactsql/transactsql.keywords.ts","../src/languages/transactsql/transactsql.formatter.ts","../src/languages/singlestoredb/singlestoredb.keywords.ts","../src/languages/singlestoredb/singlestoredb.functions.ts","../src/languages/singlestoredb/singlestoredb.formatter.ts","../src/languages/snowflake/snowflake.functions.ts","../src/languages/snowflake/snowflake.keywords.ts","../src/languages/snowflake/snowflake.formatter.ts","../src/utils.ts","../src/lexer/regexUtil.ts","../src/lexer/regexFactory.ts","../src/lexer/lineColFromIndex.ts","../src/lexer/TokenizerEngine.ts","../src/lexer/NestedComment.ts","../src/lexer/Tokenizer.ts","../src/dialect.ts","../src/formatter/config.ts","../src/formatter/Params.ts","../src/parser/createParser.ts","../src/lexer/disambiguateTokens.ts","../src/parser/LexerAdapter.ts","../src/parser/grammar.ts","../src/formatter/Layout.ts","../src/formatter/tabularStyle.ts","../src/formatter/Indentation.ts","../src/formatter/InlineLayout.ts","../src/formatter/ExpressionFormatter.ts","../src/formatter/Formatter.ts","../src/validateConfig.ts","../src/sqlFormatter.ts"],"sourcesContent":["export { supportedDialects, format, formatDialect } from './sqlFormatter.js';\nexport { expandPhrases } from './expandPhrases.js';\nexport { ConfigError } from './validateConfig.js';\n\n// When adding a new dialect, be sure to add it to the list of exports below.\nexport { bigquery } from './languages/bigquery/bigquery.formatter.js';\nexport { db2 } from './languages/db2/db2.formatter.js';\nexport { db2i } from './languages/db2i/db2i.formatter.js';\nexport { hive } from './languages/hive/hive.formatter.js';\nexport { mariadb } from './languages/mariadb/mariadb.formatter.js';\nexport { mysql } from './languages/mysql/mysql.formatter.js';\nexport { tidb } from './languages/tidb/tidb.formatter.js';\nexport { n1ql } from './languages/n1ql/n1ql.formatter.js';\nexport { plsql } from './languages/plsql/plsql.formatter.js';\nexport { postgresql } from './languages/postgresql/postgresql.formatter.js';\nexport { redshift } from './languages/redshift/redshift.formatter.js';\nexport { spark } from './languages/spark/spark.formatter.js';\nexport { sqlite } from './languages/sqlite/sqlite.formatter.js';\nexport { sql } from './languages/sql/sql.formatter.js';\nexport { trino } from './languages/trino/trino.formatter.js';\nexport { transactsql } from './languages/transactsql/transactsql.formatter.js';\nexport { singlestoredb } from './languages/singlestoredb/singlestoredb.formatter.js';\nexport { snowflake } from './languages/snowflake/snowflake.formatter.js';\n\n// NB! To re-export types the \"export type\" syntax is required by webpack.\n// Otherwise webpack build will fail.\nexport type {\n  SqlLanguage,\n  FormatOptionsWithLanguage,\n  FormatOptionsWithDialect,\n} from './sqlFormatter.js';\nexport type {\n  IndentStyle,\n  KeywordCase,\n  DataTypeCase,\n  FunctionCase,\n  IdentifierCase,\n  LogicalOperatorNewline,\n  FormatOptions,\n} from './FormatOptions.js';\nexport type { ParamItems } from './formatter/Params.js';\nexport type { ParamTypes } from './lexer/TokenizerOptions.js';\nexport type { DialectOptions } from './dialect.js';\n","export { bigquery } from './languages/bigquery/bigquery.formatter.js';\nexport { db2 } from './languages/db2/db2.formatter.js';\nexport { db2i } from './languages/db2i/db2i.formatter.js';\nexport { hive } from './languages/hive/hive.formatter.js';\nexport { mariadb } from './languages/mariadb/mariadb.formatter.js';\nexport { mysql } from './languages/mysql/mysql.formatter.js';\nexport { tidb } from './languages/tidb/tidb.formatter.js';\nexport { n1ql } from './languages/n1ql/n1ql.formatter.js';\nexport { plsql } from './languages/plsql/plsql.formatter.js';\nexport { postgresql } from './languages/postgresql/postgresql.formatter.js';\nexport { redshift } from './languages/redshift/redshift.formatter.js';\nexport { spark } from './languages/spark/spark.formatter.js';\nexport { sqlite } from './languages/sqlite/sqlite.formatter.js';\nexport { sql } from './languages/sql/sql.formatter.js';\nexport { trino } from './languages/trino/trino.formatter.js';\nexport { transactsql } from './languages/transactsql/transactsql.formatter.js';\nexport { singlestoredb } from './languages/singlestoredb/singlestoredb.formatter.js';\nexport { snowflake } from './languages/snowflake/snowflake.formatter.js';\n","/**\n * Performs expandSinglePhrase() on array\n */\nexport const expandPhrases = (phrases: string[]): string[] => phrases.flatMap(expandSinglePhrase);\n\n/**\n * Expands a syntax description like\n *\n *     \"CREATE [OR REPLACE] [TEMP|TEMPORARY] TABLE\"\n *\n * into an array of all possible combinations like:\n *\n *     [ \"CREATE TABLE\",\n *       \"CREATE TEMP TABLE\",\n *       \"CREATE TEMPORARY TABLE\",\n *       \"CREATE OR REPLACE TABLE\",\n *       \"CREATE OR REPLACE TEMP TABLE\",\n *       \"CREATE OR REPLACE TEMPORARY TABLE\" ]\n *\n * The [] and {} parenthesis can also be nested like\n *\n *     \"FOR [OF {UNIQUE | MANDATORY} TABLES]\"\n *\n * resulting in:\n *\n *     [ \"FOR\",\n *       \"FOR OF UNIQUE TABLES\",\n *       \"FOR OF MANDATORY TABLES\" ]\n */\nexport const expandSinglePhrase = (phrase: string): string[] =>\n  buildCombinations(parsePhrase(phrase)).map(stripExtraWhitespace);\n\nconst stripExtraWhitespace = (text: string) => text.replace(/ +/g, ' ').trim();\n\nconst parsePhrase = (text: string): Phrase => ({\n  type: 'mandatory_block',\n  items: parseAlteration(text, 0)[0],\n});\n\ntype Phrase = string | MandatoryBlock | OptionalBlock | Concatenation;\ntype Concatenation = { type: 'concatenation'; items: Phrase[] };\ntype MandatoryBlock = { type: 'mandatory_block'; items: Phrase[] };\ntype OptionalBlock = { type: 'optional_block'; items: Phrase[] };\n\nconst parseAlteration = (\n  text: string,\n  index: number,\n  expectClosing?: ']' | '}'\n): [Phrase[], number] => {\n  const alterations: Phrase[] = [];\n  while (text[index]) {\n    const [term, newIndex] = parseConcatenation(text, index);\n    alterations.push(term);\n    index = newIndex;\n    if (text[index] === '|') {\n      index++;\n    } else if (text[index] === '}' || text[index] === ']') {\n      if (expectClosing !== text[index]) {\n        throw new Error(`Unbalanced parenthesis in: ${text}`);\n      }\n      index++;\n      return [alterations, index];\n    } else if (index === text.length) {\n      if (expectClosing) {\n        throw new Error(`Unbalanced parenthesis in: ${text}`);\n      }\n      return [alterations, index];\n    } else {\n      throw new Error(`Unexpected \"${text[index]}\"`);\n    }\n  }\n  return [alterations, index];\n};\n\nconst parseConcatenation = (text: string, index: number): [Phrase, number] => {\n  const items: Phrase[] = [];\n  while (true) {\n    const [term, newIndex] = parseTerm(text, index);\n    if (term) {\n      items.push(term);\n      index = newIndex;\n    } else {\n      break;\n    }\n  }\n  return items.length === 1 ? [items[0], index] : [{ type: 'concatenation', items }, index];\n};\n\nconst parseTerm = (text: string, index: number): [Phrase, number] => {\n  if (text[index] === '{') {\n    return parseMandatoryBlock(text, index + 1);\n  } else if (text[index] === '[') {\n    return parseOptionalBlock(text, index + 1);\n  } else {\n    let word = '';\n    while (text[index] && /[A-Za-z0-9_ ]/.test(text[index])) {\n      word += text[index];\n      index++;\n    }\n    return [word, index];\n  }\n};\n\nconst parseMandatoryBlock = (text: string, index: number): [MandatoryBlock, number] => {\n  const [items, newIndex] = parseAlteration(text, index, '}');\n  return [{ type: 'mandatory_block', items }, newIndex];\n};\n\nconst parseOptionalBlock = (text: string, index: number): [OptionalBlock, number] => {\n  const [items, newIndex] = parseAlteration(text, index, ']');\n  return [{ type: 'optional_block', items }, newIndex];\n};\n\nconst buildCombinations = (node: Phrase): string[] => {\n  if (typeof node === 'string') {\n    return [node];\n  } else if (node.type === 'concatenation') {\n    return node.items.map(buildCombinations).reduce(stringCombinations, ['']);\n  } else if (node.type === 'mandatory_block') {\n    return node.items.flatMap(buildCombinations);\n  } else if (node.type === 'optional_block') {\n    return ['', ...node.items.flatMap(buildCombinations)];\n  } else {\n    throw new Error(`Unknown node type: ${node}`);\n  }\n};\n\nconst stringCombinations = (xs: string[], ys: string[]): string[] => {\n  const results: string[] = [];\n  for (const x of xs) {\n    for (const y of ys) {\n      results.push(x + y);\n    }\n  }\n  return results;\n};\n","/** Token type enum for all possible Token categories */\nexport enum TokenType {\n  QUOTED_IDENTIFIER = 'QUOTED_IDENTIFIER',\n  IDENTIFIER = 'IDENTIFIER',\n  STRING = 'STRING',\n  VARIABLE = 'VARIABLE',\n  RESERVED_DATA_TYPE = 'RESERVED_DATA_TYPE',\n  RESERVED_PARAMETERIZED_DATA_TYPE = 'RESERVED_PARAMETERIZED_DATA_TYPE',\n  RESERVED_KEYWORD = 'RESERVED_KEYWORD',\n  RESERVED_FUNCTION_NAME = 'RESERVED_FUNCTION_NAME',\n  RESERVED_PHRASE = 'RESERVED_PHRASE',\n  RESERVED_SET_OPERATION = 'RESERVED_SET_OPERATION',\n  RESERVED_CLAUSE = 'RESERVED_CLAUSE',\n  RESERVED_SELECT = 'RESERVED_SELECT',\n  RESERVED_JOIN = 'RESERVED_JOIN',\n  ARRAY_IDENTIFIER = 'ARRAY_IDENTIFIER', // IDENTIFIER token in front of [\n  ARRAY_KEYWORD = 'ARRAY_KEYWORD', // RESERVED_DATA_TYPE token in front of [\n  CASE = 'CASE',\n  END = 'END',\n  WHEN = 'WHEN',\n  ELSE = 'ELSE',\n  THEN = 'THEN',\n  LIMIT = 'LIMIT',\n  BETWEEN = 'BETWEEN',\n  AND = 'AND',\n  OR = 'OR',\n  XOR = 'XOR',\n  OPERATOR = 'OPERATOR',\n  COMMA = 'COMMA',\n  ASTERISK = 'ASTERISK', // *\n  PROPERTY_ACCESS_OPERATOR = 'PROPERTY_ACCESS_OPERATOR', // Usually \".\"\n  OPEN_PAREN = 'OPEN_PAREN',\n  CLOSE_PAREN = 'CLOSE_PAREN',\n  LINE_COMMENT = 'LINE_COMMENT',\n  BLOCK_COMMENT = 'BLOCK_COMMENT',\n  // Text between /* sql-formatter-disable */ and /* sql-formatter-enable */\n  DISABLE_COMMENT = 'DISABLE_COMMENT',\n  NUMBER = 'NUMBER',\n  NAMED_PARAMETER = 'NAMED_PARAMETER',\n  QUOTED_PARAMETER = 'QUOTED_PARAMETER',\n  NUMBERED_PARAMETER = 'NUMBERED_PARAMETER',\n  POSITIONAL_PARAMETER = 'POSITIONAL_PARAMETER',\n  CUSTOM_PARAMETER = 'CUSTOM_PARAMETER',\n  DELIMITER = 'DELIMITER',\n  EOF = 'EOF',\n}\n\n/** Struct to store the most basic cohesive unit of language grammar */\nexport interface Token {\n  type: TokenType;\n  raw: string; // The raw original text that was matched\n  text: string; // Cleaned up text e.g. keyword converted to uppercase and extra spaces removed\n  key?: string;\n  start: number;\n  precedingWhitespace?: string; // Whitespace before this token, if any\n}\n\n/** Creates EOF token positioned at given location */\nexport const createEofToken = (index: number) => ({\n  type: TokenType.EOF,\n  raw: '«EOF»',\n  text: '«EOF»',\n  start: index,\n});\n\n/**\n * For use as a \"missing token\"\n * e.g. in lookAhead and lookBehind to avoid dealing with null values\n */\nexport const EOF_TOKEN = createEofToken(Infinity);\n\n/** Checks if two tokens are equivalent */\nexport const testToken =\n  (compareToken: { type: TokenType; text: string }) =>\n  (token: Token): boolean =>\n    token.type === compareToken.type && token.text === compareToken.text;\n\n/** Util object that allows for easy checking of Reserved Keywords */\nexport const isToken = {\n  ARRAY: testToken({ text: 'ARRAY', type: TokenType.RESERVED_DATA_TYPE }),\n  BY: testToken({ text: 'BY', type: TokenType.RESERVED_KEYWORD }),\n  SET: testToken({ text: 'SET', type: TokenType.RESERVED_CLAUSE }),\n  STRUCT: testToken({ text: 'STRUCT', type: TokenType.RESERVED_DATA_TYPE }),\n  WINDOW: testToken({ text: 'WINDOW', type: TokenType.RESERVED_CLAUSE }),\n  VALUES: testToken({ text: 'VALUES', type: TokenType.RESERVED_CLAUSE }),\n};\n\n/** Checks if token is any Reserved Keyword or Clause */\nexport const isReserved = (type: TokenType): boolean =>\n  type === TokenType.RESERVED_DATA_TYPE ||\n  type === TokenType.RESERVED_KEYWORD ||\n  type === TokenType.RESERVED_FUNCTION_NAME ||\n  type === TokenType.RESERVED_PHRASE ||\n  type === TokenType.RESERVED_CLAUSE ||\n  type === TokenType.RESERVED_SELECT ||\n  type === TokenType.RESERVED_SET_OPERATION ||\n  type === TokenType.RESERVED_JOIN ||\n  type === TokenType.ARRAY_KEYWORD ||\n  type === TokenType.CASE ||\n  type === TokenType.END ||\n  type === TokenType.WHEN ||\n  type === TokenType.ELSE ||\n  type === TokenType.THEN ||\n  type === TokenType.LIMIT ||\n  type === TokenType.BETWEEN ||\n  type === TokenType.AND ||\n  type === TokenType.OR ||\n  type === TokenType.XOR;\n\nexport const isLogicalOperator = (type: TokenType): boolean =>\n  type === TokenType.AND || type === TokenType.OR || type === TokenType.XOR;\n","export const functions: string[] = [\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/aead_encryption_functions\n  'KEYS.NEW_KEYSET',\n  'KEYS.ADD_KEY_FROM_RAW_BYTES',\n  'AEAD.DECRYPT_BYTES',\n  'AEAD.DECRYPT_STRING',\n  'AEAD.ENCRYPT',\n  'KEYS.KEYSET_CHAIN',\n  'KEYS.KEYSET_FROM_JSON',\n  'KEYS.KEYSET_TO_JSON',\n  'KEYS.ROTATE_KEYSET',\n  'KEYS.KEYSET_LENGTH',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_analytic_functions\n  'ANY_VALUE',\n  'ARRAY_AGG',\n  'AVG',\n  'CORR',\n  'COUNT',\n  'COUNTIF',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'MAX',\n  'MIN',\n  'ST_CLUSTERDBSCAN',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STRING_AGG',\n  'SUM',\n  'VAR_POP',\n  'VAR_SAMP',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_functions\n  'ANY_VALUE',\n  'ARRAY_AGG',\n  'ARRAY_CONCAT_AGG',\n  'AVG',\n  'BIT_AND',\n  'BIT_OR',\n  'BIT_XOR',\n  'COUNT',\n  'COUNTIF',\n  'LOGICAL_AND',\n  'LOGICAL_OR',\n  'MAX',\n  'MIN',\n  'STRING_AGG',\n  'SUM',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/approximate_aggregate_functions\n  'APPROX_COUNT_DISTINCT',\n  'APPROX_QUANTILES',\n  'APPROX_TOP_COUNT',\n  'APPROX_TOP_SUM',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions\n  // 'ARRAY',\n  'ARRAY_CONCAT',\n  'ARRAY_LENGTH',\n  'ARRAY_TO_STRING',\n  'GENERATE_ARRAY',\n  'GENERATE_DATE_ARRAY',\n  'GENERATE_TIMESTAMP_ARRAY',\n  'ARRAY_REVERSE',\n  'OFFSET',\n  'SAFE_OFFSET',\n  'ORDINAL',\n  'SAFE_ORDINAL',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/bit_functions\n  'BIT_COUNT',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions\n  // 'CASE',\n  'PARSE_BIGNUMERIC',\n  'PARSE_NUMERIC',\n  'SAFE_CAST',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions\n  'CURRENT_DATE',\n  'EXTRACT',\n  'DATE',\n  'DATE_ADD',\n  'DATE_SUB',\n  'DATE_DIFF',\n  'DATE_TRUNC',\n  'DATE_FROM_UNIX_DATE',\n  'FORMAT_DATE',\n  'LAST_DAY',\n  'PARSE_DATE',\n  'UNIX_DATE',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/datetime_functions\n  'CURRENT_DATETIME',\n  'DATETIME',\n  'EXTRACT',\n  'DATETIME_ADD',\n  'DATETIME_SUB',\n  'DATETIME_DIFF',\n  'DATETIME_TRUNC',\n  'FORMAT_DATETIME',\n  'LAST_DAY',\n  'PARSE_DATETIME',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging_functions\n  'ERROR',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/federated_query_functions\n  'EXTERNAL_QUERY',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions\n  'S2_CELLIDFROMPOINT',\n  'S2_COVERINGCELLIDS',\n  'ST_ANGLE',\n  'ST_AREA',\n  'ST_ASBINARY',\n  'ST_ASGEOJSON',\n  'ST_ASTEXT',\n  'ST_AZIMUTH',\n  'ST_BOUNDARY',\n  'ST_BOUNDINGBOX',\n  'ST_BUFFER',\n  'ST_BUFFERWITHTOLERANCE',\n  'ST_CENTROID',\n  'ST_CENTROID_AGG',\n  'ST_CLOSESTPOINT',\n  'ST_CLUSTERDBSCAN',\n  'ST_CONTAINS',\n  'ST_CONVEXHULL',\n  'ST_COVEREDBY',\n  'ST_COVERS',\n  'ST_DIFFERENCE',\n  'ST_DIMENSION',\n  'ST_DISJOINT',\n  'ST_DISTANCE',\n  'ST_DUMP',\n  'ST_DWITHIN',\n  'ST_ENDPOINT',\n  'ST_EQUALS',\n  'ST_EXTENT',\n  'ST_EXTERIORRING',\n  'ST_GEOGFROM',\n  'ST_GEOGFROMGEOJSON',\n  'ST_GEOGFROMTEXT',\n  'ST_GEOGFROMWKB',\n  'ST_GEOGPOINT',\n  'ST_GEOGPOINTFROMGEOHASH',\n  'ST_GEOHASH',\n  'ST_GEOMETRYTYPE',\n  'ST_INTERIORRINGS',\n  'ST_INTERSECTION',\n  'ST_INTERSECTS',\n  'ST_INTERSECTSBOX',\n  'ST_ISCOLLECTION',\n  'ST_ISEMPTY',\n  'ST_LENGTH',\n  'ST_MAKELINE',\n  'ST_MAKEPOLYGON',\n  'ST_MAKEPOLYGONORIENTED',\n  'ST_MAXDISTANCE',\n  'ST_NPOINTS',\n  'ST_NUMGEOMETRIES',\n  'ST_NUMPOINTS',\n  'ST_PERIMETER',\n  'ST_POINTN',\n  'ST_SIMPLIFY',\n  'ST_SNAPTOGRID',\n  'ST_STARTPOINT',\n  'ST_TOUCHES',\n  'ST_UNION',\n  'ST_UNION_AGG',\n  'ST_WITHIN',\n  'ST_X',\n  'ST_Y',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/hash_functions\n  'FARM_FINGERPRINT',\n  'MD5',\n  'SHA1',\n  'SHA256',\n  'SHA512',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/hll_functions\n  'HLL_COUNT.INIT',\n  'HLL_COUNT.MERGE',\n  'HLL_COUNT.MERGE_PARTIAL',\n  'HLL_COUNT.EXTRACT',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/interval_functions\n  'MAKE_INTERVAL',\n  'EXTRACT',\n  'JUSTIFY_DAYS',\n  'JUSTIFY_HOURS',\n  'JUSTIFY_INTERVAL',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions\n  'JSON_EXTRACT',\n  'JSON_QUERY',\n  'JSON_EXTRACT_SCALAR',\n  'JSON_VALUE',\n  'JSON_EXTRACT_ARRAY',\n  'JSON_QUERY_ARRAY',\n  'JSON_EXTRACT_STRING_ARRAY',\n  'JSON_VALUE_ARRAY',\n  'TO_JSON_STRING',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/mathematical_functions\n  'ABS',\n  'SIGN',\n  'IS_INF',\n  'IS_NAN',\n  'IEEE_DIVIDE',\n  'RAND',\n  'SQRT',\n  'POW',\n  'POWER',\n  'EXP',\n  'LN',\n  'LOG',\n  'LOG10',\n  'GREATEST',\n  'LEAST',\n  'DIV',\n  'SAFE_DIVIDE',\n  'SAFE_MULTIPLY',\n  'SAFE_NEGATE',\n  'SAFE_ADD',\n  'SAFE_SUBTRACT',\n  'MOD',\n  'ROUND',\n  'TRUNC',\n  'CEIL',\n  'CEILING',\n  'FLOOR',\n  'COS',\n  'COSH',\n  'ACOS',\n  'ACOSH',\n  'SIN',\n  'SINH',\n  'ASIN',\n  'ASINH',\n  'TAN',\n  'TANH',\n  'ATAN',\n  'ATANH',\n  'ATAN2',\n  'RANGE_BUCKET',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/navigation_functions\n  'FIRST_VALUE',\n  'LAST_VALUE',\n  'NTH_VALUE',\n  'LEAD',\n  'LAG',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/net_functions\n  'NET.IP_FROM_STRING',\n  'NET.SAFE_IP_FROM_STRING',\n  'NET.IP_TO_STRING',\n  'NET.IP_NET_MASK',\n  'NET.IP_TRUNC',\n  'NET.IPV4_FROM_INT64',\n  'NET.IPV4_TO_INT64',\n  'NET.HOST',\n  'NET.PUBLIC_SUFFIX',\n  'NET.REG_DOMAIN',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/numbering_functions\n  'RANK',\n  'DENSE_RANK',\n  'PERCENT_RANK',\n  'CUME_DIST',\n  'NTILE',\n  'ROW_NUMBER',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/security_functions\n  'SESSION_USER',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/statistical_aggregate_functions\n  'CORR',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STDDEV',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VARIANCE',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions\n  'ASCII',\n  'BYTE_LENGTH',\n  'CHAR_LENGTH',\n  'CHARACTER_LENGTH',\n  'CHR',\n  'CODE_POINTS_TO_BYTES',\n  'CODE_POINTS_TO_STRING',\n  'CONCAT',\n  'CONTAINS_SUBSTR',\n  'ENDS_WITH',\n  'FORMAT',\n  'FROM_BASE32',\n  'FROM_BASE64',\n  'FROM_HEX',\n  'INITCAP',\n  'INSTR',\n  'LEFT',\n  'LENGTH',\n  'LPAD',\n  'LOWER',\n  'LTRIM',\n  'NORMALIZE',\n  'NORMALIZE_AND_CASEFOLD',\n  'OCTET_LENGTH',\n  'REGEXP_CONTAINS',\n  'REGEXP_EXTRACT',\n  'REGEXP_EXTRACT_ALL',\n  'REGEXP_INSTR',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'REPLACE',\n  'REPEAT',\n  'REVERSE',\n  'RIGHT',\n  'RPAD',\n  'RTRIM',\n  'SAFE_CONVERT_BYTES_TO_STRING',\n  'SOUNDEX',\n  'SPLIT',\n  'STARTS_WITH',\n  'STRPOS',\n  'SUBSTR',\n  'SUBSTRING',\n  'TO_BASE32',\n  'TO_BASE64',\n  'TO_CODE_POINTS',\n  'TO_HEX',\n  'TRANSLATE',\n  'TRIM',\n  'UNICODE',\n  'UPPER',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/time_functions\n  'CURRENT_TIME',\n  'TIME',\n  'EXTRACT',\n  'TIME_ADD',\n  'TIME_SUB',\n  'TIME_DIFF',\n  'TIME_TRUNC',\n  'FORMAT_TIME',\n  'PARSE_TIME',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions\n  'CURRENT_TIMESTAMP',\n  'EXTRACT',\n  'STRING',\n  'TIMESTAMP',\n  'TIMESTAMP_ADD',\n  'TIMESTAMP_SUB',\n  'TIMESTAMP_DIFF',\n  'TIMESTAMP_TRUNC',\n  'FORMAT_TIMESTAMP',\n  'PARSE_TIMESTAMP',\n  'TIMESTAMP_SECONDS',\n  'TIMESTAMP_MILLIS',\n  'TIMESTAMP_MICROS',\n  'UNIX_SECONDS',\n  'UNIX_MILLIS',\n  'UNIX_MICROS',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/uuid_functions\n  'GENERATE_UUID',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/conditional_expressions\n  'COALESCE',\n  'IF',\n  'IFNULL',\n  'NULLIF',\n\n  // https://cloud.google.com/bigquery/docs/reference/legacy-sql\n  // legacyAggregate\n  'AVG',\n  'BIT_AND',\n  'BIT_OR',\n  'BIT_XOR',\n  'CORR',\n  'COUNT',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'EXACT_COUNT_DISTINCT',\n  'FIRST',\n  'GROUP_CONCAT',\n  'GROUP_CONCAT_UNQUOTED',\n  'LAST',\n  'MAX',\n  'MIN',\n  'NEST',\n  'NTH',\n  'QUANTILES',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'SUM',\n  'TOP',\n  'UNIQUE',\n  'VARIANCE',\n  'VAR_POP',\n  'VAR_SAMP',\n\n  // legacyBitwise\n  'BIT_COUNT',\n\n  // legacyCasting\n  'BOOLEAN',\n  'BYTES',\n  'CAST',\n  'FLOAT',\n  'HEX_STRING',\n  'INTEGER',\n  'STRING',\n\n  // legacyComparison\n  // expr 'IN',\n  'COALESCE',\n  'GREATEST',\n  'IFNULL',\n  'IS_INF',\n  'IS_NAN',\n  'IS_EXPLICITLY_DEFINED',\n  'LEAST',\n  'NVL',\n\n  // legacyDatetime\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'DATE',\n  'DATE_ADD',\n  'DATEDIFF',\n  'DAY',\n  'DAYOFWEEK',\n  'DAYOFYEAR',\n  'FORMAT_UTC_USEC',\n  'HOUR',\n  'MINUTE',\n  'MONTH',\n  'MSEC_TO_TIMESTAMP',\n  'NOW',\n  'PARSE_UTC_USEC',\n  'QUARTER',\n  'SEC_TO_TIMESTAMP',\n  'SECOND',\n  'STRFTIME_UTC_USEC',\n  'TIME',\n  'TIMESTAMP',\n  'TIMESTAMP_TO_MSEC',\n  'TIMESTAMP_TO_SEC',\n  'TIMESTAMP_TO_USEC',\n  'USEC_TO_TIMESTAMP',\n  'UTC_USEC_TO_DAY',\n  'UTC_USEC_TO_HOUR',\n  'UTC_USEC_TO_MONTH',\n  'UTC_USEC_TO_WEEK',\n  'UTC_USEC_TO_YEAR',\n  'WEEK',\n  'YEAR',\n\n  // legacyIp\n  'FORMAT_IP',\n  'PARSE_IP',\n  'FORMAT_PACKED_IP',\n  'PARSE_PACKED_IP',\n\n  // legacyJson\n  'JSON_EXTRACT',\n  'JSON_EXTRACT_SCALAR',\n\n  // legacyMath\n  'ABS',\n  'ACOS',\n  'ACOSH',\n  'ASIN',\n  'ASINH',\n  'ATAN',\n  'ATANH',\n  'ATAN2',\n  'CEIL',\n  'COS',\n  'COSH',\n  'DEGREES',\n  'EXP',\n  'FLOOR',\n  'LN',\n  'LOG',\n  'LOG2',\n  'LOG10',\n  'PI',\n  'POW',\n  'RADIANS',\n  'RAND',\n  'ROUND',\n  'SIN',\n  'SINH',\n  'SQRT',\n  'TAN',\n  'TANH',\n\n  // legacyRegex\n  'REGEXP_MATCH',\n  'REGEXP_EXTRACT',\n  'REGEXP_REPLACE',\n\n  // legacyString\n  'CONCAT',\n  // expr CONTAINS 'str'\n  'INSTR',\n  'LEFT',\n  'LENGTH',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'REPLACE',\n  'RIGHT',\n  'RPAD',\n  'RTRIM',\n  'SPLIT',\n  'SUBSTR',\n  'UPPER',\n\n  // legacyTableWildcard\n  'TABLE_DATE_RANGE',\n  'TABLE_DATE_RANGE_STRICT',\n  'TABLE_QUERY',\n\n  // legacyUrl\n  'HOST',\n  'DOMAIN',\n  'TLD',\n\n  // legacyWindow\n  'AVG',\n  'COUNT',\n  'MAX',\n  'MIN',\n  'STDDEV',\n  'SUM',\n  'CUME_DIST',\n  'DENSE_RANK',\n  'FIRST_VALUE',\n  'LAG',\n  'LAST_VALUE',\n  'LEAD',\n  'NTH_VALUE',\n  'NTILE',\n  'PERCENT_RANK',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'RANK',\n  'RATIO_TO_REPORT',\n  'ROW_NUMBER',\n\n  // legacyMisc\n  'CURRENT_USER',\n  'EVERY',\n  'FROM_BASE64',\n  'HASH',\n  'FARM_FINGERPRINT',\n  'IF',\n  'POSITION',\n  'SHA1',\n  'SOME',\n  'TO_BASE64',\n\n  // other\n  'BQ.JOBS.CANCEL',\n  'BQ.REFRESH_MATERIALIZED_VIEW',\n\n  // ddl\n  'OPTIONS',\n\n  // pivot\n  'PIVOT',\n  'UNPIVOT',\n];\n","export const keywords: string[] = [\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords\n  'ALL',\n  'AND',\n  'ANY',\n  'AS',\n  'ASC',\n  'ASSERT_ROWS_MODIFIED',\n  'AT',\n  'BETWEEN',\n  'BY',\n  'CASE',\n  'CAST',\n  'COLLATE',\n  'CONTAINS',\n  'CREATE',\n  'CROSS',\n  'CUBE',\n  'CURRENT',\n  'DEFAULT',\n  'DEFINE',\n  'DESC',\n  'DISTINCT',\n  'ELSE',\n  'END',\n  'ENUM',\n  'ESCAPE',\n  'EXCEPT',\n  'EXCLUDE',\n  'EXISTS',\n  'EXTRACT',\n  'FALSE',\n  'FETCH',\n  'FOLLOWING',\n  'FOR',\n  'FROM',\n  'FULL',\n  'GROUP',\n  'GROUPING',\n  'GROUPS',\n  'HASH',\n  'HAVING',\n  'IF',\n  'IGNORE',\n  'IN',\n  'INNER',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'JOIN',\n  'LATERAL',\n  'LEFT',\n  'LIMIT',\n  'LOOKUP',\n  'MERGE',\n  'NATURAL',\n  'NEW',\n  'NO',\n  'NOT',\n  'NULL',\n  'NULLS',\n  'OF',\n  'ON',\n  'OR',\n  'ORDER',\n  'OUTER',\n  'OVER',\n  'PARTITION',\n  'PRECEDING',\n  'PROTO',\n  'RANGE',\n  'RECURSIVE',\n  'RESPECT',\n  'RIGHT',\n  'ROLLUP',\n  'ROWS',\n  'SELECT',\n  'SET',\n  'SOME',\n  'TABLE',\n  'TABLESAMPLE',\n  'THEN',\n  'TO',\n  'TREAT',\n  'TRUE',\n  'UNBOUNDED',\n  'UNION',\n  'UNNEST',\n  'USING',\n  'WHEN',\n  'WHERE',\n  'WINDOW',\n  'WITH',\n  'WITHIN',\n\n  // misc\n  'SAFE',\n\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n  'LIKE', // CREATE TABLE LIKE\n  'COPY', // CREATE TABLE COPY\n  'CLONE', // CREATE TABLE CLONE\n  'IN',\n  'OUT',\n  'INOUT',\n  'RETURNS',\n  'LANGUAGE',\n  'CASCADE',\n  'RESTRICT',\n  'DETERMINISTIC',\n];\n\nexport const dataTypes: string[] = [\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types\n  'ARRAY', // parametric, ARRAY<T>\n  'BOOL',\n  'BYTES', // parameterised, BYTES(Length)\n  'DATE',\n  'DATETIME',\n  'GEOGRAPHY',\n  'INTERVAL',\n  'INT64',\n  'INT',\n  'SMALLINT',\n  'INTEGER',\n  'BIGINT',\n  'TINYINT',\n  'BYTEINT',\n  'NUMERIC', // parameterised, NUMERIC(Precision[, Scale])\n  'DECIMAL', // parameterised, DECIMAL(Precision[, Scale])\n  'BIGNUMERIC', // parameterised, BIGNUMERIC(Precision[, Scale])\n  'BIGDECIMAL', // parameterised, BIGDECIMAL(Precision[, Scale])\n  'FLOAT64',\n  'STRING', // parameterised, STRING(Length)\n  'STRUCT', // parametric, STRUCT<T>\n  'TIME',\n  'TIMEZONE',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { functions } from './bigquery.functions.js';\nimport { dataTypes, keywords } from './bigquery.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT] [AS STRUCT | AS VALUE]']);\n\nconst reservedClauses = expandPhrases([\n  // Queries: https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'QUALIFY',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'OMIT RECORD IF', // legacy\n  // Data modification: https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax\n  // - insert:\n  'INSERT [INTO]',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE [INTO]',\n  'WHEN [NOT] MATCHED [BY SOURCE | BY TARGET] [THEN]',\n  'UPDATE SET',\n\n  'CLUSTER BY',\n  'FOR SYSTEM_TIME AS OF', // CREATE SNAPSHOT TABLE\n  'WITH CONNECTION',\n  'WITH PARTITION COLUMNS',\n  'REMOTE WITH CONNECTION',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [OR REPLACE] [TEMP|TEMPORARY|SNAPSHOT|EXTERNAL] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n  'CREATE [OR REPLACE] [MATERIALIZED] VIEW [IF NOT EXISTS]',\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE [FROM]',\n  // - drop table:\n  'DROP [SNAPSHOT | EXTERNAL] TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE [IF EXISTS]',\n  'ADD COLUMN [IF NOT EXISTS]',\n  'DROP COLUMN [IF EXISTS]',\n  'RENAME TO',\n  'ALTER COLUMN [IF EXISTS]',\n  'SET DEFAULT COLLATE', // for alter column\n  'SET OPTIONS', // for alter column\n  'DROP NOT NULL', // for alter column\n  'SET DATA TYPE', // for alter column\n  // - alter schema\n  'ALTER SCHEMA [IF EXISTS]',\n  // - alter view\n  'ALTER [MATERIALIZED] VIEW [IF EXISTS]',\n  // - alter bi_capacity\n  'ALTER BI_CAPACITY',\n  // - truncate:\n  'TRUNCATE TABLE',\n  // - create schema\n  'CREATE SCHEMA [IF NOT EXISTS]',\n  'DEFAULT COLLATE',\n\n  // stored procedures\n  'CREATE [OR REPLACE] [TEMP|TEMPORARY|TABLE] FUNCTION [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]',\n  // row access policy\n  'CREATE [OR REPLACE] ROW ACCESS POLICY [IF NOT EXISTS]',\n  'GRANT TO',\n  'FILTER USING',\n  // capacity\n  'CREATE CAPACITY',\n  'AS JSON',\n  // reservation\n  'CREATE RESERVATION',\n  // assignment\n  'CREATE ASSIGNMENT',\n  // search index\n  'CREATE SEARCH INDEX [IF NOT EXISTS]',\n  // drop\n  'DROP SCHEMA [IF EXISTS]',\n  'DROP [MATERIALIZED] VIEW [IF EXISTS]',\n  'DROP [TABLE] FUNCTION [IF EXISTS]',\n  'DROP PROCEDURE [IF EXISTS]',\n  'DROP ROW ACCESS POLICY',\n  'DROP ALL ROW ACCESS POLICIES',\n  'DROP CAPACITY [IF EXISTS]',\n  'DROP RESERVATION [IF EXISTS]',\n  'DROP ASSIGNMENT [IF EXISTS]',\n  'DROP SEARCH INDEX [IF EXISTS]',\n  'DROP [IF EXISTS]',\n  // DCL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-control-language\n  'GRANT',\n  'REVOKE',\n  // Script, https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting\n  'DECLARE',\n  'EXECUTE IMMEDIATE',\n  'LOOP',\n  'END LOOP',\n  'REPEAT',\n  'END REPEAT',\n  'WHILE',\n  'END WHILE',\n  'BREAK',\n  'LEAVE',\n  'CONTINUE',\n  'ITERATE',\n  'FOR',\n  'END FOR',\n  'BEGIN',\n  'BEGIN TRANSACTION',\n  'COMMIT TRANSACTION',\n  'ROLLBACK TRANSACTION',\n  'RAISE',\n  'RETURN',\n  'CALL',\n  // Debug, https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging-statements\n  'ASSERT',\n  // Other, https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements\n  'EXPORT DATA',\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION {ALL | DISTINCT}',\n  'EXCEPT DISTINCT',\n  'INTERSECT DISTINCT',\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  // https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#tablesample_operator\n  'TABLESAMPLE SYSTEM',\n  // From DDL: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n  'ANY TYPE',\n  'ALL COLUMNS',\n  'NOT DETERMINISTIC',\n  // inside window definitions\n  '{ROWS | RANGE} BETWEEN',\n  // comparison operator\n  'IS [NOT] DISTINCT FROM',\n]);\n\n// https://cloud.google.com/bigquery/docs/reference/#standard-sql-reference\nexport const bigquery: DialectOptions = {\n  name: 'bigquery',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...tabularOnelineClauses, ...standardOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    extraParens: ['[]'],\n    stringTypes: [\n      // The triple-quoted strings are listed first, so they get matched first.\n      // Otherwise the first two quotes of \"\"\" will get matched as an empty \"\" string.\n      { quote: '\"\"\"..\"\"\"', prefixes: ['R', 'B', 'RB', 'BR'] },\n      { quote: \"'''..'''\", prefixes: ['R', 'B', 'RB', 'BR'] },\n      '\"\"-bs',\n      \"''-bs\",\n      { quote: '\"\"-raw', prefixes: ['R', 'B', 'RB', 'BR'], requirePrefix: true },\n      { quote: \"''-raw\", prefixes: ['R', 'B', 'RB', 'BR'], requirePrefix: true },\n    ],\n    identTypes: ['``'],\n    identChars: { dashes: true },\n    paramTypes: { positional: true, named: ['@'], quoted: ['@'] },\n    variableTypes: [{ regex: String.raw`@@\\w+` }],\n    lineCommentTypes: ['--', '#'],\n    operators: ['&', '|', '^', '~', '>>', '<<', '||', '=>'],\n    postProcess,\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n\nfunction postProcess(tokens: Token[]): Token[] {\n  return detectArraySubscripts(combineParameterizedTypes(tokens));\n}\n\n// Converts OFFSET token inside array from RESERVED_CLAUSE to RESERVED_FUNCTION_NAME\n// See: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#array_subscript_operator\nfunction detectArraySubscripts(tokens: Token[]) {\n  let prevToken = EOF_TOKEN;\n  return tokens.map(token => {\n    if (token.text === 'OFFSET' && prevToken.text === '[') {\n      prevToken = token;\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    } else {\n      prevToken = token;\n      return token;\n    }\n  });\n}\n\n// Combines multiple tokens forming a parameterized type like STRUCT<ARRAY<INT64>> into a single token\nfunction combineParameterizedTypes(tokens: Token[]) {\n  const processed: Token[] = [];\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n\n    if ((isToken.ARRAY(token) || isToken.STRUCT(token)) && tokens[i + 1]?.text === '<') {\n      const endIndex = findClosingAngleBracketIndex(tokens, i + 1);\n      const typeDefTokens = tokens.slice(i, endIndex + 1);\n      processed.push({\n        type: TokenType.IDENTIFIER,\n        raw: typeDefTokens.map(formatTypeDefToken('raw')).join(''),\n        text: typeDefTokens.map(formatTypeDefToken('text')).join(''),\n        start: token.start,\n      });\n      i = endIndex;\n    } else {\n      processed.push(token);\n    }\n  }\n  return processed;\n}\n\nconst formatTypeDefToken =\n  (key: Extract<keyof Token, 'raw' | 'text'>) =>\n  (token: Token): string => {\n    if (token.type === TokenType.IDENTIFIER || token.type === TokenType.COMMA) {\n      return token[key] + ' ';\n    } else {\n      return token[key];\n    }\n  };\n\nfunction findClosingAngleBracketIndex(tokens: Token[], startIndex: number): number {\n  let level = 0;\n  for (let i = startIndex; i < tokens.length; i++) {\n    const token = tokens[i];\n    if (token.text === '<') {\n      level++;\n    } else if (token.text === '>') {\n      level--;\n    } else if (token.text === '>>') {\n      level -= 2;\n    }\n    if (level === 0) {\n      return i;\n    }\n  }\n  return tokens.length - 1;\n}\n","export const functions: string[] = [\n  // https://www.ibm.com/docs/en/db2/11.5?topic=bif-aggregate-functions\n  'ARRAY_AGG',\n  'AVG',\n  'CORRELATION',\n  'COUNT',\n  'COUNT_BIG',\n  'COVARIANCE',\n  'COVARIANCE_SAMP',\n  'CUME_DIST',\n  'GROUPING',\n  'LISTAGG',\n  'MAX',\n  'MEDIAN',\n  'MIN',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'PERCENT_RANK',\n  'REGR_AVGX',\n  'REGR_AVGY',\n  'REGR_COUNT',\n  'REGR_INTERCEPT',\n  'REGR_ICPT',\n  'REGR_R2',\n  'REGR_SLOPE',\n  'REGR_SXX',\n  'REGR_SXY',\n  'REGR_SYY',\n  'STDDEV',\n  'STDDEV_SAMP',\n  'SUM',\n  'VARIANCE',\n  'VARIANCE_SAMP',\n  'XMLAGG',\n  'XMLGROUP',\n\n  // https://www.ibm.com/docs/en/db2/11.5?topic=bif-scalar-functions\n  'ABS',\n  'ABSVAL',\n  'ACOS',\n  'ADD_DAYS',\n  'ADD_HOURS',\n  'ADD_MINUTES',\n  'ADD_MONTHS',\n  'ADD_SECONDS',\n  'ADD_YEARS',\n  'AGE',\n  'ARRAY_DELETE',\n  'ARRAY_FIRST',\n  'ARRAY_LAST',\n  'ARRAY_NEXT',\n  'ARRAY_PRIOR',\n  'ASCII',\n  'ASCII_STR',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'ATANH',\n  'BITAND',\n  'BITANDNOT',\n  'BITOR',\n  'BITXOR',\n  'BITNOT',\n  'BPCHAR',\n  'BSON_TO_JSON',\n  'BTRIM',\n  'CARDINALITY',\n  'CEILING',\n  'CEIL',\n  'CHARACTER_LENGTH',\n  'CHR',\n  'COALESCE',\n  'COLLATION_KEY',\n  'COLLATION_KEY_BIT',\n  'COMPARE_DECFLOAT',\n  'CONCAT',\n  'COS',\n  'COSH',\n  'COT',\n  'CURSOR_ROWCOUNT',\n  'DATAPARTITIONNUM',\n  'DATE_PART',\n  'DATE_TRUNC',\n  'DAY',\n  'DAYNAME',\n  'DAYOFMONTH',\n  'DAYOFWEEK',\n  'DAYOFWEEK_ISO',\n  'DAYOFYEAR',\n  'DAYS',\n  'DAYS_BETWEEN',\n  'DAYS_TO_END_OF_MONTH',\n  'DBPARTITIONNUM',\n  'DECFLOAT',\n  'DECFLOAT_FORMAT',\n  'DECODE',\n  'DECRYPT_BIN',\n  'DECRYPT_CHAR',\n  'DEGREES',\n  'DEREF',\n  'DIFFERENCE',\n  'DIGITS',\n  'DOUBLE_PRECISION',\n  'EMPTY_BLOB',\n  'EMPTY_CLOB',\n  'EMPTY_DBCLOB',\n  'EMPTY_NCLOB',\n  'ENCRYPT',\n  'EVENT_MON_STATE',\n  'EXP',\n  'EXTRACT',\n  'FIRST_DAY',\n  'FLOOR',\n  'FROM_UTC_TIMESTAMP',\n  'GENERATE_UNIQUE',\n  'GETHINT',\n  'GREATEST',\n  'HASH',\n  'HASH4',\n  'HASH8',\n  'HASHEDVALUE',\n  'HEX',\n  'HEXTORAW',\n  'HOUR',\n  'HOURS_BETWEEN',\n  'IDENTITY_VAL_LOCAL',\n  'IFNULL',\n  'INITCAP',\n  'INSERT',\n  'INSTR',\n  'INSTR2',\n  'INSTR4',\n  'INSTRB',\n  'INTNAND',\n  'INTNOR',\n  'INTNXOR',\n  'INTNNOT',\n  'ISNULL',\n  'JSON_ARRAY',\n  'JSON_OBJECT',\n  'JSON_QUERY',\n  'JSON_TO_BSON',\n  'JSON_VALUE',\n  'JULIAN_DAY',\n  'LAST_DAY',\n  'LCASE',\n  'LEAST',\n  'LEFT',\n  'LENGTH',\n  'LENGTH2',\n  'LENGTH4',\n  'LENGTHB',\n  'LN',\n  'LOCATE',\n  'LOCATE_IN_STRING',\n  'LOG10',\n  'LONG_VARCHAR',\n  'LONG_VARGRAPHIC',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'MAX',\n  'MAX_CARDINALITY',\n  'MICROSECOND',\n  'MIDNIGHT_SECONDS',\n  'MIN',\n  'MINUTE',\n  'MINUTES_BETWEEN',\n  'MOD',\n  'MONTH',\n  'MONTHNAME',\n  'MONTHS_BETWEEN',\n  'MULTIPLY_ALT',\n  'NEXT_DAY',\n  'NEXT_MONTH',\n  'NEXT_QUARTER',\n  'NEXT_WEEK',\n  'NEXT_YEAR',\n  'NORMALIZE_DECFLOAT',\n  'NOW',\n  'NULLIF',\n  'NVL',\n  'NVL2',\n  'OCTET_LENGTH',\n  'OVERLAY',\n  'PARAMETER',\n  'POSITION',\n  'POSSTR',\n  'POW',\n  'POWER',\n  'QUANTIZE',\n  'QUARTER',\n  'QUOTE_IDENT',\n  'QUOTE_LITERAL',\n  'RADIANS',\n  'RAISE_ERROR',\n  'RAND',\n  'RANDOM',\n  'RAWTOHEX',\n  'REC2XML',\n  'REGEXP_COUNT',\n  'REGEXP_EXTRACT',\n  'REGEXP_INSTR',\n  'REGEXP_LIKE',\n  'REGEXP_MATCH_COUNT',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'REPEAT',\n  'REPLACE',\n  'RID',\n  'RID_BIT',\n  'RIGHT',\n  'ROUND',\n  'ROUND_TIMESTAMP',\n  'RPAD',\n  'RTRIM',\n  'SECLABEL',\n  'SECLABEL_BY_NAME',\n  'SECLABEL_TO_CHAR',\n  'SECOND',\n  'SECONDS_BETWEEN',\n  'SIGN',\n  'SIN',\n  'SINH',\n  'SOUNDEX',\n  'SPACE',\n  'SQRT',\n  'STRIP',\n  'STRLEFT',\n  'STRPOS',\n  'STRRIGHT',\n  'SUBSTR',\n  'SUBSTR2',\n  'SUBSTR4',\n  'SUBSTRB',\n  'SUBSTRING',\n  'TABLE_NAME',\n  'TABLE_SCHEMA',\n  'TAN',\n  'TANH',\n  'THIS_MONTH',\n  'THIS_QUARTER',\n  'THIS_WEEK',\n  'THIS_YEAR',\n  'TIMESTAMP_FORMAT',\n  'TIMESTAMP_ISO',\n  'TIMESTAMPDIFF',\n  'TIMEZONE',\n  'TO_CHAR',\n  'TO_CLOB',\n  'TO_DATE',\n  'TO_HEX',\n  'TO_MULTI_BYTE',\n  'TO_NCHAR',\n  'TO_NCLOB',\n  'TO_NUMBER',\n  'TO_SINGLE_BYTE',\n  'TO_TIMESTAMP',\n  'TO_UTC_TIMESTAMP',\n  'TOTALORDER',\n  'TRANSLATE',\n  'TRIM',\n  'TRIM_ARRAY',\n  'TRUNC_TIMESTAMP',\n  'TRUNCATE',\n  'TRUNC',\n  'TYPE_ID',\n  'TYPE_NAME',\n  'TYPE_SCHEMA',\n  'UCASE',\n  'UNICODE_STR',\n  'UPPER',\n  'VALUE',\n  'VARCHAR_BIT_FORMAT',\n  'VARCHAR_FORMAT',\n  'VARCHAR_FORMAT_BIT',\n  'VERIFY_GROUP_FOR_USER',\n  'VERIFY_ROLE_FOR_USER',\n  'VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER',\n  'WEEK',\n  'WEEK_ISO',\n  'WEEKS_BETWEEN',\n  'WIDTH_BUCKET',\n  'XMLATTRIBUTES',\n  'XMLCOMMENT',\n  'XMLCONCAT',\n  'XMLDOCUMENT',\n  'XMLELEMENT',\n  'XMLFOREST',\n  'XMLNAMESPACES',\n  'XMLPARSE',\n  'XMLPI',\n  'XMLQUERY',\n  'XMLROW',\n  'XMLSERIALIZE',\n  'XMLTEXT',\n  'XMLVALIDATE',\n  'XMLXSROBJECTID',\n  'XSLTRANSFORM',\n  'YEAR',\n  'YEARS_BETWEEN',\n  'YMD_BETWEEN',\n\n  // https://www.ibm.com/docs/en/db2/11.5?topic=bif-table-functions\n  'BASE_TABLE',\n  'JSON_TABLE',\n  'UNNEST',\n  'XMLTABLE',\n\n  // https://www.ibm.com/docs/en/db2/11.5?topic=expressions-olap-specification\n  // Additional function names not already present in the aggregate functions list\n  'RANK',\n  'DENSE_RANK',\n  'NTILE',\n  'LAG',\n  'LEAD',\n  'ROW_NUMBER',\n  'FIRST_VALUE',\n  'LAST_VALUE',\n  'NTH_VALUE',\n  'RATIO_TO_REPORT',\n\n  // Type casting\n  'CAST',\n];\n","export const keywords: string[] = [\n  // https://www.ibm.com/docs/en/db2/11.5?topic=sql-reserved-schema-names-reserved-words\n  'ACTIVATE',\n  'ADD',\n  'AFTER',\n  'ALIAS',\n  'ALL',\n  'ALLOCATE',\n  'ALLOW',\n  'ALTER',\n  'AND',\n  'ANY',\n  'AS',\n  'ASENSITIVE',\n  'ASSOCIATE',\n  'ASUTIME',\n  'AT',\n  'ATTRIBUTES',\n  'AUDIT',\n  'AUTHORIZATION',\n  'AUX',\n  'AUXILIARY',\n  'BEFORE',\n  'BEGIN',\n  'BETWEEN',\n  'BINARY',\n  'BUFFERPOOL',\n  'BY',\n  'CACHE',\n  'CALL',\n  'CALLED',\n  'CAPTURE',\n  'CARDINALITY',\n  'CASCADED',\n  'CASE',\n  'CAST',\n  'CHECK',\n  'CLONE',\n  'CLOSE',\n  'CLUSTER',\n  'COLLECTION',\n  'COLLID',\n  'COLUMN',\n  'COMMENT',\n  'COMMIT',\n  'CONCAT',\n  'CONDITION',\n  'CONNECT',\n  'CONNECTION',\n  'CONSTRAINT',\n  'CONTAINS',\n  'CONTINUE',\n  'COUNT',\n  'COUNT_BIG',\n  'CREATE',\n  'CROSS',\n  'CURRENT',\n  'CURRENT_DATE',\n  'CURRENT_LC_CTYPE',\n  'CURRENT_PATH',\n  'CURRENT_SCHEMA',\n  'CURRENT_SERVER',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_TIMEZONE',\n  'CURRENT_USER',\n  'CURSOR',\n  'CYCLE',\n  'DATA',\n  'DATABASE',\n  'DATAPARTITIONNAME',\n  'DATAPARTITIONNUM',\n  'DAY',\n  'DAYS',\n  'DB2GENERAL',\n  'DB2GENRL',\n  'DB2SQL',\n  'DBINFO',\n  'DBPARTITIONNAME',\n  'DBPARTITIONNUM',\n  'DEALLOCATE',\n  'DECLARE',\n  'DEFAULT',\n  'DEFAULTS',\n  'DEFINITION',\n  'DELETE',\n  'DENSERANK',\n  'DENSE_RANK',\n  'DESCRIBE',\n  'DESCRIPTOR',\n  'DETERMINISTIC',\n  'DIAGNOSTICS',\n  'DISABLE',\n  'DISALLOW',\n  'DISCONNECT',\n  'DISTINCT',\n  'DO',\n  'DOCUMENT',\n  'DROP',\n  'DSSIZE',\n  'DYNAMIC',\n  'EACH',\n  'EDITPROC',\n  'ELSE',\n  'ELSEIF',\n  'ENABLE',\n  'ENCODING',\n  'ENCRYPTION',\n  'END',\n  'END-EXEC',\n  'ENDING',\n  'ERASE',\n  'ESCAPE',\n  'EVERY',\n  'EXCEPT',\n  'EXCEPTION',\n  'EXCLUDING',\n  'EXCLUSIVE',\n  'EXECUTE',\n  'EXISTS',\n  'EXIT',\n  'EXPLAIN',\n  'EXTENDED',\n  'EXTERNAL',\n  'EXTRACT',\n  'FENCED',\n  'FETCH',\n  'FIELDPROC',\n  'FILE',\n  'FINAL',\n  'FIRST1',\n  'FOR',\n  'FOREIGN',\n  'FREE',\n  'FROM',\n  'FULL',\n  'FUNCTION',\n  'GENERAL',\n  'GENERATED',\n  'GET',\n  'GLOBAL',\n  'GO',\n  'GOTO',\n  'GRANT',\n  'GRAPHIC',\n  'GROUP',\n  'HANDLER',\n  'HASH',\n  'HASHED_VALUE',\n  'HAVING',\n  'HINT',\n  'HOLD',\n  'HOUR',\n  'HOURS',\n  'IDENTITY',\n  'IF',\n  'IMMEDIATE',\n  'IMPORT',\n  'IN',\n  'INCLUDING',\n  'INCLUSIVE',\n  'INCREMENT',\n  'INDEX',\n  'INDICATOR',\n  'INDICATORS',\n  'INF',\n  'INFINITY',\n  'INHERIT',\n  'INNER',\n  'INOUT',\n  'INSENSITIVE',\n  'INSERT',\n  'INTEGRITY',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'ISNULL',\n  'ISOBID',\n  'ISOLATION',\n  'ITERATE',\n  'JAR',\n  'JAVA',\n  'JOIN',\n  'KEEP',\n  'KEY',\n  'LABEL',\n  'LANGUAGE',\n  'LAST3',\n  'LATERAL',\n  'LC_CTYPE',\n  'LEAVE',\n  'LEFT',\n  'LIKE',\n  'LIMIT',\n  'LINKTYPE',\n  'LOCAL',\n  'LOCALDATE',\n  'LOCALE',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOCATOR',\n  'LOCATORS',\n  'LOCK',\n  'LOCKMAX',\n  'LOCKSIZE',\n  'LOOP',\n  'MAINTAINED',\n  'MATERIALIZED',\n  'MAXVALUE',\n  'MICROSECOND',\n  'MICROSECONDS',\n  'MINUTE',\n  'MINUTES',\n  'MINVALUE',\n  'MODE',\n  'MODIFIES',\n  'MONTH',\n  'MONTHS',\n  'NAN',\n  'NEW',\n  'NEW_TABLE',\n  'NEXTVAL',\n  'NO',\n  'NOCACHE',\n  'NOCYCLE',\n  'NODENAME',\n  'NODENUMBER',\n  'NOMAXVALUE',\n  'NOMINVALUE',\n  'NONE',\n  'NOORDER',\n  'NORMALIZED',\n  'NOT2',\n  'NOTNULL',\n  'NULL',\n  'NULLS',\n  'NUMPARTS',\n  'OBID',\n  'OF',\n  'OFF',\n  'OFFSET',\n  'OLD',\n  'OLD_TABLE',\n  'ON',\n  'OPEN',\n  'OPTIMIZATION',\n  'OPTIMIZE',\n  'OPTION',\n  'OR',\n  'ORDER',\n  'OUT',\n  'OUTER',\n  'OVER',\n  'OVERRIDING',\n  'PACKAGE',\n  'PADDED',\n  'PAGESIZE',\n  'PARAMETER',\n  'PART',\n  'PARTITION',\n  'PARTITIONED',\n  'PARTITIONING',\n  'PARTITIONS',\n  'PASSWORD',\n  'PATH',\n  'PERCENT',\n  'PIECESIZE',\n  'PLAN',\n  'POSITION',\n  'PRECISION',\n  'PREPARE',\n  'PREVVAL',\n  'PRIMARY',\n  'PRIQTY',\n  'PRIVILEGES',\n  'PROCEDURE',\n  'PROGRAM',\n  'PSID',\n  'PUBLIC',\n  'QUERY',\n  'QUERYNO',\n  'RANGE',\n  'RANK',\n  'READ',\n  'READS',\n  'RECOVERY',\n  'REFERENCES',\n  'REFERENCING',\n  'REFRESH',\n  'RELEASE',\n  'RENAME',\n  'REPEAT',\n  'RESET',\n  'RESIGNAL',\n  'RESTART',\n  'RESTRICT',\n  'RESULT',\n  'RESULT_SET_LOCATOR',\n  'RETURN',\n  'RETURNS',\n  'REVOKE',\n  'RIGHT',\n  'ROLE',\n  'ROLLBACK',\n  'ROUND_CEILING',\n  'ROUND_DOWN',\n  'ROUND_FLOOR',\n  'ROUND_HALF_DOWN',\n  'ROUND_HALF_EVEN',\n  'ROUND_HALF_UP',\n  'ROUND_UP',\n  'ROUTINE',\n  'ROW',\n  'ROWNUMBER',\n  'ROWS',\n  'ROWSET',\n  'ROW_NUMBER',\n  'RRN',\n  'RUN',\n  'SAVEPOINT',\n  'SCHEMA',\n  'SCRATCHPAD',\n  'SCROLL',\n  'SEARCH',\n  'SECOND',\n  'SECONDS',\n  'SECQTY',\n  'SECURITY',\n  'SELECT',\n  'SENSITIVE',\n  'SEQUENCE',\n  'SESSION',\n  'SESSION_USER',\n  'SET',\n  'SIGNAL',\n  'SIMPLE',\n  'SNAN',\n  'SOME',\n  'SOURCE',\n  'SPECIFIC',\n  'SQL',\n  'SQLID',\n  'STACKED',\n  'STANDARD',\n  'START',\n  'STARTING',\n  'STATEMENT',\n  'STATIC',\n  'STATMENT',\n  'STAY',\n  'STOGROUP',\n  'STORES',\n  'STYLE',\n  'SUBSTRING',\n  'SUMMARY',\n  'SYNONYM',\n  'SYSFUN',\n  'SYSIBM',\n  'SYSPROC',\n  'SYSTEM',\n  'SYSTEM_USER',\n  'TABLE',\n  'TABLESPACE',\n  'THEN',\n  'TO',\n  'TRANSACTION',\n  'TRIGGER',\n  'TRIM',\n  'TRUNCATE',\n  'TYPE',\n  'UNDO',\n  'UNION',\n  'UNIQUE',\n  'UNTIL',\n  'UPDATE',\n  'USAGE',\n  'USER',\n  'USING',\n  'VALIDPROC',\n  'VALUE',\n  'VALUES',\n  'VARIABLE',\n  'VARIANT',\n  'VCAT',\n  'VERSION',\n  'VIEW',\n  'VOLATILE',\n  'VOLUMES',\n  'WHEN',\n  'WHENEVER',\n  'WHERE',\n  'WHILE',\n  'WITH',\n  'WITHOUT',\n  'WLM',\n  'WRITE',\n  'XMLELEMENT',\n  'XMLEXISTS',\n  'XMLNAMESPACES',\n  'YEAR',\n  'YEARS',\n];\n\nexport const dataTypes: string[] = [\n  // https://www.ibm.com/docs/en/db2-for-zos/12?topic=columns-data-types\n  'ARRAY',\n  'BIGINT',\n  'BINARY',\n  'BLOB',\n  'BOOLEAN',\n  'CCSID',\n  'CHAR',\n  'CHARACTER',\n  'CLOB',\n  'DATE',\n  'DATETIME',\n  'DBCLOB',\n  'DEC',\n  'DECIMAL',\n  'DOUBLE',\n  'DOUBLE PRECISION',\n  'FLOAT',\n  'FLOAT4',\n  'FLOAT8',\n  'GRAPHIC',\n  'INT',\n  'INT2',\n  'INT4',\n  'INT8',\n  'INTEGER',\n  'INTERVAL',\n  'LONG VARCHAR',\n  'LONG VARGRAPHIC',\n  'NCHAR',\n  'NCHR',\n  'NCLOB',\n  'NVARCHAR',\n  'NUMERIC',\n  'SMALLINT',\n  'REAL',\n  'TIME',\n  'TIMESTAMP',\n  'VARBINARY',\n  'VARCHAR',\n  'VARGRAPHIC',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './db2.functions.js';\nimport { dataTypes, keywords } from './db2.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY [INPUT SEQUENCE]',\n  'LIMIT',\n  'OFFSET',\n  'FETCH NEXT',\n  'FOR UPDATE [OF]',\n  'FOR {READ | FETCH} ONLY',\n  'FOR {RR | CS | UR | RS} [USE AND KEEP {SHARE | UPDATE | EXCLUSIVE} LOCKS]',\n  'WAIT FOR OUTCOME',\n  'SKIP LOCKED DATA',\n  'INTO',\n  // Data modification\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE INTO',\n  'WHEN [NOT] MATCHED [THEN]',\n  'UPDATE SET',\n  'INSERT',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [GLOBAL TEMPORARY | EXTERNAL] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE] VIEW',\n  // - update:\n  'UPDATE',\n  'WHERE CURRENT OF',\n  'WITH {RR | RS | CS | UR}',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // alter table:\n  'ALTER TABLE',\n  'ADD [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME COLUMN',\n  'ALTER [COLUMN]',\n  'SET DATA TYPE', // for alter column\n  'SET NOT NULL', // for alter column\n  'DROP {DEFAULT | GENERATED | NOT NULL}', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://www.ibm.com/docs/en/db2/11.5?topic=s-statements\n  'ALLOCATE',\n  'ALTER AUDIT POLICY',\n  'ALTER BUFFERPOOL',\n  'ALTER DATABASE PARTITION GROUP',\n  'ALTER DATABASE',\n  'ALTER EVENT MONITOR',\n  'ALTER FUNCTION',\n  'ALTER HISTOGRAM TEMPLATE',\n  'ALTER INDEX',\n  'ALTER MASK',\n  'ALTER METHOD',\n  'ALTER MODULE',\n  'ALTER NICKNAME',\n  'ALTER PACKAGE',\n  'ALTER PERMISSION',\n  'ALTER PROCEDURE',\n  'ALTER SCHEMA',\n  'ALTER SECURITY LABEL COMPONENT',\n  'ALTER SECURITY POLICY',\n  'ALTER SEQUENCE',\n  'ALTER SERVER',\n  'ALTER SERVICE CLASS',\n  'ALTER STOGROUP',\n  'ALTER TABLESPACE',\n  'ALTER THRESHOLD',\n  'ALTER TRIGGER',\n  'ALTER TRUSTED CONTEXT',\n  'ALTER TYPE',\n  'ALTER USAGE LIST',\n  'ALTER USER MAPPING',\n  'ALTER VIEW',\n  'ALTER WORK ACTION SET',\n  'ALTER WORK CLASS SET',\n  'ALTER WORKLOAD',\n  'ALTER WRAPPER',\n  'ALTER XSROBJECT',\n  'ALTER STOGROUP',\n  'ALTER TABLESPACE',\n  'ALTER TRIGGER',\n  'ALTER TRUSTED CONTEXT',\n  'ALTER VIEW',\n  'ASSOCIATE [RESULT SET] {LOCATOR | LOCATORS}',\n  'AUDIT',\n  'BEGIN DECLARE SECTION',\n  'CALL',\n  'CLOSE',\n  'COMMENT ON',\n  'COMMIT [WORK]',\n  'CONNECT',\n  'CREATE [OR REPLACE] [PUBLIC] ALIAS',\n  'CREATE AUDIT POLICY',\n  'CREATE BUFFERPOOL',\n  'CREATE DATABASE PARTITION GROUP',\n  'CREATE EVENT MONITOR',\n  'CREATE [OR REPLACE] FUNCTION',\n  'CREATE FUNCTION MAPPING',\n  'CREATE HISTOGRAM TEMPLATE',\n  'CREATE [UNIQUE] INDEX',\n  'CREATE INDEX EXTENSION',\n  'CREATE [OR REPLACE] MASK',\n  'CREATE [SPECIFIC] METHOD',\n  'CREATE [OR REPLACE] MODULE',\n  'CREATE [OR REPLACE] NICKNAME',\n  'CREATE [OR REPLACE] PERMISSION',\n  'CREATE [OR REPLACE] PROCEDURE',\n  'CREATE ROLE',\n  'CREATE SCHEMA',\n  'CREATE SECURITY LABEL [COMPONENT]',\n  'CREATE SECURITY POLICY',\n  'CREATE [OR REPLACE] SEQUENCE',\n  'CREATE SERVICE CLASS',\n  'CREATE SERVER',\n  'CREATE STOGROUP',\n  'CREATE SYNONYM',\n  'CREATE [LARGE | REGULAR | {SYSTEM | USER} TEMPORARY] TABLESPACE',\n  'CREATE THRESHOLD',\n  'CREATE {TRANSFORM | TRANSFORMS} FOR',\n  'CREATE [OR REPLACE] TRIGGER',\n  'CREATE TRUSTED CONTEXT',\n  'CREATE [OR REPLACE] TYPE',\n  'CREATE TYPE MAPPING',\n  'CREATE USAGE LIST',\n  'CREATE USER MAPPING FOR',\n  'CREATE [OR REPLACE] VARIABLE',\n  'CREATE WORK ACTION SET',\n  'CREATE WORK CLASS SET',\n  'CREATE WORKLOAD',\n  'CREATE WRAPPER',\n  'DECLARE',\n  'DECLARE GLOBAL TEMPORARY TABLE',\n  'DESCRIBE [INPUT | OUTPUT]',\n  'DISCONNECT',\n  'DROP [PUBLIC] ALIAS',\n  'DROP AUDIT POLICY',\n  'DROP BUFFERPOOL',\n  'DROP DATABASE PARTITION GROUP',\n  'DROP EVENT MONITOR',\n  'DROP [SPECIFIC] FUNCTION',\n  'DROP FUNCTION MAPPING',\n  'DROP HISTOGRAM TEMPLATE',\n  'DROP INDEX [EXTENSION]',\n  'DROP MASK',\n  'DROP [SPECIFIC] METHOD',\n  'DROP MODULE',\n  'DROP NICKNAME',\n  'DROP PACKAGE',\n  'DROP PERMISSION',\n  'DROP [SPECIFIC] PROCEDURE',\n  'DROP ROLE',\n  'DROP SCHEMA',\n  'DROP SECURITY LABEL [COMPONENT]',\n  'DROP SECURITY POLICY',\n  'DROP SEQUENCE',\n  'DROP SERVER',\n  'DROP SERVICE CLASS',\n  'DROP STOGROUP',\n  'DROP TABLE HIERARCHY',\n  'DROP {TABLESPACE | TABLESPACES}',\n  'DROP {TRANSFORM | TRANSFORMS}',\n  'DROP THRESHOLD',\n  'DROP TRIGGER',\n  'DROP TRUSTED CONTEXT',\n  'DROP TYPE [MAPPING]',\n  'DROP USAGE LIST',\n  'DROP USER MAPPING FOR',\n  'DROP VARIABLE',\n  'DROP VIEW [HIERARCHY]',\n  'DROP WORK {ACTION | CLASS} SET',\n  'DROP WORKLOAD',\n  'DROP WRAPPER',\n  'DROP XSROBJECT',\n  'END DECLARE SECTION',\n  'EXECUTE [IMMEDIATE]',\n  'EXPLAIN {PLAN [SECTION] | ALL}',\n  'FETCH [FROM]',\n  'FLUSH {BUFFERPOOL | BUFFERPOOLS} ALL',\n  'FLUSH EVENT MONITOR',\n  'FLUSH FEDERATED CACHE',\n  'FLUSH OPTIMIZATION PROFILE CACHE',\n  'FLUSH PACKAGE CACHE [DYNAMIC]',\n  'FLUSH AUTHENTICATION CACHE [FOR ALL]',\n  'FREE LOCATOR',\n  'GET DIAGNOSTICS',\n  'GOTO',\n  'GRANT', // TODO: lots of syntax here\n  'INCLUDE',\n  'ITERATE',\n  'LEAVE',\n  'LOCK TABLE',\n  'LOOP',\n  'OPEN',\n  'PIPE',\n  'PREPARE',\n  'REFRESH TABLE',\n  'RELEASE',\n  'RELEASE [TO] SAVEPOINT',\n  'RENAME [TABLE | INDEX | STOGROUP | TABLESPACE]',\n  'REPEAT',\n  'RESIGNAL',\n  'RETURN',\n  'REVOKE', // TODO: lots of syntax here\n  'ROLLBACK [WORK] [TO SAVEPOINT]',\n  'SAVEPOINT',\n  'SET COMPILATION ENVIRONMENT',\n  'SET CONNECTION',\n  'SET CURRENT', // TODO: bunch of syntax here\n  'SET ENCRYPTION PASSWORD',\n  'SET EVENT MONITOR STATE',\n  'SET INTEGRITY',\n  'SET PASSTHRU',\n  'SET PATH',\n  'SET ROLE',\n  'SET SCHEMA',\n  'SET SERVER OPTION',\n  'SET {SESSION AUTHORIZATION | SESSION_USER}',\n  'SET USAGE LIST',\n  'SIGNAL',\n  'TRANSFER OWNERSHIP OF',\n  'WHENEVER {NOT FOUND | SQLERROR | SQLWARNING}',\n  'WHILE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON DELETE',\n  'ON UPDATE',\n  'SET NULL',\n  '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const db2: DialectOptions = {\n  name: 'db2',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    extraParens: ['[]'],\n    stringTypes: [\n      { quote: \"''-qq\", prefixes: ['G', 'N', 'U&'] },\n      { quote: \"''-raw\", prefixes: ['X', 'BX', 'GX', 'UX'], requirePrefix: true },\n    ],\n    identTypes: [`\"\"-qq`],\n    identChars: { first: '@#$', rest: '@#$' },\n    paramTypes: { positional: true, named: [':'] },\n    paramChars: { first: '@#$', rest: '@#$' },\n    operators: [\n      '**',\n      '%',\n      '|',\n      '&',\n      '^',\n      '~',\n      '¬=',\n      '¬>',\n      '¬<',\n      '!>',\n      '!<',\n      '^=',\n      '^>',\n      '^<',\n      '||',\n      '->',\n      '=>',\n    ],\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const functions: string[] = [\n  // https://www.ibm.com/docs/en/i/7.5?topic=functions-aggregate\n  // TODO: 'ANY', - conflicts with test for ANY predicate in 'operators.ys'!!\n  'ARRAY_AGG',\n  'AVG',\n  'CORR',\n  'CORRELATION',\n  'COUNT',\n  'COUNT_BIG',\n  'COVAR_POP',\n  'COVARIANCE',\n  'COVAR',\n  'COVAR_SAMP',\n  'COVARIANCE_SAMP',\n  'EVERY',\n  'GROUPING',\n  'JSON_ARRAYAGG',\n  'JSON_OBJECTAGG',\n  'LISTAGG',\n  'MAX',\n  'MEDIAN',\n  'MIN',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  // https://www.ibm.com/docs/en/i/7.5?topic=functions-regression'\n  'REGR_AVGX',\n  'REGR_AVGY',\n  'REGR_COUNT',\n  'REGR_INTERCEPT',\n  'REGR_R2',\n  'REGR_SLOPE',\n  'REGR_SXX',\n  'REGR_SXY',\n  'REGR_SYY',\n  'SOME',\n  'STDDEV_POP',\n  'STDDEV',\n  'STDDEV_SAMP',\n  'SUM',\n  'VAR_POP',\n  'VARIANCE',\n  'VAR',\n  'VAR_SAMP',\n  'VARIANCE_SAMP',\n  'XMLAGG',\n  'XMLGROUP',\n\n  // https://www.ibm.com/docs/en/i/7.5?topic=functions-scalar\n  'ABS',\n  'ABSVAL',\n  'ACOS',\n  'ADD_DAYS',\n  'ADD_HOURS',\n  'ADD_MINUTES',\n  'ADD_MONTHS',\n  'ADD_SECONDS',\n  'ADD_YEARS',\n  'ANTILOG',\n  'ARRAY_MAX_CARDINALITY',\n  'ARRAY_TRIM',\n  'ASCII',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'ATANH',\n  'BASE64_DECODE',\n  'BASE64_ENCODE',\n  'BIT_LENGTH',\n  'BITAND',\n  'BITANDNOT',\n  'BITNOT',\n  'BITOR',\n  'BITXOR',\n  'BSON_TO_JSON',\n  'CARDINALITY',\n  'CEIL',\n  'CEILING',\n  'CHAR_LENGTH',\n  'CHARACTER_LENGTH',\n  'CHR',\n  'COALESCE',\n  'COMPARE_DECFLOAT',\n  'CONCAT',\n  'CONTAINS',\n  'COS',\n  'COSH',\n  'COT',\n  'CURDATE',\n  'CURTIME',\n  'DATABASE',\n  'DATAPARTITIONNAME',\n  'DATAPARTITIONNUM',\n  'DAY',\n  'DAYNAME',\n  'DAYOFMONTH',\n  'DAYOFWEEK_ISO',\n  'DAYOFWEEK',\n  'DAYOFYEAR',\n  'DAYS',\n  'DBPARTITIONNAME',\n  'DBPARTITIONNUM',\n  'DECFLOAT_FORMAT',\n  'DECFLOAT_SORTKEY',\n  'DECRYPT_BINARY',\n  'DECRYPT_BIT',\n  'DECRYPT_CHAR',\n  'DECRYPT_DB',\n  'DEGREES',\n  'DIFFERENCE',\n  'DIGITS',\n  'DLCOMMENT',\n  'DLLINKTYPE',\n  'DLURLCOMPLETE',\n  'DLURLPATH',\n  'DLURLPATHONLY',\n  'DLURLSCHEME',\n  'DLURLSERVER',\n  'DLVALUE',\n  'DOUBLE_PRECISION',\n  'DOUBLE',\n  'ENCRPYT',\n  'ENCRYPT_AES',\n  'ENCRYPT_AES256',\n  'ENCRYPT_RC2',\n  'ENCRYPT_TDES',\n  'EXP',\n  'EXTRACT',\n  'FIRST_DAY',\n  'FLOOR',\n  'GENERATE_UNIQUE',\n  'GET_BLOB_FROM_FILE',\n  'GET_CLOB_FROM_FILE',\n  'GET_DBCLOB_FROM_FILE',\n  'GET_XML_FILE',\n  'GETHINT',\n  'GREATEST',\n  'HASH_MD5',\n  'HASH_ROW',\n  'HASH_SHA1',\n  'HASH_SHA256',\n  'HASH_SHA512',\n  'HASH_VALUES',\n  'HASHED_VALUE',\n  'HEX',\n  'HEXTORAW',\n  'HOUR',\n  'HTML_ENTITY_DECODE',\n  'HTML_ENTITY_ENCODE',\n  'HTTP_DELETE_BLOB',\n  'HTTP_DELETE',\n  'HTTP_GET_BLOB',\n  'HTTP_GET',\n  'HTTP_PATCH_BLOB',\n  'HTTP_PATCH',\n  'HTTP_POST_BLOB',\n  'HTTP_POST',\n  'HTTP_PUT_BLOB',\n  'HTTP_PUT',\n  'IDENTITY_VAL_LOCAL',\n  'IFNULL',\n  'INSERT',\n  'INSTR',\n  'INTERPRET',\n  'ISFALSE',\n  'ISNOTFALSE',\n  'ISNOTTRUE',\n  'ISTRUE',\n  'JSON_ARRAY',\n  'JSON_OBJECT',\n  'JSON_QUERY',\n  'JSON_TO_BSON',\n  'JSON_UPDATE',\n  'JSON_VALUE',\n  'JULIAN_DAY',\n  'LAND',\n  'LAST_DAY',\n  'LCASE',\n  'LEAST',\n  'LEFT',\n  'LENGTH',\n  'LN',\n  'LNOT',\n  'LOCATE_IN_STRING',\n  'LOCATE',\n  'LOG10',\n  'LOR',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'MAX_CARDINALITY',\n  'MAX',\n  'MICROSECOND',\n  'MIDNIGHT_SECONDS',\n  'MIN',\n  'MINUTE',\n  'MOD',\n  'MONTH',\n  'MONTHNAME',\n  'MONTHS_BETWEEN',\n  'MQREAD',\n  'MQREADCLOB',\n  'MQRECEIVE',\n  'MQRECEIVECLOB',\n  'MQSEND',\n  'MULTIPLY_ALT',\n  'NEXT_DAY',\n  'NORMALIZE_DECFLOAT',\n  'NOW',\n  'NULLIF',\n  'NVL',\n  'OCTET_LENGTH',\n  'OVERLAY',\n  'PI',\n  'POSITION',\n  'POSSTR',\n  'POW',\n  'POWER',\n  'QUANTIZE',\n  'QUARTER',\n  'RADIANS',\n  'RAISE_ERROR',\n  'RANDOM',\n  'RAND',\n  'REGEXP_COUNT',\n  'REGEXP_INSTR',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'REPEAT',\n  'REPLACE',\n  'RID',\n  'RIGHT',\n  'ROUND_TIMESTAMP',\n  'ROUND',\n  'RPAD',\n  'RRN',\n  'RTRIM',\n  'SCORE',\n  'SECOND',\n  'SIGN',\n  'SIN',\n  'SINH',\n  'SOUNDEX',\n  'SPACE',\n  'SQRT',\n  'STRIP',\n  'STRLEFT',\n  'STRPOS',\n  'STRRIGHT',\n  'SUBSTR',\n  'SUBSTRING',\n  'TABLE_NAME',\n  'TABLE_SCHEMA',\n  'TAN',\n  'TANH',\n  'TIMESTAMP_FORMAT',\n  'TIMESTAMP_ISO',\n  'TIMESTAMPDIFF_BIG',\n  'TIMESTAMPDIFF',\n  'TO_CHAR',\n  'TO_CLOB',\n  'TO_DATE',\n  'TO_NUMBER',\n  'TO_TIMESTAMP',\n  'TOTALORDER',\n  'TRANSLATE',\n  'TRIM_ARRAY',\n  'TRIM',\n  'TRUNC_TIMESTAMP',\n  'TRUNC',\n  'TRUNCATE',\n  'UCASE',\n  'UPPER',\n  'URL_DECODE',\n  'URL_ENCODE',\n  'VALUE',\n  'VARBINARY_FORMAT',\n  'VARCHAR_BIT_FORMAT',\n  'VARCHAR_FORMAT_BINARY',\n  'VARCHAR_FORMAT',\n  'VERIFY_GROUP_FOR_USER',\n  'WEEK_ISO',\n  'WEEK',\n  'WRAP',\n  'XMLATTRIBUTES',\n  'XMLCOMMENT',\n  'XMLCONCAT',\n  'XMLDOCUMENT',\n  'XMLELEMENT',\n  'XMLFOREST',\n  'XMLNAMESPACES',\n  'XMLPARSE',\n  'XMLPI',\n  'XMLROW',\n  'XMLSERIALIZE',\n  'XMLTEXT',\n  'XMLVALIDATE',\n  'XOR',\n  'XSLTRANSFORM',\n  'YEAR',\n  'ZONED',\n\n  // https://www.ibm.com/docs/en/i/7.5?topic=functions-table\n  'BASE_TABLE',\n  'HTTP_DELETE_BLOB_VERBOSE',\n  'HTTP_DELETE_VERBOSE',\n  'HTTP_GET_BLOB_VERBOSE',\n  'HTTP_GET_VERBOSE',\n  'HTTP_PATCH_BLOB_VERBOSE',\n  'HTTP_PATCH_VERBOSE',\n  'HTTP_POST_BLOB_VERBOSE',\n  'HTTP_POST_VERBOSE',\n  'HTTP_PUT_BLOB_VERBOSE',\n  'HTTP_PUT_VERBOSE',\n  'JSON_TABLE',\n  'MQREADALL',\n  'MQREADALLCLOB',\n  'MQRECEIVEALL',\n  'MQRECEIVEALLCLOB',\n  'XMLTABLE',\n\n  // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-row\n  'UNPACK',\n\n  // https://www.ibm.com/docs/en/i/7.5?topic=expressions-olap-specifications\n  'CUME_DIST',\n  'DENSE_RANK',\n  'FIRST_VALUE',\n  'LAG',\n  'LAST_VALUE',\n  'LEAD',\n  'NTH_VALUE',\n  'NTILE',\n  'PERCENT_RANK',\n  'RANK',\n  'RATIO_TO_REPORT',\n  'ROW_NUMBER',\n\n  // Type casting\n  'CAST',\n];\n","export const keywords: string[] = [\n  // https://www.ibm.com/docs/en/i/7.5?topic=words-reserved\n  // TODO: This list likely contains all keywords, not only the reserved ones,\n  // try to filter it down to just the reserved keywords.\n  'ABSENT',\n  'ACCORDING',\n  'ACCTNG',\n  'ACTION',\n  'ACTIVATE',\n  'ADD',\n  'ALIAS',\n  'ALL',\n  'ALLOCATE',\n  'ALLOW',\n  'ALTER',\n  'AND',\n  'ANY',\n  'APPEND',\n  'APPLNAME',\n  'ARRAY',\n  'ARRAY_AGG',\n  'ARRAY_TRIM',\n  'AS',\n  'ASC',\n  'ASENSITIVE',\n  'ASSOCIATE',\n  'ATOMIC',\n  'ATTACH',\n  'ATTRIBUTES',\n  'AUTHORIZATION',\n  'AUTONOMOUS',\n  'BEFORE',\n  'BEGIN',\n  'BETWEEN',\n  'BIND',\n  'BSON',\n  'BUFFERPOOL',\n  'BY',\n  'CACHE',\n  'CALL',\n  'CALLED',\n  'CARDINALITY',\n  'CASE',\n  'CAST',\n  'CHECK',\n  'CL',\n  'CLOSE',\n  'CLUSTER',\n  'COLLECT',\n  'COLLECTION',\n  'COLUMN',\n  'COMMENT',\n  'COMMIT',\n  'COMPACT',\n  'COMPARISONS',\n  'COMPRESS',\n  'CONCAT',\n  'CONCURRENT',\n  'CONDITION',\n  'CONNECT',\n  'CONNECT_BY_ROOT',\n  'CONNECTION',\n  'CONSTANT',\n  'CONSTRAINT',\n  'CONTAINS',\n  'CONTENT',\n  'CONTINUE',\n  'COPY',\n  'COUNT',\n  'COUNT_BIG',\n  'CREATE',\n  'CREATEIN',\n  'CROSS',\n  'CUBE',\n  'CUME_DIST',\n  'CURRENT',\n  'CURRENT_DATE',\n  'CURRENT_PATH',\n  'CURRENT_SCHEMA',\n  'CURRENT_SERVER',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_TIMEZONE',\n  'CURRENT_USER',\n  'CURSOR',\n  'CYCLE',\n  'DATABASE',\n  'DATAPARTITIONNAME',\n  'DATAPARTITIONNUM',\n  'DAY',\n  'DAYS',\n  'DB2GENERAL',\n  'DB2GENRL',\n  'DB2SQL',\n  'DBINFO',\n  'DBPARTITIONNAME',\n  'DBPARTITIONNUM',\n  'DEACTIVATE',\n  'DEALLOCATE',\n  'DECLARE',\n  'DEFAULT',\n  'DEFAULTS',\n  'DEFER',\n  'DEFINE',\n  'DEFINITION',\n  'DELETE',\n  'DELETING',\n  'DENSE_RANK',\n  'DENSERANK',\n  'DESC',\n  'DESCRIBE',\n  'DESCRIPTOR',\n  'DETACH',\n  'DETERMINISTIC',\n  'DIAGNOSTICS',\n  'DISABLE',\n  'DISALLOW',\n  'DISCONNECT',\n  'DISTINCT',\n  'DO',\n  'DOCUMENT',\n  'DROP',\n  'DYNAMIC',\n  'EACH',\n  'ELSE',\n  'ELSEIF',\n  'EMPTY',\n  'ENABLE',\n  'ENCODING',\n  'ENCRYPTION',\n  'END',\n  'END-EXEC',\n  'ENDING',\n  'ENFORCED',\n  'ERROR',\n  'ESCAPE',\n  'EVERY',\n  'EXCEPT',\n  'EXCEPTION',\n  'EXCLUDING',\n  'EXCLUSIVE',\n  'EXECUTE',\n  'EXISTS',\n  'EXIT',\n  'EXTEND',\n  'EXTERNAL',\n  'EXTRACT',\n  'FALSE',\n  'FENCED',\n  'FETCH',\n  'FIELDPROC',\n  'FILE',\n  'FINAL',\n  'FIRST_VALUE',\n  'FOR',\n  'FOREIGN',\n  'FORMAT',\n  'FREE',\n  'FREEPAGE',\n  'FROM',\n  'FULL',\n  'FUNCTION',\n  'GBPCACHE',\n  'GENERAL',\n  'GENERATED',\n  'GET',\n  'GLOBAL',\n  'GO',\n  'GOTO',\n  'GRANT',\n  'GROUP',\n  'HANDLER',\n  'HASH',\n  'HASH_ROW',\n  'HASHED_VALUE',\n  'HAVING',\n  'HINT',\n  'HOLD',\n  'HOUR',\n  'HOURS',\n  // 'ID', Not actually a reserved keyword\n  'IDENTITY',\n  'IF',\n  'IGNORE',\n  'IMMEDIATE',\n  'IMPLICITLY',\n  'IN',\n  'INCLUDE',\n  'INCLUDING',\n  'INCLUSIVE',\n  'INCREMENT',\n  'INDEX',\n  'INDEXBP',\n  'INDICATOR',\n  'INF',\n  'INFINITY',\n  'INHERIT',\n  'INLINE',\n  'INNER',\n  'INOUT',\n  'INSENSITIVE',\n  'INSERT',\n  'INSERTING',\n  'INTEGRITY',\n  'INTERPRET',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'ISNULL',\n  'ISOLATION',\n  'ITERATE',\n  'JAVA',\n  'JOIN',\n  'JSON',\n  'JSON_ARRAY',\n  'JSON_ARRAYAGG',\n  'JSON_EXISTS',\n  'JSON_OBJECT',\n  'JSON_OBJECTAGG',\n  'JSON_QUERY',\n  'JSON_TABLE',\n  'JSON_VALUE',\n  'KEEP',\n  'KEY',\n  'KEYS',\n  'LABEL',\n  'LAG',\n  'LANGUAGE',\n  'LAST_VALUE',\n  'LATERAL',\n  'LEAD',\n  'LEAVE',\n  'LEFT',\n  'LEVEL2',\n  'LIKE',\n  'LIMIT',\n  'LINKTYPE',\n  'LISTAGG',\n  'LOCAL',\n  'LOCALDATE',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOCATION',\n  'LOCATOR',\n  'LOCK',\n  'LOCKSIZE',\n  'LOG',\n  'LOGGED',\n  'LOOP',\n  'MAINTAINED',\n  'MASK',\n  'MATCHED',\n  'MATERIALIZED',\n  'MAXVALUE',\n  'MERGE',\n  'MICROSECOND',\n  'MICROSECONDS',\n  'MINPCTUSED',\n  'MINUTE',\n  'MINUTES',\n  'MINVALUE',\n  'MIRROR',\n  'MIXED',\n  'MODE',\n  'MODIFIES',\n  'MONTH',\n  'MONTHS',\n  'NAMESPACE',\n  'NAN',\n  'NATIONAL',\n  'NCHAR',\n  'NCLOB',\n  'NESTED',\n  'NEW',\n  'NEW_TABLE',\n  'NEXTVAL',\n  'NO',\n  'NOCACHE',\n  'NOCYCLE',\n  'NODENAME',\n  'NODENUMBER',\n  'NOMAXVALUE',\n  'NOMINVALUE',\n  'NONE',\n  'NOORDER',\n  'NORMALIZED',\n  'NOT',\n  'NOTNULL',\n  'NTH_VALUE',\n  'NTILE',\n  'NULL',\n  'NULLS',\n  'NVARCHAR',\n  'OBID',\n  'OBJECT',\n  'OF',\n  'OFF',\n  'OFFSET',\n  'OLD',\n  'OLD_TABLE',\n  'OMIT',\n  'ON',\n  'ONLY',\n  'OPEN',\n  'OPTIMIZE',\n  'OPTION',\n  'OR',\n  'ORDER',\n  'ORDINALITY',\n  'ORGANIZE',\n  'OUT',\n  'OUTER',\n  'OVER',\n  'OVERLAY',\n  'OVERRIDING',\n  'PACKAGE',\n  'PADDED',\n  'PAGE',\n  'PAGESIZE',\n  'PARAMETER',\n  'PART',\n  'PARTITION',\n  'PARTITIONED',\n  'PARTITIONING',\n  'PARTITIONS',\n  'PASSING',\n  'PASSWORD',\n  'PATH',\n  'PCTFREE',\n  'PERCENT_RANK',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'PERIOD',\n  'PERMISSION',\n  'PIECESIZE',\n  'PIPE',\n  'PLAN',\n  'POSITION',\n  'PREPARE',\n  'PREVVAL',\n  'PRIMARY',\n  'PRIOR',\n  'PRIQTY',\n  'PRIVILEGES',\n  'PROCEDURE',\n  'PROGRAM',\n  'PROGRAMID',\n  'QUERY',\n  'RANGE',\n  'RANK',\n  'RATIO_TO_REPORT',\n  'RCDFMT',\n  'READ',\n  'READS',\n  'RECOVERY',\n  'REFERENCES',\n  'REFERENCING',\n  'REFRESH',\n  'REGEXP_LIKE',\n  'RELEASE',\n  'RENAME',\n  'REPEAT',\n  'RESET',\n  'RESIGNAL',\n  'RESTART',\n  'RESULT',\n  'RESULT_SET_LOCATOR',\n  'RETURN',\n  'RETURNING',\n  'RETURNS',\n  'REVOKE',\n  'RID',\n  'RIGHT',\n  'ROLLBACK',\n  'ROLLUP',\n  'ROUTINE',\n  'ROW',\n  'ROW_NUMBER',\n  'ROWNUMBER',\n  'ROWS',\n  'RRN',\n  'RUN',\n  'SAVEPOINT',\n  'SBCS',\n  'SCALAR',\n  'SCHEMA',\n  'SCRATCHPAD',\n  'SCROLL',\n  'SEARCH',\n  'SECOND',\n  'SECONDS',\n  'SECQTY',\n  'SECURED',\n  'SELECT',\n  'SENSITIVE',\n  'SEQUENCE',\n  'SESSION',\n  'SESSION_USER',\n  'SET',\n  'SIGNAL',\n  'SIMPLE',\n  'SKIP',\n  'SNAN',\n  'SOME',\n  'SOURCE',\n  'SPECIFIC',\n  'SQL',\n  'SQLID',\n  'SQLIND_DEFAULT',\n  'SQLIND_UNASSIGNED',\n  'STACKED',\n  'START',\n  'STARTING',\n  'STATEMENT',\n  'STATIC',\n  'STOGROUP',\n  'SUBSTRING',\n  'SUMMARY',\n  'SYNONYM',\n  'SYSTEM_TIME',\n  'SYSTEM_USER',\n  'TABLE',\n  'TABLESPACE',\n  'TABLESPACES',\n  'TAG',\n  'THEN',\n  'THREADSAFE',\n  'TO',\n  'TRANSACTION',\n  'TRANSFER',\n  'TRIGGER',\n  'TRIM',\n  'TRIM_ARRAY',\n  'TRUE',\n  'TRUNCATE',\n  'TRY_CAST',\n  'TYPE',\n  'UNDO',\n  'UNION',\n  'UNIQUE',\n  'UNIT',\n  'UNKNOWN',\n  'UNNEST',\n  'UNTIL',\n  'UPDATE',\n  'UPDATING',\n  'URI',\n  'USAGE',\n  'USE',\n  'USER',\n  'USERID',\n  'USING',\n  'VALUE',\n  'VALUES',\n  'VARIABLE',\n  'VARIANT',\n  'VCAT',\n  'VERSION',\n  'VERSIONING',\n  'VIEW',\n  'VOLATILE',\n  'WAIT',\n  'WHEN',\n  'WHENEVER',\n  'WHERE',\n  'WHILE',\n  'WITH',\n  'WITHIN',\n  'WITHOUT',\n  'WRAPPED',\n  'WRAPPER',\n  'WRITE',\n  'WRKSTNNAME',\n  'XMLAGG',\n  'XMLATTRIBUTES',\n  'XMLCAST',\n  'XMLCOMMENT',\n  'XMLCONCAT',\n  'XMLDOCUMENT',\n  'XMLELEMENT',\n  'XMLFOREST',\n  'XMLGROUP',\n  'XMLNAMESPACES',\n  'XMLPARSE',\n  'XMLPI',\n  'XMLROW',\n  'XMLSERIALIZE',\n  'XMLTABLE',\n  'XMLTEXT',\n  'XMLVALIDATE',\n  'XSLTRANSFORM',\n  'XSROBJECT',\n  'YEAR',\n  'YEARS',\n  'YES',\n  'ZONE',\n];\n\nexport const dataTypes: string[] = [\n  // https://www.ibm.com/docs/en/i/7.2?topic=iaodsd-odbc-data-types-how-they-correspond-db2-i-database-types\n  'ARRAY',\n  'BIGINT',\n  'BINARY',\n  'BIT',\n  'BLOB',\n  'BOOLEAN',\n  'CCSID',\n  'CHAR',\n  'CHARACTER',\n  'CLOB',\n  'DATA',\n  'DATALINK',\n  'DATE',\n  'DBCLOB',\n  'DECFLOAT',\n  'DECIMAL',\n  'DEC',\n  'DOUBLE',\n  'DOUBLE PRECISION',\n  'FLOAT',\n  'GRAPHIC',\n  'INT',\n  'INTEGER',\n  'LONG',\n  'NUMERIC',\n  'REAL',\n  'ROWID',\n  'SMALLINT',\n  'TIME',\n  'TIMESTAMP',\n  'VARBINARY',\n  'VARCHAR',\n  'VARGRAPHIC',\n  'XML',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './db2i.functions.js';\nimport { dataTypes, keywords } from './db2i.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'INTO',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER [SIBLINGS] BY [INPUT SEQUENCE]',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  'FOR UPDATE [OF]',\n  'FOR READ ONLY',\n  'OPTIMIZE FOR',\n  // Data modification\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE INTO',\n  'WHEN [NOT] MATCHED [THEN]',\n  'UPDATE SET',\n  'DELETE',\n  'INSERT',\n  // Data definition - table\n  'FOR SYSTEM NAME',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [OR REPLACE] TABLE']);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE] [RECURSIVE] VIEW',\n  // - update:\n  'UPDATE',\n  'WHERE CURRENT OF',\n  'WITH {NC | RR | RS | CS | UR}',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE',\n  // alter table:\n  'ALTER TABLE',\n  'ADD [COLUMN]',\n  'ALTER [COLUMN]',\n  'DROP [COLUMN]',\n  'SET DATA TYPE', // for alter column\n  'SET {GENERATED ALWAYS | GENERATED BY DEFAULT}', // for alter column\n  'SET NOT NULL', // for alter column\n  'SET {NOT HIDDEN | IMPLICITLY HIDDEN}', // for alter column\n  'SET FIELDPROC', // for alter column\n  'DROP {DEFAULT | NOT NULL | GENERATED | IDENTITY | ROW CHANGE TIMESTAMP | FIELDPROC}', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // other\n  'SET [CURRENT] SCHEMA',\n  'SET CURRENT_SCHEMA',\n  // https://www.ibm.com/docs/en/i/7.5?topic=reference-statements\n  'ALLOCATE CURSOR',\n  'ALLOCATE [SQL] DESCRIPTOR [LOCAL | GLOBAL] SQL',\n  'ALTER [SPECIFIC] {FUNCTION | PROCEDURE}',\n  'ALTER {MASK | PERMISSION | SEQUENCE | TRIGGER}',\n  'ASSOCIATE [RESULT SET] {LOCATOR | LOCATORS}',\n  'BEGIN DECLARE SECTION',\n  'CALL',\n  'CLOSE',\n  'COMMENT ON {ALIAS | COLUMN | CONSTRAINT | INDEX | MASK | PACKAGE | PARAMETER | PERMISSION | SEQUENCE | TABLE | TRIGGER | VARIABLE | XSROBJECT}',\n  'COMMENT ON [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE}',\n  'COMMENT ON PARAMETER SPECIFIC {FUNCTION | PROCEDURE | ROUTINE}',\n  'COMMENT ON [TABLE FUNCTION] RETURN COLUMN',\n  'COMMENT ON [TABLE FUNCTION] RETURN COLUMN SPECIFIC [PROCEDURE | ROUTINE]',\n  'COMMIT [WORK] [HOLD]',\n  'CONNECT [TO | RESET] USER',\n  'CREATE [OR REPLACE] {ALIAS | FUNCTION | MASK | PERMISSION | PROCEDURE | SEQUENCE | TRIGGER | VARIABLE}',\n  'CREATE [ENCODED VECTOR] INDEX',\n  'CREATE UNIQUE [WHERE NOT NULL] INDEX',\n  'CREATE SCHEMA',\n  'CREATE TYPE',\n  'DEALLOCATE [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n  'DECLARE CURSOR',\n  'DECLARE GLOBAL TEMPORARY TABLE',\n  'DECLARE',\n  'DESCRIBE CURSOR',\n  'DESCRIBE INPUT',\n  'DESCRIBE [OUTPUT]',\n  'DESCRIBE {PROCEDURE | ROUTINE}',\n  'DESCRIBE TABLE',\n  'DISCONNECT ALL [SQL]',\n  'DISCONNECT [CURRENT]',\n  'DROP {ALIAS | INDEX | MASK | PACKAGE | PERMISSION | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT} [IF EXISTS]',\n  'DROP [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE} [IF EXISTS]',\n  'END DECLARE SECTION',\n  'EXECUTE [IMMEDIATE]',\n  // 'FETCH {NEXT | PRIOR | FIRST | LAST | BEFORE | AFTER | CURRENT} [FROM]',\n  'FREE LOCATOR',\n  'GET [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n  'GET [CURRENT | STACKED] DIAGNOSTICS',\n  'GRANT {ALL [PRIVILEGES] | ALTER | EXECUTE} ON {FUNCTION | PROCEDURE | ROUTINE | PACKAGE | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT}',\n  'HOLD LOCATOR',\n  'INCLUDE',\n  'LABEL ON {ALIAS | COLUMN | CONSTRAINT | INDEX | MASK | PACKAGE | PERMISSION | SEQUENCE | TABLE | TRIGGER | VARIABLE | XSROBJECT}',\n  'LABEL ON [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE}',\n  'LOCK TABLE',\n  'OPEN',\n  'PREPARE',\n  'REFRESH TABLE',\n  'RELEASE',\n  'RELEASE [TO] SAVEPOINT',\n  'RENAME [TABLE | INDEX] TO',\n  'REVOKE {ALL [PRIVILEGES] | ALTER | EXECUTE} ON {FUNCTION | PROCEDURE | ROUTINE | PACKAGE | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT}',\n  'ROLLBACK [WORK] [HOLD | TO SAVEPOINT]',\n  'SAVEPOINT',\n  'SET CONNECTION',\n  'SET CURRENT {DEBUG MODE | DECFLOAT ROUNDING MODE | DEGREE | IMPLICIT XMLPARSE OPTION | TEMPORAL SYSTEM_TIME}',\n  'SET [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n  'SET ENCRYPTION PASSWORD',\n  'SET OPTION',\n  'SET {[CURRENT [FUNCTION]] PATH | CURRENT_PATH}',\n  'SET RESULT SETS [WITH RETURN [TO CALLER | TO CLIENT]]',\n  'SET SESSION AUTHORIZATION',\n  'SET SESSION_USER',\n  'SET TRANSACTION',\n  'SIGNAL SQLSTATE [VALUE]',\n  'TAG',\n  'TRANSFER OWNERSHIP OF',\n  'WHENEVER {NOT FOUND | SQLERROR | SQLWARNING}',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '[LEFT | RIGHT] EXCEPTION JOIN',\n  '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON DELETE',\n  'ON UPDATE',\n  'SET NULL',\n  '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://www.ibm.com/docs/en/i/7.5?topic=reference-sql\nexport const db2i: DialectOptions = {\n  name: 'db2i',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    nestedBlockComments: true,\n    extraParens: ['[]'],\n    stringTypes: [\n      { quote: \"''-qq\", prefixes: ['G', 'N'] },\n      { quote: \"''-raw\", prefixes: ['X', 'BX', 'GX', 'UX'], requirePrefix: true },\n    ],\n    identTypes: [`\"\"-qq`],\n    identChars: { first: '@#$', rest: '@#$' },\n    paramTypes: { positional: true, named: [':'] },\n    paramChars: { first: '@#$', rest: '@#$' },\n    operators: ['**', '¬=', '¬>', '¬<', '!>', '!<', '||', '=>'],\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const functions: string[] = [\n  // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF\n  // math\n  'ABS',\n  'ACOS',\n  'ASIN',\n  'ATAN',\n  'BIN',\n  'BROUND',\n  'CBRT',\n  'CEIL',\n  'CEILING',\n  'CONV',\n  'COS',\n  'DEGREES',\n  // 'E',\n  'EXP',\n  'FACTORIAL',\n  'FLOOR',\n  'GREATEST',\n  'HEX',\n  'LEAST',\n  'LN',\n  'LOG',\n  'LOG10',\n  'LOG2',\n  'NEGATIVE',\n  'PI',\n  'PMOD',\n  'POSITIVE',\n  'POW',\n  'POWER',\n  'RADIANS',\n  'RAND',\n  'ROUND',\n  'SHIFTLEFT',\n  'SHIFTRIGHT',\n  'SHIFTRIGHTUNSIGNED',\n  'SIGN',\n  'SIN',\n  'SQRT',\n  'TAN',\n  'UNHEX',\n  'WIDTH_BUCKET',\n\n  // array\n  'ARRAY_CONTAINS',\n  'MAP_KEYS',\n  'MAP_VALUES',\n  'SIZE',\n  'SORT_ARRAY',\n\n  // conversion\n  'BINARY',\n  'CAST',\n\n  // date\n  'ADD_MONTHS',\n  'DATE',\n  'DATE_ADD',\n  'DATE_FORMAT',\n  'DATE_SUB',\n  'DATEDIFF',\n  'DAY',\n  'DAYNAME',\n  'DAYOFMONTH',\n  'DAYOFYEAR',\n  'EXTRACT',\n  'FROM_UNIXTIME',\n  'FROM_UTC_TIMESTAMP',\n  'HOUR',\n  'LAST_DAY',\n  'MINUTE',\n  'MONTH',\n  'MONTHS_BETWEEN',\n  'NEXT_DAY',\n  'QUARTER',\n  'SECOND',\n  'TIMESTAMP',\n  'TO_DATE',\n  'TO_UTC_TIMESTAMP',\n  'TRUNC',\n  'UNIX_TIMESTAMP',\n  'WEEKOFYEAR',\n  'YEAR',\n\n  // conditional\n  'ASSERT_TRUE',\n  'COALESCE',\n  'IF',\n  'ISNOTNULL',\n  'ISNULL',\n  'NULLIF',\n  'NVL',\n\n  // string\n  'ASCII',\n  'BASE64',\n  'CHARACTER_LENGTH',\n  'CHR',\n  'CONCAT',\n  'CONCAT_WS',\n  'CONTEXT_NGRAMS',\n  'DECODE',\n  'ELT',\n  'ENCODE',\n  'FIELD',\n  'FIND_IN_SET',\n  'FORMAT_NUMBER',\n  'GET_JSON_OBJECT',\n  'IN_FILE',\n  'INITCAP',\n  'INSTR',\n  'LCASE',\n  'LENGTH',\n  'LEVENSHTEIN',\n  'LOCATE',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'NGRAMS',\n  'OCTET_LENGTH',\n  'PARSE_URL',\n  'PRINTF',\n  'QUOTE',\n  'REGEXP_EXTRACT',\n  'REGEXP_REPLACE',\n  'REPEAT',\n  'REVERSE',\n  'RPAD',\n  'RTRIM',\n  'SENTENCES',\n  'SOUNDEX',\n  'SPACE',\n  'SPLIT',\n  'STR_TO_MAP',\n  'SUBSTR',\n  'SUBSTRING',\n  'TRANSLATE',\n  'TRIM',\n  'UCASE',\n  'UNBASE64',\n  'UPPER',\n\n  // masking\n  'MASK',\n  'MASK_FIRST_N',\n  'MASK_HASH',\n  'MASK_LAST_N',\n  'MASK_SHOW_FIRST_N',\n  'MASK_SHOW_LAST_N',\n\n  // misc\n  'AES_DECRYPT',\n  'AES_ENCRYPT',\n  'CRC32',\n  'CURRENT_DATABASE',\n  'CURRENT_USER',\n  'HASH',\n  'JAVA_METHOD',\n  'LOGGED_IN_USER',\n  'MD5',\n  'REFLECT',\n  'SHA',\n  'SHA1',\n  'SHA2',\n  'SURROGATE_KEY',\n  'VERSION',\n\n  // aggregate\n  'AVG',\n  'COLLECT_LIST',\n  'COLLECT_SET',\n  'CORR',\n  'COUNT',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'HISTOGRAM_NUMERIC',\n  'MAX',\n  'MIN',\n  'NTILE',\n  'PERCENTILE',\n  'PERCENTILE_APPROX',\n  'REGR_AVGX',\n  'REGR_AVGY',\n  'REGR_COUNT',\n  'REGR_INTERCEPT',\n  'REGR_R2',\n  'REGR_SLOPE',\n  'REGR_SXX',\n  'REGR_SXY',\n  'REGR_SYY',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'SUM',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VARIANCE',\n\n  // table\n  'EXPLODE',\n  'INLINE',\n  'JSON_TUPLE',\n  'PARSE_URL_TUPLE',\n  'POSEXPLODE',\n  'STACK',\n\n  // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics\n  'LEAD',\n  'LAG',\n  'FIRST_VALUE',\n  'LAST_VALUE',\n  'RANK',\n  'ROW_NUMBER',\n  'DENSE_RANK',\n  'CUME_DIST',\n  'PERCENT_RANK',\n  'NTILE',\n];\n","export const keywords: string[] = [\n  // https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl\n  // Non-reserved keywords have proscribed meanings in. HiveQL, but can still be used as table or column names\n  'ADD',\n  'ADMIN',\n  'AFTER',\n  'ANALYZE',\n  'ARCHIVE',\n  'ASC',\n  'BEFORE',\n  'BUCKET',\n  'BUCKETS',\n  'CASCADE',\n  'CHANGE',\n  'CLUSTER',\n  'CLUSTERED',\n  'CLUSTERSTATUS',\n  'COLLECTION',\n  'COLUMNS',\n  'COMMENT',\n  'COMPACT',\n  'COMPACTIONS',\n  'COMPUTE',\n  'CONCATENATE',\n  'CONTINUE',\n  'DATA',\n  'DATABASES',\n  'DATETIME',\n  'DAY',\n  'DBPROPERTIES',\n  'DEFERRED',\n  'DEFINED',\n  'DELIMITED',\n  'DEPENDENCY',\n  'DESC',\n  'DIRECTORIES',\n  'DIRECTORY',\n  'DISABLE',\n  'DISTRIBUTE',\n  'ELEM_TYPE',\n  'ENABLE',\n  'ESCAPED',\n  'EXCLUSIVE',\n  'EXPLAIN',\n  'EXPORT',\n  'FIELDS',\n  'FILE',\n  'FILEFORMAT',\n  'FIRST',\n  'FORMAT',\n  'FORMATTED',\n  'FUNCTIONS',\n  'HOLD_DDLTIME',\n  'HOUR',\n  'IDXPROPERTIES',\n  'IGNORE',\n  'INDEX',\n  'INDEXES',\n  'INPATH',\n  'INPUTDRIVER',\n  'INPUTFORMAT',\n  'ITEMS',\n  'JAR',\n  'KEYS',\n  'KEY_TYPE',\n  'LIMIT',\n  'LINES',\n  'LOAD',\n  'LOCATION',\n  'LOCK',\n  'LOCKS',\n  'LOGICAL',\n  'LONG',\n  'MAPJOIN',\n  'MATERIALIZED',\n  'METADATA',\n  'MINUS',\n  'MINUTE',\n  'MONTH',\n  'MSCK',\n  'NOSCAN',\n  'NO_DROP',\n  'OFFLINE',\n  'OPTION',\n  'OUTPUTDRIVER',\n  'OUTPUTFORMAT',\n  'OVERWRITE',\n  'OWNER',\n  'PARTITIONED',\n  'PARTITIONS',\n  'PLUS',\n  'PRETTY',\n  'PRINCIPALS',\n  'PROTECTION',\n  'PURGE',\n  'READ',\n  'READONLY',\n  'REBUILD',\n  'RECORDREADER',\n  'RECORDWRITER',\n  'RELOAD',\n  'RENAME',\n  'REPAIR',\n  'REPLACE',\n  'REPLICATION',\n  'RESTRICT',\n  'REWRITE',\n  'ROLE',\n  'ROLES',\n  'SCHEMA',\n  'SCHEMAS',\n  'SECOND',\n  'SEMI',\n  'SERDE',\n  'SERDEPROPERTIES',\n  'SERVER',\n  'SETS',\n  'SHARED',\n  'SHOW',\n  'SHOW_DATABASE',\n  'SKEWED',\n  'SORT',\n  'SORTED',\n  'SSL',\n  'STATISTICS',\n  'STORED',\n  'STREAMTABLE',\n  'STRING',\n  'TABLES',\n  'TBLPROPERTIES',\n  'TEMPORARY',\n  'TERMINATED',\n  'TINYINT',\n  'TOUCH',\n  'TRANSACTIONS',\n  'UNARCHIVE',\n  'UNDO',\n  'UNIONTYPE',\n  'UNLOCK',\n  'UNSET',\n  'UNSIGNED',\n  'URI',\n  'USE',\n  'UTC',\n  'UTCTIMESTAMP',\n  'VALUE_TYPE',\n  'VIEW',\n  'WHILE',\n  'YEAR',\n  'AUTOCOMMIT',\n  'ISOLATION',\n  'LEVEL',\n  'OFFSET',\n  'SNAPSHOT',\n  'TRANSACTION',\n  'WORK',\n  'WRITE',\n  'ABORT',\n  'KEY',\n  'LAST',\n  'NORELY',\n  'NOVALIDATE',\n  'NULLS',\n  'RELY',\n  'VALIDATE',\n  'DETAIL',\n  'DOW',\n  'EXPRESSION',\n  'OPERATOR',\n  'QUARTER',\n  'SUMMARY',\n  'VECTORIZATION',\n  'WEEK',\n  'YEARS',\n  'MONTHS',\n  'WEEKS',\n  'DAYS',\n  'HOURS',\n  'MINUTES',\n  'SECONDS',\n  'TIMESTAMPTZ',\n  'ZONE',\n\n  // reserved\n  'ALL',\n  'ALTER',\n  'AND',\n  'AS',\n  'AUTHORIZATION',\n  'BETWEEN',\n  'BOTH',\n  'BY',\n  'CASE',\n  'CAST',\n  'COLUMN',\n  'CONF',\n  'CREATE',\n  'CROSS',\n  'CUBE',\n  'CURRENT',\n  'CURRENT_DATE',\n  'CURRENT_TIMESTAMP',\n  'CURSOR',\n  'DATABASE',\n  'DELETE',\n  'DESCRIBE',\n  'DISTINCT',\n  'DROP',\n  'ELSE',\n  'END',\n  'EXCHANGE',\n  'EXISTS',\n  'EXTENDED',\n  'EXTERNAL',\n  'FALSE',\n  'FETCH',\n  'FOLLOWING',\n  'FOR',\n  'FROM',\n  'FULL',\n  'FUNCTION',\n  'GRANT',\n  'GROUP',\n  'GROUPING',\n  'HAVING',\n  'IF',\n  'IMPORT',\n  'IN',\n  'INNER',\n  'INSERT',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'JOIN',\n  'LATERAL',\n  'LEFT',\n  'LESS',\n  'LIKE',\n  'LOCAL',\n  'MACRO',\n  'MORE',\n  'NONE',\n  'NOT',\n  'NULL',\n  'OF',\n  'ON',\n  'OR',\n  'ORDER',\n  'OUT',\n  'OUTER',\n  'OVER',\n  'PARTIALSCAN',\n  'PARTITION',\n  'PERCENT',\n  'PRECEDING',\n  'PRESERVE',\n  'PROCEDURE',\n  'RANGE',\n  'READS',\n  'REDUCE',\n  'REVOKE',\n  'RIGHT',\n  'ROLLUP',\n  'ROW',\n  'ROWS',\n  'SELECT',\n  'SET',\n  'TABLE',\n  'TABLESAMPLE',\n  'THEN',\n  'TO',\n  'TRANSFORM',\n  'TRIGGER',\n  'TRUE',\n  'TRUNCATE',\n  'UNBOUNDED',\n  'UNION',\n  'UNIQUEJOIN',\n  'UPDATE',\n  'USER',\n  'USING',\n  'UTC_TMESTAMP',\n  'VALUES',\n  'WHEN',\n  'WHERE',\n  'WINDOW',\n  'WITH',\n  'COMMIT',\n  'ONLY',\n  'REGEXP',\n  'RLIKE',\n  'ROLLBACK',\n  'START',\n  'CACHE',\n  'CONSTRAINT',\n  'FOREIGN',\n  'PRIMARY',\n  'REFERENCES',\n  'DAYOFWEEK',\n  'EXTRACT',\n  'FLOOR',\n  'VIEWS',\n  'TIME',\n  'SYNC',\n\n  // fileTypes\n  'TEXTFILE',\n  'SEQUENCEFILE',\n  'ORC',\n  'CSV',\n  'TSV',\n  'PARQUET',\n  'AVRO',\n  'RCFILE',\n  'JSONFILE',\n  'INPUTFORMAT',\n  'OUTPUTFORMAT',\n];\n\nexport const dataTypes: string[] = [\n  // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types\n  'ARRAY',\n  'BIGINT',\n  'BINARY',\n  'BOOLEAN',\n  'CHAR',\n  'DATE',\n  'DECIMAL',\n  'DOUBLE',\n  'FLOAT',\n  'INT',\n  'INTEGER',\n  'INTERVAL',\n  'MAP',\n  'NUMERIC',\n  'PRECISION',\n  'SMALLINT',\n  'STRUCT',\n  'TIMESTAMP',\n  'VARCHAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './hive.functions.js';\nimport { dataTypes, keywords } from './hive.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'SORT BY',\n  'CLUSTER BY',\n  'DISTRIBUTE BY',\n  'LIMIT',\n  // Data manipulation\n  // - insert:\n  //   Hive does not actually support plain INSERT INTO, only INSERT INTO TABLE\n  //   but it's a nuisance to not support it, as all other dialects do.\n  'INSERT INTO [TABLE]',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE INTO',\n  'WHEN [NOT] MATCHED [THEN]',\n  'UPDATE SET',\n  'INSERT [VALUES]',\n  // - insert overwrite directory:\n  //   https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueries\n  'INSERT OVERWRITE [LOCAL] DIRECTORY',\n  // - load:\n  //   https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Loadingfilesintotables\n  'LOAD DATA [LOCAL] INPATH',\n  '[OVERWRITE] INTO TABLE',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]',\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'RENAME TO',\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // other\n  'ALTER',\n  'CREATE',\n  'USE',\n  'DESCRIBE',\n  'DROP',\n  'FETCH',\n  'SHOW',\n  'STORED AS',\n  'STORED BY',\n  'ROW FORMAT',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  // non-standard joins\n  'LEFT SEMI JOIN',\n]);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE} BETWEEN']);\n\n// https://cwiki.apache.org/confluence/display/Hive/LanguageManual\nexport const hive: DialectOptions = {\n  name: 'hive',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    extraParens: ['[]'],\n    stringTypes: ['\"\"-bs', \"''-bs\"],\n    identTypes: ['``'],\n    variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n    operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||'],\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","import { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\n\n// Shared functionality used by all MariaDB-like SQL dialects.\n\nexport function postProcess(tokens: Token[]) {\n  return tokens.map((token, i) => {\n    const nextToken = tokens[i + 1] || EOF_TOKEN;\n    if (isToken.SET(token) && nextToken.text === '(') {\n      // This is SET datatype, not SET statement\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    }\n    const prevToken = tokens[i - 1] || EOF_TOKEN;\n    if (isToken.VALUES(token) && prevToken.text === '=') {\n      // This is VALUES() function, not VALUES clause\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    }\n    return token;\n  });\n}\n","export const keywords: string[] = [\n  // https://mariadb.com/kb/en/reserved-words/\n  'ACCESSIBLE',\n  'ADD',\n  'ALL',\n  'ALTER',\n  'ANALYZE',\n  'AND',\n  'AS',\n  'ASC',\n  'ASENSITIVE',\n  'BEFORE',\n  'BETWEEN',\n  'BOTH',\n  'BY',\n  'CALL',\n  'CASCADE',\n  'CASE',\n  'CHANGE',\n  'CHECK',\n  'COLLATE',\n  'COLUMN',\n  'CONDITION',\n  'CONSTRAINT',\n  'CONTINUE',\n  'CONVERT',\n  'CREATE',\n  'CROSS',\n  'CURRENT_DATE',\n  'CURRENT_ROLE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_USER',\n  'CURSOR',\n  'DATABASE',\n  'DATABASES',\n  'DAY_HOUR',\n  'DAY_MICROSECOND',\n  'DAY_MINUTE',\n  'DAY_SECOND',\n  'DECLARE',\n  'DEFAULT',\n  'DELAYED',\n  'DELETE',\n  'DELETE_DOMAIN_ID',\n  'DESC',\n  'DESCRIBE',\n  'DETERMINISTIC',\n  'DISTINCT',\n  'DISTINCTROW',\n  'DIV',\n  'DO_DOMAIN_IDS',\n  'DROP',\n  'DUAL',\n  'EACH',\n  'ELSE',\n  'ELSEIF',\n  'ENCLOSED',\n  'ESCAPED',\n  'EXCEPT',\n  'EXISTS',\n  'EXIT',\n  'EXPLAIN',\n  'FALSE',\n  'FETCH',\n  'FOR',\n  'FORCE',\n  'FOREIGN',\n  'FROM',\n  'FULLTEXT',\n  'GENERAL',\n  'GRANT',\n  'GROUP',\n  'HAVING',\n  'HIGH_PRIORITY',\n  'HOUR_MICROSECOND',\n  'HOUR_MINUTE',\n  'HOUR_SECOND',\n  'IF',\n  'IGNORE',\n  'IGNORE_DOMAIN_IDS',\n  'IGNORE_SERVER_IDS',\n  'IN',\n  'INDEX',\n  'INFILE',\n  'INNER',\n  'INOUT',\n  'INSENSITIVE',\n  'INSERT',\n  'INTERSECT',\n  'INTERVAL',\n  'INTO',\n  'IS',\n  'ITERATE',\n  'JOIN',\n  'KEY',\n  'KEYS',\n  'KILL',\n  'LEADING',\n  'LEAVE',\n  'LEFT',\n  'LIKE',\n  'LIMIT',\n  'LINEAR',\n  'LINES',\n  'LOAD',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOCK',\n  'LOOP',\n  'LOW_PRIORITY',\n  'MASTER_HEARTBEAT_PERIOD',\n  'MASTER_SSL_VERIFY_SERVER_CERT',\n  'MATCH',\n  'MAXVALUE',\n  'MINUTE_MICROSECOND',\n  'MINUTE_SECOND',\n  'MOD',\n  'MODIFIES',\n  'NATURAL',\n  'NOT',\n  'NO_WRITE_TO_BINLOG',\n  'NULL',\n  'OFFSET',\n  'ON',\n  'OPTIMIZE',\n  'OPTION',\n  'OPTIONALLY',\n  'OR',\n  'ORDER',\n  'OUT',\n  'OUTER',\n  'OUTFILE',\n  'OVER',\n  'PAGE_CHECKSUM',\n  'PARSE_VCOL_EXPR',\n  'PARTITION',\n  'POSITION',\n  'PRIMARY',\n  'PROCEDURE',\n  'PURGE',\n  'RANGE',\n  'READ',\n  'READS',\n  'READ_WRITE',\n  'RECURSIVE',\n  'REF_SYSTEM_ID',\n  'REFERENCES',\n  'REGEXP',\n  'RELEASE',\n  'RENAME',\n  'REPEAT',\n  'REPLACE',\n  'REQUIRE',\n  'RESIGNAL',\n  'RESTRICT',\n  'RETURN',\n  'RETURNING',\n  'REVOKE',\n  'RIGHT',\n  'RLIKE',\n  'ROW_NUMBER',\n  'ROWS',\n  'SCHEMA',\n  'SCHEMAS',\n  'SECOND_MICROSECOND',\n  'SELECT',\n  'SENSITIVE',\n  'SEPARATOR',\n  'SET',\n  'SHOW',\n  'SIGNAL',\n  'SLOW',\n  'SPATIAL',\n  'SPECIFIC',\n  'SQL',\n  'SQLEXCEPTION',\n  'SQLSTATE',\n  'SQLWARNING',\n  'SQL_BIG_RESULT',\n  'SQL_CALC_FOUND_ROWS',\n  'SQL_SMALL_RESULT',\n  'SSL',\n  'STARTING',\n  'STATS_AUTO_RECALC',\n  'STATS_PERSISTENT',\n  'STATS_SAMPLE_PAGES',\n  'STRAIGHT_JOIN',\n  'TABLE',\n  'TERMINATED',\n  'THEN',\n  'TO',\n  'TRAILING',\n  'TRIGGER',\n  'TRUE',\n  'UNDO',\n  'UNION',\n  'UNIQUE',\n  'UNLOCK',\n  'UNSIGNED',\n  'UPDATE',\n  'USAGE',\n  'USE',\n  'USING',\n  'UTC_DATE',\n  'UTC_TIME',\n  'UTC_TIMESTAMP',\n  'VALUES',\n  'WHEN',\n  'WHERE',\n  'WHILE',\n  'WINDOW',\n  'WITH',\n  'WRITE',\n  'XOR',\n  'YEAR_MONTH',\n  'ZEROFILL',\n];\n\nexport const dataTypes: string[] = [\n  // https://mariadb.com/kb/en/data-types/\n  'BIGINT',\n  'BINARY',\n  'BIT',\n  'BLOB',\n  'CHAR BYTE',\n  'CHAR',\n  'CHARACTER',\n  'DATETIME',\n  'DEC',\n  'DECIMAL',\n  'DOUBLE PRECISION',\n  'DOUBLE',\n  'ENUM',\n  'FIXED',\n  'FLOAT',\n  'FLOAT4',\n  'FLOAT8',\n  'INT',\n  'INT1',\n  'INT2',\n  'INT3',\n  'INT4',\n  'INT8',\n  'INTEGER',\n  'LONG',\n  'LONGBLOB',\n  'LONGTEXT',\n  'MEDIUMBLOB',\n  'MEDIUMINT',\n  'MEDIUMTEXT',\n  'MIDDLEINT',\n  'NATIONAL CHAR',\n  'NATIONAL VARCHAR',\n  'NUMERIC',\n  'PRECISION',\n  'REAL',\n  'SMALLINT',\n  'TEXT',\n  'TIMESTAMP',\n  'TINYBLOB',\n  'TINYINT',\n  'TINYTEXT',\n  'VARBINARY',\n  'VARCHAR',\n  'VARCHARACTER',\n  'VARYING',\n  'YEAR',\n  // 'NUMBER', // ?? In oracle mode only\n  // 'SET' // handled as special-case in postProcess\n];\n","export const functions: string[] = [\n  // https://mariadb.com/kb/en/information-schema-sql_functions-table/\n  'ADDDATE',\n  'ADD_MONTHS',\n  'BIT_AND',\n  'BIT_OR',\n  'BIT_XOR',\n  'CAST',\n  'COUNT',\n  'CUME_DIST',\n  'CURDATE',\n  'CURTIME',\n  'DATE_ADD',\n  'DATE_SUB',\n  'DATE_FORMAT',\n  'DECODE',\n  'DENSE_RANK',\n  'EXTRACT',\n  'FIRST_VALUE',\n  'GROUP_CONCAT',\n  'JSON_ARRAYAGG',\n  'JSON_OBJECTAGG',\n  'LAG',\n  'LEAD',\n  'MAX',\n  'MEDIAN',\n  'MID',\n  'MIN',\n  'NOW',\n  'NTH_VALUE',\n  'NTILE',\n  'POSITION',\n  'PERCENT_RANK',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'RANK',\n  'ROW_NUMBER',\n  'SESSION_USER',\n  'STD',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'SUBDATE',\n  'SUBSTR',\n  'SUBSTRING',\n  'SUM',\n  'SYSTEM_USER',\n  'TRIM',\n  'TRIM_ORACLE',\n  'VARIANCE',\n  'VAR_POP',\n  'VAR_SAMP',\n  'ABS',\n  'ACOS',\n  'ADDTIME',\n  'AES_DECRYPT',\n  'AES_ENCRYPT',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'BENCHMARK',\n  'BIN',\n  'BINLOG_GTID_POS',\n  'BIT_COUNT',\n  'BIT_LENGTH',\n  'CEIL',\n  'CEILING',\n  'CHARACTER_LENGTH',\n  'CHAR_LENGTH',\n  'CHR',\n  'COERCIBILITY',\n  'COLUMN_CHECK',\n  'COLUMN_EXISTS',\n  'COLUMN_LIST',\n  'COLUMN_JSON',\n  'COMPRESS',\n  'CONCAT',\n  'CONCAT_OPERATOR_ORACLE',\n  'CONCAT_WS',\n  'CONNECTION_ID',\n  'CONV',\n  'CONVERT_TZ',\n  'COS',\n  'COT',\n  'CRC32',\n  'DATEDIFF',\n  'DAYNAME',\n  'DAYOFMONTH',\n  'DAYOFWEEK',\n  'DAYOFYEAR',\n  'DEGREES',\n  'DECODE_HISTOGRAM',\n  'DECODE_ORACLE',\n  'DES_DECRYPT',\n  'DES_ENCRYPT',\n  'ELT',\n  'ENCODE',\n  'ENCRYPT',\n  'EXP',\n  'EXPORT_SET',\n  'EXTRACTVALUE',\n  'FIELD',\n  'FIND_IN_SET',\n  'FLOOR',\n  'FORMAT',\n  'FOUND_ROWS',\n  'FROM_BASE64',\n  'FROM_DAYS',\n  'FROM_UNIXTIME',\n  'GET_LOCK',\n  'GREATEST',\n  'HEX',\n  'IFNULL',\n  'INSTR',\n  'ISNULL',\n  'IS_FREE_LOCK',\n  'IS_USED_LOCK',\n  'JSON_ARRAY',\n  'JSON_ARRAY_APPEND',\n  'JSON_ARRAY_INSERT',\n  'JSON_COMPACT',\n  'JSON_CONTAINS',\n  'JSON_CONTAINS_PATH',\n  'JSON_DEPTH',\n  'JSON_DETAILED',\n  'JSON_EXISTS',\n  'JSON_EXTRACT',\n  'JSON_INSERT',\n  'JSON_KEYS',\n  'JSON_LENGTH',\n  'JSON_LOOSE',\n  'JSON_MERGE',\n  'JSON_MERGE_PATCH',\n  'JSON_MERGE_PRESERVE',\n  'JSON_QUERY',\n  'JSON_QUOTE',\n  'JSON_OBJECT',\n  'JSON_REMOVE',\n  'JSON_REPLACE',\n  'JSON_SET',\n  'JSON_SEARCH',\n  'JSON_TYPE',\n  'JSON_UNQUOTE',\n  'JSON_VALID',\n  'JSON_VALUE',\n  'LAST_DAY',\n  'LAST_INSERT_ID',\n  'LCASE',\n  'LEAST',\n  'LENGTH',\n  'LENGTHB',\n  'LN',\n  'LOAD_FILE',\n  'LOCATE',\n  'LOG',\n  'LOG10',\n  'LOG2',\n  'LOWER',\n  'LPAD',\n  'LPAD_ORACLE',\n  'LTRIM',\n  'LTRIM_ORACLE',\n  'MAKEDATE',\n  'MAKETIME',\n  'MAKE_SET',\n  'MASTER_GTID_WAIT',\n  'MASTER_POS_WAIT',\n  'MD5',\n  'MONTHNAME',\n  'NAME_CONST',\n  'NVL',\n  'NVL2',\n  'OCT',\n  'OCTET_LENGTH',\n  'ORD',\n  'PERIOD_ADD',\n  'PERIOD_DIFF',\n  'PI',\n  'POW',\n  'POWER',\n  'QUOTE',\n  'REGEXP_INSTR',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'RADIANS',\n  'RAND',\n  'RELEASE_ALL_LOCKS',\n  'RELEASE_LOCK',\n  'REPLACE_ORACLE',\n  'REVERSE',\n  'ROUND',\n  'RPAD',\n  'RPAD_ORACLE',\n  'RTRIM',\n  'RTRIM_ORACLE',\n  'SEC_TO_TIME',\n  'SHA',\n  'SHA1',\n  'SHA2',\n  'SIGN',\n  'SIN',\n  'SLEEP',\n  'SOUNDEX',\n  'SPACE',\n  'SQRT',\n  'STRCMP',\n  'STR_TO_DATE',\n  'SUBSTR_ORACLE',\n  'SUBSTRING_INDEX',\n  'SUBTIME',\n  'SYS_GUID',\n  'TAN',\n  'TIMEDIFF',\n  'TIME_FORMAT',\n  'TIME_TO_SEC',\n  'TO_BASE64',\n  'TO_CHAR',\n  'TO_DAYS',\n  'TO_SECONDS',\n  'UCASE',\n  'UNCOMPRESS',\n  'UNCOMPRESSED_LENGTH',\n  'UNHEX',\n  'UNIX_TIMESTAMP',\n  'UPDATEXML',\n  'UPPER',\n  'UUID',\n  'UUID_SHORT',\n  'VERSION',\n  'WEEKDAY',\n  'WEEKOFYEAR',\n  'WSREP_LAST_WRITTEN_GTID',\n  'WSREP_LAST_SEEN_GTID',\n  'WSREP_SYNC_WAIT_UPTO_GTID',\n  'YEARWEEK',\n  // CASE expression shorthands\n  'COALESCE',\n  'NULLIF',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from './likeMariaDb.js';\nimport { dataTypes, keywords } from './mariadb.keywords.js';\nimport { functions } from './mariadb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  // Data manipulation\n  // - insert:\n  'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n  'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n  'VALUES',\n  'ON DUPLICATE KEY UPDATE',\n  // - update:\n  'SET',\n  // other\n  'RETURNING',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n  // - update:\n  'UPDATE [LOW_PRIORITY] [IGNORE]',\n  // - delete:\n  'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n  // - drop table:\n  'DROP [TEMPORARY] TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS]',\n  'ADD [COLUMN] [IF NOT EXISTS]',\n  '{CHANGE | MODIFY} [COLUMN] [IF EXISTS]',\n  'DROP [COLUMN] [IF EXISTS]',\n  'RENAME [TO]',\n  'RENAME COLUMN',\n  'ALTER [COLUMN]',\n  '{SET | DROP} DEFAULT', // for alter column\n  'SET {VISIBLE | INVISIBLE}', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://mariadb.com/docs/reference/mdb/sql-statements/\n  'ALTER DATABASE',\n  'ALTER DATABASE COMMENT',\n  'ALTER EVENT',\n  'ALTER FUNCTION',\n  'ALTER PROCEDURE',\n  'ALTER SCHEMA',\n  'ALTER SCHEMA COMMENT',\n  'ALTER SEQUENCE',\n  'ALTER SERVER',\n  'ALTER USER',\n  'ALTER VIEW',\n  'ANALYZE',\n  'ANALYZE TABLE',\n  'BACKUP LOCK',\n  'BACKUP STAGE',\n  'BACKUP UNLOCK',\n  'BEGIN',\n  'BINLOG',\n  'CACHE INDEX',\n  'CALL',\n  'CHANGE MASTER TO',\n  'CHECK TABLE',\n  'CHECK VIEW',\n  'CHECKSUM TABLE',\n  'COMMIT',\n  'CREATE AGGREGATE FUNCTION',\n  'CREATE DATABASE',\n  'CREATE EVENT',\n  'CREATE FUNCTION',\n  'CREATE INDEX',\n  'CREATE PROCEDURE',\n  'CREATE ROLE',\n  'CREATE SEQUENCE',\n  'CREATE SERVER',\n  'CREATE SPATIAL INDEX',\n  'CREATE TRIGGER',\n  'CREATE UNIQUE INDEX',\n  'CREATE USER',\n  'DEALLOCATE PREPARE',\n  'DESCRIBE',\n  'DROP DATABASE',\n  'DROP EVENT',\n  'DROP FUNCTION',\n  'DROP INDEX',\n  'DROP PREPARE',\n  'DROP PROCEDURE',\n  'DROP ROLE',\n  'DROP SEQUENCE',\n  'DROP SERVER',\n  'DROP TRIGGER',\n  'DROP USER',\n  'DROP VIEW',\n  'EXECUTE',\n  'EXPLAIN',\n  'FLUSH',\n  'GET DIAGNOSTICS',\n  'GET DIAGNOSTICS CONDITION',\n  'GRANT',\n  'HANDLER',\n  'HELP',\n  'INSTALL PLUGIN',\n  'INSTALL SONAME',\n  'KILL',\n  'LOAD DATA INFILE',\n  'LOAD INDEX INTO CACHE',\n  'LOAD XML INFILE',\n  'LOCK TABLE',\n  'OPTIMIZE TABLE',\n  'PREPARE',\n  'PURGE BINARY LOGS',\n  'PURGE MASTER LOGS',\n  'RELEASE SAVEPOINT',\n  'RENAME TABLE',\n  'RENAME USER',\n  'REPAIR TABLE',\n  'REPAIR VIEW',\n  'RESET MASTER',\n  'RESET QUERY CACHE',\n  'RESET REPLICA',\n  'RESET SLAVE',\n  'RESIGNAL',\n  'REVOKE',\n  'ROLLBACK',\n  'SAVEPOINT',\n  'SET CHARACTER SET',\n  'SET DEFAULT ROLE',\n  'SET GLOBAL TRANSACTION',\n  'SET NAMES',\n  'SET PASSWORD',\n  'SET ROLE',\n  'SET STATEMENT',\n  'SET TRANSACTION',\n  'SHOW',\n  'SHOW ALL REPLICAS STATUS',\n  'SHOW ALL SLAVES STATUS',\n  'SHOW AUTHORS',\n  'SHOW BINARY LOGS',\n  'SHOW BINLOG EVENTS',\n  'SHOW BINLOG STATUS',\n  'SHOW CHARACTER SET',\n  'SHOW CLIENT_STATISTICS',\n  'SHOW COLLATION',\n  'SHOW COLUMNS',\n  'SHOW CONTRIBUTORS',\n  'SHOW CREATE DATABASE',\n  'SHOW CREATE EVENT',\n  'SHOW CREATE FUNCTION',\n  'SHOW CREATE PACKAGE',\n  'SHOW CREATE PACKAGE BODY',\n  'SHOW CREATE PROCEDURE',\n  'SHOW CREATE SEQUENCE',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE TRIGGER',\n  'SHOW CREATE USER',\n  'SHOW CREATE VIEW',\n  'SHOW DATABASES',\n  'SHOW ENGINE',\n  'SHOW ENGINE INNODB STATUS',\n  'SHOW ENGINES',\n  'SHOW ERRORS',\n  'SHOW EVENTS',\n  'SHOW EXPLAIN',\n  'SHOW FUNCTION CODE',\n  'SHOW FUNCTION STATUS',\n  'SHOW GRANTS',\n  'SHOW INDEX',\n  'SHOW INDEXES',\n  'SHOW INDEX_STATISTICS',\n  'SHOW KEYS',\n  'SHOW LOCALES',\n  'SHOW MASTER LOGS',\n  'SHOW MASTER STATUS',\n  'SHOW OPEN TABLES',\n  'SHOW PACKAGE BODY CODE',\n  'SHOW PACKAGE BODY STATUS',\n  'SHOW PACKAGE STATUS',\n  'SHOW PLUGINS',\n  'SHOW PLUGINS SONAME',\n  'SHOW PRIVILEGES',\n  'SHOW PROCEDURE CODE',\n  'SHOW PROCEDURE STATUS',\n  'SHOW PROCESSLIST',\n  'SHOW PROFILE',\n  'SHOW PROFILES',\n  'SHOW QUERY_RESPONSE_TIME',\n  'SHOW RELAYLOG EVENTS',\n  'SHOW REPLICA',\n  'SHOW REPLICA HOSTS',\n  'SHOW REPLICA STATUS',\n  'SHOW SCHEMAS',\n  'SHOW SLAVE',\n  'SHOW SLAVE HOSTS',\n  'SHOW SLAVE STATUS',\n  'SHOW STATUS',\n  'SHOW STORAGE ENGINES',\n  'SHOW TABLE STATUS',\n  'SHOW TABLES',\n  'SHOW TRIGGERS',\n  'SHOW USER_STATISTICS',\n  'SHOW VARIABLES',\n  'SHOW WARNINGS',\n  'SHOW WSREP_MEMBERSHIP',\n  'SHOW WSREP_STATUS',\n  'SHUTDOWN',\n  'SIGNAL',\n  'START ALL REPLICAS',\n  'START ALL SLAVES',\n  'START REPLICA',\n  'START SLAVE',\n  'START TRANSACTION',\n  'STOP ALL REPLICAS',\n  'STOP ALL SLAVES',\n  'STOP REPLICA',\n  'STOP SLAVE',\n  'UNINSTALL PLUGIN',\n  'UNINSTALL SONAME',\n  'UNLOCK TABLE',\n  'USE',\n  'XA BEGIN',\n  'XA COMMIT',\n  'XA END',\n  'XA PREPARE',\n  'XA RECOVER',\n  'XA ROLLBACK',\n  'XA START',\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]',\n  'MINUS [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL JOIN',\n  'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n  // non-standard joins\n  'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  'CHARACTER SET',\n  '{ROWS | RANGE} BETWEEN',\n  'IDENTIFIED BY',\n]);\n\n// For reference: https://mariadb.com/kb/en/sql-statements-structure/\nexport const mariadb: DialectOptions = {\n  name: 'mariadb',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n    stringTypes: [\n      '\"\"-qq-bs',\n      \"''-qq-bs\",\n      { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n    ],\n    identTypes: ['``'],\n    identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n    variableTypes: [\n      { regex: '@@?[A-Za-z0-9_.$]+' },\n      { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n      { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n      { quote: '``', prefixes: ['@'], requirePrefix: true },\n    ],\n    paramTypes: { positional: true },\n    lineCommentTypes: ['--', '#'],\n    operators: [\n      '%',\n      ':=',\n      '&',\n      '|',\n      '^',\n      '~',\n      '<<',\n      '>>',\n      '<=>',\n      '&&',\n      '||',\n      '!',\n      '*.*', // Not actually an operator\n    ],\n    postProcess,\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const keywords: string[] = [\n  // https://dev.mysql.com/doc/refman/8.0/en/keywords.html\n  'ACCESSIBLE', // (R)\n  'ADD', // (R)\n  'ALL', // (R)\n  'ALTER', // (R)\n  'ANALYZE', // (R)\n  'AND', // (R)\n  'AS', // (R)\n  'ASC', // (R)\n  'ASENSITIVE', // (R)\n  'BEFORE', // (R)\n  'BETWEEN', // (R)\n  'BOTH', // (R)\n  'BY', // (R)\n  'CALL', // (R)\n  'CASCADE', // (R)\n  'CASE', // (R)\n  'CHANGE', // (R)\n  'CHECK', // (R)\n  'COLLATE', // (R)\n  'COLUMN', // (R)\n  'CONDITION', // (R)\n  'CONSTRAINT', // (R)\n  'CONTINUE', // (R)\n  'CONVERT', // (R)\n  'CREATE', // (R)\n  'CROSS', // (R)\n  'CUBE', // (R)\n  'CUME_DIST', // (R)\n  'CURRENT_DATE', // (R)\n  'CURRENT_TIME', // (R)\n  'CURRENT_TIMESTAMP', // (R)\n  'CURRENT_USER', // (R)\n  'CURSOR', // (R)\n  'DATABASE', // (R)\n  'DATABASES', // (R)\n  'DAY_HOUR', // (R)\n  'DAY_MICROSECOND', // (R)\n  'DAY_MINUTE', // (R)\n  'DAY_SECOND', // (R)\n  'DECLARE', // (R)\n  'DEFAULT', // (R)\n  'DELAYED', // (R)\n  'DELETE', // (R)\n  'DENSE_RANK', // (R)\n  'DESC', // (R)\n  'DESCRIBE', // (R)\n  'DETERMINISTIC', // (R)\n  'DISTINCT', // (R)\n  'DISTINCTROW', // (R)\n  'DIV', // (R)\n  'DROP', // (R)\n  'DUAL', // (R)\n  'EACH', // (R)\n  'ELSE', // (R)\n  'ELSEIF', // (R)\n  'EMPTY', // (R)\n  'ENCLOSED', // (R)\n  'ESCAPED', // (R)\n  'EXCEPT', // (R)\n  'EXISTS', // (R)\n  'EXIT', // (R)\n  'EXPLAIN', // (R)\n  'FALSE', // (R)\n  'FETCH', // (R)\n  'FIRST_VALUE', // (R)\n  'FOR', // (R)\n  'FORCE', // (R)\n  'FOREIGN', // (R)\n  'FROM', // (R)\n  'FULLTEXT', // (R)\n  'FUNCTION', // (R)\n  'GENERATED', // (R)\n  'GET', // (R)\n  'GRANT', // (R)\n  'GROUP', // (R)\n  'GROUPING', // (R)\n  'GROUPS', // (R)\n  'HAVING', // (R)\n  'HIGH_PRIORITY', // (R)\n  'HOUR_MICROSECOND', // (R)\n  'HOUR_MINUTE', // (R)\n  'HOUR_SECOND', // (R)\n  'IF', // (R)\n  'IGNORE', // (R)\n  'IN', // (R)\n  'INDEX', // (R)\n  'INFILE', // (R)\n  'INNER', // (R)\n  'INOUT', // (R)\n  'INSENSITIVE', // (R)\n  'INSERT', // (R)\n  'IN', // <-- moved over from functions\n  'INTERSECT', // (R)\n  'INTERVAL', // (R)\n  'INTO', // (R)\n  'IO_AFTER_GTIDS', // (R)\n  'IO_BEFORE_GTIDS', // (R)\n  'IS', // (R)\n  'ITERATE', // (R)\n  'JOIN', // (R)\n  'JSON_TABLE', // (R)\n  'KEY', // (R)\n  'KEYS', // (R)\n  'KILL', // (R)\n  'LAG', // (R)\n  'LAST_VALUE', // (R)\n  'LATERAL', // (R)\n  'LEAD', // (R)\n  'LEADING', // (R)\n  'LEAVE', // (R)\n  'LEFT', // (R)\n  'LIKE', // (R)\n  'LIMIT', // (R)\n  'LINEAR', // (R)\n  'LINES', // (R)\n  'LOAD', // (R)\n  'LOCALTIME', // (R)\n  'LOCALTIMESTAMP', // (R)\n  'LOCK', // (R)\n  'LONG', // (R)\n  'LOOP', // (R)\n  'LOW_PRIORITY', // (R)\n  'MASTER_BIND', // (R)\n  'MASTER_SSL_VERIFY_SERVER_CERT', // (R)\n  'MATCH', // (R)\n  'MAXVALUE', // (R)\n  'MINUTE_MICROSECOND', // (R)\n  'MINUTE_SECOND', // (R)\n  'MOD', // (R)\n  'MODIFIES', // (R)\n  'NATURAL', // (R)\n  'NOT', // (R)\n  'NO_WRITE_TO_BINLOG', // (R)\n  'NTH_VALUE', // (R)\n  'NTILE', // (R)\n  'NULL', // (R)\n  'OF', // (R)\n  'ON', // (R)\n  'OPTIMIZE', // (R)\n  'OPTIMIZER_COSTS', // (R)\n  'OPTION', // (R)\n  'OPTIONALLY', // (R)\n  'OR', // (R)\n  'ORDER', // (R)\n  'OUT', // (R)\n  'OUTER', // (R)\n  'OUTFILE', // (R)\n  'OVER', // (R)\n  'PARTITION', // (R)\n  'PERCENT_RANK', // (R)\n  'PRIMARY', // (R)\n  'PROCEDURE', // (R)\n  'PURGE', // (R)\n  'RANGE', // (R)\n  'RANK', // (R)\n  'READ', // (R)\n  'READS', // (R)\n  'READ_WRITE', // (R)\n  'RECURSIVE', // (R)\n  'REFERENCES', // (R)\n  'REGEXP', // (R)\n  'RELEASE', // (R)\n  'RENAME', // (R)\n  'REPEAT', // (R)\n  'REPLACE', // (R)\n  'REQUIRE', // (R)\n  'RESIGNAL', // (R)\n  'RESTRICT', // (R)\n  'RETURN', // (R)\n  'REVOKE', // (R)\n  'RIGHT', // (R)\n  'RLIKE', // (R)\n  'ROW', // (R)\n  'ROWS', // (R)\n  'ROW_NUMBER', // (R)\n  'SCHEMA', // (R)\n  'SCHEMAS', // (R)\n  'SECOND_MICROSECOND', // (R)\n  'SELECT', // (R)\n  'SENSITIVE', // (R)\n  'SEPARATOR', // (R)\n  'SET', // (R)\n  'SHOW', // (R)\n  'SIGNAL', // (R)\n  'SPATIAL', // (R)\n  'SPECIFIC', // (R)\n  'SQL', // (R)\n  'SQLEXCEPTION', // (R)\n  'SQLSTATE', // (R)\n  'SQLWARNING', // (R)\n  'SQL_BIG_RESULT', // (R)\n  'SQL_CALC_FOUND_ROWS', // (R)\n  'SQL_SMALL_RESULT', // (R)\n  'SSL', // (R)\n  'STARTING', // (R)\n  'STORED', // (R)\n  'STRAIGHT_JOIN', // (R)\n  'SYSTEM', // (R)\n  'TABLE', // (R)\n  'TERMINATED', // (R)\n  'THEN', // (R)\n  'TO', // (R)\n  'TRAILING', // (R)\n  'TRIGGER', // (R)\n  'TRUE', // (R)\n  'UNDO', // (R)\n  'UNION', // (R)\n  'UNIQUE', // (R)\n  'UNLOCK', // (R)\n  'UNSIGNED', // (R)\n  'UPDATE', // (R)\n  'USAGE', // (R)\n  'USE', // (R)\n  'USING', // (R)\n  'UTC_DATE', // (R)\n  'UTC_TIME', // (R)\n  'UTC_TIMESTAMP', // (R)\n  'VALUES', // (R)\n  'VIRTUAL', // (R)\n  'WHEN', // (R)\n  'WHERE', // (R)\n  'WHILE', // (R)\n  'WINDOW', // (R)\n  'WITH', // (R)\n  'WRITE', // (R)\n  'XOR', // (R)\n  'YEAR_MONTH', // (R)\n  'ZEROFILL', // (R)\n];\n\nexport const dataTypes: string[] = [\n  // https://dev.mysql.com/doc/refman/8.0/en/data-types.html\n  'BIGINT', // (R)\n  'BINARY', // (R)\n  'BIT',\n  'BLOB', // (R)\n  'BOOL', // (R)\n  'BOOLEAN', // (R)\n  'CHAR', // (R)\n  'CHARACTER', // (R)\n  'DATE', // (R)\n  'DATETIME', // (R)\n  'DEC', // (R)\n  'DECIMAL', // (R)\n  'DOUBLE PRECISION',\n  'DOUBLE', // (R)\n  'ENUM',\n  'FIXED',\n  'FLOAT', // (R)\n  'FLOAT4', // (R)\n  'FLOAT8', // (R)\n  'INT', // (R)\n  'INT1', // (R)\n  'INT2', // (R)\n  'INT3', // (R)\n  'INT4', // (R)\n  'INT8', // (R)\n  'INTEGER', // (R)\n  'LONGBLOB', // (R)\n  'LONGTEXT', // (R)\n  'MEDIUMBLOB', // (R)\n  'MEDIUMINT', // (R)\n  'MEDIUMTEXT', // (R)\n  'MIDDLEINT', // (R)\n  'NATIONAL CHAR', // (R)\n  'NATIONAL VARCHAR', // (R)\n  'NUMERIC', // (R)\n  'PRECISION', // (R)\n  'REAL', // (R)\n  'SMALLINT', // (R)\n  'TEXT',\n  'TIME',\n  'TIMESTAMP', // (R)\n  'TINYBLOB', // (R)\n  'TINYINT', // (R)\n  'TINYTEXT', // (R)\n  'VARBINARY', // (R)\n  'VARCHAR', // (R)\n  'VARCHARACTER', // (R)\n  'VARYING', // (R)\n  'YEAR',\n  // 'SET' // handled as special-case in postProcess\n];\n","export const functions: string[] = [\n  // https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html\n  'ABS',\n  'ACOS',\n  'ADDDATE',\n  'ADDTIME',\n  'AES_DECRYPT',\n  'AES_ENCRYPT',\n  // 'AND',\n  'ANY_VALUE',\n  'ASCII',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'AVG',\n  'BENCHMARK',\n  'BIN',\n  'BIN_TO_UUID',\n  'BINARY',\n  'BIT_AND',\n  'BIT_COUNT',\n  'BIT_LENGTH',\n  'BIT_OR',\n  'BIT_XOR',\n  'CAN_ACCESS_COLUMN',\n  'CAN_ACCESS_DATABASE',\n  'CAN_ACCESS_TABLE',\n  'CAN_ACCESS_USER',\n  'CAN_ACCESS_VIEW',\n  'CAST',\n  'CEIL',\n  'CEILING',\n  'CHAR',\n  'CHAR_LENGTH',\n  'CHARACTER_LENGTH',\n  'CHARSET',\n  'COALESCE',\n  'COERCIBILITY',\n  'COLLATION',\n  'COMPRESS',\n  'CONCAT',\n  'CONCAT_WS',\n  'CONNECTION_ID',\n  'CONV',\n  'CONVERT',\n  'CONVERT_TZ',\n  'COS',\n  'COT',\n  'COUNT',\n  'CRC32',\n  'CUME_DIST',\n  'CURDATE',\n  'CURRENT_DATE',\n  'CURRENT_ROLE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_USER',\n  'CURTIME',\n  'DATABASE',\n  'DATE',\n  'DATE_ADD',\n  'DATE_FORMAT',\n  'DATE_SUB',\n  'DATEDIFF',\n  'DAY',\n  'DAYNAME',\n  'DAYOFMONTH',\n  'DAYOFWEEK',\n  'DAYOFYEAR',\n  'DEFAULT',\n  'DEGREES',\n  'DENSE_RANK',\n  'DIV',\n  'ELT',\n  'EXP',\n  'EXPORT_SET',\n  'EXTRACT',\n  'EXTRACTVALUE',\n  'FIELD',\n  'FIND_IN_SET',\n  'FIRST_VALUE',\n  'FLOOR',\n  'FORMAT',\n  'FORMAT_BYTES',\n  'FORMAT_PICO_TIME',\n  'FOUND_ROWS',\n  'FROM_BASE64',\n  'FROM_DAYS',\n  'FROM_UNIXTIME',\n  'GEOMCOLLECTION',\n  'GEOMETRYCOLLECTION',\n  'GET_DD_COLUMN_PRIVILEGES',\n  'GET_DD_CREATE_OPTIONS',\n  'GET_DD_INDEX_SUB_PART_LENGTH',\n  'GET_FORMAT',\n  'GET_LOCK',\n  'GREATEST',\n  'GROUP_CONCAT',\n  'GROUPING',\n  'GTID_SUBSET',\n  'GTID_SUBTRACT',\n  'HEX',\n  'HOUR',\n  'ICU_VERSION',\n  'IF',\n  'IFNULL',\n  // 'IN',\n  'INET_ATON',\n  'INET_NTOA',\n  'INET6_ATON',\n  'INET6_NTOA',\n  'INSERT',\n  'INSTR',\n  'INTERNAL_AUTO_INCREMENT',\n  'INTERNAL_AVG_ROW_LENGTH',\n  'INTERNAL_CHECK_TIME',\n  'INTERNAL_CHECKSUM',\n  'INTERNAL_DATA_FREE',\n  'INTERNAL_DATA_LENGTH',\n  'INTERNAL_DD_CHAR_LENGTH',\n  'INTERNAL_GET_COMMENT_OR_ERROR',\n  'INTERNAL_GET_ENABLED_ROLE_JSON',\n  'INTERNAL_GET_HOSTNAME',\n  'INTERNAL_GET_USERNAME',\n  'INTERNAL_GET_VIEW_WARNING_OR_ERROR',\n  'INTERNAL_INDEX_COLUMN_CARDINALITY',\n  'INTERNAL_INDEX_LENGTH',\n  'INTERNAL_IS_ENABLED_ROLE',\n  'INTERNAL_IS_MANDATORY_ROLE',\n  'INTERNAL_KEYS_DISABLED',\n  'INTERNAL_MAX_DATA_LENGTH',\n  'INTERNAL_TABLE_ROWS',\n  'INTERNAL_UPDATE_TIME',\n  'INTERVAL',\n  'IS',\n  'IS_FREE_LOCK',\n  'IS_IPV4',\n  'IS_IPV4_COMPAT',\n  'IS_IPV4_MAPPED',\n  'IS_IPV6',\n  'IS NOT',\n  'IS NOT NULL',\n  'IS NULL',\n  'IS_USED_LOCK',\n  'IS_UUID',\n  'ISNULL',\n  'JSON_ARRAY',\n  'JSON_ARRAY_APPEND',\n  'JSON_ARRAY_INSERT',\n  'JSON_ARRAYAGG',\n  'JSON_CONTAINS',\n  'JSON_CONTAINS_PATH',\n  'JSON_DEPTH',\n  'JSON_EXTRACT',\n  'JSON_INSERT',\n  'JSON_KEYS',\n  'JSON_LENGTH',\n  'JSON_MERGE',\n  'JSON_MERGE_PATCH',\n  'JSON_MERGE_PRESERVE',\n  'JSON_OBJECT',\n  'JSON_OBJECTAGG',\n  'JSON_OVERLAPS',\n  'JSON_PRETTY',\n  'JSON_QUOTE',\n  'JSON_REMOVE',\n  'JSON_REPLACE',\n  'JSON_SCHEMA_VALID',\n  'JSON_SCHEMA_VALIDATION_REPORT',\n  'JSON_SEARCH',\n  'JSON_SET',\n  'JSON_STORAGE_FREE',\n  'JSON_STORAGE_SIZE',\n  'JSON_TABLE',\n  'JSON_TYPE',\n  'JSON_UNQUOTE',\n  'JSON_VALID',\n  'JSON_VALUE',\n  'LAG',\n  'LAST_DAY',\n  'LAST_INSERT_ID',\n  'LAST_VALUE',\n  'LCASE',\n  'LEAD',\n  'LEAST',\n  'LEFT',\n  'LENGTH',\n  'LIKE',\n  'LINESTRING',\n  'LN',\n  'LOAD_FILE',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOCATE',\n  'LOG',\n  'LOG10',\n  'LOG2',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'MAKE_SET',\n  'MAKEDATE',\n  'MAKETIME',\n  'MASTER_POS_WAIT',\n  'MATCH',\n  'MAX',\n  'MBRCONTAINS',\n  'MBRCOVEREDBY',\n  'MBRCOVERS',\n  'MBRDISJOINT',\n  'MBREQUALS',\n  'MBRINTERSECTS',\n  'MBROVERLAPS',\n  'MBRTOUCHES',\n  'MBRWITHIN',\n  'MD5',\n  'MEMBER OF',\n  'MICROSECOND',\n  'MID',\n  'MIN',\n  'MINUTE',\n  'MOD',\n  'MONTH',\n  'MONTHNAME',\n  'MULTILINESTRING',\n  'MULTIPOINT',\n  'MULTIPOLYGON',\n  'NAME_CONST',\n  'NOT',\n  'NOT IN',\n  'NOT LIKE',\n  'NOT REGEXP',\n  'NOW',\n  'NTH_VALUE',\n  'NTILE',\n  'NULLIF',\n  'OCT',\n  'OCTET_LENGTH',\n  // 'OR',\n  'ORD',\n  'PERCENT_RANK',\n  'PERIOD_ADD',\n  'PERIOD_DIFF',\n  'PI',\n  'POINT',\n  'POLYGON',\n  'POSITION',\n  'POW',\n  'POWER',\n  'PS_CURRENT_THREAD_ID',\n  'PS_THREAD_ID',\n  'QUARTER',\n  'QUOTE',\n  'RADIANS',\n  'RAND',\n  'RANDOM_BYTES',\n  'RANK',\n  'REGEXP',\n  'REGEXP_INSTR',\n  'REGEXP_LIKE',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'RELEASE_ALL_LOCKS',\n  'RELEASE_LOCK',\n  'REPEAT',\n  'REPLACE',\n  'REVERSE',\n  'RIGHT',\n  'RLIKE',\n  'ROLES_GRAPHML',\n  'ROUND',\n  'ROW_COUNT',\n  'ROW_NUMBER',\n  'RPAD',\n  'RTRIM',\n  'SCHEMA',\n  'SEC_TO_TIME',\n  'SECOND',\n  'SESSION_USER',\n  'SHA1',\n  'SHA2',\n  'SIGN',\n  'SIN',\n  'SLEEP',\n  'SOUNDEX',\n  'SOUNDS LIKE',\n  'SOURCE_POS_WAIT',\n  'SPACE',\n  'SQRT',\n  'ST_AREA',\n  'ST_ASBINARY',\n  'ST_ASGEOJSON',\n  'ST_ASTEXT',\n  'ST_BUFFER',\n  'ST_BUFFER_STRATEGY',\n  'ST_CENTROID',\n  'ST_COLLECT',\n  'ST_CONTAINS',\n  'ST_CONVEXHULL',\n  'ST_CROSSES',\n  'ST_DIFFERENCE',\n  'ST_DIMENSION',\n  'ST_DISJOINT',\n  'ST_DISTANCE',\n  'ST_DISTANCE_SPHERE',\n  'ST_ENDPOINT',\n  'ST_ENVELOPE',\n  'ST_EQUALS',\n  'ST_EXTERIORRING',\n  'ST_FRECHETDISTANCE',\n  'ST_GEOHASH',\n  'ST_GEOMCOLLFROMTEXT',\n  'ST_GEOMCOLLFROMWKB',\n  'ST_GEOMETRYN',\n  'ST_GEOMETRYTYPE',\n  'ST_GEOMFROMGEOJSON',\n  'ST_GEOMFROMTEXT',\n  'ST_GEOMFROMWKB',\n  'ST_HAUSDORFFDISTANCE',\n  'ST_INTERIORRINGN',\n  'ST_INTERSECTION',\n  'ST_INTERSECTS',\n  'ST_ISCLOSED',\n  'ST_ISEMPTY',\n  'ST_ISSIMPLE',\n  'ST_ISVALID',\n  'ST_LATFROMGEOHASH',\n  'ST_LATITUDE',\n  'ST_LENGTH',\n  'ST_LINEFROMTEXT',\n  'ST_LINEFROMWKB',\n  'ST_LINEINTERPOLATEPOINT',\n  'ST_LINEINTERPOLATEPOINTS',\n  'ST_LONGFROMGEOHASH',\n  'ST_LONGITUDE',\n  'ST_MAKEENVELOPE',\n  'ST_MLINEFROMTEXT',\n  'ST_MLINEFROMWKB',\n  'ST_MPOINTFROMTEXT',\n  'ST_MPOINTFROMWKB',\n  'ST_MPOLYFROMTEXT',\n  'ST_MPOLYFROMWKB',\n  'ST_NUMGEOMETRIES',\n  'ST_NUMINTERIORRING',\n  'ST_NUMPOINTS',\n  'ST_OVERLAPS',\n  'ST_POINTATDISTANCE',\n  'ST_POINTFROMGEOHASH',\n  'ST_POINTFROMTEXT',\n  'ST_POINTFROMWKB',\n  'ST_POINTN',\n  'ST_POLYFROMTEXT',\n  'ST_POLYFROMWKB',\n  'ST_SIMPLIFY',\n  'ST_SRID',\n  'ST_STARTPOINT',\n  'ST_SWAPXY',\n  'ST_SYMDIFFERENCE',\n  'ST_TOUCHES',\n  'ST_TRANSFORM',\n  'ST_UNION',\n  'ST_VALIDATE',\n  'ST_WITHIN',\n  'ST_X',\n  'ST_Y',\n  'STATEMENT_DIGEST',\n  'STATEMENT_DIGEST_TEXT',\n  'STD',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STR_TO_DATE',\n  'STRCMP',\n  'SUBDATE',\n  'SUBSTR',\n  'SUBSTRING',\n  'SUBSTRING_INDEX',\n  'SUBTIME',\n  'SUM',\n  'SYSDATE',\n  'SYSTEM_USER',\n  'TAN',\n  'TIME',\n  'TIME_FORMAT',\n  'TIME_TO_SEC',\n  'TIMEDIFF',\n  'TIMESTAMP',\n  'TIMESTAMPADD',\n  'TIMESTAMPDIFF',\n  'TO_BASE64',\n  'TO_DAYS',\n  'TO_SECONDS',\n  'TRIM',\n  'TRUNCATE',\n  'UCASE',\n  'UNCOMPRESS',\n  'UNCOMPRESSED_LENGTH',\n  'UNHEX',\n  'UNIX_TIMESTAMP',\n  'UPDATEXML',\n  'UPPER',\n  // 'USER',\n  'UTC_DATE',\n  'UTC_TIME',\n  'UTC_TIMESTAMP',\n  'UUID',\n  'UUID_SHORT',\n  'UUID_TO_BIN',\n  'VALIDATE_PASSWORD_STRENGTH',\n  'VALUES',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VARIANCE',\n  'VERSION',\n  'WAIT_FOR_EXECUTED_GTID_SET',\n  'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS',\n  'WEEK',\n  'WEEKDAY',\n  'WEEKOFYEAR',\n  'WEIGHT_STRING',\n  // 'XOR',\n  'YEAR',\n  'YEARWEEK',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from '../mariadb/likeMariaDb.js';\nimport { dataTypes, keywords } from './mysql.keywords.js';\nimport { functions } from './mysql.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n  'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n  'VALUES',\n  'ON DUPLICATE KEY UPDATE',\n  // - update:\n  'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [TEMPORARY] TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n  // - update:\n  'UPDATE [LOW_PRIORITY] [IGNORE]',\n  // - delete:\n  'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n  // - drop table:\n  'DROP [TEMPORARY] TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD [COLUMN]',\n  '{CHANGE | MODIFY} [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME [TO | AS]',\n  'RENAME COLUMN',\n  'ALTER [COLUMN]',\n  '{SET | DROP} DEFAULT', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html\n  'ALTER DATABASE',\n  'ALTER EVENT',\n  'ALTER FUNCTION',\n  'ALTER INSTANCE',\n  'ALTER LOGFILE GROUP',\n  'ALTER PROCEDURE',\n  'ALTER RESOURCE GROUP',\n  'ALTER SERVER',\n  'ALTER TABLESPACE',\n  'ALTER USER',\n  'ALTER VIEW',\n  'ANALYZE TABLE',\n  'BINLOG',\n  'CACHE INDEX',\n  'CALL',\n  'CHANGE MASTER TO',\n  'CHANGE REPLICATION FILTER',\n  'CHANGE REPLICATION SOURCE TO',\n  'CHECK TABLE',\n  'CHECKSUM TABLE',\n  'CLONE',\n  'COMMIT',\n  'CREATE DATABASE',\n  'CREATE EVENT',\n  'CREATE FUNCTION',\n  'CREATE FUNCTION',\n  'CREATE INDEX',\n  'CREATE LOGFILE GROUP',\n  'CREATE PROCEDURE',\n  'CREATE RESOURCE GROUP',\n  'CREATE ROLE',\n  'CREATE SERVER',\n  'CREATE SPATIAL REFERENCE SYSTEM',\n  'CREATE TABLESPACE',\n  'CREATE TRIGGER',\n  'CREATE USER',\n  'DEALLOCATE PREPARE',\n  'DESCRIBE',\n  'DROP DATABASE',\n  'DROP EVENT',\n  'DROP FUNCTION',\n  'DROP FUNCTION',\n  'DROP INDEX',\n  'DROP LOGFILE GROUP',\n  'DROP PROCEDURE',\n  'DROP RESOURCE GROUP',\n  'DROP ROLE',\n  'DROP SERVER',\n  'DROP SPATIAL REFERENCE SYSTEM',\n  'DROP TABLESPACE',\n  'DROP TRIGGER',\n  'DROP USER',\n  'DROP VIEW',\n  'EXECUTE',\n  'EXPLAIN',\n  'FLUSH',\n  'GRANT',\n  'HANDLER',\n  'HELP',\n  'IMPORT TABLE',\n  'INSTALL COMPONENT',\n  'INSTALL PLUGIN',\n  'KILL',\n  'LOAD DATA',\n  'LOAD INDEX INTO CACHE',\n  'LOAD XML',\n  'LOCK INSTANCE FOR BACKUP',\n  'LOCK TABLES',\n  'MASTER_POS_WAIT',\n  'OPTIMIZE TABLE',\n  'PREPARE',\n  'PURGE BINARY LOGS',\n  'RELEASE SAVEPOINT',\n  'RENAME TABLE',\n  'RENAME USER',\n  'REPAIR TABLE',\n  'RESET',\n  'RESET MASTER',\n  'RESET PERSIST',\n  'RESET REPLICA',\n  'RESET SLAVE',\n  'RESTART',\n  'REVOKE',\n  'ROLLBACK',\n  'ROLLBACK TO SAVEPOINT',\n  'SAVEPOINT',\n  'SET CHARACTER SET',\n  'SET DEFAULT ROLE',\n  'SET NAMES',\n  'SET PASSWORD',\n  'SET RESOURCE GROUP',\n  'SET ROLE',\n  'SET TRANSACTION',\n  'SHOW',\n  'SHOW BINARY LOGS',\n  'SHOW BINLOG EVENTS',\n  'SHOW CHARACTER SET',\n  'SHOW COLLATION',\n  'SHOW COLUMNS',\n  'SHOW CREATE DATABASE',\n  'SHOW CREATE EVENT',\n  'SHOW CREATE FUNCTION',\n  'SHOW CREATE PROCEDURE',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE TRIGGER',\n  'SHOW CREATE USER',\n  'SHOW CREATE VIEW',\n  'SHOW DATABASES',\n  'SHOW ENGINE',\n  'SHOW ENGINES',\n  'SHOW ERRORS',\n  'SHOW EVENTS',\n  'SHOW FUNCTION CODE',\n  'SHOW FUNCTION STATUS',\n  'SHOW GRANTS',\n  'SHOW INDEX',\n  'SHOW MASTER STATUS',\n  'SHOW OPEN TABLES',\n  'SHOW PLUGINS',\n  'SHOW PRIVILEGES',\n  'SHOW PROCEDURE CODE',\n  'SHOW PROCEDURE STATUS',\n  'SHOW PROCESSLIST',\n  'SHOW PROFILE',\n  'SHOW PROFILES',\n  'SHOW RELAYLOG EVENTS',\n  'SHOW REPLICA STATUS',\n  'SHOW REPLICAS',\n  'SHOW SLAVE',\n  'SHOW SLAVE HOSTS',\n  'SHOW STATUS',\n  'SHOW TABLE STATUS',\n  'SHOW TABLES',\n  'SHOW TRIGGERS',\n  'SHOW VARIABLES',\n  'SHOW WARNINGS',\n  'SHUTDOWN',\n  'SOURCE_POS_WAIT',\n  'START GROUP_REPLICATION',\n  'START REPLICA',\n  'START SLAVE',\n  'START TRANSACTION',\n  'STOP GROUP_REPLICATION',\n  'STOP REPLICA',\n  'STOP SLAVE',\n  'TABLE',\n  'UNINSTALL COMPONENT',\n  'UNINSTALL PLUGIN',\n  'UNLOCK INSTANCE',\n  'UNLOCK TABLES',\n  'USE',\n  'XA',\n  // flow control\n  // 'IF',\n  'ITERATE',\n  'LEAVE',\n  'LOOP',\n  'REPEAT',\n  'RETURN',\n  'WHILE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n  // non-standard joins\n  'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL]',\n  'CHARACTER SET',\n  '{ROWS | RANGE} BETWEEN',\n  'IDENTIFIED BY',\n]);\n\n// https://dev.mysql.com/doc/refman/8.0/en/\nexport const mysql: DialectOptions = {\n  name: 'mysql',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n    stringTypes: [\n      '\"\"-qq-bs',\n      { quote: \"''-qq-bs\", prefixes: ['N'] },\n      { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n    ],\n    identTypes: ['``'],\n    identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n    variableTypes: [\n      { regex: '@@?[A-Za-z0-9_.$]+' },\n      { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n      { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n      { quote: '``', prefixes: ['@'], requirePrefix: true },\n    ],\n    paramTypes: { positional: true },\n    lineCommentTypes: ['--', '#'],\n    operators: [\n      '%',\n      ':=',\n      '&',\n      '|',\n      '^',\n      '~',\n      '<<',\n      '>>',\n      '<=>',\n      '->',\n      '->>',\n      '&&',\n      '||',\n      '!',\n      '*.*', // Not actually an operator\n    ],\n    postProcess,\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const keywords: string[] = [\n  // https://docs.pingcap.com/tidb/stable/keywords\n  'ADD', // (R)\n  'ALL', // (R)\n  'ALTER', // (R)\n  'ANALYZE', // (R)\n  'AND', // (R)\n  'ARRAY', // (R)\n  'AS', // (R)\n  'ASC', // (R)\n  'BETWEEN', // (R)\n  'BOTH', // (R)\n  'BY', // (R)\n  'CALL', // (R)\n  'CASCADE', // (R)\n  'CASE', // (R)\n  'CHANGE', // (R)\n  'CHECK', // (R)\n  'COLLATE', // (R)\n  'COLUMN', // (R)\n  'CONSTRAINT', // (R)\n  'CONTINUE', // (R)\n  'CONVERT', // (R)\n  'CREATE', // (R)\n  'CROSS', // (R)\n  'CURRENT_DATE', // (R)\n  'CURRENT_ROLE', // (R)\n  'CURRENT_TIME', // (R)\n  'CURRENT_TIMESTAMP', // (R)\n  'CURRENT_USER', // (R)\n  'CURSOR', // (R)\n  'DATABASE', // (R)\n  'DATABASES', // (R)\n  'DAY_HOUR', // (R)\n  'DAY_MICROSECOND', // (R)\n  'DAY_MINUTE', // (R)\n  'DAY_SECOND', // (R)\n  'DEFAULT', // (R)\n  'DELAYED', // (R)\n  'DELETE', // (R)\n  'DESC', // (R)\n  'DESCRIBE', // (R)\n  'DISTINCT', // (R)\n  'DISTINCTROW', // (R)\n  'DIV', // (R)\n  'DOUBLE', // (R)\n  'DROP', // (R)\n  'DUAL', // (R)\n  'ELSE', // (R)\n  'ELSEIF', // (R)\n  'ENCLOSED', // (R)\n  'ESCAPED', // (R)\n  'EXCEPT', // (R)\n  'EXISTS', // (R)\n  'EXIT', // (R)\n  'EXPLAIN', // (R)\n  'FALSE', // (R)\n  'FETCH', // (R)\n  'FOR', // (R)\n  'FORCE', // (R)\n  'FOREIGN', // (R)\n  'FROM', // (R)\n  'FULLTEXT', // (R)\n  'GENERATED', // (R)\n  'GRANT', // (R)\n  'GROUP', // (R)\n  'GROUPS', // (R)\n  'HAVING', // (R)\n  'HIGH_PRIORITY', // (R)\n  'HOUR_MICROSECOND', // (R)\n  'HOUR_MINUTE', // (R)\n  'HOUR_SECOND', // (R)\n  'IF', // (R)\n  'IGNORE', // (R)\n  'ILIKE', // (R)\n  'IN', // (R)\n  'INDEX', // (R)\n  'INFILE', // (R)\n  'INNER', // (R)\n  'INOUT', // (R)\n  'INSERT', // (R)\n  'INTERSECT', // (R)\n  'INTERVAL', // (R)\n  'INTO', // (R)\n  'IS', // (R)\n  'ITERATE', // (R)\n  'JOIN', // (R)\n  'KEY', // (R)\n  'KEYS', // (R)\n  'KILL', // (R)\n  'LEADING', // (R)\n  'LEAVE', // (R)\n  'LEFT', // (R)\n  'LIKE', // (R)\n  'LIMIT', // (R)\n  'LINEAR', // (R)\n  'LINES', // (R)\n  'LOAD', // (R)\n  'LOCALTIME', // (R)\n  'LOCALTIMESTAMP', // (R)\n  'LOCK', // (R)\n  'LONG', // (R)\n  'LOW_PRIORITY', // (R)\n  'MATCH', // (R)\n  'MAXVALUE', // (R)\n  'MINUTE_MICROSECOND', // (R)\n  'MINUTE_SECOND', // (R)\n  'MOD', // (R)\n  'NATURAL', // (R)\n  'NOT', // (R)\n  'NO_WRITE_TO_BINLOG', // (R)\n  'NULL', // (R)\n  'OF', // (R)\n  'ON', // (R)\n  'OPTIMIZE', // (R)\n  'OPTION', // (R)\n  'OPTIONALLY', // (R)\n  'OR', // (R)\n  'ORDER', // (R)\n  'OUT', // (R)\n  'OUTER', // (R)\n  'OUTFILE', // (R)\n  'OVER', // (R)\n  'PARTITION', // (R)\n  'PRIMARY', // (R)\n  'PROCEDURE', // (R)\n  'RANGE', // (R)\n  'READ', // (R)\n  'RECURSIVE', // (R)\n  'REFERENCES', // (R)\n  'REGEXP', // (R)\n  'RELEASE', // (R)\n  'RENAME', // (R)\n  'REPEAT', // (R)\n  'REPLACE', // (R)\n  'REQUIRE', // (R)\n  'RESTRICT', // (R)\n  'REVOKE', // (R)\n  'RIGHT', // (R)\n  'RLIKE', // (R)\n  'ROW', // (R)\n  'ROWS', // (R)\n  'SECOND_MICROSECOND', // (R)\n  'SELECT', // (R)\n  'SET', // (R)\n  'SHOW', // (R)\n  'SPATIAL', // (R)\n  'SQL', // (R)\n  'SQLEXCEPTION', // (R)\n  'SQLSTATE', // (R)\n  'SQLWARNING', // (R)\n  'SQL_BIG_RESULT', // (R)\n  'SQL_CALC_FOUND_ROWS', // (R)\n  'SQL_SMALL_RESULT', // (R)\n  'SSL', // (R)\n  'STARTING', // (R)\n  'STATS_EXTENDED', // (R)\n  'STORED', // (R)\n  'STRAIGHT_JOIN', // (R)\n  'TABLE', // (R)\n  'TABLESAMPLE', // (R)\n  'TERMINATED', // (R)\n  'THEN', // (R)\n  'TO', // (R)\n  'TRAILING', // (R)\n  'TRIGGER', // (R)\n  'TRUE', // (R)\n  'TiDB_CURRENT_TSO', // (R)\n  'UNION', // (R)\n  'UNIQUE', // (R)\n  'UNLOCK', // (R)\n  'UNSIGNED', // (R)\n  'UNTIL', // (R)\n  'UPDATE', // (R)\n  'USAGE', // (R)\n  'USE', // (R)\n  'USING', // (R)\n  'UTC_DATE', // (R)\n  'UTC_TIME', // (R)\n  'UTC_TIMESTAMP', // (R)\n  'VALUES', // (R)\n  'VIRTUAL', // (R)\n  'WHEN', // (R)\n  'WHERE', // (R)\n  'WHILE', // (R)\n  'WINDOW', // (R)\n  'WITH', // (R)\n  'WRITE', // (R)\n  'XOR', // (R)\n  'YEAR_MONTH', // (R)\n  'ZEROFILL', // (R)\n];\n\nexport const dataTypes: string[] = [\n  // https://docs.pingcap.com/tidb/stable/data-type-overview\n  'BIGINT', // (R)\n  'BINARY', // (R)\n  'BIT',\n  'BLOB', // (R)\n  'BOOL', // (R)\n  'BOOLEAN', // (R)\n  'CHAR', // (R)\n  'CHARACTER', // (R)\n  'DATE', // (R)\n  'DATETIME', // (R)\n  'DEC', // (R)\n  'DECIMAL', // (R)\n  'DOUBLE PRECISION',\n  'DOUBLE', // (R)\n  'ENUM',\n  'FIXED',\n  'INT', // (R)\n  'INT1', // (R)\n  'INT2', // (R)\n  'INT3', // (R)\n  'INT4', // (R)\n  'INT8', // (R)\n  'INTEGER', // (R)\n  'LONGBLOB', // (R)\n  'LONGTEXT', // (R)\n  'MEDIUMBLOB', // (R)\n  'MEDIUMINT', // (R)\n  'MIDDLEINT', // (R)\n  'NATIONAL CHAR', // (R)\n  'NATIONAL VARCHAR', // (R)\n  'NUMERIC', // (R)\n  'PRECISION', // (R)\n  'SMALLINT', // (R)\n  'TEXT',\n  'TIME',\n  'TIMESTAMP', // (R)\n  'TINYBLOB', // (R)\n  'TINYINT', // (R)\n  'TINYTEXT', // (R)\n  'VARBINARY', // (R)\n  'VARCHAR', // (R)\n  'VARCHARACTER', // (R)\n  'VARYING', // (R)\n  'YEAR',\n  // 'SET' // handled as special-case in postProcess\n];\n","export const functions: string[] = [\n  // https://docs.pingcap.com/tidb/stable/sql-statement-show-builtins\n  // https://docs.pingcap.com/tidb/stable/functions-and-operators-overview\n  // + MySQL aggregate functions: https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html\n  // + MySQL window functions: https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html\n  'ABS',\n  'ACOS',\n  'ADDDATE',\n  'ADDTIME',\n  'AES_DECRYPT',\n  'AES_ENCRYPT',\n  // 'AND',\n  'ANY_VALUE',\n  'ASCII',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'AVG',\n  'BENCHMARK',\n  'BIN',\n  'BIN_TO_UUID',\n  'BIT_AND',\n  'BIT_COUNT',\n  'BIT_LENGTH',\n  'BIT_OR',\n  'BIT_XOR',\n  'BITAND',\n  'BITNEG',\n  'BITOR',\n  'BITXOR',\n  'CASE',\n  'CAST',\n  'CEIL',\n  'CEILING',\n  'CHAR_FUNC',\n  'CHAR_LENGTH',\n  'CHARACTER_LENGTH',\n  'CHARSET',\n  'COALESCE',\n  'COERCIBILITY',\n  'COLLATION',\n  'COMPRESS',\n  'CONCAT',\n  'CONCAT_WS',\n  'CONNECTION_ID',\n  'CONV',\n  'CONVERT',\n  'CONVERT_TZ',\n  'COS',\n  'COT',\n  'COUNT',\n  'CRC32',\n  'CUME_DIST',\n  'CURDATE',\n  'CURRENT_DATE',\n  'CURRENT_RESOURCE_GROUP',\n  'CURRENT_ROLE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_USER',\n  'CURTIME',\n  'DATABASE',\n  'DATE',\n  'DATE_ADD',\n  'DATE_FORMAT',\n  'DATE_SUB',\n  'DATEDIFF',\n  'DAY',\n  'DAYNAME',\n  'DAYOFMONTH',\n  'DAYOFWEEK',\n  'DAYOFYEAR',\n  'DECODE',\n  'DEFAULT_FUNC',\n  'DEGREES',\n  'DENSE_RANK',\n  'DES_DECRYPT',\n  'DES_ENCRYPT',\n  'DIV',\n  'ELT',\n  'ENCODE',\n  'ENCRYPT',\n  'EQ',\n  'EXP',\n  'EXPORT_SET',\n  'EXTRACT',\n  'FIELD',\n  'FIND_IN_SET',\n  'FIRST_VALUE',\n  'FLOOR',\n  'FORMAT',\n  'FORMAT_BYTES',\n  'FORMAT_NANO_TIME',\n  'FOUND_ROWS',\n  'FROM_BASE64',\n  'FROM_DAYS',\n  'FROM_UNIXTIME',\n  'GE',\n  'GET_FORMAT',\n  'GET_LOCK',\n  'GETPARAM',\n  'GREATEST',\n  'GROUP_CONCAT',\n  'GROUPING',\n  'GT',\n  'HEX',\n  'HOUR',\n  'IF',\n  'IFNULL',\n  'ILIKE',\n  // 'IN',\n  'INET6_ATON',\n  'INET6_NTOA',\n  'INET_ATON',\n  'INET_NTOA',\n  'INSERT_FUNC',\n  'INSTR',\n  'INTDIV',\n  'INTERVAL',\n  'IS_FREE_LOCK',\n  'IS_IPV4',\n  'IS_IPV4_COMPAT',\n  'IS_IPV4_MAPPED',\n  'IS_IPV6',\n  'IS_USED_LOCK',\n  'IS_UUID',\n  'ISFALSE',\n  'ISNULL',\n  'ISTRUE',\n  'JSON_ARRAY',\n  'JSON_ARRAYAGG',\n  'JSON_ARRAY_APPEND',\n  'JSON_ARRAY_INSERT',\n  'JSON_CONTAINS',\n  'JSON_CONTAINS_PATH',\n  'JSON_DEPTH',\n  'JSON_EXTRACT',\n  'JSON_INSERT',\n  'JSON_KEYS',\n  'JSON_LENGTH',\n  'JSON_MEMBEROF',\n  'JSON_MERGE',\n  'JSON_MERGE_PATCH',\n  'JSON_MERGE_PRESERVE',\n  'JSON_OBJECT',\n  'JSON_OBJECTAGG',\n  'JSON_OVERLAPS',\n  'JSON_PRETTY',\n  'JSON_QUOTE',\n  'JSON_REMOVE',\n  'JSON_REPLACE',\n  'JSON_SEARCH',\n  'JSON_SET',\n  'JSON_STORAGE_FREE',\n  'JSON_STORAGE_SIZE',\n  'JSON_TYPE',\n  'JSON_UNQUOTE',\n  'JSON_VALID',\n  'LAG',\n  'LAST_DAY',\n  'LAST_INSERT_ID',\n  'LAST_VALUE',\n  'LASTVAL',\n  'LCASE',\n  'LE',\n  'LEAD',\n  'LEAST',\n  'LEFT',\n  'LEFTSHIFT',\n  'LENGTH',\n  'LIKE',\n  'LN',\n  'LOAD_FILE',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOCATE',\n  'LOG',\n  'LOG10',\n  'LOG2',\n  'LOWER',\n  'LPAD',\n  'LT',\n  'LTRIM',\n  'MAKE_SET',\n  'MAKEDATE',\n  'MAKETIME',\n  'MASTER_POS_WAIT',\n  'MAX',\n  'MD5',\n  'MICROSECOND',\n  'MID',\n  'MIN',\n  'MINUS',\n  'MINUTE',\n  'MOD',\n  'MONTH',\n  'MONTHNAME',\n  'MUL',\n  'NAME_CONST',\n  'NE',\n  'NEXTVAL',\n  'NOT',\n  'NOW',\n  'NTH_VALUE',\n  'NTILE',\n  'NULLEQ',\n  'OCT',\n  'OCTET_LENGTH',\n  'OLD_PASSWORD',\n  // 'OR',\n  'ORD',\n  'PASSWORD_FUNC',\n  'PERCENT_RANK',\n  'PERIOD_ADD',\n  'PERIOD_DIFF',\n  'PI',\n  'PLUS',\n  'POSITION',\n  'POW',\n  'POWER',\n  'QUARTER',\n  'QUOTE',\n  'RADIANS',\n  'RAND',\n  'RANDOM_BYTES',\n  'RANK',\n  'REGEXP',\n  'REGEXP_INSTR',\n  'REGEXP_LIKE',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'RELEASE_ALL_LOCKS',\n  'RELEASE_LOCK',\n  'REPEAT',\n  'REPLACE',\n  'REVERSE',\n  'RIGHT',\n  'RIGHTSHIFT',\n  'ROUND',\n  'ROW_COUNT',\n  'ROW_NUMBER',\n  'RPAD',\n  'RTRIM',\n  'SCHEMA',\n  'SEC_TO_TIME',\n  'SECOND',\n  'SESSION_USER',\n  'SETVAL',\n  'SETVAR',\n  'SHA',\n  'SHA1',\n  'SHA2',\n  'SIGN',\n  'SIN',\n  'SLEEP',\n  'SM3',\n  'SPACE',\n  'SQRT',\n  'STD',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STR_TO_DATE',\n  'STRCMP',\n  'SUBDATE',\n  'SUBSTR',\n  'SUBSTRING',\n  'SUBSTRING_INDEX',\n  'SUBTIME',\n  'SUM',\n  'SYSDATE',\n  'SYSTEM_USER',\n  'TAN',\n  'TIDB_BOUNDED_STALENESS',\n  'TIDB_CURRENT_TSO',\n  'TIDB_DECODE_BINARY_PLAN',\n  'TIDB_DECODE_KEY',\n  'TIDB_DECODE_PLAN',\n  'TIDB_DECODE_SQL_DIGESTS',\n  'TIDB_ENCODE_SQL_DIGEST',\n  'TIDB_IS_DDL_OWNER',\n  'TIDB_PARSE_TSO',\n  'TIDB_PARSE_TSO_LOGICAL',\n  'TIDB_ROW_CHECKSUM',\n  'TIDB_SHARD',\n  'TIDB_VERSION',\n  'TIME',\n  'TIME_FORMAT',\n  'TIME_TO_SEC',\n  'TIMEDIFF',\n  'TIMESTAMP',\n  'TIMESTAMPADD',\n  'TIMESTAMPDIFF',\n  'TO_BASE64',\n  'TO_DAYS',\n  'TO_SECONDS',\n  'TRANSLATE',\n  'TRIM',\n  'TRUNCATE',\n  'UCASE',\n  'UNARYMINUS',\n  'UNCOMPRESS',\n  'UNCOMPRESSED_LENGTH',\n  'UNHEX',\n  'UNIX_TIMESTAMP',\n  'UPPER',\n  // 'USER',\n  'UTC_DATE',\n  'UTC_TIME',\n  'UTC_TIMESTAMP',\n  'UUID',\n  'UUID_SHORT',\n  'UUID_TO_BIN',\n  'VALIDATE_PASSWORD_STRENGTH',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VARIANCE',\n  'VERSION',\n  'VITESS_HASH',\n  'WEEK',\n  'WEEKDAY',\n  'WEEKOFYEAR',\n  'WEIGHT_STRING',\n  // 'XOR',\n  'YEAR',\n  'YEARWEEK',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from '../mariadb/likeMariaDb.js';\nimport { dataTypes, keywords } from './tidb.keywords.js';\nimport { functions } from './tidb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n  'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n  'VALUES',\n  'ON DUPLICATE KEY UPDATE',\n  // - update:\n  'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [TEMPORARY] TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n  // https://docs.pingcap.com/tidb/stable/sql-statement-create-view\n  'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-update\n  'UPDATE [LOW_PRIORITY] [IGNORE]',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-delete\n  'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-drop-table\n  'DROP [TEMPORARY] TABLE [IF EXISTS]',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-alter-table\n  'ALTER TABLE',\n  'ADD [COLUMN]',\n  '{CHANGE | MODIFY} [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME [TO | AS]',\n  'RENAME COLUMN',\n  'ALTER [COLUMN]',\n  '{SET | DROP} DEFAULT', // for alter column\n  // https://docs.pingcap.com/tidb/stable/sql-statement-truncate\n  'TRUNCATE [TABLE]',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-alter-database\n  'ALTER DATABASE',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-alter-instance\n  'ALTER INSTANCE',\n  'ALTER RESOURCE GROUP',\n  'ALTER SEQUENCE',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-alter-user\n  'ALTER USER',\n  'ALTER VIEW',\n  'ANALYZE TABLE',\n  'CHECK TABLE',\n  'CHECKSUM TABLE',\n  'COMMIT',\n  'CREATE DATABASE',\n  'CREATE INDEX',\n  'CREATE RESOURCE GROUP',\n  'CREATE ROLE',\n  'CREATE SEQUENCE',\n  'CREATE USER',\n  'DEALLOCATE PREPARE',\n  'DESCRIBE',\n  'DROP DATABASE',\n  'DROP INDEX',\n  'DROP RESOURCE GROUP',\n  'DROP ROLE',\n  'DROP TABLESPACE',\n  'DROP USER',\n  'DROP VIEW',\n  'EXPLAIN',\n  'FLUSH',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-grant-privileges\n  'GRANT',\n  'IMPORT TABLE',\n  'INSTALL COMPONENT',\n  'INSTALL PLUGIN',\n  'KILL',\n  'LOAD DATA',\n  'LOCK INSTANCE FOR BACKUP',\n  'LOCK TABLES',\n  'OPTIMIZE TABLE',\n  'PREPARE',\n  'RELEASE SAVEPOINT',\n  'RENAME TABLE',\n  'RENAME USER',\n  'REPAIR TABLE',\n  'RESET',\n  'REVOKE',\n  'ROLLBACK',\n  'ROLLBACK TO SAVEPOINT',\n  'SAVEPOINT',\n  'SET CHARACTER SET',\n  'SET DEFAULT ROLE',\n  'SET NAMES',\n  'SET PASSWORD',\n  'SET RESOURCE GROUP',\n  'SET ROLE',\n  'SET TRANSACTION',\n  'SHOW',\n  'SHOW BINARY LOGS',\n  'SHOW BINLOG EVENTS',\n  'SHOW CHARACTER SET',\n  'SHOW COLLATION',\n  'SHOW COLUMNS',\n  'SHOW CREATE DATABASE',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE USER',\n  'SHOW CREATE VIEW',\n  'SHOW DATABASES',\n  'SHOW ENGINE',\n  'SHOW ENGINES',\n  'SHOW ERRORS',\n  'SHOW EVENTS',\n  'SHOW GRANTS',\n  'SHOW INDEX',\n  'SHOW MASTER STATUS',\n  'SHOW OPEN TABLES',\n  'SHOW PLUGINS',\n  'SHOW PRIVILEGES',\n  'SHOW PROCESSLIST',\n  'SHOW PROFILE',\n  'SHOW PROFILES',\n  'SHOW STATUS',\n  'SHOW TABLE STATUS',\n  'SHOW TABLES',\n  'SHOW TRIGGERS',\n  'SHOW VARIABLES',\n  'SHOW WARNINGS',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-table\n  'TABLE',\n  'UNINSTALL COMPONENT',\n  'UNINSTALL PLUGIN',\n  'UNLOCK INSTANCE',\n  'UNLOCK TABLES',\n  // https://docs.pingcap.com/tidb/stable/sql-statement-use\n  'USE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n  // non-standard joins\n  'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL]',\n  'CHARACTER SET',\n  '{ROWS | RANGE} BETWEEN',\n  'IDENTIFIED BY',\n]);\n\n// https://docs.pingcap.com/tidb/stable/basic-features\nexport const tidb: DialectOptions = {\n  name: 'tidb',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n    stringTypes: [\n      '\"\"-qq-bs',\n      { quote: \"''-qq-bs\", prefixes: ['N'] },\n      { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n    ],\n    identTypes: ['``'],\n    identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n    variableTypes: [\n      { regex: '@@?[A-Za-z0-9_.$]+' },\n      { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n      { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n      { quote: '``', prefixes: ['@'], requirePrefix: true },\n    ],\n    paramTypes: { positional: true },\n    lineCommentTypes: ['--', '#'],\n    operators: [\n      '%',\n      ':=',\n      '&',\n      '|',\n      '^',\n      '~',\n      '<<',\n      '>>',\n      '<=>',\n      '->',\n      '->>',\n      '&&',\n      '||',\n      '!',\n      '*.*', // Not actually an operator\n    ],\n    postProcess,\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const functions: string[] = [\n  // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/functions.html\n  'ABORT',\n  'ABS',\n  'ACOS',\n  'ADVISOR',\n  'ARRAY_AGG',\n  'ARRAY_AGG',\n  'ARRAY_APPEND',\n  'ARRAY_AVG',\n  'ARRAY_BINARY_SEARCH',\n  'ARRAY_CONCAT',\n  'ARRAY_CONTAINS',\n  'ARRAY_COUNT',\n  'ARRAY_DISTINCT',\n  'ARRAY_EXCEPT',\n  'ARRAY_FLATTEN',\n  'ARRAY_IFNULL',\n  'ARRAY_INSERT',\n  'ARRAY_INTERSECT',\n  'ARRAY_LENGTH',\n  'ARRAY_MAX',\n  'ARRAY_MIN',\n  'ARRAY_MOVE',\n  'ARRAY_POSITION',\n  'ARRAY_PREPEND',\n  'ARRAY_PUT',\n  'ARRAY_RANGE',\n  'ARRAY_REMOVE',\n  'ARRAY_REPEAT',\n  'ARRAY_REPLACE',\n  'ARRAY_REVERSE',\n  'ARRAY_SORT',\n  'ARRAY_STAR',\n  'ARRAY_SUM',\n  'ARRAY_SYMDIFF',\n  'ARRAY_SYMDIFF1',\n  'ARRAY_SYMDIFFN',\n  'ARRAY_UNION',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'AVG',\n  'BASE64',\n  'BASE64_DECODE',\n  'BASE64_ENCODE',\n  'BITAND ',\n  'BITCLEAR ',\n  'BITNOT ',\n  'BITOR ',\n  'BITSET ',\n  'BITSHIFT ',\n  'BITTEST ',\n  'BITXOR ',\n  'CEIL',\n  'CLOCK_LOCAL',\n  'CLOCK_MILLIS',\n  'CLOCK_STR',\n  'CLOCK_TZ',\n  'CLOCK_UTC',\n  'COALESCE',\n  'CONCAT',\n  'CONCAT2',\n  'CONTAINS',\n  'CONTAINS_TOKEN',\n  'CONTAINS_TOKEN_LIKE',\n  'CONTAINS_TOKEN_REGEXP',\n  'COS',\n  'COUNT',\n  'COUNT',\n  'COUNTN',\n  'CUME_DIST',\n  'CURL',\n  'DATE_ADD_MILLIS',\n  'DATE_ADD_STR',\n  'DATE_DIFF_MILLIS',\n  'DATE_DIFF_STR',\n  'DATE_FORMAT_STR',\n  'DATE_PART_MILLIS',\n  'DATE_PART_STR',\n  'DATE_RANGE_MILLIS',\n  'DATE_RANGE_STR',\n  'DATE_TRUNC_MILLIS',\n  'DATE_TRUNC_STR',\n  'DECODE',\n  'DECODE_JSON',\n  'DEGREES',\n  'DENSE_RANK',\n  'DURATION_TO_STR',\n  // 'E',\n  'ENCODED_SIZE',\n  'ENCODE_JSON',\n  'EXP',\n  'FIRST_VALUE',\n  'FLOOR',\n  'GREATEST',\n  'HAS_TOKEN',\n  'IFINF',\n  'IFMISSING',\n  'IFMISSINGORNULL',\n  'IFNAN',\n  'IFNANORINF',\n  'IFNULL',\n  'INITCAP',\n  'ISARRAY',\n  'ISATOM',\n  'ISBITSET',\n  'ISBOOLEAN',\n  'ISNUMBER',\n  'ISOBJECT',\n  'ISSTRING',\n  'LAG',\n  'LAST_VALUE',\n  'LEAD',\n  'LEAST',\n  'LENGTH',\n  'LN',\n  'LOG',\n  'LOWER',\n  'LTRIM',\n  'MAX',\n  'MEAN',\n  'MEDIAN',\n  'META',\n  'MILLIS',\n  'MILLIS_TO_LOCAL',\n  'MILLIS_TO_STR',\n  'MILLIS_TO_TZ',\n  'MILLIS_TO_UTC',\n  'MILLIS_TO_ZONE_NAME',\n  'MIN',\n  'MISSINGIF',\n  'NANIF',\n  'NEGINFIF',\n  'NOW_LOCAL',\n  'NOW_MILLIS',\n  'NOW_STR',\n  'NOW_TZ',\n  'NOW_UTC',\n  'NTH_VALUE',\n  'NTILE',\n  'NULLIF',\n  'NVL',\n  'NVL2',\n  'OBJECT_ADD',\n  'OBJECT_CONCAT',\n  'OBJECT_INNER_PAIRS',\n  'OBJECT_INNER_VALUES',\n  'OBJECT_LENGTH',\n  'OBJECT_NAMES',\n  'OBJECT_PAIRS',\n  'OBJECT_PUT',\n  'OBJECT_REMOVE',\n  'OBJECT_RENAME',\n  'OBJECT_REPLACE',\n  'OBJECT_UNWRAP',\n  'OBJECT_VALUES',\n  'PAIRS',\n  'PERCENT_RANK',\n  'PI',\n  'POLY_LENGTH',\n  'POSINFIF',\n  'POSITION',\n  'POWER',\n  'RADIANS',\n  'RANDOM',\n  'RANK',\n  'RATIO_TO_REPORT',\n  'REGEXP_CONTAINS',\n  'REGEXP_LIKE',\n  'REGEXP_MATCHES',\n  'REGEXP_POSITION',\n  'REGEXP_REPLACE',\n  'REGEXP_SPLIT',\n  'REGEX_CONTAINS',\n  'REGEX_LIKE',\n  'REGEX_MATCHES',\n  'REGEX_POSITION',\n  'REGEX_REPLACE',\n  'REGEX_SPLIT',\n  'REPEAT',\n  'REPLACE',\n  'REVERSE',\n  'ROUND',\n  'ROW_NUMBER',\n  'RTRIM',\n  'SEARCH',\n  'SEARCH_META',\n  'SEARCH_SCORE',\n  'SIGN',\n  'SIN',\n  'SPLIT',\n  'SQRT',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STR_TO_DURATION',\n  'STR_TO_MILLIS',\n  'STR_TO_TZ',\n  'STR_TO_UTC',\n  'STR_TO_ZONE_NAME',\n  'SUBSTR',\n  'SUFFIXES',\n  'SUM',\n  'TAN',\n  'TITLE',\n  'TOARRAY',\n  'TOATOM',\n  'TOBOOLEAN',\n  'TOKENS',\n  'TOKENS',\n  'TONUMBER',\n  'TOOBJECT',\n  'TOSTRING',\n  'TRIM',\n  'TRUNC',\n  // 'TYPE', // disabled\n  'UPPER',\n  'UUID',\n  'VARIANCE',\n  'VARIANCE_POP',\n  'VARIANCE_SAMP',\n  'VAR_POP',\n  'VAR_SAMP',\n  'WEEKDAY_MILLIS',\n  'WEEKDAY_STR',\n  // type casting\n  // not implemented in N1QL, but added here now for the sake of tests\n  // https://docs.couchbase.com/server/current/analytics/3_query.html#Vs_SQL-92\n  'CAST',\n];\n","export const keywords: string[] = [\n  // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html\n  'ADVISE',\n  'ALL',\n  'ALTER',\n  'ANALYZE',\n  'AND',\n  'ANY',\n  'ARRAY',\n  'AS',\n  'ASC',\n  'AT',\n  'BEGIN',\n  'BETWEEN',\n  'BINARY',\n  'BOOLEAN',\n  'BREAK',\n  'BUCKET',\n  'BUILD',\n  'BY',\n  'CALL',\n  'CASE',\n  'CAST',\n  'CLUSTER',\n  'COLLATE',\n  'COLLECTION',\n  'COMMIT',\n  'COMMITTED',\n  'CONNECT',\n  'CONTINUE',\n  'CORRELATED',\n  'COVER',\n  'CREATE',\n  'CURRENT',\n  'DATABASE',\n  'DATASET',\n  'DATASTORE',\n  'DECLARE',\n  'DECREMENT',\n  'DELETE',\n  'DERIVED',\n  'DESC',\n  'DESCRIBE',\n  'DISTINCT',\n  'DO',\n  'DROP',\n  'EACH',\n  'ELEMENT',\n  'ELSE',\n  'END',\n  'EVERY',\n  'EXCEPT',\n  'EXCLUDE',\n  'EXECUTE',\n  'EXISTS',\n  'EXPLAIN',\n  'FALSE',\n  'FETCH',\n  'FILTER',\n  'FIRST',\n  'FLATTEN',\n  'FLUSH',\n  'FOLLOWING',\n  'FOR',\n  'FORCE',\n  'FROM',\n  'FTS',\n  'FUNCTION',\n  'GOLANG',\n  'GRANT',\n  'GROUP',\n  'GROUPS',\n  'GSI',\n  'HASH',\n  'HAVING',\n  'IF',\n  'IGNORE',\n  'ILIKE',\n  'IN',\n  'INCLUDE',\n  'INCREMENT',\n  'INDEX',\n  'INFER',\n  'INLINE',\n  'INNER',\n  'INSERT',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'ISOLATION',\n  'JAVASCRIPT',\n  'JOIN',\n  'KEY',\n  'KEYS',\n  'KEYSPACE',\n  'KNOWN',\n  'LANGUAGE',\n  'LAST',\n  'LEFT',\n  'LET',\n  'LETTING',\n  'LEVEL',\n  'LIKE',\n  'LIMIT',\n  'LSM',\n  'MAP',\n  'MAPPING',\n  'MATCHED',\n  'MATERIALIZED',\n  'MERGE',\n  'MINUS',\n  'MISSING',\n  'NAMESPACE',\n  'NEST',\n  'NL',\n  'NO',\n  'NOT',\n  'NTH_VALUE',\n  'NULL',\n  'NULLS',\n  'NUMBER',\n  'OBJECT',\n  'OFFSET',\n  'ON',\n  'OPTION',\n  'OPTIONS',\n  'OR',\n  'ORDER',\n  'OTHERS',\n  'OUTER',\n  'OVER',\n  'PARSE',\n  'PARTITION',\n  'PASSWORD',\n  'PATH',\n  'POOL',\n  'PRECEDING',\n  'PREPARE',\n  'PRIMARY',\n  'PRIVATE',\n  'PRIVILEGE',\n  'PROBE',\n  'PROCEDURE',\n  'PUBLIC',\n  'RANGE',\n  'RAW',\n  'REALM',\n  'REDUCE',\n  'RENAME',\n  'RESPECT',\n  'RETURN',\n  'RETURNING',\n  'REVOKE',\n  'RIGHT',\n  'ROLE',\n  'ROLLBACK',\n  'ROW',\n  'ROWS',\n  'SATISFIES',\n  'SAVEPOINT',\n  'SCHEMA',\n  'SCOPE',\n  'SELECT',\n  'SELF',\n  'SEMI',\n  'SET',\n  'SHOW',\n  'SOME',\n  'START',\n  'STATISTICS',\n  'STRING',\n  'SYSTEM',\n  'THEN',\n  'TIES',\n  'TO',\n  'TRAN',\n  'TRANSACTION',\n  'TRIGGER',\n  'TRUE',\n  'TRUNCATE',\n  'UNBOUNDED',\n  'UNDER',\n  'UNION',\n  'UNIQUE',\n  'UNKNOWN',\n  'UNNEST',\n  'UNSET',\n  'UPDATE',\n  'UPSERT',\n  'USE',\n  'USER',\n  'USING',\n  'VALIDATE',\n  'VALUE',\n  'VALUED',\n  'VALUES',\n  'VIA',\n  'VIEW',\n  'WHEN',\n  'WHERE',\n  'WHILE',\n  'WINDOW',\n  'WITH',\n  'WITHIN',\n  'WORK',\n  'XOR',\n];\n\nexport const dataTypes: string[] = [\n  // N1QL does not support any way of declaring types for columns.\n  // It does not support the CREATE TABLE statement nor the CAST() expression.\n  //\n  // It does have several keywords like ARRAY and OBJECT, which seem to refer to types,\n  // but they are used as operators. It also reserves several words like STRING and NUMBER,\n  // which it actually doesn't use.\n  //\n  // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/datatypes.html\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './n1ql.functions.js';\nimport { dataTypes, keywords } from './n1ql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE INTO',\n  'WHEN [NOT] MATCHED THEN',\n  'UPDATE SET',\n  'INSERT',\n  // other\n  'NEST',\n  'UNNEST',\n  'RETURNING',\n]);\n\nconst onelineClauses = expandPhrases([\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - set schema:\n  'SET SCHEMA',\n  // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html\n  'ADVISE',\n  'ALTER INDEX',\n  'BEGIN TRANSACTION',\n  'BUILD INDEX',\n  'COMMIT TRANSACTION',\n  'CREATE COLLECTION',\n  'CREATE FUNCTION',\n  'CREATE INDEX',\n  'CREATE PRIMARY INDEX',\n  'CREATE SCOPE',\n  'DROP COLLECTION',\n  'DROP FUNCTION',\n  'DROP INDEX',\n  'DROP PRIMARY INDEX',\n  'DROP SCOPE',\n  'EXECUTE',\n  'EXECUTE FUNCTION',\n  'EXPLAIN',\n  'GRANT',\n  'INFER',\n  'PREPARE',\n  'REVOKE',\n  'ROLLBACK TRANSACTION',\n  'SAVEPOINT',\n  'SET TRANSACTION',\n  'UPDATE STATISTICS',\n  'UPSERT',\n  // other\n  'LET',\n  'SET CURRENT SCHEMA',\n  'SHOW',\n  'USE [PRIMARY] KEYS',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases(['JOIN', '{LEFT | RIGHT} [OUTER] JOIN', 'INNER JOIN']);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE | GROUPS} BETWEEN']);\n\n// For reference: http://docs.couchbase.com.s3-website-us-west-1.amazonaws.com/server/6.0/n1ql/n1ql-language-reference/index.html\nexport const n1ql: DialectOptions = {\n  name: 'n1ql',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...onelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    // NOTE: single quotes are actually not supported in N1QL,\n    // but we support them anyway as all other SQL dialects do,\n    // which simplifies writing tests that are shared between all dialects.\n    stringTypes: ['\"\"-bs', \"''-bs\"],\n    identTypes: ['``'],\n    extraParens: ['[]', '{}'],\n    paramTypes: { positional: true, numbered: ['$'], named: ['$'] },\n    lineCommentTypes: ['#', '--'],\n    operators: ['%', '==', ':', '||'],\n  },\n  formatOptions: {\n    onelineClauses,\n  },\n};\n","export const keywords: string[] = [\n  // https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/reservewords.htm\n  // 'A',\n  'ADD',\n  'AGENT',\n  'AGGREGATE',\n  'ALL',\n  'ALTER',\n  'AND',\n  'ANY',\n  'ARROW',\n  'AS',\n  'ASC',\n  'AT',\n  'ATTRIBUTE',\n  'AUTHID',\n  'AVG',\n  'BEGIN',\n  'BETWEEN',\n  'BLOCK',\n  'BODY',\n  'BOTH',\n  'BOUND',\n  'BULK',\n  'BY',\n  'BYTE',\n  // 'C',\n  'CALL',\n  'CALLING',\n  'CASCADE',\n  'CASE',\n  'CHARSET',\n  'CHARSETFORM',\n  'CHARSETID',\n  'CHECK',\n  'CLOSE',\n  'CLUSTER',\n  'CLUSTERS',\n  'COLAUTH',\n  'COLLECT',\n  'COLUMNS',\n  'COMMENT',\n  'COMMIT',\n  'COMMITTED',\n  'COMPILED',\n  'COMPRESS',\n  'CONNECT',\n  'CONSTANT',\n  'CONSTRUCTOR',\n  'CONTEXT',\n  'CONVERT',\n  'COUNT',\n  'CRASH',\n  'CREATE',\n  'CURRENT',\n  'CURSOR',\n  'CUSTOMDATUM',\n  'DANGLING',\n  'DATA',\n  'DAY',\n  'DECLARE',\n  'DEFAULT',\n  'DEFINE',\n  'DELETE',\n  'DESC',\n  'DETERMINISTIC',\n  'DISTINCT',\n  'DROP',\n  'DURATION',\n  'ELEMENT',\n  'ELSE',\n  'ELSIF',\n  'EMPTY',\n  'END',\n  'ESCAPE',\n  'EXCEPT',\n  'EXCEPTION',\n  'EXCEPTIONS',\n  'EXCLUSIVE',\n  'EXECUTE',\n  'EXISTS',\n  'EXIT',\n  'EXTERNAL',\n  'FETCH',\n  'FINAL',\n  'FIXED',\n  'FOR',\n  'FORALL',\n  'FORCE',\n  'FORM',\n  'FROM',\n  'FUNCTION',\n  'GENERAL',\n  'GOTO',\n  'GRANT',\n  'GROUP',\n  'HASH',\n  'HAVING',\n  'HEAP',\n  'HIDDEN',\n  'HOUR',\n  'IDENTIFIED',\n  'IF',\n  'IMMEDIATE',\n  'IN',\n  'INCLUDING',\n  'INDEX',\n  'INDEXES',\n  'INDICATOR',\n  'INDICES',\n  'INFINITE',\n  'INSERT',\n  'INSTANTIABLE',\n  'INTERFACE',\n  'INTERSECT',\n  'INTERVAL',\n  'INTO',\n  'INVALIDATE',\n  'IS',\n  'ISOLATION',\n  'JAVA',\n  'LANGUAGE',\n  'LARGE',\n  'LEADING',\n  'LENGTH',\n  'LEVEL',\n  'LIBRARY',\n  'LIKE',\n  'LIKE2',\n  'LIKE4',\n  'LIKEC',\n  'LIMIT',\n  'LIMITED',\n  'LOCAL',\n  'LOCK',\n  'LOOP',\n  'MAP',\n  'MAX',\n  'MAXLEN',\n  'MEMBER',\n  'MERGE',\n  'MIN',\n  'MINUS',\n  'MINUTE',\n  'MOD',\n  'MODE',\n  'MODIFY',\n  'MONTH',\n  'MULTISET',\n  'NAME',\n  'NAN',\n  'NATIONAL',\n  'NATIVE',\n  'NEW',\n  'NOCOMPRESS',\n  'NOCOPY',\n  'NOT',\n  'NOWAIT',\n  'NULL',\n  'OBJECT',\n  'OCICOLL',\n  'OCIDATE',\n  'OCIDATETIME',\n  'OCIDURATION',\n  'OCIINTERVAL',\n  'OCILOBLOCATOR',\n  'OCINUMBER',\n  'OCIRAW',\n  'OCIREF',\n  'OCIREFCURSOR',\n  'OCIROWID',\n  'OCISTRING',\n  'OCITYPE',\n  'OF',\n  'ON',\n  'ONLY',\n  'OPAQUE',\n  'OPEN',\n  'OPERATOR',\n  'OPTION',\n  'OR',\n  'ORACLE',\n  'ORADATA',\n  'ORDER',\n  'OVERLAPS',\n  'ORGANIZATION',\n  'ORLANY',\n  'ORLVARY',\n  'OTHERS',\n  'OUT',\n  'OVERRIDING',\n  'PACKAGE',\n  'PARALLEL_ENABLE',\n  'PARAMETER',\n  'PARAMETERS',\n  'PARTITION',\n  'PASCAL',\n  'PIPE',\n  'PIPELINED',\n  'PRAGMA',\n  'PRIOR',\n  'PRIVATE',\n  'PROCEDURE',\n  'PUBLIC',\n  'RAISE',\n  'RANGE',\n  'READ',\n  'RECORD',\n  'REF',\n  'REFERENCE',\n  'REM',\n  'REMAINDER',\n  'RENAME',\n  'RESOURCE',\n  'RESULT',\n  'RETURN',\n  'RETURNING',\n  'REVERSE',\n  'REVOKE',\n  'ROLLBACK',\n  'ROW',\n  'SAMPLE',\n  'SAVE',\n  'SAVEPOINT',\n  'SB1',\n  'SB2',\n  'SB4',\n  'SECOND',\n  'SEGMENT',\n  'SELECT',\n  'SELF',\n  'SEPARATE',\n  'SEQUENCE',\n  'SERIALIZABLE',\n  'SET',\n  'SHARE',\n  'SHORT',\n  'SIZE',\n  'SIZE_T',\n  'SOME',\n  'SPARSE',\n  'SQL',\n  'SQLCODE',\n  'SQLDATA',\n  'SQLNAME',\n  'SQLSTATE',\n  'STANDARD',\n  'START',\n  'STATIC',\n  'STDDEV',\n  'STORED',\n  'STRING',\n  'STRUCT',\n  'STYLE',\n  'SUBMULTISET',\n  'SUBPARTITION',\n  'SUBSTITUTABLE',\n  'SUBTYPE',\n  'SUM',\n  'SYNONYM',\n  'TABAUTH',\n  'TABLE',\n  'TDO',\n  'THE',\n  'THEN',\n  'TIME',\n  'TIMEZONE_ABBR',\n  'TIMEZONE_HOUR',\n  'TIMEZONE_MINUTE',\n  'TIMEZONE_REGION',\n  'TO',\n  'TRAILING',\n  'TRANSAC',\n  'TRANSACTIONAL',\n  'TRUSTED',\n  'TYPE',\n  'UB1',\n  'UB2',\n  'UB4',\n  'UNDER',\n  'UNION',\n  'UNIQUE',\n  'UNSIGNED',\n  'UNTRUSTED',\n  'UPDATE',\n  'USE',\n  'USING',\n  'VALIST',\n  'VALUE',\n  'VALUES',\n  'VARIABLE',\n  'VARIANCE',\n  'VARRAY',\n  'VIEW',\n  'VIEWS',\n  'VOID',\n  'WHEN',\n  'WHERE',\n  'WHILE',\n  'WITH',\n  'WORK',\n  'WRAPPED',\n  'WRITE',\n  'YEAR',\n  'ZONE',\n];\n\nexport const dataTypes: string[] = [\n  // https://www.ibm.com/docs/en/db2/10.5?topic=plsql-data-types\n  'ARRAY',\n  'BFILE_BASE',\n  'BINARY',\n  'BLOB_BASE',\n  'CHAR VARYING',\n  'CHAR_BASE',\n  'CHAR',\n  'CHARACTER VARYING',\n  'CHARACTER',\n  'CLOB_BASE',\n  'DATE_BASE',\n  'DATE',\n  'DECIMAL',\n  'DOUBLE',\n  'FLOAT',\n  'INT',\n  'INTERVAL DAY',\n  'INTERVAL YEAR',\n  'LONG',\n  'NATIONAL CHAR VARYING',\n  'NATIONAL CHAR',\n  'NATIONAL CHARACTER VARYING',\n  'NATIONAL CHARACTER',\n  'NCHAR VARYING',\n  'NCHAR',\n  'NCHAR',\n  'NUMBER_BASE',\n  'NUMBER',\n  'NUMBERIC',\n  'NVARCHAR',\n  'PRECISION',\n  'RAW',\n  'TIMESTAMP',\n  'UROWID',\n  'VARCHAR',\n  'VARCHAR2',\n];\n","export const functions: string[] = [\n  // https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm\n  // numeric\n  'ABS',\n  'ACOS',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'BITAND',\n  'CEIL',\n  'COS',\n  'COSH',\n  'EXP',\n  'FLOOR',\n  'LN',\n  'LOG',\n  'MOD',\n  'NANVL',\n  'POWER',\n  'REMAINDER',\n  'ROUND',\n  'SIGN',\n  'SIN',\n  'SINH',\n  'SQRT',\n  'TAN',\n  'TANH',\n  'TRUNC',\n  'WIDTH_BUCKET',\n\n  // character\n  'CHR',\n  'CONCAT',\n  'INITCAP',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'NLS_INITCAP',\n  'NLS_LOWER',\n  'NLSSORT',\n  'NLS_UPPER',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'REPLACE',\n  'RPAD',\n  'RTRIM',\n  'SOUNDEX',\n  'SUBSTR',\n  'TRANSLATE',\n  'TREAT',\n  'TRIM',\n  'UPPER',\n\n  'NLS_CHARSET_DECL_LEN',\n  'NLS_CHARSET_ID',\n  'NLS_CHARSET_NAME',\n\n  'ASCII',\n  'INSTR',\n  'LENGTH',\n  'REGEXP_INSTR',\n\n  // datetime\n  'ADD_MONTHS',\n  'CURRENT_DATE',\n  'CURRENT_TIMESTAMP',\n  'DBTIMEZONE',\n  'EXTRACT',\n  'FROM_TZ',\n  'LAST_DAY',\n  'LOCALTIMESTAMP',\n  'MONTHS_BETWEEN',\n  'NEW_TIME',\n  'NEXT_DAY',\n  'NUMTODSINTERVAL',\n  'NUMTOYMINTERVAL',\n  'ROUND',\n  'SESSIONTIMEZONE',\n  'SYS_EXTRACT_UTC',\n  'SYSDATE',\n  'SYSTIMESTAMP',\n  'TO_CHAR',\n  'TO_TIMESTAMP',\n  'TO_TIMESTAMP_TZ',\n  'TO_DSINTERVAL',\n  'TO_YMINTERVAL',\n  'TRUNC',\n  'TZ_OFFSET',\n\n  // comparison\n  'GREATEST',\n  'LEAST',\n\n  // conversion\n  'ASCIISTR',\n  'BIN_TO_NUM',\n  'CAST',\n  'CHARTOROWID',\n  'COMPOSE',\n  'CONVERT',\n  'DECOMPOSE',\n  'HEXTORAW',\n  'NUMTODSINTERVAL',\n  'NUMTOYMINTERVAL',\n  'RAWTOHEX',\n  'RAWTONHEX',\n  'ROWIDTOCHAR',\n  'ROWIDTONCHAR',\n  'SCN_TO_TIMESTAMP',\n  'TIMESTAMP_TO_SCN',\n  'TO_BINARY_DOUBLE',\n  'TO_BINARY_FLOAT',\n  'TO_CHAR',\n  'TO_CLOB',\n  'TO_DATE',\n  'TO_DSINTERVAL',\n  'TO_LOB',\n  'TO_MULTI_BYTE',\n  'TO_NCHAR',\n  'TO_NCLOB',\n  'TO_NUMBER',\n  'TO_DSINTERVAL',\n  'TO_SINGLE_BYTE',\n  'TO_TIMESTAMP',\n  'TO_TIMESTAMP_TZ',\n  'TO_YMINTERVAL',\n  'TO_YMINTERVAL',\n  'TRANSLATE',\n  'UNISTR',\n\n  // largeObject\n  'BFILENAME',\n  'EMPTY_BLOB,',\n  'EMPTY_CLOB',\n\n  // collection\n  'CARDINALITY',\n  'COLLECT',\n  'POWERMULTISET',\n  'POWERMULTISET_BY_CARDINALITY',\n  'SET',\n\n  // hierarchical\n  'SYS_CONNECT_BY_PATH',\n\n  // dataMining\n  'CLUSTER_ID',\n  'CLUSTER_PROBABILITY',\n  'CLUSTER_SET',\n  'FEATURE_ID',\n  'FEATURE_SET',\n  'FEATURE_VALUE',\n  'PREDICTION',\n  'PREDICTION_COST',\n  'PREDICTION_DETAILS',\n  'PREDICTION_PROBABILITY',\n  'PREDICTION_SET',\n\n  // xml\n  'APPENDCHILDXML',\n  'DELETEXML',\n  'DEPTH',\n  'EXTRACT',\n  'EXISTSNODE',\n  'EXTRACTVALUE',\n  'INSERTCHILDXML',\n  'INSERTXMLBEFORE',\n  'PATH',\n  'SYS_DBURIGEN',\n  'SYS_XMLAGG',\n  'SYS_XMLGEN',\n  'UPDATEXML',\n  'XMLAGG',\n  'XMLCDATA',\n  'XMLCOLATTVAL',\n  'XMLCOMMENT',\n  'XMLCONCAT',\n  'XMLFOREST',\n  'XMLPARSE',\n  'XMLPI',\n  'XMLQUERY',\n  'XMLROOT',\n  'XMLSEQUENCE',\n  'XMLSERIALIZE',\n  'XMLTABLE',\n  'XMLTRANSFORM',\n\n  // encoding\n  'DECODE',\n  'DUMP',\n  'ORA_HASH',\n  'VSIZE',\n\n  // nullRelated\n  'COALESCE',\n  'LNNVL',\n  'NULLIF',\n  'NVL',\n  'NVL2',\n\n  // env\n  'SYS_CONTEXT',\n  'SYS_GUID',\n  'SYS_TYPEID',\n  'UID',\n  'USER',\n  'USERENV',\n\n  // aggregate\n  'AVG',\n  'COLLECT',\n  'CORR',\n  'CORR_S',\n  'CORR_K',\n  'COUNT',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'CUME_DIST',\n  'DENSE_RANK',\n  'FIRST',\n  'GROUP_ID',\n  'GROUPING',\n  'GROUPING_ID',\n  'LAST',\n  'MAX',\n  'MEDIAN',\n  'MIN',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'PERCENT_RANK',\n  'RANK',\n  'REGR_SLOPE',\n  'REGR_INTERCEPT',\n  'REGR_COUNT',\n  'REGR_R2',\n  'REGR_AVGX',\n  'REGR_AVGY',\n  'REGR_SXX',\n  'REGR_SYY',\n  'REGR_SXY',\n  'STATS_BINOMIAL_TEST',\n  'STATS_CROSSTAB',\n  'STATS_F_TEST',\n  'STATS_KS_TEST',\n  'STATS_MODE',\n  'STATS_MW_TEST',\n  'STATS_ONE_WAY_ANOVA',\n  'STATS_T_TEST_ONE',\n  'STATS_T_TEST_PAIRED',\n  'STATS_T_TEST_INDEP',\n  'STATS_T_TEST_INDEPU',\n  'STATS_WSR_TEST',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'SUM',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VARIANCE',\n\n  // Windowing functions (minus the ones already listed in aggregates)\n  // window\n  'FIRST_VALUE',\n  'LAG',\n  'LAST_VALUE',\n  'LEAD',\n  'NTILE',\n  'RATIO_TO_REPORT',\n  'ROW_NUMBER',\n\n  // objectReference\n  'DEREF',\n  'MAKE_REF',\n  'REF',\n  'REFTOHEX',\n  'VALUE',\n\n  // model\n  'CV',\n  'ITERATION_NUMBER',\n  'PRESENTNNV',\n  'PRESENTV',\n  'PREVIOUS',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isReserved, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { dataTypes, keywords } from './plsql.keywords.js';\nimport { functions } from './plsql.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | UNIQUE]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER [SIBLINGS] BY',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  'FOR UPDATE [OF]',\n  // Data manipulation\n  // - insert:\n  'INSERT [INTO | ALL INTO]',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE [INTO]',\n  'WHEN [NOT] MATCHED [THEN]',\n  'UPDATE SET',\n  // other\n  'RETURNING',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [GLOBAL TEMPORARY | PRIVATE TEMPORARY | SHARDED | DUPLICATED | IMMUTABLE BLOCKCHAIN | BLOCKCHAIN | IMMUTABLE] TABLE',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE] [NO FORCE | FORCE] [EDITIONING | EDITIONABLE | EDITIONABLE EDITIONING | NONEDITIONABLE] VIEW',\n  'CREATE MATERIALIZED VIEW',\n  // - update:\n  'UPDATE [ONLY]',\n  // - delete:\n  'DELETE FROM [ONLY]',\n  // - drop table:\n  'DROP TABLE',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD',\n  'DROP {COLUMN | UNUSED COLUMNS | COLUMNS CONTINUE}',\n  'MODIFY',\n  'RENAME TO',\n  'RENAME COLUMN',\n  // - truncate:\n  'TRUNCATE TABLE',\n  // other\n  'SET SCHEMA',\n  'BEGIN',\n  'CONNECT BY',\n  'DECLARE',\n  'EXCEPT',\n  'EXCEPTION',\n  'LOOP',\n  'START WITH',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n  // non-standard joins\n  '{CROSS | OUTER} APPLY',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL]',\n  'ON COMMIT',\n  '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const plsql: DialectOptions = {\n  name: 'plsql',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    stringTypes: [\n      { quote: \"''-qq\", prefixes: ['N'] },\n      { quote: \"q''\", prefixes: ['N'] },\n    ],\n    // PL/SQL doesn't actually support escaping of quotes in identifiers,\n    // but for the sake of simpler testing we'll support this anyway\n    // as all other SQL dialects with \"identifiers\" do.\n    identTypes: [`\"\"-qq`],\n    identChars: { rest: '$#' },\n    variableTypes: [{ regex: '&{1,2}[A-Za-z][A-Za-z0-9_$#]*' }],\n    paramTypes: { numbered: [':'], named: [':'] },\n    paramChars: {}, // Empty object used on purpose to not allow $ and # chars as specified in identChars\n    operators: [\n      '**',\n      ':=',\n      '%',\n      '~=',\n      '^=',\n      // '..', // Conflicts with float followed by dot (so \"2..3\" gets parsed as [\"2.\", \".\", \"3\"])\n      '>>',\n      '<<',\n      '=>',\n      '@',\n      '||',\n    ],\n    postProcess,\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['@'],\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n\nfunction postProcess(tokens: Token[]) {\n  let previousReservedToken: Token = EOF_TOKEN;\n\n  return tokens.map(token => {\n    // BY [SET]\n    if (isToken.SET(token) && isToken.BY(previousReservedToken)) {\n      return { ...token, type: TokenType.RESERVED_KEYWORD };\n    }\n\n    if (isReserved(token.type)) {\n      previousReservedToken = token;\n    }\n\n    return token;\n  });\n}\n","export const functions: string[] = [\n  // https://www.postgresql.org/docs/14/functions.html\n  //\n  // https://www.postgresql.org/docs/14/functions-math.html\n  'ABS',\n  'ACOS',\n  'ACOSD',\n  'ACOSH',\n  'ASIN',\n  'ASIND',\n  'ASINH',\n  'ATAN',\n  'ATAN2',\n  'ATAN2D',\n  'ATAND',\n  'ATANH',\n  'CBRT',\n  'CEIL',\n  'CEILING',\n  'COS',\n  'COSD',\n  'COSH',\n  'COT',\n  'COTD',\n  'DEGREES',\n  'DIV',\n  'EXP',\n  'FACTORIAL',\n  'FLOOR',\n  'GCD',\n  'LCM',\n  'LN',\n  'LOG',\n  'LOG10',\n  'MIN_SCALE',\n  'MOD',\n  'PI',\n  'POWER',\n  'RADIANS',\n  'RANDOM',\n  'ROUND',\n  'SCALE',\n  'SETSEED',\n  'SIGN',\n  'SIN',\n  'SIND',\n  'SINH',\n  'SQRT',\n  'TAN',\n  'TAND',\n  'TANH',\n  'TRIM_SCALE',\n  'TRUNC',\n  'WIDTH_BUCKET',\n\n  // https://www.postgresql.org/docs/14/functions-string.html\n  'ABS',\n  'ASCII',\n  'BIT_LENGTH',\n  'BTRIM',\n  'CHARACTER_LENGTH',\n  'CHAR_LENGTH',\n  'CHR',\n  'CONCAT',\n  'CONCAT_WS',\n  'FORMAT',\n  'INITCAP',\n  'LEFT',\n  'LENGTH',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'MD5',\n  'NORMALIZE',\n  'OCTET_LENGTH',\n  'OVERLAY',\n  'PARSE_IDENT',\n  'PG_CLIENT_ENCODING',\n  'POSITION',\n  'QUOTE_IDENT',\n  'QUOTE_LITERAL',\n  'QUOTE_NULLABLE',\n  'REGEXP_MATCH',\n  'REGEXP_MATCHES',\n  'REGEXP_REPLACE',\n  'REGEXP_SPLIT_TO_ARRAY',\n  'REGEXP_SPLIT_TO_TABLE',\n  'REPEAT',\n  'REPLACE',\n  'REVERSE',\n  'RIGHT',\n  'RPAD',\n  'RTRIM',\n  'SPLIT_PART',\n  'SPRINTF',\n  'STARTS_WITH',\n  'STRING_AGG',\n  'STRING_TO_ARRAY',\n  'STRING_TO_TABLE',\n  'STRPOS',\n  'SUBSTR',\n  'SUBSTRING',\n  'TO_ASCII',\n  'TO_HEX',\n  'TRANSLATE',\n  'TRIM',\n  'UNISTR',\n  'UPPER',\n\n  // https://www.postgresql.org/docs/14/functions-binarystring.html\n  'BIT_COUNT',\n  'BIT_LENGTH',\n  'BTRIM',\n  'CONVERT',\n  'CONVERT_FROM',\n  'CONVERT_TO',\n  'DECODE',\n  'ENCODE',\n  'GET_BIT',\n  'GET_BYTE',\n  'LENGTH',\n  'LTRIM',\n  'MD5',\n  'OCTET_LENGTH',\n  'OVERLAY',\n  'POSITION',\n  'RTRIM',\n  'SET_BIT',\n  'SET_BYTE',\n  'SHA224',\n  'SHA256',\n  'SHA384',\n  'SHA512',\n  'STRING_AGG',\n  'SUBSTR',\n  'SUBSTRING',\n  'TRIM',\n\n  // https://www.postgresql.org/docs/14/functions-bitstring.html\n  'BIT_COUNT',\n  'BIT_LENGTH',\n  'GET_BIT',\n  'LENGTH',\n  'OCTET_LENGTH',\n  'OVERLAY',\n  'POSITION',\n  'SET_BIT',\n  'SUBSTRING',\n\n  // https://www.postgresql.org/docs/14/functions-matching.html\n  'REGEXP_MATCH',\n  'REGEXP_MATCHES',\n  'REGEXP_REPLACE',\n  'REGEXP_SPLIT_TO_ARRAY',\n  'REGEXP_SPLIT_TO_TABLE',\n\n  // https://www.postgresql.org/docs/14/functions-formatting.html\n  'TO_CHAR',\n  'TO_DATE',\n  'TO_NUMBER',\n  'TO_TIMESTAMP',\n\n  // https://www.postgresql.org/docs/14/functions-datetime.html\n  // 'AGE',\n  'CLOCK_TIMESTAMP',\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'DATE_BIN',\n  'DATE_PART',\n  'DATE_TRUNC',\n  'EXTRACT',\n  'ISFINITE',\n  'JUSTIFY_DAYS',\n  'JUSTIFY_HOURS',\n  'JUSTIFY_INTERVAL',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'MAKE_DATE',\n  'MAKE_INTERVAL',\n  'MAKE_TIME',\n  'MAKE_TIMESTAMP',\n  'MAKE_TIMESTAMPTZ',\n  'NOW',\n  'PG_SLEEP',\n  'PG_SLEEP_FOR',\n  'PG_SLEEP_UNTIL',\n  'STATEMENT_TIMESTAMP',\n  'TIMEOFDAY',\n  'TO_TIMESTAMP',\n  'TRANSACTION_TIMESTAMP',\n\n  // https://www.postgresql.org/docs/14/functions-enum.html\n  'ENUM_FIRST',\n  'ENUM_LAST',\n  'ENUM_RANGE',\n\n  // https://www.postgresql.org/docs/14/functions-geometry.html\n  'AREA',\n  'BOUND_BOX',\n  'BOX',\n  'CENTER',\n  'CIRCLE',\n  'DIAGONAL',\n  'DIAMETER',\n  'HEIGHT',\n  'ISCLOSED',\n  'ISOPEN',\n  'LENGTH',\n  'LINE',\n  'LSEG',\n  'NPOINTS',\n  'PATH',\n  'PCLOSE',\n  'POINT',\n  'POLYGON',\n  'POPEN',\n  'RADIUS',\n  'SLOPE',\n  'WIDTH',\n\n  // https://www.postgresql.org/docs/14/functions-net.html\n  'ABBREV',\n  'BROADCAST',\n  'FAMILY',\n  'HOST',\n  'HOSTMASK',\n  'INET_MERGE',\n  'INET_SAME_FAMILY',\n  'MACADDR8_SET7BIT',\n  'MASKLEN',\n  'NETMASK',\n  'NETWORK',\n  'SET_MASKLEN',\n  // 'TEXT', // excluded because it's also a data type name\n  'TRUNC',\n\n  // https://www.postgresql.org/docs/14/functions-textsearch.html\n  'ARRAY_TO_TSVECTOR',\n  'GET_CURRENT_TS_CONFIG',\n  'JSONB_TO_TSVECTOR',\n  'JSON_TO_TSVECTOR',\n  'LENGTH',\n  'NUMNODE',\n  'PHRASETO_TSQUERY',\n  'PLAINTO_TSQUERY',\n  'QUERYTREE',\n  'SETWEIGHT',\n  'STRIP',\n  'TO_TSQUERY',\n  'TO_TSVECTOR',\n  'TSQUERY_PHRASE',\n  'TSVECTOR_TO_ARRAY',\n  'TS_DEBUG',\n  'TS_DELETE',\n  'TS_FILTER',\n  'TS_HEADLINE',\n  'TS_LEXIZE',\n  'TS_PARSE',\n  'TS_RANK',\n  'TS_RANK_CD',\n  'TS_REWRITE',\n  'TS_STAT',\n  'TS_TOKEN_TYPE',\n  'WEBSEARCH_TO_TSQUERY',\n\n  // https://www.postgresql.org/docs/14/functions-uuid.html\n  'UUID',\n\n  // https://www.postgresql.org/docs/14/functions-xml.html\n  'CURSOR_TO_XML',\n  'CURSOR_TO_XMLSCHEMA',\n  'DATABASE_TO_XML',\n  'DATABASE_TO_XMLSCHEMA',\n  'DATABASE_TO_XML_AND_XMLSCHEMA',\n  'NEXTVAL',\n  'QUERY_TO_XML',\n  'QUERY_TO_XMLSCHEMA',\n  'QUERY_TO_XML_AND_XMLSCHEMA',\n  'SCHEMA_TO_XML',\n  'SCHEMA_TO_XMLSCHEMA',\n  'SCHEMA_TO_XML_AND_XMLSCHEMA',\n  'STRING',\n  'TABLE_TO_XML',\n  'TABLE_TO_XMLSCHEMA',\n  'TABLE_TO_XML_AND_XMLSCHEMA',\n  'XMLAGG',\n  'XMLCOMMENT',\n  'XMLCONCAT',\n  'XMLELEMENT',\n  'XMLEXISTS',\n  'XMLFOREST',\n  'XMLPARSE',\n  'XMLPI',\n  'XMLROOT',\n  'XMLSERIALIZE',\n  'XMLTABLE',\n  'XML_IS_WELL_FORMED',\n  'XML_IS_WELL_FORMED_CONTENT',\n  'XML_IS_WELL_FORMED_DOCUMENT',\n  'XPATH',\n  'XPATH_EXISTS',\n\n  // https://www.postgresql.org/docs/14/functions-json.html\n  'ARRAY_TO_JSON',\n  'JSONB_AGG',\n  'JSONB_ARRAY_ELEMENTS',\n  'JSONB_ARRAY_ELEMENTS_TEXT',\n  'JSONB_ARRAY_LENGTH',\n  'JSONB_BUILD_ARRAY',\n  'JSONB_BUILD_OBJECT',\n  'JSONB_EACH',\n  'JSONB_EACH_TEXT',\n  'JSONB_EXTRACT_PATH',\n  'JSONB_EXTRACT_PATH_TEXT',\n  'JSONB_INSERT',\n  'JSONB_OBJECT',\n  'JSONB_OBJECT_AGG',\n  'JSONB_OBJECT_KEYS',\n  'JSONB_PATH_EXISTS',\n  'JSONB_PATH_EXISTS_TZ',\n  'JSONB_PATH_MATCH',\n  'JSONB_PATH_MATCH_TZ',\n  'JSONB_PATH_QUERY',\n  'JSONB_PATH_QUERY_ARRAY',\n  'JSONB_PATH_QUERY_ARRAY_TZ',\n  'JSONB_PATH_QUERY_FIRST',\n  'JSONB_PATH_QUERY_FIRST_TZ',\n  'JSONB_PATH_QUERY_TZ',\n  'JSONB_POPULATE_RECORD',\n  'JSONB_POPULATE_RECORDSET',\n  'JSONB_PRETTY',\n  'JSONB_SET',\n  'JSONB_SET_LAX',\n  'JSONB_STRIP_NULLS',\n  'JSONB_TO_RECORD',\n  'JSONB_TO_RECORDSET',\n  'JSONB_TYPEOF',\n  'JSON_AGG',\n  'JSON_ARRAY_ELEMENTS',\n  'JSON_ARRAY_ELEMENTS_TEXT',\n  'JSON_ARRAY_LENGTH',\n  'JSON_BUILD_ARRAY',\n  'JSON_BUILD_OBJECT',\n  'JSON_EACH',\n  'JSON_EACH_TEXT',\n  'JSON_EXTRACT_PATH',\n  'JSON_EXTRACT_PATH_TEXT',\n  'JSON_OBJECT',\n  'JSON_OBJECT_AGG',\n  'JSON_OBJECT_KEYS',\n  'JSON_POPULATE_RECORD',\n  'JSON_POPULATE_RECORDSET',\n  'JSON_STRIP_NULLS',\n  'JSON_TO_RECORD',\n  'JSON_TO_RECORDSET',\n  'JSON_TYPEOF',\n  'ROW_TO_JSON',\n  'TO_JSON',\n  'TO_JSONB',\n  'TO_TIMESTAMP',\n\n  // https://www.postgresql.org/docs/14/functions-sequence.html\n  'CURRVAL',\n  'LASTVAL',\n  'NEXTVAL',\n  'SETVAL',\n\n  // https://www.postgresql.org/docs/14/functions-conditional.html\n  // 'CASE',\n  'COALESCE',\n  'GREATEST',\n  'LEAST',\n  'NULLIF',\n\n  // https://www.postgresql.org/docs/14/functions-array.html\n  'ARRAY_AGG',\n  'ARRAY_APPEND',\n  'ARRAY_CAT',\n  'ARRAY_DIMS',\n  'ARRAY_FILL',\n  'ARRAY_LENGTH',\n  'ARRAY_LOWER',\n  'ARRAY_NDIMS',\n  'ARRAY_POSITION',\n  'ARRAY_POSITIONS',\n  'ARRAY_PREPEND',\n  'ARRAY_REMOVE',\n  'ARRAY_REPLACE',\n  'ARRAY_TO_STRING',\n  'ARRAY_UPPER',\n  'CARDINALITY',\n  'STRING_TO_ARRAY',\n  'TRIM_ARRAY',\n  'UNNEST',\n\n  // https://www.postgresql.org/docs/14/functions-range.html\n  'ISEMPTY',\n  'LOWER',\n  'LOWER_INC',\n  'LOWER_INF',\n  'MULTIRANGE',\n  'RANGE_MERGE',\n  'UPPER',\n  'UPPER_INC',\n  'UPPER_INF',\n\n  // https://www.postgresql.org/docs/14/functions-aggregate.html\n  // 'ANY',\n  'ARRAY_AGG',\n  'AVG',\n  'BIT_AND',\n  'BIT_OR',\n  'BIT_XOR',\n  'BOOL_AND',\n  'BOOL_OR',\n  'COALESCE',\n  'CORR',\n  'COUNT',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'CUME_DIST',\n  'DENSE_RANK',\n  'EVERY',\n  'GROUPING',\n  'JSONB_AGG',\n  'JSONB_OBJECT_AGG',\n  'JSON_AGG',\n  'JSON_OBJECT_AGG',\n  'MAX',\n  'MIN',\n  'MODE',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'PERCENT_RANK',\n  'RANGE_AGG',\n  'RANGE_INTERSECT_AGG',\n  'RANK',\n  'REGR_AVGX',\n  'REGR_AVGY',\n  'REGR_COUNT',\n  'REGR_INTERCEPT',\n  'REGR_R2',\n  'REGR_SLOPE',\n  'REGR_SXX',\n  'REGR_SXY',\n  'REGR_SYY',\n  // 'SOME',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STRING_AGG',\n  'SUM',\n  'TO_JSON',\n  'TO_JSONB',\n  'VARIANCE',\n  'VAR_POP',\n  'VAR_SAMP',\n  'XMLAGG',\n\n  // https://www.postgresql.org/docs/14/functions-window.html\n  'CUME_DIST',\n  'DENSE_RANK',\n  'FIRST_VALUE',\n  'LAG',\n  'LAST_VALUE',\n  'LEAD',\n  'NTH_VALUE',\n  'NTILE',\n  'PERCENT_RANK',\n  'RANK',\n  'ROW_NUMBER',\n\n  // https://www.postgresql.org/docs/14/functions-srf.html\n  'GENERATE_SERIES',\n  'GENERATE_SUBSCRIPTS',\n\n  // https://www.postgresql.org/docs/14/functions-info.html\n  'ACLDEFAULT',\n  'ACLEXPLODE',\n  'COL_DESCRIPTION',\n  'CURRENT_CATALOG',\n  'CURRENT_DATABASE',\n  'CURRENT_QUERY',\n  'CURRENT_ROLE',\n  'CURRENT_SCHEMA',\n  'CURRENT_SCHEMAS',\n  'CURRENT_USER',\n  'FORMAT_TYPE',\n  'HAS_ANY_COLUMN_PRIVILEGE',\n  'HAS_COLUMN_PRIVILEGE',\n  'HAS_DATABASE_PRIVILEGE',\n  'HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE',\n  'HAS_FUNCTION_PRIVILEGE',\n  'HAS_LANGUAGE_PRIVILEGE',\n  'HAS_SCHEMA_PRIVILEGE',\n  'HAS_SEQUENCE_PRIVILEGE',\n  'HAS_SERVER_PRIVILEGE',\n  'HAS_TABLESPACE_PRIVILEGE',\n  'HAS_TABLE_PRIVILEGE',\n  'HAS_TYPE_PRIVILEGE',\n  'INET_CLIENT_ADDR',\n  'INET_CLIENT_PORT',\n  'INET_SERVER_ADDR',\n  'INET_SERVER_PORT',\n  'MAKEACLITEM',\n  'OBJ_DESCRIPTION',\n  'PG_BACKEND_PID',\n  'PG_BLOCKING_PIDS',\n  'PG_COLLATION_IS_VISIBLE',\n  'PG_CONF_LOAD_TIME',\n  'PG_CONTROL_CHECKPOINT',\n  'PG_CONTROL_INIT',\n  'PG_CONTROL_SYSTEM',\n  'PG_CONVERSION_IS_VISIBLE',\n  'PG_CURRENT_LOGFILE',\n  'PG_CURRENT_SNAPSHOT',\n  'PG_CURRENT_XACT_ID',\n  'PG_CURRENT_XACT_ID_IF_ASSIGNED',\n  'PG_DESCRIBE_OBJECT',\n  'PG_FUNCTION_IS_VISIBLE',\n  'PG_GET_CATALOG_FOREIGN_KEYS',\n  'PG_GET_CONSTRAINTDEF',\n  'PG_GET_EXPR',\n  'PG_GET_FUNCTIONDEF',\n  'PG_GET_FUNCTION_ARGUMENTS',\n  'PG_GET_FUNCTION_IDENTITY_ARGUMENTS',\n  'PG_GET_FUNCTION_RESULT',\n  'PG_GET_INDEXDEF',\n  'PG_GET_KEYWORDS',\n  'PG_GET_OBJECT_ADDRESS',\n  'PG_GET_OWNED_SEQUENCE',\n  'PG_GET_RULEDEF',\n  'PG_GET_SERIAL_SEQUENCE',\n  'PG_GET_STATISTICSOBJDEF',\n  'PG_GET_TRIGGERDEF',\n  'PG_GET_USERBYID',\n  'PG_GET_VIEWDEF',\n  'PG_HAS_ROLE',\n  'PG_IDENTIFY_OBJECT',\n  'PG_IDENTIFY_OBJECT_AS_ADDRESS',\n  'PG_INDEXAM_HAS_PROPERTY',\n  'PG_INDEX_COLUMN_HAS_PROPERTY',\n  'PG_INDEX_HAS_PROPERTY',\n  'PG_IS_OTHER_TEMP_SCHEMA',\n  'PG_JIT_AVAILABLE',\n  'PG_LAST_COMMITTED_XACT',\n  'PG_LISTENING_CHANNELS',\n  'PG_MY_TEMP_SCHEMA',\n  'PG_NOTIFICATION_QUEUE_USAGE',\n  'PG_OPCLASS_IS_VISIBLE',\n  'PG_OPERATOR_IS_VISIBLE',\n  'PG_OPFAMILY_IS_VISIBLE',\n  'PG_OPTIONS_TO_TABLE',\n  'PG_POSTMASTER_START_TIME',\n  'PG_SAFE_SNAPSHOT_BLOCKING_PIDS',\n  'PG_SNAPSHOT_XIP',\n  'PG_SNAPSHOT_XMAX',\n  'PG_SNAPSHOT_XMIN',\n  'PG_STATISTICS_OBJ_IS_VISIBLE',\n  'PG_TABLESPACE_DATABASES',\n  'PG_TABLESPACE_LOCATION',\n  'PG_TABLE_IS_VISIBLE',\n  'PG_TRIGGER_DEPTH',\n  'PG_TS_CONFIG_IS_VISIBLE',\n  'PG_TS_DICT_IS_VISIBLE',\n  'PG_TS_PARSER_IS_VISIBLE',\n  'PG_TS_TEMPLATE_IS_VISIBLE',\n  'PG_TYPEOF',\n  'PG_TYPE_IS_VISIBLE',\n  'PG_VISIBLE_IN_SNAPSHOT',\n  'PG_XACT_COMMIT_TIMESTAMP',\n  'PG_XACT_COMMIT_TIMESTAMP_ORIGIN',\n  'PG_XACT_STATUS',\n  'PQSERVERVERSION',\n  'ROW_SECURITY_ACTIVE',\n  'SESSION_USER',\n  'SHOBJ_DESCRIPTION',\n  'TO_REGCLASS',\n  'TO_REGCOLLATION',\n  'TO_REGNAMESPACE',\n  'TO_REGOPER',\n  'TO_REGOPERATOR',\n  'TO_REGPROC',\n  'TO_REGPROCEDURE',\n  'TO_REGROLE',\n  'TO_REGTYPE',\n  'TXID_CURRENT',\n  'TXID_CURRENT_IF_ASSIGNED',\n  'TXID_CURRENT_SNAPSHOT',\n  'TXID_SNAPSHOT_XIP',\n  'TXID_SNAPSHOT_XMAX',\n  'TXID_SNAPSHOT_XMIN',\n  'TXID_STATUS',\n  'TXID_VISIBLE_IN_SNAPSHOT',\n  'USER',\n  'VERSION',\n\n  // https://www.postgresql.org/docs/14/functions-admin.html\n  'BRIN_DESUMMARIZE_RANGE',\n  'BRIN_SUMMARIZE_NEW_VALUES',\n  'BRIN_SUMMARIZE_RANGE',\n  'CONVERT_FROM',\n  'CURRENT_SETTING',\n  'GIN_CLEAN_PENDING_LIST',\n  'PG_ADVISORY_LOCK',\n  'PG_ADVISORY_LOCK_SHARED',\n  'PG_ADVISORY_UNLOCK',\n  'PG_ADVISORY_UNLOCK_ALL',\n  'PG_ADVISORY_UNLOCK_SHARED',\n  'PG_ADVISORY_XACT_LOCK',\n  'PG_ADVISORY_XACT_LOCK_SHARED',\n  'PG_BACKUP_START_TIME',\n  'PG_CANCEL_BACKEND',\n  'PG_COLLATION_ACTUAL_VERSION',\n  'PG_COLUMN_COMPRESSION',\n  'PG_COLUMN_SIZE',\n  'PG_COPY_LOGICAL_REPLICATION_SLOT',\n  'PG_COPY_PHYSICAL_REPLICATION_SLOT',\n  'PG_CREATE_LOGICAL_REPLICATION_SLOT',\n  'PG_CREATE_PHYSICAL_REPLICATION_SLOT',\n  'PG_CREATE_RESTORE_POINT',\n  'PG_CURRENT_WAL_FLUSH_LSN',\n  'PG_CURRENT_WAL_INSERT_LSN',\n  'PG_CURRENT_WAL_LSN',\n  'PG_DATABASE_SIZE',\n  'PG_DROP_REPLICATION_SLOT',\n  'PG_EXPORT_SNAPSHOT',\n  'PG_FILENODE_RELATION',\n  'PG_GET_WAL_REPLAY_PAUSE_STATE',\n  'PG_IMPORT_SYSTEM_COLLATIONS',\n  'PG_INDEXES_SIZE',\n  'PG_IS_IN_BACKUP',\n  'PG_IS_IN_RECOVERY',\n  'PG_IS_WAL_REPLAY_PAUSED',\n  'PG_LAST_WAL_RECEIVE_LSN',\n  'PG_LAST_WAL_REPLAY_LSN',\n  'PG_LAST_XACT_REPLAY_TIMESTAMP',\n  'PG_LOGICAL_EMIT_MESSAGE',\n  'PG_LOGICAL_SLOT_GET_BINARY_CHANGES',\n  'PG_LOGICAL_SLOT_GET_CHANGES',\n  'PG_LOGICAL_SLOT_PEEK_BINARY_CHANGES',\n  'PG_LOGICAL_SLOT_PEEK_CHANGES',\n  'PG_LOG_BACKEND_MEMORY_CONTEXTS',\n  'PG_LS_ARCHIVE_STATUSDIR',\n  'PG_LS_DIR',\n  'PG_LS_LOGDIR',\n  'PG_LS_TMPDIR',\n  'PG_LS_WALDIR',\n  'PG_PARTITION_ANCESTORS',\n  'PG_PARTITION_ROOT',\n  'PG_PARTITION_TREE',\n  'PG_PROMOTE',\n  'PG_READ_BINARY_FILE',\n  'PG_READ_FILE',\n  'PG_RELATION_FILENODE',\n  'PG_RELATION_FILEPATH',\n  'PG_RELATION_SIZE',\n  'PG_RELOAD_CONF',\n  'PG_REPLICATION_ORIGIN_ADVANCE',\n  'PG_REPLICATION_ORIGIN_CREATE',\n  'PG_REPLICATION_ORIGIN_DROP',\n  'PG_REPLICATION_ORIGIN_OID',\n  'PG_REPLICATION_ORIGIN_PROGRESS',\n  'PG_REPLICATION_ORIGIN_SESSION_IS_SETUP',\n  'PG_REPLICATION_ORIGIN_SESSION_PROGRESS',\n  'PG_REPLICATION_ORIGIN_SESSION_RESET',\n  'PG_REPLICATION_ORIGIN_SESSION_SETUP',\n  'PG_REPLICATION_ORIGIN_XACT_RESET',\n  'PG_REPLICATION_ORIGIN_XACT_SETUP',\n  'PG_REPLICATION_SLOT_ADVANCE',\n  'PG_ROTATE_LOGFILE',\n  'PG_SIZE_BYTES',\n  'PG_SIZE_PRETTY',\n  'PG_START_BACKUP',\n  'PG_STAT_FILE',\n  'PG_STOP_BACKUP',\n  'PG_SWITCH_WAL',\n  'PG_TABLESPACE_SIZE',\n  'PG_TABLE_SIZE',\n  'PG_TERMINATE_BACKEND',\n  'PG_TOTAL_RELATION_SIZE',\n  'PG_TRY_ADVISORY_LOCK',\n  'PG_TRY_ADVISORY_LOCK_SHARED',\n  'PG_TRY_ADVISORY_XACT_LOCK',\n  'PG_TRY_ADVISORY_XACT_LOCK_SHARED',\n  'PG_WALFILE_NAME',\n  'PG_WALFILE_NAME_OFFSET',\n  'PG_WAL_LSN_DIFF',\n  'PG_WAL_REPLAY_PAUSE',\n  'PG_WAL_REPLAY_RESUME',\n  'SET_CONFIG',\n\n  // https://www.postgresql.org/docs/14/functions-trigger.html\n  'SUPPRESS_REDUNDANT_UPDATES_TRIGGER',\n  'TSVECTOR_UPDATE_TRIGGER',\n  'TSVECTOR_UPDATE_TRIGGER_COLUMN',\n\n  // https://www.postgresql.org/docs/14/functions-event-triggers.html\n  'PG_EVENT_TRIGGER_DDL_COMMANDS',\n  'PG_EVENT_TRIGGER_DROPPED_OBJECTS',\n  'PG_EVENT_TRIGGER_TABLE_REWRITE_OID',\n  'PG_EVENT_TRIGGER_TABLE_REWRITE_REASON',\n  'PG_GET_OBJECT_ADDRESS',\n\n  // https://www.postgresql.org/docs/14/functions-statistics.html\n  'PG_MCV_LIST_ITEMS',\n\n  // cast\n  'CAST',\n];\n","export const keywords: string[] = [\n  // https://www.postgresql.org/docs/14/sql-keywords-appendix.html\n  'ALL', // reserved\n  'ANALYSE', // reserved\n  'ANALYZE', // reserved\n  'AND', // reserved\n  'ANY', // reserved\n  'AS', // reserved, requires AS\n  'ASC', // reserved\n  'ASYMMETRIC', // reserved\n  'AUTHORIZATION', // reserved (can be function or type)\n  'BETWEEN', // (cannot be function or type)\n  'BINARY', // reserved (can be function or type)\n  'BOTH', // reserved\n  'CASE', // reserved\n  'CAST', // reserved\n  'CHECK', // reserved\n  'COLLATE', // reserved\n  'COLLATION', // reserved (can be function or type)\n  'COLUMN', // reserved\n  'CONCURRENTLY', // reserved (can be function or type)\n  'CONSTRAINT', // reserved\n  'CREATE', // reserved, requires AS\n  'CROSS', // reserved (can be function or type)\n  'CURRENT_CATALOG', // reserved\n  'CURRENT_DATE', // reserved\n  'CURRENT_ROLE', // reserved\n  'CURRENT_SCHEMA', // reserved (can be function or type)\n  'CURRENT_TIME', // reserved\n  'CURRENT_TIMESTAMP', // reserved\n  'CURRENT_USER', // reserved\n  'DAY', // requires AS\n  'DEFAULT', // reserved\n  'DEFERRABLE', // reserved\n  'DESC', // reserved\n  'DISTINCT', // reserved\n  'DO', // reserved\n  'ELSE', // reserved\n  'END', // reserved\n  'EXCEPT', // reserved, requires AS\n  'EXISTS', // (cannot be function or type)\n  'FALSE', // reserved\n  'FETCH', // reserved, requires AS\n  'FILTER', // requires AS\n  'FOR', // reserved, requires AS\n  'FOREIGN', // reserved\n  'FREEZE', // reserved (can be function or type)\n  'FROM', // reserved, requires AS\n  'FULL', // reserved (can be function or type)\n  'GRANT', // reserved, requires AS\n  'GROUP', // reserved, requires AS\n  'HAVING', // reserved, requires AS\n  'HOUR', // requires AS\n  'ILIKE', // reserved (can be function or type)\n  'IN', // reserved\n  'INITIALLY', // reserved\n  'INNER', // reserved (can be function or type)\n  'INOUT', // (cannot be function or type)\n  'INTERSECT', // reserved, requires AS\n  'INTO', // reserved, requires AS\n  'IS', // reserved (can be function or type)\n  'ISNULL', // reserved (can be function or type), requires AS\n  'JOIN', // reserved (can be function or type)\n  'LATERAL', // reserved\n  'LEADING', // reserved\n  'LEFT', // reserved (can be function or type)\n  'LIKE', // reserved (can be function or type)\n  'LIMIT', // reserved, requires AS\n  'LOCALTIME', // reserved\n  'LOCALTIMESTAMP', // reserved\n  'MINUTE', // requires AS\n  'MONTH', // requires AS\n  'NATURAL', // reserved (can be function or type)\n  'NOT', // reserved\n  'NOTNULL', // reserved (can be function or type), requires AS\n  'NULL', // reserved\n  'NULLIF', // (cannot be function or type)\n  'OFFSET', // reserved, requires AS\n  'ON', // reserved, requires AS\n  'ONLY', // reserved\n  'OR', // reserved\n  'ORDER', // reserved, requires AS\n  'OUT', // (cannot be function or type)\n  'OUTER', // reserved (can be function or type)\n  'OVER', // requires AS\n  'OVERLAPS', // reserved (can be function or type), requires AS\n  'PLACING', // reserved\n  'PRIMARY', // reserved\n  'REFERENCES', // reserved\n  'RETURNING', // reserved, requires AS\n  'RIGHT', // reserved (can be function or type)\n  'ROW', // (cannot be function or type)\n  'SECOND', // requires AS\n  'SELECT', // reserved\n  'SESSION_USER', // reserved\n  'SIMILAR', // reserved (can be function or type)\n  'SOME', // reserved\n  'SYMMETRIC', // reserved\n  'TABLE', // reserved\n  'TABLESAMPLE', // reserved (can be function or type)\n  'THEN', // reserved\n  'TO', // reserved, requires AS\n  'TRAILING', // reserved\n  'TRUE', // reserved\n  'UNION', // reserved, requires AS\n  'UNIQUE', // reserved\n  'USER', // reserved\n  'USING', // reserved\n  'VALUES', // (cannot be function or type)\n  'VARIADIC', // reserved\n  'VERBOSE', // reserved (can be function or type)\n  'WHEN', // reserved\n  'WHERE', // reserved, requires AS\n  'WINDOW', // reserved, requires AS\n  'WITH', // reserved, requires AS\n  'WITHIN', // requires AS\n  'WITHOUT', // requires AS\n  'YEAR', // requires AS\n];\n\nexport const dataTypes: string[] = [\n  // https://www.postgresql.org/docs/current/datatype.html\n  'ARRAY', // reserved, requires AS\n  'BIGINT', // (cannot be function or type)\n  'BIT', // (cannot be function or type)\n  'BIT VARYING',\n  'BOOL', // (cannot be function or type)\n  'BOOLEAN', // (cannot be function or type)\n  'CHAR', // (cannot be function or type), requires AS\n  'CHARACTER', // (cannot be function or type), requires AS\n  'CHARACTER VARYING',\n  'DECIMAL', // (cannot be function or type)\n  'DEC', // (cannot be function or type)\n  'DOUBLE',\n  'ENUM',\n  'FLOAT', // (cannot be function or type)\n  'INT', // (cannot be function or type)\n  'INTEGER', // (cannot be function or type)\n  'INTERVAL', // (cannot be function or type)\n  'NCHAR', // (cannot be function or type)\n  'NUMERIC', // (cannot be function or type)\n  'PRECISION', // (cannot be function or type), requires AS\n  'REAL', // (cannot be function or type)\n  'SMALLINT', // (cannot be function or type)\n  'TEXT',\n  'TIME', // (cannot be function or type)\n  'TIMESTAMP', // (cannot be function or type)\n  'TIMESTAMPTZ', // (cannot be function or type)\n  'VARCHAR', // (cannot be function or type)\n  'XML',\n  'ZONE',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './postgresql.functions.js';\nimport { dataTypes, keywords } from './postgresql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY [ALL | DISTINCT]',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  'FOR {UPDATE | NO KEY UPDATE | SHARE | KEY SHARE} [OF]',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  'DEFAULT VALUES',\n  // - update:\n  'SET',\n  // other\n  'RETURNING',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [GLOBAL | LOCAL] [TEMPORARY | TEMP | UNLOGGED] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create\n  'CREATE [OR REPLACE] [TEMP | TEMPORARY] [RECURSIVE] VIEW',\n  'CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]',\n  // - update:\n  'UPDATE [ONLY]',\n  'WHERE CURRENT OF',\n  // - insert:\n  'ON CONFLICT',\n  // - delete:\n  'DELETE FROM [ONLY]',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE [IF EXISTS] [ONLY]',\n  'ALTER TABLE ALL IN TABLESPACE',\n  'RENAME [COLUMN]',\n  'RENAME TO',\n  'ADD [COLUMN] [IF NOT EXISTS]',\n  'DROP [COLUMN] [IF EXISTS]',\n  'ALTER [COLUMN]',\n  'SET DATA TYPE', // for alter column\n  '{SET | DROP} DEFAULT', // for alter column\n  '{SET | DROP} NOT NULL', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE] [ONLY]',\n  // other\n  'SET SCHEMA',\n  'AFTER',\n  // https://www.postgresql.org/docs/14/sql-commands.html\n  'ABORT',\n  'ALTER AGGREGATE',\n  'ALTER COLLATION',\n  'ALTER CONVERSION',\n  'ALTER DATABASE',\n  'ALTER DEFAULT PRIVILEGES',\n  'ALTER DOMAIN',\n  'ALTER EVENT TRIGGER',\n  'ALTER EXTENSION',\n  'ALTER FOREIGN DATA WRAPPER',\n  'ALTER FOREIGN TABLE',\n  'ALTER FUNCTION',\n  'ALTER GROUP',\n  'ALTER INDEX',\n  'ALTER LANGUAGE',\n  'ALTER LARGE OBJECT',\n  'ALTER MATERIALIZED VIEW',\n  'ALTER OPERATOR',\n  'ALTER OPERATOR CLASS',\n  'ALTER OPERATOR FAMILY',\n  'ALTER POLICY',\n  'ALTER PROCEDURE',\n  'ALTER PUBLICATION',\n  'ALTER ROLE',\n  'ALTER ROUTINE',\n  'ALTER RULE',\n  'ALTER SCHEMA',\n  'ALTER SEQUENCE',\n  'ALTER SERVER',\n  'ALTER STATISTICS',\n  'ALTER SUBSCRIPTION',\n  'ALTER SYSTEM',\n  'ALTER TABLESPACE',\n  'ALTER TEXT SEARCH CONFIGURATION',\n  'ALTER TEXT SEARCH DICTIONARY',\n  'ALTER TEXT SEARCH PARSER',\n  'ALTER TEXT SEARCH TEMPLATE',\n  'ALTER TRIGGER',\n  'ALTER TYPE',\n  'ALTER USER',\n  'ALTER USER MAPPING',\n  'ALTER VIEW',\n  'ANALYZE',\n  'BEGIN',\n  'CALL',\n  'CHECKPOINT',\n  'CLOSE',\n  'CLUSTER',\n  'COMMIT',\n  'COMMIT PREPARED',\n  'COPY',\n  'CREATE ACCESS METHOD',\n  'CREATE AGGREGATE',\n  'CREATE CAST',\n  'CREATE COLLATION',\n  'CREATE CONVERSION',\n  'CREATE DATABASE',\n  'CREATE DOMAIN',\n  'CREATE EVENT TRIGGER',\n  'CREATE EXTENSION',\n  'CREATE FOREIGN DATA WRAPPER',\n  'CREATE FOREIGN TABLE',\n  'CREATE FUNCTION',\n  'CREATE GROUP',\n  'CREATE INDEX',\n  'CREATE LANGUAGE',\n  'CREATE OPERATOR',\n  'CREATE OPERATOR CLASS',\n  'CREATE OPERATOR FAMILY',\n  'CREATE POLICY',\n  'CREATE PROCEDURE',\n  'CREATE PUBLICATION',\n  'CREATE ROLE',\n  'CREATE RULE',\n  'CREATE SCHEMA',\n  'CREATE SEQUENCE',\n  'CREATE SERVER',\n  'CREATE STATISTICS',\n  'CREATE SUBSCRIPTION',\n  'CREATE TABLESPACE',\n  'CREATE TEXT SEARCH CONFIGURATION',\n  'CREATE TEXT SEARCH DICTIONARY',\n  'CREATE TEXT SEARCH PARSER',\n  'CREATE TEXT SEARCH TEMPLATE',\n  'CREATE TRANSFORM',\n  'CREATE TRIGGER',\n  'CREATE TYPE',\n  'CREATE USER',\n  'CREATE USER MAPPING',\n  'DEALLOCATE',\n  'DECLARE',\n  'DISCARD',\n  'DROP ACCESS METHOD',\n  'DROP AGGREGATE',\n  'DROP CAST',\n  'DROP COLLATION',\n  'DROP CONVERSION',\n  'DROP DATABASE',\n  'DROP DOMAIN',\n  'DROP EVENT TRIGGER',\n  'DROP EXTENSION',\n  'DROP FOREIGN DATA WRAPPER',\n  'DROP FOREIGN TABLE',\n  'DROP FUNCTION',\n  'DROP GROUP',\n  'DROP INDEX',\n  'DROP LANGUAGE',\n  'DROP MATERIALIZED VIEW',\n  'DROP OPERATOR',\n  'DROP OPERATOR CLASS',\n  'DROP OPERATOR FAMILY',\n  'DROP OWNED',\n  'DROP POLICY',\n  'DROP PROCEDURE',\n  'DROP PUBLICATION',\n  'DROP ROLE',\n  'DROP ROUTINE',\n  'DROP RULE',\n  'DROP SCHEMA',\n  'DROP SEQUENCE',\n  'DROP SERVER',\n  'DROP STATISTICS',\n  'DROP SUBSCRIPTION',\n  'DROP TABLESPACE',\n  'DROP TEXT SEARCH CONFIGURATION',\n  'DROP TEXT SEARCH DICTIONARY',\n  'DROP TEXT SEARCH PARSER',\n  'DROP TEXT SEARCH TEMPLATE',\n  'DROP TRANSFORM',\n  'DROP TRIGGER',\n  'DROP TYPE',\n  'DROP USER',\n  'DROP USER MAPPING',\n  'DROP VIEW',\n  'EXECUTE',\n  'EXPLAIN',\n  'FETCH',\n  'GRANT',\n  'IMPORT FOREIGN SCHEMA',\n  'LISTEN',\n  'LOAD',\n  'LOCK',\n  'MOVE',\n  'NOTIFY',\n  'PREPARE',\n  'PREPARE TRANSACTION',\n  'REASSIGN OWNED',\n  'REFRESH MATERIALIZED VIEW',\n  'REINDEX',\n  'RELEASE SAVEPOINT',\n  'RESET',\n  'REVOKE',\n  'ROLLBACK',\n  'ROLLBACK PREPARED',\n  'ROLLBACK TO SAVEPOINT',\n  'SAVEPOINT',\n  'SECURITY LABEL',\n  'SELECT INTO',\n  'SET CONSTRAINTS',\n  'SET ROLE',\n  'SET SESSION AUTHORIZATION',\n  'SET TRANSACTION',\n  'SHOW',\n  'START TRANSACTION',\n  'UNLISTEN',\n  'VACUUM',\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'PRIMARY KEY',\n  'GENERATED {ALWAYS | BY DEFAULT} AS IDENTITY',\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  '{ROWS | RANGE | GROUPS} BETWEEN',\n  // https://www.postgresql.org/docs/current/datatype-datetime.html\n  '[TIMESTAMP | TIME] {WITH | WITHOUT} TIME ZONE',\n  // comparison operator\n  'IS [NOT] DISTINCT FROM',\n]);\n\n// https://www.postgresql.org/docs/14/index.html\nexport const postgresql: DialectOptions = {\n  name: 'postgresql',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    nestedBlockComments: true,\n    extraParens: ['[]'],\n    stringTypes: [\n      '$$',\n      { quote: \"''-qq\", prefixes: ['U&'] },\n      { quote: \"''-qq-bs\", prefixes: ['E'], requirePrefix: true },\n      { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n    ],\n    identTypes: [{ quote: '\"\"-qq', prefixes: ['U&'] }],\n    identChars: { rest: '$' },\n    paramTypes: { numbered: ['$'] },\n    operators: [\n      // Arithmetic\n      '%',\n      '^',\n      '|/',\n      '||/',\n      '@',\n      // Assignment\n      ':=',\n      // Bitwise\n      '&',\n      '|',\n      '#',\n      '~',\n      '<<',\n      '>>',\n      // Byte comparison\n      '~>~',\n      '~<~',\n      '~>=~',\n      '~<=~',\n      // Geometric\n      '@-@',\n      '@@',\n      '##',\n      '<->',\n      '&&',\n      '&<',\n      '&>',\n      '<<|',\n      '&<|',\n      '|>>',\n      '|&>',\n      '<^',\n      '^>',\n      '?#',\n      '?-',\n      '?|',\n      '?-|',\n      '?||',\n      '@>',\n      '<@',\n      '~=',\n      // JSON\n      '?',\n      '@?',\n      '?&',\n      '->',\n      '->>',\n      '#>',\n      '#>>',\n      '#-',\n      // Named function params\n      '=>',\n      // Network address\n      '>>=',\n      '<<=',\n      // Pattern matching\n      '~~',\n      '~~*',\n      '!~~',\n      '!~~*',\n      // POSIX RegExp\n      '~',\n      '~*',\n      '!~',\n      '!~*',\n      // Range/multirange\n      '-|-',\n      // String concatenation\n      '||',\n      // Text search\n      '@@@',\n      '!!',\n      '^@',\n      // Trigram/trigraph\n      '<%',\n      '%>',\n      '<<%',\n      '%>>',\n      '<<->',\n      '<->>',\n      '<<<->',\n      '<->>>',\n      // Type cast\n      '::',\n      ':',\n    ],\n    operatorKeyword: true,\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['::', ':'],\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const functions: string[] = [\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Aggregate_Functions.html\n  'ANY_VALUE',\n  'APPROXIMATE PERCENTILE_DISC',\n  'AVG',\n  'COUNT',\n  'LISTAGG',\n  'MAX',\n  'MEDIAN',\n  'MIN',\n  'PERCENTILE_CONT',\n  'STDDEV_SAMP',\n  'STDDEV_POP',\n  'SUM',\n  'VAR_SAMP',\n  'VAR_POP',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Array_Functions.html\n  'array',\n  'array_concat',\n  'array_flatten',\n  'get_array_length',\n  'split_to_array',\n  'subarray',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_bitwise_aggregate_functions.html\n  'BIT_AND',\n  'BIT_OR',\n  'BOOL_AND',\n  'BOOL_OR',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_conditional_expressions.html\n  'COALESCE',\n  'DECODE',\n  'GREATEST',\n  'LEAST',\n  'NVL',\n  'NVL2',\n  'NULLIF',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/Date_functions_header.html\n  'ADD_MONTHS',\n  'AT TIME ZONE',\n  'CONVERT_TIMEZONE',\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'DATE_CMP',\n  'DATE_CMP_TIMESTAMP',\n  'DATE_CMP_TIMESTAMPTZ',\n  'DATE_PART_YEAR',\n  'DATEADD',\n  'DATEDIFF',\n  'DATE_PART',\n  'DATE_TRUNC',\n  'EXTRACT',\n  'GETDATE',\n  'INTERVAL_CMP',\n  'LAST_DAY',\n  'MONTHS_BETWEEN',\n  'NEXT_DAY',\n  'SYSDATE',\n  'TIMEOFDAY',\n  'TIMESTAMP_CMP',\n  'TIMESTAMP_CMP_DATE',\n  'TIMESTAMP_CMP_TIMESTAMPTZ',\n  'TIMESTAMPTZ_CMP',\n  'TIMESTAMPTZ_CMP_DATE',\n  'TIMESTAMPTZ_CMP_TIMESTAMP',\n  'TIMEZONE',\n  'TO_TIMESTAMP',\n  'TRUNC',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/geospatial-functions.html\n  'AddBBox',\n  'DropBBox',\n  'GeometryType',\n  'ST_AddPoint',\n  'ST_Angle',\n  'ST_Area',\n  'ST_AsBinary',\n  'ST_AsEWKB',\n  'ST_AsEWKT',\n  'ST_AsGeoJSON',\n  'ST_AsText',\n  'ST_Azimuth',\n  'ST_Boundary',\n  'ST_Collect',\n  'ST_Contains',\n  'ST_ContainsProperly',\n  'ST_ConvexHull',\n  'ST_CoveredBy',\n  'ST_Covers',\n  'ST_Crosses',\n  'ST_Dimension',\n  'ST_Disjoint',\n  'ST_Distance',\n  'ST_DistanceSphere',\n  'ST_DWithin',\n  'ST_EndPoint',\n  'ST_Envelope',\n  'ST_Equals',\n  'ST_ExteriorRing',\n  'ST_Force2D',\n  'ST_Force3D',\n  'ST_Force3DM',\n  'ST_Force3DZ',\n  'ST_Force4D',\n  'ST_GeometryN',\n  'ST_GeometryType',\n  'ST_GeomFromEWKB',\n  'ST_GeomFromEWKT',\n  'ST_GeomFromText',\n  'ST_GeomFromWKB',\n  'ST_InteriorRingN',\n  'ST_Intersects',\n  'ST_IsPolygonCCW',\n  'ST_IsPolygonCW',\n  'ST_IsClosed',\n  'ST_IsCollection',\n  'ST_IsEmpty',\n  'ST_IsSimple',\n  'ST_IsValid',\n  'ST_Length',\n  'ST_LengthSphere',\n  'ST_Length2D',\n  'ST_LineFromMultiPoint',\n  'ST_LineInterpolatePoint',\n  'ST_M',\n  'ST_MakeEnvelope',\n  'ST_MakeLine',\n  'ST_MakePoint',\n  'ST_MakePolygon',\n  'ST_MemSize',\n  'ST_MMax',\n  'ST_MMin',\n  'ST_Multi',\n  'ST_NDims',\n  'ST_NPoints',\n  'ST_NRings',\n  'ST_NumGeometries',\n  'ST_NumInteriorRings',\n  'ST_NumPoints',\n  'ST_Perimeter',\n  'ST_Perimeter2D',\n  'ST_Point',\n  'ST_PointN',\n  'ST_Points',\n  'ST_Polygon',\n  'ST_RemovePoint',\n  'ST_Reverse',\n  'ST_SetPoint',\n  'ST_SetSRID',\n  'ST_Simplify',\n  'ST_SRID',\n  'ST_StartPoint',\n  'ST_Touches',\n  'ST_Within',\n  'ST_X',\n  'ST_XMax',\n  'ST_XMin',\n  'ST_Y',\n  'ST_YMax',\n  'ST_YMin',\n  'ST_Z',\n  'ST_ZMax',\n  'ST_ZMin',\n  'SupportsBBox',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/hash-functions.html\n  'CHECKSUM',\n  'FUNC_SHA1',\n  'FNV_HASH',\n  'MD5',\n  'SHA',\n  'SHA1',\n  'SHA2',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/hyperloglog-functions.html\n  'HLL',\n  'HLL_CREATE_SKETCH',\n  'HLL_CARDINALITY',\n  'HLL_COMBINE',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html\n  'IS_VALID_JSON',\n  'IS_VALID_JSON_ARRAY',\n  'JSON_ARRAY_LENGTH',\n  'JSON_EXTRACT_ARRAY_ELEMENT_TEXT',\n  'JSON_EXTRACT_PATH_TEXT',\n  'JSON_PARSE',\n  'JSON_SERIALIZE',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/Math_functions.html\n  'ABS',\n  'ACOS',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'CBRT',\n  'CEILING',\n  'CEIL',\n  'COS',\n  'COT',\n  'DEGREES',\n  'DEXP',\n  'DLOG1',\n  'DLOG10',\n  'EXP',\n  'FLOOR',\n  'LN',\n  'LOG',\n  'MOD',\n  'PI',\n  'POWER',\n  'RADIANS',\n  'RANDOM',\n  'ROUND',\n  'SIN',\n  'SIGN',\n  'SQRT',\n  'TAN',\n  'TO_HEX',\n  'TRUNC',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/ml-function.html\n  'EXPLAIN_MODEL',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html\n  'ASCII',\n  'BPCHARCMP',\n  'BTRIM',\n  'BTTEXT_PATTERN_CMP',\n  'CHAR_LENGTH',\n  'CHARACTER_LENGTH',\n  'CHARINDEX',\n  'CHR',\n  'COLLATE',\n  'CONCAT',\n  'CRC32',\n  'DIFFERENCE',\n  'INITCAP',\n  'LEFT',\n  'RIGHT',\n  'LEN',\n  'LENGTH',\n  'LOWER',\n  'LPAD',\n  'RPAD',\n  'LTRIM',\n  'OCTETINDEX',\n  'OCTET_LENGTH',\n  'POSITION',\n  'QUOTE_IDENT',\n  'QUOTE_LITERAL',\n  'REGEXP_COUNT',\n  'REGEXP_INSTR',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'REPEAT',\n  'REPLACE',\n  'REPLICATE',\n  'REVERSE',\n  'RTRIM',\n  'SOUNDEX',\n  'SPLIT_PART',\n  'STRPOS',\n  'STRTOL',\n  'SUBSTRING',\n  'TEXTLEN',\n  'TRANSLATE',\n  'TRIM',\n  'UPPER',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Type_Info_Functions.html\n  'decimal_precision',\n  'decimal_scale',\n  'is_array',\n  'is_bigint',\n  'is_boolean',\n  'is_char',\n  'is_decimal',\n  'is_float',\n  'is_integer',\n  'is_object',\n  'is_scalar',\n  'is_smallint',\n  'is_varchar',\n  'json_typeof',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Window_functions.html\n  'AVG',\n  'COUNT',\n  'CUME_DIST',\n  'DENSE_RANK',\n  'FIRST_VALUE',\n  'LAST_VALUE',\n  'LAG',\n  'LEAD',\n  'LISTAGG',\n  'MAX',\n  'MEDIAN',\n  'MIN',\n  'NTH_VALUE',\n  'NTILE',\n  'PERCENT_RANK',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'RANK',\n  'RATIO_TO_REPORT',\n  'ROW_NUMBER',\n  'STDDEV_SAMP',\n  'STDDEV_POP',\n  'SUM',\n  'VAR_SAMP',\n  'VAR_POP',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_Data_type_formatting.html\n  'CAST',\n  'CONVERT',\n  'TO_CHAR',\n  'TO_DATE',\n  'TO_NUMBER',\n  'TEXT_TO_INT_ALT',\n  'TEXT_TO_NUMERIC_ALT',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_System_administration_functions.html\n  'CHANGE_QUERY_PRIORITY',\n  'CHANGE_SESSION_PRIORITY',\n  'CHANGE_USER_PRIORITY',\n  'CURRENT_SETTING',\n  'PG_CANCEL_BACKEND',\n  'PG_TERMINATE_BACKEND',\n  'REBOOT_CLUSTER',\n  'SET_CONFIG',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_System_information_functions.html\n  'CURRENT_AWS_ACCOUNT',\n  'CURRENT_DATABASE',\n  'CURRENT_NAMESPACE',\n  'CURRENT_SCHEMA',\n  'CURRENT_SCHEMAS',\n  'CURRENT_USER',\n  'CURRENT_USER_ID',\n  'HAS_ASSUMEROLE_PRIVILEGE',\n  'HAS_DATABASE_PRIVILEGE',\n  'HAS_SCHEMA_PRIVILEGE',\n  'HAS_TABLE_PRIVILEGE',\n  'PG_BACKEND_PID',\n  'PG_GET_COLS',\n  'PG_GET_GRANTEE_BY_IAM_ROLE',\n  'PG_GET_IAM_ROLE_BY_USER',\n  'PG_GET_LATE_BINDING_VIEW_COLS',\n  'PG_LAST_COPY_COUNT',\n  'PG_LAST_COPY_ID',\n  'PG_LAST_UNLOAD_ID',\n  'PG_LAST_QUERY_ID',\n  'PG_LAST_UNLOAD_COUNT',\n  'SESSION_USER',\n  'SLICE_NUM',\n  'USER',\n  'VERSION',\n];\n","export const keywords: string[] = [\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html\n  'AES128',\n  'AES256',\n  'ALL',\n  'ALLOWOVERWRITE',\n  'ANY',\n  'AS',\n  'ASC',\n  'AUTHORIZATION',\n  'BACKUP',\n  'BETWEEN',\n  'BINARY',\n  'BOTH',\n  'CHECK',\n  'COLUMN',\n  'CONSTRAINT',\n  'CREATE',\n  'CROSS',\n  'DEFAULT',\n  'DEFERRABLE',\n  'DEFLATE',\n  'DEFRAG',\n  'DESC',\n  'DISABLE',\n  'DISTINCT',\n  'DO',\n  'ENABLE',\n  'ENCODE',\n  'ENCRYPT',\n  'ENCRYPTION',\n  'EXPLICIT',\n  'FALSE',\n  'FOR',\n  'FOREIGN',\n  'FREEZE',\n  'FROM',\n  'FULL',\n  'GLOBALDICT256',\n  'GLOBALDICT64K',\n  'GROUP',\n  'IDENTITY',\n  'IGNORE',\n  'ILIKE',\n  'IN',\n  'INITIALLY',\n  'INNER',\n  'INTO',\n  'IS',\n  'ISNULL',\n  'LANGUAGE',\n  'LEADING',\n  'LIKE',\n  'LIMIT',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LUN',\n  'LUNS',\n  'MINUS',\n  'NATURAL',\n  'NEW',\n  'NOT',\n  'NOTNULL',\n  'NULL',\n  'NULLS',\n  'OFF',\n  'OFFLINE',\n  'OFFSET',\n  'OID',\n  'OLD',\n  'ON',\n  'ONLY',\n  'OPEN',\n  'ORDER',\n  'OUTER',\n  'OVERLAPS',\n  'PARALLEL',\n  'PARTITION',\n  'PERCENT',\n  'PERMISSIONS',\n  'PLACING',\n  'PRIMARY',\n  'RECOVER',\n  'REFERENCES',\n  'REJECTLOG',\n  'RESORT',\n  'RESPECT',\n  'RESTORE',\n  'SIMILAR',\n  'SNAPSHOT',\n  'SOME',\n  'SYSTEM',\n  'TABLE',\n  'TAG',\n  'TDES',\n  'THEN',\n  'TIMESTAMP',\n  'TO',\n  'TOP',\n  'TRAILING',\n  'TRUE',\n  'UNIQUE',\n  'USING',\n  'VERBOSE',\n  'WALLET',\n  'WITHOUT',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html\n  'ACCEPTANYDATE',\n  'ACCEPTINVCHARS',\n  'BLANKSASNULL',\n  'DATEFORMAT',\n  'EMPTYASNULL',\n  'ENCODING',\n  'ESCAPE',\n  'EXPLICIT_IDS',\n  'FILLRECORD',\n  'IGNOREBLANKLINES',\n  'IGNOREHEADER',\n  'REMOVEQUOTES',\n  'ROUNDEC',\n  'TIMEFORMAT',\n  'TRIMBLANKS',\n  'TRUNCATECOLUMNS',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-load.html\n  'COMPROWS',\n  'COMPUPDATE',\n  'MAXERROR',\n  'NOLOAD',\n  'STATUPDATE',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html\n  'FORMAT',\n  'CSV',\n  'DELIMITER',\n  'FIXEDWIDTH',\n  'SHAPEFILE',\n  'AVRO',\n  'JSON',\n  'PARQUET',\n  'ORC',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html\n  'ACCESS_KEY_ID',\n  'CREDENTIALS',\n  'ENCRYPTED',\n  'IAM_ROLE',\n  'MASTER_SYMMETRIC_KEY',\n  'SECRET_ACCESS_KEY',\n  'SESSION_TOKEN',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-file-compression.html\n  'BZIP2',\n  'GZIP',\n  'LZOP',\n  'ZSTD',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_COPY-alphabetical-parm-list.html\n  'MANIFEST',\n  'READRATIO',\n  'REGION',\n  'SSH',\n\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html\n  'RAW',\n  'AZ64',\n  'BYTEDICT',\n  'DELTA',\n  'DELTA32K',\n  'LZO',\n  'MOSTLY8',\n  'MOSTLY16',\n  'MOSTLY32',\n  'RUNLENGTH',\n  'TEXT255',\n  'TEXT32K',\n\n  // misc\n  // CREATE EXTERNAL SCHEMA (https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)\n  'CATALOG_ROLE',\n  'SECRET_ARN',\n  'EXTERNAL',\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html\n  'AUTO',\n  'EVEN',\n  'KEY',\n  'PREDICATE', // ANALYZE | ANALYSE (https://docs.aws.amazon.com/redshift/latest/dg/r_ANALYZE.html)\n  // unknown\n  'COMPRESSION',\n\n  /**\n   * Other keywords not included:\n   * STL: https://docs.aws.amazon.com/redshift/latest/dg/c_intro_STL_tables.html\n   * SVCS: https://docs.aws.amazon.com/redshift/latest/dg/svcs_views.html\n   * SVL: https://docs.aws.amazon.com/redshift/latest/dg/svl_views.html\n   * SVV: https://docs.aws.amazon.com/redshift/latest/dg/svv_views.html\n   */\n];\n\nexport const dataTypes: string[] = [\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_Character_types.html#r_Character_types-text-and-bpchar-types\n  'ARRAY',\n  'BIGINT',\n  'BPCHAR',\n  'CHAR',\n  'CHARACTER VARYING',\n  'CHARACTER',\n  'DECIMAL',\n  'INT',\n  'INT2',\n  'INT4',\n  'INT8',\n  'INTEGER',\n  'NCHAR',\n  'NUMERIC',\n  'NVARCHAR',\n  'SMALLINT',\n  'TEXT',\n  'VARBYTE',\n  'VARCHAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './redshift.functions.js';\nimport { dataTypes, keywords } from './redshift.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [TEMPORARY | TEMP | LOCAL TEMPORARY | LOCAL TEMP] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE | MATERIALIZED] VIEW',\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE [FROM]',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ALTER TABLE APPEND',\n  'ADD [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME TO',\n  'RENAME COLUMN',\n  'ALTER COLUMN',\n  'TYPE', // for alter column\n  'ENCODE', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_commands.html\n  'ABORT',\n  'ALTER DATABASE',\n  'ALTER DATASHARE',\n  'ALTER DEFAULT PRIVILEGES',\n  'ALTER GROUP',\n  'ALTER MATERIALIZED VIEW',\n  'ALTER PROCEDURE',\n  'ALTER SCHEMA',\n  'ALTER USER',\n  'ANALYSE',\n  'ANALYZE',\n  'ANALYSE COMPRESSION',\n  'ANALYZE COMPRESSION',\n  'BEGIN',\n  'CALL',\n  'CANCEL',\n  'CLOSE',\n  'COMMIT',\n  'COPY',\n  'CREATE DATABASE',\n  'CREATE DATASHARE',\n  'CREATE EXTERNAL FUNCTION',\n  'CREATE EXTERNAL SCHEMA',\n  'CREATE EXTERNAL TABLE',\n  'CREATE FUNCTION',\n  'CREATE GROUP',\n  'CREATE LIBRARY',\n  'CREATE MODEL',\n  'CREATE PROCEDURE',\n  'CREATE SCHEMA',\n  'CREATE USER',\n  'DEALLOCATE',\n  'DECLARE',\n  'DESC DATASHARE',\n  'DROP DATABASE',\n  'DROP DATASHARE',\n  'DROP FUNCTION',\n  'DROP GROUP',\n  'DROP LIBRARY',\n  'DROP MODEL',\n  'DROP MATERIALIZED VIEW',\n  'DROP PROCEDURE',\n  'DROP SCHEMA',\n  'DROP USER',\n  'DROP VIEW',\n  'DROP',\n  'EXECUTE',\n  'EXPLAIN',\n  'FETCH',\n  'GRANT',\n  'LOCK',\n  'PREPARE',\n  'REFRESH MATERIALIZED VIEW',\n  'RESET',\n  'REVOKE',\n  'ROLLBACK',\n  'SELECT INTO',\n  'SET SESSION AUTHORIZATION',\n  'SET SESSION CHARACTERISTICS',\n  'SHOW',\n  'SHOW EXTERNAL TABLE',\n  'SHOW MODEL',\n  'SHOW DATASHARES',\n  'SHOW PROCEDURE',\n  'SHOW TABLE',\n  'SHOW VIEW',\n  'START TRANSACTION',\n  'UNLOAD',\n  'VACUUM',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT', 'MINUS']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html\n  'NULL AS',\n  // https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html\n  'DATA CATALOG',\n  'HIVE METASTORE',\n  // in window specifications\n  '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html\nexport const redshift: DialectOptions = {\n  name: 'redshift',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    stringTypes: [\"''-qq\"],\n    identTypes: [`\"\"-qq`],\n    identChars: { first: '#' },\n    paramTypes: { numbered: ['$'] },\n    operators: [\n      '^',\n      '%',\n      '@',\n      '|/',\n      '||/',\n      '&',\n      '|',\n      // '#', conflicts with first char of identifier\n      '~',\n      '<<',\n      '>>',\n      '||',\n      '::',\n    ],\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['::'],\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const keywords: string[] = [\n  // https://deepkb.com/CO_000013/en/kb/IMPORT-fbfa59f0-2bf1-31fe-bb7b-0f9efe9932c6/spark-sql-keywords\n  'ADD',\n  'AFTER',\n  'ALL',\n  'ALTER',\n  'ANALYZE',\n  'AND',\n  'ANTI',\n  'ANY',\n  'ARCHIVE',\n  'AS',\n  'ASC',\n  'AT',\n  'AUTHORIZATION',\n  'BETWEEN',\n  'BOTH',\n  'BUCKET',\n  'BUCKETS',\n  'BY',\n  'CACHE',\n  'CASCADE',\n  'CAST',\n  'CHANGE',\n  'CHECK',\n  'CLEAR',\n  'CLUSTER',\n  'CLUSTERED',\n  'CODEGEN',\n  'COLLATE',\n  'COLLECTION',\n  'COLUMN',\n  'COLUMNS',\n  'COMMENT',\n  'COMMIT',\n  'COMPACT',\n  'COMPACTIONS',\n  'COMPUTE',\n  'CONCATENATE',\n  'CONSTRAINT',\n  'COST',\n  'CREATE',\n  'CROSS',\n  'CUBE',\n  'CURRENT',\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_USER',\n  'DATA',\n  'DATABASE',\n  'DATABASES',\n  'DAY',\n  'DBPROPERTIES',\n  'DEFINED',\n  'DELETE',\n  'DELIMITED',\n  'DESC',\n  'DESCRIBE',\n  'DFS',\n  'DIRECTORIES',\n  'DIRECTORY',\n  'DISTINCT',\n  'DISTRIBUTE',\n  'DIV',\n  'DROP',\n  'ESCAPE',\n  'ESCAPED',\n  'EXCEPT',\n  'EXCHANGE',\n  'EXISTS',\n  'EXPORT',\n  'EXTENDED',\n  'EXTERNAL',\n  'EXTRACT',\n  'FALSE',\n  'FETCH',\n  'FIELDS',\n  'FILTER',\n  'FILEFORMAT',\n  'FIRST',\n  'FIRST_VALUE',\n  'FOLLOWING',\n  'FOR',\n  'FOREIGN',\n  'FORMAT',\n  'FORMATTED',\n  'FULL',\n  'FUNCTION',\n  'FUNCTIONS',\n  'GLOBAL',\n  'GRANT',\n  'GROUP',\n  'GROUPING',\n  'HOUR',\n  'IF',\n  'IGNORE',\n  'IMPORT',\n  'IN',\n  'INDEX',\n  'INDEXES',\n  'INNER',\n  'INPATH',\n  'INPUTFORMAT',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'ITEMS',\n  'KEYS',\n  'LAST',\n  'LAST_VALUE',\n  'LATERAL',\n  'LAZY',\n  'LEADING',\n  'LEFT',\n  'LIKE',\n  'LINES',\n  'LIST',\n  'LOCAL',\n  'LOCATION',\n  'LOCK',\n  'LOCKS',\n  'LOGICAL',\n  'MACRO',\n  'MATCHED',\n  'MERGE',\n  'MINUTE',\n  'MONTH',\n  'MSCK',\n  'NAMESPACE',\n  'NAMESPACES',\n  'NATURAL',\n  'NO',\n  'NOT',\n  'NULL',\n  'NULLS',\n  'OF',\n  'ONLY',\n  'OPTION',\n  'OPTIONS',\n  'OR',\n  'ORDER',\n  'OUT',\n  'OUTER',\n  'OUTPUTFORMAT',\n  'OVER',\n  'OVERLAPS',\n  'OVERLAY',\n  'OVERWRITE',\n  'OWNER',\n  'PARTITION',\n  'PARTITIONED',\n  'PARTITIONS',\n  'PERCENT',\n  'PLACING',\n  'POSITION',\n  'PRECEDING',\n  'PRIMARY',\n  'PRINCIPALS',\n  'PROPERTIES',\n  'PURGE',\n  'QUERY',\n  'RANGE',\n  'RECORDREADER',\n  'RECORDWRITER',\n  'RECOVER',\n  'REDUCE',\n  'REFERENCES',\n  'RENAME',\n  'REPAIR',\n  'REPLACE',\n  'RESPECT',\n  'RESTRICT',\n  'REVOKE',\n  'RIGHT',\n  'RLIKE',\n  'ROLE',\n  'ROLES',\n  'ROLLBACK',\n  'ROLLUP',\n  'ROW',\n  'ROWS',\n  'SCHEMA',\n  'SECOND',\n  'SELECT',\n  'SEMI',\n  'SEPARATED',\n  'SERDE',\n  'SERDEPROPERTIES',\n  'SESSION_USER',\n  'SETS',\n  'SHOW',\n  'SKEWED',\n  'SOME',\n  'SORT',\n  'SORTED',\n  'START',\n  'STATISTICS',\n  'STORED',\n  'STRATIFY',\n  'SUBSTR',\n  'SUBSTRING',\n  'TABLE',\n  'TABLES',\n  'TBLPROPERTIES',\n  'TEMPORARY',\n  'TERMINATED',\n  'THEN',\n  'TO',\n  'TOUCH',\n  'TRAILING',\n  'TRANSACTION',\n  'TRANSACTIONS',\n  'TRIM',\n  'TRUE',\n  'TRUNCATE',\n  'UNARCHIVE',\n  'UNBOUNDED',\n  'UNCACHE',\n  'UNIQUE',\n  'UNKNOWN',\n  'UNLOCK',\n  'UNSET',\n  'USE',\n  'USER',\n  'USING',\n  'VIEW',\n  'WINDOW',\n  'YEAR',\n  // other\n  'ANALYSE',\n  'ARRAY_ZIP',\n  'COALESCE',\n  'CONTAINS',\n  'CONVERT',\n  'DAYS',\n  'DAY_HOUR',\n  'DAY_MINUTE',\n  'DAY_SECOND',\n  'DECODE',\n  'DEFAULT',\n  'DISTINCTROW',\n  'ENCODE',\n  'EXPLODE',\n  'EXPLODE_OUTER',\n  'FIXED',\n  'GREATEST',\n  'GROUP_CONCAT',\n  'HOURS',\n  'HOUR_MINUTE',\n  'HOUR_SECOND',\n  'IFNULL',\n  'LEAST',\n  'LEVEL',\n  'MINUTE_SECOND',\n  'NULLIF',\n  'OFFSET',\n  'ON',\n  'OPTIMIZE',\n  'REGEXP',\n  'SEPARATOR',\n  'SIZE',\n  'TYPE',\n  'TYPES',\n  'UNSIGNED',\n  'VARIABLES',\n  'YEAR_MONTH',\n];\n\nexport const dataTypes: string[] = [\n  // https://spark.apache.org/docs/latest/sql-ref-datatypes.html\n  'ARRAY',\n  'BIGINT',\n  'BINARY',\n  'BOOLEAN',\n  'BYTE',\n  'CHAR',\n  'DATE',\n  'DEC',\n  'DECIMAL',\n  'DOUBLE',\n  'FLOAT',\n  'INT',\n  'INTEGER',\n  'INTERVAL',\n  'LONG',\n  'MAP',\n  'NUMERIC',\n  'REAL',\n  'SHORT',\n  'SMALLINT',\n  'STRING',\n  'STRUCT',\n  'TIMESTAMP_LTZ',\n  'TIMESTAMP_NTZ',\n  'TIMESTAMP',\n  'TINYINT',\n  'VARCHAR', // No varchar type in Spark, only STRING. Added for the sake of tests\n];\n","export const functions: string[] = [\n  // http://spark.apache.org/docs/latest/sql-ref-functions.html\n  //\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#aggregate-functions\n  // 'ANY',\n  'APPROX_COUNT_DISTINCT',\n  'APPROX_PERCENTILE',\n  'AVG',\n  'BIT_AND',\n  'BIT_OR',\n  'BIT_XOR',\n  'BOOL_AND',\n  'BOOL_OR',\n  'COLLECT_LIST',\n  'COLLECT_SET',\n  'CORR',\n  'COUNT',\n  'COUNT',\n  'COUNT',\n  'COUNT_IF',\n  'COUNT_MIN_SKETCH',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'EVERY',\n  'FIRST',\n  'FIRST_VALUE',\n  'GROUPING',\n  'GROUPING_ID',\n  'KURTOSIS',\n  'LAST',\n  'LAST_VALUE',\n  'MAX',\n  'MAX_BY',\n  'MEAN',\n  'MIN',\n  'MIN_BY',\n  'PERCENTILE',\n  'PERCENTILE',\n  'PERCENTILE_APPROX',\n  'SKEWNESS',\n  // 'SOME',\n  'STD',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'SUM',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VARIANCE',\n\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#window-functions\n  'CUME_DIST',\n  'DENSE_RANK',\n  'LAG',\n  'LEAD',\n  'NTH_VALUE',\n  'NTILE',\n  'PERCENT_RANK',\n  'RANK',\n  'ROW_NUMBER',\n\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#array-functions\n  'ARRAY',\n  'ARRAY_CONTAINS',\n  'ARRAY_DISTINCT',\n  'ARRAY_EXCEPT',\n  'ARRAY_INTERSECT',\n  'ARRAY_JOIN',\n  'ARRAY_MAX',\n  'ARRAY_MIN',\n  'ARRAY_POSITION',\n  'ARRAY_REMOVE',\n  'ARRAY_REPEAT',\n  'ARRAY_UNION',\n  'ARRAYS_OVERLAP',\n  'ARRAYS_ZIP',\n  'FLATTEN',\n  'SEQUENCE',\n  'SHUFFLE',\n  'SLICE',\n  'SORT_ARRAY',\n\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#map-functions\n  'ELEMENT_AT',\n  'ELEMENT_AT',\n  'MAP_CONCAT',\n  'MAP_ENTRIES',\n  'MAP_FROM_ARRAYS',\n  'MAP_FROM_ENTRIES',\n  'MAP_KEYS',\n  'MAP_VALUES',\n  'STR_TO_MAP',\n\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#date-and-timestamp-functions\n  'ADD_MONTHS',\n  'CURRENT_DATE',\n  'CURRENT_DATE',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_TIMEZONE',\n  'DATE_ADD',\n  'DATE_FORMAT',\n  'DATE_FROM_UNIX_DATE',\n  'DATE_PART',\n  'DATE_SUB',\n  'DATE_TRUNC',\n  'DATEDIFF',\n  'DAY',\n  'DAYOFMONTH',\n  'DAYOFWEEK',\n  'DAYOFYEAR',\n  'EXTRACT',\n  'FROM_UNIXTIME',\n  'FROM_UTC_TIMESTAMP',\n  'HOUR',\n  'LAST_DAY',\n  'MAKE_DATE',\n  'MAKE_DT_INTERVAL',\n  'MAKE_INTERVAL',\n  'MAKE_TIMESTAMP',\n  'MAKE_YM_INTERVAL',\n  'MINUTE',\n  'MONTH',\n  'MONTHS_BETWEEN',\n  'NEXT_DAY',\n  'NOW',\n  'QUARTER',\n  'SECOND',\n  'SESSION_WINDOW',\n  'TIMESTAMP_MICROS',\n  'TIMESTAMP_MILLIS',\n  'TIMESTAMP_SECONDS',\n  'TO_DATE',\n  'TO_TIMESTAMP',\n  'TO_UNIX_TIMESTAMP',\n  'TO_UTC_TIMESTAMP',\n  'TRUNC',\n  'UNIX_DATE',\n  'UNIX_MICROS',\n  'UNIX_MILLIS',\n  'UNIX_SECONDS',\n  'UNIX_TIMESTAMP',\n  'WEEKDAY',\n  'WEEKOFYEAR',\n  'WINDOW',\n  'YEAR',\n\n  // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#json-functions\n  'FROM_JSON',\n  'GET_JSON_OBJECT',\n  'JSON_ARRAY_LENGTH',\n  'JSON_OBJECT_KEYS',\n  'JSON_TUPLE',\n  'SCHEMA_OF_JSON',\n  'TO_JSON',\n\n  // http://spark.apache.org/docs/latest/api/sql/index.html\n  'ABS',\n  'ACOS',\n  'ACOSH',\n  'AGGREGATE',\n  'ARRAY_SORT',\n  'ASCII',\n  'ASIN',\n  'ASINH',\n  'ASSERT_TRUE',\n  'ATAN',\n  'ATAN2',\n  'ATANH',\n  'BASE64',\n  'BIN',\n  'BIT_COUNT',\n  'BIT_GET',\n  'BIT_LENGTH',\n  'BROUND',\n  'BTRIM',\n  'CARDINALITY',\n  'CBRT',\n  'CEIL',\n  'CEILING',\n  'CHAR_LENGTH',\n  'CHARACTER_LENGTH',\n  'CHR',\n  'CONCAT',\n  'CONCAT_WS',\n  'CONV',\n  'COS',\n  'COSH',\n  'COT',\n  'CRC32',\n  'CURRENT_CATALOG',\n  'CURRENT_DATABASE',\n  'CURRENT_USER',\n  'DEGREES',\n  // 'E',\n  'ELT',\n  'EXP',\n  'EXPM1',\n  'FACTORIAL',\n  'FIND_IN_SET',\n  'FLOOR',\n  'FORALL',\n  'FORMAT_NUMBER',\n  'FORMAT_STRING',\n  'FROM_CSV',\n  'GETBIT',\n  'HASH',\n  'HEX',\n  'HYPOT',\n  'INITCAP',\n  'INLINE',\n  'INLINE_OUTER',\n  'INPUT_FILE_BLOCK_LENGTH',\n  'INPUT_FILE_BLOCK_START',\n  'INPUT_FILE_NAME',\n  'INSTR',\n  'ISNAN',\n  'ISNOTNULL',\n  'ISNULL',\n  'JAVA_METHOD',\n  'LCASE',\n  'LEFT',\n  'LENGTH',\n  'LEVENSHTEIN',\n  'LN',\n  'LOCATE',\n  'LOG',\n  'LOG10',\n  'LOG1P',\n  'LOG2',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'MAP_FILTER',\n  'MAP_ZIP_WITH',\n  'MD5',\n  'MOD',\n  'MONOTONICALLY_INCREASING_ID',\n  'NAMED_STRUCT',\n  'NANVL',\n  'NEGATIVE',\n  'NVL',\n  'NVL2',\n  'OCTET_LENGTH',\n  'OVERLAY',\n  'PARSE_URL',\n  'PI',\n  'PMOD',\n  'POSEXPLODE',\n  'POSEXPLODE_OUTER',\n  'POSITION',\n  'POSITIVE',\n  'POW',\n  'POWER',\n  'PRINTF',\n  'RADIANS',\n  'RAISE_ERROR',\n  'RAND',\n  'RANDN',\n  'RANDOM',\n  'REFLECT',\n  'REGEXP_EXTRACT',\n  'REGEXP_EXTRACT_ALL',\n  'REGEXP_LIKE',\n  'REGEXP_REPLACE',\n  'REPEAT',\n  'REPLACE',\n  'REVERSE',\n  'RIGHT',\n  'RINT',\n  'ROUND',\n  'RPAD',\n  'RTRIM',\n  'SCHEMA_OF_CSV',\n  'SENTENCES',\n  'SHA',\n  'SHA1',\n  'SHA2',\n  'SHIFTLEFT',\n  'SHIFTRIGHT',\n  'SHIFTRIGHTUNSIGNED',\n  'SIGN',\n  'SIGNUM',\n  'SIN',\n  'SINH',\n  'SOUNDEX',\n  'SPACE',\n  'SPARK_PARTITION_ID',\n  'SPLIT',\n  'SQRT',\n  'STACK',\n  'SUBSTR',\n  'SUBSTRING',\n  'SUBSTRING_INDEX',\n  'TAN',\n  'TANH',\n  'TO_CSV',\n  'TRANSFORM_KEYS',\n  'TRANSFORM_VALUES',\n  'TRANSLATE',\n  'TRIM',\n  'TRY_ADD',\n  'TRY_DIVIDE',\n  'TYPEOF',\n  'UCASE',\n  'UNBASE64',\n  'UNHEX',\n  'UPPER',\n  'UUID',\n  'VERSION',\n  'WIDTH_BUCKET',\n  'XPATH',\n  'XPATH_BOOLEAN',\n  'XPATH_DOUBLE',\n  'XPATH_FLOAT',\n  'XPATH_INT',\n  'XPATH_LONG',\n  'XPATH_NUMBER',\n  'XPATH_SHORT',\n  'XPATH_STRING',\n  'XXHASH64',\n  'ZIP_WITH',\n\n  // cast\n  'CAST',\n\n  // Shorthand functions to use in place of CASE expression\n  'COALESCE',\n  'NULLIF',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { dataTypes, keywords } from './spark.keywords.js';\nimport { functions } from './spark.functions.js';\n\n// http://spark.apache.org/docs/latest/sql-ref-syntax.html\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'SORT BY',\n  'CLUSTER BY',\n  'DISTRIBUTE BY',\n  'LIMIT',\n  // Data manipulation\n  // - insert:\n  'INSERT [INTO | OVERWRITE] [TABLE]',\n  'VALUES',\n  // - insert overwrite directory:\n  //   https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-overwrite-directory.html\n  'INSERT OVERWRITE [LOCAL] DIRECTORY',\n  // - load:\n  //   https://spark.apache.org/docs/latest/sql-ref-syntax-dml-load.html\n  'LOAD DATA [LOCAL] INPATH',\n  '[OVERWRITE] INTO TABLE',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [EXTERNAL] TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE] [GLOBAL TEMPORARY | TEMPORARY] VIEW [IF NOT EXISTS]',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD COLUMNS',\n  'DROP {COLUMN | COLUMNS}',\n  'RENAME TO',\n  'RENAME COLUMN',\n  'ALTER COLUMN',\n  // - truncate:\n  'TRUNCATE TABLE',\n  // other\n  'LATERAL VIEW',\n  'ALTER DATABASE',\n  'ALTER VIEW',\n  'CREATE DATABASE',\n  'CREATE FUNCTION',\n  'DROP DATABASE',\n  'DROP FUNCTION',\n  'DROP VIEW',\n  'REPAIR TABLE',\n  'USE DATABASE',\n  // Data Retrieval\n  'TABLESAMPLE',\n  'PIVOT',\n  'TRANSFORM',\n  'EXPLAIN',\n  // Auxiliary\n  'ADD FILE',\n  'ADD JAR',\n  'ANALYZE TABLE',\n  'CACHE TABLE',\n  'CLEAR CACHE',\n  'DESCRIBE DATABASE',\n  'DESCRIBE FUNCTION',\n  'DESCRIBE QUERY',\n  'DESCRIBE TABLE',\n  'LIST FILE',\n  'LIST JAR',\n  'REFRESH',\n  'REFRESH TABLE',\n  'REFRESH FUNCTION',\n  'RESET',\n  'SHOW COLUMNS',\n  'SHOW CREATE TABLE',\n  'SHOW DATABASES',\n  'SHOW FUNCTIONS',\n  'SHOW PARTITIONS',\n  'SHOW TABLE EXTENDED',\n  'SHOW TABLES',\n  'SHOW TBLPROPERTIES',\n  'SHOW VIEWS',\n  'UNCACHE TABLE',\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n  // non-standard-joins\n  '[LEFT] {ANTI | SEMI} JOIN',\n  'NATURAL [LEFT] {ANTI | SEMI} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON DELETE',\n  'ON UPDATE',\n  'CURRENT ROW',\n  '{ROWS | RANGE} BETWEEN',\n]);\n\n// http://spark.apache.org/docs/latest/sql-programming-guide.html\nexport const spark: DialectOptions = {\n  name: 'spark',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    supportsXor: true,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    extraParens: ['[]'],\n    stringTypes: [\n      \"''-bs\",\n      '\"\"-bs',\n      { quote: \"''-raw\", prefixes: ['R', 'X'], requirePrefix: true },\n      { quote: '\"\"-raw', prefixes: ['R', 'X'], requirePrefix: true },\n    ],\n    identTypes: ['``'],\n    variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n    operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||', '->'],\n    postProcess,\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n\nfunction postProcess(tokens: Token[]) {\n  return tokens.map((token, i) => {\n    const prevToken = tokens[i - 1] || EOF_TOKEN;\n    const nextToken = tokens[i + 1] || EOF_TOKEN;\n\n    // [WINDOW](...)\n    if (isToken.WINDOW(token) && nextToken.type === TokenType.OPEN_PAREN) {\n      // This is a function call, treat it as a reserved function name\n      return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n    }\n\n    // TODO: deprecate this once ITEMS is merged with COLLECTION\n    if (token.text === 'ITEMS' && token.type === TokenType.RESERVED_KEYWORD) {\n      if (!(prevToken.text === 'COLLECTION' && nextToken.text === 'TERMINATED')) {\n        // this is a word and not COLLECTION ITEMS\n        return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n      }\n    }\n\n    return token;\n  });\n}\n","export const functions: string[] = [\n  // https://www.sqlite.org/lang_corefunc.html\n  'ABS',\n  'CHANGES',\n  'CHAR',\n  'COALESCE',\n  'FORMAT',\n  'GLOB',\n  'HEX',\n  'IFNULL',\n  'IIF',\n  'INSTR',\n  'LAST_INSERT_ROWID',\n  'LENGTH',\n  'LIKE',\n  'LIKELIHOOD',\n  'LIKELY',\n  'LOAD_EXTENSION',\n  'LOWER',\n  'LTRIM',\n  'NULLIF',\n  'PRINTF',\n  'QUOTE',\n  'RANDOM',\n  'RANDOMBLOB',\n  'REPLACE',\n  'ROUND',\n  'RTRIM',\n  'SIGN',\n  'SOUNDEX',\n  'SQLITE_COMPILEOPTION_GET',\n  'SQLITE_COMPILEOPTION_USED',\n  'SQLITE_OFFSET',\n  'SQLITE_SOURCE_ID',\n  'SQLITE_VERSION',\n  'SUBSTR',\n  'SUBSTRING',\n  'TOTAL_CHANGES',\n  'TRIM',\n  'TYPEOF',\n  'UNICODE',\n  'UNLIKELY',\n  'UPPER',\n  'ZEROBLOB',\n\n  // https://www.sqlite.org/lang_aggfunc.html\n  'AVG',\n  'COUNT',\n  'GROUP_CONCAT',\n  'MAX',\n  'MIN',\n  'SUM',\n  'TOTAL',\n\n  // https://www.sqlite.org/lang_datefunc.html\n  'DATE',\n  'TIME',\n  'DATETIME',\n  'JULIANDAY',\n  'UNIXEPOCH',\n  'STRFTIME',\n\n  // https://www.sqlite.org/windowfunctions.html#biwinfunc\n  'row_number',\n  'rank',\n  'dense_rank',\n  'percent_rank',\n  'cume_dist',\n  'ntile',\n  'lag',\n  'lead',\n  'first_value',\n  'last_value',\n  'nth_value',\n\n  // https://www.sqlite.org/lang_mathfunc.html\n  'ACOS',\n  'ACOSH',\n  'ASIN',\n  'ASINH',\n  'ATAN',\n  'ATAN2',\n  'ATANH',\n  'CEIL',\n  'CEILING',\n  'COS',\n  'COSH',\n  'DEGREES',\n  'EXP',\n  'FLOOR',\n  'LN',\n  'LOG',\n  'LOG',\n  'LOG10',\n  'LOG2',\n  'MOD',\n  'PI',\n  'POW',\n  'POWER',\n  'RADIANS',\n  'SIN',\n  'SINH',\n  'SQRT',\n  'TAN',\n  'TANH',\n  'TRUNC',\n\n  // https://www.sqlite.org/json1.html\n  'JSON',\n  'JSON_ARRAY',\n  'JSON_ARRAY_LENGTH',\n  'JSON_ARRAY_LENGTH',\n  'JSON_EXTRACT',\n  'JSON_INSERT',\n  'JSON_OBJECT',\n  'JSON_PATCH',\n  'JSON_REMOVE',\n  'JSON_REPLACE',\n  'JSON_SET',\n  'JSON_TYPE',\n  'JSON_TYPE',\n  'JSON_VALID',\n  'JSON_QUOTE',\n  'JSON_GROUP_ARRAY',\n  'JSON_GROUP_OBJECT',\n  'JSON_EACH',\n  'JSON_TREE',\n\n  // cast\n  'CAST',\n];\n","export const keywords: string[] = [\n  // https://www.sqlite.org/lang_keywords.html\n  'ABORT',\n  'ACTION',\n  'ADD',\n  'AFTER',\n  'ALL',\n  'ALTER',\n  'AND',\n  'ARE',\n  'ALWAYS',\n  'ANALYZE',\n  'AS',\n  'ASC',\n  'ATTACH',\n  'AUTOINCREMENT',\n  'BEFORE',\n  'BEGIN',\n  'BETWEEN',\n  'BY',\n  'CASCADE',\n  'CASE',\n  'CAST',\n  'CHECK',\n  'COLLATE',\n  'COLUMN',\n  'COMMIT',\n  'CONFLICT',\n  'CONSTRAINT',\n  'CREATE',\n  'CROSS',\n  'CURRENT',\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'DATABASE',\n  'DEFAULT',\n  'DEFERRABLE',\n  'DEFERRED',\n  'DELETE',\n  'DESC',\n  'DETACH',\n  'DISTINCT',\n  'DO',\n  'DROP',\n  'EACH',\n  'ELSE',\n  'END',\n  'ESCAPE',\n  'EXCEPT',\n  'EXCLUDE',\n  'EXCLUSIVE',\n  'EXISTS',\n  'EXPLAIN',\n  'FAIL',\n  'FILTER',\n  'FIRST',\n  'FOLLOWING',\n  'FOR',\n  'FOREIGN',\n  'FROM',\n  'FULL',\n  'GENERATED',\n  'GLOB',\n  'GROUP',\n  'GROUPS',\n  'HAVING',\n  'IF',\n  'IGNORE',\n  'IMMEDIATE',\n  'IN',\n  'INDEX',\n  'INDEXED',\n  'INITIALLY',\n  'INNER',\n  'INSERT',\n  'INSTEAD',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'ISNULL',\n  'JOIN',\n  'KEY',\n  'LAST',\n  'LEFT',\n  'LIKE',\n  'LIMIT',\n  'MATCH',\n  'MATERIALIZED',\n  'NATURAL',\n  'NO',\n  'NOT',\n  'NOTHING',\n  'NOTNULL',\n  'NULL',\n  'NULLS',\n  'OF',\n  'OFFSET',\n  'ON',\n  'ONLY',\n  'OPEN',\n  'OR',\n  'ORDER',\n  'OTHERS',\n  'OUTER',\n  'OVER',\n  'PARTITION',\n  'PLAN',\n  'PRAGMA',\n  'PRECEDING',\n  'PRIMARY',\n  'QUERY',\n  'RAISE',\n  'RANGE',\n  'RECURSIVE',\n  'REFERENCES',\n  'REGEXP',\n  'REINDEX',\n  'RELEASE',\n  'RENAME',\n  'REPLACE',\n  'RESTRICT',\n  'RETURNING',\n  'RIGHT',\n  'ROLLBACK',\n  'ROW',\n  'ROWS',\n  'SAVEPOINT',\n  'SELECT',\n  'SET',\n  'TABLE',\n  'TEMP',\n  'TEMPORARY',\n  'THEN',\n  'TIES',\n  'TO',\n  'TRANSACTION',\n  'TRIGGER',\n  'UNBOUNDED',\n  'UNION',\n  'UNIQUE',\n  'UPDATE',\n  'USING',\n  'VACUUM',\n  'VALUES',\n  'VIEW',\n  'VIRTUAL',\n  'WHEN',\n  'WHERE',\n  'WINDOW',\n  'WITH',\n  'WITHOUT',\n];\n\nexport const dataTypes: string[] = [\n  // SQLite allows any word as a data type, e.g. CREATE TABLE foo (col1 madeupname(123));\n  // Here we just list some common ones as SQL Formatter\n  // is only able to detect a predefined list of data types.\n  // https://www.sqlite.org/stricttables.html\n  // https://www.sqlite.org/datatype3.html\n  'ANY',\n  'ARRAY',\n  'BLOB',\n  'CHARACTER',\n  'DECIMAL',\n  'INT',\n  'INTEGER',\n  'NATIVE CHARACTER',\n  'NCHAR',\n  'NUMERIC',\n  'NVARCHAR',\n  'REAL',\n  'TEXT',\n  'VARCHAR',\n  'VARYING CHARACTER',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './sqlite.functions.js';\nimport { dataTypes, keywords } from './sqlite.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT [OR ABORT | OR FAIL | OR IGNORE | OR REPLACE | OR ROLLBACK] INTO',\n  'REPLACE INTO',\n  'VALUES',\n  // - update:\n  'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [TEMPORARY | TEMP] TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [TEMPORARY | TEMP] VIEW [IF NOT EXISTS]',\n  // - update:\n  'UPDATE [OR ABORT | OR FAIL | OR IGNORE | OR REPLACE | OR ROLLBACK]',\n  // - insert:\n  'ON CONFLICT',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD [COLUMN]',\n  'DROP [COLUMN]',\n  'RENAME [COLUMN]',\n  'RENAME TO',\n  // - set schema\n  'SET SCHEMA',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\n// joins - https://www.sqlite.org/syntax/join-operator.html\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  '{ROWS | RANGE | GROUPS} BETWEEN',\n  'DO UPDATE',\n]);\n\nexport const sqlite: DialectOptions = {\n  name: 'sqlite',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    stringTypes: [\n      \"''-qq\",\n      { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n      // Depending on context SQLite also supports double-quotes for strings,\n      // and single-quotes for identifiers.\n    ],\n    identTypes: [`\"\"-qq`, '``', '[]'],\n    // https://www.sqlite.org/lang_expr.html#parameters\n    paramTypes: { positional: true, numbered: ['?'], named: [':', '@', '$'] },\n    operators: ['%', '~', '&', '|', '<<', '>>', '==', '->', '->>', '||'],\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const functions: string[] = [\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_9_set_function_specification\n  'GROUPING',\n\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_10_window_function\n  'RANK',\n  'DENSE_RANK',\n  'PERCENT_RANK',\n  'CUME_DIST',\n  'ROW_NUMBER',\n\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_27_numeric_value_function\n  'POSITION',\n  'OCCURRENCES_REGEX',\n  'POSITION_REGEX',\n  'EXTRACT',\n  'CHAR_LENGTH',\n  'CHARACTER_LENGTH',\n  'OCTET_LENGTH',\n  'CARDINALITY',\n  'ABS',\n  'MOD',\n  'LN',\n  'EXP',\n  'POWER',\n  'SQRT',\n  'FLOOR',\n  'CEIL',\n  'CEILING',\n  'WIDTH_BUCKET',\n\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_29_string_value_function\n  'SUBSTRING',\n  'SUBSTRING_REGEX',\n  'UPPER',\n  'LOWER',\n  'CONVERT',\n  'TRANSLATE',\n  'TRANSLATE_REGEX',\n  'TRIM',\n  'OVERLAY',\n  'NORMALIZE',\n  'SPECIFICTYPE',\n\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_31_datetime_value_function\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'LOCALTIME',\n  'CURRENT_TIMESTAMP',\n  'LOCALTIMESTAMP',\n\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_38_multiset_value_function\n  // SET serves multiple roles: a SET() function and a SET keyword e.g. in UPDATE table SET ...\n  // multiset\n  // 'SET', (disabled for now)\n\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_10_9_aggregate_function\n  'COUNT',\n  'AVG',\n  'MAX',\n  'MIN',\n  'SUM',\n  // 'EVERY',\n  // 'ANY',\n  // 'SOME',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'VAR_SAMP',\n  'VAR_POP',\n  'COLLECT',\n  'FUSION',\n  'INTERSECTION',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'CORR',\n  'REGR_SLOPE',\n  'REGR_INTERCEPT',\n  'REGR_COUNT',\n  'REGR_R2',\n  'REGR_AVGX',\n  'REGR_AVGY',\n  'REGR_SXX',\n  'REGR_SYY',\n  'REGR_SXY',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n\n  // CAST is a pretty complex case, involving multiple forms:\n  // - CAST(col AS int)\n  // - CAST(...) WITH ...\n  // - CAST FROM int\n  // - CREATE CAST(mycol AS int) WITH ...\n  'CAST',\n\n  // Shorthand functions to use in place of CASE expression\n  'COALESCE',\n  'NULLIF',\n\n  // Non-standard functions that have widespread support\n  'ROUND',\n  'SIN',\n  'COS',\n  'TAN',\n  'ASIN',\n  'ACOS',\n  'ATAN',\n];\n","export const keywords: string[] = [\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#reserved-word\n  'ALL',\n  'ALLOCATE',\n  'ALTER',\n  'ANY', // <- moved over from functions\n  'ARE',\n  'AS',\n  'ASC', // Not reserved in SQL-2008, but commonly reserved in most dialects\n  'ASENSITIVE',\n  'ASYMMETRIC',\n  'AT',\n  'ATOMIC',\n  'AUTHORIZATION',\n  'BEGIN',\n  'BETWEEN',\n  'BOTH',\n  'BY',\n  'CALL',\n  'CALLED',\n  'CASCADED',\n  'CAST',\n  'CHECK',\n  'CLOSE',\n  'COALESCE',\n  'COLLATE',\n  'COLUMN',\n  'COMMIT',\n  'CONDITION',\n  'CONNECT',\n  'CONSTRAINT',\n  'CORRESPONDING',\n  'CREATE',\n  'CROSS',\n  'CUBE',\n  'CURRENT',\n  'CURRENT_CATALOG',\n  'CURRENT_DEFAULT_TRANSFORM_GROUP',\n  'CURRENT_PATH',\n  'CURRENT_ROLE',\n  'CURRENT_SCHEMA',\n  'CURRENT_TRANSFORM_GROUP_FOR_TYPE',\n  'CURRENT_USER',\n  'CURSOR',\n  'CYCLE',\n  'DEALLOCATE',\n  'DAY',\n  'DECLARE',\n  'DEFAULT',\n  'DELETE',\n  'DEREF',\n  'DESC', // Not reserved in SQL-2008, but commonly reserved in most dialects\n  'DESCRIBE',\n  'DETERMINISTIC',\n  'DISCONNECT',\n  'DISTINCT',\n  'DROP',\n  'DYNAMIC',\n  'EACH',\n  'ELEMENT',\n  'END-EXEC',\n  'ESCAPE',\n  'EVERY', // <- moved over from functions\n  'EXCEPT',\n  'EXEC',\n  'EXECUTE',\n  'EXISTS',\n  'EXTERNAL',\n  'FALSE',\n  'FETCH',\n  'FILTER',\n  'FOR',\n  'FOREIGN',\n  'FREE',\n  'FROM',\n  'FULL',\n  'FUNCTION',\n  'GET',\n  'GLOBAL',\n  'GRANT',\n  'GROUP',\n  'HAVING',\n  'HOLD',\n  'HOUR',\n  'IDENTITY',\n  'IN',\n  'INDICATOR',\n  'INNER',\n  'INOUT',\n  'INSENSITIVE',\n  'INSERT',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'LANGUAGE',\n  'LARGE',\n  'LATERAL',\n  'LEADING',\n  'LEFT',\n  'LIKE',\n  'LIKE_REGEX',\n  'LOCAL',\n  'MATCH',\n  'MEMBER',\n  'MERGE',\n  'METHOD',\n  'MINUTE',\n  'MODIFIES',\n  'MODULE',\n  'MONTH',\n  'NATURAL',\n  'NEW',\n  'NO',\n  'NONE',\n  'NOT',\n  'NULL',\n  'NULLIF',\n  'OF',\n  'OLD',\n  'ON',\n  'ONLY',\n  'OPEN',\n  'ORDER',\n  'OUT',\n  'OUTER',\n  'OVER',\n  'OVERLAPS',\n  'PARAMETER',\n  'PARTITION',\n  'PRECISION',\n  'PREPARE',\n  'PRIMARY',\n  'PROCEDURE',\n  'RANGE',\n  'READS',\n  'REAL',\n  'RECURSIVE',\n  'REF',\n  'REFERENCES',\n  'REFERENCING',\n  'RELEASE',\n  'RESULT',\n  'RETURN',\n  'RETURNS',\n  'REVOKE',\n  'RIGHT',\n  'ROLLBACK',\n  'ROLLUP',\n  'ROW',\n  'ROWS',\n  'SAVEPOINT',\n  'SCOPE',\n  'SCROLL',\n  'SEARCH',\n  'SECOND',\n  'SELECT',\n  'SENSITIVE',\n  'SESSION_USER',\n  'SET',\n  'SIMILAR',\n  'SOME', // <- moved over from functions\n  'SPECIFIC',\n  'SQL',\n  'SQLEXCEPTION',\n  'SQLSTATE',\n  'SQLWARNING',\n  'START',\n  'STATIC',\n  'SUBMULTISET',\n  'SYMMETRIC',\n  'SYSTEM',\n  'SYSTEM_USER',\n  'TABLE',\n  'TABLESAMPLE',\n  'THEN',\n  'TIMEZONE_HOUR',\n  'TIMEZONE_MINUTE',\n  'TO',\n  'TRAILING',\n  'TRANSLATION',\n  'TREAT',\n  'TRIGGER',\n  'TRUE',\n  'UESCAPE',\n  'UNION',\n  'UNIQUE',\n  'UNKNOWN',\n  'UNNEST',\n  'UPDATE',\n  'USER',\n  'USING',\n  'VALUE',\n  'VALUES',\n  'WHENEVER',\n  'WINDOW',\n  'WITHIN',\n  'WITHOUT',\n  'YEAR',\n];\n\nexport const dataTypes: string[] = [\n  // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_1_data_type\n  'ARRAY',\n  'BIGINT',\n  'BINARY LARGE OBJECT',\n  'BINARY VARYING',\n  'BINARY',\n  'BLOB',\n  'BOOLEAN',\n  'CHAR LARGE OBJECT',\n  'CHAR VARYING',\n  'CHAR',\n  'CHARACTER LARGE OBJECT',\n  'CHARACTER VARYING',\n  'CHARACTER',\n  'CLOB',\n  'DATE',\n  'DEC',\n  'DECIMAL',\n  'DOUBLE',\n  'FLOAT',\n  'INT',\n  'INTEGER',\n  'INTERVAL',\n  'MULTISET',\n  'NATIONAL CHAR VARYING',\n  'NATIONAL CHAR',\n  'NATIONAL CHARACTER LARGE OBJECT',\n  'NATIONAL CHARACTER VARYING',\n  'NATIONAL CHARACTER',\n  'NCHAR LARGE OBJECT',\n  'NCHAR VARYING',\n  'NCHAR',\n  'NCLOB',\n  'NUMERIC',\n  'SMALLINT',\n  'TIME',\n  'TIMESTAMP',\n  'VARBINARY',\n  'VARCHAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './sql.functions.js';\nimport { dataTypes, keywords } from './sql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY [ALL | DISTINCT]',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [GLOBAL TEMPORARY | LOCAL TEMPORARY] TABLE']);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [RECURSIVE] VIEW',\n  // - update:\n  'UPDATE',\n  'WHERE CURRENT OF',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD COLUMN',\n  'DROP [COLUMN]',\n  'RENAME COLUMN',\n  'RENAME TO',\n  'ALTER [COLUMN]',\n  '{SET | DROP} DEFAULT', // for alter column\n  'ADD SCOPE', // for alter column\n  'DROP SCOPE {CASCADE | RESTRICT}', // for alter column\n  'RESTART WITH', // for alter column\n  // - truncate:\n  'TRUNCATE TABLE',\n  // other\n  'SET SCHEMA',\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const sql: DialectOptions = {\n  name: 'sql',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    stringTypes: [\n      { quote: \"''-qq-bs\", prefixes: ['N', 'U&'] },\n      { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n    ],\n    identTypes: [`\"\"-qq`, '``'],\n    paramTypes: { positional: true },\n    operators: ['||'],\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const functions: string[] = [\n  // https://github.com/trinodb/trino/tree/432d2897bdef99388c1a47188743a061c4ac1f34/docs/src/main/sphinx/functions\n  // rg '^\\.\\. function::' ./docs/src/main/sphinx/functions | cut -d' ' -f 3 | cut -d '(' -f 1 | sort | uniq\n  // rg '\\* ' ./docs/src/main/sphinx/functions/list-by-topic.rst | grep    '\\* :func:' | cut -d'`' -f 2\n  // rg '\\* ' ./docs/src/main/sphinx/functions/list-by-topic.rst | grep -v '\\* :func:'\n  // grep -e '^- ' ./docs/src/main/sphinx/functions/list.rst | grep  -e '^- :func:' | cut -d'`' -f2\n  // grep -e '^- ' ./docs/src/main/sphinx/functions/list.rst | grep -ve '^- :func:'\n  'ABS',\n  'ACOS',\n  'ALL_MATCH',\n  'ANY_MATCH',\n  'APPROX_DISTINCT',\n  'APPROX_MOST_FREQUENT',\n  'APPROX_PERCENTILE',\n  'APPROX_SET',\n  'ARBITRARY',\n  'ARRAYS_OVERLAP',\n  'ARRAY_AGG',\n  'ARRAY_DISTINCT',\n  'ARRAY_EXCEPT',\n  'ARRAY_INTERSECT',\n  'ARRAY_JOIN',\n  'ARRAY_MAX',\n  'ARRAY_MIN',\n  'ARRAY_POSITION',\n  'ARRAY_REMOVE',\n  'ARRAY_SORT',\n  'ARRAY_UNION',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'AT_TIMEZONE',\n  'AVG',\n  'BAR',\n  'BETA_CDF',\n  'BING_TILE',\n  'BING_TILES_AROUND',\n  'BING_TILE_AT',\n  'BING_TILE_COORDINATES',\n  'BING_TILE_POLYGON',\n  'BING_TILE_QUADKEY',\n  'BING_TILE_ZOOM_LEVEL',\n  'BITWISE_AND',\n  'BITWISE_AND_AGG',\n  'BITWISE_LEFT_SHIFT',\n  'BITWISE_NOT',\n  'BITWISE_OR',\n  'BITWISE_OR_AGG',\n  'BITWISE_RIGHT_SHIFT',\n  'BITWISE_RIGHT_SHIFT_ARITHMETIC',\n  'BITWISE_XOR',\n  'BIT_COUNT',\n  'BOOL_AND',\n  'BOOL_OR',\n  'CARDINALITY',\n  'CAST',\n  'CBRT',\n  'CEIL',\n  'CEILING',\n  'CHAR2HEXINT',\n  'CHECKSUM',\n  'CHR',\n  'CLASSIFY',\n  'COALESCE',\n  'CODEPOINT',\n  'COLOR',\n  'COMBINATIONS',\n  'CONCAT',\n  'CONCAT_WS',\n  'CONTAINS',\n  'CONTAINS_SEQUENCE',\n  'CONVEX_HULL_AGG',\n  'CORR',\n  'COS',\n  'COSH',\n  'COSINE_SIMILARITY',\n  'COUNT',\n  'COUNT_IF',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'CRC32',\n  'CUME_DIST',\n  'CURRENT_CATALOG',\n  'CURRENT_DATE',\n  'CURRENT_GROUPS',\n  'CURRENT_SCHEMA',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_TIMEZONE',\n  'CURRENT_USER',\n  'DATE',\n  'DATE_ADD',\n  'DATE_DIFF',\n  'DATE_FORMAT',\n  'DATE_PARSE',\n  'DATE_TRUNC',\n  'DAY',\n  'DAY_OF_MONTH',\n  'DAY_OF_WEEK',\n  'DAY_OF_YEAR',\n  'DEGREES',\n  'DENSE_RANK',\n  'DOW',\n  'DOY',\n  'E',\n  'ELEMENT_AT',\n  'EMPTY_APPROX_SET',\n  'EVALUATE_CLASSIFIER_PREDICTIONS',\n  'EVERY',\n  'EXP',\n  'EXTRACT',\n  'FEATURES',\n  'FILTER',\n  'FIRST_VALUE',\n  'FLATTEN',\n  'FLOOR',\n  'FORMAT',\n  'FORMAT_DATETIME',\n  'FORMAT_NUMBER',\n  'FROM_BASE',\n  'FROM_BASE32',\n  'FROM_BASE64',\n  'FROM_BASE64URL',\n  'FROM_BIG_ENDIAN_32',\n  'FROM_BIG_ENDIAN_64',\n  'FROM_ENCODED_POLYLINE',\n  'FROM_GEOJSON_GEOMETRY',\n  'FROM_HEX',\n  'FROM_IEEE754_32',\n  'FROM_IEEE754_64',\n  'FROM_ISO8601_DATE',\n  'FROM_ISO8601_TIMESTAMP',\n  'FROM_ISO8601_TIMESTAMP_NANOS',\n  'FROM_UNIXTIME',\n  'FROM_UNIXTIME_NANOS',\n  'FROM_UTF8',\n  'GEOMETRIC_MEAN',\n  'GEOMETRY_FROM_HADOOP_SHAPE',\n  'GEOMETRY_INVALID_REASON',\n  'GEOMETRY_NEAREST_POINTS',\n  'GEOMETRY_TO_BING_TILES',\n  'GEOMETRY_UNION',\n  'GEOMETRY_UNION_AGG',\n  'GREATEST',\n  'GREAT_CIRCLE_DISTANCE',\n  'HAMMING_DISTANCE',\n  'HASH_COUNTS',\n  'HISTOGRAM',\n  'HMAC_MD5',\n  'HMAC_SHA1',\n  'HMAC_SHA256',\n  'HMAC_SHA512',\n  'HOUR',\n  'HUMAN_READABLE_SECONDS',\n  'IF',\n  'INDEX',\n  'INFINITY',\n  'INTERSECTION_CARDINALITY',\n  'INVERSE_BETA_CDF',\n  'INVERSE_NORMAL_CDF',\n  'IS_FINITE',\n  'IS_INFINITE',\n  'IS_JSON_SCALAR',\n  'IS_NAN',\n  'JACCARD_INDEX',\n  'JSON_ARRAY_CONTAINS',\n  'JSON_ARRAY_GET',\n  'JSON_ARRAY_LENGTH',\n  'JSON_EXISTS',\n  'JSON_EXTRACT',\n  'JSON_EXTRACT_SCALAR',\n  'JSON_FORMAT',\n  'JSON_PARSE',\n  'JSON_QUERY',\n  'JSON_SIZE',\n  'JSON_VALUE',\n  'KURTOSIS',\n  'LAG',\n  'LAST_DAY_OF_MONTH',\n  'LAST_VALUE',\n  'LEAD',\n  'LEARN_CLASSIFIER',\n  'LEARN_LIBSVM_CLASSIFIER',\n  'LEARN_LIBSVM_REGRESSOR',\n  'LEARN_REGRESSOR',\n  'LEAST',\n  'LENGTH',\n  'LEVENSHTEIN_DISTANCE',\n  'LINE_INTERPOLATE_POINT',\n  'LINE_INTERPOLATE_POINTS',\n  'LINE_LOCATE_POINT',\n  'LISTAGG',\n  'LN',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOG',\n  'LOG10',\n  'LOG2',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'LUHN_CHECK',\n  'MAKE_SET_DIGEST',\n  'MAP',\n  'MAP_AGG',\n  'MAP_CONCAT',\n  'MAP_ENTRIES',\n  'MAP_FILTER',\n  'MAP_FROM_ENTRIES',\n  'MAP_KEYS',\n  'MAP_UNION',\n  'MAP_VALUES',\n  'MAP_ZIP_WITH',\n  'MAX',\n  'MAX_BY',\n  'MD5',\n  'MERGE',\n  'MERGE_SET_DIGEST',\n  'MILLISECOND',\n  'MIN',\n  'MINUTE',\n  'MIN_BY',\n  'MOD',\n  'MONTH',\n  'MULTIMAP_AGG',\n  'MULTIMAP_FROM_ENTRIES',\n  'MURMUR3',\n  'NAN',\n  'NGRAMS',\n  'NONE_MATCH',\n  'NORMALIZE',\n  'NORMAL_CDF',\n  'NOW',\n  'NTH_VALUE',\n  'NTILE',\n  'NULLIF',\n  'NUMERIC_HISTOGRAM',\n  'OBJECTID',\n  'OBJECTID_TIMESTAMP',\n  'PARSE_DATA_SIZE',\n  'PARSE_DATETIME',\n  'PARSE_DURATION',\n  'PERCENT_RANK',\n  'PI',\n  'POSITION',\n  'POW',\n  'POWER',\n  'QDIGEST_AGG',\n  'QUARTER',\n  'RADIANS',\n  'RAND',\n  'RANDOM',\n  'RANK',\n  'REDUCE',\n  'REDUCE_AGG',\n  'REGEXP_COUNT',\n  'REGEXP_EXTRACT',\n  'REGEXP_EXTRACT_ALL',\n  'REGEXP_LIKE',\n  'REGEXP_POSITION',\n  'REGEXP_REPLACE',\n  'REGEXP_SPLIT',\n  'REGRESS',\n  'REGR_INTERCEPT',\n  'REGR_SLOPE',\n  'RENDER',\n  'REPEAT',\n  'REPLACE',\n  'REVERSE',\n  'RGB',\n  'ROUND',\n  'ROW_NUMBER',\n  'RPAD',\n  'RTRIM',\n  'SECOND',\n  'SEQUENCE',\n  'SHA1',\n  'SHA256',\n  'SHA512',\n  'SHUFFLE',\n  'SIGN',\n  'SIMPLIFY_GEOMETRY',\n  'SIN',\n  'SKEWNESS',\n  'SLICE',\n  'SOUNDEX',\n  'SPATIAL_PARTITIONING',\n  'SPATIAL_PARTITIONS',\n  'SPLIT',\n  'SPLIT_PART',\n  'SPLIT_TO_MAP',\n  'SPLIT_TO_MULTIMAP',\n  'SPOOKY_HASH_V2_32',\n  'SPOOKY_HASH_V2_64',\n  'SQRT',\n  'STARTS_WITH',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STRPOS',\n  'ST_AREA',\n  'ST_ASBINARY',\n  'ST_ASTEXT',\n  'ST_BOUNDARY',\n  'ST_BUFFER',\n  'ST_CENTROID',\n  'ST_CONTAINS',\n  'ST_CONVEXHULL',\n  'ST_COORDDIM',\n  'ST_CROSSES',\n  'ST_DIFFERENCE',\n  'ST_DIMENSION',\n  'ST_DISJOINT',\n  'ST_DISTANCE',\n  'ST_ENDPOINT',\n  'ST_ENVELOPE',\n  'ST_ENVELOPEASPTS',\n  'ST_EQUALS',\n  'ST_EXTERIORRING',\n  'ST_GEOMETRIES',\n  'ST_GEOMETRYFROMTEXT',\n  'ST_GEOMETRYN',\n  'ST_GEOMETRYTYPE',\n  'ST_GEOMFROMBINARY',\n  'ST_INTERIORRINGN',\n  'ST_INTERIORRINGS',\n  'ST_INTERSECTION',\n  'ST_INTERSECTS',\n  'ST_ISCLOSED',\n  'ST_ISEMPTY',\n  'ST_ISRING',\n  'ST_ISSIMPLE',\n  'ST_ISVALID',\n  'ST_LENGTH',\n  'ST_LINEFROMTEXT',\n  'ST_LINESTRING',\n  'ST_MULTIPOINT',\n  'ST_NUMGEOMETRIES',\n  'ST_NUMINTERIORRING',\n  'ST_NUMPOINTS',\n  'ST_OVERLAPS',\n  'ST_POINT',\n  'ST_POINTN',\n  'ST_POINTS',\n  'ST_POLYGON',\n  'ST_RELATE',\n  'ST_STARTPOINT',\n  'ST_SYMDIFFERENCE',\n  'ST_TOUCHES',\n  'ST_UNION',\n  'ST_WITHIN',\n  'ST_X',\n  'ST_XMAX',\n  'ST_XMIN',\n  'ST_Y',\n  'ST_YMAX',\n  'ST_YMIN',\n  'SUBSTR',\n  'SUBSTRING',\n  'SUM',\n  'TAN',\n  'TANH',\n  'TDIGEST_AGG',\n  'TIMESTAMP_OBJECTID',\n  'TIMEZONE_HOUR',\n  'TIMEZONE_MINUTE',\n  'TO_BASE',\n  'TO_BASE32',\n  'TO_BASE64',\n  'TO_BASE64URL',\n  'TO_BIG_ENDIAN_32',\n  'TO_BIG_ENDIAN_64',\n  'TO_CHAR',\n  'TO_DATE',\n  'TO_ENCODED_POLYLINE',\n  'TO_GEOJSON_GEOMETRY',\n  'TO_GEOMETRY',\n  'TO_HEX',\n  'TO_IEEE754_32',\n  'TO_IEEE754_64',\n  'TO_ISO8601',\n  'TO_MILLISECONDS',\n  'TO_SPHERICAL_GEOGRAPHY',\n  'TO_TIMESTAMP',\n  'TO_UNIXTIME',\n  'TO_UTF8',\n  'TRANSFORM',\n  'TRANSFORM_KEYS',\n  'TRANSFORM_VALUES',\n  'TRANSLATE',\n  'TRIM',\n  'TRIM_ARRAY',\n  'TRUNCATE',\n  'TRY',\n  'TRY_CAST',\n  'TYPEOF',\n  'UPPER',\n  'URL_DECODE',\n  'URL_ENCODE',\n  'URL_EXTRACT_FRAGMENT',\n  'URL_EXTRACT_HOST',\n  'URL_EXTRACT_PARAMETER',\n  'URL_EXTRACT_PATH',\n  'URL_EXTRACT_PORT',\n  'URL_EXTRACT_PROTOCOL',\n  'URL_EXTRACT_QUERY',\n  'UUID',\n  'VALUES_AT_QUANTILES',\n  'VALUE_AT_QUANTILE',\n  'VARIANCE',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VERSION',\n  'WEEK',\n  'WEEK_OF_YEAR',\n  'WIDTH_BUCKET',\n  'WILSON_INTERVAL_LOWER',\n  'WILSON_INTERVAL_UPPER',\n  'WITH_TIMEZONE',\n  'WORD_STEM',\n  'XXHASH64',\n  'YEAR',\n  'YEAR_OF_WEEK',\n  'YOW',\n  'ZIP',\n  'ZIP_WITH',\n\n  // https://trino.io/docs/current/sql/match-recognize.html#row-pattern-recognition-expressions\n  'CLASSIFIER',\n  'FIRST',\n  'LAST',\n  'MATCH_NUMBER',\n  'NEXT',\n  'PERMUTE',\n  'PREV',\n];\n","export const keywords: string[] = [\n  // https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L858-L1128\n  'ABSENT',\n  'ADD',\n  'ADMIN',\n  'AFTER',\n  'ALL',\n  'ALTER',\n  'ANALYZE',\n  'AND',\n  'ANY',\n  'AS',\n  'ASC',\n  'AT',\n  'AUTHORIZATION',\n  'BERNOULLI',\n  'BETWEEN',\n  'BOTH',\n  'BY',\n  'CALL',\n  'CASCADE',\n  'CASE',\n  'CATALOGS',\n  'COLUMN',\n  'COLUMNS',\n  'COMMENT',\n  'COMMIT',\n  'COMMITTED',\n  'CONDITIONAL',\n  'CONSTRAINT',\n  'COPARTITION',\n  'CREATE',\n  'CROSS',\n  'CUBE',\n  'CURRENT',\n  'CURRENT_PATH',\n  'CURRENT_ROLE',\n  'DATA',\n  'DEALLOCATE',\n  'DEFAULT',\n  'DEFINE',\n  'DEFINER',\n  'DELETE',\n  'DENY',\n  'DESC',\n  'DESCRIBE',\n  'DESCRIPTOR',\n  'DISTINCT',\n  'DISTRIBUTED',\n  'DOUBLE',\n  'DROP',\n  'ELSE',\n  'EMPTY',\n  'ENCODING',\n  'END',\n  'ERROR',\n  'ESCAPE',\n  'EXCEPT',\n  'EXCLUDING',\n  'EXECUTE',\n  'EXISTS',\n  'EXPLAIN',\n  'FALSE',\n  'FETCH',\n  'FINAL',\n  'FIRST',\n  'FOLLOWING',\n  'FOR',\n  'FROM',\n  'FULL',\n  'FUNCTIONS',\n  'GRANT',\n  'GRANTED',\n  'GRANTS',\n  'GRAPHVIZ',\n  'GROUP',\n  'GROUPING',\n  'GROUPS',\n  'HAVING',\n  'IGNORE',\n  'IN',\n  'INCLUDING',\n  'INITIAL',\n  'INNER',\n  'INPUT',\n  'INSERT',\n  'INTERSECT',\n  'INTERVAL',\n  'INTO',\n  'INVOKER',\n  'IO',\n  'IS',\n  'ISOLATION',\n  'JOIN',\n  'JSON',\n  'JSON_ARRAY',\n  'JSON_OBJECT',\n  'KEEP',\n  'KEY',\n  'KEYS',\n  'LAST',\n  'LATERAL',\n  'LEADING',\n  'LEFT',\n  'LEVEL',\n  'LIKE',\n  'LIMIT',\n  'LOCAL',\n  'LOGICAL',\n  'MATCH',\n  'MATCHED',\n  'MATCHES',\n  'MATCH_RECOGNIZE',\n  'MATERIALIZED',\n  'MEASURES',\n  'NATURAL',\n  'NEXT',\n  'NFC',\n  'NFD',\n  'NFKC',\n  'NFKD',\n  'NO',\n  'NONE',\n  'NOT',\n  'NULL',\n  'NULLS',\n  'OBJECT',\n  'OF',\n  'OFFSET',\n  'OMIT',\n  'ON',\n  'ONE',\n  'ONLY',\n  'OPTION',\n  'OR',\n  'ORDER',\n  'ORDINALITY',\n  'OUTER',\n  'OUTPUT',\n  'OVER',\n  'OVERFLOW',\n  'PARTITION',\n  'PARTITIONS',\n  'PASSING',\n  'PAST',\n  'PATH',\n  'PATTERN',\n  'PER',\n  'PERMUTE',\n  'PRECEDING',\n  'PRECISION',\n  'PREPARE',\n  'PRIVILEGES',\n  'PROPERTIES',\n  'PRUNE',\n  'QUOTES',\n  'RANGE',\n  'READ',\n  'RECURSIVE',\n  'REFRESH',\n  'RENAME',\n  'REPEATABLE',\n  'RESET',\n  'RESPECT',\n  'RESTRICT',\n  'RETURNING',\n  'REVOKE',\n  'RIGHT',\n  'ROLE',\n  'ROLES',\n  'ROLLBACK',\n  'ROLLUP',\n  'ROW',\n  'ROWS',\n  'RUNNING',\n  'SCALAR',\n  'SCHEMA',\n  'SCHEMAS',\n  'SECURITY',\n  'SEEK',\n  'SELECT',\n  'SERIALIZABLE',\n  'SESSION',\n  'SET',\n  'SETS',\n  'SHOW',\n  'SKIP',\n  'SOME',\n  'START',\n  'STATS',\n  'STRING',\n  'SUBSET',\n  'SYSTEM',\n  'TABLE',\n  'TABLES',\n  'TABLESAMPLE',\n  'TEXT',\n  'THEN',\n  'TIES',\n  'TIME',\n  'TIMESTAMP',\n  'TO',\n  'TRAILING',\n  'TRANSACTION',\n  'TRUE',\n  'TYPE',\n  'UESCAPE',\n  'UNBOUNDED',\n  'UNCOMMITTED',\n  'UNCONDITIONAL',\n  'UNION',\n  'UNIQUE',\n  'UNKNOWN',\n  'UNMATCHED',\n  'UNNEST',\n  'UPDATE',\n  'USE',\n  'USER',\n  'USING',\n  'UTF16',\n  'UTF32',\n  'UTF8',\n  'VALIDATE',\n  'VALUE',\n  'VALUES',\n  'VERBOSE',\n  'VIEW',\n  'WHEN',\n  'WHERE',\n  'WINDOW',\n  'WITH',\n  'WITHIN',\n  'WITHOUT',\n  'WORK',\n  'WRAPPER',\n  'WRITE',\n  'ZONE',\n];\n\nexport const dataTypes: string[] = [\n  // https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-main/src/main/java/io/trino/metadata/TypeRegistry.java#L131-L168\n  // or https://trino.io/docs/current/language/types.html\n  'BIGINT',\n  'INT',\n  'INTEGER',\n  'SMALLINT',\n  'TINYINT',\n  'BOOLEAN',\n  'DATE',\n  'DECIMAL',\n  'REAL',\n  'DOUBLE',\n  'HYPERLOGLOG',\n  'QDIGEST',\n  'TDIGEST',\n  'P4HYPERLOGLOG',\n  'INTERVAL',\n  'TIMESTAMP',\n  'TIME',\n  'VARBINARY',\n  'VARCHAR',\n  'CHAR',\n  'ROW',\n  'ARRAY',\n  'MAP',\n  'JSON',\n  'JSON2016',\n  'IPADDRESS',\n  'GEOMETRY',\n  'UUID',\n  'SETDIGEST',\n  'JONIREGEXP',\n  'RE2JREGEXP',\n  'LIKEPATTERN',\n  'COLOR',\n  'CODEPOINTS',\n  'FUNCTION',\n  'JSONPATH',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './trino.functions.js';\nimport { dataTypes, keywords } from './trino.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L41\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY [ALL | DISTINCT]',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  // Data manipulation\n  // - insert:\n  'INSERT INTO',\n  'VALUES',\n  // - update:\n  'SET',\n  // MATCH_RECOGNIZE\n  'MATCH_RECOGNIZE',\n  'MEASURES',\n  'ONE ROW PER MATCH',\n  'ALL ROWS PER MATCH',\n  'AFTER MATCH',\n  'PATTERN',\n  'SUBSET',\n  'DEFINE',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE] [MATERIALIZED] VIEW',\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE [IF EXISTS]',\n  'ADD COLUMN [IF NOT EXISTS]',\n  'DROP COLUMN [IF EXISTS]',\n  'RENAME COLUMN [IF EXISTS]',\n  'RENAME TO',\n  'SET AUTHORIZATION [USER | ROLE]',\n  'SET PROPERTIES',\n  'EXECUTE',\n  // - truncate:\n  'TRUNCATE TABLE',\n\n  // other\n  'ALTER SCHEMA',\n  'ALTER MATERIALIZED VIEW',\n  'ALTER VIEW',\n  'CREATE SCHEMA',\n  'CREATE ROLE',\n  'DROP SCHEMA',\n  'DROP MATERIALIZED VIEW',\n  'DROP VIEW',\n  'DROP ROLE',\n  // Auxiliary\n  'EXPLAIN',\n  'ANALYZE',\n  'EXPLAIN ANALYZE',\n  'EXPLAIN ANALYZE VERBOSE',\n  'USE',\n\n  'DESCRIBE INPUT',\n  'DESCRIBE OUTPUT',\n\n  'REFRESH MATERIALIZED VIEW',\n  'RESET SESSION',\n  'SET SESSION',\n  'SET PATH',\n  'SET TIME ZONE',\n\n  'SHOW GRANTS',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE SCHEMA',\n  'SHOW CREATE VIEW',\n  'SHOW CREATE MATERIALIZED VIEW',\n  'SHOW TABLES',\n  'SHOW SCHEMAS',\n  'SHOW CATALOGS',\n  'SHOW COLUMNS',\n  'SHOW STATS FOR',\n  'SHOW ROLES',\n  'SHOW CURRENT ROLES',\n  'SHOW ROLE GRANTS',\n  'SHOW FUNCTIONS',\n  'SHOW SESSION',\n]);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L231-L235\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L288-L291\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT [ALL | DISTINCT]',\n  'INTERSECT [ALL | DISTINCT]',\n]);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L299-L313\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL [INNER] JOIN',\n  'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  '{ROWS | RANGE | GROUPS} BETWEEN',\n  // comparison operator\n  'IS [NOT] DISTINCT FROM',\n]);\n\nexport const trino: DialectOptions = {\n  name: 'trino',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    // Trino also supports {- ... -} parenthesis.\n    // The formatting of these currently works out as a result of { and -\n    // not getting a space added in-between.\n    // https://trino.io/docs/current/sql/match-recognize.html#row-pattern-syntax\n    extraParens: ['[]', '{}'],\n    // https://trino.io/docs/current/language/types.html#string\n    // https://trino.io/docs/current/language/types.html#varbinary\n    stringTypes: [\n      { quote: \"''-qq\", prefixes: ['U&'] },\n      { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n    ],\n    // https://trino.io/docs/current/language/reserved.html\n    identTypes: ['\"\"-qq'],\n    paramTypes: { positional: true },\n    operators: [\n      '%',\n      '->',\n      '=>',\n      ':',\n      '||',\n      // Row pattern syntax\n      '|',\n      '^',\n      '$',\n      // '?', conflicts with positional placeholders\n    ],\n  },\n  formatOptions: {\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const functions: string[] = [\n  // https://docs.microsoft.com/en-us/sql/t-sql/functions/functions?view=sql-server-ver15\n  // aggregate\n  'APPROX_COUNT_DISTINCT',\n  'AVG',\n  'CHECKSUM_AGG',\n  'COUNT',\n  'COUNT_BIG',\n  'GROUPING',\n  'GROUPING_ID',\n  'MAX',\n  'MIN',\n  'STDEV',\n  'STDEVP',\n  'SUM',\n  'VAR',\n  'VARP',\n\n  // analytic\n  'CUME_DIST',\n  'FIRST_VALUE',\n  'LAG',\n  'LAST_VALUE',\n  'LEAD',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'PERCENT_RANK',\n  'Collation - COLLATIONPROPERTY',\n  'Collation - TERTIARY_WEIGHTS',\n\n  // configuration\n  '@@DBTS',\n  '@@LANGID',\n  '@@LANGUAGE',\n  '@@LOCK_TIMEOUT',\n  '@@MAX_CONNECTIONS',\n  '@@MAX_PRECISION',\n  '@@NESTLEVEL',\n  '@@OPTIONS',\n  '@@REMSERVER',\n  '@@SERVERNAME',\n  '@@SERVICENAME',\n  '@@SPID',\n  '@@TEXTSIZE',\n  '@@VERSION',\n\n  // conversion\n  'CAST',\n  'CONVERT',\n  'PARSE',\n  'TRY_CAST',\n  'TRY_CONVERT',\n  'TRY_PARSE',\n\n  // cryptographic\n  'ASYMKEY_ID',\n  'ASYMKEYPROPERTY',\n  'CERTPROPERTY',\n  'CERT_ID',\n  'CRYPT_GEN_RANDOM',\n  'DECRYPTBYASYMKEY',\n  'DECRYPTBYCERT',\n  'DECRYPTBYKEY',\n  'DECRYPTBYKEYAUTOASYMKEY',\n  'DECRYPTBYKEYAUTOCERT',\n  'DECRYPTBYPASSPHRASE',\n  'ENCRYPTBYASYMKEY',\n  'ENCRYPTBYCERT',\n  'ENCRYPTBYKEY',\n  'ENCRYPTBYPASSPHRASE',\n  'HASHBYTES',\n  'IS_OBJECTSIGNED',\n  'KEY_GUID',\n  'KEY_ID',\n  'KEY_NAME',\n  'SIGNBYASYMKEY',\n  'SIGNBYCERT',\n  'SYMKEYPROPERTY',\n  'VERIFYSIGNEDBYCERT',\n  'VERIFYSIGNEDBYASYMKEY',\n\n  // cursor\n  '@@CURSOR_ROWS',\n  '@@FETCH_STATUS',\n  'CURSOR_STATUS',\n\n  // dataType\n  'DATALENGTH',\n  'IDENT_CURRENT',\n  'IDENT_INCR',\n  'IDENT_SEED',\n  'IDENTITY',\n  'SQL_VARIANT_PROPERTY',\n\n  // datetime\n  '@@DATEFIRST',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_TIMEZONE',\n  'CURRENT_TIMEZONE_ID',\n  'DATEADD',\n  'DATEDIFF',\n  'DATEDIFF_BIG',\n  'DATEFROMPARTS',\n  'DATENAME',\n  'DATEPART',\n  'DATETIME2FROMPARTS',\n  'DATETIMEFROMPARTS',\n  'DATETIMEOFFSETFROMPARTS',\n  'DAY',\n  'EOMONTH',\n  'GETDATE',\n  'GETUTCDATE',\n  'ISDATE',\n  'MONTH',\n  'SMALLDATETIMEFROMPARTS',\n  'SWITCHOFFSET',\n  'SYSDATETIME',\n  'SYSDATETIMEOFFSET',\n  'SYSUTCDATETIME',\n  'TIMEFROMPARTS',\n  'TODATETIMEOFFSET',\n  'YEAR',\n  'JSON',\n  'ISJSON',\n  'JSON_VALUE',\n  'JSON_QUERY',\n  'JSON_MODIFY',\n\n  // mathematical\n  'ABS',\n  'ACOS',\n  'ASIN',\n  'ATAN',\n  'ATN2',\n  'CEILING',\n  'COS',\n  'COT',\n  'DEGREES',\n  'EXP',\n  'FLOOR',\n  'LOG',\n  'LOG10',\n  'PI',\n  'POWER',\n  'RADIANS',\n  'RAND',\n  'ROUND',\n  'SIGN',\n  'SIN',\n  'SQRT',\n  'SQUARE',\n  'TAN',\n  'CHOOSE',\n  'GREATEST',\n  'IIF',\n  'LEAST',\n\n  // metadata\n  '@@PROCID',\n  'APP_NAME',\n  'APPLOCK_MODE',\n  'APPLOCK_TEST',\n  'ASSEMBLYPROPERTY',\n  'COL_LENGTH',\n  'COL_NAME',\n  'COLUMNPROPERTY',\n  'DATABASEPROPERTYEX',\n  'DB_ID',\n  'DB_NAME',\n  'FILE_ID',\n  'FILE_IDEX',\n  'FILE_NAME',\n  'FILEGROUP_ID',\n  'FILEGROUP_NAME',\n  'FILEGROUPPROPERTY',\n  'FILEPROPERTY',\n  'FILEPROPERTYEX',\n  'FULLTEXTCATALOGPROPERTY',\n  'FULLTEXTSERVICEPROPERTY',\n  'INDEX_COL',\n  'INDEXKEY_PROPERTY',\n  'INDEXPROPERTY',\n  'NEXT VALUE FOR',\n  'OBJECT_DEFINITION',\n  'OBJECT_ID',\n  'OBJECT_NAME',\n  'OBJECT_SCHEMA_NAME',\n  'OBJECTPROPERTY',\n  'OBJECTPROPERTYEX',\n  'ORIGINAL_DB_NAME',\n  'PARSENAME',\n  'SCHEMA_ID',\n  'SCHEMA_NAME',\n  'SCOPE_IDENTITY',\n  'SERVERPROPERTY',\n  'STATS_DATE',\n  'TYPE_ID',\n  'TYPE_NAME',\n  'TYPEPROPERTY',\n\n  // ranking\n  'DENSE_RANK',\n  'NTILE',\n  'RANK',\n  'ROW_NUMBER',\n  'PUBLISHINGSERVERNAME',\n\n  // security\n  'CERTENCODED',\n  'CERTPRIVATEKEY',\n  'CURRENT_USER',\n  'DATABASE_PRINCIPAL_ID',\n  'HAS_DBACCESS',\n  'HAS_PERMS_BY_NAME',\n  'IS_MEMBER',\n  'IS_ROLEMEMBER',\n  'IS_SRVROLEMEMBER',\n  'LOGINPROPERTY',\n  'ORIGINAL_LOGIN',\n  'PERMISSIONS',\n  'PWDENCRYPT',\n  'PWDCOMPARE',\n  'SESSION_USER',\n  'SESSIONPROPERTY',\n  'SUSER_ID',\n  'SUSER_NAME',\n  'SUSER_SID',\n  'SUSER_SNAME',\n  'SYSTEM_USER',\n  'USER',\n  'USER_ID',\n  'USER_NAME',\n\n  // string\n  'ASCII',\n  'CHAR',\n  'CHARINDEX',\n  'CONCAT',\n  'CONCAT_WS',\n  'DIFFERENCE',\n  'FORMAT',\n  'LEFT',\n  'LEN',\n  'LOWER',\n  'LTRIM',\n  'NCHAR',\n  'PATINDEX',\n  'QUOTENAME',\n  'REPLACE',\n  'REPLICATE',\n  'REVERSE',\n  'RIGHT',\n  'RTRIM',\n  'SOUNDEX',\n  'SPACE',\n  'STR',\n  'STRING_AGG',\n  'STRING_ESCAPE',\n  'STUFF',\n  'SUBSTRING',\n  'TRANSLATE',\n  'TRIM',\n  'UNICODE',\n  'UPPER',\n\n  // system\n  '$PARTITION',\n  '@@ERROR',\n  '@@IDENTITY',\n  '@@PACK_RECEIVED',\n  '@@ROWCOUNT',\n  '@@TRANCOUNT',\n  'BINARY_CHECKSUM',\n  'CHECKSUM',\n  'COMPRESS',\n  'CONNECTIONPROPERTY',\n  'CONTEXT_INFO',\n  'CURRENT_REQUEST_ID',\n  'CURRENT_TRANSACTION_ID',\n  'DECOMPRESS',\n  'ERROR_LINE',\n  'ERROR_MESSAGE',\n  'ERROR_NUMBER',\n  'ERROR_PROCEDURE',\n  'ERROR_SEVERITY',\n  'ERROR_STATE',\n  'FORMATMESSAGE',\n  'GET_FILESTREAM_TRANSACTION_CONTEXT',\n  'GETANSINULL',\n  'HOST_ID',\n  'HOST_NAME',\n  'ISNULL',\n  'ISNUMERIC',\n  'MIN_ACTIVE_ROWVERSION',\n  'NEWID',\n  'NEWSEQUENTIALID',\n  'ROWCOUNT_BIG',\n  'SESSION_CONTEXT',\n  'XACT_STATE',\n\n  // statistical\n  '@@CONNECTIONS',\n  '@@CPU_BUSY',\n  '@@IDLE',\n  '@@IO_BUSY',\n  '@@PACK_SENT',\n  '@@PACKET_ERRORS',\n  '@@TIMETICKS',\n  '@@TOTAL_ERRORS',\n  '@@TOTAL_READ',\n  '@@TOTAL_WRITE',\n  'TEXTPTR',\n  'TEXTVALID',\n\n  // trigger\n  'COLUMNS_UPDATED',\n  'EVENTDATA',\n  'TRIGGER_NESTLEVEL',\n  'UPDATE',\n\n  // Shorthand functions to use in place of CASE expression\n  'COALESCE',\n  'NULLIF',\n];\n","export const keywords: string[] = [\n  // https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-ver15\n  // standard\n  'ADD',\n  'ALL',\n  'ALTER',\n  'AND',\n  'ANY',\n  'AS',\n  'ASC',\n  'AUTHORIZATION',\n  'BACKUP',\n  'BEGIN',\n  'BETWEEN',\n  'BREAK',\n  'BROWSE',\n  'BULK',\n  'BY',\n  'CASCADE',\n  'CHECK',\n  'CHECKPOINT',\n  'CLOSE',\n  'CLUSTERED',\n  'COALESCE',\n  'COLLATE',\n  'COLUMN',\n  'COMMIT',\n  'COMPUTE',\n  'CONSTRAINT',\n  'CONTAINS',\n  'CONTAINSTABLE',\n  'CONTINUE',\n  'CONVERT',\n  'CREATE',\n  'CROSS',\n  'CURRENT',\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_USER',\n  'CURSOR',\n  'DATABASE',\n  'DBCC',\n  'DEALLOCATE',\n  'DECLARE',\n  'DEFAULT',\n  'DELETE',\n  'DENY',\n  'DESC',\n  'DISK',\n  'DISTINCT',\n  'DISTRIBUTED',\n  'DROP',\n  'DUMP',\n  'ERRLVL',\n  'ESCAPE',\n  'EXEC',\n  'EXECUTE',\n  'EXISTS',\n  'EXIT',\n  'EXTERNAL',\n  'FETCH',\n  'FILE',\n  'FILLFACTOR',\n  'FOR',\n  'FOREIGN',\n  'FREETEXT',\n  'FREETEXTTABLE',\n  'FROM',\n  'FULL',\n  'FUNCTION',\n  'GOTO',\n  'GRANT',\n  'GROUP',\n  'HAVING',\n  'HOLDLOCK',\n  'IDENTITY',\n  'IDENTITYCOL',\n  'IDENTITY_INSERT',\n  'IF',\n  'IN',\n  'INDEX',\n  'INNER',\n  'INSERT',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'JOIN',\n  'KEY',\n  'KILL',\n  'LEFT',\n  'LIKE',\n  'LINENO',\n  'LOAD',\n  'MERGE',\n  'NOCHECK',\n  'NONCLUSTERED',\n  'NOT',\n  'NULL',\n  'NULLIF',\n  'OF',\n  'OFF',\n  'OFFSETS',\n  'ON',\n  'OPEN',\n  'OPENDATASOURCE',\n  'OPENQUERY',\n  'OPENROWSET',\n  'OPENXML',\n  'OPTION',\n  'OR',\n  'ORDER',\n  'OUTER',\n  'OVER',\n  'PERCENT',\n  'PIVOT',\n  'PLAN',\n  'PRIMARY',\n  'PRINT',\n  'PROC',\n  'PROCEDURE',\n  'PUBLIC',\n  'RAISERROR',\n  'READ',\n  'READTEXT',\n  'RECONFIGURE',\n  'REFERENCES',\n  'REPLICATION',\n  'RESTORE',\n  'RESTRICT',\n  'RETURN',\n  'REVERT',\n  'REVOKE',\n  'RIGHT',\n  'ROLLBACK',\n  'ROWCOUNT',\n  'ROWGUIDCOL',\n  'RULE',\n  'SAVE',\n  'SCHEMA',\n  'SECURITYAUDIT',\n  'SELECT',\n  'SEMANTICKEYPHRASETABLE',\n  'SEMANTICSIMILARITYDETAILSTABLE',\n  'SEMANTICSIMILARITYTABLE',\n  'SESSION_USER',\n  'SET',\n  'SETUSER',\n  'SHUTDOWN',\n  'SOME',\n  'STATISTICS',\n  'SYSTEM_USER',\n  'TABLE',\n  'TABLESAMPLE',\n  'TEXTSIZE',\n  'THEN',\n  'TO',\n  'TOP',\n  'TRAN',\n  'TRANSACTION',\n  'TRIGGER',\n  'TRUNCATE',\n  'TRY_CONVERT',\n  'TSEQUAL',\n  'UNION',\n  'UNIQUE',\n  'UNPIVOT',\n  'UPDATE',\n  'UPDATETEXT',\n  'USE',\n  'USER',\n  'VALUES',\n  'VIEW',\n  'WAITFOR',\n  'WHERE',\n  'WHILE',\n  'WITH',\n  'WITHIN GROUP',\n  'WRITETEXT',\n\n  // odbc\n  'ABSOLUTE',\n  'ACTION',\n  'ADA',\n  'ALLOCATE',\n  'ARE',\n  'ASSERTION',\n  'AT',\n  'AVG',\n  'BIT_LENGTH',\n  'BOTH',\n  'CASCADED',\n  'CAST',\n  'CATALOG',\n  'CHARACTER_LENGTH',\n  'CHAR_LENGTH',\n  'COLLATION',\n  'CONNECT',\n  'CONNECTION',\n  'CONSTRAINTS',\n  'CORRESPONDING',\n  'COUNT',\n  'DAY',\n  'DEFERRABLE',\n  'DEFERRED',\n  'DESCRIBE',\n  'DESCRIPTOR',\n  'DIAGNOSTICS',\n  'DISCONNECT',\n  'DOMAIN',\n  'END-EXEC',\n  'EXCEPTION',\n  'EXTRACT',\n  'FALSE',\n  'FIRST',\n  'FORTRAN',\n  'FOUND',\n  'GET',\n  'GLOBAL',\n  'GO',\n  'HOUR',\n  'IMMEDIATE',\n  'INCLUDE',\n  'INDICATOR',\n  'INITIALLY',\n  'INPUT',\n  'INSENSITIVE',\n  'INTERVAL',\n  'ISOLATION',\n  'LANGUAGE',\n  'LAST',\n  'LEADING',\n  'LEVEL',\n  'LOCAL',\n  'LOWER',\n  'MATCH',\n  'MAX',\n  'MIN',\n  'MINUTE',\n  'MODULE',\n  'MONTH',\n  'NAMES',\n  'NATURAL',\n  'NEXT',\n  'NO',\n  'NONE',\n  'OCTET_LENGTH',\n  'ONLY',\n  'OUTPUT',\n  'OVERLAPS',\n  'PAD',\n  'PARTIAL',\n  'PASCAL',\n  'POSITION',\n  'PREPARE',\n  'PRESERVE',\n  'PRIOR',\n  'PRIVILEGES',\n  'RELATIVE',\n  'ROWS',\n  'SCROLL',\n  'SECOND',\n  'SECTION',\n  'SESSION',\n  'SIZE',\n  'SPACE',\n  'SQL',\n  'SQLCA',\n  'SQLCODE',\n  'SQLERROR',\n  'SQLSTATE',\n  'SQLWARNING',\n  'SUBSTRING',\n  'SUM',\n  'TEMPORARY',\n  'TIMEZONE_HOUR',\n  'TIMEZONE_MINUTE',\n  'TRAILING',\n  'TRANSLATE',\n  'TRANSLATION',\n  'TRIM',\n  'TRUE',\n  'UNKNOWN',\n  'UPPER',\n  'USAGE',\n  'VALUE',\n  'WHENEVER',\n  'WORK',\n  'WRITE',\n  'YEAR',\n  'ZONE',\n];\n\nexport const dataTypes: string[] = [\n  // https://learn.microsoft.com/en-us/sql/t-sql/data-types/data-types-transact-sql?view=sql-server-ver15\n  'BINARY',\n  'BIT',\n  'CHAR',\n  'CHAR',\n  'CHARACTER',\n  'DATE',\n  'DATETIME2',\n  'DATETIMEOFFSET',\n  'DEC',\n  'DECIMAL',\n  'DOUBLE',\n  'FLOAT',\n  'INT',\n  'INTEGER',\n  'NATIONAL',\n  'NCHAR',\n  'NUMERIC',\n  'NVARCHAR',\n  'PRECISION',\n  'REAL',\n  'SMALLINT',\n  'TIME',\n  'TIMESTAMP',\n  'VARBINARY',\n  'VARCHAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './transactsql.functions.js';\nimport { dataTypes, keywords } from './transactsql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'INTO',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'WINDOW',\n  'PARTITION BY',\n  'ORDER BY',\n  'OFFSET',\n  'FETCH {FIRST | NEXT}',\n  'FOR {BROWSE | XML | JSON}',\n  'OPTION',\n  // Data manipulation\n  // - insert:\n  'INSERT [INTO]',\n  'VALUES',\n  // - update:\n  'SET',\n  // - merge:\n  'MERGE [INTO]',\n  'WHEN [NOT] MATCHED [BY TARGET | BY SOURCE] [THEN]',\n  'UPDATE SET',\n  // Data definition\n  'CREATE [OR ALTER] {PROC | PROCEDURE}',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE TABLE']);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR ALTER] [MATERIALIZED] VIEW',\n  // - update:\n  'UPDATE',\n  'WHERE CURRENT OF',\n  // - delete:\n  'DELETE [FROM]',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE',\n  'ADD',\n  'DROP COLUMN [IF EXISTS]',\n  'ALTER COLUMN',\n  // - truncate:\n  'TRUNCATE TABLE',\n  // https://docs.microsoft.com/en-us/sql/t-sql/statements/statements?view=sql-server-ver15\n  'ADD SENSITIVITY CLASSIFICATION',\n  'ADD SIGNATURE',\n  'AGGREGATE',\n  'ANSI_DEFAULTS',\n  'ANSI_NULLS',\n  'ANSI_NULL_DFLT_OFF',\n  'ANSI_NULL_DFLT_ON',\n  'ANSI_PADDING',\n  'ANSI_WARNINGS',\n  'APPLICATION ROLE',\n  'ARITHABORT',\n  'ARITHIGNORE',\n  'ASSEMBLY',\n  'ASYMMETRIC KEY',\n  'AUTHORIZATION',\n  'AVAILABILITY GROUP',\n  'BACKUP',\n  'BACKUP CERTIFICATE',\n  'BACKUP MASTER KEY',\n  'BACKUP SERVICE MASTER KEY',\n  'BEGIN CONVERSATION TIMER',\n  'BEGIN DIALOG CONVERSATION',\n  'BROKER PRIORITY',\n  'BULK INSERT',\n  'CERTIFICATE',\n  'CLOSE MASTER KEY',\n  'CLOSE SYMMETRIC KEY',\n  'COLLATE',\n  'COLUMN ENCRYPTION KEY',\n  'COLUMN MASTER KEY',\n  'COLUMNSTORE INDEX',\n  'CONCAT_NULL_YIELDS_NULL',\n  'CONTEXT_INFO',\n  'CONTRACT',\n  'CREDENTIAL',\n  'CRYPTOGRAPHIC PROVIDER',\n  'CURSOR_CLOSE_ON_COMMIT',\n  'DATABASE',\n  'DATABASE AUDIT SPECIFICATION',\n  'DATABASE ENCRYPTION KEY',\n  'DATABASE HADR',\n  'DATABASE SCOPED CONFIGURATION',\n  'DATABASE SCOPED CREDENTIAL',\n  'DATABASE SET',\n  'DATEFIRST',\n  'DATEFORMAT',\n  'DEADLOCK_PRIORITY',\n  'DENY',\n  'DENY XML',\n  'DISABLE TRIGGER',\n  'ENABLE TRIGGER',\n  'END CONVERSATION',\n  'ENDPOINT',\n  'EVENT NOTIFICATION',\n  'EVENT SESSION',\n  'EXECUTE AS',\n  'EXTERNAL DATA SOURCE',\n  'EXTERNAL FILE FORMAT',\n  'EXTERNAL LANGUAGE',\n  'EXTERNAL LIBRARY',\n  'EXTERNAL RESOURCE POOL',\n  'EXTERNAL TABLE',\n  'FIPS_FLAGGER',\n  'FMTONLY',\n  'FORCEPLAN',\n  'FULLTEXT CATALOG',\n  'FULLTEXT INDEX',\n  'FULLTEXT STOPLIST',\n  'FUNCTION',\n  'GET CONVERSATION GROUP',\n  'GET_TRANSMISSION_STATUS',\n  'GRANT',\n  'GRANT XML',\n  'IDENTITY_INSERT',\n  'IMPLICIT_TRANSACTIONS',\n  'INDEX',\n  'LANGUAGE',\n  'LOCK_TIMEOUT',\n  'LOGIN',\n  'MASTER KEY',\n  'MESSAGE TYPE',\n  'MOVE CONVERSATION',\n  'NOCOUNT',\n  'NOEXEC',\n  'NUMERIC_ROUNDABORT',\n  'OFFSETS',\n  'OPEN MASTER KEY',\n  'OPEN SYMMETRIC KEY',\n  'PARSEONLY',\n  'PARTITION FUNCTION',\n  'PARTITION SCHEME',\n  'PROCEDURE',\n  'QUERY_GOVERNOR_COST_LIMIT',\n  'QUEUE',\n  'QUOTED_IDENTIFIER',\n  'RECEIVE',\n  'REMOTE SERVICE BINDING',\n  'REMOTE_PROC_TRANSACTIONS',\n  'RESOURCE GOVERNOR',\n  'RESOURCE POOL',\n  'RESTORE',\n  'RESTORE FILELISTONLY',\n  'RESTORE HEADERONLY',\n  'RESTORE LABELONLY',\n  'RESTORE MASTER KEY',\n  'RESTORE REWINDONLY',\n  'RESTORE SERVICE MASTER KEY',\n  'RESTORE VERIFYONLY',\n  'REVERT',\n  'REVOKE',\n  'REVOKE XML',\n  'ROLE',\n  'ROUTE',\n  'ROWCOUNT',\n  'RULE',\n  'SCHEMA',\n  'SEARCH PROPERTY LIST',\n  'SECURITY POLICY',\n  'SELECTIVE XML INDEX',\n  'SEND',\n  'SENSITIVITY CLASSIFICATION',\n  'SEQUENCE',\n  'SERVER AUDIT',\n  'SERVER AUDIT SPECIFICATION',\n  'SERVER CONFIGURATION',\n  'SERVER ROLE',\n  'SERVICE',\n  'SERVICE MASTER KEY',\n  'SETUSER',\n  'SHOWPLAN_ALL',\n  'SHOWPLAN_TEXT',\n  'SHOWPLAN_XML',\n  'SIGNATURE',\n  'SPATIAL INDEX',\n  'STATISTICS',\n  'STATISTICS IO',\n  'STATISTICS PROFILE',\n  'STATISTICS TIME',\n  'STATISTICS XML',\n  'SYMMETRIC KEY',\n  'SYNONYM',\n  'TABLE',\n  'TABLE IDENTITY',\n  'TEXTSIZE',\n  'TRANSACTION ISOLATION LEVEL',\n  'TRIGGER',\n  'TYPE',\n  'UPDATE STATISTICS',\n  'USER',\n  'WORKLOAD GROUP',\n  'XACT_ABORT',\n  'XML INDEX',\n  'XML SCHEMA COLLECTION',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  // non-standard joins\n  '{CROSS | OUTER} APPLY',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n  '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15\nexport const transactsql: DialectOptions = {\n  name: 'transactsql',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    nestedBlockComments: true,\n    stringTypes: [{ quote: \"''-qq\", prefixes: ['N'] }],\n    identTypes: [`\"\"-qq`, '[]'],\n    identChars: { first: '#@', rest: '#@$' },\n    paramTypes: { named: ['@'], quoted: ['@'] },\n    operators: [\n      '%',\n      '&',\n      '|',\n      '^',\n      '~',\n      '!<',\n      '!>',\n      '+=',\n      '-=',\n      '*=',\n      '/=',\n      '%=',\n      '|=',\n      '&=',\n      '^=',\n      '::',\n      ':',\n    ],\n    propertyAccessOperators: ['..'],\n    // TODO: Support for money constants\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['::'],\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const keywords: string[] = [\n  // List of all keywords taken from:\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/restricted-keywords/list-of-restricted-keywords.html\n  // Then filtered down to reserved keywords by running\n  // > SELECT * AS <keyword>;\n  // for each keyword in that list and observing which of these produce an error.\n  'ADD',\n  'ALL',\n  'ALTER',\n  'ANALYZE',\n  'AND',\n  'AS',\n  'ASC',\n  'ASENSITIVE',\n  'BEFORE',\n  'BETWEEN',\n  '_BINARY',\n  'BOTH',\n  'BY',\n  'CALL',\n  'CASCADE',\n  'CASE',\n  'CHANGE',\n  'CHECK',\n  'COLLATE',\n  'COLUMN',\n  'CONDITION',\n  'CONSTRAINT',\n  'CONTINUE',\n  'CONVERT',\n  'CREATE',\n  'CROSS',\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_USER',\n  'CURSOR',\n  'DATABASE',\n  'DATABASES',\n  'DAY_HOUR',\n  'DAY_MICROSECOND',\n  'DAY_MINUTE',\n  'DAY_SECOND',\n  'DECLARE',\n  'DEFAULT',\n  'DELAYED',\n  'DELETE',\n  'DESC',\n  'DESCRIBE',\n  'DETERMINISTIC',\n  'DISTINCT',\n  'DISTINCTROW',\n  'DIV',\n  'DROP',\n  'DUAL',\n  'EACH',\n  'ELSE',\n  'ELSEIF',\n  'ENCLOSED',\n  'ESCAPED',\n  'EXCEPT',\n  'EXISTS',\n  'EXIT',\n  'EXPLAIN',\n  'EXTRA_JOIN',\n  'FALSE',\n  'FETCH',\n  'FOR',\n  'FORCE',\n  'FORCE_COMPILED_MODE',\n  'FORCE_INTERPRETER_MODE',\n  'FOREIGN',\n  'FROM',\n  'FULL',\n  'FULLTEXT',\n  'GRANT',\n  'GROUP',\n  'HAVING',\n  'HEARTBEAT_NO_LOGGING',\n  'HIGH_PRIORITY',\n  'HOUR_MICROSECOND',\n  'HOUR_MINUTE',\n  'HOUR_SECOND',\n  'IF',\n  'IGNORE',\n  'IN',\n  'INDEX',\n  'INFILE',\n  'INNER',\n  'INOUT',\n  'INSENSITIVE',\n  'INSERT',\n  'IN',\n  '_INTERNAL_DYNAMIC_TYPECAST',\n  'INTERSECT',\n  'INTERVAL',\n  'INTO',\n  'ITERATE',\n  'JOIN',\n  'KEY',\n  'KEYS',\n  'KILL',\n  'LEADING',\n  'LEAVE',\n  'LEFT',\n  'LIKE',\n  'LIMIT',\n  'LINES',\n  'LOAD',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOCK',\n  'LOOP',\n  'LOW_PRIORITY',\n  'MATCH',\n  'MAXVALUE',\n  'MINUS',\n  'MINUTE_MICROSECOND',\n  'MINUTE_SECOND',\n  'MOD',\n  'MODIFIES',\n  'NATURAL',\n  'NO_QUERY_REWRITE',\n  'NOT',\n  'NO_WRITE_TO_BINLOG',\n  'NO_QUERY_REWRITE',\n  'NULL',\n  'ON',\n  'OPTIMIZE',\n  'OPTION',\n  'OPTIONALLY',\n  'OR',\n  'ORDER',\n  'OUT',\n  'OUTER',\n  'OUTFILE',\n  'OVER',\n  'PRIMARY',\n  'PROCEDURE',\n  'PURGE',\n  'RANGE',\n  'READ',\n  'READS',\n  'REFERENCES',\n  'REGEXP',\n  'RELEASE',\n  'RENAME',\n  'REPEAT',\n  'REPLACE',\n  'REQUIRE',\n  'RESTRICT',\n  'RETURN',\n  'REVOKE',\n  'RIGHT',\n  'RIGHT_ANTI_JOIN',\n  'RIGHT_SEMI_JOIN',\n  'RIGHT_STRAIGHT_JOIN',\n  'RLIKE',\n  'SCHEMA',\n  'SCHEMAS',\n  'SECOND_MICROSECOND',\n  'SELECT',\n  'SEMI_JOIN',\n  'SENSITIVE',\n  'SEPARATOR',\n  'SET',\n  'SHOW',\n  'SIGNAL',\n  'SPATIAL',\n  'SPECIFIC',\n  'SQL',\n  'SQL_BIG_RESULT',\n  'SQL_BUFFER_RESULT',\n  'SQL_CACHE',\n  'SQL_CALC_FOUND_ROWS',\n  'SQLEXCEPTION',\n  'SQL_NO_CACHE',\n  'SQL_NO_LOGGING',\n  'SQL_SMALL_RESULT',\n  'SQLSTATE',\n  'SQLWARNING',\n  'STRAIGHT_JOIN',\n  'TABLE',\n  'TERMINATED',\n  'THEN',\n  'TO',\n  'TRAILING',\n  'TRIGGER',\n  'TRUE',\n  'UNBOUNDED',\n  'UNDO',\n  'UNION',\n  'UNIQUE',\n  'UNLOCK',\n  'UPDATE',\n  'USAGE',\n  'USE',\n  'USING',\n  'UTC_DATE',\n  'UTC_TIME',\n  'UTC_TIMESTAMP',\n  '_UTF8',\n  'VALUES',\n  'WHEN',\n  'WHERE',\n  'WHILE',\n  'WINDOW',\n  'WITH',\n  'WITHIN',\n  'WRITE',\n  'XOR',\n  'YEAR_MONTH',\n  'ZEROFILL',\n];\n\nexport const dataTypes: string[] = [\n  // https://docs.singlestore.com/cloud/reference/sql-reference/data-types/\n  'BIGINT',\n  'BINARY',\n  'BIT',\n  'BLOB',\n  'CHAR',\n  'CHARACTER',\n  'DATETIME',\n  'DEC',\n  'DECIMAL',\n  'DOUBLE PRECISION',\n  'DOUBLE',\n  'ENUM',\n  'FIXED',\n  'FLOAT',\n  'FLOAT4',\n  'FLOAT8',\n  'INT',\n  'INT1',\n  'INT2',\n  'INT3',\n  'INT4',\n  'INT8',\n  'INTEGER',\n  'LONG',\n  'LONGBLOB',\n  'LONGTEXT',\n  'MEDIUMBLOB',\n  'MEDIUMINT',\n  'MEDIUMTEXT',\n  'MIDDLEINT',\n  'NATIONAL CHAR',\n  'NATIONAL VARCHAR',\n  'NUMERIC',\n  'PRECISION',\n  'REAL',\n  'SMALLINT',\n  'TEXT',\n  'TIME',\n  'TIMESTAMP',\n  'TINYBLOB',\n  'TINYINT',\n  'TINYTEXT',\n  'UNSIGNED',\n  'VARBINARY',\n  'VARCHAR',\n  'VARCHARACTER',\n  'YEAR',\n];\n","export const functions: string[] = [\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/vector-functions/vector-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/window-functions/window-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/string-functions/string-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/conditional-functions/conditional-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/numeric-functions/numeric-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/geospatial-functions/geospatial-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/json-functions/json-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/information-functions/information-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/aggregate-functions/aggregate-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/time-series-functions/time-series-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/identifier-generation-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/date-and-time-functions/date-and-time-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/distinct-count-estimation-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/full-text-search-functions/full-text-search-functions.html\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference/regular-expression-functions.html\n  'ABS',\n  'ACOS',\n  'ADDDATE',\n  'ADDTIME',\n  'AES_DECRYPT',\n  'AES_ENCRYPT',\n  'ANY_VALUE',\n  'APPROX_COUNT_DISTINCT',\n  'APPROX_COUNT_DISTINCT_ACCUMULATE',\n  'APPROX_COUNT_DISTINCT_COMBINE',\n  'APPROX_COUNT_DISTINCT_ESTIMATE',\n  'APPROX_GEOGRAPHY_INTERSECTS',\n  'APPROX_PERCENTILE',\n  'ASCII',\n  'ASIN',\n  'ATAN',\n  'ATAN2',\n  'AVG',\n  'BIN',\n  'BINARY',\n  'BIT_AND',\n  'BIT_COUNT',\n  'BIT_OR',\n  'BIT_XOR',\n  'CAST',\n  'CEIL',\n  'CEILING',\n  'CHAR',\n  'CHARACTER_LENGTH',\n  'CHAR_LENGTH',\n  'CHARSET',\n  'COALESCE',\n  'COERCIBILITY',\n  'COLLATION',\n  'COLLECT',\n  'CONCAT',\n  'CONCAT_WS',\n  'CONNECTION_ID',\n  'CONV',\n  'CONVERT',\n  'CONVERT_TZ',\n  'COS',\n  'COT',\n  'COUNT',\n  'CUME_DIST',\n  'CURDATE',\n  'CURRENT_DATE',\n  'CURRENT_ROLE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_USER',\n  'CURTIME',\n  'DATABASE',\n  'DATE',\n  'DATE_ADD',\n  'DATEDIFF',\n  'DATE_FORMAT',\n  'DATE_SUB',\n  'DATE_TRUNC',\n  'DAY',\n  'DAYNAME',\n  'DAYOFMONTH',\n  'DAYOFWEEK',\n  'DAYOFYEAR',\n  'DECODE',\n  'DEFAULT',\n  'DEGREES',\n  'DENSE_RANK',\n  'DIV',\n  'DOT_PRODUCT',\n  'ELT',\n  'EUCLIDEAN_DISTANCE',\n  'EXP',\n  'EXTRACT',\n  'FIELD',\n  'FIRST',\n  'FIRST_VALUE',\n  'FLOOR',\n  'FORMAT',\n  'FOUND_ROWS',\n  'FROM_BASE64',\n  'FROM_DAYS',\n  'FROM_UNIXTIME',\n  'GEOGRAPHY_AREA',\n  'GEOGRAPHY_CONTAINS',\n  'GEOGRAPHY_DISTANCE',\n  'GEOGRAPHY_INTERSECTS',\n  'GEOGRAPHY_LATITUDE',\n  'GEOGRAPHY_LENGTH',\n  'GEOGRAPHY_LONGITUDE',\n  'GEOGRAPHY_POINT',\n  'GEOGRAPHY_WITHIN_DISTANCE',\n  'GEOMETRY_AREA',\n  'GEOMETRY_CONTAINS',\n  'GEOMETRY_DISTANCE',\n  'GEOMETRY_FILTER',\n  'GEOMETRY_INTERSECTS',\n  'GEOMETRY_LENGTH',\n  'GEOMETRY_POINT',\n  'GEOMETRY_WITHIN_DISTANCE',\n  'GEOMETRY_X',\n  'GEOMETRY_Y',\n  'GREATEST',\n  'GROUPING',\n  'GROUP_CONCAT',\n  'HEX',\n  'HIGHLIGHT',\n  'HOUR',\n  'ICU_VERSION',\n  'IF',\n  'IFNULL',\n  'INET_ATON',\n  'INET_NTOA',\n  'INET6_ATON',\n  'INET6_NTOA',\n  'INITCAP',\n  'INSERT',\n  'INSTR',\n  'INTERVAL',\n  'IS',\n  'IS NULL',\n  'JSON_AGG',\n  'JSON_ARRAY_CONTAINS_DOUBLE',\n  'JSON_ARRAY_CONTAINS_JSON',\n  'JSON_ARRAY_CONTAINS_STRING',\n  'JSON_ARRAY_PUSH_DOUBLE',\n  'JSON_ARRAY_PUSH_JSON',\n  'JSON_ARRAY_PUSH_STRING',\n  'JSON_DELETE_KEY',\n  'JSON_EXTRACT_DOUBLE',\n  'JSON_EXTRACT_JSON',\n  'JSON_EXTRACT_STRING',\n  'JSON_EXTRACT_BIGINT',\n  'JSON_GET_TYPE',\n  'JSON_LENGTH',\n  'JSON_SET_DOUBLE',\n  'JSON_SET_JSON',\n  'JSON_SET_STRING',\n  'JSON_SPLICE_DOUBLE',\n  'JSON_SPLICE_JSON',\n  'JSON_SPLICE_STRING',\n  'LAG',\n  'LAST_DAY',\n  'LAST_VALUE',\n  'LCASE',\n  'LEAD',\n  'LEAST',\n  'LEFT',\n  'LENGTH',\n  'LIKE',\n  'LN',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOCATE',\n  'LOG',\n  'LOG10',\n  'LOG2',\n  'LPAD',\n  'LTRIM',\n  'MATCH',\n  'MAX',\n  'MD5',\n  'MEDIAN',\n  'MICROSECOND',\n  'MIN',\n  'MINUTE',\n  'MOD',\n  'MONTH',\n  'MONTHNAME',\n  'MONTHS_BETWEEN',\n  'NOT',\n  'NOW',\n  'NTH_VALUE',\n  'NTILE',\n  'NULLIF',\n  'OCTET_LENGTH',\n  'PERCENT_RANK',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'PI',\n  'PIVOT',\n  'POSITION',\n  'POW',\n  'POWER',\n  'QUARTER',\n  'QUOTE',\n  'RADIANS',\n  'RAND',\n  'RANK',\n  'REGEXP',\n  'REPEAT',\n  'REPLACE',\n  'REVERSE',\n  'RIGHT',\n  'RLIKE',\n  'ROUND',\n  'ROW_COUNT',\n  'ROW_NUMBER',\n  'RPAD',\n  'RTRIM',\n  'SCALAR',\n  'SCHEMA',\n  'SEC_TO_TIME',\n  'SHA1',\n  'SHA2',\n  'SIGMOID',\n  'SIGN',\n  'SIN',\n  'SLEEP',\n  'SPLIT',\n  'SOUNDEX',\n  'SOUNDS LIKE',\n  'SOURCE_POS_WAIT',\n  'SPACE',\n  'SQRT',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STR_TO_DATE',\n  'SUBDATE',\n  'SUBSTR',\n  'SUBSTRING',\n  'SUBSTRING_INDEX',\n  'SUM',\n  'SYS_GUID',\n  'TAN',\n  'TIME',\n  'TIMEDIFF',\n  'TIME_BUCKET',\n  'TIME_FORMAT',\n  'TIMESTAMP',\n  'TIMESTAMPADD',\n  'TIMESTAMPDIFF',\n  'TIME_TO_SEC',\n  'TO_BASE64',\n  'TO_CHAR',\n  'TO_DAYS',\n  'TO_JSON',\n  'TO_NUMBER',\n  'TO_SECONDS',\n  'TO_TIMESTAMP',\n  'TRIM',\n  'TRUNC',\n  'TRUNCATE',\n  'UCASE',\n  'UNHEX',\n  'UNIX_TIMESTAMP',\n  'UPDATEXML',\n  'UPPER',\n  // 'USER',\n  'UTC_DATE',\n  'UTC_TIME',\n  'UTC_TIMESTAMP',\n  'UUID',\n  'VALUES',\n  'VARIANCE',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VECTOR_SUB',\n  'VERSION',\n  'WEEK',\n  'WEEKDAY',\n  'WEEKOFYEAR',\n  'YEAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from '../mariadb/likeMariaDb.js';\nimport { dataTypes, keywords } from './singlestoredb.keywords.js';\nimport { functions } from './singlestoredb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'LIMIT',\n  'OFFSET',\n  // Data manipulation\n  // - insert:\n  'INSERT [IGNORE] [INTO]',\n  'VALUES',\n  'REPLACE [INTO]',\n  'ON DUPLICATE KEY UPDATE',\n  // - update:\n  'SET',\n  // Data definition\n  'CREATE [OR REPLACE] [TEMPORARY] PROCEDURE [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] [EXTERNAL] FUNCTION',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [ROWSTORE] [REFERENCE | TEMPORARY | GLOBAL TEMPORARY] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE VIEW',\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE [FROM]',\n  // - drop table:\n  'DROP [TEMPORARY] TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER [ONLINE] TABLE',\n  'ADD [COLUMN]',\n  'ADD [UNIQUE] {INDEX | KEY}',\n  'DROP [COLUMN]',\n  'MODIFY [COLUMN]',\n  'CHANGE',\n  'RENAME [TO | AS]',\n  // - truncate:\n  'TRUNCATE [TABLE]',\n  // https://docs.singlestore.com/managed-service/en/reference/sql-reference.html\n  'ADD AGGREGATOR',\n  'ADD LEAF',\n  'AGGREGATOR SET AS MASTER',\n  'ALTER DATABASE',\n  'ALTER PIPELINE',\n  'ALTER RESOURCE POOL',\n  'ALTER USER',\n  'ALTER VIEW',\n  'ANALYZE TABLE',\n  'ATTACH DATABASE',\n  'ATTACH LEAF',\n  'ATTACH LEAF ALL',\n  'BACKUP DATABASE',\n  'BINLOG',\n  'BOOTSTRAP AGGREGATOR',\n  'CACHE INDEX',\n  'CALL',\n  'CHANGE',\n  'CHANGE MASTER TO',\n  'CHANGE REPLICATION FILTER',\n  'CHANGE REPLICATION SOURCE TO',\n  'CHECK BLOB CHECKSUM',\n  'CHECK TABLE',\n  'CHECKSUM TABLE',\n  'CLEAR ORPHAN DATABASES',\n  'CLONE',\n  'COMMIT',\n  'CREATE DATABASE',\n  'CREATE GROUP',\n  'CREATE INDEX',\n  'CREATE LINK',\n  'CREATE MILESTONE',\n  'CREATE PIPELINE',\n  'CREATE RESOURCE POOL',\n  'CREATE ROLE',\n  'CREATE USER',\n  'DEALLOCATE PREPARE',\n  'DESCRIBE',\n  'DETACH DATABASE',\n  'DETACH PIPELINE',\n  'DROP DATABASE',\n  'DROP FUNCTION',\n  'DROP INDEX',\n  'DROP LINK',\n  'DROP PIPELINE',\n  'DROP PROCEDURE',\n  'DROP RESOURCE POOL',\n  'DROP ROLE',\n  'DROP USER',\n  'DROP VIEW',\n  'EXECUTE',\n  'EXPLAIN',\n  'FLUSH',\n  'FORCE',\n  'GRANT',\n  'HANDLER',\n  'HELP',\n  'KILL CONNECTION',\n  'KILLALL QUERIES',\n  'LOAD DATA',\n  'LOAD INDEX INTO CACHE',\n  'LOAD XML',\n  'LOCK INSTANCE FOR BACKUP',\n  'LOCK TABLES',\n  'MASTER_POS_WAIT',\n  'OPTIMIZE TABLE',\n  'PREPARE',\n  'PURGE BINARY LOGS',\n  'REBALANCE PARTITIONS',\n  'RELEASE SAVEPOINT',\n  'REMOVE AGGREGATOR',\n  'REMOVE LEAF',\n  'REPAIR TABLE',\n  'REPLACE',\n  'REPLICATE DATABASE',\n  'RESET',\n  'RESET MASTER',\n  'RESET PERSIST',\n  'RESET REPLICA',\n  'RESET SLAVE',\n  'RESTART',\n  'RESTORE DATABASE',\n  'RESTORE REDUNDANCY',\n  'REVOKE',\n  'ROLLBACK',\n  'ROLLBACK TO SAVEPOINT',\n  'SAVEPOINT',\n  'SET CHARACTER SET',\n  'SET DEFAULT ROLE',\n  'SET NAMES',\n  'SET PASSWORD',\n  'SET RESOURCE GROUP',\n  'SET ROLE',\n  'SET TRANSACTION',\n  'SHOW',\n  'SHOW CHARACTER SET',\n  'SHOW COLLATION',\n  'SHOW COLUMNS',\n  'SHOW CREATE DATABASE',\n  'SHOW CREATE FUNCTION',\n  'SHOW CREATE PIPELINE',\n  'SHOW CREATE PROCEDURE',\n  'SHOW CREATE TABLE',\n  'SHOW CREATE USER',\n  'SHOW CREATE VIEW',\n  'SHOW DATABASES',\n  'SHOW ENGINE',\n  'SHOW ENGINES',\n  'SHOW ERRORS',\n  'SHOW FUNCTION CODE',\n  'SHOW FUNCTION STATUS',\n  'SHOW GRANTS',\n  'SHOW INDEX',\n  'SHOW MASTER STATUS',\n  'SHOW OPEN TABLES',\n  'SHOW PLUGINS',\n  'SHOW PRIVILEGES',\n  'SHOW PROCEDURE CODE',\n  'SHOW PROCEDURE STATUS',\n  'SHOW PROCESSLIST',\n  'SHOW PROFILE',\n  'SHOW PROFILES',\n  'SHOW RELAYLOG EVENTS',\n  'SHOW REPLICA STATUS',\n  'SHOW REPLICAS',\n  'SHOW SLAVE',\n  'SHOW SLAVE HOSTS',\n  'SHOW STATUS',\n  'SHOW TABLE STATUS',\n  'SHOW TABLES',\n  'SHOW VARIABLES',\n  'SHOW WARNINGS',\n  'SHUTDOWN',\n  'SNAPSHOT DATABASE',\n  'SOURCE_POS_WAIT',\n  'START GROUP_REPLICATION',\n  'START PIPELINE',\n  'START REPLICA',\n  'START SLAVE',\n  'START TRANSACTION',\n  'STOP GROUP_REPLICATION',\n  'STOP PIPELINE',\n  'STOP REPLICA',\n  'STOP REPLICATING',\n  'STOP SLAVE',\n  'TEST PIPELINE',\n  'UNLOCK INSTANCE',\n  'UNLOCK TABLES',\n  'USE',\n  'XA',\n  // flow control\n  'ITERATE',\n  'LEAVE',\n  'LOOP',\n  'REPEAT',\n  'RETURN',\n  'WHILE',\n]);\n\nconst reservedSetOperations = expandPhrases([\n  'UNION [ALL | DISTINCT]',\n  'EXCEPT',\n  'INTERSECT',\n  'MINUS',\n]);\n\nconst reservedJoins = expandPhrases([\n  'JOIN',\n  '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{INNER | CROSS} JOIN',\n  'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n  // non-standard joins\n  'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  'ON DELETE',\n  'ON UPDATE',\n  'CHARACTER SET',\n  '{ROWS | RANGE} BETWEEN',\n  'IDENTIFIED BY',\n]);\n\nexport const singlestoredb: DialectOptions = {\n  name: 'singlestoredb',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    // TODO: support _binary\"some string\" prefix\n    stringTypes: [\n      '\"\"-qq-bs',\n      \"''-qq-bs\",\n      { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n    ],\n    identTypes: ['``'],\n    identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n    variableTypes: [\n      { regex: '@@?[A-Za-z0-9_$]+' },\n      { quote: '``', prefixes: ['@'], requirePrefix: true },\n    ],\n    lineCommentTypes: ['--', '#'],\n    operators: [\n      ':=',\n      '&',\n      '|',\n      '^',\n      '~',\n      '<<',\n      '>>',\n      '<=>',\n      '&&',\n      '||',\n      '::',\n      '::$',\n      '::%',\n      ':>',\n      '!:>',\n      '*.*', // Not actually an operator\n    ],\n    postProcess,\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['::', '::$', '::%'],\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const functions: string[] = [\n  // https://docs.snowflake.com/en/sql-reference-functions.html\n  //\n  // https://docs.snowflake.com/en/sql-reference/functions-all.html\n  // 1. run in console on this page: $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue)\n  // 2. split all lines that contain ',' or '/' into multiple lines\n  // 3. remove all '— Deprecated' parts from the strings\n  // 4. delete all strings that end with '<object_type>', they are already covered in the list\n  // 5. remove all strings that contain '[', they are operators not functions\n  // 6. fix all values that contain '*'\n  // 7. delete operatos ':', '::', '||'\n  //\n  // Steps 1-5 can be combined by the following script in the developer console:\n  // $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue) // Step 1\n  //   .map(x => x.split(x.includes(',') ? ',' : '/')).flat().map(x => x.trim()) // Step 2\n  //   .map(x => x.replace('— Deprecated', '')) // Step 3\n  //   .filter(x => !x.endsWith('<object_type>')) // Step 4\n  //   .filter(x => !x.includes('[')) // Step 5\n  'ABS',\n  'ACOS',\n  'ACOSH',\n  'ADD_MONTHS',\n  'ALL_USER_NAMES',\n  'ANY_VALUE',\n  'APPROX_COUNT_DISTINCT',\n  'APPROX_PERCENTILE',\n  'APPROX_PERCENTILE_ACCUMULATE',\n  'APPROX_PERCENTILE_COMBINE',\n  'APPROX_PERCENTILE_ESTIMATE',\n  'APPROX_TOP_K',\n  'APPROX_TOP_K_ACCUMULATE',\n  'APPROX_TOP_K_COMBINE',\n  'APPROX_TOP_K_ESTIMATE',\n  'APPROXIMATE_JACCARD_INDEX',\n  'APPROXIMATE_SIMILARITY',\n  'ARRAY_AGG',\n  'ARRAY_APPEND',\n  'ARRAY_CAT',\n  'ARRAY_COMPACT',\n  'ARRAY_CONSTRUCT',\n  'ARRAY_CONSTRUCT_COMPACT',\n  'ARRAY_CONTAINS',\n  'ARRAY_INSERT',\n  'ARRAY_INTERSECTION',\n  'ARRAY_POSITION',\n  'ARRAY_PREPEND',\n  'ARRAY_SIZE',\n  'ARRAY_SLICE',\n  'ARRAY_TO_STRING',\n  'ARRAY_UNION_AGG',\n  'ARRAY_UNIQUE_AGG',\n  'ARRAYS_OVERLAP',\n  'AS_ARRAY',\n  'AS_BINARY',\n  'AS_BOOLEAN',\n  'AS_CHAR',\n  'AS_VARCHAR',\n  'AS_DATE',\n  'AS_DECIMAL',\n  'AS_NUMBER',\n  'AS_DOUBLE',\n  'AS_REAL',\n  'AS_INTEGER',\n  'AS_OBJECT',\n  'AS_TIME',\n  'AS_TIMESTAMP_LTZ',\n  'AS_TIMESTAMP_NTZ',\n  'AS_TIMESTAMP_TZ',\n  'ASCII',\n  'ASIN',\n  'ASINH',\n  'ATAN',\n  'ATAN2',\n  'ATANH',\n  'AUTO_REFRESH_REGISTRATION_HISTORY',\n  'AUTOMATIC_CLUSTERING_HISTORY',\n  'AVG',\n  'BASE64_DECODE_BINARY',\n  'BASE64_DECODE_STRING',\n  'BASE64_ENCODE',\n  'BIT_LENGTH',\n  'BITAND',\n  'BITAND_AGG',\n  'BITMAP_BIT_POSITION',\n  'BITMAP_BUCKET_NUMBER',\n  'BITMAP_CONSTRUCT_AGG',\n  'BITMAP_COUNT',\n  'BITMAP_OR_AGG',\n  'BITNOT',\n  'BITOR',\n  'BITOR_AGG',\n  'BITSHIFTLEFT',\n  'BITSHIFTRIGHT',\n  'BITXOR',\n  'BITXOR_AGG',\n  'BOOLAND',\n  'BOOLAND_AGG',\n  'BOOLNOT',\n  'BOOLOR',\n  'BOOLOR_AGG',\n  'BOOLXOR',\n  'BOOLXOR_AGG',\n  'BUILD_SCOPED_FILE_URL',\n  'BUILD_STAGE_FILE_URL',\n  'CASE',\n  'CAST',\n  'CBRT',\n  'CEIL',\n  'CHARINDEX',\n  'CHECK_JSON',\n  'CHECK_XML',\n  'CHR',\n  'CHAR',\n  'COALESCE',\n  'COLLATE',\n  'COLLATION',\n  'COMPLETE_TASK_GRAPHS',\n  'COMPRESS',\n  'CONCAT',\n  'CONCAT_WS',\n  'CONDITIONAL_CHANGE_EVENT',\n  'CONDITIONAL_TRUE_EVENT',\n  'CONTAINS',\n  'CONVERT_TIMEZONE',\n  'COPY_HISTORY',\n  'CORR',\n  'COS',\n  'COSH',\n  'COT',\n  'COUNT',\n  'COUNT_IF',\n  'COVAR_POP',\n  'COVAR_SAMP',\n  'CUME_DIST',\n  'CURRENT_ACCOUNT',\n  'CURRENT_AVAILABLE_ROLES',\n  'CURRENT_CLIENT',\n  'CURRENT_DATABASE',\n  'CURRENT_DATE',\n  'CURRENT_IP_ADDRESS',\n  'CURRENT_REGION',\n  'CURRENT_ROLE',\n  'CURRENT_SCHEMA',\n  'CURRENT_SCHEMAS',\n  'CURRENT_SECONDARY_ROLES',\n  'CURRENT_SESSION',\n  'CURRENT_STATEMENT',\n  'CURRENT_TASK_GRAPHS',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_TRANSACTION',\n  'CURRENT_USER',\n  'CURRENT_VERSION',\n  'CURRENT_WAREHOUSE',\n  'DATA_TRANSFER_HISTORY',\n  'DATABASE_REFRESH_HISTORY',\n  'DATABASE_REFRESH_PROGRESS',\n  'DATABASE_REFRESH_PROGRESS_BY_JOB',\n  'DATABASE_STORAGE_USAGE_HISTORY',\n  'DATE_FROM_PARTS',\n  'DATE_PART',\n  'DATE_TRUNC',\n  'DATEADD',\n  'DATEDIFF',\n  'DAYNAME',\n  'DECODE',\n  'DECOMPRESS_BINARY',\n  'DECOMPRESS_STRING',\n  'DECRYPT',\n  'DECRYPT_RAW',\n  'DEGREES',\n  'DENSE_RANK',\n  'DIV0',\n  'EDITDISTANCE',\n  'ENCRYPT',\n  'ENCRYPT_RAW',\n  'ENDSWITH',\n  'EQUAL_NULL',\n  'EXP',\n  'EXPLAIN_JSON',\n  'EXTERNAL_FUNCTIONS_HISTORY',\n  'EXTERNAL_TABLE_FILES',\n  'EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY',\n  'EXTRACT',\n  'EXTRACT_SEMANTIC_CATEGORIES',\n  'FACTORIAL',\n  'FILTER',\n  'FIRST_VALUE',\n  'FLATTEN',\n  'FLOOR',\n  'GENERATE_COLUMN_DESCRIPTION',\n  'GENERATOR',\n  'GET',\n  'GET_ABSOLUTE_PATH',\n  'GET_DDL',\n  'GET_IGNORE_CASE',\n  'GET_OBJECT_REFERENCES',\n  'GET_PATH',\n  'GET_PRESIGNED_URL',\n  'GET_RELATIVE_PATH',\n  'GET_STAGE_LOCATION',\n  'GETBIT',\n  'GREATEST',\n  'GREATEST_IGNORE_NULLS',\n  'GROUPING',\n  'GROUPING_ID',\n  'HASH',\n  'HASH_AGG',\n  'HAVERSINE',\n  'HEX_DECODE_BINARY',\n  'HEX_DECODE_STRING',\n  'HEX_ENCODE',\n  'HLL',\n  'HLL_ACCUMULATE',\n  'HLL_COMBINE',\n  'HLL_ESTIMATE',\n  'HLL_EXPORT',\n  'HLL_IMPORT',\n  'HOUR',\n  'MINUTE',\n  'SECOND',\n  'IFF',\n  'IFNULL',\n  'ILIKE',\n  'ILIKE ANY',\n  'INFER_SCHEMA',\n  'INITCAP',\n  'INSERT',\n  'INVOKER_ROLE',\n  'INVOKER_SHARE',\n  'IS_ARRAY',\n  'IS_BINARY',\n  'IS_BOOLEAN',\n  'IS_CHAR',\n  'IS_VARCHAR',\n  'IS_DATE',\n  'IS_DATE_VALUE',\n  'IS_DECIMAL',\n  'IS_DOUBLE',\n  'IS_REAL',\n  'IS_GRANTED_TO_INVOKER_ROLE',\n  'IS_INTEGER',\n  'IS_NULL_VALUE',\n  'IS_OBJECT',\n  'IS_ROLE_IN_SESSION',\n  'IS_TIME',\n  'IS_TIMESTAMP_LTZ',\n  'IS_TIMESTAMP_NTZ',\n  'IS_TIMESTAMP_TZ',\n  'JAROWINKLER_SIMILARITY',\n  'JSON_EXTRACT_PATH_TEXT',\n  'KURTOSIS',\n  'LAG',\n  'LAST_DAY',\n  'LAST_QUERY_ID',\n  'LAST_TRANSACTION',\n  'LAST_VALUE',\n  'LEAD',\n  'LEAST',\n  'LEFT',\n  'LENGTH',\n  'LEN',\n  'LIKE',\n  'LIKE ALL',\n  'LIKE ANY',\n  'LISTAGG',\n  'LN',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'LOG',\n  'LOGIN_HISTORY',\n  'LOGIN_HISTORY_BY_USER',\n  'LOWER',\n  'LPAD',\n  'LTRIM',\n  'MATERIALIZED_VIEW_REFRESH_HISTORY',\n  'MD5',\n  'MD5_HEX',\n  'MD5_BINARY',\n  'MD5_NUMBER — Obsoleted',\n  'MD5_NUMBER_LOWER64',\n  'MD5_NUMBER_UPPER64',\n  'MEDIAN',\n  'MIN',\n  'MAX',\n  'MINHASH',\n  'MINHASH_COMBINE',\n  'MOD',\n  'MODE',\n  'MONTHNAME',\n  'MONTHS_BETWEEN',\n  'NEXT_DAY',\n  'NORMAL',\n  'NTH_VALUE',\n  'NTILE',\n  'NULLIF',\n  'NULLIFZERO',\n  'NVL',\n  'NVL2',\n  'OBJECT_AGG',\n  'OBJECT_CONSTRUCT',\n  'OBJECT_CONSTRUCT_KEEP_NULL',\n  'OBJECT_DELETE',\n  'OBJECT_INSERT',\n  'OBJECT_KEYS',\n  'OBJECT_PICK',\n  'OCTET_LENGTH',\n  'PARSE_IP',\n  'PARSE_JSON',\n  'PARSE_URL',\n  'PARSE_XML',\n  'PERCENT_RANK',\n  'PERCENTILE_CONT',\n  'PERCENTILE_DISC',\n  'PI',\n  'PIPE_USAGE_HISTORY',\n  'POLICY_CONTEXT',\n  'POLICY_REFERENCES',\n  'POSITION',\n  'POW',\n  'POWER',\n  'PREVIOUS_DAY',\n  'QUERY_ACCELERATION_HISTORY',\n  'QUERY_HISTORY',\n  'QUERY_HISTORY_BY_SESSION',\n  'QUERY_HISTORY_BY_USER',\n  'QUERY_HISTORY_BY_WAREHOUSE',\n  'RADIANS',\n  'RANDOM',\n  'RANDSTR',\n  'RANK',\n  'RATIO_TO_REPORT',\n  'REGEXP',\n  'REGEXP_COUNT',\n  'REGEXP_INSTR',\n  'REGEXP_LIKE',\n  'REGEXP_REPLACE',\n  'REGEXP_SUBSTR',\n  'REGEXP_SUBSTR_ALL',\n  'REGR_AVGX',\n  'REGR_AVGY',\n  'REGR_COUNT',\n  'REGR_INTERCEPT',\n  'REGR_R2',\n  'REGR_SLOPE',\n  'REGR_SXX',\n  'REGR_SXY',\n  'REGR_SYY',\n  'REGR_VALX',\n  'REGR_VALY',\n  'REPEAT',\n  'REPLACE',\n  'REPLICATION_GROUP_REFRESH_HISTORY',\n  'REPLICATION_GROUP_REFRESH_PROGRESS',\n  'REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB',\n  'REPLICATION_GROUP_USAGE_HISTORY',\n  'REPLICATION_USAGE_HISTORY',\n  'REST_EVENT_HISTORY',\n  'RESULT_SCAN',\n  'REVERSE',\n  'RIGHT',\n  'RLIKE',\n  'ROUND',\n  'ROW_NUMBER',\n  'RPAD',\n  'RTRIM',\n  'RTRIMMED_LENGTH',\n  'SEARCH_OPTIMIZATION_HISTORY',\n  'SEQ1',\n  'SEQ2',\n  'SEQ4',\n  'SEQ8',\n  'SERVERLESS_TASK_HISTORY',\n  'SHA1',\n  'SHA1_HEX',\n  'SHA1_BINARY',\n  'SHA2',\n  'SHA2_HEX',\n  'SHA2_BINARY',\n  'SIGN',\n  'SIN',\n  'SINH',\n  'SKEW',\n  'SOUNDEX',\n  'SPACE',\n  'SPLIT',\n  'SPLIT_PART',\n  'SPLIT_TO_TABLE',\n  'SQRT',\n  'SQUARE',\n  'ST_AREA',\n  'ST_ASEWKB',\n  'ST_ASEWKT',\n  'ST_ASGEOJSON',\n  'ST_ASWKB',\n  'ST_ASBINARY',\n  'ST_ASWKT',\n  'ST_ASTEXT',\n  'ST_AZIMUTH',\n  'ST_CENTROID',\n  'ST_COLLECT',\n  'ST_CONTAINS',\n  'ST_COVEREDBY',\n  'ST_COVERS',\n  'ST_DIFFERENCE',\n  'ST_DIMENSION',\n  'ST_DISJOINT',\n  'ST_DISTANCE',\n  'ST_DWITHIN',\n  'ST_ENDPOINT',\n  'ST_ENVELOPE',\n  'ST_GEOGFROMGEOHASH',\n  'ST_GEOGPOINTFROMGEOHASH',\n  'ST_GEOGRAPHYFROMWKB',\n  'ST_GEOGRAPHYFROMWKT',\n  'ST_GEOHASH',\n  'ST_GEOMETRYFROMWKB',\n  'ST_GEOMETRYFROMWKT',\n  'ST_HAUSDORFFDISTANCE',\n  'ST_INTERSECTION',\n  'ST_INTERSECTS',\n  'ST_LENGTH',\n  'ST_MAKEGEOMPOINT',\n  'ST_GEOM_POINT',\n  'ST_MAKELINE',\n  'ST_MAKEPOINT',\n  'ST_POINT',\n  'ST_MAKEPOLYGON',\n  'ST_POLYGON',\n  'ST_NPOINTS',\n  'ST_NUMPOINTS',\n  'ST_PERIMETER',\n  'ST_POINTN',\n  'ST_SETSRID',\n  'ST_SIMPLIFY',\n  'ST_SRID',\n  'ST_STARTPOINT',\n  'ST_SYMDIFFERENCE',\n  'ST_UNION',\n  'ST_WITHIN',\n  'ST_X',\n  'ST_XMAX',\n  'ST_XMIN',\n  'ST_Y',\n  'ST_YMAX',\n  'ST_YMIN',\n  'STAGE_DIRECTORY_FILE_REGISTRATION_HISTORY',\n  'STAGE_STORAGE_USAGE_HISTORY',\n  'STARTSWITH',\n  'STDDEV',\n  'STDDEV_POP',\n  'STDDEV_SAMP',\n  'STRIP_NULL_VALUE',\n  'STRTOK',\n  'STRTOK_SPLIT_TO_TABLE',\n  'STRTOK_TO_ARRAY',\n  'SUBSTR',\n  'SUBSTRING',\n  'SUM',\n  'SYSDATE',\n  'SYSTEM$ABORT_SESSION',\n  'SYSTEM$ABORT_TRANSACTION',\n  'SYSTEM$AUTHORIZE_PRIVATELINK',\n  'SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS',\n  'SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS',\n  'SYSTEM$CANCEL_ALL_QUERIES',\n  'SYSTEM$CANCEL_QUERY',\n  'SYSTEM$CLUSTERING_DEPTH',\n  'SYSTEM$CLUSTERING_INFORMATION',\n  'SYSTEM$CLUSTERING_RATIO ',\n  'SYSTEM$CURRENT_USER_TASK_NAME',\n  'SYSTEM$DATABASE_REFRESH_HISTORY ',\n  'SYSTEM$DATABASE_REFRESH_PROGRESS',\n  'SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB ',\n  'SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE',\n  'SYSTEM$DISABLE_DATABASE_REPLICATION',\n  'SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE',\n  'SYSTEM$ESTIMATE_QUERY_ACCELERATION',\n  'SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS',\n  'SYSTEM$EXPLAIN_JSON_TO_TEXT',\n  'SYSTEM$EXPLAIN_PLAN_JSON',\n  'SYSTEM$EXTERNAL_TABLE_PIPE_STATUS',\n  'SYSTEM$GENERATE_SAML_CSR',\n  'SYSTEM$GENERATE_SCIM_ACCESS_TOKEN',\n  'SYSTEM$GET_AWS_SNS_IAM_POLICY',\n  'SYSTEM$GET_PREDECESSOR_RETURN_VALUE',\n  'SYSTEM$GET_PRIVATELINK',\n  'SYSTEM$GET_PRIVATELINK_AUTHORIZED_ENDPOINTS',\n  'SYSTEM$GET_PRIVATELINK_CONFIG',\n  'SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO',\n  'SYSTEM$GET_TAG',\n  'SYSTEM$GET_TAG_ALLOWED_VALUES',\n  'SYSTEM$GET_TAG_ON_CURRENT_COLUMN',\n  'SYSTEM$GET_TAG_ON_CURRENT_TABLE',\n  'SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER',\n  'SYSTEM$LAST_CHANGE_COMMIT_TIME',\n  'SYSTEM$LINK_ACCOUNT_OBJECTS_BY_NAME',\n  'SYSTEM$MIGRATE_SAML_IDP_REGISTRATION',\n  'SYSTEM$PIPE_FORCE_RESUME',\n  'SYSTEM$PIPE_STATUS',\n  'SYSTEM$REVOKE_PRIVATELINK',\n  'SYSTEM$REVOKE_STAGE_PRIVATELINK_ACCESS',\n  'SYSTEM$SET_RETURN_VALUE',\n  'SYSTEM$SHOW_OAUTH_CLIENT_SECRETS',\n  'SYSTEM$STREAM_GET_TABLE_TIMESTAMP',\n  'SYSTEM$STREAM_HAS_DATA',\n  'SYSTEM$TASK_DEPENDENTS_ENABLE',\n  'SYSTEM$TYPEOF',\n  'SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS',\n  'SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN',\n  'SYSTEM$WAIT',\n  'SYSTEM$WHITELIST',\n  'SYSTEM$WHITELIST_PRIVATELINK',\n  'TAG_REFERENCES',\n  'TAG_REFERENCES_ALL_COLUMNS',\n  'TAG_REFERENCES_WITH_LINEAGE',\n  'TAN',\n  'TANH',\n  'TASK_DEPENDENTS',\n  'TASK_HISTORY',\n  'TIME_FROM_PARTS',\n  'TIME_SLICE',\n  'TIMEADD',\n  'TIMEDIFF',\n  'TIMESTAMP_FROM_PARTS',\n  'TIMESTAMPADD',\n  'TIMESTAMPDIFF',\n  'TO_ARRAY',\n  'TO_BINARY',\n  'TO_BOOLEAN',\n  'TO_CHAR',\n  'TO_VARCHAR',\n  'TO_DATE',\n  'DATE',\n  'TO_DECIMAL',\n  'TO_NUMBER',\n  'TO_NUMERIC',\n  'TO_DOUBLE',\n  'TO_GEOGRAPHY',\n  'TO_GEOMETRY',\n  'TO_JSON',\n  'TO_OBJECT',\n  'TO_TIME',\n  'TIME',\n  'TO_TIMESTAMP',\n  'TO_TIMESTAMP_LTZ',\n  'TO_TIMESTAMP_NTZ',\n  'TO_TIMESTAMP_TZ',\n  'TO_VARIANT',\n  'TO_XML',\n  'TRANSLATE',\n  'TRIM',\n  'TRUNCATE',\n  'TRUNC',\n  'TRUNC',\n  'TRY_BASE64_DECODE_BINARY',\n  'TRY_BASE64_DECODE_STRING',\n  'TRY_CAST',\n  'TRY_HEX_DECODE_BINARY',\n  'TRY_HEX_DECODE_STRING',\n  'TRY_PARSE_JSON',\n  'TRY_TO_BINARY',\n  'TRY_TO_BOOLEAN',\n  'TRY_TO_DATE',\n  'TRY_TO_DECIMAL',\n  'TRY_TO_NUMBER',\n  'TRY_TO_NUMERIC',\n  'TRY_TO_DOUBLE',\n  'TRY_TO_GEOGRAPHY',\n  'TRY_TO_GEOMETRY',\n  'TRY_TO_TIME',\n  'TRY_TO_TIMESTAMP',\n  'TRY_TO_TIMESTAMP_LTZ',\n  'TRY_TO_TIMESTAMP_NTZ',\n  'TRY_TO_TIMESTAMP_TZ',\n  'TYPEOF',\n  'UNICODE',\n  'UNIFORM',\n  'UPPER',\n  'UUID_STRING',\n  'VALIDATE',\n  'VALIDATE_PIPE_LOAD',\n  'VAR_POP',\n  'VAR_SAMP',\n  'VARIANCE',\n  'VARIANCE_SAMP',\n  'VARIANCE_POP',\n  'WAREHOUSE_LOAD_HISTORY',\n  'WAREHOUSE_METERING_HISTORY',\n  'WIDTH_BUCKET',\n  'XMLGET',\n  'YEAR',\n  'YEAROFWEEK',\n  'YEAROFWEEKISO',\n  'DAY',\n  'DAYOFMONTH',\n  'DAYOFWEEK',\n  'DAYOFWEEKISO',\n  'DAYOFYEAR',\n  'WEEK',\n  'WEEK',\n  'WEEKOFYEAR',\n  'WEEKISO',\n  'MONTH',\n  'QUARTER',\n  'ZEROIFNULL',\n  'ZIPF',\n];\n","export const keywords: string[] = [\n  // https://docs.snowflake.com/en/sql-reference/reserved-keywords.html\n  //\n  // run in console on this page: $x('//tbody/tr/*[1]/p/text()').map(x => x.nodeValue)\n  'ACCOUNT',\n  'ALL',\n  'ALTER',\n  'AND',\n  'ANY',\n  'AS',\n  'BETWEEN',\n  'BY',\n  'CASE',\n  'CAST',\n  'CHECK',\n  'COLUMN',\n  'CONNECT',\n  'CONNECTION',\n  'CONSTRAINT',\n  'CREATE',\n  'CROSS',\n  'CURRENT',\n  'CURRENT_DATE',\n  'CURRENT_TIME',\n  'CURRENT_TIMESTAMP',\n  'CURRENT_USER',\n  'DATABASE',\n  'DELETE',\n  'DISTINCT',\n  'DROP',\n  'ELSE',\n  'EXISTS',\n  'FALSE',\n  'FOLLOWING',\n  'FOR',\n  'FROM',\n  'FULL',\n  'GRANT',\n  'GROUP',\n  'GSCLUSTER',\n  'HAVING',\n  'ILIKE',\n  'IN',\n  'INCREMENT',\n  'INNER',\n  'INSERT',\n  'INTERSECT',\n  'INTO',\n  'IS',\n  'ISSUE',\n  'JOIN',\n  'LATERAL',\n  'LEFT',\n  'LIKE',\n  'LOCALTIME',\n  'LOCALTIMESTAMP',\n  'MINUS',\n  'NATURAL',\n  'NOT',\n  'NULL',\n  'OF',\n  'ON',\n  'OR',\n  'ORDER',\n  'ORGANIZATION',\n  'QUALIFY',\n  'REGEXP',\n  'REVOKE',\n  'RIGHT',\n  'RLIKE',\n  'ROW',\n  'ROWS',\n  'SAMPLE',\n  'SCHEMA',\n  'SELECT',\n  'SET',\n  'SOME',\n  'START',\n  'TABLE',\n  'TABLESAMPLE',\n  'THEN',\n  'TO',\n  'TRIGGER',\n  'TRUE',\n  'TRY_CAST',\n  'UNION',\n  'UNIQUE',\n  'UPDATE',\n  'USING',\n  'VALUES',\n  'VIEW',\n  'WHEN',\n  'WHENEVER',\n  'WHERE',\n  'WITH',\n\n  // These are definitely keywords, but haven't found a definite list in the docs\n  'COMMENT',\n];\n\nexport const dataTypes: string[] = [\n  'NUMBER',\n  'DECIMAL',\n  'NUMERIC',\n  'INT',\n  'INTEGER',\n  'BIGINT',\n  'SMALLINT',\n  'TINYINT',\n  'BYTEINT',\n  'FLOAT',\n  'FLOAT4',\n  'FLOAT8',\n  'DOUBLE',\n  'DOUBLE PRECISION',\n  'REAL',\n  'VARCHAR',\n  'CHAR',\n  'CHARACTER',\n  'STRING',\n  'TEXT',\n  'BINARY',\n  'VARBINARY',\n  'BOOLEAN',\n  'DATE',\n  'DATETIME',\n  'TIME',\n  'TIMESTAMP',\n  'TIMESTAMP_LTZ',\n  'TIMESTAMP_NTZ',\n  'TIMESTAMP',\n  'TIMESTAMP_TZ',\n  'VARIANT',\n  'OBJECT',\n  'ARRAY',\n  'GEOGRAPHY',\n  'GEOMETRY',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './snowflake.functions.js';\nimport { dataTypes, keywords } from './snowflake.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n  // queries\n  'WITH [RECURSIVE]',\n  'FROM',\n  'WHERE',\n  'GROUP BY',\n  'HAVING',\n  'PARTITION BY',\n  'ORDER BY',\n  'QUALIFY',\n  'LIMIT',\n  'OFFSET',\n  'FETCH [FIRST | NEXT]',\n  // Data manipulation\n  // - insert:\n  'INSERT [OVERWRITE] [ALL INTO | INTO | ALL | FIRST]',\n  '{THEN | ELSE} INTO',\n  'VALUES',\n  // - update:\n  'SET',\n\n  'CLUSTER BY',\n  '[WITH] {MASKING POLICY | TAG | ROW ACCESS POLICY}',\n  'COPY GRANTS',\n  'USING TEMPLATE',\n  'MERGE INTO',\n  'WHEN MATCHED [AND]',\n  'THEN {UPDATE SET | DELETE}',\n  'WHEN NOT MATCHED THEN INSERT',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n  'CREATE [OR REPLACE] [VOLATILE] TABLE [IF NOT EXISTS]',\n  'CREATE [OR REPLACE] [LOCAL | GLOBAL] {TEMP|TEMPORARY} TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n  // - create:\n  'CREATE [OR REPLACE] [SECURE] [RECURSIVE] VIEW [IF NOT EXISTS]',\n  // - update:\n  'UPDATE',\n  // - delete:\n  'DELETE FROM',\n  // - drop table:\n  'DROP TABLE [IF EXISTS]',\n  // - alter table:\n  'ALTER TABLE [IF EXISTS]',\n  'RENAME TO',\n  'SWAP WITH',\n  '[SUSPEND | RESUME] RECLUSTER',\n  'DROP CLUSTERING KEY',\n  'ADD [COLUMN]',\n  'RENAME COLUMN',\n  '{ALTER | MODIFY} [COLUMN]',\n  'DROP [COLUMN]',\n  '{ADD | ALTER | MODIFY | DROP} [CONSTRAINT]',\n  'RENAME CONSTRAINT',\n  '{ADD | DROP} SEARCH OPTIMIZATION',\n  '{SET | UNSET} TAG', // Actually TAG is optional, but that conflicts with UPDATE..SET statement\n  '{ADD | DROP} ROW ACCESS POLICY',\n  'DROP ALL ROW ACCESS POLICIES',\n  '{SET | DROP} DEFAULT', // for alter column\n  '{SET | DROP} NOT NULL', // for alter column\n  'SET DATA TYPE', // for alter column\n  'UNSET COMMENT', // for alter column\n  '{SET | UNSET} MASKING POLICY', // for alter column\n  // - truncate:\n  'TRUNCATE [TABLE] [IF EXISTS]',\n  // other\n  // https://docs.snowflake.com/en/sql-reference/sql-all.html\n  //\n  // 1. run in console on this page: $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue)\n  // 2. delete all lines that contain a sting like '(.*)', they are already covered in the list\n  // 3. delete all lines that contain a sting like '<.*>', they are already covered in the list\n  // 4. delete all lines that contain '…', they are part of a regex statement that can't be covered here\n  // 5. Manually add 'COPY INTO'\n  // 6. Remove all lines that are already in `reservedClauses`\n  //\n  // Steps 1-4 can be combined by the following script in the developer console:\n  // $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue) // Step 1\n  //   filter(x => !x.match(/\\(.*\\)/) && !x.match(/…/) && !x.match(/<.*>/)) // Step 2-4\n  'ALTER ACCOUNT',\n  'ALTER API INTEGRATION',\n  'ALTER CONNECTION',\n  'ALTER DATABASE',\n  'ALTER EXTERNAL TABLE',\n  'ALTER FAILOVER GROUP',\n  'ALTER FILE FORMAT',\n  'ALTER FUNCTION',\n  'ALTER INTEGRATION',\n  'ALTER MASKING POLICY',\n  'ALTER MATERIALIZED VIEW',\n  'ALTER NETWORK POLICY',\n  'ALTER NOTIFICATION INTEGRATION',\n  'ALTER PIPE',\n  'ALTER PROCEDURE',\n  'ALTER REPLICATION GROUP',\n  'ALTER RESOURCE MONITOR',\n  'ALTER ROLE',\n  'ALTER ROW ACCESS POLICY',\n  'ALTER SCHEMA',\n  'ALTER SECURITY INTEGRATION',\n  'ALTER SEQUENCE',\n  'ALTER SESSION',\n  'ALTER SESSION POLICY',\n  'ALTER SHARE',\n  'ALTER STAGE',\n  'ALTER STORAGE INTEGRATION',\n  'ALTER STREAM',\n  'ALTER TAG',\n  'ALTER TASK',\n  'ALTER USER',\n  'ALTER VIEW',\n  'ALTER WAREHOUSE',\n  'BEGIN',\n  'CALL',\n  'COMMIT',\n  'COPY INTO',\n  'CREATE ACCOUNT',\n  'CREATE API INTEGRATION',\n  'CREATE CONNECTION',\n  'CREATE DATABASE',\n  'CREATE EXTERNAL FUNCTION',\n  'CREATE EXTERNAL TABLE',\n  'CREATE FAILOVER GROUP',\n  'CREATE FILE FORMAT',\n  'CREATE FUNCTION',\n  'CREATE INTEGRATION',\n  'CREATE MANAGED ACCOUNT',\n  'CREATE MASKING POLICY',\n  'CREATE MATERIALIZED VIEW',\n  'CREATE NETWORK POLICY',\n  'CREATE NOTIFICATION INTEGRATION',\n  'CREATE PIPE',\n  'CREATE PROCEDURE',\n  'CREATE REPLICATION GROUP',\n  'CREATE RESOURCE MONITOR',\n  'CREATE ROLE',\n  'CREATE ROW ACCESS POLICY',\n  'CREATE SCHEMA',\n  'CREATE SECURITY INTEGRATION',\n  'CREATE SEQUENCE',\n  'CREATE SESSION POLICY',\n  'CREATE SHARE',\n  'CREATE STAGE',\n  'CREATE STORAGE INTEGRATION',\n  'CREATE STREAM',\n  'CREATE TAG',\n  'CREATE TASK',\n  'CREATE USER',\n  'CREATE WAREHOUSE',\n  'DELETE',\n  'DESCRIBE DATABASE',\n  'DESCRIBE EXTERNAL TABLE',\n  'DESCRIBE FILE FORMAT',\n  'DESCRIBE FUNCTION',\n  'DESCRIBE INTEGRATION',\n  'DESCRIBE MASKING POLICY',\n  'DESCRIBE MATERIALIZED VIEW',\n  'DESCRIBE NETWORK POLICY',\n  'DESCRIBE PIPE',\n  'DESCRIBE PROCEDURE',\n  'DESCRIBE RESULT',\n  'DESCRIBE ROW ACCESS POLICY',\n  'DESCRIBE SCHEMA',\n  'DESCRIBE SEQUENCE',\n  'DESCRIBE SESSION POLICY',\n  'DESCRIBE SHARE',\n  'DESCRIBE STAGE',\n  'DESCRIBE STREAM',\n  'DESCRIBE TABLE',\n  'DESCRIBE TASK',\n  'DESCRIBE TRANSACTION',\n  'DESCRIBE USER',\n  'DESCRIBE VIEW',\n  'DESCRIBE WAREHOUSE',\n  'DROP CONNECTION',\n  'DROP DATABASE',\n  'DROP EXTERNAL TABLE',\n  'DROP FAILOVER GROUP',\n  'DROP FILE FORMAT',\n  'DROP FUNCTION',\n  'DROP INTEGRATION',\n  'DROP MANAGED ACCOUNT',\n  'DROP MASKING POLICY',\n  'DROP MATERIALIZED VIEW',\n  'DROP NETWORK POLICY',\n  'DROP PIPE',\n  'DROP PROCEDURE',\n  'DROP REPLICATION GROUP',\n  'DROP RESOURCE MONITOR',\n  'DROP ROLE',\n  'DROP ROW ACCESS POLICY',\n  'DROP SCHEMA',\n  'DROP SEQUENCE',\n  'DROP SESSION POLICY',\n  'DROP SHARE',\n  'DROP STAGE',\n  'DROP STREAM',\n  'DROP TAG',\n  'DROP TASK',\n  'DROP USER',\n  'DROP VIEW',\n  'DROP WAREHOUSE',\n  'EXECUTE IMMEDIATE',\n  'EXECUTE TASK',\n  'EXPLAIN',\n  'GET',\n  'GRANT OWNERSHIP',\n  'GRANT ROLE',\n  'INSERT',\n  'LIST',\n  'MERGE',\n  'PUT',\n  'REMOVE',\n  'REVOKE ROLE',\n  'ROLLBACK',\n  'SHOW COLUMNS',\n  'SHOW CONNECTIONS',\n  'SHOW DATABASES',\n  'SHOW DATABASES IN FAILOVER GROUP',\n  'SHOW DATABASES IN REPLICATION GROUP',\n  'SHOW DELEGATED AUTHORIZATIONS',\n  'SHOW EXTERNAL FUNCTIONS',\n  'SHOW EXTERNAL TABLES',\n  'SHOW FAILOVER GROUPS',\n  'SHOW FILE FORMATS',\n  'SHOW FUNCTIONS',\n  'SHOW GLOBAL ACCOUNTS',\n  'SHOW GRANTS',\n  'SHOW INTEGRATIONS',\n  'SHOW LOCKS',\n  'SHOW MANAGED ACCOUNTS',\n  'SHOW MASKING POLICIES',\n  'SHOW MATERIALIZED VIEWS',\n  'SHOW NETWORK POLICIES',\n  'SHOW OBJECTS',\n  'SHOW ORGANIZATION ACCOUNTS',\n  'SHOW PARAMETERS',\n  'SHOW PIPES',\n  'SHOW PRIMARY KEYS',\n  'SHOW PROCEDURES',\n  'SHOW REGIONS',\n  'SHOW REPLICATION ACCOUNTS',\n  'SHOW REPLICATION DATABASES',\n  'SHOW REPLICATION GROUPS',\n  'SHOW RESOURCE MONITORS',\n  'SHOW ROLES',\n  'SHOW ROW ACCESS POLICIES',\n  'SHOW SCHEMAS',\n  'SHOW SEQUENCES',\n  'SHOW SESSION POLICIES',\n  'SHOW SHARES',\n  'SHOW SHARES IN FAILOVER GROUP',\n  'SHOW SHARES IN REPLICATION GROUP',\n  'SHOW STAGES',\n  'SHOW STREAMS',\n  'SHOW TABLES',\n  'SHOW TAGS',\n  'SHOW TASKS',\n  'SHOW TRANSACTIONS',\n  'SHOW USER FUNCTIONS',\n  'SHOW USERS',\n  'SHOW VARIABLES',\n  'SHOW VIEWS',\n  'SHOW WAREHOUSES',\n  'TRUNCATE MATERIALIZED VIEW',\n  'UNDROP DATABASE',\n  'UNDROP SCHEMA',\n  'UNDROP TABLE',\n  'UNDROP TAG',\n  'UNSET',\n  'USE DATABASE',\n  'USE ROLE',\n  'USE SCHEMA',\n  'USE SECONDARY ROLES',\n  'USE WAREHOUSE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'MINUS', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n  '[INNER] JOIN',\n  '[NATURAL] {LEFT | RIGHT | FULL} [OUTER] JOIN',\n  '{CROSS | NATURAL} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n  '{ROWS | RANGE} BETWEEN',\n  'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n]);\n\nexport const snowflake: DialectOptions = {\n  name: 'snowflake',\n  tokenizerOptions: {\n    reservedSelect,\n    reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n    reservedSetOperations,\n    reservedJoins,\n    reservedPhrases,\n    reservedKeywords: keywords,\n    reservedDataTypes: dataTypes,\n    reservedFunctionNames: functions,\n    stringTypes: ['$$', `''-qq-bs`],\n    identTypes: ['\"\"-qq'],\n    variableTypes: [\n      // for accessing columns at certain positons in the table\n      { regex: '[$][1-9]\\\\d*' },\n      // identifier style syntax\n      { regex: '[$][_a-zA-Z][_a-zA-Z0-9$]*' },\n    ],\n    extraParens: ['[]'],\n    identChars: { rest: '$' },\n    lineCommentTypes: ['--', '//'],\n    operators: [\n      // Modulo\n      '%',\n      // Type cast\n      '::',\n      // String concat\n      '||',\n      // Generators: https://docs.snowflake.com/en/sql-reference/functions/generator.html#generator\n      '=>',\n      // Assignment https://docs.snowflake.com/en/sql-reference/snowflake-scripting/let\n      ':=',\n      // Lambda: https://docs.snowflake.com/en/user-guide/querying-semistructured#lambda-expressions\n      '->',\n    ],\n    propertyAccessOperators: [':'],\n  },\n  formatOptions: {\n    alwaysDenseOperators: ['::'],\n    onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n    tabularOnelineClauses,\n  },\n};\n","export const dedupe = (arr: string[]) => [...new Set(arr)];\n\n// Last element from array\nexport const last = <T>(arr: T[]): T | undefined => arr[arr.length - 1];\n\n// Sorts strings by length, so that longer ones are first\n// Also sorts alphabetically after sorting by length.\nexport const sortByLengthDesc = (strings: string[]) =>\n  strings.sort((a, b) => b.length - a.length || a.localeCompare(b));\n\n/** Get length of longest string in list of strings */\nexport const maxLength = (strings: string[]) =>\n  strings.reduce((max, cur) => Math.max(max, cur.length), 0);\n\n// replaces long whitespace sequences with just one space\nexport const equalizeWhitespace = (s: string) => s.replace(/\\s+/gu, ' ');\n\n// True when string contains multiple lines\nexport const isMultiline = (text: string): boolean => /\\n/.test(text);\n\n// Given a type and a field name, returns a type where this field is optional\n//\n// For example, these two type definitions are equivalent:\n//\n//   type Foo = Optional<{ foo: string, bar: number }, 'foo'>;\n//   type Foo = { foo?: string, bar: number };\n//\nexport type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n","import { PrefixedQuoteType } from './TokenizerOptions.js';\n\n// Escapes regex special chars\nexport const escapeRegExp = (string: string) => string.replace(/[.*+?^${}()|[\\]\\\\]/gu, '\\\\$&');\n\nexport const WHITESPACE_REGEX = /\\s+/uy;\n\nexport const patternToRegex = (pattern: string): RegExp => new RegExp(`(?:${pattern})`, 'uy');\n\n// Converts \"ab\" to \"[Aa][Bb]\"\nexport const toCaseInsensitivePattern = (prefix: string): string =>\n  prefix\n    .split('')\n    .map(char => (/ /gu.test(char) ? '\\\\s+' : `[${char.toUpperCase()}${char.toLowerCase()}]`))\n    .join('');\n\nexport const withDashes = (pattern: string): string => pattern + '(?:-' + pattern + ')*';\n\n// Converts [\"a\", \"b\"] to \"(?:[Aa]|[Bb]|)\" or \"(?:[Aa]|[Bb])\" when required = true\nexport const prefixesPattern = ({ prefixes, requirePrefix }: PrefixedQuoteType): string =>\n  `(?:${prefixes.map(toCaseInsensitivePattern).join('|')}${requirePrefix ? '' : '|'})`;\n","import { sortByLengthDesc } from '../utils.js';\n\nimport { IdentChars, QuoteType, VariableType } from './TokenizerOptions.js';\nimport { escapeRegExp, patternToRegex, prefixesPattern, withDashes } from './regexUtil.js';\n\n/**\n * Builds a RegExp for valid line comments in a SQL dialect\n * @param {string[]} lineCommentTypes - list of character strings that denote line comments\n */\nexport const lineComment = (lineCommentTypes: string[]) =>\n  new RegExp(`(?:${lineCommentTypes.map(escapeRegExp).join('|')}).*?(?=\\r\\n|\\r|\\n|$)`, 'uy');\n\n/**\n * Builds a RegExp for matching either open- or close-parenthesis patterns\n */\nexport const parenthesis = (kind: 'open' | 'close', extraParens: ('[]' | '{}')[] = []): RegExp => {\n  const index = kind === 'open' ? 0 : 1;\n  const parens = ['()', ...extraParens].map(pair => pair[index]);\n  return patternToRegex(parens.map(escapeRegExp).join('|'));\n};\n\n/**\n * Builds a RegExp containing all operators for a SQL dialect\n */\nexport const operator = (operators: string[]) =>\n  patternToRegex(`${sortByLengthDesc(operators).map(escapeRegExp).join('|')}`);\n\n// Negative lookahead to avoid matching a keyword that's actually part of identifier,\n// which can happen when identifier allows word-boundary characters inside it.\n//\n// For example \"SELECT$ME\" should be tokenized as:\n// - [\"SELECT$ME\"] when $ is allowed inside identifiers\n// - [\"SELECT\", \"$\", \"ME\"] when $ can't be part of identifiers.\nconst rejectIdentCharsPattern = ({ rest, dashes }: IdentChars): string =>\n  rest || dashes ? `(?![${rest || ''}${dashes ? '-' : ''}])` : '';\n\n/**\n * Builds a RegExp for all Reserved Keywords in a SQL dialect\n */\nexport const reservedWord = (reservedKeywords: string[], identChars: IdentChars = {}): RegExp => {\n  if (reservedKeywords.length === 0) {\n    return /^\\b$/u;\n  }\n\n  const avoidIdentChars = rejectIdentCharsPattern(identChars);\n\n  const reservedKeywordsPattern = sortByLengthDesc(reservedKeywords)\n    .map(escapeRegExp)\n    .join('|')\n    .replace(/ /gu, '\\\\s+');\n\n  return new RegExp(`(?:${reservedKeywordsPattern})${avoidIdentChars}\\\\b`, 'iuy');\n};\n\n/**\n * Builds a RegExp for parameter placeholder patterns\n * @param {string[]} paramTypes - list of strings that denote placeholder types\n * @param {string} pattern - string that denotes placeholder pattern\n */\nexport const parameter = (paramTypes: string[], pattern: string): RegExp | undefined => {\n  if (!paramTypes.length) {\n    return undefined;\n  }\n  const typesRegex = paramTypes.map(escapeRegExp).join('|');\n\n  return patternToRegex(`(?:${typesRegex})(?:${pattern})`);\n};\n\nconst buildQStringPatterns = () => {\n  const specialDelimiterMap = {\n    '<': '>',\n    '[': ']',\n    '(': ')',\n    '{': '}',\n  };\n\n  // base pattern for special delimiters, left must correspond with right\n  const singlePattern = \"{left}(?:(?!{right}').)*?{right}\";\n\n  // replace {left} and {right} with delimiters, collect as array\n  const patternList = Object.entries(specialDelimiterMap).map(([left, right]) =>\n    singlePattern.replace(/{left}/g, escapeRegExp(left)).replace(/{right}/g, escapeRegExp(right))\n  );\n\n  const specialDelimiters = escapeRegExp(Object.keys(specialDelimiterMap).join(''));\n  // standard pattern for common delimiters, ignores special delimiters\n  const standardDelimiterPattern = String.raw`(?<tag>[^\\s${specialDelimiters}])(?:(?!\\k<tag>').)*?\\k<tag>`;\n\n  // constructs final pattern by joining all cases\n  const qStringPattern = `[Qq]'(?:${standardDelimiterPattern}|${patternList.join('|')})'`;\n\n  return qStringPattern;\n};\n\n// Regex patterns for all supported quote styles.\n//\n// Most of them have a single escaping-style built in,\n// but \"\" and '' support multiple versions of escapes,\n// which must be selected with suffixes: -qq, -bs, -qq-bs, -raw\nexport const quotePatterns = {\n  // - backtick quoted (using `` to escape)\n  '``': '(?:`[^`]*`)+',\n  // - Transact-SQL square bracket quoted (using ]] to escape)\n  '[]': String.raw`(?:\\[[^\\]]*\\])(?:\\][^\\]]*\\])*`,\n  // double-quoted\n  '\"\"-qq': String.raw`(?:\"[^\"]*\")+`, // with repeated quote escapes\n  '\"\"-bs': String.raw`(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")`, // with backslash escapes\n  '\"\"-qq-bs': String.raw`(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")+`, // with repeated quote or backslash escapes\n  '\"\"-raw': String.raw`(?:\"[^\"]*\")`, // no escaping\n  // single-quoted\n  \"''-qq\": String.raw`(?:'[^']*')+`, // with repeated quote escapes\n  \"''-bs\": String.raw`(?:'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')`, // with backslash escapes\n  \"''-qq-bs\": String.raw`(?:'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')+`, // with repeated quote or backslash escapes\n  \"''-raw\": String.raw`(?:'[^']*')`, // no escaping\n  // PostgreSQL dollar-quoted\n  '$$': String.raw`(?<tag>\\$\\w*\\$)[\\s\\S]*?\\k<tag>`,\n  // BigQuery '''triple-quoted''' (using \\' to escape)\n  \"'''..'''\": String.raw`'''[^\\\\]*?(?:\\\\.[^\\\\]*?)*?'''`,\n  // BigQuery \"\"\"triple-quoted\"\"\" (using \\\" to escape)\n  '\"\"\"..\"\"\"': String.raw`\"\"\"[^\\\\]*?(?:\\\\.[^\\\\]*?)*?\"\"\"`,\n  // Hive and Spark variables: ${name}\n  '{}': String.raw`(?:\\{[^\\}]*\\})`,\n  // Oracle q'' strings: q'<text>' q'|text|' ...\n  \"q''\": buildQStringPatterns(),\n};\n\nconst singleQuotePattern = (quoteTypes: QuoteType): string => {\n  if (typeof quoteTypes === 'string') {\n    return quotePatterns[quoteTypes];\n  } else if ('regex' in quoteTypes) {\n    return quoteTypes.regex;\n  } else {\n    return prefixesPattern(quoteTypes) + quotePatterns[quoteTypes.quote];\n  }\n};\n\n/** Builds a RegExp for matching variables */\nexport const variable = (varTypes: VariableType[]): RegExp =>\n  patternToRegex(\n    varTypes\n      .map(varType => ('regex' in varType ? varType.regex : singleQuotePattern(varType)))\n      .join('|')\n  );\n\n/** Builds a quote-delimited pattern for matching all given quote types */\nexport const stringPattern = (quoteTypes: QuoteType[]): string =>\n  quoteTypes.map(singleQuotePattern).join('|');\n\n/** Builds a RegExp for matching quote-delimited patterns */\nexport const string = (quoteTypes: QuoteType[]): RegExp =>\n  patternToRegex(stringPattern(quoteTypes));\n\n/**\n * Builds a RegExp for valid identifiers in a SQL dialect\n */\nexport const identifier = (specialChars: IdentChars = {}): RegExp =>\n  patternToRegex(identifierPattern(specialChars));\n\n/**\n * Builds a RegExp string for valid identifiers in a SQL dialect\n */\nexport const identifierPattern = ({\n  first,\n  rest,\n  dashes,\n  allowFirstCharNumber,\n}: IdentChars = {}): string => {\n  // Unicode letters, diacritical marks and underscore\n  const letter = '\\\\p{Alphabetic}\\\\p{Mark}_';\n  // Numbers 0..9, plus various unicode numbers\n  const number = '\\\\p{Decimal_Number}';\n\n  const firstChars = escapeRegExp(first ?? '');\n  const restChars = escapeRegExp(rest ?? '');\n\n  const pattern = allowFirstCharNumber\n    ? `[${letter}${number}${firstChars}][${letter}${number}${restChars}]*`\n    : `[${letter}${firstChars}][${letter}${number}${restChars}]*`;\n\n  return dashes ? withDashes(pattern) : pattern;\n};\n","/**\n * Determines line and column number of character index in source code.\n */\nexport function lineColFromIndex(source: string, index: number): LineCol {\n  const lines = source.slice(0, index).split(/\\n/);\n  return { line: lines.length, col: lines[lines.length - 1].length + 1 };\n}\n\nexport interface LineCol {\n  line: number;\n  col: number;\n}\n","import { Token, TokenType } from './token.js';\nimport { lineColFromIndex } from './lineColFromIndex.js';\nimport { WHITESPACE_REGEX } from './regexUtil.js';\n\nexport interface RegExpLike {\n  lastIndex: number;\n  exec(input: string): string[] | null;\n}\n\nexport interface TokenRule {\n  type: TokenType;\n  // Normally a RegExp object.\n  // But to allow for more complex matching logic,\n  // an object can be given that implements a RegExpLike interface.\n  regex: RegExpLike;\n  // Called with the raw string that was matched\n  text?: (rawText: string) => string;\n  key?: (rawText: string) => string;\n}\n\nexport default class TokenizerEngine {\n  private input = ''; // The input SQL string to process\n  private index = 0; // Current position in string\n\n  constructor(private rules: TokenRule[], private dialectName: string) {}\n\n  /**\n   * Takes a SQL string and breaks it into tokens.\n   * Each token is an object with type and value.\n   *\n   * @param {string} input - The SQL string\n   * @returns {Token[]} output token stream\n   */\n  public tokenize(input: string): Token[] {\n    this.input = input;\n    this.index = 0;\n    const tokens: Token[] = [];\n    let token: Token | undefined;\n\n    // Keep processing the string until end is reached\n    while (this.index < this.input.length) {\n      // skip any preceding whitespace\n      const precedingWhitespace = this.getWhitespace();\n\n      if (this.index < this.input.length) {\n        // Get the next token and the token type\n        token = this.getNextToken();\n        if (!token) {\n          throw this.createParseError();\n        }\n\n        tokens.push({ ...token, precedingWhitespace });\n      }\n    }\n    return tokens;\n  }\n\n  private createParseError(): Error {\n    const text = this.input.slice(this.index, this.index + 10);\n    const { line, col } = lineColFromIndex(this.input, this.index);\n    return new Error(\n      `Parse error: Unexpected \"${text}\" at line ${line} column ${col}.\\n${this.dialectInfo()}`\n    );\n  }\n\n  private dialectInfo(): string {\n    if (this.dialectName === 'sql') {\n      return (\n        `This likely happens because you're using the default \"sql\" dialect.\\n` +\n        `If possible, please select a more specific dialect (like sqlite, postgresql, etc).`\n      );\n    } else {\n      return `SQL dialect used: \"${this.dialectName}\".`;\n    }\n  }\n\n  private getWhitespace(): string | undefined {\n    WHITESPACE_REGEX.lastIndex = this.index;\n\n    const matches = WHITESPACE_REGEX.exec(this.input);\n    if (matches) {\n      // Advance current position by matched whitespace length\n      this.index += matches[0].length;\n      return matches[0];\n    }\n    return undefined;\n  }\n\n  private getNextToken(): Token | undefined {\n    for (const rule of this.rules) {\n      const token = this.match(rule);\n      if (token) {\n        return token;\n      }\n    }\n    return undefined;\n  }\n\n  // Attempts to match token rule regex at current position in input\n  private match(rule: TokenRule): Token | undefined {\n    rule.regex.lastIndex = this.index;\n    const matches = rule.regex.exec(this.input);\n    if (matches) {\n      const matchedText = matches[0];\n\n      const token: Token = {\n        type: rule.type,\n        raw: matchedText,\n        text: rule.text ? rule.text(matchedText) : matchedText,\n        start: this.index,\n      };\n\n      if (rule.key) {\n        token.key = rule.key(matchedText);\n      }\n\n      // Advance current position by matched token length\n      this.index += matchedText.length;\n      return token;\n    }\n    return undefined;\n  }\n}\n","/* eslint-disable no-cond-assign */\nimport { RegExpLike } from './TokenizerEngine.js';\n\nconst START = /\\/\\*/uy; // matches: /*\nconst ANY_CHAR = /[\\s\\S]/uy; // matches single character\nconst END = /\\*\\//uy; // matches: */\n\n/**\n * An object mimicking a regular expression,\n * for matching nested block-comments.\n */\nexport class NestedComment implements RegExpLike {\n  public lastIndex: number = 0;\n\n  public exec(input: string): string[] | null {\n    let result = '';\n    let match: string | null;\n    let nestLevel = 0;\n\n    if ((match = this.matchSection(START, input))) {\n      result += match;\n      nestLevel++;\n    } else {\n      return null;\n    }\n\n    while (nestLevel > 0) {\n      if ((match = this.matchSection(START, input))) {\n        result += match;\n        nestLevel++;\n      } else if ((match = this.matchSection(END, input))) {\n        result += match;\n        nestLevel--;\n      } else if ((match = this.matchSection(ANY_CHAR, input))) {\n        result += match;\n      } else {\n        return null;\n      }\n    }\n\n    return [result];\n  }\n\n  private matchSection(regex: RegExp, input: string): string | null {\n    regex.lastIndex = this.lastIndex;\n    const matches = regex.exec(input);\n    if (matches) {\n      this.lastIndex += matches[0].length;\n    }\n    return matches ? matches[0] : null;\n  }\n}\n","import { Token, TokenType } from './token.js';\nimport * as regex from './regexFactory.js';\nimport { ParamTypes, TokenizerOptions } from './TokenizerOptions.js';\nimport TokenizerEngine, { TokenRule } from './TokenizerEngine.js';\nimport { escapeRegExp, patternToRegex } from './regexUtil.js';\nimport { equalizeWhitespace, Optional } from '../utils.js';\nimport { NestedComment } from './NestedComment.js';\n\ntype OptionalTokenRule = Optional<TokenRule, 'regex'>;\n\nexport default class Tokenizer {\n  private rulesBeforeParams: TokenRule[];\n  private rulesAfterParams: TokenRule[];\n\n  constructor(private cfg: TokenizerOptions, private dialectName: string) {\n    this.rulesBeforeParams = this.buildRulesBeforeParams(cfg);\n    this.rulesAfterParams = this.buildRulesAfterParams(cfg);\n  }\n\n  public tokenize(input: string, paramTypesOverrides: ParamTypes): Token[] {\n    const rules = [\n      ...this.rulesBeforeParams,\n      ...this.buildParamRules(this.cfg, paramTypesOverrides),\n      ...this.rulesAfterParams,\n    ];\n    const tokens = new TokenizerEngine(rules, this.dialectName).tokenize(input);\n    return this.cfg.postProcess ? this.cfg.postProcess(tokens) : tokens;\n  }\n\n  // These rules can be cached as they only depend on\n  // the Tokenizer config options specified for each SQL dialect\n  private buildRulesBeforeParams(cfg: TokenizerOptions): TokenRule[] {\n    return this.validRules([\n      {\n        type: TokenType.BLOCK_COMMENT,\n        regex:\n          /(\\/\\* *sql-formatter-disable *\\*\\/[\\s\\S]*?(?:\\/\\* *sql-formatter-enable *\\*\\/|$))/uy,\n      },\n      {\n        type: TokenType.BLOCK_COMMENT,\n        regex: cfg.nestedBlockComments ? new NestedComment() : /(\\/\\*[^]*?\\*\\/)/uy,\n      },\n      {\n        type: TokenType.LINE_COMMENT,\n        regex: regex.lineComment(cfg.lineCommentTypes ?? ['--']),\n      },\n      {\n        type: TokenType.QUOTED_IDENTIFIER,\n        regex: regex.string(cfg.identTypes),\n      },\n      {\n        type: TokenType.NUMBER,\n        regex:\n          /(?:0x[0-9a-fA-F]+|0b[01]+|(?:-\\s*)?(?:[0-9]*\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)(?:[eE][-+]?[0-9]+(?:\\.[0-9]+)?)?)(?![\\w\\p{Alphabetic}])/uy,\n      },\n      // RESERVED_PHRASE is matched before all other keyword tokens\n      // to e.g. prioritize matching \"TIMESTAMP WITH TIME ZONE\" phrase over \"WITH\" clause.\n      {\n        type: TokenType.RESERVED_PHRASE,\n        regex: regex.reservedWord(cfg.reservedPhrases ?? [], cfg.identChars),\n        text: toCanonical,\n      },\n      {\n        type: TokenType.CASE,\n        regex: /CASE\\b/iuy,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.END,\n        regex: /END\\b/iuy,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.BETWEEN,\n        regex: /BETWEEN\\b/iuy,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.LIMIT,\n        regex: cfg.reservedClauses.includes('LIMIT') ? /LIMIT\\b/iuy : undefined,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.RESERVED_CLAUSE,\n        regex: regex.reservedWord(cfg.reservedClauses, cfg.identChars),\n        text: toCanonical,\n      },\n      {\n        type: TokenType.RESERVED_SELECT,\n        regex: regex.reservedWord(cfg.reservedSelect, cfg.identChars),\n        text: toCanonical,\n      },\n      {\n        type: TokenType.RESERVED_SET_OPERATION,\n        regex: regex.reservedWord(cfg.reservedSetOperations, cfg.identChars),\n        text: toCanonical,\n      },\n      {\n        type: TokenType.WHEN,\n        regex: /WHEN\\b/iuy,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.ELSE,\n        regex: /ELSE\\b/iuy,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.THEN,\n        regex: /THEN\\b/iuy,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.RESERVED_JOIN,\n        regex: regex.reservedWord(cfg.reservedJoins, cfg.identChars),\n        text: toCanonical,\n      },\n      {\n        type: TokenType.AND,\n        regex: /AND\\b/iuy,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.OR,\n        regex: /OR\\b/iuy,\n        text: toCanonical,\n      },\n      {\n        type: TokenType.XOR,\n        regex: cfg.supportsXor ? /XOR\\b/iuy : undefined,\n        text: toCanonical,\n      },\n      ...(cfg.operatorKeyword\n        ? [\n            {\n              type: TokenType.OPERATOR,\n              regex: /OPERATOR *\\([^)]+\\)/iuy,\n            },\n          ]\n        : []),\n      {\n        type: TokenType.RESERVED_FUNCTION_NAME,\n        regex: regex.reservedWord(cfg.reservedFunctionNames, cfg.identChars),\n        text: toCanonical,\n      },\n      {\n        type: TokenType.RESERVED_DATA_TYPE,\n        regex: regex.reservedWord(cfg.reservedDataTypes, cfg.identChars),\n        text: toCanonical,\n      },\n      {\n        type: TokenType.RESERVED_KEYWORD,\n        regex: regex.reservedWord(cfg.reservedKeywords, cfg.identChars),\n        text: toCanonical,\n      },\n    ]);\n  }\n\n  // These rules can also be cached as they only depend on\n  // the Tokenizer config options specified for each SQL dialect\n  private buildRulesAfterParams(cfg: TokenizerOptions): TokenRule[] {\n    return this.validRules([\n      {\n        type: TokenType.VARIABLE,\n        regex: cfg.variableTypes ? regex.variable(cfg.variableTypes) : undefined,\n      },\n      { type: TokenType.STRING, regex: regex.string(cfg.stringTypes) },\n      {\n        type: TokenType.IDENTIFIER,\n        regex: regex.identifier(cfg.identChars),\n      },\n      { type: TokenType.DELIMITER, regex: /[;]/uy },\n      { type: TokenType.COMMA, regex: /[,]/y },\n      {\n        type: TokenType.OPEN_PAREN,\n        regex: regex.parenthesis('open', cfg.extraParens),\n      },\n      {\n        type: TokenType.CLOSE_PAREN,\n        regex: regex.parenthesis('close', cfg.extraParens),\n      },\n      {\n        type: TokenType.OPERATOR,\n        regex: regex.operator([\n          // standard operators\n          '+',\n          '-',\n          '/',\n          '>',\n          '<',\n          '=',\n          '<>',\n          '<=',\n          '>=',\n          '!=',\n          ...(cfg.operators ?? []),\n        ]),\n      },\n      { type: TokenType.ASTERISK, regex: /[*]/uy },\n      {\n        type: TokenType.PROPERTY_ACCESS_OPERATOR,\n        regex: regex.operator(['.', ...(cfg.propertyAccessOperators ?? [])]),\n      },\n    ]);\n  }\n\n  // These rules can't be blindly cached as the paramTypesOverrides object\n  // can differ on each invocation of the format() function.\n  private buildParamRules(cfg: TokenizerOptions, paramTypesOverrides: ParamTypes): TokenRule[] {\n    // Each dialect has its own default parameter types (if any),\n    // but these can be overriden by the user of the library.\n    const paramTypes = {\n      named: paramTypesOverrides?.named || cfg.paramTypes?.named || [],\n      quoted: paramTypesOverrides?.quoted || cfg.paramTypes?.quoted || [],\n      numbered: paramTypesOverrides?.numbered || cfg.paramTypes?.numbered || [],\n      positional:\n        typeof paramTypesOverrides?.positional === 'boolean'\n          ? paramTypesOverrides.positional\n          : cfg.paramTypes?.positional,\n      custom: paramTypesOverrides?.custom || cfg.paramTypes?.custom || [],\n    };\n\n    return this.validRules([\n      {\n        type: TokenType.NAMED_PARAMETER,\n        regex: regex.parameter(\n          paramTypes.named,\n          regex.identifierPattern(cfg.paramChars || cfg.identChars)\n        ),\n        key: v => v.slice(1),\n      },\n      {\n        type: TokenType.QUOTED_PARAMETER,\n        regex: regex.parameter(paramTypes.quoted, regex.stringPattern(cfg.identTypes)),\n        key: v =>\n          (({ tokenKey, quoteChar }) =>\n            tokenKey.replace(new RegExp(escapeRegExp('\\\\' + quoteChar), 'gu'), quoteChar))({\n            tokenKey: v.slice(2, -1),\n            quoteChar: v.slice(-1),\n          }),\n      },\n      {\n        type: TokenType.NUMBERED_PARAMETER,\n        regex: regex.parameter(paramTypes.numbered, '[0-9]+'),\n        key: v => v.slice(1),\n      },\n      {\n        type: TokenType.POSITIONAL_PARAMETER,\n        regex: paramTypes.positional ? /[?]/y : undefined,\n      },\n      ...paramTypes.custom.map(\n        (customParam): TokenRule => ({\n          type: TokenType.CUSTOM_PARAMETER,\n          regex: patternToRegex(customParam.regex),\n          key: customParam.key ?? (v => v),\n        })\n      ),\n    ]);\n  }\n\n  // filters out rules for token types whose regex is undefined\n  private validRules(rules: OptionalTokenRule[]): TokenRule[] {\n    return rules.filter((rule): rule is TokenRule => Boolean(rule.regex));\n  }\n}\n\n/**\n * Converts keywords (and keyword sequences) to canonical form:\n * - in uppercase\n * - single spaces between words\n */\nconst toCanonical = (v: string) => equalizeWhitespace(v.toUpperCase());\n","import {\n  DialectFormatOptions,\n  ProcessedDialectFormatOptions,\n} from './formatter/ExpressionFormatter.js';\nimport Tokenizer from './lexer/Tokenizer.js';\nimport { TokenizerOptions } from './lexer/TokenizerOptions.js';\n\nexport interface DialectOptions {\n  name: string;\n  tokenizerOptions: TokenizerOptions;\n  formatOptions: DialectFormatOptions;\n}\n\nexport interface Dialect {\n  tokenizer: Tokenizer;\n  formatOptions: ProcessedDialectFormatOptions;\n}\n\nconst cache = new Map<DialectOptions, Dialect>();\n\n/**\n * Factory function for building Dialect objects.\n * When called repeatedly with same options object returns the cached Dialect,\n * to avoid the cost of creating it again.\n */\nexport const createDialect = (options: DialectOptions): Dialect => {\n  let dialect = cache.get(options);\n  if (!dialect) {\n    dialect = dialectFromOptions(options);\n    cache.set(options, dialect);\n  }\n  return dialect;\n};\n\nconst dialectFromOptions = (dialectOptions: DialectOptions): Dialect => ({\n  tokenizer: new Tokenizer(dialectOptions.tokenizerOptions, dialectOptions.name),\n  formatOptions: processDialectFormatOptions(dialectOptions.formatOptions),\n});\n\nconst processDialectFormatOptions = (\n  options: DialectFormatOptions\n): ProcessedDialectFormatOptions => ({\n  alwaysDenseOperators: options.alwaysDenseOperators || [],\n  onelineClauses: Object.fromEntries(options.onelineClauses.map(name => [name, true])),\n  tabularOnelineClauses: Object.fromEntries(\n    (options.tabularOnelineClauses ?? options.onelineClauses).map(name => [name, true])\n  ),\n});\n","import { FormatOptions } from '../FormatOptions.js';\n\n// Utility functions for config options\n\n/**\n * Creates a string to use for one step of indentation.\n */\nexport function indentString(cfg: FormatOptions): string {\n  if (cfg.indentStyle === 'tabularLeft' || cfg.indentStyle === 'tabularRight') {\n    return ' '.repeat(10);\n  }\n  if (cfg.useTabs) {\n    return '\\t';\n  }\n  return ' '.repeat(cfg.tabWidth);\n}\n\n/**\n * True when indentStyle is one of the tabular ones.\n */\nexport function isTabularStyle(cfg: FormatOptions): boolean {\n  return cfg.indentStyle === 'tabularLeft' || cfg.indentStyle === 'tabularRight';\n}\n","export type ParamItems = { [k: string]: string };\n\n/**\n * Handles placeholder replacement with given params.\n */\nexport default class Params {\n  private params: ParamItems | string[] | undefined;\n  private index: number;\n\n  constructor(params: ParamItems | string[] | undefined) {\n    this.params = params;\n    this.index = 0;\n  }\n\n  /**\n   * Returns param value that matches given placeholder with param key.\n   */\n  public get({ key, text }: { key?: string; text: string }): string {\n    if (!this.params) {\n      return text;\n    }\n\n    if (key) {\n      return (this.params as ParamItems)[key];\n    }\n    return (this.params as string[])[this.index++];\n  }\n\n  /**\n   * Returns index of current positional parameter.\n   */\n  public getPositionalParameterIndex(): number {\n    return this.index;\n  }\n\n  /**\n   * Sets index of current positional parameter.\n   */\n  public setPositionalParameterIndex(i: number) {\n    this.index = i;\n  }\n}\n","import nearley from 'nearley';\n\nimport Tokenizer from '../lexer/Tokenizer.js';\nimport { disambiguateTokens } from '../lexer/disambiguateTokens.js';\nimport { ParamTypes } from '../lexer/TokenizerOptions.js';\nimport { StatementNode } from './ast.js';\nimport grammar from './grammar.js';\nimport LexerAdapter from './LexerAdapter.js';\nimport { createEofToken } from '../lexer/token.js';\n\nconst { Parser: NearleyParser, Grammar } = nearley;\n\nexport interface Parser {\n  parse(sql: string, paramTypesOverrides: ParamTypes): StatementNode[];\n}\n\n/**\n * Creates a parser object which wraps the setup of Nearley parser\n */\nexport function createParser(tokenizer: Tokenizer): Parser {\n  let paramTypesOverrides: ParamTypes = {};\n  const lexer = new LexerAdapter(chunk => [\n    ...disambiguateTokens(tokenizer.tokenize(chunk, paramTypesOverrides)),\n    createEofToken(chunk.length),\n  ]);\n  const parser = new NearleyParser(Grammar.fromCompiled(grammar), { lexer });\n\n  return {\n    parse: (sql: string, paramTypes: ParamTypes) => {\n      // share paramTypesOverrides with Tokenizer\n      paramTypesOverrides = paramTypes;\n\n      const { results } = parser.feed(sql);\n\n      if (results.length === 1) {\n        return results[0];\n      } else if (results.length === 0) {\n        // Ideally we would report a line number where the parser failed,\n        // but I haven't found a way to get this info from Nearley :(\n        throw new Error('Parse error: Invalid SQL');\n      } else {\n        throw new Error(`Parse error: Ambiguous grammar\\n${JSON.stringify(results, undefined, 2)}`);\n      }\n    },\n  };\n}\n","import { isReserved, Token, TokenType } from './token.js';\n\n/**\n * Ensures that no keyword token (RESERVED_*) is preceded by dot (.)\n * or any other property-access operator.\n *\n * Ensures that all RESERVED_FUNCTION_NAME tokens are followed by \"(\".\n * If they're not, converts the token to RESERVED_KEYWORD.\n *\n * Converts RESERVED_DATA_TYPE tokens followed by \"(\" to RESERVED_PARAMETERIZED_DATA_TYPE.\n *\n * When IDENTIFIER or RESERVED_DATA_TYPE token is followed by \"[\"\n * converts it to ARRAY_IDENTIFIER or ARRAY_KEYWORD accordingly.\n *\n * This is needed to avoid ambiguity in parser which expects function names\n * to always be followed by open-paren, and to distinguish between\n * array accessor `foo[1]` and array literal `[1, 2, 3]`.\n */\nexport function disambiguateTokens(tokens: Token[]): Token[] {\n  return tokens\n    .map(propertyNameKeywordToIdent)\n    .map(funcNameToKeyword)\n    .map(dataTypeToParameterizedDataType)\n    .map(identToArrayIdent)\n    .map(dataTypeToArrayKeyword);\n}\n\nconst propertyNameKeywordToIdent = (token: Token, i: number, tokens: Token[]): Token => {\n  if (isReserved(token.type)) {\n    const prevToken = prevNonCommentToken(tokens, i);\n    if (prevToken && prevToken.type === TokenType.PROPERTY_ACCESS_OPERATOR) {\n      return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n    }\n  }\n  return token;\n};\n\nconst funcNameToKeyword = (token: Token, i: number, tokens: Token[]): Token => {\n  if (token.type === TokenType.RESERVED_FUNCTION_NAME) {\n    const nextToken = nextNonCommentToken(tokens, i);\n    if (!nextToken || !isOpenParen(nextToken)) {\n      return { ...token, type: TokenType.RESERVED_KEYWORD };\n    }\n  }\n  return token;\n};\n\nconst dataTypeToParameterizedDataType = (token: Token, i: number, tokens: Token[]): Token => {\n  if (token.type === TokenType.RESERVED_DATA_TYPE) {\n    const nextToken = nextNonCommentToken(tokens, i);\n    if (nextToken && isOpenParen(nextToken)) {\n      return { ...token, type: TokenType.RESERVED_PARAMETERIZED_DATA_TYPE };\n    }\n  }\n  return token;\n};\n\nconst identToArrayIdent = (token: Token, i: number, tokens: Token[]): Token => {\n  if (token.type === TokenType.IDENTIFIER) {\n    const nextToken = nextNonCommentToken(tokens, i);\n    if (nextToken && isOpenBracket(nextToken)) {\n      return { ...token, type: TokenType.ARRAY_IDENTIFIER };\n    }\n  }\n  return token;\n};\n\nconst dataTypeToArrayKeyword = (token: Token, i: number, tokens: Token[]): Token => {\n  if (token.type === TokenType.RESERVED_DATA_TYPE) {\n    const nextToken = nextNonCommentToken(tokens, i);\n    if (nextToken && isOpenBracket(nextToken)) {\n      return { ...token, type: TokenType.ARRAY_KEYWORD };\n    }\n  }\n  return token;\n};\n\nconst prevNonCommentToken = (tokens: Token[], index: number): Token | undefined =>\n  nextNonCommentToken(tokens, index, -1);\n\nconst nextNonCommentToken = (\n  tokens: Token[],\n  index: number,\n  dir: -1 | 1 = 1\n): Token | undefined => {\n  let i = 1;\n  while (tokens[index + i * dir] && isComment(tokens[index + i * dir])) {\n    i++;\n  }\n  return tokens[index + i * dir];\n};\n\nconst isOpenParen = (t: Token): boolean => t.type === TokenType.OPEN_PAREN && t.text === '(';\n\nconst isOpenBracket = (t: Token): boolean => t.type === TokenType.OPEN_PAREN && t.text === '[';\n\nconst isComment = (t: Token): boolean =>\n  t.type === TokenType.BLOCK_COMMENT || t.type === TokenType.LINE_COMMENT;\n","import { lineColFromIndex } from '../lexer/lineColFromIndex.js';\nimport { Token, TokenType } from '../lexer/token.js';\n\n// Nearly type definitions say that Token must have a value field,\n// which however is wrong.  Instead Nearley expects a text field.\ntype NearleyToken = Token & { value: string };\n\nexport default class LexerAdapter {\n  private index = 0;\n  private tokens: Token[] = [];\n  private input = '';\n\n  constructor(private tokenize: (chunk: string) => Token[]) {}\n\n  reset(chunk: string, _info: any) {\n    this.input = chunk;\n    this.index = 0;\n    this.tokens = this.tokenize(chunk);\n  }\n\n  next(): NearleyToken | undefined {\n    return this.tokens[this.index++] as NearleyToken | undefined;\n  }\n\n  save(): any {}\n\n  formatError(token: NearleyToken) {\n    const { line, col } = lineColFromIndex(this.input, token.start);\n    return `Parse error at token: ${token.text} at line ${line} column ${col}`;\n  }\n\n  has(name: string): boolean {\n    return name in TokenType;\n  }\n}\n","// Generated automatically by nearley, version 2.20.1\n// http://github.com/Hardmath123/nearley\n// Bypasses TS6133. Allow declared but unused functions.\n// @ts-ignore\nfunction id(d: any[]): any { return d[0]; }\ndeclare var DELIMITER: any;\ndeclare var EOF: any;\ndeclare var LIMIT: any;\ndeclare var COMMA: any;\ndeclare var RESERVED_SELECT: any;\ndeclare var ASTERISK: any;\ndeclare var RESERVED_CLAUSE: any;\ndeclare var RESERVED_SET_OPERATION: any;\ndeclare var ARRAY_IDENTIFIER: any;\ndeclare var ARRAY_KEYWORD: any;\ndeclare var RESERVED_FUNCTION_NAME: any;\ndeclare var PROPERTY_ACCESS_OPERATOR: any;\ndeclare var BETWEEN: any;\ndeclare var AND: any;\ndeclare var CASE: any;\ndeclare var END: any;\ndeclare var WHEN: any;\ndeclare var THEN: any;\ndeclare var ELSE: any;\ndeclare var OPERATOR: any;\ndeclare var IDENTIFIER: any;\ndeclare var QUOTED_IDENTIFIER: any;\ndeclare var VARIABLE: any;\ndeclare var NAMED_PARAMETER: any;\ndeclare var QUOTED_PARAMETER: any;\ndeclare var NUMBERED_PARAMETER: any;\ndeclare var POSITIONAL_PARAMETER: any;\ndeclare var CUSTOM_PARAMETER: any;\ndeclare var NUMBER: any;\ndeclare var STRING: any;\ndeclare var RESERVED_KEYWORD: any;\ndeclare var RESERVED_PHRASE: any;\ndeclare var RESERVED_JOIN: any;\ndeclare var RESERVED_DATA_TYPE: any;\ndeclare var RESERVED_PARAMETERIZED_DATA_TYPE: any;\ndeclare var OR: any;\ndeclare var XOR: any;\ndeclare var LINE_COMMENT: any;\ndeclare var BLOCK_COMMENT: any;\ndeclare var DISABLE_COMMENT: any;\n\nimport LexerAdapter from './LexerAdapter.js';\nimport { NodeType, AstNode, CommentNode, KeywordNode, IdentifierNode, DataTypeNode } from './ast.js';\nimport { Token, TokenType } from '../lexer/token.js';\n\n// The lexer here is only to provide the has() method,\n// that's used inside the generated grammar definition.\n// A proper lexer gets passed to Nearley Parser constructor.\nconst lexer = new LexerAdapter(chunk => []);\n\n// Used for unwrapping grammar rules like:\n//\n//   rule -> ( foo | bar | baz )\n//\n// which otherwise produce single element nested inside two arrays\nconst unwrap = <T>([[el]]: T[][]): T => el;\n\nconst toKeywordNode = (token: Token): KeywordNode => ({\n  type: NodeType.keyword,\n  tokenType: token.type,\n  text: token.text,\n  raw: token.raw,\n});\n\nconst toDataTypeNode = (token: Token): DataTypeNode => ({\n  type: NodeType.data_type,\n  text: token.text,\n  raw: token.raw,\n});\n\ninterface CommentAttachments {\n  leading?: CommentNode[];\n  trailing?: CommentNode[];\n}\n\nconst addComments = (node: AstNode, { leading, trailing }: CommentAttachments): AstNode => {\n  if (leading?.length) {\n    node = { ...node, leadingComments: leading };\n  }\n  if (trailing?.length) {\n    node = { ...node, trailingComments: trailing };\n  }\n  return node;\n};\n\nconst addCommentsToArray = (nodes: AstNode[], { leading, trailing }: CommentAttachments): AstNode[] => {\n  if (leading?.length) {\n    const [first, ...rest] = nodes;\n    nodes = [addComments(first, { leading }), ...rest];\n  }\n  if (trailing?.length) {\n    const lead = nodes.slice(0, -1);\n    const last = nodes[nodes.length-1];\n    nodes = [...lead, addComments(last, { trailing })];\n  }\n  return nodes;\n};\n\n\ninterface NearleyToken {\n  value: any;\n  [key: string]: any;\n};\n\ninterface NearleyLexer {\n  reset: (chunk: string, info: any) => void;\n  next: () => NearleyToken | undefined;\n  save: () => any;\n  formatError: (token: never) => string;\n  has: (tokenType: string) => boolean;\n};\n\ninterface NearleyRule {\n  name: string;\n  symbols: NearleySymbol[];\n  postprocess?: (d: any[], loc?: number, reject?: {}) => any;\n};\n\ntype NearleySymbol = string | { literal: any } | { test: (token: any) => boolean };\n\ninterface Grammar {\n  Lexer: NearleyLexer | undefined;\n  ParserRules: NearleyRule[];\n  ParserStart: string;\n};\n\nconst grammar: Grammar = {\n  Lexer: lexer,\n  ParserRules: [\n    {\"name\": \"main$ebnf$1\", \"symbols\": []},\n    {\"name\": \"main$ebnf$1\", \"symbols\": [\"main$ebnf$1\", \"statement\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"main\", \"symbols\": [\"main$ebnf$1\"], \"postprocess\": \n        ([statements]) => {\n          const last = statements[statements.length - 1];\n          if (last && !last.hasSemicolon) {\n            // we have fully parsed the whole file\n            // discard the last statement when it's empty\n            return last.children.length > 0 ? statements : statements.slice(0, -1);\n          } else {\n            // parsing still in progress, do nothing\n            return statements;\n          }\n        }\n        },\n    {\"name\": \"statement$subexpression$1\", \"symbols\": [(lexer.has(\"DELIMITER\") ? {type: \"DELIMITER\"} : DELIMITER)]},\n    {\"name\": \"statement$subexpression$1\", \"symbols\": [(lexer.has(\"EOF\") ? {type: \"EOF\"} : EOF)]},\n    {\"name\": \"statement\", \"symbols\": [\"expressions_or_clauses\", \"statement$subexpression$1\"], \"postprocess\": \n        ([children, [delimiter]]) => ({\n          type: NodeType.statement,\n          children,\n          hasSemicolon: delimiter.type === TokenType.DELIMITER,\n        })\n        },\n    {\"name\": \"expressions_or_clauses$ebnf$1\", \"symbols\": []},\n    {\"name\": \"expressions_or_clauses$ebnf$1\", \"symbols\": [\"expressions_or_clauses$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"expressions_or_clauses$ebnf$2\", \"symbols\": []},\n    {\"name\": \"expressions_or_clauses$ebnf$2\", \"symbols\": [\"expressions_or_clauses$ebnf$2\", \"clause\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"expressions_or_clauses\", \"symbols\": [\"expressions_or_clauses$ebnf$1\", \"expressions_or_clauses$ebnf$2\"], \"postprocess\": \n        ([expressions, clauses]) => [...expressions, ...clauses]\n        },\n    {\"name\": \"clause$subexpression$1\", \"symbols\": [\"limit_clause\"]},\n    {\"name\": \"clause$subexpression$1\", \"symbols\": [\"select_clause\"]},\n    {\"name\": \"clause$subexpression$1\", \"symbols\": [\"other_clause\"]},\n    {\"name\": \"clause$subexpression$1\", \"symbols\": [\"set_operation\"]},\n    {\"name\": \"clause\", \"symbols\": [\"clause$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"symbols\": [\"free_form_sql\"]},\n    {\"name\": \"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"symbols\": [\"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"limit_clause$ebnf$1$subexpression$1\", \"symbols\": [(lexer.has(\"COMMA\") ? {type: \"COMMA\"} : COMMA), \"limit_clause$ebnf$1$subexpression$1$ebnf$1\"]},\n    {\"name\": \"limit_clause$ebnf$1\", \"symbols\": [\"limit_clause$ebnf$1$subexpression$1\"], \"postprocess\": id},\n    {\"name\": \"limit_clause$ebnf$1\", \"symbols\": [], \"postprocess\": () => null},\n    {\"name\": \"limit_clause\", \"symbols\": [(lexer.has(\"LIMIT\") ? {type: \"LIMIT\"} : LIMIT), \"_\", \"expression_chain_\", \"limit_clause$ebnf$1\"], \"postprocess\": \n        ([limitToken, _, exp1, optional]) => {\n          if (optional) {\n            const [comma, exp2] = optional;\n            return {\n              type: NodeType.limit_clause,\n              limitKw: addComments(toKeywordNode(limitToken), { trailing: _ }),\n              offset: exp1,\n              count: exp2,\n            };\n          } else {\n            return {\n              type: NodeType.limit_clause,\n              limitKw: addComments(toKeywordNode(limitToken), { trailing: _ }),\n              count: exp1,\n            };\n          }\n        }\n        },\n    {\"name\": \"select_clause$subexpression$1$ebnf$1\", \"symbols\": []},\n    {\"name\": \"select_clause$subexpression$1$ebnf$1\", \"symbols\": [\"select_clause$subexpression$1$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"select_clause$subexpression$1\", \"symbols\": [\"all_columns_asterisk\", \"select_clause$subexpression$1$ebnf$1\"]},\n    {\"name\": \"select_clause$subexpression$1$ebnf$2\", \"symbols\": []},\n    {\"name\": \"select_clause$subexpression$1$ebnf$2\", \"symbols\": [\"select_clause$subexpression$1$ebnf$2\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"select_clause$subexpression$1\", \"symbols\": [\"asteriskless_free_form_sql\", \"select_clause$subexpression$1$ebnf$2\"]},\n    {\"name\": \"select_clause\", \"symbols\": [(lexer.has(\"RESERVED_SELECT\") ? {type: \"RESERVED_SELECT\"} : RESERVED_SELECT), \"select_clause$subexpression$1\"], \"postprocess\": \n        ([nameToken, [exp, expressions]]) => ({\n          type: NodeType.clause,\n          nameKw: toKeywordNode(nameToken),\n          children: [exp, ...expressions],\n        })\n        },\n    {\"name\": \"select_clause\", \"symbols\": [(lexer.has(\"RESERVED_SELECT\") ? {type: \"RESERVED_SELECT\"} : RESERVED_SELECT)], \"postprocess\": \n        ([nameToken]) => ({\n          type: NodeType.clause,\n          nameKw: toKeywordNode(nameToken),\n          children: [],\n        })\n        },\n    {\"name\": \"all_columns_asterisk\", \"symbols\": [(lexer.has(\"ASTERISK\") ? {type: \"ASTERISK\"} : ASTERISK)], \"postprocess\": \n        () => ({ type: NodeType.all_columns_asterisk })\n        },\n    {\"name\": \"other_clause$ebnf$1\", \"symbols\": []},\n    {\"name\": \"other_clause$ebnf$1\", \"symbols\": [\"other_clause$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"other_clause\", \"symbols\": [(lexer.has(\"RESERVED_CLAUSE\") ? {type: \"RESERVED_CLAUSE\"} : RESERVED_CLAUSE), \"other_clause$ebnf$1\"], \"postprocess\": \n        ([nameToken, children]) => ({\n          type: NodeType.clause,\n          nameKw: toKeywordNode(nameToken),\n          children,\n        })\n        },\n    {\"name\": \"set_operation$ebnf$1\", \"symbols\": []},\n    {\"name\": \"set_operation$ebnf$1\", \"symbols\": [\"set_operation$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"set_operation\", \"symbols\": [(lexer.has(\"RESERVED_SET_OPERATION\") ? {type: \"RESERVED_SET_OPERATION\"} : RESERVED_SET_OPERATION), \"set_operation$ebnf$1\"], \"postprocess\": \n        ([nameToken, children]) => ({\n          type: NodeType.set_operation,\n          nameKw: toKeywordNode(nameToken),\n          children,\n        })\n        },\n    {\"name\": \"expression_chain_$ebnf$1\", \"symbols\": [\"expression_with_comments_\"]},\n    {\"name\": \"expression_chain_$ebnf$1\", \"symbols\": [\"expression_chain_$ebnf$1\", \"expression_with_comments_\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"expression_chain_\", \"symbols\": [\"expression_chain_$ebnf$1\"], \"postprocess\": id},\n    {\"name\": \"expression_chain$ebnf$1\", \"symbols\": []},\n    {\"name\": \"expression_chain$ebnf$1\", \"symbols\": [\"expression_chain$ebnf$1\", \"_expression_with_comments\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"expression_chain\", \"symbols\": [\"expression\", \"expression_chain$ebnf$1\"], \"postprocess\": \n        ([expr, chain]) => [expr, ...chain]\n        },\n    {\"name\": \"andless_expression_chain$ebnf$1\", \"symbols\": []},\n    {\"name\": \"andless_expression_chain$ebnf$1\", \"symbols\": [\"andless_expression_chain$ebnf$1\", \"_andless_expression_with_comments\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"andless_expression_chain\", \"symbols\": [\"andless_expression\", \"andless_expression_chain$ebnf$1\"], \"postprocess\": \n        ([expr, chain]) => [expr, ...chain]\n        },\n    {\"name\": \"expression_with_comments_\", \"symbols\": [\"expression\", \"_\"], \"postprocess\": \n        ([expr, _]) => addComments(expr, { trailing: _ })\n        },\n    {\"name\": \"_expression_with_comments\", \"symbols\": [\"_\", \"expression\"], \"postprocess\": \n        ([_, expr]) => addComments(expr, { leading: _ })\n        },\n    {\"name\": \"_andless_expression_with_comments\", \"symbols\": [\"_\", \"andless_expression\"], \"postprocess\": \n        ([_, expr]) => addComments(expr, { leading: _ })\n        },\n    {\"name\": \"free_form_sql$subexpression$1\", \"symbols\": [\"asteriskless_free_form_sql\"]},\n    {\"name\": \"free_form_sql$subexpression$1\", \"symbols\": [\"asterisk\"]},\n    {\"name\": \"free_form_sql\", \"symbols\": [\"free_form_sql$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"asteriskless_andless_expression\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"logic_operator\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"comma\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"comment\"]},\n    {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"other_keyword\"]},\n    {\"name\": \"asteriskless_free_form_sql\", \"symbols\": [\"asteriskless_free_form_sql$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"expression$subexpression$1\", \"symbols\": [\"andless_expression\"]},\n    {\"name\": \"expression$subexpression$1\", \"symbols\": [\"logic_operator\"]},\n    {\"name\": \"expression\", \"symbols\": [\"expression$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"andless_expression$subexpression$1\", \"symbols\": [\"asteriskless_andless_expression\"]},\n    {\"name\": \"andless_expression$subexpression$1\", \"symbols\": [\"asterisk\"]},\n    {\"name\": \"andless_expression\", \"symbols\": [\"andless_expression$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"atomic_expression\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"between_predicate\"]},\n    {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"case_expression\"]},\n    {\"name\": \"asteriskless_andless_expression\", \"symbols\": [\"asteriskless_andless_expression$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"array_subscript\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"function_call\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"property_access\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"parenthesis\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"curly_braces\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"square_brackets\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"operator\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"identifier\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"parameter\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"literal\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"data_type\"]},\n    {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"keyword\"]},\n    {\"name\": \"atomic_expression\", \"symbols\": [\"atomic_expression$subexpression$1\"], \"postprocess\": unwrap},\n    {\"name\": \"array_subscript\", \"symbols\": [(lexer.has(\"ARRAY_IDENTIFIER\") ? {type: \"ARRAY_IDENTIFIER\"} : ARRAY_IDENTIFIER), \"_\", \"square_brackets\"], \"postprocess\": \n        ([arrayToken, _, brackets]) => ({\n          type: NodeType.array_subscript,\n          array: addComments({ type: NodeType.identifier, quoted: false, text: arrayToken.text}, { trailing: _ }),\n          parenthesis: brackets,\n        })\n        },\n    {\"name\": \"array_subscript\", \"symbols\": [(lexer.has(\"ARRAY_KEYWORD\") ? {type: \"ARRAY_KEYWORD\"} : ARRAY_KEYWORD), \"_\", \"square_brackets\"], \"postprocess\": \n        ([arrayToken, _, brackets]) => ({\n          type: NodeType.array_subscript,\n          array: addComments(toKeywordNode(arrayToken), { trailing: _ }),\n          parenthesis: brackets,\n        })\n        },\n    {\"name\": \"function_call\", \"symbols\": [(lexer.has(\"RESERVED_FUNCTION_NAME\") ? {type: \"RESERVED_FUNCTION_NAME\"} : RESERVED_FUNCTION_NAME), \"_\", \"parenthesis\"], \"postprocess\": \n        ([nameToken, _, parens]) => ({\n          type: NodeType.function_call,\n          nameKw: addComments(toKeywordNode(nameToken), { trailing: _ }),\n          parenthesis: parens,\n        })\n        },\n    {\"name\": \"parenthesis\", \"symbols\": [{\"literal\":\"(\"}, \"expressions_or_clauses\", {\"literal\":\")\"}], \"postprocess\": \n        ([open, children, close]) => ({\n          type: NodeType.parenthesis,\n          children: children,\n          openParen: \"(\",\n          closeParen: \")\",\n        })\n        },\n    {\"name\": \"curly_braces$ebnf$1\", \"symbols\": []},\n    {\"name\": \"curly_braces$ebnf$1\", \"symbols\": [\"curly_braces$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"curly_braces\", \"symbols\": [{\"literal\":\"{\"}, \"curly_braces$ebnf$1\", {\"literal\":\"}\"}], \"postprocess\": \n        ([open, children, close]) => ({\n          type: NodeType.parenthesis,\n          children: children,\n          openParen: \"{\",\n          closeParen: \"}\",\n        })\n        },\n    {\"name\": \"square_brackets$ebnf$1\", \"symbols\": []},\n    {\"name\": \"square_brackets$ebnf$1\", \"symbols\": [\"square_brackets$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"square_brackets\", \"symbols\": [{\"literal\":\"[\"}, \"square_brackets$ebnf$1\", {\"literal\":\"]\"}], \"postprocess\": \n        ([open, children, close]) => ({\n          type: NodeType.parenthesis,\n          children: children,\n          openParen: \"[\",\n          closeParen: \"]\",\n        })\n        },\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"identifier\"]},\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"array_subscript\"]},\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"all_columns_asterisk\"]},\n    {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"parameter\"]},\n    {\"name\": \"property_access\", \"symbols\": [\"atomic_expression\", \"_\", (lexer.has(\"PROPERTY_ACCESS_OPERATOR\") ? {type: \"PROPERTY_ACCESS_OPERATOR\"} : PROPERTY_ACCESS_OPERATOR), \"_\", \"property_access$subexpression$1\"], \"postprocess\": \n        // Allowing property to be <array_subscript> is currently a hack.\n        // A better way would be to allow <property_access> on the left side of array_subscript,\n        // but we currently can't do that because of another hack that requires\n        // %ARRAY_IDENTIFIER on the left side of <array_subscript>.\n        ([object, _1, dot, _2, [property]]) => {\n          return {\n            type: NodeType.property_access,\n            object: addComments(object, { trailing: _1 }),\n            operator: dot.text,\n            property: addComments(property, { leading: _2 }),\n          };\n        }\n        },\n    {\"name\": \"between_predicate\", \"symbols\": [(lexer.has(\"BETWEEN\") ? {type: \"BETWEEN\"} : BETWEEN), \"_\", \"andless_expression_chain\", \"_\", (lexer.has(\"AND\") ? {type: \"AND\"} : AND), \"_\", \"andless_expression\"], \"postprocess\": \n        ([betweenToken, _1, expr1, _2, andToken, _3, expr2]) => ({\n          type: NodeType.between_predicate,\n          betweenKw: toKeywordNode(betweenToken),\n          expr1: addCommentsToArray(expr1, { leading: _1, trailing: _2 }),\n          andKw: toKeywordNode(andToken),\n          expr2: [addComments(expr2, { leading: _3 })],\n        })\n        },\n    {\"name\": \"case_expression$ebnf$1\", \"symbols\": [\"expression_chain_\"], \"postprocess\": id},\n    {\"name\": \"case_expression$ebnf$1\", \"symbols\": [], \"postprocess\": () => null},\n    {\"name\": \"case_expression$ebnf$2\", \"symbols\": []},\n    {\"name\": \"case_expression$ebnf$2\", \"symbols\": [\"case_expression$ebnf$2\", \"case_clause\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"case_expression\", \"symbols\": [(lexer.has(\"CASE\") ? {type: \"CASE\"} : CASE), \"_\", \"case_expression$ebnf$1\", \"case_expression$ebnf$2\", (lexer.has(\"END\") ? {type: \"END\"} : END)], \"postprocess\": \n        ([caseToken, _, expr, clauses, endToken]) => ({\n          type: NodeType.case_expression,\n          caseKw: addComments(toKeywordNode(caseToken), { trailing: _ }),\n          endKw: toKeywordNode(endToken),\n          expr: expr || [],\n          clauses,\n        })\n        },\n    {\"name\": \"case_clause\", \"symbols\": [(lexer.has(\"WHEN\") ? {type: \"WHEN\"} : WHEN), \"_\", \"expression_chain_\", (lexer.has(\"THEN\") ? {type: \"THEN\"} : THEN), \"_\", \"expression_chain_\"], \"postprocess\": \n        ([whenToken, _1, cond, thenToken, _2, expr]) => ({\n          type: NodeType.case_when,\n          whenKw: addComments(toKeywordNode(whenToken), { trailing: _1 }),\n          thenKw: addComments(toKeywordNode(thenToken), { trailing: _2 }),\n          condition: cond,\n          result: expr,\n        })\n        },\n    {\"name\": \"case_clause\", \"symbols\": [(lexer.has(\"ELSE\") ? {type: \"ELSE\"} : ELSE), \"_\", \"expression_chain_\"], \"postprocess\": \n        ([elseToken, _, expr]) => ({\n          type: NodeType.case_else,\n          elseKw: addComments(toKeywordNode(elseToken), { trailing: _ }),\n          result: expr,\n        })\n        },\n    {\"name\": \"comma$subexpression$1\", \"symbols\": [(lexer.has(\"COMMA\") ? {type: \"COMMA\"} : COMMA)]},\n    {\"name\": \"comma\", \"symbols\": [\"comma$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.comma })},\n    {\"name\": \"asterisk$subexpression$1\", \"symbols\": [(lexer.has(\"ASTERISK\") ? {type: \"ASTERISK\"} : ASTERISK)]},\n    {\"name\": \"asterisk\", \"symbols\": [\"asterisk$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.operator, text: token.text })},\n    {\"name\": \"operator$subexpression$1\", \"symbols\": [(lexer.has(\"OPERATOR\") ? {type: \"OPERATOR\"} : OPERATOR)]},\n    {\"name\": \"operator\", \"symbols\": [\"operator$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.operator, text: token.text })},\n    {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"IDENTIFIER\") ? {type: \"IDENTIFIER\"} : IDENTIFIER)]},\n    {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"QUOTED_IDENTIFIER\") ? {type: \"QUOTED_IDENTIFIER\"} : QUOTED_IDENTIFIER)]},\n    {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"VARIABLE\") ? {type: \"VARIABLE\"} : VARIABLE)]},\n    {\"name\": \"identifier\", \"symbols\": [\"identifier$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.identifier, quoted: token.type !== \"IDENTIFIER\", text: token.text })},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"NAMED_PARAMETER\") ? {type: \"NAMED_PARAMETER\"} : NAMED_PARAMETER)]},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"QUOTED_PARAMETER\") ? {type: \"QUOTED_PARAMETER\"} : QUOTED_PARAMETER)]},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"NUMBERED_PARAMETER\") ? {type: \"NUMBERED_PARAMETER\"} : NUMBERED_PARAMETER)]},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"POSITIONAL_PARAMETER\") ? {type: \"POSITIONAL_PARAMETER\"} : POSITIONAL_PARAMETER)]},\n    {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"CUSTOM_PARAMETER\") ? {type: \"CUSTOM_PARAMETER\"} : CUSTOM_PARAMETER)]},\n    {\"name\": \"parameter\", \"symbols\": [\"parameter$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.parameter, key: token.key, text: token.text })},\n    {\"name\": \"literal$subexpression$1\", \"symbols\": [(lexer.has(\"NUMBER\") ? {type: \"NUMBER\"} : NUMBER)]},\n    {\"name\": \"literal$subexpression$1\", \"symbols\": [(lexer.has(\"STRING\") ? {type: \"STRING\"} : STRING)]},\n    {\"name\": \"literal\", \"symbols\": [\"literal$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.literal, text: token.text })},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_KEYWORD\") ? {type: \"RESERVED_KEYWORD\"} : RESERVED_KEYWORD)]},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_PHRASE\") ? {type: \"RESERVED_PHRASE\"} : RESERVED_PHRASE)]},\n    {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_JOIN\") ? {type: \"RESERVED_JOIN\"} : RESERVED_JOIN)]},\n    {\"name\": \"keyword\", \"symbols\": [\"keyword$subexpression$1\"], \"postprocess\": \n        ([[token]]) => toKeywordNode(token)\n        },\n    {\"name\": \"data_type$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_DATA_TYPE\") ? {type: \"RESERVED_DATA_TYPE\"} : RESERVED_DATA_TYPE)]},\n    {\"name\": \"data_type\", \"symbols\": [\"data_type$subexpression$1\"], \"postprocess\": \n        ([[token]]) => toDataTypeNode(token)\n        },\n    {\"name\": \"data_type\", \"symbols\": [(lexer.has(\"RESERVED_PARAMETERIZED_DATA_TYPE\") ? {type: \"RESERVED_PARAMETERIZED_DATA_TYPE\"} : RESERVED_PARAMETERIZED_DATA_TYPE), \"_\", \"parenthesis\"], \"postprocess\": \n        ([nameToken, _, parens]) => ({\n          type: NodeType.parameterized_data_type,\n          dataType: addComments(toDataTypeNode(nameToken), { trailing: _ }),\n          parenthesis: parens,\n        })\n        },\n    {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"AND\") ? {type: \"AND\"} : AND)]},\n    {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"OR\") ? {type: \"OR\"} : OR)]},\n    {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"XOR\") ? {type: \"XOR\"} : XOR)]},\n    {\"name\": \"logic_operator\", \"symbols\": [\"logic_operator$subexpression$1\"], \"postprocess\": \n        ([[token]]) => toKeywordNode(token)\n        },\n    {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"WHEN\") ? {type: \"WHEN\"} : WHEN)]},\n    {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"THEN\") ? {type: \"THEN\"} : THEN)]},\n    {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"ELSE\") ? {type: \"ELSE\"} : ELSE)]},\n    {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"END\") ? {type: \"END\"} : END)]},\n    {\"name\": \"other_keyword\", \"symbols\": [\"other_keyword$subexpression$1\"], \"postprocess\": \n        ([[token]]) => toKeywordNode(token)\n        },\n    {\"name\": \"_$ebnf$1\", \"symbols\": []},\n    {\"name\": \"_$ebnf$1\", \"symbols\": [\"_$ebnf$1\", \"comment\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n    {\"name\": \"_\", \"symbols\": [\"_$ebnf$1\"], \"postprocess\": ([comments]) => comments},\n    {\"name\": \"comment\", \"symbols\": [(lexer.has(\"LINE_COMMENT\") ? {type: \"LINE_COMMENT\"} : LINE_COMMENT)], \"postprocess\": \n        ([token]) => ({\n          type: NodeType.line_comment,\n          text: token.text,\n          precedingWhitespace: token.precedingWhitespace,\n        })\n        },\n    {\"name\": \"comment\", \"symbols\": [(lexer.has(\"BLOCK_COMMENT\") ? {type: \"BLOCK_COMMENT\"} : BLOCK_COMMENT)], \"postprocess\": \n        ([token]) => ({\n          type: NodeType.block_comment,\n          text: token.text,\n          precedingWhitespace: token.precedingWhitespace,\n        })\n        },\n    {\"name\": \"comment\", \"symbols\": [(lexer.has(\"DISABLE_COMMENT\") ? {type: \"DISABLE_COMMENT\"} : DISABLE_COMMENT)], \"postprocess\": \n        ([token]) => ({\n          type: NodeType.disable_comment,\n          text: token.text,\n          precedingWhitespace: token.precedingWhitespace,\n        })\n        }\n  ],\n  ParserStart: \"main\",\n};\n\nexport default grammar;\n","import { last } from '../utils.js';\n\nimport Indentation from './Indentation.js';\n\n/** Whitespace modifiers to be used with add() method */\nexport enum WS {\n  SPACE, // Adds single space\n  NO_SPACE, // Removes preceding horizontal whitespace (if any)\n  NO_NEWLINE, // Removes all preceding whitespace (whether horizontal or vertical)\n  NEWLINE, // Adds single newline (and removes any preceding whitespace)\n  MANDATORY_NEWLINE, // Adds single newline that can't be removed by NO_NEWLINE\n  INDENT, // Adds indentation (as much as needed for current indentation level)\n  SINGLE_INDENT, // Adds whitespace for single indentation step\n}\n\nexport type LayoutItem = WS.SPACE | WS.SINGLE_INDENT | WS.NEWLINE | WS.MANDATORY_NEWLINE | string;\n\n/**\n * API for constructing SQL string (especially the whitespace part).\n *\n * It hides the internal implementation.\n * Originally it used plain string concatenation, which was expensive.\n * Now it's storing items to array and builds the string only in the end.\n */\nexport default class Layout {\n  private items: LayoutItem[] = [];\n\n  constructor(public indentation: Indentation) {}\n\n  /**\n   * Appends token strings and whitespace modifications to SQL string.\n   */\n  public add(...items: (WS | string)[]) {\n    for (const item of items) {\n      switch (item) {\n        case WS.SPACE:\n          this.items.push(WS.SPACE);\n          break;\n        case WS.NO_SPACE:\n          this.trimHorizontalWhitespace();\n          break;\n        case WS.NO_NEWLINE:\n          this.trimWhitespace();\n          break;\n        case WS.NEWLINE:\n          this.trimHorizontalWhitespace();\n          this.addNewline(WS.NEWLINE);\n          break;\n        case WS.MANDATORY_NEWLINE:\n          this.trimHorizontalWhitespace();\n          this.addNewline(WS.MANDATORY_NEWLINE);\n          break;\n        case WS.INDENT:\n          this.addIndentation();\n          break;\n        case WS.SINGLE_INDENT:\n          this.items.push(WS.SINGLE_INDENT);\n          break;\n        default:\n          this.items.push(item);\n      }\n    }\n  }\n\n  private trimHorizontalWhitespace() {\n    while (isHorizontalWhitespace(last(this.items))) {\n      this.items.pop();\n    }\n  }\n\n  private trimWhitespace() {\n    while (isRemovableWhitespace(last(this.items))) {\n      this.items.pop();\n    }\n  }\n\n  private addNewline(newline: WS.NEWLINE | WS.MANDATORY_NEWLINE) {\n    if (this.items.length > 0) {\n      switch (last(this.items)) {\n        case WS.NEWLINE:\n          this.items.pop();\n          this.items.push(newline);\n          break;\n        case WS.MANDATORY_NEWLINE:\n          // keep as is\n          break;\n        default:\n          this.items.push(newline);\n          break;\n      }\n    }\n  }\n\n  private addIndentation() {\n    for (let i = 0; i < this.indentation.getLevel(); i++) {\n      this.items.push(WS.SINGLE_INDENT);\n    }\n  }\n\n  /**\n   * Returns the final SQL string.\n   */\n  public toString(): string {\n    return this.items.map(item => this.itemToString(item)).join('');\n  }\n\n  /**\n   * Returns the internal layout data\n   */\n  public getLayoutItems(): LayoutItem[] {\n    return this.items;\n  }\n\n  private itemToString(item: LayoutItem): string {\n    switch (item) {\n      case WS.SPACE:\n        return ' ';\n      case WS.NEWLINE:\n      case WS.MANDATORY_NEWLINE:\n        return '\\n';\n      case WS.SINGLE_INDENT:\n        return this.indentation.getSingleIndent();\n      default:\n        return item;\n    }\n  }\n}\n\nconst isHorizontalWhitespace = (item: WS | string | undefined) =>\n  item === WS.SPACE || item === WS.SINGLE_INDENT;\n\nconst isRemovableWhitespace = (item: WS | string | undefined) =>\n  item === WS.SPACE || item === WS.SINGLE_INDENT || item === WS.NEWLINE;\n","import { IndentStyle } from '../FormatOptions.js';\nimport { isLogicalOperator, TokenType } from '../lexer/token.js';\n\n/**\n * When tabular style enabled,\n * produces a 10-char wide version of token text.\n */\nexport default function toTabularFormat(tokenText: string, indentStyle: IndentStyle): string {\n  if (indentStyle === 'standard') {\n    return tokenText;\n  }\n\n  let tail = [] as string[]; // rest of keyword\n  if (tokenText.length >= 10 && tokenText.includes(' ')) {\n    // split for long keywords like INNER JOIN or UNION DISTINCT\n    [tokenText, ...tail] = tokenText.split(' ');\n  }\n\n  if (indentStyle === 'tabularLeft') {\n    tokenText = tokenText.padEnd(9, ' ');\n  } else {\n    tokenText = tokenText.padStart(9, ' ');\n  }\n\n  return tokenText + ['', ...tail].join(' ');\n}\n\n/**\n * True when the token can be formatted in tabular style\n */\nexport function isTabularToken(type: TokenType): boolean {\n  return (\n    isLogicalOperator(type) ||\n    type === TokenType.RESERVED_CLAUSE ||\n    type === TokenType.RESERVED_SELECT ||\n    type === TokenType.RESERVED_SET_OPERATION ||\n    type === TokenType.RESERVED_JOIN ||\n    type === TokenType.LIMIT\n  );\n}\n","import { last } from '../utils.js';\n\nconst INDENT_TYPE_TOP_LEVEL = 'top-level';\nconst INDENT_TYPE_BLOCK_LEVEL = 'block-level';\n\n/**\n * Manages indentation levels.\n *\n * There are two types of indentation levels:\n *\n * - BLOCK_LEVEL : increased by open-parenthesis\n * - TOP_LEVEL : increased by RESERVED_CLAUSE words\n */\nexport default class Indentation {\n  private indentTypes: string[] = [];\n\n  /**\n   * @param {string} indent A string to indent with\n   */\n  constructor(private indent: string) {}\n\n  /**\n   * Returns indentation string for single indentation step.\n   */\n  getSingleIndent(): string {\n    return this.indent;\n  }\n\n  /**\n   * Returns current indentation level\n   */\n  getLevel(): number {\n    return this.indentTypes.length;\n  }\n\n  /**\n   * Increases indentation by one top-level indent.\n   */\n  increaseTopLevel() {\n    this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);\n  }\n\n  /**\n   * Increases indentation by one block-level indent.\n   */\n  increaseBlockLevel() {\n    this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);\n  }\n\n  /**\n   * Decreases indentation by one top-level indent.\n   * Does nothing when the previous indent is not top-level.\n   */\n  decreaseTopLevel() {\n    if (this.indentTypes.length > 0 && last(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {\n      this.indentTypes.pop();\n    }\n  }\n\n  /**\n   * Decreases indentation by one block-level indent.\n   * If there are top-level indents within the block-level indent,\n   * throws away these as well.\n   */\n  decreaseBlockLevel() {\n    while (this.indentTypes.length > 0) {\n      const type = this.indentTypes.pop();\n      if (type !== INDENT_TYPE_TOP_LEVEL) {\n        break;\n      }\n    }\n  }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport Indentation from './Indentation.js';\nimport Layout, { WS } from './Layout.js';\n\n/**\n * Like Layout, but only formats single-line expressions.\n *\n * Throws InlineLayoutError:\n * - when encountering a newline\n * - when exceeding configured expressionWidth\n */\nexport default class InlineLayout extends Layout {\n  private length = 0;\n  // Keeps track of the trailing whitespace,\n  // so that we can decrease length when encountering WS.NO_SPACE,\n  // but only when there actually is a space to remove.\n  private trailingSpace = false;\n\n  constructor(private expressionWidth: number) {\n    super(new Indentation('')); // no indentation in inline layout\n  }\n\n  public add(...items: (WS | string)[]) {\n    items.forEach(item => this.addToLength(item));\n    if (this.length > this.expressionWidth) {\n      // We have exceeded the allowable width\n      throw new InlineLayoutError();\n    }\n    super.add(...items);\n  }\n\n  private addToLength(item: WS | string) {\n    if (typeof item === 'string') {\n      this.length += item.length;\n      this.trailingSpace = false;\n    } else if (item === WS.MANDATORY_NEWLINE || item === WS.NEWLINE) {\n      // newlines not allowed within inline block\n      throw new InlineLayoutError();\n    } else if (item === WS.INDENT || item === WS.SINGLE_INDENT || item === WS.SPACE) {\n      if (!this.trailingSpace) {\n        this.length++;\n        this.trailingSpace = true;\n      }\n    } else if (item === WS.NO_NEWLINE || item === WS.NO_SPACE) {\n      if (this.trailingSpace) {\n        this.trailingSpace = false;\n        this.length--;\n      }\n    }\n  }\n}\n\n/**\n * Thrown when block of SQL can't be formatted as a single line.\n */\nexport class InlineLayoutError extends Error {}\n","/* eslint-disable no-case-declarations */\nimport { FormatOptions } from '../FormatOptions.js';\nimport { equalizeWhitespace, isMultiline, last } from '../utils.js';\n\nimport Params from './Params.js';\nimport { isTabularStyle } from './config.js';\nimport { isLogicalOperator, TokenType } from '../lexer/token.js';\nimport {\n  AllColumnsAsteriskNode,\n  ArraySubscriptNode,\n  AstNode,\n  BetweenPredicateNode,\n  SetOperationNode,\n  ClauseNode,\n  FunctionCallNode,\n  LimitClauseNode,\n  NodeType,\n  ParenthesisNode,\n  LiteralNode,\n  IdentifierNode,\n  ParameterNode,\n  OperatorNode,\n  LineCommentNode,\n  BlockCommentNode,\n  CommaNode,\n  KeywordNode,\n  PropertyAccessNode,\n  CommentNode,\n  CaseExpressionNode,\n  CaseWhenNode,\n  CaseElseNode,\n  DataTypeNode,\n  ParameterizedDataTypeNode,\n  DisableCommentNode,\n} from '../parser/ast.js';\n\nimport Layout, { WS } from './Layout.js';\nimport toTabularFormat, { isTabularToken } from './tabularStyle.js';\nimport InlineLayout, { InlineLayoutError } from './InlineLayout.js';\n\ninterface ExpressionFormatterParams {\n  cfg: FormatOptions;\n  dialectCfg: ProcessedDialectFormatOptions;\n  params: Params;\n  layout: Layout;\n  inline?: boolean;\n}\n\nexport interface DialectFormatOptions {\n  // List of operators that should always be formatted without surrounding spaces\n  alwaysDenseOperators?: string[];\n  // List of clauses that should be formatted on a single line\n  onelineClauses: string[];\n  // List of clauses that should be formatted on a single line in tabular style\n  tabularOnelineClauses?: string[];\n}\n\n// Contains the same data as DialectFormatOptions,\n// but optimized for faster and more conventient lookup.\nexport interface ProcessedDialectFormatOptions {\n  alwaysDenseOperators: string[];\n  onelineClauses: Record<string, boolean>;\n  tabularOnelineClauses: Record<string, boolean>;\n}\n\n/** Formats a generic SQL expression */\nexport default class ExpressionFormatter {\n  private cfg: FormatOptions;\n  private dialectCfg: ProcessedDialectFormatOptions;\n  private params: Params;\n  private layout: Layout;\n\n  private inline = false;\n  private nodes: AstNode[] = [];\n  private index = -1;\n\n  constructor({ cfg, dialectCfg, params, layout, inline = false }: ExpressionFormatterParams) {\n    this.cfg = cfg;\n    this.dialectCfg = dialectCfg;\n    this.inline = inline;\n    this.params = params;\n    this.layout = layout;\n  }\n\n  public format(nodes: AstNode[]): Layout {\n    this.nodes = nodes;\n\n    for (this.index = 0; this.index < this.nodes.length; this.index++) {\n      this.formatNode(this.nodes[this.index]);\n    }\n    return this.layout;\n  }\n\n  private formatNode(node: AstNode) {\n    this.formatComments(node.leadingComments);\n    this.formatNodeWithoutComments(node);\n    this.formatComments(node.trailingComments);\n  }\n\n  private formatNodeWithoutComments(node: AstNode) {\n    switch (node.type) {\n      case NodeType.function_call:\n        return this.formatFunctionCall(node);\n      case NodeType.parameterized_data_type:\n        return this.formatParameterizedDataType(node);\n      case NodeType.array_subscript:\n        return this.formatArraySubscript(node);\n      case NodeType.property_access:\n        return this.formatPropertyAccess(node);\n      case NodeType.parenthesis:\n        return this.formatParenthesis(node);\n      case NodeType.between_predicate:\n        return this.formatBetweenPredicate(node);\n      case NodeType.case_expression:\n        return this.formatCaseExpression(node);\n      case NodeType.case_when:\n        return this.formatCaseWhen(node);\n      case NodeType.case_else:\n        return this.formatCaseElse(node);\n      case NodeType.clause:\n        return this.formatClause(node);\n      case NodeType.set_operation:\n        return this.formatSetOperation(node);\n      case NodeType.limit_clause:\n        return this.formatLimitClause(node);\n      case NodeType.all_columns_asterisk:\n        return this.formatAllColumnsAsterisk(node);\n      case NodeType.literal:\n        return this.formatLiteral(node);\n      case NodeType.identifier:\n        return this.formatIdentifier(node);\n      case NodeType.parameter:\n        return this.formatParameter(node);\n      case NodeType.operator:\n        return this.formatOperator(node);\n      case NodeType.comma:\n        return this.formatComma(node);\n      case NodeType.line_comment:\n        return this.formatLineComment(node);\n      case NodeType.block_comment:\n        return this.formatBlockComment(node);\n      case NodeType.disable_comment:\n        return this.formatBlockComment(node);\n      case NodeType.data_type:\n        return this.formatDataType(node);\n      case NodeType.keyword:\n        return this.formatKeywordNode(node);\n    }\n  }\n\n  private formatFunctionCall(node: FunctionCallNode) {\n    this.withComments(node.nameKw, () => {\n      this.layout.add(this.showFunctionKw(node.nameKw));\n    });\n    this.formatNode(node.parenthesis);\n  }\n\n  private formatParameterizedDataType(node: ParameterizedDataTypeNode) {\n    this.withComments(node.dataType, () => {\n      this.layout.add(this.showDataType(node.dataType));\n    });\n    this.formatNode(node.parenthesis);\n  }\n\n  private formatArraySubscript(node: ArraySubscriptNode) {\n    let formattedArray: string;\n\n    switch (node.array.type) {\n      case NodeType.data_type:\n        formattedArray = this.showDataType(node.array);\n        break;\n      case NodeType.keyword:\n        formattedArray = this.showKw(node.array);\n        break;\n      default:\n        formattedArray = this.showIdentifier(node.array);\n        break;\n    }\n\n    this.withComments(node.array, () => {\n      this.layout.add(formattedArray);\n    });\n\n    this.formatNode(node.parenthesis);\n  }\n\n  private formatPropertyAccess(node: PropertyAccessNode) {\n    this.formatNode(node.object);\n    this.layout.add(WS.NO_SPACE, node.operator);\n    this.formatNode(node.property);\n  }\n\n  private formatParenthesis(node: ParenthesisNode) {\n    const inlineLayout = this.formatInlineExpression(node.children);\n\n    if (inlineLayout) {\n      this.layout.add(node.openParen);\n      this.layout.add(...inlineLayout.getLayoutItems());\n      this.layout.add(WS.NO_SPACE, node.closeParen, WS.SPACE);\n    } else {\n      this.layout.add(node.openParen, WS.NEWLINE);\n\n      if (isTabularStyle(this.cfg)) {\n        this.layout.add(WS.INDENT);\n        this.layout = this.formatSubExpression(node.children);\n      } else {\n        this.layout.indentation.increaseBlockLevel();\n        this.layout.add(WS.INDENT);\n        this.layout = this.formatSubExpression(node.children);\n        this.layout.indentation.decreaseBlockLevel();\n      }\n\n      this.layout.add(WS.NEWLINE, WS.INDENT, node.closeParen, WS.SPACE);\n    }\n  }\n\n  private formatBetweenPredicate(node: BetweenPredicateNode) {\n    this.layout.add(this.showKw(node.betweenKw), WS.SPACE);\n    this.layout = this.formatSubExpression(node.expr1);\n    this.layout.add(WS.NO_SPACE, WS.SPACE, this.showNonTabularKw(node.andKw), WS.SPACE);\n    this.layout = this.formatSubExpression(node.expr2);\n    this.layout.add(WS.SPACE);\n  }\n\n  private formatCaseExpression(node: CaseExpressionNode) {\n    this.formatNode(node.caseKw);\n\n    this.layout.indentation.increaseBlockLevel();\n    this.layout = this.formatSubExpression(node.expr);\n    this.layout = this.formatSubExpression(node.clauses);\n    this.layout.indentation.decreaseBlockLevel();\n\n    this.layout.add(WS.NEWLINE, WS.INDENT);\n    this.formatNode(node.endKw);\n  }\n\n  private formatCaseWhen(node: CaseWhenNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT);\n    this.formatNode(node.whenKw);\n    this.layout = this.formatSubExpression(node.condition);\n    this.formatNode(node.thenKw);\n    this.layout = this.formatSubExpression(node.result);\n  }\n\n  private formatCaseElse(node: CaseElseNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT);\n    this.formatNode(node.elseKw);\n    this.layout = this.formatSubExpression(node.result);\n  }\n\n  private formatClause(node: ClauseNode) {\n    if (this.isOnelineClause(node)) {\n      this.formatClauseInOnelineStyle(node);\n    } else if (isTabularStyle(this.cfg)) {\n      this.formatClauseInTabularStyle(node);\n    } else {\n      this.formatClauseInIndentedStyle(node);\n    }\n  }\n\n  private isOnelineClause(node: ClauseNode): boolean {\n    if (isTabularStyle(this.cfg)) {\n      return this.dialectCfg.tabularOnelineClauses[node.nameKw.text];\n    } else {\n      return this.dialectCfg.onelineClauses[node.nameKw.text];\n    }\n  }\n\n  private formatClauseInIndentedStyle(node: ClauseNode) {\n    const clauses = ['SELECT', 'FROM', 'WHERE', 'GROUP BY', 'ORDER BY', 'LIMIT', 'OFFSET'].includes(\n      node.nameKw.text\n    );\n    let inline = false;\n\n    switch (node.nameKw.text) {\n      case 'LIMIT':\n      case 'OFFSET':\n      case 'FROM':\n        inline = true;\n        break;\n\n      case 'SELECT':\n      case 'GROUP BY':\n        inline = node.children.filter(f => f.type === NodeType.comma).length < 3;\n        break;\n      case 'ORDER BY':\n        inline = node.children.filter(f => f.type === NodeType.comma).length < 2;\n        break;\n\n      case 'WHERE':\n        interface NodeLite {\n          tokenType?: TokenType;\n          type: NodeType;\n        }\n        const children = node.children as NodeLite[];\n        const count = children.filter(f =>\n          f.tokenType ? isLogicalOperator(f.tokenType) : f.type === NodeType.parenthesis\n        ).length;\n        inline = count < 3;\n        break;\n\n      default:\n        break;\n    }\n\n    if (clauses && inline) {\n      // inline mode\n      this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n      this.layout = this.formatSubExpression(node.children, true);\n      return;\n    }\n\n    this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.NEWLINE);\n    this.layout.indentation.increaseTopLevel();\n    this.layout.add(WS.INDENT);\n    this.layout = this.formatSubExpression(node.children);\n    this.layout.indentation.decreaseTopLevel();\n  }\n\n  private formatClauseInOnelineStyle(node: ClauseNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n    this.layout = this.formatSubExpression(node.children);\n  }\n\n  private formatClauseInTabularStyle(node: ClauseNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n    this.layout.indentation.increaseTopLevel();\n    this.layout = this.formatSubExpression(node.children);\n    this.layout.indentation.decreaseTopLevel();\n  }\n\n  private formatSetOperation(node: SetOperationNode) {\n    this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.NEWLINE);\n    this.layout.add(WS.INDENT);\n    this.layout = this.formatSubExpression(node.children);\n  }\n\n  private formatLimitClause(node: LimitClauseNode) {\n    this.withComments(node.limitKw, () => {\n      this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.limitKw));\n    });\n    this.layout.indentation.increaseTopLevel();\n\n    if (isTabularStyle(this.cfg)) {\n      this.layout.add(WS.SPACE);\n    } else {\n      this.layout.add(WS.SPACE);\n    }\n\n    if (node.offset) {\n      this.layout = this.formatSubExpression(node.offset);\n      this.layout.add(WS.NO_SPACE, ',', WS.SPACE);\n      this.layout = this.formatSubExpression(node.count);\n    } else {\n      this.layout = this.formatSubExpression(node.count);\n    }\n    this.layout.indentation.decreaseTopLevel();\n  }\n\n  private formatAllColumnsAsterisk(_node: AllColumnsAsteriskNode) {\n    this.layout.add('*', WS.SPACE);\n  }\n\n  private formatLiteral(node: LiteralNode) {\n    this.layout.add(node.text, WS.SPACE);\n  }\n\n  private formatIdentifier(node: IdentifierNode) {\n    this.layout.add(this.showIdentifier(node), WS.SPACE);\n  }\n\n  private formatParameter(node: ParameterNode) {\n    this.layout.add(this.params.get(node), WS.SPACE);\n  }\n\n  private formatOperator({ text }: OperatorNode) {\n    if (this.cfg.denseOperators || this.dialectCfg.alwaysDenseOperators.includes(text)) {\n      this.layout.add(WS.NO_SPACE, text);\n    } else if (text === ':') {\n      this.layout.add(WS.NO_SPACE, text, WS.SPACE);\n    } else {\n      this.layout.add(text, WS.SPACE);\n    }\n  }\n\n  private formatComma(_node: CommaNode) {\n    if (!this.inline) {\n      this.layout.add(WS.NO_SPACE, ',', WS.NEWLINE, WS.INDENT);\n    } else {\n      this.layout.add(WS.NO_SPACE, ',', WS.SPACE);\n    }\n  }\n\n  private withComments(node: AstNode, fn: () => void) {\n    this.formatComments(node.leadingComments);\n    fn();\n    this.formatComments(node.trailingComments);\n  }\n\n  private formatComments(comments: CommentNode[] | undefined) {\n    if (!comments) {\n      return;\n    }\n    comments.forEach(com => {\n      if (com.type === NodeType.line_comment) {\n        this.formatLineComment(com);\n      } else {\n        this.formatBlockComment(com);\n      }\n    });\n  }\n\n  private formatLineComment(node: LineCommentNode) {\n    if (isMultiline(node.precedingWhitespace || '')) {\n      this.layout.add(WS.NEWLINE, WS.INDENT, node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n    } else if (this.layout.getLayoutItems().length > 0) {\n      this.layout.add(WS.NO_NEWLINE, WS.SPACE, node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n    } else {\n      // comment is the first item in code - no need to add preceding spaces\n      this.layout.add(node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n    }\n  }\n\n  private formatBlockComment(node: BlockCommentNode | DisableCommentNode) {\n    if (node.type === NodeType.block_comment && this.isMultilineBlockComment(node)) {\n      this.splitBlockComment(node.text).forEach(line => {\n        this.layout.add(WS.NEWLINE, WS.INDENT, line);\n      });\n      this.layout.add(WS.NEWLINE, WS.INDENT);\n    } else {\n      this.layout.add(node.text, WS.SPACE);\n    }\n  }\n\n  private isMultilineBlockComment(node: BlockCommentNode): boolean {\n    return isMultiline(node.text) || isMultiline(node.precedingWhitespace || '');\n  }\n\n  private isDocComment(comment: string): boolean {\n    const lines = comment.split(/\\n/);\n    return (\n      // first line starts with /* or /**\n      /^\\/\\*\\*?$/.test(lines[0]) &&\n      // intermediate lines start with *\n      lines.slice(1, lines.length - 1).every(line => /^\\s*\\*/.test(line)) &&\n      // last line ends with */\n      /^\\s*\\*\\/$/.test(last(lines) as string)\n    );\n  }\n\n  // Breaks up block comment to multiple lines.\n  // For example this doc-comment (dots representing leading whitespace):\n  //\n  //   ..../**\n  //   .....* Some description here\n  //   .....* and here too\n  //   .....*/\n  //\n  // gets broken to this array (note the leading single spaces):\n  //\n  //   [ '/**',\n  //     '.* Some description here',\n  //     '.* and here too',\n  //     '.*/' ]\n  //\n  // However, a normal comment (non-doc-comment) like this:\n  //\n  //   ..../*\n  //   ....Some description here\n  //   ....*/\n  //\n  // gets broken to this array (no leading spaces):\n  //\n  //   [ '/*',\n  //     'Some description here',\n  //     '*/' ]\n  //\n  private splitBlockComment(comment: string): string[] {\n    if (this.isDocComment(comment)) {\n      return comment.split(/\\n/).map(line => {\n        if (/^\\s*\\*/.test(line)) {\n          return ' ' + line.replace(/^\\s*/, '');\n        } else {\n          return line;\n        }\n      });\n    } else {\n      return comment.split(/\\n/).map(line => line.replace(/^\\s*/, ''));\n    }\n  }\n\n  private formatSubExpression(nodes: AstNode[], inline?: boolean): Layout {\n    return new ExpressionFormatter({\n      cfg: this.cfg,\n      dialectCfg: this.dialectCfg,\n      params: this.params,\n      layout: this.layout,\n      inline: inline ?? this.inline,\n    }).format(nodes);\n  }\n\n  private formatInlineExpression(nodes: AstNode[]): Layout | undefined {\n    const oldParamIndex = this.params.getPositionalParameterIndex();\n    try {\n      return new ExpressionFormatter({\n        cfg: this.cfg,\n        dialectCfg: this.dialectCfg,\n        params: this.params,\n        layout: new InlineLayout(this.cfg.expressionWidth),\n        inline: true,\n      }).format(nodes);\n    } catch (e) {\n      if (e instanceof InlineLayoutError) {\n        // While formatting, some of the positional parameters might have\n        // been consumed, which increased the current parameter index.\n        // We reset the index to an earlier state, so we can run the\n        // formatting again and re-consume these parameters in non-inline mode.\n        this.params.setPositionalParameterIndex(oldParamIndex);\n        return undefined;\n      } else {\n        // forward all unexpected errors\n        throw e;\n      }\n    }\n  }\n\n  private formatKeywordNode(node: KeywordNode): void {\n    switch (node.tokenType) {\n      case TokenType.RESERVED_JOIN:\n        return this.formatJoin(node);\n      case TokenType.AND:\n      case TokenType.OR:\n      case TokenType.XOR:\n        return this.formatLogicalOperator(node);\n      default:\n        return this.formatKeyword(node);\n    }\n  }\n\n  private formatJoin(node: KeywordNode) {\n    if (isTabularStyle(this.cfg)) {\n      // in tabular style JOINs are at the same level as clauses\n      this.layout.indentation.decreaseTopLevel();\n      this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n      this.layout.indentation.increaseTopLevel();\n    } else {\n      this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n    }\n  }\n\n  private formatKeyword(node: KeywordNode) {\n    this.layout.add(this.showKw(node), WS.SPACE);\n  }\n\n  private formatLogicalOperator(node: KeywordNode) {\n    if (this.cfg.logicalOperatorNewline === 'before') {\n      if (isTabularStyle(this.cfg)) {\n        // In tabular style AND/OR is placed on the same level as clauses\n        this.layout.indentation.decreaseTopLevel();\n        this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n        this.layout.indentation.increaseTopLevel();\n      } else {\n        const fm = this.inline\n          ? [this.showKw(node), WS.SPACE]\n          : [WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE];\n        this.layout.add(...fm);\n      }\n    } else {\n      this.layout.add(this.showKw(node), WS.NEWLINE, WS.INDENT);\n    }\n  }\n\n  private formatDataType(node: DataTypeNode) {\n    this.layout.add(this.showDataType(node), WS.SPACE);\n  }\n\n  private showKw(node: KeywordNode): string {\n    if (isTabularToken(node.tokenType)) {\n      return toTabularFormat(this.showNonTabularKw(node), this.cfg.indentStyle);\n    } else {\n      return this.showNonTabularKw(node);\n    }\n  }\n\n  // Like showKw(), but skips tabular formatting\n  private showNonTabularKw(node: KeywordNode): string {\n    switch (this.cfg.keywordCase) {\n      case 'preserve':\n        return equalizeWhitespace(node.raw);\n      case 'upper':\n        return node.text;\n      case 'lower':\n        return node.text.toLowerCase();\n    }\n  }\n\n  private showFunctionKw(node: KeywordNode): string {\n    if (isTabularToken(node.tokenType)) {\n      return toTabularFormat(this.showNonTabularFunctionKw(node), this.cfg.indentStyle);\n    } else {\n      return this.showNonTabularFunctionKw(node);\n    }\n  }\n\n  // Like showFunctionKw(), but skips tabular formatting\n  private showNonTabularFunctionKw(node: KeywordNode): string {\n    switch (this.cfg.functionCase) {\n      case 'preserve':\n        return equalizeWhitespace(node.raw);\n      case 'upper':\n        return node.text;\n      case 'lower':\n        return node.text.toLowerCase();\n    }\n  }\n\n  private showIdentifier(node: IdentifierNode): string {\n    if (node.quoted) {\n      return node.text;\n    } else {\n      switch (this.cfg.identifierCase) {\n        case 'preserve':\n          return node.text;\n        case 'upper':\n          return node.text.toUpperCase();\n        case 'lower':\n          return node.text.toLowerCase();\n      }\n    }\n  }\n\n  private showDataType(node: DataTypeNode): string {\n    switch (this.cfg.dataTypeCase) {\n      case 'preserve':\n        return equalizeWhitespace(node.raw);\n      case 'upper':\n        return node.text;\n      case 'lower':\n        return node.text.toLowerCase();\n    }\n  }\n}\n","import { FormatOptions } from '../FormatOptions.js';\nimport { indentString } from './config.js';\nimport Params from './Params.js';\n\nimport { createParser } from '../parser/createParser.js';\nimport { StatementNode } from '../parser/ast.js';\nimport { Dialect } from '../dialect.js';\n\nimport ExpressionFormatter from './ExpressionFormatter.js';\nimport Layout, { WS } from './Layout.js';\nimport Indentation from './Indentation.js';\n\n/** Main formatter class that produces a final output string from list of tokens */\nexport default class Formatter {\n  private dialect: Dialect;\n  private cfg: FormatOptions;\n  private params: Params;\n\n  constructor(dialect: Dialect, cfg: FormatOptions) {\n    this.dialect = dialect;\n    this.cfg = cfg;\n    this.params = new Params(this.cfg.params);\n  }\n\n  /**\n   * Formats an SQL query.\n   * @param {string} query - The SQL query string to be formatted\n   * @return {string} The formatter query\n   */\n  public format(query: string): string {\n    const ast = this.parse(query);\n    const formattedQuery = this.formatAst(ast);\n    return formattedQuery.trimEnd();\n  }\n\n  private parse(query: string): StatementNode[] {\n    return createParser(this.dialect.tokenizer).parse(query, this.cfg.paramTypes || {});\n  }\n\n  private formatAst(statements: StatementNode[]): string {\n    return statements\n      .map(stat => this.formatStatement(stat))\n      .join('\\n'.repeat(this.cfg.linesBetweenQueries + 1));\n  }\n\n  private formatStatement(statement: StatementNode): string {\n    const layout = new ExpressionFormatter({\n      cfg: this.cfg,\n      dialectCfg: this.dialect.formatOptions,\n      params: this.params,\n      layout: new Layout(new Indentation(indentString(this.cfg))),\n    }).format(statement.children);\n\n    if (!statement.hasSemicolon) {\n      // do nothing\n    } else if (this.cfg.newlineBeforeSemicolon) {\n      layout.add(WS.NEWLINE, ';');\n    } else {\n      layout.add(WS.NO_NEWLINE, ';');\n    }\n    return layout.toString();\n  }\n}\n","import { FormatOptions } from './FormatOptions.js';\nimport { ParamItems } from './formatter/Params.js';\nimport { ParamTypes } from './lexer/TokenizerOptions.js';\n\nexport class ConfigError extends Error {}\n\nexport function validateConfig(cfg: FormatOptions): FormatOptions {\n  const removedOptions = [\n    'multilineLists',\n    'newlineBeforeOpenParen',\n    'newlineBeforeCloseParen',\n    'aliasAs',\n    'commaPosition',\n    'tabulateAlias',\n  ];\n  for (const optionName of removedOptions) {\n    if (optionName in cfg) {\n      throw new ConfigError(`${optionName} config is no more supported.`);\n    }\n  }\n\n  if (cfg.expressionWidth <= 0) {\n    throw new ConfigError(\n      `expressionWidth config must be positive number. Received ${cfg.expressionWidth} instead.`\n    );\n  }\n\n  if (cfg.params && !validateParams(cfg.params)) {\n    // eslint-disable-next-line no-console\n    console.warn('WARNING: All \"params\" option values should be strings.');\n  }\n\n  if (cfg.paramTypes && !validateParamTypes(cfg.paramTypes)) {\n    throw new ConfigError(\n      'Empty regex given in custom paramTypes. That would result in matching infinite amount of parameters.'\n    );\n  }\n\n  return cfg;\n}\n\nfunction validateParams(params: ParamItems | string[]): boolean {\n  const paramValues = params instanceof Array ? params : Object.values(params);\n  return paramValues.every(p => typeof p === 'string');\n}\n\nfunction validateParamTypes(paramTypes: ParamTypes): boolean {\n  if (paramTypes.custom && Array.isArray(paramTypes.custom)) {\n    return paramTypes.custom.every(p => p.regex !== '');\n  }\n  return true;\n}\n","import * as allDialects from './allDialects.js';\n\nimport { FormatOptions } from './FormatOptions.js';\nimport { createDialect, DialectOptions } from './dialect.js';\nimport Formatter from './formatter/Formatter.js';\nimport { ConfigError, validateConfig } from './validateConfig.js';\n\nconst dialectNameMap: Record<keyof typeof allDialects | 'tsql', keyof typeof allDialects> = {\n  bigquery: 'bigquery',\n  db2: 'db2',\n  db2i: 'db2i',\n  hive: 'hive',\n  mariadb: 'mariadb',\n  mysql: 'mysql',\n  n1ql: 'n1ql',\n  plsql: 'plsql',\n  postgresql: 'postgresql',\n  redshift: 'redshift',\n  spark: 'spark',\n  sqlite: 'sqlite',\n  sql: 'sql',\n  tidb: 'tidb',\n  trino: 'trino',\n  transactsql: 'transactsql',\n  tsql: 'transactsql', // alias for transactsq\n  singlestoredb: 'singlestoredb',\n  snowflake: 'snowflake',\n};\n\nexport const supportedDialects = Object.keys(dialectNameMap);\nexport type SqlLanguage = keyof typeof dialectNameMap;\n\nexport type FormatOptionsWithLanguage = Partial<FormatOptions> & {\n  language?: SqlLanguage;\n};\n\nexport type FormatOptionsWithDialect = Partial<FormatOptions> & {\n  dialect: DialectOptions;\n};\n\nconst defaultOptions: FormatOptions = {\n  tabWidth: 2,\n  useTabs: false,\n  keywordCase: 'preserve',\n  identifierCase: 'preserve',\n  dataTypeCase: 'preserve',\n  functionCase: 'preserve',\n  indentStyle: 'standard',\n  logicalOperatorNewline: 'before',\n  expressionWidth: 50,\n  linesBetweenQueries: 1,\n  denseOperators: false,\n  newlineBeforeSemicolon: false,\n};\n\n/**\n * Format whitespace in a query to make it easier to read.\n *\n * @param {string} query - input SQL query string\n * @param {FormatOptionsWithLanguage} cfg Configuration options (see docs in README)\n * @return {string} formatted query\n */\nexport const format = (query: string, cfg: FormatOptionsWithLanguage = {}): string => {\n  if (typeof cfg.language === 'string' && !supportedDialects.includes(cfg.language)) {\n    throw new ConfigError(`Unsupported SQL dialect: ${cfg.language}`);\n  }\n\n  const canonicalDialectName = dialectNameMap[cfg.language || 'sql'];\n\n  return formatDialect(query, {\n    ...cfg,\n    dialect: allDialects[canonicalDialectName],\n  });\n};\n\n/**\n * Like the above format(), but language parameter is mandatory\n * and must be a Dialect object instead of a string.\n *\n * @param {string} query - input SQL query string\n * @param {FormatOptionsWithDialect} cfg Configuration options (see docs in README)\n * @return {string} formatted query\n */\nexport const formatDialect = (\n  query: string,\n  { dialect, ...cfg }: FormatOptionsWithDialect\n): string => {\n  if (typeof query !== 'string') {\n    throw new Error('Invalid query argument. Expected string, instead got ' + typeof query);\n  }\n\n  const options = validateConfig({\n    ...defaultOptions,\n    ...cfg,\n  });\n\n  return new Formatter(createDialect(dialect), options).format(query);\n};\n\nexport type FormatFn = typeof format;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGO,IAAM,gBAAgB,CAAC,YAAgC,QAAQ,QAAQ,kBAAkB;AA0BzF,IAAM,qBAAqB,CAAC,WACjC,kBAAkB,YAAY,MAAM,CAAC,EAAE,IAAI,oBAAoB;AAEjE,IAAM,uBAAuB,CAAC,SAAiB,KAAK,QAAQ,OAAO,GAAG,EAAE,KAAK;AAE7E,IAAM,cAAc,CAAC,UAA0B;AAAA,EAC7C,MAAM;AAAA,EACN,OAAO,gBAAgB,MAAM,CAAC,EAAE,CAAC;AACnC;AAOA,IAAM,kBAAkB,CACtB,MACA,OACA,kBACuB;AACvB,QAAM,cAAwB,CAAC;AAC/B,SAAO,KAAK,KAAK,GAAG;AAClB,UAAM,CAAC,MAAM,QAAQ,IAAI,mBAAmB,MAAM,KAAK;AACvD,gBAAY,KAAK,IAAI;AACrB,YAAQ;AACR,QAAI,KAAK,KAAK,MAAM,KAAK;AACvB;AAAA,IACF,WAAW,KAAK,KAAK,MAAM,OAAO,KAAK,KAAK,MAAM,KAAK;AACrD,UAAI,kBAAkB,KAAK,KAAK,GAAG;AACjC,cAAM,IAAI,MAAM,8BAA8B,IAAI,EAAE;AAAA,MACtD;AACA;AACA,aAAO,CAAC,aAAa,KAAK;AAAA,IAC5B,WAAW,UAAU,KAAK,QAAQ;AAChC,UAAI,eAAe;AACjB,cAAM,IAAI,MAAM,8BAA8B,IAAI,EAAE;AAAA,MACtD;AACA,aAAO,CAAC,aAAa,KAAK;AAAA,IAC5B,OAAO;AACL,YAAM,IAAI,MAAM,eAAe,KAAK,KAAK,CAAC,GAAG;AAAA,IAC/C;AAAA,EACF;AACA,SAAO,CAAC,aAAa,KAAK;AAC5B;AAEA,IAAM,qBAAqB,CAAC,MAAc,UAAoC;AAC5E,QAAM,QAAkB,CAAC;AACzB,SAAO,MAAM;AACX,UAAM,CAAC,MAAM,QAAQ,IAAI,UAAU,MAAM,KAAK;AAC9C,QAAI,MAAM;AACR,YAAM,KAAK,IAAI;AACf,cAAQ;AAAA,IACV,OAAO;AACL;AAAA,IACF;AAAA,EACF;AACA,SAAO,MAAM,WAAW,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,MAAM,iBAAiB,MAAM,GAAG,KAAK;AAC1F;AAEA,IAAM,YAAY,CAAC,MAAc,UAAoC;AACnE,MAAI,KAAK,KAAK,MAAM,KAAK;AACvB,WAAO,oBAAoB,MAAM,QAAQ,CAAC;AAAA,EAC5C,WAAW,KAAK,KAAK,MAAM,KAAK;AAC9B,WAAO,mBAAmB,MAAM,QAAQ,CAAC;AAAA,EAC3C,OAAO;AACL,QAAI,OAAO;AACX,WAAO,KAAK,KAAK,KAAK,gBAAgB,KAAK,KAAK,KAAK,CAAC,GAAG;AACvD,cAAQ,KAAK,KAAK;AAClB;AAAA,IACF;AACA,WAAO,CAAC,MAAM,KAAK;AAAA,EACrB;AACF;AAEA,IAAM,sBAAsB,CAAC,MAAc,UAA4C;AACrF,QAAM,CAAC,OAAO,QAAQ,IAAI,gBAAgB,MAAM,OAAO,GAAG;AAC1D,SAAO,CAAC,EAAE,MAAM,mBAAmB,MAAM,GAAG,QAAQ;AACtD;AAEA,IAAM,qBAAqB,CAAC,MAAc,UAA2C;AACnF,QAAM,CAAC,OAAO,QAAQ,IAAI,gBAAgB,MAAM,OAAO,GAAG;AAC1D,SAAO,CAAC,EAAE,MAAM,kBAAkB,MAAM,GAAG,QAAQ;AACrD;AAEA,IAAM,oBAAoB,CAAC,SAA2B;AACpD,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,CAAC,IAAI;AAAA,EACd,WAAW,KAAK,SAAS,iBAAiB;AACxC,WAAO,KAAK,MAAM,IAAI,iBAAiB,EAAE,OAAO,oBAAoB,CAAC,EAAE,CAAC;AAAA,EAC1E,WAAW,KAAK,SAAS,mBAAmB;AAC1C,WAAO,KAAK,MAAM,QAAQ,iBAAiB;AAAA,EAC7C,WAAW,KAAK,SAAS,kBAAkB;AACzC,WAAO,CAAC,IAAI,GAAG,KAAK,MAAM,QAAQ,iBAAiB,CAAC;AAAA,EACtD,OAAO;AACL,UAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAAA,EAC9C;AACF;AAEA,IAAM,qBAAqB,CAAC,IAAc,OAA2B;AACnE,QAAM,UAAoB,CAAC;AAC3B,aAAW,KAAK,IAAI;AAClB,eAAW,KAAK,IAAI;AAClB,cAAQ,KAAK,IAAI,CAAC;AAAA,IACpB;AAAA,EACF;AACA,SAAO;AACT;;;ACtIO,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,sCAAmC;AACnC,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,4BAAyB;AACzB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,4BAAyB;AACzB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,SAAM;AACN,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,SAAM;AACN,EAAAA,WAAA,QAAK;AACL,EAAAA,WAAA,SAAM;AACN,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,8BAA2B;AAC3B,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,mBAAgB;AAEhB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,SAAM;AA3CI,SAAAA;AAAA,GAAA;AAyDL,IAAM,iBAAiB,CAAC,WAAmB;AAAA,EAChD,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AACT;AAMO,IAAM,YAAY,eAAe,QAAQ;AAGzC,IAAM,YACX,CAAC,iBACD,CAAC,UACC,MAAM,SAAS,aAAa,QAAQ,MAAM,SAAS,aAAa;AAG7D,IAAM,UAAU;AAAA,EACrB,OAAO,UAAU,EAAE,MAAM,SAAS,MAAM,8CAA6B,CAAC;AAAA,EACtE,IAAI,UAAU,EAAE,MAAM,MAAM,MAAM,0CAA2B,CAAC;AAAA,EAC9D,KAAK,UAAU,EAAE,MAAM,OAAO,MAAM,wCAA0B,CAAC;AAAA,EAC/D,QAAQ,UAAU,EAAE,MAAM,UAAU,MAAM,8CAA6B,CAAC;AAAA,EACxE,QAAQ,UAAU,EAAE,MAAM,UAAU,MAAM,wCAA0B,CAAC;AAAA,EACrE,QAAQ,UAAU,EAAE,MAAM,UAAU,MAAM,wCAA0B,CAAC;AACvE;AAGO,IAAM,aAAa,CAAC,SACzB,SAAS,iDACT,SAAS,6CACT,SAAS,yDACT,SAAS,2CACT,SAAS,2CACT,SAAS,2CACT,SAAS,yDACT,SAAS,uCACT,SAAS,uCACT,SAAS,qBACT,SAAS,mBACT,SAAS,qBACT,SAAS,qBACT,SAAS,qBACT,SAAS,uBACT,SAAS,2BACT,SAAS,mBACT,SAAS,iBACT,SAAS;AAEJ,IAAM,oBAAoB,CAAC,SAChC,SAAS,mBAAiB,SAAS,iBAAgB,SAAS;;;AC9GvD,IAAM,YAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAA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AA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AACF;;;ACpUO,IAAMC,YAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACxbA,IAAMC,kBAAiB,cAAc,CAAC,yBAAyB,CAAC;AAEhE,IAAMC,mBAAkB,cAAc;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,0BAAyB,cAAc;AAAA,EAC3C;AACF,CAAC;AAED,IAAMC,yBAAwB,cAAc;AAAA;AAAA,EAE1C;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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ACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AACF;;;ACnVO,IAAMC,YAAqB;AAAA;AAAA;AAAA;AAAA,EAIhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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A;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC1NO,IAAMC,YAAqB;AAAA;AAAA;AAAA,EAGhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAGF;;;AC9QO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;A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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,yBAAwB,cAAc;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,iBAAgB,cAAc;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF,CAAC;AAED,IAAMC,mBAAkB,cAAc;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,UAA0B;AAAA,EACrC,MAAM;AAAA,EACN,kBAAkB;AAAA,IAChB,gBAAAN;AAAA,IACA,iBAAiB,CAAC,GAAGC,kBAAiB,GAAGC,yBAAwB,GAAGC,sBAAqB;AAAA,IACzF,uBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAa;AAAA,IACb,kBAAkBC;AAAA,IAClB,mBAAmBC;AAAA,IACnB,uBAAuBC;AAAA;AAAA,IAEvB,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA,EAAE,OAAO,UAAU,UAAU,CAAC,KAAK,GAAG,GAAG,eAAe,KAAK;AAAA,IAC/D;AAAA,IACA,YAAY,CAAC,IAAI;AAAA,IACjB,YAAY,EAAE,OAAO,KAAK,MAAM,KAAK,sBAAsB,KAAK;AAAA,IAChE,eAAe;AAAA,MACb,EAAE,OAAO,qBAAqB;AAAA,MAC9B,EAAE,OAAO,YAAY,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA,MAC1D,EAAE,OAAO,YAAY,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA,MAC1D,EAAE,OAAO,MAAM,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA,IACtD;AAAA,IACA,YAAY,EAAE,YAAY,KAAK;AAAA,IAC/B,kBAAkB,CAAC,MAAM,GAAG;AAAA,IAC5B,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IACF;AAAA,IACA,aAAAC;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,gBAAgB,CAAC,GAAGR,yBAAwB,GAAGC,sBAAqB;AAAA,IACpE,uBAAAA;AAAA,EACF;AACF;;;AC/TO,IAAMQ,YAAqB;AAAA;AAAA,EAEhC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAEF;;;AC5RO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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A;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAEF;;;AChPO,IAAMC,aAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA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AA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AACF;;;ACtOO,IAAMC,YAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,E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A;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACzVO,IAAMC,aAAsB;AAAA;AAAA;AAAA,EAGjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA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A;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AACF;;;ACtsBO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA,EAEjC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AACF;;;AClJA,IAAMC,mBAAiB,cAAc,CAAC,yBAAyB,CAAC;AAEhE,IAAMC,oBAAkB,cAAc;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AACF,CAAC;AAED,IAAMC,0BAAyB,cAAc;AAAA,EAC3C;AACF,CAAC;AAED,IAAMC,yBAAwB,cAAc;AAAA;AAAA,EAE1C;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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ACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC1WO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;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,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACF;;;AC1SO,IAAMC,cAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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AA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AACF;;;AClIO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;A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AAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC1GO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACnbO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA;AAAA,EAGjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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AA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AACF;;;ACnUO,IAAMC,aAAqB;AAAA;AAAA;AAAA,EAGhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,E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;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACxQO,IAAMC,cAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AClRA,IAAMC,mBAAiB,cAAc,CAAC,uCAAuC,CAAC;AAE9E,IAAMC,oBAAkB,cAAc;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,E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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC/lBO,IAAMC,aAAqB;AAAA;AAAA;AAAA;AAAA,EAIhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAA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;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA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","names":["TokenType","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","functions","keywords","dataTypes","reservedSelect","reservedClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","string","END","_a","last","last","nearley","lexer","sql"]}