[geos-commits] r3296 - in trunk: include/geos/operation/union php/test src/operation/union tests/unit/capi tests/xmltester tests/xmltester/tests/ticket

svn_geos at osgeo.org svn_geos at osgeo.org
Sat Apr 23 06:03:16 EDT 2011


Author: strk
Date: 2011-04-23 03:03:16 -0700 (Sat, 23 Apr 2011)
New Revision: 3296

Added:
   trunk/include/geos/operation/union/CascadedUnion.h
   trunk/src/operation/union/CascadedUnion.cpp
   trunk/tests/xmltester/tests/ticket/bug392.xml
Modified:
   trunk/include/geos/operation/union/Makefile.am
   trunk/php/test/test.php
   trunk/src/operation/union/Makefile.am
   trunk/src/operation/union/UnaryUnionOp.cpp
   trunk/tests/unit/capi/GEOSUnaryUnionTest.cpp
   trunk/tests/xmltester/Makefile.am
Log:
Generalize CascadedPolygonUnion into a CascadedUnion. Use the generalized class for unary union of lines, fixing bug #392. Automate testing of it, tweak expected results from other tests (output components reordered).

Added: trunk/include/geos/operation/union/CascadedUnion.h
===================================================================
--- trunk/include/geos/operation/union/CascadedUnion.h	                        (rev 0)
+++ trunk/include/geos/operation/union/CascadedUnion.h	2011-04-23 10:03:16 UTC (rev 3296)
@@ -0,0 +1,200 @@
+/**********************************************************************
+ * $Id$
+ *
+ * GEOS - Geometry Engine Open Source
+ * http://trac.osgeo.org/geos
+ *
+ * Copyright (C) 2011 Sandro Santilli <strk at keybit.net>
+ *
+ * This is free software; you can redistribute and/or modify it under
+ * the terms of the GNU Lesser General Public Licence as published
+ * by the Free Software Foundation. 
+ * See the COPYING file for more information.
+ *
+ **********************************************************************
+ *
+ * Last port: ORIGINAL WORK, generalization of CascadedPolygonUnion
+ *
+ **********************************************************************/
+
+#ifndef GEOS_OP_UNION_CASCADEDUNION_H
+#define GEOS_OP_UNION_CASCADEDUNION_H
+
+#include <geos/export.h>
+
+#include <vector>
+#include <algorithm>
+
+#include "GeometryListHolder.h"
+
+// Forward declarations
+namespace geos {
+    namespace geom {
+        class GeometryFactory;
+        class Geometry;
+        class Geometry;
+        class Envelope;
+    }
+    namespace index {
+        namespace strtree {
+            class ItemsList;
+        }
+    }
+}
+
+namespace geos {
+namespace operation { // geos::operation
+namespace geounion {  // geos::operation::geounion
+
+/**
+ * \brief 
+ * Provides an efficient method of unioning a collection of Geometries
+ *
+ * This algorithm is more robust than the simple iterated approach
+ * of repeatedly unioning each geometry to a result geometry.
+ */
+class GEOS_DLL CascadedUnion 
+{
+private:
+    const std::vector<geom::Geometry*>* inputGeoms;
+    geom::GeometryFactory const* geomFactory;
+
+    /**
+     * The effectiveness of the index is somewhat sensitive
+     * to the node capacity.  
+     * Testing indicates that a smaller capacity is better.
+     * For an STRtree, 4 is probably a good number (since
+     * this produces 2x2 "squares").
+     */
+    static int const STRTREE_NODE_CAPACITY = 4;
+
+public:
+    CascadedUnion();
+
+    /**
+     * Computes the union of a collection of {@link Geometry}s.
+     * 
+     * @param geoms a collection of {@link Geometry}s.
+     *        ownership of elements _and_ vector are left to caller.
+     */
+    static geom::Geometry* Union(std::vector<geom::Geometry*>* geoms);
+
+    /**
+     * Computes the union of a set of {@link Geometry}s.
+     * 
+     * @tparam T an iterator yelding something castable to const Geometry *
+     * @param start start iterator
+     * @param end end iterator
+     */
+    template <class T>
+    static geom::Geometry* Union(T start, T end)
+    {
+      std::vector<geom::Geometry*> polys;
+      for (T i=start; i!=end; ++i) {
+        const geom::Geometry* p = dynamic_cast<const geom::Geometry*>(*i);
+        polys.push_back(const_cast<geom::Geometry*>(p));
+      }
+      return Union(&polys);
+    }
+
+    /**
+     * Creates a new instance to union
+     * the given collection of {@link Geometry}s.
+     * 
+     * @param geoms a collection of {@link Geometryal} {@link Geometry}s
+     *        ownership of elements _and_ vector are left to caller.
+     */
+    CascadedUnion(const std::vector<geom::Geometry*>* geoms)
+      : inputGeoms(geoms),
+        geomFactory(NULL)
+    {}
+
+    /**
+     * Computes the union of the input geometries.
+     * 
+     * @return the union of the input geometries
+     * @return null if no input geometries were provided
+     */
+    geom::Geometry* Union();
+
+private:
+    geom::Geometry* unionTree(index::strtree::ItemsList* geomTree);
+
+    /**
+     * Unions a list of geometries 
+     * by treating the list as a flattened binary tree,
+     * and performing a cascaded union on the tree.
+     */
+    geom::Geometry* binaryUnion(GeometryListHolder* geoms);
+
+    /**
+     * Unions a section of a list using a recursive binary union on each half
+     * of the section.
+     * 
+     * @param geoms
+     * @param start
+     * @param end
+     * @return the union of the list section
+     */
+    geom::Geometry* binaryUnion(GeometryListHolder* geoms, std::size_t start, 
+        std::size_t end);
+
+    /**
+     * Reduces a tree of geometries to a list of geometries
+     * by recursively unioning the subtrees in the list.
+     * 
+     * @param geomTree a tree-structured list of geometries
+     * @return a list of Geometrys
+     */
+    GeometryListHolder* reduceToGeometries(index::strtree::ItemsList* geomTree);
+
+    /**
+     * Computes the union of two geometries, 
+     * either of both of which may be null.
+     * 
+     * @param g0 a Geometry
+     * @param g1 a Geometry
+     * @return the union of the input(s)
+     * @return null if both inputs are null
+     */
+    geom::Geometry* unionSafe(geom::Geometry* g0, geom::Geometry* g1);
+
+    geom::Geometry* unionOptimized(geom::Geometry* g0, geom::Geometry* g1);
+
+    /**
+     * Unions two geometries.
+     * The case of multi geometries is optimized to union only 
+     * the components which lie in the intersection of the two geometry's
+     * envelopes.
+     * Geometrys outside this region can simply be combined with the union
+     * result, which is potentially much faster.
+     * This case is likely to occur often during cascaded union, and may also
+     * occur in real world data (such as unioning data for parcels on
+     * different street blocks).
+     * 
+     * @param g0 a geometry
+     * @param g1 a geometry
+     * @param common the intersection of the envelopes of the inputs
+     * @return the union of the inputs
+     */
+    geom::Geometry* unionUsingEnvelopeIntersection(geom::Geometry* g0, 
+        geom::Geometry* g1, geom::Envelope const& common);
+
+    geom::Geometry* extractByEnvelope(geom::Envelope const& env, 
+        geom::Geometry* geom, std::vector<geom::Geometry*>& disjointGeoms);
+
+    /**
+     * Encapsulates the actual unioning of two polygonal geometries.
+     * 
+     * @param g0
+     * @param g1
+     * @return
+     */
+    static geom::Geometry* unionActual(geom::Geometry* g0, geom::Geometry* g1);
+};
+
+} // namespace geos::operation::union
+} // namespace geos::operation
+} // namespace geos
+
+#endif

Modified: trunk/include/geos/operation/union/Makefile.am
===================================================================
--- trunk/include/geos/operation/union/Makefile.am	2011-04-22 22:26:38 UTC (rev 3295)
+++ trunk/include/geos/operation/union/Makefile.am	2011-04-23 10:03:16 UTC (rev 3296)
@@ -10,6 +10,7 @@
 
 geos_HEADERS = \
     CascadedPolygonUnion.h \
+    CascadedUnion.h \
     GeometryListHolder.h \
     PointGeometryUnion.h \
     UnaryUnionOp.h

Modified: trunk/php/test/test.php
===================================================================
--- trunk/php/test/test.php	2011-04-22 22:26:38 UTC (rev 3295)
+++ trunk/php/test/test.php	2011-04-23 10:03:16 UTC (rev 3296)
@@ -879,7 +879,7 @@
 
         $gu = $g->union();
         $this->assertEquals(
-'MULTILINESTRING ((0 0, 1 0), (1 0, 1 1, 0 1), (0 1, 0 0), (10 10, 10 11), (10 11, 10 14, 14 14, 14 10, 11 10), (11 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11), (1 0, 11 0, 11 10), (11 10, 11 11), (11 11, 10 11), (10 11, 0 11, 0 1))'
+'MULTILINESTRING ((0 0, 1 0), (1 0, 1 1, 0 1), (0 1, 0 0), (1 0, 11 0, 11 10), (11 10, 11 11), (11 11, 10 11), (10 11, 0 11, 0 1), (11 11, 11 12, 12 12, 12 11, 11 11), (10 10, 10 11), (10 11, 10 14, 14 14, 14 10, 11 10), (11 10, 10 10))'
             , $writer->write($gu));
 
         $g = $reader->read('MULTIPOINT(

Added: trunk/src/operation/union/CascadedUnion.cpp
===================================================================
--- trunk/src/operation/union/CascadedUnion.cpp	                        (rev 0)
+++ trunk/src/operation/union/CascadedUnion.cpp	2011-04-23 10:03:16 UTC (rev 3296)
@@ -0,0 +1,199 @@
+/**********************************************************************
+ * $Id$
+ *
+ * GEOS - Geometry Engine Open Source
+ * http://trac.osgeo.org/geos
+ *
+ * Copyright (C) 2011 Sandro Santilli <strk at keybit.net>
+ *
+ * This is free software; you can redistribute and/or modify it under
+ * the terms of the GNU Lesser General Public Licence as published
+ * by the Free Software Foundation. 
+ * See the COPYING file for more information.
+ *
+ **********************************************************************
+ *
+ * Last port: ORIGINAL WORK, generalization of CascadedPolygonUnion
+ *
+ **********************************************************************/
+
+#include <geos/operation/union/CascadedUnion.h>
+#include <geos/geom/Geometry.h>
+#include <geos/geom/GeometryFactory.h>
+#include <geos/geom/Geometry.h>
+#include <geos/geom/util/GeometryCombiner.h>
+#include <geos/index/strtree/STRtree.h>
+// std
+#include <cassert>
+#include <cstddef>
+#include <memory>
+#include <vector>
+
+namespace geos {
+namespace operation { // geos.operation
+namespace geounion {  // geos.operation.geounion
+
+geom::Geometry* CascadedUnion::Union(std::vector<geom::Geometry*>* polys)
+{
+    CascadedUnion op (polys);
+    return op.Union();
+}
+
+geom::Geometry* CascadedUnion::Union()
+{
+    if (inputGeoms->empty())
+        return NULL;
+
+    geomFactory = inputGeoms->front()->getFactory();
+
+    /**
+     * A spatial index to organize the collection
+     * into groups of close geometries.
+     * This makes unioning more efficient, since vertices are more likely 
+     * to be eliminated on each round.
+     */
+    index::strtree::STRtree index(STRTREE_NODE_CAPACITY);
+
+    typedef std::vector<geom::Geometry*>::const_iterator iterator_type;
+    iterator_type end = inputGeoms->end();
+    for (iterator_type i = inputGeoms->begin(); i != end; ++i) {
+        geom::Geometry* g = *i;
+        index.insert(g->getEnvelopeInternal(), g);
+    }
+
+    std::auto_ptr<index::strtree::ItemsList> itemTree (index.itemsTree());
+
+    return unionTree(itemTree.get());
+}
+
+geom::Geometry* CascadedUnion::unionTree(
+    index::strtree::ItemsList* geomTree)
+{
+    /**
+     * Recursively unions all subtrees in the list into single geometries.
+     * The result is a list of Geometry's only
+     */
+    std::auto_ptr<GeometryListHolder> geoms(reduceToGeometries(geomTree));
+    return binaryUnion(geoms.get());
+}
+
+geom::Geometry* CascadedUnion::binaryUnion(GeometryListHolder* geoms)
+{
+    return binaryUnion(geoms, 0, geoms->size());
+}
+
+geom::Geometry* CascadedUnion::binaryUnion(GeometryListHolder* geoms, 
+    std::size_t start, std::size_t end)
+{
+    if (end - start <= 1) {
+        return unionSafe(geoms->getGeometry(start), NULL);
+    }
+    else if (end - start == 2) {
+        return unionSafe(geoms->getGeometry(start), geoms->getGeometry(start + 1));
+    }
+    else {
+        // recurse on both halves of the list
+        std::size_t mid = (end + start) / 2;
+        std::auto_ptr<geom::Geometry> g0 (binaryUnion(geoms, start, mid));
+        std::auto_ptr<geom::Geometry> g1 (binaryUnion(geoms, mid, end));
+        return unionSafe(g0.get(), g1.get());
+    }
+}
+
+GeometryListHolder* 
+CascadedUnion::reduceToGeometries(index::strtree::ItemsList* geomTree)
+{
+    std::auto_ptr<GeometryListHolder> geoms (new GeometryListHolder());
+
+    typedef index::strtree::ItemsList::iterator iterator_type;
+    iterator_type end = geomTree->end();
+    for (iterator_type i = geomTree->begin(); i != end; ++i) {
+        if ((*i).get_type() == index::strtree::ItemsListItem::item_is_list) {
+            std::auto_ptr<geom::Geometry> geom (unionTree((*i).get_itemslist()));
+            geoms->push_back_owned(geom.get());
+            geom.release();
+        }
+        else if ((*i).get_type() == index::strtree::ItemsListItem::item_is_geometry) {
+            geoms->push_back(reinterpret_cast<geom::Geometry*>((*i).get_geometry()));
+        }
+        else {
+            assert(!"should never be reached");
+        }
+    }
+
+    return geoms.release();
+}
+
+geom::Geometry* 
+CascadedUnion::unionSafe(geom::Geometry* g0, geom::Geometry* g1)
+{
+    if (g0 == NULL && g1 == NULL)
+        return NULL;
+
+    if (g0 == NULL)
+        return g1->clone();
+    if (g1 == NULL)
+        return g0->clone();
+
+    return unionOptimized(g0, g1);
+}
+
+geom::Geometry* 
+CascadedUnion::unionOptimized(geom::Geometry* g0, geom::Geometry* g1)
+{
+    geom::Envelope const* g0Env = g0->getEnvelopeInternal();
+    geom::Envelope const* g1Env = g1->getEnvelopeInternal();
+
+    if (!g0Env->intersects(g1Env))
+        return geom::util::GeometryCombiner::combine(g0, g1);
+
+    if (g0->getNumGeometries() <= 1 && g1->getNumGeometries() <= 1)
+        return unionActual(g0, g1);
+
+    geom::Envelope commonEnv; 
+    g0Env->intersection(*g1Env, commonEnv);
+    return unionUsingEnvelopeIntersection(g0, g1, commonEnv);
+}
+
+geom::Geometry* 
+CascadedUnion::unionUsingEnvelopeIntersection(geom::Geometry* g0, 
+    geom::Geometry* g1, geom::Envelope const& common)
+{
+    std::vector<geom::Geometry*> disjointPolys;
+
+    std::auto_ptr<geom::Geometry> g0Int(extractByEnvelope(common, g0, disjointPolys));
+    std::auto_ptr<geom::Geometry> g1Int(extractByEnvelope(common, g1, disjointPolys));
+
+    std::auto_ptr<geom::Geometry> u(unionActual(g0Int.get(), g1Int.get()));
+    disjointPolys.push_back(u.get());
+
+    return geom::util::GeometryCombiner::combine(disjointPolys);
+}
+
+geom::Geometry* 
+CascadedUnion::extractByEnvelope(geom::Envelope const& env, 
+    geom::Geometry* geom, std::vector<geom::Geometry*>& disjointGeoms)
+{
+    std::vector<geom::Geometry*> intersectingGeoms;
+
+    for (std::size_t i = 0; i < geom->getNumGeometries(); i++) { 
+        geom::Geometry* elem = const_cast<geom::Geometry*>(geom->getGeometryN(i));
+        if (elem->getEnvelopeInternal()->intersects(env))
+            intersectingGeoms.push_back(elem);
+        else
+            disjointGeoms.push_back(elem);
+    }
+
+    return geomFactory->buildGeometry(intersectingGeoms);
+}
+
+geom::Geometry* 
+CascadedUnion::unionActual(geom::Geometry* g0, geom::Geometry* g1)
+{
+    return g0->Union(g1);
+}
+
+} // namespace geos.operation.union
+} // namespace geos.operation
+} // namespace geos
+

Modified: trunk/src/operation/union/Makefile.am
===================================================================
--- trunk/src/operation/union/Makefile.am	2011-04-22 22:26:38 UTC (rev 3295)
+++ trunk/src/operation/union/Makefile.am	2011-04-23 10:03:16 UTC (rev 3296)
@@ -10,6 +10,7 @@
 
 libopunion_la_SOURCES = \
     CascadedPolygonUnion.cpp \
+    CascadedUnion.cpp \
     PointGeometryUnion.cpp \
     UnaryUnionOp.cpp 
 

Modified: trunk/src/operation/union/UnaryUnionOp.cpp
===================================================================
--- trunk/src/operation/union/UnaryUnionOp.cpp	2011-04-22 22:26:38 UTC (rev 3295)
+++ trunk/src/operation/union/UnaryUnionOp.cpp	2011-04-23 10:03:16 UTC (rev 3296)
@@ -22,6 +22,7 @@
 #include <algorithm> // for copy
 
 #include <geos/operation/union/UnaryUnionOp.h> 
+#include <geos/operation/union/CascadedUnion.h> 
 #include <geos/operation/union/CascadedPolygonUnion.h> 
 #include <geos/operation/union/PointGeometryUnion.h> 
 #include <geos/geom/Coordinate.h> 
@@ -82,9 +83,13 @@
 
   GeomAutoPtr unionLines;
   if (!lines.empty()) {
+#if 0
       GeomAutoPtr lineGeom = geomFact->buildGeometry( lines.begin(),
                                                       lines.end()    );
       unionLines = unionNoOpt(*lineGeom);
+#endif
+      unionLines.reset( CascadedUnion::Union( lines.begin(),
+                                              lines.end()   ) );
   }
 
   GeomAutoPtr unionPolygons;

Modified: trunk/tests/unit/capi/GEOSUnaryUnionTest.cpp
===================================================================
--- trunk/tests/unit/capi/GEOSUnaryUnionTest.cpp	2011-04-22 22:26:38 UTC (rev 3295)
+++ trunk/tests/unit/capi/GEOSUnaryUnionTest.cpp	2011-04-23 10:03:16 UTC (rev 3296)
@@ -142,7 +142,7 @@
         geom2_ = GEOSUnaryUnion(geom1_);
         ensure( 0 != geom2_ );
 
-        ensure_equals(toWKT(geom2_), std::string("GEOMETRYCOLLECTION (POINT (6 7), LINESTRING (0 5, 4 5), LINESTRING (4 5, 10 5), LINESTRING (4 -10, 4 5), LINESTRING (4 5, 4 10))"));
+        ensure_equals(toWKT(geom2_), std::string("GEOMETRYCOLLECTION (POINT (6 7), LINESTRING (4 -10, 4 5), LINESTRING (4 5, 4 10), LINESTRING (0 5, 4 5), LINESTRING (4 5, 10 5))"));
     }
 
     // Self-union a collection of puntal and polygonal geometries

