From 4d62e0bb75f03850d9dc736c36d47e4bb2a0ea9b Mon Sep 17 00:00:00 2001 From: Thomas Fussell Date: Sun, 15 Jun 2014 13:06:47 -0400 Subject: [PATCH] remove optimization, test_dump, and start fixing relationships --- include/xlnt/common/exceptions.hpp | 10 - include/xlnt/workbook/workbook.hpp | 26 +- include/xlnt/writer/writer.hpp | 33 +- source/detail/workbook_impl.hpp | 9 +- source/exceptions.cpp | 6 - source/workbook.cpp | 116 +-- source/worksheet.cpp | 29 +- source/writer.cpp | 1069 +--------------------------- tests/runner-autogen.cpp | 83 +-- tests/test_dump.hpp | 169 ----- tests/test_workbook.hpp | 7 +- tests/test_write.hpp | 4 +- 12 files changed, 121 insertions(+), 1440 deletions(-) delete mode 100644 tests/test_dump.hpp diff --git a/include/xlnt/common/exceptions.hpp b/include/xlnt/common/exceptions.hpp index 7d287b6f..e342f8c7 100644 --- a/include/xlnt/common/exceptions.hpp +++ b/include/xlnt/common/exceptions.hpp @@ -109,15 +109,5 @@ class missing_number_format : public std::runtime_error public: missing_number_format(); }; - -/// -/// Error when attempting to perform operations on a dump workbook -/// while it has already been dumped once. -/// -class workbook_already_saved : public std::runtime_error -{ -public: - workbook_already_saved(); -}; } // namespace xlnt diff --git a/include/xlnt/workbook/workbook.hpp b/include/xlnt/workbook/workbook.hpp index 3003359d..9cd83647 100644 --- a/include/xlnt/workbook/workbook.hpp +++ b/include/xlnt/workbook/workbook.hpp @@ -40,12 +40,13 @@ class worksheet; namespace detail { struct workbook_impl; } // namespace detail - -enum class optimization + +struct content_type { - write, - read, - none + bool is_default; + std::string extension; + std::string part_name; + std::string type; }; /// @@ -55,16 +56,13 @@ class workbook { public: //constructors - workbook(optimization optimization = optimization::none); + workbook(); ~workbook(); workbook &operator=(const workbook &) = delete; workbook(const workbook &) = delete; - void read_workbook_settings(const std::string &xml_source); - - void create_relationship(const std::string &id, const std::string &target, const std::string &type); - relationship get_relationship(const std::string &id) const; + //void read_workbook_settings(const std::string &xml_source); //getters worksheet get_active_sheet(); @@ -158,13 +156,15 @@ public: bool load(const std::istream &stream); bool operator==(const workbook &rhs) const; + + std::vector get_content_types() const; - std::unordered_map> get_root_relationships() const; - std::unordered_map> get_relationships() const; + void create_relationship(const std::string &id, const std::string &target, const std::string &type); + relationship get_relationship(const std::string &id) const; + std::vector get_relationships() const; private: friend class worksheet; - bool get_already_saved() const; std::unique_ptr d_; }; diff --git a/include/xlnt/writer/writer.hpp b/include/xlnt/writer/writer.hpp index d82f9822..6f4a3560 100644 --- a/include/xlnt/writer/writer.hpp +++ b/include/xlnt/writer/writer.hpp @@ -30,6 +30,7 @@ namespace xlnt { +class relationship; class workbook; class worksheet; class document_properties; @@ -37,18 +38,30 @@ class document_properties; class writer { public: + static std::string write_content_types(const workbook &wb); + + static std::string write_properties_core(const document_properties &prop); + + static std::string write_properties_app(const workbook &wb); + static std::string write_workbook(const workbook &wb); - static std::string write_worksheet(worksheet ws); - static std::string write_worksheet(worksheet ws, const std::vector &string_table); - static std::string write_worksheet(worksheet ws, const std::vector &string_table, const std::unordered_map &style_table); - static std::string write_theme(); - static std::string write_content_types(const std::pair, std::unordered_map> &content_types); - static std::string write_relationships(const std::vector>> &relationships); + + static std::string write_theme(); + + static std::string write_shared_strings(const std::vector &string_table); + + static std::string write_worksheet(worksheet ws, + const std::vector &string_table = {}, + const std::unordered_map &style_table = {}); + + static std::string write_root_rels(); + static std::string write_workbook_rels(const workbook &wb); - static std::string write_worksheet_rels(worksheet ws, int drawing_id, int comments_id); - static std::string write_string_table(const std::vector &string_table); - static std::string write_properties_core(const document_properties &prop); - static std::string write_properties_app(const workbook &wb); + + static std::string write_worksheet_rels(worksheet ws); + +private: + static std::string write_relationships(const std::vector &relationships); }; } // namespace xlnt diff --git a/source/detail/workbook_impl.hpp b/source/detail/workbook_impl.hpp index 16035a2c..64bb888c 100644 --- a/source/detail/workbook_impl.hpp +++ b/source/detail/workbook_impl.hpp @@ -7,14 +7,11 @@ namespace detail { struct workbook_impl { - workbook_impl(optimization o); + workbook_impl(); workbook_impl &operator=(const workbook_impl &) = delete; workbook_impl(const workbook_impl &) = delete; - bool already_saved_; - bool optimized_read_; - bool optimized_write_; - bool guess_types_; - bool data_only_; + //bool guess_types_; + //bool data_only_; int active_sheet_index_; bool date_1904_; std::vector worksheets_; diff --git a/source/exceptions.cpp b/source/exceptions.cpp index b98ef87d..e82ba1d0 100644 --- a/source/exceptions.cpp +++ b/source/exceptions.cpp @@ -32,10 +32,4 @@ cell_coordinates_exception::cell_coordinates_exception(const std::string &coord_ } -workbook_already_saved::workbook_already_saved() -: std::runtime_error("") -{ - -} - } // namespace xlnt diff --git a/source/workbook.cpp b/source/workbook.cpp index 6a1f402f..b3836fc9 100644 --- a/source/workbook.cpp +++ b/source/workbook.cpp @@ -43,18 +43,15 @@ static std::string CreateTemporaryFilename() namespace xlnt { namespace detail { -workbook_impl::workbook_impl(optimization o) : already_saved_(false), optimized_read_(o == optimization::read), optimized_write_(o == optimization::write), active_sheet_index_(0), date_1904_(false) +workbook_impl::workbook_impl() : active_sheet_index_(0), date_1904_(false) { } } // namespace detail -workbook::workbook(optimization optimize) : d_(new detail::workbook_impl(optimize)) +workbook::workbook() : d_(new detail::workbook_impl()) { - if(!d_->optimized_read_) - { - create_sheet("Sheet"); - } + create_sheet("Sheet"); } workbook::~workbook() @@ -156,11 +153,6 @@ worksheet workbook::get_active_sheet() return worksheet(&d_->worksheets_[d_->active_sheet_index_]); } -bool workbook::get_already_saved() const -{ - return d_->already_saved_; -} - bool workbook::has_named_range(const std::string &name) const { for(auto worksheet : *this) @@ -174,12 +166,7 @@ bool workbook::has_named_range(const std::string &name) const } worksheet workbook::create_sheet() -{ - if(d_->optimized_read_) - { - throw std::runtime_error("this is a read-only workbook"); - } - +{ std::string title = "Sheet1"; int index = 1; @@ -194,11 +181,6 @@ worksheet workbook::create_sheet() void workbook::add_sheet(xlnt::worksheet worksheet) { - if(d_->optimized_read_) - { - throw std::runtime_error("this is a read-only workbook"); - } - for(auto ws : *this) { if(worksheet == ws) @@ -476,11 +458,6 @@ void workbook::clear() d_->worksheets_.clear(); } -bool workbook::get_optimized_write() const -{ - return d_->optimized_write_; -} - bool workbook::save(std::vector &data) { auto temp_file = CreateTemporaryFilename(); @@ -498,75 +475,12 @@ bool workbook::save(std::vector &data) bool workbook::save(const std::string &filename) { - if(d_->optimized_write_) - { - if(d_->already_saved_) - { - throw workbook_already_saved(); - } - - d_->already_saved_ = true; - } - zip_file f(filename, file_mode::create, file_access::write); - - std::pair, std::unordered_map> content_types = - { - { - {"rels", "application/vnd.openxmlformats-package.relationships+xml"}, - {"xml", "application/xml"} - }, - { - {"/xl/styles.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"}, - {"/xl/workbook.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}, - {"/docProps/app.xml", "application/vnd.openxmlformats-officedocument.extended-properties+xml"}, - {"/docProps/core.xml", "application/vnd.openxmlformats-package.core-properties+xml"}, - {"/xl/theme/theme1.xml", "application/vnd.openxmlformats-officedocument.theme+xml"} - } - }; - int ws_index = 1; - for(auto ws : *this) - { - auto sheet_filename = "/xl/worksheets/sheet" + std::to_string(ws_index++) + ".xml"; - content_types.second[sheet_filename] = "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"; - } + f.set_file_contents("[Content_Types].xml", writer::write_content_types(*this)); - f.set_file_contents("[Content_Types].xml", writer::write_content_types(content_types)); - - std::vector>> root_rels = - { - {"rId3", {"docProps/app.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"}}, - {"rId2", {"docProps/core.xml", "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"}}, - {"rId1", {"xl/workbook.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"}} - }; - - f.set_file_contents("_rels/.rels", writer::write_relationships(root_rels)); - - std::vector>> workbook_rels = - { - {"rId1", {"sharedStrings.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"}}, - {"rId2", {"styles.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"}}, - {"rId3", {"theme/theme1.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"}} - }; - - ws_index = 2; - for(auto ws : *this) - { - auto sheet_filename = "worksheets/sheet" + std::to_string(ws_index++) + ".xml"; - workbook_rels.push_back({"rId" + std::to_string(ws_index + 1), {sheet_filename, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"}}); - } - - f.set_file_contents("xl/_rels/workbook.xml.rels", writer::write_relationships(workbook_rels)); - - int i = 0; - - for(auto ws : *this) - { - std::string sheet_filename = "xl/worksheets/sheet"; - f.set_file_contents(sheet_filename + std::to_string(i + 1) + ".xml", xlnt::writer::write_worksheet(ws)); - i++; - } + f.set_file_contents("_rels/.rels", writer::write_root_rels()); + f.set_file_contents("xl/_rels/workbook.xml.rels", writer::write_workbook_rels(*this)); f.set_file_contents("xl/workbook.xml", writer::write_workbook(*this)); @@ -577,5 +491,19 @@ bool workbook::operator==(const workbook &rhs) const { return d_.get() == rhs.d_.get(); } - + +std::vector xlnt::workbook::get_relationships() const +{ + return d_->relationships_; } + +std::vector xlnt::workbook::get_content_types() const +{ + std::vector content_types; + content_types.push_back({ true, "xml", "xml" }); + content_types.push_back({ true, "rels", "xml" }); + content_types.push_back({ false, "xl/workbook.xml", "xml" }); + return content_types; +} + +} \ No newline at end of file diff --git a/source/worksheet.cpp b/source/worksheet.cpp index 24a66531..8d67af2b 100644 --- a/source/worksheet.cpp +++ b/source/worksheet.cpp @@ -347,11 +347,6 @@ void worksheet::unmerge_cells(const range_reference &reference) void worksheet::append(const std::vector &cells) { - if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) - { - throw workbook_already_saved(); - } - int row = get_highest_row(); if(d_->cell_map_.size() == 0) @@ -369,11 +364,6 @@ void worksheet::append(const std::vector &cells) void worksheet::append(const std::vector &cells) { - if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) - { - throw workbook_already_saved(); - } - int row = get_highest_row(); if(d_->cell_map_.size() == 0) @@ -391,11 +381,6 @@ void worksheet::append(const std::vector &cells) void worksheet::append(const std::vector &cells) { - if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) - { - throw workbook_already_saved(); - } - int row = get_highest_row(); if(d_->cell_map_.size() == 0) @@ -413,12 +398,7 @@ void worksheet::append(const std::vector &cells) void worksheet::append(const std::unordered_map &cells) { - if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) - { - throw workbook_already_saved(); - } - - int row = get_highest_row() - 1; + int row = get_highest_row() - 1; if(d_->cell_map_.size() != 0) { @@ -433,12 +413,7 @@ void worksheet::append(const std::unordered_map &cells void worksheet::append(const std::unordered_map &cells) { - if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) - { - throw workbook_already_saved(); - } - - int row = get_highest_row() - 1; + int row = get_highest_row() - 1; if(d_->cell_map_.size() != 0) { diff --git a/source/writer.cpp b/source/writer.cpp index 204bd108..ab7b32d5 100644 --- a/source/writer.cpp +++ b/source/writer.cpp @@ -17,7 +17,7 @@ namespace xlnt { -std::string writer::write_string_table(const std::vector &string_table) +std::string writer::write_shared_strings(const std::vector &string_table) { pugi::xml_document doc; auto root_node = doc.append_child("sst"); @@ -47,42 +47,12 @@ std::string writer::write_properties_app(const workbook &/*wb*/) std::string writer::write_workbook_rels(const workbook &wb) { - std::vector>> rels = - { - {"rId1", {"sharedStrings.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"}}, - {"rId2", {"styles.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"}}, - {"rId3", {"theme/theme1.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"}} - }; - - int i = 0; - for(auto worksheet : wb) - { - rels.push_back({"rId" + std::to_string(i + 4), {"worksheets/sheet1.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"}}); - i++; - } - - return write_relationships(rels); + return write_relationships(wb.get_relationships()); } -std::string writer::write_worksheet_rels(worksheet ws, int /*drawing_id*/, int /*comments_id*/) +std::string writer::write_worksheet_rels(worksheet ws) { - pugi::xml_document doc; - auto root_node = doc.append_child("Relationships"); - root_node.append_attribute("xmlns").set_value(constants::Namespaces.at("relationships").c_str()); - - for(auto relationship : ws.get_relationships()) - { - auto relationship_node = root_node.append_child("Relationship"); - relationship_node.append_attribute("Id").set_value(relationship.get_id().c_str()); - relationship_node.append_attribute("Type").set_value("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"); - relationship_node.append_attribute("Target").set_value(relationship.get_target_uri().c_str()); - std::string mode = relationship.get_target_mode() == target_mode::external ? "External" : "Internal"; - relationship_node.append_attribute("TargetMode").set_value(mode.c_str()); - } - - std::stringstream ss; - doc.save(ss); - return ss.str(); + return write_relationships(ws.get_relationships()); } @@ -150,11 +120,6 @@ std::string writer::write_workbook(const workbook &wb) return ss.str(); } -std::string writer::write_worksheet(worksheet ws, const std::vector &string_table) -{ - return write_worksheet(ws, string_table, {}); -} - std::string writer::write_worksheet(worksheet ws, const std::vector &string_table, const std::unordered_map &style_id_by_hash) { ws.get_cell("A1"); @@ -434,128 +399,29 @@ std::string writer::write_worksheet(worksheet ws, const std::vector return ss.str(); } - -std::string writer::write_worksheet(worksheet ws) -{ - return write_worksheet(ws, std::vector()); -} - -std::string writer::write_content_types(const std::pair, std::unordered_map> &content_types) +std::string writer::write_content_types(const workbook &wb) { - /*std::set seen; - - pugi::xml_node root; - - if(wb.has_vba_archive()) - { - root = fromstring(wb.get_vba_archive().read(ARC_CONTENT_TYPES)); - - for(auto elem : root.findall("{" + CONTYPES_NS + "}Override")) - { - seen.insert(elem.attrib["PartName"]); - } - } - else - { - root = Element("{" + CONTYPES_NS + "}Types"); - - for(auto content_type : static_content_types_config) - { - if(setting_type == "Override") - { - tag = "{" + CONTYPES_NS + "}Override"; - attrib = {"PartName": "/" + name}; - } - else - { - tag = "{" + CONTYPES_NS + "}Default"; - attrib = {"Extension": name}; - } - - attrib["ContentType"] = content_type; - SubElement(root, tag, attrib); - } - } - - int drawing_id = 1; - int chart_id = 1; - int comments_id = 1; - int sheet_id = 0; - - for(auto sheet : wb) - { - std::string name = "/xl/worksheets/sheet" + std::to_string(sheet_id) + ".xml"; - - if(seen.find(name) == seen.end()) - { - SubElement(root, "{" + CONTYPES_NS + "}Override", {{"PartName", name}, - {"ContentType", "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"}}); - } - - if(sheet._charts || sheet._images) - { - name = "/xl/drawings/drawing" + drawing_id + ".xml"; - - if(seen.find(name) == seen.end()) - { - SubElement(root, "{%s}Override" % CONTYPES_NS, {"PartName" : name, - "ContentType" : "application/vnd.openxmlformats-officedocument.drawing+xml"}); - } - - drawing_id += 1; - - for(auto chart : sheet._charts) - { - name = "/xl/charts/chart%d.xml" % chart_id; - - if(seen.find(name) == seen.end()) - { - SubElement(root, "{%s}Override" % CONTYPES_NS, {"PartName" : name, - "ContentType" : "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"}); - } - - chart_id += 1; - - if(chart._shapes) - { - name = "/xl/drawings/drawing%d.xml" % drawing_id; - - if(seen.find(name) == seen.end()) - { - SubElement(root, "{%s}Override" % CONTYPES_NS, {"PartName" : name, - "ContentType" : "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml"}); - } - - drawing_id += 1; - } - } - } - if(sheet.get_comment_count() > 0) - { - SubElement(root, "{%s}Override" % CONTYPES_NS, - {"PartName": "/xl/comments%d.xml" % comments_id, - "ContentType" : "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"}); - comments_id += 1; - } - }*/ - pugi::xml_document doc; auto root_node = doc.append_child("Types"); root_node.append_attribute("xmlns").set_value(constants::Namespaces.at("content-types").c_str()); - for(auto default_type : content_types.first) + for(auto type : wb.get_content_types()) { - auto xml_node = root_node.append_child("Default"); - xml_node.append_attribute("Extension").set_value(default_type.first.c_str()); - xml_node.append_attribute("ContentType").set_value(default_type.second.c_str()); - } - - for(auto override_type : content_types.second) - { - auto theme_node = root_node.append_child("Override"); - theme_node.append_attribute("PartName").set_value(override_type.first.c_str()); - theme_node.append_attribute("ContentType").set_value(override_type.second.c_str()); + pugi::xml_node type_node; + + if (type.is_default) + { + type_node = root_node.append_child("Default"); + type_node.append_attribute("Extension").set_value(type.extension.c_str()); + } + else + { + type_node = root_node.append_child("Override"); + type_node.append_attribute("PartName").set_value(type.part_name.c_str()); + } + + type_node.append_attribute("ContentType").set_value(type.type.c_str()); } std::stringstream ss; @@ -563,7 +429,18 @@ std::string writer::write_content_types(const std::pair>> &relationships) +std::string xlnt::writer::write_root_rels() +{ + std::vector relationships; + + relationships.push_back(relationship("a")); + relationships.push_back(relationship("b")); + relationships.push_back(relationship("c")); + + return write_relationships(relationships); +} + +std::string writer::write_relationships(const std::vector &relationships) { pugi::xml_document doc; auto root_node = doc.append_child("Relationships"); @@ -572,9 +449,9 @@ std::string writer::write_relationships(const std::vector theme1_xml = - {{ - 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x31, 0x2e, 0x30, 0x22, 0x3f, 0x3e, 0x0d, 0x0a, 0x3c, - 0x61, 0x3a, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x78, 0x6d, 0x6c, 0x6e, - 0x73, 0x3a, 0x61, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x78, 0x6d, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x64, 0x72, 0x61, 0x77, 0x69, 0x6e, 0x67, 0x6d, 0x6c, - 0x2f, 0x32, 0x30, 0x30, 0x36, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, - 0x20, 0x54, 0x68, 0x65, 0x6d, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x63, 0x6c, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, - 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x64, 0x6b, 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x79, 0x73, 0x43, 0x6c, 0x72, - 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x54, 0x65, 0x78, 0x74, 0x22, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6c, - 0x72, 0x3d, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x64, 0x6b, 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x6c, 0x74, 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x79, 0x73, 0x43, - 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x22, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6c, 0x72, 0x3d, - 0x22, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x74, - 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x64, 0x6b, 0x32, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, - 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x31, 0x46, 0x34, 0x39, 0x37, - 0x44, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x2f, 0x61, 0x3a, 0x64, 0x6b, 0x32, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, 0x74, 0x32, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, - 0x22, 0x45, 0x45, 0x45, 0x43, 0x45, 0x31, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x74, - 0x32, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x31, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, - 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x34, - 0x46, 0x38, 0x31, 0x42, 0x44, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, - 0x6e, 0x74, 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x32, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, - 0x22, 0x43, 0x30, 0x35, 0x30, 0x34, 0x44, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x61, 0x63, - 0x63, 0x65, 0x6e, 0x74, 0x32, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x33, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, - 0x6c, 0x3d, 0x22, 0x39, 0x42, 0x42, 0x42, 0x35, 0x39, 0x22, 0x2f, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x33, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, - 0x74, 0x34, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, - 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x38, 0x30, 0x36, 0x34, 0x41, 0x32, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x34, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x63, 0x63, - 0x65, 0x6e, 0x74, 0x35, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, - 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x34, 0x42, 0x41, 0x43, 0x43, - 0x36, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x2f, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x35, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, - 0x63, 0x63, 0x65, 0x6e, 0x74, 0x36, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, - 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x46, 0x37, 0x39, - 0x36, 0x34, 0x36, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, - 0x36, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x68, 0x6c, 0x69, 0x6e, 0x6b, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, - 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x30, 0x30, 0x30, - 0x30, 0x46, 0x46, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x68, 0x6c, 0x69, 0x6e, 0x6b, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, - 0x6f, 0x6c, 0x48, 0x6c, 0x69, 0x6e, 0x6b, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, - 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x38, 0x30, - 0x30, 0x30, 0x38, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x66, 0x6f, 0x6c, 0x48, 0x6c, - 0x69, 0x6e, 0x6b, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x63, 0x6c, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, - 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, - 0x3d, 0x22, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x22, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6d, 0x61, 0x6a, - 0x6f, 0x72, 0x46, 0x6f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, 0x61, 0x74, 0x69, - 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, - 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, - 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, - 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x63, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, - 0x61, 0x63, 0x65, 0x3d, 0x22, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, - 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4a, 0x70, - 0x61, 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, - 0x3d, 0x22, 0x26, 0x23, 0x78, 0x46, 0x46, 0x32, 0x44, 0x3b, 0x26, 0x23, - 0x78, 0x46, 0x46, 0x33, 0x33, 0x3b, 0x20, 0x26, 0x23, 0x78, 0x46, 0x46, - 0x33, 0x30, 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, 0x42, 0x34, 0x3b, 0x26, - 0x23, 0x78, 0x33, 0x30, 0x42, 0x37, 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, - 0x43, 0x33, 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, 0x41, 0x46, 0x3b, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, 0x42, - 0x39, 0x44, 0x31, 0x3b, 0x26, 0x23, 0x78, 0x43, 0x37, 0x34, 0x30, 0x3b, - 0x20, 0x26, 0x23, 0x78, 0x41, 0x43, 0x45, 0x30, 0x3b, 0x26, 0x23, 0x78, - 0x42, 0x35, 0x31, 0x35, 0x3b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, - 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, - 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, - 0x3d, 0x22, 0x26, 0x23, 0x78, 0x35, 0x42, 0x38, 0x42, 0x3b, 0x26, 0x23, - 0x78, 0x34, 0x46, 0x35, 0x33, 0x3b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, - 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x48, - 0x61, 0x6e, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, - 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, 0x36, 0x35, 0x42, 0x30, 0x3b, 0x26, - 0x23, 0x78, 0x37, 0x44, 0x33, 0x30, 0x3b, 0x26, 0x23, 0x78, 0x36, 0x36, - 0x30, 0x45, 0x3b, 0x26, 0x23, 0x78, 0x39, 0x41, 0x44, 0x34, 0x3b, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x41, 0x72, 0x61, 0x62, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x48, 0x65, 0x62, 0x72, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x54, 0x68, 0x61, 0x69, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x61, 0x68, 0x6f, - 0x6d, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x45, 0x74, 0x68, 0x69, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4e, - 0x79, 0x61, 0x6c, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, - 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x42, 0x65, 0x6e, - 0x67, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, - 0x22, 0x56, 0x72, 0x69, 0x6e, 0x64, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, - 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, - 0x47, 0x75, 0x6a, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, - 0x63, 0x65, 0x3d, 0x22, 0x53, 0x68, 0x72, 0x75, 0x74, 0x69, 0x22, 0x2f, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3d, 0x22, 0x4b, 0x68, 0x6d, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x6f, 0x6f, 0x6c, 0x42, - 0x6f, 0x72, 0x61, 0x6e, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, - 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4b, 0x6e, 0x64, - 0x61, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, - 0x22, 0x54, 0x75, 0x6e, 0x67, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, - 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x47, - 0x75, 0x72, 0x75, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, - 0x65, 0x3d, 0x22, 0x52, 0x61, 0x61, 0x76, 0x69, 0x22, 0x2f, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, - 0x22, 0x43, 0x61, 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, - 0x61, 0x63, 0x65, 0x3d, 0x22, 0x45, 0x75, 0x70, 0x68, 0x65, 0x6d, 0x69, - 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x43, 0x68, 0x65, 0x72, 0x22, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x50, 0x6c, - 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x74, 0x20, 0x43, 0x68, - 0x65, 0x72, 0x6f, 0x6b, 0x65, 0x65, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, - 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x59, - 0x69, 0x69, 0x69, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, - 0x65, 0x3d, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, - 0x20, 0x59, 0x69, 0x20, 0x42, 0x61, 0x69, 0x74, 0x69, 0x22, 0x2f, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3d, 0x22, 0x54, 0x69, 0x62, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, - 0x6f, 0x66, 0x74, 0x20, 0x48, 0x69, 0x6d, 0x61, 0x6c, 0x61, 0x79, 0x61, - 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3d, 0x22, 0x54, 0x68, 0x61, 0x61, 0x22, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x56, 0x20, - 0x42, 0x6f, 0x6c, 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, - 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x44, 0x65, 0x76, - 0x61, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, - 0x22, 0x4d, 0x61, 0x6e, 0x67, 0x61, 0x6c, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, - 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, - 0x54, 0x65, 0x6c, 0x75, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, - 0x63, 0x65, 0x3d, 0x22, 0x47, 0x61, 0x75, 0x74, 0x61, 0x6d, 0x69, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x54, 0x61, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4c, 0x61, 0x74, 0x68, - 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x53, 0x79, 0x72, 0x63, 0x22, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x45, 0x73, - 0x74, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x20, 0x45, 0x64, 0x65, - 0x73, 0x73, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4f, 0x72, 0x79, 0x61, - 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, - 0x4b, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, - 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, - 0x4d, 0x6c, 0x79, 0x6d, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, - 0x63, 0x65, 0x3d, 0x22, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x4c, 0x61, 0x6f, 0x6f, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x44, 0x6f, 0x6b, 0x43, - 0x68, 0x61, 0x6d, 0x70, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, - 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x53, 0x69, - 0x6e, 0x68, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, - 0x3d, 0x22, 0x49, 0x73, 0x6b, 0x6f, 0x6f, 0x6c, 0x61, 0x20, 0x50, 0x6f, - 0x74, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4d, 0x6f, 0x6e, 0x67, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, - 0x6f, 0x6e, 0x67, 0x6f, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x42, 0x61, 0x69, - 0x74, 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x56, 0x69, 0x65, 0x74, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d, - 0x61, 0x6e, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x55, 0x69, 0x67, 0x68, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, - 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x55, 0x69, 0x67, - 0x68, 0x75, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x46, - 0x6f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x46, 0x6f, 0x6e, 0x74, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x43, 0x61, 0x6c, 0x69, 0x62, 0x72, - 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x63, 0x73, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x4a, 0x70, 0x61, 0x6e, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, 0x46, - 0x46, 0x32, 0x44, 0x3b, 0x26, 0x23, 0x78, 0x46, 0x46, 0x33, 0x33, 0x3b, - 0x20, 0x26, 0x23, 0x78, 0x46, 0x46, 0x33, 0x30, 0x3b, 0x26, 0x23, 0x78, - 0x33, 0x30, 0x42, 0x34, 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, 0x42, 0x37, - 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, 0x43, 0x33, 0x3b, 0x26, 0x23, 0x78, - 0x33, 0x30, 0x41, 0x46, 0x3b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, - 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, - 0x6e, 0x67, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, - 0x3d, 0x22, 0x26, 0x23, 0x78, 0x42, 0x39, 0x44, 0x31, 0x3b, 0x26, 0x23, - 0x78, 0x43, 0x37, 0x34, 0x30, 0x3b, 0x20, 0x26, 0x23, 0x78, 0x41, 0x43, - 0x45, 0x30, 0x3b, 0x26, 0x23, 0x78, 0x42, 0x35, 0x31, 0x35, 0x3b, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, 0x35, - 0x42, 0x38, 0x42, 0x3b, 0x26, 0x23, 0x78, 0x34, 0x46, 0x35, 0x33, 0x3b, - 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, 0x6e, 0x74, 0x22, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, - 0x36, 0x35, 0x42, 0x30, 0x3b, 0x26, 0x23, 0x78, 0x37, 0x44, 0x33, 0x30, - 0x3b, 0x26, 0x23, 0x78, 0x36, 0x36, 0x30, 0x45, 0x3b, 0x26, 0x23, 0x78, - 0x39, 0x41, 0x44, 0x34, 0x3b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, - 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x41, 0x72, - 0x61, 0x62, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, - 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, - 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, - 0x48, 0x65, 0x62, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, - 0x63, 0x65, 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x2f, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3d, 0x22, 0x54, 0x68, 0x61, 0x69, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x61, 0x68, 0x6f, 0x6d, 0x61, - 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3d, 0x22, 0x45, 0x74, 0x68, 0x69, 0x22, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4e, 0x79, 0x61, - 0x6c, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x42, 0x65, 0x6e, 0x67, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x56, - 0x72, 0x69, 0x6e, 0x64, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, - 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x47, 0x75, - 0x6a, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, - 0x3d, 0x22, 0x53, 0x68, 0x72, 0x75, 0x74, 0x69, 0x22, 0x2f, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, - 0x22, 0x4b, 0x68, 0x6d, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, - 0x61, 0x63, 0x65, 0x3d, 0x22, 0x44, 0x61, 0x75, 0x6e, 0x50, 0x65, 0x6e, - 0x68, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4b, 0x6e, 0x64, 0x61, 0x22, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x75, - 0x6e, 0x67, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x47, 0x75, 0x72, 0x75, - 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, - 0x52, 0x61, 0x61, 0x76, 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, - 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x43, 0x61, - 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, - 0x3d, 0x22, 0x45, 0x75, 0x70, 0x68, 0x65, 0x6d, 0x69, 0x61, 0x22, 0x2f, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3d, 0x22, 0x43, 0x68, 0x65, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x50, 0x6c, 0x61, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x6e, 0x65, 0x74, 0x20, 0x43, 0x68, 0x65, 0x72, 0x6f, - 0x6b, 0x65, 0x65, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x59, 0x69, 0x69, 0x69, - 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, - 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x59, 0x69, - 0x20, 0x42, 0x61, 0x69, 0x74, 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, - 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x54, - 0x69, 0x62, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, - 0x65, 0x3d, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, - 0x20, 0x48, 0x69, 0x6d, 0x61, 0x6c, 0x61, 0x79, 0x61, 0x22, 0x2f, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3d, 0x22, 0x54, 0x68, 0x61, 0x61, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x56, 0x20, 0x42, 0x6f, 0x6c, - 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x44, 0x65, 0x76, 0x61, 0x22, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x61, - 0x6e, 0x67, 0x61, 0x6c, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, - 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x54, 0x65, 0x6c, - 0x75, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, - 0x22, 0x47, 0x61, 0x75, 0x74, 0x61, 0x6d, 0x69, 0x22, 0x2f, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, - 0x22, 0x54, 0x61, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, - 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4c, 0x61, 0x74, 0x68, 0x61, 0x22, 0x2f, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3d, 0x22, 0x53, 0x79, 0x72, 0x63, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x45, 0x73, 0x74, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x20, 0x45, 0x64, 0x65, 0x73, 0x73, 0x61, - 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4f, 0x72, 0x79, 0x61, 0x22, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4b, 0x61, 0x6c, - 0x69, 0x6e, 0x67, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, - 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4d, 0x6c, 0x79, - 0x6d, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, - 0x22, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x22, 0x2f, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, - 0x22, 0x4c, 0x61, 0x6f, 0x6f, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, - 0x61, 0x63, 0x65, 0x3d, 0x22, 0x44, 0x6f, 0x6b, 0x43, 0x68, 0x61, 0x6d, - 0x70, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x53, 0x69, 0x6e, 0x68, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x49, - 0x73, 0x6b, 0x6f, 0x6f, 0x6c, 0x61, 0x20, 0x50, 0x6f, 0x74, 0x61, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x4d, 0x6f, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x6f, 0x6e, 0x67, - 0x6f, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x42, 0x61, 0x69, 0x74, 0x69, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3d, 0x22, 0x56, 0x69, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, - 0x6c, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x55, 0x69, 0x67, 0x68, 0x22, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x69, - 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x55, 0x69, 0x67, 0x68, - 0x75, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x46, 0x6f, - 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, - 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6d, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x69, 0x6c, 0x6c, - 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x6f, - 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, - 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, - 0x72, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x6f, 0x74, 0x57, - 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x3d, 0x22, 0x31, 0x22, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x30, - 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, - 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, - 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, - 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x33, 0x35, 0x30, 0x30, - 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, - 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, - 0x6c, 0x3d, 0x22, 0x33, 0x37, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, - 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, - 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x31, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, - 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x31, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, - 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, - 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, - 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x31, 0x36, 0x32, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, - 0x3d, 0x22, 0x31, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, - 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, 0x46, 0x69, - 0x6c, 0x6c, 0x20, 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, - 0x61, 0x70, 0x65, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, - 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, - 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, - 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, - 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, - 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x35, 0x31, - 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, - 0x6c, 0x3d, 0x22, 0x31, 0x33, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, 0x70, - 0x6f, 0x73, 0x3d, 0x22, 0x38, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, - 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, - 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x73, 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, - 0x39, 0x33, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, - 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x31, 0x33, 0x30, 0x30, 0x30, 0x30, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, - 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, - 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, - 0x6c, 0x3d, 0x22, 0x39, 0x34, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, - 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x31, 0x33, 0x35, 0x30, - 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, - 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, 0x69, 0x6e, - 0x20, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x31, 0x36, 0x32, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x22, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x3d, 0x22, - 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, 0x46, 0x69, - 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x2f, 0x61, 0x3a, 0x66, 0x69, 0x6c, 0x6c, 0x53, 0x74, 0x79, 0x6c, 0x65, - 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x6c, 0x6e, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, - 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x6c, 0x6e, 0x20, 0x77, 0x3d, 0x22, 0x39, 0x35, 0x32, - 0x35, 0x22, 0x20, 0x63, 0x61, 0x70, 0x3d, 0x22, 0x66, 0x6c, 0x61, 0x74, - 0x22, 0x20, 0x63, 0x6d, 0x70, 0x64, 0x3d, 0x22, 0x73, 0x6e, 0x67, 0x22, - 0x20, 0x61, 0x6c, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x74, 0x72, 0x22, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, - 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, - 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, - 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x39, 0x35, - 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, - 0x22, 0x31, 0x30, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, - 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, - 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x70, 0x72, 0x73, 0x74, 0x44, - 0x61, 0x73, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x73, 0x6f, 0x6c, - 0x69, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x6e, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, - 0x6e, 0x20, 0x77, 0x3d, 0x22, 0x32, 0x35, 0x34, 0x30, 0x30, 0x22, 0x20, - 0x63, 0x61, 0x70, 0x3d, 0x22, 0x66, 0x6c, 0x61, 0x74, 0x22, 0x20, 0x63, - 0x6d, 0x70, 0x64, 0x3d, 0x22, 0x73, 0x6e, 0x67, 0x22, 0x20, 0x61, 0x6c, - 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x74, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, - 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, - 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x70, 0x72, 0x73, 0x74, 0x44, - 0x61, 0x73, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x73, 0x6f, 0x6c, - 0x69, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x6e, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, - 0x6e, 0x20, 0x77, 0x3d, 0x22, 0x33, 0x38, 0x31, 0x30, 0x30, 0x22, 0x20, - 0x63, 0x61, 0x70, 0x3d, 0x22, 0x66, 0x6c, 0x61, 0x74, 0x22, 0x20, 0x63, - 0x6d, 0x70, 0x64, 0x3d, 0x22, 0x73, 0x6e, 0x67, 0x22, 0x20, 0x61, 0x6c, - 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x74, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, - 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, - 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x70, 0x72, 0x73, 0x74, 0x44, - 0x61, 0x73, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x73, 0x6f, 0x6c, - 0x69, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x6e, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x6e, - 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, 0x74, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, - 0x68, 0x64, 0x77, 0x20, 0x62, 0x6c, 0x75, 0x72, 0x52, 0x61, 0x64, 0x3d, - 0x22, 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, 0x73, 0x74, - 0x3d, 0x22, 0x32, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, 0x72, - 0x3d, 0x22, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x72, - 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x3d, - 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, - 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x20, 0x76, - 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x38, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, - 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6f, 0x75, - 0x74, 0x65, 0x72, 0x53, 0x68, 0x64, 0x77, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, - 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6f, 0x75, 0x74, 0x65, 0x72, - 0x53, 0x68, 0x64, 0x77, 0x20, 0x62, 0x6c, 0x75, 0x72, 0x52, 0x61, 0x64, - 0x3d, 0x22, 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, 0x73, - 0x74, 0x3d, 0x22, 0x32, 0x33, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, - 0x72, 0x3d, 0x22, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, - 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, - 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, - 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x20, - 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x72, 0x67, - 0x62, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6f, - 0x75, 0x74, 0x65, 0x72, 0x53, 0x68, 0x64, 0x77, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, - 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, 0x74, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, - 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, - 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, - 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6f, 0x75, 0x74, 0x65, - 0x72, 0x53, 0x68, 0x64, 0x77, 0x20, 0x62, 0x6c, 0x75, 0x72, 0x52, 0x61, - 0x64, 0x3d, 0x22, 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, - 0x73, 0x74, 0x3d, 0x22, 0x32, 0x33, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, - 0x69, 0x72, 0x3d, 0x22, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, - 0x20, 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, 0x70, - 0x65, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, - 0x3d, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, 0x30, 0x30, 0x30, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x72, - 0x67, 0x62, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x68, 0x64, 0x77, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, 0x74, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x33, 0x64, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x20, 0x70, - 0x72, 0x73, 0x74, 0x3d, 0x22, 0x6f, 0x72, 0x74, 0x68, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x22, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x72, 0x6f, 0x74, 0x20, 0x6c, - 0x61, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6c, 0x6f, 0x6e, 0x3d, 0x22, - 0x30, 0x22, 0x20, 0x72, 0x65, 0x76, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, - 0x69, 0x67, 0x20, 0x72, 0x69, 0x67, 0x3d, 0x22, 0x74, 0x68, 0x72, 0x65, - 0x65, 0x50, 0x74, 0x22, 0x20, 0x64, 0x69, 0x72, 0x3d, 0x22, 0x74, 0x22, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x72, 0x6f, 0x74, 0x20, - 0x6c, 0x61, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6c, 0x6f, 0x6e, 0x3d, - 0x22, 0x30, 0x22, 0x20, 0x72, 0x65, 0x76, 0x3d, 0x22, 0x31, 0x32, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, - 0x3a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x69, 0x67, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x33, 0x64, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x73, 0x70, 0x33, 0x64, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x62, - 0x65, 0x76, 0x65, 0x6c, 0x54, 0x20, 0x77, 0x3d, 0x22, 0x36, 0x33, 0x35, - 0x30, 0x30, 0x22, 0x20, 0x68, 0x3d, 0x22, 0x32, 0x35, 0x34, 0x30, 0x30, - 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x70, 0x33, 0x64, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, - 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, - 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x62, 0x67, 0x46, 0x69, 0x6c, 0x6c, 0x53, 0x74, - 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, - 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, - 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x6f, - 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x72, 0x61, - 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, - 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, - 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, - 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, - 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, - 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, - 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, - 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, - 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x3d, - 0x22, 0x34, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x68, 0x61, 0x64, 0x65, 0x20, - 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x39, 0x39, 0x30, 0x30, 0x30, 0x22, 0x2f, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, - 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, - 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x31, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, - 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x68, 0x61, - 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x32, 0x30, 0x30, 0x30, - 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, - 0x22, 0x32, 0x35, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, - 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x70, 0x61, 0x74, 0x68, 0x20, 0x70, 0x61, 0x74, 0x68, 0x3d, - 0x22, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, - 0x61, 0x3a, 0x66, 0x69, 0x6c, 0x6c, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x74, - 0x20, 0x6c, 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x74, - 0x3d, 0x22, 0x2d, 0x38, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x72, 0x3d, - 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x62, 0x3d, 0x22, 0x31, - 0x38, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x70, 0x61, 0x74, 0x68, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, 0x46, - 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, 0x46, 0x69, 0x6c, - 0x6c, 0x20, 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, - 0x70, 0x65, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, - 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, - 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, - 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x74, 0x69, - 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x38, 0x30, 0x30, 0x30, - 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, - 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, - 0x22, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, - 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, - 0x3d, 0x22, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, - 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, - 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, - 0x73, 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, - 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, - 0x61, 0x6c, 0x3d, 0x22, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, - 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, - 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x70, 0x61, 0x74, 0x68, 0x20, 0x70, 0x61, - 0x74, 0x68, 0x3d, 0x22, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x22, 0x3e, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x69, 0x6c, 0x6c, 0x54, 0x6f, 0x52, - 0x65, 0x63, 0x74, 0x20, 0x6c, 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, - 0x22, 0x20, 0x74, 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, - 0x72, 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x62, 0x3d, - 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, - 0x3a, 0x70, 0x61, 0x74, 0x68, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, - 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x62, 0x67, 0x46, 0x69, 0x6c, 0x6c, 0x53, - 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x66, 0x6d, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, - 0x74, 0x68, 0x65, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2f, - 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x43, 0x6c, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x4c, 0x73, - 0x74, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x61, 0x3a, 0x74, 0x68, 0x65, - 0x6d, 0x65, 0x3e, 0x0d, 0x0a - }}; - - return std::string(theme1_xml.begin(), theme1_xml.end()); } } diff --git a/tests/runner-autogen.cpp b/tests/runner-autogen.cpp index 9a491b27..edc6ea4c 100644 --- a/tests/runner-autogen.cpp +++ b/tests/runner-autogen.cpp @@ -329,43 +329,6 @@ public: void runTest() { suite_test_chart.test_write_chart_scatter(); } } testDescription_suite_test_chart_test_write_chart_scatter; -#include "C:\Users\Thomas\Development\xlnt\tests\test_dump.hpp" - -static test_dump suite_test_dump; - -static CxxTest::List Tests_test_dump = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_dump( "../../tests/test_dump.hpp", 9, "test_dump", suite_test_dump, Tests_test_dump ); - -static class TestDescription_suite_test_dump_test_dump_sheet_title : public CxxTest::RealTestDescription { -public: - TestDescription_suite_test_dump_test_dump_sheet_title() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 12, "test_dump_sheet_title" ) {} - void runTest() { suite_test_dump.test_dump_sheet_title(); } -} testDescription_suite_test_dump_test_dump_sheet_title; - -static class TestDescription_suite_test_dump_test_dump_sheet : public CxxTest::RealTestDescription { -public: - TestDescription_suite_test_dump_test_dump_sheet() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 24, "test_dump_sheet" ) {} - void runTest() { suite_test_dump.test_dump_sheet(); } -} testDescription_suite_test_dump_test_dump_sheet; - -static class TestDescription_suite_test_dump_test_table_builder : public CxxTest::RealTestDescription { -public: - TestDescription_suite_test_dump_test_table_builder() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 116, "test_table_builder" ) {} - void runTest() { suite_test_dump.test_table_builder(); } -} testDescription_suite_test_dump_test_table_builder; - -static class TestDescription_suite_test_dump_test_dump_twice : public CxxTest::RealTestDescription { -public: - TestDescription_suite_test_dump_test_dump_twice() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 137, "test_dump_twice" ) {} - void runTest() { suite_test_dump.test_dump_twice(); } -} testDescription_suite_test_dump_test_dump_twice; - -static class TestDescription_suite_test_dump_test_append_after_save : public CxxTest::RealTestDescription { -public: - TestDescription_suite_test_dump_test_append_after_save() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 153, "test_append_after_save" ) {} - void runTest() { suite_test_dump.test_append_after_save(); } -} testDescription_suite_test_dump_test_append_after_save; - #include "C:\Users\Thomas\Development\xlnt\tests\test_named_range.hpp" static test_named_range suite_test_named_range; @@ -882,125 +845,119 @@ public: static test_workbook suite_test_workbook; static CxxTest::List Tests_test_workbook = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_workbook( "../../tests/test_workbook.hpp", 9, "test_workbook", suite_test_workbook, Tests_test_workbook ); +CxxTest::StaticSuiteDescription suiteDescription_test_workbook( "../../tests/test_workbook.hpp", 10, "test_workbook", suite_test_workbook, Tests_test_workbook ); static class TestDescription_suite_test_workbook_test_get_active_sheet : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_get_active_sheet() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 12, "test_get_active_sheet" ) {} + TestDescription_suite_test_workbook_test_get_active_sheet() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 13, "test_get_active_sheet" ) {} void runTest() { suite_test_workbook.test_get_active_sheet(); } } testDescription_suite_test_workbook_test_get_active_sheet; static class TestDescription_suite_test_workbook_test_create_sheet : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_create_sheet() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 19, "test_create_sheet" ) {} + TestDescription_suite_test_workbook_test_create_sheet() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 20, "test_create_sheet" ) {} void runTest() { suite_test_workbook.test_create_sheet(); } } testDescription_suite_test_workbook_test_create_sheet; static class TestDescription_suite_test_workbook_test_create_sheet_with_name : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_create_sheet_with_name() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 26, "test_create_sheet_with_name" ) {} + TestDescription_suite_test_workbook_test_create_sheet_with_name() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 27, "test_create_sheet_with_name" ) {} void runTest() { suite_test_workbook.test_create_sheet_with_name(); } } testDescription_suite_test_workbook_test_create_sheet_with_name; -static class TestDescription_suite_test_workbook_test_create_sheet_readonly : public CxxTest::RealTestDescription { -public: - TestDescription_suite_test_workbook_test_create_sheet_readonly() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 33, "test_create_sheet_readonly" ) {} - void runTest() { suite_test_workbook.test_create_sheet_readonly(); } -} testDescription_suite_test_workbook_test_create_sheet_readonly; - static class TestDescription_suite_test_workbook_test_remove_sheet : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_remove_sheet() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 39, "test_remove_sheet" ) {} + TestDescription_suite_test_workbook_test_remove_sheet() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 34, "test_remove_sheet" ) {} void runTest() { suite_test_workbook.test_remove_sheet(); } } testDescription_suite_test_workbook_test_remove_sheet; static class TestDescription_suite_test_workbook_test_get_sheet_by_name : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_get_sheet_by_name() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 51, "test_get_sheet_by_name" ) {} + TestDescription_suite_test_workbook_test_get_sheet_by_name() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 46, "test_get_sheet_by_name" ) {} void runTest() { suite_test_workbook.test_get_sheet_by_name(); } } testDescription_suite_test_workbook_test_get_sheet_by_name; static class TestDescription_suite_test_workbook_test_getitem : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_getitem() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 61, "test_getitem" ) {} + TestDescription_suite_test_workbook_test_getitem() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 56, "test_getitem" ) {} void runTest() { suite_test_workbook.test_getitem(); } } testDescription_suite_test_workbook_test_getitem; static class TestDescription_suite_test_workbook_test_get_index2 : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_get_index2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 73, "test_get_index2" ) {} + TestDescription_suite_test_workbook_test_get_index2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 68, "test_get_index2" ) {} void runTest() { suite_test_workbook.test_get_index2(); } } testDescription_suite_test_workbook_test_get_index2; static class TestDescription_suite_test_workbook_test_get_sheet_names : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_get_sheet_names() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 81, "test_get_sheet_names" ) {} + TestDescription_suite_test_workbook_test_get_sheet_names() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 76, "test_get_sheet_names" ) {} void runTest() { suite_test_workbook.test_get_sheet_names(); } } testDescription_suite_test_workbook_test_get_sheet_names; static class TestDescription_suite_test_workbook_test_get_active_sheet2 : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_get_active_sheet2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 99, "test_get_active_sheet2" ) {} + TestDescription_suite_test_workbook_test_get_active_sheet2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 94, "test_get_active_sheet2" ) {} void runTest() { suite_test_workbook.test_get_active_sheet2(); } } testDescription_suite_test_workbook_test_get_active_sheet2; static class TestDescription_suite_test_workbook_test_create_sheet2 : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_create_sheet2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 106, "test_create_sheet2" ) {} + TestDescription_suite_test_workbook_test_create_sheet2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 101, "test_create_sheet2" ) {} void runTest() { suite_test_workbook.test_create_sheet2(); } } testDescription_suite_test_workbook_test_create_sheet2; static class TestDescription_suite_test_workbook_test_create_sheet_with_name2 : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_create_sheet_with_name2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 113, "test_create_sheet_with_name2" ) {} + TestDescription_suite_test_workbook_test_create_sheet_with_name2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 108, "test_create_sheet_with_name2" ) {} void runTest() { suite_test_workbook.test_create_sheet_with_name2(); } } testDescription_suite_test_workbook_test_create_sheet_with_name2; static class TestDescription_suite_test_workbook_test_get_sheet_by_name2 : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_get_sheet_by_name2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 120, "test_get_sheet_by_name2" ) {} + TestDescription_suite_test_workbook_test_get_sheet_by_name2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 115, "test_get_sheet_by_name2" ) {} void runTest() { suite_test_workbook.test_get_sheet_by_name2(); } } testDescription_suite_test_workbook_test_get_sheet_by_name2; static class TestDescription_suite_test_workbook_test_get_index : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_get_index() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 130, "test_get_index" ) {} + TestDescription_suite_test_workbook_test_get_index() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 125, "test_get_index" ) {} void runTest() { suite_test_workbook.test_get_index(); } } testDescription_suite_test_workbook_test_get_index; static class TestDescription_suite_test_workbook_test_add_named_range : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_add_named_range() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 138, "test_add_named_range" ) {} + TestDescription_suite_test_workbook_test_add_named_range() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 133, "test_add_named_range" ) {} void runTest() { suite_test_workbook.test_add_named_range(); } } testDescription_suite_test_workbook_test_add_named_range; static class TestDescription_suite_test_workbook_test_get_named_range2 : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_get_named_range2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 147, "test_get_named_range2" ) {} + TestDescription_suite_test_workbook_test_get_named_range2() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 142, "test_get_named_range2" ) {} void runTest() { suite_test_workbook.test_get_named_range2(); } } testDescription_suite_test_workbook_test_get_named_range2; static class TestDescription_suite_test_workbook_test_remove_named_range : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_remove_named_range() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 157, "test_remove_named_range" ) {} + TestDescription_suite_test_workbook_test_remove_named_range() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 152, "test_remove_named_range" ) {} void runTest() { suite_test_workbook.test_remove_named_range(); } } testDescription_suite_test_workbook_test_remove_named_range; static class TestDescription_suite_test_workbook_test_add_local_named_range : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_add_local_named_range() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 167, "test_add_local_named_range" ) {} + TestDescription_suite_test_workbook_test_add_local_named_range() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 162, "test_add_local_named_range" ) {} void runTest() { suite_test_workbook.test_add_local_named_range(); } } testDescription_suite_test_workbook_test_add_local_named_range; static class TestDescription_suite_test_workbook_test_write_regular_date : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_write_regular_date() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 177, "test_write_regular_date" ) {} + TestDescription_suite_test_workbook_test_write_regular_date() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 172, "test_write_regular_date" ) {} void runTest() { suite_test_workbook.test_write_regular_date(); } } testDescription_suite_test_workbook_test_write_regular_date; static class TestDescription_suite_test_workbook_test_write_regular_float : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_workbook_test_write_regular_float() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 195, "test_write_regular_float" ) {} + TestDescription_suite_test_workbook_test_write_regular_float() : CxxTest::RealTestDescription( Tests_test_workbook, suiteDescription_test_workbook, 190, "test_write_regular_float" ) {} void runTest() { suite_test_workbook.test_write_regular_float(); } } testDescription_suite_test_workbook_test_write_regular_float; diff --git a/tests/test_dump.hpp b/tests/test_dump.hpp deleted file mode 100644 index d2eedd43..00000000 --- a/tests/test_dump.hpp +++ /dev/null @@ -1,169 +0,0 @@ -#pragma once - -#include -#include - -#include "helpers/temporary_file.hpp" -#include - -class test_dump : public CxxTest::TestSuite -{ -public: - void test_dump_sheet_title() - { - xlnt::workbook wb(xlnt::optimization::write); - auto ws = wb.create_sheet("Test1"); - wb.save(temp_file.GetFilename()); - xlnt::workbook wb2; - wb2.load(temp_file.GetFilename()); - ws = wb2.get_sheet_by_name("Test1"); - TS_ASSERT_DIFFERS(ws, nullptr); - TS_ASSERT_EQUALS("Test1", ws.get_title()); - } - - void test_dump_sheet() - { - xlnt::workbook wb(xlnt::optimization::write); - auto ws = wb.create_sheet("test"); - - std::vector letters; - for(int i = 0; i < 20; i++) - { - letters.push_back(xlnt::cell_reference::column_string_from_index(i + 1)); - } - - for(int row = 0; row < 20; row++) - { - std::vector current_row; - for(auto letter : letters) - { - current_row.push_back(letter + std::to_string(row + 1)); - } - ws.append(current_row); - } - - for(int row = 0; row < 20; row++) - { - std::vector current_row; - for(auto letter : letters) - { - current_row.push_back(row + 21); - } - ws.append(current_row); - } - - for(int row = 0; row < 10; row++) - { - std::vector current_row; - for(std::size_t x = 0; x < letters.size(); x++) - { - current_row.push_back(xlnt::date(2010 + (int)x, 5, row + 1)); - } - ws.append(current_row); - } - - for(int row = 0; row < 20; row++) - { - std::vector current_row; - for(auto letter : letters) - { - current_row.push_back("=" + letter + std::to_string(row + 51)); - } - ws.append(current_row); - } - - auto test_filename = temp_file.GetFilename(); - wb.save(test_filename); - - xlnt::workbook wb2; - wb2.load(test_filename); - ws = wb.get_sheet_by_name("test"); - - for(auto row : ws.rows()) - { - for(auto cell : row) - { - auto row_number = cell.get_row(); - - if (row_number <= 20) - { - std::string expected = cell.get_reference().to_string(); - TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::string); - TS_ASSERT_EQUALS(cell, expected); - } - else if (row_number <= 40) - { - TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::numeric); - TS_ASSERT_EQUALS(cell, (int)row_number); - } - else if (row_number <= 50) - { - xlnt::date expected(2010 + cell.get_reference().get_column_index(), 5, row_number - 40); - TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::numeric); - TS_ASSERT(cell.is_date()); - TS_ASSERT_EQUALS(cell, expected); - } - else - { - std::string expected = "=" + cell.get_reference().to_string(); - TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::formula); - TS_ASSERT_EQUALS(cell, expected); - } - } - } - } - - void test_table_builder() - { - static const std::vector> result = {{"a", 0}, {"b", 1}, {"c", 2}, {"d", 3}}; - xlnt::string_table_builder sb; - - for(auto pair : result) - { - for(int i = 0; i < 5; i++) - { - sb.add(pair.first); - } - } - - auto table = sb.get_table(); - - for(auto pair : result) - { - TS_ASSERT_EQUALS(pair.second, table[pair.first]); - } - } - - void test_dump_twice() - { - xlnt::workbook wb(xlnt::optimization::write); - auto test_filename = temp_file.GetFilename(); - - auto ws = wb.create_sheet(); - - std::vector to_append = {"hello"}; - ws.append(to_append); - - wb.save(test_filename); - std::remove(test_filename.c_str()); - - TS_ASSERT_THROWS(wb.save(test_filename), xlnt::workbook_already_saved); - } - - void test_append_after_save() - { - xlnt::workbook wb(xlnt::optimization::write); - auto ws = wb.create_sheet(); - - std::vector to_append = {"hello"}; - ws.append(to_append); - - wb.save(temp_file.GetFilename()); - std::remove(temp_file.GetFilename().c_str()); - - TS_ASSERT_THROWS(ws.append(to_append), xlnt::workbook_already_saved); - } - -private: - TemporaryFile temp_file; -}; diff --git a/tests/test_workbook.hpp b/tests/test_workbook.hpp index 05376a74..3e58d0a1 100644 --- a/tests/test_workbook.hpp +++ b/tests/test_workbook.hpp @@ -5,6 +5,7 @@ #include #include +#include "helpers\temporary_file.hpp" class test_workbook : public CxxTest::TestSuite { @@ -30,12 +31,6 @@ public: TS_ASSERT_EQUALS(new_sheet, wb[0]); } - void test_create_sheet_readonly() - { - xlnt::workbook wb(xlnt::optimization::read); - TS_ASSERT_THROWS_ANYTHING(wb.create_sheet()); - } - void test_remove_sheet() { xlnt::workbook wb; diff --git a/tests/test_write.hpp b/tests/test_write.hpp index 5ac08d3d..d8d2df67 100644 --- a/tests/test_write.hpp +++ b/tests/test_write.hpp @@ -51,7 +51,7 @@ public: void test_write_string_table() { std::vector table = {"hello", "world", "nice"}; - auto content = xlnt::writer::write_string_table(table); + auto content = xlnt::writer::write_shared_strings(table); TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sharedStrings.xml", content)); } @@ -128,7 +128,7 @@ public: ws.get_cell("A2") = "test"; ws.get_cell("A2").set_hyperlink("http://test2.com/"); TS_ASSERT_EQUALS(2, ws.get_relationships().size()); - auto content = xlnt::writer::write_worksheet_rels(ws, 1, 1); + auto content = xlnt::writer::write_worksheet_rels(ws); TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_hyperlink.xml.rels", content)); }