aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-01-02 20:48:34 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-01-02 20:58:20 +0100
commit00de4660a75a9d89c98778cf84f94075b7eef0b9 (patch)
tree99cd35a8ebf8779450ae89da0178406179ae4e33
parentbe5778fa90586abd431fc02375870d71d2e3ba78 (diff)
downloadPROJ-00de4660a75a9d89c98778cf84f94075b7eef0b9.tar.gz
PROJ-00de4660a75a9d89c98778cf84f94075b7eef0b9.zip
WKT CONCATENATEDOPERATION parsing: allow CONVERSION steps and reverse operations when neededs (fixes #1197)
-rw-r--r--include/proj/coordinateoperation.hpp29
-rw-r--r--src/iso19111/coordinateoperation.cpp157
-rw-r--r--src/iso19111/factory.cpp117
-rw-r--r--src/iso19111/io.cpp73
-rw-r--r--src/wkt2_generated_parser.c1760
-rw-r--r--src/wkt2_grammar.y2
-rw-r--r--test/unit/test_factory.cpp3
-rw-r--r--test/unit/test_io.cpp470
8 files changed, 1626 insertions, 985 deletions
diff --git a/include/proj/coordinateoperation.hpp b/include/proj/coordinateoperation.hpp
index e64afbe7..80e04577 100644
--- a/include/proj/coordinateoperation.hpp
+++ b/include/proj/coordinateoperation.hpp
@@ -155,6 +155,7 @@ class PROJ_GCC_DLL CoordinateOperation : public common::ObjectUsage,
PROJ_FRIEND(crs::DerivedCRS);
PROJ_FRIEND(io::AuthorityFactory);
PROJ_FRIEND(CoordinateOperationFactory);
+ PROJ_FRIEND(ConcatenatedOperation);
PROJ_INTERNAL void
setWeakSourceTargetCRS(std::weak_ptr<crs::CRS> sourceCRSIn,
std::weak_ptr<crs::CRS> targetCRSIn);
@@ -1585,16 +1586,6 @@ class PROJ_GCC_DLL ConcatenatedOperation final : public CoordinateOperation {
PROJ_DLL CoordinateOperationNNPtr inverse() const override;
- //! @cond Doxygen_Suppress
- PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
- const override; // throw(io::FormattingException)
-
- PROJ_INTERNAL bool
- _isEquivalentTo(const util::IComparable *other,
- util::IComparable::Criterion criterion =
- util::IComparable::Criterion::STRICT) const override;
- //! @endcond
-
PROJ_DLL static ConcatenatedOperationNNPtr
create(const util::PropertyMap &properties,
const std::vector<CoordinateOperationNNPtr> &operationsIn,
@@ -1608,6 +1599,24 @@ class PROJ_GCC_DLL ConcatenatedOperation final : public CoordinateOperation {
PROJ_DLL std::set<GridDescription>
gridsNeeded(const io::DatabaseContextPtr &databaseContext) const override;
+ PROJ_PRIVATE :
+
+ //! @cond Doxygen_Suppress
+ PROJ_INTERNAL void
+ _exportToWKT(io::WKTFormatter *formatter)
+ const override; // throw(io::FormattingException)
+
+ PROJ_INTERNAL bool
+ _isEquivalentTo(const util::IComparable *other,
+ util::IComparable::Criterion criterion =
+ util::IComparable::Criterion::STRICT) const override;
+
+ PROJ_INTERNAL static void
+ fixStepsDirection(const crs::CRSNNPtr &concatOpSourceCRS,
+ const crs::CRSNNPtr &concatOpTargetCRS,
+ std::vector<CoordinateOperationNNPtr> &operationsInOut);
+ //! @endcond
+
protected:
PROJ_INTERNAL explicit ConcatenatedOperation(
const std::vector<CoordinateOperationNNPtr> &operationsIn);
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp
index c531a8bc..d00be93f 100644
--- a/src/iso19111/coordinateoperation.cpp
+++ b/src/iso19111/coordinateoperation.cpp
@@ -8794,6 +8794,21 @@ ConcatenatedOperation::operations() const {
// ---------------------------------------------------------------------------
+//! @cond Doxygen_Suppress
+static bool compareStepCRS(const crs::CRS *a, const crs::CRS *b) {
+ const auto &aIds = a->identifiers();
+ const auto &bIds = b->identifiers();
+ if (aIds.size() == 1 && bIds.size() == 1 &&
+ aIds[0]->code() == bIds[0]->code() &&
+ *aIds[0]->codeSpace() == *bIds[0]->codeSpace()) {
+ return true;
+ }
+ return a->_isEquivalentTo(b, util::IComparable::Criterion::EQUIVALENT);
+}
+//! @endcond
+
+// ---------------------------------------------------------------------------
+
/** \brief Instantiate a ConcatenatedOperation
*
* @param properties See \ref general_properties. At minimum the name should
@@ -8823,16 +8838,7 @@ ConcatenatedOperationNNPtr ConcatenatedOperation::create(
"source and/or target CRS");
}
if (i >= 1) {
- const auto &sourceCRSIds = l_sourceCRS->identifiers();
- const auto &targetCRSIds = lastTargetCRS->identifiers();
- if (sourceCRSIds.size() == 1 && targetCRSIds.size() == 1 &&
- sourceCRSIds[0]->code() == targetCRSIds[0]->code() &&
- *sourceCRSIds[0]->codeSpace() ==
- *targetCRSIds[0]->codeSpace()) {
- // same id --> ok
- } else if (!l_sourceCRS->_isEquivalentTo(
- lastTargetCRS.get(),
- util::IComparable::Criterion::EQUIVALENT)) {
+ if (!compareStepCRS(l_sourceCRS.get(), lastTargetCRS.get())) {
throw InvalidOperation(
"Inconsistent chaining of CRS in operations");
}
@@ -8852,6 +8858,137 @@ ConcatenatedOperationNNPtr ConcatenatedOperation::create(
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
+void ConcatenatedOperation::fixStepsDirection(
+ const crs::CRSNNPtr &concatOpSourceCRS,
+ const crs::CRSNNPtr &concatOpTargetCRS,
+ std::vector<CoordinateOperationNNPtr> &operationsInOut) {
+
+ // Set of heuristics to assign CRS to steps, and possibly reverse them.
+
+ for (size_t i = 0; i < operationsInOut.size(); ++i) {
+ auto &op = operationsInOut[i];
+ auto l_sourceCRS = op->sourceCRS();
+ auto l_targetCRS = op->targetCRS();
+ auto conv = dynamic_cast<const Conversion *>(op.get());
+ if (conv && i == 0 && !l_sourceCRS && !l_targetCRS) {
+ auto derivedCRS =
+ dynamic_cast<const crs::DerivedCRS *>(concatOpSourceCRS.get());
+ if (derivedCRS) {
+ if (i + 1 < operationsInOut.size()) {
+ // use the sourceCRS of the next operation as our target CRS
+ l_targetCRS = operationsInOut[i + 1]->sourceCRS();
+ // except if it looks like the next operation should
+ // actually be reversed !!!
+ if (l_targetCRS &&
+ !compareStepCRS(l_targetCRS.get(),
+ derivedCRS->baseCRS().get()) &&
+ operationsInOut[i + 1]->targetCRS() &&
+ compareStepCRS(
+ operationsInOut[i + 1]->targetCRS().get(),
+ derivedCRS->baseCRS().get())) {
+ l_targetCRS = operationsInOut[i + 1]->targetCRS();
+ }
+ }
+ if (!l_targetCRS) {
+ l_targetCRS = derivedCRS->baseCRS().as_nullable();
+ }
+ auto invConv =
+ util::nn_dynamic_pointer_cast<InverseConversion>(op);
+ auto nn_targetCRS = NN_NO_CHECK(l_targetCRS);
+ if (invConv) {
+ invConv->inverse()->setCRSs(nn_targetCRS, concatOpSourceCRS,
+ nullptr);
+ op->setCRSs(concatOpSourceCRS, nn_targetCRS, nullptr);
+ } else {
+ op->setCRSs(nn_targetCRS, concatOpSourceCRS, nullptr);
+ op = op->inverse();
+ }
+ } else if (i + 1 < operationsInOut.size()) {
+ l_targetCRS = operationsInOut[i + 1]->sourceCRS();
+ if (l_targetCRS) {
+ op->setCRSs(concatOpSourceCRS, NN_NO_CHECK(l_targetCRS),
+ nullptr);
+ }
+ }
+ } else if (conv && i + 1 == operationsInOut.size() && !l_sourceCRS &&
+ !l_targetCRS) {
+ auto derivedCRS =
+ dynamic_cast<const crs::DerivedCRS *>(concatOpTargetCRS.get());
+ if (derivedCRS) {
+ if (i >= 1) {
+ // use the sourceCRS of the previous operation as our source
+ // CRS
+ l_sourceCRS = operationsInOut[i - 1]->targetCRS();
+ // except if it looks like the previous operation should
+ // actually be reversed !!!
+ if (l_sourceCRS &&
+ !compareStepCRS(l_sourceCRS.get(),
+ derivedCRS->baseCRS().get()) &&
+ operationsInOut[i - 1]->sourceCRS() &&
+ compareStepCRS(
+ operationsInOut[i - 1]->sourceCRS().get(),
+ derivedCRS->baseCRS().get())) {
+ l_targetCRS = operationsInOut[i - 1]->sourceCRS();
+ }
+ }
+ if (!l_sourceCRS) {
+ l_sourceCRS = derivedCRS->baseCRS().as_nullable();
+ }
+ op->setCRSs(NN_NO_CHECK(l_sourceCRS), concatOpTargetCRS,
+ nullptr);
+ } else if (i >= 1) {
+ l_sourceCRS = operationsInOut[i - 1]->targetCRS();
+ if (l_sourceCRS) {
+ op->setCRSs(NN_NO_CHECK(l_sourceCRS), concatOpTargetCRS,
+ nullptr);
+ }
+ }
+ } else if (conv && i > 0 && i < operationsInOut.size() - 1) {
+ // For an intermediate conversion, use the target CRS of the
+ // previous step and the source CRS of the next step
+ l_sourceCRS = operationsInOut[i - 1]->targetCRS();
+ l_targetCRS = operationsInOut[i + 1]->sourceCRS();
+ if (l_sourceCRS && l_targetCRS) {
+ op->setCRSs(NN_NO_CHECK(l_sourceCRS), NN_NO_CHECK(l_targetCRS),
+ nullptr);
+ }
+ } else if (!conv && l_sourceCRS && l_targetCRS) {
+ // Transformations might be mentioned in their foward directions,
+ // whereas we should instead use the reverse path.
+ auto prevOpTarget = (i == 0) ? concatOpSourceCRS.as_nullable()
+ : operationsInOut[i - 1]->targetCRS();
+ if (!compareStepCRS(l_sourceCRS.get(), prevOpTarget.get()) &&
+ compareStepCRS(l_targetCRS.get(), prevOpTarget.get())) {
+ op = op->inverse();
+ }
+ }
+ }
+
+ if (!operationsInOut.empty()) {
+ auto l_sourceCRS = operationsInOut.front()->sourceCRS();
+ if (l_sourceCRS &&
+ !compareStepCRS(l_sourceCRS.get(), concatOpSourceCRS.get())) {
+ throw InvalidOperation("The source CRS of the first step of "
+ "concatenated operation is not the same "
+ "as the source CRS of the concantenated "
+ "operation itself");
+ }
+
+ auto l_targetCRS = operationsInOut.back()->targetCRS();
+ if (l_targetCRS &&
+ !compareStepCRS(l_targetCRS.get(), concatOpTargetCRS.get())) {
+ throw InvalidOperation("The target CRS of the last step of "
+ "concatenated operation is not the same "
+ "as the target CRS of the concantenated "
+ "operation itself");
+ }
+ }
+}
+//! @endcond
+
+// ---------------------------------------------------------------------------
+
+//! @cond Doxygen_Suppress
static std::string computeConcatenatedName(
const std::vector<CoordinateOperationNNPtr> &flattenOps) {
std::string name;
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index aaf8d109..8454966a 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -3126,117 +3126,12 @@ operation::CoordinateOperationNNPtr AuthorityFactory::createCoordinateOperation(
std::string()));
}
- // In case the operation is a conversion (we hope this is the
- // forward case!)
- if (!operations[0]->sourceCRS() || !operations[0]->targetCRS()) {
- if (!operations[1]->sourceCRS()) {
- throw FactoryException(
- "chaining of conversion not supported");
- }
- operations[0]->setCRSs(
- d->createFactory(source_crs_auth_name)
- ->createCoordinateReferenceSystem(source_crs_code),
- NN_NO_CHECK(operations[1]->sourceCRS()), nullptr);
- }
-
- // Some concatenated operations, like 8443, might actually chain
- // reverse operations rather than forward operations.
- {
- const auto &op0SrcId =
- operations[0]->sourceCRS()->identifiers()[0];
- if (op0SrcId->code() != source_crs_code ||
- *op0SrcId->codeSpace() != source_crs_auth_name) {
- operations[0] = operations[0]->inverse();
- }
- }
-
- {
- const auto &op0SrcId =
- operations[0]->sourceCRS()->identifiers()[0];
- if (op0SrcId->code() != source_crs_code ||
- *op0SrcId->codeSpace() != source_crs_auth_name) {
- throw FactoryException(
- "Source CRS of first operation in concatenated "
- "operation " +
- code + " does not match source CRS of "
- "concatenated operation");
- }
- }
-
- // In case the operation is a conversion (we hope this is the
- // forward case!)
- if (!operations[1]->sourceCRS() || !operations[1]->targetCRS()) {
- if (step3_auth_name.empty()) {
- operations[1]->setCRSs(
- NN_NO_CHECK(operations[0]->targetCRS()),
- d->createFactory(target_crs_auth_name)
- ->createCoordinateReferenceSystem(target_crs_code),
- nullptr);
- } else {
- if (!operations[2]->sourceCRS()) {
- throw FactoryException(
- "chaining of conversion not supported");
- }
- operations[1]->setCRSs(
- NN_NO_CHECK(operations[0]->targetCRS()),
- NN_NO_CHECK(operations[2]->sourceCRS()), nullptr);
- }
- }
-
- const auto &op1SrcId = operations[1]->sourceCRS()->identifiers()[0];
- const auto &op0TargetId =
- operations[0]->targetCRS()->identifiers()[0];
- while (true) {
- if (step3_auth_name.empty()) {
- const auto &opLastTargetId =
- operations.back()->targetCRS()->identifiers()[0];
- if (opLastTargetId->code() == target_crs_code &&
- *opLastTargetId->codeSpace() == target_crs_auth_name) {
- // in case we have only 2 steps, and
- // step2.targetCRS == concatenate.targetCRS do nothing,
- // but ConcatenatedOperation::create() will ultimately
- // check that step1.targetCRS == step2.sourceCRS
- break;
- }
- }
- if (op1SrcId->code() != op0TargetId->code() ||
- *op1SrcId->codeSpace() != *op0TargetId->codeSpace()) {
- operations[1] = operations[1]->inverse();
- }
- break;
- }
-
- if (!step3_auth_name.empty()) {
-
- const auto &op2Src = operations[2]->sourceCRS();
- // In case the operation is a conversion (we hope this is the
- // forward case!)
- if (!op2Src || !operations[2]->targetCRS()) {
- operations[2]->setCRSs(
- NN_NO_CHECK(operations[1]->targetCRS()),
- d->createFactory(target_crs_auth_name)
- ->createCoordinateReferenceSystem(target_crs_code),
- nullptr);
- }
-
- const auto &op2SrcId = op2Src->identifiers()[0];
- const auto &op1TargetId =
- operations[1]->targetCRS()->identifiers()[0];
- if (op2SrcId->code() != op1TargetId->code() ||
- *op2SrcId->codeSpace() != *op1TargetId->codeSpace()) {
- operations[2] = operations[2]->inverse();
- }
- }
-
- const auto &opLastTargetId =
- operations.back()->targetCRS()->identifiers()[0];
- if (opLastTargetId->code() != target_crs_code ||
- *opLastTargetId->codeSpace() != target_crs_auth_name) {
- throw FactoryException(
- "Target CRS of last operation in concatenated operation " +
- code +
- " doest not match target CRS of concatenated operation");
- }
+ operation::ConcatenatedOperation::fixStepsDirection(
+ d->createFactory(source_crs_auth_name)
+ ->createCoordinateReferenceSystem(source_crs_code),
+ d->createFactory(target_crs_auth_name)
+ ->createCoordinateReferenceSystem(target_crs_code),
+ operations);
auto props =
d->createProperties(code, name, deprecated,
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index 4ca5a7f0..6a2c3e1a 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -1153,9 +1153,11 @@ struct WKTParser::Private {
BaseObjectNNPtr build(const WKTNodeNNPtr &node);
- IdentifierPtr buildId(const WKTNodeNNPtr &node, bool tolerant = true);
+ IdentifierPtr buildId(const WKTNodeNNPtr &node, bool tolerant,
+ bool removeInverseOf);
- PropertyMap &buildProperties(const WKTNodeNNPtr &node);
+ PropertyMap &buildProperties(const WKTNodeNNPtr &node,
+ bool removeInverseOf = false);
ObjectDomainPtr buildObjectDomain(const WKTNodeNNPtr &node);
@@ -1396,11 +1398,16 @@ double WKTParser::Private::asDouble(const WKTNodeNNPtr &node) {
// ---------------------------------------------------------------------------
IdentifierPtr WKTParser::Private::buildId(const WKTNodeNNPtr &node,
- bool tolerant) {
+ bool tolerant, bool removeInverseOf) {
const auto *nodeP = node->GP();
const auto &nodeChidren = nodeP->children();
if (nodeChidren.size() >= 2) {
auto codeSpace = stripQuotes(nodeChidren[0]);
+ if (removeInverseOf && starts_with(codeSpace, "INVERSE(") &&
+ codeSpace.back() == ')') {
+ codeSpace = codeSpace.substr(strlen("INVERSE("));
+ codeSpace.resize(codeSpace.size() - 1);
+ }
auto code = stripQuotes(nodeChidren[1]);
auto &citationNode = nodeP->lookForChild(WKTConstants::CITATION);
auto &uriNode = nodeP->lookForChild(WKTConstants::URI);
@@ -1444,7 +1451,8 @@ IdentifierPtr WKTParser::Private::buildId(const WKTNodeNNPtr &node,
// ---------------------------------------------------------------------------
-PropertyMap &WKTParser::Private::buildProperties(const WKTNodeNNPtr &node) {
+PropertyMap &WKTParser::Private::buildProperties(const WKTNodeNNPtr &node,
+ bool removeInverseOf) {
if (propertyCount_ == MAX_PROPERTY_SIZE) {
throw ParsingException("MAX_PROPERTY_SIZE reached");
@@ -1460,6 +1468,10 @@ PropertyMap &WKTParser::Private::buildProperties(const WKTNodeNNPtr &node) {
if (!nodeChildren.empty()) {
const auto &nodeName(nodeP->value());
auto name(stripQuotes(nodeChildren[0]));
+ if (removeInverseOf && starts_with(name, "Inverse of ")) {
+ name = name.substr(strlen("Inverse of "));
+ }
+
if (ends_with(name, " (deprecated)")) {
name.resize(name.size() - strlen(" (deprecated)"));
properties->set(common::IdentifiedObject::DEPRECATED_KEY, true);
@@ -1512,7 +1524,7 @@ PropertyMap &WKTParser::Private::buildProperties(const WKTNodeNNPtr &node) {
const auto &subNodeName(subNode->GP()->value());
if (ci_equal(subNodeName, WKTConstants::ID) ||
ci_equal(subNodeName, WKTConstants::AUTHORITY)) {
- auto id = buildId(subNode);
+ auto id = buildId(subNode, true, removeInverseOf);
if (id) {
identifiers->add(NN_NO_CHECK(id));
}
@@ -1990,7 +2002,7 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame(
auto &idNode = nodeP->lookForChild(WKTConstants::AUTHORITY);
if (!isNull(idNode)) {
try {
- auto id = buildId(idNode);
+ auto id = buildId(idNode, true, false);
auto authFactory2 = AuthorityFactory::create(
NN_NO_CHECK(dbContext_), *id->codeSpace());
auto dbDatum =
@@ -2850,8 +2862,22 @@ WKTParser::Private::buildConversion(const WKTNodeNNPtr &node,
consumeParameters(node, false, parameters, values, defaultLinearUnit,
defaultAngularUnit);
- return Conversion::create(buildProperties(node),
- buildProperties(methodNode), parameters, values);
+ auto &convProps = buildProperties(node);
+ auto &methodProps = buildProperties(methodNode);
+ std::string convName;
+ std::string methodName;
+ if (convProps.getStringValue(IdentifiedObject::NAME_KEY, convName) &&
+ methodProps.getStringValue(IdentifiedObject::NAME_KEY, methodName) &&
+ starts_with(convName, "Inverse of ") &&
+ starts_with(methodName, "Inverse of ")) {
+
+ auto &invConvProps = buildProperties(node, true);
+ auto &invMethodProps = buildProperties(methodNode, true);
+ return NN_NO_CHECK(util::nn_dynamic_pointer_cast<Conversion>(
+ Conversion::create(invConvProps, invMethodProps, parameters, values)
+ ->inverse()));
+ }
+ return Conversion::create(convProps, methodProps, parameters, values);
}
// ---------------------------------------------------------------------------
@@ -2918,8 +2944,28 @@ WKTParser::Private::buildCoordinateOperation(const WKTNodeNNPtr &node) {
ConcatenatedOperationNNPtr
WKTParser::Private::buildConcatenatedOperation(const WKTNodeNNPtr &node) {
+
+ const auto *nodeP = node->GP();
+ auto &sourceCRSNode = nodeP->lookForChild(WKTConstants::SOURCECRS);
+ if (/*isNull(sourceCRSNode) ||*/ sourceCRSNode->GP()->childrenSize() != 1) {
+ ThrowMissing(WKTConstants::SOURCECRS);
+ }
+ auto sourceCRS = buildCRS(sourceCRSNode->GP()->children()[0]);
+ if (!sourceCRS) {
+ throw ParsingException("Invalid content in SOURCECRS node");
+ }
+
+ auto &targetCRSNode = nodeP->lookForChild(WKTConstants::TARGETCRS);
+ if (/*isNull(targetCRSNode) ||*/ targetCRSNode->GP()->childrenSize() != 1) {
+ ThrowMissing(WKTConstants::TARGETCRS);
+ }
+ auto targetCRS = buildCRS(targetCRSNode->GP()->children()[0]);
+ if (!targetCRS) {
+ throw ParsingException("Invalid content in TARGETCRS node");
+ }
+
std::vector<CoordinateOperationNNPtr> operations;
- for (const auto &childNode : node->GP()->children()) {
+ for (const auto &childNode : nodeP->children()) {
if (ci_equal(childNode->GP()->value(), WKTConstants::STEP)) {
if (childNode->GP()->childrenSize() != 1) {
throw ParsingException("Invalid content in STEP node");
@@ -2932,6 +2978,10 @@ WKTParser::Private::buildConcatenatedOperation(const WKTNodeNNPtr &node) {
operations.emplace_back(NN_NO_CHECK(op));
}
}
+
+ ConcatenatedOperation::fixStepsDirection(
+ NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS), operations);
+
try {
return ConcatenatedOperation::create(
buildProperties(node), operations,
@@ -4213,7 +4263,7 @@ BaseObjectNNPtr WKTParser::Private::build(const WKTNodeNNPtr &node) {
if (ci_equal(name, WKTConstants::ID) ||
ci_equal(name, WKTConstants::AUTHORITY)) {
return util::nn_static_pointer_cast<BaseObject>(
- NN_NO_CHECK(buildId(node, false)));
+ NN_NO_CHECK(buildId(node, false, false)));
}
throw ParsingException(concat("unhandled keyword: ", name));
@@ -5914,7 +5964,8 @@ PROJStringParser::Private::buildDatum(const Step &step,
PropertyMap grfMap;
// It is arguable that we allow the prime meridian of a datum defined by
- // its name to be overridden, but this is found at least in a regression test
+ // its name to be overridden, but this is found at least in a regression
+ // test
// of GDAL. So let's keep the ellipsoid part of the datum in that case and
// use the specified prime meridian.
const auto overridePmIfNeeded =
diff --git a/src/wkt2_generated_parser.c b/src/wkt2_generated_parser.c
index 551917f2..5a5f3dfb 100644
--- a/src/wkt2_generated_parser.c
+++ b/src/wkt2_generated_parser.c
@@ -541,16 +541,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 99
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 3171
+#define YYLAST 3573
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 163
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 324
/* YYNRULES -- Number of rules. */
-#define YYNRULES 653
+#define YYNRULES 654
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 1346
+#define YYNSTATES 1347
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
@@ -674,9 +674,9 @@ static const yytype_uint16 yyrline[] =
1390, 1390, 1391, 1391, 1392, 1392, 1393, 1393, 1397, 1404,
1405, 1406, 1407, 1408, 1409, 1410, 1412, 1414, 1416, 1418,
1420, 1422, 1424, 1426, 1428, 1430, 1435, 1442, 1443, 1444,
- 1445, 1446, 1448, 1453, 1461, 1461, 1461, 1463, 1464, 1465,
- 1466, 1468, 1470, 1475, 1481, 1483, 1490, 1490, 1492, 1493,
- 1494, 1495, 1497, 1499
+ 1445, 1446, 1448, 1453, 1461, 1461, 1461, 1461, 1463, 1464,
+ 1465, 1466, 1468, 1470, 1475, 1481, 1483, 1490, 1490, 1492,
+ 1493, 1494, 1495, 1497, 1499
};
#endif
@@ -901,10 +901,10 @@ static const yytype_uint16 yytoknum[] =
};
# endif
-#define YYPACT_NINF -1114
+#define YYPACT_NINF -1108
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-1114)))
+ (!!((Yystate) == (-1108)))
#define YYTABLE_NINF -608
@@ -915,141 +915,141 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 784, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, 127, -1114, -1114,
- -1114, 245, -1114, -1114, -1114, 245, -1114, -1114, -1114, -1114,
- -1114, 245, 245, -1114, 245, -1114, 245, -1114, 245, -1114,
- 245, -1114, -1114, -1114, 245, -1114, 245, -1114, 245, -1114,
- 245, -1114, 245, -1114, 245, -1114, 245, -1114, 245, -1114,
- -1114, -1114, 245, -1114, -1114, -1114, -1114, -1114, 245, -1114,
- 245, -1114, 245, -1114, 245, -1114, 245, -1114, 245, -1114,
- -1114, -1114, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 913, 2, 2, 2, 175, -1114, -1114, 42, -1114, 42,
- -1114, 42, 42, -1114, 42, -1114, 42, 42, -1114, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, -1114, 42,
- -1114, 42, -1114, -1114, -1114, -1114, 103, -1114, -1114, -1114,
- -1114, -1114, 117, 121, 145, 187, -1114, -1114, -1114, -1114,
- 365, -1114, 42, -1114, 42, 42, 42, -1114, 42, 245,
- -1114, 782, 299, 410, 410, 504, 237, 326, 138, 513,
- 471, 365, 229, 365, 82, 365, 65, 93, 365, 303,
- 522, -1114, -1114, -1114, 484, 175, 175, 175, 344, 913,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, 281, -1114, -1114,
- -1114, -1114, 293, 297, 302, 504, -1114, 42, -1114, 42,
- 245, -1114, -1114, -1114, -1114, 245, 42, 245, 42, -1114,
- 42, -1114, -1114, 245, 42, 42, 42, -1114, 42, 42,
- 42, -1114, -1114, 42, 245, -1114, -1114, 245, 42, 42,
- -1114, 42, -1114, -1114, 245, -1114, 42, 42, 245, -1114,
- -1114, 42, 42, 245, -1114, -1114, 42, 42, 245, -1114,
- -1114, 42, 42, 245, -1114, -1114, 42, 42, 245, 42,
- 245, -1114, -1114, 42, 245, -1114, -1114, 245, -1114, -1114,
- 245, 42, -1114, -1114, -1114, -1114, -1114, 245, 42, 42,
- 42, -1114, 42, 245, 365, -1114, 423, 281, -1114, -1114,
- 230, 365, 407, 365, 365, 2, 2, 102, 427, 110,
- 456, 2, 102, 110, 456, 504, 365, 497, 532, 2,
- 2, 430, 548, 456, 2, 533, -1114, 533, 2, 548,
- 456, 2, 548, 456, 2, 548, 456, 2, -1114, -1114,
- 173, 94, -1114, 2, 456, 2, 2, 2, 589, 281,
- 344, 527, 344, 523, 913, -1114, 281, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, 42, 42, 245, -1114, 245,
- -1114, -1114, 42, 42, 245, 42, -1114, -1114, -1114, 42,
- 42, 42, -1114, 42, 245, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, 245, 365, 42, 245, -1114, 42, 245, -1114,
- 42, 42, 365, 42, -1114, 42, -1114, 42, -1114, 365,
- 42, 245, -1114, 42, 42, 42, 245, 365, 42, 42,
- 42, 42, -1114, 365, 365, 42, 42, 365, 42, 42,
- 365, 42, 42, -1114, -1114, 265, -1114, 365, 42, -1114,
- 365, 42, 42, 42, 42, 42, 245, 42, 245, 42,
- 245, 365, 42, 302, 365, 42, -1114, 42, 245, 42,
- -1114, 42, 245, 365, -1114, 547, 554, 2, 2, -1114,
- -1114, 533, -1114, 687, 541, 533, 365, 299, 110, 534,
- 365, 281, 1385, -1114, 548, 2, 548, 2, 116, 110,
- -1114, 548, 413, 365, 548, -1114, 347, -1114, 2, 365,
- 299, 548, 1169, -1114, 548, 273, -1114, -1114, -1114, -1114,
- 548, 48, -1114, 548, 66, -1114, 548, 59, -1114, -1114,
- 281, -1114, -1114, 281, -1114, -1114, -1114, 548, 326, 249,
- 48, 1227, -1114, 2, 1227, -1114, 2, 1293, -1114, 2,
- -1114, -1114, 281, -1114, 527, 109, 2, 560, 365, 2,
- -1114, 42, -1114, -1114, 365, -1114, 365, -1114, 42, -1114,
- 365, 42, -1114, 42, -1114, 42, 365, -1114, -1114, -1114,
- 245, -1114, 302, 365, -1114, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, 42, 42,
- 42, -1114, -1114, 42, 365, -1114, 42, 42, 42, 365,
- 365, -1114, -1114, 42, 42, 245, -1114, 365, -1114, -1114,
- 42, -1114, 42, 365, 42, 365, 42, 365, 365, 365,
- 365, 365, 365, 365, 319, 462, -1114, 729, 365, 42,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114,
- -1114, 42, 245, 42, 245, -1114, 42, 245, 42, 245,
- 42, 245, 42, 245, 42, -1114, 245, 42, 42, 42,
- 42, 42, -1114, 42, -1114, 245, 42, -1114, -1114, 245,
- -1114, 42, -1114, 245, -1114, 42, 554, -1114, -1114, -1114,
- -1114, -1114, -1114, 226, -1114, 2, 281, -1114, 561, 561,
- 561, 423, -1114, 527, 99, 122, 365, -1114, -1114, -1114,
- -1114, 2, -1114, 423, 575, -1114, 561, -1114, 315, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, 281, -1114, -1114,
- 281, 281, -1114, 465, -1114, -1114, -1114, -1114, 497, 98,
- 593, 753, -1114, 2, 759, -1114, 2, 536, -1114, 687,
- 113, -1114, 687, 203, -1114, 173, -1114, 479, -1114, 679,
- -1114, 66, 59, 109, 2, 1070, 365, 2, 533, 365,
- 83, 527, -1114, 42, -1114, 42, -1114, -1114, -1114, -1114,
- 42, 42, 42, 42, 504, 365, 42, 42, -1114, -1114,
- -1114, 245, 42, -1114, -1114, -1114, 42, -1114, 42, 42,
- 42, 365, -1114, 473, 465, -1114, 729, 281, -1114, 365,
- -1114, 42, -1114, 42, -1114, 42, -1114, -1114, 365, 42,
- 42, 42, -1114, 365, 42, 42, -1114, 42, 42, -1114,
- 42, -1114, -1114, 42, -1114, 365, 42, 42, -1114, -1114,
- 42, 42, 42, 245, -1114, 42, -1114, -1114, -1114, -1114,
- -1114, 365, 42, 365, 365, 365, 365, 455, -1114, -1114,
- -1114, 109, 365, 2, 331, 504, 602, 365, 365, -1114,
- -1114, -1114, 281, -1114, -1114, -1114, -1114, -1114, 282, -1114,
- -1114, 536, -1114, 113, -1114, -1114, -1114, 113, -1114, -1114,
- 687, -1114, 687, 173, -1114, 1217, 365, 423, -1114, -1114,
- -1114, 687, 2, 42, 109, -1114, 42, 42, 42, 42,
- 42, -1114, 42, -1114, -1114, 42, -1114, -1114, -1114, -1114,
- -1114, 245, 42, -1114, 42, -1114, -1114, 862, 365, 42,
- 42, 42, -1114, 42, 42, 42, 42, -1114, 42, -1114,
- 42, -1114, -1114, 365, -1114, -1114, 42, 42, 42, 245,
- 42, -1114, 42, 365, -1114, 42, 560, 245, -1114, 42,
- -1114, 619, 619, 619, -1114, 201, 365, 504, 365, 2,
- -1114, 619, 894, -1114, -1114, 262, 542, 578, 113, -1114,
- -1114, -1114, -1114, 687, 164, 365, -1114, -1114, -1114, 1350,
- -1114, 913, -1114, 395, -1114, 365, 245, 2, 1051, 365,
- -1114, 42, 245, 42, 245, 42, 245, 42, 42, 42,
- -1114, 42, -1114, 42, 42, 374, 894, -1114, 42, 42,
- -1114, 42, -1114, -1114, 42, -1114, 42, -1114, -1114, 42,
- 365, -1114, -1114, -1114, -1114, -1114, -1114, 42, -1114, 245,
- -1114, 83, 42, -1114, 42, 42, -1114, 654, -1114, 2,
- -1114, 2, 931, -1114, 2, -1114, -1114, -1114, 365, 504,
- 889, -1114, -1114, 542, 578, 578, -1114, 687, -1114, -1114,
- 365, 2, 365, 423, -1114, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, 245, -1114, 245,
- 42, 42, -1114, 42, 42, -1114, 42, 42, -1114, 42,
- -1114, -1114, 42, 42, 245, 42, -1114, -1114, -1114, -1114,
- 365, -1114, 42, 42, 42, 2, 2, -1114, -1114, 1314,
- 1520, -1114, 1481, 365, 1356, -1114, -1114, 2, 578, -1114,
- 504, 365, 1140, 365, 365, 42, 42, 42, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, 42, -1114, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -1114,
- 42, 42, -1114, -1114, -1114, -1114, -1114, 365, -1114, 42,
- 42, 42, 42, 42, 42, 365, -1114, 42, -1114, 42,
- -1114, 42, -1114, 42, -1114, -1114, 42, 245, -1114, -1114,
- 504, 365, 627, 627, 511, 511, -1114, 693, 118, 365,
- 481, 627, 653, 653, -1114, 475, -1114, 365, -1114, -1114,
- 83, 42, -1114, -1114, -1114, 42, 42, -1114, 42, 245,
- 42, 245, -1114, -1114, 42, 42, -1114, 42, 245, 42,
- -1114, 42, 42, -1114, 42, 42, 42, -1114, 42, -1114,
- 42, -1114, 42, 42, -1114, 42, -1114, 42, 42, -1114,
- 42, -1114, 42, -1114, 365, 365, -1114, -1114, 693, -1114,
- 687, 469, -1114, 281, -1114, -1114, 693, -1114, 687, 469,
- -1114, -1114, -1114, 469, -1114, -1114, -1114, 95, -1114, -1114,
- 475, -1114, -1114, -1114, 475, -1114, -1114, -1114, -1114, 42,
- -1114, 42, 42, 42, 42, 365, 42, 42, 365, 42,
- 42, 42, 42, 42, -1114, -1114, 469, -1114, 331, -1114,
- -1114, -1114, 469, -1114, -1114, -1114, -1114, -1114, -1114, -1114,
- 42, 365, 42, -1114, -1114, -1114
+ 785, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, 117, -1108, -1108,
+ -1108, 260, -1108, -1108, -1108, 260, -1108, -1108, -1108, -1108,
+ -1108, 260, 260, -1108, 260, -1108, 260, -1108, 260, -1108,
+ 260, -1108, -1108, -1108, 260, -1108, 260, -1108, 260, -1108,
+ 260, -1108, 260, -1108, 260, -1108, 260, -1108, 260, -1108,
+ -1108, -1108, 260, -1108, -1108, -1108, -1108, -1108, 260, -1108,
+ 260, -1108, 260, -1108, 260, -1108, 260, -1108, 260, -1108,
+ -1108, -1108, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 302, 82, 82, 82, 134, -1108, -1108, 77, -1108, 77,
+ -1108, 77, 77, -1108, 77, -1108, 77, 77, -1108, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77, -1108, 77,
+ -1108, 77, -1108, -1108, -1108, -1108, 88, -1108, -1108, -1108,
+ -1108, -1108, 105, 162, 205, 214, -1108, -1108, -1108, -1108,
+ 381, -1108, 77, -1108, 77, 77, 77, -1108, 77, 260,
+ -1108, 1150, 324, 396, 396, 851, 243, 106, 168, 346,
+ 413, 381, 469, 381, 366, 381, 245, 96, 381, 335,
+ 431, -1108, -1108, -1108, 475, 134, 134, 134, 388, 302,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, 533, -1108, -1108,
+ -1108, -1108, 317, 333, 303, 851, -1108, 77, -1108, 77,
+ 260, -1108, -1108, -1108, -1108, 260, 77, 260, 77, -1108,
+ 77, -1108, -1108, 260, 77, 77, 77, -1108, 77, 77,
+ 77, -1108, -1108, 77, 260, -1108, -1108, 260, 77, 77,
+ -1108, 77, -1108, -1108, 260, -1108, 77, 77, 260, -1108,
+ -1108, 77, 77, 260, -1108, -1108, 77, 77, 260, -1108,
+ -1108, 77, 77, 260, -1108, -1108, 77, 77, 260, 77,
+ 260, -1108, -1108, 77, 260, -1108, -1108, 260, -1108, -1108,
+ 260, 77, -1108, -1108, -1108, -1108, -1108, 260, 77, 77,
+ 77, -1108, 77, 260, 381, -1108, 483, 533, -1108, -1108,
+ 257, 381, 114, 381, 381, 82, 82, 148, 435, 129,
+ 450, 82, 148, 129, 450, 851, 381, 505, 524, 82,
+ 82, 458, 546, 450, 82, 560, -1108, 560, 82, 546,
+ 450, 82, 546, 450, 82, 546, 450, 82, -1108, -1108,
+ 796, 122, -1108, 82, 450, 82, 82, 82, 275, 533,
+ 388, 575, 388, 538, 302, -1108, 533, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, 77, 77, 260, -1108, 260,
+ -1108, -1108, 77, 77, 260, 77, -1108, -1108, -1108, 77,
+ 77, 77, -1108, 77, 260, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, 260, 381, 77, 260, -1108, 77, 260, -1108,
+ 77, 77, 381, 77, -1108, 77, -1108, 77, -1108, 381,
+ 77, 260, -1108, 77, 77, 77, 260, 381, 77, 77,
+ 77, 77, -1108, 381, 381, 77, 77, 381, 77, 77,
+ 381, 77, 77, -1108, -1108, 345, -1108, 381, 77, -1108,
+ 381, 77, 77, 77, 77, 77, 260, 77, 260, 77,
+ 260, 381, 77, 303, 381, 77, -1108, 77, 260, 77,
+ -1108, 77, 260, 381, -1108, 572, 587, 82, 82, -1108,
+ -1108, 560, -1108, 688, 547, 560, 381, 324, 129, 589,
+ 381, 533, 1386, -1108, 546, 82, 546, 82, 99, 129,
+ -1108, 546, 503, 381, 546, -1108, 139, -1108, 82, 381,
+ 324, 546, 1175, -1108, 546, 293, -1108, -1108, -1108, -1108,
+ 546, 172, -1108, 546, 331, -1108, 546, 62, -1108, -1108,
+ 533, -1108, -1108, 533, -1108, -1108, -1108, 546, 106, 304,
+ 172, 829, -1108, 82, 829, -1108, 82, 1062, -1108, 82,
+ -1108, -1108, 533, -1108, 575, 132, 82, 580, 381, 82,
+ -1108, 77, -1108, -1108, 381, -1108, 381, -1108, 77, -1108,
+ 381, 77, -1108, 77, -1108, 77, 381, -1108, -1108, -1108,
+ 260, -1108, 303, 381, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, 77, 77,
+ 77, -1108, -1108, 77, 381, -1108, 77, 77, 77, 381,
+ 381, -1108, -1108, 77, 77, 260, -1108, 381, -1108, -1108,
+ 77, -1108, 77, 381, 77, 381, 77, 381, 381, 381,
+ 381, 381, 381, 381, 424, 478, -1108, 555, 381, 77,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, 77, 260, 77, 260, -1108, 77, 260, 77, 260,
+ 77, 260, 77, 260, 77, -1108, 260, 77, 77, 77,
+ 77, 77, -1108, 77, -1108, 260, 77, -1108, -1108, 260,
+ -1108, 77, -1108, 260, -1108, 77, 587, -1108, -1108, -1108,
+ -1108, -1108, -1108, 157, -1108, 82, 533, -1108, 465, 465,
+ 465, 483, -1108, 575, 123, 131, 381, -1108, -1108, -1108,
+ -1108, 82, -1108, 483, 665, -1108, 465, -1108, 327, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, 533, -1108, -1108,
+ 533, 533, -1108, 488, -1108, -1108, -1108, -1108, 505, 433,
+ 626, 634, -1108, 82, 637, -1108, 82, 104, -1108, 688,
+ 127, -1108, 688, 215, -1108, 796, -1108, 515, -1108, 430,
+ -1108, 331, 62, 132, 82, 753, 381, 82, 560, 381,
+ 84, 575, -1108, 77, -1108, 77, -1108, -1108, -1108, -1108,
+ 77, 77, 77, 77, 851, 381, 77, 77, -1108, -1108,
+ -1108, 260, 77, -1108, -1108, -1108, 77, -1108, 77, 77,
+ 77, 381, -1108, 510, 488, -1108, 555, 533, -1108, 381,
+ -1108, 77, -1108, 77, -1108, 77, -1108, -1108, 381, 77,
+ 77, 77, -1108, 381, 77, 77, -1108, 77, 77, -1108,
+ 77, -1108, -1108, 77, -1108, 381, 77, 77, -1108, -1108,
+ 77, 77, 77, 260, -1108, 77, -1108, -1108, -1108, -1108,
+ -1108, -1108, 381, 77, 381, 381, 381, 381, 553, -1108,
+ -1108, -1108, 132, 381, 82, 121, 851, 579, 381, 381,
+ -1108, -1108, -1108, 533, -1108, -1108, -1108, -1108, -1108, 492,
+ -1108, -1108, 104, -1108, 127, -1108, -1108, -1108, 127, -1108,
+ -1108, 688, -1108, 688, 796, -1108, 1052, 381, 483, -1108,
+ -1108, -1108, 688, 82, 77, 132, -1108, 77, 77, 77,
+ 77, 77, -1108, 77, -1108, -1108, 77, -1108, -1108, -1108,
+ -1108, -1108, 260, 77, -1108, 77, -1108, -1108, 899, 381,
+ 77, 77, 77, -1108, 77, 77, 77, 77, -1108, 77,
+ -1108, 77, -1108, -1108, 381, -1108, -1108, 77, 77, 77,
+ 260, 77, -1108, 77, 381, -1108, 77, 580, 260, -1108,
+ 77, -1108, 661, 661, 661, -1108, 328, 381, 851, 381,
+ 82, -1108, 661, 1025, -1108, -1108, 522, 683, 618, 127,
+ -1108, -1108, -1108, -1108, 688, 545, 381, -1108, -1108, -1108,
+ 951, -1108, 302, -1108, 525, -1108, 381, 260, 82, 907,
+ 381, -1108, 77, 260, 77, 260, 77, 260, 77, 77,
+ 77, -1108, 77, -1108, 77, 77, 584, 1025, -1108, 77,
+ 77, -1108, 77, -1108, -1108, 77, -1108, 77, -1108, -1108,
+ 77, 381, -1108, -1108, -1108, -1108, -1108, -1108, 77, -1108,
+ 260, -1108, 84, 77, -1108, 77, 77, -1108, 897, -1108,
+ 82, -1108, 82, 687, -1108, 82, -1108, -1108, -1108, 381,
+ 851, 645, -1108, -1108, 683, 618, 618, -1108, 688, -1108,
+ -1108, 381, 82, 381, 483, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, 260, -1108,
+ 260, 77, 77, -1108, 77, 77, -1108, 77, 77, -1108,
+ 77, -1108, -1108, 77, 77, 260, 77, -1108, -1108, -1108,
+ -1108, 381, -1108, 77, 77, 77, 82, 82, -1108, -1108,
+ 1121, 1307, -1108, 1268, 381, 961, -1108, -1108, 82, 618,
+ -1108, 851, 381, 417, 381, 381, 77, 77, 77, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, 77, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, 77, 77, -1108, -1108, -1108, -1108, -1108, 381, -1108,
+ 77, 77, 77, 77, 77, 77, 381, -1108, 77, -1108,
+ 77, -1108, 77, -1108, 77, -1108, -1108, 77, 260, -1108,
+ -1108, 851, 381, 576, 576, 601, 601, -1108, 456, 146,
+ 381, 487, 576, 423, 423, -1108, 551, -1108, 381, -1108,
+ -1108, 84, 77, -1108, -1108, -1108, 77, 77, -1108, 77,
+ 260, 77, 260, -1108, -1108, 77, 77, -1108, 77, 260,
+ 77, -1108, 77, 77, -1108, 77, 77, 77, -1108, 77,
+ -1108, 77, -1108, 77, 77, -1108, 77, -1108, 77, 77,
+ -1108, 77, -1108, 77, -1108, 381, 381, -1108, -1108, 456,
+ -1108, 688, 627, -1108, 533, -1108, -1108, 456, -1108, 688,
+ 627, -1108, -1108, -1108, 627, -1108, -1108, -1108, 92, -1108,
+ -1108, 551, -1108, -1108, -1108, 551, -1108, -1108, -1108, -1108,
+ 77, -1108, 77, 77, 77, 77, 381, 77, 77, 381,
+ 77, 77, 77, 77, 77, -1108, -1108, 627, -1108, 121,
+ -1108, -1108, -1108, 627, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, 77, 381, 77, -1108, -1108, -1108
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1058,7 +1058,7 @@ static const yytype_int16 yypact[] =
static const yytype_uint16 yydefact[] =
{
0, 423, 412, 401, 411, 173, 435, 452, 403, 480,
- 483, 567, 616, 641, 644, 505, 498, 363, 541, 490,
+ 483, 567, 616, 642, 645, 505, 498, 363, 541, 490,
487, 495, 493, 584, 632, 402, 425, 436, 404, 424,
481, 485, 484, 506, 491, 488, 496, 0, 4, 5,
2, 0, 13, 353, 354, 0, 18, 390, 391, 392,
@@ -1105,7 +1105,7 @@ static const yytype_uint16 yydefact[] =
0, 0, 0, 62, 509, 60, 510, 0, 202, 513,
0, 0, 0, 0, 0, 92, 0, 92, 0, 92,
0, 0, 92, 578, 0, 0, 524, 0, 0, 0,
- 652, 92, 0, 0, 44, 0, 0, 0, 0, 357,
+ 653, 92, 0, 0, 44, 0, 0, 0, 0, 357,
362, 0, 361, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 394, 0, 0, 0, 0, 0, 0,
395, 0, 0, 0, 0, 449, 0, 450, 0, 0,
@@ -1126,7 +1126,7 @@ static const yytype_uint16 yydefact[] =
101, 105, 0, 97, 0, 104, 97, 0, 97, 0,
97, 0, 97, 0, 97, 96, 0, 92, 0, 92,
0, 0, 580, 0, 536, 0, 627, 515, 516, 0,
- 525, 385, 642, 0, 643, 0, 0, 179, 182, 359,
+ 525, 385, 643, 0, 644, 0, 0, 179, 182, 359,
371, 356, 367, 0, 396, 0, 380, 377, 0, 0,
0, 39, 538, 0, 0, 0, 0, 397, 539, 410,
409, 0, 434, 39, 0, 468, 0, 545, 0, 548,
@@ -1142,94 +1142,94 @@ static const yytype_uint16 yydefact[] =
108, 97, 106, 0, 102, 97, 99, 113, 0, 97,
97, 97, 146, 0, 97, 97, 149, 0, 97, 157,
0, 161, 162, 0, 91, 0, 609, 0, 625, 631,
- 627, 627, 92, 0, 626, 0, 386, 523, 636, 634,
- 635, 0, 0, 0, 0, 0, 0, 0, 421, 36,
- 416, 0, 0, 0, 0, 0, 0, 0, 0, 549,
- 59, 81, 0, 66, 69, 84, 543, 107, 0, 98,
- 111, 0, 133, 0, 134, 135, 144, 0, 136, 137,
- 0, 138, 0, 0, 185, 0, 0, 39, 628, 629,
- 630, 0, 0, 0, 0, 384, 0, 0, 0, 202,
- 517, 444, 0, 442, 215, 202, 200, 198, 197, 199,
- 464, 0, 202, 458, 0, 76, 68, 0, 0, 114,
- 115, 116, 117, 97, 97, 97, 97, 150, 0, 158,
- 154, 163, 164, 0, 623, 615, 609, 609, 92, 0,
- 92, 608, 0, 0, 537, 385, 0, 0, 647, 648,
- 646, 0, 0, 0, 420, 0, 0, 0, 0, 0,
- 460, 0, 0, 75, 109, 0, 0, 0, 0, 139,
- 140, 141, 142, 0, 0, 0, 159, 610, 611, 0,
- 612, 0, 614, 0, 624, 0, 0, 0, 0, 0,
- 250, 220, 0, 92, 0, 226, 0, 385, 517, 517,
- 514, 202, 204, 0, 472, 77, 0, 73, 118, 119,
- 120, 121, 122, 123, 97, 151, 0, 155, 153, 92,
- 0, 534, 529, 530, 531, 532, 533, 385, 527, 0,
- 535, 0, 0, 651, 648, 648, 645, 0, 219, 0,
- 224, 0, 0, 225, 0, 520, 518, 519, 0, 0,
- 0, 471, 74, 0, 0, 0, 143, 0, 613, 622,
- 0, 0, 0, 39, 650, 649, 195, 192, 191, 194,
- 212, 193, 213, 223, 352, 187, 189, 0, 188, 0,
- 220, 92, 251, 0, 0, 228, 226, 0, 201, 202,
- 478, 476, 92, 92, 0, 124, 125, 126, 127, 152,
- 0, 526, 206, 637, 202, 0, 0, 222, 221, 0,
- 0, 227, 0, 0, 0, 473, 475, 0, 0, 147,
- 0, 0, 0, 0, 0, 0, 206, 253, 310, 311,
- 312, 313, 314, 315, 316, 255, 317, 318, 319, 320,
- 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
- 257, 259, 341, 342, 343, 344, 345, 0, 252, 277,
- 304, 284, 286, 288, 290, 0, 283, 300, 196, 92,
- 479, 385, 128, 202, 528, 640, 92, 0, 633, 653,
- 0, 0, 0, 0, 0, 0, 247, 0, 0, 0,
- 0, 0, 0, 0, 249, 0, 474, 0, 207, 639,
- 0, 202, 205, 347, 351, 202, 202, 254, 202, 0,
- 202, 0, 256, 349, 202, 202, 258, 202, 0, 202,
- 260, 202, 202, 278, 202, 202, 202, 305, 202, 248,
- 202, 285, 202, 202, 287, 202, 289, 202, 202, 291,
- 202, 301, 202, 477, 0, 0, 261, 268, 0, 265,
- 0, 0, 267, 0, 269, 276, 0, 273, 0, 0,
- 275, 279, 282, 0, 280, 306, 309, 0, 307, 292,
- 0, 294, 295, 296, 0, 298, 299, 302, 303, 637,
- 190, 202, 202, 0, 202, 0, 202, 202, 0, 202,
- 202, 202, 202, 202, 638, 264, 0, 262, 0, 266,
- 350, 272, 0, 270, 348, 274, 281, 308, 293, 297,
- 202, 0, 202, 263, 346, 271
+ 627, 627, 92, 0, 626, 0, 386, 523, 636, 637,
+ 634, 635, 0, 0, 0, 0, 0, 0, 0, 421,
+ 36, 416, 0, 0, 0, 0, 0, 0, 0, 0,
+ 549, 59, 81, 0, 66, 69, 84, 543, 107, 0,
+ 98, 111, 0, 133, 0, 134, 135, 144, 0, 136,
+ 137, 0, 138, 0, 0, 185, 0, 0, 39, 628,
+ 629, 630, 0, 0, 0, 0, 384, 0, 0, 0,
+ 202, 517, 444, 0, 442, 215, 202, 200, 198, 197,
+ 199, 464, 0, 202, 458, 0, 76, 68, 0, 0,
+ 114, 115, 116, 117, 97, 97, 97, 97, 150, 0,
+ 158, 154, 163, 164, 0, 623, 615, 609, 609, 92,
+ 0, 92, 608, 0, 0, 537, 385, 0, 0, 648,
+ 649, 647, 0, 0, 0, 420, 0, 0, 0, 0,
+ 0, 460, 0, 0, 75, 109, 0, 0, 0, 0,
+ 139, 140, 141, 142, 0, 0, 0, 159, 610, 611,
+ 0, 612, 0, 614, 0, 624, 0, 0, 0, 0,
+ 0, 250, 220, 0, 92, 0, 226, 0, 385, 517,
+ 517, 514, 202, 204, 0, 472, 77, 0, 73, 118,
+ 119, 120, 121, 122, 123, 97, 151, 0, 155, 153,
+ 92, 0, 534, 529, 530, 531, 532, 533, 385, 527,
+ 0, 535, 0, 0, 652, 649, 649, 646, 0, 219,
+ 0, 224, 0, 0, 225, 0, 520, 518, 519, 0,
+ 0, 0, 471, 74, 0, 0, 0, 143, 0, 613,
+ 622, 0, 0, 0, 39, 651, 650, 195, 192, 191,
+ 194, 212, 193, 213, 223, 352, 187, 189, 0, 188,
+ 0, 220, 92, 251, 0, 0, 228, 226, 0, 201,
+ 202, 478, 476, 92, 92, 0, 124, 125, 126, 127,
+ 152, 0, 526, 206, 638, 202, 0, 0, 222, 221,
+ 0, 0, 227, 0, 0, 0, 473, 475, 0, 0,
+ 147, 0, 0, 0, 0, 0, 0, 206, 253, 310,
+ 311, 312, 313, 314, 315, 316, 255, 317, 318, 319,
+ 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
+ 340, 257, 259, 341, 342, 343, 344, 345, 0, 252,
+ 277, 304, 284, 286, 288, 290, 0, 283, 300, 196,
+ 92, 479, 385, 128, 202, 528, 641, 92, 0, 633,
+ 654, 0, 0, 0, 0, 0, 0, 247, 0, 0,
+ 0, 0, 0, 0, 0, 249, 0, 474, 0, 207,
+ 640, 0, 202, 205, 347, 351, 202, 202, 254, 202,
+ 0, 202, 0, 256, 349, 202, 202, 258, 202, 0,
+ 202, 260, 202, 202, 278, 202, 202, 202, 305, 202,
+ 248, 202, 285, 202, 202, 287, 202, 289, 202, 202,
+ 291, 202, 301, 202, 477, 0, 0, 261, 268, 0,
+ 265, 0, 0, 267, 0, 269, 276, 0, 273, 0,
+ 0, 275, 279, 282, 0, 280, 306, 309, 0, 307,
+ 292, 0, 294, 295, 296, 0, 298, 299, 302, 303,
+ 638, 190, 202, 202, 0, 202, 0, 202, 202, 0,
+ 202, 202, 202, 202, 202, 639, 264, 0, 262, 0,
+ 266, 350, 272, 0, 270, 348, 274, 281, 308, 293,
+ 297, 202, 0, 202, 263, 346, 271
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -1114, -1114, -1114, -205, -206, -178, -1114, -68, -184, 329,
- -1114, -1114, -1114, -1114, -1114, -1114, -210, -306, -556, 8,
- -670, -552, -1114, -1114, -1114, -1114, -1114, -1114, -1114, -481,
- -138, -1114, -1114, -1114, -748, -1114, -1114, -133, -43, 1738,
- 891, 338, -1114, -453, -731, -549, -1114, -1114, -59, -1114,
- -1114, -53, -1114, -1114, -1114, -52, -186, -1114, -1114, -695,
- -1114, -1114, -1114, -1114, -1114, -675, -1114, -1114, -1114, -1114,
- -596, -1114, -1114, -1114, 0, -1114, -1114, -1114, -1114, -1114,
- 233, -1114, -1114, -412, -1114, -1114, -674, -1114, -1114, -715,
- -1114, -1114, -1114, -1114, -841, 1829, -265, -1113, -413, -1114,
- -1114, -1114, -823, -904, 61, -1114, -360, -1114, -1114, -363,
- -272, 223, -1114, -1114, -482, -880, -1114, -312, -874, -555,
- -1114, -834, -463, -1114, -1114, -1114, -1114, -467, -1114, -1114,
- -1114, -1114, -593, -461, -1114, -535, -1114, -852, -1114, -309,
- -1114, 771, -340, -61, 780, -346, 12, -128, -288, 199,
- -1114, -1114, -1114, 292, -1114, -124, -1114, -151, -1114, -1114,
- -1114, -1114, -1114, -1114, -743, -1114, -1114, -1114, 671, -32,
- 672, -30, -261, -45, -1114, 595, -89, 64, -1114, -1114,
- -1114, -1114, -1114, 85, -1114, -1114, -1114, 5, -1114, 615,
- -41, -1114, -1114, -1114, -24, -1114, -130, -1114, 1, -1114,
- -1114, -17, -77, -294, 287, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, -314, -690, -814, -1114, 436, 685, 689, 476,
- 301, -1114, -320, -1114, -1114, 452, 20, -1114, -20, 624,
- 30, -1114, -72, 459, 22, -1114, -80, -283, 6, -1114,
- -1114, 468, -1114, -1114, -1114, -1114, -1114, 391, -692, -302,
- -1114, -1114, -506, -1114, -1114, -719, -1114, -1114, -1114, -709,
- -1114, -1114, 711, 712, 722, -1114, -1114, -1114, -1114, 726,
- -1114, -1114, -1114, -1114, 728, -1114, -1114, 733, -1114, -1114,
- 734, -1114, -1114, 735, -1114, -1114, -1114, -1114, -1114, -1114,
- -1114, -1114, -1114, -1114, -1114, -1114, -1114, 857, -190, -1114,
- -86, 531, -1114, 174, -1114, -1114, -1114, -844, -1114, -1114,
- -82, 858, -1114, -975, -450, -1114, -869, -122, -1114, -1114,
- -1114, -281, -1114, -143
+ -1108, -1108, -1108, -205, -218, -178, -1108, -34, -184, 377,
+ -1108, -1108, -1108, -1108, -1108, -1108, -210, -297, -564, 37,
+ -671, -530, -1108, -1108, -1108, -1108, -1108, -1108, -1108, -477,
+ -116, -1108, -1108, -1108, -740, -1108, -1108, -117, -43, 1740,
+ 892, 2435, -1108, -435, -723, -550, -1108, -1108, -46, -1108,
+ -1108, -39, -1108, -1108, -1108, -36, -165, -1108, -1108, -686,
+ -1108, -1108, -1108, -1108, -1108, -673, -1108, -1108, -1108, -1108,
+ -685, -1108, -1108, -1108, 0, -1108, -1108, -1108, -1108, -1108,
+ 246, -1108, -1108, -424, -1108, -1108, -672, -1108, -1108, -956,
+ -1108, -1108, -1108, -1108, -842, 1831, -245, -1107, -395, -1108,
+ -1108, -1108, -816, -905, -30, -1108, -340, -1108, -1108, -348,
+ -256, 242, -1108, -1108, -353, -872, -1108, -294, -874, -767,
+ -1108, -859, -445, -1108, -1108, -1108, -1108, -450, -1108, -1108,
+ -1108, -1108, -502, -441, -1108, -476, -1108, -652, -1108, -283,
+ -1108, 798, -342, -98, 799, -354, 12, -200, -282, 218,
+ -1108, -1108, -1108, 310, -1108, -107, -1108, -167, -1108, -1108,
+ -1108, -1108, -1108, -1108, -749, -1108, -1108, -1108, 691, -33,
+ 693, -23, -202, -51, -1108, 614, -103, 90, -1108, -1108,
+ -1108, -1108, -1108, 100, -1108, -1108, -1108, 20, -1108, 486,
+ -50, -1108, -1108, -1108, -16, -1108, -120, -1108, 21, -1108,
+ -1108, 378, -54, 5, 307, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, -320, -703, -810, -1108, 457, 706, 707, 489,
+ 311, -1108, -307, -1108, -1108, 476, 10, -1108, -15, 633,
+ 28, -1108, -76, 479, 14, -1108, -90, -298, 24, -1108,
+ -1108, 482, -1108, -1108, -1108, -1108, -1108, 746, -677, -264,
+ -1108, -1108, -508, -1108, -1108, -683, -1108, -1108, -1108, -727,
+ -1108, -1108, 729, 734, 736, -1108, -1108, -1108, -1108, 737,
+ -1108, -1108, -1108, -1108, 757, -1108, -1108, 758, -1108, -1108,
+ 759, -1108, -1108, 760, -1108, -1108, -1108, -1108, -1108, -1108,
+ -1108, -1108, -1108, -1108, -1108, -1108, -1108, 866, -181, -1108,
+ -80, 561, -1108, 349, -1108, -1108, -1108, -846, -1108, -1108,
+ -65, 873, -1108, -963, -425, -1108, -866, -122, -1108, -1108,
+ -1108, -263, -1108, -121
};
/* YYDEFGOTO[NTERM-NUM]. */
@@ -1237,37 +1237,37 @@ static const yytype_int16 yydefgoto[] =
{
-1, 37, 38, 39, 217, 579, 219, 807, 220, 794,
221, 222, 377, 378, 223, 318, 224, 225, 817, 540,
- 454, 541, 455, 645, 813, 542, 742, 883, 543, 743,
- 816, 936, 937, 1026, 744, 745, 746, 818, 102, 203,
+ 454, 541, 455, 645, 813, 542, 742, 884, 543, 743,
+ 816, 937, 938, 1027, 744, 745, 746, 818, 102, 203,
345, 130, 845, 552, 657, 752, 658, 659, 660, 661,
- 662, 663, 664, 828, 938, 665, 666, 667, 833, 668,
- 669, 837, 948, 1036, 1120, 670, 995, 671, 840, 950,
- 672, 673, 843, 953, 440, 321, 41, 127, 227, 385,
- 386, 387, 574, 388, 389, 576, 675, 676, 1094, 1236,
- 1096, 1097, 930, 931, 800, 346, 624, 1098, 1141, 801,
- 625, 1099, 806, 925, 408, 409, 1058, 410, 411, 1063,
- 412, 608, 609, 610, 790, 1011, 1013, 1015, 1012, 1103,
- 1187, 1237, 1246, 1188, 1253, 1195, 1261, 1266, 1196, 1271,
- 1219, 1257, 1189, 1238, 1239, 1247, 1248, 1240, 1241, 1101,
+ 662, 663, 664, 828, 939, 665, 666, 667, 833, 668,
+ 669, 837, 949, 1037, 1121, 670, 996, 671, 840, 951,
+ 672, 673, 843, 954, 440, 321, 41, 127, 227, 385,
+ 386, 387, 574, 388, 389, 576, 675, 676, 1095, 1237,
+ 1097, 1098, 931, 932, 800, 346, 624, 1099, 1142, 801,
+ 625, 1100, 806, 926, 408, 409, 1059, 410, 411, 1064,
+ 412, 608, 609, 610, 790, 1012, 1014, 1016, 1013, 1104,
+ 1188, 1238, 1247, 1189, 1254, 1196, 1262, 1267, 1197, 1272,
+ 1220, 1258, 1190, 1239, 1240, 1248, 1249, 1241, 1242, 1102,
42, 234, 323, 492, 256, 324, 235, 129, 229, 496,
230, 399, 583, 393, 394, 580, 578, 244, 237, 403,
404, 593, 500, 589, 779, 590, 785, 46, 47, 48,
49, 50, 413, 131, 51, 52, 245, 395, 513, 54,
134, 248, 425, 414, 415, 613, 795, 239, 56, 136,
191, 267, 268, 443, 57, 58, 240, 241, 716, 242,
- 243, 420, 803, 59, 429, 60, 139, 253, 254, 433,
- 430, 877, 685, 630, 808, 932, 61, 62, 63, 259,
- 437, 1071, 1113, 1114, 1201, 64, 260, 66, 67, 68,
+ 243, 420, 803, 858, 429, 60, 139, 253, 254, 433,
+ 430, 878, 685, 630, 808, 933, 61, 62, 63, 259,
+ 437, 1072, 1114, 1115, 1202, 64, 260, 66, 67, 68,
271, 70, 71, 72, 276, 74, 75, 76, 281, 198,
- 78, 287, 288, 457, 289, 290, 460, 858, 686, 976,
- 418, 616, 477, 478, 691, 687, 1047, 1048, 1049, 688,
- 689, 965, 79, 80, 81, 82, 149, 293, 294, 83,
+ 78, 287, 288, 457, 289, 290, 460, 859, 686, 977,
+ 418, 616, 477, 478, 691, 687, 1048, 1049, 1050, 688,
+ 689, 966, 79, 80, 81, 82, 149, 293, 294, 83,
261, 262, 263, 264, 84, 272, 273, 85, 277, 278,
86, 282, 283, 87, 471, 88, 151, 301, 302, 306,
- 307, 474, 89, 170, 90, 171, 172, 859, 906, 92,
- 174, 178, 179, 312, 313, 958, 959, 852, 853, 93,
- 776, 860, 95, 861, 1143, 96, 693, 97, 98, 481,
- 969, 1009, 482, 970
+ 307, 474, 89, 170, 90, 171, 172, 860, 907, 92,
+ 174, 178, 179, 312, 313, 959, 960, 852, 853, 93,
+ 776, 861, 95, 862, 1144, 96, 693, 97, 98, 481,
+ 970, 1010, 482, 971
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1275,646 +1275,726 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 40, 247, 103, 218, 314, 55, 77, 315, 104, 105,
- 379, 106, 45, 107, 555, 108, 558, 109, 317, 561,
- 65, 110, 73, 111, 431, 112, 919, 113, 568, 114,
- 69, 115, 236, 116, 392, 117, 175, 176, 258, 118,
- 161, 319, 863, 427, 849, 119, 490, 120, 160, 121,
- 922, 122, 489, 123, 246, 124, 850, 250, 683, 829,
- 132, 960, 647, 137, 53, 140, 851, 142, 884, 144,
- 436, 146, 422, 1021, 572, 822, 1082, 826, 303, 830,
- 826, 846, 834, 826, 847, 470, 826, 855, 153, 826,
- 155, 741, 736, 962, 238, 841, 156, 1006, 1014, 1016,
- 159, 1024, 193, 1, 195, 1256, 1, 380, 15, 1090,
- 5, 5, 5, 19, 15, 5, 405, 755, 428, 758,
- 1, 761, 12, 764, 650, 766, 406, 99, 405, 798,
- 5, 416, 1090, 21, 799, 5, 209, 34, 280, 650,
- 1234, 251, 383, 284, 285, 285, 33, 684, 125, 21,
- 453, 424, 33, 656, 275, 1039, 1023, 36, 831, 473,
- 24, 835, 17, 252, 838, 1109, 484, 655, 295, 483,
- 296, 621, 233, 36, 955, 622, 298, 1100, 26, 920,
- 299, 26, 29, 1092, 1321, 29, 956, 325, 1016, 983,
- 266, 407, 326, 940, 328, 26, 957, 286, 400, 29,
- 331, 257, 431, 407, 180, 968, 1092, 796, 336, 585,
- 428, 339, 434, 941, 340, 177, 943, 826, 5, 826,
- 5, 344, 1005, 826, 768, 348, 770, 791, 792, 650,
- 351, 2, 632, 951, 1027, 354, 1203, 586, 401, 684,
- 357, 4, 2, 421, 810, 360, 472, 363, 619, 436,
- 249, 365, 4, 1, 366, 1274, 1018, 367, 1122, 814,
- 882, 880, 381, 382, 369, -602, 1019, 562, 470, 1124,
- 374, 470, 887, 1207, 1065, 862, 889, 1053, 1072, -604,
- 892, 894, 895, -605, 782, 898, 899, 228, 469, 901,
- 1028, 592, 942, 653, 19, 944, 467, 945, 1206, 1054,
- 270, 946, 1145, 1146, 1080, 233, 1231, -606, 10, 17,
- 1029, 1031, 652, 653, 826, 654, 655, 1052, 34, 125,
- 210, 463, 464, 212, 213, 214, 1093, 439, 26, 233,
- 644, 1105, 29, 646, 446, 654, 655, 449, 798, 1111,
- 452, 740, 1095, 799, 487, 231, 488, 441, 462, -607,
- 10, 493, 682, 257, 232, 1095, 428, 617, 31, 32,
- 228, 501, 1249, 1249, 5, 1254, 1258, 292, 1263, 502,
- 1268, 1268, 505, 1272, 636, 507, 125, 210, 211, 1242,
- 212, 213, 214, 215, 216, 311, 706, 1264, 518, 1030,
- 1032, 1033, 1034, 522, 989, 990, 991, 992, 1115, 910,
- 31, 32, 1041, 100, 101, 379, 1042, 1043, 1044, 1045,
- 444, 1205, 2, 447, 1, 783, 450, 379, 649, 538,
- 621, 539, 4, 553, 622, 556, 1312, 559, 210, 231,
- 5, 212, 213, 214, 1317, 566, 809, 646, 232, 569,
- 126, 128, 316, 489, 133, 135, -42, 138, 1322, 135,
- 211, 135, 1323, 135, 819, 135, 148, 150, 1227, 173,
- 173, 173, 798, 490, 1046, 10, 233, 799, 228, 391,
- 17, 677, 5, -63, 679, 539, 1086, 1116, 1117, 1118,
- 1087, 1088, 1089, 695, 402, 1076, 5, 1341, 5, 26,
- 17, 577, 5, 29, 265, 582, 786, 1234, 5, 1245,
- 1245, 1233, 1252, 1234, 416, 1000, 1104, 1002, 678, 1107,
- 740, 680, 623, 618, 681, 31, 32, 699, 1086, 226,
- 701, 7, 1087, 1088, 1089, 201, 202, 812, 5, -71,
- 646, 815, 1243, 1234, -71, -71, -71, 1190, 1091, 1197,
- 6, 428, 1202, 643, 475, 637, 479, 705, 10, 8,
- 5, 674, 476, 5, 674, 453, 641, 674, 304, 305,
- 1060, 639, 650, 1311, 406, 611, 1314, 614, 14, 233,
- 480, 1316, 620, 17, 1319, 627, 215, 216, 1320, 381,
- 1091, 836, 721, 255, 839, 635, 1078, 382, 20, 654,
- 655, 638, 587, 588, 640, 654, 655, 642, 31, 32,
- 967, 379, 27, 391, 28, 692, 646, 815, 648, 926,
- 869, 1340, 35, 927, 928, 929, 538, 1342, 258, 750,
- 738, 753, 651, 9, 756, 844, 759, 1010, 762, 539,
- 765, 740, 655, 767, 1086, 14, 228, 391, 1087, 1088,
- 1089, 16, 774, 793, 5, 376, 777, 1233, 1128, 1234,
- 780, 210, 211, 737, 212, 213, 214, 22, 384, 1135,
- 1136, 1086, 1010, 398, 128, 1087, 1088, 1089, 1090, 419,
- 5, 5, 935, 30, 1243, 1234, 740, 432, 128, 885,
- 650, 881, 419, 651, 652, 653, 442, 1267, 1267, 419,
- 820, 924, 419, 453, 967, 419, 1091, 823, 456, 824,
- 1086, 459, 939, 419, 1087, 1088, 1089, 654, 655, 656,
- 5, 787, 788, 789, 10, 1234, 1066, 1067, 571, 797,
- 740, 417, 947, 1091, 949, 423, 141, 646, 143, 1037,
- 145, 982, 147, 1211, 438, 233, 308, 309, 310, 17,
- 1127, 445, 1092, 1131, 448, 634, 1226, 451, 811, 821,
- 1106, 825, 1250, 1229, 825, 461, 1269, 825, 873, 1262,
- 825, 1112, 1091, 825, 31, 32, 997, 998, 908, 909,
- 5, 43, 1025, 1084, 1085, 674, 5, 379, 856, 650,
- 44, 257, 702, 652, 653, 650, 581, 963, 1, 2,
- 653, 152, 154, 924, 3, 297, 1040, 923, 872, 4,
- 802, 5, 6, 628, 465, 157, 654, 655, 7, 158,
- 911, 8, 654, 655, 1199, 1035, 646, 435, 9, 10,
- 466, 11, 633, 12, 300, 573, 575, 468, 13, 458,
- 14, 162, 163, 15, 210, 211, 16, 212, 213, 214,
- 215, 216, 164, 612, 17, 615, 165, 18, 166, 19,
- 20, 21, 22, 167, 168, 169, 629, 91, 94, 1324,
- 23, 24, 25, 26, 27, 1055, 28, 29, 30, 31,
- 32, 33, 0, 34, 35, 36, 210, 0, 0, 212,
- 213, 214, 215, 216, 738, 924, 739, 0, 979, 0,
- 0, 825, 0, 825, 0, 0, 1086, 825, 0, 1119,
- 1087, 1088, 1089, 1090, 690, 674, 5, 173, 0, 0,
- 0, 0, 0, 0, 0, 650, 1001, 0, 651, 652,
- 653, 0, 0, 3, 1007, 1110, 0, 0, 125, 210,
- 211, 6, 212, 213, 214, 215, 216, 0, 0, 1010,
- 8, 0, 654, 655, 656, 0, 0, 9, 5, 0,
- 11, 0, 0, 0, 0, 0, 924, 650, 1091, 0,
- 651, 652, 653, 1051, 0, 16, 0, 0, 0, 1059,
- 0, 1061, 0, 1064, 0, 1017, 18, 1092, 0, 20,
- 0, 22, 0, 0, 654, 655, 656, 0, 825, 0,
- 0, 25, 0, 27, 0, 28, 0, 30, 0, 674,
- 0, 0, 0, 35, 0, 0, 1081, 0, 674, 210,
- 211, 0, 212, 213, 214, 215, 216, 0, 181, 739,
- 182, 0, 183, 184, 0, 185, 924, 186, 187, 0,
- 188, 189, 190, 192, 190, 194, 190, 196, 197, 0,
- 199, 210, 200, 784, 212, 213, 214, 215, 216, 0,
- 0, 739, 0, 0, 1125, 0, 1126, 674, 0, 805,
- 428, 0, 674, 204, 0, 205, 206, 207, 5, 208,
- 674, 1137, 0, 1315, 0, 0, 0, 650, 0, 428,
- 651, 652, 653, 0, 0, 0, 0, 5, 0, 684,
- 0, 827, 0, 0, 832, 0, 650, 0, 0, 651,
- 652, 653, 1313, 842, 654, 655, 656, 0, 684, 0,
- 1318, 0, 629, 848, 0, 629, 0, 0, 320, 0,
- 322, 0, 0, 654, 655, 656, 0, 327, 0, 329,
- 0, 330, 0, 0, 674, 332, 333, 334, 0, 335,
- 190, 337, 674, 0, 338, 0, 0, 0, 0, 341,
- 342, 0, 343, 0, 0, 0, 0, 5, 347, 0,
- 0, 0, 349, 350, 1230, 0, 650, 352, 353, 651,
- 652, 653, 355, 356, 0, 0, 0, 0, 0, 0,
- 361, 0, 0, 848, 364, 692, 0, 0, 0, 0,
- 0, 0, 368, 654, 655, 656, 1280, 0, 1283, 370,
- 371, 372, 0, 373, 0, 1288, 0, 0, 0, 0,
- 0, 805, 1235, 1235, 1244, 1244, 0, 1251, 1255, 0,
- 1260, 1235, 1265, 1265, 0, 1270, 428, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 0, 0,
- 0, 952, 0, 650, 5, 0, 651, 652, 653, 0,
- 964, 0, 0, 650, 0, 684, 651, 652, 653, 954,
- 848, 594, 595, 596, 597, 598, 599, 600, 601, 602,
- 654, 655, 656, 0, 0, 0, 485, 486, 0, 16,
- 654, 655, 656, 322, 491, 0, 494, 0, 0, 0,
- 495, 497, 498, 0, 499, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 504, 0, 0, 506, 0,
- 5, 508, 509, 0, 511, 0, 512, 805, 514, 650,
- 0, 516, 651, 652, 653, 520, 521, 0, 0, 524,
- 525, 0, 0, 0, 0, 0, 530, 531, 0, 533,
- 534, 0, 536, 537, 0, 629, 654, 655, 656, 0,
- 0, 0, 547, 548, 549, 550, 551, 0, 554, 0,
- 557, 0, 0, 557, 0, 0, 564, 5, 565, 0,
- 567, 0, 557, 5, 0, 0, 650, 0, 0, 651,
- 652, 653, 650, 0, 0, 651, 652, 653, 0, 0,
- 0, 0, 1110, 848, 0, 0, 0, 1102, 0, 1102,
- 0, 0, 1102, 654, 655, 656, 0, 0, 0, 654,
- 655, 656, 0, 0, 0, 0, 0, 0, 0, 805,
- 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156,
- 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
- 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176,
- 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186,
- 0, 0, 696, 805, 805, 0, 0, 0, 0, 491,
- 0, 0, 491, 0, 495, 1200, 703, 594, 595, 596,
- 597, 598, 599, 600, 601, 602, 603, 604, 605, 606,
- 607, 0, 0, 0, 0, 0, 0, 0, 0, 708,
- 709, 710, 0, 0, 711, 0, 0, 713, 714, 715,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 723, 0, 724, 0, 726, 0, 728, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 748, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 749, 0, 751, 0, 0, 754, 0, 757,
- 0, 760, 0, 763, 0, 763, 0, 0, 557, 769,
- 557, 771, 772, 0, 773, 0, 0, 775, 0, 0,
- 0, 0, 778, 0, 0, 0, 781, 1191, 1148, 1149,
- 1150, 1151, 1152, 1153, 1154, 1192, 1156, 1157, 1158, 1159,
- 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169,
- 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179,
- 1193, 1194, 1182, 1183, 1184, 1185, 1186, 1148, 1149, 1150,
- 1151, 1152, 1153, 1154, 0, 1156, 1157, 1158, 1159, 1160,
+ 40, 247, 103, 218, 314, 59, 317, 315, 104, 105,
+ 65, 106, 45, 107, 73, 108, 236, 109, 431, 379,
+ 55, 110, 258, 111, 77, 112, 920, 113, 69, 114,
+ 161, 115, 555, 116, 558, 117, 864, 561, 490, 118,
+ 392, 319, 175, 176, 160, 119, 568, 120, 851, 121,
+ 489, 122, 849, 123, 132, 124, 683, 137, 923, 140,
+ 961, 142, 572, 144, 246, 146, 647, 250, 829, 831,
+ 470, 847, 835, 1022, 855, 838, 885, 822, 303, 826,
+ 238, 830, 826, 741, 834, 826, 436, 153, 826, 1083,
+ 53, 826, 850, 193, 841, 195, 846, 155, 963, 1015,
+ 1017, 1007, 1096, 1, 156, 159, 1091, 380, 7, 5,
+ 1025, 15, 1257, 5, 736, 1096, 755, 99, 758, 2,
+ 761, 5, 764, 12, 766, 231, 400, 1, 798, 4,
+ 650, 422, 416, 799, 232, 405, 209, 405, 798, 5,
+ 434, 428, 383, 799, 5, 406, 284, 285, 428, 33,
+ 453, 424, 1, 650, 1040, 233, 5, 654, 655, 473,
+ 1091, 24, 2, 5, 1024, 1110, 484, 295, 1235, 483,
+ 684, 251, 4, 285, 177, 228, 391, 296, 26, 958,
+ 1093, 655, 29, 956, 298, 299, 1101, 325, 969, 1017,
+ 266, 1322, 326, 252, 328, 921, 431, 286, 984, 336,
+ 331, 257, 26, 941, 943, 796, 29, 945, 17, 946,
+ 407, 339, 407, 947, 340, 585, 942, 1006, 228, 944,
+ 826, 344, 826, 957, 401, 348, 826, 26, 125, 421,
+ 351, 29, 5, 952, 1093, 354, 1204, 19, 632, 180,
+ 357, 650, 768, 1028, 770, 360, 472, 363, 2, 1020,
+ -602, 365, 883, 470, 366, 562, 470, 367, 4, 1246,
+ 1246, 34, 1253, 814, 369, 436, 1123, -604, 1275, 1066,
+ 374, 888, 782, 863, 1125, 890, 249, 1208, 469, 893,
+ 895, 896, 1055, 881, 899, 900, 1054, 1073, 902, 381,
+ 382, 592, 467, 1019, 15, 1105, 586, 1207, 1108, 1081,
+ 1029, 1031, 1033, 1034, 1035, 1053, 1232, 619, 1, 9,
+ 1146, 1147, 3, 1030, 1032, 463, 464, 826, 280, 444,
+ 6, 14, 447, 1312, -605, 450, 1315, 16, 10, 8,
+ 644, 1317, 33, 646, 1320, 1094, 9, 428, 1321, 11,
+ 1106, 617, 427, 22, 487, 5, 488, 441, 1112, 233,
+ 740, 493, 682, 257, 16, 1243, 791, 792, 636, 30,
+ 233, 501, 10, 1265, 17, 18, 684, -606, 20, 502,
+ 22, 1341, 505, 810, 706, 507, -607, 1343, 31, 32,
+ 25, 10, 27, 26, 28, 228, 30, 29, 518, 1117,
+ 1118, 1119, 35, 522, 990, 991, 992, 993, 21, 292,
+ 1, 1116, 233, 125, 210, 211, 17, 212, 213, 214,
+ 215, 216, 31, 32, 379, 231, 255, 911, 100, 101,
+ 1206, 783, 36, 553, 232, 556, 379, 559, 649, 311,
+ 5, 31, 32, 21, 5, 566, 265, 646, 275, 569,
+ 5, 489, 809, 650, 1244, 1235, 651, 652, 653, 6,
+ 5, 211, 233, 1228, 1203, 490, 17, 36, 8, 650,
+ 848, 677, 692, 1087, 679, 10, 316, 1088, 1089, 1090,
+ 654, 655, 656, 5, 611, 26, 614, 14, 1235, 29,
+ 699, 620, -42, 701, 627, 1077, 233, 1342, 656, 695,
+ 17, 577, 402, 10, 635, 582, 786, 20, 416, 538,
+ 638, 539, 678, 640, 5, 680, 642, 1234, 681, 1235,
+ 621, 27, 623, 28, 622, 31, 32, 648, 17, 740,
+ 5, 35, 652, 653, 1001, 1092, 1003, 812, 618, 7,
+ 646, 815, 1042, 428, 19, 637, 1043, 1044, 1045, 1046,
+ 270, 201, 202, 31, 32, 654, 655, 705, 641, 304,
+ 305, 674, 621, 653, 674, 453, 622, 674, 34, 639,
+ 798, 643, 406, 1250, 1250, 799, 1255, 1259, 5, 1264,
+ 5, 1269, 1269, 1235, 1273, 654, 655, 5, -63, 1061,
+ 539, 836, 721, 1087, 839, 480, 927, 1088, 1089, 1090,
+ 928, 929, 930, 5, 1047, 968, 1234, 141, 1235, 143,
+ 476, 145, 258, 147, 381, 1079, 646, 815, 1087, 391,
+ 870, 379, 1088, 1089, 1090, 787, 788, 789, 5, 750,
+ 382, 753, 1244, 1235, 756, 692, 759, 1313, 762, 1191,
+ 765, 1198, 538, 767, 1087, 1318, 215, 216, 1088, 1089,
+ 1090, 740, 774, 738, 5, 1092, 777, 587, 588, 1323,
+ 780, 5, 1087, 1324, 5, 651, 1088, 1089, 1090, 1091,
+ 650, 844, 5, 650, 652, 653, 539, 1129, 653, 1011,
+ 1092, 650, 655, 936, 651, 652, 653, 793, 1136, 1137,
+ 210, 1111, 737, 212, 213, 214, 740, 654, 655, 968,
+ 654, 655, 925, 376, 453, 1011, 1092, 882, 654, 655,
+ 656, 886, 210, 820, 5, 212, 213, 214, 215, 216,
+ 738, 823, 739, 650, 1092, 824, 651, 652, 653, 475,
+ 983, 479, 439, 948, 940, 950, 228, 391, 646, 446,
+ 740, 571, 449, 1093, 797, 452, 654, 655, 811, -71,
+ 654, 655, 656, 462, -71, -71, -71, 1268, 1268, 821,
+ 1038, 825, 1212, 819, 825, 1067, 1068, 825, 874, 1132,
+ 825, 1128, 428, 825, 634, 1227, 308, 309, 310, 1107,
+ 5, 1251, 1230, 1026, 1270, 674, 998, 999, 856, 650,
+ 1263, 257, 651, 652, 653, 909, 910, 379, 1113, 1,
+ 2, 684, 1085, 1086, 925, 3, 848, 1041, 43, 44,
+ 4, 702, 5, 6, 581, 964, 654, 655, 656, 7,
+ 912, 152, 8, 154, 297, 802, 1036, 646, 873, 9,
+ 10, 924, 11, 628, 12, 465, 157, 158, 1200, 13,
+ 435, 14, 633, 300, 15, 210, 211, 16, 212, 213,
+ 214, 215, 216, 458, 466, 17, 5, 468, 18, 162,
+ 19, 20, 21, 22, 163, 650, 164, 165, 651, 652,
+ 653, 23, 24, 25, 26, 27, 91, 28, 29, 30,
+ 31, 32, 33, 94, 34, 35, 36, 166, 167, 168,
+ 169, 16, 654, 655, 656, 1325, 925, 0, 1056, 980,
+ 0, 0, 825, 0, 825, 0, 0, 0, 825, 0,
+ 1120, 0, 0, 0, 1087, 1011, 674, 0, 1088, 1089,
+ 1090, 1091, 0, 0, 5, 0, 428, 1002, 0, 0,
+ 0, 0, 0, 650, 5, 1008, 651, 652, 653, 0,
+ 0, 0, 0, 650, 0, 0, 651, 652, 653, 0,
+ 0, 0, 125, 210, 0, 684, 212, 213, 214, 0,
+ 654, 655, 656, 0, 0, 0, 0, 925, 0, 0,
+ 654, 655, 656, 0, 1052, 0, 1092, 0, 5, 0,
+ 1060, 0, 1062, 0, 1065, 0, 1018, 650, 5, 0,
+ 651, 652, 653, 0, 0, 1093, 0, 650, 0, 825,
+ 651, 652, 653, 0, 848, 0, 0, 1111, 210, 211,
+ 674, 212, 213, 214, 654, 655, 656, 1082, 0, 674,
+ 0, 0, 0, 0, 654, 655, 656, 0, 0, 181,
+ 0, 182, 0, 183, 184, 0, 185, 925, 186, 187,
+ 0, 188, 189, 190, 192, 190, 194, 190, 196, 197,
+ 0, 199, 0, 200, 0, 0, 210, 211, 0, 212,
+ 213, 214, 215, 216, 0, 1126, 739, 1127, 674, 0,
+ 0, 428, 0, 674, 204, 0, 205, 206, 207, 5,
+ 208, 674, 1138, 0, 1316, 0, 417, 0, 650, 5,
+ 423, 651, 652, 653, 0, 0, 0, 0, 650, 438,
+ 684, 651, 652, 653, 955, 848, 445, 0, 0, 448,
+ 0, 0, 451, 1314, 0, 654, 655, 656, 0, 0,
+ 461, 1319, 0, 0, 0, 654, 655, 656, 0, 320,
+ 0, 322, 0, 0, 0, 0, 0, 0, 327, 0,
+ 329, 0, 330, 0, 0, 674, 332, 333, 334, 0,
+ 335, 190, 337, 674, 0, 338, 0, 0, 0, 0,
+ 341, 342, 0, 343, 0, 0, 0, 0, 0, 347,
+ 0, 0, 0, 349, 350, 1231, 0, 0, 352, 353,
+ 0, 0, 210, 355, 356, 212, 213, 214, 215, 216,
+ 0, 361, 739, 0, 0, 364, 0, 0, 0, 0,
+ 0, 0, 0, 368, 0, 0, 0, 1281, 0, 1284,
+ 370, 371, 372, 0, 373, 0, 1289, 0, 0, 0,
+ 0, 0, 0, 1236, 1236, 1245, 1245, 0, 1252, 1256,
+ 0, 1261, 1236, 1266, 1266, 0, 1271, 1148, 1149, 1150,
+ 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160,
1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
- 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 0,
- 0, 1182, 1183, 1184, 1185, 1186, 0, 0, 0, 0,
- 0, 0, 0, 0, 703, 0, 778, 0, 0, 0,
- 0, 0, 0, 0, 867, 0, 0, 871, 715, 0,
- 0, 0, 0, 874, 0, 0, 0, 875, 0, 876,
- 724, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 763, 0, 888, 0, 763, 0, 0, 0,
- 891, 893, 763, 0, 0, 897, 763, 0, 900, 763,
- 0, 902, 0, 0, 903, 0, 0, 905, 907, 0,
- 0, 775, 775, 557, 0, 0, 912, 0, 0, 0,
- 0, 0, 0, 914, 0, 0, 0, 0, 0, 0,
+ 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180,
+ 1181, 1182, 1183, 1184, 1185, 1186, 1187, 594, 595, 596,
+ 597, 598, 599, 600, 601, 602, 0, 485, 486, 0,
+ 0, 0, 0, 0, 322, 491, 0, 494, 0, 0,
+ 0, 495, 497, 498, 0, 499, 125, 210, 211, 0,
+ 212, 213, 214, 215, 216, 0, 504, 0, 0, 506,
+ 0, 0, 508, 509, 0, 511, 0, 512, 0, 514,
+ 0, 0, 516, 0, 0, 0, 520, 521, 0, 0,
+ 524, 525, 0, 0, 0, 0, 0, 530, 531, 0,
+ 533, 534, 0, 536, 537, 0, 0, 0, 0, 0,
+ 0, 0, 0, 547, 548, 549, 550, 551, 0, 554,
+ 0, 557, 0, 0, 557, 0, 0, 564, 0, 565,
+ 0, 567, 0, 557, 1192, 1149, 1150, 1151, 1152, 1153,
+ 1154, 1155, 1193, 1157, 1158, 1159, 1160, 1161, 1162, 1163,
+ 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173,
+ 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1194, 1195, 1183,
+ 1184, 1185, 1186, 1187, 1149, 1150, 1151, 1152, 1153, 1154,
+ 1155, 0, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164,
+ 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174,
+ 1175, 1176, 1177, 1178, 1179, 1180, 0, 0, 1183, 1184,
+ 1185, 1186, 1187, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 696, 0, 0, 0, 0, 0, 0,
+ 491, 0, 0, 491, 0, 495, 0, 703, 594, 595,
+ 596, 597, 598, 599, 600, 601, 602, 603, 604, 605,
+ 606, 607, 0, 0, 0, 0, 0, 0, 0, 0,
+ 708, 709, 710, 0, 0, 711, 0, 0, 713, 714,
+ 715, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 723, 0, 724, 0, 726, 0, 728, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 748, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 749, 0, 751, 0, 0, 754, 0,
+ 757, 0, 760, 0, 763, 0, 763, 0, 0, 557,
+ 769, 557, 771, 772, 0, 773, 0, 0, 775, 0,
+ 0, 0, 0, 778, 0, 0, 0, 781, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 703, 0, 778, 0, 0,
+ 0, 0, 0, 0, 0, 868, 0, 0, 872, 715,
+ 0, 0, 0, 0, 875, 0, 0, 0, 876, 0,
+ 877, 724, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 763, 0, 889, 0, 763, 0, 0,
+ 0, 892, 894, 763, 0, 0, 898, 763, 0, 901,
+ 763, 0, 903, 0, 0, 904, 0, 0, 906, 908,
+ 0, 0, 775, 775, 557, 0, 0, 913, 0, 0,
+ 0, 0, 0, 0, 0, 915, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 967, 0, 0, 972,
+ 973, 974, 0, 976, 0, 978, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 982, 0, 0,
+ 0, 0, 986, 987, 988, 0, 989, 763, 763, 763,
+ 0, 994, 0, 995, 0, 0, 0, 0, 0, 906,
+ 906, 1000, 0, 557, 0, 1004, 0, 0, 778, 0,
+ 0, 0, 1009, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1058, 0, 557, 0, 1063, 0,
+ 778, 976, 976, 0, 0, 0, 1070, 1071, 0, 0,
+ 0, 1074, 1075, 0, 1076, 0, 0, 763, 0, 1078,
+ 0, 269, 557, 274, 0, 279, 0, 0, 291, 0,
+ 778, 0, 0, 0, 0, 1084, 0, 1009, 1009, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1058, 557, 0, 1130, 1131, 0, 1063,
+ 1133, 0, 0, 0, 0, 1135, 557, 0, 1139, 0,
+ 0, 0, 0, 0, 0, 1141, 1143, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1211, 1141,
+ 1213, 0, 0, 0, 0, 0, 0, 0, 1214, 0,
+ 0, 0, 0, 0, 375, 0, 0, 0, 0, 0,
+ 0, 390, 0, 396, 397, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1215, 1216, 0, 426, 0, 0, 0,
+ 0, 0, 1218, 1219, 1221, 1222, 1223, 1224, 0, 0,
+ 1226, 0, 557, 0, 778, 0, 0, 0, 0, 557,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 966, 0, 0, 971, 972, 973,
- 0, 975, 0, 977, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 981, 0, 0, 0, 0,
- 985, 986, 987, 0, 988, 763, 763, 763, 0, 993,
- 0, 994, 0, 0, 0, 0, 0, 905, 905, 999,
- 0, 557, 0, 1003, 0, 0, 778, 0, 0, 0,
- 1008, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 358, 359, 0,
+ 362, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1279, 0, 1282, 0, 0, 0, 0, 0, 0,
+ 1287, 0, 1290, 0, 0, 0, 0, 1294, 0, 0,
+ 0, 1298, 0, 503, 0, 1301, 0, 0, 0, 0,
+ 1305, 0, 510, 0, 0, 0, 0, 0, 0, 515,
+ 0, 0, 0, 0, 0, 0, 0, 523, 0, 0,
+ 0, 0, 0, 528, 529, 0, 0, 532, 0, 0,
+ 535, 0, 0, 0, 0, 0, 0, 544, 0, 0,
+ 546, 0, 1143, 0, 0, 1327, 1329, 0, 0, 0,
+ 1333, 560, 0, 0, 563, 0, 0, 0, 0, 0,
+ 0, 0, 0, 570, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 584, 0, 0, 0,
+ 591, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 626, 0, 0, 0, 0, 0, 631,
+ 0, 517, 0, 0, 519, 0, 0, 0, 0, 0,
+ 0, 526, 527, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 545,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 694, 0,
+ 0, 0, 0, 0, 697, 0, 698, 0, 0, 0,
+ 700, 0, 0, 0, 0, 0, 704, 0, 0, 0,
+ 0, 0, 0, 707, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 712, 0, 0, 0, 0, 717,
+ 718, 0, 0, 0, 0, 0, 0, 722, 0, 0,
+ 0, 0, 0, 725, 0, 727, 0, 729, 730, 731,
+ 732, 733, 734, 735, 0, 0, 0, 0, 747, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1057, 0, 557, 0, 1062, 0, 778, 975,
- 975, 0, 0, 0, 1069, 1070, 0, 0, 0, 1073,
- 1074, 0, 1075, 0, 0, 763, 0, 1077, 0, 269,
- 557, 274, 0, 279, 0, 0, 291, 0, 778, 0,
- 0, 0, 0, 1083, 0, 1008, 1008, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1057, 557, 0, 1129, 1130, 0, 1062, 1132, 0,
- 0, 0, 0, 1134, 557, 0, 1138, 0, 0, 0,
- 0, 0, 0, 1140, 1142, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1210, 1140, 1212, 0,
- 0, 0, 0, 0, 0, 0, 1213, 0, 0, 0,
- 0, 0, 375, 0, 0, 0, 0, 0, 0, 390,
- 0, 396, 397, 0, 0, 0, 0, 0, 0, 0,
- 0, 1214, 1215, 0, 426, 0, 0, 0, 0, 0,
- 1217, 1218, 1220, 1221, 1222, 1223, 0, 0, 1225, 0,
- 557, 0, 778, 0, 0, 0, 0, 557, 0, 0,
+ 0, 0, 0, 0, 719, 720, 804, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 358, 359, 0, 362, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1278,
- 0, 1281, 0, 0, 0, 0, 0, 0, 1286, 0,
- 1289, 0, 0, 0, 0, 1293, 0, 0, 0, 1297,
- 0, 503, 0, 1300, 0, 0, 0, 0, 1304, 0,
- 510, 0, 0, 0, 0, 0, 0, 515, 0, 0,
- 0, 0, 0, 0, 0, 523, 0, 0, 0, 0,
- 0, 528, 529, 0, 0, 532, 0, 0, 535, 0,
- 0, 0, 0, 0, 0, 544, 0, 0, 546, 0,
- 1142, 0, 0, 1326, 1328, 0, 0, 0, 1332, 560,
- 0, 0, 563, 0, 0, 0, 0, 0, 0, 0,
- 0, 570, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 584, 0, 0, 0, 591, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 626, 0, 0, 0, 0, 0, 631, 0, 517,
- 0, 0, 519, 0, 0, 0, 0, 0, 0, 526,
- 527, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 545, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 694, 0, 0, 0,
- 0, 0, 697, 0, 698, 0, 0, 0, 700, 0,
- 0, 0, 0, 0, 704, 0, 0, 0, 0, 0,
- 0, 707, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 712, 0, 0, 0, 0, 717, 718, 0,
- 0, 0, 0, 0, 0, 722, 0, 0, 0, 0,
- 0, 725, 0, 727, 0, 729, 730, 731, 732, 733,
- 734, 735, 0, 0, 0, 0, 747, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 854, 0, 0, 857,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 871, 0, 126, 128, 0,
+ 0, 133, 135, 0, 138, 0, 135, 0, 135, 0,
+ 135, 880, 135, 148, 150, 0, 173, 173, 173, 887,
+ 0, 0, 0, 0, 0, 0, 0, 0, 891, 0,
+ 0, 0, 0, 897, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 905, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 914, 0, 916, 917, 918, 919, 0, 0,
+ 0, 0, 0, 922, 0, 0, 226, 0, 934, 935,
+ 0, 865, 866, 867, 869, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 879, 0, 0, 0, 0, 0, 962, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 719, 720, 804, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 985,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 997, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1005, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1021, 0, 1023,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1039, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1051, 0, 0, 0,
+ 1057, 975, 0, 0, 0, 384, 0, 979, 0, 0,
+ 398, 128, 0, 0, 981, 0, 419, 0, 0, 0,
+ 0, 0, 0, 0, 432, 128, 0, 0, 0, 419,
+ 0, 1080, 0, 442, 0, 0, 419, 0, 0, 419,
+ 0, 0, 419, 0, 0, 456, 0, 0, 459, 0,
+ 419, 0, 0, 0, 0, 0, 0, 0, 0, 1109,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1122, 0, 1124, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 854, 0, 0, 857, 0, 0,
+ 0, 0, 0, 1069, 0, 0, 0, 0, 0, 0,
+ 0, 1140, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1199, 0, 0, 0, 0, 0,
+ 0, 0, 1205, 0, 1209, 1210, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 870, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 879,
- 0, 0, 0, 0, 0, 0, 0, 886, 0, 0,
- 0, 0, 0, 0, 0, 0, 890, 0, 0, 0,
- 0, 896, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 904, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 913,
- 0, 915, 916, 917, 918, 0, 0, 0, 0, 0,
- 921, 0, 0, 0, 0, 933, 934, 0, 0, 864,
- 865, 866, 868, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 878,
- 0, 0, 0, 0, 961, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 984, 0, 0, 0,
+ 0, 0, 573, 575, 0, 0, 0, 0, 1217, 0,
+ 0, 0, 0, 0, 0, 0, 1225, 0, 0, 0,
+ 612, 1134, 615, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1233, 629, 0, 0, 1145, 0, 0, 0,
+ 1260, 0, 0, 0, 0, 0, 0, 0, 1274, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 996, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1004, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1020, 0, 1022, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1038, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1050, 0, 0, 0, 1056, 974, 0,
- 0, 0, 0, 0, 978, 0, 0, 0, 0, 0,
- 0, 980, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1079, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 690, 0, 0, 173, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1310, 1311, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1108, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1121, 0,
- 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1229, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1331, 0, 0, 1335,
+ 0, 0, 0, 1276, 0, 0, 0, 1277, 1278, 0,
+ 1280, 0, 1283, 0, 0, 0, 1285, 1286, 0, 1288,
+ 0, 1291, 1345, 1292, 1293, 0, 1295, 1296, 1297, 0,
+ 1299, 0, 1300, 0, 1302, 1303, 0, 1304, 0, 1306,
+ 1307, 0, 1308, 0, 1309, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1068, 0, 0, 0, 0, 0, 0, 0, 1139, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1198, 0, 0, 0, 0, 0, 0, 0, 1204,
- 0, 1208, 1209, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 784, 0, 0, 1326, 1328, 0, 1330, 0, 1332, 1334,
+ 0, 1336, 1337, 1338, 1339, 1340, 805, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1344, 0, 1346, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 827, 0,
+ 0, 832, 0, 0, 0, 0, 0, 0, 0, 0,
+ 842, 0, 0, 0, 0, 0, 0, 0, 0, 629,
+ 0, 0, 629, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0,
- 0, 0, 0, 1224, 0, 0, 0, 0, 1133, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1232,
- 0, 0, 0, 1144, 0, 0, 0, 1259, 0, 0,
- 0, 0, 0, 0, 0, 1273, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1309, 1310, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1228, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1330, 0, 0, 1334, 0, 0, 0,
- 1275, 0, 0, 0, 1276, 1277, 0, 1279, 0, 1282,
- 0, 0, 0, 1284, 1285, 0, 1287, 0, 1290, 1344,
- 1291, 1292, 0, 1294, 1295, 1296, 0, 1298, 0, 1299,
- 0, 1301, 1302, 0, 1303, 0, 1305, 1306, 0, 1307,
- 0, 1308, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 805,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1325, 1327, 0, 1329, 0, 1331, 1333, 0, 1335, 1336,
- 1337, 1338, 1339, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1343,
- 0, 1345
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 953,
+ 0, 0, 0, 0, 0, 0, 0, 0, 965, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 805, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 629, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1103, 0, 1103, 0, 0,
+ 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 805, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 805, 805, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1201
};
static const yytype_int16 yycheck[] =
{
- 0, 185, 45, 181, 209, 0, 0, 217, 51, 52,
- 316, 54, 0, 56, 467, 58, 469, 60, 224, 472,
- 0, 64, 0, 66, 338, 68, 867, 70, 481, 72,
- 0, 74, 183, 76, 322, 78, 122, 123, 189, 82,
- 120, 225, 785, 337, 775, 88, 392, 90, 120, 92,
- 873, 94, 392, 96, 184, 98, 775, 187, 564, 754,
- 105, 905, 543, 108, 0, 110, 775, 112, 816, 114,
- 342, 116, 333, 977, 486, 749, 1051, 751, 200, 754,
- 754, 773, 757, 757, 774, 368, 760, 777, 120, 763,
- 120, 647, 644, 907, 183, 765, 120, 966, 972, 973,
- 120, 981, 143, 4, 145, 1218, 4, 317, 49, 14,
- 17, 17, 17, 65, 49, 17, 6, 666, 9, 668,
- 4, 670, 39, 672, 26, 674, 16, 0, 6, 7,
- 17, 48, 14, 67, 12, 17, 179, 89, 73, 26,
- 22, 3, 320, 50, 51, 51, 87, 38, 146, 67,
- 360, 335, 87, 55, 72, 999, 979, 91, 754, 369,
- 77, 757, 60, 25, 760, 1069, 376, 54, 200, 374,
- 200, 7, 56, 91, 905, 11, 200, 1057, 79, 871,
- 200, 79, 83, 88, 1297, 83, 905, 230, 1062, 937,
- 190, 81, 235, 888, 237, 79, 905, 197, 326, 83,
- 243, 189, 516, 81, 162, 914, 88, 713, 249, 497,
- 9, 254, 340, 888, 257, 40, 891, 891, 17, 893,
- 17, 264, 965, 897, 677, 268, 679, 709, 710, 26,
- 273, 5, 520, 903, 982, 278, 1140, 498, 327, 38,
- 283, 15, 5, 332, 726, 288, 368, 290, 509, 521,
- 186, 294, 15, 4, 297, 1230, 975, 300, 1081, 740,
- 816, 813, 32, 33, 307, 162, 975, 473, 551, 1083,
- 313, 554, 821, 1142, 1017, 781, 825, 1008, 1026, 162,
- 829, 830, 831, 162, 696, 834, 835, 61, 368, 838,
- 985, 501, 888, 31, 65, 891, 368, 893, 1142, 1008,
- 71, 897, 1125, 1126, 1047, 56, 1210, 162, 35, 60,
- 985, 986, 30, 31, 988, 53, 54, 1007, 89, 146,
- 147, 366, 367, 150, 151, 152, 1057, 344, 79, 56,
- 540, 1062, 83, 543, 351, 53, 54, 354, 7, 1070,
- 357, 647, 1057, 12, 387, 19, 389, 347, 365, 162,
- 35, 394, 562, 341, 28, 1070, 9, 508, 85, 86,
- 61, 404, 1214, 1215, 17, 1217, 1218, 64, 1220, 412,
- 1222, 1223, 415, 1225, 525, 418, 146, 147, 148, 1213,
- 150, 151, 152, 153, 154, 41, 592, 1221, 431, 985,
- 986, 987, 988, 436, 943, 944, 945, 946, 1073, 852,
- 85, 86, 7, 158, 159, 711, 11, 12, 13, 14,
- 349, 1142, 5, 352, 4, 703, 355, 723, 548, 154,
- 7, 156, 15, 466, 11, 468, 1278, 470, 147, 19,
- 17, 150, 151, 152, 1286, 478, 724, 647, 28, 482,
- 102, 103, 149, 783, 106, 107, 149, 109, 1300, 111,
- 148, 113, 1304, 115, 748, 117, 118, 119, 1201, 121,
- 122, 123, 7, 809, 69, 35, 56, 12, 61, 62,
- 60, 551, 17, 154, 554, 156, 7, 1073, 1074, 1075,
- 11, 12, 13, 569, 57, 1034, 17, 1328, 17, 79,
- 60, 491, 17, 83, 23, 495, 706, 22, 17, 1214,
- 1215, 20, 1217, 22, 48, 958, 1061, 960, 553, 1064,
- 816, 556, 512, 508, 559, 85, 86, 578, 7, 181,
- 581, 24, 11, 12, 13, 160, 161, 737, 17, 155,
- 740, 741, 21, 22, 160, 161, 162, 1130, 69, 1132,
- 18, 9, 1138, 537, 370, 525, 372, 590, 35, 27,
- 17, 551, 25, 17, 554, 765, 534, 557, 74, 75,
- 1013, 531, 26, 1278, 16, 504, 1281, 506, 46, 56,
- 47, 1286, 511, 60, 1289, 514, 153, 154, 1293, 32,
- 69, 759, 625, 70, 762, 524, 1039, 33, 66, 53,
- 54, 530, 58, 59, 533, 53, 54, 536, 85, 86,
- 914, 907, 80, 62, 82, 45, 816, 817, 547, 7,
- 794, 1326, 90, 11, 12, 13, 154, 1332, 769, 662,
- 155, 664, 29, 34, 667, 146, 669, 8, 671, 156,
- 673, 937, 54, 676, 7, 46, 61, 62, 11, 12,
- 13, 52, 685, 711, 17, 316, 689, 20, 1101, 22,
- 693, 147, 148, 645, 150, 151, 152, 68, 320, 1112,
- 1113, 7, 8, 325, 326, 11, 12, 13, 14, 331,
- 17, 17, 882, 84, 21, 22, 982, 339, 340, 817,
- 26, 814, 344, 29, 30, 31, 348, 1222, 1223, 351,
- 749, 875, 354, 903, 1008, 357, 69, 750, 360, 751,
- 7, 363, 888, 365, 11, 12, 13, 53, 54, 55,
- 17, 150, 151, 152, 35, 22, 1018, 1019, 485, 714,
- 1026, 330, 900, 69, 902, 334, 111, 937, 113, 994,
- 115, 937, 117, 1146, 343, 56, 205, 206, 207, 60,
- 1100, 350, 88, 1106, 353, 522, 1199, 356, 728, 749,
- 1062, 751, 1215, 1206, 754, 364, 1223, 757, 801, 1220,
- 760, 1070, 69, 763, 85, 86, 956, 957, 850, 851,
- 17, 0, 982, 1054, 1055, 775, 17, 1083, 778, 26,
- 0, 769, 583, 30, 31, 26, 494, 911, 4, 5,
- 31, 120, 120, 977, 10, 200, 1001, 874, 797, 15,
- 715, 17, 18, 516, 368, 120, 53, 54, 24, 120,
- 853, 27, 53, 54, 1134, 993, 1026, 341, 34, 35,
- 368, 37, 521, 39, 200, 487, 488, 368, 44, 361,
- 46, 120, 120, 49, 147, 148, 52, 150, 151, 152,
- 153, 154, 120, 505, 60, 507, 120, 63, 120, 65,
- 66, 67, 68, 120, 120, 120, 518, 0, 0, 1309,
- 76, 77, 78, 79, 80, 1008, 82, 83, 84, 85,
- 86, 87, -1, 89, 90, 91, 147, -1, -1, 150,
- 151, 152, 153, 154, 155, 1069, 157, -1, 931, -1,
- -1, 891, -1, 893, -1, -1, 7, 897, -1, 1077,
- 11, 12, 13, 14, 566, 905, 17, 569, -1, -1,
- -1, -1, -1, -1, -1, 26, 959, -1, 29, 30,
- 31, -1, -1, 10, 967, 36, -1, -1, 146, 147,
- 148, 18, 150, 151, 152, 153, 154, -1, -1, 8,
- 27, -1, 53, 54, 55, -1, -1, 34, 17, -1,
- 37, -1, -1, -1, -1, -1, 1140, 26, 69, -1,
- 29, 30, 31, 1006, -1, 52, -1, -1, -1, 1012,
- -1, 1014, -1, 1016, -1, 975, 63, 88, -1, 66,
- -1, 68, -1, -1, 53, 54, 55, -1, 988, -1,
- -1, 78, -1, 80, -1, 82, -1, 84, -1, 999,
- -1, -1, -1, 90, -1, -1, 1049, -1, 1008, 147,
- 148, -1, 150, 151, 152, 153, 154, -1, 127, 157,
- 129, -1, 131, 132, -1, 134, 1210, 136, 137, -1,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, -1,
- 149, 147, 151, 705, 150, 151, 152, 153, 154, -1,
- -1, 157, -1, -1, 1097, -1, 1099, 1057, -1, 721,
- 9, -1, 1062, 172, -1, 174, 175, 176, 17, 178,
- 1070, 1114, -1, 1283, -1, -1, -1, 26, -1, 9,
- 29, 30, 31, -1, -1, -1, -1, 17, -1, 38,
- -1, 753, -1, -1, 756, -1, 26, -1, -1, 29,
- 30, 31, 1280, 765, 53, 54, 55, -1, 38, -1,
- 1288, -1, 774, 43, -1, 777, -1, -1, 227, -1,
- 229, -1, -1, 53, 54, 55, -1, 236, -1, 238,
- -1, 240, -1, -1, 1134, 244, 245, 246, -1, 248,
- 249, 250, 1142, -1, 253, -1, -1, -1, -1, 258,
- 259, -1, 261, -1, -1, -1, -1, 17, 267, -1,
- -1, -1, 271, 272, 1207, -1, 26, 276, 277, 29,
- 30, 31, 281, 282, -1, -1, -1, -1, -1, -1,
- 289, -1, -1, 43, 293, 45, -1, -1, -1, -1,
- -1, -1, 301, 53, 54, 55, 1239, -1, 1241, 308,
- 309, 310, -1, 312, -1, 1248, -1, -1, -1, -1,
- -1, 873, 1212, 1213, 1214, 1215, -1, 1217, 1218, -1,
- 1220, 1221, 1222, 1223, -1, 1225, 9, -1, -1, -1,
- -1, -1, -1, -1, 17, -1, -1, -1, -1, -1,
- -1, 903, -1, 26, 17, -1, 29, 30, 31, -1,
- 912, -1, -1, 26, -1, 38, 29, 30, 31, 42,
- 43, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 53, 54, 55, -1, -1, -1, 385, 386, -1, 52,
- 53, 54, 55, 392, 393, -1, 395, -1, -1, -1,
- 399, 400, 401, -1, 403, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 414, -1, -1, 417, -1,
- 17, 420, 421, -1, 423, -1, 425, 979, 427, 26,
- -1, 430, 29, 30, 31, 434, 435, -1, -1, 438,
- 439, -1, -1, -1, -1, -1, 445, 446, -1, 448,
- 449, -1, 451, 452, -1, 1007, 53, 54, 55, -1,
- -1, -1, 461, 462, 463, 464, 465, -1, 467, -1,
- 469, -1, -1, 472, -1, -1, 475, 17, 477, -1,
- 479, -1, 481, 17, -1, -1, 26, -1, -1, 29,
- 30, 31, 26, -1, -1, 29, 30, 31, -1, -1,
- -1, -1, 36, 43, -1, -1, -1, 1059, -1, 1061,
- -1, -1, 1064, 53, 54, 55, -1, -1, -1, 53,
- 54, 55, -1, -1, -1, -1, -1, -1, -1, 1081,
- 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
- 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
- 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
- -1, -1, 571, 1125, 1126, -1, -1, -1, -1, 578,
- -1, -1, 581, -1, 583, 1137, 585, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, -1, -1, -1, -1, -1, -1, -1, -1, 608,
- 609, 610, -1, -1, 613, -1, -1, 616, 617, 618,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 630, -1, 632, -1, 634, -1, 636, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 649, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 661, -1, 663, -1, -1, 666, -1, 668,
- -1, 670, -1, 672, -1, 674, -1, -1, 677, 678,
- 679, 680, 681, -1, 683, -1, -1, 686, -1, -1,
- -1, -1, 691, -1, -1, -1, 695, 106, 107, 108,
+ 0, 185, 45, 181, 209, 0, 224, 217, 51, 52,
+ 0, 54, 0, 56, 0, 58, 183, 60, 338, 316,
+ 0, 64, 189, 66, 0, 68, 868, 70, 0, 72,
+ 120, 74, 467, 76, 469, 78, 785, 472, 392, 82,
+ 322, 225, 122, 123, 120, 88, 481, 90, 775, 92,
+ 392, 94, 775, 96, 105, 98, 564, 108, 874, 110,
+ 906, 112, 486, 114, 184, 116, 543, 187, 754, 754,
+ 368, 774, 757, 978, 777, 760, 816, 749, 200, 751,
+ 183, 754, 754, 647, 757, 757, 342, 120, 760, 1052,
+ 0, 763, 775, 143, 765, 145, 773, 120, 908, 973,
+ 974, 967, 1058, 4, 120, 120, 14, 317, 24, 17,
+ 982, 49, 1219, 17, 644, 1071, 666, 0, 668, 5,
+ 670, 17, 672, 39, 674, 19, 326, 4, 7, 15,
+ 26, 333, 48, 12, 28, 6, 179, 6, 7, 17,
+ 340, 9, 320, 12, 17, 16, 50, 51, 9, 87,
+ 360, 335, 4, 26, 1000, 56, 17, 53, 54, 369,
+ 14, 77, 5, 17, 980, 1070, 376, 200, 22, 374,
+ 38, 3, 15, 51, 40, 61, 62, 200, 79, 906,
+ 88, 54, 83, 906, 200, 200, 1058, 230, 915, 1063,
+ 190, 1298, 235, 25, 237, 872, 516, 197, 938, 249,
+ 243, 189, 79, 889, 889, 713, 83, 892, 60, 894,
+ 81, 254, 81, 898, 257, 497, 889, 966, 61, 892,
+ 892, 264, 894, 906, 327, 268, 898, 79, 146, 332,
+ 273, 83, 17, 904, 88, 278, 1141, 65, 520, 162,
+ 283, 26, 677, 983, 679, 288, 368, 290, 5, 976,
+ 162, 294, 816, 551, 297, 473, 554, 300, 15, 1215,
+ 1216, 89, 1218, 740, 307, 521, 1082, 162, 1231, 1018,
+ 313, 821, 696, 781, 1084, 825, 186, 1143, 368, 829,
+ 830, 831, 1009, 813, 834, 835, 1009, 1027, 838, 32,
+ 33, 501, 368, 976, 49, 1062, 498, 1143, 1065, 1048,
+ 986, 986, 987, 988, 989, 1008, 1211, 509, 4, 34,
+ 1126, 1127, 10, 986, 987, 366, 367, 989, 73, 349,
+ 18, 46, 352, 1279, 162, 355, 1282, 52, 35, 27,
+ 540, 1287, 87, 543, 1290, 1058, 34, 9, 1294, 37,
+ 1063, 508, 337, 68, 387, 17, 389, 347, 1071, 56,
+ 647, 394, 562, 341, 52, 1214, 709, 710, 525, 84,
+ 56, 404, 35, 1222, 60, 63, 38, 162, 66, 412,
+ 68, 1327, 415, 726, 592, 418, 162, 1333, 85, 86,
+ 78, 35, 80, 79, 82, 61, 84, 83, 431, 1074,
+ 1075, 1076, 90, 436, 944, 945, 946, 947, 67, 64,
+ 4, 1074, 56, 146, 147, 148, 60, 150, 151, 152,
+ 153, 154, 85, 86, 711, 19, 70, 852, 158, 159,
+ 1143, 703, 91, 466, 28, 468, 723, 470, 548, 41,
+ 17, 85, 86, 67, 17, 478, 23, 647, 72, 482,
+ 17, 783, 724, 26, 21, 22, 29, 30, 31, 18,
+ 17, 148, 56, 1202, 1139, 809, 60, 91, 27, 26,
+ 43, 551, 45, 7, 554, 35, 149, 11, 12, 13,
+ 53, 54, 55, 17, 504, 79, 506, 46, 22, 83,
+ 578, 511, 149, 581, 514, 1035, 56, 1329, 55, 569,
+ 60, 491, 57, 35, 524, 495, 706, 66, 48, 154,
+ 530, 156, 553, 533, 17, 556, 536, 20, 559, 22,
+ 7, 80, 512, 82, 11, 85, 86, 547, 60, 816,
+ 17, 90, 30, 31, 959, 69, 961, 737, 508, 24,
+ 740, 741, 7, 9, 65, 525, 11, 12, 13, 14,
+ 71, 160, 161, 85, 86, 53, 54, 590, 534, 74,
+ 75, 551, 7, 31, 554, 765, 11, 557, 89, 531,
+ 7, 537, 16, 1215, 1216, 12, 1218, 1219, 17, 1221,
+ 17, 1223, 1224, 22, 1226, 53, 54, 17, 154, 1014,
+ 156, 759, 625, 7, 762, 47, 7, 11, 12, 13,
+ 11, 12, 13, 17, 69, 915, 20, 111, 22, 113,
+ 25, 115, 769, 117, 32, 1040, 816, 817, 7, 62,
+ 794, 908, 11, 12, 13, 150, 151, 152, 17, 662,
+ 33, 664, 21, 22, 667, 45, 669, 1279, 671, 1131,
+ 673, 1133, 154, 676, 7, 1287, 153, 154, 11, 12,
+ 13, 938, 685, 155, 17, 69, 689, 58, 59, 1301,
+ 693, 17, 7, 1305, 17, 29, 11, 12, 13, 14,
+ 26, 146, 17, 26, 30, 31, 156, 1102, 31, 8,
+ 69, 26, 54, 883, 29, 30, 31, 711, 1113, 1114,
+ 147, 36, 645, 150, 151, 152, 983, 53, 54, 1009,
+ 53, 54, 876, 316, 904, 8, 69, 814, 53, 54,
+ 55, 817, 147, 749, 17, 150, 151, 152, 153, 154,
+ 155, 750, 157, 26, 69, 751, 29, 30, 31, 370,
+ 938, 372, 344, 901, 889, 903, 61, 62, 938, 351,
+ 1027, 485, 354, 88, 714, 357, 53, 54, 728, 155,
+ 53, 54, 55, 365, 160, 161, 162, 1223, 1224, 749,
+ 995, 751, 1147, 748, 754, 1019, 1020, 757, 801, 1107,
+ 760, 1101, 9, 763, 522, 1200, 205, 206, 207, 1063,
+ 17, 1216, 1207, 983, 1224, 775, 957, 958, 778, 26,
+ 1221, 769, 29, 30, 31, 850, 851, 1084, 1071, 4,
+ 5, 38, 1055, 1056, 978, 10, 43, 1002, 0, 0,
+ 15, 583, 17, 18, 494, 912, 53, 54, 55, 24,
+ 853, 120, 27, 120, 200, 715, 994, 1027, 797, 34,
+ 35, 875, 37, 516, 39, 368, 120, 120, 1135, 44,
+ 341, 46, 521, 200, 49, 147, 148, 52, 150, 151,
+ 152, 153, 154, 361, 368, 60, 17, 368, 63, 120,
+ 65, 66, 67, 68, 120, 26, 120, 120, 29, 30,
+ 31, 76, 77, 78, 79, 80, 0, 82, 83, 84,
+ 85, 86, 87, 0, 89, 90, 91, 120, 120, 120,
+ 120, 52, 53, 54, 55, 1310, 1070, -1, 1009, 932,
+ -1, -1, 892, -1, 894, -1, -1, -1, 898, -1,
+ 1078, -1, -1, -1, 7, 8, 906, -1, 11, 12,
+ 13, 14, -1, -1, 17, -1, 9, 960, -1, -1,
+ -1, -1, -1, 26, 17, 968, 29, 30, 31, -1,
+ -1, -1, -1, 26, -1, -1, 29, 30, 31, -1,
+ -1, -1, 146, 147, -1, 38, 150, 151, 152, -1,
+ 53, 54, 55, -1, -1, -1, -1, 1141, -1, -1,
+ 53, 54, 55, -1, 1007, -1, 69, -1, 17, -1,
+ 1013, -1, 1015, -1, 1017, -1, 976, 26, 17, -1,
+ 29, 30, 31, -1, -1, 88, -1, 26, -1, 989,
+ 29, 30, 31, -1, 43, -1, -1, 36, 147, 148,
+ 1000, 150, 151, 152, 53, 54, 55, 1050, -1, 1009,
+ -1, -1, -1, -1, 53, 54, 55, -1, -1, 127,
+ -1, 129, -1, 131, 132, -1, 134, 1211, 136, 137,
+ -1, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ -1, 149, -1, 151, -1, -1, 147, 148, -1, 150,
+ 151, 152, 153, 154, -1, 1098, 157, 1100, 1058, -1,
+ -1, 9, -1, 1063, 172, -1, 174, 175, 176, 17,
+ 178, 1071, 1115, -1, 1284, -1, 330, -1, 26, 17,
+ 334, 29, 30, 31, -1, -1, -1, -1, 26, 343,
+ 38, 29, 30, 31, 42, 43, 350, -1, -1, 353,
+ -1, -1, 356, 1281, -1, 53, 54, 55, -1, -1,
+ 364, 1289, -1, -1, -1, 53, 54, 55, -1, 227,
+ -1, 229, -1, -1, -1, -1, -1, -1, 236, -1,
+ 238, -1, 240, -1, -1, 1135, 244, 245, 246, -1,
+ 248, 249, 250, 1143, -1, 253, -1, -1, -1, -1,
+ 258, 259, -1, 261, -1, -1, -1, -1, -1, 267,
+ -1, -1, -1, 271, 272, 1208, -1, -1, 276, 277,
+ -1, -1, 147, 281, 282, 150, 151, 152, 153, 154,
+ -1, 289, 157, -1, -1, 293, -1, -1, -1, -1,
+ -1, -1, -1, 301, -1, -1, -1, 1240, -1, 1242,
+ 308, 309, 310, -1, 312, -1, 1249, -1, -1, -1,
+ -1, -1, -1, 1213, 1214, 1215, 1216, -1, 1218, 1219,
+ -1, 1221, 1222, 1223, 1224, -1, 1226, 106, 107, 108,
109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 107, 108, 109,
- 110, 111, 112, 113, -1, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
- 130, 131, 132, 133, 134, 135, 136, 137, 138, -1,
- -1, 141, 142, 143, 144, 145, -1, -1, -1, -1,
- -1, -1, -1, -1, 783, -1, 785, -1, -1, -1,
- -1, -1, -1, -1, 793, -1, -1, 796, 797, -1,
- -1, -1, -1, 802, -1, -1, -1, 806, -1, 808,
- 809, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 821, -1, 823, -1, 825, -1, -1, -1,
- 829, 830, 831, -1, -1, 834, 835, -1, 837, 838,
- -1, 840, -1, -1, 843, -1, -1, 846, 847, -1,
- -1, 850, 851, 852, -1, -1, 855, -1, -1, -1,
- -1, -1, -1, 862, -1, -1, -1, -1, -1, -1,
+ 139, 140, 141, 142, 143, 144, 145, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, -1, 385, 386, -1,
+ -1, -1, -1, -1, 392, 393, -1, 395, -1, -1,
+ -1, 399, 400, 401, -1, 403, 146, 147, 148, -1,
+ 150, 151, 152, 153, 154, -1, 414, -1, -1, 417,
+ -1, -1, 420, 421, -1, 423, -1, 425, -1, 427,
+ -1, -1, 430, -1, -1, -1, 434, 435, -1, -1,
+ 438, 439, -1, -1, -1, -1, -1, 445, 446, -1,
+ 448, 449, -1, 451, 452, -1, -1, -1, -1, -1,
+ -1, -1, -1, 461, 462, 463, 464, 465, -1, 467,
+ -1, 469, -1, -1, 472, -1, -1, 475, -1, 477,
+ -1, 479, -1, 481, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 107, 108, 109, 110, 111, 112,
+ 113, -1, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, -1, -1, 141, 142,
+ 143, 144, 145, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 571, -1, -1, -1, -1, -1, -1,
+ 578, -1, -1, 581, -1, 583, -1, 585, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, -1, -1, -1, -1, -1, -1, -1, -1,
+ 608, 609, 610, -1, -1, 613, -1, -1, 616, 617,
+ 618, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 630, -1, 632, -1, 634, -1, 636, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 649, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 661, -1, 663, -1, -1, 666, -1,
+ 668, -1, 670, -1, 672, -1, 674, -1, -1, 677,
+ 678, 679, 680, 681, -1, 683, -1, -1, 686, -1,
+ -1, -1, -1, 691, -1, -1, -1, 695, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 913, -1, -1, 916, 917, 918,
- -1, 920, -1, 922, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 934, -1, -1, -1, -1,
- 939, 940, 941, -1, 943, 944, 945, 946, -1, 948,
- -1, 950, -1, -1, -1, -1, -1, 956, 957, 958,
- -1, 960, -1, 962, -1, -1, 965, -1, -1, -1,
- 969, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 1011, -1, 1013, -1, 1015, -1, 1017, 1018,
- 1019, -1, -1, -1, 1023, 1024, -1, -1, -1, 1028,
- 1029, -1, 1031, -1, -1, 1034, -1, 1036, -1, 191,
- 1039, 193, -1, 195, -1, -1, 198, -1, 1047, -1,
- -1, -1, -1, 1052, -1, 1054, 1055, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 783, -1, 785, -1, -1,
+ -1, -1, -1, -1, -1, 793, -1, -1, 796, 797,
+ -1, -1, -1, -1, 802, -1, -1, -1, 806, -1,
+ 808, 809, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 821, -1, 823, -1, 825, -1, -1,
+ -1, 829, 830, 831, -1, -1, 834, 835, -1, 837,
+ 838, -1, 840, -1, -1, 843, -1, -1, 846, 847,
+ -1, -1, 850, 851, 852, -1, -1, 855, -1, -1,
+ -1, -1, -1, -1, -1, 863, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 1100, 1101, -1, 1103, 1104, -1, 1106, 1107, -1,
- -1, -1, -1, 1112, 1113, -1, 1115, -1, -1, -1,
- -1, -1, -1, 1122, 1123, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 1145, 1146, 1147, -1,
- -1, -1, -1, -1, -1, -1, 1155, -1, -1, -1,
- -1, -1, 314, -1, -1, -1, -1, -1, -1, 321,
- -1, 323, 324, -1, -1, -1, -1, -1, -1, -1,
- -1, 1180, 1181, -1, 336, -1, -1, -1, -1, -1,
- 1189, 1190, 1191, 1192, 1193, 1194, -1, -1, 1197, -1,
- 1199, -1, 1201, -1, -1, -1, -1, 1206, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 286, 287, -1, 289, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 1238,
- -1, 1240, -1, -1, -1, -1, -1, -1, 1247, -1,
- 1249, -1, -1, -1, -1, 1254, -1, -1, -1, 1258,
- -1, 413, -1, 1262, -1, -1, -1, -1, 1267, -1,
- 422, -1, -1, -1, -1, -1, -1, 429, -1, -1,
- -1, -1, -1, -1, -1, 437, -1, -1, -1, -1,
- -1, 443, 444, -1, -1, 447, -1, -1, 450, -1,
- -1, -1, -1, -1, -1, 457, -1, -1, 460, -1,
- 1309, -1, -1, 1312, 1313, -1, -1, -1, 1317, 471,
- -1, -1, 474, -1, -1, -1, -1, -1, -1, -1,
- -1, 483, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 496, -1, -1, -1, 500, -1,
+ -1, -1, -1, -1, -1, -1, 914, -1, -1, 917,
+ 918, 919, -1, 921, -1, 923, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 935, -1, -1,
+ -1, -1, 940, 941, 942, -1, 944, 945, 946, 947,
+ -1, 949, -1, 951, -1, -1, -1, -1, -1, 957,
+ 958, 959, -1, 961, -1, 963, -1, -1, 966, -1,
+ -1, -1, 970, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 513, -1, -1, -1, -1, -1, 519, -1, 430,
- -1, -1, 433, -1, -1, -1, -1, -1, -1, 440,
- 441, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 458, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 568, -1, -1, -1,
- -1, -1, 574, -1, 576, -1, -1, -1, 580, -1,
- -1, -1, -1, -1, 586, -1, -1, -1, -1, -1,
- -1, 593, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 614, -1, -1, -1, -1, 619, 620, -1,
- -1, -1, -1, -1, -1, 627, -1, -1, -1, -1,
- -1, 633, -1, 635, -1, 637, 638, 639, 640, 641,
- 642, 643, -1, -1, -1, -1, 648, -1, -1, -1,
+ -1, -1, -1, -1, 1012, -1, 1014, -1, 1016, -1,
+ 1018, 1019, 1020, -1, -1, -1, 1024, 1025, -1, -1,
+ -1, 1029, 1030, -1, 1032, -1, -1, 1035, -1, 1037,
+ -1, 191, 1040, 193, -1, 195, -1, -1, 198, -1,
+ 1048, -1, -1, -1, -1, 1053, -1, 1055, 1056, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1101, 1102, -1, 1104, 1105, -1, 1107,
+ 1108, -1, -1, -1, -1, 1113, 1114, -1, 1116, -1,
+ -1, -1, -1, -1, -1, 1123, 1124, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 1146, 1147,
+ 1148, -1, -1, -1, -1, -1, -1, -1, 1156, -1,
+ -1, -1, -1, -1, 314, -1, -1, -1, -1, -1,
+ -1, 321, -1, 323, 324, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1181, 1182, -1, 336, -1, -1, -1,
+ -1, -1, 1190, 1191, 1192, 1193, 1194, 1195, -1, -1,
+ 1198, -1, 1200, -1, 1202, -1, -1, -1, -1, 1207,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 623, 624, 716, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 286, 287, -1,
+ 289, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 1239, -1, 1241, -1, -1, -1, -1, -1, -1,
+ 1248, -1, 1250, -1, -1, -1, -1, 1255, -1, -1,
+ -1, 1259, -1, 413, -1, 1263, -1, -1, -1, -1,
+ 1268, -1, 422, -1, -1, -1, -1, -1, -1, 429,
+ -1, -1, -1, -1, -1, -1, -1, 437, -1, -1,
+ -1, -1, -1, 443, 444, -1, -1, 447, -1, -1,
+ 450, -1, -1, -1, -1, -1, -1, 457, -1, -1,
+ 460, -1, 1310, -1, -1, 1313, 1314, -1, -1, -1,
+ 1318, 471, -1, -1, 474, -1, -1, -1, -1, -1,
+ -1, -1, -1, 483, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 496, -1, -1, -1,
+ 500, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 513, -1, -1, -1, -1, -1, 519,
+ -1, 430, -1, -1, 433, -1, -1, -1, -1, -1,
+ -1, 440, 441, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 458,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 568, -1,
+ -1, -1, -1, -1, 574, -1, 576, -1, -1, -1,
+ 580, -1, -1, -1, -1, -1, 586, -1, -1, -1,
+ -1, -1, -1, 593, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 614, -1, -1, -1, -1, 619,
+ 620, -1, -1, -1, -1, -1, -1, 627, -1, -1,
+ -1, -1, -1, 633, -1, 635, -1, 637, 638, 639,
+ 640, 641, 642, 643, -1, -1, -1, -1, 648, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 776, -1, -1, 779, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 795, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 811,
- -1, -1, -1, -1, -1, -1, -1, 819, -1, -1,
- -1, -1, -1, -1, -1, -1, 828, -1, -1, -1,
- -1, 833, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 845, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 861,
- -1, 863, 864, 865, 866, -1, -1, -1, -1, -1,
- 872, -1, -1, -1, -1, 877, 878, -1, -1, 790,
- 791, 792, 793, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 810,
- -1, -1, -1, -1, 906, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 938, -1, -1, -1,
+ -1, -1, -1, -1, 623, 624, 716, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 953, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 963, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 976, -1, 978, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 995, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 1005, -1, -1, -1, 1009, 919, -1,
- -1, -1, -1, -1, 925, -1, -1, -1, -1, -1,
- -1, 932, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 1040, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 1068, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 1080, -1,
- 1082, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 776, -1, -1, 779,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 1021, -1, -1, -1, -1, -1, -1, -1, 1120, -1,
+ -1, -1, -1, -1, -1, 795, -1, 102, 103, -1,
+ -1, 106, 107, -1, 109, -1, 111, -1, 113, -1,
+ 115, 811, 117, 118, 119, -1, 121, 122, 123, 819,
+ -1, -1, -1, -1, -1, -1, -1, -1, 828, -1,
+ -1, -1, -1, 833, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 845, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 1133, -1, -1, -1, -1, -1, -1, -1, 1141,
- -1, 1143, 1144, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 862, -1, 864, 865, 866, 867, -1, -1,
+ -1, -1, -1, 873, -1, -1, 181, -1, 878, 879,
+ -1, 790, 791, 792, 793, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 810, -1, -1, -1, -1, -1, 907, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 1187, -1, -1, -1, -1,
- -1, -1, -1, 1195, -1, -1, -1, -1, 1109, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 1211,
- -1, -1, -1, 1124, -1, -1, -1, 1219, -1, -1,
- -1, -1, -1, -1, -1, 1227, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 939,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 954, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 964, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 977, -1, 979,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 996, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 1006, -1, -1, -1,
+ 1010, 920, -1, -1, -1, 320, -1, 926, -1, -1,
+ 325, 326, -1, -1, 933, -1, 331, -1, -1, -1,
+ -1, -1, -1, -1, 339, 340, -1, -1, -1, 344,
+ -1, 1041, -1, 348, -1, -1, 351, -1, -1, 354,
+ -1, -1, 357, -1, -1, 360, -1, -1, 363, -1,
+ 365, -1, -1, -1, -1, -1, -1, -1, -1, 1069,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 1081, -1, 1083, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 1274, 1275, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 1203, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1022, -1, -1, -1, -1, -1, -1,
+ -1, 1121, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 1134, -1, -1, -1, -1, -1,
+ -1, -1, 1142, -1, 1144, 1145, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 1315, -1, -1, 1318, -1, -1, -1,
- 1231, -1, -1, -1, 1235, 1236, -1, 1238, -1, 1240,
- -1, -1, -1, 1244, 1245, -1, 1247, -1, 1249, 1341,
- 1251, 1252, -1, 1254, 1255, 1256, -1, 1258, -1, 1260,
- -1, 1262, 1263, -1, 1265, -1, 1267, 1268, -1, 1270,
- -1, 1272, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 487, 488, -1, -1, -1, -1, 1188, -1,
+ -1, -1, -1, -1, -1, -1, 1196, -1, -1, -1,
+ 505, 1110, 507, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 1212, 518, -1, -1, 1125, -1, -1, -1,
+ 1220, -1, -1, -1, -1, -1, -1, -1, 1228, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 1311, 1312, -1, 1314, -1, 1316, 1317, -1, 1319, 1320,
- 1321, 1322, 1323, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 1340,
- -1, 1342
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 566, -1, -1, 569, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 1275, 1276, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 1204, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 1316, -1, -1, 1319,
+ -1, -1, -1, 1232, -1, -1, -1, 1236, 1237, -1,
+ 1239, -1, 1241, -1, -1, -1, 1245, 1246, -1, 1248,
+ -1, 1250, 1342, 1252, 1253, -1, 1255, 1256, 1257, -1,
+ 1259, -1, 1261, -1, 1263, 1264, -1, 1266, -1, 1268,
+ 1269, -1, 1271, -1, 1273, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 705, -1, -1, 1312, 1313, -1, 1315, -1, 1317, 1318,
+ -1, 1320, 1321, 1322, 1323, 1324, 721, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 1341, -1, 1343, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 753, -1,
+ -1, 756, -1, -1, -1, -1, -1, -1, -1, -1,
+ 765, -1, -1, -1, -1, -1, -1, -1, -1, 774,
+ -1, -1, 777, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 874,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 904,
+ -1, -1, -1, -1, -1, -1, -1, -1, 913, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 980, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1008, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 1060, -1, 1062, -1, -1,
+ 1065, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 1082, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 1126, 1127, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1138
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2006,56 +2086,56 @@ static const yytype_uint16 yystos[] =
211, 237, 249, 214, 218, 237, 249, 204, 216, 222,
228, 233, 204, 221, 228, 233, 168, 224, 233, 168,
231, 183, 204, 235, 146, 205, 411, 376, 43, 207,
- 418, 422, 470, 471, 202, 376, 237, 202, 410, 460,
- 474, 476, 415, 327, 258, 258, 258, 203, 258, 171,
- 202, 203, 361, 201, 203, 203, 203, 374, 258, 202,
- 184, 200, 181, 190, 197, 193, 202, 208, 203, 208,
- 202, 203, 208, 203, 208, 208, 202, 203, 208, 208,
- 203, 208, 203, 203, 202, 203, 461, 203, 473, 473,
- 206, 201, 203, 202, 203, 202, 202, 202, 202, 257,
- 411, 202, 265, 365, 171, 266, 7, 11, 12, 13,
- 255, 256, 378, 202, 202, 179, 194, 195, 217, 219,
- 222, 228, 233, 228, 233, 233, 233, 168, 225, 168,
- 232, 183, 204, 236, 42, 207, 418, 422, 468, 469,
- 470, 202, 377, 318, 204, 424, 203, 375, 422, 483,
- 486, 203, 203, 203, 258, 203, 412, 203, 258, 201,
- 258, 203, 167, 197, 202, 203, 203, 203, 203, 208,
- 208, 208, 208, 203, 203, 229, 202, 461, 461, 203,
- 206, 201, 206, 203, 202, 327, 479, 201, 203, 484,
- 8, 278, 281, 279, 281, 280, 281, 237, 418, 422,
- 202, 266, 202, 265, 278, 179, 196, 197, 222, 228,
- 233, 228, 233, 233, 233, 168, 226, 259, 202, 470,
- 166, 7, 11, 12, 13, 14, 69, 419, 420, 421,
- 202, 201, 376, 207, 422, 486, 202, 203, 269, 201,
- 206, 201, 203, 272, 201, 327, 412, 412, 258, 203,
- 203, 384, 197, 203, 203, 203, 208, 203, 206, 202,
- 327, 201, 476, 203, 484, 484, 7, 11, 12, 13,
- 14, 69, 88, 207, 251, 252, 253, 254, 260, 264,
- 278, 302, 204, 282, 282, 207, 280, 282, 202, 266,
- 36, 207, 302, 385, 386, 228, 233, 233, 233, 168,
- 227, 202, 265, 202, 377, 201, 201, 269, 206, 203,
- 203, 272, 203, 258, 203, 206, 206, 201, 203, 202,
- 203, 261, 203, 477, 258, 265, 265, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 283, 286, 295,
- 295, 106, 114, 139, 140, 288, 291, 295, 202, 385,
- 204, 387, 233, 266, 202, 207, 470, 479, 202, 202,
- 203, 261, 203, 203, 203, 203, 202, 203, 203, 293,
- 203, 203, 203, 203, 202, 203, 206, 327, 258, 206,
- 201, 266, 202, 20, 22, 237, 252, 284, 296, 297,
- 300, 301, 284, 21, 237, 252, 285, 298, 299, 300,
- 285, 237, 252, 287, 300, 237, 260, 294, 300, 202,
- 237, 289, 296, 300, 284, 237, 290, 298, 300, 290,
- 237, 292, 300, 202, 476, 258, 258, 258, 203, 258,
- 201, 203, 258, 201, 258, 258, 203, 258, 201, 203,
- 258, 258, 258, 203, 258, 258, 258, 203, 258, 258,
- 203, 258, 258, 258, 203, 258, 258, 258, 258, 202,
- 202, 252, 300, 168, 252, 179, 252, 300, 168, 252,
- 252, 260, 300, 300, 477, 258, 203, 258, 203, 258,
- 202, 258, 203, 258, 202, 258, 258, 258, 258, 258,
- 252, 257, 252, 258, 202, 258
+ 418, 422, 470, 471, 202, 376, 237, 202, 366, 410,
+ 460, 474, 476, 415, 327, 258, 258, 258, 203, 258,
+ 171, 202, 203, 361, 201, 203, 203, 203, 374, 258,
+ 202, 184, 200, 181, 190, 197, 193, 202, 208, 203,
+ 208, 202, 203, 208, 203, 208, 208, 202, 203, 208,
+ 208, 203, 208, 203, 203, 202, 203, 461, 203, 473,
+ 473, 206, 201, 203, 202, 203, 202, 202, 202, 202,
+ 257, 411, 202, 265, 365, 171, 266, 7, 11, 12,
+ 13, 255, 256, 378, 202, 202, 179, 194, 195, 217,
+ 219, 222, 228, 233, 228, 233, 233, 233, 168, 225,
+ 168, 232, 183, 204, 236, 42, 207, 418, 422, 468,
+ 469, 470, 202, 377, 318, 204, 424, 203, 375, 422,
+ 483, 486, 203, 203, 203, 258, 203, 412, 203, 258,
+ 201, 258, 203, 167, 197, 202, 203, 203, 203, 203,
+ 208, 208, 208, 208, 203, 203, 229, 202, 461, 461,
+ 203, 206, 201, 206, 203, 202, 327, 479, 201, 203,
+ 484, 8, 278, 281, 279, 281, 280, 281, 237, 418,
+ 422, 202, 266, 202, 265, 278, 179, 196, 197, 222,
+ 228, 233, 228, 233, 233, 233, 168, 226, 259, 202,
+ 470, 166, 7, 11, 12, 13, 14, 69, 419, 420,
+ 421, 202, 201, 376, 207, 422, 486, 202, 203, 269,
+ 201, 206, 201, 203, 272, 201, 327, 412, 412, 258,
+ 203, 203, 384, 197, 203, 203, 203, 208, 203, 206,
+ 202, 327, 201, 476, 203, 484, 484, 7, 11, 12,
+ 13, 14, 69, 88, 207, 251, 252, 253, 254, 260,
+ 264, 278, 302, 204, 282, 282, 207, 280, 282, 202,
+ 266, 36, 207, 302, 385, 386, 228, 233, 233, 233,
+ 168, 227, 202, 265, 202, 377, 201, 201, 269, 206,
+ 203, 203, 272, 203, 258, 203, 206, 206, 201, 203,
+ 202, 203, 261, 203, 477, 258, 265, 265, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 283, 286,
+ 295, 295, 106, 114, 139, 140, 288, 291, 295, 202,
+ 385, 204, 387, 233, 266, 202, 207, 470, 479, 202,
+ 202, 203, 261, 203, 203, 203, 203, 202, 203, 203,
+ 293, 203, 203, 203, 203, 202, 203, 206, 327, 258,
+ 206, 201, 266, 202, 20, 22, 237, 252, 284, 296,
+ 297, 300, 301, 284, 21, 237, 252, 285, 298, 299,
+ 300, 285, 237, 252, 287, 300, 237, 260, 294, 300,
+ 202, 237, 289, 296, 300, 284, 237, 290, 298, 300,
+ 290, 237, 292, 300, 202, 476, 258, 258, 258, 203,
+ 258, 201, 203, 258, 201, 258, 258, 203, 258, 201,
+ 203, 258, 258, 258, 203, 258, 258, 258, 203, 258,
+ 258, 203, 258, 258, 258, 203, 258, 258, 258, 258,
+ 202, 202, 252, 300, 168, 252, 179, 252, 300, 168,
+ 252, 252, 260, 300, 300, 477, 258, 203, 258, 203,
+ 258, 202, 258, 203, 258, 202, 258, 258, 258, 258,
+ 258, 252, 257, 252, 258, 202, 258
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
@@ -2124,9 +2204,9 @@ static const yytype_uint16 yyr1[] =
459, 459, 459, 459, 459, 459, 459, 459, 460, 461,
461, 461, 461, 461, 461, 461, 462, 463, 464, 465,
466, 467, 468, 469, 470, 471, 472, 473, 473, 473,
- 473, 473, 474, 475, 476, 476, 476, 477, 477, 477,
- 477, 478, 479, 480, 481, 482, 483, 483, 484, 484,
- 484, 484, 485, 486
+ 473, 473, 474, 475, 476, 476, 476, 476, 477, 477,
+ 477, 477, 478, 479, 480, 481, 482, 483, 483, 484,
+ 484, 484, 484, 485, 486
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -2195,9 +2275,9 @@ static const yytype_uint8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 1, 13, 0,
3, 3, 3, 5, 3, 2, 1, 1, 4, 1,
4, 1, 4, 1, 4, 1, 11, 0, 3, 3,
- 3, 2, 1, 19, 1, 1, 1, 0, 6, 3,
- 2, 1, 1, 9, 1, 9, 1, 1, 0, 3,
- 3, 2, 1, 7
+ 3, 2, 1, 19, 1, 1, 1, 1, 0, 6,
+ 3, 2, 1, 1, 9, 1, 9, 1, 1, 0,
+ 3, 3, 2, 1, 7
};
diff --git a/src/wkt2_grammar.y b/src/wkt2_grammar.y
index 5d06a3ed..6a69546b 100644
--- a/src/wkt2_grammar.y
+++ b/src/wkt2_grammar.y
@@ -1458,7 +1458,7 @@ concatenated_operation: concatenated_operation_keyword left_delimiter
opt_concatenated_operation_end
right_delimiter
-step: coordinate_operation | point_motion_keyword | deriving_conversion
+step: coordinate_operation | point_motion_keyword | map_projection | deriving_conversion
opt_concatenated_operation_end:
| wkt_separator step_keyword left_delimiter step right_delimiter opt_concatenated_operation_end
diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp
index fd09ba34..deff6b63 100644
--- a/test/unit/test_factory.cpp
+++ b/test/unit/test_factory.cpp
@@ -1102,7 +1102,8 @@ TEST(factory, AuthorityFactory_build_all_concatenated) {
// the issue with 7987 is the chaining of two conversions
"7987"})) {
EXPECT_THROW(factory->createCoordinateOperation(code, false),
- FactoryException);
+ FactoryException)
+ << code;
} else {
factory->createCoordinateOperation(code, false);
}
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index 54cccb89..b647ed2a 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -2227,6 +2227,473 @@ TEST(wkt_parse, CONCATENATEDOPERATION) {
// ---------------------------------------------------------------------------
+TEST(wkt_parse, CONCATENATEDOPERATION_with_conversion_and_conversion) {
+
+ auto wkt =
+ "CONCATENATEDOPERATION[\"Inverse of UTM zone 31N + UTM zone 32N\",\n"
+ " SOURCECRS[\n"
+ " PROJCRS[\"WGS 84 / UTM zone 31N\",\n"
+ " BASEGEOGCRS[\"WGS 84\",\n"
+ " DATUM[\"World Geodetic System 1984\",\n"
+ " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n"
+ " CONVERSION[\"UTM zone 31N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",3,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]]],\n"
+ " CS[Cartesian,2],\n"
+ " AXIS[\"(E)\",east,\n"
+ " ORDER[1],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " AXIS[\"(N)\",north,\n"
+ " ORDER[2],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " ID[\"EPSG\",32631]]],\n"
+ " TARGETCRS[\n"
+ " PROJCRS[\"WGS 84 / UTM zone 32N\",\n"
+ " BASEGEOGCRS[\"WGS 84\",\n"
+ " DATUM[\"World Geodetic System 1984\",\n"
+ " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n"
+ " CONVERSION[\"UTM zone 32N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",9,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]]],\n"
+ " CS[Cartesian,2],\n"
+ " AXIS[\"(E)\",east,\n"
+ " ORDER[1],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " AXIS[\"(N)\",north,\n"
+ " ORDER[2],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " ID[\"EPSG\",32632]]],\n"
+ " STEP[\n"
+ " CONVERSION[\"Inverse of UTM zone 31N\",\n"
+ " METHOD[\"Inverse of Transverse Mercator\",\n"
+ " ID[\"INVERSE(EPSG)\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",3,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]],\n"
+ " ID[\"INVERSE(EPSG)\",16031]]],\n"
+ " STEP[\n"
+ " CONVERSION[\"UTM zone 32N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",9,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]],\n"
+ " ID[\"EPSG\",16032]]]]";
+
+ auto obj = WKTParser().createFromWKT(wkt);
+ auto concat = nn_dynamic_pointer_cast<ConcatenatedOperation>(obj);
+ ASSERT_TRUE(concat != nullptr);
+
+ EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()),
+ "+proj=pipeline +step +inv +proj=utm +zone=31 +ellps=WGS84 "
+ "+step +proj=utm +zone=32 +ellps=WGS84");
+
+ auto outWkt = concat->exportToWKT(
+ WKTFormatter::create(WKTFormatter::Convention::WKT2_2018).get());
+ EXPECT_EQ(wkt, outWkt);
+}
+
+// ---------------------------------------------------------------------------
+
+TEST(wkt_parse,
+ CONCATENATEDOPERATION_with_conversion_coordinateoperation_conversion) {
+
+ auto wkt =
+ "CONCATENATEDOPERATION[\"Inverse of UTM zone 11N + NAD27 to WGS 84 "
+ "(79) + UTM zone 11N\",\n"
+ " SOURCECRS[\n"
+ " PROJCRS[\"NAD27 / UTM zone 11N\",\n"
+ " BASEGEOGCRS[\"NAD27\",\n"
+ " DATUM[\"North American Datum 1927\",\n"
+ " ELLIPSOID[\"Clarke "
+ "1866\",6378206.4,294.978698213898,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n"
+ " CONVERSION[\"UTM zone 11N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",-117,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]]],\n"
+ " CS[Cartesian,2],\n"
+ " AXIS[\"(E)\",east,\n"
+ " ORDER[1],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " AXIS[\"(N)\",north,\n"
+ " ORDER[2],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " ID[\"EPSG\",26711]]],\n"
+ " TARGETCRS[\n"
+ " PROJCRS[\"WGS 84 / UTM zone 11N\",\n"
+ " BASEGEOGCRS[\"WGS 84\",\n"
+ " DATUM[\"World Geodetic System 1984\",\n"
+ " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n"
+ " CONVERSION[\"UTM zone 11N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",-117,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]]],\n"
+ " CS[Cartesian,2],\n"
+ " AXIS[\"(E)\",east,\n"
+ " ORDER[1],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " AXIS[\"(N)\",north,\n"
+ " ORDER[2],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " ID[\"EPSG\",32611]]],\n"
+ " STEP[\n"
+ " CONVERSION[\"Inverse of UTM zone 11N\",\n"
+ " METHOD[\"Inverse of Transverse Mercator\",\n"
+ " ID[\"INVERSE(EPSG)\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",-117,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]],\n"
+ " ID[\"INVERSE(EPSG)\",16011]]],\n"
+ " STEP[\n"
+ " COORDINATEOPERATION[\"NAD27 to WGS 84 (79)\",\n"
+ " SOURCECRS[\n"
+ " GEOGCRS[\"NAD27\",\n"
+ " DATUM[\"North American Datum 1927\",\n"
+ " ELLIPSOID[\"Clarke "
+ "1866\",6378206.4,294.978698213898,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " "
+ "ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " "
+ "ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n"
+ " TARGETCRS[\n"
+ " GEOGCRS[\"WGS 84\",\n"
+ " DATUM[\"World Geodetic System 1984\",\n"
+ " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " "
+ "ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " "
+ "ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n"
+ " METHOD[\"CTABLE2\"],\n"
+ " PARAMETERFILE[\"Latitude and longitude difference "
+ "file\",\"conus\"],\n"
+ " ID[\"DERIVED_FROM(EPSG)\",15851]]],\n"
+ " STEP[\n"
+ " CONVERSION[\"UTM zone 11N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",-117,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]],\n"
+ " ID[\"EPSG\",16011]]]]";
+
+ auto obj = WKTParser().createFromWKT(wkt);
+ auto concat = nn_dynamic_pointer_cast<ConcatenatedOperation>(obj);
+ ASSERT_TRUE(concat != nullptr);
+
+ EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()),
+ "+proj=pipeline +step +inv +proj=utm +zone=11 +ellps=clrk66 "
+ "+step +proj=hgridshift +grids=conus +step +proj=utm "
+ "+zone=11 +ellps=WGS84");
+
+ auto outWkt = concat->exportToWKT(
+ WKTFormatter::create(WKTFormatter::Convention::WKT2_2018).get());
+ EXPECT_EQ(wkt, outWkt);
+}
+
+// ---------------------------------------------------------------------------
+
+TEST(
+ wkt_parse,
+ CONCATENATEDOPERATION_with_conversion_coordinateoperation_to_inverse_conversion) {
+
+ auto wkt =
+ "CONCATENATEDOPERATION[\"Inverse of UTM zone 11N + NAD27 to WGS 84 "
+ "(79) + UTM zone 11N\",\n"
+ " SOURCECRS[\n"
+ " PROJCRS[\"WGS 84 / UTM zone 11N\",\n"
+ " BASEGEOGCRS[\"WGS 84\",\n"
+ " DATUM[\"World Geodetic System 1984\",\n"
+ " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n"
+ " CONVERSION[\"UTM zone 11N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",-117,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]]],\n"
+ " CS[Cartesian,2],\n"
+ " AXIS[\"(E)\",east,\n"
+ " ORDER[1],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " AXIS[\"(N)\",north,\n"
+ " ORDER[2],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " ID[\"EPSG\",32611]]],\n"
+ " TARGETCRS[\n"
+ " PROJCRS[\"NAD27 / UTM zone 11N\",\n"
+ " BASEGEOGCRS[\"NAD27\",\n"
+ " DATUM[\"North American Datum 1927\",\n"
+ " ELLIPSOID[\"Clarke "
+ "1866\",6378206.4,294.978698213898,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n"
+ " CONVERSION[\"UTM zone 11N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",-117,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]]],\n"
+ " CS[Cartesian,2],\n"
+ " AXIS[\"(E)\",east,\n"
+ " ORDER[1],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " AXIS[\"(N)\",north,\n"
+ " ORDER[2],\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " ID[\"EPSG\",26711]]],\n"
+ " STEP[\n"
+ " CONVERSION[\"Inverse of UTM zone 11N\",\n"
+ " METHOD[\"Inverse of Transverse Mercator\",\n"
+ " ID[\"INVERSE(EPSG)\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",-117,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]],\n"
+ " ID[\"INVERSE(EPSG)\",16011]]],\n"
+ " STEP[\n"
+ " COORDINATEOPERATION[\"NAD27 to WGS 84 (79)\",\n"
+ " SOURCECRS[\n"
+ " GEOGCRS[\"NAD27\",\n"
+ " DATUM[\"North American Datum 1927\",\n"
+ " ELLIPSOID[\"Clarke "
+ "1866\",6378206.4,294.978698213898,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " "
+ "ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " "
+ "ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n"
+ " TARGETCRS[\n"
+ " GEOGCRS[\"WGS 84\",\n"
+ " DATUM[\"World Geodetic System 1984\",\n"
+ " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " "
+ "ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " "
+ "ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n"
+ " METHOD[\"CTABLE2\"],\n"
+ " PARAMETERFILE[\"Latitude and longitude difference "
+ "file\",\"conus\"],\n"
+ " ID[\"DERIVED_FROM(EPSG)\",15851]]],\n"
+ " STEP[\n"
+ " CONVERSION[\"UTM zone 11N\",\n"
+ " METHOD[\"Transverse Mercator\",\n"
+ " ID[\"EPSG\",9807]],\n"
+ " PARAMETER[\"Latitude of natural origin\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8801]],\n"
+ " PARAMETER[\"Longitude of natural origin\",-117,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8802]],\n"
+ " PARAMETER[\"Scale factor at natural origin\",0.9996,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8805]],\n"
+ " PARAMETER[\"False easting\",500000,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]],\n"
+ " ID[\"EPSG\",16011]]]]";
+
+ auto obj = WKTParser().createFromWKT(wkt);
+ auto concat = nn_dynamic_pointer_cast<ConcatenatedOperation>(obj);
+ ASSERT_TRUE(concat != nullptr);
+
+ EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()),
+ "+proj=pipeline +step +inv +proj=utm +zone=11 +ellps=WGS84 "
+ "+step +inv +proj=hgridshift +grids=conus +step "
+ "+proj=utm +zone=11 +ellps=clrk66");
+}
+
+// ---------------------------------------------------------------------------
+
TEST(wkt_parse, BOUNDCRS_transformation_from_names) {
auto projcrs = ProjectedCRS::create(
@@ -6300,7 +6767,8 @@ TEST(io, projparse_longlat_pm_numeric) {
TEST(io, projparse_longlat_pm_overriding_datum) {
// It is arguable that we allow the prime meridian of a datum defined by
- // its name to be overridden, but this is found at least in a regression test
+ // its name to be overridden, but this is found at least in a regression
+ // test
// of GDAL. So let's keep the ellipsoid part of the datum in that case and
// use the specified prime meridian.
auto obj = PROJStringParser().createFromPROJString(