Modified: trunk/tests/xmltester/Makefile.am
===================================================================
--- trunk/tests/xmltester/Makefile.am	2011-04-22 22:26:38 UTC (rev 3295)
+++ trunk/tests/xmltester/Makefile.am	2011-04-23 10:03:16 UTC (rev 3296)
@@ -29,6 +29,7 @@
 	$(srcdir)/tests/ticket/bug358.xml \
 	$(srcdir)/tests/ticket/bug360.xml \
 	$(srcdir)/tests/ticket/bug366.xml \
+	$(srcdir)/tests/ticket/bug392.xml \
 	$(srcdir)/tests/ticket/bug398.xml \
 	$(srcdir)/tests/ticket/bug434.xml \
 	$(srcdir)/tests/general/TestBoundary.xml \

Added: trunk/tests/xmltester/tests/ticket/bug392.xml
===================================================================
--- trunk/tests/xmltester/tests/ticket/bug392.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/ticket/bug392.xml	2011-04-23 10:03:16 UTC (rev 3296)
@@ -0,0 +1,26 @@
+<run>
+  <desc>
+http://trac.osgeo.org/geos/ticket/392
+  </desc>
+  <precisionModel type="FLOATING" />
+
+<case>
+  <desc>
+http://trac.osgeo.org/geos/ticket/392
+TopologyException: found non-noded intersection between LINESTRING (146.593 -37.2263, 146.593 -37.2263) and LINESTRING (146.593 -37.2263, 146.593 -37.2263) at 146.593 -37.2263
+  </desc>
+  <a>
+01050000000600000001020000000300000035BEE5A0FA486240785C548B887F42C00619B787F34962403A8D599B6B7A42C035BEE5A0FA486240785C548B887F42C0010200000014010000A5AE6B6A0F516240EE23B726DD9B42C06AB3FB9F0D516240B5F81400E39B42C01A530B800C5162405AE95A20E69B42C06BB933130C516240EFBC9EF9E69B42C0984979520B516240D6468666E89B42C07DCB9C2E0B516240CA3CA87AE89B42C083013A820A516240E80D9CD8E89B42C01820D1040A516240946B651DE99B42C09FCA694F0951624012D5004AE89B42C0E47107A00751624072593B40E69B42C0881E42A6065162404ACC58D9E39B42C09D9ACB0D065162408C930C4AE29B42C03909A52F045162409BF749FFDC9B42C0B159E48D025162401A738D85D79B42C00B7A6F0C01516240F2A32B22D49B42C0EB6F09C0FF5062403BA41820D19B42C02D3185BDFF506240DC9BDF30D19B42C059A725B1FF506240ADE93015D19B42C027744D37FF5062407BE35AA3D49B42C04562821AFE506240158843DBD69B42C0ED7E15E0FB5062404055E0BFD49B42C0B86EEFBFFA506240A654D33FD29B42C0575EF23FF950624011058E5FD39B42C0A74E513FF95062406403E962D39B42C039002C3CF950624022426D65D39B42C08CA262F7F85062409F8B2BD3D49B42C0041E184
 0F8506240F0355F80D89B42C03C878D0DF8506240857F6CEDD89B42C0E0BDFE7FF75062404F667220DA9B42C04333F4F4F650624018A99C9BDB9B42C0E4FF441BF6506240C48A64D9DD9B42C0B2423635F5506240F3C64961DE9B42C0E2CC0AA0F35062400518963FDF9B42C081BC0D20F250624057C80160E19B42C0266CE45FF050624047BAB07FE89B42C05D8B16A0ED5062400F0E51E0F89B42C0D81A0060EB5062406ED113E0059C42C03B3A0900E9506240F73361A0109C42C0676902A0E55062406E6704C01D9C42C052DCA799E450624071D014F0219C42C085121C4DE45062404DF4F928239C42C09164B1A8E3506240FE64E7C8259C42C0FA6B68B9E25062407389D981299C42C0ABCC94D6DF506240F9F8DFA52F9C42C09274CDE4DB50624090436914379C42C0029EB470D9506240838F77FD389C42C097491E99D85062400CFDB8A2399C42C01426E71FD8506240950ED6FF399C42C0A0038184D75062404DA48F543A9C42C08119F8F6D3506240C977842E3C9C42C0EB54F99ED1506240A68D34023B9C42C0FE55911BCF506240859BE7E3359C42C0D66C8A6CCC506240AD61D0532E9C42C04285D9BACA5062409745178A2A9C42C007E92972C850624074EB353D289C42C0264A8CAFC7506240FED478E9269C42C0C528BE90C45062407D6DA23B2D9C42C0D4EB
 BBC7BE506240EB556474409C42C08B0CBCA4BB506240F5E681D94E9C42C0D08547D1B95062408EB344C2529C42C025BE24DFB6506240A2C38DA5599C42C074925275B45062400B3AC6BA5D9C42C05A907758B2506240A0DFF76F5E9C42C0058DF4FDAF506240E6F516C5619C42C0081566EBAA506240D29B9B80709C42C02EA4688AA5506240443B5DCC859C42C06FF3C649A150624019575C1C959C42C09AACF6559E506240BAE70A009F9C42C028F5C0229A5062408D9B7521B19C42C0B04C09D2965062406DD5BF35C19C42C0B75D68AE9350624077D66EBBD09C42C098593AD5905062405D5727C2E19C42C0CFA67E398E5062402627C929F09C42C0C194DCBC8C50624097EB23A6FA9C42C0C19A14308B506240DE10F461079D42C09F292AD188506240F5DF394A149D42C0A0B998B08750624028DB1BD71A9D42C099428C7C83506240AC8FE2772E9D42C08E9DA68581506240A56D57433D9D42C02AE4A5F67D5062405930F147519D42C0178B95877B506240DA1F8370609D42C0AD6A49477950624055F08057709D42C0575EF23F79506240266CE45F709D42C042E504127950624060F426D0719D42C0FDD071DA785062407730BD58739D42C011001C7B765062404767AA71809D42C03521527875506240791AD58E879D42C0D9CAF044755062405494A69C8A9D42C03
 22DFBBF745062408014D09F919D42C0217DEE5F7450624093D629A09A9D42C00CEDF71F7450624083CB1940AE9D42C0924FD9FA7350624020915B38B59D42C06BB015D973506240BED29E37BA9D42C0577FDF1A7350624083C366DBC49D42C0A7FC10C0725062408712D2BFC99D42C016EF117B72506240CD9EBAA8CC9D42C05E73FD717150624056D3F544D79D42C025242DF07050624031D7FDBEDA9D42C0266CE45F70506240B2D7BB3FDE9D42C0BE535CB06F50624045B9347EE19D42C083B174F46E506240D89AADBCE49D42C0FDB0EFD46D5062402F5E3D38E99D42C0B05EFBB86C506240B7F3588EEB9D42C0D53A16806B5062406E3B2300EE9D42C002E264D16A506240A3BE767AEF9D42C0ACC1A0F169506240C6600F37F19D42C05F5B3FFD675062405A76D20CF39D42C0F199EC9F67506240E88CDE5FF39D42C0648918C065506240C52CC59FF29D42C0015CDABA65506240ADEAF6A3F29D42C0AE5D7FB765506240846B49A2F29D42C089B08630635062407DEA58A5F49D42C01E8D9EB661506240AAE683AFF99D42C07171546E62506240647DB905019E42C0A44808A062506240A5F04520039E42C0170912806450624013C25900099E42C0AABF14D466506240691D554D109E42C0EC0AC73D6750624032326DA4119E42C0C7A1D9D068506240B3FEE08D169E42
 C0E7F05A536A50624055C3D9081F9E42C094933FCE6A506240815DA857259E42C0DBFAE93F6B506240CC9A58E02B9E42C0D53A16806B5062401EDE7360399E42C06DDAD6606B506240C1BC1127419E42C0D81A00606B50624049A01C60419E42C0C66AF3FF6A50624069E21DE0499E42C08E7AE3FF695062402AF40BC0509E42C0B5A91501695062409356D7FC539E42C0A2F4E04966506240279AACF6559E42C0828E56B56450624099E5FC5E549E42C00839EFFF635062400B45BA9F539E42C0EBC6BB236350624041A66BDC519E42C0F2D1E28C61506240E34D7E8B4E9E42C0DE5E2DD25F506240A456F3774A9E42C0BAE70A005F5062403A92CB7F489E42C032970AE05C5062401281EA1F449E42C03C5409055B50624061527C7C429E42C0E6EB8DB55A50624061F65734429E42C0D83274475A5062409723BFD9419E42C04C16F71F595062405620C4DF409E42C0F609A018595062407F9F71E1409E42C085AD7E11595062406D6292DB409E42C0FDE6B45D57506240E436D032419E42C07ADD223056506240F581E49D439E42C0C586133D55506240280D350A499E42C0A2F8E75854506240A8774C384F9E42C013550960545062401950148D5A9E42C01355096054506240E333D93F4F9E42C04E250340555062402E122400499E42C08615134056506240B3C068A0439
 E42C0D67503605750624032303C40419E42C0F609A018595062407F9F71E1409E42C02207DB3E5A506240F02609D3419E42C0AB460AC05A50624085701640429E42C05DC0CB0C5B5062409C0E0984429E42C0867E5CD15C5062401281EA1F449E42C058BACCFA5E506240E793707C489E42C01F20A9CF5F506240921914724A9E42C054E8178061506240C0D3BF7F4E9E42C041D3122B63506240B81E85EB519E42C067583101645062400540CBA9539E42C005114EB0645062401C68F459549E42C08DA90540665062408CD5E6FF559E42C03B3A090069506240E7543200549E42C0B5A91501695062409356D7FC539E42C0D923D40C69506240C3DA73F4539E42C0A6D3BA0D6A506240FA6F6FC8509E42C00B3A6B016B506240EC6415DB499E42C0F36ACA5F6B506240449B2D6A419E42C0D81A00606B506240731FCA61419E42C0BDCA35606B50624014E97E4E419E42C0E749E3616B506240145F48E2409E42C0FEB9C3816B5062404E621058399E42C0AE84494C6B506240E9E115D22B9E42C00E034CCF6A506240CF561465259E42C0A02AF05F6A506240F0879FFF1E9E42C03E1AF3DF68506240D1459E7F169E42C0184D1D9A68506240782EE7AD159E42C0C5991540675062404A743BA0119E42C0C201E3CF665062401B24E93F109E42C08E812B8F645062405A88C4F3
 089E42C07DD756A262506240D574E217039E42C080A0377062506240C4B30419019E42C069780EC0615062409EAE939FF99D42C0CA880B4063506240006D50A0F49D42C0E70B10BB65506240ADEAF6A3F29D42C006CEBE97675062400C079D6BF39D42C095FBD3FC675062405A76D20CF39D42C08E7AE3FF695062402B9C4940F19D42C0E7919AD16A5062400EFF9F79EF9D42C08A66AF886B50624050F4650EEE9D42C0BC7FE2B66C5062409FB18A92EB9D42C0711B0DE06D5062406B1ACA3FE99D42C0C17BFDFF6E5062402B9908C0E49D42C01D739EB16F506240337C5578E19D42C08294336F7050624064DE4F32DE9D42C0ABB420EF70506240D7D3B3C5DA9D42C05B7C0A8071506240D955ED3FD79D42C0AAAEE87B72506240FC2257A0CC9D42C0309B00C372506240C2CE5EC7C99D42C04850FC18735062404835ECF7C49D42C0F75C01E0735062408F4E0240BA9D42C077FF0EFB73506240BB55212FB59D42C006E8082A74506240F4103235AE9D42C0D08C8F60745062400A4F43AF9A9D42C014E63DCE74506240F78CE9AE919D42C029BB4F4475506240B9CFE0A58A9D42C0568D14807550624002A2BB7F879D42C0A8CDEE7F765062402920ED7F809D42C02A5E1BE078506240B3EC4960739D42C042E504127950624060F426D0719D42C0AD6A49477950624055F08
 057709D42C05E3013A081506240E3C9C91F679D42C05F01F15F85506240D746E11F5B9D42C031F20DE0885062402222EB5F489D42C0B9420E008B50624079ED2D40369D42C04473F8FF8C5062404E250340159D42C0B73302E08E506240FCE1E7BF079D42C08EE4F21F9250624013BF1880FC9C42C0756506E0955062400CEDF71FF49C42C088BA0F40AA506240F1C5CD5FD79C42C0D32B0A60AF506240C9213DA0C79C42C05B7C0A80B1506240B63643609B9C42C0EE8B95E2B4506240C89EF3098F9C42C0BB270F0BB550624075E84F768E9C42C0B2AE1B00BB5062402D3E05C0789C42C0EB6F09C0BF5062408C68965F619C42C0D2C1FA3FC7506240F6F53240589C42C068A4EF7FD1506240DC61B8DF469C42C04B451960D5506240DBCE08803B9C42C01D818989D75062408F650B523A9C42C0D3646B22D8506240534D5A023A9C42C00EA8925CD95062408FC7670D399C42C0FAA6FADFDB506240B4BD2720379C42C0F5B704E0DF506240E7BB00A02F9C42C0BBB8E8BFE25062404A0A2C80299C42C0D63329AAE3506240EC2708C3259C42C07EC2D9ADE55062401A69A9BC1D9C42C02914330CE95062405C6F9BA9109C42C0D215116AEB5062408C18D1D1059C42C0EB45FEAAED5062404BCADDE7F89B42C052F98D65F0506240D0419770E89B42C0DAD6602BF2506240F2
 8CC756E19B42C0002BD1A3F3506240E7D0D84DDF9B42C00E547C32F55062401D46F762DE9B42C07CCD1720F65062406B871AE0DD9B42C04333F4F4F650624018A99C9BDB9B42C0289B7285F750624025E7C41EDA9B42C04E098849F85062400E7D1C72D89B42C0CB55E2F0F8506240753A90F5D49B42C08CFE863FF95062406403E962D39B42C026BD14C3FA5062405F8E684CD29B42C0E14625D0FB506240FE9364C2D49B42C01CE3D418FE50624068869EDED69B42C04562821AFE506240158843DBD69B42C08D3FF61FFE50624092054CE0D69B42C0DC9FE63FFF50624028E5FF9FD49B42C02D3185BDFF506240DC9BDF30D19B42C0086C7308015162408D68F118D49B42C099000D80025162400936AE7FD79B42C01281EA1F045162402FB72000DD9B42C08641F4FF055162409298FB3FE29B42C0382EE3A606516240734B06DBE39B42C0B1C8659207516240C5579643E69B42C03D9D2B4A0951624000982144E89B42C08152FEFF0951624053AAE91FE99B42C01820D1040A516240946B651DE99B42C0A1BEC0070A516240E869C020E99B42C0E2EFCD250B51624047BAB07FE89B42C0CAF21A600B516240304AD05FE89B42C029F8B7150C516240723F96F4E69B42C035A3D57F0C5162407E63192CE69B42C09C5C9DAD0D516240B5F81400E39B42C010EF94690F51624
 0AC623B29DD9B42C0DD7305800F516240184740E0DC9B42C0A5AE6B6A0F516240EE23B726DD9B42C001020000004601000073FB9B06FB5262400567953E199D42C06A72E778FB5262406CC8E479159D42C0169F0260FC52624075A334400E9D42C0169F0260FC526240E90E62670A9D42C0525B8F67FC5262404FB2309F079D42C0383C73C5FB5262400633011A009D42C071AB2006FA526240AA76F28EF89C42C0E5A210B7F9526240E08FEC5BF79C42C0F54DF5BFF7526240B5FB5580EF9C42C0CF9AC4C5F65262409FC5F76AEC9C42C01AB7E22CF6526240CFC59569EA9C42C0C8DB0022F3526240840CE4D9E59C42C0E4C40DAEEF52624081334289E09C42C0A026440AEF526240F8C500E4DF9C42C0287BF07FEC5262405F97E13FDD9C42C0121A1C80E852624053A7A89FDC9C42C0CD4AA47EE8526240E8667FA0DC9C42C09CDB847BE5526240B4A1AC29DA9C42C0DCAEE133E3526240993E856DD59C42C06BCB25FAE15262401EB97F76D19C42C03953324AE1526240B2B15C80C79C42C0E5F27A8BE2526240D08547D1B99C42C07F52488DE4526240AA80D657B29C42C0245D33F9E65262408C721F6FA89C42C011178046E9526240B4249B06A09C42C051F70148ED526240186BC9F4959C42C0DD297865F2526240D4D6E3198F9C42C0819B2045F8526240B95917128B
 9C42C0B9B59613FE52624090566B17899C42C0EE4FF39FFF52624001124DA0889C42C0780778D20253624054F60258899C42C0FDED57A604536240D1FD41C9899C42C069CB14CE095362403605323B8B9C42C01A530B800C536240D6E253008C9C42C0938ECDE90D536240D6C8AEB48C9C42C0DFEB5A31125362405D30B8E68E9C42C0102D681015536240F1A19F04919C42C028CA4A38195362406B216D88969C42C0D19D16721B536240CF3CCAD2989C42C03B037EE81D5362403ABF72CE999C42C0DDFF6C5020536240ED69E278999C42C09E5DBEF5215362404DEE1C6F979C42C0CA856F0624536240E0505326909C42C0B700D99024536240373FB445889C42C023168CA5235362405B40683D7C9C42C05F62878C22536240C5B99745729C42C093A1CFEC1F536240F4763A46689C42C08284CDA51D5362404BBB873A629C42C0D7E7209E1B5362406D0CF093599C42C0E61604A01B5362407916CE7F599C42C05EC6038019536240B45318004F9C42C0F9D51C20185362402A615C60459C42C01DC6A4BF1753624025F213BD429C42C089658E4017536240AAF644323F9C42C0242A54371753624010F0FF3E3E9C42C0C4C5F6FF16536240D71D41E0379C42C08C2E6F0E17536240270FB0FB339C42C02721472917536240B8AD2D3C2F9C42C079D1B249195362404BE8894
 2269C42C0AD93E9861C5362403868AF3E1E9C42C073C57BC41E536240EE2AFFB5179C42C0405E59B31F53624019E42EC2149C42C05AA8EB3F21536240D4D347E00F9C42C0B5F8140023536240E822CF3F0B9C42C01518570123536240412619390B9C42C059E7CE02235362405968E7340B9C42C0473426692353624078CF81E5089C42C01AE9FB5F24536240D4D00660039C42C055B9F53F25536240FC4E3860FC9B42C046CF2D74255362402DCBD765F89B42C0F551FCCE2553624095A828A8F29B42C034C0609225536240D554BBCBEA9B42C06A49EC7F255362400CEAB69FE79B42C06A49EC7F25536240B5824B6CE39B42C031B2648E25536240F60604DFD99B42C0E3B55C472653624031D4BC3ECE9B42C0B76DCE7726536240B5EC5A8CCB9B42C0B3E908E026536240CAB1AB7FC69B42C01FFC1FBB26536240988EEF41BE9B42C04864C4AA26536240B949B148B89B42C00D912E9126536240CE28A787B29B42C0A239FC7F26536240013BEDDFAB9B42C0676902A025536240BE0864C0A39B42C09DFB613A235362407A5AD9999D9B42C08C344CC822536240EB2F606E9C9B42C0A72E2AF320536240F98D65B0989B42C00A48FB1F205362408F256200979B42C07F1711201E53624021E4BCFF8F9B42C0EB9FF18E1D536240549ADE0F899B42C03B061A221D5362409382
 B8BC839B42C01AF67B621D5362400F817E3A799B42C00BF5AA841D536240224ECC1F789B42C094A707601E53624078ACBE5F719B42C05A07ACC120536240AD122C0E679B42C0D7C633C321536240CDF5C7C5629B42C04AE9995E2253624058EB7A585E9B42C0F0C80EE0235362400B45BA9F539B42C052D90B6025536240CFE11060479B42C069183E2226536240F2D654713E9B42C0CEC6A58526536240EE3F321D3A9B42C0E3288AA12653624026378AAC359B42C0B3E908E0265362407D9BB45F2D9B42C05DC6A8C62653624045813E91279B42C016D22BAF2653624032EDF6B41E9B42C0EC246C8926536240C0E61C3C139B42C0A239FC7F26536240A583F57F0E9B42C08D92FC2D26536240DC60A8C30A9B42C0C9C452C92553624086E5CFB7059B42C0A625564623536240476A46ABFF9A42C0CD960744235362401EEB98A9FF9A42C0CA880B4023536240B9AF5EA0FF9A42C0E407F87F1F53624066FFF27FFD9A42C0EE0912DB1D5362408A9356D7FC9A42C0B75384E519536240F0A6B62FFB9A42C0EF33D362155362409320B7BAF79A42C0BB46263B1153624019A1E936F29A42C00D4059E70E536240D26AED22F19A42C005C314400C536240FC4BF7DFEF9A42C0C286A7570A536240FDDB65BFEE9A42C061DBA2CC06536240DAAF9696EC9A42C058C9C7EE025362403
 B2064B4E99A42C0F4F8BD4DFF5262400D38A682E59A42C051F932ACFD526240DBB28D89DE9A42C01A6B7F67FB52624035C703DBD29A42C02D697BAAF9526240E269430FC69A42C036AD1402F95262400E153EB6C09A42C02D3E05C0F85262409EEF0280BE9A42C007FE0120F8526240311BAE1FAC9A42C0915D0E60F65262406C58F89FA19A42C0D11CFE3FF352624005C655C0989A42C0EC55BF2DF35262403B21CF89989A42C04F47B6A9F0526240E569AFF4909A42C0773469AEEE526240AD557199899A42C0B0164449ED52624034C86EB0819A42C0106734A8EC526240A5D0C31A789A42C09348EC24EC526240149161156F9A42C01CE7DB27EC526240ADB0CF52689A42C0E643ABEEEC5262402E6695E35F9A42C0D3A46F2DEE526240FD42D9A5579A42C08297CFA8EF526240D28668194E9A42C084E4AE6FF1526240F581E49D439A42C0D4B7CCE9F25262401BB226BB3E9A42C00CEDF71FF4526240D0DECFDF3A9A42C0AC826275F552624038D6C56D349A42C0C908032AF75262403693CA6F2C9A42C080C6962FF95262408625D4C21B9A42C026E88AADFB526240729648580A9A42C007CC43A6FC5262405268B4B0029A42C0554FE61FFD526240C52F0620FF9942C0D41F065FFD52624090508E5DFD9942C0C2C8810DFE526240C847E6ECF89942C01B6A6F4BFF5262
 404EB4AB90F29942C0C4FBBB880053624062314514EE9942C0387A466C01536240BFD6A546E89942C0F6B8CA6E015362407A0E76D4E29942C0F47F5880005362404CF8A57EDE9942C06616FC91FD526240944E7F51DD9942C0274D83A2F9526240C8DF0731E19942C0704D70A0F6526240FC427EECE49942C06A1D0BC0F5526240AEB9A3FFE59942C06B65C22FF5526240307E1AF7E69942C0D1EEEB1BF35262401DBF0177EA9942C046A7F809F15262407A4501ECED9942C0F96B0D00F0526240CD6B36A0EF9942C0A6FD20DCEE5262401FDA22C4F09942C0008E3D7BEE526240FBE99A24F19942C00F4D8F5CED526240BF9D9F3DF29942C0D4207134EC52624037D43950F19942C0BA63B14DEA5262400E5BC4C1EF9942C04273428DE7526240EC489AE4EC9942C04B862D87E75262403F47F5E7EC9942C0DA290C80E7526240048B68E0EC9942C0676902A0E55262403F5B62C0ED9942C0417452A9E3526240D75537CDF19942C02C29779FE3526240A2CCABDFF19942C07A281B20E2526240DD9CA5BFF29942C02DA814E0E052624072ECEA9FF19942C0E0247266E0526240CBD58F4DF29942C043B40C27DF5262409574DE10F49942C0D75DEA31DB5262403A652431F79942C0388600E0D8526240277E3100F99942C0ACC8433AD752624027367A90F99942C0B771D586D45
 26240B504CF73FA9942C011D77B3BD3526240A3C7EF6DFA9942C08B040940D2526240C10EAD5FFA9942C05803EF3FCD526240277E3100F99942C046820420C9526240186D9F9FF39942C0D57036C2C7526240A85BD141F29942C071AE6186C6526240907B5F01F19942C0251D8AA7C3526240FCC1C073EF9942C009FCE1E7BF526240398ABD61EC9942C080327CFABE52624058BD0D7BEB9942C02B2FF99FBC52624053AAE91FE99942C08C6E1860BA526240142928A0E49942C007FE0120B85262407707C25FDD9942C08D77EC0CB852624018755204DD9942C0EAA5738FB6526240875DCAAFD59942C09149A187B5526240F6A79E16CD9942C05C4DE83FB5526240C2E2CB9FCA9942C01D9D0480B4526240CD3F55E0BF9942C01D9D0480B452624013DD6921B79942C0F72B5382B4526240690712CAB19942C091D6732DB5526240824CD7B8A39942C07610E099B55262404533AA679C9942C0F66DD27EB552624096027745959942C05F5BE443B5526240265305A3929942C0BB1006F9B4526240B583B641929942C01853FA53B45262403EDD8A0E929942C0BCB77DEAB35262405B66C7FC929942C07702AB34B35262402A60F18A969942C0B0822914B3526240B678C25C9C9942C0A54DD53DB25262407B832F4CA69942C0B365AF2DB252624063F9A9E0A69942C05E5CF45F
 B152624053EB5800AE9942C096804EF7B0526240DB807456B09942C02891E975B05262405768D608B39942C0A68AF381AE526240E645DC52BD9942C04138B066AE5262402DF2A1FABD9942C04BDB0940AD52624018B14F00C59942C0FB7A1920AC526240FC2257A0CC9942C0ECAAF69FAB52624024343800D19942C034153D4BAB526240632BC313D59942C0016C9B3DAB526240335F6FACD59942C0F02EBC37AB52624074345882D69942C0C66AF3FFAA52624053A7A89FDC9942C013EBF93FAC526240828AAA5FE99942C01B125212AD526240E5852AEBED9942C01EBEF15AAE5262406532C115F59942C0ED1C14DEAF526240DE077B6EFC9942C081EDBB7DB15262400E959059079A42C0CC1D47BDB1526240FC993050089A42C0EE04FBAFB35262404B4C61EF0F9A42C041A49531B4526240080FE4EA119A42C0217DEE5FB45262409DB415A0129A42C07FAD0100B652624032970AE01C9A42C0E39DE85FB75262405DC94400269A42C018AE0E80B8526240364B13002D9A42C0922EEC1FBA526240F3AB3940309A42C02E0FE37FBC52624046EC1340319A42C013BF1880BC52624046EC1340319A42C003E0E9DFBF5262400B1C1A60309A42C0A344A6D7C15262406B589DE62E9A42C09CE0F65FC2526240D009A1832E9A42C0E98E0FC4C3526240E24680892E9A42C09B36E
 334C45262405F06088B2F9A42C0D11B936AC4526240D5085806309A42C04AE4277AC55262401C0B0A83329A42C05FB939F0C552624066F2CD36379A42C05F5A796EC65262401CB85E2E3D9A42C094111780C65262408D3FF61F3E9A42C097F10060C65262406110FD7F419A42C0748E4B66C6526240A2410A9E429A42C053399270C652624082BA922E479A42C0ACAF09C4C6526240C25B316D499A42C0C111EEDFC6526240C8A29F5F4A9A42C0E751F17FC75262409CE337E04E9A42C0F901FEDFC752624026D6F37F589A42C0DEB133E0C7526240BB95CA80589A42C0E1911DC0C75262407D51CC8B5D9A42C0B8150CF8C65262404184132C699A42C065BE28E6C552624072A7CF69719A42C095174FF3C4526240F211E797779A42C01661D4FFC3526240959460167F9A42C010035DFBC2526240C4BF19468B9A42C058288870C2526240FC71FBE5939A42C085E6DFD3C152624053B4CDE8A29A42C0C1D31A39C15262408946D2C9AD9A42C0BB44F5D6C0526240A8120AB6B69A42C0A9F00CBFC05262407E8D2441B89A42C053CDACA5C0526240593B40E6B99A42C032D7B331C052624068EA758BC09A42C0CDE33098BF5262409FE40E9BC89A42C0B323D577BE526240665710B9CF9A42C08D11E4FBBD526240D590B8C7D29A42C066FFF27FBD5262407B25DA9FD59A42C0E0
 57F66EBD526240B094C041D69A42C07FA31D37BC526240CABD65F3DD9A42C0D3A7B0ADBA526240D2F1E20EE59A42C0E089B4E8B85262406AE67FA8EA9A42C03C4272D7B752624078F1D995F19A42C0C6CCF401B7526240F783CB74F99A42C01FCDA2C1B7526240D57A1A8B019B42C0E0A0BDFAB85262405070B1A2069B42C0001E51A1BA5262405890C1E50C9B42C0ED7E15E0BB526240B524F6BF129B42C0169F0260BC526240C4C5F6FF169B42C040BFEFDFBC5262400447B87F1B9B42C0A1CFEC5FBE52624013584AE0209B42C072906B9EBE5262406BB180AE229B42C0A7A32DF8BE5262403AC54F88259B42C006F1811DBF5262403B4ACA822E9B42C0C52F0620BF526240A06B5F402F9B42C0ADED3724BF526240E7A15B54309B42C00F327F3BBF5262407286E28E379B42C0FA87E3AFBF526240B177352F3D9B42C0EB6F09C0BF52624075CF15003E9B42C011B00C60C0526240EF906280449B42C049A01C60C15262400ED363004D9B42C05E3013A0C152624035E44460519B42C05E3013A0C1526240B4E6C75F5A9B42C03DF262BCC1526240ACE9D55B5E9B42C0C0A26CDBC1526240B56B425A639B42C073C009E0C15262402A3410CB669B42C073C009E0C1526240CF7A42C06B9B42C049A01C60C1526240849CF7FF719B42C03BD0F9DFC05262402D3E05C0789B42C
 01490F63FC05262405900AEBF809B42C000000000C05262402D414640859B42C003E0E9DFBF5262408F2221808A9B42C000000000C05262402DD4F59F909B42C011B00C60C052624015F7C4DF9B9B42C0CDF79D70C0526240AF9BAD179E9B42C0A994E876C0526240F5132928A09B42C0B2A7D370C052624072BF4351A09B42C0DC9FE63FBF5262401DC9E53FA49B42C05DE6CF12BF526240A04BDD3AA49B42C05491651CBE52624064613E0FA49B42C00417D0B0BD5262400573AA6BA39B42C03AFF1B20BD526240A728F27FA29B42C0DEAEF25FBB52624040964FA0999B42C007FE0120B8526240E613C31F8F9B42C07EECE4C2B752624087F71C588E9B42C02B39DD68B652624012B985538B9B42C0D4FCE71FB352624055E2957F889B42C0EA9BEA7FAF526240FEF0F3DF839B42C0593F0B9EAD5262409DE4954F809B42C001020000009D000000E23362A581526240000000E04F9D42C0C30C8D2782526240BF153F7C4F9D42C072A02C2184526240A891F1834E9D42C0C1E677F5855262406083CF204F9D42C09CF0B7E287526240DBFF5B24489D42C0E412471E88526240FEB220393E9D42C0430477FB8752624031F378B5379D42C0853BBC8C875262408D3CB59F319D42C0C4398F2F86526240076B52C02C9D42C089552877845262400392B06F279D42C0BC0166BE83
 5262400B896A00259D42C09F477B728352624030E186CE219D42C081D2AB5C83526240BA5A385A1F9D42C03A0C416983526240BD440603199D42C0E946585484526240755B7DD00E9D42C0DC0BCC0A85526240D2EC702A089D42C04DD87E3286526240339C7CC4F99C42C0447DDCC8865262407AE9DCA3ED9C42C008371955865262409663682BE59C42C056BD570886526240128A085ADC9C42C021938C9C855262408CA438A2D69C42C0C4AF58C385526240D634947FD29C42C02B4CDF6B88526240B3D771B2C39C42C071659AFA8A526240D6E65A0FBA9C42C02540A8E68D52624059F047F6AD9C42C08CD99255915262402F7C8ED9A39C42C033A7261C95526240F7C374C69C9C42C02971C2299852624022F36D66999C42C0BC7DB1529C526240A8E96976939C42C0317491E79F52624064DFBA078D9C42C00CC050D1A25262404527F0F3849C42C099B3E32BA65262400A26A36F779C42C0B98C9B1AA8526240E65AB4006D9C42C00B57AC86A952624043064DA6659C42C0B1A94E62AB526240827E95325F9C42C0486E4DBAAD526240793073CB589C42C0163A6524B1526240E3A9A2D34E9C42C089E0C9B8B35262405FFE5426469C42C0C776082DB5526240DC8C89833A9C42C0F0DB10E3B552624092DF47DA329C42C0DB8D999FB6526240B926EEC2209C42C0A2F611A
 EB6526240ED7DAA0A0D9C42C01CBFA6BDB7526240711706D1FF9B42C04877C6ADB852624036864A6DF39B42C030044A54B95262409F55664AEB9B42C0F45B2A25BA5262404C0C1357DF9B42C09D6340F6BA5262405D3A41F6D59B42C0A09F4E1EBB526240C2EB4493D59B42C0DE639FB6BC526240298F13CBD29B42C004FD2A65BE526240AAE8B413CA9B42C0A7751BD4BE52624085CFD6C1C19B42C0892E5EE2BE526240A01518B2BA9B42C089CF9D60BF52624032E8DF89B49B42C0A31CCC26C0526240941C661EAF9B42C0D843FB58C15262402CC0D254AA9B42C076FC1708C2526240586BCDFBA49B42C096C4FE57C2526240A83462669F9B42C06D2E4844C252624033B44B659B9B42C0C3B068DFC1526240579B5A11909B42C037ED73C6C1526240E8537D9D8A9B42C017AFC3E2C1526240201DC308869B42C05BC3561AC2526240466172FE819B42C0D8F8A7AFC2526240C1C991297A9B42C04C040539C3526240BF243A70739B42C054CF38C3C3526240E09D7C7A6C9B42C09C95A3B6C3526240B50F1E12639B42C072D1DA7EC3526240EF46301F5A9B42C075DFD682C352624071E888D7509B42C016647039C3526240569F06674B9B42C0DB4E5B23C2526240EA077591429B42C0ACFB6C89C152624088E41A553C9B42C0F6459D14C1526240CC75BFAF369B42C035E2
 13FCC0526240EE08A7052F9B42C0B528FDCEC05262407CE82741249B42C01B50CAFFBF526240A3F08FAD1D9B42C039F9E3ACBE5262409F877F7D199B42C0333CAC26BE5262407E4D7BEF149B42C08A79B18BBD5262400F90D4E70F9B42C02E9CB525BC526240D18A146F099B42C035D5EEB2BA526240D4884FF0039B42C0B58E05E0BA526240929B3CC0EE9A42C0ACD73E2EBB526240F810F9D3EB9A42C034A1A41BBC5262400C885AE4E89A42C01C87B0D0BD5262407BB889FFE09A42C0FD1F1620C05262408E401768D29A42C06D03D259C1526240519DB3AACA9A42C0CFFF6101C2526240B48185DDC19A42C07BD058A0C2526240C50BD8C4B89A42C055E9DD0EC35262407D5061B6AE9A42C0E35B0EAAC3526240CA4054D0A39A42C0AA65C636C45262400CBD0F51969A42C0F6211400C8526240B37CB83F729A42C0DF8211A0CB526240DF180280639A42C0F885FCD8C9526240E17261495E9A42C0E603029DC9526240CA4A38995D9A42C0FE73E2BCC9526240850C3F93589A42C0C2A04CA3C95262400C231862509A42C08B57B494C7526240D79FC4E74E9A42C0171E45E7C6526240F2214D614A9A42C0760F75C4C6526240165A8C70499A42C094111780C6526240A0015020479A42C0748E4B66C652624090042B98429A42C09AFFFC63C6526240858ABB8B419A42C0E
 80F7283C6526240B0B9B42B3E9A42C0440AAF6EC6526240DBF6E2303D9A42C08641F4FFC5526240CC2D0840379A42C05C210780C5526240C80CAF7F329A42C03C5CBC69C452624017CAD303309A42C0B6FC76C8C3526240E24680892E9A42C0E98E0FC4C3526240E24680892E9A42C0E68013C0C35262407D0B46802E9A42C09CE0F65FC25262407D0B46802E9A42C0E40522D5C152624094D74AE82E9A42C027439FD9BF526240CF5F8D58309A42C073DE5A81BC52624034AF343A319A42C0DC195C29BA5262405EEC623F309A42C0F54A5986B8526240DD47C9062D9A42C0D277126CB7526240D4415E0F269A42C0BA698E07B6526240389CF9D51C9A42C05C397B67B45262402C6FFDAA129A42C0B1E485CFB1526240D276A796089A42C05B7C0A80B1526240B5914660079A42C0FC4BF7DFAF526240FC4E3860FC9942C09B3BFA5FAE5262405F2DD21FF59942C012E85D06AD52624062A70EA8ED9942C066E95443AC52624053060E68E99942C0F913950DAB5262402A28FB9DDC9942C00A7F8637AB52624003EF3F8DD69942C0DBFAE93FAB5262407B25DA9FD59942C0FE74A84BAB5262407B6D910FD59942C08786C5A8AB526240D035DDFCD09942C09F69D322AC5262404A1CC3ADCC9942C09ED96443AD52624018B14F00C59942C04A4B9B60AE526240C2DF8A1FBE9942
 C0985B1080AE526240343F4860BD9942C0228CFA7FB052624086EC7200B39942C096804EF7B0526240DB807456B09942C02ED85768B1526240D66D50FBAD9942C01FA6D82CB252624033750DE9A69942C0992CEE3FB2526240C3499A3FA69942C044DD0720B55262407B6649809A9942C044DD0720B5526240BE0864C0A39942C01D9D0480B45262406F0C01C0B19942C01D9D0480B452624013DD6921B79942C0003F3E7CB452624038807EDFBF9942C0DFCFDF3AB55262405DA79196CA9942C0E1390087B5526240792A9611CD9942C0A8CDEE7FB65262407B25DA9FD59942C057D7570DB8526240D6B3D606DD9942C04BCD7921B85262407102D369DD9942C01A12F758BA5262401A2E1796E49942C064C68091BC5262407D299721E99942C08C5363F8BE526240997E8978EB9942C003E0E9DFBF526240100B1060EC9942C0E960FD9FC3526240B5FB5580EF9942C094111780C652624067FCB1FFF09942C0D57036C2C7526240A85BD141F29942C0010200000002000000D57036C2C7526240A85BD141F29942C046820420C9526240186D9F9FF39942C00102000000B7000000D57036C2C7526240A85BD141F29942C0C50D0929C9526240FA25E2ADF39942C0F0B9B832CD52624051FDDE01F99942C079DE324CD2526240BB09BE69FA9942C061C7DA3AD3526240A3C7EF6
 DFA9942C02BC5E97FD45262406E3E6480FA9942C0BE1C2C52D7526240EB79ED88F99942C0F3B688DED8526240CE7AE706F99942C0191F662FDB52624064E4D132F79942C0D257EB1FDF5262400CEDF71FF49942C0AE92D96AE0526240B998B047F29942C07B8A77DBE052624043684EA8F19942C04B8D7516E2526240BF55E8CDF29942C0539A289DE35262401F4AB4E4F19942C04779419FE3526240378C82E0F19942C0DC3818A0E3526240A2CCABDFF19942C050A335ABE3526240EF9705C9F19942C03AF361ACE552624062D520CCED9942C066D6F786E75262403F47F5E7EC9942C088BA0F40EA526240E4DB16C0EF9942C0DD4A6540EC52624031CF4A5AF19942C0A1FE6959ED5262407EDC2340F29942C02A9D595CED526240BF9D9F3DF29942C0634BEA5FED5262407EDC2340F29942C0B8C7D287EE52624043B00518F19942C0058DF4FDEF5262405B261EABEF9942C007DD6FFEF0526240D97B4CFFED9942C0D4FCE71FF352624082FA3B80EA9942C0B2423635F5526240CB42E0EDE69942C0AFEC82C1F5526240D7385101E69942C0E1928895F6526240493CEAF9E49942C0680EFF9FF95262403F582140E19942C0631F09A0FD5262407707C25FDD9942C02920ED7F0053624076775380DE9942C064F0E65F015362409E8834E0E29942C064F0E65F0153624018DA
 EF3FE89942C02920ED7F0053624086AB0320EE9942C0DC9FE63FFF526240C52CC59FF29942C075CF1500FE5262400F0E51E0F89942C0D41F065FFD52624090508E5DFD9942C0F221A81AFD52624048B2FD1AFF9942C067EB85A7FC526240ED2C7AA7029A42C0F33EE99FFB526240AD52D55F0A9A42C03FEE1120F9526240C8E64FC01B9A42C0CF0DF21FF75262402B5BDA5F2C9A42C032135674F5526240B553CE72349A42C071112917F45262406BA395D63A9A42C078A686ECF2526240B676ECB13E9A42C05E5CF45FF1526240B3C068A0439A42C0E7BB00A0EF52624079831E204E9A42C086AB0320EE526240EB05FA9F579A42C0392BFDDFEC526240DB673AE05F9A42C016CBE31FEC526240FAA93B60689A42C016CBE31FEC526240A34B49206F9A42C0249B06A0EC526240224ECC1F789A42C04BDB0940ED52624040005FC0819A42C0AFCBF09FEE526240545227A0899A42C01FAC10A0F052624009E46D00919A42C0FD929E33F35262400598439C989A42C0394F2B3BF3526240B8CCE9B2989A42C00EC40D53F6526240B31E6393A19A42C075351E11F85262409C5BD71EAC9A42C06FFF80BDF85262406F6B6688BE9A42C0A1ED3D01F9526240681888AFC09A42C0680EFF9FF95262406BF12900C69A42C0DEAEF25FFB526240B2440CE0D29A42C0631F09A0FD5262407
 6775380DE9A42C0DC9FE63FFF5262404FF92180E59A42C0ABB019E0025362405E9A22C0E99A42C0A9A10DC0065362403FEBD09FEC9A42C0F7263C570A536240FDDB65BFEE9A42C0EF13515D0A53624050DAC0C2EE9A42C0A99AC5300C536240FC4BF7DFEF9A42C001F15FC50E536240C632FD12F19A42C05314F93F115362407EDC2340F29A42C04B45196015536240109EBFBFF79A42C0707610E019536240FCDEA63FFB9A42C0BE8575E31D536240DE91B1DAFC9A42C0DBF40C861F53624060FA038AFD9A42C0E8E6D143235362401EEB98A9FF9A42C0648918C025536240566133C0059B42C00702092F26536240959A3DD00A9B42C0AB4CE77926536240873C388E0E9B42C0077536892653624020EF552B139B42C09F5912A026536240C0A7DEBF1E9B42C05DC6A8C626536240987F9994279B42C0B9EEF7D526536240001EAC5A2D9B42C0AD88F5A1265362405BC0159A359B42C0A239FC7F26536240AC7EB61F3A9B42C05AE95A2026536240E6CC76853E9B42C07F4FAC5325536240881BA66C479B42C056ED3FD723536240F907DB99539B42C05C26796422536240B2C0B22D5E9B42C069780EC021536240BBB8E8BF629B42C0755776C12053624042D2020F679B42C07F5C2C561E53624090EE8C5B719B42C06B14ED851D5362409393E414789B42C05CB7F75F1D5362
 4021BE5D40799B42C0472701201D536240E68013C0839B42C0A9DE75911D536240438B112E899B42C061B94A1C1E53624027E9ABF58F9B42C01F7CCD172053624083ED71F0969B42C09CB11EAD205362402355CA21989B42C0BBB8E8BF2253624009771D609C9B42C029A84D4123536240AF1177AB9D9B42C06D6EF195255362407642F9CCA39B42C0B45FD27326536240543948E3AB9B42C00D912E91265362407B2A4C84B29B42C09F5912A026536240E9CD4D40B89B42C01FFC1FBB26536240690A534ABE9B42C0D130C6D126536240AC6AEE8DC69B42C04B2DA5782653624092729C80CB9B42C08DA9054026536240C693933FCE9B42C06A49EC7F255362408AC6DADFD99B42C06A49EC7F25536240B5824B6CE39B42C08DACA1792553624054B02193E79B42C034C0609225536240ABD50DCAEA9B42C0648918C025536240C52CC59FF29B42C0611FF873255362401689096AF89B42C0E14ED83425536240618A7269FC9B42C04F89905F245362400455A357039C42C080E2B66C2353624084D95FD1089C42C094FF7F52235362402B8E5E68099C42C02F68210123536240D6E5EF390B9C42C015D9733E21536240AA549ADE0F9C42C013FFC1D11F5362403DD4B661149C42C0A65714C01E536240E82510C0179C42C021E7FD7F1C53624061E75C401E9C42C049360D40195
 362408DA90540269C42C0C1E50C2017536240A06B5F402F9C42C0A77E390E17536240210AC105349C42C06EB99FF816536240AE9E93DE379C42C08F6A7D36175362405DBB59283E9C42C0D955ED3F17536240F7EFB03F3F9C42C02CF587C11753624072EB7FCA429C42C06516461F18536240651DE967459C42C01FFC7A74195362404813EF004F9C42C0ADF545421B536240EB8F300C589C42C0D7E7209E1B5362406D0CF093599C42C026D6F37F1853624074FE37407A9C42C0F9D51C20185362405C210780859C42C05105ED1F15536240742497FF909C42C08B04094012536240B73302E08E9C42C0FFB7EDD60D536240708D74AB8C9C42C02982EE810C53624083E4F8FC8B9C42C08432E8DF09536240B3823A408B9C42C021510DA0045362406CC207C0899C42C03A3DEFC60253624096B77E55899C42C03C32569BFF5262401F590A92889C42C04562821AFE526240D117E714899C42C0554FE61FFD52624025726660899C42C0BD5DE5BFF6526240E68013C0839C42C0392BFDDFEC526240BF6F32607F9C42C07BF9F8DFE5526240FA3F2C40809C42C0BDC7F4DFDE52624001124DA0889C42C07356FABFD952624030F54E60959C42C023F609A0D85262408DD13AAA9A9C42C09E85F35FD65262407009C03FA59C42C0B524F6BFD2526240AA6FAAFFBD9C42C0B524F6BF
 D2526240AE934440CF9C42C0756506E0D5526240861854C0E29C42C00E661360D85262405B79C9FFE49C42C0BAE70A00DF52624020A9CF1FE49C42C0B2FAD97EE8526240E8667FA0DC9C42C068267387E852624024230CA8DC9C42C063207475EC526240C4D21B49DD9C42C0C17BFDFFEE526240FECAEFD9DF9C42C0E7BB00A0EF5262401CF80780E09C42C0D4FCE71FF35262409649C3DFE59C42C07CCD1720F65262406A8A5B60EA9C42C0B44AFAC5F65262403385CE6BEC9C42C0483547B1F7526240DF7A0382EF9C42C050E339B6F95262408D919158F79C42C07ABE0B00FA52624033FED87FF89C42C0F05EFFBFFB5262401870E01F009D42C0169F0260FC526240E47107A0079D42C0169F0260FC526240E90E62670A9D42C037F4BB55FC526240FE2A1B310E9D42C01A828879FB5262405A8B0574159D42C0B2AE1B00FB5262402EE64240199D42C0B86EEFBFFA52624056F723A01D9D42C0350DE59FF45262401F6BA1BF2B9D42C02CAFD096E0526240000000E04F9D42C0
