PEL: Flatten PEL from objects

Now that the Generic section object has been introduced so there are
objects for every section, a flatten can be done by flattening every
object inside the PEL and the previous workaround to save the original
raw data can be removed.

This also adds a test case that uses a real PEL from a previous
generation of systems to flatten to give some better coverage than just
using hand coded PEL sections.

A side affect of this is that the PEL constructors that take the raw
data cannot take a const vector of data, as the Stream class that will
be used to read from the vector cannot take a const.  Testcases have
been updated to ensure this data is not modified.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I64ae1d1d4a742c80e14666d6b2a6e1e0efd5fd62
diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index c7df5e8..eb1a368 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -5,6 +5,8 @@
 #include "section_factory.hpp"
 #include "stream.hpp"
 
+#include <phosphor-logging/log.hpp>
+
 namespace openpower
 {
 namespace pels
@@ -23,19 +25,18 @@
     _ph->sectionCount() = 2;
 }
 
-PEL::PEL(const std::vector<uint8_t>& data) : PEL(data, 0)
+PEL::PEL(std::vector<uint8_t>& data) : PEL(data, 0)
 {
 }
 
-PEL::PEL(const std::vector<uint8_t>& data, uint32_t obmcLogID) : _rawPEL(data)
+PEL::PEL(std::vector<uint8_t>& data, uint32_t obmcLogID)
 {
-    _fromStream = true;
-    populateFromRawData(obmcLogID);
+    populateFromRawData(data, obmcLogID);
 }
 
