From c994dabcbdc75054449c5c1a13ed05a01574b427 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Thu, 2 Jul 2026 21:26:48 -0700 Subject: [PATCH 1/8] Add sorted-by table metadata --- scripts/antlr4/Cypher.g4 | 11 +- scripts/antlr4/hash.md5 | 2 +- src/antlr4/Cypher.g4 | 9 +- src/antlr4/keywords.txt | 1 + src/binder/bind/bind_ddl.cpp | 24 + src/binder/ddl/bound_alter_info.cpp | 13 + .../node_table_catalog_entry.cpp | 28 + .../catalog_entry/table_catalog_entry.cpp | 9 + src/catalog/catalog_set.cpp | 1 + src/include/binder/binder.h | 1 + src/include/binder/ddl/bound_alter_info.h | 20 + .../catalog_entry/node_table_catalog_entry.h | 23 + src/include/common/enums/alter_type.h | 1 + src/include/parser/ddl/alter_info.h | 13 + src/include/parser/transformer.h | 1 + src/include/storage/storage_version_info.h | 7 +- src/parser/transform/transform_ddl.cpp | 18 + src/processor/operator/ddl/alter.cpp | 24 + .../wal/records/alter_table_entry_record.cpp | 21 + third_party/antlr4_cypher/cypher_lexer.cpp | 978 +-- third_party/antlr4_cypher/cypher_parser.cpp | 7260 +++++++++-------- .../antlr4_cypher/include/cypher_lexer.h | 25 +- .../antlr4_cypher/include/cypher_parser.h | 152 +- tools/shell/include/keywords.h | 4 +- 24 files changed, 4568 insertions(+), 4078 deletions(-) diff --git a/scripts/antlr4/Cypher.g4 b/scripts/antlr4/Cypher.g4 index 170121125f..109204426a 100644 --- a/scripts/antlr4/Cypher.g4 +++ b/scripts/antlr4/Cypher.g4 @@ -196,6 +196,8 @@ SEQUENCE : ( 'S' | 's' ) ( 'E' | 'e' ) ( 'Q' | 'q' ) ( 'U' | 'u' ) ( 'E' | 'e' ) SET : ( 'S' | 's' ) ( 'E' | 'e' ) ( 'T' | 't' ) ; +SORTED : ( 'S' | 's' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'D' | 'd' ) ; + SHORTEST : ( 'S' | 's' ) ( 'H' | 'h' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 't' ) ; START : ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'R' | 'r' ) ( 'T' | 't' ) ; @@ -461,7 +463,8 @@ iC_AlterOptions | iC_RenameTable | iC_RenameProperty | iC_AddFromToConnection - | iC_DropFromToConnection; + | iC_DropFromToConnection + | iC_SetSortedBy; iC_AddProperty : ADD SP (iC_IfNotExists SP)? oC_PropertyKeyName SP iC_DataType ( SP iC_Default )? ; @@ -484,6 +487,12 @@ iC_AddFromToConnection iC_DropFromToConnection : DROP SP (iC_IfExists SP)? iC_FromToConnection ; +iC_SetSortedBy + : SET SP SORTED SP BY SP? '(' SP? iC_SortedByItem ( SP? ',' SP? iC_SortedByItem )* SP? ')' ; + +iC_SortedByItem + : oC_PropertyKeyName SP ( ASC | DESC ) ; + iC_ColumnDefinitions: iC_ColumnDefinition ( SP? ',' SP? iC_ColumnDefinition )* ; iC_ColumnDefinition : oC_PropertyKeyName SP iC_DataType ; diff --git a/scripts/antlr4/hash.md5 b/scripts/antlr4/hash.md5 index 346091070d..4c1dfff9f0 100644 --- a/scripts/antlr4/hash.md5 +++ b/scripts/antlr4/hash.md5 @@ -1 +1 @@ -b940f6324ab2c15b0367f4cbd26040fb +1c6e4420671a8ce9be258805fc58ff5a diff --git a/src/antlr4/Cypher.g4 b/src/antlr4/Cypher.g4 index a14d99aabc..f301924f89 100644 --- a/src/antlr4/Cypher.g4 +++ b/src/antlr4/Cypher.g4 @@ -206,7 +206,8 @@ iC_AlterOptions | iC_RenameTable | iC_RenameProperty | iC_AddFromToConnection - | iC_DropFromToConnection; + | iC_DropFromToConnection + | iC_SetSortedBy; iC_AddProperty : ADD SP (iC_IfNotExists SP)? oC_PropertyKeyName SP iC_DataType ( SP iC_Default )? ; @@ -229,6 +230,12 @@ iC_AddFromToConnection iC_DropFromToConnection : DROP SP (iC_IfExists SP)? iC_FromToConnection ; +iC_SetSortedBy + : SET SP SORTED SP BY SP? '(' SP? iC_SortedByItem ( SP? ',' SP? iC_SortedByItem )* SP? ')' ; + +iC_SortedByItem + : oC_PropertyKeyName SP ( ASC | DESC ) ; + iC_ColumnDefinitions: iC_ColumnDefinition ( SP? ',' SP? iC_ColumnDefinition )* ; iC_ColumnDefinition : oC_PropertyKeyName SP iC_DataType ; diff --git a/src/antlr4/keywords.txt b/src/antlr4/keywords.txt index 3876d7a0b1..a6b773fd9d 100644 --- a/src/antlr4/keywords.txt +++ b/src/antlr4/keywords.txt @@ -89,6 +89,7 @@ ROLLBACK ROLLBACK_SKIP_CHECKPOINT SEQUENCE SET +SORTED SHORTEST START STARTS diff --git a/src/binder/bind/bind_ddl.cpp b/src/binder/bind/bind_ddl.cpp index 7e6de9d102..0663461579 100644 --- a/src/binder/bind/bind_ddl.cpp +++ b/src/binder/bind/bind_ddl.cpp @@ -655,6 +655,9 @@ std::unique_ptr Binder::bindAlter(const Statement& statement) { case AlterType::COMMENT: { return bindCommentOn(statement); } + case AlterType::SET_SORTED_BY: { + return bindSetSortedBy(statement); + } case AlterType::ADD_FROM_TO_CONNECTION: case AlterType::DROP_FROM_TO_CONNECTION: { return bindAlterFromToConnection(statement); @@ -738,6 +741,27 @@ std::unique_ptr Binder::bindCommentOn(const Statement& statement return std::make_unique(std::move(boundInfo)); } +std::unique_ptr Binder::bindSetSortedBy(const Statement& statement) const { + auto& alter = statement.constCast(); + auto info = alter.getInfo(); + auto extraInfo = info->extraInfo->constPtrCast(); + auto tableName = info->tableName; + auto catalog = Catalog::Get(*clientContext); + auto transaction = transaction::Transaction::Get(*clientContext); + auto tableEntry = catalog->getTableCatalogEntry(transaction, tableName); + validateNodeTableType(tableEntry); + std::vector properties; + properties.reserve(extraInfo->properties.size()); + for (auto& property : extraInfo->properties) { + validateColumnExistence(tableEntry, property.propertyName); + properties.push_back(BoundSortedByProperty{property.propertyName, property.ascending}); + } + auto boundExtraInfo = std::make_unique(std::move(properties)); + auto boundInfo = BoundAlterInfo(AlterType::SET_SORTED_BY, tableName, std::move(boundExtraInfo), + info->onConflict); + return std::make_unique(std::move(boundInfo)); +} + std::unique_ptr Binder::bindAlterFromToConnection( const Statement& statement) const { auto& alter = statement.constCast(); diff --git a/src/binder/ddl/bound_alter_info.cpp b/src/binder/ddl/bound_alter_info.cpp index 30f748ff36..c7421fe0ba 100644 --- a/src/binder/ddl/bound_alter_info.cpp +++ b/src/binder/ddl/bound_alter_info.cpp @@ -35,6 +35,19 @@ std::string BoundAlterInfo::toString() const { result += "Comment on Table " + tableName; break; } + case common::AlterType::SET_SORTED_BY: { + auto sortedByInfo = + common::dynamic_cast_checked(extraInfo.get()); + result += "Set Table " + tableName + " Sorted By "; + for (auto i = 0u; i < sortedByInfo->properties.size(); ++i) { + if (i > 0) { + result += ", "; + } + auto& property = sortedByInfo->properties[i]; + result += property.propertyName + (property.ascending ? " ASC" : " DESC"); + } + break; + } default: break; } diff --git a/src/catalog/catalog_entry/node_table_catalog_entry.cpp b/src/catalog/catalog_entry/node_table_catalog_entry.cpp index 0c1411be6e..6f0aadab3f 100644 --- a/src/catalog/catalog_entry/node_table_catalog_entry.cpp +++ b/src/catalog/catalog_entry/node_table_catalog_entry.cpp @@ -14,6 +14,18 @@ using namespace lbug::common; namespace lbug { namespace catalog { +void SortedByProperty::serialize(common::Serializer& serializer) const { + serializer.write(propertyName); + serializer.write(ascending); +} + +SortedByProperty SortedByProperty::deserialize(common::Deserializer& deserializer) { + SortedByProperty result; + deserializer.deserializeValue(result.propertyName); + deserializer.deserializeValue(result.ascending); + return result; +} + static void upgradeLegacyStorageFormat(const std::string& storage, common::StorageFormat& storageFormat) { const auto lowerStorage = common::StringUtils::getLower(storage); @@ -28,12 +40,20 @@ void NodeTableCatalogEntry::renameProperty(const std::string& propertyName, if (common::StringUtils::caseInsensitiveEquals(propertyName, primaryKeyName)) { primaryKeyName = newName; } + for (auto& sortedByProperty : sortedByProperties) { + if (common::StringUtils::caseInsensitiveEquals(propertyName, + sortedByProperty.propertyName)) { + sortedByProperty.propertyName = newName; + } + } } void NodeTableCatalogEntry::serialize(common::Serializer& serializer) const { TableCatalogEntry::serialize(serializer); serializer.writeDebuggingInfo("primaryKeyName"); serializer.write(primaryKeyName); + serializer.writeDebuggingInfo("sortedByProperties"); + serializer.serializeVector(sortedByProperties); serializer.writeDebuggingInfo("storage"); serializer.write(storage); serializer.writeDebuggingInfo("storageFormat"); @@ -44,10 +64,16 @@ std::unique_ptr NodeTableCatalogEntry::deserialize( common::Deserializer& deserializer) { std::string debuggingInfo; std::string primaryKeyName; + std::vector sortedByProperties; std::string storage; auto storageFormat = StorageFormat::NONE; deserializer.validateDebuggingInfo(debuggingInfo, "primaryKeyName"); deserializer.deserializeValue(primaryKeyName); + if (deserializer.getStorageVersion() >= + ::lbug::storage::StorageVersionInfo::STORAGE_VERSION_43) { + deserializer.validateDebuggingInfo(debuggingInfo, "sortedByProperties"); + deserializer.deserializeVector(sortedByProperties); + } deserializer.validateDebuggingInfo(debuggingInfo, "storage"); deserializer.deserializeValue(storage); if (deserializer.getStorageVersion() >= @@ -59,6 +85,7 @@ std::unique_ptr NodeTableCatalogEntry::deserialize( } auto nodeTableEntry = std::make_unique(); nodeTableEntry->primaryKeyName = primaryKeyName; + nodeTableEntry->sortedByProperties = std::move(sortedByProperties); nodeTableEntry->storage = storage; nodeTableEntry->storageFormat = storageFormat; return nodeTableEntry; @@ -88,6 +115,7 @@ std::unique_ptr NodeTableCatalogEntry::getBoundScanI std::unique_ptr NodeTableCatalogEntry::copy() const { auto other = std::make_unique(); other->primaryKeyName = primaryKeyName; + other->sortedByProperties = sortedByProperties; other->storage = storage; other->storageFormat = storageFormat; other->scanFunction = scanFunction; diff --git a/src/catalog/catalog_entry/table_catalog_entry.cpp b/src/catalog/catalog_entry/table_catalog_entry.cpp index 9c693a5720..bae9f2441b 100644 --- a/src/catalog/catalog_entry/table_catalog_entry.cpp +++ b/src/catalog/catalog_entry/table_catalog_entry.cpp @@ -37,6 +37,15 @@ std::unique_ptr TableCatalogEntry::alter(transaction_t timest auto& commentInfo = *alterInfo.extraInfo->constPtrCast(); newEntry->setComment(commentInfo.comment); } break; + case AlterType::SET_SORTED_BY: { + auto& sortedByInfo = *alterInfo.extraInfo->constPtrCast(); + std::vector properties; + properties.reserve(sortedByInfo.properties.size()); + for (auto& property : sortedByInfo.properties) { + properties.push_back(SortedByProperty{property.propertyName, property.ascending}); + } + newEntry->ptrCast()->setSortedByProperties(std::move(properties)); + } break; case AlterType::ADD_FROM_TO_CONNECTION: { auto& connectionInfo = *alterInfo.extraInfo->constPtrCast(); diff --git a/src/catalog/catalog_set.cpp b/src/catalog/catalog_set.cpp index 85796702ef..67da919d4a 100644 --- a/src/catalog/catalog_set.cpp +++ b/src/catalog/catalog_set.cpp @@ -195,6 +195,7 @@ void CatalogSet::alterTableEntry(Transaction* transaction, case AlterType::ADD_PROPERTY: case AlterType::DROP_PROPERTY: case AlterType::RENAME_PROPERTY: + case AlterType::SET_SORTED_BY: case AlterType::ADD_FROM_TO_CONNECTION: case AlterType::DROP_FROM_TO_CONNECTION: { emplaceNoLock(std::move(newEntry)); diff --git a/src/include/binder/binder.h b/src/include/binder/binder.h index e23365b351..d1ab51694e 100644 --- a/src/include/binder/binder.h +++ b/src/include/binder/binder.h @@ -112,6 +112,7 @@ class Binder { std::unique_ptr bindDropProperty(const parser::Statement& statement) const; std::unique_ptr bindRenameProperty(const parser::Statement& statement) const; std::unique_ptr bindCommentOn(const parser::Statement& statement) const; + std::unique_ptr bindSetSortedBy(const parser::Statement& statement) const; std::unique_ptr bindAlterFromToConnection( const parser::Statement& statement) const; diff --git a/src/include/binder/ddl/bound_alter_info.h b/src/include/binder/ddl/bound_alter_info.h index d79148236b..5727f1da48 100644 --- a/src/include/binder/ddl/bound_alter_info.h +++ b/src/include/binder/ddl/bound_alter_info.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "binder/ddl/property_definition.h" #include "binder/expression/expression.h" #include "common/enums/alter_type.h" @@ -8,6 +10,11 @@ namespace lbug { namespace binder { +struct BoundSortedByProperty { + std::string propertyName; + bool ascending; +}; + struct BoundExtraAlterInfo { virtual ~BoundExtraAlterInfo() = default; @@ -121,5 +128,18 @@ struct BoundExtraAlterFromToConnection final : BoundExtraAlterInfo { } }; +struct BoundExtraSetSortedByInfo final : BoundExtraAlterInfo { + std::vector properties; + + explicit BoundExtraSetSortedByInfo(std::vector properties) + : properties{std::move(properties)} {} + BoundExtraSetSortedByInfo(const BoundExtraSetSortedByInfo& other) + : properties{other.properties} {} + + std::unique_ptr copy() const override { + return std::make_unique(*this); + } +}; + } // namespace binder } // namespace lbug diff --git a/src/include/catalog/catalog_entry/node_table_catalog_entry.h b/src/include/catalog/catalog_entry/node_table_catalog_entry.h index 15773b80b9..a39ac2f56e 100644 --- a/src/include/catalog/catalog_entry/node_table_catalog_entry.h +++ b/src/include/catalog/catalog_entry/node_table_catalog_entry.h @@ -4,6 +4,9 @@ #include #include "common/enums/storage_format.h" +#include "common/serializer/deserializer.h" +#include "common/serializer/serializer.h" +#include "common/string_utils.h" #include "function/table/table_function.h" #include "table_catalog_entry.h" @@ -14,6 +17,14 @@ class Transaction; namespace catalog { +struct SortedByProperty { + std::string propertyName; + bool ascending; + + void serialize(common::Serializer& serializer) const; + static SortedByProperty deserialize(common::Deserializer& deserializer); +}; + // Callback to create bind data for foreign tables // This allows extensions to provide bind data creation without core needing to know extension types using CreateBindDataFunc = @@ -59,6 +70,17 @@ class LBUG_API NodeTableCatalogEntry final : public TableCatalogEntry { } const std::string& getStorage() const { return storage; } common::StorageFormat getStorageFormat() const { return storageFormat; } + const std::vector& getSortedByProperties() const { + return sortedByProperties; + } + bool isLeadingSortPrimaryKeyAsc() const { + return !sortedByProperties.empty() && sortedByProperties[0].ascending && + common::StringUtils::caseInsensitiveEquals(sortedByProperties[0].propertyName, + primaryKeyName); + } + void setSortedByProperties(std::vector properties) { + sortedByProperties = std::move(properties); + } std::optional getScanFunction() const override; const CreateBindDataFunc& getCreateBindDataFunc() const { return createBindDataFunc; } const std::string& getForeignDatabaseName() const { return foreignDatabaseName; } @@ -84,6 +106,7 @@ class LBUG_API NodeTableCatalogEntry final : public TableCatalogEntry { private: std::string primaryKeyName; + std::vector sortedByProperties; std::string storage; common::StorageFormat storageFormat = common::StorageFormat::NONE; std::optional scanFunction; diff --git a/src/include/common/enums/alter_type.h b/src/include/common/enums/alter_type.h index 7f9c3d9623..67352af846 100644 --- a/src/include/common/enums/alter_type.h +++ b/src/include/common/enums/alter_type.h @@ -13,6 +13,7 @@ enum class AlterType : uint8_t { RENAME_PROPERTY = 12, ADD_FROM_TO_CONNECTION = 13, DROP_FROM_TO_CONNECTION = 14, + SET_SORTED_BY = 15, COMMENT = 201, INVALID = 255 diff --git a/src/include/parser/ddl/alter_info.h b/src/include/parser/ddl/alter_info.h index 57975b0341..ee4fee69f9 100644 --- a/src/include/parser/ddl/alter_info.h +++ b/src/include/parser/ddl/alter_info.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include "common/copy_constructors.h" #include "common/enums/alter_type.h" @@ -10,6 +11,11 @@ namespace lbug { namespace parser { +struct ParsedSortedByProperty { + std::string propertyName; + bool ascending; +}; + struct ExtraAlterInfo { virtual ~ExtraAlterInfo() = default; @@ -83,5 +89,12 @@ struct ExtraCommentInfo : public ExtraAlterInfo { explicit ExtraCommentInfo(std::string comment) : comment{std::move(comment)} {} }; +struct ExtraSetSortedByInfo : public ExtraAlterInfo { + std::vector properties; + + explicit ExtraSetSortedByInfo(std::vector properties) + : properties{std::move(properties)} {} +}; + } // namespace parser } // namespace lbug diff --git a/src/include/parser/transformer.h b/src/include/parser/transformer.h index 0798cc1c4d..0504bd9470 100644 --- a/src/include/parser/transformer.h +++ b/src/include/parser/transformer.h @@ -219,6 +219,7 @@ class Transformer { std::unique_ptr transformAddProperty(CypherParser::IC_AlterTableContext& ctx); std::unique_ptr transformDropProperty(CypherParser::IC_AlterTableContext& ctx); std::unique_ptr transformRenameProperty(CypherParser::IC_AlterTableContext& ctx); + std::unique_ptr transformSetSortedBy(CypherParser::IC_AlterTableContext& ctx); std::unique_ptr transformCommentOn(CypherParser::IC_CommentOnContext& ctx); std::string transformUnionType(CypherParser::IC_UnionTypeContext& ctx); std::string transformStructType(CypherParser::IC_StructTypeContext& ctx); diff --git a/src/include/storage/storage_version_info.h b/src/include/storage/storage_version_info.h index 861261ec3b..59551ec3c2 100644 --- a/src/include/storage/storage_version_info.h +++ b/src/include/storage/storage_version_info.h @@ -19,6 +19,8 @@ struct StorageVersionInfo { static constexpr storage_version_t STORAGE_VERSION_41 = 41; // Storage version 42 adds per-FROM/TO relationship multiplicity to rel table catalog info. static constexpr storage_version_t STORAGE_VERSION_42 = 42; + // Storage version 43 adds optional node-table sorted-by catalog metadata. + static constexpr storage_version_t STORAGE_VERSION_43 = 43; static std::unordered_map getStorageVersionInfo() { return {{"0.12.0", STORAGE_VERSION_40}, {"0.12.2", STORAGE_VERSION_40}, @@ -28,13 +30,14 @@ struct StorageVersionInfo { {"0.15.2", STORAGE_VERSION_40}, {"0.15.3", STORAGE_VERSION_40}, {"0.15.4", STORAGE_VERSION_40}, {"0.16.0", STORAGE_VERSION_40}, {"0.16.1", STORAGE_VERSION_40}, {"0.17.0", STORAGE_VERSION_41}, - {"0.17.1", STORAGE_VERSION_41}, {"0.18.0", STORAGE_VERSION_42}}; + {"0.17.1", STORAGE_VERSION_41}, {"0.18.0", STORAGE_VERSION_42}, + {"0.19.0", STORAGE_VERSION_43}}; } static LBUG_API storage_version_t getStorageVersion(); static bool canReadStorageVersion(storage_version_t storageVersion) { return storageVersion == STORAGE_VERSION_40 || storageVersion == STORAGE_VERSION_41 || - storageVersion == getStorageVersion(); + storageVersion == STORAGE_VERSION_42 || storageVersion == getStorageVersion(); } static constexpr const char* MAGIC_BYTES = "LBUG"; diff --git a/src/parser/transform/transform_ddl.cpp b/src/parser/transform/transform_ddl.cpp index b427b8f892..327200a42b 100644 --- a/src/parser/transform/transform_ddl.cpp +++ b/src/parser/transform/transform_ddl.cpp @@ -32,6 +32,9 @@ std::unique_ptr Transformer::transformAlterTable( if (ctx.iC_AlterOptions()->iC_DropFromToConnection()) { return transformDropFromToConnection(ctx); } + if (ctx.iC_AlterOptions()->iC_SetSortedBy()) { + return transformSetSortedBy(ctx); + } return transformRenameProperty(ctx); } @@ -358,6 +361,21 @@ std::unique_ptr Transformer::transformRenameProperty( return std::make_unique(std::move(info)); } +std::unique_ptr Transformer::transformSetSortedBy( + CypherParser::IC_AlterTableContext& ctx) { + auto tableName = transformSchemaName(*ctx.oC_SchemaName()); + auto sortedByCtx = ctx.iC_AlterOptions()->iC_SetSortedBy(); + std::vector properties; + for (auto* item : sortedByCtx->iC_SortedByItem()) { + auto propertyName = transformPropertyKeyName(*item->oC_PropertyKeyName()); + properties.push_back( + ParsedSortedByProperty{std::move(propertyName), item->ASC() != nullptr}); + } + auto extraInfo = std::make_unique(std::move(properties)); + auto info = AlterInfo(AlterType::SET_SORTED_BY, tableName, std::move(extraInfo)); + return std::make_unique(std::move(info)); +} + std::unique_ptr Transformer::transformCommentOn(CypherParser::IC_CommentOnContext& ctx) { auto tableName = transformSchemaName(*ctx.oC_SchemaName()); auto comment = transformStringLiteral(*ctx.StringLiteral()); diff --git a/src/processor/operator/ddl/alter.cpp b/src/processor/operator/ddl/alter.cpp index 72da92f3f3..4814948cbc 100644 --- a/src/processor/operator/ddl/alter.cpp +++ b/src/processor/operator/ddl/alter.cpp @@ -6,6 +6,7 @@ #include "common/enums/alter_type.h" #include "common/exception/binder.h" #include "common/exception/runtime.h" +#include "common/string_utils.h" #include "processor/execution_context.h" #include "storage/storage_manager.h" #include "storage/table/table.h" @@ -158,6 +159,22 @@ static bool checkRenameTableConflicts(const BoundAlterInfo& info, main::ClientCo return false; } +static bool checkSetSortedByConflicts(const TableCatalogEntry& tableEntry, + const BoundAlterInfo& info) { + if (tableEntry.getTableType() != TableType::NODE) { + throw BinderException(std::format("Cannot set sorted-by metadata on non-node table {}.", + tableEntry.getName())); + } + auto& extraInfo = info.extraInfo->constCast(); + if (extraInfo.properties.empty()) { + throw BinderException("SORTED BY requires at least one property."); + } + for (auto& property : extraInfo.properties) { + validatePropertyExist(ConflictAction::ON_CONFLICT_THROW, tableEntry, property.propertyName); + } + return false; +} + static std::string fromToInTableMessage(const std::string& relGroupName, const std::string& fromTableName, const std::string& toTableName) { return std::format("{}->{} already exists in {} table.", fromTableName, toTableName, @@ -288,6 +305,13 @@ void Alter::alterTable(main::ClientContext* clientContext, const TableCatalogEnt case AlterType::COMMENT: { appendMessage(std::format("Comment added to table {}.", tableName), memoryManager); } break; + case AlterType::SET_SORTED_BY: { + checkSetSortedByConflicts(entry, info); + auto& extraInfo = info.extraInfo->constCast(); + appendMessage(std::format("Table {} sorted-by metadata updated with {} column(s).", + tableName, extraInfo.properties.size()), + memoryManager); + } break; default: UNREACHABLE_CODE; } diff --git a/src/storage/wal/records/alter_table_entry_record.cpp b/src/storage/wal/records/alter_table_entry_record.cpp index 5ddf938b49..db6a65fdb5 100644 --- a/src/storage/wal/records/alter_table_entry_record.cpp +++ b/src/storage/wal/records/alter_table_entry_record.cpp @@ -42,6 +42,14 @@ static void serializeAlterExtraInfo(Serializer& serializer, const BoundAlterInfo auto renameTableInfo = extraInfo->constPtrCast(); serializer.write(renameTableInfo->newName); } break; + case AlterType::SET_SORTED_BY: { + auto sortedByInfo = extraInfo->constPtrCast(); + serializer.write(static_cast(sortedByInfo->properties.size())); + for (auto& property : sortedByInfo->properties) { + serializer.write(property.propertyName); + serializer.write(property.ascending); + } + } break; case AlterType::ADD_FROM_TO_CONNECTION: case AlterType::DROP_FROM_TO_CONNECTION: { auto connectionInfo = extraInfo->constPtrCast(); @@ -88,6 +96,19 @@ static decltype(auto) deserializeAlterRecord(Deserializer& deserializer) { deserializer.deserializeValue(newName); extraInfo = std::make_unique(std::move(newName)); } break; + case AlterType::SET_SORTED_BY: { + uint64_t numProperties = 0; + deserializer.deserializeValue(numProperties); + std::vector properties; + properties.reserve(numProperties); + for (auto i = 0u; i < numProperties; ++i) { + BoundSortedByProperty property; + deserializer.deserializeValue(property.propertyName); + deserializer.deserializeValue(property.ascending); + properties.push_back(std::move(property)); + } + extraInfo = std::make_unique(std::move(properties)); + } break; case AlterType::ADD_FROM_TO_CONNECTION: case AlterType::DROP_FROM_TO_CONNECTION: { table_id_t fromTableID = INVALID_TABLE_ID; diff --git a/third_party/antlr4_cypher/cypher_lexer.cpp b/third_party/antlr4_cypher/cypher_lexer.cpp index 6ca0f83984..8f5deabff4 100644 --- a/third_party/antlr4_cypher/cypher_lexer.cpp +++ b/third_party/antlr4_cypher/cypher_lexer.cpp @@ -74,19 +74,19 @@ void cypherlexerLexerInitialize() { "MAXVALUE", "MERGE", "MINVALUE", "MULTI_JOIN", "NO", "NODE", "NOT", "NONE", "NULL", "ON", "ONLY", "OPTIONS", "OPTIONAL", "OR", "ORDER", "PRIMARY", "PROFILE", "PROJECT", "READ", "REL", "RENAME", "RETURN", - "ROLLBACK", "ROLLBACK_SKIP_CHECKPOINT", "SEQUENCE", "SET", "SHORTEST", - "START", "STARTS", "STRUCT", "TABLE", "THEN", "TO", "TRAIL", "TRANSACTION", - "TRUE", "TYPE", "UNION", "UNWIND", "UNINSTALL", "UPDATE", "USE", "WHEN", - "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", "YIELD", "USER", - "PASSWORD", "ROLE", "MAP", "DECIMAL", "STAR", "L_SKIP", "INVALID_NOT_EQUAL", - "COLON", "DOTDOT", "MINUS", "FACTORIAL", "StringLiteral", "EscapedChar", - "DecimalInteger", "HexLetter", "HexDigit", "Digit", "NonZeroDigit", - "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", - "UnescapedSymbolicName", "IdentifierStart", "IdentifierPart", "EscapedSymbolicName", - "SP", "WHITESPACE", "CypherComment", "FF", "EscapedSymbolicName_0", - "RS", "ID_Continue", "Comment_1", "StringLiteral_1", "Comment_3", - "Comment_2", "GS", "FS", "CR", "Sc", "SPACE", "Pc", "TAB", "StringLiteral_0", - "LF", "VT", "US", "ID_Start", "Unknown" + "ROLLBACK", "ROLLBACK_SKIP_CHECKPOINT", "SEQUENCE", "SET", "SORTED", + "SHORTEST", "START", "STARTS", "STRUCT", "TABLE", "THEN", "TO", "TRAIL", + "TRANSACTION", "TRUE", "TYPE", "UNION", "UNWIND", "UNINSTALL", "UPDATE", + "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", + "YIELD", "USER", "PASSWORD", "ROLE", "MAP", "DECIMAL", "STAR", "L_SKIP", + "INVALID_NOT_EQUAL", "COLON", "DOTDOT", "MINUS", "FACTORIAL", "StringLiteral", + "EscapedChar", "DecimalInteger", "HexLetter", "HexDigit", "Digit", + "NonZeroDigit", "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", + "RegularDecimalReal", "UnescapedSymbolicName", "IdentifierStart", + "IdentifierPart", "EscapedSymbolicName", "SP", "WHITESPACE", "CypherComment", + "FF", "EscapedSymbolicName_0", "RS", "ID_Continue", "Comment_1", "StringLiteral_1", + "Comment_3", "Comment_2", "GS", "FS", "CR", "Sc", "SPACE", "Pc", "TAB", + "StringLiteral_0", "LF", "VT", "US", "ID_Start", "Unknown" }, std::vector{ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" @@ -108,8 +108,8 @@ void cypherlexerLexerInitialize() { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "'*'", "", "'!='", "':'", "'..'", "'-'", "'!'", "", "", "", "", "", - "", "", "", "'0'" + "", "'*'", "", "'!='", "':'", "'..'", "'-'", "'!'", "", "", "", "", + "", "", "", "", "'0'" }, std::vector{ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -127,20 +127,20 @@ void cypherlexerLexerInitialize() { "NOT", "NONE", "NULL", "ON", "ONLY", "OPTIONS", "OPTIONAL", "OR", "ORDER", "PRIMARY", "PROFILE", "PROJECT", "READ", "REL", "RENAME", "RETURN", "ROLLBACK", "ROLLBACK_SKIP_CHECKPOINT", "SEQUENCE", "SET", - "SHORTEST", "START", "STARTS", "STRUCT", "TABLE", "THEN", "TO", "TRAIL", - "TRANSACTION", "TRUE", "TYPE", "UNION", "UNWIND", "UNINSTALL", "UPDATE", - "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", - "YIELD", "USER", "PASSWORD", "ROLE", "MAP", "DECIMAL", "STAR", "L_SKIP", - "INVALID_NOT_EQUAL", "COLON", "DOTDOT", "MINUS", "FACTORIAL", "StringLiteral", - "EscapedChar", "DecimalInteger", "HexLetter", "HexDigit", "Digit", - "NonZeroDigit", "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", + "SORTED", "SHORTEST", "START", "STARTS", "STRUCT", "TABLE", "THEN", + "TO", "TRAIL", "TRANSACTION", "TRUE", "TYPE", "UNION", "UNWIND", "UNINSTALL", + "UPDATE", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", + "SINGLE", "YIELD", "USER", "PASSWORD", "ROLE", "MAP", "DECIMAL", "STAR", + "L_SKIP", "INVALID_NOT_EQUAL", "COLON", "DOTDOT", "MINUS", "FACTORIAL", + "StringLiteral", "EscapedChar", "DecimalInteger", "HexLetter", "HexDigit", + "Digit", "NonZeroDigit", "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", "UnescapedSymbolicName", "IdentifierStart", "IdentifierPart", "EscapedSymbolicName", "SP", "WHITESPACE", "CypherComment", "Unknown" } ); static const int32_t serializedATNSegment[] = { - 4,0,190,1561,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,0,191,1570,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2, 14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2, 21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2, @@ -172,126 +172,127 @@ void cypherlexerLexerInitialize() { 7,188,2,189,7,189,2,190,7,190,2,191,7,191,2,192,7,192,2,193,7,193,2,194, 7,194,2,195,7,195,2,196,7,196,2,197,7,197,2,198,7,198,2,199,7,199,2,200, 7,200,2,201,7,201,2,202,7,202,2,203,7,203,2,204,7,204,2,205,7,205,2,206, - 7,206,2,207,7,207,2,208,7,208,2,209,7,209,1,0,1,0,1,1,1,1,1,2,1,2,1,3, - 1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,11,1, - 11,1,11,1,12,1,12,1,13,1,13,1,13,1,14,1,14,1,15,1,15,1,15,1,16,1,16,1, - 17,1,17,1,17,1,18,1,18,1,18,1,19,1,19,1,20,1,20,1,21,1,21,1,22,1,22,1, - 23,1,23,1,23,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1,28,1,28,1,29,1, - 29,1,30,1,30,1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1, - 36,1,37,1,37,1,38,1,38,1,39,1,39,1,40,1,40,1,41,1,41,1,42,1,42,1,43,1, - 43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,46,1, - 46,1,46,1,46,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1, - 49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1, - 52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1, - 54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,56,1, - 56,1,56,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1, - 59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1, - 61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1, - 62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1, - 64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1, - 64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1, - 66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1, - 68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1, - 70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1, - 72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1, - 74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1, - 76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1, - 77,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1, - 80,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1, - 83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1, - 85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1, - 86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1, - 89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,91,1, - 92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1, - 94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1, - 96,1,96,1,96,1,96,1,97,1,97,1,97,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1, - 99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100, - 1,100,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103, - 1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107, - 1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109, - 1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,111, - 1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112, - 1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,114,1,114, - 1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116, - 1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,119,1,119,1,119,1,119, - 1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121, - 1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,123,1,123,1,123, - 1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,125, - 1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126, - 1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128,1,128, - 1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130, - 1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,132, - 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132, + 7,206,2,207,7,207,2,208,7,208,2,209,7,209,2,210,7,210,1,0,1,0,1,1,1,1, + 1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,10, + 1,10,1,11,1,11,1,11,1,12,1,12,1,13,1,13,1,13,1,14,1,14,1,15,1,15,1,15, + 1,16,1,16,1,17,1,17,1,17,1,18,1,18,1,18,1,19,1,19,1,20,1,20,1,21,1,21, + 1,22,1,22,1,23,1,23,1,23,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1,28, + 1,28,1,29,1,29,1,30,1,30,1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,35, + 1,35,1,36,1,36,1,37,1,37,1,38,1,38,1,39,1,39,1,40,1,40,1,41,1,41,1,42, + 1,42,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45, + 1,45,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48, + 1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,51, + 1,51,1,51,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, + 1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55, + 1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58, + 1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60, + 1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62, + 1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64, + 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64, + 1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65, + 1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68, + 1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70, + 1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72, + 1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74, + 1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75, + 1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77, + 1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,80, + 1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82, + 1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84, + 1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86, + 1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88, + 1,88,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91, + 1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93, + 1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95, + 1,96,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,98,1,98,1,98,1,99,1,99, + 1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100, + 1,100,1,100,1,100,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,103, + 1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105, + 1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107, + 1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109, + 1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110, + 1,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112, + 1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113, + 1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,116,1,116,1,116, + 1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,119,1,119, + 1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,121, + 1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,123, + 1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124, + 1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126, + 1,126,1,126,1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128, + 1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,130,1,130,1,130, + 1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131, + 1,131,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132, 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132, - 1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,134,1,134,1,134, - 1,134,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,136,1,136, - 1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,138, - 1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,139,1,139, - 1,140,1,140,1,140,1,140,1,140,1,141,1,141,1,141,1,142,1,142,1,142,1,142, - 1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143, - 1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,145, - 1,146,1,146,1,146,1,146,1,146,1,146,1,147,1,147,1,147,1,147,1,147,1,147, - 1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,149, - 1,149,1,149,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,150,1,151,1,151, - 1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152,1,152,1,153,1,153,1,153, - 1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,157,1,157, - 1,157,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,159, - 1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,160,1,160,1,160, - 1,160,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,162,1,163,1,163, - 1,163,1,163,1,163,1,163,1,163,1,163,1,164,1,164,1,165,1,165,1,165,1,165, - 1,165,1,166,1,166,1,166,1,167,1,167,1,168,1,168,1,168,1,169,1,169,1,170, - 1,170,1,171,1,171,1,171,5,171,1328,8,171,10,171,12,171,1331,9,171,1,171, - 1,171,1,171,1,171,5,171,1337,8,171,10,171,12,171,1340,9,171,1,171,3,171, - 1343,8,171,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172, - 1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172, - 3,172,1367,8,172,1,173,1,173,1,173,5,173,1372,8,173,10,173,12,173,1375, - 9,173,3,173,1377,8,173,1,174,3,174,1380,8,174,1,175,1,175,3,175,1384, - 8,175,1,176,1,176,3,176,1388,8,176,1,177,1,177,3,177,1392,8,177,1,178, - 1,178,1,179,1,179,1,180,4,180,1399,8,180,11,180,12,180,1400,1,180,4,180, - 1404,8,180,11,180,12,180,1405,1,180,1,180,4,180,1410,8,180,11,180,12, - 180,1411,1,180,1,180,4,180,1416,8,180,11,180,12,180,1417,3,180,1420,8, - 180,1,180,1,180,3,180,1424,8,180,1,180,4,180,1427,8,180,11,180,12,180, - 1428,1,181,5,181,1432,8,181,10,181,12,181,1435,9,181,1,181,1,181,4,181, - 1439,8,181,11,181,12,181,1440,1,182,1,182,5,182,1445,8,182,10,182,12, - 182,1448,9,182,1,183,1,183,3,183,1452,8,183,1,184,1,184,3,184,1456,8, - 184,1,185,1,185,5,185,1460,8,185,10,185,12,185,1463,9,185,1,185,4,185, - 1466,8,185,11,185,12,185,1467,1,186,4,186,1471,8,186,11,186,12,186,1472, - 1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187, - 3,187,1487,8,187,1,188,1,188,1,188,1,188,1,188,1,188,5,188,1495,8,188, - 10,188,12,188,1498,9,188,1,188,1,188,1,188,1,188,1,188,1,188,5,188,1506, - 8,188,10,188,12,188,1509,9,188,1,188,3,188,1512,8,188,1,188,1,188,3,188, - 1516,8,188,3,188,1518,8,188,1,189,1,189,1,190,1,190,1,191,1,191,1,192, - 1,192,1,193,1,193,1,194,1,194,1,195,1,195,1,196,1,196,1,197,1,197,1,198, - 1,198,1,199,1,199,1,200,1,200,1,201,1,201,1,202,1,202,1,203,1,203,1,204, - 1,204,1,205,1,205,1,206,1,206,1,207,1,207,1,208,1,208,1,209,1,209,0,0, - 210,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27, - 14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25, - 51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73, - 37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48, - 97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117, - 59,119,60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137, - 69,139,70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157, - 79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177, - 89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197, - 99,199,100,201,101,203,102,205,103,207,104,209,105,211,106,213,107,215, - 108,217,109,219,110,221,111,223,112,225,113,227,114,229,115,231,116,233, - 117,235,118,237,119,239,120,241,121,243,122,245,123,247,124,249,125,251, - 126,253,127,255,128,257,129,259,130,261,131,263,132,265,133,267,134,269, - 135,271,136,273,137,275,138,277,139,279,140,281,141,283,142,285,143,287, - 144,289,145,291,146,293,147,295,148,297,149,299,150,301,151,303,152,305, - 153,307,154,309,155,311,156,313,157,315,158,317,159,319,160,321,161,323, - 162,325,163,327,164,329,165,331,166,333,167,335,168,337,169,339,170,341, - 171,343,172,345,173,347,174,349,175,351,176,353,177,355,178,357,179,359, - 180,361,181,363,182,365,183,367,184,369,185,371,186,373,187,375,188,377, - 189,379,0,381,0,383,0,385,0,387,0,389,0,391,0,393,0,395,0,397,0,399,0, - 401,0,403,0,405,0,407,0,409,0,411,0,413,0,415,0,417,0,419,190,1,0,49, - 2,0,65,65,97,97,2,0,67,67,99,99,2,0,89,89,121,121,2,0,76,76,108,108,2, - 0,73,73,105,105,2,0,78,78,110,110,2,0,68,68,100,100,2,0,84,84,116,116, - 2,0,69,69,101,101,2,0,82,82,114,114,2,0,90,90,122,122,2,0,83,83,115,115, - 2,0,71,71,103,103,2,0,72,72,104,104,2,0,66,66,98,98,2,0,75,75,107,107, - 2,0,80,80,112,112,2,0,79,79,111,111,2,0,85,85,117,117,2,0,77,77,109,109, + 1,132,1,132,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,134, + 1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,136,1,136, + 1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137, + 1,137,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139, + 1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,140,1,140,1,141,1,141,1,141, + 1,141,1,141,1,142,1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,143,1,144, + 1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,145, + 1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,146,1,147,1,147,1,147, + 1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,149,1,149, + 1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,150, + 1,150,1,150,1,150,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152, + 1,153,1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,155, + 1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,156,1,156, + 1,156,1,156,1,156,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160, + 1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162, + 1,162,1,162,1,162,1,163,1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,164, + 1,164,1,164,1,164,1,165,1,165,1,166,1,166,1,166,1,166,1,166,1,167,1,167, + 1,167,1,168,1,168,1,169,1,169,1,169,1,170,1,170,1,171,1,171,1,172,1,172, + 1,172,5,172,1337,8,172,10,172,12,172,1340,9,172,1,172,1,172,1,172,1,172, + 5,172,1346,8,172,10,172,12,172,1349,9,172,1,172,3,172,1352,8,172,1,173, + 1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173, + 1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,3,173,1376,8,173, + 1,174,1,174,1,174,5,174,1381,8,174,10,174,12,174,1384,9,174,3,174,1386, + 8,174,1,175,3,175,1389,8,175,1,176,1,176,3,176,1393,8,176,1,177,1,177, + 3,177,1397,8,177,1,178,1,178,3,178,1401,8,178,1,179,1,179,1,180,1,180, + 1,181,4,181,1408,8,181,11,181,12,181,1409,1,181,4,181,1413,8,181,11,181, + 12,181,1414,1,181,1,181,4,181,1419,8,181,11,181,12,181,1420,1,181,1,181, + 4,181,1425,8,181,11,181,12,181,1426,3,181,1429,8,181,1,181,1,181,3,181, + 1433,8,181,1,181,4,181,1436,8,181,11,181,12,181,1437,1,182,5,182,1441, + 8,182,10,182,12,182,1444,9,182,1,182,1,182,4,182,1448,8,182,11,182,12, + 182,1449,1,183,1,183,5,183,1454,8,183,10,183,12,183,1457,9,183,1,184, + 1,184,3,184,1461,8,184,1,185,1,185,3,185,1465,8,185,1,186,1,186,5,186, + 1469,8,186,10,186,12,186,1472,9,186,1,186,4,186,1475,8,186,11,186,12, + 186,1476,1,187,4,187,1480,8,187,11,187,12,187,1481,1,188,1,188,1,188, + 1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,3,188,1496,8,188, + 1,189,1,189,1,189,1,189,1,189,1,189,5,189,1504,8,189,10,189,12,189,1507, + 9,189,1,189,1,189,1,189,1,189,1,189,1,189,5,189,1515,8,189,10,189,12, + 189,1518,9,189,1,189,3,189,1521,8,189,1,189,1,189,3,189,1525,8,189,3, + 189,1527,8,189,1,190,1,190,1,191,1,191,1,192,1,192,1,193,1,193,1,194, + 1,194,1,195,1,195,1,196,1,196,1,197,1,197,1,198,1,198,1,199,1,199,1,200, + 1,200,1,201,1,201,1,202,1,202,1,203,1,203,1,204,1,204,1,205,1,205,1,206, + 1,206,1,207,1,207,1,208,1,208,1,209,1,209,1,210,1,210,0,0,211,1,1,3,2, + 5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31, + 16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27, + 55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77, + 39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50, + 101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60, + 121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70, + 141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80, + 161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90, + 181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100, + 201,101,203,102,205,103,207,104,209,105,211,106,213,107,215,108,217,109, + 219,110,221,111,223,112,225,113,227,114,229,115,231,116,233,117,235,118, + 237,119,239,120,241,121,243,122,245,123,247,124,249,125,251,126,253,127, + 255,128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271,136, + 273,137,275,138,277,139,279,140,281,141,283,142,285,143,287,144,289,145, + 291,146,293,147,295,148,297,149,299,150,301,151,303,152,305,153,307,154, + 309,155,311,156,313,157,315,158,317,159,319,160,321,161,323,162,325,163, + 327,164,329,165,331,166,333,167,335,168,337,169,339,170,341,171,343,172, + 345,173,347,174,349,175,351,176,353,177,355,178,357,179,359,180,361,181, + 363,182,365,183,367,184,369,185,371,186,373,187,375,188,377,189,379,190, + 381,0,383,0,385,0,387,0,389,0,391,0,393,0,395,0,397,0,399,0,401,0,403, + 0,405,0,407,0,409,0,411,0,413,0,415,0,417,0,419,0,421,191,1,0,49,2,0, + 65,65,97,97,2,0,67,67,99,99,2,0,89,89,121,121,2,0,76,76,108,108,2,0,73, + 73,105,105,2,0,78,78,110,110,2,0,68,68,100,100,2,0,84,84,116,116,2,0, + 69,69,101,101,2,0,82,82,114,114,2,0,90,90,122,122,2,0,83,83,115,115,2, + 0,71,71,103,103,2,0,72,72,104,104,2,0,66,66,98,98,2,0,75,75,107,107,2, + 0,80,80,112,112,2,0,79,79,111,111,2,0,85,85,117,117,2,0,77,77,109,109, 2,0,70,70,102,102,2,0,88,88,120,120,2,0,74,74,106,106,2,0,86,86,118,118, 2,0,81,81,113,113,2,0,87,87,119,119,13,0,34,34,39,39,66,66,70,70,78,78, 82,82,84,84,92,92,98,98,102,102,110,110,114,114,116,116,2,0,65,70,97, @@ -533,7 +534,7 @@ void cypherlexerLexerInitialize() { 126585,126588,126590,126590,126592,126601,126603,126619,126625,126627, 126629,126633,126635,126651,131072,173791,173824,177977,177984,178205, 178208,183969,183984,191456,194560,195101,196608,201546,201552,205743, - 1586,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11, + 1595,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11, 1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0, 0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0, 0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43, @@ -570,350 +571,353 @@ void cypherlexerLexerInitialize() { 347,1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0, 357,1,0,0,0,0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0, 367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0, - 377,1,0,0,0,0,419,1,0,0,0,1,421,1,0,0,0,3,423,1,0,0,0,5,425,1,0,0,0,7, - 427,1,0,0,0,9,429,1,0,0,0,11,431,1,0,0,0,13,433,1,0,0,0,15,435,1,0,0, - 0,17,437,1,0,0,0,19,439,1,0,0,0,21,441,1,0,0,0,23,443,1,0,0,0,25,446, - 1,0,0,0,27,448,1,0,0,0,29,451,1,0,0,0,31,453,1,0,0,0,33,456,1,0,0,0,35, - 458,1,0,0,0,37,461,1,0,0,0,39,464,1,0,0,0,41,466,1,0,0,0,43,468,1,0,0, - 0,45,470,1,0,0,0,47,472,1,0,0,0,49,475,1,0,0,0,51,477,1,0,0,0,53,479, - 1,0,0,0,55,481,1,0,0,0,57,483,1,0,0,0,59,485,1,0,0,0,61,487,1,0,0,0,63, - 489,1,0,0,0,65,491,1,0,0,0,67,493,1,0,0,0,69,495,1,0,0,0,71,497,1,0,0, - 0,73,499,1,0,0,0,75,501,1,0,0,0,77,503,1,0,0,0,79,505,1,0,0,0,81,507, - 1,0,0,0,83,509,1,0,0,0,85,511,1,0,0,0,87,513,1,0,0,0,89,515,1,0,0,0,91, - 523,1,0,0,0,93,527,1,0,0,0,95,531,1,0,0,0,97,535,1,0,0,0,99,541,1,0,0, - 0,101,549,1,0,0,0,103,553,1,0,0,0,105,556,1,0,0,0,107,560,1,0,0,0,109, - 570,1,0,0,0,111,577,1,0,0,0,113,583,1,0,0,0,115,586,1,0,0,0,117,591,1, - 0,0,0,119,596,1,0,0,0,121,601,1,0,0,0,123,612,1,0,0,0,125,619,1,0,0,0, - 127,627,1,0,0,0,129,634,1,0,0,0,131,657,1,0,0,0,133,666,1,0,0,0,135,671, - 1,0,0,0,137,677,1,0,0,0,139,684,1,0,0,0,141,690,1,0,0,0,143,699,1,0,0, - 0,145,706,1,0,0,0,147,714,1,0,0,0,149,721,1,0,0,0,151,726,1,0,0,0,153, - 737,1,0,0,0,155,744,1,0,0,0,157,753,1,0,0,0,159,758,1,0,0,0,161,763,1, - 0,0,0,163,767,1,0,0,0,165,772,1,0,0,0,167,779,1,0,0,0,169,787,1,0,0,0, - 171,794,1,0,0,0,173,804,1,0,0,0,175,810,1,0,0,0,177,815,1,0,0,0,179,821, - 1,0,0,0,181,825,1,0,0,0,183,830,1,0,0,0,185,836,1,0,0,0,187,842,1,0,0, - 0,189,850,1,0,0,0,191,855,1,0,0,0,193,862,1,0,0,0,195,868,1,0,0,0,197, - 871,1,0,0,0,199,874,1,0,0,0,201,884,1,0,0,0,203,892,1,0,0,0,205,895,1, - 0,0,0,207,900,1,0,0,0,209,904,1,0,0,0,211,910,1,0,0,0,213,915,1,0,0,0, - 215,923,1,0,0,0,217,929,1,0,0,0,219,935,1,0,0,0,221,944,1,0,0,0,223,950, - 1,0,0,0,225,959,1,0,0,0,227,970,1,0,0,0,229,973,1,0,0,0,231,978,1,0,0, - 0,233,982,1,0,0,0,235,987,1,0,0,0,237,992,1,0,0,0,239,995,1,0,0,0,241, - 1000,1,0,0,0,243,1008,1,0,0,0,245,1017,1,0,0,0,247,1020,1,0,0,0,249,1026, - 1,0,0,0,251,1034,1,0,0,0,253,1042,1,0,0,0,255,1050,1,0,0,0,257,1055,1, - 0,0,0,259,1059,1,0,0,0,261,1066,1,0,0,0,263,1073,1,0,0,0,265,1082,1,0, - 0,0,267,1107,1,0,0,0,269,1116,1,0,0,0,271,1120,1,0,0,0,273,1129,1,0,0, - 0,275,1135,1,0,0,0,277,1142,1,0,0,0,279,1149,1,0,0,0,281,1155,1,0,0,0, - 283,1160,1,0,0,0,285,1163,1,0,0,0,287,1169,1,0,0,0,289,1181,1,0,0,0,291, - 1186,1,0,0,0,293,1191,1,0,0,0,295,1197,1,0,0,0,297,1204,1,0,0,0,299,1214, - 1,0,0,0,301,1221,1,0,0,0,303,1225,1,0,0,0,305,1230,1,0,0,0,307,1236,1, - 0,0,0,309,1241,1,0,0,0,311,1247,1,0,0,0,313,1257,1,0,0,0,315,1261,1,0, - 0,0,317,1268,1,0,0,0,319,1274,1,0,0,0,321,1279,1,0,0,0,323,1288,1,0,0, - 0,325,1293,1,0,0,0,327,1297,1,0,0,0,329,1305,1,0,0,0,331,1307,1,0,0,0, - 333,1312,1,0,0,0,335,1315,1,0,0,0,337,1317,1,0,0,0,339,1320,1,0,0,0,341, - 1322,1,0,0,0,343,1342,1,0,0,0,345,1344,1,0,0,0,347,1376,1,0,0,0,349,1379, - 1,0,0,0,351,1383,1,0,0,0,353,1387,1,0,0,0,355,1391,1,0,0,0,357,1393,1, - 0,0,0,359,1395,1,0,0,0,361,1419,1,0,0,0,363,1433,1,0,0,0,365,1442,1,0, - 0,0,367,1451,1,0,0,0,369,1455,1,0,0,0,371,1465,1,0,0,0,373,1470,1,0,0, - 0,375,1486,1,0,0,0,377,1517,1,0,0,0,379,1519,1,0,0,0,381,1521,1,0,0,0, - 383,1523,1,0,0,0,385,1525,1,0,0,0,387,1527,1,0,0,0,389,1529,1,0,0,0,391, - 1531,1,0,0,0,393,1533,1,0,0,0,395,1535,1,0,0,0,397,1537,1,0,0,0,399,1539, - 1,0,0,0,401,1541,1,0,0,0,403,1543,1,0,0,0,405,1545,1,0,0,0,407,1547,1, - 0,0,0,409,1549,1,0,0,0,411,1551,1,0,0,0,413,1553,1,0,0,0,415,1555,1,0, - 0,0,417,1557,1,0,0,0,419,1559,1,0,0,0,421,422,5,59,0,0,422,2,1,0,0,0, - 423,424,5,40,0,0,424,4,1,0,0,0,425,426,5,41,0,0,426,6,1,0,0,0,427,428, - 5,44,0,0,428,8,1,0,0,0,429,430,5,46,0,0,430,10,1,0,0,0,431,432,5,61,0, - 0,432,12,1,0,0,0,433,434,5,91,0,0,434,14,1,0,0,0,435,436,5,93,0,0,436, - 16,1,0,0,0,437,438,5,123,0,0,438,18,1,0,0,0,439,440,5,125,0,0,440,20, - 1,0,0,0,441,442,5,124,0,0,442,22,1,0,0,0,443,444,5,60,0,0,444,445,5,62, - 0,0,445,24,1,0,0,0,446,447,5,60,0,0,447,26,1,0,0,0,448,449,5,60,0,0,449, - 450,5,61,0,0,450,28,1,0,0,0,451,452,5,62,0,0,452,30,1,0,0,0,453,454,5, - 62,0,0,454,455,5,61,0,0,455,32,1,0,0,0,456,457,5,38,0,0,457,34,1,0,0, - 0,458,459,5,62,0,0,459,460,5,62,0,0,460,36,1,0,0,0,461,462,5,60,0,0,462, - 463,5,60,0,0,463,38,1,0,0,0,464,465,5,43,0,0,465,40,1,0,0,0,466,467,5, - 47,0,0,467,42,1,0,0,0,468,469,5,37,0,0,469,44,1,0,0,0,470,471,5,94,0, - 0,471,46,1,0,0,0,472,473,5,61,0,0,473,474,5,126,0,0,474,48,1,0,0,0,475, - 476,5,36,0,0,476,50,1,0,0,0,477,478,5,10216,0,0,478,52,1,0,0,0,479,480, - 5,12296,0,0,480,54,1,0,0,0,481,482,5,65124,0,0,482,56,1,0,0,0,483,484, - 5,65308,0,0,484,58,1,0,0,0,485,486,5,10217,0,0,486,60,1,0,0,0,487,488, - 5,12297,0,0,488,62,1,0,0,0,489,490,5,65125,0,0,490,64,1,0,0,0,491,492, - 5,65310,0,0,492,66,1,0,0,0,493,494,5,173,0,0,494,68,1,0,0,0,495,496,5, - 8208,0,0,496,70,1,0,0,0,497,498,5,8209,0,0,498,72,1,0,0,0,499,500,5,8210, - 0,0,500,74,1,0,0,0,501,502,5,8211,0,0,502,76,1,0,0,0,503,504,5,8212,0, - 0,504,78,1,0,0,0,505,506,5,8213,0,0,506,80,1,0,0,0,507,508,5,8722,0,0, - 508,82,1,0,0,0,509,510,5,65112,0,0,510,84,1,0,0,0,511,512,5,65123,0,0, - 512,86,1,0,0,0,513,514,5,65293,0,0,514,88,1,0,0,0,515,516,7,0,0,0,516, - 517,7,1,0,0,517,518,7,2,0,0,518,519,7,1,0,0,519,520,7,3,0,0,520,521,7, - 4,0,0,521,522,7,1,0,0,522,90,1,0,0,0,523,524,7,0,0,0,524,525,7,5,0,0, - 525,526,7,2,0,0,526,92,1,0,0,0,527,528,7,0,0,0,528,529,7,6,0,0,529,530, - 7,6,0,0,530,94,1,0,0,0,531,532,7,0,0,0,532,533,7,3,0,0,533,534,7,3,0, - 0,534,96,1,0,0,0,535,536,7,0,0,0,536,537,7,3,0,0,537,538,7,7,0,0,538, - 539,7,8,0,0,539,540,7,9,0,0,540,98,1,0,0,0,541,542,7,0,0,0,542,543,7, - 5,0,0,543,544,7,0,0,0,544,545,7,3,0,0,545,546,7,2,0,0,546,547,7,10,0, - 0,547,548,7,8,0,0,548,100,1,0,0,0,549,550,7,0,0,0,550,551,7,5,0,0,551, - 552,7,6,0,0,552,102,1,0,0,0,553,554,7,0,0,0,554,555,7,11,0,0,555,104, - 1,0,0,0,556,557,7,0,0,0,557,558,7,11,0,0,558,559,7,1,0,0,559,106,1,0, - 0,0,560,561,7,0,0,0,561,562,7,11,0,0,562,563,7,1,0,0,563,564,7,8,0,0, - 564,565,7,5,0,0,565,566,7,6,0,0,566,567,7,4,0,0,567,568,7,5,0,0,568,569, - 7,12,0,0,569,108,1,0,0,0,570,571,7,0,0,0,571,572,7,7,0,0,572,573,7,7, - 0,0,573,574,7,0,0,0,574,575,7,1,0,0,575,576,7,13,0,0,576,110,1,0,0,0, - 577,578,7,14,0,0,578,579,7,8,0,0,579,580,7,12,0,0,580,581,7,4,0,0,581, - 582,7,5,0,0,582,112,1,0,0,0,583,584,7,14,0,0,584,585,7,2,0,0,585,114, - 1,0,0,0,586,587,7,1,0,0,587,588,7,0,0,0,588,589,7,3,0,0,589,590,7,3,0, - 0,590,116,1,0,0,0,591,592,7,1,0,0,592,593,7,0,0,0,593,594,7,11,0,0,594, - 595,7,8,0,0,595,118,1,0,0,0,596,597,7,1,0,0,597,598,7,0,0,0,598,599,7, - 11,0,0,599,600,7,7,0,0,600,120,1,0,0,0,601,602,7,1,0,0,602,603,7,13,0, - 0,603,604,7,8,0,0,604,605,7,1,0,0,605,606,7,15,0,0,606,607,7,16,0,0,607, - 608,7,17,0,0,608,609,7,4,0,0,609,610,7,5,0,0,610,611,7,7,0,0,611,122, - 1,0,0,0,612,613,7,1,0,0,613,614,7,17,0,0,614,615,7,3,0,0,615,616,7,18, - 0,0,616,617,7,19,0,0,617,618,7,5,0,0,618,124,1,0,0,0,619,620,7,1,0,0, - 620,621,7,17,0,0,621,622,7,19,0,0,622,623,7,19,0,0,623,624,7,8,0,0,624, - 625,7,5,0,0,625,626,7,7,0,0,626,126,1,0,0,0,627,628,7,1,0,0,628,629,7, - 17,0,0,629,630,7,19,0,0,630,631,7,19,0,0,631,632,7,4,0,0,632,633,7,7, - 0,0,633,128,1,0,0,0,634,635,7,1,0,0,635,636,7,17,0,0,636,637,7,19,0,0, - 637,638,7,19,0,0,638,639,7,4,0,0,639,640,7,7,0,0,640,641,5,95,0,0,641, - 642,7,11,0,0,642,643,7,15,0,0,643,644,7,4,0,0,644,645,7,16,0,0,645,646, - 5,95,0,0,646,647,7,1,0,0,647,648,7,13,0,0,648,649,7,8,0,0,649,650,7,1, - 0,0,650,651,7,15,0,0,651,652,7,16,0,0,652,653,7,17,0,0,653,654,7,4,0, - 0,654,655,7,5,0,0,655,656,7,7,0,0,656,130,1,0,0,0,657,658,7,1,0,0,658, - 659,7,17,0,0,659,660,7,5,0,0,660,661,7,7,0,0,661,662,7,0,0,0,662,663, - 7,4,0,0,663,664,7,5,0,0,664,665,7,11,0,0,665,132,1,0,0,0,666,667,7,1, - 0,0,667,668,7,17,0,0,668,669,7,16,0,0,669,670,7,2,0,0,670,134,1,0,0,0, - 671,672,7,1,0,0,672,673,7,17,0,0,673,674,7,18,0,0,674,675,7,5,0,0,675, - 676,7,7,0,0,676,136,1,0,0,0,677,678,7,1,0,0,678,679,7,9,0,0,679,680,7, - 8,0,0,680,681,7,0,0,0,681,682,7,7,0,0,682,683,7,8,0,0,683,138,1,0,0,0, - 684,685,7,1,0,0,685,686,7,2,0,0,686,687,7,1,0,0,687,688,7,3,0,0,688,689, - 7,8,0,0,689,140,1,0,0,0,690,691,7,6,0,0,691,692,7,0,0,0,692,693,7,7,0, - 0,693,694,7,0,0,0,694,695,7,14,0,0,695,696,7,0,0,0,696,697,7,11,0,0,697, - 698,7,8,0,0,698,142,1,0,0,0,699,700,7,6,0,0,700,701,7,14,0,0,701,702, - 7,7,0,0,702,703,7,2,0,0,703,704,7,16,0,0,704,705,7,8,0,0,705,144,1,0, - 0,0,706,707,7,6,0,0,707,708,7,8,0,0,708,709,7,20,0,0,709,710,7,0,0,0, - 710,711,7,18,0,0,711,712,7,3,0,0,712,713,7,7,0,0,713,146,1,0,0,0,714, - 715,7,6,0,0,715,716,7,8,0,0,716,717,7,3,0,0,717,718,7,8,0,0,718,719,7, - 7,0,0,719,720,7,8,0,0,720,148,1,0,0,0,721,722,7,6,0,0,722,723,7,8,0,0, - 723,724,7,11,0,0,724,725,7,1,0,0,725,150,1,0,0,0,726,727,7,6,0,0,727, - 728,7,8,0,0,728,729,7,11,0,0,729,730,7,1,0,0,730,731,7,8,0,0,731,732, - 7,5,0,0,732,733,7,6,0,0,733,734,7,4,0,0,734,735,7,5,0,0,735,736,7,12, - 0,0,736,152,1,0,0,0,737,738,7,6,0,0,738,739,7,8,0,0,739,740,7,7,0,0,740, - 741,7,0,0,0,741,742,7,1,0,0,742,743,7,13,0,0,743,154,1,0,0,0,744,745, - 7,6,0,0,745,746,7,4,0,0,746,747,7,11,0,0,747,748,7,7,0,0,748,749,7,4, - 0,0,749,750,7,5,0,0,750,751,7,1,0,0,751,752,7,7,0,0,752,156,1,0,0,0,753, - 754,7,6,0,0,754,755,7,9,0,0,755,756,7,17,0,0,756,757,7,16,0,0,757,158, - 1,0,0,0,758,759,7,8,0,0,759,760,7,3,0,0,760,761,7,11,0,0,761,762,7,8, - 0,0,762,160,1,0,0,0,763,764,7,8,0,0,764,765,7,5,0,0,765,766,7,6,0,0,766, - 162,1,0,0,0,767,768,7,8,0,0,768,769,7,5,0,0,769,770,7,6,0,0,770,771,7, - 11,0,0,771,164,1,0,0,0,772,773,7,8,0,0,773,774,7,21,0,0,774,775,7,4,0, - 0,775,776,7,11,0,0,776,777,7,7,0,0,777,778,7,11,0,0,778,166,1,0,0,0,779, - 780,7,8,0,0,780,781,7,21,0,0,781,782,7,16,0,0,782,783,7,3,0,0,783,784, - 7,0,0,0,784,785,7,4,0,0,785,786,7,5,0,0,786,168,1,0,0,0,787,788,7,8,0, - 0,788,789,7,21,0,0,789,790,7,16,0,0,790,791,7,17,0,0,791,792,7,9,0,0, - 792,793,7,7,0,0,793,170,1,0,0,0,794,795,7,8,0,0,795,796,7,21,0,0,796, - 797,7,7,0,0,797,798,7,8,0,0,798,799,7,5,0,0,799,800,7,11,0,0,800,801, - 7,4,0,0,801,802,7,17,0,0,802,803,7,5,0,0,803,172,1,0,0,0,804,805,7,20, - 0,0,805,806,7,0,0,0,806,807,7,3,0,0,807,808,7,11,0,0,808,809,7,8,0,0, - 809,174,1,0,0,0,810,811,7,20,0,0,811,812,7,9,0,0,812,813,7,17,0,0,813, - 814,7,19,0,0,814,176,1,0,0,0,815,816,7,20,0,0,816,817,7,17,0,0,817,818, - 7,9,0,0,818,819,7,1,0,0,819,820,7,8,0,0,820,178,1,0,0,0,821,822,7,20, - 0,0,822,823,7,17,0,0,823,824,7,9,0,0,824,180,1,0,0,0,825,826,7,12,0,0, - 826,827,7,3,0,0,827,828,7,17,0,0,828,829,7,14,0,0,829,182,1,0,0,0,830, - 831,7,12,0,0,831,832,7,9,0,0,832,833,7,0,0,0,833,834,7,16,0,0,834,835, - 7,13,0,0,835,184,1,0,0,0,836,837,7,12,0,0,837,838,7,9,0,0,838,839,7,17, - 0,0,839,840,7,18,0,0,840,841,7,16,0,0,841,186,1,0,0,0,842,843,7,13,0, - 0,843,844,7,8,0,0,844,845,7,0,0,0,845,846,7,6,0,0,846,847,7,8,0,0,847, - 848,7,9,0,0,848,849,7,11,0,0,849,188,1,0,0,0,850,851,7,13,0,0,851,852, - 7,4,0,0,852,853,7,5,0,0,853,854,7,7,0,0,854,190,1,0,0,0,855,856,7,4,0, - 0,856,857,7,19,0,0,857,858,7,16,0,0,858,859,7,17,0,0,859,860,7,9,0,0, - 860,861,7,7,0,0,861,192,1,0,0,0,862,863,7,4,0,0,863,864,7,5,0,0,864,865, - 7,6,0,0,865,866,7,8,0,0,866,867,7,21,0,0,867,194,1,0,0,0,868,869,7,4, - 0,0,869,870,7,20,0,0,870,196,1,0,0,0,871,872,7,4,0,0,872,873,7,5,0,0, - 873,198,1,0,0,0,874,875,7,4,0,0,875,876,7,5,0,0,876,877,7,1,0,0,877,878, - 7,9,0,0,878,879,7,8,0,0,879,880,7,19,0,0,880,881,7,8,0,0,881,882,7,5, - 0,0,882,883,7,7,0,0,883,200,1,0,0,0,884,885,7,4,0,0,885,886,7,5,0,0,886, - 887,7,11,0,0,887,888,7,7,0,0,888,889,7,0,0,0,889,890,7,3,0,0,890,891, - 7,3,0,0,891,202,1,0,0,0,892,893,7,4,0,0,893,894,7,11,0,0,894,204,1,0, - 0,0,895,896,7,22,0,0,896,897,7,17,0,0,897,898,7,4,0,0,898,899,7,5,0,0, - 899,206,1,0,0,0,900,901,7,15,0,0,901,902,7,8,0,0,902,903,7,2,0,0,903, - 208,1,0,0,0,904,905,7,3,0,0,905,906,7,4,0,0,906,907,7,19,0,0,907,908, - 7,4,0,0,908,909,7,7,0,0,909,210,1,0,0,0,910,911,7,3,0,0,911,912,7,17, - 0,0,912,913,7,0,0,0,913,914,7,6,0,0,914,212,1,0,0,0,915,916,7,3,0,0,916, - 917,7,17,0,0,917,918,7,12,0,0,918,919,7,4,0,0,919,920,7,1,0,0,920,921, - 7,0,0,0,921,922,7,3,0,0,922,214,1,0,0,0,923,924,7,19,0,0,924,925,7,0, - 0,0,925,926,7,1,0,0,926,927,7,9,0,0,927,928,7,17,0,0,928,216,1,0,0,0, - 929,930,7,19,0,0,930,931,7,0,0,0,931,932,7,7,0,0,932,933,7,1,0,0,933, - 934,7,13,0,0,934,218,1,0,0,0,935,936,7,19,0,0,936,937,7,0,0,0,937,938, - 7,21,0,0,938,939,7,23,0,0,939,940,7,0,0,0,940,941,7,3,0,0,941,942,7,18, - 0,0,942,943,7,8,0,0,943,220,1,0,0,0,944,945,7,19,0,0,945,946,7,8,0,0, - 946,947,7,9,0,0,947,948,7,12,0,0,948,949,7,8,0,0,949,222,1,0,0,0,950, - 951,7,19,0,0,951,952,7,4,0,0,952,953,7,5,0,0,953,954,7,23,0,0,954,955, - 7,0,0,0,955,956,7,3,0,0,956,957,7,18,0,0,957,958,7,8,0,0,958,224,1,0, - 0,0,959,960,7,19,0,0,960,961,7,18,0,0,961,962,7,3,0,0,962,963,7,7,0,0, - 963,964,7,4,0,0,964,965,5,95,0,0,965,966,7,22,0,0,966,967,7,17,0,0,967, - 968,7,4,0,0,968,969,7,5,0,0,969,226,1,0,0,0,970,971,7,5,0,0,971,972,7, - 17,0,0,972,228,1,0,0,0,973,974,7,5,0,0,974,975,7,17,0,0,975,976,7,6,0, - 0,976,977,7,8,0,0,977,230,1,0,0,0,978,979,7,5,0,0,979,980,7,17,0,0,980, - 981,7,7,0,0,981,232,1,0,0,0,982,983,7,5,0,0,983,984,7,17,0,0,984,985, - 7,5,0,0,985,986,7,8,0,0,986,234,1,0,0,0,987,988,7,5,0,0,988,989,7,18, - 0,0,989,990,7,3,0,0,990,991,7,3,0,0,991,236,1,0,0,0,992,993,7,17,0,0, - 993,994,7,5,0,0,994,238,1,0,0,0,995,996,7,17,0,0,996,997,7,5,0,0,997, - 998,7,3,0,0,998,999,7,2,0,0,999,240,1,0,0,0,1000,1001,7,17,0,0,1001,1002, - 7,16,0,0,1002,1003,7,7,0,0,1003,1004,7,4,0,0,1004,1005,7,17,0,0,1005, - 1006,7,5,0,0,1006,1007,7,11,0,0,1007,242,1,0,0,0,1008,1009,7,17,0,0,1009, - 1010,7,16,0,0,1010,1011,7,7,0,0,1011,1012,7,4,0,0,1012,1013,7,17,0,0, - 1013,1014,7,5,0,0,1014,1015,7,0,0,0,1015,1016,7,3,0,0,1016,244,1,0,0, - 0,1017,1018,7,17,0,0,1018,1019,7,9,0,0,1019,246,1,0,0,0,1020,1021,7,17, - 0,0,1021,1022,7,9,0,0,1022,1023,7,6,0,0,1023,1024,7,8,0,0,1024,1025,7, - 9,0,0,1025,248,1,0,0,0,1026,1027,7,16,0,0,1027,1028,7,9,0,0,1028,1029, - 7,4,0,0,1029,1030,7,19,0,0,1030,1031,7,0,0,0,1031,1032,7,9,0,0,1032,1033, - 7,2,0,0,1033,250,1,0,0,0,1034,1035,7,16,0,0,1035,1036,7,9,0,0,1036,1037, - 7,17,0,0,1037,1038,7,20,0,0,1038,1039,7,4,0,0,1039,1040,7,3,0,0,1040, - 1041,7,8,0,0,1041,252,1,0,0,0,1042,1043,7,16,0,0,1043,1044,7,9,0,0,1044, - 1045,7,17,0,0,1045,1046,7,22,0,0,1046,1047,7,8,0,0,1047,1048,7,1,0,0, - 1048,1049,7,7,0,0,1049,254,1,0,0,0,1050,1051,7,9,0,0,1051,1052,7,8,0, - 0,1052,1053,7,0,0,0,1053,1054,7,6,0,0,1054,256,1,0,0,0,1055,1056,7,9, - 0,0,1056,1057,7,8,0,0,1057,1058,7,3,0,0,1058,258,1,0,0,0,1059,1060,7, - 9,0,0,1060,1061,7,8,0,0,1061,1062,7,5,0,0,1062,1063,7,0,0,0,1063,1064, - 7,19,0,0,1064,1065,7,8,0,0,1065,260,1,0,0,0,1066,1067,7,9,0,0,1067,1068, - 7,8,0,0,1068,1069,7,7,0,0,1069,1070,7,18,0,0,1070,1071,7,9,0,0,1071,1072, - 7,5,0,0,1072,262,1,0,0,0,1073,1074,7,9,0,0,1074,1075,7,17,0,0,1075,1076, - 7,3,0,0,1076,1077,7,3,0,0,1077,1078,7,14,0,0,1078,1079,7,0,0,0,1079,1080, - 7,1,0,0,1080,1081,7,15,0,0,1081,264,1,0,0,0,1082,1083,7,9,0,0,1083,1084, - 7,17,0,0,1084,1085,7,3,0,0,1085,1086,7,3,0,0,1086,1087,7,14,0,0,1087, - 1088,7,0,0,0,1088,1089,7,1,0,0,1089,1090,7,15,0,0,1090,1091,5,95,0,0, - 1091,1092,7,11,0,0,1092,1093,7,15,0,0,1093,1094,7,4,0,0,1094,1095,7,16, - 0,0,1095,1096,5,95,0,0,1096,1097,7,1,0,0,1097,1098,7,13,0,0,1098,1099, - 7,8,0,0,1099,1100,7,1,0,0,1100,1101,7,15,0,0,1101,1102,7,16,0,0,1102, - 1103,7,17,0,0,1103,1104,7,4,0,0,1104,1105,7,5,0,0,1105,1106,7,7,0,0,1106, - 266,1,0,0,0,1107,1108,7,11,0,0,1108,1109,7,8,0,0,1109,1110,7,24,0,0,1110, - 1111,7,18,0,0,1111,1112,7,8,0,0,1112,1113,7,5,0,0,1113,1114,7,1,0,0,1114, - 1115,7,8,0,0,1115,268,1,0,0,0,1116,1117,7,11,0,0,1117,1118,7,8,0,0,1118, - 1119,7,7,0,0,1119,270,1,0,0,0,1120,1121,7,11,0,0,1121,1122,7,13,0,0,1122, - 1123,7,17,0,0,1123,1124,7,9,0,0,1124,1125,7,7,0,0,1125,1126,7,8,0,0,1126, - 1127,7,11,0,0,1127,1128,7,7,0,0,1128,272,1,0,0,0,1129,1130,7,11,0,0,1130, - 1131,7,7,0,0,1131,1132,7,0,0,0,1132,1133,7,9,0,0,1133,1134,7,7,0,0,1134, - 274,1,0,0,0,1135,1136,7,11,0,0,1136,1137,7,7,0,0,1137,1138,7,0,0,0,1138, - 1139,7,9,0,0,1139,1140,7,7,0,0,1140,1141,7,11,0,0,1141,276,1,0,0,0,1142, - 1143,7,11,0,0,1143,1144,7,7,0,0,1144,1145,7,9,0,0,1145,1146,7,18,0,0, - 1146,1147,7,1,0,0,1147,1148,7,7,0,0,1148,278,1,0,0,0,1149,1150,7,7,0, - 0,1150,1151,7,0,0,0,1151,1152,7,14,0,0,1152,1153,7,3,0,0,1153,1154,7, - 8,0,0,1154,280,1,0,0,0,1155,1156,7,7,0,0,1156,1157,7,13,0,0,1157,1158, - 7,8,0,0,1158,1159,7,5,0,0,1159,282,1,0,0,0,1160,1161,7,7,0,0,1161,1162, - 7,17,0,0,1162,284,1,0,0,0,1163,1164,7,7,0,0,1164,1165,7,9,0,0,1165,1166, - 7,0,0,0,1166,1167,7,4,0,0,1167,1168,7,3,0,0,1168,286,1,0,0,0,1169,1170, - 7,7,0,0,1170,1171,7,9,0,0,1171,1172,7,0,0,0,1172,1173,7,5,0,0,1173,1174, - 7,11,0,0,1174,1175,7,0,0,0,1175,1176,7,1,0,0,1176,1177,7,7,0,0,1177,1178, - 7,4,0,0,1178,1179,7,17,0,0,1179,1180,7,5,0,0,1180,288,1,0,0,0,1181,1182, - 7,7,0,0,1182,1183,7,9,0,0,1183,1184,7,18,0,0,1184,1185,7,8,0,0,1185,290, - 1,0,0,0,1186,1187,7,7,0,0,1187,1188,7,2,0,0,1188,1189,7,16,0,0,1189,1190, - 7,8,0,0,1190,292,1,0,0,0,1191,1192,7,18,0,0,1192,1193,7,5,0,0,1193,1194, - 7,4,0,0,1194,1195,7,17,0,0,1195,1196,7,5,0,0,1196,294,1,0,0,0,1197,1198, - 7,18,0,0,1198,1199,7,5,0,0,1199,1200,7,25,0,0,1200,1201,7,4,0,0,1201, - 1202,7,5,0,0,1202,1203,7,6,0,0,1203,296,1,0,0,0,1204,1205,7,18,0,0,1205, - 1206,7,5,0,0,1206,1207,7,4,0,0,1207,1208,7,5,0,0,1208,1209,7,11,0,0,1209, - 1210,7,7,0,0,1210,1211,7,0,0,0,1211,1212,7,3,0,0,1212,1213,7,3,0,0,1213, - 298,1,0,0,0,1214,1215,7,18,0,0,1215,1216,7,16,0,0,1216,1217,7,6,0,0,1217, - 1218,7,0,0,0,1218,1219,7,7,0,0,1219,1220,7,8,0,0,1220,300,1,0,0,0,1221, - 1222,7,18,0,0,1222,1223,7,11,0,0,1223,1224,7,8,0,0,1224,302,1,0,0,0,1225, - 1226,7,25,0,0,1226,1227,7,13,0,0,1227,1228,7,8,0,0,1228,1229,7,5,0,0, - 1229,304,1,0,0,0,1230,1231,7,25,0,0,1231,1232,7,13,0,0,1232,1233,7,8, - 0,0,1233,1234,7,9,0,0,1234,1235,7,8,0,0,1235,306,1,0,0,0,1236,1237,7, - 25,0,0,1237,1238,7,4,0,0,1238,1239,7,7,0,0,1239,1240,7,13,0,0,1240,308, - 1,0,0,0,1241,1242,7,25,0,0,1242,1243,7,9,0,0,1243,1244,7,4,0,0,1244,1245, - 7,7,0,0,1245,1246,7,8,0,0,1246,310,1,0,0,0,1247,1248,7,25,0,0,1248,1249, - 7,11,0,0,1249,1250,7,13,0,0,1250,1251,7,17,0,0,1251,1252,7,9,0,0,1252, - 1253,7,7,0,0,1253,1254,7,8,0,0,1254,1255,7,11,0,0,1255,1256,7,7,0,0,1256, - 312,1,0,0,0,1257,1258,7,21,0,0,1258,1259,7,17,0,0,1259,1260,7,9,0,0,1260, - 314,1,0,0,0,1261,1262,7,11,0,0,1262,1263,7,4,0,0,1263,1264,7,5,0,0,1264, - 1265,7,12,0,0,1265,1266,7,3,0,0,1266,1267,7,8,0,0,1267,316,1,0,0,0,1268, - 1269,7,2,0,0,1269,1270,7,4,0,0,1270,1271,7,8,0,0,1271,1272,7,3,0,0,1272, - 1273,7,6,0,0,1273,318,1,0,0,0,1274,1275,7,18,0,0,1275,1276,7,11,0,0,1276, - 1277,7,8,0,0,1277,1278,7,9,0,0,1278,320,1,0,0,0,1279,1280,7,16,0,0,1280, - 1281,7,0,0,0,1281,1282,7,11,0,0,1282,1283,7,11,0,0,1283,1284,7,25,0,0, - 1284,1285,7,17,0,0,1285,1286,7,9,0,0,1286,1287,7,6,0,0,1287,322,1,0,0, - 0,1288,1289,7,9,0,0,1289,1290,7,17,0,0,1290,1291,7,3,0,0,1291,1292,7, - 8,0,0,1292,324,1,0,0,0,1293,1294,7,19,0,0,1294,1295,7,0,0,0,1295,1296, - 7,16,0,0,1296,326,1,0,0,0,1297,1298,7,6,0,0,1298,1299,7,8,0,0,1299,1300, - 7,1,0,0,1300,1301,7,4,0,0,1301,1302,7,19,0,0,1302,1303,7,0,0,0,1303,1304, - 7,3,0,0,1304,328,1,0,0,0,1305,1306,5,42,0,0,1306,330,1,0,0,0,1307,1308, - 7,11,0,0,1308,1309,7,15,0,0,1309,1310,7,4,0,0,1310,1311,7,16,0,0,1311, - 332,1,0,0,0,1312,1313,5,33,0,0,1313,1314,5,61,0,0,1314,334,1,0,0,0,1315, - 1316,5,58,0,0,1316,336,1,0,0,0,1317,1318,5,46,0,0,1318,1319,5,46,0,0, - 1319,338,1,0,0,0,1320,1321,5,45,0,0,1321,340,1,0,0,0,1322,1323,5,33,0, - 0,1323,342,1,0,0,0,1324,1329,5,34,0,0,1325,1328,3,409,204,0,1326,1328, - 3,345,172,0,1327,1325,1,0,0,0,1327,1326,1,0,0,0,1328,1331,1,0,0,0,1329, - 1327,1,0,0,0,1329,1330,1,0,0,0,1330,1332,1,0,0,0,1331,1329,1,0,0,0,1332, - 1343,5,34,0,0,1333,1338,5,39,0,0,1334,1337,3,389,194,0,1335,1337,3,345, - 172,0,1336,1334,1,0,0,0,1336,1335,1,0,0,0,1337,1340,1,0,0,0,1338,1336, - 1,0,0,0,1338,1339,1,0,0,0,1339,1341,1,0,0,0,1340,1338,1,0,0,0,1341,1343, - 5,39,0,0,1342,1324,1,0,0,0,1342,1333,1,0,0,0,1343,344,1,0,0,0,1344,1366, - 5,92,0,0,1345,1367,7,26,0,0,1346,1347,7,21,0,0,1347,1348,3,351,175,0, - 1348,1349,3,351,175,0,1349,1367,1,0,0,0,1350,1351,7,18,0,0,1351,1352, - 3,351,175,0,1352,1353,3,351,175,0,1353,1354,3,351,175,0,1354,1355,3,351, - 175,0,1355,1367,1,0,0,0,1356,1357,7,18,0,0,1357,1358,3,351,175,0,1358, - 1359,3,351,175,0,1359,1360,3,351,175,0,1360,1361,3,351,175,0,1361,1362, - 3,351,175,0,1362,1363,3,351,175,0,1363,1364,3,351,175,0,1364,1365,3,351, - 175,0,1365,1367,1,0,0,0,1366,1345,1,0,0,0,1366,1346,1,0,0,0,1366,1350, - 1,0,0,0,1366,1356,1,0,0,0,1367,346,1,0,0,0,1368,1377,3,359,179,0,1369, - 1373,3,355,177,0,1370,1372,3,353,176,0,1371,1370,1,0,0,0,1372,1375,1, - 0,0,0,1373,1371,1,0,0,0,1373,1374,1,0,0,0,1374,1377,1,0,0,0,1375,1373, - 1,0,0,0,1376,1368,1,0,0,0,1376,1369,1,0,0,0,1377,348,1,0,0,0,1378,1380, - 7,27,0,0,1379,1378,1,0,0,0,1380,350,1,0,0,0,1381,1384,3,353,176,0,1382, - 1384,3,349,174,0,1383,1381,1,0,0,0,1383,1382,1,0,0,0,1384,352,1,0,0,0, - 1385,1388,3,359,179,0,1386,1388,3,355,177,0,1387,1385,1,0,0,0,1387,1386, - 1,0,0,0,1388,354,1,0,0,0,1389,1392,3,357,178,0,1390,1392,2,56,57,0,1391, - 1389,1,0,0,0,1391,1390,1,0,0,0,1392,356,1,0,0,0,1393,1394,2,49,55,0,1394, - 358,1,0,0,0,1395,1396,5,48,0,0,1396,360,1,0,0,0,1397,1399,3,353,176,0, - 1398,1397,1,0,0,0,1399,1400,1,0,0,0,1400,1398,1,0,0,0,1400,1401,1,0,0, - 0,1401,1420,1,0,0,0,1402,1404,3,353,176,0,1403,1402,1,0,0,0,1404,1405, - 1,0,0,0,1405,1403,1,0,0,0,1405,1406,1,0,0,0,1406,1407,1,0,0,0,1407,1409, - 5,46,0,0,1408,1410,3,353,176,0,1409,1408,1,0,0,0,1410,1411,1,0,0,0,1411, - 1409,1,0,0,0,1411,1412,1,0,0,0,1412,1420,1,0,0,0,1413,1415,5,46,0,0,1414, - 1416,3,353,176,0,1415,1414,1,0,0,0,1416,1417,1,0,0,0,1417,1415,1,0,0, - 0,1417,1418,1,0,0,0,1418,1420,1,0,0,0,1419,1398,1,0,0,0,1419,1403,1,0, - 0,0,1419,1413,1,0,0,0,1420,1421,1,0,0,0,1421,1423,7,8,0,0,1422,1424,5, - 45,0,0,1423,1422,1,0,0,0,1423,1424,1,0,0,0,1424,1426,1,0,0,0,1425,1427, - 3,353,176,0,1426,1425,1,0,0,0,1427,1428,1,0,0,0,1428,1426,1,0,0,0,1428, - 1429,1,0,0,0,1429,362,1,0,0,0,1430,1432,3,353,176,0,1431,1430,1,0,0,0, - 1432,1435,1,0,0,0,1433,1431,1,0,0,0,1433,1434,1,0,0,0,1434,1436,1,0,0, - 0,1435,1433,1,0,0,0,1436,1438,5,46,0,0,1437,1439,3,353,176,0,1438,1437, - 1,0,0,0,1439,1440,1,0,0,0,1440,1438,1,0,0,0,1440,1441,1,0,0,0,1441,364, - 1,0,0,0,1442,1446,3,367,183,0,1443,1445,3,369,184,0,1444,1443,1,0,0,0, - 1445,1448,1,0,0,0,1446,1444,1,0,0,0,1446,1447,1,0,0,0,1447,366,1,0,0, - 0,1448,1446,1,0,0,0,1449,1452,3,417,208,0,1450,1452,3,405,202,0,1451, - 1449,1,0,0,0,1451,1450,1,0,0,0,1452,368,1,0,0,0,1453,1456,3,385,192,0, - 1454,1456,3,401,200,0,1455,1453,1,0,0,0,1455,1454,1,0,0,0,1456,370,1, - 0,0,0,1457,1461,5,96,0,0,1458,1460,3,381,190,0,1459,1458,1,0,0,0,1460, - 1463,1,0,0,0,1461,1459,1,0,0,0,1461,1462,1,0,0,0,1462,1464,1,0,0,0,1463, - 1461,1,0,0,0,1464,1466,5,96,0,0,1465,1457,1,0,0,0,1466,1467,1,0,0,0,1467, - 1465,1,0,0,0,1467,1468,1,0,0,0,1468,372,1,0,0,0,1469,1471,3,375,187,0, - 1470,1469,1,0,0,0,1471,1472,1,0,0,0,1472,1470,1,0,0,0,1472,1473,1,0,0, - 0,1473,374,1,0,0,0,1474,1487,3,403,201,0,1475,1487,3,407,203,0,1476,1487, - 3,411,205,0,1477,1487,3,413,206,0,1478,1487,3,379,189,0,1479,1487,3,399, - 199,0,1480,1487,3,397,198,0,1481,1487,3,395,197,0,1482,1487,3,383,191, - 0,1483,1487,3,415,207,0,1484,1487,7,28,0,0,1485,1487,3,377,188,0,1486, - 1474,1,0,0,0,1486,1475,1,0,0,0,1486,1476,1,0,0,0,1486,1477,1,0,0,0,1486, - 1478,1,0,0,0,1486,1479,1,0,0,0,1486,1480,1,0,0,0,1486,1481,1,0,0,0,1486, - 1482,1,0,0,0,1486,1483,1,0,0,0,1486,1484,1,0,0,0,1486,1485,1,0,0,0,1487, - 376,1,0,0,0,1488,1489,5,47,0,0,1489,1490,5,42,0,0,1490,1496,1,0,0,0,1491, - 1495,3,387,193,0,1492,1493,5,42,0,0,1493,1495,3,393,196,0,1494,1491,1, - 0,0,0,1494,1492,1,0,0,0,1495,1498,1,0,0,0,1496,1494,1,0,0,0,1496,1497, - 1,0,0,0,1497,1499,1,0,0,0,1498,1496,1,0,0,0,1499,1500,5,42,0,0,1500,1518, - 5,47,0,0,1501,1502,5,47,0,0,1502,1503,5,47,0,0,1503,1507,1,0,0,0,1504, - 1506,3,391,195,0,1505,1504,1,0,0,0,1506,1509,1,0,0,0,1507,1505,1,0,0, - 0,1507,1508,1,0,0,0,1508,1511,1,0,0,0,1509,1507,1,0,0,0,1510,1512,3,399, - 199,0,1511,1510,1,0,0,0,1511,1512,1,0,0,0,1512,1515,1,0,0,0,1513,1516, - 3,411,205,0,1514,1516,5,0,0,1,1515,1513,1,0,0,0,1515,1514,1,0,0,0,1516, - 1518,1,0,0,0,1517,1488,1,0,0,0,1517,1501,1,0,0,0,1518,378,1,0,0,0,1519, - 1520,7,29,0,0,1520,380,1,0,0,0,1521,1522,8,30,0,0,1522,382,1,0,0,0,1523, - 1524,7,31,0,0,1524,384,1,0,0,0,1525,1526,7,32,0,0,1526,386,1,0,0,0,1527, - 1528,8,33,0,0,1528,388,1,0,0,0,1529,1530,8,34,0,0,1530,390,1,0,0,0,1531, - 1532,8,35,0,0,1532,392,1,0,0,0,1533,1534,8,36,0,0,1534,394,1,0,0,0,1535, - 1536,7,37,0,0,1536,396,1,0,0,0,1537,1538,7,38,0,0,1538,398,1,0,0,0,1539, - 1540,7,39,0,0,1540,400,1,0,0,0,1541,1542,7,40,0,0,1542,402,1,0,0,0,1543, - 1544,7,41,0,0,1544,404,1,0,0,0,1545,1546,7,42,0,0,1546,406,1,0,0,0,1547, - 1548,7,43,0,0,1548,408,1,0,0,0,1549,1550,8,44,0,0,1550,410,1,0,0,0,1551, - 1552,7,45,0,0,1552,412,1,0,0,0,1553,1554,7,46,0,0,1554,414,1,0,0,0,1555, - 1556,7,47,0,0,1556,416,1,0,0,0,1557,1558,7,48,0,0,1558,418,1,0,0,0,1559, - 1560,9,0,0,0,1560,420,1,0,0,0,35,0,1327,1329,1336,1338,1342,1366,1373, - 1376,1379,1383,1387,1391,1400,1405,1411,1417,1419,1423,1428,1433,1440, - 1446,1451,1455,1461,1467,1472,1486,1494,1496,1507,1511,1515,1517,0 + 377,1,0,0,0,0,379,1,0,0,0,0,421,1,0,0,0,1,423,1,0,0,0,3,425,1,0,0,0,5, + 427,1,0,0,0,7,429,1,0,0,0,9,431,1,0,0,0,11,433,1,0,0,0,13,435,1,0,0,0, + 15,437,1,0,0,0,17,439,1,0,0,0,19,441,1,0,0,0,21,443,1,0,0,0,23,445,1, + 0,0,0,25,448,1,0,0,0,27,450,1,0,0,0,29,453,1,0,0,0,31,455,1,0,0,0,33, + 458,1,0,0,0,35,460,1,0,0,0,37,463,1,0,0,0,39,466,1,0,0,0,41,468,1,0,0, + 0,43,470,1,0,0,0,45,472,1,0,0,0,47,474,1,0,0,0,49,477,1,0,0,0,51,479, + 1,0,0,0,53,481,1,0,0,0,55,483,1,0,0,0,57,485,1,0,0,0,59,487,1,0,0,0,61, + 489,1,0,0,0,63,491,1,0,0,0,65,493,1,0,0,0,67,495,1,0,0,0,69,497,1,0,0, + 0,71,499,1,0,0,0,73,501,1,0,0,0,75,503,1,0,0,0,77,505,1,0,0,0,79,507, + 1,0,0,0,81,509,1,0,0,0,83,511,1,0,0,0,85,513,1,0,0,0,87,515,1,0,0,0,89, + 517,1,0,0,0,91,525,1,0,0,0,93,529,1,0,0,0,95,533,1,0,0,0,97,537,1,0,0, + 0,99,543,1,0,0,0,101,551,1,0,0,0,103,555,1,0,0,0,105,558,1,0,0,0,107, + 562,1,0,0,0,109,572,1,0,0,0,111,579,1,0,0,0,113,585,1,0,0,0,115,588,1, + 0,0,0,117,593,1,0,0,0,119,598,1,0,0,0,121,603,1,0,0,0,123,614,1,0,0,0, + 125,621,1,0,0,0,127,629,1,0,0,0,129,636,1,0,0,0,131,659,1,0,0,0,133,668, + 1,0,0,0,135,673,1,0,0,0,137,679,1,0,0,0,139,686,1,0,0,0,141,692,1,0,0, + 0,143,701,1,0,0,0,145,708,1,0,0,0,147,716,1,0,0,0,149,723,1,0,0,0,151, + 728,1,0,0,0,153,739,1,0,0,0,155,746,1,0,0,0,157,755,1,0,0,0,159,760,1, + 0,0,0,161,765,1,0,0,0,163,769,1,0,0,0,165,774,1,0,0,0,167,781,1,0,0,0, + 169,789,1,0,0,0,171,796,1,0,0,0,173,806,1,0,0,0,175,812,1,0,0,0,177,817, + 1,0,0,0,179,823,1,0,0,0,181,827,1,0,0,0,183,832,1,0,0,0,185,838,1,0,0, + 0,187,844,1,0,0,0,189,852,1,0,0,0,191,857,1,0,0,0,193,864,1,0,0,0,195, + 870,1,0,0,0,197,873,1,0,0,0,199,876,1,0,0,0,201,886,1,0,0,0,203,894,1, + 0,0,0,205,897,1,0,0,0,207,902,1,0,0,0,209,906,1,0,0,0,211,912,1,0,0,0, + 213,917,1,0,0,0,215,925,1,0,0,0,217,931,1,0,0,0,219,937,1,0,0,0,221,946, + 1,0,0,0,223,952,1,0,0,0,225,961,1,0,0,0,227,972,1,0,0,0,229,975,1,0,0, + 0,231,980,1,0,0,0,233,984,1,0,0,0,235,989,1,0,0,0,237,994,1,0,0,0,239, + 997,1,0,0,0,241,1002,1,0,0,0,243,1010,1,0,0,0,245,1019,1,0,0,0,247,1022, + 1,0,0,0,249,1028,1,0,0,0,251,1036,1,0,0,0,253,1044,1,0,0,0,255,1052,1, + 0,0,0,257,1057,1,0,0,0,259,1061,1,0,0,0,261,1068,1,0,0,0,263,1075,1,0, + 0,0,265,1084,1,0,0,0,267,1109,1,0,0,0,269,1118,1,0,0,0,271,1122,1,0,0, + 0,273,1129,1,0,0,0,275,1138,1,0,0,0,277,1144,1,0,0,0,279,1151,1,0,0,0, + 281,1158,1,0,0,0,283,1164,1,0,0,0,285,1169,1,0,0,0,287,1172,1,0,0,0,289, + 1178,1,0,0,0,291,1190,1,0,0,0,293,1195,1,0,0,0,295,1200,1,0,0,0,297,1206, + 1,0,0,0,299,1213,1,0,0,0,301,1223,1,0,0,0,303,1230,1,0,0,0,305,1234,1, + 0,0,0,307,1239,1,0,0,0,309,1245,1,0,0,0,311,1250,1,0,0,0,313,1256,1,0, + 0,0,315,1266,1,0,0,0,317,1270,1,0,0,0,319,1277,1,0,0,0,321,1283,1,0,0, + 0,323,1288,1,0,0,0,325,1297,1,0,0,0,327,1302,1,0,0,0,329,1306,1,0,0,0, + 331,1314,1,0,0,0,333,1316,1,0,0,0,335,1321,1,0,0,0,337,1324,1,0,0,0,339, + 1326,1,0,0,0,341,1329,1,0,0,0,343,1331,1,0,0,0,345,1351,1,0,0,0,347,1353, + 1,0,0,0,349,1385,1,0,0,0,351,1388,1,0,0,0,353,1392,1,0,0,0,355,1396,1, + 0,0,0,357,1400,1,0,0,0,359,1402,1,0,0,0,361,1404,1,0,0,0,363,1428,1,0, + 0,0,365,1442,1,0,0,0,367,1451,1,0,0,0,369,1460,1,0,0,0,371,1464,1,0,0, + 0,373,1474,1,0,0,0,375,1479,1,0,0,0,377,1495,1,0,0,0,379,1526,1,0,0,0, + 381,1528,1,0,0,0,383,1530,1,0,0,0,385,1532,1,0,0,0,387,1534,1,0,0,0,389, + 1536,1,0,0,0,391,1538,1,0,0,0,393,1540,1,0,0,0,395,1542,1,0,0,0,397,1544, + 1,0,0,0,399,1546,1,0,0,0,401,1548,1,0,0,0,403,1550,1,0,0,0,405,1552,1, + 0,0,0,407,1554,1,0,0,0,409,1556,1,0,0,0,411,1558,1,0,0,0,413,1560,1,0, + 0,0,415,1562,1,0,0,0,417,1564,1,0,0,0,419,1566,1,0,0,0,421,1568,1,0,0, + 0,423,424,5,59,0,0,424,2,1,0,0,0,425,426,5,40,0,0,426,4,1,0,0,0,427,428, + 5,41,0,0,428,6,1,0,0,0,429,430,5,44,0,0,430,8,1,0,0,0,431,432,5,46,0, + 0,432,10,1,0,0,0,433,434,5,61,0,0,434,12,1,0,0,0,435,436,5,91,0,0,436, + 14,1,0,0,0,437,438,5,93,0,0,438,16,1,0,0,0,439,440,5,123,0,0,440,18,1, + 0,0,0,441,442,5,125,0,0,442,20,1,0,0,0,443,444,5,124,0,0,444,22,1,0,0, + 0,445,446,5,60,0,0,446,447,5,62,0,0,447,24,1,0,0,0,448,449,5,60,0,0,449, + 26,1,0,0,0,450,451,5,60,0,0,451,452,5,61,0,0,452,28,1,0,0,0,453,454,5, + 62,0,0,454,30,1,0,0,0,455,456,5,62,0,0,456,457,5,61,0,0,457,32,1,0,0, + 0,458,459,5,38,0,0,459,34,1,0,0,0,460,461,5,62,0,0,461,462,5,62,0,0,462, + 36,1,0,0,0,463,464,5,60,0,0,464,465,5,60,0,0,465,38,1,0,0,0,466,467,5, + 43,0,0,467,40,1,0,0,0,468,469,5,47,0,0,469,42,1,0,0,0,470,471,5,37,0, + 0,471,44,1,0,0,0,472,473,5,94,0,0,473,46,1,0,0,0,474,475,5,61,0,0,475, + 476,5,126,0,0,476,48,1,0,0,0,477,478,5,36,0,0,478,50,1,0,0,0,479,480, + 5,10216,0,0,480,52,1,0,0,0,481,482,5,12296,0,0,482,54,1,0,0,0,483,484, + 5,65124,0,0,484,56,1,0,0,0,485,486,5,65308,0,0,486,58,1,0,0,0,487,488, + 5,10217,0,0,488,60,1,0,0,0,489,490,5,12297,0,0,490,62,1,0,0,0,491,492, + 5,65125,0,0,492,64,1,0,0,0,493,494,5,65310,0,0,494,66,1,0,0,0,495,496, + 5,173,0,0,496,68,1,0,0,0,497,498,5,8208,0,0,498,70,1,0,0,0,499,500,5, + 8209,0,0,500,72,1,0,0,0,501,502,5,8210,0,0,502,74,1,0,0,0,503,504,5,8211, + 0,0,504,76,1,0,0,0,505,506,5,8212,0,0,506,78,1,0,0,0,507,508,5,8213,0, + 0,508,80,1,0,0,0,509,510,5,8722,0,0,510,82,1,0,0,0,511,512,5,65112,0, + 0,512,84,1,0,0,0,513,514,5,65123,0,0,514,86,1,0,0,0,515,516,5,65293,0, + 0,516,88,1,0,0,0,517,518,7,0,0,0,518,519,7,1,0,0,519,520,7,2,0,0,520, + 521,7,1,0,0,521,522,7,3,0,0,522,523,7,4,0,0,523,524,7,1,0,0,524,90,1, + 0,0,0,525,526,7,0,0,0,526,527,7,5,0,0,527,528,7,2,0,0,528,92,1,0,0,0, + 529,530,7,0,0,0,530,531,7,6,0,0,531,532,7,6,0,0,532,94,1,0,0,0,533,534, + 7,0,0,0,534,535,7,3,0,0,535,536,7,3,0,0,536,96,1,0,0,0,537,538,7,0,0, + 0,538,539,7,3,0,0,539,540,7,7,0,0,540,541,7,8,0,0,541,542,7,9,0,0,542, + 98,1,0,0,0,543,544,7,0,0,0,544,545,7,5,0,0,545,546,7,0,0,0,546,547,7, + 3,0,0,547,548,7,2,0,0,548,549,7,10,0,0,549,550,7,8,0,0,550,100,1,0,0, + 0,551,552,7,0,0,0,552,553,7,5,0,0,553,554,7,6,0,0,554,102,1,0,0,0,555, + 556,7,0,0,0,556,557,7,11,0,0,557,104,1,0,0,0,558,559,7,0,0,0,559,560, + 7,11,0,0,560,561,7,1,0,0,561,106,1,0,0,0,562,563,7,0,0,0,563,564,7,11, + 0,0,564,565,7,1,0,0,565,566,7,8,0,0,566,567,7,5,0,0,567,568,7,6,0,0,568, + 569,7,4,0,0,569,570,7,5,0,0,570,571,7,12,0,0,571,108,1,0,0,0,572,573, + 7,0,0,0,573,574,7,7,0,0,574,575,7,7,0,0,575,576,7,0,0,0,576,577,7,1,0, + 0,577,578,7,13,0,0,578,110,1,0,0,0,579,580,7,14,0,0,580,581,7,8,0,0,581, + 582,7,12,0,0,582,583,7,4,0,0,583,584,7,5,0,0,584,112,1,0,0,0,585,586, + 7,14,0,0,586,587,7,2,0,0,587,114,1,0,0,0,588,589,7,1,0,0,589,590,7,0, + 0,0,590,591,7,3,0,0,591,592,7,3,0,0,592,116,1,0,0,0,593,594,7,1,0,0,594, + 595,7,0,0,0,595,596,7,11,0,0,596,597,7,8,0,0,597,118,1,0,0,0,598,599, + 7,1,0,0,599,600,7,0,0,0,600,601,7,11,0,0,601,602,7,7,0,0,602,120,1,0, + 0,0,603,604,7,1,0,0,604,605,7,13,0,0,605,606,7,8,0,0,606,607,7,1,0,0, + 607,608,7,15,0,0,608,609,7,16,0,0,609,610,7,17,0,0,610,611,7,4,0,0,611, + 612,7,5,0,0,612,613,7,7,0,0,613,122,1,0,0,0,614,615,7,1,0,0,615,616,7, + 17,0,0,616,617,7,3,0,0,617,618,7,18,0,0,618,619,7,19,0,0,619,620,7,5, + 0,0,620,124,1,0,0,0,621,622,7,1,0,0,622,623,7,17,0,0,623,624,7,19,0,0, + 624,625,7,19,0,0,625,626,7,8,0,0,626,627,7,5,0,0,627,628,7,7,0,0,628, + 126,1,0,0,0,629,630,7,1,0,0,630,631,7,17,0,0,631,632,7,19,0,0,632,633, + 7,19,0,0,633,634,7,4,0,0,634,635,7,7,0,0,635,128,1,0,0,0,636,637,7,1, + 0,0,637,638,7,17,0,0,638,639,7,19,0,0,639,640,7,19,0,0,640,641,7,4,0, + 0,641,642,7,7,0,0,642,643,5,95,0,0,643,644,7,11,0,0,644,645,7,15,0,0, + 645,646,7,4,0,0,646,647,7,16,0,0,647,648,5,95,0,0,648,649,7,1,0,0,649, + 650,7,13,0,0,650,651,7,8,0,0,651,652,7,1,0,0,652,653,7,15,0,0,653,654, + 7,16,0,0,654,655,7,17,0,0,655,656,7,4,0,0,656,657,7,5,0,0,657,658,7,7, + 0,0,658,130,1,0,0,0,659,660,7,1,0,0,660,661,7,17,0,0,661,662,7,5,0,0, + 662,663,7,7,0,0,663,664,7,0,0,0,664,665,7,4,0,0,665,666,7,5,0,0,666,667, + 7,11,0,0,667,132,1,0,0,0,668,669,7,1,0,0,669,670,7,17,0,0,670,671,7,16, + 0,0,671,672,7,2,0,0,672,134,1,0,0,0,673,674,7,1,0,0,674,675,7,17,0,0, + 675,676,7,18,0,0,676,677,7,5,0,0,677,678,7,7,0,0,678,136,1,0,0,0,679, + 680,7,1,0,0,680,681,7,9,0,0,681,682,7,8,0,0,682,683,7,0,0,0,683,684,7, + 7,0,0,684,685,7,8,0,0,685,138,1,0,0,0,686,687,7,1,0,0,687,688,7,2,0,0, + 688,689,7,1,0,0,689,690,7,3,0,0,690,691,7,8,0,0,691,140,1,0,0,0,692,693, + 7,6,0,0,693,694,7,0,0,0,694,695,7,7,0,0,695,696,7,0,0,0,696,697,7,14, + 0,0,697,698,7,0,0,0,698,699,7,11,0,0,699,700,7,8,0,0,700,142,1,0,0,0, + 701,702,7,6,0,0,702,703,7,14,0,0,703,704,7,7,0,0,704,705,7,2,0,0,705, + 706,7,16,0,0,706,707,7,8,0,0,707,144,1,0,0,0,708,709,7,6,0,0,709,710, + 7,8,0,0,710,711,7,20,0,0,711,712,7,0,0,0,712,713,7,18,0,0,713,714,7,3, + 0,0,714,715,7,7,0,0,715,146,1,0,0,0,716,717,7,6,0,0,717,718,7,8,0,0,718, + 719,7,3,0,0,719,720,7,8,0,0,720,721,7,7,0,0,721,722,7,8,0,0,722,148,1, + 0,0,0,723,724,7,6,0,0,724,725,7,8,0,0,725,726,7,11,0,0,726,727,7,1,0, + 0,727,150,1,0,0,0,728,729,7,6,0,0,729,730,7,8,0,0,730,731,7,11,0,0,731, + 732,7,1,0,0,732,733,7,8,0,0,733,734,7,5,0,0,734,735,7,6,0,0,735,736,7, + 4,0,0,736,737,7,5,0,0,737,738,7,12,0,0,738,152,1,0,0,0,739,740,7,6,0, + 0,740,741,7,8,0,0,741,742,7,7,0,0,742,743,7,0,0,0,743,744,7,1,0,0,744, + 745,7,13,0,0,745,154,1,0,0,0,746,747,7,6,0,0,747,748,7,4,0,0,748,749, + 7,11,0,0,749,750,7,7,0,0,750,751,7,4,0,0,751,752,7,5,0,0,752,753,7,1, + 0,0,753,754,7,7,0,0,754,156,1,0,0,0,755,756,7,6,0,0,756,757,7,9,0,0,757, + 758,7,17,0,0,758,759,7,16,0,0,759,158,1,0,0,0,760,761,7,8,0,0,761,762, + 7,3,0,0,762,763,7,11,0,0,763,764,7,8,0,0,764,160,1,0,0,0,765,766,7,8, + 0,0,766,767,7,5,0,0,767,768,7,6,0,0,768,162,1,0,0,0,769,770,7,8,0,0,770, + 771,7,5,0,0,771,772,7,6,0,0,772,773,7,11,0,0,773,164,1,0,0,0,774,775, + 7,8,0,0,775,776,7,21,0,0,776,777,7,4,0,0,777,778,7,11,0,0,778,779,7,7, + 0,0,779,780,7,11,0,0,780,166,1,0,0,0,781,782,7,8,0,0,782,783,7,21,0,0, + 783,784,7,16,0,0,784,785,7,3,0,0,785,786,7,0,0,0,786,787,7,4,0,0,787, + 788,7,5,0,0,788,168,1,0,0,0,789,790,7,8,0,0,790,791,7,21,0,0,791,792, + 7,16,0,0,792,793,7,17,0,0,793,794,7,9,0,0,794,795,7,7,0,0,795,170,1,0, + 0,0,796,797,7,8,0,0,797,798,7,21,0,0,798,799,7,7,0,0,799,800,7,8,0,0, + 800,801,7,5,0,0,801,802,7,11,0,0,802,803,7,4,0,0,803,804,7,17,0,0,804, + 805,7,5,0,0,805,172,1,0,0,0,806,807,7,20,0,0,807,808,7,0,0,0,808,809, + 7,3,0,0,809,810,7,11,0,0,810,811,7,8,0,0,811,174,1,0,0,0,812,813,7,20, + 0,0,813,814,7,9,0,0,814,815,7,17,0,0,815,816,7,19,0,0,816,176,1,0,0,0, + 817,818,7,20,0,0,818,819,7,17,0,0,819,820,7,9,0,0,820,821,7,1,0,0,821, + 822,7,8,0,0,822,178,1,0,0,0,823,824,7,20,0,0,824,825,7,17,0,0,825,826, + 7,9,0,0,826,180,1,0,0,0,827,828,7,12,0,0,828,829,7,3,0,0,829,830,7,17, + 0,0,830,831,7,14,0,0,831,182,1,0,0,0,832,833,7,12,0,0,833,834,7,9,0,0, + 834,835,7,0,0,0,835,836,7,16,0,0,836,837,7,13,0,0,837,184,1,0,0,0,838, + 839,7,12,0,0,839,840,7,9,0,0,840,841,7,17,0,0,841,842,7,18,0,0,842,843, + 7,16,0,0,843,186,1,0,0,0,844,845,7,13,0,0,845,846,7,8,0,0,846,847,7,0, + 0,0,847,848,7,6,0,0,848,849,7,8,0,0,849,850,7,9,0,0,850,851,7,11,0,0, + 851,188,1,0,0,0,852,853,7,13,0,0,853,854,7,4,0,0,854,855,7,5,0,0,855, + 856,7,7,0,0,856,190,1,0,0,0,857,858,7,4,0,0,858,859,7,19,0,0,859,860, + 7,16,0,0,860,861,7,17,0,0,861,862,7,9,0,0,862,863,7,7,0,0,863,192,1,0, + 0,0,864,865,7,4,0,0,865,866,7,5,0,0,866,867,7,6,0,0,867,868,7,8,0,0,868, + 869,7,21,0,0,869,194,1,0,0,0,870,871,7,4,0,0,871,872,7,20,0,0,872,196, + 1,0,0,0,873,874,7,4,0,0,874,875,7,5,0,0,875,198,1,0,0,0,876,877,7,4,0, + 0,877,878,7,5,0,0,878,879,7,1,0,0,879,880,7,9,0,0,880,881,7,8,0,0,881, + 882,7,19,0,0,882,883,7,8,0,0,883,884,7,5,0,0,884,885,7,7,0,0,885,200, + 1,0,0,0,886,887,7,4,0,0,887,888,7,5,0,0,888,889,7,11,0,0,889,890,7,7, + 0,0,890,891,7,0,0,0,891,892,7,3,0,0,892,893,7,3,0,0,893,202,1,0,0,0,894, + 895,7,4,0,0,895,896,7,11,0,0,896,204,1,0,0,0,897,898,7,22,0,0,898,899, + 7,17,0,0,899,900,7,4,0,0,900,901,7,5,0,0,901,206,1,0,0,0,902,903,7,15, + 0,0,903,904,7,8,0,0,904,905,7,2,0,0,905,208,1,0,0,0,906,907,7,3,0,0,907, + 908,7,4,0,0,908,909,7,19,0,0,909,910,7,4,0,0,910,911,7,7,0,0,911,210, + 1,0,0,0,912,913,7,3,0,0,913,914,7,17,0,0,914,915,7,0,0,0,915,916,7,6, + 0,0,916,212,1,0,0,0,917,918,7,3,0,0,918,919,7,17,0,0,919,920,7,12,0,0, + 920,921,7,4,0,0,921,922,7,1,0,0,922,923,7,0,0,0,923,924,7,3,0,0,924,214, + 1,0,0,0,925,926,7,19,0,0,926,927,7,0,0,0,927,928,7,1,0,0,928,929,7,9, + 0,0,929,930,7,17,0,0,930,216,1,0,0,0,931,932,7,19,0,0,932,933,7,0,0,0, + 933,934,7,7,0,0,934,935,7,1,0,0,935,936,7,13,0,0,936,218,1,0,0,0,937, + 938,7,19,0,0,938,939,7,0,0,0,939,940,7,21,0,0,940,941,7,23,0,0,941,942, + 7,0,0,0,942,943,7,3,0,0,943,944,7,18,0,0,944,945,7,8,0,0,945,220,1,0, + 0,0,946,947,7,19,0,0,947,948,7,8,0,0,948,949,7,9,0,0,949,950,7,12,0,0, + 950,951,7,8,0,0,951,222,1,0,0,0,952,953,7,19,0,0,953,954,7,4,0,0,954, + 955,7,5,0,0,955,956,7,23,0,0,956,957,7,0,0,0,957,958,7,3,0,0,958,959, + 7,18,0,0,959,960,7,8,0,0,960,224,1,0,0,0,961,962,7,19,0,0,962,963,7,18, + 0,0,963,964,7,3,0,0,964,965,7,7,0,0,965,966,7,4,0,0,966,967,5,95,0,0, + 967,968,7,22,0,0,968,969,7,17,0,0,969,970,7,4,0,0,970,971,7,5,0,0,971, + 226,1,0,0,0,972,973,7,5,0,0,973,974,7,17,0,0,974,228,1,0,0,0,975,976, + 7,5,0,0,976,977,7,17,0,0,977,978,7,6,0,0,978,979,7,8,0,0,979,230,1,0, + 0,0,980,981,7,5,0,0,981,982,7,17,0,0,982,983,7,7,0,0,983,232,1,0,0,0, + 984,985,7,5,0,0,985,986,7,17,0,0,986,987,7,5,0,0,987,988,7,8,0,0,988, + 234,1,0,0,0,989,990,7,5,0,0,990,991,7,18,0,0,991,992,7,3,0,0,992,993, + 7,3,0,0,993,236,1,0,0,0,994,995,7,17,0,0,995,996,7,5,0,0,996,238,1,0, + 0,0,997,998,7,17,0,0,998,999,7,5,0,0,999,1000,7,3,0,0,1000,1001,7,2,0, + 0,1001,240,1,0,0,0,1002,1003,7,17,0,0,1003,1004,7,16,0,0,1004,1005,7, + 7,0,0,1005,1006,7,4,0,0,1006,1007,7,17,0,0,1007,1008,7,5,0,0,1008,1009, + 7,11,0,0,1009,242,1,0,0,0,1010,1011,7,17,0,0,1011,1012,7,16,0,0,1012, + 1013,7,7,0,0,1013,1014,7,4,0,0,1014,1015,7,17,0,0,1015,1016,7,5,0,0,1016, + 1017,7,0,0,0,1017,1018,7,3,0,0,1018,244,1,0,0,0,1019,1020,7,17,0,0,1020, + 1021,7,9,0,0,1021,246,1,0,0,0,1022,1023,7,17,0,0,1023,1024,7,9,0,0,1024, + 1025,7,6,0,0,1025,1026,7,8,0,0,1026,1027,7,9,0,0,1027,248,1,0,0,0,1028, + 1029,7,16,0,0,1029,1030,7,9,0,0,1030,1031,7,4,0,0,1031,1032,7,19,0,0, + 1032,1033,7,0,0,0,1033,1034,7,9,0,0,1034,1035,7,2,0,0,1035,250,1,0,0, + 0,1036,1037,7,16,0,0,1037,1038,7,9,0,0,1038,1039,7,17,0,0,1039,1040,7, + 20,0,0,1040,1041,7,4,0,0,1041,1042,7,3,0,0,1042,1043,7,8,0,0,1043,252, + 1,0,0,0,1044,1045,7,16,0,0,1045,1046,7,9,0,0,1046,1047,7,17,0,0,1047, + 1048,7,22,0,0,1048,1049,7,8,0,0,1049,1050,7,1,0,0,1050,1051,7,7,0,0,1051, + 254,1,0,0,0,1052,1053,7,9,0,0,1053,1054,7,8,0,0,1054,1055,7,0,0,0,1055, + 1056,7,6,0,0,1056,256,1,0,0,0,1057,1058,7,9,0,0,1058,1059,7,8,0,0,1059, + 1060,7,3,0,0,1060,258,1,0,0,0,1061,1062,7,9,0,0,1062,1063,7,8,0,0,1063, + 1064,7,5,0,0,1064,1065,7,0,0,0,1065,1066,7,19,0,0,1066,1067,7,8,0,0,1067, + 260,1,0,0,0,1068,1069,7,9,0,0,1069,1070,7,8,0,0,1070,1071,7,7,0,0,1071, + 1072,7,18,0,0,1072,1073,7,9,0,0,1073,1074,7,5,0,0,1074,262,1,0,0,0,1075, + 1076,7,9,0,0,1076,1077,7,17,0,0,1077,1078,7,3,0,0,1078,1079,7,3,0,0,1079, + 1080,7,14,0,0,1080,1081,7,0,0,0,1081,1082,7,1,0,0,1082,1083,7,15,0,0, + 1083,264,1,0,0,0,1084,1085,7,9,0,0,1085,1086,7,17,0,0,1086,1087,7,3,0, + 0,1087,1088,7,3,0,0,1088,1089,7,14,0,0,1089,1090,7,0,0,0,1090,1091,7, + 1,0,0,1091,1092,7,15,0,0,1092,1093,5,95,0,0,1093,1094,7,11,0,0,1094,1095, + 7,15,0,0,1095,1096,7,4,0,0,1096,1097,7,16,0,0,1097,1098,5,95,0,0,1098, + 1099,7,1,0,0,1099,1100,7,13,0,0,1100,1101,7,8,0,0,1101,1102,7,1,0,0,1102, + 1103,7,15,0,0,1103,1104,7,16,0,0,1104,1105,7,17,0,0,1105,1106,7,4,0,0, + 1106,1107,7,5,0,0,1107,1108,7,7,0,0,1108,266,1,0,0,0,1109,1110,7,11,0, + 0,1110,1111,7,8,0,0,1111,1112,7,24,0,0,1112,1113,7,18,0,0,1113,1114,7, + 8,0,0,1114,1115,7,5,0,0,1115,1116,7,1,0,0,1116,1117,7,8,0,0,1117,268, + 1,0,0,0,1118,1119,7,11,0,0,1119,1120,7,8,0,0,1120,1121,7,7,0,0,1121,270, + 1,0,0,0,1122,1123,7,11,0,0,1123,1124,7,17,0,0,1124,1125,7,9,0,0,1125, + 1126,7,7,0,0,1126,1127,7,8,0,0,1127,1128,7,6,0,0,1128,272,1,0,0,0,1129, + 1130,7,11,0,0,1130,1131,7,13,0,0,1131,1132,7,17,0,0,1132,1133,7,9,0,0, + 1133,1134,7,7,0,0,1134,1135,7,8,0,0,1135,1136,7,11,0,0,1136,1137,7,7, + 0,0,1137,274,1,0,0,0,1138,1139,7,11,0,0,1139,1140,7,7,0,0,1140,1141,7, + 0,0,0,1141,1142,7,9,0,0,1142,1143,7,7,0,0,1143,276,1,0,0,0,1144,1145, + 7,11,0,0,1145,1146,7,7,0,0,1146,1147,7,0,0,0,1147,1148,7,9,0,0,1148,1149, + 7,7,0,0,1149,1150,7,11,0,0,1150,278,1,0,0,0,1151,1152,7,11,0,0,1152,1153, + 7,7,0,0,1153,1154,7,9,0,0,1154,1155,7,18,0,0,1155,1156,7,1,0,0,1156,1157, + 7,7,0,0,1157,280,1,0,0,0,1158,1159,7,7,0,0,1159,1160,7,0,0,0,1160,1161, + 7,14,0,0,1161,1162,7,3,0,0,1162,1163,7,8,0,0,1163,282,1,0,0,0,1164,1165, + 7,7,0,0,1165,1166,7,13,0,0,1166,1167,7,8,0,0,1167,1168,7,5,0,0,1168,284, + 1,0,0,0,1169,1170,7,7,0,0,1170,1171,7,17,0,0,1171,286,1,0,0,0,1172,1173, + 7,7,0,0,1173,1174,7,9,0,0,1174,1175,7,0,0,0,1175,1176,7,4,0,0,1176,1177, + 7,3,0,0,1177,288,1,0,0,0,1178,1179,7,7,0,0,1179,1180,7,9,0,0,1180,1181, + 7,0,0,0,1181,1182,7,5,0,0,1182,1183,7,11,0,0,1183,1184,7,0,0,0,1184,1185, + 7,1,0,0,1185,1186,7,7,0,0,1186,1187,7,4,0,0,1187,1188,7,17,0,0,1188,1189, + 7,5,0,0,1189,290,1,0,0,0,1190,1191,7,7,0,0,1191,1192,7,9,0,0,1192,1193, + 7,18,0,0,1193,1194,7,8,0,0,1194,292,1,0,0,0,1195,1196,7,7,0,0,1196,1197, + 7,2,0,0,1197,1198,7,16,0,0,1198,1199,7,8,0,0,1199,294,1,0,0,0,1200,1201, + 7,18,0,0,1201,1202,7,5,0,0,1202,1203,7,4,0,0,1203,1204,7,17,0,0,1204, + 1205,7,5,0,0,1205,296,1,0,0,0,1206,1207,7,18,0,0,1207,1208,7,5,0,0,1208, + 1209,7,25,0,0,1209,1210,7,4,0,0,1210,1211,7,5,0,0,1211,1212,7,6,0,0,1212, + 298,1,0,0,0,1213,1214,7,18,0,0,1214,1215,7,5,0,0,1215,1216,7,4,0,0,1216, + 1217,7,5,0,0,1217,1218,7,11,0,0,1218,1219,7,7,0,0,1219,1220,7,0,0,0,1220, + 1221,7,3,0,0,1221,1222,7,3,0,0,1222,300,1,0,0,0,1223,1224,7,18,0,0,1224, + 1225,7,16,0,0,1225,1226,7,6,0,0,1226,1227,7,0,0,0,1227,1228,7,7,0,0,1228, + 1229,7,8,0,0,1229,302,1,0,0,0,1230,1231,7,18,0,0,1231,1232,7,11,0,0,1232, + 1233,7,8,0,0,1233,304,1,0,0,0,1234,1235,7,25,0,0,1235,1236,7,13,0,0,1236, + 1237,7,8,0,0,1237,1238,7,5,0,0,1238,306,1,0,0,0,1239,1240,7,25,0,0,1240, + 1241,7,13,0,0,1241,1242,7,8,0,0,1242,1243,7,9,0,0,1243,1244,7,8,0,0,1244, + 308,1,0,0,0,1245,1246,7,25,0,0,1246,1247,7,4,0,0,1247,1248,7,7,0,0,1248, + 1249,7,13,0,0,1249,310,1,0,0,0,1250,1251,7,25,0,0,1251,1252,7,9,0,0,1252, + 1253,7,4,0,0,1253,1254,7,7,0,0,1254,1255,7,8,0,0,1255,312,1,0,0,0,1256, + 1257,7,25,0,0,1257,1258,7,11,0,0,1258,1259,7,13,0,0,1259,1260,7,17,0, + 0,1260,1261,7,9,0,0,1261,1262,7,7,0,0,1262,1263,7,8,0,0,1263,1264,7,11, + 0,0,1264,1265,7,7,0,0,1265,314,1,0,0,0,1266,1267,7,21,0,0,1267,1268,7, + 17,0,0,1268,1269,7,9,0,0,1269,316,1,0,0,0,1270,1271,7,11,0,0,1271,1272, + 7,4,0,0,1272,1273,7,5,0,0,1273,1274,7,12,0,0,1274,1275,7,3,0,0,1275,1276, + 7,8,0,0,1276,318,1,0,0,0,1277,1278,7,2,0,0,1278,1279,7,4,0,0,1279,1280, + 7,8,0,0,1280,1281,7,3,0,0,1281,1282,7,6,0,0,1282,320,1,0,0,0,1283,1284, + 7,18,0,0,1284,1285,7,11,0,0,1285,1286,7,8,0,0,1286,1287,7,9,0,0,1287, + 322,1,0,0,0,1288,1289,7,16,0,0,1289,1290,7,0,0,0,1290,1291,7,11,0,0,1291, + 1292,7,11,0,0,1292,1293,7,25,0,0,1293,1294,7,17,0,0,1294,1295,7,9,0,0, + 1295,1296,7,6,0,0,1296,324,1,0,0,0,1297,1298,7,9,0,0,1298,1299,7,17,0, + 0,1299,1300,7,3,0,0,1300,1301,7,8,0,0,1301,326,1,0,0,0,1302,1303,7,19, + 0,0,1303,1304,7,0,0,0,1304,1305,7,16,0,0,1305,328,1,0,0,0,1306,1307,7, + 6,0,0,1307,1308,7,8,0,0,1308,1309,7,1,0,0,1309,1310,7,4,0,0,1310,1311, + 7,19,0,0,1311,1312,7,0,0,0,1312,1313,7,3,0,0,1313,330,1,0,0,0,1314,1315, + 5,42,0,0,1315,332,1,0,0,0,1316,1317,7,11,0,0,1317,1318,7,15,0,0,1318, + 1319,7,4,0,0,1319,1320,7,16,0,0,1320,334,1,0,0,0,1321,1322,5,33,0,0,1322, + 1323,5,61,0,0,1323,336,1,0,0,0,1324,1325,5,58,0,0,1325,338,1,0,0,0,1326, + 1327,5,46,0,0,1327,1328,5,46,0,0,1328,340,1,0,0,0,1329,1330,5,45,0,0, + 1330,342,1,0,0,0,1331,1332,5,33,0,0,1332,344,1,0,0,0,1333,1338,5,34,0, + 0,1334,1337,3,411,205,0,1335,1337,3,347,173,0,1336,1334,1,0,0,0,1336, + 1335,1,0,0,0,1337,1340,1,0,0,0,1338,1336,1,0,0,0,1338,1339,1,0,0,0,1339, + 1341,1,0,0,0,1340,1338,1,0,0,0,1341,1352,5,34,0,0,1342,1347,5,39,0,0, + 1343,1346,3,391,195,0,1344,1346,3,347,173,0,1345,1343,1,0,0,0,1345,1344, + 1,0,0,0,1346,1349,1,0,0,0,1347,1345,1,0,0,0,1347,1348,1,0,0,0,1348,1350, + 1,0,0,0,1349,1347,1,0,0,0,1350,1352,5,39,0,0,1351,1333,1,0,0,0,1351,1342, + 1,0,0,0,1352,346,1,0,0,0,1353,1375,5,92,0,0,1354,1376,7,26,0,0,1355,1356, + 7,21,0,0,1356,1357,3,353,176,0,1357,1358,3,353,176,0,1358,1376,1,0,0, + 0,1359,1360,7,18,0,0,1360,1361,3,353,176,0,1361,1362,3,353,176,0,1362, + 1363,3,353,176,0,1363,1364,3,353,176,0,1364,1376,1,0,0,0,1365,1366,7, + 18,0,0,1366,1367,3,353,176,0,1367,1368,3,353,176,0,1368,1369,3,353,176, + 0,1369,1370,3,353,176,0,1370,1371,3,353,176,0,1371,1372,3,353,176,0,1372, + 1373,3,353,176,0,1373,1374,3,353,176,0,1374,1376,1,0,0,0,1375,1354,1, + 0,0,0,1375,1355,1,0,0,0,1375,1359,1,0,0,0,1375,1365,1,0,0,0,1376,348, + 1,0,0,0,1377,1386,3,361,180,0,1378,1382,3,357,178,0,1379,1381,3,355,177, + 0,1380,1379,1,0,0,0,1381,1384,1,0,0,0,1382,1380,1,0,0,0,1382,1383,1,0, + 0,0,1383,1386,1,0,0,0,1384,1382,1,0,0,0,1385,1377,1,0,0,0,1385,1378,1, + 0,0,0,1386,350,1,0,0,0,1387,1389,7,27,0,0,1388,1387,1,0,0,0,1389,352, + 1,0,0,0,1390,1393,3,355,177,0,1391,1393,3,351,175,0,1392,1390,1,0,0,0, + 1392,1391,1,0,0,0,1393,354,1,0,0,0,1394,1397,3,361,180,0,1395,1397,3, + 357,178,0,1396,1394,1,0,0,0,1396,1395,1,0,0,0,1397,356,1,0,0,0,1398,1401, + 3,359,179,0,1399,1401,2,56,57,0,1400,1398,1,0,0,0,1400,1399,1,0,0,0,1401, + 358,1,0,0,0,1402,1403,2,49,55,0,1403,360,1,0,0,0,1404,1405,5,48,0,0,1405, + 362,1,0,0,0,1406,1408,3,355,177,0,1407,1406,1,0,0,0,1408,1409,1,0,0,0, + 1409,1407,1,0,0,0,1409,1410,1,0,0,0,1410,1429,1,0,0,0,1411,1413,3,355, + 177,0,1412,1411,1,0,0,0,1413,1414,1,0,0,0,1414,1412,1,0,0,0,1414,1415, + 1,0,0,0,1415,1416,1,0,0,0,1416,1418,5,46,0,0,1417,1419,3,355,177,0,1418, + 1417,1,0,0,0,1419,1420,1,0,0,0,1420,1418,1,0,0,0,1420,1421,1,0,0,0,1421, + 1429,1,0,0,0,1422,1424,5,46,0,0,1423,1425,3,355,177,0,1424,1423,1,0,0, + 0,1425,1426,1,0,0,0,1426,1424,1,0,0,0,1426,1427,1,0,0,0,1427,1429,1,0, + 0,0,1428,1407,1,0,0,0,1428,1412,1,0,0,0,1428,1422,1,0,0,0,1429,1430,1, + 0,0,0,1430,1432,7,8,0,0,1431,1433,5,45,0,0,1432,1431,1,0,0,0,1432,1433, + 1,0,0,0,1433,1435,1,0,0,0,1434,1436,3,355,177,0,1435,1434,1,0,0,0,1436, + 1437,1,0,0,0,1437,1435,1,0,0,0,1437,1438,1,0,0,0,1438,364,1,0,0,0,1439, + 1441,3,355,177,0,1440,1439,1,0,0,0,1441,1444,1,0,0,0,1442,1440,1,0,0, + 0,1442,1443,1,0,0,0,1443,1445,1,0,0,0,1444,1442,1,0,0,0,1445,1447,5,46, + 0,0,1446,1448,3,355,177,0,1447,1446,1,0,0,0,1448,1449,1,0,0,0,1449,1447, + 1,0,0,0,1449,1450,1,0,0,0,1450,366,1,0,0,0,1451,1455,3,369,184,0,1452, + 1454,3,371,185,0,1453,1452,1,0,0,0,1454,1457,1,0,0,0,1455,1453,1,0,0, + 0,1455,1456,1,0,0,0,1456,368,1,0,0,0,1457,1455,1,0,0,0,1458,1461,3,419, + 209,0,1459,1461,3,407,203,0,1460,1458,1,0,0,0,1460,1459,1,0,0,0,1461, + 370,1,0,0,0,1462,1465,3,387,193,0,1463,1465,3,403,201,0,1464,1462,1,0, + 0,0,1464,1463,1,0,0,0,1465,372,1,0,0,0,1466,1470,5,96,0,0,1467,1469,3, + 383,191,0,1468,1467,1,0,0,0,1469,1472,1,0,0,0,1470,1468,1,0,0,0,1470, + 1471,1,0,0,0,1471,1473,1,0,0,0,1472,1470,1,0,0,0,1473,1475,5,96,0,0,1474, + 1466,1,0,0,0,1475,1476,1,0,0,0,1476,1474,1,0,0,0,1476,1477,1,0,0,0,1477, + 374,1,0,0,0,1478,1480,3,377,188,0,1479,1478,1,0,0,0,1480,1481,1,0,0,0, + 1481,1479,1,0,0,0,1481,1482,1,0,0,0,1482,376,1,0,0,0,1483,1496,3,405, + 202,0,1484,1496,3,409,204,0,1485,1496,3,413,206,0,1486,1496,3,415,207, + 0,1487,1496,3,381,190,0,1488,1496,3,401,200,0,1489,1496,3,399,199,0,1490, + 1496,3,397,198,0,1491,1496,3,385,192,0,1492,1496,3,417,208,0,1493,1496, + 7,28,0,0,1494,1496,3,379,189,0,1495,1483,1,0,0,0,1495,1484,1,0,0,0,1495, + 1485,1,0,0,0,1495,1486,1,0,0,0,1495,1487,1,0,0,0,1495,1488,1,0,0,0,1495, + 1489,1,0,0,0,1495,1490,1,0,0,0,1495,1491,1,0,0,0,1495,1492,1,0,0,0,1495, + 1493,1,0,0,0,1495,1494,1,0,0,0,1496,378,1,0,0,0,1497,1498,5,47,0,0,1498, + 1499,5,42,0,0,1499,1505,1,0,0,0,1500,1504,3,389,194,0,1501,1502,5,42, + 0,0,1502,1504,3,395,197,0,1503,1500,1,0,0,0,1503,1501,1,0,0,0,1504,1507, + 1,0,0,0,1505,1503,1,0,0,0,1505,1506,1,0,0,0,1506,1508,1,0,0,0,1507,1505, + 1,0,0,0,1508,1509,5,42,0,0,1509,1527,5,47,0,0,1510,1511,5,47,0,0,1511, + 1512,5,47,0,0,1512,1516,1,0,0,0,1513,1515,3,393,196,0,1514,1513,1,0,0, + 0,1515,1518,1,0,0,0,1516,1514,1,0,0,0,1516,1517,1,0,0,0,1517,1520,1,0, + 0,0,1518,1516,1,0,0,0,1519,1521,3,401,200,0,1520,1519,1,0,0,0,1520,1521, + 1,0,0,0,1521,1524,1,0,0,0,1522,1525,3,413,206,0,1523,1525,5,0,0,1,1524, + 1522,1,0,0,0,1524,1523,1,0,0,0,1525,1527,1,0,0,0,1526,1497,1,0,0,0,1526, + 1510,1,0,0,0,1527,380,1,0,0,0,1528,1529,7,29,0,0,1529,382,1,0,0,0,1530, + 1531,8,30,0,0,1531,384,1,0,0,0,1532,1533,7,31,0,0,1533,386,1,0,0,0,1534, + 1535,7,32,0,0,1535,388,1,0,0,0,1536,1537,8,33,0,0,1537,390,1,0,0,0,1538, + 1539,8,34,0,0,1539,392,1,0,0,0,1540,1541,8,35,0,0,1541,394,1,0,0,0,1542, + 1543,8,36,0,0,1543,396,1,0,0,0,1544,1545,7,37,0,0,1545,398,1,0,0,0,1546, + 1547,7,38,0,0,1547,400,1,0,0,0,1548,1549,7,39,0,0,1549,402,1,0,0,0,1550, + 1551,7,40,0,0,1551,404,1,0,0,0,1552,1553,7,41,0,0,1553,406,1,0,0,0,1554, + 1555,7,42,0,0,1555,408,1,0,0,0,1556,1557,7,43,0,0,1557,410,1,0,0,0,1558, + 1559,8,44,0,0,1559,412,1,0,0,0,1560,1561,7,45,0,0,1561,414,1,0,0,0,1562, + 1563,7,46,0,0,1563,416,1,0,0,0,1564,1565,7,47,0,0,1565,418,1,0,0,0,1566, + 1567,7,48,0,0,1567,420,1,0,0,0,1568,1569,9,0,0,0,1569,422,1,0,0,0,35, + 0,1336,1338,1345,1347,1351,1375,1382,1385,1388,1392,1396,1400,1409,1414, + 1420,1426,1428,1432,1437,1442,1449,1455,1460,1464,1470,1476,1481,1495, + 1503,1505,1516,1520,1524,1526,0 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); diff --git a/third_party/antlr4_cypher/cypher_parser.cpp b/third_party/antlr4_cypher/cypher_parser.cpp index abee4be420..53bd187c01 100644 --- a/third_party/antlr4_cypher/cypher_parser.cpp +++ b/third_party/antlr4_cypher/cypher_parser.cpp @@ -66,29 +66,30 @@ void cypherParserInitialize() { "iC_Cycle", "iC_IfExists", "iC_Drop", "iC_DropIndexName", "iC_AlterTable", "iC_AlterOptions", "iC_AddProperty", "iC_Default", "iC_DropProperty", "iC_RenameTable", "iC_RenameProperty", "iC_AddFromToConnection", "iC_DropFromToConnection", - "iC_ColumnDefinitions", "iC_ColumnDefinition", "iC_PropertyDefinitions", - "iC_PropertyDefinition", "iC_CreateNodeConstraint", "iC_UnionType", - "iC_StructType", "iC_MapType", "iC_DecimalType", "iC_DataType", "iC_ListIdentifiers", - "iC_ListIdentifier", "oC_AnyCypherOption", "oC_Explain", "oC_Profile", - "iC_Transaction", "iC_Extension", "iC_LoadExtension", "iC_InstallExtension", - "iC_UninstallExtension", "iC_UpdateExtension", "oC_Query", "oC_RegularQuery", - "oC_Union", "oC_SingleQuery", "oC_SinglePartQuery", "oC_MultiPartQuery", - "iC_QueryPart", "oC_UpdatingClause", "oC_ReadingClause", "iC_LoadFrom", - "oC_YieldItem", "oC_YieldItems", "iC_InQueryCall", "oC_Match", "iC_Hint", - "iC_JoinNode", "oC_Unwind", "oC_Create", "oC_Merge", "oC_MergeAction", - "oC_Set", "oC_SetItem", "oC_Delete", "oC_With", "oC_Return", "oC_ProjectionBody", - "oC_ProjectionItems", "oC_ProjectionItem", "oC_Order", "oC_Skip", - "oC_Limit", "oC_SortItem", "oC_Where", "oC_Pattern", "oC_PatternPart", - "oC_AnonymousPatternPart", "oC_PatternElement", "oC_NodePattern", - "oC_PatternElementChain", "oC_RelationshipPattern", "oC_RelationshipDetail", - "iC_Properties", "oC_RelationshipTypes", "oC_NodeLabels", "iC_RecursiveDetail", - "iC_RecursiveType", "oC_RangeLiteral", "iC_RecursiveComprehension", - "iC_RecursiveProjectionItems", "oC_LowerBound", "oC_UpperBound", "oC_LabelName", - "oC_RelTypeName", "oC_Expression", "oC_OrExpression", "oC_XorExpression", - "oC_AndExpression", "oC_NotExpression", "oC_ComparisonExpression", - "iC_ComparisonOperator", "iC_BitwiseOrOperatorExpression", "iC_BitwiseAndOperatorExpression", - "iC_BitShiftOperatorExpression", "iC_BitShiftOperator", "oC_AddOrSubtractExpression", - "iC_AddOrSubtractOperator", "oC_MultiplyDivideModuloExpression", "iC_MultiplyDivideModuloOperator", + "iC_SetSortedBy", "iC_SortedByItem", "iC_ColumnDefinitions", "iC_ColumnDefinition", + "iC_PropertyDefinitions", "iC_PropertyDefinition", "iC_CreateNodeConstraint", + "iC_UnionType", "iC_StructType", "iC_MapType", "iC_DecimalType", "iC_DataType", + "iC_ListIdentifiers", "iC_ListIdentifier", "oC_AnyCypherOption", "oC_Explain", + "oC_Profile", "iC_Transaction", "iC_Extension", "iC_LoadExtension", + "iC_InstallExtension", "iC_UninstallExtension", "iC_UpdateExtension", + "oC_Query", "oC_RegularQuery", "oC_Union", "oC_SingleQuery", "oC_SinglePartQuery", + "oC_MultiPartQuery", "iC_QueryPart", "oC_UpdatingClause", "oC_ReadingClause", + "iC_LoadFrom", "oC_YieldItem", "oC_YieldItems", "iC_InQueryCall", + "oC_Match", "iC_Hint", "iC_JoinNode", "oC_Unwind", "oC_Create", "oC_Merge", + "oC_MergeAction", "oC_Set", "oC_SetItem", "oC_Delete", "oC_With", + "oC_Return", "oC_ProjectionBody", "oC_ProjectionItems", "oC_ProjectionItem", + "oC_Order", "oC_Skip", "oC_Limit", "oC_SortItem", "oC_Where", "oC_Pattern", + "oC_PatternPart", "oC_AnonymousPatternPart", "oC_PatternElement", + "oC_NodePattern", "oC_PatternElementChain", "oC_RelationshipPattern", + "oC_RelationshipDetail", "iC_Properties", "oC_RelationshipTypes", + "oC_NodeLabels", "iC_RecursiveDetail", "iC_RecursiveType", "oC_RangeLiteral", + "iC_RecursiveComprehension", "iC_RecursiveProjectionItems", "oC_LowerBound", + "oC_UpperBound", "oC_LabelName", "oC_RelTypeName", "oC_Expression", + "oC_OrExpression", "oC_XorExpression", "oC_AndExpression", "oC_NotExpression", + "oC_ComparisonExpression", "iC_ComparisonOperator", "iC_BitwiseOrOperatorExpression", + "iC_BitwiseAndOperatorExpression", "iC_BitShiftOperatorExpression", + "iC_BitShiftOperator", "oC_AddOrSubtractExpression", "iC_AddOrSubtractOperator", + "oC_MultiplyDivideModuloExpression", "iC_MultiplyDivideModuloOperator", "oC_PowerOfExpression", "oC_StringListNullOperatorExpression", "oC_ListOperatorExpression", "oC_StringOperatorExpression", "oC_RegularExpression", "oC_NullOperatorExpression", "oC_UnaryAddSubtractOrFactorialExpression", "oC_PropertyOrLabelsExpression", @@ -117,8 +118,8 @@ void cypherParserInitialize() { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "'*'", "", "'!='", "':'", "'..'", "'-'", "'!'", "", "", "", "", "", - "", "", "", "'0'" + "", "'*'", "", "'!='", "':'", "'..'", "'-'", "'!'", "", "", "", "", + "", "", "", "", "'0'" }, std::vector{ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -136,20 +137,20 @@ void cypherParserInitialize() { "NOT", "NONE", "NULL", "ON", "ONLY", "OPTIONS", "OPTIONAL", "OR", "ORDER", "PRIMARY", "PROFILE", "PROJECT", "READ", "REL", "RENAME", "RETURN", "ROLLBACK", "ROLLBACK_SKIP_CHECKPOINT", "SEQUENCE", "SET", - "SHORTEST", "START", "STARTS", "STRUCT", "TABLE", "THEN", "TO", "TRAIL", - "TRANSACTION", "TRUE", "TYPE", "UNION", "UNWIND", "UNINSTALL", "UPDATE", - "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", - "YIELD", "USER", "PASSWORD", "ROLE", "MAP", "DECIMAL", "STAR", "L_SKIP", - "INVALID_NOT_EQUAL", "COLON", "DOTDOT", "MINUS", "FACTORIAL", "StringLiteral", - "EscapedChar", "DecimalInteger", "HexLetter", "HexDigit", "Digit", - "NonZeroDigit", "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", + "SORTED", "SHORTEST", "START", "STARTS", "STRUCT", "TABLE", "THEN", + "TO", "TRAIL", "TRANSACTION", "TRUE", "TYPE", "UNION", "UNWIND", "UNINSTALL", + "UPDATE", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", + "SINGLE", "YIELD", "USER", "PASSWORD", "ROLE", "MAP", "DECIMAL", "STAR", + "L_SKIP", "INVALID_NOT_EQUAL", "COLON", "DOTDOT", "MINUS", "FACTORIAL", + "StringLiteral", "EscapedChar", "DecimalInteger", "HexLetter", "HexDigit", + "Digit", "NonZeroDigit", "NonZeroOctDigit", "ZeroDigit", "ExponentDecimalReal", "RegularDecimalReal", "UnescapedSymbolicName", "IdentifierStart", "IdentifierPart", "EscapedSymbolicName", "SP", "WHITESPACE", "CypherComment", "Unknown" } ); static const int32_t serializedATNSegment[] = { - 4,1,190,3142,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, + 4,1,191,3182,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, 2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14, 7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21, 7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28, @@ -178,1239 +179,1255 @@ void cypherParserInitialize() { 7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174,2,175,7,175,2,176, 7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180,2,181,7,181,2,182, 7,182,2,183,7,183,2,184,7,184,2,185,7,185,2,186,7,186,2,187,7,187,2,188, - 7,188,2,189,7,189,2,190,7,190,1,0,1,0,3,0,385,8,0,1,0,1,0,3,0,389,8,0, - 1,0,5,0,392,8,0,10,0,12,0,395,9,0,1,0,3,0,398,8,0,1,0,1,0,1,1,3,1,403, - 8,1,1,1,3,1,406,8,1,1,1,1,1,3,1,410,8,1,1,1,3,1,413,8,1,1,2,1,2,1,2,1, - 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, - 1,2,1,2,1,2,1,2,1,2,3,2,441,8,2,1,3,1,3,1,3,1,3,3,3,447,8,3,1,3,1,3,1, - 3,1,3,1,3,3,3,454,8,3,1,3,1,3,3,3,458,8,3,1,3,1,3,3,3,462,8,3,1,3,1,3, - 3,3,466,8,3,1,4,3,4,469,8,4,1,4,1,4,3,4,473,8,4,1,4,1,4,3,4,477,8,4,1, - 4,1,4,3,4,481,8,4,1,4,5,4,484,8,4,10,4,12,4,487,9,4,1,4,3,4,490,8,4,3, - 4,492,8,4,1,4,1,4,1,5,1,5,1,5,3,5,499,8,5,1,5,1,5,3,5,503,8,5,1,5,1,5, - 1,5,1,5,1,5,1,5,1,5,3,5,512,8,5,1,5,1,5,1,5,3,5,517,8,5,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,3,6,527,8,6,1,6,1,6,3,6,531,8,6,1,6,1,6,3,6,535,8,6, - 1,6,5,6,538,8,6,10,6,12,6,541,9,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7, - 1,7,3,7,553,8,7,1,7,1,7,3,7,557,8,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,565,8, - 7,1,7,1,7,3,7,569,8,7,1,7,1,7,3,7,573,8,7,1,7,1,7,3,7,577,8,7,1,8,1,8, - 1,8,1,8,1,8,1,8,3,8,585,8,8,1,8,1,8,3,8,589,8,8,1,8,1,8,3,8,593,8,8,1, - 8,1,8,3,8,597,8,8,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1, - 10,1,10,3,10,612,8,10,1,10,1,10,1,10,3,10,617,8,10,1,10,1,10,1,10,1,10, - 3,10,623,8,10,1,10,1,10,3,10,627,8,10,1,10,3,10,630,8,10,1,10,3,10,633, - 8,10,1,10,1,10,1,11,1,11,3,11,639,8,11,1,11,1,11,3,11,643,8,11,1,11,5, - 11,646,8,11,10,11,12,11,649,9,11,3,11,651,8,11,1,11,1,11,3,11,655,8,11, - 1,11,3,11,658,8,11,1,11,3,11,661,8,11,1,12,1,12,3,12,665,8,12,1,12,1, - 12,3,12,669,8,12,1,12,1,12,1,13,1,13,3,13,675,8,13,1,13,1,13,3,13,679, - 8,13,1,13,5,13,682,8,13,10,13,12,13,685,9,13,1,14,1,14,1,14,1,14,1,15, - 1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,702,8,16,1,17, - 1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,3,18,713,8,18,1,19,1,19,1,19, - 1,19,3,19,719,8,19,1,19,1,19,3,19,723,8,19,1,19,1,19,1,19,1,19,1,19,3, - 19,730,8,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1, - 20,1,21,1,21,1,21,1,21,1,21,1,21,3,21,750,8,21,1,21,1,21,3,21,754,8,21, - 1,21,3,21,757,8,21,1,21,3,21,760,8,21,1,21,3,21,763,8,21,1,21,3,21,766, - 8,21,1,21,1,21,3,21,770,8,21,1,21,5,21,773,8,21,10,21,12,21,776,9,21, - 1,21,3,21,779,8,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,3,22,789,8, - 22,1,22,1,22,3,22,793,8,22,1,22,5,22,796,8,22,10,22,12,22,799,9,22,1, - 23,1,23,3,23,803,8,23,1,23,1,23,1,23,3,23,808,8,23,1,23,1,23,1,24,1,24, - 3,24,814,8,24,1,24,1,24,3,24,818,8,24,1,24,1,24,3,24,822,8,24,1,24,5, - 24,825,8,24,10,24,12,24,828,9,24,1,24,1,24,1,24,1,24,3,24,834,8,24,1, - 24,1,24,3,24,838,8,24,1,24,1,24,3,24,842,8,24,1,24,3,24,845,8,24,1,25, - 1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26, - 3,26,862,8,26,1,26,1,26,3,26,866,8,26,1,26,1,26,3,26,870,8,26,1,26,1, - 26,3,26,874,8,26,1,26,1,26,3,26,878,8,26,1,26,3,26,881,8,26,1,26,3,26, - 884,8,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,892,8,26,1,26,1,26,1,26,3, - 26,897,8,26,1,26,1,26,3,26,901,8,26,1,26,1,26,3,26,905,8,26,1,26,1,26, - 3,26,909,8,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,918,8,27,1,27,1, - 27,3,27,922,8,27,1,27,1,27,1,27,3,27,927,8,27,1,27,1,27,3,27,931,8,27, - 1,27,1,27,3,27,935,8,27,1,27,1,27,3,27,939,8,27,1,27,1,27,3,27,943,8, - 27,3,27,945,8,27,1,27,1,27,3,27,949,8,27,1,27,1,27,3,27,953,8,27,3,27, - 955,8,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,963,8,27,1,27,1,27,1,27,3, - 27,968,8,27,1,27,1,27,3,27,972,8,27,1,27,1,27,3,27,976,8,27,1,27,1,27, - 3,27,980,8,27,1,28,1,28,1,28,3,28,985,8,28,1,28,1,28,1,28,1,28,3,28,991, - 8,28,1,28,1,28,3,28,995,8,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, - 1,28,1,28,1,28,3,28,1008,8,28,1,28,1,28,3,28,1012,8,28,1,28,3,28,1015, - 8,28,1,28,3,28,1018,8,28,1,28,3,28,1021,8,28,1,29,1,29,3,29,1025,8,29, - 1,30,1,30,3,30,1029,8,30,1,30,3,30,1032,8,30,1,30,3,30,1035,8,30,1,30, - 1,30,3,30,1039,8,30,1,30,1,30,3,30,1043,8,30,1,30,1,30,1,31,1,31,3,31, - 1049,8,31,1,31,1,31,3,31,1053,8,31,1,31,1,31,3,31,1057,8,31,1,31,1,31, - 3,31,1061,8,31,1,31,1,31,1,32,1,32,3,32,1067,8,32,1,32,1,32,3,32,1071, - 8,32,1,32,1,32,3,32,1075,8,32,1,32,1,32,3,32,1079,8,32,1,32,1,32,1,33, - 1,33,3,33,1085,8,33,1,33,1,33,3,33,1089,8,33,1,33,5,33,1092,8,33,10,33, - 12,33,1095,9,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,1106, - 8,34,1,35,1,35,3,35,1110,8,35,1,35,1,35,3,35,1114,8,35,1,35,5,35,1117, - 8,35,10,35,12,35,1120,9,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,1137,8,37,1,37,1,37,1,37,5,37,1142, - 8,37,10,37,12,37,1145,9,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1, - 38,1,38,3,38,1157,8,38,1,39,1,39,1,39,1,39,1,39,3,39,1164,8,39,1,40,1, - 40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,3,41,1180, - 8,41,1,41,1,41,3,41,1184,8,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,3,42, - 1193,8,42,1,42,1,42,1,43,1,43,1,43,1,43,3,43,1201,8,43,1,43,3,43,1204, - 8,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,3,44,1214,8,44,1,44,3,44, - 1217,8,44,1,45,1,45,1,45,1,45,1,45,1,45,3,45,1225,8,45,1,45,3,45,1228, - 8,45,1,46,1,46,1,46,1,46,3,46,1234,8,46,1,46,3,46,1237,8,46,1,46,1,46, - 1,47,1,47,3,47,1243,8,47,1,47,1,47,1,48,1,48,1,48,1,48,1,49,1,49,1,49, - 1,49,1,49,1,49,1,49,3,49,1258,8,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49, - 1,49,3,49,1268,8,49,1,49,3,49,1271,8,49,1,50,1,50,3,50,1275,8,50,1,50, - 1,50,3,50,1279,8,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51, - 1,52,1,52,1,52,1,52,1,52,1,52,3,52,1297,8,52,1,53,1,53,1,53,1,53,1,53, - 3,53,1304,8,53,1,53,1,53,1,53,1,53,1,53,3,53,1311,8,53,1,54,1,54,1,54, - 1,54,1,55,1,55,1,55,1,55,1,55,3,55,1322,8,55,1,55,1,55,1,56,1,56,1,56, - 1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58, - 1,58,1,58,3,58,1345,8,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,3,59,1354, - 8,59,1,59,1,59,1,60,1,60,3,60,1360,8,60,1,60,1,60,3,60,1364,8,60,1,60, - 5,60,1367,8,60,10,60,12,60,1370,9,60,1,61,1,61,1,61,1,61,1,62,1,62,3, - 62,1378,8,62,1,62,1,62,3,62,1382,8,62,1,62,5,62,1385,8,62,10,62,12,62, - 1388,9,62,1,63,1,63,1,63,3,63,1393,8,63,1,63,1,63,1,63,1,63,3,63,1399, - 8,63,1,64,1,64,1,64,1,64,3,64,1405,8,64,1,64,1,64,3,64,1409,8,64,1,64, - 1,64,3,64,1413,8,64,1,64,1,64,1,65,1,65,3,65,1419,8,65,1,65,1,65,3,65, - 1423,8,65,1,65,1,65,3,65,1427,8,65,1,65,1,65,1,66,1,66,3,66,1433,8,66, - 1,66,1,66,3,66,1437,8,66,1,66,1,66,3,66,1441,8,66,1,66,1,66,1,67,1,67, - 3,67,1447,8,67,1,67,1,67,3,67,1451,8,67,1,67,1,67,3,67,1455,8,67,1,67, - 1,67,3,67,1459,8,67,1,67,1,67,3,67,1463,8,67,1,67,1,67,1,68,1,68,3,68, - 1469,8,68,1,68,1,68,3,68,1473,8,68,1,68,1,68,3,68,1477,8,68,1,68,1,68, - 3,68,1481,8,68,1,68,1,68,3,68,1485,8,68,1,68,1,68,1,69,1,69,1,69,1,69, - 1,69,1,69,3,69,1495,8,69,1,69,1,69,5,69,1499,8,69,10,69,12,69,1502,9, - 69,1,70,1,70,5,70,1506,8,70,10,70,12,70,1509,9,70,1,71,1,71,3,71,1513, - 8,71,1,71,1,71,1,72,1,72,3,72,1519,8,72,1,73,1,73,1,73,3,73,1524,8,73, - 1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75, - 1,75,3,75,1541,8,75,1,76,1,76,1,76,1,76,3,76,1547,8,76,1,77,1,77,1,77, - 1,77,3,77,1553,8,77,1,77,1,77,3,77,1557,8,77,1,78,1,78,3,78,1561,8,78, - 1,78,1,78,1,78,1,78,1,78,1,78,1,78,3,78,1570,8,78,1,79,1,79,1,79,1,79, - 1,80,1,80,1,80,1,80,1,81,1,81,1,82,1,82,3,82,1584,8,82,1,82,5,82,1587, - 8,82,10,82,12,82,1590,9,82,1,82,1,82,3,82,1594,8,82,4,82,1596,8,82,11, - 82,12,82,1597,1,82,1,82,1,82,3,82,1603,8,82,1,83,1,83,1,83,1,83,3,83, - 1609,8,83,1,83,1,83,1,83,3,83,1614,8,83,1,83,3,83,1617,8,83,1,84,1,84, - 3,84,1621,8,84,1,85,1,85,3,85,1625,8,85,5,85,1627,8,85,10,85,12,85,1630, - 9,85,1,85,1,85,1,85,3,85,1635,8,85,5,85,1637,8,85,10,85,12,85,1640,9, - 85,1,85,1,85,3,85,1644,8,85,1,85,5,85,1647,8,85,10,85,12,85,1650,9,85, - 1,85,3,85,1653,8,85,1,85,3,85,1656,8,85,3,85,1658,8,85,1,86,1,86,3,86, - 1662,8,86,4,86,1664,8,86,11,86,12,86,1665,1,86,1,86,1,87,1,87,3,87,1672, - 8,87,5,87,1674,8,87,10,87,12,87,1677,9,87,1,87,1,87,3,87,1681,8,87,5, - 87,1683,8,87,10,87,12,87,1686,9,87,1,87,1,87,1,88,1,88,1,88,1,88,3,88, - 1694,8,88,1,89,1,89,1,89,1,89,3,89,1700,8,89,1,90,1,90,1,90,1,90,1,90, - 1,90,3,90,1708,8,90,1,90,1,90,3,90,1712,8,90,1,90,1,90,3,90,1716,8,90, - 1,90,1,90,3,90,1720,8,90,1,90,1,90,1,90,1,90,1,90,3,90,1727,8,90,1,90, - 1,90,3,90,1731,8,90,1,90,1,90,3,90,1735,8,90,1,90,1,90,3,90,1739,8,90, - 1,90,3,90,1742,8,90,1,90,3,90,1745,8,90,1,91,1,91,1,91,1,91,1,91,3,91, - 1752,8,91,1,91,1,91,1,92,1,92,3,92,1758,8,92,1,92,1,92,3,92,1762,8,92, - 1,92,5,92,1765,8,92,10,92,12,92,1768,9,92,1,93,1,93,1,93,1,93,3,93,1774, - 8,93,1,93,3,93,1777,8,93,1,93,3,93,1780,8,93,1,93,1,93,1,93,3,93,1785, - 8,93,1,94,1,94,3,94,1789,8,94,1,94,1,94,3,94,1793,8,94,1,94,1,94,1,94, - 3,94,1798,8,94,1,94,1,94,3,94,1802,8,94,1,95,1,95,1,95,1,95,1,96,1,96, - 1,96,3,96,1811,8,96,1,96,1,96,3,96,1815,8,96,1,96,1,96,1,96,3,96,1820, - 8,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,4,96,1832,8,96, - 11,96,12,96,1833,5,96,1836,8,96,10,96,12,96,1839,9,96,1,97,1,97,3,97, - 1843,8,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,3,98,1853,8,98,1,98, - 1,98,1,99,1,99,3,99,1859,8,99,1,99,1,99,1,99,5,99,1864,8,99,10,99,12, - 99,1867,9,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1, - 100,3,100,1879,8,100,1,101,1,101,3,101,1883,8,101,1,101,1,101,3,101,1887, - 8,101,1,101,1,101,3,101,1891,8,101,1,101,5,101,1894,8,101,10,101,12,101, - 1897,9,101,1,101,1,101,3,101,1901,8,101,1,101,1,101,3,101,1905,8,101, - 1,101,1,101,3,101,1909,8,101,1,101,1,101,3,101,1913,8,101,1,102,1,102, - 3,102,1917,8,102,1,102,1,102,3,102,1921,8,102,1,102,1,102,1,103,1,103, - 3,103,1927,8,103,1,103,1,103,3,103,1931,8,103,1,103,1,103,3,103,1935, - 8,103,1,103,1,103,3,103,1939,8,103,1,103,5,103,1942,8,103,10,103,12,103, - 1945,9,103,1,104,1,104,1,104,3,104,1950,8,104,1,104,3,104,1953,8,104, - 1,105,1,105,1,105,1,106,3,106,1959,8,106,1,106,3,106,1962,8,106,1,106, - 1,106,1,106,1,106,3,106,1968,8,106,1,106,1,106,3,106,1972,8,106,1,106, - 1,106,3,106,1976,8,106,1,107,1,107,3,107,1980,8,107,1,107,1,107,3,107, - 1984,8,107,1,107,5,107,1987,8,107,10,107,12,107,1990,9,107,1,107,1,107, - 3,107,1994,8,107,1,107,1,107,3,107,1998,8,107,1,107,5,107,2001,8,107, - 10,107,12,107,2004,9,107,3,107,2006,8,107,1,108,1,108,1,108,1,108,1,108, - 1,108,1,108,3,108,2015,8,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109, - 3,109,2024,8,109,1,109,5,109,2027,8,109,10,109,12,109,2030,9,109,1,110, - 1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,112,1,112,3,112,2042,8,112, - 1,112,3,112,2045,8,112,1,113,1,113,1,113,1,113,1,114,1,114,3,114,2053, - 8,114,1,114,1,114,3,114,2057,8,114,1,114,5,114,2060,8,114,10,114,12,114, - 2063,9,114,1,115,1,115,3,115,2067,8,115,1,115,1,115,3,115,2071,8,115, - 1,115,1,115,1,115,3,115,2076,8,115,1,116,1,116,1,117,1,117,3,117,2082, - 8,117,1,117,5,117,2085,8,117,10,117,12,117,2088,9,117,1,117,1,117,1,117, - 1,117,3,117,2094,8,117,1,118,1,118,3,118,2098,8,118,1,118,1,118,3,118, - 2102,8,118,3,118,2104,8,118,1,118,1,118,3,118,2108,8,118,3,118,2110,8, - 118,1,118,1,118,3,118,2114,8,118,3,118,2116,8,118,1,118,1,118,1,119,1, - 119,3,119,2122,8,119,1,119,1,119,1,120,1,120,3,120,2128,8,120,1,120,1, - 120,3,120,2132,8,120,1,120,3,120,2135,8,120,1,120,3,120,2138,8,120,1, - 120,1,120,1,120,1,120,3,120,2144,8,120,1,120,3,120,2147,8,120,1,120,3, - 120,2150,8,120,1,120,1,120,3,120,2154,8,120,1,120,1,120,1,120,1,120,3, - 120,2160,8,120,1,120,3,120,2163,8,120,1,120,3,120,2166,8,120,1,120,1, - 120,3,120,2170,8,120,1,121,1,121,3,121,2174,8,121,1,121,1,121,3,121,2178, - 8,121,3,121,2180,8,121,1,121,1,121,3,121,2184,8,121,3,121,2186,8,121, - 1,121,1,121,3,121,2190,8,121,3,121,2192,8,121,1,121,1,121,3,121,2196, - 8,121,3,121,2198,8,121,1,121,1,121,1,122,1,122,3,122,2204,8,122,1,122, - 1,122,3,122,2208,8,122,1,122,1,122,3,122,2212,8,122,1,122,1,122,3,122, - 2216,8,122,1,122,1,122,3,122,2220,8,122,1,122,1,122,3,122,2224,8,122, - 1,122,1,122,3,122,2228,8,122,1,122,1,122,3,122,2232,8,122,5,122,2234, - 8,122,10,122,12,122,2237,9,122,3,122,2239,8,122,1,122,1,122,1,123,1,123, - 3,123,2245,8,123,1,123,1,123,3,123,2249,8,123,1,123,1,123,3,123,2253, - 8,123,1,123,3,123,2256,8,123,1,123,5,123,2259,8,123,10,123,12,123,2262, - 9,123,1,124,1,124,3,124,2266,8,124,1,124,1,124,3,124,2270,8,124,1,124, - 1,124,3,124,2274,8,124,1,124,3,124,2277,8,124,1,124,3,124,2280,8,124, - 1,124,5,124,2283,8,124,10,124,12,124,2286,9,124,1,125,1,125,3,125,2290, - 8,125,1,125,3,125,2293,8,125,1,125,3,125,2296,8,125,1,125,3,125,2299, - 8,125,1,125,3,125,2302,8,125,1,125,3,125,2305,8,125,1,126,1,126,3,126, - 2309,8,126,1,126,1,126,3,126,2313,8,126,1,126,1,126,3,126,2317,8,126, - 1,126,1,126,3,126,2321,8,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, - 1,126,3,126,2331,8,126,1,127,3,127,2334,8,127,1,127,3,127,2337,8,127, - 1,127,1,127,3,127,2341,8,127,1,127,3,127,2344,8,127,1,127,3,127,2347, - 8,127,1,128,1,128,3,128,2351,8,128,1,128,1,128,3,128,2355,8,128,1,128, - 1,128,3,128,2359,8,128,1,128,1,128,3,128,2363,8,128,1,128,1,128,3,128, - 2367,8,128,1,128,1,128,3,128,2371,8,128,3,128,2373,8,128,1,128,3,128, - 2376,8,128,1,128,1,128,3,128,2380,8,128,1,128,1,128,3,128,2384,8,128, - 1,128,1,128,3,128,2388,8,128,1,128,1,128,3,128,2392,8,128,3,128,2394, - 8,128,1,128,1,128,1,129,1,129,3,129,2400,8,129,1,129,3,129,2403,8,129, - 1,129,3,129,2406,8,129,1,129,1,129,1,130,1,130,1,131,1,131,1,132,1,132, - 1,132,3,132,2417,8,132,1,133,1,133,1,134,1,134,1,135,1,135,1,135,1,135, - 1,135,5,135,2428,8,135,10,135,12,135,2431,9,135,1,136,1,136,1,136,1,136, - 1,136,5,136,2438,8,136,10,136,12,136,2441,9,136,1,137,1,137,1,137,1,137, - 1,137,5,137,2448,8,137,10,137,12,137,2451,9,137,1,138,1,138,3,138,2455, - 8,138,5,138,2457,8,138,10,138,12,138,2460,9,138,1,138,1,138,1,139,1,139, - 3,139,2466,8,139,1,139,1,139,3,139,2470,8,139,1,139,1,139,3,139,2474, - 8,139,1,139,1,139,3,139,2478,8,139,1,139,1,139,3,139,2482,8,139,1,139, - 1,139,1,139,1,139,1,139,1,139,3,139,2490,8,139,1,139,1,139,3,139,2494, - 8,139,1,139,1,139,3,139,2498,8,139,1,139,1,139,3,139,2502,8,139,1,139, - 1,139,4,139,2506,8,139,11,139,12,139,2507,1,139,1,139,3,139,2512,8,139, - 1,140,1,140,1,141,1,141,3,141,2518,8,141,1,141,1,141,3,141,2522,8,141, - 1,141,5,141,2525,8,141,10,141,12,141,2528,9,141,1,142,1,142,3,142,2532, - 8,142,1,142,1,142,3,142,2536,8,142,1,142,5,142,2539,8,142,10,142,12,142, - 2542,9,142,1,143,1,143,3,143,2546,8,143,1,143,1,143,3,143,2550,8,143, - 1,143,1,143,5,143,2554,8,143,10,143,12,143,2557,9,143,1,144,1,144,1,145, - 1,145,3,145,2563,8,145,1,145,1,145,3,145,2567,8,145,1,145,1,145,5,145, - 2571,8,145,10,145,12,145,2574,9,145,1,146,1,146,1,147,1,147,3,147,2580, - 8,147,1,147,1,147,3,147,2584,8,147,1,147,1,147,5,147,2588,8,147,10,147, - 12,147,2591,9,147,1,148,1,148,1,149,1,149,3,149,2597,8,149,1,149,1,149, - 3,149,2601,8,149,1,149,5,149,2604,8,149,10,149,12,149,2607,9,149,1,150, - 1,150,1,150,4,150,2612,8,150,11,150,12,150,2613,1,150,3,150,2617,8,150, - 1,151,1,151,1,151,3,151,2622,8,151,1,151,1,151,1,151,1,151,1,151,1,151, - 1,151,3,151,2631,8,151,1,151,1,151,3,151,2635,8,151,1,151,3,151,2638, - 8,151,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152, - 3,152,2651,8,152,1,152,3,152,2654,8,152,1,152,1,152,1,153,3,153,2659, - 8,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, - 1,154,3,154,2673,8,154,1,155,1,155,3,155,2677,8,155,5,155,2679,8,155, - 10,155,12,155,2682,9,155,1,155,1,155,3,155,2686,8,155,1,155,3,155,2689, - 8,155,1,156,1,156,3,156,2693,8,156,1,156,5,156,2696,8,156,10,156,12,156, - 2699,9,156,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,3,157, - 2710,8,157,1,158,1,158,3,158,2714,8,158,1,158,1,158,3,158,2718,8,158, - 1,158,1,158,3,158,2722,8,158,1,158,1,158,1,158,1,158,3,158,2728,8,158, - 1,158,1,158,3,158,2732,8,158,1,158,1,158,3,158,2736,8,158,1,158,1,158, - 1,158,1,158,3,158,2742,8,158,1,158,1,158,3,158,2746,8,158,1,158,1,158, - 3,158,2750,8,158,1,158,1,158,1,158,1,158,3,158,2756,8,158,1,158,1,158, - 3,158,2760,8,158,1,158,1,158,3,158,2764,8,158,1,158,1,158,3,158,2768, - 8,158,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,160,1,161, - 1,161,1,161,1,161,1,161,1,161,3,161,2786,8,161,1,162,1,162,1,163,1,163, - 3,163,2792,8,163,1,163,1,163,3,163,2796,8,163,1,163,1,163,3,163,2800, - 8,163,5,163,2802,8,163,10,163,12,163,2805,9,163,3,163,2807,8,163,1,163, - 1,163,1,164,1,164,3,164,2813,8,164,1,164,3,164,2816,8,164,1,165,1,165, - 3,165,2820,8,165,1,165,1,165,3,165,2824,8,165,1,165,1,165,3,165,2828, - 8,165,1,165,1,165,3,165,2832,8,165,5,165,2834,8,165,10,165,12,165,2837, - 9,165,1,165,1,165,1,166,1,166,3,166,2843,8,166,1,166,3,166,2846,8,166, - 1,166,1,166,3,166,2850,8,166,1,166,1,166,1,167,1,167,3,167,2856,8,167, - 1,167,1,167,3,167,2860,8,167,1,167,1,167,1,168,1,168,3,168,2866,8,168, - 1,168,1,168,3,168,2870,8,168,1,168,1,168,3,168,2874,8,168,1,168,1,168, - 1,168,3,168,2879,8,168,1,168,1,168,3,168,2883,8,168,1,168,1,168,3,168, - 2887,8,168,1,168,1,168,3,168,2891,8,168,1,168,1,168,1,168,3,168,2896, - 8,168,1,168,3,168,2899,8,168,1,168,3,168,2902,8,168,1,168,1,168,1,168, - 1,168,3,168,2908,8,168,1,168,1,168,3,168,2912,8,168,1,168,1,168,3,168, - 2916,8,168,3,168,2918,8,168,1,168,1,168,3,168,2922,8,168,1,168,1,168, - 3,168,2926,8,168,1,168,1,168,3,168,2930,8,168,5,168,2932,8,168,10,168, - 12,168,2935,9,168,3,168,2937,8,168,1,168,1,168,3,168,2941,8,168,1,169, - 1,169,1,170,1,170,3,170,2947,8,170,1,170,1,170,1,170,3,170,2952,8,170, - 3,170,2954,8,170,1,170,1,170,3,170,2958,8,170,1,171,1,171,3,171,2962, - 8,171,1,171,1,171,1,171,3,171,2967,8,171,1,171,1,171,3,171,2971,8,171, - 1,172,1,172,1,172,3,172,2976,8,172,1,172,1,172,3,172,2980,8,172,1,172, - 1,172,3,172,2984,8,172,1,172,1,172,3,172,2988,8,172,5,172,2990,8,172, - 10,172,12,172,2993,9,172,1,172,1,172,3,172,2997,8,172,1,173,1,173,3,173, - 3001,8,173,1,173,4,173,3004,8,173,11,173,12,173,3005,1,174,1,174,3,174, - 3010,8,174,1,174,1,174,3,174,3014,8,174,1,174,1,174,3,174,3018,8,174, - 1,174,1,174,3,174,3022,8,174,1,174,3,174,3025,8,174,1,174,3,174,3028, - 8,174,1,174,3,174,3031,8,174,1,174,3,174,3034,8,174,1,174,1,174,1,175, - 1,175,3,175,3040,8,175,1,175,1,175,3,175,3044,8,175,1,176,1,176,3,176, - 3048,8,176,1,176,4,176,3051,8,176,11,176,12,176,3052,1,176,1,176,3,176, - 3057,8,176,1,176,1,176,3,176,3061,8,176,1,176,4,176,3064,8,176,11,176, - 12,176,3065,3,176,3068,8,176,1,176,3,176,3071,8,176,1,176,1,176,3,176, - 3075,8,176,1,176,3,176,3078,8,176,1,176,3,176,3081,8,176,1,176,1,176, - 1,177,1,177,3,177,3087,8,177,1,177,1,177,3,177,3091,8,177,1,177,1,177, - 3,177,3095,8,177,1,177,1,177,1,178,1,178,1,179,1,179,3,179,3103,8,179, - 1,180,1,180,1,180,3,180,3108,8,180,1,181,1,181,3,181,3112,8,181,1,181, - 1,181,1,182,1,182,1,183,1,183,1,184,1,184,1,185,1,185,1,185,3,185,3125, - 8,185,1,186,1,186,1,186,1,186,1,186,3,186,3132,8,186,1,187,1,187,1,188, - 1,188,1,189,1,189,1,190,1,190,1,190,0,2,138,192,191,0,2,4,6,8,10,12,14, - 16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60, - 62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104, - 106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140, - 142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176, - 178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212, - 214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248, - 250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284, - 286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320, - 322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356, - 358,360,362,364,366,368,370,372,374,376,378,380,0,14,4,0,92,92,108,108, - 134,134,140,140,2,0,53,54,75,76,2,0,6,6,12,16,1,0,18,19,2,0,20,20,170, - 170,2,0,21,22,165,165,1,0,168,169,2,0,87,87,145,145,2,0,68,68,83,83,1, - 0,181,182,32,0,47,47,49,50,52,52,55,58,61,61,63,64,66,68,70,71,74,74, + 7,188,2,189,7,189,2,190,7,190,2,191,7,191,2,192,7,192,1,0,1,0,3,0,389, + 8,0,1,0,1,0,3,0,393,8,0,1,0,5,0,396,8,0,10,0,12,0,399,9,0,1,0,3,0,402, + 8,0,1,0,1,0,1,1,3,1,407,8,1,1,1,3,1,410,8,1,1,1,1,1,3,1,414,8,1,1,1,3, + 1,417,8,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,445,8,2,1,3,1,3,1,3,1, + 3,3,3,451,8,3,1,3,1,3,1,3,1,3,1,3,3,3,458,8,3,1,3,1,3,3,3,462,8,3,1,3, + 1,3,3,3,466,8,3,1,3,1,3,3,3,470,8,3,1,4,3,4,473,8,4,1,4,1,4,3,4,477,8, + 4,1,4,1,4,3,4,481,8,4,1,4,1,4,3,4,485,8,4,1,4,5,4,488,8,4,10,4,12,4,491, + 9,4,1,4,3,4,494,8,4,3,4,496,8,4,1,4,1,4,1,5,1,5,1,5,3,5,503,8,5,1,5,1, + 5,3,5,507,8,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,516,8,5,1,5,1,5,1,5,3,5, + 521,8,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,531,8,6,1,6,1,6,3,6,535,8, + 6,1,6,1,6,3,6,539,8,6,1,6,5,6,542,8,6,10,6,12,6,545,9,6,1,6,1,6,1,6,1, + 6,1,6,1,6,1,7,1,7,1,7,1,7,3,7,557,8,7,1,7,1,7,3,7,561,8,7,1,7,1,7,1,7, + 1,7,1,7,1,7,3,7,569,8,7,1,7,1,7,3,7,573,8,7,1,7,1,7,3,7,577,8,7,1,7,1, + 7,3,7,581,8,7,1,8,1,8,1,8,1,8,1,8,1,8,3,8,589,8,8,1,8,1,8,3,8,593,8,8, + 1,8,1,8,3,8,597,8,8,1,8,1,8,3,8,601,8,8,1,9,1,9,1,9,1,9,1,9,1,9,1,10, + 1,10,1,10,1,10,1,10,1,10,1,10,3,10,616,8,10,1,10,1,10,1,10,3,10,621,8, + 10,1,10,1,10,1,10,1,10,3,10,627,8,10,1,10,1,10,3,10,631,8,10,1,10,3,10, + 634,8,10,1,10,3,10,637,8,10,1,10,1,10,1,11,1,11,3,11,643,8,11,1,11,1, + 11,3,11,647,8,11,1,11,5,11,650,8,11,10,11,12,11,653,9,11,3,11,655,8,11, + 1,11,1,11,3,11,659,8,11,1,11,3,11,662,8,11,1,11,3,11,665,8,11,1,12,1, + 12,3,12,669,8,12,1,12,1,12,3,12,673,8,12,1,12,1,12,1,13,1,13,3,13,679, + 8,13,1,13,1,13,3,13,683,8,13,1,13,5,13,686,8,13,10,13,12,13,689,9,13, + 1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16, + 1,16,3,16,706,8,16,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,3,18, + 717,8,18,1,19,1,19,1,19,1,19,3,19,723,8,19,1,19,1,19,3,19,727,8,19,1, + 19,1,19,1,19,1,19,1,19,3,19,734,8,19,1,20,1,20,1,20,1,20,1,20,1,20,1, + 20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,3,21,754,8, + 21,1,21,1,21,3,21,758,8,21,1,21,3,21,761,8,21,1,21,3,21,764,8,21,1,21, + 3,21,767,8,21,1,21,3,21,770,8,21,1,21,1,21,3,21,774,8,21,1,21,5,21,777, + 8,21,10,21,12,21,780,9,21,1,21,3,21,783,8,21,1,21,1,21,1,21,1,21,1,21, + 1,21,1,22,1,22,3,22,793,8,22,1,22,1,22,3,22,797,8,22,1,22,5,22,800,8, + 22,10,22,12,22,803,9,22,1,23,1,23,3,23,807,8,23,1,23,1,23,1,23,3,23,812, + 8,23,1,23,1,23,1,24,1,24,3,24,818,8,24,1,24,1,24,3,24,822,8,24,1,24,1, + 24,3,24,826,8,24,1,24,5,24,829,8,24,10,24,12,24,832,9,24,1,24,1,24,1, + 24,1,24,3,24,838,8,24,1,24,1,24,3,24,842,8,24,1,24,1,24,3,24,846,8,24, + 1,24,3,24,849,8,24,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26, + 1,26,1,26,1,26,1,26,1,26,3,26,866,8,26,1,26,1,26,3,26,870,8,26,1,26,1, + 26,3,26,874,8,26,1,26,1,26,3,26,878,8,26,1,26,1,26,3,26,882,8,26,1,26, + 3,26,885,8,26,1,26,3,26,888,8,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,896, + 8,26,1,26,1,26,1,26,3,26,901,8,26,1,26,1,26,3,26,905,8,26,1,26,1,26,3, + 26,909,8,26,1,26,1,26,3,26,913,8,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27, + 3,27,922,8,27,1,27,1,27,3,27,926,8,27,1,27,1,27,1,27,3,27,931,8,27,1, + 27,1,27,3,27,935,8,27,1,27,1,27,3,27,939,8,27,1,27,1,27,3,27,943,8,27, + 1,27,1,27,3,27,947,8,27,3,27,949,8,27,1,27,1,27,3,27,953,8,27,1,27,1, + 27,3,27,957,8,27,3,27,959,8,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,967, + 8,27,1,27,1,27,1,27,3,27,972,8,27,1,27,1,27,3,27,976,8,27,1,27,1,27,3, + 27,980,8,27,1,27,1,27,3,27,984,8,27,1,28,1,28,1,28,3,28,989,8,28,1,28, + 1,28,1,28,1,28,3,28,995,8,28,1,28,1,28,3,28,999,8,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,1012,8,28,1,28,1,28,3,28,1016, + 8,28,1,28,3,28,1019,8,28,1,28,3,28,1022,8,28,1,28,3,28,1025,8,28,1,29, + 1,29,3,29,1029,8,29,1,30,1,30,3,30,1033,8,30,1,30,3,30,1036,8,30,1,30, + 3,30,1039,8,30,1,30,1,30,3,30,1043,8,30,1,30,1,30,3,30,1047,8,30,1,30, + 1,30,1,31,1,31,3,31,1053,8,31,1,31,1,31,3,31,1057,8,31,1,31,1,31,3,31, + 1061,8,31,1,31,1,31,3,31,1065,8,31,1,31,1,31,1,32,1,32,3,32,1071,8,32, + 1,32,1,32,3,32,1075,8,32,1,32,1,32,3,32,1079,8,32,1,32,1,32,3,32,1083, + 8,32,1,32,1,32,1,33,1,33,3,33,1089,8,33,1,33,1,33,3,33,1093,8,33,1,33, + 5,33,1096,8,33,10,33,12,33,1099,9,33,1,34,1,34,1,34,1,34,1,34,1,34,1, + 34,1,34,1,34,3,34,1110,8,34,1,35,1,35,3,35,1114,8,35,1,35,1,35,3,35,1118, + 8,35,1,35,5,35,1121,8,35,10,35,12,35,1124,9,35,1,36,1,36,1,36,1,36,1, + 36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,1141,8,37,1, + 37,1,37,1,37,5,37,1146,8,37,10,37,12,37,1149,9,37,1,38,1,38,1,38,1,38, + 1,38,1,38,1,38,1,38,1,38,1,38,3,38,1161,8,38,1,39,1,39,1,39,1,39,1,39, + 3,39,1168,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41, + 1,41,1,41,1,41,3,41,1184,8,41,1,41,1,41,3,41,1188,8,41,1,42,1,42,1,42, + 1,42,1,42,1,42,1,42,3,42,1197,8,42,1,42,1,42,1,43,1,43,1,43,1,43,3,43, + 1205,8,43,1,43,3,43,1208,8,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44, + 3,44,1218,8,44,1,44,3,44,1221,8,44,1,45,1,45,1,45,1,45,1,45,1,45,3,45, + 1229,8,45,1,45,3,45,1232,8,45,1,46,1,46,1,46,1,46,3,46,1238,8,46,1,46, + 3,46,1241,8,46,1,46,1,46,1,47,1,47,3,47,1247,8,47,1,47,1,47,1,48,1,48, + 1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,3,49,1262,8,49,1,49,1,49, + 1,49,1,49,1,49,1,49,1,49,1,49,3,49,1272,8,49,1,49,3,49,1275,8,49,1,50, + 1,50,3,50,1279,8,50,1,50,1,50,3,50,1283,8,50,1,50,1,50,1,51,1,51,1,51, + 1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52,3,52,1302, + 8,52,1,53,1,53,1,53,1,53,1,53,3,53,1309,8,53,1,53,1,53,1,53,1,53,1,53, + 3,53,1316,8,53,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,3,55,1327, + 8,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57, + 1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,3,58,1350,8,58,1,58,1,58,1,59, + 1,59,1,59,1,59,1,59,3,59,1359,8,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60, + 1,60,3,60,1369,8,60,1,60,1,60,3,60,1373,8,60,1,60,1,60,3,60,1377,8,60, + 1,60,1,60,3,60,1381,8,60,1,60,5,60,1384,8,60,10,60,12,60,1387,9,60,1, + 60,3,60,1390,8,60,1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62,3,62,1400,8, + 62,1,62,1,62,3,62,1404,8,62,1,62,5,62,1407,8,62,10,62,12,62,1410,9,62, + 1,63,1,63,1,63,1,63,1,64,1,64,3,64,1418,8,64,1,64,1,64,3,64,1422,8,64, + 1,64,5,64,1425,8,64,10,64,12,64,1428,9,64,1,65,1,65,1,65,3,65,1433,8, + 65,1,65,1,65,1,65,1,65,3,65,1439,8,65,1,66,1,66,1,66,1,66,3,66,1445,8, + 66,1,66,1,66,3,66,1449,8,66,1,66,1,66,3,66,1453,8,66,1,66,1,66,1,67,1, + 67,3,67,1459,8,67,1,67,1,67,3,67,1463,8,67,1,67,1,67,3,67,1467,8,67,1, + 67,1,67,1,68,1,68,3,68,1473,8,68,1,68,1,68,3,68,1477,8,68,1,68,1,68,3, + 68,1481,8,68,1,68,1,68,1,69,1,69,3,69,1487,8,69,1,69,1,69,3,69,1491,8, + 69,1,69,1,69,3,69,1495,8,69,1,69,1,69,3,69,1499,8,69,1,69,1,69,3,69,1503, + 8,69,1,69,1,69,1,70,1,70,3,70,1509,8,70,1,70,1,70,3,70,1513,8,70,1,70, + 1,70,3,70,1517,8,70,1,70,1,70,3,70,1521,8,70,1,70,1,70,3,70,1525,8,70, + 1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1535,8,71,1,71,1,71,5,71, + 1539,8,71,10,71,12,71,1542,9,71,1,72,1,72,5,72,1546,8,72,10,72,12,72, + 1549,9,72,1,73,1,73,3,73,1553,8,73,1,73,1,73,1,74,1,74,3,74,1559,8,74, + 1,75,1,75,1,75,3,75,1564,8,75,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77, + 1,77,1,77,1,77,1,77,1,77,1,77,1,77,3,77,1581,8,77,1,78,1,78,1,78,1,78, + 3,78,1587,8,78,1,79,1,79,1,79,1,79,3,79,1593,8,79,1,79,1,79,3,79,1597, + 8,79,1,80,1,80,3,80,1601,8,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,3,80, + 1610,8,80,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,83,1,83,1,84,1,84, + 3,84,1624,8,84,1,84,5,84,1627,8,84,10,84,12,84,1630,9,84,1,84,1,84,3, + 84,1634,8,84,4,84,1636,8,84,11,84,12,84,1637,1,84,1,84,1,84,3,84,1643, + 8,84,1,85,1,85,1,85,1,85,3,85,1649,8,85,1,85,1,85,1,85,3,85,1654,8,85, + 1,85,3,85,1657,8,85,1,86,1,86,3,86,1661,8,86,1,87,1,87,3,87,1665,8,87, + 5,87,1667,8,87,10,87,12,87,1670,9,87,1,87,1,87,1,87,3,87,1675,8,87,5, + 87,1677,8,87,10,87,12,87,1680,9,87,1,87,1,87,3,87,1684,8,87,1,87,5,87, + 1687,8,87,10,87,12,87,1690,9,87,1,87,3,87,1693,8,87,1,87,3,87,1696,8, + 87,3,87,1698,8,87,1,88,1,88,3,88,1702,8,88,4,88,1704,8,88,11,88,12,88, + 1705,1,88,1,88,1,89,1,89,3,89,1712,8,89,5,89,1714,8,89,10,89,12,89,1717, + 9,89,1,89,1,89,3,89,1721,8,89,5,89,1723,8,89,10,89,12,89,1726,9,89,1, + 89,1,89,1,90,1,90,1,90,1,90,3,90,1734,8,90,1,91,1,91,1,91,1,91,3,91,1740, + 8,91,1,92,1,92,1,92,1,92,1,92,1,92,3,92,1748,8,92,1,92,1,92,3,92,1752, + 8,92,1,92,1,92,3,92,1756,8,92,1,92,1,92,3,92,1760,8,92,1,92,1,92,1,92, + 1,92,1,92,3,92,1767,8,92,1,92,1,92,3,92,1771,8,92,1,92,1,92,3,92,1775, + 8,92,1,92,1,92,3,92,1779,8,92,1,92,3,92,1782,8,92,1,92,3,92,1785,8,92, + 1,93,1,93,1,93,1,93,1,93,3,93,1792,8,93,1,93,1,93,1,94,1,94,3,94,1798, + 8,94,1,94,1,94,3,94,1802,8,94,1,94,5,94,1805,8,94,10,94,12,94,1808,9, + 94,1,95,1,95,1,95,1,95,3,95,1814,8,95,1,95,3,95,1817,8,95,1,95,3,95,1820, + 8,95,1,95,1,95,1,95,3,95,1825,8,95,1,96,1,96,3,96,1829,8,96,1,96,1,96, + 3,96,1833,8,96,1,96,1,96,1,96,3,96,1838,8,96,1,96,1,96,3,96,1842,8,96, + 1,97,1,97,1,97,1,97,1,98,1,98,1,98,3,98,1851,8,98,1,98,1,98,3,98,1855, + 8,98,1,98,1,98,1,98,3,98,1860,8,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98, + 1,98,1,98,1,98,4,98,1872,8,98,11,98,12,98,1873,5,98,1876,8,98,10,98,12, + 98,1879,9,98,1,99,1,99,3,99,1883,8,99,1,99,1,99,1,99,1,99,1,99,1,99,1, + 100,1,100,3,100,1893,8,100,1,100,1,100,1,101,1,101,3,101,1899,8,101,1, + 101,1,101,1,101,5,101,1904,8,101,10,101,12,101,1907,9,101,1,102,1,102, + 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,3,102,1919,8,102,1,103, + 1,103,3,103,1923,8,103,1,103,1,103,3,103,1927,8,103,1,103,1,103,3,103, + 1931,8,103,1,103,5,103,1934,8,103,10,103,12,103,1937,9,103,1,103,1,103, + 3,103,1941,8,103,1,103,1,103,3,103,1945,8,103,1,103,1,103,3,103,1949, + 8,103,1,103,1,103,3,103,1953,8,103,1,104,1,104,3,104,1957,8,104,1,104, + 1,104,3,104,1961,8,104,1,104,1,104,1,105,1,105,3,105,1967,8,105,1,105, + 1,105,3,105,1971,8,105,1,105,1,105,3,105,1975,8,105,1,105,1,105,3,105, + 1979,8,105,1,105,5,105,1982,8,105,10,105,12,105,1985,9,105,1,106,1,106, + 1,106,3,106,1990,8,106,1,106,3,106,1993,8,106,1,107,1,107,1,107,1,108, + 3,108,1999,8,108,1,108,3,108,2002,8,108,1,108,1,108,1,108,1,108,3,108, + 2008,8,108,1,108,1,108,3,108,2012,8,108,1,108,1,108,3,108,2016,8,108, + 1,109,1,109,3,109,2020,8,109,1,109,1,109,3,109,2024,8,109,1,109,5,109, + 2027,8,109,10,109,12,109,2030,9,109,1,109,1,109,3,109,2034,8,109,1,109, + 1,109,3,109,2038,8,109,1,109,5,109,2041,8,109,10,109,12,109,2044,9,109, + 3,109,2046,8,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,3,110,2055, + 8,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,3,111,2064,8,111,1,111, + 5,111,2067,8,111,10,111,12,111,2070,9,111,1,112,1,112,1,112,1,112,1,113, + 1,113,1,113,1,113,1,114,1,114,3,114,2082,8,114,1,114,3,114,2085,8,114, + 1,115,1,115,1,115,1,115,1,116,1,116,3,116,2093,8,116,1,116,1,116,3,116, + 2097,8,116,1,116,5,116,2100,8,116,10,116,12,116,2103,9,116,1,117,1,117, + 3,117,2107,8,117,1,117,1,117,3,117,2111,8,117,1,117,1,117,1,117,3,117, + 2116,8,117,1,118,1,118,1,119,1,119,3,119,2122,8,119,1,119,5,119,2125, + 8,119,10,119,12,119,2128,9,119,1,119,1,119,1,119,1,119,3,119,2134,8,119, + 1,120,1,120,3,120,2138,8,120,1,120,1,120,3,120,2142,8,120,3,120,2144, + 8,120,1,120,1,120,3,120,2148,8,120,3,120,2150,8,120,1,120,1,120,3,120, + 2154,8,120,3,120,2156,8,120,1,120,1,120,1,121,1,121,3,121,2162,8,121, + 1,121,1,121,1,122,1,122,3,122,2168,8,122,1,122,1,122,3,122,2172,8,122, + 1,122,3,122,2175,8,122,1,122,3,122,2178,8,122,1,122,1,122,1,122,1,122, + 3,122,2184,8,122,1,122,3,122,2187,8,122,1,122,3,122,2190,8,122,1,122, + 1,122,3,122,2194,8,122,1,122,1,122,1,122,1,122,3,122,2200,8,122,1,122, + 3,122,2203,8,122,1,122,3,122,2206,8,122,1,122,1,122,3,122,2210,8,122, + 1,123,1,123,3,123,2214,8,123,1,123,1,123,3,123,2218,8,123,3,123,2220, + 8,123,1,123,1,123,3,123,2224,8,123,3,123,2226,8,123,1,123,1,123,3,123, + 2230,8,123,3,123,2232,8,123,1,123,1,123,3,123,2236,8,123,3,123,2238,8, + 123,1,123,1,123,1,124,1,124,3,124,2244,8,124,1,124,1,124,3,124,2248,8, + 124,1,124,1,124,3,124,2252,8,124,1,124,1,124,3,124,2256,8,124,1,124,1, + 124,3,124,2260,8,124,1,124,1,124,3,124,2264,8,124,1,124,1,124,3,124,2268, + 8,124,1,124,1,124,3,124,2272,8,124,5,124,2274,8,124,10,124,12,124,2277, + 9,124,3,124,2279,8,124,1,124,1,124,1,125,1,125,3,125,2285,8,125,1,125, + 1,125,3,125,2289,8,125,1,125,1,125,3,125,2293,8,125,1,125,3,125,2296, + 8,125,1,125,5,125,2299,8,125,10,125,12,125,2302,9,125,1,126,1,126,3,126, + 2306,8,126,1,126,1,126,3,126,2310,8,126,1,126,1,126,3,126,2314,8,126, + 1,126,3,126,2317,8,126,1,126,3,126,2320,8,126,1,126,5,126,2323,8,126, + 10,126,12,126,2326,9,126,1,127,1,127,3,127,2330,8,127,1,127,3,127,2333, + 8,127,1,127,3,127,2336,8,127,1,127,3,127,2339,8,127,1,127,3,127,2342, + 8,127,1,127,3,127,2345,8,127,1,128,1,128,3,128,2349,8,128,1,128,1,128, + 3,128,2353,8,128,1,128,1,128,3,128,2357,8,128,1,128,1,128,3,128,2361, + 8,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,3,128,2371,8,128, + 1,129,3,129,2374,8,129,1,129,3,129,2377,8,129,1,129,1,129,3,129,2381, + 8,129,1,129,3,129,2384,8,129,1,129,3,129,2387,8,129,1,130,1,130,3,130, + 2391,8,130,1,130,1,130,3,130,2395,8,130,1,130,1,130,3,130,2399,8,130, + 1,130,1,130,3,130,2403,8,130,1,130,1,130,3,130,2407,8,130,1,130,1,130, + 3,130,2411,8,130,3,130,2413,8,130,1,130,3,130,2416,8,130,1,130,1,130, + 3,130,2420,8,130,1,130,1,130,3,130,2424,8,130,1,130,1,130,3,130,2428, + 8,130,1,130,1,130,3,130,2432,8,130,3,130,2434,8,130,1,130,1,130,1,131, + 1,131,3,131,2440,8,131,1,131,3,131,2443,8,131,1,131,3,131,2446,8,131, + 1,131,1,131,1,132,1,132,1,133,1,133,1,134,1,134,1,134,3,134,2457,8,134, + 1,135,1,135,1,136,1,136,1,137,1,137,1,137,1,137,1,137,5,137,2468,8,137, + 10,137,12,137,2471,9,137,1,138,1,138,1,138,1,138,1,138,5,138,2478,8,138, + 10,138,12,138,2481,9,138,1,139,1,139,1,139,1,139,1,139,5,139,2488,8,139, + 10,139,12,139,2491,9,139,1,140,1,140,3,140,2495,8,140,5,140,2497,8,140, + 10,140,12,140,2500,9,140,1,140,1,140,1,141,1,141,3,141,2506,8,141,1,141, + 1,141,3,141,2510,8,141,1,141,1,141,3,141,2514,8,141,1,141,1,141,3,141, + 2518,8,141,1,141,1,141,3,141,2522,8,141,1,141,1,141,1,141,1,141,1,141, + 1,141,3,141,2530,8,141,1,141,1,141,3,141,2534,8,141,1,141,1,141,3,141, + 2538,8,141,1,141,1,141,3,141,2542,8,141,1,141,1,141,4,141,2546,8,141, + 11,141,12,141,2547,1,141,1,141,3,141,2552,8,141,1,142,1,142,1,143,1,143, + 3,143,2558,8,143,1,143,1,143,3,143,2562,8,143,1,143,5,143,2565,8,143, + 10,143,12,143,2568,9,143,1,144,1,144,3,144,2572,8,144,1,144,1,144,3,144, + 2576,8,144,1,144,5,144,2579,8,144,10,144,12,144,2582,9,144,1,145,1,145, + 3,145,2586,8,145,1,145,1,145,3,145,2590,8,145,1,145,1,145,5,145,2594, + 8,145,10,145,12,145,2597,9,145,1,146,1,146,1,147,1,147,3,147,2603,8,147, + 1,147,1,147,3,147,2607,8,147,1,147,1,147,5,147,2611,8,147,10,147,12,147, + 2614,9,147,1,148,1,148,1,149,1,149,3,149,2620,8,149,1,149,1,149,3,149, + 2624,8,149,1,149,1,149,5,149,2628,8,149,10,149,12,149,2631,9,149,1,150, + 1,150,1,151,1,151,3,151,2637,8,151,1,151,1,151,3,151,2641,8,151,1,151, + 5,151,2644,8,151,10,151,12,151,2647,9,151,1,152,1,152,1,152,4,152,2652, + 8,152,11,152,12,152,2653,1,152,3,152,2657,8,152,1,153,1,153,1,153,3,153, + 2662,8,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,3,153,2671,8,153, + 1,153,1,153,3,153,2675,8,153,1,153,3,153,2678,8,153,1,154,1,154,1,154, + 1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,3,154,2691,8,154,1,154, + 3,154,2694,8,154,1,154,1,154,1,155,3,155,2699,8,155,1,155,1,155,1,156, + 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,3,156,2713,8,156, + 1,157,1,157,3,157,2717,8,157,5,157,2719,8,157,10,157,12,157,2722,9,157, + 1,157,1,157,3,157,2726,8,157,1,157,3,157,2729,8,157,1,158,1,158,3,158, + 2733,8,158,1,158,5,158,2736,8,158,10,158,12,158,2739,9,158,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,3,159,2750,8,159,1,160,1,160, + 3,160,2754,8,160,1,160,1,160,3,160,2758,8,160,1,160,1,160,3,160,2762, + 8,160,1,160,1,160,1,160,1,160,3,160,2768,8,160,1,160,1,160,3,160,2772, + 8,160,1,160,1,160,3,160,2776,8,160,1,160,1,160,1,160,1,160,3,160,2782, + 8,160,1,160,1,160,3,160,2786,8,160,1,160,1,160,3,160,2790,8,160,1,160, + 1,160,1,160,1,160,3,160,2796,8,160,1,160,1,160,3,160,2800,8,160,1,160, + 1,160,3,160,2804,8,160,1,160,1,160,3,160,2808,8,160,1,161,1,161,1,161, + 1,161,1,162,1,162,1,162,1,162,1,162,1,162,1,163,1,163,1,163,1,163,1,163, + 1,163,3,163,2826,8,163,1,164,1,164,1,165,1,165,3,165,2832,8,165,1,165, + 1,165,3,165,2836,8,165,1,165,1,165,3,165,2840,8,165,5,165,2842,8,165, + 10,165,12,165,2845,9,165,3,165,2847,8,165,1,165,1,165,1,166,1,166,3,166, + 2853,8,166,1,166,3,166,2856,8,166,1,167,1,167,3,167,2860,8,167,1,167, + 1,167,3,167,2864,8,167,1,167,1,167,3,167,2868,8,167,1,167,1,167,3,167, + 2872,8,167,5,167,2874,8,167,10,167,12,167,2877,9,167,1,167,1,167,1,168, + 1,168,3,168,2883,8,168,1,168,3,168,2886,8,168,1,168,1,168,3,168,2890, + 8,168,1,168,1,168,1,169,1,169,3,169,2896,8,169,1,169,1,169,3,169,2900, + 8,169,1,169,1,169,1,170,1,170,3,170,2906,8,170,1,170,1,170,3,170,2910, + 8,170,1,170,1,170,3,170,2914,8,170,1,170,1,170,1,170,3,170,2919,8,170, + 1,170,1,170,3,170,2923,8,170,1,170,1,170,3,170,2927,8,170,1,170,1,170, + 3,170,2931,8,170,1,170,1,170,1,170,3,170,2936,8,170,1,170,3,170,2939, + 8,170,1,170,3,170,2942,8,170,1,170,1,170,1,170,1,170,3,170,2948,8,170, + 1,170,1,170,3,170,2952,8,170,1,170,1,170,3,170,2956,8,170,3,170,2958, + 8,170,1,170,1,170,3,170,2962,8,170,1,170,1,170,3,170,2966,8,170,1,170, + 1,170,3,170,2970,8,170,5,170,2972,8,170,10,170,12,170,2975,9,170,3,170, + 2977,8,170,1,170,1,170,3,170,2981,8,170,1,171,1,171,1,172,1,172,3,172, + 2987,8,172,1,172,1,172,1,172,3,172,2992,8,172,3,172,2994,8,172,1,172, + 1,172,3,172,2998,8,172,1,173,1,173,3,173,3002,8,173,1,173,1,173,1,173, + 3,173,3007,8,173,1,173,1,173,3,173,3011,8,173,1,174,1,174,1,174,3,174, + 3016,8,174,1,174,1,174,3,174,3020,8,174,1,174,1,174,3,174,3024,8,174, + 1,174,1,174,3,174,3028,8,174,5,174,3030,8,174,10,174,12,174,3033,9,174, + 1,174,1,174,3,174,3037,8,174,1,175,1,175,3,175,3041,8,175,1,175,4,175, + 3044,8,175,11,175,12,175,3045,1,176,1,176,3,176,3050,8,176,1,176,1,176, + 3,176,3054,8,176,1,176,1,176,3,176,3058,8,176,1,176,1,176,3,176,3062, + 8,176,1,176,3,176,3065,8,176,1,176,3,176,3068,8,176,1,176,3,176,3071, + 8,176,1,176,3,176,3074,8,176,1,176,1,176,1,177,1,177,3,177,3080,8,177, + 1,177,1,177,3,177,3084,8,177,1,178,1,178,3,178,3088,8,178,1,178,4,178, + 3091,8,178,11,178,12,178,3092,1,178,1,178,3,178,3097,8,178,1,178,1,178, + 3,178,3101,8,178,1,178,4,178,3104,8,178,11,178,12,178,3105,3,178,3108, + 8,178,1,178,3,178,3111,8,178,1,178,1,178,3,178,3115,8,178,1,178,3,178, + 3118,8,178,1,178,3,178,3121,8,178,1,178,1,178,1,179,1,179,3,179,3127, + 8,179,1,179,1,179,3,179,3131,8,179,1,179,1,179,3,179,3135,8,179,1,179, + 1,179,1,180,1,180,1,181,1,181,3,181,3143,8,181,1,182,1,182,1,182,3,182, + 3148,8,182,1,183,1,183,3,183,3152,8,183,1,183,1,183,1,184,1,184,1,185, + 1,185,1,186,1,186,1,187,1,187,1,187,3,187,3165,8,187,1,188,1,188,1,188, + 1,188,1,188,3,188,3172,8,188,1,189,1,189,1,190,1,190,1,191,1,191,1,192, + 1,192,1,192,0,2,142,196,193,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30, + 32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76, + 78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116, + 118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152, + 154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188, + 190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224, + 226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260, + 262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296, + 298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332, + 334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368, + 370,372,374,376,378,380,382,384,0,15,4,0,92,92,108,108,134,134,141,141, + 2,0,53,53,75,75,2,0,53,54,75,76,2,0,6,6,12,16,1,0,18,19,2,0,20,20,171, + 171,2,0,21,22,166,166,1,0,169,170,2,0,87,87,146,146,2,0,68,68,83,83,1, + 0,182,183,32,0,47,47,49,50,52,52,55,58,61,61,63,64,66,68,70,71,74,74, 77,77,79,79,84,86,88,89,92,92,96,96,98,98,100,100,102,102,104,107,109, - 112,114,115,127,132,134,135,137,137,139,139,142,142,144,144,146,146,149, - 151,155,155,159,164,166,166,2,0,13,13,26,29,2,0,15,15,30,33,2,0,34,44, - 170,170,3561,0,382,1,0,0,0,2,402,1,0,0,0,4,440,1,0,0,0,6,442,1,0,0,0, - 8,468,1,0,0,0,10,516,1,0,0,0,12,518,1,0,0,0,14,548,1,0,0,0,16,578,1,0, - 0,0,18,598,1,0,0,0,20,604,1,0,0,0,22,660,1,0,0,0,24,662,1,0,0,0,26,672, - 1,0,0,0,28,686,1,0,0,0,30,690,1,0,0,0,32,694,1,0,0,0,34,703,1,0,0,0,36, - 709,1,0,0,0,38,729,1,0,0,0,40,731,1,0,0,0,42,743,1,0,0,0,44,786,1,0,0, - 0,46,800,1,0,0,0,48,844,1,0,0,0,50,846,1,0,0,0,52,852,1,0,0,0,54,910, - 1,0,0,0,56,981,1,0,0,0,58,1024,1,0,0,0,60,1026,1,0,0,0,62,1046,1,0,0, - 0,64,1064,1,0,0,0,66,1082,1,0,0,0,68,1096,1,0,0,0,70,1107,1,0,0,0,72, - 1121,1,0,0,0,74,1129,1,0,0,0,76,1146,1,0,0,0,78,1163,1,0,0,0,80,1165, - 1,0,0,0,82,1172,1,0,0,0,84,1185,1,0,0,0,86,1196,1,0,0,0,88,1216,1,0,0, - 0,90,1227,1,0,0,0,92,1229,1,0,0,0,94,1242,1,0,0,0,96,1246,1,0,0,0,98, - 1270,1,0,0,0,100,1272,1,0,0,0,102,1282,1,0,0,0,104,1296,1,0,0,0,106,1298, - 1,0,0,0,108,1312,1,0,0,0,110,1316,1,0,0,0,112,1325,1,0,0,0,114,1331,1, - 0,0,0,116,1339,1,0,0,0,118,1348,1,0,0,0,120,1357,1,0,0,0,122,1371,1,0, - 0,0,124,1375,1,0,0,0,126,1389,1,0,0,0,128,1400,1,0,0,0,130,1416,1,0,0, - 0,132,1430,1,0,0,0,134,1444,1,0,0,0,136,1466,1,0,0,0,138,1494,1,0,0,0, - 140,1503,1,0,0,0,142,1510,1,0,0,0,144,1518,1,0,0,0,146,1520,1,0,0,0,148, - 1525,1,0,0,0,150,1540,1,0,0,0,152,1546,1,0,0,0,154,1548,1,0,0,0,156,1560, - 1,0,0,0,158,1571,1,0,0,0,160,1575,1,0,0,0,162,1579,1,0,0,0,164,1602,1, - 0,0,0,166,1616,1,0,0,0,168,1620,1,0,0,0,170,1657,1,0,0,0,172,1663,1,0, - 0,0,174,1675,1,0,0,0,176,1693,1,0,0,0,178,1699,1,0,0,0,180,1701,1,0,0, - 0,182,1751,1,0,0,0,184,1755,1,0,0,0,186,1769,1,0,0,0,188,1788,1,0,0,0, - 190,1803,1,0,0,0,192,1819,1,0,0,0,194,1840,1,0,0,0,196,1850,1,0,0,0,198, - 1856,1,0,0,0,200,1878,1,0,0,0,202,1912,1,0,0,0,204,1914,1,0,0,0,206,1926, - 1,0,0,0,208,1946,1,0,0,0,210,1954,1,0,0,0,212,1961,1,0,0,0,214,2005,1, - 0,0,0,216,2014,1,0,0,0,218,2016,1,0,0,0,220,2031,1,0,0,0,222,2035,1,0, - 0,0,224,2039,1,0,0,0,226,2046,1,0,0,0,228,2050,1,0,0,0,230,2075,1,0,0, - 0,232,2077,1,0,0,0,234,2093,1,0,0,0,236,2095,1,0,0,0,238,2119,1,0,0,0, - 240,2169,1,0,0,0,242,2171,1,0,0,0,244,2201,1,0,0,0,246,2242,1,0,0,0,248, - 2263,1,0,0,0,250,2287,1,0,0,0,252,2330,1,0,0,0,254,2346,1,0,0,0,256,2348, - 1,0,0,0,258,2397,1,0,0,0,260,2409,1,0,0,0,262,2411,1,0,0,0,264,2413,1, - 0,0,0,266,2418,1,0,0,0,268,2420,1,0,0,0,270,2422,1,0,0,0,272,2432,1,0, - 0,0,274,2442,1,0,0,0,276,2458,1,0,0,0,278,2511,1,0,0,0,280,2513,1,0,0, - 0,282,2515,1,0,0,0,284,2529,1,0,0,0,286,2543,1,0,0,0,288,2558,1,0,0,0, - 290,2560,1,0,0,0,292,2575,1,0,0,0,294,2577,1,0,0,0,296,2592,1,0,0,0,298, - 2594,1,0,0,0,300,2608,1,0,0,0,302,2637,1,0,0,0,304,2650,1,0,0,0,306,2658, - 1,0,0,0,308,2672,1,0,0,0,310,2680,1,0,0,0,312,2690,1,0,0,0,314,2709,1, - 0,0,0,316,2767,1,0,0,0,318,2769,1,0,0,0,320,2773,1,0,0,0,322,2785,1,0, - 0,0,324,2787,1,0,0,0,326,2789,1,0,0,0,328,2810,1,0,0,0,330,2817,1,0,0, - 0,332,2842,1,0,0,0,334,2853,1,0,0,0,336,2940,1,0,0,0,338,2942,1,0,0,0, - 340,2957,1,0,0,0,342,2959,1,0,0,0,344,2996,1,0,0,0,346,2998,1,0,0,0,348, - 3007,1,0,0,0,350,3037,1,0,0,0,352,3067,1,0,0,0,354,3084,1,0,0,0,356,3098, - 1,0,0,0,358,3102,1,0,0,0,360,3104,1,0,0,0,362,3109,1,0,0,0,364,3115,1, - 0,0,0,366,3117,1,0,0,0,368,3119,1,0,0,0,370,3121,1,0,0,0,372,3131,1,0, - 0,0,374,3133,1,0,0,0,376,3135,1,0,0,0,378,3137,1,0,0,0,380,3139,1,0,0, - 0,382,393,3,2,1,0,383,385,5,187,0,0,384,383,1,0,0,0,384,385,1,0,0,0,385, - 386,1,0,0,0,386,388,5,1,0,0,387,389,5,187,0,0,388,387,1,0,0,0,388,389, - 1,0,0,0,389,390,1,0,0,0,390,392,3,2,1,0,391,384,1,0,0,0,392,395,1,0,0, - 0,393,391,1,0,0,0,393,394,1,0,0,0,394,397,1,0,0,0,395,393,1,0,0,0,396, - 398,5,187,0,0,397,396,1,0,0,0,397,398,1,0,0,0,398,399,1,0,0,0,399,400, - 5,0,0,1,400,1,1,0,0,0,401,403,3,144,72,0,402,401,1,0,0,0,402,403,1,0, - 0,0,403,405,1,0,0,0,404,406,5,187,0,0,405,404,1,0,0,0,405,406,1,0,0,0, - 406,407,1,0,0,0,407,412,3,4,2,0,408,410,5,187,0,0,409,408,1,0,0,0,409, - 410,1,0,0,0,410,411,1,0,0,0,411,413,5,1,0,0,412,409,1,0,0,0,412,413,1, - 0,0,0,413,3,1,0,0,0,414,441,3,162,81,0,415,441,3,36,18,0,416,441,3,82, - 41,0,417,441,3,84,42,0,418,441,3,52,26,0,419,441,3,54,27,0,420,441,3, - 56,28,0,421,441,3,74,37,0,422,441,3,76,38,0,423,441,3,98,49,0,424,441, - 3,102,51,0,425,441,3,6,3,0,426,441,3,12,6,0,427,441,3,14,7,0,428,441, - 3,38,19,0,429,441,3,42,21,0,430,441,3,40,20,0,431,441,3,150,75,0,432, - 441,3,152,76,0,433,441,3,16,8,0,434,441,3,18,9,0,435,441,3,20,10,0,436, - 441,3,28,14,0,437,441,3,30,15,0,438,441,3,32,16,0,439,441,3,34,17,0,440, - 414,1,0,0,0,440,415,1,0,0,0,440,416,1,0,0,0,440,417,1,0,0,0,440,418,1, - 0,0,0,440,419,1,0,0,0,440,420,1,0,0,0,440,421,1,0,0,0,440,422,1,0,0,0, - 440,423,1,0,0,0,440,424,1,0,0,0,440,425,1,0,0,0,440,426,1,0,0,0,440,427, - 1,0,0,0,440,428,1,0,0,0,440,429,1,0,0,0,440,430,1,0,0,0,440,431,1,0,0, - 0,440,432,1,0,0,0,440,433,1,0,0,0,440,434,1,0,0,0,440,435,1,0,0,0,440, - 436,1,0,0,0,440,437,1,0,0,0,440,438,1,0,0,0,440,439,1,0,0,0,441,5,1,0, - 0,0,442,443,5,67,0,0,443,444,5,187,0,0,444,446,3,370,185,0,445,447,3, - 8,4,0,446,445,1,0,0,0,446,447,1,0,0,0,447,448,1,0,0,0,448,449,5,187,0, - 0,449,450,5,88,0,0,450,451,5,187,0,0,451,465,3,10,5,0,452,454,5,187,0, - 0,453,452,1,0,0,0,453,454,1,0,0,0,454,455,1,0,0,0,455,457,5,2,0,0,456, - 458,5,187,0,0,457,456,1,0,0,0,457,458,1,0,0,0,458,459,1,0,0,0,459,461, - 3,26,13,0,460,462,5,187,0,0,461,460,1,0,0,0,461,462,1,0,0,0,462,463,1, - 0,0,0,463,464,5,3,0,0,464,466,1,0,0,0,465,453,1,0,0,0,465,466,1,0,0,0, - 466,7,1,0,0,0,467,469,5,187,0,0,468,467,1,0,0,0,468,469,1,0,0,0,469,470, - 1,0,0,0,470,472,5,2,0,0,471,473,5,187,0,0,472,471,1,0,0,0,472,473,1,0, - 0,0,473,491,1,0,0,0,474,485,3,370,185,0,475,477,5,187,0,0,476,475,1,0, - 0,0,476,477,1,0,0,0,477,478,1,0,0,0,478,480,5,4,0,0,479,481,5,187,0,0, - 480,479,1,0,0,0,480,481,1,0,0,0,481,482,1,0,0,0,482,484,3,370,185,0,483, - 476,1,0,0,0,484,487,1,0,0,0,485,483,1,0,0,0,485,486,1,0,0,0,486,489,1, - 0,0,0,487,485,1,0,0,0,488,490,5,187,0,0,489,488,1,0,0,0,489,490,1,0,0, - 0,490,492,1,0,0,0,491,474,1,0,0,0,491,492,1,0,0,0,492,493,1,0,0,0,493, - 494,5,3,0,0,494,9,1,0,0,0,495,517,3,48,24,0,496,498,5,2,0,0,497,499,5, - 187,0,0,498,497,1,0,0,0,498,499,1,0,0,0,499,500,1,0,0,0,500,502,3,162, - 81,0,501,503,5,187,0,0,502,501,1,0,0,0,502,503,1,0,0,0,503,504,1,0,0, - 0,504,505,5,3,0,0,505,517,1,0,0,0,506,517,3,360,180,0,507,517,3,356,178, - 0,508,509,3,356,178,0,509,511,5,5,0,0,510,512,5,187,0,0,511,510,1,0,0, - 0,511,512,1,0,0,0,512,513,1,0,0,0,513,514,3,370,185,0,514,517,1,0,0,0, - 515,517,3,336,168,0,516,495,1,0,0,0,516,496,1,0,0,0,516,506,1,0,0,0,516, - 507,1,0,0,0,516,508,1,0,0,0,516,515,1,0,0,0,517,11,1,0,0,0,518,519,5, - 67,0,0,519,520,5,187,0,0,520,521,3,370,185,0,521,522,5,187,0,0,522,523, - 5,88,0,0,523,524,5,187,0,0,524,526,5,2,0,0,525,527,5,187,0,0,526,525, - 1,0,0,0,526,527,1,0,0,0,527,528,1,0,0,0,528,539,5,172,0,0,529,531,5,187, - 0,0,530,529,1,0,0,0,530,531,1,0,0,0,531,532,1,0,0,0,532,534,5,4,0,0,533, - 535,5,187,0,0,534,533,1,0,0,0,534,535,1,0,0,0,535,536,1,0,0,0,536,538, - 5,172,0,0,537,530,1,0,0,0,538,541,1,0,0,0,539,537,1,0,0,0,539,540,1,0, - 0,0,540,542,1,0,0,0,541,539,1,0,0,0,542,543,5,3,0,0,543,544,5,187,0,0, - 544,545,5,57,0,0,545,546,5,187,0,0,546,547,5,62,0,0,547,13,1,0,0,0,548, - 549,5,67,0,0,549,550,5,187,0,0,550,552,5,2,0,0,551,553,5,187,0,0,552, - 551,1,0,0,0,552,553,1,0,0,0,553,554,1,0,0,0,554,556,3,162,81,0,555,557, - 5,187,0,0,556,555,1,0,0,0,556,557,1,0,0,0,557,558,1,0,0,0,558,559,5,3, - 0,0,559,560,5,187,0,0,560,561,5,142,0,0,561,562,5,187,0,0,562,576,5,172, - 0,0,563,565,5,187,0,0,564,563,1,0,0,0,564,565,1,0,0,0,565,566,1,0,0,0, - 566,568,5,2,0,0,567,569,5,187,0,0,568,567,1,0,0,0,568,569,1,0,0,0,569, - 570,1,0,0,0,570,572,3,26,13,0,571,573,5,187,0,0,572,571,1,0,0,0,572,573, - 1,0,0,0,573,574,1,0,0,0,574,575,5,3,0,0,575,577,1,0,0,0,576,564,1,0,0, - 0,576,577,1,0,0,0,577,15,1,0,0,0,578,579,5,85,0,0,579,580,5,187,0,0,580, - 581,5,71,0,0,581,582,5,187,0,0,582,596,5,172,0,0,583,585,5,187,0,0,584, - 583,1,0,0,0,584,585,1,0,0,0,585,586,1,0,0,0,586,588,5,2,0,0,587,589,5, - 187,0,0,588,587,1,0,0,0,588,589,1,0,0,0,589,590,1,0,0,0,590,592,3,26, - 13,0,591,593,5,187,0,0,592,591,1,0,0,0,592,593,1,0,0,0,593,594,1,0,0, - 0,594,595,5,3,0,0,595,597,1,0,0,0,596,584,1,0,0,0,596,597,1,0,0,0,597, - 17,1,0,0,0,598,599,5,96,0,0,599,600,5,187,0,0,600,601,5,71,0,0,601,602, - 5,187,0,0,602,603,5,172,0,0,603,19,1,0,0,0,604,605,5,55,0,0,605,606,5, - 187,0,0,606,611,5,172,0,0,607,608,5,187,0,0,608,609,5,52,0,0,609,610, - 5,187,0,0,610,612,3,370,185,0,611,607,1,0,0,0,611,612,1,0,0,0,612,613, - 1,0,0,0,613,614,5,187,0,0,614,616,5,2,0,0,615,617,5,187,0,0,616,615,1, - 0,0,0,616,617,1,0,0,0,617,618,1,0,0,0,618,619,5,72,0,0,619,620,5,187, - 0,0,620,629,3,372,186,0,621,623,5,187,0,0,622,621,1,0,0,0,622,623,1,0, - 0,0,623,624,1,0,0,0,624,626,5,4,0,0,625,627,5,187,0,0,626,625,1,0,0,0, - 626,627,1,0,0,0,627,628,1,0,0,0,628,630,3,26,13,0,629,622,1,0,0,0,629, - 630,1,0,0,0,630,632,1,0,0,0,631,633,5,187,0,0,632,631,1,0,0,0,632,633, - 1,0,0,0,633,634,1,0,0,0,634,635,5,3,0,0,635,21,1,0,0,0,636,650,3,372, - 186,0,637,639,5,187,0,0,638,637,1,0,0,0,638,639,1,0,0,0,639,640,1,0,0, - 0,640,642,5,6,0,0,641,643,5,187,0,0,642,641,1,0,0,0,642,643,1,0,0,0,643, - 651,1,0,0,0,644,646,5,187,0,0,645,644,1,0,0,0,646,649,1,0,0,0,647,645, - 1,0,0,0,647,648,1,0,0,0,648,651,1,0,0,0,649,647,1,0,0,0,650,638,1,0,0, - 0,650,647,1,0,0,0,651,652,1,0,0,0,652,657,3,322,161,0,653,655,5,187,0, - 0,654,653,1,0,0,0,654,655,1,0,0,0,655,656,1,0,0,0,656,658,3,24,12,0,657, - 654,1,0,0,0,657,658,1,0,0,0,658,661,1,0,0,0,659,661,3,372,186,0,660,636, - 1,0,0,0,660,659,1,0,0,0,661,23,1,0,0,0,662,664,5,2,0,0,663,665,5,187, - 0,0,664,663,1,0,0,0,664,665,1,0,0,0,665,666,1,0,0,0,666,668,3,372,186, - 0,667,669,5,187,0,0,668,667,1,0,0,0,668,669,1,0,0,0,669,670,1,0,0,0,670, - 671,5,3,0,0,671,25,1,0,0,0,672,683,3,22,11,0,673,675,5,187,0,0,674,673, - 1,0,0,0,674,675,1,0,0,0,675,676,1,0,0,0,676,678,5,4,0,0,677,679,5,187, - 0,0,678,677,1,0,0,0,678,679,1,0,0,0,679,680,1,0,0,0,680,682,3,22,11,0, - 681,674,1,0,0,0,682,685,1,0,0,0,683,681,1,0,0,0,683,684,1,0,0,0,684,27, - 1,0,0,0,685,683,1,0,0,0,686,687,5,77,0,0,687,688,5,187,0,0,688,689,3, - 370,185,0,689,29,1,0,0,0,690,691,5,151,0,0,691,692,5,187,0,0,692,693, - 3,370,185,0,693,31,1,0,0,0,694,695,5,69,0,0,695,696,5,187,0,0,696,697, - 5,92,0,0,697,698,5,187,0,0,698,701,3,370,185,0,699,700,5,187,0,0,700, - 702,5,46,0,0,701,699,1,0,0,0,701,702,1,0,0,0,702,33,1,0,0,0,703,704,5, - 151,0,0,704,705,5,187,0,0,705,706,5,92,0,0,706,707,5,187,0,0,707,708, - 3,370,185,0,708,35,1,0,0,0,709,712,5,50,0,0,710,711,5,187,0,0,711,713, - 3,370,185,0,712,710,1,0,0,0,712,713,1,0,0,0,713,37,1,0,0,0,714,715,5, - 58,0,0,715,716,5,187,0,0,716,718,3,372,186,0,717,719,5,187,0,0,718,717, - 1,0,0,0,718,719,1,0,0,0,719,720,1,0,0,0,720,722,5,6,0,0,721,723,5,187, - 0,0,722,721,1,0,0,0,722,723,1,0,0,0,723,724,1,0,0,0,724,725,3,268,134, - 0,725,730,1,0,0,0,726,727,5,58,0,0,727,728,5,187,0,0,728,730,3,336,168, - 0,729,714,1,0,0,0,729,726,1,0,0,0,730,39,1,0,0,0,731,732,5,63,0,0,732, - 733,5,187,0,0,733,734,5,119,0,0,734,735,5,187,0,0,735,736,5,140,0,0,736, - 737,5,187,0,0,737,738,3,370,185,0,738,739,5,187,0,0,739,740,5,102,0,0, - 740,741,5,187,0,0,741,742,5,172,0,0,742,41,1,0,0,0,743,744,5,69,0,0,744, - 745,5,187,0,0,745,746,5,108,0,0,746,747,5,187,0,0,747,749,3,338,169,0, - 748,750,5,187,0,0,749,748,1,0,0,0,749,750,1,0,0,0,750,751,1,0,0,0,751, - 753,5,2,0,0,752,754,5,187,0,0,753,752,1,0,0,0,753,754,1,0,0,0,754,756, - 1,0,0,0,755,757,3,44,22,0,756,755,1,0,0,0,756,757,1,0,0,0,757,759,1,0, - 0,0,758,760,5,187,0,0,759,758,1,0,0,0,759,760,1,0,0,0,760,762,1,0,0,0, - 761,763,3,46,23,0,762,761,1,0,0,0,762,763,1,0,0,0,763,774,1,0,0,0,764, - 766,5,187,0,0,765,764,1,0,0,0,765,766,1,0,0,0,766,767,1,0,0,0,767,769, - 5,4,0,0,768,770,5,187,0,0,769,768,1,0,0,0,769,770,1,0,0,0,770,771,1,0, - 0,0,771,773,3,46,23,0,772,765,1,0,0,0,773,776,1,0,0,0,774,772,1,0,0,0, - 774,775,1,0,0,0,775,778,1,0,0,0,776,774,1,0,0,0,777,779,5,187,0,0,778, - 777,1,0,0,0,778,779,1,0,0,0,779,780,1,0,0,0,780,781,5,3,0,0,781,782,5, - 187,0,0,782,783,5,52,0,0,783,784,5,187,0,0,784,785,3,268,134,0,785,43, - 1,0,0,0,786,797,3,372,186,0,787,789,5,187,0,0,788,787,1,0,0,0,788,789, - 1,0,0,0,789,790,1,0,0,0,790,792,5,4,0,0,791,793,5,187,0,0,792,791,1,0, - 0,0,792,793,1,0,0,0,793,794,1,0,0,0,794,796,3,372,186,0,795,788,1,0,0, - 0,796,799,1,0,0,0,797,795,1,0,0,0,797,798,1,0,0,0,798,45,1,0,0,0,799, - 797,1,0,0,0,800,802,3,372,186,0,801,803,5,187,0,0,802,801,1,0,0,0,802, - 803,1,0,0,0,803,804,1,0,0,0,804,805,5,168,0,0,805,807,5,6,0,0,806,808, - 5,187,0,0,807,806,1,0,0,0,807,808,1,0,0,0,808,809,1,0,0,0,809,810,3,322, - 161,0,810,47,1,0,0,0,811,813,5,7,0,0,812,814,5,187,0,0,813,812,1,0,0, - 0,813,814,1,0,0,0,814,815,1,0,0,0,815,826,5,172,0,0,816,818,5,187,0,0, - 817,816,1,0,0,0,817,818,1,0,0,0,818,819,1,0,0,0,819,821,5,4,0,0,820,822, - 5,187,0,0,821,820,1,0,0,0,821,822,1,0,0,0,822,823,1,0,0,0,823,825,5,172, - 0,0,824,817,1,0,0,0,825,828,1,0,0,0,826,824,1,0,0,0,826,827,1,0,0,0,827, - 829,1,0,0,0,828,826,1,0,0,0,829,845,5,8,0,0,830,845,5,172,0,0,831,833, - 5,91,0,0,832,834,5,187,0,0,833,832,1,0,0,0,833,834,1,0,0,0,834,835,1, - 0,0,0,835,837,5,2,0,0,836,838,5,187,0,0,837,836,1,0,0,0,837,838,1,0,0, - 0,838,839,1,0,0,0,839,841,5,172,0,0,840,842,5,187,0,0,841,840,1,0,0,0, - 841,842,1,0,0,0,842,843,1,0,0,0,843,845,5,3,0,0,844,811,1,0,0,0,844,830, - 1,0,0,0,844,831,1,0,0,0,845,49,1,0,0,0,846,847,5,98,0,0,847,848,5,187, - 0,0,848,849,5,116,0,0,849,850,5,187,0,0,850,851,5,83,0,0,851,51,1,0,0, - 0,852,853,5,69,0,0,853,854,5,187,0,0,854,855,5,115,0,0,855,856,5,187, - 0,0,856,857,5,140,0,0,857,861,5,187,0,0,858,859,3,50,25,0,859,860,5,187, - 0,0,860,862,1,0,0,0,861,858,1,0,0,0,861,862,1,0,0,0,862,863,1,0,0,0,863, - 891,3,370,185,0,864,866,5,187,0,0,865,864,1,0,0,0,865,866,1,0,0,0,866, - 867,1,0,0,0,867,869,5,2,0,0,868,870,5,187,0,0,869,868,1,0,0,0,869,870, - 1,0,0,0,870,871,1,0,0,0,871,873,3,124,62,0,872,874,5,187,0,0,873,872, - 1,0,0,0,873,874,1,0,0,0,874,880,1,0,0,0,875,877,5,4,0,0,876,878,5,187, - 0,0,877,876,1,0,0,0,877,878,1,0,0,0,878,879,1,0,0,0,879,881,3,128,64, - 0,880,875,1,0,0,0,880,881,1,0,0,0,881,883,1,0,0,0,882,884,5,187,0,0,883, - 882,1,0,0,0,883,884,1,0,0,0,884,885,1,0,0,0,885,886,5,3,0,0,886,892,1, - 0,0,0,887,888,5,187,0,0,888,889,5,52,0,0,889,890,5,187,0,0,890,892,3, - 162,81,0,891,865,1,0,0,0,891,887,1,0,0,0,892,908,1,0,0,0,893,894,5,187, - 0,0,894,896,5,154,0,0,895,897,5,187,0,0,896,895,1,0,0,0,896,897,1,0,0, - 0,897,898,1,0,0,0,898,900,5,2,0,0,899,901,5,187,0,0,900,899,1,0,0,0,900, - 901,1,0,0,0,901,902,1,0,0,0,902,904,3,26,13,0,903,905,5,187,0,0,904,903, - 1,0,0,0,904,905,1,0,0,0,905,906,1,0,0,0,906,907,5,3,0,0,907,909,1,0,0, - 0,908,893,1,0,0,0,908,909,1,0,0,0,909,53,1,0,0,0,910,911,5,69,0,0,911, - 912,5,187,0,0,912,913,5,129,0,0,913,914,5,187,0,0,914,917,5,140,0,0,915, - 916,5,187,0,0,916,918,5,93,0,0,917,915,1,0,0,0,917,918,1,0,0,0,918,921, - 1,0,0,0,919,920,5,187,0,0,920,922,3,50,25,0,921,919,1,0,0,0,921,922,1, - 0,0,0,922,923,1,0,0,0,923,924,5,187,0,0,924,926,3,370,185,0,925,927,5, - 187,0,0,926,925,1,0,0,0,926,927,1,0,0,0,927,928,1,0,0,0,928,930,5,2,0, - 0,929,931,5,187,0,0,930,929,1,0,0,0,930,931,1,0,0,0,931,932,1,0,0,0,932, - 934,3,66,33,0,933,935,5,187,0,0,934,933,1,0,0,0,934,935,1,0,0,0,935,962, - 1,0,0,0,936,938,5,4,0,0,937,939,5,187,0,0,938,937,1,0,0,0,938,939,1,0, - 0,0,939,940,1,0,0,0,940,942,3,124,62,0,941,943,5,187,0,0,942,941,1,0, - 0,0,942,943,1,0,0,0,943,945,1,0,0,0,944,936,1,0,0,0,944,945,1,0,0,0,945, - 954,1,0,0,0,946,948,5,4,0,0,947,949,5,187,0,0,948,947,1,0,0,0,948,949, - 1,0,0,0,949,950,1,0,0,0,950,952,3,372,186,0,951,953,5,187,0,0,952,951, - 1,0,0,0,952,953,1,0,0,0,953,955,1,0,0,0,954,946,1,0,0,0,954,955,1,0,0, - 0,955,956,1,0,0,0,956,963,5,3,0,0,957,958,5,3,0,0,958,959,5,187,0,0,959, - 960,5,52,0,0,960,961,5,187,0,0,961,963,3,162,81,0,962,944,1,0,0,0,962, - 957,1,0,0,0,963,979,1,0,0,0,964,965,5,187,0,0,965,967,5,154,0,0,966,968, - 5,187,0,0,967,966,1,0,0,0,967,968,1,0,0,0,968,969,1,0,0,0,969,971,5,2, - 0,0,970,972,5,187,0,0,971,970,1,0,0,0,971,972,1,0,0,0,972,973,1,0,0,0, - 973,975,3,26,13,0,974,976,5,187,0,0,975,974,1,0,0,0,975,976,1,0,0,0,976, - 977,1,0,0,0,977,978,5,3,0,0,978,980,1,0,0,0,979,964,1,0,0,0,979,980,1, - 0,0,0,980,55,1,0,0,0,981,984,5,69,0,0,982,983,5,187,0,0,983,985,3,372, - 186,0,984,982,1,0,0,0,984,985,1,0,0,0,985,986,1,0,0,0,986,987,5,187,0, - 0,987,990,5,97,0,0,988,989,5,187,0,0,989,991,3,370,185,0,990,988,1,0, - 0,0,990,991,1,0,0,0,991,994,1,0,0,0,992,993,5,187,0,0,993,995,3,50,25, - 0,994,992,1,0,0,0,994,995,1,0,0,0,995,996,1,0,0,0,996,997,5,187,0,0,997, - 998,5,90,0,0,998,999,5,187,0,0,999,1000,3,58,29,0,1000,1001,5,187,0,0, - 1001,1002,5,119,0,0,1002,1003,5,187,0,0,1003,1020,3,64,32,0,1004,1005, - 5,187,0,0,1005,1007,5,121,0,0,1006,1008,5,187,0,0,1007,1006,1,0,0,0,1007, - 1008,1,0,0,0,1008,1009,1,0,0,0,1009,1011,5,9,0,0,1010,1012,5,187,0,0, - 1011,1010,1,0,0,0,1011,1012,1,0,0,0,1012,1014,1,0,0,0,1013,1015,3,26, - 13,0,1014,1013,1,0,0,0,1014,1015,1,0,0,0,1015,1017,1,0,0,0,1016,1018, - 5,187,0,0,1017,1016,1,0,0,0,1017,1018,1,0,0,0,1018,1019,1,0,0,0,1019, - 1021,5,10,0,0,1020,1004,1,0,0,0,1020,1021,1,0,0,0,1021,57,1,0,0,0,1022, - 1025,3,60,30,0,1023,1025,3,62,31,0,1024,1022,1,0,0,0,1024,1023,1,0,0, - 0,1025,59,1,0,0,0,1026,1028,5,2,0,0,1027,1029,5,187,0,0,1028,1027,1,0, - 0,0,1028,1029,1,0,0,0,1029,1031,1,0,0,0,1030,1032,3,356,178,0,1031,1030, - 1,0,0,0,1031,1032,1,0,0,0,1032,1034,1,0,0,0,1033,1035,5,187,0,0,1034, - 1033,1,0,0,0,1034,1035,1,0,0,0,1035,1036,1,0,0,0,1036,1038,5,168,0,0, - 1037,1039,5,187,0,0,1038,1037,1,0,0,0,1038,1039,1,0,0,0,1039,1040,1,0, - 0,0,1040,1042,3,264,132,0,1041,1043,5,187,0,0,1042,1041,1,0,0,0,1042, - 1043,1,0,0,0,1043,1044,1,0,0,0,1044,1045,5,3,0,0,1045,61,1,0,0,0,1046, - 1048,5,2,0,0,1047,1049,5,187,0,0,1048,1047,1,0,0,0,1048,1049,1,0,0,0, - 1049,1050,1,0,0,0,1050,1052,5,3,0,0,1051,1053,5,187,0,0,1052,1051,1,0, - 0,0,1052,1053,1,0,0,0,1053,1054,1,0,0,0,1054,1056,3,240,120,0,1055,1057, - 5,187,0,0,1056,1055,1,0,0,0,1056,1057,1,0,0,0,1057,1058,1,0,0,0,1058, - 1060,5,2,0,0,1059,1061,5,187,0,0,1060,1059,1,0,0,0,1060,1061,1,0,0,0, - 1061,1062,1,0,0,0,1062,1063,5,3,0,0,1063,63,1,0,0,0,1064,1066,5,2,0,0, - 1065,1067,5,187,0,0,1066,1065,1,0,0,0,1066,1067,1,0,0,0,1067,1068,1,0, - 0,0,1068,1070,3,356,178,0,1069,1071,5,187,0,0,1070,1069,1,0,0,0,1070, - 1071,1,0,0,0,1071,1072,1,0,0,0,1072,1074,5,5,0,0,1073,1075,5,187,0,0, - 1074,1073,1,0,0,0,1074,1075,1,0,0,0,1075,1076,1,0,0,0,1076,1078,3,364, - 182,0,1077,1079,5,187,0,0,1078,1077,1,0,0,0,1078,1079,1,0,0,0,1079,1080, - 1,0,0,0,1080,1081,5,3,0,0,1081,65,1,0,0,0,1082,1093,3,68,34,0,1083,1085, - 5,187,0,0,1084,1083,1,0,0,0,1084,1085,1,0,0,0,1085,1086,1,0,0,0,1086, - 1088,5,4,0,0,1087,1089,5,187,0,0,1088,1087,1,0,0,0,1088,1089,1,0,0,0, - 1089,1090,1,0,0,0,1090,1092,3,68,34,0,1091,1084,1,0,0,0,1092,1095,1,0, - 0,0,1093,1091,1,0,0,0,1093,1094,1,0,0,0,1094,67,1,0,0,0,1095,1093,1,0, - 0,0,1096,1097,5,88,0,0,1097,1098,5,187,0,0,1098,1099,3,370,185,0,1099, - 1100,5,187,0,0,1100,1101,5,142,0,0,1101,1102,5,187,0,0,1102,1105,3,370, - 185,0,1103,1104,5,187,0,0,1104,1106,3,372,186,0,1105,1103,1,0,0,0,1105, - 1106,1,0,0,0,1106,69,1,0,0,0,1107,1118,3,72,36,0,1108,1110,5,187,0,0, - 1109,1108,1,0,0,0,1109,1110,1,0,0,0,1110,1111,1,0,0,0,1111,1113,5,4,0, - 0,1112,1114,5,187,0,0,1113,1112,1,0,0,0,1113,1114,1,0,0,0,1114,1115,1, - 0,0,0,1115,1117,3,72,36,0,1116,1109,1,0,0,0,1117,1120,1,0,0,0,1118,1116, - 1,0,0,0,1118,1119,1,0,0,0,1119,71,1,0,0,0,1120,1118,1,0,0,0,1121,1122, - 5,88,0,0,1122,1123,5,187,0,0,1123,1124,3,370,185,0,1124,1125,5,187,0, - 0,1125,1126,5,142,0,0,1126,1127,5,187,0,0,1127,1128,3,370,185,0,1128, - 73,1,0,0,0,1129,1130,5,69,0,0,1130,1131,5,187,0,0,1131,1132,5,134,0,0, - 1132,1136,5,187,0,0,1133,1134,3,50,25,0,1134,1135,5,187,0,0,1135,1137, - 1,0,0,0,1136,1133,1,0,0,0,1136,1137,1,0,0,0,1137,1138,1,0,0,0,1138,1143, - 3,370,185,0,1139,1140,5,187,0,0,1140,1142,3,78,39,0,1141,1139,1,0,0,0, - 1142,1145,1,0,0,0,1143,1141,1,0,0,0,1143,1144,1,0,0,0,1144,75,1,0,0,0, - 1145,1143,1,0,0,0,1146,1147,5,69,0,0,1147,1148,5,187,0,0,1148,1149,5, - 146,0,0,1149,1150,5,187,0,0,1150,1151,3,370,185,0,1151,1152,5,187,0,0, - 1152,1153,5,52,0,0,1153,1154,5,187,0,0,1154,1156,3,138,69,0,1155,1157, - 5,187,0,0,1156,1155,1,0,0,0,1156,1157,1,0,0,0,1157,77,1,0,0,0,1158,1164, - 3,86,43,0,1159,1164,3,88,44,0,1160,1164,3,90,45,0,1161,1164,3,92,46,0, - 1162,1164,3,94,47,0,1163,1158,1,0,0,0,1163,1159,1,0,0,0,1163,1160,1,0, - 0,0,1163,1161,1,0,0,0,1163,1162,1,0,0,0,1164,79,1,0,0,0,1165,1166,5,187, - 0,0,1166,1167,5,154,0,0,1167,1168,5,187,0,0,1168,1169,5,161,0,0,1169, - 1170,5,187,0,0,1170,1171,5,172,0,0,1171,81,1,0,0,0,1172,1173,5,69,0,0, - 1173,1174,5,187,0,0,1174,1175,5,160,0,0,1175,1179,5,187,0,0,1176,1177, - 3,50,25,0,1177,1178,5,187,0,0,1178,1180,1,0,0,0,1179,1176,1,0,0,0,1179, - 1180,1,0,0,0,1180,1181,1,0,0,0,1181,1183,3,356,178,0,1182,1184,3,80,40, - 0,1183,1182,1,0,0,0,1183,1184,1,0,0,0,1184,83,1,0,0,0,1185,1186,5,69, - 0,0,1186,1187,5,187,0,0,1187,1188,5,162,0,0,1188,1192,5,187,0,0,1189, - 1190,3,50,25,0,1190,1191,5,187,0,0,1191,1193,1,0,0,0,1192,1189,1,0,0, - 0,1192,1193,1,0,0,0,1193,1194,1,0,0,0,1194,1195,3,356,178,0,1195,85,1, - 0,0,0,1196,1197,5,100,0,0,1197,1200,5,187,0,0,1198,1199,5,57,0,0,1199, - 1201,5,187,0,0,1200,1198,1,0,0,0,1200,1201,1,0,0,0,1201,1203,1,0,0,0, - 1202,1204,5,170,0,0,1203,1202,1,0,0,0,1203,1204,1,0,0,0,1204,1205,1,0, - 0,0,1205,1206,3,366,183,0,1206,87,1,0,0,0,1207,1208,5,114,0,0,1208,1209, - 5,187,0,0,1209,1217,5,112,0,0,1210,1211,5,112,0,0,1211,1213,5,187,0,0, - 1212,1214,5,170,0,0,1213,1212,1,0,0,0,1213,1214,1,0,0,0,1214,1215,1,0, - 0,0,1215,1217,3,366,183,0,1216,1207,1,0,0,0,1216,1210,1,0,0,0,1217,89, - 1,0,0,0,1218,1219,5,114,0,0,1219,1220,5,187,0,0,1220,1228,5,110,0,0,1221, - 1222,5,110,0,0,1222,1224,5,187,0,0,1223,1225,5,170,0,0,1224,1223,1,0, - 0,0,1224,1225,1,0,0,0,1225,1226,1,0,0,0,1226,1228,3,366,183,0,1227,1218, - 1,0,0,0,1227,1221,1,0,0,0,1228,91,1,0,0,0,1229,1230,5,137,0,0,1230,1233, - 5,187,0,0,1231,1232,5,154,0,0,1232,1234,5,187,0,0,1233,1231,1,0,0,0,1233, - 1234,1,0,0,0,1234,1236,1,0,0,0,1235,1237,5,170,0,0,1236,1235,1,0,0,0, - 1236,1237,1,0,0,0,1237,1238,1,0,0,0,1238,1239,3,366,183,0,1239,93,1,0, - 0,0,1240,1241,5,114,0,0,1241,1243,5,187,0,0,1242,1240,1,0,0,0,1242,1243, - 1,0,0,0,1243,1244,1,0,0,0,1244,1245,5,70,0,0,1245,95,1,0,0,0,1246,1247, - 5,98,0,0,1247,1248,5,187,0,0,1248,1249,5,83,0,0,1249,97,1,0,0,0,1250, - 1251,5,79,0,0,1251,1252,5,187,0,0,1252,1253,7,0,0,0,1253,1257,5,187,0, - 0,1254,1255,3,96,48,0,1255,1256,5,187,0,0,1256,1258,1,0,0,0,1257,1254, - 1,0,0,0,1257,1258,1,0,0,0,1258,1259,1,0,0,0,1259,1271,3,370,185,0,1260, - 1261,5,79,0,0,1261,1262,5,187,0,0,1262,1263,5,97,0,0,1263,1267,5,187, - 0,0,1264,1265,3,96,48,0,1265,1266,5,187,0,0,1266,1268,1,0,0,0,1267,1264, - 1,0,0,0,1267,1268,1,0,0,0,1268,1269,1,0,0,0,1269,1271,3,100,50,0,1270, - 1250,1,0,0,0,1270,1260,1,0,0,0,1271,99,1,0,0,0,1272,1274,3,370,185,0, - 1273,1275,5,187,0,0,1274,1273,1,0,0,0,1274,1275,1,0,0,0,1275,1276,1,0, - 0,0,1276,1278,5,5,0,0,1277,1279,5,187,0,0,1278,1277,1,0,0,0,1278,1279, - 1,0,0,0,1279,1280,1,0,0,0,1280,1281,3,370,185,0,1281,101,1,0,0,0,1282, - 1283,5,49,0,0,1283,1284,5,187,0,0,1284,1285,5,140,0,0,1285,1286,5,187, - 0,0,1286,1287,3,370,185,0,1287,1288,5,187,0,0,1288,1289,3,104,52,0,1289, - 103,1,0,0,0,1290,1297,3,106,53,0,1291,1297,3,110,55,0,1292,1297,3,112, - 56,0,1293,1297,3,114,57,0,1294,1297,3,116,58,0,1295,1297,3,118,59,0,1296, - 1290,1,0,0,0,1296,1291,1,0,0,0,1296,1292,1,0,0,0,1296,1293,1,0,0,0,1296, - 1294,1,0,0,0,1296,1295,1,0,0,0,1297,105,1,0,0,0,1298,1299,5,47,0,0,1299, - 1303,5,187,0,0,1300,1301,3,50,25,0,1301,1302,5,187,0,0,1302,1304,1,0, - 0,0,1303,1300,1,0,0,0,1303,1304,1,0,0,0,1304,1305,1,0,0,0,1305,1306,3, - 364,182,0,1306,1307,5,187,0,0,1307,1310,3,138,69,0,1308,1309,5,187,0, - 0,1309,1311,3,108,54,0,1310,1308,1,0,0,0,1310,1311,1,0,0,0,1311,107,1, - 0,0,0,1312,1313,5,73,0,0,1313,1314,5,187,0,0,1314,1315,3,268,134,0,1315, - 109,1,0,0,0,1316,1317,5,79,0,0,1317,1321,5,187,0,0,1318,1319,3,96,48, - 0,1319,1320,5,187,0,0,1320,1322,1,0,0,0,1321,1318,1,0,0,0,1321,1322,1, - 0,0,0,1322,1323,1,0,0,0,1323,1324,3,364,182,0,1324,111,1,0,0,0,1325,1326, - 5,130,0,0,1326,1327,5,187,0,0,1327,1328,5,142,0,0,1328,1329,5,187,0,0, - 1329,1330,3,370,185,0,1330,113,1,0,0,0,1331,1332,5,130,0,0,1332,1333, - 5,187,0,0,1333,1334,3,364,182,0,1334,1335,5,187,0,0,1335,1336,5,142,0, - 0,1336,1337,5,187,0,0,1337,1338,3,364,182,0,1338,115,1,0,0,0,1339,1340, - 5,47,0,0,1340,1344,5,187,0,0,1341,1342,3,50,25,0,1342,1343,5,187,0,0, - 1343,1345,1,0,0,0,1344,1341,1,0,0,0,1344,1345,1,0,0,0,1345,1346,1,0,0, - 0,1346,1347,3,72,36,0,1347,117,1,0,0,0,1348,1349,5,79,0,0,1349,1353,5, - 187,0,0,1350,1351,3,96,48,0,1351,1352,5,187,0,0,1352,1354,1,0,0,0,1353, - 1350,1,0,0,0,1353,1354,1,0,0,0,1354,1355,1,0,0,0,1355,1356,3,72,36,0, - 1356,119,1,0,0,0,1357,1368,3,122,61,0,1358,1360,5,187,0,0,1359,1358,1, - 0,0,0,1359,1360,1,0,0,0,1360,1361,1,0,0,0,1361,1363,5,4,0,0,1362,1364, - 5,187,0,0,1363,1362,1,0,0,0,1363,1364,1,0,0,0,1364,1365,1,0,0,0,1365, - 1367,3,122,61,0,1366,1359,1,0,0,0,1367,1370,1,0,0,0,1368,1366,1,0,0,0, - 1368,1369,1,0,0,0,1369,121,1,0,0,0,1370,1368,1,0,0,0,1371,1372,3,364, - 182,0,1372,1373,5,187,0,0,1373,1374,3,138,69,0,1374,123,1,0,0,0,1375, - 1386,3,126,63,0,1376,1378,5,187,0,0,1377,1376,1,0,0,0,1377,1378,1,0,0, - 0,1378,1379,1,0,0,0,1379,1381,5,4,0,0,1380,1382,5,187,0,0,1381,1380,1, - 0,0,0,1381,1382,1,0,0,0,1382,1383,1,0,0,0,1383,1385,3,126,63,0,1384,1377, - 1,0,0,0,1385,1388,1,0,0,0,1386,1384,1,0,0,0,1386,1387,1,0,0,0,1387,125, - 1,0,0,0,1388,1386,1,0,0,0,1389,1392,3,122,61,0,1390,1391,5,187,0,0,1391, - 1393,3,108,54,0,1392,1390,1,0,0,0,1392,1393,1,0,0,0,1393,1398,1,0,0,0, - 1394,1395,5,187,0,0,1395,1396,5,125,0,0,1396,1397,5,187,0,0,1397,1399, - 5,104,0,0,1398,1394,1,0,0,0,1398,1399,1,0,0,0,1399,127,1,0,0,0,1400,1401, - 5,125,0,0,1401,1402,5,187,0,0,1402,1404,5,104,0,0,1403,1405,5,187,0,0, - 1404,1403,1,0,0,0,1404,1405,1,0,0,0,1405,1406,1,0,0,0,1406,1408,5,2,0, - 0,1407,1409,5,187,0,0,1408,1407,1,0,0,0,1408,1409,1,0,0,0,1409,1410,1, - 0,0,0,1410,1412,3,364,182,0,1411,1413,5,187,0,0,1412,1411,1,0,0,0,1412, - 1413,1,0,0,0,1413,1414,1,0,0,0,1414,1415,5,3,0,0,1415,129,1,0,0,0,1416, - 1418,5,147,0,0,1417,1419,5,187,0,0,1418,1417,1,0,0,0,1418,1419,1,0,0, - 0,1419,1420,1,0,0,0,1420,1422,5,2,0,0,1421,1423,5,187,0,0,1422,1421,1, - 0,0,0,1422,1423,1,0,0,0,1423,1424,1,0,0,0,1424,1426,3,120,60,0,1425,1427, - 5,187,0,0,1426,1425,1,0,0,0,1426,1427,1,0,0,0,1427,1428,1,0,0,0,1428, - 1429,5,3,0,0,1429,131,1,0,0,0,1430,1432,5,139,0,0,1431,1433,5,187,0,0, - 1432,1431,1,0,0,0,1432,1433,1,0,0,0,1433,1434,1,0,0,0,1434,1436,5,2,0, - 0,1435,1437,5,187,0,0,1436,1435,1,0,0,0,1436,1437,1,0,0,0,1437,1438,1, - 0,0,0,1438,1440,3,120,60,0,1439,1441,5,187,0,0,1440,1439,1,0,0,0,1440, - 1441,1,0,0,0,1441,1442,1,0,0,0,1442,1443,5,3,0,0,1443,133,1,0,0,0,1444, - 1446,5,163,0,0,1445,1447,5,187,0,0,1446,1445,1,0,0,0,1446,1447,1,0,0, - 0,1447,1448,1,0,0,0,1448,1450,5,2,0,0,1449,1451,5,187,0,0,1450,1449,1, - 0,0,0,1450,1451,1,0,0,0,1451,1452,1,0,0,0,1452,1454,3,138,69,0,1453,1455, - 5,187,0,0,1454,1453,1,0,0,0,1454,1455,1,0,0,0,1455,1456,1,0,0,0,1456, - 1458,5,4,0,0,1457,1459,5,187,0,0,1458,1457,1,0,0,0,1458,1459,1,0,0,0, - 1459,1460,1,0,0,0,1460,1462,3,138,69,0,1461,1463,5,187,0,0,1462,1461, - 1,0,0,0,1462,1463,1,0,0,0,1463,1464,1,0,0,0,1464,1465,5,3,0,0,1465,135, - 1,0,0,0,1466,1468,5,164,0,0,1467,1469,5,187,0,0,1468,1467,1,0,0,0,1468, - 1469,1,0,0,0,1469,1470,1,0,0,0,1470,1472,5,2,0,0,1471,1473,5,187,0,0, - 1472,1471,1,0,0,0,1472,1473,1,0,0,0,1473,1474,1,0,0,0,1474,1476,3,366, - 183,0,1475,1477,5,187,0,0,1476,1475,1,0,0,0,1476,1477,1,0,0,0,1477,1478, - 1,0,0,0,1478,1480,5,4,0,0,1479,1481,5,187,0,0,1480,1479,1,0,0,0,1480, - 1481,1,0,0,0,1481,1482,1,0,0,0,1482,1484,3,366,183,0,1483,1485,5,187, - 0,0,1484,1483,1,0,0,0,1484,1485,1,0,0,0,1485,1486,1,0,0,0,1486,1487,5, - 3,0,0,1487,137,1,0,0,0,1488,1489,6,69,-1,0,1489,1495,3,372,186,0,1490, - 1495,3,130,65,0,1491,1495,3,132,66,0,1492,1495,3,134,67,0,1493,1495,3, - 136,68,0,1494,1488,1,0,0,0,1494,1490,1,0,0,0,1494,1491,1,0,0,0,1494,1492, - 1,0,0,0,1494,1493,1,0,0,0,1495,1500,1,0,0,0,1496,1497,10,5,0,0,1497,1499, - 3,140,70,0,1498,1496,1,0,0,0,1499,1502,1,0,0,0,1500,1498,1,0,0,0,1500, - 1501,1,0,0,0,1501,139,1,0,0,0,1502,1500,1,0,0,0,1503,1507,3,142,71,0, - 1504,1506,3,142,71,0,1505,1504,1,0,0,0,1506,1509,1,0,0,0,1507,1505,1, - 0,0,0,1507,1508,1,0,0,0,1508,141,1,0,0,0,1509,1507,1,0,0,0,1510,1512, - 5,7,0,0,1511,1513,3,366,183,0,1512,1511,1,0,0,0,1512,1513,1,0,0,0,1513, - 1514,1,0,0,0,1514,1515,5,8,0,0,1515,143,1,0,0,0,1516,1519,3,146,73,0, - 1517,1519,3,148,74,0,1518,1516,1,0,0,0,1518,1517,1,0,0,0,1519,145,1,0, - 0,0,1520,1523,5,84,0,0,1521,1522,5,187,0,0,1522,1524,5,107,0,0,1523,1521, - 1,0,0,0,1523,1524,1,0,0,0,1524,147,1,0,0,0,1525,1526,5,126,0,0,1526,149, - 1,0,0,0,1527,1528,5,56,0,0,1528,1529,5,187,0,0,1529,1541,5,144,0,0,1530, - 1531,5,56,0,0,1531,1532,5,187,0,0,1532,1533,5,144,0,0,1533,1534,5,187, - 0,0,1534,1535,5,128,0,0,1535,1536,5,187,0,0,1536,1541,5,120,0,0,1537, - 1541,5,64,0,0,1538,1541,5,132,0,0,1539,1541,5,61,0,0,1540,1527,1,0,0, - 0,1540,1530,1,0,0,0,1540,1537,1,0,0,0,1540,1538,1,0,0,0,1540,1539,1,0, - 0,0,1541,151,1,0,0,0,1542,1547,3,154,77,0,1543,1547,3,156,78,0,1544,1547, - 3,158,79,0,1545,1547,3,160,80,0,1546,1542,1,0,0,0,1546,1543,1,0,0,0,1546, - 1544,1,0,0,0,1546,1545,1,0,0,0,1547,153,1,0,0,0,1548,1549,5,106,0,0,1549, - 1552,5,187,0,0,1550,1551,5,86,0,0,1551,1553,5,187,0,0,1552,1550,1,0,0, - 0,1552,1553,1,0,0,0,1553,1556,1,0,0,0,1554,1557,5,172,0,0,1555,1557,3, - 356,178,0,1556,1554,1,0,0,0,1556,1555,1,0,0,0,1557,155,1,0,0,0,1558,1559, - 5,89,0,0,1559,1561,5,187,0,0,1560,1558,1,0,0,0,1560,1561,1,0,0,0,1561, - 1562,1,0,0,0,1562,1563,5,101,0,0,1563,1564,5,187,0,0,1564,1569,3,356, - 178,0,1565,1566,5,187,0,0,1566,1567,5,88,0,0,1567,1568,5,187,0,0,1568, - 1570,5,172,0,0,1569,1565,1,0,0,0,1569,1570,1,0,0,0,1570,157,1,0,0,0,1571, - 1572,5,149,0,0,1572,1573,5,187,0,0,1573,1574,3,356,178,0,1574,159,1,0, - 0,0,1575,1576,5,150,0,0,1576,1577,5,187,0,0,1577,1578,3,356,178,0,1578, - 161,1,0,0,0,1579,1580,3,164,82,0,1580,163,1,0,0,0,1581,1588,3,168,84, - 0,1582,1584,5,187,0,0,1583,1582,1,0,0,0,1583,1584,1,0,0,0,1584,1585,1, - 0,0,0,1585,1587,3,166,83,0,1586,1583,1,0,0,0,1587,1590,1,0,0,0,1588,1586, - 1,0,0,0,1588,1589,1,0,0,0,1589,1603,1,0,0,0,1590,1588,1,0,0,0,1591,1593, - 3,210,105,0,1592,1594,5,187,0,0,1593,1592,1,0,0,0,1593,1594,1,0,0,0,1594, - 1596,1,0,0,0,1595,1591,1,0,0,0,1596,1597,1,0,0,0,1597,1595,1,0,0,0,1597, - 1598,1,0,0,0,1598,1599,1,0,0,0,1599,1600,3,168,84,0,1600,1601,6,82,-1, - 0,1601,1603,1,0,0,0,1602,1581,1,0,0,0,1602,1595,1,0,0,0,1603,165,1,0, - 0,0,1604,1605,5,147,0,0,1605,1606,5,187,0,0,1606,1608,5,48,0,0,1607,1609, - 5,187,0,0,1608,1607,1,0,0,0,1608,1609,1,0,0,0,1609,1610,1,0,0,0,1610, - 1617,3,168,84,0,1611,1613,5,147,0,0,1612,1614,5,187,0,0,1613,1612,1,0, - 0,0,1613,1614,1,0,0,0,1614,1615,1,0,0,0,1615,1617,3,168,84,0,1616,1604, - 1,0,0,0,1616,1611,1,0,0,0,1617,167,1,0,0,0,1618,1621,3,170,85,0,1619, - 1621,3,172,86,0,1620,1618,1,0,0,0,1620,1619,1,0,0,0,1621,169,1,0,0,0, - 1622,1624,3,178,89,0,1623,1625,5,187,0,0,1624,1623,1,0,0,0,1624,1625, - 1,0,0,0,1625,1627,1,0,0,0,1626,1622,1,0,0,0,1627,1630,1,0,0,0,1628,1626, - 1,0,0,0,1628,1629,1,0,0,0,1629,1631,1,0,0,0,1630,1628,1,0,0,0,1631,1658, - 3,210,105,0,1632,1634,3,178,89,0,1633,1635,5,187,0,0,1634,1633,1,0,0, - 0,1634,1635,1,0,0,0,1635,1637,1,0,0,0,1636,1632,1,0,0,0,1637,1640,1,0, - 0,0,1638,1636,1,0,0,0,1638,1639,1,0,0,0,1639,1641,1,0,0,0,1640,1638,1, - 0,0,0,1641,1648,3,176,88,0,1642,1644,5,187,0,0,1643,1642,1,0,0,0,1643, - 1644,1,0,0,0,1644,1645,1,0,0,0,1645,1647,3,176,88,0,1646,1643,1,0,0,0, - 1647,1650,1,0,0,0,1648,1646,1,0,0,0,1648,1649,1,0,0,0,1649,1655,1,0,0, - 0,1650,1648,1,0,0,0,1651,1653,5,187,0,0,1652,1651,1,0,0,0,1652,1653,1, - 0,0,0,1653,1654,1,0,0,0,1654,1656,3,210,105,0,1655,1652,1,0,0,0,1655, - 1656,1,0,0,0,1656,1658,1,0,0,0,1657,1628,1,0,0,0,1657,1638,1,0,0,0,1658, - 171,1,0,0,0,1659,1661,3,174,87,0,1660,1662,5,187,0,0,1661,1660,1,0,0, - 0,1661,1662,1,0,0,0,1662,1664,1,0,0,0,1663,1659,1,0,0,0,1664,1665,1,0, - 0,0,1665,1663,1,0,0,0,1665,1666,1,0,0,0,1666,1667,1,0,0,0,1667,1668,3, - 170,85,0,1668,173,1,0,0,0,1669,1671,3,178,89,0,1670,1672,5,187,0,0,1671, - 1670,1,0,0,0,1671,1672,1,0,0,0,1672,1674,1,0,0,0,1673,1669,1,0,0,0,1674, - 1677,1,0,0,0,1675,1673,1,0,0,0,1675,1676,1,0,0,0,1676,1684,1,0,0,0,1677, - 1675,1,0,0,0,1678,1680,3,176,88,0,1679,1681,5,187,0,0,1680,1679,1,0,0, - 0,1680,1681,1,0,0,0,1681,1683,1,0,0,0,1682,1678,1,0,0,0,1683,1686,1,0, - 0,0,1684,1682,1,0,0,0,1684,1685,1,0,0,0,1685,1687,1,0,0,0,1686,1684,1, - 0,0,0,1687,1688,3,208,104,0,1688,175,1,0,0,0,1689,1694,3,196,98,0,1690, - 1694,3,198,99,0,1691,1694,3,202,101,0,1692,1694,3,206,103,0,1693,1689, - 1,0,0,0,1693,1690,1,0,0,0,1693,1691,1,0,0,0,1693,1692,1,0,0,0,1694,177, - 1,0,0,0,1695,1700,3,188,94,0,1696,1700,3,194,97,0,1697,1700,3,186,93, - 0,1698,1700,3,180,90,0,1699,1695,1,0,0,0,1699,1696,1,0,0,0,1699,1697, - 1,0,0,0,1699,1698,1,0,0,0,1700,179,1,0,0,0,1701,1719,5,106,0,0,1702,1703, - 5,187,0,0,1703,1704,5,154,0,0,1704,1705,5,187,0,0,1705,1707,5,94,0,0, - 1706,1708,5,187,0,0,1707,1706,1,0,0,0,1707,1708,1,0,0,0,1708,1709,1,0, - 0,0,1709,1711,5,2,0,0,1710,1712,5,187,0,0,1711,1710,1,0,0,0,1711,1712, - 1,0,0,0,1712,1713,1,0,0,0,1713,1715,3,120,60,0,1714,1716,5,187,0,0,1715, - 1714,1,0,0,0,1715,1716,1,0,0,0,1716,1717,1,0,0,0,1717,1718,5,3,0,0,1718, - 1720,1,0,0,0,1719,1702,1,0,0,0,1719,1720,1,0,0,0,1720,1721,1,0,0,0,1721, - 1722,5,187,0,0,1722,1723,5,88,0,0,1723,1724,5,187,0,0,1724,1738,3,10, - 5,0,1725,1727,5,187,0,0,1726,1725,1,0,0,0,1726,1727,1,0,0,0,1727,1728, - 1,0,0,0,1728,1730,5,2,0,0,1729,1731,5,187,0,0,1730,1729,1,0,0,0,1730, - 1731,1,0,0,0,1731,1732,1,0,0,0,1732,1734,3,26,13,0,1733,1735,5,187,0, - 0,1734,1733,1,0,0,0,1734,1735,1,0,0,0,1735,1736,1,0,0,0,1736,1737,5,3, - 0,0,1737,1739,1,0,0,0,1738,1726,1,0,0,0,1738,1739,1,0,0,0,1739,1744,1, - 0,0,0,1740,1742,5,187,0,0,1741,1740,1,0,0,0,1741,1742,1,0,0,0,1742,1743, - 1,0,0,0,1743,1745,3,226,113,0,1744,1741,1,0,0,0,1744,1745,1,0,0,0,1745, - 181,1,0,0,0,1746,1747,3,356,178,0,1747,1748,5,187,0,0,1748,1749,5,52, - 0,0,1749,1750,5,187,0,0,1750,1752,1,0,0,0,1751,1746,1,0,0,0,1751,1752, - 1,0,0,0,1752,1753,1,0,0,0,1753,1754,3,356,178,0,1754,183,1,0,0,0,1755, - 1766,3,182,91,0,1756,1758,5,187,0,0,1757,1756,1,0,0,0,1757,1758,1,0,0, - 0,1758,1759,1,0,0,0,1759,1761,5,4,0,0,1760,1762,5,187,0,0,1761,1760,1, - 0,0,0,1761,1762,1,0,0,0,1762,1763,1,0,0,0,1763,1765,3,182,91,0,1764,1757, - 1,0,0,0,1765,1768,1,0,0,0,1766,1764,1,0,0,0,1766,1767,1,0,0,0,1767,185, - 1,0,0,0,1768,1766,1,0,0,0,1769,1770,5,58,0,0,1770,1771,5,187,0,0,1771, - 1776,3,336,168,0,1772,1774,5,187,0,0,1773,1772,1,0,0,0,1773,1774,1,0, - 0,0,1774,1775,1,0,0,0,1775,1777,3,226,113,0,1776,1773,1,0,0,0,1776,1777, - 1,0,0,0,1777,1784,1,0,0,0,1778,1780,5,187,0,0,1779,1778,1,0,0,0,1779, - 1780,1,0,0,0,1780,1781,1,0,0,0,1781,1782,5,159,0,0,1782,1783,5,187,0, - 0,1783,1785,3,184,92,0,1784,1779,1,0,0,0,1784,1785,1,0,0,0,1785,187,1, - 0,0,0,1786,1787,5,122,0,0,1787,1789,5,187,0,0,1788,1786,1,0,0,0,1788, - 1789,1,0,0,0,1789,1790,1,0,0,0,1790,1792,5,109,0,0,1791,1793,5,187,0, - 0,1792,1791,1,0,0,0,1792,1793,1,0,0,0,1793,1794,1,0,0,0,1794,1797,3,228, - 114,0,1795,1796,5,187,0,0,1796,1798,3,226,113,0,1797,1795,1,0,0,0,1797, - 1798,1,0,0,0,1798,1801,1,0,0,0,1799,1800,5,187,0,0,1800,1802,3,190,95, - 0,1801,1799,1,0,0,0,1801,1802,1,0,0,0,1802,189,1,0,0,0,1803,1804,5,95, - 0,0,1804,1805,5,187,0,0,1805,1806,3,192,96,0,1806,191,1,0,0,0,1807,1808, - 6,96,-1,0,1808,1810,5,2,0,0,1809,1811,5,187,0,0,1810,1809,1,0,0,0,1810, - 1811,1,0,0,0,1811,1812,1,0,0,0,1812,1814,3,192,96,0,1813,1815,5,187,0, - 0,1814,1813,1,0,0,0,1814,1815,1,0,0,0,1815,1816,1,0,0,0,1816,1817,5,3, - 0,0,1817,1820,1,0,0,0,1818,1820,3,370,185,0,1819,1807,1,0,0,0,1819,1818, - 1,0,0,0,1820,1837,1,0,0,0,1821,1822,10,4,0,0,1822,1823,5,187,0,0,1823, - 1824,5,103,0,0,1824,1825,5,187,0,0,1825,1836,3,192,96,5,1826,1831,10, - 3,0,0,1827,1828,5,187,0,0,1828,1829,5,113,0,0,1829,1830,5,187,0,0,1830, - 1832,3,370,185,0,1831,1827,1,0,0,0,1832,1833,1,0,0,0,1833,1831,1,0,0, - 0,1833,1834,1,0,0,0,1834,1836,1,0,0,0,1835,1821,1,0,0,0,1835,1826,1,0, - 0,0,1836,1839,1,0,0,0,1837,1835,1,0,0,0,1837,1838,1,0,0,0,1838,193,1, - 0,0,0,1839,1837,1,0,0,0,1840,1842,5,148,0,0,1841,1843,5,187,0,0,1842, - 1841,1,0,0,0,1842,1843,1,0,0,0,1843,1844,1,0,0,0,1844,1845,3,268,134, - 0,1845,1846,5,187,0,0,1846,1847,5,52,0,0,1847,1848,5,187,0,0,1848,1849, - 3,356,178,0,1849,195,1,0,0,0,1850,1852,5,69,0,0,1851,1853,5,187,0,0,1852, - 1851,1,0,0,0,1852,1853,1,0,0,0,1853,1854,1,0,0,0,1854,1855,3,228,114, - 0,1855,197,1,0,0,0,1856,1858,5,111,0,0,1857,1859,5,187,0,0,1858,1857, - 1,0,0,0,1858,1859,1,0,0,0,1859,1860,1,0,0,0,1860,1865,3,228,114,0,1861, - 1862,5,187,0,0,1862,1864,3,200,100,0,1863,1861,1,0,0,0,1864,1867,1,0, - 0,0,1865,1863,1,0,0,0,1865,1866,1,0,0,0,1866,199,1,0,0,0,1867,1865,1, - 0,0,0,1868,1869,5,119,0,0,1869,1870,5,187,0,0,1870,1871,5,109,0,0,1871, - 1872,5,187,0,0,1872,1879,3,202,101,0,1873,1874,5,119,0,0,1874,1875,5, - 187,0,0,1875,1876,5,69,0,0,1876,1877,5,187,0,0,1877,1879,3,202,101,0, - 1878,1868,1,0,0,0,1878,1873,1,0,0,0,1879,201,1,0,0,0,1880,1882,5,135, - 0,0,1881,1883,5,187,0,0,1882,1881,1,0,0,0,1882,1883,1,0,0,0,1883,1884, - 1,0,0,0,1884,1895,3,204,102,0,1885,1887,5,187,0,0,1886,1885,1,0,0,0,1886, - 1887,1,0,0,0,1887,1888,1,0,0,0,1888,1890,5,4,0,0,1889,1891,5,187,0,0, - 1890,1889,1,0,0,0,1890,1891,1,0,0,0,1891,1892,1,0,0,0,1892,1894,3,204, - 102,0,1893,1886,1,0,0,0,1894,1897,1,0,0,0,1895,1893,1,0,0,0,1895,1896, - 1,0,0,0,1896,1913,1,0,0,0,1897,1895,1,0,0,0,1898,1900,5,135,0,0,1899, - 1901,5,187,0,0,1900,1899,1,0,0,0,1900,1901,1,0,0,0,1901,1902,1,0,0,0, - 1902,1904,3,314,157,0,1903,1905,5,187,0,0,1904,1903,1,0,0,0,1904,1905, - 1,0,0,0,1905,1906,1,0,0,0,1906,1908,5,6,0,0,1907,1909,5,187,0,0,1908, - 1907,1,0,0,0,1908,1909,1,0,0,0,1909,1910,1,0,0,0,1910,1911,3,244,122, - 0,1911,1913,1,0,0,0,1912,1880,1,0,0,0,1912,1898,1,0,0,0,1913,203,1,0, - 0,0,1914,1916,3,362,181,0,1915,1917,5,187,0,0,1916,1915,1,0,0,0,1916, - 1917,1,0,0,0,1917,1918,1,0,0,0,1918,1920,5,6,0,0,1919,1921,5,187,0,0, - 1920,1919,1,0,0,0,1920,1921,1,0,0,0,1921,1922,1,0,0,0,1922,1923,3,268, - 134,0,1923,205,1,0,0,0,1924,1925,5,77,0,0,1925,1927,5,187,0,0,1926,1924, - 1,0,0,0,1926,1927,1,0,0,0,1927,1928,1,0,0,0,1928,1930,5,74,0,0,1929,1931, - 5,187,0,0,1930,1929,1,0,0,0,1930,1931,1,0,0,0,1931,1932,1,0,0,0,1932, - 1943,3,268,134,0,1933,1935,5,187,0,0,1934,1933,1,0,0,0,1934,1935,1,0, - 0,0,1935,1936,1,0,0,0,1936,1938,5,4,0,0,1937,1939,5,187,0,0,1938,1937, - 1,0,0,0,1938,1939,1,0,0,0,1939,1940,1,0,0,0,1940,1942,3,268,134,0,1941, - 1934,1,0,0,0,1942,1945,1,0,0,0,1943,1941,1,0,0,0,1943,1944,1,0,0,0,1944, - 207,1,0,0,0,1945,1943,1,0,0,0,1946,1947,5,154,0,0,1947,1952,3,212,106, - 0,1948,1950,5,187,0,0,1949,1948,1,0,0,0,1949,1950,1,0,0,0,1950,1951,1, - 0,0,0,1951,1953,3,226,113,0,1952,1949,1,0,0,0,1952,1953,1,0,0,0,1953, - 209,1,0,0,0,1954,1955,5,131,0,0,1955,1956,3,212,106,0,1956,211,1,0,0, - 0,1957,1959,5,187,0,0,1958,1957,1,0,0,0,1958,1959,1,0,0,0,1959,1960,1, - 0,0,0,1960,1962,5,78,0,0,1961,1958,1,0,0,0,1961,1962,1,0,0,0,1962,1963, - 1,0,0,0,1963,1964,5,187,0,0,1964,1967,3,214,107,0,1965,1966,5,187,0,0, - 1966,1968,3,218,109,0,1967,1965,1,0,0,0,1967,1968,1,0,0,0,1968,1971,1, - 0,0,0,1969,1970,5,187,0,0,1970,1972,3,220,110,0,1971,1969,1,0,0,0,1971, - 1972,1,0,0,0,1972,1975,1,0,0,0,1973,1974,5,187,0,0,1974,1976,3,222,111, - 0,1975,1973,1,0,0,0,1975,1976,1,0,0,0,1976,213,1,0,0,0,1977,1988,5,165, - 0,0,1978,1980,5,187,0,0,1979,1978,1,0,0,0,1979,1980,1,0,0,0,1980,1981, - 1,0,0,0,1981,1983,5,4,0,0,1982,1984,5,187,0,0,1983,1982,1,0,0,0,1983, - 1984,1,0,0,0,1984,1985,1,0,0,0,1985,1987,3,216,108,0,1986,1979,1,0,0, - 0,1987,1990,1,0,0,0,1988,1986,1,0,0,0,1988,1989,1,0,0,0,1989,2006,1,0, - 0,0,1990,1988,1,0,0,0,1991,2002,3,216,108,0,1992,1994,5,187,0,0,1993, - 1992,1,0,0,0,1993,1994,1,0,0,0,1994,1995,1,0,0,0,1995,1997,5,4,0,0,1996, - 1998,5,187,0,0,1997,1996,1,0,0,0,1997,1998,1,0,0,0,1998,1999,1,0,0,0, - 1999,2001,3,216,108,0,2000,1993,1,0,0,0,2001,2004,1,0,0,0,2002,2000,1, - 0,0,0,2002,2003,1,0,0,0,2003,2006,1,0,0,0,2004,2002,1,0,0,0,2005,1977, - 1,0,0,0,2005,1991,1,0,0,0,2006,215,1,0,0,0,2007,2008,3,268,134,0,2008, - 2009,5,187,0,0,2009,2010,5,52,0,0,2010,2011,5,187,0,0,2011,2012,3,356, - 178,0,2012,2015,1,0,0,0,2013,2015,3,268,134,0,2014,2007,1,0,0,0,2014, - 2013,1,0,0,0,2015,217,1,0,0,0,2016,2017,5,124,0,0,2017,2018,5,187,0,0, - 2018,2019,5,57,0,0,2019,2020,5,187,0,0,2020,2028,3,224,112,0,2021,2023, - 5,4,0,0,2022,2024,5,187,0,0,2023,2022,1,0,0,0,2023,2024,1,0,0,0,2024, - 2025,1,0,0,0,2025,2027,3,224,112,0,2026,2021,1,0,0,0,2027,2030,1,0,0, - 0,2028,2026,1,0,0,0,2028,2029,1,0,0,0,2029,219,1,0,0,0,2030,2028,1,0, - 0,0,2031,2032,5,166,0,0,2032,2033,5,187,0,0,2033,2034,3,268,134,0,2034, - 221,1,0,0,0,2035,2036,5,105,0,0,2036,2037,5,187,0,0,2037,2038,3,268,134, - 0,2038,223,1,0,0,0,2039,2044,3,268,134,0,2040,2042,5,187,0,0,2041,2040, - 1,0,0,0,2041,2042,1,0,0,0,2042,2043,1,0,0,0,2043,2045,7,1,0,0,2044,2041, - 1,0,0,0,2044,2045,1,0,0,0,2045,225,1,0,0,0,2046,2047,5,153,0,0,2047,2048, - 5,187,0,0,2048,2049,3,268,134,0,2049,227,1,0,0,0,2050,2061,3,230,115, - 0,2051,2053,5,187,0,0,2052,2051,1,0,0,0,2052,2053,1,0,0,0,2053,2054,1, - 0,0,0,2054,2056,5,4,0,0,2055,2057,5,187,0,0,2056,2055,1,0,0,0,2056,2057, - 1,0,0,0,2057,2058,1,0,0,0,2058,2060,3,230,115,0,2059,2052,1,0,0,0,2060, - 2063,1,0,0,0,2061,2059,1,0,0,0,2061,2062,1,0,0,0,2062,229,1,0,0,0,2063, - 2061,1,0,0,0,2064,2066,3,356,178,0,2065,2067,5,187,0,0,2066,2065,1,0, - 0,0,2066,2067,1,0,0,0,2067,2068,1,0,0,0,2068,2070,5,6,0,0,2069,2071,5, - 187,0,0,2070,2069,1,0,0,0,2070,2071,1,0,0,0,2071,2072,1,0,0,0,2072,2073, - 3,232,116,0,2073,2076,1,0,0,0,2074,2076,3,232,116,0,2075,2064,1,0,0,0, - 2075,2074,1,0,0,0,2076,231,1,0,0,0,2077,2078,3,234,117,0,2078,233,1,0, - 0,0,2079,2086,3,236,118,0,2080,2082,5,187,0,0,2081,2080,1,0,0,0,2081, - 2082,1,0,0,0,2082,2083,1,0,0,0,2083,2085,3,238,119,0,2084,2081,1,0,0, - 0,2085,2088,1,0,0,0,2086,2084,1,0,0,0,2086,2087,1,0,0,0,2087,2094,1,0, - 0,0,2088,2086,1,0,0,0,2089,2090,5,2,0,0,2090,2091,3,234,117,0,2091,2092, - 5,3,0,0,2092,2094,1,0,0,0,2093,2079,1,0,0,0,2093,2089,1,0,0,0,2094,235, - 1,0,0,0,2095,2097,5,2,0,0,2096,2098,5,187,0,0,2097,2096,1,0,0,0,2097, - 2098,1,0,0,0,2098,2103,1,0,0,0,2099,2101,3,356,178,0,2100,2102,5,187, - 0,0,2101,2100,1,0,0,0,2101,2102,1,0,0,0,2102,2104,1,0,0,0,2103,2099,1, - 0,0,0,2103,2104,1,0,0,0,2104,2109,1,0,0,0,2105,2107,3,248,124,0,2106, - 2108,5,187,0,0,2107,2106,1,0,0,0,2107,2108,1,0,0,0,2108,2110,1,0,0,0, - 2109,2105,1,0,0,0,2109,2110,1,0,0,0,2110,2115,1,0,0,0,2111,2113,3,244, - 122,0,2112,2114,5,187,0,0,2113,2112,1,0,0,0,2113,2114,1,0,0,0,2114,2116, - 1,0,0,0,2115,2111,1,0,0,0,2115,2116,1,0,0,0,2116,2117,1,0,0,0,2117,2118, - 5,3,0,0,2118,237,1,0,0,0,2119,2121,3,240,120,0,2120,2122,5,187,0,0,2121, - 2120,1,0,0,0,2121,2122,1,0,0,0,2122,2123,1,0,0,0,2123,2124,3,236,118, - 0,2124,239,1,0,0,0,2125,2127,3,376,188,0,2126,2128,5,187,0,0,2127,2126, - 1,0,0,0,2127,2128,1,0,0,0,2128,2129,1,0,0,0,2129,2131,3,380,190,0,2130, - 2132,5,187,0,0,2131,2130,1,0,0,0,2131,2132,1,0,0,0,2132,2134,1,0,0,0, - 2133,2135,3,242,121,0,2134,2133,1,0,0,0,2134,2135,1,0,0,0,2135,2137,1, - 0,0,0,2136,2138,5,187,0,0,2137,2136,1,0,0,0,2137,2138,1,0,0,0,2138,2139, - 1,0,0,0,2139,2140,3,380,190,0,2140,2170,1,0,0,0,2141,2143,3,380,190,0, - 2142,2144,5,187,0,0,2143,2142,1,0,0,0,2143,2144,1,0,0,0,2144,2146,1,0, - 0,0,2145,2147,3,242,121,0,2146,2145,1,0,0,0,2146,2147,1,0,0,0,2147,2149, - 1,0,0,0,2148,2150,5,187,0,0,2149,2148,1,0,0,0,2149,2150,1,0,0,0,2150, - 2151,1,0,0,0,2151,2153,3,380,190,0,2152,2154,5,187,0,0,2153,2152,1,0, - 0,0,2153,2154,1,0,0,0,2154,2155,1,0,0,0,2155,2156,3,378,189,0,2156,2170, - 1,0,0,0,2157,2159,3,380,190,0,2158,2160,5,187,0,0,2159,2158,1,0,0,0,2159, - 2160,1,0,0,0,2160,2162,1,0,0,0,2161,2163,3,242,121,0,2162,2161,1,0,0, - 0,2162,2163,1,0,0,0,2163,2165,1,0,0,0,2164,2166,5,187,0,0,2165,2164,1, - 0,0,0,2165,2166,1,0,0,0,2166,2167,1,0,0,0,2167,2168,3,380,190,0,2168, - 2170,1,0,0,0,2169,2125,1,0,0,0,2169,2141,1,0,0,0,2169,2157,1,0,0,0,2170, - 241,1,0,0,0,2171,2173,5,7,0,0,2172,2174,5,187,0,0,2173,2172,1,0,0,0,2173, - 2174,1,0,0,0,2174,2179,1,0,0,0,2175,2177,3,356,178,0,2176,2178,5,187, - 0,0,2177,2176,1,0,0,0,2177,2178,1,0,0,0,2178,2180,1,0,0,0,2179,2175,1, - 0,0,0,2179,2180,1,0,0,0,2180,2185,1,0,0,0,2181,2183,3,246,123,0,2182, - 2184,5,187,0,0,2183,2182,1,0,0,0,2183,2184,1,0,0,0,2184,2186,1,0,0,0, - 2185,2181,1,0,0,0,2185,2186,1,0,0,0,2186,2191,1,0,0,0,2187,2189,3,250, - 125,0,2188,2190,5,187,0,0,2189,2188,1,0,0,0,2189,2190,1,0,0,0,2190,2192, - 1,0,0,0,2191,2187,1,0,0,0,2191,2192,1,0,0,0,2192,2197,1,0,0,0,2193,2195, - 3,244,122,0,2194,2196,5,187,0,0,2195,2194,1,0,0,0,2195,2196,1,0,0,0,2196, - 2198,1,0,0,0,2197,2193,1,0,0,0,2197,2198,1,0,0,0,2198,2199,1,0,0,0,2199, - 2200,5,8,0,0,2200,243,1,0,0,0,2201,2203,5,9,0,0,2202,2204,5,187,0,0,2203, - 2202,1,0,0,0,2203,2204,1,0,0,0,2204,2238,1,0,0,0,2205,2207,3,364,182, - 0,2206,2208,5,187,0,0,2207,2206,1,0,0,0,2207,2208,1,0,0,0,2208,2209,1, - 0,0,0,2209,2211,5,168,0,0,2210,2212,5,187,0,0,2211,2210,1,0,0,0,2211, - 2212,1,0,0,0,2212,2213,1,0,0,0,2213,2215,3,268,134,0,2214,2216,5,187, - 0,0,2215,2214,1,0,0,0,2215,2216,1,0,0,0,2216,2235,1,0,0,0,2217,2219,5, - 4,0,0,2218,2220,5,187,0,0,2219,2218,1,0,0,0,2219,2220,1,0,0,0,2220,2221, - 1,0,0,0,2221,2223,3,364,182,0,2222,2224,5,187,0,0,2223,2222,1,0,0,0,2223, - 2224,1,0,0,0,2224,2225,1,0,0,0,2225,2227,5,168,0,0,2226,2228,5,187,0, - 0,2227,2226,1,0,0,0,2227,2228,1,0,0,0,2228,2229,1,0,0,0,2229,2231,3,268, - 134,0,2230,2232,5,187,0,0,2231,2230,1,0,0,0,2231,2232,1,0,0,0,2232,2234, - 1,0,0,0,2233,2217,1,0,0,0,2234,2237,1,0,0,0,2235,2233,1,0,0,0,2235,2236, - 1,0,0,0,2236,2239,1,0,0,0,2237,2235,1,0,0,0,2238,2205,1,0,0,0,2238,2239, - 1,0,0,0,2239,2240,1,0,0,0,2240,2241,5,10,0,0,2241,245,1,0,0,0,2242,2244, - 5,168,0,0,2243,2245,5,187,0,0,2244,2243,1,0,0,0,2244,2245,1,0,0,0,2245, - 2246,1,0,0,0,2246,2260,3,266,133,0,2247,2249,5,187,0,0,2248,2247,1,0, - 0,0,2248,2249,1,0,0,0,2249,2250,1,0,0,0,2250,2252,5,11,0,0,2251,2253, - 5,168,0,0,2252,2251,1,0,0,0,2252,2253,1,0,0,0,2253,2255,1,0,0,0,2254, - 2256,5,187,0,0,2255,2254,1,0,0,0,2255,2256,1,0,0,0,2256,2257,1,0,0,0, - 2257,2259,3,266,133,0,2258,2248,1,0,0,0,2259,2262,1,0,0,0,2260,2258,1, - 0,0,0,2260,2261,1,0,0,0,2261,247,1,0,0,0,2262,2260,1,0,0,0,2263,2265, - 5,168,0,0,2264,2266,5,187,0,0,2265,2264,1,0,0,0,2265,2266,1,0,0,0,2266, - 2267,1,0,0,0,2267,2284,3,264,132,0,2268,2270,5,187,0,0,2269,2268,1,0, - 0,0,2269,2270,1,0,0,0,2270,2276,1,0,0,0,2271,2273,5,11,0,0,2272,2274, - 5,168,0,0,2273,2272,1,0,0,0,2273,2274,1,0,0,0,2274,2277,1,0,0,0,2275, - 2277,5,168,0,0,2276,2271,1,0,0,0,2276,2275,1,0,0,0,2277,2279,1,0,0,0, - 2278,2280,5,187,0,0,2279,2278,1,0,0,0,2279,2280,1,0,0,0,2280,2281,1,0, - 0,0,2281,2283,3,264,132,0,2282,2269,1,0,0,0,2283,2286,1,0,0,0,2284,2282, - 1,0,0,0,2284,2285,1,0,0,0,2285,249,1,0,0,0,2286,2284,1,0,0,0,2287,2292, - 5,165,0,0,2288,2290,5,187,0,0,2289,2288,1,0,0,0,2289,2290,1,0,0,0,2290, - 2291,1,0,0,0,2291,2293,3,252,126,0,2292,2289,1,0,0,0,2292,2293,1,0,0, - 0,2293,2298,1,0,0,0,2294,2296,5,187,0,0,2295,2294,1,0,0,0,2295,2296,1, - 0,0,0,2296,2297,1,0,0,0,2297,2299,3,254,127,0,2298,2295,1,0,0,0,2298, - 2299,1,0,0,0,2299,2304,1,0,0,0,2300,2302,5,187,0,0,2301,2300,1,0,0,0, - 2301,2302,1,0,0,0,2302,2303,1,0,0,0,2303,2305,3,256,128,0,2304,2301,1, - 0,0,0,2304,2305,1,0,0,0,2305,251,1,0,0,0,2306,2307,5,48,0,0,2307,2309, - 5,187,0,0,2308,2306,1,0,0,0,2308,2309,1,0,0,0,2309,2310,1,0,0,0,2310, - 2312,5,156,0,0,2311,2313,5,187,0,0,2312,2311,1,0,0,0,2312,2313,1,0,0, - 0,2313,2314,1,0,0,0,2314,2316,5,2,0,0,2315,2317,5,187,0,0,2316,2315,1, - 0,0,0,2316,2317,1,0,0,0,2317,2318,1,0,0,0,2318,2320,3,364,182,0,2319, - 2321,5,187,0,0,2320,2319,1,0,0,0,2320,2321,1,0,0,0,2321,2322,1,0,0,0, - 2322,2323,5,3,0,0,2323,2331,1,0,0,0,2324,2331,5,136,0,0,2325,2326,5,48, - 0,0,2326,2327,5,187,0,0,2327,2331,5,136,0,0,2328,2331,5,143,0,0,2329, - 2331,5,45,0,0,2330,2308,1,0,0,0,2330,2324,1,0,0,0,2330,2325,1,0,0,0,2330, - 2328,1,0,0,0,2330,2329,1,0,0,0,2331,253,1,0,0,0,2332,2334,3,260,130,0, - 2333,2332,1,0,0,0,2333,2334,1,0,0,0,2334,2336,1,0,0,0,2335,2337,5,187, - 0,0,2336,2335,1,0,0,0,2336,2337,1,0,0,0,2337,2338,1,0,0,0,2338,2340,5, - 169,0,0,2339,2341,5,187,0,0,2340,2339,1,0,0,0,2340,2341,1,0,0,0,2341, - 2343,1,0,0,0,2342,2344,3,262,131,0,2343,2342,1,0,0,0,2343,2344,1,0,0, - 0,2344,2347,1,0,0,0,2345,2347,3,366,183,0,2346,2333,1,0,0,0,2346,2345, - 1,0,0,0,2347,255,1,0,0,0,2348,2350,5,2,0,0,2349,2351,5,187,0,0,2350,2349, - 1,0,0,0,2350,2351,1,0,0,0,2351,2352,1,0,0,0,2352,2354,3,356,178,0,2353, - 2355,5,187,0,0,2354,2353,1,0,0,0,2354,2355,1,0,0,0,2355,2356,1,0,0,0, - 2356,2358,5,4,0,0,2357,2359,5,187,0,0,2358,2357,1,0,0,0,2358,2359,1,0, - 0,0,2359,2360,1,0,0,0,2360,2372,3,356,178,0,2361,2363,5,187,0,0,2362, - 2361,1,0,0,0,2362,2363,1,0,0,0,2363,2364,1,0,0,0,2364,2366,5,11,0,0,2365, - 2367,5,187,0,0,2366,2365,1,0,0,0,2366,2367,1,0,0,0,2367,2368,1,0,0,0, - 2368,2370,3,226,113,0,2369,2371,5,187,0,0,2370,2369,1,0,0,0,2370,2371, - 1,0,0,0,2371,2373,1,0,0,0,2372,2362,1,0,0,0,2372,2373,1,0,0,0,2373,2393, - 1,0,0,0,2374,2376,5,187,0,0,2375,2374,1,0,0,0,2375,2376,1,0,0,0,2376, - 2377,1,0,0,0,2377,2379,5,11,0,0,2378,2380,5,187,0,0,2379,2378,1,0,0,0, - 2379,2380,1,0,0,0,2380,2381,1,0,0,0,2381,2383,3,258,129,0,2382,2384,5, - 187,0,0,2383,2382,1,0,0,0,2383,2384,1,0,0,0,2384,2385,1,0,0,0,2385,2387, - 5,4,0,0,2386,2388,5,187,0,0,2387,2386,1,0,0,0,2387,2388,1,0,0,0,2388, - 2389,1,0,0,0,2389,2391,3,258,129,0,2390,2392,5,187,0,0,2391,2390,1,0, - 0,0,2391,2392,1,0,0,0,2392,2394,1,0,0,0,2393,2375,1,0,0,0,2393,2394,1, - 0,0,0,2394,2395,1,0,0,0,2395,2396,5,3,0,0,2396,257,1,0,0,0,2397,2399, - 5,9,0,0,2398,2400,5,187,0,0,2399,2398,1,0,0,0,2399,2400,1,0,0,0,2400, - 2402,1,0,0,0,2401,2403,3,214,107,0,2402,2401,1,0,0,0,2402,2403,1,0,0, - 0,2403,2405,1,0,0,0,2404,2406,5,187,0,0,2405,2404,1,0,0,0,2405,2406,1, - 0,0,0,2406,2407,1,0,0,0,2407,2408,5,10,0,0,2408,259,1,0,0,0,2409,2410, - 5,174,0,0,2410,261,1,0,0,0,2411,2412,5,174,0,0,2412,263,1,0,0,0,2413, - 2416,3,370,185,0,2414,2415,5,5,0,0,2415,2417,3,370,185,0,2416,2414,1, - 0,0,0,2416,2417,1,0,0,0,2417,265,1,0,0,0,2418,2419,3,370,185,0,2419,267, - 1,0,0,0,2420,2421,3,270,135,0,2421,269,1,0,0,0,2422,2429,3,272,136,0, - 2423,2424,5,187,0,0,2424,2425,5,123,0,0,2425,2426,5,187,0,0,2426,2428, - 3,272,136,0,2427,2423,1,0,0,0,2428,2431,1,0,0,0,2429,2427,1,0,0,0,2429, - 2430,1,0,0,0,2430,271,1,0,0,0,2431,2429,1,0,0,0,2432,2439,3,274,137,0, - 2433,2434,5,187,0,0,2434,2435,5,157,0,0,2435,2436,5,187,0,0,2436,2438, - 3,274,137,0,2437,2433,1,0,0,0,2438,2441,1,0,0,0,2439,2437,1,0,0,0,2439, - 2440,1,0,0,0,2440,273,1,0,0,0,2441,2439,1,0,0,0,2442,2449,3,276,138,0, - 2443,2444,5,187,0,0,2444,2445,5,51,0,0,2445,2446,5,187,0,0,2446,2448, - 3,276,138,0,2447,2443,1,0,0,0,2448,2451,1,0,0,0,2449,2447,1,0,0,0,2449, - 2450,1,0,0,0,2450,275,1,0,0,0,2451,2449,1,0,0,0,2452,2454,5,116,0,0,2453, - 2455,5,187,0,0,2454,2453,1,0,0,0,2454,2455,1,0,0,0,2455,2457,1,0,0,0, - 2456,2452,1,0,0,0,2457,2460,1,0,0,0,2458,2456,1,0,0,0,2458,2459,1,0,0, - 0,2459,2461,1,0,0,0,2460,2458,1,0,0,0,2461,2462,3,278,139,0,2462,277, - 1,0,0,0,2463,2473,3,282,141,0,2464,2466,5,187,0,0,2465,2464,1,0,0,0,2465, - 2466,1,0,0,0,2466,2467,1,0,0,0,2467,2469,3,280,140,0,2468,2470,5,187, - 0,0,2469,2468,1,0,0,0,2469,2470,1,0,0,0,2470,2471,1,0,0,0,2471,2472,3, - 282,141,0,2472,2474,1,0,0,0,2473,2465,1,0,0,0,2473,2474,1,0,0,0,2474, - 2512,1,0,0,0,2475,2477,3,282,141,0,2476,2478,5,187,0,0,2477,2476,1,0, - 0,0,2477,2478,1,0,0,0,2478,2479,1,0,0,0,2479,2481,5,167,0,0,2480,2482, - 5,187,0,0,2481,2480,1,0,0,0,2481,2482,1,0,0,0,2482,2483,1,0,0,0,2483, - 2484,3,282,141,0,2484,2485,1,0,0,0,2485,2486,6,139,-1,0,2486,2512,1,0, - 0,0,2487,2489,3,282,141,0,2488,2490,5,187,0,0,2489,2488,1,0,0,0,2489, - 2490,1,0,0,0,2490,2491,1,0,0,0,2491,2493,3,280,140,0,2492,2494,5,187, - 0,0,2493,2492,1,0,0,0,2493,2494,1,0,0,0,2494,2495,1,0,0,0,2495,2505,3, - 282,141,0,2496,2498,5,187,0,0,2497,2496,1,0,0,0,2497,2498,1,0,0,0,2498, - 2499,1,0,0,0,2499,2501,3,280,140,0,2500,2502,5,187,0,0,2501,2500,1,0, - 0,0,2501,2502,1,0,0,0,2502,2503,1,0,0,0,2503,2504,3,282,141,0,2504,2506, - 1,0,0,0,2505,2497,1,0,0,0,2506,2507,1,0,0,0,2507,2505,1,0,0,0,2507,2508, - 1,0,0,0,2508,2509,1,0,0,0,2509,2510,6,139,-1,0,2510,2512,1,0,0,0,2511, - 2463,1,0,0,0,2511,2475,1,0,0,0,2511,2487,1,0,0,0,2512,279,1,0,0,0,2513, - 2514,7,2,0,0,2514,281,1,0,0,0,2515,2526,3,284,142,0,2516,2518,5,187,0, - 0,2517,2516,1,0,0,0,2517,2518,1,0,0,0,2518,2519,1,0,0,0,2519,2521,5,11, - 0,0,2520,2522,5,187,0,0,2521,2520,1,0,0,0,2521,2522,1,0,0,0,2522,2523, - 1,0,0,0,2523,2525,3,284,142,0,2524,2517,1,0,0,0,2525,2528,1,0,0,0,2526, - 2524,1,0,0,0,2526,2527,1,0,0,0,2527,283,1,0,0,0,2528,2526,1,0,0,0,2529, - 2540,3,286,143,0,2530,2532,5,187,0,0,2531,2530,1,0,0,0,2531,2532,1,0, - 0,0,2532,2533,1,0,0,0,2533,2535,5,17,0,0,2534,2536,5,187,0,0,2535,2534, - 1,0,0,0,2535,2536,1,0,0,0,2536,2537,1,0,0,0,2537,2539,3,286,143,0,2538, - 2531,1,0,0,0,2539,2542,1,0,0,0,2540,2538,1,0,0,0,2540,2541,1,0,0,0,2541, - 285,1,0,0,0,2542,2540,1,0,0,0,2543,2555,3,290,145,0,2544,2546,5,187,0, - 0,2545,2544,1,0,0,0,2545,2546,1,0,0,0,2546,2547,1,0,0,0,2547,2549,3,288, - 144,0,2548,2550,5,187,0,0,2549,2548,1,0,0,0,2549,2550,1,0,0,0,2550,2551, - 1,0,0,0,2551,2552,3,290,145,0,2552,2554,1,0,0,0,2553,2545,1,0,0,0,2554, - 2557,1,0,0,0,2555,2553,1,0,0,0,2555,2556,1,0,0,0,2556,287,1,0,0,0,2557, - 2555,1,0,0,0,2558,2559,7,3,0,0,2559,289,1,0,0,0,2560,2572,3,294,147,0, - 2561,2563,5,187,0,0,2562,2561,1,0,0,0,2562,2563,1,0,0,0,2563,2564,1,0, - 0,0,2564,2566,3,292,146,0,2565,2567,5,187,0,0,2566,2565,1,0,0,0,2566, - 2567,1,0,0,0,2567,2568,1,0,0,0,2568,2569,3,294,147,0,2569,2571,1,0,0, - 0,2570,2562,1,0,0,0,2571,2574,1,0,0,0,2572,2570,1,0,0,0,2572,2573,1,0, - 0,0,2573,291,1,0,0,0,2574,2572,1,0,0,0,2575,2576,7,4,0,0,2576,293,1,0, - 0,0,2577,2589,3,298,149,0,2578,2580,5,187,0,0,2579,2578,1,0,0,0,2579, - 2580,1,0,0,0,2580,2581,1,0,0,0,2581,2583,3,296,148,0,2582,2584,5,187, - 0,0,2583,2582,1,0,0,0,2583,2584,1,0,0,0,2584,2585,1,0,0,0,2585,2586,3, - 298,149,0,2586,2588,1,0,0,0,2587,2579,1,0,0,0,2588,2591,1,0,0,0,2589, - 2587,1,0,0,0,2589,2590,1,0,0,0,2590,295,1,0,0,0,2591,2589,1,0,0,0,2592, - 2593,7,5,0,0,2593,297,1,0,0,0,2594,2605,3,300,150,0,2595,2597,5,187,0, - 0,2596,2595,1,0,0,0,2596,2597,1,0,0,0,2597,2598,1,0,0,0,2598,2600,5,23, - 0,0,2599,2601,5,187,0,0,2600,2599,1,0,0,0,2600,2601,1,0,0,0,2601,2602, - 1,0,0,0,2602,2604,3,300,150,0,2603,2596,1,0,0,0,2604,2607,1,0,0,0,2605, - 2603,1,0,0,0,2605,2606,1,0,0,0,2606,299,1,0,0,0,2607,2605,1,0,0,0,2608, - 2616,3,310,155,0,2609,2617,3,304,152,0,2610,2612,3,302,151,0,2611,2610, - 1,0,0,0,2612,2613,1,0,0,0,2613,2611,1,0,0,0,2613,2614,1,0,0,0,2614,2617, - 1,0,0,0,2615,2617,3,308,154,0,2616,2609,1,0,0,0,2616,2611,1,0,0,0,2616, - 2615,1,0,0,0,2616,2617,1,0,0,0,2617,301,1,0,0,0,2618,2619,5,187,0,0,2619, - 2621,5,99,0,0,2620,2622,5,187,0,0,2621,2620,1,0,0,0,2621,2622,1,0,0,0, - 2622,2623,1,0,0,0,2623,2638,3,312,156,0,2624,2625,5,7,0,0,2625,2626,3, - 268,134,0,2626,2627,5,8,0,0,2627,2638,1,0,0,0,2628,2630,5,7,0,0,2629, - 2631,3,268,134,0,2630,2629,1,0,0,0,2630,2631,1,0,0,0,2631,2632,1,0,0, - 0,2632,2634,7,6,0,0,2633,2635,3,268,134,0,2634,2633,1,0,0,0,2634,2635, - 1,0,0,0,2635,2636,1,0,0,0,2636,2638,5,8,0,0,2637,2618,1,0,0,0,2637,2624, - 1,0,0,0,2637,2628,1,0,0,0,2638,303,1,0,0,0,2639,2651,3,306,153,0,2640, - 2641,5,187,0,0,2641,2642,5,138,0,0,2642,2643,5,187,0,0,2643,2651,5,154, - 0,0,2644,2645,5,187,0,0,2645,2646,5,82,0,0,2646,2647,5,187,0,0,2647,2651, - 5,154,0,0,2648,2649,5,187,0,0,2649,2651,5,66,0,0,2650,2639,1,0,0,0,2650, - 2640,1,0,0,0,2650,2644,1,0,0,0,2650,2648,1,0,0,0,2651,2653,1,0,0,0,2652, - 2654,5,187,0,0,2653,2652,1,0,0,0,2653,2654,1,0,0,0,2654,2655,1,0,0,0, - 2655,2656,3,312,156,0,2656,305,1,0,0,0,2657,2659,5,187,0,0,2658,2657, - 1,0,0,0,2658,2659,1,0,0,0,2659,2660,1,0,0,0,2660,2661,5,24,0,0,2661,307, - 1,0,0,0,2662,2663,5,187,0,0,2663,2664,5,102,0,0,2664,2665,5,187,0,0,2665, - 2673,5,118,0,0,2666,2667,5,187,0,0,2667,2668,5,102,0,0,2668,2669,5,187, - 0,0,2669,2670,5,116,0,0,2670,2671,5,187,0,0,2671,2673,5,118,0,0,2672, - 2662,1,0,0,0,2672,2666,1,0,0,0,2673,309,1,0,0,0,2674,2676,5,170,0,0,2675, - 2677,5,187,0,0,2676,2675,1,0,0,0,2676,2677,1,0,0,0,2677,2679,1,0,0,0, - 2678,2674,1,0,0,0,2679,2682,1,0,0,0,2680,2678,1,0,0,0,2680,2681,1,0,0, - 0,2681,2683,1,0,0,0,2682,2680,1,0,0,0,2683,2688,3,312,156,0,2684,2686, - 5,187,0,0,2685,2684,1,0,0,0,2685,2686,1,0,0,0,2686,2687,1,0,0,0,2687, - 2689,5,171,0,0,2688,2685,1,0,0,0,2688,2689,1,0,0,0,2689,311,1,0,0,0,2690, - 2697,3,314,157,0,2691,2693,5,187,0,0,2692,2691,1,0,0,0,2692,2693,1,0, - 0,0,2693,2694,1,0,0,0,2694,2696,3,350,175,0,2695,2692,1,0,0,0,2696,2699, - 1,0,0,0,2697,2695,1,0,0,0,2697,2698,1,0,0,0,2698,313,1,0,0,0,2699,2697, - 1,0,0,0,2700,2710,3,322,161,0,2701,2710,3,360,180,0,2702,2710,3,352,176, - 0,2703,2710,3,334,167,0,2704,2710,3,336,168,0,2705,2710,3,346,173,0,2706, - 2710,3,348,174,0,2707,2710,3,356,178,0,2708,2710,3,316,158,0,2709,2700, - 1,0,0,0,2709,2701,1,0,0,0,2709,2702,1,0,0,0,2709,2703,1,0,0,0,2709,2704, - 1,0,0,0,2709,2705,1,0,0,0,2709,2706,1,0,0,0,2709,2707,1,0,0,0,2709,2708, - 1,0,0,0,2710,315,1,0,0,0,2711,2713,5,48,0,0,2712,2714,5,187,0,0,2713, - 2712,1,0,0,0,2713,2714,1,0,0,0,2714,2715,1,0,0,0,2715,2717,5,2,0,0,2716, - 2718,5,187,0,0,2717,2716,1,0,0,0,2717,2718,1,0,0,0,2718,2719,1,0,0,0, - 2719,2721,3,318,159,0,2720,2722,5,187,0,0,2721,2720,1,0,0,0,2721,2722, - 1,0,0,0,2722,2723,1,0,0,0,2723,2724,5,3,0,0,2724,2768,1,0,0,0,2725,2727, - 5,46,0,0,2726,2728,5,187,0,0,2727,2726,1,0,0,0,2727,2728,1,0,0,0,2728, - 2729,1,0,0,0,2729,2731,5,2,0,0,2730,2732,5,187,0,0,2731,2730,1,0,0,0, - 2731,2732,1,0,0,0,2732,2733,1,0,0,0,2733,2735,3,318,159,0,2734,2736,5, - 187,0,0,2735,2734,1,0,0,0,2735,2736,1,0,0,0,2736,2737,1,0,0,0,2737,2738, - 5,3,0,0,2738,2768,1,0,0,0,2739,2741,5,117,0,0,2740,2742,5,187,0,0,2741, - 2740,1,0,0,0,2741,2742,1,0,0,0,2742,2743,1,0,0,0,2743,2745,5,2,0,0,2744, - 2746,5,187,0,0,2745,2744,1,0,0,0,2745,2746,1,0,0,0,2746,2747,1,0,0,0, - 2747,2749,3,318,159,0,2748,2750,5,187,0,0,2749,2748,1,0,0,0,2749,2750, - 1,0,0,0,2750,2751,1,0,0,0,2751,2752,5,3,0,0,2752,2768,1,0,0,0,2753,2755, - 5,158,0,0,2754,2756,5,187,0,0,2755,2754,1,0,0,0,2755,2756,1,0,0,0,2756, - 2757,1,0,0,0,2757,2759,5,2,0,0,2758,2760,5,187,0,0,2759,2758,1,0,0,0, - 2759,2760,1,0,0,0,2760,2761,1,0,0,0,2761,2763,3,318,159,0,2762,2764,5, - 187,0,0,2763,2762,1,0,0,0,2763,2764,1,0,0,0,2764,2765,1,0,0,0,2765,2766, - 5,3,0,0,2766,2768,1,0,0,0,2767,2711,1,0,0,0,2767,2725,1,0,0,0,2767,2739, - 1,0,0,0,2767,2753,1,0,0,0,2768,317,1,0,0,0,2769,2770,3,320,160,0,2770, - 2771,5,187,0,0,2771,2772,3,226,113,0,2772,319,1,0,0,0,2773,2774,3,356, - 178,0,2774,2775,5,187,0,0,2775,2776,5,99,0,0,2776,2777,5,187,0,0,2777, - 2778,3,268,134,0,2778,321,1,0,0,0,2779,2786,3,358,179,0,2780,2786,5,172, - 0,0,2781,2786,3,324,162,0,2782,2786,5,118,0,0,2783,2786,3,326,163,0,2784, - 2786,3,330,165,0,2785,2779,1,0,0,0,2785,2780,1,0,0,0,2785,2781,1,0,0, - 0,2785,2782,1,0,0,0,2785,2783,1,0,0,0,2785,2784,1,0,0,0,2786,323,1,0, - 0,0,2787,2788,7,7,0,0,2788,325,1,0,0,0,2789,2791,5,7,0,0,2790,2792,5, - 187,0,0,2791,2790,1,0,0,0,2791,2792,1,0,0,0,2792,2806,1,0,0,0,2793,2795, - 3,268,134,0,2794,2796,5,187,0,0,2795,2794,1,0,0,0,2795,2796,1,0,0,0,2796, - 2803,1,0,0,0,2797,2799,3,328,164,0,2798,2800,5,187,0,0,2799,2798,1,0, - 0,0,2799,2800,1,0,0,0,2800,2802,1,0,0,0,2801,2797,1,0,0,0,2802,2805,1, - 0,0,0,2803,2801,1,0,0,0,2803,2804,1,0,0,0,2804,2807,1,0,0,0,2805,2803, - 1,0,0,0,2806,2793,1,0,0,0,2806,2807,1,0,0,0,2807,2808,1,0,0,0,2808,2809, - 5,8,0,0,2809,327,1,0,0,0,2810,2812,5,4,0,0,2811,2813,5,187,0,0,2812,2811, - 1,0,0,0,2812,2813,1,0,0,0,2813,2815,1,0,0,0,2814,2816,3,268,134,0,2815, - 2814,1,0,0,0,2815,2816,1,0,0,0,2816,329,1,0,0,0,2817,2819,5,9,0,0,2818, - 2820,5,187,0,0,2819,2818,1,0,0,0,2819,2820,1,0,0,0,2820,2821,1,0,0,0, - 2821,2823,3,332,166,0,2822,2824,5,187,0,0,2823,2822,1,0,0,0,2823,2824, - 1,0,0,0,2824,2835,1,0,0,0,2825,2827,5,4,0,0,2826,2828,5,187,0,0,2827, - 2826,1,0,0,0,2827,2828,1,0,0,0,2828,2829,1,0,0,0,2829,2831,3,332,166, - 0,2830,2832,5,187,0,0,2831,2830,1,0,0,0,2831,2832,1,0,0,0,2832,2834,1, - 0,0,0,2833,2825,1,0,0,0,2834,2837,1,0,0,0,2835,2833,1,0,0,0,2835,2836, - 1,0,0,0,2836,2838,1,0,0,0,2837,2835,1,0,0,0,2838,2839,5,10,0,0,2839,331, - 1,0,0,0,2840,2843,3,372,186,0,2841,2843,5,172,0,0,2842,2840,1,0,0,0,2842, - 2841,1,0,0,0,2843,2845,1,0,0,0,2844,2846,5,187,0,0,2845,2844,1,0,0,0, - 2845,2846,1,0,0,0,2846,2847,1,0,0,0,2847,2849,5,168,0,0,2848,2850,5,187, - 0,0,2849,2848,1,0,0,0,2849,2850,1,0,0,0,2850,2851,1,0,0,0,2851,2852,3, - 268,134,0,2852,333,1,0,0,0,2853,2855,5,2,0,0,2854,2856,5,187,0,0,2855, - 2854,1,0,0,0,2855,2856,1,0,0,0,2856,2857,1,0,0,0,2857,2859,3,268,134, - 0,2858,2860,5,187,0,0,2859,2858,1,0,0,0,2859,2860,1,0,0,0,2860,2861,1, - 0,0,0,2861,2862,5,3,0,0,2862,335,1,0,0,0,2863,2865,5,68,0,0,2864,2866, - 5,187,0,0,2865,2864,1,0,0,0,2865,2866,1,0,0,0,2866,2867,1,0,0,0,2867, - 2869,5,2,0,0,2868,2870,5,187,0,0,2869,2868,1,0,0,0,2869,2870,1,0,0,0, - 2870,2871,1,0,0,0,2871,2873,5,165,0,0,2872,2874,5,187,0,0,2873,2872,1, - 0,0,0,2873,2874,1,0,0,0,2874,2875,1,0,0,0,2875,2941,5,3,0,0,2876,2878, - 5,60,0,0,2877,2879,5,187,0,0,2878,2877,1,0,0,0,2878,2879,1,0,0,0,2879, - 2880,1,0,0,0,2880,2882,5,2,0,0,2881,2883,5,187,0,0,2882,2881,1,0,0,0, - 2882,2883,1,0,0,0,2883,2884,1,0,0,0,2884,2886,3,340,170,0,2885,2887,5, - 187,0,0,2886,2885,1,0,0,0,2886,2887,1,0,0,0,2887,2898,1,0,0,0,2888,2890, - 5,52,0,0,2889,2891,5,187,0,0,2890,2889,1,0,0,0,2890,2891,1,0,0,0,2891, - 2892,1,0,0,0,2892,2899,3,138,69,0,2893,2895,5,4,0,0,2894,2896,5,187,0, - 0,2895,2894,1,0,0,0,2895,2896,1,0,0,0,2896,2897,1,0,0,0,2897,2899,3,340, - 170,0,2898,2888,1,0,0,0,2898,2893,1,0,0,0,2899,2901,1,0,0,0,2900,2902, - 5,187,0,0,2901,2900,1,0,0,0,2901,2902,1,0,0,0,2902,2903,1,0,0,0,2903, - 2904,5,3,0,0,2904,2941,1,0,0,0,2905,2907,3,338,169,0,2906,2908,5,187, - 0,0,2907,2906,1,0,0,0,2907,2908,1,0,0,0,2908,2909,1,0,0,0,2909,2911,5, - 2,0,0,2910,2912,5,187,0,0,2911,2910,1,0,0,0,2911,2912,1,0,0,0,2912,2917, - 1,0,0,0,2913,2915,5,78,0,0,2914,2916,5,187,0,0,2915,2914,1,0,0,0,2915, - 2916,1,0,0,0,2916,2918,1,0,0,0,2917,2913,1,0,0,0,2917,2918,1,0,0,0,2918, - 2936,1,0,0,0,2919,2921,3,340,170,0,2920,2922,5,187,0,0,2921,2920,1,0, - 0,0,2921,2922,1,0,0,0,2922,2933,1,0,0,0,2923,2925,5,4,0,0,2924,2926,5, - 187,0,0,2925,2924,1,0,0,0,2925,2926,1,0,0,0,2926,2927,1,0,0,0,2927,2929, - 3,340,170,0,2928,2930,5,187,0,0,2929,2928,1,0,0,0,2929,2930,1,0,0,0,2930, - 2932,1,0,0,0,2931,2923,1,0,0,0,2932,2935,1,0,0,0,2933,2931,1,0,0,0,2933, - 2934,1,0,0,0,2934,2937,1,0,0,0,2935,2933,1,0,0,0,2936,2919,1,0,0,0,2936, - 2937,1,0,0,0,2937,2938,1,0,0,0,2938,2939,5,3,0,0,2939,2941,1,0,0,0,2940, - 2863,1,0,0,0,2940,2876,1,0,0,0,2940,2905,1,0,0,0,2941,337,1,0,0,0,2942, - 2943,3,372,186,0,2943,339,1,0,0,0,2944,2946,3,372,186,0,2945,2947,5,187, - 0,0,2946,2945,1,0,0,0,2946,2947,1,0,0,0,2947,2948,1,0,0,0,2948,2949,5, - 168,0,0,2949,2951,5,6,0,0,2950,2952,5,187,0,0,2951,2950,1,0,0,0,2951, - 2952,1,0,0,0,2952,2954,1,0,0,0,2953,2944,1,0,0,0,2953,2954,1,0,0,0,2954, - 2955,1,0,0,0,2955,2958,3,268,134,0,2956,2958,3,342,171,0,2957,2953,1, - 0,0,0,2957,2956,1,0,0,0,2958,341,1,0,0,0,2959,2961,3,344,172,0,2960,2962, - 5,187,0,0,2961,2960,1,0,0,0,2961,2962,1,0,0,0,2962,2963,1,0,0,0,2963, - 2964,5,170,0,0,2964,2966,5,15,0,0,2965,2967,5,187,0,0,2966,2965,1,0,0, - 0,2966,2967,1,0,0,0,2967,2968,1,0,0,0,2968,2970,3,268,134,0,2969,2971, - 5,187,0,0,2970,2969,1,0,0,0,2970,2971,1,0,0,0,2971,343,1,0,0,0,2972,2997, - 3,372,186,0,2973,2975,5,2,0,0,2974,2976,5,187,0,0,2975,2974,1,0,0,0,2975, - 2976,1,0,0,0,2976,2977,1,0,0,0,2977,2979,3,372,186,0,2978,2980,5,187, - 0,0,2979,2978,1,0,0,0,2979,2980,1,0,0,0,2980,2991,1,0,0,0,2981,2983,5, - 4,0,0,2982,2984,5,187,0,0,2983,2982,1,0,0,0,2983,2984,1,0,0,0,2984,2985, - 1,0,0,0,2985,2987,3,372,186,0,2986,2988,5,187,0,0,2987,2986,1,0,0,0,2987, - 2988,1,0,0,0,2988,2990,1,0,0,0,2989,2981,1,0,0,0,2990,2993,1,0,0,0,2991, - 2989,1,0,0,0,2991,2992,1,0,0,0,2992,2994,1,0,0,0,2993,2991,1,0,0,0,2994, - 2995,5,3,0,0,2995,2997,1,0,0,0,2996,2972,1,0,0,0,2996,2973,1,0,0,0,2997, - 345,1,0,0,0,2998,3003,3,236,118,0,2999,3001,5,187,0,0,3000,2999,1,0,0, - 0,3000,3001,1,0,0,0,3001,3002,1,0,0,0,3002,3004,3,238,119,0,3003,3000, - 1,0,0,0,3004,3005,1,0,0,0,3005,3003,1,0,0,0,3005,3006,1,0,0,0,3006,347, - 1,0,0,0,3007,3009,7,8,0,0,3008,3010,5,187,0,0,3009,3008,1,0,0,0,3009, - 3010,1,0,0,0,3010,3011,1,0,0,0,3011,3013,5,9,0,0,3012,3014,5,187,0,0, - 3013,3012,1,0,0,0,3013,3014,1,0,0,0,3014,3015,1,0,0,0,3015,3017,5,109, - 0,0,3016,3018,5,187,0,0,3017,3016,1,0,0,0,3017,3018,1,0,0,0,3018,3019, - 1,0,0,0,3019,3024,3,228,114,0,3020,3022,5,187,0,0,3021,3020,1,0,0,0,3021, - 3022,1,0,0,0,3022,3023,1,0,0,0,3023,3025,3,226,113,0,3024,3021,1,0,0, - 0,3024,3025,1,0,0,0,3025,3030,1,0,0,0,3026,3028,5,187,0,0,3027,3026,1, - 0,0,0,3027,3028,1,0,0,0,3028,3029,1,0,0,0,3029,3031,3,190,95,0,3030,3027, - 1,0,0,0,3030,3031,1,0,0,0,3031,3033,1,0,0,0,3032,3034,5,187,0,0,3033, - 3032,1,0,0,0,3033,3034,1,0,0,0,3034,3035,1,0,0,0,3035,3036,5,10,0,0,3036, - 349,1,0,0,0,3037,3039,5,5,0,0,3038,3040,5,187,0,0,3039,3038,1,0,0,0,3039, - 3040,1,0,0,0,3040,3043,1,0,0,0,3041,3044,3,364,182,0,3042,3044,5,165, - 0,0,3043,3041,1,0,0,0,3043,3042,1,0,0,0,3044,351,1,0,0,0,3045,3050,5, - 59,0,0,3046,3048,5,187,0,0,3047,3046,1,0,0,0,3047,3048,1,0,0,0,3048,3049, - 1,0,0,0,3049,3051,3,354,177,0,3050,3047,1,0,0,0,3051,3052,1,0,0,0,3052, - 3050,1,0,0,0,3052,3053,1,0,0,0,3053,3068,1,0,0,0,3054,3056,5,59,0,0,3055, - 3057,5,187,0,0,3056,3055,1,0,0,0,3056,3057,1,0,0,0,3057,3058,1,0,0,0, - 3058,3063,3,268,134,0,3059,3061,5,187,0,0,3060,3059,1,0,0,0,3060,3061, - 1,0,0,0,3061,3062,1,0,0,0,3062,3064,3,354,177,0,3063,3060,1,0,0,0,3064, - 3065,1,0,0,0,3065,3063,1,0,0,0,3065,3066,1,0,0,0,3066,3068,1,0,0,0,3067, - 3045,1,0,0,0,3067,3054,1,0,0,0,3068,3077,1,0,0,0,3069,3071,5,187,0,0, - 3070,3069,1,0,0,0,3070,3071,1,0,0,0,3071,3072,1,0,0,0,3072,3074,5,80, - 0,0,3073,3075,5,187,0,0,3074,3073,1,0,0,0,3074,3075,1,0,0,0,3075,3076, - 1,0,0,0,3076,3078,3,268,134,0,3077,3070,1,0,0,0,3077,3078,1,0,0,0,3078, - 3080,1,0,0,0,3079,3081,5,187,0,0,3080,3079,1,0,0,0,3080,3081,1,0,0,0, - 3081,3082,1,0,0,0,3082,3083,5,81,0,0,3083,353,1,0,0,0,3084,3086,5,152, - 0,0,3085,3087,5,187,0,0,3086,3085,1,0,0,0,3086,3087,1,0,0,0,3087,3088, - 1,0,0,0,3088,3090,3,268,134,0,3089,3091,5,187,0,0,3090,3089,1,0,0,0,3090, - 3091,1,0,0,0,3091,3092,1,0,0,0,3092,3094,5,141,0,0,3093,3095,5,187,0, - 0,3094,3093,1,0,0,0,3094,3095,1,0,0,0,3095,3096,1,0,0,0,3096,3097,3,268, - 134,0,3097,355,1,0,0,0,3098,3099,3,372,186,0,3099,357,1,0,0,0,3100,3103, - 3,368,184,0,3101,3103,3,366,183,0,3102,3100,1,0,0,0,3102,3101,1,0,0,0, - 3103,359,1,0,0,0,3104,3107,5,25,0,0,3105,3108,3,372,186,0,3106,3108,5, - 174,0,0,3107,3105,1,0,0,0,3107,3106,1,0,0,0,3108,361,1,0,0,0,3109,3111, - 3,314,157,0,3110,3112,5,187,0,0,3111,3110,1,0,0,0,3111,3112,1,0,0,0,3112, - 3113,1,0,0,0,3113,3114,3,350,175,0,3114,363,1,0,0,0,3115,3116,3,372,186, - 0,3116,365,1,0,0,0,3117,3118,5,174,0,0,3118,367,1,0,0,0,3119,3120,7,9, - 0,0,3120,369,1,0,0,0,3121,3124,3,372,186,0,3122,3123,5,5,0,0,3123,3125, - 3,372,186,0,3124,3122,1,0,0,0,3124,3125,1,0,0,0,3125,371,1,0,0,0,3126, - 3132,5,183,0,0,3127,3128,5,186,0,0,3128,3132,6,186,-1,0,3129,3132,5,175, - 0,0,3130,3132,3,374,187,0,3131,3126,1,0,0,0,3131,3127,1,0,0,0,3131,3129, - 1,0,0,0,3131,3130,1,0,0,0,3132,373,1,0,0,0,3133,3134,7,10,0,0,3134,375, - 1,0,0,0,3135,3136,7,11,0,0,3136,377,1,0,0,0,3137,3138,7,12,0,0,3138,379, - 1,0,0,0,3139,3140,7,13,0,0,3140,381,1,0,0,0,537,384,388,393,397,402,405, - 409,412,440,446,453,457,461,465,468,472,476,480,485,489,491,498,502,511, - 516,526,530,534,539,552,556,564,568,572,576,584,588,592,596,611,616,622, - 626,629,632,638,642,647,650,654,657,660,664,668,674,678,683,701,712,718, - 722,729,749,753,756,759,762,765,769,774,778,788,792,797,802,807,813,817, - 821,826,833,837,841,844,861,865,869,873,877,880,883,891,896,900,904,908, - 917,921,926,930,934,938,942,944,948,952,954,962,967,971,975,979,984,990, - 994,1007,1011,1014,1017,1020,1024,1028,1031,1034,1038,1042,1048,1052, - 1056,1060,1066,1070,1074,1078,1084,1088,1093,1105,1109,1113,1118,1136, - 1143,1156,1163,1179,1183,1192,1200,1203,1213,1216,1224,1227,1233,1236, - 1242,1257,1267,1270,1274,1278,1296,1303,1310,1321,1344,1353,1359,1363, - 1368,1377,1381,1386,1392,1398,1404,1408,1412,1418,1422,1426,1432,1436, - 1440,1446,1450,1454,1458,1462,1468,1472,1476,1480,1484,1494,1500,1507, - 1512,1518,1523,1540,1546,1552,1556,1560,1569,1583,1588,1593,1597,1602, - 1608,1613,1616,1620,1624,1628,1634,1638,1643,1648,1652,1655,1657,1661, - 1665,1671,1675,1680,1684,1693,1699,1707,1711,1715,1719,1726,1730,1734, - 1738,1741,1744,1751,1757,1761,1766,1773,1776,1779,1784,1788,1792,1797, - 1801,1810,1814,1819,1833,1835,1837,1842,1852,1858,1865,1878,1882,1886, - 1890,1895,1900,1904,1908,1912,1916,1920,1926,1930,1934,1938,1943,1949, - 1952,1958,1961,1967,1971,1975,1979,1983,1988,1993,1997,2002,2005,2014, - 2023,2028,2041,2044,2052,2056,2061,2066,2070,2075,2081,2086,2093,2097, - 2101,2103,2107,2109,2113,2115,2121,2127,2131,2134,2137,2143,2146,2149, - 2153,2159,2162,2165,2169,2173,2177,2179,2183,2185,2189,2191,2195,2197, - 2203,2207,2211,2215,2219,2223,2227,2231,2235,2238,2244,2248,2252,2255, - 2260,2265,2269,2273,2276,2279,2284,2289,2292,2295,2298,2301,2304,2308, - 2312,2316,2320,2330,2333,2336,2340,2343,2346,2350,2354,2358,2362,2366, - 2370,2372,2375,2379,2383,2387,2391,2393,2399,2402,2405,2416,2429,2439, - 2449,2454,2458,2465,2469,2473,2477,2481,2489,2493,2497,2501,2507,2511, - 2517,2521,2526,2531,2535,2540,2545,2549,2555,2562,2566,2572,2579,2583, - 2589,2596,2600,2605,2613,2616,2621,2630,2634,2637,2650,2653,2658,2672, - 2676,2680,2685,2688,2692,2697,2709,2713,2717,2721,2727,2731,2735,2741, - 2745,2749,2755,2759,2763,2767,2785,2791,2795,2799,2803,2806,2812,2815, - 2819,2823,2827,2831,2835,2842,2845,2849,2855,2859,2865,2869,2873,2878, - 2882,2886,2890,2895,2898,2901,2907,2911,2915,2917,2921,2925,2929,2933, - 2936,2940,2946,2951,2953,2957,2961,2966,2970,2975,2979,2983,2987,2991, - 2996,3000,3005,3009,3013,3017,3021,3024,3027,3030,3033,3039,3043,3047, - 3052,3056,3060,3065,3067,3070,3074,3077,3080,3086,3090,3094,3102,3107, - 3111,3124,3131 + 112,114,115,127,132,134,135,138,138,140,140,143,143,145,145,147,147,150, + 152,156,156,160,165,167,167,2,0,13,13,26,29,2,0,15,15,30,33,2,0,34,44, + 171,171,3606,0,386,1,0,0,0,2,406,1,0,0,0,4,444,1,0,0,0,6,446,1,0,0,0, + 8,472,1,0,0,0,10,520,1,0,0,0,12,522,1,0,0,0,14,552,1,0,0,0,16,582,1,0, + 0,0,18,602,1,0,0,0,20,608,1,0,0,0,22,664,1,0,0,0,24,666,1,0,0,0,26,676, + 1,0,0,0,28,690,1,0,0,0,30,694,1,0,0,0,32,698,1,0,0,0,34,707,1,0,0,0,36, + 713,1,0,0,0,38,733,1,0,0,0,40,735,1,0,0,0,42,747,1,0,0,0,44,790,1,0,0, + 0,46,804,1,0,0,0,48,848,1,0,0,0,50,850,1,0,0,0,52,856,1,0,0,0,54,914, + 1,0,0,0,56,985,1,0,0,0,58,1028,1,0,0,0,60,1030,1,0,0,0,62,1050,1,0,0, + 0,64,1068,1,0,0,0,66,1086,1,0,0,0,68,1100,1,0,0,0,70,1111,1,0,0,0,72, + 1125,1,0,0,0,74,1133,1,0,0,0,76,1150,1,0,0,0,78,1167,1,0,0,0,80,1169, + 1,0,0,0,82,1176,1,0,0,0,84,1189,1,0,0,0,86,1200,1,0,0,0,88,1220,1,0,0, + 0,90,1231,1,0,0,0,92,1233,1,0,0,0,94,1246,1,0,0,0,96,1250,1,0,0,0,98, + 1274,1,0,0,0,100,1276,1,0,0,0,102,1286,1,0,0,0,104,1301,1,0,0,0,106,1303, + 1,0,0,0,108,1317,1,0,0,0,110,1321,1,0,0,0,112,1330,1,0,0,0,114,1336,1, + 0,0,0,116,1344,1,0,0,0,118,1353,1,0,0,0,120,1362,1,0,0,0,122,1393,1,0, + 0,0,124,1397,1,0,0,0,126,1411,1,0,0,0,128,1415,1,0,0,0,130,1429,1,0,0, + 0,132,1440,1,0,0,0,134,1456,1,0,0,0,136,1470,1,0,0,0,138,1484,1,0,0,0, + 140,1506,1,0,0,0,142,1534,1,0,0,0,144,1543,1,0,0,0,146,1550,1,0,0,0,148, + 1558,1,0,0,0,150,1560,1,0,0,0,152,1565,1,0,0,0,154,1580,1,0,0,0,156,1586, + 1,0,0,0,158,1588,1,0,0,0,160,1600,1,0,0,0,162,1611,1,0,0,0,164,1615,1, + 0,0,0,166,1619,1,0,0,0,168,1642,1,0,0,0,170,1656,1,0,0,0,172,1660,1,0, + 0,0,174,1697,1,0,0,0,176,1703,1,0,0,0,178,1715,1,0,0,0,180,1733,1,0,0, + 0,182,1739,1,0,0,0,184,1741,1,0,0,0,186,1791,1,0,0,0,188,1795,1,0,0,0, + 190,1809,1,0,0,0,192,1828,1,0,0,0,194,1843,1,0,0,0,196,1859,1,0,0,0,198, + 1880,1,0,0,0,200,1890,1,0,0,0,202,1896,1,0,0,0,204,1918,1,0,0,0,206,1952, + 1,0,0,0,208,1954,1,0,0,0,210,1966,1,0,0,0,212,1986,1,0,0,0,214,1994,1, + 0,0,0,216,2001,1,0,0,0,218,2045,1,0,0,0,220,2054,1,0,0,0,222,2056,1,0, + 0,0,224,2071,1,0,0,0,226,2075,1,0,0,0,228,2079,1,0,0,0,230,2086,1,0,0, + 0,232,2090,1,0,0,0,234,2115,1,0,0,0,236,2117,1,0,0,0,238,2133,1,0,0,0, + 240,2135,1,0,0,0,242,2159,1,0,0,0,244,2209,1,0,0,0,246,2211,1,0,0,0,248, + 2241,1,0,0,0,250,2282,1,0,0,0,252,2303,1,0,0,0,254,2327,1,0,0,0,256,2370, + 1,0,0,0,258,2386,1,0,0,0,260,2388,1,0,0,0,262,2437,1,0,0,0,264,2449,1, + 0,0,0,266,2451,1,0,0,0,268,2453,1,0,0,0,270,2458,1,0,0,0,272,2460,1,0, + 0,0,274,2462,1,0,0,0,276,2472,1,0,0,0,278,2482,1,0,0,0,280,2498,1,0,0, + 0,282,2551,1,0,0,0,284,2553,1,0,0,0,286,2555,1,0,0,0,288,2569,1,0,0,0, + 290,2583,1,0,0,0,292,2598,1,0,0,0,294,2600,1,0,0,0,296,2615,1,0,0,0,298, + 2617,1,0,0,0,300,2632,1,0,0,0,302,2634,1,0,0,0,304,2648,1,0,0,0,306,2677, + 1,0,0,0,308,2690,1,0,0,0,310,2698,1,0,0,0,312,2712,1,0,0,0,314,2720,1, + 0,0,0,316,2730,1,0,0,0,318,2749,1,0,0,0,320,2807,1,0,0,0,322,2809,1,0, + 0,0,324,2813,1,0,0,0,326,2825,1,0,0,0,328,2827,1,0,0,0,330,2829,1,0,0, + 0,332,2850,1,0,0,0,334,2857,1,0,0,0,336,2882,1,0,0,0,338,2893,1,0,0,0, + 340,2980,1,0,0,0,342,2982,1,0,0,0,344,2997,1,0,0,0,346,2999,1,0,0,0,348, + 3036,1,0,0,0,350,3038,1,0,0,0,352,3047,1,0,0,0,354,3077,1,0,0,0,356,3107, + 1,0,0,0,358,3124,1,0,0,0,360,3138,1,0,0,0,362,3142,1,0,0,0,364,3144,1, + 0,0,0,366,3149,1,0,0,0,368,3155,1,0,0,0,370,3157,1,0,0,0,372,3159,1,0, + 0,0,374,3161,1,0,0,0,376,3171,1,0,0,0,378,3173,1,0,0,0,380,3175,1,0,0, + 0,382,3177,1,0,0,0,384,3179,1,0,0,0,386,397,3,2,1,0,387,389,5,188,0,0, + 388,387,1,0,0,0,388,389,1,0,0,0,389,390,1,0,0,0,390,392,5,1,0,0,391,393, + 5,188,0,0,392,391,1,0,0,0,392,393,1,0,0,0,393,394,1,0,0,0,394,396,3,2, + 1,0,395,388,1,0,0,0,396,399,1,0,0,0,397,395,1,0,0,0,397,398,1,0,0,0,398, + 401,1,0,0,0,399,397,1,0,0,0,400,402,5,188,0,0,401,400,1,0,0,0,401,402, + 1,0,0,0,402,403,1,0,0,0,403,404,5,0,0,1,404,1,1,0,0,0,405,407,3,148,74, + 0,406,405,1,0,0,0,406,407,1,0,0,0,407,409,1,0,0,0,408,410,5,188,0,0,409, + 408,1,0,0,0,409,410,1,0,0,0,410,411,1,0,0,0,411,416,3,4,2,0,412,414,5, + 188,0,0,413,412,1,0,0,0,413,414,1,0,0,0,414,415,1,0,0,0,415,417,5,1,0, + 0,416,413,1,0,0,0,416,417,1,0,0,0,417,3,1,0,0,0,418,445,3,166,83,0,419, + 445,3,36,18,0,420,445,3,82,41,0,421,445,3,84,42,0,422,445,3,52,26,0,423, + 445,3,54,27,0,424,445,3,56,28,0,425,445,3,74,37,0,426,445,3,76,38,0,427, + 445,3,98,49,0,428,445,3,102,51,0,429,445,3,6,3,0,430,445,3,12,6,0,431, + 445,3,14,7,0,432,445,3,38,19,0,433,445,3,42,21,0,434,445,3,40,20,0,435, + 445,3,154,77,0,436,445,3,156,78,0,437,445,3,16,8,0,438,445,3,18,9,0,439, + 445,3,20,10,0,440,445,3,28,14,0,441,445,3,30,15,0,442,445,3,32,16,0,443, + 445,3,34,17,0,444,418,1,0,0,0,444,419,1,0,0,0,444,420,1,0,0,0,444,421, + 1,0,0,0,444,422,1,0,0,0,444,423,1,0,0,0,444,424,1,0,0,0,444,425,1,0,0, + 0,444,426,1,0,0,0,444,427,1,0,0,0,444,428,1,0,0,0,444,429,1,0,0,0,444, + 430,1,0,0,0,444,431,1,0,0,0,444,432,1,0,0,0,444,433,1,0,0,0,444,434,1, + 0,0,0,444,435,1,0,0,0,444,436,1,0,0,0,444,437,1,0,0,0,444,438,1,0,0,0, + 444,439,1,0,0,0,444,440,1,0,0,0,444,441,1,0,0,0,444,442,1,0,0,0,444,443, + 1,0,0,0,445,5,1,0,0,0,446,447,5,67,0,0,447,448,5,188,0,0,448,450,3,374, + 187,0,449,451,3,8,4,0,450,449,1,0,0,0,450,451,1,0,0,0,451,452,1,0,0,0, + 452,453,5,188,0,0,453,454,5,88,0,0,454,455,5,188,0,0,455,469,3,10,5,0, + 456,458,5,188,0,0,457,456,1,0,0,0,457,458,1,0,0,0,458,459,1,0,0,0,459, + 461,5,2,0,0,460,462,5,188,0,0,461,460,1,0,0,0,461,462,1,0,0,0,462,463, + 1,0,0,0,463,465,3,26,13,0,464,466,5,188,0,0,465,464,1,0,0,0,465,466,1, + 0,0,0,466,467,1,0,0,0,467,468,5,3,0,0,468,470,1,0,0,0,469,457,1,0,0,0, + 469,470,1,0,0,0,470,7,1,0,0,0,471,473,5,188,0,0,472,471,1,0,0,0,472,473, + 1,0,0,0,473,474,1,0,0,0,474,476,5,2,0,0,475,477,5,188,0,0,476,475,1,0, + 0,0,476,477,1,0,0,0,477,495,1,0,0,0,478,489,3,374,187,0,479,481,5,188, + 0,0,480,479,1,0,0,0,480,481,1,0,0,0,481,482,1,0,0,0,482,484,5,4,0,0,483, + 485,5,188,0,0,484,483,1,0,0,0,484,485,1,0,0,0,485,486,1,0,0,0,486,488, + 3,374,187,0,487,480,1,0,0,0,488,491,1,0,0,0,489,487,1,0,0,0,489,490,1, + 0,0,0,490,493,1,0,0,0,491,489,1,0,0,0,492,494,5,188,0,0,493,492,1,0,0, + 0,493,494,1,0,0,0,494,496,1,0,0,0,495,478,1,0,0,0,495,496,1,0,0,0,496, + 497,1,0,0,0,497,498,5,3,0,0,498,9,1,0,0,0,499,521,3,48,24,0,500,502,5, + 2,0,0,501,503,5,188,0,0,502,501,1,0,0,0,502,503,1,0,0,0,503,504,1,0,0, + 0,504,506,3,166,83,0,505,507,5,188,0,0,506,505,1,0,0,0,506,507,1,0,0, + 0,507,508,1,0,0,0,508,509,5,3,0,0,509,521,1,0,0,0,510,521,3,364,182,0, + 511,521,3,360,180,0,512,513,3,360,180,0,513,515,5,5,0,0,514,516,5,188, + 0,0,515,514,1,0,0,0,515,516,1,0,0,0,516,517,1,0,0,0,517,518,3,374,187, + 0,518,521,1,0,0,0,519,521,3,340,170,0,520,499,1,0,0,0,520,500,1,0,0,0, + 520,510,1,0,0,0,520,511,1,0,0,0,520,512,1,0,0,0,520,519,1,0,0,0,521,11, + 1,0,0,0,522,523,5,67,0,0,523,524,5,188,0,0,524,525,3,374,187,0,525,526, + 5,188,0,0,526,527,5,88,0,0,527,528,5,188,0,0,528,530,5,2,0,0,529,531, + 5,188,0,0,530,529,1,0,0,0,530,531,1,0,0,0,531,532,1,0,0,0,532,543,5,173, + 0,0,533,535,5,188,0,0,534,533,1,0,0,0,534,535,1,0,0,0,535,536,1,0,0,0, + 536,538,5,4,0,0,537,539,5,188,0,0,538,537,1,0,0,0,538,539,1,0,0,0,539, + 540,1,0,0,0,540,542,5,173,0,0,541,534,1,0,0,0,542,545,1,0,0,0,543,541, + 1,0,0,0,543,544,1,0,0,0,544,546,1,0,0,0,545,543,1,0,0,0,546,547,5,3,0, + 0,547,548,5,188,0,0,548,549,5,57,0,0,549,550,5,188,0,0,550,551,5,62,0, + 0,551,13,1,0,0,0,552,553,5,67,0,0,553,554,5,188,0,0,554,556,5,2,0,0,555, + 557,5,188,0,0,556,555,1,0,0,0,556,557,1,0,0,0,557,558,1,0,0,0,558,560, + 3,166,83,0,559,561,5,188,0,0,560,559,1,0,0,0,560,561,1,0,0,0,561,562, + 1,0,0,0,562,563,5,3,0,0,563,564,5,188,0,0,564,565,5,143,0,0,565,566,5, + 188,0,0,566,580,5,173,0,0,567,569,5,188,0,0,568,567,1,0,0,0,568,569,1, + 0,0,0,569,570,1,0,0,0,570,572,5,2,0,0,571,573,5,188,0,0,572,571,1,0,0, + 0,572,573,1,0,0,0,573,574,1,0,0,0,574,576,3,26,13,0,575,577,5,188,0,0, + 576,575,1,0,0,0,576,577,1,0,0,0,577,578,1,0,0,0,578,579,5,3,0,0,579,581, + 1,0,0,0,580,568,1,0,0,0,580,581,1,0,0,0,581,15,1,0,0,0,582,583,5,85,0, + 0,583,584,5,188,0,0,584,585,5,71,0,0,585,586,5,188,0,0,586,600,5,173, + 0,0,587,589,5,188,0,0,588,587,1,0,0,0,588,589,1,0,0,0,589,590,1,0,0,0, + 590,592,5,2,0,0,591,593,5,188,0,0,592,591,1,0,0,0,592,593,1,0,0,0,593, + 594,1,0,0,0,594,596,3,26,13,0,595,597,5,188,0,0,596,595,1,0,0,0,596,597, + 1,0,0,0,597,598,1,0,0,0,598,599,5,3,0,0,599,601,1,0,0,0,600,588,1,0,0, + 0,600,601,1,0,0,0,601,17,1,0,0,0,602,603,5,96,0,0,603,604,5,188,0,0,604, + 605,5,71,0,0,605,606,5,188,0,0,606,607,5,173,0,0,607,19,1,0,0,0,608,609, + 5,55,0,0,609,610,5,188,0,0,610,615,5,173,0,0,611,612,5,188,0,0,612,613, + 5,52,0,0,613,614,5,188,0,0,614,616,3,374,187,0,615,611,1,0,0,0,615,616, + 1,0,0,0,616,617,1,0,0,0,617,618,5,188,0,0,618,620,5,2,0,0,619,621,5,188, + 0,0,620,619,1,0,0,0,620,621,1,0,0,0,621,622,1,0,0,0,622,623,5,72,0,0, + 623,624,5,188,0,0,624,633,3,376,188,0,625,627,5,188,0,0,626,625,1,0,0, + 0,626,627,1,0,0,0,627,628,1,0,0,0,628,630,5,4,0,0,629,631,5,188,0,0,630, + 629,1,0,0,0,630,631,1,0,0,0,631,632,1,0,0,0,632,634,3,26,13,0,633,626, + 1,0,0,0,633,634,1,0,0,0,634,636,1,0,0,0,635,637,5,188,0,0,636,635,1,0, + 0,0,636,637,1,0,0,0,637,638,1,0,0,0,638,639,5,3,0,0,639,21,1,0,0,0,640, + 654,3,376,188,0,641,643,5,188,0,0,642,641,1,0,0,0,642,643,1,0,0,0,643, + 644,1,0,0,0,644,646,5,6,0,0,645,647,5,188,0,0,646,645,1,0,0,0,646,647, + 1,0,0,0,647,655,1,0,0,0,648,650,5,188,0,0,649,648,1,0,0,0,650,653,1,0, + 0,0,651,649,1,0,0,0,651,652,1,0,0,0,652,655,1,0,0,0,653,651,1,0,0,0,654, + 642,1,0,0,0,654,651,1,0,0,0,655,656,1,0,0,0,656,661,3,326,163,0,657,659, + 5,188,0,0,658,657,1,0,0,0,658,659,1,0,0,0,659,660,1,0,0,0,660,662,3,24, + 12,0,661,658,1,0,0,0,661,662,1,0,0,0,662,665,1,0,0,0,663,665,3,376,188, + 0,664,640,1,0,0,0,664,663,1,0,0,0,665,23,1,0,0,0,666,668,5,2,0,0,667, + 669,5,188,0,0,668,667,1,0,0,0,668,669,1,0,0,0,669,670,1,0,0,0,670,672, + 3,376,188,0,671,673,5,188,0,0,672,671,1,0,0,0,672,673,1,0,0,0,673,674, + 1,0,0,0,674,675,5,3,0,0,675,25,1,0,0,0,676,687,3,22,11,0,677,679,5,188, + 0,0,678,677,1,0,0,0,678,679,1,0,0,0,679,680,1,0,0,0,680,682,5,4,0,0,681, + 683,5,188,0,0,682,681,1,0,0,0,682,683,1,0,0,0,683,684,1,0,0,0,684,686, + 3,22,11,0,685,678,1,0,0,0,686,689,1,0,0,0,687,685,1,0,0,0,687,688,1,0, + 0,0,688,27,1,0,0,0,689,687,1,0,0,0,690,691,5,77,0,0,691,692,5,188,0,0, + 692,693,3,374,187,0,693,29,1,0,0,0,694,695,5,152,0,0,695,696,5,188,0, + 0,696,697,3,374,187,0,697,31,1,0,0,0,698,699,5,69,0,0,699,700,5,188,0, + 0,700,701,5,92,0,0,701,702,5,188,0,0,702,705,3,374,187,0,703,704,5,188, + 0,0,704,706,5,46,0,0,705,703,1,0,0,0,705,706,1,0,0,0,706,33,1,0,0,0,707, + 708,5,152,0,0,708,709,5,188,0,0,709,710,5,92,0,0,710,711,5,188,0,0,711, + 712,3,374,187,0,712,35,1,0,0,0,713,716,5,50,0,0,714,715,5,188,0,0,715, + 717,3,374,187,0,716,714,1,0,0,0,716,717,1,0,0,0,717,37,1,0,0,0,718,719, + 5,58,0,0,719,720,5,188,0,0,720,722,3,376,188,0,721,723,5,188,0,0,722, + 721,1,0,0,0,722,723,1,0,0,0,723,724,1,0,0,0,724,726,5,6,0,0,725,727,5, + 188,0,0,726,725,1,0,0,0,726,727,1,0,0,0,727,728,1,0,0,0,728,729,3,272, + 136,0,729,734,1,0,0,0,730,731,5,58,0,0,731,732,5,188,0,0,732,734,3,340, + 170,0,733,718,1,0,0,0,733,730,1,0,0,0,734,39,1,0,0,0,735,736,5,63,0,0, + 736,737,5,188,0,0,737,738,5,119,0,0,738,739,5,188,0,0,739,740,5,141,0, + 0,740,741,5,188,0,0,741,742,3,374,187,0,742,743,5,188,0,0,743,744,5,102, + 0,0,744,745,5,188,0,0,745,746,5,173,0,0,746,41,1,0,0,0,747,748,5,69,0, + 0,748,749,5,188,0,0,749,750,5,108,0,0,750,751,5,188,0,0,751,753,3,342, + 171,0,752,754,5,188,0,0,753,752,1,0,0,0,753,754,1,0,0,0,754,755,1,0,0, + 0,755,757,5,2,0,0,756,758,5,188,0,0,757,756,1,0,0,0,757,758,1,0,0,0,758, + 760,1,0,0,0,759,761,3,44,22,0,760,759,1,0,0,0,760,761,1,0,0,0,761,763, + 1,0,0,0,762,764,5,188,0,0,763,762,1,0,0,0,763,764,1,0,0,0,764,766,1,0, + 0,0,765,767,3,46,23,0,766,765,1,0,0,0,766,767,1,0,0,0,767,778,1,0,0,0, + 768,770,5,188,0,0,769,768,1,0,0,0,769,770,1,0,0,0,770,771,1,0,0,0,771, + 773,5,4,0,0,772,774,5,188,0,0,773,772,1,0,0,0,773,774,1,0,0,0,774,775, + 1,0,0,0,775,777,3,46,23,0,776,769,1,0,0,0,777,780,1,0,0,0,778,776,1,0, + 0,0,778,779,1,0,0,0,779,782,1,0,0,0,780,778,1,0,0,0,781,783,5,188,0,0, + 782,781,1,0,0,0,782,783,1,0,0,0,783,784,1,0,0,0,784,785,5,3,0,0,785,786, + 5,188,0,0,786,787,5,52,0,0,787,788,5,188,0,0,788,789,3,272,136,0,789, + 43,1,0,0,0,790,801,3,376,188,0,791,793,5,188,0,0,792,791,1,0,0,0,792, + 793,1,0,0,0,793,794,1,0,0,0,794,796,5,4,0,0,795,797,5,188,0,0,796,795, + 1,0,0,0,796,797,1,0,0,0,797,798,1,0,0,0,798,800,3,376,188,0,799,792,1, + 0,0,0,800,803,1,0,0,0,801,799,1,0,0,0,801,802,1,0,0,0,802,45,1,0,0,0, + 803,801,1,0,0,0,804,806,3,376,188,0,805,807,5,188,0,0,806,805,1,0,0,0, + 806,807,1,0,0,0,807,808,1,0,0,0,808,809,5,169,0,0,809,811,5,6,0,0,810, + 812,5,188,0,0,811,810,1,0,0,0,811,812,1,0,0,0,812,813,1,0,0,0,813,814, + 3,326,163,0,814,47,1,0,0,0,815,817,5,7,0,0,816,818,5,188,0,0,817,816, + 1,0,0,0,817,818,1,0,0,0,818,819,1,0,0,0,819,830,5,173,0,0,820,822,5,188, + 0,0,821,820,1,0,0,0,821,822,1,0,0,0,822,823,1,0,0,0,823,825,5,4,0,0,824, + 826,5,188,0,0,825,824,1,0,0,0,825,826,1,0,0,0,826,827,1,0,0,0,827,829, + 5,173,0,0,828,821,1,0,0,0,829,832,1,0,0,0,830,828,1,0,0,0,830,831,1,0, + 0,0,831,833,1,0,0,0,832,830,1,0,0,0,833,849,5,8,0,0,834,849,5,173,0,0, + 835,837,5,91,0,0,836,838,5,188,0,0,837,836,1,0,0,0,837,838,1,0,0,0,838, + 839,1,0,0,0,839,841,5,2,0,0,840,842,5,188,0,0,841,840,1,0,0,0,841,842, + 1,0,0,0,842,843,1,0,0,0,843,845,5,173,0,0,844,846,5,188,0,0,845,844,1, + 0,0,0,845,846,1,0,0,0,846,847,1,0,0,0,847,849,5,3,0,0,848,815,1,0,0,0, + 848,834,1,0,0,0,848,835,1,0,0,0,849,49,1,0,0,0,850,851,5,98,0,0,851,852, + 5,188,0,0,852,853,5,116,0,0,853,854,5,188,0,0,854,855,5,83,0,0,855,51, + 1,0,0,0,856,857,5,69,0,0,857,858,5,188,0,0,858,859,5,115,0,0,859,860, + 5,188,0,0,860,861,5,141,0,0,861,865,5,188,0,0,862,863,3,50,25,0,863,864, + 5,188,0,0,864,866,1,0,0,0,865,862,1,0,0,0,865,866,1,0,0,0,866,867,1,0, + 0,0,867,895,3,374,187,0,868,870,5,188,0,0,869,868,1,0,0,0,869,870,1,0, + 0,0,870,871,1,0,0,0,871,873,5,2,0,0,872,874,5,188,0,0,873,872,1,0,0,0, + 873,874,1,0,0,0,874,875,1,0,0,0,875,877,3,128,64,0,876,878,5,188,0,0, + 877,876,1,0,0,0,877,878,1,0,0,0,878,884,1,0,0,0,879,881,5,4,0,0,880,882, + 5,188,0,0,881,880,1,0,0,0,881,882,1,0,0,0,882,883,1,0,0,0,883,885,3,132, + 66,0,884,879,1,0,0,0,884,885,1,0,0,0,885,887,1,0,0,0,886,888,5,188,0, + 0,887,886,1,0,0,0,887,888,1,0,0,0,888,889,1,0,0,0,889,890,5,3,0,0,890, + 896,1,0,0,0,891,892,5,188,0,0,892,893,5,52,0,0,893,894,5,188,0,0,894, + 896,3,166,83,0,895,869,1,0,0,0,895,891,1,0,0,0,896,912,1,0,0,0,897,898, + 5,188,0,0,898,900,5,155,0,0,899,901,5,188,0,0,900,899,1,0,0,0,900,901, + 1,0,0,0,901,902,1,0,0,0,902,904,5,2,0,0,903,905,5,188,0,0,904,903,1,0, + 0,0,904,905,1,0,0,0,905,906,1,0,0,0,906,908,3,26,13,0,907,909,5,188,0, + 0,908,907,1,0,0,0,908,909,1,0,0,0,909,910,1,0,0,0,910,911,5,3,0,0,911, + 913,1,0,0,0,912,897,1,0,0,0,912,913,1,0,0,0,913,53,1,0,0,0,914,915,5, + 69,0,0,915,916,5,188,0,0,916,917,5,129,0,0,917,918,5,188,0,0,918,921, + 5,141,0,0,919,920,5,188,0,0,920,922,5,93,0,0,921,919,1,0,0,0,921,922, + 1,0,0,0,922,925,1,0,0,0,923,924,5,188,0,0,924,926,3,50,25,0,925,923,1, + 0,0,0,925,926,1,0,0,0,926,927,1,0,0,0,927,928,5,188,0,0,928,930,3,374, + 187,0,929,931,5,188,0,0,930,929,1,0,0,0,930,931,1,0,0,0,931,932,1,0,0, + 0,932,934,5,2,0,0,933,935,5,188,0,0,934,933,1,0,0,0,934,935,1,0,0,0,935, + 936,1,0,0,0,936,938,3,66,33,0,937,939,5,188,0,0,938,937,1,0,0,0,938,939, + 1,0,0,0,939,966,1,0,0,0,940,942,5,4,0,0,941,943,5,188,0,0,942,941,1,0, + 0,0,942,943,1,0,0,0,943,944,1,0,0,0,944,946,3,128,64,0,945,947,5,188, + 0,0,946,945,1,0,0,0,946,947,1,0,0,0,947,949,1,0,0,0,948,940,1,0,0,0,948, + 949,1,0,0,0,949,958,1,0,0,0,950,952,5,4,0,0,951,953,5,188,0,0,952,951, + 1,0,0,0,952,953,1,0,0,0,953,954,1,0,0,0,954,956,3,376,188,0,955,957,5, + 188,0,0,956,955,1,0,0,0,956,957,1,0,0,0,957,959,1,0,0,0,958,950,1,0,0, + 0,958,959,1,0,0,0,959,960,1,0,0,0,960,967,5,3,0,0,961,962,5,3,0,0,962, + 963,5,188,0,0,963,964,5,52,0,0,964,965,5,188,0,0,965,967,3,166,83,0,966, + 948,1,0,0,0,966,961,1,0,0,0,967,983,1,0,0,0,968,969,5,188,0,0,969,971, + 5,155,0,0,970,972,5,188,0,0,971,970,1,0,0,0,971,972,1,0,0,0,972,973,1, + 0,0,0,973,975,5,2,0,0,974,976,5,188,0,0,975,974,1,0,0,0,975,976,1,0,0, + 0,976,977,1,0,0,0,977,979,3,26,13,0,978,980,5,188,0,0,979,978,1,0,0,0, + 979,980,1,0,0,0,980,981,1,0,0,0,981,982,5,3,0,0,982,984,1,0,0,0,983,968, + 1,0,0,0,983,984,1,0,0,0,984,55,1,0,0,0,985,988,5,69,0,0,986,987,5,188, + 0,0,987,989,3,376,188,0,988,986,1,0,0,0,988,989,1,0,0,0,989,990,1,0,0, + 0,990,991,5,188,0,0,991,994,5,97,0,0,992,993,5,188,0,0,993,995,3,374, + 187,0,994,992,1,0,0,0,994,995,1,0,0,0,995,998,1,0,0,0,996,997,5,188,0, + 0,997,999,3,50,25,0,998,996,1,0,0,0,998,999,1,0,0,0,999,1000,1,0,0,0, + 1000,1001,5,188,0,0,1001,1002,5,90,0,0,1002,1003,5,188,0,0,1003,1004, + 3,58,29,0,1004,1005,5,188,0,0,1005,1006,5,119,0,0,1006,1007,5,188,0,0, + 1007,1024,3,64,32,0,1008,1009,5,188,0,0,1009,1011,5,121,0,0,1010,1012, + 5,188,0,0,1011,1010,1,0,0,0,1011,1012,1,0,0,0,1012,1013,1,0,0,0,1013, + 1015,5,9,0,0,1014,1016,5,188,0,0,1015,1014,1,0,0,0,1015,1016,1,0,0,0, + 1016,1018,1,0,0,0,1017,1019,3,26,13,0,1018,1017,1,0,0,0,1018,1019,1,0, + 0,0,1019,1021,1,0,0,0,1020,1022,5,188,0,0,1021,1020,1,0,0,0,1021,1022, + 1,0,0,0,1022,1023,1,0,0,0,1023,1025,5,10,0,0,1024,1008,1,0,0,0,1024,1025, + 1,0,0,0,1025,57,1,0,0,0,1026,1029,3,60,30,0,1027,1029,3,62,31,0,1028, + 1026,1,0,0,0,1028,1027,1,0,0,0,1029,59,1,0,0,0,1030,1032,5,2,0,0,1031, + 1033,5,188,0,0,1032,1031,1,0,0,0,1032,1033,1,0,0,0,1033,1035,1,0,0,0, + 1034,1036,3,360,180,0,1035,1034,1,0,0,0,1035,1036,1,0,0,0,1036,1038,1, + 0,0,0,1037,1039,5,188,0,0,1038,1037,1,0,0,0,1038,1039,1,0,0,0,1039,1040, + 1,0,0,0,1040,1042,5,169,0,0,1041,1043,5,188,0,0,1042,1041,1,0,0,0,1042, + 1043,1,0,0,0,1043,1044,1,0,0,0,1044,1046,3,268,134,0,1045,1047,5,188, + 0,0,1046,1045,1,0,0,0,1046,1047,1,0,0,0,1047,1048,1,0,0,0,1048,1049,5, + 3,0,0,1049,61,1,0,0,0,1050,1052,5,2,0,0,1051,1053,5,188,0,0,1052,1051, + 1,0,0,0,1052,1053,1,0,0,0,1053,1054,1,0,0,0,1054,1056,5,3,0,0,1055,1057, + 5,188,0,0,1056,1055,1,0,0,0,1056,1057,1,0,0,0,1057,1058,1,0,0,0,1058, + 1060,3,244,122,0,1059,1061,5,188,0,0,1060,1059,1,0,0,0,1060,1061,1,0, + 0,0,1061,1062,1,0,0,0,1062,1064,5,2,0,0,1063,1065,5,188,0,0,1064,1063, + 1,0,0,0,1064,1065,1,0,0,0,1065,1066,1,0,0,0,1066,1067,5,3,0,0,1067,63, + 1,0,0,0,1068,1070,5,2,0,0,1069,1071,5,188,0,0,1070,1069,1,0,0,0,1070, + 1071,1,0,0,0,1071,1072,1,0,0,0,1072,1074,3,360,180,0,1073,1075,5,188, + 0,0,1074,1073,1,0,0,0,1074,1075,1,0,0,0,1075,1076,1,0,0,0,1076,1078,5, + 5,0,0,1077,1079,5,188,0,0,1078,1077,1,0,0,0,1078,1079,1,0,0,0,1079,1080, + 1,0,0,0,1080,1082,3,368,184,0,1081,1083,5,188,0,0,1082,1081,1,0,0,0,1082, + 1083,1,0,0,0,1083,1084,1,0,0,0,1084,1085,5,3,0,0,1085,65,1,0,0,0,1086, + 1097,3,68,34,0,1087,1089,5,188,0,0,1088,1087,1,0,0,0,1088,1089,1,0,0, + 0,1089,1090,1,0,0,0,1090,1092,5,4,0,0,1091,1093,5,188,0,0,1092,1091,1, + 0,0,0,1092,1093,1,0,0,0,1093,1094,1,0,0,0,1094,1096,3,68,34,0,1095,1088, + 1,0,0,0,1096,1099,1,0,0,0,1097,1095,1,0,0,0,1097,1098,1,0,0,0,1098,67, + 1,0,0,0,1099,1097,1,0,0,0,1100,1101,5,88,0,0,1101,1102,5,188,0,0,1102, + 1103,3,374,187,0,1103,1104,5,188,0,0,1104,1105,5,143,0,0,1105,1106,5, + 188,0,0,1106,1109,3,374,187,0,1107,1108,5,188,0,0,1108,1110,3,376,188, + 0,1109,1107,1,0,0,0,1109,1110,1,0,0,0,1110,69,1,0,0,0,1111,1122,3,72, + 36,0,1112,1114,5,188,0,0,1113,1112,1,0,0,0,1113,1114,1,0,0,0,1114,1115, + 1,0,0,0,1115,1117,5,4,0,0,1116,1118,5,188,0,0,1117,1116,1,0,0,0,1117, + 1118,1,0,0,0,1118,1119,1,0,0,0,1119,1121,3,72,36,0,1120,1113,1,0,0,0, + 1121,1124,1,0,0,0,1122,1120,1,0,0,0,1122,1123,1,0,0,0,1123,71,1,0,0,0, + 1124,1122,1,0,0,0,1125,1126,5,88,0,0,1126,1127,5,188,0,0,1127,1128,3, + 374,187,0,1128,1129,5,188,0,0,1129,1130,5,143,0,0,1130,1131,5,188,0,0, + 1131,1132,3,374,187,0,1132,73,1,0,0,0,1133,1134,5,69,0,0,1134,1135,5, + 188,0,0,1135,1136,5,134,0,0,1136,1140,5,188,0,0,1137,1138,3,50,25,0,1138, + 1139,5,188,0,0,1139,1141,1,0,0,0,1140,1137,1,0,0,0,1140,1141,1,0,0,0, + 1141,1142,1,0,0,0,1142,1147,3,374,187,0,1143,1144,5,188,0,0,1144,1146, + 3,78,39,0,1145,1143,1,0,0,0,1146,1149,1,0,0,0,1147,1145,1,0,0,0,1147, + 1148,1,0,0,0,1148,75,1,0,0,0,1149,1147,1,0,0,0,1150,1151,5,69,0,0,1151, + 1152,5,188,0,0,1152,1153,5,147,0,0,1153,1154,5,188,0,0,1154,1155,3,374, + 187,0,1155,1156,5,188,0,0,1156,1157,5,52,0,0,1157,1158,5,188,0,0,1158, + 1160,3,142,71,0,1159,1161,5,188,0,0,1160,1159,1,0,0,0,1160,1161,1,0,0, + 0,1161,77,1,0,0,0,1162,1168,3,86,43,0,1163,1168,3,88,44,0,1164,1168,3, + 90,45,0,1165,1168,3,92,46,0,1166,1168,3,94,47,0,1167,1162,1,0,0,0,1167, + 1163,1,0,0,0,1167,1164,1,0,0,0,1167,1165,1,0,0,0,1167,1166,1,0,0,0,1168, + 79,1,0,0,0,1169,1170,5,188,0,0,1170,1171,5,155,0,0,1171,1172,5,188,0, + 0,1172,1173,5,162,0,0,1173,1174,5,188,0,0,1174,1175,5,173,0,0,1175,81, + 1,0,0,0,1176,1177,5,69,0,0,1177,1178,5,188,0,0,1178,1179,5,161,0,0,1179, + 1183,5,188,0,0,1180,1181,3,50,25,0,1181,1182,5,188,0,0,1182,1184,1,0, + 0,0,1183,1180,1,0,0,0,1183,1184,1,0,0,0,1184,1185,1,0,0,0,1185,1187,3, + 360,180,0,1186,1188,3,80,40,0,1187,1186,1,0,0,0,1187,1188,1,0,0,0,1188, + 83,1,0,0,0,1189,1190,5,69,0,0,1190,1191,5,188,0,0,1191,1192,5,163,0,0, + 1192,1196,5,188,0,0,1193,1194,3,50,25,0,1194,1195,5,188,0,0,1195,1197, + 1,0,0,0,1196,1193,1,0,0,0,1196,1197,1,0,0,0,1197,1198,1,0,0,0,1198,1199, + 3,360,180,0,1199,85,1,0,0,0,1200,1201,5,100,0,0,1201,1204,5,188,0,0,1202, + 1203,5,57,0,0,1203,1205,5,188,0,0,1204,1202,1,0,0,0,1204,1205,1,0,0,0, + 1205,1207,1,0,0,0,1206,1208,5,171,0,0,1207,1206,1,0,0,0,1207,1208,1,0, + 0,0,1208,1209,1,0,0,0,1209,1210,3,370,185,0,1210,87,1,0,0,0,1211,1212, + 5,114,0,0,1212,1213,5,188,0,0,1213,1221,5,112,0,0,1214,1215,5,112,0,0, + 1215,1217,5,188,0,0,1216,1218,5,171,0,0,1217,1216,1,0,0,0,1217,1218,1, + 0,0,0,1218,1219,1,0,0,0,1219,1221,3,370,185,0,1220,1211,1,0,0,0,1220, + 1214,1,0,0,0,1221,89,1,0,0,0,1222,1223,5,114,0,0,1223,1224,5,188,0,0, + 1224,1232,5,110,0,0,1225,1226,5,110,0,0,1226,1228,5,188,0,0,1227,1229, + 5,171,0,0,1228,1227,1,0,0,0,1228,1229,1,0,0,0,1229,1230,1,0,0,0,1230, + 1232,3,370,185,0,1231,1222,1,0,0,0,1231,1225,1,0,0,0,1232,91,1,0,0,0, + 1233,1234,5,138,0,0,1234,1237,5,188,0,0,1235,1236,5,155,0,0,1236,1238, + 5,188,0,0,1237,1235,1,0,0,0,1237,1238,1,0,0,0,1238,1240,1,0,0,0,1239, + 1241,5,171,0,0,1240,1239,1,0,0,0,1240,1241,1,0,0,0,1241,1242,1,0,0,0, + 1242,1243,3,370,185,0,1243,93,1,0,0,0,1244,1245,5,114,0,0,1245,1247,5, + 188,0,0,1246,1244,1,0,0,0,1246,1247,1,0,0,0,1247,1248,1,0,0,0,1248,1249, + 5,70,0,0,1249,95,1,0,0,0,1250,1251,5,98,0,0,1251,1252,5,188,0,0,1252, + 1253,5,83,0,0,1253,97,1,0,0,0,1254,1255,5,79,0,0,1255,1256,5,188,0,0, + 1256,1257,7,0,0,0,1257,1261,5,188,0,0,1258,1259,3,96,48,0,1259,1260,5, + 188,0,0,1260,1262,1,0,0,0,1261,1258,1,0,0,0,1261,1262,1,0,0,0,1262,1263, + 1,0,0,0,1263,1275,3,374,187,0,1264,1265,5,79,0,0,1265,1266,5,188,0,0, + 1266,1267,5,97,0,0,1267,1271,5,188,0,0,1268,1269,3,96,48,0,1269,1270, + 5,188,0,0,1270,1272,1,0,0,0,1271,1268,1,0,0,0,1271,1272,1,0,0,0,1272, + 1273,1,0,0,0,1273,1275,3,100,50,0,1274,1254,1,0,0,0,1274,1264,1,0,0,0, + 1275,99,1,0,0,0,1276,1278,3,374,187,0,1277,1279,5,188,0,0,1278,1277,1, + 0,0,0,1278,1279,1,0,0,0,1279,1280,1,0,0,0,1280,1282,5,5,0,0,1281,1283, + 5,188,0,0,1282,1281,1,0,0,0,1282,1283,1,0,0,0,1283,1284,1,0,0,0,1284, + 1285,3,374,187,0,1285,101,1,0,0,0,1286,1287,5,49,0,0,1287,1288,5,188, + 0,0,1288,1289,5,141,0,0,1289,1290,5,188,0,0,1290,1291,3,374,187,0,1291, + 1292,5,188,0,0,1292,1293,3,104,52,0,1293,103,1,0,0,0,1294,1302,3,106, + 53,0,1295,1302,3,110,55,0,1296,1302,3,112,56,0,1297,1302,3,114,57,0,1298, + 1302,3,116,58,0,1299,1302,3,118,59,0,1300,1302,3,120,60,0,1301,1294,1, + 0,0,0,1301,1295,1,0,0,0,1301,1296,1,0,0,0,1301,1297,1,0,0,0,1301,1298, + 1,0,0,0,1301,1299,1,0,0,0,1301,1300,1,0,0,0,1302,105,1,0,0,0,1303,1304, + 5,47,0,0,1304,1308,5,188,0,0,1305,1306,3,50,25,0,1306,1307,5,188,0,0, + 1307,1309,1,0,0,0,1308,1305,1,0,0,0,1308,1309,1,0,0,0,1309,1310,1,0,0, + 0,1310,1311,3,368,184,0,1311,1312,5,188,0,0,1312,1315,3,142,71,0,1313, + 1314,5,188,0,0,1314,1316,3,108,54,0,1315,1313,1,0,0,0,1315,1316,1,0,0, + 0,1316,107,1,0,0,0,1317,1318,5,73,0,0,1318,1319,5,188,0,0,1319,1320,3, + 272,136,0,1320,109,1,0,0,0,1321,1322,5,79,0,0,1322,1326,5,188,0,0,1323, + 1324,3,96,48,0,1324,1325,5,188,0,0,1325,1327,1,0,0,0,1326,1323,1,0,0, + 0,1326,1327,1,0,0,0,1327,1328,1,0,0,0,1328,1329,3,368,184,0,1329,111, + 1,0,0,0,1330,1331,5,130,0,0,1331,1332,5,188,0,0,1332,1333,5,143,0,0,1333, + 1334,5,188,0,0,1334,1335,3,374,187,0,1335,113,1,0,0,0,1336,1337,5,130, + 0,0,1337,1338,5,188,0,0,1338,1339,3,368,184,0,1339,1340,5,188,0,0,1340, + 1341,5,143,0,0,1341,1342,5,188,0,0,1342,1343,3,368,184,0,1343,115,1,0, + 0,0,1344,1345,5,47,0,0,1345,1349,5,188,0,0,1346,1347,3,50,25,0,1347,1348, + 5,188,0,0,1348,1350,1,0,0,0,1349,1346,1,0,0,0,1349,1350,1,0,0,0,1350, + 1351,1,0,0,0,1351,1352,3,72,36,0,1352,117,1,0,0,0,1353,1354,5,79,0,0, + 1354,1358,5,188,0,0,1355,1356,3,96,48,0,1356,1357,5,188,0,0,1357,1359, + 1,0,0,0,1358,1355,1,0,0,0,1358,1359,1,0,0,0,1359,1360,1,0,0,0,1360,1361, + 3,72,36,0,1361,119,1,0,0,0,1362,1363,5,135,0,0,1363,1364,5,188,0,0,1364, + 1365,5,136,0,0,1365,1366,5,188,0,0,1366,1368,5,57,0,0,1367,1369,5,188, + 0,0,1368,1367,1,0,0,0,1368,1369,1,0,0,0,1369,1370,1,0,0,0,1370,1372,5, + 2,0,0,1371,1373,5,188,0,0,1372,1371,1,0,0,0,1372,1373,1,0,0,0,1373,1374, + 1,0,0,0,1374,1385,3,122,61,0,1375,1377,5,188,0,0,1376,1375,1,0,0,0,1376, + 1377,1,0,0,0,1377,1378,1,0,0,0,1378,1380,5,4,0,0,1379,1381,5,188,0,0, + 1380,1379,1,0,0,0,1380,1381,1,0,0,0,1381,1382,1,0,0,0,1382,1384,3,122, + 61,0,1383,1376,1,0,0,0,1384,1387,1,0,0,0,1385,1383,1,0,0,0,1385,1386, + 1,0,0,0,1386,1389,1,0,0,0,1387,1385,1,0,0,0,1388,1390,5,188,0,0,1389, + 1388,1,0,0,0,1389,1390,1,0,0,0,1390,1391,1,0,0,0,1391,1392,5,3,0,0,1392, + 121,1,0,0,0,1393,1394,3,368,184,0,1394,1395,5,188,0,0,1395,1396,7,1,0, + 0,1396,123,1,0,0,0,1397,1408,3,126,63,0,1398,1400,5,188,0,0,1399,1398, + 1,0,0,0,1399,1400,1,0,0,0,1400,1401,1,0,0,0,1401,1403,5,4,0,0,1402,1404, + 5,188,0,0,1403,1402,1,0,0,0,1403,1404,1,0,0,0,1404,1405,1,0,0,0,1405, + 1407,3,126,63,0,1406,1399,1,0,0,0,1407,1410,1,0,0,0,1408,1406,1,0,0,0, + 1408,1409,1,0,0,0,1409,125,1,0,0,0,1410,1408,1,0,0,0,1411,1412,3,368, + 184,0,1412,1413,5,188,0,0,1413,1414,3,142,71,0,1414,127,1,0,0,0,1415, + 1426,3,130,65,0,1416,1418,5,188,0,0,1417,1416,1,0,0,0,1417,1418,1,0,0, + 0,1418,1419,1,0,0,0,1419,1421,5,4,0,0,1420,1422,5,188,0,0,1421,1420,1, + 0,0,0,1421,1422,1,0,0,0,1422,1423,1,0,0,0,1423,1425,3,130,65,0,1424,1417, + 1,0,0,0,1425,1428,1,0,0,0,1426,1424,1,0,0,0,1426,1427,1,0,0,0,1427,129, + 1,0,0,0,1428,1426,1,0,0,0,1429,1432,3,126,63,0,1430,1431,5,188,0,0,1431, + 1433,3,108,54,0,1432,1430,1,0,0,0,1432,1433,1,0,0,0,1433,1438,1,0,0,0, + 1434,1435,5,188,0,0,1435,1436,5,125,0,0,1436,1437,5,188,0,0,1437,1439, + 5,104,0,0,1438,1434,1,0,0,0,1438,1439,1,0,0,0,1439,131,1,0,0,0,1440,1441, + 5,125,0,0,1441,1442,5,188,0,0,1442,1444,5,104,0,0,1443,1445,5,188,0,0, + 1444,1443,1,0,0,0,1444,1445,1,0,0,0,1445,1446,1,0,0,0,1446,1448,5,2,0, + 0,1447,1449,5,188,0,0,1448,1447,1,0,0,0,1448,1449,1,0,0,0,1449,1450,1, + 0,0,0,1450,1452,3,368,184,0,1451,1453,5,188,0,0,1452,1451,1,0,0,0,1452, + 1453,1,0,0,0,1453,1454,1,0,0,0,1454,1455,5,3,0,0,1455,133,1,0,0,0,1456, + 1458,5,148,0,0,1457,1459,5,188,0,0,1458,1457,1,0,0,0,1458,1459,1,0,0, + 0,1459,1460,1,0,0,0,1460,1462,5,2,0,0,1461,1463,5,188,0,0,1462,1461,1, + 0,0,0,1462,1463,1,0,0,0,1463,1464,1,0,0,0,1464,1466,3,124,62,0,1465,1467, + 5,188,0,0,1466,1465,1,0,0,0,1466,1467,1,0,0,0,1467,1468,1,0,0,0,1468, + 1469,5,3,0,0,1469,135,1,0,0,0,1470,1472,5,140,0,0,1471,1473,5,188,0,0, + 1472,1471,1,0,0,0,1472,1473,1,0,0,0,1473,1474,1,0,0,0,1474,1476,5,2,0, + 0,1475,1477,5,188,0,0,1476,1475,1,0,0,0,1476,1477,1,0,0,0,1477,1478,1, + 0,0,0,1478,1480,3,124,62,0,1479,1481,5,188,0,0,1480,1479,1,0,0,0,1480, + 1481,1,0,0,0,1481,1482,1,0,0,0,1482,1483,5,3,0,0,1483,137,1,0,0,0,1484, + 1486,5,164,0,0,1485,1487,5,188,0,0,1486,1485,1,0,0,0,1486,1487,1,0,0, + 0,1487,1488,1,0,0,0,1488,1490,5,2,0,0,1489,1491,5,188,0,0,1490,1489,1, + 0,0,0,1490,1491,1,0,0,0,1491,1492,1,0,0,0,1492,1494,3,142,71,0,1493,1495, + 5,188,0,0,1494,1493,1,0,0,0,1494,1495,1,0,0,0,1495,1496,1,0,0,0,1496, + 1498,5,4,0,0,1497,1499,5,188,0,0,1498,1497,1,0,0,0,1498,1499,1,0,0,0, + 1499,1500,1,0,0,0,1500,1502,3,142,71,0,1501,1503,5,188,0,0,1502,1501, + 1,0,0,0,1502,1503,1,0,0,0,1503,1504,1,0,0,0,1504,1505,5,3,0,0,1505,139, + 1,0,0,0,1506,1508,5,165,0,0,1507,1509,5,188,0,0,1508,1507,1,0,0,0,1508, + 1509,1,0,0,0,1509,1510,1,0,0,0,1510,1512,5,2,0,0,1511,1513,5,188,0,0, + 1512,1511,1,0,0,0,1512,1513,1,0,0,0,1513,1514,1,0,0,0,1514,1516,3,370, + 185,0,1515,1517,5,188,0,0,1516,1515,1,0,0,0,1516,1517,1,0,0,0,1517,1518, + 1,0,0,0,1518,1520,5,4,0,0,1519,1521,5,188,0,0,1520,1519,1,0,0,0,1520, + 1521,1,0,0,0,1521,1522,1,0,0,0,1522,1524,3,370,185,0,1523,1525,5,188, + 0,0,1524,1523,1,0,0,0,1524,1525,1,0,0,0,1525,1526,1,0,0,0,1526,1527,5, + 3,0,0,1527,141,1,0,0,0,1528,1529,6,71,-1,0,1529,1535,3,376,188,0,1530, + 1535,3,134,67,0,1531,1535,3,136,68,0,1532,1535,3,138,69,0,1533,1535,3, + 140,70,0,1534,1528,1,0,0,0,1534,1530,1,0,0,0,1534,1531,1,0,0,0,1534,1532, + 1,0,0,0,1534,1533,1,0,0,0,1535,1540,1,0,0,0,1536,1537,10,5,0,0,1537,1539, + 3,144,72,0,1538,1536,1,0,0,0,1539,1542,1,0,0,0,1540,1538,1,0,0,0,1540, + 1541,1,0,0,0,1541,143,1,0,0,0,1542,1540,1,0,0,0,1543,1547,3,146,73,0, + 1544,1546,3,146,73,0,1545,1544,1,0,0,0,1546,1549,1,0,0,0,1547,1545,1, + 0,0,0,1547,1548,1,0,0,0,1548,145,1,0,0,0,1549,1547,1,0,0,0,1550,1552, + 5,7,0,0,1551,1553,3,370,185,0,1552,1551,1,0,0,0,1552,1553,1,0,0,0,1553, + 1554,1,0,0,0,1554,1555,5,8,0,0,1555,147,1,0,0,0,1556,1559,3,150,75,0, + 1557,1559,3,152,76,0,1558,1556,1,0,0,0,1558,1557,1,0,0,0,1559,149,1,0, + 0,0,1560,1563,5,84,0,0,1561,1562,5,188,0,0,1562,1564,5,107,0,0,1563,1561, + 1,0,0,0,1563,1564,1,0,0,0,1564,151,1,0,0,0,1565,1566,5,126,0,0,1566,153, + 1,0,0,0,1567,1568,5,56,0,0,1568,1569,5,188,0,0,1569,1581,5,145,0,0,1570, + 1571,5,56,0,0,1571,1572,5,188,0,0,1572,1573,5,145,0,0,1573,1574,5,188, + 0,0,1574,1575,5,128,0,0,1575,1576,5,188,0,0,1576,1581,5,120,0,0,1577, + 1581,5,64,0,0,1578,1581,5,132,0,0,1579,1581,5,61,0,0,1580,1567,1,0,0, + 0,1580,1570,1,0,0,0,1580,1577,1,0,0,0,1580,1578,1,0,0,0,1580,1579,1,0, + 0,0,1581,155,1,0,0,0,1582,1587,3,158,79,0,1583,1587,3,160,80,0,1584,1587, + 3,162,81,0,1585,1587,3,164,82,0,1586,1582,1,0,0,0,1586,1583,1,0,0,0,1586, + 1584,1,0,0,0,1586,1585,1,0,0,0,1587,157,1,0,0,0,1588,1589,5,106,0,0,1589, + 1592,5,188,0,0,1590,1591,5,86,0,0,1591,1593,5,188,0,0,1592,1590,1,0,0, + 0,1592,1593,1,0,0,0,1593,1596,1,0,0,0,1594,1597,5,173,0,0,1595,1597,3, + 360,180,0,1596,1594,1,0,0,0,1596,1595,1,0,0,0,1597,159,1,0,0,0,1598,1599, + 5,89,0,0,1599,1601,5,188,0,0,1600,1598,1,0,0,0,1600,1601,1,0,0,0,1601, + 1602,1,0,0,0,1602,1603,5,101,0,0,1603,1604,5,188,0,0,1604,1609,3,360, + 180,0,1605,1606,5,188,0,0,1606,1607,5,88,0,0,1607,1608,5,188,0,0,1608, + 1610,5,173,0,0,1609,1605,1,0,0,0,1609,1610,1,0,0,0,1610,161,1,0,0,0,1611, + 1612,5,150,0,0,1612,1613,5,188,0,0,1613,1614,3,360,180,0,1614,163,1,0, + 0,0,1615,1616,5,151,0,0,1616,1617,5,188,0,0,1617,1618,3,360,180,0,1618, + 165,1,0,0,0,1619,1620,3,168,84,0,1620,167,1,0,0,0,1621,1628,3,172,86, + 0,1622,1624,5,188,0,0,1623,1622,1,0,0,0,1623,1624,1,0,0,0,1624,1625,1, + 0,0,0,1625,1627,3,170,85,0,1626,1623,1,0,0,0,1627,1630,1,0,0,0,1628,1626, + 1,0,0,0,1628,1629,1,0,0,0,1629,1643,1,0,0,0,1630,1628,1,0,0,0,1631,1633, + 3,214,107,0,1632,1634,5,188,0,0,1633,1632,1,0,0,0,1633,1634,1,0,0,0,1634, + 1636,1,0,0,0,1635,1631,1,0,0,0,1636,1637,1,0,0,0,1637,1635,1,0,0,0,1637, + 1638,1,0,0,0,1638,1639,1,0,0,0,1639,1640,3,172,86,0,1640,1641,6,84,-1, + 0,1641,1643,1,0,0,0,1642,1621,1,0,0,0,1642,1635,1,0,0,0,1643,169,1,0, + 0,0,1644,1645,5,148,0,0,1645,1646,5,188,0,0,1646,1648,5,48,0,0,1647,1649, + 5,188,0,0,1648,1647,1,0,0,0,1648,1649,1,0,0,0,1649,1650,1,0,0,0,1650, + 1657,3,172,86,0,1651,1653,5,148,0,0,1652,1654,5,188,0,0,1653,1652,1,0, + 0,0,1653,1654,1,0,0,0,1654,1655,1,0,0,0,1655,1657,3,172,86,0,1656,1644, + 1,0,0,0,1656,1651,1,0,0,0,1657,171,1,0,0,0,1658,1661,3,174,87,0,1659, + 1661,3,176,88,0,1660,1658,1,0,0,0,1660,1659,1,0,0,0,1661,173,1,0,0,0, + 1662,1664,3,182,91,0,1663,1665,5,188,0,0,1664,1663,1,0,0,0,1664,1665, + 1,0,0,0,1665,1667,1,0,0,0,1666,1662,1,0,0,0,1667,1670,1,0,0,0,1668,1666, + 1,0,0,0,1668,1669,1,0,0,0,1669,1671,1,0,0,0,1670,1668,1,0,0,0,1671,1698, + 3,214,107,0,1672,1674,3,182,91,0,1673,1675,5,188,0,0,1674,1673,1,0,0, + 0,1674,1675,1,0,0,0,1675,1677,1,0,0,0,1676,1672,1,0,0,0,1677,1680,1,0, + 0,0,1678,1676,1,0,0,0,1678,1679,1,0,0,0,1679,1681,1,0,0,0,1680,1678,1, + 0,0,0,1681,1688,3,180,90,0,1682,1684,5,188,0,0,1683,1682,1,0,0,0,1683, + 1684,1,0,0,0,1684,1685,1,0,0,0,1685,1687,3,180,90,0,1686,1683,1,0,0,0, + 1687,1690,1,0,0,0,1688,1686,1,0,0,0,1688,1689,1,0,0,0,1689,1695,1,0,0, + 0,1690,1688,1,0,0,0,1691,1693,5,188,0,0,1692,1691,1,0,0,0,1692,1693,1, + 0,0,0,1693,1694,1,0,0,0,1694,1696,3,214,107,0,1695,1692,1,0,0,0,1695, + 1696,1,0,0,0,1696,1698,1,0,0,0,1697,1668,1,0,0,0,1697,1678,1,0,0,0,1698, + 175,1,0,0,0,1699,1701,3,178,89,0,1700,1702,5,188,0,0,1701,1700,1,0,0, + 0,1701,1702,1,0,0,0,1702,1704,1,0,0,0,1703,1699,1,0,0,0,1704,1705,1,0, + 0,0,1705,1703,1,0,0,0,1705,1706,1,0,0,0,1706,1707,1,0,0,0,1707,1708,3, + 174,87,0,1708,177,1,0,0,0,1709,1711,3,182,91,0,1710,1712,5,188,0,0,1711, + 1710,1,0,0,0,1711,1712,1,0,0,0,1712,1714,1,0,0,0,1713,1709,1,0,0,0,1714, + 1717,1,0,0,0,1715,1713,1,0,0,0,1715,1716,1,0,0,0,1716,1724,1,0,0,0,1717, + 1715,1,0,0,0,1718,1720,3,180,90,0,1719,1721,5,188,0,0,1720,1719,1,0,0, + 0,1720,1721,1,0,0,0,1721,1723,1,0,0,0,1722,1718,1,0,0,0,1723,1726,1,0, + 0,0,1724,1722,1,0,0,0,1724,1725,1,0,0,0,1725,1727,1,0,0,0,1726,1724,1, + 0,0,0,1727,1728,3,212,106,0,1728,179,1,0,0,0,1729,1734,3,200,100,0,1730, + 1734,3,202,101,0,1731,1734,3,206,103,0,1732,1734,3,210,105,0,1733,1729, + 1,0,0,0,1733,1730,1,0,0,0,1733,1731,1,0,0,0,1733,1732,1,0,0,0,1734,181, + 1,0,0,0,1735,1740,3,192,96,0,1736,1740,3,198,99,0,1737,1740,3,190,95, + 0,1738,1740,3,184,92,0,1739,1735,1,0,0,0,1739,1736,1,0,0,0,1739,1737, + 1,0,0,0,1739,1738,1,0,0,0,1740,183,1,0,0,0,1741,1759,5,106,0,0,1742,1743, + 5,188,0,0,1743,1744,5,155,0,0,1744,1745,5,188,0,0,1745,1747,5,94,0,0, + 1746,1748,5,188,0,0,1747,1746,1,0,0,0,1747,1748,1,0,0,0,1748,1749,1,0, + 0,0,1749,1751,5,2,0,0,1750,1752,5,188,0,0,1751,1750,1,0,0,0,1751,1752, + 1,0,0,0,1752,1753,1,0,0,0,1753,1755,3,124,62,0,1754,1756,5,188,0,0,1755, + 1754,1,0,0,0,1755,1756,1,0,0,0,1756,1757,1,0,0,0,1757,1758,5,3,0,0,1758, + 1760,1,0,0,0,1759,1742,1,0,0,0,1759,1760,1,0,0,0,1760,1761,1,0,0,0,1761, + 1762,5,188,0,0,1762,1763,5,88,0,0,1763,1764,5,188,0,0,1764,1778,3,10, + 5,0,1765,1767,5,188,0,0,1766,1765,1,0,0,0,1766,1767,1,0,0,0,1767,1768, + 1,0,0,0,1768,1770,5,2,0,0,1769,1771,5,188,0,0,1770,1769,1,0,0,0,1770, + 1771,1,0,0,0,1771,1772,1,0,0,0,1772,1774,3,26,13,0,1773,1775,5,188,0, + 0,1774,1773,1,0,0,0,1774,1775,1,0,0,0,1775,1776,1,0,0,0,1776,1777,5,3, + 0,0,1777,1779,1,0,0,0,1778,1766,1,0,0,0,1778,1779,1,0,0,0,1779,1784,1, + 0,0,0,1780,1782,5,188,0,0,1781,1780,1,0,0,0,1781,1782,1,0,0,0,1782,1783, + 1,0,0,0,1783,1785,3,230,115,0,1784,1781,1,0,0,0,1784,1785,1,0,0,0,1785, + 185,1,0,0,0,1786,1787,3,360,180,0,1787,1788,5,188,0,0,1788,1789,5,52, + 0,0,1789,1790,5,188,0,0,1790,1792,1,0,0,0,1791,1786,1,0,0,0,1791,1792, + 1,0,0,0,1792,1793,1,0,0,0,1793,1794,3,360,180,0,1794,187,1,0,0,0,1795, + 1806,3,186,93,0,1796,1798,5,188,0,0,1797,1796,1,0,0,0,1797,1798,1,0,0, + 0,1798,1799,1,0,0,0,1799,1801,5,4,0,0,1800,1802,5,188,0,0,1801,1800,1, + 0,0,0,1801,1802,1,0,0,0,1802,1803,1,0,0,0,1803,1805,3,186,93,0,1804,1797, + 1,0,0,0,1805,1808,1,0,0,0,1806,1804,1,0,0,0,1806,1807,1,0,0,0,1807,189, + 1,0,0,0,1808,1806,1,0,0,0,1809,1810,5,58,0,0,1810,1811,5,188,0,0,1811, + 1816,3,340,170,0,1812,1814,5,188,0,0,1813,1812,1,0,0,0,1813,1814,1,0, + 0,0,1814,1815,1,0,0,0,1815,1817,3,230,115,0,1816,1813,1,0,0,0,1816,1817, + 1,0,0,0,1817,1824,1,0,0,0,1818,1820,5,188,0,0,1819,1818,1,0,0,0,1819, + 1820,1,0,0,0,1820,1821,1,0,0,0,1821,1822,5,160,0,0,1822,1823,5,188,0, + 0,1823,1825,3,188,94,0,1824,1819,1,0,0,0,1824,1825,1,0,0,0,1825,191,1, + 0,0,0,1826,1827,5,122,0,0,1827,1829,5,188,0,0,1828,1826,1,0,0,0,1828, + 1829,1,0,0,0,1829,1830,1,0,0,0,1830,1832,5,109,0,0,1831,1833,5,188,0, + 0,1832,1831,1,0,0,0,1832,1833,1,0,0,0,1833,1834,1,0,0,0,1834,1837,3,232, + 116,0,1835,1836,5,188,0,0,1836,1838,3,230,115,0,1837,1835,1,0,0,0,1837, + 1838,1,0,0,0,1838,1841,1,0,0,0,1839,1840,5,188,0,0,1840,1842,3,194,97, + 0,1841,1839,1,0,0,0,1841,1842,1,0,0,0,1842,193,1,0,0,0,1843,1844,5,95, + 0,0,1844,1845,5,188,0,0,1845,1846,3,196,98,0,1846,195,1,0,0,0,1847,1848, + 6,98,-1,0,1848,1850,5,2,0,0,1849,1851,5,188,0,0,1850,1849,1,0,0,0,1850, + 1851,1,0,0,0,1851,1852,1,0,0,0,1852,1854,3,196,98,0,1853,1855,5,188,0, + 0,1854,1853,1,0,0,0,1854,1855,1,0,0,0,1855,1856,1,0,0,0,1856,1857,5,3, + 0,0,1857,1860,1,0,0,0,1858,1860,3,374,187,0,1859,1847,1,0,0,0,1859,1858, + 1,0,0,0,1860,1877,1,0,0,0,1861,1862,10,4,0,0,1862,1863,5,188,0,0,1863, + 1864,5,103,0,0,1864,1865,5,188,0,0,1865,1876,3,196,98,5,1866,1871,10, + 3,0,0,1867,1868,5,188,0,0,1868,1869,5,113,0,0,1869,1870,5,188,0,0,1870, + 1872,3,374,187,0,1871,1867,1,0,0,0,1872,1873,1,0,0,0,1873,1871,1,0,0, + 0,1873,1874,1,0,0,0,1874,1876,1,0,0,0,1875,1861,1,0,0,0,1875,1866,1,0, + 0,0,1876,1879,1,0,0,0,1877,1875,1,0,0,0,1877,1878,1,0,0,0,1878,197,1, + 0,0,0,1879,1877,1,0,0,0,1880,1882,5,149,0,0,1881,1883,5,188,0,0,1882, + 1881,1,0,0,0,1882,1883,1,0,0,0,1883,1884,1,0,0,0,1884,1885,3,272,136, + 0,1885,1886,5,188,0,0,1886,1887,5,52,0,0,1887,1888,5,188,0,0,1888,1889, + 3,360,180,0,1889,199,1,0,0,0,1890,1892,5,69,0,0,1891,1893,5,188,0,0,1892, + 1891,1,0,0,0,1892,1893,1,0,0,0,1893,1894,1,0,0,0,1894,1895,3,232,116, + 0,1895,201,1,0,0,0,1896,1898,5,111,0,0,1897,1899,5,188,0,0,1898,1897, + 1,0,0,0,1898,1899,1,0,0,0,1899,1900,1,0,0,0,1900,1905,3,232,116,0,1901, + 1902,5,188,0,0,1902,1904,3,204,102,0,1903,1901,1,0,0,0,1904,1907,1,0, + 0,0,1905,1903,1,0,0,0,1905,1906,1,0,0,0,1906,203,1,0,0,0,1907,1905,1, + 0,0,0,1908,1909,5,119,0,0,1909,1910,5,188,0,0,1910,1911,5,109,0,0,1911, + 1912,5,188,0,0,1912,1919,3,206,103,0,1913,1914,5,119,0,0,1914,1915,5, + 188,0,0,1915,1916,5,69,0,0,1916,1917,5,188,0,0,1917,1919,3,206,103,0, + 1918,1908,1,0,0,0,1918,1913,1,0,0,0,1919,205,1,0,0,0,1920,1922,5,135, + 0,0,1921,1923,5,188,0,0,1922,1921,1,0,0,0,1922,1923,1,0,0,0,1923,1924, + 1,0,0,0,1924,1935,3,208,104,0,1925,1927,5,188,0,0,1926,1925,1,0,0,0,1926, + 1927,1,0,0,0,1927,1928,1,0,0,0,1928,1930,5,4,0,0,1929,1931,5,188,0,0, + 1930,1929,1,0,0,0,1930,1931,1,0,0,0,1931,1932,1,0,0,0,1932,1934,3,208, + 104,0,1933,1926,1,0,0,0,1934,1937,1,0,0,0,1935,1933,1,0,0,0,1935,1936, + 1,0,0,0,1936,1953,1,0,0,0,1937,1935,1,0,0,0,1938,1940,5,135,0,0,1939, + 1941,5,188,0,0,1940,1939,1,0,0,0,1940,1941,1,0,0,0,1941,1942,1,0,0,0, + 1942,1944,3,318,159,0,1943,1945,5,188,0,0,1944,1943,1,0,0,0,1944,1945, + 1,0,0,0,1945,1946,1,0,0,0,1946,1948,5,6,0,0,1947,1949,5,188,0,0,1948, + 1947,1,0,0,0,1948,1949,1,0,0,0,1949,1950,1,0,0,0,1950,1951,3,248,124, + 0,1951,1953,1,0,0,0,1952,1920,1,0,0,0,1952,1938,1,0,0,0,1953,207,1,0, + 0,0,1954,1956,3,366,183,0,1955,1957,5,188,0,0,1956,1955,1,0,0,0,1956, + 1957,1,0,0,0,1957,1958,1,0,0,0,1958,1960,5,6,0,0,1959,1961,5,188,0,0, + 1960,1959,1,0,0,0,1960,1961,1,0,0,0,1961,1962,1,0,0,0,1962,1963,3,272, + 136,0,1963,209,1,0,0,0,1964,1965,5,77,0,0,1965,1967,5,188,0,0,1966,1964, + 1,0,0,0,1966,1967,1,0,0,0,1967,1968,1,0,0,0,1968,1970,5,74,0,0,1969,1971, + 5,188,0,0,1970,1969,1,0,0,0,1970,1971,1,0,0,0,1971,1972,1,0,0,0,1972, + 1983,3,272,136,0,1973,1975,5,188,0,0,1974,1973,1,0,0,0,1974,1975,1,0, + 0,0,1975,1976,1,0,0,0,1976,1978,5,4,0,0,1977,1979,5,188,0,0,1978,1977, + 1,0,0,0,1978,1979,1,0,0,0,1979,1980,1,0,0,0,1980,1982,3,272,136,0,1981, + 1974,1,0,0,0,1982,1985,1,0,0,0,1983,1981,1,0,0,0,1983,1984,1,0,0,0,1984, + 211,1,0,0,0,1985,1983,1,0,0,0,1986,1987,5,155,0,0,1987,1992,3,216,108, + 0,1988,1990,5,188,0,0,1989,1988,1,0,0,0,1989,1990,1,0,0,0,1990,1991,1, + 0,0,0,1991,1993,3,230,115,0,1992,1989,1,0,0,0,1992,1993,1,0,0,0,1993, + 213,1,0,0,0,1994,1995,5,131,0,0,1995,1996,3,216,108,0,1996,215,1,0,0, + 0,1997,1999,5,188,0,0,1998,1997,1,0,0,0,1998,1999,1,0,0,0,1999,2000,1, + 0,0,0,2000,2002,5,78,0,0,2001,1998,1,0,0,0,2001,2002,1,0,0,0,2002,2003, + 1,0,0,0,2003,2004,5,188,0,0,2004,2007,3,218,109,0,2005,2006,5,188,0,0, + 2006,2008,3,222,111,0,2007,2005,1,0,0,0,2007,2008,1,0,0,0,2008,2011,1, + 0,0,0,2009,2010,5,188,0,0,2010,2012,3,224,112,0,2011,2009,1,0,0,0,2011, + 2012,1,0,0,0,2012,2015,1,0,0,0,2013,2014,5,188,0,0,2014,2016,3,226,113, + 0,2015,2013,1,0,0,0,2015,2016,1,0,0,0,2016,217,1,0,0,0,2017,2028,5,166, + 0,0,2018,2020,5,188,0,0,2019,2018,1,0,0,0,2019,2020,1,0,0,0,2020,2021, + 1,0,0,0,2021,2023,5,4,0,0,2022,2024,5,188,0,0,2023,2022,1,0,0,0,2023, + 2024,1,0,0,0,2024,2025,1,0,0,0,2025,2027,3,220,110,0,2026,2019,1,0,0, + 0,2027,2030,1,0,0,0,2028,2026,1,0,0,0,2028,2029,1,0,0,0,2029,2046,1,0, + 0,0,2030,2028,1,0,0,0,2031,2042,3,220,110,0,2032,2034,5,188,0,0,2033, + 2032,1,0,0,0,2033,2034,1,0,0,0,2034,2035,1,0,0,0,2035,2037,5,4,0,0,2036, + 2038,5,188,0,0,2037,2036,1,0,0,0,2037,2038,1,0,0,0,2038,2039,1,0,0,0, + 2039,2041,3,220,110,0,2040,2033,1,0,0,0,2041,2044,1,0,0,0,2042,2040,1, + 0,0,0,2042,2043,1,0,0,0,2043,2046,1,0,0,0,2044,2042,1,0,0,0,2045,2017, + 1,0,0,0,2045,2031,1,0,0,0,2046,219,1,0,0,0,2047,2048,3,272,136,0,2048, + 2049,5,188,0,0,2049,2050,5,52,0,0,2050,2051,5,188,0,0,2051,2052,3,360, + 180,0,2052,2055,1,0,0,0,2053,2055,3,272,136,0,2054,2047,1,0,0,0,2054, + 2053,1,0,0,0,2055,221,1,0,0,0,2056,2057,5,124,0,0,2057,2058,5,188,0,0, + 2058,2059,5,57,0,0,2059,2060,5,188,0,0,2060,2068,3,228,114,0,2061,2063, + 5,4,0,0,2062,2064,5,188,0,0,2063,2062,1,0,0,0,2063,2064,1,0,0,0,2064, + 2065,1,0,0,0,2065,2067,3,228,114,0,2066,2061,1,0,0,0,2067,2070,1,0,0, + 0,2068,2066,1,0,0,0,2068,2069,1,0,0,0,2069,223,1,0,0,0,2070,2068,1,0, + 0,0,2071,2072,5,167,0,0,2072,2073,5,188,0,0,2073,2074,3,272,136,0,2074, + 225,1,0,0,0,2075,2076,5,105,0,0,2076,2077,5,188,0,0,2077,2078,3,272,136, + 0,2078,227,1,0,0,0,2079,2084,3,272,136,0,2080,2082,5,188,0,0,2081,2080, + 1,0,0,0,2081,2082,1,0,0,0,2082,2083,1,0,0,0,2083,2085,7,2,0,0,2084,2081, + 1,0,0,0,2084,2085,1,0,0,0,2085,229,1,0,0,0,2086,2087,5,154,0,0,2087,2088, + 5,188,0,0,2088,2089,3,272,136,0,2089,231,1,0,0,0,2090,2101,3,234,117, + 0,2091,2093,5,188,0,0,2092,2091,1,0,0,0,2092,2093,1,0,0,0,2093,2094,1, + 0,0,0,2094,2096,5,4,0,0,2095,2097,5,188,0,0,2096,2095,1,0,0,0,2096,2097, + 1,0,0,0,2097,2098,1,0,0,0,2098,2100,3,234,117,0,2099,2092,1,0,0,0,2100, + 2103,1,0,0,0,2101,2099,1,0,0,0,2101,2102,1,0,0,0,2102,233,1,0,0,0,2103, + 2101,1,0,0,0,2104,2106,3,360,180,0,2105,2107,5,188,0,0,2106,2105,1,0, + 0,0,2106,2107,1,0,0,0,2107,2108,1,0,0,0,2108,2110,5,6,0,0,2109,2111,5, + 188,0,0,2110,2109,1,0,0,0,2110,2111,1,0,0,0,2111,2112,1,0,0,0,2112,2113, + 3,236,118,0,2113,2116,1,0,0,0,2114,2116,3,236,118,0,2115,2104,1,0,0,0, + 2115,2114,1,0,0,0,2116,235,1,0,0,0,2117,2118,3,238,119,0,2118,237,1,0, + 0,0,2119,2126,3,240,120,0,2120,2122,5,188,0,0,2121,2120,1,0,0,0,2121, + 2122,1,0,0,0,2122,2123,1,0,0,0,2123,2125,3,242,121,0,2124,2121,1,0,0, + 0,2125,2128,1,0,0,0,2126,2124,1,0,0,0,2126,2127,1,0,0,0,2127,2134,1,0, + 0,0,2128,2126,1,0,0,0,2129,2130,5,2,0,0,2130,2131,3,238,119,0,2131,2132, + 5,3,0,0,2132,2134,1,0,0,0,2133,2119,1,0,0,0,2133,2129,1,0,0,0,2134,239, + 1,0,0,0,2135,2137,5,2,0,0,2136,2138,5,188,0,0,2137,2136,1,0,0,0,2137, + 2138,1,0,0,0,2138,2143,1,0,0,0,2139,2141,3,360,180,0,2140,2142,5,188, + 0,0,2141,2140,1,0,0,0,2141,2142,1,0,0,0,2142,2144,1,0,0,0,2143,2139,1, + 0,0,0,2143,2144,1,0,0,0,2144,2149,1,0,0,0,2145,2147,3,252,126,0,2146, + 2148,5,188,0,0,2147,2146,1,0,0,0,2147,2148,1,0,0,0,2148,2150,1,0,0,0, + 2149,2145,1,0,0,0,2149,2150,1,0,0,0,2150,2155,1,0,0,0,2151,2153,3,248, + 124,0,2152,2154,5,188,0,0,2153,2152,1,0,0,0,2153,2154,1,0,0,0,2154,2156, + 1,0,0,0,2155,2151,1,0,0,0,2155,2156,1,0,0,0,2156,2157,1,0,0,0,2157,2158, + 5,3,0,0,2158,241,1,0,0,0,2159,2161,3,244,122,0,2160,2162,5,188,0,0,2161, + 2160,1,0,0,0,2161,2162,1,0,0,0,2162,2163,1,0,0,0,2163,2164,3,240,120, + 0,2164,243,1,0,0,0,2165,2167,3,380,190,0,2166,2168,5,188,0,0,2167,2166, + 1,0,0,0,2167,2168,1,0,0,0,2168,2169,1,0,0,0,2169,2171,3,384,192,0,2170, + 2172,5,188,0,0,2171,2170,1,0,0,0,2171,2172,1,0,0,0,2172,2174,1,0,0,0, + 2173,2175,3,246,123,0,2174,2173,1,0,0,0,2174,2175,1,0,0,0,2175,2177,1, + 0,0,0,2176,2178,5,188,0,0,2177,2176,1,0,0,0,2177,2178,1,0,0,0,2178,2179, + 1,0,0,0,2179,2180,3,384,192,0,2180,2210,1,0,0,0,2181,2183,3,384,192,0, + 2182,2184,5,188,0,0,2183,2182,1,0,0,0,2183,2184,1,0,0,0,2184,2186,1,0, + 0,0,2185,2187,3,246,123,0,2186,2185,1,0,0,0,2186,2187,1,0,0,0,2187,2189, + 1,0,0,0,2188,2190,5,188,0,0,2189,2188,1,0,0,0,2189,2190,1,0,0,0,2190, + 2191,1,0,0,0,2191,2193,3,384,192,0,2192,2194,5,188,0,0,2193,2192,1,0, + 0,0,2193,2194,1,0,0,0,2194,2195,1,0,0,0,2195,2196,3,382,191,0,2196,2210, + 1,0,0,0,2197,2199,3,384,192,0,2198,2200,5,188,0,0,2199,2198,1,0,0,0,2199, + 2200,1,0,0,0,2200,2202,1,0,0,0,2201,2203,3,246,123,0,2202,2201,1,0,0, + 0,2202,2203,1,0,0,0,2203,2205,1,0,0,0,2204,2206,5,188,0,0,2205,2204,1, + 0,0,0,2205,2206,1,0,0,0,2206,2207,1,0,0,0,2207,2208,3,384,192,0,2208, + 2210,1,0,0,0,2209,2165,1,0,0,0,2209,2181,1,0,0,0,2209,2197,1,0,0,0,2210, + 245,1,0,0,0,2211,2213,5,7,0,0,2212,2214,5,188,0,0,2213,2212,1,0,0,0,2213, + 2214,1,0,0,0,2214,2219,1,0,0,0,2215,2217,3,360,180,0,2216,2218,5,188, + 0,0,2217,2216,1,0,0,0,2217,2218,1,0,0,0,2218,2220,1,0,0,0,2219,2215,1, + 0,0,0,2219,2220,1,0,0,0,2220,2225,1,0,0,0,2221,2223,3,250,125,0,2222, + 2224,5,188,0,0,2223,2222,1,0,0,0,2223,2224,1,0,0,0,2224,2226,1,0,0,0, + 2225,2221,1,0,0,0,2225,2226,1,0,0,0,2226,2231,1,0,0,0,2227,2229,3,254, + 127,0,2228,2230,5,188,0,0,2229,2228,1,0,0,0,2229,2230,1,0,0,0,2230,2232, + 1,0,0,0,2231,2227,1,0,0,0,2231,2232,1,0,0,0,2232,2237,1,0,0,0,2233,2235, + 3,248,124,0,2234,2236,5,188,0,0,2235,2234,1,0,0,0,2235,2236,1,0,0,0,2236, + 2238,1,0,0,0,2237,2233,1,0,0,0,2237,2238,1,0,0,0,2238,2239,1,0,0,0,2239, + 2240,5,8,0,0,2240,247,1,0,0,0,2241,2243,5,9,0,0,2242,2244,5,188,0,0,2243, + 2242,1,0,0,0,2243,2244,1,0,0,0,2244,2278,1,0,0,0,2245,2247,3,368,184, + 0,2246,2248,5,188,0,0,2247,2246,1,0,0,0,2247,2248,1,0,0,0,2248,2249,1, + 0,0,0,2249,2251,5,169,0,0,2250,2252,5,188,0,0,2251,2250,1,0,0,0,2251, + 2252,1,0,0,0,2252,2253,1,0,0,0,2253,2255,3,272,136,0,2254,2256,5,188, + 0,0,2255,2254,1,0,0,0,2255,2256,1,0,0,0,2256,2275,1,0,0,0,2257,2259,5, + 4,0,0,2258,2260,5,188,0,0,2259,2258,1,0,0,0,2259,2260,1,0,0,0,2260,2261, + 1,0,0,0,2261,2263,3,368,184,0,2262,2264,5,188,0,0,2263,2262,1,0,0,0,2263, + 2264,1,0,0,0,2264,2265,1,0,0,0,2265,2267,5,169,0,0,2266,2268,5,188,0, + 0,2267,2266,1,0,0,0,2267,2268,1,0,0,0,2268,2269,1,0,0,0,2269,2271,3,272, + 136,0,2270,2272,5,188,0,0,2271,2270,1,0,0,0,2271,2272,1,0,0,0,2272,2274, + 1,0,0,0,2273,2257,1,0,0,0,2274,2277,1,0,0,0,2275,2273,1,0,0,0,2275,2276, + 1,0,0,0,2276,2279,1,0,0,0,2277,2275,1,0,0,0,2278,2245,1,0,0,0,2278,2279, + 1,0,0,0,2279,2280,1,0,0,0,2280,2281,5,10,0,0,2281,249,1,0,0,0,2282,2284, + 5,169,0,0,2283,2285,5,188,0,0,2284,2283,1,0,0,0,2284,2285,1,0,0,0,2285, + 2286,1,0,0,0,2286,2300,3,270,135,0,2287,2289,5,188,0,0,2288,2287,1,0, + 0,0,2288,2289,1,0,0,0,2289,2290,1,0,0,0,2290,2292,5,11,0,0,2291,2293, + 5,169,0,0,2292,2291,1,0,0,0,2292,2293,1,0,0,0,2293,2295,1,0,0,0,2294, + 2296,5,188,0,0,2295,2294,1,0,0,0,2295,2296,1,0,0,0,2296,2297,1,0,0,0, + 2297,2299,3,270,135,0,2298,2288,1,0,0,0,2299,2302,1,0,0,0,2300,2298,1, + 0,0,0,2300,2301,1,0,0,0,2301,251,1,0,0,0,2302,2300,1,0,0,0,2303,2305, + 5,169,0,0,2304,2306,5,188,0,0,2305,2304,1,0,0,0,2305,2306,1,0,0,0,2306, + 2307,1,0,0,0,2307,2324,3,268,134,0,2308,2310,5,188,0,0,2309,2308,1,0, + 0,0,2309,2310,1,0,0,0,2310,2316,1,0,0,0,2311,2313,5,11,0,0,2312,2314, + 5,169,0,0,2313,2312,1,0,0,0,2313,2314,1,0,0,0,2314,2317,1,0,0,0,2315, + 2317,5,169,0,0,2316,2311,1,0,0,0,2316,2315,1,0,0,0,2317,2319,1,0,0,0, + 2318,2320,5,188,0,0,2319,2318,1,0,0,0,2319,2320,1,0,0,0,2320,2321,1,0, + 0,0,2321,2323,3,268,134,0,2322,2309,1,0,0,0,2323,2326,1,0,0,0,2324,2322, + 1,0,0,0,2324,2325,1,0,0,0,2325,253,1,0,0,0,2326,2324,1,0,0,0,2327,2332, + 5,166,0,0,2328,2330,5,188,0,0,2329,2328,1,0,0,0,2329,2330,1,0,0,0,2330, + 2331,1,0,0,0,2331,2333,3,256,128,0,2332,2329,1,0,0,0,2332,2333,1,0,0, + 0,2333,2338,1,0,0,0,2334,2336,5,188,0,0,2335,2334,1,0,0,0,2335,2336,1, + 0,0,0,2336,2337,1,0,0,0,2337,2339,3,258,129,0,2338,2335,1,0,0,0,2338, + 2339,1,0,0,0,2339,2344,1,0,0,0,2340,2342,5,188,0,0,2341,2340,1,0,0,0, + 2341,2342,1,0,0,0,2342,2343,1,0,0,0,2343,2345,3,260,130,0,2344,2341,1, + 0,0,0,2344,2345,1,0,0,0,2345,255,1,0,0,0,2346,2347,5,48,0,0,2347,2349, + 5,188,0,0,2348,2346,1,0,0,0,2348,2349,1,0,0,0,2349,2350,1,0,0,0,2350, + 2352,5,157,0,0,2351,2353,5,188,0,0,2352,2351,1,0,0,0,2352,2353,1,0,0, + 0,2353,2354,1,0,0,0,2354,2356,5,2,0,0,2355,2357,5,188,0,0,2356,2355,1, + 0,0,0,2356,2357,1,0,0,0,2357,2358,1,0,0,0,2358,2360,3,368,184,0,2359, + 2361,5,188,0,0,2360,2359,1,0,0,0,2360,2361,1,0,0,0,2361,2362,1,0,0,0, + 2362,2363,5,3,0,0,2363,2371,1,0,0,0,2364,2371,5,137,0,0,2365,2366,5,48, + 0,0,2366,2367,5,188,0,0,2367,2371,5,137,0,0,2368,2371,5,144,0,0,2369, + 2371,5,45,0,0,2370,2348,1,0,0,0,2370,2364,1,0,0,0,2370,2365,1,0,0,0,2370, + 2368,1,0,0,0,2370,2369,1,0,0,0,2371,257,1,0,0,0,2372,2374,3,264,132,0, + 2373,2372,1,0,0,0,2373,2374,1,0,0,0,2374,2376,1,0,0,0,2375,2377,5,188, + 0,0,2376,2375,1,0,0,0,2376,2377,1,0,0,0,2377,2378,1,0,0,0,2378,2380,5, + 170,0,0,2379,2381,5,188,0,0,2380,2379,1,0,0,0,2380,2381,1,0,0,0,2381, + 2383,1,0,0,0,2382,2384,3,266,133,0,2383,2382,1,0,0,0,2383,2384,1,0,0, + 0,2384,2387,1,0,0,0,2385,2387,3,370,185,0,2386,2373,1,0,0,0,2386,2385, + 1,0,0,0,2387,259,1,0,0,0,2388,2390,5,2,0,0,2389,2391,5,188,0,0,2390,2389, + 1,0,0,0,2390,2391,1,0,0,0,2391,2392,1,0,0,0,2392,2394,3,360,180,0,2393, + 2395,5,188,0,0,2394,2393,1,0,0,0,2394,2395,1,0,0,0,2395,2396,1,0,0,0, + 2396,2398,5,4,0,0,2397,2399,5,188,0,0,2398,2397,1,0,0,0,2398,2399,1,0, + 0,0,2399,2400,1,0,0,0,2400,2412,3,360,180,0,2401,2403,5,188,0,0,2402, + 2401,1,0,0,0,2402,2403,1,0,0,0,2403,2404,1,0,0,0,2404,2406,5,11,0,0,2405, + 2407,5,188,0,0,2406,2405,1,0,0,0,2406,2407,1,0,0,0,2407,2408,1,0,0,0, + 2408,2410,3,230,115,0,2409,2411,5,188,0,0,2410,2409,1,0,0,0,2410,2411, + 1,0,0,0,2411,2413,1,0,0,0,2412,2402,1,0,0,0,2412,2413,1,0,0,0,2413,2433, + 1,0,0,0,2414,2416,5,188,0,0,2415,2414,1,0,0,0,2415,2416,1,0,0,0,2416, + 2417,1,0,0,0,2417,2419,5,11,0,0,2418,2420,5,188,0,0,2419,2418,1,0,0,0, + 2419,2420,1,0,0,0,2420,2421,1,0,0,0,2421,2423,3,262,131,0,2422,2424,5, + 188,0,0,2423,2422,1,0,0,0,2423,2424,1,0,0,0,2424,2425,1,0,0,0,2425,2427, + 5,4,0,0,2426,2428,5,188,0,0,2427,2426,1,0,0,0,2427,2428,1,0,0,0,2428, + 2429,1,0,0,0,2429,2431,3,262,131,0,2430,2432,5,188,0,0,2431,2430,1,0, + 0,0,2431,2432,1,0,0,0,2432,2434,1,0,0,0,2433,2415,1,0,0,0,2433,2434,1, + 0,0,0,2434,2435,1,0,0,0,2435,2436,5,3,0,0,2436,261,1,0,0,0,2437,2439, + 5,9,0,0,2438,2440,5,188,0,0,2439,2438,1,0,0,0,2439,2440,1,0,0,0,2440, + 2442,1,0,0,0,2441,2443,3,218,109,0,2442,2441,1,0,0,0,2442,2443,1,0,0, + 0,2443,2445,1,0,0,0,2444,2446,5,188,0,0,2445,2444,1,0,0,0,2445,2446,1, + 0,0,0,2446,2447,1,0,0,0,2447,2448,5,10,0,0,2448,263,1,0,0,0,2449,2450, + 5,175,0,0,2450,265,1,0,0,0,2451,2452,5,175,0,0,2452,267,1,0,0,0,2453, + 2456,3,374,187,0,2454,2455,5,5,0,0,2455,2457,3,374,187,0,2456,2454,1, + 0,0,0,2456,2457,1,0,0,0,2457,269,1,0,0,0,2458,2459,3,374,187,0,2459,271, + 1,0,0,0,2460,2461,3,274,137,0,2461,273,1,0,0,0,2462,2469,3,276,138,0, + 2463,2464,5,188,0,0,2464,2465,5,123,0,0,2465,2466,5,188,0,0,2466,2468, + 3,276,138,0,2467,2463,1,0,0,0,2468,2471,1,0,0,0,2469,2467,1,0,0,0,2469, + 2470,1,0,0,0,2470,275,1,0,0,0,2471,2469,1,0,0,0,2472,2479,3,278,139,0, + 2473,2474,5,188,0,0,2474,2475,5,158,0,0,2475,2476,5,188,0,0,2476,2478, + 3,278,139,0,2477,2473,1,0,0,0,2478,2481,1,0,0,0,2479,2477,1,0,0,0,2479, + 2480,1,0,0,0,2480,277,1,0,0,0,2481,2479,1,0,0,0,2482,2489,3,280,140,0, + 2483,2484,5,188,0,0,2484,2485,5,51,0,0,2485,2486,5,188,0,0,2486,2488, + 3,280,140,0,2487,2483,1,0,0,0,2488,2491,1,0,0,0,2489,2487,1,0,0,0,2489, + 2490,1,0,0,0,2490,279,1,0,0,0,2491,2489,1,0,0,0,2492,2494,5,116,0,0,2493, + 2495,5,188,0,0,2494,2493,1,0,0,0,2494,2495,1,0,0,0,2495,2497,1,0,0,0, + 2496,2492,1,0,0,0,2497,2500,1,0,0,0,2498,2496,1,0,0,0,2498,2499,1,0,0, + 0,2499,2501,1,0,0,0,2500,2498,1,0,0,0,2501,2502,3,282,141,0,2502,281, + 1,0,0,0,2503,2513,3,286,143,0,2504,2506,5,188,0,0,2505,2504,1,0,0,0,2505, + 2506,1,0,0,0,2506,2507,1,0,0,0,2507,2509,3,284,142,0,2508,2510,5,188, + 0,0,2509,2508,1,0,0,0,2509,2510,1,0,0,0,2510,2511,1,0,0,0,2511,2512,3, + 286,143,0,2512,2514,1,0,0,0,2513,2505,1,0,0,0,2513,2514,1,0,0,0,2514, + 2552,1,0,0,0,2515,2517,3,286,143,0,2516,2518,5,188,0,0,2517,2516,1,0, + 0,0,2517,2518,1,0,0,0,2518,2519,1,0,0,0,2519,2521,5,168,0,0,2520,2522, + 5,188,0,0,2521,2520,1,0,0,0,2521,2522,1,0,0,0,2522,2523,1,0,0,0,2523, + 2524,3,286,143,0,2524,2525,1,0,0,0,2525,2526,6,141,-1,0,2526,2552,1,0, + 0,0,2527,2529,3,286,143,0,2528,2530,5,188,0,0,2529,2528,1,0,0,0,2529, + 2530,1,0,0,0,2530,2531,1,0,0,0,2531,2533,3,284,142,0,2532,2534,5,188, + 0,0,2533,2532,1,0,0,0,2533,2534,1,0,0,0,2534,2535,1,0,0,0,2535,2545,3, + 286,143,0,2536,2538,5,188,0,0,2537,2536,1,0,0,0,2537,2538,1,0,0,0,2538, + 2539,1,0,0,0,2539,2541,3,284,142,0,2540,2542,5,188,0,0,2541,2540,1,0, + 0,0,2541,2542,1,0,0,0,2542,2543,1,0,0,0,2543,2544,3,286,143,0,2544,2546, + 1,0,0,0,2545,2537,1,0,0,0,2546,2547,1,0,0,0,2547,2545,1,0,0,0,2547,2548, + 1,0,0,0,2548,2549,1,0,0,0,2549,2550,6,141,-1,0,2550,2552,1,0,0,0,2551, + 2503,1,0,0,0,2551,2515,1,0,0,0,2551,2527,1,0,0,0,2552,283,1,0,0,0,2553, + 2554,7,3,0,0,2554,285,1,0,0,0,2555,2566,3,288,144,0,2556,2558,5,188,0, + 0,2557,2556,1,0,0,0,2557,2558,1,0,0,0,2558,2559,1,0,0,0,2559,2561,5,11, + 0,0,2560,2562,5,188,0,0,2561,2560,1,0,0,0,2561,2562,1,0,0,0,2562,2563, + 1,0,0,0,2563,2565,3,288,144,0,2564,2557,1,0,0,0,2565,2568,1,0,0,0,2566, + 2564,1,0,0,0,2566,2567,1,0,0,0,2567,287,1,0,0,0,2568,2566,1,0,0,0,2569, + 2580,3,290,145,0,2570,2572,5,188,0,0,2571,2570,1,0,0,0,2571,2572,1,0, + 0,0,2572,2573,1,0,0,0,2573,2575,5,17,0,0,2574,2576,5,188,0,0,2575,2574, + 1,0,0,0,2575,2576,1,0,0,0,2576,2577,1,0,0,0,2577,2579,3,290,145,0,2578, + 2571,1,0,0,0,2579,2582,1,0,0,0,2580,2578,1,0,0,0,2580,2581,1,0,0,0,2581, + 289,1,0,0,0,2582,2580,1,0,0,0,2583,2595,3,294,147,0,2584,2586,5,188,0, + 0,2585,2584,1,0,0,0,2585,2586,1,0,0,0,2586,2587,1,0,0,0,2587,2589,3,292, + 146,0,2588,2590,5,188,0,0,2589,2588,1,0,0,0,2589,2590,1,0,0,0,2590,2591, + 1,0,0,0,2591,2592,3,294,147,0,2592,2594,1,0,0,0,2593,2585,1,0,0,0,2594, + 2597,1,0,0,0,2595,2593,1,0,0,0,2595,2596,1,0,0,0,2596,291,1,0,0,0,2597, + 2595,1,0,0,0,2598,2599,7,4,0,0,2599,293,1,0,0,0,2600,2612,3,298,149,0, + 2601,2603,5,188,0,0,2602,2601,1,0,0,0,2602,2603,1,0,0,0,2603,2604,1,0, + 0,0,2604,2606,3,296,148,0,2605,2607,5,188,0,0,2606,2605,1,0,0,0,2606, + 2607,1,0,0,0,2607,2608,1,0,0,0,2608,2609,3,298,149,0,2609,2611,1,0,0, + 0,2610,2602,1,0,0,0,2611,2614,1,0,0,0,2612,2610,1,0,0,0,2612,2613,1,0, + 0,0,2613,295,1,0,0,0,2614,2612,1,0,0,0,2615,2616,7,5,0,0,2616,297,1,0, + 0,0,2617,2629,3,302,151,0,2618,2620,5,188,0,0,2619,2618,1,0,0,0,2619, + 2620,1,0,0,0,2620,2621,1,0,0,0,2621,2623,3,300,150,0,2622,2624,5,188, + 0,0,2623,2622,1,0,0,0,2623,2624,1,0,0,0,2624,2625,1,0,0,0,2625,2626,3, + 302,151,0,2626,2628,1,0,0,0,2627,2619,1,0,0,0,2628,2631,1,0,0,0,2629, + 2627,1,0,0,0,2629,2630,1,0,0,0,2630,299,1,0,0,0,2631,2629,1,0,0,0,2632, + 2633,7,6,0,0,2633,301,1,0,0,0,2634,2645,3,304,152,0,2635,2637,5,188,0, + 0,2636,2635,1,0,0,0,2636,2637,1,0,0,0,2637,2638,1,0,0,0,2638,2640,5,23, + 0,0,2639,2641,5,188,0,0,2640,2639,1,0,0,0,2640,2641,1,0,0,0,2641,2642, + 1,0,0,0,2642,2644,3,304,152,0,2643,2636,1,0,0,0,2644,2647,1,0,0,0,2645, + 2643,1,0,0,0,2645,2646,1,0,0,0,2646,303,1,0,0,0,2647,2645,1,0,0,0,2648, + 2656,3,314,157,0,2649,2657,3,308,154,0,2650,2652,3,306,153,0,2651,2650, + 1,0,0,0,2652,2653,1,0,0,0,2653,2651,1,0,0,0,2653,2654,1,0,0,0,2654,2657, + 1,0,0,0,2655,2657,3,312,156,0,2656,2649,1,0,0,0,2656,2651,1,0,0,0,2656, + 2655,1,0,0,0,2656,2657,1,0,0,0,2657,305,1,0,0,0,2658,2659,5,188,0,0,2659, + 2661,5,99,0,0,2660,2662,5,188,0,0,2661,2660,1,0,0,0,2661,2662,1,0,0,0, + 2662,2663,1,0,0,0,2663,2678,3,316,158,0,2664,2665,5,7,0,0,2665,2666,3, + 272,136,0,2666,2667,5,8,0,0,2667,2678,1,0,0,0,2668,2670,5,7,0,0,2669, + 2671,3,272,136,0,2670,2669,1,0,0,0,2670,2671,1,0,0,0,2671,2672,1,0,0, + 0,2672,2674,7,7,0,0,2673,2675,3,272,136,0,2674,2673,1,0,0,0,2674,2675, + 1,0,0,0,2675,2676,1,0,0,0,2676,2678,5,8,0,0,2677,2658,1,0,0,0,2677,2664, + 1,0,0,0,2677,2668,1,0,0,0,2678,307,1,0,0,0,2679,2691,3,310,155,0,2680, + 2681,5,188,0,0,2681,2682,5,139,0,0,2682,2683,5,188,0,0,2683,2691,5,155, + 0,0,2684,2685,5,188,0,0,2685,2686,5,82,0,0,2686,2687,5,188,0,0,2687,2691, + 5,155,0,0,2688,2689,5,188,0,0,2689,2691,5,66,0,0,2690,2679,1,0,0,0,2690, + 2680,1,0,0,0,2690,2684,1,0,0,0,2690,2688,1,0,0,0,2691,2693,1,0,0,0,2692, + 2694,5,188,0,0,2693,2692,1,0,0,0,2693,2694,1,0,0,0,2694,2695,1,0,0,0, + 2695,2696,3,316,158,0,2696,309,1,0,0,0,2697,2699,5,188,0,0,2698,2697, + 1,0,0,0,2698,2699,1,0,0,0,2699,2700,1,0,0,0,2700,2701,5,24,0,0,2701,311, + 1,0,0,0,2702,2703,5,188,0,0,2703,2704,5,102,0,0,2704,2705,5,188,0,0,2705, + 2713,5,118,0,0,2706,2707,5,188,0,0,2707,2708,5,102,0,0,2708,2709,5,188, + 0,0,2709,2710,5,116,0,0,2710,2711,5,188,0,0,2711,2713,5,118,0,0,2712, + 2702,1,0,0,0,2712,2706,1,0,0,0,2713,313,1,0,0,0,2714,2716,5,171,0,0,2715, + 2717,5,188,0,0,2716,2715,1,0,0,0,2716,2717,1,0,0,0,2717,2719,1,0,0,0, + 2718,2714,1,0,0,0,2719,2722,1,0,0,0,2720,2718,1,0,0,0,2720,2721,1,0,0, + 0,2721,2723,1,0,0,0,2722,2720,1,0,0,0,2723,2728,3,316,158,0,2724,2726, + 5,188,0,0,2725,2724,1,0,0,0,2725,2726,1,0,0,0,2726,2727,1,0,0,0,2727, + 2729,5,172,0,0,2728,2725,1,0,0,0,2728,2729,1,0,0,0,2729,315,1,0,0,0,2730, + 2737,3,318,159,0,2731,2733,5,188,0,0,2732,2731,1,0,0,0,2732,2733,1,0, + 0,0,2733,2734,1,0,0,0,2734,2736,3,354,177,0,2735,2732,1,0,0,0,2736,2739, + 1,0,0,0,2737,2735,1,0,0,0,2737,2738,1,0,0,0,2738,317,1,0,0,0,2739,2737, + 1,0,0,0,2740,2750,3,326,163,0,2741,2750,3,364,182,0,2742,2750,3,356,178, + 0,2743,2750,3,338,169,0,2744,2750,3,340,170,0,2745,2750,3,350,175,0,2746, + 2750,3,352,176,0,2747,2750,3,360,180,0,2748,2750,3,320,160,0,2749,2740, + 1,0,0,0,2749,2741,1,0,0,0,2749,2742,1,0,0,0,2749,2743,1,0,0,0,2749,2744, + 1,0,0,0,2749,2745,1,0,0,0,2749,2746,1,0,0,0,2749,2747,1,0,0,0,2749,2748, + 1,0,0,0,2750,319,1,0,0,0,2751,2753,5,48,0,0,2752,2754,5,188,0,0,2753, + 2752,1,0,0,0,2753,2754,1,0,0,0,2754,2755,1,0,0,0,2755,2757,5,2,0,0,2756, + 2758,5,188,0,0,2757,2756,1,0,0,0,2757,2758,1,0,0,0,2758,2759,1,0,0,0, + 2759,2761,3,322,161,0,2760,2762,5,188,0,0,2761,2760,1,0,0,0,2761,2762, + 1,0,0,0,2762,2763,1,0,0,0,2763,2764,5,3,0,0,2764,2808,1,0,0,0,2765,2767, + 5,46,0,0,2766,2768,5,188,0,0,2767,2766,1,0,0,0,2767,2768,1,0,0,0,2768, + 2769,1,0,0,0,2769,2771,5,2,0,0,2770,2772,5,188,0,0,2771,2770,1,0,0,0, + 2771,2772,1,0,0,0,2772,2773,1,0,0,0,2773,2775,3,322,161,0,2774,2776,5, + 188,0,0,2775,2774,1,0,0,0,2775,2776,1,0,0,0,2776,2777,1,0,0,0,2777,2778, + 5,3,0,0,2778,2808,1,0,0,0,2779,2781,5,117,0,0,2780,2782,5,188,0,0,2781, + 2780,1,0,0,0,2781,2782,1,0,0,0,2782,2783,1,0,0,0,2783,2785,5,2,0,0,2784, + 2786,5,188,0,0,2785,2784,1,0,0,0,2785,2786,1,0,0,0,2786,2787,1,0,0,0, + 2787,2789,3,322,161,0,2788,2790,5,188,0,0,2789,2788,1,0,0,0,2789,2790, + 1,0,0,0,2790,2791,1,0,0,0,2791,2792,5,3,0,0,2792,2808,1,0,0,0,2793,2795, + 5,159,0,0,2794,2796,5,188,0,0,2795,2794,1,0,0,0,2795,2796,1,0,0,0,2796, + 2797,1,0,0,0,2797,2799,5,2,0,0,2798,2800,5,188,0,0,2799,2798,1,0,0,0, + 2799,2800,1,0,0,0,2800,2801,1,0,0,0,2801,2803,3,322,161,0,2802,2804,5, + 188,0,0,2803,2802,1,0,0,0,2803,2804,1,0,0,0,2804,2805,1,0,0,0,2805,2806, + 5,3,0,0,2806,2808,1,0,0,0,2807,2751,1,0,0,0,2807,2765,1,0,0,0,2807,2779, + 1,0,0,0,2807,2793,1,0,0,0,2808,321,1,0,0,0,2809,2810,3,324,162,0,2810, + 2811,5,188,0,0,2811,2812,3,230,115,0,2812,323,1,0,0,0,2813,2814,3,360, + 180,0,2814,2815,5,188,0,0,2815,2816,5,99,0,0,2816,2817,5,188,0,0,2817, + 2818,3,272,136,0,2818,325,1,0,0,0,2819,2826,3,362,181,0,2820,2826,5,173, + 0,0,2821,2826,3,328,164,0,2822,2826,5,118,0,0,2823,2826,3,330,165,0,2824, + 2826,3,334,167,0,2825,2819,1,0,0,0,2825,2820,1,0,0,0,2825,2821,1,0,0, + 0,2825,2822,1,0,0,0,2825,2823,1,0,0,0,2825,2824,1,0,0,0,2826,327,1,0, + 0,0,2827,2828,7,8,0,0,2828,329,1,0,0,0,2829,2831,5,7,0,0,2830,2832,5, + 188,0,0,2831,2830,1,0,0,0,2831,2832,1,0,0,0,2832,2846,1,0,0,0,2833,2835, + 3,272,136,0,2834,2836,5,188,0,0,2835,2834,1,0,0,0,2835,2836,1,0,0,0,2836, + 2843,1,0,0,0,2837,2839,3,332,166,0,2838,2840,5,188,0,0,2839,2838,1,0, + 0,0,2839,2840,1,0,0,0,2840,2842,1,0,0,0,2841,2837,1,0,0,0,2842,2845,1, + 0,0,0,2843,2841,1,0,0,0,2843,2844,1,0,0,0,2844,2847,1,0,0,0,2845,2843, + 1,0,0,0,2846,2833,1,0,0,0,2846,2847,1,0,0,0,2847,2848,1,0,0,0,2848,2849, + 5,8,0,0,2849,331,1,0,0,0,2850,2852,5,4,0,0,2851,2853,5,188,0,0,2852,2851, + 1,0,0,0,2852,2853,1,0,0,0,2853,2855,1,0,0,0,2854,2856,3,272,136,0,2855, + 2854,1,0,0,0,2855,2856,1,0,0,0,2856,333,1,0,0,0,2857,2859,5,9,0,0,2858, + 2860,5,188,0,0,2859,2858,1,0,0,0,2859,2860,1,0,0,0,2860,2861,1,0,0,0, + 2861,2863,3,336,168,0,2862,2864,5,188,0,0,2863,2862,1,0,0,0,2863,2864, + 1,0,0,0,2864,2875,1,0,0,0,2865,2867,5,4,0,0,2866,2868,5,188,0,0,2867, + 2866,1,0,0,0,2867,2868,1,0,0,0,2868,2869,1,0,0,0,2869,2871,3,336,168, + 0,2870,2872,5,188,0,0,2871,2870,1,0,0,0,2871,2872,1,0,0,0,2872,2874,1, + 0,0,0,2873,2865,1,0,0,0,2874,2877,1,0,0,0,2875,2873,1,0,0,0,2875,2876, + 1,0,0,0,2876,2878,1,0,0,0,2877,2875,1,0,0,0,2878,2879,5,10,0,0,2879,335, + 1,0,0,0,2880,2883,3,376,188,0,2881,2883,5,173,0,0,2882,2880,1,0,0,0,2882, + 2881,1,0,0,0,2883,2885,1,0,0,0,2884,2886,5,188,0,0,2885,2884,1,0,0,0, + 2885,2886,1,0,0,0,2886,2887,1,0,0,0,2887,2889,5,169,0,0,2888,2890,5,188, + 0,0,2889,2888,1,0,0,0,2889,2890,1,0,0,0,2890,2891,1,0,0,0,2891,2892,3, + 272,136,0,2892,337,1,0,0,0,2893,2895,5,2,0,0,2894,2896,5,188,0,0,2895, + 2894,1,0,0,0,2895,2896,1,0,0,0,2896,2897,1,0,0,0,2897,2899,3,272,136, + 0,2898,2900,5,188,0,0,2899,2898,1,0,0,0,2899,2900,1,0,0,0,2900,2901,1, + 0,0,0,2901,2902,5,3,0,0,2902,339,1,0,0,0,2903,2905,5,68,0,0,2904,2906, + 5,188,0,0,2905,2904,1,0,0,0,2905,2906,1,0,0,0,2906,2907,1,0,0,0,2907, + 2909,5,2,0,0,2908,2910,5,188,0,0,2909,2908,1,0,0,0,2909,2910,1,0,0,0, + 2910,2911,1,0,0,0,2911,2913,5,166,0,0,2912,2914,5,188,0,0,2913,2912,1, + 0,0,0,2913,2914,1,0,0,0,2914,2915,1,0,0,0,2915,2981,5,3,0,0,2916,2918, + 5,60,0,0,2917,2919,5,188,0,0,2918,2917,1,0,0,0,2918,2919,1,0,0,0,2919, + 2920,1,0,0,0,2920,2922,5,2,0,0,2921,2923,5,188,0,0,2922,2921,1,0,0,0, + 2922,2923,1,0,0,0,2923,2924,1,0,0,0,2924,2926,3,344,172,0,2925,2927,5, + 188,0,0,2926,2925,1,0,0,0,2926,2927,1,0,0,0,2927,2938,1,0,0,0,2928,2930, + 5,52,0,0,2929,2931,5,188,0,0,2930,2929,1,0,0,0,2930,2931,1,0,0,0,2931, + 2932,1,0,0,0,2932,2939,3,142,71,0,2933,2935,5,4,0,0,2934,2936,5,188,0, + 0,2935,2934,1,0,0,0,2935,2936,1,0,0,0,2936,2937,1,0,0,0,2937,2939,3,344, + 172,0,2938,2928,1,0,0,0,2938,2933,1,0,0,0,2939,2941,1,0,0,0,2940,2942, + 5,188,0,0,2941,2940,1,0,0,0,2941,2942,1,0,0,0,2942,2943,1,0,0,0,2943, + 2944,5,3,0,0,2944,2981,1,0,0,0,2945,2947,3,342,171,0,2946,2948,5,188, + 0,0,2947,2946,1,0,0,0,2947,2948,1,0,0,0,2948,2949,1,0,0,0,2949,2951,5, + 2,0,0,2950,2952,5,188,0,0,2951,2950,1,0,0,0,2951,2952,1,0,0,0,2952,2957, + 1,0,0,0,2953,2955,5,78,0,0,2954,2956,5,188,0,0,2955,2954,1,0,0,0,2955, + 2956,1,0,0,0,2956,2958,1,0,0,0,2957,2953,1,0,0,0,2957,2958,1,0,0,0,2958, + 2976,1,0,0,0,2959,2961,3,344,172,0,2960,2962,5,188,0,0,2961,2960,1,0, + 0,0,2961,2962,1,0,0,0,2962,2973,1,0,0,0,2963,2965,5,4,0,0,2964,2966,5, + 188,0,0,2965,2964,1,0,0,0,2965,2966,1,0,0,0,2966,2967,1,0,0,0,2967,2969, + 3,344,172,0,2968,2970,5,188,0,0,2969,2968,1,0,0,0,2969,2970,1,0,0,0,2970, + 2972,1,0,0,0,2971,2963,1,0,0,0,2972,2975,1,0,0,0,2973,2971,1,0,0,0,2973, + 2974,1,0,0,0,2974,2977,1,0,0,0,2975,2973,1,0,0,0,2976,2959,1,0,0,0,2976, + 2977,1,0,0,0,2977,2978,1,0,0,0,2978,2979,5,3,0,0,2979,2981,1,0,0,0,2980, + 2903,1,0,0,0,2980,2916,1,0,0,0,2980,2945,1,0,0,0,2981,341,1,0,0,0,2982, + 2983,3,376,188,0,2983,343,1,0,0,0,2984,2986,3,376,188,0,2985,2987,5,188, + 0,0,2986,2985,1,0,0,0,2986,2987,1,0,0,0,2987,2988,1,0,0,0,2988,2989,5, + 169,0,0,2989,2991,5,6,0,0,2990,2992,5,188,0,0,2991,2990,1,0,0,0,2991, + 2992,1,0,0,0,2992,2994,1,0,0,0,2993,2984,1,0,0,0,2993,2994,1,0,0,0,2994, + 2995,1,0,0,0,2995,2998,3,272,136,0,2996,2998,3,346,173,0,2997,2993,1, + 0,0,0,2997,2996,1,0,0,0,2998,345,1,0,0,0,2999,3001,3,348,174,0,3000,3002, + 5,188,0,0,3001,3000,1,0,0,0,3001,3002,1,0,0,0,3002,3003,1,0,0,0,3003, + 3004,5,171,0,0,3004,3006,5,15,0,0,3005,3007,5,188,0,0,3006,3005,1,0,0, + 0,3006,3007,1,0,0,0,3007,3008,1,0,0,0,3008,3010,3,272,136,0,3009,3011, + 5,188,0,0,3010,3009,1,0,0,0,3010,3011,1,0,0,0,3011,347,1,0,0,0,3012,3037, + 3,376,188,0,3013,3015,5,2,0,0,3014,3016,5,188,0,0,3015,3014,1,0,0,0,3015, + 3016,1,0,0,0,3016,3017,1,0,0,0,3017,3019,3,376,188,0,3018,3020,5,188, + 0,0,3019,3018,1,0,0,0,3019,3020,1,0,0,0,3020,3031,1,0,0,0,3021,3023,5, + 4,0,0,3022,3024,5,188,0,0,3023,3022,1,0,0,0,3023,3024,1,0,0,0,3024,3025, + 1,0,0,0,3025,3027,3,376,188,0,3026,3028,5,188,0,0,3027,3026,1,0,0,0,3027, + 3028,1,0,0,0,3028,3030,1,0,0,0,3029,3021,1,0,0,0,3030,3033,1,0,0,0,3031, + 3029,1,0,0,0,3031,3032,1,0,0,0,3032,3034,1,0,0,0,3033,3031,1,0,0,0,3034, + 3035,5,3,0,0,3035,3037,1,0,0,0,3036,3012,1,0,0,0,3036,3013,1,0,0,0,3037, + 349,1,0,0,0,3038,3043,3,240,120,0,3039,3041,5,188,0,0,3040,3039,1,0,0, + 0,3040,3041,1,0,0,0,3041,3042,1,0,0,0,3042,3044,3,242,121,0,3043,3040, + 1,0,0,0,3044,3045,1,0,0,0,3045,3043,1,0,0,0,3045,3046,1,0,0,0,3046,351, + 1,0,0,0,3047,3049,7,9,0,0,3048,3050,5,188,0,0,3049,3048,1,0,0,0,3049, + 3050,1,0,0,0,3050,3051,1,0,0,0,3051,3053,5,9,0,0,3052,3054,5,188,0,0, + 3053,3052,1,0,0,0,3053,3054,1,0,0,0,3054,3055,1,0,0,0,3055,3057,5,109, + 0,0,3056,3058,5,188,0,0,3057,3056,1,0,0,0,3057,3058,1,0,0,0,3058,3059, + 1,0,0,0,3059,3064,3,232,116,0,3060,3062,5,188,0,0,3061,3060,1,0,0,0,3061, + 3062,1,0,0,0,3062,3063,1,0,0,0,3063,3065,3,230,115,0,3064,3061,1,0,0, + 0,3064,3065,1,0,0,0,3065,3070,1,0,0,0,3066,3068,5,188,0,0,3067,3066,1, + 0,0,0,3067,3068,1,0,0,0,3068,3069,1,0,0,0,3069,3071,3,194,97,0,3070,3067, + 1,0,0,0,3070,3071,1,0,0,0,3071,3073,1,0,0,0,3072,3074,5,188,0,0,3073, + 3072,1,0,0,0,3073,3074,1,0,0,0,3074,3075,1,0,0,0,3075,3076,5,10,0,0,3076, + 353,1,0,0,0,3077,3079,5,5,0,0,3078,3080,5,188,0,0,3079,3078,1,0,0,0,3079, + 3080,1,0,0,0,3080,3083,1,0,0,0,3081,3084,3,368,184,0,3082,3084,5,166, + 0,0,3083,3081,1,0,0,0,3083,3082,1,0,0,0,3084,355,1,0,0,0,3085,3090,5, + 59,0,0,3086,3088,5,188,0,0,3087,3086,1,0,0,0,3087,3088,1,0,0,0,3088,3089, + 1,0,0,0,3089,3091,3,358,179,0,3090,3087,1,0,0,0,3091,3092,1,0,0,0,3092, + 3090,1,0,0,0,3092,3093,1,0,0,0,3093,3108,1,0,0,0,3094,3096,5,59,0,0,3095, + 3097,5,188,0,0,3096,3095,1,0,0,0,3096,3097,1,0,0,0,3097,3098,1,0,0,0, + 3098,3103,3,272,136,0,3099,3101,5,188,0,0,3100,3099,1,0,0,0,3100,3101, + 1,0,0,0,3101,3102,1,0,0,0,3102,3104,3,358,179,0,3103,3100,1,0,0,0,3104, + 3105,1,0,0,0,3105,3103,1,0,0,0,3105,3106,1,0,0,0,3106,3108,1,0,0,0,3107, + 3085,1,0,0,0,3107,3094,1,0,0,0,3108,3117,1,0,0,0,3109,3111,5,188,0,0, + 3110,3109,1,0,0,0,3110,3111,1,0,0,0,3111,3112,1,0,0,0,3112,3114,5,80, + 0,0,3113,3115,5,188,0,0,3114,3113,1,0,0,0,3114,3115,1,0,0,0,3115,3116, + 1,0,0,0,3116,3118,3,272,136,0,3117,3110,1,0,0,0,3117,3118,1,0,0,0,3118, + 3120,1,0,0,0,3119,3121,5,188,0,0,3120,3119,1,0,0,0,3120,3121,1,0,0,0, + 3121,3122,1,0,0,0,3122,3123,5,81,0,0,3123,357,1,0,0,0,3124,3126,5,153, + 0,0,3125,3127,5,188,0,0,3126,3125,1,0,0,0,3126,3127,1,0,0,0,3127,3128, + 1,0,0,0,3128,3130,3,272,136,0,3129,3131,5,188,0,0,3130,3129,1,0,0,0,3130, + 3131,1,0,0,0,3131,3132,1,0,0,0,3132,3134,5,142,0,0,3133,3135,5,188,0, + 0,3134,3133,1,0,0,0,3134,3135,1,0,0,0,3135,3136,1,0,0,0,3136,3137,3,272, + 136,0,3137,359,1,0,0,0,3138,3139,3,376,188,0,3139,361,1,0,0,0,3140,3143, + 3,372,186,0,3141,3143,3,370,185,0,3142,3140,1,0,0,0,3142,3141,1,0,0,0, + 3143,363,1,0,0,0,3144,3147,5,25,0,0,3145,3148,3,376,188,0,3146,3148,5, + 175,0,0,3147,3145,1,0,0,0,3147,3146,1,0,0,0,3148,365,1,0,0,0,3149,3151, + 3,318,159,0,3150,3152,5,188,0,0,3151,3150,1,0,0,0,3151,3152,1,0,0,0,3152, + 3153,1,0,0,0,3153,3154,3,354,177,0,3154,367,1,0,0,0,3155,3156,3,376,188, + 0,3156,369,1,0,0,0,3157,3158,5,175,0,0,3158,371,1,0,0,0,3159,3160,7,10, + 0,0,3160,373,1,0,0,0,3161,3164,3,376,188,0,3162,3163,5,5,0,0,3163,3165, + 3,376,188,0,3164,3162,1,0,0,0,3164,3165,1,0,0,0,3165,375,1,0,0,0,3166, + 3172,5,184,0,0,3167,3168,5,187,0,0,3168,3172,6,188,-1,0,3169,3172,5,176, + 0,0,3170,3172,3,378,189,0,3171,3166,1,0,0,0,3171,3167,1,0,0,0,3171,3169, + 1,0,0,0,3171,3170,1,0,0,0,3172,377,1,0,0,0,3173,3174,7,11,0,0,3174,379, + 1,0,0,0,3175,3176,7,12,0,0,3176,381,1,0,0,0,3177,3178,7,13,0,0,3178,383, + 1,0,0,0,3179,3180,7,14,0,0,3180,385,1,0,0,0,543,388,392,397,401,406,409, + 413,416,444,450,457,461,465,469,472,476,480,484,489,493,495,502,506,515, + 520,530,534,538,543,556,560,568,572,576,580,588,592,596,600,615,620,626, + 630,633,636,642,646,651,654,658,661,664,668,672,678,682,687,705,716,722, + 726,733,753,757,760,763,766,769,773,778,782,792,796,801,806,811,817,821, + 825,830,837,841,845,848,865,869,873,877,881,884,887,895,900,904,908,912, + 921,925,930,934,938,942,946,948,952,956,958,966,971,975,979,983,988,994, + 998,1011,1015,1018,1021,1024,1028,1032,1035,1038,1042,1046,1052,1056, + 1060,1064,1070,1074,1078,1082,1088,1092,1097,1109,1113,1117,1122,1140, + 1147,1160,1167,1183,1187,1196,1204,1207,1217,1220,1228,1231,1237,1240, + 1246,1261,1271,1274,1278,1282,1301,1308,1315,1326,1349,1358,1368,1372, + 1376,1380,1385,1389,1399,1403,1408,1417,1421,1426,1432,1438,1444,1448, + 1452,1458,1462,1466,1472,1476,1480,1486,1490,1494,1498,1502,1508,1512, + 1516,1520,1524,1534,1540,1547,1552,1558,1563,1580,1586,1592,1596,1600, + 1609,1623,1628,1633,1637,1642,1648,1653,1656,1660,1664,1668,1674,1678, + 1683,1688,1692,1695,1697,1701,1705,1711,1715,1720,1724,1733,1739,1747, + 1751,1755,1759,1766,1770,1774,1778,1781,1784,1791,1797,1801,1806,1813, + 1816,1819,1824,1828,1832,1837,1841,1850,1854,1859,1873,1875,1877,1882, + 1892,1898,1905,1918,1922,1926,1930,1935,1940,1944,1948,1952,1956,1960, + 1966,1970,1974,1978,1983,1989,1992,1998,2001,2007,2011,2015,2019,2023, + 2028,2033,2037,2042,2045,2054,2063,2068,2081,2084,2092,2096,2101,2106, + 2110,2115,2121,2126,2133,2137,2141,2143,2147,2149,2153,2155,2161,2167, + 2171,2174,2177,2183,2186,2189,2193,2199,2202,2205,2209,2213,2217,2219, + 2223,2225,2229,2231,2235,2237,2243,2247,2251,2255,2259,2263,2267,2271, + 2275,2278,2284,2288,2292,2295,2300,2305,2309,2313,2316,2319,2324,2329, + 2332,2335,2338,2341,2344,2348,2352,2356,2360,2370,2373,2376,2380,2383, + 2386,2390,2394,2398,2402,2406,2410,2412,2415,2419,2423,2427,2431,2433, + 2439,2442,2445,2456,2469,2479,2489,2494,2498,2505,2509,2513,2517,2521, + 2529,2533,2537,2541,2547,2551,2557,2561,2566,2571,2575,2580,2585,2589, + 2595,2602,2606,2612,2619,2623,2629,2636,2640,2645,2653,2656,2661,2670, + 2674,2677,2690,2693,2698,2712,2716,2720,2725,2728,2732,2737,2749,2753, + 2757,2761,2767,2771,2775,2781,2785,2789,2795,2799,2803,2807,2825,2831, + 2835,2839,2843,2846,2852,2855,2859,2863,2867,2871,2875,2882,2885,2889, + 2895,2899,2905,2909,2913,2918,2922,2926,2930,2935,2938,2941,2947,2951, + 2955,2957,2961,2965,2969,2973,2976,2980,2986,2991,2993,2997,3001,3006, + 3010,3015,3019,3023,3027,3031,3036,3040,3045,3049,3053,3057,3061,3064, + 3067,3070,3073,3079,3083,3087,3092,3096,3100,3105,3107,3110,3114,3117, + 3120,3126,3130,3134,3142,3147,3151,3164,3171 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -1506,29 +1523,29 @@ CypherParser::IC_StatementsContext* CypherParser::iC_Statements() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(382); + setState(386); oC_Cypher(); - setState(393); + setState(397); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 2, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(384); + setState(388); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(383); + setState(387); match(CypherParser::SP); } - setState(386); + setState(390); match(CypherParser::T__0); - setState(388); + setState(392); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 1, _ctx)) { case 1: { - setState(387); + setState(391); match(CypherParser::SP); break; } @@ -1536,22 +1553,22 @@ CypherParser::IC_StatementsContext* CypherParser::iC_Statements() { default: break; } - setState(390); + setState(394); oC_Cypher(); } - setState(395); + setState(399); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 2, _ctx); } - setState(397); + setState(401); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(396); + setState(400); match(CypherParser::SP); } - setState(399); + setState(403); match(CypherParser::EOF); } @@ -1606,41 +1623,41 @@ CypherParser::OC_CypherContext* CypherParser::oC_Cypher() { }); try { enterOuterAlt(_localctx, 1); - setState(402); + setState(406); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::EXPLAIN || _la == CypherParser::PROFILE) { - setState(401); + setState(405); oC_AnyCypherOption(); } - setState(405); + setState(409); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(404); + setState(408); match(CypherParser::SP); } - setState(407); + setState(411); oC_Statement(); - setState(412); + setState(416); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 7, _ctx)) { case 1: { - setState(409); + setState(413); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(408); + setState(412); match(CypherParser::SP); } - setState(411); + setState(415); match(CypherParser::T__0); break; } @@ -1787,187 +1804,187 @@ CypherParser::OC_StatementContext* CypherParser::oC_Statement() { exitRule(); }); try { - setState(440); + setState(444); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 8, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(414); + setState(418); oC_Query(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(415); + setState(419); iC_Analyze(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(416); + setState(420); iC_CreateUser(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(417); + setState(421); iC_CreateRole(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(418); + setState(422); iC_CreateNodeTable(); break; } case 6: { enterOuterAlt(_localctx, 6); - setState(419); + setState(423); iC_CreateRelTable(); break; } case 7: { enterOuterAlt(_localctx, 7); - setState(420); + setState(424); iC_CreateIndex(); break; } case 8: { enterOuterAlt(_localctx, 8); - setState(421); + setState(425); iC_CreateSequence(); break; } case 9: { enterOuterAlt(_localctx, 9); - setState(422); + setState(426); iC_CreateType(); break; } case 10: { enterOuterAlt(_localctx, 10); - setState(423); + setState(427); iC_Drop(); break; } case 11: { enterOuterAlt(_localctx, 11); - setState(424); + setState(428); iC_AlterTable(); break; } case 12: { enterOuterAlt(_localctx, 12); - setState(425); + setState(429); iC_CopyFrom(); break; } case 13: { enterOuterAlt(_localctx, 13); - setState(426); + setState(430); iC_CopyFromByColumn(); break; } case 14: { enterOuterAlt(_localctx, 14); - setState(427); + setState(431); iC_CopyTO(); break; } case 15: { enterOuterAlt(_localctx, 15); - setState(428); + setState(432); iC_StandaloneCall(); break; } case 16: { enterOuterAlt(_localctx, 16); - setState(429); + setState(433); iC_CreateMacro(); break; } case 17: { enterOuterAlt(_localctx, 17); - setState(430); + setState(434); iC_CommentOn(); break; } case 18: { enterOuterAlt(_localctx, 18); - setState(431); + setState(435); iC_Transaction(); break; } case 19: { enterOuterAlt(_localctx, 19); - setState(432); + setState(436); iC_Extension(); break; } case 20: { enterOuterAlt(_localctx, 20); - setState(433); + setState(437); iC_ExportDatabase(); break; } case 21: { enterOuterAlt(_localctx, 21); - setState(434); + setState(438); iC_ImportDatabase(); break; } case 22: { enterOuterAlt(_localctx, 22); - setState(435); + setState(439); iC_AttachDatabase(); break; } case 23: { enterOuterAlt(_localctx, 23); - setState(436); + setState(440); iC_DetachDatabase(); break; } case 24: { enterOuterAlt(_localctx, 24); - setState(437); + setState(441); iC_UseDatabase(); break; } case 25: { enterOuterAlt(_localctx, 25); - setState(438); + setState(442); iC_CreateGraph(); break; } case 26: { enterOuterAlt(_localctx, 26); - setState(439); + setState(443); iC_UseGraph(); break; } @@ -2044,18 +2061,18 @@ CypherParser::IC_CopyFromContext* CypherParser::iC_CopyFrom() { }); try { enterOuterAlt(_localctx, 1); - setState(442); + setState(446); match(CypherParser::COPY); - setState(443); + setState(447); match(CypherParser::SP); - setState(444); + setState(448); oC_SchemaName(); - setState(446); + setState(450); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 9, _ctx)) { case 1: { - setState(445); + setState(449); iC_ColumnNames(); break; } @@ -2063,48 +2080,48 @@ CypherParser::IC_CopyFromContext* CypherParser::iC_CopyFrom() { default: break; } - setState(448); + setState(452); match(CypherParser::SP); - setState(449); + setState(453); match(CypherParser::FROM); - setState(450); + setState(454); match(CypherParser::SP); - setState(451); + setState(455); iC_ScanSource(); - setState(465); + setState(469); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 13, _ctx)) { case 1: { - setState(453); + setState(457); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(452); + setState(456); match(CypherParser::SP); } - setState(455); + setState(459); match(CypherParser::T__1); - setState(457); + setState(461); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(456); + setState(460); match(CypherParser::SP); } - setState(459); + setState(463); iC_Options(); - setState(461); + setState(465); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(460); + setState(464); match(CypherParser::SP); } - setState(463); + setState(467); match(CypherParser::T__2); break; } @@ -2166,74 +2183,74 @@ CypherParser::IC_ColumnNamesContext* CypherParser::iC_ColumnNames() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(468); + setState(472); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(467); + setState(471); match(CypherParser::SP); } - setState(470); + setState(474); match(CypherParser::T__1); - setState(472); + setState(476); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(471); + setState(475); match(CypherParser::SP); } - setState(491); + setState(495); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -6370763885380632576) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9219449713480129315) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 324400320977652447) != 0)) { - setState(474); + ((1ULL << (_la - 128)) & 648800641955304671) != 0)) { + setState(478); oC_SchemaName(); - setState(485); + setState(489); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 18, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(476); + setState(480); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(475); + setState(479); match(CypherParser::SP); } - setState(478); + setState(482); match(CypherParser::T__3); - setState(480); + setState(484); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(479); + setState(483); match(CypherParser::SP); } - setState(482); + setState(486); oC_SchemaName(); } - setState(487); + setState(491); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 18, _ctx); } - setState(489); + setState(493); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(488); + setState(492); match(CypherParser::SP); } } - setState(493); + setState(497); match(CypherParser::T__2); } @@ -2303,79 +2320,79 @@ CypherParser::IC_ScanSourceContext* CypherParser::iC_ScanSource() { exitRule(); }); try { - setState(516); + setState(520); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 24, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(495); + setState(499); iC_FilePaths(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(496); + setState(500); match(CypherParser::T__1); - setState(498); + setState(502); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(497); + setState(501); match(CypherParser::SP); } - setState(500); + setState(504); oC_Query(); - setState(502); + setState(506); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(501); + setState(505); match(CypherParser::SP); } - setState(504); + setState(508); match(CypherParser::T__2); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(506); + setState(510); oC_Parameter(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(507); + setState(511); oC_Variable(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(508); + setState(512); oC_Variable(); - setState(509); + setState(513); match(CypherParser::T__4); - setState(511); + setState(515); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(510); + setState(514); match(CypherParser::SP); } - setState(513); + setState(517); oC_SchemaName(); break; } case 6: { enterOuterAlt(_localctx, 6); - setState(515); + setState(519); oC_FunctionInvocation(); break; } @@ -2456,67 +2473,67 @@ CypherParser::IC_CopyFromByColumnContext* CypherParser::iC_CopyFromByColumn() { }); try { enterOuterAlt(_localctx, 1); - setState(518); + setState(522); match(CypherParser::COPY); - setState(519); + setState(523); match(CypherParser::SP); - setState(520); + setState(524); oC_SchemaName(); - setState(521); + setState(525); match(CypherParser::SP); - setState(522); + setState(526); match(CypherParser::FROM); - setState(523); + setState(527); match(CypherParser::SP); - setState(524); + setState(528); match(CypherParser::T__1); - setState(526); + setState(530); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(525); + setState(529); match(CypherParser::SP); } - setState(528); + setState(532); match(CypherParser::StringLiteral); - setState(539); + setState(543); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3 || _la == CypherParser::SP) { - setState(530); + setState(534); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(529); + setState(533); match(CypherParser::SP); } - setState(532); + setState(536); match(CypherParser::T__3); - setState(534); + setState(538); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(533); + setState(537); match(CypherParser::SP); } - setState(536); + setState(540); match(CypherParser::StringLiteral); - setState(541); + setState(545); _errHandler->sync(this); _la = _input->LA(1); } - setState(542); + setState(546); match(CypherParser::T__2); - setState(543); + setState(547); match(CypherParser::SP); - setState(544); + setState(548); match(CypherParser::BY); - setState(545); + setState(549); match(CypherParser::SP); - setState(546); + setState(550); match(CypherParser::COLUMN); } @@ -2583,74 +2600,74 @@ CypherParser::IC_CopyTOContext* CypherParser::iC_CopyTO() { }); try { enterOuterAlt(_localctx, 1); - setState(548); + setState(552); match(CypherParser::COPY); - setState(549); + setState(553); match(CypherParser::SP); - setState(550); + setState(554); match(CypherParser::T__1); - setState(552); + setState(556); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(551); + setState(555); match(CypherParser::SP); } - setState(554); + setState(558); oC_Query(); - setState(556); + setState(560); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(555); + setState(559); match(CypherParser::SP); } - setState(558); + setState(562); match(CypherParser::T__2); - setState(559); + setState(563); match(CypherParser::SP); - setState(560); + setState(564); match(CypherParser::TO); - setState(561); + setState(565); match(CypherParser::SP); - setState(562); + setState(566); match(CypherParser::StringLiteral); - setState(576); + setState(580); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 34, _ctx)) { case 1: { - setState(564); + setState(568); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(563); + setState(567); match(CypherParser::SP); } - setState(566); + setState(570); match(CypherParser::T__1); - setState(568); + setState(572); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(567); + setState(571); match(CypherParser::SP); } - setState(570); + setState(574); iC_Options(); - setState(572); + setState(576); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(571); + setState(575); match(CypherParser::SP); } - setState(574); + setState(578); match(CypherParser::T__2); break; } @@ -2719,50 +2736,50 @@ CypherParser::IC_ExportDatabaseContext* CypherParser::iC_ExportDatabase() { }); try { enterOuterAlt(_localctx, 1); - setState(578); + setState(582); match(CypherParser::EXPORT); - setState(579); + setState(583); match(CypherParser::SP); - setState(580); + setState(584); match(CypherParser::DATABASE); - setState(581); + setState(585); match(CypherParser::SP); - setState(582); + setState(586); match(CypherParser::StringLiteral); - setState(596); + setState(600); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 38, _ctx)) { case 1: { - setState(584); + setState(588); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(583); + setState(587); match(CypherParser::SP); } - setState(586); + setState(590); match(CypherParser::T__1); - setState(588); + setState(592); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(587); + setState(591); match(CypherParser::SP); } - setState(590); + setState(594); iC_Options(); - setState(592); + setState(596); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(591); + setState(595); match(CypherParser::SP); } - setState(594); + setState(598); match(CypherParser::T__2); break; } @@ -2826,15 +2843,15 @@ CypherParser::IC_ImportDatabaseContext* CypherParser::iC_ImportDatabase() { }); try { enterOuterAlt(_localctx, 1); - setState(598); + setState(602); match(CypherParser::IMPORT); - setState(599); + setState(603); match(CypherParser::SP); - setState(600); + setState(604); match(CypherParser::DATABASE); - setState(601); + setState(605); match(CypherParser::SP); - setState(602); + setState(606); match(CypherParser::StringLiteral); } @@ -2909,24 +2926,24 @@ CypherParser::IC_AttachDatabaseContext* CypherParser::iC_AttachDatabase() { }); try { enterOuterAlt(_localctx, 1); - setState(604); + setState(608); match(CypherParser::ATTACH); - setState(605); + setState(609); match(CypherParser::SP); - setState(606); + setState(610); match(CypherParser::StringLiteral); - setState(611); + setState(615); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 39, _ctx)) { case 1: { - setState(607); + setState(611); match(CypherParser::SP); - setState(608); + setState(612); match(CypherParser::AS); - setState(609); + setState(613); match(CypherParser::SP); - setState(610); + setState(614); oC_SchemaName(); break; } @@ -2934,48 +2951,48 @@ CypherParser::IC_AttachDatabaseContext* CypherParser::iC_AttachDatabase() { default: break; } - setState(613); + setState(617); match(CypherParser::SP); - setState(614); + setState(618); match(CypherParser::T__1); - setState(616); + setState(620); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(615); + setState(619); match(CypherParser::SP); } - setState(618); + setState(622); match(CypherParser::DBTYPE); - setState(619); + setState(623); match(CypherParser::SP); - setState(620); + setState(624); oC_SymbolicName(); - setState(629); + setState(633); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 43, _ctx)) { case 1: { - setState(622); + setState(626); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(621); + setState(625); match(CypherParser::SP); } - setState(624); + setState(628); match(CypherParser::T__3); - setState(626); + setState(630); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(625); + setState(629); match(CypherParser::SP); } - setState(628); + setState(632); iC_Options(); break; } @@ -2983,15 +3000,15 @@ CypherParser::IC_AttachDatabaseContext* CypherParser::iC_AttachDatabase() { default: break; } - setState(632); + setState(636); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(631); + setState(635); match(CypherParser::SP); } - setState(634); + setState(638); match(CypherParser::T__2); } @@ -3049,46 +3066,46 @@ CypherParser::IC_OptionContext* CypherParser::iC_Option() { exitRule(); }); try { - setState(660); + setState(664); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 51, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(636); + setState(640); oC_SymbolicName(); - setState(650); + setState(654); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 48, _ctx)) { case 1: { - setState(638); + setState(642); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(637); + setState(641); match(CypherParser::SP); } - setState(640); + setState(644); match(CypherParser::T__5); - setState(642); + setState(646); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(641); + setState(645); match(CypherParser::SP); } break; } case 2: { - setState(647); + setState(651); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::SP) { - setState(644); + setState(648); match(CypherParser::SP); - setState(649); + setState(653); _errHandler->sync(this); _la = _input->LA(1); } @@ -3098,22 +3115,22 @@ CypherParser::IC_OptionContext* CypherParser::iC_Option() { default: break; } - setState(652); + setState(656); oC_Literal(); - setState(657); + setState(661); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 50, _ctx)) { case 1: { - setState(654); + setState(658); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(653); + setState(657); match(CypherParser::SP); } - setState(656); + setState(660); iC_OptionQualifier(); break; } @@ -3126,7 +3143,7 @@ CypherParser::IC_OptionContext* CypherParser::iC_Option() { case 2: { enterOuterAlt(_localctx, 2); - setState(659); + setState(663); oC_SymbolicName(); break; } @@ -3183,27 +3200,27 @@ CypherParser::IC_OptionQualifierContext* CypherParser::iC_OptionQualifier() { }); try { enterOuterAlt(_localctx, 1); - setState(662); + setState(666); match(CypherParser::T__1); - setState(664); + setState(668); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(663); + setState(667); match(CypherParser::SP); } - setState(666); + setState(670); oC_SymbolicName(); - setState(668); + setState(672); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(667); + setState(671); match(CypherParser::SP); } - setState(670); + setState(674); match(CypherParser::T__2); } @@ -3259,35 +3276,35 @@ CypherParser::IC_OptionsContext* CypherParser::iC_Options() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(672); + setState(676); iC_Option(); - setState(683); + setState(687); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 56, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(674); + setState(678); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(673); + setState(677); match(CypherParser::SP); } - setState(676); + setState(680); match(CypherParser::T__3); - setState(678); + setState(682); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(677); + setState(681); match(CypherParser::SP); } - setState(680); + setState(684); iC_Option(); } - setState(685); + setState(689); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 56, _ctx); } @@ -3339,11 +3356,11 @@ CypherParser::IC_DetachDatabaseContext* CypherParser::iC_DetachDatabase() { }); try { enterOuterAlt(_localctx, 1); - setState(686); + setState(690); match(CypherParser::DETACH); - setState(687); + setState(691); match(CypherParser::SP); - setState(688); + setState(692); oC_SchemaName(); } @@ -3393,11 +3410,11 @@ CypherParser::IC_UseDatabaseContext* CypherParser::iC_UseDatabase() { }); try { enterOuterAlt(_localctx, 1); - setState(690); + setState(694); match(CypherParser::USE); - setState(691); + setState(695); match(CypherParser::SP); - setState(692); + setState(696); oC_SchemaName(); } @@ -3459,24 +3476,24 @@ CypherParser::IC_CreateGraphContext* CypherParser::iC_CreateGraph() { }); try { enterOuterAlt(_localctx, 1); - setState(694); + setState(698); match(CypherParser::CREATE); - setState(695); + setState(699); match(CypherParser::SP); - setState(696); + setState(700); match(CypherParser::GRAPH); - setState(697); + setState(701); match(CypherParser::SP); - setState(698); + setState(702); oC_SchemaName(); - setState(701); + setState(705); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 57, _ctx)) { case 1: { - setState(699); + setState(703); match(CypherParser::SP); - setState(700); + setState(704); match(CypherParser::ANY); break; } @@ -3540,15 +3557,15 @@ CypherParser::IC_UseGraphContext* CypherParser::iC_UseGraph() { }); try { enterOuterAlt(_localctx, 1); - setState(703); + setState(707); match(CypherParser::USE); - setState(704); + setState(708); match(CypherParser::SP); - setState(705); + setState(709); match(CypherParser::GRAPH); - setState(706); + setState(710); match(CypherParser::SP); - setState(707); + setState(711); oC_SchemaName(); } @@ -3598,16 +3615,16 @@ CypherParser::IC_AnalyzeContext* CypherParser::iC_Analyze() { }); try { enterOuterAlt(_localctx, 1); - setState(709); + setState(713); match(CypherParser::ANALYZE); - setState(712); + setState(716); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 58, _ctx)) { case 1: { - setState(710); + setState(714); match(CypherParser::SP); - setState(711); + setState(715); oC_SchemaName(); break; } @@ -3675,47 +3692,47 @@ CypherParser::IC_StandaloneCallContext* CypherParser::iC_StandaloneCall() { exitRule(); }); try { - setState(729); + setState(733); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 61, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(714); + setState(718); match(CypherParser::CALL); - setState(715); + setState(719); match(CypherParser::SP); - setState(716); + setState(720); oC_SymbolicName(); - setState(718); + setState(722); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(717); + setState(721); match(CypherParser::SP); } - setState(720); + setState(724); match(CypherParser::T__5); - setState(722); + setState(726); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(721); + setState(725); match(CypherParser::SP); } - setState(724); + setState(728); oC_Expression(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(726); + setState(730); match(CypherParser::CALL); - setState(727); + setState(731); match(CypherParser::SP); - setState(728); + setState(732); oC_FunctionInvocation(); break; } @@ -3791,27 +3808,27 @@ CypherParser::IC_CommentOnContext* CypherParser::iC_CommentOn() { }); try { enterOuterAlt(_localctx, 1); - setState(731); - match(CypherParser::COMMENT); - setState(732); - match(CypherParser::SP); - setState(733); - match(CypherParser::ON); - setState(734); - match(CypherParser::SP); setState(735); - match(CypherParser::TABLE); + match(CypherParser::COMMENT); setState(736); match(CypherParser::SP); setState(737); - oC_SchemaName(); + match(CypherParser::ON); setState(738); match(CypherParser::SP); setState(739); - match(CypherParser::IS); + match(CypherParser::TABLE); setState(740); match(CypherParser::SP); setState(741); + oC_SchemaName(); + setState(742); + match(CypherParser::SP); + setState(743); + match(CypherParser::IS); + setState(744); + match(CypherParser::SP); + setState(745); match(CypherParser::StringLiteral); } @@ -3891,32 +3908,32 @@ CypherParser::IC_CreateMacroContext* CypherParser::iC_CreateMacro() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(743); + setState(747); match(CypherParser::CREATE); - setState(744); + setState(748); match(CypherParser::SP); - setState(745); + setState(749); match(CypherParser::MACRO); - setState(746); + setState(750); match(CypherParser::SP); - setState(747); + setState(751); oC_FunctionName(); - setState(749); + setState(753); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(748); + setState(752); match(CypherParser::SP); } - setState(751); + setState(755); match(CypherParser::T__1); - setState(753); + setState(757); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 63, _ctx)) { case 1: { - setState(752); + setState(756); match(CypherParser::SP); break; } @@ -3924,12 +3941,12 @@ CypherParser::IC_CreateMacroContext* CypherParser::iC_CreateMacro() { default: break; } - setState(756); + setState(760); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 64, _ctx)) { case 1: { - setState(755); + setState(759); iC_PositionalArgs(); break; } @@ -3937,12 +3954,12 @@ CypherParser::IC_CreateMacroContext* CypherParser::iC_CreateMacro() { default: break; } - setState(759); + setState(763); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 65, _ctx)) { case 1: { - setState(758); + setState(762); match(CypherParser::SP); break; } @@ -3950,64 +3967,64 @@ CypherParser::IC_CreateMacroContext* CypherParser::iC_CreateMacro() { default: break; } - setState(762); + setState(766); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -6370763885380632576) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9219449713480129315) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 324400320977652447) != 0)) { - setState(761); + ((1ULL << (_la - 128)) & 648800641955304671) != 0)) { + setState(765); iC_DefaultArg(); } - setState(774); + setState(778); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 69, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(765); + setState(769); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(764); + setState(768); match(CypherParser::SP); } - setState(767); + setState(771); match(CypherParser::T__3); - setState(769); + setState(773); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(768); + setState(772); match(CypherParser::SP); } - setState(771); + setState(775); iC_DefaultArg(); } - setState(776); + setState(780); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 69, _ctx); } - setState(778); + setState(782); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(777); + setState(781); match(CypherParser::SP); } - setState(780); + setState(784); match(CypherParser::T__2); - setState(781); + setState(785); match(CypherParser::SP); - setState(782); + setState(786); match(CypherParser::AS); - setState(783); + setState(787); match(CypherParser::SP); - setState(784); + setState(788); oC_Expression(); } @@ -4063,35 +4080,35 @@ CypherParser::IC_PositionalArgsContext* CypherParser::iC_PositionalArgs() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(786); + setState(790); oC_SymbolicName(); - setState(797); + setState(801); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 73, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(788); + setState(792); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(787); + setState(791); match(CypherParser::SP); } - setState(790); + setState(794); match(CypherParser::T__3); - setState(792); + setState(796); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(791); + setState(795); match(CypherParser::SP); } - setState(794); + setState(798); oC_SymbolicName(); } - setState(799); + setState(803); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 73, _ctx); } @@ -4152,29 +4169,29 @@ CypherParser::IC_DefaultArgContext* CypherParser::iC_DefaultArg() { }); try { enterOuterAlt(_localctx, 1); - setState(800); + setState(804); oC_SymbolicName(); - setState(802); + setState(806); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(801); + setState(805); match(CypherParser::SP); } - setState(804); + setState(808); match(CypherParser::COLON); - setState(805); + setState(809); match(CypherParser::T__5); - setState(807); + setState(811); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(806); + setState(810); match(CypherParser::SP); } - setState(809); + setState(813); oC_Literal(); } @@ -4232,96 +4249,96 @@ CypherParser::IC_FilePathsContext* CypherParser::iC_FilePaths() { exitRule(); }); try { - setState(844); + setState(848); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::T__6: { enterOuterAlt(_localctx, 1); - setState(811); + setState(815); match(CypherParser::T__6); - setState(813); + setState(817); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(812); + setState(816); match(CypherParser::SP); } - setState(815); + setState(819); match(CypherParser::StringLiteral); - setState(826); + setState(830); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3 || _la == CypherParser::SP) { - setState(817); + setState(821); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(816); + setState(820); match(CypherParser::SP); } - setState(819); + setState(823); match(CypherParser::T__3); - setState(821); + setState(825); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(820); + setState(824); match(CypherParser::SP); } - setState(823); + setState(827); match(CypherParser::StringLiteral); - setState(828); + setState(832); _errHandler->sync(this); _la = _input->LA(1); } - setState(829); + setState(833); match(CypherParser::T__7); break; } case CypherParser::StringLiteral: { enterOuterAlt(_localctx, 2); - setState(830); + setState(834); match(CypherParser::StringLiteral); break; } case CypherParser::GLOB: { enterOuterAlt(_localctx, 3); - setState(831); + setState(835); match(CypherParser::GLOB); - setState(833); + setState(837); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(832); + setState(836); match(CypherParser::SP); } - setState(835); + setState(839); match(CypherParser::T__1); - setState(837); + setState(841); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(836); + setState(840); match(CypherParser::SP); } - setState(839); + setState(843); match(CypherParser::StringLiteral); - setState(841); + setState(845); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(840); + setState(844); match(CypherParser::SP); } - setState(843); + setState(847); match(CypherParser::T__2); break; } @@ -4385,15 +4402,15 @@ CypherParser::IC_IfNotExistsContext* CypherParser::iC_IfNotExists() { }); try { enterOuterAlt(_localctx, 1); - setState(846); + setState(850); match(CypherParser::IF); - setState(847); + setState(851); match(CypherParser::SP); - setState(848); + setState(852); match(CypherParser::NOT); - setState(849); + setState(853); match(CypherParser::SP); - setState(850); + setState(854); match(CypherParser::EXISTS); } @@ -4484,26 +4501,26 @@ CypherParser::IC_CreateNodeTableContext* CypherParser::iC_CreateNodeTable() { }); try { enterOuterAlt(_localctx, 1); - setState(852); + setState(856); match(CypherParser::CREATE); - setState(853); + setState(857); match(CypherParser::SP); - setState(854); + setState(858); match(CypherParser::NODE); - setState(855); + setState(859); match(CypherParser::SP); - setState(856); + setState(860); match(CypherParser::TABLE); - setState(857); - match(CypherParser::SP); setState(861); + match(CypherParser::SP); + setState(865); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 84, _ctx)) { case 1: { - setState(858); + setState(862); iC_IfNotExists(); - setState(859); + setState(863); match(CypherParser::SP); break; } @@ -4511,38 +4528,38 @@ CypherParser::IC_CreateNodeTableContext* CypherParser::iC_CreateNodeTable() { default: break; } - setState(863); + setState(867); oC_SchemaName(); - setState(891); + setState(895); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 91, _ctx)) { case 1: { - setState(865); + setState(869); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(864); + setState(868); match(CypherParser::SP); } - setState(867); + setState(871); match(CypherParser::T__1); - setState(869); + setState(873); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(868); + setState(872); match(CypherParser::SP); } - setState(871); + setState(875); iC_PropertyDefinitions(); - setState(873); + setState(877); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 87, _ctx)) { case 1: { - setState(872); + setState(876); match(CypherParser::SP); break; } @@ -4550,45 +4567,45 @@ CypherParser::IC_CreateNodeTableContext* CypherParser::iC_CreateNodeTable() { default: break; } - setState(880); + setState(884); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__3) { - setState(875); + setState(879); match(CypherParser::T__3); - setState(877); + setState(881); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(876); + setState(880); match(CypherParser::SP); } - setState(879); + setState(883); iC_CreateNodeConstraint(); } - setState(883); + setState(887); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(882); + setState(886); match(CypherParser::SP); } - setState(885); + setState(889); match(CypherParser::T__2); break; } case 2: { - setState(887); + setState(891); match(CypherParser::SP); - setState(888); + setState(892); match(CypherParser::AS); - setState(889); + setState(893); match(CypherParser::SP); - setState(890); + setState(894); oC_Query(); break; } @@ -4596,44 +4613,44 @@ CypherParser::IC_CreateNodeTableContext* CypherParser::iC_CreateNodeTable() { default: break; } - setState(908); + setState(912); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 95, _ctx)) { case 1: { - setState(893); + setState(897); match(CypherParser::SP); - setState(894); + setState(898); match(CypherParser::WITH); - setState(896); + setState(900); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(895); + setState(899); match(CypherParser::SP); } - setState(898); + setState(902); match(CypherParser::T__1); - setState(900); + setState(904); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(899); + setState(903); match(CypherParser::SP); } - setState(902); + setState(906); iC_Options(); - setState(904); + setState(908); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(903); + setState(907); match(CypherParser::SP); } - setState(906); + setState(910); match(CypherParser::T__2); break; } @@ -4738,24 +4755,24 @@ CypherParser::IC_CreateRelTableContext* CypherParser::iC_CreateRelTable() { }); try { enterOuterAlt(_localctx, 1); - setState(910); + setState(914); match(CypherParser::CREATE); - setState(911); + setState(915); match(CypherParser::SP); - setState(912); + setState(916); match(CypherParser::REL); - setState(913); + setState(917); match(CypherParser::SP); - setState(914); + setState(918); match(CypherParser::TABLE); - setState(917); + setState(921); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 96, _ctx)) { case 1: { - setState(915); + setState(919); match(CypherParser::SP); - setState(916); + setState(920); match(CypherParser::GROUP); break; } @@ -4763,14 +4780,14 @@ CypherParser::IC_CreateRelTableContext* CypherParser::iC_CreateRelTable() { default: break; } - setState(921); + setState(925); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 97, _ctx)) { case 1: { - setState(919); + setState(923); match(CypherParser::SP); - setState(920); + setState(924); iC_IfNotExists(); break; } @@ -4778,65 +4795,65 @@ CypherParser::IC_CreateRelTableContext* CypherParser::iC_CreateRelTable() { default: break; } - setState(923); + setState(927); match(CypherParser::SP); - setState(924); + setState(928); oC_SchemaName(); - setState(926); + setState(930); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(925); + setState(929); match(CypherParser::SP); } - setState(928); + setState(932); match(CypherParser::T__1); - setState(930); + setState(934); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(929); + setState(933); match(CypherParser::SP); } - setState(932); + setState(936); iC_CreateFromToConnections(); - setState(934); + setState(938); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(933); + setState(937); match(CypherParser::SP); } - setState(962); + setState(966); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 107, _ctx)) { case 1: { - setState(944); + setState(948); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 103, _ctx)) { case 1: { - setState(936); + setState(940); match(CypherParser::T__3); - setState(938); + setState(942); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(937); + setState(941); match(CypherParser::SP); } - setState(940); + setState(944); iC_PropertyDefinitions(); - setState(942); + setState(946); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(941); + setState(945); match(CypherParser::SP); } break; @@ -4845,47 +4862,47 @@ CypherParser::IC_CreateRelTableContext* CypherParser::iC_CreateRelTable() { default: break; } - setState(954); + setState(958); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__3) { - setState(946); + setState(950); match(CypherParser::T__3); - setState(948); + setState(952); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(947); + setState(951); match(CypherParser::SP); } - setState(950); + setState(954); oC_SymbolicName(); - setState(952); + setState(956); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(951); + setState(955); match(CypherParser::SP); } } - setState(956); + setState(960); match(CypherParser::T__2); break; } case 2: { - setState(957); + setState(961); match(CypherParser::T__2); - setState(958); + setState(962); match(CypherParser::SP); - setState(959); + setState(963); match(CypherParser::AS); - setState(960); + setState(964); match(CypherParser::SP); - setState(961); + setState(965); oC_Query(); break; } @@ -4893,44 +4910,44 @@ CypherParser::IC_CreateRelTableContext* CypherParser::iC_CreateRelTable() { default: break; } - setState(979); + setState(983); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 111, _ctx)) { case 1: { - setState(964); + setState(968); match(CypherParser::SP); - setState(965); + setState(969); match(CypherParser::WITH); - setState(967); + setState(971); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(966); + setState(970); match(CypherParser::SP); } - setState(969); + setState(973); match(CypherParser::T__1); - setState(971); + setState(975); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(970); + setState(974); match(CypherParser::SP); } - setState(973); + setState(977); iC_Options(); - setState(975); + setState(979); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(974); + setState(978); match(CypherParser::SP); } - setState(977); + setState(981); match(CypherParser::T__2); break; } @@ -5027,16 +5044,16 @@ CypherParser::IC_CreateIndexContext* CypherParser::iC_CreateIndex() { }); try { enterOuterAlt(_localctx, 1); - setState(981); + setState(985); match(CypherParser::CREATE); - setState(984); + setState(988); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 112, _ctx)) { case 1: { - setState(982); + setState(986); match(CypherParser::SP); - setState(983); + setState(987); oC_SymbolicName(); break; } @@ -5044,18 +5061,18 @@ CypherParser::IC_CreateIndexContext* CypherParser::iC_CreateIndex() { default: break; } - setState(986); + setState(990); match(CypherParser::SP); - setState(987); + setState(991); match(CypherParser::INDEX); - setState(990); + setState(994); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 113, _ctx)) { case 1: { - setState(988); + setState(992); match(CypherParser::SP); - setState(989); + setState(993); oC_SchemaName(); break; } @@ -5063,14 +5080,14 @@ CypherParser::IC_CreateIndexContext* CypherParser::iC_CreateIndex() { default: break; } - setState(994); + setState(998); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 114, _ctx)) { case 1: { - setState(992); + setState(996); match(CypherParser::SP); - setState(993); + setState(997); iC_IfNotExists(); break; } @@ -5078,47 +5095,47 @@ CypherParser::IC_CreateIndexContext* CypherParser::iC_CreateIndex() { default: break; } - setState(996); + setState(1000); match(CypherParser::SP); - setState(997); + setState(1001); match(CypherParser::FOR); - setState(998); + setState(1002); match(CypherParser::SP); - setState(999); + setState(1003); iC_IndexPattern(); - setState(1000); + setState(1004); match(CypherParser::SP); - setState(1001); + setState(1005); match(CypherParser::ON); - setState(1002); + setState(1006); match(CypherParser::SP); - setState(1003); + setState(1007); iC_IndexPropertyPattern(); - setState(1020); + setState(1024); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 119, _ctx)) { case 1: { - setState(1004); + setState(1008); match(CypherParser::SP); - setState(1005); + setState(1009); match(CypherParser::OPTIONS); - setState(1007); + setState(1011); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1006); + setState(1010); match(CypherParser::SP); } - setState(1009); + setState(1013); match(CypherParser::T__8); - setState(1011); + setState(1015); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 116, _ctx)) { case 1: { - setState(1010); + setState(1014); match(CypherParser::SP); break; } @@ -5126,26 +5143,26 @@ CypherParser::IC_CreateIndexContext* CypherParser::iC_CreateIndex() { default: break; } - setState(1014); + setState(1018); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -6370763885380632576) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9219449713480129315) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 324400320977652447) != 0)) { - setState(1013); + ((1ULL << (_la - 128)) & 648800641955304671) != 0)) { + setState(1017); iC_Options(); } - setState(1017); + setState(1021); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1016); + setState(1020); match(CypherParser::SP); } - setState(1019); + setState(1023); match(CypherParser::T__9); break; } @@ -5196,19 +5213,19 @@ CypherParser::IC_IndexPatternContext* CypherParser::iC_IndexPattern() { exitRule(); }); try { - setState(1024); + setState(1028); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 120, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1022); + setState(1026); iC_IndexNodePattern(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1023); + setState(1027); iC_IndexRelationshipPattern(); break; } @@ -5273,14 +5290,14 @@ CypherParser::IC_IndexNodePatternContext* CypherParser::iC_IndexNodePattern() { }); try { enterOuterAlt(_localctx, 1); - setState(1026); + setState(1030); match(CypherParser::T__1); - setState(1028); + setState(1032); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 121, _ctx)) { case 1: { - setState(1027); + setState(1031); match(CypherParser::SP); break; } @@ -5288,46 +5305,46 @@ CypherParser::IC_IndexNodePatternContext* CypherParser::iC_IndexNodePattern() { default: break; } - setState(1031); + setState(1035); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -6370763885380632576) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9219449713480129315) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 324400320977652447) != 0)) { - setState(1030); + ((1ULL << (_la - 128)) & 648800641955304671) != 0)) { + setState(1034); oC_Variable(); } - setState(1034); + setState(1038); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1033); + setState(1037); match(CypherParser::SP); } - setState(1036); + setState(1040); match(CypherParser::COLON); - setState(1038); + setState(1042); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1037); + setState(1041); match(CypherParser::SP); } - setState(1040); + setState(1044); oC_LabelName(); - setState(1042); + setState(1046); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1041); + setState(1045); match(CypherParser::SP); } - setState(1044); + setState(1048); match(CypherParser::T__2); } @@ -5378,47 +5395,47 @@ CypherParser::IC_IndexRelationshipPatternContext* CypherParser::iC_IndexRelation }); try { enterOuterAlt(_localctx, 1); - setState(1046); + setState(1050); match(CypherParser::T__1); - setState(1048); + setState(1052); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1047); + setState(1051); match(CypherParser::SP); } - setState(1050); + setState(1054); match(CypherParser::T__2); - setState(1052); + setState(1056); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1051); + setState(1055); match(CypherParser::SP); } - setState(1054); + setState(1058); oC_RelationshipPattern(); - setState(1056); + setState(1060); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1055); + setState(1059); match(CypherParser::SP); } - setState(1058); + setState(1062); match(CypherParser::T__1); - setState(1060); + setState(1064); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1059); + setState(1063); match(CypherParser::SP); } - setState(1062); + setState(1066); match(CypherParser::T__2); } @@ -5473,18 +5490,8 @@ CypherParser::IC_IndexPropertyPatternContext* CypherParser::iC_IndexPropertyPatt }); try { enterOuterAlt(_localctx, 1); - setState(1064); - match(CypherParser::T__1); - setState(1066); - _errHandler->sync(this); - - _la = _input->LA(1); - if (_la == CypherParser::SP) { - setState(1065); - match(CypherParser::SP); - } setState(1068); - oC_Variable(); + match(CypherParser::T__1); setState(1070); _errHandler->sync(this); @@ -5494,7 +5501,7 @@ CypherParser::IC_IndexPropertyPatternContext* CypherParser::iC_IndexPropertyPatt match(CypherParser::SP); } setState(1072); - match(CypherParser::T__4); + oC_Variable(); setState(1074); _errHandler->sync(this); @@ -5504,7 +5511,7 @@ CypherParser::IC_IndexPropertyPatternContext* CypherParser::iC_IndexPropertyPatt match(CypherParser::SP); } setState(1076); - oC_PropertyKeyName(); + match(CypherParser::T__4); setState(1078); _errHandler->sync(this); @@ -5514,6 +5521,16 @@ CypherParser::IC_IndexPropertyPatternContext* CypherParser::iC_IndexPropertyPatt match(CypherParser::SP); } setState(1080); + oC_PropertyKeyName(); + setState(1082); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1081); + match(CypherParser::SP); + } + setState(1084); match(CypherParser::T__2); } @@ -5569,35 +5586,35 @@ CypherParser::IC_CreateFromToConnectionsContext* CypherParser::iC_CreateFromToCo try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1082); + setState(1086); iC_CreateFromToConnection(); - setState(1093); + setState(1097); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 136, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1084); + setState(1088); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1083); + setState(1087); match(CypherParser::SP); } - setState(1086); + setState(1090); match(CypherParser::T__3); - setState(1088); + setState(1092); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1087); + setState(1091); match(CypherParser::SP); } - setState(1090); + setState(1094); iC_CreateFromToConnection(); } - setState(1095); + setState(1099); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 136, _ctx); } @@ -5665,28 +5682,28 @@ CypherParser::IC_CreateFromToConnectionContext* CypherParser::iC_CreateFromToCon }); try { enterOuterAlt(_localctx, 1); - setState(1096); + setState(1100); match(CypherParser::FROM); - setState(1097); + setState(1101); match(CypherParser::SP); - setState(1098); + setState(1102); oC_SchemaName(); - setState(1099); + setState(1103); match(CypherParser::SP); - setState(1100); + setState(1104); match(CypherParser::TO); - setState(1101); + setState(1105); match(CypherParser::SP); - setState(1102); + setState(1106); oC_SchemaName(); - setState(1105); + setState(1109); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 137, _ctx)) { case 1: { - setState(1103); + setState(1107); match(CypherParser::SP); - setState(1104); + setState(1108); oC_SymbolicName(); break; } @@ -5747,33 +5764,33 @@ CypherParser::IC_FromToConnectionsContext* CypherParser::iC_FromToConnections() }); try { enterOuterAlt(_localctx, 1); - setState(1107); + setState(1111); iC_FromToConnection(); - setState(1118); + setState(1122); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3 || _la == CypherParser::SP) { - setState(1109); + setState(1113); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1108); + setState(1112); match(CypherParser::SP); } - setState(1111); + setState(1115); match(CypherParser::T__3); - setState(1113); + setState(1117); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1112); + setState(1116); match(CypherParser::SP); } - setState(1115); + setState(1119); iC_FromToConnection(); - setState(1120); + setState(1124); _errHandler->sync(this); _la = _input->LA(1); } @@ -5837,19 +5854,19 @@ CypherParser::IC_FromToConnectionContext* CypherParser::iC_FromToConnection() { }); try { enterOuterAlt(_localctx, 1); - setState(1121); + setState(1125); match(CypherParser::FROM); - setState(1122); + setState(1126); match(CypherParser::SP); - setState(1123); + setState(1127); oC_SchemaName(); - setState(1124); + setState(1128); match(CypherParser::SP); - setState(1125); + setState(1129); match(CypherParser::TO); - setState(1126); + setState(1130); match(CypherParser::SP); - setState(1127); + setState(1131); oC_SchemaName(); } @@ -5920,22 +5937,22 @@ CypherParser::IC_CreateSequenceContext* CypherParser::iC_CreateSequence() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1129); + setState(1133); match(CypherParser::CREATE); - setState(1130); + setState(1134); match(CypherParser::SP); - setState(1131); + setState(1135); match(CypherParser::SEQUENCE); - setState(1132); - match(CypherParser::SP); setState(1136); + match(CypherParser::SP); + setState(1140); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 141, _ctx)) { case 1: { - setState(1133); + setState(1137); iC_IfNotExists(); - setState(1134); + setState(1138); match(CypherParser::SP); break; } @@ -5943,19 +5960,19 @@ CypherParser::IC_CreateSequenceContext* CypherParser::iC_CreateSequence() { default: break; } - setState(1138); + setState(1142); oC_SchemaName(); - setState(1143); + setState(1147); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 142, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1139); + setState(1143); match(CypherParser::SP); - setState(1140); + setState(1144); iC_SequenceOptions(); } - setState(1145); + setState(1149); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 142, _ctx); } @@ -6023,30 +6040,30 @@ CypherParser::IC_CreateTypeContext* CypherParser::iC_CreateType() { }); try { enterOuterAlt(_localctx, 1); - setState(1146); + setState(1150); match(CypherParser::CREATE); - setState(1147); + setState(1151); match(CypherParser::SP); - setState(1148); + setState(1152); match(CypherParser::TYPE); - setState(1149); + setState(1153); match(CypherParser::SP); - setState(1150); + setState(1154); oC_SchemaName(); - setState(1151); + setState(1155); match(CypherParser::SP); - setState(1152); + setState(1156); match(CypherParser::AS); - setState(1153); + setState(1157); match(CypherParser::SP); - setState(1154); + setState(1158); iC_DataType(0); - setState(1156); + setState(1160); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 143, _ctx)) { case 1: { - setState(1155); + setState(1159); match(CypherParser::SP); break; } @@ -6109,40 +6126,40 @@ CypherParser::IC_SequenceOptionsContext* CypherParser::iC_SequenceOptions() { exitRule(); }); try { - setState(1163); + setState(1167); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 144, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1158); + setState(1162); iC_IncrementBy(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1159); + setState(1163); iC_MinValue(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(1160); + setState(1164); iC_MaxValue(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(1161); + setState(1165); iC_StartWith(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(1162); + setState(1166); iC_Cycle(); break; } @@ -6206,17 +6223,17 @@ CypherParser::IC_WithPasswdContext* CypherParser::iC_WithPasswd() { }); try { enterOuterAlt(_localctx, 1); - setState(1165); + setState(1169); match(CypherParser::SP); - setState(1166); + setState(1170); match(CypherParser::WITH); - setState(1167); + setState(1171); match(CypherParser::SP); - setState(1168); + setState(1172); match(CypherParser::PASSWORD); - setState(1169); + setState(1173); match(CypherParser::SP); - setState(1170); + setState(1174); match(CypherParser::StringLiteral); } @@ -6282,22 +6299,22 @@ CypherParser::IC_CreateUserContext* CypherParser::iC_CreateUser() { }); try { enterOuterAlt(_localctx, 1); - setState(1172); + setState(1176); match(CypherParser::CREATE); - setState(1173); + setState(1177); match(CypherParser::SP); - setState(1174); + setState(1178); match(CypherParser::USER); - setState(1175); - match(CypherParser::SP); setState(1179); + match(CypherParser::SP); + setState(1183); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 145, _ctx)) { case 1: { - setState(1176); + setState(1180); iC_IfNotExists(); - setState(1177); + setState(1181); match(CypherParser::SP); break; } @@ -6305,14 +6322,14 @@ CypherParser::IC_CreateUserContext* CypherParser::iC_CreateUser() { default: break; } - setState(1181); + setState(1185); oC_Variable(); - setState(1183); + setState(1187); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 146, _ctx)) { case 1: { - setState(1182); + setState(1186); iC_WithPasswd(); break; } @@ -6380,22 +6397,22 @@ CypherParser::IC_CreateRoleContext* CypherParser::iC_CreateRole() { }); try { enterOuterAlt(_localctx, 1); - setState(1185); + setState(1189); match(CypherParser::CREATE); - setState(1186); + setState(1190); match(CypherParser::SP); - setState(1187); + setState(1191); match(CypherParser::ROLE); - setState(1188); - match(CypherParser::SP); setState(1192); + match(CypherParser::SP); + setState(1196); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 147, _ctx)) { case 1: { - setState(1189); + setState(1193); iC_IfNotExists(); - setState(1190); + setState(1194); match(CypherParser::SP); break; } @@ -6403,7 +6420,7 @@ CypherParser::IC_CreateRoleContext* CypherParser::iC_CreateRole() { default: break; } - setState(1194); + setState(1198); oC_Variable(); } @@ -6466,29 +6483,29 @@ CypherParser::IC_IncrementByContext* CypherParser::iC_IncrementBy() { }); try { enterOuterAlt(_localctx, 1); - setState(1196); + setState(1200); match(CypherParser::INCREMENT); - setState(1197); + setState(1201); match(CypherParser::SP); - setState(1200); + setState(1204); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::BY) { - setState(1198); + setState(1202); match(CypherParser::BY); - setState(1199); + setState(1203); match(CypherParser::SP); } - setState(1203); + setState(1207); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::MINUS) { - setState(1202); + setState(1206); match(CypherParser::MINUS); } - setState(1205); + setState(1209); oC_IntegerLiteral(); } @@ -6546,35 +6563,35 @@ CypherParser::IC_MinValueContext* CypherParser::iC_MinValue() { exitRule(); }); try { - setState(1216); + setState(1220); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::NO: { enterOuterAlt(_localctx, 1); - setState(1207); + setState(1211); match(CypherParser::NO); - setState(1208); + setState(1212); match(CypherParser::SP); - setState(1209); + setState(1213); match(CypherParser::MINVALUE); break; } case CypherParser::MINVALUE: { enterOuterAlt(_localctx, 2); - setState(1210); + setState(1214); match(CypherParser::MINVALUE); - setState(1211); + setState(1215); match(CypherParser::SP); - setState(1213); + setState(1217); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::MINUS) { - setState(1212); + setState(1216); match(CypherParser::MINUS); } - setState(1215); + setState(1219); oC_IntegerLiteral(); break; } @@ -6638,35 +6655,35 @@ CypherParser::IC_MaxValueContext* CypherParser::iC_MaxValue() { exitRule(); }); try { - setState(1227); + setState(1231); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::NO: { enterOuterAlt(_localctx, 1); - setState(1218); + setState(1222); match(CypherParser::NO); - setState(1219); + setState(1223); match(CypherParser::SP); - setState(1220); + setState(1224); match(CypherParser::MAXVALUE); break; } case CypherParser::MAXVALUE: { enterOuterAlt(_localctx, 2); - setState(1221); + setState(1225); match(CypherParser::MAXVALUE); - setState(1222); + setState(1226); match(CypherParser::SP); - setState(1224); + setState(1228); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::MINUS) { - setState(1223); + setState(1227); match(CypherParser::MINUS); } - setState(1226); + setState(1230); oC_IntegerLiteral(); break; } @@ -6735,29 +6752,29 @@ CypherParser::IC_StartWithContext* CypherParser::iC_StartWith() { }); try { enterOuterAlt(_localctx, 1); - setState(1229); + setState(1233); match(CypherParser::START); - setState(1230); + setState(1234); match(CypherParser::SP); - setState(1233); + setState(1237); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::WITH) { - setState(1231); + setState(1235); match(CypherParser::WITH); - setState(1232); + setState(1236); match(CypherParser::SP); } - setState(1236); + setState(1240); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::MINUS) { - setState(1235); + setState(1239); match(CypherParser::MINUS); } - setState(1238); + setState(1242); oC_IntegerLiteral(); } @@ -6808,17 +6825,17 @@ CypherParser::IC_CycleContext* CypherParser::iC_Cycle() { }); try { enterOuterAlt(_localctx, 1); - setState(1242); + setState(1246); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::NO) { - setState(1240); + setState(1244); match(CypherParser::NO); - setState(1241); + setState(1245); match(CypherParser::SP); } - setState(1244); + setState(1248); match(CypherParser::CYCLE); } @@ -6868,11 +6885,11 @@ CypherParser::IC_IfExistsContext* CypherParser::iC_IfExists() { }); try { enterOuterAlt(_localctx, 1); - setState(1246); + setState(1250); match(CypherParser::IF); - setState(1247); + setState(1251); match(CypherParser::SP); - setState(1248); + setState(1252); match(CypherParser::EXISTS); } @@ -6954,35 +6971,35 @@ CypherParser::IC_DropContext* CypherParser::iC_Drop() { exitRule(); }); try { - setState(1270); + setState(1274); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 159, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1250); + setState(1254); match(CypherParser::DROP); - setState(1251); + setState(1255); match(CypherParser::SP); - setState(1252); + setState(1256); _la = _input->LA(1); if (!(((((_la - 92) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 92)) & 285873023287297) != 0))) { + ((1ULL << (_la - 92)) & 567347999997953) != 0))) { _errHandler->recoverInline(this); } else { _errHandler->reportMatch(this); consume(); } - setState(1253); - match(CypherParser::SP); setState(1257); + match(CypherParser::SP); + setState(1261); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 157, _ctx)) { case 1: { - setState(1254); + setState(1258); iC_IfExists(); - setState(1255); + setState(1259); match(CypherParser::SP); break; } @@ -6990,29 +7007,29 @@ CypherParser::IC_DropContext* CypherParser::iC_Drop() { default: break; } - setState(1259); + setState(1263); oC_SchemaName(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1260); + setState(1264); match(CypherParser::DROP); - setState(1261); + setState(1265); match(CypherParser::SP); - setState(1262); + setState(1266); match(CypherParser::INDEX); - setState(1263); - match(CypherParser::SP); setState(1267); + match(CypherParser::SP); + setState(1271); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 158, _ctx)) { case 1: { - setState(1264); + setState(1268); iC_IfExists(); - setState(1265); + setState(1269); match(CypherParser::SP); break; } @@ -7020,7 +7037,7 @@ CypherParser::IC_DropContext* CypherParser::iC_Drop() { default: break; } - setState(1269); + setState(1273); iC_DropIndexName(); break; } @@ -7081,27 +7098,27 @@ CypherParser::IC_DropIndexNameContext* CypherParser::iC_DropIndexName() { }); try { enterOuterAlt(_localctx, 1); - setState(1272); + setState(1276); oC_SchemaName(); - setState(1274); + setState(1278); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1273); + setState(1277); match(CypherParser::SP); } - setState(1276); + setState(1280); match(CypherParser::T__4); - setState(1278); + setState(1282); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1277); + setState(1281); match(CypherParser::SP); } - setState(1280); + setState(1284); oC_SchemaName(); } @@ -7163,19 +7180,19 @@ CypherParser::IC_AlterTableContext* CypherParser::iC_AlterTable() { }); try { enterOuterAlt(_localctx, 1); - setState(1282); + setState(1286); match(CypherParser::ALTER); - setState(1283); + setState(1287); match(CypherParser::SP); - setState(1284); + setState(1288); match(CypherParser::TABLE); - setState(1285); + setState(1289); match(CypherParser::SP); - setState(1286); + setState(1290); oC_SchemaName(); - setState(1287); + setState(1291); match(CypherParser::SP); - setState(1288); + setState(1292); iC_AlterOptions(); } @@ -7218,6 +7235,10 @@ CypherParser::IC_DropFromToConnectionContext* CypherParser::IC_AlterOptionsConte return getRuleContext(0); } +CypherParser::IC_SetSortedByContext* CypherParser::IC_AlterOptionsContext::iC_SetSortedBy() { + return getRuleContext(0); +} + size_t CypherParser::IC_AlterOptionsContext::getRuleIndex() const { return CypherParser::RuleIC_AlterOptions; @@ -7236,51 +7257,58 @@ CypherParser::IC_AlterOptionsContext* CypherParser::iC_AlterOptions() { exitRule(); }); try { - setState(1296); + setState(1301); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 162, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1290); + setState(1294); iC_AddProperty(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1291); + setState(1295); iC_DropProperty(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(1292); + setState(1296); iC_RenameTable(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(1293); + setState(1297); iC_RenameProperty(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(1294); + setState(1298); iC_AddFromToConnection(); break; } case 6: { enterOuterAlt(_localctx, 6); - setState(1295); + setState(1299); iC_DropFromToConnection(); break; } + case 7: { + enterOuterAlt(_localctx, 7); + setState(1300); + iC_SetSortedBy(); + break; + } + default: break; } @@ -7348,18 +7376,18 @@ CypherParser::IC_AddPropertyContext* CypherParser::iC_AddProperty() { }); try { enterOuterAlt(_localctx, 1); - setState(1298); + setState(1303); match(CypherParser::ADD); - setState(1299); + setState(1304); match(CypherParser::SP); - setState(1303); + setState(1308); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 163, _ctx)) { case 1: { - setState(1300); + setState(1305); iC_IfNotExists(); - setState(1301); + setState(1306); match(CypherParser::SP); break; } @@ -7367,20 +7395,20 @@ CypherParser::IC_AddPropertyContext* CypherParser::iC_AddProperty() { default: break; } - setState(1305); + setState(1310); oC_PropertyKeyName(); - setState(1306); + setState(1311); match(CypherParser::SP); - setState(1307); + setState(1312); iC_DataType(0); - setState(1310); + setState(1315); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 164, _ctx)) { case 1: { - setState(1308); + setState(1313); match(CypherParser::SP); - setState(1309); + setState(1314); iC_Default(); break; } @@ -7436,11 +7464,11 @@ CypherParser::IC_DefaultContext* CypherParser::iC_Default() { }); try { enterOuterAlt(_localctx, 1); - setState(1312); + setState(1317); match(CypherParser::DEFAULT); - setState(1313); + setState(1318); match(CypherParser::SP); - setState(1314); + setState(1319); oC_Expression(); } @@ -7498,18 +7526,18 @@ CypherParser::IC_DropPropertyContext* CypherParser::iC_DropProperty() { }); try { enterOuterAlt(_localctx, 1); - setState(1316); + setState(1321); match(CypherParser::DROP); - setState(1317); + setState(1322); match(CypherParser::SP); - setState(1321); + setState(1326); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 165, _ctx)) { case 1: { - setState(1318); + setState(1323); iC_IfExists(); - setState(1319); + setState(1324); match(CypherParser::SP); break; } @@ -7517,7 +7545,7 @@ CypherParser::IC_DropPropertyContext* CypherParser::iC_DropProperty() { default: break; } - setState(1323); + setState(1328); oC_PropertyKeyName(); } @@ -7575,15 +7603,15 @@ CypherParser::IC_RenameTableContext* CypherParser::iC_RenameTable() { }); try { enterOuterAlt(_localctx, 1); - setState(1325); + setState(1330); match(CypherParser::RENAME); - setState(1326); + setState(1331); match(CypherParser::SP); - setState(1327); + setState(1332); match(CypherParser::TO); - setState(1328); + setState(1333); match(CypherParser::SP); - setState(1329); + setState(1334); oC_SchemaName(); } @@ -7645,19 +7673,19 @@ CypherParser::IC_RenamePropertyContext* CypherParser::iC_RenameProperty() { }); try { enterOuterAlt(_localctx, 1); - setState(1331); + setState(1336); match(CypherParser::RENAME); - setState(1332); + setState(1337); match(CypherParser::SP); - setState(1333); + setState(1338); oC_PropertyKeyName(); - setState(1334); + setState(1339); match(CypherParser::SP); - setState(1335); + setState(1340); match(CypherParser::TO); - setState(1336); + setState(1341); match(CypherParser::SP); - setState(1337); + setState(1342); oC_PropertyKeyName(); } @@ -7716,21 +7744,21 @@ CypherParser::IC_AddFromToConnectionContext* CypherParser::iC_AddFromToConnectio }); try { enterOuterAlt(_localctx, 1); - setState(1339); + setState(1344); match(CypherParser::ADD); - setState(1340); + setState(1345); match(CypherParser::SP); - setState(1344); + setState(1349); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::IF) { - setState(1341); + setState(1346); iC_IfNotExists(); - setState(1342); + setState(1347); match(CypherParser::SP); } - setState(1346); + setState(1351); iC_FromToConnection(); } @@ -7789,21 +7817,21 @@ CypherParser::IC_DropFromToConnectionContext* CypherParser::iC_DropFromToConnect }); try { enterOuterAlt(_localctx, 1); - setState(1348); + setState(1353); match(CypherParser::DROP); - setState(1349); + setState(1354); match(CypherParser::SP); - setState(1353); + setState(1358); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::IF) { - setState(1350); + setState(1355); iC_IfExists(); - setState(1351); + setState(1356); match(CypherParser::SP); } - setState(1355); + setState(1360); iC_FromToConnection(); } @@ -7816,6 +7844,210 @@ CypherParser::IC_DropFromToConnectionContext* CypherParser::iC_DropFromToConnect return _localctx; } +//----------------- IC_SetSortedByContext ------------------------------------------------------------------ + +CypherParser::IC_SetSortedByContext::IC_SetSortedByContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* CypherParser::IC_SetSortedByContext::SET() { + return getToken(CypherParser::SET, 0); +} + +std::vector CypherParser::IC_SetSortedByContext::SP() { + return getTokens(CypherParser::SP); +} + +tree::TerminalNode* CypherParser::IC_SetSortedByContext::SP(size_t i) { + return getToken(CypherParser::SP, i); +} + +tree::TerminalNode* CypherParser::IC_SetSortedByContext::SORTED() { + return getToken(CypherParser::SORTED, 0); +} + +tree::TerminalNode* CypherParser::IC_SetSortedByContext::BY() { + return getToken(CypherParser::BY, 0); +} + +std::vector CypherParser::IC_SetSortedByContext::iC_SortedByItem() { + return getRuleContexts(); +} + +CypherParser::IC_SortedByItemContext* CypherParser::IC_SetSortedByContext::iC_SortedByItem(size_t i) { + return getRuleContext(i); +} + + +size_t CypherParser::IC_SetSortedByContext::getRuleIndex() const { + return CypherParser::RuleIC_SetSortedBy; +} + + +CypherParser::IC_SetSortedByContext* CypherParser::iC_SetSortedBy() { + IC_SetSortedByContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 120, CypherParser::RuleIC_SetSortedBy); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + size_t alt; + enterOuterAlt(_localctx, 1); + setState(1362); + match(CypherParser::SET); + setState(1363); + match(CypherParser::SP); + setState(1364); + match(CypherParser::SORTED); + setState(1365); + match(CypherParser::SP); + setState(1366); + match(CypherParser::BY); + setState(1368); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1367); + match(CypherParser::SP); + } + setState(1370); + match(CypherParser::T__1); + setState(1372); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1371); + match(CypherParser::SP); + } + setState(1374); + iC_SortedByItem(); + setState(1385); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 172, _ctx); + while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { + if (alt == 1) { + setState(1376); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1375); + match(CypherParser::SP); + } + setState(1378); + match(CypherParser::T__3); + setState(1380); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1379); + match(CypherParser::SP); + } + setState(1382); + iC_SortedByItem(); + } + setState(1387); + _errHandler->sync(this); + alt = getInterpreter()->adaptivePredict(_input, 172, _ctx); + } + setState(1389); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == CypherParser::SP) { + setState(1388); + match(CypherParser::SP); + } + setState(1391); + match(CypherParser::T__2); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- IC_SortedByItemContext ------------------------------------------------------------------ + +CypherParser::IC_SortedByItemContext::IC_SortedByItemContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +CypherParser::OC_PropertyKeyNameContext* CypherParser::IC_SortedByItemContext::oC_PropertyKeyName() { + return getRuleContext(0); +} + +tree::TerminalNode* CypherParser::IC_SortedByItemContext::SP() { + return getToken(CypherParser::SP, 0); +} + +tree::TerminalNode* CypherParser::IC_SortedByItemContext::ASC() { + return getToken(CypherParser::ASC, 0); +} + +tree::TerminalNode* CypherParser::IC_SortedByItemContext::DESC() { + return getToken(CypherParser::DESC, 0); +} + + +size_t CypherParser::IC_SortedByItemContext::getRuleIndex() const { + return CypherParser::RuleIC_SortedByItem; +} + + +CypherParser::IC_SortedByItemContext* CypherParser::iC_SortedByItem() { + IC_SortedByItemContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 122, CypherParser::RuleIC_SortedByItem); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(1393); + oC_PropertyKeyName(); + setState(1394); + match(CypherParser::SP); + setState(1395); + _la = _input->LA(1); + if (!(_la == CypherParser::ASC + + || _la == CypherParser::DESC)) { + _errHandler->recoverInline(this); + } + else { + _errHandler->reportMatch(this); + consume(); + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + //----------------- IC_ColumnDefinitionsContext ------------------------------------------------------------------ CypherParser::IC_ColumnDefinitionsContext::IC_ColumnDefinitionsContext(ParserRuleContext *parent, size_t invokingState) @@ -7846,7 +8078,7 @@ size_t CypherParser::IC_ColumnDefinitionsContext::getRuleIndex() const { CypherParser::IC_ColumnDefinitionsContext* CypherParser::iC_ColumnDefinitions() { IC_ColumnDefinitionsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 120, CypherParser::RuleIC_ColumnDefinitions); + enterRule(_localctx, 124, CypherParser::RuleIC_ColumnDefinitions); size_t _la = 0; #if __cplusplus > 201703L @@ -7859,37 +8091,37 @@ CypherParser::IC_ColumnDefinitionsContext* CypherParser::iC_ColumnDefinitions() try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1357); + setState(1397); iC_ColumnDefinition(); - setState(1368); + setState(1408); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 170, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 176, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1359); + setState(1399); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1358); + setState(1398); match(CypherParser::SP); } - setState(1361); + setState(1401); match(CypherParser::T__3); - setState(1363); + setState(1403); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1362); + setState(1402); match(CypherParser::SP); } - setState(1365); + setState(1405); iC_ColumnDefinition(); } - setState(1370); + setState(1410); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 170, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 176, _ctx); } } @@ -7928,7 +8160,7 @@ size_t CypherParser::IC_ColumnDefinitionContext::getRuleIndex() const { CypherParser::IC_ColumnDefinitionContext* CypherParser::iC_ColumnDefinition() { IC_ColumnDefinitionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 122, CypherParser::RuleIC_ColumnDefinition); + enterRule(_localctx, 126, CypherParser::RuleIC_ColumnDefinition); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7939,11 +8171,11 @@ CypherParser::IC_ColumnDefinitionContext* CypherParser::iC_ColumnDefinition() { }); try { enterOuterAlt(_localctx, 1); - setState(1371); + setState(1411); oC_PropertyKeyName(); - setState(1372); + setState(1412); match(CypherParser::SP); - setState(1373); + setState(1413); iC_DataType(0); } @@ -7986,7 +8218,7 @@ size_t CypherParser::IC_PropertyDefinitionsContext::getRuleIndex() const { CypherParser::IC_PropertyDefinitionsContext* CypherParser::iC_PropertyDefinitions() { IC_PropertyDefinitionsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 124, CypherParser::RuleIC_PropertyDefinitions); + enterRule(_localctx, 128, CypherParser::RuleIC_PropertyDefinitions); size_t _la = 0; #if __cplusplus > 201703L @@ -7999,37 +8231,37 @@ CypherParser::IC_PropertyDefinitionsContext* CypherParser::iC_PropertyDefinition try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1375); + setState(1415); iC_PropertyDefinition(); - setState(1386); + setState(1426); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 173, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 179, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1377); + setState(1417); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1376); + setState(1416); match(CypherParser::SP); } - setState(1379); + setState(1419); match(CypherParser::T__3); - setState(1381); + setState(1421); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1380); + setState(1420); match(CypherParser::SP); } - setState(1383); + setState(1423); iC_PropertyDefinition(); } - setState(1388); + setState(1428); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 173, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 179, _ctx); } } @@ -8080,7 +8312,7 @@ size_t CypherParser::IC_PropertyDefinitionContext::getRuleIndex() const { CypherParser::IC_PropertyDefinitionContext* CypherParser::iC_PropertyDefinition() { IC_PropertyDefinitionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 126, CypherParser::RuleIC_PropertyDefinition); + enterRule(_localctx, 130, CypherParser::RuleIC_PropertyDefinition); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8091,16 +8323,16 @@ CypherParser::IC_PropertyDefinitionContext* CypherParser::iC_PropertyDefinition( }); try { enterOuterAlt(_localctx, 1); - setState(1389); + setState(1429); iC_ColumnDefinition(); - setState(1392); + setState(1432); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 174, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 180, _ctx)) { case 1: { - setState(1390); + setState(1430); match(CypherParser::SP); - setState(1391); + setState(1431); iC_Default(); break; } @@ -8108,18 +8340,18 @@ CypherParser::IC_PropertyDefinitionContext* CypherParser::iC_PropertyDefinition( default: break; } - setState(1398); + setState(1438); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 175, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 181, _ctx)) { case 1: { - setState(1394); + setState(1434); match(CypherParser::SP); - setState(1395); + setState(1435); match(CypherParser::PRIMARY); - setState(1396); + setState(1436); match(CypherParser::SP); - setState(1397); + setState(1437); match(CypherParser::KEY); break; } @@ -8172,7 +8404,7 @@ size_t CypherParser::IC_CreateNodeConstraintContext::getRuleIndex() const { CypherParser::IC_CreateNodeConstraintContext* CypherParser::iC_CreateNodeConstraint() { IC_CreateNodeConstraintContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 128, CypherParser::RuleIC_CreateNodeConstraint); + enterRule(_localctx, 132, CypherParser::RuleIC_CreateNodeConstraint); size_t _la = 0; #if __cplusplus > 201703L @@ -8184,41 +8416,41 @@ CypherParser::IC_CreateNodeConstraintContext* CypherParser::iC_CreateNodeConstra }); try { enterOuterAlt(_localctx, 1); - setState(1400); + setState(1440); match(CypherParser::PRIMARY); - setState(1401); + setState(1441); match(CypherParser::SP); - setState(1402); + setState(1442); match(CypherParser::KEY); - setState(1404); + setState(1444); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1403); + setState(1443); match(CypherParser::SP); } - setState(1406); + setState(1446); match(CypherParser::T__1); - setState(1408); + setState(1448); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1407); + setState(1447); match(CypherParser::SP); } - setState(1410); + setState(1450); oC_PropertyKeyName(); - setState(1412); + setState(1452); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1411); + setState(1451); match(CypherParser::SP); } - setState(1414); + setState(1454); match(CypherParser::T__2); } @@ -8261,7 +8493,7 @@ size_t CypherParser::IC_UnionTypeContext::getRuleIndex() const { CypherParser::IC_UnionTypeContext* CypherParser::iC_UnionType() { IC_UnionTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 130, CypherParser::RuleIC_UnionType); + enterRule(_localctx, 134, CypherParser::RuleIC_UnionType); size_t _la = 0; #if __cplusplus > 201703L @@ -8273,37 +8505,37 @@ CypherParser::IC_UnionTypeContext* CypherParser::iC_UnionType() { }); try { enterOuterAlt(_localctx, 1); - setState(1416); + setState(1456); match(CypherParser::UNION); - setState(1418); + setState(1458); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1417); + setState(1457); match(CypherParser::SP); } - setState(1420); + setState(1460); match(CypherParser::T__1); - setState(1422); + setState(1462); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1421); + setState(1461); match(CypherParser::SP); } - setState(1424); + setState(1464); iC_ColumnDefinitions(); - setState(1426); + setState(1466); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1425); + setState(1465); match(CypherParser::SP); } - setState(1428); + setState(1468); match(CypherParser::T__2); } @@ -8346,7 +8578,7 @@ size_t CypherParser::IC_StructTypeContext::getRuleIndex() const { CypherParser::IC_StructTypeContext* CypherParser::iC_StructType() { IC_StructTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 132, CypherParser::RuleIC_StructType); + enterRule(_localctx, 136, CypherParser::RuleIC_StructType); size_t _la = 0; #if __cplusplus > 201703L @@ -8358,37 +8590,37 @@ CypherParser::IC_StructTypeContext* CypherParser::iC_StructType() { }); try { enterOuterAlt(_localctx, 1); - setState(1430); + setState(1470); match(CypherParser::STRUCT); - setState(1432); + setState(1472); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1431); + setState(1471); match(CypherParser::SP); } - setState(1434); + setState(1474); match(CypherParser::T__1); - setState(1436); + setState(1476); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1435); + setState(1475); match(CypherParser::SP); } - setState(1438); + setState(1478); iC_ColumnDefinitions(); - setState(1440); + setState(1480); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1439); + setState(1479); match(CypherParser::SP); } - setState(1442); + setState(1482); match(CypherParser::T__2); } @@ -8435,7 +8667,7 @@ size_t CypherParser::IC_MapTypeContext::getRuleIndex() const { CypherParser::IC_MapTypeContext* CypherParser::iC_MapType() { IC_MapTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 134, CypherParser::RuleIC_MapType); + enterRule(_localctx, 138, CypherParser::RuleIC_MapType); size_t _la = 0; #if __cplusplus > 201703L @@ -8447,57 +8679,57 @@ CypherParser::IC_MapTypeContext* CypherParser::iC_MapType() { }); try { enterOuterAlt(_localctx, 1); - setState(1444); + setState(1484); match(CypherParser::MAP); - setState(1446); + setState(1486); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1445); + setState(1485); match(CypherParser::SP); } - setState(1448); + setState(1488); match(CypherParser::T__1); - setState(1450); + setState(1490); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1449); + setState(1489); match(CypherParser::SP); } - setState(1452); + setState(1492); iC_DataType(0); - setState(1454); + setState(1494); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1453); + setState(1493); match(CypherParser::SP); } - setState(1456); + setState(1496); match(CypherParser::T__3); - setState(1458); + setState(1498); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1457); + setState(1497); match(CypherParser::SP); } - setState(1460); + setState(1500); iC_DataType(0); - setState(1462); + setState(1502); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1461); + setState(1501); match(CypherParser::SP); } - setState(1464); + setState(1504); match(CypherParser::T__2); } @@ -8544,7 +8776,7 @@ size_t CypherParser::IC_DecimalTypeContext::getRuleIndex() const { CypherParser::IC_DecimalTypeContext* CypherParser::iC_DecimalType() { IC_DecimalTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 136, CypherParser::RuleIC_DecimalType); + enterRule(_localctx, 140, CypherParser::RuleIC_DecimalType); size_t _la = 0; #if __cplusplus > 201703L @@ -8556,57 +8788,57 @@ CypherParser::IC_DecimalTypeContext* CypherParser::iC_DecimalType() { }); try { enterOuterAlt(_localctx, 1); - setState(1466); + setState(1506); match(CypherParser::DECIMAL); - setState(1468); + setState(1508); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1467); + setState(1507); match(CypherParser::SP); } - setState(1470); + setState(1510); match(CypherParser::T__1); - setState(1472); + setState(1512); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1471); + setState(1511); match(CypherParser::SP); } - setState(1474); + setState(1514); oC_IntegerLiteral(); - setState(1476); + setState(1516); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1475); + setState(1515); match(CypherParser::SP); } - setState(1478); + setState(1518); match(CypherParser::T__3); - setState(1480); + setState(1520); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1479); + setState(1519); match(CypherParser::SP); } - setState(1482); + setState(1522); oC_IntegerLiteral(); - setState(1484); + setState(1524); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1483); + setState(1523); match(CypherParser::SP); } - setState(1486); + setState(1526); match(CypherParser::T__2); } @@ -8670,8 +8902,8 @@ CypherParser::IC_DataTypeContext* CypherParser::iC_DataType(int precedence) { CypherParser::IC_DataTypeContext *_localctx = _tracker.createInstance(_ctx, parentState); CypherParser::IC_DataTypeContext *previousContext = _localctx; (void)previousContext; // Silence compiler, in case the context is not used by generated code. - size_t startState = 138; - enterRecursionRule(_localctx, 138, CypherParser::RuleIC_DataType, precedence); + size_t startState = 142; + enterRecursionRule(_localctx, 142, CypherParser::RuleIC_DataType, precedence); @@ -8685,35 +8917,35 @@ CypherParser::IC_DataTypeContext* CypherParser::iC_DataType(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1494); + setState(1534); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 195, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 201, _ctx)) { case 1: { - setState(1489); + setState(1529); oC_SymbolicName(); break; } case 2: { - setState(1490); + setState(1530); iC_UnionType(); break; } case 3: { - setState(1491); + setState(1531); iC_StructType(); break; } case 4: { - setState(1492); + setState(1532); iC_MapType(); break; } case 5: { - setState(1493); + setState(1533); iC_DecimalType(); break; } @@ -8722,9 +8954,9 @@ CypherParser::IC_DataTypeContext* CypherParser::iC_DataType(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(1500); + setState(1540); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 196, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 202, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) @@ -8732,15 +8964,15 @@ CypherParser::IC_DataTypeContext* CypherParser::iC_DataType(int precedence) { previousContext = _localctx; _localctx = _tracker.createInstance(parentContext, parentState); pushNewRecursionContext(_localctx, startState, RuleIC_DataType); - setState(1496); + setState(1536); if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(1497); + setState(1537); iC_ListIdentifiers(); } - setState(1502); + setState(1542); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 196, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 202, _ctx); } } catch (RecognitionException &e) { @@ -8773,7 +9005,7 @@ size_t CypherParser::IC_ListIdentifiersContext::getRuleIndex() const { CypherParser::IC_ListIdentifiersContext* CypherParser::iC_ListIdentifiers() { IC_ListIdentifiersContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 140, CypherParser::RuleIC_ListIdentifiers); + enterRule(_localctx, 144, CypherParser::RuleIC_ListIdentifiers); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8785,19 +9017,19 @@ CypherParser::IC_ListIdentifiersContext* CypherParser::iC_ListIdentifiers() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1503); + setState(1543); iC_ListIdentifier(); - setState(1507); + setState(1547); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 197, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 203, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1504); + setState(1544); iC_ListIdentifier(); } - setState(1509); + setState(1549); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 197, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 203, _ctx); } } @@ -8828,7 +9060,7 @@ size_t CypherParser::IC_ListIdentifierContext::getRuleIndex() const { CypherParser::IC_ListIdentifierContext* CypherParser::iC_ListIdentifier() { IC_ListIdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 142, CypherParser::RuleIC_ListIdentifier); + enterRule(_localctx, 146, CypherParser::RuleIC_ListIdentifier); size_t _la = 0; #if __cplusplus > 201703L @@ -8840,17 +9072,17 @@ CypherParser::IC_ListIdentifierContext* CypherParser::iC_ListIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(1510); + setState(1550); match(CypherParser::T__6); - setState(1512); + setState(1552); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DecimalInteger) { - setState(1511); + setState(1551); oC_IntegerLiteral(); } - setState(1514); + setState(1554); match(CypherParser::T__7); } @@ -8885,7 +9117,7 @@ size_t CypherParser::OC_AnyCypherOptionContext::getRuleIndex() const { CypherParser::OC_AnyCypherOptionContext* CypherParser::oC_AnyCypherOption() { OC_AnyCypherOptionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 144, CypherParser::RuleOC_AnyCypherOption); + enterRule(_localctx, 148, CypherParser::RuleOC_AnyCypherOption); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8895,19 +9127,19 @@ CypherParser::OC_AnyCypherOptionContext* CypherParser::oC_AnyCypherOption() { exitRule(); }); try { - setState(1518); + setState(1558); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::EXPLAIN: { enterOuterAlt(_localctx, 1); - setState(1516); + setState(1556); oC_Explain(); break; } case CypherParser::PROFILE: { enterOuterAlt(_localctx, 2); - setState(1517); + setState(1557); oC_Profile(); break; } @@ -8952,7 +9184,7 @@ size_t CypherParser::OC_ExplainContext::getRuleIndex() const { CypherParser::OC_ExplainContext* CypherParser::oC_Explain() { OC_ExplainContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 146, CypherParser::RuleOC_Explain); + enterRule(_localctx, 150, CypherParser::RuleOC_Explain); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8963,16 +9195,16 @@ CypherParser::OC_ExplainContext* CypherParser::oC_Explain() { }); try { enterOuterAlt(_localctx, 1); - setState(1520); + setState(1560); match(CypherParser::EXPLAIN); - setState(1523); + setState(1563); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 200, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 206, _ctx)) { case 1: { - setState(1521); + setState(1561); match(CypherParser::SP); - setState(1522); + setState(1562); match(CypherParser::LOGICAL); break; } @@ -9009,7 +9241,7 @@ size_t CypherParser::OC_ProfileContext::getRuleIndex() const { CypherParser::OC_ProfileContext* CypherParser::oC_Profile() { OC_ProfileContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 148, CypherParser::RuleOC_Profile); + enterRule(_localctx, 152, CypherParser::RuleOC_Profile); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9020,7 +9252,7 @@ CypherParser::OC_ProfileContext* CypherParser::oC_Profile() { }); try { enterOuterAlt(_localctx, 1); - setState(1525); + setState(1565); match(CypherParser::PROFILE); } @@ -9083,7 +9315,7 @@ size_t CypherParser::IC_TransactionContext::getRuleIndex() const { CypherParser::IC_TransactionContext* CypherParser::iC_Transaction() { IC_TransactionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 150, CypherParser::RuleIC_Transaction); + enterRule(_localctx, 154, CypherParser::RuleIC_Transaction); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9093,56 +9325,56 @@ CypherParser::IC_TransactionContext* CypherParser::iC_Transaction() { exitRule(); }); try { - setState(1540); + setState(1580); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 201, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 207, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1527); + setState(1567); match(CypherParser::BEGIN); - setState(1528); + setState(1568); match(CypherParser::SP); - setState(1529); + setState(1569); match(CypherParser::TRANSACTION); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1530); + setState(1570); match(CypherParser::BEGIN); - setState(1531); + setState(1571); match(CypherParser::SP); - setState(1532); + setState(1572); match(CypherParser::TRANSACTION); - setState(1533); + setState(1573); match(CypherParser::SP); - setState(1534); + setState(1574); match(CypherParser::READ); - setState(1535); + setState(1575); match(CypherParser::SP); - setState(1536); + setState(1576); match(CypherParser::ONLY); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(1537); + setState(1577); match(CypherParser::COMMIT); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(1538); + setState(1578); match(CypherParser::ROLLBACK); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(1539); + setState(1579); match(CypherParser::CHECKPOINT); break; } @@ -9191,7 +9423,7 @@ size_t CypherParser::IC_ExtensionContext::getRuleIndex() const { CypherParser::IC_ExtensionContext* CypherParser::iC_Extension() { IC_ExtensionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 152, CypherParser::RuleIC_Extension); + enterRule(_localctx, 156, CypherParser::RuleIC_Extension); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9201,12 +9433,12 @@ CypherParser::IC_ExtensionContext* CypherParser::iC_Extension() { exitRule(); }); try { - setState(1546); + setState(1586); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::LOAD: { enterOuterAlt(_localctx, 1); - setState(1542); + setState(1582); iC_LoadExtension(); break; } @@ -9214,21 +9446,21 @@ CypherParser::IC_ExtensionContext* CypherParser::iC_Extension() { case CypherParser::FORCE: case CypherParser::INSTALL: { enterOuterAlt(_localctx, 2); - setState(1543); + setState(1583); iC_InstallExtension(); break; } case CypherParser::UNINSTALL: { enterOuterAlt(_localctx, 3); - setState(1544); + setState(1584); iC_UninstallExtension(); break; } case CypherParser::UPDATE: { enterOuterAlt(_localctx, 4); - setState(1545); + setState(1585); iC_UpdateExtension(); break; } @@ -9285,7 +9517,7 @@ size_t CypherParser::IC_LoadExtensionContext::getRuleIndex() const { CypherParser::IC_LoadExtensionContext* CypherParser::iC_LoadExtension() { IC_LoadExtensionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 154, CypherParser::RuleIC_LoadExtension); + enterRule(_localctx, 158, CypherParser::RuleIC_LoadExtension); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9296,18 +9528,18 @@ CypherParser::IC_LoadExtensionContext* CypherParser::iC_LoadExtension() { }); try { enterOuterAlt(_localctx, 1); - setState(1548); + setState(1588); match(CypherParser::LOAD); - setState(1549); + setState(1589); match(CypherParser::SP); - setState(1552); + setState(1592); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 203, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 209, _ctx)) { case 1: { - setState(1550); + setState(1590); match(CypherParser::EXTENSION); - setState(1551); + setState(1591); match(CypherParser::SP); break; } @@ -9315,11 +9547,11 @@ CypherParser::IC_LoadExtensionContext* CypherParser::iC_LoadExtension() { default: break; } - setState(1556); + setState(1596); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::StringLiteral: { - setState(1554); + setState(1594); match(CypherParser::StringLiteral); break; } @@ -9390,7 +9622,7 @@ CypherParser::IC_LoadExtensionContext* CypherParser::iC_LoadExtension() { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(1555); + setState(1595); oC_Variable(); break; } @@ -9451,7 +9683,7 @@ size_t CypherParser::IC_InstallExtensionContext::getRuleIndex() const { CypherParser::IC_InstallExtensionContext* CypherParser::iC_InstallExtension() { IC_InstallExtensionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 156, CypherParser::RuleIC_InstallExtension); + enterRule(_localctx, 160, CypherParser::RuleIC_InstallExtension); size_t _la = 0; #if __cplusplus > 201703L @@ -9463,34 +9695,34 @@ CypherParser::IC_InstallExtensionContext* CypherParser::iC_InstallExtension() { }); try { enterOuterAlt(_localctx, 1); - setState(1560); + setState(1600); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::FORCE) { - setState(1558); + setState(1598); match(CypherParser::FORCE); - setState(1559); + setState(1599); match(CypherParser::SP); } - setState(1562); + setState(1602); match(CypherParser::INSTALL); - setState(1563); + setState(1603); match(CypherParser::SP); - setState(1564); + setState(1604); oC_Variable(); - setState(1569); + setState(1609); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 206, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 212, _ctx)) { case 1: { - setState(1565); + setState(1605); match(CypherParser::SP); - setState(1566); + setState(1606); match(CypherParser::FROM); - setState(1567); + setState(1607); match(CypherParser::SP); - setState(1568); + setState(1608); match(CypherParser::StringLiteral); break; } @@ -9535,7 +9767,7 @@ size_t CypherParser::IC_UninstallExtensionContext::getRuleIndex() const { CypherParser::IC_UninstallExtensionContext* CypherParser::iC_UninstallExtension() { IC_UninstallExtensionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 158, CypherParser::RuleIC_UninstallExtension); + enterRule(_localctx, 162, CypherParser::RuleIC_UninstallExtension); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9546,11 +9778,11 @@ CypherParser::IC_UninstallExtensionContext* CypherParser::iC_UninstallExtension( }); try { enterOuterAlt(_localctx, 1); - setState(1571); + setState(1611); match(CypherParser::UNINSTALL); - setState(1572); + setState(1612); match(CypherParser::SP); - setState(1573); + setState(1613); oC_Variable(); } @@ -9589,7 +9821,7 @@ size_t CypherParser::IC_UpdateExtensionContext::getRuleIndex() const { CypherParser::IC_UpdateExtensionContext* CypherParser::iC_UpdateExtension() { IC_UpdateExtensionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 160, CypherParser::RuleIC_UpdateExtension); + enterRule(_localctx, 164, CypherParser::RuleIC_UpdateExtension); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9600,11 +9832,11 @@ CypherParser::IC_UpdateExtensionContext* CypherParser::iC_UpdateExtension() { }); try { enterOuterAlt(_localctx, 1); - setState(1575); + setState(1615); match(CypherParser::UPDATE); - setState(1576); + setState(1616); match(CypherParser::SP); - setState(1577); + setState(1617); oC_Variable(); } @@ -9635,7 +9867,7 @@ size_t CypherParser::OC_QueryContext::getRuleIndex() const { CypherParser::OC_QueryContext* CypherParser::oC_Query() { OC_QueryContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 162, CypherParser::RuleOC_Query); + enterRule(_localctx, 166, CypherParser::RuleOC_Query); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9646,7 +9878,7 @@ CypherParser::OC_QueryContext* CypherParser::oC_Query() { }); try { enterOuterAlt(_localctx, 1); - setState(1579); + setState(1619); oC_RegularQuery(); } @@ -9701,7 +9933,7 @@ size_t CypherParser::OC_RegularQueryContext::getRuleIndex() const { CypherParser::OC_RegularQueryContext* CypherParser::oC_RegularQuery() { OC_RegularQueryContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 164, CypherParser::RuleOC_RegularQuery); + enterRule(_localctx, 168, CypherParser::RuleOC_RegularQuery); size_t _la = 0; #if __cplusplus > 201703L @@ -9713,52 +9945,52 @@ CypherParser::OC_RegularQueryContext* CypherParser::oC_RegularQuery() { }); try { size_t alt; - setState(1602); + setState(1642); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 211, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 217, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1581); + setState(1621); oC_SingleQuery(); - setState(1588); + setState(1628); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 208, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 214, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1583); + setState(1623); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1582); + setState(1622); match(CypherParser::SP); } - setState(1585); + setState(1625); oC_Union(); } - setState(1590); + setState(1630); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 208, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 214, _ctx); } break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1595); + setState(1635); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(1591); + setState(1631); oC_Return(); - setState(1593); + setState(1633); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1592); + setState(1632); match(CypherParser::SP); } break; @@ -9767,11 +9999,11 @@ CypherParser::OC_RegularQueryContext* CypherParser::oC_RegularQuery() { default: throw NoViableAltException(this); } - setState(1597); + setState(1637); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 210, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 216, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); - setState(1599); + setState(1639); oC_SingleQuery(); notifyReturnNotAtEnd(_localctx->start); break; @@ -9825,7 +10057,7 @@ size_t CypherParser::OC_UnionContext::getRuleIndex() const { CypherParser::OC_UnionContext* CypherParser::oC_Union() { OC_UnionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 166, CypherParser::RuleOC_Union); + enterRule(_localctx, 170, CypherParser::RuleOC_Union); size_t _la = 0; #if __cplusplus > 201703L @@ -9836,43 +10068,43 @@ CypherParser::OC_UnionContext* CypherParser::oC_Union() { exitRule(); }); try { - setState(1616); + setState(1656); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 214, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 220, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1604); + setState(1644); match(CypherParser::UNION); - setState(1605); + setState(1645); match(CypherParser::SP); - setState(1606); + setState(1646); match(CypherParser::ALL); - setState(1608); + setState(1648); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1607); + setState(1647); match(CypherParser::SP); } - setState(1610); + setState(1650); oC_SingleQuery(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1611); + setState(1651); match(CypherParser::UNION); - setState(1613); + setState(1653); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1612); + setState(1652); match(CypherParser::SP); } - setState(1615); + setState(1655); oC_SingleQuery(); break; } @@ -9913,7 +10145,7 @@ size_t CypherParser::OC_SingleQueryContext::getRuleIndex() const { CypherParser::OC_SingleQueryContext* CypherParser::oC_SingleQuery() { OC_SingleQueryContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 168, CypherParser::RuleOC_SingleQuery); + enterRule(_localctx, 172, CypherParser::RuleOC_SingleQuery); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9923,19 +10155,19 @@ CypherParser::OC_SingleQueryContext* CypherParser::oC_SingleQuery() { exitRule(); }); try { - setState(1620); + setState(1660); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 215, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 221, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1618); + setState(1658); oC_SinglePartQuery(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1619); + setState(1659); oC_MultiPartQuery(); break; } @@ -9996,7 +10228,7 @@ size_t CypherParser::OC_SinglePartQueryContext::getRuleIndex() const { CypherParser::OC_SinglePartQueryContext* CypherParser::oC_SinglePartQuery() { OC_SinglePartQueryContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 170, CypherParser::RuleOC_SinglePartQuery); + enterRule(_localctx, 174, CypherParser::RuleOC_SinglePartQuery); size_t _la = 0; #if __cplusplus > 201703L @@ -10008,92 +10240,92 @@ CypherParser::OC_SinglePartQueryContext* CypherParser::oC_SinglePartQuery() { }); try { size_t alt; - setState(1657); + setState(1697); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 224, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 230, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1628); + setState(1668); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::CALL || ((((_la - 106) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 106)) & 4398046576649) != 0)) { - setState(1622); + ((1ULL << (_la - 106)) & 8796093087753) != 0)) { + setState(1662); oC_ReadingClause(); - setState(1624); + setState(1664); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1623); + setState(1663); match(CypherParser::SP); } - setState(1630); + setState(1670); _errHandler->sync(this); _la = _input->LA(1); } - setState(1631); + setState(1671); oC_Return(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1638); + setState(1678); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::CALL || ((((_la - 106) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 106)) & 4398046576649) != 0)) { - setState(1632); + ((1ULL << (_la - 106)) & 8796093087753) != 0)) { + setState(1672); oC_ReadingClause(); - setState(1634); + setState(1674); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1633); + setState(1673); match(CypherParser::SP); } - setState(1640); + setState(1680); _errHandler->sync(this); _la = _input->LA(1); } - setState(1641); + setState(1681); oC_UpdatingClause(); - setState(1648); + setState(1688); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 221, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 227, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1643); + setState(1683); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1642); + setState(1682); match(CypherParser::SP); } - setState(1645); + setState(1685); oC_UpdatingClause(); } - setState(1650); + setState(1690); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 221, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 227, _ctx); } - setState(1655); + setState(1695); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 223, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 229, _ctx)) { case 1: { - setState(1652); + setState(1692); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1651); + setState(1691); match(CypherParser::SP); } - setState(1654); + setState(1694); oC_Return(); break; } @@ -10152,7 +10384,7 @@ size_t CypherParser::OC_MultiPartQueryContext::getRuleIndex() const { CypherParser::OC_MultiPartQueryContext* CypherParser::oC_MultiPartQuery() { OC_MultiPartQueryContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 172, CypherParser::RuleOC_MultiPartQuery); + enterRule(_localctx, 176, CypherParser::RuleOC_MultiPartQuery); size_t _la = 0; #if __cplusplus > 201703L @@ -10165,20 +10397,20 @@ CypherParser::OC_MultiPartQueryContext* CypherParser::oC_MultiPartQuery() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1663); + setState(1703); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(1659); + setState(1699); iC_QueryPart(); - setState(1661); + setState(1701); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1660); + setState(1700); match(CypherParser::SP); } break; @@ -10187,11 +10419,11 @@ CypherParser::OC_MultiPartQueryContext* CypherParser::oC_MultiPartQuery() { default: throw NoViableAltException(this); } - setState(1665); + setState(1705); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 226, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 232, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); - setState(1667); + setState(1707); oC_SinglePartQuery(); } @@ -10246,7 +10478,7 @@ size_t CypherParser::IC_QueryPartContext::getRuleIndex() const { CypherParser::IC_QueryPartContext* CypherParser::iC_QueryPart() { IC_QueryPartContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 174, CypherParser::RuleIC_QueryPart); + enterRule(_localctx, 178, CypherParser::RuleIC_QueryPart); size_t _la = 0; #if __cplusplus > 201703L @@ -10258,45 +10490,45 @@ CypherParser::IC_QueryPartContext* CypherParser::iC_QueryPart() { }); try { enterOuterAlt(_localctx, 1); - setState(1675); + setState(1715); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::CALL || ((((_la - 106) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 106)) & 4398046576649) != 0)) { - setState(1669); + ((1ULL << (_la - 106)) & 8796093087753) != 0)) { + setState(1709); oC_ReadingClause(); - setState(1671); + setState(1711); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1670); + setState(1710); match(CypherParser::SP); } - setState(1677); + setState(1717); _errHandler->sync(this); _la = _input->LA(1); } - setState(1684); + setState(1724); _errHandler->sync(this); _la = _input->LA(1); while (((((_la - 69) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 69)) & 4398046511393) != 0) || _la == CypherParser::SET) { - setState(1678); + setState(1718); oC_UpdatingClause(); - setState(1680); + setState(1720); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1679); + setState(1719); match(CypherParser::SP); } - setState(1686); + setState(1726); _errHandler->sync(this); _la = _input->LA(1); } - setState(1687); + setState(1727); oC_With(); } @@ -10339,7 +10571,7 @@ size_t CypherParser::OC_UpdatingClauseContext::getRuleIndex() const { CypherParser::OC_UpdatingClauseContext* CypherParser::oC_UpdatingClause() { OC_UpdatingClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 176, CypherParser::RuleOC_UpdatingClause); + enterRule(_localctx, 180, CypherParser::RuleOC_UpdatingClause); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -10349,26 +10581,26 @@ CypherParser::OC_UpdatingClauseContext* CypherParser::oC_UpdatingClause() { exitRule(); }); try { - setState(1693); + setState(1733); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::CREATE: { enterOuterAlt(_localctx, 1); - setState(1689); + setState(1729); oC_Create(); break; } case CypherParser::MERGE: { enterOuterAlt(_localctx, 2); - setState(1690); + setState(1730); oC_Merge(); break; } case CypherParser::SET: { enterOuterAlt(_localctx, 3); - setState(1691); + setState(1731); oC_Set(); break; } @@ -10376,7 +10608,7 @@ CypherParser::OC_UpdatingClauseContext* CypherParser::oC_UpdatingClause() { case CypherParser::DELETE: case CypherParser::DETACH: { enterOuterAlt(_localctx, 4); - setState(1692); + setState(1732); oC_Delete(); break; } @@ -10425,7 +10657,7 @@ size_t CypherParser::OC_ReadingClauseContext::getRuleIndex() const { CypherParser::OC_ReadingClauseContext* CypherParser::oC_ReadingClause() { OC_ReadingClauseContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 178, CypherParser::RuleOC_ReadingClause); + enterRule(_localctx, 182, CypherParser::RuleOC_ReadingClause); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -10435,34 +10667,34 @@ CypherParser::OC_ReadingClauseContext* CypherParser::oC_ReadingClause() { exitRule(); }); try { - setState(1699); + setState(1739); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::MATCH: case CypherParser::OPTIONAL: { enterOuterAlt(_localctx, 1); - setState(1695); + setState(1735); oC_Match(); break; } case CypherParser::UNWIND: { enterOuterAlt(_localctx, 2); - setState(1696); + setState(1736); oC_Unwind(); break; } case CypherParser::CALL: { enterOuterAlt(_localctx, 3); - setState(1697); + setState(1737); iC_InQueryCall(); break; } case CypherParser::LOAD: { enterOuterAlt(_localctx, 4); - setState(1698); + setState(1738); iC_LoadFrom(); break; } @@ -10535,7 +10767,7 @@ size_t CypherParser::IC_LoadFromContext::getRuleIndex() const { CypherParser::IC_LoadFromContext* CypherParser::iC_LoadFrom() { IC_LoadFromContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 180, CypherParser::RuleIC_LoadFrom); + enterRule(_localctx, 184, CypherParser::RuleIC_LoadFrom); size_t _la = 0; #if __cplusplus > 201703L @@ -10547,50 +10779,50 @@ CypherParser::IC_LoadFromContext* CypherParser::iC_LoadFrom() { }); try { enterOuterAlt(_localctx, 1); - setState(1701); + setState(1741); match(CypherParser::LOAD); - setState(1719); + setState(1759); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 236, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 242, _ctx)) { case 1: { - setState(1702); + setState(1742); match(CypherParser::SP); - setState(1703); + setState(1743); match(CypherParser::WITH); - setState(1704); + setState(1744); match(CypherParser::SP); - setState(1705); + setState(1745); match(CypherParser::HEADERS); - setState(1707); + setState(1747); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1706); + setState(1746); match(CypherParser::SP); } - setState(1709); + setState(1749); match(CypherParser::T__1); - setState(1711); + setState(1751); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1710); + setState(1750); match(CypherParser::SP); } - setState(1713); + setState(1753); iC_ColumnDefinitions(); - setState(1715); + setState(1755); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1714); + setState(1754); match(CypherParser::SP); } - setState(1717); + setState(1757); match(CypherParser::T__2); break; } @@ -10598,48 +10830,48 @@ CypherParser::IC_LoadFromContext* CypherParser::iC_LoadFrom() { default: break; } - setState(1721); + setState(1761); match(CypherParser::SP); - setState(1722); + setState(1762); match(CypherParser::FROM); - setState(1723); + setState(1763); match(CypherParser::SP); - setState(1724); + setState(1764); iC_ScanSource(); - setState(1738); + setState(1778); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 240, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 246, _ctx)) { case 1: { - setState(1726); + setState(1766); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1725); + setState(1765); match(CypherParser::SP); } - setState(1728); + setState(1768); match(CypherParser::T__1); - setState(1730); + setState(1770); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1729); + setState(1769); match(CypherParser::SP); } - setState(1732); + setState(1772); iC_Options(); - setState(1734); + setState(1774); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1733); + setState(1773); match(CypherParser::SP); } - setState(1736); + setState(1776); match(CypherParser::T__2); break; } @@ -10647,20 +10879,20 @@ CypherParser::IC_LoadFromContext* CypherParser::iC_LoadFrom() { default: break; } - setState(1744); + setState(1784); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 242, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 248, _ctx)) { case 1: { - setState(1741); + setState(1781); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1740); + setState(1780); match(CypherParser::SP); } - setState(1743); + setState(1783); oC_Where(); break; } @@ -10713,7 +10945,7 @@ size_t CypherParser::OC_YieldItemContext::getRuleIndex() const { CypherParser::OC_YieldItemContext* CypherParser::oC_YieldItem() { OC_YieldItemContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 182, CypherParser::RuleOC_YieldItem); + enterRule(_localctx, 186, CypherParser::RuleOC_YieldItem); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -10724,18 +10956,18 @@ CypherParser::OC_YieldItemContext* CypherParser::oC_YieldItem() { }); try { enterOuterAlt(_localctx, 1); - setState(1751); + setState(1791); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 243, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 249, _ctx)) { case 1: { - setState(1746); + setState(1786); oC_Variable(); - setState(1747); + setState(1787); match(CypherParser::SP); - setState(1748); + setState(1788); match(CypherParser::AS); - setState(1749); + setState(1789); match(CypherParser::SP); break; } @@ -10743,7 +10975,7 @@ CypherParser::OC_YieldItemContext* CypherParser::oC_YieldItem() { default: break; } - setState(1753); + setState(1793); oC_Variable(); } @@ -10786,7 +11018,7 @@ size_t CypherParser::OC_YieldItemsContext::getRuleIndex() const { CypherParser::OC_YieldItemsContext* CypherParser::oC_YieldItems() { OC_YieldItemsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 184, CypherParser::RuleOC_YieldItems); + enterRule(_localctx, 188, CypherParser::RuleOC_YieldItems); size_t _la = 0; #if __cplusplus > 201703L @@ -10799,37 +11031,37 @@ CypherParser::OC_YieldItemsContext* CypherParser::oC_YieldItems() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1755); + setState(1795); oC_YieldItem(); - setState(1766); + setState(1806); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 246, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 252, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1757); + setState(1797); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1756); + setState(1796); match(CypherParser::SP); } - setState(1759); + setState(1799); match(CypherParser::T__3); - setState(1761); + setState(1801); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1760); + setState(1800); match(CypherParser::SP); } - setState(1763); + setState(1803); oC_YieldItem(); } - setState(1768); + setState(1808); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 246, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 252, _ctx); } } @@ -10884,7 +11116,7 @@ size_t CypherParser::IC_InQueryCallContext::getRuleIndex() const { CypherParser::IC_InQueryCallContext* CypherParser::iC_InQueryCall() { IC_InQueryCallContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 186, CypherParser::RuleIC_InQueryCall); + enterRule(_localctx, 190, CypherParser::RuleIC_InQueryCall); size_t _la = 0; #if __cplusplus > 201703L @@ -10896,26 +11128,26 @@ CypherParser::IC_InQueryCallContext* CypherParser::iC_InQueryCall() { }); try { enterOuterAlt(_localctx, 1); - setState(1769); + setState(1809); match(CypherParser::CALL); - setState(1770); + setState(1810); match(CypherParser::SP); - setState(1771); + setState(1811); oC_FunctionInvocation(); - setState(1776); + setState(1816); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 248, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 254, _ctx)) { case 1: { - setState(1773); + setState(1813); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1772); + setState(1812); match(CypherParser::SP); } - setState(1775); + setState(1815); oC_Where(); break; } @@ -10923,24 +11155,24 @@ CypherParser::IC_InQueryCallContext* CypherParser::iC_InQueryCall() { default: break; } - setState(1784); + setState(1824); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 250, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 256, _ctx)) { case 1: { - setState(1779); + setState(1819); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1778); + setState(1818); match(CypherParser::SP); } - setState(1781); + setState(1821); match(CypherParser::YIELD); - setState(1782); + setState(1822); match(CypherParser::SP); - setState(1783); + setState(1823); oC_YieldItems(); break; } @@ -11001,7 +11233,7 @@ size_t CypherParser::OC_MatchContext::getRuleIndex() const { CypherParser::OC_MatchContext* CypherParser::oC_Match() { OC_MatchContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 188, CypherParser::RuleOC_Match); + enterRule(_localctx, 192, CypherParser::RuleOC_Match); size_t _la = 0; #if __cplusplus > 201703L @@ -11013,36 +11245,36 @@ CypherParser::OC_MatchContext* CypherParser::oC_Match() { }); try { enterOuterAlt(_localctx, 1); - setState(1788); + setState(1828); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::OPTIONAL) { - setState(1786); + setState(1826); match(CypherParser::OPTIONAL); - setState(1787); + setState(1827); match(CypherParser::SP); } - setState(1790); + setState(1830); match(CypherParser::MATCH); - setState(1792); + setState(1832); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1791); + setState(1831); match(CypherParser::SP); } - setState(1794); + setState(1834); oC_Pattern(); - setState(1797); + setState(1837); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 253, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 259, _ctx)) { case 1: { - setState(1795); + setState(1835); match(CypherParser::SP); - setState(1796); + setState(1836); oC_Where(); break; } @@ -11050,14 +11282,14 @@ CypherParser::OC_MatchContext* CypherParser::oC_Match() { default: break; } - setState(1801); + setState(1841); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 254, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 260, _ctx)) { case 1: { - setState(1799); + setState(1839); match(CypherParser::SP); - setState(1800); + setState(1840); iC_Hint(); break; } @@ -11102,7 +11334,7 @@ size_t CypherParser::IC_HintContext::getRuleIndex() const { CypherParser::IC_HintContext* CypherParser::iC_Hint() { IC_HintContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 190, CypherParser::RuleIC_Hint); + enterRule(_localctx, 194, CypherParser::RuleIC_Hint); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -11113,11 +11345,11 @@ CypherParser::IC_HintContext* CypherParser::iC_Hint() { }); try { enterOuterAlt(_localctx, 1); - setState(1803); + setState(1843); match(CypherParser::HINT); - setState(1804); + setState(1844); match(CypherParser::SP); - setState(1805); + setState(1845); iC_JoinNode(0); } @@ -11189,8 +11421,8 @@ CypherParser::IC_JoinNodeContext* CypherParser::iC_JoinNode(int precedence) { CypherParser::IC_JoinNodeContext *_localctx = _tracker.createInstance(_ctx, parentState); CypherParser::IC_JoinNodeContext *previousContext = _localctx; (void)previousContext; // Silence compiler, in case the context is not used by generated code. - size_t startState = 192; - enterRecursionRule(_localctx, 192, CypherParser::RuleIC_JoinNode, precedence); + size_t startState = 196; + enterRecursionRule(_localctx, 196, CypherParser::RuleIC_JoinNode, precedence); size_t _la = 0; @@ -11204,31 +11436,31 @@ CypherParser::IC_JoinNodeContext* CypherParser::iC_JoinNode(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1819); + setState(1859); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::T__1: { - setState(1808); + setState(1848); match(CypherParser::T__1); - setState(1810); + setState(1850); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1809); + setState(1849); match(CypherParser::SP); } - setState(1812); + setState(1852); iC_JoinNode(0); - setState(1814); + setState(1854); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1813); + setState(1853); match(CypherParser::SP); } - setState(1816); + setState(1856); match(CypherParser::T__2); break; } @@ -11299,7 +11531,7 @@ CypherParser::IC_JoinNodeContext* CypherParser::iC_JoinNode(int precedence) { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(1818); + setState(1858); oC_SchemaName(); break; } @@ -11308,30 +11540,30 @@ CypherParser::IC_JoinNodeContext* CypherParser::iC_JoinNode(int precedence) { throw NoViableAltException(this); } _ctx->stop = _input->LT(-1); - setState(1837); + setState(1877); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 260, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 266, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(1835); + setState(1875); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 259, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 265, _ctx)) { case 1: { _localctx = _tracker.createInstance(parentContext, parentState); pushNewRecursionContext(_localctx, startState, RuleIC_JoinNode); - setState(1821); + setState(1861); if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(1822); + setState(1862); match(CypherParser::SP); - setState(1823); + setState(1863); match(CypherParser::JOIN); - setState(1824); + setState(1864); match(CypherParser::SP); - setState(1825); + setState(1865); iC_JoinNode(5); break; } @@ -11339,22 +11571,22 @@ CypherParser::IC_JoinNodeContext* CypherParser::iC_JoinNode(int precedence) { case 2: { _localctx = _tracker.createInstance(parentContext, parentState); pushNewRecursionContext(_localctx, startState, RuleIC_JoinNode); - setState(1826); + setState(1866); if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(1831); + setState(1871); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(1827); + setState(1867); match(CypherParser::SP); - setState(1828); + setState(1868); match(CypherParser::MULTI_JOIN); - setState(1829); + setState(1869); match(CypherParser::SP); - setState(1830); + setState(1870); oC_SchemaName(); break; } @@ -11362,9 +11594,9 @@ CypherParser::IC_JoinNodeContext* CypherParser::iC_JoinNode(int precedence) { default: throw NoViableAltException(this); } - setState(1833); + setState(1873); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 258, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 264, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } @@ -11373,9 +11605,9 @@ CypherParser::IC_JoinNodeContext* CypherParser::iC_JoinNode(int precedence) { break; } } - setState(1839); + setState(1879); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 260, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 266, _ctx); } } catch (RecognitionException &e) { @@ -11424,7 +11656,7 @@ size_t CypherParser::OC_UnwindContext::getRuleIndex() const { CypherParser::OC_UnwindContext* CypherParser::oC_Unwind() { OC_UnwindContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 194, CypherParser::RuleOC_Unwind); + enterRule(_localctx, 198, CypherParser::RuleOC_Unwind); size_t _la = 0; #if __cplusplus > 201703L @@ -11436,25 +11668,25 @@ CypherParser::OC_UnwindContext* CypherParser::oC_Unwind() { }); try { enterOuterAlt(_localctx, 1); - setState(1840); + setState(1880); match(CypherParser::UNWIND); - setState(1842); + setState(1882); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1841); + setState(1881); match(CypherParser::SP); } - setState(1844); + setState(1884); oC_Expression(); - setState(1845); + setState(1885); match(CypherParser::SP); - setState(1846); + setState(1886); match(CypherParser::AS); - setState(1847); + setState(1887); match(CypherParser::SP); - setState(1848); + setState(1888); oC_Variable(); } @@ -11493,7 +11725,7 @@ size_t CypherParser::OC_CreateContext::getRuleIndex() const { CypherParser::OC_CreateContext* CypherParser::oC_Create() { OC_CreateContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 196, CypherParser::RuleOC_Create); + enterRule(_localctx, 200, CypherParser::RuleOC_Create); size_t _la = 0; #if __cplusplus > 201703L @@ -11505,17 +11737,17 @@ CypherParser::OC_CreateContext* CypherParser::oC_Create() { }); try { enterOuterAlt(_localctx, 1); - setState(1850); + setState(1890); match(CypherParser::CREATE); - setState(1852); + setState(1892); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1851); + setState(1891); match(CypherParser::SP); } - setState(1854); + setState(1894); oC_Pattern(); } @@ -11566,7 +11798,7 @@ size_t CypherParser::OC_MergeContext::getRuleIndex() const { CypherParser::OC_MergeContext* CypherParser::oC_Merge() { OC_MergeContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 198, CypherParser::RuleOC_Merge); + enterRule(_localctx, 202, CypherParser::RuleOC_Merge); size_t _la = 0; #if __cplusplus > 201703L @@ -11579,31 +11811,31 @@ CypherParser::OC_MergeContext* CypherParser::oC_Merge() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1856); + setState(1896); match(CypherParser::MERGE); - setState(1858); + setState(1898); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1857); + setState(1897); match(CypherParser::SP); } - setState(1860); + setState(1900); oC_Pattern(); - setState(1865); + setState(1905); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 264, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 270, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1861); + setState(1901); match(CypherParser::SP); - setState(1862); + setState(1902); oC_MergeAction(); } - setState(1867); + setState(1907); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 264, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 270, _ctx); } } @@ -11654,7 +11886,7 @@ size_t CypherParser::OC_MergeActionContext::getRuleIndex() const { CypherParser::OC_MergeActionContext* CypherParser::oC_MergeAction() { OC_MergeActionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 200, CypherParser::RuleOC_MergeAction); + enterRule(_localctx, 204, CypherParser::RuleOC_MergeAction); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -11664,35 +11896,35 @@ CypherParser::OC_MergeActionContext* CypherParser::oC_MergeAction() { exitRule(); }); try { - setState(1878); + setState(1918); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 265, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 271, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1868); + setState(1908); match(CypherParser::ON); - setState(1869); + setState(1909); match(CypherParser::SP); - setState(1870); + setState(1910); match(CypherParser::MATCH); - setState(1871); + setState(1911); match(CypherParser::SP); - setState(1872); + setState(1912); oC_Set(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1873); + setState(1913); match(CypherParser::ON); - setState(1874); + setState(1914); match(CypherParser::SP); - setState(1875); + setState(1915); match(CypherParser::CREATE); - setState(1876); + setState(1916); match(CypherParser::SP); - setState(1877); + setState(1917); oC_Set(); break; } @@ -11753,7 +11985,7 @@ size_t CypherParser::OC_SetContext::getRuleIndex() const { CypherParser::OC_SetContext* CypherParser::oC_Set() { OC_SetContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 202, CypherParser::RuleOC_Set); + enterRule(_localctx, 206, CypherParser::RuleOC_Set); size_t _la = 0; #if __cplusplus > 201703L @@ -11765,89 +11997,89 @@ CypherParser::OC_SetContext* CypherParser::oC_Set() { }); try { size_t alt; - setState(1912); + setState(1952); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 273, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 279, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1880); + setState(1920); match(CypherParser::SET); - setState(1882); + setState(1922); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1881); + setState(1921); match(CypherParser::SP); } - setState(1884); + setState(1924); oC_SetItem(); - setState(1895); + setState(1935); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 269, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 275, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1886); + setState(1926); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1885); + setState(1925); match(CypherParser::SP); } - setState(1888); + setState(1928); match(CypherParser::T__3); - setState(1890); + setState(1930); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1889); + setState(1929); match(CypherParser::SP); } - setState(1892); + setState(1932); oC_SetItem(); } - setState(1897); + setState(1937); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 269, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 275, _ctx); } break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1898); + setState(1938); match(CypherParser::SET); - setState(1900); + setState(1940); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1899); + setState(1939); match(CypherParser::SP); } - setState(1902); + setState(1942); oC_Atom(); - setState(1904); + setState(1944); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1903); + setState(1943); match(CypherParser::SP); } - setState(1906); + setState(1946); match(CypherParser::T__5); - setState(1908); + setState(1948); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1907); + setState(1947); match(CypherParser::SP); } - setState(1910); + setState(1950); iC_Properties(); break; } @@ -11896,7 +12128,7 @@ size_t CypherParser::OC_SetItemContext::getRuleIndex() const { CypherParser::OC_SetItemContext* CypherParser::oC_SetItem() { OC_SetItemContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 204, CypherParser::RuleOC_SetItem); + enterRule(_localctx, 208, CypherParser::RuleOC_SetItem); size_t _la = 0; #if __cplusplus > 201703L @@ -11908,27 +12140,27 @@ CypherParser::OC_SetItemContext* CypherParser::oC_SetItem() { }); try { enterOuterAlt(_localctx, 1); - setState(1914); + setState(1954); oC_PropertyExpression(); - setState(1916); + setState(1956); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1915); + setState(1955); match(CypherParser::SP); } - setState(1918); + setState(1958); match(CypherParser::T__5); - setState(1920); + setState(1960); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1919); + setState(1959); match(CypherParser::SP); } - setState(1922); + setState(1962); oC_Expression(); } @@ -11979,7 +12211,7 @@ size_t CypherParser::OC_DeleteContext::getRuleIndex() const { CypherParser::OC_DeleteContext* CypherParser::oC_Delete() { OC_DeleteContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 206, CypherParser::RuleOC_Delete); + enterRule(_localctx, 210, CypherParser::RuleOC_Delete); size_t _la = 0; #if __cplusplus > 201703L @@ -11992,57 +12224,57 @@ CypherParser::OC_DeleteContext* CypherParser::oC_Delete() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1926); + setState(1966); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DETACH) { - setState(1924); + setState(1964); match(CypherParser::DETACH); - setState(1925); + setState(1965); match(CypherParser::SP); } - setState(1928); + setState(1968); match(CypherParser::DELETE); - setState(1930); + setState(1970); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1929); + setState(1969); match(CypherParser::SP); } - setState(1932); + setState(1972); oC_Expression(); - setState(1943); + setState(1983); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 280, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 286, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1934); + setState(1974); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1933); + setState(1973); match(CypherParser::SP); } - setState(1936); + setState(1976); match(CypherParser::T__3); - setState(1938); + setState(1978); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1937); + setState(1977); match(CypherParser::SP); } - setState(1940); + setState(1980); oC_Expression(); } - setState(1945); + setState(1985); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 280, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 286, _ctx); } } @@ -12085,7 +12317,7 @@ size_t CypherParser::OC_WithContext::getRuleIndex() const { CypherParser::OC_WithContext* CypherParser::oC_With() { OC_WithContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 208, CypherParser::RuleOC_With); + enterRule(_localctx, 212, CypherParser::RuleOC_With); size_t _la = 0; #if __cplusplus > 201703L @@ -12097,24 +12329,24 @@ CypherParser::OC_WithContext* CypherParser::oC_With() { }); try { enterOuterAlt(_localctx, 1); - setState(1946); + setState(1986); match(CypherParser::WITH); - setState(1947); + setState(1987); oC_ProjectionBody(); - setState(1952); + setState(1992); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 282, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 288, _ctx)) { case 1: { - setState(1949); + setState(1989); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1948); + setState(1988); match(CypherParser::SP); } - setState(1951); + setState(1991); oC_Where(); break; } @@ -12155,7 +12387,7 @@ size_t CypherParser::OC_ReturnContext::getRuleIndex() const { CypherParser::OC_ReturnContext* CypherParser::oC_Return() { OC_ReturnContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 210, CypherParser::RuleOC_Return); + enterRule(_localctx, 214, CypherParser::RuleOC_Return); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12166,9 +12398,9 @@ CypherParser::OC_ReturnContext* CypherParser::oC_Return() { }); try { enterOuterAlt(_localctx, 1); - setState(1954); + setState(1994); match(CypherParser::RETURN); - setState(1955); + setState(1995); oC_ProjectionBody(); } @@ -12223,7 +12455,7 @@ size_t CypherParser::OC_ProjectionBodyContext::getRuleIndex() const { CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { OC_ProjectionBodyContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 212, CypherParser::RuleOC_ProjectionBody); + enterRule(_localctx, 216, CypherParser::RuleOC_ProjectionBody); size_t _la = 0; #if __cplusplus > 201703L @@ -12235,20 +12467,20 @@ CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { }); try { enterOuterAlt(_localctx, 1); - setState(1961); + setState(2001); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 284, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 290, _ctx)) { case 1: { - setState(1958); + setState(1998); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1957); + setState(1997); match(CypherParser::SP); } - setState(1960); + setState(2000); match(CypherParser::DISTINCT); break; } @@ -12256,18 +12488,18 @@ CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { default: break; } - setState(1963); + setState(2003); match(CypherParser::SP); - setState(1964); + setState(2004); oC_ProjectionItems(); - setState(1967); + setState(2007); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 285, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 291, _ctx)) { case 1: { - setState(1965); + setState(2005); match(CypherParser::SP); - setState(1966); + setState(2006); oC_Order(); break; } @@ -12275,14 +12507,14 @@ CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { default: break; } - setState(1971); + setState(2011); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 286, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 292, _ctx)) { case 1: { - setState(1969); + setState(2009); match(CypherParser::SP); - setState(1970); + setState(2010); oC_Skip(); break; } @@ -12290,14 +12522,14 @@ CypherParser::OC_ProjectionBodyContext* CypherParser::oC_ProjectionBody() { default: break; } - setState(1975); + setState(2015); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 287, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 293, _ctx)) { case 1: { - setState(1973); + setState(2013); match(CypherParser::SP); - setState(1974); + setState(2014); oC_Limit(); break; } @@ -12350,7 +12582,7 @@ size_t CypherParser::OC_ProjectionItemsContext::getRuleIndex() const { CypherParser::OC_ProjectionItemsContext* CypherParser::oC_ProjectionItems() { OC_ProjectionItemsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 214, CypherParser::RuleOC_ProjectionItems); + enterRule(_localctx, 218, CypherParser::RuleOC_ProjectionItems); size_t _la = 0; #if __cplusplus > 201703L @@ -12362,42 +12594,42 @@ CypherParser::OC_ProjectionItemsContext* CypherParser::oC_ProjectionItems() { }); try { size_t alt; - setState(2005); + setState(2045); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::STAR: { enterOuterAlt(_localctx, 1); - setState(1977); + setState(2017); match(CypherParser::STAR); - setState(1988); + setState(2028); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 290, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 296, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1979); + setState(2019); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1978); + setState(2018); match(CypherParser::SP); } - setState(1981); + setState(2021); match(CypherParser::T__3); - setState(1983); + setState(2023); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1982); + setState(2022); match(CypherParser::SP); } - setState(1985); + setState(2025); oC_ProjectionItem(); } - setState(1990); + setState(2030); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 290, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 296, _ctx); } break; } @@ -12489,37 +12721,37 @@ CypherParser::OC_ProjectionItemsContext* CypherParser::oC_ProjectionItems() { case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { enterOuterAlt(_localctx, 2); - setState(1991); + setState(2031); oC_ProjectionItem(); - setState(2002); + setState(2042); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 293, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 299, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1993); + setState(2033); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1992); + setState(2032); match(CypherParser::SP); } - setState(1995); + setState(2035); match(CypherParser::T__3); - setState(1997); + setState(2037); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(1996); + setState(2036); match(CypherParser::SP); } - setState(1999); + setState(2039); oC_ProjectionItem(); } - setState(2004); + setState(2044); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 293, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 299, _ctx); } break; } @@ -12572,7 +12804,7 @@ size_t CypherParser::OC_ProjectionItemContext::getRuleIndex() const { CypherParser::OC_ProjectionItemContext* CypherParser::oC_ProjectionItem() { OC_ProjectionItemContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 216, CypherParser::RuleOC_ProjectionItem); + enterRule(_localctx, 220, CypherParser::RuleOC_ProjectionItem); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12582,27 +12814,27 @@ CypherParser::OC_ProjectionItemContext* CypherParser::oC_ProjectionItem() { exitRule(); }); try { - setState(2014); + setState(2054); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 295, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 301, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2007); + setState(2047); oC_Expression(); - setState(2008); + setState(2048); match(CypherParser::SP); - setState(2009); + setState(2049); match(CypherParser::AS); - setState(2010); + setState(2050); match(CypherParser::SP); - setState(2011); + setState(2051); oC_Variable(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2013); + setState(2053); oC_Expression(); break; } @@ -12659,7 +12891,7 @@ size_t CypherParser::OC_OrderContext::getRuleIndex() const { CypherParser::OC_OrderContext* CypherParser::oC_Order() { OC_OrderContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 218, CypherParser::RuleOC_Order); + enterRule(_localctx, 222, CypherParser::RuleOC_Order); size_t _la = 0; #if __cplusplus > 201703L @@ -12671,33 +12903,33 @@ CypherParser::OC_OrderContext* CypherParser::oC_Order() { }); try { enterOuterAlt(_localctx, 1); - setState(2016); + setState(2056); match(CypherParser::ORDER); - setState(2017); + setState(2057); match(CypherParser::SP); - setState(2018); + setState(2058); match(CypherParser::BY); - setState(2019); + setState(2059); match(CypherParser::SP); - setState(2020); + setState(2060); oC_SortItem(); - setState(2028); + setState(2068); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2021); + setState(2061); match(CypherParser::T__3); - setState(2023); + setState(2063); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2022); + setState(2062); match(CypherParser::SP); } - setState(2025); + setState(2065); oC_SortItem(); - setState(2030); + setState(2070); _errHandler->sync(this); _la = _input->LA(1); } @@ -12738,7 +12970,7 @@ size_t CypherParser::OC_SkipContext::getRuleIndex() const { CypherParser::OC_SkipContext* CypherParser::oC_Skip() { OC_SkipContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 220, CypherParser::RuleOC_Skip); + enterRule(_localctx, 224, CypherParser::RuleOC_Skip); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12749,11 +12981,11 @@ CypherParser::OC_SkipContext* CypherParser::oC_Skip() { }); try { enterOuterAlt(_localctx, 1); - setState(2031); + setState(2071); match(CypherParser::L_SKIP); - setState(2032); + setState(2072); match(CypherParser::SP); - setState(2033); + setState(2073); oC_Expression(); } @@ -12792,7 +13024,7 @@ size_t CypherParser::OC_LimitContext::getRuleIndex() const { CypherParser::OC_LimitContext* CypherParser::oC_Limit() { OC_LimitContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 222, CypherParser::RuleOC_Limit); + enterRule(_localctx, 226, CypherParser::RuleOC_Limit); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12803,11 +13035,11 @@ CypherParser::OC_LimitContext* CypherParser::oC_Limit() { }); try { enterOuterAlt(_localctx, 1); - setState(2035); + setState(2075); match(CypherParser::LIMIT); - setState(2036); + setState(2076); match(CypherParser::SP); - setState(2037); + setState(2077); oC_Expression(); } @@ -12858,7 +13090,7 @@ size_t CypherParser::OC_SortItemContext::getRuleIndex() const { CypherParser::OC_SortItemContext* CypherParser::oC_SortItem() { OC_SortItemContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 224, CypherParser::RuleOC_SortItem); + enterRule(_localctx, 228, CypherParser::RuleOC_SortItem); size_t _la = 0; #if __cplusplus > 201703L @@ -12870,22 +13102,22 @@ CypherParser::OC_SortItemContext* CypherParser::oC_SortItem() { }); try { enterOuterAlt(_localctx, 1); - setState(2039); + setState(2079); oC_Expression(); - setState(2044); + setState(2084); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 299, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 305, _ctx)) { case 1: { - setState(2041); + setState(2081); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2040); + setState(2080); match(CypherParser::SP); } - setState(2043); + setState(2083); _la = _input->LA(1); if (!(((((_la - 53) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 53)) & 12582915) != 0))) { @@ -12938,7 +13170,7 @@ size_t CypherParser::OC_WhereContext::getRuleIndex() const { CypherParser::OC_WhereContext* CypherParser::oC_Where() { OC_WhereContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 226, CypherParser::RuleOC_Where); + enterRule(_localctx, 230, CypherParser::RuleOC_Where); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12949,11 +13181,11 @@ CypherParser::OC_WhereContext* CypherParser::oC_Where() { }); try { enterOuterAlt(_localctx, 1); - setState(2046); + setState(2086); match(CypherParser::WHERE); - setState(2047); + setState(2087); match(CypherParser::SP); - setState(2048); + setState(2088); oC_Expression(); } @@ -12996,7 +13228,7 @@ size_t CypherParser::OC_PatternContext::getRuleIndex() const { CypherParser::OC_PatternContext* CypherParser::oC_Pattern() { OC_PatternContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 228, CypherParser::RuleOC_Pattern); + enterRule(_localctx, 232, CypherParser::RuleOC_Pattern); size_t _la = 0; #if __cplusplus > 201703L @@ -13009,37 +13241,37 @@ CypherParser::OC_PatternContext* CypherParser::oC_Pattern() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2050); + setState(2090); oC_PatternPart(); - setState(2061); + setState(2101); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 302, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 308, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2052); + setState(2092); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2051); + setState(2091); match(CypherParser::SP); } - setState(2054); + setState(2094); match(CypherParser::T__3); - setState(2056); + setState(2096); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2055); + setState(2095); match(CypherParser::SP); } - setState(2058); + setState(2098); oC_PatternPart(); } - setState(2063); + setState(2103); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 302, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 308, _ctx); } } @@ -13082,7 +13314,7 @@ size_t CypherParser::OC_PatternPartContext::getRuleIndex() const { CypherParser::OC_PatternPartContext* CypherParser::oC_PatternPart() { OC_PatternPartContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 230, CypherParser::RuleOC_PatternPart); + enterRule(_localctx, 234, CypherParser::RuleOC_PatternPart); size_t _la = 0; #if __cplusplus > 201703L @@ -13093,7 +13325,7 @@ CypherParser::OC_PatternPartContext* CypherParser::oC_PatternPart() { exitRule(); }); try { - setState(2075); + setState(2115); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -13163,34 +13395,34 @@ CypherParser::OC_PatternPartContext* CypherParser::oC_PatternPart() { case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { enterOuterAlt(_localctx, 1); - setState(2064); + setState(2104); oC_Variable(); - setState(2066); + setState(2106); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2065); + setState(2105); match(CypherParser::SP); } - setState(2068); + setState(2108); match(CypherParser::T__5); - setState(2070); + setState(2110); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2069); + setState(2109); match(CypherParser::SP); } - setState(2072); + setState(2112); oC_AnonymousPatternPart(); break; } case CypherParser::T__1: { enterOuterAlt(_localctx, 2); - setState(2074); + setState(2114); oC_AnonymousPatternPart(); break; } @@ -13227,7 +13459,7 @@ size_t CypherParser::OC_AnonymousPatternPartContext::getRuleIndex() const { CypherParser::OC_AnonymousPatternPartContext* CypherParser::oC_AnonymousPatternPart() { OC_AnonymousPatternPartContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 232, CypherParser::RuleOC_AnonymousPatternPart); + enterRule(_localctx, 236, CypherParser::RuleOC_AnonymousPatternPart); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13238,7 +13470,7 @@ CypherParser::OC_AnonymousPatternPartContext* CypherParser::oC_AnonymousPatternP }); try { enterOuterAlt(_localctx, 1); - setState(2077); + setState(2117); oC_PatternElement(); } @@ -13289,7 +13521,7 @@ size_t CypherParser::OC_PatternElementContext::getRuleIndex() const { CypherParser::OC_PatternElementContext* CypherParser::oC_PatternElement() { OC_PatternElementContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 234, CypherParser::RuleOC_PatternElement); + enterRule(_localctx, 238, CypherParser::RuleOC_PatternElement); size_t _la = 0; #if __cplusplus > 201703L @@ -13301,43 +13533,43 @@ CypherParser::OC_PatternElementContext* CypherParser::oC_PatternElement() { }); try { size_t alt; - setState(2093); + setState(2133); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 308, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 314, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2079); + setState(2119); oC_NodePattern(); - setState(2086); + setState(2126); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 307, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 313, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2081); + setState(2121); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2080); + setState(2120); match(CypherParser::SP); } - setState(2083); + setState(2123); oC_PatternElementChain(); } - setState(2088); + setState(2128); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 307, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 313, _ctx); } break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2089); + setState(2129); match(CypherParser::T__1); - setState(2090); + setState(2130); oC_PatternElement(); - setState(2091); + setState(2131); match(CypherParser::T__2); break; } @@ -13390,7 +13622,7 @@ size_t CypherParser::OC_NodePatternContext::getRuleIndex() const { CypherParser::OC_NodePatternContext* CypherParser::oC_NodePattern() { OC_NodePatternContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 236, CypherParser::RuleOC_NodePattern); + enterRule(_localctx, 240, CypherParser::RuleOC_NodePattern); size_t _la = 0; #if __cplusplus > 201703L @@ -13402,68 +13634,68 @@ CypherParser::OC_NodePatternContext* CypherParser::oC_NodePattern() { }); try { enterOuterAlt(_localctx, 1); - setState(2095); + setState(2135); match(CypherParser::T__1); - setState(2097); + setState(2137); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2096); + setState(2136); match(CypherParser::SP); } - setState(2103); + setState(2143); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -6370763885380632576) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9219449713480129315) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 324400320977652447) != 0)) { - setState(2099); + ((1ULL << (_la - 128)) & 648800641955304671) != 0)) { + setState(2139); oC_Variable(); - setState(2101); + setState(2141); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2100); + setState(2140); match(CypherParser::SP); } } - setState(2109); + setState(2149); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::COLON) { - setState(2105); + setState(2145); oC_NodeLabels(); - setState(2107); + setState(2147); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2106); + setState(2146); match(CypherParser::SP); } } - setState(2115); + setState(2155); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__8) { - setState(2111); + setState(2151); iC_Properties(); - setState(2113); + setState(2153); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2112); + setState(2152); match(CypherParser::SP); } } - setState(2117); + setState(2157); match(CypherParser::T__2); } @@ -13502,7 +13734,7 @@ size_t CypherParser::OC_PatternElementChainContext::getRuleIndex() const { CypherParser::OC_PatternElementChainContext* CypherParser::oC_PatternElementChain() { OC_PatternElementChainContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 238, CypherParser::RuleOC_PatternElementChain); + enterRule(_localctx, 242, CypherParser::RuleOC_PatternElementChain); size_t _la = 0; #if __cplusplus > 201703L @@ -13514,17 +13746,17 @@ CypherParser::OC_PatternElementChainContext* CypherParser::oC_PatternElementChai }); try { enterOuterAlt(_localctx, 1); - setState(2119); + setState(2159); oC_RelationshipPattern(); - setState(2121); + setState(2161); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2120); + setState(2160); match(CypherParser::SP); } - setState(2123); + setState(2163); oC_NodePattern(); } @@ -13579,7 +13811,7 @@ size_t CypherParser::OC_RelationshipPatternContext::getRuleIndex() const { CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPattern() { OC_RelationshipPatternContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 240, CypherParser::RuleOC_RelationshipPattern); + enterRule(_localctx, 244, CypherParser::RuleOC_RelationshipPattern); size_t _la = 0; #if __cplusplus > 201703L @@ -13590,29 +13822,29 @@ CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPatter exitRule(); }); try { - setState(2169); + setState(2209); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 328, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 334, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2125); + setState(2165); oC_LeftArrowHead(); - setState(2127); + setState(2167); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2126); + setState(2166); match(CypherParser::SP); } - setState(2129); + setState(2169); oC_Dash(); - setState(2131); + setState(2171); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 318, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 324, _ctx)) { case 1: { - setState(2130); + setState(2170); match(CypherParser::SP); break; } @@ -13620,37 +13852,37 @@ CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPatter default: break; } - setState(2134); + setState(2174); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__6) { - setState(2133); + setState(2173); oC_RelationshipDetail(); } - setState(2137); + setState(2177); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2136); + setState(2176); match(CypherParser::SP); } - setState(2139); + setState(2179); oC_Dash(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2141); + setState(2181); oC_Dash(); - setState(2143); + setState(2183); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 321, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 327, _ctx)) { case 1: { - setState(2142); + setState(2182); match(CypherParser::SP); break; } @@ -13658,47 +13890,47 @@ CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPatter default: break; } - setState(2146); + setState(2186); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__6) { - setState(2145); + setState(2185); oC_RelationshipDetail(); } - setState(2149); + setState(2189); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2148); + setState(2188); match(CypherParser::SP); } - setState(2151); + setState(2191); oC_Dash(); - setState(2153); + setState(2193); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2152); + setState(2192); match(CypherParser::SP); } - setState(2155); + setState(2195); oC_RightArrowHead(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2157); + setState(2197); oC_Dash(); - setState(2159); + setState(2199); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 325, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 331, _ctx)) { case 1: { - setState(2158); + setState(2198); match(CypherParser::SP); break; } @@ -13706,23 +13938,23 @@ CypherParser::OC_RelationshipPatternContext* CypherParser::oC_RelationshipPatter default: break; } - setState(2162); + setState(2202); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__6) { - setState(2161); + setState(2201); oC_RelationshipDetail(); } - setState(2165); + setState(2205); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2164); + setState(2204); match(CypherParser::SP); } - setState(2167); + setState(2207); oC_Dash(); break; } @@ -13779,7 +14011,7 @@ size_t CypherParser::OC_RelationshipDetailContext::getRuleIndex() const { CypherParser::OC_RelationshipDetailContext* CypherParser::oC_RelationshipDetail() { OC_RelationshipDetailContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 242, CypherParser::RuleOC_RelationshipDetail); + enterRule(_localctx, 246, CypherParser::RuleOC_RelationshipDetail); size_t _la = 0; #if __cplusplus > 201703L @@ -13791,84 +14023,84 @@ CypherParser::OC_RelationshipDetailContext* CypherParser::oC_RelationshipDetail( }); try { enterOuterAlt(_localctx, 1); - setState(2171); + setState(2211); match(CypherParser::T__6); - setState(2173); + setState(2213); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2172); + setState(2212); match(CypherParser::SP); } - setState(2179); + setState(2219); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -6370763885380632576) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9219449713480129315) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 324400320977652447) != 0)) { - setState(2175); + ((1ULL << (_la - 128)) & 648800641955304671) != 0)) { + setState(2215); oC_Variable(); - setState(2177); + setState(2217); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2176); + setState(2216); match(CypherParser::SP); } } - setState(2185); + setState(2225); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::COLON) { - setState(2181); + setState(2221); oC_RelationshipTypes(); - setState(2183); + setState(2223); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2182); + setState(2222); match(CypherParser::SP); } } - setState(2191); + setState(2231); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::STAR) { - setState(2187); + setState(2227); iC_RecursiveDetail(); - setState(2189); + setState(2229); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2188); + setState(2228); match(CypherParser::SP); } } - setState(2197); + setState(2237); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__8) { - setState(2193); + setState(2233); iC_Properties(); - setState(2195); + setState(2235); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2194); + setState(2234); match(CypherParser::SP); } } - setState(2199); + setState(2239); match(CypherParser::T__7); } @@ -13927,7 +14159,7 @@ size_t CypherParser::IC_PropertiesContext::getRuleIndex() const { CypherParser::IC_PropertiesContext* CypherParser::iC_Properties() { IC_PropertiesContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 244, CypherParser::RuleIC_Properties); + enterRule(_localctx, 248, CypherParser::RuleIC_Properties); size_t _la = 0; #if __cplusplus > 201703L @@ -13939,104 +14171,104 @@ CypherParser::IC_PropertiesContext* CypherParser::iC_Properties() { }); try { enterOuterAlt(_localctx, 1); - setState(2201); + setState(2241); match(CypherParser::T__8); - setState(2203); + setState(2243); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2202); + setState(2242); match(CypherParser::SP); } - setState(2238); + setState(2278); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -6370763885380632576) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9219449713480129315) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 324400320977652447) != 0)) { - setState(2205); + ((1ULL << (_la - 128)) & 648800641955304671) != 0)) { + setState(2245); oC_PropertyKeyName(); - setState(2207); + setState(2247); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2206); + setState(2246); match(CypherParser::SP); } - setState(2209); + setState(2249); match(CypherParser::COLON); - setState(2211); + setState(2251); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2210); + setState(2250); match(CypherParser::SP); } - setState(2213); + setState(2253); oC_Expression(); - setState(2215); + setState(2255); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2214); + setState(2254); match(CypherParser::SP); } - setState(2235); + setState(2275); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2217); + setState(2257); match(CypherParser::T__3); - setState(2219); + setState(2259); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2218); + setState(2258); match(CypherParser::SP); } - setState(2221); + setState(2261); oC_PropertyKeyName(); - setState(2223); + setState(2263); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2222); + setState(2262); match(CypherParser::SP); } - setState(2225); + setState(2265); match(CypherParser::COLON); - setState(2227); + setState(2267); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2226); + setState(2266); match(CypherParser::SP); } - setState(2229); + setState(2269); oC_Expression(); - setState(2231); + setState(2271); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2230); + setState(2270); match(CypherParser::SP); } - setState(2237); + setState(2277); _errHandler->sync(this); _la = _input->LA(1); } } - setState(2240); + setState(2280); match(CypherParser::T__9); } @@ -14087,7 +14319,7 @@ size_t CypherParser::OC_RelationshipTypesContext::getRuleIndex() const { CypherParser::OC_RelationshipTypesContext* CypherParser::oC_RelationshipTypes() { OC_RelationshipTypesContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 246, CypherParser::RuleOC_RelationshipTypes); + enterRule(_localctx, 250, CypherParser::RuleOC_RelationshipTypes); size_t _la = 0; #if __cplusplus > 201703L @@ -14100,55 +14332,55 @@ CypherParser::OC_RelationshipTypesContext* CypherParser::oC_RelationshipTypes() try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2242); + setState(2282); match(CypherParser::COLON); - setState(2244); + setState(2284); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2243); + setState(2283); match(CypherParser::SP); } - setState(2246); + setState(2286); oC_RelTypeName(); - setState(2260); + setState(2300); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 352, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 358, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2248); + setState(2288); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2247); + setState(2287); match(CypherParser::SP); } - setState(2250); + setState(2290); match(CypherParser::T__10); - setState(2252); + setState(2292); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::COLON) { - setState(2251); + setState(2291); match(CypherParser::COLON); } - setState(2255); + setState(2295); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2254); + setState(2294); match(CypherParser::SP); } - setState(2257); + setState(2297); oC_RelTypeName(); } - setState(2262); + setState(2302); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 352, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 358, _ctx); } } @@ -14199,7 +14431,7 @@ size_t CypherParser::OC_NodeLabelsContext::getRuleIndex() const { CypherParser::OC_NodeLabelsContext* CypherParser::oC_NodeLabels() { OC_NodeLabelsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 248, CypherParser::RuleOC_NodeLabels); + enterRule(_localctx, 252, CypherParser::RuleOC_NodeLabels); size_t _la = 0; #if __cplusplus > 201703L @@ -14212,50 +14444,50 @@ CypherParser::OC_NodeLabelsContext* CypherParser::oC_NodeLabels() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2263); + setState(2303); match(CypherParser::COLON); - setState(2265); + setState(2305); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2264); + setState(2304); match(CypherParser::SP); } - setState(2267); + setState(2307); oC_LabelName(); - setState(2284); + setState(2324); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 358, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 364, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2269); + setState(2309); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2268); + setState(2308); match(CypherParser::SP); } - setState(2276); + setState(2316); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::T__10: { - setState(2271); + setState(2311); match(CypherParser::T__10); - setState(2273); + setState(2313); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::COLON) { - setState(2272); + setState(2312); match(CypherParser::COLON); } break; } case CypherParser::COLON: { - setState(2275); + setState(2315); match(CypherParser::COLON); break; } @@ -14263,20 +14495,20 @@ CypherParser::OC_NodeLabelsContext* CypherParser::oC_NodeLabels() { default: throw NoViableAltException(this); } - setState(2279); + setState(2319); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2278); + setState(2318); match(CypherParser::SP); } - setState(2281); + setState(2321); oC_LabelName(); } - setState(2286); + setState(2326); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 358, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 364, _ctx); } } @@ -14327,7 +14559,7 @@ size_t CypherParser::IC_RecursiveDetailContext::getRuleIndex() const { CypherParser::IC_RecursiveDetailContext* CypherParser::iC_RecursiveDetail() { IC_RecursiveDetailContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 250, CypherParser::RuleIC_RecursiveDetail); + enterRule(_localctx, 254, CypherParser::RuleIC_RecursiveDetail); size_t _la = 0; #if __cplusplus > 201703L @@ -14339,22 +14571,22 @@ CypherParser::IC_RecursiveDetailContext* CypherParser::iC_RecursiveDetail() { }); try { enterOuterAlt(_localctx, 1); - setState(2287); + setState(2327); match(CypherParser::STAR); - setState(2292); + setState(2332); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 360, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 366, _ctx)) { case 1: { - setState(2289); + setState(2329); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2288); + setState(2328); match(CypherParser::SP); } - setState(2291); + setState(2331); iC_RecursiveType(); break; } @@ -14362,17 +14594,17 @@ CypherParser::IC_RecursiveDetailContext* CypherParser::iC_RecursiveDetail() { default: break; } - setState(2298); + setState(2338); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 362, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 368, _ctx)) { case 1: { - setState(2295); + setState(2335); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 361, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 367, _ctx)) { case 1: { - setState(2294); + setState(2334); match(CypherParser::SP); break; } @@ -14380,7 +14612,7 @@ CypherParser::IC_RecursiveDetailContext* CypherParser::iC_RecursiveDetail() { default: break; } - setState(2297); + setState(2337); oC_RangeLiteral(); break; } @@ -14388,20 +14620,20 @@ CypherParser::IC_RecursiveDetailContext* CypherParser::iC_RecursiveDetail() { default: break; } - setState(2304); + setState(2344); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 364, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 370, _ctx)) { case 1: { - setState(2301); + setState(2341); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2300); + setState(2340); match(CypherParser::SP); } - setState(2303); + setState(2343); iC_RecursiveComprehension(); break; } @@ -14466,7 +14698,7 @@ size_t CypherParser::IC_RecursiveTypeContext::getRuleIndex() const { CypherParser::IC_RecursiveTypeContext* CypherParser::iC_RecursiveType() { IC_RecursiveTypeContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 252, CypherParser::RuleIC_RecursiveType); + enterRule(_localctx, 256, CypherParser::RuleIC_RecursiveType); size_t _la = 0; #if __cplusplus > 201703L @@ -14477,84 +14709,84 @@ CypherParser::IC_RecursiveTypeContext* CypherParser::iC_RecursiveType() { exitRule(); }); try { - setState(2330); + setState(2370); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 369, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 375, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2308); + setState(2348); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::ALL) { - setState(2306); + setState(2346); match(CypherParser::ALL); - setState(2307); + setState(2347); match(CypherParser::SP); } - setState(2310); + setState(2350); match(CypherParser::WSHORTEST); - setState(2312); + setState(2352); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2311); + setState(2351); match(CypherParser::SP); } - setState(2314); + setState(2354); match(CypherParser::T__1); - setState(2316); + setState(2356); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2315); + setState(2355); match(CypherParser::SP); } - setState(2318); + setState(2358); oC_PropertyKeyName(); - setState(2320); + setState(2360); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2319); + setState(2359); match(CypherParser::SP); } - setState(2322); + setState(2362); match(CypherParser::T__2); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2324); + setState(2364); match(CypherParser::SHORTEST); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2325); + setState(2365); match(CypherParser::ALL); - setState(2326); + setState(2366); match(CypherParser::SP); - setState(2327); + setState(2367); match(CypherParser::SHORTEST); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(2328); + setState(2368); match(CypherParser::TRAIL); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(2329); + setState(2369); match(CypherParser::ACYCLIC); break; } @@ -14611,7 +14843,7 @@ size_t CypherParser::OC_RangeLiteralContext::getRuleIndex() const { CypherParser::OC_RangeLiteralContext* CypherParser::oC_RangeLiteral() { OC_RangeLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 254, CypherParser::RuleOC_RangeLiteral); + enterRule(_localctx, 258, CypherParser::RuleOC_RangeLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -14622,35 +14854,35 @@ CypherParser::OC_RangeLiteralContext* CypherParser::oC_RangeLiteral() { exitRule(); }); try { - setState(2346); + setState(2386); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 374, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 380, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2333); + setState(2373); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DecimalInteger) { - setState(2332); + setState(2372); oC_LowerBound(); } - setState(2336); + setState(2376); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2335); + setState(2375); match(CypherParser::SP); } - setState(2338); + setState(2378); match(CypherParser::DOTDOT); - setState(2340); + setState(2380); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 372, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 378, _ctx)) { case 1: { - setState(2339); + setState(2379); match(CypherParser::SP); break; } @@ -14658,12 +14890,12 @@ CypherParser::OC_RangeLiteralContext* CypherParser::oC_RangeLiteral() { default: break; } - setState(2343); + setState(2383); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DecimalInteger) { - setState(2342); + setState(2382); oC_UpperBound(); } break; @@ -14671,7 +14903,7 @@ CypherParser::OC_RangeLiteralContext* CypherParser::oC_RangeLiteral() { case 2: { enterOuterAlt(_localctx, 2); - setState(2345); + setState(2385); oC_IntegerLiteral(); break; } @@ -14732,7 +14964,7 @@ size_t CypherParser::IC_RecursiveComprehensionContext::getRuleIndex() const { CypherParser::IC_RecursiveComprehensionContext* CypherParser::iC_RecursiveComprehension() { IC_RecursiveComprehensionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 256, CypherParser::RuleIC_RecursiveComprehension); + enterRule(_localctx, 260, CypherParser::RuleIC_RecursiveComprehension); size_t _la = 0; #if __cplusplus > 201703L @@ -14744,69 +14976,69 @@ CypherParser::IC_RecursiveComprehensionContext* CypherParser::iC_RecursiveCompre }); try { enterOuterAlt(_localctx, 1); - setState(2348); + setState(2388); match(CypherParser::T__1); - setState(2350); + setState(2390); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2349); + setState(2389); match(CypherParser::SP); } - setState(2352); + setState(2392); oC_Variable(); - setState(2354); + setState(2394); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2353); + setState(2393); match(CypherParser::SP); } - setState(2356); + setState(2396); match(CypherParser::T__3); - setState(2358); + setState(2398); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2357); + setState(2397); match(CypherParser::SP); } - setState(2360); + setState(2400); oC_Variable(); - setState(2372); + setState(2412); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 381, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 387, _ctx)) { case 1: { - setState(2362); + setState(2402); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2361); + setState(2401); match(CypherParser::SP); } - setState(2364); + setState(2404); match(CypherParser::T__10); - setState(2366); + setState(2406); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2365); + setState(2405); match(CypherParser::SP); } - setState(2368); + setState(2408); oC_Where(); - setState(2370); + setState(2410); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 380, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 386, _ctx)) { case 1: { - setState(2369); + setState(2409); match(CypherParser::SP); break; } @@ -14820,61 +15052,61 @@ CypherParser::IC_RecursiveComprehensionContext* CypherParser::iC_RecursiveCompre default: break; } - setState(2393); + setState(2433); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__10 || _la == CypherParser::SP) { - setState(2375); + setState(2415); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2374); + setState(2414); match(CypherParser::SP); } - setState(2377); + setState(2417); match(CypherParser::T__10); - setState(2379); + setState(2419); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2378); + setState(2418); match(CypherParser::SP); } - setState(2381); + setState(2421); iC_RecursiveProjectionItems(); - setState(2383); + setState(2423); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2382); + setState(2422); match(CypherParser::SP); } - setState(2385); + setState(2425); match(CypherParser::T__3); - setState(2387); + setState(2427); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2386); + setState(2426); match(CypherParser::SP); } - setState(2389); + setState(2429); iC_RecursiveProjectionItems(); - setState(2391); + setState(2431); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2390); + setState(2430); match(CypherParser::SP); } } - setState(2395); + setState(2435); match(CypherParser::T__2); } @@ -14913,7 +15145,7 @@ size_t CypherParser::IC_RecursiveProjectionItemsContext::getRuleIndex() const { CypherParser::IC_RecursiveProjectionItemsContext* CypherParser::iC_RecursiveProjectionItems() { IC_RecursiveProjectionItemsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 258, CypherParser::RuleIC_RecursiveProjectionItems); + enterRule(_localctx, 262, CypherParser::RuleIC_RecursiveProjectionItems); size_t _la = 0; #if __cplusplus > 201703L @@ -14925,14 +15157,14 @@ CypherParser::IC_RecursiveProjectionItemsContext* CypherParser::iC_RecursiveProj }); try { enterOuterAlt(_localctx, 1); - setState(2397); + setState(2437); match(CypherParser::T__8); - setState(2399); + setState(2439); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 388, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 394, _ctx)) { case 1: { - setState(2398); + setState(2438); match(CypherParser::SP); break; } @@ -14940,26 +15172,26 @@ CypherParser::IC_RecursiveProjectionItemsContext* CypherParser::iC_RecursiveProj default: break; } - setState(2402); + setState(2442); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -4641029784715918716) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9187924516079622947) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 351514416231434975) != 0)) { - setState(2401); + ((1ULL << (_la - 128)) & 703028832462869727) != 0)) { + setState(2441); oC_ProjectionItems(); } - setState(2405); + setState(2445); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2404); + setState(2444); match(CypherParser::SP); } - setState(2407); + setState(2447); match(CypherParser::T__9); } @@ -14990,7 +15222,7 @@ size_t CypherParser::OC_LowerBoundContext::getRuleIndex() const { CypherParser::OC_LowerBoundContext* CypherParser::oC_LowerBound() { OC_LowerBoundContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 260, CypherParser::RuleOC_LowerBound); + enterRule(_localctx, 264, CypherParser::RuleOC_LowerBound); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15001,7 +15233,7 @@ CypherParser::OC_LowerBoundContext* CypherParser::oC_LowerBound() { }); try { enterOuterAlt(_localctx, 1); - setState(2409); + setState(2449); match(CypherParser::DecimalInteger); } @@ -15032,7 +15264,7 @@ size_t CypherParser::OC_UpperBoundContext::getRuleIndex() const { CypherParser::OC_UpperBoundContext* CypherParser::oC_UpperBound() { OC_UpperBoundContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 262, CypherParser::RuleOC_UpperBound); + enterRule(_localctx, 266, CypherParser::RuleOC_UpperBound); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15043,7 +15275,7 @@ CypherParser::OC_UpperBoundContext* CypherParser::oC_UpperBound() { }); try { enterOuterAlt(_localctx, 1); - setState(2411); + setState(2451); match(CypherParser::DecimalInteger); } @@ -15078,7 +15310,7 @@ size_t CypherParser::OC_LabelNameContext::getRuleIndex() const { CypherParser::OC_LabelNameContext* CypherParser::oC_LabelName() { OC_LabelNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 264, CypherParser::RuleOC_LabelName); + enterRule(_localctx, 268, CypherParser::RuleOC_LabelName); size_t _la = 0; #if __cplusplus > 201703L @@ -15090,16 +15322,16 @@ CypherParser::OC_LabelNameContext* CypherParser::oC_LabelName() { }); try { enterOuterAlt(_localctx, 1); - setState(2413); + setState(2453); oC_SchemaName(); - setState(2416); + setState(2456); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::T__4) { - setState(2414); + setState(2454); match(CypherParser::T__4); - setState(2415); + setState(2455); oC_SchemaName(); } @@ -15131,7 +15363,7 @@ size_t CypherParser::OC_RelTypeNameContext::getRuleIndex() const { CypherParser::OC_RelTypeNameContext* CypherParser::oC_RelTypeName() { OC_RelTypeNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 266, CypherParser::RuleOC_RelTypeName); + enterRule(_localctx, 270, CypherParser::RuleOC_RelTypeName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15142,7 +15374,7 @@ CypherParser::OC_RelTypeNameContext* CypherParser::oC_RelTypeName() { }); try { enterOuterAlt(_localctx, 1); - setState(2418); + setState(2458); oC_SchemaName(); } @@ -15173,7 +15405,7 @@ size_t CypherParser::OC_ExpressionContext::getRuleIndex() const { CypherParser::OC_ExpressionContext* CypherParser::oC_Expression() { OC_ExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 268, CypherParser::RuleOC_Expression); + enterRule(_localctx, 272, CypherParser::RuleOC_Expression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15184,7 +15416,7 @@ CypherParser::OC_ExpressionContext* CypherParser::oC_Expression() { }); try { enterOuterAlt(_localctx, 1); - setState(2420); + setState(2460); oC_OrExpression(); } @@ -15235,7 +15467,7 @@ size_t CypherParser::OC_OrExpressionContext::getRuleIndex() const { CypherParser::OC_OrExpressionContext* CypherParser::oC_OrExpression() { OC_OrExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 270, CypherParser::RuleOC_OrExpression); + enterRule(_localctx, 274, CypherParser::RuleOC_OrExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15247,25 +15479,25 @@ CypherParser::OC_OrExpressionContext* CypherParser::oC_OrExpression() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2422); + setState(2462); oC_XorExpression(); - setState(2429); + setState(2469); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 392, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 398, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2423); + setState(2463); match(CypherParser::SP); - setState(2424); + setState(2464); match(CypherParser::OR); - setState(2425); + setState(2465); match(CypherParser::SP); - setState(2426); + setState(2466); oC_XorExpression(); } - setState(2431); + setState(2471); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 392, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 398, _ctx); } } @@ -15316,7 +15548,7 @@ size_t CypherParser::OC_XorExpressionContext::getRuleIndex() const { CypherParser::OC_XorExpressionContext* CypherParser::oC_XorExpression() { OC_XorExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 272, CypherParser::RuleOC_XorExpression); + enterRule(_localctx, 276, CypherParser::RuleOC_XorExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15328,25 +15560,25 @@ CypherParser::OC_XorExpressionContext* CypherParser::oC_XorExpression() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2432); + setState(2472); oC_AndExpression(); - setState(2439); + setState(2479); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 393, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 399, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2433); + setState(2473); match(CypherParser::SP); - setState(2434); + setState(2474); match(CypherParser::XOR); - setState(2435); + setState(2475); match(CypherParser::SP); - setState(2436); + setState(2476); oC_AndExpression(); } - setState(2441); + setState(2481); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 393, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 399, _ctx); } } @@ -15397,7 +15629,7 @@ size_t CypherParser::OC_AndExpressionContext::getRuleIndex() const { CypherParser::OC_AndExpressionContext* CypherParser::oC_AndExpression() { OC_AndExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 274, CypherParser::RuleOC_AndExpression); + enterRule(_localctx, 278, CypherParser::RuleOC_AndExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -15409,25 +15641,25 @@ CypherParser::OC_AndExpressionContext* CypherParser::oC_AndExpression() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2442); + setState(2482); oC_NotExpression(); - setState(2449); + setState(2489); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 394, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 400, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2443); + setState(2483); match(CypherParser::SP); - setState(2444); + setState(2484); match(CypherParser::AND); - setState(2445); + setState(2485); match(CypherParser::SP); - setState(2446); + setState(2486); oC_NotExpression(); } - setState(2451); + setState(2491); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 394, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 400, _ctx); } } @@ -15474,7 +15706,7 @@ size_t CypherParser::OC_NotExpressionContext::getRuleIndex() const { CypherParser::OC_NotExpressionContext* CypherParser::oC_NotExpression() { OC_NotExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 276, CypherParser::RuleOC_NotExpression); + enterRule(_localctx, 280, CypherParser::RuleOC_NotExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -15486,25 +15718,25 @@ CypherParser::OC_NotExpressionContext* CypherParser::oC_NotExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(2458); + setState(2498); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::NOT) { - setState(2452); + setState(2492); match(CypherParser::NOT); - setState(2454); + setState(2494); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2453); + setState(2493); match(CypherParser::SP); } - setState(2460); + setState(2500); _errHandler->sync(this); _la = _input->LA(1); } - setState(2461); + setState(2501); oC_ComparisonExpression(); } @@ -15559,7 +15791,7 @@ size_t CypherParser::OC_ComparisonExpressionContext::getRuleIndex() const { CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpression() { OC_ComparisonExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 278, CypherParser::RuleOC_ComparisonExpression); + enterRule(_localctx, 282, CypherParser::RuleOC_ComparisonExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -15571,37 +15803,37 @@ CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpress }); try { size_t alt; - setState(2511); + setState(2551); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 407, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 413, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2463); + setState(2503); iC_BitwiseOrOperatorExpression(); - setState(2473); + setState(2513); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 399, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 405, _ctx)) { case 1: { - setState(2465); + setState(2505); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2464); + setState(2504); match(CypherParser::SP); } - setState(2467); + setState(2507); iC_ComparisonOperator(); - setState(2469); + setState(2509); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2468); + setState(2508); match(CypherParser::SP); } - setState(2471); + setState(2511); iC_BitwiseOrOperatorExpression(); break; } @@ -15614,28 +15846,28 @@ CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpress case 2: { enterOuterAlt(_localctx, 2); - setState(2475); + setState(2515); iC_BitwiseOrOperatorExpression(); - setState(2477); + setState(2517); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2476); + setState(2516); match(CypherParser::SP); } - setState(2479); + setState(2519); antlrcpp::downCast(_localctx)->invalid_not_equalToken = match(CypherParser::INVALID_NOT_EQUAL); - setState(2481); + setState(2521); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2480); + setState(2520); match(CypherParser::SP); } - setState(2483); + setState(2523); iC_BitwiseOrOperatorExpression(); notifyInvalidNotEqualOperator(antlrcpp::downCast(_localctx)->invalid_not_equalToken); break; @@ -15643,53 +15875,53 @@ CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpress case 3: { enterOuterAlt(_localctx, 3); - setState(2487); + setState(2527); iC_BitwiseOrOperatorExpression(); - setState(2489); + setState(2529); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2488); + setState(2528); match(CypherParser::SP); } - setState(2491); + setState(2531); iC_ComparisonOperator(); - setState(2493); + setState(2533); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2492); + setState(2532); match(CypherParser::SP); } - setState(2495); + setState(2535); iC_BitwiseOrOperatorExpression(); - setState(2505); + setState(2545); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(2497); + setState(2537); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2496); + setState(2536); match(CypherParser::SP); } - setState(2499); + setState(2539); iC_ComparisonOperator(); - setState(2501); + setState(2541); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2500); + setState(2540); match(CypherParser::SP); } - setState(2503); + setState(2543); iC_BitwiseOrOperatorExpression(); break; } @@ -15697,9 +15929,9 @@ CypherParser::OC_ComparisonExpressionContext* CypherParser::oC_ComparisonExpress default: throw NoViableAltException(this); } - setState(2507); + setState(2547); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 406, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 412, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); notifyNonBinaryComparison(_localctx->start); break; @@ -15733,7 +15965,7 @@ size_t CypherParser::IC_ComparisonOperatorContext::getRuleIndex() const { CypherParser::IC_ComparisonOperatorContext* CypherParser::iC_ComparisonOperator() { IC_ComparisonOperatorContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 280, CypherParser::RuleIC_ComparisonOperator); + enterRule(_localctx, 284, CypherParser::RuleIC_ComparisonOperator); size_t _la = 0; #if __cplusplus > 201703L @@ -15745,7 +15977,7 @@ CypherParser::IC_ComparisonOperatorContext* CypherParser::iC_ComparisonOperator( }); try { enterOuterAlt(_localctx, 1); - setState(2513); + setState(2553); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 127040) != 0))) { @@ -15796,7 +16028,7 @@ size_t CypherParser::IC_BitwiseOrOperatorExpressionContext::getRuleIndex() const CypherParser::IC_BitwiseOrOperatorExpressionContext* CypherParser::iC_BitwiseOrOperatorExpression() { IC_BitwiseOrOperatorExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 282, CypherParser::RuleIC_BitwiseOrOperatorExpression); + enterRule(_localctx, 286, CypherParser::RuleIC_BitwiseOrOperatorExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -15809,37 +16041,37 @@ CypherParser::IC_BitwiseOrOperatorExpressionContext* CypherParser::iC_BitwiseOrO try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2515); + setState(2555); iC_BitwiseAndOperatorExpression(); - setState(2526); + setState(2566); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 410, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 416, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2517); + setState(2557); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2516); + setState(2556); match(CypherParser::SP); } - setState(2519); + setState(2559); match(CypherParser::T__10); - setState(2521); + setState(2561); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2520); + setState(2560); match(CypherParser::SP); } - setState(2523); + setState(2563); iC_BitwiseAndOperatorExpression(); } - setState(2528); + setState(2568); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 410, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 416, _ctx); } } @@ -15882,7 +16114,7 @@ size_t CypherParser::IC_BitwiseAndOperatorExpressionContext::getRuleIndex() cons CypherParser::IC_BitwiseAndOperatorExpressionContext* CypherParser::iC_BitwiseAndOperatorExpression() { IC_BitwiseAndOperatorExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 284, CypherParser::RuleIC_BitwiseAndOperatorExpression); + enterRule(_localctx, 288, CypherParser::RuleIC_BitwiseAndOperatorExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -15895,37 +16127,37 @@ CypherParser::IC_BitwiseAndOperatorExpressionContext* CypherParser::iC_BitwiseAn try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2529); + setState(2569); iC_BitShiftOperatorExpression(); - setState(2540); + setState(2580); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 413, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 419, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2531); + setState(2571); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2530); + setState(2570); match(CypherParser::SP); } - setState(2533); + setState(2573); match(CypherParser::T__16); - setState(2535); + setState(2575); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2534); + setState(2574); match(CypherParser::SP); } - setState(2537); + setState(2577); iC_BitShiftOperatorExpression(); } - setState(2542); + setState(2582); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 413, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 419, _ctx); } } @@ -15976,7 +16208,7 @@ size_t CypherParser::IC_BitShiftOperatorExpressionContext::getRuleIndex() const CypherParser::IC_BitShiftOperatorExpressionContext* CypherParser::iC_BitShiftOperatorExpression() { IC_BitShiftOperatorExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 286, CypherParser::RuleIC_BitShiftOperatorExpression); + enterRule(_localctx, 290, CypherParser::RuleIC_BitShiftOperatorExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -15989,37 +16221,37 @@ CypherParser::IC_BitShiftOperatorExpressionContext* CypherParser::iC_BitShiftOpe try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2543); + setState(2583); oC_AddOrSubtractExpression(); - setState(2555); + setState(2595); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 416, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 422, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2545); + setState(2585); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2544); + setState(2584); match(CypherParser::SP); } - setState(2547); + setState(2587); iC_BitShiftOperator(); - setState(2549); + setState(2589); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2548); + setState(2588); match(CypherParser::SP); } - setState(2551); + setState(2591); oC_AddOrSubtractExpression(); } - setState(2557); + setState(2597); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 416, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 422, _ctx); } } @@ -16046,7 +16278,7 @@ size_t CypherParser::IC_BitShiftOperatorContext::getRuleIndex() const { CypherParser::IC_BitShiftOperatorContext* CypherParser::iC_BitShiftOperator() { IC_BitShiftOperatorContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 288, CypherParser::RuleIC_BitShiftOperator); + enterRule(_localctx, 292, CypherParser::RuleIC_BitShiftOperator); size_t _la = 0; #if __cplusplus > 201703L @@ -16058,7 +16290,7 @@ CypherParser::IC_BitShiftOperatorContext* CypherParser::iC_BitShiftOperator() { }); try { enterOuterAlt(_localctx, 1); - setState(2558); + setState(2598); _la = _input->LA(1); if (!(_la == CypherParser::T__17 @@ -16118,7 +16350,7 @@ size_t CypherParser::OC_AddOrSubtractExpressionContext::getRuleIndex() const { CypherParser::OC_AddOrSubtractExpressionContext* CypherParser::oC_AddOrSubtractExpression() { OC_AddOrSubtractExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 290, CypherParser::RuleOC_AddOrSubtractExpression); + enterRule(_localctx, 294, CypherParser::RuleOC_AddOrSubtractExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -16131,37 +16363,37 @@ CypherParser::OC_AddOrSubtractExpressionContext* CypherParser::oC_AddOrSubtractE try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2560); + setState(2600); oC_MultiplyDivideModuloExpression(); - setState(2572); + setState(2612); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 419, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 425, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2562); + setState(2602); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2561); + setState(2601); match(CypherParser::SP); } - setState(2564); + setState(2604); iC_AddOrSubtractOperator(); - setState(2566); + setState(2606); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2565); + setState(2605); match(CypherParser::SP); } - setState(2568); + setState(2608); oC_MultiplyDivideModuloExpression(); } - setState(2574); + setState(2614); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 419, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 425, _ctx); } } @@ -16192,7 +16424,7 @@ size_t CypherParser::IC_AddOrSubtractOperatorContext::getRuleIndex() const { CypherParser::IC_AddOrSubtractOperatorContext* CypherParser::iC_AddOrSubtractOperator() { IC_AddOrSubtractOperatorContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 292, CypherParser::RuleIC_AddOrSubtractOperator); + enterRule(_localctx, 296, CypherParser::RuleIC_AddOrSubtractOperator); size_t _la = 0; #if __cplusplus > 201703L @@ -16204,7 +16436,7 @@ CypherParser::IC_AddOrSubtractOperatorContext* CypherParser::iC_AddOrSubtractOpe }); try { enterOuterAlt(_localctx, 1); - setState(2575); + setState(2615); _la = _input->LA(1); if (!(_la == CypherParser::T__19 || _la == CypherParser::MINUS)) { _errHandler->recoverInline(this); @@ -16262,7 +16494,7 @@ size_t CypherParser::OC_MultiplyDivideModuloExpressionContext::getRuleIndex() co CypherParser::OC_MultiplyDivideModuloExpressionContext* CypherParser::oC_MultiplyDivideModuloExpression() { OC_MultiplyDivideModuloExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 294, CypherParser::RuleOC_MultiplyDivideModuloExpression); + enterRule(_localctx, 298, CypherParser::RuleOC_MultiplyDivideModuloExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -16275,37 +16507,37 @@ CypherParser::OC_MultiplyDivideModuloExpressionContext* CypherParser::oC_Multipl try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2577); + setState(2617); oC_PowerOfExpression(); - setState(2589); + setState(2629); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 422, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 428, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2579); + setState(2619); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2578); + setState(2618); match(CypherParser::SP); } - setState(2581); + setState(2621); iC_MultiplyDivideModuloOperator(); - setState(2583); + setState(2623); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2582); + setState(2622); match(CypherParser::SP); } - setState(2585); + setState(2625); oC_PowerOfExpression(); } - setState(2591); + setState(2631); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 422, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 428, _ctx); } } @@ -16336,7 +16568,7 @@ size_t CypherParser::IC_MultiplyDivideModuloOperatorContext::getRuleIndex() cons CypherParser::IC_MultiplyDivideModuloOperatorContext* CypherParser::iC_MultiplyDivideModuloOperator() { IC_MultiplyDivideModuloOperatorContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 296, CypherParser::RuleIC_MultiplyDivideModuloOperator); + enterRule(_localctx, 300, CypherParser::RuleIC_MultiplyDivideModuloOperator); size_t _la = 0; #if __cplusplus > 201703L @@ -16348,7 +16580,7 @@ CypherParser::IC_MultiplyDivideModuloOperatorContext* CypherParser::iC_MultiplyD }); try { enterOuterAlt(_localctx, 1); - setState(2592); + setState(2632); _la = _input->LA(1); if (!(_la == CypherParser::T__20 @@ -16400,7 +16632,7 @@ size_t CypherParser::OC_PowerOfExpressionContext::getRuleIndex() const { CypherParser::OC_PowerOfExpressionContext* CypherParser::oC_PowerOfExpression() { OC_PowerOfExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 298, CypherParser::RuleOC_PowerOfExpression); + enterRule(_localctx, 302, CypherParser::RuleOC_PowerOfExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -16413,37 +16645,37 @@ CypherParser::OC_PowerOfExpressionContext* CypherParser::oC_PowerOfExpression() try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2594); + setState(2634); oC_StringListNullOperatorExpression(); - setState(2605); + setState(2645); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 425, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 431, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2596); + setState(2636); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2595); + setState(2635); match(CypherParser::SP); } - setState(2598); + setState(2638); match(CypherParser::T__22); - setState(2600); + setState(2640); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2599); + setState(2639); match(CypherParser::SP); } - setState(2602); + setState(2642); oC_StringListNullOperatorExpression(); } - setState(2607); + setState(2647); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 425, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 431, _ctx); } } @@ -16490,7 +16722,7 @@ size_t CypherParser::OC_StringListNullOperatorExpressionContext::getRuleIndex() CypherParser::OC_StringListNullOperatorExpressionContext* CypherParser::oC_StringListNullOperatorExpression() { OC_StringListNullOperatorExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 300, CypherParser::RuleOC_StringListNullOperatorExpression); + enterRule(_localctx, 304, CypherParser::RuleOC_StringListNullOperatorExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -16502,26 +16734,26 @@ CypherParser::OC_StringListNullOperatorExpressionContext* CypherParser::oC_Strin try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2608); + setState(2648); oC_UnaryAddSubtractOrFactorialExpression(); - setState(2616); + setState(2656); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 427, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 433, _ctx)) { case 1: { - setState(2609); + setState(2649); oC_StringOperatorExpression(); break; } case 2: { - setState(2611); + setState(2651); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(2610); + setState(2650); oC_ListOperatorExpression(); break; } @@ -16529,15 +16761,15 @@ CypherParser::OC_StringListNullOperatorExpressionContext* CypherParser::oC_Strin default: throw NoViableAltException(this); } - setState(2613); + setState(2653); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 426, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 432, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } case 3: { - setState(2615); + setState(2655); oC_NullOperatorExpression(); break; } @@ -16602,7 +16834,7 @@ size_t CypherParser::OC_ListOperatorExpressionContext::getRuleIndex() const { CypherParser::OC_ListOperatorExpressionContext* CypherParser::oC_ListOperatorExpression() { OC_ListOperatorExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 302, CypherParser::RuleOC_ListOperatorExpression); + enterRule(_localctx, 306, CypherParser::RuleOC_ListOperatorExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -16613,55 +16845,55 @@ CypherParser::OC_ListOperatorExpressionContext* CypherParser::oC_ListOperatorExp exitRule(); }); try { - setState(2637); + setState(2677); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 431, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 437, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2618); + setState(2658); match(CypherParser::SP); - setState(2619); + setState(2659); match(CypherParser::IN); - setState(2621); + setState(2661); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2620); + setState(2660); match(CypherParser::SP); } - setState(2623); + setState(2663); oC_PropertyOrLabelsExpression(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2624); + setState(2664); match(CypherParser::T__6); - setState(2625); + setState(2665); oC_Expression(); - setState(2626); + setState(2666); match(CypherParser::T__7); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2628); + setState(2668); match(CypherParser::T__6); - setState(2630); + setState(2670); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -4641029784715918716) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9187924516079622947) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 351514278792481503) != 0)) { - setState(2629); + ((1ULL << (_la - 128)) & 703028557584962783) != 0)) { + setState(2669); oC_Expression(); } - setState(2632); + setState(2672); _la = _input->LA(1); if (!(_la == CypherParser::COLON @@ -16672,18 +16904,18 @@ CypherParser::OC_ListOperatorExpressionContext* CypherParser::oC_ListOperatorExp _errHandler->reportMatch(this); consume(); } - setState(2634); + setState(2674); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -4641029784715918716) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9187924516079622947) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 351514278792481503) != 0)) { - setState(2633); + ((1ULL << (_la - 128)) & 703028557584962783) != 0)) { + setState(2673); oC_Expression(); } - setState(2636); + setState(2676); match(CypherParser::T__7); break; } @@ -16748,7 +16980,7 @@ size_t CypherParser::OC_StringOperatorExpressionContext::getRuleIndex() const { CypherParser::OC_StringOperatorExpressionContext* CypherParser::oC_StringOperatorExpression() { OC_StringOperatorExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 304, CypherParser::RuleOC_StringOperatorExpression); + enterRule(_localctx, 308, CypherParser::RuleOC_StringOperatorExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -16760,43 +16992,43 @@ CypherParser::OC_StringOperatorExpressionContext* CypherParser::oC_StringOperato }); try { enterOuterAlt(_localctx, 1); - setState(2650); + setState(2690); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 432, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 438, _ctx)) { case 1: { - setState(2639); + setState(2679); oC_RegularExpression(); break; } case 2: { - setState(2640); + setState(2680); match(CypherParser::SP); - setState(2641); + setState(2681); match(CypherParser::STARTS); - setState(2642); + setState(2682); match(CypherParser::SP); - setState(2643); + setState(2683); match(CypherParser::WITH); break; } case 3: { - setState(2644); + setState(2684); match(CypherParser::SP); - setState(2645); + setState(2685); match(CypherParser::ENDS); - setState(2646); + setState(2686); match(CypherParser::SP); - setState(2647); + setState(2687); match(CypherParser::WITH); break; } case 4: { - setState(2648); + setState(2688); match(CypherParser::SP); - setState(2649); + setState(2689); match(CypherParser::CONTAINS); break; } @@ -16804,15 +17036,15 @@ CypherParser::OC_StringOperatorExpressionContext* CypherParser::oC_StringOperato default: break; } - setState(2653); + setState(2693); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2652); + setState(2692); match(CypherParser::SP); } - setState(2655); + setState(2695); oC_PropertyOrLabelsExpression(); } @@ -16843,7 +17075,7 @@ size_t CypherParser::OC_RegularExpressionContext::getRuleIndex() const { CypherParser::OC_RegularExpressionContext* CypherParser::oC_RegularExpression() { OC_RegularExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 306, CypherParser::RuleOC_RegularExpression); + enterRule(_localctx, 310, CypherParser::RuleOC_RegularExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -16855,15 +17087,15 @@ CypherParser::OC_RegularExpressionContext* CypherParser::oC_RegularExpression() }); try { enterOuterAlt(_localctx, 1); - setState(2658); + setState(2698); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2657); + setState(2697); match(CypherParser::SP); } - setState(2660); + setState(2700); match(CypherParser::T__23); } @@ -16910,7 +17142,7 @@ size_t CypherParser::OC_NullOperatorExpressionContext::getRuleIndex() const { CypherParser::OC_NullOperatorExpressionContext* CypherParser::oC_NullOperatorExpression() { OC_NullOperatorExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 308, CypherParser::RuleOC_NullOperatorExpression); + enterRule(_localctx, 312, CypherParser::RuleOC_NullOperatorExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -16920,35 +17152,35 @@ CypherParser::OC_NullOperatorExpressionContext* CypherParser::oC_NullOperatorExp exitRule(); }); try { - setState(2672); + setState(2712); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 435, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 441, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2662); + setState(2702); match(CypherParser::SP); - setState(2663); + setState(2703); match(CypherParser::IS); - setState(2664); + setState(2704); match(CypherParser::SP); - setState(2665); + setState(2705); match(CypherParser::NULL_); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2666); + setState(2706); match(CypherParser::SP); - setState(2667); + setState(2707); match(CypherParser::IS); - setState(2668); + setState(2708); match(CypherParser::SP); - setState(2669); + setState(2709); match(CypherParser::NOT); - setState(2670); + setState(2710); match(CypherParser::SP); - setState(2671); + setState(2711); match(CypherParser::NULL_); break; } @@ -17005,7 +17237,7 @@ size_t CypherParser::OC_UnaryAddSubtractOrFactorialExpressionContext::getRuleInd CypherParser::OC_UnaryAddSubtractOrFactorialExpressionContext* CypherParser::oC_UnaryAddSubtractOrFactorialExpression() { OC_UnaryAddSubtractOrFactorialExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 310, CypherParser::RuleOC_UnaryAddSubtractOrFactorialExpression); + enterRule(_localctx, 314, CypherParser::RuleOC_UnaryAddSubtractOrFactorialExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -17017,40 +17249,40 @@ CypherParser::OC_UnaryAddSubtractOrFactorialExpressionContext* CypherParser::oC_ }); try { enterOuterAlt(_localctx, 1); - setState(2680); + setState(2720); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::MINUS) { - setState(2674); + setState(2714); match(CypherParser::MINUS); - setState(2676); + setState(2716); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2675); + setState(2715); match(CypherParser::SP); } - setState(2682); + setState(2722); _errHandler->sync(this); _la = _input->LA(1); } - setState(2683); + setState(2723); oC_PropertyOrLabelsExpression(); - setState(2688); + setState(2728); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 439, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 445, _ctx)) { case 1: { - setState(2685); + setState(2725); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2684); + setState(2724); match(CypherParser::SP); } - setState(2687); + setState(2727); match(CypherParser::FACTORIAL); break; } @@ -17103,7 +17335,7 @@ size_t CypherParser::OC_PropertyOrLabelsExpressionContext::getRuleIndex() const CypherParser::OC_PropertyOrLabelsExpressionContext* CypherParser::oC_PropertyOrLabelsExpression() { OC_PropertyOrLabelsExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 312, CypherParser::RuleOC_PropertyOrLabelsExpression); + enterRule(_localctx, 316, CypherParser::RuleOC_PropertyOrLabelsExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -17116,27 +17348,27 @@ CypherParser::OC_PropertyOrLabelsExpressionContext* CypherParser::oC_PropertyOrL try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2690); + setState(2730); oC_Atom(); - setState(2697); + setState(2737); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 441, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 447, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(2692); + setState(2732); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2691); + setState(2731); match(CypherParser::SP); } - setState(2694); + setState(2734); oC_PropertyLookup(); } - setState(2699); + setState(2739); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 441, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 447, _ctx); } } @@ -17199,7 +17431,7 @@ size_t CypherParser::OC_AtomContext::getRuleIndex() const { CypherParser::OC_AtomContext* CypherParser::oC_Atom() { OC_AtomContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 314, CypherParser::RuleOC_Atom); + enterRule(_localctx, 318, CypherParser::RuleOC_Atom); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -17209,68 +17441,68 @@ CypherParser::OC_AtomContext* CypherParser::oC_Atom() { exitRule(); }); try { - setState(2709); + setState(2749); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 442, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 448, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2700); + setState(2740); oC_Literal(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2701); + setState(2741); oC_Parameter(); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2702); + setState(2742); oC_CaseExpression(); break; } case 4: { enterOuterAlt(_localctx, 4); - setState(2703); + setState(2743); oC_ParenthesizedExpression(); break; } case 5: { enterOuterAlt(_localctx, 5); - setState(2704); + setState(2744); oC_FunctionInvocation(); break; } case 6: { enterOuterAlt(_localctx, 6); - setState(2705); + setState(2745); oC_PathPatterns(); break; } case 7: { enterOuterAlt(_localctx, 7); - setState(2706); + setState(2746); oC_ExistCountSubquery(); break; } case 8: { enterOuterAlt(_localctx, 8); - setState(2707); + setState(2747); oC_Variable(); break; } case 9: { enterOuterAlt(_localctx, 9); - setState(2708); + setState(2748); oC_Quantifier(); break; } @@ -17331,7 +17563,7 @@ size_t CypherParser::OC_QuantifierContext::getRuleIndex() const { CypherParser::OC_QuantifierContext* CypherParser::oC_Quantifier() { OC_QuantifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 316, CypherParser::RuleOC_Quantifier); + enterRule(_localctx, 320, CypherParser::RuleOC_Quantifier); size_t _la = 0; #if __cplusplus > 201703L @@ -17342,153 +17574,153 @@ CypherParser::OC_QuantifierContext* CypherParser::oC_Quantifier() { exitRule(); }); try { - setState(2767); + setState(2807); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ALL: { enterOuterAlt(_localctx, 1); - setState(2711); + setState(2751); match(CypherParser::ALL); - setState(2713); + setState(2753); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2712); + setState(2752); match(CypherParser::SP); } - setState(2715); + setState(2755); match(CypherParser::T__1); - setState(2717); + setState(2757); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2716); + setState(2756); match(CypherParser::SP); } - setState(2719); + setState(2759); oC_FilterExpression(); - setState(2721); + setState(2761); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2720); + setState(2760); match(CypherParser::SP); } - setState(2723); + setState(2763); match(CypherParser::T__2); break; } case CypherParser::ANY: { enterOuterAlt(_localctx, 2); - setState(2725); + setState(2765); match(CypherParser::ANY); - setState(2727); + setState(2767); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2726); + setState(2766); match(CypherParser::SP); } - setState(2729); + setState(2769); match(CypherParser::T__1); - setState(2731); + setState(2771); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2730); + setState(2770); match(CypherParser::SP); } - setState(2733); + setState(2773); oC_FilterExpression(); - setState(2735); + setState(2775); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2734); + setState(2774); match(CypherParser::SP); } - setState(2737); + setState(2777); match(CypherParser::T__2); break; } case CypherParser::NONE: { enterOuterAlt(_localctx, 3); - setState(2739); + setState(2779); match(CypherParser::NONE); - setState(2741); + setState(2781); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2740); + setState(2780); match(CypherParser::SP); } - setState(2743); + setState(2783); match(CypherParser::T__1); - setState(2745); + setState(2785); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2744); + setState(2784); match(CypherParser::SP); } - setState(2747); + setState(2787); oC_FilterExpression(); - setState(2749); + setState(2789); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2748); + setState(2788); match(CypherParser::SP); } - setState(2751); + setState(2791); match(CypherParser::T__2); break; } case CypherParser::SINGLE: { enterOuterAlt(_localctx, 4); - setState(2753); + setState(2793); match(CypherParser::SINGLE); - setState(2755); + setState(2795); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2754); + setState(2794); match(CypherParser::SP); } - setState(2757); + setState(2797); match(CypherParser::T__1); - setState(2759); + setState(2799); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2758); + setState(2798); match(CypherParser::SP); } - setState(2761); + setState(2801); oC_FilterExpression(); - setState(2763); + setState(2803); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2762); + setState(2802); match(CypherParser::SP); } - setState(2765); + setState(2805); match(CypherParser::T__2); break; } @@ -17533,7 +17765,7 @@ size_t CypherParser::OC_FilterExpressionContext::getRuleIndex() const { CypherParser::OC_FilterExpressionContext* CypherParser::oC_FilterExpression() { OC_FilterExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 318, CypherParser::RuleOC_FilterExpression); + enterRule(_localctx, 322, CypherParser::RuleOC_FilterExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -17544,11 +17776,11 @@ CypherParser::OC_FilterExpressionContext* CypherParser::oC_FilterExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(2769); + setState(2809); oC_IdInColl(); - setState(2770); + setState(2810); match(CypherParser::SP); - setState(2771); + setState(2811); oC_Where(); } @@ -17595,7 +17827,7 @@ size_t CypherParser::OC_IdInCollContext::getRuleIndex() const { CypherParser::OC_IdInCollContext* CypherParser::oC_IdInColl() { OC_IdInCollContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 320, CypherParser::RuleOC_IdInColl); + enterRule(_localctx, 324, CypherParser::RuleOC_IdInColl); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -17606,15 +17838,15 @@ CypherParser::OC_IdInCollContext* CypherParser::oC_IdInColl() { }); try { enterOuterAlt(_localctx, 1); - setState(2773); + setState(2813); oC_Variable(); - setState(2774); + setState(2814); match(CypherParser::SP); - setState(2775); + setState(2815); match(CypherParser::IN); - setState(2776); + setState(2816); match(CypherParser::SP); - setState(2777); + setState(2817); oC_Expression(); } @@ -17665,7 +17897,7 @@ size_t CypherParser::OC_LiteralContext::getRuleIndex() const { CypherParser::OC_LiteralContext* CypherParser::oC_Literal() { OC_LiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 322, CypherParser::RuleOC_Literal); + enterRule(_localctx, 326, CypherParser::RuleOC_Literal); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -17675,21 +17907,21 @@ CypherParser::OC_LiteralContext* CypherParser::oC_Literal() { exitRule(); }); try { - setState(2785); + setState(2825); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::DecimalInteger: case CypherParser::ExponentDecimalReal: case CypherParser::RegularDecimalReal: { enterOuterAlt(_localctx, 1); - setState(2779); + setState(2819); oC_NumberLiteral(); break; } case CypherParser::StringLiteral: { enterOuterAlt(_localctx, 2); - setState(2780); + setState(2820); match(CypherParser::StringLiteral); break; } @@ -17697,28 +17929,28 @@ CypherParser::OC_LiteralContext* CypherParser::oC_Literal() { case CypherParser::FALSE: case CypherParser::TRUE: { enterOuterAlt(_localctx, 3); - setState(2781); + setState(2821); oC_BooleanLiteral(); break; } case CypherParser::NULL_: { enterOuterAlt(_localctx, 4); - setState(2782); + setState(2822); match(CypherParser::NULL_); break; } case CypherParser::T__6: { enterOuterAlt(_localctx, 5); - setState(2783); + setState(2823); oC_ListLiteral(); break; } case CypherParser::T__8: { enterOuterAlt(_localctx, 6); - setState(2784); + setState(2824); iC_StructLiteral(); break; } @@ -17759,7 +17991,7 @@ size_t CypherParser::OC_BooleanLiteralContext::getRuleIndex() const { CypherParser::OC_BooleanLiteralContext* CypherParser::oC_BooleanLiteral() { OC_BooleanLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 324, CypherParser::RuleOC_BooleanLiteral); + enterRule(_localctx, 328, CypherParser::RuleOC_BooleanLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -17771,7 +18003,7 @@ CypherParser::OC_BooleanLiteralContext* CypherParser::oC_BooleanLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(2787); + setState(2827); _la = _input->LA(1); if (!(_la == CypherParser::FALSE @@ -17827,7 +18059,7 @@ size_t CypherParser::OC_ListLiteralContext::getRuleIndex() const { CypherParser::OC_ListLiteralContext* CypherParser::oC_ListLiteral() { OC_ListLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 326, CypherParser::RuleOC_ListLiteral); + enterRule(_localctx, 330, CypherParser::RuleOC_ListLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -17839,54 +18071,54 @@ CypherParser::OC_ListLiteralContext* CypherParser::oC_ListLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(2789); + setState(2829); match(CypherParser::T__6); - setState(2791); + setState(2831); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2790); + setState(2830); match(CypherParser::SP); } - setState(2806); + setState(2846); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -4641029784715918716) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9187924516079622947) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 351514278792481503) != 0)) { - setState(2793); + ((1ULL << (_la - 128)) & 703028557584962783) != 0)) { + setState(2833); oC_Expression(); - setState(2795); + setState(2835); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2794); + setState(2834); match(CypherParser::SP); } - setState(2803); + setState(2843); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2797); + setState(2837); iC_ListEntry(); - setState(2799); + setState(2839); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2798); + setState(2838); match(CypherParser::SP); } - setState(2805); + setState(2845); _errHandler->sync(this); _la = _input->LA(1); } } - setState(2808); + setState(2848); match(CypherParser::T__7); } @@ -17921,7 +18153,7 @@ size_t CypherParser::IC_ListEntryContext::getRuleIndex() const { CypherParser::IC_ListEntryContext* CypherParser::iC_ListEntry() { IC_ListEntryContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 328, CypherParser::RuleIC_ListEntry); + enterRule(_localctx, 332, CypherParser::RuleIC_ListEntry); size_t _la = 0; #if __cplusplus > 201703L @@ -17933,14 +18165,14 @@ CypherParser::IC_ListEntryContext* CypherParser::iC_ListEntry() { }); try { enterOuterAlt(_localctx, 1); - setState(2810); + setState(2850); match(CypherParser::T__3); - setState(2812); + setState(2852); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 462, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 468, _ctx)) { case 1: { - setState(2811); + setState(2851); match(CypherParser::SP); break; } @@ -17948,15 +18180,15 @@ CypherParser::IC_ListEntryContext* CypherParser::iC_ListEntry() { default: break; } - setState(2815); + setState(2855); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -4641029784715918716) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9187924516079622947) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 351514278792481503) != 0)) { - setState(2814); + ((1ULL << (_la - 128)) & 703028557584962783) != 0)) { + setState(2854); oC_Expression(); } @@ -18000,7 +18232,7 @@ size_t CypherParser::IC_StructLiteralContext::getRuleIndex() const { CypherParser::IC_StructLiteralContext* CypherParser::iC_StructLiteral() { IC_StructLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 330, CypherParser::RuleIC_StructLiteral); + enterRule(_localctx, 334, CypherParser::RuleIC_StructLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -18012,55 +18244,55 @@ CypherParser::IC_StructLiteralContext* CypherParser::iC_StructLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(2817); + setState(2857); match(CypherParser::T__8); - setState(2819); + setState(2859); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2818); + setState(2858); match(CypherParser::SP); } - setState(2821); + setState(2861); iC_StructField(); - setState(2823); + setState(2863); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2822); + setState(2862); match(CypherParser::SP); } - setState(2835); + setState(2875); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2825); + setState(2865); match(CypherParser::T__3); - setState(2827); + setState(2867); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2826); + setState(2866); match(CypherParser::SP); } - setState(2829); + setState(2869); iC_StructField(); - setState(2831); + setState(2871); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2830); + setState(2870); match(CypherParser::SP); } - setState(2837); + setState(2877); _errHandler->sync(this); _la = _input->LA(1); } - setState(2838); + setState(2878); match(CypherParser::T__9); } @@ -18111,7 +18343,7 @@ size_t CypherParser::IC_StructFieldContext::getRuleIndex() const { CypherParser::IC_StructFieldContext* CypherParser::iC_StructField() { IC_StructFieldContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 332, CypherParser::RuleIC_StructField); + enterRule(_localctx, 336, CypherParser::RuleIC_StructField); size_t _la = 0; #if __cplusplus > 201703L @@ -18123,7 +18355,7 @@ CypherParser::IC_StructFieldContext* CypherParser::iC_StructField() { }); try { enterOuterAlt(_localctx, 1); - setState(2842); + setState(2882); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -18192,13 +18424,13 @@ CypherParser::IC_StructFieldContext* CypherParser::iC_StructField() { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(2840); + setState(2880); oC_SymbolicName(); break; } case CypherParser::StringLiteral: { - setState(2841); + setState(2881); match(CypherParser::StringLiteral); break; } @@ -18206,25 +18438,25 @@ CypherParser::IC_StructFieldContext* CypherParser::iC_StructField() { default: throw NoViableAltException(this); } - setState(2845); + setState(2885); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2844); + setState(2884); match(CypherParser::SP); } - setState(2847); + setState(2887); match(CypherParser::COLON); - setState(2849); + setState(2889); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2848); + setState(2888); match(CypherParser::SP); } - setState(2851); + setState(2891); oC_Expression(); } @@ -18263,7 +18495,7 @@ size_t CypherParser::OC_ParenthesizedExpressionContext::getRuleIndex() const { CypherParser::OC_ParenthesizedExpressionContext* CypherParser::oC_ParenthesizedExpression() { OC_ParenthesizedExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 334, CypherParser::RuleOC_ParenthesizedExpression); + enterRule(_localctx, 338, CypherParser::RuleOC_ParenthesizedExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -18275,27 +18507,27 @@ CypherParser::OC_ParenthesizedExpressionContext* CypherParser::oC_ParenthesizedE }); try { enterOuterAlt(_localctx, 1); - setState(2853); + setState(2893); match(CypherParser::T__1); - setState(2855); + setState(2895); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2854); + setState(2894); match(CypherParser::SP); } - setState(2857); + setState(2897); oC_Expression(); - setState(2859); + setState(2899); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2858); + setState(2898); match(CypherParser::SP); } - setState(2861); + setState(2901); match(CypherParser::T__2); } @@ -18366,7 +18598,7 @@ size_t CypherParser::OC_FunctionInvocationContext::getRuleIndex() const { CypherParser::OC_FunctionInvocationContext* CypherParser::oC_FunctionInvocation() { OC_FunctionInvocationContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 336, CypherParser::RuleOC_FunctionInvocation); + enterRule(_localctx, 340, CypherParser::RuleOC_FunctionInvocation); size_t _la = 0; #if __cplusplus > 201703L @@ -18377,109 +18609,109 @@ CypherParser::OC_FunctionInvocationContext* CypherParser::oC_FunctionInvocation( exitRule(); }); try { - setState(2940); + setState(2980); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 493, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 499, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2863); + setState(2903); match(CypherParser::COUNT); - setState(2865); + setState(2905); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2864); + setState(2904); match(CypherParser::SP); } - setState(2867); + setState(2907); match(CypherParser::T__1); - setState(2869); + setState(2909); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2868); + setState(2908); match(CypherParser::SP); } - setState(2871); + setState(2911); match(CypherParser::STAR); - setState(2873); + setState(2913); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2872); + setState(2912); match(CypherParser::SP); } - setState(2875); + setState(2915); match(CypherParser::T__2); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2876); + setState(2916); match(CypherParser::CAST); - setState(2878); + setState(2918); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2877); + setState(2917); match(CypherParser::SP); } - setState(2880); + setState(2920); match(CypherParser::T__1); - setState(2882); + setState(2922); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2881); + setState(2921); match(CypherParser::SP); } - setState(2884); + setState(2924); iC_FunctionParameter(); - setState(2886); + setState(2926); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2885); + setState(2925); match(CypherParser::SP); } - setState(2898); + setState(2938); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::AS: { - setState(2888); + setState(2928); match(CypherParser::AS); - setState(2890); + setState(2930); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2889); + setState(2929); match(CypherParser::SP); } - setState(2892); + setState(2932); iC_DataType(0); break; } case CypherParser::T__3: { - setState(2893); + setState(2933); match(CypherParser::T__3); - setState(2895); + setState(2935); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2894); + setState(2934); match(CypherParser::SP); } - setState(2897); + setState(2937); iC_FunctionParameter(); break; } @@ -18487,105 +18719,105 @@ CypherParser::OC_FunctionInvocationContext* CypherParser::oC_FunctionInvocation( default: throw NoViableAltException(this); } - setState(2901); + setState(2941); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2900); + setState(2940); match(CypherParser::SP); } - setState(2903); + setState(2943); match(CypherParser::T__2); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(2905); + setState(2945); oC_FunctionName(); - setState(2907); + setState(2947); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2906); + setState(2946); match(CypherParser::SP); } - setState(2909); + setState(2949); match(CypherParser::T__1); - setState(2911); + setState(2951); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2910); + setState(2950); match(CypherParser::SP); } - setState(2917); + setState(2957); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::DISTINCT) { - setState(2913); + setState(2953); match(CypherParser::DISTINCT); - setState(2915); + setState(2955); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2914); + setState(2954); match(CypherParser::SP); } } - setState(2936); + setState(2976); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -4641029784715918716) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -9187924516079622947) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 128)) & 351514278792481503) != 0)) { - setState(2919); + ((1ULL << (_la - 128)) & 703028557584962783) != 0)) { + setState(2959); iC_FunctionParameter(); - setState(2921); + setState(2961); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2920); + setState(2960); match(CypherParser::SP); } - setState(2933); + setState(2973); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2923); + setState(2963); match(CypherParser::T__3); - setState(2925); + setState(2965); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2924); + setState(2964); match(CypherParser::SP); } - setState(2927); + setState(2967); iC_FunctionParameter(); - setState(2929); + setState(2969); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2928); + setState(2968); match(CypherParser::SP); } - setState(2935); + setState(2975); _errHandler->sync(this); _la = _input->LA(1); } } - setState(2938); + setState(2978); match(CypherParser::T__2); break; } @@ -18622,7 +18854,7 @@ size_t CypherParser::OC_FunctionNameContext::getRuleIndex() const { CypherParser::OC_FunctionNameContext* CypherParser::oC_FunctionName() { OC_FunctionNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 338, CypherParser::RuleOC_FunctionName); + enterRule(_localctx, 342, CypherParser::RuleOC_FunctionName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -18633,7 +18865,7 @@ CypherParser::OC_FunctionNameContext* CypherParser::oC_FunctionName() { }); try { enterOuterAlt(_localctx, 1); - setState(2942); + setState(2982); oC_SymbolicName(); } @@ -18684,7 +18916,7 @@ size_t CypherParser::IC_FunctionParameterContext::getRuleIndex() const { CypherParser::IC_FunctionParameterContext* CypherParser::iC_FunctionParameter() { IC_FunctionParameterContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 340, CypherParser::RuleIC_FunctionParameter); + enterRule(_localctx, 344, CypherParser::RuleIC_FunctionParameter); size_t _la = 0; #if __cplusplus > 201703L @@ -18695,36 +18927,36 @@ CypherParser::IC_FunctionParameterContext* CypherParser::iC_FunctionParameter() exitRule(); }); try { - setState(2957); + setState(2997); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 497, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 503, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(2953); + setState(2993); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 496, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 502, _ctx)) { case 1: { - setState(2944); + setState(2984); oC_SymbolicName(); - setState(2946); + setState(2986); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2945); + setState(2985); match(CypherParser::SP); } - setState(2948); + setState(2988); match(CypherParser::COLON); - setState(2949); + setState(2989); match(CypherParser::T__5); - setState(2951); + setState(2991); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2950); + setState(2990); match(CypherParser::SP); } break; @@ -18733,14 +18965,14 @@ CypherParser::IC_FunctionParameterContext* CypherParser::iC_FunctionParameter() default: break; } - setState(2955); + setState(2995); oC_Expression(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(2956); + setState(2996); iC_LambdaParameter(); break; } @@ -18793,7 +19025,7 @@ size_t CypherParser::IC_LambdaParameterContext::getRuleIndex() const { CypherParser::IC_LambdaParameterContext* CypherParser::iC_LambdaParameter() { IC_LambdaParameterContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 342, CypherParser::RuleIC_LambdaParameter); + enterRule(_localctx, 346, CypherParser::RuleIC_LambdaParameter); size_t _la = 0; #if __cplusplus > 201703L @@ -18805,36 +19037,36 @@ CypherParser::IC_LambdaParameterContext* CypherParser::iC_LambdaParameter() { }); try { enterOuterAlt(_localctx, 1); - setState(2959); + setState(2999); iC_LambdaVars(); - setState(2961); + setState(3001); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2960); + setState(3000); match(CypherParser::SP); } - setState(2963); + setState(3003); match(CypherParser::MINUS); - setState(2964); + setState(3004); match(CypherParser::T__14); - setState(2966); + setState(3006); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2965); + setState(3005); match(CypherParser::SP); } - setState(2968); + setState(3008); oC_Expression(); - setState(2970); + setState(3010); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 500, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 506, _ctx)) { case 1: { - setState(2969); + setState(3009); match(CypherParser::SP); break; } @@ -18883,7 +19115,7 @@ size_t CypherParser::IC_LambdaVarsContext::getRuleIndex() const { CypherParser::IC_LambdaVarsContext* CypherParser::iC_LambdaVars() { IC_LambdaVarsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 344, CypherParser::RuleIC_LambdaVars); + enterRule(_localctx, 348, CypherParser::RuleIC_LambdaVars); size_t _la = 0; #if __cplusplus > 201703L @@ -18894,7 +19126,7 @@ CypherParser::IC_LambdaVarsContext* CypherParser::iC_LambdaVars() { exitRule(); }); try { - setState(2996); + setState(3036); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -18964,62 +19196,62 @@ CypherParser::IC_LambdaVarsContext* CypherParser::iC_LambdaVars() { case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { enterOuterAlt(_localctx, 1); - setState(2972); + setState(3012); oC_SymbolicName(); break; } case CypherParser::T__1: { enterOuterAlt(_localctx, 2); - setState(2973); + setState(3013); match(CypherParser::T__1); - setState(2975); + setState(3015); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2974); + setState(3014); match(CypherParser::SP); } - setState(2977); + setState(3017); oC_SymbolicName(); - setState(2979); + setState(3019); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2978); + setState(3018); match(CypherParser::SP); } - setState(2991); + setState(3031); _errHandler->sync(this); _la = _input->LA(1); while (_la == CypherParser::T__3) { - setState(2981); + setState(3021); match(CypherParser::T__3); - setState(2983); + setState(3023); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2982); + setState(3022); match(CypherParser::SP); } - setState(2985); + setState(3025); oC_SymbolicName(); - setState(2987); + setState(3027); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2986); + setState(3026); match(CypherParser::SP); } - setState(2993); + setState(3033); _errHandler->sync(this); _la = _input->LA(1); } - setState(2994); + setState(3034); match(CypherParser::T__2); break; } @@ -19072,7 +19304,7 @@ size_t CypherParser::OC_PathPatternsContext::getRuleIndex() const { CypherParser::OC_PathPatternsContext* CypherParser::oC_PathPatterns() { OC_PathPatternsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 346, CypherParser::RuleOC_PathPatterns); + enterRule(_localctx, 350, CypherParser::RuleOC_PathPatterns); size_t _la = 0; #if __cplusplus > 201703L @@ -19085,23 +19317,23 @@ CypherParser::OC_PathPatternsContext* CypherParser::oC_PathPatterns() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(2998); + setState(3038); oC_NodePattern(); - setState(3003); + setState(3043); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(3000); + setState(3040); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(2999); + setState(3039); match(CypherParser::SP); } - setState(3002); + setState(3042); oC_PatternElementChain(); break; } @@ -19109,9 +19341,9 @@ CypherParser::OC_PathPatternsContext* CypherParser::oC_PathPatterns() { default: throw NoViableAltException(this); } - setState(3005); + setState(3045); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 508, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 514, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); } @@ -19170,7 +19402,7 @@ size_t CypherParser::OC_ExistCountSubqueryContext::getRuleIndex() const { CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery() { OC_ExistCountSubqueryContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 348, CypherParser::RuleOC_ExistCountSubquery); + enterRule(_localctx, 352, CypherParser::RuleOC_ExistCountSubquery); size_t _la = 0; #if __cplusplus > 201703L @@ -19182,7 +19414,7 @@ CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery( }); try { enterOuterAlt(_localctx, 1); - setState(3007); + setState(3047); _la = _input->LA(1); if (!(_la == CypherParser::COUNT @@ -19193,50 +19425,50 @@ CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery( _errHandler->reportMatch(this); consume(); } - setState(3009); + setState(3049); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3008); + setState(3048); match(CypherParser::SP); } - setState(3011); + setState(3051); match(CypherParser::T__8); - setState(3013); + setState(3053); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3012); + setState(3052); match(CypherParser::SP); } - setState(3015); + setState(3055); match(CypherParser::MATCH); - setState(3017); + setState(3057); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3016); + setState(3056); match(CypherParser::SP); } - setState(3019); + setState(3059); oC_Pattern(); - setState(3024); + setState(3064); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 513, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 519, _ctx)) { case 1: { - setState(3021); + setState(3061); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3020); + setState(3060); match(CypherParser::SP); } - setState(3023); + setState(3063); oC_Where(); break; } @@ -19244,20 +19476,20 @@ CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery( default: break; } - setState(3030); + setState(3070); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 515, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 521, _ctx)) { case 1: { - setState(3027); + setState(3067); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3026); + setState(3066); match(CypherParser::SP); } - setState(3029); + setState(3069); iC_Hint(); break; } @@ -19265,15 +19497,15 @@ CypherParser::OC_ExistCountSubqueryContext* CypherParser::oC_ExistCountSubquery( default: break; } - setState(3033); + setState(3073); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3032); + setState(3072); match(CypherParser::SP); } - setState(3035); + setState(3075); match(CypherParser::T__9); } @@ -19312,7 +19544,7 @@ size_t CypherParser::OC_PropertyLookupContext::getRuleIndex() const { CypherParser::OC_PropertyLookupContext* CypherParser::oC_PropertyLookup() { OC_PropertyLookupContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 350, CypherParser::RuleOC_PropertyLookup); + enterRule(_localctx, 354, CypherParser::RuleOC_PropertyLookup); size_t _la = 0; #if __cplusplus > 201703L @@ -19324,17 +19556,17 @@ CypherParser::OC_PropertyLookupContext* CypherParser::oC_PropertyLookup() { }); try { enterOuterAlt(_localctx, 1); - setState(3037); + setState(3077); match(CypherParser::T__4); - setState(3039); + setState(3079); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3038); + setState(3078); match(CypherParser::SP); } - setState(3043); + setState(3083); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -19403,13 +19635,13 @@ CypherParser::OC_PropertyLookupContext* CypherParser::oC_PropertyLookup() { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(3041); + setState(3081); oC_PropertyKeyName(); break; } case CypherParser::STAR: { - setState(3042); + setState(3082); match(CypherParser::STAR); break; } @@ -19478,7 +19710,7 @@ size_t CypherParser::OC_CaseExpressionContext::getRuleIndex() const { CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { OC_CaseExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 352, CypherParser::RuleOC_CaseExpression); + enterRule(_localctx, 356, CypherParser::RuleOC_CaseExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -19491,27 +19723,27 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(3067); + setState(3107); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 524, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 530, _ctx)) { case 1: { - setState(3045); + setState(3085); match(CypherParser::CASE); - setState(3050); + setState(3090); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(3047); + setState(3087); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3046); + setState(3086); match(CypherParser::SP); } - setState(3049); + setState(3089); oC_CaseAlternative(); break; } @@ -19519,41 +19751,41 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { default: throw NoViableAltException(this); } - setState(3052); + setState(3092); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 520, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 526, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } case 2: { - setState(3054); + setState(3094); match(CypherParser::CASE); - setState(3056); + setState(3096); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3055); + setState(3095); match(CypherParser::SP); } - setState(3058); + setState(3098); oC_Expression(); - setState(3063); + setState(3103); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(3060); + setState(3100); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3059); + setState(3099); match(CypherParser::SP); } - setState(3062); + setState(3102); oC_CaseAlternative(); break; } @@ -19561,9 +19793,9 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { default: throw NoViableAltException(this); } - setState(3065); + setState(3105); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 523, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 529, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); break; } @@ -19571,30 +19803,30 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { default: break; } - setState(3077); + setState(3117); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 527, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 533, _ctx)) { case 1: { - setState(3070); + setState(3110); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3069); + setState(3109); match(CypherParser::SP); } - setState(3072); + setState(3112); match(CypherParser::ELSE); - setState(3074); + setState(3114); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3073); + setState(3113); match(CypherParser::SP); } - setState(3076); + setState(3116); oC_Expression(); break; } @@ -19602,15 +19834,15 @@ CypherParser::OC_CaseExpressionContext* CypherParser::oC_CaseExpression() { default: break; } - setState(3080); + setState(3120); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3079); + setState(3119); match(CypherParser::SP); } - setState(3082); + setState(3122); match(CypherParser::END); } @@ -19661,7 +19893,7 @@ size_t CypherParser::OC_CaseAlternativeContext::getRuleIndex() const { CypherParser::OC_CaseAlternativeContext* CypherParser::oC_CaseAlternative() { OC_CaseAlternativeContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 354, CypherParser::RuleOC_CaseAlternative); + enterRule(_localctx, 358, CypherParser::RuleOC_CaseAlternative); size_t _la = 0; #if __cplusplus > 201703L @@ -19673,37 +19905,37 @@ CypherParser::OC_CaseAlternativeContext* CypherParser::oC_CaseAlternative() { }); try { enterOuterAlt(_localctx, 1); - setState(3084); + setState(3124); match(CypherParser::WHEN); - setState(3086); + setState(3126); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3085); + setState(3125); match(CypherParser::SP); } - setState(3088); + setState(3128); oC_Expression(); - setState(3090); + setState(3130); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3089); + setState(3129); match(CypherParser::SP); } - setState(3092); + setState(3132); match(CypherParser::THEN); - setState(3094); + setState(3134); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3093); + setState(3133); match(CypherParser::SP); } - setState(3096); + setState(3136); oC_Expression(); } @@ -19734,7 +19966,7 @@ size_t CypherParser::OC_VariableContext::getRuleIndex() const { CypherParser::OC_VariableContext* CypherParser::oC_Variable() { OC_VariableContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 356, CypherParser::RuleOC_Variable); + enterRule(_localctx, 360, CypherParser::RuleOC_Variable); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -19745,7 +19977,7 @@ CypherParser::OC_VariableContext* CypherParser::oC_Variable() { }); try { enterOuterAlt(_localctx, 1); - setState(3098); + setState(3138); oC_SymbolicName(); } @@ -19780,7 +20012,7 @@ size_t CypherParser::OC_NumberLiteralContext::getRuleIndex() const { CypherParser::OC_NumberLiteralContext* CypherParser::oC_NumberLiteral() { OC_NumberLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 358, CypherParser::RuleOC_NumberLiteral); + enterRule(_localctx, 362, CypherParser::RuleOC_NumberLiteral); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -19790,20 +20022,20 @@ CypherParser::OC_NumberLiteralContext* CypherParser::oC_NumberLiteral() { exitRule(); }); try { - setState(3102); + setState(3142); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ExponentDecimalReal: case CypherParser::RegularDecimalReal: { enterOuterAlt(_localctx, 1); - setState(3100); + setState(3140); oC_DoubleLiteral(); break; } case CypherParser::DecimalInteger: { enterOuterAlt(_localctx, 2); - setState(3101); + setState(3141); oC_IntegerLiteral(); break; } @@ -19844,7 +20076,7 @@ size_t CypherParser::OC_ParameterContext::getRuleIndex() const { CypherParser::OC_ParameterContext* CypherParser::oC_Parameter() { OC_ParameterContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 360, CypherParser::RuleOC_Parameter); + enterRule(_localctx, 364, CypherParser::RuleOC_Parameter); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -19855,9 +20087,9 @@ CypherParser::OC_ParameterContext* CypherParser::oC_Parameter() { }); try { enterOuterAlt(_localctx, 1); - setState(3104); + setState(3144); match(CypherParser::T__24); - setState(3107); + setState(3147); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::ADD: @@ -19926,13 +20158,13 @@ CypherParser::OC_ParameterContext* CypherParser::oC_Parameter() { case CypherParser::HexLetter: case CypherParser::UnescapedSymbolicName: case CypherParser::EscapedSymbolicName: { - setState(3105); + setState(3145); oC_SymbolicName(); break; } case CypherParser::DecimalInteger: { - setState(3106); + setState(3146); match(CypherParser::DecimalInteger); break; } @@ -19977,7 +20209,7 @@ size_t CypherParser::OC_PropertyExpressionContext::getRuleIndex() const { CypherParser::OC_PropertyExpressionContext* CypherParser::oC_PropertyExpression() { OC_PropertyExpressionContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 362, CypherParser::RuleOC_PropertyExpression); + enterRule(_localctx, 366, CypherParser::RuleOC_PropertyExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -19989,17 +20221,17 @@ CypherParser::OC_PropertyExpressionContext* CypherParser::oC_PropertyExpression( }); try { enterOuterAlt(_localctx, 1); - setState(3109); + setState(3149); oC_Atom(); - setState(3111); + setState(3151); _errHandler->sync(this); _la = _input->LA(1); if (_la == CypherParser::SP) { - setState(3110); + setState(3150); match(CypherParser::SP); } - setState(3113); + setState(3153); oC_PropertyLookup(); } @@ -20030,7 +20262,7 @@ size_t CypherParser::OC_PropertyKeyNameContext::getRuleIndex() const { CypherParser::OC_PropertyKeyNameContext* CypherParser::oC_PropertyKeyName() { OC_PropertyKeyNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 364, CypherParser::RuleOC_PropertyKeyName); + enterRule(_localctx, 368, CypherParser::RuleOC_PropertyKeyName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -20041,7 +20273,7 @@ CypherParser::OC_PropertyKeyNameContext* CypherParser::oC_PropertyKeyName() { }); try { enterOuterAlt(_localctx, 1); - setState(3115); + setState(3155); oC_SymbolicName(); } @@ -20072,7 +20304,7 @@ size_t CypherParser::OC_IntegerLiteralContext::getRuleIndex() const { CypherParser::OC_IntegerLiteralContext* CypherParser::oC_IntegerLiteral() { OC_IntegerLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 366, CypherParser::RuleOC_IntegerLiteral); + enterRule(_localctx, 370, CypherParser::RuleOC_IntegerLiteral); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -20083,7 +20315,7 @@ CypherParser::OC_IntegerLiteralContext* CypherParser::oC_IntegerLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(3117); + setState(3157); match(CypherParser::DecimalInteger); } @@ -20118,7 +20350,7 @@ size_t CypherParser::OC_DoubleLiteralContext::getRuleIndex() const { CypherParser::OC_DoubleLiteralContext* CypherParser::oC_DoubleLiteral() { OC_DoubleLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 368, CypherParser::RuleOC_DoubleLiteral); + enterRule(_localctx, 372, CypherParser::RuleOC_DoubleLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -20130,7 +20362,7 @@ CypherParser::OC_DoubleLiteralContext* CypherParser::oC_DoubleLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(3119); + setState(3159); _la = _input->LA(1); if (!(_la == CypherParser::ExponentDecimalReal @@ -20174,7 +20406,7 @@ size_t CypherParser::OC_SchemaNameContext::getRuleIndex() const { CypherParser::OC_SchemaNameContext* CypherParser::oC_SchemaName() { OC_SchemaNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 370, CypherParser::RuleOC_SchemaName); + enterRule(_localctx, 374, CypherParser::RuleOC_SchemaName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -20185,16 +20417,16 @@ CypherParser::OC_SchemaNameContext* CypherParser::oC_SchemaName() { }); try { enterOuterAlt(_localctx, 1); - setState(3121); + setState(3161); oC_SymbolicName(); - setState(3124); + setState(3164); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 535, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 541, _ctx)) { case 1: { - setState(3122); + setState(3162); match(CypherParser::T__4); - setState(3123); + setState(3163); oC_SymbolicName(); break; } @@ -20243,7 +20475,7 @@ size_t CypherParser::OC_SymbolicNameContext::getRuleIndex() const { CypherParser::OC_SymbolicNameContext* CypherParser::oC_SymbolicName() { OC_SymbolicNameContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 372, CypherParser::RuleOC_SymbolicName); + enterRule(_localctx, 376, CypherParser::RuleOC_SymbolicName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -20253,19 +20485,19 @@ CypherParser::OC_SymbolicNameContext* CypherParser::oC_SymbolicName() { exitRule(); }); try { - setState(3131); + setState(3171); _errHandler->sync(this); switch (_input->LA(1)) { case CypherParser::UnescapedSymbolicName: { enterOuterAlt(_localctx, 1); - setState(3126); + setState(3166); match(CypherParser::UnescapedSymbolicName); break; } case CypherParser::EscapedSymbolicName: { enterOuterAlt(_localctx, 2); - setState(3127); + setState(3167); antlrcpp::downCast(_localctx)->escapedsymbolicnameToken = match(CypherParser::EscapedSymbolicName); if ((antlrcpp::downCast(_localctx)->escapedsymbolicnameToken != nullptr ? antlrcpp::downCast(_localctx)->escapedsymbolicnameToken->getText() : "") == "``") { notifyEmptyToken(antlrcpp::downCast(_localctx)->escapedsymbolicnameToken); } break; @@ -20273,7 +20505,7 @@ CypherParser::OC_SymbolicNameContext* CypherParser::oC_SymbolicName() { case CypherParser::HexLetter: { enterOuterAlt(_localctx, 3); - setState(3129); + setState(3169); match(CypherParser::HexLetter); break; } @@ -20342,7 +20574,7 @@ CypherParser::OC_SymbolicNameContext* CypherParser::oC_SymbolicName() { case CypherParser::DECIMAL: case CypherParser::L_SKIP: { enterOuterAlt(_localctx, 4); - setState(3130); + setState(3170); iC_NonReservedKeywords(); break; } @@ -20627,7 +20859,7 @@ size_t CypherParser::IC_NonReservedKeywordsContext::getRuleIndex() const { CypherParser::IC_NonReservedKeywordsContext* CypherParser::iC_NonReservedKeywords() { IC_NonReservedKeywordsContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 374, CypherParser::RuleIC_NonReservedKeywords); + enterRule(_localctx, 378, CypherParser::RuleIC_NonReservedKeywords); size_t _la = 0; #if __cplusplus > 201703L @@ -20639,11 +20871,11 @@ CypherParser::IC_NonReservedKeywordsContext* CypherParser::iC_NonReservedKeyword }); try { enterOuterAlt(_localctx, 1); - setState(3133); + setState(3173); _la = _input->LA(1); if (!(((((_la - 47) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 47)) & -2402064702202228947) != 0) || ((((_la - 111) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 111)) & 53781282345123867) != 0))) { + ((1ULL << (_la - 111)) & 107562564660953115) != 0))) { _errHandler->recoverInline(this); } else { @@ -20675,7 +20907,7 @@ size_t CypherParser::OC_LeftArrowHeadContext::getRuleIndex() const { CypherParser::OC_LeftArrowHeadContext* CypherParser::oC_LeftArrowHead() { OC_LeftArrowHeadContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 376, CypherParser::RuleOC_LeftArrowHead); + enterRule(_localctx, 380, CypherParser::RuleOC_LeftArrowHead); size_t _la = 0; #if __cplusplus > 201703L @@ -20687,7 +20919,7 @@ CypherParser::OC_LeftArrowHeadContext* CypherParser::oC_LeftArrowHead() { }); try { enterOuterAlt(_localctx, 1); - setState(3135); + setState(3175); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 1006641152) != 0))) { @@ -20722,7 +20954,7 @@ size_t CypherParser::OC_RightArrowHeadContext::getRuleIndex() const { CypherParser::OC_RightArrowHeadContext* CypherParser::oC_RightArrowHead() { OC_RightArrowHeadContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 378, CypherParser::RuleOC_RightArrowHead); + enterRule(_localctx, 382, CypherParser::RuleOC_RightArrowHead); size_t _la = 0; #if __cplusplus > 201703L @@ -20734,7 +20966,7 @@ CypherParser::OC_RightArrowHeadContext* CypherParser::oC_RightArrowHead() { }); try { enterOuterAlt(_localctx, 1); - setState(3137); + setState(3177); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 16106160128) != 0))) { @@ -20773,7 +21005,7 @@ size_t CypherParser::OC_DashContext::getRuleIndex() const { CypherParser::OC_DashContext* CypherParser::oC_Dash() { OC_DashContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 380, CypherParser::RuleOC_Dash); + enterRule(_localctx, 384, CypherParser::RuleOC_Dash); size_t _la = 0; #if __cplusplus > 201703L @@ -20785,7 +21017,7 @@ CypherParser::OC_DashContext* CypherParser::oC_Dash() { }); try { enterOuterAlt(_localctx, 1); - setState(3139); + setState(3179); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 35167192219648) != 0) || _la == CypherParser::MINUS)) { @@ -20808,8 +21040,8 @@ CypherParser::OC_DashContext* CypherParser::oC_Dash() { bool CypherParser::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) { switch (ruleIndex) { - case 69: return iC_DataTypeSempred(antlrcpp::downCast(context), predicateIndex); - case 96: return iC_JoinNodeSempred(antlrcpp::downCast(context), predicateIndex); + case 71: return iC_DataTypeSempred(antlrcpp::downCast(context), predicateIndex); + case 98: return iC_JoinNodeSempred(antlrcpp::downCast(context), predicateIndex); default: break; diff --git a/third_party/antlr4_cypher/include/cypher_lexer.h b/third_party/antlr4_cypher/include/cypher_lexer.h index aa3fc3b691..4904c4b596 100644 --- a/third_party/antlr4_cypher/include/cypher_lexer.h +++ b/third_party/antlr4_cypher/include/cypher_lexer.h @@ -35,18 +35,19 @@ class CypherLexer : public antlr4::Lexer { ON = 119, ONLY = 120, OPTIONS = 121, OPTIONAL = 122, OR = 123, ORDER = 124, PRIMARY = 125, PROFILE = 126, PROJECT = 127, READ = 128, REL = 129, RENAME = 130, RETURN = 131, ROLLBACK = 132, ROLLBACK_SKIP_CHECKPOINT = 133, - SEQUENCE = 134, SET = 135, SHORTEST = 136, START = 137, STARTS = 138, - STRUCT = 139, TABLE = 140, THEN = 141, TO = 142, TRAIL = 143, TRANSACTION = 144, - TRUE = 145, TYPE = 146, UNION = 147, UNWIND = 148, UNINSTALL = 149, - UPDATE = 150, USE = 151, WHEN = 152, WHERE = 153, WITH = 154, WRITE = 155, - WSHORTEST = 156, XOR = 157, SINGLE = 158, YIELD = 159, USER = 160, PASSWORD = 161, - ROLE = 162, MAP = 163, DECIMAL = 164, STAR = 165, L_SKIP = 166, INVALID_NOT_EQUAL = 167, - COLON = 168, DOTDOT = 169, MINUS = 170, FACTORIAL = 171, StringLiteral = 172, - EscapedChar = 173, DecimalInteger = 174, HexLetter = 175, HexDigit = 176, - Digit = 177, NonZeroDigit = 178, NonZeroOctDigit = 179, ZeroDigit = 180, - ExponentDecimalReal = 181, RegularDecimalReal = 182, UnescapedSymbolicName = 183, - IdentifierStart = 184, IdentifierPart = 185, EscapedSymbolicName = 186, - SP = 187, WHITESPACE = 188, CypherComment = 189, Unknown = 190 + SEQUENCE = 134, SET = 135, SORTED = 136, SHORTEST = 137, START = 138, + STARTS = 139, STRUCT = 140, TABLE = 141, THEN = 142, TO = 143, TRAIL = 144, + TRANSACTION = 145, TRUE = 146, TYPE = 147, UNION = 148, UNWIND = 149, + UNINSTALL = 150, UPDATE = 151, USE = 152, WHEN = 153, WHERE = 154, WITH = 155, + WRITE = 156, WSHORTEST = 157, XOR = 158, SINGLE = 159, YIELD = 160, + USER = 161, PASSWORD = 162, ROLE = 163, MAP = 164, DECIMAL = 165, STAR = 166, + L_SKIP = 167, INVALID_NOT_EQUAL = 168, COLON = 169, DOTDOT = 170, MINUS = 171, + FACTORIAL = 172, StringLiteral = 173, EscapedChar = 174, DecimalInteger = 175, + HexLetter = 176, HexDigit = 177, Digit = 178, NonZeroDigit = 179, NonZeroOctDigit = 180, + ZeroDigit = 181, ExponentDecimalReal = 182, RegularDecimalReal = 183, + UnescapedSymbolicName = 184, IdentifierStart = 185, IdentifierPart = 186, + EscapedSymbolicName = 187, SP = 188, WHITESPACE = 189, CypherComment = 190, + Unknown = 191 }; explicit CypherLexer(antlr4::CharStream *input); diff --git a/third_party/antlr4_cypher/include/cypher_parser.h b/third_party/antlr4_cypher/include/cypher_parser.h index b9227a9ac4..2f852a4824 100644 --- a/third_party/antlr4_cypher/include/cypher_parser.h +++ b/third_party/antlr4_cypher/include/cypher_parser.h @@ -35,18 +35,19 @@ class CypherParser : public antlr4::Parser { ON = 119, ONLY = 120, OPTIONS = 121, OPTIONAL = 122, OR = 123, ORDER = 124, PRIMARY = 125, PROFILE = 126, PROJECT = 127, READ = 128, REL = 129, RENAME = 130, RETURN = 131, ROLLBACK = 132, ROLLBACK_SKIP_CHECKPOINT = 133, - SEQUENCE = 134, SET = 135, SHORTEST = 136, START = 137, STARTS = 138, - STRUCT = 139, TABLE = 140, THEN = 141, TO = 142, TRAIL = 143, TRANSACTION = 144, - TRUE = 145, TYPE = 146, UNION = 147, UNWIND = 148, UNINSTALL = 149, - UPDATE = 150, USE = 151, WHEN = 152, WHERE = 153, WITH = 154, WRITE = 155, - WSHORTEST = 156, XOR = 157, SINGLE = 158, YIELD = 159, USER = 160, PASSWORD = 161, - ROLE = 162, MAP = 163, DECIMAL = 164, STAR = 165, L_SKIP = 166, INVALID_NOT_EQUAL = 167, - COLON = 168, DOTDOT = 169, MINUS = 170, FACTORIAL = 171, StringLiteral = 172, - EscapedChar = 173, DecimalInteger = 174, HexLetter = 175, HexDigit = 176, - Digit = 177, NonZeroDigit = 178, NonZeroOctDigit = 179, ZeroDigit = 180, - ExponentDecimalReal = 181, RegularDecimalReal = 182, UnescapedSymbolicName = 183, - IdentifierStart = 184, IdentifierPart = 185, EscapedSymbolicName = 186, - SP = 187, WHITESPACE = 188, CypherComment = 189, Unknown = 190 + SEQUENCE = 134, SET = 135, SORTED = 136, SHORTEST = 137, START = 138, + STARTS = 139, STRUCT = 140, TABLE = 141, THEN = 142, TO = 143, TRAIL = 144, + TRANSACTION = 145, TRUE = 146, TYPE = 147, UNION = 148, UNWIND = 149, + UNINSTALL = 150, UPDATE = 151, USE = 152, WHEN = 153, WHERE = 154, WITH = 155, + WRITE = 156, WSHORTEST = 157, XOR = 158, SINGLE = 159, YIELD = 160, + USER = 161, PASSWORD = 162, ROLE = 163, MAP = 164, DECIMAL = 165, STAR = 166, + L_SKIP = 167, INVALID_NOT_EQUAL = 168, COLON = 169, DOTDOT = 170, MINUS = 171, + FACTORIAL = 172, StringLiteral = 173, EscapedChar = 174, DecimalInteger = 175, + HexLetter = 176, HexDigit = 177, Digit = 178, NonZeroDigit = 179, NonZeroOctDigit = 180, + ZeroDigit = 181, ExponentDecimalReal = 182, RegularDecimalReal = 183, + UnescapedSymbolicName = 184, IdentifierStart = 185, IdentifierPart = 186, + EscapedSymbolicName = 187, SP = 188, WHITESPACE = 189, CypherComment = 190, + Unknown = 191 }; enum { @@ -69,52 +70,53 @@ class CypherParser : public antlr4::Parser { RuleIC_IfExists = 48, RuleIC_Drop = 49, RuleIC_DropIndexName = 50, RuleIC_AlterTable = 51, RuleIC_AlterOptions = 52, RuleIC_AddProperty = 53, RuleIC_Default = 54, RuleIC_DropProperty = 55, RuleIC_RenameTable = 56, RuleIC_RenameProperty = 57, - RuleIC_AddFromToConnection = 58, RuleIC_DropFromToConnection = 59, RuleIC_ColumnDefinitions = 60, - RuleIC_ColumnDefinition = 61, RuleIC_PropertyDefinitions = 62, RuleIC_PropertyDefinition = 63, - RuleIC_CreateNodeConstraint = 64, RuleIC_UnionType = 65, RuleIC_StructType = 66, - RuleIC_MapType = 67, RuleIC_DecimalType = 68, RuleIC_DataType = 69, - RuleIC_ListIdentifiers = 70, RuleIC_ListIdentifier = 71, RuleOC_AnyCypherOption = 72, - RuleOC_Explain = 73, RuleOC_Profile = 74, RuleIC_Transaction = 75, RuleIC_Extension = 76, - RuleIC_LoadExtension = 77, RuleIC_InstallExtension = 78, RuleIC_UninstallExtension = 79, - RuleIC_UpdateExtension = 80, RuleOC_Query = 81, RuleOC_RegularQuery = 82, - RuleOC_Union = 83, RuleOC_SingleQuery = 84, RuleOC_SinglePartQuery = 85, - RuleOC_MultiPartQuery = 86, RuleIC_QueryPart = 87, RuleOC_UpdatingClause = 88, - RuleOC_ReadingClause = 89, RuleIC_LoadFrom = 90, RuleOC_YieldItem = 91, - RuleOC_YieldItems = 92, RuleIC_InQueryCall = 93, RuleOC_Match = 94, - RuleIC_Hint = 95, RuleIC_JoinNode = 96, RuleOC_Unwind = 97, RuleOC_Create = 98, - RuleOC_Merge = 99, RuleOC_MergeAction = 100, RuleOC_Set = 101, RuleOC_SetItem = 102, - RuleOC_Delete = 103, RuleOC_With = 104, RuleOC_Return = 105, RuleOC_ProjectionBody = 106, - RuleOC_ProjectionItems = 107, RuleOC_ProjectionItem = 108, RuleOC_Order = 109, - RuleOC_Skip = 110, RuleOC_Limit = 111, RuleOC_SortItem = 112, RuleOC_Where = 113, - RuleOC_Pattern = 114, RuleOC_PatternPart = 115, RuleOC_AnonymousPatternPart = 116, - RuleOC_PatternElement = 117, RuleOC_NodePattern = 118, RuleOC_PatternElementChain = 119, - RuleOC_RelationshipPattern = 120, RuleOC_RelationshipDetail = 121, RuleIC_Properties = 122, - RuleOC_RelationshipTypes = 123, RuleOC_NodeLabels = 124, RuleIC_RecursiveDetail = 125, - RuleIC_RecursiveType = 126, RuleOC_RangeLiteral = 127, RuleIC_RecursiveComprehension = 128, - RuleIC_RecursiveProjectionItems = 129, RuleOC_LowerBound = 130, RuleOC_UpperBound = 131, - RuleOC_LabelName = 132, RuleOC_RelTypeName = 133, RuleOC_Expression = 134, - RuleOC_OrExpression = 135, RuleOC_XorExpression = 136, RuleOC_AndExpression = 137, - RuleOC_NotExpression = 138, RuleOC_ComparisonExpression = 139, RuleIC_ComparisonOperator = 140, - RuleIC_BitwiseOrOperatorExpression = 141, RuleIC_BitwiseAndOperatorExpression = 142, - RuleIC_BitShiftOperatorExpression = 143, RuleIC_BitShiftOperator = 144, - RuleOC_AddOrSubtractExpression = 145, RuleIC_AddOrSubtractOperator = 146, - RuleOC_MultiplyDivideModuloExpression = 147, RuleIC_MultiplyDivideModuloOperator = 148, - RuleOC_PowerOfExpression = 149, RuleOC_StringListNullOperatorExpression = 150, - RuleOC_ListOperatorExpression = 151, RuleOC_StringOperatorExpression = 152, - RuleOC_RegularExpression = 153, RuleOC_NullOperatorExpression = 154, - RuleOC_UnaryAddSubtractOrFactorialExpression = 155, RuleOC_PropertyOrLabelsExpression = 156, - RuleOC_Atom = 157, RuleOC_Quantifier = 158, RuleOC_FilterExpression = 159, - RuleOC_IdInColl = 160, RuleOC_Literal = 161, RuleOC_BooleanLiteral = 162, - RuleOC_ListLiteral = 163, RuleIC_ListEntry = 164, RuleIC_StructLiteral = 165, - RuleIC_StructField = 166, RuleOC_ParenthesizedExpression = 167, RuleOC_FunctionInvocation = 168, - RuleOC_FunctionName = 169, RuleIC_FunctionParameter = 170, RuleIC_LambdaParameter = 171, - RuleIC_LambdaVars = 172, RuleOC_PathPatterns = 173, RuleOC_ExistCountSubquery = 174, - RuleOC_PropertyLookup = 175, RuleOC_CaseExpression = 176, RuleOC_CaseAlternative = 177, - RuleOC_Variable = 178, RuleOC_NumberLiteral = 179, RuleOC_Parameter = 180, - RuleOC_PropertyExpression = 181, RuleOC_PropertyKeyName = 182, RuleOC_IntegerLiteral = 183, - RuleOC_DoubleLiteral = 184, RuleOC_SchemaName = 185, RuleOC_SymbolicName = 186, - RuleIC_NonReservedKeywords = 187, RuleOC_LeftArrowHead = 188, RuleOC_RightArrowHead = 189, - RuleOC_Dash = 190 + RuleIC_AddFromToConnection = 58, RuleIC_DropFromToConnection = 59, RuleIC_SetSortedBy = 60, + RuleIC_SortedByItem = 61, RuleIC_ColumnDefinitions = 62, RuleIC_ColumnDefinition = 63, + RuleIC_PropertyDefinitions = 64, RuleIC_PropertyDefinition = 65, RuleIC_CreateNodeConstraint = 66, + RuleIC_UnionType = 67, RuleIC_StructType = 68, RuleIC_MapType = 69, + RuleIC_DecimalType = 70, RuleIC_DataType = 71, RuleIC_ListIdentifiers = 72, + RuleIC_ListIdentifier = 73, RuleOC_AnyCypherOption = 74, RuleOC_Explain = 75, + RuleOC_Profile = 76, RuleIC_Transaction = 77, RuleIC_Extension = 78, + RuleIC_LoadExtension = 79, RuleIC_InstallExtension = 80, RuleIC_UninstallExtension = 81, + RuleIC_UpdateExtension = 82, RuleOC_Query = 83, RuleOC_RegularQuery = 84, + RuleOC_Union = 85, RuleOC_SingleQuery = 86, RuleOC_SinglePartQuery = 87, + RuleOC_MultiPartQuery = 88, RuleIC_QueryPart = 89, RuleOC_UpdatingClause = 90, + RuleOC_ReadingClause = 91, RuleIC_LoadFrom = 92, RuleOC_YieldItem = 93, + RuleOC_YieldItems = 94, RuleIC_InQueryCall = 95, RuleOC_Match = 96, + RuleIC_Hint = 97, RuleIC_JoinNode = 98, RuleOC_Unwind = 99, RuleOC_Create = 100, + RuleOC_Merge = 101, RuleOC_MergeAction = 102, RuleOC_Set = 103, RuleOC_SetItem = 104, + RuleOC_Delete = 105, RuleOC_With = 106, RuleOC_Return = 107, RuleOC_ProjectionBody = 108, + RuleOC_ProjectionItems = 109, RuleOC_ProjectionItem = 110, RuleOC_Order = 111, + RuleOC_Skip = 112, RuleOC_Limit = 113, RuleOC_SortItem = 114, RuleOC_Where = 115, + RuleOC_Pattern = 116, RuleOC_PatternPart = 117, RuleOC_AnonymousPatternPart = 118, + RuleOC_PatternElement = 119, RuleOC_NodePattern = 120, RuleOC_PatternElementChain = 121, + RuleOC_RelationshipPattern = 122, RuleOC_RelationshipDetail = 123, RuleIC_Properties = 124, + RuleOC_RelationshipTypes = 125, RuleOC_NodeLabels = 126, RuleIC_RecursiveDetail = 127, + RuleIC_RecursiveType = 128, RuleOC_RangeLiteral = 129, RuleIC_RecursiveComprehension = 130, + RuleIC_RecursiveProjectionItems = 131, RuleOC_LowerBound = 132, RuleOC_UpperBound = 133, + RuleOC_LabelName = 134, RuleOC_RelTypeName = 135, RuleOC_Expression = 136, + RuleOC_OrExpression = 137, RuleOC_XorExpression = 138, RuleOC_AndExpression = 139, + RuleOC_NotExpression = 140, RuleOC_ComparisonExpression = 141, RuleIC_ComparisonOperator = 142, + RuleIC_BitwiseOrOperatorExpression = 143, RuleIC_BitwiseAndOperatorExpression = 144, + RuleIC_BitShiftOperatorExpression = 145, RuleIC_BitShiftOperator = 146, + RuleOC_AddOrSubtractExpression = 147, RuleIC_AddOrSubtractOperator = 148, + RuleOC_MultiplyDivideModuloExpression = 149, RuleIC_MultiplyDivideModuloOperator = 150, + RuleOC_PowerOfExpression = 151, RuleOC_StringListNullOperatorExpression = 152, + RuleOC_ListOperatorExpression = 153, RuleOC_StringOperatorExpression = 154, + RuleOC_RegularExpression = 155, RuleOC_NullOperatorExpression = 156, + RuleOC_UnaryAddSubtractOrFactorialExpression = 157, RuleOC_PropertyOrLabelsExpression = 158, + RuleOC_Atom = 159, RuleOC_Quantifier = 160, RuleOC_FilterExpression = 161, + RuleOC_IdInColl = 162, RuleOC_Literal = 163, RuleOC_BooleanLiteral = 164, + RuleOC_ListLiteral = 165, RuleIC_ListEntry = 166, RuleIC_StructLiteral = 167, + RuleIC_StructField = 168, RuleOC_ParenthesizedExpression = 169, RuleOC_FunctionInvocation = 170, + RuleOC_FunctionName = 171, RuleIC_FunctionParameter = 172, RuleIC_LambdaParameter = 173, + RuleIC_LambdaVars = 174, RuleOC_PathPatterns = 175, RuleOC_ExistCountSubquery = 176, + RuleOC_PropertyLookup = 177, RuleOC_CaseExpression = 178, RuleOC_CaseAlternative = 179, + RuleOC_Variable = 180, RuleOC_NumberLiteral = 181, RuleOC_Parameter = 182, + RuleOC_PropertyExpression = 183, RuleOC_PropertyKeyName = 184, RuleOC_IntegerLiteral = 185, + RuleOC_DoubleLiteral = 186, RuleOC_SchemaName = 187, RuleOC_SymbolicName = 188, + RuleIC_NonReservedKeywords = 189, RuleOC_LeftArrowHead = 190, RuleOC_RightArrowHead = 191, + RuleOC_Dash = 192 }; explicit CypherParser(antlr4::TokenStream *input); @@ -194,6 +196,8 @@ class CypherParser : public antlr4::Parser { class IC_RenamePropertyContext; class IC_AddFromToConnectionContext; class IC_DropFromToConnectionContext; + class IC_SetSortedByContext; + class IC_SortedByItemContext; class IC_ColumnDefinitionsContext; class IC_ColumnDefinitionContext; class IC_PropertyDefinitionsContext; @@ -1185,6 +1189,7 @@ class CypherParser : public antlr4::Parser { IC_RenamePropertyContext *iC_RenameProperty(); IC_AddFromToConnectionContext *iC_AddFromToConnection(); IC_DropFromToConnectionContext *iC_DropFromToConnection(); + IC_SetSortedByContext *iC_SetSortedBy(); }; @@ -1297,6 +1302,37 @@ class CypherParser : public antlr4::Parser { IC_DropFromToConnectionContext* iC_DropFromToConnection(); + class IC_SetSortedByContext : public antlr4::ParserRuleContext { + public: + IC_SetSortedByContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *SET(); + std::vector SP(); + antlr4::tree::TerminalNode* SP(size_t i); + antlr4::tree::TerminalNode *SORTED(); + antlr4::tree::TerminalNode *BY(); + std::vector iC_SortedByItem(); + IC_SortedByItemContext* iC_SortedByItem(size_t i); + + + }; + + IC_SetSortedByContext* iC_SetSortedBy(); + + class IC_SortedByItemContext : public antlr4::ParserRuleContext { + public: + IC_SortedByItemContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + OC_PropertyKeyNameContext *oC_PropertyKeyName(); + antlr4::tree::TerminalNode *SP(); + antlr4::tree::TerminalNode *ASC(); + antlr4::tree::TerminalNode *DESC(); + + + }; + + IC_SortedByItemContext* iC_SortedByItem(); + class IC_ColumnDefinitionsContext : public antlr4::ParserRuleContext { public: IC_ColumnDefinitionsContext(antlr4::ParserRuleContext *parent, size_t invokingState); diff --git a/tools/shell/include/keywords.h b/tools/shell/include/keywords.h index 142513ae89..19133f2582 100644 --- a/tools/shell/include/keywords.h +++ b/tools/shell/include/keywords.h @@ -1,6 +1,6 @@ #ifndef _keywordList // clang-format off -#define _keywordList {"ACYCLIC", "ANY", "ADD", "ALL", "ALTER", "ANALYZE", "AND", "AS", "ASC", "ASCENDING", "ATTACH", "BEGIN", "BY", "CALL", "CASE", "CAST", "CHECKPOINT", "COLUMN", "COMMENT", "COMMIT", "COMMIT_SKIP_CHECKPOINT", "CONTAINS", "COPY", "COUNT", "CREATE", "CYCLE", "DATABASE", "DBTYPE", "DEFAULT", "DELETE", "DESC", "DESCENDING", "DETACH", "DISTINCT", "DROP", "ELSE", "END", "ENDS", "EXISTS", "EXPLAIN", "EXPORT", "EXTENSION", "FALSE", "FROM", "FORCE", "FOR", "GLOB", "GRAPH", "GROUP", "HEADERS", "HINT", "IMPORT", "INDEX", "IF", "IN", "INCREMENT", "INSTALL", "IS", "JOIN", "KEY", "LIMIT", "LOAD", "LOGICAL", "MACRO", "MATCH", "MAXVALUE", "MERGE", "MINVALUE", "MULTI_JOIN", "NO", "NODE", "NOT", "NONE", "NULL", "ON", "ONLY", "OPTIONS", "OPTIONAL", "OR", "ORDER", "PRIMARY", "PROFILE", "PROJECT", "READ", "REL", "RENAME", "RETURN", "ROLLBACK", "ROLLBACK_SKIP_CHECKPOINT", "SEQUENCE", "SET", "SHORTEST", "START", "STARTS", "STRUCT", "TABLE", "THEN", "TO", "TRAIL", "TRANSACTION", "TRUE", "TYPE", "UNION", "UNWIND", "UNINSTALL", "UPDATE", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", "YIELD", "USER", "PASSWORD", "ROLE", "MAP"} -#define _keywordListLength 119 +#define _keywordList {"ACYCLIC", "ANY", "ADD", "ALL", "ALTER", "ANALYZE", "AND", "AS", "ASC", "ASCENDING", "ATTACH", "BEGIN", "BY", "CALL", "CASE", "CAST", "CHECKPOINT", "COLUMN", "COMMENT", "COMMIT", "COMMIT_SKIP_CHECKPOINT", "CONTAINS", "COPY", "COUNT", "CREATE", "CYCLE", "DATABASE", "DBTYPE", "DEFAULT", "DELETE", "DESC", "DESCENDING", "DETACH", "DISTINCT", "DROP", "ELSE", "END", "ENDS", "EXISTS", "EXPLAIN", "EXPORT", "EXTENSION", "FALSE", "FROM", "FORCE", "FOR", "GLOB", "GRAPH", "GROUP", "HEADERS", "HINT", "IMPORT", "INDEX", "IF", "IN", "INCREMENT", "INSTALL", "IS", "JOIN", "KEY", "LIMIT", "LOAD", "LOGICAL", "MACRO", "MATCH", "MAXVALUE", "MERGE", "MINVALUE", "MULTI_JOIN", "NO", "NODE", "NOT", "NONE", "NULL", "ON", "ONLY", "OPTIONS", "OPTIONAL", "OR", "ORDER", "PRIMARY", "PROFILE", "PROJECT", "READ", "REL", "RENAME", "RETURN", "ROLLBACK", "ROLLBACK_SKIP_CHECKPOINT", "SEQUENCE", "SET", "SORTED", "SHORTEST", "START", "STARTS", "STRUCT", "TABLE", "THEN", "TO", "TRAIL", "TRANSACTION", "TRUE", "TYPE", "UNION", "UNWIND", "UNINSTALL", "UPDATE", "USE", "WHEN", "WHERE", "WITH", "WRITE", "WSHORTEST", "XOR", "SINGLE", "YIELD", "USER", "PASSWORD", "ROLE", "MAP"} +#define _keywordListLength 120 // clang-format on #endif From 3e4114884566bf206af0fb3512d20ff3f3ef3550 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Fri, 3 Jul 2026 07:27:15 -0700 Subject: [PATCH 2/8] Bump version to 0.19.0 (dev) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eaca1d5306..54c8e3700f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.15) -project(Lbug VERSION 0.18.0 LANGUAGES CXX C) +project(Lbug VERSION 0.19.0 LANGUAGES CXX C) option(SINGLE_THREADED "Single-threaded mode" FALSE) if(SINGLE_THREADED) From f0e8ab01329235e38ee4692952233f8c1890003d Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Thu, 2 Jul 2026 21:27:05 -0700 Subject: [PATCH 3/8] Optimize sorted primary-key outdegree counts --- .../optimizer/count_rel_table_optimizer.h | 2 + .../operator/scan/logical_rel_degree_table.h | 23 ++- .../operator/scan/rel_degree_table.h | 8 +- src/optimizer/count_rel_table_optimizer.cpp | 168 ++++++++++++++++++ src/processor/map/map_rel_degree_table.cpp | 4 +- .../operator/scan/rel_degree_table.cpp | 15 ++ 6 files changed, 206 insertions(+), 14 deletions(-) diff --git a/src/include/optimizer/count_rel_table_optimizer.h b/src/include/optimizer/count_rel_table_optimizer.h index a1c816ec2c..e2e56b4ed1 100644 --- a/src/include/optimizer/count_rel_table_optimizer.h +++ b/src/include/optimizer/count_rel_table_optimizer.h @@ -58,6 +58,8 @@ class CountRelTableOptimizer : public LogicalOperatorVisitor { bool canOptimize(planner::LogicalOperator* aggregate) const; std::shared_ptr tryRewriteActiveBoundCount( std::shared_ptr op); + std::shared_ptr tryRewriteSortedOffsetCount( + std::shared_ptr op); std::shared_ptr tryRewriteDegreeTopK( std::shared_ptr op); diff --git a/src/include/planner/operator/scan/logical_rel_degree_table.h b/src/include/planner/operator/scan/logical_rel_degree_table.h index 123957a745..2c1ca60dd9 100644 --- a/src/include/planner/operator/scan/logical_rel_degree_table.h +++ b/src/include/planner/operator/scan/logical_rel_degree_table.h @@ -9,7 +9,7 @@ namespace lbug { namespace planner { -enum class RelDegreeTableMode : uint8_t { ACTIVE_BOUND_COUNT, TOP_K_DEGREES }; +enum class RelDegreeTableMode : uint8_t { ACTIVE_BOUND_COUNT, TOP_K_DEGREES, OFFSET_COUNT }; struct LogicalRelDegreeTablePrintInfo final : OPPrintInfo { std::string relTableName; @@ -21,7 +21,8 @@ struct LogicalRelDegreeTablePrintInfo final : OPPrintInfo { std::string toString() const override { return "Table: " + relTableName + ", Mode: " + (mode == RelDegreeTableMode::ACTIVE_BOUND_COUNT ? "ACTIVE_BOUND_COUNT" : - "TOP_K_DEGREES"); + mode == RelDegreeTableMode::TOP_K_DEGREES ? "TOP_K_DEGREES" : + "OFFSET_COUNT"); } std::unique_ptr copy() const override { @@ -37,20 +38,22 @@ class LogicalRelDegreeTable final : public LogicalOperator { std::vector relTableIDs, std::shared_ptr boundNode, common::ExtendDirection direction, RelDegreeTableMode mode, std::shared_ptr nodeKeyExpr, - std::shared_ptr degreeExpr, common::idx_t limit) + std::shared_ptr degreeExpr, common::idx_t limit, + common::offset_t nodeOffset = common::INVALID_OFFSET) : LogicalOperator{type_}, relGroupEntry{relGroupEntry}, relTableIDs{std::move(relTableIDs)}, boundNode{std::move(boundNode)}, direction{direction}, mode{mode}, - nodeKeyExpr{std::move(nodeKeyExpr)}, degreeExpr{std::move(degreeExpr)}, limit{limit} { - cardinality = mode == RelDegreeTableMode::ACTIVE_BOUND_COUNT ? 1 : limit; + nodeKeyExpr{std::move(nodeKeyExpr)}, degreeExpr{std::move(degreeExpr)}, limit{limit}, + nodeOffset{nodeOffset} { + cardinality = mode == RelDegreeTableMode::TOP_K_DEGREES ? limit : 1; } void computeFactorizedSchema() override; void computeFlatSchema() override; std::string getExpressionsForPrinting() const override { - return mode == RelDegreeTableMode::ACTIVE_BOUND_COUNT ? - degreeExpr->toString() : - nodeKeyExpr->toString() + ", " + degreeExpr->toString(); + return mode == RelDegreeTableMode::TOP_K_DEGREES ? + nodeKeyExpr->toString() + ", " + degreeExpr->toString() : + degreeExpr->toString(); } catalog::RelGroupCatalogEntry* getRelGroupEntry() const { return relGroupEntry; } @@ -61,6 +64,7 @@ class LogicalRelDegreeTable final : public LogicalOperator { std::shared_ptr getNodeKeyExpr() const { return nodeKeyExpr; } std::shared_ptr getDegreeExpr() const { return degreeExpr; } common::idx_t getLimit() const { return limit; } + common::offset_t getNodeOffset() const { return nodeOffset; } std::unique_ptr getPrintInfo() const override { return std::make_unique(relGroupEntry->getName(), mode); @@ -68,7 +72,7 @@ class LogicalRelDegreeTable final : public LogicalOperator { std::unique_ptr copy() override { return std::make_unique(relGroupEntry, relTableIDs, boundNode, - direction, mode, nodeKeyExpr, degreeExpr, limit); + direction, mode, nodeKeyExpr, degreeExpr, limit, nodeOffset); } private: @@ -80,6 +84,7 @@ class LogicalRelDegreeTable final : public LogicalOperator { std::shared_ptr nodeKeyExpr; std::shared_ptr degreeExpr; common::idx_t limit; + common::offset_t nodeOffset; }; } // namespace planner diff --git a/src/include/processor/operator/scan/rel_degree_table.h b/src/include/processor/operator/scan/rel_degree_table.h index 0ca2dc7ec1..bca8107356 100644 --- a/src/include/processor/operator/scan/rel_degree_table.h +++ b/src/include/processor/operator/scan/rel_degree_table.h @@ -28,10 +28,11 @@ class RelDegreeTable final : public PhysicalOperator { public: RelDegreeTable(std::vector relTables, common::RelDataDirection direction, planner::RelDegreeTableMode mode, DataPos nodeKeyOutputPos, DataPos degreeOutputPos, - common::idx_t limit, physical_op_id id, std::unique_ptr printInfo) + common::idx_t limit, common::offset_t nodeOffset, physical_op_id id, + std::unique_ptr printInfo) : PhysicalOperator{type_, id, std::move(printInfo)}, relTables{std::move(relTables)}, direction{direction}, mode{mode}, nodeKeyOutputPos{nodeKeyOutputPos}, - degreeOutputPos{degreeOutputPos}, limit{limit} {} + degreeOutputPos{degreeOutputPos}, limit{limit}, nodeOffset{nodeOffset} {} bool isSource() const override { return true; } bool isParallel() const override { return false; } @@ -41,7 +42,7 @@ class RelDegreeTable final : public PhysicalOperator { std::unique_ptr copy() override { return std::make_unique(relTables, direction, mode, nodeKeyOutputPos, - degreeOutputPos, limit, id, printInfo->copy()); + degreeOutputPos, limit, nodeOffset, id, printInfo->copy()); } private: @@ -54,6 +55,7 @@ class RelDegreeTable final : public PhysicalOperator { DataPos nodeKeyOutputPos; DataPos degreeOutputPos; common::idx_t limit; + common::offset_t nodeOffset; common::ValueVector* nodeKeyVector = nullptr; common::ValueVector* degreeVector = nullptr; bool hasExecuted = false; diff --git a/src/optimizer/count_rel_table_optimizer.cpp b/src/optimizer/count_rel_table_optimizer.cpp index 87db26d072..d46c57c5f1 100644 --- a/src/optimizer/count_rel_table_optimizer.cpp +++ b/src/optimizer/count_rel_table_optimizer.cpp @@ -2,15 +2,18 @@ #include "binder/expression/aggregate_function_expression.h" #include "binder/expression/expression_util.h" +#include "binder/expression/literal_expression.h" #include "binder/expression/node_expression.h" #include "binder/expression/property_expression.h" #include "binder/expression/rel_expression.h" +#include "catalog/catalog_entry/node_table_catalog_entry.h" #include "catalog/catalog_entry/node_table_id_pair.h" #include "function/aggregate/count.h" #include "function/aggregate/count_star.h" #include "main/client_context.h" #include "planner/operator/extend/logical_extend.h" #include "planner/operator/logical_aggregate.h" +#include "planner/operator/logical_filter.h" #include "planner/operator/logical_order_by.h" #include "planner/operator/logical_projection.h" #include "planner/operator/scan/logical_count_rel_table.h" @@ -243,6 +246,9 @@ std::shared_ptr CountRelTableOptimizer::visitAggregateReplace( if (auto rewritten = tryRewriteActiveBoundCount(op); rewritten != op) { return rewritten; } + if (auto rewritten = tryRewriteSortedOffsetCount(op); rewritten != op) { + return rewritten; + } if (!isSimpleCount(op.get())) { return op; } @@ -318,6 +324,168 @@ std::shared_ptr CountRelTableOptimizer::visitAggregateReplace( return countRelTable; } +static LogicalOperator* skipProjections(LogicalOperator* op) { + while (op->getOperatorType() == LogicalOperatorType::PROJECTION) { + op = op->getChild(0).get(); + } + return op; +} + +static bool isPropertyForNodePrimaryKey(const Expression& expression, const NodeExpression& node) { + if (expression.expressionType != ExpressionType::PROPERTY || node.getNumEntries() != 1) { + return false; + } + auto& property = expression.constCast(); + return property.getVariableName() == node.getUniqueName() && + property.isPrimaryKey(node.getTableIDs()[0]); +} + +static bool literalToOffset(const Expression& expression, offset_t& offset) { + if (expression.expressionType != ExpressionType::LITERAL) { + return false; + } + auto value = expression.constCast().getValue(); + if (value.isNull()) { + return false; + } + switch (value.getDataType().getPhysicalType()) { + case PhysicalTypeID::INT8: { + auto signedValue = value.getValue(); + if (signedValue < 0) { + return false; + } + offset = static_cast(signedValue); + return true; + } + case PhysicalTypeID::INT16: { + auto signedValue = value.getValue(); + if (signedValue < 0) { + return false; + } + offset = static_cast(signedValue); + return true; + } + case PhysicalTypeID::INT32: { + auto signedValue = value.getValue(); + if (signedValue < 0) { + return false; + } + offset = static_cast(signedValue); + return true; + } + case PhysicalTypeID::INT64: { + auto signedValue = value.getValue(); + if (signedValue < 0) { + return false; + } + offset = static_cast(signedValue); + return true; + } + case PhysicalTypeID::UINT8: { + offset = static_cast(value.getValue()); + return true; + } + case PhysicalTypeID::UINT16: { + offset = static_cast(value.getValue()); + return true; + } + case PhysicalTypeID::UINT32: { + offset = static_cast(value.getValue()); + return true; + } + case PhysicalTypeID::UINT64: { + offset = static_cast(value.getValue()); + return true; + } + default: + return false; + } +} + +static bool getPrimaryKeyOffsetPredicate(const Expression& predicate, const NodeExpression& node, + offset_t& offset) { + if (predicate.expressionType != ExpressionType::EQUALS || predicate.getNumChildren() != 2) { + return false; + } + auto lhs = predicate.getChild(0); + auto rhs = predicate.getChild(1); + if (isPropertyForNodePrimaryKey(*lhs, node)) { + return literalToOffset(*rhs, offset); + } + if (isPropertyForNodePrimaryKey(*rhs, node)) { + return literalToOffset(*lhs, offset); + } + return false; +} + +std::shared_ptr CountRelTableOptimizer::tryRewriteSortedOffsetCount( + std::shared_ptr op) { + if (!isSimpleCount(op.get())) { + return op; + } + auto* current = skipProjections(op->getChild(0).get()); + const LogicalFilter* filter = nullptr; + if (current->getOperatorType() == LogicalOperatorType::FILTER) { + filter = current->ptrCast(); + current = skipProjections(current->getChild(0).get()); + } + if (current->getOperatorType() != LogicalOperatorType::EXTEND) { + return op; + } + auto& extend = current->constCast(); + auto boundNode = extend.getBoundNode(); + if (boundNode->getNumEntries() != 1 || extend.getDirection() == ExtendDirection::BOTH || + !extend.getProperties().empty()) { + return op; + } + auto tableID = boundNode->getTableIDs()[0]; + auto* nodeEntry = boundNode->getEntry(0)->ptrCast(); + if (!nodeEntry->isLeadingSortPrimaryKeyAsc()) { + return op; + } + auto nodeKey = boundNode->getPrimaryKey(tableID); + if (!nodeKey) { + return op; + } + auto* scan = current->getChild(0).get(); + if (scan->getOperatorType() != LogicalOperatorType::SCAN_NODE_TABLE) { + return op; + } + auto& scanNode = scan->constCast(); + offset_t offset = INVALID_OFFSET; + if (filter) { + if (!getPrimaryKeyOffsetPredicate(*filter->getPredicate(), *boundNode, offset)) { + return op; + } + } else { + if (scanNode.getScanType() != LogicalScanNodeTableType::PRIMARY_KEY_SCAN || + scanNode.getExtraInfo() == nullptr) { + return op; + } + auto& primaryKeyScanInfo = scanNode.getExtraInfo()->constCast(); + if (primaryKeyScanInfo.isRange || !primaryKeyScanInfo.key || + !literalToOffset(*primaryKeyScanInfo.key, offset)) { + return op; + } + } + for (auto& property : scanNode.getProperties()) { + if (!(*property == *nodeKey)) { + return op; + } + } + std::vector relTableIDs; + RelGroupCatalogEntry* relGroupEntry = nullptr; + if (!relTablesForExtend(extend, relTableIDs, relGroupEntry)) { + return op; + } + auto countExpr = op->constCast().getAggregates()[0]; + auto result = + std::make_shared(relGroupEntry, std::move(relTableIDs), boundNode, + extend.getDirection(), RelDegreeTableMode::OFFSET_COUNT, nodeKey, countExpr, 1, offset); + result->computeFlatSchema(); + return result; +} + std::shared_ptr CountRelTableOptimizer::tryRewriteActiveBoundCount( std::shared_ptr op) { auto* current = op->getChild(0).get(); diff --git a/src/processor/map/map_rel_degree_table.cpp b/src/processor/map/map_rel_degree_table.cpp index eeb3838780..58a308adcf 100644 --- a/src/processor/map/map_rel_degree_table.cpp +++ b/src/processor/map/map_rel_degree_table.cpp @@ -38,8 +38,8 @@ std::unique_ptr PlanMapper::mapRelDegreeTable( auto printInfo = std::make_unique( logical.getRelGroupEntry()->getName(), logical.getMode()); return std::make_unique(std::move(relTables), relDirection, logical.getMode(), - nodeKeyOutputPos, degreeOutputPos, logical.getLimit(), getOperatorID(), - std::move(printInfo)); + nodeKeyOutputPos, degreeOutputPos, logical.getLimit(), logical.getNodeOffset(), + getOperatorID(), std::move(printInfo)); } } // namespace processor diff --git a/src/processor/operator/scan/rel_degree_table.cpp b/src/processor/operator/scan/rel_degree_table.cpp index afb3f42bf3..5cd4a64592 100644 --- a/src/processor/operator/scan/rel_degree_table.cpp +++ b/src/processor/operator/scan/rel_degree_table.cpp @@ -67,6 +67,21 @@ bool RelDegreeTable::getNextTuplesInternal(ExecutionContext* context) { hasExecuted = true; return true; } + if (mode == planner::RelDegreeTableMode::OFFSET_COUNT) { + row_idx_t count = 0; + for (auto* relTable : relTables) { + for (auto& [offset, degree] : relTable->getDegreeEntries(transaction, direction)) { + if (offset == nodeOffset) { + count += degree; + break; + } + } + } + degreeVector->state->getSelVectorUnsafe().setToUnfiltered(1); + degreeVector->setValue(0, static_cast(count)); + hasExecuted = true; + return true; + } std::unordered_map degrees; for (auto* relTable : relTables) { From b53a065700383248f0baf9b860336ae1c25cbb7f Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Thu, 2 Jul 2026 21:27:17 -0700 Subject: [PATCH 4/8] Test sorted outdegree count rewrite --- test/optimizer/optimizer_test.cpp | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/test/optimizer/optimizer_test.cpp b/test/optimizer/optimizer_test.cpp index a3f67a52be..2719043001 100644 --- a/test/optimizer/optimizer_test.cpp +++ b/test/optimizer/optimizer_test.cpp @@ -366,6 +366,54 @@ TEST_F(OptimizerTest, CountRelTableOptimizer) { "CREATE (a)-[:opt_degree_follows]->(b);") ->isSuccess()); + auto qSortedOffset = + "MATCH (a:opt_degree_user)-[:opt_degree_follows]->(b) WHERE a.id = 0 RETURN count(*);"; + auto planSortedOffsetBeforeAlter = getRoot(qSortedOffset); + ASSERT_FALSE(hasOperatorType(planSortedOffsetBeforeAlter->getLastOperator().get(), + planner::LogicalOperatorType::REL_DEGREE_TABLE)); + ASSERT_TRUE(conn->query("ALTER TABLE opt_degree_user SET SORTED BY (id ASC);")->isSuccess()); + auto planSortedOffset = getRoot(qSortedOffset); + ASSERT_TRUE(hasOperatorType(planSortedOffset->getLastOperator().get(), + planner::LogicalOperatorType::REL_DEGREE_TABLE)); + auto resultSortedOffset = conn->query(qSortedOffset); + ASSERT_TRUE(resultSortedOffset->isSuccess()); + ASSERT_EQ(resultSortedOffset->getNext()->getValue(0)->getValue(), 2); + auto resultSortedOffsetMissing = conn->query( + "MATCH (a:opt_degree_user)-[:opt_degree_follows]->(b) WHERE a.id = 99 RETURN count(*);"); + ASSERT_TRUE(resultSortedOffsetMissing->isSuccess()); + ASSERT_EQ(resultSortedOffsetMissing->getNext()->getValue(0)->getValue(), 0); + + ASSERT_TRUE(conn->query("CREATE NODE TABLE opt_sorted_user(id INT64, kind INT64, " + "PRIMARY KEY(id));") + ->isSuccess()); + ASSERT_TRUE(conn->query("CREATE REL TABLE opt_sorted_follows(FROM opt_sorted_user TO " + "opt_sorted_user);") + ->isSuccess()); + ASSERT_TRUE(conn->query("CREATE (:opt_sorted_user {id: 0, kind: 7});")->isSuccess()); + ASSERT_TRUE(conn->query("CREATE (:opt_sorted_user {id: 1, kind: 6});")->isSuccess()); + ASSERT_TRUE(conn->query("MATCH (a:opt_sorted_user), (b:opt_sorted_user) " + "WHERE a.id = 0 AND b.id = 1 " + "CREATE (a)-[:opt_sorted_follows]->(b);") + ->isSuccess()); + auto qCompositeSortedOffset = + "MATCH (a:opt_sorted_user)-[:opt_sorted_follows]->(b) WHERE a.id = 0 RETURN count(*);"; + ASSERT_TRUE( + conn->query("ALTER TABLE opt_sorted_user SET SORTED BY (kind DESC, id ASC);")->isSuccess()); + auto planCompositeNonLeadingPK = getRoot(qCompositeSortedOffset); + ASSERT_FALSE(hasOperatorType(planCompositeNonLeadingPK->getLastOperator().get(), + planner::LogicalOperatorType::REL_DEGREE_TABLE)); + auto resultCompositeNonLeadingPK = conn->query(qCompositeSortedOffset); + ASSERT_TRUE(resultCompositeNonLeadingPK->isSuccess()); + ASSERT_EQ(resultCompositeNonLeadingPK->getNext()->getValue(0)->getValue(), 1); + ASSERT_TRUE( + conn->query("ALTER TABLE opt_sorted_user SET SORTED BY (id ASC, kind DESC);")->isSuccess()); + auto planCompositeLeadingPK = getRoot(qCompositeSortedOffset); + ASSERT_TRUE(hasOperatorType(planCompositeLeadingPK->getLastOperator().get(), + planner::LogicalOperatorType::REL_DEGREE_TABLE)); + auto resultCompositeLeadingPK = conn->query(qCompositeSortedOffset); + ASSERT_TRUE(resultCompositeLeadingPK->isSuccess()); + ASSERT_EQ(resultCompositeLeadingPK->getNext()->getValue(0)->getValue(), 1); + auto q8 = "MATCH (u:opt_degree_user)-[:opt_degree_follows]->(v) RETURN count(DISTINCT u.id);"; auto plan8 = getRoot(q8); ASSERT_TRUE(hasOperatorType(plan8->getLastOperator().get(), From fa67dc2e990252fb2159ffd36555f1ebab63f5f0 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Thu, 2 Jul 2026 22:47:46 -0700 Subject: [PATCH 5/8] wal: enforce readLimit at read level for silent forward-compatible migration Instead of throwing RuntimeException when a WAL record's declared length is shorter than what the current deserializer expects (e.g. v42->v43), enforce the readLimit at the Deserializer::read() level. If a read would exceed the declared record boundary, only the available bytes are read from the stream and the remainder of the output buffer is zero-filled. This gives new fields default (zero) values and keeps the stream positioned at the correct record boundary, so the next record in the WAL is not corrupted during replay or checkpoint. Key changes: - Deserializer::read() truncates reads at the readLimit boundary - deserializeValue() and the std::string specialization route through the enforcing read() method instead of reader->read() directly - skipReadLimit() no longer throws (the over-read case cannot occur) - WALRecordDeserializeHandlesSizeMismatch test verifies silent handling with correct stream positioning --- src/common/serializer/deserializer.cpp | 2 +- src/include/common/serializer/deserializer.h | 20 +++++++++-- test/transaction/wal_test.cpp | 35 ++++++++++++++++++++ 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/common/serializer/deserializer.cpp b/src/common/serializer/deserializer.cpp index 0af47a076a..93c72c3aec 100644 --- a/src/common/serializer/deserializer.cpp +++ b/src/common/serializer/deserializer.cpp @@ -8,7 +8,7 @@ void Deserializer::deserializeValue(std::string& value) { uint64_t valueLength = 0; deserializeValue(valueLength); value.resize(valueLength); - reader->read(reinterpret_cast(value.data()), valueLength); + this->read(reinterpret_cast(value.data()), valueLength); } void Deserializer::validateDebuggingInfo(std::string& value, const std::string& expectedVal) { diff --git a/src/include/common/serializer/deserializer.h b/src/include/common/serializer/deserializer.h index eabab64ac3..c4d916e64d 100644 --- a/src/include/common/serializer/deserializer.h +++ b/src/include/common/serializer/deserializer.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -28,10 +29,25 @@ class LBUG_API Deserializer { template requires std::is_trivially_destructible_v || std::is_same_v void deserializeValue(T& value) { - reader->read(reinterpret_cast(&value), sizeof(T)); + this->read(reinterpret_cast(&value), sizeof(T)); } - void read(uint8_t* data, uint64_t size) const { reader->read(data, size); } + void read(uint8_t* data, uint64_t size) const { + if (readLimit.has_value()) { + const auto remaining = *readLimit - getReadOffset(); + if (size > remaining) { + // Don't read past the declared record boundary. + // Read what's available and zero-fill the rest so that fields added + // in a newer format default to zero when reading older WAL records. + if (remaining > 0) { + reader->read(data, remaining); + } + std::memset(data + remaining, 0, size - remaining); + return; + } + } + reader->read(data, size); + } Reader* getReader() const { return reader.get(); } diff --git a/test/transaction/wal_test.cpp b/test/transaction/wal_test.cpp index 9e4580285c..df8ac628c6 100644 --- a/test/transaction/wal_test.cpp +++ b/test/transaction/wal_test.cpp @@ -188,6 +188,41 @@ TEST_F(WalTest, WALRecordDeserializeSkipsUnknownTrailingBytes) { EXPECT_TRUE(deserializer.finished()); } +// Simulates the scenario where the declared record length is smaller than the actual serialized +// record. This happens when an older writer (e.g. v42) wrote a WAL record with fewer fields than +// the current reader (e.g. v43) expects. The deserializer must gracefully handle the size mismatch +// by truncating reads at the declared record boundary and zero-filling any remaining bytes in the +// new field. This allows silent forward-compatible migration without corrupting the next record. +TEST_F(WalTest, WALRecordDeserializeHandlesSizeMismatch) { + auto recordBuffer = std::make_shared(); + Serializer recordSerializer{recordBuffer}; + lbug::storage::CopyTableRecord record{123}; + record.serialize(recordSerializer); + recordSerializer.write(456); + + // Declare a record length one byte shorter than the actual serialized size, simulating + // an older version that wrote a smaller struct. + const auto realRecordSize = recordBuffer->getSize(); + ASSERT_GT(realRecordSize, 1u); + const auto truncatedLength = realRecordSize - 1; + + auto walBuffer = std::make_shared(); + Serializer walSerializer{walBuffer}; + walSerializer.write(truncatedLength); + walSerializer.write(recordBuffer->getBlobData(), realRecordSize); + + auto walData = walBuffer->getData(); + Deserializer deserializer{std::make_unique(walData.data.get(), walData.size)}; + // Should NOT throw: the deserializer truncates reads at the declared record boundary + // and zero-fills the rest, so the next record in the stream starts at the correct offset. + auto deserialized = + lbug::storage::WALRecord::deserialize(deserializer, *conn->getClientContext()); + ASSERT_EQ(deserialized->type, lbug::storage::WALRecordType::COPY_TABLE_RECORD); + EXPECT_EQ(deserialized->constCast().tableID, 123); + // The stream should be positioned at the declared record boundary, not past it. + EXPECT_FALSE(deserializer.finished()); +} + TEST_F(WalTest, NoWALFile) { if (inMemMode || systemConfig->checkpointThreshold == 0) { GTEST_SKIP(); From 8286eae3fbb987fe243be764211cd6b60ea28313 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Thu, 2 Jul 2026 23:28:56 -0700 Subject: [PATCH 6/8] wal: update alter_table_entry typespec --- .../records/alter_table_entry_record.tsp | 10 +++++++++ .../templates/wal_record_source.cpp.j2 | 21 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/storage/wal/typespec/records/alter_table_entry_record.tsp b/src/storage/wal/typespec/records/alter_table_entry_record.tsp index bc7696374b..5f5fc305f0 100644 --- a/src/storage/wal/typespec/records/alter_table_entry_record.tsp +++ b/src/storage/wal/typespec/records/alter_table_entry_record.tsp @@ -18,6 +18,7 @@ union AlterExtraInfo { renameProperty: RenamePropertyAlterPayload, comment: CommentAlterPayload, rename: RenameTableAlterPayload, + setSortedBy: SetSortedByAlterPayload, addFromToConnection: AddFromToConnectionAlterPayload, dropFromToConnection: DropFromToConnectionAlterPayload, } @@ -43,6 +44,15 @@ model RenameTableAlterPayload { newName: string; } +model BoundSortedByProperty { + propertyName: string; + ascending: bool; +} + +model SetSortedByAlterPayload { + properties: BoundSortedByProperty[]; +} + model AddFromToConnectionAlterPayload { fromTableID: table_id_t; toTableID: table_id_t; diff --git a/src/storage/wal/typespec/templates/wal_record_source.cpp.j2 b/src/storage/wal/typespec/templates/wal_record_source.cpp.j2 index 6adc126a51..12a8f7c67f 100644 --- a/src/storage/wal/typespec/templates/wal_record_source.cpp.j2 +++ b/src/storage/wal/typespec/templates/wal_record_source.cpp.j2 @@ -101,6 +101,14 @@ static void serializeAlterExtraInfo(Serializer& serializer, const BoundAlterInfo auto renameTableInfo = extraInfo->constPtrCast(); serializer.write(renameTableInfo->newName); } break; + case AlterType::SET_SORTED_BY: { + auto sortedByInfo = extraInfo->constPtrCast(); + serializer.write(static_cast(sortedByInfo->properties.size())); + for (auto& property : sortedByInfo->properties) { + serializer.write(property.propertyName); + serializer.write(property.ascending); + } + } break; case AlterType::ADD_FROM_TO_CONNECTION: case AlterType::DROP_FROM_TO_CONNECTION: { auto connectionInfo = extraInfo->constPtrCast(); @@ -147,6 +155,19 @@ static decltype(auto) deserializeAlterRecord(Deserializer& deserializer) { deserializer.deserializeValue(newName); extraInfo = std::make_unique(std::move(newName)); } break; + case AlterType::SET_SORTED_BY: { + uint64_t numProperties = 0; + deserializer.deserializeValue(numProperties); + std::vector properties; + properties.reserve(numProperties); + for (auto i = 0u; i < numProperties; ++i) { + BoundSortedByProperty property; + deserializer.deserializeValue(property.propertyName); + deserializer.deserializeValue(property.ascending); + properties.push_back(std::move(property)); + } + extraInfo = std::make_unique(std::move(properties)); + } break; case AlterType::ADD_FROM_TO_CONNECTION: case AlterType::DROP_FROM_TO_CONNECTION: { table_id_t fromTableID = INVALID_TABLE_ID; From 695a7a8b625a1bcac67c0ae97b6c83621d054666 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Thu, 2 Jul 2026 22:09:20 -0700 Subject: [PATCH 7/8] optimizer: use CSR indptr offsets for degree counts --- src/include/storage/table/arrow_rel_table.h | 2 ++ .../storage/table/columnar_rel_table_base.h | 5 +++ .../storage/table/ice_disk_rel_table.h | 2 ++ src/include/storage/table/rel_table.h | 2 ++ .../operator/scan/rel_degree_table.cpp | 7 +--- src/storage/table/arrow_rel_table.cpp | 15 +++++++++ src/storage/table/columnar_rel_table_base.cpp | 5 +++ src/storage/table/ice_disk_rel_table.cpp | 15 +++++++++ src/storage/table/rel_table.cpp | 32 +++++++++++++++++++ 9 files changed, 79 insertions(+), 6 deletions(-) diff --git a/src/include/storage/table/arrow_rel_table.h b/src/include/storage/table/arrow_rel_table.h index 7f6d8c9283..3c7a1ff30b 100644 --- a/src/include/storage/table/arrow_rel_table.h +++ b/src/include/storage/table/arrow_rel_table.h @@ -50,6 +50,8 @@ class ArrowRelTable final : public ColumnarRelTableBase { std::vector> getAllDegreeEntries( const transaction::Transaction* transaction, common::RelDataDirection direction) const override; + common::row_idx_t getDegreeForOffsetInternal(const transaction::Transaction* transaction, + common::RelDataDirection direction, common::offset_t nodeOffset) const override; std::vector> getTopKDegreeEntries( const transaction::Transaction* transaction, common::RelDataDirection direction, common::idx_t k) const override; diff --git a/src/include/storage/table/columnar_rel_table_base.h b/src/include/storage/table/columnar_rel_table_base.h index 0cbc6eb2f7..47de0d328f 100644 --- a/src/include/storage/table/columnar_rel_table_base.h +++ b/src/include/storage/table/columnar_rel_table_base.h @@ -48,6 +48,8 @@ class ColumnarRelTableBase : public RelTable { common::RelDataDirection direction) override; std::vector> getDegreeEntries( const transaction::Transaction* transaction, common::RelDataDirection direction) override; + common::row_idx_t getDegreeForOffset(const transaction::Transaction* transaction, + common::RelDataDirection direction, common::offset_t nodeOffset) override; std::vector> getTopKDegrees( const transaction::Transaction* transaction, common::RelDataDirection direction, common::idx_t k) override; @@ -64,6 +66,9 @@ class ColumnarRelTableBase : public RelTable { common::RelDataDirection direction) const = 0; virtual std::vector> getAllDegreeEntries( const transaction::Transaction* transaction, common::RelDataDirection direction) const = 0; + virtual common::row_idx_t getDegreeForOffsetInternal( + const transaction::Transaction* transaction, common::RelDataDirection direction, + common::offset_t nodeOffset) const = 0; virtual std::vector> getTopKDegreeEntries( const transaction::Transaction* transaction, common::RelDataDirection direction, common::idx_t k) const = 0; diff --git a/src/include/storage/table/ice_disk_rel_table.h b/src/include/storage/table/ice_disk_rel_table.h index e04bc75dc3..17083595cf 100644 --- a/src/include/storage/table/ice_disk_rel_table.h +++ b/src/include/storage/table/ice_disk_rel_table.h @@ -75,6 +75,8 @@ class IceDiskRelTable final : public ColumnarRelTableBase { std::vector> getAllDegreeEntries( const transaction::Transaction* transaction, common::RelDataDirection direction) const override; + common::row_idx_t getDegreeForOffsetInternal(const transaction::Transaction* transaction, + common::RelDataDirection direction, common::offset_t nodeOffset) const override; std::vector> getTopKDegreeEntries( const transaction::Transaction* transaction, common::RelDataDirection direction, common::idx_t k) const override; diff --git a/src/include/storage/table/rel_table.h b/src/include/storage/table/rel_table.h index 544a7942ad..fc3851e04b 100644 --- a/src/include/storage/table/rel_table.h +++ b/src/include/storage/table/rel_table.h @@ -211,6 +211,8 @@ class LBUG_API RelTable : public Table { common::RelDataDirection direction); virtual std::vector> getDegreeEntries( const transaction::Transaction* transaction, common::RelDataDirection direction); + virtual common::row_idx_t getDegreeForOffset(const transaction::Transaction* transaction, + common::RelDataDirection direction, common::offset_t nodeOffset); virtual std::vector> getTopKDegrees( const transaction::Transaction* transaction, common::RelDataDirection direction, common::idx_t k); diff --git a/src/processor/operator/scan/rel_degree_table.cpp b/src/processor/operator/scan/rel_degree_table.cpp index 5cd4a64592..f7381719d1 100644 --- a/src/processor/operator/scan/rel_degree_table.cpp +++ b/src/processor/operator/scan/rel_degree_table.cpp @@ -70,12 +70,7 @@ bool RelDegreeTable::getNextTuplesInternal(ExecutionContext* context) { if (mode == planner::RelDegreeTableMode::OFFSET_COUNT) { row_idx_t count = 0; for (auto* relTable : relTables) { - for (auto& [offset, degree] : relTable->getDegreeEntries(transaction, direction)) { - if (offset == nodeOffset) { - count += degree; - break; - } - } + count += relTable->getDegreeForOffset(transaction, direction, nodeOffset); } degreeVector->state->getSelVectorUnsafe().setToUnfiltered(1); degreeVector->setValue(0, static_cast(count)); diff --git a/src/storage/table/arrow_rel_table.cpp b/src/storage/table/arrow_rel_table.cpp index 327443eaf5..7395f9a6b8 100644 --- a/src/storage/table/arrow_rel_table.cpp +++ b/src/storage/table/arrow_rel_table.cpp @@ -639,6 +639,21 @@ std::vector> ArrowRelTable::getAllDegreeEntries( return result; } +row_idx_t ArrowRelTable::getDegreeForOffsetInternal( + [[maybe_unused]] const transaction::Transaction* transaction, RelDataDirection direction, + offset_t nodeOffset) const { + if (layout != ArrowRelTableLayout::CSR || direction == RelDataDirection::BWD || + nodeOffset + 1 >= totalIndptrRows) { + return 0; + } + offset_t start = INVALID_OFFSET; + offset_t end = INVALID_OFFSET; + if (!readIndptr(nodeOffset, start) || !readIndptr(nodeOffset + 1, end) || end <= start) { + return 0; + } + return end - start; +} + std::vector> ArrowRelTable::getTopKDegreeEntries( [[maybe_unused]] const transaction::Transaction* transaction, RelDataDirection direction, idx_t k) const { diff --git a/src/storage/table/columnar_rel_table_base.cpp b/src/storage/table/columnar_rel_table_base.cpp index 74e8c714e8..90acb8eca8 100644 --- a/src/storage/table/columnar_rel_table_base.cpp +++ b/src/storage/table/columnar_rel_table_base.cpp @@ -26,6 +26,11 @@ std::vector> ColumnarRelTableBase::getDegreeEntri return getAllDegreeEntries(transaction, direction); } +row_idx_t ColumnarRelTableBase::getDegreeForOffset(const Transaction* transaction, + RelDataDirection direction, offset_t nodeOffset) { + return getDegreeForOffsetInternal(transaction, direction, nodeOffset); +} + std::vector> ColumnarRelTableBase::getTopKDegrees( const Transaction* transaction, RelDataDirection direction, idx_t k) { return getTopKDegreeEntries(transaction, direction, k); diff --git a/src/storage/table/ice_disk_rel_table.cpp b/src/storage/table/ice_disk_rel_table.cpp index e662b71620..53194587d5 100644 --- a/src/storage/table/ice_disk_rel_table.cpp +++ b/src/storage/table/ice_disk_rel_table.cpp @@ -521,6 +521,21 @@ std::vector> IceDiskRelTable::getAllDegreeEntries return result; } +row_idx_t IceDiskRelTable::getDegreeForOffsetInternal(const Transaction* transaction, + RelDataDirection direction, offset_t nodeOffset) const { + if (layout != IceDiskRelTableLayout::CSR || direction == RelDataDirection::BWD) { + return 0; + } + loadIndptrData(const_cast(transaction)); + if (nodeOffset + 1 >= indptrData.size()) { + return 0; + } + if (indptrData[nodeOffset + 1] <= indptrData[nodeOffset]) { + return 0; + } + return indptrData[nodeOffset + 1] - indptrData[nodeOffset]; +} + std::vector> IceDiskRelTable::getTopKDegreeEntries( const Transaction* transaction, RelDataDirection direction, idx_t k) const { if (layout != IceDiskRelTableLayout::CSR || direction == RelDataDirection::BWD || k == 0) { diff --git a/src/storage/table/rel_table.cpp b/src/storage/table/rel_table.cpp index bb403dd280..d993937e24 100644 --- a/src/storage/table/rel_table.cpp +++ b/src/storage/table/rel_table.cpp @@ -732,6 +732,38 @@ row_idx_t RelTable::getNumActiveBoundNodes(const Transaction* transaction, return getDegreeEntries(transaction, direction).size(); } +row_idx_t RelTable::getDegreeForOffset(const Transaction* transaction, RelDataDirection direction, + offset_t nodeOffset) { + const auto nodeGroupIdx = StorageUtils::getNodeGroupIdx(nodeOffset); + const auto offsetInGroup = nodeOffset - StorageUtils::getStartOffsetOfNodeGroup(nodeGroupIdx); + auto* relTableData = getDirectedTableData(direction); + if (nodeGroupIdx >= relTableData->getNumNodeGroups()) { + return 0; + } + auto* nodeGroup = relTableData->getNodeGroup(nodeGroupIdx); + if (!nodeGroup) { + return 0; + } + auto& csrNodeGroup = nodeGroup->cast(); + row_idx_t count = 0; + if (auto* persistentGroup = csrNodeGroup.getPersistentChunkedGroup()) { + count += + persistentGroup->cast().getCSRHeader().getCSRLength(offsetInGroup); + } + if (const auto* csrIndex = csrNodeGroup.getCSRIndex()) { + count += csrIndex->getNumRows(offsetInGroup); + } + if (transaction->isWriteTransaction()) { + if (auto* localTable = transaction->getLocalStorage()->getLocalTable(tableID)) { + auto& localCSRIndex = localTable->cast().getCSRIndex(direction); + if (auto it = localCSRIndex.find(nodeOffset); it != localCSRIndex.end()) { + count += it->second.size(); + } + } + } + return count; +} + void RelTable::serialize(Serializer& ser) const { ser.writeDebuggingInfo("next_rel_offset"); ser.write(nextRelOffset); From 7e14a4046070e69c4f66a4932cd1642fb2ca70f7 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Fri, 3 Jul 2026 09:39:36 -0700 Subject: [PATCH 8/8] fix: update tests to expect storage v43 --- test/test_files/storage_version.test | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_files/storage_version.test b/test/test_files/storage_version.test index 6627cf44d9..944c2cc6da 100644 --- a/test/test_files/storage_version.test +++ b/test/test_files/storage_version.test @@ -5,8 +5,8 @@ -CASE StorageVersionFunctionAndUpgrade -STATEMENT CALL storage_version() RETURN *; ---- 1 -42 --CHECK_STORAGE_VERSION 42 +43 +-CHECK_STORAGE_VERSION 43 -SET_STORAGE_VERSION 40 -STATEMENT CALL storage_version() RETURN *; ---- 1 @@ -17,11 +17,11 @@ ---- ok -STATEMENT CHECKPOINT; ---- ok --CHECK_STORAGE_VERSION 42 +-CHECK_STORAGE_VERSION 43 -RELOADDB -STATEMENT CALL storage_version() RETURN *; ---- 1 -42 +43 -STATEMENT MATCH (u:users) RETURN u.id, u.name; ---- 1 1|Alice