+  </a>
+<test>
+  <op name="isValid" arg1="A">true</op>
+</test>
+<test>
+ <op name="union" arg1="A">
+01050000007B00000001020000000300000035BEE5A0FA486240785C548B887F42C00619B787F34962403A8D599B6B7A42C035BEE5A0FA486240785C548B887F42C0010200000002000000A5AE6B6A0F516240EE23B726DD9B42C025AA5D670F516240B165B130DD9B42C001020000000400000025AA5D670F516240B165B130DD9B42C06AB3FB9F0D516240B5F81400E39B42C01A530B800C5162405AE95A20E69B42C01236CF150C5162401D566AF4E69B42C00102000000030000001236CF150C5162401D566AF4E69B42C06BB933130C516240EFBC9EF9E69B42C062B933130C51624001BD9EF9E69B42C001020000000500000062B933130C51624001BD9EF9E69B42C0984979520B516240D6468666E89B42C07DCB9C2E0B516240CA3CA87AE89B42C083013A820A516240E80D9CD8E89B42C01820D1040A516240946B651DE99B42C001020000000A0000001820D1040A516240946B651DE99B42C09FCA694F0951624012D5004AE89B42C0E47107A00751624072593B40E69B42C0881E42A6065162404ACC58D9E39B42C09D9ACB0D065162408C930C4AE29B42C03909A52F045162409BF749FFDC9B42C0B159E48D025162401A738D85D79B42C00B7A6F0C01516240F2A32B22D49B42C0EB6F09C0FF5062403BA41820D19B42C02D3185BDFF506240DC9BDF30D19B42C
 00102000000040000002D3185BDFF506240DC9BDF30D19B42C059A725B1FF506240ADE93015D19B42C027744D37FF5062407BE35AA3D49B42C04562821AFE506240158843DBD69B42C001020000000B0000004562821AFE506240158843DBD69B42C0ED7E15E0FB5062404055E0BFD49B42C0B86EEFBFFA506240A654D33FD29B42C0575EF23FF950624011058E5FD39B42C0A74E513FF95062406403E962D39B42C039002C3CF950624022426D65D39B42C08CA262F7F85062409F8B2BD3D49B42C0041E1840F8506240F0355F80D89B42C03C878D0DF8506240857F6CEDD89B42C0E0BDFE7FF75062404F667220DA9B42C04333F4F4F650624018A99C9BDB9B42C00102000000350000004333F4F4F650624018A99C9BDB9B42C0E4FF441BF6506240C48A64D9DD9B42C0B2423635F5506240F3C64961DE9B42C0E2CC0AA0F35062400518963FDF9B42C081BC0D20F250624057C80160E19B42C0266CE45FF050624047BAB07FE89B42C05D8B16A0ED5062400F0E51E0F89B42C0D81A0060EB5062406ED113E0059C42C03B3A0900E9506240F73361A0109C42C0676902A0E55062406E6704C01D9C42C052DCA799E450624071D014F0219C42C085121C4DE45062404DF4F928239C42C09164B1A8E3506240FE64E7C8259C42C0FA6B68B9E25062407389D981299C42C0ABCC94
 D6DF506240F9F8DFA52F9C42C09274CDE4DB50624090436914379C42C0029EB470D9506240838F77FD389C42C097491E99D85062400CFDB8A2399C42C01426E71FD8506240950ED6FF399C42C0A0038184D75062404DA48F543A9C42C08119F8F6D3506240C977842E3C9C42C0EB54F99ED1506240A68D34023B9C42C0FE55911BCF506240859BE7E3359C42C0D66C8A6CCC506240AD61D0532E9C42C04285D9BACA5062409745178A2A9C42C007E92972C850624074EB353D289C42C0264A8CAFC7506240FED478E9269C42C0C528BE90C45062407D6DA23B2D9C42C0D4EBBBC7BE506240EB556474409C42C08B0CBCA4BB506240F5E681D94E9C42C0D08547D1B95062408EB344C2529C42C025BE24DFB6506240A2C38DA5599C42C074925275B45062400B3AC6BA5D9C42C05A907758B2506240A0DFF76F5E9C42C0058DF4FDAF506240E6F516C5619C42C0081566EBAA506240D29B9B80709C42C02EA4688AA5506240443B5DCC859C42C06FF3C649A150624019575C1C959C42C09AACF6559E506240BAE70A009F9C42C028F5C0229A5062408D9B7521B19C42C0B04C09D2965062406DD5BF35C19C42C0B75D68AE9350624077D66EBBD09C42C098593AD5905062405D5727C2E19C42C0CFA67E398E5062402627C929F09C42C0C194DCBC8C50624097EB23A6FA9C42C0C19
 A14308B506240DE10F461079D42C09F292AD188506240F5DF394A149D42C0A0B998B08750624028DB1BD71A9D42C099428C7C83506240AC8FE2772E9D42C08E9DA68581506240A56D57433D9D42C02AE4A5F67D5062405930F147519D42C0178B95877B506240DA1F8370609D42C0AD6A49477950624055F08057709D42C0010200000003000000AD6A49477950624055F08057709D42C0575EF23F79506240266CE45F709D42C042E504127950624060F426D0719D42C001020000001400000042E504127950624060F426D0719D42C0FDD071DA785062407730BD58739D42C011001C7B765062404767AA71809D42C03521527875506240791AD58E879D42C0D9CAF044755062405494A69C8A9D42C0322DFBBF745062408014D09F919D42C0217DEE5F7450624093D629A09A9D42C00CEDF71F7450624083CB1940AE9D42C0924FD9FA7350624020915B38B59D42C06BB015D973506240BED29E37BA9D42C0577FDF1A7350624083C366DBC49D42C0A7FC10C0725062408712D2BFC99D42C016EF117B72506240CD9EBAA8CC9D42C05E73FD717150624056D3F544D79D42C025242DF07050624031D7FDBEDA9D42C0266CE45F70506240B2D7BB3FDE9D42C0BE535CB06F50624045B9347EE19D42C083B174F46E506240D89AADBCE49D42C0FDB0EFD46D5062402F5E3D38E99D
 42C03A9702B96C5062400BBE498EEB9D42C00102000000030000003A9702B96C5062400BBE498EEB9D42C0B05EFBB86C506240B7F3588EEB9D42C0BC7FE2B66C5062409FB18A92EB9D42C0010200000003000000BC7FE2B66C5062409FB18A92EB9D42C0D53A16806B5062406E3B2300EE9D42C0C68DB8D36A5062405EB86C75EF9D42C0010200000003000000C68DB8D36A5062405EB86C75EF9D42C002E264D16A506240A3BE767AEF9D42C05ED945CF6A506240E4AFAD7EEF9D42C00102000000030000005ED945CF6A506240E4AFAD7EEF9D42C0ACC1A0F169506240C6600F37F19D42C0A478A4056850624056DAF004F39D42C0010200000003000000A478A4056850624056DAF004F39D42C05F5B3FFD675062405A76D20CF39D42C0AD0008F56750624017362214F39D42C0010200000012000000AD0008F56750624017362214F39D42C0F199EC9F67506240E88CDE5FF39D42C0648918C065506240C52CC59FF29D42C0015CDABA65506240ADEAF6A3F29D42C0AE5D7FB765506240846B49A2F29D42C089B08630635062407DEA58A5F49D42C01E8D9EB661506240AAE683AFF99D42C07171546E62506240647DB905019E42C0A44808A062506240A5F04520039E42C0170912806450624013C25900099E42C0AABF14D466506240691D554D109E42C0EC0AC73D67506
 24032326DA4119E42C0C7A1D9D068506240B3FEE08D169E42C0E7F05A536A50624055C3D9081F9E42C094933FCE6A506240815DA857259E42C0DBFAE93F6B506240CC9A58E02B9E42C0D53A16806B5062401EDE7360399E42C027B284626B50624019BD1ABC409E42C001020000000300000027B284626B50624019BD1ABC409E42C06DDAD6606B506240C1BC1127419E42C0240012606B50624012B85B5B419E42C0010200000005000000240012606B50624012B85B5B419E42C0D81A00606B50624049A01C60419E42C0C66AF3FF6A50624069E21DE0499E42C08E7AE3FF695062402AF40BC0509E42C0B5A91501695062409356D7FC539E42C001020000000E000000B5A91501695062409356D7FC539E42C0A2F4E04966506240279AACF6559E42C0828E56B56450624099E5FC5E549E42C00839EFFF635062400B45BA9F539E42C0EBC6BB236350624041A66BDC519E42C0F2D1E28C61506240E34D7E8B4E9E42C0DE5E2DD25F506240A456F3774A9E42C0BAE70A005F5062403A92CB7F489E42C032970AE05C5062401281EA1F449E42C03C5409055B50624061527C7C429E42C0E6EB8DB55A50624061F65734429E42C0D83274475A5062409723BFD9419E42C04C16F71F595062405620C4DF409E42C0F609A018595062407F9F71E1409E42C001020000000C000000F6
 09A018595062407F9F71E1409E42C085AD7E11595062406D6292DB409E42C0FDE6B45D57506240E436D032419E42C07ADD223056506240F581E49D439E42C0C586133D55506240280D350A499E42C0A2F8E75854506240A8774C384F9E42C013550960545062401950148D5A9E42C01355096054506240E333D93F4F9E42C04E250340555062402E122400499E42C08615134056506240B3C068A0439E42C0D67503605750624032303C40419E42C0F609A018595062407F9F71E1409E42C001020000000E000000F609A018595062407F9F71E1409E42C02207DB3E5A506240F02609D3419E42C0AB460AC05A50624085701640429E42C05DC0CB0C5B5062409C0E0984429E42C0867E5CD15C5062401281EA1F449E42C058BACCFA5E506240E793707C489E42C01F20A9CF5F506240921914724A9E42C054E8178061506240C0D3BF7F4E9E42C041D3122B63506240B81E85EB519E42C067583101645062400540CBA9539E42C005114EB0645062401C68F459549E42C08DA90540665062408CD5E6FF559E42C03B3A090069506240E7543200549E42C0B5A91501695062409356D7FC539E42C0010200000007000000B5A91501695062409356D7FC539E42C0D923D40C69506240C3DA73F4539E42C0A6D3BA0D6A506240FA6F6FC8509E42C00B3A6B016B506240EC6415DB499
 E42C0F36ACA5F6B506240449B2D6A419E42C0D81A00606B506240731FCA61419E42C0240012606B50624012B85B5B419E42C0010200000004000000240012606B50624012B85B5B419E42C0BDCA35606B50624014E97E4E419E42C0E749E3616B506240145F48E2409E42C027B284626B50624019BD1ABC409E42C001020000001100000027B284626B50624019BD1ABC409E42C0FEB9C3816B5062404E621058399E42C0AE84494C6B506240E9E115D22B9E42C00E034CCF6A506240CF561465259E42C0A02AF05F6A506240F0879FFF1E9E42C03E1AF3DF68506240D1459E7F169E42C0184D1D9A68506240782EE7AD159E42C0C5991540675062404A743BA0119E42C0C201E3CF665062401B24E93F109E42C08E812B8F645062405A88C4F3089E42C07DD756A262506240D574E217039E42C080A0377062506240C4B30419019E42C069780EC0615062409EAE939FF99D42C0CA880B4063506240006D50A0F49D42C0E70B10BB65506240ADEAF6A3F29D42C006CEBE97675062400C079D6BF39D42C0AD0008F56750624017362214F39D42C0010200000003000000AD0008F56750624017362214F39D42C095FBD3FC675062405A76D20CF39D42C0A478A4056850624056DAF004F39D42C0010200000003000000A478A4056850624056DAF004F39D42C08E7AE3FF69506240
 2B9C4940F19D42C05ED945CF6A506240E4AFAD7EEF9D42C00102000000030000005ED945CF6A506240E4AFAD7EEF9D42C0E7919AD16A5062400EFF9F79EF9D42C0C68DB8D36A5062405EB86C75EF9D42C0010200000003000000C68DB8D36A5062405EB86C75EF9D42C08A66AF886B50624050F4650EEE9D42C0BC7FE2B66C5062409FB18A92EB9D42C0010200000003000000BC7FE2B66C5062409FB18A92EB9D42C0BC7FE2B66C5062409FB18A92EB9D42C03A9702B96C5062400BBE498EEB9D42C00102000000140000003A9702B96C5062400BBE498EEB9D42C0711B0DE06D5062406B1ACA3FE99D42C0C17BFDFF6E5062402B9908C0E49D42C01D739EB16F506240337C5578E19D42C08294336F7050624064DE4F32DE9D42C0ABB420EF70506240D7D3B3C5DA9D42C05B7C0A8071506240D955ED3FD79D42C0AAAEE87B72506240FC2257A0CC9D42C0309B00C372506240C2CE5EC7C99D42C04850FC18735062404835ECF7C49D42C0F75C01E0735062408F4E0240BA9D42C077FF0EFB73506240BB55212FB59D42C006E8082A74506240F4103235AE9D42C0D08C8F60745062400A4F43AF9A9D42C014E63DCE74506240F78CE9AE919D42C029BB4F4475506240B9CFE0A58A9D42C0568D14807550624002A2BB7F879D42C0A8CDEE7F765062402920ED7F809D42C02A5E1
 BE078506240B3EC4960739D42C042E504127950624060F426D0719D42C001020000000200000042E504127950624060F426D0719D42C0AD6A49477950624055F08057709D42C0010200000024000000AD6A49477950624055F08057709D42C05E3013A081506240E3C9C91F679D42C05F01F15F85506240D746E11F5B9D42C031F20DE0885062402222EB5F489D42C0B9420E008B50624079ED2D40369D42C04473F8FF8C5062404E250340159D42C0B73302E08E506240FCE1E7BF079D42C08EE4F21F9250624013BF1880FC9C42C0756506E0955062400CEDF71FF49C42C088BA0F40AA506240F1C5CD5FD79C42C0D32B0A60AF506240C9213DA0C79C42C05B7C0A80B1506240B63643609B9C42C0EE8B95E2B4506240C89EF3098F9C42C0BB270F0BB550624075E84F768E9C42C0B2AE1B00BB5062402D3E05C0789C42C0EB6F09C0BF5062408C68965F619C42C0D2C1FA3FC7506240F6F53240589C42C068A4EF7FD1506240DC61B8DF469C42C04B451960D5506240DBCE08803B9C42C01D818989D75062408F650B523A9C42C0D3646B22D8506240534D5A023A9C42C00EA8925CD95062408FC7670D399C42C0FAA6FADFDB506240B4BD2720379C42C0F5B704E0DF506240E7BB00A02F9C42C0BBB8E8BFE25062404A0A2C80299C42C0D63329AAE3506240EC2708C3259C42
 C07EC2D9ADE55062401A69A9BC1D9C42C02914330CE95062405C6F9BA9109C42C0D215116AEB5062408C18D1D1059C42C0EB45FEAAED5062404BCADDE7F89B42C052F98D65F0506240D0419770E89B42C0DAD6602BF2506240F28CC756E19B42C0002BD1A3F3506240E7D0D84DDF9B42C00E547C32F55062401D46F762DE9B42C07CCD1720F65062406B871AE0DD9B42C04333F4F4F650624018A99C9BDB9B42C00102000000090000004333F4F4F650624018A99C9BDB9B42C0289B7285F750624025E7C41EDA9B42C04E098849F85062400E7D1C72D89B42C0CB55E2F0F8506240753A90F5D49B42C08CFE863FF95062406403E962D39B42C026BD14C3FA5062405F8E684CD29B42C0E14625D0FB506240FE9364C2D49B42C01CE3D418FE50624068869EDED69B42C04562821AFE506240158843DBD69B42C00102000000040000004562821AFE506240158843DBD69B42C08D3FF61FFE50624092054CE0D69B42C0DC9FE63FFF50624028E5FF9FD49B42C02D3185BDFF506240DC9BDF30D19B42C001020000000A0000002D3185BDFF506240DC9BDF30D19B42C0086C7308015162408D68F118D49B42C099000D80025162400936AE7FD79B42C01281EA1F045162402FB72000DD9B42C08641F4FF055162409298FB3FE29B42C0382EE3A606516240734B06DBE39B42C0B1C86
 59207516240C5579643E69B42C03D9D2B4A0951624000982144E89B42C08152FEFF0951624053AAE91FE99B42C01820D1040A516240946B651DE99B42C00102000000050000001820D1040A516240946B651DE99B42C0A1BEC0070A516240E869C020E99B42C0E2EFCD250B51624047BAB07FE89B42C0CAF21A600B516240304AD05FE89B42C062B933130C51624001BD9EF9E69B42C001020000000300000062B933130C51624001BD9EF9E69B42C029F8B7150C516240723F96F4E69B42C01236CF150C5162401D566AF4E69B42C00102000000040000001236CF150C5162401D566AF4E69B42C035A3D57F0C5162407E63192CE69B42C09C5C9DAD0D516240B5F81400E39B42C025AA5D670F516240B165B130DD9B42C001020000000400000025AA5D670F516240B165B130DD9B42C010EF94690F516240AC623B29DD9B42C0DD7305800F516240184740E0DC9B42C0A5AE6B6A0F516240EE23B726DD9B42C0010200000009000000D57036C2C7526240A85BD141F29942C0C50D0929C9526240FA25E2ADF39942C0F0B9B832CD52624051FDDE01F99942C079DE324CD2526240BB09BE69FA9942C061C7DA3AD3526240A3C7EF6DFA9942C02BC5E97FD45262406E3E6480FA9942C0BE1C2C52D7526240EB79ED88F99942C0F3B688DED8526240CE7AE706F99942C07D879512
 DB526240FAED9149F79942C00102000000030000007D879512DB526240FAED9149F79942C0191F662FDB52624064E4D132F79942C09737634FDB5262408DBADC19F79942C00102000000090000009737634FDB5262408DBADC19F79942C0D257EB1FDF5262400CEDF71FF49942C0AE92D96AE0526240B998B047F29942C07B8A77DBE052624043684EA8F19942C04B8D7516E2526240BF55E8CDF29942C0539A289DE35262401F4AB4E4F19942C04779419FE3526240378C82E0F19942C0DC3818A0E3526240A2CCABDFF19942C0927F37A7E3526240AC7128D1F19942C0010200000003000000927F37A7E3526240AC7128D1F19942C050A335ABE3526240EF9705C9F19942C09B6053AFE3526240964FD5C0F19942C00102000000090000009B6053AFE3526240964FD5C0F19942C03AF361ACE552624062D520CCED9942C066D6F786E75262403F47F5E7EC9942C088BA0F40EA526240E4DB16C0EF9942C0DD4A6540EC52624031CF4A5AF19942C0A1FE6959ED5262407EDC2340F29942C02A9D595CED526240BF9D9F3DF29942C0634BEA5FED5262407EDC2340F29942C03AB9027DEE526240F7B4D722F19942C00102000000030000003AB9027DEE526240F7B4D722F19942C0B8C7D287EE52624043B00518F19942C0308A808AEE5262409DD76815F19942C001020000001
 0000000308A808AEE5262409DD76815F19942C0058DF4FDEF5262405B261EABEF9942C007DD6FFEF0526240D97B4CFFED9942C0D4FCE71FF352624082FA3B80EA9942C0B2423635F5526240CB42E0EDE69942C0AFEC82C1F5526240D7385101E69942C0E1928895F6526240493CEAF9E49942C0680EFF9FF95262403F582140E19942C0631F09A0FD5262407707C25FDD9942C02920ED7F0053624076775380DE9942C064F0E65F015362409E8834E0E29942C064F0E65F0153624018DAEF3FE89942C02920ED7F0053624086AB0320EE9942C0DC9FE63FFF526240C52CC59FF29942C075CF1500FE5262400F0E51E0F89942C0D41F065FFD52624090508E5DFD9942C0010200000003000000D41F065FFD52624090508E5DFD9942C0F221A81AFD52624048B2FD1AFF9942C0A36B13A8FC526240F8A11DA3029A42C0010200000003000000A36B13A8FC526240F8A11DA3029A42C067EB85A7FC526240ED2C7AA7029A42C0A05FB9A5FC526240FCFCF6B4029A42C0010200000025000000A05FB9A5FC526240FCFCF6B4029A42C0F33EE99FFB526240AD52D55F0A9A42C03FEE1120F9526240C8E64FC01B9A42C0CF0DF21FF75262402B5BDA5F2C9A42C032135674F5526240B553CE72349A42C071112917F45262406BA395D63A9A42C078A686ECF2526240B676ECB13E9A42C0
 5E5CF45FF1526240B3C068A0439A42C0E7BB00A0EF52624079831E204E9A42C086AB0320EE526240EB05FA9F579A42C0392BFDDFEC526240DB673AE05F9A42C016CBE31FEC526240FAA93B60689A42C016CBE31FEC526240A34B49206F9A42C0249B06A0EC526240224ECC1F789A42C04BDB0940ED52624040005FC0819A42C0AFCBF09FEE526240545227A0899A42C01FAC10A0F052624009E46D00919A42C0FD929E33F35262400598439C989A42C0394F2B3BF3526240B8CCE9B2989A42C00EC40D53F6526240B31E6393A19A42C075351E11F85262409C5BD71EAC9A42C06FFF80BDF85262406F6B6688BE9A42C0A1ED3D01F9526240681888AFC09A42C0680EFF9FF95262406BF12900C69A42C0DEAEF25FFB526240B2440CE0D29A42C0631F09A0FD52624076775380DE9A42C0DC9FE63FFF5262404FF92180E59A42C0ABB019E0025362405E9A22C0E99A42C0A9A10DC0065362403FEBD09FEC9A42C0F7263C570A536240FDDB65BFEE9A42C0EF13515D0A53624050DAC0C2EE9A42C0A99AC5300C536240FC4BF7DFEF9A42C001F15FC50E536240C632FD12F19A42C05314F93F115362407EDC2340F29A42C04B45196015536240109EBFBFF79A42C0707610E019536240FCDEA63FFB9A42C0623B08DB1D5362403B7A52D7FC9A42C0010200000003000000623B08DB1D5
 362403B7A52D7FC9A42C0BE8575E31D536240DE91B1DAFC9A42C0CDEABBE31D536240C40DCFDAFC9A42C0010200000017000000CDEABBE31D536240C40DCFDAFC9A42C0DBF40C861F53624060FA038AFD9A42C0E8E6D143235362401EEB98A9FF9A42C0648918C025536240566133C0059B42C00702092F26536240959A3DD00A9B42C0AB4CE77926536240873C388E0E9B42C0077536892653624020EF552B139B42C09F5912A026536240C0A7DEBF1E9B42C05DC6A8C626536240987F9994279B42C0B9EEF7D526536240001EAC5A2D9B42C0AD88F5A1265362405BC0159A359B42C0A239FC7F26536240AC7EB61F3A9B42C05AE95A2026536240E6CC76853E9B42C07F4FAC5325536240881BA66C479B42C056ED3FD723536240F907DB99539B42C05C26796422536240B2C0B22D5E9B42C069780EC021536240BBB8E8BF629B42C0755776C12053624042D2020F679B42C07F5C2C561E53624090EE8C5B719B42C06B14ED851D5362409393E414789B42C05CB7F75F1D53624021BE5D40799B42C0472701201D536240E68013C0839B42C0C1BA9F8C1D536240FA9BD0F2889B42C0010200000003000000C1BA9F8C1D536240FA9BD0F2889B42C0A9DE75911D536240438B112E899B42C02B15B7931D536240D293414A899B42C00102000000060000002B15B7931D536240D2
 93414A899B42C061B94A1C1E53624027E9ABF58F9B42C01F7CCD172053624083ED71F0969B42C09CB11EAD205362402355CA21989B42C0BBB8E8BF2253624009771D609C9B42C0A642BB3823536240F2B483959D9B42C0010200000003000000A642BB3823536240F2B483959D9B42C029A84D4123536240AF1177AB9D9B42C041DD7F432353624027003EB19D9B42C001020000000400000041DD7F432353624027003EB19D9B42C06D6EF195255362407642F9CCA39B42C0B45FD27326536240543948E3AB9B42C014C1199126536240AA35997FB29B42C001020000000300000014C1199126536240AA35997FB29B42C00D912E91265362407B2A4C84B29B42C033824391265362403ADE5C8CB29B42C001020000000800000033824391265362403ADE5C8CB29B42C09F5912A026536240E9CD4D40B89B42C01FFC1FBB26536240690A534ABE9B42C0D130C6D126536240AC6AEE8DC69B42C04B2DA5782653624092729C80CB9B42C08DA9054026536240C693933FCE9B42C06A49EC7F255362408AC6DADFD99B42C06A49EC7F25536240B5824B6CE39B42C00102000000030000006A49EC7F25536240B5824B6CE39B42C08DACA1792553624054B02193E79B42C028C8389225536240B5B2DCC4EA9B42C001020000000300000028C8389225536240B5B2DCC4EA9B42C034C
 0609225536240ABD50DCAEA9B42C06903899225536240DE36F4D0EA9B42C00102000000030000006903899225536240DE36F4D0EA9B42C0648918C025536240C52CC59FF29B42C0547336742553624095F14B65F89B42C0010200000003000000547336742553624095F14B65F89B42C0611FF873255362401689096AF89B42C0A2FEEF73255362406D4F8D6AF89B42C0010200000004000000A2FEEF73255362406D4F8D6AF89B42C0E14ED83425536240618A7269FC9B42C04F89905F245362400455A357039C42C05770EB7223536240C4AE8EAD089C42C00102000000030000005770EB7223536240C4AE8EAD089C42C080E2B66C2353624084D95FD1089C42C035909A532353624032FB0262099C42C001020000001200000035909A532353624032FB0262099C42C094FF7F52235362402B8E5E68099C42C02F68210123536240D6E5EF390B9C42C015D9733E21536240AA549ADE0F9C42C013FFC1D11F5362403DD4B661149C42C0A65714C01E536240E82510C0179C42C021E7FD7F1C53624061E75C401E9C42C049360D40195362408DA90540269C42C0C1E50C2017536240A06B5F402F9C42C0A77E390E17536240210AC105349C42C06EB99FF816536240AE9E93DE379C42C08F6A7D36175362405DBB59283E9C42C0D955ED3F17536240F7EFB03F3F9C42C02CF587
 C11753624072EB7FCA429C42C06516461F18536240651DE967459C42C01FFC7A74195362404813EF004F9C42C0ADF545421B536240EB8F300C589C42C0D7E7209E1B5362406D0CF093599C42C0010200000006000000D7E7209E1B5362406D0CF093599C42C026D6F37F1853624074FE37407A9C42C0F9D51C20185362405C210780859C42C05105ED1F15536240742497FF909C42C08B04094012536240B73302E08E9C42C0C6FCE9F90D536240D4AFF2BC8C9C42C0010200000003000000C6FCE9F90D536240D4AFF2BC8C9C42C0FFB7EDD60D536240708D74AB8C9C42C0D45A0BC90D5362405DD659A48C9C42C0010200000005000000D45A0BC90D5362405DD659A48C9C42C02982EE810C53624083E4F8FC8B9C42C08432E8DF09536240B3823A408B9C42C021510DA0045362406CC207C0899C42C07BB540D70253624075632B59899C42C00102000000030000007BB540D70253624075632B59899C42C03A3DEFC60253624096B77E55899C42C06AE186C20253624061FA6E54899C42C001020000001A0000006AE186C20253624061FA6E54899C42C03C32569BFF5262401F590A92889C42C04562821AFE526240D117E714899C42C0554FE61FFD52624025726660899C42C0BD5DE5BFF6526240E68013C0839C42C0392BFDDFEC526240BF6F32607F9C42C07BF9F8DFE
 5526240FA3F2C40809C42C0BDC7F4DFDE52624001124DA0889C42C07356FABFD952624030F54E60959C42C023F609A0D85262408DD13AAA9A9C42C09E85F35FD65262407009C03FA59C42C0B524F6BFD2526240AA6FAAFFBD9C42C0B524F6BFD2526240AE934440CF9C42C0756506E0D5526240861854C0E29C42C00E661360D85262405B79C9FFE49C42C0BAE70A00DF52624020A9CF1FE49C42C0B2FAD97EE8526240E8667FA0DC9C42C068267387E852624024230CA8DC9C42C063207475EC526240C4D21B49DD9C42C0C17BFDFFEE526240FECAEFD9DF9C42C0E7BB00A0EF5262401CF80780E09C42C0D4FCE71FF35262409649C3DFE59C42C07CCD1720F65262406A8A5B60EA9C42C0B44AFAC5F65262403385CE6BEC9C42C0483547B1F7526240DF7A0382EF9C42C07DD236B6F95262403BAB8558F79C42C00102000000030000007DD236B6F95262403BAB8558F79C42C050E339B6F95262408D919158F79C42C09BA010B7F9526240B886EC5BF79C42C00102000000050000009BA010B7F9526240B886EC5BF79C42C07ABE0B00FA52624033FED87FF89C42C0F05EFFBFFB5262401870E01F009D42C0169F0260FC526240E47107A0079D42C0169F0260FC526240E90E62670A9D42C0010200000007000000169F0260FC526240E90E62670A9D42C037F4BB55FC526240
 FE2A1B310E9D42C01A828879FB5262405A8B0574159D42C0B2AE1B00FB5262402EE64240199D42C0B86EEFBFFA52624056F723A01D9D42C0350DE59FF45262401F6BA1BF2B9D42C02CAFD096E0526240000000E04F9D42C001020000006E000000E23362A581526240000000E04F9D42C0C30C8D2782526240BF153F7C4F9D42C072A02C2184526240A891F1834E9D42C0C1E677F5855262406083CF204F9D42C09CF0B7E287526240DBFF5B24489D42C0E412471E88526240FEB220393E9D42C0430477FB8752624031F378B5379D42C0853BBC8C875262408D3CB59F319D42C0C4398F2F86526240076B52C02C9D42C089552877845262400392B06F279D42C0BC0166BE835262400B896A00259D42C09F477B728352624030E186CE219D42C081D2AB5C83526240BA5A385A1F9D42C03A0C416983526240BD440603199D42C0E946585484526240755B7DD00E9D42C0DC0BCC0A85526240D2EC702A089D42C04DD87E3286526240339C7CC4F99C42C0447DDCC8865262407AE9DCA3ED9C42C008371955865262409663682BE59C42C056BD570886526240128A085ADC9C42C021938C9C855262408CA438A2D69C42C0C4AF58C385526240D634947FD29C42C02B4CDF6B88526240B3D771B2C39C42C071659AFA8A526240D6E65A0FBA9C42C02540A8E68D52624059F047F6AD9
 C42C08CD99255915262402F7C8ED9A39C42C033A7261C95526240F7C374C69C9C42C02971C2299852624022F36D66999C42C0BC7DB1529C526240A8E96976939C42C0317491E79F52624064DFBA078D9C42C00CC050D1A25262404527F0F3849C42C099B3E32BA65262400A26A36F779C42C0B98C9B1AA8526240E65AB4006D9C42C00B57AC86A952624043064DA6659C42C0B1A94E62AB526240827E95325F9C42C0486E4DBAAD526240793073CB589C42C0163A6524B1526240E3A9A2D34E9C42C089E0C9B8B35262405FFE5426469C42C0C776082DB5526240DC8C89833A9C42C0F0DB10E3B552624092DF47DA329C42C0DB8D999FB6526240B926EEC2209C42C0A2F611AEB6526240ED7DAA0A0D9C42C01CBFA6BDB7526240711706D1FF9B42C04877C6ADB852624036864A6DF39B42C030044A54B95262409F55664AEB9B42C0F45B2A25BA5262404C0C1357DF9B42C09D6340F6BA5262405D3A41F6D59B42C0A09F4E1EBB526240C2EB4493D59B42C0DE639FB6BC526240298F13CBD29B42C004FD2A65BE526240AAE8B413CA9B42C0A7751BD4BE52624085CFD6C1C19B42C0892E5EE2BE526240A01518B2BA9B42C089CF9D60BF52624032E8DF89B49B42C0A31CCC26C0526240941C661EAF9B42C0D843FB58C15262402CC0D254AA9B42C076FC1708C2526240586BCDFB
 A49B42C096C4FE57C2526240A83462669F9B42C06D2E4844C252624033B44B659B9B42C0C3B068DFC1526240579B5A11909B42C037ED73C6C1526240E8537D9D8A9B42C017AFC3E2C1526240201DC308869B42C05BC3561AC2526240466172FE819B42C0D8F8A7AFC2526240C1C991297A9B42C04C040539C3526240BF243A70739B42C054CF38C3C3526240E09D7C7A6C9B42C09C95A3B6C3526240B50F1E12639B42C072D1DA7EC3526240EF46301F5A9B42C075DFD682C352624071E888D7509B42C016647039C3526240569F06674B9B42C0DB4E5B23C2526240EA077591429B42C0ACFB6C89C152624088E41A553C9B42C0F6459D14C1526240CC75BFAF369B42C035E213FCC0526240EE08A7052F9B42C0B528FDCEC05262407CE82741249B42C01B50CAFFBF526240A3F08FAD1D9B42C039F9E3ACBE5262409F877F7D199B42C0333CAC26BE5262407E4D7BEF149B42C08A79B18BBD5262400F90D4E70F9B42C02E9CB525BC526240D18A146F099B42C035D5EEB2BA526240D4884FF0039B42C0B58E05E0BA526240929B3CC0EE9A42C0ACD73E2EBB526240F810F9D3EB9A42C034A1A41BBC5262400C885AE4E89A42C01C87B0D0BD5262407BB889FFE09A42C0FD1F1620C05262408E401768D29A42C06D03D259C1526240519DB3AACA9A42C0CFFF6101C2526240B4818
 5DDC19A42C07BD058A0C2526240C50BD8C4B89A42C055E9DD0EC35262407D5061B6AE9A42C0E35B0EAAC3526240CA4054D0A39A42C0AA65C636C45262400CBD0F51969A42C0F6211400C8526240B37CB83F729A42C0DF8211A0CB526240DF180280639A42C0F885FCD8C9526240E17261495E9A42C0E603029DC9526240CA4A38995D9A42C0FE73E2BCC9526240850C3F93589A42C0C2A04CA3C95262400C231862509A42C08B57B494C7526240D79FC4E74E9A42C0171E45E7C6526240F2214D614A9A42C0760F75C4C6526240165A8C70499A42C094111780C6526240A0015020479A42C0748E4B66C652624090042B98429A42C09AFFFC63C6526240858ABB8B419A42C0E80F7283C6526240B0B9B42B3E9A42C0440AAF6EC6526240DBF6E2303D9A42C08641F4FFC5526240CC2D0840379A42C05C210780C5526240C80CAF7F329A42C03C5CBC69C452624017CAD303309A42C0B6FC76C8C3526240E24680892E9A42C0E98E0FC4C3526240E24680892E9A42C0010200000019000000E98E0FC4C3526240E24680892E9A42C0E68013C0C35262407D0B46802E9A42C09CE0F65FC25262407D0B46802E9A42C0E40522D5C152624094D74AE82E9A42C027439FD9BF526240CF5F8D58309A42C073DE5A81BC52624034AF343A319A42C0DC195C29BA5262405EEC623F309A42C0
 F54A5986B8526240DD47C9062D9A42C0D277126CB7526240D4415E0F269A42C0BA698E07B6526240389CF9D51C9A42C05C397B67B45262402C6FFDAA129A42C0B1E485CFB1526240D276A796089A42C05B7C0A80B1526240B5914660079A42C0FC4BF7DFAF526240FC4E3860FC9942C09B3BFA5FAE5262405F2DD21FF59942C012E85D06AD52624062A70EA8ED9942C066E95443AC52624053060E68E99942C0F913950DAB5262402A28FB9DDC9942C00A7F8637AB52624003EF3F8DD69942C0DBFAE93FAB5262407B25DA9FD59942C0FE74A84BAB5262407B6D910FD59942C08786C5A8AB526240D035DDFCD09942C09F69D322AC5262404A1CC3ADCC9942C09ED96443AD52624018B14F00C59942C01E8BE95DAE526240F4112D30BE9942C00102000000030000001E8BE95DAE526240F4112D30BE9942C04A4B9B60AE526240C2DF8A1FBE9942C00CDD9867AE526240D44A0AF5BD9942C00102000000040000000CDD9867AE526240D44A0AF5BD9942C0985B1080AE526240343F4860BD9942C0228CFA7FB052624086EC7200B39942C096804EF7B0526240DB807456B09942C001020000000800000096804EF7B0526240DB807456B09942C02ED85768B1526240D66D50FBAD9942C01FA6D82CB252624033750DE9A69942C0992CEE3FB2526240C3499A3FA69942C044DD072
 0B55262407B6649809A9942C044DD0720B5526240BE0864C0A39942C01D9D0480B45262406F0C01C0B19942C01D9D0480B452624013DD6921B79942C001020000000A0000001D9D0480B452624013DD6921B79942C0003F3E7CB452624038807EDFBF9942C0DFCFDF3AB55262405DA79196CA9942C0E1390087B5526240792A9611CD9942C0A8CDEE7FB65262407B25DA9FD59942C057D7570DB8526240D6B3D606DD9942C04BCD7921B85262407102D369DD9942C01A12F758BA5262401A2E1796E49942C064C68091BC5262407D299721E99942C0E324EAE8BE52624054FD7669EB9942C0010200000003000000E324EAE8BE52624054FD7669EB9942C08C5363F8BE526240997E8978EB9942C02A8F5209BF52624037BA7889EB9942C00102000000050000002A8F5209BF52624037BA7889EB9942C003E0E9DFBF526240100B1060EC9942C0E960FD9FC3526240B5FB5580EF9942C094111780C652624067FCB1FFF09942C0D57036C2C7526240A85BD141F29942C001020000000400000073FB9B06FB5262400567953E199D42C06A72E778FB5262406CC8E479159D42C0169F0260FC52624075A334400E9D42C0169F0260FC526240E90E62670A9D42C0010200000006000000169F0260FC526240E90E62670A9D42C0525B8F67FC5262404FB2309F079D42C0383C73C5FB
 5262400633011A009D42C071AB2006FA526240AA76F28EF89C42C0E5A210B7F9526240E08FEC5BF79C42C09BA010B7F9526240B886EC5BF79C42C00102000000020000009BA010B7F9526240B886EC5BF79C42C07DD236B6F95262403BAB8558F79C42C00102000000180000007DD236B6F95262403BAB8558F79C42C0F54DF5BFF7526240B5FB5580EF9C42C0CF9AC4C5F65262409FC5F76AEC9C42C01AB7E22CF6526240CFC59569EA9C42C0C8DB0022F3526240840CE4D9E59C42C0E4C40DAEEF52624081334289E09C42C0A026440AEF526240F8C500E4DF9C42C0287BF07FEC5262405F97E13FDD9C42C0121A1C80E852624053A7A89FDC9C42C0CD4AA47EE8526240E8667FA0DC9C42C09CDB847BE5526240B4A1AC29DA9C42C0DCAEE133E3526240993E856DD59C42C06BCB25FAE15262401EB97F76D19C42C03953324AE1526240B2B15C80C79C42C0E5F27A8BE2526240D08547D1B99C42C07F52488DE4526240AA80D657B29C42C0245D33F9E65262408C721F6FA89C42C011178046E9526240B4249B06A09C42C051F70148ED526240186BC9F4959C42C0DD297865F2526240D4D6E3198F9C42C0819B2045F8526240B95917128B9C42C0B9B59613FE52624090566B17899C42C0EE4FF39FFF52624001124DA0889C42C06AE186C20253624061FA6E54899C42C0010
 2000000030000006AE186C20253624061FA6E54899C42C0780778D20253624054F60258899C42C07BB540D70253624075632B59899C42C00102000000050000007BB540D70253624075632B59899C42C0FDED57A604536240D1FD41C9899C42C069CB14CE095362403605323B8B9C42C01A530B800C536240D6E253008C9C42C0D45A0BC90D5362405DD659A48C9C42C0010200000003000000D45A0BC90D5362405DD659A48C9C42C0938ECDE90D536240D6C8AEB48C9C42C0C6FCE9F90D536240D4AFF2BC8C9C42C001020000000F000000C6FCE9F90D536240D4AFF2BC8C9C42C0DFEB5A31125362405D30B8E68E9C42C0102D681015536240F1A19F04919C42C028CA4A38195362406B216D88969C42C0D19D16721B536240CF3CCAD2989C42C03B037EE81D5362403ABF72CE999C42C0DDFF6C5020536240ED69E278999C42C09E5DBEF5215362404DEE1C6F979C42C0CA856F0624536240E0505326909C42C0B700D99024536240373FB445889C42C023168CA5235362405B40683D7C9C42C05F62878C22536240C5B99745729C42C093A1CFEC1F536240F4763A46689C42C08284CDA51D5362404BBB873A629C42C0D7E7209E1B5362406D0CF093599C42C0010200000013000000D7E7209E1B5362406D0CF093599C42C0E61604A01B5362407916CE7F599C42C05EC603
 8019536240B45318004F9C42C0F9D51C20185362402A615C60459C42C01DC6A4BF1753624025F213BD429C42C089658E4017536240AAF644323F9C42C0242A54371753624010F0FF3E3E9C42C0C4C5F6FF16536240D71D41E0379C42C08C2E6F0E17536240270FB0FB339C42C02721472917536240B8AD2D3C2F9C42C079D1B249195362404BE88942269C42C0AD93E9861C5362403868AF3E1E9C42C073C57BC41E536240EE2AFFB5179C42C0405E59B31F53624019E42EC2149C42C05AA8EB3F21536240D4D347E00F9C42C0B5F8140023536240E822CF3F0B9C42C01518570123536240412619390B9C42C059E7CE02235362405968E7340B9C42C035909A532353624032FB0262099C42C001020000000300000035909A532353624032FB0262099C42C0473426692353624078CF81E5089C42C05770EB7223536240C4AE8EAD089C42C00102000000040000005770EB7223536240C4AE8EAD089C42C01AE9FB5F24536240D4D00660039C42C055B9F53F25536240FC4E3860FC9B42C0A2FEEF73255362406D4F8D6AF89B42C0010200000003000000A2FEEF73255362406D4F8D6AF89B42C046CF2D74255362402DCBD765F89B42C0547336742553624095F14B65F89B42C0010200000003000000547336742553624095F14B65F89B42C0F551FCCE2553624095A828A8F29
 B42C06903899225536240DE36F4D0EA9B42C00102000000030000006903899225536240DE36F4D0EA9B42C034C0609225536240D554BBCBEA9B42C028C8389225536240B5B2DCC4EA9B42C001020000000300000028C8389225536240B5B2DCC4EA9B42C06A49EC7F255362400CEAB69FE79B42C06A49EC7F25536240B5824B6CE39B42C00102000000080000006A49EC7F25536240B5824B6CE39B42C031B2648E25536240F60604DFD99B42C0E3B55C472653624031D4BC3ECE9B42C0B76DCE7726536240B5EC5A8CCB9B42C0B3E908E026536240CAB1AB7FC69B42C01FFC1FBB26536240988EEF41BE9B42C04864C4AA26536240B949B148B89B42C033824391265362403ADE5C8CB29B42C001020000000300000033824391265362403ADE5C8CB29B42C00D912E9126536240CE28A787B29B42C014C1199126536240AA35997FB29B42C001020000000400000014C1199126536240AA35997FB29B42C0A239FC7F26536240013BEDDFAB9B42C0676902A025536240BE0864C0A39B42C041DD7F432353624027003EB19D9B42C001020000000300000041DD7F432353624027003EB19D9B42C09DFB613A235362407A5AD9999D9B42C0A642BB3823536240F2B483959D9B42C0010200000006000000A642BB3823536240F2B483959D9B42C08C344CC822536240EB2F606E9C
 9B42C0A72E2AF320536240F98D65B0989B42C00A48FB1F205362408F256200979B42C07F1711201E53624021E4BCFF8F9B42C02B15B7931D536240D293414A899B42C00102000000030000002B15B7931D536240D293414A899B42C0EB9FF18E1D536240549ADE0F899B42C0C1BA9F8C1D536240FA9BD0F2889B42C0010200000019000000C1BA9F8C1D536240FA9BD0F2889B42C03B061A221D5362409382B8BC839B42C01AF67B621D5362400F817E3A799B42C00BF5AA841D536240224ECC1F789B42C094A707601E53624078ACBE5F719B42C05A07ACC120536240AD122C0E679B42C0D7C633C321536240CDF5C7C5629B42C04AE9995E2253624058EB7A585E9B42C0F0C80EE0235362400B45BA9F539B42C052D90B6025536240CFE11060479B42C069183E2226536240F2D654713E9B42C0CEC6A58526536240EE3F321D3A9B42C0E3288AA12653624026378AAC359B42C0B3E908E0265362407D9BB45F2D9B42C05DC6A8C62653624045813E91279B42C016D22BAF2653624032EDF6B41E9B42C0EC246C8926536240C0E61C3C139B42C0A239FC7F26536240A583F57F0E9B42C08D92FC2D26536240DC60A8C30A9B42C0C9C452C92553624086E5CFB7059B42C0A625564623536240476A46ABFF9A42C0CD960744235362401EEB98A9FF9A42C0CA880B4023536240B9A
 F5EA0FF9A42C0E407F87F1F53624066FFF27FFD9A42C0CDEABBE31D536240C40DCFDAFC9A42C0010200000003000000CDEABBE31D536240C40DCFDAFC9A42C0EE0912DB1D5362408A9356D7FC9A42C0623B08DB1D5362403B7A52D7FC9A42C0010200000024000000623B08DB1D5362403B7A52D7FC9A42C0B75384E519536240F0A6B62FFB9A42C0EF33D362155362409320B7BAF79A42C0BB46263B1153624019A1E936F29A42C00D4059E70E536240D26AED22F19A42C005C314400C536240FC4BF7DFEF9A42C0C286A7570A536240FDDB65BFEE9A42C061DBA2CC06536240DAAF9696EC9A42C058C9C7EE025362403B2064B4E99A42C0F4F8BD4DFF5262400D38A682E59A42C051F932ACFD526240DBB28D89DE9A42C01A6B7F67FB52624035C703DBD29A42C02D697BAAF9526240E269430FC69A42C036AD1402F95262400E153EB6C09A42C02D3E05C0F85262409EEF0280BE9A42C007FE0120F8526240311BAE1FAC9A42C0915D0E60F65262406C58F89FA19A42C0D11CFE3FF352624005C655C0989A42C0EC55BF2DF35262403B21CF89989A42C04F47B6A9F0526240E569AFF4909A42C0773469AEEE526240AD557199899A42C0B0164449ED52624034C86EB0819A42C0106734A8EC526240A5D0C31A789A42C09348EC24EC526240149161156F9A42C01CE7DB27EC52
 6240ADB0CF52689A42C0E643ABEEEC5262402E6695E35F9A42C0D3A46F2DEE526240FD42D9A5579A42C08297CFA8EF526240D28668194E9A42C084E4AE6FF1526240F581E49D439A42C0D4B7CCE9F25262401BB226BB3E9A42C00CEDF71FF4526240D0DECFDF3A9A42C0AC826275F552624038D6C56D349A42C0C908032AF75262403693CA6F2C9A42C080C6962FF95262408625D4C21B9A42C026E88AADFB526240729648580A9A42C0A05FB9A5FC526240FCFCF6B4029A42C0010200000003000000A05FB9A5FC526240FCFCF6B4029A42C007CC43A6FC5262405268B4B0029A42C0A36B13A8FC526240F8A11DA3029A42C0010200000003000000A36B13A8FC526240F8A11DA3029A42C0554FE61FFD526240C52F0620FF9942C0D41F065FFD52624090508E5DFD9942C0010200000011000000D41F065FFD52624090508E5DFD9942C0C2C8810DFE526240C847E6ECF89942C01B6A6F4BFF5262404EB4AB90F29942C0C4FBBB880053624062314514EE9942C0387A466C01536240BFD6A546E89942C0F6B8CA6E015362407A0E76D4E29942C0F47F5880005362404CF8A57EDE9942C06616FC91FD526240944E7F51DD9942C0274D83A2F9526240C8DF0731E19942C0704D70A0F6526240FC427EECE49942C06A1D0BC0F5526240AEB9A3FFE59942C06B65C22FF5526240307
 E1AF7E69942C0D1EEEB1BF35262401DBF0177EA9942C046A7F809F15262407A4501ECED9942C0F96B0D00F0526240CD6B36A0EF9942C0A6FD20DCEE5262401FDA22C4F09942C0308A808AEE5262409DD76815F19942C0010200000002000000308A808AEE5262409DD76815F19942C03AB9027DEE526240F7B4D722F19942C001020000000A0000003AB9027DEE526240F7B4D722F19942C0008E3D7BEE526240FBE99A24F19942C00F4D8F5CED526240BF9D9F3DF29942C0D4207134EC52624037D43950F19942C0BA63B14DEA5262400E5BC4C1EF9942C04273428DE7526240EC489AE4EC9942C04B862D87E75262403F47F5E7EC9942C0DA290C80E7526240048B68E0EC9942C0676902A0E55262403F5B62C0ED9942C09B6053AFE3526240964FD5C0F19942C00102000000030000009B6053AFE3526240964FD5C0F19942C0417452A9E3526240D75537CDF19942C0927F37A7E3526240AC7128D1F19942C0010200000007000000927F37A7E3526240AC7128D1F19942C02C29779FE3526240A2CCABDFF19942C07A281B20E2526240DD9CA5BFF29942C02DA814E0E052624072ECEA9FF19942C0E0247266E0526240CBD58F4DF29942C043B40C27DF5262409574DE10F49942C09737634FDB5262408DBADC19F79942C00102000000030000009737634FDB5262408DBADC
 19F79942C0D75DEA31DB5262403A652431F79942C07D879512DB526240FAED9149F79942C00102000000080000007D879512DB526240FAED9149F79942C0388600E0D8526240277E3100F99942C0ACC8433AD752624027367A90F99942C0B771D586D4526240B504CF73FA9942C011D77B3BD3526240A3C7EF6DFA9942C08B040940D2526240C10EAD5FFA9942C05803EF3FCD526240277E3100F99942C046820420C9526240186D9F9FF39942C001020000000200000046820420C9526240186D9F9FF39942C0D57036C2C7526240A85BD141F29942C0010200000005000000D57036C2C7526240A85BD141F29942C071AE6186C6526240907B5F01F19942C0251D8AA7C3526240FCC1C073EF9942C009FCE1E7BF526240398ABD61EC9942C02A8F5209BF52624037BA7889EB9942C00102000000030000002A8F5209BF52624037BA7889EB9942C080327CFABE52624058BD0D7BEB9942C0E324EAE8BE52624054FD7669EB9942C001020000000A000000E324EAE8BE52624054FD7669EB9942C02B2FF99FBC52624053AAE91FE99942C08C6E1860BA526240142928A0E49942C007FE0120B85262407707C25FDD9942C08D77EC0CB852624018755204DD9942C0EAA5738FB6526240875DCAAFD59942C09149A187B5526240F6A79E16CD9942C05C4DE83FB5526240C2E2CB9FC
 A9942C01D9D0480B4526240CD3F55E0BF9942C01D9D0480B452624013DD6921B79942C001020000000F0000001D9D0480B452624013DD6921B79942C0F72B5382B4526240690712CAB19942C091D6732DB5526240824CD7B8A39942C07610E099B55262404533AA679C9942C0F66DD27EB552624096027745959942C05F5BE443B5526240265305A3929942C0BB1006F9B4526240B583B641929942C01853FA53B45262403EDD8A0E929942C0BCB77DEAB35262405B66C7FC929942C07702AB34B35262402A60F18A969942C0B0822914B3526240B678C25C9C9942C0A54DD53DB25262407B832F4CA69942C0B365AF2DB252624063F9A9E0A69942C05E5CF45FB152624053EB5800AE9942C096804EF7B0526240DB807456B09942C001020000000400000096804EF7B0526240DB807456B09942C02891E975B05262405768D608B39942C0A68AF381AE526240E645DC52BD9942C00CDD9867AE526240D44A0AF5BD9942C00102000000030000000CDD9867AE526240D44A0AF5BD9942C04138B066AE5262402DF2A1FABD9942C01E8BE95DAE526240F4112D30BE9942C001020000001B0000001E8BE95DAE526240F4112D30BE9942C04BDB0940AD52624018B14F00C59942C0FB7A1920AC526240FC2257A0CC9942C0ECAAF69FAB52624024343800D19942C034153D4BAB5262
 40632BC313D59942C0016C9B3DAB526240335F6FACD59942C0F02EBC37AB52624074345882D69942C0C66AF3FFAA52624053A7A89FDC9942C013EBF93FAC526240828AAA5FE99942C01B125212AD526240E5852AEBED9942C01EBEF15AAE5262406532C115F59942C0ED1C14DEAF526240DE077B6EFC9942C081EDBB7DB15262400E959059079A42C0CC1D47BDB1526240FC993050089A42C0EE04FBAFB35262404B4C61EF0F9A42C041A49531B4526240080FE4EA119A42C0217DEE5FB45262409DB415A0129A42C07FAD0100B652624032970AE01C9A42C0E39DE85FB75262405DC94400269A42C018AE0E80B8526240364B13002D9A42C0922EEC1FBA526240F3AB3940309A42C02E0FE37FBC52624046EC1340319A42C013BF1880BC52624046EC1340319A42C003E0E9DFBF5262400B1C1A60309A42C0A344A6D7C15262406B589DE62E9A42C09CE0F65FC2526240D009A1832E9A42C0E98E0FC4C3526240E24680892E9A42C0010200000053000000E98E0FC4C3526240E24680892E9A42C09B36E334C45262405F06088B2F9A42C0D11B936AC4526240D5085806309A42C04AE4277AC55262401C0B0A83329A42C05FB939F0C552624066F2CD36379A42C05F5A796EC65262401CB85E2E3D9A42C094111780C65262408D3FF61F3E9A42C097F10060C65262406110FD7F4
 19A42C0748E4B66C6526240A2410A9E429A42C053399270C652624082BA922E479A42C0ACAF09C4C6526240C25B316D499A42C0C111EEDFC6526240C8A29F5F4A9A42C0E751F17FC75262409CE337E04E9A42C0F901FEDFC752624026D6F37F589A42C0DEB133E0C7526240BB95CA80589A42C0E1911DC0C75262407D51CC8B5D9A42C0B8150CF8C65262404184132C699A42C065BE28E6C552624072A7CF69719A42C095174FF3C4526240F211E797779A42C01661D4FFC3526240959460167F9A42C010035DFBC2526240C4BF19468B9A42C058288870C2526240FC71FBE5939A42C085E6DFD3C152624053B4CDE8A29A42C0C1D31A39C15262408946D2C9AD9A42C0BB44F5D6C0526240A8120AB6B69A42C0A9F00CBFC05262407E8D2441B89A42C053CDACA5C0526240593B40E6B99A42C032D7B331C052624068EA758BC09A42C0CDE33098BF5262409FE40E9BC89A42C0B323D577BE526240665710B9CF9A42C08D11E4FBBD526240D590B8C7D29A42C066FFF27FBD5262407B25DA9FD59A42C0E057F66EBD526240B094C041D69A42C07FA31D37BC526240CABD65F3DD9A42C0D3A7B0ADBA526240D2F1E20EE59A42C0E089B4E8B85262406AE67FA8EA9A42C03C4272D7B752624078F1D995F19A42C0C6CCF401B7526240F783CB74F99A42C01FCDA2C1B7526240D57A1A
 8B019B42C0E0A0BDFAB85262405070B1A2069B42C0001E51A1BA5262405890C1E50C9B42C0ED7E15E0BB526240B524F6BF129B42C0169F0260BC526240C4C5F6FF169B42C040BFEFDFBC5262400447B87F1B9B42C0A1CFEC5FBE52624013584AE0209B42C072906B9EBE5262406BB180AE229B42C0A7A32DF8BE5262403AC54F88259B42C006F1811DBF5262403B4ACA822E9B42C0C52F0620BF526240A06B5F402F9B42C0ADED3724BF526240E7A15B54309B42C00F327F3BBF5262407286E28E379B42C0FA87E3AFBF526240B177352F3D9B42C0EB6F09C0BF52624075CF15003E9B42C011B00C60C0526240EF906280449B42C049A01C60C15262400ED363004D9B42C05E3013A0C152624035E44460519B42C05E3013A0C1526240B4E6C75F5A9B42C03DF262BCC1526240ACE9D55B5E9B42C0C0A26CDBC1526240B56B425A639B42C073C009E0C15262402A3410CB669B42C073C009E0C1526240CF7A42C06B9B42C049A01C60C1526240849CF7FF719B42C03BD0F9DFC05262402D3E05C0789B42C01490F63FC05262405900AEBF809B42C000000000C05262402D414640859B42C003E0E9DFBF5262408F2221808A9B42C000000000C05262402DD4F59F909B42C011B00C60C052624015F7C4DF9B9B42C0CDF79D70C0526240AF9BAD179E9B42C0A994E876C0526240F51
 32928A09B42C0B2A7D370C052624072BF4351A09B42C0DC9FE63FBF5262401DC9E53FA49B42C05DE6CF12BF526240A04BDD3AA49B42C05491651CBE52624064613E0FA49B42C00417D0B0BD5262400573AA6BA39B42C03AFF1B20BD526240A728F27FA29B42C0DEAEF25FBB52624040964FA0999B42C007FE0120B8526240E613C31F8F9B42C07EECE4C2B752624087F71C588E9B42C02B39DD68B652624012B985538B9B42C0D4FCE71FB352624055E2957F889B42C0EA9BEA7FAF526240FEF0F3DF839B42C0593F0B9EAD5262409DE4954F809B42C0
+ </op>
+</test>
+</case>
+
+
+</run>



More information about the geos-commits mailing list