-void PEL::populateFromRawData(uint32_t obmcLogID)
+void PEL::populateFromRawData(std::vector<uint8_t>& data, uint32_t obmcLogID)
 {
-    Stream pelData{_rawPEL};
+    Stream pelData{data};
     _ph = std::make_unique<PrivateHeader>(pelData);
     if (obmcLogID != 0)
     {
@@ -88,28 +89,26 @@
 {
     Stream pelData{pelBuffer};
 
-    _ph->flatten(pelData);
-
-    // If constructed from a PEL stream originally, don't flatten the
-    // rest of the objects until we support every PEL section type.
-    // Still need the PrivateHeader, as we updated fields in it.
-    if (_fromStream)
+    if (!valid())
     {
-        return;
+        using namespace phosphor::logging;
+        log<level::WARNING>("Unflattening an invalid PEL");
     }
 
+    _ph->flatten(pelData);
     _uh->flatten(pelData);
+
+    for (auto& section : _optionalSections)
+    {
+        section->flatten(pelData);
+    }
 }
 
 std::vector<uint8_t> PEL::data()
 {
-    // Until we can recreate a complete PEL from objects, need to just flatten
-    // on top of the original PEL data which we need to keep around for this
-    // reason.  If creating a PEL from scratch, _rawPEL will get filled in with
-    // what we do have.
-
-    flatten(_rawPEL);
-    return _rawPEL;
+    std::vector<uint8_t> pelData;
+    flatten(pelData);
+    return pelData;
 }
 
 } // namespace pels
diff --git a/extensions/openpower-pels/pel.hpp b/extensions/openpower-pels/pel.hpp
index 29a7978..0c35e3e 100644
--- a/extensions/openpower-pels/pel.hpp
+++ b/extensions/openpower-pels/pel.hpp
@@ -32,7 +32,7 @@
  * This class represents all sections with objects.
  *
  * The available constructors are:
- * - PEL(const std::vector<uint8_t>& data) - build this object out of a fully
+ * - PEL(std::vector<uint8_t>& data) - build this object out of a fully
  *   formed flattened PEL.
  *
  * - PEL(const openpower::pels::message::Entry& entry,
@@ -59,9 +59,14 @@
      *
      * Build a PEL from raw data.
      *
+     * Note: Neither this nor the following constructor can take a const vector&
+     * because the Stream class that is used to read from the vector cannot take
+     * a const.  The alternative is to make a copy of the data, but as PELs can
+     * be up to 16KB that is undesireable.
+     *
      * @param[in] data - The PEL data
      */
-    PEL(const std::vector<uint8_t>& data);
+    PEL(std::vector<uint8_t>& data);
 
     /**
      * @brief Constructor
@@ -71,7 +76,7 @@
      * @param[in] data - the PEL data
      * @param[in] obmcLogID - the corresponding OpenBMC event log ID
      */
-    PEL(const std::vector<uint8_t>& data, uint32_t obmcLogID);
+    PEL(std::vector<uint8_t>& data, uint32_t obmcLogID);
 
     /**
      * @brief Constructor
@@ -201,10 +206,14 @@
     /**
      * @brief Builds the section objects from a PEL data buffer
      *
+     * Note: The data parameter cannot be const for the same reasons
+     * as listed in the constructor.
+     *
+     * @param[in] data - The PEL data
      * @param[in] obmcLogID - The OpenBMC event log ID to use for that
      *                        field in the Private Header.
      */
-    void populateFromRawData(uint32_t obmcLogID);
+    void populateFromRawData(std::vector<uint8_t>& data, uint32_t obmcLogID);
 
     /**
      * @brief Flattens the PEL objects into the buffer
@@ -224,20 +233,6 @@
     std::unique_ptr<UserHeader> _uh;
 
     /**
-     * @brief The PEL itself.
-     *
-     * This should be able to be removed when this class is able to
-     * serialize/deserialize a complete PEL from its objects, as
-     * then there will be no need to keep around the data anymore.
-     */
-    std::vector<uint8_t> _rawPEL;
-
-    /**
-     * @brief If the PEL came from a flattened data stream.
-     */
-    bool _fromStream = false;
-
-    /**
      * @brief Holds all sections by the PH and UH.
      */
     std::vector<std::unique_ptr<Section>> _optionalSections;
diff --git a/extensions/openpower-pels/repository.cpp b/extensions/openpower-pels/repository.cpp
index 0810dd4..b369706 100644
--- a/extensions/openpower-pels/repository.cpp
+++ b/extensions/openpower-pels/repository.cpp
@@ -40,7 +40,7 @@
                                       std::istreambuf_iterator<char>()};
             file.close();
 
-            PEL pel(std::move(data));
+            PEL pel{data};
             if (pel.valid())
             {
                 using pelID = LogID::Pel;
diff --git a/test/openpower-pels/Makefile.include b/test/openpower-pels/Makefile.include
index eacc6ae..f2e3126 100644
--- a/test/openpower-pels/Makefile.include
+++ b/test/openpower-pels/Makefile.include
@@ -11,6 +11,7 @@
 	pel_values_test \
 	pel_manager_test \
 	private_header_test \
+	real_pel_test \
 	registry_test \
 	repository_test \
 	section_header_test \
@@ -96,6 +97,15 @@
 	$(pel_objects)
 pel_test_LDFLAGS = $(test_ldflags)
 
+real_pel_test_SOURCES = \
+	%reldir%/real_pel_test.cpp %reldir%/paths.cpp %reldir%/pel_utils.cpp
+real_pel_test_CPPFLAGS = $(test_cppflags)
+real_pel_test_CXXFLAGS = $(test_cxxflags)
+real_pel_test_LDADD = \
+	$(test_ldadd) \
+	$(pel_objects)
+real_pel_test_LDFLAGS = $(test_ldflags)
+
 repository_test_SOURCES = \
 	%reldir%/repository_test.cpp %reldir%/paths.cpp %reldir%/pel_utils.cpp
 repository_test_CPPFLAGS = $(test_cppflags)
diff --git a/test/openpower-pels/pel_test.cpp b/test/openpower-pels/pel_test.cpp
index 8c9faae..56e356f 100644
--- a/test/openpower-pels/pel_test.cpp
+++ b/test/openpower-pels/pel_test.cpp
@@ -18,6 +18,7 @@
 TEST_F(PELTest, FlattenTest)
 {
     auto data = pelDataFactory(TestPelType::pelSimple);
+    auto origData = *data;
     auto pel = std::make_unique<PEL>(*data);
 
     // Check a few fields
@@ -29,7 +30,7 @@
 
     // Test that data in == data out
     auto flattenedData = pel->data();
-    ASSERT_EQ(*data, flattenedData);
+    ASSERT_EQ(origData, flattenedData);
 }
 
 TEST_F(PELTest, CommitTimeTest)
@@ -158,6 +159,7 @@
 
     // Increment the section count
     data->at(27) += 2;
+    auto origData = *data;
 
     PEL pel{*data};
 
@@ -183,6 +185,11 @@
 
     EXPECT_TRUE(foundXX);
     EXPECT_TRUE(foundYY);
+
+    // Now flatten and check
+    auto newData = pel.data();
+
+    EXPECT_EQ(origData, newData);
 }
 
 // Test that an invalid section will still get a Generic object
diff --git a/test/openpower-pels/real_pel_test.cpp b/test/openpower-pels/real_pel_test.cpp
new file mode 100644
index 0000000..9561079
--- /dev/null
+++ b/test/openpower-pels/real_pel_test.cpp
@@ -0,0 +1,550 @@
+#include "elog_entry.hpp"
+#include "extensions/openpower-pels/pel.hpp"
+#include "pel_utils.hpp"
+
+#include <filesystem>
+#include <fstream>
+
+#include <gtest/gtest.h>
+
+namespace fs = std::filesystem;
+using namespace openpower::pels;
+
+class PELTest : public CleanLogID
+{
+};
+
+// A PEL from a real system
+const std::vector<uint8_t> realPELData{
+    0x50, 0x48, 0x0,  0x30, 0x1,  0x0,  0xA8, 0x0,  0x20, 0x19, 0x6,  0x14,
+    0x12, 0x0,  0x41, 0x51, 0x20, 0x19, 0x6,  0x14, 0x12, 0x0,  0x41, 0x56,
+    0x45, 0x0,  0x1,  0x14, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x50, 0x1,  0xF,  0xA5, 0x50, 0x1,  0xF,  0xA5,
+    0x55, 0x48, 0x0,  0x18, 0x1,  0x0,  0xF1, 0x0,  0x81, 0x3,  0x0,  0x1,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x60, 0x0,  0x0,  0x1,  0x44, 0x0,
+    0x50, 0x53, 0x0,  0x74, 0x1,  0x1,  0xA8, 0x0,  0x2,  0x1,  0x0,  0x9,
+    0x0,  0x0,  0x0,  0x6C, 0x3,  0x1,  0x0,  0xF0, 0x2C, 0xC6, 0x1B, 0x10,
+    0xC1, 0x39, 0x20, 0x0,  0x40, 0x0,  0x0,  0xFF, 0x10, 0x69, 0x14, 0xD8,
+    0x0,  0x0,  0x0,  0x1,  0x0,  0x0,  0x0,  0x3,  0x0,  0x0,  0x0,  0x0,
+    0x42, 0x31, 0x38, 0x31, 0x41, 0x38, 0x30, 0x45, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC0, 0x0,  0x0,  0x9,
+    0x10, 0x28, 0x48, 0x0,  0x49, 0x44, 0xC,  0x42, 0x46, 0x53, 0x50, 0x53,
+    0x50, 0x30, 0x34, 0x0,  0x10, 0x28, 0x4C, 0x0,  0x49, 0x44, 0xC,  0x42,
+    0x46, 0x53, 0x50, 0x53, 0x50, 0x30, 0x36, 0x0,  0x45, 0x48, 0x0,  0x60,
+    0x1,  0x0,  0x31, 0x0,  0x38, 0x34, 0x30, 0x38, 0x2D, 0x45, 0x38, 0x45,
+    0x31, 0x30, 0x36, 0x37, 0x41, 0x44, 0x56, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x54, 0x56, 0x38, 0x36, 0x30, 0x5F, 0x32, 0x30, 0x37, 0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x62, 0x30, 0x36, 0x31, 0x33, 0x61, 0x5F, 0x31,
+    0x39, 0x32, 0x34, 0x2E, 0x38, 0x36, 0x31, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x14,
+    0x42, 0x31, 0x38, 0x31, 0x41, 0x38, 0x30, 0x45, 0x5F, 0x32, 0x43, 0x43,
+    0x36, 0x31, 0x42, 0x31, 0x30, 0x0,  0x0,  0x0,  0x55, 0x44, 0x0,  0x9C,
+    0x2,  0x4,  0x31, 0x0,  0x0,  0x0,  0xB,  0x53, 0x2F, 0x6F, 0x70, 0x74,
+    0x2F, 0x66, 0x69, 0x70, 0x73, 0x2F, 0x62, 0x69, 0x6E, 0x2F, 0x66, 0x77,
+    0x64, 0x62, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x66, 0x69, 0x70, 0x73,
+    0x38, 0x36, 0x31, 0x2F, 0x62, 0x30, 0x36, 0x31, 0x33, 0x61, 0x5F, 0x31,
+    0x39, 0x32, 0x34, 0x2E, 0x38, 0x36, 0x31, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0x0,  0x0,  0x0,  0x2,
+    0x50, 0x0,  0x0,  0x2,  0x20, 0x0,  0x1,  0xC,  0x0,  0x0,  0x0,  0x9,
+    0x0,  0x4,  0x70, 0xD0, 0x0,  0x0,  0x0,  0x0,  0x4D, 0x54, 0x0,  0x1C,
+    0x1,  0x0,  0x31, 0x0,  0x38, 0x34, 0x30, 0x38, 0x2D, 0x45, 0x38, 0x45,
+    0x31, 0x30, 0x36, 0x37, 0x41, 0x44, 0x56, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x55, 0x44, 0x1,  0xF8, 0x1,  0xC,  0x31, 0x0,  0x1,  0x28, 0x4,  0x42,
+    0x46, 0x57, 0x44, 0x42, 0x45, 0x52, 0x52, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xF0, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x1,  0xF0, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,
+    0x0,  0x0,  0x5,  0x1C, 0x2D, 0x86, 0x75, 0xD0, 0x0,  0x0,  0xC,  0x9B,
+    0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5,
+    0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49,
+    0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54,
+    0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A,
+    0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xE,  0xE3, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x33, 0x1F, 0xEA, 0xE7, 0x12,
+    0x0,  0x0,  0xD,  0x9D, 0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7,
+    0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63,
+    0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42,
+    0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,
+    0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xF,  0xA,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x38,
+    0x26, 0x43, 0xFB, 0x66, 0x0,  0x0,  0xB,  0x7D, 0x0,  0x30, 0x43, 0x4F,
+    0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62,
+    0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,
+    0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F,
+    0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,
+    0x50, 0x1,  0xF,  0xE,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C,
+    0x0,  0x0,  0x5,  0x72, 0x13, 0xB8, 0x3D, 0x1C, 0x0,  0x0,  0x23, 0x33,
+    0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5,
+    0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49,
+    0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54,
+    0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A,
+    0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xF,  0x5D, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x88, 0x20, 0xE1, 0xE0, 0x7,
+    0x0,  0x0,  0xD,  0x82, 0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7,
+    0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63,
+    0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42,
+    0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,
+    0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xF,  0x9B,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x89,
+    0x12, 0xE,  0xFE, 0x6E, 0x0,  0x0,  0xB,  0x69, 0x0,  0x30, 0x43, 0x4F,
+    0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62,
+    0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,
+    0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F,
+    0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,
+    0x50, 0x1,  0xF,  0xA4, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C,
+    0x55, 0x44, 0x0,  0x40, 0x1,  0x1,  0xA8, 0x0,  0x6E, 0x6F, 0x20, 0x73,
+    0x75, 0x63, 0x68, 0x20, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x3A, 0x20, 0x63,
+    0x62, 0x6C, 0x76, 0x5F, 0x63, 0x61, 0x62, 0x6C, 0x65, 0x5F, 0x63, 0x6F,
+    0x6E, 0x6E, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x5F, 0x73, 0x74, 0x61,
+    0x74, 0x75, 0x73, 0x5F, 0x70, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x5F, 0x76,
+    0x69, 0x65, 0x77, 0x0,  0x55, 0x44, 0x1,  0xE8, 0x1,  0xC,  0x31, 0x0,
+    0x1,  0x28, 0x4,  0x42, 0x46, 0x57, 0x44, 0x42, 0x53, 0x52, 0x56, 0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xE0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xE0, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0xB,  0x0,  0x0,  0x5,  0x89, 0x11, 0x9B, 0xBA, 0x9,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x18, 0x43, 0x4F, 0x80, 0x10, 0xFA, 0x28,
+    0x0,  0x0,  0xC,  0xFD, 0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54,
+    0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,  0xDB, 0xFB, 0xCB, 0x98,
+    0x0,  0x1,  0xD4, 0xC0, 0x0,  0x0,  0x0,  0x34, 0x0,  0x0,  0x5,  0x89,
+    0x12, 0x4,  0x1A, 0xF1, 0x0,  0x0,  0x23, 0x88, 0x0,  0x18, 0x43, 0x4F,
+    0xCB, 0x1C, 0xBA, 0x66, 0x0,  0x0,  0x1F, 0x6D, 0x63, 0x68, 0x61, 0x6E,
+    0x67, 0x65, 0x55, 0x73, 0x65, 0x43, 0x6E, 0x74, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0xC,  0xDB, 0xFB, 0xCB, 0x98, 0x0,  0x0,  0x0,  0x34,
+    0x0,  0x0,  0x5,  0x89, 0x12, 0x36, 0x78, 0xA9, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x0,  0x43, 0x4F, 0xCB, 0x12, 0xB6, 0x5D, 0x0,  0x0,  0x9,  0xF2,
+    0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89, 0x12, 0x36, 0xB8, 0x93,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x10, 0x43, 0x4F, 0x89, 0x7D, 0x0,  0x8C,
+    0x0,  0x0,  0x23, 0x5D, 0x73, 0x65, 0x72, 0x76, 0x44, 0x65, 0x74, 0x61,
+    0x63, 0x68, 0x0,  0x0,  0xDB, 0xFB, 0xCB, 0x98, 0x0,  0x0,  0x0,  0x2C,
+    0x0,  0x0,  0x5,  0x89, 0x12, 0x36, 0xD2, 0x7A, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x0,  0x43, 0x4F, 0xBD, 0xF0, 0x6E, 0xE3, 0x0,  0x0,  0x9,  0xF4,
+    0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89, 0x12, 0xAA, 0x51, 0x96,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x0,  0x43, 0x4F, 0x8F, 0x6A, 0x83, 0x3,
+    0x0,  0x0,  0x9,  0xA9, 0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89,
+    0x12, 0xAE, 0x7B, 0x85, 0x0,  0x0,  0x23, 0x88, 0x0,  0x10, 0x43, 0x4F,
+    0xF3, 0x35, 0x3F, 0x8D, 0x0,  0x0,  0x22, 0x35, 0x73, 0x65, 0x72, 0x76,
+    0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x0,  0x0,  0x9D, 0x86, 0xE6, 0xD3,
+    0x0,  0x0,  0x0,  0x2C, 0x0,  0x0,  0x5,  0x89, 0x13, 0xA5, 0x23, 0xFA,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x0,  0x43, 0x4F, 0xFC, 0x5A, 0x7F, 0x97,
+    0x0,  0x0,  0x9,  0xB3, 0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89,
+    0x14, 0x5B, 0x57, 0xCE, 0x0,  0x0,  0x23, 0x88, 0x0,  0x0,  0x43, 0x4F,
+    0x4,  0x88, 0x89, 0x7B, 0x0,  0x0,  0x9,  0x3B, 0x0,  0x0,  0x0,  0x1C,
+    0x0,  0x0,  0x5,  0x89, 0x14, 0x5F, 0xCC, 0x54, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x50, 0x43, 0x4F, 0x94, 0xA2, 0x26, 0x7C, 0x0,  0x0,  0x14, 0xE1,
+    0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x6D, 0x74, 0x0,
+    0x0,  0x0,  0x0,  0x1,  0x6E, 0x6F, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20,
+    0x74, 0x61, 0x62, 0x6C, 0x65, 0x3A, 0x20, 0x63, 0x62, 0x6C, 0x76, 0x5F,
+    0x63, 0x61, 0x62, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63,
+    0x74, 0x69, 0x6F, 0x6E, 0x5F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F,
+    0x70, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x5F, 0x76, 0x69, 0x65, 0x77, 0x0,
+    0x10, 0x69, 0x14, 0xD8, 0x0,  0x0,  0x0,  0x3,  0x0,  0x0,  0x0,  0x6C,
+    0x55, 0x44, 0x3,  0xC0, 0x1,  0xC,  0x31, 0x0,  0x1,  0x28, 0x4,  0x42,
+    0x46, 0x57, 0x44, 0x42, 0x53, 0x51, 0x4C, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x3,  0xB8, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x3,  0xB8, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0xB,
+    0x0,  0x0,  0x5,  0x89, 0x5,  0xFC, 0x1E, 0x6C, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x40, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4, 0x0,  0x0,  0x21, 0x6,
+    0x14, 0x9,  0xC2, 0x11, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x2A,
+    0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x79, 0x73, 0x2E, 0x70, 0x6F,
+    0x6C, 0x69, 0x63, 0x79, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E,
+    0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x27, 0x70, 0x6F, 0x77, 0x65, 0x72,
+    0x2D, 0x64, 0x65, 0x66, 0x2D, 0x66, 0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D,
+    0x65, 0x73, 0x27, 0x0,  0x0,  0x0,  0x0,  0x5C, 0x0,  0x0,  0x5,  0x89,
+    0x6,  0xB1, 0x42, 0x3B, 0x0,  0x0,  0x23, 0x88, 0x0,  0x40, 0x43, 0x4F,
+    0x92, 0x41, 0x1B, 0xD4, 0x0,  0x0,  0x21, 0x6,  0x14, 0x9,  0xC2, 0x11,
+    0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x2A, 0x20, 0x66, 0x72, 0x6F,
+    0x6D, 0x20, 0x73, 0x79, 0x73, 0x2E, 0x70, 0x6F, 0x6C, 0x69, 0x63, 0x79,
+    0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x20,
+    0x3D, 0x20, 0x27, 0x70, 0x6F, 0x77, 0x65, 0x72, 0x2D, 0x64, 0x65, 0x66,
+    0x2D, 0x66, 0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x27, 0x0,
+    0x0,  0x0,  0x0,  0x5C, 0x0,  0x0,  0x5,  0x89, 0x7,  0x14, 0xD2, 0x68,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x40, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x14, 0x9,  0xC2, 0x11, 0x73, 0x65, 0x6C, 0x65,
+    0x63, 0x74, 0x20, 0x2A, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x79,
+    0x73, 0x2E, 0x70, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x20, 0x77, 0x68, 0x65,
+    0x72, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x27, 0x70,
+    0x6F, 0x77, 0x65, 0x72, 0x2D, 0x64, 0x65, 0x66, 0x2D, 0x66, 0x69, 0x6C,
+    0x65, 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x27, 0x0,  0x0,  0x0,  0x0,  0x5C,
+    0x0,  0x0,  0x5,  0x89, 0x7,  0x9A, 0x9D, 0x6F, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x40, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4, 0x0,  0x0,  0x21, 0x6,
+    0x14, 0x9,  0xC2, 0x11, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x2A,
+    0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x79, 0x73, 0x2E, 0x70, 0x6F,
+    0x6C, 0x69, 0x63, 0x79, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E,
+    0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x27, 0x70, 0x6F, 0x77, 0x65, 0x72,
+    0x2D, 0x64, 0x65, 0x66, 0x2D, 0x66, 0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D,
+    0x65, 0x73, 0x27, 0x0,  0x0,  0x0,  0x0,  0x5C, 0x0,  0x0,  0x5,  0x89,
+    0x7,  0xD4, 0xF8, 0x2D, 0x0,  0x0,  0x23, 0x88, 0x0,  0x40, 0x43, 0x4F,
+    0x92, 0x41, 0x1B, 0xD4, 0x0,  0x0,  0x21, 0x6,  0x14, 0x9,  0xC2, 0x11,
+    0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x2A, 0x20, 0x66, 0x72, 0x6F,
+    0x6D, 0x20, 0x73, 0x79, 0x73, 0x2E, 0x70, 0x6F, 0x6C, 0x69, 0x63, 0x79,
+    0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x20,
+    0x3D, 0x20, 0x27, 0x70, 0x6F, 0x77, 0x65, 0x72, 0x2D, 0x64, 0x65, 0x66,
+    0x2D, 0x66, 0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x27, 0x0,
+    0x0,  0x0,  0x0,  0x5C, 0x0,  0x0,  0x5,  0x89, 0x12, 0xB4, 0xBC, 0xA6,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x38, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x41, 0x54, 0x54, 0x41,
+    0x43, 0x48, 0x20, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x20,
+    0x27, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x70, 0x31, 0x2F, 0x66, 0x77, 0x73,
+    0x6D, 0x2F, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x73, 0x79, 0x73,
+    0x27, 0x20, 0x41, 0x53, 0x20, 0x73, 0x79, 0x73, 0x3B, 0xA,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x54, 0x0,  0x0,  0x5,  0x89, 0x12, 0xBC, 0xD8, 0x8A,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x38, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x41, 0x54, 0x54, 0x41,
+    0x43, 0x48, 0x20, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x20,
+    0x27, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x70, 0x30, 0x2F, 0x66, 0x77, 0x73,
+    0x6D, 0x2F, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x70, 0x30, 0x27,
+    0x20, 0x41, 0x53, 0x20, 0x70, 0x30, 0x3B, 0xA,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x54, 0x0,  0x0,  0x5,  0x89, 0x13, 0x97, 0x51, 0x64,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x38, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x41, 0x54, 0x54, 0x41,
+    0x43, 0x48, 0x20, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x20,
+    0x27, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x70, 0x31, 0x2F, 0x66, 0x77, 0x73,
+    0x6D, 0x2F, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x70, 0x31, 0x27,
+    0x20, 0x41, 0x53, 0x20, 0x70, 0x31, 0x3B, 0xA,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x54, 0x0,  0x0,  0x5,  0x89, 0x13, 0xA2, 0x85, 0x51,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x38, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x41, 0x54, 0x54, 0x41,
+    0x43, 0x48, 0x20, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x20,
+    0x27, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x70, 0x33, 0x2F, 0x66, 0x77, 0x73,
+    0x6D, 0x2F, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x70, 0x33, 0x27,
+    0x20, 0x41, 0x53, 0x20, 0x70, 0x33, 0x3B, 0xA,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x54, 0x0,  0x0,  0x5,  0x89, 0x14, 0x5B, 0x84, 0x7B,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x58, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x73, 0x65, 0x6C, 0x65,
+    0x63, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65, 0x69, 0x64,
+    0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x63, 0x62, 0x6C, 0x76, 0x5F, 0x63,
+    0x61, 0x62, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74,
+    0x69, 0x6F, 0x6E, 0x5F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F, 0x70,
+    0x75, 0x62, 0x6C, 0x69, 0x63, 0x5F, 0x76, 0x69, 0x65, 0x77, 0x20, 0x77,
+    0x68, 0x65, 0x72, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65,
+    0x69, 0x64, 0x20, 0x21, 0x3D, 0x20, 0x30, 0x0,  0x0,  0x0,  0x0,  0x74,
+    0x55, 0x44, 0x0,  0xC,  0x1,  0xC,  0x31, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x53, 0x53, 0x0,  0x50, 0x1,  0x1,  0xA8, 0x0,  0x2,  0x0,  0x0,  0x9,
+    0x0,  0x0,  0x0,  0x48, 0x3,  0x1,  0x0,  0xF0, 0x2C, 0xC6, 0x19, 0x10,
+    0xC1, 0x39, 0x20, 0x0,  0x40, 0x0,  0x0,  0xFF, 0x9D, 0x86, 0xE6, 0xD3,
+    0x0,  0x0,  0x0,  0x3,  0x10, 0x69, 0x14, 0xD8, 0x0,  0x0,  0x0,  0x0,
+    0x42, 0x31, 0x38, 0x31, 0x41, 0x38, 0x30, 0x45, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x44, 0x1,  0xF4,
+    0x1,  0xC,  0x31, 0x0,  0x1,  0x28, 0x4,  0x42, 0x46, 0x57, 0x44, 0x42,
+    0x45, 0x52, 0x52, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x1,  0xEC, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xEC,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,  0x0,  0x0,  0x5,  0x33,
+    0x1F, 0xEA, 0xE7, 0x12, 0x0,  0x0,  0xD,  0x9D, 0x0,  0x30, 0x43, 0x4F,
+    0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62,
+    0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,
+    0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F,
+    0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,
+    0x50, 0x1,  0xF,  0xA,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C,
+    0x0,  0x0,  0x5,  0x38, 0x26, 0x43, 0xFB, 0x66, 0x0,  0x0,  0xB,  0x7D,
+    0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5,
+    0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49,
+    0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54,
+    0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A,
+    0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xF,  0xE,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x72, 0x13, 0xB8, 0x3D, 0x1C,
+    0x0,  0x0,  0x23, 0x33, 0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7,
+    0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63,
+    0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42,
+    0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,
+    0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xF,  0x5D,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x88,
+    0x20, 0xE1, 0xE0, 0x7,  0x0,  0x0,  0xD,  0x82, 0x0,  0x30, 0x43, 0x4F,
+    0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62,
+    0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,
+    0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F,
+    0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,
+    0x50, 0x1,  0xF,  0x9B, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C,
+    0x0,  0x0,  0x5,  0x89, 0x12, 0xE,  0xFE, 0x6E, 0x0,  0x0,  0xB,  0x69,
+    0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5,
+    0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49,
+    0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54,
+    0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A,
+    0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xF,  0xA4, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x89, 0x15, 0x7A, 0x13, 0xA4,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x2C, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7,
+    0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63,
+    0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x72, 0x76,
+    0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x0,  0x0,  0x0,  0x0,  0x1B,
+    0x0,  0x0,  0xA8, 0xE,  0x50, 0x1,  0xF,  0xA5, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x48, 0x55, 0x44, 0x1,  0xE8, 0x1,  0xC,  0x31, 0x0,
+    0x1,  0x28, 0x4,  0x42, 0x46, 0x57, 0x44, 0x42, 0x53, 0x52, 0x56, 0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xE0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xE0, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x9,  0x0,  0x0,  0x5,  0x89, 0x12, 0x36, 0xB8, 0x93,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x10, 0x43, 0x4F, 0x89, 0x7D, 0x0,  0x8C,
+    0x0,  0x0,  0x23, 0x5D, 0x73, 0x65, 0x72, 0x76, 0x44, 0x65, 0x74, 0x61,
+    0x63, 0x68, 0x0,  0x0,  0xDB, 0xFB, 0xCB, 0x98, 0x0,  0x0,  0x0,  0x2C,
+    0x0,  0x0,  0x5,  0x89, 0x12, 0x36, 0xD2, 0x7A, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x0,  0x43, 0x4F, 0xBD, 0xF0, 0x6E, 0xE3, 0x0,  0x0,  0x9,  0xF4,
+    0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89, 0x12, 0xAA, 0x51, 0x96,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x0,  0x43, 0x4F, 0x8F, 0x6A, 0x83, 0x3,
+    0x0,  0x0,  0x9,  0xA9, 0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89,
+    0x12, 0xAE, 0x7B, 0x85, 0x0,  0x0,  0x23, 0x88, 0x0,  0x10, 0x43, 0x4F,
+    0xF3, 0x35, 0x3F, 0x8D, 0x0,  0x0,  0x22, 0x35, 0x73, 0x65, 0x72, 0x76,
+    0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x0,  0x0,  0x9D, 0x86, 0xE6, 0xD3,
+    0x0,  0x0,  0x0,  0x2C, 0x0,  0x0,  0x5,  0x89, 0x13, 0xA5, 0x23, 0xFA,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x0,  0x43, 0x4F, 0xFC, 0x5A, 0x7F, 0x97,
+    0x0,  0x0,  0x9,  0xB3, 0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89,
+    0x14, 0x5B, 0x57, 0xCE, 0x0,  0x0,  0x23, 0x88, 0x0,  0x0,  0x43, 0x4F,
+    0x4,  0x88, 0x89, 0x7B, 0x0,  0x0,  0x9,  0x3B, 0x0,  0x0,  0x0,  0x1C,
+    0x0,  0x0,  0x5,  0x89, 0x14, 0x5F, 0xCC, 0x54, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x50, 0x43, 0x4F, 0x94, 0xA2, 0x26, 0x7C, 0x0,  0x0,  0x14, 0xE1,
+    0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x74, 0x6D, 0x74, 0x0,
+    0x0,  0x0,  0x0,  0x1,  0x6E, 0x6F, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20,
+    0x74, 0x61, 0x62, 0x6C, 0x65, 0x3A, 0x20, 0x63, 0x62, 0x6C, 0x76, 0x5F,
+    0x63, 0x61, 0x62, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63,
+    0x74, 0x69, 0x6F, 0x6E, 0x5F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F,
+    0x70, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x5F, 0x76, 0x69, 0x65, 0x77, 0x0,
+    0x10, 0x69, 0x14, 0xD8, 0x0,  0x0,  0x0,  0x3,  0x0,  0x0,  0x0,  0x6C,
+    0x0,  0x0,  0x5,  0x89, 0x15, 0x79, 0xCE, 0xB1, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x68, 0x43, 0x4F, 0xF9, 0xB,  0x8E, 0x3C, 0x0,  0x0,  0x21, 0x3E,
+    0x73, 0x65, 0x72, 0x76, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x0,
+    0x9D, 0x86, 0xE6, 0xD3, 0x0,  0x0,  0x0,  0x3,  0x73, 0x65, 0x6C, 0x65,
+    0x63, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65, 0x69, 0x64,
+    0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x63, 0x62, 0x6C, 0x76, 0x5F, 0x63,
+    0x61, 0x62, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74,
+    0x69, 0x6F, 0x6E, 0x5F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F, 0x70,
+    0x75, 0x62, 0x6C, 0x69, 0x63, 0x5F, 0x76, 0x69, 0x65, 0x77, 0x20, 0x77,
+    0x68, 0x65, 0x72, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65,
+    0x69, 0x64, 0x20, 0x21, 0x3D, 0x20, 0x30, 0x0,  0x0,  0x0,  0x0,  0x84,
+    0x55, 0x44, 0x3,  0xC0, 0x1,  0xC,  0x31, 0x0,  0x1,  0x28, 0x4,  0x42,
+    0x46, 0x57, 0x44, 0x42, 0x53, 0x51, 0x4C, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x3,  0xB8, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x3,  0xB8, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0xB,
+    0x0,  0x0,  0x5,  0x89, 0x5,  0xFC, 0x1E, 0x6C, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x40, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4, 0x0,  0x0,  0x21, 0x6,
+    0x14, 0x9,  0xC2, 0x11, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x2A,
+    0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x79, 0x73, 0x2E, 0x70, 0x6F,
+    0x6C, 0x69, 0x63, 0x79, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E,
+    0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x27, 0x70, 0x6F, 0x77, 0x65, 0x72,
+    0x2D, 0x64, 0x65, 0x66, 0x2D, 0x66, 0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D,
+    0x65, 0x73, 0x27, 0x0,  0x0,  0x0,  0x0,  0x5C, 0x0,  0x0,  0x5,  0x89,
+    0x6,  0xB1, 0x42, 0x3B, 0x0,  0x0,  0x23, 0x88, 0x0,  0x40, 0x43, 0x4F,
+    0x92, 0x41, 0x1B, 0xD4, 0x0,  0x0,  0x21, 0x6,  0x14, 0x9,  0xC2, 0x11,
+    0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x2A, 0x20, 0x66, 0x72, 0x6F,
+    0x6D, 0x20, 0x73, 0x79, 0x73, 0x2E, 0x70, 0x6F, 0x6C, 0x69, 0x63, 0x79,
+    0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x20,
+    0x3D, 0x20, 0x27, 0x70, 0x6F, 0x77, 0x65, 0x72, 0x2D, 0x64, 0x65, 0x66,
+    0x2D, 0x66, 0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x27, 0x0,
+    0x0,  0x0,  0x0,  0x5C, 0x0,  0x0,  0x5,  0x89, 0x7,  0x14, 0xD2, 0x68,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x40, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x14, 0x9,  0xC2, 0x11, 0x73, 0x65, 0x6C, 0x65,
+    0x63, 0x74, 0x20, 0x2A, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x79,
+    0x73, 0x2E, 0x70, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x20, 0x77, 0x68, 0x65,
+    0x72, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x27, 0x70,
+    0x6F, 0x77, 0x65, 0x72, 0x2D, 0x64, 0x65, 0x66, 0x2D, 0x66, 0x69, 0x6C,
+    0x65, 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x27, 0x0,  0x0,  0x0,  0x0,  0x5C,
+    0x0,  0x0,  0x5,  0x89, 0x7,  0x9A, 0x9D, 0x6F, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x40, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4, 0x0,  0x0,  0x21, 0x6,
+    0x14, 0x9,  0xC2, 0x11, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x2A,
+    0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x79, 0x73, 0x2E, 0x70, 0x6F,
+    0x6C, 0x69, 0x63, 0x79, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E,
+    0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x27, 0x70, 0x6F, 0x77, 0x65, 0x72,
+    0x2D, 0x64, 0x65, 0x66, 0x2D, 0x66, 0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D,
+    0x65, 0x73, 0x27, 0x0,  0x0,  0x0,  0x0,  0x5C, 0x0,  0x0,  0x5,  0x89,
+    0x7,  0xD4, 0xF8, 0x2D, 0x0,  0x0,  0x23, 0x88, 0x0,  0x40, 0x43, 0x4F,
+    0x92, 0x41, 0x1B, 0xD4, 0x0,  0x0,  0x21, 0x6,  0x14, 0x9,  0xC2, 0x11,
+    0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x2A, 0x20, 0x66, 0x72, 0x6F,
+    0x6D, 0x20, 0x73, 0x79, 0x73, 0x2E, 0x70, 0x6F, 0x6C, 0x69, 0x63, 0x79,
+    0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x20,
+    0x3D, 0x20, 0x27, 0x70, 0x6F, 0x77, 0x65, 0x72, 0x2D, 0x64, 0x65, 0x66,
+    0x2D, 0x66, 0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x27, 0x0,
+    0x0,  0x0,  0x0,  0x5C, 0x0,  0x0,  0x5,  0x89, 0x12, 0xB4, 0xBC, 0xA6,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x38, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x41, 0x54, 0x54, 0x41,
+    0x43, 0x48, 0x20, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x20,
+    0x27, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x70, 0x31, 0x2F, 0x66, 0x77, 0x73,
+    0x6D, 0x2F, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x73, 0x79, 0x73,
+    0x27, 0x20, 0x41, 0x53, 0x20, 0x73, 0x79, 0x73, 0x3B, 0xA,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x54, 0x0,  0x0,  0x5,  0x89, 0x12, 0xBC, 0xD8, 0x8A,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x38, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x41, 0x54, 0x54, 0x41,
+    0x43, 0x48, 0x20, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x20,
+    0x27, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x70, 0x30, 0x2F, 0x66, 0x77, 0x73,
+    0x6D, 0x2F, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x70, 0x30, 0x27,
+    0x20, 0x41, 0x53, 0x20, 0x70, 0x30, 0x3B, 0xA,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x54, 0x0,  0x0,  0x5,  0x89, 0x13, 0x97, 0x51, 0x64,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x38, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x41, 0x54, 0x54, 0x41,
+    0x43, 0x48, 0x20, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x20,
+    0x27, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x70, 0x31, 0x2F, 0x66, 0x77, 0x73,
+    0x6D, 0x2F, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x70, 0x31, 0x27,
+    0x20, 0x41, 0x53, 0x20, 0x70, 0x31, 0x3B, 0xA,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x54, 0x0,  0x0,  0x5,  0x89, 0x13, 0xA2, 0x85, 0x51,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x38, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x41, 0x54, 0x54, 0x41,
+    0x43, 0x48, 0x20, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x20,
+    0x27, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x70, 0x33, 0x2F, 0x66, 0x77, 0x73,
+    0x6D, 0x2F, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x70, 0x33, 0x27,
+    0x20, 0x41, 0x53, 0x20, 0x70, 0x33, 0x3B, 0xA,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x54, 0x0,  0x0,  0x5,  0x89, 0x14, 0x5B, 0x84, 0x7B,
+    0x0,  0x0,  0x23, 0x88, 0x0,  0x58, 0x43, 0x4F, 0x92, 0x41, 0x1B, 0xD4,
+    0x0,  0x0,  0x21, 0x6,  0x9D, 0x86, 0xE6, 0xD3, 0x73, 0x65, 0x6C, 0x65,
+    0x63, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65, 0x69, 0x64,
+    0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x63, 0x62, 0x6C, 0x76, 0x5F, 0x63,
+    0x61, 0x62, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74,
+    0x69, 0x6F, 0x6E, 0x5F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F, 0x70,
+    0x75, 0x62, 0x6C, 0x69, 0x63, 0x5F, 0x76, 0x69, 0x65, 0x77, 0x20, 0x77,
+    0x68, 0x65, 0x72, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65,
+    0x69, 0x64, 0x20, 0x21, 0x3D, 0x20, 0x30, 0x0,  0x0,  0x0,  0x0,  0x74,
+    0x55, 0x44, 0x0,  0xC,  0x1,  0xC,  0x31, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x53, 0x53, 0x0,  0x50, 0x1,  0x1,  0xA8, 0x0,  0x2,  0x0,  0x0,  0x9,
+    0x0,  0x0,  0x0,  0x48, 0x3,  0x1,  0x0,  0xF0, 0x2C, 0xC6, 0x67, 0x10,
+    0xC1, 0x39, 0x20, 0x0,  0x40, 0x0,  0x0,  0xFF, 0x0,  0x0,  0x0,  0x3,
+    0x9D, 0x86, 0xE6, 0xD3, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x42, 0x31, 0x38, 0x31, 0x41, 0x38, 0x30, 0x35, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x44, 0x1,  0xF4,
+    0x1,  0xC,  0x31, 0x0,  0x1,  0x28, 0x4,  0x42, 0x46, 0x57, 0x44, 0x42,
+    0x45, 0x52, 0x52, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x1,  0xEC, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xEC,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,  0x0,  0x0,  0x5,  0x38,
+    0x26, 0x43, 0xFB, 0x66, 0x0,  0x0,  0xB,  0x7D, 0x0,  0x30, 0x43, 0x4F,
+    0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62,
+    0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,
+    0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F,
+    0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,
+    0x50, 0x1,  0xF,  0xE,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C,
+    0x0,  0x0,  0x5,  0x72, 0x13, 0xB8, 0x3D, 0x1C, 0x0,  0x0,  0x23, 0x33,
+    0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5,
+    0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49,
+    0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54,
+    0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A,
+    0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xF,  0x5D, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x88, 0x20, 0xE1, 0xE0, 0x7,
+    0x0,  0x0,  0xD,  0x82, 0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7,
+    0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63,
+    0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x74, 0x42,
+    0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x0,  0x0,
+    0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,  0x50, 0x1,  0xF,  0x9B,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C, 0x0,  0x0,  0x5,  0x89,
+    0x12, 0xE,  0xFE, 0x6E, 0x0,  0x0,  0xB,  0x69, 0x0,  0x30, 0x43, 0x4F,
+    0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5, 0x66, 0x77, 0x64, 0x62,
+    0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49, 0x6E, 0x66, 0x6F, 0x0,
+    0x73, 0x65, 0x74, 0x42, 0x75, 0x73, 0x79, 0x54, 0x69, 0x6D, 0x65, 0x6F,
+    0x75, 0x74, 0x0,  0x0,  0x0,  0x0,  0x0,  0x1A, 0x0,  0x0,  0xA8, 0x9,
+    0x50, 0x1,  0xF,  0xA4, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x4C,
+    0x0,  0x0,  0x5,  0x89, 0x15, 0x7A, 0x13, 0xA4, 0x0,  0x0,  0x23, 0x88,
+    0x0,  0x2C, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5,
+    0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49,
+    0x6E, 0x66, 0x6F, 0x0,  0x73, 0x65, 0x72, 0x76, 0x45, 0x78, 0x65, 0x63,
+    0x75, 0x74, 0x65, 0x0,  0x0,  0x0,  0x0,  0x1B, 0x0,  0x0,  0xA8, 0xE,
+    0x50, 0x1,  0xF,  0xA5, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x48,
+    0x0,  0x0,  0x5,  0x89, 0x16, 0xA5, 0xF7, 0xAC, 0x0,  0x0,  0xB,  0x69,
+    0x0,  0x30, 0x43, 0x4F, 0x27, 0x67, 0x44, 0xB7, 0x0,  0x0,  0x0,  0xB5,
+    0x66, 0x77, 0x64, 0x62, 0x54, 0x72, 0x61, 0x63, 0x45, 0x72, 0x72, 0x49,
+    0x6E, 0x66, 0x6F, 0x0,  0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4E,
+    0x6F, 0x46, 0x6D, 0x74, 0x53, 0x74, 0x72, 0x0,  0x0,  0x0,  0x0,  0x1B,
+    0x0,  0x0,  0xA8, 0xE,  0x50, 0x1,  0xF,  0xA5, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x4C, 0x55, 0x44, 0x1,  0xEC, 0x1,  0xC,  0x31, 0x0,
+    0x1,  0x28, 0x4,  0x42, 0x46, 0x57, 0x44, 0x42, 0x43, 0x4D, 0x44, 0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xE4,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xE4, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0xD,  0x0,  0x0,  0x5,  0x89, 0x5,  0xF9, 0x4B, 0x5C,
+    0x0,  0x0,  0x23, 0x72, 0x0,  0x0,  0x43, 0x4F, 0x32, 0x5F, 0xF6, 0x1,
+    0x0,  0x0,  0x1,  0x59, 0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89,
+    0x6,  0x36, 0xBE, 0xE8, 0x0,  0x0,  0x23, 0x72, 0x0,  0x0,  0x43, 0x4F,
+    0xC9, 0x49, 0xE2, 0x7E, 0x0,  0x0,  0x1,  0xD6, 0x0,  0x0,  0x0,  0x1C,
+    0x0,  0x0,  0x5,  0x89, 0x6,  0xAE, 0x6C, 0x5C, 0x0,  0x0,  0x23, 0x72,
+    0x0,  0x0,  0x43, 0x4F, 0x32, 0x5F, 0xF6, 0x1,  0x0,  0x0,  0x1,  0x59,
+    0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89, 0x6,  0xC3, 0x48, 0x7A,
+    0x0,  0x0,  0x23, 0x72, 0x0,  0x0,  0x43, 0x4F, 0xC9, 0x49, 0xE2, 0x7E,
+    0x0,  0x0,  0x1,  0xD6, 0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89,
+    0x7,  0x12, 0x50, 0xB6, 0x0,  0x0,  0x23, 0x72, 0x0,  0x0,  0x43, 0x4F,
+    0x32, 0x5F, 0xF6, 0x1,  0x0,  0x0,  0x1,  0x59, 0x0,  0x0,  0x0,  0x1C,
+    0x0,  0x0,  0x5,  0x89, 0x7,  0x2C, 0x43, 0xFE, 0x0,  0x0,  0x23, 0x72,
+    0x0,  0x0,  0x43, 0x4F, 0xC9, 0x49, 0xE2, 0x7E, 0x0,  0x0,  0x1,  0xD6,
+    0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89, 0x7,  0x97, 0x92, 0x5F,
+    0x0,  0x0,  0x23, 0x72, 0x0,  0x0,  0x43, 0x4F, 0x32, 0x5F, 0xF6, 0x1,
+    0x0,  0x0,  0x1,  0x59, 0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89,
+    0x7,  0xAF, 0x7C, 0xC6, 0x0,  0x0,  0x23, 0x72, 0x0,  0x0,  0x43, 0x4F,
+    0xC9, 0x49, 0xE2, 0x7E, 0x0,  0x0,  0x1,  0xD6, 0x0,  0x0,  0x0,  0x1C,
+    0x0,  0x0,  0x5,  0x89, 0x7,  0xD2, 0x84, 0xF,  0x0,  0x0,  0x23, 0x72,
+    0x0,  0x0,  0x43, 0x4F, 0x32, 0x5F, 0xF6, 0x1,  0x0,  0x0,  0x1,  0x59,
+    0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89, 0x8,  0x6E, 0xBC, 0x17,
+    0x0,  0x0,  0x23, 0x72, 0x0,  0x0,  0x43, 0x4F, 0xC9, 0x49, 0xE2, 0x7E,
+    0x0,  0x0,  0x1,  0xD6, 0x0,  0x0,  0x0,  0x1C, 0x0,  0x0,  0x5,  0x89,
+    0x13, 0xA8, 0x5C, 0x6F, 0x0,  0x0,  0xB,  0x69, 0x0,  0x0,  0x43, 0x4F,
+    0x32, 0x5F, 0xF6, 0x1,  0x0,  0x0,  0x1,  0x59, 0x0,  0x0,  0x0,  0x1C,
+    0x0,  0x0,  0x5,  0x89, 0x16, 0xA5, 0x8F, 0x96, 0x0,  0x0,  0xB,  0x69,
+    0x0,  0x6C, 0x43, 0x4F, 0x9A, 0x1E, 0xAD, 0xA5, 0x0,  0x0,  0x1,  0x9D,
+    0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x4E, 0x6F, 0x46, 0x6D, 0x74,
+    0x53, 0x74, 0x72, 0x0,  0x0,  0x0,  0x0,  0x3,  0x73, 0x65, 0x6C, 0x65,
+    0x63, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65, 0x69, 0x64,
+    0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x63, 0x62, 0x6C, 0x76, 0x5F, 0x63,
+    0x61, 0x62, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74,
+    0x69, 0x6F, 0x6E, 0x5F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F, 0x70,
+    0x75, 0x62, 0x6C, 0x69, 0x63, 0x5F, 0x76, 0x69, 0x65, 0x77, 0x20, 0x77,
+    0x68, 0x65, 0x72, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65,
+    0x69, 0x64, 0x20, 0x21, 0x3D, 0x20, 0x30, 0x0,  0x9D, 0x86, 0xE6, 0xD3,
+    0x0,  0x0,  0x0,  0x88, 0x55, 0x44, 0x1,  0xD0, 0x1,  0xC,  0x31, 0x0,
+    0x1,  0x28, 0x4,  0x42, 0x46, 0x57, 0x44, 0x42, 0x55, 0x54, 0x49, 0x4C,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xC8,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0xC8, 0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0x4,  0x0,  0x0,  0x5,  0x89, 0x13, 0xA7, 0xC0, 0xB6,
+    0x0,  0x0,  0xB,  0x69, 0x0,  0x3C, 0x43, 0x4F, 0x4C, 0x53, 0x3A, 0xE0,
+    0x0,  0x0,  0x1,  0xF7, 0x45, 0x58, 0x49, 0x54, 0x0,  0x0,  0x0,  0x0,
+    0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x0,  0x0,  0x9D, 0x86, 0xE6, 0xD3,
+    0x0,  0x0,  0xB,  0x60, 0x0,  0x0,  0xB,  0x69, 0x2F, 0x6F, 0x70, 0x74,
+    0x2F, 0x66, 0x69, 0x70, 0x73, 0x2F, 0x62, 0x69, 0x6E, 0x2F, 0x68, 0x65,
+    0x61, 0x6C, 0x74, 0x68, 0x6D, 0x6F, 0x6E, 0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x43, 0x8F, 0x0,  0x0,  0x0,  0x58, 0x0,  0x0,  0x5,  0x89,
+    0x13, 0xA8, 0xF8, 0x3A, 0x0,  0x0,  0xB,  0x69, 0x0,  0x88, 0x43, 0x4F,
+    0x4C, 0x53, 0x3A, 0xE0, 0x0,  0x0,  0x1,  0xF7, 0x45, 0x4E, 0x54, 0x52,
+    0x0,  0x0,  0x0,  0x0,  0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x65,
+    0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65, 0x69, 0x64, 0x20, 0x66, 0x72, 0x6F,
+    0x6D, 0x20, 0x63, 0x62, 0x6C, 0x76, 0x5F, 0x63, 0x61, 0x62, 0x6C, 0x65,
+    0x5F, 0x63, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x5F,
+    0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F, 0x70, 0x75, 0x62, 0x6C, 0x69,
+    0x63, 0x5F, 0x76, 0x69, 0x65, 0x77, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65,
+    0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x65, 0x69, 0x64, 0x20, 0x21,
+    0x3D, 0x20, 0x30, 0x0,  0x9D, 0x86, 0xE6, 0xD3, 0x0,  0x0,  0xB,  0x60,
+    0x0,  0x0,  0xB,  0x69, 0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x66, 0x69, 0x70,
+    0x73, 0x2F, 0x62, 0x69, 0x6E, 0x2F, 0x68, 0x65, 0x61, 0x6C, 0x74, 0x68,
+    0x6D, 0x6F, 0x6E, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,
+    0x0,  0x0,  0x0,  0xA4, 0x0,  0x0,  0x5,  0x89, 0x16, 0xA5, 0x62, 0xFB,
+    0x0,  0x0,  0xB,  0x69, 0x0,  0x88, 0x43, 0x4F, 0x4C, 0x53, 0x3A, 0xE0,
+    0x0,  0x0,  0x1,  0xF7, 0x45, 0x58, 0x49, 0x54, 0x0,  0x0,  0x0,  0x0,
+    0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72,
+    0x5F, 0x65, 0x69, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x63, 0x62,
+    0x6C, 0x76, 0x5F, 0x63, 0x61, 0x62, 0x6C, 0x65, 0x5F, 0x63, 0x6F, 0x6E,
+    0x6E, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x5F, 0x73, 0x74, 0x61, 0x74,
+    0x75, 0x73, 0x5F, 0x70, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x5F, 0x76, 0x69,
+    0x65, 0x77, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x65, 0x72, 0x72,
+    0x6F, 0x72, 0x5F, 0x65, 0x69, 0x64, 0x20, 0x21, 0x3D, 0x20, 0x30, 0x0,
+    0x9D, 0x86, 0xE6, 0xD3, 0x0,  0x0,  0xB,  0x60, 0x0,  0x0,  0xB,  0x69,
+    0x2F, 0x6F, 0x70, 0x74, 0x2F, 0x66, 0x69, 0x70, 0x73, 0x2F, 0x62, 0x69,
+    0x6E, 0x2F, 0x68, 0x65, 0x61, 0x6C, 0x74, 0x68, 0x6D, 0x6F, 0x6E, 0x0,
+    0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0xC5, 0x63, 0x0,  0x0,  0x0,  0xA4};
+
+TEST_F(PELTest, RealPELTest)
+{
+    auto origData = realPELData;
+    PEL pel{origData};
+
+    EXPECT_TRUE(pel.valid());
+
+    // Check that the flat data is correct
+    auto flat = pel.data();
+    EXPECT_EQ(realPELData, flat);
+
+    // Check that the code can extract an object for every section.
+    //(The PrivateHeader and UserHeader account for the + 2 below.)
+    const auto& sections = pel.optionalSections();
+    EXPECT_EQ(pel.privateHeader()->sectionCount(), sections.size() + 2);
+
+    // Check that the last section (a 'UD' section) is indeed the last
+    // section object by checking the first and last bytes.
+    auto& last = pel.optionalSections().back();
+    std::vector<uint8_t> lastSectionData;
+    Stream stream{lastSectionData};
+    last->flatten(stream);
+    EXPECT_EQ(lastSectionData.front(), 'U');
+    EXPECT_EQ(lastSectionData.back(), 0xA4);
+}