diff --git a/src/parser/ParsedQuery.h b/src/parser/ParsedQuery.h index 5082c2ad66..5f8d9fb18c 100644 --- a/src/parser/ParsedQuery.h +++ b/src/parser/ParsedQuery.h @@ -358,6 +358,10 @@ class ParsedQuery { struct GraphPatternOperation { struct BasicGraphPattern { vector _triples; + + void appendTriples(BasicGraphPattern pattern) { + ad_utility::appendVector(_triples, std::move(pattern._triples)); + } }; struct Values { SparqlValues _inlineValues; @@ -368,6 +372,9 @@ struct GraphPatternOperation { ParsedQuery::GraphPattern _child; }; struct Optional { + Optional(ParsedQuery::GraphPattern child) : _child{std::move(child)} { + _child._optional = true; + }; ParsedQuery::GraphPattern _child; }; struct Minus { @@ -420,7 +427,7 @@ struct GraphPatternOperation { }; std::variant + Values, Minus, GroupGraphPattern> variant_; // Construct from one of the variant types (or anything that is convertible to // them. diff --git a/src/parser/SparqlParser.cpp b/src/parser/SparqlParser.cpp index 08c1dedfd9..78270cf466 100644 --- a/src/parser/SparqlParser.cpp +++ b/src/parser/SparqlParser.cpp @@ -60,7 +60,6 @@ void SparqlParser::parseQuery(ParsedQuery* query, QueryType queryType) { if (queryType == CONSTRUCT_QUERY) { query->_clause = parseWithAntlr(&AntlrParser::constructTemplate, *query) .value_or(ad_utility::sparql_types::Triples{}); - lexer_.expect("where"); } else if (queryType == SELECT_QUERY) { parseSelect(query); } else { @@ -68,7 +67,6 @@ void SparqlParser::parseQuery(ParsedQuery* query, QueryType queryType) { AD_FAIL(); } - lexer_.expect("{"); parseWhere(query); parseSolutionModifiers(query); @@ -156,8 +154,6 @@ void SparqlParser::parseQuery(ParsedQuery* query, QueryType queryType) { // _____________________________________________________________________________ void SparqlParser::parseSelect(ParsedQuery* query) { query->_clause = parseWithAntlr(&AntlrParser::selectClause, *query); - lexer_.expect("where"); // Still parsed with old parser. Expects WHERE - // keyword to be consumed. } // _____________________________________________________________________________ @@ -171,192 +167,12 @@ SparqlQleverVisitor::PrefixMap SparqlParser::getPrefixMap( } // _____________________________________________________________________________ -void SparqlParser::parseWhere(ParsedQuery* query, - ParsedQuery::GraphPattern* currentPattern) { - if (currentPattern == nullptr) { - // Make the shared pointer point to the root graphpattern without deleting - // it. - currentPattern = &query->_rootGraphPattern; - query->_rootGraphPattern._id = 0; - } - - // If these are not empty the last subject and / or predicate is reused - std::string lastSubject; - std::string lastPredicate; - while (!lexer_.accept("}")) { - if (lexer_.empty()) { - throw ParseException( - "Expected a closing bracket for WHERE but reached " - "the end of the input."); - } - if (lexer_.accept("optional")) { - currentPattern->_graphPatterns.emplace_back( - GraphPatternOperation::Optional{ParsedQuery::GraphPattern()}); - auto& opt = currentPattern->_graphPatterns.back() - .get(); - auto& child = opt._child; - child._optional = true; - child._id = query->_numGraphPatterns; - query->_numGraphPatterns++; - lexer_.expect("{"); - // Recursively call parseWhere to parse the optional part. - parseWhere(query, &child); - lexer_.accept("."); - } else if (lexer_.peek("bind")) { - GraphPatternOperation::Bind bind = - parseWithAntlr(&AntlrParser::bind, *query); - query->registerVariableVisibleInQueryBody(Variable{bind._target}); - currentPattern->_graphPatterns.emplace_back(std::move(bind)); - // The dot after a BIND is optional. - lexer_.accept("."); - } else if (lexer_.accept("minus")) { - currentPattern->_graphPatterns.emplace_back( - GraphPatternOperation::Minus{ParsedQuery::GraphPattern()}); - auto& opt = currentPattern->_graphPatterns.back() - .get(); - auto& child = opt._child; - child._optional = false; - child._id = query->_numGraphPatterns; - query->_numGraphPatterns++; - lexer_.expect("{"); - // Recursively call parseWhere to parse the subtrahend. - parseWhere(query, &child); - lexer_.accept("."); - } else if (lexer_.accept("{")) { - // Subquery or union - if (lexer_.peek("select")) { - // subquery - // create the subquery operation - GraphPatternOperation::Subquery subq; - subq._subquery._prefixes = query->_prefixes; - subq._subquery.setNumInternalVariables( - query->getNumInternalVariables()); - parseQuery(&subq._subquery, SELECT_QUERY); - query->setNumInternalVariables( - subq._subquery.getNumInternalVariables()); - - // Add the variables from the subquery that are visible to the outside - // (because they were selected, or because of a SELECT *) to the outer - // query. - const auto& selectedVariablesFromSubquery = - subq._subquery.selectClause().getSelectedVariables(); - for (const auto& variable : selectedVariablesFromSubquery) { - query->registerVariableVisibleInQueryBody(variable); - } - - currentPattern->_graphPatterns.emplace_back(std::move(subq)); - // The closing bracket } is consumed by the subquery - lexer_.accept("."); - } else { - // union - // create the union operation - auto un = GraphPatternOperation::Union{ParsedQuery::GraphPattern{}, - ParsedQuery::GraphPattern{}}; - un._child1._optional = false; - un._child2._optional = false; - un._child1._id = query->_numGraphPatterns; - un._child2._id = query->_numGraphPatterns + 1; - query->_numGraphPatterns += 2; - - // parse the left and right bracket - parseWhere(query, &un._child1); - lexer_.expect("union"); - lexer_.expect("{"); - parseWhere(query, &un._child2); - lexer_.accept("."); - currentPattern->_graphPatterns.emplace_back(std::move(un)); - } - } else if (lexer_.peek("filter")) { - // append to the global filters of the pattern. - SparqlFilter filter = parseWithAntlr(&AntlrParser::filterR, *query); - if (filter._type == SparqlFilter::LANG_MATCHES) { - currentPattern->addLanguageFilter(filter._lhs, filter._rhs); - } else { - currentPattern->_filters.push_back(std::move(filter)); - } - // A filter may have an optional dot after it - lexer_.accept("."); - } else if (lexer_.peek("values")) { - auto values = parseWithAntlr(&AntlrParser::inlineData, *query); - for (const auto& variable : values._inlineValues._variables) { - query->registerVariableVisibleInQueryBody(Variable{variable}); - } - currentPattern->_graphPatterns.emplace_back(std::move(values)); - lexer_.accept("."); - } else { - // TODO: Make TripleComponent constructible from these types. - auto iri = [](const Iri& iri) { return TripleComponent{iri.toSparql()}; }; - auto blankNode = [](const BlankNode& blankNode) -> TripleComponent { - return blankNode.toSparql(); - }; - auto literal = [](const Literal& literal) { - // Problem: ql:contains-word causes the " to be stripped. - // TODO: Move stripAndLowercaseKeywordLiteral out to this point or - // rewrite the Turtle Parser s.t. this code can be integrated into the - // visitor. In this case the turtle parser should output the - // corresponding modell class. - try { - return TurtleStringParser::parseTripleObject( - literal.toSparql()); - } catch (const TurtleStringParser::ParseException&) { - return TripleComponent{literal.toSparql()}; - } - }; - auto graphTerm = [&iri, &blankNode, &literal](const GraphTerm& term) { - return term.visit( - ad_utility::OverloadCallOperator{iri, blankNode, literal}); - }; - auto varTriple = [](const Variable& var) { - return TripleComponent{var.name()}; - }; - auto varOrTerm = [&varTriple, &graphTerm](VarOrTerm varOrTerm) { - return varOrTerm.visit( - ad_utility::OverloadCallOperator{varTriple, graphTerm}); - }; - - auto varPath = [](const Variable& var) { - return PropertyPath::fromVariable(var); - }; - auto path = [](const PropertyPath& path) { return path; }; - auto varOrPath = - [&varPath, - &path](const ad_utility::sparql_types::VarOrPath& varOrPath) { - return std::visit(ad_utility::OverloadCallOperator{varPath, path}, - varOrPath); - }; - - auto registerIfVariable = [&query](auto* variant) { - if (Variable* variable = std::get_if(variant)) { - query->registerVariableVisibleInQueryBody(*variable); - } - }; - - vector triples = - parseWithAntlr(&AntlrParser::triplesSameSubjectPath, *query); - auto& v = lastBasicPattern(currentPattern)._triples; - for (auto& triple : triples) { - registerIfVariable(&triple.subject_); - registerIfVariable(&triple.predicate_); - registerIfVariable(&triple.object_); - // TODO SparqlTriple and TripleWithPropertyPath should be merged into - // one type. - SparqlTriple sparqlTriple = {varOrTerm(triple.subject_), - varOrPath(triple.predicate_), - varOrTerm(triple.object_)}; - if (std::find(v.begin(), v.end(), sparqlTriple) != v.end()) { - LOG(INFO) << "Ignoring duplicate triple: " << sparqlTriple._s << ' ' - << sparqlTriple._p << ' ' << sparqlTriple._o << std::endl; - } else { - v.emplace_back(std::move(sparqlTriple)); - } - } - - if (lexer_.accept("}")) { - break; - } else { - lexer_.expect("."); - } - } +void SparqlParser::parseWhere(ParsedQuery* query) { + auto [pattern, visibleVariables] = + parseWithAntlr(&AntlrParser::whereClause, *query); + query->_rootGraphPattern = std::move(pattern); + for (const auto& var : visibleVariables) { + query->registerVariableVisibleInQueryBody(var); } } diff --git a/src/parser/SparqlParser.h b/src/parser/SparqlParser.h index 4a5ee65796..5fe7ddebc5 100644 --- a/src/parser/SparqlParser.h +++ b/src/parser/SparqlParser.h @@ -42,8 +42,7 @@ class SparqlParser { private: void parseQuery(ParsedQuery* query, QueryType queryType); void parseSelect(ParsedQuery* query); - void parseWhere(ParsedQuery* query, - ParsedQuery::GraphPattern* currentPattern = nullptr); + void parseWhere(ParsedQuery* query); void parseSolutionModifiers(ParsedQuery* query); // Returns true if it found a filter std::optional parseFilter(bool failOnNoFilter = true); diff --git a/src/parser/sparqlParser/SparqlQleverVisitor.cpp b/src/parser/sparqlParser/SparqlQleverVisitor.cpp index 8a37a19728..59d91f8c2e 100644 --- a/src/parser/sparqlParser/SparqlQleverVisitor.cpp +++ b/src/parser/sparqlParser/SparqlQleverVisitor.cpp @@ -1,20 +1,24 @@ // Copyright 2021, University of Freiburg, // Chair of Algorithms and Data Structures -// Author: Hannah Bast +// Authors: +// Hannah Bast +// 2022 Julian Mundhahs -#include "SparqlQleverVisitor.h" +#include "parser/sparqlParser/SparqlQleverVisitor.h" #include #include -#include "../SparqlParser.h" +#include "parser/SparqlParser.h" using namespace ad_utility::sparql_types; using ExpressionPtr = sparqlExpression::SparqlExpression::Ptr; using SparqlExpressionPimpl = sparqlExpression::SparqlExpressionPimpl; using SelectClause = ParsedQuery::SelectClause; +using GraphPattern = ParsedQuery::GraphPattern; using Bind = GraphPatternOperation::Bind; using Values = GraphPatternOperation::Values; +using BasicGraphPattern = GraphPatternOperation::BasicGraphPattern; using Visitor = SparqlQleverVisitor; using Parser = SparqlAutomaticParser; @@ -61,6 +65,14 @@ ExpressionPtr Visitor::processIriFunctionCall( throw ParseException{"Function \"" + iri + "\" not supported"}; } +void Visitor::addVisibleVariable(string var) { + addVisibleVariable(Variable{std::move(var)}); +} + +void Visitor::addVisibleVariable(Variable var) { + visibleVariables_.back().emplace_back(std::move(var)); +} + // ___________________________________________________________________________ namespace { string stripAndLowercaseKeywordLiteral(std::string_view lit) { @@ -178,13 +190,19 @@ Variable Visitor::visitTypesafe(Parser::VarContext* ctx) { } // ____________________________________________________________________________________ -Bind Visitor::visitTypesafe(Parser::BindContext* ctx) { - return {{visitTypesafe(ctx->expression())}, ctx->var()->getText()}; +GraphPatternOperation Visitor::visitTypesafe(Parser::BindContext* ctx) { + addVisibleVariable(ctx->var()->getText()); + return GraphPatternOperation{ + Bind{{visitTypesafe(ctx->expression())}, ctx->var()->getText()}}; } // ____________________________________________________________________________________ -Values Visitor::visitTypesafe(Parser::InlineDataContext* ctx) { - return visitTypesafe(ctx->dataBlock()); +GraphPatternOperation Visitor::visitTypesafe(Parser::InlineDataContext* ctx) { + Values values = visitTypesafe(ctx->dataBlock()); + for (const auto& variable : values._inlineValues._variables) { + addVisibleVariable(variable); + } + return GraphPatternOperation{std::move(values)}; } // ____________________________________________________________________________________ @@ -199,21 +217,177 @@ std::optional Visitor::visitTypesafe(Parser::ValuesClauseContext* ctx) { } // ____________________________________________________________________________________ -vector Visitor::visitTypesafe( - Parser::TriplesBlockContext* ctx) { - auto triples = visitTypesafe(ctx->triplesSameSubjectPath()); +GraphPattern Visitor::visitTypesafe(Parser::GroupGraphPatternContext* ctx) { + GraphPattern pattern; + pattern._id = numGraphPatterns_++; + if (ctx->subSelect()) { + auto [subquery, valuesOpt] = visitTypesafe(ctx->subSelect()); + pattern._graphPatterns.emplace_back(std::move(subquery)); + if (valuesOpt.has_value()) { + pattern._graphPatterns.emplace_back(std::move(valuesOpt.value())); + } + return pattern; + } else if (ctx->groupGraphPatternSub()) { + auto [subOps, filters] = visitTypesafe(ctx->groupGraphPatternSub()); + pattern._graphPatterns = std::move(subOps); + for (auto& filter : filters) { + if (filter._type == SparqlFilter::LANG_MATCHES) { + pattern.addLanguageFilter(filter._lhs, filter._rhs); + } else { + pattern._filters.push_back(std::move(filter)); + } + } + return pattern; + } else { + AD_FAIL(); // Unreachable + } +} + +Visitor::OperationsAndFilters Visitor::visitTypesafe( + Parser::GroupGraphPatternSubContext* ctx) { + vector ops; + vector filters; + + auto filter = [&filters](SparqlFilter filter) { + filters.emplace_back(std::move(filter)); + }; + auto op = [&ops](GraphPatternOperation op) { + ops.emplace_back(std::move(op)); + }; + + if (ctx->triplesBlock()) { + ops.emplace_back(visitTypesafe(ctx->triplesBlock())); + } + // TODO make visitVector deduce its return type automatically + auto others = visitVector( + ctx->graphPatternNotTriplesAndMaybeTriples()); + for (auto& [graphPattern, triples] : others) { + std::visit(ad_utility::OverloadCallOperator{filter, op}, + std::move(graphPattern)); + + // TODO: use `optional.transform` for this pattern. + if (!triples.has_value()) { + continue; + } + if (ops.empty() || !ops.back().is()) { + ops.emplace_back(BasicGraphPattern{}); + } + ops.back().get().appendTriples( + std::move(triples.value())); + } + return {std::move(ops), std::move(filters)}; +} + +Visitor::OperationOrFilterAndMaybeTriples Visitor::visitTypesafe( + Parser::GraphPatternNotTriplesAndMaybeTriplesContext* ctx) { + return {visitTypesafe(ctx->graphPatternNotTriples()), + visitOptional(ctx->triplesBlock())}; +} + +// ____________________________________________________________________________________ +BasicGraphPattern Visitor::visitTypesafe(Parser::TriplesBlockContext* ctx) { + auto iri = [](const Iri& iri) -> TripleComponent { return iri.toSparql(); }; + auto blankNode = [](const BlankNode& blankNode) -> TripleComponent { + return blankNode.toSparql(); + }; + auto literal = [](const Literal& literal) { + // Problem: ql:contains-word causes the " to be stripped. + // TODO: Move stripAndLowercaseKeywordLiteral out to this point or + // rewrite the Turtle Parser s.t. this code can be integrated into the + // visitor. In this case the turtle parser should output the + // corresponding modell class. + try { + return TurtleStringParser::parseTripleObject( + literal.toSparql()); + } catch (const TurtleStringParser::ParseException&) { + return TripleComponent{literal.toSparql()}; + } + }; + auto graphTerm = [&iri, &blankNode, &literal](const GraphTerm& term) { + return term.visit( + ad_utility::OverloadCallOperator{iri, blankNode, literal}); + }; + auto varTriple = [](const Variable& var) { + return TripleComponent{var.name()}; + }; + auto varOrTerm = [&varTriple, &graphTerm](VarOrTerm varOrTerm) { + return varOrTerm.visit( + ad_utility::OverloadCallOperator{varTriple, graphTerm}); + }; + + auto varPath = [](const Variable& var) { + return PropertyPath::fromVariable(var); + }; + auto path = [](const PropertyPath& path) { return path; }; + auto varOrPath = [&varPath, + &path](ad_utility::sparql_types::VarOrPath varOrPath) { + return std::visit(ad_utility::OverloadCallOperator{varPath, path}, + std::move(varOrPath)); + }; + + auto registerIfVariable = [this](const auto& variant) { + if (holds_alternative(variant)) { + addVisibleVariable(std::get(variant)); + } + }; + + auto convertAndRegisterTriple = + [&varOrTerm, &varOrPath, + ®isterIfVariable](TripleWithPropertyPath&& triple) -> SparqlTriple { + registerIfVariable(triple.subject_); + registerIfVariable(triple.predicate_); + registerIfVariable(triple.object_); + + return {varOrTerm(std::move(triple.subject_)), + varOrPath(std::move(triple.predicate_)), + varOrTerm(std::move(triple.object_))}; + }; + + BasicGraphPattern triples = {ad_utility::transform( + visitTypesafe(ctx->triplesSameSubjectPath()), convertAndRegisterTriple)}; if (ctx->triplesBlock()) { - appendVector(triples, visitTypesafe(ctx->triplesBlock())); + triples.appendTriples(visitTypesafe(ctx->triplesBlock())); } return triples; } +// ____________________________________________________________________________________ +Visitor::OperationOrFilter Visitor::visitTypesafe( + Parser::GraphPatternNotTriplesContext* ctx) { + if (ctx->graphGraphPattern() || ctx->serviceGraphPattern()) { + reportError(ctx, + "GraphGraphPattern or ServiceGraphPattern are not supported."); + } else { + return visitAlternative>( + ctx->filterR(), ctx->optionalGraphPattern(), ctx->minusGraphPattern(), + ctx->bind(), ctx->inlineData(), ctx->groupOrUnionGraphPattern()); + } +} + +// ____________________________________________________________________________________ +GraphPatternOperation Visitor::visitTypesafe( + Parser::OptionalGraphPatternContext* ctx) { + auto pattern = visitTypesafe(ctx->groupGraphPattern()); + return GraphPatternOperation{ + GraphPatternOperation::Optional{std::move(pattern)}}; +} + // ____________________________________________________________________________________ sparqlExpression::SparqlExpression::Ptr Visitor::visitTypesafe( Parser::ExpressionContext* ctx) { return visitTypesafe(ctx->conditionalOrExpression()); } +// ____________________________________________________________________________________ +Visitor::PatternAndVisibleVariables Visitor::visitTypesafe( + Parser::WhereClauseContext* ctx) { + visibleVariables_.emplace_back(); + auto pattern = visitTypesafe(ctx->groupGraphPattern()); + auto visible = std::move(visibleVariables_.back()); + visibleVariables_.pop_back(); + return {std::move(pattern), std::move(visible)}; +} + // ____________________________________________________________________________________ SolutionModifiers Visitor::visitTypesafe(Parser::SolutionModifierContext* ctx) { SolutionModifiers modifiers; @@ -381,6 +555,28 @@ ParsedQuery Visitor::visitTypesafe(Parser::SelectQueryContext* ctx) { reportError(ctx, "SelectQuery is not yet supported."); } +// ____________________________________________________________________________________ +Visitor::SubQueryAndMaybeValues Visitor::visitTypesafe( + Parser::SubSelectContext* ctx) { + ParsedQuery query; + query._clause = visitTypesafe(ctx->selectClause()); + auto [pattern, visibleVariables] = visitTypesafe(ctx->whereClause()); + query._rootGraphPattern = std::move(pattern); + query.setNumInternalVariables(numInternalVariables_); + query.addSolutionModifiers(visitTypesafe(ctx->solutionModifier())); + numInternalVariables_ = query.getNumInternalVariables(); + auto values = visitTypesafe(ctx->valuesClause()); + for (const auto& variable : visibleVariables) { + query.registerVariableVisibleInQueryBody(variable); + } + // Variables that are selected in this query are visible in the parent query. + for (const auto& variable : query.selectClause().getSelectedVariables()) { + addVisibleVariable(variable); + } + query._numGraphPatterns = numGraphPatterns_++; + return {{std::move(query)}, std::move(values)}; +} + // ____________________________________________________________________________________ GroupKey Visitor::visitTypesafe(Parser::GroupConditionContext* ctx) { // TODO Deploy an abstraction `visitExpressionPimpl(someContext*)` that @@ -521,6 +717,44 @@ std::string Visitor::visitTypesafe(Parser::DataBlockValueContext* ctx) { AD_FAIL() // Should be unreachable. } +// ____________________________________________________________________________________ +GraphPatternOperation Visitor::visitTypesafe( + Parser::MinusGraphPatternContext* ctx) { + return GraphPatternOperation{ + GraphPatternOperation::Minus{visitTypesafe(ctx->groupGraphPattern())}}; +} + +// ____________________________________________________________________________________ +namespace { +GraphPattern wrap(GraphPatternOperation op) { + auto pattern = GraphPattern(); + pattern._graphPatterns.emplace_back(std::move(op)); + return pattern; +} +} // namespace + +// ____________________________________________________________________________________ +GraphPatternOperation Visitor::visitTypesafe( + Parser::GroupOrUnionGraphPatternContext* ctx) { + auto children = visitVector(ctx->groupGraphPattern()); + if (children.size() > 1) { + // https://en.cppreference.com/w/cpp/algorithm/accumulate + // a similar thing is done in QueryPlaner::uniteGraphPatterns + auto foldOp = [](GraphPatternOperation op1, GraphPattern op2) { + return GraphPatternOperation{ + GraphPatternOperation::Union{wrap(std::move(op1)), std::move(op2)}}; + }; + // TODO QLever should support Nary UNIONs directly. + return std::accumulate(std::next(children.begin(), 2), children.end(), + GraphPatternOperation{GraphPatternOperation::Union{ + std::move(children[0]), std::move(children[1])}}, + foldOp); + } else { + return GraphPatternOperation{ + GraphPatternOperation::GroupGraphPattern{std::move(children[0])}}; + } +} + // ____________________________________________________________________________________ SparqlFilter Visitor::visitTypesafe(Parser::FilterRContext* ctx) { return parseFilter(ctx->constraint()); @@ -561,7 +795,7 @@ Triples Visitor::visitTypesafe(Parser::ConstructTriplesContext* ctx) { auto result = visitTypesafe(ctx->triplesSameSubject()); if (ctx->constructTriples()) { auto newTriples = visitTypesafe(ctx->constructTriples()); - appendVector(result, std::move(newTriples)); + ad_utility::appendVector(result, std::move(newTriples)); } return result; } @@ -576,17 +810,17 @@ Triples Visitor::visitTypesafe(Parser::TriplesSameSubjectContext* ctx) { for (auto& tuple : propertyList.first) { triples.push_back({subject, std::move(tuple[0]), std::move(tuple[1])}); } - appendVector(triples, std::move(propertyList.second)); + ad_utility::appendVector(triples, std::move(propertyList.second)); } else if (ctx->triplesNode()) { auto tripleNodes = visitTriplesNode(ctx->triplesNode()).as(); - appendVector(triples, std::move(tripleNodes.second)); + ad_utility::appendVector(triples, std::move(tripleNodes.second)); AD_CHECK(ctx->propertyList()); auto propertyList = visitTypesafe(ctx->propertyList()); for (auto& tuple : propertyList.first) { triples.push_back( {tripleNodes.first, std::move(tuple[0]), std::move(tuple[1])}); } - appendVector(triples, std::move(propertyList.second)); + ad_utility::appendVector(triples, std::move(propertyList.second)); } else { // Invalid grammar AD_FAIL(); @@ -614,7 +848,7 @@ PropertyList Visitor::visitTypesafe(Parser::PropertyListNotEmptyContext* ctx) { for (auto& object : objectList.first) { triplesWithoutSubject.push_back({verb, std::move(object)}); } - appendVector(additionalTriples, std::move(objectList.second)); + ad_utility::appendVector(additionalTriples, std::move(objectList.second)); } return {std::move(triplesWithoutSubject), std::move(additionalTriples)}; } @@ -640,7 +874,7 @@ ObjectList Visitor::visitTypesafe(Parser::ObjectListContext* ctx) { auto objectContexts = ctx->objectR(); for (auto& objectContext : objectContexts) { auto graphNode = visitTypesafe(objectContext); - appendVector(additionalTriples, std::move(graphNode.second)); + ad_utility::appendVector(additionalTriples, std::move(graphNode.second)); objects.push_back(std::move(graphNode.first)); } return {std::move(objects), std::move(additionalTriples)}; @@ -838,7 +1072,7 @@ Node Visitor::visitTypesafe(Parser::BlankNodePropertyListContext* ctx) { for (auto& tuple : propertyList.first) { triples.push_back({var, std::move(tuple[0]), std::move(tuple[1])}); } - appendVector(triples, std::move(propertyList.second)); + ad_utility::appendVector(triples, std::move(propertyList.second)); return {std::move(var), std::move(triples)}; } @@ -864,7 +1098,7 @@ Node Visitor::visitTypesafe(Parser::CollectionContext* ctx) { std::move(nextElement)}); nextElement = std::move(currentVar); - appendVector(triples, std::move(graphNode.second)); + ad_utility::appendVector(triples, std::move(graphNode.second)); } return {std::move(nextElement), std::move(triples)}; } diff --git a/src/parser/sparqlParser/SparqlQleverVisitor.h b/src/parser/sparqlParser/SparqlQleverVisitor.h index 09b283499a..acdc0a529d 100644 --- a/src/parser/sparqlParser/SparqlQleverVisitor.h +++ b/src/parser/sparqlParser/SparqlQleverVisitor.h @@ -3,27 +3,27 @@ #pragma once -#include "../../engine/sparqlExpressions/AggregateExpression.h" -#include "../../engine/sparqlExpressions/GroupConcatExpression.h" -#include "../../engine/sparqlExpressions/LiteralExpression.h" -#include "../../engine/sparqlExpressions/NaryExpression.h" -#include "../../engine/sparqlExpressions/SparqlExpressionPimpl.h" -// #include "../../engine/sparqlExpressions/RelationalExpression.h" -#include "../../engine/sparqlExpressions/SampleExpression.h" -#include "../../util/HashMap.h" -#include "../../util/OverloadCallOperator.h" -#include "../../util/StringUtils.h" -#include "../../util/antlr/ANTLRErrorHandling.h" -#include "../Alias.h" -#include "../ParsedQuery.h" -#include "../RdfEscaping.h" -#include "../data/BlankNode.h" -#include "../data/Iri.h" -#include "../data/SolutionModifiers.h" -#include "../data/Types.h" -#include "../data/VarOrTerm.h" -#include "antlr4-runtime.h" -#include "generated/SparqlAutomaticVisitor.h" +#include + +#include "engine/sparqlExpressions/AggregateExpression.h" +#include "engine/sparqlExpressions/GroupConcatExpression.h" +#include "engine/sparqlExpressions/LiteralExpression.h" +#include "engine/sparqlExpressions/NaryExpression.h" +#include "engine/sparqlExpressions/SampleExpression.h" +#include "engine/sparqlExpressions/SparqlExpressionPimpl.h" +#include "parser/Alias.h" +#include "parser/ParsedQuery.h" +#include "parser/RdfEscaping.h" +#include "parser/data/BlankNode.h" +#include "parser/data/Iri.h" +#include "parser/data/SolutionModifiers.h" +#include "parser/data/Types.h" +#include "parser/data/VarOrTerm.h" +#include "parser/sparqlParser/generated/SparqlAutomaticVisitor.h" +#include "util/HashMap.h" +#include "util/OverloadCallOperator.h" +#include "util/StringUtils.h" +#include "util/antlr/ANTLRErrorHandling.h" template class Reversed { @@ -54,7 +54,24 @@ class SparqlQleverVisitor : public SparqlAutomaticVisitor { using ObjectList = ad_utility::sparql_types::ObjectList; using PropertyList = ad_utility::sparql_types::PropertyList; using Any = antlrcpp::Any; + using OperationsAndFilters = + std::pair, vector>; + using OperationOrFilterAndMaybeTriples = + std::pair, + std::optional>; + using OperationOrFilter = std::variant; + using SubQueryAndMaybeValues = + std::pair>; + using PatternAndVisibleVariables = + std::pair>; size_t _blankNodeCounter = 0; + int64_t numInternalVariables_ = 0; + int64_t numGraphPatterns_ = 0; + // A Stack of vector that store the variables that are visible in a + // query body. Each element corresponds to nested Queries that the parse is + // currently parsing. + std::vector> visibleVariables_{{}}; public: using PrefixMap = ad_utility::HashMap; @@ -83,13 +100,6 @@ class SparqlQleverVisitor : public SparqlAutomaticVisitor { private: PrefixMap _prefixMap{}; - template - void appendVector(std::vector& destination, std::vector&& source) { - destination.insert(destination.end(), - std::make_move_iterator(source.begin()), - std::make_move_iterator(source.end())); - } - BlankNode newBlankNode() { std::string label = std::to_string(_blankNodeCounter); _blankNodeCounter++; @@ -102,6 +112,11 @@ class SparqlQleverVisitor : public SparqlAutomaticVisitor { ExpressionPtr processIriFunctionCall(const std::string& iri, std::vector argList); + // TODO: Remove addVisibleVariable(const string&) when all Types use the + // strong type `Variable`. + void addVisibleVariable(string var); + void addVisibleVariable(Variable var); + public: // ___________________________________________________________________________ Any visitQuery(Parser::QueryContext* ctx) override { @@ -139,9 +154,11 @@ class SparqlQleverVisitor : public SparqlAutomaticVisitor { [[noreturn]] ParsedQuery visitTypesafe(Parser::SelectQueryContext* ctx); Any visitSubSelect(Parser::SubSelectContext* ctx) override { - return visitChildren(ctx); + return visitTypesafe(ctx); } + SubQueryAndMaybeValues visitTypesafe(Parser::SubSelectContext* ctx); + Any visitSelectClause(Parser::SelectClauseContext* ctx) override { return visitTypesafe(ctx); } @@ -201,9 +218,11 @@ class SparqlQleverVisitor : public SparqlAutomaticVisitor { } Any visitWhereClause(Parser::WhereClauseContext* ctx) override { - return visitChildren(ctx); + return visitTypesafe(ctx); } + PatternAndVisibleVariables visitTypesafe(Parser::WhereClauseContext* ctx); + Any visitSolutionModifier(Parser::SolutionModifierContext* ctx) override { return visitTypesafe(ctx); } @@ -282,31 +301,50 @@ class SparqlQleverVisitor : public SparqlAutomaticVisitor { } Any visitGroupGraphPattern(Parser::GroupGraphPatternContext* ctx) override { - return visitChildren(ctx); + return visitTypesafe(ctx); } + ParsedQuery::GraphPattern visitTypesafe( + Parser::GroupGraphPatternContext* ctx); + Any visitGroupGraphPatternSub( Parser::GroupGraphPatternSubContext* ctx) override { - return visitChildren(ctx); + return visitTypesafe(ctx); } + OperationsAndFilters visitTypesafe(Parser::GroupGraphPatternSubContext* ctx); + + Any visitGraphPatternNotTriplesAndMaybeTriples( + Parser::GraphPatternNotTriplesAndMaybeTriplesContext* ctx) override { + return visitTypesafe(ctx); + } + + OperationOrFilterAndMaybeTriples visitTypesafe( + Parser::GraphPatternNotTriplesAndMaybeTriplesContext* ctx); + Any visitTriplesBlock(Parser::TriplesBlockContext* ctx) override { return visitTypesafe(ctx); } - vector visitTypesafe( + GraphPatternOperation::BasicGraphPattern visitTypesafe( Parser::TriplesBlockContext* ctx); Any visitGraphPatternNotTriples( Parser::GraphPatternNotTriplesContext* ctx) override { - return visitChildren(ctx); + return visitTypesafe(ctx); } + // Filter clauses are no independent graph patterns themselves, but their + // scope is always the complete graph pattern enclosing them. + OperationOrFilter visitTypesafe(Parser::GraphPatternNotTriplesContext* ctx); + Any visitOptionalGraphPattern( Parser::OptionalGraphPatternContext* ctx) override { - return visitChildren(ctx); + return visitTypesafe(ctx); } + GraphPatternOperation visitTypesafe(Parser::OptionalGraphPatternContext* ctx); + Any visitGraphGraphPattern(Parser::GraphGraphPatternContext* ctx) override { return visitChildren(ctx); } @@ -320,13 +358,13 @@ class SparqlQleverVisitor : public SparqlAutomaticVisitor { return visitTypesafe(ctx); } - GraphPatternOperation::Bind visitTypesafe(Parser::BindContext* ctx); + GraphPatternOperation visitTypesafe(Parser::BindContext* ctx); Any visitInlineData(Parser::InlineDataContext* ctx) override { return visitTypesafe(ctx); } - GraphPatternOperation::Values visitTypesafe(Parser::InlineDataContext* ctx); + GraphPatternOperation visitTypesafe(Parser::InlineDataContext* ctx); Any visitDataBlock(Parser::DataBlockContext* ctx) override { return visitTypesafe(ctx); @@ -362,11 +400,16 @@ class SparqlQleverVisitor : public SparqlAutomaticVisitor { return visitChildren(ctx); } + GraphPatternOperation visitTypesafe(Parser::MinusGraphPatternContext* ctx); + Any visitGroupOrUnionGraphPattern( Parser::GroupOrUnionGraphPatternContext* ctx) override { return visitChildren(ctx); } + GraphPatternOperation visitTypesafe( + Parser::GroupOrUnionGraphPatternContext* ctx); + Any visitFilterR(Parser::FilterRContext* ctx) override { return visitTypesafe(ctx); } diff --git a/src/parser/sparqlParser/generated/SparqlAutomatic.g4 b/src/parser/sparqlParser/generated/SparqlAutomatic.g4 index 3364c12f35..3fc41e17e7 100644 --- a/src/parser/sparqlParser/generated/SparqlAutomatic.g4 +++ b/src/parser/sparqlParser/generated/SparqlAutomatic.g4 @@ -151,18 +151,25 @@ valuesClause : ( VALUES dataBlock )?; triplesTemplate: triplesSameSubject ( '.' triplesTemplate? )?; +// Corresponds to GraphPattern. groupGraphPattern : '{' ( subSelect | groupGraphPatternSub )'}' ; groupGraphPatternSub - : triplesBlock? ( graphPatternNotTriples '.'? triplesBlock? )* + : triplesBlock? graphPatternNotTriplesAndMaybeTriples* + ; + +/* Helper rules to make parsing of groupGraphPatternSub easier. */ +graphPatternNotTriplesAndMaybeTriples + : graphPatternNotTriples '.'? triplesBlock? ; triplesBlock : triplesSameSubjectPath ( '.' triplesBlock? )? ; +// Corresponds to GraphPatternOperation. graphPatternNotTriples : groupOrUnionGraphPattern | optionalGraphPattern | minusGraphPattern | graphGraphPattern | serviceGraphPattern | filterR | bind | inlineData ; diff --git a/src/parser/sparqlParser/generated/SparqlAutomatic.interp b/src/parser/sparqlParser/generated/SparqlAutomatic.interp index d48e8aaebc..e9d1012fd5 100644 --- a/src/parser/sparqlParser/generated/SparqlAutomatic.interp +++ b/src/parser/sparqlParser/generated/SparqlAutomatic.interp @@ -384,6 +384,7 @@ valuesClause triplesTemplate groupGraphPattern groupGraphPatternSub +graphPatternNotTriplesAndMaybeTriples triplesBlock graphPatternNotTriples optionalGraphPattern @@ -479,4 +480,4 @@ pnameNs atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 175, 1407, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 258, 10, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 7, 3, 265, 10, 3, 12, 3, 14, 3, 268, 11, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 7, 6, 279, 10, 6, 12, 6, 14, 6, 282, 11, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 294, 10, 8, 3, 8, 6, 8, 297, 10, 8, 13, 8, 14, 8, 298, 3, 8, 5, 8, 302, 10, 8, 3, 9, 3, 9, 5, 9, 306, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 7, 12, 319, 10, 12, 12, 12, 14, 12, 322, 11, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 328, 10, 12, 12, 12, 14, 12, 331, 11, 12, 3, 12, 3, 12, 3, 12, 5, 12, 336, 10, 12, 3, 12, 3, 12, 5, 12, 340, 10, 12, 3, 13, 3, 13, 6, 13, 344, 10, 13, 13, 13, 14, 13, 345, 3, 13, 5, 13, 349, 10, 13, 3, 13, 7, 13, 352, 10, 13, 12, 13, 14, 13, 355, 11, 13, 3, 13, 5, 13, 358, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 7, 14, 364, 10, 14, 12, 14, 14, 14, 367, 11, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 5, 15, 375, 10, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 5, 19, 385, 10, 19, 3, 19, 3, 19, 3, 20, 5, 20, 390, 10, 20, 3, 20, 5, 20, 393, 10, 20, 3, 20, 5, 20, 396, 10, 20, 3, 20, 5, 20, 399, 10, 20, 3, 21, 3, 21, 6, 21, 403, 10, 21, 13, 21, 14, 21, 404, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 413, 10, 22, 3, 22, 3, 22, 3, 22, 5, 22, 418, 10, 22, 3, 23, 3, 23, 6, 23, 422, 10, 23, 13, 23, 14, 23, 423, 3, 24, 3, 24, 3, 25, 3, 25, 6, 25, 430, 10, 25, 13, 25, 14, 25, 431, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 438, 10, 26, 5, 26, 440, 10, 26, 3, 27, 3, 27, 5, 27, 444, 10, 27, 3, 27, 5, 27, 447, 10, 27, 3, 27, 3, 27, 5, 27, 451, 10, 27, 3, 27, 5, 27, 454, 10, 27, 3, 27, 3, 27, 5, 27, 458, 10, 27, 3, 27, 5, 27, 461, 10, 27, 3, 27, 3, 27, 5, 27, 465, 10, 27, 3, 27, 5, 27, 468, 10, 27, 3, 27, 3, 27, 5, 27, 472, 10, 27, 3, 27, 5, 27, 475, 10, 27, 3, 27, 3, 27, 5, 27, 479, 10, 27, 3, 27, 5, 27, 482, 10, 27, 5, 27, 484, 10, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 5, 31, 497, 10, 31, 3, 32, 3, 32, 3, 32, 5, 32, 502, 10, 32, 5, 32, 504, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 509, 10, 33, 3, 33, 3, 33, 3, 34, 5, 34, 514, 10, 34, 3, 34, 3, 34, 5, 34, 518, 10, 34, 3, 34, 5, 34, 521, 10, 34, 7, 34, 523, 10, 34, 12, 34, 14, 34, 526, 11, 34, 3, 35, 3, 35, 3, 35, 5, 35, 531, 10, 35, 5, 35, 533, 10, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 5, 36, 543, 10, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 5, 39, 554, 10, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 5, 42, 571, 10, 42, 3, 43, 3, 43, 3, 43, 7, 43, 576, 10, 43, 12, 43, 14, 43, 579, 11, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 7, 44, 586, 10, 44, 12, 44, 14, 44, 589, 11, 44, 3, 44, 5, 44, 592, 10, 44, 3, 44, 3, 44, 7, 44, 596, 10, 44, 12, 44, 14, 44, 599, 11, 44, 3, 44, 3, 44, 3, 45, 3, 45, 7, 45, 605, 10, 45, 12, 45, 14, 45, 608, 11, 45, 3, 45, 3, 45, 5, 45, 612, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 619, 10, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 7, 48, 627, 10, 48, 12, 48, 14, 48, 630, 11, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 5, 50, 638, 10, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 5, 52, 646, 10, 52, 3, 52, 3, 52, 3, 52, 7, 52, 651, 10, 52, 12, 52, 14, 52, 654, 11, 52, 3, 52, 3, 52, 5, 52, 658, 10, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 7, 53, 665, 10, 53, 12, 53, 14, 53, 668, 11, 53, 3, 53, 3, 53, 5, 53, 672, 10, 53, 3, 54, 3, 54, 5, 54, 676, 10, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 5, 55, 683, 10, 55, 5, 55, 685, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 693, 10, 56, 3, 57, 5, 57, 696, 10, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 704, 10, 58, 7, 58, 706, 10, 58, 12, 58, 14, 58, 709, 11, 58, 3, 59, 3, 59, 5, 59, 713, 10, 59, 3, 60, 3, 60, 3, 60, 7, 60, 718, 10, 60, 12, 60, 14, 60, 721, 11, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 731, 10, 62, 3, 63, 5, 63, 734, 10, 63, 3, 64, 3, 64, 3, 64, 5, 64, 739, 10, 64, 7, 64, 741, 10, 64, 12, 64, 14, 64, 744, 11, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 5, 69, 758, 10, 69, 3, 70, 3, 70, 3, 70, 7, 70, 763, 10, 70, 12, 70, 14, 70, 766, 11, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 7, 73, 775, 10, 73, 12, 73, 14, 73, 778, 11, 73, 3, 74, 3, 74, 3, 74, 7, 74, 783, 10, 74, 12, 74, 14, 74, 786, 11, 74, 3, 75, 3, 75, 5, 75, 790, 10, 75, 3, 76, 3, 76, 3, 76, 5, 76, 795, 10, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 5, 78, 807, 10, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 814, 10, 79, 12, 79, 14, 79, 817, 11, 79, 5, 79, 819, 10, 79, 3, 79, 5, 79, 822, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 829, 10, 80, 5, 80, 831, 10, 80, 3, 81, 3, 81, 3, 82, 3, 82, 5, 82, 837, 10, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 5, 84, 845, 10, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 6, 86, 853, 10, 86, 13, 86, 14, 86, 854, 3, 86, 3, 86, 3, 87, 3, 87, 6, 87, 861, 10, 87, 13, 87, 14, 87, 862, 3, 87, 3, 87, 3, 88, 3, 88, 5, 88, 869, 10, 88, 3, 89, 3, 89, 5, 89, 873, 10, 89, 3, 90, 3, 90, 5, 90, 877, 10, 90, 3, 91, 3, 91, 5, 91, 881, 10, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 5, 93, 891, 10, 93, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 7, 95, 898, 10, 95, 12, 95, 14, 95, 901, 11, 95, 3, 96, 3, 96, 3, 96, 7, 96, 906, 10, 96, 12, 96, 14, 96, 909, 11, 96, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 931, 10, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 7, 100, 941, 10, 100, 12, 100, 14, 100, 944, 11, 100, 3, 101, 3, 101, 5, 101, 948, 10, 101, 3, 101, 3, 101, 3, 101, 3, 101, 7, 101, 954, 10, 101, 12, 101, 14, 101, 957, 11, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 7, 102, 964, 10, 102, 12, 102, 14, 102, 967, 11, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 976, 10, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 985, 10, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 5, 106, 1035, 10, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 5, 106, 1253, 10, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 5, 107, 1262, 10, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 5, 108, 1273, 10, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 1286, 10, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 5, 112, 1300, 10, 112, 3, 112, 3, 112, 5, 112, 1304, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 1310, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 1318, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 1326, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 1334, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 1342, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 1350, 10, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 1357, 10, 112, 3, 112, 3, 112, 5, 112, 1361, 10, 112, 3, 113, 3, 113, 5, 113, 1365, 10, 113, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 1371, 10, 114, 3, 115, 3, 115, 3, 115, 5, 115, 1376, 10, 115, 3, 116, 3, 116, 3, 117, 3, 117, 3, 118, 3, 118, 3, 119, 3, 119, 3, 120, 3, 120, 3, 121, 5, 121, 1389, 10, 121, 3, 121, 3, 121, 5, 121, 1393, 10, 121, 3, 122, 3, 122, 5, 122, 1397, 10, 122, 3, 123, 3, 123, 3, 124, 3, 124, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 2, 2, 127, 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, 2, 12, 3, 2, 36, 37, 3, 2, 49, 50, 4, 2, 3, 3, 15, 16, 3, 2, 145, 146, 3, 2, 149, 151, 3, 2, 152, 154, 3, 2, 155, 157, 3, 2, 31, 32, 3, 2, 159, 162, 4, 2, 144, 144, 165, 165, 2, 1518, 2, 252, 3, 2, 2, 2, 4, 266, 3, 2, 2, 2, 6, 269, 3, 2, 2, 2, 8, 272, 3, 2, 2, 2, 10, 276, 3, 2, 2, 2, 12, 286, 3, 2, 2, 2, 14, 291, 3, 2, 2, 2, 16, 305, 3, 2, 2, 2, 18, 307, 3, 2, 2, 2, 20, 311, 3, 2, 2, 2, 22, 315, 3, 2, 2, 2, 24, 341, 3, 2, 2, 2, 26, 361, 3, 2, 2, 2, 28, 371, 3, 2, 2, 2, 30, 376, 3, 2, 2, 2, 32, 378, 3, 2, 2, 2, 34, 381, 3, 2, 2, 2, 36, 384, 3, 2, 2, 2, 38, 389, 3, 2, 2, 2, 40, 400, 3, 2, 2, 2, 42, 417, 3, 2, 2, 2, 44, 419, 3, 2, 2, 2, 46, 425, 3, 2, 2, 2, 48, 427, 3, 2, 2, 2, 50, 439, 3, 2, 2, 2, 52, 483, 3, 2, 2, 2, 54, 485, 3, 2, 2, 2, 56, 488, 3, 2, 2, 2, 58, 491, 3, 2, 2, 2, 60, 496, 3, 2, 2, 2, 62, 498, 3, 2, 2, 2, 64, 505, 3, 2, 2, 2, 66, 513, 3, 2, 2, 2, 68, 527, 3, 2, 2, 2, 70, 542, 3, 2, 2, 2, 72, 544, 3, 2, 2, 2, 74, 547, 3, 2, 2, 2, 76, 551, 3, 2, 2, 2, 78, 558, 3, 2, 2, 2, 80, 565, 3, 2, 2, 2, 82, 570, 3, 2, 2, 2, 84, 572, 3, 2, 2, 2, 86, 591, 3, 2, 2, 2, 88, 611, 3, 2, 2, 2, 90, 618, 3, 2, 2, 2, 92, 620, 3, 2, 2, 2, 94, 623, 3, 2, 2, 2, 96, 631, 3, 2, 2, 2, 98, 637, 3, 2, 2, 2, 100, 639, 3, 2, 2, 2, 102, 657, 3, 2, 2, 2, 104, 671, 3, 2, 2, 2, 106, 673, 3, 2, 2, 2, 108, 679, 3, 2, 2, 2, 110, 692, 3, 2, 2, 2, 112, 695, 3, 2, 2, 2, 114, 697, 3, 2, 2, 2, 116, 712, 3, 2, 2, 2, 118, 714, 3, 2, 2, 2, 120, 722, 3, 2, 2, 2, 122, 730, 3, 2, 2, 2, 124, 733, 3, 2, 2, 2, 126, 735, 3, 2, 2, 2, 128, 745, 3, 2, 2, 2, 130, 747, 3, 2, 2, 2, 132, 749, 3, 2, 2, 2, 134, 752, 3, 2, 2, 2, 136, 757, 3, 2, 2, 2, 138, 759, 3, 2, 2, 2, 140, 767, 3, 2, 2, 2, 142, 769, 3, 2, 2, 2, 144, 771, 3, 2, 2, 2, 146, 779, 3, 2, 2, 2, 148, 787, 3, 2, 2, 2, 150, 794, 3, 2, 2, 2, 152, 796, 3, 2, 2, 2, 154, 806, 3, 2, 2, 2, 156, 821, 3, 2, 2, 2, 158, 830, 3, 2, 2, 2, 160, 832, 3, 2, 2, 2, 162, 836, 3, 2, 2, 2, 164, 838, 3, 2, 2, 2, 166, 844, 3, 2, 2, 2, 168, 846, 3, 2, 2, 2, 170, 850, 3, 2, 2, 2, 172, 858, 3, 2, 2, 2, 174, 868, 3, 2, 2, 2, 176, 872, 3, 2, 2, 2, 178, 876, 3, 2, 2, 2, 180, 880, 3, 2, 2, 2, 182, 882, 3, 2, 2, 2, 184, 890, 3, 2, 2, 2, 186, 892, 3, 2, 2, 2, 188, 894, 3, 2, 2, 2, 190, 902, 3, 2, 2, 2, 192, 910, 3, 2, 2, 2, 194, 912, 3, 2, 2, 2, 196, 932, 3, 2, 2, 2, 198, 934, 3, 2, 2, 2, 200, 947, 3, 2, 2, 2, 202, 958, 3, 2, 2, 2, 204, 975, 3, 2, 2, 2, 206, 984, 3, 2, 2, 2, 208, 986, 3, 2, 2, 2, 210, 1252, 3, 2, 2, 2, 212, 1254, 3, 2, 2, 2, 214, 1265, 3, 2, 2, 2, 216, 1276, 3, 2, 2, 2, 218, 1289, 3, 2, 2, 2, 220, 1292, 3, 2, 2, 2, 222, 1360, 3, 2, 2, 2, 224, 1362, 3, 2, 2, 2, 226, 1366, 3, 2, 2, 2, 228, 1375, 3, 2, 2, 2, 230, 1377, 3, 2, 2, 2, 232, 1379, 3, 2, 2, 2, 234, 1381, 3, 2, 2, 2, 236, 1383, 3, 2, 2, 2, 238, 1385, 3, 2, 2, 2, 240, 1388, 3, 2, 2, 2, 242, 1396, 3, 2, 2, 2, 244, 1398, 3, 2, 2, 2, 246, 1400, 3, 2, 2, 2, 248, 1402, 3, 2, 2, 2, 250, 1404, 3, 2, 2, 2, 252, 257, 5, 4, 3, 2, 253, 258, 5, 10, 6, 2, 254, 258, 5, 22, 12, 2, 255, 258, 5, 24, 13, 2, 256, 258, 5, 26, 14, 2, 257, 253, 3, 2, 2, 2, 257, 254, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 257, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 260, 5, 60, 31, 2, 260, 261, 7, 2, 2, 3, 261, 3, 3, 2, 2, 2, 262, 265, 5, 6, 4, 2, 263, 265, 5, 8, 5, 2, 264, 262, 3, 2, 2, 2, 264, 263, 3, 2, 2, 2, 265, 268, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 5, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 270, 7, 33, 2, 2, 270, 271, 5, 246, 124, 2, 271, 7, 3, 2, 2, 2, 272, 273, 7, 34, 2, 2, 273, 274, 7, 142, 2, 2, 274, 275, 5, 246, 124, 2, 275, 9, 3, 2, 2, 2, 276, 280, 5, 14, 8, 2, 277, 279, 5, 28, 15, 2, 278, 277, 3, 2, 2, 2, 279, 282, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 283, 3, 2, 2, 2, 282, 280, 3, 2, 2, 2, 283, 284, 5, 36, 19, 2, 284, 285, 5, 38, 20, 2, 285, 11, 3, 2, 2, 2, 286, 287, 5, 14, 8, 2, 287, 288, 5, 36, 19, 2, 288, 289, 5, 38, 20, 2, 289, 290, 5, 60, 31, 2, 290, 13, 3, 2, 2, 2, 291, 293, 7, 35, 2, 2, 292, 294, 9, 2, 2, 2, 293, 292, 3, 2, 2, 2, 293, 294, 3, 2, 2, 2, 294, 301, 3, 2, 2, 2, 295, 297, 5, 16, 9, 2, 296, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 302, 3, 2, 2, 2, 300, 302, 7, 3, 2, 2, 301, 296, 3, 2, 2, 2, 301, 300, 3, 2, 2, 2, 302, 15, 3, 2, 2, 2, 303, 306, 5, 182, 92, 2, 304, 306, 5, 18, 10, 2, 305, 303, 3, 2, 2, 2, 305, 304, 3, 2, 2, 2, 306, 17, 3, 2, 2, 2, 307, 308, 7, 4, 2, 2, 308, 309, 5, 20, 11, 2, 309, 310, 7, 5, 2, 2, 310, 19, 3, 2, 2, 2, 311, 312, 5, 186, 94, 2, 312, 313, 7, 38, 2, 2, 313, 314, 5, 182, 92, 2, 314, 21, 3, 2, 2, 2, 315, 339, 7, 39, 2, 2, 316, 320, 5, 106, 54, 2, 317, 319, 5, 28, 15, 2, 318, 317, 3, 2, 2, 2, 319, 322, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 323, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 324, 5, 36, 19, 2, 324, 325, 5, 38, 20, 2, 325, 340, 3, 2, 2, 2, 326, 328, 5, 28, 15, 2, 327, 326, 3, 2, 2, 2, 328, 331, 3, 2, 2, 2, 329, 327, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 332, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 332, 333, 7, 40, 2, 2, 333, 335, 7, 6, 2, 2, 334, 336, 5, 62, 32, 2, 335, 334, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 338, 7, 7, 2, 2, 338, 340, 5, 38, 20, 2, 339, 316, 3, 2, 2, 2, 339, 329, 3, 2, 2, 2, 340, 23, 3, 2, 2, 2, 341, 348, 7, 41, 2, 2, 342, 344, 5, 180, 91, 2, 343, 342, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 349, 3, 2, 2, 2, 347, 349, 7, 3, 2, 2, 348, 343, 3, 2, 2, 2, 348, 347, 3, 2, 2, 2, 349, 353, 3, 2, 2, 2, 350, 352, 5, 28, 15, 2, 351, 350, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 357, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 358, 5, 36, 19, 2, 357, 356, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 360, 5, 38, 20, 2, 360, 25, 3, 2, 2, 2, 361, 365, 7, 42, 2, 2, 362, 364, 5, 28, 15, 2, 363, 362, 3, 2, 2, 2, 364, 367, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 368, 369, 5, 36, 19, 2, 369, 370, 5, 38, 20, 2, 370, 27, 3, 2, 2, 2, 371, 374, 7, 43, 2, 2, 372, 375, 5, 30, 16, 2, 373, 375, 5, 32, 17, 2, 374, 372, 3, 2, 2, 2, 374, 373, 3, 2, 2, 2, 375, 29, 3, 2, 2, 2, 376, 377, 5, 34, 18, 2, 377, 31, 3, 2, 2, 2, 378, 379, 7, 44, 2, 2, 379, 380, 5, 34, 18, 2, 380, 33, 3, 2, 2, 2, 381, 382, 5, 240, 121, 2, 382, 35, 3, 2, 2, 2, 383, 385, 7, 40, 2, 2, 384, 383, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 5, 64, 33, 2, 387, 37, 3, 2, 2, 2, 388, 390, 5, 40, 21, 2, 389, 388, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 392, 3, 2, 2, 2, 391, 393, 5, 44, 23, 2, 392, 391, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 395, 3, 2, 2, 2, 394, 396, 5, 48, 25, 2, 395, 394, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 398, 3, 2, 2, 2, 397, 399, 5, 52, 27, 2, 398, 397, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 39, 3, 2, 2, 2, 400, 402, 7, 45, 2, 2, 401, 403, 5, 42, 22, 2, 402, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 402, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 41, 3, 2, 2, 2, 406, 418, 5, 210, 106, 2, 407, 418, 5, 100, 51, 2, 408, 409, 7, 4, 2, 2, 409, 412, 5, 186, 94, 2, 410, 411, 7, 38, 2, 2, 411, 413, 5, 182, 92, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 415, 7, 5, 2, 2, 415, 418, 3, 2, 2, 2, 416, 418, 5, 182, 92, 2, 417, 406, 3, 2, 2, 2, 417, 407, 3, 2, 2, 2, 417, 408, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 43, 3, 2, 2, 2, 419, 421, 7, 47, 2, 2, 420, 422, 5, 46, 24, 2, 421, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 45, 3, 2, 2, 2, 425, 426, 5, 98, 50, 2, 426, 47, 3, 2, 2, 2, 427, 429, 7, 48, 2, 2, 428, 430, 5, 50, 26, 2, 429, 428, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 49, 3, 2, 2, 2, 433, 434, 9, 3, 2, 2, 434, 440, 5, 208, 105, 2, 435, 438, 5, 98, 50, 2, 436, 438, 5, 182, 92, 2, 437, 435, 3, 2, 2, 2, 437, 436, 3, 2, 2, 2, 438, 440, 3, 2, 2, 2, 439, 433, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 51, 3, 2, 2, 2, 441, 443, 5, 54, 28, 2, 442, 444, 5, 56, 29, 2, 443, 442, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 446, 3, 2, 2, 2, 445, 447, 5, 58, 30, 2, 446, 445, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 484, 3, 2, 2, 2, 448, 450, 5, 54, 28, 2, 449, 451, 5, 58, 30, 2, 450, 449, 3, 2, 2, 2, 450, 451, 3, 2, 2, 2, 451, 453, 3, 2, 2, 2, 452, 454, 5, 56, 29, 2, 453, 452, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 484, 3, 2, 2, 2, 455, 457, 5, 56, 29, 2, 456, 458, 5, 54, 28, 2, 457, 456, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 460, 3, 2, 2, 2, 459, 461, 5, 58, 30, 2, 460, 459, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 484, 3, 2, 2, 2, 462, 464, 5, 56, 29, 2, 463, 465, 5, 58, 30, 2, 464, 463, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 467, 3, 2, 2, 2, 466, 468, 5, 54, 28, 2, 467, 466, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 484, 3, 2, 2, 2, 469, 471, 5, 58, 30, 2, 470, 472, 5, 56, 29, 2, 471, 470, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 474, 3, 2, 2, 2, 473, 475, 5, 54, 28, 2, 474, 473, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 484, 3, 2, 2, 2, 476, 478, 5, 58, 30, 2, 477, 479, 5, 54, 28, 2, 478, 477, 3, 2, 2, 2, 478, 479, 3, 2, 2, 2, 479, 481, 3, 2, 2, 2, 480, 482, 5, 56, 29, 2, 481, 480, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 441, 3, 2, 2, 2, 483, 448, 3, 2, 2, 2, 483, 455, 3, 2, 2, 2, 483, 462, 3, 2, 2, 2, 483, 469, 3, 2, 2, 2, 483, 476, 3, 2, 2, 2, 484, 53, 3, 2, 2, 2, 485, 486, 7, 51, 2, 2, 486, 487, 5, 160, 81, 2, 487, 55, 3, 2, 2, 2, 488, 489, 7, 52, 2, 2, 489, 490, 5, 160, 81, 2, 490, 57, 3, 2, 2, 2, 491, 492, 7, 53, 2, 2, 492, 493, 5, 160, 81, 2, 493, 59, 3, 2, 2, 2, 494, 495, 7, 54, 2, 2, 495, 497, 5, 82, 42, 2, 496, 494, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 61, 3, 2, 2, 2, 498, 503, 5, 110, 56, 2, 499, 501, 7, 8, 2, 2, 500, 502, 5, 62, 32, 2, 501, 500, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 3, 2, 2, 2, 503, 499, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 63, 3, 2, 2, 2, 505, 508, 7, 6, 2, 2, 506, 509, 5, 12, 7, 2, 507, 509, 5, 66, 34, 2, 508, 506, 3, 2, 2, 2, 508, 507, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 511, 7, 7, 2, 2, 511, 65, 3, 2, 2, 2, 512, 514, 5, 68, 35, 2, 513, 512, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 524, 3, 2, 2, 2, 515, 517, 5, 70, 36, 2, 516, 518, 7, 8, 2, 2, 517, 516, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 520, 3, 2, 2, 2, 519, 521, 5, 68, 35, 2, 520, 519, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 523, 3, 2, 2, 2, 522, 515, 3, 2, 2, 2, 523, 526, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 67, 3, 2, 2, 2, 526, 524, 3, 2, 2, 2, 527, 532, 5, 122, 62, 2, 528, 530, 7, 8, 2, 2, 529, 531, 5, 68, 35, 2, 530, 529, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 533, 3, 2, 2, 2, 532, 528, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 69, 3, 2, 2, 2, 534, 543, 5, 94, 48, 2, 535, 543, 5, 72, 37, 2, 536, 543, 5, 92, 47, 2, 537, 543, 5, 74, 38, 2, 538, 543, 5, 76, 39, 2, 539, 543, 5, 96, 49, 2, 540, 543, 5, 78, 40, 2, 541, 543, 5, 80, 41, 2, 542, 534, 3, 2, 2, 2, 542, 535, 3, 2, 2, 2, 542, 536, 3, 2, 2, 2, 542, 537, 3, 2, 2, 2, 542, 538, 3, 2, 2, 2, 542, 539, 3, 2, 2, 2, 542, 540, 3, 2, 2, 2, 542, 541, 3, 2, 2, 2, 543, 71, 3, 2, 2, 2, 544, 545, 7, 71, 2, 2, 545, 546, 5, 64, 33, 2, 546, 73, 3, 2, 2, 2, 547, 548, 7, 69, 2, 2, 548, 549, 5, 180, 91, 2, 549, 550, 5, 64, 33, 2, 550, 75, 3, 2, 2, 2, 551, 553, 7, 72, 2, 2, 552, 554, 7, 56, 2, 2, 553, 552, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 556, 5, 180, 91, 2, 556, 557, 5, 64, 33, 2, 557, 77, 3, 2, 2, 2, 558, 559, 7, 73, 2, 2, 559, 560, 7, 4, 2, 2, 560, 561, 5, 186, 94, 2, 561, 562, 7, 38, 2, 2, 562, 563, 5, 182, 92, 2, 563, 564, 7, 5, 2, 2, 564, 79, 3, 2, 2, 2, 565, 566, 7, 54, 2, 2, 566, 567, 5, 82, 42, 2, 567, 81, 3, 2, 2, 2, 568, 571, 5, 84, 43, 2, 569, 571, 5, 86, 44, 2, 570, 568, 3, 2, 2, 2, 570, 569, 3, 2, 2, 2, 571, 83, 3, 2, 2, 2, 572, 573, 5, 182, 92, 2, 573, 577, 7, 6, 2, 2, 574, 576, 5, 90, 46, 2, 575, 574, 3, 2, 2, 2, 576, 579, 3, 2, 2, 2, 577, 575, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, 580, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 580, 581, 7, 7, 2, 2, 581, 85, 3, 2, 2, 2, 582, 592, 7, 164, 2, 2, 583, 587, 7, 4, 2, 2, 584, 586, 5, 182, 92, 2, 585, 584, 3, 2, 2, 2, 586, 589, 3, 2, 2, 2, 587, 585, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 590, 3, 2, 2, 2, 589, 587, 3, 2, 2, 2, 590, 592, 7, 5, 2, 2, 591, 582, 3, 2, 2, 2, 591, 583, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 593, 597, 7, 6, 2, 2, 594, 596, 5, 88, 45, 2, 595, 594, 3, 2, 2, 2, 596, 599, 3, 2, 2, 2, 597, 595, 3, 2, 2, 2, 597, 598, 3, 2, 2, 2, 598, 600, 3, 2, 2, 2, 599, 597, 3, 2, 2, 2, 600, 601, 7, 7, 2, 2, 601, 87, 3, 2, 2, 2, 602, 606, 7, 4, 2, 2, 603, 605, 5, 90, 46, 2, 604, 603, 3, 2, 2, 2, 605, 608, 3, 2, 2, 2, 606, 604, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 609, 3, 2, 2, 2, 608, 606, 3, 2, 2, 2, 609, 612, 7, 5, 2, 2, 610, 612, 7, 164, 2, 2, 611, 602, 3, 2, 2, 2, 611, 610, 3, 2, 2, 2, 612, 89, 3, 2, 2, 2, 613, 619, 5, 240, 121, 2, 614, 619, 5, 226, 114, 2, 615, 619, 5, 228, 115, 2, 616, 619, 5, 236, 119, 2, 617, 619, 7, 74, 2, 2, 618, 613, 3, 2, 2, 2, 618, 614, 3, 2, 2, 2, 618, 615, 3, 2, 2, 2, 618, 616, 3, 2, 2, 2, 618, 617, 3, 2, 2, 2, 619, 91, 3, 2, 2, 2, 620, 621, 7, 75, 2, 2, 621, 622, 5, 64, 33, 2, 622, 93, 3, 2, 2, 2, 623, 628, 5, 64, 33, 2, 624, 625, 7, 76, 2, 2, 625, 627, 5, 64, 33, 2, 626, 624, 3, 2, 2, 2, 627, 630, 3, 2, 2, 2, 628, 626, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 95, 3, 2, 2, 2, 630, 628, 3, 2, 2, 2, 631, 632, 7, 77, 2, 2, 632, 633, 5, 98, 50, 2, 633, 97, 3, 2, 2, 2, 634, 638, 5, 208, 105, 2, 635, 638, 5, 210, 106, 2, 636, 638, 5, 100, 51, 2, 637, 634, 3, 2, 2, 2, 637, 635, 3, 2, 2, 2, 637, 636, 3, 2, 2, 2, 638, 99, 3, 2, 2, 2, 639, 640, 5, 240, 121, 2, 640, 641, 5, 102, 52, 2, 641, 101, 3, 2, 2, 2, 642, 658, 7, 164, 2, 2, 643, 645, 7, 4, 2, 2, 644, 646, 7, 36, 2, 2, 645, 644, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 647, 652, 5, 186, 94, 2, 648, 649, 7, 9, 2, 2, 649, 651, 5, 186, 94, 2, 650, 648, 3, 2, 2, 2, 651, 654, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 655, 3, 2, 2, 2, 654, 652, 3, 2, 2, 2, 655, 656, 7, 5, 2, 2, 656, 658, 3, 2, 2, 2, 657, 642, 3, 2, 2, 2, 657, 643, 3, 2, 2, 2, 658, 103, 3, 2, 2, 2, 659, 672, 7, 164, 2, 2, 660, 661, 7, 4, 2, 2, 661, 666, 5, 186, 94, 2, 662, 663, 7, 9, 2, 2, 663, 665, 5, 186, 94, 2, 664, 662, 3, 2, 2, 2, 665, 668, 3, 2, 2, 2, 666, 664, 3, 2, 2, 2, 666, 667, 3, 2, 2, 2, 667, 669, 3, 2, 2, 2, 668, 666, 3, 2, 2, 2, 669, 670, 7, 5, 2, 2, 670, 672, 3, 2, 2, 2, 671, 659, 3, 2, 2, 2, 671, 660, 3, 2, 2, 2, 672, 105, 3, 2, 2, 2, 673, 675, 7, 6, 2, 2, 674, 676, 5, 108, 55, 2, 675, 674, 3, 2, 2, 2, 675, 676, 3, 2, 2, 2, 676, 677, 3, 2, 2, 2, 677, 678, 7, 7, 2, 2, 678, 107, 3, 2, 2, 2, 679, 684, 5, 110, 56, 2, 680, 682, 7, 8, 2, 2, 681, 683, 5, 108, 55, 2, 682, 681, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 685, 3, 2, 2, 2, 684, 680, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 109, 3, 2, 2, 2, 686, 687, 5, 178, 90, 2, 687, 688, 5, 114, 58, 2, 688, 693, 3, 2, 2, 2, 689, 690, 5, 162, 82, 2, 690, 691, 5, 112, 57, 2, 691, 693, 3, 2, 2, 2, 692, 686, 3, 2, 2, 2, 692, 689, 3, 2, 2, 2, 693, 111, 3, 2, 2, 2, 694, 696, 5, 114, 58, 2, 695, 694, 3, 2, 2, 2, 695, 696, 3, 2, 2, 2, 696, 113, 3, 2, 2, 2, 697, 698, 5, 116, 59, 2, 698, 707, 5, 118, 60, 2, 699, 703, 7, 10, 2, 2, 700, 701, 5, 116, 59, 2, 701, 702, 5, 118, 60, 2, 702, 704, 3, 2, 2, 2, 703, 700, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 706, 3, 2, 2, 2, 705, 699, 3, 2, 2, 2, 706, 709, 3, 2, 2, 2, 707, 705, 3, 2, 2, 2, 707, 708, 3, 2, 2, 2, 708, 115, 3, 2, 2, 2, 709, 707, 3, 2, 2, 2, 710, 713, 5, 180, 91, 2, 711, 713, 7, 11, 2, 2, 712, 710, 3, 2, 2, 2, 712, 711, 3, 2, 2, 2, 713, 117, 3, 2, 2, 2, 714, 719, 5, 120, 61, 2, 715, 716, 7, 9, 2, 2, 716, 718, 5, 120, 61, 2, 717, 715, 3, 2, 2, 2, 718, 721, 3, 2, 2, 2, 719, 717, 3, 2, 2, 2, 719, 720, 3, 2, 2, 2, 720, 119, 3, 2, 2, 2, 721, 719, 3, 2, 2, 2, 722, 723, 5, 174, 88, 2, 723, 121, 3, 2, 2, 2, 724, 725, 5, 178, 90, 2, 725, 726, 5, 126, 64, 2, 726, 731, 3, 2, 2, 2, 727, 728, 5, 166, 84, 2, 728, 729, 5, 124, 63, 2, 729, 731, 3, 2, 2, 2, 730, 724, 3, 2, 2, 2, 730, 727, 3, 2, 2, 2, 731, 123, 3, 2, 2, 2, 732, 734, 5, 126, 64, 2, 733, 732, 3, 2, 2, 2, 733, 734, 3, 2, 2, 2, 734, 125, 3, 2, 2, 2, 735, 742, 5, 134, 68, 2, 736, 738, 7, 10, 2, 2, 737, 739, 5, 132, 67, 2, 738, 737, 3, 2, 2, 2, 738, 739, 3, 2, 2, 2, 739, 741, 3, 2, 2, 2, 740, 736, 3, 2, 2, 2, 741, 744, 3, 2, 2, 2, 742, 740, 3, 2, 2, 2, 742, 743, 3, 2, 2, 2, 743, 127, 3, 2, 2, 2, 744, 742, 3, 2, 2, 2, 745, 746, 5, 142, 72, 2, 746, 129, 3, 2, 2, 2, 747, 748, 5, 182, 92, 2, 748, 131, 3, 2, 2, 2, 749, 750, 5, 136, 69, 2, 750, 751, 5, 118, 60, 2, 751, 133, 3, 2, 2, 2, 752, 753, 5, 136, 69, 2, 753, 754, 5, 138, 70, 2, 754, 135, 3, 2, 2, 2, 755, 758, 5, 128, 65, 2, 756, 758, 5, 130, 66, 2, 757, 755, 3, 2, 2, 2, 757, 756, 3, 2, 2, 2, 758, 137, 3, 2, 2, 2, 759, 764, 5, 140, 71, 2, 760, 761, 7, 9, 2, 2, 761, 763, 5, 140, 71, 2, 762, 760, 3, 2, 2, 2, 763, 766, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 139, 3, 2, 2, 2, 766, 764, 3, 2, 2, 2, 767, 768, 5, 176, 89, 2, 768, 141, 3, 2, 2, 2, 769, 770, 5, 144, 73, 2, 770, 143, 3, 2, 2, 2, 771, 776, 5, 146, 74, 2, 772, 773, 7, 12, 2, 2, 773, 775, 5, 146, 74, 2, 774, 772, 3, 2, 2, 2, 775, 778, 3, 2, 2, 2, 776, 774, 3, 2, 2, 2, 776, 777, 3, 2, 2, 2, 777, 145, 3, 2, 2, 2, 778, 776, 3, 2, 2, 2, 779, 784, 5, 150, 76, 2, 780, 781, 7, 13, 2, 2, 781, 783, 5, 150, 76, 2, 782, 780, 3, 2, 2, 2, 783, 786, 3, 2, 2, 2, 784, 782, 3, 2, 2, 2, 784, 785, 3, 2, 2, 2, 785, 147, 3, 2, 2, 2, 786, 784, 3, 2, 2, 2, 787, 789, 5, 154, 78, 2, 788, 790, 5, 152, 77, 2, 789, 788, 3, 2, 2, 2, 789, 790, 3, 2, 2, 2, 790, 149, 3, 2, 2, 2, 791, 795, 5, 148, 75, 2, 792, 793, 7, 14, 2, 2, 793, 795, 5, 148, 75, 2, 794, 791, 3, 2, 2, 2, 794, 792, 3, 2, 2, 2, 795, 151, 3, 2, 2, 2, 796, 797, 9, 4, 2, 2, 797, 153, 3, 2, 2, 2, 798, 807, 5, 240, 121, 2, 799, 807, 7, 11, 2, 2, 800, 801, 7, 17, 2, 2, 801, 807, 5, 156, 79, 2, 802, 803, 7, 4, 2, 2, 803, 804, 5, 142, 72, 2, 804, 805, 7, 5, 2, 2, 805, 807, 3, 2, 2, 2, 806, 798, 3, 2, 2, 2, 806, 799, 3, 2, 2, 2, 806, 800, 3, 2, 2, 2, 806, 802, 3, 2, 2, 2, 807, 155, 3, 2, 2, 2, 808, 822, 5, 158, 80, 2, 809, 818, 7, 4, 2, 2, 810, 815, 5, 158, 80, 2, 811, 812, 7, 12, 2, 2, 812, 814, 5, 158, 80, 2, 813, 811, 3, 2, 2, 2, 814, 817, 3, 2, 2, 2, 815, 813, 3, 2, 2, 2, 815, 816, 3, 2, 2, 2, 816, 819, 3, 2, 2, 2, 817, 815, 3, 2, 2, 2, 818, 810, 3, 2, 2, 2, 818, 819, 3, 2, 2, 2, 819, 820, 3, 2, 2, 2, 820, 822, 7, 5, 2, 2, 821, 808, 3, 2, 2, 2, 821, 809, 3, 2, 2, 2, 822, 157, 3, 2, 2, 2, 823, 831, 5, 240, 121, 2, 824, 831, 7, 11, 2, 2, 825, 828, 7, 14, 2, 2, 826, 829, 5, 240, 121, 2, 827, 829, 7, 11, 2, 2, 828, 826, 3, 2, 2, 2, 828, 827, 3, 2, 2, 2, 829, 831, 3, 2, 2, 2, 830, 823, 3, 2, 2, 2, 830, 824, 3, 2, 2, 2, 830, 825, 3, 2, 2, 2, 831, 159, 3, 2, 2, 2, 832, 833, 7, 149, 2, 2, 833, 161, 3, 2, 2, 2, 834, 837, 5, 170, 86, 2, 835, 837, 5, 164, 83, 2, 836, 834, 3, 2, 2, 2, 836, 835, 3, 2, 2, 2, 837, 163, 3, 2, 2, 2, 838, 839, 7, 18, 2, 2, 839, 840, 5, 114, 58, 2, 840, 841, 7, 19, 2, 2, 841, 165, 3, 2, 2, 2, 842, 845, 5, 172, 87, 2, 843, 845, 5, 168, 85, 2, 844, 842, 3, 2, 2, 2, 844, 843, 3, 2, 2, 2, 845, 167, 3, 2, 2, 2, 846, 847, 7, 18, 2, 2, 847, 848, 5, 126, 64, 2, 848, 849, 7, 19, 2, 2, 849, 169, 3, 2, 2, 2, 850, 852, 7, 4, 2, 2, 851, 853, 5, 174, 88, 2, 852, 851, 3, 2, 2, 2, 853, 854, 3, 2, 2, 2, 854, 852, 3, 2, 2, 2, 854, 855, 3, 2, 2, 2, 855, 856, 3, 2, 2, 2, 856, 857, 7, 5, 2, 2, 857, 171, 3, 2, 2, 2, 858, 860, 7, 4, 2, 2, 859, 861, 5, 176, 89, 2, 860, 859, 3, 2, 2, 2, 861, 862, 3, 2, 2, 2, 862, 860, 3, 2, 2, 2, 862, 863, 3, 2, 2, 2, 863, 864, 3, 2, 2, 2, 864, 865, 7, 5, 2, 2, 865, 173, 3, 2, 2, 2, 866, 869, 5, 178, 90, 2, 867, 869, 5, 162, 82, 2, 868, 866, 3, 2, 2, 2, 868, 867, 3, 2, 2, 2, 869, 175, 3, 2, 2, 2, 870, 873, 5, 178, 90, 2, 871, 873, 5, 166, 84, 2, 872, 870, 3, 2, 2, 2, 872, 871, 3, 2, 2, 2, 873, 177, 3, 2, 2, 2, 874, 877, 5, 182, 92, 2, 875, 877, 5, 184, 93, 2, 876, 874, 3, 2, 2, 2, 876, 875, 3, 2, 2, 2, 877, 179, 3, 2, 2, 2, 878, 881, 5, 182, 92, 2, 879, 881, 5, 240, 121, 2, 880, 878, 3, 2, 2, 2, 880, 879, 3, 2, 2, 2, 881, 181, 3, 2, 2, 2, 882, 883, 9, 5, 2, 2, 883, 183, 3, 2, 2, 2, 884, 891, 5, 240, 121, 2, 885, 891, 5, 226, 114, 2, 886, 891, 5, 228, 115, 2, 887, 891, 5, 236, 119, 2, 888, 891, 5, 244, 123, 2, 889, 891, 7, 164, 2, 2, 890, 884, 3, 2, 2, 2, 890, 885, 3, 2, 2, 2, 890, 886, 3, 2, 2, 2, 890, 887, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 890, 889, 3, 2, 2, 2, 891, 185, 3, 2, 2, 2, 892, 893, 5, 188, 95, 2, 893, 187, 3, 2, 2, 2, 894, 899, 5, 190, 96, 2, 895, 896, 7, 20, 2, 2, 896, 898, 5, 190, 96, 2, 897, 895, 3, 2, 2, 2, 898, 901, 3, 2, 2, 2, 899, 897, 3, 2, 2, 2, 899, 900, 3, 2, 2, 2, 900, 189, 3, 2, 2, 2, 901, 899, 3, 2, 2, 2, 902, 907, 5, 192, 97, 2, 903, 904, 7, 21, 2, 2, 904, 906, 5, 192, 97, 2, 905, 903, 3, 2, 2, 2, 906, 909, 3, 2, 2, 2, 907, 905, 3, 2, 2, 2, 907, 908, 3, 2, 2, 2, 908, 191, 3, 2, 2, 2, 909, 907, 3, 2, 2, 2, 910, 911, 5, 194, 98, 2, 911, 193, 3, 2, 2, 2, 912, 930, 5, 196, 99, 2, 913, 914, 7, 22, 2, 2, 914, 931, 5, 196, 99, 2, 915, 916, 7, 23, 2, 2, 916, 931, 5, 196, 99, 2, 917, 918, 7, 24, 2, 2, 918, 931, 5, 196, 99, 2, 919, 920, 7, 25, 2, 2, 920, 931, 5, 196, 99, 2, 921, 922, 7, 26, 2, 2, 922, 931, 5, 196, 99, 2, 923, 924, 7, 27, 2, 2, 924, 931, 5, 196, 99, 2, 925, 926, 7, 79, 2, 2, 926, 931, 5, 104, 53, 2, 927, 928, 7, 78, 2, 2, 928, 929, 7, 79, 2, 2, 929, 931, 5, 104, 53, 2, 930, 913, 3, 2, 2, 2, 930, 915, 3, 2, 2, 2, 930, 917, 3, 2, 2, 2, 930, 919, 3, 2, 2, 2, 930, 921, 3, 2, 2, 2, 930, 923, 3, 2, 2, 2, 930, 925, 3, 2, 2, 2, 930, 927, 3, 2, 2, 2, 930, 931, 3, 2, 2, 2, 931, 195, 3, 2, 2, 2, 932, 933, 5, 198, 100, 2, 933, 197, 3, 2, 2, 2, 934, 942, 5, 202, 102, 2, 935, 936, 7, 15, 2, 2, 936, 941, 5, 202, 102, 2, 937, 938, 7, 28, 2, 2, 938, 941, 5, 202, 102, 2, 939, 941, 5, 200, 101, 2, 940, 935, 3, 2, 2, 2, 940, 937, 3, 2, 2, 2, 940, 939, 3, 2, 2, 2, 941, 944, 3, 2, 2, 2, 942, 940, 3, 2, 2, 2, 942, 943, 3, 2, 2, 2, 943, 199, 3, 2, 2, 2, 944, 942, 3, 2, 2, 2, 945, 948, 5, 232, 117, 2, 946, 948, 5, 234, 118, 2, 947, 945, 3, 2, 2, 2, 947, 946, 3, 2, 2, 2, 948, 955, 3, 2, 2, 2, 949, 950, 7, 3, 2, 2, 950, 954, 5, 204, 103, 2, 951, 952, 7, 13, 2, 2, 952, 954, 5, 204, 103, 2, 953, 949, 3, 2, 2, 2, 953, 951, 3, 2, 2, 2, 954, 957, 3, 2, 2, 2, 955, 953, 3, 2, 2, 2, 955, 956, 3, 2, 2, 2, 956, 201, 3, 2, 2, 2, 957, 955, 3, 2, 2, 2, 958, 965, 5, 204, 103, 2, 959, 960, 7, 3, 2, 2, 960, 964, 5, 204, 103, 2, 961, 962, 7, 13, 2, 2, 962, 964, 5, 204, 103, 2, 963, 959, 3, 2, 2, 2, 963, 961, 3, 2, 2, 2, 964, 967, 3, 2, 2, 2, 965, 963, 3, 2, 2, 2, 965, 966, 3, 2, 2, 2, 966, 203, 3, 2, 2, 2, 967, 965, 3, 2, 2, 2, 968, 969, 7, 17, 2, 2, 969, 976, 5, 206, 104, 2, 970, 971, 7, 15, 2, 2, 971, 976, 5, 206, 104, 2, 972, 973, 7, 28, 2, 2, 973, 976, 5, 206, 104, 2, 974, 976, 5, 206, 104, 2, 975, 968, 3, 2, 2, 2, 975, 970, 3, 2, 2, 2, 975, 972, 3, 2, 2, 2, 975, 974, 3, 2, 2, 2, 976, 205, 3, 2, 2, 2, 977, 985, 5, 208, 105, 2, 978, 985, 5, 210, 106, 2, 979, 985, 5, 224, 113, 2, 980, 985, 5, 226, 114, 2, 981, 985, 5, 228, 115, 2, 982, 985, 5, 236, 119, 2, 983, 985, 5, 182, 92, 2, 984, 977, 3, 2, 2, 2, 984, 978, 3, 2, 2, 2, 984, 979, 3, 2, 2, 2, 984, 980, 3, 2, 2, 2, 984, 981, 3, 2, 2, 2, 984, 982, 3, 2, 2, 2, 984, 983, 3, 2, 2, 2, 985, 207, 3, 2, 2, 2, 986, 987, 7, 4, 2, 2, 987, 988, 5, 186, 94, 2, 988, 989, 7, 5, 2, 2, 989, 209, 3, 2, 2, 2, 990, 1253, 5, 222, 112, 2, 991, 992, 7, 80, 2, 2, 992, 993, 7, 4, 2, 2, 993, 994, 5, 186, 94, 2, 994, 995, 7, 5, 2, 2, 995, 1253, 3, 2, 2, 2, 996, 997, 7, 81, 2, 2, 997, 998, 7, 4, 2, 2, 998, 999, 5, 186, 94, 2, 999, 1000, 7, 5, 2, 2, 1000, 1253, 3, 2, 2, 2, 1001, 1002, 7, 82, 2, 2, 1002, 1003, 7, 4, 2, 2, 1003, 1004, 5, 186, 94, 2, 1004, 1005, 7, 9, 2, 2, 1005, 1006, 5, 186, 94, 2, 1006, 1007, 7, 5, 2, 2, 1007, 1253, 3, 2, 2, 2, 1008, 1009, 7, 83, 2, 2, 1009, 1010, 7, 4, 2, 2, 1010, 1011, 5, 186, 94, 2, 1011, 1012, 7, 5, 2, 2, 1012, 1253, 3, 2, 2, 2, 1013, 1014, 7, 84, 2, 2, 1014, 1015, 7, 4, 2, 2, 1015, 1016, 5, 182, 92, 2, 1016, 1017, 7, 5, 2, 2, 1017, 1253, 3, 2, 2, 2, 1018, 1019, 7, 85, 2, 2, 1019, 1020, 7, 4, 2, 2, 1020, 1021, 5, 186, 94, 2, 1021, 1022, 7, 5, 2, 2, 1022, 1253, 3, 2, 2, 2, 1023, 1024, 7, 86, 2, 2, 1024, 1025, 7, 4, 2, 2, 1025, 1026, 5, 186, 94, 2, 1026, 1027, 7, 5, 2, 2, 1027, 1253, 3, 2, 2, 2, 1028, 1034, 7, 87, 2, 2, 1029, 1030, 7, 4, 2, 2, 1030, 1031, 5, 186, 94, 2, 1031, 1032, 7, 5, 2, 2, 1032, 1035, 3, 2, 2, 2, 1033, 1035, 7, 164, 2, 2, 1034, 1029, 3, 2, 2, 2, 1034, 1033, 3, 2, 2, 2, 1035, 1253, 3, 2, 2, 2, 1036, 1037, 7, 88, 2, 2, 1037, 1253, 7, 164, 2, 2, 1038, 1039, 7, 89, 2, 2, 1039, 1040, 7, 4, 2, 2, 1040, 1041, 5, 186, 94, 2, 1041, 1042, 7, 5, 2, 2, 1042, 1253, 3, 2, 2, 2, 1043, 1044, 7, 90, 2, 2, 1044, 1045, 7, 4, 2, 2, 1045, 1046, 5, 186, 94, 2, 1046, 1047, 7, 5, 2, 2, 1047, 1253, 3, 2, 2, 2, 1048, 1049, 7, 91, 2, 2, 1049, 1050, 7, 4, 2, 2, 1050, 1051, 5, 186, 94, 2, 1051, 1052, 7, 5, 2, 2, 1052, 1253, 3, 2, 2, 2, 1053, 1054, 7, 92, 2, 2, 1054, 1055, 7, 4, 2, 2, 1055, 1056, 5, 186, 94, 2, 1056, 1057, 7, 5, 2, 2, 1057, 1253, 3, 2, 2, 2, 1058, 1059, 7, 93, 2, 2, 1059, 1253, 5, 104, 53, 2, 1060, 1253, 5, 214, 108, 2, 1061, 1062, 7, 94, 2, 2, 1062, 1063, 7, 4, 2, 2, 1063, 1064, 5, 186, 94, 2, 1064, 1065, 7, 5, 2, 2, 1065, 1253, 3, 2, 2, 2, 1066, 1253, 5, 216, 109, 2, 1067, 1068, 7, 95, 2, 2, 1068, 1069, 7, 4, 2, 2, 1069, 1070, 5, 186, 94, 2, 1070, 1071, 7, 5, 2, 2, 1071, 1253, 3, 2, 2, 2, 1072, 1073, 7, 96, 2, 2, 1073, 1074, 7, 4, 2, 2, 1074, 1075, 5, 186, 94, 2, 1075, 1076, 7, 5, 2, 2, 1076, 1253, 3, 2, 2, 2, 1077, 1078, 7, 97, 2, 2, 1078, 1079, 7, 29, 2, 2, 1079, 1080, 7, 98, 2, 2, 1080, 1081, 7, 29, 2, 2, 1081, 1082, 7, 86, 2, 2, 1082, 1083, 7, 4, 2, 2, 1083, 1084, 5, 186, 94, 2, 1084, 1085, 7, 5, 2, 2, 1085, 1253, 3, 2, 2, 2, 1086, 1087, 7, 99, 2, 2, 1087, 1088, 7, 4, 2, 2, 1088, 1089, 5, 186, 94, 2, 1089, 1090, 7, 9, 2, 2, 1090, 1091, 5, 186, 94, 2, 1091, 1092, 7, 5, 2, 2, 1092, 1253, 3, 2, 2, 2, 1093, 1094, 7, 100, 2, 2, 1094, 1095, 7, 4, 2, 2, 1095, 1096, 5, 186, 94, 2, 1096, 1097, 7, 9, 2, 2, 1097, 1098, 5, 186, 94, 2, 1098, 1099, 7, 5, 2, 2, 1099, 1253, 3, 2, 2, 2, 1100, 1101, 7, 101, 2, 2, 1101, 1102, 7, 4, 2, 2, 1102, 1103, 5, 186, 94, 2, 1103, 1104, 7, 9, 2, 2, 1104, 1105, 5, 186, 94, 2, 1105, 1106, 7, 5, 2, 2, 1106, 1253, 3, 2, 2, 2, 1107, 1108, 7, 102, 2, 2, 1108, 1109, 7, 4, 2, 2, 1109, 1110, 5, 186, 94, 2, 1110, 1111, 7, 9, 2, 2, 1111, 1112, 5, 186, 94, 2, 1112, 1113, 7, 5, 2, 2, 1113, 1253, 3, 2, 2, 2, 1114, 1115, 7, 103, 2, 2, 1115, 1116, 7, 4, 2, 2, 1116, 1117, 5, 186, 94, 2, 1117, 1118, 7, 9, 2, 2, 1118, 1119, 5, 186, 94, 2, 1119, 1120, 7, 5, 2, 2, 1120, 1253, 3, 2, 2, 2, 1121, 1122, 7, 104, 2, 2, 1122, 1123, 7, 4, 2, 2, 1123, 1124, 5, 186, 94, 2, 1124, 1125, 7, 5, 2, 2, 1125, 1253, 3, 2, 2, 2, 1126, 1127, 7, 105, 2, 2, 1127, 1128, 7, 4, 2, 2, 1128, 1129, 5, 186, 94, 2, 1129, 1130, 7, 5, 2, 2, 1130, 1253, 3, 2, 2, 2, 1131, 1132, 7, 106, 2, 2, 1132, 1133, 7, 4, 2, 2, 1133, 1134, 5, 186, 94, 2, 1134, 1135, 7, 5, 2, 2, 1135, 1253, 3, 2, 2, 2, 1136, 1137, 7, 107, 2, 2, 1137, 1138, 7, 4, 2, 2, 1138, 1139, 5, 186, 94, 2, 1139, 1140, 7, 5, 2, 2, 1140, 1253, 3, 2, 2, 2, 1141, 1142, 7, 108, 2, 2, 1142, 1143, 7, 4, 2, 2, 1143, 1144, 5, 186, 94, 2, 1144, 1145, 7, 5, 2, 2, 1145, 1253, 3, 2, 2, 2, 1146, 1147, 7, 109, 2, 2, 1147, 1148, 7, 4, 2, 2, 1148, 1149, 5, 186, 94, 2, 1149, 1150, 7, 5, 2, 2, 1150, 1253, 3, 2, 2, 2, 1151, 1152, 7, 110, 2, 2, 1152, 1153, 7, 4, 2, 2, 1153, 1154, 5, 186, 94, 2, 1154, 1155, 7, 5, 2, 2, 1155, 1253, 3, 2, 2, 2, 1156, 1157, 7, 111, 2, 2, 1157, 1158, 7, 4, 2, 2, 1158, 1159, 5, 186, 94, 2, 1159, 1160, 7, 5, 2, 2, 1160, 1253, 3, 2, 2, 2, 1161, 1162, 7, 112, 2, 2, 1162, 1253, 7, 164, 2, 2, 1163, 1164, 7, 113, 2, 2, 1164, 1253, 7, 164, 2, 2, 1165, 1166, 7, 114, 2, 2, 1166, 1253, 7, 164, 2, 2, 1167, 1168, 7, 119, 2, 2, 1168, 1169, 7, 4, 2, 2, 1169, 1170, 5, 186, 94, 2, 1170, 1171, 7, 5, 2, 2, 1171, 1253, 3, 2, 2, 2, 1172, 1173, 7, 115, 2, 2, 1173, 1174, 7, 4, 2, 2, 1174, 1175, 5, 186, 94, 2, 1175, 1176, 7, 5, 2, 2, 1176, 1253, 3, 2, 2, 2, 1177, 1178, 7, 116, 2, 2, 1178, 1179, 7, 4, 2, 2, 1179, 1180, 5, 186, 94, 2, 1180, 1181, 7, 5, 2, 2, 1181, 1253, 3, 2, 2, 2, 1182, 1183, 7, 117, 2, 2, 1183, 1184, 7, 4, 2, 2, 1184, 1185, 5, 186, 94, 2, 1185, 1186, 7, 5, 2, 2, 1186, 1253, 3, 2, 2, 2, 1187, 1188, 7, 118, 2, 2, 1188, 1189, 7, 4, 2, 2, 1189, 1190, 5, 186, 94, 2, 1190, 1191, 7, 5, 2, 2, 1191, 1253, 3, 2, 2, 2, 1192, 1193, 7, 120, 2, 2, 1193, 1253, 5, 104, 53, 2, 1194, 1195, 7, 121, 2, 2, 1195, 1196, 7, 4, 2, 2, 1196, 1197, 5, 186, 94, 2, 1197, 1198, 7, 9, 2, 2, 1198, 1199, 5, 186, 94, 2, 1199, 1200, 7, 9, 2, 2, 1200, 1201, 5, 186, 94, 2, 1201, 1202, 7, 5, 2, 2, 1202, 1253, 3, 2, 2, 2, 1203, 1204, 7, 122, 2, 2, 1204, 1205, 7, 4, 2, 2, 1205, 1206, 5, 186, 94, 2, 1206, 1207, 7, 9, 2, 2, 1207, 1208, 5, 186, 94, 2, 1208, 1209, 7, 5, 2, 2, 1209, 1253, 3, 2, 2, 2, 1210, 1211, 7, 123, 2, 2, 1211, 1212, 7, 4, 2, 2, 1212, 1213, 5, 186, 94, 2, 1213, 1214, 7, 9, 2, 2, 1214, 1215, 5, 186, 94, 2, 1215, 1216, 7, 5, 2, 2, 1216, 1253, 3, 2, 2, 2, 1217, 1218, 7, 124, 2, 2, 1218, 1219, 7, 4, 2, 2, 1219, 1220, 5, 186, 94, 2, 1220, 1221, 7, 9, 2, 2, 1221, 1222, 5, 186, 94, 2, 1222, 1223, 7, 5, 2, 2, 1223, 1253, 3, 2, 2, 2, 1224, 1225, 7, 125, 2, 2, 1225, 1226, 7, 4, 2, 2, 1226, 1227, 5, 186, 94, 2, 1227, 1228, 7, 5, 2, 2, 1228, 1253, 3, 2, 2, 2, 1229, 1230, 7, 126, 2, 2, 1230, 1231, 7, 4, 2, 2, 1231, 1232, 5, 186, 94, 2, 1232, 1233, 7, 5, 2, 2, 1233, 1253, 3, 2, 2, 2, 1234, 1235, 7, 127, 2, 2, 1235, 1236, 7, 4, 2, 2, 1236, 1237, 5, 186, 94, 2, 1237, 1238, 7, 5, 2, 2, 1238, 1253, 3, 2, 2, 2, 1239, 1240, 7, 128, 2, 2, 1240, 1241, 7, 4, 2, 2, 1241, 1242, 5, 186, 94, 2, 1242, 1243, 7, 5, 2, 2, 1243, 1253, 3, 2, 2, 2, 1244, 1245, 7, 129, 2, 2, 1245, 1246, 7, 4, 2, 2, 1246, 1247, 5, 186, 94, 2, 1247, 1248, 7, 5, 2, 2, 1248, 1253, 3, 2, 2, 2, 1249, 1253, 5, 212, 107, 2, 1250, 1253, 5, 218, 110, 2, 1251, 1253, 5, 220, 111, 2, 1252, 990, 3, 2, 2, 2, 1252, 991, 3, 2, 2, 2, 1252, 996, 3, 2, 2, 2, 1252, 1001, 3, 2, 2, 2, 1252, 1008, 3, 2, 2, 2, 1252, 1013, 3, 2, 2, 2, 1252, 1018, 3, 2, 2, 2, 1252, 1023, 3, 2, 2, 2, 1252, 1028, 3, 2, 2, 2, 1252, 1036, 3, 2, 2, 2, 1252, 1038, 3, 2, 2, 2, 1252, 1043, 3, 2, 2, 2, 1252, 1048, 3, 2, 2, 2, 1252, 1053, 3, 2, 2, 2, 1252, 1058, 3, 2, 2, 2, 1252, 1060, 3, 2, 2, 2, 1252, 1061, 3, 2, 2, 2, 1252, 1066, 3, 2, 2, 2, 1252, 1067, 3, 2, 2, 2, 1252, 1072, 3, 2, 2, 2, 1252, 1077, 3, 2, 2, 2, 1252, 1086, 3, 2, 2, 2, 1252, 1093, 3, 2, 2, 2, 1252, 1100, 3, 2, 2, 2, 1252, 1107, 3, 2, 2, 2, 1252, 1114, 3, 2, 2, 2, 1252, 1121, 3, 2, 2, 2, 1252, 1126, 3, 2, 2, 2, 1252, 1131, 3, 2, 2, 2, 1252, 1136, 3, 2, 2, 2, 1252, 1141, 3, 2, 2, 2, 1252, 1146, 3, 2, 2, 2, 1252, 1151, 3, 2, 2, 2, 1252, 1156, 3, 2, 2, 2, 1252, 1161, 3, 2, 2, 2, 1252, 1163, 3, 2, 2, 2, 1252, 1165, 3, 2, 2, 2, 1252, 1167, 3, 2, 2, 2, 1252, 1172, 3, 2, 2, 2, 1252, 1177, 3, 2, 2, 2, 1252, 1182, 3, 2, 2, 2, 1252, 1187, 3, 2, 2, 2, 1252, 1192, 3, 2, 2, 2, 1252, 1194, 3, 2, 2, 2, 1252, 1203, 3, 2, 2, 2, 1252, 1210, 3, 2, 2, 2, 1252, 1217, 3, 2, 2, 2, 1252, 1224, 3, 2, 2, 2, 1252, 1229, 3, 2, 2, 2, 1252, 1234, 3, 2, 2, 2, 1252, 1239, 3, 2, 2, 2, 1252, 1244, 3, 2, 2, 2, 1252, 1249, 3, 2, 2, 2, 1252, 1250, 3, 2, 2, 2, 1252, 1251, 3, 2, 2, 2, 1253, 211, 3, 2, 2, 2, 1254, 1255, 7, 130, 2, 2, 1255, 1256, 7, 4, 2, 2, 1256, 1257, 5, 186, 94, 2, 1257, 1258, 7, 9, 2, 2, 1258, 1261, 5, 186, 94, 2, 1259, 1260, 7, 9, 2, 2, 1260, 1262, 5, 186, 94, 2, 1261, 1259, 3, 2, 2, 2, 1261, 1262, 3, 2, 2, 2, 1262, 1263, 3, 2, 2, 2, 1263, 1264, 7, 5, 2, 2, 1264, 213, 3, 2, 2, 2, 1265, 1266, 7, 131, 2, 2, 1266, 1267, 7, 4, 2, 2, 1267, 1268, 5, 186, 94, 2, 1268, 1269, 7, 9, 2, 2, 1269, 1272, 5, 186, 94, 2, 1270, 1271, 7, 9, 2, 2, 1271, 1273, 5, 186, 94, 2, 1272, 1270, 3, 2, 2, 2, 1272, 1273, 3, 2, 2, 2, 1273, 1274, 3, 2, 2, 2, 1274, 1275, 7, 5, 2, 2, 1275, 215, 3, 2, 2, 2, 1276, 1277, 7, 132, 2, 2, 1277, 1278, 7, 4, 2, 2, 1278, 1279, 5, 186, 94, 2, 1279, 1280, 7, 9, 2, 2, 1280, 1281, 5, 186, 94, 2, 1281, 1282, 7, 9, 2, 2, 1282, 1285, 5, 186, 94, 2, 1283, 1284, 7, 9, 2, 2, 1284, 1286, 5, 186, 94, 2, 1285, 1283, 3, 2, 2, 2, 1285, 1286, 3, 2, 2, 2, 1286, 1287, 3, 2, 2, 2, 1287, 1288, 7, 5, 2, 2, 1288, 217, 3, 2, 2, 2, 1289, 1290, 7, 133, 2, 2, 1290, 1291, 5, 64, 33, 2, 1291, 219, 3, 2, 2, 2, 1292, 1293, 7, 78, 2, 2, 1293, 1294, 7, 133, 2, 2, 1294, 1295, 5, 64, 33, 2, 1295, 221, 3, 2, 2, 2, 1296, 1297, 7, 134, 2, 2, 1297, 1299, 7, 4, 2, 2, 1298, 1300, 7, 36, 2, 2, 1299, 1298, 3, 2, 2, 2, 1299, 1300, 3, 2, 2, 2, 1300, 1303, 3, 2, 2, 2, 1301, 1304, 7, 3, 2, 2, 1302, 1304, 5, 186, 94, 2, 1303, 1301, 3, 2, 2, 2, 1303, 1302, 3, 2, 2, 2, 1304, 1305, 3, 2, 2, 2, 1305, 1361, 7, 5, 2, 2, 1306, 1307, 7, 135, 2, 2, 1307, 1309, 7, 4, 2, 2, 1308, 1310, 7, 36, 2, 2, 1309, 1308, 3, 2, 2, 2, 1309, 1310, 3, 2, 2, 2, 1310, 1311, 3, 2, 2, 2, 1311, 1312, 5, 186, 94, 2, 1312, 1313, 7, 5, 2, 2, 1313, 1361, 3, 2, 2, 2, 1314, 1315, 7, 136, 2, 2, 1315, 1317, 7, 4, 2, 2, 1316, 1318, 7, 36, 2, 2, 1317, 1316, 3, 2, 2, 2, 1317, 1318, 3, 2, 2, 2, 1318, 1319, 3, 2, 2, 2, 1319, 1320, 5, 186, 94, 2, 1320, 1321, 7, 5, 2, 2, 1321, 1361, 3, 2, 2, 2, 1322, 1323, 7, 137, 2, 2, 1323, 1325, 7, 4, 2, 2, 1324, 1326, 7, 36, 2, 2, 1325, 1324, 3, 2, 2, 2, 1325, 1326, 3, 2, 2, 2, 1326, 1327, 3, 2, 2, 2, 1327, 1328, 5, 186, 94, 2, 1328, 1329, 7, 5, 2, 2, 1329, 1361, 3, 2, 2, 2, 1330, 1331, 7, 138, 2, 2, 1331, 1333, 7, 4, 2, 2, 1332, 1334, 7, 36, 2, 2, 1333, 1332, 3, 2, 2, 2, 1333, 1334, 3, 2, 2, 2, 1334, 1335, 3, 2, 2, 2, 1335, 1336, 5, 186, 94, 2, 1336, 1337, 7, 5, 2, 2, 1337, 1361, 3, 2, 2, 2, 1338, 1339, 7, 139, 2, 2, 1339, 1341, 7, 4, 2, 2, 1340, 1342, 7, 36, 2, 2, 1341, 1340, 3, 2, 2, 2, 1341, 1342, 3, 2, 2, 2, 1342, 1343, 3, 2, 2, 2, 1343, 1344, 5, 186, 94, 2, 1344, 1345, 7, 5, 2, 2, 1345, 1361, 3, 2, 2, 2, 1346, 1347, 7, 46, 2, 2, 1347, 1349, 7, 4, 2, 2, 1348, 1350, 7, 36, 2, 2, 1349, 1348, 3, 2, 2, 2, 1349, 1350, 3, 2, 2, 2, 1350, 1351, 3, 2, 2, 2, 1351, 1356, 5, 186, 94, 2, 1352, 1353, 7, 10, 2, 2, 1353, 1354, 7, 140, 2, 2, 1354, 1355, 7, 22, 2, 2, 1355, 1357, 5, 238, 120, 2, 1356, 1352, 3, 2, 2, 2, 1356, 1357, 3, 2, 2, 2, 1357, 1358, 3, 2, 2, 2, 1358, 1359, 7, 5, 2, 2, 1359, 1361, 3, 2, 2, 2, 1360, 1296, 3, 2, 2, 2, 1360, 1306, 3, 2, 2, 2, 1360, 1314, 3, 2, 2, 2, 1360, 1322, 3, 2, 2, 2, 1360, 1330, 3, 2, 2, 2, 1360, 1338, 3, 2, 2, 2, 1360, 1346, 3, 2, 2, 2, 1361, 223, 3, 2, 2, 2, 1362, 1364, 5, 240, 121, 2, 1363, 1365, 5, 102, 52, 2, 1364, 1363, 3, 2, 2, 2, 1364, 1365, 3, 2, 2, 2, 1365, 225, 3, 2, 2, 2, 1366, 1370, 5, 238, 120, 2, 1367, 1371, 7, 147, 2, 2, 1368, 1369, 7, 30, 2, 2, 1369, 1371, 5, 240, 121, 2, 1370, 1367, 3, 2, 2, 2, 1370, 1368, 3, 2, 2, 2, 1370, 1371, 3, 2, 2, 2, 1371, 227, 3, 2, 2, 2, 1372, 1376, 5, 230, 116, 2, 1373, 1376, 5, 232, 117, 2, 1374, 1376, 5, 234, 118, 2, 1375, 1372, 3, 2, 2, 2, 1375, 1373, 3, 2, 2, 2, 1375, 1374, 3, 2, 2, 2, 1376, 229, 3, 2, 2, 2, 1377, 1378, 9, 6, 2, 2, 1378, 231, 3, 2, 2, 2, 1379, 1380, 9, 7, 2, 2, 1380, 233, 3, 2, 2, 2, 1381, 1382, 9, 8, 2, 2, 1382, 235, 3, 2, 2, 2, 1383, 1384, 9, 9, 2, 2, 1384, 237, 3, 2, 2, 2, 1385, 1386, 9, 10, 2, 2, 1386, 239, 3, 2, 2, 2, 1387, 1389, 7, 148, 2, 2, 1388, 1387, 3, 2, 2, 2, 1388, 1389, 3, 2, 2, 2, 1389, 1392, 3, 2, 2, 2, 1390, 1393, 5, 246, 124, 2, 1391, 1393, 5, 242, 122, 2, 1392, 1390, 3, 2, 2, 2, 1392, 1391, 3, 2, 2, 2, 1393, 241, 3, 2, 2, 2, 1394, 1397, 5, 248, 125, 2, 1395, 1397, 5, 250, 126, 2, 1396, 1394, 3, 2, 2, 2, 1396, 1395, 3, 2, 2, 2, 1397, 243, 3, 2, 2, 2, 1398, 1399, 9, 11, 2, 2, 1399, 245, 3, 2, 2, 2, 1400, 1401, 7, 141, 2, 2, 1401, 247, 3, 2, 2, 2, 1402, 1403, 7, 143, 2, 2, 1403, 249, 3, 2, 2, 2, 1404, 1405, 7, 142, 2, 2, 1405, 251, 3, 2, 2, 2, 139, 257, 264, 266, 280, 293, 298, 301, 305, 320, 329, 335, 339, 345, 348, 353, 357, 365, 374, 384, 389, 392, 395, 398, 404, 412, 417, 423, 431, 437, 439, 443, 446, 450, 453, 457, 460, 464, 467, 471, 474, 478, 481, 483, 496, 501, 503, 508, 513, 517, 520, 524, 530, 532, 542, 553, 570, 577, 587, 591, 597, 606, 611, 618, 628, 637, 645, 652, 657, 666, 671, 675, 682, 684, 692, 695, 703, 707, 712, 719, 730, 733, 738, 742, 757, 764, 776, 784, 789, 794, 806, 815, 818, 821, 828, 830, 836, 844, 854, 862, 868, 872, 876, 880, 890, 899, 907, 930, 940, 942, 947, 953, 955, 963, 965, 975, 984, 1034, 1252, 1261, 1272, 1285, 1299, 1303, 1309, 1317, 1325, 1333, 1341, 1349, 1356, 1360, 1364, 1370, 1375, 1388, 1392, 1396] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 175, 1410, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 260, 10, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 7, 3, 267, 10, 3, 12, 3, 14, 3, 270, 11, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 7, 6, 281, 10, 6, 12, 6, 14, 6, 284, 11, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 296, 10, 8, 3, 8, 6, 8, 299, 10, 8, 13, 8, 14, 8, 300, 3, 8, 5, 8, 304, 10, 8, 3, 9, 3, 9, 5, 9, 308, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 7, 12, 321, 10, 12, 12, 12, 14, 12, 324, 11, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 330, 10, 12, 12, 12, 14, 12, 333, 11, 12, 3, 12, 3, 12, 3, 12, 5, 12, 338, 10, 12, 3, 12, 3, 12, 5, 12, 342, 10, 12, 3, 13, 3, 13, 6, 13, 346, 10, 13, 13, 13, 14, 13, 347, 3, 13, 5, 13, 351, 10, 13, 3, 13, 7, 13, 354, 10, 13, 12, 13, 14, 13, 357, 11, 13, 3, 13, 5, 13, 360, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 7, 14, 366, 10, 14, 12, 14, 14, 14, 369, 11, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 5, 15, 377, 10, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 5, 19, 387, 10, 19, 3, 19, 3, 19, 3, 20, 5, 20, 392, 10, 20, 3, 20, 5, 20, 395, 10, 20, 3, 20, 5, 20, 398, 10, 20, 3, 20, 5, 20, 401, 10, 20, 3, 21, 3, 21, 6, 21, 405, 10, 21, 13, 21, 14, 21, 406, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 415, 10, 22, 3, 22, 3, 22, 3, 22, 5, 22, 420, 10, 22, 3, 23, 3, 23, 6, 23, 424, 10, 23, 13, 23, 14, 23, 425, 3, 24, 3, 24, 3, 25, 3, 25, 6, 25, 432, 10, 25, 13, 25, 14, 25, 433, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 440, 10, 26, 5, 26, 442, 10, 26, 3, 27, 3, 27, 5, 27, 446, 10, 27, 3, 27, 5, 27, 449, 10, 27, 3, 27, 3, 27, 5, 27, 453, 10, 27, 3, 27, 5, 27, 456, 10, 27, 3, 27, 3, 27, 5, 27, 460, 10, 27, 3, 27, 5, 27, 463, 10, 27, 3, 27, 3, 27, 5, 27, 467, 10, 27, 3, 27, 5, 27, 470, 10, 27, 3, 27, 3, 27, 5, 27, 474, 10, 27, 3, 27, 5, 27, 477, 10, 27, 3, 27, 3, 27, 5, 27, 481, 10, 27, 3, 27, 5, 27, 484, 10, 27, 5, 27, 486, 10, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 5, 31, 499, 10, 31, 3, 32, 3, 32, 3, 32, 5, 32, 504, 10, 32, 5, 32, 506, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 511, 10, 33, 3, 33, 3, 33, 3, 34, 5, 34, 516, 10, 34, 3, 34, 7, 34, 519, 10, 34, 12, 34, 14, 34, 522, 11, 34, 3, 35, 3, 35, 5, 35, 526, 10, 35, 3, 35, 5, 35, 529, 10, 35, 3, 36, 3, 36, 3, 36, 5, 36, 534, 10, 36, 5, 36, 536, 10, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 546, 10, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 5, 40, 557, 10, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 5, 43, 574, 10, 43, 3, 44, 3, 44, 3, 44, 7, 44, 579, 10, 44, 12, 44, 14, 44, 582, 11, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 7, 45, 589, 10, 45, 12, 45, 14, 45, 592, 11, 45, 3, 45, 5, 45, 595, 10, 45, 3, 45, 3, 45, 7, 45, 599, 10, 45, 12, 45, 14, 45, 602, 11, 45, 3, 45, 3, 45, 3, 46, 3, 46, 7, 46, 608, 10, 46, 12, 46, 14, 46, 611, 11, 46, 3, 46, 3, 46, 5, 46, 615, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 622, 10, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 7, 49, 630, 10, 49, 12, 49, 14, 49, 633, 11, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 5, 51, 641, 10, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 5, 53, 649, 10, 53, 3, 53, 3, 53, 3, 53, 7, 53, 654, 10, 53, 12, 53, 14, 53, 657, 11, 53, 3, 53, 3, 53, 5, 53, 661, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 668, 10, 54, 12, 54, 14, 54, 671, 11, 54, 3, 54, 3, 54, 5, 54, 675, 10, 54, 3, 55, 3, 55, 5, 55, 679, 10, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 5, 56, 686, 10, 56, 5, 56, 688, 10, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 696, 10, 57, 3, 58, 5, 58, 699, 10, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 707, 10, 59, 7, 59, 709, 10, 59, 12, 59, 14, 59, 712, 11, 59, 3, 60, 3, 60, 5, 60, 716, 10, 60, 3, 61, 3, 61, 3, 61, 7, 61, 721, 10, 61, 12, 61, 14, 61, 724, 11, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 734, 10, 63, 3, 64, 5, 64, 737, 10, 64, 3, 65, 3, 65, 3, 65, 5, 65, 742, 10, 65, 7, 65, 744, 10, 65, 12, 65, 14, 65, 747, 11, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 5, 70, 761, 10, 70, 3, 71, 3, 71, 3, 71, 7, 71, 766, 10, 71, 12, 71, 14, 71, 769, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 7, 74, 778, 10, 74, 12, 74, 14, 74, 781, 11, 74, 3, 75, 3, 75, 3, 75, 7, 75, 786, 10, 75, 12, 75, 14, 75, 789, 11, 75, 3, 76, 3, 76, 5, 76, 793, 10, 76, 3, 77, 3, 77, 3, 77, 5, 77, 798, 10, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 5, 79, 810, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 817, 10, 80, 12, 80, 14, 80, 820, 11, 80, 5, 80, 822, 10, 80, 3, 80, 5, 80, 825, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 832, 10, 81, 5, 81, 834, 10, 81, 3, 82, 3, 82, 3, 83, 3, 83, 5, 83, 840, 10, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 5, 85, 848, 10, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 6, 87, 856, 10, 87, 13, 87, 14, 87, 857, 3, 87, 3, 87, 3, 88, 3, 88, 6, 88, 864, 10, 88, 13, 88, 14, 88, 865, 3, 88, 3, 88, 3, 89, 3, 89, 5, 89, 872, 10, 89, 3, 90, 3, 90, 5, 90, 876, 10, 90, 3, 91, 3, 91, 5, 91, 880, 10, 91, 3, 92, 3, 92, 5, 92, 884, 10, 92, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 5, 94, 894, 10, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 7, 96, 901, 10, 96, 12, 96, 14, 96, 904, 11, 96, 3, 97, 3, 97, 3, 97, 7, 97, 909, 10, 97, 12, 97, 14, 97, 912, 11, 97, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 5, 99, 934, 10, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 7, 101, 944, 10, 101, 12, 101, 14, 101, 947, 11, 101, 3, 102, 3, 102, 5, 102, 951, 10, 102, 3, 102, 3, 102, 3, 102, 3, 102, 7, 102, 957, 10, 102, 12, 102, 14, 102, 960, 11, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 7, 103, 967, 10, 103, 12, 103, 14, 103, 970, 11, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 979, 10, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 5, 105, 988, 10, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 5, 107, 1038, 10, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 5, 107, 1256, 10, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 5, 108, 1265, 10, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 5, 109, 1276, 10, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 5, 110, 1289, 10, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 5, 113, 1303, 10, 113, 3, 113, 3, 113, 5, 113, 1307, 10, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1313, 10, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1321, 10, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1329, 10, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1337, 10, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1345, 10, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1353, 10, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1360, 10, 113, 3, 113, 3, 113, 5, 113, 1364, 10, 113, 3, 114, 3, 114, 5, 114, 1368, 10, 114, 3, 115, 3, 115, 3, 115, 3, 115, 5, 115, 1374, 10, 115, 3, 116, 3, 116, 3, 116, 5, 116, 1379, 10, 116, 3, 117, 3, 117, 3, 118, 3, 118, 3, 119, 3, 119, 3, 120, 3, 120, 3, 121, 3, 121, 3, 122, 5, 122, 1392, 10, 122, 3, 122, 3, 122, 5, 122, 1396, 10, 122, 3, 123, 3, 123, 5, 123, 1400, 10, 123, 3, 124, 3, 124, 3, 125, 3, 125, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 2, 2, 128, 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, 2, 12, 3, 2, 36, 37, 3, 2, 49, 50, 4, 2, 3, 3, 15, 16, 3, 2, 145, 146, 3, 2, 149, 151, 3, 2, 152, 154, 3, 2, 155, 157, 3, 2, 31, 32, 3, 2, 159, 162, 4, 2, 144, 144, 165, 165, 2, 1520, 2, 254, 3, 2, 2, 2, 4, 268, 3, 2, 2, 2, 6, 271, 3, 2, 2, 2, 8, 274, 3, 2, 2, 2, 10, 278, 3, 2, 2, 2, 12, 288, 3, 2, 2, 2, 14, 293, 3, 2, 2, 2, 16, 307, 3, 2, 2, 2, 18, 309, 3, 2, 2, 2, 20, 313, 3, 2, 2, 2, 22, 317, 3, 2, 2, 2, 24, 343, 3, 2, 2, 2, 26, 363, 3, 2, 2, 2, 28, 373, 3, 2, 2, 2, 30, 378, 3, 2, 2, 2, 32, 380, 3, 2, 2, 2, 34, 383, 3, 2, 2, 2, 36, 386, 3, 2, 2, 2, 38, 391, 3, 2, 2, 2, 40, 402, 3, 2, 2, 2, 42, 419, 3, 2, 2, 2, 44, 421, 3, 2, 2, 2, 46, 427, 3, 2, 2, 2, 48, 429, 3, 2, 2, 2, 50, 441, 3, 2, 2, 2, 52, 485, 3, 2, 2, 2, 54, 487, 3, 2, 2, 2, 56, 490, 3, 2, 2, 2, 58, 493, 3, 2, 2, 2, 60, 498, 3, 2, 2, 2, 62, 500, 3, 2, 2, 2, 64, 507, 3, 2, 2, 2, 66, 515, 3, 2, 2, 2, 68, 523, 3, 2, 2, 2, 70, 530, 3, 2, 2, 2, 72, 545, 3, 2, 2, 2, 74, 547, 3, 2, 2, 2, 76, 550, 3, 2, 2, 2, 78, 554, 3, 2, 2, 2, 80, 561, 3, 2, 2, 2, 82, 568, 3, 2, 2, 2, 84, 573, 3, 2, 2, 2, 86, 575, 3, 2, 2, 2, 88, 594, 3, 2, 2, 2, 90, 614, 3, 2, 2, 2, 92, 621, 3, 2, 2, 2, 94, 623, 3, 2, 2, 2, 96, 626, 3, 2, 2, 2, 98, 634, 3, 2, 2, 2, 100, 640, 3, 2, 2, 2, 102, 642, 3, 2, 2, 2, 104, 660, 3, 2, 2, 2, 106, 674, 3, 2, 2, 2, 108, 676, 3, 2, 2, 2, 110, 682, 3, 2, 2, 2, 112, 695, 3, 2, 2, 2, 114, 698, 3, 2, 2, 2, 116, 700, 3, 2, 2, 2, 118, 715, 3, 2, 2, 2, 120, 717, 3, 2, 2, 2, 122, 725, 3, 2, 2, 2, 124, 733, 3, 2, 2, 2, 126, 736, 3, 2, 2, 2, 128, 738, 3, 2, 2, 2, 130, 748, 3, 2, 2, 2, 132, 750, 3, 2, 2, 2, 134, 752, 3, 2, 2, 2, 136, 755, 3, 2, 2, 2, 138, 760, 3, 2, 2, 2, 140, 762, 3, 2, 2, 2, 142, 770, 3, 2, 2, 2, 144, 772, 3, 2, 2, 2, 146, 774, 3, 2, 2, 2, 148, 782, 3, 2, 2, 2, 150, 790, 3, 2, 2, 2, 152, 797, 3, 2, 2, 2, 154, 799, 3, 2, 2, 2, 156, 809, 3, 2, 2, 2, 158, 824, 3, 2, 2, 2, 160, 833, 3, 2, 2, 2, 162, 835, 3, 2, 2, 2, 164, 839, 3, 2, 2, 2, 166, 841, 3, 2, 2, 2, 168, 847, 3, 2, 2, 2, 170, 849, 3, 2, 2, 2, 172, 853, 3, 2, 2, 2, 174, 861, 3, 2, 2, 2, 176, 871, 3, 2, 2, 2, 178, 875, 3, 2, 2, 2, 180, 879, 3, 2, 2, 2, 182, 883, 3, 2, 2, 2, 184, 885, 3, 2, 2, 2, 186, 893, 3, 2, 2, 2, 188, 895, 3, 2, 2, 2, 190, 897, 3, 2, 2, 2, 192, 905, 3, 2, 2, 2, 194, 913, 3, 2, 2, 2, 196, 915, 3, 2, 2, 2, 198, 935, 3, 2, 2, 2, 200, 937, 3, 2, 2, 2, 202, 950, 3, 2, 2, 2, 204, 961, 3, 2, 2, 2, 206, 978, 3, 2, 2, 2, 208, 987, 3, 2, 2, 2, 210, 989, 3, 2, 2, 2, 212, 1255, 3, 2, 2, 2, 214, 1257, 3, 2, 2, 2, 216, 1268, 3, 2, 2, 2, 218, 1279, 3, 2, 2, 2, 220, 1292, 3, 2, 2, 2, 222, 1295, 3, 2, 2, 2, 224, 1363, 3, 2, 2, 2, 226, 1365, 3, 2, 2, 2, 228, 1369, 3, 2, 2, 2, 230, 1378, 3, 2, 2, 2, 232, 1380, 3, 2, 2, 2, 234, 1382, 3, 2, 2, 2, 236, 1384, 3, 2, 2, 2, 238, 1386, 3, 2, 2, 2, 240, 1388, 3, 2, 2, 2, 242, 1391, 3, 2, 2, 2, 244, 1399, 3, 2, 2, 2, 246, 1401, 3, 2, 2, 2, 248, 1403, 3, 2, 2, 2, 250, 1405, 3, 2, 2, 2, 252, 1407, 3, 2, 2, 2, 254, 259, 5, 4, 3, 2, 255, 260, 5, 10, 6, 2, 256, 260, 5, 22, 12, 2, 257, 260, 5, 24, 13, 2, 258, 260, 5, 26, 14, 2, 259, 255, 3, 2, 2, 2, 259, 256, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 262, 5, 60, 31, 2, 262, 263, 7, 2, 2, 3, 263, 3, 3, 2, 2, 2, 264, 267, 5, 6, 4, 2, 265, 267, 5, 8, 5, 2, 266, 264, 3, 2, 2, 2, 266, 265, 3, 2, 2, 2, 267, 270, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 5, 3, 2, 2, 2, 270, 268, 3, 2, 2, 2, 271, 272, 7, 33, 2, 2, 272, 273, 5, 248, 125, 2, 273, 7, 3, 2, 2, 2, 274, 275, 7, 34, 2, 2, 275, 276, 7, 142, 2, 2, 276, 277, 5, 248, 125, 2, 277, 9, 3, 2, 2, 2, 278, 282, 5, 14, 8, 2, 279, 281, 5, 28, 15, 2, 280, 279, 3, 2, 2, 2, 281, 284, 3, 2, 2, 2, 282, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 285, 3, 2, 2, 2, 284, 282, 3, 2, 2, 2, 285, 286, 5, 36, 19, 2, 286, 287, 5, 38, 20, 2, 287, 11, 3, 2, 2, 2, 288, 289, 5, 14, 8, 2, 289, 290, 5, 36, 19, 2, 290, 291, 5, 38, 20, 2, 291, 292, 5, 60, 31, 2, 292, 13, 3, 2, 2, 2, 293, 295, 7, 35, 2, 2, 294, 296, 9, 2, 2, 2, 295, 294, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 303, 3, 2, 2, 2, 297, 299, 5, 16, 9, 2, 298, 297, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 298, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 304, 3, 2, 2, 2, 302, 304, 7, 3, 2, 2, 303, 298, 3, 2, 2, 2, 303, 302, 3, 2, 2, 2, 304, 15, 3, 2, 2, 2, 305, 308, 5, 184, 93, 2, 306, 308, 5, 18, 10, 2, 307, 305, 3, 2, 2, 2, 307, 306, 3, 2, 2, 2, 308, 17, 3, 2, 2, 2, 309, 310, 7, 4, 2, 2, 310, 311, 5, 20, 11, 2, 311, 312, 7, 5, 2, 2, 312, 19, 3, 2, 2, 2, 313, 314, 5, 188, 95, 2, 314, 315, 7, 38, 2, 2, 315, 316, 5, 184, 93, 2, 316, 21, 3, 2, 2, 2, 317, 341, 7, 39, 2, 2, 318, 322, 5, 108, 55, 2, 319, 321, 5, 28, 15, 2, 320, 319, 3, 2, 2, 2, 321, 324, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 325, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 325, 326, 5, 36, 19, 2, 326, 327, 5, 38, 20, 2, 327, 342, 3, 2, 2, 2, 328, 330, 5, 28, 15, 2, 329, 328, 3, 2, 2, 2, 330, 333, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 334, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 334, 335, 7, 40, 2, 2, 335, 337, 7, 6, 2, 2, 336, 338, 5, 62, 32, 2, 337, 336, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 7, 7, 2, 2, 340, 342, 5, 38, 20, 2, 341, 318, 3, 2, 2, 2, 341, 331, 3, 2, 2, 2, 342, 23, 3, 2, 2, 2, 343, 350, 7, 41, 2, 2, 344, 346, 5, 182, 92, 2, 345, 344, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 351, 3, 2, 2, 2, 349, 351, 7, 3, 2, 2, 350, 345, 3, 2, 2, 2, 350, 349, 3, 2, 2, 2, 351, 355, 3, 2, 2, 2, 352, 354, 5, 28, 15, 2, 353, 352, 3, 2, 2, 2, 354, 357, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 359, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 358, 360, 5, 36, 19, 2, 359, 358, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 362, 5, 38, 20, 2, 362, 25, 3, 2, 2, 2, 363, 367, 7, 42, 2, 2, 364, 366, 5, 28, 15, 2, 365, 364, 3, 2, 2, 2, 366, 369, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 370, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 371, 5, 36, 19, 2, 371, 372, 5, 38, 20, 2, 372, 27, 3, 2, 2, 2, 373, 376, 7, 43, 2, 2, 374, 377, 5, 30, 16, 2, 375, 377, 5, 32, 17, 2, 376, 374, 3, 2, 2, 2, 376, 375, 3, 2, 2, 2, 377, 29, 3, 2, 2, 2, 378, 379, 5, 34, 18, 2, 379, 31, 3, 2, 2, 2, 380, 381, 7, 44, 2, 2, 381, 382, 5, 34, 18, 2, 382, 33, 3, 2, 2, 2, 383, 384, 5, 242, 122, 2, 384, 35, 3, 2, 2, 2, 385, 387, 7, 40, 2, 2, 386, 385, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 389, 5, 64, 33, 2, 389, 37, 3, 2, 2, 2, 390, 392, 5, 40, 21, 2, 391, 390, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 394, 3, 2, 2, 2, 393, 395, 5, 44, 23, 2, 394, 393, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 397, 3, 2, 2, 2, 396, 398, 5, 48, 25, 2, 397, 396, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 400, 3, 2, 2, 2, 399, 401, 5, 52, 27, 2, 400, 399, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 39, 3, 2, 2, 2, 402, 404, 7, 45, 2, 2, 403, 405, 5, 42, 22, 2, 404, 403, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 41, 3, 2, 2, 2, 408, 420, 5, 212, 107, 2, 409, 420, 5, 102, 52, 2, 410, 411, 7, 4, 2, 2, 411, 414, 5, 188, 95, 2, 412, 413, 7, 38, 2, 2, 413, 415, 5, 184, 93, 2, 414, 412, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 417, 7, 5, 2, 2, 417, 420, 3, 2, 2, 2, 418, 420, 5, 184, 93, 2, 419, 408, 3, 2, 2, 2, 419, 409, 3, 2, 2, 2, 419, 410, 3, 2, 2, 2, 419, 418, 3, 2, 2, 2, 420, 43, 3, 2, 2, 2, 421, 423, 7, 47, 2, 2, 422, 424, 5, 46, 24, 2, 423, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 45, 3, 2, 2, 2, 427, 428, 5, 100, 51, 2, 428, 47, 3, 2, 2, 2, 429, 431, 7, 48, 2, 2, 430, 432, 5, 50, 26, 2, 431, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 49, 3, 2, 2, 2, 435, 436, 9, 3, 2, 2, 436, 442, 5, 210, 106, 2, 437, 440, 5, 100, 51, 2, 438, 440, 5, 184, 93, 2, 439, 437, 3, 2, 2, 2, 439, 438, 3, 2, 2, 2, 440, 442, 3, 2, 2, 2, 441, 435, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 442, 51, 3, 2, 2, 2, 443, 445, 5, 54, 28, 2, 444, 446, 5, 56, 29, 2, 445, 444, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 448, 3, 2, 2, 2, 447, 449, 5, 58, 30, 2, 448, 447, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 486, 3, 2, 2, 2, 450, 452, 5, 54, 28, 2, 451, 453, 5, 58, 30, 2, 452, 451, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 455, 3, 2, 2, 2, 454, 456, 5, 56, 29, 2, 455, 454, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 486, 3, 2, 2, 2, 457, 459, 5, 56, 29, 2, 458, 460, 5, 54, 28, 2, 459, 458, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 462, 3, 2, 2, 2, 461, 463, 5, 58, 30, 2, 462, 461, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 486, 3, 2, 2, 2, 464, 466, 5, 56, 29, 2, 465, 467, 5, 58, 30, 2, 466, 465, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 469, 3, 2, 2, 2, 468, 470, 5, 54, 28, 2, 469, 468, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 486, 3, 2, 2, 2, 471, 473, 5, 58, 30, 2, 472, 474, 5, 56, 29, 2, 473, 472, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 476, 3, 2, 2, 2, 475, 477, 5, 54, 28, 2, 476, 475, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 486, 3, 2, 2, 2, 478, 480, 5, 58, 30, 2, 479, 481, 5, 54, 28, 2, 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 483, 3, 2, 2, 2, 482, 484, 5, 56, 29, 2, 483, 482, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 486, 3, 2, 2, 2, 485, 443, 3, 2, 2, 2, 485, 450, 3, 2, 2, 2, 485, 457, 3, 2, 2, 2, 485, 464, 3, 2, 2, 2, 485, 471, 3, 2, 2, 2, 485, 478, 3, 2, 2, 2, 486, 53, 3, 2, 2, 2, 487, 488, 7, 51, 2, 2, 488, 489, 5, 162, 82, 2, 489, 55, 3, 2, 2, 2, 490, 491, 7, 52, 2, 2, 491, 492, 5, 162, 82, 2, 492, 57, 3, 2, 2, 2, 493, 494, 7, 53, 2, 2, 494, 495, 5, 162, 82, 2, 495, 59, 3, 2, 2, 2, 496, 497, 7, 54, 2, 2, 497, 499, 5, 84, 43, 2, 498, 496, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 61, 3, 2, 2, 2, 500, 505, 5, 112, 57, 2, 501, 503, 7, 8, 2, 2, 502, 504, 5, 62, 32, 2, 503, 502, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 506, 3, 2, 2, 2, 505, 501, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 63, 3, 2, 2, 2, 507, 510, 7, 6, 2, 2, 508, 511, 5, 12, 7, 2, 509, 511, 5, 66, 34, 2, 510, 508, 3, 2, 2, 2, 510, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 7, 7, 2, 2, 513, 65, 3, 2, 2, 2, 514, 516, 5, 70, 36, 2, 515, 514, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 520, 3, 2, 2, 2, 517, 519, 5, 68, 35, 2, 518, 517, 3, 2, 2, 2, 519, 522, 3, 2, 2, 2, 520, 518, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 67, 3, 2, 2, 2, 522, 520, 3, 2, 2, 2, 523, 525, 5, 72, 37, 2, 524, 526, 7, 8, 2, 2, 525, 524, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 528, 3, 2, 2, 2, 527, 529, 5, 70, 36, 2, 528, 527, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 69, 3, 2, 2, 2, 530, 535, 5, 124, 63, 2, 531, 533, 7, 8, 2, 2, 532, 534, 5, 70, 36, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 536, 3, 2, 2, 2, 535, 531, 3, 2, 2, 2, 535, 536, 3, 2, 2, 2, 536, 71, 3, 2, 2, 2, 537, 546, 5, 96, 49, 2, 538, 546, 5, 74, 38, 2, 539, 546, 5, 94, 48, 2, 540, 546, 5, 76, 39, 2, 541, 546, 5, 78, 40, 2, 542, 546, 5, 98, 50, 2, 543, 546, 5, 80, 41, 2, 544, 546, 5, 82, 42, 2, 545, 537, 3, 2, 2, 2, 545, 538, 3, 2, 2, 2, 545, 539, 3, 2, 2, 2, 545, 540, 3, 2, 2, 2, 545, 541, 3, 2, 2, 2, 545, 542, 3, 2, 2, 2, 545, 543, 3, 2, 2, 2, 545, 544, 3, 2, 2, 2, 546, 73, 3, 2, 2, 2, 547, 548, 7, 71, 2, 2, 548, 549, 5, 64, 33, 2, 549, 75, 3, 2, 2, 2, 550, 551, 7, 69, 2, 2, 551, 552, 5, 182, 92, 2, 552, 553, 5, 64, 33, 2, 553, 77, 3, 2, 2, 2, 554, 556, 7, 72, 2, 2, 555, 557, 7, 56, 2, 2, 556, 555, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 559, 5, 182, 92, 2, 559, 560, 5, 64, 33, 2, 560, 79, 3, 2, 2, 2, 561, 562, 7, 73, 2, 2, 562, 563, 7, 4, 2, 2, 563, 564, 5, 188, 95, 2, 564, 565, 7, 38, 2, 2, 565, 566, 5, 184, 93, 2, 566, 567, 7, 5, 2, 2, 567, 81, 3, 2, 2, 2, 568, 569, 7, 54, 2, 2, 569, 570, 5, 84, 43, 2, 570, 83, 3, 2, 2, 2, 571, 574, 5, 86, 44, 2, 572, 574, 5, 88, 45, 2, 573, 571, 3, 2, 2, 2, 573, 572, 3, 2, 2, 2, 574, 85, 3, 2, 2, 2, 575, 576, 5, 184, 93, 2, 576, 580, 7, 6, 2, 2, 577, 579, 5, 92, 47, 2, 578, 577, 3, 2, 2, 2, 579, 582, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 583, 3, 2, 2, 2, 582, 580, 3, 2, 2, 2, 583, 584, 7, 7, 2, 2, 584, 87, 3, 2, 2, 2, 585, 595, 7, 164, 2, 2, 586, 590, 7, 4, 2, 2, 587, 589, 5, 184, 93, 2, 588, 587, 3, 2, 2, 2, 589, 592, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 593, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 593, 595, 7, 5, 2, 2, 594, 585, 3, 2, 2, 2, 594, 586, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 600, 7, 6, 2, 2, 597, 599, 5, 90, 46, 2, 598, 597, 3, 2, 2, 2, 599, 602, 3, 2, 2, 2, 600, 598, 3, 2, 2, 2, 600, 601, 3, 2, 2, 2, 601, 603, 3, 2, 2, 2, 602, 600, 3, 2, 2, 2, 603, 604, 7, 7, 2, 2, 604, 89, 3, 2, 2, 2, 605, 609, 7, 4, 2, 2, 606, 608, 5, 92, 47, 2, 607, 606, 3, 2, 2, 2, 608, 611, 3, 2, 2, 2, 609, 607, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 612, 3, 2, 2, 2, 611, 609, 3, 2, 2, 2, 612, 615, 7, 5, 2, 2, 613, 615, 7, 164, 2, 2, 614, 605, 3, 2, 2, 2, 614, 613, 3, 2, 2, 2, 615, 91, 3, 2, 2, 2, 616, 622, 5, 242, 122, 2, 617, 622, 5, 228, 115, 2, 618, 622, 5, 230, 116, 2, 619, 622, 5, 238, 120, 2, 620, 622, 7, 74, 2, 2, 621, 616, 3, 2, 2, 2, 621, 617, 3, 2, 2, 2, 621, 618, 3, 2, 2, 2, 621, 619, 3, 2, 2, 2, 621, 620, 3, 2, 2, 2, 622, 93, 3, 2, 2, 2, 623, 624, 7, 75, 2, 2, 624, 625, 5, 64, 33, 2, 625, 95, 3, 2, 2, 2, 626, 631, 5, 64, 33, 2, 627, 628, 7, 76, 2, 2, 628, 630, 5, 64, 33, 2, 629, 627, 3, 2, 2, 2, 630, 633, 3, 2, 2, 2, 631, 629, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 97, 3, 2, 2, 2, 633, 631, 3, 2, 2, 2, 634, 635, 7, 77, 2, 2, 635, 636, 5, 100, 51, 2, 636, 99, 3, 2, 2, 2, 637, 641, 5, 210, 106, 2, 638, 641, 5, 212, 107, 2, 639, 641, 5, 102, 52, 2, 640, 637, 3, 2, 2, 2, 640, 638, 3, 2, 2, 2, 640, 639, 3, 2, 2, 2, 641, 101, 3, 2, 2, 2, 642, 643, 5, 242, 122, 2, 643, 644, 5, 104, 53, 2, 644, 103, 3, 2, 2, 2, 645, 661, 7, 164, 2, 2, 646, 648, 7, 4, 2, 2, 647, 649, 7, 36, 2, 2, 648, 647, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 650, 3, 2, 2, 2, 650, 655, 5, 188, 95, 2, 651, 652, 7, 9, 2, 2, 652, 654, 5, 188, 95, 2, 653, 651, 3, 2, 2, 2, 654, 657, 3, 2, 2, 2, 655, 653, 3, 2, 2, 2, 655, 656, 3, 2, 2, 2, 656, 658, 3, 2, 2, 2, 657, 655, 3, 2, 2, 2, 658, 659, 7, 5, 2, 2, 659, 661, 3, 2, 2, 2, 660, 645, 3, 2, 2, 2, 660, 646, 3, 2, 2, 2, 661, 105, 3, 2, 2, 2, 662, 675, 7, 164, 2, 2, 663, 664, 7, 4, 2, 2, 664, 669, 5, 188, 95, 2, 665, 666, 7, 9, 2, 2, 666, 668, 5, 188, 95, 2, 667, 665, 3, 2, 2, 2, 668, 671, 3, 2, 2, 2, 669, 667, 3, 2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 672, 3, 2, 2, 2, 671, 669, 3, 2, 2, 2, 672, 673, 7, 5, 2, 2, 673, 675, 3, 2, 2, 2, 674, 662, 3, 2, 2, 2, 674, 663, 3, 2, 2, 2, 675, 107, 3, 2, 2, 2, 676, 678, 7, 6, 2, 2, 677, 679, 5, 110, 56, 2, 678, 677, 3, 2, 2, 2, 678, 679, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 681, 7, 7, 2, 2, 681, 109, 3, 2, 2, 2, 682, 687, 5, 112, 57, 2, 683, 685, 7, 8, 2, 2, 684, 686, 5, 110, 56, 2, 685, 684, 3, 2, 2, 2, 685, 686, 3, 2, 2, 2, 686, 688, 3, 2, 2, 2, 687, 683, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 111, 3, 2, 2, 2, 689, 690, 5, 180, 91, 2, 690, 691, 5, 116, 59, 2, 691, 696, 3, 2, 2, 2, 692, 693, 5, 164, 83, 2, 693, 694, 5, 114, 58, 2, 694, 696, 3, 2, 2, 2, 695, 689, 3, 2, 2, 2, 695, 692, 3, 2, 2, 2, 696, 113, 3, 2, 2, 2, 697, 699, 5, 116, 59, 2, 698, 697, 3, 2, 2, 2, 698, 699, 3, 2, 2, 2, 699, 115, 3, 2, 2, 2, 700, 701, 5, 118, 60, 2, 701, 710, 5, 120, 61, 2, 702, 706, 7, 10, 2, 2, 703, 704, 5, 118, 60, 2, 704, 705, 5, 120, 61, 2, 705, 707, 3, 2, 2, 2, 706, 703, 3, 2, 2, 2, 706, 707, 3, 2, 2, 2, 707, 709, 3, 2, 2, 2, 708, 702, 3, 2, 2, 2, 709, 712, 3, 2, 2, 2, 710, 708, 3, 2, 2, 2, 710, 711, 3, 2, 2, 2, 711, 117, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 713, 716, 5, 182, 92, 2, 714, 716, 7, 11, 2, 2, 715, 713, 3, 2, 2, 2, 715, 714, 3, 2, 2, 2, 716, 119, 3, 2, 2, 2, 717, 722, 5, 122, 62, 2, 718, 719, 7, 9, 2, 2, 719, 721, 5, 122, 62, 2, 720, 718, 3, 2, 2, 2, 721, 724, 3, 2, 2, 2, 722, 720, 3, 2, 2, 2, 722, 723, 3, 2, 2, 2, 723, 121, 3, 2, 2, 2, 724, 722, 3, 2, 2, 2, 725, 726, 5, 176, 89, 2, 726, 123, 3, 2, 2, 2, 727, 728, 5, 180, 91, 2, 728, 729, 5, 128, 65, 2, 729, 734, 3, 2, 2, 2, 730, 731, 5, 168, 85, 2, 731, 732, 5, 126, 64, 2, 732, 734, 3, 2, 2, 2, 733, 727, 3, 2, 2, 2, 733, 730, 3, 2, 2, 2, 734, 125, 3, 2, 2, 2, 735, 737, 5, 128, 65, 2, 736, 735, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 127, 3, 2, 2, 2, 738, 745, 5, 136, 69, 2, 739, 741, 7, 10, 2, 2, 740, 742, 5, 134, 68, 2, 741, 740, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 744, 3, 2, 2, 2, 743, 739, 3, 2, 2, 2, 744, 747, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 129, 3, 2, 2, 2, 747, 745, 3, 2, 2, 2, 748, 749, 5, 144, 73, 2, 749, 131, 3, 2, 2, 2, 750, 751, 5, 184, 93, 2, 751, 133, 3, 2, 2, 2, 752, 753, 5, 138, 70, 2, 753, 754, 5, 120, 61, 2, 754, 135, 3, 2, 2, 2, 755, 756, 5, 138, 70, 2, 756, 757, 5, 140, 71, 2, 757, 137, 3, 2, 2, 2, 758, 761, 5, 130, 66, 2, 759, 761, 5, 132, 67, 2, 760, 758, 3, 2, 2, 2, 760, 759, 3, 2, 2, 2, 761, 139, 3, 2, 2, 2, 762, 767, 5, 142, 72, 2, 763, 764, 7, 9, 2, 2, 764, 766, 5, 142, 72, 2, 765, 763, 3, 2, 2, 2, 766, 769, 3, 2, 2, 2, 767, 765, 3, 2, 2, 2, 767, 768, 3, 2, 2, 2, 768, 141, 3, 2, 2, 2, 769, 767, 3, 2, 2, 2, 770, 771, 5, 178, 90, 2, 771, 143, 3, 2, 2, 2, 772, 773, 5, 146, 74, 2, 773, 145, 3, 2, 2, 2, 774, 779, 5, 148, 75, 2, 775, 776, 7, 12, 2, 2, 776, 778, 5, 148, 75, 2, 777, 775, 3, 2, 2, 2, 778, 781, 3, 2, 2, 2, 779, 777, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 147, 3, 2, 2, 2, 781, 779, 3, 2, 2, 2, 782, 787, 5, 152, 77, 2, 783, 784, 7, 13, 2, 2, 784, 786, 5, 152, 77, 2, 785, 783, 3, 2, 2, 2, 786, 789, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 787, 788, 3, 2, 2, 2, 788, 149, 3, 2, 2, 2, 789, 787, 3, 2, 2, 2, 790, 792, 5, 156, 79, 2, 791, 793, 5, 154, 78, 2, 792, 791, 3, 2, 2, 2, 792, 793, 3, 2, 2, 2, 793, 151, 3, 2, 2, 2, 794, 798, 5, 150, 76, 2, 795, 796, 7, 14, 2, 2, 796, 798, 5, 150, 76, 2, 797, 794, 3, 2, 2, 2, 797, 795, 3, 2, 2, 2, 798, 153, 3, 2, 2, 2, 799, 800, 9, 4, 2, 2, 800, 155, 3, 2, 2, 2, 801, 810, 5, 242, 122, 2, 802, 810, 7, 11, 2, 2, 803, 804, 7, 17, 2, 2, 804, 810, 5, 158, 80, 2, 805, 806, 7, 4, 2, 2, 806, 807, 5, 144, 73, 2, 807, 808, 7, 5, 2, 2, 808, 810, 3, 2, 2, 2, 809, 801, 3, 2, 2, 2, 809, 802, 3, 2, 2, 2, 809, 803, 3, 2, 2, 2, 809, 805, 3, 2, 2, 2, 810, 157, 3, 2, 2, 2, 811, 825, 5, 160, 81, 2, 812, 821, 7, 4, 2, 2, 813, 818, 5, 160, 81, 2, 814, 815, 7, 12, 2, 2, 815, 817, 5, 160, 81, 2, 816, 814, 3, 2, 2, 2, 817, 820, 3, 2, 2, 2, 818, 816, 3, 2, 2, 2, 818, 819, 3, 2, 2, 2, 819, 822, 3, 2, 2, 2, 820, 818, 3, 2, 2, 2, 821, 813, 3, 2, 2, 2, 821, 822, 3, 2, 2, 2, 822, 823, 3, 2, 2, 2, 823, 825, 7, 5, 2, 2, 824, 811, 3, 2, 2, 2, 824, 812, 3, 2, 2, 2, 825, 159, 3, 2, 2, 2, 826, 834, 5, 242, 122, 2, 827, 834, 7, 11, 2, 2, 828, 831, 7, 14, 2, 2, 829, 832, 5, 242, 122, 2, 830, 832, 7, 11, 2, 2, 831, 829, 3, 2, 2, 2, 831, 830, 3, 2, 2, 2, 832, 834, 3, 2, 2, 2, 833, 826, 3, 2, 2, 2, 833, 827, 3, 2, 2, 2, 833, 828, 3, 2, 2, 2, 834, 161, 3, 2, 2, 2, 835, 836, 7, 149, 2, 2, 836, 163, 3, 2, 2, 2, 837, 840, 5, 172, 87, 2, 838, 840, 5, 166, 84, 2, 839, 837, 3, 2, 2, 2, 839, 838, 3, 2, 2, 2, 840, 165, 3, 2, 2, 2, 841, 842, 7, 18, 2, 2, 842, 843, 5, 116, 59, 2, 843, 844, 7, 19, 2, 2, 844, 167, 3, 2, 2, 2, 845, 848, 5, 174, 88, 2, 846, 848, 5, 170, 86, 2, 847, 845, 3, 2, 2, 2, 847, 846, 3, 2, 2, 2, 848, 169, 3, 2, 2, 2, 849, 850, 7, 18, 2, 2, 850, 851, 5, 128, 65, 2, 851, 852, 7, 19, 2, 2, 852, 171, 3, 2, 2, 2, 853, 855, 7, 4, 2, 2, 854, 856, 5, 176, 89, 2, 855, 854, 3, 2, 2, 2, 856, 857, 3, 2, 2, 2, 857, 855, 3, 2, 2, 2, 857, 858, 3, 2, 2, 2, 858, 859, 3, 2, 2, 2, 859, 860, 7, 5, 2, 2, 860, 173, 3, 2, 2, 2, 861, 863, 7, 4, 2, 2, 862, 864, 5, 178, 90, 2, 863, 862, 3, 2, 2, 2, 864, 865, 3, 2, 2, 2, 865, 863, 3, 2, 2, 2, 865, 866, 3, 2, 2, 2, 866, 867, 3, 2, 2, 2, 867, 868, 7, 5, 2, 2, 868, 175, 3, 2, 2, 2, 869, 872, 5, 180, 91, 2, 870, 872, 5, 164, 83, 2, 871, 869, 3, 2, 2, 2, 871, 870, 3, 2, 2, 2, 872, 177, 3, 2, 2, 2, 873, 876, 5, 180, 91, 2, 874, 876, 5, 168, 85, 2, 875, 873, 3, 2, 2, 2, 875, 874, 3, 2, 2, 2, 876, 179, 3, 2, 2, 2, 877, 880, 5, 184, 93, 2, 878, 880, 5, 186, 94, 2, 879, 877, 3, 2, 2, 2, 879, 878, 3, 2, 2, 2, 880, 181, 3, 2, 2, 2, 881, 884, 5, 184, 93, 2, 882, 884, 5, 242, 122, 2, 883, 881, 3, 2, 2, 2, 883, 882, 3, 2, 2, 2, 884, 183, 3, 2, 2, 2, 885, 886, 9, 5, 2, 2, 886, 185, 3, 2, 2, 2, 887, 894, 5, 242, 122, 2, 888, 894, 5, 228, 115, 2, 889, 894, 5, 230, 116, 2, 890, 894, 5, 238, 120, 2, 891, 894, 5, 246, 124, 2, 892, 894, 7, 164, 2, 2, 893, 887, 3, 2, 2, 2, 893, 888, 3, 2, 2, 2, 893, 889, 3, 2, 2, 2, 893, 890, 3, 2, 2, 2, 893, 891, 3, 2, 2, 2, 893, 892, 3, 2, 2, 2, 894, 187, 3, 2, 2, 2, 895, 896, 5, 190, 96, 2, 896, 189, 3, 2, 2, 2, 897, 902, 5, 192, 97, 2, 898, 899, 7, 20, 2, 2, 899, 901, 5, 192, 97, 2, 900, 898, 3, 2, 2, 2, 901, 904, 3, 2, 2, 2, 902, 900, 3, 2, 2, 2, 902, 903, 3, 2, 2, 2, 903, 191, 3, 2, 2, 2, 904, 902, 3, 2, 2, 2, 905, 910, 5, 194, 98, 2, 906, 907, 7, 21, 2, 2, 907, 909, 5, 194, 98, 2, 908, 906, 3, 2, 2, 2, 909, 912, 3, 2, 2, 2, 910, 908, 3, 2, 2, 2, 910, 911, 3, 2, 2, 2, 911, 193, 3, 2, 2, 2, 912, 910, 3, 2, 2, 2, 913, 914, 5, 196, 99, 2, 914, 195, 3, 2, 2, 2, 915, 933, 5, 198, 100, 2, 916, 917, 7, 22, 2, 2, 917, 934, 5, 198, 100, 2, 918, 919, 7, 23, 2, 2, 919, 934, 5, 198, 100, 2, 920, 921, 7, 24, 2, 2, 921, 934, 5, 198, 100, 2, 922, 923, 7, 25, 2, 2, 923, 934, 5, 198, 100, 2, 924, 925, 7, 26, 2, 2, 925, 934, 5, 198, 100, 2, 926, 927, 7, 27, 2, 2, 927, 934, 5, 198, 100, 2, 928, 929, 7, 79, 2, 2, 929, 934, 5, 106, 54, 2, 930, 931, 7, 78, 2, 2, 931, 932, 7, 79, 2, 2, 932, 934, 5, 106, 54, 2, 933, 916, 3, 2, 2, 2, 933, 918, 3, 2, 2, 2, 933, 920, 3, 2, 2, 2, 933, 922, 3, 2, 2, 2, 933, 924, 3, 2, 2, 2, 933, 926, 3, 2, 2, 2, 933, 928, 3, 2, 2, 2, 933, 930, 3, 2, 2, 2, 933, 934, 3, 2, 2, 2, 934, 197, 3, 2, 2, 2, 935, 936, 5, 200, 101, 2, 936, 199, 3, 2, 2, 2, 937, 945, 5, 204, 103, 2, 938, 939, 7, 15, 2, 2, 939, 944, 5, 204, 103, 2, 940, 941, 7, 28, 2, 2, 941, 944, 5, 204, 103, 2, 942, 944, 5, 202, 102, 2, 943, 938, 3, 2, 2, 2, 943, 940, 3, 2, 2, 2, 943, 942, 3, 2, 2, 2, 944, 947, 3, 2, 2, 2, 945, 943, 3, 2, 2, 2, 945, 946, 3, 2, 2, 2, 946, 201, 3, 2, 2, 2, 947, 945, 3, 2, 2, 2, 948, 951, 5, 234, 118, 2, 949, 951, 5, 236, 119, 2, 950, 948, 3, 2, 2, 2, 950, 949, 3, 2, 2, 2, 951, 958, 3, 2, 2, 2, 952, 953, 7, 3, 2, 2, 953, 957, 5, 206, 104, 2, 954, 955, 7, 13, 2, 2, 955, 957, 5, 206, 104, 2, 956, 952, 3, 2, 2, 2, 956, 954, 3, 2, 2, 2, 957, 960, 3, 2, 2, 2, 958, 956, 3, 2, 2, 2, 958, 959, 3, 2, 2, 2, 959, 203, 3, 2, 2, 2, 960, 958, 3, 2, 2, 2, 961, 968, 5, 206, 104, 2, 962, 963, 7, 3, 2, 2, 963, 967, 5, 206, 104, 2, 964, 965, 7, 13, 2, 2, 965, 967, 5, 206, 104, 2, 966, 962, 3, 2, 2, 2, 966, 964, 3, 2, 2, 2, 967, 970, 3, 2, 2, 2, 968, 966, 3, 2, 2, 2, 968, 969, 3, 2, 2, 2, 969, 205, 3, 2, 2, 2, 970, 968, 3, 2, 2, 2, 971, 972, 7, 17, 2, 2, 972, 979, 5, 208, 105, 2, 973, 974, 7, 15, 2, 2, 974, 979, 5, 208, 105, 2, 975, 976, 7, 28, 2, 2, 976, 979, 5, 208, 105, 2, 977, 979, 5, 208, 105, 2, 978, 971, 3, 2, 2, 2, 978, 973, 3, 2, 2, 2, 978, 975, 3, 2, 2, 2, 978, 977, 3, 2, 2, 2, 979, 207, 3, 2, 2, 2, 980, 988, 5, 210, 106, 2, 981, 988, 5, 212, 107, 2, 982, 988, 5, 226, 114, 2, 983, 988, 5, 228, 115, 2, 984, 988, 5, 230, 116, 2, 985, 988, 5, 238, 120, 2, 986, 988, 5, 184, 93, 2, 987, 980, 3, 2, 2, 2, 987, 981, 3, 2, 2, 2, 987, 982, 3, 2, 2, 2, 987, 983, 3, 2, 2, 2, 987, 984, 3, 2, 2, 2, 987, 985, 3, 2, 2, 2, 987, 986, 3, 2, 2, 2, 988, 209, 3, 2, 2, 2, 989, 990, 7, 4, 2, 2, 990, 991, 5, 188, 95, 2, 991, 992, 7, 5, 2, 2, 992, 211, 3, 2, 2, 2, 993, 1256, 5, 224, 113, 2, 994, 995, 7, 80, 2, 2, 995, 996, 7, 4, 2, 2, 996, 997, 5, 188, 95, 2, 997, 998, 7, 5, 2, 2, 998, 1256, 3, 2, 2, 2, 999, 1000, 7, 81, 2, 2, 1000, 1001, 7, 4, 2, 2, 1001, 1002, 5, 188, 95, 2, 1002, 1003, 7, 5, 2, 2, 1003, 1256, 3, 2, 2, 2, 1004, 1005, 7, 82, 2, 2, 1005, 1006, 7, 4, 2, 2, 1006, 1007, 5, 188, 95, 2, 1007, 1008, 7, 9, 2, 2, 1008, 1009, 5, 188, 95, 2, 1009, 1010, 7, 5, 2, 2, 1010, 1256, 3, 2, 2, 2, 1011, 1012, 7, 83, 2, 2, 1012, 1013, 7, 4, 2, 2, 1013, 1014, 5, 188, 95, 2, 1014, 1015, 7, 5, 2, 2, 1015, 1256, 3, 2, 2, 2, 1016, 1017, 7, 84, 2, 2, 1017, 1018, 7, 4, 2, 2, 1018, 1019, 5, 184, 93, 2, 1019, 1020, 7, 5, 2, 2, 1020, 1256, 3, 2, 2, 2, 1021, 1022, 7, 85, 2, 2, 1022, 1023, 7, 4, 2, 2, 1023, 1024, 5, 188, 95, 2, 1024, 1025, 7, 5, 2, 2, 1025, 1256, 3, 2, 2, 2, 1026, 1027, 7, 86, 2, 2, 1027, 1028, 7, 4, 2, 2, 1028, 1029, 5, 188, 95, 2, 1029, 1030, 7, 5, 2, 2, 1030, 1256, 3, 2, 2, 2, 1031, 1037, 7, 87, 2, 2, 1032, 1033, 7, 4, 2, 2, 1033, 1034, 5, 188, 95, 2, 1034, 1035, 7, 5, 2, 2, 1035, 1038, 3, 2, 2, 2, 1036, 1038, 7, 164, 2, 2, 1037, 1032, 3, 2, 2, 2, 1037, 1036, 3, 2, 2, 2, 1038, 1256, 3, 2, 2, 2, 1039, 1040, 7, 88, 2, 2, 1040, 1256, 7, 164, 2, 2, 1041, 1042, 7, 89, 2, 2, 1042, 1043, 7, 4, 2, 2, 1043, 1044, 5, 188, 95, 2, 1044, 1045, 7, 5, 2, 2, 1045, 1256, 3, 2, 2, 2, 1046, 1047, 7, 90, 2, 2, 1047, 1048, 7, 4, 2, 2, 1048, 1049, 5, 188, 95, 2, 1049, 1050, 7, 5, 2, 2, 1050, 1256, 3, 2, 2, 2, 1051, 1052, 7, 91, 2, 2, 1052, 1053, 7, 4, 2, 2, 1053, 1054, 5, 188, 95, 2, 1054, 1055, 7, 5, 2, 2, 1055, 1256, 3, 2, 2, 2, 1056, 1057, 7, 92, 2, 2, 1057, 1058, 7, 4, 2, 2, 1058, 1059, 5, 188, 95, 2, 1059, 1060, 7, 5, 2, 2, 1060, 1256, 3, 2, 2, 2, 1061, 1062, 7, 93, 2, 2, 1062, 1256, 5, 106, 54, 2, 1063, 1256, 5, 216, 109, 2, 1064, 1065, 7, 94, 2, 2, 1065, 1066, 7, 4, 2, 2, 1066, 1067, 5, 188, 95, 2, 1067, 1068, 7, 5, 2, 2, 1068, 1256, 3, 2, 2, 2, 1069, 1256, 5, 218, 110, 2, 1070, 1071, 7, 95, 2, 2, 1071, 1072, 7, 4, 2, 2, 1072, 1073, 5, 188, 95, 2, 1073, 1074, 7, 5, 2, 2, 1074, 1256, 3, 2, 2, 2, 1075, 1076, 7, 96, 2, 2, 1076, 1077, 7, 4, 2, 2, 1077, 1078, 5, 188, 95, 2, 1078, 1079, 7, 5, 2, 2, 1079, 1256, 3, 2, 2, 2, 1080, 1081, 7, 97, 2, 2, 1081, 1082, 7, 29, 2, 2, 1082, 1083, 7, 98, 2, 2, 1083, 1084, 7, 29, 2, 2, 1084, 1085, 7, 86, 2, 2, 1085, 1086, 7, 4, 2, 2, 1086, 1087, 5, 188, 95, 2, 1087, 1088, 7, 5, 2, 2, 1088, 1256, 3, 2, 2, 2, 1089, 1090, 7, 99, 2, 2, 1090, 1091, 7, 4, 2, 2, 1091, 1092, 5, 188, 95, 2, 1092, 1093, 7, 9, 2, 2, 1093, 1094, 5, 188, 95, 2, 1094, 1095, 7, 5, 2, 2, 1095, 1256, 3, 2, 2, 2, 1096, 1097, 7, 100, 2, 2, 1097, 1098, 7, 4, 2, 2, 1098, 1099, 5, 188, 95, 2, 1099, 1100, 7, 9, 2, 2, 1100, 1101, 5, 188, 95, 2, 1101, 1102, 7, 5, 2, 2, 1102, 1256, 3, 2, 2, 2, 1103, 1104, 7, 101, 2, 2, 1104, 1105, 7, 4, 2, 2, 1105, 1106, 5, 188, 95, 2, 1106, 1107, 7, 9, 2, 2, 1107, 1108, 5, 188, 95, 2, 1108, 1109, 7, 5, 2, 2, 1109, 1256, 3, 2, 2, 2, 1110, 1111, 7, 102, 2, 2, 1111, 1112, 7, 4, 2, 2, 1112, 1113, 5, 188, 95, 2, 1113, 1114, 7, 9, 2, 2, 1114, 1115, 5, 188, 95, 2, 1115, 1116, 7, 5, 2, 2, 1116, 1256, 3, 2, 2, 2, 1117, 1118, 7, 103, 2, 2, 1118, 1119, 7, 4, 2, 2, 1119, 1120, 5, 188, 95, 2, 1120, 1121, 7, 9, 2, 2, 1121, 1122, 5, 188, 95, 2, 1122, 1123, 7, 5, 2, 2, 1123, 1256, 3, 2, 2, 2, 1124, 1125, 7, 104, 2, 2, 1125, 1126, 7, 4, 2, 2, 1126, 1127, 5, 188, 95, 2, 1127, 1128, 7, 5, 2, 2, 1128, 1256, 3, 2, 2, 2, 1129, 1130, 7, 105, 2, 2, 1130, 1131, 7, 4, 2, 2, 1131, 1132, 5, 188, 95, 2, 1132, 1133, 7, 5, 2, 2, 1133, 1256, 3, 2, 2, 2, 1134, 1135, 7, 106, 2, 2, 1135, 1136, 7, 4, 2, 2, 1136, 1137, 5, 188, 95, 2, 1137, 1138, 7, 5, 2, 2, 1138, 1256, 3, 2, 2, 2, 1139, 1140, 7, 107, 2, 2, 1140, 1141, 7, 4, 2, 2, 1141, 1142, 5, 188, 95, 2, 1142, 1143, 7, 5, 2, 2, 1143, 1256, 3, 2, 2, 2, 1144, 1145, 7, 108, 2, 2, 1145, 1146, 7, 4, 2, 2, 1146, 1147, 5, 188, 95, 2, 1147, 1148, 7, 5, 2, 2, 1148, 1256, 3, 2, 2, 2, 1149, 1150, 7, 109, 2, 2, 1150, 1151, 7, 4, 2, 2, 1151, 1152, 5, 188, 95, 2, 1152, 1153, 7, 5, 2, 2, 1153, 1256, 3, 2, 2, 2, 1154, 1155, 7, 110, 2, 2, 1155, 1156, 7, 4, 2, 2, 1156, 1157, 5, 188, 95, 2, 1157, 1158, 7, 5, 2, 2, 1158, 1256, 3, 2, 2, 2, 1159, 1160, 7, 111, 2, 2, 1160, 1161, 7, 4, 2, 2, 1161, 1162, 5, 188, 95, 2, 1162, 1163, 7, 5, 2, 2, 1163, 1256, 3, 2, 2, 2, 1164, 1165, 7, 112, 2, 2, 1165, 1256, 7, 164, 2, 2, 1166, 1167, 7, 113, 2, 2, 1167, 1256, 7, 164, 2, 2, 1168, 1169, 7, 114, 2, 2, 1169, 1256, 7, 164, 2, 2, 1170, 1171, 7, 119, 2, 2, 1171, 1172, 7, 4, 2, 2, 1172, 1173, 5, 188, 95, 2, 1173, 1174, 7, 5, 2, 2, 1174, 1256, 3, 2, 2, 2, 1175, 1176, 7, 115, 2, 2, 1176, 1177, 7, 4, 2, 2, 1177, 1178, 5, 188, 95, 2, 1178, 1179, 7, 5, 2, 2, 1179, 1256, 3, 2, 2, 2, 1180, 1181, 7, 116, 2, 2, 1181, 1182, 7, 4, 2, 2, 1182, 1183, 5, 188, 95, 2, 1183, 1184, 7, 5, 2, 2, 1184, 1256, 3, 2, 2, 2, 1185, 1186, 7, 117, 2, 2, 1186, 1187, 7, 4, 2, 2, 1187, 1188, 5, 188, 95, 2, 1188, 1189, 7, 5, 2, 2, 1189, 1256, 3, 2, 2, 2, 1190, 1191, 7, 118, 2, 2, 1191, 1192, 7, 4, 2, 2, 1192, 1193, 5, 188, 95, 2, 1193, 1194, 7, 5, 2, 2, 1194, 1256, 3, 2, 2, 2, 1195, 1196, 7, 120, 2, 2, 1196, 1256, 5, 106, 54, 2, 1197, 1198, 7, 121, 2, 2, 1198, 1199, 7, 4, 2, 2, 1199, 1200, 5, 188, 95, 2, 1200, 1201, 7, 9, 2, 2, 1201, 1202, 5, 188, 95, 2, 1202, 1203, 7, 9, 2, 2, 1203, 1204, 5, 188, 95, 2, 1204, 1205, 7, 5, 2, 2, 1205, 1256, 3, 2, 2, 2, 1206, 1207, 7, 122, 2, 2, 1207, 1208, 7, 4, 2, 2, 1208, 1209, 5, 188, 95, 2, 1209, 1210, 7, 9, 2, 2, 1210, 1211, 5, 188, 95, 2, 1211, 1212, 7, 5, 2, 2, 1212, 1256, 3, 2, 2, 2, 1213, 1214, 7, 123, 2, 2, 1214, 1215, 7, 4, 2, 2, 1215, 1216, 5, 188, 95, 2, 1216, 1217, 7, 9, 2, 2, 1217, 1218, 5, 188, 95, 2, 1218, 1219, 7, 5, 2, 2, 1219, 1256, 3, 2, 2, 2, 1220, 1221, 7, 124, 2, 2, 1221, 1222, 7, 4, 2, 2, 1222, 1223, 5, 188, 95, 2, 1223, 1224, 7, 9, 2, 2, 1224, 1225, 5, 188, 95, 2, 1225, 1226, 7, 5, 2, 2, 1226, 1256, 3, 2, 2, 2, 1227, 1228, 7, 125, 2, 2, 1228, 1229, 7, 4, 2, 2, 1229, 1230, 5, 188, 95, 2, 1230, 1231, 7, 5, 2, 2, 1231, 1256, 3, 2, 2, 2, 1232, 1233, 7, 126, 2, 2, 1233, 1234, 7, 4, 2, 2, 1234, 1235, 5, 188, 95, 2, 1235, 1236, 7, 5, 2, 2, 1236, 1256, 3, 2, 2, 2, 1237, 1238, 7, 127, 2, 2, 1238, 1239, 7, 4, 2, 2, 1239, 1240, 5, 188, 95, 2, 1240, 1241, 7, 5, 2, 2, 1241, 1256, 3, 2, 2, 2, 1242, 1243, 7, 128, 2, 2, 1243, 1244, 7, 4, 2, 2, 1244, 1245, 5, 188, 95, 2, 1245, 1246, 7, 5, 2, 2, 1246, 1256, 3, 2, 2, 2, 1247, 1248, 7, 129, 2, 2, 1248, 1249, 7, 4, 2, 2, 1249, 1250, 5, 188, 95, 2, 1250, 1251, 7, 5, 2, 2, 1251, 1256, 3, 2, 2, 2, 1252, 1256, 5, 214, 108, 2, 1253, 1256, 5, 220, 111, 2, 1254, 1256, 5, 222, 112, 2, 1255, 993, 3, 2, 2, 2, 1255, 994, 3, 2, 2, 2, 1255, 999, 3, 2, 2, 2, 1255, 1004, 3, 2, 2, 2, 1255, 1011, 3, 2, 2, 2, 1255, 1016, 3, 2, 2, 2, 1255, 1021, 3, 2, 2, 2, 1255, 1026, 3, 2, 2, 2, 1255, 1031, 3, 2, 2, 2, 1255, 1039, 3, 2, 2, 2, 1255, 1041, 3, 2, 2, 2, 1255, 1046, 3, 2, 2, 2, 1255, 1051, 3, 2, 2, 2, 1255, 1056, 3, 2, 2, 2, 1255, 1061, 3, 2, 2, 2, 1255, 1063, 3, 2, 2, 2, 1255, 1064, 3, 2, 2, 2, 1255, 1069, 3, 2, 2, 2, 1255, 1070, 3, 2, 2, 2, 1255, 1075, 3, 2, 2, 2, 1255, 1080, 3, 2, 2, 2, 1255, 1089, 3, 2, 2, 2, 1255, 1096, 3, 2, 2, 2, 1255, 1103, 3, 2, 2, 2, 1255, 1110, 3, 2, 2, 2, 1255, 1117, 3, 2, 2, 2, 1255, 1124, 3, 2, 2, 2, 1255, 1129, 3, 2, 2, 2, 1255, 1134, 3, 2, 2, 2, 1255, 1139, 3, 2, 2, 2, 1255, 1144, 3, 2, 2, 2, 1255, 1149, 3, 2, 2, 2, 1255, 1154, 3, 2, 2, 2, 1255, 1159, 3, 2, 2, 2, 1255, 1164, 3, 2, 2, 2, 1255, 1166, 3, 2, 2, 2, 1255, 1168, 3, 2, 2, 2, 1255, 1170, 3, 2, 2, 2, 1255, 1175, 3, 2, 2, 2, 1255, 1180, 3, 2, 2, 2, 1255, 1185, 3, 2, 2, 2, 1255, 1190, 3, 2, 2, 2, 1255, 1195, 3, 2, 2, 2, 1255, 1197, 3, 2, 2, 2, 1255, 1206, 3, 2, 2, 2, 1255, 1213, 3, 2, 2, 2, 1255, 1220, 3, 2, 2, 2, 1255, 1227, 3, 2, 2, 2, 1255, 1232, 3, 2, 2, 2, 1255, 1237, 3, 2, 2, 2, 1255, 1242, 3, 2, 2, 2, 1255, 1247, 3, 2, 2, 2, 1255, 1252, 3, 2, 2, 2, 1255, 1253, 3, 2, 2, 2, 1255, 1254, 3, 2, 2, 2, 1256, 213, 3, 2, 2, 2, 1257, 1258, 7, 130, 2, 2, 1258, 1259, 7, 4, 2, 2, 1259, 1260, 5, 188, 95, 2, 1260, 1261, 7, 9, 2, 2, 1261, 1264, 5, 188, 95, 2, 1262, 1263, 7, 9, 2, 2, 1263, 1265, 5, 188, 95, 2, 1264, 1262, 3, 2, 2, 2, 1264, 1265, 3, 2, 2, 2, 1265, 1266, 3, 2, 2, 2, 1266, 1267, 7, 5, 2, 2, 1267, 215, 3, 2, 2, 2, 1268, 1269, 7, 131, 2, 2, 1269, 1270, 7, 4, 2, 2, 1270, 1271, 5, 188, 95, 2, 1271, 1272, 7, 9, 2, 2, 1272, 1275, 5, 188, 95, 2, 1273, 1274, 7, 9, 2, 2, 1274, 1276, 5, 188, 95, 2, 1275, 1273, 3, 2, 2, 2, 1275, 1276, 3, 2, 2, 2, 1276, 1277, 3, 2, 2, 2, 1277, 1278, 7, 5, 2, 2, 1278, 217, 3, 2, 2, 2, 1279, 1280, 7, 132, 2, 2, 1280, 1281, 7, 4, 2, 2, 1281, 1282, 5, 188, 95, 2, 1282, 1283, 7, 9, 2, 2, 1283, 1284, 5, 188, 95, 2, 1284, 1285, 7, 9, 2, 2, 1285, 1288, 5, 188, 95, 2, 1286, 1287, 7, 9, 2, 2, 1287, 1289, 5, 188, 95, 2, 1288, 1286, 3, 2, 2, 2, 1288, 1289, 3, 2, 2, 2, 1289, 1290, 3, 2, 2, 2, 1290, 1291, 7, 5, 2, 2, 1291, 219, 3, 2, 2, 2, 1292, 1293, 7, 133, 2, 2, 1293, 1294, 5, 64, 33, 2, 1294, 221, 3, 2, 2, 2, 1295, 1296, 7, 78, 2, 2, 1296, 1297, 7, 133, 2, 2, 1297, 1298, 5, 64, 33, 2, 1298, 223, 3, 2, 2, 2, 1299, 1300, 7, 134, 2, 2, 1300, 1302, 7, 4, 2, 2, 1301, 1303, 7, 36, 2, 2, 1302, 1301, 3, 2, 2, 2, 1302, 1303, 3, 2, 2, 2, 1303, 1306, 3, 2, 2, 2, 1304, 1307, 7, 3, 2, 2, 1305, 1307, 5, 188, 95, 2, 1306, 1304, 3, 2, 2, 2, 1306, 1305, 3, 2, 2, 2, 1307, 1308, 3, 2, 2, 2, 1308, 1364, 7, 5, 2, 2, 1309, 1310, 7, 135, 2, 2, 1310, 1312, 7, 4, 2, 2, 1311, 1313, 7, 36, 2, 2, 1312, 1311, 3, 2, 2, 2, 1312, 1313, 3, 2, 2, 2, 1313, 1314, 3, 2, 2, 2, 1314, 1315, 5, 188, 95, 2, 1315, 1316, 7, 5, 2, 2, 1316, 1364, 3, 2, 2, 2, 1317, 1318, 7, 136, 2, 2, 1318, 1320, 7, 4, 2, 2, 1319, 1321, 7, 36, 2, 2, 1320, 1319, 3, 2, 2, 2, 1320, 1321, 3, 2, 2, 2, 1321, 1322, 3, 2, 2, 2, 1322, 1323, 5, 188, 95, 2, 1323, 1324, 7, 5, 2, 2, 1324, 1364, 3, 2, 2, 2, 1325, 1326, 7, 137, 2, 2, 1326, 1328, 7, 4, 2, 2, 1327, 1329, 7, 36, 2, 2, 1328, 1327, 3, 2, 2, 2, 1328, 1329, 3, 2, 2, 2, 1329, 1330, 3, 2, 2, 2, 1330, 1331, 5, 188, 95, 2, 1331, 1332, 7, 5, 2, 2, 1332, 1364, 3, 2, 2, 2, 1333, 1334, 7, 138, 2, 2, 1334, 1336, 7, 4, 2, 2, 1335, 1337, 7, 36, 2, 2, 1336, 1335, 3, 2, 2, 2, 1336, 1337, 3, 2, 2, 2, 1337, 1338, 3, 2, 2, 2, 1338, 1339, 5, 188, 95, 2, 1339, 1340, 7, 5, 2, 2, 1340, 1364, 3, 2, 2, 2, 1341, 1342, 7, 139, 2, 2, 1342, 1344, 7, 4, 2, 2, 1343, 1345, 7, 36, 2, 2, 1344, 1343, 3, 2, 2, 2, 1344, 1345, 3, 2, 2, 2, 1345, 1346, 3, 2, 2, 2, 1346, 1347, 5, 188, 95, 2, 1347, 1348, 7, 5, 2, 2, 1348, 1364, 3, 2, 2, 2, 1349, 1350, 7, 46, 2, 2, 1350, 1352, 7, 4, 2, 2, 1351, 1353, 7, 36, 2, 2, 1352, 1351, 3, 2, 2, 2, 1352, 1353, 3, 2, 2, 2, 1353, 1354, 3, 2, 2, 2, 1354, 1359, 5, 188, 95, 2, 1355, 1356, 7, 10, 2, 2, 1356, 1357, 7, 140, 2, 2, 1357, 1358, 7, 22, 2, 2, 1358, 1360, 5, 240, 121, 2, 1359, 1355, 3, 2, 2, 2, 1359, 1360, 3, 2, 2, 2, 1360, 1361, 3, 2, 2, 2, 1361, 1362, 7, 5, 2, 2, 1362, 1364, 3, 2, 2, 2, 1363, 1299, 3, 2, 2, 2, 1363, 1309, 3, 2, 2, 2, 1363, 1317, 3, 2, 2, 2, 1363, 1325, 3, 2, 2, 2, 1363, 1333, 3, 2, 2, 2, 1363, 1341, 3, 2, 2, 2, 1363, 1349, 3, 2, 2, 2, 1364, 225, 3, 2, 2, 2, 1365, 1367, 5, 242, 122, 2, 1366, 1368, 5, 104, 53, 2, 1367, 1366, 3, 2, 2, 2, 1367, 1368, 3, 2, 2, 2, 1368, 227, 3, 2, 2, 2, 1369, 1373, 5, 240, 121, 2, 1370, 1374, 7, 147, 2, 2, 1371, 1372, 7, 30, 2, 2, 1372, 1374, 5, 242, 122, 2, 1373, 1370, 3, 2, 2, 2, 1373, 1371, 3, 2, 2, 2, 1373, 1374, 3, 2, 2, 2, 1374, 229, 3, 2, 2, 2, 1375, 1379, 5, 232, 117, 2, 1376, 1379, 5, 234, 118, 2, 1377, 1379, 5, 236, 119, 2, 1378, 1375, 3, 2, 2, 2, 1378, 1376, 3, 2, 2, 2, 1378, 1377, 3, 2, 2, 2, 1379, 231, 3, 2, 2, 2, 1380, 1381, 9, 6, 2, 2, 1381, 233, 3, 2, 2, 2, 1382, 1383, 9, 7, 2, 2, 1383, 235, 3, 2, 2, 2, 1384, 1385, 9, 8, 2, 2, 1385, 237, 3, 2, 2, 2, 1386, 1387, 9, 9, 2, 2, 1387, 239, 3, 2, 2, 2, 1388, 1389, 9, 10, 2, 2, 1389, 241, 3, 2, 2, 2, 1390, 1392, 7, 148, 2, 2, 1391, 1390, 3, 2, 2, 2, 1391, 1392, 3, 2, 2, 2, 1392, 1395, 3, 2, 2, 2, 1393, 1396, 5, 248, 125, 2, 1394, 1396, 5, 244, 123, 2, 1395, 1393, 3, 2, 2, 2, 1395, 1394, 3, 2, 2, 2, 1396, 243, 3, 2, 2, 2, 1397, 1400, 5, 250, 126, 2, 1398, 1400, 5, 252, 127, 2, 1399, 1397, 3, 2, 2, 2, 1399, 1398, 3, 2, 2, 2, 1400, 245, 3, 2, 2, 2, 1401, 1402, 9, 11, 2, 2, 1402, 247, 3, 2, 2, 2, 1403, 1404, 7, 141, 2, 2, 1404, 249, 3, 2, 2, 2, 1405, 1406, 7, 143, 2, 2, 1406, 251, 3, 2, 2, 2, 1407, 1408, 7, 142, 2, 2, 1408, 253, 3, 2, 2, 2, 139, 259, 266, 268, 282, 295, 300, 303, 307, 322, 331, 337, 341, 347, 350, 355, 359, 367, 376, 386, 391, 394, 397, 400, 406, 414, 419, 425, 433, 439, 441, 445, 448, 452, 455, 459, 462, 466, 469, 473, 476, 480, 483, 485, 498, 503, 505, 510, 515, 520, 525, 528, 533, 535, 545, 556, 573, 580, 590, 594, 600, 609, 614, 621, 631, 640, 648, 655, 660, 669, 674, 678, 685, 687, 695, 698, 706, 710, 715, 722, 733, 736, 741, 745, 760, 767, 779, 787, 792, 797, 809, 818, 821, 824, 831, 833, 839, 847, 857, 865, 871, 875, 879, 883, 893, 902, 910, 933, 943, 945, 950, 956, 958, 966, 968, 978, 987, 1037, 1255, 1264, 1275, 1288, 1302, 1306, 1312, 1320, 1328, 1336, 1344, 1352, 1359, 1363, 1367, 1373, 1378, 1391, 1395, 1399] \ No newline at end of file diff --git a/src/parser/sparqlParser/generated/SparqlAutomaticBaseListener.h b/src/parser/sparqlParser/generated/SparqlAutomaticBaseListener.h index 51dacd25ef..538028d75f 100644 --- a/src/parser/sparqlParser/generated/SparqlAutomaticBaseListener.h +++ b/src/parser/sparqlParser/generated/SparqlAutomaticBaseListener.h @@ -178,6 +178,13 @@ class SparqlAutomaticBaseListener : public SparqlAutomaticListener { virtual void exitGroupGraphPatternSub( SparqlAutomaticParser::GroupGraphPatternSubContext* /*ctx*/) override {} + virtual void enterGraphPatternNotTriplesAndMaybeTriples( + SparqlAutomaticParser:: + GraphPatternNotTriplesAndMaybeTriplesContext* /*ctx*/) override {} + virtual void exitGraphPatternNotTriplesAndMaybeTriples( + SparqlAutomaticParser:: + GraphPatternNotTriplesAndMaybeTriplesContext* /*ctx*/) override {} + virtual void enterTriplesBlock( SparqlAutomaticParser::TriplesBlockContext* /*ctx*/) override {} virtual void exitTriplesBlock( diff --git a/src/parser/sparqlParser/generated/SparqlAutomaticBaseVisitor.h b/src/parser/sparqlParser/generated/SparqlAutomaticBaseVisitor.h index dc70efbea5..f061d16f3b 100644 --- a/src/parser/sparqlParser/generated/SparqlAutomaticBaseVisitor.h +++ b/src/parser/sparqlParser/generated/SparqlAutomaticBaseVisitor.h @@ -178,6 +178,12 @@ class SparqlAutomaticBaseVisitor : public SparqlAutomaticVisitor { return visitChildren(ctx); } + virtual antlrcpp::Any visitGraphPatternNotTriplesAndMaybeTriples( + SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext* ctx) + override { + return visitChildren(ctx); + } + virtual antlrcpp::Any visitTriplesBlock( SparqlAutomaticParser::TriplesBlockContext* ctx) override { return visitChildren(ctx); diff --git a/src/parser/sparqlParser/generated/SparqlAutomaticListener.h b/src/parser/sparqlParser/generated/SparqlAutomaticListener.h index 083036b3a7..ccf5d8fb32 100644 --- a/src/parser/sparqlParser/generated/SparqlAutomaticListener.h +++ b/src/parser/sparqlParser/generated/SparqlAutomaticListener.h @@ -165,6 +165,13 @@ class SparqlAutomaticListener : public antlr4::tree::ParseTreeListener { virtual void exitGroupGraphPatternSub( SparqlAutomaticParser::GroupGraphPatternSubContext* ctx) = 0; + virtual void enterGraphPatternNotTriplesAndMaybeTriples( + SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext* + ctx) = 0; + virtual void exitGraphPatternNotTriplesAndMaybeTriples( + SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext* + ctx) = 0; + virtual void enterTriplesBlock( SparqlAutomaticParser::TriplesBlockContext* ctx) = 0; virtual void exitTriplesBlock( diff --git a/src/parser/sparqlParser/generated/SparqlAutomaticParser.cpp b/src/parser/sparqlParser/generated/SparqlAutomaticParser.cpp index 5f015e3cab..0038145df1 100644 --- a/src/parser/sparqlParser/generated/SparqlAutomaticParser.cpp +++ b/src/parser/sparqlParser/generated/SparqlAutomaticParser.cpp @@ -108,31 +108,31 @@ SparqlAutomaticParser::QueryContext* SparqlAutomaticParser::query() { }); try { enterOuterAlt(_localctx, 1); - setState(250); + setState(252); prologue(); - setState(255); + setState(257); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::SELECT: { - setState(251); + setState(253); selectQuery(); break; } case SparqlAutomaticParser::CONSTRUCT: { - setState(252); + setState(254); constructQuery(); break; } case SparqlAutomaticParser::DESCRIBE: { - setState(253); + setState(255); describeQuery(); break; } case SparqlAutomaticParser::ASK: { - setState(254); + setState(256); askQuery(); break; } @@ -140,9 +140,9 @@ SparqlAutomaticParser::QueryContext* SparqlAutomaticParser::query() { default: throw NoViableAltException(this); } - setState(257); + setState(259); valuesClause(); - setState(258); + setState(260); match(SparqlAutomaticParser::EOF); } catch (RecognitionException& e) { @@ -220,23 +220,23 @@ SparqlAutomaticParser::PrologueContext* SparqlAutomaticParser::prologue() { }); try { enterOuterAlt(_localctx, 1); - setState(264); + setState(266); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::BASE || _la == SparqlAutomaticParser::PREFIX) { - setState(262); + setState(264); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::BASE: { - setState(260); + setState(262); baseDecl(); break; } case SparqlAutomaticParser::PREFIX: { - setState(261); + setState(263); prefixDecl(); break; } @@ -244,7 +244,7 @@ SparqlAutomaticParser::PrologueContext* SparqlAutomaticParser::prologue() { default: throw NoViableAltException(this); } - setState(266); + setState(268); _errHandler->sync(this); _la = _input->LA(1); } @@ -312,9 +312,9 @@ SparqlAutomaticParser::BaseDeclContext* SparqlAutomaticParser::baseDecl() { }); try { enterOuterAlt(_localctx, 1); - setState(267); + setState(269); match(SparqlAutomaticParser::BASE); - setState(268); + setState(270); iriref(); } catch (RecognitionException& e) { @@ -384,11 +384,11 @@ SparqlAutomaticParser::PrefixDeclContext* SparqlAutomaticParser::prefixDecl() { }); try { enterOuterAlt(_localctx, 1); - setState(270); + setState(272); match(SparqlAutomaticParser::PREFIX); - setState(271); + setState(273); match(SparqlAutomaticParser::PNAME_NS); - setState(272); + setState(274); iriref(); } catch (RecognitionException& e) { @@ -472,21 +472,21 @@ SparqlAutomaticParser::selectQuery() { }); try { enterOuterAlt(_localctx, 1); - setState(274); + setState(276); selectClause(); - setState(278); + setState(280); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::FROM) { - setState(275); + setState(277); datasetClause(); - setState(280); + setState(282); _errHandler->sync(this); _la = _input->LA(1); } - setState(281); + setState(283); whereClause(); - setState(282); + setState(284); solutionModifier(); } catch (RecognitionException& e) { @@ -563,13 +563,13 @@ SparqlAutomaticParser::SubSelectContext* SparqlAutomaticParser::subSelect() { }); try { enterOuterAlt(_localctx, 1); - setState(284); + setState(286); selectClause(); - setState(285); + setState(287); whereClause(); - setState(286); + setState(288); solutionModifier(); - setState(287); + setState(289); valuesClause(); } catch (RecognitionException& e) { @@ -650,16 +650,16 @@ SparqlAutomaticParser::selectClause() { }); try { enterOuterAlt(_localctx, 1); - setState(289); - match(SparqlAutomaticParser::SELECT); setState(291); + match(SparqlAutomaticParser::SELECT); + setState(293); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT || _la == SparqlAutomaticParser::REDUCED) { - setState(290); + setState(292); _la = _input->LA(1); if (!(_la == SparqlAutomaticParser::DISTINCT @@ -670,19 +670,19 @@ SparqlAutomaticParser::selectClause() { consume(); } } - setState(299); + setState(301); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { - setState(294); + setState(296); _errHandler->sync(this); _la = _input->LA(1); do { - setState(293); + setState(295); varOrAlias(); - setState(296); + setState(298); _errHandler->sync(this); _la = _input->LA(1); } while (_la == SparqlAutomaticParser::T__1 || @@ -693,7 +693,7 @@ SparqlAutomaticParser::selectClause() { } case SparqlAutomaticParser::T__0: { - setState(298); + setState(300); dynamic_cast(_localctx)->asterisk = match(SparqlAutomaticParser::T__0); break; @@ -766,20 +766,20 @@ SparqlAutomaticParser::VarOrAliasContext* SparqlAutomaticParser::varOrAlias() { exitRule(); }); try { - setState(303); + setState(305); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { enterOuterAlt(_localctx, 1); - setState(301); + setState(303); var(); break; } case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 2); - setState(302); + setState(304); alias(); break; } @@ -847,11 +847,11 @@ SparqlAutomaticParser::AliasContext* SparqlAutomaticParser::alias() { }); try { enterOuterAlt(_localctx, 1); - setState(305); + setState(307); match(SparqlAutomaticParser::T__1); - setState(306); + setState(308); aliasWithoutBrackets(); - setState(307); + setState(309); match(SparqlAutomaticParser::T__2); } catch (RecognitionException& e) { @@ -925,11 +925,11 @@ SparqlAutomaticParser::aliasWithoutBrackets() { }); try { enterOuterAlt(_localctx, 1); - setState(309); + setState(311); expression(); - setState(310); + setState(312); match(SparqlAutomaticParser::AS); - setState(311); + setState(313); var(); } catch (RecognitionException& e) { @@ -1026,48 +1026,48 @@ SparqlAutomaticParser::constructQuery() { }); try { enterOuterAlt(_localctx, 1); - setState(313); + setState(315); match(SparqlAutomaticParser::CONSTRUCT); - setState(337); + setState(339); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__3: { - setState(314); + setState(316); constructTemplate(); - setState(318); + setState(320); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::FROM) { - setState(315); + setState(317); datasetClause(); - setState(320); + setState(322); _errHandler->sync(this); _la = _input->LA(1); } - setState(321); + setState(323); whereClause(); - setState(322); + setState(324); solutionModifier(); break; } case SparqlAutomaticParser::WHERE: case SparqlAutomaticParser::FROM: { - setState(327); + setState(329); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::FROM) { - setState(324); + setState(326); datasetClause(); - setState(329); + setState(331); _errHandler->sync(this); _la = _input->LA(1); } - setState(330); + setState(332); match(SparqlAutomaticParser::WHERE); - setState(331); - match(SparqlAutomaticParser::T__3); setState(333); + match(SparqlAutomaticParser::T__3); + setState(335); _errHandler->sync(this); _la = _input->LA(1); @@ -1100,12 +1100,12 @@ SparqlAutomaticParser::constructQuery() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | (1ULL << (SparqlAutomaticParser::NIL - 139)) | (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)) { - setState(332); + setState(334); triplesTemplate(); } - setState(335); + setState(337); match(SparqlAutomaticParser::T__4); - setState(336); + setState(338); solutionModifier(); break; } @@ -1204,9 +1204,9 @@ SparqlAutomaticParser::describeQuery() { }); try { enterOuterAlt(_localctx, 1); - setState(339); + setState(341); match(SparqlAutomaticParser::DESCRIBE); - setState(346); + setState(348); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: @@ -1215,13 +1215,13 @@ SparqlAutomaticParser::describeQuery() { case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: case SparqlAutomaticParser::PREFIX_LANGTAG: { - setState(341); + setState(343); _errHandler->sync(this); _la = _input->LA(1); do { - setState(340); + setState(342); varOrIri(); - setState(343); + setState(345); _errHandler->sync(this); _la = _input->LA(1); } while ( @@ -1237,7 +1237,7 @@ SparqlAutomaticParser::describeQuery() { } case SparqlAutomaticParser::T__0: { - setState(345); + setState(347); match(SparqlAutomaticParser::T__0); break; } @@ -1245,27 +1245,27 @@ SparqlAutomaticParser::describeQuery() { default: throw NoViableAltException(this); } - setState(351); + setState(353); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::FROM) { - setState(348); + setState(350); datasetClause(); - setState(353); + setState(355); _errHandler->sync(this); _la = _input->LA(1); } - setState(355); + setState(357); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__3 || _la == SparqlAutomaticParser::WHERE) { - setState(354); + setState(356); whereClause(); } - setState(357); + setState(359); solutionModifier(); } catch (RecognitionException& e) { @@ -1347,21 +1347,21 @@ SparqlAutomaticParser::AskQueryContext* SparqlAutomaticParser::askQuery() { }); try { enterOuterAlt(_localctx, 1); - setState(359); + setState(361); match(SparqlAutomaticParser::ASK); - setState(363); + setState(365); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::FROM) { - setState(360); + setState(362); datasetClause(); - setState(365); + setState(367); _errHandler->sync(this); _la = _input->LA(1); } - setState(366); + setState(368); whereClause(); - setState(367); + setState(369); solutionModifier(); } catch (RecognitionException& e) { @@ -1433,22 +1433,22 @@ SparqlAutomaticParser::datasetClause() { }); try { enterOuterAlt(_localctx, 1); - setState(369); + setState(371); match(SparqlAutomaticParser::FROM); - setState(372); + setState(374); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: case SparqlAutomaticParser::PNAME_NS: case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { - setState(370); + setState(372); defaultGraphClause(); break; } case SparqlAutomaticParser::NAMED: { - setState(371); + setState(373); namedGraphClause(); break; } @@ -1517,7 +1517,7 @@ SparqlAutomaticParser::defaultGraphClause() { }); try { enterOuterAlt(_localctx, 1); - setState(374); + setState(376); sourceSelector(); } catch (RecognitionException& e) { @@ -1584,9 +1584,9 @@ SparqlAutomaticParser::namedGraphClause() { }); try { enterOuterAlt(_localctx, 1); - setState(376); + setState(378); match(SparqlAutomaticParser::NAMED); - setState(377); + setState(379); sourceSelector(); } catch (RecognitionException& e) { @@ -1649,7 +1649,7 @@ SparqlAutomaticParser::sourceSelector() { }); try { enterOuterAlt(_localctx, 1); - setState(379); + setState(381); iri(); } catch (RecognitionException& e) { @@ -1717,15 +1717,15 @@ SparqlAutomaticParser::whereClause() { }); try { enterOuterAlt(_localctx, 1); - setState(382); + setState(384); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::WHERE) { - setState(381); + setState(383); match(SparqlAutomaticParser::WHERE); } - setState(384); + setState(386); groupGraphPattern(); } catch (RecognitionException& e) { @@ -1804,31 +1804,31 @@ SparqlAutomaticParser::solutionModifier() { }); try { enterOuterAlt(_localctx, 1); - setState(387); + setState(389); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::GROUPBY) { - setState(386); + setState(388); groupClause(); } - setState(390); + setState(392); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::HAVING) { - setState(389); + setState(391); havingClause(); } - setState(393); + setState(395); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::ORDERBY) { - setState(392); + setState(394); orderClause(); } - setState(396); + setState(398); _errHandler->sync(this); _la = _input->LA(1); @@ -1836,7 +1836,7 @@ SparqlAutomaticParser::solutionModifier() { ((1ULL << _la) & ((1ULL << SparqlAutomaticParser::LIMIT) | (1ULL << SparqlAutomaticParser::OFFSET) | (1ULL << SparqlAutomaticParser::TEXTLIMIT))) != 0)) { - setState(395); + setState(397); limitOffsetClauses(); } @@ -1910,15 +1910,15 @@ SparqlAutomaticParser::groupClause() { }); try { enterOuterAlt(_localctx, 1); - setState(398); - match(SparqlAutomaticParser::GROUPBY); setState(400); + match(SparqlAutomaticParser::GROUPBY); + setState(402); _errHandler->sync(this); _la = _input->LA(1); do { - setState(399); + setState(401); groupCondition(); - setState(402); + setState(404); _errHandler->sync(this); _la = _input->LA(1); } while ( @@ -2075,7 +2075,7 @@ SparqlAutomaticParser::groupCondition() { exitRule(); }); try { - setState(415); + setState(417); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::GROUP_CONCAT: @@ -2140,7 +2140,7 @@ SparqlAutomaticParser::groupCondition() { case SparqlAutomaticParser::AVG: case SparqlAutomaticParser::SAMPLE: { enterOuterAlt(_localctx, 1); - setState(404); + setState(406); builtInCall(); break; } @@ -2150,28 +2150,28 @@ SparqlAutomaticParser::groupCondition() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 2); - setState(405); + setState(407); functionCall(); break; } case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 3); - setState(406); + setState(408); match(SparqlAutomaticParser::T__1); - setState(407); + setState(409); expression(); - setState(410); + setState(412); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::AS) { - setState(408); + setState(410); match(SparqlAutomaticParser::AS); - setState(409); + setState(411); var(); } - setState(412); + setState(414); match(SparqlAutomaticParser::T__2); break; } @@ -2179,7 +2179,7 @@ SparqlAutomaticParser::groupCondition() { case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { enterOuterAlt(_localctx, 4); - setState(414); + setState(416); var(); break; } @@ -2258,15 +2258,15 @@ SparqlAutomaticParser::havingClause() { }); try { enterOuterAlt(_localctx, 1); - setState(417); - match(SparqlAutomaticParser::HAVING); setState(419); + match(SparqlAutomaticParser::HAVING); + setState(421); _errHandler->sync(this); _la = _input->LA(1); do { - setState(418); + setState(420); havingCondition(); - setState(421); + setState(423); _errHandler->sync(this); _la = _input->LA(1); } while ( @@ -2402,7 +2402,7 @@ SparqlAutomaticParser::havingCondition() { }); try { enterOuterAlt(_localctx, 1); - setState(423); + setState(425); constraint(); } catch (RecognitionException& e) { @@ -2475,15 +2475,15 @@ SparqlAutomaticParser::orderClause() { }); try { enterOuterAlt(_localctx, 1); - setState(425); - match(SparqlAutomaticParser::ORDERBY); setState(427); + match(SparqlAutomaticParser::ORDERBY); + setState(429); _errHandler->sync(this); _la = _input->LA(1); do { - setState(426); + setState(428); orderCondition(); - setState(429); + setState(431); _errHandler->sync(this); _la = _input->LA(1); } while ( @@ -2641,13 +2641,13 @@ SparqlAutomaticParser::orderCondition() { exitRule(); }); try { - setState(437); + setState(439); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::ASC: case SparqlAutomaticParser::DESC: { enterOuterAlt(_localctx, 1); - setState(431); + setState(433); _la = _input->LA(1); if (!(_la == SparqlAutomaticParser::ASC @@ -2657,7 +2657,7 @@ SparqlAutomaticParser::orderCondition() { _errHandler->reportMatch(this); consume(); } - setState(432); + setState(434); brackettedExpression(); break; } @@ -2731,7 +2731,7 @@ SparqlAutomaticParser::orderCondition() { case SparqlAutomaticParser::VAR2: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 2); - setState(435); + setState(437); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: @@ -2800,14 +2800,14 @@ SparqlAutomaticParser::orderCondition() { case SparqlAutomaticParser::PNAME_NS: case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { - setState(433); + setState(435); constraint(); break; } case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { - setState(434); + setState(436); var(); break; } @@ -2892,28 +2892,28 @@ SparqlAutomaticParser::limitOffsetClauses() { exitRule(); }); try { - setState(481); + setState(483); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict( _input, 42, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(439); - limitClause(); setState(441); + limitClause(); + setState(443); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::OFFSET) { - setState(440); + setState(442); offsetClause(); } - setState(444); + setState(446); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::TEXTLIMIT) { - setState(443); + setState(445); textLimitClause(); } break; @@ -2921,22 +2921,22 @@ SparqlAutomaticParser::limitOffsetClauses() { case 2: { enterOuterAlt(_localctx, 2); - setState(446); - limitClause(); setState(448); + limitClause(); + setState(450); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::TEXTLIMIT) { - setState(447); + setState(449); textLimitClause(); } - setState(451); + setState(453); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::OFFSET) { - setState(450); + setState(452); offsetClause(); } break; @@ -2944,22 +2944,22 @@ SparqlAutomaticParser::limitOffsetClauses() { case 3: { enterOuterAlt(_localctx, 3); - setState(453); - offsetClause(); setState(455); + offsetClause(); + setState(457); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::LIMIT) { - setState(454); + setState(456); limitClause(); } - setState(458); + setState(460); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::TEXTLIMIT) { - setState(457); + setState(459); textLimitClause(); } break; @@ -2967,22 +2967,22 @@ SparqlAutomaticParser::limitOffsetClauses() { case 4: { enterOuterAlt(_localctx, 4); - setState(460); - offsetClause(); setState(462); + offsetClause(); + setState(464); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::TEXTLIMIT) { - setState(461); + setState(463); textLimitClause(); } - setState(465); + setState(467); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::LIMIT) { - setState(464); + setState(466); limitClause(); } break; @@ -2990,22 +2990,22 @@ SparqlAutomaticParser::limitOffsetClauses() { case 5: { enterOuterAlt(_localctx, 5); - setState(467); - textLimitClause(); setState(469); + textLimitClause(); + setState(471); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::OFFSET) { - setState(468); + setState(470); offsetClause(); } - setState(472); + setState(474); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::LIMIT) { - setState(471); + setState(473); limitClause(); } break; @@ -3013,22 +3013,22 @@ SparqlAutomaticParser::limitOffsetClauses() { case 6: { enterOuterAlt(_localctx, 6); - setState(474); - textLimitClause(); setState(476); + textLimitClause(); + setState(478); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::LIMIT) { - setState(475); + setState(477); limitClause(); } - setState(479); + setState(481); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::OFFSET) { - setState(478); + setState(480); offsetClause(); } break; @@ -3102,9 +3102,9 @@ SparqlAutomaticParser::limitClause() { }); try { enterOuterAlt(_localctx, 1); - setState(483); + setState(485); match(SparqlAutomaticParser::LIMIT); - setState(484); + setState(486); integer(); } catch (RecognitionException& e) { @@ -3171,9 +3171,9 @@ SparqlAutomaticParser::offsetClause() { }); try { enterOuterAlt(_localctx, 1); - setState(486); + setState(488); match(SparqlAutomaticParser::OFFSET); - setState(487); + setState(489); integer(); } catch (RecognitionException& e) { @@ -3240,9 +3240,9 @@ SparqlAutomaticParser::textLimitClause() { }); try { enterOuterAlt(_localctx, 1); - setState(489); + setState(491); match(SparqlAutomaticParser::TEXTLIMIT); - setState(490); + setState(492); integer(); } catch (RecognitionException& e) { @@ -3310,14 +3310,14 @@ SparqlAutomaticParser::valuesClause() { }); try { enterOuterAlt(_localctx, 1); - setState(494); + setState(496); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::VALUES) { - setState(492); + setState(494); match(SparqlAutomaticParser::VALUES); - setState(493); + setState(495); dataBlock(); } @@ -3387,16 +3387,16 @@ SparqlAutomaticParser::triplesTemplate() { }); try { enterOuterAlt(_localctx, 1); - setState(496); + setState(498); triplesSameSubject(); - setState(501); + setState(503); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__5) { - setState(497); - match(SparqlAutomaticParser::T__5); setState(499); + match(SparqlAutomaticParser::T__5); + setState(501); _errHandler->sync(this); _la = _input->LA(1); @@ -3429,7 +3429,7 @@ SparqlAutomaticParser::triplesTemplate() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | (1ULL << (SparqlAutomaticParser::NIL - 139)) | (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)) { - setState(498); + setState(500); triplesTemplate(); } } @@ -3499,13 +3499,13 @@ SparqlAutomaticParser::groupGraphPattern() { }); try { enterOuterAlt(_localctx, 1); - setState(503); + setState(505); match(SparqlAutomaticParser::T__3); - setState(506); + setState(508); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::SELECT: { - setState(504); + setState(506); subSelect(); break; } @@ -3545,7 +3545,7 @@ SparqlAutomaticParser::groupGraphPattern() { case SparqlAutomaticParser::STRING_LITERAL_LONG2: case SparqlAutomaticParser::NIL: case SparqlAutomaticParser::ANON: { - setState(505); + setState(507); groupGraphPatternSub(); break; } @@ -3553,7 +3553,7 @@ SparqlAutomaticParser::groupGraphPattern() { default: throw NoViableAltException(this); } - setState(508); + setState(510); match(SparqlAutomaticParser::T__4); } catch (RecognitionException& e) { @@ -3572,27 +3572,24 @@ SparqlAutomaticParser::GroupGraphPatternSubContext::GroupGraphPatternSubContext( ParserRuleContext* parent, size_t invokingState) : ParserRuleContext(parent, invokingState) {} -std::vector -SparqlAutomaticParser::GroupGraphPatternSubContext::triplesBlock() { - return getRuleContexts(); -} - SparqlAutomaticParser::TriplesBlockContext* -SparqlAutomaticParser::GroupGraphPatternSubContext::triplesBlock(size_t i) { - return getRuleContext(i); +SparqlAutomaticParser::GroupGraphPatternSubContext::triplesBlock() { + return getRuleContext(0); } -std::vector -SparqlAutomaticParser::GroupGraphPatternSubContext::graphPatternNotTriples() { +std::vector< + SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext*> +SparqlAutomaticParser::GroupGraphPatternSubContext:: + graphPatternNotTriplesAndMaybeTriples() { return getRuleContexts< - SparqlAutomaticParser::GraphPatternNotTriplesContext>(); + SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext>(); } -SparqlAutomaticParser::GraphPatternNotTriplesContext* -SparqlAutomaticParser::GroupGraphPatternSubContext::graphPatternNotTriples( - size_t i) { - return getRuleContext( - i); +SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext* +SparqlAutomaticParser::GroupGraphPatternSubContext:: + graphPatternNotTriplesAndMaybeTriples(size_t i) { + return getRuleContext< + SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext>(i); } size_t SparqlAutomaticParser::GroupGraphPatternSubContext::getRuleIndex() @@ -3637,7 +3634,7 @@ SparqlAutomaticParser::groupGraphPatternSub() { }); try { enterOuterAlt(_localctx, 1); - setState(511); + setState(513); _errHandler->sync(this); _la = _input->LA(1); @@ -3670,10 +3667,10 @@ SparqlAutomaticParser::groupGraphPatternSub() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | (1ULL << (SparqlAutomaticParser::NIL - 139)) | (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)) { - setState(510); + setState(512); triplesBlock(); } - setState(522); + setState(518); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__3 @@ -3687,55 +3684,132 @@ SparqlAutomaticParser::groupGraphPatternSub() { (1ULL << (SparqlAutomaticParser::BIND - 67)) | (1ULL << (SparqlAutomaticParser::MINUS - 67)) | (1ULL << (SparqlAutomaticParser::FILTER - 67)))) != 0)) { - setState(513); - graphPatternNotTriples(); setState(515); + graphPatternNotTriplesAndMaybeTriples(); + setState(520); _errHandler->sync(this); - _la = _input->LA(1); - if (_la == SparqlAutomaticParser::T__5) { - setState(514); - match(SparqlAutomaticParser::T__5); - } - setState(518); - _errHandler->sync(this); + } - _la = _input->LA(1); - if ((((_la & ~0x3fULL) == 0) && - ((1ULL << _la) & ((1ULL << SparqlAutomaticParser::T__1) | - (1ULL << SparqlAutomaticParser::T__15) | - (1ULL << SparqlAutomaticParser::T__28) | - (1ULL << SparqlAutomaticParser::T__29))) != 0) || - ((((_la - 139) & ~0x3fULL) == 0) && - ((1ULL << (_la - 139)) & - ((1ULL << (SparqlAutomaticParser::IRI_REF - 139)) | - (1ULL << (SparqlAutomaticParser::PNAME_NS - 139)) | - (1ULL << (SparqlAutomaticParser::PNAME_LN - 139)) | - (1ULL << (SparqlAutomaticParser::BLANK_NODE_LABEL - 139)) | - (1ULL << (SparqlAutomaticParser::VAR1 - 139)) | - (1ULL << (SparqlAutomaticParser::VAR2 - 139)) | - (1ULL << (SparqlAutomaticParser::PREFIX_LANGTAG - 139)) | - (1ULL << (SparqlAutomaticParser::INTEGER - 139)) | - (1ULL << (SparqlAutomaticParser::DECIMAL - 139)) | - (1ULL << (SparqlAutomaticParser::DOUBLE - 139)) | - (1ULL << (SparqlAutomaticParser::INTEGER_POSITIVE - 139)) | - (1ULL << (SparqlAutomaticParser::DECIMAL_POSITIVE - 139)) | - (1ULL << (SparqlAutomaticParser::DOUBLE_POSITIVE - 139)) | - (1ULL << (SparqlAutomaticParser::INTEGER_NEGATIVE - 139)) | - (1ULL << (SparqlAutomaticParser::DECIMAL_NEGATIVE - 139)) | - (1ULL << (SparqlAutomaticParser::DOUBLE_NEGATIVE - 139)) | - (1ULL << (SparqlAutomaticParser::STRING_LITERAL1 - 139)) | - (1ULL << (SparqlAutomaticParser::STRING_LITERAL2 - 139)) | - (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG1 - 139)) | - (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | - (1ULL << (SparqlAutomaticParser::NIL - 139)) | - (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)) { - setState(517); - triplesBlock(); - } - setState(524); - _errHandler->sync(this); - _la = _input->LA(1); + } catch (RecognitionException& e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- GraphPatternNotTriplesAndMaybeTriplesContext +//------------------------------------------------------------------ + +SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext:: + GraphPatternNotTriplesAndMaybeTriplesContext(ParserRuleContext* parent, + size_t invokingState) + : ParserRuleContext(parent, invokingState) {} + +SparqlAutomaticParser::GraphPatternNotTriplesContext* SparqlAutomaticParser:: + GraphPatternNotTriplesAndMaybeTriplesContext::graphPatternNotTriples() { + return getRuleContext( + 0); +} + +SparqlAutomaticParser::TriplesBlockContext* SparqlAutomaticParser:: + GraphPatternNotTriplesAndMaybeTriplesContext::triplesBlock() { + return getRuleContext(0); +} + +size_t SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext:: + getRuleIndex() const { + return SparqlAutomaticParser::RuleGraphPatternNotTriplesAndMaybeTriples; +} + +void SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext:: + enterRule(tree::ParseTreeListener* listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterGraphPatternNotTriplesAndMaybeTriples(this); +} + +void SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext:: + exitRule(tree::ParseTreeListener* listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitGraphPatternNotTriplesAndMaybeTriples(this); +} + +antlrcpp::Any +SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext::accept( + tree::ParseTreeVisitor* visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitGraphPatternNotTriplesAndMaybeTriples(this); + else + return visitor->visitChildren(this); +} + +SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext* +SparqlAutomaticParser::graphPatternNotTriplesAndMaybeTriples() { + GraphPatternNotTriplesAndMaybeTriplesContext* _localctx = + _tracker.createInstance( + _ctx, getState()); + enterRule(_localctx, 66, + SparqlAutomaticParser::RuleGraphPatternNotTriplesAndMaybeTriples); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(521); + graphPatternNotTriples(); + setState(523); + _errHandler->sync(this); + + _la = _input->LA(1); + if (_la == SparqlAutomaticParser::T__5) { + setState(522); + match(SparqlAutomaticParser::T__5); + } + setState(526); + _errHandler->sync(this); + + _la = _input->LA(1); + if ((((_la & ~0x3fULL) == 0) && + ((1ULL << _la) & ((1ULL << SparqlAutomaticParser::T__1) | + (1ULL << SparqlAutomaticParser::T__15) | + (1ULL << SparqlAutomaticParser::T__28) | + (1ULL << SparqlAutomaticParser::T__29))) != 0) || + ((((_la - 139) & ~0x3fULL) == 0) && + ((1ULL << (_la - 139)) & + ((1ULL << (SparqlAutomaticParser::IRI_REF - 139)) | + (1ULL << (SparqlAutomaticParser::PNAME_NS - 139)) | + (1ULL << (SparqlAutomaticParser::PNAME_LN - 139)) | + (1ULL << (SparqlAutomaticParser::BLANK_NODE_LABEL - 139)) | + (1ULL << (SparqlAutomaticParser::VAR1 - 139)) | + (1ULL << (SparqlAutomaticParser::VAR2 - 139)) | + (1ULL << (SparqlAutomaticParser::PREFIX_LANGTAG - 139)) | + (1ULL << (SparqlAutomaticParser::INTEGER - 139)) | + (1ULL << (SparqlAutomaticParser::DECIMAL - 139)) | + (1ULL << (SparqlAutomaticParser::DOUBLE - 139)) | + (1ULL << (SparqlAutomaticParser::INTEGER_POSITIVE - 139)) | + (1ULL << (SparqlAutomaticParser::DECIMAL_POSITIVE - 139)) | + (1ULL << (SparqlAutomaticParser::DOUBLE_POSITIVE - 139)) | + (1ULL << (SparqlAutomaticParser::INTEGER_NEGATIVE - 139)) | + (1ULL << (SparqlAutomaticParser::DECIMAL_NEGATIVE - 139)) | + (1ULL << (SparqlAutomaticParser::DOUBLE_NEGATIVE - 139)) | + (1ULL << (SparqlAutomaticParser::STRING_LITERAL1 - 139)) | + (1ULL << (SparqlAutomaticParser::STRING_LITERAL2 - 139)) | + (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG1 - 139)) | + (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | + (1ULL << (SparqlAutomaticParser::NIL - 139)) | + (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)) { + setState(525); + triplesBlock(); } } catch (RecognitionException& e) { @@ -3793,7 +3867,7 @@ SparqlAutomaticParser::TriplesBlockContext* SparqlAutomaticParser::triplesBlock() { TriplesBlockContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 66, SparqlAutomaticParser::RuleTriplesBlock); + enterRule(_localctx, 68, SparqlAutomaticParser::RuleTriplesBlock); size_t _la = 0; #if __cplusplus > 201703L @@ -3805,16 +3879,16 @@ SparqlAutomaticParser::triplesBlock() { }); try { enterOuterAlt(_localctx, 1); - setState(525); + setState(528); triplesSameSubjectPath(); - setState(530); + setState(533); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__5) { - setState(526); + setState(529); match(SparqlAutomaticParser::T__5); - setState(528); + setState(531); _errHandler->sync(this); _la = _input->LA(1); @@ -3847,7 +3921,7 @@ SparqlAutomaticParser::triplesBlock() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | (1ULL << (SparqlAutomaticParser::NIL - 139)) | (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)) { - setState(527); + setState(530); triplesBlock(); } } @@ -3941,7 +4015,7 @@ SparqlAutomaticParser::GraphPatternNotTriplesContext* SparqlAutomaticParser::graphPatternNotTriples() { GraphPatternNotTriplesContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 68, SparqlAutomaticParser::RuleGraphPatternNotTriples); + enterRule(_localctx, 70, SparqlAutomaticParser::RuleGraphPatternNotTriples); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -3951,61 +4025,61 @@ SparqlAutomaticParser::graphPatternNotTriples() { exitRule(); }); try { - setState(540); + setState(543); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__3: { enterOuterAlt(_localctx, 1); - setState(532); + setState(535); groupOrUnionGraphPattern(); break; } case SparqlAutomaticParser::OPTIONAL: { enterOuterAlt(_localctx, 2); - setState(533); + setState(536); optionalGraphPattern(); break; } case SparqlAutomaticParser::MINUS: { enterOuterAlt(_localctx, 3); - setState(534); + setState(537); minusGraphPattern(); break; } case SparqlAutomaticParser::GRAPH: { enterOuterAlt(_localctx, 4); - setState(535); + setState(538); graphGraphPattern(); break; } case SparqlAutomaticParser::SERVICE: { enterOuterAlt(_localctx, 5); - setState(536); + setState(539); serviceGraphPattern(); break; } case SparqlAutomaticParser::FILTER: { enterOuterAlt(_localctx, 6); - setState(537); + setState(540); filterR(); break; } case SparqlAutomaticParser::BIND: { enterOuterAlt(_localctx, 7); - setState(538); + setState(541); bind(); break; } case SparqlAutomaticParser::VALUES: { enterOuterAlt(_localctx, 8); - setState(539); + setState(542); inlineData(); break; } @@ -4070,7 +4144,7 @@ SparqlAutomaticParser::OptionalGraphPatternContext* SparqlAutomaticParser::optionalGraphPattern() { OptionalGraphPatternContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 70, SparqlAutomaticParser::RuleOptionalGraphPattern); + enterRule(_localctx, 72, SparqlAutomaticParser::RuleOptionalGraphPattern); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -4081,9 +4155,9 @@ SparqlAutomaticParser::optionalGraphPattern() { }); try { enterOuterAlt(_localctx, 1); - setState(542); + setState(545); match(SparqlAutomaticParser::OPTIONAL); - setState(543); + setState(546); groupGraphPattern(); } catch (RecognitionException& e) { @@ -4144,7 +4218,7 @@ SparqlAutomaticParser::GraphGraphPatternContext* SparqlAutomaticParser::graphGraphPattern() { GraphGraphPatternContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 72, SparqlAutomaticParser::RuleGraphGraphPattern); + enterRule(_localctx, 74, SparqlAutomaticParser::RuleGraphGraphPattern); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -4155,11 +4229,11 @@ SparqlAutomaticParser::graphGraphPattern() { }); try { enterOuterAlt(_localctx, 1); - setState(545); + setState(548); match(SparqlAutomaticParser::GRAPH); - setState(546); + setState(549); varOrIri(); - setState(547); + setState(550); groupGraphPattern(); } catch (RecognitionException& e) { @@ -4226,7 +4300,7 @@ SparqlAutomaticParser::ServiceGraphPatternContext* SparqlAutomaticParser::serviceGraphPattern() { ServiceGraphPatternContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 74, SparqlAutomaticParser::RuleServiceGraphPattern); + enterRule(_localctx, 76, SparqlAutomaticParser::RuleServiceGraphPattern); size_t _la = 0; #if __cplusplus > 201703L @@ -4238,19 +4312,19 @@ SparqlAutomaticParser::serviceGraphPattern() { }); try { enterOuterAlt(_localctx, 1); - setState(549); + setState(552); match(SparqlAutomaticParser::SERVICE); - setState(551); + setState(554); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::SILENT) { - setState(550); + setState(553); match(SparqlAutomaticParser::SILENT); } - setState(553); + setState(556); varOrIri(); - setState(554); + setState(557); groupGraphPattern(); } catch (RecognitionException& e) { @@ -4313,7 +4387,7 @@ antlrcpp::Any SparqlAutomaticParser::BindContext::accept( SparqlAutomaticParser::BindContext* SparqlAutomaticParser::bind() { BindContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 76, SparqlAutomaticParser::RuleBind); + enterRule(_localctx, 78, SparqlAutomaticParser::RuleBind); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -4324,17 +4398,17 @@ SparqlAutomaticParser::BindContext* SparqlAutomaticParser::bind() { }); try { enterOuterAlt(_localctx, 1); - setState(556); + setState(559); match(SparqlAutomaticParser::BIND); - setState(557); + setState(560); match(SparqlAutomaticParser::T__1); - setState(558); + setState(561); expression(); - setState(559); + setState(562); match(SparqlAutomaticParser::AS); - setState(560); + setState(563); var(); - setState(561); + setState(564); match(SparqlAutomaticParser::T__2); } catch (RecognitionException& e) { @@ -4389,7 +4463,7 @@ antlrcpp::Any SparqlAutomaticParser::InlineDataContext::accept( SparqlAutomaticParser::InlineDataContext* SparqlAutomaticParser::inlineData() { InlineDataContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 78, SparqlAutomaticParser::RuleInlineData); + enterRule(_localctx, 80, SparqlAutomaticParser::RuleInlineData); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -4400,9 +4474,9 @@ SparqlAutomaticParser::InlineDataContext* SparqlAutomaticParser::inlineData() { }); try { enterOuterAlt(_localctx, 1); - setState(563); + setState(566); match(SparqlAutomaticParser::VALUES); - setState(564); + setState(567); dataBlock(); } catch (RecognitionException& e) { @@ -4458,7 +4532,7 @@ antlrcpp::Any SparqlAutomaticParser::DataBlockContext::accept( SparqlAutomaticParser::DataBlockContext* SparqlAutomaticParser::dataBlock() { DataBlockContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 80, SparqlAutomaticParser::RuleDataBlock); + enterRule(_localctx, 82, SparqlAutomaticParser::RuleDataBlock); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -4468,13 +4542,13 @@ SparqlAutomaticParser::DataBlockContext* SparqlAutomaticParser::dataBlock() { exitRule(); }); try { - setState(568); + setState(571); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { enterOuterAlt(_localctx, 1); - setState(566); + setState(569); inlineDataOneVar(); break; } @@ -4482,7 +4556,7 @@ SparqlAutomaticParser::DataBlockContext* SparqlAutomaticParser::dataBlock() { case SparqlAutomaticParser::T__1: case SparqlAutomaticParser::NIL: { enterOuterAlt(_localctx, 2); - setState(567); + setState(570); inlineDataFull(); break; } @@ -4550,7 +4624,7 @@ SparqlAutomaticParser::InlineDataOneVarContext* SparqlAutomaticParser::inlineDataOneVar() { InlineDataOneVarContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 82, SparqlAutomaticParser::RuleInlineDataOneVar); + enterRule(_localctx, 84, SparqlAutomaticParser::RuleInlineDataOneVar); size_t _la = 0; #if __cplusplus > 201703L @@ -4562,11 +4636,11 @@ SparqlAutomaticParser::inlineDataOneVar() { }); try { enterOuterAlt(_localctx, 1); - setState(570); + setState(573); var(); - setState(571); + setState(574); match(SparqlAutomaticParser::T__3); - setState(575); + setState(578); _errHandler->sync(this); _la = _input->LA(1); while (((((_la - 29) & ~0x3fULL) == 0) && @@ -4594,13 +4668,13 @@ SparqlAutomaticParser::inlineDataOneVar() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG1 - 139)) | (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)))) != 0)) { - setState(572); + setState(575); dataBlockValue(); - setState(577); + setState(580); _errHandler->sync(this); _la = _input->LA(1); } - setState(578); + setState(581); match(SparqlAutomaticParser::T__4); } catch (RecognitionException& e) { @@ -4671,7 +4745,7 @@ SparqlAutomaticParser::InlineDataFullContext* SparqlAutomaticParser::inlineDataFull() { InlineDataFullContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 84, SparqlAutomaticParser::RuleInlineDataFull); + enterRule(_localctx, 86, SparqlAutomaticParser::RuleInlineDataFull); size_t _la = 0; #if __cplusplus > 201703L @@ -4683,31 +4757,31 @@ SparqlAutomaticParser::inlineDataFull() { }); try { enterOuterAlt(_localctx, 1); - setState(589); + setState(592); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::NIL: { - setState(580); + setState(583); match(SparqlAutomaticParser::NIL); break; } case SparqlAutomaticParser::T__1: { - setState(581); + setState(584); match(SparqlAutomaticParser::T__1); - setState(585); + setState(588); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::VAR1 || _la == SparqlAutomaticParser::VAR2) { - setState(582); + setState(585); var(); - setState(587); + setState(590); _errHandler->sync(this); _la = _input->LA(1); } - setState(588); + setState(591); match(SparqlAutomaticParser::T__2); break; } @@ -4715,20 +4789,20 @@ SparqlAutomaticParser::inlineDataFull() { default: throw NoViableAltException(this); } - setState(591); + setState(594); match(SparqlAutomaticParser::T__3); - setState(595); + setState(598); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__1 || _la == SparqlAutomaticParser::NIL) { - setState(592); + setState(595); dataBlockSingle(); - setState(597); + setState(600); _errHandler->sync(this); _la = _input->LA(1); } - setState(598); + setState(601); match(SparqlAutomaticParser::T__4); } catch (RecognitionException& e) { @@ -4789,7 +4863,7 @@ SparqlAutomaticParser::DataBlockSingleContext* SparqlAutomaticParser::dataBlockSingle() { DataBlockSingleContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 86, SparqlAutomaticParser::RuleDataBlockSingle); + enterRule(_localctx, 88, SparqlAutomaticParser::RuleDataBlockSingle); size_t _la = 0; #if __cplusplus > 201703L @@ -4801,13 +4875,13 @@ SparqlAutomaticParser::dataBlockSingle() { }); try { enterOuterAlt(_localctx, 1); - setState(609); + setState(612); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: { - setState(600); + setState(603); match(SparqlAutomaticParser::T__1); - setState(604); + setState(607); _errHandler->sync(this); _la = _input->LA(1); while ( @@ -4836,19 +4910,19 @@ SparqlAutomaticParser::dataBlockSingle() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG1 - 139)) | (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)))) != 0)) { - setState(601); + setState(604); dataBlockValue(); - setState(606); + setState(609); _errHandler->sync(this); _la = _input->LA(1); } - setState(607); + setState(610); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::NIL: { - setState(608); + setState(611); match(SparqlAutomaticParser::NIL); break; } @@ -4925,7 +4999,7 @@ SparqlAutomaticParser::DataBlockValueContext* SparqlAutomaticParser::dataBlockValue() { DataBlockValueContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 88, SparqlAutomaticParser::RuleDataBlockValue); + enterRule(_localctx, 90, SparqlAutomaticParser::RuleDataBlockValue); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -4935,7 +5009,7 @@ SparqlAutomaticParser::dataBlockValue() { exitRule(); }); try { - setState(616); + setState(619); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: @@ -4943,7 +5017,7 @@ SparqlAutomaticParser::dataBlockValue() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 1); - setState(611); + setState(614); iri(); break; } @@ -4953,7 +5027,7 @@ SparqlAutomaticParser::dataBlockValue() { case SparqlAutomaticParser::STRING_LITERAL_LONG1: case SparqlAutomaticParser::STRING_LITERAL_LONG2: { enterOuterAlt(_localctx, 2); - setState(612); + setState(615); rdfLiteral(); break; } @@ -4968,7 +5042,7 @@ SparqlAutomaticParser::dataBlockValue() { case SparqlAutomaticParser::DECIMAL_NEGATIVE: case SparqlAutomaticParser::DOUBLE_NEGATIVE: { enterOuterAlt(_localctx, 3); - setState(613); + setState(616); numericLiteral(); break; } @@ -4976,14 +5050,14 @@ SparqlAutomaticParser::dataBlockValue() { case SparqlAutomaticParser::T__28: case SparqlAutomaticParser::T__29: { enterOuterAlt(_localctx, 4); - setState(614); + setState(617); booleanLiteral(); break; } case SparqlAutomaticParser::UNDEF: { enterOuterAlt(_localctx, 5); - setState(615); + setState(618); match(SparqlAutomaticParser::UNDEF); break; } @@ -5045,7 +5119,7 @@ SparqlAutomaticParser::MinusGraphPatternContext* SparqlAutomaticParser::minusGraphPattern() { MinusGraphPatternContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 90, SparqlAutomaticParser::RuleMinusGraphPattern); + enterRule(_localctx, 92, SparqlAutomaticParser::RuleMinusGraphPattern); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -5056,9 +5130,9 @@ SparqlAutomaticParser::minusGraphPattern() { }); try { enterOuterAlt(_localctx, 1); - setState(618); + setState(621); match(SparqlAutomaticParser::MINUS); - setState(619); + setState(622); groupGraphPattern(); } catch (RecognitionException& e) { @@ -5131,7 +5205,7 @@ SparqlAutomaticParser::groupOrUnionGraphPattern() { GroupOrUnionGraphPatternContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 92, SparqlAutomaticParser::RuleGroupOrUnionGraphPattern); + enterRule(_localctx, 94, SparqlAutomaticParser::RuleGroupOrUnionGraphPattern); size_t _la = 0; #if __cplusplus > 201703L @@ -5143,17 +5217,17 @@ SparqlAutomaticParser::groupOrUnionGraphPattern() { }); try { enterOuterAlt(_localctx, 1); - setState(621); + setState(624); groupGraphPattern(); - setState(626); + setState(629); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::UNION) { - setState(622); + setState(625); match(SparqlAutomaticParser::UNION); - setState(623); + setState(626); groupGraphPattern(); - setState(628); + setState(631); _errHandler->sync(this); _la = _input->LA(1); } @@ -5210,7 +5284,7 @@ antlrcpp::Any SparqlAutomaticParser::FilterRContext::accept( SparqlAutomaticParser::FilterRContext* SparqlAutomaticParser::filterR() { FilterRContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 94, SparqlAutomaticParser::RuleFilterR); + enterRule(_localctx, 96, SparqlAutomaticParser::RuleFilterR); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -5221,9 +5295,9 @@ SparqlAutomaticParser::FilterRContext* SparqlAutomaticParser::filterR() { }); try { enterOuterAlt(_localctx, 1); - setState(629); + setState(632); match(SparqlAutomaticParser::FILTER); - setState(630); + setState(633); constraint(); } catch (RecognitionException& e) { @@ -5284,7 +5358,7 @@ antlrcpp::Any SparqlAutomaticParser::ConstraintContext::accept( SparqlAutomaticParser::ConstraintContext* SparqlAutomaticParser::constraint() { ConstraintContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 96, SparqlAutomaticParser::RuleConstraint); + enterRule(_localctx, 98, SparqlAutomaticParser::RuleConstraint); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -5294,12 +5368,12 @@ SparqlAutomaticParser::ConstraintContext* SparqlAutomaticParser::constraint() { exitRule(); }); try { - setState(635); + setState(638); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 1); - setState(632); + setState(635); brackettedExpression(); break; } @@ -5366,7 +5440,7 @@ SparqlAutomaticParser::ConstraintContext* SparqlAutomaticParser::constraint() { case SparqlAutomaticParser::AVG: case SparqlAutomaticParser::SAMPLE: { enterOuterAlt(_localctx, 2); - setState(633); + setState(636); builtInCall(); break; } @@ -5376,7 +5450,7 @@ SparqlAutomaticParser::ConstraintContext* SparqlAutomaticParser::constraint() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 3); - setState(634); + setState(637); functionCall(); break; } @@ -5439,7 +5513,7 @@ SparqlAutomaticParser::FunctionCallContext* SparqlAutomaticParser::functionCall() { FunctionCallContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 98, SparqlAutomaticParser::RuleFunctionCall); + enterRule(_localctx, 100, SparqlAutomaticParser::RuleFunctionCall); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -5450,9 +5524,9 @@ SparqlAutomaticParser::functionCall() { }); try { enterOuterAlt(_localctx, 1); - setState(637); + setState(640); iri(); - setState(638); + setState(641); argList(); } catch (RecognitionException& e) { @@ -5516,7 +5590,7 @@ antlrcpp::Any SparqlAutomaticParser::ArgListContext::accept( SparqlAutomaticParser::ArgListContext* SparqlAutomaticParser::argList() { ArgListContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 100, SparqlAutomaticParser::RuleArgList); + enterRule(_localctx, 102, SparqlAutomaticParser::RuleArgList); size_t _la = 0; #if __cplusplus > 201703L @@ -5527,43 +5601,43 @@ SparqlAutomaticParser::ArgListContext* SparqlAutomaticParser::argList() { exitRule(); }); try { - setState(655); + setState(658); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::NIL: { enterOuterAlt(_localctx, 1); - setState(640); + setState(643); match(SparqlAutomaticParser::NIL); break; } case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 2); - setState(641); + setState(644); match(SparqlAutomaticParser::T__1); - setState(643); + setState(646); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT) { - setState(642); + setState(645); match(SparqlAutomaticParser::DISTINCT); } - setState(645); + setState(648); expression(); - setState(650); + setState(653); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__6) { - setState(646); + setState(649); match(SparqlAutomaticParser::T__6); - setState(647); + setState(650); expression(); - setState(652); + setState(655); _errHandler->sync(this); _la = _input->LA(1); } - setState(653); + setState(656); match(SparqlAutomaticParser::T__2); break; } @@ -5630,7 +5704,7 @@ SparqlAutomaticParser::ExpressionListContext* SparqlAutomaticParser::expressionList() { ExpressionListContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 102, SparqlAutomaticParser::RuleExpressionList); + enterRule(_localctx, 104, SparqlAutomaticParser::RuleExpressionList); size_t _la = 0; #if __cplusplus > 201703L @@ -5641,35 +5715,35 @@ SparqlAutomaticParser::expressionList() { exitRule(); }); try { - setState(669); + setState(672); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::NIL: { enterOuterAlt(_localctx, 1); - setState(657); + setState(660); match(SparqlAutomaticParser::NIL); break; } case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 2); - setState(658); + setState(661); match(SparqlAutomaticParser::T__1); - setState(659); + setState(662); expression(); - setState(664); + setState(667); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__6) { - setState(660); + setState(663); match(SparqlAutomaticParser::T__6); - setState(661); + setState(664); expression(); - setState(666); + setState(669); _errHandler->sync(this); _la = _input->LA(1); } - setState(667); + setState(670); match(SparqlAutomaticParser::T__2); break; } @@ -5727,7 +5801,7 @@ SparqlAutomaticParser::ConstructTemplateContext* SparqlAutomaticParser::constructTemplate() { ConstructTemplateContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 104, SparqlAutomaticParser::RuleConstructTemplate); + enterRule(_localctx, 106, SparqlAutomaticParser::RuleConstructTemplate); size_t _la = 0; #if __cplusplus > 201703L @@ -5739,9 +5813,9 @@ SparqlAutomaticParser::constructTemplate() { }); try { enterOuterAlt(_localctx, 1); - setState(671); + setState(674); match(SparqlAutomaticParser::T__3); - setState(673); + setState(676); _errHandler->sync(this); _la = _input->LA(1); @@ -5774,10 +5848,10 @@ SparqlAutomaticParser::constructTemplate() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | (1ULL << (SparqlAutomaticParser::NIL - 139)) | (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)) { - setState(672); + setState(675); constructTriples(); } - setState(675); + setState(678); match(SparqlAutomaticParser::T__4); } catch (RecognitionException& e) { @@ -5834,7 +5908,7 @@ SparqlAutomaticParser::ConstructTriplesContext* SparqlAutomaticParser::constructTriples() { ConstructTriplesContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 106, SparqlAutomaticParser::RuleConstructTriples); + enterRule(_localctx, 108, SparqlAutomaticParser::RuleConstructTriples); size_t _la = 0; #if __cplusplus > 201703L @@ -5846,16 +5920,16 @@ SparqlAutomaticParser::constructTriples() { }); try { enterOuterAlt(_localctx, 1); - setState(677); + setState(680); triplesSameSubject(); - setState(682); + setState(685); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__5) { - setState(678); + setState(681); match(SparqlAutomaticParser::T__5); - setState(680); + setState(683); _errHandler->sync(this); _la = _input->LA(1); @@ -5888,7 +5962,7 @@ SparqlAutomaticParser::constructTriples() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | (1ULL << (SparqlAutomaticParser::NIL - 139)) | (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)) { - setState(679); + setState(682); constructTriples(); } } @@ -5957,7 +6031,7 @@ SparqlAutomaticParser::TriplesSameSubjectContext* SparqlAutomaticParser::triplesSameSubject() { TriplesSameSubjectContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 108, SparqlAutomaticParser::RuleTriplesSameSubject); + enterRule(_localctx, 110, SparqlAutomaticParser::RuleTriplesSameSubject); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -5967,7 +6041,7 @@ SparqlAutomaticParser::triplesSameSubject() { exitRule(); }); try { - setState(690); + setState(693); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__28: @@ -5995,9 +6069,9 @@ SparqlAutomaticParser::triplesSameSubject() { case SparqlAutomaticParser::NIL: case SparqlAutomaticParser::ANON: { enterOuterAlt(_localctx, 1); - setState(684); + setState(687); varOrTerm(); - setState(685); + setState(688); propertyListNotEmpty(); break; } @@ -6005,9 +6079,9 @@ SparqlAutomaticParser::triplesSameSubject() { case SparqlAutomaticParser::T__1: case SparqlAutomaticParser::T__15: { enterOuterAlt(_localctx, 2); - setState(687); + setState(690); triplesNode(); - setState(688); + setState(691); propertyList(); break; } @@ -6065,7 +6139,7 @@ SparqlAutomaticParser::PropertyListContext* SparqlAutomaticParser::propertyList() { PropertyListContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 110, SparqlAutomaticParser::RulePropertyList); + enterRule(_localctx, 112, SparqlAutomaticParser::RulePropertyList); size_t _la = 0; #if __cplusplus > 201703L @@ -6077,7 +6151,7 @@ SparqlAutomaticParser::propertyList() { }); try { enterOuterAlt(_localctx, 1); - setState(693); + setState(696); _errHandler->sync(this); _la = _input->LA(1); @@ -6090,7 +6164,7 @@ SparqlAutomaticParser::propertyList() { (1ULL << (SparqlAutomaticParser::VAR1 - 139)) | (1ULL << (SparqlAutomaticParser::VAR2 - 139)) | (1ULL << (SparqlAutomaticParser::PREFIX_LANGTAG - 139)))) != 0)) { - setState(692); + setState(695); propertyListNotEmpty(); } @@ -6160,7 +6234,7 @@ SparqlAutomaticParser::PropertyListNotEmptyContext* SparqlAutomaticParser::propertyListNotEmpty() { PropertyListNotEmptyContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 112, SparqlAutomaticParser::RulePropertyListNotEmpty); + enterRule(_localctx, 114, SparqlAutomaticParser::RulePropertyListNotEmpty); size_t _la = 0; #if __cplusplus > 201703L @@ -6172,17 +6246,17 @@ SparqlAutomaticParser::propertyListNotEmpty() { }); try { enterOuterAlt(_localctx, 1); - setState(695); + setState(698); verb(); - setState(696); + setState(699); objectList(); - setState(705); + setState(708); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__7) { - setState(697); + setState(700); match(SparqlAutomaticParser::T__7); - setState(701); + setState(704); _errHandler->sync(this); _la = _input->LA(1); @@ -6195,12 +6269,12 @@ SparqlAutomaticParser::propertyListNotEmpty() { (1ULL << (SparqlAutomaticParser::VAR1 - 139)) | (1ULL << (SparqlAutomaticParser::VAR2 - 139)) | (1ULL << (SparqlAutomaticParser::PREFIX_LANGTAG - 139)))) != 0)) { - setState(698); + setState(701); verb(); - setState(699); + setState(702); objectList(); } - setState(707); + setState(710); _errHandler->sync(this); _la = _input->LA(1); } @@ -6253,7 +6327,7 @@ antlrcpp::Any SparqlAutomaticParser::VerbContext::accept( SparqlAutomaticParser::VerbContext* SparqlAutomaticParser::verb() { VerbContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 114, SparqlAutomaticParser::RuleVerb); + enterRule(_localctx, 116, SparqlAutomaticParser::RuleVerb); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -6263,7 +6337,7 @@ SparqlAutomaticParser::VerbContext* SparqlAutomaticParser::verb() { exitRule(); }); try { - setState(710); + setState(713); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: @@ -6273,14 +6347,14 @@ SparqlAutomaticParser::VerbContext* SparqlAutomaticParser::verb() { case SparqlAutomaticParser::VAR2: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 1); - setState(708); + setState(711); varOrIri(); break; } case SparqlAutomaticParser::T__8: { enterOuterAlt(_localctx, 2); - setState(709); + setState(712); match(SparqlAutomaticParser::T__8); break; } @@ -6342,7 +6416,7 @@ antlrcpp::Any SparqlAutomaticParser::ObjectListContext::accept( SparqlAutomaticParser::ObjectListContext* SparqlAutomaticParser::objectList() { ObjectListContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 116, SparqlAutomaticParser::RuleObjectList); + enterRule(_localctx, 118, SparqlAutomaticParser::RuleObjectList); size_t _la = 0; #if __cplusplus > 201703L @@ -6354,17 +6428,17 @@ SparqlAutomaticParser::ObjectListContext* SparqlAutomaticParser::objectList() { }); try { enterOuterAlt(_localctx, 1); - setState(712); + setState(715); objectR(); - setState(717); + setState(720); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__6) { - setState(713); + setState(716); match(SparqlAutomaticParser::T__6); - setState(714); + setState(717); objectR(); - setState(719); + setState(722); _errHandler->sync(this); _la = _input->LA(1); } @@ -6417,7 +6491,7 @@ antlrcpp::Any SparqlAutomaticParser::ObjectRContext::accept( SparqlAutomaticParser::ObjectRContext* SparqlAutomaticParser::objectR() { ObjectRContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 118, SparqlAutomaticParser::RuleObjectR); + enterRule(_localctx, 120, SparqlAutomaticParser::RuleObjectR); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -6428,7 +6502,7 @@ SparqlAutomaticParser::ObjectRContext* SparqlAutomaticParser::objectR() { }); try { enterOuterAlt(_localctx, 1); - setState(720); + setState(723); graphNode(); } catch (RecognitionException& e) { @@ -6500,7 +6574,7 @@ SparqlAutomaticParser::TriplesSameSubjectPathContext* SparqlAutomaticParser::triplesSameSubjectPath() { TriplesSameSubjectPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 120, SparqlAutomaticParser::RuleTriplesSameSubjectPath); + enterRule(_localctx, 122, SparqlAutomaticParser::RuleTriplesSameSubjectPath); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -6510,7 +6584,7 @@ SparqlAutomaticParser::triplesSameSubjectPath() { exitRule(); }); try { - setState(728); + setState(731); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__28: @@ -6538,9 +6612,9 @@ SparqlAutomaticParser::triplesSameSubjectPath() { case SparqlAutomaticParser::NIL: case SparqlAutomaticParser::ANON: { enterOuterAlt(_localctx, 1); - setState(722); + setState(725); varOrTerm(); - setState(723); + setState(726); propertyListPathNotEmpty(); break; } @@ -6548,9 +6622,9 @@ SparqlAutomaticParser::triplesSameSubjectPath() { case SparqlAutomaticParser::T__1: case SparqlAutomaticParser::T__15: { enterOuterAlt(_localctx, 2); - setState(725); + setState(728); triplesNodePath(); - setState(726); + setState(729); propertyListPath(); break; } @@ -6609,7 +6683,7 @@ SparqlAutomaticParser::PropertyListPathContext* SparqlAutomaticParser::propertyListPath() { PropertyListPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 122, SparqlAutomaticParser::RulePropertyListPath); + enterRule(_localctx, 124, SparqlAutomaticParser::RulePropertyListPath); size_t _la = 0; #if __cplusplus > 201703L @@ -6621,7 +6695,7 @@ SparqlAutomaticParser::propertyListPath() { }); try { enterOuterAlt(_localctx, 1); - setState(731); + setState(734); _errHandler->sync(this); _la = _input->LA(1); @@ -6638,7 +6712,7 @@ SparqlAutomaticParser::propertyListPath() { (1ULL << (SparqlAutomaticParser::VAR1 - 139)) | (1ULL << (SparqlAutomaticParser::VAR2 - 139)) | (1ULL << (SparqlAutomaticParser::PREFIX_LANGTAG - 139)))) != 0)) { - setState(730); + setState(733); propertyListPathNotEmpty(); } @@ -6707,7 +6781,7 @@ SparqlAutomaticParser::propertyListPathNotEmpty() { PropertyListPathNotEmptyContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 124, + enterRule(_localctx, 126, SparqlAutomaticParser::RulePropertyListPathNotEmpty); size_t _la = 0; @@ -6720,15 +6794,15 @@ SparqlAutomaticParser::propertyListPathNotEmpty() { }); try { enterOuterAlt(_localctx, 1); - setState(733); + setState(736); tupleWithPath(); - setState(740); + setState(743); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__7) { - setState(734); + setState(737); match(SparqlAutomaticParser::T__7); - setState(736); + setState(739); _errHandler->sync(this); _la = _input->LA(1); @@ -6745,10 +6819,10 @@ SparqlAutomaticParser::propertyListPathNotEmpty() { (1ULL << (SparqlAutomaticParser::VAR1 - 139)) | (1ULL << (SparqlAutomaticParser::VAR2 - 139)) | (1ULL << (SparqlAutomaticParser::PREFIX_LANGTAG - 139)))) != 0)) { - setState(735); + setState(738); tupleWithoutPath(); } - setState(742); + setState(745); _errHandler->sync(this); _la = _input->LA(1); } @@ -6801,7 +6875,7 @@ antlrcpp::Any SparqlAutomaticParser::VerbPathContext::accept( SparqlAutomaticParser::VerbPathContext* SparqlAutomaticParser::verbPath() { VerbPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 126, SparqlAutomaticParser::RuleVerbPath); + enterRule(_localctx, 128, SparqlAutomaticParser::RuleVerbPath); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -6812,7 +6886,7 @@ SparqlAutomaticParser::VerbPathContext* SparqlAutomaticParser::verbPath() { }); try { enterOuterAlt(_localctx, 1); - setState(743); + setState(746); path(); } catch (RecognitionException& e) { @@ -6863,7 +6937,7 @@ antlrcpp::Any SparqlAutomaticParser::VerbSimpleContext::accept( SparqlAutomaticParser::VerbSimpleContext* SparqlAutomaticParser::verbSimple() { VerbSimpleContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 128, SparqlAutomaticParser::RuleVerbSimple); + enterRule(_localctx, 130, SparqlAutomaticParser::RuleVerbSimple); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -6874,7 +6948,7 @@ SparqlAutomaticParser::VerbSimpleContext* SparqlAutomaticParser::verbSimple() { }); try { enterOuterAlt(_localctx, 1); - setState(745); + setState(748); var(); } catch (RecognitionException& e) { @@ -6931,7 +7005,7 @@ SparqlAutomaticParser::TupleWithoutPathContext* SparqlAutomaticParser::tupleWithoutPath() { TupleWithoutPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 130, SparqlAutomaticParser::RuleTupleWithoutPath); + enterRule(_localctx, 132, SparqlAutomaticParser::RuleTupleWithoutPath); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -6942,9 +7016,9 @@ SparqlAutomaticParser::tupleWithoutPath() { }); try { enterOuterAlt(_localctx, 1); - setState(747); + setState(750); verbPathOrSimple(); - setState(748); + setState(751); objectList(); } catch (RecognitionException& e) { @@ -7001,7 +7075,7 @@ SparqlAutomaticParser::TupleWithPathContext* SparqlAutomaticParser::tupleWithPath() { TupleWithPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 132, SparqlAutomaticParser::RuleTupleWithPath); + enterRule(_localctx, 134, SparqlAutomaticParser::RuleTupleWithPath); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7012,9 +7086,9 @@ SparqlAutomaticParser::tupleWithPath() { }); try { enterOuterAlt(_localctx, 1); - setState(750); + setState(753); verbPathOrSimple(); - setState(751); + setState(754); objectListPath(); } catch (RecognitionException& e) { @@ -7071,7 +7145,7 @@ SparqlAutomaticParser::VerbPathOrSimpleContext* SparqlAutomaticParser::verbPathOrSimple() { VerbPathOrSimpleContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 134, SparqlAutomaticParser::RuleVerbPathOrSimple); + enterRule(_localctx, 136, SparqlAutomaticParser::RuleVerbPathOrSimple); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7082,7 +7156,7 @@ SparqlAutomaticParser::verbPathOrSimple() { }); try { enterOuterAlt(_localctx, 1); - setState(755); + setState(758); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: @@ -7093,14 +7167,14 @@ SparqlAutomaticParser::verbPathOrSimple() { case SparqlAutomaticParser::PNAME_NS: case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { - setState(753); + setState(756); verbPath(); break; } case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { - setState(754); + setState(757); verbSimple(); break; } @@ -7163,7 +7237,7 @@ SparqlAutomaticParser::ObjectListPathContext* SparqlAutomaticParser::objectListPath() { ObjectListPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 136, SparqlAutomaticParser::RuleObjectListPath); + enterRule(_localctx, 138, SparqlAutomaticParser::RuleObjectListPath); size_t _la = 0; #if __cplusplus > 201703L @@ -7175,17 +7249,17 @@ SparqlAutomaticParser::objectListPath() { }); try { enterOuterAlt(_localctx, 1); - setState(757); + setState(760); objectPath(); - setState(762); + setState(765); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__6) { - setState(758); + setState(761); match(SparqlAutomaticParser::T__6); - setState(759); + setState(762); objectPath(); - setState(764); + setState(767); _errHandler->sync(this); _la = _input->LA(1); } @@ -7238,7 +7312,7 @@ antlrcpp::Any SparqlAutomaticParser::ObjectPathContext::accept( SparqlAutomaticParser::ObjectPathContext* SparqlAutomaticParser::objectPath() { ObjectPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 138, SparqlAutomaticParser::RuleObjectPath); + enterRule(_localctx, 140, SparqlAutomaticParser::RuleObjectPath); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7249,7 +7323,7 @@ SparqlAutomaticParser::ObjectPathContext* SparqlAutomaticParser::objectPath() { }); try { enterOuterAlt(_localctx, 1); - setState(765); + setState(768); graphNodePath(); } catch (RecognitionException& e) { @@ -7300,7 +7374,7 @@ antlrcpp::Any SparqlAutomaticParser::PathContext::accept( SparqlAutomaticParser::PathContext* SparqlAutomaticParser::path() { PathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 140, SparqlAutomaticParser::RulePath); + enterRule(_localctx, 142, SparqlAutomaticParser::RulePath); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7311,7 +7385,7 @@ SparqlAutomaticParser::PathContext* SparqlAutomaticParser::path() { }); try { enterOuterAlt(_localctx, 1); - setState(767); + setState(770); pathAlternative(); } catch (RecognitionException& e) { @@ -7368,7 +7442,7 @@ SparqlAutomaticParser::PathAlternativeContext* SparqlAutomaticParser::pathAlternative() { PathAlternativeContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 142, SparqlAutomaticParser::RulePathAlternative); + enterRule(_localctx, 144, SparqlAutomaticParser::RulePathAlternative); size_t _la = 0; #if __cplusplus > 201703L @@ -7380,17 +7454,17 @@ SparqlAutomaticParser::pathAlternative() { }); try { enterOuterAlt(_localctx, 1); - setState(769); + setState(772); pathSequence(); - setState(774); + setState(777); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__9) { - setState(770); + setState(773); match(SparqlAutomaticParser::T__9); - setState(771); + setState(774); pathSequence(); - setState(776); + setState(779); _errHandler->sync(this); _la = _input->LA(1); } @@ -7449,7 +7523,7 @@ SparqlAutomaticParser::PathSequenceContext* SparqlAutomaticParser::pathSequence() { PathSequenceContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 144, SparqlAutomaticParser::RulePathSequence); + enterRule(_localctx, 146, SparqlAutomaticParser::RulePathSequence); size_t _la = 0; #if __cplusplus > 201703L @@ -7461,17 +7535,17 @@ SparqlAutomaticParser::pathSequence() { }); try { enterOuterAlt(_localctx, 1); - setState(777); + setState(780); pathEltOrInverse(); - setState(782); + setState(785); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__10) { - setState(778); + setState(781); match(SparqlAutomaticParser::T__10); - setState(779); + setState(782); pathEltOrInverse(); - setState(784); + setState(787); _errHandler->sync(this); _la = _input->LA(1); } @@ -7529,7 +7603,7 @@ antlrcpp::Any SparqlAutomaticParser::PathEltContext::accept( SparqlAutomaticParser::PathEltContext* SparqlAutomaticParser::pathElt() { PathEltContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 146, SparqlAutomaticParser::RulePathElt); + enterRule(_localctx, 148, SparqlAutomaticParser::RulePathElt); size_t _la = 0; #if __cplusplus > 201703L @@ -7541,9 +7615,9 @@ SparqlAutomaticParser::PathEltContext* SparqlAutomaticParser::pathElt() { }); try { enterOuterAlt(_localctx, 1); - setState(785); + setState(788); pathPrimary(); - setState(787); + setState(790); _errHandler->sync(this); _la = _input->LA(1); @@ -7551,7 +7625,7 @@ SparqlAutomaticParser::PathEltContext* SparqlAutomaticParser::pathElt() { ((1ULL << _la) & ((1ULL << SparqlAutomaticParser::T__0) | (1ULL << SparqlAutomaticParser::T__12) | (1ULL << SparqlAutomaticParser::T__13))) != 0)) { - setState(786); + setState(789); pathMod(); } @@ -7604,7 +7678,7 @@ SparqlAutomaticParser::PathEltOrInverseContext* SparqlAutomaticParser::pathEltOrInverse() { PathEltOrInverseContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 148, SparqlAutomaticParser::RulePathEltOrInverse); + enterRule(_localctx, 150, SparqlAutomaticParser::RulePathEltOrInverse); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7614,7 +7688,7 @@ SparqlAutomaticParser::pathEltOrInverse() { exitRule(); }); try { - setState(792); + setState(795); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: @@ -7625,17 +7699,17 @@ SparqlAutomaticParser::pathEltOrInverse() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 1); - setState(789); + setState(792); pathElt(); break; } case SparqlAutomaticParser::T__11: { enterOuterAlt(_localctx, 2); - setState(790); + setState(793); dynamic_cast(_localctx)->negationOperator = match(SparqlAutomaticParser::T__11); - setState(791); + setState(794); pathElt(); break; } @@ -7687,7 +7761,7 @@ antlrcpp::Any SparqlAutomaticParser::PathModContext::accept( SparqlAutomaticParser::PathModContext* SparqlAutomaticParser::pathMod() { PathModContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 150, SparqlAutomaticParser::RulePathMod); + enterRule(_localctx, 152, SparqlAutomaticParser::RulePathMod); size_t _la = 0; #if __cplusplus > 201703L @@ -7699,7 +7773,7 @@ SparqlAutomaticParser::PathModContext* SparqlAutomaticParser::pathMod() { }); try { enterOuterAlt(_localctx, 1); - setState(794); + setState(797); _la = _input->LA(1); if (!((((_la & ~0x3fULL) == 0) && ((1ULL << _la) & ((1ULL << SparqlAutomaticParser::T__0) | @@ -7771,7 +7845,7 @@ SparqlAutomaticParser::PathPrimaryContext* SparqlAutomaticParser::pathPrimary() { PathPrimaryContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 152, SparqlAutomaticParser::RulePathPrimary); + enterRule(_localctx, 154, SparqlAutomaticParser::RulePathPrimary); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7781,7 +7855,7 @@ SparqlAutomaticParser::pathPrimary() { exitRule(); }); try { - setState(804); + setState(807); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: @@ -7789,34 +7863,34 @@ SparqlAutomaticParser::pathPrimary() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 1); - setState(796); + setState(799); iri(); break; } case SparqlAutomaticParser::T__8: { enterOuterAlt(_localctx, 2); - setState(797); + setState(800); match(SparqlAutomaticParser::T__8); break; } case SparqlAutomaticParser::T__14: { enterOuterAlt(_localctx, 3); - setState(798); + setState(801); match(SparqlAutomaticParser::T__14); - setState(799); + setState(802); pathNegatedPropertySet(); break; } case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 4); - setState(800); + setState(803); match(SparqlAutomaticParser::T__1); - setState(801); + setState(804); path(); - setState(802); + setState(805); match(SparqlAutomaticParser::T__2); break; } @@ -7884,7 +7958,7 @@ SparqlAutomaticParser::PathNegatedPropertySetContext* SparqlAutomaticParser::pathNegatedPropertySet() { PathNegatedPropertySetContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 154, SparqlAutomaticParser::RulePathNegatedPropertySet); + enterRule(_localctx, 156, SparqlAutomaticParser::RulePathNegatedPropertySet); size_t _la = 0; #if __cplusplus > 201703L @@ -7895,7 +7969,7 @@ SparqlAutomaticParser::pathNegatedPropertySet() { exitRule(); }); try { - setState(819); + setState(822); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__8: @@ -7905,16 +7979,16 @@ SparqlAutomaticParser::pathNegatedPropertySet() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 1); - setState(806); + setState(809); pathOneInPropertySet(); break; } case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 2); - setState(807); + setState(810); match(SparqlAutomaticParser::T__1); - setState(816); + setState(819); _errHandler->sync(this); _la = _input->LA(1); @@ -7928,22 +8002,22 @@ SparqlAutomaticParser::pathNegatedPropertySet() { (1ULL << (SparqlAutomaticParser::PNAME_LN - 139)) | (1ULL << (SparqlAutomaticParser::PREFIX_LANGTAG - 139)))) != 0)) { - setState(808); + setState(811); pathOneInPropertySet(); - setState(813); + setState(816); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__9) { - setState(809); + setState(812); match(SparqlAutomaticParser::T__9); - setState(810); + setState(813); pathOneInPropertySet(); - setState(815); + setState(818); _errHandler->sync(this); _la = _input->LA(1); } } - setState(818); + setState(821); match(SparqlAutomaticParser::T__2); break; } @@ -8003,7 +8077,7 @@ SparqlAutomaticParser::PathOneInPropertySetContext* SparqlAutomaticParser::pathOneInPropertySet() { PathOneInPropertySetContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 156, SparqlAutomaticParser::RulePathOneInPropertySet); + enterRule(_localctx, 158, SparqlAutomaticParser::RulePathOneInPropertySet); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8013,7 +8087,7 @@ SparqlAutomaticParser::pathOneInPropertySet() { exitRule(); }); try { - setState(828); + setState(831); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: @@ -8021,36 +8095,36 @@ SparqlAutomaticParser::pathOneInPropertySet() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 1); - setState(821); + setState(824); iri(); break; } case SparqlAutomaticParser::T__8: { enterOuterAlt(_localctx, 2); - setState(822); + setState(825); match(SparqlAutomaticParser::T__8); break; } case SparqlAutomaticParser::T__11: { enterOuterAlt(_localctx, 3); - setState(823); - match(SparqlAutomaticParser::T__11); setState(826); + match(SparqlAutomaticParser::T__11); + setState(829); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: case SparqlAutomaticParser::PNAME_NS: case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { - setState(824); + setState(827); iri(); break; } case SparqlAutomaticParser::T__8: { - setState(825); + setState(828); match(SparqlAutomaticParser::T__8); break; } @@ -8112,7 +8186,7 @@ antlrcpp::Any SparqlAutomaticParser::IntegerContext::accept( SparqlAutomaticParser::IntegerContext* SparqlAutomaticParser::integer() { IntegerContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 158, SparqlAutomaticParser::RuleInteger); + enterRule(_localctx, 160, SparqlAutomaticParser::RuleInteger); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8123,7 +8197,7 @@ SparqlAutomaticParser::IntegerContext* SparqlAutomaticParser::integer() { }); try { enterOuterAlt(_localctx, 1); - setState(830); + setState(833); match(SparqlAutomaticParser::INTEGER); } catch (RecognitionException& e) { @@ -8180,7 +8254,7 @@ SparqlAutomaticParser::TriplesNodeContext* SparqlAutomaticParser::triplesNode() { TriplesNodeContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 160, SparqlAutomaticParser::RuleTriplesNode); + enterRule(_localctx, 162, SparqlAutomaticParser::RuleTriplesNode); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8190,19 +8264,19 @@ SparqlAutomaticParser::triplesNode() { exitRule(); }); try { - setState(834); + setState(837); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 1); - setState(832); + setState(835); collection(); break; } case SparqlAutomaticParser::T__15: { enterOuterAlt(_localctx, 2); - setState(833); + setState(836); blankNodePropertyList(); break; } @@ -8264,7 +8338,7 @@ SparqlAutomaticParser::BlankNodePropertyListContext* SparqlAutomaticParser::blankNodePropertyList() { BlankNodePropertyListContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 162, SparqlAutomaticParser::RuleBlankNodePropertyList); + enterRule(_localctx, 164, SparqlAutomaticParser::RuleBlankNodePropertyList); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8275,11 +8349,11 @@ SparqlAutomaticParser::blankNodePropertyList() { }); try { enterOuterAlt(_localctx, 1); - setState(836); + setState(839); match(SparqlAutomaticParser::T__15); - setState(837); + setState(840); propertyListNotEmpty(); - setState(838); + setState(841); match(SparqlAutomaticParser::T__16); } catch (RecognitionException& e) { @@ -8337,7 +8411,7 @@ SparqlAutomaticParser::TriplesNodePathContext* SparqlAutomaticParser::triplesNodePath() { TriplesNodePathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 164, SparqlAutomaticParser::RuleTriplesNodePath); + enterRule(_localctx, 166, SparqlAutomaticParser::RuleTriplesNodePath); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8347,19 +8421,19 @@ SparqlAutomaticParser::triplesNodePath() { exitRule(); }); try { - setState(842); + setState(845); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 1); - setState(840); + setState(843); collectionPath(); break; } case SparqlAutomaticParser::T__15: { enterOuterAlt(_localctx, 2); - setState(841); + setState(844); blankNodePropertyListPath(); break; } @@ -8423,7 +8497,7 @@ SparqlAutomaticParser::blankNodePropertyListPath() { BlankNodePropertyListPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 166, + enterRule(_localctx, 168, SparqlAutomaticParser::RuleBlankNodePropertyListPath); #if __cplusplus > 201703L @@ -8435,11 +8509,11 @@ SparqlAutomaticParser::blankNodePropertyListPath() { }); try { enterOuterAlt(_localctx, 1); - setState(844); + setState(847); match(SparqlAutomaticParser::T__15); - setState(845); + setState(848); propertyListPathNotEmpty(); - setState(846); + setState(849); match(SparqlAutomaticParser::T__16); } catch (RecognitionException& e) { @@ -8495,7 +8569,7 @@ antlrcpp::Any SparqlAutomaticParser::CollectionContext::accept( SparqlAutomaticParser::CollectionContext* SparqlAutomaticParser::collection() { CollectionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 168, SparqlAutomaticParser::RuleCollection); + enterRule(_localctx, 170, SparqlAutomaticParser::RuleCollection); size_t _la = 0; #if __cplusplus > 201703L @@ -8507,15 +8581,15 @@ SparqlAutomaticParser::CollectionContext* SparqlAutomaticParser::collection() { }); try { enterOuterAlt(_localctx, 1); - setState(848); + setState(851); match(SparqlAutomaticParser::T__1); - setState(850); + setState(853); _errHandler->sync(this); _la = _input->LA(1); do { - setState(849); - graphNode(); setState(852); + graphNode(); + setState(855); _errHandler->sync(this); _la = _input->LA(1); } while ( @@ -8548,7 +8622,7 @@ SparqlAutomaticParser::CollectionContext* SparqlAutomaticParser::collection() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | (1ULL << (SparqlAutomaticParser::NIL - 139)) | (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)); - setState(854); + setState(857); match(SparqlAutomaticParser::T__2); } catch (RecognitionException& e) { @@ -8605,7 +8679,7 @@ SparqlAutomaticParser::CollectionPathContext* SparqlAutomaticParser::collectionPath() { CollectionPathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 170, SparqlAutomaticParser::RuleCollectionPath); + enterRule(_localctx, 172, SparqlAutomaticParser::RuleCollectionPath); size_t _la = 0; #if __cplusplus > 201703L @@ -8617,15 +8691,15 @@ SparqlAutomaticParser::collectionPath() { }); try { enterOuterAlt(_localctx, 1); - setState(856); + setState(859); match(SparqlAutomaticParser::T__1); - setState(858); + setState(861); _errHandler->sync(this); _la = _input->LA(1); do { - setState(857); - graphNodePath(); setState(860); + graphNodePath(); + setState(863); _errHandler->sync(this); _la = _input->LA(1); } while ( @@ -8658,7 +8732,7 @@ SparqlAutomaticParser::collectionPath() { (1ULL << (SparqlAutomaticParser::STRING_LITERAL_LONG2 - 139)) | (1ULL << (SparqlAutomaticParser::NIL - 139)) | (1ULL << (SparqlAutomaticParser::ANON - 139)))) != 0)); - setState(862); + setState(865); match(SparqlAutomaticParser::T__2); } catch (RecognitionException& e) { @@ -8714,7 +8788,7 @@ antlrcpp::Any SparqlAutomaticParser::GraphNodeContext::accept( SparqlAutomaticParser::GraphNodeContext* SparqlAutomaticParser::graphNode() { GraphNodeContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 172, SparqlAutomaticParser::RuleGraphNode); + enterRule(_localctx, 174, SparqlAutomaticParser::RuleGraphNode); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8724,7 +8798,7 @@ SparqlAutomaticParser::GraphNodeContext* SparqlAutomaticParser::graphNode() { exitRule(); }); try { - setState(866); + setState(869); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__28: @@ -8752,7 +8826,7 @@ SparqlAutomaticParser::GraphNodeContext* SparqlAutomaticParser::graphNode() { case SparqlAutomaticParser::NIL: case SparqlAutomaticParser::ANON: { enterOuterAlt(_localctx, 1); - setState(864); + setState(867); varOrTerm(); break; } @@ -8760,7 +8834,7 @@ SparqlAutomaticParser::GraphNodeContext* SparqlAutomaticParser::graphNode() { case SparqlAutomaticParser::T__1: case SparqlAutomaticParser::T__15: { enterOuterAlt(_localctx, 2); - setState(865); + setState(868); triplesNode(); break; } @@ -8823,7 +8897,7 @@ SparqlAutomaticParser::GraphNodePathContext* SparqlAutomaticParser::graphNodePath() { GraphNodePathContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 174, SparqlAutomaticParser::RuleGraphNodePath); + enterRule(_localctx, 176, SparqlAutomaticParser::RuleGraphNodePath); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8833,7 +8907,7 @@ SparqlAutomaticParser::graphNodePath() { exitRule(); }); try { - setState(870); + setState(873); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__28: @@ -8861,7 +8935,7 @@ SparqlAutomaticParser::graphNodePath() { case SparqlAutomaticParser::NIL: case SparqlAutomaticParser::ANON: { enterOuterAlt(_localctx, 1); - setState(868); + setState(871); varOrTerm(); break; } @@ -8869,7 +8943,7 @@ SparqlAutomaticParser::graphNodePath() { case SparqlAutomaticParser::T__1: case SparqlAutomaticParser::T__15: { enterOuterAlt(_localctx, 2); - setState(869); + setState(872); triplesNodePath(); break; } @@ -8931,7 +9005,7 @@ antlrcpp::Any SparqlAutomaticParser::VarOrTermContext::accept( SparqlAutomaticParser::VarOrTermContext* SparqlAutomaticParser::varOrTerm() { VarOrTermContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 176, SparqlAutomaticParser::RuleVarOrTerm); + enterRule(_localctx, 178, SparqlAutomaticParser::RuleVarOrTerm); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8941,13 +9015,13 @@ SparqlAutomaticParser::VarOrTermContext* SparqlAutomaticParser::varOrTerm() { exitRule(); }); try { - setState(874); + setState(877); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { enterOuterAlt(_localctx, 1); - setState(872); + setState(875); var(); break; } @@ -8975,7 +9049,7 @@ SparqlAutomaticParser::VarOrTermContext* SparqlAutomaticParser::varOrTerm() { case SparqlAutomaticParser::NIL: case SparqlAutomaticParser::ANON: { enterOuterAlt(_localctx, 2); - setState(873); + setState(876); graphTerm(); break; } @@ -9037,7 +9111,7 @@ antlrcpp::Any SparqlAutomaticParser::VarOrIriContext::accept( SparqlAutomaticParser::VarOrIriContext* SparqlAutomaticParser::varOrIri() { VarOrIriContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 178, SparqlAutomaticParser::RuleVarOrIri); + enterRule(_localctx, 180, SparqlAutomaticParser::RuleVarOrIri); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9047,13 +9121,13 @@ SparqlAutomaticParser::VarOrIriContext* SparqlAutomaticParser::varOrIri() { exitRule(); }); try { - setState(878); + setState(881); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { enterOuterAlt(_localctx, 1); - setState(876); + setState(879); var(); break; } @@ -9063,7 +9137,7 @@ SparqlAutomaticParser::VarOrIriContext* SparqlAutomaticParser::varOrIri() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 2); - setState(877); + setState(880); iri(); break; } @@ -9122,7 +9196,7 @@ antlrcpp::Any SparqlAutomaticParser::VarContext::accept( SparqlAutomaticParser::VarContext* SparqlAutomaticParser::var() { VarContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 180, SparqlAutomaticParser::RuleVar); + enterRule(_localctx, 182, SparqlAutomaticParser::RuleVar); size_t _la = 0; #if __cplusplus > 201703L @@ -9134,7 +9208,7 @@ SparqlAutomaticParser::VarContext* SparqlAutomaticParser::var() { }); try { enterOuterAlt(_localctx, 1); - setState(880); + setState(883); _la = _input->LA(1); if (!(_la == SparqlAutomaticParser::VAR1 @@ -9217,7 +9291,7 @@ antlrcpp::Any SparqlAutomaticParser::GraphTermContext::accept( SparqlAutomaticParser::GraphTermContext* SparqlAutomaticParser::graphTerm() { GraphTermContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 182, SparqlAutomaticParser::RuleGraphTerm); + enterRule(_localctx, 184, SparqlAutomaticParser::RuleGraphTerm); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9227,7 +9301,7 @@ SparqlAutomaticParser::GraphTermContext* SparqlAutomaticParser::graphTerm() { exitRule(); }); try { - setState(888); + setState(891); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: @@ -9235,7 +9309,7 @@ SparqlAutomaticParser::GraphTermContext* SparqlAutomaticParser::graphTerm() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 1); - setState(882); + setState(885); iri(); break; } @@ -9245,7 +9319,7 @@ SparqlAutomaticParser::GraphTermContext* SparqlAutomaticParser::graphTerm() { case SparqlAutomaticParser::STRING_LITERAL_LONG1: case SparqlAutomaticParser::STRING_LITERAL_LONG2: { enterOuterAlt(_localctx, 2); - setState(883); + setState(886); rdfLiteral(); break; } @@ -9260,7 +9334,7 @@ SparqlAutomaticParser::GraphTermContext* SparqlAutomaticParser::graphTerm() { case SparqlAutomaticParser::DECIMAL_NEGATIVE: case SparqlAutomaticParser::DOUBLE_NEGATIVE: { enterOuterAlt(_localctx, 3); - setState(884); + setState(887); numericLiteral(); break; } @@ -9268,7 +9342,7 @@ SparqlAutomaticParser::GraphTermContext* SparqlAutomaticParser::graphTerm() { case SparqlAutomaticParser::T__28: case SparqlAutomaticParser::T__29: { enterOuterAlt(_localctx, 4); - setState(885); + setState(888); booleanLiteral(); break; } @@ -9276,14 +9350,14 @@ SparqlAutomaticParser::GraphTermContext* SparqlAutomaticParser::graphTerm() { case SparqlAutomaticParser::BLANK_NODE_LABEL: case SparqlAutomaticParser::ANON: { enterOuterAlt(_localctx, 5); - setState(886); + setState(889); blankNode(); break; } case SparqlAutomaticParser::NIL: { enterOuterAlt(_localctx, 6); - setState(887); + setState(890); match(SparqlAutomaticParser::NIL); break; } @@ -9341,7 +9415,7 @@ antlrcpp::Any SparqlAutomaticParser::ExpressionContext::accept( SparqlAutomaticParser::ExpressionContext* SparqlAutomaticParser::expression() { ExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 184, SparqlAutomaticParser::RuleExpression); + enterRule(_localctx, 186, SparqlAutomaticParser::RuleExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9352,7 +9426,7 @@ SparqlAutomaticParser::ExpressionContext* SparqlAutomaticParser::expression() { }); try { enterOuterAlt(_localctx, 1); - setState(890); + setState(893); conditionalOrExpression(); } catch (RecognitionException& e) { @@ -9417,7 +9491,7 @@ SparqlAutomaticParser::ConditionalOrExpressionContext* SparqlAutomaticParser::conditionalOrExpression() { ConditionalOrExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 186, SparqlAutomaticParser::RuleConditionalOrExpression); + enterRule(_localctx, 188, SparqlAutomaticParser::RuleConditionalOrExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -9429,17 +9503,17 @@ SparqlAutomaticParser::conditionalOrExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(892); + setState(895); conditionalAndExpression(); - setState(897); + setState(900); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__17) { - setState(893); + setState(896); match(SparqlAutomaticParser::T__17); - setState(894); + setState(897); conditionalAndExpression(); - setState(899); + setState(902); _errHandler->sync(this); _la = _input->LA(1); } @@ -9503,7 +9577,7 @@ SparqlAutomaticParser::conditionalAndExpression() { ConditionalAndExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 188, + enterRule(_localctx, 190, SparqlAutomaticParser::RuleConditionalAndExpression); size_t _la = 0; @@ -9516,17 +9590,17 @@ SparqlAutomaticParser::conditionalAndExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(900); + setState(903); valueLogical(); - setState(905); + setState(908); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__18) { - setState(901); + setState(904); match(SparqlAutomaticParser::T__18); - setState(902); + setState(905); valueLogical(); - setState(907); + setState(910); _errHandler->sync(this); _la = _input->LA(1); } @@ -9580,7 +9654,7 @@ SparqlAutomaticParser::ValueLogicalContext* SparqlAutomaticParser::valueLogical() { ValueLogicalContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 190, SparqlAutomaticParser::RuleValueLogical); + enterRule(_localctx, 192, SparqlAutomaticParser::RuleValueLogical); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9591,7 +9665,7 @@ SparqlAutomaticParser::valueLogical() { }); try { enterOuterAlt(_localctx, 1); - setState(908); + setState(911); relationalExpression(); } catch (RecognitionException& e) { @@ -9664,7 +9738,7 @@ SparqlAutomaticParser::RelationalExpressionContext* SparqlAutomaticParser::relationalExpression() { RelationalExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 192, SparqlAutomaticParser::RuleRelationalExpression); + enterRule(_localctx, 194, SparqlAutomaticParser::RuleRelationalExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9675,73 +9749,73 @@ SparqlAutomaticParser::relationalExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(910); + setState(913); numericExpression(); - setState(928); + setState(931); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__19: { - setState(911); + setState(914); match(SparqlAutomaticParser::T__19); - setState(912); + setState(915); numericExpression(); break; } case SparqlAutomaticParser::T__20: { - setState(913); + setState(916); match(SparqlAutomaticParser::T__20); - setState(914); + setState(917); numericExpression(); break; } case SparqlAutomaticParser::T__21: { - setState(915); + setState(918); match(SparqlAutomaticParser::T__21); - setState(916); + setState(919); numericExpression(); break; } case SparqlAutomaticParser::T__22: { - setState(917); + setState(920); match(SparqlAutomaticParser::T__22); - setState(918); + setState(921); numericExpression(); break; } case SparqlAutomaticParser::T__23: { - setState(919); + setState(922); match(SparqlAutomaticParser::T__23); - setState(920); + setState(923); numericExpression(); break; } case SparqlAutomaticParser::T__24: { - setState(921); + setState(924); match(SparqlAutomaticParser::T__24); - setState(922); + setState(925); numericExpression(); break; } case SparqlAutomaticParser::IN: { - setState(923); + setState(926); match(SparqlAutomaticParser::IN); - setState(924); + setState(927); expressionList(); break; } case SparqlAutomaticParser::NOT: { - setState(925); + setState(928); match(SparqlAutomaticParser::NOT); - setState(926); + setState(929); match(SparqlAutomaticParser::IN); - setState(927); + setState(930); expressionList(); break; } @@ -9808,7 +9882,7 @@ SparqlAutomaticParser::NumericExpressionContext* SparqlAutomaticParser::numericExpression() { NumericExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 194, SparqlAutomaticParser::RuleNumericExpression); + enterRule(_localctx, 196, SparqlAutomaticParser::RuleNumericExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9819,7 +9893,7 @@ SparqlAutomaticParser::numericExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(930); + setState(933); additiveExpression(); } catch (RecognitionException& e) { @@ -9894,7 +9968,7 @@ SparqlAutomaticParser::AdditiveExpressionContext* SparqlAutomaticParser::additiveExpression() { AdditiveExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 196, SparqlAutomaticParser::RuleAdditiveExpression); + enterRule(_localctx, 198, SparqlAutomaticParser::RuleAdditiveExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -9906,9 +9980,9 @@ SparqlAutomaticParser::additiveExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(932); + setState(935); multiplicativeExpression(); - setState(940); + setState(943); _errHandler->sync(this); _la = _input->LA(1); while ( @@ -9923,21 +9997,21 @@ SparqlAutomaticParser::additiveExpression() { (1ULL << (SparqlAutomaticParser::INTEGER_NEGATIVE - 150)) | (1ULL << (SparqlAutomaticParser::DECIMAL_NEGATIVE - 150)) | (1ULL << (SparqlAutomaticParser::DOUBLE_NEGATIVE - 150)))) != 0)) { - setState(938); + setState(941); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__12: { - setState(933); + setState(936); match(SparqlAutomaticParser::T__12); - setState(934); + setState(937); multiplicativeExpression(); break; } case SparqlAutomaticParser::T__25: { - setState(935); + setState(938); match(SparqlAutomaticParser::T__25); - setState(936); + setState(939); multiplicativeExpression(); break; } @@ -9948,7 +10022,7 @@ SparqlAutomaticParser::additiveExpression() { case SparqlAutomaticParser::INTEGER_NEGATIVE: case SparqlAutomaticParser::DECIMAL_NEGATIVE: case SparqlAutomaticParser::DOUBLE_NEGATIVE: { - setState(937); + setState(940); strangeMultiplicativeSubexprOfAdditive(); break; } @@ -9956,7 +10030,7 @@ SparqlAutomaticParser::additiveExpression() { default: throw NoViableAltException(this); } - setState(942); + setState(945); _errHandler->sync(this); _la = _input->LA(1); } @@ -10034,7 +10108,7 @@ SparqlAutomaticParser::strangeMultiplicativeSubexprOfAdditive() { StrangeMultiplicativeSubexprOfAdditiveContext* _localctx = _tracker.createInstance( _ctx, getState()); - enterRule(_localctx, 198, + enterRule(_localctx, 200, SparqlAutomaticParser::RuleStrangeMultiplicativeSubexprOfAdditive); size_t _la = 0; @@ -10047,13 +10121,13 @@ SparqlAutomaticParser::strangeMultiplicativeSubexprOfAdditive() { }); try { enterOuterAlt(_localctx, 1); - setState(945); + setState(948); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::INTEGER_POSITIVE: case SparqlAutomaticParser::DECIMAL_POSITIVE: case SparqlAutomaticParser::DOUBLE_POSITIVE: { - setState(943); + setState(946); numericLiteralPositive(); break; } @@ -10061,7 +10135,7 @@ SparqlAutomaticParser::strangeMultiplicativeSubexprOfAdditive() { case SparqlAutomaticParser::INTEGER_NEGATIVE: case SparqlAutomaticParser::DECIMAL_NEGATIVE: case SparqlAutomaticParser::DOUBLE_NEGATIVE: { - setState(944); + setState(947); numericLiteralNegative(); break; } @@ -10069,27 +10143,27 @@ SparqlAutomaticParser::strangeMultiplicativeSubexprOfAdditive() { default: throw NoViableAltException(this); } - setState(953); + setState(956); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__0 || _la == SparqlAutomaticParser::T__10) { - setState(951); + setState(954); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__0: { - setState(947); + setState(950); match(SparqlAutomaticParser::T__0); - setState(948); + setState(951); unaryExpression(); break; } case SparqlAutomaticParser::T__10: { - setState(949); + setState(952); match(SparqlAutomaticParser::T__10); - setState(950); + setState(953); unaryExpression(); break; } @@ -10097,7 +10171,7 @@ SparqlAutomaticParser::strangeMultiplicativeSubexprOfAdditive() { default: throw NoViableAltException(this); } - setState(955); + setState(958); _errHandler->sync(this); _la = _input->LA(1); } @@ -10162,7 +10236,7 @@ SparqlAutomaticParser::multiplicativeExpression() { MultiplicativeExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 200, + enterRule(_localctx, 202, SparqlAutomaticParser::RuleMultiplicativeExpression); size_t _la = 0; @@ -10175,29 +10249,29 @@ SparqlAutomaticParser::multiplicativeExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(956); + setState(959); unaryExpression(); - setState(963); + setState(966); _errHandler->sync(this); _la = _input->LA(1); while (_la == SparqlAutomaticParser::T__0 || _la == SparqlAutomaticParser::T__10) { - setState(961); + setState(964); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__0: { - setState(957); + setState(960); match(SparqlAutomaticParser::T__0); - setState(958); + setState(961); unaryExpression(); break; } case SparqlAutomaticParser::T__10: { - setState(959); + setState(962); match(SparqlAutomaticParser::T__10); - setState(960); + setState(963); unaryExpression(); break; } @@ -10205,7 +10279,7 @@ SparqlAutomaticParser::multiplicativeExpression() { default: throw NoViableAltException(this); } - setState(965); + setState(968); _errHandler->sync(this); _la = _input->LA(1); } @@ -10259,7 +10333,7 @@ SparqlAutomaticParser::UnaryExpressionContext* SparqlAutomaticParser::unaryExpression() { UnaryExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 202, SparqlAutomaticParser::RuleUnaryExpression); + enterRule(_localctx, 204, SparqlAutomaticParser::RuleUnaryExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -10269,32 +10343,32 @@ SparqlAutomaticParser::unaryExpression() { exitRule(); }); try { - setState(973); + setState(976); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__14: { enterOuterAlt(_localctx, 1); - setState(966); + setState(969); match(SparqlAutomaticParser::T__14); - setState(967); + setState(970); primaryExpression(); break; } case SparqlAutomaticParser::T__12: { enterOuterAlt(_localctx, 2); - setState(968); + setState(971); match(SparqlAutomaticParser::T__12); - setState(969); + setState(972); primaryExpression(); break; } case SparqlAutomaticParser::T__25: { enterOuterAlt(_localctx, 3); - setState(970); + setState(973); match(SparqlAutomaticParser::T__25); - setState(971); + setState(974); primaryExpression(); break; } @@ -10383,7 +10457,7 @@ SparqlAutomaticParser::unaryExpression() { case SparqlAutomaticParser::STRING_LITERAL_LONG1: case SparqlAutomaticParser::STRING_LITERAL_LONG2: { enterOuterAlt(_localctx, 4); - setState(972); + setState(975); primaryExpression(); break; } @@ -10471,7 +10545,7 @@ SparqlAutomaticParser::PrimaryExpressionContext* SparqlAutomaticParser::primaryExpression() { PrimaryExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 204, SparqlAutomaticParser::RulePrimaryExpression); + enterRule(_localctx, 206, SparqlAutomaticParser::RulePrimaryExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -10481,12 +10555,12 @@ SparqlAutomaticParser::primaryExpression() { exitRule(); }); try { - setState(982); + setState(985); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: { enterOuterAlt(_localctx, 1); - setState(975); + setState(978); brackettedExpression(); break; } @@ -10553,7 +10627,7 @@ SparqlAutomaticParser::primaryExpression() { case SparqlAutomaticParser::AVG: case SparqlAutomaticParser::SAMPLE: { enterOuterAlt(_localctx, 2); - setState(976); + setState(979); builtInCall(); break; } @@ -10563,7 +10637,7 @@ SparqlAutomaticParser::primaryExpression() { case SparqlAutomaticParser::PNAME_LN: case SparqlAutomaticParser::PREFIX_LANGTAG: { enterOuterAlt(_localctx, 3); - setState(977); + setState(980); iriOrFunction(); break; } @@ -10573,7 +10647,7 @@ SparqlAutomaticParser::primaryExpression() { case SparqlAutomaticParser::STRING_LITERAL_LONG1: case SparqlAutomaticParser::STRING_LITERAL_LONG2: { enterOuterAlt(_localctx, 4); - setState(978); + setState(981); rdfLiteral(); break; } @@ -10588,7 +10662,7 @@ SparqlAutomaticParser::primaryExpression() { case SparqlAutomaticParser::DECIMAL_NEGATIVE: case SparqlAutomaticParser::DOUBLE_NEGATIVE: { enterOuterAlt(_localctx, 5); - setState(979); + setState(982); numericLiteral(); break; } @@ -10596,7 +10670,7 @@ SparqlAutomaticParser::primaryExpression() { case SparqlAutomaticParser::T__28: case SparqlAutomaticParser::T__29: { enterOuterAlt(_localctx, 6); - setState(980); + setState(983); booleanLiteral(); break; } @@ -10604,7 +10678,7 @@ SparqlAutomaticParser::primaryExpression() { case SparqlAutomaticParser::VAR1: case SparqlAutomaticParser::VAR2: { enterOuterAlt(_localctx, 7); - setState(981); + setState(984); var(); break; } @@ -10664,7 +10738,7 @@ SparqlAutomaticParser::BrackettedExpressionContext* SparqlAutomaticParser::brackettedExpression() { BrackettedExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 206, SparqlAutomaticParser::RuleBrackettedExpression); + enterRule(_localctx, 208, SparqlAutomaticParser::RuleBrackettedExpression); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -10675,11 +10749,11 @@ SparqlAutomaticParser::brackettedExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(984); + setState(987); match(SparqlAutomaticParser::T__1); - setState(985); + setState(988); expression(); - setState(986); + setState(989); match(SparqlAutomaticParser::T__2); } catch (RecognitionException& e) { @@ -10980,7 +11054,7 @@ SparqlAutomaticParser::BuiltInCallContext* SparqlAutomaticParser::builtInCall() { BuiltInCallContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 208, SparqlAutomaticParser::RuleBuiltInCall); + enterRule(_localctx, 210, SparqlAutomaticParser::RuleBuiltInCall); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -10990,7 +11064,7 @@ SparqlAutomaticParser::builtInCall() { exitRule(); }); try { - setState(1250); + setState(1253); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::GROUP_CONCAT: @@ -11001,125 +11075,125 @@ SparqlAutomaticParser::builtInCall() { case SparqlAutomaticParser::AVG: case SparqlAutomaticParser::SAMPLE: { enterOuterAlt(_localctx, 1); - setState(988); + setState(991); aggregate(); break; } case SparqlAutomaticParser::STR: { enterOuterAlt(_localctx, 2); - setState(989); + setState(992); match(SparqlAutomaticParser::STR); - setState(990); + setState(993); match(SparqlAutomaticParser::T__1); - setState(991); + setState(994); expression(); - setState(992); + setState(995); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::LANG: { enterOuterAlt(_localctx, 3); - setState(994); + setState(997); match(SparqlAutomaticParser::LANG); - setState(995); + setState(998); match(SparqlAutomaticParser::T__1); - setState(996); + setState(999); expression(); - setState(997); + setState(1000); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::LANGMATCHES: { enterOuterAlt(_localctx, 4); - setState(999); + setState(1002); match(SparqlAutomaticParser::LANGMATCHES); - setState(1000); + setState(1003); match(SparqlAutomaticParser::T__1); - setState(1001); + setState(1004); expression(); - setState(1002); + setState(1005); match(SparqlAutomaticParser::T__6); - setState(1003); + setState(1006); expression(); - setState(1004); + setState(1007); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::DATATYPE: { enterOuterAlt(_localctx, 5); - setState(1006); + setState(1009); match(SparqlAutomaticParser::DATATYPE); - setState(1007); + setState(1010); match(SparqlAutomaticParser::T__1); - setState(1008); + setState(1011); expression(); - setState(1009); + setState(1012); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::BOUND: { enterOuterAlt(_localctx, 6); - setState(1011); + setState(1014); match(SparqlAutomaticParser::BOUND); - setState(1012); + setState(1015); match(SparqlAutomaticParser::T__1); - setState(1013); + setState(1016); var(); - setState(1014); + setState(1017); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::IRI: { enterOuterAlt(_localctx, 7); - setState(1016); + setState(1019); match(SparqlAutomaticParser::IRI); - setState(1017); + setState(1020); match(SparqlAutomaticParser::T__1); - setState(1018); + setState(1021); expression(); - setState(1019); + setState(1022); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::URI: { enterOuterAlt(_localctx, 8); - setState(1021); + setState(1024); match(SparqlAutomaticParser::URI); - setState(1022); + setState(1025); match(SparqlAutomaticParser::T__1); - setState(1023); + setState(1026); expression(); - setState(1024); + setState(1027); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::BNODE: { enterOuterAlt(_localctx, 9); - setState(1026); + setState(1029); match(SparqlAutomaticParser::BNODE); - setState(1032); + setState(1035); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__1: { - setState(1027); + setState(1030); match(SparqlAutomaticParser::T__1); - setState(1028); + setState(1031); expression(); - setState(1029); + setState(1032); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::NIL: { - setState(1031); + setState(1034); match(SparqlAutomaticParser::NIL); break; } @@ -11132,592 +11206,592 @@ SparqlAutomaticParser::builtInCall() { case SparqlAutomaticParser::RAND: { enterOuterAlt(_localctx, 10); - setState(1034); + setState(1037); match(SparqlAutomaticParser::RAND); - setState(1035); + setState(1038); match(SparqlAutomaticParser::NIL); break; } case SparqlAutomaticParser::ABS: { enterOuterAlt(_localctx, 11); - setState(1036); + setState(1039); match(SparqlAutomaticParser::ABS); - setState(1037); + setState(1040); match(SparqlAutomaticParser::T__1); - setState(1038); + setState(1041); expression(); - setState(1039); + setState(1042); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::CEIL: { enterOuterAlt(_localctx, 12); - setState(1041); + setState(1044); match(SparqlAutomaticParser::CEIL); - setState(1042); + setState(1045); match(SparqlAutomaticParser::T__1); - setState(1043); + setState(1046); expression(); - setState(1044); + setState(1047); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::FLOOR: { enterOuterAlt(_localctx, 13); - setState(1046); + setState(1049); match(SparqlAutomaticParser::FLOOR); - setState(1047); + setState(1050); match(SparqlAutomaticParser::T__1); - setState(1048); + setState(1051); expression(); - setState(1049); + setState(1052); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::ROUND: { enterOuterAlt(_localctx, 14); - setState(1051); + setState(1054); match(SparqlAutomaticParser::ROUND); - setState(1052); + setState(1055); match(SparqlAutomaticParser::T__1); - setState(1053); + setState(1056); expression(); - setState(1054); + setState(1057); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::CONCAT: { enterOuterAlt(_localctx, 15); - setState(1056); + setState(1059); match(SparqlAutomaticParser::CONCAT); - setState(1057); + setState(1060); expressionList(); break; } case SparqlAutomaticParser::SUBSTR: { enterOuterAlt(_localctx, 16); - setState(1058); + setState(1061); substringExpression(); break; } case SparqlAutomaticParser::STRLEN: { enterOuterAlt(_localctx, 17); - setState(1059); + setState(1062); match(SparqlAutomaticParser::STRLEN); - setState(1060); + setState(1063); match(SparqlAutomaticParser::T__1); - setState(1061); + setState(1064); expression(); - setState(1062); + setState(1065); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::REPLACE: { enterOuterAlt(_localctx, 18); - setState(1064); + setState(1067); strReplaceExpression(); break; } case SparqlAutomaticParser::UCASE: { enterOuterAlt(_localctx, 19); - setState(1065); + setState(1068); match(SparqlAutomaticParser::UCASE); - setState(1066); + setState(1069); match(SparqlAutomaticParser::T__1); - setState(1067); + setState(1070); expression(); - setState(1068); + setState(1071); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::LCASE: { enterOuterAlt(_localctx, 20); - setState(1070); + setState(1073); match(SparqlAutomaticParser::LCASE); - setState(1071); + setState(1074); match(SparqlAutomaticParser::T__1); - setState(1072); + setState(1075); expression(); - setState(1073); + setState(1076); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::ENCODE: { enterOuterAlt(_localctx, 21); - setState(1075); + setState(1078); match(SparqlAutomaticParser::ENCODE); - setState(1076); + setState(1079); match(SparqlAutomaticParser::T__26); - setState(1077); + setState(1080); match(SparqlAutomaticParser::FOR); - setState(1078); + setState(1081); match(SparqlAutomaticParser::T__26); - setState(1079); + setState(1082); match(SparqlAutomaticParser::URI); - setState(1080); + setState(1083); match(SparqlAutomaticParser::T__1); - setState(1081); + setState(1084); expression(); - setState(1082); + setState(1085); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::CONTAINS: { enterOuterAlt(_localctx, 22); - setState(1084); + setState(1087); match(SparqlAutomaticParser::CONTAINS); - setState(1085); + setState(1088); match(SparqlAutomaticParser::T__1); - setState(1086); + setState(1089); expression(); - setState(1087); + setState(1090); match(SparqlAutomaticParser::T__6); - setState(1088); + setState(1091); expression(); - setState(1089); + setState(1092); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::STRSTARTS: { enterOuterAlt(_localctx, 23); - setState(1091); + setState(1094); match(SparqlAutomaticParser::STRSTARTS); - setState(1092); + setState(1095); match(SparqlAutomaticParser::T__1); - setState(1093); + setState(1096); expression(); - setState(1094); + setState(1097); match(SparqlAutomaticParser::T__6); - setState(1095); + setState(1098); expression(); - setState(1096); + setState(1099); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::STRENDS: { enterOuterAlt(_localctx, 24); - setState(1098); + setState(1101); match(SparqlAutomaticParser::STRENDS); - setState(1099); + setState(1102); match(SparqlAutomaticParser::T__1); - setState(1100); + setState(1103); expression(); - setState(1101); + setState(1104); match(SparqlAutomaticParser::T__6); - setState(1102); + setState(1105); expression(); - setState(1103); + setState(1106); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::STRBEFORE: { enterOuterAlt(_localctx, 25); - setState(1105); + setState(1108); match(SparqlAutomaticParser::STRBEFORE); - setState(1106); + setState(1109); match(SparqlAutomaticParser::T__1); - setState(1107); + setState(1110); expression(); - setState(1108); + setState(1111); match(SparqlAutomaticParser::T__6); - setState(1109); + setState(1112); expression(); - setState(1110); + setState(1113); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::STRAFTER: { enterOuterAlt(_localctx, 26); - setState(1112); + setState(1115); match(SparqlAutomaticParser::STRAFTER); - setState(1113); + setState(1116); match(SparqlAutomaticParser::T__1); - setState(1114); + setState(1117); expression(); - setState(1115); + setState(1118); match(SparqlAutomaticParser::T__6); - setState(1116); + setState(1119); expression(); - setState(1117); + setState(1120); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::YEAR: { enterOuterAlt(_localctx, 27); - setState(1119); + setState(1122); match(SparqlAutomaticParser::YEAR); - setState(1120); + setState(1123); match(SparqlAutomaticParser::T__1); - setState(1121); + setState(1124); expression(); - setState(1122); + setState(1125); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::MONTH: { enterOuterAlt(_localctx, 28); - setState(1124); + setState(1127); match(SparqlAutomaticParser::MONTH); - setState(1125); + setState(1128); match(SparqlAutomaticParser::T__1); - setState(1126); + setState(1129); expression(); - setState(1127); + setState(1130); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::DAY: { enterOuterAlt(_localctx, 29); - setState(1129); + setState(1132); match(SparqlAutomaticParser::DAY); - setState(1130); + setState(1133); match(SparqlAutomaticParser::T__1); - setState(1131); + setState(1134); expression(); - setState(1132); + setState(1135); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::HOURS: { enterOuterAlt(_localctx, 30); - setState(1134); + setState(1137); match(SparqlAutomaticParser::HOURS); - setState(1135); + setState(1138); match(SparqlAutomaticParser::T__1); - setState(1136); + setState(1139); expression(); - setState(1137); + setState(1140); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::MINUTES: { enterOuterAlt(_localctx, 31); - setState(1139); + setState(1142); match(SparqlAutomaticParser::MINUTES); - setState(1140); + setState(1143); match(SparqlAutomaticParser::T__1); - setState(1141); + setState(1144); expression(); - setState(1142); + setState(1145); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::SECONDS: { enterOuterAlt(_localctx, 32); - setState(1144); + setState(1147); match(SparqlAutomaticParser::SECONDS); - setState(1145); + setState(1148); match(SparqlAutomaticParser::T__1); - setState(1146); + setState(1149); expression(); - setState(1147); + setState(1150); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::TIMEZONE: { enterOuterAlt(_localctx, 33); - setState(1149); + setState(1152); match(SparqlAutomaticParser::TIMEZONE); - setState(1150); + setState(1153); match(SparqlAutomaticParser::T__1); - setState(1151); + setState(1154); expression(); - setState(1152); + setState(1155); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::TZ: { enterOuterAlt(_localctx, 34); - setState(1154); + setState(1157); match(SparqlAutomaticParser::TZ); - setState(1155); + setState(1158); match(SparqlAutomaticParser::T__1); - setState(1156); + setState(1159); expression(); - setState(1157); + setState(1160); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::NOW: { enterOuterAlt(_localctx, 35); - setState(1159); + setState(1162); match(SparqlAutomaticParser::NOW); - setState(1160); + setState(1163); match(SparqlAutomaticParser::NIL); break; } case SparqlAutomaticParser::UUID: { enterOuterAlt(_localctx, 36); - setState(1161); + setState(1164); match(SparqlAutomaticParser::UUID); - setState(1162); + setState(1165); match(SparqlAutomaticParser::NIL); break; } case SparqlAutomaticParser::STRUUID: { enterOuterAlt(_localctx, 37); - setState(1163); + setState(1166); match(SparqlAutomaticParser::STRUUID); - setState(1164); + setState(1167); match(SparqlAutomaticParser::NIL); break; } case SparqlAutomaticParser::MD5: { enterOuterAlt(_localctx, 38); - setState(1165); + setState(1168); match(SparqlAutomaticParser::MD5); - setState(1166); + setState(1169); match(SparqlAutomaticParser::T__1); - setState(1167); + setState(1170); expression(); - setState(1168); + setState(1171); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::SHA1: { enterOuterAlt(_localctx, 39); - setState(1170); + setState(1173); match(SparqlAutomaticParser::SHA1); - setState(1171); + setState(1174); match(SparqlAutomaticParser::T__1); - setState(1172); + setState(1175); expression(); - setState(1173); + setState(1176); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::SHA256: { enterOuterAlt(_localctx, 40); - setState(1175); + setState(1178); match(SparqlAutomaticParser::SHA256); - setState(1176); + setState(1179); match(SparqlAutomaticParser::T__1); - setState(1177); + setState(1180); expression(); - setState(1178); + setState(1181); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::SHA384: { enterOuterAlt(_localctx, 41); - setState(1180); + setState(1183); match(SparqlAutomaticParser::SHA384); - setState(1181); + setState(1184); match(SparqlAutomaticParser::T__1); - setState(1182); + setState(1185); expression(); - setState(1183); + setState(1186); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::SHA512: { enterOuterAlt(_localctx, 42); - setState(1185); + setState(1188); match(SparqlAutomaticParser::SHA512); - setState(1186); + setState(1189); match(SparqlAutomaticParser::T__1); - setState(1187); + setState(1190); expression(); - setState(1188); + setState(1191); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::COALESCE: { enterOuterAlt(_localctx, 43); - setState(1190); + setState(1193); match(SparqlAutomaticParser::COALESCE); - setState(1191); + setState(1194); expressionList(); break; } case SparqlAutomaticParser::IF: { enterOuterAlt(_localctx, 44); - setState(1192); + setState(1195); match(SparqlAutomaticParser::IF); - setState(1193); + setState(1196); match(SparqlAutomaticParser::T__1); - setState(1194); + setState(1197); expression(); - setState(1195); + setState(1198); match(SparqlAutomaticParser::T__6); - setState(1196); + setState(1199); expression(); - setState(1197); + setState(1200); match(SparqlAutomaticParser::T__6); - setState(1198); + setState(1201); expression(); - setState(1199); + setState(1202); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::STRLANG: { enterOuterAlt(_localctx, 45); - setState(1201); + setState(1204); match(SparqlAutomaticParser::STRLANG); - setState(1202); + setState(1205); match(SparqlAutomaticParser::T__1); - setState(1203); + setState(1206); expression(); - setState(1204); + setState(1207); match(SparqlAutomaticParser::T__6); - setState(1205); + setState(1208); expression(); - setState(1206); + setState(1209); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::STRDT: { enterOuterAlt(_localctx, 46); - setState(1208); + setState(1211); match(SparqlAutomaticParser::STRDT); - setState(1209); + setState(1212); match(SparqlAutomaticParser::T__1); - setState(1210); + setState(1213); expression(); - setState(1211); + setState(1214); match(SparqlAutomaticParser::T__6); - setState(1212); + setState(1215); expression(); - setState(1213); + setState(1216); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::SAMETERM: { enterOuterAlt(_localctx, 47); - setState(1215); + setState(1218); match(SparqlAutomaticParser::SAMETERM); - setState(1216); + setState(1219); match(SparqlAutomaticParser::T__1); - setState(1217); + setState(1220); expression(); - setState(1218); + setState(1221); match(SparqlAutomaticParser::T__6); - setState(1219); + setState(1222); expression(); - setState(1220); + setState(1223); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::ISIRI: { enterOuterAlt(_localctx, 48); - setState(1222); + setState(1225); match(SparqlAutomaticParser::ISIRI); - setState(1223); + setState(1226); match(SparqlAutomaticParser::T__1); - setState(1224); + setState(1227); expression(); - setState(1225); + setState(1228); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::ISURI: { enterOuterAlt(_localctx, 49); - setState(1227); + setState(1230); match(SparqlAutomaticParser::ISURI); - setState(1228); + setState(1231); match(SparqlAutomaticParser::T__1); - setState(1229); + setState(1232); expression(); - setState(1230); + setState(1233); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::ISBLANK: { enterOuterAlt(_localctx, 50); - setState(1232); + setState(1235); match(SparqlAutomaticParser::ISBLANK); - setState(1233); + setState(1236); match(SparqlAutomaticParser::T__1); - setState(1234); + setState(1237); expression(); - setState(1235); + setState(1238); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::ISLITERAL: { enterOuterAlt(_localctx, 51); - setState(1237); + setState(1240); match(SparqlAutomaticParser::ISLITERAL); - setState(1238); + setState(1241); match(SparqlAutomaticParser::T__1); - setState(1239); + setState(1242); expression(); - setState(1240); + setState(1243); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::ISNUMERIC: { enterOuterAlt(_localctx, 52); - setState(1242); + setState(1245); match(SparqlAutomaticParser::ISNUMERIC); - setState(1243); + setState(1246); match(SparqlAutomaticParser::T__1); - setState(1244); + setState(1247); expression(); - setState(1245); + setState(1248); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::REGEX: { enterOuterAlt(_localctx, 53); - setState(1247); + setState(1250); regexExpression(); break; } case SparqlAutomaticParser::EXISTS: { enterOuterAlt(_localctx, 54); - setState(1248); + setState(1251); existsFunc(); break; } case SparqlAutomaticParser::NOT: { enterOuterAlt(_localctx, 55); - setState(1249); + setState(1252); notExistsFunc(); break; } @@ -11784,7 +11858,7 @@ SparqlAutomaticParser::RegexExpressionContext* SparqlAutomaticParser::regexExpression() { RegexExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 210, SparqlAutomaticParser::RuleRegexExpression); + enterRule(_localctx, 212, SparqlAutomaticParser::RuleRegexExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -11796,27 +11870,27 @@ SparqlAutomaticParser::regexExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(1252); + setState(1255); match(SparqlAutomaticParser::REGEX); - setState(1253); + setState(1256); match(SparqlAutomaticParser::T__1); - setState(1254); + setState(1257); expression(); - setState(1255); + setState(1258); match(SparqlAutomaticParser::T__6); - setState(1256); - expression(); setState(1259); + expression(); + setState(1262); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__6) { - setState(1257); + setState(1260); match(SparqlAutomaticParser::T__6); - setState(1258); + setState(1261); expression(); } - setState(1261); + setState(1264); match(SparqlAutomaticParser::T__2); } catch (RecognitionException& e) { @@ -11878,7 +11952,7 @@ SparqlAutomaticParser::SubstringExpressionContext* SparqlAutomaticParser::substringExpression() { SubstringExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 212, SparqlAutomaticParser::RuleSubstringExpression); + enterRule(_localctx, 214, SparqlAutomaticParser::RuleSubstringExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -11890,27 +11964,27 @@ SparqlAutomaticParser::substringExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(1263); + setState(1266); match(SparqlAutomaticParser::SUBSTR); - setState(1264); + setState(1267); match(SparqlAutomaticParser::T__1); - setState(1265); + setState(1268); expression(); - setState(1266); + setState(1269); match(SparqlAutomaticParser::T__6); - setState(1267); - expression(); setState(1270); + expression(); + setState(1273); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__6) { - setState(1268); + setState(1271); match(SparqlAutomaticParser::T__6); - setState(1269); + setState(1272); expression(); } - setState(1272); + setState(1275); match(SparqlAutomaticParser::T__2); } catch (RecognitionException& e) { @@ -11974,7 +12048,7 @@ SparqlAutomaticParser::StrReplaceExpressionContext* SparqlAutomaticParser::strReplaceExpression() { StrReplaceExpressionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 214, SparqlAutomaticParser::RuleStrReplaceExpression); + enterRule(_localctx, 216, SparqlAutomaticParser::RuleStrReplaceExpression); size_t _la = 0; #if __cplusplus > 201703L @@ -11986,31 +12060,31 @@ SparqlAutomaticParser::strReplaceExpression() { }); try { enterOuterAlt(_localctx, 1); - setState(1274); + setState(1277); match(SparqlAutomaticParser::REPLACE); - setState(1275); + setState(1278); match(SparqlAutomaticParser::T__1); - setState(1276); + setState(1279); expression(); - setState(1277); + setState(1280); match(SparqlAutomaticParser::T__6); - setState(1278); + setState(1281); expression(); - setState(1279); + setState(1282); match(SparqlAutomaticParser::T__6); - setState(1280); - expression(); setState(1283); + expression(); + setState(1286); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__6) { - setState(1281); + setState(1284); match(SparqlAutomaticParser::T__6); - setState(1282); + setState(1285); expression(); } - setState(1285); + setState(1288); match(SparqlAutomaticParser::T__2); } catch (RecognitionException& e) { @@ -12065,7 +12139,7 @@ antlrcpp::Any SparqlAutomaticParser::ExistsFuncContext::accept( SparqlAutomaticParser::ExistsFuncContext* SparqlAutomaticParser::existsFunc() { ExistsFuncContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 216, SparqlAutomaticParser::RuleExistsFunc); + enterRule(_localctx, 218, SparqlAutomaticParser::RuleExistsFunc); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12076,9 +12150,9 @@ SparqlAutomaticParser::ExistsFuncContext* SparqlAutomaticParser::existsFunc() { }); try { enterOuterAlt(_localctx, 1); - setState(1287); + setState(1290); match(SparqlAutomaticParser::EXISTS); - setState(1288); + setState(1291); groupGraphPattern(); } catch (RecognitionException& e) { @@ -12138,7 +12212,7 @@ SparqlAutomaticParser::NotExistsFuncContext* SparqlAutomaticParser::notExistsFunc() { NotExistsFuncContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 218, SparqlAutomaticParser::RuleNotExistsFunc); + enterRule(_localctx, 220, SparqlAutomaticParser::RuleNotExistsFunc); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12149,11 +12223,11 @@ SparqlAutomaticParser::notExistsFunc() { }); try { enterOuterAlt(_localctx, 1); - setState(1290); + setState(1293); match(SparqlAutomaticParser::NOT); - setState(1291); + setState(1294); match(SparqlAutomaticParser::EXISTS); - setState(1292); + setState(1295); groupGraphPattern(); } catch (RecognitionException& e) { @@ -12245,7 +12319,7 @@ antlrcpp::Any SparqlAutomaticParser::AggregateContext::accept( SparqlAutomaticParser::AggregateContext* SparqlAutomaticParser::aggregate() { AggregateContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 220, SparqlAutomaticParser::RuleAggregate); + enterRule(_localctx, 222, SparqlAutomaticParser::RuleAggregate); size_t _la = 0; #if __cplusplus > 201703L @@ -12256,28 +12330,28 @@ SparqlAutomaticParser::AggregateContext* SparqlAutomaticParser::aggregate() { exitRule(); }); try { - setState(1358); + setState(1361); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::COUNT: { enterOuterAlt(_localctx, 1); - setState(1294); + setState(1297); match(SparqlAutomaticParser::COUNT); - setState(1295); + setState(1298); match(SparqlAutomaticParser::T__1); - setState(1297); + setState(1300); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT) { - setState(1296); + setState(1299); match(SparqlAutomaticParser::DISTINCT); } - setState(1301); + setState(1304); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::T__0: { - setState(1299); + setState(1302); match(SparqlAutomaticParser::T__0); break; } @@ -12368,7 +12442,7 @@ SparqlAutomaticParser::AggregateContext* SparqlAutomaticParser::aggregate() { case SparqlAutomaticParser::STRING_LITERAL2: case SparqlAutomaticParser::STRING_LITERAL_LONG1: case SparqlAutomaticParser::STRING_LITERAL_LONG2: { - setState(1300); + setState(1303); expression(); break; } @@ -12376,147 +12450,147 @@ SparqlAutomaticParser::AggregateContext* SparqlAutomaticParser::aggregate() { default: throw NoViableAltException(this); } - setState(1303); + setState(1306); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::SUM: { enterOuterAlt(_localctx, 2); - setState(1304); + setState(1307); match(SparqlAutomaticParser::SUM); - setState(1305); + setState(1308); match(SparqlAutomaticParser::T__1); - setState(1307); + setState(1310); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT) { - setState(1306); + setState(1309); match(SparqlAutomaticParser::DISTINCT); } - setState(1309); + setState(1312); expression(); - setState(1310); + setState(1313); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::MIN: { enterOuterAlt(_localctx, 3); - setState(1312); + setState(1315); match(SparqlAutomaticParser::MIN); - setState(1313); + setState(1316); match(SparqlAutomaticParser::T__1); - setState(1315); + setState(1318); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT) { - setState(1314); + setState(1317); match(SparqlAutomaticParser::DISTINCT); } - setState(1317); + setState(1320); expression(); - setState(1318); + setState(1321); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::MAX: { enterOuterAlt(_localctx, 4); - setState(1320); + setState(1323); match(SparqlAutomaticParser::MAX); - setState(1321); + setState(1324); match(SparqlAutomaticParser::T__1); - setState(1323); + setState(1326); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT) { - setState(1322); + setState(1325); match(SparqlAutomaticParser::DISTINCT); } - setState(1325); + setState(1328); expression(); - setState(1326); + setState(1329); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::AVG: { enterOuterAlt(_localctx, 5); - setState(1328); + setState(1331); match(SparqlAutomaticParser::AVG); - setState(1329); + setState(1332); match(SparqlAutomaticParser::T__1); - setState(1331); + setState(1334); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT) { - setState(1330); + setState(1333); match(SparqlAutomaticParser::DISTINCT); } - setState(1333); + setState(1336); expression(); - setState(1334); + setState(1337); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::SAMPLE: { enterOuterAlt(_localctx, 6); - setState(1336); + setState(1339); match(SparqlAutomaticParser::SAMPLE); - setState(1337); + setState(1340); match(SparqlAutomaticParser::T__1); - setState(1339); + setState(1342); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT) { - setState(1338); + setState(1341); match(SparqlAutomaticParser::DISTINCT); } - setState(1341); + setState(1344); expression(); - setState(1342); + setState(1345); match(SparqlAutomaticParser::T__2); break; } case SparqlAutomaticParser::GROUP_CONCAT: { enterOuterAlt(_localctx, 7); - setState(1344); + setState(1347); match(SparqlAutomaticParser::GROUP_CONCAT); - setState(1345); + setState(1348); match(SparqlAutomaticParser::T__1); - setState(1347); + setState(1350); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::DISTINCT) { - setState(1346); + setState(1349); match(SparqlAutomaticParser::DISTINCT); } - setState(1349); + setState(1352); expression(); - setState(1354); + setState(1357); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__7) { - setState(1350); + setState(1353); match(SparqlAutomaticParser::T__7); - setState(1351); + setState(1354); match(SparqlAutomaticParser::SEPARATOR); - setState(1352); + setState(1355); match(SparqlAutomaticParser::T__19); - setState(1353); + setState(1356); string(); } - setState(1356); + setState(1359); match(SparqlAutomaticParser::T__2); break; } @@ -12579,7 +12653,7 @@ SparqlAutomaticParser::IriOrFunctionContext* SparqlAutomaticParser::iriOrFunction() { IriOrFunctionContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 222, SparqlAutomaticParser::RuleIriOrFunction); + enterRule(_localctx, 224, SparqlAutomaticParser::RuleIriOrFunction); size_t _la = 0; #if __cplusplus > 201703L @@ -12591,15 +12665,15 @@ SparqlAutomaticParser::iriOrFunction() { }); try { enterOuterAlt(_localctx, 1); - setState(1360); + setState(1363); iri(); - setState(1362); + setState(1365); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::T__1 || _la == SparqlAutomaticParser::NIL) { - setState(1361); + setState(1364); argList(); } @@ -12660,7 +12734,7 @@ antlrcpp::Any SparqlAutomaticParser::RdfLiteralContext::accept( SparqlAutomaticParser::RdfLiteralContext* SparqlAutomaticParser::rdfLiteral() { RdfLiteralContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 224, SparqlAutomaticParser::RuleRdfLiteral); + enterRule(_localctx, 226, SparqlAutomaticParser::RuleRdfLiteral); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12671,21 +12745,21 @@ SparqlAutomaticParser::RdfLiteralContext* SparqlAutomaticParser::rdfLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(1364); + setState(1367); string(); - setState(1368); + setState(1371); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::LANGTAG: { - setState(1365); + setState(1368); match(SparqlAutomaticParser::LANGTAG); break; } case SparqlAutomaticParser::T__27: { - setState(1366); + setState(1369); match(SparqlAutomaticParser::T__27); - setState(1367); + setState(1370); iri(); break; } @@ -12818,7 +12892,7 @@ SparqlAutomaticParser::NumericLiteralContext* SparqlAutomaticParser::numericLiteral() { NumericLiteralContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 226, SparqlAutomaticParser::RuleNumericLiteral); + enterRule(_localctx, 228, SparqlAutomaticParser::RuleNumericLiteral); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -12828,14 +12902,14 @@ SparqlAutomaticParser::numericLiteral() { exitRule(); }); try { - setState(1373); + setState(1376); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::INTEGER: case SparqlAutomaticParser::DECIMAL: case SparqlAutomaticParser::DOUBLE: { enterOuterAlt(_localctx, 1); - setState(1370); + setState(1373); numericLiteralUnsigned(); break; } @@ -12844,7 +12918,7 @@ SparqlAutomaticParser::numericLiteral() { case SparqlAutomaticParser::DECIMAL_POSITIVE: case SparqlAutomaticParser::DOUBLE_POSITIVE: { enterOuterAlt(_localctx, 2); - setState(1371); + setState(1374); numericLiteralPositive(); break; } @@ -12853,7 +12927,7 @@ SparqlAutomaticParser::numericLiteral() { case SparqlAutomaticParser::DECIMAL_NEGATIVE: case SparqlAutomaticParser::DOUBLE_NEGATIVE: { enterOuterAlt(_localctx, 3); - setState(1372); + setState(1375); numericLiteralNegative(); break; } @@ -12925,7 +12999,7 @@ SparqlAutomaticParser::NumericLiteralUnsignedContext* SparqlAutomaticParser::numericLiteralUnsigned() { NumericLiteralUnsignedContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 228, SparqlAutomaticParser::RuleNumericLiteralUnsigned); + enterRule(_localctx, 230, SparqlAutomaticParser::RuleNumericLiteralUnsigned); size_t _la = 0; #if __cplusplus > 201703L @@ -12937,7 +13011,7 @@ SparqlAutomaticParser::numericLiteralUnsigned() { }); try { enterOuterAlt(_localctx, 1); - setState(1375); + setState(1378); _la = _input->LA(1); if (!(((((_la - 147) & ~0x3fULL) == 0) && ((1ULL << (_la - 147)) & @@ -13013,7 +13087,7 @@ SparqlAutomaticParser::NumericLiteralPositiveContext* SparqlAutomaticParser::numericLiteralPositive() { NumericLiteralPositiveContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 230, SparqlAutomaticParser::RuleNumericLiteralPositive); + enterRule(_localctx, 232, SparqlAutomaticParser::RuleNumericLiteralPositive); size_t _la = 0; #if __cplusplus > 201703L @@ -13025,7 +13099,7 @@ SparqlAutomaticParser::numericLiteralPositive() { }); try { enterOuterAlt(_localctx, 1); - setState(1377); + setState(1380); _la = _input->LA(1); if (!(((((_la - 150) & ~0x3fULL) == 0) && ((1ULL << (_la - 150)) & @@ -13102,7 +13176,7 @@ SparqlAutomaticParser::NumericLiteralNegativeContext* SparqlAutomaticParser::numericLiteralNegative() { NumericLiteralNegativeContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 232, SparqlAutomaticParser::RuleNumericLiteralNegative); + enterRule(_localctx, 234, SparqlAutomaticParser::RuleNumericLiteralNegative); size_t _la = 0; #if __cplusplus > 201703L @@ -13114,7 +13188,7 @@ SparqlAutomaticParser::numericLiteralNegative() { }); try { enterOuterAlt(_localctx, 1); - setState(1379); + setState(1382); _la = _input->LA(1); if (!(((((_la - 153) & ~0x3fULL) == 0) && ((1ULL << (_la - 153)) & @@ -13172,7 +13246,7 @@ SparqlAutomaticParser::BooleanLiteralContext* SparqlAutomaticParser::booleanLiteral() { BooleanLiteralContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 234, SparqlAutomaticParser::RuleBooleanLiteral); + enterRule(_localctx, 236, SparqlAutomaticParser::RuleBooleanLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -13184,7 +13258,7 @@ SparqlAutomaticParser::booleanLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(1381); + setState(1384); _la = _input->LA(1); if (!(_la == SparqlAutomaticParser::T__28 @@ -13256,7 +13330,7 @@ antlrcpp::Any SparqlAutomaticParser::StringContext::accept( SparqlAutomaticParser::StringContext* SparqlAutomaticParser::string() { StringContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 236, SparqlAutomaticParser::RuleString); + enterRule(_localctx, 238, SparqlAutomaticParser::RuleString); size_t _la = 0; #if __cplusplus > 201703L @@ -13268,7 +13342,7 @@ SparqlAutomaticParser::StringContext* SparqlAutomaticParser::string() { }); try { enterOuterAlt(_localctx, 1); - setState(1383); + setState(1386); _la = _input->LA(1); if (!(((((_la - 157) & ~0x3fULL) == 0) && ((1ULL << (_la - 157)) & @@ -13339,7 +13413,7 @@ antlrcpp::Any SparqlAutomaticParser::IriContext::accept( SparqlAutomaticParser::IriContext* SparqlAutomaticParser::iri() { IriContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 238, SparqlAutomaticParser::RuleIri); + enterRule(_localctx, 240, SparqlAutomaticParser::RuleIri); size_t _la = 0; #if __cplusplus > 201703L @@ -13351,26 +13425,26 @@ SparqlAutomaticParser::IriContext* SparqlAutomaticParser::iri() { }); try { enterOuterAlt(_localctx, 1); - setState(1386); + setState(1389); _errHandler->sync(this); _la = _input->LA(1); if (_la == SparqlAutomaticParser::PREFIX_LANGTAG) { - setState(1385); + setState(1388); match(SparqlAutomaticParser::PREFIX_LANGTAG); } - setState(1390); + setState(1393); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::IRI_REF: { - setState(1388); + setState(1391); iriref(); break; } case SparqlAutomaticParser::PNAME_NS: case SparqlAutomaticParser::PNAME_LN: { - setState(1389); + setState(1392); prefixedName(); break; } @@ -13433,7 +13507,7 @@ SparqlAutomaticParser::PrefixedNameContext* SparqlAutomaticParser::prefixedName() { PrefixedNameContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 240, SparqlAutomaticParser::RulePrefixedName); + enterRule(_localctx, 242, SparqlAutomaticParser::RulePrefixedName); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13443,19 +13517,19 @@ SparqlAutomaticParser::prefixedName() { exitRule(); }); try { - setState(1394); + setState(1397); _errHandler->sync(this); switch (_input->LA(1)) { case SparqlAutomaticParser::PNAME_LN: { enterOuterAlt(_localctx, 1); - setState(1392); + setState(1395); pnameLn(); break; } case SparqlAutomaticParser::PNAME_NS: { enterOuterAlt(_localctx, 2); - setState(1393); + setState(1396); pnameNs(); break; } @@ -13516,7 +13590,7 @@ antlrcpp::Any SparqlAutomaticParser::BlankNodeContext::accept( SparqlAutomaticParser::BlankNodeContext* SparqlAutomaticParser::blankNode() { BlankNodeContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 242, SparqlAutomaticParser::RuleBlankNode); + enterRule(_localctx, 244, SparqlAutomaticParser::RuleBlankNode); size_t _la = 0; #if __cplusplus > 201703L @@ -13528,7 +13602,7 @@ SparqlAutomaticParser::BlankNodeContext* SparqlAutomaticParser::blankNode() { }); try { enterOuterAlt(_localctx, 1); - setState(1396); + setState(1399); _la = _input->LA(1); if (!(_la == SparqlAutomaticParser::BLANK_NODE_LABEL @@ -13586,7 +13660,7 @@ antlrcpp::Any SparqlAutomaticParser::IrirefContext::accept( SparqlAutomaticParser::IrirefContext* SparqlAutomaticParser::iriref() { IrirefContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 244, SparqlAutomaticParser::RuleIriref); + enterRule(_localctx, 246, SparqlAutomaticParser::RuleIriref); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13597,7 +13671,7 @@ SparqlAutomaticParser::IrirefContext* SparqlAutomaticParser::iriref() { }); try { enterOuterAlt(_localctx, 1); - setState(1398); + setState(1401); match(SparqlAutomaticParser::IRI_REF); } catch (RecognitionException& e) { @@ -13647,7 +13721,7 @@ antlrcpp::Any SparqlAutomaticParser::PnameLnContext::accept( SparqlAutomaticParser::PnameLnContext* SparqlAutomaticParser::pnameLn() { PnameLnContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 246, SparqlAutomaticParser::RulePnameLn); + enterRule(_localctx, 248, SparqlAutomaticParser::RulePnameLn); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13658,7 +13732,7 @@ SparqlAutomaticParser::PnameLnContext* SparqlAutomaticParser::pnameLn() { }); try { enterOuterAlt(_localctx, 1); - setState(1400); + setState(1403); match(SparqlAutomaticParser::PNAME_LN); } catch (RecognitionException& e) { @@ -13708,7 +13782,7 @@ antlrcpp::Any SparqlAutomaticParser::PnameNsContext::accept( SparqlAutomaticParser::PnameNsContext* SparqlAutomaticParser::pnameNs() { PnameNsContext* _localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 248, SparqlAutomaticParser::RulePnameNs); + enterRule(_localctx, 250, SparqlAutomaticParser::RulePnameNs); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -13719,7 +13793,7 @@ SparqlAutomaticParser::PnameNsContext* SparqlAutomaticParser::pnameNs() { }); try { enterOuterAlt(_localctx, 1); - setState(1402); + setState(1405); match(SparqlAutomaticParser::PNAME_NS); } catch (RecognitionException& e) { @@ -13773,6 +13847,7 @@ std::vector SparqlAutomaticParser::_ruleNames = { "triplesTemplate", "groupGraphPattern", "groupGraphPatternSub", + "graphPatternNotTriplesAndMaybeTriples", "triplesBlock", "graphPatternNotTriples", "optionalGraphPattern", @@ -14069,7 +14144,7 @@ SparqlAutomaticParser::Initializer::Initializer() { static const uint16_t serializedATNSegment0[] = { 0x3, 0x608b, 0xa72a, 0x8133, 0xb9ed, 0x417c, 0x3be7, 0x7786, 0x5964, - 0x3, 0xaf, 0x57f, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, + 0x3, 0xaf, 0x582, 0x4, 0x2, 0x9, 0x2, 0x4, 0x3, 0x9, 0x3, 0x4, 0x4, 0x9, 0x4, 0x4, 0x5, 0x9, 0x5, 0x4, 0x6, 0x9, 0x6, 0x4, 0x7, 0x9, 0x7, 0x4, 0x8, 0x9, 0x8, 0x4, 0x9, 0x9, 0x9, 0x4, @@ -14124,1328 +14199,1330 @@ SparqlAutomaticParser::Initializer::Initializer() { 0x76, 0x9, 0x76, 0x4, 0x77, 0x9, 0x77, 0x4, 0x78, 0x9, 0x78, 0x4, 0x79, 0x9, 0x79, 0x4, 0x7a, 0x9, 0x7a, 0x4, 0x7b, 0x9, 0x7b, 0x4, 0x7c, 0x9, 0x7c, - 0x4, 0x7d, 0x9, 0x7d, 0x4, 0x7e, 0x9, 0x7e, 0x3, - 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, - 0x5, 0x2, 0x102, 0xa, 0x2, 0x3, 0x2, 0x3, 0x2, - 0x3, 0x2, 0x3, 0x3, 0x3, 0x3, 0x7, 0x3, 0x109, - 0xa, 0x3, 0xc, 0x3, 0xe, 0x3, 0x10c, 0xb, 0x3, - 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x5, 0x3, - 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x6, 0x3, 0x6, - 0x7, 0x6, 0x117, 0xa, 0x6, 0xc, 0x6, 0xe, 0x6, - 0x11a, 0xb, 0x6, 0x3, 0x6, 0x3, 0x6, 0x3, 0x6, - 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, - 0x7, 0x3, 0x8, 0x3, 0x8, 0x5, 0x8, 0x126, 0xa, - 0x8, 0x3, 0x8, 0x6, 0x8, 0x129, 0xa, 0x8, 0xd, - 0x8, 0xe, 0x8, 0x12a, 0x3, 0x8, 0x5, 0x8, 0x12e, - 0xa, 0x8, 0x3, 0x9, 0x3, 0x9, 0x5, 0x9, 0x132, - 0xa, 0x9, 0x3, 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, - 0xa, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, 0x3, 0xb, - 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x7, 0xc, 0x13f, - 0xa, 0xc, 0xc, 0xc, 0xe, 0xc, 0x142, 0xb, 0xc, - 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x7, - 0xc, 0x148, 0xa, 0xc, 0xc, 0xc, 0xe, 0xc, 0x14b, - 0xb, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, 0xc, 0x5, - 0xc, 0x150, 0xa, 0xc, 0x3, 0xc, 0x3, 0xc, 0x5, - 0xc, 0x154, 0xa, 0xc, 0x3, 0xd, 0x3, 0xd, 0x6, - 0xd, 0x158, 0xa, 0xd, 0xd, 0xd, 0xe, 0xd, 0x159, - 0x3, 0xd, 0x5, 0xd, 0x15d, 0xa, 0xd, 0x3, 0xd, - 0x7, 0xd, 0x160, 0xa, 0xd, 0xc, 0xd, 0xe, 0xd, - 0x163, 0xb, 0xd, 0x3, 0xd, 0x5, 0xd, 0x166, 0xa, - 0xd, 0x3, 0xd, 0x3, 0xd, 0x3, 0xe, 0x3, 0xe, - 0x7, 0xe, 0x16c, 0xa, 0xe, 0xc, 0xe, 0xe, 0xe, - 0x16f, 0xb, 0xe, 0x3, 0xe, 0x3, 0xe, 0x3, 0xe, - 0x3, 0xf, 0x3, 0xf, 0x3, 0xf, 0x5, 0xf, 0x177, - 0xa, 0xf, 0x3, 0x10, 0x3, 0x10, 0x3, 0x11, 0x3, - 0x11, 0x3, 0x11, 0x3, 0x12, 0x3, 0x12, 0x3, 0x13, - 0x5, 0x13, 0x181, 0xa, 0x13, 0x3, 0x13, 0x3, 0x13, - 0x3, 0x14, 0x5, 0x14, 0x186, 0xa, 0x14, 0x3, 0x14, - 0x5, 0x14, 0x189, 0xa, 0x14, 0x3, 0x14, 0x5, 0x14, - 0x18c, 0xa, 0x14, 0x3, 0x14, 0x5, 0x14, 0x18f, 0xa, - 0x14, 0x3, 0x15, 0x3, 0x15, 0x6, 0x15, 0x193, 0xa, - 0x15, 0xd, 0x15, 0xe, 0x15, 0x194, 0x3, 0x16, 0x3, - 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, - 0x5, 0x16, 0x19d, 0xa, 0x16, 0x3, 0x16, 0x3, 0x16, - 0x3, 0x16, 0x5, 0x16, 0x1a2, 0xa, 0x16, 0x3, 0x17, - 0x3, 0x17, 0x6, 0x17, 0x1a6, 0xa, 0x17, 0xd, 0x17, - 0xe, 0x17, 0x1a7, 0x3, 0x18, 0x3, 0x18, 0x3, 0x19, - 0x3, 0x19, 0x6, 0x19, 0x1ae, 0xa, 0x19, 0xd, 0x19, - 0xe, 0x19, 0x1af, 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, - 0x3, 0x1a, 0x5, 0x1a, 0x1b6, 0xa, 0x1a, 0x5, 0x1a, - 0x1b8, 0xa, 0x1a, 0x3, 0x1b, 0x3, 0x1b, 0x5, 0x1b, - 0x1bc, 0xa, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1bf, 0xa, - 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1c3, 0xa, - 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1c6, 0xa, 0x1b, 0x3, - 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1ca, 0xa, 0x1b, 0x3, - 0x1b, 0x5, 0x1b, 0x1cd, 0xa, 0x1b, 0x3, 0x1b, 0x3, - 0x1b, 0x5, 0x1b, 0x1d1, 0xa, 0x1b, 0x3, 0x1b, 0x5, - 0x1b, 0x1d4, 0xa, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, - 0x1b, 0x1d8, 0xa, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1db, - 0xa, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1df, - 0xa, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1e2, 0xa, 0x1b, - 0x5, 0x1b, 0x1e4, 0xa, 0x1b, 0x3, 0x1c, 0x3, 0x1c, - 0x3, 0x1c, 0x3, 0x1d, 0x3, 0x1d, 0x3, 0x1d, 0x3, - 0x1e, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1f, 0x3, 0x1f, - 0x5, 0x1f, 0x1f1, 0xa, 0x1f, 0x3, 0x20, 0x3, 0x20, - 0x3, 0x20, 0x5, 0x20, 0x1f6, 0xa, 0x20, 0x5, 0x20, - 0x1f8, 0xa, 0x20, 0x3, 0x21, 0x3, 0x21, 0x3, 0x21, - 0x5, 0x21, 0x1fd, 0xa, 0x21, 0x3, 0x21, 0x3, 0x21, - 0x3, 0x22, 0x5, 0x22, 0x202, 0xa, 0x22, 0x3, 0x22, - 0x3, 0x22, 0x5, 0x22, 0x206, 0xa, 0x22, 0x3, 0x22, - 0x5, 0x22, 0x209, 0xa, 0x22, 0x7, 0x22, 0x20b, 0xa, - 0x22, 0xc, 0x22, 0xe, 0x22, 0x20e, 0xb, 0x22, 0x3, - 0x23, 0x3, 0x23, 0x3, 0x23, 0x5, 0x23, 0x213, 0xa, - 0x23, 0x5, 0x23, 0x215, 0xa, 0x23, 0x3, 0x24, 0x3, - 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, 0x3, 0x24, - 0x3, 0x24, 0x3, 0x24, 0x5, 0x24, 0x21f, 0xa, 0x24, - 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x26, 0x3, - 0x26, 0x3, 0x26, 0x3, 0x26, 0x3, 0x27, 0x3, 0x27, - 0x5, 0x27, 0x22a, 0xa, 0x27, 0x3, 0x27, 0x3, 0x27, - 0x3, 0x27, 0x3, 0x28, 0x3, 0x28, 0x3, 0x28, 0x3, - 0x28, 0x3, 0x28, 0x3, 0x28, 0x3, 0x28, 0x3, 0x29, - 0x3, 0x29, 0x3, 0x29, 0x3, 0x2a, 0x3, 0x2a, 0x5, - 0x2a, 0x23b, 0xa, 0x2a, 0x3, 0x2b, 0x3, 0x2b, 0x3, - 0x2b, 0x7, 0x2b, 0x240, 0xa, 0x2b, 0xc, 0x2b, 0xe, - 0x2b, 0x243, 0xb, 0x2b, 0x3, 0x2b, 0x3, 0x2b, 0x3, - 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x7, 0x2c, 0x24a, 0xa, - 0x2c, 0xc, 0x2c, 0xe, 0x2c, 0x24d, 0xb, 0x2c, 0x3, - 0x2c, 0x5, 0x2c, 0x250, 0xa, 0x2c, 0x3, 0x2c, 0x3, - 0x2c, 0x7, 0x2c, 0x254, 0xa, 0x2c, 0xc, 0x2c, 0xe, - 0x2c, 0x257, 0xb, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, - 0x2d, 0x3, 0x2d, 0x7, 0x2d, 0x25d, 0xa, 0x2d, 0xc, - 0x2d, 0xe, 0x2d, 0x260, 0xb, 0x2d, 0x3, 0x2d, 0x3, - 0x2d, 0x5, 0x2d, 0x264, 0xa, 0x2d, 0x3, 0x2e, 0x3, - 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x5, 0x2e, - 0x26b, 0xa, 0x2e, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, - 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x7, 0x30, 0x273, - 0xa, 0x30, 0xc, 0x30, 0xe, 0x30, 0x276, 0xb, 0x30, - 0x3, 0x31, 0x3, 0x31, 0x3, 0x31, 0x3, 0x32, 0x3, - 0x32, 0x3, 0x32, 0x5, 0x32, 0x27e, 0xa, 0x32, 0x3, - 0x33, 0x3, 0x33, 0x3, 0x33, 0x3, 0x34, 0x3, 0x34, - 0x3, 0x34, 0x5, 0x34, 0x286, 0xa, 0x34, 0x3, 0x34, - 0x3, 0x34, 0x3, 0x34, 0x7, 0x34, 0x28b, 0xa, 0x34, - 0xc, 0x34, 0xe, 0x34, 0x28e, 0xb, 0x34, 0x3, 0x34, - 0x3, 0x34, 0x5, 0x34, 0x292, 0xa, 0x34, 0x3, 0x35, - 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x7, - 0x35, 0x299, 0xa, 0x35, 0xc, 0x35, 0xe, 0x35, 0x29c, - 0xb, 0x35, 0x3, 0x35, 0x3, 0x35, 0x5, 0x35, 0x2a0, - 0xa, 0x35, 0x3, 0x36, 0x3, 0x36, 0x5, 0x36, 0x2a4, - 0xa, 0x36, 0x3, 0x36, 0x3, 0x36, 0x3, 0x37, 0x3, - 0x37, 0x3, 0x37, 0x5, 0x37, 0x2ab, 0xa, 0x37, 0x5, - 0x37, 0x2ad, 0xa, 0x37, 0x3, 0x38, 0x3, 0x38, 0x3, - 0x38, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, 0x5, 0x38, - 0x2b5, 0xa, 0x38, 0x3, 0x39, 0x5, 0x39, 0x2b8, 0xa, - 0x39, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, 0x3, 0x3a, - 0x3, 0x3a, 0x3, 0x3a, 0x5, 0x3a, 0x2c0, 0xa, 0x3a, - 0x7, 0x3a, 0x2c2, 0xa, 0x3a, 0xc, 0x3a, 0xe, 0x3a, - 0x2c5, 0xb, 0x3a, 0x3, 0x3b, 0x3, 0x3b, 0x5, 0x3b, - 0x2c9, 0xa, 0x3b, 0x3, 0x3c, 0x3, 0x3c, 0x3, 0x3c, - 0x7, 0x3c, 0x2ce, 0xa, 0x3c, 0xc, 0x3c, 0xe, 0x3c, - 0x2d1, 0xb, 0x3c, 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3e, - 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3e, 0x3, - 0x3e, 0x5, 0x3e, 0x2db, 0xa, 0x3e, 0x3, 0x3f, 0x5, - 0x3f, 0x2de, 0xa, 0x3f, 0x3, 0x40, 0x3, 0x40, 0x3, - 0x40, 0x5, 0x40, 0x2e3, 0xa, 0x40, 0x7, 0x40, 0x2e5, - 0xa, 0x40, 0xc, 0x40, 0xe, 0x40, 0x2e8, 0xb, 0x40, - 0x3, 0x41, 0x3, 0x41, 0x3, 0x42, 0x3, 0x42, 0x3, - 0x43, 0x3, 0x43, 0x3, 0x43, 0x3, 0x44, 0x3, 0x44, - 0x3, 0x44, 0x3, 0x45, 0x3, 0x45, 0x5, 0x45, 0x2f6, - 0xa, 0x45, 0x3, 0x46, 0x3, 0x46, 0x3, 0x46, 0x7, - 0x46, 0x2fb, 0xa, 0x46, 0xc, 0x46, 0xe, 0x46, 0x2fe, - 0xb, 0x46, 0x3, 0x47, 0x3, 0x47, 0x3, 0x48, 0x3, - 0x48, 0x3, 0x49, 0x3, 0x49, 0x3, 0x49, 0x7, 0x49, - 0x307, 0xa, 0x49, 0xc, 0x49, 0xe, 0x49, 0x30a, 0xb, - 0x49, 0x3, 0x4a, 0x3, 0x4a, 0x3, 0x4a, 0x7, 0x4a, - 0x30f, 0xa, 0x4a, 0xc, 0x4a, 0xe, 0x4a, 0x312, 0xb, - 0x4a, 0x3, 0x4b, 0x3, 0x4b, 0x5, 0x4b, 0x316, 0xa, - 0x4b, 0x3, 0x4c, 0x3, 0x4c, 0x3, 0x4c, 0x5, 0x4c, - 0x31b, 0xa, 0x4c, 0x3, 0x4d, 0x3, 0x4d, 0x3, 0x4e, - 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x3, - 0x4e, 0x3, 0x4e, 0x3, 0x4e, 0x5, 0x4e, 0x327, 0xa, - 0x4e, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, - 0x3, 0x4f, 0x7, 0x4f, 0x32e, 0xa, 0x4f, 0xc, 0x4f, - 0xe, 0x4f, 0x331, 0xb, 0x4f, 0x5, 0x4f, 0x333, 0xa, - 0x4f, 0x3, 0x4f, 0x5, 0x4f, 0x336, 0xa, 0x4f, 0x3, - 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, - 0x5, 0x50, 0x33d, 0xa, 0x50, 0x5, 0x50, 0x33f, 0xa, - 0x50, 0x3, 0x51, 0x3, 0x51, 0x3, 0x52, 0x3, 0x52, - 0x5, 0x52, 0x345, 0xa, 0x52, 0x3, 0x53, 0x3, 0x53, - 0x3, 0x53, 0x3, 0x53, 0x3, 0x54, 0x3, 0x54, 0x5, - 0x54, 0x34d, 0xa, 0x54, 0x3, 0x55, 0x3, 0x55, 0x3, - 0x55, 0x3, 0x55, 0x3, 0x56, 0x3, 0x56, 0x6, 0x56, - 0x355, 0xa, 0x56, 0xd, 0x56, 0xe, 0x56, 0x356, 0x3, - 0x56, 0x3, 0x56, 0x3, 0x57, 0x3, 0x57, 0x6, 0x57, - 0x35d, 0xa, 0x57, 0xd, 0x57, 0xe, 0x57, 0x35e, 0x3, - 0x57, 0x3, 0x57, 0x3, 0x58, 0x3, 0x58, 0x5, 0x58, - 0x365, 0xa, 0x58, 0x3, 0x59, 0x3, 0x59, 0x5, 0x59, - 0x369, 0xa, 0x59, 0x3, 0x5a, 0x3, 0x5a, 0x5, 0x5a, - 0x36d, 0xa, 0x5a, 0x3, 0x5b, 0x3, 0x5b, 0x5, 0x5b, - 0x371, 0xa, 0x5b, 0x3, 0x5c, 0x3, 0x5c, 0x3, 0x5d, - 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5d, 0x3, - 0x5d, 0x5, 0x5d, 0x37b, 0xa, 0x5d, 0x3, 0x5e, 0x3, - 0x5e, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x5f, 0x7, 0x5f, - 0x382, 0xa, 0x5f, 0xc, 0x5f, 0xe, 0x5f, 0x385, 0xb, - 0x5f, 0x3, 0x60, 0x3, 0x60, 0x3, 0x60, 0x7, 0x60, - 0x38a, 0xa, 0x60, 0xc, 0x60, 0xe, 0x60, 0x38d, 0xb, - 0x60, 0x3, 0x61, 0x3, 0x61, 0x3, 0x62, 0x3, 0x62, - 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, - 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, - 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, 0x62, 0x3, - 0x62, 0x3, 0x62, 0x3, 0x62, 0x5, 0x62, 0x3a3, 0xa, - 0x62, 0x3, 0x63, 0x3, 0x63, 0x3, 0x64, 0x3, 0x64, - 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x3, 0x64, 0x7, - 0x64, 0x3ad, 0xa, 0x64, 0xc, 0x64, 0xe, 0x64, 0x3b0, - 0xb, 0x64, 0x3, 0x65, 0x3, 0x65, 0x5, 0x65, 0x3b4, - 0xa, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, - 0x65, 0x7, 0x65, 0x3ba, 0xa, 0x65, 0xc, 0x65, 0xe, - 0x65, 0x3bd, 0xb, 0x65, 0x3, 0x66, 0x3, 0x66, 0x3, - 0x66, 0x3, 0x66, 0x3, 0x66, 0x7, 0x66, 0x3c4, 0xa, - 0x66, 0xc, 0x66, 0xe, 0x66, 0x3c7, 0xb, 0x66, 0x3, - 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, - 0x3, 0x67, 0x3, 0x67, 0x5, 0x67, 0x3d0, 0xa, 0x67, + 0x4, 0x7d, 0x9, 0x7d, 0x4, 0x7e, 0x9, 0x7e, 0x4, + 0x7f, 0x9, 0x7f, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, + 0x3, 0x2, 0x3, 0x2, 0x5, 0x2, 0x104, 0xa, 0x2, + 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, + 0x3, 0x7, 0x3, 0x10b, 0xa, 0x3, 0xc, 0x3, 0xe, + 0x3, 0x10e, 0xb, 0x3, 0x3, 0x4, 0x3, 0x4, 0x3, + 0x4, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, 0x3, 0x5, + 0x3, 0x6, 0x3, 0x6, 0x7, 0x6, 0x119, 0xa, 0x6, + 0xc, 0x6, 0xe, 0x6, 0x11c, 0xb, 0x6, 0x3, 0x6, + 0x3, 0x6, 0x3, 0x6, 0x3, 0x7, 0x3, 0x7, 0x3, + 0x7, 0x3, 0x7, 0x3, 0x7, 0x3, 0x8, 0x3, 0x8, + 0x5, 0x8, 0x128, 0xa, 0x8, 0x3, 0x8, 0x6, 0x8, + 0x12b, 0xa, 0x8, 0xd, 0x8, 0xe, 0x8, 0x12c, 0x3, + 0x8, 0x5, 0x8, 0x130, 0xa, 0x8, 0x3, 0x9, 0x3, + 0x9, 0x5, 0x9, 0x134, 0xa, 0x9, 0x3, 0xa, 0x3, + 0xa, 0x3, 0xa, 0x3, 0xa, 0x3, 0xb, 0x3, 0xb, + 0x3, 0xb, 0x3, 0xb, 0x3, 0xc, 0x3, 0xc, 0x3, + 0xc, 0x7, 0xc, 0x141, 0xa, 0xc, 0xc, 0xc, 0xe, + 0xc, 0x144, 0xb, 0xc, 0x3, 0xc, 0x3, 0xc, 0x3, + 0xc, 0x3, 0xc, 0x7, 0xc, 0x14a, 0xa, 0xc, 0xc, + 0xc, 0xe, 0xc, 0x14d, 0xb, 0xc, 0x3, 0xc, 0x3, + 0xc, 0x3, 0xc, 0x5, 0xc, 0x152, 0xa, 0xc, 0x3, + 0xc, 0x3, 0xc, 0x5, 0xc, 0x156, 0xa, 0xc, 0x3, + 0xd, 0x3, 0xd, 0x6, 0xd, 0x15a, 0xa, 0xd, 0xd, + 0xd, 0xe, 0xd, 0x15b, 0x3, 0xd, 0x5, 0xd, 0x15f, + 0xa, 0xd, 0x3, 0xd, 0x7, 0xd, 0x162, 0xa, 0xd, + 0xc, 0xd, 0xe, 0xd, 0x165, 0xb, 0xd, 0x3, 0xd, + 0x5, 0xd, 0x168, 0xa, 0xd, 0x3, 0xd, 0x3, 0xd, + 0x3, 0xe, 0x3, 0xe, 0x7, 0xe, 0x16e, 0xa, 0xe, + 0xc, 0xe, 0xe, 0xe, 0x171, 0xb, 0xe, 0x3, 0xe, + 0x3, 0xe, 0x3, 0xe, 0x3, 0xf, 0x3, 0xf, 0x3, + 0xf, 0x5, 0xf, 0x179, 0xa, 0xf, 0x3, 0x10, 0x3, + 0x10, 0x3, 0x11, 0x3, 0x11, 0x3, 0x11, 0x3, 0x12, + 0x3, 0x12, 0x3, 0x13, 0x5, 0x13, 0x183, 0xa, 0x13, + 0x3, 0x13, 0x3, 0x13, 0x3, 0x14, 0x5, 0x14, 0x188, + 0xa, 0x14, 0x3, 0x14, 0x5, 0x14, 0x18b, 0xa, 0x14, + 0x3, 0x14, 0x5, 0x14, 0x18e, 0xa, 0x14, 0x3, 0x14, + 0x5, 0x14, 0x191, 0xa, 0x14, 0x3, 0x15, 0x3, 0x15, + 0x6, 0x15, 0x195, 0xa, 0x15, 0xd, 0x15, 0xe, 0x15, + 0x196, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, + 0x3, 0x16, 0x3, 0x16, 0x5, 0x16, 0x19f, 0xa, 0x16, + 0x3, 0x16, 0x3, 0x16, 0x3, 0x16, 0x5, 0x16, 0x1a4, + 0xa, 0x16, 0x3, 0x17, 0x3, 0x17, 0x6, 0x17, 0x1a8, + 0xa, 0x17, 0xd, 0x17, 0xe, 0x17, 0x1a9, 0x3, 0x18, + 0x3, 0x18, 0x3, 0x19, 0x3, 0x19, 0x6, 0x19, 0x1b0, + 0xa, 0x19, 0xd, 0x19, 0xe, 0x19, 0x1b1, 0x3, 0x1a, + 0x3, 0x1a, 0x3, 0x1a, 0x3, 0x1a, 0x5, 0x1a, 0x1b8, + 0xa, 0x1a, 0x5, 0x1a, 0x1ba, 0xa, 0x1a, 0x3, 0x1b, + 0x3, 0x1b, 0x5, 0x1b, 0x1be, 0xa, 0x1b, 0x3, 0x1b, + 0x5, 0x1b, 0x1c1, 0xa, 0x1b, 0x3, 0x1b, 0x3, 0x1b, + 0x5, 0x1b, 0x1c5, 0xa, 0x1b, 0x3, 0x1b, 0x5, 0x1b, + 0x1c8, 0xa, 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, 0x1b, + 0x1cc, 0xa, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1cf, 0xa, + 0x1b, 0x3, 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1d3, 0xa, + 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1d6, 0xa, 0x1b, 0x3, + 0x1b, 0x3, 0x1b, 0x5, 0x1b, 0x1da, 0xa, 0x1b, 0x3, + 0x1b, 0x5, 0x1b, 0x1dd, 0xa, 0x1b, 0x3, 0x1b, 0x3, + 0x1b, 0x5, 0x1b, 0x1e1, 0xa, 0x1b, 0x3, 0x1b, 0x5, + 0x1b, 0x1e4, 0xa, 0x1b, 0x5, 0x1b, 0x1e6, 0xa, 0x1b, + 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1c, 0x3, 0x1d, 0x3, + 0x1d, 0x3, 0x1d, 0x3, 0x1e, 0x3, 0x1e, 0x3, 0x1e, + 0x3, 0x1f, 0x3, 0x1f, 0x5, 0x1f, 0x1f3, 0xa, 0x1f, + 0x3, 0x20, 0x3, 0x20, 0x3, 0x20, 0x5, 0x20, 0x1f8, + 0xa, 0x20, 0x5, 0x20, 0x1fa, 0xa, 0x20, 0x3, 0x21, + 0x3, 0x21, 0x3, 0x21, 0x5, 0x21, 0x1ff, 0xa, 0x21, + 0x3, 0x21, 0x3, 0x21, 0x3, 0x22, 0x5, 0x22, 0x204, + 0xa, 0x22, 0x3, 0x22, 0x7, 0x22, 0x207, 0xa, 0x22, + 0xc, 0x22, 0xe, 0x22, 0x20a, 0xb, 0x22, 0x3, 0x23, + 0x3, 0x23, 0x5, 0x23, 0x20e, 0xa, 0x23, 0x3, 0x23, + 0x5, 0x23, 0x211, 0xa, 0x23, 0x3, 0x24, 0x3, 0x24, + 0x3, 0x24, 0x5, 0x24, 0x216, 0xa, 0x24, 0x5, 0x24, + 0x218, 0xa, 0x24, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, + 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, 0x25, 0x3, + 0x25, 0x5, 0x25, 0x222, 0xa, 0x25, 0x3, 0x26, 0x3, + 0x26, 0x3, 0x26, 0x3, 0x27, 0x3, 0x27, 0x3, 0x27, + 0x3, 0x27, 0x3, 0x28, 0x3, 0x28, 0x5, 0x28, 0x22d, + 0xa, 0x28, 0x3, 0x28, 0x3, 0x28, 0x3, 0x28, 0x3, + 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, 0x3, 0x29, + 0x3, 0x29, 0x3, 0x29, 0x3, 0x2a, 0x3, 0x2a, 0x3, + 0x2a, 0x3, 0x2b, 0x3, 0x2b, 0x5, 0x2b, 0x23e, 0xa, + 0x2b, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x7, 0x2c, + 0x243, 0xa, 0x2c, 0xc, 0x2c, 0xe, 0x2c, 0x246, 0xb, + 0x2c, 0x3, 0x2c, 0x3, 0x2c, 0x3, 0x2d, 0x3, 0x2d, + 0x3, 0x2d, 0x7, 0x2d, 0x24d, 0xa, 0x2d, 0xc, 0x2d, + 0xe, 0x2d, 0x250, 0xb, 0x2d, 0x3, 0x2d, 0x5, 0x2d, + 0x253, 0xa, 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x7, 0x2d, + 0x257, 0xa, 0x2d, 0xc, 0x2d, 0xe, 0x2d, 0x25a, 0xb, + 0x2d, 0x3, 0x2d, 0x3, 0x2d, 0x3, 0x2e, 0x3, 0x2e, + 0x7, 0x2e, 0x260, 0xa, 0x2e, 0xc, 0x2e, 0xe, 0x2e, + 0x263, 0xb, 0x2e, 0x3, 0x2e, 0x3, 0x2e, 0x5, 0x2e, + 0x267, 0xa, 0x2e, 0x3, 0x2f, 0x3, 0x2f, 0x3, 0x2f, + 0x3, 0x2f, 0x3, 0x2f, 0x5, 0x2f, 0x26e, 0xa, 0x2f, + 0x3, 0x30, 0x3, 0x30, 0x3, 0x30, 0x3, 0x31, 0x3, + 0x31, 0x3, 0x31, 0x7, 0x31, 0x276, 0xa, 0x31, 0xc, + 0x31, 0xe, 0x31, 0x279, 0xb, 0x31, 0x3, 0x32, 0x3, + 0x32, 0x3, 0x32, 0x3, 0x33, 0x3, 0x33, 0x3, 0x33, + 0x5, 0x33, 0x281, 0xa, 0x33, 0x3, 0x34, 0x3, 0x34, + 0x3, 0x34, 0x3, 0x35, 0x3, 0x35, 0x3, 0x35, 0x5, + 0x35, 0x289, 0xa, 0x35, 0x3, 0x35, 0x3, 0x35, 0x3, + 0x35, 0x7, 0x35, 0x28e, 0xa, 0x35, 0xc, 0x35, 0xe, + 0x35, 0x291, 0xb, 0x35, 0x3, 0x35, 0x3, 0x35, 0x5, + 0x35, 0x295, 0xa, 0x35, 0x3, 0x36, 0x3, 0x36, 0x3, + 0x36, 0x3, 0x36, 0x3, 0x36, 0x7, 0x36, 0x29c, 0xa, + 0x36, 0xc, 0x36, 0xe, 0x36, 0x29f, 0xb, 0x36, 0x3, + 0x36, 0x3, 0x36, 0x5, 0x36, 0x2a3, 0xa, 0x36, 0x3, + 0x37, 0x3, 0x37, 0x5, 0x37, 0x2a7, 0xa, 0x37, 0x3, + 0x37, 0x3, 0x37, 0x3, 0x38, 0x3, 0x38, 0x3, 0x38, + 0x5, 0x38, 0x2ae, 0xa, 0x38, 0x5, 0x38, 0x2b0, 0xa, + 0x38, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, 0x3, 0x39, + 0x3, 0x39, 0x3, 0x39, 0x5, 0x39, 0x2b8, 0xa, 0x39, + 0x3, 0x3a, 0x5, 0x3a, 0x2bb, 0xa, 0x3a, 0x3, 0x3b, + 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, 0x3b, 0x3, + 0x3b, 0x5, 0x3b, 0x2c3, 0xa, 0x3b, 0x7, 0x3b, 0x2c5, + 0xa, 0x3b, 0xc, 0x3b, 0xe, 0x3b, 0x2c8, 0xb, 0x3b, + 0x3, 0x3c, 0x3, 0x3c, 0x5, 0x3c, 0x2cc, 0xa, 0x3c, + 0x3, 0x3d, 0x3, 0x3d, 0x3, 0x3d, 0x7, 0x3d, 0x2d1, + 0xa, 0x3d, 0xc, 0x3d, 0xe, 0x3d, 0x2d4, 0xb, 0x3d, + 0x3, 0x3e, 0x3, 0x3e, 0x3, 0x3f, 0x3, 0x3f, 0x3, + 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x3, 0x3f, 0x5, 0x3f, + 0x2de, 0xa, 0x3f, 0x3, 0x40, 0x5, 0x40, 0x2e1, 0xa, + 0x40, 0x3, 0x41, 0x3, 0x41, 0x3, 0x41, 0x5, 0x41, + 0x2e6, 0xa, 0x41, 0x7, 0x41, 0x2e8, 0xa, 0x41, 0xc, + 0x41, 0xe, 0x41, 0x2eb, 0xb, 0x41, 0x3, 0x42, 0x3, + 0x42, 0x3, 0x43, 0x3, 0x43, 0x3, 0x44, 0x3, 0x44, + 0x3, 0x44, 0x3, 0x45, 0x3, 0x45, 0x3, 0x45, 0x3, + 0x46, 0x3, 0x46, 0x5, 0x46, 0x2f9, 0xa, 0x46, 0x3, + 0x47, 0x3, 0x47, 0x3, 0x47, 0x7, 0x47, 0x2fe, 0xa, + 0x47, 0xc, 0x47, 0xe, 0x47, 0x301, 0xb, 0x47, 0x3, + 0x48, 0x3, 0x48, 0x3, 0x49, 0x3, 0x49, 0x3, 0x4a, + 0x3, 0x4a, 0x3, 0x4a, 0x7, 0x4a, 0x30a, 0xa, 0x4a, + 0xc, 0x4a, 0xe, 0x4a, 0x30d, 0xb, 0x4a, 0x3, 0x4b, + 0x3, 0x4b, 0x3, 0x4b, 0x7, 0x4b, 0x312, 0xa, 0x4b, + 0xc, 0x4b, 0xe, 0x4b, 0x315, 0xb, 0x4b, 0x3, 0x4c, + 0x3, 0x4c, 0x5, 0x4c, 0x319, 0xa, 0x4c, 0x3, 0x4d, + 0x3, 0x4d, 0x3, 0x4d, 0x5, 0x4d, 0x31e, 0xa, 0x4d, + 0x3, 0x4e, 0x3, 0x4e, 0x3, 0x4f, 0x3, 0x4f, 0x3, + 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, 0x3, 0x4f, + 0x3, 0x4f, 0x5, 0x4f, 0x32a, 0xa, 0x4f, 0x3, 0x50, + 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x3, 0x50, 0x7, + 0x50, 0x331, 0xa, 0x50, 0xc, 0x50, 0xe, 0x50, 0x334, + 0xb, 0x50, 0x5, 0x50, 0x336, 0xa, 0x50, 0x3, 0x50, + 0x5, 0x50, 0x339, 0xa, 0x50, 0x3, 0x51, 0x3, 0x51, + 0x3, 0x51, 0x3, 0x51, 0x3, 0x51, 0x5, 0x51, 0x340, + 0xa, 0x51, 0x5, 0x51, 0x342, 0xa, 0x51, 0x3, 0x52, + 0x3, 0x52, 0x3, 0x53, 0x3, 0x53, 0x5, 0x53, 0x348, + 0xa, 0x53, 0x3, 0x54, 0x3, 0x54, 0x3, 0x54, 0x3, + 0x54, 0x3, 0x55, 0x3, 0x55, 0x5, 0x55, 0x350, 0xa, + 0x55, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, 0x3, 0x56, + 0x3, 0x57, 0x3, 0x57, 0x6, 0x57, 0x358, 0xa, 0x57, + 0xd, 0x57, 0xe, 0x57, 0x359, 0x3, 0x57, 0x3, 0x57, + 0x3, 0x58, 0x3, 0x58, 0x6, 0x58, 0x360, 0xa, 0x58, + 0xd, 0x58, 0xe, 0x58, 0x361, 0x3, 0x58, 0x3, 0x58, + 0x3, 0x59, 0x3, 0x59, 0x5, 0x59, 0x368, 0xa, 0x59, + 0x3, 0x5a, 0x3, 0x5a, 0x5, 0x5a, 0x36c, 0xa, 0x5a, + 0x3, 0x5b, 0x3, 0x5b, 0x5, 0x5b, 0x370, 0xa, 0x5b, + 0x3, 0x5c, 0x3, 0x5c, 0x5, 0x5c, 0x374, 0xa, 0x5c, + 0x3, 0x5d, 0x3, 0x5d, 0x3, 0x5e, 0x3, 0x5e, 0x3, + 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x3, 0x5e, 0x5, 0x5e, + 0x37e, 0xa, 0x5e, 0x3, 0x5f, 0x3, 0x5f, 0x3, 0x60, + 0x3, 0x60, 0x3, 0x60, 0x7, 0x60, 0x385, 0xa, 0x60, + 0xc, 0x60, 0xe, 0x60, 0x388, 0xb, 0x60, 0x3, 0x61, + 0x3, 0x61, 0x3, 0x61, 0x7, 0x61, 0x38d, 0xa, 0x61, + 0xc, 0x61, 0xe, 0x61, 0x390, 0xb, 0x61, 0x3, 0x62, + 0x3, 0x62, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, + 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, + 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, + 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, 0x3, 0x63, + 0x3, 0x63, 0x5, 0x63, 0x3a6, 0xa, 0x63, 0x3, 0x64, + 0x3, 0x64, 0x3, 0x65, 0x3, 0x65, 0x3, 0x65, 0x3, + 0x65, 0x3, 0x65, 0x3, 0x65, 0x7, 0x65, 0x3b0, 0xa, + 0x65, 0xc, 0x65, 0xe, 0x65, 0x3b3, 0xb, 0x65, 0x3, + 0x66, 0x3, 0x66, 0x5, 0x66, 0x3b7, 0xa, 0x66, 0x3, + 0x66, 0x3, 0x66, 0x3, 0x66, 0x3, 0x66, 0x7, 0x66, + 0x3bd, 0xa, 0x66, 0xc, 0x66, 0xe, 0x66, 0x3c0, 0xb, + 0x66, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, 0x3, 0x67, + 0x3, 0x67, 0x7, 0x67, 0x3c7, 0xa, 0x67, 0xc, 0x67, + 0xe, 0x67, 0x3ca, 0xb, 0x67, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, 0x68, 0x3, - 0x68, 0x3, 0x68, 0x3, 0x68, 0x5, 0x68, 0x3d9, 0xa, - 0x68, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x5, 0x6a, - 0x40b, 0xa, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, - 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, - 0x6a, 0x3, 0x6a, 0x5, 0x6a, 0x4e5, 0xa, 0x6a, 0x3, + 0x68, 0x5, 0x68, 0x3d3, 0xa, 0x68, 0x3, 0x69, 0x3, + 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, 0x3, 0x69, + 0x3, 0x69, 0x5, 0x69, 0x3dc, 0xa, 0x69, 0x3, 0x6a, + 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6a, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x5, 0x6b, 0x40e, 0xa, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, + 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, + 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6b, - 0x3, 0x6b, 0x3, 0x6b, 0x5, 0x6b, 0x4ee, 0xa, 0x6b, - 0x3, 0x6b, 0x3, 0x6b, 0x3, 0x6c, 0x3, 0x6c, 0x3, - 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, - 0x5, 0x6c, 0x4f9, 0xa, 0x6c, 0x3, 0x6c, 0x3, 0x6c, - 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, - 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, - 0x5, 0x6d, 0x506, 0xa, 0x6d, 0x3, 0x6d, 0x3, 0x6d, - 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6f, 0x3, - 0x6f, 0x3, 0x6f, 0x3, 0x6f, 0x3, 0x70, 0x3, 0x70, - 0x3, 0x70, 0x5, 0x70, 0x514, 0xa, 0x70, 0x3, 0x70, - 0x3, 0x70, 0x5, 0x70, 0x518, 0xa, 0x70, 0x3, 0x70, - 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x5, 0x70, 0x51e, - 0xa, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, - 0x70, 0x3, 0x70, 0x3, 0x70, 0x5, 0x70, 0x526, 0xa, - 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, - 0x3, 0x70, 0x3, 0x70, 0x5, 0x70, 0x52e, 0xa, 0x70, - 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, - 0x70, 0x3, 0x70, 0x5, 0x70, 0x536, 0xa, 0x70, 0x3, - 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, - 0x3, 0x70, 0x5, 0x70, 0x53e, 0xa, 0x70, 0x3, 0x70, - 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, - 0x70, 0x5, 0x70, 0x546, 0xa, 0x70, 0x3, 0x70, 0x3, - 0x70, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, 0x5, 0x70, - 0x54d, 0xa, 0x70, 0x3, 0x70, 0x3, 0x70, 0x5, 0x70, - 0x551, 0xa, 0x70, 0x3, 0x71, 0x3, 0x71, 0x5, 0x71, - 0x555, 0xa, 0x71, 0x3, 0x72, 0x3, 0x72, 0x3, 0x72, - 0x3, 0x72, 0x5, 0x72, 0x55b, 0xa, 0x72, 0x3, 0x73, - 0x3, 0x73, 0x3, 0x73, 0x5, 0x73, 0x560, 0xa, 0x73, - 0x3, 0x74, 0x3, 0x74, 0x3, 0x75, 0x3, 0x75, 0x3, - 0x76, 0x3, 0x76, 0x3, 0x77, 0x3, 0x77, 0x3, 0x78, - 0x3, 0x78, 0x3, 0x79, 0x5, 0x79, 0x56d, 0xa, 0x79, - 0x3, 0x79, 0x3, 0x79, 0x5, 0x79, 0x571, 0xa, 0x79, - 0x3, 0x7a, 0x3, 0x7a, 0x5, 0x7a, 0x575, 0xa, 0x7a, - 0x3, 0x7b, 0x3, 0x7b, 0x3, 0x7c, 0x3, 0x7c, 0x3, - 0x7d, 0x3, 0x7d, 0x3, 0x7e, 0x3, 0x7e, 0x3, 0x7e, - 0x2, 0x2, 0x7f, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, - 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, - 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, - 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, - 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, - 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, - 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, - 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, - 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, - 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, - 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xc0, - 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, - 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, - 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, - 0xf8, 0xfa, 0x2, 0xc, 0x3, 0x2, 0x24, 0x25, 0x3, - 0x2, 0x31, 0x32, 0x4, 0x2, 0x3, 0x3, 0xf, 0x10, - 0x3, 0x2, 0x91, 0x92, 0x3, 0x2, 0x95, 0x97, 0x3, - 0x2, 0x98, 0x9a, 0x3, 0x2, 0x9b, 0x9d, 0x3, 0x2, - 0x1f, 0x20, 0x3, 0x2, 0x9f, 0xa2, 0x4, 0x2, 0x90, - 0x90, 0xa5, 0xa5, 0x2, 0x5ee, 0x2, 0xfc, 0x3, 0x2, - 0x2, 0x2, 0x4, 0x10a, 0x3, 0x2, 0x2, 0x2, 0x6, - 0x10d, 0x3, 0x2, 0x2, 0x2, 0x8, 0x110, 0x3, 0x2, - 0x2, 0x2, 0xa, 0x114, 0x3, 0x2, 0x2, 0x2, 0xc, - 0x11e, 0x3, 0x2, 0x2, 0x2, 0xe, 0x123, 0x3, 0x2, - 0x2, 0x2, 0x10, 0x131, 0x3, 0x2, 0x2, 0x2, 0x12, - 0x133, 0x3, 0x2, 0x2, 0x2, 0x14, 0x137, 0x3, 0x2, - 0x2, 0x2, 0x16, 0x13b, 0x3, 0x2, 0x2, 0x2, 0x18, - 0x155, 0x3, 0x2, 0x2, 0x2, 0x1a, 0x169, 0x3, 0x2, - 0x2, 0x2, 0x1c, 0x173, 0x3, 0x2, 0x2, 0x2, 0x1e, - 0x178, 0x3, 0x2, 0x2, 0x2, 0x20, 0x17a, 0x3, 0x2, - 0x2, 0x2, 0x22, 0x17d, 0x3, 0x2, 0x2, 0x2, 0x24, - 0x180, 0x3, 0x2, 0x2, 0x2, 0x26, 0x185, 0x3, 0x2, - 0x2, 0x2, 0x28, 0x190, 0x3, 0x2, 0x2, 0x2, 0x2a, - 0x1a1, 0x3, 0x2, 0x2, 0x2, 0x2c, 0x1a3, 0x3, 0x2, - 0x2, 0x2, 0x2e, 0x1a9, 0x3, 0x2, 0x2, 0x2, 0x30, - 0x1ab, 0x3, 0x2, 0x2, 0x2, 0x32, 0x1b7, 0x3, 0x2, - 0x2, 0x2, 0x34, 0x1e3, 0x3, 0x2, 0x2, 0x2, 0x36, - 0x1e5, 0x3, 0x2, 0x2, 0x2, 0x38, 0x1e8, 0x3, 0x2, - 0x2, 0x2, 0x3a, 0x1eb, 0x3, 0x2, 0x2, 0x2, 0x3c, - 0x1f0, 0x3, 0x2, 0x2, 0x2, 0x3e, 0x1f2, 0x3, 0x2, - 0x2, 0x2, 0x40, 0x1f9, 0x3, 0x2, 0x2, 0x2, 0x42, - 0x201, 0x3, 0x2, 0x2, 0x2, 0x44, 0x20f, 0x3, 0x2, - 0x2, 0x2, 0x46, 0x21e, 0x3, 0x2, 0x2, 0x2, 0x48, - 0x220, 0x3, 0x2, 0x2, 0x2, 0x4a, 0x223, 0x3, 0x2, - 0x2, 0x2, 0x4c, 0x227, 0x3, 0x2, 0x2, 0x2, 0x4e, - 0x22e, 0x3, 0x2, 0x2, 0x2, 0x50, 0x235, 0x3, 0x2, - 0x2, 0x2, 0x52, 0x23a, 0x3, 0x2, 0x2, 0x2, 0x54, - 0x23c, 0x3, 0x2, 0x2, 0x2, 0x56, 0x24f, 0x3, 0x2, - 0x2, 0x2, 0x58, 0x263, 0x3, 0x2, 0x2, 0x2, 0x5a, - 0x26a, 0x3, 0x2, 0x2, 0x2, 0x5c, 0x26c, 0x3, 0x2, - 0x2, 0x2, 0x5e, 0x26f, 0x3, 0x2, 0x2, 0x2, 0x60, - 0x277, 0x3, 0x2, 0x2, 0x2, 0x62, 0x27d, 0x3, 0x2, - 0x2, 0x2, 0x64, 0x27f, 0x3, 0x2, 0x2, 0x2, 0x66, - 0x291, 0x3, 0x2, 0x2, 0x2, 0x68, 0x29f, 0x3, 0x2, - 0x2, 0x2, 0x6a, 0x2a1, 0x3, 0x2, 0x2, 0x2, 0x6c, - 0x2a7, 0x3, 0x2, 0x2, 0x2, 0x6e, 0x2b4, 0x3, 0x2, - 0x2, 0x2, 0x70, 0x2b7, 0x3, 0x2, 0x2, 0x2, 0x72, - 0x2b9, 0x3, 0x2, 0x2, 0x2, 0x74, 0x2c8, 0x3, 0x2, - 0x2, 0x2, 0x76, 0x2ca, 0x3, 0x2, 0x2, 0x2, 0x78, - 0x2d2, 0x3, 0x2, 0x2, 0x2, 0x7a, 0x2da, 0x3, 0x2, - 0x2, 0x2, 0x7c, 0x2dd, 0x3, 0x2, 0x2, 0x2, 0x7e, - 0x2df, 0x3, 0x2, 0x2, 0x2, 0x80, 0x2e9, 0x3, 0x2, - 0x2, 0x2, 0x82, 0x2eb, 0x3, 0x2, 0x2, 0x2, 0x84, - 0x2ed, 0x3, 0x2, 0x2, 0x2, 0x86, 0x2f0, 0x3, 0x2, - 0x2, 0x2, 0x88, 0x2f5, 0x3, 0x2, 0x2, 0x2, 0x8a, - 0x2f7, 0x3, 0x2, 0x2, 0x2, 0x8c, 0x2ff, 0x3, 0x2, - 0x2, 0x2, 0x8e, 0x301, 0x3, 0x2, 0x2, 0x2, 0x90, - 0x303, 0x3, 0x2, 0x2, 0x2, 0x92, 0x30b, 0x3, 0x2, - 0x2, 0x2, 0x94, 0x313, 0x3, 0x2, 0x2, 0x2, 0x96, - 0x31a, 0x3, 0x2, 0x2, 0x2, 0x98, 0x31c, 0x3, 0x2, - 0x2, 0x2, 0x9a, 0x326, 0x3, 0x2, 0x2, 0x2, 0x9c, - 0x335, 0x3, 0x2, 0x2, 0x2, 0x9e, 0x33e, 0x3, 0x2, - 0x2, 0x2, 0xa0, 0x340, 0x3, 0x2, 0x2, 0x2, 0xa2, - 0x344, 0x3, 0x2, 0x2, 0x2, 0xa4, 0x346, 0x3, 0x2, - 0x2, 0x2, 0xa6, 0x34c, 0x3, 0x2, 0x2, 0x2, 0xa8, - 0x34e, 0x3, 0x2, 0x2, 0x2, 0xaa, 0x352, 0x3, 0x2, - 0x2, 0x2, 0xac, 0x35a, 0x3, 0x2, 0x2, 0x2, 0xae, - 0x364, 0x3, 0x2, 0x2, 0x2, 0xb0, 0x368, 0x3, 0x2, - 0x2, 0x2, 0xb2, 0x36c, 0x3, 0x2, 0x2, 0x2, 0xb4, - 0x370, 0x3, 0x2, 0x2, 0x2, 0xb6, 0x372, 0x3, 0x2, - 0x2, 0x2, 0xb8, 0x37a, 0x3, 0x2, 0x2, 0x2, 0xba, - 0x37c, 0x3, 0x2, 0x2, 0x2, 0xbc, 0x37e, 0x3, 0x2, - 0x2, 0x2, 0xbe, 0x386, 0x3, 0x2, 0x2, 0x2, 0xc0, - 0x38e, 0x3, 0x2, 0x2, 0x2, 0xc2, 0x390, 0x3, 0x2, - 0x2, 0x2, 0xc4, 0x3a4, 0x3, 0x2, 0x2, 0x2, 0xc6, - 0x3a6, 0x3, 0x2, 0x2, 0x2, 0xc8, 0x3b3, 0x3, 0x2, - 0x2, 0x2, 0xca, 0x3be, 0x3, 0x2, 0x2, 0x2, 0xcc, - 0x3cf, 0x3, 0x2, 0x2, 0x2, 0xce, 0x3d8, 0x3, 0x2, - 0x2, 0x2, 0xd0, 0x3da, 0x3, 0x2, 0x2, 0x2, 0xd2, - 0x4e4, 0x3, 0x2, 0x2, 0x2, 0xd4, 0x4e6, 0x3, 0x2, - 0x2, 0x2, 0xd6, 0x4f1, 0x3, 0x2, 0x2, 0x2, 0xd8, - 0x4fc, 0x3, 0x2, 0x2, 0x2, 0xda, 0x509, 0x3, 0x2, - 0x2, 0x2, 0xdc, 0x50c, 0x3, 0x2, 0x2, 0x2, 0xde, - 0x550, 0x3, 0x2, 0x2, 0x2, 0xe0, 0x552, 0x3, 0x2, - 0x2, 0x2, 0xe2, 0x556, 0x3, 0x2, 0x2, 0x2, 0xe4, - 0x55f, 0x3, 0x2, 0x2, 0x2, 0xe6, 0x561, 0x3, 0x2, - 0x2, 0x2, 0xe8, 0x563, 0x3, 0x2, 0x2, 0x2, 0xea, - 0x565, 0x3, 0x2, 0x2, 0x2, 0xec, 0x567, 0x3, 0x2, - 0x2, 0x2, 0xee, 0x569, 0x3, 0x2, 0x2, 0x2, 0xf0, - 0x56c, 0x3, 0x2, 0x2, 0x2, 0xf2, 0x574, 0x3, 0x2, - 0x2, 0x2, 0xf4, 0x576, 0x3, 0x2, 0x2, 0x2, 0xf6, - 0x578, 0x3, 0x2, 0x2, 0x2, 0xf8, 0x57a, 0x3, 0x2, - 0x2, 0x2, 0xfa, 0x57c, 0x3, 0x2, 0x2, 0x2, 0xfc, - 0x101, 0x5, 0x4, 0x3, 0x2, 0xfd, 0x102, 0x5, 0xa, - 0x6, 0x2, 0xfe, 0x102, 0x5, 0x16, 0xc, 0x2, 0xff, - 0x102, 0x5, 0x18, 0xd, 0x2, 0x100, 0x102, 0x5, 0x1a, - 0xe, 0x2, 0x101, 0xfd, 0x3, 0x2, 0x2, 0x2, 0x101, - 0xfe, 0x3, 0x2, 0x2, 0x2, 0x101, 0xff, 0x3, 0x2, - 0x2, 0x2, 0x101, 0x100, 0x3, 0x2, 0x2, 0x2, 0x102, - 0x103, 0x3, 0x2, 0x2, 0x2, 0x103, 0x104, 0x5, 0x3c, - 0x1f, 0x2, 0x104, 0x105, 0x7, 0x2, 0x2, 0x3, 0x105, - 0x3, 0x3, 0x2, 0x2, 0x2, 0x106, 0x109, 0x5, 0x6, - 0x4, 0x2, 0x107, 0x109, 0x5, 0x8, 0x5, 0x2, 0x108, - 0x106, 0x3, 0x2, 0x2, 0x2, 0x108, 0x107, 0x3, 0x2, - 0x2, 0x2, 0x109, 0x10c, 0x3, 0x2, 0x2, 0x2, 0x10a, - 0x108, 0x3, 0x2, 0x2, 0x2, 0x10a, 0x10b, 0x3, 0x2, - 0x2, 0x2, 0x10b, 0x5, 0x3, 0x2, 0x2, 0x2, 0x10c, - 0x10a, 0x3, 0x2, 0x2, 0x2, 0x10d, 0x10e, 0x7, 0x21, - 0x2, 0x2, 0x10e, 0x10f, 0x5, 0xf6, 0x7c, 0x2, 0x10f, - 0x7, 0x3, 0x2, 0x2, 0x2, 0x110, 0x111, 0x7, 0x22, - 0x2, 0x2, 0x111, 0x112, 0x7, 0x8e, 0x2, 0x2, 0x112, - 0x113, 0x5, 0xf6, 0x7c, 0x2, 0x113, 0x9, 0x3, 0x2, - 0x2, 0x2, 0x114, 0x118, 0x5, 0xe, 0x8, 0x2, 0x115, - 0x117, 0x5, 0x1c, 0xf, 0x2, 0x116, 0x115, 0x3, 0x2, - 0x2, 0x2, 0x117, 0x11a, 0x3, 0x2, 0x2, 0x2, 0x118, - 0x116, 0x3, 0x2, 0x2, 0x2, 0x118, 0x119, 0x3, 0x2, - 0x2, 0x2, 0x119, 0x11b, 0x3, 0x2, 0x2, 0x2, 0x11a, - 0x118, 0x3, 0x2, 0x2, 0x2, 0x11b, 0x11c, 0x5, 0x24, - 0x13, 0x2, 0x11c, 0x11d, 0x5, 0x26, 0x14, 0x2, 0x11d, - 0xb, 0x3, 0x2, 0x2, 0x2, 0x11e, 0x11f, 0x5, 0xe, - 0x8, 0x2, 0x11f, 0x120, 0x5, 0x24, 0x13, 0x2, 0x120, - 0x121, 0x5, 0x26, 0x14, 0x2, 0x121, 0x122, 0x5, 0x3c, - 0x1f, 0x2, 0x122, 0xd, 0x3, 0x2, 0x2, 0x2, 0x123, - 0x125, 0x7, 0x23, 0x2, 0x2, 0x124, 0x126, 0x9, 0x2, - 0x2, 0x2, 0x125, 0x124, 0x3, 0x2, 0x2, 0x2, 0x125, - 0x126, 0x3, 0x2, 0x2, 0x2, 0x126, 0x12d, 0x3, 0x2, - 0x2, 0x2, 0x127, 0x129, 0x5, 0x10, 0x9, 0x2, 0x128, - 0x127, 0x3, 0x2, 0x2, 0x2, 0x129, 0x12a, 0x3, 0x2, - 0x2, 0x2, 0x12a, 0x128, 0x3, 0x2, 0x2, 0x2, 0x12a, - 0x12b, 0x3, 0x2, 0x2, 0x2, 0x12b, 0x12e, 0x3, 0x2, - 0x2, 0x2, 0x12c, 0x12e, 0x7, 0x3, 0x2, 0x2, 0x12d, - 0x128, 0x3, 0x2, 0x2, 0x2, 0x12d, 0x12c, 0x3, 0x2, - 0x2, 0x2, 0x12e, 0xf, 0x3, 0x2, 0x2, 0x2, 0x12f, - 0x132, 0x5, 0xb6, 0x5c, 0x2, 0x130, 0x132, 0x5, 0x12, - 0xa, 0x2, 0x131, 0x12f, 0x3, 0x2, 0x2, 0x2, 0x131, - 0x130, 0x3, 0x2, 0x2, 0x2, 0x132, 0x11, 0x3, 0x2, - 0x2, 0x2, 0x133, 0x134, 0x7, 0x4, 0x2, 0x2, 0x134, - 0x135, 0x5, 0x14, 0xb, 0x2, 0x135, 0x136, 0x7, 0x5, - 0x2, 0x2, 0x136, 0x13, 0x3, 0x2, 0x2, 0x2, 0x137, - 0x138, 0x5, 0xba, 0x5e, 0x2, 0x138, 0x139, 0x7, 0x26, - 0x2, 0x2, 0x139, 0x13a, 0x5, 0xb6, 0x5c, 0x2, 0x13a, - 0x15, 0x3, 0x2, 0x2, 0x2, 0x13b, 0x153, 0x7, 0x27, - 0x2, 0x2, 0x13c, 0x140, 0x5, 0x6a, 0x36, 0x2, 0x13d, - 0x13f, 0x5, 0x1c, 0xf, 0x2, 0x13e, 0x13d, 0x3, 0x2, - 0x2, 0x2, 0x13f, 0x142, 0x3, 0x2, 0x2, 0x2, 0x140, - 0x13e, 0x3, 0x2, 0x2, 0x2, 0x140, 0x141, 0x3, 0x2, - 0x2, 0x2, 0x141, 0x143, 0x3, 0x2, 0x2, 0x2, 0x142, - 0x140, 0x3, 0x2, 0x2, 0x2, 0x143, 0x144, 0x5, 0x24, - 0x13, 0x2, 0x144, 0x145, 0x5, 0x26, 0x14, 0x2, 0x145, - 0x154, 0x3, 0x2, 0x2, 0x2, 0x146, 0x148, 0x5, 0x1c, - 0xf, 0x2, 0x147, 0x146, 0x3, 0x2, 0x2, 0x2, 0x148, - 0x14b, 0x3, 0x2, 0x2, 0x2, 0x149, 0x147, 0x3, 0x2, - 0x2, 0x2, 0x149, 0x14a, 0x3, 0x2, 0x2, 0x2, 0x14a, - 0x14c, 0x3, 0x2, 0x2, 0x2, 0x14b, 0x149, 0x3, 0x2, - 0x2, 0x2, 0x14c, 0x14d, 0x7, 0x28, 0x2, 0x2, 0x14d, - 0x14f, 0x7, 0x6, 0x2, 0x2, 0x14e, 0x150, 0x5, 0x3e, - 0x20, 0x2, 0x14f, 0x14e, 0x3, 0x2, 0x2, 0x2, 0x14f, - 0x150, 0x3, 0x2, 0x2, 0x2, 0x150, 0x151, 0x3, 0x2, - 0x2, 0x2, 0x151, 0x152, 0x7, 0x7, 0x2, 0x2, 0x152, - 0x154, 0x5, 0x26, 0x14, 0x2, 0x153, 0x13c, 0x3, 0x2, - 0x2, 0x2, 0x153, 0x149, 0x3, 0x2, 0x2, 0x2, 0x154, - 0x17, 0x3, 0x2, 0x2, 0x2, 0x155, 0x15c, 0x7, 0x29, - 0x2, 0x2, 0x156, 0x158, 0x5, 0xb4, 0x5b, 0x2, 0x157, - 0x156, 0x3, 0x2, 0x2, 0x2, 0x158, 0x159, 0x3, 0x2, - 0x2, 0x2, 0x159, 0x157, 0x3, 0x2, 0x2, 0x2, 0x159, - 0x15a, 0x3, 0x2, 0x2, 0x2, 0x15a, 0x15d, 0x3, 0x2, - 0x2, 0x2, 0x15b, 0x15d, 0x7, 0x3, 0x2, 0x2, 0x15c, - 0x157, 0x3, 0x2, 0x2, 0x2, 0x15c, 0x15b, 0x3, 0x2, - 0x2, 0x2, 0x15d, 0x161, 0x3, 0x2, 0x2, 0x2, 0x15e, - 0x160, 0x5, 0x1c, 0xf, 0x2, 0x15f, 0x15e, 0x3, 0x2, - 0x2, 0x2, 0x160, 0x163, 0x3, 0x2, 0x2, 0x2, 0x161, - 0x15f, 0x3, 0x2, 0x2, 0x2, 0x161, 0x162, 0x3, 0x2, - 0x2, 0x2, 0x162, 0x165, 0x3, 0x2, 0x2, 0x2, 0x163, - 0x161, 0x3, 0x2, 0x2, 0x2, 0x164, 0x166, 0x5, 0x24, - 0x13, 0x2, 0x165, 0x164, 0x3, 0x2, 0x2, 0x2, 0x165, - 0x166, 0x3, 0x2, 0x2, 0x2, 0x166, 0x167, 0x3, 0x2, - 0x2, 0x2, 0x167, 0x168, 0x5, 0x26, 0x14, 0x2, 0x168, - 0x19, 0x3, 0x2, 0x2, 0x2, 0x169, 0x16d, 0x7, 0x2a, - 0x2, 0x2, 0x16a, 0x16c, 0x5, 0x1c, 0xf, 0x2, 0x16b, - 0x16a, 0x3, 0x2, 0x2, 0x2, 0x16c, 0x16f, 0x3, 0x2, - 0x2, 0x2, 0x16d, 0x16b, 0x3, 0x2, 0x2, 0x2, 0x16d, - 0x16e, 0x3, 0x2, 0x2, 0x2, 0x16e, 0x170, 0x3, 0x2, - 0x2, 0x2, 0x16f, 0x16d, 0x3, 0x2, 0x2, 0x2, 0x170, - 0x171, 0x5, 0x24, 0x13, 0x2, 0x171, 0x172, 0x5, 0x26, - 0x14, 0x2, 0x172, 0x1b, 0x3, 0x2, 0x2, 0x2, 0x173, - 0x176, 0x7, 0x2b, 0x2, 0x2, 0x174, 0x177, 0x5, 0x1e, - 0x10, 0x2, 0x175, 0x177, 0x5, 0x20, 0x11, 0x2, 0x176, - 0x174, 0x3, 0x2, 0x2, 0x2, 0x176, 0x175, 0x3, 0x2, - 0x2, 0x2, 0x177, 0x1d, 0x3, 0x2, 0x2, 0x2, 0x178, - 0x179, 0x5, 0x22, 0x12, 0x2, 0x179, 0x1f, 0x3, 0x2, - 0x2, 0x2, 0x17a, 0x17b, 0x7, 0x2c, 0x2, 0x2, 0x17b, - 0x17c, 0x5, 0x22, 0x12, 0x2, 0x17c, 0x21, 0x3, 0x2, - 0x2, 0x2, 0x17d, 0x17e, 0x5, 0xf0, 0x79, 0x2, 0x17e, - 0x23, 0x3, 0x2, 0x2, 0x2, 0x17f, 0x181, 0x7, 0x28, - 0x2, 0x2, 0x180, 0x17f, 0x3, 0x2, 0x2, 0x2, 0x180, - 0x181, 0x3, 0x2, 0x2, 0x2, 0x181, 0x182, 0x3, 0x2, - 0x2, 0x2, 0x182, 0x183, 0x5, 0x40, 0x21, 0x2, 0x183, - 0x25, 0x3, 0x2, 0x2, 0x2, 0x184, 0x186, 0x5, 0x28, - 0x15, 0x2, 0x185, 0x184, 0x3, 0x2, 0x2, 0x2, 0x185, - 0x186, 0x3, 0x2, 0x2, 0x2, 0x186, 0x188, 0x3, 0x2, - 0x2, 0x2, 0x187, 0x189, 0x5, 0x2c, 0x17, 0x2, 0x188, - 0x187, 0x3, 0x2, 0x2, 0x2, 0x188, 0x189, 0x3, 0x2, - 0x2, 0x2, 0x189, 0x18b, 0x3, 0x2, 0x2, 0x2, 0x18a, - 0x18c, 0x5, 0x30, 0x19, 0x2, 0x18b, 0x18a, 0x3, 0x2, - 0x2, 0x2, 0x18b, 0x18c, 0x3, 0x2, 0x2, 0x2, 0x18c, - 0x18e, 0x3, 0x2, 0x2, 0x2, 0x18d, 0x18f, 0x5, 0x34, - 0x1b, 0x2, 0x18e, 0x18d, 0x3, 0x2, 0x2, 0x2, 0x18e, - 0x18f, 0x3, 0x2, 0x2, 0x2, 0x18f, 0x27, 0x3, 0x2, - 0x2, 0x2, 0x190, 0x192, 0x7, 0x2d, 0x2, 0x2, 0x191, - 0x193, 0x5, 0x2a, 0x16, 0x2, 0x192, 0x191, 0x3, 0x2, - 0x2, 0x2, 0x193, 0x194, 0x3, 0x2, 0x2, 0x2, 0x194, - 0x192, 0x3, 0x2, 0x2, 0x2, 0x194, 0x195, 0x3, 0x2, - 0x2, 0x2, 0x195, 0x29, 0x3, 0x2, 0x2, 0x2, 0x196, - 0x1a2, 0x5, 0xd2, 0x6a, 0x2, 0x197, 0x1a2, 0x5, 0x64, - 0x33, 0x2, 0x198, 0x199, 0x7, 0x4, 0x2, 0x2, 0x199, - 0x19c, 0x5, 0xba, 0x5e, 0x2, 0x19a, 0x19b, 0x7, 0x26, - 0x2, 0x2, 0x19b, 0x19d, 0x5, 0xb6, 0x5c, 0x2, 0x19c, - 0x19a, 0x3, 0x2, 0x2, 0x2, 0x19c, 0x19d, 0x3, 0x2, - 0x2, 0x2, 0x19d, 0x19e, 0x3, 0x2, 0x2, 0x2, 0x19e, - 0x19f, 0x7, 0x5, 0x2, 0x2, 0x19f, 0x1a2, 0x3, 0x2, - 0x2, 0x2, 0x1a0, 0x1a2, 0x5, 0xb6, 0x5c, 0x2, 0x1a1, - 0x196, 0x3, 0x2, 0x2, 0x2, 0x1a1, 0x197, 0x3, 0x2, - 0x2, 0x2, 0x1a1, 0x198, 0x3, 0x2, 0x2, 0x2, 0x1a1, - 0x1a0, 0x3, 0x2, 0x2, 0x2, 0x1a2, 0x2b, 0x3, 0x2, - 0x2, 0x2, 0x1a3, 0x1a5, 0x7, 0x2f, 0x2, 0x2, 0x1a4, - 0x1a6, 0x5, 0x2e, 0x18, 0x2, 0x1a5, 0x1a4, 0x3, 0x2, - 0x2, 0x2, 0x1a6, 0x1a7, 0x3, 0x2, 0x2, 0x2, 0x1a7, - 0x1a5, 0x3, 0x2, 0x2, 0x2, 0x1a7, 0x1a8, 0x3, 0x2, - 0x2, 0x2, 0x1a8, 0x2d, 0x3, 0x2, 0x2, 0x2, 0x1a9, - 0x1aa, 0x5, 0x62, 0x32, 0x2, 0x1aa, 0x2f, 0x3, 0x2, - 0x2, 0x2, 0x1ab, 0x1ad, 0x7, 0x30, 0x2, 0x2, 0x1ac, - 0x1ae, 0x5, 0x32, 0x1a, 0x2, 0x1ad, 0x1ac, 0x3, 0x2, - 0x2, 0x2, 0x1ae, 0x1af, 0x3, 0x2, 0x2, 0x2, 0x1af, - 0x1ad, 0x3, 0x2, 0x2, 0x2, 0x1af, 0x1b0, 0x3, 0x2, - 0x2, 0x2, 0x1b0, 0x31, 0x3, 0x2, 0x2, 0x2, 0x1b1, - 0x1b2, 0x9, 0x3, 0x2, 0x2, 0x1b2, 0x1b8, 0x5, 0xd0, - 0x69, 0x2, 0x1b3, 0x1b6, 0x5, 0x62, 0x32, 0x2, 0x1b4, - 0x1b6, 0x5, 0xb6, 0x5c, 0x2, 0x1b5, 0x1b3, 0x3, 0x2, - 0x2, 0x2, 0x1b5, 0x1b4, 0x3, 0x2, 0x2, 0x2, 0x1b6, - 0x1b8, 0x3, 0x2, 0x2, 0x2, 0x1b7, 0x1b1, 0x3, 0x2, - 0x2, 0x2, 0x1b7, 0x1b5, 0x3, 0x2, 0x2, 0x2, 0x1b8, - 0x33, 0x3, 0x2, 0x2, 0x2, 0x1b9, 0x1bb, 0x5, 0x36, - 0x1c, 0x2, 0x1ba, 0x1bc, 0x5, 0x38, 0x1d, 0x2, 0x1bb, - 0x1ba, 0x3, 0x2, 0x2, 0x2, 0x1bb, 0x1bc, 0x3, 0x2, - 0x2, 0x2, 0x1bc, 0x1be, 0x3, 0x2, 0x2, 0x2, 0x1bd, - 0x1bf, 0x5, 0x3a, 0x1e, 0x2, 0x1be, 0x1bd, 0x3, 0x2, - 0x2, 0x2, 0x1be, 0x1bf, 0x3, 0x2, 0x2, 0x2, 0x1bf, - 0x1e4, 0x3, 0x2, 0x2, 0x2, 0x1c0, 0x1c2, 0x5, 0x36, - 0x1c, 0x2, 0x1c1, 0x1c3, 0x5, 0x3a, 0x1e, 0x2, 0x1c2, - 0x1c1, 0x3, 0x2, 0x2, 0x2, 0x1c2, 0x1c3, 0x3, 0x2, - 0x2, 0x2, 0x1c3, 0x1c5, 0x3, 0x2, 0x2, 0x2, 0x1c4, - 0x1c6, 0x5, 0x38, 0x1d, 0x2, 0x1c5, 0x1c4, 0x3, 0x2, - 0x2, 0x2, 0x1c5, 0x1c6, 0x3, 0x2, 0x2, 0x2, 0x1c6, - 0x1e4, 0x3, 0x2, 0x2, 0x2, 0x1c7, 0x1c9, 0x5, 0x38, - 0x1d, 0x2, 0x1c8, 0x1ca, 0x5, 0x36, 0x1c, 0x2, 0x1c9, - 0x1c8, 0x3, 0x2, 0x2, 0x2, 0x1c9, 0x1ca, 0x3, 0x2, - 0x2, 0x2, 0x1ca, 0x1cc, 0x3, 0x2, 0x2, 0x2, 0x1cb, - 0x1cd, 0x5, 0x3a, 0x1e, 0x2, 0x1cc, 0x1cb, 0x3, 0x2, - 0x2, 0x2, 0x1cc, 0x1cd, 0x3, 0x2, 0x2, 0x2, 0x1cd, - 0x1e4, 0x3, 0x2, 0x2, 0x2, 0x1ce, 0x1d0, 0x5, 0x38, - 0x1d, 0x2, 0x1cf, 0x1d1, 0x5, 0x3a, 0x1e, 0x2, 0x1d0, - 0x1cf, 0x3, 0x2, 0x2, 0x2, 0x1d0, 0x1d1, 0x3, 0x2, - 0x2, 0x2, 0x1d1, 0x1d3, 0x3, 0x2, 0x2, 0x2, 0x1d2, - 0x1d4, 0x5, 0x36, 0x1c, 0x2, 0x1d3, 0x1d2, 0x3, 0x2, - 0x2, 0x2, 0x1d3, 0x1d4, 0x3, 0x2, 0x2, 0x2, 0x1d4, - 0x1e4, 0x3, 0x2, 0x2, 0x2, 0x1d5, 0x1d7, 0x5, 0x3a, - 0x1e, 0x2, 0x1d6, 0x1d8, 0x5, 0x38, 0x1d, 0x2, 0x1d7, - 0x1d6, 0x3, 0x2, 0x2, 0x2, 0x1d7, 0x1d8, 0x3, 0x2, - 0x2, 0x2, 0x1d8, 0x1da, 0x3, 0x2, 0x2, 0x2, 0x1d9, - 0x1db, 0x5, 0x36, 0x1c, 0x2, 0x1da, 0x1d9, 0x3, 0x2, - 0x2, 0x2, 0x1da, 0x1db, 0x3, 0x2, 0x2, 0x2, 0x1db, - 0x1e4, 0x3, 0x2, 0x2, 0x2, 0x1dc, 0x1de, 0x5, 0x3a, - 0x1e, 0x2, 0x1dd, 0x1df, 0x5, 0x36, 0x1c, 0x2, 0x1de, - 0x1dd, 0x3, 0x2, 0x2, 0x2, 0x1de, 0x1df, 0x3, 0x2, - 0x2, 0x2, 0x1df, 0x1e1, 0x3, 0x2, 0x2, 0x2, 0x1e0, - 0x1e2, 0x5, 0x38, 0x1d, 0x2, 0x1e1, 0x1e0, 0x3, 0x2, - 0x2, 0x2, 0x1e1, 0x1e2, 0x3, 0x2, 0x2, 0x2, 0x1e2, - 0x1e4, 0x3, 0x2, 0x2, 0x2, 0x1e3, 0x1b9, 0x3, 0x2, - 0x2, 0x2, 0x1e3, 0x1c0, 0x3, 0x2, 0x2, 0x2, 0x1e3, - 0x1c7, 0x3, 0x2, 0x2, 0x2, 0x1e3, 0x1ce, 0x3, 0x2, - 0x2, 0x2, 0x1e3, 0x1d5, 0x3, 0x2, 0x2, 0x2, 0x1e3, - 0x1dc, 0x3, 0x2, 0x2, 0x2, 0x1e4, 0x35, 0x3, 0x2, - 0x2, 0x2, 0x1e5, 0x1e6, 0x7, 0x33, 0x2, 0x2, 0x1e6, - 0x1e7, 0x5, 0xa0, 0x51, 0x2, 0x1e7, 0x37, 0x3, 0x2, - 0x2, 0x2, 0x1e8, 0x1e9, 0x7, 0x34, 0x2, 0x2, 0x1e9, - 0x1ea, 0x5, 0xa0, 0x51, 0x2, 0x1ea, 0x39, 0x3, 0x2, - 0x2, 0x2, 0x1eb, 0x1ec, 0x7, 0x35, 0x2, 0x2, 0x1ec, - 0x1ed, 0x5, 0xa0, 0x51, 0x2, 0x1ed, 0x3b, 0x3, 0x2, - 0x2, 0x2, 0x1ee, 0x1ef, 0x7, 0x36, 0x2, 0x2, 0x1ef, - 0x1f1, 0x5, 0x52, 0x2a, 0x2, 0x1f0, 0x1ee, 0x3, 0x2, - 0x2, 0x2, 0x1f0, 0x1f1, 0x3, 0x2, 0x2, 0x2, 0x1f1, - 0x3d, 0x3, 0x2, 0x2, 0x2, 0x1f2, 0x1f7, 0x5, 0x6e, - 0x38, 0x2, 0x1f3, 0x1f5, 0x7, 0x8, 0x2, 0x2, 0x1f4, - 0x1f6, 0x5, 0x3e, 0x20, 0x2, 0x1f5, 0x1f4, 0x3, 0x2, - 0x2, 0x2, 0x1f5, 0x1f6, 0x3, 0x2, 0x2, 0x2, 0x1f6, - 0x1f8, 0x3, 0x2, 0x2, 0x2, 0x1f7, 0x1f3, 0x3, 0x2, - 0x2, 0x2, 0x1f7, 0x1f8, 0x3, 0x2, 0x2, 0x2, 0x1f8, - 0x3f, 0x3, 0x2, 0x2, 0x2, 0x1f9, 0x1fc, 0x7, 0x6, - 0x2, 0x2, 0x1fa, 0x1fd, 0x5, 0xc, 0x7, 0x2, 0x1fb, - 0x1fd, 0x5, 0x42, 0x22, 0x2, 0x1fc, 0x1fa, 0x3, 0x2, - 0x2, 0x2, 0x1fc, 0x1fb, 0x3, 0x2, 0x2, 0x2, 0x1fd, - 0x1fe, 0x3, 0x2, 0x2, 0x2, 0x1fe, 0x1ff, 0x7, 0x7, - 0x2, 0x2, 0x1ff, 0x41, 0x3, 0x2, 0x2, 0x2, 0x200, - 0x202, 0x5, 0x44, 0x23, 0x2, 0x201, 0x200, 0x3, 0x2, - 0x2, 0x2, 0x201, 0x202, 0x3, 0x2, 0x2, 0x2, 0x202, - 0x20c, 0x3, 0x2, 0x2, 0x2, 0x203, 0x205, 0x5, 0x46, - 0x24, 0x2, 0x204, 0x206, 0x7, 0x8, 0x2, 0x2, 0x205, - 0x204, 0x3, 0x2, 0x2, 0x2, 0x205, 0x206, 0x3, 0x2, - 0x2, 0x2, 0x206, 0x208, 0x3, 0x2, 0x2, 0x2, 0x207, - 0x209, 0x5, 0x44, 0x23, 0x2, 0x208, 0x207, 0x3, 0x2, - 0x2, 0x2, 0x208, 0x209, 0x3, 0x2, 0x2, 0x2, 0x209, - 0x20b, 0x3, 0x2, 0x2, 0x2, 0x20a, 0x203, 0x3, 0x2, - 0x2, 0x2, 0x20b, 0x20e, 0x3, 0x2, 0x2, 0x2, 0x20c, - 0x20a, 0x3, 0x2, 0x2, 0x2, 0x20c, 0x20d, 0x3, 0x2, - 0x2, 0x2, 0x20d, 0x43, 0x3, 0x2, 0x2, 0x2, 0x20e, - 0x20c, 0x3, 0x2, 0x2, 0x2, 0x20f, 0x214, 0x5, 0x7a, - 0x3e, 0x2, 0x210, 0x212, 0x7, 0x8, 0x2, 0x2, 0x211, - 0x213, 0x5, 0x44, 0x23, 0x2, 0x212, 0x211, 0x3, 0x2, - 0x2, 0x2, 0x212, 0x213, 0x3, 0x2, 0x2, 0x2, 0x213, - 0x215, 0x3, 0x2, 0x2, 0x2, 0x214, 0x210, 0x3, 0x2, - 0x2, 0x2, 0x214, 0x215, 0x3, 0x2, 0x2, 0x2, 0x215, - 0x45, 0x3, 0x2, 0x2, 0x2, 0x216, 0x21f, 0x5, 0x5e, - 0x30, 0x2, 0x217, 0x21f, 0x5, 0x48, 0x25, 0x2, 0x218, - 0x21f, 0x5, 0x5c, 0x2f, 0x2, 0x219, 0x21f, 0x5, 0x4a, - 0x26, 0x2, 0x21a, 0x21f, 0x5, 0x4c, 0x27, 0x2, 0x21b, - 0x21f, 0x5, 0x60, 0x31, 0x2, 0x21c, 0x21f, 0x5, 0x4e, - 0x28, 0x2, 0x21d, 0x21f, 0x5, 0x50, 0x29, 0x2, 0x21e, - 0x216, 0x3, 0x2, 0x2, 0x2, 0x21e, 0x217, 0x3, 0x2, - 0x2, 0x2, 0x21e, 0x218, 0x3, 0x2, 0x2, 0x2, 0x21e, - 0x219, 0x3, 0x2, 0x2, 0x2, 0x21e, 0x21a, 0x3, 0x2, - 0x2, 0x2, 0x21e, 0x21b, 0x3, 0x2, 0x2, 0x2, 0x21e, - 0x21c, 0x3, 0x2, 0x2, 0x2, 0x21e, 0x21d, 0x3, 0x2, - 0x2, 0x2, 0x21f, 0x47, 0x3, 0x2, 0x2, 0x2, 0x220, - 0x221, 0x7, 0x47, 0x2, 0x2, 0x221, 0x222, 0x5, 0x40, - 0x21, 0x2, 0x222, 0x49, 0x3, 0x2, 0x2, 0x2, 0x223, - 0x224, 0x7, 0x45, 0x2, 0x2, 0x224, 0x225, 0x5, 0xb4, - 0x5b, 0x2, 0x225, 0x226, 0x5, 0x40, 0x21, 0x2, 0x226, - 0x4b, 0x3, 0x2, 0x2, 0x2, 0x227, 0x229, 0x7, 0x48, - 0x2, 0x2, 0x228, 0x22a, 0x7, 0x38, 0x2, 0x2, 0x229, - 0x228, 0x3, 0x2, 0x2, 0x2, 0x229, 0x22a, 0x3, 0x2, - 0x2, 0x2, 0x22a, 0x22b, 0x3, 0x2, 0x2, 0x2, 0x22b, - 0x22c, 0x5, 0xb4, 0x5b, 0x2, 0x22c, 0x22d, 0x5, 0x40, - 0x21, 0x2, 0x22d, 0x4d, 0x3, 0x2, 0x2, 0x2, 0x22e, - 0x22f, 0x7, 0x49, 0x2, 0x2, 0x22f, 0x230, 0x7, 0x4, - 0x2, 0x2, 0x230, 0x231, 0x5, 0xba, 0x5e, 0x2, 0x231, - 0x232, 0x7, 0x26, 0x2, 0x2, 0x232, 0x233, 0x5, 0xb6, - 0x5c, 0x2, 0x233, 0x234, 0x7, 0x5, 0x2, 0x2, 0x234, - 0x4f, 0x3, 0x2, 0x2, 0x2, 0x235, 0x236, 0x7, 0x36, - 0x2, 0x2, 0x236, 0x237, 0x5, 0x52, 0x2a, 0x2, 0x237, - 0x51, 0x3, 0x2, 0x2, 0x2, 0x238, 0x23b, 0x5, 0x54, - 0x2b, 0x2, 0x239, 0x23b, 0x5, 0x56, 0x2c, 0x2, 0x23a, - 0x238, 0x3, 0x2, 0x2, 0x2, 0x23a, 0x239, 0x3, 0x2, - 0x2, 0x2, 0x23b, 0x53, 0x3, 0x2, 0x2, 0x2, 0x23c, - 0x23d, 0x5, 0xb6, 0x5c, 0x2, 0x23d, 0x241, 0x7, 0x6, - 0x2, 0x2, 0x23e, 0x240, 0x5, 0x5a, 0x2e, 0x2, 0x23f, - 0x23e, 0x3, 0x2, 0x2, 0x2, 0x240, 0x243, 0x3, 0x2, - 0x2, 0x2, 0x241, 0x23f, 0x3, 0x2, 0x2, 0x2, 0x241, - 0x242, 0x3, 0x2, 0x2, 0x2, 0x242, 0x244, 0x3, 0x2, - 0x2, 0x2, 0x243, 0x241, 0x3, 0x2, 0x2, 0x2, 0x244, - 0x245, 0x7, 0x7, 0x2, 0x2, 0x245, 0x55, 0x3, 0x2, - 0x2, 0x2, 0x246, 0x250, 0x7, 0xa4, 0x2, 0x2, 0x247, - 0x24b, 0x7, 0x4, 0x2, 0x2, 0x248, 0x24a, 0x5, 0xb6, - 0x5c, 0x2, 0x249, 0x248, 0x3, 0x2, 0x2, 0x2, 0x24a, - 0x24d, 0x3, 0x2, 0x2, 0x2, 0x24b, 0x249, 0x3, 0x2, - 0x2, 0x2, 0x24b, 0x24c, 0x3, 0x2, 0x2, 0x2, 0x24c, - 0x24e, 0x3, 0x2, 0x2, 0x2, 0x24d, 0x24b, 0x3, 0x2, - 0x2, 0x2, 0x24e, 0x250, 0x7, 0x5, 0x2, 0x2, 0x24f, - 0x246, 0x3, 0x2, 0x2, 0x2, 0x24f, 0x247, 0x3, 0x2, - 0x2, 0x2, 0x250, 0x251, 0x3, 0x2, 0x2, 0x2, 0x251, - 0x255, 0x7, 0x6, 0x2, 0x2, 0x252, 0x254, 0x5, 0x58, - 0x2d, 0x2, 0x253, 0x252, 0x3, 0x2, 0x2, 0x2, 0x254, - 0x257, 0x3, 0x2, 0x2, 0x2, 0x255, 0x253, 0x3, 0x2, - 0x2, 0x2, 0x255, 0x256, 0x3, 0x2, 0x2, 0x2, 0x256, - 0x258, 0x3, 0x2, 0x2, 0x2, 0x257, 0x255, 0x3, 0x2, - 0x2, 0x2, 0x258, 0x259, 0x7, 0x7, 0x2, 0x2, 0x259, - 0x57, 0x3, 0x2, 0x2, 0x2, 0x25a, 0x25e, 0x7, 0x4, - 0x2, 0x2, 0x25b, 0x25d, 0x5, 0x5a, 0x2e, 0x2, 0x25c, - 0x25b, 0x3, 0x2, 0x2, 0x2, 0x25d, 0x260, 0x3, 0x2, - 0x2, 0x2, 0x25e, 0x25c, 0x3, 0x2, 0x2, 0x2, 0x25e, - 0x25f, 0x3, 0x2, 0x2, 0x2, 0x25f, 0x261, 0x3, 0x2, - 0x2, 0x2, 0x260, 0x25e, 0x3, 0x2, 0x2, 0x2, 0x261, - 0x264, 0x7, 0x5, 0x2, 0x2, 0x262, 0x264, 0x7, 0xa4, - 0x2, 0x2, 0x263, 0x25a, 0x3, 0x2, 0x2, 0x2, 0x263, - 0x262, 0x3, 0x2, 0x2, 0x2, 0x264, 0x59, 0x3, 0x2, - 0x2, 0x2, 0x265, 0x26b, 0x5, 0xf0, 0x79, 0x2, 0x266, - 0x26b, 0x5, 0xe2, 0x72, 0x2, 0x267, 0x26b, 0x5, 0xe4, - 0x73, 0x2, 0x268, 0x26b, 0x5, 0xec, 0x77, 0x2, 0x269, - 0x26b, 0x7, 0x4a, 0x2, 0x2, 0x26a, 0x265, 0x3, 0x2, - 0x2, 0x2, 0x26a, 0x266, 0x3, 0x2, 0x2, 0x2, 0x26a, - 0x267, 0x3, 0x2, 0x2, 0x2, 0x26a, 0x268, 0x3, 0x2, - 0x2, 0x2, 0x26a, 0x269, 0x3, 0x2, 0x2, 0x2, 0x26b, - 0x5b, 0x3, 0x2, 0x2, 0x2, 0x26c, 0x26d, 0x7, 0x4b, - 0x2, 0x2, 0x26d, 0x26e, 0x5, 0x40, 0x21, 0x2, 0x26e, - 0x5d, 0x3, 0x2, 0x2, 0x2, 0x26f, 0x274, 0x5, 0x40, - 0x21, 0x2, 0x270, 0x271, 0x7, 0x4c, 0x2, 0x2, 0x271, - 0x273, 0x5, 0x40, 0x21, 0x2, 0x272, 0x270, 0x3, 0x2, - 0x2, 0x2, 0x273, 0x276, 0x3, 0x2, 0x2, 0x2, 0x274, - 0x272, 0x3, 0x2, 0x2, 0x2, 0x274, 0x275, 0x3, 0x2, - 0x2, 0x2, 0x275, 0x5f, 0x3, 0x2, 0x2, 0x2, 0x276, - 0x274, 0x3, 0x2, 0x2, 0x2, 0x277, 0x278, 0x7, 0x4d, - 0x2, 0x2, 0x278, 0x279, 0x5, 0x62, 0x32, 0x2, 0x279, - 0x61, 0x3, 0x2, 0x2, 0x2, 0x27a, 0x27e, 0x5, 0xd0, - 0x69, 0x2, 0x27b, 0x27e, 0x5, 0xd2, 0x6a, 0x2, 0x27c, - 0x27e, 0x5, 0x64, 0x33, 0x2, 0x27d, 0x27a, 0x3, 0x2, - 0x2, 0x2, 0x27d, 0x27b, 0x3, 0x2, 0x2, 0x2, 0x27d, - 0x27c, 0x3, 0x2, 0x2, 0x2, 0x27e, 0x63, 0x3, 0x2, - 0x2, 0x2, 0x27f, 0x280, 0x5, 0xf0, 0x79, 0x2, 0x280, - 0x281, 0x5, 0x66, 0x34, 0x2, 0x281, 0x65, 0x3, 0x2, - 0x2, 0x2, 0x282, 0x292, 0x7, 0xa4, 0x2, 0x2, 0x283, - 0x285, 0x7, 0x4, 0x2, 0x2, 0x284, 0x286, 0x7, 0x24, - 0x2, 0x2, 0x285, 0x284, 0x3, 0x2, 0x2, 0x2, 0x285, - 0x286, 0x3, 0x2, 0x2, 0x2, 0x286, 0x287, 0x3, 0x2, - 0x2, 0x2, 0x287, 0x28c, 0x5, 0xba, 0x5e, 0x2, 0x288, - 0x289, 0x7, 0x9, 0x2, 0x2, 0x289, 0x28b, 0x5, 0xba, - 0x5e, 0x2, 0x28a, 0x288, 0x3, 0x2, 0x2, 0x2, 0x28b, - 0x28e, 0x3, 0x2, 0x2, 0x2, 0x28c, 0x28a, 0x3, 0x2, - 0x2, 0x2, 0x28c, 0x28d, 0x3, 0x2, 0x2, 0x2, 0x28d, - 0x28f, 0x3, 0x2, 0x2, 0x2, 0x28e, 0x28c, 0x3, 0x2, - 0x2, 0x2, 0x28f, 0x290, 0x7, 0x5, 0x2, 0x2, 0x290, - 0x292, 0x3, 0x2, 0x2, 0x2, 0x291, 0x282, 0x3, 0x2, - 0x2, 0x2, 0x291, 0x283, 0x3, 0x2, 0x2, 0x2, 0x292, - 0x67, 0x3, 0x2, 0x2, 0x2, 0x293, 0x2a0, 0x7, 0xa4, - 0x2, 0x2, 0x294, 0x295, 0x7, 0x4, 0x2, 0x2, 0x295, - 0x29a, 0x5, 0xba, 0x5e, 0x2, 0x296, 0x297, 0x7, 0x9, - 0x2, 0x2, 0x297, 0x299, 0x5, 0xba, 0x5e, 0x2, 0x298, - 0x296, 0x3, 0x2, 0x2, 0x2, 0x299, 0x29c, 0x3, 0x2, - 0x2, 0x2, 0x29a, 0x298, 0x3, 0x2, 0x2, 0x2, 0x29a, - 0x29b, 0x3, 0x2, 0x2, 0x2, 0x29b, 0x29d, 0x3, 0x2, - 0x2, 0x2, 0x29c, 0x29a, 0x3, 0x2, 0x2, 0x2, 0x29d, - 0x29e, 0x7, 0x5, 0x2, 0x2, 0x29e, 0x2a0, 0x3, 0x2, - 0x2, 0x2, 0x29f, 0x293, 0x3, 0x2, 0x2, 0x2, 0x29f, - 0x294, 0x3, 0x2, 0x2, 0x2, 0x2a0, 0x69, 0x3, 0x2, - 0x2, 0x2, 0x2a1, 0x2a3, 0x7, 0x6, 0x2, 0x2, 0x2a2, - 0x2a4, 0x5, 0x6c, 0x37, 0x2, 0x2a3, 0x2a2, 0x3, 0x2, - 0x2, 0x2, 0x2a3, 0x2a4, 0x3, 0x2, 0x2, 0x2, 0x2a4, - 0x2a5, 0x3, 0x2, 0x2, 0x2, 0x2a5, 0x2a6, 0x7, 0x7, - 0x2, 0x2, 0x2a6, 0x6b, 0x3, 0x2, 0x2, 0x2, 0x2a7, - 0x2ac, 0x5, 0x6e, 0x38, 0x2, 0x2a8, 0x2aa, 0x7, 0x8, - 0x2, 0x2, 0x2a9, 0x2ab, 0x5, 0x6c, 0x37, 0x2, 0x2aa, - 0x2a9, 0x3, 0x2, 0x2, 0x2, 0x2aa, 0x2ab, 0x3, 0x2, - 0x2, 0x2, 0x2ab, 0x2ad, 0x3, 0x2, 0x2, 0x2, 0x2ac, - 0x2a8, 0x3, 0x2, 0x2, 0x2, 0x2ac, 0x2ad, 0x3, 0x2, - 0x2, 0x2, 0x2ad, 0x6d, 0x3, 0x2, 0x2, 0x2, 0x2ae, - 0x2af, 0x5, 0xb2, 0x5a, 0x2, 0x2af, 0x2b0, 0x5, 0x72, - 0x3a, 0x2, 0x2b0, 0x2b5, 0x3, 0x2, 0x2, 0x2, 0x2b1, - 0x2b2, 0x5, 0xa2, 0x52, 0x2, 0x2b2, 0x2b3, 0x5, 0x70, - 0x39, 0x2, 0x2b3, 0x2b5, 0x3, 0x2, 0x2, 0x2, 0x2b4, - 0x2ae, 0x3, 0x2, 0x2, 0x2, 0x2b4, 0x2b1, 0x3, 0x2, - 0x2, 0x2, 0x2b5, 0x6f, 0x3, 0x2, 0x2, 0x2, 0x2b6, - 0x2b8, 0x5, 0x72, 0x3a, 0x2, 0x2b7, 0x2b6, 0x3, 0x2, - 0x2, 0x2, 0x2b7, 0x2b8, 0x3, 0x2, 0x2, 0x2, 0x2b8, - 0x71, 0x3, 0x2, 0x2, 0x2, 0x2b9, 0x2ba, 0x5, 0x74, - 0x3b, 0x2, 0x2ba, 0x2c3, 0x5, 0x76, 0x3c, 0x2, 0x2bb, - 0x2bf, 0x7, 0xa, 0x2, 0x2, 0x2bc, 0x2bd, 0x5, 0x74, - 0x3b, 0x2, 0x2bd, 0x2be, 0x5, 0x76, 0x3c, 0x2, 0x2be, - 0x2c0, 0x3, 0x2, 0x2, 0x2, 0x2bf, 0x2bc, 0x3, 0x2, - 0x2, 0x2, 0x2bf, 0x2c0, 0x3, 0x2, 0x2, 0x2, 0x2c0, - 0x2c2, 0x3, 0x2, 0x2, 0x2, 0x2c1, 0x2bb, 0x3, 0x2, - 0x2, 0x2, 0x2c2, 0x2c5, 0x3, 0x2, 0x2, 0x2, 0x2c3, - 0x2c1, 0x3, 0x2, 0x2, 0x2, 0x2c3, 0x2c4, 0x3, 0x2, - 0x2, 0x2, 0x2c4, 0x73, 0x3, 0x2, 0x2, 0x2, 0x2c5, - 0x2c3, 0x3, 0x2, 0x2, 0x2, 0x2c6, 0x2c9, 0x5, 0xb4, - 0x5b, 0x2, 0x2c7, 0x2c9, 0x7, 0xb, 0x2, 0x2, 0x2c8, - 0x2c6, 0x3, 0x2, 0x2, 0x2, 0x2c8, 0x2c7, 0x3, 0x2, - 0x2, 0x2, 0x2c9, 0x75, 0x3, 0x2, 0x2, 0x2, 0x2ca, - 0x2cf, 0x5, 0x78, 0x3d, 0x2, 0x2cb, 0x2cc, 0x7, 0x9, - 0x2, 0x2, 0x2cc, 0x2ce, 0x5, 0x78, 0x3d, 0x2, 0x2cd, - 0x2cb, 0x3, 0x2, 0x2, 0x2, 0x2ce, 0x2d1, 0x3, 0x2, - 0x2, 0x2, 0x2cf, 0x2cd, 0x3, 0x2, 0x2, 0x2, 0x2cf, - 0x2d0, 0x3, 0x2, 0x2, 0x2, 0x2d0, 0x77, 0x3, 0x2, - 0x2, 0x2, 0x2d1, 0x2cf, 0x3, 0x2, 0x2, 0x2, 0x2d2, - 0x2d3, 0x5, 0xae, 0x58, 0x2, 0x2d3, 0x79, 0x3, 0x2, - 0x2, 0x2, 0x2d4, 0x2d5, 0x5, 0xb2, 0x5a, 0x2, 0x2d5, - 0x2d6, 0x5, 0x7e, 0x40, 0x2, 0x2d6, 0x2db, 0x3, 0x2, - 0x2, 0x2, 0x2d7, 0x2d8, 0x5, 0xa6, 0x54, 0x2, 0x2d8, - 0x2d9, 0x5, 0x7c, 0x3f, 0x2, 0x2d9, 0x2db, 0x3, 0x2, - 0x2, 0x2, 0x2da, 0x2d4, 0x3, 0x2, 0x2, 0x2, 0x2da, - 0x2d7, 0x3, 0x2, 0x2, 0x2, 0x2db, 0x7b, 0x3, 0x2, - 0x2, 0x2, 0x2dc, 0x2de, 0x5, 0x7e, 0x40, 0x2, 0x2dd, - 0x2dc, 0x3, 0x2, 0x2, 0x2, 0x2dd, 0x2de, 0x3, 0x2, - 0x2, 0x2, 0x2de, 0x7d, 0x3, 0x2, 0x2, 0x2, 0x2df, - 0x2e6, 0x5, 0x86, 0x44, 0x2, 0x2e0, 0x2e2, 0x7, 0xa, - 0x2, 0x2, 0x2e1, 0x2e3, 0x5, 0x84, 0x43, 0x2, 0x2e2, - 0x2e1, 0x3, 0x2, 0x2, 0x2, 0x2e2, 0x2e3, 0x3, 0x2, - 0x2, 0x2, 0x2e3, 0x2e5, 0x3, 0x2, 0x2, 0x2, 0x2e4, - 0x2e0, 0x3, 0x2, 0x2, 0x2, 0x2e5, 0x2e8, 0x3, 0x2, - 0x2, 0x2, 0x2e6, 0x2e4, 0x3, 0x2, 0x2, 0x2, 0x2e6, - 0x2e7, 0x3, 0x2, 0x2, 0x2, 0x2e7, 0x7f, 0x3, 0x2, - 0x2, 0x2, 0x2e8, 0x2e6, 0x3, 0x2, 0x2, 0x2, 0x2e9, - 0x2ea, 0x5, 0x8e, 0x48, 0x2, 0x2ea, 0x81, 0x3, 0x2, - 0x2, 0x2, 0x2eb, 0x2ec, 0x5, 0xb6, 0x5c, 0x2, 0x2ec, - 0x83, 0x3, 0x2, 0x2, 0x2, 0x2ed, 0x2ee, 0x5, 0x88, - 0x45, 0x2, 0x2ee, 0x2ef, 0x5, 0x76, 0x3c, 0x2, 0x2ef, - 0x85, 0x3, 0x2, 0x2, 0x2, 0x2f0, 0x2f1, 0x5, 0x88, - 0x45, 0x2, 0x2f1, 0x2f2, 0x5, 0x8a, 0x46, 0x2, 0x2f2, - 0x87, 0x3, 0x2, 0x2, 0x2, 0x2f3, 0x2f6, 0x5, 0x80, - 0x41, 0x2, 0x2f4, 0x2f6, 0x5, 0x82, 0x42, 0x2, 0x2f5, - 0x2f3, 0x3, 0x2, 0x2, 0x2, 0x2f5, 0x2f4, 0x3, 0x2, - 0x2, 0x2, 0x2f6, 0x89, 0x3, 0x2, 0x2, 0x2, 0x2f7, - 0x2fc, 0x5, 0x8c, 0x47, 0x2, 0x2f8, 0x2f9, 0x7, 0x9, - 0x2, 0x2, 0x2f9, 0x2fb, 0x5, 0x8c, 0x47, 0x2, 0x2fa, - 0x2f8, 0x3, 0x2, 0x2, 0x2, 0x2fb, 0x2fe, 0x3, 0x2, - 0x2, 0x2, 0x2fc, 0x2fa, 0x3, 0x2, 0x2, 0x2, 0x2fc, - 0x2fd, 0x3, 0x2, 0x2, 0x2, 0x2fd, 0x8b, 0x3, 0x2, - 0x2, 0x2, 0x2fe, 0x2fc, 0x3, 0x2, 0x2, 0x2, 0x2ff, - 0x300, 0x5, 0xb0, 0x59, 0x2, 0x300, 0x8d, 0x3, 0x2, - 0x2, 0x2, 0x301, 0x302, 0x5, 0x90, 0x49, 0x2, 0x302, - 0x8f, 0x3, 0x2, 0x2, 0x2, 0x303, 0x308, 0x5, 0x92, - 0x4a, 0x2, 0x304, 0x305, 0x7, 0xc, 0x2, 0x2, 0x305, - 0x307, 0x5, 0x92, 0x4a, 0x2, 0x306, 0x304, 0x3, 0x2, - 0x2, 0x2, 0x307, 0x30a, 0x3, 0x2, 0x2, 0x2, 0x308, - 0x306, 0x3, 0x2, 0x2, 0x2, 0x308, 0x309, 0x3, 0x2, - 0x2, 0x2, 0x309, 0x91, 0x3, 0x2, 0x2, 0x2, 0x30a, - 0x308, 0x3, 0x2, 0x2, 0x2, 0x30b, 0x310, 0x5, 0x96, - 0x4c, 0x2, 0x30c, 0x30d, 0x7, 0xd, 0x2, 0x2, 0x30d, - 0x30f, 0x5, 0x96, 0x4c, 0x2, 0x30e, 0x30c, 0x3, 0x2, - 0x2, 0x2, 0x30f, 0x312, 0x3, 0x2, 0x2, 0x2, 0x310, - 0x30e, 0x3, 0x2, 0x2, 0x2, 0x310, 0x311, 0x3, 0x2, - 0x2, 0x2, 0x311, 0x93, 0x3, 0x2, 0x2, 0x2, 0x312, - 0x310, 0x3, 0x2, 0x2, 0x2, 0x313, 0x315, 0x5, 0x9a, - 0x4e, 0x2, 0x314, 0x316, 0x5, 0x98, 0x4d, 0x2, 0x315, - 0x314, 0x3, 0x2, 0x2, 0x2, 0x315, 0x316, 0x3, 0x2, - 0x2, 0x2, 0x316, 0x95, 0x3, 0x2, 0x2, 0x2, 0x317, - 0x31b, 0x5, 0x94, 0x4b, 0x2, 0x318, 0x319, 0x7, 0xe, - 0x2, 0x2, 0x319, 0x31b, 0x5, 0x94, 0x4b, 0x2, 0x31a, - 0x317, 0x3, 0x2, 0x2, 0x2, 0x31a, 0x318, 0x3, 0x2, - 0x2, 0x2, 0x31b, 0x97, 0x3, 0x2, 0x2, 0x2, 0x31c, - 0x31d, 0x9, 0x4, 0x2, 0x2, 0x31d, 0x99, 0x3, 0x2, - 0x2, 0x2, 0x31e, 0x327, 0x5, 0xf0, 0x79, 0x2, 0x31f, - 0x327, 0x7, 0xb, 0x2, 0x2, 0x320, 0x321, 0x7, 0x11, - 0x2, 0x2, 0x321, 0x327, 0x5, 0x9c, 0x4f, 0x2, 0x322, - 0x323, 0x7, 0x4, 0x2, 0x2, 0x323, 0x324, 0x5, 0x8e, - 0x48, 0x2, 0x324, 0x325, 0x7, 0x5, 0x2, 0x2, 0x325, - 0x327, 0x3, 0x2, 0x2, 0x2, 0x326, 0x31e, 0x3, 0x2, - 0x2, 0x2, 0x326, 0x31f, 0x3, 0x2, 0x2, 0x2, 0x326, - 0x320, 0x3, 0x2, 0x2, 0x2, 0x326, 0x322, 0x3, 0x2, - 0x2, 0x2, 0x327, 0x9b, 0x3, 0x2, 0x2, 0x2, 0x328, - 0x336, 0x5, 0x9e, 0x50, 0x2, 0x329, 0x332, 0x7, 0x4, - 0x2, 0x2, 0x32a, 0x32f, 0x5, 0x9e, 0x50, 0x2, 0x32b, - 0x32c, 0x7, 0xc, 0x2, 0x2, 0x32c, 0x32e, 0x5, 0x9e, - 0x50, 0x2, 0x32d, 0x32b, 0x3, 0x2, 0x2, 0x2, 0x32e, - 0x331, 0x3, 0x2, 0x2, 0x2, 0x32f, 0x32d, 0x3, 0x2, - 0x2, 0x2, 0x32f, 0x330, 0x3, 0x2, 0x2, 0x2, 0x330, - 0x333, 0x3, 0x2, 0x2, 0x2, 0x331, 0x32f, 0x3, 0x2, - 0x2, 0x2, 0x332, 0x32a, 0x3, 0x2, 0x2, 0x2, 0x332, - 0x333, 0x3, 0x2, 0x2, 0x2, 0x333, 0x334, 0x3, 0x2, - 0x2, 0x2, 0x334, 0x336, 0x7, 0x5, 0x2, 0x2, 0x335, - 0x328, 0x3, 0x2, 0x2, 0x2, 0x335, 0x329, 0x3, 0x2, - 0x2, 0x2, 0x336, 0x9d, 0x3, 0x2, 0x2, 0x2, 0x337, - 0x33f, 0x5, 0xf0, 0x79, 0x2, 0x338, 0x33f, 0x7, 0xb, - 0x2, 0x2, 0x339, 0x33c, 0x7, 0xe, 0x2, 0x2, 0x33a, - 0x33d, 0x5, 0xf0, 0x79, 0x2, 0x33b, 0x33d, 0x7, 0xb, - 0x2, 0x2, 0x33c, 0x33a, 0x3, 0x2, 0x2, 0x2, 0x33c, - 0x33b, 0x3, 0x2, 0x2, 0x2, 0x33d, 0x33f, 0x3, 0x2, - 0x2, 0x2, 0x33e, 0x337, 0x3, 0x2, 0x2, 0x2, 0x33e, - 0x338, 0x3, 0x2, 0x2, 0x2, 0x33e, 0x339, 0x3, 0x2, - 0x2, 0x2, 0x33f, 0x9f, 0x3, 0x2, 0x2, 0x2, 0x340, - 0x341, 0x7, 0x95, 0x2, 0x2, 0x341, 0xa1, 0x3, 0x2, - 0x2, 0x2, 0x342, 0x345, 0x5, 0xaa, 0x56, 0x2, 0x343, - 0x345, 0x5, 0xa4, 0x53, 0x2, 0x344, 0x342, 0x3, 0x2, - 0x2, 0x2, 0x344, 0x343, 0x3, 0x2, 0x2, 0x2, 0x345, - 0xa3, 0x3, 0x2, 0x2, 0x2, 0x346, 0x347, 0x7, 0x12, - 0x2, 0x2, 0x347, 0x348, 0x5, 0x72, 0x3a, 0x2, 0x348, - 0x349, 0x7, 0x13, 0x2, 0x2, 0x349, 0xa5, 0x3, 0x2, - 0x2, 0x2, 0x34a, 0x34d, 0x5, 0xac, 0x57, 0x2, 0x34b, - 0x34d, 0x5, 0xa8, 0x55, 0x2, 0x34c, 0x34a, 0x3, 0x2, - 0x2, 0x2, 0x34c, 0x34b, 0x3, 0x2, 0x2, 0x2, 0x34d, - 0xa7, 0x3, 0x2, 0x2, 0x2, 0x34e, 0x34f, 0x7, 0x12, - 0x2, 0x2, 0x34f, 0x350, 0x5, 0x7e, 0x40, 0x2, 0x350, - 0x351, 0x7, 0x13, 0x2, 0x2, 0x351, 0xa9, 0x3, 0x2, - 0x2, 0x2, 0x352, 0x354, 0x7, 0x4, 0x2, 0x2, 0x353, - 0x355, 0x5, 0xae, 0x58, 0x2, 0x354, 0x353, 0x3, 0x2, - 0x2, 0x2, 0x355, 0x356, 0x3, 0x2, 0x2, 0x2, 0x356, - 0x354, 0x3, 0x2, 0x2, 0x2, 0x356, 0x357, 0x3, 0x2, - 0x2, 0x2, 0x357, 0x358, 0x3, 0x2, 0x2, 0x2, 0x358, - 0x359, 0x7, 0x5, 0x2, 0x2, 0x359, 0xab, 0x3, 0x2, - 0x2, 0x2, 0x35a, 0x35c, 0x7, 0x4, 0x2, 0x2, 0x35b, - 0x35d, 0x5, 0xb0, 0x59, 0x2, 0x35c, 0x35b, 0x3, 0x2, - 0x2, 0x2, 0x35d, 0x35e, 0x3, 0x2, 0x2, 0x2, 0x35e, - 0x35c, 0x3, 0x2, 0x2, 0x2, 0x35e, 0x35f, 0x3, 0x2, - 0x2, 0x2, 0x35f, 0x360, 0x3, 0x2, 0x2, 0x2, 0x360, - 0x361, 0x7, 0x5, 0x2, 0x2, 0x361, 0xad, 0x3, 0x2, - 0x2, 0x2, 0x362, 0x365, 0x5, 0xb2, 0x5a, 0x2, 0x363, - 0x365, 0x5, 0xa2, 0x52, 0x2, 0x364, 0x362, 0x3, 0x2, - 0x2, 0x2, 0x364, 0x363, 0x3, 0x2, 0x2, 0x2, 0x365, - 0xaf, 0x3, 0x2, 0x2, 0x2, 0x366, 0x369, 0x5, 0xb2, - 0x5a, 0x2, 0x367, 0x369, 0x5, 0xa6, 0x54, 0x2, 0x368, - 0x366, 0x3, 0x2, 0x2, 0x2, 0x368, 0x367, 0x3, 0x2, - 0x2, 0x2, 0x369, 0xb1, 0x3, 0x2, 0x2, 0x2, 0x36a, - 0x36d, 0x5, 0xb6, 0x5c, 0x2, 0x36b, 0x36d, 0x5, 0xb8, - 0x5d, 0x2, 0x36c, 0x36a, 0x3, 0x2, 0x2, 0x2, 0x36c, - 0x36b, 0x3, 0x2, 0x2, 0x2, 0x36d, 0xb3, 0x3, 0x2, - 0x2, 0x2, 0x36e, 0x371, 0x5, 0xb6, 0x5c, 0x2, 0x36f, - 0x371, 0x5, 0xf0, 0x79, 0x2, 0x370, 0x36e, 0x3, 0x2, - 0x2, 0x2, 0x370, 0x36f, 0x3, 0x2, 0x2, 0x2, 0x371, - 0xb5, 0x3, 0x2, 0x2, 0x2, 0x372, 0x373, 0x9, 0x5, - 0x2, 0x2, 0x373, 0xb7, 0x3, 0x2, 0x2, 0x2, 0x374, - 0x37b, 0x5, 0xf0, 0x79, 0x2, 0x375, 0x37b, 0x5, 0xe2, - 0x72, 0x2, 0x376, 0x37b, 0x5, 0xe4, 0x73, 0x2, 0x377, - 0x37b, 0x5, 0xec, 0x77, 0x2, 0x378, 0x37b, 0x5, 0xf4, - 0x7b, 0x2, 0x379, 0x37b, 0x7, 0xa4, 0x2, 0x2, 0x37a, - 0x374, 0x3, 0x2, 0x2, 0x2, 0x37a, 0x375, 0x3, 0x2, - 0x2, 0x2, 0x37a, 0x376, 0x3, 0x2, 0x2, 0x2, 0x37a, - 0x377, 0x3, 0x2, 0x2, 0x2, 0x37a, 0x378, 0x3, 0x2, - 0x2, 0x2, 0x37a, 0x379, 0x3, 0x2, 0x2, 0x2, 0x37b, - 0xb9, 0x3, 0x2, 0x2, 0x2, 0x37c, 0x37d, 0x5, 0xbc, - 0x5f, 0x2, 0x37d, 0xbb, 0x3, 0x2, 0x2, 0x2, 0x37e, - 0x383, 0x5, 0xbe, 0x60, 0x2, 0x37f, 0x380, 0x7, 0x14, - 0x2, 0x2, 0x380, 0x382, 0x5, 0xbe, 0x60, 0x2, 0x381, - 0x37f, 0x3, 0x2, 0x2, 0x2, 0x382, 0x385, 0x3, 0x2, - 0x2, 0x2, 0x383, 0x381, 0x3, 0x2, 0x2, 0x2, 0x383, - 0x384, 0x3, 0x2, 0x2, 0x2, 0x384, 0xbd, 0x3, 0x2, - 0x2, 0x2, 0x385, 0x383, 0x3, 0x2, 0x2, 0x2, 0x386, - 0x38b, 0x5, 0xc0, 0x61, 0x2, 0x387, 0x388, 0x7, 0x15, - 0x2, 0x2, 0x388, 0x38a, 0x5, 0xc0, 0x61, 0x2, 0x389, - 0x387, 0x3, 0x2, 0x2, 0x2, 0x38a, 0x38d, 0x3, 0x2, - 0x2, 0x2, 0x38b, 0x389, 0x3, 0x2, 0x2, 0x2, 0x38b, - 0x38c, 0x3, 0x2, 0x2, 0x2, 0x38c, 0xbf, 0x3, 0x2, - 0x2, 0x2, 0x38d, 0x38b, 0x3, 0x2, 0x2, 0x2, 0x38e, - 0x38f, 0x5, 0xc2, 0x62, 0x2, 0x38f, 0xc1, 0x3, 0x2, - 0x2, 0x2, 0x390, 0x3a2, 0x5, 0xc4, 0x63, 0x2, 0x391, - 0x392, 0x7, 0x16, 0x2, 0x2, 0x392, 0x3a3, 0x5, 0xc4, - 0x63, 0x2, 0x393, 0x394, 0x7, 0x17, 0x2, 0x2, 0x394, - 0x3a3, 0x5, 0xc4, 0x63, 0x2, 0x395, 0x396, 0x7, 0x18, - 0x2, 0x2, 0x396, 0x3a3, 0x5, 0xc4, 0x63, 0x2, 0x397, - 0x398, 0x7, 0x19, 0x2, 0x2, 0x398, 0x3a3, 0x5, 0xc4, - 0x63, 0x2, 0x399, 0x39a, 0x7, 0x1a, 0x2, 0x2, 0x39a, - 0x3a3, 0x5, 0xc4, 0x63, 0x2, 0x39b, 0x39c, 0x7, 0x1b, - 0x2, 0x2, 0x39c, 0x3a3, 0x5, 0xc4, 0x63, 0x2, 0x39d, - 0x39e, 0x7, 0x4f, 0x2, 0x2, 0x39e, 0x3a3, 0x5, 0x68, - 0x35, 0x2, 0x39f, 0x3a0, 0x7, 0x4e, 0x2, 0x2, 0x3a0, - 0x3a1, 0x7, 0x4f, 0x2, 0x2, 0x3a1, 0x3a3, 0x5, 0x68, - 0x35, 0x2, 0x3a2, 0x391, 0x3, 0x2, 0x2, 0x2, 0x3a2, - 0x393, 0x3, 0x2, 0x2, 0x2, 0x3a2, 0x395, 0x3, 0x2, - 0x2, 0x2, 0x3a2, 0x397, 0x3, 0x2, 0x2, 0x2, 0x3a2, - 0x399, 0x3, 0x2, 0x2, 0x2, 0x3a2, 0x39b, 0x3, 0x2, - 0x2, 0x2, 0x3a2, 0x39d, 0x3, 0x2, 0x2, 0x2, 0x3a2, - 0x39f, 0x3, 0x2, 0x2, 0x2, 0x3a2, 0x3a3, 0x3, 0x2, - 0x2, 0x2, 0x3a3, 0xc3, 0x3, 0x2, 0x2, 0x2, 0x3a4, - 0x3a5, 0x5, 0xc6, 0x64, 0x2, 0x3a5, 0xc5, 0x3, 0x2, - 0x2, 0x2, 0x3a6, 0x3ae, 0x5, 0xca, 0x66, 0x2, 0x3a7, - 0x3a8, 0x7, 0xf, 0x2, 0x2, 0x3a8, 0x3ad, 0x5, 0xca, - 0x66, 0x2, 0x3a9, 0x3aa, 0x7, 0x1c, 0x2, 0x2, 0x3aa, - 0x3ad, 0x5, 0xca, 0x66, 0x2, 0x3ab, 0x3ad, 0x5, 0xc8, - 0x65, 0x2, 0x3ac, 0x3a7, 0x3, 0x2, 0x2, 0x2, 0x3ac, - 0x3a9, 0x3, 0x2, 0x2, 0x2, 0x3ac, 0x3ab, 0x3, 0x2, - 0x2, 0x2, 0x3ad, 0x3b0, 0x3, 0x2, 0x2, 0x2, 0x3ae, - 0x3ac, 0x3, 0x2, 0x2, 0x2, 0x3ae, 0x3af, 0x3, 0x2, - 0x2, 0x2, 0x3af, 0xc7, 0x3, 0x2, 0x2, 0x2, 0x3b0, - 0x3ae, 0x3, 0x2, 0x2, 0x2, 0x3b1, 0x3b4, 0x5, 0xe8, - 0x75, 0x2, 0x3b2, 0x3b4, 0x5, 0xea, 0x76, 0x2, 0x3b3, - 0x3b1, 0x3, 0x2, 0x2, 0x2, 0x3b3, 0x3b2, 0x3, 0x2, - 0x2, 0x2, 0x3b4, 0x3bb, 0x3, 0x2, 0x2, 0x2, 0x3b5, - 0x3b6, 0x7, 0x3, 0x2, 0x2, 0x3b6, 0x3ba, 0x5, 0xcc, - 0x67, 0x2, 0x3b7, 0x3b8, 0x7, 0xd, 0x2, 0x2, 0x3b8, - 0x3ba, 0x5, 0xcc, 0x67, 0x2, 0x3b9, 0x3b5, 0x3, 0x2, - 0x2, 0x2, 0x3b9, 0x3b7, 0x3, 0x2, 0x2, 0x2, 0x3ba, - 0x3bd, 0x3, 0x2, 0x2, 0x2, 0x3bb, 0x3b9, 0x3, 0x2, - 0x2, 0x2, 0x3bb, 0x3bc, 0x3, 0x2, 0x2, 0x2, 0x3bc, - 0xc9, 0x3, 0x2, 0x2, 0x2, 0x3bd, 0x3bb, 0x3, 0x2, - 0x2, 0x2, 0x3be, 0x3c5, 0x5, 0xcc, 0x67, 0x2, 0x3bf, - 0x3c0, 0x7, 0x3, 0x2, 0x2, 0x3c0, 0x3c4, 0x5, 0xcc, - 0x67, 0x2, 0x3c1, 0x3c2, 0x7, 0xd, 0x2, 0x2, 0x3c2, - 0x3c4, 0x5, 0xcc, 0x67, 0x2, 0x3c3, 0x3bf, 0x3, 0x2, - 0x2, 0x2, 0x3c3, 0x3c1, 0x3, 0x2, 0x2, 0x2, 0x3c4, - 0x3c7, 0x3, 0x2, 0x2, 0x2, 0x3c5, 0x3c3, 0x3, 0x2, - 0x2, 0x2, 0x3c5, 0x3c6, 0x3, 0x2, 0x2, 0x2, 0x3c6, - 0xcb, 0x3, 0x2, 0x2, 0x2, 0x3c7, 0x3c5, 0x3, 0x2, - 0x2, 0x2, 0x3c8, 0x3c9, 0x7, 0x11, 0x2, 0x2, 0x3c9, - 0x3d0, 0x5, 0xce, 0x68, 0x2, 0x3ca, 0x3cb, 0x7, 0xf, - 0x2, 0x2, 0x3cb, 0x3d0, 0x5, 0xce, 0x68, 0x2, 0x3cc, - 0x3cd, 0x7, 0x1c, 0x2, 0x2, 0x3cd, 0x3d0, 0x5, 0xce, - 0x68, 0x2, 0x3ce, 0x3d0, 0x5, 0xce, 0x68, 0x2, 0x3cf, - 0x3c8, 0x3, 0x2, 0x2, 0x2, 0x3cf, 0x3ca, 0x3, 0x2, - 0x2, 0x2, 0x3cf, 0x3cc, 0x3, 0x2, 0x2, 0x2, 0x3cf, - 0x3ce, 0x3, 0x2, 0x2, 0x2, 0x3d0, 0xcd, 0x3, 0x2, - 0x2, 0x2, 0x3d1, 0x3d9, 0x5, 0xd0, 0x69, 0x2, 0x3d2, - 0x3d9, 0x5, 0xd2, 0x6a, 0x2, 0x3d3, 0x3d9, 0x5, 0xe0, - 0x71, 0x2, 0x3d4, 0x3d9, 0x5, 0xe2, 0x72, 0x2, 0x3d5, - 0x3d9, 0x5, 0xe4, 0x73, 0x2, 0x3d6, 0x3d9, 0x5, 0xec, - 0x77, 0x2, 0x3d7, 0x3d9, 0x5, 0xb6, 0x5c, 0x2, 0x3d8, - 0x3d1, 0x3, 0x2, 0x2, 0x2, 0x3d8, 0x3d2, 0x3, 0x2, - 0x2, 0x2, 0x3d8, 0x3d3, 0x3, 0x2, 0x2, 0x2, 0x3d8, - 0x3d4, 0x3, 0x2, 0x2, 0x2, 0x3d8, 0x3d5, 0x3, 0x2, - 0x2, 0x2, 0x3d8, 0x3d6, 0x3, 0x2, 0x2, 0x2, 0x3d8, - 0x3d7, 0x3, 0x2, 0x2, 0x2, 0x3d9, 0xcf, 0x3, 0x2, - 0x2, 0x2, 0x3da, 0x3db, 0x7, 0x4, 0x2, 0x2, 0x3db, - 0x3dc, 0x5, 0xba, 0x5e, 0x2, 0x3dc, 0x3dd, 0x7, 0x5, - 0x2, 0x2, 0x3dd, 0xd1, 0x3, 0x2, 0x2, 0x2, 0x3de, - 0x4e5, 0x5, 0xde, 0x70, 0x2, 0x3df, 0x3e0, 0x7, 0x50, - 0x2, 0x2, 0x3e0, 0x3e1, 0x7, 0x4, 0x2, 0x2, 0x3e1, - 0x3e2, 0x5, 0xba, 0x5e, 0x2, 0x3e2, 0x3e3, 0x7, 0x5, - 0x2, 0x2, 0x3e3, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x3e4, - 0x3e5, 0x7, 0x51, 0x2, 0x2, 0x3e5, 0x3e6, 0x7, 0x4, - 0x2, 0x2, 0x3e6, 0x3e7, 0x5, 0xba, 0x5e, 0x2, 0x3e7, - 0x3e8, 0x7, 0x5, 0x2, 0x2, 0x3e8, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x3e9, 0x3ea, 0x7, 0x52, 0x2, 0x2, 0x3ea, - 0x3eb, 0x7, 0x4, 0x2, 0x2, 0x3eb, 0x3ec, 0x5, 0xba, - 0x5e, 0x2, 0x3ec, 0x3ed, 0x7, 0x9, 0x2, 0x2, 0x3ed, - 0x3ee, 0x5, 0xba, 0x5e, 0x2, 0x3ee, 0x3ef, 0x7, 0x5, - 0x2, 0x2, 0x3ef, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x3f0, - 0x3f1, 0x7, 0x53, 0x2, 0x2, 0x3f1, 0x3f2, 0x7, 0x4, - 0x2, 0x2, 0x3f2, 0x3f3, 0x5, 0xba, 0x5e, 0x2, 0x3f3, - 0x3f4, 0x7, 0x5, 0x2, 0x2, 0x3f4, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x3f5, 0x3f6, 0x7, 0x54, 0x2, 0x2, 0x3f6, - 0x3f7, 0x7, 0x4, 0x2, 0x2, 0x3f7, 0x3f8, 0x5, 0xb6, - 0x5c, 0x2, 0x3f8, 0x3f9, 0x7, 0x5, 0x2, 0x2, 0x3f9, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x3fa, 0x3fb, 0x7, 0x55, - 0x2, 0x2, 0x3fb, 0x3fc, 0x7, 0x4, 0x2, 0x2, 0x3fc, - 0x3fd, 0x5, 0xba, 0x5e, 0x2, 0x3fd, 0x3fe, 0x7, 0x5, - 0x2, 0x2, 0x3fe, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x3ff, - 0x400, 0x7, 0x56, 0x2, 0x2, 0x400, 0x401, 0x7, 0x4, - 0x2, 0x2, 0x401, 0x402, 0x5, 0xba, 0x5e, 0x2, 0x402, - 0x403, 0x7, 0x5, 0x2, 0x2, 0x403, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x404, 0x40a, 0x7, 0x57, 0x2, 0x2, 0x405, - 0x406, 0x7, 0x4, 0x2, 0x2, 0x406, 0x407, 0x5, 0xba, - 0x5e, 0x2, 0x407, 0x408, 0x7, 0x5, 0x2, 0x2, 0x408, - 0x40b, 0x3, 0x2, 0x2, 0x2, 0x409, 0x40b, 0x7, 0xa4, - 0x2, 0x2, 0x40a, 0x405, 0x3, 0x2, 0x2, 0x2, 0x40a, - 0x409, 0x3, 0x2, 0x2, 0x2, 0x40b, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x40c, 0x40d, 0x7, 0x58, 0x2, 0x2, 0x40d, - 0x4e5, 0x7, 0xa4, 0x2, 0x2, 0x40e, 0x40f, 0x7, 0x59, - 0x2, 0x2, 0x40f, 0x410, 0x7, 0x4, 0x2, 0x2, 0x410, - 0x411, 0x5, 0xba, 0x5e, 0x2, 0x411, 0x412, 0x7, 0x5, - 0x2, 0x2, 0x412, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x413, - 0x414, 0x7, 0x5a, 0x2, 0x2, 0x414, 0x415, 0x7, 0x4, - 0x2, 0x2, 0x415, 0x416, 0x5, 0xba, 0x5e, 0x2, 0x416, - 0x417, 0x7, 0x5, 0x2, 0x2, 0x417, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x418, 0x419, 0x7, 0x5b, 0x2, 0x2, 0x419, - 0x41a, 0x7, 0x4, 0x2, 0x2, 0x41a, 0x41b, 0x5, 0xba, - 0x5e, 0x2, 0x41b, 0x41c, 0x7, 0x5, 0x2, 0x2, 0x41c, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x41d, 0x41e, 0x7, 0x5c, - 0x2, 0x2, 0x41e, 0x41f, 0x7, 0x4, 0x2, 0x2, 0x41f, - 0x420, 0x5, 0xba, 0x5e, 0x2, 0x420, 0x421, 0x7, 0x5, - 0x2, 0x2, 0x421, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x422, - 0x423, 0x7, 0x5d, 0x2, 0x2, 0x423, 0x4e5, 0x5, 0x68, - 0x35, 0x2, 0x424, 0x4e5, 0x5, 0xd6, 0x6c, 0x2, 0x425, - 0x426, 0x7, 0x5e, 0x2, 0x2, 0x426, 0x427, 0x7, 0x4, - 0x2, 0x2, 0x427, 0x428, 0x5, 0xba, 0x5e, 0x2, 0x428, - 0x429, 0x7, 0x5, 0x2, 0x2, 0x429, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x42a, 0x4e5, 0x5, 0xd8, 0x6d, 0x2, 0x42b, - 0x42c, 0x7, 0x5f, 0x2, 0x2, 0x42c, 0x42d, 0x7, 0x4, - 0x2, 0x2, 0x42d, 0x42e, 0x5, 0xba, 0x5e, 0x2, 0x42e, - 0x42f, 0x7, 0x5, 0x2, 0x2, 0x42f, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x430, 0x431, 0x7, 0x60, 0x2, 0x2, 0x431, - 0x432, 0x7, 0x4, 0x2, 0x2, 0x432, 0x433, 0x5, 0xba, - 0x5e, 0x2, 0x433, 0x434, 0x7, 0x5, 0x2, 0x2, 0x434, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x435, 0x436, 0x7, 0x61, - 0x2, 0x2, 0x436, 0x437, 0x7, 0x1d, 0x2, 0x2, 0x437, - 0x438, 0x7, 0x62, 0x2, 0x2, 0x438, 0x439, 0x7, 0x1d, - 0x2, 0x2, 0x439, 0x43a, 0x7, 0x56, 0x2, 0x2, 0x43a, - 0x43b, 0x7, 0x4, 0x2, 0x2, 0x43b, 0x43c, 0x5, 0xba, - 0x5e, 0x2, 0x43c, 0x43d, 0x7, 0x5, 0x2, 0x2, 0x43d, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x43e, 0x43f, 0x7, 0x63, - 0x2, 0x2, 0x43f, 0x440, 0x7, 0x4, 0x2, 0x2, 0x440, - 0x441, 0x5, 0xba, 0x5e, 0x2, 0x441, 0x442, 0x7, 0x9, - 0x2, 0x2, 0x442, 0x443, 0x5, 0xba, 0x5e, 0x2, 0x443, - 0x444, 0x7, 0x5, 0x2, 0x2, 0x444, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x445, 0x446, 0x7, 0x64, 0x2, 0x2, 0x446, - 0x447, 0x7, 0x4, 0x2, 0x2, 0x447, 0x448, 0x5, 0xba, - 0x5e, 0x2, 0x448, 0x449, 0x7, 0x9, 0x2, 0x2, 0x449, - 0x44a, 0x5, 0xba, 0x5e, 0x2, 0x44a, 0x44b, 0x7, 0x5, - 0x2, 0x2, 0x44b, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x44c, - 0x44d, 0x7, 0x65, 0x2, 0x2, 0x44d, 0x44e, 0x7, 0x4, - 0x2, 0x2, 0x44e, 0x44f, 0x5, 0xba, 0x5e, 0x2, 0x44f, - 0x450, 0x7, 0x9, 0x2, 0x2, 0x450, 0x451, 0x5, 0xba, - 0x5e, 0x2, 0x451, 0x452, 0x7, 0x5, 0x2, 0x2, 0x452, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x453, 0x454, 0x7, 0x66, - 0x2, 0x2, 0x454, 0x455, 0x7, 0x4, 0x2, 0x2, 0x455, - 0x456, 0x5, 0xba, 0x5e, 0x2, 0x456, 0x457, 0x7, 0x9, - 0x2, 0x2, 0x457, 0x458, 0x5, 0xba, 0x5e, 0x2, 0x458, - 0x459, 0x7, 0x5, 0x2, 0x2, 0x459, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x45a, 0x45b, 0x7, 0x67, 0x2, 0x2, 0x45b, - 0x45c, 0x7, 0x4, 0x2, 0x2, 0x45c, 0x45d, 0x5, 0xba, - 0x5e, 0x2, 0x45d, 0x45e, 0x7, 0x9, 0x2, 0x2, 0x45e, - 0x45f, 0x5, 0xba, 0x5e, 0x2, 0x45f, 0x460, 0x7, 0x5, - 0x2, 0x2, 0x460, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x461, - 0x462, 0x7, 0x68, 0x2, 0x2, 0x462, 0x463, 0x7, 0x4, - 0x2, 0x2, 0x463, 0x464, 0x5, 0xba, 0x5e, 0x2, 0x464, - 0x465, 0x7, 0x5, 0x2, 0x2, 0x465, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x466, 0x467, 0x7, 0x69, 0x2, 0x2, 0x467, - 0x468, 0x7, 0x4, 0x2, 0x2, 0x468, 0x469, 0x5, 0xba, - 0x5e, 0x2, 0x469, 0x46a, 0x7, 0x5, 0x2, 0x2, 0x46a, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x46b, 0x46c, 0x7, 0x6a, - 0x2, 0x2, 0x46c, 0x46d, 0x7, 0x4, 0x2, 0x2, 0x46d, - 0x46e, 0x5, 0xba, 0x5e, 0x2, 0x46e, 0x46f, 0x7, 0x5, - 0x2, 0x2, 0x46f, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x470, - 0x471, 0x7, 0x6b, 0x2, 0x2, 0x471, 0x472, 0x7, 0x4, - 0x2, 0x2, 0x472, 0x473, 0x5, 0xba, 0x5e, 0x2, 0x473, - 0x474, 0x7, 0x5, 0x2, 0x2, 0x474, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x475, 0x476, 0x7, 0x6c, 0x2, 0x2, 0x476, - 0x477, 0x7, 0x4, 0x2, 0x2, 0x477, 0x478, 0x5, 0xba, - 0x5e, 0x2, 0x478, 0x479, 0x7, 0x5, 0x2, 0x2, 0x479, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x47a, 0x47b, 0x7, 0x6d, - 0x2, 0x2, 0x47b, 0x47c, 0x7, 0x4, 0x2, 0x2, 0x47c, - 0x47d, 0x5, 0xba, 0x5e, 0x2, 0x47d, 0x47e, 0x7, 0x5, - 0x2, 0x2, 0x47e, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x47f, - 0x480, 0x7, 0x6e, 0x2, 0x2, 0x480, 0x481, 0x7, 0x4, - 0x2, 0x2, 0x481, 0x482, 0x5, 0xba, 0x5e, 0x2, 0x482, - 0x483, 0x7, 0x5, 0x2, 0x2, 0x483, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x484, 0x485, 0x7, 0x6f, 0x2, 0x2, 0x485, - 0x486, 0x7, 0x4, 0x2, 0x2, 0x486, 0x487, 0x5, 0xba, - 0x5e, 0x2, 0x487, 0x488, 0x7, 0x5, 0x2, 0x2, 0x488, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x489, 0x48a, 0x7, 0x70, - 0x2, 0x2, 0x48a, 0x4e5, 0x7, 0xa4, 0x2, 0x2, 0x48b, - 0x48c, 0x7, 0x71, 0x2, 0x2, 0x48c, 0x4e5, 0x7, 0xa4, - 0x2, 0x2, 0x48d, 0x48e, 0x7, 0x72, 0x2, 0x2, 0x48e, - 0x4e5, 0x7, 0xa4, 0x2, 0x2, 0x48f, 0x490, 0x7, 0x77, - 0x2, 0x2, 0x490, 0x491, 0x7, 0x4, 0x2, 0x2, 0x491, - 0x492, 0x5, 0xba, 0x5e, 0x2, 0x492, 0x493, 0x7, 0x5, - 0x2, 0x2, 0x493, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x494, - 0x495, 0x7, 0x73, 0x2, 0x2, 0x495, 0x496, 0x7, 0x4, - 0x2, 0x2, 0x496, 0x497, 0x5, 0xba, 0x5e, 0x2, 0x497, - 0x498, 0x7, 0x5, 0x2, 0x2, 0x498, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x499, 0x49a, 0x7, 0x74, 0x2, 0x2, 0x49a, - 0x49b, 0x7, 0x4, 0x2, 0x2, 0x49b, 0x49c, 0x5, 0xba, - 0x5e, 0x2, 0x49c, 0x49d, 0x7, 0x5, 0x2, 0x2, 0x49d, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x49e, 0x49f, 0x7, 0x75, - 0x2, 0x2, 0x49f, 0x4a0, 0x7, 0x4, 0x2, 0x2, 0x4a0, - 0x4a1, 0x5, 0xba, 0x5e, 0x2, 0x4a1, 0x4a2, 0x7, 0x5, - 0x2, 0x2, 0x4a2, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x4a3, - 0x4a4, 0x7, 0x76, 0x2, 0x2, 0x4a4, 0x4a5, 0x7, 0x4, - 0x2, 0x2, 0x4a5, 0x4a6, 0x5, 0xba, 0x5e, 0x2, 0x4a6, - 0x4a7, 0x7, 0x5, 0x2, 0x2, 0x4a7, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x4a8, 0x4a9, 0x7, 0x78, 0x2, 0x2, 0x4a9, - 0x4e5, 0x5, 0x68, 0x35, 0x2, 0x4aa, 0x4ab, 0x7, 0x79, - 0x2, 0x2, 0x4ab, 0x4ac, 0x7, 0x4, 0x2, 0x2, 0x4ac, - 0x4ad, 0x5, 0xba, 0x5e, 0x2, 0x4ad, 0x4ae, 0x7, 0x9, - 0x2, 0x2, 0x4ae, 0x4af, 0x5, 0xba, 0x5e, 0x2, 0x4af, - 0x4b0, 0x7, 0x9, 0x2, 0x2, 0x4b0, 0x4b1, 0x5, 0xba, - 0x5e, 0x2, 0x4b1, 0x4b2, 0x7, 0x5, 0x2, 0x2, 0x4b2, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x4b3, 0x4b4, 0x7, 0x7a, - 0x2, 0x2, 0x4b4, 0x4b5, 0x7, 0x4, 0x2, 0x2, 0x4b5, - 0x4b6, 0x5, 0xba, 0x5e, 0x2, 0x4b6, 0x4b7, 0x7, 0x9, - 0x2, 0x2, 0x4b7, 0x4b8, 0x5, 0xba, 0x5e, 0x2, 0x4b8, - 0x4b9, 0x7, 0x5, 0x2, 0x2, 0x4b9, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x4ba, 0x4bb, 0x7, 0x7b, 0x2, 0x2, 0x4bb, - 0x4bc, 0x7, 0x4, 0x2, 0x2, 0x4bc, 0x4bd, 0x5, 0xba, - 0x5e, 0x2, 0x4bd, 0x4be, 0x7, 0x9, 0x2, 0x2, 0x4be, - 0x4bf, 0x5, 0xba, 0x5e, 0x2, 0x4bf, 0x4c0, 0x7, 0x5, - 0x2, 0x2, 0x4c0, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x4c1, - 0x4c2, 0x7, 0x7c, 0x2, 0x2, 0x4c2, 0x4c3, 0x7, 0x4, - 0x2, 0x2, 0x4c3, 0x4c4, 0x5, 0xba, 0x5e, 0x2, 0x4c4, - 0x4c5, 0x7, 0x9, 0x2, 0x2, 0x4c5, 0x4c6, 0x5, 0xba, - 0x5e, 0x2, 0x4c6, 0x4c7, 0x7, 0x5, 0x2, 0x2, 0x4c7, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x4c8, 0x4c9, 0x7, 0x7d, - 0x2, 0x2, 0x4c9, 0x4ca, 0x7, 0x4, 0x2, 0x2, 0x4ca, - 0x4cb, 0x5, 0xba, 0x5e, 0x2, 0x4cb, 0x4cc, 0x7, 0x5, - 0x2, 0x2, 0x4cc, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x4cd, - 0x4ce, 0x7, 0x7e, 0x2, 0x2, 0x4ce, 0x4cf, 0x7, 0x4, - 0x2, 0x2, 0x4cf, 0x4d0, 0x5, 0xba, 0x5e, 0x2, 0x4d0, - 0x4d1, 0x7, 0x5, 0x2, 0x2, 0x4d1, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x4d2, 0x4d3, 0x7, 0x7f, 0x2, 0x2, 0x4d3, - 0x4d4, 0x7, 0x4, 0x2, 0x2, 0x4d4, 0x4d5, 0x5, 0xba, - 0x5e, 0x2, 0x4d5, 0x4d6, 0x7, 0x5, 0x2, 0x2, 0x4d6, - 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x4d7, 0x4d8, 0x7, 0x80, - 0x2, 0x2, 0x4d8, 0x4d9, 0x7, 0x4, 0x2, 0x2, 0x4d9, - 0x4da, 0x5, 0xba, 0x5e, 0x2, 0x4da, 0x4db, 0x7, 0x5, - 0x2, 0x2, 0x4db, 0x4e5, 0x3, 0x2, 0x2, 0x2, 0x4dc, - 0x4dd, 0x7, 0x81, 0x2, 0x2, 0x4dd, 0x4de, 0x7, 0x4, - 0x2, 0x2, 0x4de, 0x4df, 0x5, 0xba, 0x5e, 0x2, 0x4df, - 0x4e0, 0x7, 0x5, 0x2, 0x2, 0x4e0, 0x4e5, 0x3, 0x2, - 0x2, 0x2, 0x4e1, 0x4e5, 0x5, 0xd4, 0x6b, 0x2, 0x4e2, - 0x4e5, 0x5, 0xda, 0x6e, 0x2, 0x4e3, 0x4e5, 0x5, 0xdc, - 0x6f, 0x2, 0x4e4, 0x3de, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x3df, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x3e4, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x3e9, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x3f0, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x3f5, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x3fa, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x3ff, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x404, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x40c, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x40e, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x413, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x418, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x41d, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x422, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x424, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x425, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x42a, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x42b, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x430, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x435, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x43e, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x445, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x44c, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x453, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x45a, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x461, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x466, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x46b, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x470, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x475, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x47a, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x47f, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x484, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x489, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x48b, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x48d, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x48f, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x494, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x499, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x49e, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x4a3, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x4a8, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x4aa, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x4b3, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x4ba, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x4c1, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x4c8, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x4cd, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x4d2, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x4d7, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x4dc, 0x3, 0x2, 0x2, 0x2, 0x4e4, - 0x4e1, 0x3, 0x2, 0x2, 0x2, 0x4e4, 0x4e2, 0x3, 0x2, - 0x2, 0x2, 0x4e4, 0x4e3, 0x3, 0x2, 0x2, 0x2, 0x4e5, - 0xd3, 0x3, 0x2, 0x2, 0x2, 0x4e6, 0x4e7, 0x7, 0x82, - 0x2, 0x2, 0x4e7, 0x4e8, 0x7, 0x4, 0x2, 0x2, 0x4e8, - 0x4e9, 0x5, 0xba, 0x5e, 0x2, 0x4e9, 0x4ea, 0x7, 0x9, - 0x2, 0x2, 0x4ea, 0x4ed, 0x5, 0xba, 0x5e, 0x2, 0x4eb, - 0x4ec, 0x7, 0x9, 0x2, 0x2, 0x4ec, 0x4ee, 0x5, 0xba, - 0x5e, 0x2, 0x4ed, 0x4eb, 0x3, 0x2, 0x2, 0x2, 0x4ed, - 0x4ee, 0x3, 0x2, 0x2, 0x2, 0x4ee, 0x4ef, 0x3, 0x2, - 0x2, 0x2, 0x4ef, 0x4f0, 0x7, 0x5, 0x2, 0x2, 0x4f0, - 0xd5, 0x3, 0x2, 0x2, 0x2, 0x4f1, 0x4f2, 0x7, 0x83, - 0x2, 0x2, 0x4f2, 0x4f3, 0x7, 0x4, 0x2, 0x2, 0x4f3, - 0x4f4, 0x5, 0xba, 0x5e, 0x2, 0x4f4, 0x4f5, 0x7, 0x9, - 0x2, 0x2, 0x4f5, 0x4f8, 0x5, 0xba, 0x5e, 0x2, 0x4f6, - 0x4f7, 0x7, 0x9, 0x2, 0x2, 0x4f7, 0x4f9, 0x5, 0xba, - 0x5e, 0x2, 0x4f8, 0x4f6, 0x3, 0x2, 0x2, 0x2, 0x4f8, - 0x4f9, 0x3, 0x2, 0x2, 0x2, 0x4f9, 0x4fa, 0x3, 0x2, - 0x2, 0x2, 0x4fa, 0x4fb, 0x7, 0x5, 0x2, 0x2, 0x4fb, - 0xd7, 0x3, 0x2, 0x2, 0x2, 0x4fc, 0x4fd, 0x7, 0x84, - 0x2, 0x2, 0x4fd, 0x4fe, 0x7, 0x4, 0x2, 0x2, 0x4fe, - 0x4ff, 0x5, 0xba, 0x5e, 0x2, 0x4ff, 0x500, 0x7, 0x9, - 0x2, 0x2, 0x500, 0x501, 0x5, 0xba, 0x5e, 0x2, 0x501, - 0x502, 0x7, 0x9, 0x2, 0x2, 0x502, 0x505, 0x5, 0xba, - 0x5e, 0x2, 0x503, 0x504, 0x7, 0x9, 0x2, 0x2, 0x504, - 0x506, 0x5, 0xba, 0x5e, 0x2, 0x505, 0x503, 0x3, 0x2, - 0x2, 0x2, 0x505, 0x506, 0x3, 0x2, 0x2, 0x2, 0x506, - 0x507, 0x3, 0x2, 0x2, 0x2, 0x507, 0x508, 0x7, 0x5, - 0x2, 0x2, 0x508, 0xd9, 0x3, 0x2, 0x2, 0x2, 0x509, - 0x50a, 0x7, 0x85, 0x2, 0x2, 0x50a, 0x50b, 0x5, 0x40, - 0x21, 0x2, 0x50b, 0xdb, 0x3, 0x2, 0x2, 0x2, 0x50c, - 0x50d, 0x7, 0x4e, 0x2, 0x2, 0x50d, 0x50e, 0x7, 0x85, - 0x2, 0x2, 0x50e, 0x50f, 0x5, 0x40, 0x21, 0x2, 0x50f, - 0xdd, 0x3, 0x2, 0x2, 0x2, 0x510, 0x511, 0x7, 0x86, - 0x2, 0x2, 0x511, 0x513, 0x7, 0x4, 0x2, 0x2, 0x512, - 0x514, 0x7, 0x24, 0x2, 0x2, 0x513, 0x512, 0x3, 0x2, - 0x2, 0x2, 0x513, 0x514, 0x3, 0x2, 0x2, 0x2, 0x514, - 0x517, 0x3, 0x2, 0x2, 0x2, 0x515, 0x518, 0x7, 0x3, - 0x2, 0x2, 0x516, 0x518, 0x5, 0xba, 0x5e, 0x2, 0x517, - 0x515, 0x3, 0x2, 0x2, 0x2, 0x517, 0x516, 0x3, 0x2, - 0x2, 0x2, 0x518, 0x519, 0x3, 0x2, 0x2, 0x2, 0x519, - 0x551, 0x7, 0x5, 0x2, 0x2, 0x51a, 0x51b, 0x7, 0x87, - 0x2, 0x2, 0x51b, 0x51d, 0x7, 0x4, 0x2, 0x2, 0x51c, - 0x51e, 0x7, 0x24, 0x2, 0x2, 0x51d, 0x51c, 0x3, 0x2, - 0x2, 0x2, 0x51d, 0x51e, 0x3, 0x2, 0x2, 0x2, 0x51e, - 0x51f, 0x3, 0x2, 0x2, 0x2, 0x51f, 0x520, 0x5, 0xba, - 0x5e, 0x2, 0x520, 0x521, 0x7, 0x5, 0x2, 0x2, 0x521, - 0x551, 0x3, 0x2, 0x2, 0x2, 0x522, 0x523, 0x7, 0x88, - 0x2, 0x2, 0x523, 0x525, 0x7, 0x4, 0x2, 0x2, 0x524, - 0x526, 0x7, 0x24, 0x2, 0x2, 0x525, 0x524, 0x3, 0x2, - 0x2, 0x2, 0x525, 0x526, 0x3, 0x2, 0x2, 0x2, 0x526, - 0x527, 0x3, 0x2, 0x2, 0x2, 0x527, 0x528, 0x5, 0xba, - 0x5e, 0x2, 0x528, 0x529, 0x7, 0x5, 0x2, 0x2, 0x529, - 0x551, 0x3, 0x2, 0x2, 0x2, 0x52a, 0x52b, 0x7, 0x89, - 0x2, 0x2, 0x52b, 0x52d, 0x7, 0x4, 0x2, 0x2, 0x52c, - 0x52e, 0x7, 0x24, 0x2, 0x2, 0x52d, 0x52c, 0x3, 0x2, - 0x2, 0x2, 0x52d, 0x52e, 0x3, 0x2, 0x2, 0x2, 0x52e, - 0x52f, 0x3, 0x2, 0x2, 0x2, 0x52f, 0x530, 0x5, 0xba, - 0x5e, 0x2, 0x530, 0x531, 0x7, 0x5, 0x2, 0x2, 0x531, - 0x551, 0x3, 0x2, 0x2, 0x2, 0x532, 0x533, 0x7, 0x8a, - 0x2, 0x2, 0x533, 0x535, 0x7, 0x4, 0x2, 0x2, 0x534, - 0x536, 0x7, 0x24, 0x2, 0x2, 0x535, 0x534, 0x3, 0x2, - 0x2, 0x2, 0x535, 0x536, 0x3, 0x2, 0x2, 0x2, 0x536, - 0x537, 0x3, 0x2, 0x2, 0x2, 0x537, 0x538, 0x5, 0xba, - 0x5e, 0x2, 0x538, 0x539, 0x7, 0x5, 0x2, 0x2, 0x539, - 0x551, 0x3, 0x2, 0x2, 0x2, 0x53a, 0x53b, 0x7, 0x8b, - 0x2, 0x2, 0x53b, 0x53d, 0x7, 0x4, 0x2, 0x2, 0x53c, - 0x53e, 0x7, 0x24, 0x2, 0x2, 0x53d, 0x53c, 0x3, 0x2, - 0x2, 0x2, 0x53d, 0x53e, 0x3, 0x2, 0x2, 0x2, 0x53e, - 0x53f, 0x3, 0x2, 0x2, 0x2, 0x53f, 0x540, 0x5, 0xba, - 0x5e, 0x2, 0x540, 0x541, 0x7, 0x5, 0x2, 0x2, 0x541, - 0x551, 0x3, 0x2, 0x2, 0x2, 0x542, 0x543, 0x7, 0x2e, - 0x2, 0x2, 0x543, 0x545, 0x7, 0x4, 0x2, 0x2, 0x544, - 0x546, 0x7, 0x24, 0x2, 0x2, 0x545, 0x544, 0x3, 0x2, - 0x2, 0x2, 0x545, 0x546, 0x3, 0x2, 0x2, 0x2, 0x546, - 0x547, 0x3, 0x2, 0x2, 0x2, 0x547, 0x54c, 0x5, 0xba, - 0x5e, 0x2, 0x548, 0x549, 0x7, 0xa, 0x2, 0x2, 0x549, - 0x54a, 0x7, 0x8c, 0x2, 0x2, 0x54a, 0x54b, 0x7, 0x16, - 0x2, 0x2, 0x54b, 0x54d, 0x5, 0xee, 0x78, 0x2, 0x54c, - 0x548, 0x3, 0x2, 0x2, 0x2, 0x54c, 0x54d, 0x3, 0x2, - 0x2, 0x2, 0x54d, 0x54e, 0x3, 0x2, 0x2, 0x2, 0x54e, - 0x54f, 0x7, 0x5, 0x2, 0x2, 0x54f, 0x551, 0x3, 0x2, - 0x2, 0x2, 0x550, 0x510, 0x3, 0x2, 0x2, 0x2, 0x550, - 0x51a, 0x3, 0x2, 0x2, 0x2, 0x550, 0x522, 0x3, 0x2, - 0x2, 0x2, 0x550, 0x52a, 0x3, 0x2, 0x2, 0x2, 0x550, - 0x532, 0x3, 0x2, 0x2, 0x2, 0x550, 0x53a, 0x3, 0x2, - 0x2, 0x2, 0x550, 0x542, 0x3, 0x2, 0x2, 0x2, 0x551, - 0xdf, 0x3, 0x2, 0x2, 0x2, 0x552, 0x554, 0x5, 0xf0, - 0x79, 0x2, 0x553, 0x555, 0x5, 0x66, 0x34, 0x2, 0x554, - 0x553, 0x3, 0x2, 0x2, 0x2, 0x554, 0x555, 0x3, 0x2, - 0x2, 0x2, 0x555, 0xe1, 0x3, 0x2, 0x2, 0x2, 0x556, - 0x55a, 0x5, 0xee, 0x78, 0x2, 0x557, 0x55b, 0x7, 0x93, - 0x2, 0x2, 0x558, 0x559, 0x7, 0x1e, 0x2, 0x2, 0x559, - 0x55b, 0x5, 0xf0, 0x79, 0x2, 0x55a, 0x557, 0x3, 0x2, - 0x2, 0x2, 0x55a, 0x558, 0x3, 0x2, 0x2, 0x2, 0x55a, - 0x55b, 0x3, 0x2, 0x2, 0x2, 0x55b, 0xe3, 0x3, 0x2, - 0x2, 0x2, 0x55c, 0x560, 0x5, 0xe6, 0x74, 0x2, 0x55d, - 0x560, 0x5, 0xe8, 0x75, 0x2, 0x55e, 0x560, 0x5, 0xea, - 0x76, 0x2, 0x55f, 0x55c, 0x3, 0x2, 0x2, 0x2, 0x55f, - 0x55d, 0x3, 0x2, 0x2, 0x2, 0x55f, 0x55e, 0x3, 0x2, - 0x2, 0x2, 0x560, 0xe5, 0x3, 0x2, 0x2, 0x2, 0x561, - 0x562, 0x9, 0x6, 0x2, 0x2, 0x562, 0xe7, 0x3, 0x2, - 0x2, 0x2, 0x563, 0x564, 0x9, 0x7, 0x2, 0x2, 0x564, - 0xe9, 0x3, 0x2, 0x2, 0x2, 0x565, 0x566, 0x9, 0x8, - 0x2, 0x2, 0x566, 0xeb, 0x3, 0x2, 0x2, 0x2, 0x567, - 0x568, 0x9, 0x9, 0x2, 0x2, 0x568, 0xed, 0x3, 0x2, - 0x2, 0x2, 0x569, 0x56a, 0x9, 0xa, 0x2, 0x2, 0x56a, - 0xef, 0x3, 0x2, 0x2, 0x2, 0x56b, 0x56d, 0x7, 0x94, - 0x2, 0x2, 0x56c, 0x56b, 0x3, 0x2, 0x2, 0x2, 0x56c, - 0x56d, 0x3, 0x2, 0x2, 0x2, 0x56d, 0x570, 0x3, 0x2, - 0x2, 0x2, 0x56e, 0x571, 0x5, 0xf6, 0x7c, 0x2, 0x56f, - 0x571, 0x5, 0xf2, 0x7a, 0x2, 0x570, 0x56e, 0x3, 0x2, - 0x2, 0x2, 0x570, 0x56f, 0x3, 0x2, 0x2, 0x2, 0x571, - 0xf1, 0x3, 0x2, 0x2, 0x2, 0x572, 0x575, 0x5, 0xf8, - 0x7d, 0x2, 0x573, 0x575, 0x5, 0xfa, 0x7e, 0x2, 0x574, - 0x572, 0x3, 0x2, 0x2, 0x2, 0x574, 0x573, 0x3, 0x2, - 0x2, 0x2, 0x575, 0xf3, 0x3, 0x2, 0x2, 0x2, 0x576, - 0x577, 0x9, 0xb, 0x2, 0x2, 0x577, 0xf5, 0x3, 0x2, - 0x2, 0x2, 0x578, 0x579, 0x7, 0x8d, 0x2, 0x2, 0x579, - 0xf7, 0x3, 0x2, 0x2, 0x2, 0x57a, 0x57b, 0x7, 0x8f, - 0x2, 0x2, 0x57b, 0xf9, 0x3, 0x2, 0x2, 0x2, 0x57c, - 0x57d, 0x7, 0x8e, 0x2, 0x2, 0x57d, 0xfb, 0x3, 0x2, - 0x2, 0x2, 0x8b, 0x101, 0x108, 0x10a, 0x118, 0x125, 0x12a, - 0x12d, 0x131, 0x140, 0x149, 0x14f, 0x153, 0x159, 0x15c, 0x161, - 0x165, 0x16d, 0x176, 0x180, 0x185, 0x188, 0x18b, 0x18e, 0x194, - 0x19c, 0x1a1, 0x1a7, 0x1af, 0x1b5, 0x1b7, 0x1bb, 0x1be, 0x1c2, - 0x1c5, 0x1c9, 0x1cc, 0x1d0, 0x1d3, 0x1d7, 0x1da, 0x1de, 0x1e1, - 0x1e3, 0x1f0, 0x1f5, 0x1f7, 0x1fc, 0x201, 0x205, 0x208, 0x20c, - 0x212, 0x214, 0x21e, 0x229, 0x23a, 0x241, 0x24b, 0x24f, 0x255, - 0x25e, 0x263, 0x26a, 0x274, 0x27d, 0x285, 0x28c, 0x291, 0x29a, - 0x29f, 0x2a3, 0x2aa, 0x2ac, 0x2b4, 0x2b7, 0x2bf, 0x2c3, 0x2c8, - 0x2cf, 0x2da, 0x2dd, 0x2e2, 0x2e6, 0x2f5, 0x2fc, 0x308, 0x310, - 0x315, 0x31a, 0x326, 0x32f, 0x332, 0x335, 0x33c, 0x33e, 0x344, - 0x34c, 0x356, 0x35e, 0x364, 0x368, 0x36c, 0x370, 0x37a, 0x383, - 0x38b, 0x3a2, 0x3ac, 0x3ae, 0x3b3, 0x3b9, 0x3bb, 0x3c3, 0x3c5, - 0x3cf, 0x3d8, 0x40a, 0x4e4, 0x4ed, 0x4f8, 0x505, 0x513, 0x517, - 0x51d, 0x525, 0x52d, 0x535, 0x53d, 0x545, 0x54c, 0x550, 0x554, - 0x55a, 0x55f, 0x56c, 0x570, 0x574, + 0x5, 0x6b, 0x4e8, 0xa, 0x6b, 0x3, 0x6c, 0x3, 0x6c, + 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, 0x6c, 0x3, + 0x6c, 0x5, 0x6c, 0x4f1, 0xa, 0x6c, 0x3, 0x6c, 0x3, + 0x6c, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, + 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x5, 0x6d, 0x4fc, + 0xa, 0x6d, 0x3, 0x6d, 0x3, 0x6d, 0x3, 0x6e, 0x3, + 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, + 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x5, 0x6e, 0x509, + 0xa, 0x6e, 0x3, 0x6e, 0x3, 0x6e, 0x3, 0x6f, 0x3, + 0x6f, 0x3, 0x6f, 0x3, 0x70, 0x3, 0x70, 0x3, 0x70, + 0x3, 0x70, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x5, + 0x71, 0x517, 0xa, 0x71, 0x3, 0x71, 0x3, 0x71, 0x5, + 0x71, 0x51b, 0xa, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, + 0x71, 0x3, 0x71, 0x5, 0x71, 0x521, 0xa, 0x71, 0x3, + 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, + 0x3, 0x71, 0x5, 0x71, 0x529, 0xa, 0x71, 0x3, 0x71, + 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, + 0x71, 0x5, 0x71, 0x531, 0xa, 0x71, 0x3, 0x71, 0x3, + 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, + 0x5, 0x71, 0x539, 0xa, 0x71, 0x3, 0x71, 0x3, 0x71, + 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x5, + 0x71, 0x541, 0xa, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, + 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, 0x5, 0x71, + 0x549, 0xa, 0x71, 0x3, 0x71, 0x3, 0x71, 0x3, 0x71, + 0x3, 0x71, 0x3, 0x71, 0x5, 0x71, 0x550, 0xa, 0x71, + 0x3, 0x71, 0x3, 0x71, 0x5, 0x71, 0x554, 0xa, 0x71, + 0x3, 0x72, 0x3, 0x72, 0x5, 0x72, 0x558, 0xa, 0x72, + 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x3, 0x73, 0x5, + 0x73, 0x55e, 0xa, 0x73, 0x3, 0x74, 0x3, 0x74, 0x3, + 0x74, 0x5, 0x74, 0x563, 0xa, 0x74, 0x3, 0x75, 0x3, + 0x75, 0x3, 0x76, 0x3, 0x76, 0x3, 0x77, 0x3, 0x77, + 0x3, 0x78, 0x3, 0x78, 0x3, 0x79, 0x3, 0x79, 0x3, + 0x7a, 0x5, 0x7a, 0x570, 0xa, 0x7a, 0x3, 0x7a, 0x3, + 0x7a, 0x5, 0x7a, 0x574, 0xa, 0x7a, 0x3, 0x7b, 0x3, + 0x7b, 0x5, 0x7b, 0x578, 0xa, 0x7b, 0x3, 0x7c, 0x3, + 0x7c, 0x3, 0x7d, 0x3, 0x7d, 0x3, 0x7e, 0x3, 0x7e, + 0x3, 0x7f, 0x3, 0x7f, 0x3, 0x7f, 0x2, 0x2, 0x80, + 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, + 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, + 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, + 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, + 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, + 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, + 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, + 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, + 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, + 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, + 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xc0, 0xc2, 0xc4, 0xc6, + 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, + 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, + 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, + 0x2, 0xc, 0x3, 0x2, 0x24, 0x25, 0x3, 0x2, 0x31, + 0x32, 0x4, 0x2, 0x3, 0x3, 0xf, 0x10, 0x3, 0x2, + 0x91, 0x92, 0x3, 0x2, 0x95, 0x97, 0x3, 0x2, 0x98, + 0x9a, 0x3, 0x2, 0x9b, 0x9d, 0x3, 0x2, 0x1f, 0x20, + 0x3, 0x2, 0x9f, 0xa2, 0x4, 0x2, 0x90, 0x90, 0xa5, + 0xa5, 0x2, 0x5f0, 0x2, 0xfe, 0x3, 0x2, 0x2, 0x2, + 0x4, 0x10c, 0x3, 0x2, 0x2, 0x2, 0x6, 0x10f, 0x3, + 0x2, 0x2, 0x2, 0x8, 0x112, 0x3, 0x2, 0x2, 0x2, + 0xa, 0x116, 0x3, 0x2, 0x2, 0x2, 0xc, 0x120, 0x3, + 0x2, 0x2, 0x2, 0xe, 0x125, 0x3, 0x2, 0x2, 0x2, + 0x10, 0x133, 0x3, 0x2, 0x2, 0x2, 0x12, 0x135, 0x3, + 0x2, 0x2, 0x2, 0x14, 0x139, 0x3, 0x2, 0x2, 0x2, + 0x16, 0x13d, 0x3, 0x2, 0x2, 0x2, 0x18, 0x157, 0x3, + 0x2, 0x2, 0x2, 0x1a, 0x16b, 0x3, 0x2, 0x2, 0x2, + 0x1c, 0x175, 0x3, 0x2, 0x2, 0x2, 0x1e, 0x17a, 0x3, + 0x2, 0x2, 0x2, 0x20, 0x17c, 0x3, 0x2, 0x2, 0x2, + 0x22, 0x17f, 0x3, 0x2, 0x2, 0x2, 0x24, 0x182, 0x3, + 0x2, 0x2, 0x2, 0x26, 0x187, 0x3, 0x2, 0x2, 0x2, + 0x28, 0x192, 0x3, 0x2, 0x2, 0x2, 0x2a, 0x1a3, 0x3, + 0x2, 0x2, 0x2, 0x2c, 0x1a5, 0x3, 0x2, 0x2, 0x2, + 0x2e, 0x1ab, 0x3, 0x2, 0x2, 0x2, 0x30, 0x1ad, 0x3, + 0x2, 0x2, 0x2, 0x32, 0x1b9, 0x3, 0x2, 0x2, 0x2, + 0x34, 0x1e5, 0x3, 0x2, 0x2, 0x2, 0x36, 0x1e7, 0x3, + 0x2, 0x2, 0x2, 0x38, 0x1ea, 0x3, 0x2, 0x2, 0x2, + 0x3a, 0x1ed, 0x3, 0x2, 0x2, 0x2, 0x3c, 0x1f2, 0x3, + 0x2, 0x2, 0x2, 0x3e, 0x1f4, 0x3, 0x2, 0x2, 0x2, + 0x40, 0x1fb, 0x3, 0x2, 0x2, 0x2, 0x42, 0x203, 0x3, + 0x2, 0x2, 0x2, 0x44, 0x20b, 0x3, 0x2, 0x2, 0x2, + 0x46, 0x212, 0x3, 0x2, 0x2, 0x2, 0x48, 0x221, 0x3, + 0x2, 0x2, 0x2, 0x4a, 0x223, 0x3, 0x2, 0x2, 0x2, + 0x4c, 0x226, 0x3, 0x2, 0x2, 0x2, 0x4e, 0x22a, 0x3, + 0x2, 0x2, 0x2, 0x50, 0x231, 0x3, 0x2, 0x2, 0x2, + 0x52, 0x238, 0x3, 0x2, 0x2, 0x2, 0x54, 0x23d, 0x3, + 0x2, 0x2, 0x2, 0x56, 0x23f, 0x3, 0x2, 0x2, 0x2, + 0x58, 0x252, 0x3, 0x2, 0x2, 0x2, 0x5a, 0x266, 0x3, + 0x2, 0x2, 0x2, 0x5c, 0x26d, 0x3, 0x2, 0x2, 0x2, + 0x5e, 0x26f, 0x3, 0x2, 0x2, 0x2, 0x60, 0x272, 0x3, + 0x2, 0x2, 0x2, 0x62, 0x27a, 0x3, 0x2, 0x2, 0x2, + 0x64, 0x280, 0x3, 0x2, 0x2, 0x2, 0x66, 0x282, 0x3, + 0x2, 0x2, 0x2, 0x68, 0x294, 0x3, 0x2, 0x2, 0x2, + 0x6a, 0x2a2, 0x3, 0x2, 0x2, 0x2, 0x6c, 0x2a4, 0x3, + 0x2, 0x2, 0x2, 0x6e, 0x2aa, 0x3, 0x2, 0x2, 0x2, + 0x70, 0x2b7, 0x3, 0x2, 0x2, 0x2, 0x72, 0x2ba, 0x3, + 0x2, 0x2, 0x2, 0x74, 0x2bc, 0x3, 0x2, 0x2, 0x2, + 0x76, 0x2cb, 0x3, 0x2, 0x2, 0x2, 0x78, 0x2cd, 0x3, + 0x2, 0x2, 0x2, 0x7a, 0x2d5, 0x3, 0x2, 0x2, 0x2, + 0x7c, 0x2dd, 0x3, 0x2, 0x2, 0x2, 0x7e, 0x2e0, 0x3, + 0x2, 0x2, 0x2, 0x80, 0x2e2, 0x3, 0x2, 0x2, 0x2, + 0x82, 0x2ec, 0x3, 0x2, 0x2, 0x2, 0x84, 0x2ee, 0x3, + 0x2, 0x2, 0x2, 0x86, 0x2f0, 0x3, 0x2, 0x2, 0x2, + 0x88, 0x2f3, 0x3, 0x2, 0x2, 0x2, 0x8a, 0x2f8, 0x3, + 0x2, 0x2, 0x2, 0x8c, 0x2fa, 0x3, 0x2, 0x2, 0x2, + 0x8e, 0x302, 0x3, 0x2, 0x2, 0x2, 0x90, 0x304, 0x3, + 0x2, 0x2, 0x2, 0x92, 0x306, 0x3, 0x2, 0x2, 0x2, + 0x94, 0x30e, 0x3, 0x2, 0x2, 0x2, 0x96, 0x316, 0x3, + 0x2, 0x2, 0x2, 0x98, 0x31d, 0x3, 0x2, 0x2, 0x2, + 0x9a, 0x31f, 0x3, 0x2, 0x2, 0x2, 0x9c, 0x329, 0x3, + 0x2, 0x2, 0x2, 0x9e, 0x338, 0x3, 0x2, 0x2, 0x2, + 0xa0, 0x341, 0x3, 0x2, 0x2, 0x2, 0xa2, 0x343, 0x3, + 0x2, 0x2, 0x2, 0xa4, 0x347, 0x3, 0x2, 0x2, 0x2, + 0xa6, 0x349, 0x3, 0x2, 0x2, 0x2, 0xa8, 0x34f, 0x3, + 0x2, 0x2, 0x2, 0xaa, 0x351, 0x3, 0x2, 0x2, 0x2, + 0xac, 0x355, 0x3, 0x2, 0x2, 0x2, 0xae, 0x35d, 0x3, + 0x2, 0x2, 0x2, 0xb0, 0x367, 0x3, 0x2, 0x2, 0x2, + 0xb2, 0x36b, 0x3, 0x2, 0x2, 0x2, 0xb4, 0x36f, 0x3, + 0x2, 0x2, 0x2, 0xb6, 0x373, 0x3, 0x2, 0x2, 0x2, + 0xb8, 0x375, 0x3, 0x2, 0x2, 0x2, 0xba, 0x37d, 0x3, + 0x2, 0x2, 0x2, 0xbc, 0x37f, 0x3, 0x2, 0x2, 0x2, + 0xbe, 0x381, 0x3, 0x2, 0x2, 0x2, 0xc0, 0x389, 0x3, + 0x2, 0x2, 0x2, 0xc2, 0x391, 0x3, 0x2, 0x2, 0x2, + 0xc4, 0x393, 0x3, 0x2, 0x2, 0x2, 0xc6, 0x3a7, 0x3, + 0x2, 0x2, 0x2, 0xc8, 0x3a9, 0x3, 0x2, 0x2, 0x2, + 0xca, 0x3b6, 0x3, 0x2, 0x2, 0x2, 0xcc, 0x3c1, 0x3, + 0x2, 0x2, 0x2, 0xce, 0x3d2, 0x3, 0x2, 0x2, 0x2, + 0xd0, 0x3db, 0x3, 0x2, 0x2, 0x2, 0xd2, 0x3dd, 0x3, + 0x2, 0x2, 0x2, 0xd4, 0x4e7, 0x3, 0x2, 0x2, 0x2, + 0xd6, 0x4e9, 0x3, 0x2, 0x2, 0x2, 0xd8, 0x4f4, 0x3, + 0x2, 0x2, 0x2, 0xda, 0x4ff, 0x3, 0x2, 0x2, 0x2, + 0xdc, 0x50c, 0x3, 0x2, 0x2, 0x2, 0xde, 0x50f, 0x3, + 0x2, 0x2, 0x2, 0xe0, 0x553, 0x3, 0x2, 0x2, 0x2, + 0xe2, 0x555, 0x3, 0x2, 0x2, 0x2, 0xe4, 0x559, 0x3, + 0x2, 0x2, 0x2, 0xe6, 0x562, 0x3, 0x2, 0x2, 0x2, + 0xe8, 0x564, 0x3, 0x2, 0x2, 0x2, 0xea, 0x566, 0x3, + 0x2, 0x2, 0x2, 0xec, 0x568, 0x3, 0x2, 0x2, 0x2, + 0xee, 0x56a, 0x3, 0x2, 0x2, 0x2, 0xf0, 0x56c, 0x3, + 0x2, 0x2, 0x2, 0xf2, 0x56f, 0x3, 0x2, 0x2, 0x2, + 0xf4, 0x577, 0x3, 0x2, 0x2, 0x2, 0xf6, 0x579, 0x3, + 0x2, 0x2, 0x2, 0xf8, 0x57b, 0x3, 0x2, 0x2, 0x2, + 0xfa, 0x57d, 0x3, 0x2, 0x2, 0x2, 0xfc, 0x57f, 0x3, + 0x2, 0x2, 0x2, 0xfe, 0x103, 0x5, 0x4, 0x3, 0x2, + 0xff, 0x104, 0x5, 0xa, 0x6, 0x2, 0x100, 0x104, 0x5, + 0x16, 0xc, 0x2, 0x101, 0x104, 0x5, 0x18, 0xd, 0x2, + 0x102, 0x104, 0x5, 0x1a, 0xe, 0x2, 0x103, 0xff, 0x3, + 0x2, 0x2, 0x2, 0x103, 0x100, 0x3, 0x2, 0x2, 0x2, + 0x103, 0x101, 0x3, 0x2, 0x2, 0x2, 0x103, 0x102, 0x3, + 0x2, 0x2, 0x2, 0x104, 0x105, 0x3, 0x2, 0x2, 0x2, + 0x105, 0x106, 0x5, 0x3c, 0x1f, 0x2, 0x106, 0x107, 0x7, + 0x2, 0x2, 0x3, 0x107, 0x3, 0x3, 0x2, 0x2, 0x2, + 0x108, 0x10b, 0x5, 0x6, 0x4, 0x2, 0x109, 0x10b, 0x5, + 0x8, 0x5, 0x2, 0x10a, 0x108, 0x3, 0x2, 0x2, 0x2, + 0x10a, 0x109, 0x3, 0x2, 0x2, 0x2, 0x10b, 0x10e, 0x3, + 0x2, 0x2, 0x2, 0x10c, 0x10a, 0x3, 0x2, 0x2, 0x2, + 0x10c, 0x10d, 0x3, 0x2, 0x2, 0x2, 0x10d, 0x5, 0x3, + 0x2, 0x2, 0x2, 0x10e, 0x10c, 0x3, 0x2, 0x2, 0x2, + 0x10f, 0x110, 0x7, 0x21, 0x2, 0x2, 0x110, 0x111, 0x5, + 0xf8, 0x7d, 0x2, 0x111, 0x7, 0x3, 0x2, 0x2, 0x2, + 0x112, 0x113, 0x7, 0x22, 0x2, 0x2, 0x113, 0x114, 0x7, + 0x8e, 0x2, 0x2, 0x114, 0x115, 0x5, 0xf8, 0x7d, 0x2, + 0x115, 0x9, 0x3, 0x2, 0x2, 0x2, 0x116, 0x11a, 0x5, + 0xe, 0x8, 0x2, 0x117, 0x119, 0x5, 0x1c, 0xf, 0x2, + 0x118, 0x117, 0x3, 0x2, 0x2, 0x2, 0x119, 0x11c, 0x3, + 0x2, 0x2, 0x2, 0x11a, 0x118, 0x3, 0x2, 0x2, 0x2, + 0x11a, 0x11b, 0x3, 0x2, 0x2, 0x2, 0x11b, 0x11d, 0x3, + 0x2, 0x2, 0x2, 0x11c, 0x11a, 0x3, 0x2, 0x2, 0x2, + 0x11d, 0x11e, 0x5, 0x24, 0x13, 0x2, 0x11e, 0x11f, 0x5, + 0x26, 0x14, 0x2, 0x11f, 0xb, 0x3, 0x2, 0x2, 0x2, + 0x120, 0x121, 0x5, 0xe, 0x8, 0x2, 0x121, 0x122, 0x5, + 0x24, 0x13, 0x2, 0x122, 0x123, 0x5, 0x26, 0x14, 0x2, + 0x123, 0x124, 0x5, 0x3c, 0x1f, 0x2, 0x124, 0xd, 0x3, + 0x2, 0x2, 0x2, 0x125, 0x127, 0x7, 0x23, 0x2, 0x2, + 0x126, 0x128, 0x9, 0x2, 0x2, 0x2, 0x127, 0x126, 0x3, + 0x2, 0x2, 0x2, 0x127, 0x128, 0x3, 0x2, 0x2, 0x2, + 0x128, 0x12f, 0x3, 0x2, 0x2, 0x2, 0x129, 0x12b, 0x5, + 0x10, 0x9, 0x2, 0x12a, 0x129, 0x3, 0x2, 0x2, 0x2, + 0x12b, 0x12c, 0x3, 0x2, 0x2, 0x2, 0x12c, 0x12a, 0x3, + 0x2, 0x2, 0x2, 0x12c, 0x12d, 0x3, 0x2, 0x2, 0x2, + 0x12d, 0x130, 0x3, 0x2, 0x2, 0x2, 0x12e, 0x130, 0x7, + 0x3, 0x2, 0x2, 0x12f, 0x12a, 0x3, 0x2, 0x2, 0x2, + 0x12f, 0x12e, 0x3, 0x2, 0x2, 0x2, 0x130, 0xf, 0x3, + 0x2, 0x2, 0x2, 0x131, 0x134, 0x5, 0xb8, 0x5d, 0x2, + 0x132, 0x134, 0x5, 0x12, 0xa, 0x2, 0x133, 0x131, 0x3, + 0x2, 0x2, 0x2, 0x133, 0x132, 0x3, 0x2, 0x2, 0x2, + 0x134, 0x11, 0x3, 0x2, 0x2, 0x2, 0x135, 0x136, 0x7, + 0x4, 0x2, 0x2, 0x136, 0x137, 0x5, 0x14, 0xb, 0x2, + 0x137, 0x138, 0x7, 0x5, 0x2, 0x2, 0x138, 0x13, 0x3, + 0x2, 0x2, 0x2, 0x139, 0x13a, 0x5, 0xbc, 0x5f, 0x2, + 0x13a, 0x13b, 0x7, 0x26, 0x2, 0x2, 0x13b, 0x13c, 0x5, + 0xb8, 0x5d, 0x2, 0x13c, 0x15, 0x3, 0x2, 0x2, 0x2, + 0x13d, 0x155, 0x7, 0x27, 0x2, 0x2, 0x13e, 0x142, 0x5, + 0x6c, 0x37, 0x2, 0x13f, 0x141, 0x5, 0x1c, 0xf, 0x2, + 0x140, 0x13f, 0x3, 0x2, 0x2, 0x2, 0x141, 0x144, 0x3, + 0x2, 0x2, 0x2, 0x142, 0x140, 0x3, 0x2, 0x2, 0x2, + 0x142, 0x143, 0x3, 0x2, 0x2, 0x2, 0x143, 0x145, 0x3, + 0x2, 0x2, 0x2, 0x144, 0x142, 0x3, 0x2, 0x2, 0x2, + 0x145, 0x146, 0x5, 0x24, 0x13, 0x2, 0x146, 0x147, 0x5, + 0x26, 0x14, 0x2, 0x147, 0x156, 0x3, 0x2, 0x2, 0x2, + 0x148, 0x14a, 0x5, 0x1c, 0xf, 0x2, 0x149, 0x148, 0x3, + 0x2, 0x2, 0x2, 0x14a, 0x14d, 0x3, 0x2, 0x2, 0x2, + 0x14b, 0x149, 0x3, 0x2, 0x2, 0x2, 0x14b, 0x14c, 0x3, + 0x2, 0x2, 0x2, 0x14c, 0x14e, 0x3, 0x2, 0x2, 0x2, + 0x14d, 0x14b, 0x3, 0x2, 0x2, 0x2, 0x14e, 0x14f, 0x7, + 0x28, 0x2, 0x2, 0x14f, 0x151, 0x7, 0x6, 0x2, 0x2, + 0x150, 0x152, 0x5, 0x3e, 0x20, 0x2, 0x151, 0x150, 0x3, + 0x2, 0x2, 0x2, 0x151, 0x152, 0x3, 0x2, 0x2, 0x2, + 0x152, 0x153, 0x3, 0x2, 0x2, 0x2, 0x153, 0x154, 0x7, + 0x7, 0x2, 0x2, 0x154, 0x156, 0x5, 0x26, 0x14, 0x2, + 0x155, 0x13e, 0x3, 0x2, 0x2, 0x2, 0x155, 0x14b, 0x3, + 0x2, 0x2, 0x2, 0x156, 0x17, 0x3, 0x2, 0x2, 0x2, + 0x157, 0x15e, 0x7, 0x29, 0x2, 0x2, 0x158, 0x15a, 0x5, + 0xb6, 0x5c, 0x2, 0x159, 0x158, 0x3, 0x2, 0x2, 0x2, + 0x15a, 0x15b, 0x3, 0x2, 0x2, 0x2, 0x15b, 0x159, 0x3, + 0x2, 0x2, 0x2, 0x15b, 0x15c, 0x3, 0x2, 0x2, 0x2, + 0x15c, 0x15f, 0x3, 0x2, 0x2, 0x2, 0x15d, 0x15f, 0x7, + 0x3, 0x2, 0x2, 0x15e, 0x159, 0x3, 0x2, 0x2, 0x2, + 0x15e, 0x15d, 0x3, 0x2, 0x2, 0x2, 0x15f, 0x163, 0x3, + 0x2, 0x2, 0x2, 0x160, 0x162, 0x5, 0x1c, 0xf, 0x2, + 0x161, 0x160, 0x3, 0x2, 0x2, 0x2, 0x162, 0x165, 0x3, + 0x2, 0x2, 0x2, 0x163, 0x161, 0x3, 0x2, 0x2, 0x2, + 0x163, 0x164, 0x3, 0x2, 0x2, 0x2, 0x164, 0x167, 0x3, + 0x2, 0x2, 0x2, 0x165, 0x163, 0x3, 0x2, 0x2, 0x2, + 0x166, 0x168, 0x5, 0x24, 0x13, 0x2, 0x167, 0x166, 0x3, + 0x2, 0x2, 0x2, 0x167, 0x168, 0x3, 0x2, 0x2, 0x2, + 0x168, 0x169, 0x3, 0x2, 0x2, 0x2, 0x169, 0x16a, 0x5, + 0x26, 0x14, 0x2, 0x16a, 0x19, 0x3, 0x2, 0x2, 0x2, + 0x16b, 0x16f, 0x7, 0x2a, 0x2, 0x2, 0x16c, 0x16e, 0x5, + 0x1c, 0xf, 0x2, 0x16d, 0x16c, 0x3, 0x2, 0x2, 0x2, + 0x16e, 0x171, 0x3, 0x2, 0x2, 0x2, 0x16f, 0x16d, 0x3, + 0x2, 0x2, 0x2, 0x16f, 0x170, 0x3, 0x2, 0x2, 0x2, + 0x170, 0x172, 0x3, 0x2, 0x2, 0x2, 0x171, 0x16f, 0x3, + 0x2, 0x2, 0x2, 0x172, 0x173, 0x5, 0x24, 0x13, 0x2, + 0x173, 0x174, 0x5, 0x26, 0x14, 0x2, 0x174, 0x1b, 0x3, + 0x2, 0x2, 0x2, 0x175, 0x178, 0x7, 0x2b, 0x2, 0x2, + 0x176, 0x179, 0x5, 0x1e, 0x10, 0x2, 0x177, 0x179, 0x5, + 0x20, 0x11, 0x2, 0x178, 0x176, 0x3, 0x2, 0x2, 0x2, + 0x178, 0x177, 0x3, 0x2, 0x2, 0x2, 0x179, 0x1d, 0x3, + 0x2, 0x2, 0x2, 0x17a, 0x17b, 0x5, 0x22, 0x12, 0x2, + 0x17b, 0x1f, 0x3, 0x2, 0x2, 0x2, 0x17c, 0x17d, 0x7, + 0x2c, 0x2, 0x2, 0x17d, 0x17e, 0x5, 0x22, 0x12, 0x2, + 0x17e, 0x21, 0x3, 0x2, 0x2, 0x2, 0x17f, 0x180, 0x5, + 0xf2, 0x7a, 0x2, 0x180, 0x23, 0x3, 0x2, 0x2, 0x2, + 0x181, 0x183, 0x7, 0x28, 0x2, 0x2, 0x182, 0x181, 0x3, + 0x2, 0x2, 0x2, 0x182, 0x183, 0x3, 0x2, 0x2, 0x2, + 0x183, 0x184, 0x3, 0x2, 0x2, 0x2, 0x184, 0x185, 0x5, + 0x40, 0x21, 0x2, 0x185, 0x25, 0x3, 0x2, 0x2, 0x2, + 0x186, 0x188, 0x5, 0x28, 0x15, 0x2, 0x187, 0x186, 0x3, + 0x2, 0x2, 0x2, 0x187, 0x188, 0x3, 0x2, 0x2, 0x2, + 0x188, 0x18a, 0x3, 0x2, 0x2, 0x2, 0x189, 0x18b, 0x5, + 0x2c, 0x17, 0x2, 0x18a, 0x189, 0x3, 0x2, 0x2, 0x2, + 0x18a, 0x18b, 0x3, 0x2, 0x2, 0x2, 0x18b, 0x18d, 0x3, + 0x2, 0x2, 0x2, 0x18c, 0x18e, 0x5, 0x30, 0x19, 0x2, + 0x18d, 0x18c, 0x3, 0x2, 0x2, 0x2, 0x18d, 0x18e, 0x3, + 0x2, 0x2, 0x2, 0x18e, 0x190, 0x3, 0x2, 0x2, 0x2, + 0x18f, 0x191, 0x5, 0x34, 0x1b, 0x2, 0x190, 0x18f, 0x3, + 0x2, 0x2, 0x2, 0x190, 0x191, 0x3, 0x2, 0x2, 0x2, + 0x191, 0x27, 0x3, 0x2, 0x2, 0x2, 0x192, 0x194, 0x7, + 0x2d, 0x2, 0x2, 0x193, 0x195, 0x5, 0x2a, 0x16, 0x2, + 0x194, 0x193, 0x3, 0x2, 0x2, 0x2, 0x195, 0x196, 0x3, + 0x2, 0x2, 0x2, 0x196, 0x194, 0x3, 0x2, 0x2, 0x2, + 0x196, 0x197, 0x3, 0x2, 0x2, 0x2, 0x197, 0x29, 0x3, + 0x2, 0x2, 0x2, 0x198, 0x1a4, 0x5, 0xd4, 0x6b, 0x2, + 0x199, 0x1a4, 0x5, 0x66, 0x34, 0x2, 0x19a, 0x19b, 0x7, + 0x4, 0x2, 0x2, 0x19b, 0x19e, 0x5, 0xbc, 0x5f, 0x2, + 0x19c, 0x19d, 0x7, 0x26, 0x2, 0x2, 0x19d, 0x19f, 0x5, + 0xb8, 0x5d, 0x2, 0x19e, 0x19c, 0x3, 0x2, 0x2, 0x2, + 0x19e, 0x19f, 0x3, 0x2, 0x2, 0x2, 0x19f, 0x1a0, 0x3, + 0x2, 0x2, 0x2, 0x1a0, 0x1a1, 0x7, 0x5, 0x2, 0x2, + 0x1a1, 0x1a4, 0x3, 0x2, 0x2, 0x2, 0x1a2, 0x1a4, 0x5, + 0xb8, 0x5d, 0x2, 0x1a3, 0x198, 0x3, 0x2, 0x2, 0x2, + 0x1a3, 0x199, 0x3, 0x2, 0x2, 0x2, 0x1a3, 0x19a, 0x3, + 0x2, 0x2, 0x2, 0x1a3, 0x1a2, 0x3, 0x2, 0x2, 0x2, + 0x1a4, 0x2b, 0x3, 0x2, 0x2, 0x2, 0x1a5, 0x1a7, 0x7, + 0x2f, 0x2, 0x2, 0x1a6, 0x1a8, 0x5, 0x2e, 0x18, 0x2, + 0x1a7, 0x1a6, 0x3, 0x2, 0x2, 0x2, 0x1a8, 0x1a9, 0x3, + 0x2, 0x2, 0x2, 0x1a9, 0x1a7, 0x3, 0x2, 0x2, 0x2, + 0x1a9, 0x1aa, 0x3, 0x2, 0x2, 0x2, 0x1aa, 0x2d, 0x3, + 0x2, 0x2, 0x2, 0x1ab, 0x1ac, 0x5, 0x64, 0x33, 0x2, + 0x1ac, 0x2f, 0x3, 0x2, 0x2, 0x2, 0x1ad, 0x1af, 0x7, + 0x30, 0x2, 0x2, 0x1ae, 0x1b0, 0x5, 0x32, 0x1a, 0x2, + 0x1af, 0x1ae, 0x3, 0x2, 0x2, 0x2, 0x1b0, 0x1b1, 0x3, + 0x2, 0x2, 0x2, 0x1b1, 0x1af, 0x3, 0x2, 0x2, 0x2, + 0x1b1, 0x1b2, 0x3, 0x2, 0x2, 0x2, 0x1b2, 0x31, 0x3, + 0x2, 0x2, 0x2, 0x1b3, 0x1b4, 0x9, 0x3, 0x2, 0x2, + 0x1b4, 0x1ba, 0x5, 0xd2, 0x6a, 0x2, 0x1b5, 0x1b8, 0x5, + 0x64, 0x33, 0x2, 0x1b6, 0x1b8, 0x5, 0xb8, 0x5d, 0x2, + 0x1b7, 0x1b5, 0x3, 0x2, 0x2, 0x2, 0x1b7, 0x1b6, 0x3, + 0x2, 0x2, 0x2, 0x1b8, 0x1ba, 0x3, 0x2, 0x2, 0x2, + 0x1b9, 0x1b3, 0x3, 0x2, 0x2, 0x2, 0x1b9, 0x1b7, 0x3, + 0x2, 0x2, 0x2, 0x1ba, 0x33, 0x3, 0x2, 0x2, 0x2, + 0x1bb, 0x1bd, 0x5, 0x36, 0x1c, 0x2, 0x1bc, 0x1be, 0x5, + 0x38, 0x1d, 0x2, 0x1bd, 0x1bc, 0x3, 0x2, 0x2, 0x2, + 0x1bd, 0x1be, 0x3, 0x2, 0x2, 0x2, 0x1be, 0x1c0, 0x3, + 0x2, 0x2, 0x2, 0x1bf, 0x1c1, 0x5, 0x3a, 0x1e, 0x2, + 0x1c0, 0x1bf, 0x3, 0x2, 0x2, 0x2, 0x1c0, 0x1c1, 0x3, + 0x2, 0x2, 0x2, 0x1c1, 0x1e6, 0x3, 0x2, 0x2, 0x2, + 0x1c2, 0x1c4, 0x5, 0x36, 0x1c, 0x2, 0x1c3, 0x1c5, 0x5, + 0x3a, 0x1e, 0x2, 0x1c4, 0x1c3, 0x3, 0x2, 0x2, 0x2, + 0x1c4, 0x1c5, 0x3, 0x2, 0x2, 0x2, 0x1c5, 0x1c7, 0x3, + 0x2, 0x2, 0x2, 0x1c6, 0x1c8, 0x5, 0x38, 0x1d, 0x2, + 0x1c7, 0x1c6, 0x3, 0x2, 0x2, 0x2, 0x1c7, 0x1c8, 0x3, + 0x2, 0x2, 0x2, 0x1c8, 0x1e6, 0x3, 0x2, 0x2, 0x2, + 0x1c9, 0x1cb, 0x5, 0x38, 0x1d, 0x2, 0x1ca, 0x1cc, 0x5, + 0x36, 0x1c, 0x2, 0x1cb, 0x1ca, 0x3, 0x2, 0x2, 0x2, + 0x1cb, 0x1cc, 0x3, 0x2, 0x2, 0x2, 0x1cc, 0x1ce, 0x3, + 0x2, 0x2, 0x2, 0x1cd, 0x1cf, 0x5, 0x3a, 0x1e, 0x2, + 0x1ce, 0x1cd, 0x3, 0x2, 0x2, 0x2, 0x1ce, 0x1cf, 0x3, + 0x2, 0x2, 0x2, 0x1cf, 0x1e6, 0x3, 0x2, 0x2, 0x2, + 0x1d0, 0x1d2, 0x5, 0x38, 0x1d, 0x2, 0x1d1, 0x1d3, 0x5, + 0x3a, 0x1e, 0x2, 0x1d2, 0x1d1, 0x3, 0x2, 0x2, 0x2, + 0x1d2, 0x1d3, 0x3, 0x2, 0x2, 0x2, 0x1d3, 0x1d5, 0x3, + 0x2, 0x2, 0x2, 0x1d4, 0x1d6, 0x5, 0x36, 0x1c, 0x2, + 0x1d5, 0x1d4, 0x3, 0x2, 0x2, 0x2, 0x1d5, 0x1d6, 0x3, + 0x2, 0x2, 0x2, 0x1d6, 0x1e6, 0x3, 0x2, 0x2, 0x2, + 0x1d7, 0x1d9, 0x5, 0x3a, 0x1e, 0x2, 0x1d8, 0x1da, 0x5, + 0x38, 0x1d, 0x2, 0x1d9, 0x1d8, 0x3, 0x2, 0x2, 0x2, + 0x1d9, 0x1da, 0x3, 0x2, 0x2, 0x2, 0x1da, 0x1dc, 0x3, + 0x2, 0x2, 0x2, 0x1db, 0x1dd, 0x5, 0x36, 0x1c, 0x2, + 0x1dc, 0x1db, 0x3, 0x2, 0x2, 0x2, 0x1dc, 0x1dd, 0x3, + 0x2, 0x2, 0x2, 0x1dd, 0x1e6, 0x3, 0x2, 0x2, 0x2, + 0x1de, 0x1e0, 0x5, 0x3a, 0x1e, 0x2, 0x1df, 0x1e1, 0x5, + 0x36, 0x1c, 0x2, 0x1e0, 0x1df, 0x3, 0x2, 0x2, 0x2, + 0x1e0, 0x1e1, 0x3, 0x2, 0x2, 0x2, 0x1e1, 0x1e3, 0x3, + 0x2, 0x2, 0x2, 0x1e2, 0x1e4, 0x5, 0x38, 0x1d, 0x2, + 0x1e3, 0x1e2, 0x3, 0x2, 0x2, 0x2, 0x1e3, 0x1e4, 0x3, + 0x2, 0x2, 0x2, 0x1e4, 0x1e6, 0x3, 0x2, 0x2, 0x2, + 0x1e5, 0x1bb, 0x3, 0x2, 0x2, 0x2, 0x1e5, 0x1c2, 0x3, + 0x2, 0x2, 0x2, 0x1e5, 0x1c9, 0x3, 0x2, 0x2, 0x2, + 0x1e5, 0x1d0, 0x3, 0x2, 0x2, 0x2, 0x1e5, 0x1d7, 0x3, + 0x2, 0x2, 0x2, 0x1e5, 0x1de, 0x3, 0x2, 0x2, 0x2, + 0x1e6, 0x35, 0x3, 0x2, 0x2, 0x2, 0x1e7, 0x1e8, 0x7, + 0x33, 0x2, 0x2, 0x1e8, 0x1e9, 0x5, 0xa2, 0x52, 0x2, + 0x1e9, 0x37, 0x3, 0x2, 0x2, 0x2, 0x1ea, 0x1eb, 0x7, + 0x34, 0x2, 0x2, 0x1eb, 0x1ec, 0x5, 0xa2, 0x52, 0x2, + 0x1ec, 0x39, 0x3, 0x2, 0x2, 0x2, 0x1ed, 0x1ee, 0x7, + 0x35, 0x2, 0x2, 0x1ee, 0x1ef, 0x5, 0xa2, 0x52, 0x2, + 0x1ef, 0x3b, 0x3, 0x2, 0x2, 0x2, 0x1f0, 0x1f1, 0x7, + 0x36, 0x2, 0x2, 0x1f1, 0x1f3, 0x5, 0x54, 0x2b, 0x2, + 0x1f2, 0x1f0, 0x3, 0x2, 0x2, 0x2, 0x1f2, 0x1f3, 0x3, + 0x2, 0x2, 0x2, 0x1f3, 0x3d, 0x3, 0x2, 0x2, 0x2, + 0x1f4, 0x1f9, 0x5, 0x70, 0x39, 0x2, 0x1f5, 0x1f7, 0x7, + 0x8, 0x2, 0x2, 0x1f6, 0x1f8, 0x5, 0x3e, 0x20, 0x2, + 0x1f7, 0x1f6, 0x3, 0x2, 0x2, 0x2, 0x1f7, 0x1f8, 0x3, + 0x2, 0x2, 0x2, 0x1f8, 0x1fa, 0x3, 0x2, 0x2, 0x2, + 0x1f9, 0x1f5, 0x3, 0x2, 0x2, 0x2, 0x1f9, 0x1fa, 0x3, + 0x2, 0x2, 0x2, 0x1fa, 0x3f, 0x3, 0x2, 0x2, 0x2, + 0x1fb, 0x1fe, 0x7, 0x6, 0x2, 0x2, 0x1fc, 0x1ff, 0x5, + 0xc, 0x7, 0x2, 0x1fd, 0x1ff, 0x5, 0x42, 0x22, 0x2, + 0x1fe, 0x1fc, 0x3, 0x2, 0x2, 0x2, 0x1fe, 0x1fd, 0x3, + 0x2, 0x2, 0x2, 0x1ff, 0x200, 0x3, 0x2, 0x2, 0x2, + 0x200, 0x201, 0x7, 0x7, 0x2, 0x2, 0x201, 0x41, 0x3, + 0x2, 0x2, 0x2, 0x202, 0x204, 0x5, 0x46, 0x24, 0x2, + 0x203, 0x202, 0x3, 0x2, 0x2, 0x2, 0x203, 0x204, 0x3, + 0x2, 0x2, 0x2, 0x204, 0x208, 0x3, 0x2, 0x2, 0x2, + 0x205, 0x207, 0x5, 0x44, 0x23, 0x2, 0x206, 0x205, 0x3, + 0x2, 0x2, 0x2, 0x207, 0x20a, 0x3, 0x2, 0x2, 0x2, + 0x208, 0x206, 0x3, 0x2, 0x2, 0x2, 0x208, 0x209, 0x3, + 0x2, 0x2, 0x2, 0x209, 0x43, 0x3, 0x2, 0x2, 0x2, + 0x20a, 0x208, 0x3, 0x2, 0x2, 0x2, 0x20b, 0x20d, 0x5, + 0x48, 0x25, 0x2, 0x20c, 0x20e, 0x7, 0x8, 0x2, 0x2, + 0x20d, 0x20c, 0x3, 0x2, 0x2, 0x2, 0x20d, 0x20e, 0x3, + 0x2, 0x2, 0x2, 0x20e, 0x210, 0x3, 0x2, 0x2, 0x2, + 0x20f, 0x211, 0x5, 0x46, 0x24, 0x2, 0x210, 0x20f, 0x3, + 0x2, 0x2, 0x2, 0x210, 0x211, 0x3, 0x2, 0x2, 0x2, + 0x211, 0x45, 0x3, 0x2, 0x2, 0x2, 0x212, 0x217, 0x5, + 0x7c, 0x3f, 0x2, 0x213, 0x215, 0x7, 0x8, 0x2, 0x2, + 0x214, 0x216, 0x5, 0x46, 0x24, 0x2, 0x215, 0x214, 0x3, + 0x2, 0x2, 0x2, 0x215, 0x216, 0x3, 0x2, 0x2, 0x2, + 0x216, 0x218, 0x3, 0x2, 0x2, 0x2, 0x217, 0x213, 0x3, + 0x2, 0x2, 0x2, 0x217, 0x218, 0x3, 0x2, 0x2, 0x2, + 0x218, 0x47, 0x3, 0x2, 0x2, 0x2, 0x219, 0x222, 0x5, + 0x60, 0x31, 0x2, 0x21a, 0x222, 0x5, 0x4a, 0x26, 0x2, + 0x21b, 0x222, 0x5, 0x5e, 0x30, 0x2, 0x21c, 0x222, 0x5, + 0x4c, 0x27, 0x2, 0x21d, 0x222, 0x5, 0x4e, 0x28, 0x2, + 0x21e, 0x222, 0x5, 0x62, 0x32, 0x2, 0x21f, 0x222, 0x5, + 0x50, 0x29, 0x2, 0x220, 0x222, 0x5, 0x52, 0x2a, 0x2, + 0x221, 0x219, 0x3, 0x2, 0x2, 0x2, 0x221, 0x21a, 0x3, + 0x2, 0x2, 0x2, 0x221, 0x21b, 0x3, 0x2, 0x2, 0x2, + 0x221, 0x21c, 0x3, 0x2, 0x2, 0x2, 0x221, 0x21d, 0x3, + 0x2, 0x2, 0x2, 0x221, 0x21e, 0x3, 0x2, 0x2, 0x2, + 0x221, 0x21f, 0x3, 0x2, 0x2, 0x2, 0x221, 0x220, 0x3, + 0x2, 0x2, 0x2, 0x222, 0x49, 0x3, 0x2, 0x2, 0x2, + 0x223, 0x224, 0x7, 0x47, 0x2, 0x2, 0x224, 0x225, 0x5, + 0x40, 0x21, 0x2, 0x225, 0x4b, 0x3, 0x2, 0x2, 0x2, + 0x226, 0x227, 0x7, 0x45, 0x2, 0x2, 0x227, 0x228, 0x5, + 0xb6, 0x5c, 0x2, 0x228, 0x229, 0x5, 0x40, 0x21, 0x2, + 0x229, 0x4d, 0x3, 0x2, 0x2, 0x2, 0x22a, 0x22c, 0x7, + 0x48, 0x2, 0x2, 0x22b, 0x22d, 0x7, 0x38, 0x2, 0x2, + 0x22c, 0x22b, 0x3, 0x2, 0x2, 0x2, 0x22c, 0x22d, 0x3, + 0x2, 0x2, 0x2, 0x22d, 0x22e, 0x3, 0x2, 0x2, 0x2, + 0x22e, 0x22f, 0x5, 0xb6, 0x5c, 0x2, 0x22f, 0x230, 0x5, + 0x40, 0x21, 0x2, 0x230, 0x4f, 0x3, 0x2, 0x2, 0x2, + 0x231, 0x232, 0x7, 0x49, 0x2, 0x2, 0x232, 0x233, 0x7, + 0x4, 0x2, 0x2, 0x233, 0x234, 0x5, 0xbc, 0x5f, 0x2, + 0x234, 0x235, 0x7, 0x26, 0x2, 0x2, 0x235, 0x236, 0x5, + 0xb8, 0x5d, 0x2, 0x236, 0x237, 0x7, 0x5, 0x2, 0x2, + 0x237, 0x51, 0x3, 0x2, 0x2, 0x2, 0x238, 0x239, 0x7, + 0x36, 0x2, 0x2, 0x239, 0x23a, 0x5, 0x54, 0x2b, 0x2, + 0x23a, 0x53, 0x3, 0x2, 0x2, 0x2, 0x23b, 0x23e, 0x5, + 0x56, 0x2c, 0x2, 0x23c, 0x23e, 0x5, 0x58, 0x2d, 0x2, + 0x23d, 0x23b, 0x3, 0x2, 0x2, 0x2, 0x23d, 0x23c, 0x3, + 0x2, 0x2, 0x2, 0x23e, 0x55, 0x3, 0x2, 0x2, 0x2, + 0x23f, 0x240, 0x5, 0xb8, 0x5d, 0x2, 0x240, 0x244, 0x7, + 0x6, 0x2, 0x2, 0x241, 0x243, 0x5, 0x5c, 0x2f, 0x2, + 0x242, 0x241, 0x3, 0x2, 0x2, 0x2, 0x243, 0x246, 0x3, + 0x2, 0x2, 0x2, 0x244, 0x242, 0x3, 0x2, 0x2, 0x2, + 0x244, 0x245, 0x3, 0x2, 0x2, 0x2, 0x245, 0x247, 0x3, + 0x2, 0x2, 0x2, 0x246, 0x244, 0x3, 0x2, 0x2, 0x2, + 0x247, 0x248, 0x7, 0x7, 0x2, 0x2, 0x248, 0x57, 0x3, + 0x2, 0x2, 0x2, 0x249, 0x253, 0x7, 0xa4, 0x2, 0x2, + 0x24a, 0x24e, 0x7, 0x4, 0x2, 0x2, 0x24b, 0x24d, 0x5, + 0xb8, 0x5d, 0x2, 0x24c, 0x24b, 0x3, 0x2, 0x2, 0x2, + 0x24d, 0x250, 0x3, 0x2, 0x2, 0x2, 0x24e, 0x24c, 0x3, + 0x2, 0x2, 0x2, 0x24e, 0x24f, 0x3, 0x2, 0x2, 0x2, + 0x24f, 0x251, 0x3, 0x2, 0x2, 0x2, 0x250, 0x24e, 0x3, + 0x2, 0x2, 0x2, 0x251, 0x253, 0x7, 0x5, 0x2, 0x2, + 0x252, 0x249, 0x3, 0x2, 0x2, 0x2, 0x252, 0x24a, 0x3, + 0x2, 0x2, 0x2, 0x253, 0x254, 0x3, 0x2, 0x2, 0x2, + 0x254, 0x258, 0x7, 0x6, 0x2, 0x2, 0x255, 0x257, 0x5, + 0x5a, 0x2e, 0x2, 0x256, 0x255, 0x3, 0x2, 0x2, 0x2, + 0x257, 0x25a, 0x3, 0x2, 0x2, 0x2, 0x258, 0x256, 0x3, + 0x2, 0x2, 0x2, 0x258, 0x259, 0x3, 0x2, 0x2, 0x2, + 0x259, 0x25b, 0x3, 0x2, 0x2, 0x2, 0x25a, 0x258, 0x3, + 0x2, 0x2, 0x2, 0x25b, 0x25c, 0x7, 0x7, 0x2, 0x2, + 0x25c, 0x59, 0x3, 0x2, 0x2, 0x2, 0x25d, 0x261, 0x7, + 0x4, 0x2, 0x2, 0x25e, 0x260, 0x5, 0x5c, 0x2f, 0x2, + 0x25f, 0x25e, 0x3, 0x2, 0x2, 0x2, 0x260, 0x263, 0x3, + 0x2, 0x2, 0x2, 0x261, 0x25f, 0x3, 0x2, 0x2, 0x2, + 0x261, 0x262, 0x3, 0x2, 0x2, 0x2, 0x262, 0x264, 0x3, + 0x2, 0x2, 0x2, 0x263, 0x261, 0x3, 0x2, 0x2, 0x2, + 0x264, 0x267, 0x7, 0x5, 0x2, 0x2, 0x265, 0x267, 0x7, + 0xa4, 0x2, 0x2, 0x266, 0x25d, 0x3, 0x2, 0x2, 0x2, + 0x266, 0x265, 0x3, 0x2, 0x2, 0x2, 0x267, 0x5b, 0x3, + 0x2, 0x2, 0x2, 0x268, 0x26e, 0x5, 0xf2, 0x7a, 0x2, + 0x269, 0x26e, 0x5, 0xe4, 0x73, 0x2, 0x26a, 0x26e, 0x5, + 0xe6, 0x74, 0x2, 0x26b, 0x26e, 0x5, 0xee, 0x78, 0x2, + 0x26c, 0x26e, 0x7, 0x4a, 0x2, 0x2, 0x26d, 0x268, 0x3, + 0x2, 0x2, 0x2, 0x26d, 0x269, 0x3, 0x2, 0x2, 0x2, + 0x26d, 0x26a, 0x3, 0x2, 0x2, 0x2, 0x26d, 0x26b, 0x3, + 0x2, 0x2, 0x2, 0x26d, 0x26c, 0x3, 0x2, 0x2, 0x2, + 0x26e, 0x5d, 0x3, 0x2, 0x2, 0x2, 0x26f, 0x270, 0x7, + 0x4b, 0x2, 0x2, 0x270, 0x271, 0x5, 0x40, 0x21, 0x2, + 0x271, 0x5f, 0x3, 0x2, 0x2, 0x2, 0x272, 0x277, 0x5, + 0x40, 0x21, 0x2, 0x273, 0x274, 0x7, 0x4c, 0x2, 0x2, + 0x274, 0x276, 0x5, 0x40, 0x21, 0x2, 0x275, 0x273, 0x3, + 0x2, 0x2, 0x2, 0x276, 0x279, 0x3, 0x2, 0x2, 0x2, + 0x277, 0x275, 0x3, 0x2, 0x2, 0x2, 0x277, 0x278, 0x3, + 0x2, 0x2, 0x2, 0x278, 0x61, 0x3, 0x2, 0x2, 0x2, + 0x279, 0x277, 0x3, 0x2, 0x2, 0x2, 0x27a, 0x27b, 0x7, + 0x4d, 0x2, 0x2, 0x27b, 0x27c, 0x5, 0x64, 0x33, 0x2, + 0x27c, 0x63, 0x3, 0x2, 0x2, 0x2, 0x27d, 0x281, 0x5, + 0xd2, 0x6a, 0x2, 0x27e, 0x281, 0x5, 0xd4, 0x6b, 0x2, + 0x27f, 0x281, 0x5, 0x66, 0x34, 0x2, 0x280, 0x27d, 0x3, + 0x2, 0x2, 0x2, 0x280, 0x27e, 0x3, 0x2, 0x2, 0x2, + 0x280, 0x27f, 0x3, 0x2, 0x2, 0x2, 0x281, 0x65, 0x3, + 0x2, 0x2, 0x2, 0x282, 0x283, 0x5, 0xf2, 0x7a, 0x2, + 0x283, 0x284, 0x5, 0x68, 0x35, 0x2, 0x284, 0x67, 0x3, + 0x2, 0x2, 0x2, 0x285, 0x295, 0x7, 0xa4, 0x2, 0x2, + 0x286, 0x288, 0x7, 0x4, 0x2, 0x2, 0x287, 0x289, 0x7, + 0x24, 0x2, 0x2, 0x288, 0x287, 0x3, 0x2, 0x2, 0x2, + 0x288, 0x289, 0x3, 0x2, 0x2, 0x2, 0x289, 0x28a, 0x3, + 0x2, 0x2, 0x2, 0x28a, 0x28f, 0x5, 0xbc, 0x5f, 0x2, + 0x28b, 0x28c, 0x7, 0x9, 0x2, 0x2, 0x28c, 0x28e, 0x5, + 0xbc, 0x5f, 0x2, 0x28d, 0x28b, 0x3, 0x2, 0x2, 0x2, + 0x28e, 0x291, 0x3, 0x2, 0x2, 0x2, 0x28f, 0x28d, 0x3, + 0x2, 0x2, 0x2, 0x28f, 0x290, 0x3, 0x2, 0x2, 0x2, + 0x290, 0x292, 0x3, 0x2, 0x2, 0x2, 0x291, 0x28f, 0x3, + 0x2, 0x2, 0x2, 0x292, 0x293, 0x7, 0x5, 0x2, 0x2, + 0x293, 0x295, 0x3, 0x2, 0x2, 0x2, 0x294, 0x285, 0x3, + 0x2, 0x2, 0x2, 0x294, 0x286, 0x3, 0x2, 0x2, 0x2, + 0x295, 0x69, 0x3, 0x2, 0x2, 0x2, 0x296, 0x2a3, 0x7, + 0xa4, 0x2, 0x2, 0x297, 0x298, 0x7, 0x4, 0x2, 0x2, + 0x298, 0x29d, 0x5, 0xbc, 0x5f, 0x2, 0x299, 0x29a, 0x7, + 0x9, 0x2, 0x2, 0x29a, 0x29c, 0x5, 0xbc, 0x5f, 0x2, + 0x29b, 0x299, 0x3, 0x2, 0x2, 0x2, 0x29c, 0x29f, 0x3, + 0x2, 0x2, 0x2, 0x29d, 0x29b, 0x3, 0x2, 0x2, 0x2, + 0x29d, 0x29e, 0x3, 0x2, 0x2, 0x2, 0x29e, 0x2a0, 0x3, + 0x2, 0x2, 0x2, 0x29f, 0x29d, 0x3, 0x2, 0x2, 0x2, + 0x2a0, 0x2a1, 0x7, 0x5, 0x2, 0x2, 0x2a1, 0x2a3, 0x3, + 0x2, 0x2, 0x2, 0x2a2, 0x296, 0x3, 0x2, 0x2, 0x2, + 0x2a2, 0x297, 0x3, 0x2, 0x2, 0x2, 0x2a3, 0x6b, 0x3, + 0x2, 0x2, 0x2, 0x2a4, 0x2a6, 0x7, 0x6, 0x2, 0x2, + 0x2a5, 0x2a7, 0x5, 0x6e, 0x38, 0x2, 0x2a6, 0x2a5, 0x3, + 0x2, 0x2, 0x2, 0x2a6, 0x2a7, 0x3, 0x2, 0x2, 0x2, + 0x2a7, 0x2a8, 0x3, 0x2, 0x2, 0x2, 0x2a8, 0x2a9, 0x7, + 0x7, 0x2, 0x2, 0x2a9, 0x6d, 0x3, 0x2, 0x2, 0x2, + 0x2aa, 0x2af, 0x5, 0x70, 0x39, 0x2, 0x2ab, 0x2ad, 0x7, + 0x8, 0x2, 0x2, 0x2ac, 0x2ae, 0x5, 0x6e, 0x38, 0x2, + 0x2ad, 0x2ac, 0x3, 0x2, 0x2, 0x2, 0x2ad, 0x2ae, 0x3, + 0x2, 0x2, 0x2, 0x2ae, 0x2b0, 0x3, 0x2, 0x2, 0x2, + 0x2af, 0x2ab, 0x3, 0x2, 0x2, 0x2, 0x2af, 0x2b0, 0x3, + 0x2, 0x2, 0x2, 0x2b0, 0x6f, 0x3, 0x2, 0x2, 0x2, + 0x2b1, 0x2b2, 0x5, 0xb4, 0x5b, 0x2, 0x2b2, 0x2b3, 0x5, + 0x74, 0x3b, 0x2, 0x2b3, 0x2b8, 0x3, 0x2, 0x2, 0x2, + 0x2b4, 0x2b5, 0x5, 0xa4, 0x53, 0x2, 0x2b5, 0x2b6, 0x5, + 0x72, 0x3a, 0x2, 0x2b6, 0x2b8, 0x3, 0x2, 0x2, 0x2, + 0x2b7, 0x2b1, 0x3, 0x2, 0x2, 0x2, 0x2b7, 0x2b4, 0x3, + 0x2, 0x2, 0x2, 0x2b8, 0x71, 0x3, 0x2, 0x2, 0x2, + 0x2b9, 0x2bb, 0x5, 0x74, 0x3b, 0x2, 0x2ba, 0x2b9, 0x3, + 0x2, 0x2, 0x2, 0x2ba, 0x2bb, 0x3, 0x2, 0x2, 0x2, + 0x2bb, 0x73, 0x3, 0x2, 0x2, 0x2, 0x2bc, 0x2bd, 0x5, + 0x76, 0x3c, 0x2, 0x2bd, 0x2c6, 0x5, 0x78, 0x3d, 0x2, + 0x2be, 0x2c2, 0x7, 0xa, 0x2, 0x2, 0x2bf, 0x2c0, 0x5, + 0x76, 0x3c, 0x2, 0x2c0, 0x2c1, 0x5, 0x78, 0x3d, 0x2, + 0x2c1, 0x2c3, 0x3, 0x2, 0x2, 0x2, 0x2c2, 0x2bf, 0x3, + 0x2, 0x2, 0x2, 0x2c2, 0x2c3, 0x3, 0x2, 0x2, 0x2, + 0x2c3, 0x2c5, 0x3, 0x2, 0x2, 0x2, 0x2c4, 0x2be, 0x3, + 0x2, 0x2, 0x2, 0x2c5, 0x2c8, 0x3, 0x2, 0x2, 0x2, + 0x2c6, 0x2c4, 0x3, 0x2, 0x2, 0x2, 0x2c6, 0x2c7, 0x3, + 0x2, 0x2, 0x2, 0x2c7, 0x75, 0x3, 0x2, 0x2, 0x2, + 0x2c8, 0x2c6, 0x3, 0x2, 0x2, 0x2, 0x2c9, 0x2cc, 0x5, + 0xb6, 0x5c, 0x2, 0x2ca, 0x2cc, 0x7, 0xb, 0x2, 0x2, + 0x2cb, 0x2c9, 0x3, 0x2, 0x2, 0x2, 0x2cb, 0x2ca, 0x3, + 0x2, 0x2, 0x2, 0x2cc, 0x77, 0x3, 0x2, 0x2, 0x2, + 0x2cd, 0x2d2, 0x5, 0x7a, 0x3e, 0x2, 0x2ce, 0x2cf, 0x7, + 0x9, 0x2, 0x2, 0x2cf, 0x2d1, 0x5, 0x7a, 0x3e, 0x2, + 0x2d0, 0x2ce, 0x3, 0x2, 0x2, 0x2, 0x2d1, 0x2d4, 0x3, + 0x2, 0x2, 0x2, 0x2d2, 0x2d0, 0x3, 0x2, 0x2, 0x2, + 0x2d2, 0x2d3, 0x3, 0x2, 0x2, 0x2, 0x2d3, 0x79, 0x3, + 0x2, 0x2, 0x2, 0x2d4, 0x2d2, 0x3, 0x2, 0x2, 0x2, + 0x2d5, 0x2d6, 0x5, 0xb0, 0x59, 0x2, 0x2d6, 0x7b, 0x3, + 0x2, 0x2, 0x2, 0x2d7, 0x2d8, 0x5, 0xb4, 0x5b, 0x2, + 0x2d8, 0x2d9, 0x5, 0x80, 0x41, 0x2, 0x2d9, 0x2de, 0x3, + 0x2, 0x2, 0x2, 0x2da, 0x2db, 0x5, 0xa8, 0x55, 0x2, + 0x2db, 0x2dc, 0x5, 0x7e, 0x40, 0x2, 0x2dc, 0x2de, 0x3, + 0x2, 0x2, 0x2, 0x2dd, 0x2d7, 0x3, 0x2, 0x2, 0x2, + 0x2dd, 0x2da, 0x3, 0x2, 0x2, 0x2, 0x2de, 0x7d, 0x3, + 0x2, 0x2, 0x2, 0x2df, 0x2e1, 0x5, 0x80, 0x41, 0x2, + 0x2e0, 0x2df, 0x3, 0x2, 0x2, 0x2, 0x2e0, 0x2e1, 0x3, + 0x2, 0x2, 0x2, 0x2e1, 0x7f, 0x3, 0x2, 0x2, 0x2, + 0x2e2, 0x2e9, 0x5, 0x88, 0x45, 0x2, 0x2e3, 0x2e5, 0x7, + 0xa, 0x2, 0x2, 0x2e4, 0x2e6, 0x5, 0x86, 0x44, 0x2, + 0x2e5, 0x2e4, 0x3, 0x2, 0x2, 0x2, 0x2e5, 0x2e6, 0x3, + 0x2, 0x2, 0x2, 0x2e6, 0x2e8, 0x3, 0x2, 0x2, 0x2, + 0x2e7, 0x2e3, 0x3, 0x2, 0x2, 0x2, 0x2e8, 0x2eb, 0x3, + 0x2, 0x2, 0x2, 0x2e9, 0x2e7, 0x3, 0x2, 0x2, 0x2, + 0x2e9, 0x2ea, 0x3, 0x2, 0x2, 0x2, 0x2ea, 0x81, 0x3, + 0x2, 0x2, 0x2, 0x2eb, 0x2e9, 0x3, 0x2, 0x2, 0x2, + 0x2ec, 0x2ed, 0x5, 0x90, 0x49, 0x2, 0x2ed, 0x83, 0x3, + 0x2, 0x2, 0x2, 0x2ee, 0x2ef, 0x5, 0xb8, 0x5d, 0x2, + 0x2ef, 0x85, 0x3, 0x2, 0x2, 0x2, 0x2f0, 0x2f1, 0x5, + 0x8a, 0x46, 0x2, 0x2f1, 0x2f2, 0x5, 0x78, 0x3d, 0x2, + 0x2f2, 0x87, 0x3, 0x2, 0x2, 0x2, 0x2f3, 0x2f4, 0x5, + 0x8a, 0x46, 0x2, 0x2f4, 0x2f5, 0x5, 0x8c, 0x47, 0x2, + 0x2f5, 0x89, 0x3, 0x2, 0x2, 0x2, 0x2f6, 0x2f9, 0x5, + 0x82, 0x42, 0x2, 0x2f7, 0x2f9, 0x5, 0x84, 0x43, 0x2, + 0x2f8, 0x2f6, 0x3, 0x2, 0x2, 0x2, 0x2f8, 0x2f7, 0x3, + 0x2, 0x2, 0x2, 0x2f9, 0x8b, 0x3, 0x2, 0x2, 0x2, + 0x2fa, 0x2ff, 0x5, 0x8e, 0x48, 0x2, 0x2fb, 0x2fc, 0x7, + 0x9, 0x2, 0x2, 0x2fc, 0x2fe, 0x5, 0x8e, 0x48, 0x2, + 0x2fd, 0x2fb, 0x3, 0x2, 0x2, 0x2, 0x2fe, 0x301, 0x3, + 0x2, 0x2, 0x2, 0x2ff, 0x2fd, 0x3, 0x2, 0x2, 0x2, + 0x2ff, 0x300, 0x3, 0x2, 0x2, 0x2, 0x300, 0x8d, 0x3, + 0x2, 0x2, 0x2, 0x301, 0x2ff, 0x3, 0x2, 0x2, 0x2, + 0x302, 0x303, 0x5, 0xb2, 0x5a, 0x2, 0x303, 0x8f, 0x3, + 0x2, 0x2, 0x2, 0x304, 0x305, 0x5, 0x92, 0x4a, 0x2, + 0x305, 0x91, 0x3, 0x2, 0x2, 0x2, 0x306, 0x30b, 0x5, + 0x94, 0x4b, 0x2, 0x307, 0x308, 0x7, 0xc, 0x2, 0x2, + 0x308, 0x30a, 0x5, 0x94, 0x4b, 0x2, 0x309, 0x307, 0x3, + 0x2, 0x2, 0x2, 0x30a, 0x30d, 0x3, 0x2, 0x2, 0x2, + 0x30b, 0x309, 0x3, 0x2, 0x2, 0x2, 0x30b, 0x30c, 0x3, + 0x2, 0x2, 0x2, 0x30c, 0x93, 0x3, 0x2, 0x2, 0x2, + 0x30d, 0x30b, 0x3, 0x2, 0x2, 0x2, 0x30e, 0x313, 0x5, + 0x98, 0x4d, 0x2, 0x30f, 0x310, 0x7, 0xd, 0x2, 0x2, + 0x310, 0x312, 0x5, 0x98, 0x4d, 0x2, 0x311, 0x30f, 0x3, + 0x2, 0x2, 0x2, 0x312, 0x315, 0x3, 0x2, 0x2, 0x2, + 0x313, 0x311, 0x3, 0x2, 0x2, 0x2, 0x313, 0x314, 0x3, + 0x2, 0x2, 0x2, 0x314, 0x95, 0x3, 0x2, 0x2, 0x2, + 0x315, 0x313, 0x3, 0x2, 0x2, 0x2, 0x316, 0x318, 0x5, + 0x9c, 0x4f, 0x2, 0x317, 0x319, 0x5, 0x9a, 0x4e, 0x2, + 0x318, 0x317, 0x3, 0x2, 0x2, 0x2, 0x318, 0x319, 0x3, + 0x2, 0x2, 0x2, 0x319, 0x97, 0x3, 0x2, 0x2, 0x2, + 0x31a, 0x31e, 0x5, 0x96, 0x4c, 0x2, 0x31b, 0x31c, 0x7, + 0xe, 0x2, 0x2, 0x31c, 0x31e, 0x5, 0x96, 0x4c, 0x2, + 0x31d, 0x31a, 0x3, 0x2, 0x2, 0x2, 0x31d, 0x31b, 0x3, + 0x2, 0x2, 0x2, 0x31e, 0x99, 0x3, 0x2, 0x2, 0x2, + 0x31f, 0x320, 0x9, 0x4, 0x2, 0x2, 0x320, 0x9b, 0x3, + 0x2, 0x2, 0x2, 0x321, 0x32a, 0x5, 0xf2, 0x7a, 0x2, + 0x322, 0x32a, 0x7, 0xb, 0x2, 0x2, 0x323, 0x324, 0x7, + 0x11, 0x2, 0x2, 0x324, 0x32a, 0x5, 0x9e, 0x50, 0x2, + 0x325, 0x326, 0x7, 0x4, 0x2, 0x2, 0x326, 0x327, 0x5, + 0x90, 0x49, 0x2, 0x327, 0x328, 0x7, 0x5, 0x2, 0x2, + 0x328, 0x32a, 0x3, 0x2, 0x2, 0x2, 0x329, 0x321, 0x3, + 0x2, 0x2, 0x2, 0x329, 0x322, 0x3, 0x2, 0x2, 0x2, + 0x329, 0x323, 0x3, 0x2, 0x2, 0x2, 0x329, 0x325, 0x3, + 0x2, 0x2, 0x2, 0x32a, 0x9d, 0x3, 0x2, 0x2, 0x2, + 0x32b, 0x339, 0x5, 0xa0, 0x51, 0x2, 0x32c, 0x335, 0x7, + 0x4, 0x2, 0x2, 0x32d, 0x332, 0x5, 0xa0, 0x51, 0x2, + 0x32e, 0x32f, 0x7, 0xc, 0x2, 0x2, 0x32f, 0x331, 0x5, + 0xa0, 0x51, 0x2, 0x330, 0x32e, 0x3, 0x2, 0x2, 0x2, + 0x331, 0x334, 0x3, 0x2, 0x2, 0x2, 0x332, 0x330, 0x3, + 0x2, 0x2, 0x2, 0x332, 0x333, 0x3, 0x2, 0x2, 0x2, + 0x333, 0x336, 0x3, 0x2, 0x2, 0x2, 0x334, 0x332, 0x3, + 0x2, 0x2, 0x2, 0x335, 0x32d, 0x3, 0x2, 0x2, 0x2, + 0x335, 0x336, 0x3, 0x2, 0x2, 0x2, 0x336, 0x337, 0x3, + 0x2, 0x2, 0x2, 0x337, 0x339, 0x7, 0x5, 0x2, 0x2, + 0x338, 0x32b, 0x3, 0x2, 0x2, 0x2, 0x338, 0x32c, 0x3, + 0x2, 0x2, 0x2, 0x339, 0x9f, 0x3, 0x2, 0x2, 0x2, + 0x33a, 0x342, 0x5, 0xf2, 0x7a, 0x2, 0x33b, 0x342, 0x7, + 0xb, 0x2, 0x2, 0x33c, 0x33f, 0x7, 0xe, 0x2, 0x2, + 0x33d, 0x340, 0x5, 0xf2, 0x7a, 0x2, 0x33e, 0x340, 0x7, + 0xb, 0x2, 0x2, 0x33f, 0x33d, 0x3, 0x2, 0x2, 0x2, + 0x33f, 0x33e, 0x3, 0x2, 0x2, 0x2, 0x340, 0x342, 0x3, + 0x2, 0x2, 0x2, 0x341, 0x33a, 0x3, 0x2, 0x2, 0x2, + 0x341, 0x33b, 0x3, 0x2, 0x2, 0x2, 0x341, 0x33c, 0x3, + 0x2, 0x2, 0x2, 0x342, 0xa1, 0x3, 0x2, 0x2, 0x2, + 0x343, 0x344, 0x7, 0x95, 0x2, 0x2, 0x344, 0xa3, 0x3, + 0x2, 0x2, 0x2, 0x345, 0x348, 0x5, 0xac, 0x57, 0x2, + 0x346, 0x348, 0x5, 0xa6, 0x54, 0x2, 0x347, 0x345, 0x3, + 0x2, 0x2, 0x2, 0x347, 0x346, 0x3, 0x2, 0x2, 0x2, + 0x348, 0xa5, 0x3, 0x2, 0x2, 0x2, 0x349, 0x34a, 0x7, + 0x12, 0x2, 0x2, 0x34a, 0x34b, 0x5, 0x74, 0x3b, 0x2, + 0x34b, 0x34c, 0x7, 0x13, 0x2, 0x2, 0x34c, 0xa7, 0x3, + 0x2, 0x2, 0x2, 0x34d, 0x350, 0x5, 0xae, 0x58, 0x2, + 0x34e, 0x350, 0x5, 0xaa, 0x56, 0x2, 0x34f, 0x34d, 0x3, + 0x2, 0x2, 0x2, 0x34f, 0x34e, 0x3, 0x2, 0x2, 0x2, + 0x350, 0xa9, 0x3, 0x2, 0x2, 0x2, 0x351, 0x352, 0x7, + 0x12, 0x2, 0x2, 0x352, 0x353, 0x5, 0x80, 0x41, 0x2, + 0x353, 0x354, 0x7, 0x13, 0x2, 0x2, 0x354, 0xab, 0x3, + 0x2, 0x2, 0x2, 0x355, 0x357, 0x7, 0x4, 0x2, 0x2, + 0x356, 0x358, 0x5, 0xb0, 0x59, 0x2, 0x357, 0x356, 0x3, + 0x2, 0x2, 0x2, 0x358, 0x359, 0x3, 0x2, 0x2, 0x2, + 0x359, 0x357, 0x3, 0x2, 0x2, 0x2, 0x359, 0x35a, 0x3, + 0x2, 0x2, 0x2, 0x35a, 0x35b, 0x3, 0x2, 0x2, 0x2, + 0x35b, 0x35c, 0x7, 0x5, 0x2, 0x2, 0x35c, 0xad, 0x3, + 0x2, 0x2, 0x2, 0x35d, 0x35f, 0x7, 0x4, 0x2, 0x2, + 0x35e, 0x360, 0x5, 0xb2, 0x5a, 0x2, 0x35f, 0x35e, 0x3, + 0x2, 0x2, 0x2, 0x360, 0x361, 0x3, 0x2, 0x2, 0x2, + 0x361, 0x35f, 0x3, 0x2, 0x2, 0x2, 0x361, 0x362, 0x3, + 0x2, 0x2, 0x2, 0x362, 0x363, 0x3, 0x2, 0x2, 0x2, + 0x363, 0x364, 0x7, 0x5, 0x2, 0x2, 0x364, 0xaf, 0x3, + 0x2, 0x2, 0x2, 0x365, 0x368, 0x5, 0xb4, 0x5b, 0x2, + 0x366, 0x368, 0x5, 0xa4, 0x53, 0x2, 0x367, 0x365, 0x3, + 0x2, 0x2, 0x2, 0x367, 0x366, 0x3, 0x2, 0x2, 0x2, + 0x368, 0xb1, 0x3, 0x2, 0x2, 0x2, 0x369, 0x36c, 0x5, + 0xb4, 0x5b, 0x2, 0x36a, 0x36c, 0x5, 0xa8, 0x55, 0x2, + 0x36b, 0x369, 0x3, 0x2, 0x2, 0x2, 0x36b, 0x36a, 0x3, + 0x2, 0x2, 0x2, 0x36c, 0xb3, 0x3, 0x2, 0x2, 0x2, + 0x36d, 0x370, 0x5, 0xb8, 0x5d, 0x2, 0x36e, 0x370, 0x5, + 0xba, 0x5e, 0x2, 0x36f, 0x36d, 0x3, 0x2, 0x2, 0x2, + 0x36f, 0x36e, 0x3, 0x2, 0x2, 0x2, 0x370, 0xb5, 0x3, + 0x2, 0x2, 0x2, 0x371, 0x374, 0x5, 0xb8, 0x5d, 0x2, + 0x372, 0x374, 0x5, 0xf2, 0x7a, 0x2, 0x373, 0x371, 0x3, + 0x2, 0x2, 0x2, 0x373, 0x372, 0x3, 0x2, 0x2, 0x2, + 0x374, 0xb7, 0x3, 0x2, 0x2, 0x2, 0x375, 0x376, 0x9, + 0x5, 0x2, 0x2, 0x376, 0xb9, 0x3, 0x2, 0x2, 0x2, + 0x377, 0x37e, 0x5, 0xf2, 0x7a, 0x2, 0x378, 0x37e, 0x5, + 0xe4, 0x73, 0x2, 0x379, 0x37e, 0x5, 0xe6, 0x74, 0x2, + 0x37a, 0x37e, 0x5, 0xee, 0x78, 0x2, 0x37b, 0x37e, 0x5, + 0xf6, 0x7c, 0x2, 0x37c, 0x37e, 0x7, 0xa4, 0x2, 0x2, + 0x37d, 0x377, 0x3, 0x2, 0x2, 0x2, 0x37d, 0x378, 0x3, + 0x2, 0x2, 0x2, 0x37d, 0x379, 0x3, 0x2, 0x2, 0x2, + 0x37d, 0x37a, 0x3, 0x2, 0x2, 0x2, 0x37d, 0x37b, 0x3, + 0x2, 0x2, 0x2, 0x37d, 0x37c, 0x3, 0x2, 0x2, 0x2, + 0x37e, 0xbb, 0x3, 0x2, 0x2, 0x2, 0x37f, 0x380, 0x5, + 0xbe, 0x60, 0x2, 0x380, 0xbd, 0x3, 0x2, 0x2, 0x2, + 0x381, 0x386, 0x5, 0xc0, 0x61, 0x2, 0x382, 0x383, 0x7, + 0x14, 0x2, 0x2, 0x383, 0x385, 0x5, 0xc0, 0x61, 0x2, + 0x384, 0x382, 0x3, 0x2, 0x2, 0x2, 0x385, 0x388, 0x3, + 0x2, 0x2, 0x2, 0x386, 0x384, 0x3, 0x2, 0x2, 0x2, + 0x386, 0x387, 0x3, 0x2, 0x2, 0x2, 0x387, 0xbf, 0x3, + 0x2, 0x2, 0x2, 0x388, 0x386, 0x3, 0x2, 0x2, 0x2, + 0x389, 0x38e, 0x5, 0xc2, 0x62, 0x2, 0x38a, 0x38b, 0x7, + 0x15, 0x2, 0x2, 0x38b, 0x38d, 0x5, 0xc2, 0x62, 0x2, + 0x38c, 0x38a, 0x3, 0x2, 0x2, 0x2, 0x38d, 0x390, 0x3, + 0x2, 0x2, 0x2, 0x38e, 0x38c, 0x3, 0x2, 0x2, 0x2, + 0x38e, 0x38f, 0x3, 0x2, 0x2, 0x2, 0x38f, 0xc1, 0x3, + 0x2, 0x2, 0x2, 0x390, 0x38e, 0x3, 0x2, 0x2, 0x2, + 0x391, 0x392, 0x5, 0xc4, 0x63, 0x2, 0x392, 0xc3, 0x3, + 0x2, 0x2, 0x2, 0x393, 0x3a5, 0x5, 0xc6, 0x64, 0x2, + 0x394, 0x395, 0x7, 0x16, 0x2, 0x2, 0x395, 0x3a6, 0x5, + 0xc6, 0x64, 0x2, 0x396, 0x397, 0x7, 0x17, 0x2, 0x2, + 0x397, 0x3a6, 0x5, 0xc6, 0x64, 0x2, 0x398, 0x399, 0x7, + 0x18, 0x2, 0x2, 0x399, 0x3a6, 0x5, 0xc6, 0x64, 0x2, + 0x39a, 0x39b, 0x7, 0x19, 0x2, 0x2, 0x39b, 0x3a6, 0x5, + 0xc6, 0x64, 0x2, 0x39c, 0x39d, 0x7, 0x1a, 0x2, 0x2, + 0x39d, 0x3a6, 0x5, 0xc6, 0x64, 0x2, 0x39e, 0x39f, 0x7, + 0x1b, 0x2, 0x2, 0x39f, 0x3a6, 0x5, 0xc6, 0x64, 0x2, + 0x3a0, 0x3a1, 0x7, 0x4f, 0x2, 0x2, 0x3a1, 0x3a6, 0x5, + 0x6a, 0x36, 0x2, 0x3a2, 0x3a3, 0x7, 0x4e, 0x2, 0x2, + 0x3a3, 0x3a4, 0x7, 0x4f, 0x2, 0x2, 0x3a4, 0x3a6, 0x5, + 0x6a, 0x36, 0x2, 0x3a5, 0x394, 0x3, 0x2, 0x2, 0x2, + 0x3a5, 0x396, 0x3, 0x2, 0x2, 0x2, 0x3a5, 0x398, 0x3, + 0x2, 0x2, 0x2, 0x3a5, 0x39a, 0x3, 0x2, 0x2, 0x2, + 0x3a5, 0x39c, 0x3, 0x2, 0x2, 0x2, 0x3a5, 0x39e, 0x3, + 0x2, 0x2, 0x2, 0x3a5, 0x3a0, 0x3, 0x2, 0x2, 0x2, + 0x3a5, 0x3a2, 0x3, 0x2, 0x2, 0x2, 0x3a5, 0x3a6, 0x3, + 0x2, 0x2, 0x2, 0x3a6, 0xc5, 0x3, 0x2, 0x2, 0x2, + 0x3a7, 0x3a8, 0x5, 0xc8, 0x65, 0x2, 0x3a8, 0xc7, 0x3, + 0x2, 0x2, 0x2, 0x3a9, 0x3b1, 0x5, 0xcc, 0x67, 0x2, + 0x3aa, 0x3ab, 0x7, 0xf, 0x2, 0x2, 0x3ab, 0x3b0, 0x5, + 0xcc, 0x67, 0x2, 0x3ac, 0x3ad, 0x7, 0x1c, 0x2, 0x2, + 0x3ad, 0x3b0, 0x5, 0xcc, 0x67, 0x2, 0x3ae, 0x3b0, 0x5, + 0xca, 0x66, 0x2, 0x3af, 0x3aa, 0x3, 0x2, 0x2, 0x2, + 0x3af, 0x3ac, 0x3, 0x2, 0x2, 0x2, 0x3af, 0x3ae, 0x3, + 0x2, 0x2, 0x2, 0x3b0, 0x3b3, 0x3, 0x2, 0x2, 0x2, + 0x3b1, 0x3af, 0x3, 0x2, 0x2, 0x2, 0x3b1, 0x3b2, 0x3, + 0x2, 0x2, 0x2, 0x3b2, 0xc9, 0x3, 0x2, 0x2, 0x2, + 0x3b3, 0x3b1, 0x3, 0x2, 0x2, 0x2, 0x3b4, 0x3b7, 0x5, + 0xea, 0x76, 0x2, 0x3b5, 0x3b7, 0x5, 0xec, 0x77, 0x2, + 0x3b6, 0x3b4, 0x3, 0x2, 0x2, 0x2, 0x3b6, 0x3b5, 0x3, + 0x2, 0x2, 0x2, 0x3b7, 0x3be, 0x3, 0x2, 0x2, 0x2, + 0x3b8, 0x3b9, 0x7, 0x3, 0x2, 0x2, 0x3b9, 0x3bd, 0x5, + 0xce, 0x68, 0x2, 0x3ba, 0x3bb, 0x7, 0xd, 0x2, 0x2, + 0x3bb, 0x3bd, 0x5, 0xce, 0x68, 0x2, 0x3bc, 0x3b8, 0x3, + 0x2, 0x2, 0x2, 0x3bc, 0x3ba, 0x3, 0x2, 0x2, 0x2, + 0x3bd, 0x3c0, 0x3, 0x2, 0x2, 0x2, 0x3be, 0x3bc, 0x3, + 0x2, 0x2, 0x2, 0x3be, 0x3bf, 0x3, 0x2, 0x2, 0x2, + 0x3bf, 0xcb, 0x3, 0x2, 0x2, 0x2, 0x3c0, 0x3be, 0x3, + 0x2, 0x2, 0x2, 0x3c1, 0x3c8, 0x5, 0xce, 0x68, 0x2, + 0x3c2, 0x3c3, 0x7, 0x3, 0x2, 0x2, 0x3c3, 0x3c7, 0x5, + 0xce, 0x68, 0x2, 0x3c4, 0x3c5, 0x7, 0xd, 0x2, 0x2, + 0x3c5, 0x3c7, 0x5, 0xce, 0x68, 0x2, 0x3c6, 0x3c2, 0x3, + 0x2, 0x2, 0x2, 0x3c6, 0x3c4, 0x3, 0x2, 0x2, 0x2, + 0x3c7, 0x3ca, 0x3, 0x2, 0x2, 0x2, 0x3c8, 0x3c6, 0x3, + 0x2, 0x2, 0x2, 0x3c8, 0x3c9, 0x3, 0x2, 0x2, 0x2, + 0x3c9, 0xcd, 0x3, 0x2, 0x2, 0x2, 0x3ca, 0x3c8, 0x3, + 0x2, 0x2, 0x2, 0x3cb, 0x3cc, 0x7, 0x11, 0x2, 0x2, + 0x3cc, 0x3d3, 0x5, 0xd0, 0x69, 0x2, 0x3cd, 0x3ce, 0x7, + 0xf, 0x2, 0x2, 0x3ce, 0x3d3, 0x5, 0xd0, 0x69, 0x2, + 0x3cf, 0x3d0, 0x7, 0x1c, 0x2, 0x2, 0x3d0, 0x3d3, 0x5, + 0xd0, 0x69, 0x2, 0x3d1, 0x3d3, 0x5, 0xd0, 0x69, 0x2, + 0x3d2, 0x3cb, 0x3, 0x2, 0x2, 0x2, 0x3d2, 0x3cd, 0x3, + 0x2, 0x2, 0x2, 0x3d2, 0x3cf, 0x3, 0x2, 0x2, 0x2, + 0x3d2, 0x3d1, 0x3, 0x2, 0x2, 0x2, 0x3d3, 0xcf, 0x3, + 0x2, 0x2, 0x2, 0x3d4, 0x3dc, 0x5, 0xd2, 0x6a, 0x2, + 0x3d5, 0x3dc, 0x5, 0xd4, 0x6b, 0x2, 0x3d6, 0x3dc, 0x5, + 0xe2, 0x72, 0x2, 0x3d7, 0x3dc, 0x5, 0xe4, 0x73, 0x2, + 0x3d8, 0x3dc, 0x5, 0xe6, 0x74, 0x2, 0x3d9, 0x3dc, 0x5, + 0xee, 0x78, 0x2, 0x3da, 0x3dc, 0x5, 0xb8, 0x5d, 0x2, + 0x3db, 0x3d4, 0x3, 0x2, 0x2, 0x2, 0x3db, 0x3d5, 0x3, + 0x2, 0x2, 0x2, 0x3db, 0x3d6, 0x3, 0x2, 0x2, 0x2, + 0x3db, 0x3d7, 0x3, 0x2, 0x2, 0x2, 0x3db, 0x3d8, 0x3, + 0x2, 0x2, 0x2, 0x3db, 0x3d9, 0x3, 0x2, 0x2, 0x2, + 0x3db, 0x3da, 0x3, 0x2, 0x2, 0x2, 0x3dc, 0xd1, 0x3, + 0x2, 0x2, 0x2, 0x3dd, 0x3de, 0x7, 0x4, 0x2, 0x2, + 0x3de, 0x3df, 0x5, 0xbc, 0x5f, 0x2, 0x3df, 0x3e0, 0x7, + 0x5, 0x2, 0x2, 0x3e0, 0xd3, 0x3, 0x2, 0x2, 0x2, + 0x3e1, 0x4e8, 0x5, 0xe0, 0x71, 0x2, 0x3e2, 0x3e3, 0x7, + 0x50, 0x2, 0x2, 0x3e3, 0x3e4, 0x7, 0x4, 0x2, 0x2, + 0x3e4, 0x3e5, 0x5, 0xbc, 0x5f, 0x2, 0x3e5, 0x3e6, 0x7, + 0x5, 0x2, 0x2, 0x3e6, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x3e7, 0x3e8, 0x7, 0x51, 0x2, 0x2, 0x3e8, 0x3e9, 0x7, + 0x4, 0x2, 0x2, 0x3e9, 0x3ea, 0x5, 0xbc, 0x5f, 0x2, + 0x3ea, 0x3eb, 0x7, 0x5, 0x2, 0x2, 0x3eb, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x3ec, 0x3ed, 0x7, 0x52, 0x2, 0x2, + 0x3ed, 0x3ee, 0x7, 0x4, 0x2, 0x2, 0x3ee, 0x3ef, 0x5, + 0xbc, 0x5f, 0x2, 0x3ef, 0x3f0, 0x7, 0x9, 0x2, 0x2, + 0x3f0, 0x3f1, 0x5, 0xbc, 0x5f, 0x2, 0x3f1, 0x3f2, 0x7, + 0x5, 0x2, 0x2, 0x3f2, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x3f3, 0x3f4, 0x7, 0x53, 0x2, 0x2, 0x3f4, 0x3f5, 0x7, + 0x4, 0x2, 0x2, 0x3f5, 0x3f6, 0x5, 0xbc, 0x5f, 0x2, + 0x3f6, 0x3f7, 0x7, 0x5, 0x2, 0x2, 0x3f7, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x3f8, 0x3f9, 0x7, 0x54, 0x2, 0x2, + 0x3f9, 0x3fa, 0x7, 0x4, 0x2, 0x2, 0x3fa, 0x3fb, 0x5, + 0xb8, 0x5d, 0x2, 0x3fb, 0x3fc, 0x7, 0x5, 0x2, 0x2, + 0x3fc, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x3fd, 0x3fe, 0x7, + 0x55, 0x2, 0x2, 0x3fe, 0x3ff, 0x7, 0x4, 0x2, 0x2, + 0x3ff, 0x400, 0x5, 0xbc, 0x5f, 0x2, 0x400, 0x401, 0x7, + 0x5, 0x2, 0x2, 0x401, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x402, 0x403, 0x7, 0x56, 0x2, 0x2, 0x403, 0x404, 0x7, + 0x4, 0x2, 0x2, 0x404, 0x405, 0x5, 0xbc, 0x5f, 0x2, + 0x405, 0x406, 0x7, 0x5, 0x2, 0x2, 0x406, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x407, 0x40d, 0x7, 0x57, 0x2, 0x2, + 0x408, 0x409, 0x7, 0x4, 0x2, 0x2, 0x409, 0x40a, 0x5, + 0xbc, 0x5f, 0x2, 0x40a, 0x40b, 0x7, 0x5, 0x2, 0x2, + 0x40b, 0x40e, 0x3, 0x2, 0x2, 0x2, 0x40c, 0x40e, 0x7, + 0xa4, 0x2, 0x2, 0x40d, 0x408, 0x3, 0x2, 0x2, 0x2, + 0x40d, 0x40c, 0x3, 0x2, 0x2, 0x2, 0x40e, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x40f, 0x410, 0x7, 0x58, 0x2, 0x2, + 0x410, 0x4e8, 0x7, 0xa4, 0x2, 0x2, 0x411, 0x412, 0x7, + 0x59, 0x2, 0x2, 0x412, 0x413, 0x7, 0x4, 0x2, 0x2, + 0x413, 0x414, 0x5, 0xbc, 0x5f, 0x2, 0x414, 0x415, 0x7, + 0x5, 0x2, 0x2, 0x415, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x416, 0x417, 0x7, 0x5a, 0x2, 0x2, 0x417, 0x418, 0x7, + 0x4, 0x2, 0x2, 0x418, 0x419, 0x5, 0xbc, 0x5f, 0x2, + 0x419, 0x41a, 0x7, 0x5, 0x2, 0x2, 0x41a, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x41b, 0x41c, 0x7, 0x5b, 0x2, 0x2, + 0x41c, 0x41d, 0x7, 0x4, 0x2, 0x2, 0x41d, 0x41e, 0x5, + 0xbc, 0x5f, 0x2, 0x41e, 0x41f, 0x7, 0x5, 0x2, 0x2, + 0x41f, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x420, 0x421, 0x7, + 0x5c, 0x2, 0x2, 0x421, 0x422, 0x7, 0x4, 0x2, 0x2, + 0x422, 0x423, 0x5, 0xbc, 0x5f, 0x2, 0x423, 0x424, 0x7, + 0x5, 0x2, 0x2, 0x424, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x425, 0x426, 0x7, 0x5d, 0x2, 0x2, 0x426, 0x4e8, 0x5, + 0x6a, 0x36, 0x2, 0x427, 0x4e8, 0x5, 0xd8, 0x6d, 0x2, + 0x428, 0x429, 0x7, 0x5e, 0x2, 0x2, 0x429, 0x42a, 0x7, + 0x4, 0x2, 0x2, 0x42a, 0x42b, 0x5, 0xbc, 0x5f, 0x2, + 0x42b, 0x42c, 0x7, 0x5, 0x2, 0x2, 0x42c, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x42d, 0x4e8, 0x5, 0xda, 0x6e, 0x2, + 0x42e, 0x42f, 0x7, 0x5f, 0x2, 0x2, 0x42f, 0x430, 0x7, + 0x4, 0x2, 0x2, 0x430, 0x431, 0x5, 0xbc, 0x5f, 0x2, + 0x431, 0x432, 0x7, 0x5, 0x2, 0x2, 0x432, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x433, 0x434, 0x7, 0x60, 0x2, 0x2, + 0x434, 0x435, 0x7, 0x4, 0x2, 0x2, 0x435, 0x436, 0x5, + 0xbc, 0x5f, 0x2, 0x436, 0x437, 0x7, 0x5, 0x2, 0x2, + 0x437, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x438, 0x439, 0x7, + 0x61, 0x2, 0x2, 0x439, 0x43a, 0x7, 0x1d, 0x2, 0x2, + 0x43a, 0x43b, 0x7, 0x62, 0x2, 0x2, 0x43b, 0x43c, 0x7, + 0x1d, 0x2, 0x2, 0x43c, 0x43d, 0x7, 0x56, 0x2, 0x2, + 0x43d, 0x43e, 0x7, 0x4, 0x2, 0x2, 0x43e, 0x43f, 0x5, + 0xbc, 0x5f, 0x2, 0x43f, 0x440, 0x7, 0x5, 0x2, 0x2, + 0x440, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x441, 0x442, 0x7, + 0x63, 0x2, 0x2, 0x442, 0x443, 0x7, 0x4, 0x2, 0x2, + 0x443, 0x444, 0x5, 0xbc, 0x5f, 0x2, 0x444, 0x445, 0x7, + 0x9, 0x2, 0x2, 0x445, 0x446, 0x5, 0xbc, 0x5f, 0x2, + 0x446, 0x447, 0x7, 0x5, 0x2, 0x2, 0x447, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x448, 0x449, 0x7, 0x64, 0x2, 0x2, + 0x449, 0x44a, 0x7, 0x4, 0x2, 0x2, 0x44a, 0x44b, 0x5, + 0xbc, 0x5f, 0x2, 0x44b, 0x44c, 0x7, 0x9, 0x2, 0x2, + 0x44c, 0x44d, 0x5, 0xbc, 0x5f, 0x2, 0x44d, 0x44e, 0x7, + 0x5, 0x2, 0x2, 0x44e, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x44f, 0x450, 0x7, 0x65, 0x2, 0x2, 0x450, 0x451, 0x7, + 0x4, 0x2, 0x2, 0x451, 0x452, 0x5, 0xbc, 0x5f, 0x2, + 0x452, 0x453, 0x7, 0x9, 0x2, 0x2, 0x453, 0x454, 0x5, + 0xbc, 0x5f, 0x2, 0x454, 0x455, 0x7, 0x5, 0x2, 0x2, + 0x455, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x456, 0x457, 0x7, + 0x66, 0x2, 0x2, 0x457, 0x458, 0x7, 0x4, 0x2, 0x2, + 0x458, 0x459, 0x5, 0xbc, 0x5f, 0x2, 0x459, 0x45a, 0x7, + 0x9, 0x2, 0x2, 0x45a, 0x45b, 0x5, 0xbc, 0x5f, 0x2, + 0x45b, 0x45c, 0x7, 0x5, 0x2, 0x2, 0x45c, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x45d, 0x45e, 0x7, 0x67, 0x2, 0x2, + 0x45e, 0x45f, 0x7, 0x4, 0x2, 0x2, 0x45f, 0x460, 0x5, + 0xbc, 0x5f, 0x2, 0x460, 0x461, 0x7, 0x9, 0x2, 0x2, + 0x461, 0x462, 0x5, 0xbc, 0x5f, 0x2, 0x462, 0x463, 0x7, + 0x5, 0x2, 0x2, 0x463, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x464, 0x465, 0x7, 0x68, 0x2, 0x2, 0x465, 0x466, 0x7, + 0x4, 0x2, 0x2, 0x466, 0x467, 0x5, 0xbc, 0x5f, 0x2, + 0x467, 0x468, 0x7, 0x5, 0x2, 0x2, 0x468, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x469, 0x46a, 0x7, 0x69, 0x2, 0x2, + 0x46a, 0x46b, 0x7, 0x4, 0x2, 0x2, 0x46b, 0x46c, 0x5, + 0xbc, 0x5f, 0x2, 0x46c, 0x46d, 0x7, 0x5, 0x2, 0x2, + 0x46d, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x46e, 0x46f, 0x7, + 0x6a, 0x2, 0x2, 0x46f, 0x470, 0x7, 0x4, 0x2, 0x2, + 0x470, 0x471, 0x5, 0xbc, 0x5f, 0x2, 0x471, 0x472, 0x7, + 0x5, 0x2, 0x2, 0x472, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x473, 0x474, 0x7, 0x6b, 0x2, 0x2, 0x474, 0x475, 0x7, + 0x4, 0x2, 0x2, 0x475, 0x476, 0x5, 0xbc, 0x5f, 0x2, + 0x476, 0x477, 0x7, 0x5, 0x2, 0x2, 0x477, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x478, 0x479, 0x7, 0x6c, 0x2, 0x2, + 0x479, 0x47a, 0x7, 0x4, 0x2, 0x2, 0x47a, 0x47b, 0x5, + 0xbc, 0x5f, 0x2, 0x47b, 0x47c, 0x7, 0x5, 0x2, 0x2, + 0x47c, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x47d, 0x47e, 0x7, + 0x6d, 0x2, 0x2, 0x47e, 0x47f, 0x7, 0x4, 0x2, 0x2, + 0x47f, 0x480, 0x5, 0xbc, 0x5f, 0x2, 0x480, 0x481, 0x7, + 0x5, 0x2, 0x2, 0x481, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x482, 0x483, 0x7, 0x6e, 0x2, 0x2, 0x483, 0x484, 0x7, + 0x4, 0x2, 0x2, 0x484, 0x485, 0x5, 0xbc, 0x5f, 0x2, + 0x485, 0x486, 0x7, 0x5, 0x2, 0x2, 0x486, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x487, 0x488, 0x7, 0x6f, 0x2, 0x2, + 0x488, 0x489, 0x7, 0x4, 0x2, 0x2, 0x489, 0x48a, 0x5, + 0xbc, 0x5f, 0x2, 0x48a, 0x48b, 0x7, 0x5, 0x2, 0x2, + 0x48b, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x48c, 0x48d, 0x7, + 0x70, 0x2, 0x2, 0x48d, 0x4e8, 0x7, 0xa4, 0x2, 0x2, + 0x48e, 0x48f, 0x7, 0x71, 0x2, 0x2, 0x48f, 0x4e8, 0x7, + 0xa4, 0x2, 0x2, 0x490, 0x491, 0x7, 0x72, 0x2, 0x2, + 0x491, 0x4e8, 0x7, 0xa4, 0x2, 0x2, 0x492, 0x493, 0x7, + 0x77, 0x2, 0x2, 0x493, 0x494, 0x7, 0x4, 0x2, 0x2, + 0x494, 0x495, 0x5, 0xbc, 0x5f, 0x2, 0x495, 0x496, 0x7, + 0x5, 0x2, 0x2, 0x496, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x497, 0x498, 0x7, 0x73, 0x2, 0x2, 0x498, 0x499, 0x7, + 0x4, 0x2, 0x2, 0x499, 0x49a, 0x5, 0xbc, 0x5f, 0x2, + 0x49a, 0x49b, 0x7, 0x5, 0x2, 0x2, 0x49b, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x49c, 0x49d, 0x7, 0x74, 0x2, 0x2, + 0x49d, 0x49e, 0x7, 0x4, 0x2, 0x2, 0x49e, 0x49f, 0x5, + 0xbc, 0x5f, 0x2, 0x49f, 0x4a0, 0x7, 0x5, 0x2, 0x2, + 0x4a0, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x4a1, 0x4a2, 0x7, + 0x75, 0x2, 0x2, 0x4a2, 0x4a3, 0x7, 0x4, 0x2, 0x2, + 0x4a3, 0x4a4, 0x5, 0xbc, 0x5f, 0x2, 0x4a4, 0x4a5, 0x7, + 0x5, 0x2, 0x2, 0x4a5, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x4a6, 0x4a7, 0x7, 0x76, 0x2, 0x2, 0x4a7, 0x4a8, 0x7, + 0x4, 0x2, 0x2, 0x4a8, 0x4a9, 0x5, 0xbc, 0x5f, 0x2, + 0x4a9, 0x4aa, 0x7, 0x5, 0x2, 0x2, 0x4aa, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x4ab, 0x4ac, 0x7, 0x78, 0x2, 0x2, + 0x4ac, 0x4e8, 0x5, 0x6a, 0x36, 0x2, 0x4ad, 0x4ae, 0x7, + 0x79, 0x2, 0x2, 0x4ae, 0x4af, 0x7, 0x4, 0x2, 0x2, + 0x4af, 0x4b0, 0x5, 0xbc, 0x5f, 0x2, 0x4b0, 0x4b1, 0x7, + 0x9, 0x2, 0x2, 0x4b1, 0x4b2, 0x5, 0xbc, 0x5f, 0x2, + 0x4b2, 0x4b3, 0x7, 0x9, 0x2, 0x2, 0x4b3, 0x4b4, 0x5, + 0xbc, 0x5f, 0x2, 0x4b4, 0x4b5, 0x7, 0x5, 0x2, 0x2, + 0x4b5, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x4b6, 0x4b7, 0x7, + 0x7a, 0x2, 0x2, 0x4b7, 0x4b8, 0x7, 0x4, 0x2, 0x2, + 0x4b8, 0x4b9, 0x5, 0xbc, 0x5f, 0x2, 0x4b9, 0x4ba, 0x7, + 0x9, 0x2, 0x2, 0x4ba, 0x4bb, 0x5, 0xbc, 0x5f, 0x2, + 0x4bb, 0x4bc, 0x7, 0x5, 0x2, 0x2, 0x4bc, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x4bd, 0x4be, 0x7, 0x7b, 0x2, 0x2, + 0x4be, 0x4bf, 0x7, 0x4, 0x2, 0x2, 0x4bf, 0x4c0, 0x5, + 0xbc, 0x5f, 0x2, 0x4c0, 0x4c1, 0x7, 0x9, 0x2, 0x2, + 0x4c1, 0x4c2, 0x5, 0xbc, 0x5f, 0x2, 0x4c2, 0x4c3, 0x7, + 0x5, 0x2, 0x2, 0x4c3, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x4c4, 0x4c5, 0x7, 0x7c, 0x2, 0x2, 0x4c5, 0x4c6, 0x7, + 0x4, 0x2, 0x2, 0x4c6, 0x4c7, 0x5, 0xbc, 0x5f, 0x2, + 0x4c7, 0x4c8, 0x7, 0x9, 0x2, 0x2, 0x4c8, 0x4c9, 0x5, + 0xbc, 0x5f, 0x2, 0x4c9, 0x4ca, 0x7, 0x5, 0x2, 0x2, + 0x4ca, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x4cb, 0x4cc, 0x7, + 0x7d, 0x2, 0x2, 0x4cc, 0x4cd, 0x7, 0x4, 0x2, 0x2, + 0x4cd, 0x4ce, 0x5, 0xbc, 0x5f, 0x2, 0x4ce, 0x4cf, 0x7, + 0x5, 0x2, 0x2, 0x4cf, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x4d0, 0x4d1, 0x7, 0x7e, 0x2, 0x2, 0x4d1, 0x4d2, 0x7, + 0x4, 0x2, 0x2, 0x4d2, 0x4d3, 0x5, 0xbc, 0x5f, 0x2, + 0x4d3, 0x4d4, 0x7, 0x5, 0x2, 0x2, 0x4d4, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x4d5, 0x4d6, 0x7, 0x7f, 0x2, 0x2, + 0x4d6, 0x4d7, 0x7, 0x4, 0x2, 0x2, 0x4d7, 0x4d8, 0x5, + 0xbc, 0x5f, 0x2, 0x4d8, 0x4d9, 0x7, 0x5, 0x2, 0x2, + 0x4d9, 0x4e8, 0x3, 0x2, 0x2, 0x2, 0x4da, 0x4db, 0x7, + 0x80, 0x2, 0x2, 0x4db, 0x4dc, 0x7, 0x4, 0x2, 0x2, + 0x4dc, 0x4dd, 0x5, 0xbc, 0x5f, 0x2, 0x4dd, 0x4de, 0x7, + 0x5, 0x2, 0x2, 0x4de, 0x4e8, 0x3, 0x2, 0x2, 0x2, + 0x4df, 0x4e0, 0x7, 0x81, 0x2, 0x2, 0x4e0, 0x4e1, 0x7, + 0x4, 0x2, 0x2, 0x4e1, 0x4e2, 0x5, 0xbc, 0x5f, 0x2, + 0x4e2, 0x4e3, 0x7, 0x5, 0x2, 0x2, 0x4e3, 0x4e8, 0x3, + 0x2, 0x2, 0x2, 0x4e4, 0x4e8, 0x5, 0xd6, 0x6c, 0x2, + 0x4e5, 0x4e8, 0x5, 0xdc, 0x6f, 0x2, 0x4e6, 0x4e8, 0x5, + 0xde, 0x70, 0x2, 0x4e7, 0x3e1, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x3e2, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x3e7, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x3ec, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x3f3, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x3f8, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x3fd, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x402, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x407, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x40f, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x411, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x416, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x41b, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x420, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x425, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x427, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x428, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x42d, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x42e, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x433, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x438, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x441, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x448, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x44f, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x456, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x45d, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x464, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x469, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x46e, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x473, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x478, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x47d, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x482, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x487, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x48c, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x48e, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x490, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x492, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x497, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x49c, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x4a1, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x4a6, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x4ab, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x4ad, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x4b6, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x4bd, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x4c4, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x4cb, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x4d0, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x4d5, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x4da, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x4df, 0x3, 0x2, 0x2, 0x2, + 0x4e7, 0x4e4, 0x3, 0x2, 0x2, 0x2, 0x4e7, 0x4e5, 0x3, + 0x2, 0x2, 0x2, 0x4e7, 0x4e6, 0x3, 0x2, 0x2, 0x2, + 0x4e8, 0xd5, 0x3, 0x2, 0x2, 0x2, 0x4e9, 0x4ea, 0x7, + 0x82, 0x2, 0x2, 0x4ea, 0x4eb, 0x7, 0x4, 0x2, 0x2, + 0x4eb, 0x4ec, 0x5, 0xbc, 0x5f, 0x2, 0x4ec, 0x4ed, 0x7, + 0x9, 0x2, 0x2, 0x4ed, 0x4f0, 0x5, 0xbc, 0x5f, 0x2, + 0x4ee, 0x4ef, 0x7, 0x9, 0x2, 0x2, 0x4ef, 0x4f1, 0x5, + 0xbc, 0x5f, 0x2, 0x4f0, 0x4ee, 0x3, 0x2, 0x2, 0x2, + 0x4f0, 0x4f1, 0x3, 0x2, 0x2, 0x2, 0x4f1, 0x4f2, 0x3, + 0x2, 0x2, 0x2, 0x4f2, 0x4f3, 0x7, 0x5, 0x2, 0x2, + 0x4f3, 0xd7, 0x3, 0x2, 0x2, 0x2, 0x4f4, 0x4f5, 0x7, + 0x83, 0x2, 0x2, 0x4f5, 0x4f6, 0x7, 0x4, 0x2, 0x2, + 0x4f6, 0x4f7, 0x5, 0xbc, 0x5f, 0x2, 0x4f7, 0x4f8, 0x7, + 0x9, 0x2, 0x2, 0x4f8, 0x4fb, 0x5, 0xbc, 0x5f, 0x2, + 0x4f9, 0x4fa, 0x7, 0x9, 0x2, 0x2, 0x4fa, 0x4fc, 0x5, + 0xbc, 0x5f, 0x2, 0x4fb, 0x4f9, 0x3, 0x2, 0x2, 0x2, + 0x4fb, 0x4fc, 0x3, 0x2, 0x2, 0x2, 0x4fc, 0x4fd, 0x3, + 0x2, 0x2, 0x2, 0x4fd, 0x4fe, 0x7, 0x5, 0x2, 0x2, + 0x4fe, 0xd9, 0x3, 0x2, 0x2, 0x2, 0x4ff, 0x500, 0x7, + 0x84, 0x2, 0x2, 0x500, 0x501, 0x7, 0x4, 0x2, 0x2, + 0x501, 0x502, 0x5, 0xbc, 0x5f, 0x2, 0x502, 0x503, 0x7, + 0x9, 0x2, 0x2, 0x503, 0x504, 0x5, 0xbc, 0x5f, 0x2, + 0x504, 0x505, 0x7, 0x9, 0x2, 0x2, 0x505, 0x508, 0x5, + 0xbc, 0x5f, 0x2, 0x506, 0x507, 0x7, 0x9, 0x2, 0x2, + 0x507, 0x509, 0x5, 0xbc, 0x5f, 0x2, 0x508, 0x506, 0x3, + 0x2, 0x2, 0x2, 0x508, 0x509, 0x3, 0x2, 0x2, 0x2, + 0x509, 0x50a, 0x3, 0x2, 0x2, 0x2, 0x50a, 0x50b, 0x7, + 0x5, 0x2, 0x2, 0x50b, 0xdb, 0x3, 0x2, 0x2, 0x2, + 0x50c, 0x50d, 0x7, 0x85, 0x2, 0x2, 0x50d, 0x50e, 0x5, + 0x40, 0x21, 0x2, 0x50e, 0xdd, 0x3, 0x2, 0x2, 0x2, + 0x50f, 0x510, 0x7, 0x4e, 0x2, 0x2, 0x510, 0x511, 0x7, + 0x85, 0x2, 0x2, 0x511, 0x512, 0x5, 0x40, 0x21, 0x2, + 0x512, 0xdf, 0x3, 0x2, 0x2, 0x2, 0x513, 0x514, 0x7, + 0x86, 0x2, 0x2, 0x514, 0x516, 0x7, 0x4, 0x2, 0x2, + 0x515, 0x517, 0x7, 0x24, 0x2, 0x2, 0x516, 0x515, 0x3, + 0x2, 0x2, 0x2, 0x516, 0x517, 0x3, 0x2, 0x2, 0x2, + 0x517, 0x51a, 0x3, 0x2, 0x2, 0x2, 0x518, 0x51b, 0x7, + 0x3, 0x2, 0x2, 0x519, 0x51b, 0x5, 0xbc, 0x5f, 0x2, + 0x51a, 0x518, 0x3, 0x2, 0x2, 0x2, 0x51a, 0x519, 0x3, + 0x2, 0x2, 0x2, 0x51b, 0x51c, 0x3, 0x2, 0x2, 0x2, + 0x51c, 0x554, 0x7, 0x5, 0x2, 0x2, 0x51d, 0x51e, 0x7, + 0x87, 0x2, 0x2, 0x51e, 0x520, 0x7, 0x4, 0x2, 0x2, + 0x51f, 0x521, 0x7, 0x24, 0x2, 0x2, 0x520, 0x51f, 0x3, + 0x2, 0x2, 0x2, 0x520, 0x521, 0x3, 0x2, 0x2, 0x2, + 0x521, 0x522, 0x3, 0x2, 0x2, 0x2, 0x522, 0x523, 0x5, + 0xbc, 0x5f, 0x2, 0x523, 0x524, 0x7, 0x5, 0x2, 0x2, + 0x524, 0x554, 0x3, 0x2, 0x2, 0x2, 0x525, 0x526, 0x7, + 0x88, 0x2, 0x2, 0x526, 0x528, 0x7, 0x4, 0x2, 0x2, + 0x527, 0x529, 0x7, 0x24, 0x2, 0x2, 0x528, 0x527, 0x3, + 0x2, 0x2, 0x2, 0x528, 0x529, 0x3, 0x2, 0x2, 0x2, + 0x529, 0x52a, 0x3, 0x2, 0x2, 0x2, 0x52a, 0x52b, 0x5, + 0xbc, 0x5f, 0x2, 0x52b, 0x52c, 0x7, 0x5, 0x2, 0x2, + 0x52c, 0x554, 0x3, 0x2, 0x2, 0x2, 0x52d, 0x52e, 0x7, + 0x89, 0x2, 0x2, 0x52e, 0x530, 0x7, 0x4, 0x2, 0x2, + 0x52f, 0x531, 0x7, 0x24, 0x2, 0x2, 0x530, 0x52f, 0x3, + 0x2, 0x2, 0x2, 0x530, 0x531, 0x3, 0x2, 0x2, 0x2, + 0x531, 0x532, 0x3, 0x2, 0x2, 0x2, 0x532, 0x533, 0x5, + 0xbc, 0x5f, 0x2, 0x533, 0x534, 0x7, 0x5, 0x2, 0x2, + 0x534, 0x554, 0x3, 0x2, 0x2, 0x2, 0x535, 0x536, 0x7, + 0x8a, 0x2, 0x2, 0x536, 0x538, 0x7, 0x4, 0x2, 0x2, + 0x537, 0x539, 0x7, 0x24, 0x2, 0x2, 0x538, 0x537, 0x3, + 0x2, 0x2, 0x2, 0x538, 0x539, 0x3, 0x2, 0x2, 0x2, + 0x539, 0x53a, 0x3, 0x2, 0x2, 0x2, 0x53a, 0x53b, 0x5, + 0xbc, 0x5f, 0x2, 0x53b, 0x53c, 0x7, 0x5, 0x2, 0x2, + 0x53c, 0x554, 0x3, 0x2, 0x2, 0x2, 0x53d, 0x53e, 0x7, + 0x8b, 0x2, 0x2, 0x53e, 0x540, 0x7, 0x4, 0x2, 0x2, + 0x53f, 0x541, 0x7, 0x24, 0x2, 0x2, 0x540, 0x53f, 0x3, + 0x2, 0x2, 0x2, 0x540, 0x541, 0x3, 0x2, 0x2, 0x2, + 0x541, 0x542, 0x3, 0x2, 0x2, 0x2, 0x542, 0x543, 0x5, + 0xbc, 0x5f, 0x2, 0x543, 0x544, 0x7, 0x5, 0x2, 0x2, + 0x544, 0x554, 0x3, 0x2, 0x2, 0x2, 0x545, 0x546, 0x7, + 0x2e, 0x2, 0x2, 0x546, 0x548, 0x7, 0x4, 0x2, 0x2, + 0x547, 0x549, 0x7, 0x24, 0x2, 0x2, 0x548, 0x547, 0x3, + 0x2, 0x2, 0x2, 0x548, 0x549, 0x3, 0x2, 0x2, 0x2, + 0x549, 0x54a, 0x3, 0x2, 0x2, 0x2, 0x54a, 0x54f, 0x5, + 0xbc, 0x5f, 0x2, 0x54b, 0x54c, 0x7, 0xa, 0x2, 0x2, + 0x54c, 0x54d, 0x7, 0x8c, 0x2, 0x2, 0x54d, 0x54e, 0x7, + 0x16, 0x2, 0x2, 0x54e, 0x550, 0x5, 0xf0, 0x79, 0x2, + 0x54f, 0x54b, 0x3, 0x2, 0x2, 0x2, 0x54f, 0x550, 0x3, + 0x2, 0x2, 0x2, 0x550, 0x551, 0x3, 0x2, 0x2, 0x2, + 0x551, 0x552, 0x7, 0x5, 0x2, 0x2, 0x552, 0x554, 0x3, + 0x2, 0x2, 0x2, 0x553, 0x513, 0x3, 0x2, 0x2, 0x2, + 0x553, 0x51d, 0x3, 0x2, 0x2, 0x2, 0x553, 0x525, 0x3, + 0x2, 0x2, 0x2, 0x553, 0x52d, 0x3, 0x2, 0x2, 0x2, + 0x553, 0x535, 0x3, 0x2, 0x2, 0x2, 0x553, 0x53d, 0x3, + 0x2, 0x2, 0x2, 0x553, 0x545, 0x3, 0x2, 0x2, 0x2, + 0x554, 0xe1, 0x3, 0x2, 0x2, 0x2, 0x555, 0x557, 0x5, + 0xf2, 0x7a, 0x2, 0x556, 0x558, 0x5, 0x68, 0x35, 0x2, + 0x557, 0x556, 0x3, 0x2, 0x2, 0x2, 0x557, 0x558, 0x3, + 0x2, 0x2, 0x2, 0x558, 0xe3, 0x3, 0x2, 0x2, 0x2, + 0x559, 0x55d, 0x5, 0xf0, 0x79, 0x2, 0x55a, 0x55e, 0x7, + 0x93, 0x2, 0x2, 0x55b, 0x55c, 0x7, 0x1e, 0x2, 0x2, + 0x55c, 0x55e, 0x5, 0xf2, 0x7a, 0x2, 0x55d, 0x55a, 0x3, + 0x2, 0x2, 0x2, 0x55d, 0x55b, 0x3, 0x2, 0x2, 0x2, + 0x55d, 0x55e, 0x3, 0x2, 0x2, 0x2, 0x55e, 0xe5, 0x3, + 0x2, 0x2, 0x2, 0x55f, 0x563, 0x5, 0xe8, 0x75, 0x2, + 0x560, 0x563, 0x5, 0xea, 0x76, 0x2, 0x561, 0x563, 0x5, + 0xec, 0x77, 0x2, 0x562, 0x55f, 0x3, 0x2, 0x2, 0x2, + 0x562, 0x560, 0x3, 0x2, 0x2, 0x2, 0x562, 0x561, 0x3, + 0x2, 0x2, 0x2, 0x563, 0xe7, 0x3, 0x2, 0x2, 0x2, + 0x564, 0x565, 0x9, 0x6, 0x2, 0x2, 0x565, 0xe9, 0x3, + 0x2, 0x2, 0x2, 0x566, 0x567, 0x9, 0x7, 0x2, 0x2, + 0x567, 0xeb, 0x3, 0x2, 0x2, 0x2, 0x568, 0x569, 0x9, + 0x8, 0x2, 0x2, 0x569, 0xed, 0x3, 0x2, 0x2, 0x2, + 0x56a, 0x56b, 0x9, 0x9, 0x2, 0x2, 0x56b, 0xef, 0x3, + 0x2, 0x2, 0x2, 0x56c, 0x56d, 0x9, 0xa, 0x2, 0x2, + 0x56d, 0xf1, 0x3, 0x2, 0x2, 0x2, 0x56e, 0x570, 0x7, + 0x94, 0x2, 0x2, 0x56f, 0x56e, 0x3, 0x2, 0x2, 0x2, + 0x56f, 0x570, 0x3, 0x2, 0x2, 0x2, 0x570, 0x573, 0x3, + 0x2, 0x2, 0x2, 0x571, 0x574, 0x5, 0xf8, 0x7d, 0x2, + 0x572, 0x574, 0x5, 0xf4, 0x7b, 0x2, 0x573, 0x571, 0x3, + 0x2, 0x2, 0x2, 0x573, 0x572, 0x3, 0x2, 0x2, 0x2, + 0x574, 0xf3, 0x3, 0x2, 0x2, 0x2, 0x575, 0x578, 0x5, + 0xfa, 0x7e, 0x2, 0x576, 0x578, 0x5, 0xfc, 0x7f, 0x2, + 0x577, 0x575, 0x3, 0x2, 0x2, 0x2, 0x577, 0x576, 0x3, + 0x2, 0x2, 0x2, 0x578, 0xf5, 0x3, 0x2, 0x2, 0x2, + 0x579, 0x57a, 0x9, 0xb, 0x2, 0x2, 0x57a, 0xf7, 0x3, + 0x2, 0x2, 0x2, 0x57b, 0x57c, 0x7, 0x8d, 0x2, 0x2, + 0x57c, 0xf9, 0x3, 0x2, 0x2, 0x2, 0x57d, 0x57e, 0x7, + 0x8f, 0x2, 0x2, 0x57e, 0xfb, 0x3, 0x2, 0x2, 0x2, + 0x57f, 0x580, 0x7, 0x8e, 0x2, 0x2, 0x580, 0xfd, 0x3, + 0x2, 0x2, 0x2, 0x8b, 0x103, 0x10a, 0x10c, 0x11a, 0x127, + 0x12c, 0x12f, 0x133, 0x142, 0x14b, 0x151, 0x155, 0x15b, 0x15e, + 0x163, 0x167, 0x16f, 0x178, 0x182, 0x187, 0x18a, 0x18d, 0x190, + 0x196, 0x19e, 0x1a3, 0x1a9, 0x1b1, 0x1b7, 0x1b9, 0x1bd, 0x1c0, + 0x1c4, 0x1c7, 0x1cb, 0x1ce, 0x1d2, 0x1d5, 0x1d9, 0x1dc, 0x1e0, + 0x1e3, 0x1e5, 0x1f2, 0x1f7, 0x1f9, 0x1fe, 0x203, 0x208, 0x20d, + 0x210, 0x215, 0x217, 0x221, 0x22c, 0x23d, 0x244, 0x24e, 0x252, + 0x258, 0x261, 0x266, 0x26d, 0x277, 0x280, 0x288, 0x28f, 0x294, + 0x29d, 0x2a2, 0x2a6, 0x2ad, 0x2af, 0x2b7, 0x2ba, 0x2c2, 0x2c6, + 0x2cb, 0x2d2, 0x2dd, 0x2e0, 0x2e5, 0x2e9, 0x2f8, 0x2ff, 0x30b, + 0x313, 0x318, 0x31d, 0x329, 0x332, 0x335, 0x338, 0x33f, 0x341, + 0x347, 0x34f, 0x359, 0x361, 0x367, 0x36b, 0x36f, 0x373, 0x37d, + 0x386, 0x38e, 0x3a5, 0x3af, 0x3b1, 0x3b6, 0x3bc, 0x3be, 0x3c6, + 0x3c8, 0x3d2, 0x3db, 0x40d, 0x4e7, 0x4f0, 0x4fb, 0x508, 0x516, + 0x51a, 0x520, 0x528, 0x530, 0x538, 0x540, 0x548, 0x54f, 0x553, + 0x557, 0x55d, 0x562, 0x56f, 0x573, 0x577, }; _serializedATN.insert( diff --git a/src/parser/sparqlParser/generated/SparqlAutomaticParser.h b/src/parser/sparqlParser/generated/SparqlAutomaticParser.h index 633a3da98d..0ff654af47 100644 --- a/src/parser/sparqlParser/generated/SparqlAutomaticParser.h +++ b/src/parser/sparqlParser/generated/SparqlAutomaticParser.h @@ -217,98 +217,99 @@ class SparqlAutomaticParser : public antlr4::Parser { RuleTriplesTemplate = 30, RuleGroupGraphPattern = 31, RuleGroupGraphPatternSub = 32, - RuleTriplesBlock = 33, - RuleGraphPatternNotTriples = 34, - RuleOptionalGraphPattern = 35, - RuleGraphGraphPattern = 36, - RuleServiceGraphPattern = 37, - RuleBind = 38, - RuleInlineData = 39, - RuleDataBlock = 40, - RuleInlineDataOneVar = 41, - RuleInlineDataFull = 42, - RuleDataBlockSingle = 43, - RuleDataBlockValue = 44, - RuleMinusGraphPattern = 45, - RuleGroupOrUnionGraphPattern = 46, - RuleFilterR = 47, - RuleConstraint = 48, - RuleFunctionCall = 49, - RuleArgList = 50, - RuleExpressionList = 51, - RuleConstructTemplate = 52, - RuleConstructTriples = 53, - RuleTriplesSameSubject = 54, - RulePropertyList = 55, - RulePropertyListNotEmpty = 56, - RuleVerb = 57, - RuleObjectList = 58, - RuleObjectR = 59, - RuleTriplesSameSubjectPath = 60, - RulePropertyListPath = 61, - RulePropertyListPathNotEmpty = 62, - RuleVerbPath = 63, - RuleVerbSimple = 64, - RuleTupleWithoutPath = 65, - RuleTupleWithPath = 66, - RuleVerbPathOrSimple = 67, - RuleObjectListPath = 68, - RuleObjectPath = 69, - RulePath = 70, - RulePathAlternative = 71, - RulePathSequence = 72, - RulePathElt = 73, - RulePathEltOrInverse = 74, - RulePathMod = 75, - RulePathPrimary = 76, - RulePathNegatedPropertySet = 77, - RulePathOneInPropertySet = 78, - RuleInteger = 79, - RuleTriplesNode = 80, - RuleBlankNodePropertyList = 81, - RuleTriplesNodePath = 82, - RuleBlankNodePropertyListPath = 83, - RuleCollection = 84, - RuleCollectionPath = 85, - RuleGraphNode = 86, - RuleGraphNodePath = 87, - RuleVarOrTerm = 88, - RuleVarOrIri = 89, - RuleVar = 90, - RuleGraphTerm = 91, - RuleExpression = 92, - RuleConditionalOrExpression = 93, - RuleConditionalAndExpression = 94, - RuleValueLogical = 95, - RuleRelationalExpression = 96, - RuleNumericExpression = 97, - RuleAdditiveExpression = 98, - RuleStrangeMultiplicativeSubexprOfAdditive = 99, - RuleMultiplicativeExpression = 100, - RuleUnaryExpression = 101, - RulePrimaryExpression = 102, - RuleBrackettedExpression = 103, - RuleBuiltInCall = 104, - RuleRegexExpression = 105, - RuleSubstringExpression = 106, - RuleStrReplaceExpression = 107, - RuleExistsFunc = 108, - RuleNotExistsFunc = 109, - RuleAggregate = 110, - RuleIriOrFunction = 111, - RuleRdfLiteral = 112, - RuleNumericLiteral = 113, - RuleNumericLiteralUnsigned = 114, - RuleNumericLiteralPositive = 115, - RuleNumericLiteralNegative = 116, - RuleBooleanLiteral = 117, - RuleString = 118, - RuleIri = 119, - RulePrefixedName = 120, - RuleBlankNode = 121, - RuleIriref = 122, - RulePnameLn = 123, - RulePnameNs = 124 + RuleGraphPatternNotTriplesAndMaybeTriples = 33, + RuleTriplesBlock = 34, + RuleGraphPatternNotTriples = 35, + RuleOptionalGraphPattern = 36, + RuleGraphGraphPattern = 37, + RuleServiceGraphPattern = 38, + RuleBind = 39, + RuleInlineData = 40, + RuleDataBlock = 41, + RuleInlineDataOneVar = 42, + RuleInlineDataFull = 43, + RuleDataBlockSingle = 44, + RuleDataBlockValue = 45, + RuleMinusGraphPattern = 46, + RuleGroupOrUnionGraphPattern = 47, + RuleFilterR = 48, + RuleConstraint = 49, + RuleFunctionCall = 50, + RuleArgList = 51, + RuleExpressionList = 52, + RuleConstructTemplate = 53, + RuleConstructTriples = 54, + RuleTriplesSameSubject = 55, + RulePropertyList = 56, + RulePropertyListNotEmpty = 57, + RuleVerb = 58, + RuleObjectList = 59, + RuleObjectR = 60, + RuleTriplesSameSubjectPath = 61, + RulePropertyListPath = 62, + RulePropertyListPathNotEmpty = 63, + RuleVerbPath = 64, + RuleVerbSimple = 65, + RuleTupleWithoutPath = 66, + RuleTupleWithPath = 67, + RuleVerbPathOrSimple = 68, + RuleObjectListPath = 69, + RuleObjectPath = 70, + RulePath = 71, + RulePathAlternative = 72, + RulePathSequence = 73, + RulePathElt = 74, + RulePathEltOrInverse = 75, + RulePathMod = 76, + RulePathPrimary = 77, + RulePathNegatedPropertySet = 78, + RulePathOneInPropertySet = 79, + RuleInteger = 80, + RuleTriplesNode = 81, + RuleBlankNodePropertyList = 82, + RuleTriplesNodePath = 83, + RuleBlankNodePropertyListPath = 84, + RuleCollection = 85, + RuleCollectionPath = 86, + RuleGraphNode = 87, + RuleGraphNodePath = 88, + RuleVarOrTerm = 89, + RuleVarOrIri = 90, + RuleVar = 91, + RuleGraphTerm = 92, + RuleExpression = 93, + RuleConditionalOrExpression = 94, + RuleConditionalAndExpression = 95, + RuleValueLogical = 96, + RuleRelationalExpression = 97, + RuleNumericExpression = 98, + RuleAdditiveExpression = 99, + RuleStrangeMultiplicativeSubexprOfAdditive = 100, + RuleMultiplicativeExpression = 101, + RuleUnaryExpression = 102, + RulePrimaryExpression = 103, + RuleBrackettedExpression = 104, + RuleBuiltInCall = 105, + RuleRegexExpression = 106, + RuleSubstringExpression = 107, + RuleStrReplaceExpression = 108, + RuleExistsFunc = 109, + RuleNotExistsFunc = 110, + RuleAggregate = 111, + RuleIriOrFunction = 112, + RuleRdfLiteral = 113, + RuleNumericLiteral = 114, + RuleNumericLiteralUnsigned = 115, + RuleNumericLiteralPositive = 116, + RuleNumericLiteralNegative = 117, + RuleBooleanLiteral = 118, + RuleString = 119, + RuleIri = 120, + RulePrefixedName = 121, + RuleBlankNode = 122, + RuleIriref = 123, + RulePnameLn = 124, + RulePnameNs = 125 }; explicit SparqlAutomaticParser(antlr4::TokenStream* input); @@ -355,6 +356,7 @@ class SparqlAutomaticParser : public antlr4::Parser { class TriplesTemplateContext; class GroupGraphPatternContext; class GroupGraphPatternSubContext; + class GraphPatternNotTriplesAndMaybeTriplesContext; class TriplesBlockContext; class GraphPatternNotTriplesContext; class OptionalGraphPatternContext; @@ -1025,10 +1027,11 @@ class SparqlAutomaticParser : public antlr4::Parser { GroupGraphPatternSubContext(antlr4::ParserRuleContext* parent, size_t invokingState); virtual size_t getRuleIndex() const override; - std::vector triplesBlock(); - TriplesBlockContext* triplesBlock(size_t i); - std::vector graphPatternNotTriples(); - GraphPatternNotTriplesContext* graphPatternNotTriples(size_t i); + TriplesBlockContext* triplesBlock(); + std::vector + graphPatternNotTriplesAndMaybeTriples(); + GraphPatternNotTriplesAndMaybeTriplesContext* + graphPatternNotTriplesAndMaybeTriples(size_t i); virtual void enterRule(antlr4::tree::ParseTreeListener* listener) override; virtual void exitRule(antlr4::tree::ParseTreeListener* listener) override; @@ -1039,6 +1042,25 @@ class SparqlAutomaticParser : public antlr4::Parser { GroupGraphPatternSubContext* groupGraphPatternSub(); + class GraphPatternNotTriplesAndMaybeTriplesContext + : public antlr4::ParserRuleContext { + public: + GraphPatternNotTriplesAndMaybeTriplesContext( + antlr4::ParserRuleContext* parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + GraphPatternNotTriplesContext* graphPatternNotTriples(); + TriplesBlockContext* triplesBlock(); + + virtual void enterRule(antlr4::tree::ParseTreeListener* listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener* listener) override; + + virtual antlrcpp::Any accept( + antlr4::tree::ParseTreeVisitor* visitor) override; + }; + + GraphPatternNotTriplesAndMaybeTriplesContext* + graphPatternNotTriplesAndMaybeTriples(); + class TriplesBlockContext : public antlr4::ParserRuleContext { public: TriplesBlockContext(antlr4::ParserRuleContext* parent, diff --git a/src/parser/sparqlParser/generated/SparqlAutomaticVisitor.h b/src/parser/sparqlParser/generated/SparqlAutomaticVisitor.h index 1f711f9666..a7522e0678 100644 --- a/src/parser/sparqlParser/generated/SparqlAutomaticVisitor.h +++ b/src/parser/sparqlParser/generated/SparqlAutomaticVisitor.h @@ -114,6 +114,10 @@ class SparqlAutomaticVisitor : public antlr4::tree::AbstractParseTreeVisitor { virtual antlrcpp::Any visitGroupGraphPatternSub( SparqlAutomaticParser::GroupGraphPatternSubContext* context) = 0; + virtual antlrcpp::Any visitGraphPatternNotTriplesAndMaybeTriples( + SparqlAutomaticParser::GraphPatternNotTriplesAndMaybeTriplesContext* + context) = 0; + virtual antlrcpp::Any visitTriplesBlock( SparqlAutomaticParser::TriplesBlockContext* context) = 0; diff --git a/src/util/Algorithm.h b/src/util/Algorithm.h index c731d2e9a6..286b1f55eb 100644 --- a/src/util/Algorithm.h +++ b/src/util/Algorithm.h @@ -5,6 +5,11 @@ #ifndef QLEVER_ALGORITHM_H #define QLEVER_ALGORITHM_H +#include + +#include "util/TypeTraits.h" + +// TODO: Test the algorithms. namespace ad_utility { /** @@ -33,6 +38,54 @@ bool contains_if(const Container& container, const Predicate& predicate) { container.end(); } +/** + * Appends the second vector to the first one. + * + * @param destination Vector& to which to append + * @param source Vector&& to append + */ +template > U> +void appendVector(std::vector& destination, U&& source) { + if constexpr (std::is_rvalue_reference_v) { + destination.insert(destination.end(), + std::make_move_iterator(source.begin()), + std::make_move_iterator(source.end())); + } else { + destination.insert(destination.end(), source.begin(), source.end()); + } +} + +/** + * Applies the UnaryOperation to all elements of the vector and return a new + * vector which contains the results. + */ +template > +std::vector transform(std::vector&& input, F unaryOp) { + std::vector out; + out.reserve(input.size()); + std::transform(std::make_move_iterator(input.begin()), + std::make_move_iterator(input.end()), std::back_inserter(out), + unaryOp); + return out; +} + +/** + * Flatten a vector> into a vector. + */ +template +std::vector flatten(std::vector>&& input) { + std::vector out; + // Reserve the total required space. It is the sum of all the vectors lengths. + out.reserve(std::accumulate( + input.begin(), input.end(), 0, + [](size_t i, const std::vector& elem) { return i + elem.size(); })); + for (std::vector sub : input) { + appendVector(out, std::move(sub)); + } + return out; +} + } // namespace ad_utility #endif // QLEVER_ALGORITHM_H diff --git a/test/CompactStringVectorTest.cpp b/test/CompactStringVectorTest.cpp index ef8e45f219..07370b79b5 100644 --- a/test/CompactStringVectorTest.cpp +++ b/test/CompactStringVectorTest.cpp @@ -86,20 +86,21 @@ TEST(CompactVectorOfStrings, IteratorCategory) { TEST(CompactVectorOfStrings, Serialization) { auto testSerialization = [](const V&, auto& input) { + const std::string filename = "_writerTest1.dat"; { V vector; vector.build(input); - ad_utility::serialization::FileWriteSerializer ser{"_writerTest.dat"}; + ad_utility::serialization::FileWriteSerializer ser{filename}; ser << vector; } // The destructor finishes writing the file. V vector; - ad_utility::serialization::FileReadSerializer ser{"_writerTest.dat"}; + ad_utility::serialization::FileReadSerializer ser{filename}; ser >> vector; vectorsEqual(input, vector); - ad_utility::deleteFile("_writerTest.dat"); + ad_utility::deleteFile(filename); }; testSerialization(CompactVectorChar{}, strings); @@ -108,20 +109,21 @@ TEST(CompactVectorOfStrings, Serialization) { TEST(CompactVectorOfStrings, SerializationWithPush) { auto testSerializationWithPush = [](const V&, auto& inputVector) { + const std::string filename = "_writerTest2.dat"; { - typename V::Writer writer{"_writerTest.dat"}; + typename V::Writer writer{filename}; for (const auto& s : inputVector) { writer.push(s.data(), s.size()); } } // The constructor finishes writing the file. V compactVector; - ad_utility::serialization::FileReadSerializer ser{"_writerTest.dat"}; + ad_utility::serialization::FileReadSerializer ser{filename}; ser >> compactVector; vectorsEqual(inputVector, compactVector); - ad_utility::deleteFile("_writerTest.dat"); + ad_utility::deleteFile(filename); }; testSerializationWithPush(CompactVectorChar{}, strings); testSerializationWithPush(CompactVectorInt{}, ints); @@ -129,7 +131,7 @@ TEST(CompactVectorOfStrings, SerializationWithPush) { TEST(CompactVectorOfStrings, SerializationWithPushMiddleOfFile) { auto testSerializationWithPush = [](const V&, auto& inputVector) { - std::string filename = "_writerTest.dat"; + const std::string filename = "_writerTest3.dat"; { ad_utility::serialization::FileWriteSerializer fileWriter{filename}; fileWriter << 42; @@ -143,7 +145,7 @@ TEST(CompactVectorOfStrings, SerializationWithPushMiddleOfFile) { } V compactVector; - ad_utility::serialization::FileReadSerializer ser{"_writerTest.dat"}; + ad_utility::serialization::FileReadSerializer ser{filename}; int i = 0; ser >> i; ASSERT_EQ(42, i); @@ -153,7 +155,7 @@ TEST(CompactVectorOfStrings, SerializationWithPushMiddleOfFile) { vectorsEqual(inputVector, compactVector); - ad_utility::deleteFile("_writerTest.dat"); + ad_utility::deleteFile(filename); }; testSerializationWithPush(CompactVectorChar{}, strings); testSerializationWithPush(CompactVectorInt{}, ints); @@ -161,21 +163,22 @@ TEST(CompactVectorOfStrings, SerializationWithPushMiddleOfFile) { TEST(CompactVectorOfStrings, DiskIterator) { auto testDiskIterator = [](const V&, auto& inputVector) { + const std::string filename = "_writerTest4.dat"; { - typename V::Writer writer{"_writerTest.dat"}; + typename V::Writer writer{filename}; for (const auto& s : inputVector) { writer.push(s.data(), s.size()); } } // The constructor finishes writing the file. - auto iterator = V::diskIterator("_writerTest.dat"); + auto iterator = V::diskIterator(filename); size_t i = 0; for (const auto& el : iterator) { ASSERT_EQ(el, inputVector[i++]); } ASSERT_EQ(i, inputVector.size()); - ad_utility::deleteFile("_writerTest.dat"); + ad_utility::deleteFile(filename); }; testDiskIterator(CompactVectorChar{}, strings); testDiskIterator(CompactVectorInt{}, ints); diff --git a/test/ParseExceptionTest.cpp b/test/ParseExceptionTest.cpp index 8c922a7521..2af1cc207c 100644 --- a/test/ParseExceptionTest.cpp +++ b/test/ParseExceptionTest.cpp @@ -6,6 +6,8 @@ #include #include +#include "SparqlAntlrParserTestHelpers.h" + TEST(ParseException, coloredError) { auto exampleQuery = "SELECT A ?var WHERE"; EXPECT_EQ((ExceptionMetadata{exampleQuery, 7, 7}).coloredError(), @@ -33,7 +35,7 @@ TEST(ParseException, MetadataGeneration) { } catch (const ParseException& e) { EXPECT_TRUE(e.metadata().has_value()); EXPECT_EQ(e.metadata().value(), - (ExceptionMetadata{"?a a:b ?b }", 4, 6})); + (ExceptionMetadata{"where { ?a a:b ?b }", 12, 14})); } } } diff --git a/test/SparqlAntlrParserTest.cpp b/test/SparqlAntlrParserTest.cpp index e9ddac82b9..0274cce5cc 100644 --- a/test/SparqlAntlrParserTest.cpp +++ b/test/SparqlAntlrParserTest.cpp @@ -1,20 +1,18 @@ -// -// Created by johannes on 08.05.21. -// +// Copyright 2021, University of Freiburg, +// Chair of Algorithms and Data Structures. +// Authors: +// 2021- Johannes Kalmbach (kalmbach@informatik.uni-freiburg.de) +// 2022 Julian Mundhahs (mundhahj@tf.uni-freiburg.de) -#include #include #include #include #include -#include "../../src/parser/sparqlParser/SparqlQleverVisitor.h" -#include "../src/parser/SparqlParserHelpers.h" -#include "../src/parser/data/Types.h" -#include "../src/parser/sparqlParser/generated/SparqlAutomaticLexer.h" -#include "../src/util/antlr/ANTLRErrorHandling.h" #include "SparqlAntlrParserTestHelpers.h" +#include "parser/SparqlParserHelpers.h" +#include "parser/sparqlParser/SparqlQleverVisitor.h" using namespace sparqlParserHelpers; using Parser = SparqlAutomaticParser; @@ -32,6 +30,7 @@ auto parseDataBlock = parse<&Parser::dataBlock>; auto parseExpression = parse<&Parser::expression>; auto parseGroupClause = parse<&Parser::groupClause>; auto parseGroupCondition = parse<&Parser::groupCondition>; +auto parseGroupGraphPattern = parse<&Parser::groupGraphPattern>; auto parseHavingCondition = parse<&Parser::havingCondition>; auto parseInlineData = parse<&Parser::inlineData>; auto parseIri = parse<&Parser::iri>; @@ -917,7 +916,7 @@ TEST(SparqlParser, InlineData) { const vector>& expectedVals) { expectCompleteParse( parseInlineData(input, SparqlQleverVisitor::PrefixMap{}), - IsValues(expectedVars, expectedVals)); + IsInlineData(expectedVars, expectedVals)); }; expectInlineData("VALUES ?test { \"foo\" }", {"?test"}, {{"\"foo\""}}); // There must always be a block present for InlineData @@ -1139,3 +1138,144 @@ TEST(SparqlParser, HavingCondition) { {SparqlFilter::LT, "?predicate", "\" +void expectGroupGraphPatternFails(const string& input) { + EXPECT_THROW(parseGroupGraphPattern(input), Exception) << input; +} +} // namespace + +TEST(SparqlParser, GroupGraphPattern) { + // The types of arguments to gmock matchers are automatically deduced. We + // explicitly specify the types here. This e.g. allows to write + // Triples({{"?a", "?b", "?c"}}) instead of + // IsTriples(vector{SparqlTriple{"?a", "?b", "?c"}}). + auto Triples = [](vector&& triples) { + return IsTriples(triples); + }; + auto Bind = [](const string& target, const string& expression) { + return IsBind(target, expression); + }; + auto InlineData = [](vector&& expectedVars, + vector>&& expectedVals) { + return IsInlineData(expectedVars, expectedVals); + }; + auto GraphPattern = [](bool optional, vector&& filters, + const auto&... childMatchers) { + return IsGraphPattern(optional, filters, std::tuple{childMatchers...}); + }; + auto Optional = [](vector&& filters, + const auto&... childMatchers) { + return IsOptional( + IsGraphPattern(true, filters, std::tuple{childMatchers...})); + }; + auto Minus = [](vector&& filters, + const auto&... childMatchers) { + return IsMinus( + IsGraphPattern(false, filters, std::tuple{childMatchers...})); + }; + + auto expectGraphPattern = [](const string&& input, const auto& matcher) { + expectCompleteParse( + parseGroupGraphPattern( + input, + SparqlQleverVisitor::PrefixMap{{INTERNAL_PREDICATE_PREFIX_NAME, + INTERNAL_PREDICATE_PREFIX_IRI}}), + matcher); + }; + + // Test the Components alone. + expectGraphPattern("{ }", GraphPattern(false, {})); + expectGraphPattern( + "{ { ?a ?b ?c } }", + GraphPattern( + false, {}, + IsGroup(GraphPattern(false, {}, Triples({{"?a", "?b", "?c"}}))))); + expectGraphPattern( + "{ { ?a ?b ?c } UNION { ?d ?e ?f } }", + GraphPattern( + false, {}, + IsUnion(GraphPattern(false, {}, Triples({{"?a", "?b", "?c"}})), + GraphPattern(false, {}, Triples({{"?d", "?e", "?f"}}))))); + expectGraphPattern( + "{ { ?a ?b ?c } UNION { ?d ?e ?f } UNION { ?g ?h ?i } }", + GraphPattern( + false, {}, + IsUnion( + GraphPattern( + false, {}, + IsUnion( + GraphPattern(false, {}, Triples({{"?a", "?b", "?c"}})), + GraphPattern(false, {}, Triples({{"?d", "?e", "?f"}})))), + GraphPattern(false, {}, Triples({{"?g", "?h", "?i"}}))))); + expectGraphPattern( + "{ OPTIONAL { ?a } }", + GraphPattern(false, {}, + Optional({}, Triples({{"?a", "", ""}})))); + expectGraphPattern( + "{ MINUS { ?a } }", + GraphPattern(false, {}, Minus({}, Triples({{"?a", "", ""}})))); + expectGraphPattern( + "{ FILTER (?a = 10) }", + GraphPattern(false, {{SparqlFilter::FilterType::EQ, "?a", "10"}})); + expectGraphPattern("{ BIND (?f - ?b as ?c) }", + GraphPattern(false, {}, Bind("?c", "?f-?b"))); + expectGraphPattern("{ VALUES (?a ?b) { ( ) ( ) } }", + GraphPattern(false, {}, + InlineData({"?a", "?b"}, {{"", ""}, + {"", ""}}))); + expectGraphPattern("{ ?x ?y ?z }", + GraphPattern(false, {}, Triples({{"?x", "?y", "?z"}}))); + expectGraphPattern("{ SELECT * WHERE { } }", + GraphPattern(false, {}, + IsSubSelect(IsAsteriskSelect(false, false), + GraphPattern(false, {})))); + // Test mixes of the components to make sure that they interact correctly. + expectGraphPattern( + "{ ?x ?y ?z ; ?f }", + GraphPattern(false, {}, + Triples({{"?x", "?y", "?z"}, {"?x", "?f", ""}}))); + expectGraphPattern( + "{ ?x ?y ?z . ?f }", + GraphPattern(false, {}, + Triples({{"?x", "?y", "?z"}, {"", "?f", ""}}))); + expectGraphPattern( + "{ ?x . FILTER(?x != ?y) . ?y . " + "FILTER(?y < ?x) }", + GraphPattern( + false, + {{SparqlFilter::FilterType::NE, "?x", "?y"}, + {SparqlFilter::FilterType::LT, "?y", "?x"}}, + Triples({{"?x", "", ""}, {"?y", "", ""}}))); + expectGraphPattern( + "{?x . FILTER(?x != ?y) . ?y . ?c " + "ql:contains-entity ?x . ?c ql:contains-word \"coca* abuse\"}", + GraphPattern(false, {{SparqlFilter::FilterType::NE, "?x", "?y"}}, + Triples({{"?x", "", ""}, + {"?y", "", ""}, + {"?c", CONTAINS_ENTITY_PREDICATE, "?x"}, + {"?c", CONTAINS_WORD_PREDICATE, "coca* abuse"}}))); + expectGraphPattern( + "{?x . BIND(10 - ?foo as ?y) }", + GraphPattern(false, {}, Triples({{"?x", "", ""}}), + Bind("?y", "10-?foo"))); + expectGraphPattern( + "{?x . BIND(10 - ?foo as ?y) . ?a ?b ?c }", + GraphPattern(false, {}, Triples({{"?x", "", ""}}), + Bind("?y", "10-?foo"), Triples({{"?a", "?b", "?c"}}))); + expectGraphPattern( + "{?x . OPTIONAL { ?x } }", + GraphPattern(false, {}, Triples({{"?x", "", ""}}), + Optional({}, Triples({{"?x", "", ""}})))); + expectGraphPattern("{ SELECT * WHERE { } VALUES ?a { } }", + GraphPattern(false, {}, + IsSubSelect(IsAsteriskSelect(false, false), + GraphPattern(false, {})), + InlineData({"?a"}, {{""}, {""}}))); + // graphGraphPattern and serviceGraphPattern are not supported. + expectGroupGraphPatternFails("{ GRAPH ?a { } }"); + expectGroupGraphPatternFails("{ GRAPH { } }"); + expectGroupGraphPatternFails("{ SERVICE { } }"); + expectGroupGraphPatternFails("{ SERVICE SILENT ?bar { } }"); +} diff --git a/test/SparqlAntlrParserTestHelpers.h b/test/SparqlAntlrParserTestHelpers.h index 6dae5488f7..23cda29a71 100644 --- a/test/SparqlAntlrParserTestHelpers.h +++ b/test/SparqlAntlrParserTestHelpers.h @@ -6,9 +6,10 @@ #include -#include "../src/parser/Alias.h" -#include "../src/parser/data/VarOrTerm.h" -#include "../src/util/TypeTraits.h" +#include "parser/Alias.h" +#include "parser/ParsedQuery.h" +#include "parser/data/VarOrTerm.h" +#include "util/TypeTraits.h" // Not relevant for the actual test logic, but provides // human-readable output if a test fails. @@ -92,6 +93,14 @@ std::ostream& operator<<( // _____________________________________________________________________________ +std::ostream& operator<<(std::ostream& out, const ExceptionMetadata& metadata) { + out << "ExceptionMetadata(\"" << metadata.query_ << "\", " + << metadata.startIndex_ << ", " << metadata.stopIndex_ << ")"; + return out; +} + +// _____________________________________________________________________________ + // Recursively unwrap a std::variant object, or return a pointer // to the argument directly if it is already unwrapped. @@ -190,8 +199,9 @@ MATCHER_P(IsLiteral, value, "") { // _____________________________________________________________________________ MATCHER_P2(IsBind, variable, expression, "") { - return (arg._target == variable) && - (arg._expression.getDescriptor() == expression); + auto bind = std::get_if(&arg.variant_); + return bind && (bind->_target == variable) && + (bind->_expression.getDescriptor() == expression); } MATCHER_P(IsBindExpression, expression, "") { @@ -259,6 +269,14 @@ MATCHER_P2(IsValues, vars, values, "") { (arg._inlineValues._values == values); } +MATCHER_P2(IsInlineData, vars, values, "") { + // TODO Refactor GraphPatternOperation::Values / SparqlValues s.t. this + // becomes a trivial Eq matcher. + auto valuesBlock = std::get_if(&arg.variant_); + return valuesBlock && (valuesBlock->_inlineValues._variables == vars) && + (valuesBlock->_inlineValues._values == values); +} + MATCHER_P2(IsAsteriskSelect, distinct, reduced, "") { return arg._distinct == distinct && arg._reduced == reduced && arg.isAsterisk() && arg.getAliases().empty(); @@ -324,3 +342,58 @@ MATCHER_P4(IsSolutionModifier, groupByVariables, havingClauses, orderBy, orderKeyComp) && arg.limitOffset_ == limitOffset; } + +MATCHER_P(IsTriples, triples, "") { + auto triplesValue = + std::get_if(&arg.variant_); + return triplesValue && testing::Matches(testing::UnorderedElementsAreArray( + triples))(triplesValue->_triples); +} + +MATCHER_P(IsOptional, subMatcher, "") { + auto optional = std::get_if(&arg.variant_); + return optional && testing::Value(optional->_child, subMatcher); +} + +MATCHER_P(IsGroup, subMatcher, "") { + auto group = + std::get_if(&arg.variant_); + return group && testing::Value(group->_child, subMatcher); +} + +MATCHER_P2(IsUnion, subMatcher1, subMatcher2, "") { + auto unio = std::get_if(&arg.variant_); + return unio && testing::Value(unio->_child1, subMatcher1) && + testing::Value(unio->_child2, subMatcher2); +} + +MATCHER_P(IsMinus, subMatcher, "") { + auto minus = std::get_if(&arg.variant_); + return minus && testing::Value(minus->_child, subMatcher); +} + +MATCHER_P3(IsGraphPattern, optional, filters, childMatchers, "") { + if (arg._graphPatterns.size() != std::tuple_size_v) { + return false; + } + + // TODO I think there is a `tupleForEach` function somewhere + // in `util/xxx.h` that could be used to make this eve more idiomatic. + auto lambda = [&](auto&&... matchers) { + size_t i = 0; + return (... && testing::Value(arg._graphPatterns[i++], matchers)); + }; + bool childrenMatch = std::apply(lambda, childMatchers); + + return arg._optional == optional && + testing::Value(arg._filters, + testing::UnorderedElementsAreArray(filters)) && + childrenMatch; +} + +MATCHER_P2(IsSubSelect, selectMatcher, whereMatcher, "") { + auto query = std::get_if(&arg.variant_); + return query && query->_subquery.hasSelectClause() && + testing::Value(query->_subquery.selectClause(), selectMatcher) && + testing::Value(query->_subquery._rootGraphPattern, whereMatcher); +} diff --git a/test/SparqlParserTest.cpp b/test/SparqlParserTest.cpp index ae7f25083c..39cb126fb4 100644 --- a/test/SparqlParserTest.cpp +++ b/test/SparqlParserTest.cpp @@ -556,8 +556,10 @@ TEST(ParserTest, testParse) { ASSERT_EQ(vvars, sc.getSelectedVariablesAsStrings()); // -- SubQuery - auto parsed_sub_query = get( + auto subQueryGroup = get( pq._rootGraphPattern._graphPatterns[1].variant_); + auto parsed_sub_query = get( + subQueryGroup._child._graphPatterns[0].variant_); const auto& c_subquery = get( parsed_sub_query._subquery._rootGraphPattern._graphPatterns[0] .variant_); @@ -641,8 +643,10 @@ TEST(ParserTest, testParse) { ASSERT_EQ(vvars, sc.getSelectedVariablesAsStrings()); // -- SubQuery (level 1) - auto parsed_sub_query = get( + auto subQueryGroup = get( pq._rootGraphPattern._graphPatterns[1].variant_); + auto parsed_sub_query = get( + subQueryGroup._child._graphPatterns[0].variant_); const auto& c_subquery = get( parsed_sub_query._subquery._rootGraphPattern._graphPatterns[0] .variant_); @@ -675,21 +679,17 @@ TEST(ParserTest, testParse) { ASSERT_EQ(vvars_subquery, sc_subquery.getSelectedVariablesAsStrings()); // -- SubQuery (level 2) - auto parsed_sub_sub_query = get( - pq._rootGraphPattern._graphPatterns[1].variant_); - const auto& c_sub_subquery = - get( - get( - parsed_sub_sub_query._subquery._rootGraphPattern - ._graphPatterns[1] - .variant_) - ._subquery._rootGraphPattern._graphPatterns[0] - .variant_); + auto subsubQueryGroup = get( + parsed_sub_query._subquery._rootGraphPattern._graphPatterns[1] + .variant_); auto aux_parsed_sub_sub_query = get( - parsed_sub_sub_query._subquery._rootGraphPattern._graphPatterns[1] - .variant_) + subsubQueryGroup._child._graphPatterns[0].variant_) ._subquery; + const auto& c_sub_subquery = + get( + aux_parsed_sub_sub_query._rootGraphPattern._graphPatterns[0] + .variant_); ASSERT_EQ(1u, c_sub_subquery._triples.size()); ASSERT_EQ(0u, aux_parsed_sub_sub_query._rootGraphPattern._filters.size()); ASSERT_EQ(0, aux_parsed_sub_sub_query._limitOffset._offset); @@ -1294,12 +1294,9 @@ TEST(ParserTest, Group) { "SELECT ?x WHERE { ?x ?y } GROUP BY (?x " "- ?y AS ?foo) ?x") .parse(); - auto variant = pq._rootGraphPattern._graphPatterns[1].variant_; - ASSERT_TRUE(holds_alternative(variant)); - auto helperBind = get(variant); - EXPECT_THAT(helperBind, IsBind("?foo", "?x-?y")); - EXPECT_THAT( - pq, GroupByVariablesMatch>({helperBind._target, "?x"})); + EXPECT_THAT(pq._rootGraphPattern._graphPatterns[1], + IsBind("?foo", "?x-?y")); + EXPECT_THAT(pq, GroupByVariablesMatch>({"?foo", "?x"})); } { // grouping by a builtin call