From 09b4a705a9251d54e797eb75db1f3d4687829a24 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Wed, 16 Apr 2025 19:48:37 -0500 Subject: [PATCH] Squashed 'deps/nostalgia/' changes from ab11b885..3fe62464 3fe62464 [nostalgia/sample_project] Add NS_Logo32 db55fc72 [nostalgia/player] Cleanup 20944508 [studio] Cleanup 889bec04 [nostalgia/gfx/studio/tilesheet] Cleanup ac1e34d4 [nostalgia] Update release notes 55ed75f4 [nostalgia/gfx/studio/tilesheet] Fix selection clearing to work when clicking outside image 2751872c [nostalgia] Cleanup file-to-cpp output 2a3cd35c [nostalgia] Fix release notes version, add d2025.02.1 b66f459f [nostalgia] Cleanup icon rsrc generation 3910f4e7 [nostalgia] Fix debug and gba-run commands in Makefile c0e96216 [turbine] Make accessor functions take const ref to Context f9512d72 [turbine/glfw] Fix implicit conversion b7f2c169 [nostalgia/studio/gfx] Fix typo 1e5057d6 [nostalgia] Add app icon note to release notes c6255e32 [nostalgia/studio] Add icon 16 src 02230ef6 [turbine,studio,nostalgia/studio] Add support for window icon scaling, expand icons sizes for Nostalgia Studio 9b6b60e4 [turbine] Cleanup b9a26ab6 [turbine] Fix GLFWimage member init order a521887d [studio,turbine] Add support for window icons 5ca7e2f2 [ox/fs] Cleanup 125a235d [ox/fs] Cleanup 91a7129f [nostalgia/gfx/keel] Cleanup df48a232 [nostalgia/studio] Add icon to Windows executable git-subtree-dir: deps/nostalgia git-subtree-split: 3fe62464c3ee45055e8c732840f949cdf373ae2a --- Makefile | 10 +- deps/buildcore/scripts/file-to-cpp.py | 30 - .../src/ox/fs/filestore/filestoretemplate.hpp | 6 +- deps/ox/src/ox/fs/filesystem/filesystem.hpp | 27 +- release-notes.md | 12 +- sample_project/TileSheets/NS_Logo16.nts | 269 +++ sample_project/TileSheets/NS_Logo32.nts | 1039 ++++++++++++ .../modules/gfx/src/keel/typeconv.cpp | 4 +- .../tilesheeteditor/tilesheeteditor-imgui.cpp | 4 +- .../tilesheeteditor/tilesheeteditor-imgui.hpp | 5 +- .../tilesheeteditor/tilesheeteditormodel.cpp | 10 +- .../tilesheeteditor/tilesheeteditormodel.hpp | 2 +- src/nostalgia/player/app.cpp | 8 +- src/nostalgia/studio/CMakeLists.txt | 6 +- src/nostalgia/studio/icondata.cpp | 1495 +++++++++++++++++ src/nostalgia/studio/ns.rc | 1 + src/nostalgia/studio/ns_logo.ico | Bin 0 -> 165635 bytes src/nostalgia/studio/ns_logo1080.png | Bin 0 -> 851 bytes src/nostalgia/studio/ns_logo16.png | Bin 0 -> 134 bytes src/nostalgia/studio/ns_logo24.png | Bin 0 -> 149 bytes src/nostalgia/studio/ns_logo264.png | Bin 0 -> 275 bytes src/nostalgia/studio/ns_logo32.png | Bin 0 -> 4249 bytes src/nostalgia/studio/ns_logo40.png | Bin 0 -> 334 bytes src/nostalgia/studio/ns_logo48.png | Bin 0 -> 163 bytes src/nostalgia/studio/rsrc.json | 39 + src/olympic/studio/applib/src/app.cpp | 4 + .../include/studio/selectiontracker.hpp | 6 - src/olympic/turbine/include/turbine/gfx.hpp | 10 +- src/olympic/turbine/src/gba/gfx.cpp | 8 +- src/olympic/turbine/src/glfw/CMakeLists.txt | 1 + src/olympic/turbine/src/glfw/gfx.cpp | 42 +- util/scripts/file-to-cpp.py | 114 ++ 32 files changed, 3065 insertions(+), 87 deletions(-) delete mode 100755 deps/buildcore/scripts/file-to-cpp.py create mode 100644 sample_project/TileSheets/NS_Logo16.nts create mode 100644 sample_project/TileSheets/NS_Logo32.nts create mode 100644 src/nostalgia/studio/icondata.cpp create mode 100644 src/nostalgia/studio/ns.rc create mode 100644 src/nostalgia/studio/ns_logo.ico create mode 100644 src/nostalgia/studio/ns_logo1080.png create mode 100644 src/nostalgia/studio/ns_logo16.png create mode 100644 src/nostalgia/studio/ns_logo24.png create mode 100644 src/nostalgia/studio/ns_logo264.png create mode 100644 src/nostalgia/studio/ns_logo32.png create mode 100644 src/nostalgia/studio/ns_logo40.png create mode 100644 src/nostalgia/studio/ns_logo48.png create mode 100644 src/nostalgia/studio/rsrc.json create mode 100755 util/scripts/file-to-cpp.py diff --git a/Makefile b/Makefile index 5e5c49c..83654e0 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,11 @@ PROJECT_PLAYER=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP} .PHONY: pkg-gba pkg-gba: build - ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME} + ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME_CAP} + +.PHONY: generate-studio-rsrc +generate-studio-rsrc: + ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/nostalgia/studio/rsrc.json .PHONY: build-player build-player: @@ -28,10 +32,10 @@ run-studio: build ${PROJECT_STUDIO} .PHONY: gba-run gba-run: pkg-gba - ${MGBA} ${BC_VAR_PROJECT_NAME}.gba + ${MGBA} ${BC_VAR_PROJECT_NAME_CAP}.gba .PHONY: debug debug: build - ${BC_CMD_HOST_DEBUGGER} ./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME} sample_project + ${BC_CMD_HOST_DEBUGGER} ${PROJECT_PLAYER} sample_project .PHONY: debug-studio debug-studio: build ${BC_CMD_HOST_DEBUGGER} ${PROJECT_STUDIO} diff --git a/deps/buildcore/scripts/file-to-cpp.py b/deps/buildcore/scripts/file-to-cpp.py deleted file mode 100755 index 057976a..0000000 --- a/deps/buildcore/scripts/file-to-cpp.py +++ /dev/null @@ -1,30 +0,0 @@ -#! /usr/bin/env python3 - -# -# Copyright 2016 - 2025 gary@drinkingtea.net -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# - -import argparse -import sys - - -def main() -> int: - parser = argparse.ArgumentParser() - parser.add_argument('--file', help='path to file') - parser.add_argument('--out-cpp', help='path to output cpp file') - parser.add_argument('--out-hpp', help='path to output hpp file') - parser.add_argument('--namespace', help='path to output hpp file') - args = parser.parse_args() - return 0 - - -if __name__ == '__main__': - try: - err = main() - sys.exit(err) - except KeyboardInterrupt: - sys.exit(1) diff --git a/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp b/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp index 392b249..dd75728 100644 --- a/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp +++ b/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp @@ -433,14 +433,14 @@ Error FileStoreTemplate::resize() { template Error FileStoreTemplate::resize(std::size_t size, void *newBuff) { if (m_buffer->size() > size) { - return ox::Error(1); + return ox::Error{1, "new buffer is too small for existing data"}; } m_buffSize = static_cast(size); if (newBuff) { - m_buffer = reinterpret_cast(newBuff); + m_buffer = static_cast(newBuff); OX_RETURN_ERROR(m_buffer->setSize(static_cast(size))); } - return ox::Error(0); + return {}; } template diff --git a/deps/ox/src/ox/fs/filesystem/filesystem.hpp b/deps/ox/src/ox/fs/filesystem/filesystem.hpp index fc7459e..d53feea 100644 --- a/deps/ox/src/ox/fs/filesystem/filesystem.hpp +++ b/deps/ox/src/ox/fs/filesystem/filesystem.hpp @@ -20,7 +20,7 @@ namespace ox { namespace detail { -static inline void fsBuffFree(char *buff) noexcept { +inline void fsBuffFree(char *buff) noexcept { safeDelete(buff); } } @@ -49,11 +49,11 @@ class FileSystem { Result read(StringViewCR path) noexcept; - inline Error read(StringViewCR path, void *buffer, std::size_t buffSize) noexcept { + Error read(StringViewCR path, void *buffer, std::size_t buffSize) noexcept { return readFilePath(path, buffer, buffSize); } - inline Error read(uint64_t inode, void *buffer, std::size_t buffSize) noexcept { + Error read(uint64_t inode, void *buffer, std::size_t buffSize) noexcept { return readFileInode(inode, buffer, buffSize); } @@ -69,8 +69,7 @@ class FileSystem { * @param path * @param readStart * @param readSize - * @param buffer - * @param size + * @param buff * @return error or number of bytes read */ Result read( @@ -102,36 +101,36 @@ class FileSystem { Error write(const FileAddress &addr, const void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept; - inline Error write(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept { + Error write(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept { return writeFilePath(path, buffer, size, fileType); } - inline Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept { + Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept { return writeFileInode(inode, buffer, size, fileType); } - inline Result stat(uint64_t inode) const noexcept { + Result stat(uint64_t inode) const noexcept { return statInode(inode); } - inline Result stat(StringViewCR path) const noexcept { + Result stat(StringViewCR path) const noexcept { return statPath(path); } Result stat(const FileAddress &addr) const noexcept; [[nodiscard]] - inline bool exists(uint64_t inode) const noexcept { + bool exists(uint64_t inode) const noexcept { return statInode(inode).ok(); } [[nodiscard]] - inline bool exists(ox::StringView path) const noexcept { + bool exists(ox::StringView path) const noexcept { return statPath(path).ok(); } [[nodiscard]] - inline bool exists(FileAddress const&addr) const noexcept { + bool exists(FileAddress const&addr) const noexcept { return stat(addr).ok(); } @@ -178,11 +177,11 @@ class MemFS: public FileSystem { public: Result directAccess(const FileAddress &addr) const noexcept; - inline Result directAccess(StringViewCR path) const noexcept { + Result directAccess(StringViewCR path) const noexcept { return directAccessPath(path); } - inline Result directAccess(uint64_t inode) const noexcept { + Result directAccess(uint64_t inode) const noexcept { return directAccessInode(inode); } diff --git a/release-notes.md b/release-notes.md index 003c2e5..9ad0165 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,4 +1,14 @@ -# d2025.02 +# d2025.04.0 + +* Add app icon for both window and file +* Fix selection clearing in TileSheet editor to work when clicking outside + image. + +# d2025.02.1 + +* Fix closing tab with unsaved changes (a44c5acc4b) + +# d2025.02.0 * Rename core namespace to gfx. * Add PaletteV5 to accommodate namespace change. diff --git a/sample_project/TileSheets/NS_Logo16.nts b/sample_project/TileSheets/NS_Logo16.nts new file mode 100644 index 0000000..4049fc1 --- /dev/null +++ b/sample_project/TileSheets/NS_Logo16.nts @@ -0,0 +1,269 @@ +K1;e7ae945e-d6c5-4444-5738-be95b4e5937a;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{ + "bpp" : 4, + "defaultPalette" : "uuid://c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed", + "subsheet" : + { + "columns" : 2, + "name" : "Root", + "pixels" : + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 2, + 3, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 3, + 2, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "rows" : 2 + } +} \ No newline at end of file diff --git a/sample_project/TileSheets/NS_Logo32.nts b/sample_project/TileSheets/NS_Logo32.nts new file mode 100644 index 0000000..0aa8ad8 --- /dev/null +++ b/sample_project/TileSheets/NS_Logo32.nts @@ -0,0 +1,1039 @@ +K1;d432168e-52cf-4071-ee35-d4d2542afab4;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{ + "bpp" : 4, + "defaultPalette" : "uuid://c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed", + "idIt" : 2, + "subsheet" : + { + "columns" : 4, + "id" : 1, + "name" : "Root", + "pixels" : + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 2, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "rows" : 4 + } +} \ No newline at end of file diff --git a/src/nostalgia/modules/gfx/src/keel/typeconv.cpp b/src/nostalgia/modules/gfx/src/keel/typeconv.cpp index c2448e4..927c167 100644 --- a/src/nostalgia/modules/gfx/src/keel/typeconv.cpp +++ b/src/nostalgia/modules/gfx/src/keel/typeconv.cpp @@ -183,8 +183,8 @@ ox::Error TileSheetV4ToTileSheetV5Converter::convert( keel::Context&, TileSheetV4 &src, TileSheetV5 &dst) const noexcept { - dst.bpp = src.bpp; - dst.idIt = src.idIt; + dst.bpp = src.bpp; + dst.idIt = src.idIt; OX_RETURN_ERROR(src.defaultPalette.getPath().moveTo(dst.defaultPalette)); convertSubsheet(dst.bpp, src.subsheet, dst.subsheet); return {}; diff --git a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp index 6e94845..de2e598 100644 --- a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp +++ b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp @@ -96,7 +96,7 @@ TileSheetEditorImGui::TileSheetEditorImGui(studio::StudioContext &sctx, ox::Stri m_model{m_view.model()} { // connect signal/slots m_subsheetEditor.inputSubmitted.connect(this, &TileSheetEditorImGui::updateActiveSubsheet); - m_exportMenu.inputSubmitted.connect(this, &TileSheetEditorImGui::exportSubhseetToPng); + m_exportMenu.inputSubmitted.connect(this, &TileSheetEditorImGui::exportSubsheetToPng); // load config auto const&config = studio::readConfig( keelCtx(m_sctx), itemPath()); @@ -397,7 +397,7 @@ void TileSheetEditorImGui::showSubsheetEditor() noexcept { } } -ox::Error TileSheetEditorImGui::exportSubhseetToPng(int const scale) const noexcept { +ox::Error TileSheetEditorImGui::exportSubsheetToPng(int const scale) const noexcept { OX_REQUIRE(path, studio::saveFile({{"PNG", "png"}})); // subsheet to png auto const&s = m_model.activeSubSheet(); diff --git a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp index f338408..9895e71 100644 --- a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp +++ b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp @@ -10,7 +10,6 @@ #include #include -#include "tilesheetpixelgrid.hpp" #include "tilesheetpixels.hpp" #include "tilesheeteditorview.hpp" @@ -91,7 +90,7 @@ class TileSheetEditorImGui: public studio::Editor { private: void showSubsheetEditor() noexcept; - ox::Error exportSubhseetToPng(int scale) const noexcept; + ox::Error exportSubsheetToPng(int scale) const noexcept; void drawTileSheet(ox::Vec2 const&fbSize) noexcept; @@ -99,8 +98,6 @@ class TileSheetEditorImGui: public studio::Editor { ox::Error updateActiveSubsheet(ox::StringView const&name, int cols, int rows) noexcept; - // slots - private: void setActiveSubsheet(TileSheet::SubSheetIdx path) noexcept; }; diff --git a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.cpp b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.cpp index 80c6768..5178e50 100644 --- a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.cpp +++ b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.cpp @@ -120,7 +120,7 @@ bool TileSheetEditorModel::acceptsClipboardPayload() const noexcept { return cb.ok(); } -ox::StringView TileSheetEditorModel::palPath() const noexcept { +ox::String const &TileSheetEditorModel::palPath() const & noexcept { return m_palPath; } @@ -263,7 +263,13 @@ ox::Error TileSheetEditorModel::rotateRight() noexcept { } void TileSheetEditorModel::setSelection(studio::Selection const&sel) noexcept { - m_selection.emplace(sel); + auto const &ss = activeSubSheet(); + if (sel.a.x < ss.columns * TileWidth && sel.a.y < ss.rows * TileHeight) { + m_selection.emplace(sel); + } else { + m_selTracker.finishSelection(); + m_selection.reset(); + } m_updated = true; } diff --git a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.hpp b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.hpp index f1c60a5..a373597 100644 --- a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.hpp +++ b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.hpp @@ -62,7 +62,7 @@ class TileSheetEditorModel: public ox::SignalHandler { constexpr Palette const&pal() const noexcept; [[nodiscard]] - ox::StringView palPath() const noexcept; + ox::String const &palPath() const & noexcept; ox::Error setPalette(ox::StringViewCR path) noexcept; diff --git a/src/nostalgia/player/app.cpp b/src/nostalgia/player/app.cpp index f658004..f43a6bf 100644 --- a/src/nostalgia/player/app.cpp +++ b/src/nostalgia/player/app.cpp @@ -64,13 +64,10 @@ static void testKeyEventHandler(turbine::Context &tctx, turbine::Key key, bool d [[maybe_unused]] static ox::Error runTest(turbine::Context &tctx) { - constexpr ox::StringView TileSheetAddr{"/TileSheets/Charset.nts"}; - constexpr ox::StringView PaletteAddr{"/Palettes/Chester.npal"}; OX_REQUIRE_M(cctx, gfx::init(tctx)); turbine::setApplicationData(tctx, cctx.get()); - OX_REQUIRE(tsStat, turbine::rom(tctx)->stat(PaletteAddr)); - OX_RETURN_ERROR(gfx::loadSpriteTileSheet(*cctx, TileSheetAddr)); - OX_RETURN_ERROR(gfx::loadSpritePalette(*cctx, PaletteAddr)); + OX_RETURN_ERROR(gfx::loadSpriteTileSheet(*cctx, "/TileSheets/Charset.nts")); + OX_RETURN_ERROR(gfx::loadSpritePalette(*cctx, "/Palettes/Chester.npal")); OX_RETURN_ERROR(gfx::initConsole(*cctx)); gfx::puts(*cctx, 10, 9, "DOPENESS!!!"); turbine::setUpdateHandler(tctx, testUpdateHandler); @@ -86,7 +83,6 @@ static ox::Error runTileSheetSetTest(turbine::Context &tctx) { constexpr ox::StringView PaletteAddr{"/Palettes/Charset.npal"}; OX_REQUIRE_M(cctx, gfx::init(tctx)); turbine::setApplicationData(tctx, cctx.get()); - OX_REQUIRE(tsStat, turbine::rom(tctx)->stat(PaletteAddr)); gfx::TileSheetSet const set{ .bpp = 4, .entries = { diff --git a/src/nostalgia/studio/CMakeLists.txt b/src/nostalgia/studio/CMakeLists.txt index 3a5a25a..3057fc5 100644 --- a/src/nostalgia/studio/CMakeLists.txt +++ b/src/nostalgia/studio/CMakeLists.txt @@ -1,4 +1,8 @@ -add_executable(NostalgiaStudio WIN32 MACOSX_BUNDLE) +add_executable( + NostalgiaStudio WIN32 MACOSX_BUNDLE + ns.rc + icondata.cpp +) target_link_libraries( NostalgiaStudio diff --git a/src/nostalgia/studio/icondata.cpp b/src/nostalgia/studio/icondata.cpp new file mode 100644 index 0000000..6b45658 --- /dev/null +++ b/src/nostalgia/studio/icondata.cpp @@ -0,0 +1,1495 @@ +// Generated + +#include +#include + +namespace studio { + +static constexpr ox::Array WindowIcon16Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x10, 0x02, 0x03, 0x00, 0x00, 0x00, 0x62, + 0x9d, 0x17, 0xf2, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x00, + 0x35, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0x4d, 0xcc, 0xbd, + 0x09, 0x00, 0x20, 0x0c, 0x44, 0xe1, 0x27, 0xc4, 0x46, 0x9b, + 0x1b, 0xc9, 0x11, 0x1c, 0xd1, 0xd1, 0x1c, 0xc5, 0x60, 0xf0, + 0xe7, 0x2b, 0x1e, 0xa4, 0xc8, 0x11, 0x52, 0xf3, 0x98, 0x4e, + 0xae, 0x0c, 0x1d, 0x95, 0x69, 0xa8, 0x0e, 0x8b, 0xf3, 0xf3, + 0x3e, 0xf6, 0x80, 0x5b, 0x80, 0x0c, 0x03, 0x3a, 0x59, 0xa5, + 0x8f, 0x74, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon16() noexcept { return WindowIcon16Data; } + +static constexpr ox::Array WindowIcon24Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x18, 0x02, 0x03, 0x00, 0x00, 0x00, 0x9d, + 0x19, 0xd5, 0x6b, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x00, + 0x44, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0x7d, 0x8e, 0xc1, + 0x09, 0x00, 0x21, 0x0c, 0x04, 0xf7, 0x20, 0xaf, 0x7b, 0x6d, + 0x1d, 0x77, 0x4d, 0x58, 0xaa, 0x4f, 0x4b, 0xb3, 0x0c, 0xd7, + 0x10, 0x24, 0x3e, 0x74, 0x44, 0x26, 0x84, 0x2c, 0x09, 0x16, + 0x4f, 0x71, 0x19, 0x5d, 0xb4, 0xac, 0x33, 0x33, 0xa5, 0x6f, + 0x78, 0x2b, 0xa8, 0xf7, 0x75, 0xd5, 0xc4, 0xdf, 0xa4, 0x68, + 0xc6, 0xc8, 0x9d, 0x7d, 0x5f, 0x1c, 0x91, 0x52, 0x03, 0xcf, + 0xfb, 0x05, 0x88, 0xa2, 0x8c, 0xe5, 0xd5, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon24() noexcept { return WindowIcon24Data; } + +static constexpr ox::Array WindowIcon32Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x20, 0x02, 0x03, 0x00, 0x00, 0x00, 0x0e, + 0x14, 0x92, 0x67, 0x00, 0x00, 0x00, 0xc2, 0x7a, 0x54, 0x58, + 0x74, 0x52, 0x61, 0x77, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x78, 0xda, 0x6d, 0x50, 0xdb, 0x0d, + 0xc3, 0x20, 0x0c, 0xfc, 0xf7, 0x14, 0x1d, 0x01, 0x3f, 0x20, + 0x66, 0x1c, 0xd2, 0xa4, 0x52, 0x37, 0xe8, 0xf8, 0x35, 0xd8, + 0x89, 0x42, 0xd3, 0x43, 0x9c, 0x9f, 0x3a, 0x8c, 0x61, 0xff, + 0xbc, 0x5f, 0xf0, 0xe8, 0x20, 0x14, 0x90, 0xbc, 0x68, 0xa9, + 0xa5, 0x24, 0x83, 0x54, 0xa9, 0xd4, 0xcc, 0xd1, 0xe4, 0x68, + 0x83, 0x31, 0xc9, 0xe0, 0x01, 0x8a, 0x92, 0xc5, 0x53, 0x1e, + 0xce, 0x02, 0x59, 0x8a, 0xcd, 0xb2, 0x87, 0x5a, 0xa2, 0xff, + 0xc8, 0xe3, 0x29, 0xe0, 0xa6, 0x99, 0x97, 0x2f, 0x42, 0xfa, + 0x8c, 0xc2, 0x3a, 0x17, 0xaa, 0x84, 0xbe, 0xfe, 0x08, 0xc5, + 0xcb, 0xdc, 0x27, 0xea, 0xfe, 0x16, 0x42, 0x35, 0x84, 0x98, + 0xbc, 0x80, 0x21, 0xd0, 0xfc, 0x5b, 0xa9, 0x54, 0x5d, 0xae, + 0x5f, 0x58, 0xf7, 0x34, 0x43, 0xfd, 0x42, 0x27, 0xd1, 0x79, + 0xec, 0x5b, 0xbc, 0xd8, 0xf6, 0xb6, 0x6c, 0xef, 0x30, 0xd1, + 0xce, 0xc8, 0xc9, 0x98, 0x59, 0x7d, 0x00, 0xee, 0x37, 0x03, + 0x37, 0x73, 0xc4, 0x18, 0x19, 0x7b, 0xa3, 0x9d, 0x66, 0x4d, + 0x65, 0xe4, 0x31, 0xc4, 0x6c, 0x21, 0xff, 0xf6, 0x74, 0x00, + 0xbe, 0xd8, 0xb1, 0x59, 0x09, 0x0b, 0x87, 0x2e, 0x13, 0x00, + 0x00, 0x01, 0x83, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, + 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, + 0x78, 0x9c, 0x7d, 0x91, 0x3d, 0x48, 0xc3, 0x40, 0x1c, 0xc5, + 0x5f, 0xd3, 0x6a, 0x45, 0x2a, 0x0e, 0x76, 0x10, 0x71, 0x08, + 0x58, 0x9d, 0xec, 0xa2, 0x22, 0x8e, 0xa5, 0x8a, 0x45, 0xb0, + 0x50, 0xda, 0x0a, 0xad, 0x3a, 0x98, 0x5c, 0xfa, 0x05, 0x4d, + 0x1a, 0x92, 0x14, 0x17, 0x47, 0xc1, 0xb5, 0xe0, 0xe0, 0xc7, + 0x62, 0xd5, 0xc1, 0xc5, 0x59, 0x57, 0x07, 0x57, 0x41, 0x10, + 0xfc, 0x00, 0x71, 0x17, 0x9c, 0x14, 0x5d, 0xa4, 0xc4, 0xff, + 0x25, 0x85, 0x16, 0x31, 0x1e, 0x1c, 0xf7, 0xe3, 0xdd, 0xbd, + 0xc7, 0xdd, 0x3b, 0x40, 0x68, 0x56, 0x99, 0x6a, 0x06, 0x62, + 0x80, 0xaa, 0x59, 0x46, 0x3a, 0x11, 0x17, 0x73, 0xf9, 0x55, + 0x31, 0xf8, 0x8a, 0x00, 0x42, 0xf0, 0x63, 0x0c, 0xbd, 0x12, + 0x33, 0xf5, 0x64, 0x66, 0x31, 0x0b, 0xcf, 0xf1, 0x75, 0x0f, + 0x1f, 0x5f, 0xef, 0xa2, 0x3c, 0xcb, 0xfb, 0xdc, 0x9f, 0x63, + 0x40, 0x29, 0x98, 0x0c, 0xf0, 0x89, 0xc4, 0x31, 0xa6, 0x1b, + 0x16, 0xf1, 0x06, 0xf1, 0xec, 0xa6, 0xa5, 0x73, 0xde, 0x27, + 0x0e, 0xb3, 0xb2, 0xa4, 0x10, 0x9f, 0x13, 0x4f, 0x1a, 0x74, + 0x41, 0xe2, 0x47, 0xae, 0xcb, 0x2e, 0xbf, 0x71, 0x2e, 0x39, + 0x2c, 0xf0, 0xcc, 0xb0, 0x91, 0x4d, 0xcf, 0x13, 0x87, 0x89, + 0xc5, 0x52, 0x17, 0xcb, 0x5d, 0xcc, 0xca, 0x86, 0x4a, 0x3c, + 0x43, 0x1c, 0x51, 0x54, 0x8d, 0xf2, 0x85, 0x9c, 0xcb, 0x0a, + 0xe7, 0x2d, 0xce, 0x6a, 0xb5, 0xce, 0xda, 0xf7, 0xe4, 0x2f, + 0x0c, 0x15, 0xb4, 0x95, 0x0c, 0xd7, 0x69, 0x8e, 0x22, 0x81, + 0x25, 0x24, 0x91, 0x82, 0x08, 0x19, 0x75, 0x54, 0x50, 0x85, + 0x85, 0x28, 0xad, 0x1a, 0x29, 0x26, 0xd2, 0xb4, 0x1f, 0xf7, + 0xf0, 0x8f, 0x38, 0xfe, 0x14, 0xb9, 0x64, 0x72, 0x55, 0xc0, + 0xc8, 0xb1, 0x80, 0x1a, 0x54, 0x48, 0x8e, 0x1f, 0xfc, 0x0f, + 0x7e, 0x77, 0x6b, 0x16, 0xa7, 0xa7, 0xdc, 0xa4, 0x50, 0x1c, + 0xe8, 0x79, 0xb1, 0xed, 0x8f, 0x71, 0x20, 0xb8, 0x0b, 0xb4, + 0x1a, 0xb6, 0xfd, 0x7d, 0x6c, 0xdb, 0xad, 0x13, 0xc0, 0xff, + 0x0c, 0x5c, 0x69, 0x1d, 0x7f, 0xad, 0x09, 0xcc, 0x7d, 0x92, + 0xde, 0xe8, 0x68, 0x91, 0x23, 0x60, 0x70, 0x1b, 0xb8, 0xb8, + 0xee, 0x68, 0xf2, 0x1e, 0x70, 0xb9, 0x03, 0x0c, 0x3f, 0xe9, + 0x92, 0x21, 0x39, 0x92, 0x9f, 0xa6, 0x50, 0x2c, 0x02, 0xef, + 0x67, 0xf4, 0x4d, 0x79, 0x60, 0xe8, 0x16, 0xe8, 0x5f, 0x73, + 0x7b, 0x6b, 0xef, 0xe3, 0xf4, 0x01, 0xc8, 0x52, 0x57, 0xcb, + 0x37, 0xc0, 0xc1, 0x21, 0x30, 0x51, 0xa2, 0xec, 0x75, 0x8f, + 0x77, 0xf7, 0x75, 0xf7, 0xf6, 0xef, 0x99, 0x76, 0x7f, 0x3f, + 0x56, 0x49, 0x72, 0x9b, 0x36, 0xb9, 0xdb, 0x07, 0x00, 0x00, + 0x0d, 0x76, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, + 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3f, + 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, + 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, + 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, + 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, + 0x3e, 0x0a, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, + 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, + 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, + 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x34, 0x2e, 0x34, 0x2e, + 0x30, 0x2d, 0x45, 0x78, 0x69, 0x76, 0x32, 0x22, 0x3e, 0x0a, + 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, + 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, + 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, + 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, + 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, + 0x74, 0x45, 0x76, 0x74, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x23, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, + 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, + 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x47, 0x49, 0x4d, 0x50, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x67, 0x69, 0x6d, 0x70, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x78, 0x6d, 0x70, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, + 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, + 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, + 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x67, + 0x69, 0x6d, 0x70, 0x3a, 0x64, 0x6f, 0x63, 0x69, 0x64, 0x3a, + 0x67, 0x69, 0x6d, 0x70, 0x3a, 0x64, 0x31, 0x66, 0x35, 0x65, + 0x32, 0x30, 0x66, 0x2d, 0x30, 0x66, 0x31, 0x34, 0x2d, 0x34, + 0x31, 0x35, 0x66, 0x2d, 0x62, 0x36, 0x35, 0x35, 0x2d, 0x62, + 0x37, 0x65, 0x63, 0x63, 0x63, 0x38, 0x38, 0x65, 0x33, 0x62, + 0x32, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, + 0x64, 0x3a, 0x32, 0x36, 0x35, 0x63, 0x31, 0x61, 0x36, 0x39, + 0x2d, 0x30, 0x34, 0x36, 0x64, 0x2d, 0x34, 0x31, 0x37, 0x64, + 0x2d, 0x39, 0x37, 0x34, 0x32, 0x2d, 0x33, 0x61, 0x39, 0x31, + 0x37, 0x63, 0x30, 0x66, 0x30, 0x30, 0x36, 0x62, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x4f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, + 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x64, 0x63, 0x34, + 0x35, 0x63, 0x36, 0x31, 0x63, 0x2d, 0x62, 0x38, 0x36, 0x39, + 0x2d, 0x34, 0x66, 0x32, 0x31, 0x2d, 0x38, 0x62, 0x65, 0x61, + 0x2d, 0x66, 0x39, 0x35, 0x35, 0x65, 0x35, 0x63, 0x31, 0x33, + 0x62, 0x63, 0x66, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x63, + 0x3a, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x3d, 0x22, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x3a, 0x41, 0x50, + 0x49, 0x3d, 0x22, 0x32, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x47, 0x49, 0x4d, 0x50, 0x3a, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x3d, 0x22, 0x57, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x73, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, + 0x4d, 0x50, 0x3a, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x6d, 0x70, 0x3d, 0x22, 0x31, 0x37, 0x34, 0x34, 0x34, 0x32, + 0x38, 0x39, 0x36, 0x33, 0x38, 0x37, 0x36, 0x32, 0x34, 0x37, + 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x3a, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x32, + 0x2e, 0x31, 0x30, 0x2e, 0x33, 0x38, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31, + 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, + 0x3d, 0x22, 0x47, 0x49, 0x4d, 0x50, 0x20, 0x32, 0x2e, 0x31, + 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x3a, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, + 0x74, 0x65, 0x3d, 0x22, 0x32, 0x30, 0x32, 0x35, 0x3a, 0x30, + 0x34, 0x3a, 0x31, 0x31, 0x54, 0x32, 0x32, 0x3a, 0x33, 0x36, + 0x3a, 0x30, 0x31, 0x2d, 0x30, 0x35, 0x3a, 0x30, 0x30, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3d, 0x22, + 0x32, 0x30, 0x32, 0x35, 0x3a, 0x30, 0x34, 0x3a, 0x31, 0x31, + 0x54, 0x32, 0x32, 0x3a, 0x33, 0x36, 0x3a, 0x30, 0x31, 0x2d, + 0x30, 0x35, 0x3a, 0x30, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x6c, 0x69, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x3d, 0x22, 0x73, 0x61, 0x76, 0x65, 0x64, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, + 0x76, 0x74, 0x3a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x3d, 0x22, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, + 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x62, 0x39, 0x32, + 0x61, 0x61, 0x63, 0x38, 0x66, 0x2d, 0x34, 0x30, 0x37, 0x64, + 0x2d, 0x34, 0x39, 0x33, 0x64, 0x2d, 0x62, 0x62, 0x31, 0x33, + 0x2d, 0x35, 0x38, 0x36, 0x31, 0x33, 0x30, 0x32, 0x66, 0x66, + 0x31, 0x36, 0x35, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x73, 0x6f, 0x66, + 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x3d, 0x22, 0x47, 0x69, 0x6d, 0x70, 0x20, 0x32, 0x2e, 0x31, + 0x30, 0x20, 0x28, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, + 0x29, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, + 0x74, 0x45, 0x76, 0x74, 0x3a, 0x77, 0x68, 0x65, 0x6e, 0x3d, + 0x22, 0x32, 0x30, 0x32, 0x35, 0x2d, 0x30, 0x34, 0x2d, 0x31, + 0x31, 0x54, 0x32, 0x32, 0x3a, 0x33, 0x36, 0x3a, 0x30, 0x33, + 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x3e, 0x0a, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, + 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x77, 0x22, + 0x3f, 0x3e, 0x1b, 0x35, 0x9e, 0x89, 0x00, 0x00, 0x00, 0x0c, + 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, + 0x40, 0x40, 0xa0, 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, + 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, + 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, + 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, + 0xe9, 0x04, 0x0c, 0x03, 0x24, 0x03, 0x28, 0x6e, 0xf7, 0xd7, + 0x00, 0x00, 0x00, 0x41, 0x49, 0x44, 0x41, 0x54, 0x18, 0xd3, + 0x63, 0x60, 0x40, 0x02, 0x8c, 0x0e, 0xe8, 0x0c, 0x11, 0x11, + 0x28, 0xc3, 0x81, 0x11, 0x27, 0x83, 0x04, 0x10, 0x02, 0x22, + 0x44, 0x81, 0xe6, 0x33, 0x30, 0x68, 0xad, 0x00, 0x1a, 0x81, + 0x60, 0x00, 0xed, 0x59, 0xf5, 0x0a, 0x68, 0x1f, 0x88, 0xb1, + 0x7a, 0x15, 0x88, 0x81, 0xa9, 0x06, 0xae, 0x9d, 0x54, 0x80, + 0xc7, 0xf1, 0x70, 0x0f, 0x62, 0xfa, 0x1d, 0x0c, 0x00, 0x4b, + 0x12, 0x0b, 0x32, 0x88, 0xee, 0x7e, 0x62, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon32() noexcept { return WindowIcon32Data; } + +static constexpr ox::Array WindowIcon40Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x00, 0x28, 0x08, 0x03, 0x00, 0x00, 0x00, 0xbb, + 0x20, 0x48, 0x5f, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, + 0x42, 0x01, 0xd9, 0xc9, 0x2c, 0x7f, 0x00, 0x00, 0x00, 0x04, + 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, + 0x61, 0x05, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, + 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, + 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, + 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, + 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x0c, + 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, + 0x40, 0x40, 0xa0, 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, + 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, + 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, + 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, + 0xe9, 0x04, 0x0c, 0x03, 0x00, 0x24, 0x7c, 0x8c, 0xa3, 0x1a, + 0x00, 0x00, 0x00, 0x8c, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, + 0xdd, 0x94, 0xe1, 0x0e, 0x80, 0x20, 0x08, 0x84, 0xf1, 0xde, + 0xff, 0xa1, 0xc3, 0xcc, 0x25, 0x42, 0x7a, 0x36, 0xff, 0x14, + 0x9b, 0x35, 0xc7, 0x37, 0x20, 0xa0, 0x13, 0x79, 0x6f, 0x50, + 0xa3, 0xc0, 0xa4, 0xc6, 0xc4, 0x4b, 0x09, 0xf9, 0xcc, 0xf3, + 0x66, 0x46, 0x1f, 0x98, 0xc7, 0x6b, 0xdf, 0x23, 0xb0, 0x16, + 0xba, 0x09, 0x94, 0x5a, 0x1b, 0xd9, 0xa1, 0x4f, 0xdb, 0x60, + 0x0d, 0x8c, 0x4b, 0xbb, 0xf7, 0xd4, 0x36, 0xe3, 0x42, 0x77, + 0x6b, 0xf7, 0xec, 0x74, 0x41, 0x82, 0x29, 0x00, 0x96, 0xbc, + 0xa7, 0x05, 0xcf, 0xe5, 0x20, 0x70, 0x9b, 0x02, 0x53, 0x5e, + 0xe1, 0x2c, 0x78, 0x21, 0x0e, 0x2c, 0x5c, 0x04, 0x76, 0xa9, + 0x0b, 0xe7, 0x53, 0xd3, 0x1f, 0xb3, 0xd0, 0x1e, 0xba, 0xe1, + 0xfc, 0x08, 0xff, 0xbb, 0xc2, 0xdc, 0xef, 0xba, 0x5f, 0x29, + 0x68, 0x91, 0xa2, 0x65, 0x8f, 0x17, 0x52, 0x5e, 0x9a, 0x17, + 0xc4, 0x3e, 0xb6, 0x03, 0x4e, 0x6b, 0x01, 0xa7, 0x1c, 0x52, + 0x2e, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon40() noexcept { return WindowIcon40Data; } + +static constexpr ox::Array WindowIcon48Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x30, 0x02, 0x03, 0x00, 0x00, 0x00, 0x2a, + 0x6c, 0x11, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x00, + 0x52, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xbd, 0x92, 0xb1, + 0x0e, 0x80, 0x40, 0x08, 0x43, 0x5d, 0x6e, 0xf1, 0xeb, 0xfa, + 0x89, 0xce, 0x5d, 0xfc, 0x3f, 0x27, 0x05, 0xe3, 0x40, 0xa4, + 0x18, 0x6f, 0xa0, 0xc9, 0xe5, 0x78, 0x0c, 0xa4, 0xa1, 0x2c, + 0x1f, 0x1a, 0x50, 0x80, 0x21, 0xe0, 0x2a, 0xf1, 0x17, 0x5a, + 0xf4, 0xd8, 0xf7, 0x3f, 0x80, 0x3d, 0xf2, 0x36, 0x15, 0xc0, + 0x78, 0xe5, 0xb1, 0x79, 0xfb, 0x0d, 0x3b, 0x13, 0xd0, 0xd3, + 0x0a, 0x07, 0x9d, 0x6b, 0x98, 0xc9, 0x07, 0x2a, 0xed, 0xe2, + 0x42, 0x32, 0x9d, 0xf4, 0x06, 0x18, 0x93, 0x18, 0xd8, 0x5c, + 0xbc, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon48() noexcept { return WindowIcon48Data; } + +static constexpr ox::Array WindowIcon128Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x02, 0x03, 0x00, 0x00, 0x00, 0xbe, + 0x50, 0x89, 0x58, 0x00, 0x00, 0x0e, 0x86, 0x7a, 0x54, 0x58, + 0x74, 0x52, 0x61, 0x77, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x78, 0xda, 0xd5, 0x99, 0x59, 0x72, + 0x1c, 0xbb, 0x92, 0x44, 0xff, 0xb1, 0x8a, 0x5e, 0x02, 0xe6, + 0x00, 0x96, 0x83, 0xd1, 0xac, 0x77, 0xd0, 0xcb, 0xef, 0x13, + 0x40, 0x16, 0x45, 0x52, 0x94, 0xae, 0xa8, 0xfb, 0x7e, 0x1e, + 0xcb, 0xc8, 0xac, 0x21, 0x0b, 0x43, 0x84, 0x87, 0xbb, 0x07, + 0x68, 0xd6, 0xff, 0xfd, 0xef, 0x36, 0xff, 0xc3, 0x4f, 0x14, + 0x89, 0x26, 0x26, 0x29, 0xb9, 0xe6, 0x6c, 0xf9, 0x89, 0x35, + 0x56, 0xdf, 0x78, 0x52, 0xec, 0xfd, 0x69, 0xe7, 0xaf, 0xb3, + 0xf1, 0xfc, 0x3d, 0x3f, 0xaf, 0x8f, 0x78, 0xfd, 0xe1, 0x7d, + 0xf3, 0xf6, 0x81, 0xe7, 0xad, 0xc0, 0x35, 0x3c, 0x5f, 0xc8, + 0xcf, 0xfd, 0xaf, 0xf7, 0xdd, 0xdb, 0x00, 0xf7, 0xd2, 0x78, + 0x96, 0xde, 0x0f, 0x34, 0x9e, 0x0f, 0xfa, 0xc7, 0x0f, 0x6a, + 0x7c, 0xc6, 0x2f, 0x9f, 0x06, 0x7a, 0x26, 0x0a, 0xba, 0x22, + 0xcf, 0x93, 0xf9, 0x0c, 0x54, 0x9f, 0x81, 0x82, 0xbf, 0x1f, + 0xb8, 0x67, 0x80, 0x76, 0xb7, 0x65, 0x73, 0x2d, 0xf2, 0x7e, + 0x0b, 0x7d, 0xdd, 0xeb, 0x7c, 0xed, 0xa4, 0xdc, 0x5f, 0xa3, + 0x7f, 0x82, 0x9c, 0xb1, 0xdf, 0x06, 0xf9, 0xfc, 0x3a, 0x0a, + 0xd1, 0x9b, 0x89, 0x37, 0x83, 0xf7, 0x2b, 0xb8, 0x60, 0xf9, + 0x1b, 0x82, 0xbf, 0x0b, 0x08, 0xfa, 0xeb, 0x4d, 0x68, 0x7c, + 0xe0, 0xcf, 0xdf, 0xca, 0x8d, 0x2e, 0x08, 0xcf, 0x13, 0x8f, + 0xf3, 0xce, 0xb3, 0x12, 0x02, 0xf2, 0x55, 0x9c, 0xde, 0x7e, + 0xb8, 0xcf, 0x6c, 0x5d, 0x6a, 0xfc, 0xf2, 0xa6, 0x0f, 0x59, + 0x79, 0x7b, 0xe6, 0xbe, 0x7e, 0xdf, 0x7c, 0xce, 0x56, 0xf4, + 0xcf, 0x2d, 0xe1, 0x53, 0x90, 0xf3, 0xdb, 0xf5, 0xcb, 0xf7, + 0x8d, 0x4b, 0x5f, 0x67, 0xe5, 0x84, 0xfe, 0xdd, 0xcc, 0xb1, + 0x3c, 0xcf, 0xfc, 0xc7, 0xf7, 0x53, 0x71, 0xcf, 0x8a, 0x3e, + 0x45, 0x5f, 0x7f, 0xf7, 0x9e, 0x65, 0x9f, 0x3d, 0xb3, 0x8b, + 0x16, 0x33, 0xa1, 0xce, 0xcf, 0xa6, 0x5e, 0x5b, 0x39, 0xcf, + 0xb8, 0xaf, 0x33, 0x85, 0x4e, 0x5d, 0x0c, 0x4b, 0xcb, 0x56, + 0xf8, 0x4d, 0x0c, 0x21, 0xe7, 0x51, 0x79, 0x14, 0x50, 0x3d, + 0xc8, 0xda, 0xb4, 0xc3, 0x76, 0x1e, 0xc3, 0x55, 0xe7, 0x49, + 0xd7, 0x76, 0xd1, 0x4d, 0xd7, 0xdc, 0x76, 0xeb, 0x5c, 0x87, + 0x1b, 0x2c, 0x31, 0xfa, 0x65, 0xbc, 0xf0, 0xc4, 0xfb, 0xe1, + 0xc3, 0x79, 0xb3, 0x04, 0xf1, 0xd5, 0x8f, 0xa0, 0xf9, 0x8b, + 0xfa, 0x70, 0xdb, 0x4b, 0xa8, 0x61, 0x86, 0x42, 0x6e, 0xc7, + 0x49, 0x7b, 0x0c, 0xfe, 0x6d, 0x2d, 0xee, 0x4c, 0x5b, 0xed, + 0x30, 0x67, 0xb6, 0xc2, 0xcc, 0xd3, 0x71, 0xab, 0x77, 0x0c, + 0xa6, 0x70, 0xf8, 0xf6, 0xc3, 0x7c, 0xf7, 0x0b, 0x7b, 0x6b, + 0x29, 0x10, 0xe0, 0xf2, 0x16, 0x2b, 0xd6, 0xe5, 0xbd, 0x06, + 0x9b, 0x65, 0x68, 0xe6, 0xf4, 0x2f, 0xb7, 0x91, 0x11, 0xb7, + 0x9f, 0xa0, 0xa6, 0x13, 0xe0, 0xd7, 0xe3, 0xf3, 0x8f, 0xe6, + 0x35, 0x90, 0xc1, 0xa4, 0x51, 0xd6, 0x12, 0xa9, 0x04, 0xb6, + 0xdf, 0x21, 0x7a, 0x72, 0x3f, 0x98, 0x20, 0x9c, 0x44, 0x07, + 0x6e, 0x4c, 0x5c, 0x6f, 0xb9, 0x38, 0x99, 0xcf, 0x00, 0x84, + 0x88, 0xa9, 0x13, 0x8b, 0x71, 0x81, 0x0c, 0x90, 0x35, 0x17, + 0x92, 0xcb, 0xce, 0x8a, 0xf7, 0xe2, 0x1c, 0x81, 0x2c, 0x24, + 0xa8, 0xb1, 0x74, 0x1f, 0xa2, 0xef, 0x64, 0xc0, 0xa5, 0xe4, + 0x27, 0x8b, 0xf4, 0x31, 0x84, 0x4c, 0x6e, 0x8a, 0xd7, 0xa9, + 0xf9, 0x8a, 0xb8, 0x73, 0xab, 0x4f, 0x9e, 0xb7, 0x0d, 0xef, + 0x43, 0x66, 0x64, 0x22, 0x85, 0x4c, 0x9d, 0x15, 0x32, 0xd4, + 0x48, 0x56, 0x8c, 0x09, 0xfc, 0x48, 0x2c, 0x60, 0xa8, 0x51, + 0x7a, 0x31, 0xa5, 0x94, 0x93, 0xa4, 0x92, 0x6a, 0x6a, 0x39, + 0xe4, 0x98, 0x53, 0xce, 0x59, 0xb2, 0x92, 0x62, 0x93, 0x00, + 0x43, 0x4a, 0x92, 0x2c, 0x22, 0x45, 0xaa, 0xb4, 0x12, 0x4a, + 0x2c, 0xa9, 0xe4, 0x22, 0xa5, 0x94, 0x5a, 0x5a, 0xf5, 0x35, + 0x40, 0x9a, 0xa9, 0xe6, 0x2a, 0xb5, 0xd4, 0x5a, 0x5b, 0x63, + 0xce, 0xc6, 0xc8, 0x8d, 0x6f, 0x37, 0x6e, 0x68, 0xad, 0xfb, + 0x1e, 0x7a, 0xec, 0xc9, 0xf4, 0xdc, 0xa5, 0x97, 0x5e, 0x7b, + 0x1b, 0xc0, 0x67, 0xc4, 0x91, 0x46, 0x1e, 0x32, 0xca, 0xa8, + 0xa3, 0x4d, 0x3f, 0xc3, 0x84, 0x3f, 0x66, 0x9e, 0x32, 0xcb, + 0xac, 0xb3, 0x2d, 0xb7, 0x80, 0xd2, 0x8a, 0x2b, 0xad, 0xbc, + 0x64, 0x95, 0x55, 0x57, 0xdb, 0x40, 0x6d, 0x07, 0xb3, 0xe3, + 0x4e, 0x3b, 0x6f, 0xd9, 0x65, 0xd7, 0xdd, 0xde, 0xb2, 0xf6, + 0xa4, 0xf5, 0xa7, 0xc7, 0x37, 0xb2, 0xe6, 0x9e, 0xac, 0xf9, + 0x93, 0x29, 0xbd, 0x51, 0xde, 0xb2, 0xc6, 0xbb, 0x22, 0xaf, + 0x21, 0x9c, 0xd2, 0x49, 0xd2, 0x9c, 0x91, 0x30, 0x6f, 0xa2, + 0x23, 0xe3, 0xa2, 0x29, 0x00, 0xd0, 0x5e, 0x73, 0x66, 0x8b, + 0x8b, 0xd1, 0x6b, 0xe6, 0x34, 0x67, 0xb6, 0x7a, 0xaa, 0x22, + 0x79, 0x16, 0x99, 0x34, 0x67, 0xd3, 0x69, 0xc6, 0xc8, 0x60, + 0x5c, 0xce, 0xa7, 0xed, 0x5e, 0xb9, 0x33, 0xfe, 0x66, 0x54, + 0x33, 0xf7, 0xaf, 0xf2, 0x66, 0x24, 0x7e, 0xc8, 0x9b, 0xff, + 0xdb, 0xcc, 0x19, 0x4d, 0xdd, 0x37, 0x33, 0xf7, 0x73, 0xde, + 0xbe, 0xca, 0xda, 0x54, 0x19, 0x1a, 0x27, 0x63, 0xb7, 0x0a, + 0x35, 0xa8, 0x36, 0x50, 0x7d, 0x1b, 0x92, 0xf3, 0xa5, 0xf9, + 0x3e, 0x3d, 0xcc, 0x53, 0xf4, 0xb9, 0xfd, 0x71, 0x35, 0x9f, + 0xdf, 0xf8, 0xf9, 0xba, 0x46, 0x5f, 0xae, 0xb3, 0x75, 0xe6, + 0x24, 0xb8, 0xbb, 0x94, 0x99, 0x07, 0xe9, 0x2d, 0x32, 0x66, + 0xa9, 0x3d, 0x8c, 0xbc, 0x72, 0xda, 0x66, 0x59, 0x09, 0x7b, + 0x78, 0x7c, 0x80, 0x65, 0xae, 0xd2, 0xf7, 0x72, 0x71, 0x4b, + 0x89, 0x3c, 0x91, 0x11, 0x36, 0x2b, 0xa1, 0xe6, 0xba, 0x5e, + 0x47, 0x9a, 0xc4, 0xbf, 0xb6, 0x92, 0xda, 0x9e, 0x31, 0xf7, + 0x14, 0x56, 0xee, 0x2c, 0x70, 0x55, 0x26, 0x28, 0x26, 0x85, + 0x49, 0x1e, 0xf5, 0xc6, 0xba, 0x21, 0xe1, 0x51, 0x26, 0x2f, + 0xb6, 0x96, 0x79, 0x5a, 0xa1, 0x6f, 0xe7, 0x75, 0xb8, 0xc6, + 0xce, 0x85, 0xe0, 0xe5, 0x99, 0x53, 0x93, 0x18, 0x56, 0x8a, + 0xb1, 0x97, 0x45, 0x8e, 0x83, 0x50, 0xcd, 0x6e, 0x2f, 0x0f, + 0xd5, 0xf6, 0x1a, 0x62, 0x0a, 0xb5, 0xd5, 0xb9, 0x26, 0x1c, + 0xb1, 0x8a, 0xb8, 0x1e, 0x93, 0x23, 0xdd, 0xa5, 0xf8, 0x7f, + 0xde, 0xf9, 0x73, 0x35, 0x7f, 0x7a, 0xe3, 0xa7, 0x6b, 0xef, + 0x5e, 0x37, 0xc0, 0x86, 0x03, 0xcb, 0x94, 0x41, 0xf5, 0x37, + 0xb2, 0xdd, 0xc8, 0xab, 0xcf, 0xab, 0xf0, 0x7c, 0x81, 0x1a, + 0xf4, 0xa1, 0xb4, 0x0d, 0xdc, 0xe7, 0x70, 0x6d, 0x85, 0x7c, + 0xc2, 0x50, 0xc2, 0x3c, 0x11, 0xf3, 0x36, 0x55, 0x81, 0x6f, + 0x4f, 0x00, 0x62, 0x1e, 0x35, 0xb9, 0xd0, 0xea, 0x20, 0x6b, + 0x3b, 0xb3, 0xdd, 0x89, 0x54, 0x50, 0xab, 0x6d, 0x97, 0x94, + 0x35, 0x20, 0x40, 0xd8, 0xaf, 0x0e, 0x1e, 0xc6, 0x5c, 0x31, + 0xf5, 0xe8, 0x88, 0x08, 0x20, 0x9e, 0xb3, 0x23, 0x11, 0xc4, + 0x85, 0x2a, 0x09, 0x95, 0x30, 0x02, 0x30, 0x61, 0x58, 0xe4, + 0x88, 0x6f, 0xeb, 0x04, 0x67, 0xfc, 0xbd, 0xa2, 0xe3, 0x05, + 0xcf, 0x4a, 0x69, 0x61, 0x85, 0x13, 0xfc, 0xe2, 0xe4, 0x24, + 0x0d, 0x88, 0x51, 0x7c, 0x93, 0x9c, 0x4b, 0xaa, 0x27, 0x1d, + 0x7d, 0xae, 0x6a, 0x41, 0xee, 0xf4, 0xbc, 0x56, 0xf2, 0xef, + 0x20, 0x82, 0xfa, 0xdb, 0xe1, 0xde, 0xaf, 0xe6, 0x02, 0x60, + 0x70, 0x5d, 0xde, 0x77, 0xd6, 0xe9, 0x70, 0x87, 0x67, 0x9d, + 0xa5, 0x0b, 0xac, 0xcc, 0x3a, 0x6d, 0x9c, 0x4b, 0x66, 0x8f, + 0xbb, 0xea, 0x3a, 0xd3, 0xec, 0x3d, 0x1a, 0x4f, 0x6a, 0x5d, + 0x4d, 0x5e, 0x90, 0x65, 0x16, 0x8a, 0x00, 0xa6, 0x1d, 0x9b, + 0x0c, 0xb7, 0xce, 0x90, 0x10, 0xc6, 0x00, 0x52, 0xf6, 0xac, + 0xb3, 0x51, 0xaa, 0x2d, 0x10, 0xad, 0xb5, 0x63, 0x24, 0xf7, + 0x43, 0x88, 0x32, 0x5b, 0x9a, 0x3d, 0x55, 0xb3, 0xed, 0xca, + 0x35, 0xf8, 0xd5, 0x82, 0xb4, 0xda, 0xb3, 0x2f, 0x0c, 0xbb, + 0x92, 0xdd, 0x29, 0xdb, 0x3e, 0x6b, 0xd9, 0x68, 0x42, 0x2f, + 0xb3, 0x6d, 0x08, 0xe0, 0xec, 0x95, 0x3c, 0xbd, 0xed, 0xf6, + 0xae, 0xff, 0xee, 0xd8, 0xe8, 0x96, 0x5b, 0x64, 0x5d, 0xa1, + 0xf5, 0xd9, 0x06, 0x2b, 0xb7, 0x8a, 0x21, 0x25, 0x1f, 0x7b, + 0x4a, 0x0b, 0x53, 0xf1, 0x27, 0x57, 0xf3, 0xa7, 0x37, 0x72, + 0x0d, 0x6b, 0x06, 0x7d, 0xba, 0x3d, 0x60, 0x28, 0xa7, 0xee, + 0x52, 0x62, 0x63, 0xab, 0x43, 0x1a, 0xc6, 0x0f, 0x02, 0x9f, + 0xe2, 0xee, 0x63, 0x6e, 0x5f, 0xe7, 0xac, 0x29, 0x86, 0x69, + 0x01, 0x86, 0xcc, 0x15, 0xd2, 0x80, 0x08, 0x61, 0x97, 0xb2, + 0x46, 0x69, 0x79, 0x51, 0x9e, 0x32, 0x32, 0x72, 0xac, 0xa1, + 0x83, 0x30, 0x96, 0x4a, 0x33, 0x81, 0x0b, 0x6d, 0x57, 0xd3, + 0x96, 0x82, 0x14, 0xb6, 0x1d, 0xb1, 0x1e, 0x88, 0x2a, 0x42, + 0x7b, 0x03, 0x22, 0x7d, 0x1d, 0x84, 0x66, 0x2a, 0x58, 0x11, + 0x1a, 0x24, 0x27, 0x10, 0x6a, 0x0f, 0x42, 0x9b, 0x96, 0x76, + 0x75, 0x94, 0xaf, 0xb8, 0xb4, 0x96, 0xa3, 0xfa, 0x7f, 0x9b, + 0xa1, 0x5d, 0xef, 0x3c, 0x37, 0xc8, 0x77, 0x26, 0xaa, 0x52, + 0x6b, 0x01, 0x30, 0xb1, 0x55, 0xe0, 0x46, 0x2d, 0x14, 0x36, + 0x61, 0x12, 0xe0, 0x10, 0x28, 0x60, 0xd4, 0xe6, 0x85, 0x59, + 0x26, 0xb3, 0x68, 0xc2, 0xca, 0x6e, 0xf0, 0xed, 0x8d, 0x87, + 0xb8, 0x27, 0x1e, 0xce, 0xe7, 0x0e, 0x79, 0xfa, 0x3d, 0xf2, + 0x4e, 0xb2, 0x7b, 0x23, 0x1c, 0x05, 0xb0, 0x27, 0x38, 0x7b, + 0x52, 0x88, 0x63, 0xcf, 0xc9, 0x0a, 0x81, 0x1b, 0x95, 0xe3, + 0x89, 0x09, 0xe1, 0x18, 0xb9, 0xce, 0xb1, 0x4b, 0xbf, 0x65, + 0xba, 0x16, 0xae, 0xec, 0xb7, 0x85, 0x6c, 0xfe, 0xa2, 0xf2, + 0x9f, 0x2b, 0xd0, 0x5a, 0x2c, 0x57, 0x83, 0xb1, 0x01, 0xa4, + 0x2d, 0x71, 0xc6, 0x2e, 0xec, 0x27, 0x6f, 0xef, 0xb3, 0xa3, + 0x6c, 0x86, 0x78, 0x36, 0xd0, 0xd7, 0xc9, 0x72, 0x88, 0xa7, + 0xae, 0x0e, 0xc3, 0x12, 0x5a, 0x4d, 0xe2, 0x61, 0x58, 0x37, + 0x16, 0x2c, 0xc7, 0x20, 0x40, 0x1b, 0x69, 0x15, 0x83, 0x0f, + 0x55, 0xe4, 0xfa, 0xe6, 0x2b, 0xe6, 0xd3, 0xef, 0x7c, 0x30, + 0x5e, 0x3e, 0x83, 0x32, 0x10, 0x72, 0x8a, 0x7f, 0x79, 0x3b, + 0x61, 0xe6, 0x50, 0x97, 0x0f, 0xa9, 0x4f, 0x18, 0x97, 0xe9, + 0x31, 0x36, 0x63, 0x9b, 0x40, 0x9d, 0xf4, 0x5d, 0xdc, 0x80, + 0x1b, 0xa0, 0x9c, 0xa1, 0xb4, 0x92, 0x0a, 0xdc, 0xb9, 0x95, + 0x81, 0x5a, 0x04, 0x2a, 0xd8, 0xa3, 0xc2, 0x97, 0xfa, 0x40, + 0xe7, 0x16, 0x95, 0xed, 0x86, 0xa6, 0x93, 0x09, 0x10, 0x35, + 0x9b, 0x18, 0x80, 0x2a, 0x9e, 0x26, 0x17, 0xf7, 0x7d, 0x5e, + 0xfd, 0xe2, 0x6a, 0xda, 0xdf, 0x47, 0xfb, 0xbf, 0x7b, 0xa0, + 0x3f, 0x53, 0x59, 0x15, 0x59, 0xf3, 0xb7, 0x2a, 0x0b, 0xe1, + 0xbe, 0x63, 0x14, 0x6d, 0xb3, 0xde, 0x93, 0xca, 0x3f, 0x70, + 0x4a, 0x7d, 0xe3, 0x14, 0xe4, 0xa4, 0xa0, 0x4e, 0xcc, 0x4d, + 0xf3, 0x09, 0xae, 0xc6, 0xc4, 0xb1, 0x59, 0xda, 0x8f, 0xbe, + 0x2b, 0xc6, 0x06, 0x62, 0x59, 0x3e, 0x15, 0x08, 0x24, 0x9f, + 0x5d, 0x29, 0x21, 0xa3, 0xd9, 0x88, 0x86, 0x73, 0x4b, 0xf9, + 0xb8, 0x4e, 0x4a, 0x00, 0xbd, 0xaf, 0x01, 0x3e, 0x86, 0x7a, + 0xe8, 0xbe, 0x98, 0xed, 0xec, 0xc8, 0x28, 0xac, 0x17, 0xf5, + 0x8b, 0xe5, 0x49, 0xb9, 0xcf, 0x91, 0x18, 0xf0, 0x4b, 0xae, + 0x5d, 0x75, 0xc3, 0x23, 0x3e, 0x13, 0x96, 0x1e, 0x59, 0x53, + 0xae, 0xc0, 0x70, 0xfa, 0x40, 0x81, 0x23, 0xf6, 0xc3, 0x20, + 0x0a, 0x85, 0xc5, 0x66, 0x6e, 0x9c, 0x01, 0xb5, 0x99, 0x95, + 0x26, 0x3b, 0x87, 0xaa, 0x46, 0x08, 0xbd, 0x59, 0xc3, 0xf1, + 0xf6, 0x56, 0xf1, 0xb9, 0x3a, 0xcb, 0x8b, 0x42, 0x1f, 0x30, + 0x4b, 0x68, 0xf9, 0x44, 0x6f, 0x77, 0x3e, 0x8e, 0xd1, 0xf0, + 0xca, 0xb5, 0xd9, 0x57, 0xeb, 0x01, 0x46, 0x4c, 0x63, 0x14, + 0x1c, 0x19, 0xf3, 0x53, 0x52, 0x9d, 0xb5, 0xcf, 0xeb, 0x53, + 0xf2, 0x91, 0xca, 0xb9, 0x57, 0x88, 0x02, 0x5d, 0x11, 0x2a, + 0x7d, 0x1f, 0x66, 0x53, 0xda, 0x75, 0x1d, 0x7e, 0x32, 0x10, + 0x58, 0x63, 0xd4, 0x86, 0x2a, 0x45, 0x71, 0x12, 0x13, 0xec, + 0xd6, 0x3a, 0x0a, 0x95, 0x95, 0x51, 0x73, 0x9c, 0x74, 0x17, + 0x36, 0xcf, 0xea, 0x24, 0x2f, 0xbb, 0x76, 0x0e, 0xa7, 0xd6, + 0x85, 0xd0, 0x8f, 0x94, 0xc3, 0x0f, 0xf6, 0x32, 0xd0, 0xd7, + 0xc5, 0xcd, 0x7b, 0xd5, 0x80, 0x6a, 0x80, 0x02, 0x0d, 0x31, + 0x53, 0xda, 0x0d, 0x93, 0x44, 0xac, 0x6f, 0xab, 0x2b, 0x67, + 0xc8, 0x7b, 0xe1, 0x48, 0x2f, 0x0d, 0xbf, 0xf3, 0x24, 0xd1, + 0xfc, 0x8e, 0x87, 0xdf, 0xd1, 0x70, 0x21, 0x82, 0x4b, 0x34, + 0x1d, 0x45, 0xa4, 0x03, 0x19, 0xab, 0x9c, 0x1a, 0x31, 0x67, + 0x38, 0x53, 0x1f, 0x56, 0x33, 0xca, 0x5f, 0x53, 0xca, 0x2c, + 0x89, 0x20, 0x62, 0x50, 0xb7, 0xa4, 0xbe, 0x12, 0x68, 0x46, + 0x2e, 0xa4, 0x21, 0x96, 0x55, 0xf3, 0xdd, 0x27, 0xb9, 0xc2, + 0x8b, 0x27, 0xfa, 0x20, 0x12, 0x5e, 0x66, 0xe8, 0x60, 0x02, + 0x59, 0x39, 0xfa, 0x0e, 0xa8, 0xab, 0x59, 0x8f, 0x1b, 0x29, + 0x1a, 0xfb, 0xfc, 0x78, 0x91, 0x4e, 0xa7, 0x32, 0x77, 0x61, + 0x7d, 0xe4, 0xe7, 0x45, 0x64, 0xb9, 0xe3, 0x94, 0xe9, 0xaf, + 0x0f, 0x91, 0xe1, 0xea, 0xea, 0xe1, 0x31, 0xab, 0xa5, 0xc3, + 0xa2, 0x8d, 0x0a, 0x0e, 0x7a, 0x0d, 0xe6, 0x27, 0x11, 0xaf, + 0x1f, 0x8d, 0xdf, 0x4f, 0xbe, 0xec, 0xd7, 0xb6, 0xcc, 0x7c, + 0xcf, 0x97, 0xfd, 0xda, 0x96, 0x99, 0xef, 0xf9, 0xb2, 0x5f, + 0xdb, 0x32, 0xf3, 0x3d, 0x5f, 0xf6, 0x6b, 0x5b, 0x66, 0xae, + 0x2f, 0xc3, 0x32, 0xfd, 0x50, 0x9f, 0x7f, 0xd6, 0x9e, 0x97, + 0xf4, 0x74, 0x52, 0x46, 0x33, 0xa7, 0xe1, 0x35, 0x04, 0xe5, + 0xd1, 0xd0, 0xee, 0xae, 0x33, 0xa2, 0xc3, 0x7b, 0xae, 0x0e, + 0x7b, 0xa6, 0x45, 0x75, 0x76, 0x73, 0x4b, 0xea, 0x58, 0x42, + 0x42, 0x4a, 0x3b, 0x5d, 0x8b, 0x4f, 0x3d, 0xcd, 0xe0, 0x1d, + 0x15, 0x9c, 0xcc, 0xec, 0xde, 0x2f, 0x18, 0x66, 0x14, 0x05, + 0x7f, 0xdc, 0xb9, 0x51, 0xab, 0x49, 0xf0, 0xf7, 0xab, 0x00, + 0x87, 0x0e, 0x88, 0x5c, 0x7f, 0x11, 0x42, 0xb7, 0x24, 0xec, + 0x44, 0x05, 0x8b, 0x9f, 0xfa, 0xad, 0x43, 0x3d, 0x9c, 0x40, + 0xb2, 0x2b, 0x85, 0x98, 0x6a, 0x15, 0xa1, 0xbc, 0x20, 0xab, + 0xc1, 0x32, 0xd3, 0x68, 0x9a, 0xa6, 0x00, 0x54, 0xc4, 0x83, + 0x5c, 0x5a, 0xc8, 0x19, 0x81, 0x73, 0xa3, 0x8f, 0x6a, 0x3b, + 0x04, 0xdc, 0xe9, 0xb5, 0x80, 0x03, 0xe0, 0xbf, 0x2c, 0xa0, + 0xd1, 0xf3, 0x3b, 0xfc, 0xde, 0x58, 0x83, 0x5e, 0x92, 0x22, + 0xa0, 0x04, 0x83, 0x8f, 0x98, 0x49, 0xe0, 0x1d, 0xab, 0x1b, + 0x63, 0xb5, 0x69, 0xd1, 0xf4, 0xa4, 0x05, 0x6c, 0xa1, 0xc0, + 0xde, 0x68, 0x49, 0x3a, 0xed, 0xa7, 0x55, 0x06, 0xc2, 0x11, + 0x25, 0xbc, 0xd0, 0xce, 0xc6, 0xae, 0x96, 0xde, 0x53, 0x02, + 0xe1, 0xc8, 0xbd, 0x27, 0x02, 0x49, 0x20, 0x12, 0x5b, 0x81, + 0xff, 0x28, 0x51, 0x28, 0x6a, 0x28, 0x6f, 0x2a, 0x4f, 0x07, + 0xdb, 0x7f, 0x72, 0x85, 0xdd, 0xfc, 0x83, 0xa4, 0x7f, 0xa5, + 0xe8, 0xa7, 0x97, 0x82, 0xba, 0xc2, 0x69, 0xab, 0xea, 0x85, + 0x81, 0xd1, 0xbd, 0x86, 0xf3, 0x11, 0x69, 0x4f, 0x3b, 0x24, + 0xaa, 0xda, 0x25, 0x58, 0x56, 0x70, 0xe6, 0x11, 0xce, 0x53, + 0xfb, 0x12, 0x20, 0x15, 0xb1, 0xfb, 0xea, 0xcb, 0x0b, 0x3f, + 0xde, 0x8e, 0xab, 0x30, 0xe4, 0xc6, 0x03, 0x48, 0xdf, 0xc0, + 0xfa, 0x50, 0xf4, 0x60, 0x44, 0xfc, 0x44, 0xc1, 0x2c, 0xe8, + 0xd9, 0x70, 0xdb, 0x46, 0xb6, 0xa6, 0xed, 0x9d, 0x4e, 0x1a, + 0x65, 0x21, 0x74, 0x2d, 0xaa, 0x41, 0x9b, 0x0d, 0xd3, 0xf3, + 0x53, 0x41, 0x99, 0x4f, 0x15, 0x75, 0xd1, 0x8b, 0xfa, 0x94, + 0x82, 0x85, 0x2d, 0x4b, 0x31, 0x8a, 0x44, 0x66, 0x88, 0xd8, + 0x0d, 0xa8, 0x1f, 0x7d, 0xc3, 0xf5, 0x05, 0x44, 0xcb, 0xd1, + 0x24, 0x8c, 0xe6, 0x16, 0xde, 0x5c, 0x7a, 0x70, 0x66, 0x51, + 0x64, 0x14, 0xfc, 0xed, 0x1b, 0x7e, 0x61, 0x7d, 0x21, 0x08, + 0x5a, 0xf8, 0x48, 0x4e, 0xa5, 0xa7, 0xe2, 0x67, 0xb6, 0xb7, + 0x13, 0xb0, 0xdc, 0xa7, 0xd5, 0xf5, 0x94, 0x88, 0x0d, 0x4f, + 0x23, 0xe0, 0xd3, 0x29, 0xb1, 0x59, 0x55, 0xa2, 0xa9, 0x98, + 0xf5, 0x5a, 0x86, 0xf2, 0xd0, 0x40, 0x01, 0x74, 0x19, 0xa2, + 0x87, 0x70, 0x2c, 0x23, 0x81, 0x83, 0xca, 0x2a, 0x26, 0xac, + 0x20, 0x60, 0xc4, 0x4c, 0xa1, 0x67, 0x58, 0x03, 0xbc, 0xdd, + 0x05, 0x5d, 0x9b, 0xfc, 0x5a, 0xd2, 0xb1, 0xc9, 0xcf, 0xa2, + 0x26, 0xa1, 0xa3, 0x15, 0x86, 0xbb, 0x99, 0xc5, 0x93, 0x5a, + 0xf8, 0x8b, 0x84, 0x58, 0xf2, 0x96, 0xa7, 0x56, 0x3f, 0xf4, + 0xaf, 0x12, 0x01, 0xda, 0x4e, 0x0e, 0x2c, 0x38, 0x04, 0x8c, + 0xd2, 0x75, 0x71, 0x27, 0x62, 0x4d, 0xfa, 0xad, 0xf7, 0xf5, + 0x4c, 0xd4, 0x9e, 0x26, 0x8c, 0x25, 0xab, 0x13, 0x85, 0xfe, + 0x70, 0x6c, 0x43, 0x67, 0x2b, 0xed, 0xc9, 0xf1, 0x07, 0x0f, + 0x71, 0x1d, 0x04, 0xfe, 0x41, 0x83, 0x3e, 0x94, 0xe8, 0x37, + 0x72, 0xcb, 0x6e, 0xc9, 0x70, 0xd7, 0x33, 0x0e, 0xa0, 0x01, + 0xe1, 0x79, 0x94, 0x02, 0xaa, 0xc5, 0x2e, 0x0c, 0x5b, 0xb4, + 0xab, 0x3b, 0x3b, 0xce, 0x18, 0x85, 0xdc, 0x10, 0x0a, 0x81, + 0x2d, 0x9a, 0x23, 0xff, 0xbf, 0x68, 0x95, 0xc2, 0x74, 0x78, + 0xc8, 0x85, 0x6b, 0xe8, 0x64, 0xc0, 0x6f, 0xc3, 0x0e, 0xeb, + 0x2d, 0xc1, 0xac, 0xb6, 0x46, 0xd3, 0x5b, 0xc9, 0xeb, 0x2d, + 0xae, 0x10, 0xe2, 0x98, 0xa7, 0xb8, 0x66, 0x0d, 0xc5, 0x5e, + 0x79, 0xa7, 0x3b, 0x44, 0x9b, 0x90, 0x87, 0xe3, 0x4b, 0x4a, + 0x6e, 0x03, 0x65, 0xa1, 0xa7, 0x8d, 0x77, 0xdf, 0x95, 0x80, + 0xbd, 0xf5, 0x21, 0x36, 0x40, 0x24, 0x39, 0x09, 0xa6, 0xb5, + 0x25, 0x1a, 0x80, 0xac, 0x07, 0xaf, 0x02, 0x7a, 0x36, 0xa9, + 0x8d, 0xca, 0x72, 0xc3, 0x06, 0x98, 0x67, 0xe8, 0x61, 0x02, + 0xb5, 0x19, 0x2f, 0x43, 0x3a, 0x95, 0xad, 0x13, 0x3e, 0xd9, + 0x67, 0x20, 0x8f, 0x97, 0x81, 0xd7, 0x85, 0xc4, 0xc3, 0xd1, + 0xa1, 0x4d, 0xa4, 0xb9, 0xf4, 0xd4, 0x29, 0x9e, 0xea, 0x63, + 0xc1, 0x71, 0xdc, 0xc3, 0x16, 0x77, 0x0e, 0x5b, 0x5a, 0x6a, + 0x8c, 0x64, 0x3c, 0xae, 0xa6, 0xd6, 0x00, 0x45, 0xf4, 0x37, + 0x85, 0xb7, 0x7a, 0x46, 0x41, 0x45, 0x4f, 0x39, 0xa7, 0xbb, + 0xf3, 0x52, 0x24, 0x49, 0x5d, 0x31, 0x68, 0xc2, 0x1a, 0x43, + 0xd1, 0x30, 0x63, 0x53, 0x72, 0x0e, 0xb1, 0xad, 0x8c, 0x8b, + 0x31, 0x1a, 0xca, 0x95, 0x5d, 0xbe, 0x6e, 0x5b, 0xff, 0x61, + 0xf0, 0x76, 0xa5, 0x41, 0xd3, 0xc6, 0xf7, 0x39, 0x1b, 0x29, + 0x24, 0x2e, 0xf7, 0x8c, 0xaa, 0x51, 0xf6, 0x79, 0xc4, 0x59, + 0xf5, 0x6c, 0xe4, 0x94, 0xbb, 0x0d, 0x75, 0x1b, 0x36, 0x16, + 0xa0, 0x29, 0x30, 0x79, 0xe6, 0x7a, 0x20, 0xa3, 0xfc, 0x74, + 0xca, 0x45, 0x21, 0x03, 0x60, 0x68, 0x31, 0x68, 0x59, 0x28, + 0x69, 0xc8, 0x3a, 0x81, 0x48, 0x48, 0xe2, 0xc8, 0x8a, 0x45, + 0x7b, 0x60, 0x72, 0xdb, 0xbd, 0x39, 0xdc, 0x72, 0x80, 0xb6, + 0x54, 0x40, 0xcb, 0xe5, 0x9a, 0xe7, 0x08, 0xa7, 0x3e, 0x3a, + 0x7b, 0x8e, 0x70, 0x94, 0x68, 0x68, 0xc4, 0xca, 0x46, 0x27, + 0x46, 0x4a, 0xca, 0x5f, 0x0d, 0x47, 0xd9, 0xf5, 0xf4, 0xdc, + 0x3b, 0x43, 0x4b, 0x34, 0x9b, 0x55, 0x06, 0x2b, 0xb8, 0x38, + 0x40, 0x7e, 0xd6, 0xc3, 0xf2, 0x9d, 0x1b, 0x30, 0x88, 0xb4, + 0x83, 0x77, 0xfc, 0xc5, 0x1a, 0x51, 0xab, 0x05, 0x3e, 0x38, + 0x60, 0x85, 0x39, 0xd6, 0xad, 0x04, 0x5e, 0x41, 0x1c, 0x46, + 0x0e, 0x99, 0x11, 0x0e, 0xc2, 0xab, 0xb6, 0x81, 0x2f, 0x12, + 0x8e, 0x88, 0x1c, 0x50, 0xb4, 0xac, 0x1f, 0x40, 0x56, 0x3a, + 0x43, 0xe8, 0xb1, 0x61, 0xb8, 0xd6, 0x68, 0x27, 0x10, 0x00, + 0x35, 0x57, 0x02, 0x01, 0x63, 0x4e, 0x35, 0x9d, 0x4b, 0x71, + 0xf4, 0x38, 0x86, 0x97, 0x37, 0x7f, 0x3a, 0x34, 0xb0, 0xa0, + 0xee, 0x1c, 0x97, 0xe3, 0x28, 0x56, 0xfc, 0x91, 0x04, 0xc5, + 0x4f, 0x56, 0xac, 0xa1, 0x92, 0xcc, 0xaa, 0x47, 0x0b, 0xd7, + 0x9c, 0x2b, 0x79, 0x9a, 0x87, 0x3d, 0x35, 0x02, 0x97, 0x3b, + 0x95, 0x39, 0x61, 0x13, 0xfc, 0x79, 0x8a, 0x05, 0xb3, 0x8d, + 0x43, 0xa7, 0xc8, 0xe3, 0x69, 0xfa, 0xdf, 0xfc, 0x39, 0x12, + 0xf6, 0x74, 0xb8, 0x1e, 0xbf, 0x8a, 0x25, 0x4c, 0x86, 0x16, + 0x97, 0xaf, 0xdf, 0x16, 0x17, 0x87, 0x12, 0xbb, 0xd5, 0x0e, + 0x37, 0x68, 0x87, 0xab, 0x5c, 0x9c, 0x02, 0x85, 0xa0, 0x32, + 0x49, 0x99, 0x4a, 0x58, 0xc4, 0x45, 0x3b, 0xfb, 0x6b, 0x72, + 0x8e, 0xcf, 0x23, 0xdc, 0xf8, 0xb3, 0x3c, 0x8d, 0x1a, 0xbd, + 0x2c, 0xf5, 0x18, 0x3d, 0xfa, 0xc7, 0x7c, 0x94, 0xe2, 0x9a, + 0x1c, 0x51, 0x67, 0x8f, 0xcc, 0x8a, 0x3a, 0xfb, 0xe8, 0x86, + 0x1d, 0xad, 0x89, 0x1a, 0x7b, 0xac, 0x1c, 0x22, 0xfd, 0x32, + 0xf6, 0xfd, 0x90, 0xa7, 0x39, 0xec, 0x99, 0xbe, 0x3c, 0x11, + 0xb9, 0x16, 0x3d, 0x81, 0x63, 0x76, 0x4a, 0x51, 0xbb, 0xda, + 0xe4, 0xa5, 0xf0, 0x93, 0x3a, 0x3b, 0x8c, 0x01, 0xd7, 0xa9, + 0x27, 0x6f, 0x86, 0x4a, 0x8e, 0xea, 0x0b, 0xa7, 0x16, 0x6a, + 0x50, 0x8b, 0x3e, 0xd7, 0xb5, 0xe8, 0xeb, 0xa9, 0xbb, 0xae, + 0x75, 0xe7, 0x4e, 0xa9, 0x3c, 0x16, 0xfd, 0x16, 0x8b, 0xbe, + 0x68, 0xc7, 0x94, 0x63, 0xd3, 0xbb, 0x81, 0xc3, 0x07, 0x62, + 0x47, 0x24, 0xd4, 0xa2, 0x4b, 0x7f, 0x59, 0x74, 0xed, 0xb6, + 0x91, 0x4e, 0x25, 0x3b, 0x2c, 0xfa, 0xce, 0x8f, 0x45, 0x57, + 0x5b, 0x54, 0xa9, 0x1b, 0xf2, 0xd6, 0xb1, 0x9a, 0x00, 0xb8, + 0x4d, 0x9a, 0x20, 0x6f, 0xcd, 0x4a, 0xf1, 0x5a, 0xf4, 0x36, + 0x21, 0x8b, 0x47, 0xe1, 0x03, 0x5d, 0x40, 0x45, 0x84, 0x16, + 0x0e, 0x2b, 0x1f, 0x4b, 0xa4, 0x67, 0x20, 0x58, 0x74, 0xb6, + 0xaf, 0x2e, 0xbd, 0x69, 0x0a, 0xe0, 0x8f, 0x9a, 0xca, 0xcb, + 0xa4, 0x9b, 0x77, 0x21, 0x19, 0xfd, 0x34, 0x69, 0x7a, 0x3e, + 0x75, 0xdb, 0x21, 0x97, 0xf5, 0x84, 0xa4, 0x9e, 0x76, 0x28, + 0x94, 0x95, 0xb4, 0x1d, 0x02, 0x3b, 0x6a, 0xb5, 0xaf, 0xd3, + 0x7a, 0x19, 0x7b, 0xbc, 0xb3, 0xb9, 0xce, 0x1e, 0xcd, 0x45, + 0xab, 0xd4, 0xd9, 0xa3, 0xff, 0xbd, 0xa8, 0xb3, 0xc7, 0xa2, + 0x47, 0xd5, 0x3c, 0x5c, 0x0e, 0xea, 0x5d, 0xa9, 0x47, 0xf5, + 0xe6, 0x90, 0x6f, 0x53, 0xe0, 0xaa, 0x35, 0xdf, 0x73, 0x57, + 0xec, 0x7d, 0x05, 0xb4, 0xb2, 0x88, 0x11, 0x22, 0x40, 0xbe, + 0x1b, 0xdd, 0x5a, 0xd9, 0x2a, 0x38, 0x53, 0x9d, 0xaf, 0x3f, + 0xf6, 0x3c, 0x6a, 0xbb, 0x84, 0x6b, 0xd2, 0xff, 0x8f, 0xd8, + 0x8f, 0x6e, 0xf4, 0xea, 0xff, 0xe3, 0x47, 0x71, 0xa3, 0xe6, + 0xe5, 0xcc, 0xaf, 0x1f, 0x89, 0x72, 0x9c, 0x39, 0x88, 0x24, + 0x43, 0x21, 0xd3, 0x9d, 0x89, 0xfa, 0x11, 0x51, 0x67, 0x2e, + 0x60, 0xf1, 0x65, 0xa5, 0xcb, 0x71, 0xe7, 0x8f, 0x7d, 0x04, + 0x04, 0xed, 0x10, 0xdb, 0xbf, 0x3f, 0x3d, 0xe0, 0x6a, 0xfe, + 0x23, 0xbd, 0xfa, 0x7f, 0xdd, 0x40, 0xcf, 0x49, 0x53, 0x74, + 0xe8, 0x3b, 0x34, 0x56, 0xa3, 0xca, 0x06, 0x85, 0x0d, 0x15, + 0x2e, 0x4d, 0xb1, 0x96, 0x8b, 0xac, 0xe7, 0xa8, 0xc9, 0xec, + 0x7b, 0xca, 0x70, 0x79, 0xac, 0x8d, 0x8e, 0xbd, 0x96, 0xc3, + 0x63, 0x4e, 0x4f, 0x19, 0x94, 0xc7, 0xe2, 0x35, 0xe0, 0xa8, + 0x9c, 0x9e, 0x31, 0x01, 0xae, 0x0d, 0x3e, 0xc2, 0x67, 0x3d, + 0x37, 0x2f, 0x41, 0xef, 0xcf, 0x49, 0xd3, 0x6d, 0xd0, 0x0e, + 0x0c, 0x12, 0x0d, 0x5a, 0xa4, 0x42, 0x0e, 0x0c, 0xb6, 0x36, + 0x68, 0x0a, 0x83, 0x83, 0x21, 0xa4, 0x59, 0x4f, 0x12, 0xef, + 0x51, 0x13, 0xc8, 0x28, 0xc1, 0xcc, 0x1c, 0x2d, 0x76, 0x6d, + 0x4e, 0x18, 0x9a, 0x5e, 0x66, 0xd7, 0x92, 0x4f, 0xd5, 0xbb, + 0xad, 0xe7, 0x4c, 0x01, 0xa4, 0xe0, 0xd2, 0xe1, 0x5c, 0xf8, + 0x79, 0xfe, 0xee, 0xa4, 0xc9, 0xfc, 0x47, 0x22, 0xbd, 0x7b, + 0x34, 0x04, 0x4b, 0x71, 0xad, 0x2a, 0x55, 0x66, 0xd2, 0xf3, + 0x51, 0x5c, 0x2e, 0x5e, 0x45, 0x15, 0x9b, 0x8a, 0xa4, 0xd3, + 0x40, 0x38, 0x32, 0x36, 0xc5, 0x4a, 0xf2, 0xd0, 0x02, 0x3d, + 0xd3, 0x94, 0xa6, 0xc7, 0x8d, 0x7a, 0xfc, 0x0a, 0x0d, 0x64, + 0x3d, 0x40, 0xcd, 0x10, 0x9b, 0xd0, 0x7e, 0x1c, 0x29, 0xca, + 0x53, 0xa5, 0x48, 0x82, 0x4a, 0x11, 0xdd, 0xf1, 0x8c, 0xb3, + 0xc3, 0x45, 0x48, 0x91, 0x2f, 0xd2, 0x8e, 0x3f, 0xc4, 0x20, + 0xd6, 0x23, 0x45, 0x47, 0x65, 0xdd, 0x69, 0x83, 0x51, 0xd9, + 0xc3, 0x60, 0xa6, 0x50, 0x43, 0x68, 0xec, 0x21, 0xe0, 0xfe, + 0x22, 0xe0, 0x1f, 0xfc, 0xab, 0x82, 0x77, 0x74, 0xf8, 0x99, + 0x47, 0x25, 0x0f, 0x63, 0x82, 0x73, 0x8d, 0x47, 0xf2, 0xea, + 0x10, 0xaf, 0x92, 0xe7, 0x0c, 0xda, 0x36, 0x54, 0x65, 0xdf, + 0x26, 0xfa, 0x21, 0xe7, 0x54, 0x35, 0x63, 0x5c, 0x25, 0xff, + 0xc1, 0x29, 0x18, 0x00, 0x9a, 0x4e, 0xf8, 0x44, 0x9e, 0x60, + 0x80, 0x04, 0x52, 0x6a, 0x76, 0x47, 0xad, 0x1d, 0x84, 0x4b, + 0xcf, 0x3f, 0xf0, 0x7c, 0x39, 0xc1, 0x3f, 0x09, 0xa4, 0x39, + 0xec, 0x64, 0x3a, 0xd1, 0x38, 0xb2, 0x04, 0x41, 0x11, 0x91, + 0x4e, 0xb3, 0x05, 0x47, 0x2e, 0x3f, 0xae, 0x45, 0x82, 0xba, + 0x1e, 0x66, 0x34, 0xf6, 0x5b, 0xe7, 0xe8, 0xbf, 0xbe, 0x9a, + 0x8f, 0x27, 0x22, 0x1f, 0xdd, 0xfc, 0x77, 0xcc, 0xbc, 0xf9, + 0xd2, 0xcd, 0x47, 0xda, 0xe2, 0x8d, 0x69, 0x49, 0x1a, 0xbf, + 0x59, 0xb4, 0xb3, 0xfa, 0xda, 0x83, 0x3c, 0x16, 0xa4, 0x07, + 0x31, 0xc4, 0xe1, 0x9a, 0x1d, 0xfa, 0x7e, 0x2c, 0x1e, 0x66, + 0x47, 0x48, 0x13, 0x4a, 0x0f, 0x94, 0x61, 0xc7, 0xe2, 0x17, + 0xed, 0x90, 0x1e, 0x05, 0x17, 0x8b, 0x04, 0x10, 0x9a, 0x2d, + 0x7a, 0x58, 0xfe, 0x93, 0x27, 0x37, 0x2f, 0x53, 0x4e, 0x61, + 0x0c, 0xe2, 0x9b, 0x23, 0x35, 0xf5, 0x85, 0x21, 0x7b, 0x9f, + 0x41, 0x9e, 0xff, 0xfc, 0xcf, 0x34, 0xf3, 0xf6, 0xdf, 0xb4, + 0x5f, 0x59, 0xb1, 0xaf, 0x9c, 0xd8, 0x3b, 0x1f, 0x16, 0xf6, + 0x35, 0x61, 0xe6, 0x77, 0x2e, 0xec, 0x3b, 0x26, 0xcc, 0xfc, + 0xce, 0x85, 0x7d, 0xe7, 0x5c, 0xf9, 0xdf, 0x55, 0xff, 0x3b, + 0x97, 0x67, 0xfe, 0xc6, 0xe6, 0x7d, 0xe5, 0xf2, 0xcc, 0xd7, + 0x36, 0xaf, 0xc6, 0xaf, 0x5a, 0xf2, 0x8f, 0x1d, 0xf9, 0xeb, + 0x7f, 0x9d, 0xb4, 0xe2, 0x30, 0xa7, 0x39, 0x86, 0x9e, 0x98, + 0x34, 0x6d, 0x71, 0xd4, 0xd0, 0xe3, 0xc7, 0xb2, 0xa6, 0x9b, + 0x76, 0xfc, 0x36, 0x12, 0xb7, 0xa0, 0x09, 0x56, 0x20, 0x56, + 0x09, 0x58, 0xa1, 0x06, 0xed, 0xa7, 0xf0, 0xfd, 0xb1, 0x1c, + 0xd1, 0x94, 0x54, 0xf3, 0xff, 0xe9, 0xbb, 0xfc, 0xac, 0xad, + 0xc8, 0x54, 0x8d, 0x00, 0x00, 0x01, 0x84, 0x69, 0x43, 0x43, + 0x50, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x00, 0x00, 0x78, 0x9c, 0x7d, 0x91, 0x3d, 0x48, + 0xc3, 0x40, 0x1c, 0xc5, 0x5f, 0x5b, 0xa5, 0x22, 0x15, 0x87, + 0x16, 0x14, 0x71, 0xc8, 0x50, 0x9d, 0xec, 0xa2, 0x52, 0x74, + 0xab, 0x55, 0x28, 0x42, 0x85, 0x50, 0x2b, 0xb4, 0xea, 0x60, + 0x72, 0xe9, 0x17, 0x34, 0x69, 0x48, 0x52, 0x5c, 0x1c, 0x05, + 0xd7, 0x82, 0x83, 0x1f, 0x8b, 0x55, 0x07, 0x17, 0x67, 0x5d, + 0x1d, 0x5c, 0x05, 0x41, 0xf0, 0x03, 0xc4, 0xd1, 0xc9, 0x49, + 0xd1, 0x45, 0x4a, 0xfc, 0x5f, 0x52, 0x68, 0x11, 0xe3, 0xc1, + 0x71, 0x3f, 0xde, 0xdd, 0x7b, 0xdc, 0xbd, 0x03, 0xfc, 0xcd, + 0x2a, 0x53, 0xcd, 0x9e, 0x04, 0xa0, 0x6a, 0x96, 0x91, 0x49, + 0x25, 0x85, 0x5c, 0x7e, 0x55, 0x08, 0xbe, 0x22, 0x84, 0x30, + 0x86, 0x10, 0xc7, 0xac, 0xc4, 0x4c, 0x7d, 0x4e, 0x14, 0xd3, + 0xf0, 0x1c, 0x5f, 0xf7, 0xf0, 0xf1, 0xf5, 0x2e, 0xc6, 0xb3, + 0xbc, 0xcf, 0xfd, 0x39, 0x06, 0x94, 0x82, 0xc9, 0x00, 0x9f, + 0x40, 0x9c, 0x60, 0xba, 0x61, 0x11, 0x6f, 0x10, 0xc7, 0x37, + 0x2d, 0x9d, 0xf3, 0x3e, 0x71, 0x84, 0x95, 0x25, 0x85, 0xf8, + 0x9c, 0x78, 0xc2, 0xa0, 0x0b, 0x12, 0x3f, 0x72, 0x5d, 0x76, + 0xf9, 0x8d, 0x73, 0xc9, 0x61, 0x3f, 0xcf, 0x8c, 0x18, 0xd9, + 0xcc, 0x3c, 0x71, 0x84, 0x58, 0x28, 0x75, 0xb1, 0xdc, 0xc5, + 0xac, 0x6c, 0xa8, 0xc4, 0xd3, 0xc4, 0x51, 0x45, 0xd5, 0x28, + 0xdf, 0x9f, 0x73, 0x59, 0xe1, 0xbc, 0xc5, 0x59, 0xad, 0xd6, + 0x59, 0xfb, 0x9e, 0xfc, 0x85, 0xa1, 0x82, 0xb6, 0xb2, 0xcc, + 0x75, 0x9a, 0xa3, 0x48, 0x61, 0x11, 0x4b, 0x10, 0x21, 0x40, + 0x46, 0x1d, 0x15, 0x54, 0x61, 0x21, 0x46, 0xab, 0x46, 0x8a, + 0x89, 0x0c, 0xed, 0x27, 0x3d, 0xfc, 0x23, 0x8e, 0x5f, 0x24, + 0x97, 0x4c, 0xae, 0x0a, 0x18, 0x39, 0x16, 0x50, 0x83, 0x0a, + 0xc9, 0xf1, 0x83, 0xff, 0xc1, 0xef, 0x6e, 0xcd, 0xe2, 0xd4, + 0xa4, 0x9b, 0x14, 0x4a, 0x02, 0xbd, 0x2f, 0xb6, 0xfd, 0x31, + 0x06, 0x04, 0x77, 0x81, 0x56, 0xc3, 0xb6, 0xbf, 0x8f, 0x6d, + 0xbb, 0x75, 0x02, 0x04, 0x9e, 0x81, 0x2b, 0xad, 0xe3, 0xaf, + 0x35, 0x81, 0x99, 0x4f, 0xd2, 0x1b, 0x1d, 0x2d, 0x7a, 0x04, + 0x0c, 0x6e, 0x03, 0x17, 0xd7, 0x1d, 0x4d, 0xde, 0x03, 0x2e, + 0x77, 0x80, 0xe1, 0x27, 0x5d, 0x32, 0x24, 0x47, 0x0a, 0xd0, + 0xf4, 0x17, 0x8b, 0xc0, 0xfb, 0x19, 0x7d, 0x53, 0x1e, 0x08, + 0xdf, 0x02, 0xfd, 0x6b, 0x6e, 0x6f, 0xed, 0x7d, 0x9c, 0x3e, + 0x00, 0x59, 0xea, 0x2a, 0x7d, 0x03, 0x1c, 0x1c, 0x02, 0xe3, + 0x25, 0xca, 0x5e, 0xf7, 0x78, 0x77, 0x5f, 0x77, 0x6f, 0xff, + 0x9e, 0x69, 0xf7, 0xf7, 0x03, 0x34, 0xd7, 0x72, 0xf4, 0xbc, + 0xbe, 0x40, 0x67, 0x00, 0x00, 0x0e, 0x5b, 0x69, 0x54, 0x58, + 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, + 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, + 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, + 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, + 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x0a, 0x3c, 0x78, 0x3a, + 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, + 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, + 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, + 0x20, 0x34, 0x2e, 0x34, 0x2e, 0x30, 0x2d, 0x45, 0x78, 0x69, + 0x76, 0x32, 0x22, 0x3e, 0x0a, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, + 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, + 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, + 0x6d, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x23, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x47, + 0x49, 0x4d, 0x50, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x69, 0x6d, 0x70, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x6d, 0x70, 0x2f, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, + 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, + 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x3d, 0x22, 0x67, 0x69, 0x6d, 0x70, 0x3a, 0x64, + 0x6f, 0x63, 0x69, 0x64, 0x3a, 0x67, 0x69, 0x6d, 0x70, 0x3a, + 0x63, 0x61, 0x34, 0x37, 0x61, 0x34, 0x35, 0x61, 0x2d, 0x62, + 0x35, 0x36, 0x64, 0x2d, 0x34, 0x38, 0x64, 0x37, 0x2d, 0x61, + 0x39, 0x65, 0x63, 0x2d, 0x35, 0x33, 0x61, 0x64, 0x37, 0x64, + 0x65, 0x39, 0x64, 0x65, 0x65, 0x32, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, + 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x30, 0x65, 0x64, + 0x34, 0x38, 0x37, 0x35, 0x62, 0x2d, 0x64, 0x38, 0x30, 0x30, + 0x2d, 0x34, 0x36, 0x61, 0x37, 0x2d, 0x39, 0x30, 0x33, 0x31, + 0x2d, 0x66, 0x33, 0x34, 0x66, 0x65, 0x39, 0x63, 0x62, 0x31, + 0x32, 0x30, 0x65, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x70, 0x4d, 0x4d, 0x3a, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, + 0x64, 0x3a, 0x31, 0x33, 0x38, 0x34, 0x34, 0x32, 0x30, 0x33, + 0x2d, 0x34, 0x35, 0x36, 0x65, 0x2d, 0x34, 0x34, 0x62, 0x37, + 0x2d, 0x39, 0x32, 0x64, 0x64, 0x2d, 0x66, 0x64, 0x37, 0x64, + 0x32, 0x62, 0x32, 0x36, 0x62, 0x33, 0x38, 0x39, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x64, 0x63, 0x3a, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, + 0x70, 0x6e, 0x67, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, + 0x4d, 0x50, 0x3a, 0x41, 0x50, 0x49, 0x3d, 0x22, 0x32, 0x2e, + 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, 0x4d, 0x50, + 0x3a, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3d, + 0x22, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x47, 0x49, 0x4d, 0x50, 0x3a, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x74, 0x61, 0x6d, 0x70, 0x3d, 0x22, 0x31, 0x36, 0x37, + 0x31, 0x34, 0x39, 0x34, 0x31, 0x31, 0x39, 0x38, 0x34, 0x34, + 0x33, 0x37, 0x36, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, + 0x4d, 0x50, 0x3a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x3d, 0x22, 0x32, 0x2e, 0x31, 0x30, 0x2e, 0x33, 0x32, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, + 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3d, 0x22, 0x31, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x47, 0x49, 0x4d, 0x50, 0x20, + 0x32, 0x2e, 0x31, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, + 0x6d, 0x70, 0x3a, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x44, 0x61, 0x74, 0x65, 0x3d, 0x22, 0x32, 0x30, 0x32, + 0x32, 0x3a, 0x31, 0x32, 0x3a, 0x31, 0x39, 0x54, 0x31, 0x37, + 0x3a, 0x35, 0x35, 0x3a, 0x31, 0x39, 0x2d, 0x30, 0x36, 0x3a, + 0x30, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, + 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, + 0x65, 0x3d, 0x22, 0x32, 0x30, 0x32, 0x32, 0x3a, 0x31, 0x32, + 0x3a, 0x31, 0x39, 0x54, 0x31, 0x37, 0x3a, 0x35, 0x35, 0x3a, + 0x31, 0x39, 0x2d, 0x30, 0x36, 0x3a, 0x30, 0x30, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, + 0x3a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x53, + 0x65, 0x71, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x73, 0x61, 0x76, + 0x65, 0x64, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x3d, 0x22, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, + 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, + 0x39, 0x35, 0x65, 0x64, 0x39, 0x33, 0x37, 0x38, 0x2d, 0x61, + 0x38, 0x30, 0x39, 0x2d, 0x34, 0x63, 0x39, 0x35, 0x2d, 0x61, + 0x30, 0x38, 0x62, 0x2d, 0x31, 0x66, 0x66, 0x38, 0x66, 0x66, + 0x36, 0x34, 0x66, 0x30, 0x66, 0x37, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, + 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x47, 0x69, 0x6d, 0x70, 0x20, + 0x32, 0x2e, 0x31, 0x30, 0x20, 0x28, 0x4c, 0x69, 0x6e, 0x75, + 0x78, 0x29, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x77, 0x68, 0x65, 0x6e, + 0x3d, 0x22, 0x32, 0x30, 0x32, 0x32, 0x2d, 0x31, 0x32, 0x2d, + 0x31, 0x39, 0x54, 0x31, 0x37, 0x3a, 0x34, 0x34, 0x3a, 0x31, + 0x30, 0x2d, 0x30, 0x36, 0x3a, 0x30, 0x30, 0x22, 0x2f, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x6c, 0x69, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x3d, 0x22, 0x73, 0x61, 0x76, 0x65, 0x64, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, + 0x76, 0x74, 0x3a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x3d, 0x22, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, + 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x65, 0x61, 0x64, + 0x31, 0x64, 0x39, 0x66, 0x39, 0x2d, 0x32, 0x61, 0x63, 0x66, + 0x2d, 0x34, 0x31, 0x62, 0x66, 0x2d, 0x61, 0x31, 0x34, 0x32, + 0x2d, 0x30, 0x30, 0x34, 0x33, 0x39, 0x37, 0x33, 0x33, 0x62, + 0x36, 0x34, 0x62, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x73, 0x6f, 0x66, + 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x3d, 0x22, 0x47, 0x69, 0x6d, 0x70, 0x20, 0x32, 0x2e, 0x31, + 0x30, 0x20, 0x28, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x29, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, + 0x76, 0x74, 0x3a, 0x77, 0x68, 0x65, 0x6e, 0x3d, 0x22, 0x32, + 0x30, 0x32, 0x32, 0x2d, 0x31, 0x32, 0x2d, 0x31, 0x39, 0x54, + 0x31, 0x37, 0x3a, 0x35, 0x35, 0x3a, 0x31, 0x39, 0x2d, 0x30, + 0x36, 0x3a, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, + 0x71, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x4d, 0x4d, 0x3a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, + 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x3c, 0x3f, 0x78, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, + 0x3d, 0x22, 0x77, 0x22, 0x3f, 0x3e, 0xfb, 0xad, 0x5d, 0x4c, + 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, + 0x28, 0xd8, 0xd8, 0xd8, 0x40, 0x40, 0xa0, 0xb0, 0xb0, 0xb0, + 0x7b, 0x52, 0x1f, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x62, 0x4b, + 0x47, 0x44, 0x00, 0x88, 0x05, 0x1d, 0x48, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, + 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, + 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xe6, 0x0c, 0x13, + 0x17, 0x37, 0x13, 0x86, 0x45, 0x13, 0x50, 0x00, 0x00, 0x00, + 0xc5, 0x49, 0x44, 0x41, 0x54, 0x58, 0xc3, 0x63, 0x60, 0x18, + 0x7a, 0x80, 0xfb, 0xff, 0xff, 0x07, 0x78, 0x15, 0x70, 0x86, + 0x86, 0x26, 0x0c, 0xb0, 0x02, 0xad, 0xf5, 0xff, 0xff, 0xff, + 0x5a, 0x81, 0x47, 0x81, 0x69, 0x0c, 0x04, 0x0f, 0x66, 0x05, + 0xa1, 0xa1, 0x20, 0x05, 0xa1, 0xa1, 0x83, 0x5b, 0x41, 0x15, + 0x30, 0x98, 0xb5, 0xd6, 0xe2, 0x51, 0x90, 0x00, 0x89, 0xb0, + 0x81, 0x54, 0x50, 0x0f, 0x4e, 0xb0, 0xdc, 0x7f, 0x19, 0x46, + 0xc1, 0x28, 0x18, 0xf2, 0x20, 0x34, 0x34, 0x04, 0x53, 0x50, + 0x14, 0x29, 0x8f, 0x82, 0x33, 0x2d, 0x46, 0x69, 0x43, 0x4f, + 0x05, 0xdc, 0xff, 0xc1, 0xe5, 0x02, 0xb8, 0x28, 0x5e, 0x05, + 0x04, 0x30, 0xf6, 0xda, 0x50, 0x68, 0xdd, 0x81, 0x54, 0x80, + 0x23, 0x2b, 0x40, 0x88, 0xd3, 0x5e, 0x01, 0xa8, 0x8e, 0x78, + 0x80, 0x4d, 0x01, 0x37, 0xb4, 0xee, 0x40, 0x2a, 0x9b, 0x41, + 0xd2, 0xff, 0x5f, 0xad, 0x5a, 0x85, 0x52, 0x76, 0x0f, 0x3e, + 0x05, 0xab, 0xff, 0x83, 0x14, 0x0d, 0x3e, 0x05, 0x04, 0x83, + 0x7a, 0x30, 0xa4, 0x07, 0xc2, 0x89, 0x76, 0x30, 0xe4, 0x2c, + 0x22, 0xb2, 0xff, 0x28, 0x18, 0x05, 0x43, 0x16, 0x10, 0x6c, + 0xaa, 0x0d, 0x86, 0xf6, 0x24, 0xe1, 0x46, 0xef, 0x50, 0x68, + 0xba, 0x0f, 0x89, 0x4e, 0x10, 0xe1, 0xae, 0xdc, 0x60, 0xe8, + 0x6f, 0x12, 0xee, 0x14, 0x0f, 0x4e, 0x00, 0x00, 0xf2, 0xdc, + 0xf4, 0xc0, 0xf3, 0xd9, 0xaa, 0x2b, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon128() noexcept { return WindowIcon128Data; } + +static constexpr ox::Array WindowIcon264Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x08, + 0x00, 0x00, 0x01, 0x08, 0x02, 0x03, 0x00, 0x00, 0x00, 0xde, + 0x98, 0x82, 0x6c, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x00, + 0xc2, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0xd5, 0x41, + 0x0e, 0x82, 0x30, 0x10, 0x46, 0x61, 0x30, 0x61, 0xe3, 0xbe, + 0xf7, 0xe1, 0x08, 0x2c, 0xfa, 0xdf, 0xc7, 0xa3, 0xb8, 0xf6, + 0x12, 0xde, 0xcc, 0x3a, 0x1a, 0x8b, 0x62, 0x63, 0x62, 0x42, + 0x88, 0xd3, 0xfa, 0xde, 0x66, 0x42, 0x98, 0xf9, 0x58, 0xd2, + 0x11, 0xfd, 0x71, 0x41, 0x56, 0x84, 0x80, 0x68, 0x91, 0x18, + 0xa4, 0xf1, 0x36, 0x7b, 0x69, 0x82, 0x80, 0x68, 0x8b, 0x58, + 0xde, 0x65, 0x0d, 0x02, 0x02, 0x02, 0x02, 0xc2, 0x3f, 0x41, + 0x44, 0x44, 0x44, 0x44, 0x44, 0xdb, 0x16, 0x64, 0xc5, 0x55, + 0xbb, 0x10, 0x10, 0x4e, 0x89, 0x41, 0x1a, 0xcb, 0xcd, 0xfd, + 0x69, 0xee, 0x58, 0xbe, 0xed, 0xa5, 0x09, 0x02, 0xc2, 0x3f, + 0xf1, 0xc6, 0x3d, 0xda, 0xe5, 0xeb, 0x94, 0x2e, 0xf7, 0x79, + 0x28, 0x77, 0xe6, 0x2f, 0x43, 0x40, 0xd4, 0x49, 0x9c, 0x53, + 0xca, 0x14, 0x04, 0x44, 0x9d, 0x84, 0x8f, 0xff, 0x08, 0x04, + 0xc4, 0x76, 0x84, 0x15, 0x64, 0xc5, 0xee, 0xab, 0x3e, 0xec, + 0x42, 0x40, 0xf8, 0x25, 0x88, 0x88, 0x88, 0x88, 0x88, 0xe8, + 0xb7, 0xf5, 0xd2, 0xf4, 0x7c, 0x1a, 0xa4, 0x11, 0x02, 0x02, + 0x02, 0x02, 0xa2, 0x0e, 0xe2, 0xe5, 0x6e, 0xa9, 0x41, 0x40, + 0x34, 0x42, 0x58, 0x41, 0x56, 0xec, 0xd6, 0x04, 0x01, 0xe1, + 0x97, 0x20, 0xaa, 0xbb, 0x2b, 0xd0, 0x36, 0xee, 0x24, 0x18, + 0x4b, 0x42, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon264() noexcept { return WindowIcon264Data; } + +static constexpr ox::Array WindowIcon1080Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x03, 0x48, + 0x00, 0x00, 0x03, 0x48, 0x02, 0x03, 0x00, 0x00, 0x00, 0x80, + 0x89, 0x27, 0x48, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x03, + 0x02, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xec, 0xcf, 0xa1, + 0x15, 0x02, 0x41, 0x14, 0x04, 0x41, 0x10, 0x84, 0x40, 0x3e, + 0x84, 0x80, 0x80, 0xfc, 0x53, 0x41, 0x9d, 0xb9, 0xf7, 0x10, + 0xa8, 0xfd, 0xbd, 0x54, 0xd9, 0x31, 0xd3, 0x17, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x77, 0x7f, 0x9f, 0xbc, + 0x56, 0x3f, 0x92, 0x24, 0xa9, 0x49, 0x52, 0x81, 0xa4, 0x02, + 0x49, 0x05, 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, + 0x20, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, 0x92, + 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, 0xb0, 0x4f, 0xd2, + 0xed, 0x28, 0x78, 0x9c, 0x97, 0xeb, 0xb1, 0x3c, 0x57, 0x7f, + 0x94, 0x24, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, + 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, 0x20, 0xa9, + 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, 0x92, 0x0a, 0x24, + 0x15, 0x48, 0x2a, 0x90, 0x54, 0xb0, 0x4f, 0xd2, 0x2f, 0x7f, + 0xbf, 0x57, 0x8f, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, + 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, + 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, + 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, + 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, + 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, + 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, + 0x24, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0xf3, 0x61, 0x8f, 0x8e, 0x71, 0x10, 0x84, 0x01, 0x30, 0x8c, + 0xaa, 0x89, 0x0b, 0x3b, 0xf7, 0xf1, 0x08, 0x0e, 0x70, 0x1f, + 0x8f, 0xc2, 0xcc, 0x25, 0xbc, 0x99, 0xba, 0x58, 0x07, 0x4c, + 0x2d, 0x4d, 0x4d, 0xb4, 0xe5, 0x7d, 0x2b, 0x50, 0xfe, 0x97, + 0x4a, 0xaa, 0xb3, 0x7e, 0x5c, 0x34, 0x54, 0xbf, 0x05, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0xa9, 0x11, 0xd2, 0x31, 0x7c, + 0x75, 0x2a, 0xd9, 0xd0, 0xcd, 0xc9, 0xa6, 0x92, 0xf3, 0xf7, + 0x61, 0xe5, 0x19, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x69, + 0x3b, 0xa4, 0x2c, 0x76, 0xb4, 0x43, 0x5c, 0x70, 0x7f, 0x76, + 0x7b, 0x7b, 0x72, 0x29, 0xf9, 0xe3, 0x87, 0x1b, 0x40, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x5a, 0x47, 0xba, 0x06, + 0x4a, 0x1c, 0x8b, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, + 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, + 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, + 0xb4, 0x8e, 0x94, 0xf5, 0x4e, 0xba, 0x6e, 0x4e, 0x36, 0x95, + 0x9c, 0x9f, 0x75, 0x03, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0xad, 0x91, 0x5e, 0xf5, 0xe3, 0xa2, 0x61, 0xf7, 0xb3, + 0xbe, 0xb4, 0x05, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0xa9, + 0x35, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, + 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, + 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, + 0x49, 0xff, 0xd7, 0xa3, 0xfd, 0x39, 0x34, 0x42, 0x28, 0x88, + 0x82, 0x20, 0x58, 0x08, 0x42, 0x20, 0x1f, 0x42, 0x40, 0xf0, + 0xf3, 0x4f, 0x05, 0x03, 0x06, 0x73, 0x50, 0x88, 0x7b, 0x43, + 0x75, 0xeb, 0x15, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6b, 0xa7, 0xe3, 0xe9, 0xb6, 0xde, 0x9e, + 0x5f, 0xdb, 0xeb, 0xee, 0xd7, 0x92, 0x24, 0xcd, 0x23, 0x49, + 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, + 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, + 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, + 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, + 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, + 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, + 0x24, 0x4d, 0x22, 0xa9, 0x90, 0xf4, 0xc1, 0xdf, 0x6f, 0xaa, + 0x47, 0x91, 0x54, 0x20, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, + 0x49, 0x05, 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, + 0x20, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, 0x92, + 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x94, 0x72, 0x39, 0xde, + 0xdc, 0x77, 0x3f, 0x92, 0x24, 0xa9, 0x49, 0x52, 0x81, 0xa4, + 0x02, 0x49, 0x05, 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, + 0x54, 0x20, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, + 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, 0xf0, 0x87, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x7a, + 0x00, 0x0f, 0x52, 0x7b, 0xe5, 0xa8, 0x16, 0x87, 0x8b, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, + 0x82, +}; + +ox::SpanView WindowIcon1080() noexcept { return WindowIcon1080Data; } + +ox::Vector> WindowIcons() noexcept { + return { + WindowIcon16(), + WindowIcon24(), + WindowIcon32(), + WindowIcon40(), + WindowIcon48(), + WindowIcon128(), + WindowIcon264(), + WindowIcon1080(), + }; +} + +} diff --git a/src/nostalgia/studio/ns.rc b/src/nostalgia/studio/ns.rc new file mode 100644 index 0000000..765682a --- /dev/null +++ b/src/nostalgia/studio/ns.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "ns_logo.ico" diff --git a/src/nostalgia/studio/ns_logo.ico b/src/nostalgia/studio/ns_logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..320502f2f6c555a82802e0aa50c17025bda1d80e GIT binary patch literal 165635 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 MjxCqmHQ>4b2Mu}46951J literal 0 HcmV?d00001 diff --git a/src/nostalgia/studio/ns_logo1080.png b/src/nostalgia/studio/ns_logo1080.png new file mode 100644 index 0000000000000000000000000000000000000000..cca331c83210a3c9275f994ba6d32b4bed45cae7 GIT binary patch literal 851 zcmeAS@N?(olHy`uVBq!ia0y~yVD1zj4Odj0zS z;r&XUlT?7nmm(VCTCAkN=fwWLLV*@WgPv8L+}7Vea_|+%_a8c=x@YFD2zDP`U*9cH zYqbOZP4`;0xh}>eWIrn>POwt&l3`7$*3AoNPcEDE`FrA1Nt{YKGp(2Clx=a2DX1^2 zt}fF2`M6!$!3j5ra^J<~CDYx48*J&D^3`uwo}by&IrB@IJ#d4y6XU)HfYNCjhU-$70WMIMhS$LWy^gdR{48x=D9AQVprm#)}q5H=3gioyJd~B v@zVSX?G@ikuO7L-B;(kLxwY{!6N8w~|7Pu2)bsQz&^!iDS3j3^P6y%|k8K#C{8C&ZP3L1V*)4Gsf=0 z&1uHZh)aTh3mwB+8ZstIEcs|wo!Qio(H(Iwm6r(!4%s`pfWU3Bl%t`$1qA#$9i>j6 z{hRqNV&B`PoIvT1$82vseLY3*d!R&%x&ra&%tt}tVJ~C=)2W+ zZ=4){sCIzBi|t=8eW{UJA_y{m5#OVyc`F?qOq?Pd!`@tDVSG4UVbyN!3uf6u;Y)$5vi$Za4;9E-1rzdmnvYSNCWKt6Hq1z^0PzKEB&t*7kP2cWXC; zG7(_}L6#UnhZy7$NJfUDfd~r10y;zyjSHY5LUbBr!zfck=6BmYqlsCf|E)=T?{~g) ze&?Lucg{(_M$f_p6H>EN5d@jwDsh&=C#rpuQ{eB!j3ys^d|2--Q%l(>8ji@K6ac7N z7X~PZNg{&8&IdggCLBj~w|X+BC*`AJ&gVNyEuFuaIvR`4IhwaI>)GDJ72Ta^#!H9& zdv?xQ<=yke>9be-tEi7IC9P{}TQuWLa{0PX-dgj-_TE#M=Uv*hdtUn=7q{^R^ET_c8&6QXre$6qbN%YBoys?JC%*mG zj>+57AInw?zg@7eUH?I~-u6KE>DEo|Pt(^lwv}eJFFXD53lHZxavt}-`19)K_SEn3 zGt1vObH3*ap}YIQ%et?m4Oqjyb2dFU?w%U2XZ7mbmh5@=eSTnOPxnUa?TkZ0Wbx5c z`&VXrOE%2BHR+jXRp##97k7AaI_viTw6PjJn06rh-9J|ZF0`Z{?bSUcO@Fp!{OJ`< z-*oyn&8`ejJ9zM#|K}OuLn*raADU*_nzrroJdoVw`^8;X*_qi{p*&sHb@`X1Q>9DW zEk}>dA|Ky=wPs_qr>5sd*OuC6^Ov|HubB^B7z>N8R)WP<=6;mn<)EGwWDe+K!7!{k z1j);fg;~A|s3-?~Qpk>Vz4rlzN`f6*YI2kAumkv|lKKc(RKL*6*H`g20n2|VH7~|M zfFMv=G!_hm6eecJ;T_=L@-DUwNTXJS_sk?&_7xzUf82V zDNy8^2oH*DK}elF6hhz!?87yYKs+6RCqMuMp{fGCQo~#>aJfAL78(UUDHx7hL9&Nw zs**TJ*09*Lop?G!1A*oPxWlyjbB`-SEw`I-%6yF$p37;+H2;hs^OC?MUMbN8Xi~&U zkuu^&$|T~P*<`{w3*dR)Y6S+49s=bGDJmP{fd&P^^%BIP%_g2=%{H7gngs}95pbKu zNaF_9Mp<}LBuO(j1mdxX1gnw_42?>I5+Ibo8%?~K;&ILj@r)u(;Z_c?xM(w(0Q6$u zcrgwo@XUNU5@g|VN5{uqx|hRRBRr+Qg7XhN8SQ%^1uKN#P`v4AGYbNv!)fZLNLK zyu_iGNDA~{7Z)XZY7wYTtP;zB6mKRJjkg8E@`)4_wiXESI3ZSIi}$l3AAs|tuVDM- z(mxafXQNq`w~DxtgmqxF83df;C6BqRn#VIN=G z(D@%fedq8$dVtWQPDaGW<0Dn6u$K1L7xd=z AFaQ7m literal 0 HcmV?d00001 diff --git a/src/nostalgia/studio/ns_logo40.png b/src/nostalgia/studio/ns_logo40.png new file mode 100644 index 0000000000000000000000000000000000000000..cc169bd733629a5a3270b498d90ca151e92c4460 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*FxK#^NA%C&rs6b?Si}mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5l;8>Q z32_A)zG1@#2ZseWZrtcM7cT^ga~60+7Bet#3xhBt!>lK|D+7bZh7B7W92VTTaiiZ{ zybvfJx;rZafD L`njxgN@xNAp=~+5 literal 0 HcmV?d00001 diff --git a/src/nostalgia/studio/rsrc.json b/src/nostalgia/studio/rsrc.json new file mode 100644 index 0000000..79f169e --- /dev/null +++ b/src/nostalgia/studio/rsrc.json @@ -0,0 +1,39 @@ +{ + "cpp": "icondata.cpp", + "namespace": "studio", + "all_files": "WindowIcons", + "files": [ + { + "path": "ns_logo16.png", + "cpp_name": "WindowIcon16" + }, + { + "path": "ns_logo24.png", + "cpp_name": "WindowIcon24" + }, + { + "path": "ns_logo32.png", + "cpp_name": "WindowIcon32" + }, + { + "path": "ns_logo40.png", + "cpp_name": "WindowIcon40" + }, + { + "path": "ns_logo48.png", + "cpp_name": "WindowIcon48" + }, + { + "path": "ns_logo128.png", + "cpp_name": "WindowIcon128" + }, + { + "path": "ns_logo264.png", + "cpp_name": "WindowIcon264" + }, + { + "path": "ns_logo1080.png", + "cpp_name": "WindowIcon1080" + } + ] +} diff --git a/src/olympic/studio/applib/src/app.cpp b/src/olympic/studio/applib/src/app.cpp index 9408119..b4bd9e3 100644 --- a/src/olympic/studio/applib/src/app.cpp +++ b/src/olympic/studio/applib/src/app.cpp @@ -32,11 +32,15 @@ static void keyEventHandler(turbine::Context &ctx, turbine::Key key, bool down) sctx->ui.handleKeyEvent(key, down); } +[[nodiscard]] +ox::Vector> WindowIcons() noexcept; + static ox::Error runApp( ox::StringViewCR appName, ox::StringViewCR projectDataDir, ox::UPtr &&fs) noexcept { OX_REQUIRE_M(ctx, turbine::init(std::move(fs), appName)); + oxLogError(turbine::setWindowIcon(*ctx, WindowIcons())); turbine::setWindowTitle(*ctx, keelCtx(*ctx).appName); turbine::setKeyEventHandler(*ctx, keyEventHandler); turbine::setRefreshWithin(*ctx, 0); diff --git a/src/olympic/studio/modlib/include/studio/selectiontracker.hpp b/src/olympic/studio/modlib/include/studio/selectiontracker.hpp index 35173b0..aa07b1a 100644 --- a/src/olympic/studio/modlib/include/studio/selectiontracker.hpp +++ b/src/olympic/studio/modlib/include/studio/selectiontracker.hpp @@ -71,12 +71,6 @@ class SelectionTracker { return m_selectionOngoing; } - constexpr void startSelection(ox::Point cursor) noexcept { - m_pointA = cursor; - m_pointB = cursor; - m_selectionOngoing = true; - } - /** * * @param cursor diff --git a/src/olympic/turbine/include/turbine/gfx.hpp b/src/olympic/turbine/include/turbine/gfx.hpp index b618390..52c1556 100644 --- a/src/olympic/turbine/include/turbine/gfx.hpp +++ b/src/olympic/turbine/include/turbine/gfx.hpp @@ -26,20 +26,22 @@ void removeDrawer(Context &ctx, Drawer *cd) noexcept; ox::Error initGfx(Context &ctx) noexcept; +ox::Error setWindowIcon(Context &ctx, ox::SpanView> const &iconPngs) noexcept; + void setWindowTitle(Context &ctx, ox::StringViewCR title) noexcept; void focusWindow(Context &ctx) noexcept; [[nodiscard]] -int getScreenWidth(Context &ctx) noexcept; +int getScreenWidth(Context const &ctx) noexcept; [[nodiscard]] -int getScreenHeight(Context &ctx) noexcept; +int getScreenHeight(Context const &ctx) noexcept; [[nodiscard]] -ox::Size getScreenSize(Context &ctx) noexcept; +ox::Size getScreenSize(Context const &ctx) noexcept; -ox::Bounds getWindowBounds(Context &ctx) noexcept; +ox::Bounds getWindowBounds(Context const &ctx) noexcept; ox::Error setWindowBounds(Context &ctx, ox::Bounds const&bnds) noexcept; diff --git a/src/olympic/turbine/src/gba/gfx.cpp b/src/olympic/turbine/src/gba/gfx.cpp index 393cb74..3d0bf44 100644 --- a/src/olympic/turbine/src/gba/gfx.cpp +++ b/src/olympic/turbine/src/gba/gfx.cpp @@ -27,19 +27,19 @@ ox::Error initGfx(Context&) noexcept { void setWindowTitle(Context&, ox::StringViewCR) noexcept { } -int getScreenWidth(Context&) noexcept { +int getScreenWidth(Context const&) noexcept { return 240; } -int getScreenHeight(Context&) noexcept { +int getScreenHeight(Context const&) noexcept { return 160; } -ox::Size getScreenSize(Context&) noexcept { +ox::Size getScreenSize(Context const&) noexcept { return {240, 160}; } -ox::Bounds getWindowBounds(Context&) noexcept { +ox::Bounds getWindowBounds(Context const&) noexcept { return {0, 0, 240, 160}; } diff --git a/src/olympic/turbine/src/glfw/CMakeLists.txt b/src/olympic/turbine/src/glfw/CMakeLists.txt index 47f7885..4eb91b4 100644 --- a/src/olympic/turbine/src/glfw/CMakeLists.txt +++ b/src/olympic/turbine/src/glfw/CMakeLists.txt @@ -21,4 +21,5 @@ target_link_libraries( glad glfw imgui + lodepng ) diff --git a/src/olympic/turbine/src/glfw/gfx.cpp b/src/olympic/turbine/src/glfw/gfx.cpp index 40f3b10..6676158 100644 --- a/src/olympic/turbine/src/glfw/gfx.cpp +++ b/src/olympic/turbine/src/glfw/gfx.cpp @@ -4,6 +4,7 @@ #include #include +#include #if TURBINE_USE_IMGUI #include #include @@ -228,6 +229,39 @@ ox::Error initGfx(Context &ctx) noexcept { return {}; } +struct IconData { + std::vector pixels; + int w{}, h{}; +}; + +[[nodiscard]] +static ox::Result toGlfwImgPixels(ox::SpanView const &iconPng) noexcept { + ox::Result out; + unsigned w{}, h{}; + if (lodepng::decode(out.value.pixels, w, h, iconPng.data(), iconPng.size())) { + return ox::Error{1, "unable to decode window icon PNG data"}; + } + out.value.w = static_cast(w); + out.value.h = static_cast(h); + return out; +} + +ox::Error setWindowIcon(Context &ctx, ox::SpanView> const &iconPngs) noexcept { + ox::Vector src; + ox::Vector imgs; + for (auto const &iconPng : iconPngs) { + OX_RETURN_ERROR(toGlfwImgPixels(iconPng).moveTo(src.emplace_back())); + auto &icon = *src.back().unwrap(); + imgs.emplace_back(GLFWimage{ + .width = icon.w, + .height = icon.h, + .pixels = icon.pixels.data(), + }); + } + glfwSetWindowIcon(ctx.window, static_cast(imgs.size()), imgs.data()); + return {}; +} + void setWindowTitle(Context &ctx, ox::StringViewCR title) noexcept { auto cstr = ox_malloca(title.bytes() + 1, char); ox::strncpy(cstr.get(), title.data(), title.bytes()); @@ -238,25 +272,25 @@ void focusWindow(Context &ctx) noexcept { glfwFocusWindow(ctx.window); } -int getScreenWidth(Context &ctx) noexcept { +int getScreenWidth(Context const &ctx) noexcept { int w = 0, h = 0; glfwGetFramebufferSize(ctx.window, &w, &h); return w; } -int getScreenHeight(Context &ctx) noexcept { +int getScreenHeight(Context const &ctx) noexcept { int w = 0, h = 0; glfwGetFramebufferSize(ctx.window, &w, &h); return h; } -ox::Size getScreenSize(Context &ctx) noexcept { +ox::Size getScreenSize(Context const &ctx) noexcept { int w = 0, h = 0; glfwGetFramebufferSize(ctx.window, &w, &h); return {w, h}; } -ox::Bounds getWindowBounds(Context &ctx) noexcept { +ox::Bounds getWindowBounds(Context const &ctx) noexcept { ox::Bounds bnds; glfwGetWindowPos(ctx.window, &bnds.x, &bnds.y); glfwGetWindowSize(ctx.window, &bnds.width, &bnds.height); diff --git a/util/scripts/file-to-cpp.py b/util/scripts/file-to-cpp.py new file mode 100755 index 0000000..79e789b --- /dev/null +++ b/util/scripts/file-to-cpp.py @@ -0,0 +1,114 @@ +#! /usr/bin/env python3 + +# +# Copyright 2016 - 2025 gary@drinkingtea.net +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +import argparse +import os +import json +import pathlib +import sys + + +def write_txt_file(path: str, txt: str): + with open(path, "w") as f: + f.write(txt) + print(f'Wrote {path}') + + +def file_to_hex(path: str, line_prefix: str) -> tuple[str, int]: + with open(path, 'rb') as f: + out = line_prefix + data = f.read() + i = 1 + for b in data: + out += f"{b:#0{4}x}," + if i % 10 == 0: + out += '\n\t' + else: + out += ' ' + i += 1 + return out[:-1], len(data) + + +def file_to_cpp(path: str, cpp_name: str) -> tuple[str, str]: + cpp = '' + hpp = '' + data, data_len = file_to_hex(path, "\t") + cpp += f'\nstatic constexpr ox::Array {cpp_name}Data {{\n{data}\n}};\n' + cpp += f'\nox::SpanView {cpp_name}() noexcept {{ return {cpp_name}Data; }}\n' + hpp += f'\n[[nodiscard]]\nox::SpanView {cpp_name}() noexcept;\n' + return cpp, hpp + + +def proc_rsrc_file(rsrc_path: str):# Open and read the JSON file + with open(rsrc_path, 'r') as file: + data = json.load(file) + base_path = pathlib.Path(rsrc_path).parent.absolute() + if 'all_files' in data: + all_files = data['all_files'] + else: + all_files = None + if 'namespace' in data: + namespace = data['namespace'] + else: + namespace = '' + if len(namespace) > 0: + push_ns = f'namespace {namespace} {{\n' + pop_ns = '\n}\n' + else: + push_ns = '' + pop_ns = '' + cpp = '// Generated\n\n#include \n' + cpp += '#include \n\n' + hpp = '// Generated\n\n#include \n\n' + cpp += push_ns + hpp += push_ns + all_files_func_decl = '' + all_files_func = '' + if all_files is not None: + all_files_func_decl += f'\n[[nodiscard]]\nox::Vector> {all_files}() noexcept;\n' + all_files_func += f'\nox::Vector> {all_files}() noexcept {{\n\treturn {{\n' + for f in data['files']: + if 'path' not in f: + print('src file path missing', file=sys.stderr) + sys.exit(1) + path = f['path'] + if 'cpp_name' not in f: + print('var name missing', file=sys.stderr) + sys.exit(1) + cpp_name = f['cpp_name'] + c, h = file_to_cpp(os.path.join(base_path, path), cpp_name) + cpp += c + if len(h) > 0: + hpp += h + if all_files is not None: + all_files_func += f'\t\t{cpp_name}(),\n' + cpp += all_files_func + '\t};\n}\n' + hpp += all_files_func_decl + cpp += pop_ns + hpp += pop_ns + write_txt_file(os.path.join(base_path, data['cpp']), cpp) + if 'hpp' in data: + write_txt_file(os.path.join(base_path, data['hpp']), hpp) + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument('--rsrc', help='path to file', required=True) + args = parser.parse_args() + proc_rsrc_file(args.rsrc) + return 0 + + +if __name__ == '__main__': + try: + err = main() + sys.exit(err) + except KeyboardInterrupt: + sys.exit(1)