From 84cc80be1c41bfd6f9bf32cc9ea701be177fe2bf Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Tue, 28 Nov 2023 14:35:11 +0800 Subject: [PATCH] fix: add window_offset translate --- include/common/ttime.h | 2 +- include/common/ttokendef.h | 2 + include/libs/nodes/querynodes.h | 8 +- source/common/src/ttime.c | 4 +- source/libs/function/src/builtins.c | 4 +- source/libs/nodes/src/nodesCloneFuncs.c | 2 +- source/libs/nodes/src/nodesCodeFuncs.c | 6 +- source/libs/nodes/src/nodesMsgFuncs.c | 8 +- source/libs/nodes/src/nodesUtilFuncs.c | 2 - source/libs/parser/inc/parAst.h | 1 + source/libs/parser/inc/sql.y | 12 +- source/libs/parser/src/parAstCreater.c | 50 +- source/libs/parser/src/parTranslater.c | 49 +- source/libs/parser/src/sql.c | 1030 ++++++++++---------- source/libs/planner/src/planLogicCreater.c | 6 +- 15 files changed, 633 insertions(+), 553 deletions(-) diff --git a/include/common/ttime.h b/include/common/ttime.h index 1dfa609064..4e3442fa5c 100644 --- a/include/common/ttime.h +++ b/include/common/ttime.h @@ -78,7 +78,7 @@ int64_t taosTimeTruncate(int64_t ts, const SInterval* pInterval); int32_t taosTimeCountIntervalForFill(int64_t skey, int64_t ekey, int64_t interval, char unit, int32_t precision, int32_t order); int32_t parseAbsoluteDuration(const char* token, int32_t tokenlen, int64_t* ts, char* unit, int32_t timePrecision); -int32_t parseNatualDuration(const char* token, int32_t tokenLen, int64_t* duration, char* unit, int32_t timePrecision); +int32_t parseNatualDuration(const char* token, int32_t tokenLen, int64_t* duration, char* unit, int32_t timePrecision, bool negativeAllow); int32_t taosParseTime(const char* timestr, int64_t* pTime, int32_t len, int32_t timePrec, int8_t dayligth); void deltaToUtcInitOnce(); diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h index 5c5ffae6bd..c6128f14d0 100644 --- a/include/common/ttokendef.h +++ b/include/common/ttokendef.h @@ -380,6 +380,8 @@ + + #define TK_NK_SPACE 600 #define TK_NK_COMMENT 601 #define TK_NK_ILLEGAL 602 diff --git a/include/libs/nodes/querynodes.h b/include/libs/nodes/querynodes.h index 4775965114..8b8f7fefd6 100644 --- a/include/libs/nodes/querynodes.h +++ b/include/libs/nodes/querynodes.h @@ -99,10 +99,16 @@ typedef struct STargetNode { SNode* pExpr; } STargetNode; +#define VALUE_FLAG_IS_DURATION (1 << 0) +#define VALUE_FLAG_IS_TIME_OFFSET (1 << 1) + +#define IS_DURATION_VAL(_flag) ((_flag) & VALUE_FLAG_IS_DURATION) +#define IS_TIME_OFFSET_VAL(_flag) ((_flag) & VALUE_FLAG_IS_TIME_OFFSET) + typedef struct SValueNode { SExprNode node; // QUERY_NODE_VALUE char* literal; - bool isDuration; + int32_t flag; bool translate; bool notReserved; bool isNull; diff --git a/source/common/src/ttime.c b/source/common/src/ttime.c index 227de7f5fc..f1ab6bc5be 100644 --- a/source/common/src/ttime.c +++ b/source/common/src/ttime.c @@ -659,12 +659,12 @@ int32_t parseAbsoluteDuration(const char* token, int32_t tokenlen, int64_t* dura return getDuration(timestamp, *unit, duration, timePrecision); } -int32_t parseNatualDuration(const char* token, int32_t tokenLen, int64_t* duration, char* unit, int32_t timePrecision) { +int32_t parseNatualDuration(const char* token, int32_t tokenLen, int64_t* duration, char* unit, int32_t timePrecision, bool negativeAllow) { errno = 0; /* get the basic numeric value */ *duration = taosStr2Int64(token, NULL, 10); - if (*duration < 0 || errno != 0) { + if ((*duration < 0 && !negativeAllow) || errno != 0) { return -1; } diff --git a/source/libs/function/src/builtins.c b/source/libs/function/src/builtins.c index fbabef8fd3..c468abfdf0 100644 --- a/source/libs/function/src/builtins.c +++ b/source/libs/function/src/builtins.c @@ -46,7 +46,7 @@ static int32_t invaildFuncParaValueErrMsg(char* pErrBuf, int32_t len, const char #define TIME_UNIT_TOO_SMALL 2 static int32_t validateTimeUnitParam(uint8_t dbPrec, const SValueNode* pVal) { - if (!pVal->isDuration) { + if (!IS_DURATION_VAL(pVal->flag)) { return TIME_UNIT_INVALID; } @@ -225,7 +225,6 @@ static int32_t addTimezoneParam(SNodeList* pList) { } pVal->literal = strndup(buf, len); - pVal->isDuration = false; pVal->translate = true; pVal->node.resType.type = TSDB_DATA_TYPE_BINARY; pVal->node.resType.bytes = len + VARSTR_HEADER_SIZE; @@ -245,7 +244,6 @@ static int32_t addDbPrecisonParam(SNodeList** pList, uint8_t precision) { } pVal->literal = NULL; - pVal->isDuration = false; pVal->translate = true; pVal->notReserved = true; pVal->node.resType.type = TSDB_DATA_TYPE_TINYINT; diff --git a/source/libs/nodes/src/nodesCloneFuncs.c b/source/libs/nodes/src/nodesCloneFuncs.c index 390154dd66..e21cab40b9 100644 --- a/source/libs/nodes/src/nodesCloneFuncs.c +++ b/source/libs/nodes/src/nodesCloneFuncs.c @@ -125,7 +125,7 @@ static int32_t columnNodeCopy(const SColumnNode* pSrc, SColumnNode* pDst) { static int32_t valueNodeCopy(const SValueNode* pSrc, SValueNode* pDst) { COPY_BASE_OBJECT_FIELD(node, exprNodeCopy); COPY_CHAR_POINT_FIELD(literal); - COPY_SCALAR_FIELD(isDuration); + COPY_SCALAR_FIELD(flag); COPY_SCALAR_FIELD(translate); COPY_SCALAR_FIELD(notReserved); COPY_SCALAR_FIELD(isNull); diff --git a/source/libs/nodes/src/nodesCodeFuncs.c b/source/libs/nodes/src/nodesCodeFuncs.c index 2e693f8e43..82f89f4471 100644 --- a/source/libs/nodes/src/nodesCodeFuncs.c +++ b/source/libs/nodes/src/nodesCodeFuncs.c @@ -3556,7 +3556,7 @@ static int32_t jsonToColumnNode(const SJson* pJson, void* pObj) { static const char* jkValueLiteralSize = "LiteralSize"; static const char* jkValueLiteral = "Literal"; -static const char* jkValueDuration = "Duration"; +static const char* jkValueFlag = "Flag"; static const char* jkValueTranslate = "Translate"; static const char* jkValueNotReserved = "NotReserved"; static const char* jkValueIsNull = "IsNull"; @@ -3640,7 +3640,7 @@ static int32_t valueNodeToJson(const void* pObj, SJson* pJson) { code = tjsonAddStringToObject(pJson, jkValueLiteral, pNode->literal); } if (TSDB_CODE_SUCCESS == code) { - code = tjsonAddBoolToObject(pJson, jkValueDuration, pNode->isDuration); + code = tjsonAddBoolToObject(pJson, jkValueFlag, pNode->flag); } if (TSDB_CODE_SUCCESS == code) { code = tjsonAddBoolToObject(pJson, jkValueTranslate, pNode->translate); @@ -3794,7 +3794,7 @@ static int32_t jsonToValueNode(const SJson* pJson, void* pObj) { code = tjsonDupStringValue(pJson, jkValueLiteral, &pNode->literal); } if (TSDB_CODE_SUCCESS == code) { - code = tjsonGetBoolValue(pJson, jkValueDuration, &pNode->isDuration); + code = tjsonGetIntValue(pJson, jkValueFlag, &pNode->flag); } if (TSDB_CODE_SUCCESS == code) { code = tjsonGetBoolValue(pJson, jkValueTranslate, &pNode->translate); diff --git a/source/libs/nodes/src/nodesMsgFuncs.c b/source/libs/nodes/src/nodesMsgFuncs.c index 9804f2075b..479ea2e5d2 100644 --- a/source/libs/nodes/src/nodesMsgFuncs.c +++ b/source/libs/nodes/src/nodesMsgFuncs.c @@ -788,7 +788,7 @@ static int32_t msgToColumnNode(STlvDecoder* pDecoder, void* pObj) { enum { VALUE_CODE_EXPR_BASE = 1, VALUE_CODE_LITERAL, - VALUE_CODE_IS_DURATION, + VALUE_CODE_FLAG, VALUE_CODE_TRANSLATE, VALUE_CODE_NOT_RESERVED, VALUE_CODE_IS_NULL, @@ -849,7 +849,7 @@ static int32_t valueNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { code = tlvEncodeCStr(pEncoder, VALUE_CODE_LITERAL, pNode->literal); } if (TSDB_CODE_SUCCESS == code) { - code = tlvEncodeBool(pEncoder, VALUE_CODE_IS_DURATION, pNode->isDuration); + code = tlvEncodeI32(pEncoder, VALUE_CODE_FLAG, pNode->flag); } if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeBool(pEncoder, VALUE_CODE_TRANSLATE, pNode->translate); @@ -972,8 +972,8 @@ static int32_t msgToValueNode(STlvDecoder* pDecoder, void* pObj) { case VALUE_CODE_LITERAL: code = tlvDecodeCStrP(pTlv, &pNode->literal); break; - case VALUE_CODE_IS_DURATION: - code = tlvDecodeBool(pTlv, &pNode->isDuration); + case VALUE_CODE_FLAG: + code = tlvDecodeI32(pTlv, &pNode->flag); break; case VALUE_CODE_TRANSLATE: code = tlvDecodeBool(pTlv, &pNode->translate); diff --git a/source/libs/nodes/src/nodesUtilFuncs.c b/source/libs/nodes/src/nodesUtilFuncs.c index 7ed030c9b4..15ff382bf2 100644 --- a/source/libs/nodes/src/nodesUtilFuncs.c +++ b/source/libs/nodes/src/nodesUtilFuncs.c @@ -2396,7 +2396,6 @@ SValueNode* nodesMakeValueNodeFromString(char* literal) { pValNode->datum.p = p; pValNode->literal = tstrdup(literal); pValNode->translate = true; - pValNode->isDuration = false; pValNode->isNull = false; } return pValNode; @@ -2409,7 +2408,6 @@ SValueNode* nodesMakeValueNodeFromBool(bool b) { pValNode->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; nodesSetValueNodeValue(pValNode, &b); pValNode->translate = true; - pValNode->isDuration = false; pValNode->isNull = false; } return pValNode; diff --git a/source/libs/parser/inc/parAst.h b/source/libs/parser/inc/parAst.h index df9e5c05db..a0d1ff7366 100644 --- a/source/libs/parser/inc/parAst.h +++ b/source/libs/parser/inc/parAst.h @@ -111,6 +111,7 @@ SNode* createValueNode(SAstCreateContext* pCxt, int32_t dataType, const SToken* SNodeList* createHintNodeList(SAstCreateContext* pCxt, const SToken* pLiteral); SNode* createIdentifierValueNode(SAstCreateContext* pCxt, SToken* pLiteral); SNode* createDurationValueNode(SAstCreateContext* pCxt, const SToken* pLiteral); +SNode* createTimeOffsetValueNode(SAstCreateContext* pCxt, const SToken* pLiteral); SNode* createDefaultDatabaseCondValue(SAstCreateContext* pCxt); SNode* createPlaceholderValueNode(SAstCreateContext* pCxt, const SToken* pLiteral); SNode* setProjectionAlias(SAstCreateContext* pCxt, SNode* pNode, SToken* pAlias); diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 4e4ced18bf..d2bf92fc19 100755 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -1096,11 +1096,15 @@ join_subtype(A) ::= WINDOW. window_offset_clause_opt(A) ::= . { A = NULL; } window_offset_clause_opt(A) ::= WINDOW_OFFSET NK_LP window_offset_literal(B) - NK_COMMA window_offset_literal(C) NK_RP. { A = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); } - -window_offset_literal(A) ::= NK_VARIABLE(B). { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); } -window_offset_literal(A) ::= NK_INTEGER(B). { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); } + NK_COMMA window_offset_literal(C) NK_RP. { A = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); } +window_offset_literal(A) ::= NK_VARIABLE(B). { A = createRawExprNode(pCxt, &B, createTimeOffsetValueNode(pCxt, &B)); } +window_offset_literal(A) ::= NK_MINUS(B) NK_VARIABLE(C). { + SToken t = B; + t.n = (C.z + C.n) - B.z; + A = createRawExprNode(pCxt, &t, createTimeOffsetValueNode(pCxt, &t)); + } + jlimit_clause_opt(A) ::= . { A = NULL; } jlimit_clause_opt(A) ::= JLIMIT NK_INTEGER(B). { A = createLimitNode(pCxt, &B, NULL); } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 1357365f31..2c4c98e163 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -366,7 +366,6 @@ SNode* createValueNode(SAstCreateContext* pCxt, int32_t dataType, const SToken* if (TSDB_DATA_TYPE_TIMESTAMP == dataType) { val->node.resType.precision = TSDB_TIME_PRECISION_MILLI; } - val->isDuration = false; val->translate = false; return (SNode*)val; } @@ -544,7 +543,7 @@ SNode* createDurationValueNode(SAstCreateContext* pCxt, const SToken* pLiteral) val->literal = strndup(pLiteral->z, pLiteral->n); } CHECK_OUT_OF_MEM(val->literal); - val->isDuration = true; + val->flag |= VALUE_FLAG_IS_DURATION; val->translate = false; val->node.resType.type = TSDB_DATA_TYPE_BIGINT; val->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes; @@ -552,6 +551,52 @@ SNode* createDurationValueNode(SAstCreateContext* pCxt, const SToken* pLiteral) return (SNode*)val; } +SNode* createTimeOffsetValueNode(SAstCreateContext* pCxt, const SToken* pLiteral) { + CHECK_PARSER_STATUS(pCxt); + SValueNode* val = (SValueNode*)nodesMakeNode(QUERY_NODE_VALUE); + CHECK_OUT_OF_MEM(val); + if (pLiteral->type == TK_NK_STRING) { + // like '100s' or "100d" + // check format: ^[0-9]+[smwbauhdny]$' + if (pLiteral->n < 4) { + pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, pLiteral->z); + return NULL; + } + char unit = pLiteral->z[pLiteral->n - 2]; + switch (unit) { + case 'a': + case 'b': + case 'd': + case 'h': + case 'm': + case 's': + case 'u': + case 'w': + break; + default: + pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, pLiteral->z); + return NULL; + } + for (uint32_t i = 1; i < pLiteral->n - 2; ++i) { + if (!isdigit(pLiteral->z[i])) { + pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, pLiteral->z); + return NULL; + } + } + val->literal = strndup(pLiteral->z + 1, pLiteral->n - 2); + } else { + val->literal = strndup(pLiteral->z, pLiteral->n); + } + CHECK_OUT_OF_MEM(val->literal); + val->flag |= VALUE_FLAG_IS_TIME_OFFSET; + val->translate = false; + val->node.resType.type = TSDB_DATA_TYPE_BIGINT; + val->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes; + val->node.resType.precision = TSDB_TIME_PRECISION_MILLI; + return (SNode*)val; +} + + SNode* createDefaultDatabaseCondValue(SAstCreateContext* pCxt) { CHECK_PARSER_STATUS(pCxt); if (NULL == pCxt->pQueryCxt->db) { @@ -562,7 +607,6 @@ SNode* createDefaultDatabaseCondValue(SAstCreateContext* pCxt) { CHECK_OUT_OF_MEM(val); val->literal = taosStrdup(pCxt->pQueryCxt->db); CHECK_OUT_OF_MEM(val->literal); - val->isDuration = false; val->translate = false; val->node.resType.type = TSDB_DATA_TYPE_BINARY; val->node.resType.bytes = strlen(val->literal); diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index edee09447f..4ebe4f824a 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -1182,13 +1182,23 @@ static int32_t parseBoolFromValueNode(STranslateContext* pCxt, SValueNode* pVal) static EDealRes translateDurationValue(STranslateContext* pCxt, SValueNode* pVal) { if (parseNatualDuration(pVal->literal, strlen(pVal->literal), &pVal->datum.i, &pVal->unit, - pVal->node.resType.precision) != TSDB_CODE_SUCCESS) { + pVal->node.resType.precision, false) != TSDB_CODE_SUCCESS) { return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal); } *(int64_t*)&pVal->typeData = pVal->datum.i; return DEAL_RES_CONTINUE; } +static EDealRes translateTimeOffsetValue(STranslateContext* pCxt, SValueNode* pVal) { + if (parseNatualDuration(pVal->literal, strlen(pVal->literal), &pVal->datum.i, &pVal->unit, + pVal->node.resType.precision, true) != TSDB_CODE_SUCCESS) { + return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal); + } + *(int64_t*)&pVal->typeData = pVal->datum.i; + return DEAL_RES_CONTINUE; +} + + static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal, SDataType targetDt, bool strict) { int32_t code = TSDB_CODE_SUCCESS; switch (targetDt.type) { @@ -1371,8 +1381,10 @@ static EDealRes translateValueImpl(STranslateContext* pCxt, SValueNode* pVal, SD pVal->node.resType.precision = getPrecisionFromCurrStmt(pCxt->pCurrStmt, targetDt.precision); EDealRes res = DEAL_RES_CONTINUE; - if (pVal->isDuration) { + if (IS_DURATION_VAL(pVal->flag)) { res = translateDurationValue(pCxt, pVal); + } else if (IS_TIME_OFFSET_VAL(pVal->flag)) { + res = translateTimeOffsetValue(pCxt, pVal); } else { res = translateNormalValue(pCxt, pVal, targetDt, strict); } @@ -2861,7 +2873,6 @@ static EDealRes doTranslateTbName(SNode** pNode, void* pContext) { pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY; return DEAL_RES_ERROR; } - pVal->isDuration = false; pVal->translate = true; pVal->node.resType.type = TSDB_DATA_TYPE_BINARY; pVal->node.resType.bytes = tbLen + VARSTR_HEADER_SIZE; @@ -2914,6 +2925,7 @@ static int32_t checkJoinTable(STranslateContext* pCxt, SJoinTableNode* pJoinTabl } static int32_t translateJoinTable(STranslateContext* pCxt, SJoinTableNode* pJoinTable) { + int32_t code = TSDB_CODE_SUCCESS; EJoinType type = pJoinTable->joinType; EJoinSubType* pSType = &pJoinTable->subType; @@ -2935,17 +2947,20 @@ static int32_t translateJoinTable(STranslateContext* pCxt, SJoinTableNode* pJoin break; } - if (NULL != pJoinTable->pWindowOffset && *pSType != JOIN_STYPE_WIN) { - return buildInvalidOperationMsg(&pCxt->msgBuf, "WINDOW_OFFSET only supported for WINDOW join"); - } - if (NULL == pJoinTable->pWindowOffset && *pSType == JOIN_STYPE_WIN) { + if (NULL != pJoinTable->pWindowOffset) { + if (*pSType != JOIN_STYPE_WIN) { + return buildInvalidOperationMsg(&pCxt->msgBuf, "WINDOW_OFFSET only supported for WINDOW join"); + } + code = translateExpr(pCxt, &pJoinTable->pWindowOffset); + } else if (*pSType == JOIN_STYPE_WIN) { return buildInvalidOperationMsg(&pCxt->msgBuf, "WINDOW_OFFSET required for WINDOW join"); } - if (NULL != pJoinTable->pJLimit && *pSType != JOIN_STYPE_ASOF && *pSType != JOIN_STYPE_WIN) { + + if (TSDB_CODE_SUCCESS == code && NULL != pJoinTable->pJLimit && *pSType != JOIN_STYPE_ASOF && *pSType != JOIN_STYPE_WIN) { return buildInvalidOperationMsgExt(&pCxt->msgBuf, "JLIMIT not supported for %s join", getFullJoinTypeString(type, *pSType)); } - return TSDB_CODE_SUCCESS; + return code; } int32_t translateTable(STranslateContext* pCxt, SNode** pTable) { @@ -3841,7 +3856,7 @@ static int32_t createDefaultEveryNode(STranslateContext* pCxt, SNode** pOutput) pEvery->node.resType.type = TSDB_DATA_TYPE_BIGINT; pEvery->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes; - pEvery->isDuration = true; + pEvery->flag |= VALUE_FLAG_IS_DURATION; pEvery->literal = taosStrdup("1s"); *pOutput = (SNode*)pEvery; @@ -4746,7 +4761,7 @@ static int64_t getUnitPerMinute(uint8_t precision) { } static int64_t getBigintFromValueNode(SValueNode* pVal) { - if (pVal->isDuration) { + if (IS_DURATION_VAL(pVal->flag)) { return pVal->datum.i / getUnitPerMinute(pVal->node.resType.precision); } return pVal->datum.i; @@ -4863,12 +4878,12 @@ static int32_t checkDbKeepOption(STranslateContext* pCxt, SDatabaseOptions* pOpt if (DEAL_RES_ERROR == translateValue(pCxt, pVal)) { return pCxt->errCode; } - if (pVal->isDuration && TIME_UNIT_MINUTE != pVal->unit && TIME_UNIT_HOUR != pVal->unit && + if (IS_DURATION_VAL(pVal->flag) && TIME_UNIT_MINUTE != pVal->unit && TIME_UNIT_HOUR != pVal->unit && TIME_UNIT_DAY != pVal->unit) { return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_DB_OPTION, "Invalid option keep unit: %c, only m, h, d allowed", pVal->unit); } - if (!pVal->isDuration) { + if (!IS_DURATION_VAL(pVal->flag)) { pVal->datum.i = pVal->datum.i * 1440; } } @@ -5010,16 +5025,16 @@ static int32_t checkDbRetentionsOption(STranslateContext* pCxt, SNodeList* pRete SValueNode* pFreq = (SValueNode*)nodesListGetNode(((SNodeListNode*)pRetention)->pNodeList, 0); SValueNode* pKeep = (SValueNode*)nodesListGetNode(((SNodeListNode*)pRetention)->pNodeList, 1); - ASSERTS(pFreq->isDuration && pKeep->isDuration, "Retentions freq/keep should have unit"); + ASSERTS(IS_DURATION_VAL(pFreq->flag) && IS_DURATION_VAL(pKeep->flag), "Retentions freq/keep should have unit"); // check unit - if (pFreq->isDuration && TIME_UNIT_SECOND != pFreq->unit && TIME_UNIT_MINUTE != pFreq->unit && + if (IS_DURATION_VAL(pFreq->flag) && TIME_UNIT_SECOND != pFreq->unit && TIME_UNIT_MINUTE != pFreq->unit && TIME_UNIT_HOUR != pFreq->unit && TIME_UNIT_DAY != pFreq->unit && TIME_UNIT_WEEK != pFreq->unit) { return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_DB_OPTION, "Invalid option retentions(freq): %s, only s, m, h, d, w allowed", pFreq->literal); } - if (pKeep->isDuration && TIME_UNIT_MINUTE != pKeep->unit && TIME_UNIT_HOUR != pKeep->unit && + if (IS_DURATION_VAL(pKeep->flag) && TIME_UNIT_MINUTE != pKeep->unit && TIME_UNIT_HOUR != pKeep->unit && TIME_UNIT_DAY != pKeep->unit) { return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_DB_OPTION, "Invalid option retentions(keep): %s, only m, h, d allowed", pKeep->literal); @@ -5970,7 +5985,7 @@ static SNode* makeIntervalVal(SRetention* pRetension, int8_t precision) { nodesDestroyNode((SNode*)pVal); return NULL; } - pVal->isDuration = true; + pVal->flag |= VALUE_FLAG_IS_DURATION; pVal->node.resType.type = TSDB_DATA_TYPE_BIGINT; pVal->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes; pVal->node.resType.precision = precision; diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index bec1127a2b..ed691dfd12 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -143,18 +143,18 @@ typedef union { #define ParseCTX_FETCH #define ParseCTX_STORE #define YYFALLBACK 1 -#define YYNSTATE 844 +#define YYNSTATE 845 #define YYNRULE 655 #define YYNRULE_WITH_ACTION 655 #define YYNTOKEN 356 -#define YY_MAX_SHIFT 843 -#define YY_MIN_SHIFTREDUCE 1259 -#define YY_MAX_SHIFTREDUCE 1913 -#define YY_ERROR_ACTION 1914 -#define YY_ACCEPT_ACTION 1915 -#define YY_NO_ACTION 1916 -#define YY_MIN_REDUCE 1917 -#define YY_MAX_REDUCE 2571 +#define YY_MAX_SHIFT 844 +#define YY_MIN_SHIFTREDUCE 1260 +#define YY_MAX_SHIFTREDUCE 1914 +#define YY_ERROR_ACTION 1915 +#define YY_ACCEPT_ACTION 1916 +#define YY_NO_ACTION 1917 +#define YY_MIN_REDUCE 1918 +#define YY_MAX_REDUCE 2572 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -223,341 +223,341 @@ typedef union { *********** Begin parsing tables **********************************************/ #define YY_ACTTAB_COUNT (3348) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 561, 2094, 423, 562, 1960, 241, 729, 2105, 696, 564, - /* 10 */ 168, 1968, 48, 46, 1837, 2542, 1940, 402, 2107, 189, - /* 20 */ 420, 1918, 1662, 41, 40, 2156, 212, 47, 45, 44, - /* 30 */ 43, 42, 173, 695, 208, 1747, 2001, 1660, 2543, 697, - /* 40 */ 2044, 388, 127, 2218, 2357, 126, 125, 124, 123, 122, - /* 50 */ 121, 120, 119, 118, 41, 40, 1404, 711, 47, 45, - /* 60 */ 44, 43, 42, 1917, 1742, 1688, 1691, 41, 40, 2323, - /* 70 */ 19, 47, 45, 44, 43, 42, 425, 1668, 1687, 2151, - /* 80 */ 2153, 708, 146, 639, 1688, 2375, 2238, 136, 135, 134, - /* 90 */ 133, 132, 131, 130, 129, 128, 1406, 2323, 637, 745, - /* 100 */ 635, 273, 272, 840, 2236, 716, 15, 566, 815, 814, - /* 110 */ 813, 812, 432, 563, 811, 810, 151, 805, 804, 803, - /* 120 */ 802, 801, 800, 799, 150, 793, 792, 791, 431, 430, - /* 130 */ 788, 787, 786, 188, 187, 785, 1299, 728, 2356, 729, - /* 140 */ 2105, 2394, 1749, 1750, 114, 2358, 749, 2360, 2361, 744, - /* 150 */ 2158, 739, 9, 708, 146, 1306, 191, 569, 2447, 56, - /* 160 */ 562, 1960, 416, 2443, 127, 715, 1879, 126, 125, 124, - /* 170 */ 123, 122, 121, 120, 119, 118, 1722, 1732, 1301, 1304, - /* 180 */ 1305, 209, 2547, 1748, 1751, 259, 1988, 1582, 1583, 2493, - /* 190 */ 728, 184, 2455, 707, 1306, 138, 706, 106, 1663, 1690, - /* 200 */ 1661, 182, 2542, 2333, 2316, 1910, 1496, 1497, 624, 598, - /* 210 */ 594, 590, 586, 798, 258, 2004, 2066, 2341, 1304, 1305, - /* 220 */ 695, 208, 2098, 277, 204, 2543, 697, 2337, 1581, 1584, - /* 230 */ 1666, 1667, 1719, 650, 1721, 1724, 1725, 1726, 1727, 1728, - /* 240 */ 1729, 1730, 1731, 741, 737, 1740, 1741, 1743, 1744, 1745, - /* 250 */ 1746, 2, 48, 46, 667, 96, 578, 368, 256, 1685, - /* 260 */ 420, 2542, 1662, 181, 2455, 2456, 512, 144, 2460, 531, - /* 270 */ 201, 2339, 417, 2081, 530, 1747, 51, 1660, 1692, 2548, - /* 280 */ 208, 739, 2145, 728, 2543, 697, 1903, 623, 622, 621, - /* 290 */ 494, 63, 532, 2462, 613, 143, 617, 496, 1631, 1632, - /* 300 */ 616, 1325, 474, 1324, 1742, 615, 620, 396, 395, 2547, - /* 310 */ 19, 614, 579, 2231, 610, 1691, 2542, 1668, 142, 2459, - /* 320 */ 1909, 558, 246, 1815, 1816, 1817, 1818, 1819, 1820, 556, - /* 330 */ 255, 248, 552, 548, 2158, 2546, 1326, 253, 575, 2543, - /* 340 */ 2545, 401, 784, 840, 389, 1461, 15, 528, 526, 2156, - /* 350 */ 369, 708, 146, 686, 221, 482, 245, 307, 2462, 1452, - /* 360 */ 774, 773, 772, 1456, 771, 1458, 1459, 770, 767, 51, - /* 370 */ 1467, 764, 1469, 1470, 761, 758, 755, 1810, 1811, 1812, - /* 380 */ 1813, 2375, 1749, 1750, 2458, 2225, 2204, 1687, 519, 518, + /* 0 */ 561, 2095, 423, 562, 1961, 241, 730, 2106, 697, 564, + /* 10 */ 168, 1969, 48, 46, 1838, 2543, 1941, 402, 2108, 189, + /* 20 */ 420, 1919, 1663, 41, 40, 2157, 212, 47, 45, 44, + /* 30 */ 43, 42, 173, 696, 208, 1748, 2002, 1661, 2544, 698, + /* 40 */ 2045, 388, 127, 2219, 2358, 126, 125, 124, 123, 122, + /* 50 */ 121, 120, 119, 118, 41, 40, 1405, 712, 47, 45, + /* 60 */ 44, 43, 42, 1918, 1743, 1689, 1692, 41, 40, 2324, + /* 70 */ 19, 47, 45, 44, 43, 42, 425, 1669, 1688, 2152, + /* 80 */ 2154, 709, 146, 639, 1689, 2376, 2239, 136, 135, 134, + /* 90 */ 133, 132, 131, 130, 129, 128, 1407, 2324, 637, 746, + /* 100 */ 635, 273, 272, 841, 2237, 717, 15, 566, 816, 815, + /* 110 */ 814, 813, 432, 563, 812, 811, 151, 806, 805, 804, + /* 120 */ 803, 802, 801, 800, 150, 794, 793, 792, 431, 430, + /* 130 */ 789, 788, 787, 188, 187, 786, 1300, 729, 2357, 730, + /* 140 */ 2106, 2395, 1750, 1751, 114, 2359, 750, 2361, 2362, 745, + /* 150 */ 2159, 740, 9, 709, 146, 1307, 191, 569, 2448, 56, + /* 160 */ 562, 1961, 416, 2444, 127, 716, 1880, 126, 125, 124, + /* 170 */ 123, 122, 121, 120, 119, 118, 1723, 1733, 1302, 1305, + /* 180 */ 1306, 209, 2548, 1749, 1752, 259, 1989, 1583, 1584, 2494, + /* 190 */ 729, 184, 2456, 708, 1307, 138, 707, 106, 1664, 1691, + /* 200 */ 1662, 182, 2543, 2334, 2317, 1911, 1497, 1498, 624, 598, + /* 210 */ 594, 590, 586, 799, 258, 2005, 2067, 2342, 1305, 1306, + /* 220 */ 696, 208, 2099, 277, 204, 2544, 698, 2338, 1582, 1585, + /* 230 */ 1667, 1668, 1720, 650, 1722, 1725, 1726, 1727, 1728, 1729, + /* 240 */ 1730, 1731, 1732, 742, 738, 1741, 1742, 1744, 1745, 1746, + /* 250 */ 1747, 2, 48, 46, 667, 96, 578, 368, 256, 1686, + /* 260 */ 420, 2543, 1663, 181, 2456, 2457, 512, 144, 2461, 531, + /* 270 */ 201, 2340, 417, 2082, 530, 1748, 51, 1661, 1693, 2549, + /* 280 */ 208, 740, 2146, 729, 2544, 698, 1904, 623, 622, 621, + /* 290 */ 494, 63, 532, 2463, 613, 143, 617, 496, 1632, 1633, + /* 300 */ 616, 1326, 474, 1325, 1743, 615, 620, 396, 395, 2548, + /* 310 */ 19, 614, 579, 2232, 610, 1692, 2543, 1669, 142, 2460, + /* 320 */ 1910, 558, 246, 1816, 1817, 1818, 1819, 1820, 1821, 556, + /* 330 */ 255, 248, 552, 548, 2159, 2547, 1327, 253, 575, 2544, + /* 340 */ 2546, 401, 785, 841, 389, 1462, 15, 528, 526, 2157, + /* 350 */ 369, 709, 146, 686, 221, 482, 245, 307, 2463, 1453, + /* 360 */ 775, 774, 773, 1457, 772, 1459, 1460, 771, 768, 51, + /* 370 */ 1468, 765, 1470, 1471, 762, 759, 756, 1811, 1812, 1813, + /* 380 */ 1814, 2376, 1750, 1751, 2459, 2226, 2205, 1688, 519, 518, /* 390 */ 517, 516, 511, 510, 509, 508, 507, 502, 501, 500, /* 400 */ 499, 372, 491, 490, 489, 577, 484, 483, 387, 172, - /* 410 */ 729, 2105, 1550, 1551, 346, 34, 1722, 1732, 1569, 729, - /* 420 */ 2105, 41, 40, 1748, 1751, 47, 45, 44, 43, 42, - /* 430 */ 137, 343, 74, 171, 1325, 73, 1324, 604, 1663, 137, - /* 440 */ 1661, 2108, 685, 682, 189, 370, 609, 41, 40, 2317, - /* 450 */ 1691, 47, 45, 44, 43, 42, 239, 543, 541, 538, - /* 460 */ 710, 175, 2455, 2456, 309, 144, 2460, 227, 2219, 1326, - /* 470 */ 1666, 1667, 1719, 199, 1721, 1724, 1725, 1726, 1727, 1728, - /* 480 */ 1729, 1730, 1731, 741, 737, 1740, 1741, 1743, 1744, 1745, - /* 490 */ 1746, 2, 12, 48, 46, 522, 52, 63, 795, 667, - /* 500 */ 276, 420, 95, 1662, 275, 649, 2542, 581, 90, 380, - /* 510 */ 174, 89, 1929, 623, 622, 621, 1747, 646, 1660, 390, - /* 520 */ 613, 143, 617, 843, 2548, 208, 616, 1692, 2100, 2543, - /* 530 */ 697, 615, 620, 396, 395, 64, 2357, 614, 1971, 332, - /* 540 */ 610, 1868, 309, 1562, 1563, 1742, 688, 683, 676, 746, - /* 550 */ 243, 19, 784, 1776, 564, 198, 1968, 231, 1668, 2462, - /* 560 */ 394, 393, 797, 831, 827, 823, 819, 667, 329, 95, - /* 570 */ 98, 112, 648, 375, 2542, 88, 400, 2375, 641, 521, - /* 580 */ 520, 84, 83, 470, 840, 2457, 220, 15, 147, 2323, - /* 590 */ 833, 745, 2548, 208, 1687, 2101, 2097, 2543, 697, 462, - /* 600 */ 460, 679, 678, 1866, 1867, 1869, 1870, 1871, 203, 113, - /* 610 */ 371, 159, 323, 451, 1777, 36, 448, 444, 440, 437, - /* 620 */ 463, 41, 40, 1749, 1750, 47, 45, 44, 43, 42, - /* 630 */ 2356, 392, 391, 2394, 606, 611, 114, 2358, 749, 2360, - /* 640 */ 2361, 744, 666, 739, 725, 687, 149, 2546, 156, 2418, - /* 650 */ 2447, 2158, 429, 428, 416, 2443, 608, 1722, 1732, 1401, - /* 660 */ 607, 1939, 1692, 1691, 1748, 1751, 724, 41, 40, 309, - /* 670 */ 309, 47, 45, 44, 43, 42, 12, 1669, 10, 1663, - /* 680 */ 63, 1661, 41, 40, 312, 55, 47, 45, 44, 43, - /* 690 */ 42, 311, 30, 651, 37, 418, 1771, 1772, 1773, 1774, - /* 700 */ 1775, 1779, 1780, 1781, 1782, 47, 45, 44, 43, 42, - /* 710 */ 281, 1666, 1667, 1719, 2323, 1721, 1724, 1725, 1726, 1727, - /* 720 */ 1728, 1729, 1730, 1731, 741, 737, 1740, 1741, 1743, 1744, - /* 730 */ 1745, 1746, 2, 48, 46, 1752, 68, 729, 2105, 63, - /* 740 */ 12, 420, 2357, 1662, 2467, 1810, 1811, 1812, 1813, 2467, - /* 750 */ 2467, 2467, 2467, 2467, 2467, 711, 1747, 471, 1660, 782, - /* 760 */ 161, 160, 779, 778, 777, 158, 1880, 571, 2277, 2238, - /* 770 */ 61, 1915, 1810, 1811, 1812, 1813, 2357, 99, 664, 1778, - /* 780 */ 2333, 628, 455, 2375, 413, 1742, 2158, 2235, 716, 746, - /* 790 */ 1416, 1970, 414, 410, 2096, 2323, 640, 745, 1668, 2158, - /* 800 */ 171, 2156, 480, 2214, 2337, 1415, 386, 1610, 2107, 457, - /* 810 */ 453, 731, 274, 2419, 2156, 41, 40, 2375, 1420, 47, - /* 820 */ 45, 44, 43, 42, 840, 486, 2214, 49, 631, 2323, - /* 830 */ 465, 745, 464, 1419, 1668, 625, 2356, 1662, 63, 2394, - /* 840 */ 1672, 271, 114, 2358, 749, 2360, 2361, 744, 2339, 739, - /* 850 */ 435, 223, 1660, 309, 191, 434, 2447, 1719, 739, 35, - /* 860 */ 416, 2443, 463, 1749, 1750, 2082, 651, 467, 775, 1783, - /* 870 */ 2356, 533, 466, 2394, 225, 1692, 114, 2358, 749, 2360, - /* 880 */ 2361, 744, 72, 739, 696, 71, 2158, 2494, 2562, 202, - /* 890 */ 2447, 2542, 1668, 415, 416, 2443, 1841, 1722, 1732, 535, - /* 900 */ 667, 2156, 1687, 1834, 1748, 1751, 733, 2542, 2419, 695, - /* 910 */ 208, 111, 309, 1687, 2543, 697, 2080, 667, 840, 1663, - /* 920 */ 108, 1661, 316, 317, 2542, 2548, 208, 315, 41, 40, - /* 930 */ 2543, 697, 47, 45, 44, 43, 42, 514, 2214, 1757, - /* 940 */ 653, 2277, 2548, 208, 699, 1687, 1938, 2543, 697, 38, - /* 950 */ 325, 1666, 1667, 1719, 2090, 1721, 1724, 1725, 1726, 1727, - /* 960 */ 1728, 1729, 1730, 1731, 741, 737, 1740, 1741, 1743, 1744, - /* 970 */ 1745, 1746, 2, 48, 46, 2158, 2357, 729, 2105, 2189, - /* 980 */ 608, 420, 424, 1662, 607, 170, 230, 729, 2105, 746, - /* 990 */ 2156, 2501, 729, 2105, 729, 2105, 1747, 472, 1660, 2323, - /* 1000 */ 782, 161, 160, 779, 778, 777, 158, 488, 2357, 2547, - /* 1010 */ 1824, 309, 503, 1663, 504, 1661, 2542, 2375, 708, 146, - /* 1020 */ 423, 746, 1937, 2514, 330, 1742, 426, 1853, 171, 2323, - /* 1030 */ 148, 745, 1860, 2418, 171, 2546, 2107, 2092, 1668, 2543, - /* 1040 */ 2544, 776, 2107, 652, 2149, 1666, 1667, 1861, 1687, 2375, - /* 1050 */ 1823, 782, 161, 160, 779, 778, 777, 158, 1723, 14, - /* 1060 */ 13, 2323, 3, 745, 840, 729, 2105, 49, 2333, 1723, - /* 1070 */ 2356, 2152, 2153, 2394, 54, 2323, 114, 2358, 749, 2360, - /* 1080 */ 2361, 744, 2342, 739, 2304, 580, 1936, 1859, 2562, 1935, - /* 1090 */ 2447, 712, 2337, 667, 416, 2443, 729, 2105, 600, 599, - /* 1100 */ 2542, 1723, 2356, 1749, 1750, 2394, 1690, 1934, 114, 2358, - /* 1110 */ 749, 2360, 2361, 744, 1720, 739, 505, 1933, 2548, 208, - /* 1120 */ 2562, 1932, 2447, 2543, 697, 1720, 416, 2443, 176, 2455, - /* 1130 */ 2456, 1931, 144, 2460, 729, 2105, 2339, 1722, 1732, 2323, - /* 1140 */ 498, 667, 2323, 2158, 1748, 1751, 739, 1308, 2542, 497, - /* 1150 */ 44, 43, 42, 1686, 2102, 729, 2105, 1720, 2157, 1663, - /* 1160 */ 2323, 1661, 1928, 729, 2105, 1790, 2548, 208, 729, 2105, - /* 1170 */ 2323, 2543, 697, 780, 2323, 279, 2149, 1927, 1328, 1329, - /* 1180 */ 1833, 1926, 1925, 287, 2323, 602, 601, 1924, 714, 1923, - /* 1190 */ 1922, 1666, 1667, 1719, 736, 1721, 1724, 1725, 1726, 1727, - /* 1200 */ 1728, 1729, 1730, 1731, 741, 737, 1740, 1741, 1743, 1744, - /* 1210 */ 1745, 1746, 2, 48, 46, 2323, 2357, 729, 2105, 729, - /* 1220 */ 2105, 420, 1921, 1662, 729, 2105, 729, 2105, 2286, 746, - /* 1230 */ 2323, 674, 729, 2105, 2323, 2323, 1747, 320, 1660, 726, - /* 1240 */ 2323, 2307, 2323, 2323, 727, 1920, 326, 76, 2357, 619, - /* 1250 */ 618, 2199, 427, 809, 807, 339, 781, 2375, 2135, 2149, - /* 1260 */ 1720, 746, 139, 2535, 307, 1742, 2083, 1945, 835, 2323, - /* 1270 */ 264, 745, 612, 262, 86, 2323, 266, 268, 1668, 265, - /* 1280 */ 267, 270, 278, 1979, 269, 643, 700, 642, 288, 2375, - /* 1290 */ 1977, 159, 442, 478, 1671, 159, 1399, 87, 2323, 152, - /* 1300 */ 50, 2323, 50, 745, 840, 626, 192, 15, 214, 703, - /* 1310 */ 2356, 1670, 629, 2394, 2344, 159, 114, 2358, 749, 2360, - /* 1320 */ 2361, 744, 50, 739, 1912, 1913, 314, 2088, 2562, 75, - /* 1330 */ 2447, 157, 100, 159, 416, 2443, 14, 13, 66, 50, - /* 1340 */ 50, 2109, 2356, 1749, 1750, 2394, 753, 284, 114, 2358, - /* 1350 */ 749, 2360, 2361, 744, 1768, 739, 157, 1359, 740, 2045, - /* 1360 */ 2562, 1930, 2447, 429, 428, 1626, 416, 2443, 2357, 1629, - /* 1370 */ 789, 2346, 180, 1676, 1865, 2507, 1864, 1722, 1732, 159, - /* 1380 */ 293, 746, 140, 302, 1748, 1751, 1747, 157, 1669, 713, - /* 1390 */ 303, 680, 790, 141, 1378, 709, 1579, 1360, 295, 1663, - /* 1400 */ 318, 1661, 2376, 721, 2042, 322, 2223, 1446, 2041, 2375, - /* 1410 */ 1961, 2497, 1784, 1733, 338, 1742, 1376, 677, 406, 684, - /* 1420 */ 1474, 2323, 403, 745, 718, 433, 1967, 660, 1668, 2224, - /* 1430 */ 1478, 1666, 1667, 1719, 2146, 1721, 1724, 1725, 1726, 1727, - /* 1440 */ 1728, 1729, 1730, 1731, 741, 737, 1740, 1741, 1743, 1744, - /* 1450 */ 1745, 1746, 2, 1485, 735, 2498, 1483, 1674, 2508, 691, - /* 1460 */ 692, 162, 2356, 305, 2067, 2394, 300, 5, 114, 2358, - /* 1470 */ 749, 2360, 2361, 744, 1673, 739, 308, 436, 441, 384, - /* 1480 */ 2562, 449, 2447, 1695, 459, 450, 416, 2443, 458, 216, - /* 1490 */ 215, 461, 218, 1603, 333, 1685, 475, 1686, 479, 229, - /* 1500 */ 481, 485, 487, 524, 513, 492, 506, 523, 2216, 515, - /* 1510 */ 525, 536, 537, 534, 234, 539, 236, 233, 542, 2357, - /* 1520 */ 540, 544, 1693, 559, 4, 560, 567, 570, 244, 92, - /* 1530 */ 1688, 568, 746, 572, 247, 1694, 1696, 573, 574, 576, - /* 1540 */ 1697, 2232, 582, 603, 605, 250, 2095, 645, 647, 1677, - /* 1550 */ 252, 1672, 2357, 93, 94, 701, 257, 632, 261, 116, - /* 1560 */ 2375, 633, 365, 2295, 2292, 746, 97, 2291, 280, 2091, - /* 1570 */ 153, 1689, 2323, 2278, 745, 263, 655, 164, 165, 654, - /* 1580 */ 704, 1680, 1682, 2093, 2089, 283, 166, 167, 334, 2357, - /* 1590 */ 285, 662, 661, 2375, 659, 737, 1740, 1741, 1743, 1744, - /* 1600 */ 1745, 1746, 746, 671, 681, 2323, 2513, 745, 2512, 719, - /* 1610 */ 2485, 8, 690, 2356, 183, 672, 2394, 294, 297, 114, - /* 1620 */ 2358, 749, 2360, 2361, 744, 656, 739, 290, 299, 296, - /* 1630 */ 2375, 2422, 292, 2447, 670, 669, 298, 416, 2443, 694, - /* 1640 */ 693, 705, 2323, 2466, 745, 407, 2356, 1690, 702, 2394, - /* 1650 */ 145, 1831, 114, 2358, 749, 2360, 2361, 744, 1829, 739, - /* 1660 */ 2565, 2357, 2463, 310, 2420, 195, 2447, 335, 717, 154, - /* 1670 */ 416, 2443, 2246, 2245, 746, 2244, 336, 722, 301, 155, - /* 1680 */ 412, 723, 337, 2356, 2106, 62, 2394, 210, 105, 114, - /* 1690 */ 2358, 749, 2360, 2361, 744, 2428, 739, 107, 1, 751, - /* 1700 */ 2150, 732, 2375, 2447, 2357, 340, 1283, 416, 2443, 328, - /* 1710 */ 2541, 837, 834, 304, 2323, 376, 745, 746, 163, 839, - /* 1720 */ 53, 349, 342, 363, 344, 364, 353, 2315, 2314, 2313, - /* 1730 */ 377, 81, 2308, 2357, 438, 439, 1653, 1654, 213, 2306, - /* 1740 */ 443, 445, 447, 446, 1652, 2375, 746, 2305, 385, 2303, - /* 1750 */ 452, 2302, 454, 2301, 456, 2356, 1642, 2323, 2394, 745, - /* 1760 */ 2282, 115, 2358, 749, 2360, 2361, 744, 217, 739, 2281, - /* 1770 */ 219, 1606, 82, 1605, 2375, 2447, 2259, 2258, 2257, 2446, - /* 1780 */ 2443, 468, 469, 2256, 2255, 2206, 2323, 473, 745, 1549, - /* 1790 */ 2198, 476, 477, 2195, 222, 2194, 2193, 85, 2356, 2192, - /* 1800 */ 2357, 2394, 2197, 2196, 115, 2358, 749, 2360, 2361, 744, - /* 1810 */ 224, 739, 2191, 743, 2190, 2188, 2187, 2186, 2447, 226, - /* 1820 */ 2185, 495, 734, 2443, 493, 2201, 2184, 747, 2183, 2357, - /* 1830 */ 2394, 2182, 2181, 115, 2358, 749, 2360, 2361, 744, 2180, - /* 1840 */ 739, 2375, 746, 2203, 2179, 2178, 2177, 2447, 527, 228, - /* 1850 */ 2169, 379, 2443, 2323, 2176, 745, 2175, 2174, 2173, 2172, - /* 1860 */ 2171, 2170, 2168, 91, 2167, 2166, 2202, 2200, 2165, 2164, - /* 1870 */ 2375, 2163, 232, 1555, 2162, 2161, 529, 2160, 2159, 373, - /* 1880 */ 2007, 2006, 2323, 374, 745, 1417, 235, 237, 2005, 1413, - /* 1890 */ 2003, 238, 1421, 2000, 2356, 547, 1999, 2394, 546, 1992, - /* 1900 */ 361, 2358, 749, 2360, 2361, 744, 742, 739, 730, 2412, - /* 1910 */ 545, 2357, 1981, 549, 551, 1956, 553, 1307, 1955, 557, - /* 1920 */ 190, 2280, 2276, 2356, 746, 555, 2394, 78, 2266, 177, - /* 1930 */ 2358, 749, 2360, 2361, 744, 550, 739, 554, 2343, 240, - /* 1940 */ 200, 2357, 2254, 242, 565, 251, 79, 249, 2253, 2230, - /* 1950 */ 254, 2084, 2375, 2002, 746, 1998, 583, 584, 585, 1996, - /* 1960 */ 587, 588, 589, 1352, 2323, 1994, 745, 591, 592, 593, - /* 1970 */ 1991, 595, 1976, 597, 1974, 668, 2504, 596, 1975, 2357, - /* 1980 */ 1973, 1952, 2375, 2086, 1490, 1489, 2085, 1403, 1989, 1402, - /* 1990 */ 806, 1400, 746, 1398, 2323, 1397, 745, 1396, 1395, 1394, - /* 2000 */ 808, 1391, 1980, 1390, 1389, 2356, 2357, 397, 2394, 260, - /* 2010 */ 1388, 178, 2358, 749, 2360, 2361, 744, 398, 739, 746, - /* 2020 */ 2375, 65, 627, 1978, 630, 399, 1951, 1950, 1949, 634, - /* 2030 */ 1948, 636, 2323, 1947, 745, 2356, 638, 117, 2394, 1640, - /* 2040 */ 2279, 115, 2358, 749, 2360, 2361, 744, 2375, 739, 2357, - /* 2050 */ 1636, 29, 404, 1638, 1616, 2447, 1635, 282, 2275, 2323, - /* 2060 */ 2444, 745, 746, 1614, 2357, 2265, 1612, 657, 2252, 698, - /* 2070 */ 2563, 2251, 2547, 2356, 69, 20, 2394, 746, 17, 177, - /* 2080 */ 2358, 749, 2360, 2361, 744, 31, 739, 57, 6, 58, - /* 2090 */ 2375, 658, 1591, 663, 673, 405, 1882, 289, 7, 169, - /* 2100 */ 2356, 675, 2323, 2394, 745, 2375, 362, 2358, 749, 2360, - /* 2110 */ 2361, 744, 291, 739, 286, 1590, 21, 2323, 22, 745, - /* 2120 */ 665, 2357, 1863, 194, 179, 205, 2505, 193, 32, 2344, - /* 2130 */ 33, 1852, 1822, 206, 746, 1826, 67, 80, 207, 23, - /* 2140 */ 24, 1902, 1903, 2356, 1807, 1897, 2394, 1896, 408, 362, - /* 2150 */ 2358, 749, 2360, 2361, 744, 1901, 739, 1900, 2356, 409, - /* 2160 */ 1806, 2394, 2375, 306, 355, 2358, 749, 2360, 2361, 744, - /* 2170 */ 60, 739, 185, 2250, 2323, 2229, 745, 313, 101, 25, - /* 2180 */ 102, 1858, 720, 196, 319, 70, 18, 2228, 103, 2357, - /* 2190 */ 59, 321, 104, 324, 26, 1759, 108, 11, 1758, 13, - /* 2200 */ 1678, 1769, 746, 1737, 186, 2397, 197, 2357, 738, 748, - /* 2210 */ 1735, 39, 1712, 752, 689, 2356, 1734, 750, 2394, 16, - /* 2220 */ 743, 178, 2358, 749, 2360, 2361, 744, 27, 739, 422, - /* 2230 */ 2375, 1704, 28, 756, 1475, 411, 754, 759, 1472, 1471, - /* 2240 */ 757, 762, 2323, 1468, 745, 760, 763, 765, 2375, 1462, - /* 2250 */ 1460, 766, 1466, 768, 769, 1465, 1464, 109, 327, 110, - /* 2260 */ 2323, 1484, 745, 1480, 77, 1350, 1385, 1382, 1463, 783, - /* 2270 */ 1381, 1380, 1379, 1377, 1375, 1374, 1373, 794, 1411, 1410, - /* 2280 */ 2564, 796, 1371, 2356, 2357, 211, 2394, 1370, 1369, 362, - /* 2290 */ 2358, 749, 2360, 2361, 744, 1368, 739, 746, 1367, 1366, - /* 2300 */ 1365, 2356, 1405, 1407, 2394, 1362, 1361, 361, 2358, 749, - /* 2310 */ 2360, 2361, 744, 1358, 739, 1357, 2413, 1356, 1355, 1997, - /* 2320 */ 816, 817, 818, 1995, 820, 2375, 821, 822, 1993, 824, - /* 2330 */ 419, 826, 1990, 825, 828, 829, 830, 2323, 1972, 745, - /* 2340 */ 832, 1296, 1946, 1284, 836, 1916, 331, 1664, 838, 1916, - /* 2350 */ 842, 341, 2357, 1916, 841, 1916, 1916, 1916, 1916, 1916, - /* 2360 */ 1916, 1916, 1916, 1916, 1916, 746, 1916, 1916, 1916, 1916, - /* 2370 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2356, 2357, - /* 2380 */ 1916, 2394, 1916, 1916, 362, 2358, 749, 2360, 2361, 744, - /* 2390 */ 1916, 739, 746, 2375, 1916, 2357, 1916, 1916, 421, 1916, - /* 2400 */ 1916, 1916, 1916, 1916, 1916, 2323, 1916, 745, 746, 1916, - /* 2410 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2420 */ 2375, 1916, 2357, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2430 */ 1916, 1916, 2323, 1916, 745, 746, 2375, 1916, 1916, 1916, - /* 2440 */ 1916, 1916, 1916, 1916, 1916, 1916, 2356, 1916, 2323, 2394, - /* 2450 */ 745, 1916, 362, 2358, 749, 2360, 2361, 744, 1916, 739, - /* 2460 */ 1916, 1916, 1916, 2375, 1916, 2357, 1916, 1916, 1916, 1916, - /* 2470 */ 1916, 1916, 1916, 644, 1916, 2323, 2394, 745, 746, 357, - /* 2480 */ 2358, 749, 2360, 2361, 744, 1916, 739, 1916, 1916, 2356, - /* 2490 */ 1916, 1916, 2394, 1916, 2357, 347, 2358, 749, 2360, 2361, - /* 2500 */ 744, 1916, 739, 1916, 1916, 1916, 2375, 746, 1916, 1916, - /* 2510 */ 1916, 1916, 1916, 1916, 1916, 1916, 2356, 1916, 2323, 2394, - /* 2520 */ 745, 1916, 345, 2358, 749, 2360, 2361, 744, 1916, 739, - /* 2530 */ 1916, 1916, 1916, 1916, 1916, 2375, 1916, 1916, 1916, 1916, - /* 2540 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2323, 1916, 745, - /* 2550 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2356, - /* 2560 */ 1916, 1916, 2394, 1916, 1916, 348, 2358, 749, 2360, 2361, - /* 2570 */ 744, 1916, 739, 1916, 2357, 1916, 1916, 1916, 1916, 1916, - /* 2580 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 746, 2356, 1916, - /* 2590 */ 2357, 2394, 1916, 1916, 354, 2358, 749, 2360, 2361, 744, - /* 2600 */ 1916, 739, 1916, 746, 1916, 1916, 1916, 1916, 2357, 1916, - /* 2610 */ 1916, 1916, 1916, 1916, 1916, 2375, 1916, 1916, 1916, 1916, - /* 2620 */ 1916, 746, 1916, 1916, 1916, 1916, 1916, 2323, 1916, 745, - /* 2630 */ 1916, 2375, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2640 */ 1916, 1916, 1916, 2323, 1916, 745, 1916, 1916, 1916, 2375, - /* 2650 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2660 */ 1916, 2323, 1916, 745, 1916, 1916, 1916, 1916, 2356, 1916, - /* 2670 */ 1916, 2394, 1916, 1916, 358, 2358, 749, 2360, 2361, 744, - /* 2680 */ 1916, 739, 1916, 1916, 2356, 2357, 1916, 2394, 1916, 1916, - /* 2690 */ 350, 2358, 749, 2360, 2361, 744, 1916, 739, 746, 1916, - /* 2700 */ 1916, 1916, 2356, 1916, 1916, 2394, 1916, 1916, 359, 2358, - /* 2710 */ 749, 2360, 2361, 744, 1916, 739, 1916, 1916, 1916, 1916, - /* 2720 */ 1916, 1916, 1916, 1916, 1916, 1916, 2375, 1916, 1916, 1916, - /* 2730 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2323, 1916, - /* 2740 */ 745, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2750 */ 1916, 1916, 2357, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2760 */ 1916, 1916, 1916, 1916, 1916, 746, 1916, 2357, 1916, 1916, - /* 2770 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2356, - /* 2780 */ 746, 1916, 2394, 1916, 1916, 351, 2358, 749, 2360, 2361, - /* 2790 */ 744, 1916, 739, 2375, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2800 */ 1916, 1916, 1916, 1916, 1916, 2323, 1916, 745, 2375, 1916, - /* 2810 */ 2357, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2820 */ 2323, 1916, 745, 746, 1916, 2357, 1916, 1916, 1916, 1916, - /* 2830 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 746, 1916, - /* 2840 */ 1916, 1916, 1916, 1916, 1916, 1916, 2356, 1916, 1916, 2394, - /* 2850 */ 1916, 2375, 360, 2358, 749, 2360, 2361, 744, 1916, 739, - /* 2860 */ 1916, 2356, 1916, 2323, 2394, 745, 2375, 352, 2358, 749, - /* 2870 */ 2360, 2361, 744, 1916, 739, 1916, 1916, 1916, 2323, 1916, - /* 2880 */ 745, 1916, 2357, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2890 */ 1916, 1916, 1916, 1916, 1916, 746, 1916, 1916, 1916, 1916, - /* 2900 */ 1916, 1916, 1916, 1916, 2356, 1916, 1916, 2394, 1916, 1916, - /* 2910 */ 366, 2358, 749, 2360, 2361, 744, 1916, 739, 1916, 2356, - /* 2920 */ 1916, 1916, 2394, 2375, 1916, 367, 2358, 749, 2360, 2361, - /* 2930 */ 744, 1916, 739, 1916, 1916, 2323, 1916, 745, 1916, 1916, - /* 2940 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2357, 1916, 1916, - /* 2950 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 2960 */ 746, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2357, 1916, - /* 2970 */ 1916, 1916, 1916, 1916, 1916, 1916, 2356, 1916, 1916, 2394, - /* 2980 */ 1916, 746, 2369, 2358, 749, 2360, 2361, 744, 2375, 739, - /* 2990 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3000 */ 2323, 1916, 745, 1916, 1916, 2357, 1916, 1916, 1916, 2375, - /* 3010 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 746, 1916, - /* 3020 */ 1916, 2323, 1916, 745, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3030 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3040 */ 1916, 2356, 1916, 1916, 2394, 1916, 2375, 2368, 2358, 749, - /* 3050 */ 2360, 2361, 744, 1916, 739, 1916, 1916, 1916, 2323, 1916, - /* 3060 */ 745, 1916, 2356, 1916, 1916, 2394, 1916, 1916, 2367, 2358, - /* 3070 */ 749, 2360, 2361, 744, 1916, 739, 1916, 1916, 1916, 1916, - /* 3080 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3090 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2357, 2356, - /* 3100 */ 1916, 1916, 2394, 1916, 1916, 381, 2358, 749, 2360, 2361, - /* 3110 */ 744, 746, 739, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3120 */ 1916, 1916, 1916, 1916, 1916, 2357, 1916, 1916, 1916, 1916, - /* 3130 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 746, 2375, - /* 3140 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3150 */ 1916, 2323, 1916, 745, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3160 */ 1916, 1916, 1916, 1916, 1916, 1916, 2375, 1916, 2357, 1916, - /* 3170 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2323, 1916, - /* 3180 */ 745, 746, 1916, 2357, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3190 */ 1916, 1916, 2356, 1916, 1916, 2394, 746, 1916, 382, 2358, - /* 3200 */ 749, 2360, 2361, 744, 1916, 739, 1916, 1916, 1916, 2375, - /* 3210 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 2356, - /* 3220 */ 1916, 2323, 2394, 745, 2375, 378, 2358, 749, 2360, 2361, - /* 3230 */ 744, 1916, 739, 1916, 1916, 1916, 2323, 1916, 745, 1916, - /* 3240 */ 2357, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3250 */ 1916, 1916, 1916, 746, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3260 */ 1916, 1916, 2356, 1916, 1916, 2394, 1916, 1916, 383, 2358, - /* 3270 */ 749, 2360, 2361, 744, 1916, 739, 1916, 747, 1916, 1916, - /* 3280 */ 2394, 2375, 1916, 357, 2358, 749, 2360, 2361, 744, 1916, - /* 3290 */ 739, 1916, 1916, 2323, 1916, 745, 1916, 1916, 1916, 1916, - /* 3300 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3310 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3320 */ 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - /* 3330 */ 1916, 1916, 1916, 1916, 2356, 1916, 1916, 2394, 1916, 1916, - /* 3340 */ 356, 2358, 749, 2360, 2361, 744, 1916, 739, + /* 410 */ 730, 2106, 1551, 1552, 346, 34, 1723, 1733, 1570, 730, + /* 420 */ 2106, 41, 40, 1749, 1752, 47, 45, 44, 43, 42, + /* 430 */ 137, 343, 74, 171, 1326, 73, 1325, 604, 1664, 137, + /* 440 */ 1662, 2109, 685, 682, 189, 370, 609, 41, 40, 2318, + /* 450 */ 1692, 47, 45, 44, 43, 42, 239, 543, 541, 538, + /* 460 */ 711, 175, 2456, 2457, 309, 144, 2461, 227, 2220, 1327, + /* 470 */ 1667, 1668, 1720, 199, 1722, 1725, 1726, 1727, 1728, 1729, + /* 480 */ 1730, 1731, 1732, 742, 738, 1741, 1742, 1744, 1745, 1746, + /* 490 */ 1747, 2, 12, 48, 46, 522, 52, 63, 796, 667, + /* 500 */ 276, 420, 95, 1663, 275, 649, 2543, 581, 90, 380, + /* 510 */ 174, 89, 1930, 623, 622, 621, 1748, 646, 1661, 390, + /* 520 */ 613, 143, 617, 844, 2549, 208, 616, 1693, 2101, 2544, + /* 530 */ 698, 615, 620, 396, 395, 64, 2358, 614, 1972, 332, + /* 540 */ 610, 1869, 309, 1563, 1564, 1743, 688, 683, 676, 747, + /* 550 */ 243, 19, 785, 1777, 564, 198, 1969, 231, 1669, 2463, + /* 560 */ 394, 393, 798, 832, 828, 824, 820, 667, 329, 95, + /* 570 */ 98, 112, 648, 375, 2543, 88, 400, 2376, 641, 521, + /* 580 */ 520, 84, 83, 470, 841, 2458, 220, 15, 147, 2324, + /* 590 */ 834, 746, 2549, 208, 1688, 2102, 2098, 2544, 698, 462, + /* 600 */ 460, 679, 678, 1867, 1868, 1870, 1871, 1872, 203, 113, + /* 610 */ 371, 159, 323, 451, 1778, 36, 448, 444, 440, 437, + /* 620 */ 463, 41, 40, 1750, 1751, 47, 45, 44, 43, 42, + /* 630 */ 2357, 392, 391, 2395, 606, 611, 114, 2359, 750, 2361, + /* 640 */ 2362, 745, 666, 740, 726, 687, 149, 2547, 156, 2419, + /* 650 */ 2448, 2159, 429, 428, 416, 2444, 608, 1723, 1733, 1402, + /* 660 */ 607, 1940, 1693, 1692, 1749, 1752, 725, 41, 40, 309, + /* 670 */ 309, 47, 45, 44, 43, 42, 12, 1670, 10, 1664, + /* 680 */ 63, 1662, 41, 40, 312, 55, 47, 45, 44, 43, + /* 690 */ 42, 311, 30, 651, 37, 418, 1772, 1773, 1774, 1775, + /* 700 */ 1776, 1780, 1781, 1782, 1783, 47, 45, 44, 43, 42, + /* 710 */ 281, 1667, 1668, 1720, 2324, 1722, 1725, 1726, 1727, 1728, + /* 720 */ 1729, 1730, 1731, 1732, 742, 738, 1741, 1742, 1744, 1745, + /* 730 */ 1746, 1747, 2, 48, 46, 1753, 68, 730, 2106, 63, + /* 740 */ 12, 420, 2358, 1663, 2468, 1811, 1812, 1813, 1814, 2468, + /* 750 */ 2468, 2468, 2468, 2468, 2468, 712, 1748, 471, 1661, 783, + /* 760 */ 161, 160, 780, 779, 778, 158, 1881, 571, 2278, 2239, + /* 770 */ 61, 1916, 1811, 1812, 1813, 1814, 2358, 99, 664, 1779, + /* 780 */ 2334, 628, 455, 2376, 413, 1743, 2159, 2236, 717, 747, + /* 790 */ 1417, 1971, 414, 410, 2097, 2324, 640, 746, 1669, 2159, + /* 800 */ 171, 2157, 480, 2215, 2338, 1416, 386, 1611, 2108, 457, + /* 810 */ 453, 732, 274, 2420, 2157, 41, 40, 2376, 1421, 47, + /* 820 */ 45, 44, 43, 42, 841, 486, 2215, 49, 631, 2324, + /* 830 */ 465, 746, 464, 1420, 1669, 625, 2357, 1663, 63, 2395, + /* 840 */ 1673, 271, 114, 2359, 750, 2361, 2362, 745, 2340, 740, + /* 850 */ 435, 223, 1661, 309, 191, 434, 2448, 1720, 740, 35, + /* 860 */ 416, 2444, 463, 1750, 1751, 2083, 651, 467, 776, 1784, + /* 870 */ 2357, 533, 466, 2395, 225, 1693, 114, 2359, 750, 2361, + /* 880 */ 2362, 745, 72, 740, 697, 71, 2159, 2495, 2563, 202, + /* 890 */ 2448, 2543, 1669, 415, 416, 2444, 1842, 1723, 1733, 535, + /* 900 */ 667, 2157, 1688, 1835, 1749, 1752, 734, 2543, 2420, 696, + /* 910 */ 208, 111, 309, 1688, 2544, 698, 2081, 667, 841, 1664, + /* 920 */ 108, 1662, 316, 317, 2543, 2549, 208, 315, 41, 40, + /* 930 */ 2544, 698, 47, 45, 44, 43, 42, 514, 2215, 1758, + /* 940 */ 653, 2278, 2549, 208, 700, 1688, 1939, 2544, 698, 38, + /* 950 */ 325, 1667, 1668, 1720, 2091, 1722, 1725, 1726, 1727, 1728, + /* 960 */ 1729, 1730, 1731, 1732, 742, 738, 1741, 1742, 1744, 1745, + /* 970 */ 1746, 1747, 2, 48, 46, 2159, 2358, 730, 2106, 2190, + /* 980 */ 608, 420, 424, 1663, 607, 170, 230, 730, 2106, 747, + /* 990 */ 2157, 2502, 730, 2106, 730, 2106, 1748, 472, 1661, 2324, + /* 1000 */ 783, 161, 160, 780, 779, 778, 158, 488, 2358, 2548, + /* 1010 */ 691, 309, 503, 1664, 504, 1662, 2543, 2376, 709, 146, + /* 1020 */ 423, 747, 1938, 2515, 330, 1743, 426, 1854, 171, 2324, + /* 1030 */ 148, 746, 1861, 2419, 171, 2547, 2108, 2093, 1669, 2544, + /* 1040 */ 2545, 777, 2108, 652, 2150, 1667, 1668, 1862, 1688, 2376, + /* 1050 */ 3, 783, 161, 160, 780, 779, 778, 158, 1724, 14, + /* 1060 */ 13, 2324, 54, 746, 841, 730, 2106, 49, 2334, 1724, + /* 1070 */ 2357, 2153, 2154, 2395, 1824, 2324, 114, 2359, 750, 2361, + /* 1080 */ 2362, 745, 2343, 740, 2305, 580, 1937, 1860, 2563, 1936, + /* 1090 */ 2448, 713, 2338, 667, 416, 2444, 730, 2106, 600, 599, + /* 1100 */ 2543, 1724, 2357, 1750, 1751, 2395, 1691, 1935, 114, 2359, + /* 1110 */ 750, 2361, 2362, 745, 1721, 740, 505, 1934, 2549, 208, + /* 1120 */ 2563, 1933, 2448, 2544, 698, 1721, 416, 2444, 176, 2456, + /* 1130 */ 2457, 1932, 144, 2461, 730, 2106, 2340, 1723, 1733, 2324, + /* 1140 */ 498, 667, 2324, 2159, 1749, 1752, 740, 1309, 2543, 497, + /* 1150 */ 44, 43, 42, 1687, 2103, 730, 2106, 1721, 2158, 1664, + /* 1160 */ 2324, 1662, 1929, 730, 2106, 1791, 2549, 208, 730, 2106, + /* 1170 */ 2324, 2544, 698, 781, 2324, 279, 2150, 1928, 1329, 1330, + /* 1180 */ 1834, 1927, 1926, 287, 2324, 602, 601, 1925, 715, 1924, + /* 1190 */ 1923, 1667, 1668, 1720, 737, 1722, 1725, 1726, 1727, 1728, + /* 1200 */ 1729, 1730, 1731, 1732, 742, 738, 1741, 1742, 1744, 1745, + /* 1210 */ 1746, 1747, 2, 48, 46, 2324, 2358, 730, 2106, 730, + /* 1220 */ 2106, 420, 1922, 1663, 730, 2106, 730, 2106, 2287, 747, + /* 1230 */ 2324, 674, 730, 2106, 2324, 2324, 1748, 320, 1661, 727, + /* 1240 */ 2324, 2308, 2324, 2324, 728, 1921, 326, 76, 2358, 619, + /* 1250 */ 618, 2200, 427, 810, 808, 339, 782, 2376, 2136, 2150, + /* 1260 */ 1721, 747, 139, 2536, 307, 1743, 2084, 1946, 836, 2324, + /* 1270 */ 264, 746, 612, 262, 86, 2324, 266, 268, 1669, 265, + /* 1280 */ 267, 270, 278, 1980, 269, 643, 701, 642, 288, 2376, + /* 1290 */ 1978, 159, 442, 478, 1672, 159, 1400, 87, 2324, 152, + /* 1300 */ 50, 2324, 50, 746, 841, 626, 192, 15, 214, 704, + /* 1310 */ 2357, 1671, 629, 2395, 2345, 159, 114, 2359, 750, 2361, + /* 1320 */ 2362, 745, 50, 740, 1913, 1914, 314, 2089, 2563, 75, + /* 1330 */ 2448, 157, 100, 159, 416, 2444, 14, 13, 66, 50, + /* 1340 */ 50, 2110, 2357, 1750, 1751, 2395, 754, 284, 114, 2359, + /* 1350 */ 750, 2361, 2362, 745, 1769, 740, 157, 1360, 741, 2046, + /* 1360 */ 2563, 1931, 2448, 429, 428, 1627, 416, 2444, 2358, 1630, + /* 1370 */ 790, 2347, 180, 1677, 1866, 2508, 1865, 1723, 1733, 159, + /* 1380 */ 293, 747, 140, 302, 1749, 1752, 1748, 157, 1670, 714, + /* 1390 */ 303, 680, 791, 141, 1379, 710, 1580, 1361, 295, 1664, + /* 1400 */ 318, 1662, 2377, 722, 2043, 322, 2224, 1447, 2042, 2376, + /* 1410 */ 1962, 2498, 1785, 1734, 338, 1743, 1377, 677, 406, 684, + /* 1420 */ 1475, 2324, 403, 746, 719, 433, 1968, 660, 1669, 2225, + /* 1430 */ 1479, 1667, 1668, 1720, 2147, 1722, 1725, 1726, 1727, 1728, + /* 1440 */ 1729, 1730, 1731, 1732, 742, 738, 1741, 1742, 1744, 1745, + /* 1450 */ 1746, 1747, 2, 1486, 736, 2499, 1484, 1675, 2509, 692, + /* 1460 */ 693, 162, 2357, 305, 2068, 2395, 300, 308, 114, 2359, + /* 1470 */ 750, 2361, 2362, 745, 1674, 740, 5, 436, 441, 384, + /* 1480 */ 2563, 449, 2448, 450, 1696, 459, 416, 2444, 458, 215, + /* 1490 */ 216, 461, 218, 1604, 333, 1686, 475, 1687, 479, 229, + /* 1500 */ 481, 485, 487, 524, 513, 492, 506, 523, 2217, 515, + /* 1510 */ 525, 536, 537, 534, 234, 539, 236, 233, 542, 2358, + /* 1520 */ 540, 544, 1694, 559, 4, 560, 567, 570, 244, 92, + /* 1530 */ 1689, 568, 747, 572, 247, 1695, 1697, 573, 574, 576, + /* 1540 */ 1698, 2233, 582, 603, 605, 250, 2096, 645, 647, 1678, + /* 1550 */ 252, 1673, 2358, 93, 94, 702, 257, 632, 261, 116, + /* 1560 */ 2376, 633, 365, 2296, 2293, 747, 97, 2292, 280, 2092, + /* 1570 */ 153, 1690, 2324, 2279, 746, 263, 655, 164, 165, 654, + /* 1580 */ 705, 1681, 1683, 2094, 2090, 166, 167, 334, 285, 2358, + /* 1590 */ 662, 2514, 661, 2376, 659, 738, 1741, 1742, 1744, 1745, + /* 1600 */ 1746, 1747, 747, 671, 681, 2324, 720, 746, 2513, 8, + /* 1610 */ 2486, 690, 670, 2357, 183, 672, 2395, 290, 294, 114, + /* 1620 */ 2359, 750, 2361, 2362, 745, 656, 740, 292, 299, 296, + /* 1630 */ 2376, 2423, 283, 2448, 695, 669, 298, 416, 2444, 297, + /* 1640 */ 694, 706, 2324, 2467, 746, 407, 2357, 1691, 703, 2395, + /* 1650 */ 145, 1832, 114, 2359, 750, 2361, 2362, 745, 1830, 740, + /* 1660 */ 2464, 2358, 2566, 310, 2421, 195, 2448, 335, 718, 154, + /* 1670 */ 416, 2444, 2247, 2246, 747, 2245, 336, 723, 724, 155, + /* 1680 */ 412, 105, 337, 2357, 62, 301, 2395, 2429, 752, 114, + /* 1690 */ 2359, 750, 2361, 2362, 745, 107, 740, 2107, 1, 210, + /* 1700 */ 2151, 733, 2376, 2448, 2358, 340, 1284, 416, 2444, 328, + /* 1710 */ 835, 838, 840, 304, 2324, 349, 746, 747, 2542, 53, + /* 1720 */ 163, 363, 342, 353, 344, 364, 376, 2316, 2315, 2314, + /* 1730 */ 377, 81, 2309, 2358, 438, 439, 1654, 1655, 213, 2307, + /* 1740 */ 443, 445, 447, 446, 1653, 2376, 747, 2306, 385, 2304, + /* 1750 */ 452, 2303, 454, 2302, 456, 2357, 1643, 2324, 2395, 746, + /* 1760 */ 2283, 115, 2359, 750, 2361, 2362, 745, 217, 740, 2282, + /* 1770 */ 219, 1607, 82, 1606, 2376, 2448, 2260, 2259, 2258, 2447, + /* 1780 */ 2444, 468, 2257, 469, 2256, 2207, 2324, 473, 746, 1550, + /* 1790 */ 2199, 476, 477, 2196, 222, 2195, 2194, 85, 2357, 2193, + /* 1800 */ 2358, 2395, 2198, 2197, 115, 2359, 750, 2361, 2362, 745, + /* 1810 */ 224, 740, 2192, 744, 2191, 2189, 2188, 2187, 2448, 226, + /* 1820 */ 493, 2186, 735, 2444, 495, 2202, 2185, 748, 2184, 2358, + /* 1830 */ 2395, 2183, 2182, 115, 2359, 750, 2361, 2362, 745, 2181, + /* 1840 */ 740, 2376, 747, 2204, 2180, 2179, 2178, 2448, 527, 228, + /* 1850 */ 2170, 379, 2444, 2324, 2177, 746, 2176, 2175, 2174, 2173, + /* 1860 */ 2172, 2171, 2169, 91, 2168, 2167, 2203, 2201, 2166, 2165, + /* 1870 */ 2376, 2164, 232, 1556, 2163, 2162, 529, 2161, 2160, 373, + /* 1880 */ 2008, 2007, 2324, 374, 746, 1418, 235, 237, 2006, 1414, + /* 1890 */ 2004, 238, 1422, 2001, 2357, 547, 2000, 2395, 546, 1993, + /* 1900 */ 361, 2359, 750, 2361, 2362, 745, 743, 740, 731, 2413, + /* 1910 */ 545, 2358, 1982, 549, 551, 1957, 553, 1308, 1956, 557, + /* 1920 */ 190, 2281, 2277, 2357, 747, 555, 2395, 78, 2267, 177, + /* 1930 */ 2359, 750, 2361, 2362, 745, 550, 740, 554, 2344, 240, + /* 1940 */ 200, 2358, 2255, 242, 565, 251, 79, 249, 2254, 2231, + /* 1950 */ 254, 2085, 2376, 2003, 747, 1999, 583, 584, 585, 1997, + /* 1960 */ 587, 588, 589, 1353, 2324, 1995, 746, 591, 592, 593, + /* 1970 */ 1992, 595, 1977, 597, 1975, 668, 2505, 596, 1976, 2358, + /* 1980 */ 1974, 1953, 2376, 2087, 1491, 1490, 2086, 1404, 1990, 1403, + /* 1990 */ 807, 1401, 747, 1399, 2324, 1398, 746, 1397, 1396, 1395, + /* 2000 */ 809, 1392, 1981, 1391, 1390, 2357, 2358, 397, 2395, 260, + /* 2010 */ 1389, 178, 2359, 750, 2361, 2362, 745, 398, 740, 747, + /* 2020 */ 2376, 65, 627, 1979, 630, 399, 1952, 1951, 1950, 634, + /* 2030 */ 1949, 636, 2324, 1948, 746, 2357, 638, 117, 2395, 1641, + /* 2040 */ 2280, 115, 2359, 750, 2361, 2362, 745, 2376, 740, 2358, + /* 2050 */ 1637, 29, 404, 1639, 1617, 2448, 1636, 282, 2276, 2324, + /* 2060 */ 2445, 746, 747, 1615, 2358, 2266, 1613, 657, 2253, 699, + /* 2070 */ 2564, 2252, 2548, 2357, 69, 20, 2395, 747, 17, 177, + /* 2080 */ 2359, 750, 2361, 2362, 745, 31, 740, 57, 6, 58, + /* 2090 */ 2376, 658, 1592, 663, 673, 405, 1883, 289, 7, 169, + /* 2100 */ 2357, 675, 2324, 2395, 746, 2376, 362, 2359, 750, 2361, + /* 2110 */ 2362, 745, 291, 740, 286, 1591, 21, 2324, 22, 746, + /* 2120 */ 665, 2358, 1864, 194, 179, 205, 2506, 193, 32, 2345, + /* 2130 */ 33, 1853, 1825, 206, 747, 1827, 67, 80, 207, 23, + /* 2140 */ 24, 1823, 1903, 2357, 1904, 1898, 2395, 1897, 408, 362, + /* 2150 */ 2359, 750, 2361, 2362, 745, 1902, 740, 1901, 2357, 409, + /* 2160 */ 1808, 2395, 2376, 1807, 355, 2359, 750, 2361, 2362, 745, + /* 2170 */ 306, 740, 60, 185, 2324, 2251, 746, 2230, 101, 102, + /* 2180 */ 25, 2229, 313, 721, 1859, 196, 18, 319, 70, 2358, + /* 2190 */ 59, 103, 321, 104, 324, 26, 1760, 11, 1759, 108, + /* 2200 */ 13, 1679, 747, 1738, 186, 1770, 1736, 2358, 2398, 739, + /* 2210 */ 39, 1713, 1735, 197, 689, 2357, 1705, 749, 2395, 16, + /* 2220 */ 744, 178, 2359, 750, 2361, 2362, 745, 753, 740, 27, + /* 2230 */ 2376, 28, 751, 1476, 422, 411, 755, 757, 1473, 1472, + /* 2240 */ 758, 760, 2324, 1469, 746, 763, 761, 764, 2376, 1463, + /* 2250 */ 766, 1461, 767, 769, 770, 1467, 1466, 109, 327, 110, + /* 2260 */ 2324, 1485, 746, 77, 1481, 1465, 1351, 1386, 1412, 784, + /* 2270 */ 1464, 1383, 1382, 1381, 1380, 1378, 1376, 1375, 1374, 1411, + /* 2280 */ 2565, 211, 795, 2357, 2358, 797, 2395, 1372, 1371, 362, + /* 2290 */ 2359, 750, 2361, 2362, 745, 1370, 740, 747, 1369, 1368, + /* 2300 */ 1367, 2357, 1366, 1408, 2395, 1406, 1363, 361, 2359, 750, + /* 2310 */ 2361, 2362, 745, 1357, 740, 1362, 2414, 1359, 1358, 1356, + /* 2320 */ 1998, 817, 818, 1996, 821, 2376, 822, 819, 823, 1994, + /* 2330 */ 419, 825, 827, 1991, 826, 829, 1973, 2324, 831, 746, + /* 2340 */ 830, 833, 1297, 1947, 1285, 837, 331, 1665, 839, 1917, + /* 2350 */ 341, 842, 2358, 1917, 843, 1917, 1917, 1917, 1917, 1917, + /* 2360 */ 1917, 1917, 1917, 1917, 1917, 747, 1917, 1917, 1917, 1917, + /* 2370 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2357, 2358, + /* 2380 */ 1917, 2395, 1917, 1917, 362, 2359, 750, 2361, 2362, 745, + /* 2390 */ 1917, 740, 747, 2376, 1917, 2358, 1917, 1917, 421, 1917, + /* 2400 */ 1917, 1917, 1917, 1917, 1917, 2324, 1917, 746, 747, 1917, + /* 2410 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2420 */ 2376, 1917, 2358, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2430 */ 1917, 1917, 2324, 1917, 746, 747, 2376, 1917, 1917, 1917, + /* 2440 */ 1917, 1917, 1917, 1917, 1917, 1917, 2357, 1917, 2324, 2395, + /* 2450 */ 746, 1917, 362, 2359, 750, 2361, 2362, 745, 1917, 740, + /* 2460 */ 1917, 1917, 1917, 2376, 1917, 2358, 1917, 1917, 1917, 1917, + /* 2470 */ 1917, 1917, 1917, 644, 1917, 2324, 2395, 746, 747, 357, + /* 2480 */ 2359, 750, 2361, 2362, 745, 1917, 740, 1917, 1917, 2357, + /* 2490 */ 1917, 1917, 2395, 1917, 2358, 347, 2359, 750, 2361, 2362, + /* 2500 */ 745, 1917, 740, 1917, 1917, 1917, 2376, 747, 1917, 1917, + /* 2510 */ 1917, 1917, 1917, 1917, 1917, 1917, 2357, 1917, 2324, 2395, + /* 2520 */ 746, 1917, 345, 2359, 750, 2361, 2362, 745, 1917, 740, + /* 2530 */ 1917, 1917, 1917, 1917, 1917, 2376, 1917, 1917, 1917, 1917, + /* 2540 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2324, 1917, 746, + /* 2550 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2357, + /* 2560 */ 1917, 1917, 2395, 1917, 1917, 348, 2359, 750, 2361, 2362, + /* 2570 */ 745, 1917, 740, 1917, 2358, 1917, 1917, 1917, 1917, 1917, + /* 2580 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 747, 2357, 1917, + /* 2590 */ 2358, 2395, 1917, 1917, 354, 2359, 750, 2361, 2362, 745, + /* 2600 */ 1917, 740, 1917, 747, 1917, 1917, 1917, 1917, 2358, 1917, + /* 2610 */ 1917, 1917, 1917, 1917, 1917, 2376, 1917, 1917, 1917, 1917, + /* 2620 */ 1917, 747, 1917, 1917, 1917, 1917, 1917, 2324, 1917, 746, + /* 2630 */ 1917, 2376, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2640 */ 1917, 1917, 1917, 2324, 1917, 746, 1917, 1917, 1917, 2376, + /* 2650 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2660 */ 1917, 2324, 1917, 746, 1917, 1917, 1917, 1917, 2357, 1917, + /* 2670 */ 1917, 2395, 1917, 1917, 358, 2359, 750, 2361, 2362, 745, + /* 2680 */ 1917, 740, 1917, 1917, 2357, 2358, 1917, 2395, 1917, 1917, + /* 2690 */ 350, 2359, 750, 2361, 2362, 745, 1917, 740, 747, 1917, + /* 2700 */ 1917, 1917, 2357, 1917, 1917, 2395, 1917, 1917, 359, 2359, + /* 2710 */ 750, 2361, 2362, 745, 1917, 740, 1917, 1917, 1917, 1917, + /* 2720 */ 1917, 1917, 1917, 1917, 1917, 1917, 2376, 1917, 1917, 1917, + /* 2730 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2324, 1917, + /* 2740 */ 746, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2750 */ 1917, 1917, 2358, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2760 */ 1917, 1917, 1917, 1917, 1917, 747, 1917, 2358, 1917, 1917, + /* 2770 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2357, + /* 2780 */ 747, 1917, 2395, 1917, 1917, 351, 2359, 750, 2361, 2362, + /* 2790 */ 745, 1917, 740, 2376, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2800 */ 1917, 1917, 1917, 1917, 1917, 2324, 1917, 746, 2376, 1917, + /* 2810 */ 2358, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2820 */ 2324, 1917, 746, 747, 1917, 2358, 1917, 1917, 1917, 1917, + /* 2830 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 747, 1917, + /* 2840 */ 1917, 1917, 1917, 1917, 1917, 1917, 2357, 1917, 1917, 2395, + /* 2850 */ 1917, 2376, 360, 2359, 750, 2361, 2362, 745, 1917, 740, + /* 2860 */ 1917, 2357, 1917, 2324, 2395, 746, 2376, 352, 2359, 750, + /* 2870 */ 2361, 2362, 745, 1917, 740, 1917, 1917, 1917, 2324, 1917, + /* 2880 */ 746, 1917, 2358, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2890 */ 1917, 1917, 1917, 1917, 1917, 747, 1917, 1917, 1917, 1917, + /* 2900 */ 1917, 1917, 1917, 1917, 2357, 1917, 1917, 2395, 1917, 1917, + /* 2910 */ 366, 2359, 750, 2361, 2362, 745, 1917, 740, 1917, 2357, + /* 2920 */ 1917, 1917, 2395, 2376, 1917, 367, 2359, 750, 2361, 2362, + /* 2930 */ 745, 1917, 740, 1917, 1917, 2324, 1917, 746, 1917, 1917, + /* 2940 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2358, 1917, 1917, + /* 2950 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 2960 */ 747, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2358, 1917, + /* 2970 */ 1917, 1917, 1917, 1917, 1917, 1917, 2357, 1917, 1917, 2395, + /* 2980 */ 1917, 747, 2370, 2359, 750, 2361, 2362, 745, 2376, 740, + /* 2990 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3000 */ 2324, 1917, 746, 1917, 1917, 2358, 1917, 1917, 1917, 2376, + /* 3010 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 747, 1917, + /* 3020 */ 1917, 2324, 1917, 746, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3030 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3040 */ 1917, 2357, 1917, 1917, 2395, 1917, 2376, 2369, 2359, 750, + /* 3050 */ 2361, 2362, 745, 1917, 740, 1917, 1917, 1917, 2324, 1917, + /* 3060 */ 746, 1917, 2357, 1917, 1917, 2395, 1917, 1917, 2368, 2359, + /* 3070 */ 750, 2361, 2362, 745, 1917, 740, 1917, 1917, 1917, 1917, + /* 3080 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3090 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2358, 2357, + /* 3100 */ 1917, 1917, 2395, 1917, 1917, 381, 2359, 750, 2361, 2362, + /* 3110 */ 745, 747, 740, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3120 */ 1917, 1917, 1917, 1917, 1917, 2358, 1917, 1917, 1917, 1917, + /* 3130 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 747, 2376, + /* 3140 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3150 */ 1917, 2324, 1917, 746, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3160 */ 1917, 1917, 1917, 1917, 1917, 1917, 2376, 1917, 2358, 1917, + /* 3170 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2324, 1917, + /* 3180 */ 746, 747, 1917, 2358, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3190 */ 1917, 1917, 2357, 1917, 1917, 2395, 747, 1917, 382, 2359, + /* 3200 */ 750, 2361, 2362, 745, 1917, 740, 1917, 1917, 1917, 2376, + /* 3210 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 2357, + /* 3220 */ 1917, 2324, 2395, 746, 2376, 378, 2359, 750, 2361, 2362, + /* 3230 */ 745, 1917, 740, 1917, 1917, 1917, 2324, 1917, 746, 1917, + /* 3240 */ 2358, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3250 */ 1917, 1917, 1917, 747, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3260 */ 1917, 1917, 2357, 1917, 1917, 2395, 1917, 1917, 383, 2359, + /* 3270 */ 750, 2361, 2362, 745, 1917, 740, 1917, 748, 1917, 1917, + /* 3280 */ 2395, 2376, 1917, 357, 2359, 750, 2361, 2362, 745, 1917, + /* 3290 */ 740, 1917, 1917, 2324, 1917, 746, 1917, 1917, 1917, 1917, + /* 3300 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3310 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3320 */ 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, + /* 3330 */ 1917, 1917, 1917, 1917, 2357, 1917, 1917, 2395, 1917, 1917, + /* 3340 */ 356, 2359, 750, 2361, 2362, 745, 1917, 740, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 366, 401, 392, 369, 370, 367, 371, 372, 485, 371, @@ -661,13 +661,13 @@ static const YYCODETYPE yy_lookahead[] = { /* 980 */ 135, 20, 407, 22, 139, 178, 420, 371, 372, 372, /* 990 */ 415, 374, 371, 372, 371, 372, 35, 391, 37, 412, /* 1000 */ 135, 136, 137, 138, 139, 140, 141, 391, 359, 485, - /* 1010 */ 37, 279, 391, 198, 391, 200, 492, 400, 371, 372, + /* 1010 */ 13, 279, 391, 198, 391, 200, 492, 400, 371, 372, /* 1020 */ 392, 372, 359, 374, 34, 64, 392, 107, 400, 412, /* 1030 */ 469, 414, 22, 472, 400, 511, 408, 401, 77, 515, /* 1040 */ 516, 409, 408, 435, 412, 230, 231, 37, 20, 400, - /* 1050 */ 77, 135, 136, 137, 138, 139, 140, 141, 176, 1, - /* 1060 */ 2, 412, 33, 414, 103, 371, 372, 106, 388, 176, - /* 1070 */ 453, 413, 414, 456, 45, 412, 459, 460, 461, 462, + /* 1050 */ 33, 135, 136, 137, 138, 139, 140, 141, 176, 1, + /* 1060 */ 2, 412, 45, 414, 103, 371, 372, 106, 388, 176, + /* 1070 */ 453, 413, 414, 456, 77, 412, 459, 460, 461, 462, /* 1080 */ 463, 464, 402, 466, 0, 391, 359, 77, 471, 359, /* 1090 */ 473, 435, 412, 485, 477, 478, 371, 372, 376, 377, /* 1100 */ 492, 176, 453, 142, 143, 456, 20, 359, 459, 460, @@ -706,10 +706,10 @@ static const YYCODETYPE yy_lookahead[] = { /* 1430 */ 107, 230, 231, 232, 411, 234, 235, 236, 237, 238, /* 1440 */ 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, /* 1450 */ 249, 250, 251, 107, 103, 425, 107, 200, 425, 491, - /* 1460 */ 491, 107, 453, 512, 390, 456, 479, 282, 459, 460, - /* 1470 */ 461, 462, 463, 464, 200, 466, 494, 436, 51, 455, - /* 1480 */ 471, 42, 473, 20, 447, 454, 477, 478, 213, 380, - /* 1490 */ 452, 447, 380, 196, 438, 20, 371, 20, 372, 45, + /* 1460 */ 491, 107, 453, 512, 390, 456, 479, 494, 459, 460, + /* 1470 */ 461, 462, 463, 464, 200, 466, 282, 436, 51, 455, + /* 1480 */ 471, 42, 473, 454, 20, 447, 477, 478, 213, 452, + /* 1490 */ 380, 447, 380, 196, 438, 20, 371, 20, 372, 45, /* 1500 */ 421, 372, 421, 175, 372, 418, 371, 418, 371, 421, /* 1510 */ 418, 104, 384, 102, 371, 101, 371, 383, 371, 359, /* 1520 */ 382, 371, 20, 364, 50, 368, 364, 447, 380, 380, @@ -718,31 +718,31 @@ static const YYCODETYPE yy_lookahead[] = { /* 1550 */ 380, 200, 359, 380, 380, 302, 380, 362, 400, 371, /* 1560 */ 400, 362, 364, 412, 412, 372, 106, 412, 378, 400, /* 1570 */ 449, 20, 412, 446, 414, 400, 204, 400, 400, 203, - /* 1580 */ 304, 230, 231, 400, 400, 443, 400, 400, 447, 359, - /* 1590 */ 378, 371, 436, 400, 414, 244, 245, 246, 247, 248, - /* 1600 */ 249, 250, 372, 412, 289, 412, 500, 414, 500, 288, - /* 1610 */ 503, 297, 189, 453, 500, 299, 456, 502, 498, 459, + /* 1580 */ 304, 230, 231, 400, 400, 400, 400, 447, 378, 359, + /* 1590 */ 371, 500, 436, 400, 414, 244, 245, 246, 247, 248, + /* 1600 */ 249, 250, 372, 412, 289, 412, 288, 414, 500, 297, + /* 1610 */ 503, 189, 298, 453, 500, 299, 456, 430, 502, 459, /* 1620 */ 460, 461, 462, 463, 464, 444, 466, 430, 436, 499, - /* 1630 */ 400, 471, 430, 473, 298, 283, 497, 477, 478, 278, + /* 1630 */ 400, 471, 443, 473, 278, 283, 497, 477, 478, 498, /* 1640 */ 277, 303, 412, 490, 414, 306, 453, 20, 301, 456, /* 1650 */ 372, 116, 459, 460, 461, 462, 463, 464, 280, 466, - /* 1660 */ 520, 359, 458, 378, 471, 373, 473, 430, 412, 378, - /* 1670 */ 477, 478, 412, 412, 372, 412, 430, 181, 489, 378, - /* 1680 */ 412, 426, 396, 453, 372, 106, 456, 493, 378, 459, - /* 1690 */ 460, 461, 462, 463, 464, 476, 466, 106, 495, 404, + /* 1660 */ 458, 359, 520, 378, 471, 373, 473, 430, 412, 378, + /* 1670 */ 477, 478, 412, 412, 372, 412, 430, 181, 426, 378, + /* 1680 */ 412, 378, 396, 453, 106, 489, 456, 476, 404, 459, + /* 1690 */ 460, 461, 462, 463, 464, 106, 466, 372, 495, 493, /* 1700 */ 412, 471, 400, 473, 359, 371, 22, 477, 478, 378, - /* 1710 */ 514, 361, 38, 513, 412, 431, 414, 372, 365, 364, - /* 1720 */ 439, 394, 379, 394, 357, 448, 394, 0, 0, 0, + /* 1710 */ 38, 361, 364, 513, 412, 394, 414, 372, 514, 439, + /* 1720 */ 365, 394, 379, 394, 357, 448, 431, 0, 0, 0, /* 1730 */ 431, 45, 0, 359, 37, 223, 37, 37, 37, 0, /* 1740 */ 223, 37, 223, 37, 37, 400, 372, 0, 223, 0, /* 1750 */ 37, 0, 22, 0, 37, 453, 218, 412, 456, 414, /* 1760 */ 0, 459, 460, 461, 462, 463, 464, 206, 466, 0, /* 1770 */ 206, 200, 207, 198, 400, 473, 0, 0, 0, 477, - /* 1780 */ 478, 194, 193, 0, 0, 147, 412, 49, 414, 49, + /* 1780 */ 478, 194, 0, 193, 0, 147, 412, 49, 414, 49, /* 1790 */ 0, 37, 51, 0, 49, 0, 0, 45, 453, 0, /* 1800 */ 359, 456, 0, 0, 459, 460, 461, 462, 463, 464, /* 1810 */ 49, 466, 0, 372, 0, 0, 0, 0, 473, 161, - /* 1820 */ 0, 161, 477, 478, 37, 0, 0, 453, 0, 359, + /* 1820 */ 37, 0, 477, 478, 161, 0, 0, 453, 0, 359, /* 1830 */ 456, 0, 0, 459, 460, 461, 462, 463, 464, 0, /* 1840 */ 466, 400, 372, 0, 0, 0, 0, 473, 146, 49, /* 1850 */ 0, 477, 478, 412, 0, 414, 0, 0, 0, 0, @@ -773,29 +773,29 @@ static const YYCODETYPE yy_lookahead[] = { /* 2100 */ 453, 102, 412, 456, 414, 400, 459, 460, 461, 462, /* 2110 */ 463, 464, 107, 466, 181, 178, 33, 412, 33, 414, /* 2120 */ 185, 359, 107, 33, 106, 49, 506, 106, 106, 49, - /* 2130 */ 33, 107, 107, 33, 372, 37, 3, 106, 106, 284, + /* 2130 */ 33, 107, 77, 33, 372, 37, 3, 106, 106, 284, /* 2140 */ 33, 107, 107, 453, 107, 37, 456, 37, 37, 459, /* 2150 */ 460, 461, 462, 463, 464, 37, 466, 37, 453, 37, - /* 2160 */ 107, 456, 400, 49, 459, 460, 461, 462, 463, 464, - /* 2170 */ 33, 466, 49, 0, 412, 0, 414, 107, 106, 106, - /* 2180 */ 42, 107, 182, 106, 106, 106, 284, 0, 42, 359, - /* 2190 */ 266, 180, 106, 49, 33, 104, 115, 253, 104, 2, - /* 2200 */ 22, 230, 372, 107, 49, 106, 49, 359, 106, 233, - /* 2210 */ 107, 106, 22, 37, 509, 453, 107, 116, 456, 106, - /* 2220 */ 372, 459, 460, 461, 462, 463, 464, 106, 466, 37, - /* 2230 */ 400, 107, 106, 37, 107, 405, 106, 37, 107, 107, - /* 2240 */ 106, 37, 412, 107, 414, 106, 106, 37, 400, 107, - /* 2250 */ 107, 106, 127, 37, 106, 127, 127, 106, 33, 106, - /* 2260 */ 412, 37, 414, 22, 106, 71, 37, 37, 127, 70, - /* 2270 */ 37, 37, 37, 37, 37, 37, 37, 100, 77, 77, - /* 2280 */ 518, 100, 37, 453, 359, 33, 456, 37, 37, 459, - /* 2290 */ 460, 461, 462, 463, 464, 22, 466, 372, 37, 37, + /* 2160 */ 107, 456, 400, 107, 459, 460, 461, 462, 463, 464, + /* 2170 */ 49, 466, 33, 49, 412, 0, 414, 0, 106, 42, + /* 2180 */ 106, 0, 107, 182, 107, 106, 284, 106, 106, 359, + /* 2190 */ 266, 42, 180, 106, 49, 33, 104, 253, 104, 115, + /* 2200 */ 2, 22, 372, 107, 49, 230, 107, 359, 106, 106, + /* 2210 */ 106, 22, 107, 49, 509, 453, 107, 233, 456, 106, + /* 2220 */ 372, 459, 460, 461, 462, 463, 464, 37, 466, 106, + /* 2230 */ 400, 106, 116, 107, 37, 405, 106, 37, 107, 107, + /* 2240 */ 106, 37, 412, 107, 414, 37, 106, 106, 400, 107, + /* 2250 */ 37, 107, 106, 37, 106, 127, 127, 106, 33, 106, + /* 2260 */ 412, 37, 414, 106, 22, 127, 71, 37, 77, 70, + /* 2270 */ 127, 37, 37, 37, 37, 37, 37, 37, 37, 77, + /* 2280 */ 518, 33, 100, 453, 359, 100, 456, 37, 37, 459, + /* 2290 */ 460, 461, 462, 463, 464, 37, 466, 372, 22, 37, /* 2300 */ 37, 453, 37, 77, 456, 37, 37, 459, 460, 461, - /* 2310 */ 462, 463, 464, 37, 466, 37, 468, 22, 37, 0, - /* 2320 */ 37, 51, 42, 0, 37, 400, 51, 42, 0, 37, - /* 2330 */ 405, 42, 0, 51, 37, 51, 42, 412, 0, 414, - /* 2340 */ 37, 37, 0, 22, 33, 521, 22, 22, 21, 521, - /* 2350 */ 20, 22, 359, 521, 21, 521, 521, 521, 521, 521, + /* 2310 */ 462, 463, 464, 22, 466, 37, 468, 37, 37, 37, + /* 2320 */ 0, 37, 51, 0, 37, 400, 51, 42, 42, 0, + /* 2330 */ 405, 37, 42, 0, 51, 37, 0, 412, 42, 414, + /* 2340 */ 51, 37, 37, 0, 22, 33, 22, 22, 21, 521, + /* 2350 */ 22, 21, 359, 521, 20, 521, 521, 521, 521, 521, /* 2360 */ 521, 521, 521, 521, 521, 372, 521, 521, 521, 521, /* 2370 */ 521, 521, 521, 521, 521, 521, 521, 521, 453, 359, /* 2380 */ 521, 456, 521, 521, 459, 460, 461, 462, 463, 464, @@ -932,9 +932,9 @@ static const YYCODETYPE yy_lookahead[] = { /* 3690 */ 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, /* 3700 */ 356, 356, 356, 356, }; -#define YY_SHIFT_COUNT (843) +#define YY_SHIFT_COUNT (844) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (2342) +#define YY_SHIFT_MAX (2343) static const unsigned short int yy_shift_ofst[] = { /* 0 */ 391, 0, 240, 0, 481, 481, 481, 481, 481, 481, /* 10 */ 481, 481, 481, 481, 481, 481, 721, 961, 961, 1201, @@ -956,20 +956,20 @@ static const unsigned short int yy_shift_ofst[] = { /* 170 */ 242, 242, 504, 215, 21, 478, 478, 46, 15, 311, /* 180 */ 52, 110, 281, 261, 505, 882, 925, 640, 640, 295, /* 190 */ 171, 430, 1010, 1010, 1010, 592, 1010, 893, 414, 643, - /* 200 */ 1133, 845, 605, 643, 643, 1028, 973, 973, 644, 1029, - /* 210 */ 899, 485, 1185, 1427, 1439, 1463, 1275, 438, 1463, 438, + /* 200 */ 1133, 845, 605, 643, 643, 1028, 997, 997, 644, 1017, + /* 210 */ 899, 485, 1194, 1427, 1439, 1464, 1275, 438, 1464, 438, /* 220 */ 1297, 1475, 1477, 1454, 1477, 1454, 1328, 1475, 1477, 1475, /* 230 */ 1454, 1328, 1328, 1407, 1411, 1475, 1414, 1475, 1475, 1475, - /* 240 */ 1502, 1474, 1502, 1474, 1463, 438, 438, 1510, 438, 1515, + /* 240 */ 1502, 1474, 1502, 1474, 1464, 438, 438, 1510, 438, 1515, /* 250 */ 1516, 438, 1515, 438, 1520, 438, 438, 1475, 438, 1502, /* 260 */ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* 270 */ 58, 1475, 990, 990, 1502, 757, 757, 757, 1330, 1460, - /* 280 */ 1463, 483, 1551, 1372, 1376, 1510, 483, 1185, 1475, 757, - /* 290 */ 1315, 1321, 1315, 1321, 1314, 1423, 1315, 1316, 1336, 1352, - /* 300 */ 1185, 1361, 1363, 1339, 1338, 1347, 1477, 1627, 1535, 1378, - /* 310 */ 1515, 483, 483, 1321, 757, 757, 757, 757, 1321, 757, - /* 320 */ 1496, 483, 752, 483, 1477, 1579, 1591, 757, 1475, 483, - /* 330 */ 1684, 1674, 1502, 3348, 3348, 3348, 3348, 3348, 3348, 3348, + /* 280 */ 1464, 483, 1551, 1372, 1376, 1510, 483, 1194, 1475, 757, + /* 290 */ 1315, 1318, 1315, 1318, 1312, 1422, 1315, 1316, 1314, 1352, + /* 300 */ 1194, 1356, 1363, 1339, 1338, 1347, 1477, 1627, 1535, 1378, + /* 310 */ 1515, 483, 483, 1318, 757, 757, 757, 757, 1318, 757, + /* 320 */ 1496, 483, 752, 483, 1477, 1578, 1589, 757, 1475, 483, + /* 330 */ 1684, 1672, 1502, 3348, 3348, 3348, 3348, 3348, 3348, 3348, /* 340 */ 3348, 3348, 36, 150, 63, 659, 777, 59, 920, 865, /* 350 */ 413, 613, 807, 916, 674, 674, 674, 674, 674, 674, /* 360 */ 674, 674, 674, 624, 363, 62, 693, 693, 403, 409, @@ -983,9 +983,9 @@ static const unsigned short int yy_shift_ofst[] = { /* 440 */ 1512, 1699, 1700, 1701, 1517, 1739, 1704, 1706, 1519, 1707, /* 450 */ 1747, 1525, 1749, 1713, 1751, 1730, 1753, 1717, 1538, 1760, /* 460 */ 1561, 1769, 1564, 1565, 1571, 1575, 1776, 1777, 1778, 1587, - /* 470 */ 1589, 1783, 1784, 1638, 1738, 1740, 1790, 1754, 1741, 1793, + /* 470 */ 1590, 1782, 1784, 1638, 1738, 1740, 1790, 1754, 1741, 1793, /* 480 */ 1745, 1795, 1752, 1796, 1799, 1802, 1761, 1803, 1812, 1814, - /* 490 */ 1815, 1816, 1817, 1658, 1787, 1820, 1660, 1825, 1826, 1828, + /* 490 */ 1815, 1816, 1817, 1658, 1783, 1821, 1663, 1825, 1826, 1828, /* 500 */ 1831, 1832, 1839, 1843, 1844, 1845, 1846, 1854, 1856, 1857, /* 510 */ 1858, 1859, 1860, 1861, 1800, 1850, 1818, 1862, 1864, 1865, /* 520 */ 1866, 1867, 1868, 1869, 1851, 1871, 1725, 1874, 1702, 1875, @@ -1005,22 +1005,22 @@ static const unsigned short int yy_shift_ofst[] = { /* 660 */ 1933, 2068, 2071, 1914, 1908, 1937, 1935, 2069, 2042, 1794, /* 670 */ 1979, 1989, 1991, 2038, 1990, 2048, 1999, 2005, 2083, 2085, /* 680 */ 2015, 2018, 2021, 2022, 2024, 2090, 2076, 2080, 2031, 2097, - /* 690 */ 1855, 2025, 2100, 2032, 2098, 2034, 2035, 2133, 2107, 1902, - /* 700 */ 2108, 2110, 2111, 2118, 2120, 2122, 2037, 2053, 2114, 1924, - /* 710 */ 2137, 2123, 2173, 2175, 2072, 2138, 2073, 2070, 2074, 2077, - /* 720 */ 2078, 2000, 2079, 2187, 2146, 2011, 2086, 2081, 1889, 2144, - /* 730 */ 2161, 2091, 1944, 2094, 2197, 2178, 1971, 2099, 2096, 2102, - /* 740 */ 2103, 2105, 2109, 2155, 2113, 2121, 2157, 2124, 2190, 1976, - /* 750 */ 2126, 2101, 2127, 2176, 2192, 2130, 2131, 2196, 2134, 2132, - /* 760 */ 2200, 2139, 2136, 2204, 2140, 2142, 2210, 2145, 2143, 2216, - /* 770 */ 2148, 2125, 2128, 2129, 2141, 2151, 2225, 2153, 2224, 2158, - /* 780 */ 2225, 2225, 2241, 2194, 2199, 2229, 2230, 2233, 2234, 2235, - /* 790 */ 2236, 2237, 2238, 2239, 2201, 2177, 2202, 2181, 2252, 2245, - /* 800 */ 2250, 2251, 2273, 2261, 2262, 2263, 2226, 1957, 2265, 1967, - /* 810 */ 2268, 2269, 2276, 2278, 2295, 2281, 2319, 2283, 2270, 2280, - /* 820 */ 2323, 2287, 2275, 2285, 2328, 2292, 2282, 2289, 2332, 2297, - /* 830 */ 2284, 2294, 2338, 2303, 2304, 2342, 2321, 2311, 2324, 2327, - /* 840 */ 2325, 2329, 2333, 2330, + /* 690 */ 1855, 2055, 2034, 2100, 2032, 2098, 2035, 2037, 2133, 2107, + /* 700 */ 1902, 2108, 2110, 2111, 2118, 2120, 2122, 2053, 2056, 2121, + /* 710 */ 1924, 2139, 2124, 2175, 2177, 2072, 2137, 2074, 2075, 2077, + /* 720 */ 2079, 2081, 2001, 2082, 2181, 2149, 2012, 2087, 2084, 1889, + /* 730 */ 2145, 2162, 2092, 1944, 2094, 2198, 2179, 1975, 2102, 2096, + /* 740 */ 2103, 2099, 2104, 2105, 2155, 2113, 2123, 2164, 2109, 2189, + /* 750 */ 1984, 2125, 2116, 2126, 2190, 2197, 2130, 2131, 2200, 2134, + /* 760 */ 2132, 2204, 2140, 2136, 2208, 2141, 2142, 2213, 2146, 2144, + /* 770 */ 2216, 2148, 2128, 2129, 2138, 2143, 2151, 2225, 2153, 2224, + /* 780 */ 2157, 2225, 2225, 2242, 2195, 2199, 2230, 2234, 2235, 2236, + /* 790 */ 2237, 2238, 2239, 2240, 2241, 2191, 2182, 2202, 2185, 2248, + /* 800 */ 2250, 2251, 2258, 2276, 2262, 2263, 2265, 2226, 1957, 2268, + /* 810 */ 1967, 2269, 2278, 2280, 2281, 2291, 2282, 2320, 2284, 2271, + /* 820 */ 2285, 2323, 2287, 2275, 2286, 2329, 2294, 2283, 2290, 2333, + /* 830 */ 2298, 2289, 2296, 2336, 2304, 2305, 2343, 2322, 2312, 2324, + /* 840 */ 2327, 2325, 2328, 2330, 2334, }; #define YY_REDUCE_COUNT (341) #define YY_REDUCE_MIN (-477) @@ -1047,107 +1047,107 @@ static const short yy_reduce_ofst[] = { /* 180 */ 907, 885, 1018, 897, 885, 1002, 1002, 1016, 1020, 981, /* 190 */ 1040, 986, 910, 911, 912, 988, 917, 1002, 1050, 1004, /* 200 */ 1054, 1023, 985, 1030, 1033, 1002, 968, 969, 951, 987, - /* 210 */ 982, 1074, 1041, 1024, 1031, 1037, 1038, 1109, 1044, 1112, + /* 210 */ 973, 1074, 1041, 1024, 1029, 1038, 1037, 1110, 1044, 1112, /* 220 */ 1056, 1125, 1126, 1079, 1129, 1081, 1087, 1135, 1132, 1137, /* 230 */ 1088, 1089, 1092, 1128, 1134, 1143, 1138, 1145, 1147, 1150, /* 240 */ 1159, 1157, 1162, 1163, 1080, 1148, 1149, 1119, 1154, 1164, /* 250 */ 1101, 1165, 1166, 1170, 1113, 1173, 1174, 1171, 1176, 1179, - /* 260 */ 1144, 1146, 1158, 1169, 1175, 1177, 1178, 1183, 1184, 1186, - /* 270 */ 1187, 1188, 1195, 1199, 1198, 1151, 1152, 1155, 1097, 1121, - /* 280 */ 1141, 1190, 1127, 1181, 1142, 1180, 1212, 1156, 1220, 1191, - /* 290 */ 1106, 1197, 1108, 1202, 1107, 1115, 1114, 1130, 1120, 1139, - /* 300 */ 1192, 1153, 1189, 1140, 1196, 1200, 1278, 1204, 1203, 1194, + /* 260 */ 1144, 1146, 1158, 1169, 1175, 1177, 1178, 1183, 1184, 1185, + /* 270 */ 1186, 1188, 1195, 1199, 1198, 1151, 1152, 1155, 1097, 1121, + /* 280 */ 1140, 1190, 1127, 1181, 1189, 1180, 1210, 1156, 1219, 1191, + /* 290 */ 1091, 1187, 1108, 1197, 1107, 1116, 1114, 1130, 1141, 1139, + /* 300 */ 1192, 1153, 1196, 1142, 1204, 1200, 1278, 1202, 1203, 1206, /* 310 */ 1292, 1285, 1291, 1237, 1256, 1260, 1261, 1263, 1246, 1268, - /* 320 */ 1255, 1301, 1286, 1310, 1312, 1219, 1295, 1288, 1334, 1331, - /* 330 */ 1350, 1353, 1355, 1281, 1277, 1284, 1299, 1327, 1329, 1332, + /* 320 */ 1252, 1301, 1286, 1303, 1325, 1211, 1284, 1288, 1334, 1331, + /* 330 */ 1350, 1355, 1348, 1280, 1277, 1295, 1299, 1321, 1327, 1329, /* 340 */ 1343, 1367, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 10 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 20 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 30 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 40 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 50 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 60 */ 1914, 2247, 1914, 1914, 2210, 1914, 1914, 1914, 1914, 1914, - /* 70 */ 1914, 1914, 1914, 1914, 1914, 1914, 2217, 1914, 1914, 1914, - /* 80 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 90 */ 1914, 1914, 1914, 1914, 1914, 1914, 2011, 1914, 1914, 1914, - /* 100 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 110 */ 1914, 1914, 1914, 2009, 2449, 1914, 1914, 1914, 1914, 1914, - /* 120 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 130 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2461, 1914, - /* 140 */ 1914, 1985, 1985, 1914, 2461, 2461, 2461, 2009, 2421, 2421, - /* 150 */ 1914, 1914, 2011, 2285, 1914, 1914, 1914, 1914, 1914, 1914, - /* 160 */ 1914, 1914, 2134, 1944, 1914, 1914, 1914, 1914, 2158, 1914, - /* 170 */ 1914, 1914, 2273, 1914, 1914, 2453, 2454, 2506, 2566, 1914, - /* 180 */ 2472, 2467, 1914, 2509, 2467, 1914, 1914, 1914, 1914, 2222, - /* 190 */ 1914, 2496, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 200 */ 1914, 2087, 2267, 1914, 1914, 1914, 1914, 1914, 2550, 2451, - /* 210 */ 2490, 1914, 2500, 1914, 2309, 1914, 2299, 2011, 1914, 2011, - /* 220 */ 2260, 2205, 1914, 2215, 1914, 2215, 2212, 1914, 1914, 1914, - /* 230 */ 2215, 2212, 2212, 2076, 2072, 1914, 2070, 1914, 1914, 1914, - /* 240 */ 1914, 1969, 1914, 1969, 1914, 2011, 2011, 1914, 2011, 1914, - /* 250 */ 1914, 2011, 1914, 2011, 1914, 2011, 2011, 1914, 2011, 1914, - /* 260 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 270 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2297, 2283, - /* 280 */ 1914, 2009, 1914, 2271, 2269, 1914, 2009, 2500, 1914, 1914, - /* 290 */ 2520, 2515, 2520, 2515, 2534, 2530, 2520, 2539, 2536, 2502, - /* 300 */ 2500, 2483, 2479, 2569, 2556, 2552, 1914, 1914, 2488, 2486, - /* 310 */ 1914, 2009, 2009, 2515, 1914, 1914, 1914, 1914, 2515, 1914, - /* 320 */ 1914, 2009, 1914, 2009, 1914, 1914, 2103, 1914, 1914, 2009, - /* 330 */ 1914, 1953, 1914, 2262, 2288, 2243, 2243, 2137, 2137, 2137, - /* 340 */ 2012, 1919, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 350 */ 1914, 1914, 1914, 1914, 2533, 2532, 2374, 1914, 2425, 2424, - /* 360 */ 2423, 2414, 2373, 2099, 1914, 1914, 2372, 2371, 1914, 1914, - /* 370 */ 1914, 1914, 1914, 1914, 1914, 1914, 2234, 2233, 2365, 1914, - /* 380 */ 1914, 2366, 2364, 2363, 1914, 1914, 1914, 1914, 1914, 1914, - /* 390 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 400 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2553, 2557, - /* 410 */ 1914, 1914, 1914, 1914, 1914, 1914, 2450, 1914, 1914, 1914, - /* 420 */ 2345, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 430 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 440 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 450 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 460 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 470 */ 1914, 1914, 1914, 2211, 1914, 1914, 1914, 1914, 1914, 1914, - /* 480 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 490 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 500 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 510 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 520 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 530 */ 2226, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 540 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 550 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 560 */ 1914, 1914, 1958, 2352, 1914, 1914, 1914, 1914, 1914, 1914, - /* 570 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2355, 1914, 1914, - /* 580 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 590 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 600 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 610 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2051, 2050, - /* 620 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 630 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 640 */ 1914, 1914, 1914, 1914, 2356, 1914, 1914, 1914, 1914, 1914, - /* 650 */ 2347, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 660 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2549, 2503, 1914, - /* 670 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 680 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2345, 1914, 2531, - /* 690 */ 1914, 1914, 1914, 1914, 1914, 1914, 2547, 1914, 2551, 1914, - /* 700 */ 1914, 1914, 1914, 1914, 1914, 1914, 2460, 2456, 1914, 1914, - /* 710 */ 2452, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 720 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2344, 1914, - /* 730 */ 2411, 1914, 1914, 1914, 2445, 1914, 1914, 2396, 1914, 1914, - /* 740 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2356, 1914, 2359, - /* 750 */ 1914, 1914, 1914, 1914, 1914, 2131, 1914, 1914, 1914, 1914, - /* 760 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 770 */ 1914, 2115, 2113, 2112, 2111, 1914, 2144, 1914, 1914, 1914, - /* 780 */ 2140, 2139, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 790 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2030, 1914, - /* 800 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 2022, 1914, 2021, - /* 810 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 820 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, - /* 830 */ 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1943, 1914, 1914, - /* 840 */ 1914, 1914, 1914, 1914, + /* 0 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 10 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 20 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 30 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 40 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 50 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 60 */ 1915, 2248, 1915, 1915, 2211, 1915, 1915, 1915, 1915, 1915, + /* 70 */ 1915, 1915, 1915, 1915, 1915, 1915, 2218, 1915, 1915, 1915, + /* 80 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 90 */ 1915, 1915, 1915, 1915, 1915, 1915, 2012, 1915, 1915, 1915, + /* 100 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 110 */ 1915, 1915, 1915, 2010, 2450, 1915, 1915, 1915, 1915, 1915, + /* 120 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 130 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2462, 1915, + /* 140 */ 1915, 1986, 1986, 1915, 2462, 2462, 2462, 2010, 2422, 2422, + /* 150 */ 1915, 1915, 2012, 2286, 1915, 1915, 1915, 1915, 1915, 1915, + /* 160 */ 1915, 1915, 2135, 1945, 1915, 1915, 1915, 1915, 2159, 1915, + /* 170 */ 1915, 1915, 2274, 1915, 1915, 2454, 2455, 2507, 2567, 1915, + /* 180 */ 2473, 2468, 1915, 2510, 2468, 1915, 1915, 1915, 1915, 2223, + /* 190 */ 1915, 2497, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 200 */ 1915, 2088, 2268, 1915, 1915, 1915, 1915, 1915, 2551, 2452, + /* 210 */ 2491, 1915, 2501, 1915, 2310, 1915, 2300, 2012, 1915, 2012, + /* 220 */ 2261, 2206, 1915, 2216, 1915, 2216, 2213, 1915, 1915, 1915, + /* 230 */ 2216, 2213, 2213, 2077, 2073, 1915, 2071, 1915, 1915, 1915, + /* 240 */ 1915, 1970, 1915, 1970, 1915, 2012, 2012, 1915, 2012, 1915, + /* 250 */ 1915, 2012, 1915, 2012, 1915, 2012, 2012, 1915, 2012, 1915, + /* 260 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 270 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2298, 2284, + /* 280 */ 1915, 2010, 1915, 2272, 2270, 1915, 2010, 2501, 1915, 1915, + /* 290 */ 2521, 2516, 2521, 2516, 2535, 2531, 2521, 2540, 2537, 2503, + /* 300 */ 2501, 2484, 2480, 2570, 2557, 2553, 1915, 1915, 2489, 2487, + /* 310 */ 1915, 2010, 2010, 2516, 1915, 1915, 1915, 1915, 2516, 1915, + /* 320 */ 1915, 2010, 1915, 2010, 1915, 1915, 2104, 1915, 1915, 2010, + /* 330 */ 1915, 1954, 1915, 2263, 2289, 2244, 2244, 2138, 2138, 2138, + /* 340 */ 2013, 1920, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 350 */ 1915, 1915, 1915, 1915, 2534, 2533, 2375, 1915, 2426, 2425, + /* 360 */ 2424, 2415, 2374, 2100, 1915, 1915, 2373, 2372, 1915, 1915, + /* 370 */ 1915, 1915, 1915, 1915, 1915, 1915, 2235, 2234, 2366, 1915, + /* 380 */ 1915, 2367, 2365, 2364, 1915, 1915, 1915, 1915, 1915, 1915, + /* 390 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 400 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2554, 2558, + /* 410 */ 1915, 1915, 1915, 1915, 1915, 1915, 2451, 1915, 1915, 1915, + /* 420 */ 2346, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 430 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 440 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 450 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 460 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 470 */ 1915, 1915, 1915, 2212, 1915, 1915, 1915, 1915, 1915, 1915, + /* 480 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 490 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 500 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 510 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 520 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 530 */ 2227, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 540 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 550 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 560 */ 1915, 1915, 1959, 2353, 1915, 1915, 1915, 1915, 1915, 1915, + /* 570 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2356, 1915, 1915, + /* 580 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 590 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 600 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 610 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2052, 2051, + /* 620 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 630 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 640 */ 1915, 1915, 1915, 1915, 2357, 1915, 1915, 1915, 1915, 1915, + /* 650 */ 2348, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 660 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2550, 2504, 1915, + /* 670 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 680 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2346, 1915, 2532, + /* 690 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2548, 1915, 2552, + /* 700 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2461, 2457, 1915, + /* 710 */ 1915, 2453, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 720 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2345, + /* 730 */ 1915, 2412, 1915, 1915, 1915, 2446, 1915, 1915, 2397, 1915, + /* 740 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2357, 1915, + /* 750 */ 2360, 1915, 1915, 1915, 1915, 1915, 2132, 1915, 1915, 1915, + /* 760 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 770 */ 1915, 1915, 2116, 2114, 2113, 2112, 1915, 2145, 1915, 1915, + /* 780 */ 1915, 2141, 2140, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 790 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2031, + /* 800 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 2023, 1915, + /* 810 */ 2022, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 820 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, + /* 830 */ 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1944, 1915, + /* 840 */ 1915, 1915, 1915, 1915, 1915, }; /********** End of lemon-generated parsing tables *****************************/ @@ -2703,7 +2703,7 @@ static const char *const yyRuleName[] = { /* 562 */ "window_offset_clause_opt ::=", /* 563 */ "window_offset_clause_opt ::= WINDOW_OFFSET NK_LP window_offset_literal NK_COMMA window_offset_literal NK_RP", /* 564 */ "window_offset_literal ::= NK_VARIABLE", - /* 565 */ "window_offset_literal ::= NK_INTEGER", + /* 565 */ "window_offset_literal ::= NK_MINUS NK_VARIABLE", /* 566 */ "jlimit_clause_opt ::=", /* 567 */ "jlimit_clause_opt ::= JLIMIT NK_INTEGER", /* 568 */ "query_specification ::= SELECT hint_list set_quantifier_opt tag_mode_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt", @@ -4007,7 +4007,7 @@ static const YYCODETYPE yyRuleInfoLhs[] = { 489, /* (562) window_offset_clause_opt ::= */ 489, /* (563) window_offset_clause_opt ::= WINDOW_OFFSET NK_LP window_offset_literal NK_COMMA window_offset_literal NK_RP */ 491, /* (564) window_offset_literal ::= NK_VARIABLE */ - 491, /* (565) window_offset_literal ::= NK_INTEGER */ + 491, /* (565) window_offset_literal ::= NK_MINUS NK_VARIABLE */ 490, /* (566) jlimit_clause_opt ::= */ 490, /* (567) jlimit_clause_opt ::= JLIMIT NK_INTEGER */ 492, /* (568) query_specification ::= SELECT hint_list set_quantifier_opt tag_mode_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */ @@ -4667,7 +4667,7 @@ static const signed char yyRuleInfoNRhs[] = { 0, /* (562) window_offset_clause_opt ::= */ -6, /* (563) window_offset_clause_opt ::= WINDOW_OFFSET NK_LP window_offset_literal NK_COMMA window_offset_literal NK_RP */ -1, /* (564) window_offset_literal ::= NK_VARIABLE */ - -1, /* (565) window_offset_literal ::= NK_INTEGER */ + -2, /* (565) window_offset_literal ::= NK_MINUS NK_VARIABLE */ 0, /* (566) jlimit_clause_opt ::= */ -2, /* (567) jlimit_clause_opt ::= JLIMIT NK_INTEGER */ -14, /* (568) query_specification ::= SELECT hint_list set_quantifier_opt tag_mode_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */ @@ -6133,8 +6133,6 @@ static YYACTIONTYPE yy_reduce( yymsp[0].minor.yy664 = yylhsminor.yy664; break; case 409: /* duration_literal ::= NK_VARIABLE */ - case 564: /* window_offset_literal ::= NK_VARIABLE */ yytestcase(yyruleno==564); - case 565: /* window_offset_literal ::= NK_INTEGER */ yytestcase(yyruleno==565); case 600: /* interval_sliding_duration_literal ::= NK_VARIABLE */ yytestcase(yyruleno==600); case 601: /* interval_sliding_duration_literal ::= NK_STRING */ yytestcase(yyruleno==601); case 602: /* interval_sliding_duration_literal ::= NK_INTEGER */ yytestcase(yyruleno==602); @@ -6537,6 +6535,18 @@ static YYACTIONTYPE yy_reduce( case 563: /* window_offset_clause_opt ::= WINDOW_OFFSET NK_LP window_offset_literal NK_COMMA window_offset_literal NK_RP */ { yymsp[-5].minor.yy664 = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy664), releaseRawExprNode(pCxt, yymsp[-1].minor.yy664)); } break; + case 564: /* window_offset_literal ::= NK_VARIABLE */ +{ yylhsminor.yy664 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createTimeOffsetValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy664 = yylhsminor.yy664; + break; + case 565: /* window_offset_literal ::= NK_MINUS NK_VARIABLE */ +{ + SToken t = yymsp[-1].minor.yy0; + t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z; + yylhsminor.yy664 = createRawExprNode(pCxt, &t, createTimeOffsetValueNode(pCxt, &t)); + } + yymsp[-1].minor.yy664 = yylhsminor.yy664; + break; case 567: /* jlimit_clause_opt ::= JLIMIT NK_INTEGER */ case 636: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ yytestcase(yyruleno==636); case 640: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==640); diff --git a/source/libs/planner/src/planLogicCreater.c b/source/libs/planner/src/planLogicCreater.c index 2adc5b3072..452a322a98 100644 --- a/source/libs/planner/src/planLogicCreater.c +++ b/source/libs/planner/src/planLogicCreater.c @@ -557,7 +557,8 @@ static int32_t createJoinLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect // set the output if (TSDB_CODE_SUCCESS == code) { SNodeList* pColList = NULL; - if (QUERY_NODE_REAL_TABLE == nodeType(pJoinTable->pLeft) && !pJoin->isLowLevelJoin) { +// if (QUERY_NODE_REAL_TABLE == nodeType(pJoinTable->pLeft) && !pJoin->isLowLevelJoin) { + if (QUERY_NODE_REAL_TABLE == nodeType(pJoinTable->pLeft)) { code = nodesCollectColumns(pSelect, SQL_CLAUSE_WHERE, ((SRealTableNode*)pJoinTable->pLeft)->table.tableAlias, COLLECT_COL_TYPE_ALL, &pColList); } else { pJoin->node.pTargets = nodesCloneList(pLeft->pTargets); @@ -573,7 +574,8 @@ static int32_t createJoinLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect if (TSDB_CODE_SUCCESS == code) { SNodeList* pColList = NULL; - if (QUERY_NODE_REAL_TABLE == nodeType(pJoinTable->pRight) && !pJoin->isLowLevelJoin) { +// if (QUERY_NODE_REAL_TABLE == nodeType(pJoinTable->pRight) && !pJoin->isLowLevelJoin) { + if (QUERY_NODE_REAL_TABLE == nodeType(pJoinTable->pRight)) { code = nodesCollectColumns(pSelect, SQL_CLAUSE_WHERE, ((SRealTableNode*)pJoinTable->pRight)->table.tableAlias, COLLECT_COL_TYPE_ALL, &pColList); } else { if (pJoin->node.pTargets) {