diff --git a/.clang-format b/.clang-format index 376186b37..beacb203a 100644 --- a/.clang-format +++ b/.clang-format @@ -1,4 +1,5 @@ --- +Language: Cpp UseTab: Always TabWidth: 8 AlignConsecutiveAssignments: diff --git a/.clangd b/.clangd deleted file mode 100644 index 1058f6f19..000000000 --- a/.clangd +++ /dev/null @@ -1,3 +0,0 @@ -Completion: - HeaderInsertion: Never -ClangFormat: Tab diff --git a/.gitignore b/.gitignore index 8535b6514..005ebea58 100644 --- a/.gitignore +++ b/.gitignore @@ -5,24 +5,10 @@ examples/*/*.exe !examples/*/ !examples/*.* !examples/*/*.* -*.exe *.o -*.obj -*.core *.so *.dll *.lib -*.dylib *.a /Makefile -/build compile_flags.txt -.cache -.DS_Store - -*.pef -*.dsk -*.bin -*.rsrc -*.finf -*.gdb diff --git a/BorMakefile b/BorMakefile index 0f61bac95..59551b5fd 100644 --- a/BorMakefile +++ b/BorMakefile @@ -1,26 +1,11 @@ CC = bcc32 -c LD = bcc32 -CFLAGS = -Iinclude -Iexternal\libz\include -D_MILSKO -DUSE_GDI -DUSE_STB_TRUETYPE -DUSE_STB_IMAGE -DSTBI_NO_SIMD +CFLAGS = -Iinclude -D_MILSKO -DUSE_GDI -DUSE_STB_TRUETYPE -DUSE_STB_IMAGE -DSTBI_NO_SIMD LDFLAGS = -tWD .SUFFIXES: .obj .c all: src\Mw.dll clean: - del /f /q external\libz\src\adler32.obj - del /f /q external\libz\src\compress.obj - del /f /q external\libz\src\crc32.obj - del /f /q external\libz\src\deflate.obj - del /f /q external\libz\src\gzclose.obj - del /f /q external\libz\src\gzlib.obj - del /f /q external\libz\src\gzread.obj - del /f /q external\libz\src\gzwrite.obj - del /f /q external\libz\src\infback.obj - del /f /q external\libz\src\inffast.obj - del /f /q external\libz\src\inflate.obj - del /f /q external\libz\src\inftrees.obj - del /f /q external\libz\src\trees.obj - del /f /q external\libz\src\uncompr.obj - del /f /q external\libz\src\zutil.obj del /f /q external\stb_ds.obj del /f /q external\stb_image.obj del /f /q external\stb_truetype.obj @@ -41,6 +26,11 @@ clean: del /f /q src\dialog\filechooser.obj del /f /q src\dialog\messagebox.obj del /f /q src\draw.obj + del /f /q src\error.obj + del /f /q src\font\boldfont.obj + del /f /q src\font\boldttf.obj + del /f /q src\font\font.obj + del /f /q src\font\ttf.obj del /f /q src\icon\back.obj del /f /q src\icon\clock.obj del /f /q src\icon\computer.obj @@ -59,15 +49,7 @@ clean: del /f /q src\icon\warning.obj del /f /q src\lowlevel.obj del /f /q src\string.obj - del /f /q src\text\font\boldfont.obj - del /f /q src\text\font\boldmonottf.obj - del /f /q src\text\font\boldttf.obj - del /f /q src\text\font\font.obj - del /f /q src\text\font\monottf.obj - del /f /q src\text\font\ttf.obj - del /f /q src\text\ft2.obj - del /f /q src\text\stbtt.obj - del /f /q src\text\text.obj + del /f /q src\text.obj del /f /q src\unicode.obj del /f /q src\widget\box.obj del /f /q src\widget\button.obj @@ -92,8 +74,8 @@ clean: del /f /q src\Mw.dll del /f /q src\Mw.lib -src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj - $(LD) $(LDFLAGS) -e$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj -lopengl32.lib -lgdi32.lib -luser32.lib -ladvapi32.lib +src\Mw.dll: external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\error.obj src\font\boldfont.obj src\font\boldttf.obj src\font\font.obj src\font\ttf.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj + $(LD) $(LDFLAGS) -e$@ external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\error.obj src\font\boldfont.obj src\font\boldttf.obj src\font\font.obj src\font\ttf.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj -lopengl32.lib -lgdi32.lib -luser32.lib implib src\Mw.lib src\Mw.dll .c.obj: diff --git a/CMakeLists.txt b/CMakeLists.txt index a6f823d31..5d9aeed73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.25) project( - milsko + milsko ) include(CheckIncludeFiles) @@ -9,398 +9,205 @@ include(GNUInstallDirs) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - -option(MW_CLASSIC_THEME "Use classic theme" OFF) -option(MW_BUILD_EXAMPLES "Build examples" OFF) -option(MW_USE_STB_IMAGE "Use stb_image" ON) -option(MW_USE_STB_TRUETYPE "Use stb_truetype" OFF) - -if(${CMAKE_SYSTEM_NAME} MATCHES Retro) - option(MW_BUILD_SHARED "Build a shared library" OFF) - option(MW_BUILD_STATIC "Build a static library" ON) - option(MW_TRY_OPENGL "Try to compile OpenGL widget or not" OFF) - option(MW_TRY_VULKAN "Try to compile Vulkan widget or not" OFF) -else() - option(MW_BUILD_SHARED "Build a shared library" ON) - option(MW_BUILD_STATIC "Build a static library" OFF) - option(MW_TRY_OPENGL "Try to compile OpenGL widget or not" ON) - option(MW_TRY_VULKAN "Try to compile Vulkan widget or not" ON) -endif() - -option(MW_INSTALL_HEADERS "Install headers" ON) - -if(${CMAKE_SYSTEM_NAME} STREQUAL Darwin OR ${CMAKE_SYSTEM_NAME} MATCHES Retro) - option(MW_USE_FREETYPE2 "Use FreeType 2" OFF) -else() - option(MW_USE_FREETYPE2 "Use FreeType 2" ON) -endif() - -if(${CMAKE_SYSTEM_NAME} STREQUAL Linux) - option(MW_USE_WAYLAND "Enable Wayland backend" ON) -endif() +option(TRY_OPENGL "Try to compile OpenGL widget or not" ON) +option(TRY_VULKAN "Try to compile Vulkan widget or not" ON) +option(CLASSIC_THEME "Use classic theme" OFF) +option(BUILD_EXAMPLES "Build examples" OFF) +option(USE_STB_IMAGE "Use stb_image" ON) +option(USE_STB_TRUETYPE "Use stb_truetype" OFF) +option(USE_FREETYPE2 "Use FreeType 2" ON) file( - GLOB - SOURCES - external/libz/src/*.c src/*.c src/cursor/*.c src/icon/*.c src/widget/*.c src/text/*.c src/text/font/*.c src/dialog/*.c src/abstract/*.c external/*.c + GLOB + SOURCES + src/*.c src/cursor/*.c src/icon/*.c src/text.c src/widget/*.c src/math/*.c src/font/*.c src/dialog/*.c src/abstract/*.c external/*.c ) -if(NOT MW_USE_STB_IMAGE) - list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/external/stb_image.c") +list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/widget/opengl.c") +list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/widget/vulkan.c") + +if(NOT USE_STB_IMAGE) + list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/external/stb_image.c") endif() -if(NOT MW_USE_STB_TRUETYPE) - list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/external/stb_truetype.c") +if(NOT USE_STB_TRUETYPE) + list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/external/stb_truetype.c") endif() if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD") - list(APPEND CMAKE_REQUIRED_INCLUDES "/usr/X11R7/include") - list(APPEND CMAKE_REQUIRED_INCLUDES "/usr/pkg/include") + list(APPEND CMAKE_REQUIRED_INCLUDES "/usr/X11R7/include") + list(APPEND CMAKE_REQUIRED_INCLUDES "/usr/pkg/include") endif() -if(MW_TRY_OPENGL) - find_package(OpenGL) - if(OpenGL_FOUND) - set(MW_BUILD_OPENGL ON) - if(APPLE) - list(APPEND SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/widget/opengl_cocoa.m") - endif() - message(STATUS "OpenGL widget has been enabled") - else() - message(WARNING "OpenGL widget has been disabled") - endif() +if(TRY_OPENGL) + check_include_files(GL/gl.h HAVE_GL_GL_H) + if(HAVE_GL_GL_H) + set(BUILD_OPENGL ON) + list(APPEND SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/widget/opengl.c") + message(STATUS "OpenGL widget has been enabled") + else() + message(WARNING "OpenGL widget has been disabled") + endif() endif() -if(MW_TRY_VULKAN) - check_include_files(vulkan/vulkan.h HAVE_VULKAN_VULKAN_H) - if(HAVE_VULKAN_VULKAN_H) - set(MW_BUILD_VULKAN ON) - message(STATUS "Vulkan widget has been enabled") - else() - message(WARNING "Vulkan widget has been disabled") - endif() +if(TRY_OPENGL) + check_include_files(vulkan/vulkan.h HAVE_VULKAN_VULKAN_H) + if(HAVE_VULKAN_VULKAN_H) + set(BUILD_VULKAN ON) + list(APPEND SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/widget/vulkan.c") + message(STATUS "Vulkan widget has been enabled") + else() + message(WARNING "Vulkan widget has been disabled") + endif() endif() -if(MW_BUILD_STATIC) - message(STATUS "Building Milsko as a static library") - add_library( - Mw - ${SOURCES} -) -elseif(MW_BUILD_SHARED) - message(STATUS "Building Milsko as a shared library") - add_library( - Mw - SHARED - ${SOURCES} +add_library( + Mw + SHARED + ${SOURCES} ) + +if(USE_STB_IMAGE) + target_compile_definitions( + Mw + PRIVATE + USE_STB_IMAGE + ) else() - message(ERROR "Must either build a shared library or a static library") + file( + GLOB + IMAGE_SOURCES + external/libz/src/*.c external/libjpeg/src/*.c external/libpng/src/*.c + ) + target_sources( + Mw + PRIVATE + ${IMAGE_SOURCES} + ) + target_include_directories( + Mw + PRIVATE + external/libz/include external/libjpeg/include external/libpng/include + ) endif() -if(MW_USE_STB_IMAGE) - target_compile_definitions( - Mw - PRIVATE - USE_STB_IMAGE - ) -else() - file( - GLOB - IMAGE_SOURCES - external/libjpeg/src/*.c external/libpng/src/*.c - ) - target_sources( - Mw - PRIVATE - ${MW_IMAGE_SOURCES} - ) - target_include_directories( - Mw - PRIVATE - external/libjpeg/include external/libpng/include - ) +if(USE_STB_TRUETYPE) + target_compile_definitions( + Mw + PRIVATE + USE_STB_TRUETYPE + ) endif() -if(MW_USE_STB_TRUETYPE) - target_compile_definitions( - Mw - PRIVATE - USE_STB_TRUETYPE - ) -endif() +if(USE_FREETYPE2) + target_compile_definitions( + Mw + PRIVATE + USE_FREETYPE2 + ) -if(MW_USE_FREETYPE2) - target_compile_definitions( - Mw - PRIVATE - USE_FREETYPE2 - ) - - find_package(PkgConfig) - pkg_check_modules(FT2 REQUIRED freetype2) - list(APPEND INCLUDE_DIRS ${FT2_INCLUDE_DIRS}) - list(APPEND LIBRARY_DIRS ${FT2_LIBRARY_DIRS}) - list(APPEND LIBRARIES ${FT2_LIBRARIES}) -endif() - -if(MW_USE_WAYLAND) - function(scan_wayland_protocol_core) - execute_process( - COMMAND wayland-scanner private-code /usr/share/wayland/wayland.xml ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland-core-protocol.c - OUTPUT_VARIABLE WAYLAND_SCANNER_OUTPUT - ERROR_VARIABLE WAYLAND_SCANNER_ERROR - ECHO_OUTPUT_VARIABLE - ECHO_ERROR_VARIABLE - COMMAND_ECHO STDOUT - ) - target_sources( - Mw - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland-core-protocol.c - ) - execute_process( - COMMAND wayland-scanner client-header /usr/share/wayland/wayland.xml ${CMAKE_CURRENT_SOURCE_DIR}/include/Mw/LowLevel/Wayland/wayland-core-protocol.h - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE WAYLAND_SCANNER_OUTPUT - ERROR_VARIABLE WAYLAND_SCANNER_ERROR - ECHO_OUTPUT_VARIABLE - ECHO_ERROR_VARIABLE - COMMAND_ECHO STDOUT - ) - endfunction() - - function(scan_wayland_protocol tier proto ver) - SET(proto_c ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland-${proto}-protocol.c) - execute_process( - COMMAND wayland-scanner private-code /usr/share/wayland-protocols/${tier}/${proto}/${proto}${ver}.xml ${proto_c} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE WAYLAND_SCANNER_OUTPUT - ERROR_VARIABLE WAYLAND_SCANNER_ERROR - ECHO_OUTPUT_VARIABLE - ECHO_ERROR_VARIABLE - COMMAND_ECHO STDOUT - ) - target_sources( - Mw - PRIVATE - ${proto_c} - ) - execute_process( - COMMAND wayland-scanner client-header /usr/share/wayland-protocols/${tier}/${proto}/${proto}${ver}.xml ${CMAKE_CURRENT_SOURCE_DIR}/include/Mw/LowLevel/Wayland/${proto}-client-protocol.h - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE WAYLAND_SCANNER_OUTPUT - ERROR_VARIABLE WAYLAND_SCANNER_ERROR - ECHO_OUTPUT_VARIABLE - ECHO_ERROR_VARIABLE - COMMAND_ECHO STDOUT - ) - endfunction() - - check_include_files(wayland-client.h HAVE_WL_H) - check_include_files(xkbcommon/xkbcommon.h HAVE_XKBCOMMON_H) - check_include_files(cairo/cairo.h HAVE_CAIRO_H) - if(HAVE_WL_H) - if(HAVE_XKBCOMMON_H) - if(HAVE_CAIRO_H) - scan_wayland_protocol_core() - scan_wayland_protocol("stable" "xdg-shell" "") - scan_wayland_protocol("stable" "viewporter" "") - scan_wayland_protocol("stable" "tablet" "-v2") - scan_wayland_protocol("staging" "xdg-toplevel-icon" "-v1") - scan_wayland_protocol("staging" "cursor-shape" "-v1") - scan_wayland_protocol("unstable" "xdg-decoration" "-unstable-v1") - scan_wayland_protocol("unstable" "primary-selection" "-unstable-v1") - scan_wayland_protocol("unstable" "pointer-constraints" "-unstable-v1") - scan_wayland_protocol("unstable" "relative-pointer" "-unstable-v1") - - target_sources( - Mw - PRIVATE - src/backend/wayland.c - ) - target_compile_definitions( - Mw - PRIVATE - USE_WAYLAND - ) - message(STATUS "Wayland backend has been enabled") - else() - message(WARNING "Wayland backend has been disabled") - endif() - else() - message(WARNING "Wayland backend has been disabled") - endif() - else() - message(WARNING "Wayland backend has been disabled") - endif() -endif() - -if(APPLE AND MW_BUILD_OPENGL) - target_compile_definitions( - Mw - PRIVATE - GL_SILENCE_DEPRECATION - ) + find_package(PkgConfig) + pkg_check_modules(FT2 REQUIRED freetype2) + list(APPEND INCLUDE_DIRS ${FT2_INCLUDE_DIRS}) + list(APPEND LIBRARY_DIRS ${FT2_LIBRARY_DIRS}) + list(APPEND LIBRARIES ${FT2_LIBRARIES}) endif() target_include_directories( - Mw - PRIVATE - external/libz/include + Mw + PUBLIC + include ) -target_include_directories( - Mw - PUBLIC - include -) - -if(MW_CLASSIC_THEME) - target_compile_definitions( - Mw - PRIVATE - USE_CLASSIC_THEME - ) +if(CLASSIC_THEME) + target_compile_definitions( + Mw + PRIVATE + USE_CLASSIC_THEME + ) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - target_sources( - Mw - PRIVATE - src/backend/gdi.c - ) - target_compile_definitions( - Mw - PRIVATE - USE_GDI - ) - list(APPEND LIBRARIES gdi32) - target_link_options( - Mw - PRIVATE - -static-libgcc - ) -elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - target_sources( - Mw - PRIVATE - src/backend/cocoa.m - ) - target_compile_definitions( - Mw - PRIVATE - USE_COCOA - ) - list(APPEND LIBRARIES objc) - target_link_options( - Mw - PRIVATE - -framework Cocoa - ) -elseif(CMAKE_SYSTEM_NAME MATCHES "Retro") - target_sources( - Mw - PRIVATE - src/backend/classicmacos.c - ) - if(PLATFORM MATCHES retroppc) - set_target_properties(Mw PROPERTIES COMPILE_FLAGS "-ffunction-sections -mcpu=601 -Os -Wall -Wextra -Wno-unused-parameter") - set_target_properties(Mw PROPERTIES LINK_FLAGS "-Wl,-gc-sections") - endif() - - list(APPEND LIBRARIES InterfaceLib WindowsLib ThreadsLib) - - target_compile_definitions( - Mw - PRIVATE - CLASSIC_MAC_OS - ) + target_sources( + Mw + PRIVATE + src/backend/gdi.c + ) + target_compile_definitions( + Mw + PRIVATE + USE_GDI + ) + list(APPEND LIBRARIES gdi32) else() - find_package(PkgConfig) - pkg_check_modules(X11 REQUIRED x11) - pkg_check_modules(XRENDER REQUIRED xrender) + find_package(PkgConfig) + pkg_check_modules(X11 REQUIRED x11) + pkg_check_modules(XRENDER REQUIRED xrender) - target_sources( - Mw - PRIVATE - src/backend/x11.c - ) - target_compile_definitions( - Mw - PRIVATE - USE_X11 - ) - list(APPEND INCLUDE_DIRS ${X11_INCLUDE_DIRS} ${XRENDER_INCLUDE_DIRS}) - list(APPEND LIBRARY_DIRS ${X11_LIBRARY_DIRS} ${XRENDER_LIBRARY_DIRS}) - list(APPEND LIBRARIES ${X11_LIBRARIES} ${XRENDER_LIBRARIES} m) - if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - list(APPEND LIBRARIES dl) - endif() + target_sources( + Mw + PRIVATE + src/backend/x11.c + ) + target_compile_definitions( + Mw + PRIVATE + USE_X11 + ) + list(APPEND INCLUDE_DIRS ${X11_INCLUDE_DIRS} ${XRENDER_INCLUDE_DIRS}) + list(APPEND LIBRARY_DIRS ${X11_LIBRARY_DIRS} ${XRENDER_LIBRARY_DIRS}) + list(APPEND LIBRARIES ${X11_LIBRARIES} ${XRENDER_LIBRARIES} m) + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + list(APPEND LIBRARIES dl) + endif() endif() target_include_directories( - Mw - PRIVATE - ${INCLUDE_DIRS} + Mw + PRIVATE + ${INCLUDE_DIRS} ) target_link_directories( - Mw - PRIVATE - ${LIBRARY_DIRS} + Mw + PRIVATE + ${LIBRARY_DIRS} ) target_link_libraries( - Mw - PRIVATE - ${LIBRARIES} + Mw + PRIVATE + ${LIBRARIES} ) -if(MW_BUILD_OPENGL) - target_compile_definitions( - Mw - PRIVATE - MW_OPENGL - ) -endif() - -if(MW_BUILD_VULKAN) - check_include_files(vulkan/vk_enum_string_helper.h HAS_VK_ENUM_STRING_HELPER) - if(HAS_VK_ENUM_STRING_HELPER) - target_compile_definitions( - Mw - PRIVATE - HAS_VK_ENUM_STRING_HELPER - ) - endif() - - target_compile_definitions( - Mw - PRIVATE - MW_VULKAN - ) +if(BUILD_VULKAN) + check_include_files(vulkan/vk_enum_string_helper.h HAS_VK_ENUM_STRING_HELPER) + if(HAS_VK_ENUM_STRING_HELPER) + target_compile_definitions( + Mw + PRIVATE + HAS_VK_ENUM_STRING_HELPER + ) + endif() endif() target_compile_definitions( - Mw - PRIVATE - _MILSKO + Mw + PRIVATE + _MILSKO ) +include(GNUInstallDirs) install( - TARGETS Mw - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + TARGETS Mw + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +) +install( + DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" ) -if(MW_INSTALL_HEADERS) - install( - DIRECTORY include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - FILES_MATCHING PATTERN "*.h" - ) -endif() - -if(MW_BUILD_EXAMPLES) - add_subdirectory(examples) +if(BUILD_EXAMPLES) + add_subdirectory(examples) endif() diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 8c1d0050a..000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,74 +0,0 @@ -pipeline { - agent { - label "built-in" - } - stages { - stage("Build document") { - when { - branch "master" - } - agent { - label "built-in" - } - steps { - sh("rm -rf include/Mw/LowLevel/Wayland") - sh("doxygen") - sh("rm -rf /var/www/milsko-doxygen") - sh("mv doxygen/html /var/www/milsko-doxygen") - } - post { - always { - notifyDiscord() - } - } - } - stage("Build") { - parallel { - stage("Build for Linux 64-bit") { - agent { - label "built-in" - } - steps { - sh("./configure --enable-opengl --enable-vulkan --without-vulkan-string-helper") - sh("make clean") - sh("make -j4") - } - } - stage("Build for Windows 32-bit") { - agent { - label "built-in" - } - steps { - sh("./configure --enable-opengl --enable-stb-truetype --disable-freetype2 --cross --target=Windows --host=i686-w64-mingw32") - sh("make clean") - sh("make -j4") - } - } - stage("Build for Windows 64-bit") { - agent { - label "built-in" - } - steps { - sh("./configure --enable-opengl --enable-stb-truetype --disable-freetype2 --cross --target=Windows --host=x86_64-w64-mingw32") - sh("make clean") - sh("make -j4") - } - } - stage("Build for Windows 32-bit (MSVC)") { - agent { - label "2012r2" - } - steps { - bat("nmake -f NTMakefile clean") - bat("nmake -f NTMakefile") - } - } - } - post { - always { - notifyDiscord() - } - } - } - } -} diff --git a/Koakumafile b/Koakumafile new file mode 100755 index 000000000..92cb41be5 --- /dev/null +++ b/Koakumafile @@ -0,0 +1,24 @@ +# vim: syntax=tcl + +proc run {project_name} { + if { "$project_name" == "MilskoDoxygen" } { + RunCommand "doxygen" + RunCommand "rm -rf /var/www/milsko-doxygen" + RunCommand "mv doxygen/html /var/www/milsko-doxygen" + } else { + foreach target {"Linux" "Win32" "Win64"} { + if { [file exists "Makefile"] == 1 } { + RunCommand "make distclean" + } + if { "$target" == "Linux" } { + RunCommand "./Makefile.pl --enable-opengl --enable-vulkan --without-vulkan-string-helper" + } elseif { "$target" == "Win32" } { + RunCommand "./Makefile.pl --enable-opengl --enable-stb-truetype --disable-freetype2 --cross --target=Windows --host=i686-w64-mingw32" + } elseif { "$target" == "Win64" } { + RunCommand "./Makefile.pl --enable-opengl --enable-stb-truetype --disable-freetype2 --cross --target=Windows --host=x86_64-w64-mingw32" + } + RunCommand "make clean" + RunCommand "make -j4" + } + } +} diff --git a/LICENSE b/LICENSE index a7729adbf..4e2b25f16 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2025-2026, Pyrite development team +Copyright (c) 2025, Pyrite development team All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/configure b/Makefile.pl similarity index 69% rename from configure rename to Makefile.pl index 98a6b3a6e..ea9f90cb5 100755 --- a/configure +++ b/Makefile.pl @@ -14,12 +14,11 @@ our $prefix = "/usr/local"; our $cc = defined($ENV{CC}) ? $ENV{CC} : "*host*gcc"; our $ar = defined($ENV{AR}) ? $ENV{AR} : "*host*ar"; our $incdir = "-I include"; -our $incdir2 = ""; -our $cflags = "-fPIC -D_MILSKO -fvisibility=hidden"; +our $cflags = "-fPIC -D_MILSKO"; our $libdir = ""; our $ldflags = ""; our $math = "-lm"; -our @shared = "-shared"; +our $shared = "-shared"; our @backends = (); our $library_prefix = "lib"; @@ -38,18 +37,18 @@ require("./pl/utils.pl"); param_set("classic-theme", 0); param_set("stb-image", 1); +param_set("stb-truetype", 0); +param_set("freetype2", 1); param_set("xrender", 1); param_set("opengl", 0); param_set("vulkan", 0); param_set("vulkan-string-helper", 1); param_set("shared", 1); param_set("static", 1); -param_set("examples", 1); - my %features = ( "classic-theme" => "use classic theme", - "stb-image" => "use stb_image, instead use libjpeg/libpng", + "stb-image" => "use stb_image instead of libjpeg/libpng", "stb-truetype" => "use stb_truetype", "freetype2" => "use FreeType2", "xrender" => "use XRender", @@ -58,8 +57,7 @@ my %features = ( "vulkan-string-helper" => "use Vulkan string helper", "shared" => "build shared library", "static" => "build static library", - "wayland" => "enable wayland backend", - "gnustep" => "use gnustep", + "experimental-wayland" => "enable WIP wayland backend", ); my @features_keys = ( "1classic-theme", "1stb-image", @@ -67,7 +65,7 @@ my @features_keys = ( "1opengl", "2xrender", "1vulkan", "2vulkan-string-helper", "1shared", "1static", - "1wayland", "1gnustep", + "1experimental-wayland" ); foreach my $l (@ARGV) { @@ -86,15 +84,9 @@ foreach my $l (@ARGV) { elsif ($l =~ /^--host=(.+)$/) { $host = $1 . "-"; } - elsif ($l =~ /^--cflags=(.+)$/) { - add_cflags($1); - } elsif ($l eq "--cross") { $cross = 1; } - elsif ($l eq "--tiny") { - param_set("tiny",1); - } elsif (($l eq "-h") or ($l eq "--help")) { print("Milsko Toolkit Configuration Utility\n"); print("\n"); @@ -105,8 +97,6 @@ foreach my $l (@ARGV) { print(" --prefix=PREFIX Installation prefix\n"); print(" --host=TARGET Host for compiler/archiver\n"); print(" --target=TARGET Specify target\n"); - print(" --cflags=CFLAGS Add cflags\n"); - print(" --tiny Build smallest possible library\n"); print(" --cross Indicate cross compilation\n"); print("\n"); print("Features:\n"); @@ -132,21 +122,6 @@ foreach my $l (@ARGV) { } } -if($target ne "Darwin" and $target ne "ClassicMacOS" and $target ne "Windows") { - param_set("freetype2", 1); - param_set("stb-truetype", 0); -} else { - param_set("freetype2", 0); - param_set("stb-truetype", 0); -} - -if($target eq "Linux") { - param_set("x11", 1); - if(!param_get("tiny")){ - param_set("wayland", 1); - } -} - if (-f "./pl/ostype/${target}.pl") { require("./pl/ostype/${target}.pl"); } @@ -185,13 +160,13 @@ open(OUT, ">", "Makefile"); print(OUT "PREFIX = ${prefix}\n"); print(OUT "AR = ${ar}\n"); print(OUT "CC = ${cc}\n"); -print(OUT "INCDIR = ${incdir} ${incdir2}\n"); +print(OUT "INCDIR = ${incdir}\n"); print(OUT "CFLAGS = ${cflags}\n"); print(OUT "LIBDIR = ${libdir}\n"); print(OUT "LDFLAGS = ${ldflags}\n"); print(OUT "LIBS = ${math} ${libs}\n"); print(OUT "MATH = ${math}\n"); -print(OUT "SHARED = @{shared}\n"); +print(OUT "SHARED = ${shared}\n"); print(OUT "\n"); print(OUT ".PHONY: all format clean distclean lib examples install\n"); print(OUT "\n"); @@ -208,10 +183,10 @@ print(OUT " cp -rf include \$(DESTDIR)\$(PREFIX)/\n"); print(OUT "\n"); print(OUT "format:\n"); print(OUT -" clang-format --verbose -i `find src include examples \"(\" -name \"*.c\" -or -name \"*.h\" -or -name \"*.m\" \")\" -and -not -name \"*ttf.c\"`\n" +" clang-format --verbose -i `find src include examples -name \"*.c\" -or -name \"*.h\"`\n" ); print(OUT -" perltidy -b -bext=\"/\" --paren-tightness=2 `find tools pl configure -name \"*.pl\"`\n" +" perltidy -b -bext=\"/\" --paren-tightness=2 `find tools pl Makefile.pl -name \"*.pl\"`\n" ); print(OUT "\n"); print(OUT "lib:"); @@ -244,75 +219,45 @@ foreach my $l (@library_targets) { my $s = $l; my $o = $object_suffix; $o =~ s/\./\\\./g; - - if ($l =~ /cocoa/) { - $s =~ s/$o$/.m/; - } - else { - $s =~ s/$o$/.c/; - } + $s =~ s/$o$/.c/; if ($l =~ /^external\//) { $warn = ""; } print(OUT "${l}: ${s}\n"); - print(OUT " \$(CC) $warn \$\(INCDIR) \$(CFLAGS\) -c -o ${l} ${s}\n"); + print(OUT " \$(CC) $warn \$(CFLAGS\) \$\(INCDIR) -c -o ${l} ${s}\n"); } print(OUT "\n"); print(OUT "\n"); -if (param_get("examples")) { - print(OUT "examples: " . join(" ", @examples_targets) . "\n"); - print(OUT "\n"); - foreach my $l (@examples_targets) { - my $libs = ""; - my $s = $l; - my $o = $executable_suffix; - $o =~ s/\./\\\./g; - $s =~ s/$o$//; +print(OUT "examples: " . join(" ", @examples_targets) . "\n"); +print(OUT "\n"); +foreach my $l (@examples_targets) { + my $libs = ""; + my $s = $l; + my $o = $executable_suffix; + $o =~ s/\./\\\./g; + $s =~ s/$o$//; - if (defined($examples_libs{$l})) { - $libs = $examples_libs{$l}; - } - - if (param_get("shared")) { - print(OUT - "${l}: ${s}${object_suffix} src/${library_prefix}Mw${library_suffix}\n" - ); - } else { - print(OUT - "${l}: ${s}${object_suffix} src/${library_prefix}Mw.a\n" - ); - } - if (grep(/^cocoa$/, @backends)) { - print(OUT -" \$(CC) -L./src \$\(LIBDIR) -o ${l} ${s}${object_suffix} -lMw ${math} ${libs}\n" - ); - } - else { - print(OUT -" \$(CC) -L src -Wl,-R./src \$\(LIBDIR) -o ${l} ${s}${object_suffix} -lMw ${math} ${libs}\n" - ); - } - - if($target eq "ClassicMacOS") { - print(OUT -" ".$ENV{RETRO68_TOOLCHAIN_PATH}."/bin/MakePEF ${l} -o ${s}.pef\n"); - print(OUT -" Rez -I ".$ENV{RETRO68_TOOLCHAIN_PATH}."/RIncludes ".$ENV{RETRO68_TOOLCHAIN_PATH}."/RIncludes/Retro68APPL.r -DCFRAG_NAME=\"example\" --data ${l}.pef --cc ${l}.dsk -t APPL\n" - ); - } - - print(OUT "${s}${object_suffix}: ${s}.c\n"); - print(OUT -" \$(CC) -c \$\(INCDIR) -o ${s}${object_suffix} ${s}.c -lMw ${math}\n" - ); + if (defined($examples_libs{$l})) { + $libs = $examples_libs{$l}; } + + print(OUT +"${l}: ${s}${object_suffix} src/${library_prefix}Mw${library_suffix}\n" + ); + print(OUT +" \$(CC) -L src -Wl,-R./src \$\(LIBDIR) -o ${l} ${s}${object_suffix} -lMw ${math} ${libs}\n" + ); + print(OUT "${s}${object_suffix}: ${s}.c\n"); + print(OUT + " \$(CC) -c \$\(INCDIR) -o ${s}${object_suffix} ${s}.c -lMw ${math}\n" + ); } print(OUT "\n"); print(OUT "clean:\n"); print(OUT -" rm -f */*.o */*/*.o */*/*/*.o */*.exe */*/*.exe */*/*/*.exe src/*.so src/*.dll src/*.dylib src/*.a " +" rm -f */*.o */*/*.o */*/*/*.o */*.exe */*/*.exe */*/*/*.exe src/*.so src/*.dll src/*.a " . join(" ", @examples_targets) . "\n"); print(OUT "\n"); diff --git a/NTMakefile b/NTMakefile index de5186841..265418a7a 100644 --- a/NTMakefile +++ b/NTMakefile @@ -1,26 +1,11 @@ CC = cl /TC /c /nologo LD = link /nologo -CFLAGS = /Iinclude /Iexternal\libz\include /D_MILSKO /DUSE_GDI /DUSE_STB_TRUETYPE /DUSE_STB_IMAGE /DSTBI_NO_SIMD +CFLAGS = /Iinclude /D_MILSKO /DUSE_GDI /DUSE_STB_TRUETYPE /DUSE_STB_IMAGE /DSTBI_NO_SIMD LDFLAGS = /DLL .SUFFIXES: .obj .c all: src\Mw.dll clean: - del /f /q external\libz\src\adler32.obj - del /f /q external\libz\src\compress.obj - del /f /q external\libz\src\crc32.obj - del /f /q external\libz\src\deflate.obj - del /f /q external\libz\src\gzclose.obj - del /f /q external\libz\src\gzlib.obj - del /f /q external\libz\src\gzread.obj - del /f /q external\libz\src\gzwrite.obj - del /f /q external\libz\src\infback.obj - del /f /q external\libz\src\inffast.obj - del /f /q external\libz\src\inflate.obj - del /f /q external\libz\src\inftrees.obj - del /f /q external\libz\src\trees.obj - del /f /q external\libz\src\uncompr.obj - del /f /q external\libz\src\zutil.obj del /f /q external\stb_ds.obj del /f /q external\stb_image.obj del /f /q external\stb_truetype.obj @@ -41,6 +26,11 @@ clean: del /f /q src\dialog\filechooser.obj del /f /q src\dialog\messagebox.obj del /f /q src\draw.obj + del /f /q src\error.obj + del /f /q src\font\boldfont.obj + del /f /q src\font\boldttf.obj + del /f /q src\font\font.obj + del /f /q src\font\ttf.obj del /f /q src\icon\back.obj del /f /q src\icon\clock.obj del /f /q src\icon\computer.obj @@ -59,15 +49,7 @@ clean: del /f /q src\icon\warning.obj del /f /q src\lowlevel.obj del /f /q src\string.obj - del /f /q src\text\font\boldfont.obj - del /f /q src\text\font\boldmonottf.obj - del /f /q src\text\font\boldttf.obj - del /f /q src\text\font\font.obj - del /f /q src\text\font\monottf.obj - del /f /q src\text\font\ttf.obj - del /f /q src\text\ft2.obj - del /f /q src\text\stbtt.obj - del /f /q src\text\text.obj + del /f /q src\text.obj del /f /q src\unicode.obj del /f /q src\widget\box.obj del /f /q src\widget\button.obj @@ -92,8 +74,8 @@ clean: del /f /q src\Mw.dll del /f /q src\Mw.lib -src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj - $(LD) $(LDFLAGS) /OUT:$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj opengl32.lib gdi32.lib user32.lib advapi32.lib +src\Mw.dll: external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\error.obj src\font\boldfont.obj src\font\boldttf.obj src\font\font.obj src\font\ttf.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj + $(LD) $(LDFLAGS) /OUT:$@ external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\error.obj src\font\boldfont.obj src\font\boldttf.obj src\font\font.obj src\font\ttf.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj opengl32.lib gdi32.lib user32.lib .c.obj: diff --git a/README.txt b/README.txt index dc9d6bf2f..32e8630d3 100644 --- a/README.txt +++ b/README.txt @@ -6,10 +6,8 @@ distributions and building instructions for Milsko GUI Toolkit. Requirements - Milsko requires either - * A Windows environment with GDI (so anything NT or 9x) - * A MacOS environment with Cocoa (10.4 or above supported) - * A Unix-like environment with X11 for runtime. + Milsko requires the Windows environment with GDI (so anything NT or 9x) or +the Unix-like environment with X11 for runtime. To build Milsko for Windows, you must have one of following compilers: * Visual C++ 6.0 or newer @@ -17,7 +15,7 @@ distributions and building instructions for Milsko GUI Toolkit. * Open Watcom 2.0 or newer * MinGW-w64 - and for Unix-like and MacOS: + and for Unix-like: * GNU C Compiler * Clang @@ -63,8 +61,8 @@ D. MinGW-w64/GCC/Clang 1) Determine if you need Vulkan and/or OpenGL. -2) Run `./configure'. - For help, run `./configure --help'. +2) Run `./Makefile.pl'. + For help, run `./Makefile.pl --help'. 3) Run `make'. diff --git a/WatMakefile b/WatMakefile index 633a259a3..dc7b12119 100644 --- a/WatMakefile +++ b/WatMakefile @@ -1,25 +1,10 @@ -CC = wcc386 -bt=nt -q -bd -d3 +CC = wcc386 -bt=nt -q -bd LD = wlink option quiet -CFLAGS = -i=include -i=external/libz/include -d_MILSKO -dUSE_GDI -dUSE_STB_TRUETYPE -dUSE_STB_IMAGE -dSTBI_NO_SIMD +CFLAGS = -i=include -d_MILSKO -dUSE_GDI -dUSE_STB_TRUETYPE -dUSE_STB_IMAGE -dSTBI_NO_SIMD LDFLAGS = system nt_dll all: src/Mw.dll clean: .SYMBOLIC - %erase external/libz/src/adler32.obj - %erase external/libz/src/compress.obj - %erase external/libz/src/crc32.obj - %erase external/libz/src/deflate.obj - %erase external/libz/src/gzclose.obj - %erase external/libz/src/gzlib.obj - %erase external/libz/src/gzread.obj - %erase external/libz/src/gzwrite.obj - %erase external/libz/src/infback.obj - %erase external/libz/src/inffast.obj - %erase external/libz/src/inflate.obj - %erase external/libz/src/inftrees.obj - %erase external/libz/src/trees.obj - %erase external/libz/src/uncompr.obj - %erase external/libz/src/zutil.obj %erase external/stb_ds.obj %erase external/stb_image.obj %erase external/stb_truetype.obj @@ -40,6 +25,11 @@ clean: .SYMBOLIC %erase src/dialog/filechooser.obj %erase src/dialog/messagebox.obj %erase src/draw.obj + %erase src/error.obj + %erase src/font/boldfont.obj + %erase src/font/boldttf.obj + %erase src/font/font.obj + %erase src/font/ttf.obj %erase src/icon/back.obj %erase src/icon/clock.obj %erase src/icon/computer.obj @@ -58,15 +48,7 @@ clean: .SYMBOLIC %erase src/icon/warning.obj %erase src/lowlevel.obj %erase src/string.obj - %erase src/text/font/boldfont.obj - %erase src/text/font/boldmonottf.obj - %erase src/text/font/boldttf.obj - %erase src/text/font/font.obj - %erase src/text/font/monottf.obj - %erase src/text/font/ttf.obj - %erase src/text/ft2.obj - %erase src/text/stbtt.obj - %erase src/text/text.obj + %erase src/text.obj %erase src/unicode.obj %erase src/widget/box.obj %erase src/widget/button.obj @@ -91,41 +73,11 @@ clean: .SYMBOLIC %erase src/Mw.dll %erase src/Mw.lib -src/Mw.dll: external/libz/src/adler32.obj external/libz/src/compress.obj external/libz/src/crc32.obj external/libz/src/deflate.obj external/libz/src/gzclose.obj external/libz/src/gzlib.obj external/libz/src/gzread.obj external/libz/src/gzwrite.obj external/libz/src/infback.obj external/libz/src/inffast.obj external/libz/src/inflate.obj external/libz/src/inftrees.obj external/libz/src/trees.obj external/libz/src/uncompr.obj external/libz/src/zutil.obj external/stb_ds.obj external/stb_image.obj external/stb_truetype.obj src/abstract/directory.obj src/abstract/dynamic.obj src/abstract/time.obj src/backend/gdi.obj src/color.obj src/core.obj src/cursor/arrow.obj src/cursor/cross.obj src/cursor/default.obj src/cursor/hidden.obj src/cursor/text.obj src/default.obj src/dialog/colorpicker.obj src/dialog/directorychooser.obj src/dialog/filechooser.obj src/dialog/messagebox.obj src/draw.obj src/icon/back.obj src/icon/clock.obj src/icon/computer.obj src/icon/directory.obj src/icon/down.obj src/icon/error.obj src/icon/file.obj src/icon/forward.obj src/icon/info.obj src/icon/left.obj src/icon/news.obj src/icon/note.obj src/icon/right.obj src/icon/search.obj src/icon/up.obj src/icon/warning.obj src/lowlevel.obj src/string.obj src/text/font/boldfont.obj src/text/font/boldmonottf.obj src/text/font/boldttf.obj src/text/font/font.obj src/text/font/monottf.obj src/text/font/ttf.obj src/text/ft2.obj src/text/stbtt.obj src/text/text.obj src/unicode.obj src/widget/box.obj src/widget/button.obj src/widget/checkbox.obj src/widget/combobox.obj src/widget/entry.obj src/widget/frame.obj src/widget/image.obj src/widget/label.obj src/widget/listbox.obj src/widget/menu.obj src/widget/numberentry.obj src/widget/opengl.obj src/widget/progressbar.obj src/widget/radiobox.obj src/widget/scrollbar.obj src/widget/separator.obj src/widget/submenu.obj src/widget/treeview.obj src/widget/viewport.obj src/widget/window.obj - $(LD) $(LDFLAGS) option implib=src/Mw.lib name $@ file external/libz/src/adler32.obj file external/libz/src/compress.obj file external/libz/src/crc32.obj file external/libz/src/deflate.obj file external/libz/src/gzclose.obj file external/libz/src/gzlib.obj file external/libz/src/gzread.obj file external/libz/src/gzwrite.obj file external/libz/src/infback.obj file external/libz/src/inffast.obj file external/libz/src/inflate.obj file external/libz/src/inftrees.obj file external/libz/src/trees.obj file external/libz/src/uncompr.obj file external/libz/src/zutil.obj file external/stb_ds.obj file external/stb_image.obj file external/stb_truetype.obj file src/abstract/directory.obj file src/abstract/dynamic.obj file src/abstract/time.obj file src/backend/gdi.obj file src/color.obj file src/core.obj file src/cursor/arrow.obj file src/cursor/cross.obj file src/cursor/default.obj file src/cursor/hidden.obj file src/cursor/text.obj file src/default.obj file src/dialog/colorpicker.obj file src/dialog/directorychooser.obj file src/dialog/filechooser.obj file src/dialog/messagebox.obj file src/draw.obj file src/icon/back.obj file src/icon/clock.obj file src/icon/computer.obj file src/icon/directory.obj file src/icon/down.obj file src/icon/error.obj file src/icon/file.obj file src/icon/forward.obj file src/icon/info.obj file src/icon/left.obj file src/icon/news.obj file src/icon/note.obj file src/icon/right.obj file src/icon/search.obj file src/icon/up.obj file src/icon/warning.obj file src/lowlevel.obj file src/string.obj file src/text/font/boldfont.obj file src/text/font/boldmonottf.obj file src/text/font/boldttf.obj file src/text/font/font.obj file src/text/font/monottf.obj file src/text/font/ttf.obj file src/text/ft2.obj file src/text/stbtt.obj file src/text/text.obj file src/unicode.obj file src/widget/box.obj file src/widget/button.obj file src/widget/checkbox.obj file src/widget/combobox.obj file src/widget/entry.obj file src/widget/frame.obj file src/widget/image.obj file src/widget/label.obj file src/widget/listbox.obj file src/widget/menu.obj file src/widget/numberentry.obj file src/widget/opengl.obj file src/widget/progressbar.obj file src/widget/radiobox.obj file src/widget/scrollbar.obj file src/widget/separator.obj file src/widget/submenu.obj file src/widget/treeview.obj file src/widget/viewport.obj file src/widget/window.obj library clib3r.lib library opengl32.lib library gdi32.lib library user32.lib library advapi32.lib +src/Mw.dll: external/stb_ds.obj external/stb_image.obj external/stb_truetype.obj src/abstract/directory.obj src/abstract/dynamic.obj src/abstract/time.obj src/backend/gdi.obj src/color.obj src/core.obj src/cursor/arrow.obj src/cursor/cross.obj src/cursor/default.obj src/cursor/hidden.obj src/cursor/text.obj src/default.obj src/dialog/colorpicker.obj src/dialog/directorychooser.obj src/dialog/filechooser.obj src/dialog/messagebox.obj src/draw.obj src/error.obj src/font/boldfont.obj src/font/boldttf.obj src/font/font.obj src/font/ttf.obj src/icon/back.obj src/icon/clock.obj src/icon/computer.obj src/icon/directory.obj src/icon/down.obj src/icon/error.obj src/icon/file.obj src/icon/forward.obj src/icon/info.obj src/icon/left.obj src/icon/news.obj src/icon/note.obj src/icon/right.obj src/icon/search.obj src/icon/up.obj src/icon/warning.obj src/lowlevel.obj src/string.obj src/text.obj src/unicode.obj src/widget/box.obj src/widget/button.obj src/widget/checkbox.obj src/widget/combobox.obj src/widget/entry.obj src/widget/frame.obj src/widget/image.obj src/widget/label.obj src/widget/listbox.obj src/widget/menu.obj src/widget/numberentry.obj src/widget/opengl.obj src/widget/progressbar.obj src/widget/radiobox.obj src/widget/scrollbar.obj src/widget/separator.obj src/widget/submenu.obj src/widget/treeview.obj src/widget/viewport.obj src/widget/window.obj + $(LD) $(LDFLAGS) option implib=src/Mw.lib name $@ file external/stb_ds.obj file external/stb_image.obj file external/stb_truetype.obj file src/abstract/directory.obj file src/abstract/dynamic.obj file src/abstract/time.obj file src/backend/gdi.obj file src/color.obj file src/core.obj file src/cursor/arrow.obj file src/cursor/cross.obj file src/cursor/default.obj file src/cursor/hidden.obj file src/cursor/text.obj file src/default.obj file src/dialog/colorpicker.obj file src/dialog/directorychooser.obj file src/dialog/filechooser.obj file src/dialog/messagebox.obj file src/draw.obj file src/error.obj file src/font/boldfont.obj file src/font/boldttf.obj file src/font/font.obj file src/font/ttf.obj file src/icon/back.obj file src/icon/clock.obj file src/icon/computer.obj file src/icon/directory.obj file src/icon/down.obj file src/icon/error.obj file src/icon/file.obj file src/icon/forward.obj file src/icon/info.obj file src/icon/left.obj file src/icon/news.obj file src/icon/note.obj file src/icon/right.obj file src/icon/search.obj file src/icon/up.obj file src/icon/warning.obj file src/lowlevel.obj file src/string.obj file src/text.obj file src/unicode.obj file src/widget/box.obj file src/widget/button.obj file src/widget/checkbox.obj file src/widget/combobox.obj file src/widget/entry.obj file src/widget/frame.obj file src/widget/image.obj file src/widget/label.obj file src/widget/listbox.obj file src/widget/menu.obj file src/widget/numberentry.obj file src/widget/opengl.obj file src/widget/progressbar.obj file src/widget/radiobox.obj file src/widget/scrollbar.obj file src/widget/separator.obj file src/widget/submenu.obj file src/widget/treeview.obj file src/widget/viewport.obj file src/widget/window.obj library clib3r.lib library opengl32.lib library gdi32.lib library user32.lib -external/libz/src/adler32.obj: external/libz/src/adler32.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/compress.obj: external/libz/src/compress.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/crc32.obj: external/libz/src/crc32.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/deflate.obj: external/libz/src/deflate.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/gzclose.obj: external/libz/src/gzclose.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/gzlib.obj: external/libz/src/gzlib.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/gzread.obj: external/libz/src/gzread.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/gzwrite.obj: external/libz/src/gzwrite.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/infback.obj: external/libz/src/infback.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/inffast.obj: external/libz/src/inffast.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/inflate.obj: external/libz/src/inflate.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/inftrees.obj: external/libz/src/inftrees.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/trees.obj: external/libz/src/trees.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/uncompr.obj: external/libz/src/uncompr.c - $(CC) $(CFLAGS) -fo=$@ $< -external/libz/src/zutil.obj: external/libz/src/zutil.c - $(CC) $(CFLAGS) -fo=$@ $< external/stb_ds.obj: external/stb_ds.c $(CC) $(CFLAGS) -fo=$@ $< external/stb_image.obj: external/stb_image.c @@ -166,6 +118,16 @@ src/dialog/messagebox.obj: src/dialog/messagebox.c $(CC) $(CFLAGS) -fo=$@ $< src/draw.obj: src/draw.c $(CC) $(CFLAGS) -fo=$@ $< +src/error.obj: src/error.c + $(CC) $(CFLAGS) -fo=$@ $< +src/font/boldfont.obj: src/font/boldfont.c + $(CC) $(CFLAGS) -fo=$@ $< +src/font/boldttf.obj: src/font/boldttf.c + $(CC) $(CFLAGS) -fo=$@ $< +src/font/font.obj: src/font/font.c + $(CC) $(CFLAGS) -fo=$@ $< +src/font/ttf.obj: src/font/ttf.c + $(CC) $(CFLAGS) -fo=$@ $< src/icon/back.obj: src/icon/back.c $(CC) $(CFLAGS) -fo=$@ $< src/icon/clock.obj: src/icon/clock.c @@ -202,23 +164,7 @@ src/lowlevel.obj: src/lowlevel.c $(CC) $(CFLAGS) -fo=$@ $< src/string.obj: src/string.c $(CC) $(CFLAGS) -fo=$@ $< -src/text/font/boldfont.obj: src/text/font/boldfont.c - $(CC) $(CFLAGS) -fo=$@ $< -src/text/font/boldmonottf.obj: src/text/font/boldmonottf.c - $(CC) $(CFLAGS) -fo=$@ $< -src/text/font/boldttf.obj: src/text/font/boldttf.c - $(CC) $(CFLAGS) -fo=$@ $< -src/text/font/font.obj: src/text/font/font.c - $(CC) $(CFLAGS) -fo=$@ $< -src/text/font/monottf.obj: src/text/font/monottf.c - $(CC) $(CFLAGS) -fo=$@ $< -src/text/font/ttf.obj: src/text/font/ttf.c - $(CC) $(CFLAGS) -fo=$@ $< -src/text/ft2.obj: src/text/ft2.c - $(CC) $(CFLAGS) -fo=$@ $< -src/text/stbtt.obj: src/text/stbtt.c - $(CC) $(CFLAGS) -fo=$@ $< -src/text/text.obj: src/text/text.c +src/text.obj: src/text.c $(CC) $(CFLAGS) -fo=$@ $< src/unicode.obj: src/unicode.c $(CC) $(CFLAGS) -fo=$@ $< diff --git a/doc/TINYCONFIG.md b/doc/TINYCONFIG.md deleted file mode 100644 index 7ab60b527..000000000 --- a/doc/TINYCONFIG.md +++ /dev/null @@ -1,8 +0,0 @@ -# Tiny Config - -Milsko's configure script supports the `--tiny` option for building the tiniest possible Milsko library (~400kb as of writing). Currently, what it does is: - -- Add `-Oz` to the cflags -- (clang only) add `-flto=thin` to the cflags and linker flags -- Build stb-image with `STB_IMAGE_STATIC` (this is why you get warnings with stb_image when you use it) -- Disable the Wayland backend diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 5baed4a88..6f4cd2f5a 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,7 +1 @@ add_subdirectory(basic) -if(${MW_TRY_OPENGL}) -add_subdirectory(gldemos) -endif() -if(${MW_TRY_VULKAN}) -add_subdirectory(vkdemos) -endif() diff --git a/examples/basic/CMakeLists.txt b/examples/basic/CMakeLists.txt index e69c4ae55..b4eb0a1cd 100644 --- a/examples/basic/CMakeLists.txt +++ b/examples/basic/CMakeLists.txt @@ -1,26 +1,22 @@ file( - GLOB - EXAMPLES_BASIC_SOURCES - *.c + GLOB + EXAMPLES_BASIC_SOURCES + *.c ) foreach(PATH IN LISTS EXAMPLES_BASIC_SOURCES) - get_filename_component(TARGET ${PATH} NAME_WE) - if(CMAKE_SYSTEM_NAME MATCHES Retro) - add_application(${TARGET} ${PATH}) - else() - add_executable(${TARGET} MACOSX_BUNDLE ${PATH}) - endif() - target_link_libraries( - ${TARGET} - PRIVATE - Mw - ) - if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") - target_link_libraries( - ${TARGET} - PRIVATE - m - ) - endif() + get_filename_component(TARGET ${PATH} NAME_WE) + add_executable(${TARGET} ${PATH}) + target_link_libraries( + ${TARGET} + PRIVATE + Mw + ) + if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") + target_link_libraries( + ${TARGET} + PRIVATE + m + ) + endif() endforeach() diff --git a/examples/basic/calculator.c b/examples/basic/calculator.c deleted file mode 100644 index 998c3e35d..000000000 --- a/examples/basic/calculator.c +++ /dev/null @@ -1,185 +0,0 @@ -#include - -MwWidget widgets[18]; -MwWidget inp; - -/* probably enough for most tasks */ -double stack[512]; -int sp = 0; - -static void resize(MwWidget handle, void* client, void* user) { - int ww = MwGetInteger(handle, MwNwidth); - int wh = MwGetInteger(handle, MwNheight) - MwGetInteger(inp, MwNheight); - int i; - - MwVaApply(inp, - MwNwidth, ww, - NULL); - - for(i = 0; i < sizeof(widgets) / sizeof(widgets[0]); i++) { - int x = i % 4; - int y = i / 4; - if(widgets[i] != NULL) { - MwVaApply(widgets[i], - MwNwidth, ww / 4, - MwNheight, wh / 5, - MwNx, ww / 4 * x, - MwNy, wh / 5 * y + MwGetInteger(inp, MwNheight), - NULL); - } - } -} - -static void activate(MwWidget handle, void* client, void* user) { - const char* n = MwGetText(handle, MwNtext); - - if(('0' <= n[0] && n[0] <= '9') || n[0] == '.') { - const char* s = MwGetText(inp, MwNtext); - char* r; - - if(n[0] == '.' && s != NULL) { - int i; - for(i = 0; s[i] != 0; i++) { - if(s[i] == '.') return; - } - } - - if(s == NULL) s = ""; - - r = MwStringConcat(s, n); - MwVaApply(inp, - MwNtext, r, - NULL); - free(r); - } else if(n[0] == 'E') { - const char* s = MwGetText(inp, MwNtext); - - if(s != NULL) { - stack[sp++] = atof(s); - - MwVaApply(inp, - MwNtext, "", - NULL); - } - } else if(n[0] == 'C') { - MwVaApply(inp, - MwNtext, "", - NULL); - } else if(n[0] == '+' || n[0] == '-' || n[0] == '*' || n[0] == '/') { - if(sp >= 2) { - double sv = stack[--sp]; - double fv = stack[--sp]; - double v; - char buf[256]; - - if(n[0] == '+') { - v = fv + sv; - } else if(n[0] == '-') { - v = fv - sv; - } else if(n[0] == '*') { - v = fv * sv; - } else if(n[0] == '/') { - v = fv / sv; - } - - MwStringPrintIntoBuffer(buf, 256, "%g", v); - - MwVaApply(inp, - MwNtext, buf, - NULL); - } - } -} - -int main() { - MwWidget w; - int i; - - for(i = 0; i < sizeof(widgets) / sizeof(widgets[0]); i++) widgets[i] = NULL; - - MwLibraryInit(); - - w = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 150, 150, - MwNtitle, "Calculator", - NULL); - - inp = MwCreateWidget(MwEntryClass, "entry", w, 0, 0, 0, 24); - - widgets[0] = MwVaCreateWidget(MwButtonClass, "7", w, 0, 0, 0, 0, - MwNtext, "7", - NULL); - - widgets[1] = MwVaCreateWidget(MwButtonClass, "8", w, 0, 0, 0, 0, - MwNtext, "8", - NULL); - - widgets[2] = MwVaCreateWidget(MwButtonClass, "9", w, 0, 0, 0, 0, - MwNtext, "9", - NULL); - - widgets[3] = MwVaCreateWidget(MwButtonClass, "/", w, 0, 0, 0, 0, - MwNtext, "/", - NULL); - - widgets[4] = MwVaCreateWidget(MwButtonClass, "4", w, 0, 0, 0, 0, - MwNtext, "4", - NULL); - - widgets[5] = MwVaCreateWidget(MwButtonClass, "5", w, 0, 0, 0, 0, - MwNtext, "5", - NULL); - - widgets[6] = MwVaCreateWidget(MwButtonClass, "6", w, 0, 0, 0, 0, - MwNtext, "6", - NULL); - - widgets[7] = MwVaCreateWidget(MwButtonClass, "*", w, 0, 0, 0, 0, - MwNtext, "*", - NULL); - - widgets[8] = MwVaCreateWidget(MwButtonClass, "1", w, 0, 0, 0, 0, - MwNtext, "1", - NULL); - - widgets[9] = MwVaCreateWidget(MwButtonClass, "2", w, 0, 0, 0, 0, - MwNtext, "2", - NULL); - - widgets[10] = MwVaCreateWidget(MwButtonClass, "3", w, 0, 0, 0, 0, - MwNtext, "3", - NULL); - - widgets[11] = MwVaCreateWidget(MwButtonClass, "-", w, 0, 0, 0, 0, - MwNtext, "-", - NULL); - - widgets[12] = MwVaCreateWidget(MwButtonClass, "0", w, 0, 0, 0, 0, - MwNtext, "0", - NULL); - - widgets[13] = MwVaCreateWidget(MwButtonClass, ".", w, 0, 0, 0, 0, - MwNtext, ".", - NULL); - - widgets[16] = MwVaCreateWidget(MwButtonClass, "E", w, 0, 0, 0, 0, - MwNtext, "E", - NULL); - - widgets[15] = MwVaCreateWidget(MwButtonClass, "+", w, 0, 0, 0, 0, - MwNtext, "+", - NULL); - - widgets[17] = MwVaCreateWidget(MwButtonClass, "C", w, 0, 0, 0, 0, - MwNtext, "C", - NULL); - - for(i = 0; i < sizeof(widgets) / sizeof(widgets[0]); i++) { - if(widgets[i] != NULL) MwAddUserHandler(widgets[i], MwNactivateHandler, activate, NULL); - } - - MwAddUserHandler(w, MwNresizeHandler, resize, NULL); - - resize(w, NULL, NULL); - - MwLoop(w); -} diff --git a/examples/basic/clipboard.c b/examples/basic/clipboard.c deleted file mode 100644 index 94a192f22..000000000 --- a/examples/basic/clipboard.c +++ /dev/null @@ -1,78 +0,0 @@ -#include - -MwWidget window, instructions, text1, text2, cur_text; - -static void resize(MwWidget handle, void* user_data, void* call_data) { - unsigned int w, h; - - (void)user_data; - (void)call_data; - - w = MwGetInteger(handle, MwNwidth); - h = MwGetInteger(handle, MwNheight); - - MwVaApply(instructions, - MwNy, 50, - MwNwidth, w - 50 * 2, - MwNheight, h - 125 - 50 * 3, - NULL); - - MwVaApply(text1, - MwNy, 150, - MwNwidth, w - 25 * 2, - MwNheight, h - 125 - 50 * 3, - NULL); - MwVaApply(text2, - MwNy, 250, - MwNwidth, w - 25 * 2, - MwNheight, h - 125 - 50 * 3, - NULL); -} -static void clipboard(MwWidget handle, void* user_data, void* call_data) { - char* clipboard = call_data; - - (void)handle; - (void)user_data; - - if(clipboard != NULL) { - MwVaApply(cur_text, MwNtext, clipboard, NULL); - MwForceRender(cur_text); - } -} - -static void tick(MwWidget handle, void* user_data, void* call_data) { - cur_text = text1; - MwGetClipboard(handle, MwCLIPBOARD_MAIN); - cur_text = text2; - MwGetClipboard(handle, MwCLIPBOARD_PRIMARY); - MwForceRender(window); -} - -int main() { - MwLibraryInit(); - - window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 400, 400, - MwNtitle, "clipboard", - NULL); - instructions = MwVaCreateWidget(MwLabelClass, "button", window, 50, 50, 300, 125, - MwNtext, "clipboard contents will show up below.", - NULL); - text1 = MwVaCreateWidget(MwLabelClass, "label", window, 25, 150, 300, 75, - MwNtext, "", - NULL); - text2 = MwVaCreateWidget(MwLabelClass, "label2", window, 25, 250, 300, 75, - MwNtext, "", - NULL); - - cur_text = text1; - - MwAddUserHandler(window, MwNresizeHandler, resize, NULL); - MwAddUserHandler(window, MwNclipboardHandler, clipboard, NULL); - MwAddUserHandler(instructions, MwNclipboardHandler, clipboard, NULL); - MwAddUserHandler(cur_text, MwNclipboardHandler, clipboard, NULL); - MwAddUserHandler(window, MwNtickHandler, tick, NULL); - - resize(window, NULL, NULL); - - MwLoop(window); -} diff --git a/examples/basic/colorpicker.c b/examples/basic/colorpicker.c index 6471b7822..12b48266f 100644 --- a/examples/basic/colorpicker.c +++ b/examples/basic/colorpicker.c @@ -1,3 +1,4 @@ + #include MwWidget cpicker; @@ -14,7 +15,7 @@ void color_callback(MwWidget handle, void* user_data, void* call_data) { rgb->red &= 0xff; rgb->green &= 0xff; rgb->blue &= 0xff; - MwStringPrintIntoBuffer(hexColor, 8, "#%02X%02X%02X", rgb->red, rgb->green, rgb->blue); + sprintf(hexColor, "#%02X%02X%02X", rgb->red, rgb->green, rgb->blue); MwSetText(window, MwNbackground, hexColor); } @@ -27,7 +28,7 @@ void color_picker(MwWidget handle, void* user_data, void* call_data) { MwAddUserHandler(cpicker, MwNcolorChosenHandler, color_callback, NULL); - MwSetText(cpicker, MwNbackground, MwGetInteger(cpicker, MwNdarkTheme) ? MwDefaultDarkBackground : MwDefaultBackground); + MwSetText(cpicker, MwNbackground, MwDefaultBackground); } int main() { @@ -35,12 +36,12 @@ int main() { window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480, MwNtitle, "color picker", NULL); - MwSetText(window, MwNbackground, MwGetInteger(window, MwNdarkTheme) ? MwDefaultBackground : MwDefaultDarkBackground); + MwSetText(window, MwNbackground, "#000000"); button = MwVaCreateWidget(MwButtonClass, "button", window, 160, 180, 320, 120, MwNtext, "change window background", NULL); - MwSetText(button, MwNbackground, MwGetInteger(window, MwNdarkTheme) ? MwDefaultBackground : MwDefaultDarkBackground); + MwSetText(button, MwNbackground, MwDefaultBackground); MwAddUserHandler(button, MwNactivateHandler, color_picker, NULL); diff --git a/examples/basic/example.c b/examples/basic/example.c index 7e13acd1e..614b4e37a 100644 --- a/examples/basic/example.c +++ b/examples/basic/example.c @@ -1,6 +1,6 @@ #include -MwWidget window, menu, button, button2, button3, button4, button5, button6; +MwWidget window, menu, button, button2, button3, button4; void handler(MwWidget handle, void* user_data, void* call_data) { (void)handle; @@ -10,34 +10,14 @@ void handler(MwWidget handle, void* user_data, void* call_data) { printf("hello world!\n"); } -void handler_theme(MwWidget handle, void* user_data, void* call_data) { +int toggle = 0; +void handler_dark(MwWidget handle, void* user_data, void* call_data) { (void)handle; (void)user_data; (void)call_data; - MwVaApply(window, - MwNdarkTheme, MwGetInteger(window, MwNdarkTheme) == 0 ? 1 : 0, - NULL); -} - -void handler_look(MwWidget handle, void* user_data, void* call_data) { - (void)handle; - (void)user_data; - (void)call_data; - - MwVaApply(window, - MwNmodernLook, MwGetInteger(window, MwNmodernLook) == 0 ? 1 : 0, - NULL); -} - -void handler_font(MwWidget handle, void* user_data, void* call_data) { - (void)handle; - (void)user_data; - (void)call_data; - - MwVaApply(window, - MwNbitmapFont, MwGetInteger(window, MwNbitmapFont) == 0 ? 1 : 0, - NULL); + toggle = toggle ? 0 : 1; + MwToggleDarkTheme(window, toggle); } void resize(MwWidget handle, void* user_data, void* call_data) { @@ -51,37 +31,23 @@ void resize(MwWidget handle, void* user_data, void* call_data) { MwVaApply(button, MwNy, 50 + mh, - MwNwidth, (w - 50 * 2) / 3, + MwNwidth, w - 50 * 2, MwNheight, h - 125 - 50 * 3, NULL); MwVaApply(button2, - MwNx, 50 + (w - 50 * 2) / 3, - MwNy, 50 + mh, - MwNwidth, (w - 50 * 2) / 3, - MwNheight, h - 125 - 50 * 3, - NULL); - - MwVaApply(button3, - MwNx, 50 + (w - 50 * 2) / 3 * 2, - MwNy, 50 + mh, - MwNwidth, (w - 50 * 2) / 3, - MwNheight, h - 125 - 50 * 3, - NULL); - - MwVaApply(button4, MwNx, 50 + (w - 50 * 2) / 3 * 0, MwNy, h - 50 - 125 + mh, MwNwidth, (w - 50 * 2) / 3, NULL); - MwVaApply(button5, + MwVaApply(button3, MwNx, 50 + (w - 50 * 2) / 3 * 1, MwNy, h - 50 - 125 + mh, MwNwidth, (w - 50 * 2) / 3, NULL); - MwVaApply(button6, + MwVaApply(button4, MwNx, 50 + (w - 50 * 2) / 3 * 2, MwNy, h - 50 - 125 + mh, MwNwidth, (w - 50 * 2) / 3, @@ -97,38 +63,30 @@ int main() { MwNtitle, "hello world", NULL); menu = MwCreateWidget(MwMenuClass, "menu", window, 0, 0, 0, 0); - button = MwVaCreateWidget(MwButtonClass, "button", window, 50, 50, 100, 125, - MwNtext, "theme", + button = MwVaCreateWidget(MwButtonClass, "button", window, 50, 50, 300, 125, + MwNtext, "toggle dark theme", NULL); - button2 = MwVaCreateWidget(MwButtonClass, "button", window, 150, 50, 100, 125, - MwNtext, "look", - NULL); - button3 = MwVaCreateWidget(MwButtonClass, "button", window, 250, 50, 100, 125, - MwNtext, "font", - NULL); - button4 = MwVaCreateWidget(MwButtonClass, "button", window, 50, 225, 100, 125, + button2 = MwVaCreateWidget(MwButtonClass, "button", window, 50, 225, 100, 125, MwNtext, "lorem ipsum", MwNbackground, "#f66", MwNforeground, "#000", NULL); - button5 = MwVaCreateWidget(MwButtonClass, "button", window, 150, 225, 100, 125, + button3 = MwVaCreateWidget(MwButtonClass, "button", window, 150, 225, 100, 125, MwNtext, "lorem ipsum", MwNbackground, "#6f6", MwNforeground, "#000", NULL); - button6 = MwVaCreateWidget(MwButtonClass, "button", window, 250, 225, 100, 125, + button4 = MwVaCreateWidget(MwButtonClass, "button", window, 250, 225, 100, 125, MwNtext, "lorem ipsum", MwNbackground, "#66f", MwNforeground, "#000", NULL); MwAddUserHandler(window, MwNresizeHandler, resize, NULL); - MwAddUserHandler(button, MwNactivateHandler, handler_theme, NULL); - MwAddUserHandler(button2, MwNactivateHandler, handler_look, NULL); - MwAddUserHandler(button3, MwNactivateHandler, handler_font, NULL); + MwAddUserHandler(button, MwNactivateHandler, handler_dark, NULL); + MwAddUserHandler(button2, MwNactivateHandler, handler, NULL); + MwAddUserHandler(button3, MwNactivateHandler, handler, NULL); MwAddUserHandler(button4, MwNactivateHandler, handler, NULL); - MwAddUserHandler(button5, MwNactivateHandler, handler, NULL); - MwAddUserHandler(button6, MwNactivateHandler, handler, NULL); resize(window, NULL, NULL); diff --git a/examples/basic/listbox.c b/examples/basic/listbox.c index 3f63ad143..92c7d21b2 100644 --- a/examples/basic/listbox.c +++ b/examples/basic/listbox.c @@ -16,7 +16,7 @@ void activate(MwWidget handle, void* user, void* call) { (void)user; - MwStringPrintIntoBuffer(msg, 256, "You pressed: %s", MwListBoxGet(handle, *(int*)call)); + sprintf(msg, "You pressed: %s", MwListBoxGet(handle, *(int*)call)); msgbox = MwMessageBox(wmain, msg, "wow", MwMB_ICONINFO | MwMB_BUTTONOK); MwAddUserHandler(MwMessageBoxGetChild(msgbox, MwMB_BUTTONOK), MwNactivateHandler, destroy, msgbox); @@ -48,7 +48,7 @@ int main() { for(i = 0; i < len; i++) { char sz[16]; - MwStringPrintIntoBuffer(sz, 16, "%d", (int)strlen(harvard[i])); + sprintf(sz, "%d", (int)strlen(harvard[i])); index = MwListBoxPacketInsert(packet, -1); MwListBoxPacketSetIcon(packet, index, px); MwListBoxPacketSet(packet, index, 0, harvard[i]); diff --git a/examples/basic/periodic.c b/examples/basic/periodic.c deleted file mode 100644 index 593e76693..000000000 --- a/examples/basic/periodic.c +++ /dev/null @@ -1,285 +0,0 @@ -#include - -#include - -#define Columns 5 -#define Padding 20 -#define PaddingContent 2 - -MwWidget window, menu, box; -MwWidget boxes[32]; -int n = 0, row = -1; -MwMenu e; - -static void resize(MwWidget handle, void* user, void* call) { - int w = MwGetInteger(window, MwNwidth); - int h = MwGetInteger(window, MwNheight); - - MwVaApply(box, - MwNx, Padding, - MwNy, MwGetInteger(menu, MwNheight) + Padding, - MwNwidth, w - Padding * 2, - MwNheight, h - MwGetInteger(menu, MwNheight) - Padding * 2, - NULL); -} - -static void newrow(void) { - if(row >= 0) { - int i; - - for(i = n; i < Columns; i++) MwCreateWidget(MwFrameClass, "frame", boxes[row], 0, 0, 0, 0); - } - - boxes[++row] = MwCreateWidget(MwBoxClass, "box", box, 0, 0, 0, 0); - - n = 0; -} - -static void add(MwWidget w) { - int r = MwGetInteger(w, MwNratio); - - if(r == MwDEFAULT) r = 1; - - n += r; - - if(n == Columns) { - newrow(); - } -} - -static void resize_content(MwWidget handle, void* user, void* call) { - MwWidget* ws = MwGetChildren(handle); - if(ws != NULL) { - int pw = MwGetInteger(ws[0], "IpWidth"); - int ph = MwGetInteger(ws[0], "IpHeight"); - - if(pw < 0) { - pw += MwGetInteger(handle, MwNwidth); - } else if(pw == 0) { - pw = MwGetInteger(handle, MwNwidth); - } - - if(ph < 0) { - ph += MwGetInteger(handle, MwNheight); - } else if(ph == 0) { - ph = MwGetInteger(handle, MwNheight); - } - - MwVaApply(ws[0], - MwNx, (MwGetInteger(handle, MwNwidth) - pw) / 2, - MwNy, (MwGetInteger(handle, MwNheight) - ph) / 2, - MwNwidth, pw, - MwNheight, ph, - NULL); - - free(ws); - } -} - -static void resize_frame(MwWidget handle, void* user, void* call) { - MwWidget* ws = MwGetChildren(handle); - if(ws != NULL) { - int w = MwGetInteger(handle, MwNwidth); - int h = MwGetInteger(handle, MwNheight); - - if(ws[0] != NULL) { - MwVaApply(ws[0], - MwNx, MwDefaultBorderWidth(handle) + PaddingContent, - MwNy, MwDefaultBorderWidth(handle) + PaddingContent, - MwNwidth, w - (MwDefaultBorderWidth(handle) + PaddingContent) * 2, - MwNheight, h - (MwDefaultBorderWidth(handle) + PaddingContent) * 2, - NULL); - } - free(ws); - } -} - -static MwWidget frame(const char* name, int width, int height, MwClass cl, ...) { - MwWidget f = MwVaCreateWidget(MwFrameClass, "frame", boxes[row], 0, 0, 0, 0, - MwNhasBorder, 1, - MwNinverted, 1, - NULL); - MwWidget box = MwVaCreateWidget(MwBoxClass, "box", f, 0, 0, 0, 0, - MwNorientation, MwVERTICAL, - NULL); - MwWidget label = MwVaCreateWidget(MwLabelClass, "label", box, 0, 0, 0, 0, - MwNtext, name, - MwNalignment, MwALIGNMENT_BEGINNING, - MwNfixedSize, 20, - NULL); - va_list va; - - if(cl != NULL) { - MwWidget frame = MwCreateWidget(MwFrameClass, "frame", box, 0, 0, 0, 0); - MwWidget w; - - va_start(va, cl); - w = MwVaListCreateWidget(cl, "widget", frame, 0, 0, 0, 0, va); - va_end(va); - - MwVaApply(w, - "IpWidth", width, - "IpHeight", height, - NULL); - - MwAddUserHandler(frame, MwNresizeHandler, resize_content, NULL); - - MwVaApply(f, - "VhandledWidget", w, - NULL); - } - - MwAddUserHandler(f, MwNresizeHandler, resize_frame, NULL); - - resize_frame(f, NULL, NULL); - - return f; -} - -static MwWidget child(MwWidget w) { - return MwGetVoid(w, "VhandledWidget"); -} - -static void menu_handler(MwWidget handle, void* user, void* call) { - if(call == e) MwDestroyWidget(window); -} - -int main() { - int i; - MwWidget f, w; - MwListBoxPacket* pkt; - int index; - MwMenu m, m2; - void* v; - - MwLibraryInit(); - - window = MwVaCreateWidget(MwWindowClass, "window", NULL, MwDEFAULT, MwDEFAULT, 800, 800, - MwNtitle, "Milsko Periodic Table", - NULL); - - menu = MwCreateWidget(MwMenuClass, "menu", window, 0, 0, 0, 0); - - m = MwMenuAdd(menu, NULL, "File"); - MwMenuAdd(menu, m, "New"); - MwMenuAdd(menu, m, "Open"); - MwMenuAdd(menu, m, "Save"); - MwMenuAdd(menu, m, "Save As"); - MwMenuAdd(menu, m, "Print"); - e = MwMenuAdd(menu, m, "Exit"); - - m = MwMenuAdd(menu, NULL, "Edit"); - MwMenuAdd(menu, m, "Undo"); - MwMenuAdd(menu, m, "----"); - MwMenuAdd(menu, m, "Cut"); - MwMenuAdd(menu, m, "Copy"); - MwMenuAdd(menu, m, "Paste"); - MwMenuAdd(menu, m, "----"); - MwMenuAdd(menu, m, "Clear"); - MwMenuAdd(menu, m, "Delete"); - - m = MwMenuAdd(menu, NULL, "View"); - MwMenuAdd(menu, m, "Stack"); - MwMenuAdd(menu, m, "Tile"); - MwMenuAdd(menu, m, "----"); - MwMenuAdd(menu, m, "Day"); - MwMenuAdd(menu, m, "Week"); - MwMenuAdd(menu, m, "Month"); - MwMenuAdd(menu, m, "Year"); - - m = MwMenuAdd(menu, NULL, "Options"); - m2 = MwMenuAdd(menu, m, "Font"); - MwMenuAdd(menu, m2, "Small"); - MwMenuAdd(menu, m2, "Medium"); - MwMenuAdd(menu, m2, "Large"); - m2 = MwMenuAdd(menu, m, "Direction"); - MwMenuAdd(menu, m2, "Up"); - MwMenuAdd(menu, m2, "Down"); - MwMenuAdd(menu, m2, "Left"); - MwMenuAdd(menu, m2, "Right"); - MwMenuAdd(menu, m, "Case Sensitive"); - MwMenuAdd(menu, m, "Word Wrap"); - - m = MwMenuAdd(menu, NULL, "?Help"); - MwMenuAdd(menu, m, "On Context"); - MwMenuAdd(menu, m, "On Window"); - MwMenuAdd(menu, m, "Tutorial"); - MwMenuAdd(menu, m, "On Version"); - - MwAddUserHandler(menu, MwNmenuHandler, menu_handler, NULL); - - box = MwVaCreateWidget(MwBoxClass, "box", window, 0, 0, 0, 0, - MwNorientation, MwVERTICAL, - NULL); - - newrow(); - - f = frame("Button", -PaddingContent, -PaddingContent, MwButtonClass, - MwNtext, "Press me", - NULL); - add(f); - - add(MwVaCreateWidget(MwLabelClass, "label", boxes[row], 0, 0, 0, 0, - MwNbold, 1, - MwNtext, "The Periodic Table of Milsko Widgets", - MwNratio, Columns - 2, - NULL)); - - f = frame("ComboBox", -PaddingContent, 24, MwComboBoxClass, NULL); - w = child(f); - MwComboBoxAdd(w, -1, "Hello!"); - add(f); - - f = frame("Entry", -PaddingContent, 24, MwEntryClass, NULL); - add(f); - - f = frame("Label", -PaddingContent, -PaddingContent, MwLabelClass, - MwNtext, "Epic text", - NULL); - add(f); - - f = frame("ListBox", -PaddingContent, -PaddingContent, MwListBoxClass, - MwNhasHeading, 1, - NULL); - w = child(f); - pkt = MwListBoxCreatePacket(); - index = MwListBoxPacketInsert(pkt, -1); - MwListBoxPacketSet(pkt, index, 0, "Epic title..."); - index = MwListBoxPacketInsert(pkt, -1); - MwListBoxPacketSet(pkt, index, 0, "Hello"); - MwListBoxInsert(w, -1, pkt); - MwListBoxDestroyPacket(pkt); - add(f); - - f = frame("NumberEntry", -PaddingContent, 24, MwNumberEntryClass, NULL); - add(f); - - f = frame("ProgressBar", -PaddingContent, 24, MwProgressBarClass, - MwNvalue, 25, - NULL); - add(f); - - f = frame("ScrollBar", -PaddingContent, 16, MwScrollBarClass, - MwNorientation, MwHORIZONTAL, - NULL); - add(f); - - f = frame("Separator", -PaddingContent, -PaddingContent, MwSeparatorClass, NULL); - add(f); - - f = frame("TreeView", -PaddingContent, -PaddingContent, MwTreeViewClass, NULL); - w = child(f); - v = MwTreeViewAdd(w, NULL, NULL, "abc"); - v = MwTreeViewAdd(w, v, NULL, "def"); - v = MwTreeViewAdd(w, v, NULL, "ghi"); - add(f); - - if(n != 0) newrow(); - if(n == 0) MwDestroyWidget(boxes[row]); - - MwAddUserHandler(window, MwNresizeHandler, resize, NULL); - - resize(window, NULL, NULL); - - MwLoop(window); -} diff --git a/examples/basic/sevensegment.c b/examples/basic/sevensegment.c deleted file mode 100644 index 08149a9fd..000000000 --- a/examples/basic/sevensegment.c +++ /dev/null @@ -1,23 +0,0 @@ -#include - -int main() { - MwWidget wnd, label; - int W = 480, H = 40; - - MwLibraryInit(); - - wnd = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, W, H, - MwNtitle, "seven segment", - NULL); - - label = MwVaCreateWidget(MwLabelClass, "label", wnd, 0, 0, W, H, - MwNtext, " 123456:78.90 abcdef", - MwNsevenSegment, 1, - MwNalignment, MwALIGNMENT_BEGINNING, - MwNlength, 8, - NULL); - - MwLabelSetSevenSegment(label, 0, (1 << 0) | (1 << 3) | (1 << 6)); - - MwLoop(wnd); -} diff --git a/examples/basic/treeview.c b/examples/basic/treeview.c index e08db39c3..3837cb42b 100644 --- a/examples/basic/treeview.c +++ b/examples/basic/treeview.c @@ -14,7 +14,7 @@ void activate(MwWidget handle, void* user, void* call) { (void)user; - MwStringPrintIntoBuffer(msg, 256, "You pressed: %s", MwTreeViewGet(handle, call)); + sprintf(msg, "You pressed: %s", MwTreeViewGet(handle, call)); msgbox = MwMessageBox(wmain, msg, "wow", MwMB_ICONINFO | MwMB_BUTTONOK); MwAddUserHandler(MwMessageBoxGetChild(msgbox, MwMB_BUTTONOK), MwNactivateHandler, destroy, msgbox); diff --git a/examples/gldemos/CMakeLists.txt b/examples/gldemos/CMakeLists.txt deleted file mode 100644 index 0a8fa78e6..000000000 --- a/examples/gldemos/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -file( - GLOB - EXAMPLES_GL_SOURCES - *.c -) -find_package(OpenGL) - -foreach(PATH IN LISTS EXAMPLES_GL_SOURCES) - get_filename_component(TARGET ${PATH} NAME_WE) - if(${TARGET} STREQUAL "glutlayer") - continue() - endif() - add_executable(${TARGET} MACOSX_BUNDLE ${PATH}) - target_link_libraries( - ${TARGET} - PRIVATE - Mw - OpenGL::GL OpenGL::GLU - ) - if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") - target_link_libraries( - ${TARGET} - PRIVATE - m - ) - endif() -endforeach() diff --git a/examples/gldemos/clock.c b/examples/gldemos/clock.c index 271b08811..7bf74b621 100644 --- a/examples/gldemos/clock.c +++ b/examples/gldemos/clock.c @@ -32,10 +32,10 @@ void tick(MwWidget handle, void* user, void* call) { char buf[512]; tm = localtime(&t); - MwStringPrintIntoBuffer(buf, 512, "%s %02d %s", mon[tm->tm_mon], tm->tm_mday, wday[tm->tm_wday]); + sprintf(buf, "%s %02d %s", mon[tm->tm_mon], tm->tm_mday, wday[tm->tm_wday]); MwSetText(ldate, MwNtext, buf); - MwStringPrintIntoBuffer(buf, 512, "%02d:%02d %s", tm->tm_hour % 12, tm->tm_min, tm->tm_hour >= 12 ? "PM" : "AM"); + sprintf(buf, "%02d:%02d %s", tm->tm_hour % 12, tm->tm_min, tm->tm_hour >= 12 ? "PM" : "AM"); MwSetText(ltime, MwNtext, buf); render = 1; diff --git a/examples/gldemos/cube.c b/examples/gldemos/cube.c index de0b84078..c1ba9917d 100644 --- a/examples/gldemos/cube.c +++ b/examples/gldemos/cube.c @@ -1,13 +1,7 @@ #define TITLE "cube" #include "glutlayer.c" -#if defined(__APPLE__) -#include -#include -#else -#include #include -#endif static double deg = 0; @@ -21,18 +15,12 @@ static void draw(void) { glRotatef(deg, 0, 0, 1); for(i = 0; i < 6; i++) { - if(i == 0) - glColor3f(1, 0, 0); - if(i == 1) - glColor3f(0, 1, 0); - if(i == 2) - glColor3f(1, 1, 0); - if(i == 3) - glColor3f(0, 0, 1); - if(i == 4) - glColor3f(1, 0, 1); - if(i == 5) - glColor3f(0, 1, 1); + if(i == 0) glColor3f(1, 0, 0); + if(i == 1) glColor3f(0, 1, 0); + if(i == 2) glColor3f(1, 1, 0); + if(i == 3) glColor3f(0, 0, 1); + if(i == 4) glColor3f(1, 0, 1); + if(i == 5) glColor3f(0, 1, 1); glBegin(GL_QUADS); glNormal3f(0, 1, 0); @@ -42,12 +30,9 @@ static void draw(void) { glVertex3f(1, 1, -1); glEnd(); - if(i < 3) - glRotatef(90, 0, 0, 1); - if(i == 3) - glRotatef(90, 1, 0, 0); - if(i == 4) - glRotatef(180, 0, 0, 1); + if(i < 3) glRotatef(90, 0, 0, 1); + if(i == 3) glRotatef(90, 1, 0, 0); + if(i == 4) glRotatef(180, 0, 0, 1); } glPopMatrix(); } diff --git a/examples/gldemos/tripaint.c b/examples/gldemos/tripaint.c index 1208b26ae..2cc7aa844 100644 --- a/examples/gldemos/tripaint.c +++ b/examples/gldemos/tripaint.c @@ -51,12 +51,12 @@ static void tick(MwWidget handle, void* user, void* call) { } static void mouse(MwWidget handle, void* user, void* call) { - MwMouse* mouse = call; + MwLLMouse* mouse = call; (void)handle; (void)user; - if(mouse->button == MwMOUSE_LEFT) { + if(mouse->button == MwLLMouseLeft) { t[ct].points[click * 2 + 0] = mouse->point.x; t[ct].points[click * 2 + 1] = mouse->point.y; click++; @@ -82,7 +82,7 @@ static void mouse(MwWidget handle, void* user, void* call) { for(i = 0; i < ct; i++) t[i] = old[i]; free(old); } - } else if(mouse->button == MwMOUSE_RIGHT) { + } else if(mouse->button == MwLLMouseRight) { if(click > 0) { click = 0; } else if(ct > 0) { diff --git a/examples/vkdemos/CMakeLists.txt b/examples/vkdemos/CMakeLists.txt deleted file mode 100644 index 41f832c2d..000000000 --- a/examples/vkdemos/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -file( - GLOB - EXAMPLES_VULKAN_SOURCES - *.c -) -find_package(Vulkan) - -foreach(PATH IN LISTS EXAMPLES_VULKAN_SOURCES) - get_filename_component(TARGET ${PATH} NAME_WE) - add_executable(${TARGET} MACOSX_BUNDLE ${PATH}) - target_include_directories( - ${TARGET} - PRIVATE - ${Vulkan_INCLUDE_DIR} - ) - target_link_libraries( - ${TARGET} - PRIVATE - Mw - ) - if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") - target_link_libraries( - ${TARGET} - PRIVATE - m - ) - endif() -endforeach() diff --git a/examples/vkdemos/vulkan.c b/examples/vkdemos/vulkan.c index 7e20a5be7..0e1842d04 100644 --- a/examples/vkdemos/vulkan.c +++ b/examples/vkdemos/vulkan.c @@ -5,6 +5,7 @@ * ioixd maintains this file. nishi doesn't know vulkan at all */ +#include "Mw/Error.h" #include #include @@ -16,7 +17,7 @@ char buffer[512]; char* string_VkResult(VkResult res) { - MwStringPrintIntoBuffer(buffer, 512, "%d", res); + sprintf(buffer, "%d", res); return &buffer[0]; } @@ -26,8 +27,6 @@ MwWidget window, vulkan; int ow = 300; int oh = 250; -double timer = 0; - PFN_vkGetInstanceProcAddr _vkGetInstanceProcAddr; VkInstance instance; VkDevice device; @@ -76,10 +75,9 @@ void tick(MwWidget handle, void* user_data, void* call_data) { VkSubmitInfo submitInfo = {}; VkPresentInfoKHR presentInfo = {}; - VkClearValue clearColor = {{{sin(timer) / 10., cos(timer) / 10., atan(timer) / 10., 1.0f}}}; + VkClearValue clearColor = {{{0.0f, 0.0f, 0.0f, 1.0f}}}; uint32_t vertexCount = 3; uint32_t instanceCount = 1; - timer += (float)(rand() % 1000) / 1000.; VkPipelineStageFlags waitStages[] = {VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT}; @@ -231,16 +229,43 @@ void vulkan_setup(MwWidget handle) { VkSemaphoreCreateInfo semaphoreInfo = {}; VkFenceCreateInfo fenceInfo = {}; - int err = 0; - _vkGetInstanceProcAddr = MwVulkanGetField(handle, MwVULKANFIELD_GETINSTANCEPROCADDR, &err); - instance = MwVulkanGetField(handle, MwVULKANFIELD_INSTANCE, &err); - device = MwVulkanGetField(handle, MwVULKANFIELD_LOGICALDEVICE, &err); - physicalDevice = MwVulkanGetField(handle, MwVULKANFIELD_PHYSICALDEVICE, &err); - graphicsQueue = MwVulkanGetField(handle, MwVULKANFIELD_GRAPHICSQUEUE, &err); - presentQueue = MwVulkanGetField(handle, MwVULKANFIELD_PRESENTQUEUE, &err); - surface = MwVulkanGetField(handle, MwVULKANFIELD_SURFACE, &err); - presentQueueIndex = MwVulkanGetField(handle, MwVULKANFIELD_PRESENTQUEUEINDEX, &err); - graphicsQueueIndex = MwVulkanGetField(handle, MwVULKANFIELD_GRAPHICSQUEUEINDEX, &err); + MwErrorEnum err = MwEsuccess; + _vkGetInstanceProcAddr = MwVulkanGetField(handle, MwVulkanField_GetInstanceProcAddr, &err); + if(err != MwEsuccess) { + printf("Error getting vkGetInstanceProcAddr!\n%s\n", MwGetLastError()); + } + instance = MwVulkanGetField(handle, MwVulkanField_Instance, &err); + if(err != MwEsuccess) { + printf("Error getting vulkan instance!\n%s\n", MwGetLastError()); + } + device = MwVulkanGetField(handle, MwVulkanField_LogicalDevice, &err); + if(err != MwEsuccess) { + printf("Error getting VkDevice!\n%s\n", MwGetLastError()); + } + physicalDevice = MwVulkanGetField(handle, MwVulkanField_PhysicalDevice, &err); + if(err != MwEsuccess) { + printf("Error getting physical device!\n%s\n", MwGetLastError()); + } + graphicsQueue = MwVulkanGetField(handle, MwVulkanField_GraphicsQueue, &err); + if(err != MwEsuccess) { + printf("Error getting graphics queue!\n%s\n", MwGetLastError()); + } + presentQueue = MwVulkanGetField(handle, MwVulkanField_PresentQueue, &err); + if(err != MwEsuccess) { + printf("Error getting present queue!\n%s\n", MwGetLastError()); + } + surface = MwVulkanGetField(handle, MwVulkanField_Surface, &err); + if(err != MwEsuccess) { + printf("Error getting surface!\n%s\n", MwGetLastError()); + } + presentQueueIndex = MwVulkanGetField(handle, MwVulkanField_PresentQueueIndex, &err); + if(err != MwEsuccess) { + printf("Error getting present queue index!\n%s\n", MwGetLastError()); + } + graphicsQueueIndex = MwVulkanGetField(handle, MwVulkanField_GraphicsQueueIndex, &err); + if(err != MwEsuccess) { + printf("Error getting graphics queue index!\n%s\n", MwGetLastError()); + } LOAD_VK_FUNCTION(vkCreateShaderModule); LOAD_VK_FUNCTION(vkCreatePipelineLayout); diff --git a/include/Mw/BaseTypes.h b/include/Mw/BaseTypes.h index 313215eca..ca718ea4a 100644 --- a/include/Mw/BaseTypes.h +++ b/include/Mw/BaseTypes.h @@ -32,7 +32,7 @@ typedef int8_t MwI8; typedef uint8_t MwU8; #define MW_OTHER_TYPES_DEFINED -#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) || defined(__clang__)) +#elif __GNUC__ > 2 typedef long long MwI64; typedef unsigned long long MwU64; #elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) @@ -76,10 +76,10 @@ struct _MwPoint { }; struct _MwRect { - int x; - int y; - int width; - int height; + int x; + int y; + unsigned int width; + unsigned int height; }; struct _MwSizeHints { diff --git a/include/Mw/Constants.h b/include/Mw/Constants.h index d710ca006..bc4757f49 100644 --- a/include/Mw/Constants.h +++ b/include/Mw/Constants.h @@ -99,26 +99,4 @@ enum MwMB_ICON { */ #define MwMB_BUTTONYESNOCANCEL (MwMB_BUTTONYES | MwMB_BUTTONNO | MwMB_BUTTONCANCEL) -/* Whether or not GetXY/SetXY works with global or local coordinates */ -enum MwCOORDINATE { - MwCOORDINATE_GLOBAL = 0, - MwCOORDINATE_LOCAL, -}; - -/* The clipboard type that MwGetClipboard should return */ -enum MwCLIPBOARD { - /* the clipboard that is present on every platform that supports it */ - MwCLIPBOARD_MAIN = 0, - /* the "primary" clipboard that Wayland stores to emulate X11's behavior. */ - MwCLIPBOARD_PRIMARY, -}; - -enum MwMOUSE { - MwMOUSE_LEFT = 1, - MwMOUSE_MIDDLE, - MwMOUSE_RIGHT, - MwMOUSE_WHEELUP, - MwMOUSE_WHEELDOWN -}; - #endif diff --git a/include/Mw/Core.h b/include/Mw/Core.h index ad4cd19de..e714a32ed 100644 --- a/include/Mw/Core.h +++ b/include/Mw/Core.h @@ -295,9 +295,8 @@ MWDECL void MwHideCursor(MwWidget handle); * @brief Toggles the dark theme * @param handle Widget * @param toggle Toggle - * @deprecated Use MwNdarkTheme instead */ -MWDECL void MwSetDarkTheme(MwWidget handle, int toggle); +MWDECL void MwToggleDarkTheme(MwWidget handle, int toggle); /*! * @brief Gets the parent widget @@ -355,19 +354,6 @@ MWDECL void MwGetCursorCoord(MwWidget handle, MwPoint* point); */ MWDECL void MwGetScreenSize(MwWidget handle, MwRect* rect); -/*! - * @brief Reports whether a widget reports global or local coordinates upon GetXY/SetXY. Anything with a parent reports local, and most backends report global coordinates being supported for top level windows, but some (Wayland) do not. - * @param handle Widget - */ -MWDECL int MwGetCoordinateType(MwWidget handle); - -/*! - * @brief Queue to get clipboard content. - * @param handle Widget - * @param clipboard_type The Clipboard Type to get. See MwClipboardType. This is ignored on backends that aren't X11/Wayland, so if you're unsure, just use MwClipboardMain - */ -MWDECL void MwGetClipboard(MwWidget handle, int clipboard_type); - #ifdef __cplusplus } #endif diff --git a/include/Mw/Default.h b/include/Mw/Default.h index 3d197d011..93f919a5d 100644 --- a/include/Mw/Default.h +++ b/include/Mw/Default.h @@ -52,11 +52,6 @@ MWDECL const char* MwDefaultDarkSubBackground; */ MWDECL const char* MwDefaultDarkSubForeground; -/*! - * @brief Default shadow difference - */ -MWDECL const int MwDefaultShadow; - /*! * @brief Gets default border width * @param handle Widget diff --git a/include/Mw/Draw.h b/include/Mw/Draw.h index 9208d725d..b90d4e423 100644 --- a/include/Mw/Draw.h +++ b/include/Mw/Draw.h @@ -93,7 +93,6 @@ MWDECL void MwDrawTriangle(MwWidget handle, MwRect* rect, MwLLColor color, int i * @param border Border width * @param diff Difference (set this to 0 if you don't know what this does) * @param same Same as dark color - * @param rounded Rounded or not * @warning `rect` gets changed to the area of rectangle inside */ MWDECL void MwDrawFrameEx(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border, int diff, int same); @@ -176,31 +175,29 @@ MWDECL void MwDrawDiamond(MwWidget handle, MwRect* rect, MwLLColor color, int in /*! * @brief Draws a text * @param handle Widget - * @param ttf TTF, NULLable * @param point Center point of the text * @param text Text + * @param bold Bold * @param align Align * @param color Color */ -MWDECL void MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text, int align, MwLLColor color); +MWDECL void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int align, MwLLColor color); /*! * @brief Calculates a text width * @param handle Widget * @param text Text - * @param font Font, NULLable * @return Text width */ -MWDECL int MwTextWidth(MwWidget handle, MwFLFont font, const char* text); +MWDECL int MwTextWidth(MwWidget handle, const char* text); /*! * @brief Calculates a text height * @param handle Widget * @param text Text - * @param font Font, NULLable * @return Text height */ -MWDECL int MwTextHeight(MwWidget handle, MwFLFont font, const char* text); +MWDECL int MwTextHeight(MwWidget handle, const char* text); /* color.c */ diff --git a/include/Mw/Error.h b/include/Mw/Error.h new file mode 100644 index 000000000..a54da107c --- /dev/null +++ b/include/Mw/Error.h @@ -0,0 +1,29 @@ +/*! + * @file Mw/Error.h + * @brief Error codes + */ +#ifndef __MW_ERROR_H__ +#define __MW_ERROR_H__ + +#include + +/*! + * @brief Error code enumeration + */ +typedef enum MwErrorEnum_T { + /*! + * @brief No error + */ + MwEsuccess = 0, + /*! + * @brief There was an error + */ + MwEerror, +} MwErrorEnum; + +/*! + * @brief Get the last error + */ +MWDECL const char* MwGetLastError(void); + +#endif diff --git a/include/Mw/LowLevel.h b/include/Mw/LowLevel.h index 1b5ec5299..0b0357d89 100644 --- a/include/Mw/LowLevel.h +++ b/include/Mw/LowLevel.h @@ -6,10 +6,10 @@ #ifndef __MW_LOWLEVEL_H__ #define __MW_LOWLEVEL_H__ -#include #include typedef struct _MwLLHandler* MwLLHandler; +typedef struct _MwLLMouse MwLLMouse; typedef struct _MwLLCommon* MwLLCommon; typedef struct _MwLLCommonColor* MwLLCommonColor; typedef struct _MwLLCommonPixmap* MwLLCommonPixmap; @@ -17,35 +17,30 @@ typedef struct _MwLLCommonPixmap* MwLLCommonPixmap; typedef union _MwLL* MwLL; typedef union _MwLLColor* MwLLColor; typedef union _MwLLPixmap* MwLLPixmap; -typedef struct _MwFLFont* MwFLFont; #else typedef void* MwLL; typedef void* MwLLColor; typedef void* MwLLPixmap; -typedef void* MwFLFont; #endif enum MwLLBackends { MwLLBackendX11 = 0, MwLLBackendGDI, MwLLBackendWayland, - MwLLBackendCocoa, }; struct _MwLLCommon { - void* user; - int copy_buffer; - int type; - int coordinate_type; - MwBool supports_transparency; + void* user; + int copy_buffer; + int type; MwLLHandler handler; }; struct _MwLLCommonColor { - MwU8 red; - MwU8 green; - MwU8 blue; + int red; + int green; + int blue; }; struct _MwLLCommonPixmap { @@ -55,52 +50,6 @@ struct _MwLLCommonPixmap { void* user; }; -#ifdef USE_DBUS -typedef struct _MwLLDBusFuncTable { - void* lib; - - void (*dbus_error_init)(DBusError* error); - DBusConnection* (*dbus_bus_get)(DBusBusType type, DBusError* error); - dbus_bool_t (*dbus_error_is_set)(const DBusError* error); - void (*dbus_error_free)(DBusError* error); - DBusMessage* (*dbus_message_new_method_call)(const char* bus_name, const char* path, const char* iface, const char* method); - void (*dbus_message_iter_init_append)(DBusMessage* message, DBusMessageIter* iter); - dbus_bool_t (*dbus_message_iter_append_basic)(DBusMessageIter* iter, int type, const void* value); - void (*dbus_connection_flush)(DBusConnection* connection); - dbus_bool_t (*dbus_connection_read_write)(DBusConnection* connection, int timeout_milliseconds); - DBusMessage* (*dbus_connection_send_with_reply_and_block)(DBusConnection* connection, DBusMessage* message, int timeout_milliseconds, DBusError* error); - DBusMessage* (*dbus_connection_pop_message)(DBusConnection* connection); - void (*dbus_bus_add_match)(DBusConnection* connection, const char* rule, DBusError* error); - void (*dbus_message_unref)(DBusMessage* message); - dbus_bool_t (*dbus_message_iter_init)(DBusMessage* message, DBusMessageIter* iter); - dbus_bool_t (*dbus_message_is_signal)(DBusMessage* message, const char* iface, const char* signal_name); - int (*dbus_message_iter_get_arg_type)(DBusMessageIter* iter); - void (*dbus_message_iter_recurse)(DBusMessageIter* iter, DBusMessageIter* sub); - void (*dbus_message_iter_next)(DBusMessageIter* iter); - void (*dbus_connection_unref)(DBusConnection* connection); - void (*dbus_message_iter_get_basic)(DBusMessageIter* iter, void* value); -} MwLLDBusFuncTable; - -typedef struct _MwLLDBusContext { - DBusConnection* dbus_conn; - DBusError dbus_err; - DBusMessage* dbus_msg; - DBusMessage* dbus_reply; -} MwLLDBusContext; - -typedef void (*MwLLDBusPortalPollListener)(MwLL handle, MwU32 new_value); - -/* setup the dbus func table. Returns false and prints a warning if dbus couldn't be found. */ -MWDECL MwBool MwLLDBusFuncSetup(MwLLDBusFuncTable* tbl); - -MWDECL MwBool MwLLDBusNewContext(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx); -MWDECL MwBool MwLLDBusPortalGet(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx, const char* portal, const char* namespace, const char* key, void* out); -MWDECL MwBool MwLLDBusPortalWatch(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx, const char* portal); -MWDECL MwBool MwLLDBusPortalPoll(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx, MwLL handle, const char* portal, const char* namespace, const char* key, MwLLDBusPortalPollListener); -MWDECL void MwLLDBusFreeContext(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx); - -#endif - #ifdef _MILSKO #ifdef USE_X11 #include @@ -111,12 +60,6 @@ MWDECL void MwLLDBusFreeContext(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx); #ifdef USE_WAYLAND #include #endif -#ifdef USE_COCOA -#include -#endif -#ifdef CLASSIC_MAC_OS -#include -#endif union _MwLL { struct _MwLLCommon common; @@ -129,12 +72,6 @@ union _MwLL { #ifdef USE_WAYLAND struct _MwLLWayland wayland; #endif -#ifdef USE_COCOA - struct _MwLLCocoa cocoa; -#endif -#ifdef CLASSIC_MAC_OS - struct _MwLLClassicMacOS cmacos; -#endif }; union _MwLLColor { @@ -148,9 +85,6 @@ union _MwLLColor { #ifdef USE_WAYLAND struct _MwLLWaylandColor wayland; #endif -#ifdef USE_COCOA - struct _MwLLCocoaColor cocoa; -#endif }; union _MwLLPixmap { @@ -164,12 +98,6 @@ union _MwLLPixmap { #ifdef USE_WAYLAND struct _MwLLWaylandPixmap wayland; #endif -#ifdef USE_COCOA - struct _MwLLCocoaPixmap cocoa; -#endif -#ifdef CLASSIC_MAC_OS - struct _MwLLClassicMacOSPixmap cmacos; -#endif }; #endif #include @@ -195,6 +123,19 @@ enum MwLLKeyEnum { #define MwLLControlMask MwLLKeyMask | (1 << 30) #define MwLLAltMask MwLLKeyMask | (1 << 29) +enum MwLLMouseEnum { + MwLLMouseLeft = 1, + MwLLMouseMiddle, + MwLLMouseRight, + MwLLMouseWheelUp, + MwLLMouseWheelDown +}; + +struct _MwLLMouse { + MwPoint point; + int button; +}; + struct _MwLLHandler { void (*draw)(MwLL handle, void* data); void (*up)(MwLL handle, void* data); @@ -206,22 +147,8 @@ struct _MwLLHandler { void (*key_released)(MwLL handle, void* data); void (*focus_in)(MwLL handle, void* data); void (*focus_out)(MwLL handle, void* data); - void (*clipboard)(MwLL handle, void* data); - void (*dark_theme)(MwLL handle, void* data); }; -struct _MwLLTextDispatchTable { - int (*drawText)(MwWidget handle, MwPoint* point, const char* text, int bold, int align, MwLLColor color); - int (*textWidth)(MwWidget handle, const char* text); - int (*textHeight)(MwWidget handle, int count); - void* (*fontLoad)(unsigned char* data, unsigned int size); - void (*fontFree)(void* handle); -}; - -#define MwFLFlagMonospace (1 << 0) -#define MwFLFlagBold (1 << 1) -#define MwFLBuildFont(x) ((MwFLFont)(void*)(size_t)(x)) - #ifdef __cplusplus extern "C" { #endif @@ -275,30 +202,12 @@ MWDECL void (*MwLLEndStateChange)(MwLL handle); MWDECL void (*MwLLFocus)(MwLL handle); MWDECL void (*MwLLGrabPointer)(MwLL handle, int toggle); -MWDECL void (*MwLLSetClipboard)(MwLL handle, const char* text, int clipboard_type); -MWDECL void (*MwLLGetClipboard)(MwLL handle, int clipboard_type); +MWDECL void (*MwLLSetClipboard)(MwLL handle, const char* text); +MWDECL char* (*MwLLGetClipboard)(MwLL handle); MWDECL void (*MwLLGetCursorCoord)(MwLL handle, MwPoint* point); MWDECL void (*MwLLGetScreenSize)(MwLL handle, MwRect* rect); -MWDECL void (*MwLLSetDarkTheme)(MwLL handle, int toggle); - -/* font renderer */ -MWDECL void MwFLSetup(void); - -#ifdef USE_FREETYPE2 -MWDECL int MWFL_FT2Setup(void); -#endif -#ifdef USE_STB_TRUETYPE -MWDECL int MwFL_STBTTSetup(void); -#endif - -MWDECL int (*MwFLDrawText)(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text, MwLLColor color); -MWDECL int (*MwFLTextWidth)(MwFLFont ttf, const char* text); -MWDECL int (*MwFLTextHeight)(MwFLFont ttf, int count); -MWDECL void* (*MwFLFontLoad)(unsigned char* data, unsigned int size, int px); -MWDECL void (*MwFLFontFree)(void* handle); - #ifdef __cplusplus } #endif diff --git a/include/Mw/LowLevel/ClassicMacOS.h b/include/Mw/LowLevel/ClassicMacOS.h deleted file mode 100644 index 958b5e8b1..000000000 --- a/include/Mw/LowLevel/ClassicMacOS.h +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * @file Mw/LowLevel/ClassicMacOS.h - * @brief ClassicMacOS Backend - * @warning This is used internally - */ -#ifndef __MW_LOWLEVEL_ClassicMacOS_H__ -#define __MW_LOWLEVEL_ClassicMacOS_H__ - -#include -#include -#include - -struct _MwLLClassicMacOS { - struct _MwLLCommon common; - - MwLL parent; - - WindowRef window; - ControlHandle control; - EventRecord event; - Rect winRect; -}; - -struct _MwLLClassicMacOSColor { - struct _MwLLCommonColor common; -}; - -struct _MwLLClassicMacOSPixmap { - struct _MwLLCommonPixmap common; - BitMap bmp; -}; - -MWDECL int MwLLClassicMacOSCallInit(void); - -#endif diff --git a/include/Mw/LowLevel/Cocoa.h b/include/Mw/LowLevel/Cocoa.h deleted file mode 100644 index 6c5f12b43..000000000 --- a/include/Mw/LowLevel/Cocoa.h +++ /dev/null @@ -1,180 +0,0 @@ -/*! - * @file Mw/LowLevel/Cocoa.h - * @brief Work in progress Cocoa Backend - * @warning This is used internally. - */ -#ifndef __MW_LOWLEVEL_COCOA_H__ -#define __MW_LOWLEVEL_COCOA_H__ - -#include -#include -#include - -typedef struct { - enum { - COCOA_DRAW_COMMAND_POLY = 0, - COCOA_DRAW_COMMAND_LINES, - COCOA_DRAW_COMMAND_PIXMAP, - } type; - union { - struct { - MwPoint* points; - int points_count; - struct _MwLLCommonColor color; - } poly; - struct { - MwPoint* points; - struct _MwLLCommonColor color; - } lines; - struct { - MwRect rect; - MwLLPixmap pixmap; - } pixmap; - }; -} draw_command; - -#ifdef __OBJC__ -#import -#import -#import - -@interface MilskoCocoaApplication : NSApplication { - MwBool doPending; -} -- (MwBool)pending; -@end - -// Note: implements NSApplicationDelegate -@interface MilskoCocoaApplicationDelegate : NSObject { - MilskoCocoaApplication* appl; -} -- (MilskoCocoaApplicationDelegate*)initWithAppl:(MilskoCocoaApplication*)appl; -@end - -@interface MilskoCocoaWindow : NSWindow { -} -@end - -// Note: implements NSWindowDelegate -@interface MilskoCocoaWindowDelegate : NSObject { - NSWindow* w; -} -- (MilskoCocoaWindowDelegate*)initWithWin:(NSWindow*)win; -@end - -/* - So we want to associate each NSWindow with its corresponding MwLL handle. The - conventional way of doing this is through "associative pointers", however - this is a feature that Apple added in 10.6 (marketted back then as "Objective - C 2" iirc). For 10.4 compatibility, we have to do a bit of an ugly hack that - might seem like horrifically undefined behavior, but I've tested this on - both 10.4 and modern Mac OS and as long as we're careful there's no - problems: we override NSView, use NSView's "frame" property to store the - pointer, and then override functions appropriately so that this frame is never - actually used. This can then be attached to an NSWindow with addSubview and - retrieved appropriately. - */ -@interface MilskoFakePointer : NSView { - void* ptr; -} - -- (void)setPointer:(void*)ptr; -- (void*)pointer; - -@end - -@interface MilskoCocoaPixmap : NSObject { - @public - MwBool valid; - int width; - int height; - unsigned char* buf; - NSImage* image; - NSBitmapImageRep* rep; -} - -+ (MilskoCocoaPixmap*)newWithWidth:(int)width height:(int)height; -- (void)updateWithData:(unsigned char*)data; -- (void)destroy; - -/* using @property to create instance variables fucks up 10.4 gcc for some - * reason? */ -- (NSImage*)image; - -@end - -@interface MilskoCocoaView : NSView { - MwBool _child; - - @public - draw_command* commands; -} - -- (void)destroy; -- (void)setChild; -@end - -@interface MilskoCocoaSubView : MilskoCocoaView { -} -@end - -@interface MilskoCocoa : NSObject { - @public - MilskoCocoaApplication* application; - MwBool _forceRender; - MwBool _eventsPending; - NSWindow* window; - NSRect rect; - MilskoCocoaView* view; - MwLL parent; - MilskoFakePointer* handle; - unsigned int strHash; - NSEvent* lastEvent; - - MilskoCocoaPixmap* cursorPixmap; - NSCursor* cursor; - NSModalSession modalSession; - - MwBool pointerLocked; - MwBool mouseMoved; - - MwBool rejectFirstTest; -} -- (void)destroy; -- (void)sendClipboardEvent; - -- (MwLL)getParent; -- (NSView*)getView; -- (NSWindow*)getWindow; -- (void)nudge; - -- (void)pushCursor; -- (void)popCursor; - -- (MilskoFakePointer*)getHandle; - -@end -#define OBJC(x) x -#else -#define OBJC(x) void* -#endif - -MWDECL int MwLLCocoaCallInit(void); - -struct _MwLLCocoa { - struct _MwLLCommon common; - OBJC(MilskoCocoa*) - real; -}; - -struct _MwLLCocoaColor { - struct _MwLLCommonColor common; -}; - -struct _MwLLCocoaPixmap { - struct _MwLLCommonPixmap common; - OBJC(MilskoCocoaPixmap*) - real; -}; - -#endif diff --git a/include/Mw/LowLevel/GDI.h b/include/Mw/LowLevel/GDI.h index c695cbd13..9fee9ac02 100644 --- a/include/Mw/LowLevel/GDI.h +++ b/include/Mw/LowLevel/GDI.h @@ -21,8 +21,6 @@ struct _MwLLGDI { int grabbed; int force_render; - int get_clipboard; - int get_darktheme; }; struct _MwLLGDIColor { diff --git a/include/Mw/LowLevel/Wayland.h b/include/Mw/LowLevel/Wayland.h index a21c0da1e..32f6547b2 100644 --- a/include/Mw/LowLevel/Wayland.h +++ b/include/Mw/LowLevel/Wayland.h @@ -1,7 +1,8 @@ /*! * @file Mw/LowLevel/Wayland.h - * @brief Wayland Backend + * @brief Work in progress Wayland Backend * @warning This is used internally. + * @warning This is disabled by default. */ #ifndef __MW_LOWLEVEL_WAYLAND_H__ #define __MW_LOWLEVEL_WAYLAND_H__ @@ -9,317 +10,30 @@ #include #include #include -#include +#include + +#include #include #include -#include -#include MWDECL int MwLLWaylandCallInit(void); -#define CSD_BORDER_FRAME_LEFT 5 -#define CSD_BORDER_FRAME_RIGHT 5 -#define CSD_BORDER_FRAME_TOP 24 -#define CSD_BORDER_FRAME_BOTTOM 5 - -struct _MwLLWayland; - -#include - -#if WAYLAND_LOAD_OPENGL -#include -#include -#endif - -typedef struct wayland_call_table { - void* lib; - void* xkb_lib; - void* cairo_lib; -#ifdef USE_DBUS - MwLLDBusFuncTable dbus; - MwBool has_dbus; -#endif - - int (*wl_display_dispatch)(struct wl_display* display); - int (*wl_display_dispatch_pending)(struct wl_display* display); - void (*wl_display_disconnect)(struct wl_display* display); - void (*wl_display_cancel_read)(struct wl_display* display); - int (*wl_display_prepare_read)(struct wl_display* display); - int (*wl_display_read_events)(struct wl_display* display); - int (*wl_display_flush)(struct wl_display* display); - int (*wl_display_get_fd)(struct wl_display* display); - int (*wl_display_roundtrip)(struct wl_display* display); - int (*wl_proxy_add_listener)(struct wl_proxy* proxy, void (**implementation)(void), void* data); - void (*wl_proxy_destroy)(struct wl_proxy* proxy); - void (*wl_log_set_handler_client)(wl_log_func_t handler); - struct wl_proxy* (*wl_proxy_marshal_flags)(struct wl_proxy* proxy, uint32_t opcode, - const struct wl_interface* interface, - uint32_t version, - uint32_t flags, ...); - struct wl_display* (*wl_display_connect)(const char* name); - uint32_t (*wl_proxy_get_version)(struct wl_proxy* proxy); - struct wl_display* (*wl_display_connect_to_fd)(int fd); - - struct xkb_context* (*xkb_context_new)(enum xkb_context_flags flags); - void (*xkb_context_unref)(struct xkb_context* context); - struct xkb_state* (*xkb_state_new)(struct xkb_keymap* keymap); - void (*xkb_state_unref)(struct xkb_state* state); - struct xkb_keymap* (*xkb_keymap_new_from_string)(struct xkb_context* context, const char* string, enum xkb_keymap_format format, enum xkb_keymap_compile_flags flags); - xkb_level_index_t (*xkb_keymap_num_levels_for_key)(struct xkb_keymap* keymap, xkb_keycode_t key, xkb_layout_index_t layout); - int (*xkb_keymap_key_get_syms_by_level)(struct xkb_keymap* keymap, xkb_keycode_t key, xkb_layout_index_t layout, xkb_level_index_t level, const xkb_keysym_t** syms_out); - xkb_layout_index_t (*xkb_state_key_get_layout)(struct xkb_state* state, xkb_keycode_t key); - void (*xkb_keymap_unref)(struct xkb_keymap* keymap); - - void (*cairo_set_line_width)(cairo_t* cr, - double width); - void (*cairo_scale)(cairo_t* cr, - double sx, - double sy); - cairo_t* (*cairo_create)(cairo_surface_t* target); - void (*cairo_move_to)(cairo_t* cr, - double x, - double y); - - void (*cairo_rectangle)(cairo_t* cr, - double x, - double y, - double width, - double height); - void (*cairo_new_path)(cairo_t* cr); - void (*cairo_set_line_cap)(cairo_t* cr, - cairo_line_cap_t line_cap); - void (*cairo_set_source_rgba)(cairo_t* cr, - double red, - double green, - double blue, - double alpha); - void (*cairo_set_source_rgb)(cairo_t* cr, - double red, - double green, - double blue); - void (*cairo_reset_clip)(cairo_t* cr); - unsigned char* (*cairo_image_surface_get_data)(cairo_surface_t* surface); - void (*cairo_line_to)(cairo_t* cr, - double x, - double y); - void (*cairo_surface_destroy)(cairo_surface_t* surface); - cairo_surface_t* (*cairo_image_surface_create_for_data)(unsigned char* data, - cairo_format_t format, - int width, - int height, - int stride); - cairo_surface_t* (*cairo_image_surface_create)(cairo_format_t format, - int width, - int height); - void (*cairo_destroy)(cairo_t* cr); - cairo_pattern_t* (*cairo_get_source)(cairo_t* cr); - void (*cairo_close_path)(cairo_t* cr); - void (*cairo_paint)(cairo_t* cr); - void (*cairo_surface_flush)(cairo_surface_t* surface); - void (*cairo_clip)(cairo_t* cr); - void (*cairo_surface_mark_dirty)(cairo_surface_t* surface); - void (*cairo_stroke)(cairo_t* cr); - void (*cairo_set_source_surface)(cairo_t* cr, - cairo_surface_t* surface, - double x, - double y); - void (*cairo_fill)(cairo_t* cr); - void (*cairo_pattern_set_filter)(cairo_pattern_t* pattern, - cairo_filter_t filter); - void (*cairo_set_antialias)(cairo_t*, cairo_antialias_t); - void (*cairo_set_operator)(cairo_t* cr, cairo_operator_t op); - -} wayland_call_table_t; - -extern wayland_call_table_t wl_call_tbl; -extern MwBool MwWaylandAlwaysRender; -/* defined inline right here so that it doesn't conflict with the other macros */ -MwInline int wayland_load_funcs() { - wl_call_tbl.lib = MwDynamicOpen("libwayland-client.so"); - if(!wl_call_tbl.lib) { - printf("(libwayland-client.so not found, falling back to X11)\n"); - return 1; - } - wl_call_tbl.xkb_lib = MwDynamicOpen("libxkbcommon.so"); - if(!wl_call_tbl.xkb_lib) { - printf("(libxkbcommon.so not found, cannot use Wayland backend.)\n"); - return 1; - } - wl_call_tbl.cairo_lib = MwDynamicOpen("libcairo.so"); - if(!wl_call_tbl.cairo_lib) { - printf("(libcairo.so not found, cannot use Wayland backend.)\n"); - return 1; - } -#define WAYLAND_FUNC(x) \ - wl_call_tbl.x = MwDynamicSymbol(wl_call_tbl.lib, #x); \ - if(!wl_call_tbl.x) { \ - printf("WARNING: Could use Wayland backend if " #x " was found.\n"); \ - return 1; \ - }; - - WAYLAND_FUNC(wl_display_dispatch) - WAYLAND_FUNC(wl_display_dispatch_pending) - WAYLAND_FUNC(wl_display_disconnect) - WAYLAND_FUNC(wl_display_cancel_read) - WAYLAND_FUNC(wl_display_prepare_read) - WAYLAND_FUNC(wl_display_read_events) - WAYLAND_FUNC(wl_display_flush) - WAYLAND_FUNC(wl_display_get_fd) - WAYLAND_FUNC(wl_display_roundtrip) - WAYLAND_FUNC(wl_proxy_add_listener) - WAYLAND_FUNC(wl_proxy_destroy) - WAYLAND_FUNC(wl_log_set_handler_client) - WAYLAND_FUNC(wl_proxy_marshal_flags) - WAYLAND_FUNC(wl_display_connect) - WAYLAND_FUNC(wl_proxy_get_version) - WAYLAND_FUNC(wl_display_connect_to_fd) - -#undef WAYLAND_FUNC - -#define XKB_FUNC(x) \ - wl_call_tbl.x = MwDynamicSymbol(wl_call_tbl.xkb_lib, #x); \ - if(!wl_call_tbl.x) { \ - printf("WARNING: Could use Wayland backend if " #x " was found. Do you have libxkbcommon?\n"); \ - return 1; \ - }; - - XKB_FUNC(xkb_state_unref) - XKB_FUNC(xkb_context_new) - XKB_FUNC(xkb_context_unref) - XKB_FUNC(xkb_state_new) - XKB_FUNC(xkb_keymap_new_from_string) - XKB_FUNC(xkb_keymap_unref) - XKB_FUNC(xkb_keymap_num_levels_for_key) - XKB_FUNC(xkb_keymap_key_get_syms_by_level) - XKB_FUNC(xkb_state_key_get_layout) -#undef XKB_FUNC - -#define CAIRO_FUNC(x) \ - wl_call_tbl.x = MwDynamicSymbol(wl_call_tbl.cairo_lib, #x); \ - if(!wl_call_tbl.x) { \ - printf("WARNING: Could use Wayland backend if " #x " was found. Do you have libcairo?\n"); \ - return 1; \ - }; - - CAIRO_FUNC(cairo_set_line_width); - CAIRO_FUNC(cairo_scale); - CAIRO_FUNC(cairo_create); - CAIRO_FUNC(cairo_move_to); - CAIRO_FUNC(cairo_rectangle); - CAIRO_FUNC(cairo_new_path); - CAIRO_FUNC(cairo_set_line_cap); - CAIRO_FUNC(cairo_set_antialias); - CAIRO_FUNC(cairo_set_source_rgba); - CAIRO_FUNC(cairo_set_source_rgb); - CAIRO_FUNC(cairo_reset_clip); - CAIRO_FUNC(cairo_image_surface_get_data); - CAIRO_FUNC(cairo_line_to); - CAIRO_FUNC(cairo_surface_destroy); - CAIRO_FUNC(cairo_image_surface_create_for_data); - CAIRO_FUNC(cairo_image_surface_create); - CAIRO_FUNC(cairo_destroy); - CAIRO_FUNC(cairo_get_source); - CAIRO_FUNC(cairo_close_path); - CAIRO_FUNC(cairo_paint); - CAIRO_FUNC(cairo_surface_flush); - CAIRO_FUNC(cairo_clip); - CAIRO_FUNC(cairo_surface_mark_dirty); - CAIRO_FUNC(cairo_stroke); - CAIRO_FUNC(cairo_set_source_surface); - CAIRO_FUNC(cairo_fill); - CAIRO_FUNC(cairo_set_operator); - CAIRO_FUNC(cairo_pattern_set_filter); -#undef CAIRO_FUNC - -#ifdef USE_DBUS - wl_call_tbl.has_dbus = MwLLDBusFuncSetup(&wl_call_tbl.dbus); -#endif - - return 0; -} - -#define wl_display_dispatch wl_call_tbl.wl_display_dispatch -#define wl_display_dispatch_pending wl_call_tbl.wl_display_dispatch_pending -#define wl_display_disconnect wl_call_tbl.wl_display_disconnect -#define wl_display_cancel_read wl_call_tbl.wl_display_cancel_read -#define wl_display_prepare_read wl_call_tbl.wl_display_prepare_read -#define wl_display_read_events wl_call_tbl.wl_display_read_events -#define wl_display_flush wl_call_tbl.wl_display_flush -#define wl_display_get_fd wl_call_tbl.wl_display_get_fd -#define wl_display_roundtrip wl_call_tbl.wl_display_roundtrip -#define wl_proxy_add_listener wl_call_tbl.wl_proxy_add_listener -#define wl_proxy_destroy wl_call_tbl.wl_proxy_destroy -#define wl_log_set_handler_client wl_call_tbl.wl_log_set_handler_client -#define wl_proxy_marshal_flags wl_call_tbl.wl_proxy_marshal_flags -#define wl_display_connect wl_call_tbl.wl_display_connect -#define wl_proxy_get_version wl_call_tbl.wl_proxy_get_version -#define wl_display_connect_to_fd wl_call_tbl.wl_display_connect_to_fd - -#define xkb_state_unref wl_call_tbl.xkb_state_unref -#define xkb_context_new wl_call_tbl.xkb_context_new -#define xkb_context_unref wl_call_tbl.xkb_context_unref -#define xkb_state_new wl_call_tbl.xkb_state_new -#define xkb_keymap_new_from_string wl_call_tbl.xkb_keymap_new_from_string -#define xkb_keymap_unref wl_call_tbl.xkb_keymap_unref -#define xkb_keymap_num_levels_for_key wl_call_tbl.xkb_keymap_num_levels_for_key -#define xkb_keymap_key_get_syms_by_level wl_call_tbl.xkb_keymap_key_get_syms_by_level -#define xkb_state_key_get_layout wl_call_tbl.xkb_state_key_get_layout - -#define cairo_set_line_width wl_call_tbl.cairo_set_line_width -#define cairo_scale wl_call_tbl.cairo_scale -#define cairo_create wl_call_tbl.cairo_create -#define cairo_move_to wl_call_tbl.cairo_move_to -#define cairo_rectangle wl_call_tbl.cairo_rectangle -#define cairo_new_path wl_call_tbl.cairo_new_path -#define cairo_set_line_cap wl_call_tbl.cairo_set_line_cap -#define cairo_set_antialias wl_call_tbl.cairo_set_antialias -#define cairo_set_source_rgba wl_call_tbl.cairo_set_source_rgba -#define cairo_set_source_rgb wl_call_tbl.cairo_set_source_rgb -#define cairo_reset_clip wl_call_tbl.cairo_reset_clip -#define cairo_image_surface_get_data wl_call_tbl.cairo_image_surface_get_data -#define cairo_line_to wl_call_tbl.cairo_line_to -#define cairo_surface_destroy wl_call_tbl.cairo_surface_destroy -#define cairo_image_surface_create_for_data wl_call_tbl.cairo_image_surface_create_for_data -#define cairo_image_surface_create wl_call_tbl.cairo_image_surface_create -#define cairo_destroy wl_call_tbl.cairo_destroy -#define cairo_get_source wl_call_tbl.cairo_get_source -#define cairo_close_path wl_call_tbl.cairo_close_path -#define cairo_paint wl_call_tbl.cairo_paint -#define cairo_surface_flush wl_call_tbl.cairo_surface_flush -#define cairo_clip wl_call_tbl.cairo_clip -#define cairo_surface_mark_dirty wl_call_tbl.cairo_surface_mark_dirty -#define cairo_stroke wl_call_tbl.cairo_stroke -#define cairo_set_source_surface wl_call_tbl.cairo_set_source_surface -#define cairo_fill wl_call_tbl.cairo_fill -#define cairo_set_operator wl_call_tbl.cairo_set_operator -#define cairo_pattern_set_filter wl_call_tbl.cairo_pattern_set_filter - #ifndef WL_PROTOCOLS_DEFINED #define WL_PROTOCOLS_DEFINED -#include "Wayland/wayland-core-protocol.h" #include "Wayland/xdg-shell-client-protocol.h" -#include "Wayland/viewporter-client-protocol.h" #include "Wayland/xdg-decoration-client-protocol.h" #include "Wayland/cursor-shape-client-protocol.h" -#include "Wayland/primary-selection-client-protocol.h" -#include "Wayland/pointer-constraints-client-protocol.h" -#include "Wayland/relative-pointer-client-protocol.h" -#include "Wayland/xdg-toplevel-icon-client-protocol.h" #endif +struct _MwLLWayland; + typedef struct wayland_protocol { void* listener; void* context; } wayland_protocol_t; typedef wayland_protocol_t*(wl_setup_func)(MwU32, struct _MwLLWayland*); -typedef void(wl_destroy_func)(struct _MwLLWayland* wayland, wayland_protocol_t* data); - -typedef struct wayland_protocol_callback_table { - wl_setup_func* setup; - wl_destroy_func* destroy; -} wayland_protocol_callback_table_t; struct _MwLLWaylandTopLevel { struct xdg_surface* xdg_surface; @@ -327,12 +41,13 @@ struct _MwLLWaylandTopLevel { struct xdg_toplevel_listener xdg_toplevel_listener; struct xdg_surface_listener xdg_surface_listener; + struct xkb_context* xkb_context; + struct xkb_keymap* xkb_keymap; + struct xkb_state* xkb_state; + MwBool compositor_created; MwBool xdg_wm_base_created; MwBool xdg_surface_created; - - struct wl_subsurface* ssurface; - struct wl_subcompositor* scompositor; }; struct _MwLLWaylandSublevel { @@ -340,59 +55,9 @@ struct _MwLLWaylandSublevel { struct wl_subcompositor* subcompositor; MwLL parent; - - struct xdg_surface* xdg_surface; + MwLL topmost_parent; /* The parent at the top of all the other parents. Usually a toplevel. */ }; -struct _MwLLWaylandPopup { - struct xdg_surface* xdg_surface; - struct xdg_popup* xdg_popup; - struct xdg_positioner* xdg_positioner; - struct xdg_surface_listener xdg_surface_listener; - struct xdg_wm_base* xdg_wm_base; - MwLL topmost_parent; -}; - -/* Shared set of anything needed for a shm buffer. */ -struct _MwLLWaylandShmBuffer { - struct wl_shm* shm; - struct wl_shm_pool* shm_pool; - struct wl_buffer* shm_buffer; - struct wl_shm_pool* shm_pool_back; - struct wl_buffer* shm_buffer_back; - struct wl_surface* surface; - struct wl_output* output; - - MwU8* buf; - MwU8* buf_back; - MwU64 buf_size; - int fd; - int fd_back; - MwBool setup; -}; - -enum _MwLLWaylandType { - MWLL_WAYLAND_UNKNOWN = 0, - MWLL_WAYLAND_TOPLEVEL, - MWLL_WAYLAND_SUBLEVEL, - MWLL_WAYLAND_POPUP, -}; - -typedef struct wl_clipboard_device_context { - struct { - struct wl_data_device* wl; - struct zwp_primary_selection_device_v1* zwp; - } device; - struct { - struct wl_data_offer* wl; - struct zwp_primary_selection_offer_v1* zwp; - } offer; - - MwLL ll; - struct wl_seat* seat; - MwU32 capabilities; -} wl_clipboard_device_context_t; - struct _MwLLWayland { struct _MwLLCommon common; @@ -401,129 +66,47 @@ struct _MwLLWayland { struct _MwLLWaylandTopLevel* toplevel; /* Pointer for data that's only loaded if the widget is a sublevel */ struct _MwLLWaylandSublevel* sublevel; - /* Pointer for data that's only loaded if the widget is a popup */ - struct _MwLLWaylandPopup* popup; }; - enum _MwLLWaylandType type; - enum _MwLLWaylandType type_to_be; - - MwBool detatching; - MwPoint detach_point; - - MwBool did_initial_resize; + enum { + MWLL_WAYLAND_TOPLEVEL = 0, + MWLL_WAYLAND_SUBLEVEL, /* Sublevels are surfaces that have the toplevel as a parent. Some parts of the code also call them subwidgets. */ + } type; /* Map of Wayland interfaces to their relevant setup functions. */ struct { - char key[255]; - wayland_protocol_callback_table_t* value; + const char* key; + wl_setup_func* value; }* wl_protocol_setup_map; /* Map of Wayland interfaces to any information we keep about them once we've registered them. */ struct { - char key[255]; + const char* key; wayland_protocol_t* value; }* wl_protocol_map; - MwBool has_decorations; - char title[255]; - - struct xkb_context* xkb_context; - struct xkb_keymap* xkb_keymap; - struct xkb_state* xkb_state; - struct wl_display* display; struct wl_registry* registry; struct wl_compositor* compositor; + struct wl_surface* surface; struct wl_registry_listener registry_listener; - struct wl_region* o_region; - struct wl_region* region; - struct wl_output* output; - - struct wp_viewport* vp; - - MwBool do_lock_pointer; - struct zwp_pointer_constraints_v1* pointer_constraints; - struct zwp_relative_pointer_manager_v1* relative_pointer_manager; - struct zwp_relative_pointer_v1* relative_pointer; - struct zwp_locked_pointer_v1* locked_pointer; - MwBool pointer_constrained; - -#ifdef USE_DBUS - MwLLDBusContext dbus; -#endif - - MwBool dark_theme_detection; - MwU32 dark_theme; - - /* clipboard related stuff. - * Note that unlike most interfaces, we don't keep zwp_primary_selection stuff in a wayland_protocol_t because we use wl_data_device as a fallback and want to have it share memory space.*/ - - struct { - struct wl_data_device_manager* wl; - struct zwp_primary_selection_device_manager_v1* zwp; - } clipboard_manager; - union { - struct wl_data_source* wl; - struct zwp_primary_selection_source_v1* zwp; - } clipboard_source; - char* clipboard_buffer; - MwBool supports_zwp; - - uint32_t clipboard_serial; - wl_clipboard_device_context_t** clipboard_devices_wl; - wl_clipboard_device_context_t** clipboard_devices_zwp; - - struct wl_pointer* pointer; - MwU32 pointer_serial; - struct wl_seat* pointer_seat; - - struct wl_keyboard* keyboard; - MwU32 keyboard_serial; - - MwU64 events_pending; - - MwU32 mod_state; + /*struct wl_event_queue* event_queue;*/ + MwLL* sublevels; /* stb_ds managed array of any sublevels */ MwBool configured; /* Whether or not xdg_toplevel_configure has run once */ - MwBool held_down; - - MwI32 x, y; - MwI32 ox, oy; - MwU32 ww, wh; /* Window position */ + MwU32 x, y, ww, wh; /* Window position */ MwPoint cur_mouse_pos; /* Currently known mouse position */ - MwU32 mw, mh; /* Monitor width and height as advertised by wl_output.mode */ + struct wl_shm* shm; + struct wl_shm_pool* shm_pool; + struct wl_buffer* shm_buffer; + void* mapped_shm_buf; + MwU64 mapped_shm_buf_size; + int shm_fd; - MwLL parent; - - MwBool force_render; - MwBool did_event_loop_early; - - MwBool dispatching_resize; - - struct _MwLLWaylandShmBuffer framebuffer; - struct _MwLLWaylandShmBuffer backbuffer; - struct _MwLLWaylandShmBuffer cursor; - struct _MwLLWaylandShmBuffer* icon; - - /* - Events mutex. Any time a keyboard/mouse event happens, we try to lock this for 100 milliseconds, then give up if we can't do it. This is used in conjunction with some code in the MwLLDestroyImpl to make sure that destroy is NEVER interferes with an ongoing event. - - IOI_XD: This sounds like a hilariously rare edge case, so it's almost funnier that this happened with 100% certainty for me and I spent day(s) trying to figure out what was happening. */ - pthread_mutex_t eventsMutex; - - uint32_t last_time; - - MwBool moving; - - cairo_surface_t* front_cs; - cairo_surface_t* back_cs; - cairo_t* front_cairo; - cairo_t* back_cairo; - /* The cairo to actually use for draw operations. Typically is front_cairo, but MwLLBeginDraw can change this to the back_cairo so it can be used to draw window decorations. */ - cairo_t* selected_cairo; + cairo_surface_t* cs; + cairo_t* cairo; }; struct _MwLLWaylandColor { diff --git a/include/Mw/LowLevel/X11.h b/include/Mw/LowLevel/X11.h index 3d0e1252e..ab9c43df2 100644 --- a/include/Mw/LowLevel/X11.h +++ b/include/Mw/LowLevel/X11.h @@ -29,18 +29,9 @@ struct _MwLLX11 { GC gc; Colormap colormap; Atom wm_delete; - Atom wm_protocols; - Atom utf8_string; - Atom compound_text; - Atom text; - Atom clipboard; - Atom selection; XIM xim; XIC xic; - long clipboard_time; - int clipboard_pending; /* 1 if UTF8_STRING, 2 if COMPOUNd_TEXT, 3 if TEXT, 4 if STRING, otherwise 0 */ - int top; int toplevel; int grabbed; @@ -57,12 +48,6 @@ struct _MwLLX11 { unsigned long blue_mask; unsigned long blue_max; unsigned long blue_shift; - -#ifdef USE_DBUS - MwLLDBusContext dbus; -#endif - - MwBool dark_theme_detection; }; struct _MwLLX11Color { diff --git a/include/Mw/MachDep.h b/include/Mw/MachDep.h index 10a1a04b6..6eb37be7f 100644 --- a/include/Mw/MachDep.h +++ b/include/Mw/MachDep.h @@ -37,63 +37,27 @@ #define GET_WHEEL_DELTA_WPARAM(x) ((short)HIWORD(x)) #endif #endif -#elif defined(CLASSIC_MAC_OS) -#include -#include -#include -#include -#include -#include -#include -#include + #else #include #include -#include -#include -#include -#endif - -#ifdef __unix__ -#include #include -#endif - -#ifdef __APPLE__ -#include -#include -#endif - -#ifdef USE_DBUS -#include +#include +#include +#include #endif #ifndef M_PI #define M_PI 3.14159265 #endif -/* Windows */ #if defined(_MILSKO) && defined(_WIN32) #define MWDECL extern __declspec(dllexport) #elif defined(_WIN32) #define MWDECL extern __declspec(dllimport) -/* GCC/Clang */ -/* First check if we have __has_attribute and can check for the existence of visibility */ -#elif defined(__has_attribute) -#if __has_attribute(visibility) -#define MWDECL extern __attribute__((visibility("default"))) #else #define MWDECL extern #endif -/* It might be that we're on an old version of GCC (like the one Apple ships with older versions of Mac OS). - * If we're on gcc 3 or above, assume it's there - */ -#elif __GNUC__ >= 3 -#define MWDECL extern __attribute__((visibility("default"))) -#else -/* all else fails */ -#define MWDECL extern -#endif #define MwInline static __inline diff --git a/include/Mw/Milsko.h b/include/Mw/Milsko.h index 07a560b00..4bd157a78 100644 --- a/include/Mw/Milsko.h +++ b/include/Mw/Milsko.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include diff --git a/include/Mw/Resource/Font.h b/include/Mw/Resource/Font.h index d178a25b9..17b7cd2ea 100644 --- a/include/Mw/Resource/Font.h +++ b/include/Mw/Resource/Font.h @@ -42,26 +42,6 @@ MWDECL unsigned char MwBoldTTFData[]; */ MWDECL unsigned int MwBoldTTFDataSize; -/*! - * @brief Default monospace TTF font data - */ -MWDECL unsigned char MwMonospaceTTFData[]; - -/*! - * @brief Default monospace TTF font size - */ -MWDECL unsigned int MwMonospaceTTFDataSize; - -/*! - * @brief Default bold monospace TTF font data - */ -MWDECL unsigned char MwBoldMonospaceTTFData[]; - -/*! - * @brief Default bold monospace TTF font size - */ -MWDECL unsigned int MwBoldMonospaceTTFDataSize; - #ifdef __cplusplus } #endif diff --git a/include/Mw/String.h b/include/Mw/String.h index 2a744d9e9..492d47123 100644 --- a/include/Mw/String.h +++ b/include/Mw/String.h @@ -41,21 +41,6 @@ MWDECL void MwStringSize(char* out, MwOffset size); */ MWDECL void MwStringTime(char* out, time_t t); -/*! - * @brief Prints up to n characters into a bufferMwStringPrintIntoBuffer. - * @note On compilers that support C99, this uses vsnprintf to safely print into a buffer; on compilers that don't, vsprintf is used. - * @param out Buffer - * @param size Max size - */ -MWDECL void MwStringPrintIntoBuffer(char* out, MwU32 size, const char* fmt, ...); - -/*! - * @brief Check if the given key is UTF8 - * @param key Input - * @return whether its utf8 - */ -MWDECL MwBool MwStringIsKeyUTF8(MwU32 key); - #ifdef __cplusplus } #endif diff --git a/include/Mw/StringDefs.h b/include/Mw/StringDefs.h index c657a637e..071137332 100644 --- a/include/Mw/StringDefs.h +++ b/include/Mw/StringDefs.h @@ -35,14 +35,6 @@ #define MwNratio "Iratio" #define MwNfixedSize "IfixedSize" #define MwNmargin "Imargin" -#define MwNbitmapFont "IbitmapFont" -#define MwNsevenSegment "IsevenSegment" -#define MwNlength "Ilength" -#define MwNforceInverted "IforceInverted" -#define MwNroundness "Iroundness" -#define MwNisRounded "IisRounded" -#define MwNdarkTheme "IdarkTheme" -#define MwNuseMonospace "IuseMonospace" #define MwNtitle "Stitle" #define MwNtext "Stext" @@ -57,30 +49,23 @@ #define MwNfont "Vfont" #define MwNboldFont "VboldFont" #define MwNbackgroundPixmap "VbackgroundPixmap" -#define MwNmonospaceFont "VmonospaceFont" -#define MwNboldMonospaceFont "VboldMonospaceFont" -#define MwNactivateHandler "Cactivate" /* NULL */ -#define MwNlistBoxActivateHandler "ClistBoxActivate" /* int* */ -#define MwNtreeViewActivateHandler "CtreeViewActivate" /* void* */ -#define MwNresizeHandler "Cresize" /* NULL */ -#define MwNtickHandler "Ctick" /* NULL */ -#define MwNmenuHandler "Cmenu" /* MwMenu */ -#define MwNmouseDownHandler "CmouseDown" /* MwMouse* */ -#define MwNmouseUpHandler "CmouseUp" /* same as MwNmouseDownHandler */ -#define MwNmouseMoveHandler "CmouseMove" /* MwPoint* */ -#define MwNchangedHandler "Cchanged" /* NULL */ -#define MwNcomboBoxChangedHandler "CcomboBoxChanged" /* int* */ -#define MwNkeyHandler "Ckey" /* int* (MwLLKeyEnum or character code) */ -#define MwNkeyReleaseHandler "CkeyRelease" /* same as MwNkeyHandler */ -#define MwNcloseHandler "Cclose" /* NULL */ -#define MwNfocusInHandler "CfocusIn" /* NULL */ -#define MwNfocusOutHandler "CfocusOut" /* NULL */ -#define MwNfileChosenHandler "CfileChosen" /* char* */ -#define MwNdirectoryChosenHandler "CdirectoryChosen" /* char* */ -#define MwNcolorChosenHandler "CcolorChosen" /* MwRGB* */ -#define MwNdrawHandler "Cdraw" /* NULL */ -#define MwNclipboardHandler "Cclipboard" /* char* */ -#define MwNdarkThemeHandler "CdarkTheme" /* int* */ +#define MwNactivateHandler "Cactivate" /* NULL/int* (MwListBox)/void* (MwTreeView) */ +#define MwNresizeHandler "Cresize" /* NULL */ +#define MwNtickHandler "Ctick" /* NULL */ +#define MwNmenuHandler "Cmenu" /* MwMenu */ +#define MwNmouseDownHandler "CmouseDown" /* MwLLMouse* */ +#define MwNmouseUpHandler "CmouseUp" /* same as MwNmouseDownHandler */ +#define MwNmouseMoveHandler "CmouseMove" /* MwPoint* */ +#define MwNchangedHandler "Cchanged" /* NULL/int* (MwComboBox) */ +#define MwNkeyHandler "Ckey" /* int* (MwLLKeyEnum or character code) */ +#define MwNkeyReleaseHandler "CkeyRelease" /* same as MwNkeyHandler */ +#define MwNcloseHandler "Cclose" /* NULL */ +#define MwNfocusInHandler "CfocusIn" /* NULL */ +#define MwNfocusOutHandler "CfocusOut" /* NULL */ +#define MwNfileChosenHandler "CfileChosen" /* char* */ +#define MwNdirectoryChosenHandler "CdirectoryChosen" /* char* */ +#define MwNcolorChosenHandler "CcolorChosen" /* MwRGB* */ +#define MwNdrawHandler "Cdraw" /* NULL */ #endif diff --git a/include/Mw/TypeDefs.h b/include/Mw/TypeDefs.h index ca8e32b05..0d2eeca4e 100644 --- a/include/Mw/TypeDefs.h +++ b/include/Mw/TypeDefs.h @@ -20,15 +20,10 @@ typedef struct _MwViewport* MwViewport; typedef struct _MwListBox* MwListBox; typedef struct _MwComboBox* MwComboBox; typedef struct _MwTreeView* MwTreeView; -typedef struct _MwScrollBar* MwScrollBar; -typedef struct _MwLabel* MwLabel; -typedef struct _MwLabelSegment MwLabelSegment; typedef struct _MwListBoxEntry MwListBoxEntry; typedef struct _MwTreeViewEntry MwTreeViewEntry; typedef struct _MwDirectoryEntry MwDirectoryEntry; typedef struct _MwListBoxPacket MwListBoxPacket; -typedef struct _MwBox* MwBox; -typedef struct _MwMouse MwMouse; #ifdef _MILSKO typedef struct _MwWidget* MwWidget; #else @@ -41,7 +36,6 @@ typedef void (*MwHandlerChildrenProp)(MwWidget handle, MwWidget child, const cha typedef void (*MwHandlerKey)(MwWidget handle, int key); typedef void (*MwHandlerMouse)(MwWidget handle, void* ptr); typedef void (*MwHandlerExecute)(MwWidget handle, const char* name, void* out, va_list args); -typedef void (*MwHandlerClipboardReceived)(MwWidget handle, const char* data); typedef void (*MwUserHandler)(MwWidget handle, void* user_data, void* call_data); typedef void (*MwErrorHandler)(int code, const char* message, void* user_data); @@ -77,6 +71,7 @@ struct _MwVoidKeyValue { struct _MwWidget { char* name; MwLLColor bgcolor; + int dark_theme; MwLL lowlevel; MwWidget parent; @@ -102,16 +97,6 @@ struct _MwWidget { MwWidget* tick_list; int destroyed; - - void* root_font; - void* root_boldfont; - void* root_monofont; - void* root_boldmonofont; - - int top_step; - MwWidget* draw_queue; - - int berserk; }; #endif @@ -120,7 +105,6 @@ struct _MwMenu { int keep; MwWidget wsub; MwMenu* sub; - void* opaque; }; struct _MwEntry { @@ -180,21 +164,6 @@ struct _MwTreeView { MwPoint pressed; }; -struct _MwScrollBar { - MwPoint point; - int drag; - int pos; -}; - -struct _MwLabel { - MwLabelSegment* segment; -}; - -struct _MwLabelSegment { - int key; - unsigned char value; -}; - struct _MwDirectoryEntry { char* name; int type; @@ -207,36 +176,27 @@ struct _MwListBoxPacket { char*** names; }; -struct _MwBox { - int layout; -}; - -struct _MwMouse { - MwPoint point; - int button; -}; - struct _MwClass { - MwHandlerWithStatus create; - MwHandler destroy; - MwHandler draw; - MwHandler click; - MwHandler parent_resize; - MwHandlerProp prop_change; - MwHandler mouse_move; - MwHandlerMouse mouse_up; - MwHandlerMouse mouse_down; - MwHandlerKey key; - MwHandlerExecute execute; - MwHandler tick; - MwHandler resize; - MwHandler children_update; - MwHandlerChildrenProp children_prop_change; - MwHandlerClipboardReceived clipboard; - void* reserved1; - void* reserved2; - void* reserved3; - void* reserved4; + MwHandlerWithStatus create; + MwHandler destroy; + MwHandler draw; + MwHandler click; + MwHandler parent_resize; + MwHandlerProp prop_change; + MwHandler mouse_move; + MwHandlerMouse mouse_up; + MwHandlerMouse mouse_down; + MwHandlerKey key; + MwHandlerExecute execute; + MwHandler tick; + MwHandler resize; + MwHandler children_update; + MwHandlerChildrenProp children_prop_change; + void* reserved1; + void* reserved2; + void* reserved3; + void* reserved4; + void* reserved5; }; #endif diff --git a/include/Mw/Widget/Label.h b/include/Mw/Widget/Label.h index 4c7513310..f11c06b6c 100644 --- a/include/Mw/Widget/Label.h +++ b/include/Mw/Widget/Label.h @@ -17,17 +17,6 @@ extern "C" { */ MWDECL MwClass MwLabelClass; -/*! - * @brief Sets the custom data for seven segment - * @param handle Widget - * @param index Index - * @param data Data, `GFEDCBA` as 7-bit value - * @note See https://en.wikipedia.org/wiki/File:7_Segment_Display_with_Labeled_Segments.svg for what alphabets mean here - * */ -MwInline void MwLabelSetSevenSegment(MwWidget handle, int index, int data) { - MwVaWidgetExecute(handle, "mwLabelSetSevenSegment", NULL, index, data); -} - #ifdef __cplusplus } #endif diff --git a/include/Mw/Widget/OpenGL.h b/include/Mw/Widget/OpenGL.h index 3f7a0c451..dced6b9a1 100644 --- a/include/Mw/Widget/OpenGL.h +++ b/include/Mw/Widget/OpenGL.h @@ -5,29 +5,20 @@ #ifndef __MW_WIDGET_OPENGL_H__ #define __MW_WIDGET_OPENGL_H__ -#include #include #include +#include -#if !defined(MW_OPENGL_NO_INCLUDE) && !defined(__gl_h_) #ifdef _WIN32 #include -#elif defined(__APPLE__) #else #include #endif -#if defined(__APPLE__) -#include -#include -#else #include -#include -#endif #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY #endif -#endif #ifdef __cplusplus extern "C" { diff --git a/include/Mw/Widget/SubMenu.h b/include/Mw/Widget/SubMenu.h index 636f29bc4..bf26fa862 100644 --- a/include/Mw/Widget/SubMenu.h +++ b/include/Mw/Widget/SubMenu.h @@ -18,25 +18,8 @@ extern "C" { */ MWDECL MwClass MwSubMenuClass; -/*! - * @brief Makes submenu appear - * @param handle Handle - * @param menu Menu - * @param point Point - * @param diff_calc Toggles different way to calculate positiion - */ -MwInline void MwSubMenuAppear(MwWidget handle, MwMenu menu, MwPoint* point, int diff_calc) { - MwVaWidgetExecute(handle, "mwSubMenuAppear", NULL, menu, point, diff_calc); -} - -/*! - * @brief Calculates the size of submenu - * @param handle Handle - * @param menu Menu - * @param rect Size - */ -MwInline void MwSubMenuGetSize(MwWidget handle, MwMenu menu, MwRect* rect) { - MwVaWidgetExecute(handle, "mwSubMenuGetSize", NULL, menu, rect); +MwInline void MwSubMenuAppear(MwWidget handle, MwMenu menu, MwPoint* point) { + MwVaWidgetExecute(handle, "mwSubMenuAppear", NULL, menu, point); } #ifdef __cplusplus diff --git a/include/Mw/Widget/Vulkan.h b/include/Mw/Widget/Vulkan.h index 0b7db3ac8..a96beff64 100644 --- a/include/Mw/Widget/Vulkan.h +++ b/include/Mw/Widget/Vulkan.h @@ -11,18 +11,17 @@ #ifndef __MW_WIDGET_VULKAN_H__ #define __MW_WIDGET_VULKAN_H__ -#if defined(MW_VULKAN) && !defined(_WIN32) && !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) +#if !defined(_WIN32) && !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) #error Vulkan is unsupported on the requested platform. #endif -#if !defined(MW_VULKAN_NO_INCLUDE) #include #include -#endif #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -48,19 +47,19 @@ MWDECL void MwVulkanEnableLayer(const char* ext_name); /*! * @brief Configuration options that can be passed to setup Vulkan before a widget is created. */ -typedef struct _MwVulkanConfig { +typedef struct MwVulkanConfig_T { /*! * @brief Vulkan API version (default: VK_API_VERSION_1_0) */ - MwU32 api_version; + uint32_t api_version; /*! * @brief Vulkan version (default: VK_VERSION_1_0) */ - MwU32 vk_version; + uint32_t vk_version; /*! * @brief Whether or not to enable validation layers (default: false) */ - int validation_layers; + VkBool32 validation_layers; } MwVulkanConfig; /*! @@ -68,61 +67,61 @@ typedef struct _MwVulkanConfig { * @warning This must be called before MwCreateWidget. * @warning The configuration provided will be used for future initializations of the Vulkan widget (unless it's changed) */ -MWDECL void MwVulkanConfigure(MwVulkanConfig* cfg); +MWDECL void MwVulkanConfigure(MwVulkanConfig cfg); /*! * @brief Field that can be gotten from Vulkan. */ -enum MwVULKANFIELD { +typedef enum MwVulkanField_T { /*! * @brief The address of the vulkan widget's vkGetInstanceProcAddr function (PFN_vkGetInstanceProcAddr) */ - MwVULKANFIELD_GETINSTANCEPROCADDR = 0, + MwVulkanField_GetInstanceProcAddr = 0, /*! * @brief The address of the vulkan widget's instance (VkInstance) */ - MwVULKANFIELD_INSTANCE, + MwVulkanField_Instance, /*! * @brief The address of the vulkan widget's surface (VkSurfaceKHR) */ - MwVULKANFIELD_SURFACE, + MwVulkanField_Surface, /*! * @brief The address of the vulkan widget's physical device (VkPhysicalDevice) */ - MwVULKANFIELD_PHYSICALDEVICE, + MwVulkanField_PhysicalDevice, /*! * @brief The address of the vulkan widget's logical device (VkDevice) */ - MwVULKANFIELD_LOGICALDEVICE, + MwVulkanField_LogicalDevice, /*! * @brief The address of the index that the vulkan widget uses for the graphics queue (uint32_t *) */ - MwVULKANFIELD_GRAPHICSQUEUEINDEX, + MwVulkanField_GraphicsQueueIndex, /*! * @brief The address of the index that the vulkan widget uses for the present queue (uint32_t *) */ - MwVULKANFIELD_PRESENTQUEUEINDEX, - MwVULKANFIELD_GRAPHICSQUEUE, + MwVulkanField_PresentQueueIndex, + MwVulkanField_GraphicsQueue, /*! * @brief The address of the vulkan widget's graphics queue (VkQueue) */ - MwVULKANFIELD_PRESENTQUEUE, -}; + MwVulkanField_PresentQueue, +} MwVulkanField; /*! * @brief Function for getting a field from within Vulkan. - * @note Consult the documentation for MwVULKANFIELD to know what type is expected for output. + * @warning Consult the documentation for MwVulkanField to know what type is expected for out. */ -MwInline void* MwVulkanGetField(MwWidget handle, int field, int* err) { +MwInline void* MwVulkanGetField(MwWidget handle, MwVulkanField field, MwErrorEnum* out) { void* field_out; - MwVaWidgetExecute(handle, "mwVulkanGetField", &field_out, field, err); + MwVaWidgetExecute(handle, "mwVulkanGetField", &field_out, field, out); return field_out; } /*! * @brief Return whether Vulkan is installed on the target platform. */ -MWDECL int MwVulkanSupported(void); +MWDECL VkBool32 MwVulkanSupported(void); #ifdef __cplusplus } diff --git a/milsko.xml b/milsko.xml index 5c8370430..f7f5baefa 100644 --- a/milsko.xml +++ b/milsko.xml @@ -1,4 +1,4 @@ - + - - - - + + + + @@ -75,93 +76,46 @@ - + + - - - + + + - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - + + - - - - - - - - - + + + - - - - - - @@ -188,32 +142,6 @@ - - 0 - - - - 0 - - - - 1 - - - - - - - 0 - - - - - - - - - 0x0fffffff @@ -418,7 +346,7 @@ - + @@ -467,18 +395,14 @@ - - - - - - - - - - - - + + +
+ + + + +
@@ -562,31 +486,13 @@
- - -
- - - - - - - - - - -
- - - - @@ -620,7 +526,6 @@ - @@ -628,18 +533,7 @@ - - - - - - - - - - - @@ -694,6 +588,20 @@ + + + + + + + + + + + + + + @@ -713,9 +621,6 @@ - - - @@ -784,48 +689,15 @@ - - - - - + + + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pl/ostype/ClassicMacOS.pl b/pl/ostype/ClassicMacOS.pl deleted file mode 100644 index 1f2e532d6..000000000 --- a/pl/ostype/ClassicMacOS.pl +++ /dev/null @@ -1,12 +0,0 @@ -use_backend("classicmacos"); - -print( -"Compiling for Classic Mac OS via ./configure currently outputs a broken executable and it only supports PowerPC. Help is wanted. In the mean time, use CMake." -); - -$cc = $ENV{RETRO68_TOOLCHAIN_PATH} . "/bin/powerpc-apple-macos-gcc"; -$ar = $ENV{RETRO68_TOOLCHAIN_PATH} . "/bin/powerpc-apple-macos-ar"; -add_cflags("-DCLASSIC_MAC_OS"); -add_cflags("-DSTBI_NO_THREAD_LOCALS"); - -1; diff --git a/pl/ostype/Darwin.pl b/pl/ostype/Darwin.pl deleted file mode 100644 index c786eb87f..000000000 --- a/pl/ostype/Darwin.pl +++ /dev/null @@ -1,9 +0,0 @@ -$library_suffix = ".dylib"; -set_shared_flag("-dynamiclib"); - -use_backend("cocoa"); - -add_cflags("-DSTBI_NO_THREAD_LOCALS"); -add_ldflags("-framework Cocoa -lobjc"); - -1; diff --git a/pl/ostype/Linux.pl b/pl/ostype/Linux.pl index 278cbfe0c..155cd4aaf 100644 --- a/pl/ostype/Linux.pl +++ b/pl/ostype/Linux.pl @@ -1,14 +1,8 @@ -my @enabled_backends = (); - -if (param_get("wayland")) { - push(@enabled_backends, "wayland"); +if (param_get("experimental-wayland")) { + use_backend("wayland", "x11"); } -if (param_get("x11")) { - push(@enabled_backends, "x11"); +else { + use_backend("x11"); } -add_cflags("-DUSE_DBUS"); - -use_backend(@enabled_backends); - 1; diff --git a/pl/ostype/NetBSD.pl b/pl/ostype/NetBSD.pl index 6556cab20..2d816586a 100644 --- a/pl/ostype/NetBSD.pl +++ b/pl/ostype/NetBSD.pl @@ -1,9 +1,6 @@ -add_incdir2("-I/usr/X11R7/include -I/usr/pkg/include"); +add_incdir("-I/usr/X11R7/include -I/usr/pkg/include"); add_libdir( "-L/usr/X11R7/lib -Wl,-R/usr/X11R7/lib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib"); use_backend("x11"); -add_libs("-lpthread"); - -add_cflags("-DUSE_DBUS"); 1; diff --git a/pl/rules.pl b/pl/rules.pl index 7ad414db7..5cb4a90a2 100644 --- a/pl/rules.pl +++ b/pl/rules.pl @@ -1,24 +1,20 @@ new_object("src/*.c"); my $gl_libs = ""; -if (param_get("tiny")) { - add_cflags("-Oz"); - if (defined($ENV{CC}) && grep(/^clang$/, $ENV{CC})) { - add_libs("-flto=thin"); - add_cflags("-flto=thin"); - } -} + if (param_get("classic-theme")) { add_cflags("-DUSE_CLASSIC_THEME"); } if (grep(/^x11$/, @backends)) { add_cflags("-DUSE_X11"); new_object("src/backend/x11.c"); + add_libs("-lX11"); $gl_libs = "-lGL -lGLU"; if (param_get("xrender")) { add_cflags("-DUSE_XRENDER"); + add_libs("-lXrender"); } } @@ -30,83 +26,34 @@ if (grep(/^gdi$/, @backends)) { $gl_libs = "-lopengl32 -lglu32"; } -if (grep(/^classicmacos$/, @backends)) { - - #add_cflags("-DCLASSIC_MAC_OS"); - new_object("src/backend/classicmacos.c"); - - $gl_libs = ""; -} - if (grep(/^wayland$/, @backends)) { add_cflags("-DUSE_WAYLAND"); new_object("src/backend/wayland.c"); + add_cflags(`pkg-config --cflags cairo wayland-client xkbcommon`); + add_libs(`pkg-config --libs cairo wayland-client xkbcommon`); - if (param_get("opengl")) { - add_cflags("-DWAYLAND_LOAD_OPENGL"); - } + scan_wayland_protocol("stable", "xdg-shell", ""); + scan_wayland_protocol("stable", "tablet", "-v2"); + scan_wayland_protocol("staging", "cursor-shape", "-v1"); + scan_wayland_protocol("unstable", "xdg-decoration", "-unstable-v1"); - scan_wayland_protocol_core(); - scan_wayland_protocol("stable", "xdg-shell", ""); - scan_wayland_protocol("stable", "viewporter", ""); - scan_wayland_protocol("stable", "tablet", "-v2"); - scan_wayland_protocol("staging", "xdg-toplevel-icon", "-v1"); - scan_wayland_protocol("staging", "cursor-shape", "-v1"); - scan_wayland_protocol("unstable", "xdg-decoration", "-unstable-v1"); - scan_wayland_protocol("unstable", "primary-selection", "-unstable-v1"); - scan_wayland_protocol("unstable", "pointer-constraints", "-unstable-v1"); - scan_wayland_protocol("unstable", "relative-pointer", "-unstable-v1"); - - $gl_libs = "-lGL -lGLU"; -} - -if (grep(/( |^)-DUSE_DBUS( |$)/, $cflags)) { - add_cflags(`pkg-config --cflags dbus-1`); -} - -if (grep(/^cocoa$/, @backends) || param_get("gnustep")) { - add_cflags("-DUSE_COCOA"); - new_object("src/backend/cocoa.m"); - - if (param_get("gnustep")) { - add_incdir("-I" . `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS`); - add_libdir("-L" . `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES`); - add_cflags("-fobjc-runtime=gnustep-2.0 -fblocks"); - add_ldflags("-lobjc -lgnustep-base -lm -lgnustep-gui"); - } - - if (param_get("opengl")) { - new_object("src/widget/opengl_cocoa.m"); - } - -# tim cook my man literally everybody and their mother who knows what opengl is knows its deprecated on macos and i'm not having you spam the console with this - add_cflags("-DGL_SILENCE_DEPRECATION"); - - $gl_libs = "-framework OpenGL"; + $gl_libs = "-lEGL -lwayland-egl lGL -lGLU"; } if (param_get("stb-image")) { add_cflags("-DUSE_STB_IMAGE"); - if (param_get("tiny")) { - add_cflags("-DSTB_IMAGE_STATIC"); - add_cflags("-DSTB_IMAGE_IMPLEMENTATION"); - } -} -else { - new_object("external/libjpeg/src/*.c"); - new_object("external/libpng/src/*.c"); - add_incdir("-Iexternal/libjpeg/include -Iexternal/libpng/include"); } if (param_get("stb-truetype")) { add_cflags("-DUSE_STB_TRUETYPE"); } - -add_incdir("-Iexternal/libz/include"); - if (param_get("freetype2")) { add_cflags("-DUSE_FREETYPE2"); - if (!$cross) { + if ($cross) { + add_libs("-lfreetype"); + } + else { add_cflags(`pkg-config --cflags freetype2`); + add_libs(`pkg-config --libs freetype2`); } } @@ -115,9 +62,8 @@ if (param_get("vulkan") && param_get("vulkan-string-helper")) { } new_object("src/icon/*.c"); +new_object("src/font/*.c"); new_object("src/cursor/*.c"); -new_object("src/text/*.c"); -new_object("src/text/font/*.c"); new_object("src/widget/box.c"); new_object("src/widget/button.c"); @@ -139,14 +85,11 @@ new_object("src/widget/treeview.c"); new_object("src/widget/viewport.c"); new_object("src/widget/window.c"); -new_object("src/widget/opengl.c"); -new_object("src/widget/vulkan.c"); - if (param_get("opengl")) { - add_cflags("-DMW_OPENGL"); + new_object("src/widget/opengl.c"); } if (param_get("vulkan")) { - add_cflags("-DMW_VULKAN"); + new_object("src/widget/vulkan.c"); } new_object("src/dialog/*.c"); @@ -154,7 +97,6 @@ new_object("src/dialog/*.c"); new_object("src/abstract/*.c"); new_object("external/*.c"); -new_object("external/libz/src/*.c"); new_example("examples/basic/example"); new_example("examples/basic/rotate"); @@ -170,10 +112,6 @@ new_example("examples/basic/colorpicker"); new_example("examples/basic/combobox"); new_example("examples/basic/treeview"); new_example("examples/basic/box"); -new_example("examples/basic/clipboard"); -new_example("examples/basic/sevensegment"); -new_example("examples/basic/calculator"); -new_example("examples/basic/periodic"); if (param_get("opengl")) { new_example("examples/gldemos/boing", $gl_libs); diff --git a/pl/utils.pl b/pl/utils.pl index 70c0b517c..971c19626 100644 --- a/pl/utils.pl +++ b/pl/utils.pl @@ -5,13 +5,6 @@ sub add_incdir { $incdir = "${incdir} ${input}"; } -sub add_incdir2 { - my $input = $_[0]; - $input =~ s/\r?\n/ /g; - - $incdir2 = "${incdir2} ${input}"; -} - sub add_cflags { my $input = $_[0]; $input =~ s/\r?\n/ /g; @@ -47,14 +40,10 @@ sub new_example { push(@examples_targets, "${_[0]}${executable_suffix}"); } -sub set_shared_flag { - @shared = $_[0]; -} - sub new_object { my @l = glob($_[0]); foreach my $e (@l) { - $e =~ s/\.(c|m)$/$object_suffix/; + $e =~ s/\.c$/$object_suffix/; push(@library_targets, $e); } } @@ -65,34 +54,6 @@ sub use_backend { } } -sub scan_wayland_protocol_core { - my $proto_c = "src/backend/wayland-core-protocol.c"; - - if ( - system( -"wayland-scanner private-code /usr/share/wayland/wayland.xml ${proto_c}" - ) != 0 - ) - { - print( -"^ Error on getting private code for /usr/share/wayland/wayland.xml\n" - ); - } - else { - new_object($proto_c); - } - if ( - system( -"wayland-scanner client-header /usr/share/wayland/wayland.xml include/Mw/LowLevel/Wayland/wayland-core-protocol.h" - ) - ) - { - print( -"^ Error on getting client header for /usr/share/wayland/wayland.xml\n" - ); - } -} - sub scan_wayland_protocol { my $tier = $_[0]; my $proto = $_[1]; diff --git a/resource/font/IBMPlexMono-Regular.ttf b/resource/font/IBMPlexMono.ttf similarity index 100% rename from resource/font/IBMPlexMono-Regular.ttf rename to resource/font/IBMPlexMono.ttf diff --git a/resource/font/OpenSans-Bold.ttf b/resource/font/OpenSans-Bold.ttf deleted file mode 100644 index e62bd8142..000000000 Binary files a/resource/font/OpenSans-Bold.ttf and /dev/null differ diff --git a/resource/font/OpenSans-Regular.ttf b/resource/font/OpenSans-Regular.ttf deleted file mode 100644 index d9b361f97..000000000 Binary files a/resource/font/OpenSans-Regular.ttf and /dev/null differ diff --git a/src/abstract/directory.c b/src/abstract/directory.c index ac5a382d1..3882f8ea6 100644 --- a/src/abstract/directory.c +++ b/src/abstract/directory.c @@ -4,11 +4,7 @@ typedef struct dir { HANDLE hFind; WIN32_FIND_DATA ffd; - int next; -} dir_t; -#elif defined(CLASSIC_MAC_OS) -typedef struct dir { - int dummy; + int first; } dir_t; #else typedef struct dir { @@ -22,21 +18,14 @@ void* MwDirectoryOpen(const char* path) { #ifdef _WIN32 char* p = malloc(strlen(path) + 2 + 1); strcpy(p, path); - if(strchr(path, '/') != NULL) { - strcat(p, "/"); - } else { - strcat(p, "\\"); - } - strcat(p, "*"); + strcat(p, "/*"); if((dir->hFind = FindFirstFile(p, &dir->ffd)) == INVALID_HANDLE_VALUE) { free(p); free(dir); return NULL; } free(p); - dir->next = 1; -#elif defined(CLASSIC_MAC_OS) -/* todo */ + dir->first = 1; #else if((dir->dir = opendir(path)) == NULL) { free(dir); @@ -53,8 +42,6 @@ void MwDirectoryClose(void* handle) { dir_t* dir = handle; #ifdef _WIN32 FindClose(dir->hFind); -#elif defined(CLASSIC_MAC_OS) -/* todo */ #else closedir(dir->dir); free(dir->base); @@ -67,10 +54,14 @@ MwDirectoryEntry* MwDirectoryRead(void* handle) { MwDirectoryEntry* entry = malloc(sizeof(*entry)); #ifdef _WIN32 ULARGE_INTEGER* l; - - if(!dir->next) return NULL; - + if(dir->first) { + dir->first = 0; + } else if(FindNextFile(dir->hFind, &dir->ffd) == 0) { + free(entry); + return NULL; + } entry->name = MwStringDuplicate(dir->ffd.cFileName); + if(dir->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { entry->type = MwDIRECTORY_DIRECTORY; } else { @@ -86,10 +77,6 @@ MwDirectoryEntry* MwDirectoryRead(void* handle) { l = (ULARGE_INTEGER*)&dir->ffd.ftLastWriteTime; entry->mtime = l->QuadPart / 10000000 - 11644473600; - - dir->next = FindNextFile(dir->hFind, &dir->ffd); -#elif defined(CLASSIC_MAC_OS) -/* todo */ #else struct dirent* d; struct stat s; @@ -133,8 +120,6 @@ char* MwDirectoryCurrent(void) { GetCurrentDirectory(len, out); return out; -#elif CLASSIC_MAC_OS - return ""; #else return getcwd(NULL, 0); #endif diff --git a/src/abstract/dynamic.c b/src/abstract/dynamic.c index ae31e82bf..7f56e0f57 100644 --- a/src/abstract/dynamic.c +++ b/src/abstract/dynamic.c @@ -12,43 +12,7 @@ void* MwDynamicSymbol(void* handle, const char* symbol) { void MwDynamicClose(void* handle) { FreeLibrary(handle); } -#elif defined(CLASSIC_MAC_OS) -void* MwDynamicOpen(const char* path) { - // CFragConnectionID connID; - // Ptr* addr; - // unsigned char err[255]; - - // if(GetSharedLibrary((ConstStr63Param)path, kPowerPCCFragArch, kPrivateCFragCopy, - // &connID, addr, err)) { - // printf("Error getting %s: %s\n", path, err); - // return NULL; - // }; - // return connID; - printf("MwDynamicOpen not implemented yet.\n"); - getchar(); - return NULL; -} - -void* MwDynamicSymbol(void* handle, const char* symbol) { - // CFragConnectionID connID = (CFragConnectionID)handle; - // Ptr* symAddr; - // CFragSymbolClass* symClass; - // OSErr err; - // if((err = FindSymbol(connID, (ConstStr63Param)symbol, symAddr, symClass))) { - // printf("Error getting %s: %d\n", symbol, err); - // return NULL; - // }; - // return symAddr; - printf("MwDynamicSymbol not implemented yet.\n"); - getchar(); - return NULL; -} - -void MwDynamicClose(void* handle) { - // CFragConnectionID connID = (CFragConnectionID)handle; - // CloseConnection(&connID); -} -#elif defined(__unix__) || defined(__APPLE__) +#elif defined(__unix__) void* MwDynamicOpen(const char* path) { return dlopen(path, RTLD_LOCAL | RTLD_LAZY); } diff --git a/src/abstract/time.c b/src/abstract/time.c index cd09b94d9..8c85d580a 100644 --- a/src/abstract/time.c +++ b/src/abstract/time.c @@ -8,53 +8,6 @@ long MwTimeGetTick(void) { void MwTimeSleep(int ms) { Sleep(ms); } -#elif defined(__APPLE__) -long MwTimeGetTick(void) { - struct timespec ts; - long n = 0; - clock_serv_t cclock; - mach_timespec_t mts; - - host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); - clock_get_time(cclock, &mts); - mach_port_deallocate(mach_task_self(), cclock); - - n += ts.tv_nsec / 1000 / 1000; - n += ts.tv_sec * 1000; - - return n; -} -void MwTimeSleep(int ms) { - struct timespec ts; - - ts.tv_sec = ms / 1000; - ts.tv_nsec = (ms % 1000) * 1000 * 1000; - - nanosleep(&ts, NULL); -} -#elif defined(CLASSIC_MAC_OS) -// static TMTask tm; -// static int timer; -// void timerUpdateFunc(void) { -// timer += 1; -// PrimeTime((QElemPtr)&tm, 1); -// }; - -long MwTimeGetTick(void) { - UnsignedWide h; - Microseconds(&h); - return h.lo; -} -void MwTimeSleep(int ms) { - // tm.tmAddr = NewTimerProc(timerUpdateFunc); - // tm.tmWakeUp = 0; - // tm.tmReserved = 0; - - // InsTime((QElemPtr)&tm); - // PrimeTime((QElemPtr)&tm, 1); - - // DisposeTimerUPP(tm.tmAddr); -} #elif defined(__unix__) long MwTimeGetTick(void) { struct timespec ts; @@ -72,7 +25,7 @@ void MwTimeSleep(int ms) { struct timespec ts; ts.tv_sec = ms / 1000; - ts.tv_nsec = (ms % 1000) * 1000000; + ts.tv_nsec = (ms % 1000) * 1000 * 1000; nanosleep(&ts, NULL); } diff --git a/src/backend/call.c b/src/backend/call.c index 14338ecc9..e2ce934c9 100644 --- a/src/backend/call.c +++ b/src/backend/call.c @@ -54,8 +54,6 @@ \ MwLLGetCursorCoord = MwLLGetCursorCoordImpl; \ MwLLGetScreenSize = MwLLGetScreenSizeImpl; \ -\ - MwLLSetDarkTheme = MwLLSetDarkThemeImpl; \ \ return 0; \ } diff --git a/src/backend/classicmacos.c b/src/backend/classicmacos.c deleted file mode 100644 index d7db43318..000000000 --- a/src/backend/classicmacos.c +++ /dev/null @@ -1,357 +0,0 @@ -#include -#include -#include - -#include "../../external/stb_ds.h" - -static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { - MwLL r; - r = malloc(sizeof(*r)); - memset(r, 0, sizeof(*r)); - MwLLCreateCommon(r); - - r->cmacos.parent = parent; - - if(x == MwDEFAULT) { - x = (qd.screenBits.bounds.right / 2) - (width / 2); - } - if(y == MwDEFAULT) { - y = (qd.screenBits.bounds.bottom / 2) - (height / 2); - } - - /* todo: how do we set parent windows? If we can't, what is our equivalant to MacOS's NSViews, Wayland's subsurfaces, etc.? */ - SetRect(&r->cmacos.winRect, x, y, width, height); - r->cmacos.window = newcwindow(nil, &r->cmacos.winRect, "", true, - documentProc, (WindowPtr)(-1), true, 0); - SetPort(r->cmacos.window); - - return r; -} - -static void MwLLDestroyImpl(MwLL handle) { - MwLLDestroyCommon(handle); - - free(handle); -} - -static void MwLLBeginDrawImpl(MwLL handle) { -} - -static void MwLLEndDrawImpl(MwLL handle) { -} - -static void MwLLPolygonImpl(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { - int i; - PolyHandle p; - RGBColor col; - - SetPort(handle->cmacos.window); - BeginUpdate(handle->cmacos.window); - - p = OpenPoly(); - col.red = color->common.red * 0x101; - col.green = color->common.green * 0x101; - col.blue = color->common.blue * 0x101; - - RGBForeColor(&col); - PenMode(patCopy); - - for(i = 0; i < points_count; i++) { - if(i == 0) { - MoveTo(points[i].x, points[i].y); - } else { - LineTo(points[i].x, points[i].y); - } - } - - ClosePoly(); - FillCPoly(p, &qd.ltGray); - KillPoly(p); - - EndUpdate(handle->cmacos.window); -} - -static void MwLLLineImpl(MwLL handle, MwPoint* points, MwLLColor color) { - RGBColor col; - SetPort(handle->cmacos.window); - - col.red = color->common.red; - col.green = color->common.green; - col.blue = color->common.blue; - - RGBForeColor(&col); - - PenMode(patCopy); - - MoveTo(points[0].x, points[0].y); - LineTo(points[1].x, points[1].y); -} - -static MwLLColor MwLLAllocColorImpl(MwLL handle, int r, int g, int b) { - MwLLColor c = malloc(sizeof(*c)); - MwLLColorUpdate(handle, c, r, g, b); - return c; -} - -static void MwLLColorUpdateImpl(MwLL handle, MwLLColor c, int r, int g, int b) { - c->common.red = r; - c->common.green = g; - c->common.blue = b; -} - -static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) { - Rect bounds; - GetWindowBounds(handle->cmacos.window, kWindowContentRgn, &bounds); - *x = bounds.left; - *y = bounds.top; - *w = bounds.right; - *h = bounds.bottom; -} - -static void MwLLSetXYImpl(MwLL handle, int x, int y) { - MoveWindow(handle->cmacos.window, x, y, MwTRUE); -} - -static void MwLLSetWHImpl(MwLL handle, int w, int h) { - SizeWindow(handle->cmacos.window, w, h, MwTRUE); -} - -static void MwLLFreeColorImpl(MwLLColor color) { - free(color); -} - -static int MwLLPendingImpl(MwLL handle) { - YieldToAnyThread(); - return EventAvail(everyEvent, &handle->cmacos.event); -} - -static void MwLLNextEventImpl(MwLL handle) { - EventRecord event; - GetNextEvent(everyEvent, &event); - - switch(event.what) { - case updateEvt: { - } - // MwLLDispatch(handle, draw, NULL); - break; - case osEvt: - break; - case mouseUp: { - // MwLLMouse m; - // m.button = MwLLMouseLeft; - // if(___curWindow->mouseButtonCallback != NULL) { - // int mods = MacModifiersToGLFWModifiers(event.modifiers); - - // if(___curWindow->keyStateMap[MK_LCTRL] == 1) { - // ___curWindow->mouseButtonCallback( - // ___curWindow, GLFW_MOUSE_BUTTON_RIGHT, GLFW_RELEASE, mods); - // } else { - // ___curWindow->mouseButtonCallback( - // ___curWindow, GLFW_MOUSE_BUTTON_LEFT, GLFW_RELEASE, mods); - // } - // } - } - case mouseDown: { - // // start with callback stuff - // if(___curWindow->mouseButtonCallback != NULL) { - // int mods = MacModifiersToGLFWModifiers(event.modifiers); - - // if(___curWindow->keyStateMap[MK_LCTRL] == 1) { - // ___curWindow->mouseButtonCallback( - // ___curWindow, GLFW_MOUSE_BUTTON_RIGHT, GLFW_PRESS, mods); - // } else { - // ___curWindow->mouseButtonCallback( - // ___curWindow, GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS, mods); - // } - // } - - // then do system stuff - switch(FindWindow(event.where, &handle->cmacos.window)) { - case inDrag: - DragWindow(handle->cmacos.window, event.where, &qd.screenBits.bounds); - // if(___curWindow->windowPosCallback != NULL) { - // ___curWindow->windowPosCallback(___curWindow, event.where.h, - // event.where.v); - // } - break; - case inGrow: { - long growResult = - GrowWindow(handle->cmacos.window, event.where, &qd.screenBits.bounds); - - int width = growResult & 0xFFFF; - int height = growResult >> 16; - - SizeWindow(handle->cmacos.window, growResult & 0xFFFF, growResult >> 16, true); - - Rect rect; - GetWindowBounds(handle->cmacos.window, kWindowStructureRgn, &rect); - rect.right = width; - rect.bottom = height; - SetWindowBounds(handle->cmacos.window, kWindowStructureRgn, &rect); - - // ___curWindow->width = width; - // ___curWindow->height = height; - - // if(___curWindow->windowSizeCallback != NULL) { - // ___curWindow->windowSizeCallback(___curWindow, width, height); - // } - // if(___curWindow->windowSetFramebufferSizeCallback != NULL) { - // ___curWindow->windowSetFramebufferSizeCallback(___curWindow, - // width, height); - // } - } break; - - case inGoAway: { - if(TrackGoAway(handle->cmacos.window, event.where)) { - MwLLDispatch(handle, close, NULL); - // if(___curWindow->windowCloseCallback != NULL) { - // ___curWindow->windowCloseCallback(___curWindow); - // } - // ___curWindow->shouldClose = true; - } - } break; - } - } - case autoKey: - case keyDown: - case keyUp: { - // // key char stuff - // unsigned char ch = (event.message & charCodeMask); - // if(*___curWindow->charCallback != NULL) { - // ___curWindow->charCallback(___curWindow, ch); - // } - - // // key state map - // unsigned char key = (event.message & keyCodeMask) >> 8; - // ___curWindow->keyStateMap[key] = 0; - // if(event.what == keyDown || event.what == autoKey) { - // ___curWindow->keyStateMap[key] &= 1; - // } - - // if(*___curWindow->keyCallback != NULL) { - // int key = MacKeyToGLFWKey(event.message); - // int scancode = (event.message & adbAddrMask) >> 16; - - // int mods = MacModifiersToGLFWModifiers(event.modifiers); - - // int action; - // if(event.what == keyUp) { - // action = GLFW_RELEASE; - // } else { - // action = GLFW_PRESS; - // } - // ___curWindow->keyCallback(___curWindow, key, scancode, action, - // mods); - // } - } - } - - FlushEvents(everyEvent, -1); - YieldToAnyThread(); -} - -static void MwLLSetTitleImpl(MwLL handle, const char* title) { - setwtitle(handle->cmacos.window, title); -} - -static MwLLPixmap MwLLCreatePixmapImpl(MwLL handle, unsigned char* data, int width, int height) { - MwLLPixmap r = malloc(sizeof(*r)); - - r->common.raw = malloc(4 * width * height); - memcpy(r->common.raw, data, 4 * width * height); - - MwLLPixmapUpdate(r); - return r; -} - -static void MwLLPixmapUpdateImpl(MwLLPixmap r) { -} - -static void MwLLDestroyPixmapImpl(MwLLPixmap pixmap) { -} - -static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { -} - -static void MwLLSetIconImpl(MwLL handle, MwLLPixmap pixmap) { -} - -static void MwLLForceRenderImpl(MwLL handle) { -} - -static void MwLLSetCursorImpl(MwLL handle, MwCursor* image, MwCursor* mask) { -} - -static void MwLLDetachImpl(MwLL handle, MwPoint* point) { -} - -static void MwLLShowImpl(MwLL handle, int show) { - if(show) - ShowWindow(handle->cmacos.window); - else - HideWindow(handle->cmacos.window); -} - -static void MwLLMakePopupImpl(MwLL handle, MwLL parent) { -} - -static void MwLLSetSizeHintsImpl(MwLL handle, int minx, int miny, int maxx, int maxy) { -} - -static void MwLLMakeBorderlessImpl(MwLL handle, int toggle) { -} - -static void MwLLFocusImpl(MwLL handle) { - HiliteWindow(handle->cmacos.window, MwTRUE); -} - -static void MwLLGrabPointerImpl(MwLL handle, int toggle) { -} - -static void MwLLSetClipboardImpl(MwLL handle, const char* text, int clipboard_type) { - /* TODO */ - - (void)handle; - (void)text; -} - -static void MwLLGetClipboardImpl(MwLL handle, int clipboard_type) { -} - -static void MwLLMakeToolWindowImpl(MwLL handle) { -} - -static void MwLLGetCursorCoordImpl(MwLL handle, MwPoint* point) { -} - -static void MwLLGetScreenSizeImpl(MwLL handle, MwRect* rect) { -} - -static void MwLLBeginStateChangeImpl(MwLL handle) { - MwLLShow(handle, 0); -} - -static void MwLLEndStateChangeImpl(MwLL handle) { - MwLLShow(handle, 1); -} - -static void MwLLSetDarkThemeImpl(MwLL handle, int toggle) { - (void)handle; - (void)toggle; -} - -static int MwLLClassicMacOSCallInitImpl(void) { - InitGraf(&qd.thePort); - InitFonts(); - FlushEvents(everyEvent, 0); - InitWindows(); - InitMenus(); - TEInit(); - InitDialogs(0L); - InitCursor(); - - return 0; -} - -#include "call.c" -CALL(ClassicMacOS); diff --git a/src/backend/cocoa.m b/src/backend/cocoa.m deleted file mode 100644 index d9c6382ee..000000000 --- a/src/backend/cocoa.m +++ /dev/null @@ -1,1115 +0,0 @@ -#include -#include "../../external/stb_ds.h" -#include "Mw/LowLevel/Cocoa.h" - -#ifdef MW_VULKAN -#include -#include -#endif - -#ifdef __clang__ -#pragma clang push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -#endif - -static NSRect rectFlip(NSRect originFrame) { - NSScreen* zeroScreen = [[NSScreen screens] objectAtIndex:0]; - double screenHeight = [zeroScreen frame].size.height; - double originY = originFrame.origin.y; - double frameHeight = originFrame.size.height; - double destinationY = screenHeight - (originY + frameHeight); - NSRect destinationFrame = originFrame; - destinationFrame.origin.y = destinationY; - return destinationFrame; -} - -static NSPoint pointFlip(NSPoint point) { - return rectFlip(NSMakeRect(point.x, point.y, 0, 0)).origin; -} - -static NSRect localRectFlip(NSRect originFrame, NSView* view) { - float viewHeight = [view bounds].size.height; - NSRect destinationFrame = - NSMakeRect(originFrame.origin.x, - [view bounds].size.height - - (originFrame.origin.y + originFrame.size.height), - originFrame.size.width, originFrame.size.height); - return destinationFrame; -} -static NSPoint localPointFlip(NSPoint point, NSView* view) { - return localRectFlip(NSMakeRect(point.x, point.y, 0, 0), view).origin; -} - -/* Recursively dispatch a key event to a widget and its children */ -static void recursive_dispatch_key(MwLL handle, int* k) { - MwWidget h = (MwWidget)handle->common.user; - MwLLDispatch(handle, key, k); - if(h) { - int i; - for(i = 0; i < arrlen(h->children); i++) { - MwLLDispatch(h->children[i]->lowlevel, key, k); - if(arrlen(h->children[i]->children) > 0) { - recursive_dispatch_key(h->children[i]->lowlevel, k); - } - } - } -}; -/* Recursively dispatch a key released event to a widget and its children */ -static void recursive_dispatch_key_released(MwLL handle, int* k) { - MwWidget h = (MwWidget)handle->common.user; - MwLLDispatch(handle, key_released, k); - if(h) { - int i; - for(i = 0; i < arrlen(h->children); i++) { - MwLLDispatch(h->children[i]->lowlevel, key_released, k); - if(arrlen(h->children[i]->children) > 0) { - recursive_dispatch_key_released(h->children[i]->lowlevel, k); - } - } - } -}; - -@implementation MilskoCocoaApplication -- (void)sendEvent:(NSEvent*)event { - self->doPending = MwTRUE; - [super sendEvent:event]; -} -- (MwBool)pending { - if(self->doPending) { - self->doPending = MwFALSE; - return MwTRUE; - } - return MwFALSE; -} -@end - -@implementation MilskoCocoaView -- (id)initWithFrame:(NSRect)frame { - [super initWithFrame:frame]; - self->commands = NULL; - return self; -} - -- (void)setChild { - self->_child = MwTRUE; -} -- (void)destroy { - arrfree(self->commands); -}; - -- (void)drawRect:(NSRect)dirtyRect { - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - int i; - - [super drawRect:dirtyRect]; - - for(i = 0; i < arrlen(self->commands); i++) { - draw_command cmd = self->commands[i]; - switch(cmd.type) { - case COCOA_DRAW_COMMAND_POLY: { - int n; - NSBezierPath* path = [NSBezierPath bezierPath]; - - NSColor* nscolor = - [NSColor colorWithCalibratedRed:cmd.poly.color.red / 255. - green:cmd.poly.color.green / 255. - blue:cmd.poly.color.blue / 255. - alpha:1.0]; - - [nscolor setFill]; - for(n = 0; n < cmd.poly.points_count; n++) { - NSPoint p = localPointFlip(NSMakePoint(cmd.poly.points[n].x, cmd.poly.points[n].y), self); - if(n == 0) { - [path moveToPoint:p]; - } else { - [path lineToPoint:p]; - } - } - - [path closePath]; - [path fill]; - - free(cmd.poly.points); - } break; - - case COCOA_DRAW_COMMAND_LINES: { - int n; - NSBezierPath* path = [NSBezierPath bezierPath]; - - NSColor* nscolor = - [NSColor colorWithCalibratedRed:cmd.lines.color.red / 255. - green:cmd.lines.color.green / 255. - blue:cmd.lines.color.blue / 255. - alpha:1.0]; - - [nscolor setFill]; - for(n = 0; n < 2; n++) { - NSPoint p = localPointFlip(NSMakePoint(cmd.lines.points[n].x, cmd.lines.points[n].y), self); - if(n == 0) { - [path moveToPoint:p]; - } else { - [path lineToPoint:p]; - } - } - - [path closePath]; - [path stroke]; - - free(cmd.lines.points); - } break; - - case COCOA_DRAW_COMMAND_PIXMAP: { - [cmd.pixmap.pixmap->cocoa.real->image - drawInRect:localRectFlip(NSMakeRect(cmd.pixmap.rect.x, cmd.pixmap.rect.y, cmd.pixmap.rect.width, cmd.pixmap.rect.height), self) - fromRect:NSZeroRect - operation:NSCompositeSourceOver - fraction:1.0]; - MwLLDestroyPixmap(cmd.pixmap.pixmap); - } break; - } - } - - arrfree(self->commands); - - [pool release]; -} - -- (BOOL)canBecomeKeyView { - return YES; -} -- (BOOL)acceptsFirstResponder { - return YES; -} - -- (NSView*)hitTest:(NSPoint)aPoint { - if(self->_child) { - return NSPointInRect(aPoint, [self bounds]) ? self : nil; - } else { - return [super hitTest:aPoint]; - } -} - -- (void)handleKeyEvent:(NSEvent*)ev ll:(MwLL)ll down:(MwBool)isDown { - int ch; - /* todo: consolidate these values into the below switch case. */ - enum { - kVK_ANSI_A = 0x00, - kVK_ANSI_S = 0x01, - kVK_ANSI_D = 0x02, - kVK_ANSI_F = 0x03, - kVK_ANSI_H = 0x04, - kVK_ANSI_G = 0x05, - kVK_ANSI_Z = 0x06, - kVK_ANSI_X = 0x07, - kVK_ANSI_C = 0x08, - kVK_ANSI_V = 0x09, - kVK_ANSI_B = 0x0B, - kVK_ANSI_Q = 0x0C, - kVK_ANSI_W = 0x0D, - kVK_ANSI_E = 0x0E, - kVK_ANSI_R = 0x0F, - kVK_ANSI_Y = 0x10, - kVK_ANSI_T = 0x11, - kVK_ANSI_1 = 0x12, - kVK_ANSI_2 = 0x13, - kVK_ANSI_3 = 0x14, - kVK_ANSI_4 = 0x15, - kVK_ANSI_6 = 0x16, - kVK_ANSI_5 = 0x17, - kVK_ANSI_Equal = 0x18, - kVK_ANSI_9 = 0x19, - kVK_ANSI_7 = 0x1A, - kVK_ANSI_Minus = 0x1B, - kVK_ANSI_8 = 0x1C, - kVK_ANSI_0 = 0x1D, - kVK_ANSI_RightBracket = 0x1E, - kVK_ANSI_O = 0x1F, - kVK_ANSI_U = 0x20, - kVK_ANSI_LeftBracket = 0x21, - kVK_ANSI_I = 0x22, - kVK_ANSI_P = 0x23, - kVK_ANSI_L = 0x25, - kVK_ANSI_J = 0x26, - kVK_ANSI_Quote = 0x27, - kVK_ANSI_K = 0x28, - kVK_ANSI_Semicolon = 0x29, - kVK_ANSI_Backslash = 0x2A, - kVK_ANSI_Comma = 0x2B, - kVK_ANSI_Slash = 0x2C, - kVK_ANSI_N = 0x2D, - kVK_ANSI_M = 0x2E, - kVK_ANSI_Period = 0x2F, - kVK_ANSI_Grave = 0x32, - kVK_Return = 0x24, - kVK_Space = 0x31, - kVK_Escape = 0x35, - kVK_Shift = 0x38, - kVK_Control = 0x3B, - kVK_RightShift = 0x3C, - kVK_RightControl = 0x3E, - kVK_LeftArrow = 0x7B, - kVK_RightArrow = 0x7C, - kVK_DownArrow = 0x7D, - kVK_UpArrow = 0x7E - }; -#define KEY_CASE(x, y) \ - case x: \ - ch = y; \ - break; - switch([ev keyCode]) { - KEY_CASE(kVK_ANSI_A, 'a') - KEY_CASE(kVK_ANSI_B, 'b') - KEY_CASE(kVK_ANSI_C, 'c') - KEY_CASE(kVK_ANSI_D, 'd') - KEY_CASE(kVK_ANSI_E, 'e') - KEY_CASE(kVK_ANSI_F, 'f') - KEY_CASE(kVK_ANSI_G, 'g') - KEY_CASE(kVK_ANSI_H, 'h') - KEY_CASE(kVK_ANSI_I, 'i') - KEY_CASE(kVK_ANSI_J, 'j') - KEY_CASE(kVK_ANSI_K, 'k') - KEY_CASE(kVK_ANSI_L, 'l') - KEY_CASE(kVK_ANSI_M, 'm') - KEY_CASE(kVK_ANSI_N, 'n') - KEY_CASE(kVK_ANSI_O, 'o') - KEY_CASE(kVK_ANSI_P, 'p') - KEY_CASE(kVK_ANSI_Q, 'q') - KEY_CASE(kVK_ANSI_R, 'r') - KEY_CASE(kVK_ANSI_S, 's') - KEY_CASE(kVK_ANSI_T, 't') - KEY_CASE(kVK_ANSI_U, 'u') - KEY_CASE(kVK_ANSI_V, 'v') - KEY_CASE(kVK_ANSI_W, 'w') - KEY_CASE(kVK_ANSI_X, 'x') - KEY_CASE(kVK_ANSI_Y, 'y') - KEY_CASE(kVK_ANSI_Z, 'z') - KEY_CASE(kVK_ANSI_0, '0') - KEY_CASE(kVK_ANSI_1, '1') - KEY_CASE(kVK_ANSI_2, '2') - KEY_CASE(kVK_ANSI_3, '3') - KEY_CASE(kVK_ANSI_4, '4') - KEY_CASE(kVK_ANSI_5, '5') - KEY_CASE(kVK_ANSI_6, '6') - KEY_CASE(kVK_ANSI_7, '7') - KEY_CASE(kVK_ANSI_8, '8') - KEY_CASE(kVK_ANSI_9, '9') - KEY_CASE(kVK_ANSI_Quote, '\"') - KEY_CASE(kVK_ANSI_Grave, '`') - KEY_CASE(kVK_ANSI_Backslash, '/') - KEY_CASE(kVK_ANSI_Comma, ',') - KEY_CASE(kVK_ANSI_Equal, '=') - KEY_CASE(kVK_Escape, MwLLKeyEscape) - KEY_CASE(kVK_ANSI_LeftBracket, '[') - KEY_CASE(kVK_ANSI_Minus, '-') - KEY_CASE(kVK_ANSI_Period, '.') - KEY_CASE(kVK_Return, MwLLKeyEnter) - KEY_CASE(kVK_ANSI_RightBracket, ']') - KEY_CASE(kVK_ANSI_Semicolon, ';') - KEY_CASE(kVK_ANSI_Slash, '\\') - KEY_CASE(kVK_Space, ' ') - KEY_CASE(kVK_Control, MwLLKeyControl) - KEY_CASE(kVK_RightControl, MwLLKeyControl) - KEY_CASE(kVK_Shift, MwLLKeyLeftShift) - KEY_CASE(kVK_RightShift, MwLLKeyRightShift) - KEY_CASE(kVK_DownArrow, MwLLKeyDown) - KEY_CASE(kVK_LeftArrow, MwLLKeyLeft) - KEY_CASE(kVK_RightArrow, MwLLKeyRight) - KEY_CASE(kVK_UpArrow, MwLLKeyUp) - } - if(isDown) { - recursive_dispatch_key(ll, &ch); - } else { - recursive_dispatch_key_released(ll, &ch); - } - [ll->cocoa.real nudge]; -} -- (void)mouseEntered:(NSEvent*)ev { - MwLL h = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - MwLLDispatch(h, focus_in, NULL); - [h->cocoa.real pushCursor]; - [super mouseEntered:ev]; -} -- (void)mouseExited:(NSEvent*)ev { - MwLL h = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - MwLLDispatch(h, focus_out, NULL); - [h->cocoa.real popCursor]; - [super mouseExited:ev]; -} -- (void)keyDown:(NSEvent*)ev { - MwLL h = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - [self handleKeyEvent:ev ll:h down:MwTRUE]; - [super keyDown:ev]; -} -- (void)keyUp:(NSEvent*)ev { - MwLL h = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - [self handleKeyEvent:ev ll:h down:MwFALSE]; - [super keyUp:ev]; -} - -- (void)mouseMoved:(NSEvent*)ev { - MwMouse mouse; - NSPoint mousePoint = pointFlip([ev locationInWindow]); - MwLL this = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - mouse.button = MwMOUSE_LEFT; - mouse.point.x = mousePoint.x; - mouse.point.y = mousePoint.y; - MwLLDispatch(this, move, &mouse); - [this->cocoa.real nudge]; - [super mouseMoved:ev]; -} -- (BOOL)mouseDownCanMoveWindow { - return NO; -} - -- (void)mouseDown:(NSEvent*)ev { - MwMouse mouse; - NSPoint mousePoint = [ev locationInWindow]; - MwLL this = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - mousePoint.y = [[ev window] frame].size.height - mousePoint.y; - mouse.button = MwMOUSE_LEFT; - mouse.point.x = mousePoint.x; - mouse.point.y = mousePoint.y; - MwLLDispatch(this, down, &mouse); - [this->cocoa.real nudge]; - [super mouseDown:ev]; -} - -- (void)mouseUp:(NSEvent*)ev { - MwMouse mouse; - NSPoint mousePoint = [ev locationInWindow]; - MwLL this = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - mousePoint.y = [[ev window] frame].size.height - mousePoint.y; - mouse.button = MwMOUSE_LEFT; - mouse.point.x = mousePoint.x; - mouse.point.y = mousePoint.y; - MwLLDispatch(this, up, &mouse); - [this->cocoa.real nudge]; - [super mouseUp:ev]; -} -- (void)rightMouseDown:(NSEvent*)ev { - MwMouse mouse; - NSPoint mousePoint = [ev locationInWindow]; - MwLL this = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - mousePoint.y = [[ev window] frame].size.height - mousePoint.y; - mouse.button = MwMOUSE_RIGHT; - mouse.point.x = mousePoint.x; - mouse.point.y = mousePoint.y; - MwLLDispatch(this, down, &mouse); - [this->cocoa.real nudge]; - [super rightMouseDown:ev]; -} - -- (void)rightMouseUp:(NSEvent*)ev { - MwMouse mouse; - NSPoint mousePoint = [ev locationInWindow]; - MwLL this = [((MilskoFakePointer*)[[self subviews] objectAtIndex:0]) pointer]; - mousePoint.y = [[ev window] frame].size.height - mousePoint.y; - mouse.button = MwMOUSE_RIGHT; - mouse.point.x = mousePoint.x; - mouse.point.y = mousePoint.y; - MwLLDispatch(this, up, &mouse); - [this->cocoa.real nudge]; - [super rightMouseUp:ev]; -} - -@end - -@implementation MilskoCocoaApplicationDelegate -- (MilskoCocoaApplicationDelegate*)initWithAppl:(MilskoCocoaApplication*)_appl { - self->appl = _appl; - return self; -} -@end - -@implementation MilskoCocoaWindowDelegate - -- (NSSize)windowWillResize:(NSWindow*)win toSize:(NSSize)frameSize; -{ - if([[[win contentView] subviews] count] >= 1) { - NSView* ptr = [[[win contentView] subviews] objectAtIndex:0]; - if([ptr isKindOfClass:[MilskoFakePointer class]]) { - MwLL h = [(MilskoFakePointer*)ptr pointer]; - MwLLDispatch(h, resize, NULL); - } - } - return frameSize; -} - -- (void)windowDidBecomeMain:(NSNotification*)notification { - if([[[w contentView] subviews] count] != 0) { - MwLL h = [((MilskoFakePointer*)[[[w contentView] subviews] - objectAtIndex:0]) pointer]; - MwLLDispatch(h, focus_in, NULL); - } - [self->w makeKeyAndOrderFront:nil]; -} - -- (MilskoCocoaWindowDelegate*)initWithWin:(NSWindow*)win { - self->w = win; - return self; -} - -- (void)windowWillClose:(NSNotification*)notification { - if([[[w contentView] subviews] count] != 0) { - MwLL h = [((MilskoFakePointer*)[[[w contentView] subviews] - objectAtIndex:0]) pointer]; - MwLLDispatch(h, close, NULL); - } -} - -@end - -@implementation MilskoFakePointer -- (void)setPointer:(void*)pointer { - [self setFrame:*(NSRect*)&pointer]; - self->ptr = pointer; -}; -- (void*)pointer { - return self->ptr; -}; - -- (void)drawRect:(NSRect)dirtyRect { - /* explicitly do nothing */ - (void)dirtyRect; -} - -- (void)destroy { -} -@end - -@implementation MilskoCocoaWindow -- (BOOL)canBecomeKeyWindow { - return true; -} -- (BOOL)canBecomeMainWindow { - return true; -} - -@end - -@implementation MilskoCocoaPixmap -+ (MilskoCocoaPixmap*)newWithWidth:(int)width height:(int)height { - MilskoCocoaPixmap* p = [MilskoCocoaPixmap alloc]; - - p->width = width; - p->height = height; - p->image = NULL; - - p->buf = malloc(width * height * 4); - - p->rep = - [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&p->buf - pixelsWide:(int)width - pixelsHigh:(int)height - bitsPerSample:8 - samplesPerPixel:4 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSDeviceRGBColorSpace - bytesPerRow:(int)width * 4 - bitsPerPixel:32]; - assert(p->rep); - - p->image = [[NSImage alloc] initWithSize:NSMakeSize(width, height)]; - assert(p->image); - [p->image addRepresentation:p->rep]; - - return p; -} -- (void)updateWithData:(unsigned char*)_data { - memcpy(self->buf, _data, width * height * 4); - if(self->rep) { - [self->image removeRepresentation:self->rep]; - [self->rep release]; - } - self->rep = - [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&self->buf - pixelsWide:(int)width - pixelsHigh:(int)height - bitsPerSample:8 - samplesPerPixel:4 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSDeviceRGBColorSpace - bytesPerRow:(int)width * 4 - bitsPerPixel:32]; - assert(self->rep); - [self->image addRepresentation:self->rep]; -} -- (void)destroy { - free(self->buf); - [self->image removeRepresentation:self->rep]; - [self->image release]; - [self->rep release]; - self->image = NULL; - self->rep = NULL; -} -- (NSImage*)image { - return self->image; -} -@end - -@implementation MilskoCocoa -- (void)sendClipboardEvent { - /*NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; - NSArray* items = @[ - @"public.utf8-plain-text", - @"public.utf16-external-plain-text", - @"com.apple.traditional-mac-plain-text", - ]; - MwLL this = self->handle.pointer; - - if([pasteboard canReadItemWithDataConformingToTypes:items]) { - char* data = NULL; - size_t size = 0; - for(NSPasteboardItem* item in [pasteboard pasteboardItems]) { - for(NSString* it in items) { - NSString* itemData = [item - stringForType:(NSString*)it]; if(itemData != NULL) { if(strHash != 0 && - strHash != [itemData hash]) { char* text = malloc([itemData length]); - strncpy(text, [itemData UTF8String], - [itemData length]); MwLLDispatch(this, clipboard, text); printf("%s -> %p\n", - text, this); free(text); - } - strHash = [itemData hash]; - } - } - } - } - - [pool release];*/ -} - -- (void)destroy { - [self->handle release]; - [self->window release]; -} - -- (MwLL)getParent { - return self->parent; -} - -- (NSView*)getView { - return view; -} -- (NSWindow*)getWindow { - return window; -} - -- (void)nudge { - MwLL p = self->parent; - self->_eventsPending = MwTRUE; - - while(p) { - MwLLDispatch(p, draw, NULL); - [p->cocoa.real->view setNeedsDisplay:true]; - p = p->cocoa.real->parent; - } -} - -- (void)pushCursor { - [self->cursor push]; -} -- (void)popCursor { - [self->cursor pop]; -} - -- (MilskoFakePointer*)getHandle { - return handle; -} - -@end - -static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { - MwLL r; - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - MilskoCocoa* c = [MilskoCocoa alloc]; - r = malloc(sizeof(*r)); - - MwLLCreateCommon(r); - - [c retain]; - c->application = (MilskoCocoaApplication*)[MilskoCocoaApplication sharedApplication]; - [c->application retain]; - - /* - * MacOS doesn't really have a "default" window position, you're actually - * meant to center the window yourself, so if the user passes MwDEFAULT - * respond appropriately. Also for child windows just have it be 0. - */ - if(x == MwDEFAULT) { - x = r ? ([[NSScreen mainScreen] frame].size.width / 2.) - (width / 2.) : 0; - } - if(y == MwDEFAULT) { - y = r ? ([[NSScreen mainScreen] frame].size.height / 2.) - (height / 2.) - : 0; - } - c->rect = NSMakeRect(x, y, width, height); - - if(parent == NULL) { - c->window = [[NSWindow alloc] - initWithContentRect:rectFlip(c->rect) - styleMask:(NSTitledWindowMask | - NSClosableWindowMask | NSMiniaturizableWindowMask | - NSResizableWindowMask) - backing:NSBackingStoreBuffered - defer:NO]; - [c->window - setDelegate:[[MilskoCocoaWindowDelegate alloc] initWithWin:c->window]]; - [c->window retain]; - - [c->window makeKeyAndOrderFront:c->application]; - [c->window makeFirstResponder:c->view]; - - c->view = [[MilskoCocoaView alloc] initWithFrame:c->rect]; - [c->view retain]; - [c->window setContentView:c->view]; - - /* In order for our application to be front and center when launched, we need to use this function introduced in 10.5. There's no function that works on 10.4 or below as far as I know because what you're actually supposed to do is use a feature of XCode project files to modify the settings of the compiled app to set the activation policy. */ - if([c->application respondsToSelector:@selector(setActivationPolicy:)]) { - [c->application - setActivationPolicy:0 /* NSApplicationActivationPolicyRegular */]; - } - - [c->application activateIgnoringOtherApps:MwTRUE]; - [c->application setDelegate:[[MilskoCocoaApplicationDelegate alloc] - initWithAppl:c->application]]; - [c->application retain]; - - [c->view addTrackingRect:c->rect owner:c->view userData:NULL assumeInside:MwFALSE]; - c->modalSession = [c->application beginModalSessionForWindow:c->window]; - } else { - MilskoCocoa* p = parent->cocoa.real; - NSRect rect = localRectFlip(c->rect, p->view); - - c->window = p->window; - c->view = [[MilskoCocoaView alloc] initWithFrame:rect]; - [c->view setBounds:c->rect]; - [c->view retain]; - [c->view setChild]; - - [c->view addTrackingRect:c->rect owner:c->view userData:NULL assumeInside:MwFALSE]; - - [p->view addSubview:c->view]; - - c->modalSession = p->modalSession; - } - [c->window setAcceptsMouseMovedEvents:MwTRUE]; - - c->handle = [[MilskoFakePointer alloc] initWithFrame:NSMakeRect(0, 0, 1, 1)]; - [c->handle retain]; - [c->handle setPointer:r]; - [c->view addSubview:c->handle]; - - c->parent = parent; - - c->_forceRender = MwTRUE; - c->strHash = 0; - - c->cursorPixmap = NULL; - - [c->application finishLaunching]; - - c->pointerLocked = MwFALSE; - - [pool release]; - - r->cocoa.real = c; - - return r; -} - -static void MwLLDestroyImpl(MwLL handle) { - MilskoCocoa* h = handle->cocoa.real; - - [h destroy]; - - MwLLDestroyCommon(handle); - - free(handle); -} - -static void MwLLBeginDrawImpl(MwLL handle) { - (void)handle; -} - -static void MwLLEndDrawImpl(MwLL handle) { - (void)handle; - [handle->cocoa.real->view displayRect:[handle->cocoa.real->window frame]]; -} - -static void MwLLPolygonImpl(MwLL handle, MwPoint* points, int points_count, - MwLLColor color) { - draw_command poly; - poly.type = COCOA_DRAW_COMMAND_POLY; - - poly.poly.color = color->common; - poly.poly.points_count = points_count; - - poly.poly.points = malloc(sizeof(MwPoint) * points_count); - memcpy(poly.poly.points, points, sizeof(MwPoint) * points_count); - - arrpush(handle->cocoa.real->view->commands, poly); -} - -static void MwLLLineImpl(MwLL handle, MwPoint* points, MwLLColor color) { - draw_command lines; - lines.type = COCOA_DRAW_COMMAND_LINES; - - lines.lines.color = color->common; - - lines.lines.points = malloc(sizeof(MwPoint) * 2); - memcpy(lines.lines.points, points, sizeof(MwPoint) * 2); - - arrpush(handle->cocoa.real->view->commands, lines); -} - -static MwLLColor MwLLAllocColorImpl(MwLL handle, int r, int g, int b) { - MwLLColor c = malloc(sizeof(*c)); - MwLLColorUpdate(handle, c, r, g, b); - return c; -} - -static void MwLLColorUpdateImpl(MwLL handle, MwLLColor c, int r, int g, int b) { - (void)handle; - - c->common.red = r; - c->common.green = g; - c->common.blue = b; -} - -static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, - unsigned int* h) { - MilskoCocoa* self = handle->cocoa.real; - NSRect frame; - if(self->parent) { - frame = [self->view frame]; - } else { - frame = [self->window frame]; - } - - if(!self->parent) { - frame = rectFlip(frame); - } else { - frame = localRectFlip(frame, self->parent->cocoa.real->view); - } - - *x = frame.origin.x; - *y = frame.origin.y; - - *w = frame.size.width; - *h = frame.size.height; -} - -static void MwLLSetXYImpl(MwLL handle, int x, int y) { - MilskoCocoa* self = handle->cocoa.real; - NSRect frame; - if(self->parent) { - frame = [self->view frame]; - } else { - frame = [self->window frame]; - } - - frame.origin.x = x; - frame.origin.y = y; - - if(!self->parent) { - frame = rectFlip(frame); - [self->window setFrame:frame display:MwTRUE animate:MwTRUE]; - } else { - frame = localRectFlip(frame, self->parent->cocoa.real->view); - [self->view setFrame:frame]; - } - [self nudge]; -} - -static void MwLLSetWHImpl(MwLL handle, int w, int h) { - MilskoCocoa* self = handle->cocoa.real; - NSRect frame = [self->window frame]; - frame.size.width = w; - frame.size.height = h; - - self->rect = frame; - - [self->view setFrameSize:frame.size]; - if(self->parent) { - [self->view setFrame:frame]; - } else { - [self->window setFrame:frame display:YES animate:false]; - } - [self nudge]; -} - -static void MwLLFreeColorImpl(MwLLColor color) { - free(color); -} - -static int MwLLPendingImpl(MwLL handle) { - MilskoCocoa* self = handle->cocoa.real; - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - MwBool isPending = [self->application pending]; - [self->application runModalSession:self->modalSession]; - [pool release]; - return self->_forceRender || self->_eventsPending || isPending; -} - -static void MwLLNextEventImpl(MwLL handle) { - MilskoCocoa* self = handle->cocoa.real; - MwLL h = [self->handle pointer]; - if(self->_forceRender) { - MwLLDispatch(h, draw, NULL); - self->_forceRender = MwFALSE; - } - if(self->_eventsPending) { - MwLLDispatch(h, draw, NULL); - self->_eventsPending = MwFALSE; - } - [self sendClipboardEvent]; - -#ifdef __APPLE__ - if(self->pointerLocked && [self->window isMainWindow] && self->lastEvent) { - struct CGPoint pos; - pos.x = [self->window frame].origin.x + [self->window frame].size.width / 2; - pos.y = [self->window frame].origin.y + [self->window frame].size.height / 2; - - CGWarpMouseCursorPosition(pos); - } -#endif - - [self->application updateWindows]; -} - -static void MwLLSetTitleImpl(MwLL handle, const char* title) { - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - [handle->cocoa.real->window - setTitleWithRepresentedFilename:[NSString stringWithUTF8String:title]]; - [pool release]; -} - -static MwLLPixmap MwLLCreatePixmapImpl(MwLL handle, unsigned char* data, - int width, int height) { - MwLLPixmap r = malloc(sizeof(*r)); - - (void)handle; - memset(r, 0, sizeof(*r)); - - r->common.raw = malloc(4 * width * height); - memcpy(r->common.raw, data, 4 * width * height); - - r->common.width = width; - r->common.height = height; - - r->cocoa.real = [MilskoCocoaPixmap newWithWidth:width height:height]; - - MwLLPixmapUpdate(r); - return r; -} - -static void MwLLPixmapUpdateImpl(MwLLPixmap pixmap) { - MilskoCocoaPixmap* self = pixmap->cocoa.real; - memcpy(self->buf, pixmap->common.raw, pixmap->common.width * pixmap->common.height * 4); - [pixmap->cocoa.real updateWithData:pixmap->common.raw]; -} - -static void MwLLDestroyPixmapImpl(MwLLPixmap pixmap) { - free(pixmap->common.raw); - [pixmap->cocoa.real destroy]; - [pixmap->cocoa.real release]; - free(pixmap); -} - -static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { - draw_command pix; - pix.type = COCOA_DRAW_COMMAND_PIXMAP; - - pix.pixmap.rect = *rect; - - /* copy the pixmap into a new object that we'll free later */ - pix.pixmap.pixmap = MwLLCreatePixmap(handle, pixmap->common.raw, pixmap->common.width, pixmap->common.height); - - arrpush(handle->cocoa.real->view->commands, pix); - // [handle->cocoa.real->view setNeedsDisplay:MwTRUE]; -} - -static void MwLLSetIconImpl(MwLL handle, MwLLPixmap pixmap) { - [handle->cocoa.real->application setApplicationIconImage:[pixmap->cocoa.real image]]; -} - -static void MwLLForceRenderImpl(MwLL handle) { - handle->cocoa.real->_forceRender = MwTRUE; -} - -static void MwLLSetCursorImpl(MwLL handle, MwCursor* image, MwCursor* mask) { - MilskoCocoa* self = handle->cocoa.real; - int y, x, ys, xs; - unsigned char* di = malloc(image->width * image->height * 4); - memset(di, 0, image->width * image->height * 4); - - if(self->cursorPixmap) { - [self->cursorPixmap destroy]; - } - self->cursorPixmap = - [MilskoCocoaPixmap newWithWidth:image->width - height:image->height]; - - xs = -mask->x + image->x; - ys = MwCursorDataHeight + mask->y; - ys = MwCursorDataHeight + image->y - ys; - - for(y = 0; y < mask->height; y++) { - unsigned int d = mask->data[y]; - for(x = mask->width - 1; x >= 0; x--) { - int px = 0; - int idx = ((y * mask->width) + x) * 4; - - if(d & 1) { - di[idx + 3] = 255; - }; - d = d >> 1; - } - } - for(y = 0; y < image->height; y++) { - unsigned int d = image->data[y]; - for(x = image->width - 1; x >= 0; x--) { - int px = 0; - int idx = ((y * image->width) + x) * 4; - - if(d & 1) { - px = 255; - }; - - di[idx] = px; - di[idx + 1] = px; - di[idx + 2] = px; - d = d >> 1; - } - } - - [self->cursorPixmap updateWithData:di]; - - self->cursor = [[NSCursor alloc] - initWithImage:[self->cursorPixmap image] - hotSpot:NSMakePoint(image->x, image->y + image->height)]; - [self->cursor retain]; - - [self->cursor pop]; - [self->cursor push]; - - free(di); -} - -static void MwLLDetachImpl(MwLL handle, MwPoint* point) { - [handle->cocoa.real->window setParentWindow:NULL]; -} - -static void MwLLShowImpl(MwLL handle, int show) { - (void)show; -} - -static void MwLLMakePopupImpl(MwLL handle, MwLL parent) { - (void)parent; -} - -static void MwLLSetSizeHintsImpl(MwLL handle, int minx, int miny, int maxx, - int maxy) { - MilskoCocoa* self = handle->cocoa.real; - [self->window setMinSize:NSMakeSize(minx, miny)]; - [self->window setMaxSize:NSMakeSize(maxx, maxy)]; -} - -static void MwLLMakeBorderlessImpl(MwLL handle, int toggle) { - MilskoCocoa* self = handle->cocoa.real; - MwU32 mask = [self->window styleMask]; - if(toggle) { - mask ^= NSBorderlessWindowMask; - mask |= NSTitledWindowMask; - } else { - mask |= NSBorderlessWindowMask; - mask ^= NSTitledWindowMask; - } - [self->window initWithContentRect:self->rect - styleMask:mask - backing:NSBackingStoreBuffered - defer:NO]; -} - -static void MwLLFocusImpl(MwLL handle) { - [handle->cocoa.real->application activateIgnoringOtherApps:MwTRUE]; -} - -static void MwLLGrabPointerImpl(MwLL handle, int toggle) { - handle->cocoa.real->pointerLocked = toggle; -} - -static void MwLLSetClipboardImpl(MwLL handle, const char* text, int clipboard_type) { - (void)handle; - (void)text; - (void)clipboard_type; -} - -static void MwLLGetClipboardImpl(MwLL handle, int clipboard_type) { - (void)handle; - (void)clipboard_type; -} - -static void MwLLMakeToolWindowImpl(MwLL handle) { - /* If my understand of what a "tool window" usually is is correct then I - * highly doubt the Mac OS has this and if they did they probably outright - * removed it along time ago is this kind of conflicts with modern UX. So - * we'll just make it borderless idgaf */ - MwLLMakeBorderlessImpl(handle, 1); -} - -static void MwLLGetCursorCoordImpl(MwLL handle, MwPoint* point) { - NSPoint p = [NSEvent mouseLocation]; - point->x = p.x; - point->y = p.y; -} - -static void MwLLGetScreenSizeImpl(MwLL handle, MwRect* rect) { - MilskoCocoa* self = handle->cocoa.real; - NSScreen* screen = [self->window screen]; - rect->x = [screen frame].origin.x; - rect->y = [screen frame].origin.y; - rect->width = [screen frame].size.width; - rect->height = [screen frame].size.height; -} - -static void MwLLBeginStateChangeImpl(MwLL handle) { - MwLLShow(handle, 0); -} - -static void MwLLEndStateChangeImpl(MwLL handle) { - MwLLShow(handle, 1); -} - -static void MwLLSetDarkThemeImpl(MwLL handle, int toggle) { - (void)handle; - (void)toggle; -} - -static int MwLLCocoaCallInitImpl(void) { -#ifndef __APPLE__ - printf("Using GNUStep Backend\n"); -#endif - - [MilskoCocoaApplication sharedApplication]; - - return 0; -} - -#ifdef MW_VULKAN -VkMetalSurfaceCreateInfoEXT MwCocoaGetMetalSurfaceCreateInfo(MwWidget handle) { - VkMetalSurfaceCreateInfoEXT createInfo = { - .sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT, - .pNext = NULL, - .flags = 0, - .pLayer = (CAMetalLayer*)[handle->lowlevel->cocoa.real->view layer], - }; - return createInfo; -}; -#endif - -#include "call.c" -CALL(Cocoa); diff --git a/src/backend/gdi.c b/src/backend/gdi.c index 024959e9d..85f8fcbb0 100644 --- a/src/backend/gdi.c +++ b/src/backend/gdi.c @@ -8,40 +8,6 @@ typedef struct userdata { int max_set; } userdata_t; -static struct symtbl { - void* lib_dwmapi; - - HRESULT(WINAPI* DwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute); -} wsymtbl; - -#define DwmSetWindowAttribute wsymtbl.DwmSetWindowAttribute - -static void detect_darktheme(MwLL handle) { - DWORD dw; - DWORD sz = sizeof(dw); - int err, t; - HKEY hkey; - DWORD type; - - err = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", 0, KEY_QUERY_VALUE, &hkey); - if(err != ERROR_SUCCESS) return; - - err = RegQueryValueEx(hkey, "AppsUseLightTheme", NULL, &type, (PBYTE)&dw, &sz); - RegCloseKey(hkey); - if(err != ERROR_SUCCESS || type != REG_DWORD) { - return; - } - - t = dw ? 0 : 1; - - if(t && DwmSetWindowAttribute != NULL) { - LPARAM style = GetWindowLongPtr(handle->gdi.hWnd, GWL_STYLE); - if(!(style & WS_CHILD)) MwLLSetDarkTheme(handle, 1); - } - - MwLLDispatch(handle, dark_theme, &t); -} - static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { userdata_t* u = (userdata_t*)GetWindowLongPtr(hWnd, GWLP_USERDATA); @@ -79,44 +45,44 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { EndPaint(hWnd, &ps); } } else if(msg == WM_LBUTTONDOWN || msg == WM_MBUTTONDOWN || msg == WM_RBUTTONDOWN) { - MwMouse p; + MwLLMouse p; p.point.x = LOWORD(lp); p.point.y = HIWORD(lp); if(msg == WM_LBUTTONDOWN) { - p.button = MwMOUSE_LEFT; + p.button = MwLLMouseLeft; } else if(msg == WM_MBUTTONDOWN) { - p.button = MwMOUSE_MIDDLE; + p.button = MwLLMouseMiddle; } else if(msg == WM_RBUTTONDOWN) { - p.button = MwMOUSE_RIGHT; + p.button = MwLLMouseRight; } SetCapture(hWnd); SetFocus(hWnd); MwLLDispatch(u->ll, down, &p); } else if(msg == WM_LBUTTONUP || msg == WM_MBUTTONUP || msg == WM_RBUTTONUP) { - MwMouse p; + MwLLMouse p; p.point.x = LOWORD(lp); p.point.y = HIWORD(lp); if(msg == WM_LBUTTONUP) { - p.button = MwMOUSE_LEFT; + p.button = MwLLMouseLeft; } else if(msg == WM_MBUTTONUP) { - p.button = MwMOUSE_MIDDLE; + p.button = MwLLMouseMiddle; } else if(msg == WM_RBUTTONUP) { - p.button = MwMOUSE_RIGHT; + p.button = MwLLMouseRight; } SetCapture(NULL); MwLLDispatch(u->ll, up, &p); } else if(msg == WM_MOUSEWHEEL) { - int d = GET_WHEEL_DELTA_WPARAM(wp); - MwMouse p; + int d = GET_WHEEL_DELTA_WPARAM(wp); + MwLLMouse p; p.point.x = LOWORD(lp); p.point.y = HIWORD(lp); if(d > 0) { - p.button = MwMOUSE_WHEELUP; + p.button = MwLLMouseWheelUp; } else if(d < 0) { - p.button = MwMOUSE_WHEELDOWN; + p.button = MwLLMouseWheelDown; } MwLLDispatch(u->ll, down, &p); @@ -239,13 +205,6 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { } else if(msg == WM_USER) { InvalidateRect(hWnd, NULL, FALSE); UpdateWindow(hWnd); - } else if(msg == WM_WININICHANGE) { - char* s = (char*)lp; - LPARAM style = GetWindowLongPtr(hWnd, GWL_STYLE); - - if(!(style & WS_CHILD)) { - if(s != NULL && strcmp(s, "ImmersiveColorSet") == 0) detect_darktheme(u->ll); - } } else { return DefWindowProc(hWnd, msg, wp, lp); } @@ -278,8 +237,6 @@ static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { r->common.copy_buffer = 1; r->common.type = MwLLBackendGDI; - r->gdi.get_clipboard = 0; - if(parent == NULL) r->gdi.get_darktheme = 1; r->gdi.force_render = 0; r->gdi.grabbed = 0; r->gdi.hWnd = CreateWindow("milsko", "Milsko", parent == NULL ? (WS_OVERLAPPEDWINDOW) : (WS_CHILD | WS_VISIBLE), x == MwDEFAULT ? CW_USEDEFAULT : x, y == MwDEFAULT ? CW_USEDEFAULT : y, width, height, parent == NULL ? NULL : parent->gdi.hWnd, 0, wc.hInstance, NULL); @@ -426,7 +383,6 @@ static int MwLLPendingImpl(MwLL handle) { (void)handle; - if(handle->gdi.get_clipboard || handle->gdi.get_darktheme) return 1; return PeekMessage(&msg, handle->gdi.hWnd, 0, 0, PM_NOREMOVE) ? 1 : 0; } @@ -435,29 +391,6 @@ static void MwLLNextEventImpl(MwLL handle) { (void)handle; - if(handle->gdi.get_clipboard) { - HGLOBAL hg; - if(OpenClipboard(handle->gdi.hWnd) != 0 && (hg = GetClipboardData(CF_TEXT)) != NULL) { - char* txt = malloc(GlobalSize(hg)); - char* clp = GlobalLock(hg); - - strcpy(txt, clp); - - GlobalUnlock(hg); - CloseClipboard(); - - MwLLDispatch(handle, clipboard, txt); - - free(txt); - } - - handle->gdi.get_clipboard = 0; - } - if(handle->gdi.get_darktheme) { - detect_darktheme(handle); - - handle->gdi.get_darktheme = 0; - } while(PeekMessage(&msg, handle->gdi.hWnd, 0, 0, PM_NOREMOVE)) { GetMessage(&msg, handle->gdi.hWnd, 0, 0); TranslateMessage(&msg); @@ -602,8 +535,8 @@ HCURSOR MwLLGDICreateCursor(MwCursor* image, MwCursor* mask) { int y, x, ys, xs; xs = -mask->x + image->x; - ys = mask->height + mask->y; - ys = image->height + image->y - ys; + ys = MwCursorDataHeight + mask->y; + ys = MwCursorDataHeight + image->y - ys; memset(dmask, 0xff, (MwCursorDataHeight / 8) * MwCursorDataHeight); memset(dimage, 0, (MwCursorDataHeight / 8) * MwCursorDataHeight); @@ -634,7 +567,7 @@ HCURSOR MwLLGDICreateCursor(MwCursor* image, MwCursor* mask) { } } - cursor = CreateCursor(GetModuleHandle(NULL), xs - image->x, ys + (MwCursorDataHeight + image->y), MwCursorDataHeight, MwCursorDataHeight, dmask, dimage); + cursor = CreateCursor(GetModuleHandle(NULL), xs, ys, MwCursorDataHeight, MwCursorDataHeight, dmask, dimage); free(dimage); free(dmask); @@ -676,8 +609,6 @@ static void MwLLDetachImpl(MwLL handle, MwPoint* point) { rc2.bottom -= rc2.top; SetWindowPos(handle->gdi.hWnd, HWND_TOPMOST, rc.left, rc.top, rc2.right == 0 ? 1 : rc2.right, rc2.bottom == 0 ? 1 : rc2.bottom, SWP_FRAMECHANGED | SWP_NOACTIVATE); - - handle->gdi.get_darktheme = 1; } static void MwLLShowImpl(MwLL handle, int show) { @@ -748,9 +679,8 @@ static void MwLLGrabPointerImpl(MwLL handle, int toggle) { } } -static void MwLLSetClipboardImpl(MwLL handle, const char* text, int clipboard_type) { +static void MwLLSetClipboardImpl(MwLL handle, const char* text) { HGLOBAL hg; - (void)clipboard_type; if(OpenClipboard(handle->gdi.hWnd) != 0) { char* lock; @@ -767,9 +697,21 @@ static void MwLLSetClipboardImpl(MwLL handle, const char* text, int clipboard_ty } } -static void MwLLGetClipboardImpl(MwLL handle, int clipboard_type) { - (void)clipboard_type; - handle->gdi.get_clipboard = 1; /* nishi: we do this to make clipboard api work similar to other backends */ +static char* MwLLGetClipboardImpl(MwLL handle) { + HGLOBAL hg; + char* r = NULL; + if(OpenClipboard(handle->gdi.hWnd) != 0 && (hg = GetClipboardData(CF_TEXT)) != NULL) { + char* lock; + + r = malloc(GlobalSize(hg)); + + lock = GlobalLock(hg); + strcpy(r, lock); + GlobalUnlock(hg); + + CloseClipboard(); + } + return r; } static void MwLLMakeToolWindowImpl(MwLL handle) { @@ -819,19 +761,7 @@ static void MwLLEndStateChangeImpl(MwLL handle) { (void)handle; } -static void MwLLSetDarkThemeImpl(MwLL handle, int toggle) { - BOOL v = toggle ? TRUE : FALSE; - - DwmSetWindowAttribute(handle->gdi.hWnd, 20, &v, sizeof(v)); -} - static int MwLLGDICallInitImpl(void) { - memset(&wsymtbl, 0, sizeof(wsymtbl)); - - wsymtbl.lib_dwmapi = MwDynamicOpen("dwmapi.dll"); - - if(wsymtbl.lib_dwmapi != NULL) DwmSetWindowAttribute = MwDynamicSymbol(wsymtbl.lib_dwmapi, "DwmSetWindowAttribute"); - /* TODO: check properly */ return 0; } diff --git a/src/backend/wayland.c b/src/backend/wayland.c index a738aa3eb..83e7439c9 100644 --- a/src/backend/wayland.c +++ b/src/backend/wayland.c @@ -1,10 +1,13 @@ #include -#include -#include +#include +#include #include "../../external/stb_ds.h" +#include +#include + /* TODO: find out what FreeBSD and such wants us to include */ #ifdef __FreeBSD__ /* XXX: Untested (nishi) */ @@ -14,39 +17,6 @@ #include #endif -wayland_call_table_t wl_call_tbl; -MwBool MwWaylandAlwaysRender = MwFALSE; - -/* Standard procedure before most event callbacks in Wayland ("most" because the setup ones don't need this). Wait for the Mutex to be freed, if we're deadlocking for longer then a quarter of a second then do nothing with the event. */ -#define WAYLAND_EVENT_OP_START(self) \ - do { \ - struct timespec t; \ - t.tv_sec = 0; \ - t.tv_nsec = 250; \ - if(pthread_mutex_timedlock(&self->wayland.eventsMutex, &t) != 0) { \ - /*printf("deadlock at line %d\n", __LINE__);*/ \ - return; \ - }; \ - } while(0); - -/* Footer for WAYLAND_EVENT_OP_START */ -#define WAYLAND_EVENT_OP_END(self) pthread_mutex_unlock(&self->wayland.eventsMutex); - -/* Setup the framebuffer with the saved width/height */ -static void framebuffer_setup(struct _MwLLWayland* wayland); -/* Destroy the framebuffer */ -static void framebuffer_destroy(struct _MwLLWayland* handle); - -/* Setup the framebuffer with the saved width/height */ -static void backbuffer_setup(struct _MwLLWayland* wayland); -/* Destroy the backbuffer */ -static void backbuffer_destroy(struct _MwLLWayland* handle); - -static void buffer_destroy(struct _MwLLWaylandShmBuffer* buffer); - -static void region_setup(MwLL handle); -static void region_invalidate(MwLL handle); -static void update_buffer(MwLL self, struct _MwLLWaylandShmBuffer* buffer); /* Get the registered interface from r, or NULL if it doesn't currently have it. */ #define WAYLAND_GET_INTERFACE(handle, inter) shget(handle.wl_protocol_map, inter##_interface.name) @@ -54,583 +24,80 @@ static void update_buffer(MwLL self, struct _MwLLWaylandShmBuffer* buffer); static void new_protocol(void* data, struct wl_registry* registry, MwU32 name, const char* interface, MwU32 version) { - MwLL self = data; - (void)version; - (void)registry; + struct _MwLLWayland* wayland = data; - WAYLAND_EVENT_OP_START(self); - - wayland_protocol_callback_table_t* cb = shget(self->wayland.wl_protocol_setup_map, interface); - if(cb != NULL) { - shput(self->wayland.wl_protocol_map, interface, cb->setup(name, data)); - /* we don't care for adding this protocol, we just use it to know if the compositor will let us have transparent surfaces */ - } else if(strcmp(interface, "wp_alpha_modifier_v1") == 0) { - self->common.supports_transparency = MwTRUE; + wl_setup_func* func = shget(wayland->wl_protocol_setup_map, interface); + if(func != NULL) { + /* printf("registering interface %s\n", interface); */ + shput(wayland->wl_protocol_map, interface, func(name, data)); } else { - // printf("unknown interface %s\n", interface); + /* printf("unknown interface %s\n", interface); */ } - - WAYLAND_EVENT_OP_END(self); }; /* `wl_registry.global_remove` callback */ static void protocol_removed(void* data, struct wl_registry* registry, MwU32 name) { - (void)data; - (void)registry; - (void)name; - printf("%d destroyed\n", name); + }; -/* Flush Wayland events */ -static void wl_flush(MwLL handle) { - struct pollfd pfd; - int rc; - - pfd.fd = wl_display_get_fd(handle->wayland.display); - pfd.events = POLLIN; - while(MwTRUE) { - rc = wl_display_flush(handle->wayland.display); - if(errno != EAGAIN || rc != -1) { - break; - } - - if(poll(&pfd, 1, -1) == -1) { - break; - } - } -} - -/* Recursively dispatch a resize event to a widget and its children */ -static void recursive_dispatch_resize(MwLL handle) { - MwWidget h = (MwWidget)handle->common.user; - if(h) { - int i; - for(i = 0; i < arrlen(h->children); i++) { - MwDispatch(h->children[i], resize); - if(arrlen(h->children[i]->children) > 0) { - recursive_dispatch_resize(h->children[i]->lowlevel); - } - } - } -}; - -/* Recursively dispatch a move event to a widget and its children */ -static void recursive_dispatch_move(MwLL handle, MwMouse* p) { - MwWidget h = (MwWidget)handle->common.user; - if(h) { - int i; - for(i = 0; i < arrlen(h->children); i++) { - MwLLDispatch(h->children[i]->lowlevel, move, p); - if(arrlen(h->children[i]->children) > 0) { - recursive_dispatch_move(h->children[i]->lowlevel, p); - } - } - } -}; - -static void wl_offer(void* data, - struct wl_data_offer* wl_data_offer, - const char* mime_type) { - wl_clipboard_device_context_t* self = data; - wl_data_offer_accept(wl_data_offer, self->ll->wayland.clipboard_serial, mime_type); -}; - -struct wl_data_offer_listener offer_listener = { - .offer = wl_offer, -}; - -static void wl_data_device_data_offer(void* data, - struct wl_data_device* wl_data_device, - struct wl_data_offer* offer) { - wl_clipboard_device_context_t* self = data; - (void)wl_data_device; - - wl_data_offer_add_listener(offer, &offer_listener, data); - - self->offer.wl = offer; -}; - -static void wl_data_device_enter(void* data, - struct wl_data_device* wl_data_device, - uint32_t serial, - struct wl_surface* surface, - wl_fixed_t x, - wl_fixed_t y, - struct wl_data_offer* id) { - MwLL self = data; - (void)wl_data_device; - (void)surface; - (void)x; - (void)y; - (void)id; - - WAYLAND_EVENT_OP_START(self); - - self->wayland.clipboard_serial = serial; - - WAYLAND_EVENT_OP_END(self); -}; -static void wl_data_device_leave(void* data, - struct wl_data_device* wl_data_device) { - MwLL self = data; - - WAYLAND_EVENT_OP_START(self); - wl_data_device_destroy(wl_data_device); - WAYLAND_EVENT_OP_END(self); -}; -static void wl_data_device_motion(void* data, - struct wl_data_device* wl_data_device, - uint32_t time, - wl_fixed_t x, - wl_fixed_t y) { - (void)data; - (void)wl_data_device; - (void)time; - (void)x; - (void)y; -}; -static void wl_data_device_drop(void* data, - struct wl_data_device* wl_data_device) { - (void)data; - (void)wl_data_device; -}; - -static void wl_data_device_selection(void* data, - struct wl_data_device* wl_data_device, - struct wl_data_offer* id) { - (void)data; - (void)wl_data_device; - (void)id; -}; - -struct wl_data_device_listener wl_data_device_listener = { - .data_offer = wl_data_device_data_offer, - .enter = wl_data_device_enter, - .leave = wl_data_device_leave, - .motion = wl_data_device_motion, - .drop = wl_data_device_drop, - .selection = wl_data_device_selection, -}; - -static void zwp_primary_selection_device_v1_data_offer(void* data, - struct zwp_primary_selection_device_v1* zwp_primary_selection_device_v1, - struct zwp_primary_selection_offer_v1* offer) { - wl_clipboard_device_context_t* self = data; - (void)zwp_primary_selection_device_v1; - - self->offer.zwp = offer; -}; - -static void zwp_primary_selection_device_v1_selection(void* data, - struct zwp_primary_selection_device_v1* zwp_primary_selection_device_v1, - struct zwp_primary_selection_offer_v1* id) { - (void)data; - (void)zwp_primary_selection_device_v1; - (void)id; -}; - -struct zwp_primary_selection_device_v1_listener zwp_primary_selection_device_v1_listener = { - .data_offer = zwp_primary_selection_device_v1_data_offer, - .selection = zwp_primary_selection_device_v1_selection, -}; - -static void wl_clipboard_read(wl_clipboard_device_context_t* ctx, int clipboard_type) { - int fds[2]; - fd_set set; - char* buf = NULL; - struct timeval timeout; - int rc = 0; - - if(pipe(fds) != 0) { - return; - } - - FD_ZERO(&set); - FD_SET(fds[0], &set); - timeout.tv_sec = 0; - timeout.tv_usec = 100; - - if(clipboard_type == MwCLIPBOARD_PRIMARY) { - zwp_primary_selection_offer_v1_receive(ctx->offer.zwp, "text/plain", fds[1]); - } else if(ctx->offer.wl) { - wl_data_offer_receive(ctx->offer.wl, "text/plain", fds[1]); - } - close(fds[1]); - - wl_flush(ctx->ll); - wl_display_roundtrip(ctx->ll->wayland.display); - - while(MwTRUE) { - rc = select(fds[0] + 1, &set, NULL, NULL, &timeout); - if(rc <= 0) { - break; - } else { - char b; - ssize_t n = read(fds[0], &b, sizeof(b)); - if(n <= 0) { - break; - } - arrpush(buf, b); - } - } - arrpush(buf, 0); - close(fds[0]); - - MwLLDispatch(ctx->ll, clipboard, buf); - arrfree(buf); - - ctx->ll->wayland.events_pending = 1; -} - -static void wl_data_source_listener_target(void* data, - struct wl_data_source* wl_data_source, - const char* mime_type) { - (void)data; - (void)wl_data_source; - (void)mime_type; -}; -static void wl_data_source_listener_send(void* data, - struct wl_data_source* wl_data_source, - const char* mime_type, - int32_t fd) { - MwLL self = data; - (void)wl_data_source; - (void)mime_type; - - WAYLAND_EVENT_OP_START(self); - if(self->wayland.clipboard_buffer != NULL) { - write(fd, self->wayland.clipboard_buffer, strlen(self->wayland.clipboard_buffer)); - close(fd); - } - WAYLAND_EVENT_OP_END(self); -}; -static void wl_data_source_listener_cancelled(void* data, - struct wl_data_source* wl_data_source); - -struct wl_data_source_listener wl_data_source_listener = { - .target = wl_data_source_listener_target, - .send = wl_data_source_listener_send, - .cancelled = wl_data_source_listener_cancelled, -}; - -static void wl_data_source_listener_cancelled(void* data, - struct wl_data_source* wl_data_source) { - MwLL self = data; - - WAYLAND_EVENT_OP_START(self); - - wl_data_source_destroy(wl_data_source); - - self->wayland.clipboard_source.wl = wl_data_device_manager_create_data_source(self->wayland.clipboard_manager.wl); - - wl_data_source_offer(self->wayland.clipboard_source.wl, "text/plain"); - wl_data_source_offer(self->wayland.clipboard_source.wl, "text/plain;charset=utf-8"); - wl_data_source_offer(self->wayland.clipboard_source.wl, "TEXT"); - wl_data_source_offer(self->wayland.clipboard_source.wl, "STRING"); - wl_data_source_offer(self->wayland.clipboard_source.wl, "UTF8_STRING"); - - wl_data_source_add_listener(self->wayland.clipboard_source.wl, &wl_data_source_listener, self); - - WAYLAND_EVENT_OP_END(self); -}; - -static void zwp_primary_selection_source_v1_send(void* data, - struct zwp_primary_selection_source_v1* wl_data_source, - const char* mime_type, - int32_t fd) { - MwLL self = data; - (void)wl_data_source; - (void)mime_type; - - WAYLAND_EVENT_OP_START(self); - - if(self->wayland.clipboard_buffer != NULL) { - write(fd, self->wayland.clipboard_buffer, strlen(self->wayland.clipboard_buffer)); - close(fd); - } - - WAYLAND_EVENT_OP_END(self); -}; -static void zwp_primary_selection_source_v1_cancelled(void* data, - struct zwp_primary_selection_source_v1* wl_data_source) { - MwLL self = data; - (void)wl_data_source; - - WAYLAND_EVENT_OP_START(self); - - zwp_primary_selection_source_v1_destroy(self->wayland.clipboard_source.zwp); - - self->wayland.clipboard_source.zwp = zwp_primary_selection_device_manager_v1_create_source(self->wayland.clipboard_manager.zwp); - - zwp_primary_selection_source_v1_offer(self->wayland.clipboard_source.zwp, "text/plain"); - zwp_primary_selection_source_v1_offer(self->wayland.clipboard_source.zwp, "text/plain;charset=utf-8"); - zwp_primary_selection_source_v1_offer(self->wayland.clipboard_source.zwp, "TEXT"); - zwp_primary_selection_source_v1_offer(self->wayland.clipboard_source.zwp, "STRING"); - zwp_primary_selection_source_v1_offer(self->wayland.clipboard_source.zwp, "UTF8_STRING"); - - WAYLAND_EVENT_OP_END(self); -}; - -struct zwp_primary_selection_source_v1_listener zwp_primary_selection_source_v1_listener = { - .send = zwp_primary_selection_source_v1_send, - .cancelled = zwp_primary_selection_source_v1_cancelled, -}; - -/* wl_data_device_manager setup function */ -static wayland_protocol_t* wl_data_device_manager_setup(MwU32 name, struct _MwLLWayland* wayland) { - wayland->clipboard_manager.wl = wl_registry_bind(wayland->registry, name, &wl_data_device_manager_interface, 2); - - wayland->clipboard_source.wl = wl_data_device_manager_create_data_source(wayland->clipboard_manager.wl); - - wl_data_source_offer(wayland->clipboard_source.wl, "text/plain"); - wl_data_source_offer(wayland->clipboard_source.wl, "text/plain;charset=utf-8"); - wl_data_source_offer(wayland->clipboard_source.wl, "TEXT"); - wl_data_source_offer(wayland->clipboard_source.wl, "STRING"); - wl_data_source_offer(wayland->clipboard_source.wl, "UTF8_STRING"); - - wl_data_source_add_listener(wayland->clipboard_source.wl, &wl_data_source_listener, wayland); - - return NULL; -} - -static void wl_data_device_manager_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)data; - if(wayland->clipboard_manager.wl != NULL) { - wl_data_device_manager_destroy(wayland->clipboard_manager.wl); - wl_data_source_destroy(wayland->clipboard_source.wl); - wayland->clipboard_manager.wl = NULL; - } -} - -/* zwp_primary_selection_device_manager_v1 setup function */ -static wayland_protocol_t* zwp_primary_selection_device_manager_v1_setup(MwU32 name, struct _MwLLWayland* wayland) { - wayland->clipboard_manager.zwp = wl_registry_bind(wayland->registry, name, &zwp_primary_selection_device_manager_v1_interface, 1); - - wayland->clipboard_source.zwp = zwp_primary_selection_device_manager_v1_create_source(wayland->clipboard_manager.zwp); - - zwp_primary_selection_source_v1_offer(wayland->clipboard_source.zwp, "text/plain"); - zwp_primary_selection_source_v1_offer(wayland->clipboard_source.zwp, "text/plain;charset=utf-8"); - zwp_primary_selection_source_v1_offer(wayland->clipboard_source.zwp, "TEXT"); - zwp_primary_selection_source_v1_offer(wayland->clipboard_source.zwp, "STRING"); - zwp_primary_selection_source_v1_offer(wayland->clipboard_source.zwp, "UTF8_STRING"); - - zwp_primary_selection_source_v1_add_listener(wayland->clipboard_source.zwp, &zwp_primary_selection_source_v1_listener, wayland); - - wayland->supports_zwp = MwTRUE; - - return NULL; -} - -static void zwp_primary_selection_device_manager_v1_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - (void)data; -} - -/* zwp_primary_selection_device_manager_v1 setup function */ -static wayland_protocol_t* zwp_pointer_constraints_v1_setup(MwU32 name, struct _MwLLWayland* wayland) { - wayland->pointer_constraints = wl_registry_bind(wayland->registry, name, &zwp_pointer_constraints_v1_interface, 1); - return NULL; -} - -static void zwp_pointer_constraints_v1_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - (void)data; -} - -static struct wl_surface* curSurface; - /* `wl_pointer.enter` callback */ static void pointer_enter(void* data, struct wl_pointer* wl_pointer, MwU32 serial, struct wl_surface* surface, wl_fixed_t surface_x, - wl_fixed_t surface_y) { - MwLL self = data; - (void)surface_x; - (void)surface_y; - - WAYLAND_EVENT_OP_START(self); - curSurface = surface; - - self->wayland.pointer_serial = serial; - - wl_pointer_set_cursor(wl_pointer, serial, self->wayland.cursor.surface, 0, 0); - - WAYLAND_EVENT_OP_END(self); -}; + wl_fixed_t surface_y) {}; /* `wl_pointer.leave` callback */ static void pointer_leave(void* data, struct wl_pointer* wl_pointer, MwU32 serial, - struct wl_surface* surface) { - MwLL self = data; - (void)wl_pointer; - (void)serial; - (void)surface; - WAYLAND_EVENT_OP_START(self); - curSurface = NULL; - WAYLAND_EVENT_OP_END(self); -}; - -static void xdg_borderless_step(MwLL self, MwMouse p, MwU32 serial) { - if(self->wayland.type == MWLL_WAYLAND_TOPLEVEL && self->wayland.backbuffer.surface == curSurface) { - if(p.point.y >= (self->wayland.wh + CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM) - 5) { - if(p.point.x >= (self->wayland.ww + CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT) - 5) { - xdg_toplevel_resize(self->wayland.toplevel->xdg_top_level, self->wayland.pointer_seat, serial, XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_RIGHT); - } else { - xdg_toplevel_resize(self->wayland.toplevel->xdg_top_level, self->wayland.pointer_seat, serial, XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM); - } - } else if(p.point.y <= 5) { - if(p.point.x >= (self->wayland.ww + CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT) - 5) { - xdg_toplevel_resize(self->wayland.toplevel->xdg_top_level, self->wayland.pointer_seat, serial, XDG_TOPLEVEL_RESIZE_EDGE_TOP_RIGHT); - } else { - xdg_toplevel_resize(self->wayland.toplevel->xdg_top_level, self->wayland.pointer_seat, serial, XDG_TOPLEVEL_RESIZE_EDGE_TOP); - } - } else if(p.point.x >= (self->wayland.ww + CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT) - 5) { - xdg_toplevel_resize(self->wayland.toplevel->xdg_top_level, self->wayland.pointer_seat, serial, XDG_TOPLEVEL_RESIZE_EDGE_RIGHT); - } else if(p.point.x <= 5) { - xdg_toplevel_resize(self->wayland.toplevel->xdg_top_level, self->wayland.pointer_seat, serial, XDG_TOPLEVEL_RESIZE_EDGE_LEFT); - } else if(p.point.y <= CSD_BORDER_FRAME_TOP) { - xdg_toplevel_move(self->wayland.toplevel->xdg_top_level, self->wayland.pointer_seat, serial); - } - }; -} - -static MwLL currentlyHeldWidget = NULL; - -static void relative_pointer_motion(void* data, - struct zwp_relative_pointer_v1* pointer, - uint32_t timeHi, - uint32_t timeLo, - wl_fixed_t dx, - wl_fixed_t dy, - wl_fixed_t dxUnaccel, - wl_fixed_t dyUnaccel) { - MwLL self = data; - MwMouse p; - - (void)pointer; - (void)timeHi; - (void)timeLo; - (void)dx; - (void)dy; - - WAYLAND_EVENT_OP_START(self); - - p.point.x = wl_fixed_to_int(dxUnaccel); - p.point.y = wl_fixed_to_int(dyUnaccel); - - recursive_dispatch_move(self, &p); - if(self->wayland.locked_pointer) zwp_locked_pointer_v1_set_cursor_position_hint(self->wayland.locked_pointer, 0, CSD_BORDER_FRAME_TOP); - - WAYLAND_EVENT_OP_END(self); -} - -struct zwp_relative_pointer_v1_listener relative_pointer_listener = - { - relative_pointer_motion}; - -/* zwp_primary_selection_device_manager_v1 setup function */ -static wayland_protocol_t* zwp_relative_pointer_manager_v1_setup(MwU32 name, struct _MwLLWayland* wayland) { - wayland->relative_pointer_manager = wl_registry_bind(wayland->registry, name, &zwp_relative_pointer_manager_v1_interface, 1); - return NULL; -} - -static void zwp_relative_pointer_manager_v1_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - (void)data; -} + struct wl_surface* surface) {}; /* `wl_pointer.motion` callback */ static void pointer_motion(void* data, struct wl_pointer* wl_pointer, MwU32 time, wl_fixed_t surface_x, wl_fixed_t surface_y) { - MwLL self = data; - MwLL topmost_parent = self; - MwMouse p; - (void)time; - (void)wl_pointer; + MwLL self = data; + MwLLMouse p; - WAYLAND_EVENT_OP_START(self); - while(topmost_parent->wayland.parent) topmost_parent = topmost_parent->wayland.parent; - - self->wayland.cur_mouse_pos.x = wl_fixed_to_int(surface_x); - self->wayland.cur_mouse_pos.y = wl_fixed_to_int(surface_y); + self->wayland.cur_mouse_pos.x = wl_fixed_to_double(surface_x); + self->wayland.cur_mouse_pos.y = wl_fixed_to_double(surface_y); p.point = self->wayland.cur_mouse_pos; MwLLDispatch(self, move, &p); - if(currentlyHeldWidget) { - MwLLDispatch(currentlyHeldWidget, down, &p); - } - - WAYLAND_EVENT_OP_END(self); + /*timed_redraw(self, time, 50, &self->wayland.cooldown_timer);*/ }; /* `wl_pointer.button` callback */ static void pointer_button(void* data, struct wl_pointer* wl_pointer, MwU32 serial, MwU32 time, MwU32 button, MwU32 state) { - MwLL self = data; - MwMouse p; - MwBool inArea = MwFALSE; - - (void)wl_pointer; - (void)serial; - (void)time; - - WAYLAND_EVENT_OP_START(self); - + MwLL self = data; + MwLLMouse p; p.point = self->wayland.cur_mouse_pos; - - if(self->wayland.framebuffer.surface) { - inArea |= self->wayland.framebuffer.surface == curSurface; - } - if(self->wayland.backbuffer.surface) { - inArea |= self->wayland.backbuffer.surface == curSurface; - } - if(inArea) { + if(p.point.x > self->wayland.x && p.point.x < self->wayland.x + self->wayland.ww && p.point.y > self->wayland.y && p.point.y < self->wayland.y + self->wayland.wh) { switch(button) { case BTN_LEFT: - p.button = MwMOUSE_LEFT; + p.button = MwLLMouseLeft; break; case BTN_MIDDLE: - p.button = MwMOUSE_MIDDLE; + p.button = MwLLMouseMiddle; break; case BTN_RIGHT: - p.button = MwMOUSE_RIGHT; + p.button = MwLLMouseRight; break; } - self->wayland.held_down = state == WL_POINTER_BUTTON_STATE_PRESSED; - switch(state) { case WL_POINTER_BUTTON_STATE_PRESSED: MwLLDispatch(self, down, &p); - currentlyHeldWidget = self; - break; case WL_POINTER_BUTTON_STATE_RELEASED: - if(currentlyHeldWidget != NULL) { - MwLLDispatch(currentlyHeldWidget, up, &p); - currentlyHeldWidget = NULL; - } else { - MwLLDispatch(self, up, &p); - } + MwLLDispatch(self, up, &p); break; } } - if(!self->wayland.has_decorations) { - xdg_borderless_step(self, p, serial); - } - - WAYLAND_EVENT_OP_END(self); + MwLLDispatch(self, draw, NULL); }; /* `wl_pointer.axis` callback */ static void pointer_axis(void* data, struct wl_pointer* wl_pointer, MwU32 time, - MwU32 axis, wl_fixed_t value) { - (void)data; - (void)wl_pointer; - (void)time; - (void)axis; - (void)value; -}; + MwU32 axis, wl_fixed_t value) {}; struct wl_pointer_listener pointer_listener = { .enter = pointer_enter, @@ -640,6 +107,28 @@ struct wl_pointer_listener pointer_listener = { .axis = pointer_axis, }; +/* Recursively dispatch the key event to `handle` and its children */ +static void recursive_key(MwLL handle, void* ud) { + int i; + if(handle->wayland.sublevels != NULL) { + for(i = 0; i < arrlen(handle->wayland.sublevels); i++) { + MwLLDispatch(handle->wayland.sublevels[i], key, ud); + recursive_key(handle->wayland.sublevels[i], ud); + } + } +} + +/* Recursively dispatch the key_released event to `handle` and its children */ +static void recursive_key_released(MwLL handle, void* ud) { + int i; + if(handle->wayland.sublevels != NULL) { + for(i = 0; i < arrlen(handle->wayland.sublevels); i++) { + MwLLDispatch(handle->wayland.sublevels[i], key_released, ud); + recursive_key(handle->wayland.sublevels[i], ud); + } + } +} + /* `wl_keyboard.keymap` callback */ static void keyboard_keymap(void* data, struct wl_keyboard* wl_keyboard, @@ -647,32 +136,25 @@ static void keyboard_keymap(void* data, int32_t fd, MwU32 size) { MwLL self = data; - (void)wl_keyboard; - - if(!self->wayland.parent) { - char* map_shm; - struct xkb_keymap* xkb_keymap; - struct xkb_state* xkb_state; - xkb_state = NULL; - + if(self->wayland.type == MWLL_WAYLAND_TOPLEVEL) { + struct _MwLLWaylandTopLevel* wayland = self->wayland.toplevel; assert(format == WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1); - map_shm = (char*)mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); + char* map_shm = (char*)mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); assert(map_shm != MAP_FAILED); - xkb_keymap = xkb_keymap_new_from_string( - self->wayland.xkb_context, map_shm, XKB_KEYMAP_FORMAT_TEXT_V1, + struct xkb_keymap* xkb_keymap = xkb_keymap_new_from_string( + wayland->xkb_context, map_shm, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); munmap(map_shm, size); close(fd); - xkb_state = xkb_state_new(xkb_keymap); + struct xkb_state* xkb_state = xkb_state_new(xkb_keymap); + xkb_keymap_unref(wayland->xkb_keymap); + xkb_state_unref(wayland->xkb_state); - self->wayland.xkb_keymap = xkb_keymap; - self->wayland.xkb_state = xkb_state; - } else { - self->wayland.xkb_keymap = self->wayland.parent->wayland.xkb_keymap; - self->wayland.xkb_state = self->wayland.parent->wayland.xkb_state; + wayland->xkb_keymap = xkb_keymap; + wayland->xkb_state = xkb_state; } }; @@ -683,17 +165,7 @@ static void keyboard_enter(void* data, struct wl_surface* surface, struct wl_array* keys) { MwLL self = data; - (void)wl_keyboard; - (void)surface; - (void)keys; - - WAYLAND_EVENT_OP_START(self); - - self->wayland.keyboard_serial = serial; - MwLLDispatch(self, focus_in, NULL); - - WAYLAND_EVENT_OP_END(self); }; /* `wl_keyboard.leave` callback */ @@ -702,15 +174,7 @@ static void keyboard_leave(void* data, MwU32 serial, struct wl_surface* surface) { MwLL self = data; - (void)wl_keyboard; - (void)serial; - (void)surface; - - WAYLAND_EVENT_OP_START(self); - MwLLDispatch(self, focus_out, NULL); - - WAYLAND_EVENT_OP_END(self); }; /* `wl_keyboard.key` callback */ @@ -720,53 +184,31 @@ static void keyboard_key(void* data, MwU32 time, MwU32 key, MwU32 state) { - MwLL self = data; - MwBool inArea = 0; + MwLL self = data; + if(self->wayland.type == MWLL_WAYLAND_TOPLEVEL) { + struct _MwLLWaylandTopLevel* wayland = self->wayland.toplevel; + xkb_layout_index_t layout; + xkb_level_index_t level; + const xkb_keysym_t* syms_out; + MwU32 keycode = key + 8; + MwU64 syms_num; + int i; - (void)wl_keyboard; - (void)serial; - (void)time; - - WAYLAND_EVENT_OP_START(self); - - if(self->wayland.framebuffer.surface) { - inArea |= self->wayland.framebuffer.surface == curSurface; - } - - if(self->wayland.backbuffer.surface) { - inArea |= self->wayland.backbuffer.surface == curSurface; - } - if(inArea) { - xkb_layout_index_t layout; - MwU32 levels; - xkb_level_index_t level = 0; - const xkb_keysym_t* syms_out; - MwU32 keycode = key + 8; - MwU64 syms_num; - int i; - - if(!self->wayland.xkb_keymap) { + if(!wayland->xkb_keymap) { return; } - layout = xkb_state_key_get_layout(self->wayland.xkb_state, keycode); - levels = - xkb_keymap_num_levels_for_key(self->wayland.xkb_keymap, keycode, layout); - - if((((self->wayland.mod_state & 1) == 1) || ((self->wayland.mod_state & 2) == 2)) && levels >= 2) { - level = 1; - } else if(levels >= 1) { - level = 0; - } - syms_num = xkb_keymap_key_get_syms_by_level(self->wayland.xkb_keymap, keycode, layout, level, &syms_out); + layout = xkb_state_key_get_layout(wayland->xkb_state, keycode); + level = + xkb_keymap_num_levels_for_key(wayland->xkb_keymap, keycode, layout) - 1; + syms_num = xkb_keymap_key_get_syms_by_level(wayland->xkb_keymap, keycode, layout, level, &syms_out); if(syms_out == NULL) { return; } for(i = 0; i < syms_num; i++) { int sym = syms_out[i]; - int key = -1; - + int key; switch(sym) { case XKB_KEY_BackSpace: key = MwLLKeyBackSpace; @@ -804,33 +246,17 @@ static void keyboard_key(void* data, key = MwLLKeyControl; break; default: - if(MwStringIsKeyUTF8(sym)) { - key = sym; - } + key = sym; } - - if((self->wayland.mod_state & 4) == 4) { - key |= MwLLControlMask; - } - if((self->wayland.mod_state & 8) == 8) { - key |= MwLLAltMask; - } - - if(key != -1) { - if(state == WL_KEYBOARD_KEY_STATE_PRESSED) { - MwLLDispatch(self, key, &key); - } else { - MwLLDispatch(self, key_released, &key); - } + if(state == WL_KEYBOARD_KEY_STATE_PRESSED) { + MwLLDispatch(self, key, &key); + recursive_key(self, &key); + } else { + MwLLDispatch(self, key_released, &key); + recursive_key_released(self, &key); } } } - - if(!MwWaylandAlwaysRender) { - MwLLDispatch(self, draw, NULL); - } - - WAYLAND_EVENT_OP_END(self); }; /* `wl_keyboard.modifiers` callback */ @@ -840,21 +266,7 @@ static void keyboard_modifiers(void* data, MwU32 mods_depressed, MwU32 mods_latched, MwU32 mods_locked, - MwU32 group) { - MwLL self = data; - (void)wl_keyboard; - (void)serial; - (void)group; - (void)mods_latched; - - WAYLAND_EVENT_OP_START(self); - - self->wayland.mod_state = 0; - self->wayland.mod_state |= mods_depressed; - self->wayland.mod_state |= mods_locked; - - WAYLAND_EVENT_OP_END(self); -}; + MwU32 group) {}; struct wl_keyboard_listener keyboard_listener = { .keymap = keyboard_keymap, @@ -866,100 +278,26 @@ struct wl_keyboard_listener keyboard_listener = { /* `wl_seat.name` callback */ static void -wl_seat_name(void* data, struct wl_seat* wl_seat, const char* name) { - (void)data; - (void)wl_seat; - (void)name; -}; +wl_seat_name(void* data, struct wl_seat* wl_seat, const char* name) {}; /* `wl_seat.capabilities` callback */ static void wl_seat_capabilities(void* data, struct wl_seat* wl_seat, MwU32 capabilities) { - MwLL self = data; - wl_clipboard_device_context_t* device_ctx_zwp = NULL; - wl_clipboard_device_context_t* device_ctx_wl = malloc(sizeof(wl_clipboard_device_context_t)); - - WAYLAND_EVENT_OP_START(self); - + MwLL self = data; if(capabilities & WL_SEAT_CAPABILITY_KEYBOARD) { - self->wayland.keyboard = wl_seat_get_keyboard(wl_seat); - wl_keyboard_add_listener(self->wayland.keyboard, &keyboard_listener, data); + struct wl_keyboard* keyboard = wl_seat_get_keyboard(wl_seat); + wl_keyboard_add_listener(keyboard, &keyboard_listener, data); } if(capabilities & WL_SEAT_CAPABILITY_POINTER) { - self->wayland.pointer_seat = wl_seat; - self->wayland.pointer = wl_seat_get_pointer(wl_seat); - wl_pointer_add_listener(self->wayland.pointer, &pointer_listener, data); + struct wl_pointer* pointer = wl_seat_get_pointer(wl_seat); + wl_pointer_add_listener(pointer, &pointer_listener, data); } - - if(self->wayland.clipboard_manager.wl != NULL) { - if(self->wayland.supports_zwp) { - device_ctx_zwp = malloc(sizeof(wl_clipboard_device_context_t)); - device_ctx_zwp->device.zwp = zwp_primary_selection_device_manager_v1_get_device(self->wayland.clipboard_manager.zwp, wl_seat); - device_ctx_zwp->ll = self; - device_ctx_zwp->seat = wl_seat; - device_ctx_zwp->capabilities = capabilities; - } - device_ctx_wl->device.wl = wl_data_device_manager_get_data_device(self->wayland.clipboard_manager.wl, wl_seat); - device_ctx_wl->ll = self; - device_ctx_wl->seat = wl_seat; - device_ctx_wl->capabilities = capabilities; - - if(self->wayland.supports_zwp) { - zwp_primary_selection_device_v1_add_listener(device_ctx_zwp->device.zwp, &zwp_primary_selection_device_v1_listener, device_ctx_zwp); - arrpush(self->wayland.clipboard_devices_zwp, device_ctx_zwp); - } - wl_data_device_add_listener(device_ctx_wl->device.wl, &wl_data_device_listener, device_ctx_wl); - arrpush(self->wayland.clipboard_devices_wl, device_ctx_wl); - } - - WAYLAND_EVENT_OP_END(self); -}; - -static void output_geometry(void* data, - struct wl_output* wl_output, - int32_t x, - int32_t y, - int32_t physical_width, - int32_t physical_height, - int32_t subpixel, - const char* make, - const char* model, - int32_t transform) { - (void)data; - (void)wl_output; - (void)x; - (void)y; - (void)physical_width; - (void)physical_height; - (void)subpixel; - (void)make; - (void)model; - (void)transform; -}; -static void output_mode(void* data, - struct wl_output* wl_output, - uint32_t flags, - int32_t width, - int32_t height, - int32_t refresh) { - MwLL self = data; - (void)wl_output; - (void)flags; - (void)refresh; - self->wayland.mw = width; - self->wayland.mh = height; -}; - -struct wl_output_listener output_listener = { - .geometry = output_geometry, - .mode = output_mode, }; /* `xdg_wm_base.ping` callback */ void xdg_wm_base_ping(void* data, struct xdg_wm_base* xdg_wm_base, MwU32 serial) { - (void)data; xdg_wm_base_pong(xdg_wm_base, serial); }; @@ -971,30 +309,12 @@ static wayland_protocol_t* wl_seat_setup(MwU32 name, MwLL ll) { ((struct wl_seat_listener*)proto->listener)->name = wl_seat_name; ((struct wl_seat_listener*)proto->listener)->capabilities = wl_seat_capabilities; - wl_seat_add_listener(wl_registry_bind(ll->wayland.registry, name, &wl_seat_interface, 1), proto->listener, ll); + proto->context = wl_registry_bind(ll->wayland.registry, name, &wl_seat_interface, 1); + wl_seat_add_listener(proto->context, proto->listener, ll); return proto; } -static void wl_seat_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - free(data->listener); - free(data); -} - -/* wl_output setup function */ -static wayland_protocol_t* wl_output_setup(MwU32 name, MwLL ll) { - ll->wayland.output = wl_registry_bind(ll->wayland.registry, name, &wl_output_interface, 1); - wl_output_add_listener(ll->wayland.output, &output_listener, ll); - - return NULL; -} - -static void wl_output_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - (void)data; -} - /* wl_compositor setup function */ static wayland_protocol_t* wl_compositor_setup(MwU32 name, struct _MwLLWayland* wayland) { wayland->compositor = wl_registry_bind(wayland->registry, name, &wl_compositor_interface, 1); @@ -1002,27 +322,13 @@ static wayland_protocol_t* wl_compositor_setup(MwU32 name, struct _MwLLWayland* return NULL; } -static void wl_compositor_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - (void)data; -} - /* wl_subcompositor setup function */ static wayland_protocol_t* wl_subcompositor_setup(MwU32 name, struct _MwLLWayland* wayland) { - if(wayland->type == MWLL_WAYLAND_TOPLEVEL) { - wayland->toplevel->scompositor = wl_registry_bind(wayland->registry, name, &wl_subcompositor_interface, 1); - } else { - wayland->sublevel->subcompositor = wl_registry_bind(wayland->registry, name, &wl_subcompositor_interface, 1); - } + wayland->sublevel->subcompositor = wl_registry_bind(wayland->registry, name, &wl_subcompositor_interface, 1); return NULL; } -static void wl_subcompositor_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)data; - wl_subcompositor_destroy(wayland->sublevel->subcompositor); -} - /* xdg_wm_base setup function */ static wayland_protocol_t* xdg_wm_base_setup(MwU32 name, struct _MwLLWayland* wayland) { wayland_protocol_t* proto = malloc(sizeof(wayland_protocol_t)); @@ -1036,24 +342,16 @@ static wayland_protocol_t* xdg_wm_base_setup(MwU32 name, struct _MwLLWayland* wa return proto; } -static void xdg_wm_base_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - free(data->listener); -} - -/* xdg_wm_base setup function */ -static wayland_protocol_t* wp_viewporter_setup(MwU32 name, struct _MwLLWayland* wayland) { +/* wp_cursor_shape_manager setup function */ +static wayland_protocol_t* wp_cursor_shape_manager_v1_setup(MwU32 name, struct _MwLLWayland* wayland) { wayland_protocol_t* proto = malloc(sizeof(wayland_protocol_t)); - proto->context = wl_registry_bind(wayland->registry, name, &wp_viewporter_interface, 1); + proto->listener = NULL; + + proto->context = wl_registry_bind(wayland->registry, name, &wp_cursor_shape_manager_v1_interface, 1); return proto; } -static void wp_viewporter_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - (void)data; -} - /* the two decoration manager constructs */ typedef struct zxdg_decoration_manager_v1_context { struct zxdg_decoration_manager_v1* manager; @@ -1074,26 +372,146 @@ static wayland_protocol_t* zxdg_decoration_manager_v1_setup(MwU32 name, struct _ return proto; } -static void zxdg_decoration_manager_v1_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - (void)data; +/* `xdg_toplevel.close` callback */ +static void xdg_toplevel_configure(void* data, + struct xdg_toplevel* xdg_toplevel, + MwI32 width, MwI32 height, + struct wl_array* states) { + MwLL self = data; + + if(width == 0 || height == 0) { + width = self->wayland.ww; + height = self->wayland.wh; + /* if it's still 0 then bail */ + if(width == 0 || height == 0) { + return; + } + } + + self->wayland.ww = width; + self->wayland.wh = height; + xdg_surface_set_window_geometry(self->wayland.toplevel->xdg_surface, 0, 0, self->wayland.ww, self->wayland.wh); + + cairo_destroy(self->wayland.cairo); + cairo_surface_destroy(self->wayland.cs); + self->wayland.cs = cairo_image_surface_create_for_data(self->wayland.mapped_shm_buf, CAIRO_FORMAT_ARGB32, width, height, 4 * width); + self->wayland.cairo = cairo_create(self->wayland.cs); + + MwLLDispatch(self, resize, NULL); + MwLLDispatch(self, draw, NULL); + + /*if(!self->wayland.egl_setup) { + self->wayland.egl_setup = egl_setup(self, self->wayland.x, self->wayland.y, width, height); + } else { + wl_egl_window_resize(self->wayland.egl_window_native, width, height, 0, 0); + egl_resetup(self); + }*/ + + return; +}; + +/* Empty function for satisfying zxdg_toplevel's requirements */ +static void decoration_configure( + void* data, struct zxdg_toplevel_decoration_v1* zxdg_toplevel_decoration_v1, + MwU32 mode) { +} + +/* `xdg_surface.close` callback */ +static void xdg_toplevel_close( + void* data, struct xdg_toplevel* xdg_toplevel) { + MwLL self = data; + MwLLDispatch(self, close, NULL); +}; + +/* `xdg_surface.configure` callback */ +static void xdg_surface_configure( + void* data, struct xdg_surface* xdg_surface, MwU32 serial) { + MwLL self = data; + + xdg_surface_ack_configure(xdg_surface, serial); + + if(self->wayland.configured) { + wl_surface_commit(self->wayland.surface); + } + + self->wayland.configured = MwTRUE; +} + +/* wl_shm setup function */ +static wayland_protocol_t* wl_shm_setup(MwU32 name, struct _MwLLWayland* wayland) { + int x, y; + int stride = wayland->ww * 4; + char temp_name[] = "/tmp/milsko-wl-shm-XXXXXX"; + + wayland->mapped_shm_buf_size = wayland->ww * wayland->wh * 4; + + wayland->shm = wl_registry_bind(wayland->registry, name, &wl_shm_interface, 1); + + wayland->shm_fd = mkstemp(temp_name); + + unlink(temp_name); + + if(posix_fallocate(wayland->shm_fd, 0, wayland->mapped_shm_buf_size) != 0) { + printf("failure setting up wl_shm: could not fallocate. %s.\n", strerror(errno)); + close(wayland->shm_fd); + return NULL; + } + if(ftruncate(wayland->shm_fd, wayland->mapped_shm_buf_size) != 0) { + printf("failure setting up wl_shm: could not truncate. %s.\n", strerror(errno)); + close(wayland->shm_fd); + return NULL; + } + + wayland->mapped_shm_buf = mmap(NULL, wayland->mapped_shm_buf_size, PROT_WRITE, MAP_SHARED, wayland->shm_fd, 0); + + fsync(wayland->shm_fd); + + if(!(wayland->shm_pool = wl_shm_create_pool(wayland->shm, wayland->shm_fd, wayland->mapped_shm_buf_size))) { + printf("failure setting up wl_shm: could not create pool.\n"); + } + + wayland->shm_buffer = wl_shm_pool_create_buffer(wayland->shm_pool, 0, wayland->ww, wayland->wh, stride, WL_SHM_FORMAT_ARGB8888); + + if(wayland->configured) { + wl_surface_attach(wayland->surface, wayland->shm_buffer, 0, 0); + wl_surface_commit(wayland->surface); + } + + return NULL; +} + +static void update_buffer(MwLL handle) { + fsync(handle->wayland.shm_fd); + + if(handle->wayland.configured) { + wl_surface_attach(handle->wayland.surface, handle->wayland.shm_buffer, 0, 0); + wl_surface_commit(handle->wayland.surface); + } } /* Standard Wayland event loop. */ static int event_loop(MwLL handle) { + enum { + DISPLAY_FD, + KEYREPEAT_FD, + CURSOR_FD + }; struct pollfd fd; - struct timespec timeout; + int timeout = 1; struct _MwLLWayland* wayland = &handle->wayland; - timeout.tv_nsec = 1; - timeout.tv_sec = 0; - if(wayland->display == NULL) { return 0; } fd.fd = wl_display_get_fd(wayland->display); fd.events = POLLIN; + while(wl_display_prepare_read(handle->wayland.display) != 0) { + if(wl_display_dispatch_pending(handle->wayland.display) > 0) { + return 0; + } + } + /* If an error other than EAGAIN happens, we have likely been disconnected from the Wayland session */ while(wl_display_flush(wayland->display) == -1) { if(errno != EAGAIN) { @@ -1110,291 +528,30 @@ static int event_loop(MwLL handle) { } } - wl_display_prepare_read(handle->wayland.display); /* Condition where no events are being sent. */ - if(!poll(&fd, 1, timeout.tv_nsec)) { - wl_display_cancel_read(wayland->display); - - update_buffer(handle, &wayland->framebuffer); - if(wayland->type == MWLL_WAYLAND_TOPLEVEL) - update_buffer(handle, &wayland->backbuffer); + if(!poll(&fd, 1, timeout)) { + wl_display_cancel_read(handle->wayland.display); + /* In this case, we need to commit the surface for any animations, etc. */ + wl_surface_commit(handle->wayland.surface); return 0; } - wl_display_read_events(wayland->display); - if(wl_display_dispatch_pending(wayland->display) < 0) { - wl_display_cancel_read(wayland->display); + + if(fd.revents & POLLIN) { + wl_display_read_events(wayland->display); + if(wl_display_dispatch_pending(wayland->display) > 0) { + } + } else { + wl_display_cancel_read(handle->wayland.display); } - wl_display_flush(handle->wayland.display); return 1; } -/* make the fuck sure that we're configurd */ -static void hang_until_configured(MwLL handle) { - while(!handle->wayland.configured) { - if(wl_display_roundtrip(handle->wayland.display) == -1) { - printf("roundtrip failed\n"); - raise(SIGTRAP); - return; - } - event_loop(handle); - } -} - -/* `xdg_toplevel.configure` callback */ -static void xdg_toplevel_configure(void* data, - struct xdg_toplevel* xdg_toplevel, - MwI32 width, MwI32 height, - struct wl_array* states) { - MwLL self = data; - (void)states; - (void)xdg_toplevel; - - /* Yes, somehow this can get called before */ - if(!self->wayland.configured) { - return; - } - - if(width == 0 || height == 0) { - width = self->wayland.ww; - height = self->wayland.wh; - /* if it's still 0 then bail */ - if(width == 0 || height == 0) { - return; - } - } - - region_invalidate(self); - self->wayland.ww = width; - self->wayland.wh = height; - - xdg_surface_set_window_geometry(self->wayland.toplevel->xdg_surface, 0, 0, self->wayland.ww, self->wayland.wh); - - backbuffer_destroy(&self->wayland); - backbuffer_setup(&self->wayland); - framebuffer_destroy(&self->wayland); - framebuffer_setup(&self->wayland); - - region_setup(self); - MwLLDispatch(self, resize, NULL); - - recursive_dispatch_resize(self); - - if(self->wayland.pointer_constrained) { - zwp_locked_pointer_v1_set_cursor_position_hint(self->wayland.locked_pointer, 0, CSD_BORDER_FRAME_TOP); - wl_surface_commit(self->wayland.framebuffer.surface); - } -}; - -/* `xdg_surface.close` callback */ -static void xdg_toplevel_close( - void* data, struct xdg_toplevel* xdg_toplevel) { - MwLL self = data; - (void)xdg_toplevel; - WAYLAND_EVENT_OP_START(self); - MwLLDispatch(self, close, NULL); - WAYLAND_EVENT_OP_END(self); -}; - -/* `xdg_surface.configure` callback */ -static void xdg_surface_configure( - void* data, struct xdg_surface* xdg_surface, MwU32 serial) { - MwLL self = data; - - xdg_surface_ack_configure(xdg_surface, serial); - - MwLLDispatch(self, draw, NULL); - - if(self->wayland.configured) { - update_buffer(self, &self->wayland.framebuffer); - update_buffer(self, &self->wayland.backbuffer); - } - - self->wayland.configured = MwTRUE; -} - -/* wl_shm setup function */ -static wayland_protocol_t* wl_shm_setup(MwU32 name, struct _MwLLWayland* wayland) { - wayland->framebuffer.shm = wl_registry_bind(wayland->registry, name, &wl_shm_interface, 1); - wayland->backbuffer.shm = wl_registry_bind(wayland->registry, name, &wl_shm_interface, 1); - wayland->cursor.shm = wl_registry_bind(wayland->registry, name, &wl_shm_interface, 1); - - return NULL; -} - -static void wl_shm_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - (void)data; -} - -static void update_buffer(MwLL self, struct _MwLLWaylandShmBuffer* buffer) { - memcpy(buffer->buf, buffer->buf_back, buffer->buf_size); - // Yes this is needed every time, it's how we fix weston. - if(self->wayland.configured) - wl_surface_attach(buffer->surface, buffer->shm_buffer, 0, 0); - wl_surface_commit(buffer->surface); -} - -static void buffer_setup(struct _MwLLWaylandShmBuffer* buffer, MwU32 width, MwU32 height) { - int stride = width * 4; - char temp_name[] = "/tmp/milsko-wl-shm-XXXXXX"; - - buffer->buf_size = width * height * 4; - - buffer->fd = mkstemp(temp_name); - unlink(temp_name); - - if(posix_fallocate(buffer->fd, 0, buffer->buf_size) != 0) { - printf("failure setting up wl_shm: could not fallocate. %s.\n", strerror(errno)); - close(buffer->fd); - return; - } - if(ftruncate(buffer->fd, buffer->buf_size) != 0) { - printf("failure setting up wl_shm: could not truncate. %s.\n", strerror(errno)); - close(buffer->fd); - return; - } - - buffer->buf = mmap(NULL, buffer->buf_size, PROT_WRITE, MAP_SHARED, buffer->fd, 0); - buffer->buf_back = malloc(buffer->buf_size); - - fsync(buffer->fd); - - if(!(buffer->shm_pool = wl_shm_create_pool(buffer->shm, buffer->fd, buffer->buf_size))) { - close(buffer->fd); - printf("failure setting up wl_shm: could not create pool.\n"); - return; - } - buffer->shm_buffer = wl_shm_pool_create_buffer(buffer->shm_pool, 0, width, height, stride, WL_SHM_FORMAT_ARGB8888); - buffer->setup = MwTRUE; -} - -static void buffer_destroy(struct _MwLLWaylandShmBuffer* buffer) { - close(buffer->fd); - if(buffer->buf) munmap(buffer->buf, buffer->buf_size); - if(buffer->buf_back) free(buffer->buf_back); - if(buffer->shm_buffer) wl_buffer_destroy(buffer->shm_buffer); - if(buffer->shm_pool) wl_shm_pool_destroy(buffer->shm_pool); - if(buffer->shm_pool_back) wl_shm_pool_destroy(buffer->shm_pool_back); - buffer->setup = MwFALSE; -} - -static void framebuffer_setup(struct _MwLLWayland* wayland) { - buffer_setup(&wayland->framebuffer, wayland->ww, wayland->wh); - - wayland->front_cs = cairo_image_surface_create_for_data(wayland->framebuffer.buf_back, CAIRO_FORMAT_ARGB32, wayland->ww, wayland->wh, 4 * wayland->ww); - wayland->front_cairo = cairo_create(wayland->front_cs); - - memset(wayland->framebuffer.buf_back, 0, wayland->framebuffer.buf_size); - if(wayland->configured) - wl_surface_attach(wayland->framebuffer.surface, wayland->framebuffer.shm_buffer, 0, 0); - wl_surface_commit(wayland->framebuffer.surface); - - hang_until_configured((MwLL)wayland); - update_buffer((MwLL)wayland, &wayland->framebuffer); -}; -static void framebuffer_destroy(struct _MwLLWayland* wayland) { - buffer_destroy(&wayland->framebuffer); - cairo_destroy(wayland->front_cairo); - cairo_surface_destroy(wayland->front_cs); -}; - -static void backbuffer_setup(struct _MwLLWayland* wayland) { - if(wayland->type != MWLL_WAYLAND_TOPLEVEL) { - return; - } - MwU32 w = wayland->ww; - MwU32 h = wayland->wh; - if(!wayland->has_decorations) { - w += (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT); - h += (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM); - } - buffer_setup(&wayland->backbuffer, w, h); - - wayland->back_cs = cairo_image_surface_create_for_data(wayland->backbuffer.buf_back, CAIRO_FORMAT_ARGB32, w, h, 4 * w); - wayland->back_cairo = cairo_create(wayland->back_cs); - - memset(wayland->backbuffer.buf_back, 255, wayland->backbuffer.buf_size); - if(wayland->configured) - wl_surface_attach(wayland->backbuffer.surface, wayland->backbuffer.shm_buffer, 0, 0); - wl_surface_commit(wayland->backbuffer.surface); - hang_until_configured((MwLL)wayland); - update_buffer((MwLL)wayland, &wayland->backbuffer); -}; -static void backbuffer_destroy(struct _MwLLWayland* wayland) { - buffer_destroy(&wayland->backbuffer); - cairo_destroy(wayland->back_cairo); - cairo_surface_destroy(wayland->back_cs); -}; - -static void region_invalidate(MwLL handle) { - if(!handle->wayland.configured) { - return; - } - wl_region_subtract(handle->wayland.region, 0, 0, handle->wayland.ww, handle->wayland.wh); -} -static void region_setup(MwLL handle) { - MwLL parent = handle->wayland.parent; - int width = handle->wayland.ww; - int height = handle->wayland.wh; - - if(!handle->wayland.configured) { - return; - } - - wl_region_add(handle->wayland.o_region, 0, 0, width, height); - - if(handle->wayland.type == MWLL_WAYLAND_POPUP) { - wl_region_add(handle->wayland.region, 0, 0, width + abs(handle->wayland.x), height + abs(handle->wayland.y)); - } else { - if(parent) { - if(width - handle->wayland.x > parent->wayland.ww) { - width = parent->wayland.ww - handle->wayland.x; - } - if(height - handle->wayland.y > parent->wayland.wh) { - height = parent->wayland.wh - handle->wayland.y; - } - } else { - if(!handle->wayland.has_decorations) { - width += CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT; - height += CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM; - } - } - wl_region_add(handle->wayland.region, 0, 0, width, height); - } - - if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL) { - wl_surface_set_opaque_region(handle->wayland.backbuffer.surface, handle->wayland.o_region); - wl_surface_set_input_region(handle->wayland.backbuffer.surface, handle->wayland.region); - } - wl_surface_set_opaque_region(handle->wayland.framebuffer.surface, handle->wayland.o_region); - wl_surface_set_input_region(handle->wayland.framebuffer.surface, handle->wayland.region); -} - -static wayland_protocol_t* xdg_toplevel_icon_manager_v1_setup(MwU32 name, struct _MwLLWayland* wayland) { - wayland_protocol_t* proto = malloc(sizeof(wayland_protocol_t)); - - proto->context = wl_registry_bind(wayland->registry, name, &xdg_toplevel_icon_manager_v1_interface, 1); - proto->listener = NULL; - - return proto; -} - -static void xdg_toplevel_icon_manager_v1_interface_destroy(struct _MwLLWayland* wayland, wayland_protocol_t* data) { - (void)wayland; - free(data->listener); -} - /* Function for setting up the callbacks/structs that will be registered upon the relevant interfaces being found. */ static void setup_callbacks(struct _MwLLWayland* wayland) { /* Convience macro for adding the interface functions to the setup map */ #define WL_INTERFACE(interface) \ - do { \ - wayland_protocol_callback_table_t* cb = malloc(sizeof(wayland_protocol_callback_table_t)); \ - cb->setup = (wl_setup_func*)interface##_setup; \ - cb->destroy = (wl_destroy_func*)interface##_interface_destroy; \ - shput(wayland->wl_protocol_setup_map, interface##_interface.name, cb); \ - } while(0); + shput(wayland->wl_protocol_setup_map, interface##_interface.name, (wl_setup_func*)interface##_setup); wayland->registry_listener.global = new_protocol; wayland->registry_listener.global_remove = protocol_removed; @@ -1404,18 +561,10 @@ static void setup_callbacks(struct _MwLLWayland* wayland) { WL_INTERFACE(wl_shm); WL_INTERFACE(wl_compositor); WL_INTERFACE(wl_seat); - WL_INTERFACE(wl_output); - WL_INTERFACE(wl_data_device_manager); - WL_INTERFACE(zwp_primary_selection_device_manager_v1); - WL_INTERFACE(zwp_pointer_constraints_v1); - WL_INTERFACE(zwp_relative_pointer_manager_v1); - WL_INTERFACE(xdg_wm_base); if(wayland->type == MWLL_WAYLAND_TOPLEVEL) { - WL_INTERFACE(wp_viewporter); + WL_INTERFACE(xdg_wm_base); WL_INTERFACE(zxdg_decoration_manager_v1); - WL_INTERFACE(xdg_toplevel_icon_manager_v1); - WL_INTERFACE(wl_subcompositor); - } else if(wayland->type == MWLL_WAYLAND_POPUP) { + WL_INTERFACE(wp_cursor_shape_manager_v1); } else { WL_INTERFACE(wl_subcompositor); } @@ -1424,10 +573,10 @@ static void setup_callbacks(struct _MwLLWayland* wayland) { /* Toplevel setup function */ static void setup_toplevel(MwLL r, int x, int y) { + int i; + r->wayland.type = MWLL_WAYLAND_TOPLEVEL; r->wayland.toplevel = malloc(sizeof(struct _MwLLWaylandTopLevel)); - r->wayland.x = x; - r->wayland.y = y; setup_callbacks(&r->wayland); @@ -1448,21 +597,12 @@ static void setup_toplevel(MwLL r, int x, int y) { return; } - /* check now if we have decorations so that everything else can act accordingly */ - if(shget(r->wayland.wl_protocol_map, zxdg_decoration_manager_v1_interface.name) != NULL) { - r->wayland.has_decorations = MwTRUE; - } - - r->wayland.xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + r->wayland.toplevel->xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); /* Create a wl_surface, a xdg_surface and a xdg_toplevel */ - r->wayland.framebuffer.surface = wl_compositor_create_surface(r->wayland.compositor); - r->wayland.backbuffer.surface = wl_compositor_create_surface(r->wayland.compositor); - r->wayland.toplevel->ssurface = wl_subcompositor_get_subsurface(r->wayland.toplevel->scompositor, r->wayland.framebuffer.surface, r->wayland.backbuffer.surface); - wl_subsurface_set_desync(r->wayland.toplevel->ssurface); - + r->wayland.surface = wl_compositor_create_surface(r->wayland.compositor); r->wayland.toplevel->xdg_surface = - xdg_wm_base_get_xdg_surface(WAYLAND_GET_INTERFACE(r->wayland, xdg_wm_base)->context, r->wayland.backbuffer.surface); + xdg_wm_base_get_xdg_surface(WAYLAND_GET_INTERFACE(r->wayland, xdg_wm_base)->context, r->wayland.surface); r->wayland.toplevel->xdg_top_level = xdg_surface_get_toplevel(r->wayland.toplevel->xdg_surface); /* setup mandatory listeners */ @@ -1479,14 +619,11 @@ static void setup_toplevel(MwLL r, int x, int y) { xdg_toplevel_set_app_id(r->wayland.toplevel->xdg_top_level, "MilskoWaylandApp"); /* Perform the initial commit and wait for the first configure event */ - wl_surface_commit(r->wayland.backbuffer.surface); - wl_surface_commit(r->wayland.framebuffer.surface); - while(!r->wayland.configured) { - event_loop(r); - } + wl_surface_commit(r->wayland.surface); + event_loop(r); /* setup decorations if we can */ - if(r->wayland.has_decorations) { + if(shget(r->wayland.wl_protocol_map, zxdg_decoration_manager_v1_interface.name) != NULL) { zxdg_decoration_manager_v1_context_t* dec = WAYLAND_GET_INTERFACE(r->wayland, zxdg_decoration_manager_v1)->context; dec->decoration = zxdg_decoration_manager_v1_get_toplevel_decoration( @@ -1495,61 +632,34 @@ static void setup_toplevel(MwLL r, int x, int y) { zxdg_toplevel_decoration_v1_set_mode( dec->decoration, ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); } else { - wl_subsurface_set_position(r->wayland.toplevel->ssurface, CSD_BORDER_FRAME_LEFT, CSD_BORDER_FRAME_TOP); - } -} - -/* Toplevel destroy function */ -static void destroy_toplevel(MwLL r) { - if(shget(r->wayland.wl_protocol_map, zxdg_decoration_manager_v1_interface.name) != NULL) { - zxdg_decoration_manager_v1_context_t* dec = WAYLAND_GET_INTERFACE(r->wayland, zxdg_decoration_manager_v1)->context; - zxdg_decoration_manager_v1_destroy(dec->manager); + printf("zxdg null\n"); } - wl_surface_destroy(r->wayland.framebuffer.surface); - - wl_compositor_destroy(r->wayland.compositor); - - xdg_surface_destroy(r->wayland.toplevel->xdg_surface); - - xdg_toplevel_destroy(r->wayland.toplevel->xdg_top_level); - - xkb_state_unref(r->wayland.xkb_state); - - xkb_context_unref(r->wayland.xkb_context); - - xkb_keymap_unref(r->wayland.xkb_keymap); - - free(r->wayland.toplevel); - - wl_registry_destroy(r->wayland.registry); - - wl_display_disconnect(r->wayland.display); - - r->wayland.configured = MwFALSE; + /*egl_resetup(r); + MwLLDispatch(r, draw, NULL); + recursive_draw(r);*/ } /* Sublevel setup function */ static void setup_sublevel(MwLL parent, MwLL r, int x, int y) { struct wl_compositor* compositor = parent->wayland.compositor; - struct wl_surface* parent_surface = parent->wayland.framebuffer.surface; + struct wl_surface* parent_surface = parent->wayland.surface; - r->wayland.sublevel = malloc(sizeof(struct _MwLLWaylandSublevel)); - r->wayland.sublevel->parent = parent; + r->wayland.sublevel = malloc(sizeof(struct _MwLLWaylandSublevel)); r->wayland.type = MWLL_WAYLAND_SUBLEVEL; + r->wayland.display = parent->wayland.display; + + r->wayland.surface = wl_compositor_create_surface(compositor); + setup_callbacks(&r->wayland); + // printf("position %d %d\n", x, y); + r->wayland.registry = wl_display_get_registry(parent->wayland.display); r->wayland.display = parent->wayland.display; - if(parent->wayland.type == MWLL_WAYLAND_TOPLEVEL) { - r->wayland.sublevel->xdg_surface = parent->wayland.toplevel->xdg_surface; - } else { - r->wayland.sublevel->xdg_surface = parent->wayland.sublevel->xdg_surface; - } - wl_registry_add_listener(r->wayland.registry, &r->wayland.registry_listener, r); if(wl_display_roundtrip(r->wayland.display) == -1) { printf("roundtrip failed\n"); @@ -1557,165 +667,17 @@ static void setup_sublevel(MwLL parent, MwLL r, int x, int y) { return; } - r->wayland.framebuffer.surface = wl_compositor_create_surface(compositor); + r->wayland.sublevel->subsurface = wl_subcompositor_get_subsurface(r->wayland.sublevel->subcompositor, r->wayland.surface, parent_surface); - r->wayland.sublevel->subsurface = wl_subcompositor_get_subsurface(r->wayland.sublevel->subcompositor, r->wayland.framebuffer.surface, parent_surface); - - wl_subsurface_set_desync(r->wayland.sublevel->subsurface); wl_subsurface_set_position(r->wayland.sublevel->subsurface, x, y); - if(parent) { - wl_subsurface_place_above(r->wayland.sublevel->subsurface, parent->wayland.framebuffer.surface); - } - - r->wayland.xkb_keymap = parent->wayland.xkb_keymap; - r->wayland.xkb_state = parent->wayland.xkb_state; - r->wayland.configured = MwTRUE; } -/* Sublevel setup function */ -static void destroy_sublevel(MwLL r) { - wl_subsurface_destroy(r->wayland.sublevel->subsurface); - - wl_registry_destroy(r->wayland.registry); - - free(r->wayland.sublevel); - - r->wayland.configured = MwFALSE; -} - -static void popup_configure(void* data, - struct xdg_popup* xdg_popup, - int32_t x, - int32_t y, - int32_t width, - int32_t height) { - MwLL self = data; - (void)xdg_popup; - - self->wayland.x = x; - self->wayland.y = y; - self->wayland.ww = width; - self->wayland.wh = height; -}; - -static void popup_done(void* data, - struct xdg_popup* xdg_popup) { - (void)data; - (void)xdg_popup; -}; - -struct xdg_popup_listener popup_listener = { - .configure = popup_configure, - .popup_done = popup_done, -}; - -/* Popup setup function */ -static void setup_popup(MwLL r, int x, int y, MwLL parent) { - struct xdg_surface* xdg_surface; - MwLL topmost_parent = r->wayland.parent; - - r->wayland.type = MWLL_WAYLAND_POPUP; - r->wayland.x = x; - r->wayland.y = y; - r->wayland.popup = malloc(sizeof(struct _MwLLWaylandPopup)); - - while(topmost_parent->wayland.type != MWLL_WAYLAND_TOPLEVEL) { - topmost_parent = topmost_parent->wayland.parent; - } - if(!topmost_parent->wayland.has_decorations) { - r->wayland.x += ceil((float)CSD_BORDER_FRAME_LEFT / 2.); - r->wayland.y += ceil((float)CSD_BORDER_FRAME_TOP / 2.); - } - - setup_callbacks(&r->wayland); - - /* Connect to the Wayland compositor */ - r->wayland.display = parent->wayland.display; - - /* Do a roundtrip to ensure all interfaces are setup. */ - r->wayland.registry = wl_display_get_registry(r->wayland.display); - wl_registry_add_listener(r->wayland.registry, &r->wayland.registry_listener, r); - if(wl_display_roundtrip(r->wayland.display) == -1) { - printf("roundtrip failed\n"); - raise(SIGTRAP); - return; - } - - /* check now if we have decorations so that everything else can act accordingly */ - if(shget(r->wayland.wl_protocol_map, zxdg_decoration_manager_v1_interface.name) != NULL) { - r->wayland.has_decorations = MwTRUE; - } - - r->wayland.popup->xdg_wm_base = WAYLAND_GET_INTERFACE(r->wayland, xdg_wm_base)->context; - - r->wayland.popup->xdg_positioner = xdg_wm_base_create_positioner(r->wayland.popup->xdg_wm_base); - - xdg_positioner_set_size(r->wayland.popup->xdg_positioner, r->wayland.ww, r->wayland.wh); - xdg_positioner_set_anchor_rect( - r->wayland.popup->xdg_positioner, - r->wayland.x, r->wayland.y, r->wayland.ww, r->wayland.wh); - - xdg_surface = topmost_parent->wayland.toplevel->xdg_surface; - r->wayland.xkb_keymap = topmost_parent->wayland.xkb_keymap; - r->wayland.xkb_state = topmost_parent->wayland.xkb_state; - - r->wayland.framebuffer.surface = wl_compositor_create_surface(r->wayland.compositor); - - r->wayland.popup->xdg_surface = - xdg_wm_base_get_xdg_surface(WAYLAND_GET_INTERFACE(r->wayland, xdg_wm_base)->context, r->wayland.framebuffer.surface); - - r->wayland.popup->xdg_popup = xdg_surface_get_popup( - r->wayland.popup->xdg_surface, - xdg_surface, - r->wayland.popup->xdg_positioner); - - xdg_popup_add_listener(r->wayland.popup->xdg_popup, &popup_listener, r); - - r->wayland.popup->xdg_surface_listener.configure = xdg_surface_configure; - xdg_surface_add_listener(r->wayland.popup->xdg_surface, &r->wayland.popup->xdg_surface_listener, r); - - /* Perform the initial commit and wait for the first configure event */ - wl_surface_commit(r->wayland.framebuffer.surface); - while(!r->wayland.configured) { - event_loop(r); - } -} - -/* Popup destroy function */ -static void destroy_popup(MwLL r) { - xdg_popup_destroy(r->wayland.popup->xdg_popup); - - xdg_surface_destroy(r->wayland.popup->xdg_surface); - - xdg_positioner_destroy(r->wayland.popup->xdg_positioner); - - wl_surface_destroy(r->wayland.framebuffer.surface); - - wl_registry_destroy(r->wayland.registry); - - r->wayland.configured = MwFALSE; -} - -static void clip(MwLL handle) { - MwLL parent = handle->wayland.parent; - if(parent && handle->wayland.type == MWLL_WAYLAND_SUBLEVEL) { - cairo_reset_clip(handle->wayland.front_cairo); - cairo_rectangle(handle->wayland.front_cairo, 0, 0, (parent->wayland.ww + handle->wayland.x), (parent->wayland.wh + handle->wayland.y)); - cairo_clip(handle->wayland.front_cairo); - } -} - -static void wl_logger(const char* fmt, va_list args) { - vprintf(fmt, args); - raise(SIGTRAP); -} - -static void widget_setup(MwLL r, MwLL parent, int x, int y, int width, int height, enum _MwLLWaylandType ty) { - /* Wayland does not report global coordinates ever. Compositors are not even expected to have knowledge of this. - */ - r->common.coordinate_type = MwCOORDINATE_LOCAL; +static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { + MwLL r; + r = malloc(sizeof(*r)); + MwLLCreateCommon(r); r->common.type = MwLLBackendWayland; @@ -1729,192 +691,43 @@ static void widget_setup(MwLL r, MwLL parent, int x, int y, int width, int heigh y = 0; } - r->wayland.ww = width; - r->wayland.wh = height; - r->wayland.x = x; - r->wayland.y = y; - r->wayland.parent = parent; + r->wayland.ww = width; + r->wayland.wh = height; + r->wayland.x = x; + r->wayland.y = y; - if(ty == MWLL_WAYLAND_UNKNOWN) { - if(parent == NULL) { - setup_toplevel(r, x, y); - } else { - setup_sublevel(parent, r, x, y); - } + r->wayland.sublevels = NULL; + + if(parent == NULL) { + setup_toplevel(r, x, y); } else { - switch(ty) { - case MWLL_WAYLAND_UNKNOWN: - break; - case MWLL_WAYLAND_TOPLEVEL: - setup_toplevel(r, x, y); - break; - case MWLL_WAYLAND_SUBLEVEL: - setup_sublevel(parent, r, x, y); - break; - case MWLL_WAYLAND_POPUP: - setup_popup(r, x, y, parent); - break; - } + setup_sublevel(parent, r, x, y); } - framebuffer_destroy(&r->wayland); - backbuffer_destroy(&r->wayland); + /* example of writing to the buffer */ + memset(r->wayland.mapped_shm_buf, 255, r->wayland.mapped_shm_buf_size); + update_buffer(r); - framebuffer_setup(&r->wayland); - backbuffer_setup(&r->wayland); - - r->wayland.region = wl_compositor_create_region(r->wayland.compositor); - r->wayland.o_region = wl_compositor_create_region(r->wayland.compositor); - region_setup(r); + r->wayland.cs = cairo_image_surface_create_for_data(r->wayland.mapped_shm_buf, CAIRO_FORMAT_ARGB32, width, height, 4 * width); + r->wayland.cairo = cairo_create(r->wayland.cs); MwLLForceRender(r); - if(parent != NULL) { - MwLLForceRender(parent); - } - - if(!r->wayland.has_decorations) { - MwLLBeginDraw(r); - MwLLEndDraw(r); - } -} - -#ifdef USE_DBUS -static void dark_theme_listener(MwLL handle, MwU32 new_value) { - handle->wayland.dark_theme = (new_value == 1) ? 1 : 0; - - MwLLDispatch(handle, dark_theme, &handle->wayland.dark_theme); -} - -static void detect_dark_theme(MwLL handle) { - MwU32 value = 0; - - MwLLDBusPortalGet(&wl_call_tbl.dbus, &handle->wayland.dbus, "org.freedesktop.portal.Settings", "org.freedesktop.appearance", "color-scheme", &value); - handle->wayland.dark_theme = (value == 1) ? 1 : 0; - - MwLLDBusPortalWatch(&wl_call_tbl.dbus, &handle->wayland.dbus, "org.freedesktop.portal.Settings"); - - MwLLDispatch(handle, dark_theme, &handle->wayland.dark_theme); -} -#endif - -static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { - MwLL r; - r = malloc(sizeof(*r)); - memset(r, 0, sizeof(*r)); - MwLLCreateCommon(r); - - widget_setup(r, parent, x, y, width, height, MWLL_WAYLAND_UNKNOWN); - -#ifdef USE_DBUS - if(!parent && wl_call_tbl.has_dbus) { - wl_call_tbl.has_dbus = MwLLDBusNewContext(&wl_call_tbl.dbus, &r->wayland.dbus); - r->wayland.dark_theme_detection = MwTRUE; - r->wayland.dark_theme = -1; - } -#endif return r; } static void MwLLDestroyImpl(MwLL handle) { - int i; - struct timeval tv; - struct timespec t = { - .tv_sec = 0, - .tv_nsec = 0, - }; - int select_ret; - - event_loop(handle); - wl_flush(handle); - - if(pthread_mutex_timedlock(&handle->wayland.eventsMutex, &t) != 0) { - printf("WARNING: Couldn't call MwLLDestroyImpl due to deadlock.\n"); - return; - }; - MwLLDestroyCommon(handle); - /* sleep long enough that any active attempts to wait for the mutex will have given up and we can safely unlock/destroy it */ - tv.tv_sec = 0; - tv.tv_usec = 1000; - do { - select_ret = select(1, NULL, NULL, NULL, &tv); - } while((select_ret == -1) && (errno == EINTR)); + cairo_destroy(handle->wayland.cairo); + cairo_surface_destroy(handle->wayland.cs); - pthread_mutex_unlock(&handle->wayland.eventsMutex); - pthread_mutex_destroy(&handle->wayland.eventsMutex); + munmap(handle->wayland.mapped_shm_buf, handle->wayland.mapped_shm_buf_size); + wl_buffer_destroy(handle->wayland.mapped_shm_buf); + wl_shm_pool_destroy(handle->wayland.shm_pool); + close(handle->wayland.shm_fd); -#ifdef USE_DBUS - if(!wl_call_tbl.has_dbus) { - MwLLDBusFreeContext(&wl_call_tbl.dbus, &handle->wayland.dbus); - } -#endif - - wl_region_destroy(handle->wayland.region); - - if(handle->wayland.supports_zwp) { - zwp_primary_selection_source_v1_destroy(handle->wayland.clipboard_source.zwp); - } else { - wl_data_source_destroy(handle->wayland.clipboard_source.wl); - } - - if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL) { - destroy_toplevel(handle); - } else if(handle->wayland.type == MWLL_WAYLAND_SUBLEVEL) { - destroy_sublevel(handle); - } else if(handle->wayland.type == MWLL_WAYLAND_POPUP) { - destroy_popup(handle); - } - - if(handle->wayland.framebuffer.setup) { - framebuffer_destroy(&handle->wayland); - wl_surface_destroy(handle->wayland.framebuffer.surface); - } - if(handle->wayland.backbuffer.setup) { - backbuffer_destroy(&handle->wayland); - wl_surface_destroy(handle->wayland.backbuffer.surface); - } - buffer_destroy(&handle->wayland.cursor); - if(handle->wayland.icon != NULL) { - buffer_destroy(handle->wayland.icon); - wl_surface_destroy(handle->wayland.icon->surface); - } - - for(i = 0; i < shlen(handle->wayland.wl_protocol_setup_map); i++) { - void* ctx = shget(handle->wayland.wl_protocol_map, handle->wayland.wl_protocol_setup_map[i].key); - - if(ctx != NULL) { - handle->wayland.wl_protocol_setup_map[i].value->destroy(&handle->wayland, ctx); - } - shdel(handle->wayland.wl_protocol_map, handle->wayland.wl_protocol_setup_map[i].value); - free(handle->wayland.wl_protocol_setup_map[i].value); - free(ctx); - } - shfree(handle->wayland.wl_protocol_map); - shfree(handle->wayland.wl_protocol_setup_map); - - // wl_keyboard_destroy(handle->wayland.keyboard); - // wl_pointer_destroy(handle->wayland.pointer); - - if(handle->wayland.supports_zwp) { - for(i = 0; i < arrlen(handle->wayland.clipboard_devices_zwp); i++) { - if(handle->wayland.clipboard_devices_zwp[i]->device.zwp) zwp_primary_selection_device_v1_destroy(handle->wayland.clipboard_devices_zwp[i]->device.zwp); - free(handle->wayland.clipboard_devices_zwp[i]); - } - } else { - printf("[WARNING] Primary clipboard requested for MwLLSetClipboard, but this Wayland compositor doesn't support it.\n"); - } - for(i = 0; i < arrlen(handle->wayland.clipboard_devices_wl); i++) { - wl_data_device_destroy(handle->wayland.clipboard_devices_wl[i]->device.wl); - free(handle->wayland.clipboard_devices_wl[i]); - } - - wl_flush(handle); - - if(currentlyHeldWidget == handle) { - currentlyHeldWidget = NULL; - } + free(handle); } static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) { @@ -1925,203 +738,81 @@ static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsign } static void MwLLSetXYImpl(MwLL handle, int x, int y) { - region_invalidate(handle); - handle->wayland.x = x; - handle->wayland.y = y; - if(handle->wayland.type == MWLL_WAYLAND_SUBLEVEL) { + if(handle->wayland.type != MWLL_WAYLAND_TOPLEVEL) { + handle->wayland.x = x; + handle->wayland.y = y; + /*if(handle->wayland.has_set_xy) { + timed_redraw_by_epoch(handle->wayland.topmost_parent, 25); + } else if(x != 0 && y != 0) { + handle->wayland.has_set_xy = MwTRUE; + }*/ + wl_subsurface_set_position(handle->wayland.sublevel->subsurface, x, y); } - region_setup(handle); - MwLLDispatch(handle, draw, NULL); } static void MwLLSetWHImpl(MwLL handle, int w, int h) { - region_invalidate(handle); - /* Prevent an integer underflow when the w/h is too low */ - if((w < 2 || h < 2)) { - handle->wayland.ww = 2; - handle->wayland.wh = 2; - } else { - handle->wayland.ww = w; - handle->wayland.wh = h; - } - - if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL && handle->wayland.configured) { - xdg_surface_set_window_geometry(handle->wayland.toplevel->xdg_surface, 0, 0, handle->wayland.ww, handle->wayland.wh); - } - - if(handle->wayland.type == MWLL_WAYLAND_SUBLEVEL && handle->wayland.configured && !handle->wayland.dispatching_resize) { - handle->wayland.dispatching_resize = MwTRUE; - MwLLDispatch(handle, resize, NULL); - handle->wayland.dispatching_resize = MwFALSE; - } - - if(handle->wayland.type == MWLL_WAYLAND_POPUP) { - destroy_popup(handle); - wl_flush(handle); - setup_popup(handle, handle->wayland.x, handle->wayland.y, handle->wayland.parent); - } - - region_setup(handle); - - framebuffer_destroy(&handle->wayland); - framebuffer_setup(&handle->wayland); - backbuffer_destroy(&handle->wayland); - backbuffer_setup(&handle->wayland); - MwLLDispatch(handle, draw, NULL); - handle->wayland.events_pending = 1; -} - -static void MwLLBeginDrawImpl(MwLL handle) { - if(handle->wayland.type != MWLL_WAYLAND_TOPLEVEL) { - handle->wayland.selected_cairo = handle->wayland.front_cairo; + if((w < 10 || h < 10)) { + handle->wayland.ww = 10; + handle->wayland.wh = 10; return; } + handle->wayland.ww = w; + handle->wayland.wh = h; - if(!handle->wayland.has_decorations) { - int x; - MwU32 w = handle->wayland.ww + CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT; - MwU32 h = handle->wayland.wh + CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM; - cairo_set_line_width(handle->wayland.back_cairo, 4.0); - for(x = 0; x < w; x++) { - float placeholder = (float)x / (float)w; - cairo_set_source_rgb(handle->wayland.back_cairo, placeholder, 0.25, 0.25); - - cairo_move_to(handle->wayland.back_cairo, w - x, 0); - cairo_line_to(handle->wayland.back_cairo, w - x, CSD_BORDER_FRAME_TOP); - cairo_stroke(handle->wayland.back_cairo); - - cairo_move_to(handle->wayland.back_cairo, x, CSD_BORDER_FRAME_TOP); - cairo_line_to(handle->wayland.back_cairo, x, h); - cairo_stroke(handle->wayland.back_cairo); - } - cairo_set_source_rgba(handle->wayland.back_cairo, 1, 1, 1, 0.5); - cairo_move_to(handle->wayland.back_cairo, 0, 0); - cairo_line_to(handle->wayland.back_cairo, 0, h); - cairo_stroke(handle->wayland.back_cairo); - cairo_move_to(handle->wayland.back_cairo, 0, 0); - cairo_line_to(handle->wayland.back_cairo, w, 0); - cairo_stroke(handle->wayland.back_cairo); - - cairo_set_source_rgba(handle->wayland.back_cairo, 0, 0, 0, 0.5); - cairo_move_to(handle->wayland.back_cairo, 0, h); - cairo_line_to(handle->wayland.back_cairo, w, h); - cairo_stroke(handle->wayland.back_cairo); - cairo_move_to(handle->wayland.back_cairo, w, 0); - cairo_line_to(handle->wayland.back_cairo, w, h); - cairo_stroke(handle->wayland.back_cairo); - - if(strlen(handle->wayland.title) != 0) { - int y, x; - int i = 0, sx = 0, sy = 0; - int tw, th; - unsigned char* px; - MwRect r; - MwLLPixmap p; - tw = strlen(handle->wayland.title) * 7; - th = 14; - px = malloc(tw * th * 4); - assert(px); - - memset(px, 0, tw * th * 4); - - handle->wayland.selected_cairo = handle->wayland.back_cairo; - - while(handle->wayland.title[i]) { - int out; - i += MwUTF8ToUTF32(handle->wayland.title + i, &out); - - if(out > 0xff) { - out = 0; - } - - for(y = 0; y < 14; y++) { - for(x = 0; x < 7; x++) { - unsigned char* ppx = &px[((sy + y) * tw + sx + x) * 4]; - int col = MwFontData[out].data[y] & (1 << ((7 - 1) - x)) ? 255 : 0; - ppx[0] = col; - ppx[1] = col; - ppx[2] = col; - ppx[3] = col; - } - } - sx += 7; - } - - p = MwLLCreatePixmap(handle, px, tw, th); - r.x = 5; - r.y = 5; - r.width = tw; - r.height = th; - - MwLLDrawPixmap(handle, &r, p); - MwLLDestroyPixmap(p); - free(px); - } - update_buffer(handle, &handle->wayland.backbuffer); - } - handle->wayland.selected_cairo = handle->wayland.front_cairo; -} - -static void MwLLEndDrawImpl(MwLL handle) { - if(handle->wayland.configured) { - if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL) { - update_buffer(handle, &handle->wayland.backbuffer); - } - update_buffer(handle, &handle->wayland.framebuffer); + if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL) { + xdg_surface_set_window_geometry(handle->wayland.toplevel->xdg_surface, 0, 0, handle->wayland.ww, handle->wayland.wh); + } else { + /* timed_redraw_by_epoch(handle->wayland.topmost_parent, 25); + recursive_draw(handle->wayland.topmost_parent); */ } + MwLLDispatch(handle, draw, NULL); } static void MwLLPolygonImpl(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { int i; - clip(handle); - - cairo_set_source_rgba(handle->wayland.front_cairo, color->common.red / 255.0, color->common.green / 255.0, color->common.blue / 255.0, 1.0); - cairo_new_path(handle->wayland.front_cairo); + cairo_set_source_rgb(handle->wayland.cairo, color->common.red / 255.0, color->common.green / 255.0, color->common.blue / 255.0); + cairo_new_path(handle->wayland.cairo); for(i = 0; i < points_count; i++) { if(i == 0) { - cairo_move_to(handle->wayland.front_cairo, points[i].x, points[i].y); + cairo_move_to(handle->wayland.cairo, points[i].x, points[i].y); } else { - cairo_line_to(handle->wayland.front_cairo, points[i].x, points[i].y); + cairo_line_to(handle->wayland.cairo, points[i].x, points[i].y); } } - cairo_close_path(handle->wayland.front_cairo); - - cairo_set_operator(handle->wayland.front_cairo, CAIRO_OPERATOR_SOURCE); - cairo_fill(handle->wayland.front_cairo); - cairo_set_operator(handle->wayland.front_cairo, CAIRO_OPERATOR_OVER); - - handle->wayland.events_pending = 1; + cairo_close_path(handle->wayland.cairo); + cairo_fill(handle->wayland.cairo); } static void MwLLLineImpl(MwLL handle, MwPoint* points, MwLLColor color) { int i; - clip(handle); - - cairo_set_antialias(handle->wayland.front_cairo, CAIRO_ANTIALIAS_NONE); - cairo_set_line_cap(handle->wayland.front_cairo, CAIRO_LINE_CAP_SQUARE); - cairo_set_source_rgba(handle->wayland.front_cairo, color->common.red / 255.0, color->common.green / 255.0, color->common.blue / 255.0, 1.0); - cairo_new_path(handle->wayland.front_cairo); + cairo_set_line_cap(handle->wayland.cairo, CAIRO_LINE_CAP_SQUARE); + cairo_set_source_rgb(handle->wayland.cairo, color->common.red / 255.0, color->common.green / 255.0, color->common.blue / 255.0); + cairo_new_path(handle->wayland.cairo); for(i = 0; i < 2; i++) { if(i == 0) { - cairo_move_to(handle->wayland.front_cairo, points[i].x, points[i].y); + cairo_move_to(handle->wayland.cairo, points[i].x, points[i].y); } else { - cairo_line_to(handle->wayland.front_cairo, points[i].x, points[i].y); + cairo_line_to(handle->wayland.cairo, points[i].x, points[i].y); } } - cairo_close_path(handle->wayland.front_cairo); - cairo_stroke(handle->wayland.front_cairo); + cairo_close_path(handle->wayland.cairo); + cairo_stroke(handle->wayland.cairo); +} - handle->wayland.events_pending = 1; +static void MwLLBeginDrawImpl(MwLL handle) { +} + +static void MwLLEndDrawImpl(MwLL handle) { + update_buffer(handle); } static MwLLColor MwLLAllocColorImpl(MwLL handle, int r, int g, int b) { MwLLColor c = malloc(sizeof(*c)); - (void)handle; c->common.red = r; c->common.blue = b; @@ -2131,7 +822,6 @@ static MwLLColor MwLLAllocColorImpl(MwLL handle, int r, int g, int b) { } static void MwLLColorUpdateImpl(MwLL handle, MwLLColor c, int r, int g, int b) { - (void)handle; c->common.red = r; c->common.blue = b; c->common.green = g; @@ -2142,99 +832,20 @@ static void MwLLFreeColorImpl(MwLLColor color) { } static int MwLLPendingImpl(MwLL handle) { - struct timespec timeout = { - .tv_nsec = 1, - .tv_sec = 0, - }; - struct pollfd fd = { - .fd = wl_display_get_fd(handle->wayland.display), - .events = POLLOUT, - }; - int pending = 0; - -#ifdef USE_DBUS - if(wl_call_tbl.has_dbus) { - if(handle->wayland.dark_theme_detection) { - - handle->wayland.dark_theme_detection = MwFALSE; - detect_dark_theme(handle); - MwLLDispatch(handle, draw, NULL); - } else { - MwLLDBusPortalPoll(&wl_call_tbl.dbus, &handle->wayland.dbus, handle, "org.freedesktop.portal.Settings", "org.freedesktop.appearance", "color-scheme", &dark_theme_listener); - } - } -#endif - - if(!handle->wayland.did_initial_resize) { - recursive_dispatch_resize(handle); - handle->wayland.did_initial_resize = 1; - } - - if(!MwWaylandAlwaysRender) { - wl_display_prepare_read(handle->wayland.display); - if(!poll(&fd, 1, timeout.tv_nsec)) { - wl_display_cancel_read(handle->wayland.display); - } else { - wl_display_read_events(handle->wayland.display); - wl_display_flush(handle->wayland.display); - if((pending = wl_display_dispatch_pending(handle->wayland.display)) < 0) { - wl_display_cancel_read(handle->wayland.display); - } - } - } else { - if((pending = wl_display_dispatch_pending(handle->wayland.display)) < 0) { - wl_display_cancel_read(handle->wayland.display); - } - wl_display_flush(handle->wayland.display); - } - - if(MwWaylandAlwaysRender) { - handle->wayland.did_event_loop_early = MwTRUE; - event_loop(handle); - return pending; - } - - update_buffer(handle, &handle->wayland.framebuffer); - if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL) { - update_buffer(handle, &handle->wayland.backbuffer); - } - - return handle->wayland.force_render || handle->wayland.events_pending || pending; + return event_loop(handle); } static void MwLLNextEventImpl(MwLL handle) { - if(!MwWaylandAlwaysRender) { - if(handle->wayland.did_event_loop_early) { - handle->wayland.did_event_loop_early = MwFALSE; - } else { - event_loop(handle); - } - } - - if(handle->wayland.force_render) { - MwLLDispatch(handle, draw, NULL); - if(handle->wayland.configured) update_buffer(handle, &handle->wayland.framebuffer); - handle->wayland.force_render = 0; - } - if(handle->wayland.events_pending) { - handle->wayland.events_pending = 0; - } } static void MwLLSetTitleImpl(MwLL handle, const char* title) { if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL) { xdg_toplevel_set_title(handle->wayland.toplevel->xdg_top_level, title); } - if(!handle->wayland.has_decorations) { - strncpy(handle->wayland.title, title, 255); - MwLLBeginDraw(handle); - MwLLEndDraw(handle); - } } static MwLLPixmap MwLLCreatePixmapImpl(MwLL handle, unsigned char* data, int width, int height) { MwLLPixmap r = malloc(sizeof(*r)); - (void)handle; r->common.width = width; r->common.height = height; @@ -2277,168 +888,44 @@ static void MwLLDestroyPixmapImpl(MwLLPixmap pixmap) { static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { cairo_t* c; cairo_surface_t* cs; - cairo_t* selected_cairo = handle->wayland.selected_cairo ? handle->wayland.selected_cairo : handle->wayland.front_cairo; cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, rect->width, rect->height); c = cairo_create(cs); - clip(handle); - cairo_scale(c, (double)rect->width / pixmap->common.width, (double)rect->height / pixmap->common.height); - cairo_set_source_surface(c, pixmap->wayland.cs, 0, 0); - cairo_pattern_set_filter(cairo_get_source(c), CAIRO_FILTER_NEAREST); - - cairo_set_operator(handle->wayland.front_cairo, CAIRO_OPERATOR_OVER); - cairo_paint(c); - cairo_set_source_surface(selected_cairo, cs, rect->x, rect->y); - cairo_paint(selected_cairo); + cairo_set_source_rgb(handle->wayland.cairo, 1, 1, 1); + cairo_set_source_surface(handle->wayland.cairo, cs, rect->x, rect->y); + cairo_paint(handle->wayland.cairo); cairo_destroy(c); cairo_surface_destroy(cs); - - MwLLForceRender(handle); - wl_surface_damage(handle->wayland.framebuffer.surface, 0, 0, handle->wayland.ww, handle->wayland.wh); } static void MwLLSetIconImpl(MwLL handle, MwLLPixmap pixmap) { - if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL) { - if(WAYLAND_GET_INTERFACE(handle->wayland, xdg_toplevel_icon_manager_v1) != NULL) { - struct xdg_toplevel_icon_manager_v1* icon_manager = WAYLAND_GET_INTERFACE(handle->wayland, xdg_toplevel_icon_manager_v1)->context; - struct xdg_toplevel_icon_v1* icon = xdg_toplevel_icon_manager_v1_create_icon(icon_manager); - MwU64 size = pixmap->common.width * pixmap->common.height * 4; - int i = 0; - - if(handle->wayland.icon == NULL) { - handle->wayland.icon = malloc(sizeof(struct _MwLLWaylandShmBuffer)); - memset(handle->wayland.icon, 0, sizeof(struct _MwLLWaylandShmBuffer)); - handle->wayland.icon->shm = handle->wayland.framebuffer.shm; - } - - if(handle->wayland.icon->setup) { - buffer_destroy(handle->wayland.icon); - wl_surface_destroy(handle->wayland.icon->surface); - } - handle->wayland.icon->surface = wl_compositor_create_surface(handle->wayland.compositor); - - buffer_setup(handle->wayland.icon, pixmap->common.width, pixmap->common.height); - - wl_surface_attach(handle->wayland.icon->surface, handle->wayland.icon->shm_buffer, 0, 0); - wl_surface_commit(handle->wayland.icon->surface); - - for(; i < size; i += 2) { - handle->wayland.icon->buf_back[i] = pixmap->common.raw[i + 2]; - handle->wayland.icon->buf_back[i + 1] = pixmap->common.raw[i + 1]; - handle->wayland.icon->buf_back[i + 2] = pixmap->common.raw[i + 0]; - handle->wayland.icon->buf_back[i + 3] = 255; - } - - if(handle->wayland.configured) update_buffer(handle, handle->wayland.icon); - - xdg_toplevel_icon_v1_add_buffer(icon, handle->wayland.icon->shm_buffer, 1); - - xdg_toplevel_icon_manager_v1_set_icon(icon_manager, handle->wayland.toplevel->xdg_top_level, icon); - } - } } static void MwLLForceRenderImpl(MwLL handle) { - wl_surface_damage(handle->wayland.framebuffer.surface, 0, 0, handle->wayland.ww, handle->wayland.wh); + wl_surface_damage(handle->wayland.surface, 0, 0, handle->wayland.ww, handle->wayland.wh); - handle->wayland.force_render = MwTRUE; - if(handle->wayland.parent) { - handle->wayland.parent->wayland.force_render = MwTRUE; + /* + if(handle->wayland.egl_setup) { + timed_redraw_by_epoch(handle, 25); } + */ } static void MwLLSetCursorImpl(MwLL handle, MwCursor* image, MwCursor* mask) { - int x, y, xs, ys; - - if(handle->wayland.cursor.setup) { - buffer_destroy(&handle->wayland.cursor); - wl_surface_destroy(handle->wayland.cursor.surface); - } - buffer_setup(&handle->wayland.cursor, image->width, image->height); - memset(handle->wayland.cursor.buf_back, 0, handle->wayland.cursor.buf_size); - - xs = -mask->x + image->x; - ys = mask->height + mask->y; - ys = image->height + image->y - ys; - - for(y = 0; y < mask->height; y++) { - unsigned int d = mask->data[y]; - for(x = mask->width - 1; x >= 0; x--) { - int idx = ((y * image->width) + x) * 4; - - if(d & 1) { - handle->wayland.cursor.buf_back[idx + 3] = 255; - }; - d = d >> 1; - } - } - for(y = 0; y < image->height; y++) { - unsigned int d = image->data[y]; - for(x = image->width - 1; x >= 0; x--) { - int px = 0; - int idx = (((y + ys) * image->width) + (x + xs)) * 4; - - if(d & 1) { - px = 255; - }; - - handle->wayland.cursor.buf_back[idx] = px; - handle->wayland.cursor.buf_back[idx + 1] = px; - handle->wayland.cursor.buf_back[idx + 2] = px; - d = d >> 1; - } - } - - handle->wayland.cursor.surface = wl_compositor_create_surface(handle->wayland.compositor); - wl_surface_attach(handle->wayland.cursor.surface, handle->wayland.cursor.shm_buffer, 0, 0); - wl_surface_commit(handle->wayland.cursor.surface); - update_buffer(handle, &handle->wayland.cursor); - - /* If there's currently a pointer, set it up. (Otherwise, it'll be setup during the pointer enter event) */ - if(handle->wayland.pointer != NULL) { - // wl_pointer_set_cursor(handle->wayland.pointer, handle->wayland.pointer_serial, handle->wayland.cursor.surface, 0, 0); - } } static void MwLLDetachImpl(MwLL handle, MwPoint* point) { - MwLL p = handle->wayland.parent; - int x = 0, y = 0; - while(p != NULL) { - x += p->wayland.x; - y += p->wayland.y; - p = p->wayland.parent; - } - - handle->wayland.detatching = MwTRUE; - handle->wayland.detach_point = *point; - handle->wayland.detach_point.x += x; - handle->wayland.detach_point.y += y; } static void MwLLShowImpl(MwLL handle, int show) { - if(!handle->wayland.configured) { - return; - } - /* Some guy on a mailing list said that "abusing" wl_surface_attach for this purpose is bad? This is documented behavior so please I beg of you let me know if there's a compositor that actually has a problem with this. */ - if(handle->wayland.framebuffer.surface) { - wl_surface_attach(handle->wayland.framebuffer.surface, show ? handle->wayland.framebuffer.shm_buffer : NULL, 0, 0); - wl_surface_commit(handle->wayland.framebuffer.surface); - } - if(handle->wayland.backbuffer.surface) { - wl_surface_attach(handle->wayland.backbuffer.surface, show ? handle->wayland.backbuffer.shm_buffer : NULL, 0, 0); - wl_surface_commit(handle->wayland.backbuffer.surface); - } } static void MwLLMakePopupImpl(MwLL handle, MwLL parent) { - (void)handle; - (void)parent; - /* Wayland doesn't have "popups" in the Milsko sense per se. xdg_popup is closer to ToolWindow and as such is what we use there. So just like the Mac backend, this is just left alone. */ } static void MwLLSetSizeHintsImpl(MwLL handle, int minx, int miny, int maxx, int maxy) { @@ -2449,7 +936,6 @@ static void MwLLSetSizeHintsImpl(MwLL handle, int minx, int miny, int maxx, int } static void MwLLMakeBorderlessImpl(MwLL handle, int toggle) { - (void)toggle; if(handle->wayland.type == MWLL_WAYLAND_TOPLEVEL) { if(WAYLAND_GET_INTERFACE(handle->wayland, zxdg_decoration_manager_v1) != NULL) { zxdg_decoration_manager_v1_context_t* dec = WAYLAND_GET_INTERFACE(handle->wayland, zxdg_decoration_manager_v1)->context; @@ -2459,193 +945,51 @@ static void MwLLMakeBorderlessImpl(MwLL handle, int toggle) { zxdg_toplevel_decoration_v1_set_mode( dec->decoration, ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE); + } else { + /* TODO: hide our custom window decorations when we have them. */ + printf("zxdg null\n"); } } } static void MwLLFocusImpl(MwLL handle) { - (void)handle; - printf("[WARNING] MwLLFocus not supported on Wayland\n"); } static void MwLLGrabPointerImpl(MwLL handle, int toggle) { - MwLL topmost_parent = handle; - while(topmost_parent->wayland.parent) topmost_parent = topmost_parent->wayland.parent; - if(handle->wayland.pointer_constraints && handle->wayland.relative_pointer_manager) { - if(toggle) { - topmost_parent->wayland.locked_pointer = zwp_pointer_constraints_v1_lock_pointer(topmost_parent->wayland.pointer_constraints, topmost_parent->wayland.backbuffer.surface, topmost_parent->wayland.pointer, topmost_parent->wayland.region, ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_PERSISTENT); - wl_surface_commit(topmost_parent->wayland.backbuffer.surface); - zwp_locked_pointer_v1_set_cursor_position_hint(topmost_parent->wayland.locked_pointer, 0, CSD_BORDER_FRAME_TOP); - handle->wayland.relative_pointer = zwp_relative_pointer_manager_v1_get_relative_pointer(handle->wayland.relative_pointer_manager, handle->wayland.pointer); - zwp_relative_pointer_v1_add_listener(handle->wayland.relative_pointer, &relative_pointer_listener, topmost_parent); - } else { - if(topmost_parent->wayland.locked_pointer) { - zwp_locked_pointer_v1_destroy(topmost_parent->wayland.locked_pointer); - topmost_parent->wayland.locked_pointer = NULL; - } - if(topmost_parent->wayland.relative_pointer) { - zwp_relative_pointer_v1_destroy(topmost_parent->wayland.relative_pointer); - topmost_parent->wayland.relative_pointer = NULL; - } - } - handle->wayland.do_lock_pointer = toggle; - } else { - printf("[WARNING] MwLLGrabPointer not supported in Wayland session, zwp_pointer_constraints_v1 and relative_pointer_manager_v1 are required.\n"); - } } -static void MwLLSetClipboardImpl(MwLL handle, const char* text, int clipboard_type) { - int i; - - if(handle->wayland.clipboard_buffer != NULL) { - free(handle->wayland.clipboard_buffer); - } - handle->wayland.clipboard_buffer = malloc(strlen(text)); - strcpy(handle->wayland.clipboard_buffer, text); - - if(clipboard_type == MwCLIPBOARD_PRIMARY) { - if(handle->wayland.supports_zwp) { - for(i = 0; i < arrlen(handle->wayland.clipboard_devices_zwp); i++) { - wl_clipboard_device_context_t* device = handle->wayland.clipboard_devices_zwp[i]; - zwp_primary_selection_device_v1_set_selection(device->device.zwp, handle->wayland.clipboard_source.zwp, handle->wayland.keyboard_serial); - } - } else { - printf("[WARNING] Primary clipboard requested for MwLLSetClipboard, but this Wayland compositor doesn't support it.\n"); - } - } else { - for(i = 0; i < arrlen(handle->wayland.clipboard_devices_wl); i++) { - wl_clipboard_device_context_t* device = handle->wayland.clipboard_devices_wl[i]; - wl_data_device_set_selection(device->device.wl, handle->wayland.clipboard_source.wl, handle->wayland.keyboard_serial); - } - } +static void MwLLSetClipboardImpl(MwLL handle, const char* text) { } -static void MwLLGetClipboardImpl(MwLL handle, int clipboard_type) { - int i; - if(clipboard_type == MwCLIPBOARD_PRIMARY) { - if(handle->wayland.supports_zwp) { - for(i = 0; i < arrlen(handle->wayland.clipboard_devices_zwp); i++) { - wl_clipboard_read( - handle->wayland.clipboard_devices_zwp[i], clipboard_type); - } - } else { - printf("[WARNING] Primary clipboard requested for MwLLSetClipboard, but this Wayland compositor doesn't support it.\n"); - } - } else { - for(i = 0; i < arrlen(handle->wayland.clipboard_devices_wl); i++) { - wl_clipboard_read( - handle->wayland.clipboard_devices_wl[i], clipboard_type); - } - } - return; +static char* MwLLGetClipboardImpl(MwLL handle) { + char* r = NULL; + return r; } static void MwLLMakeToolWindowImpl(MwLL handle) { - handle->wayland.type_to_be = MWLL_WAYLAND_POPUP; } static void MwLLGetCursorCoordImpl(MwLL handle, MwPoint* point) { - *point = handle->wayland.cur_mouse_pos; } static void MwLLGetScreenSizeImpl(MwLL handle, MwRect* rect) { - rect->x = 0; - rect->y = 0; - rect->width = handle->wayland.mw; - rect->height = handle->wayland.mh; } static void MwLLBeginStateChangeImpl(MwLL handle) { - (void)handle; - /* no-op */ + MwLLShow(handle, 0); } static void MwLLEndStateChangeImpl(MwLL handle) { - if(handle->wayland.detatching) { - MwLL topmost_parent = handle->wayland.parent; - - while(topmost_parent->wayland.type != MWLL_WAYLAND_TOPLEVEL) { - topmost_parent = topmost_parent->wayland.parent; - } - switch(handle->wayland.type) { - case MWLL_WAYLAND_UNKNOWN: - break; - case MWLL_WAYLAND_TOPLEVEL: - destroy_toplevel(handle); - break; - case MWLL_WAYLAND_SUBLEVEL: - destroy_sublevel(handle); - break; - case MWLL_WAYLAND_POPUP: - destroy_popup(handle); - break; - } - - wl_flush(handle); - - widget_setup(handle, handle->wayland.parent, handle->wayland.detach_point.x, handle->wayland.detach_point.y, handle->wayland.ww, handle->wayland.wh, handle->wayland.type_to_be); - - if(!handle->wayland.parent) - handle->wayland.dark_theme_detection = MwTRUE; - - if(handle->common.user) { - MwWidget w = handle->common.user; - int i; - for(i = 0; i < arrlen(w->children); i++) { - if(w->children[i]->lowlevel->wayland.type == MWLL_WAYLAND_SUBLEVEL) { - MwLL child = w->children[i]->lowlevel; - child->wayland.sublevel->xdg_surface = handle->wayland.popup->xdg_surface; - wl_subsurface_destroy(child->wayland.sublevel->subsurface); - wl_flush(handle); - - child->wayland.sublevel->subsurface = wl_subcompositor_get_subsurface(child->wayland.sublevel->subcompositor, child->wayland.framebuffer.surface, handle->wayland.framebuffer.surface); - wl_subsurface_set_desync(child->wayland.sublevel->subsurface); - wl_subsurface_set_position(child->wayland.sublevel->subsurface, child->wayland.x, child->wayland.y); - - wl_subsurface_place_above(child->wayland.sublevel->subsurface, handle->wayland.framebuffer.surface); - MwLLEndStateChangeImpl(w->children[i]->lowlevel); - - currentlyHeldWidget = NULL; - } - } - } - - MwLLForceRender(handle); - if(handle->wayland.parent != NULL) { - MwLLForceRender(handle->wayland.parent); - } - - handle->wayland.events_pending = 1; - - handle->wayland.detatching = MwFALSE; - } -} - -static void MwLLSetDarkThemeImpl(MwLL handle, int toggle) { - (void)handle; - (void)toggle; + MwLLShow(handle, 1); } static int MwLLWaylandCallInitImpl(void) { #ifdef __linux__ - MwBool loadWayland = MwFALSE; - if(getenv("MILSKO_BACKEND")) { - loadWayland |= - (strcmp(getenv("MILSKO_BACKEND"), "wayland") == 0); - } else if(getenv("WAYLAND_DISPLAY")) { - loadWayland |= (getenv("WAYLAND_DISPLAY") != NULL); - } - - if(loadWayland) { - if(wayland_load_funcs()) { - return 1; - } - wl_log_set_handler_client(wl_logger); - - return 0; + if(strcmp(getenv("XDG_SESSION_TYPE"), "wayland")) { + return 1; } #endif - return 1; + return 0; } #include "call.c" diff --git a/src/backend/x11.c b/src/backend/x11.c index 704bd7bd6..c44daafd1 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -2,190 +2,6 @@ #include "../../external/stb_ds.h" -#define ClipboardTimeout 100 - -static struct symtbl { - void* lib_xlib; - void* lib_xrender; - MwBool has_xrender; - -#ifdef USE_DBUS - MwLLDBusFuncTable dbus; - MwBool has_dbus; -#endif - - int (*XClearWindow)(Display* display, Window w); - XImage* (*XCreateImage)(Display*, Visual*, unsigned int, int, int, char*, unsigned int, unsigned int, int, int); - Display* (*XOpenDisplay)(_Xconst char*); - char* (*XKeysymToString)(KeySym); - Atom (*XInternAtom)(Display*, _Xconst char*, Bool); - Cursor (*XCreatePixmapCursor)(Display*, Pixmap, Pixmap, XColor*, XColor*, unsigned int, unsigned int); - GC (*XCreateGC)(Display*, Drawable, unsigned long, XGCValues*); - Pixmap (*XCreatePixmap)(Display*, Drawable, unsigned int, unsigned int, unsigned int); - Window (*XCreateSimpleWindow)(Display*, Window, int, int, unsigned int, unsigned int, unsigned int, unsigned long, unsigned long); - VisualID (*XVisualIDFromVisual)(Visual*); - Window (*XRootWindow)(Display*, int); - Status (*XSetWMProtocols)(Display*, Window, Atom*, int); - int (*XSetTransientForHint)(Display*, Window, Window); - Status (*XAllocColor)(Display*, Colormap, XColor*); - int (*XChangeProperty)(Display*, Window, Atom, Atom, int, int, _Xconst unsigned char*, int); - int (*XChangeWindowAttributes)(Display*, Window, unsigned long, XSetWindowAttributes*); - Bool (*XCheckTypedWindowEvent)(Display*, Window, int, XEvent*); - Bool (*XCheckWindowEvent)(Display*, Window, long, XEvent*); - int (*XCloseDisplay)(Display*); - int (*XConfigureWindow)(Display*, Window, unsigned int, XWindowChanges*); - int (*XConvertSelection)(Display*, Atom, Atom, Atom, Window, Time); - int (*XCopyArea)(Display*, Drawable, Drawable, GC, int, int, unsigned int, unsigned int, int, int); - int (*XDefaultScreen)(Display*); - int (*XDefineCursor)(Display*, Window, Cursor); - int (*XDeleteProperty)(Display*, Window, Atom); - int (*XDestroyWindow)(Display*, Window); - int (*XDrawLine)(Display*, Drawable, GC, int, int, int, int); - int (*XFillPolygon)(Display*, Drawable, GC, XPoint*, int, int, int); - int (*XFree)(void*); - int (*XFreeCursor)(Display*, Cursor); - int (*XFreeGC)(Display*, GC); - int (*XFreePixmap)(Display*, Pixmap); - Status (*XGetGeometry)(Display*, Drawable, Window*, int*, int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*); - int (*XGetWindowProperty)(Display*, Window, Atom, long, long, Bool, Atom, Atom*, int*, unsigned long*, unsigned long*, unsigned char**); - Status (*XGetWindowAttributes)(Display*, Window, XWindowAttributes*); - int (*XMapWindow)(Display*, Window); - int (*XNextEvent)(Display*, XEvent*); - int (*XPending)(Display*); - int (*XPutBackEvent)(Display*, XEvent*); - int (*XPutImage)(Display*, Drawable, GC, XImage*, int, int, int, int, unsigned int, unsigned int); - Bool (*XQueryPointer)(Display*, Window, Window*, Window*, int*, int*, int*, int*, unsigned int*); - Status (*XQueryTree)(Display*, Window, Window*, Window*, Window**, unsigned int*); - int (*XReparentWindow)(Display*, Window, Window, int, int); - int (*XSelectInput)(Display*, Window, long); - Status (*XSendEvent)(Display*, Window, Bool, long, XEvent*); - int (*XSetClipMask)(Display*, GC, Pixmap); - int (*XSetClipOrigin)(Display*, GC, int, int); - int (*XSetForeground)(Display*, GC, unsigned long); - int (*XSetGraphicsExposures)(Display*, GC, Bool); - int (*XSetInputFocus)(Display*, Window, int, Time); - int (*XSetWindowBackgroundPixmap)(Display*, Window, Pixmap); - int (*XSync)(Display*, Bool); - Bool (*XTranslateCoordinates)(Display*, Window, Window, int, int, int*, int*, Window*); - int (*XUnmapWindow)(Display*, Window); - int (*XWarpPointer)(Display*, Window, Window, int, int, unsigned int, unsigned int, int, int); - char* (*XSetLocaleModifiers)(const char*); - XIM (*XOpenIM)(Display*, struct _XrmHashBucketRec*, char*, char*); - Status (*XCloseIM)(XIM); - XIC (*XCreateIC)(XIM, ...); - void (*XDestroyIC)(XIC); - void (*XSetICFocus)(XIC); - - XSizeHints* (*XAllocSizeHints)(void); - XVisualInfo* (*XGetVisualInfo)(Display*, long, XVisualInfo*, int*); - Status (*XGetWMNormalHints)(Display*, Window, XSizeHints*, long*); - Status (*XGetWMSizeHints)(Display*, Window, XSizeHints*, long*, Atom); - int (*XLookupString)(XKeyEvent*, char*, int, KeySym*, XComposeStatus*); - int (*XSetStandardProperties)(Display*, Window, _Xconst char*, _Xconst char*, Pixmap, char**, int, XSizeHints*); - void (*XSetWMNormalHints)(Display*, Window, XSizeHints*); - void (*XSetWMSizeHints)(Display*, Window, XSizeHints*, Atom); - -#if USE_XRENDER - Bool (*XRenderQueryExtension)(Display* dpy, int* event_basep, int* error_basep); - - XRenderPictFormat* (*XRenderFindStandardFormat)(Display* dpy, int format); - - Picture (*XRenderCreatePicture)(Display* dpy, Drawable drawable, - _Xconst XRenderPictFormat* format, - unsigned long valuemask, - _Xconst XRenderPictureAttributes* attributes); - - void (*XRenderFreePicture)(Display* dpy, Picture picture); - - void (*XRenderSetPictureTransform)(Display* dpy, Picture picture, - XTransform* transform); - - void (*XRenderComposite)(Display* dpy, int op, Picture src, Picture mask, - Picture dst, int src_x, int src_y, int mask_x, int mask_y, - int dst_x, int dst_y, unsigned int width, - unsigned int height); -#endif -} xsymtbl; - -#define XClearWindow xsymtbl.XClearWindow -#define XCreateIC xsymtbl.XCreateIC -#define XFree xsymtbl.XFree -#define XFreeCursor xsymtbl.XFreeCursor -#define XConfigureWindow xsymtbl.XConfigureWindow -#define XCheckTypedWindowEvent xsymtbl.XCheckTypedWindowEvent -#define XGetWMNormalHints xsymtbl.XGetWMNormalHints -#define XLookupString xsymtbl.XLookupString -#define XCreateImage xsymtbl.XCreateImage -#define XSetClipMask xsymtbl.XSetClipMask -#define XConvertSelection xsymtbl.XConvertSelection -#define XGetWindowProperty xsymtbl.XGetWindowProperty -#define XSetWMNormalHints xsymtbl.XSetWMNormalHints -#define XTranslateCoordinates xsymtbl.XTranslateCoordinates -#define XCreateSimpleWindow xsymtbl.XCreateSimpleWindow -#define XGetWMSizeHints xsymtbl.XGetWMSizeHints -#define XRootWindow xsymtbl.XRootWindow -#define XOpenDisplay xsymtbl.XOpenDisplay -#define XCopyArea xsymtbl.XCopyArea -#define XDeleteProperty xsymtbl.XDeleteProperty -#define XDrawLine xsymtbl.XDrawLine -#define XSetGraphicsExposures xsymtbl.XSetGraphicsExposures -#define XDestroyWindow xsymtbl.XDestroyWindow -#define XCloseDisplay xsymtbl.XCloseDisplay -#define XSetForeground xsymtbl.XSetForeground -#define XGetGeometry xsymtbl.XGetGeometry -#define XUnmapWindow xsymtbl.XUnmapWindow -#define XSetTransientForHint xsymtbl.XSetTransientForHint -#define XSetWMSizeHints xsymtbl.XSetWMSizeHints -#define XCreatePixmapCursor xsymtbl.XCreatePixmapCursor -#define XFreeGC xsymtbl.XFreeGC -#define XNextEvent xsymtbl.XNextEvent -#define XSetWMProtocols xsymtbl.XSetWMProtocols -#define XDefaultScreen xsymtbl.XDefaultScreen -#define XKeysymToString xsymtbl.XKeysymToString -#define XMapWindow xsymtbl.XMapWindow -#define XPutBackEvent xsymtbl.XPutBackEvent -#define XCreateGC xsymtbl.XCreateGC -#define XSelectInput xsymtbl.XSelectInput -#define XSetInputFocus xsymtbl.XSetInputFocus -#define XDestroyIC xsymtbl.XDestroyIC -#define XSync xsymtbl.XSync -#define XSendEvent xsymtbl.XSendEvent -#define XSetICFocus xsymtbl.XSetICFocus -#define XWarpPointer xsymtbl.XWarpPointer -#define XPutImage xsymtbl.XPutImage -#define XFillPolygon xsymtbl.XFillPolygon -#define XOpenIM xsymtbl.XOpenIM -#define XDefineCursor xsymtbl.XDefineCursor -#define XSetWindowBackgroundPixmap xsymtbl.XSetWindowBackgroundPixmap -#define XAllocColor xsymtbl.XAllocColor -#define XInternAtom xsymtbl.XInternAtom -#define XQueryPointer xsymtbl.XQueryPointer -#define XGetVisualInfo xsymtbl.XGetVisualInfo -#define XVisualIDFromVisual xsymtbl.XVisualIDFromVisual -#define XSetLocaleModifiers xsymtbl.XSetLocaleModifiers -#define XGetWindowAttributes xsymtbl.XGetWindowAttributes -#define XSetStandardProperties xsymtbl.XSetStandardProperties -#define XChangeProperty xsymtbl.XChangeProperty -#define XAllocSizeHints xsymtbl.XAllocSizeHints -#define XCheckWindowEvent xsymtbl.XCheckWindowEvent -#define XFreePixmap xsymtbl.XFreePixmap -#define XReparentWindow xsymtbl.XReparentWindow -#define XCreatePixmap xsymtbl.XCreatePixmap -#define XSetClipOrigin xsymtbl.XSetClipOrigin -#define XCloseIM xsymtbl.XCloseIM -#define XQueryTree xsymtbl.XQueryTree -#define XPending xsymtbl.XPending -#define XChangeWindowAttributes xsymtbl.XChangeWindowAttributes - -#if USE_XRENDER -#define XRenderFindStandardFormat xsymtbl.XRenderFindStandardFormat -#define XRenderCreatePicture xsymtbl.XRenderCreatePicture -#define XRenderFreePicture xsymtbl.XRenderFreePicture -#define XRenderComposite xsymtbl.XRenderComposite -#define XRenderQueryExtension xsymtbl.XRenderQueryExtension -#define XRenderSetPictureTransform xsymtbl.XRenderSetPictureTransform -#endif - typedef struct mwm_hints { unsigned long flags; unsigned long functions; @@ -193,16 +9,16 @@ typedef struct mwm_hints { long input_mode; unsigned long status; } mwm_hints_t; - enum mwm_hints_enum { MWM_HINTS_FUNCTIONS = (1L << 0), MWM_HINTS_DECORATIONS = (1L << 1), - MWM_FUNC_ALL = (1L << 0), - MWM_FUNC_RESIZE = (1L << 1), - MWM_FUNC_MOVE = (1L << 2), - MWM_FUNC_MINIMIZE = (1L << 3), - MWM_FUNC_MAXIMIZE = (1L << 4), - MWM_FUNC_CLOSE = (1L << 5) + + MWM_FUNC_ALL = (1L << 0), + MWM_FUNC_RESIZE = (1L << 1), + MWM_FUNC_MOVE = (1L << 2), + MWM_FUNC_MINIMIZE = (1L << 3), + MWM_FUNC_MAXIMIZE = (1L << 4), + MWM_FUNC_CLOSE = (1L << 5) }; static unsigned long mask = ExposureMask | StructureNotifyMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | EnterWindowMask | KeymapNotify | FocusChangeMask; @@ -313,18 +129,6 @@ static XVisualInfo* get_visual_info(Display* display) { return XGetVisualInfo(display, VisualIDMask, &xvi, &n); } -#ifdef USE_DBUS -static void detect_dark_theme(MwLL handle) { - MwU32 value = 0; - MwU32 dark_theme = 0; - MwLLDBusPortalGet(&xsymtbl.dbus, &handle->x11.dbus, "org.freedesktop.portal.Settings", "org.freedesktop.appearance", "color-scheme", &value); - - dark_theme = (value == 1) ? 1 : 0; - - MwLLDispatch(handle, dark_theme, &dark_theme); -} -#endif - static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { MwLL r; Window p; @@ -354,8 +158,7 @@ static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { r->x11.top = 0; r->x11.toplevel = 0; } - r->x11.window = XCreateSimpleWindow(r->x11.display, p, px, py, width, height, 0, 0, WhitePixel(r->x11.display, DefaultScreen(r->x11.display))); - + r->x11.window = XCreateSimpleWindow(r->x11.display, p, px, py, width, height, 0, 0, WhitePixel(r->x11.display, DefaultScreen(r->x11.display))); sh.flags = PWinGravity; sh.win_gravity = StaticGravity; XSetWMNormalHints(r->x11.display, r->x11.window, &sh); @@ -384,7 +187,6 @@ static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { XFree(xvi); -#ifdef DO_XIM XSetLocaleModifiers(""); if((r->x11.xim = XOpenIM(r->x11.display, 0, 0, 0)) == NULL) { XSetLocaleModifiers("@im=none"); @@ -397,7 +199,6 @@ static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { XNFocusWindow, r->x11.window, NULL); XSetICFocus(r->x11.xic); -#endif r->common.copy_buffer = 1; r->common.type = MwLLBackendX11; @@ -408,19 +209,10 @@ static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { r->x11.grabbed = 0; r->x11.force_render = 0; - r->x11.colormap = DefaultColormap(r->x11.display, XDefaultScreen(r->x11.display)); - r->x11.wm_delete = XInternAtom(r->x11.display, "WM_DELETE_WINDOW", False); - r->x11.wm_protocols = XInternAtom(r->x11.display, "WM_PROTOCOLS", False); + r->x11.colormap = DefaultColormap(r->x11.display, XDefaultScreen(r->x11.display)); + r->x11.wm_delete = XInternAtom(r->x11.display, "WM_DELETE_WINDOW", False); XSetWMProtocols(r->x11.display, r->x11.window, &r->x11.wm_delete, 1); - r->x11.utf8_string = XInternAtom(r->x11.display, "UTF8_STRING", False); - r->x11.compound_text = XInternAtom(r->x11.display, "COMPOUND_TEXT", False); - r->x11.text = XInternAtom(r->x11.display, "TEXT", False); - r->x11.clipboard = XInternAtom(r->x11.display, "CLIPBOARD", False); - r->x11.selection = XInternAtom(r->x11.display, "_MILSKO_SELECTION_", False); - - r->x11.clipboard_pending = 0; - r->x11.gc = XCreateGC(r->x11.display, r->x11.window, 0, NULL); create_pixmap(r); @@ -446,24 +238,14 @@ static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { } } -#ifdef USE_DBUS - memset(&r->x11.dbus, 0, sizeof(r->x11.dbus)); - if(!parent && xsymtbl.has_dbus) { - xsymtbl.has_dbus = MwLLDBusNewContext(&xsymtbl.dbus, &r->x11.dbus); - r->x11.dark_theme_detection = MwTRUE; - } -#endif - return r; } static void MwLLDestroyImpl(MwLL handle) { MwLLDestroyCommon(handle); -#ifdef DO_XIM if(handle->x11.xic) XDestroyIC(handle->x11.xic); if(handle->x11.xim) XCloseIM(handle->x11.xim); -#endif destroy_pixmap(handle); XFreeGC(handle->x11.display, handle->x11.gc); @@ -474,12 +256,6 @@ static void MwLLDestroyImpl(MwLL handle) { if(handle->x11.toplevel) XCloseDisplay(handle->x11.display); -#ifdef USE_DBUS - if(!xsymtbl.has_dbus) { - MwLLDBusFreeContext(&xsymtbl.dbus, &handle->x11.dbus); - } -#endif - free(handle); } @@ -489,8 +265,6 @@ static void MwLLBeginDrawImpl(MwLL handle) { static void MwLLEndDrawImpl(MwLL handle) { (void)handle; - - XClearWindow(handle->x11.display, handle->x11.window); } static void MwLLPolygonImpl(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { @@ -637,22 +411,7 @@ static void MwLLFreeColorImpl(MwLLColor color) { static int MwLLPendingImpl(MwLL handle) { XEvent ev; - - if(handle->x11.dark_theme_detection) { - handle->x11.dark_theme_detection = MwFALSE; -#ifdef USE_DBUS - if(xsymtbl.has_dbus) { - detect_dark_theme(handle); - MwLLDispatch(handle, draw, NULL); - } -#endif - } - - if(handle->x11.clipboard_pending && (MwTimeGetTick() - handle->x11.clipboard_time) >= ClipboardTimeout) { - return 1; - } - - if(XCheckTypedWindowEvent(handle->x11.display, handle->x11.window, ClientMessage, &ev) || XCheckTypedWindowEvent(handle->x11.display, handle->x11.window, SelectionNotify, &ev) || XCheckWindowEvent(handle->x11.display, handle->x11.window, mask, &ev)) { + if(XCheckTypedWindowEvent(handle->x11.display, handle->x11.window, ClientMessage, &ev) || XCheckWindowEvent(handle->x11.display, handle->x11.window, mask, &ev)) { XPutBackEvent(handle->x11.display, &ev); return 1; } @@ -661,71 +420,44 @@ static int MwLLPendingImpl(MwLL handle) { static void MwLLNextEventImpl(MwLL handle) { XEvent ev; - - if(handle->x11.clipboard_pending && (MwTimeGetTick() - handle->x11.clipboard_time) >= ClipboardTimeout) { - Atom a = handle->x11.selection; - - handle->x11.clipboard_pending++; - handle->x11.clipboard_time = MwTimeGetTick(); - - switch(handle->x11.clipboard_pending) { - case 2: - a = handle->x11.compound_text; - break; - case 3: - a = handle->x11.text; - break; - case 4: - a = XA_STRING; - break; - case 5: - handle->x11.clipboard_pending = 0; - break; - } - - if(a != handle->x11.selection) { - XConvertSelection(handle->x11.display, handle->x11.clipboard, a, handle->x11.selection, handle->x11.window, CurrentTime); - } - } - - while(XCheckTypedWindowEvent(handle->x11.display, handle->x11.window, ClientMessage, &ev) || XCheckTypedWindowEvent(handle->x11.display, handle->x11.window, SelectionNotify, &ev) || XCheckWindowEvent(handle->x11.display, handle->x11.window, mask, &ev)) { + while(XCheckTypedWindowEvent(handle->x11.display, handle->x11.window, ClientMessage, &ev) || XCheckWindowEvent(handle->x11.display, handle->x11.window, mask, &ev)) { int render = 0; if(ev.type == Expose) { handle->x11.force_render = 0; render = 1; } else if(ev.type == ButtonPress) { - MwMouse p; + MwLLMouse p; p.point.x = ev.xbutton.x; p.point.y = ev.xbutton.y; if(ev.xbutton.button == Button1) { - p.button = MwMOUSE_LEFT; + p.button = MwLLMouseLeft; } else if(ev.xbutton.button == Button2) { - p.button = MwMOUSE_MIDDLE; + p.button = MwLLMouseMiddle; } else if(ev.xbutton.button == Button3) { - p.button = MwMOUSE_RIGHT; + p.button = MwLLMouseRight; } else if(ev.xbutton.button == Button4) { - p.button = MwMOUSE_WHEELUP; + p.button = MwLLMouseWheelUp; } else if(ev.xbutton.button == Button5) { - p.button = MwMOUSE_WHEELDOWN; + p.button = MwLLMouseWheelDown; } XSetInputFocus(handle->x11.display, handle->x11.window, RevertToNone, CurrentTime); MwLLDispatch(handle, down, &p); } else if(ev.type == ButtonRelease) { - MwMouse p; + MwLLMouse p; p.point.x = ev.xbutton.x; p.point.y = ev.xbutton.y; if(ev.xbutton.button == Button1) { - p.button = MwMOUSE_LEFT; + p.button = MwLLMouseLeft; } else if(ev.xbutton.button == Button2) { - p.button = MwMOUSE_MIDDLE; + p.button = MwLLMouseMiddle; } else if(ev.xbutton.button == Button3) { - p.button = MwMOUSE_RIGHT; + p.button = MwLLMouseRight; } else if(ev.xbutton.button == Button4) { - p.button = MwMOUSE_WHEELUP; + p.button = MwLLMouseWheelUp; } else if(ev.xbutton.button == Button5) { - p.button = MwMOUSE_WHEELDOWN; + p.button = MwLLMouseWheelDown; } MwLLDispatch(handle, up, &p); @@ -739,7 +471,7 @@ static void MwLLNextEventImpl(MwLL handle) { handle->x11.width = ev.xconfigure.width; handle->x11.height = ev.xconfigure.height; } else if(ev.type == ClientMessage) { - if(ev.xclient.message_type == handle->x11.wm_protocols && ev.xclient.data.l[0] == (long)handle->x11.wm_delete) { + if(ev.xclient.data.l[0] == (long)handle->x11.wm_delete) { MwLLDispatch(handle, close, NULL); } } else if(ev.type == FocusIn) { @@ -780,7 +512,8 @@ static void MwLLNextEventImpl(MwLL handle) { strcpy(str, s); } - if(MwStringIsKeyUTF8(sym)) { + /* HACK: this is bad, you can guess why */ + if(strlen(str) == 1) { char s = str[0]; if(ev.xkey.state & (ShiftMask | LockMask) && !(ev.xkey.state & (ControlMask | Mod1Mask))) { @@ -826,49 +559,6 @@ static void MwLLNextEventImpl(MwLL handle) { MwLLDispatch(handle, key_released, &n); } } - } else if(ev.type == SelectionNotify) { - handle->x11.clipboard_pending = 0; - - if(ev.xselection.property != None) { - Atom type; - int format; - unsigned long nitems, after, size; - unsigned char* pdat; - int ret = XGetWindowProperty(handle->x11.display, handle->x11.window, handle->x11.selection, 0, 0, False, AnyPropertyType, &type, &format, &nitems, &after, &pdat); - - if(pdat != NULL) XFree(pdat); - - size = after; - - if(ret == Success && type != None && format == 8) { - char* buf = malloc(size + 1); - int offset; - - for(offset = 0; after > 0; offset += nitems) { - ret = XGetWindowProperty(handle->x11.display, handle->x11.window, handle->x11.selection, offset / 4, after / 4 + 1, False, AnyPropertyType, &type, &format, &nitems, &after, &pdat); - - if(ret != Success) { - free(buf); - buf = NULL; - break; - } - - memcpy(buf + offset, pdat, nitems); - - XFree(pdat); - } - - if(buf != NULL) { - buf[size] = 0; - - MwLLDispatch(handle, clipboard, buf); - - free(buf); - } - } - - XDeleteProperty(handle->x11.display, handle->x11.window, handle->x11.selection); - } } if(render) { int x, y; @@ -908,9 +598,7 @@ static MwLLPixmap MwLLCreatePixmapImpl(MwLL handle, unsigned char* data, int wid r->x11.handle = handle; #ifdef USE_XRENDER - if(xsymtbl.has_xrender) { - r->x11.use_xrender = XRenderQueryExtension(handle->x11.display, &evbase, &erbase) ? 1 : 0; - } + r->x11.use_xrender = XRenderQueryExtension(handle->x11.display, &evbase, &erbase) ? 1 : 0; #endif r->x11.image = XCreateImage(handle->x11.display, DefaultVisual(handle->x11.display, DefaultScreen(handle->x11.display)), r->x11.depth, ZPixmap, 0, NULL, width, height, 32, 0); @@ -961,7 +649,7 @@ static void MwLLDestroyPixmapImpl(MwLLPixmap pixmap) { } static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { - if(rect->width <= 0 || rect->height <= 0 || pixmap->common.width <= 0 || pixmap->common.height <= 0) return; + if(rect->width == 0 || rect->height == 0 || pixmap->common.width == 0 || pixmap->common.height == 0) return; #ifdef USE_XRENDER if(pixmap->x11.image != NULL && pixmap->x11.use_xrender) { Pixmap px = XCreatePixmap(handle->x11.display, handle->x11.window, pixmap->common.width, pixmap->common.height, pixmap->x11.depth); @@ -1119,8 +807,8 @@ Cursor MwLLX11CreateCursor(Display* display, MwCursor* image, MwCursor* mask) { XColor cfg, cbg; xs = -mask->x + image->x; - ys = mask->height + mask->y; - ys = image->height + image->y - ys; + ys = MwCursorDataHeight + mask->y; + ys = MwCursorDataHeight + image->y - ys; memset(cimage->data, 0, cimage->bytes_per_line * cimage->height); memset(cmask->data, 0, cmask->bytes_per_line * cmask->height); @@ -1157,7 +845,7 @@ Cursor MwLLX11CreateCursor(Display* display, MwCursor* image, MwCursor* mask) { XPutImage(display, pimage, imagegc, cimage, 0, 0, 0, 0, MwCursorDataHeight, MwCursorDataHeight); XPutImage(display, pmask, maskgc, cmask, 0, 0, 0, 0, MwCursorDataHeight, MwCursorDataHeight); - cur = XCreatePixmapCursor(display, pimage, pmask, &cfg, &cbg, xs - image->x, ys + (MwCursorDataHeight + image->y)); + cur = XCreatePixmapCursor(display, pimage, pmask, &cfg, &cbg, xs, ys); XFreePixmap(display, pimage); XFreePixmap(display, pmask); @@ -1261,23 +949,52 @@ static void MwLLGrabPointerImpl(MwLL handle, int toggle) { } } -static void MwLLSetClipboardImpl(MwLL handle, const char* text, int clipboard_type) { +static void MwLLSetClipboardImpl(MwLL handle, const char* text) { /* TODO */ (void)handle; (void)text; - (void)clipboard_type; } -static void MwLLGetClipboardImpl(MwLL handle, int clipboard_type) { - (void)clipboard_type; +static char* MwLLGetClipboardImpl(MwLL handle) { + Atom clip, target, prop; + XEvent ev; + XEvent* queue = NULL; + char* r = NULL; - if(handle->x11.clipboard_pending) return; + clip = XInternAtom(handle->x11.display, "CLIPBOARD", 0); + target = XA_STRING; + prop = XInternAtom(handle->x11.display, "XSEL_DATA", 0); - XConvertSelection(handle->x11.display, handle->x11.clipboard, handle->x11.utf8_string, handle->x11.selection, handle->x11.window, CurrentTime); + XConvertSelection(handle->x11.display, clip, target, prop, handle->x11.window, CurrentTime); - handle->x11.clipboard_pending = 1; - handle->x11.clipboard_time = MwTimeGetTick(); + while(1) { + XNextEvent(handle->x11.display, &ev); + if(ev.type == SelectionNotify) { + if(ev.xselection.selection == clip && ev.xselection.property != 0) { + Atom t; + unsigned long size, N; + char* data; + int format; + + XGetWindowProperty(ev.xselection.display, ev.xselection.requestor, ev.xselection.property, 0, (~0L), 0, AnyPropertyType, &t, &format, &size, &N, (unsigned char**)&data); + if(t == target) { + r = MwStringDuplicate(data); + XFree(data); + } + XDeleteProperty(ev.xselection.display, ev.xselection.requestor, ev.xselection.property); + } + break; + } + } + + while(arrlen(queue) > 0) { + XPutBackEvent(handle->x11.display, &queue[0]); + arrdel(queue, 0); + } + arrfree(queue); + + return r; } static void MwLLMakeToolWindowImpl(MwLL handle) { @@ -1319,128 +1036,7 @@ static void MwLLEndStateChangeImpl(MwLL handle) { MwLLShow(handle, 1); } -static void MwLLSetDarkThemeImpl(MwLL handle, int toggle) { - (void)handle; - (void)toggle; -} - static int MwLLX11CallInitImpl(void) { - MwBool loadX11 = MwFALSE; - if(getenv("MILSKO_BACKEND")) { - loadX11 |= - (strcmp(getenv("MILSKO_BACKEND"), "x11") == 0); - } else if(getenv("DISPLAY")) { - loadX11 |= (getenv("DISPLAY") != NULL); - } - - if(!loadX11) { - return 1; - } - -#ifdef __APPLE__ - xsymtbl.lib_xlib = MwDynamicOpen("libX11.dylib"); -#else - xsymtbl.lib_xlib = MwDynamicOpen("libX11.so"); -#endif - if(!xsymtbl.lib_xlib) { - return 1; - } - - xsymtbl.has_xrender = MwFALSE; -#if USE_XRENDER - xsymtbl.lib_xrender = MwDynamicOpen("libXrender.so"); - if(xsymtbl.lib_xrender) { - xsymtbl.has_xrender = MwTRUE; - } -#endif - -#define X11_FUNC_LOAD(x) x = MwDynamicSymbol(xsymtbl.lib_xlib, #x) - - X11_FUNC_LOAD(XClearWindow); - X11_FUNC_LOAD(XCreateImage); - X11_FUNC_LOAD(XOpenDisplay); - X11_FUNC_LOAD(XKeysymToString); - X11_FUNC_LOAD(XInternAtom); - X11_FUNC_LOAD(XCreatePixmapCursor); - X11_FUNC_LOAD(XCreateGC); - X11_FUNC_LOAD(XCreatePixmap); - X11_FUNC_LOAD(XCreateSimpleWindow); - X11_FUNC_LOAD(XVisualIDFromVisual); - X11_FUNC_LOAD(XRootWindow); - X11_FUNC_LOAD(XSetWMProtocols); - X11_FUNC_LOAD(XSetTransientForHint); - X11_FUNC_LOAD(XAllocColor); - X11_FUNC_LOAD(XChangeProperty); - X11_FUNC_LOAD(XChangeWindowAttributes); - X11_FUNC_LOAD(XCheckTypedWindowEvent); - X11_FUNC_LOAD(XCheckWindowEvent); - X11_FUNC_LOAD(XCloseDisplay); - X11_FUNC_LOAD(XConfigureWindow); - X11_FUNC_LOAD(XConvertSelection); - X11_FUNC_LOAD(XCopyArea); - X11_FUNC_LOAD(XDefaultScreen); - X11_FUNC_LOAD(XDefineCursor); - X11_FUNC_LOAD(XDeleteProperty); - X11_FUNC_LOAD(XDestroyWindow); - X11_FUNC_LOAD(XDrawLine); - X11_FUNC_LOAD(XFillPolygon); - X11_FUNC_LOAD(XFree); - X11_FUNC_LOAD(XFreeCursor); - X11_FUNC_LOAD(XFreeGC); - X11_FUNC_LOAD(XFreePixmap); - X11_FUNC_LOAD(XGetGeometry); - X11_FUNC_LOAD(XGetWindowProperty); - X11_FUNC_LOAD(XGetWindowAttributes); - X11_FUNC_LOAD(XMapWindow); - X11_FUNC_LOAD(XNextEvent); - X11_FUNC_LOAD(XPending); - X11_FUNC_LOAD(XPutBackEvent); - X11_FUNC_LOAD(XPutImage); - X11_FUNC_LOAD(XQueryPointer); - X11_FUNC_LOAD(XQueryTree); - X11_FUNC_LOAD(XReparentWindow); - X11_FUNC_LOAD(XSelectInput); - X11_FUNC_LOAD(XSendEvent); - X11_FUNC_LOAD(XSetClipMask); - X11_FUNC_LOAD(XSetClipOrigin); - X11_FUNC_LOAD(XSetForeground); - X11_FUNC_LOAD(XSetGraphicsExposures); - X11_FUNC_LOAD(XSetInputFocus); - X11_FUNC_LOAD(XSetWindowBackgroundPixmap); - X11_FUNC_LOAD(XSync); - X11_FUNC_LOAD(XTranslateCoordinates); - X11_FUNC_LOAD(XUnmapWindow); - X11_FUNC_LOAD(XWarpPointer); - X11_FUNC_LOAD(XSetLocaleModifiers); - X11_FUNC_LOAD(XOpenIM); - X11_FUNC_LOAD(XCloseIM); - X11_FUNC_LOAD(XCreateIC); - X11_FUNC_LOAD(XDestroyIC); - X11_FUNC_LOAD(XSetICFocus); - - X11_FUNC_LOAD(XAllocSizeHints); - X11_FUNC_LOAD(XGetVisualInfo); - X11_FUNC_LOAD(XGetWMNormalHints); - X11_FUNC_LOAD(XGetWMSizeHints); - X11_FUNC_LOAD(XLookupString); - X11_FUNC_LOAD(XSetStandardProperties); - X11_FUNC_LOAD(XSetWMNormalHints); - X11_FUNC_LOAD(XSetWMSizeHints); - -#if USE_XRENDER -#define XRENDER_FUNC_LOAD(x) x = MwDynamicSymbol(xsymtbl.lib_xrender, #x); - - XRENDER_FUNC_LOAD(XRenderQueryExtension) - XRENDER_FUNC_LOAD(XRenderFindStandardFormat) - XRENDER_FUNC_LOAD(XRenderCreatePicture) - XRENDER_FUNC_LOAD(XRenderFreePicture) - XRENDER_FUNC_LOAD(XRenderSetPictureTransform) - XRENDER_FUNC_LOAD(XRenderComposite) -#endif - -#ifdef USE_DBUS - xsymtbl.has_dbus = MwLLDBusFuncSetup(&xsymtbl.dbus); -#endif return 0; } diff --git a/src/core.c b/src/core.c index 6476ccbb6..4afafb77f 100644 --- a/src/core.c +++ b/src/core.c @@ -2,73 +2,37 @@ #include "../external/stb_ds.h" -#ifdef USE_COCOA -#define PERIODIC -#endif - -#define DRAW(handle) \ - { \ - MwLLBeginDraw(handle->lowlevel); \ -\ - handle->bgcolor = NULL; \ - MwDispatch(handle, draw); \ - if(handle->draw_inject != NULL) handle->draw_inject(handle); \ - MwDispatchUserHandler(handle, MwNdrawHandler, NULL); \ -\ - MwLLEndDraw(handle->lowlevel); \ - } - static void lldrawhandler(MwLL handle, void* data) { MwWidget h = (MwWidget)handle->common.user; -#ifdef PERIODIC - MwWidget top; -#endif (void)data; + MwLLBeginDraw(handle); -#ifdef PERIODIC - top = h; - while(top != NULL) { - if(top->top_step) { - break; - } + h->bgcolor = NULL; + MwDispatch(h, draw); + if(h->draw_inject != NULL) h->draw_inject(h); + MwDispatchUserHandler(h, MwNdrawHandler, NULL); - top = top->parent; - } - - if(top == NULL) { - DRAW(h); /* fallback */ - } else { - int i; - - for(i = 0; i < arrlen(top->draw_queue); i++) { - if(top->draw_queue[i] == h) break; - } - if(i == arrlen(top->draw_queue)) arrput(top->draw_queue, h); - } -#else - DRAW(h); -#endif + MwLLEndDraw(handle); } static void lluphandler(MwLL handle, void* data) { - MwWidget h = (MwWidget)handle->common.user; - MwMouse* p = data; + MwWidget h = (MwWidget)handle->common.user; + MwLLMouse* p = data; - if(p->button == MwMOUSE_LEFT) h->pressed = 0; + if(p->button == MwLLMouseLeft) h->pressed = 0; h->mouse_point.x = p->point.x; h->mouse_point.y = p->point.y; - if(p->button == MwMOUSE_LEFT) MwDispatch(h, click); + if(p->button == MwLLMouseLeft) MwDispatch(h, click); MwDispatch3(h, mouse_up, data); MwDispatchUserHandler(h, MwNmouseUpHandler, data); } static void lldownhandler(MwLL handle, void* data) { - MwWidget h = (MwWidget)handle->common.user; - MwMouse* p = data; - - if(p->button == MwMOUSE_LEFT) h->pressed = 1; + MwWidget h = (MwWidget)handle->common.user; + MwLLMouse* p = data; + if(p->button == MwLLMouseLeft) h->pressed = 1; h->mouse_point.x = p->point.x; h->mouse_point.y = p->point.y; @@ -85,7 +49,6 @@ static void llresizehandler(MwLL handle, void* data) { MwDispatchUserHandler(h, MwNresizeHandler, NULL); for(i = 0; i < arrlen(h->children); i++) { MwDispatch(h->children[i], parent_resize); - MwDispatch(h->children[i], draw); } MwDispatch(h, resize); } @@ -144,39 +107,6 @@ static void llfocusouthandler(MwLL handle, void* data) { MwDispatchUserHandler(h, MwNfocusOutHandler, data); } -static void llclipboardhandler(MwLL handle, void* data) { - MwWidget h = (MwWidget)handle->common.user; - - MwDispatch3(h, clipboard, data); - MwDispatchUserHandler(h, MwNclipboardHandler, data); -} - -/* if both of them are true - * 1. widget class is not NULL - * 2. parent is NULL - * or parent's widget class is NULL - * - * most likely this widget is first *visible* widget - * - * this macro is not used anywhere else - we could expose it if we have to - * - * (nishi) - */ -#define IsFirstVisible(handle) ((handle)->widget_class != NULL && ((handle)->parent == NULL || (handle)->parent->widget_class == NULL)) - -static void lldarkthemehandler(MwLL handle, void* data) { - MwWidget h = (MwWidget)handle->common.user; - int* ptr = data; - - if(IsFirstVisible(h)) { - MwVaApply(h, - MwNdarkTheme, *ptr, - NULL); - - MwDispatchUserHandler(h, MwNdarkThemeHandler, data); - } -} - MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height) { MwWidget h = malloc(sizeof(*h)); @@ -184,7 +114,6 @@ MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, h->parent = parent; h->children = NULL; - if(widget_class != NULL) { if((h->lowlevel = MwLLCreate(parent == NULL ? NULL : parent->lowlevel, x, y, width, height)) == NULL) { free(h->name); @@ -202,18 +131,11 @@ MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, h->draw_inject = NULL; h->tick_list = NULL; h->destroyed = 0; + h->dark_theme = 0; h->bgcolor = NULL; - h->berserk = 0; - - h->top_step = 0; - h->draw_queue = NULL; if(parent == NULL) arrput(h->tick_list, h); -#ifdef PERIODIC - if(parent == NULL) h->top_step = 1; -#endif - if(h->lowlevel != NULL) { h->lowlevel->common.user = h; h->lowlevel->common.handler->draw = lldrawhandler; @@ -226,8 +148,6 @@ MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, h->lowlevel->common.handler->key_released = llkeyrelhandler; h->lowlevel->common.handler->focus_in = llfocusinhandler; h->lowlevel->common.handler->focus_out = llfocusouthandler; - h->lowlevel->common.handler->clipboard = llclipboardhandler; - h->lowlevel->common.handler->dark_theme = lldarkthemehandler; } if(parent != NULL) arrput(parent->children, h); @@ -257,19 +177,6 @@ MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, MwAddTickList(h); } -#if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) - if(IsFirstVisible(h)) { - h->root_font = MwFontLoad(MwTTFData, MwTTFDataSize); - h->root_boldfont = MwFontLoad(MwBoldTTFData, MwBoldTTFDataSize); - h->root_monofont = MwFontLoad(MwMonospaceTTFData, MwMonospaceTTFDataSize); - h->root_boldmonofont = MwFontLoad(MwBoldMonospaceTTFData, MwBoldMonospaceTTFDataSize); - } else -#endif - { - h->root_font = NULL; - h->root_boldfont = NULL; - } - if(h->parent != NULL) MwDispatch(h->parent, children_update); return h; @@ -298,22 +205,6 @@ MwWidget MwVaListCreateWidget(MwClass widget_class, const char* name, MwWidget p static void MwFreeWidget(MwWidget handle) { int i; MwWidget root = handle; - MwWidget w; - - w = handle; - while(w != NULL) { - if(w->top_step) break; - w = w->parent; - } - - if(w != NULL) { - for(i = 0; i < arrlen(w->draw_queue); i++) { - if(w->draw_queue[i] == handle) { - arrdel(w->draw_queue, i); - i--; - } - } - } handle->destroyed = 0; MwDispatch(handle, destroy); @@ -350,11 +241,6 @@ static void MwFreeWidget(MwWidget handle) { arrfree(handle->destroy_queue); arrfree(handle->tick_list); - arrfree(handle->draw_queue); - - if(handle->root_font != NULL) MwFontFree(handle->root_font); - if(handle->root_boldfont != NULL) MwFontFree(handle->root_boldfont); - free(handle); } @@ -375,8 +261,6 @@ void MwDestroyWidget(MwWidget handle) { if(i == arrlen(handle->parent->destroy_queue)) { arrput(handle->parent->destroy_queue, handle); } - - MwDispatch(handle->parent, children_update); } destroy_children(handle); handle->destroyed = 1; @@ -413,22 +297,6 @@ static void clean_destroy_queue(MwWidget handle) { arrfree(handle->destroy_queue); } -static void MwAfterStep(MwWidget handle) { -#ifdef PERIODIC - if(handle->top_step) { - int i; - - for(i = 0; i < arrlen(handle->draw_queue); i++) { - DRAW(handle->draw_queue[i]); - } - - arrfree(handle->draw_queue); - } -#else - (void)handle; -#endif -} - int MwStep(MwWidget handle) { int i; MwWidget* widgets = NULL; @@ -442,13 +310,11 @@ int MwStep(MwWidget handle) { handle->prop_event = 0; - while(handle->lowlevel != NULL && MwLLPending(handle->lowlevel)) + if(handle->lowlevel != NULL && MwLLPending(handle->lowlevel)) MwLLNextEvent(handle->lowlevel); handle->prop_event = 1; - if(handle->top_step) MwAfterStep(handle); - clean_destroy_queue(handle); if(handle->parent == NULL && handle->destroyed) { MwFreeWidget(handle); @@ -462,7 +328,7 @@ int MwPending(MwWidget handle) { for(i = 0; i < arrlen(handle->children); i++) { if(MwPending(handle->children[i])) return 1; } - return (arrlen(handle->destroy_queue) > 0) || (handle->widget_class == NULL ? 0 : MwLLPending(handle->lowlevel)); + return (arrlen(handle->destroy_queue) > 0 ? 1 : 0) || (handle->widget_class == NULL ? 0 : MwLLPending(handle->lowlevel)); } void MwLoop(MwWidget handle) { @@ -488,7 +354,7 @@ void MwLoop(MwWidget handle) { more = over % (wait / 2); t = (tick + wait - more) - (t2 = MwTimeGetTick()); if(t > 0) { - if(!handle->berserk) MwTimeSleep(t); + MwTimeSleep(t); tick = MwTimeGetTick(); over -= more; } else { @@ -498,14 +364,6 @@ void MwLoop(MwWidget handle) { } } -static void force_render_all(MwWidget handle) { - int i; - for(i = 0; i < arrlen(handle->children); i++) { - force_render_all(handle->children[i]); - } - if(handle->lowlevel != NULL) MwForceRender(handle); -} - void MwSetInteger(MwWidget handle, const char* key, int n) { int xy; int wh = 0; @@ -527,20 +385,6 @@ void MwSetInteger(MwWidget handle, const char* key, int n) { MwDispatch3(handle, prop_change, key); if(handle->parent != NULL) MwDispatch4(handle->parent, children_prop_change, handle, key); } - if(strcmp(key, MwNforceInverted) == 0) { - MwForceRender(handle); - } - if(strcmp(key, MwNmodernLook) == 0 || strcmp(key, MwNdarkTheme) == 0 || strcmp(key, MwNbitmapFont) == 0) { - force_render_all(handle); - } - - if(strcmp(key, MwNdarkTheme) == 0) { - MwWidget h = handle; - - while(h->parent != NULL && h->parent->widget_class != NULL) h = h->parent; - - MwLLSetDarkTheme(h->lowlevel, n); - } } void MwSetText(MwWidget handle, const char* key, const char* value) { @@ -584,15 +428,6 @@ void MwSetVoid(MwWidget handle, const char* key, void* value) { } } -static int inherit_integer(MwWidget handle, const char* key, int default_v) { - int v; - - if(handle->parent != NULL && (v = MwGetInteger(handle->parent, key)) != MwDEFAULT) { - return v; - } - return default_v; -} - int MwGetInteger(MwWidget handle, const char* key) { if(strcmp(key, MwNx) == 0 || strcmp(key, MwNy) == 0 || strcmp(key, MwNwidth) == 0 || strcmp(key, MwNheight) == 0) { int x, y; @@ -606,20 +441,6 @@ int MwGetInteger(MwWidget handle, const char* key) { if(strcmp(key, MwNheight) == 0) return h; return MwDEFAULT; } else { - if(shgeti(handle->integer, key) == -1) { -#if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) - if(strcmp(key, MwNbitmapFont) == 0) return inherit_integer(handle, key, 0); -#else - if(strcmp(key, MwNbitmapFont) == 0) return inherit_integer(handle, key, 1); -#endif -#ifdef USE_CLASSIC_THEME - if(strcmp(key, MwNmodernLook) == 0) return inherit_integer(handle, key, 0); -#else - if(strcmp(key, MwNmodernLook) == 0) return inherit_integer(handle, key, 1); -#endif - if(strcmp(key, MwNdarkTheme) == 0) return inherit_integer(handle, key, 0); - if(strcmp(key, MwNuseMonospace) == 0) return inherit_integer(handle, key, 0); - } return shget(handle->integer, key); } } @@ -633,7 +454,7 @@ const char* MwGetText(MwWidget handle, const char* key) { h = h->parent; } if(v == NULL) { - if(MwGetInteger(handle, MwNdarkTheme)) { + if(handle->dark_theme) { if(strcmp(key, MwNbackground) == 0) return MwDefaultDarkBackground; if(strcmp(key, MwNforeground) == 0) return MwDefaultDarkForeground; if(strcmp(key, MwNsubBackground) == 0) return MwDefaultDarkSubBackground; @@ -651,47 +472,8 @@ const char* MwGetText(MwWidget handle, const char* key) { return shget(handle->text, key); } -#if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) -static void* inherit_void(MwWidget handle, const char* key) { - void* v; - - if(handle->parent != NULL && (v = MwGetVoid(handle->parent, key)) != NULL) { - return v; - } - return NULL; -} -#endif - void* MwGetVoid(MwWidget handle, const char* key) { - void* v = shget(handle->data, key); - - if(v != NULL) return v; - -#if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) - if(strcmp(key, MwNfont) == 0 || strcmp(key, MwNboldFont) == 0 || strcmp(key, MwNmonospaceFont) == 0 || strcmp(key, MwNboldMonospaceFont) == 0) { - v = inherit_void(handle, key); - - if(v == NULL) { - MwWidget w = handle; - - while(w != NULL && v == NULL) { - if(strcmp(key, MwNfont) == 0) { - v = w->root_font; - } else if(strcmp(key, MwNboldFont) == 0) { - v = w->root_boldfont; - } else if(strcmp(key, MwNmonospaceFont) == 0) { - v = w->root_monofont; - } else if(strcmp(key, MwNboldMonospaceFont) == 0) { - v = w->root_boldmonofont; - } - - w = w->parent; - } - } - } -#endif - - return v; + return shget(handle->data, key); } void MwVaApply(MwWidget handle, ...) { @@ -759,8 +541,61 @@ void MwVaListApply(MwWidget handle, va_list va) { } } +static void inherit_integer(MwWidget handle, const char* key, int default_value) { + int n; + MwWidget h = handle; + while(h != NULL) { + if((n = MwGetInteger(h, key)) != MwDEFAULT) { + MwSetInteger(handle, key, n); + return; + } + h = h->parent; + } + MwSetInteger(handle, key, default_value); +} + +#if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) +static void set_font(MwWidget handle) { + void* f; + MwWidget h = handle; + while(h != NULL) { + if((f = MwGetVoid(h, MwNfont)) != NULL) { + MwSetVoid(handle, MwNfont, f); + return; + } + h = h->parent; + } + f = MwFontLoad(MwTTFData, MwTTFDataSize); + MwSetVoid(handle, MwNfont, f); +} + +static void set_boldfont(MwWidget handle) { + void* f; + MwWidget h = handle; + while(h != NULL) { + if((f = MwGetVoid(h, MwNboldFont)) != NULL) { + MwSetVoid(handle, MwNboldFont, f); + return; + } + h = h->parent; + } + f = MwFontLoad(MwBoldTTFData, MwBoldTTFDataSize); + MwSetVoid(handle, MwNboldFont, f); +} +#endif + void MwSetDefault(MwWidget handle) { if(handle->lowlevel != NULL) MwLLSetCursor(handle->lowlevel, &MwCursorDefault, &MwCursorDefaultMask); + +#ifdef USE_CLASSIC_THEME + inherit_integer(handle, MwNmodernLook, 0); +#else + inherit_integer(handle, MwNmodernLook, 1); +#endif +#if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) + set_font(handle); + set_boldfont(handle); +#endif } void MwHideCursor(MwWidget handle) { @@ -814,7 +649,7 @@ void MwDispatchError(int code, const char* message) { } else { #ifdef _WIN32 char buffer[1024]; - MwStringPrintIntoBuffer(buffer, 1024, "Error: %s\r\nCode : %d\r\n\r\nMilsko is exiting.", message, code); + sprintf(buffer, "Error: %s\r\nCode : %d\r\n\r\nMilsko is exiting.", message, code); MessageBox(NULL, buffer, "Error", MB_ICONERROR | MB_OK); #else fprintf(stderr, "Error: %s\nCode : %d\n\nMilsko is exiting.", message, code); @@ -853,10 +688,21 @@ void MwGrabPointer(MwWidget handle, int toggle) { MwLLGrabPointer(handle->lowlevel, toggle); } -void MwSetDarkTheme(MwWidget handle, int toggle) { - MwVaApply(handle, - MwNdarkTheme, toggle, - NULL); +static void force_render_all(MwWidget handle) { + int i; + for(i = 0; i < arrlen(handle->children); i++) { + force_render_all(handle->children[i]); + } + MwForceRender(handle); +} + +void MwToggleDarkTheme(MwWidget handle, int toggle) { + int old = handle->dark_theme; + if(old != toggle) { + handle->dark_theme = toggle; + + force_render_all(handle); + } } MwWidget MwGetParent(MwWidget handle) { @@ -869,46 +715,19 @@ int MwLibraryInit(void) { #ifdef USE_WAYLAND MwLLWaylandCallInit, #endif -/* x11 has higher priority then cocoa until it works */ #ifdef USE_X11 MwLLX11CallInit, #endif -#ifdef USE_COCOA - MwLLCocoaCallInit, -#endif #ifdef USE_GDI MwLLGDICallInit, -#endif -#ifdef CLASSIC_MAC_OS - MwLLClassicMacOSCallInit, #endif NULL}; int i; - MwFLSetup(); - for(i = 0; calls[i] != NULL; i++) { if(calls[i]() == 0) return 0; } - printf("[WARNING] No suitable GUI backend found! Enabled:" -#ifdef USE_COCOA - " Cocoa" -#endif -#ifdef USE_WAYLAND - " Wayland" -#endif -#ifdef USE_X11 - " X11" -#endif -#ifdef USE_GDI - " GDI" -#endif -#ifdef CLASSIC_MAC_OS - " ClassicMacOS" -#endif - "\n"); - return 1; } @@ -933,8 +752,6 @@ void MwReparent(MwWidget handle, MwWidget new_parent) { arrput(new_parent->children, handle); MwDispatch(handle->parent, children_update); - - MwForceRender(handle); } MwClass MwGetClass(MwWidget handle) { @@ -964,15 +781,3 @@ void MwGetCursorCoord(MwWidget handle, MwPoint* point) { void MwGetScreenSize(MwWidget handle, MwRect* rect) { MwLLGetScreenSize(handle->lowlevel, rect); } - -int MwGetCoordinateType(MwWidget handle) { - if(handle->parent == NULL || handle->parent->lowlevel == NULL) { - return handle->lowlevel->common.coordinate_type; - } else { - return MwCOORDINATE_LOCAL; - } -} - -void MwGetClipboard(MwWidget handle, int clipboard_type) { - MwLLGetClipboard(handle->lowlevel, clipboard_type); -} diff --git a/src/default.c b/src/default.c index 36537a183..4a7d52c73 100644 --- a/src/default.c +++ b/src/default.c @@ -10,8 +10,6 @@ const char* MwDefaultDarkForeground = "#ddd"; const char* MwDefaultDarkSubBackground = "#333"; const char* MwDefaultDarkSubForeground = "#ddd"; -const int MwDefaultShadow = -32; - int MwDefaultBorderWidth(MwWidget handle) { int bw = MwGetInteger(handle, MwNborderWidth); diff --git a/src/dialog/colorpicker.c b/src/dialog/colorpicker.c index c08b53589..0a953e6e2 100644 --- a/src/dialog/colorpicker.c +++ b/src/dialog/colorpicker.c @@ -1,7 +1,7 @@ #include #define WIN_SIZE 464 -#define PICKER_SIZE 364 +#define PICKER_SIZE 360 #define IMG_POS_X(w) ((w - PICKER_SIZE) / 2) #define IMG_POS_Y(h) ((h - PICKER_SIZE) / 2) #define SCROLL_BAR_WIDTH 16 @@ -104,16 +104,11 @@ static void color_picker_image_update(color_picker_t* picker) { int _y = y - (PICKER_SIZE / 2); double dist = sqrt(_x * _x + _y * _y); - if(dist >= 182.) { + if(dist >= 180.) { picker->color_picker_image_data[i] = 0; picker->color_picker_image_data[i + 1] = 0; picker->color_picker_image_data[i + 2] = 0; picker->color_picker_image_data[i + 3] = 0; - } else if(dist >= 180.) { - picker->color_picker_image_data[i] = dist; - picker->color_picker_image_data[i + 1] = dist; - picker->color_picker_image_data[i + 2] = dist; - picker->color_picker_image_data[i + 3] = 255; } else { MwHSV hsv_v; MwRGB color; @@ -160,7 +155,7 @@ static void color_picker_image_update(color_picker_t* picker) { static void color_picker_click(MwWidget handle, void* user, void* call) { color_picker_t* picker = user; - MwMouse* mouse = call; + MwLLMouse* mouse = call; char hexColor[8]; int i; char fgColor[8]; @@ -178,13 +173,13 @@ static void color_picker_click(MwWidget handle, void* user, void* call) { picker->chosen_color.green = picker->color_picker_image_data[i + 1]; picker->chosen_color.blue = picker->color_picker_image_data[i + 2]; - MwStringPrintIntoBuffer(hexColor, 8, "#%02X%02X%02X", picker->chosen_color.red & 0xff, picker->chosen_color.green & 0xff, picker->chosen_color.blue & 0xff); + sprintf(hexColor, "#%02X%02X%02X", picker->chosen_color.red & 0xff, picker->chosen_color.green & 0xff, picker->chosen_color.blue & 0xff); fr = picker->chosen_color.red > 128 ? 0 : 255; fg = picker->chosen_color.green > 128 ? 0 : 255; fb = picker->chosen_color.blue > 128 ? 0 : 255; - MwStringPrintIntoBuffer(fgColor, 8, "#%02X%02X%02X", fr, fg, fb); + sprintf(fgColor, "#%02X%02X%02X", fr, fg, fb); MwSetText(picker->color_display_text, MwNforeground, fgColor); MwSetText(picker->color_display_text, MwNbackground, hexColor); @@ -252,7 +247,7 @@ static void color_display_text_change(MwWidget handle, void* user, fg = color->common.green > 128 ? 0 : 255; fb = color->common.blue > 128 ? 0 : 255; - MwStringPrintIntoBuffer(fgColor, 9, "#%02X%02X%02X", fr, fg, fb); + sprintf(fgColor, "#%02X%02X%02X", fr, fg, fb); MwSetText(picker->color_display_text, MwNforeground, fgColor); MwSetText(picker->color_display_text, MwNbackground, hexColor); diff --git a/src/dialog/filechooser.c b/src/dialog/filechooser.c index ff1683c36..cd23faaa4 100644 --- a/src/dialog/filechooser.c +++ b/src/dialog/filechooser.c @@ -53,7 +53,7 @@ static void destroy(MwWidget handle) { MwDestroyWidget(handle); } -static void filecancel(MwWidget handle, void* user, void* call) { +static void cancel(MwWidget handle, void* user, void* call) { (void)user; (void)call; @@ -147,7 +147,7 @@ static void nav_activate(MwWidget handle, void* user, void* call) { (void)user; if(strcmp(e, "Home") == 0) { -#if defined(_WIN32) || defined(CLASSIC_MAC_OS) +#ifdef _WIN32 #else struct passwd* p = getpwuid(getuid()); @@ -221,7 +221,7 @@ static void layout(MwWidget handle) { MwNleftPadding, 16, NULL); MwListBoxInsert(fc->nav, -1, p); - MwAddUserHandler(fc->nav, MwNlistBoxActivateHandler, nav_activate, NULL); + MwAddUserHandler(fc->nav, MwNactivateHandler, nav_activate, NULL); MwListBoxDestroyPacket(p); } else { @@ -242,7 +242,7 @@ static void layout(MwWidget handle) { MwNhasHeading, 1, MwNleftPadding, 16, NULL); - MwAddUserHandler(fc->files, MwNlistBoxActivateHandler, files_activate, NULL); + MwAddUserHandler(fc->files, MwNactivateHandler, files_activate, NULL); } else { MwVaApply(fc->files, MwNx, wx, @@ -383,7 +383,7 @@ static void layout(MwWidget handle) { MwNtext, "Cancel", NULL); - MwAddUserHandler(fc->cancel, MwNactivateHandler, filecancel, NULL); + MwAddUserHandler(fc->cancel, MwNactivateHandler, cancel, NULL); } else { MwVaApply(fc->cancel, MwNx, wx, diff --git a/src/dialog/messagebox.c b/src/dialog/messagebox.c index 1d2b9912c..5da78a927 100644 --- a/src/dialog/messagebox.c +++ b/src/dialog/messagebox.c @@ -102,7 +102,7 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi left = 8 + 48 + 8; } - th = MwTextHeight(handle, NULL, text); + th = MwTextHeight(handle, text); (void)MwVaCreateWidget(MwLabelClass, "label", window, left, (h - th) / 2, w - left - 8, th, MwNtext, text, MwNalignment, MwALIGNMENT_BEGINNING, diff --git a/src/draw.c b/src/draw.c index 8dde8418e..24e5785aa 100644 --- a/src/draw.c +++ b/src/draw.c @@ -1,7 +1,6 @@ #include -#ifdef NO_IMAGE -#elif defined(USE_STB_IMAGE) +#ifdef USE_STB_IMAGE #include "../external/stb_image.h" #else #include @@ -13,7 +12,7 @@ static int get_color_diff(MwWidget handle) { if(MwGetInteger(handle, MwNmodernLook)) { - return 40; + return 46; } else { return 80; } @@ -29,7 +28,7 @@ static int hex(const char* txt, int len) { n = c - 'a' + 10; } else if('A' <= c && c <= 'F') { n = c - 'A' + 10; - } else if('0' <= c && c <= 'g') { + } else if('0' <= c && c <= '9') { n = c - '0'; } r = r << 4; @@ -107,21 +106,11 @@ void MwDrawRectFading(MwWidget handle, MwRect* rect, MwLLColor color) { int y; double darken = 0.; int ColorDiff = get_color_diff(handle); - double darkenStep = (ColorDiff / 2.) / rect->height; + double darkenStep = (ColorDiff / 4.) / rect->height; unsigned long sz = 1 * rect->height * 4; unsigned char* data = malloc(sz); - MwRect r = *rect; - if(rect->width <= 0 || rect->height <= 0) { - free(data); - return; - } memset(data, 0, sz); - r.x += 1; - r.y += 1; - r.width -= 2; - r.height -= 2; - for(y = 0; y < rect->height; y++) { MwLLColor col = MwLightenColor(handle, color, -darken, -darken, -darken); int idx = y * 4; @@ -134,16 +123,13 @@ void MwDrawRectFading(MwWidget handle, MwRect* rect, MwLLColor color) { } pixmap = MwLLCreatePixmap(handle->lowlevel, data, 1, rect->height); - MwLLDrawPixmap(handle->lowlevel, &r, pixmap); + MwLLDrawPixmap(handle->lowlevel, rect, pixmap); MwLLDestroyPixmap(pixmap); free(data); } void MwDrawFrame(MwWidget handle, MwRect* rect, MwLLColor color, int invert) { - int inv; - - if((inv = MwGetInteger(handle, MwNforceInverted)) != MwDEFAULT && inv) invert = 1; if(MwGetInteger(handle, MwNmodernLook)) { MwDrawFrameEx(handle, rect, color, invert, MwDefaultBorderWidth(handle), 0, 0); } else { @@ -165,18 +151,7 @@ void MwDrawFrame(MwWidget handle, MwRect* rect, MwLLColor color, int invert) { void MwDrawWidgetBack(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border) { MwLLColor col; - if(rect->width <= 0 || rect->height <= 0) return; - if(border) { - if(!handle->lowlevel->common.supports_transparency) { - MwLLColor c = handle->parent == NULL ? NULL : MwParseColor(handle->parent, MwGetText(handle->parent, MwNbackground)); - - if(c != NULL) { - MwDrawRect(handle, rect, c); - MwLLFreeColor(c); - } - } - MwDrawFrame(handle, rect, color, invert); } col = invert ? MwLightenColor(handle, color, -8, -8, -8) : color; @@ -191,7 +166,7 @@ void MwDrawWidgetBack(MwWidget handle, MwRect* rect, MwLLColor color, int invert void MwDrawDiamond(MwWidget handle, MwRect* rect, MwLLColor color, int invert) { MwPoint p[6]; int border = MwDefaultBorderWidth(handle); - int ColorDiff = get_color_diff(handle) + (MwGetInteger(handle, MwNmodernLook) ? 48 : 0); + int ColorDiff = get_color_diff(handle); MwLLColor darker = MwLightenColor(handle, color, -ColorDiff, -ColorDiff, -ColorDiff); MwLLColor lighter = MwLightenColor(handle, color, ColorDiff, ColorDiff, ColorDiff); MwLLColor col = invert ? MwLightenColor(handle, color, -8, -8, -8) : color; @@ -255,19 +230,21 @@ void MwDrawDiamond(MwWidget handle, MwRect* rect, MwLLColor color, int invert) { MwLLFreeColor(darker); } -static void MwDrawFrameEx_simple(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border, int diff, int same) { - MwPoint p[7]; +void MwDrawFrameEx(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border, int diff, int same) { + MwPoint p[6]; int ColorDiff = get_color_diff(handle); MwLLColor darker = MwLightenColor(handle, color, -ColorDiff * 3 / 2 + diff, -ColorDiff * 3 / 2 + diff, -ColorDiff * 3 / 2 + diff); MwLLColor lighter = same ? MwLightenColor(handle, darker, 0, 0, 0) : MwLightenColor(handle, color, ColorDiff - diff, ColorDiff - diff, ColorDiff - diff); - p[0].x = rect->x; - p[0].y = rect->y; + + p[0].x = rect->x; + p[0].y = rect->y; p[1].x = rect->x + rect->width; p[1].y = rect->y; p[2].x = rect->x + rect->width - border; p[2].y = rect->y + border; + p[3].x = rect->x + border; p[3].y = rect->y + border; @@ -276,6 +253,7 @@ static void MwDrawFrameEx_simple(MwWidget handle, MwRect* rect, MwLLColor color, p[5].x = rect->x; p[5].y = rect->y + rect->height; + MwLLPolygon(handle->lowlevel, p, 6, invert ? darker : lighter); p[0].x = rect->x + rect->width; @@ -295,6 +273,7 @@ static void MwDrawFrameEx_simple(MwWidget handle, MwRect* rect, MwLLColor color, p[5].x = rect->x + rect->width; p[5].y = rect->y + rect->height; + MwLLPolygon(handle->lowlevel, p, 6, invert ? lighter : darker); MwLLFreeColor(lighter); @@ -306,81 +285,6 @@ static void MwDrawFrameEx_simple(MwWidget handle, MwRect* rect, MwLLColor color, rect->height -= border * 2; } -static void frame_border_complex(MwWidget handle, MwRect* rect, MwLLColor lighter, MwLLColor darker, int invert, int border, int diff, int same) { - MwPoint p[7]; - - (void)diff; - (void)same; - - p[0].x = rect->x; - p[0].y = rect->y; - - p[1].x = rect->x + rect->width; - p[1].y = rect->y; - - p[2].x = rect->x + rect->width - border; - p[2].y = rect->y + border; - p[3].x = rect->x + border; - p[3].y = rect->y + border; - - p[4].x = rect->x + border; - p[4].y = rect->y + rect->height - border; - - p[5].x = rect->x; - p[5].y = rect->y + rect->height; - MwLLPolygon(handle->lowlevel, p, 6, invert ? lighter : darker); - - p[0].x = rect->x + rect->width; - p[0].y = rect->y; - - p[1].x = rect->x + rect->width - border; - p[1].y = rect->y + border; - - p[2].x = rect->x + rect->width - border; - p[2].y = rect->y + rect->height - border; - - p[3].x = rect->x + border; - p[3].y = rect->y + rect->height - border; - - p[4].x = rect->x; - p[4].y = rect->y + rect->height; - - p[5].x = rect->x + rect->width; - p[5].y = rect->y + rect->height; - MwLLPolygon(handle->lowlevel, p, 6, invert ? lighter : darker); -} - -static void MwDrawFrameEx_complex(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border, int diff, int same) { - int ColorDiff = get_color_diff(handle); - MwLLColor darker = MwLightenColor(handle, color, -ColorDiff * 3 / 2 + diff, -ColorDiff * 3 / 2 + diff, -ColorDiff * 3 / 2 + diff); - MwLLColor lighter = same ? MwLightenColor(handle, darker, 0, 0, 0) : MwLightenColor(handle, color, (ColorDiff / 2) - diff, (ColorDiff / 2) - diff, (ColorDiff / 2) - diff); - MwRect r = *rect; - - frame_border_complex(handle, rect, lighter, darker, invert, border, diff, same); - - r.x += 1; - r.y += 1; - r.width -= 2; - r.height -= 2; - frame_border_complex(handle, &r, lighter, darker, !invert, border, diff, same); - - MwLLFreeColor(lighter); - MwLLFreeColor(darker); - - rect->x += border; - rect->y += border; - rect->width -= border * 2; - rect->height -= border * 2; -} - -void MwDrawFrameEx(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border, int diff, int same) { - if(MwGetInteger(handle, MwNmodernLook)) { - MwDrawFrameEx_complex(handle, rect, color, invert, border, diff, same); - } else { - MwDrawFrameEx_simple(handle, rect, color, invert, border, diff, same); - } -} - void MwDrawTriangle(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int direction) { MwPoint p1[4], p2[4], p3[4], p4[3]; const int border = MwGetInteger(handle, MwNmodernLook) ? 2 : MwDefaultBorderWidth(handle); @@ -598,8 +502,7 @@ void MwDrawTriangle(MwWidget handle, MwRect* rect, MwLLColor color, int invert, MwLLFreeColor(darker); } -#if defined(NO_IMAGE) -#elif !defined(USE_STB_IMAGE) +#ifndef USE_STB_IMAGE static void PNGCAPI user_error(png_structp png, const char* str) { (void)str; @@ -714,9 +617,7 @@ static unsigned char* load_jpeg(FILE* f, int* w, int* h) { #endif static unsigned char* load_image(const char* path, int* w, int* h) { -#if defined(NO_IMAGE) - return NULL; -#elif defined(USE_STB_IMAGE) +#ifdef USE_STB_IMAGE int ch; return stbi_load(path, w, h, &ch, 4); diff --git a/src/error.c b/src/error.c new file mode 100644 index 000000000..ed9798f84 --- /dev/null +++ b/src/error.c @@ -0,0 +1,23 @@ +#include +#include "error_internal.h" + +#define MAX_ERROR_LEN 512 + +/* buffer for holding the error. +1 to ensure there's always a null terminator. */ +char error[MAX_ERROR_LEN + 1] = {0}; + +const char* MwGetLastError(void) { + return error; +} + +void setLastError(const char* fmt, ...) { + va_list va; + char out[MAX_ERROR_LEN]; + memset(out, 0, MAX_ERROR_LEN); + + va_start(va, fmt); + vsprintf(out, fmt, va); + va_end(va); + + memcpy(error, out, MAX_ERROR_LEN); +} diff --git a/src/error_internal.h b/src/error_internal.h new file mode 100644 index 000000000..99676143e --- /dev/null +++ b/src/error_internal.h @@ -0,0 +1,15 @@ +#ifndef __MW_ERROR_INTERNAL_H__ +#define __MW_ERROR_INTERNAL_H__ + +/** + * This is not to be documented or exposed publically. + * This contains an internal function for setting the error, + * something the user shouldn't want to do and thus we don't want them to. + * (hence also, its placement in the src directory) + */ + +#include + +void setLastError(const char* fmt, ...); + +#endif diff --git a/src/text/font/boldfont.c b/src/font/boldfont.c similarity index 100% rename from src/text/font/boldfont.c rename to src/font/boldfont.c diff --git a/src/text/font/boldmonottf.c b/src/font/boldttf.c similarity index 99% rename from src/text/font/boldmonottf.c rename to src/font/boldttf.c index 7945831d1..544321c6d 100644 --- a/src/text/font/boldmonottf.c +++ b/src/font/boldttf.c @@ -1,7 +1,7 @@ #include #if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) -unsigned char MwBoldMonospaceTTFData[] = { +unsigned char MwBoldTTFData[] = { 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x04, 0x00, 0x10, 0x46, 0x46, 0x54, 0x4d, 0xac, 0x0d, 0xe4, 0x44, 0x00, 0x00, 0x8d, 0x3c, 0x00, 0x00, 0x00, 0x1c, 0x4f, 0x53, 0x2f, 0x32, 0xa4, 0xe6, 0xab, 0x72, @@ -3018,5 +3018,5 @@ unsigned char MwBoldMonospaceTTFData[] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x16, 0xe7, 0x6b, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xa9, 0xde, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x4d, 0x1e, 0x99}; -unsigned int MwBoldMonospaceTTFDataSize = 36184; +unsigned int MwBoldTTFDataSize = 36184; #endif diff --git a/src/text/font/font.c b/src/font/font.c similarity index 100% rename from src/text/font/font.c rename to src/font/font.c diff --git a/src/text/font/monottf.c b/src/font/ttf.c similarity index 99% rename from src/text/font/monottf.c rename to src/font/ttf.c index 8332c4a71..7dacdcd7b 100644 --- a/src/text/font/monottf.c +++ b/src/font/ttf.c @@ -1,7 +1,7 @@ #include #if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) -unsigned char MwMonospaceTTFData[] = { +unsigned char MwTTFData[] = { 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x04, 0x00, 0x10, 0x46, 0x46, 0x54, 0x4d, 0xac, 0x0d, 0xe4, 0x23, 0x00, 0x00, 0x8d, 0x3c, 0x00, 0x00, 0x00, 0x1c, 0x4f, 0x53, 0x2f, 0x32, 0xa3, 0xba, 0xa8, 0x6a, @@ -3018,5 +3018,5 @@ unsigned char MwMonospaceTTFData[] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x16, 0xe7, 0x6b, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xa9, 0xde, 0x41, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x4d, 0x1e, 0x76}; -unsigned int MwMonospaceTTFDataSize = 36184; +unsigned int MwTTFDataSize = 36184; #endif diff --git a/src/lowlevel.c b/src/lowlevel.c index 7dfeea169..96f619613 100644 --- a/src/lowlevel.c +++ b/src/lowlevel.c @@ -1,305 +1,61 @@ #include -MwLL (*MwLLCreate)(MwLL parent, int x, int y, int width, int height) = NULL; -void (*MwLLDestroy)(MwLL handle) = NULL; +MwLL (*MwLLCreate)(MwLL parent, int x, int y, int width, int height); +void (*MwLLDestroy)(MwLL handle); -void (*MwLLPolygon)(MwLL handle, MwPoint* points, int points_count, MwLLColor color) = NULL; -void (*MwLLLine)(MwLL handle, MwPoint* points, MwLLColor color) = NULL; +void (*MwLLPolygon)(MwLL handle, MwPoint* points, int points_count, MwLLColor color); +void (*MwLLLine)(MwLL handle, MwPoint* points, MwLLColor color); -void (*MwLLBeginDraw)(MwLL handle) = NULL; -void (*MwLLEndDraw)(MwLL handle) = NULL; +void (*MwLLBeginDraw)(MwLL handle); +void (*MwLLEndDraw)(MwLL handle); -MwLLColor (*MwLLAllocColor)(MwLL handle, int r, int g, int b) = NULL; -void (*MwLLColorUpdate)(MwLL handle, MwLLColor c, int r, int g, int b) = NULL; -void (*MwLLFreeColor)(MwLLColor color) = NULL; +MwLLColor (*MwLLAllocColor)(MwLL handle, int r, int g, int b); +void (*MwLLColorUpdate)(MwLL handle, MwLLColor c, int r, int g, int b); +void (*MwLLFreeColor)(MwLLColor color); -void (*MwLLGetXYWH)(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) = NULL; -void (*MwLLSetXY)(MwLL handle, int x, int y) = NULL; -void (*MwLLSetWH)(MwLL handle, int w, int h) = NULL; +void (*MwLLGetXYWH)(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h); +void (*MwLLSetXY)(MwLL handle, int x, int y); +void (*MwLLSetWH)(MwLL handle, int w, int h); -void (*MwLLSetTitle)(MwLL handle, const char* title) = NULL; +void (*MwLLSetTitle)(MwLL handle, const char* title); -int (*MwLLPending)(MwLL handle) = NULL; -void (*MwLLNextEvent)(MwLL handle) = NULL; +int (*MwLLPending)(MwLL handle); +void (*MwLLNextEvent)(MwLL handle); -MwLLPixmap (*MwLLCreatePixmap)(MwLL handle, unsigned char* data, int width, int height) = NULL; -void (*MwLLPixmapUpdate)(MwLLPixmap pixmap) = NULL; -void (*MwLLDestroyPixmap)(MwLLPixmap pixmap) = NULL; -void (*MwLLDrawPixmap)(MwLL handle, MwRect* rect, MwLLPixmap pixmap) = NULL; -void (*MwLLSetIcon)(MwLL handle, MwLLPixmap pixmap) = NULL; +MwLLPixmap (*MwLLCreatePixmap)(MwLL handle, unsigned char* data, int width, int height); +void (*MwLLPixmapUpdate)(MwLLPixmap pixmap); +void (*MwLLDestroyPixmap)(MwLLPixmap pixmap); +void (*MwLLDrawPixmap)(MwLL handle, MwRect* rect, MwLLPixmap pixmap); +void (*MwLLSetIcon)(MwLL handle, MwLLPixmap pixmap); -void (*MwLLForceRender)(MwLL handle) = NULL; +void (*MwLLForceRender)(MwLL handle); -void (*MwLLSetCursor)(MwLL handle, MwCursor* image, MwCursor* mask) = NULL; -void (*MwLLDetach)(MwLL handle, MwPoint* point) = NULL; -void (*MwLLShow)(MwLL handle, int show) = NULL; +void (*MwLLSetCursor)(MwLL handle, MwCursor* image, MwCursor* mask); +void (*MwLLDetach)(MwLL handle, MwPoint* point); +void (*MwLLShow)(MwLL handle, int show); -void (*MwLLSetSizeHints)(MwLL handle, int minx, int miny, int maxx, int maxy) = NULL; -void (*MwLLMakeBorderless)(MwLL handle, int toggle) = NULL; -void (*MwLLMakeToolWindow)(MwLL handle) = NULL; -void (*MwLLMakePopup)(MwLL handle, MwLL parent) = NULL; +void (*MwLLSetSizeHints)(MwLL handle, int minx, int miny, int maxx, int maxy); +void (*MwLLMakeBorderless)(MwLL handle, int toggle); +void (*MwLLMakeToolWindow)(MwLL handle); +void (*MwLLMakePopup)(MwLL handle, MwLL parent); -void (*MwLLBeginStateChange)(MwLL handle) = NULL; -void (*MwLLEndStateChange)(MwLL handle) = NULL; +void (*MwLLBeginStateChange)(MwLL handle); +void (*MwLLEndStateChange)(MwLL handle); -void (*MwLLFocus)(MwLL handle) = NULL; -void (*MwLLGrabPointer)(MwLL handle, int toggle) = NULL; +void (*MwLLFocus)(MwLL handle); +void (*MwLLGrabPointer)(MwLL handle, int toggle); -void (*MwLLSetClipboard)(MwLL handle, const char* text, int clipboard_type) = NULL; -void (*MwLLGetClipboard)(MwLL, int clipboard_type) = NULL; +void (*MwLLSetClipboard)(MwLL handle, const char* text); +char* (*MwLLGetClipboard)(MwLL handle); -void (*MwLLGetCursorCoord)(MwLL handle, MwPoint* point) = NULL; -void (*MwLLGetScreenSize)(MwLL handle, MwRect* rect) = NULL; - -void (*MwLLSetDarkTheme)(MwLL handle, int toggle) = NULL; +void (*MwLLGetCursorCoord)(MwLL handle, MwPoint* point); +void (*MwLLGetScreenSize)(MwLL handle, MwRect* rect); void MwLLCreateCommon(MwLL handle) { handle->common.handler = malloc(sizeof(*handle->common.handler)); memset(handle->common.handler, 0, sizeof(*handle->common.handler)); - - handle->common.supports_transparency = 0; } void MwLLDestroyCommon(MwLL handle) { free(handle->common.handler); } - -#ifdef USE_DBUS -MwBool MwLLDBusFuncSetup(MwLLDBusFuncTable* tbl) { - tbl->lib = MwDynamicOpen("libdbus-1.so"); - if(!tbl->lib) { - fprintf(stderr, "[WARNING] dbus library (libdbus-1.so) not found, will not be able to check for any XDG settings.\n"); - return MwFALSE; - } - -#define DBUS_FUNC(x) \ - tbl->x = MwDynamicSymbol(tbl->lib, #x); \ - if(!tbl->x) { \ - fprintf(stderr, "[WARNING] dbus function %s not found, will not be able to check for any XDG settings.\n", #x); \ - dlclose(tbl->lib); \ - return MwFALSE; \ - } - - DBUS_FUNC(dbus_error_init); - DBUS_FUNC(dbus_bus_get); - DBUS_FUNC(dbus_bus_add_match); - DBUS_FUNC(dbus_error_is_set); - DBUS_FUNC(dbus_error_free); - DBUS_FUNC(dbus_message_new_method_call); - DBUS_FUNC(dbus_message_is_signal); - DBUS_FUNC(dbus_message_iter_init_append); - DBUS_FUNC(dbus_message_iter_append_basic); - DBUS_FUNC(dbus_connection_flush); - DBUS_FUNC(dbus_connection_pop_message); - DBUS_FUNC(dbus_connection_read_write); - DBUS_FUNC(dbus_connection_send_with_reply_and_block); - DBUS_FUNC(dbus_message_unref); - DBUS_FUNC(dbus_message_iter_init); - DBUS_FUNC(dbus_message_iter_get_arg_type); - DBUS_FUNC(dbus_message_iter_recurse); - DBUS_FUNC(dbus_message_iter_next); - DBUS_FUNC(dbus_connection_unref); - DBUS_FUNC(dbus_message_iter_get_basic); - - return MwTRUE; -} -#endif - -#ifdef USE_DBUS -MwBool MwLLDBusNewContext(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx) { - if(!tbl->lib) { - return MwFALSE; - } - - tbl->dbus_error_init(&ctx->dbus_err); - - ctx->dbus_conn = tbl->dbus_bus_get(DBUS_BUS_SESSION, &ctx->dbus_err); - if(tbl->dbus_error_is_set(&ctx->dbus_err)) { - fprintf(stderr, "[WARNING] Could not initialize dbus: Connection error: %s\n", ctx->dbus_err.message); - tbl->dbus_error_free(&ctx->dbus_err); - return MwFALSE; - } - if(!ctx->dbus_conn) { - fprintf(stderr, "[WARNING] Could not initialize dbus: Failed to connect to session bus\n"); - return MwFALSE; - } - return MwTRUE; -}; - -MWDECL MwBool MwLLDBusPortalGet(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx, const char* portal, const char* namespace, const char* key, void* out) { - DBusMessageIter dbus_args, dbus_variant, dbus_inner_variant; - char arg_type; - if(!ctx->dbus_conn) { - return MwFALSE; - } - - ctx->dbus_msg = tbl->dbus_message_new_method_call( - "org.freedesktop.portal.Desktop", - "/org/freedesktop/portal/desktop", - portal, - "Read"); - if(!ctx->dbus_msg) { - fprintf(stderr, "[WARNING] Couldn't get %s::%s: Failed to create message\n", namespace, key); - return MwFALSE; - } - - tbl->dbus_message_iter_init_append(ctx->dbus_msg, &dbus_args); - tbl->dbus_message_iter_append_basic(&dbus_args, 's', &namespace); - tbl->dbus_message_iter_append_basic(&dbus_args, 's', &key); - - ctx->dbus_reply = tbl->dbus_connection_send_with_reply_and_block(ctx->dbus_conn, ctx->dbus_msg, 100, &ctx->dbus_err); - - if(tbl->dbus_error_is_set(&ctx->dbus_err)) { - fprintf(stderr, "[WARNING] Couldn't get %s::%s: Send error: %s\n", namespace, key, ctx->dbus_err.message); - tbl->dbus_error_free(&ctx->dbus_err); - return MwFALSE; - } - if(!ctx->dbus_reply) { - fprintf(stderr, "[WARNING] Couldn't get %s::%s: No reply received\n", namespace, key); - return MwFALSE; - } - - if(!tbl->dbus_message_iter_init(ctx->dbus_reply, &dbus_args)) { - fprintf(stderr, "[WARNING] Couldn't get %s::%s: Reply has no arguments\n", namespace, key); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - - if((arg_type = tbl->dbus_message_iter_get_arg_type(&dbus_args)) != 'v') { - fprintf(stderr, "[WARNING] Couldn't get %s::%s: Expected outer variant, got: %c\n", namespace, key, arg_type); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - tbl->dbus_message_iter_recurse(&dbus_args, &dbus_variant); - - /* Some portals wrap the value in a second variant */ - arg_type = tbl->dbus_message_iter_get_arg_type(&dbus_variant); - if(arg_type == 'v') { - tbl->dbus_message_iter_recurse(&dbus_variant, &dbus_inner_variant); - if((arg_type = tbl->dbus_message_iter_get_arg_type(&dbus_inner_variant)) != 'u') { - fprintf(stderr, "[WARNING] Signal reply for %s::SettingChanged: Expected 'u' (uint32) for 'value', got: %c\n", portal, arg_type); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - tbl->dbus_message_iter_get_basic(&dbus_inner_variant, out); - } else if (arg_type == 'u') { - tbl->dbus_message_iter_get_basic(&dbus_variant, out); - } else { - fprintf(stderr, "[WARNING] Couldn't get %s::%s: Expected variant or string, got: %c\n", namespace, key, arg_type); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - tbl->dbus_message_unref(ctx->dbus_msg); - - return MwTRUE; -} - -MWDECL MwBool MwLLDBusPortalWatch(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx, const char* portal) { - char filter_string[2048]; - if(!ctx->dbus_conn) { - return MwFALSE; - } - - MwStringPrintIntoBuffer(filter_string, sizeof(filter_string), "type='%s',interface=%s", "signal", portal); - - tbl->dbus_bus_add_match(ctx->dbus_conn, filter_string, &ctx->dbus_err); - tbl->dbus_connection_flush(ctx->dbus_conn); - - return MwTRUE; -} - -/* Technically this will swallow all other results, so this is not usable multiple times. - TODO: Use a hashmap instead */ -MWDECL MwBool MwLLDBusPortalPoll(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx, MwLL handle, const char* portal, const char* namespace, const char* key, MwLLDBusPortalPollListener listener) { - DBusMessageIter args, msg_value, msg_value_inner; - const char* msg_namespace; - const char* msg_key; - MwU32 msg_value_content; - char arg_type; - - if(!ctx->dbus_conn) { - return MwFALSE; - } - - tbl->dbus_connection_read_write(ctx->dbus_conn, 0); - tbl->dbus_connection_read_write(ctx->dbus_conn, 0); - ctx->dbus_reply = tbl->dbus_connection_pop_message(ctx->dbus_conn); - - if(tbl->dbus_error_is_set(&ctx->dbus_err)) { - fprintf(stderr, "[WARNING] Signal reply for %s::SettingChanged: Poll error: %s\n", portal, ctx->dbus_err.message); - tbl->dbus_error_free(&ctx->dbus_err); - return MwFALSE; - } - if(!ctx->dbus_reply) { - return MwFALSE; - } - - /* check if the message is a signal from the correct interface and with the correct name */ - if(tbl->dbus_message_is_signal(ctx->dbus_reply, portal, "SettingChanged")) { - /* read the parameters */ - if(!tbl->dbus_message_iter_init(ctx->dbus_reply, &args)) - fprintf(stderr, "[WARNING] Signal reply for %s::SettingChanged has no arguments\n", portal); - else { - if((arg_type = tbl->dbus_message_iter_get_arg_type(&args)) != 's') { - fprintf(stderr, "[WARNING] Signal reply for %s::SettingChanged: Expected 's' (string) for 'namespace', got: %c\n", portal, arg_type); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - tbl->dbus_message_iter_get_basic(&args, &msg_namespace); - - tbl->dbus_message_iter_next(&args); - if((arg_type = tbl->dbus_message_iter_get_arg_type(&args)) != 's') { - fprintf(stderr, "[WARNING] Signal reply for %s::SettingChanged: Expected 's' (string) for 'key', got: %c\n", portal, arg_type); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - tbl->dbus_message_iter_get_basic(&args, &msg_key); - - /* Check that key and namespace match */ - if(strcmp(msg_namespace, namespace) == 0 && strcmp(msg_key, key) == 0) { - /* Assuming the value is a basic type */ - tbl->dbus_message_iter_next(&args); - - if((arg_type = tbl->dbus_message_iter_get_arg_type(&args)) != 'v') { - fprintf(stderr, "[WARNING] Couldn't get %s::%s: Expected outer variant, got: %c\n", namespace, key, arg_type); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - tbl->dbus_message_iter_recurse(&args, &msg_value); - - /* Some portals wrap the value in a second variant */ - arg_type = tbl->dbus_message_iter_get_arg_type(&msg_value); - if(arg_type == 'v') { - tbl->dbus_message_iter_recurse(&msg_value, &msg_value_inner); - if((arg_type = tbl->dbus_message_iter_get_arg_type(&msg_value_inner)) != 'u') { - fprintf(stderr, "[WARNING] Signal reply for %s::SettingChanged: Expected 'u' (uint32) for 'value', got: %c\n", portal, arg_type); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - tbl->dbus_message_iter_get_basic(&msg_value_inner, &msg_value_content); - } else if (arg_type == 'u') { - tbl->dbus_message_iter_get_basic(&msg_value, &msg_value_content); - } else { - fprintf(stderr, "[WARNING] Couldn't get %s::%s: Expected variant or string, got: %c\n", namespace, key, arg_type); - tbl->dbus_message_unref(ctx->dbus_reply); - return MwFALSE; - } - - listener(handle, msg_value_content); - } - } - } - - /* free the message */ - tbl->dbus_message_unref(ctx->dbus_reply); - return MwTRUE; -} - -void MwLLDBusFreeContext(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx) { - if(!tbl->lib) { - return; - } - if(ctx->dbus_reply) tbl->dbus_message_unref(ctx->dbus_reply); - if(ctx->dbus_conn) tbl->dbus_connection_unref(ctx->dbus_conn); -}; -#endif diff --git a/src/string.c b/src/string.c index f56b9acb7..ccc9aab51 100644 --- a/src/string.c +++ b/src/string.c @@ -37,80 +37,3 @@ void MwStringTime(char* out, time_t t) { sprintf(out, "%s %2d %02d:%02d %d", months[tm->tm_mon], tm->tm_mday, tm->tm_hour, tm->tm_min, 1900 + tm->tm_year); } } -void MwStringPrintIntoBuffer(char* out, MwU32 size, const char* fmt, ...) { - va_list va; - va_start(va, fmt); - -#if __STDC_VERSION__ >= 199901L - vsnprintf(out, size, fmt, va); -#else - vsprintf(out, fmt, va); -#endif - - va_end(va); -}; - -MWDECL MwBool MwStringIsKeyUTF8(MwU32 key) { - unsigned char bytes[4]; - int i; - bytes[0] = (key & 0x000000FF); - bytes[1] = (key & 0x0000FF00) >> 8; - bytes[2] = (key & 0x00FF0000) >> 16; - bytes[3] = (key & 0xFF000000) >> 24; - - for(i = 0; i < sizeof(MwU32); i++) { - if(( // ASCII - // use bytes[0] <= 0x7F to allow ASCII control characters - bytes[0] == 0x09 || - bytes[0] == 0x0A || - bytes[0] == 0x0D || - (0x20 <= bytes[0] && bytes[0] <= 0x7E))) { - continue; - } - - if(( // non-overlong 2-byte - (0xC2 <= bytes[0] && bytes[0] <= 0xDF) && - (0x80 <= bytes[1] && bytes[1] <= 0xBF))) { - continue; - } - - if(( // excluding overlongs - bytes[0] == 0xE0 && - (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || - ( // straight 3-byte - ((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || - bytes[0] == 0xEE || - bytes[0] == 0xEF) && - (0x80 <= bytes[1] && bytes[1] <= 0xBF) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || - ( // excluding surrogates - bytes[0] == 0xED && - (0x80 <= bytes[1] && bytes[1] <= 0x9F) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF))) { - continue; - } - - if(( // planes 1-3 - bytes[0] == 0xF0 && - (0x90 <= bytes[1] && bytes[1] <= 0xBF) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF) && - (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || - ( // planes 4-15 - (0xF1 <= bytes[0] && bytes[0] <= 0xF3) && - (0x80 <= bytes[1] && bytes[1] <= 0xBF) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF) && - (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || - ( // plane 16 - bytes[0] == 0xF4 && - (0x80 <= bytes[1] && bytes[1] <= 0x8F) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF) && - (0x80 <= bytes[3] && bytes[3] <= 0xBF))) { - continue; - } - - return 0; - } - - return 1; -} diff --git a/src/text.c b/src/text.c new file mode 100644 index 000000000..7d94e5cf4 --- /dev/null +++ b/src/text.c @@ -0,0 +1,384 @@ +#include + +#if defined(USE_FREETYPE2) +#include +#include FT_FREETYPE_H + +typedef struct ttf { + FT_Library library; + FT_Face face; + void* data; +} ttf_t; + +#define TTF +#elif defined(USE_STB_TRUETYPE) +#include "../external/stb_truetype.h" + +typedef struct ttf { + stbtt_fontinfo font; + void* data; + float scale; + int ascent; + int descent; +} ttf_t; + +#define TTF +#endif + +#define FontWidth 7 +#define FontHeight 14 + +static void bitmap_MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int align, MwLLColor color) { + int i = 0, x, y, sx, sy; + int tw, th; + unsigned char* px; + MwRect r; + MwLLPixmap p; + + if(strlen(text) == 0) text = " "; + tw = MwTextWidth(handle, text); + th = MwTextHeight(handle, text); + px = malloc(tw * th * 4); + + memset(px, 0, tw * th * 4); + + sx = 0; + sy = 0; + + while(text[i] != 0) { + int out; + i += MwUTF8ToUTF32(text + i, &out); + + if(out > 0xff) { + out = 0; + } + + if(out == '\n') { + sx = 0; + sy += FontHeight; + } else { + for(y = 0; y < FontHeight; y++) { + for(x = 0; x < FontWidth; x++) { + unsigned char* ppx = &px[((sy + y) * tw + sx + x) * 4]; + if((bold ? MwBoldFontData : MwFontData)[out].data[y] & (1 << ((FontWidth - 1) - x))) { + ppx[0] = color->common.red; + ppx[1] = color->common.green; + ppx[2] = color->common.blue; + ppx[3] = 255; + } else { + ppx[0] = 0; + ppx[1] = 0; + ppx[2] = 0; + ppx[3] = 0; + } + } + } + sx += FontWidth; + } + } + + p = MwLoadRaw(handle, px, tw, th); + r.x = point->x; + r.y = point->y - th / 2; + r.width = tw; + r.height = th; + + if(align == MwALIGNMENT_CENTER) { + r.x -= tw / 2; + } else if(align == MwALIGNMENT_END) { + r.x -= tw; + } + + MwLLDrawPixmap(handle->lowlevel, &r, p); + MwLLDestroyPixmap(p); + free(px); +} + +#if defined(USE_STB_TRUETYPE) +static int ttf_MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int align, MwLLColor color) { + ttf_t* ttf = MwGetVoid(handle, bold ? MwNboldFont : MwNfont); + unsigned char* px; + int tw, th; + MwRect r; + MwLLPixmap p; + int ax, lsb; + int x = 0, y = 0; + if(ttf == NULL) return 1; + + tw = MwTextWidth(handle, text); + th = MwTextHeight(handle, text); + px = malloc(tw * th * 4); + + memset(px, 0, tw * th * 4); + while(text[0] != 0) { + int c; + int x0, y0, x1, y1, cx, cy; + int ow, oh; + unsigned char* out; + + text += MwUTF8ToUTF32(text, &c); + if(c == '\n') { + x = 0; + y += (ttf->ascent - ttf->descent) * ttf->scale; + continue; + } + + stbtt_GetCodepointHMetrics(&ttf->font, c, &ax, &lsb); + + stbtt_GetCodepointBitmapBox(&ttf->font, c, ttf->scale, ttf->scale, &x0, &y0, &x1, &y1); + ow = x1 - x0; + oh = y1 - y0; + out = malloc(ow * oh); + stbtt_MakeCodepointBitmap(&ttf->font, out, ow, oh, ow, ttf->scale, ttf->scale, c); + + for(cy = 0; cy < oh; cy++) { + for(cx = 0; cx < ow; cx++) { + int ox = x + (lsb * ttf->scale) + cx; + int oy = y + (ttf->ascent * ttf->scale) + y0 + cy; + unsigned char* opx = &px[(oy * tw + ox) * 4]; + + opx[0] = color->common.red; + opx[1] = color->common.green; + opx[2] = color->common.blue; + opx[3] = out[cy * ow + cx]; + } + } + + x += ax * ttf->scale; + + free(out); + } + + p = MwLoadRaw(handle, px, tw, th); + r.x = point->x; + r.y = point->y - th / 2; + r.width = tw; + r.height = th; + + if(align == MwALIGNMENT_CENTER) { + r.x -= tw / 2; + } else if(align == MwALIGNMENT_END) { + r.x -= tw; + } + + MwLLDrawPixmap(handle->lowlevel, &r, p); + MwLLDestroyPixmap(p); + free(px); + + return 0; +} + +static int ttf_MwTextWidth(MwWidget handle, const char* text) { + ttf_t* ttf = MwGetVoid(handle, MwNfont); + int ax, lsb; + int tw = 0; + if(ttf == NULL) return -1; + + while(text[0] != 0) { + int c; + text += MwUTF8ToUTF32(text, &c); + + stbtt_GetCodepointHMetrics(&ttf->font, c, &ax, &lsb); + + tw += ax * ttf->scale; + } + + return tw; +} + +static int ttf_MwTextHeight(MwWidget handle, int count) { + ttf_t* ttf = MwGetVoid(handle, MwNfont); + if(ttf == NULL) return -1; + + return (ttf->ascent - ttf->descent) * ttf->scale * count; +} +#elif defined(USE_FREETYPE2) +static int ttf_MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int align, MwLLColor color) { + ttf_t* ttf = MwGetVoid(handle, bold ? MwNboldFont : MwNfont); + int tw, th; + unsigned char* px; + MwLLPixmap p; + MwRect r; + int x = 0, y = 0; + if(ttf == NULL) return 1; + + tw = MwTextWidth(handle, text); + th = MwTextHeight(handle, text); + px = malloc(tw * th * 4); + + memset(px, 0, tw * th * 4); + while(text[0] != 0) { + int c; + FT_Bitmap* bmp; + int cy, cx; + int l = MwUTF8ToUTF32(text, &c); + if(l <= 0) break; + text += l; + + if(c == '\n') { + x = 0; + y += ttf->face->height * 14 / ttf->face->units_per_EM; + continue; + } + + FT_Load_Char(ttf->face, c, FT_LOAD_RENDER); + bmp = &ttf->face->glyph->bitmap; + + for(cy = 0; cy < bmp->rows; cy++) { + for(cx = 0; cx < bmp->width; cx++) { + int ox = x + cx + ttf->face->glyph->bitmap_left; + int oy = y + (ttf->face->height * 14 / ttf->face->units_per_EM) - ttf->face->glyph->bitmap_top + cy + (ttf->face->descender * 14 / ttf->face->units_per_EM); + unsigned char* opx = &px[(oy * tw + ox) * 4]; + + opx[0] = color->common.red; + opx[1] = color->common.green; + opx[2] = color->common.blue; + opx[3] = bmp->buffer[cy * bmp->pitch + cx]; + } + } + + x += ttf->face->glyph->metrics.horiAdvance / 64; + } + + p = MwLoadRaw(handle, px, tw, th); + r.x = point->x; + r.y = point->y - th / 2; + r.width = tw; + r.height = th; + + if(align == MwALIGNMENT_CENTER) { + r.x -= tw / 2; + } else if(align == MwALIGNMENT_END) { + r.x -= tw; + } + + MwLLDrawPixmap(handle->lowlevel, &r, p); + MwLLDestroyPixmap(p); + free(px); + + return 0; +} + +static int ttf_MwTextWidth(MwWidget handle, const char* text) { + ttf_t* ttf = MwGetVoid(handle, MwNfont); + int tw = 0, mtw = 0; + if(ttf == NULL) return -1; + + while(text[0] != 0) { + int c; + int l = MwUTF8ToUTF32(text, &c); + if(l <= 0) break; + text += l; + if(c == '\n') { + tw = 0; + continue; + } + + FT_Load_Char(ttf->face, c, FT_LOAD_RENDER); + + tw += ttf->face->glyph->metrics.horiAdvance / 64; + if(tw > mtw) mtw = tw; + } + + return mtw; +} + +static int ttf_MwTextHeight(MwWidget handle, int count) { + ttf_t* ttf = MwGetVoid(handle, MwNfont); + if(ttf == NULL) return -1; + + return (ttf->face->height * 14 / ttf->face->units_per_EM) * count; +} +#endif + +void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int align, MwLLColor color) { + if(strlen(text) == 0) return; +#ifdef TTF + if(ttf_MwDrawText(handle, point, text, bold, align, color)) +#endif + bitmap_MwDrawText(handle, point, text, bold, align, color); +} + +int MwTextWidth(MwWidget handle, const char* text) { + /* TODO: check newline */ +#ifdef TTF + int st; + + if((st = ttf_MwTextWidth(handle, text)) != -1) return st; +#else + (void)handle; + +#endif + return MwUTF8Length(text) * FontWidth; +} + +int MwTextHeight(MwWidget handle, const char* text) { + int c = 1; + int i = 0; +#ifdef TTF + int st; +#endif + + (void)handle; + (void)text; + + while(text[i] != 0) { + int out; + int l = MwUTF8ToUTF32(text + i, &out); + if(l == 0) break; + i += l; + + if(out == '\n') c++; + } +#ifdef TTF + if((st = ttf_MwTextHeight(handle, c)) != -1) return st; +#endif + return FontHeight * c; +} + +void* MwFontLoad(unsigned char* data, unsigned int size) { +#if defined(USE_FREETYPE2) + ttf_t* ttf = malloc(sizeof(*ttf)); + ttf->data = malloc(size); + memcpy(ttf->data, data, size); + FT_Init_FreeType(&ttf->library); + FT_New_Memory_Face(ttf->library, ttf->data, size, 0, &ttf->face); + + FT_Set_Pixel_Sizes(ttf->face, 0, 14); + + return ttf; +#elif defined(USE_STB_TRUETYPE) + ttf_t* ttf = malloc(sizeof(*ttf)); + ttf->data = malloc(size); + memcpy(ttf->data, data, size); + stbtt_InitFont(&ttf->font, ttf->data, 0); + + ttf->scale = stbtt_ScaleForPixelHeight(&ttf->font, 16); + stbtt_GetFontVMetrics(&ttf->font, &ttf->ascent, &ttf->descent, 0); + + return ttf; +#else + (void)data; + (void)size; + return NULL; +#endif +} + +void MwFontFree(void* handle) { +#if defined(USE_FREETYPE2) + ttf_t* ttf = handle; + + FT_Done_Face(ttf->face); + FT_Done_FreeType(ttf->library); + + free(ttf->data); + free(ttf); +#elif defined(USE_STB_TRUETYPE) + ttf_t* ttf = handle; + + free(ttf->data); + free(ttf); +#else + (void)handle; +#endif +} diff --git a/src/text/font/boldttf.c b/src/text/font/boldttf.c deleted file mode 100644 index 14b259906..000000000 --- a/src/text/font/boldttf.c +++ /dev/null @@ -1,3052 +0,0 @@ -#include - -#if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) -unsigned char MwBoldTTFData[] = { - 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x04, 0x00, 0x20, - 0x46, 0x46, 0x54, 0x4d, 0x94, 0x9f, 0x60, 0x18, 0x00, 0x00, 0x8e, 0xa8, - 0x00, 0x00, 0x00, 0x1c, 0x4f, 0x53, 0x2f, 0x32, 0xa2, 0x6c, 0xa1, 0xa5, - 0x00, 0x00, 0x01, 0xa8, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, - 0x09, 0xe8, 0xe7, 0x70, 0x00, 0x00, 0x05, 0x10, 0x00, 0x00, 0x01, 0x4a, - 0x63, 0x76, 0x74, 0x20, 0x13, 0x2d, 0x1a, 0x94, 0x00, 0x00, 0x0f, 0x34, - 0x00, 0x00, 0x00, 0xaa, 0x66, 0x65, 0x61, 0x74, 0xc0, 0x1a, 0x05, 0x59, - 0x00, 0x00, 0x8e, 0x78, 0x00, 0x00, 0x00, 0x30, 0x66, 0x70, 0x67, 0x6d, - 0xbb, 0x73, 0xa4, 0x75, 0x00, 0x00, 0x06, 0x5c, 0x00, 0x00, 0x07, 0xe0, - 0x67, 0x61, 0x73, 0x70, 0x00, 0x08, 0x00, 0x1b, 0x00, 0x00, 0x8d, 0xf4, - 0x00, 0x00, 0x00, 0x0c, 0x67, 0x6c, 0x79, 0x66, 0x5b, 0x0c, 0x09, 0x3e, - 0x00, 0x00, 0x11, 0x68, 0x00, 0x00, 0x57, 0x30, 0x68, 0x65, 0x61, 0x64, - 0x15, 0x93, 0x86, 0x3a, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x00, 0x36, - 0x68, 0x68, 0x65, 0x61, 0x0f, 0xb4, 0x05, 0xf1, 0x00, 0x00, 0x01, 0x64, - 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, 0x81, 0x02, 0x45, 0x0f, - 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x6b, 0x65, 0x72, 0x6e, - 0x4a, 0x11, 0x58, 0x96, 0x00, 0x00, 0x68, 0x98, 0x00, 0x00, 0x1a, 0x76, - 0x6c, 0x6f, 0x63, 0x61, 0xcc, 0x0a, 0xb6, 0xe0, 0x00, 0x00, 0x0f, 0xe0, - 0x00, 0x00, 0x01, 0x86, 0x6d, 0x61, 0x78, 0x70, 0x02, 0x3a, 0x01, 0x34, - 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x00, 0x20, 0x6d, 0x6f, 0x72, 0x78, - 0x00, 0x32, 0x00, 0xbb, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x78, - 0x6e, 0x61, 0x6d, 0x65, 0x1f, 0x23, 0x2a, 0x61, 0x00, 0x00, 0x83, 0x10, - 0x00, 0x00, 0x09, 0x2c, 0x70, 0x6f, 0x73, 0x74, 0xb1, 0xe2, 0x4e, 0x7c, - 0x00, 0x00, 0x8c, 0x3c, 0x00, 0x00, 0x01, 0xb8, 0x70, 0x72, 0x65, 0x70, - 0xc8, 0x09, 0xfc, 0x6b, 0x00, 0x00, 0x0e, 0x3c, 0x00, 0x00, 0x00, 0xf8, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x19, 0x9a, 0x79, 0x05, 0xaf, 0x87, - 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x1f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc9, 0x42, 0x17, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xf9, 0x0a, 0x7c, - 0xff, 0x68, 0xfe, 0x14, 0x07, 0xbc, 0x07, 0x73, 0x00, 0x01, 0x00, 0x08, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x08, 0x8d, 0xfd, 0xa8, 0x00, 0x00, 0x08, 0x00, 0xff, 0x68, 0xff, 0x86, - 0x07, 0xbc, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x01, 0x00, 0x00, - 0x00, 0xc2, 0x00, 0x41, 0x00, 0x05, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x02, - 0x00, 0x10, 0x00, 0x2f, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x00, 0x00, 0x86, - 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x04, 0x9c, 0x02, 0xbc, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x9a, 0x05, 0x33, 0x00, 0x00, 0x01, 0x1f, 0x05, 0x9a, - 0x05, 0x33, 0x00, 0x00, 0x03, 0xd1, 0x00, 0x66, 0x01, 0xfc, 0x08, 0x02, - 0x02, 0x0b, 0x08, 0x06, 0x03, 0x05, 0x04, 0x02, 0x02, 0x04, 0xe0, 0x00, - 0x02, 0xef, 0x40, 0x00, 0x20, 0x5b, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x31, 0x41, 0x53, 0x43, 0x00, 0x20, 0x00, 0x20, 0x00, 0xff, - 0x06, 0x1f, 0xfe, 0x14, 0x00, 0x84, 0x08, 0x8d, 0x02, 0x58, 0x20, 0x00, - 0x01, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x05, 0xb6, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x75, - 0x03, 0xc7, 0x00, 0x85, 0x05, 0x2b, 0x00, 0x2d, 0x04, 0x91, 0x00, 0x58, - 0x07, 0x35, 0x00, 0x3f, 0x06, 0x00, 0x00, 0x52, 0x02, 0x21, 0x00, 0x85, - 0x02, 0xb6, 0x00, 0x52, 0x02, 0xb6, 0x00, 0x3d, 0x04, 0x5c, 0x00, 0x3f, - 0x04, 0x91, 0x00, 0x58, 0x02, 0x52, 0x00, 0x3f, 0x02, 0x93, 0x00, 0x3d, - 0x02, 0x48, 0x00, 0x75, 0x03, 0x4e, 0x00, 0x0e, 0x04, 0x91, 0x00, 0x4a, - 0x04, 0x91, 0x00, 0x79, 0x04, 0x91, 0x00, 0x4e, 0x04, 0x91, 0x00, 0x4e, - 0x04, 0x91, 0x00, 0x23, 0x04, 0x91, 0x00, 0x64, 0x04, 0x91, 0x00, 0x48, - 0x04, 0x91, 0x00, 0x37, 0x04, 0x91, 0x00, 0x48, 0x04, 0x91, 0x00, 0x42, - 0x02, 0x48, 0x00, 0x75, 0x02, 0x52, 0x00, 0x3f, 0x04, 0x91, 0x00, 0x58, - 0x04, 0x91, 0x00, 0x58, 0x04, 0x91, 0x00, 0x58, 0x03, 0xd1, 0x00, 0x06, - 0x07, 0x2d, 0x00, 0x66, 0x05, 0x85, 0x00, 0x00, 0x05, 0x60, 0x00, 0xb8, - 0x05, 0x19, 0x00, 0x77, 0x05, 0xec, 0x00, 0xb8, 0x04, 0x7b, 0x00, 0xb8, - 0x04, 0x64, 0x00, 0xb8, 0x05, 0xcb, 0x00, 0x77, 0x06, 0x1f, 0x00, 0xb8, - 0x02, 0xa6, 0x00, 0xb8, 0x02, 0xa6, 0xff, 0x68, 0x05, 0x50, 0x00, 0xb8, - 0x04, 0x85, 0x00, 0xb8, 0x07, 0x8b, 0x00, 0xb8, 0x06, 0x81, 0x00, 0xb8, - 0x06, 0x5e, 0x00, 0x77, 0x05, 0x06, 0x00, 0xb8, 0x06, 0x5e, 0x00, 0x77, - 0x05, 0x48, 0x00, 0xb8, 0x04, 0x68, 0x00, 0x5e, 0x04, 0xa2, 0x00, 0x29, - 0x06, 0x0c, 0x00, 0xae, 0x05, 0x33, 0x00, 0x00, 0x07, 0xbc, 0x00, 0x00, - 0x05, 0x56, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x04, 0xa2, 0x00, 0x31, - 0x02, 0xa6, 0x00, 0x8f, 0x03, 0x4e, 0x00, 0x0c, 0x02, 0xa6, 0x00, 0x33, - 0x04, 0x42, 0x00, 0x08, 0x03, 0x4a, 0xff, 0xfc, 0x04, 0xdb, 0x01, 0x4c, - 0x04, 0xd5, 0x00, 0x56, 0x05, 0x10, 0x00, 0xa0, 0x04, 0x1d, 0x00, 0x5c, - 0x05, 0x10, 0x00, 0x5c, 0x04, 0xba, 0x00, 0x5c, 0x03, 0x19, 0x00, 0x29, - 0x04, 0x85, 0x00, 0x06, 0x05, 0x42, 0x00, 0xa0, 0x02, 0x71, 0x00, 0x93, - 0x02, 0x71, 0xff, 0x7d, 0x04, 0xf6, 0x00, 0xa0, 0x02, 0x71, 0x00, 0xa0, - 0x07, 0xdb, 0x00, 0xa0, 0x05, 0x42, 0x00, 0xa0, 0x04, 0xf4, 0x00, 0x5c, - 0x05, 0x10, 0x00, 0xa0, 0x05, 0x10, 0x00, 0x5c, 0x03, 0xa2, 0x00, 0xa0, - 0x03, 0xfa, 0x00, 0x5c, 0x03, 0x79, 0x00, 0x2f, 0x05, 0x42, 0x00, 0x9a, - 0x04, 0x8d, 0x00, 0x00, 0x06, 0xd9, 0x00, 0x14, 0x04, 0xa0, 0x00, 0x0a, - 0x04, 0x8d, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x37, 0x03, 0x27, 0x00, 0x1f, - 0x04, 0x68, 0x01, 0xc7, 0x03, 0x27, 0x00, 0x52, 0x04, 0x91, 0x00, 0x58, - 0x02, 0x14, 0x00, 0x00, 0x02, 0x4a, 0x00, 0x75, 0x04, 0x91, 0x00, 0x8f, - 0x04, 0x91, 0x00, 0x52, 0x04, 0x91, 0x00, 0x71, 0x04, 0x91, 0x00, 0x06, - 0x04, 0x68, 0x01, 0xc7, 0x03, 0xe3, 0x00, 0x6a, 0x04, 0xdb, 0x01, 0x17, - 0x06, 0xa8, 0x00, 0x64, 0x03, 0x10, 0x00, 0x2f, 0x04, 0xec, 0x00, 0x52, - 0x04, 0x91, 0x00, 0x58, 0x02, 0x93, 0x00, 0x3d, 0x06, 0xa8, 0x00, 0x64, - 0x04, 0x00, 0xff, 0xfa, 0x03, 0x6d, 0x00, 0x5c, 0x04, 0x91, 0x00, 0x58, - 0x03, 0x08, 0x00, 0x2f, 0x03, 0x08, 0x00, 0x3b, 0x04, 0xdb, 0x01, 0x4c, - 0x05, 0x48, 0x00, 0xa0, 0x05, 0x3d, 0x00, 0x71, 0x02, 0x48, 0x00, 0x75, - 0x01, 0xa4, 0xff, 0xdb, 0x03, 0x08, 0x00, 0x5c, 0x03, 0x1b, 0x00, 0x39, - 0x04, 0xec, 0x00, 0x52, 0x07, 0x0c, 0x00, 0x2e, 0x07, 0x0c, 0x00, 0x2e, - 0x07, 0x0c, 0x00, 0x5a, 0x03, 0xd1, 0x00, 0x3d, 0x05, 0x85, 0x00, 0x00, - 0x05, 0x85, 0x00, 0x00, 0x05, 0x85, 0x00, 0x00, 0x05, 0x85, 0x00, 0x00, - 0x05, 0x85, 0x00, 0x00, 0x05, 0x85, 0x00, 0x00, 0x07, 0x9e, 0x00, 0x00, - 0x05, 0x19, 0x00, 0x77, 0x04, 0x7b, 0x00, 0xb8, 0x04, 0x7b, 0x00, 0xb8, - 0x04, 0x7b, 0x00, 0xaf, 0x04, 0x7b, 0x00, 0xb8, 0x02, 0xa6, 0xff, 0xc6, - 0x02, 0xa6, 0x00, 0xa7, 0x02, 0xa6, 0xff, 0xa0, 0x02, 0xa6, 0xff, 0xfd, - 0x05, 0xec, 0x00, 0x2f, 0x06, 0x81, 0x00, 0xb8, 0x06, 0x5e, 0x00, 0x77, - 0x06, 0x5e, 0x00, 0x77, 0x06, 0x5e, 0x00, 0x77, 0x06, 0x5e, 0x00, 0x77, - 0x06, 0x5e, 0x00, 0x77, 0x04, 0x91, 0x00, 0x81, 0x06, 0x5e, 0x00, 0x77, - 0x06, 0x0c, 0x00, 0xae, 0x06, 0x0c, 0x00, 0xae, 0x06, 0x0c, 0x00, 0xae, - 0x06, 0x0c, 0x00, 0xae, 0x04, 0xfe, 0x00, 0x00, 0x05, 0x06, 0x00, 0xb8, - 0x05, 0xb0, 0x00, 0xa0, 0x04, 0xd5, 0x00, 0x56, 0x04, 0xd5, 0x00, 0x56, - 0x04, 0xd5, 0x00, 0x56, 0x04, 0xd5, 0x00, 0x56, 0x04, 0xd5, 0x00, 0x56, - 0x04, 0xd5, 0x00, 0x56, 0x07, 0x56, 0x00, 0x56, 0x04, 0x1d, 0x00, 0x5c, - 0x04, 0xba, 0x00, 0x5c, 0x04, 0xba, 0x00, 0x5c, 0x04, 0xba, 0x00, 0x5c, - 0x04, 0xba, 0x00, 0x5c, 0x02, 0x71, 0xff, 0x9b, 0x02, 0x71, 0x00, 0x91, - 0x02, 0x71, 0xff, 0x86, 0x02, 0x71, 0xff, 0xe3, 0x04, 0xf4, 0x00, 0x5c, - 0x05, 0x42, 0x00, 0xa0, 0x04, 0xf4, 0x00, 0x5c, 0x04, 0xf4, 0x00, 0x5c, - 0x04, 0xf4, 0x00, 0x5c, 0x04, 0xf4, 0x00, 0x5c, 0x04, 0xf4, 0x00, 0x5c, - 0x04, 0x91, 0x00, 0x58, 0x04, 0xf4, 0x00, 0x5c, 0x05, 0x42, 0x00, 0x9a, - 0x05, 0x42, 0x00, 0x9a, 0x05, 0x42, 0x00, 0x9a, 0x05, 0x42, 0x00, 0x9a, - 0x04, 0x8d, 0x00, 0x00, 0x05, 0x10, 0x00, 0xa0, 0x04, 0x8d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x03, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x7e, 0x00, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x20, 0x00, 0xa0, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xc2, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x04, - 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, - 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, - 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, - 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x00, 0x86, 0x87, - 0x89, 0x8b, 0x93, 0x98, 0x9e, 0xa3, 0xa2, 0xa4, 0xa6, 0xa5, 0xa7, 0xa9, - 0xab, 0xaa, 0xac, 0xad, 0xaf, 0xae, 0xb0, 0xb1, 0xb3, 0xb5, 0xb4, 0xb6, - 0xb8, 0xb7, 0xbc, 0xbb, 0xbd, 0xbe, 0x00, 0x72, 0x64, 0x65, 0x69, 0x00, - 0x78, 0xa1, 0x70, 0x6b, 0x00, 0x76, 0x6a, 0x00, 0x88, 0x9a, 0x00, 0x73, - 0x00, 0x00, 0x67, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x7c, 0x00, - 0xa8, 0xba, 0x81, 0x63, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x7d, 0x00, - 0x62, 0x82, 0x85, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb9, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, - 0x00, 0x00, 0x00, 0x84, 0x8c, 0x83, 0x8d, 0x8a, 0x8f, 0x90, 0x91, 0x8e, - 0x95, 0x96, 0x00, 0x94, 0x9c, 0x9d, 0x9b, 0x00, 0x00, 0x00, 0x71, 0x00, - 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x47, 0x5b, 0x5a, - 0x59, 0x58, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x4f, 0x4e, 0x4d, 0x4c, - 0x4b, 0x4a, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, - 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x31, - 0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, - 0x21, 0x1f, 0x18, 0x14, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0b, 0x0a, 0x09, - 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x2c, 0x20, 0xb0, - 0x01, 0x60, 0x45, 0xb0, 0x03, 0x25, 0x20, 0x11, 0x46, 0x61, 0x23, 0x45, - 0x23, 0x61, 0x48, 0x2d, 0x2c, 0x20, 0x45, 0x18, 0x68, 0x44, 0x2d, 0x2c, - 0x45, 0x23, 0x46, 0x60, 0xb0, 0x20, 0x61, 0x20, 0xb0, 0x46, 0x60, 0xb0, - 0x04, 0x26, 0x23, 0x48, 0x48, 0x2d, 0x2c, 0x45, 0x23, 0x46, 0x23, 0x61, - 0xb0, 0x20, 0x60, 0x20, 0xb0, 0x26, 0x61, 0xb0, 0x20, 0x61, 0xb0, 0x04, - 0x26, 0x23, 0x48, 0x48, 0x2d, 0x2c, 0x45, 0x23, 0x46, 0x60, 0xb0, 0x40, - 0x61, 0x20, 0xb0, 0x66, 0x60, 0xb0, 0x04, 0x26, 0x23, 0x48, 0x48, 0x2d, - 0x2c, 0x45, 0x23, 0x46, 0x23, 0x61, 0xb0, 0x40, 0x60, 0x20, 0xb0, 0x26, - 0x61, 0xb0, 0x40, 0x61, 0xb0, 0x04, 0x26, 0x23, 0x48, 0x48, 0x2d, 0x2c, - 0x01, 0x10, 0x20, 0x3c, 0x00, 0x3c, 0x2d, 0x2c, 0x20, 0x45, 0x23, 0x20, - 0xb0, 0xcd, 0x44, 0x23, 0x20, 0xb8, 0x01, 0x5a, 0x51, 0x58, 0x23, 0x20, - 0xb0, 0x8d, 0x44, 0x23, 0x59, 0x20, 0xb0, 0xed, 0x51, 0x58, 0x23, 0x20, - 0xb0, 0x4d, 0x44, 0x23, 0x59, 0x20, 0xb0, 0x04, 0x26, 0x51, 0x58, 0x23, - 0x20, 0xb0, 0x0d, 0x44, 0x23, 0x59, 0x21, 0x21, 0x2d, 0x2c, 0x20, 0x20, - 0x45, 0x18, 0x68, 0x44, 0x20, 0xb0, 0x01, 0x60, 0x20, 0x45, 0xb0, 0x46, - 0x76, 0x68, 0x8a, 0x45, 0x60, 0x44, 0x2d, 0x2c, 0x01, 0xb1, 0x0b, 0x0a, - 0x43, 0x23, 0x43, 0x65, 0x0a, 0x2d, 0x2c, 0x00, 0xb1, 0x0a, 0x0b, 0x43, - 0x23, 0x43, 0x0b, 0x2d, 0x2c, 0x00, 0xb0, 0x28, 0x23, 0x70, 0xb1, 0x01, - 0x28, 0x3e, 0x01, 0xb0, 0x28, 0x23, 0x70, 0xb1, 0x02, 0x28, 0x45, 0x3a, - 0xb1, 0x02, 0x00, 0x08, 0x0d, 0x2d, 0x2c, 0x20, 0x45, 0xb0, 0x03, 0x25, - 0x45, 0x61, 0x64, 0xb0, 0x50, 0x51, 0x58, 0x45, 0x44, 0x1b, 0x21, 0x21, - 0x59, 0x2d, 0x2c, 0x49, 0xb0, 0x0e, 0x23, 0x44, 0x2d, 0x2c, 0x20, 0x45, - 0xb0, 0x00, 0x43, 0x60, 0x44, 0x2d, 0x2c, 0x01, 0xb0, 0x06, 0x43, 0xb0, - 0x07, 0x43, 0x65, 0x0a, 0x2d, 0x2c, 0x20, 0x69, 0xb0, 0x40, 0x61, 0xb0, - 0x00, 0x8b, 0x20, 0xb1, 0x2c, 0xc0, 0x8a, 0x8c, 0xb8, 0x10, 0x00, 0x62, - 0x60, 0x2b, 0x0c, 0x64, 0x23, 0x64, 0x61, 0x5c, 0x58, 0xb0, 0x03, 0x61, - 0x59, 0x2d, 0x2c, 0x8a, 0x03, 0x45, 0x8a, 0x8a, 0x87, 0xb0, 0x11, 0x2b, - 0xb0, 0x29, 0x23, 0x44, 0xb0, 0x29, 0x7a, 0xe4, 0x18, 0x2d, 0x2c, 0x45, - 0x65, 0xb0, 0x2c, 0x23, 0x44, 0x45, 0xb0, 0x2b, 0x23, 0x44, 0x2d, 0x2c, - 0x4b, 0x52, 0x58, 0x45, 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x4b, - 0x51, 0x58, 0x45, 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x01, 0xb0, - 0x05, 0x25, 0x10, 0x23, 0x20, 0x8a, 0xf5, 0x00, 0xb0, 0x01, 0x60, 0x23, - 0xed, 0xec, 0x2d, 0x2c, 0x01, 0xb0, 0x05, 0x25, 0x10, 0x23, 0x20, 0x8a, - 0xf5, 0x00, 0xb0, 0x01, 0x61, 0x23, 0xed, 0xec, 0x2d, 0x2c, 0x01, 0xb0, - 0x06, 0x25, 0x10, 0xf5, 0x00, 0xed, 0xec, 0x2d, 0x2c, 0xb0, 0x02, 0x43, - 0xb0, 0x01, 0x52, 0x58, 0x21, 0x21, 0x21, 0x21, 0x21, 0x1b, 0x46, 0x23, - 0x46, 0x60, 0x8a, 0x8a, 0x46, 0x23, 0x20, 0x46, 0x8a, 0x60, 0x8a, 0x61, - 0xb8, 0xff, 0x80, 0x62, 0x23, 0x20, 0x10, 0x23, 0x8a, 0xb1, 0x0c, 0x0c, - 0x8a, 0x70, 0x45, 0x60, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x01, 0x61, - 0xb8, 0xff, 0xba, 0x8b, 0x1b, 0xb0, 0x46, 0x8c, 0x59, 0xb0, 0x10, 0x60, - 0x68, 0x01, 0x3a, 0x59, 0x2d, 0x2c, 0x20, 0x45, 0xb0, 0x03, 0x25, 0x46, - 0x52, 0x4b, 0xb0, 0x13, 0x51, 0x5b, 0x58, 0xb0, 0x02, 0x25, 0x46, 0x20, - 0x68, 0x61, 0xb0, 0x03, 0x25, 0xb0, 0x03, 0x25, 0x3f, 0x23, 0x21, 0x38, - 0x1b, 0x21, 0x11, 0x59, 0x2d, 0x2c, 0x20, 0x45, 0xb0, 0x03, 0x25, 0x46, - 0x50, 0x58, 0xb0, 0x02, 0x25, 0x46, 0x20, 0x68, 0x61, 0xb0, 0x03, 0x25, - 0xb0, 0x03, 0x25, 0x3f, 0x23, 0x21, 0x38, 0x1b, 0x21, 0x11, 0x59, 0x2d, - 0x2c, 0x00, 0xb0, 0x07, 0x43, 0xb0, 0x06, 0x43, 0x0b, 0x2d, 0x2c, 0x21, - 0x21, 0x0c, 0x64, 0x23, 0x64, 0x8b, 0xb8, 0x40, 0x00, 0x62, 0x2d, 0x2c, - 0x21, 0xb0, 0x80, 0x51, 0x58, 0x0c, 0x64, 0x23, 0x64, 0x8b, 0xb8, 0x20, - 0x00, 0x62, 0x1b, 0xb2, 0x00, 0x40, 0x2f, 0x2b, 0x59, 0xb0, 0x02, 0x60, - 0x2d, 0x2c, 0x21, 0xb0, 0xc0, 0x51, 0x58, 0x0c, 0x64, 0x23, 0x64, 0x8b, - 0xb8, 0x15, 0x55, 0x62, 0x1b, 0xb2, 0x00, 0x80, 0x2f, 0x2b, 0x59, 0xb0, - 0x02, 0x60, 0x2d, 0x2c, 0x0c, 0x64, 0x23, 0x64, 0x8b, 0xb8, 0x40, 0x00, - 0x62, 0x60, 0x23, 0x21, 0x2d, 0x2c, 0x4b, 0x53, 0x58, 0x8a, 0xb0, 0x04, - 0x25, 0x49, 0x64, 0x23, 0x45, 0x69, 0xb0, 0x40, 0x8b, 0x61, 0xb0, 0x80, - 0x62, 0xb0, 0x20, 0x61, 0x6a, 0xb0, 0x0e, 0x23, 0x44, 0x23, 0x10, 0xb0, - 0x0e, 0xf6, 0x1b, 0x21, 0x23, 0x8a, 0x12, 0x11, 0x20, 0x39, 0x2f, 0x59, - 0x2d, 0x2c, 0x4b, 0x53, 0x58, 0x20, 0xb0, 0x03, 0x25, 0x49, 0x64, 0x69, - 0x20, 0xb0, 0x05, 0x26, 0xb0, 0x06, 0x25, 0x49, 0x64, 0x23, 0x61, 0xb0, - 0x80, 0x62, 0xb0, 0x20, 0x61, 0x6a, 0xb0, 0x0e, 0x23, 0x44, 0xb0, 0x04, - 0x26, 0x10, 0xb0, 0x0e, 0xf6, 0x8a, 0x10, 0xb0, 0x0e, 0x23, 0x44, 0xb0, - 0x0e, 0xf6, 0xb0, 0x0e, 0x23, 0x44, 0xb0, 0x0e, 0xed, 0x1b, 0x8a, 0xb0, - 0x04, 0x26, 0x11, 0x12, 0x20, 0x39, 0x23, 0x20, 0x39, 0x2f, 0x2f, 0x59, - 0x2d, 0x2c, 0x45, 0x23, 0x45, 0x60, 0x23, 0x45, 0x60, 0x23, 0x45, 0x60, - 0x23, 0x76, 0x68, 0x18, 0xb0, 0x80, 0x62, 0x20, 0x2d, 0x2c, 0xb0, 0x48, - 0x2b, 0x2d, 0x2c, 0x20, 0x45, 0xb0, 0x00, 0x54, 0x58, 0xb0, 0x40, 0x44, - 0x20, 0x45, 0xb0, 0x40, 0x61, 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, - 0x45, 0xb1, 0x30, 0x2f, 0x45, 0x23, 0x45, 0x61, 0x60, 0xb0, 0x01, 0x60, - 0x69, 0x44, 0x2d, 0x2c, 0x4b, 0x51, 0x58, 0xb0, 0x2f, 0x23, 0x70, 0xb0, - 0x14, 0x23, 0x42, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x4b, 0x51, 0x58, - 0x20, 0xb0, 0x03, 0x25, 0x45, 0x69, 0x53, 0x58, 0x44, 0x1b, 0x21, 0x21, - 0x59, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x45, 0xb0, 0x14, 0x43, 0xb0, - 0x00, 0x60, 0x63, 0xb0, 0x01, 0x60, 0x69, 0x44, 0x2d, 0x2c, 0xb0, 0x2f, - 0x45, 0x44, 0x2d, 0x2c, 0x45, 0x23, 0x20, 0x45, 0x8a, 0x60, 0x44, 0x2d, - 0x2c, 0x46, 0x23, 0x46, 0x60, 0x8a, 0x8a, 0x46, 0x23, 0x20, 0x46, 0x8a, - 0x60, 0x8a, 0x61, 0xb8, 0xff, 0x80, 0x62, 0x23, 0x20, 0x10, 0x23, 0x8a, - 0xb1, 0x0c, 0x0c, 0x8a, 0x70, 0x45, 0x60, 0x20, 0xb0, 0x00, 0x50, 0x58, - 0xb0, 0x01, 0x61, 0xb8, 0xff, 0x80, 0x8b, 0x1b, 0xb0, 0x81, 0x8c, 0x59, - 0x68, 0x3a, 0x2d, 0x2c, 0x4b, 0x23, 0x51, 0x58, 0xb9, 0x00, 0x33, 0xff, - 0xe0, 0xb1, 0x34, 0x20, 0x1b, 0xb3, 0x33, 0x00, 0x34, 0x00, 0x59, 0x44, - 0x44, 0x2d, 0x2c, 0xb0, 0x16, 0x43, 0x58, 0xb0, 0x03, 0x26, 0x45, 0x8a, - 0x58, 0x64, 0x66, 0xb0, 0x1f, 0x60, 0x1b, 0x64, 0xb0, 0x20, 0x60, 0x66, - 0x20, 0x58, 0x1b, 0x21, 0xb0, 0x40, 0x59, 0xb0, 0x01, 0x61, 0x59, 0x23, - 0x58, 0x65, 0x59, 0xb0, 0x29, 0x23, 0x44, 0x23, 0x10, 0xb0, 0x29, 0xe0, - 0x1b, 0x21, 0x21, 0x21, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x02, 0x43, - 0x54, 0x58, 0x4b, 0x53, 0x23, 0x4b, 0x51, 0x5a, 0x58, 0x38, 0x1b, 0x21, - 0x21, 0x59, 0x1b, 0x21, 0x21, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x16, - 0x43, 0x58, 0xb0, 0x04, 0x25, 0x45, 0x64, 0xb0, 0x20, 0x60, 0x66, 0x20, - 0x58, 0x1b, 0x21, 0xb0, 0x40, 0x59, 0xb0, 0x01, 0x61, 0x23, 0x58, 0x1b, - 0x65, 0x59, 0xb0, 0x29, 0x23, 0x44, 0xb0, 0x05, 0x25, 0xb0, 0x08, 0x25, - 0x08, 0x20, 0x58, 0x02, 0x1b, 0x03, 0x59, 0xb0, 0x04, 0x25, 0x10, 0xb0, - 0x05, 0x25, 0x20, 0x46, 0xb0, 0x04, 0x25, 0x23, 0x42, 0x3c, 0xb0, 0x04, - 0x25, 0xb0, 0x07, 0x25, 0x08, 0xb0, 0x07, 0x25, 0x10, 0xb0, 0x06, 0x25, - 0x20, 0x46, 0xb0, 0x04, 0x25, 0xb0, 0x01, 0x60, 0x23, 0x42, 0x3c, 0x20, - 0x58, 0x01, 0x1b, 0x00, 0x59, 0xb0, 0x04, 0x25, 0x10, 0xb0, 0x05, 0x25, - 0xb0, 0x29, 0xe0, 0xb0, 0x29, 0x20, 0x45, 0x65, 0x44, 0xb0, 0x07, 0x25, - 0x10, 0xb0, 0x06, 0x25, 0xb0, 0x29, 0xe0, 0xb0, 0x05, 0x25, 0xb0, 0x08, - 0x25, 0x08, 0x20, 0x58, 0x02, 0x1b, 0x03, 0x59, 0xb0, 0x05, 0x25, 0xb0, - 0x03, 0x25, 0x43, 0x48, 0xb0, 0x04, 0x25, 0xb0, 0x07, 0x25, 0x08, 0xb0, - 0x06, 0x25, 0xb0, 0x03, 0x25, 0xb0, 0x01, 0x60, 0x43, 0x48, 0x1b, 0x21, - 0x59, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2d, 0x2c, 0x02, 0xb0, - 0x04, 0x25, 0x20, 0x20, 0x46, 0xb0, 0x04, 0x25, 0x23, 0x42, 0xb0, 0x05, - 0x25, 0x08, 0xb0, 0x03, 0x25, 0x45, 0x48, 0x21, 0x21, 0x21, 0x21, 0x2d, - 0x2c, 0x02, 0xb0, 0x03, 0x25, 0x20, 0xb0, 0x04, 0x25, 0x08, 0xb0, 0x02, - 0x25, 0x43, 0x48, 0x21, 0x21, 0x21, 0x2d, 0x2c, 0x45, 0x23, 0x20, 0x45, - 0x18, 0x20, 0xb0, 0x00, 0x50, 0x20, 0x58, 0x23, 0x65, 0x23, 0x59, 0x23, - 0x68, 0x20, 0xb0, 0x40, 0x50, 0x58, 0x21, 0xb0, 0x40, 0x59, 0x23, 0x58, - 0x65, 0x59, 0x8a, 0x60, 0x44, 0x2d, 0x2c, 0x4b, 0x53, 0x23, 0x4b, 0x51, - 0x5a, 0x58, 0x20, 0x45, 0x8a, 0x60, 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, - 0x2c, 0x4b, 0x54, 0x58, 0x20, 0x45, 0x8a, 0x60, 0x44, 0x1b, 0x21, 0x21, - 0x59, 0x2d, 0x2c, 0x4b, 0x53, 0x23, 0x4b, 0x51, 0x5a, 0x58, 0x38, 0x1b, - 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x00, 0x21, 0x4b, 0x54, 0x58, 0x38, - 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x02, 0x43, 0x54, 0x58, 0xb0, - 0x46, 0x2b, 0x1b, 0x21, 0x21, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x02, - 0x43, 0x54, 0x58, 0xb0, 0x47, 0x2b, 0x1b, 0x21, 0x21, 0x21, 0x59, 0x2d, - 0x2c, 0xb0, 0x02, 0x43, 0x54, 0x58, 0xb0, 0x48, 0x2b, 0x1b, 0x21, 0x21, - 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x02, 0x43, 0x54, 0x58, 0xb0, 0x49, - 0x2b, 0x1b, 0x21, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x20, 0x8a, 0x08, 0x23, - 0x4b, 0x53, 0x8a, 0x4b, 0x51, 0x5a, 0x58, 0x23, 0x38, 0x1b, 0x21, 0x21, - 0x59, 0x2d, 0x2c, 0x00, 0xb0, 0x02, 0x25, 0x49, 0xb0, 0x00, 0x53, 0x58, - 0x20, 0xb0, 0x40, 0x38, 0x11, 0x1b, 0x21, 0x59, 0x2d, 0x2c, 0x01, 0x46, - 0x23, 0x46, 0x60, 0x23, 0x46, 0x61, 0x23, 0x20, 0x10, 0x20, 0x46, 0x8a, - 0x61, 0xb8, 0xff, 0x80, 0x62, 0x8a, 0xb1, 0x40, 0x40, 0x8a, 0x70, 0x45, - 0x60, 0x68, 0x3a, 0x2d, 0x2c, 0x20, 0x8a, 0x23, 0x49, 0x64, 0x8a, 0x23, - 0x53, 0x58, 0x3c, 0x1b, 0x21, 0x59, 0x2d, 0x2c, 0x4b, 0x52, 0x58, 0x7d, - 0x1b, 0x7a, 0x59, 0x2d, 0x2c, 0xb0, 0x12, 0x00, 0x4b, 0x01, 0x4b, 0x54, - 0x42, 0x2d, 0x2c, 0xb1, 0x02, 0x00, 0x42, 0xb1, 0x23, 0x01, 0x88, 0x51, - 0xb1, 0x40, 0x01, 0x88, 0x53, 0x5a, 0x58, 0xb9, 0x10, 0x00, 0x00, 0x20, - 0x88, 0x54, 0x58, 0xb2, 0x02, 0x01, 0x02, 0x43, 0x60, 0x42, 0x59, 0xb1, - 0x24, 0x01, 0x88, 0x51, 0x58, 0xb9, 0x20, 0x00, 0x00, 0x40, 0x88, 0x54, - 0x58, 0xb2, 0x02, 0x02, 0x02, 0x43, 0x60, 0x42, 0xb1, 0x24, 0x01, 0x88, - 0x54, 0x58, 0xb2, 0x02, 0x20, 0x02, 0x43, 0x60, 0x42, 0x00, 0x4b, 0x01, - 0x4b, 0x52, 0x58, 0xb2, 0x02, 0x08, 0x02, 0x43, 0x60, 0x42, 0x59, 0x1b, - 0xb9, 0x40, 0x00, 0x00, 0x80, 0x88, 0x54, 0x58, 0xb2, 0x02, 0x04, 0x02, - 0x43, 0x60, 0x42, 0x59, 0xb9, 0x40, 0x00, 0x00, 0x80, 0x63, 0xb8, 0x01, - 0x00, 0x88, 0x54, 0x58, 0xb2, 0x02, 0x08, 0x02, 0x43, 0x60, 0x42, 0x59, - 0xb9, 0x40, 0x00, 0x01, 0x00, 0x63, 0xb8, 0x02, 0x00, 0x88, 0x54, 0x58, - 0xb2, 0x02, 0x10, 0x02, 0x43, 0x60, 0x42, 0x59, 0xb1, 0x26, 0x01, 0x88, - 0x51, 0x58, 0xb9, 0x40, 0x00, 0x02, 0x00, 0x63, 0xb8, 0x04, 0x00, 0x88, - 0x54, 0x58, 0xb2, 0x02, 0x40, 0x02, 0x43, 0x60, 0x42, 0x59, 0xb9, 0x40, - 0x00, 0x04, 0x00, 0x63, 0xb8, 0x08, 0x00, 0x88, 0x54, 0x58, 0xb2, 0x02, - 0x80, 0x02, 0x43, 0x60, 0x42, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0xb1, - 0x00, 0x02, 0x43, 0x54, 0x58, 0x40, 0x0a, 0x05, 0x40, 0x08, 0x40, 0x09, - 0x40, 0x0c, 0x02, 0x0d, 0x02, 0x1b, 0xb1, 0x01, 0x02, 0x43, 0x54, 0x58, - 0xb2, 0x05, 0x40, 0x08, 0xba, 0x01, 0x00, 0x00, 0x09, 0x01, 0x00, 0xb3, - 0x0c, 0x01, 0x0d, 0x01, 0x1b, 0xb1, 0x80, 0x02, 0x43, 0x52, 0x58, 0xb2, - 0x05, 0x40, 0x08, 0xb8, 0x01, 0x80, 0xb1, 0x09, 0x40, 0x1b, 0xb2, 0x05, - 0x40, 0x08, 0xba, 0x01, 0x80, 0x00, 0x09, 0x01, 0x40, 0x59, 0xb9, 0x40, - 0x00, 0x00, 0x80, 0x88, 0x55, 0xb9, 0x40, 0x00, 0x02, 0x00, 0x63, 0xb8, - 0x04, 0x00, 0x88, 0x55, 0x5a, 0x58, 0xb3, 0x0c, 0x00, 0x0d, 0x01, 0x1b, - 0xb3, 0x0c, 0x00, 0x0d, 0x01, 0x59, 0x59, 0x59, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x2d, 0x2c, 0x45, 0x18, 0x68, 0x23, 0x4b, 0x51, 0x58, 0x23, 0x20, - 0x45, 0x20, 0x64, 0xb0, 0x40, 0x50, 0x58, 0x7c, 0x59, 0x68, 0x8a, 0x60, - 0x59, 0x44, 0x2d, 0x2c, 0xb0, 0x00, 0x16, 0xb0, 0x02, 0x25, 0xb0, 0x02, - 0x25, 0x01, 0xb0, 0x01, 0x23, 0x3e, 0x00, 0xb0, 0x02, 0x23, 0x3e, 0xb1, - 0x01, 0x02, 0x06, 0x0c, 0xb0, 0x0a, 0x23, 0x65, 0x42, 0xb0, 0x0b, 0x23, - 0x42, 0x01, 0xb0, 0x01, 0x23, 0x3f, 0x00, 0xb0, 0x02, 0x23, 0x3f, 0xb1, - 0x01, 0x02, 0x06, 0x0c, 0xb0, 0x06, 0x23, 0x65, 0x42, 0xb0, 0x07, 0x23, - 0x42, 0xb0, 0x01, 0x16, 0x01, 0x2d, 0x2c, 0xb0, 0x80, 0xb0, 0x02, 0x43, - 0x50, 0xb0, 0x01, 0xb0, 0x02, 0x43, 0x54, 0x5b, 0x58, 0x21, 0x23, 0x10, - 0xb0, 0x20, 0x1a, 0xc9, 0x1b, 0x8a, 0x10, 0xed, 0x59, 0x2d, 0x2c, 0xb0, - 0x59, 0x2b, 0x2d, 0x2c, 0x8a, 0x10, 0xe5, 0x2d, 0x40, 0x8b, 0x09, 0x21, - 0x48, 0x20, 0x55, 0x20, 0x01, 0x03, 0x55, 0x1f, 0x48, 0x03, 0x55, 0x1e, - 0x03, 0xff, 0x1f, 0x50, 0x4c, 0x16, 0x1f, 0x4f, 0x4d, 0x64, 0x1f, 0x4e, - 0x4c, 0x64, 0x1f, 0x26, 0x34, 0x10, 0x55, 0x25, 0x33, 0x24, 0x55, 0x19, - 0x13, 0xff, 0x1f, 0x07, 0x04, 0xff, 0x1f, 0x06, 0x03, 0xff, 0x1f, 0x4d, - 0x4c, 0x1e, 0x1f, 0x64, 0x4c, 0x01, 0x4c, 0x46, 0x0d, 0x1f, 0x13, 0x33, - 0x12, 0x55, 0x05, 0x01, 0x03, 0x55, 0x04, 0x33, 0x03, 0x55, 0x1f, 0x03, - 0x01, 0x0f, 0x03, 0x3f, 0x03, 0xaf, 0x03, 0x03, 0x06, 0x4b, 0x46, 0xcb, - 0x46, 0xdb, 0x46, 0x03, 0x23, 0x33, 0x22, 0x55, 0x1c, 0x33, 0x1b, 0x55, - 0x16, 0x33, 0x15, 0x55, 0x11, 0x01, 0x0f, 0x55, 0x10, 0x33, 0x0f, 0x55, - 0xaf, 0x0f, 0xcf, 0x0f, 0x02, 0x30, 0x0f, 0x01, 0x01, 0x33, 0x00, 0x55, - 0x6f, 0x00, 0x7f, 0x00, 0xaf, 0x00, 0xef, 0x00, 0x04, 0x10, 0x00, 0x01, - 0x80, 0x16, 0x01, 0x05, 0x01, 0xb8, 0x01, 0x90, 0xb1, 0x54, 0x53, 0x2b, - 0x2b, 0x4b, 0xb8, 0x07, 0xff, 0x52, 0x4b, 0xb0, 0x09, 0x50, 0x5b, 0xb0, - 0x01, 0x88, 0xb0, 0x25, 0x53, 0xb0, 0x01, 0x88, 0xb0, 0x40, 0x51, 0x5a, - 0xb0, 0x06, 0x88, 0xb0, 0x00, 0x55, 0x5a, 0x5b, 0x58, 0xb1, 0x01, 0x01, - 0x8e, 0x59, 0x85, 0x8d, 0x8d, 0x00, 0x42, 0x1d, 0x4b, 0xb0, 0x32, 0x53, - 0x58, 0xb0, 0x20, 0x1d, 0x59, 0x4b, 0xb0, 0x64, 0x53, 0x58, 0xb0, 0x10, - 0x1d, 0xb1, 0x16, 0x00, 0x42, 0x59, 0x73, 0x73, 0x2b, 0x73, 0x73, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x73, 0x5e, 0x73, 0x74, 0x2b, 0x2b, 0x2b, 0x2b, - 0x74, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x18, 0x5e, 0x06, 0x14, 0x00, 0x17, 0x00, 0x00, 0x05, 0xb6, - 0x00, 0x17, 0x00, 0x75, 0x05, 0xb6, 0x05, 0xcd, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x5e, - 0x00, 0x17, 0x00, 0x7b, 0x00, 0x00, 0xff, 0xec, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xec, 0x00, 0x00, 0x00, 0x00, 0xff, 0xec, 0x00, 0x00, 0xfe, 0x14, - 0xff, 0xec, 0x00, 0x00, 0x05, 0xb6, 0x00, 0x15, 0xfc, 0x94, 0xff, 0xeb, - 0xfe, 0x8f, 0xff, 0xe0, 0xfe, 0xbc, 0xff, 0xec, 0x00, 0x12, 0xfe, 0x56, - 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, 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, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe5, 0x00, 0xf6, 0x01, 0x00, 0x01, 0x2b, 0x00, 0xd3, 0x00, 0xb2, - 0x01, 0x02, 0x00, 0xf6, 0x01, 0x02, 0x00, 0xf6, 0x00, 0xed, 0x00, 0xdf, - 0x00, 0xb2, 0x00, 0x00, 0x01, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x56, 0x00, 0xcc, - 0x01, 0x58, 0x01, 0xc6, 0x02, 0x4e, 0x02, 0x66, 0x02, 0x94, 0x02, 0xc2, - 0x03, 0x00, 0x03, 0x2c, 0x03, 0x4a, 0x03, 0x60, 0x03, 0x82, 0x03, 0xa0, - 0x03, 0xe2, 0x04, 0x10, 0x04, 0x5e, 0x04, 0xc6, 0x05, 0x10, 0x05, 0x6c, - 0x05, 0xc8, 0x05, 0xf2, 0x06, 0x66, 0x06, 0xc2, 0x06, 0xfa, 0x07, 0x32, - 0x07, 0x5c, 0x07, 0x82, 0x07, 0xae, 0x08, 0x0a, 0x08, 0x9a, 0x08, 0xde, - 0x09, 0x3e, 0x09, 0x80, 0x09, 0xb8, 0x09, 0xf4, 0x0a, 0x24, 0x0a, 0x7a, - 0x0a, 0xb0, 0x0a, 0xc6, 0x0a, 0xf2, 0x0b, 0x32, 0x0b, 0x52, 0x0b, 0x98, - 0x0b, 0xd4, 0x0c, 0x16, 0x0c, 0x56, 0x0c, 0xac, 0x0d, 0x00, 0x0d, 0x60, - 0x0d, 0x86, 0x0d, 0xbc, 0x0d, 0xee, 0x0e, 0x4a, 0x0e, 0x8c, 0x0e, 0xc0, - 0x0e, 0xf6, 0x0f, 0x18, 0x0f, 0x36, 0x0f, 0x58, 0x0f, 0x84, 0x0f, 0x9c, - 0x0f, 0xc0, 0x10, 0x1a, 0x10, 0x6e, 0x10, 0xaa, 0x10, 0xfe, 0x11, 0x54, - 0x11, 0x96, 0x12, 0x32, 0x12, 0x70, 0x12, 0x9c, 0x12, 0xda, 0x13, 0x22, - 0x13, 0x3a, 0x13, 0x96, 0x13, 0xd2, 0x14, 0x16, 0x14, 0x6c, 0x14, 0xc2, - 0x14, 0xf4, 0x15, 0x4c, 0x15, 0x8e, 0x15, 0xca, 0x15, 0xfc, 0x16, 0x58, - 0x16, 0x9e, 0x16, 0xee, 0x17, 0x24, 0x17, 0x70, 0x17, 0x88, 0x17, 0xd8, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x4a, 0x18, 0x9a, 0x18, 0xf4, 0x19, 0x50, - 0x19, 0xae, 0x19, 0xd4, 0x1a, 0x52, 0x1a, 0x8a, 0x1b, 0x04, 0x1b, 0x5a, - 0x1b, 0xae, 0x1b, 0xcc, 0x1b, 0xd4, 0x1c, 0x62, 0x1c, 0x7a, 0x1c, 0xb0, - 0x1c, 0xea, 0x1d, 0x24, 0x1d, 0x7a, 0x1d, 0x9e, 0x1d, 0xe8, 0x1e, 0x1c, - 0x1e, 0x3e, 0x1e, 0x78, 0x1e, 0xa6, 0x1e, 0xdc, 0x1f, 0x30, 0x1f, 0x6e, - 0x1f, 0xb0, 0x20, 0x0c, 0x20, 0x6c, 0x20, 0x7e, 0x20, 0x90, 0x20, 0xc8, - 0x21, 0x0c, 0x21, 0x1e, 0x21, 0x62, 0x21, 0xc2, 0x21, 0xce, 0x21, 0xe0, - 0x21, 0xf2, 0x22, 0x20, 0x22, 0x32, 0x22, 0x44, 0x22, 0x56, 0x22, 0x7a, - 0x22, 0x8c, 0x22, 0xdc, 0x23, 0x1e, 0x23, 0x30, 0x23, 0x42, 0x23, 0x86, - 0x23, 0xd4, 0x23, 0xe6, 0x24, 0x16, 0x24, 0x74, 0x24, 0x86, 0x24, 0x98, - 0x24, 0xd0, 0x24, 0xe2, 0x24, 0xf4, 0x25, 0x36, 0x25, 0xae, 0x25, 0xbe, - 0x25, 0xce, 0x26, 0x1a, 0x26, 0x72, 0x26, 0x84, 0x26, 0xda, 0x27, 0x74, - 0x27, 0x80, 0x27, 0x90, 0x27, 0xa0, 0x27, 0xe8, 0x27, 0xfa, 0x28, 0x16, - 0x28, 0x32, 0x28, 0x56, 0x28, 0x84, 0x29, 0x02, 0x29, 0x46, 0x29, 0x56, - 0x29, 0x68, 0x29, 0xac, 0x29, 0xfc, 0x2a, 0x0e, 0x2a, 0x50, 0x2a, 0xae, - 0x2a, 0xbe, 0x2a, 0xd0, 0x2b, 0x0a, 0x2b, 0x1c, 0x2b, 0x2c, 0x2b, 0x86, - 0x2b, 0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x75, 0xff, 0xe5, 0x01, 0xd3, - 0x05, 0xb6, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x26, 0x40, 0x12, 0x03, 0x0a, - 0x0a, 0x02, 0x04, 0x04, 0x10, 0x11, 0x01, 0x07, 0x0d, 0x07, 0x54, 0x59, - 0x0d, 0x13, 0x02, 0x03, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x11, - 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x23, - 0x03, 0x21, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x01, 0xa0, 0xf4, 0x33, 0x01, 0x5a, 0xfe, 0xa2, 0x5a, 0x56, - 0x53, 0x5b, 0x5c, 0x52, 0x54, 0x5c, 0x01, 0xe5, 0x03, 0xd1, 0xfa, 0xd9, - 0x54, 0x56, 0x58, 0x52, 0x4f, 0x5b, 0x59, 0x00, 0x00, 0x02, 0x00, 0x85, - 0x03, 0xa6, 0x03, 0x42, 0x05, 0xb6, 0x00, 0x03, 0x00, 0x07, 0x00, 0x1b, - 0x40, 0x0b, 0x04, 0x07, 0x00, 0x03, 0x03, 0x08, 0x06, 0x02, 0x07, 0x03, - 0x03, 0x00, 0x3f, 0x33, 0xcd, 0x32, 0x11, 0x01, 0x33, 0x11, 0x33, 0xcc, - 0x32, 0x31, 0x30, 0x01, 0x03, 0x23, 0x03, 0x21, 0x03, 0x23, 0x03, 0x01, - 0x9c, 0x29, 0xc5, 0x29, 0x02, 0xbd, 0x29, 0xc5, 0x29, 0x05, 0xb6, 0xfd, - 0xf0, 0x02, 0x10, 0xfd, 0xf0, 0x02, 0x10, 0x00, 0x00, 0x02, 0x00, 0x2d, - 0x00, 0x00, 0x04, 0xfe, 0x05, 0xb4, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x7d, - 0x40, 0x44, 0x08, 0x1c, 0x1f, 0x15, 0x04, 0x14, 0x09, 0x09, 0x0a, 0x04, - 0x01, 0x00, 0x19, 0x04, 0x18, 0x05, 0x05, 0x06, 0x12, 0x0f, 0x0e, 0x0b, - 0x04, 0x0a, 0x13, 0x13, 0x14, 0x16, 0x1e, 0x1d, 0x07, 0x04, 0x06, 0x17, - 0x17, 0x18, 0x18, 0x14, 0x06, 0x0a, 0x04, 0x20, 0x21, 0x08, 0x04, 0x0b, - 0x0b, 0x1c, 0x01, 0x0e, 0x1f, 0x00, 0x0f, 0x0f, 0x19, 0x15, 0x12, 0x0e, - 0x12, 0x0e, 0x12, 0x0a, 0x17, 0x13, 0x03, 0x06, 0x0a, 0x12, 0x00, 0x3f, - 0x33, 0x3f, 0x33, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x11, 0x33, 0x33, 0x33, - 0x11, 0x33, 0x33, 0x11, 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x11, 0x12, - 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, 0x11, 0x33, 0x11, - 0x12, 0x17, 0x39, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, 0x11, 0x33, 0x11, - 0x12, 0x17, 0x39, 0x31, 0x30, 0x01, 0x07, 0x21, 0x15, 0x21, 0x03, 0x23, - 0x13, 0x23, 0x03, 0x23, 0x13, 0x23, 0x35, 0x21, 0x37, 0x23, 0x35, 0x21, - 0x13, 0x33, 0x03, 0x33, 0x13, 0x33, 0x03, 0x33, 0x15, 0x05, 0x33, 0x37, - 0x23, 0x03, 0xe7, 0x2f, 0x01, 0x02, 0xfe, 0xd7, 0x4d, 0xdc, 0x4e, 0xc2, - 0x4c, 0xd7, 0x4a, 0xee, 0x01, 0x15, 0x2f, 0xfc, 0x01, 0x21, 0x4d, 0xdb, - 0x4d, 0xc6, 0x4e, 0xd7, 0x4e, 0xf0, 0xfd, 0x1d, 0xc4, 0x2f, 0xc4, 0x03, - 0x4c, 0xe8, 0xce, 0xfe, 0x6a, 0x01, 0x96, 0xfe, 0x6a, 0x01, 0x96, 0xce, - 0xe8, 0xd1, 0x01, 0x97, 0xfe, 0x69, 0x01, 0x97, 0xfe, 0x69, 0xd1, 0xe8, - 0xe8, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x58, 0xff, 0x89, 0x04, 0x44, - 0x06, 0x12, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2c, 0x00, 0x86, 0x40, 0x45, - 0x24, 0x17, 0x03, 0x1d, 0x1d, 0x14, 0x0d, 0x06, 0x2a, 0x2a, 0x21, 0x29, - 0x1e, 0x27, 0x00, 0x27, 0x08, 0x0f, 0x23, 0x11, 0x21, 0x21, 0x19, 0x00, - 0x11, 0x00, 0x2d, 0x2e, 0x2a, 0x1d, 0x27, 0x00, 0x00, 0x0d, 0x24, 0x11, - 0x21, 0x11, 0x27, 0x2b, 0x1a, 0x27, 0x21, 0x09, 0x25, 0x06, 0x0c, 0x1c, - 0x17, 0x1c, 0x4f, 0x59, 0x14, 0x17, 0x06, 0x0c, 0x50, 0x59, 0x05, 0x06, - 0x03, 0x06, 0x17, 0x06, 0x17, 0x06, 0x2d, 0x15, 0x00, 0x00, 0x3f, 0x12, - 0x39, 0x39, 0x2f, 0x2f, 0x11, 0x33, 0x10, 0xcd, 0x2b, 0x11, 0x00, 0x33, - 0x2b, 0x11, 0x12, 0x00, 0x17, 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, - 0x33, 0x11, 0x12, 0x39, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, - 0x33, 0x11, 0x12, 0x39, 0x39, 0x32, 0x32, 0x11, 0x12, 0x39, 0x39, 0x11, - 0x39, 0x11, 0x33, 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x33, 0x31, 0x30, - 0x01, 0x14, 0x06, 0x07, 0x15, 0x23, 0x35, 0x26, 0x27, 0x11, 0x1e, 0x01, - 0x17, 0x11, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x35, 0x33, 0x15, - 0x16, 0x17, 0x07, 0x26, 0x27, 0x11, 0x1e, 0x02, 0x05, 0x34, 0x26, 0x27, - 0x15, 0x36, 0x01, 0x14, 0x16, 0x17, 0x35, 0x06, 0x04, 0x44, 0xe6, 0xcf, - 0x89, 0xf4, 0xb8, 0x57, 0xf5, 0x60, 0x43, 0xc6, 0xa5, 0xe3, 0xcb, 0x89, - 0xe5, 0xb9, 0x5e, 0x9c, 0xa4, 0xc3, 0xa5, 0x4d, 0xfe, 0xd3, 0x44, 0x44, - 0x88, 0xfe, 0x6e, 0x3d, 0x44, 0x81, 0x01, 0xc9, 0x9f, 0xc1, 0x13, 0xcd, - 0xc9, 0x05, 0x51, 0x01, 0x08, 0x2b, 0x42, 0x06, 0x01, 0x36, 0x1a, 0x4e, - 0xb7, 0x87, 0x91, 0xbb, 0x14, 0x99, 0x95, 0x0a, 0x52, 0xea, 0x40, 0x0e, - 0xfe, 0xd9, 0x4b, 0x6e, 0x84, 0x67, 0x2a, 0x3a, 0x1f, 0xf9, 0x17, 0x02, - 0xbe, 0x2c, 0x39, 0x1e, 0xeb, 0x13, 0x00, 0x00, 0x00, 0x05, 0x00, 0x3f, - 0xff, 0xee, 0x06, 0xf6, 0x05, 0xcb, 0x00, 0x09, 0x00, 0x14, 0x00, 0x18, - 0x00, 0x22, 0x00, 0x2d, 0x00, 0x4a, 0x40, 0x24, 0x16, 0x17, 0x17, 0x05, - 0x05, 0x0a, 0x10, 0x00, 0x10, 0x18, 0x15, 0x15, 0x19, 0x19, 0x29, 0x23, - 0x1e, 0x23, 0x10, 0x23, 0x2e, 0x2f, 0x20, 0x2b, 0x1c, 0x26, 0x19, 0x18, - 0x06, 0x17, 0x18, 0x03, 0x0d, 0x07, 0x12, 0x07, 0x00, 0x3f, 0x33, 0xc4, - 0x32, 0x3f, 0x3f, 0x3f, 0x33, 0xc4, 0x32, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x11, 0x33, 0x10, 0xc0, 0x32, 0x12, 0x39, 0x11, 0x33, 0x11, 0x33, 0x10, - 0xc0, 0x32, 0x12, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x16, 0x33, - 0x32, 0x35, 0x34, 0x23, 0x22, 0x06, 0x05, 0x14, 0x06, 0x23, 0x22, 0x26, - 0x35, 0x10, 0x21, 0x32, 0x16, 0x25, 0x01, 0x23, 0x01, 0x13, 0x14, 0x16, - 0x33, 0x32, 0x35, 0x34, 0x23, 0x22, 0x06, 0x05, 0x14, 0x06, 0x23, 0x22, - 0x26, 0x35, 0x10, 0x21, 0x32, 0x16, 0x01, 0x3b, 0x2d, 0x32, 0x60, 0x60, - 0x32, 0x2d, 0x01, 0xbb, 0xb2, 0xac, 0xa5, 0xb4, 0x01, 0x59, 0xa9, 0xb5, - 0x02, 0xb0, 0xfc, 0xd5, 0xf0, 0x03, 0x2b, 0x85, 0x2d, 0x32, 0x60, 0x60, - 0x32, 0x2d, 0x01, 0xbb, 0xb2, 0xac, 0xa5, 0xb4, 0x01, 0x59, 0xa9, 0xb5, - 0x04, 0x00, 0x7f, 0x7d, 0xfc, 0xfa, 0x7b, 0x7d, 0xe6, 0xe7, 0xed, 0xe0, - 0x01, 0xc9, 0xed, 0xd8, 0xfa, 0x4a, 0x05, 0xb6, 0xfc, 0x02, 0x7f, 0x7d, - 0xfc, 0xfa, 0x7b, 0x7d, 0xe5, 0xe7, 0xed, 0xdf, 0x01, 0xc9, 0xed, 0x00, - 0x00, 0x03, 0x00, 0x52, 0xff, 0xec, 0x06, 0x00, 0x05, 0xcb, 0x00, 0x1d, - 0x00, 0x26, 0x00, 0x31, 0x00, 0x71, 0x40, 0x39, 0x2d, 0x0d, 0x23, 0x0a, - 0x01, 0x1d, 0x16, 0x00, 0x0a, 0x16, 0x0d, 0x13, 0x13, 0x27, 0x19, 0x1a, - 0x1a, 0x27, 0x0d, 0x03, 0x07, 0x01, 0x00, 0x00, 0x33, 0x1e, 0x07, 0x07, - 0x32, 0x17, 0x21, 0x1a, 0x16, 0x0a, 0x24, 0x24, 0x2f, 0x2f, 0x10, 0x1a, - 0x1a, 0x04, 0x10, 0x10, 0x2a, 0x4d, 0x59, 0x10, 0x04, 0x04, 0x21, 0x4c, - 0x59, 0x04, 0x13, 0x01, 0x12, 0x00, 0x3f, 0x3f, 0x2b, 0x00, 0x18, 0x3f, - 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x12, 0x39, 0x11, 0x33, 0x12, - 0x39, 0x39, 0x11, 0x12, 0x39, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x12, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, - 0x39, 0x11, 0x12, 0x39, 0x11, 0x12, 0x39, 0x11, 0x33, 0x31, 0x30, 0x29, - 0x01, 0x27, 0x06, 0x23, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x2e, 0x01, - 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x01, 0x36, - 0x37, 0x21, 0x06, 0x02, 0x07, 0x25, 0x14, 0x16, 0x33, 0x32, 0x37, 0x01, - 0x0e, 0x01, 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x3e, - 0x01, 0x06, 0x00, 0xfe, 0x87, 0x73, 0xbf, 0xf1, 0xf4, 0xfe, 0xe2, 0x79, - 0x93, 0x4b, 0x44, 0xe9, 0xc3, 0xba, 0xdf, 0x8a, 0x9a, 0x01, 0x1c, 0x47, - 0x34, 0x01, 0x3e, 0x24, 0x7e, 0x50, 0xfc, 0xc0, 0x81, 0x65, 0x7e, 0x65, - 0xfe, 0xb4, 0x3a, 0x43, 0x01, 0x67, 0x48, 0x39, 0x43, 0x4d, 0x5f, 0x56, - 0x5c, 0x71, 0x85, 0xe0, 0xbf, 0x89, 0xc1, 0x54, 0x56, 0x9d, 0x5d, 0x98, - 0xba, 0xad, 0x91, 0x77, 0xc5, 0x59, 0xfe, 0xeb, 0x75, 0xb8, 0x87, 0xfe, - 0xff, 0x63, 0x83, 0x56, 0x66, 0x3d, 0x01, 0x4a, 0x2c, 0x60, 0x02, 0x86, - 0x35, 0x3d, 0x40, 0x3b, 0x58, 0x6a, 0x30, 0x5d, 0x00, 0x01, 0x00, 0x85, - 0x03, 0xa6, 0x01, 0x9c, 0x05, 0xb6, 0x00, 0x03, 0x00, 0x12, 0xb6, 0x00, - 0x03, 0x03, 0x04, 0x02, 0x03, 0x03, 0x00, 0x3f, 0xcd, 0x11, 0x01, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x03, 0x23, 0x03, 0x01, 0x9c, 0x29, 0xc5, - 0x29, 0x05, 0xb6, 0xfd, 0xf0, 0x02, 0x10, 0x00, 0x00, 0x01, 0x00, 0x52, - 0xfe, 0xbc, 0x02, 0x79, 0x05, 0xb6, 0x00, 0x0d, 0x00, 0x20, 0x40, 0x0e, - 0x0b, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x00, 0x07, 0x07, 0x0f, 0x0b, 0x24, - 0x03, 0x03, 0x00, 0x3f, 0x3f, 0x11, 0x01, 0x33, 0x11, 0x33, 0x33, 0x11, - 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x10, 0x12, 0x37, 0x33, 0x06, - 0x02, 0x15, 0x14, 0x12, 0x17, 0x23, 0x26, 0x02, 0x52, 0x9b, 0x92, 0xfa, - 0x8d, 0x90, 0x93, 0x88, 0xf8, 0x93, 0x9a, 0x02, 0x31, 0x01, 0x09, 0x01, - 0xce, 0xae, 0xc1, 0xfe, 0x32, 0xf4, 0xf5, 0xfe, 0x37, 0xb9, 0xaa, 0x01, - 0xc6, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3d, 0xfe, 0xbc, 0x02, 0x64, - 0x05, 0xb6, 0x00, 0x0d, 0x00, 0x20, 0x40, 0x0e, 0x03, 0x04, 0x04, 0x0b, - 0x0a, 0x0a, 0x00, 0x07, 0x07, 0x0e, 0x0a, 0x03, 0x04, 0x24, 0x00, 0x3f, - 0x3f, 0x11, 0x01, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, - 0x31, 0x30, 0x01, 0x10, 0x02, 0x07, 0x23, 0x36, 0x12, 0x35, 0x34, 0x02, - 0x27, 0x33, 0x16, 0x12, 0x02, 0x64, 0x9b, 0x92, 0xf8, 0x87, 0x94, 0x90, - 0x8d, 0xfa, 0x93, 0x9a, 0x02, 0x31, 0xfe, 0xf9, 0xfe, 0x3a, 0xa8, 0xb8, - 0x01, 0xc9, 0xf6, 0xf4, 0x01, 0xce, 0xc1, 0xaf, 0xfe, 0x31, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x3f, 0x02, 0x56, 0x04, 0x1d, 0x06, 0x14, 0x00, 0x0e, - 0x00, 0x35, 0x40, 0x18, 0x09, 0x0b, 0x0b, 0x05, 0x03, 0x03, 0x0d, 0x01, - 0x07, 0x07, 0x10, 0x0f, 0x04, 0x0a, 0x0a, 0x07, 0x07, 0x01, 0x0d, 0x0d, - 0x06, 0x08, 0x0e, 0x00, 0x00, 0x3f, 0xc4, 0x32, 0x39, 0x11, 0x33, 0x33, - 0x12, 0x39, 0x11, 0x33, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x33, - 0x12, 0x39, 0x33, 0x12, 0x39, 0x31, 0x30, 0x01, 0x03, 0x25, 0x17, 0x05, - 0x13, 0x07, 0x0b, 0x01, 0x27, 0x13, 0x25, 0x37, 0x05, 0x03, 0x02, 0xb0, - 0x29, 0x01, 0x75, 0x21, 0xfe, 0xac, 0xdf, 0xe3, 0x9c, 0x89, 0xec, 0xdd, - 0xfe, 0xae, 0x27, 0x01, 0x6d, 0x29, 0x06, 0x14, 0xfe, 0x90, 0x68, 0xfc, - 0x18, 0xfe, 0xd7, 0x79, 0x01, 0x39, 0xfe, 0xc9, 0x77, 0x01, 0x29, 0x1a, - 0xfa, 0x68, 0x01, 0x70, 0x00, 0x01, 0x00, 0x58, 0x00, 0xe3, 0x04, 0x39, - 0x04, 0xc5, 0x00, 0x0b, 0x00, 0x26, 0x40, 0x10, 0x08, 0x06, 0x09, 0x09, - 0x03, 0x01, 0x00, 0x00, 0x0c, 0x0d, 0x0b, 0x09, 0x00, 0x06, 0x04, 0x03, - 0x00, 0x2f, 0x33, 0x33, 0x33, 0x32, 0x32, 0x11, 0x12, 0x01, 0x39, 0x11, - 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x01, 0x21, 0x35, 0x21, - 0x11, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x23, 0x01, 0xdb, 0xfe, 0x7d, - 0x01, 0x83, 0xdb, 0x01, 0x83, 0xfe, 0x7d, 0xdb, 0x02, 0x64, 0xdb, 0x01, - 0x86, 0xfe, 0x7a, 0xdb, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3f, - 0xfe, 0xf8, 0x01, 0xcb, 0x00, 0xee, 0x00, 0x06, 0x00, 0x15, 0xb7, 0x02, - 0x03, 0x00, 0x05, 0x05, 0x07, 0x03, 0x05, 0x00, 0x2f, 0xc6, 0x11, 0x01, - 0x33, 0x11, 0x33, 0xc2, 0x32, 0x31, 0x30, 0x25, 0x06, 0x03, 0x23, 0x12, - 0x37, 0x21, 0x01, 0xcb, 0x34, 0x7c, 0xdc, 0x41, 0x24, 0x01, 0x18, 0xd7, - 0xca, 0xfe, 0xeb, 0x01, 0x0a, 0xec, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3d, - 0x01, 0xa8, 0x02, 0x56, 0x02, 0xa2, 0x00, 0x03, 0x00, 0x11, 0xb5, 0x03, - 0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x2f, 0x33, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x13, 0x35, 0x21, 0x15, 0x3d, 0x02, 0x19, 0x01, 0xa8, - 0xfa, 0xfa, 0x00, 0x00, 0x00, 0x01, 0x00, 0x75, 0xff, 0xe5, 0x01, 0xd3, - 0x01, 0x39, 0x00, 0x0b, 0x00, 0x16, 0x40, 0x0a, 0x06, 0x00, 0x00, 0x0c, - 0x09, 0x03, 0x54, 0x59, 0x09, 0x13, 0x00, 0x3f, 0x2b, 0x11, 0x01, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x37, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, - 0x06, 0x23, 0x22, 0x26, 0x75, 0x5a, 0x56, 0x53, 0x5b, 0x5c, 0x52, 0x54, - 0x5c, 0x8f, 0x54, 0x56, 0x58, 0x52, 0x4f, 0x5b, 0x59, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x03, 0x44, 0x05, 0xb6, 0x00, 0x03, - 0x00, 0x1c, 0x40, 0x0c, 0x01, 0x02, 0x03, 0x00, 0x02, 0x00, 0x04, 0x05, - 0x03, 0x03, 0x02, 0x12, 0x00, 0x3f, 0x3f, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x09, 0x01, 0x21, 0x01, 0x03, 0x44, - 0xfd, 0xdf, 0xfe, 0xeb, 0x02, 0x21, 0x05, 0xb6, 0xfa, 0x4a, 0x05, 0xb6, - 0x00, 0x02, 0x00, 0x4a, 0xff, 0xec, 0x04, 0x48, 0x05, 0xcd, 0x00, 0x0b, - 0x00, 0x17, 0x00, 0x28, 0x40, 0x14, 0x0c, 0x06, 0x12, 0x00, 0x06, 0x00, - 0x18, 0x19, 0x09, 0x15, 0x4f, 0x59, 0x09, 0x07, 0x03, 0x0f, 0x4f, 0x59, - 0x03, 0x19, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x01, - 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x02, 0x21, - 0x22, 0x00, 0x11, 0x10, 0x12, 0x21, 0x32, 0x00, 0x01, 0x10, 0x16, 0x33, - 0x32, 0x36, 0x11, 0x10, 0x26, 0x23, 0x22, 0x06, 0x04, 0x48, 0xfb, 0xfe, - 0xfb, 0xfd, 0xfe, 0xff, 0xfa, 0x01, 0x04, 0xfd, 0x01, 0x03, 0xfd, 0x35, - 0x5d, 0x6e, 0x6c, 0x60, 0x61, 0x6b, 0x6d, 0x5e, 0x02, 0xdb, 0xfe, 0x81, - 0xfe, 0x90, 0x01, 0x7c, 0x01, 0x73, 0x01, 0x83, 0x01, 0x6f, 0xfe, 0x80, - 0xfe, 0x8e, 0xfe, 0xf3, 0xe9, 0xec, 0x01, 0x0a, 0x01, 0x0d, 0xeb, 0xeb, - 0x00, 0x01, 0x00, 0x79, 0x00, 0x00, 0x03, 0x4e, 0x05, 0xb6, 0x00, 0x0a, - 0x00, 0x2a, 0x40, 0x13, 0x09, 0x04, 0x00, 0x00, 0x08, 0x01, 0x01, 0x0b, - 0x0c, 0x08, 0x07, 0x07, 0x01, 0x04, 0x04, 0x09, 0x06, 0x01, 0x18, 0x00, - 0x3f, 0x3f, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x11, 0x12, 0x01, 0x39, - 0x11, 0x33, 0x33, 0x12, 0x39, 0x39, 0x31, 0x30, 0x29, 0x01, 0x11, 0x3f, - 0x01, 0x06, 0x0f, 0x01, 0x27, 0x01, 0x33, 0x03, 0x4e, 0xfe, 0xcb, 0x03, - 0x05, 0x4d, 0x1e, 0xa8, 0x95, 0x01, 0xd7, 0xfe, 0x03, 0x4e, 0x8b, 0x98, - 0x4d, 0x18, 0x87, 0xba, 0x01, 0x77, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4e, - 0x00, 0x00, 0x04, 0x50, 0x05, 0xcb, 0x00, 0x1d, 0x00, 0x3d, 0x40, 0x1e, - 0x1c, 0x0e, 0x01, 0x07, 0x00, 0x16, 0x01, 0x16, 0x1e, 0x1f, 0x16, 0x07, - 0x07, 0x02, 0x0a, 0x12, 0x0a, 0x4e, 0x59, 0x12, 0x07, 0x02, 0x01, 0x1c, - 0x01, 0x1c, 0x4e, 0x59, 0x01, 0x18, 0x00, 0x3f, 0x2b, 0x11, 0x12, 0x00, - 0x39, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, 0x33, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x29, - 0x01, 0x35, 0x01, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, - 0x27, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x01, 0x0f, - 0x01, 0x15, 0x21, 0x04, 0x50, 0xfc, 0x02, 0x01, 0x6f, 0xa3, 0x64, 0x2c, - 0x61, 0x51, 0x55, 0xa0, 0x57, 0xa8, 0x6c, 0x8e, 0xa8, 0x68, 0x89, 0xd2, - 0x74, 0x47, 0x95, 0xbc, 0xbc, 0x02, 0x7d, 0xd7, 0x01, 0x73, 0xa7, 0x81, - 0x6e, 0x3b, 0x58, 0x56, 0x4e, 0x48, 0xc7, 0x5c, 0x4c, 0x29, 0x64, 0xb4, - 0x74, 0x65, 0xb1, 0xba, 0xac, 0xb1, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x4e, - 0xff, 0xec, 0x04, 0x42, 0x05, 0xcb, 0x00, 0x26, 0x00, 0x5b, 0x40, 0x2f, - 0x22, 0x17, 0x0d, 0x13, 0x13, 0x07, 0x03, 0x1c, 0x1c, 0x00, 0x00, 0x07, - 0x0d, 0x07, 0x27, 0x28, 0x21, 0x1e, 0x24, 0x1e, 0x4f, 0x59, 0x03, 0x18, - 0x17, 0x18, 0x17, 0x50, 0x59, 0x0c, 0x18, 0x01, 0x0d, 0x03, 0x18, 0x18, - 0x0a, 0x24, 0x07, 0x0d, 0x10, 0x0a, 0x10, 0x4f, 0x59, 0x0a, 0x19, 0x00, - 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x18, 0x3f, 0x12, 0x39, 0x2f, 0x5f, 0x5e, - 0x5d, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x12, 0x39, 0x39, 0x31, 0x30, 0x01, 0x14, 0x06, 0x07, 0x15, 0x1e, 0x01, - 0x15, 0x14, 0x04, 0x21, 0x22, 0x27, 0x11, 0x1e, 0x01, 0x33, 0x32, 0x36, - 0x35, 0x34, 0x26, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x23, - 0x22, 0x06, 0x07, 0x27, 0x36, 0x21, 0x32, 0x04, 0x04, 0x17, 0xa6, 0x96, - 0xb1, 0xb6, 0xfe, 0xce, 0xfe, 0xe4, 0xee, 0xb8, 0x55, 0xcc, 0x64, 0x99, - 0x92, 0xa8, 0xb8, 0x6f, 0x71, 0xaa, 0x9d, 0xd0, 0x48, 0x95, 0x5b, 0x8f, - 0xc8, 0x01, 0x15, 0xe3, 0x01, 0x07, 0x04, 0x6f, 0x89, 0xc0, 0x24, 0x06, - 0x16, 0xab, 0x91, 0xd3, 0xeb, 0x4f, 0x01, 0x07, 0x2b, 0x36, 0x68, 0x73, - 0x67, 0x56, 0xed, 0x59, 0x6c, 0xa6, 0x30, 0x3b, 0xd5, 0x90, 0xb8, 0x00, - 0x00, 0x02, 0x00, 0x23, 0x00, 0x00, 0x04, 0x71, 0x05, 0xb6, 0x00, 0x0a, - 0x00, 0x13, 0x00, 0x46, 0x40, 0x22, 0x0f, 0x07, 0x03, 0x09, 0x02, 0x02, - 0x0b, 0x03, 0x03, 0x05, 0x00, 0x00, 0x15, 0x13, 0x05, 0x05, 0x14, 0x06, - 0x13, 0x01, 0x05, 0x13, 0x05, 0x50, 0x59, 0x09, 0x13, 0x13, 0x03, 0x0f, - 0x07, 0x06, 0x03, 0x18, 0x00, 0x3f, 0x3f, 0x33, 0x12, 0x39, 0x2f, 0x33, - 0x2b, 0x11, 0x00, 0x33, 0x12, 0x39, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x12, 0x39, 0x39, - 0x31, 0x30, 0x01, 0x23, 0x11, 0x21, 0x11, 0x21, 0x35, 0x01, 0x21, 0x11, - 0x33, 0x21, 0x35, 0x34, 0x36, 0x37, 0x23, 0x06, 0x07, 0x01, 0x04, 0x71, - 0xb0, 0xfe, 0xd2, 0xfd, 0x90, 0x02, 0x81, 0x01, 0x1d, 0xb0, 0xfe, 0x22, - 0x0a, 0x03, 0x08, 0x25, 0x34, 0xfe, 0xf4, 0x01, 0x2f, 0xfe, 0xd1, 0x01, - 0x2f, 0xd7, 0x03, 0xb0, 0xfc, 0x69, 0xf8, 0x3e, 0xec, 0x13, 0x52, 0x4e, - 0xfe, 0x6b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x64, 0xff, 0xec, 0x04, 0x35, - 0x05, 0xb6, 0x00, 0x1b, 0x00, 0x56, 0x40, 0x2b, 0x18, 0x15, 0x15, 0x17, - 0x03, 0x19, 0x14, 0x14, 0x0e, 0x08, 0x0e, 0x03, 0x08, 0x03, 0x1c, 0x1d, - 0x14, 0x13, 0x09, 0x13, 0x0c, 0x10, 0x00, 0x10, 0x4f, 0x59, 0x19, 0x00, - 0x00, 0x06, 0x15, 0x15, 0x18, 0x4e, 0x59, 0x15, 0x06, 0x06, 0x0c, 0x4f, - 0x59, 0x06, 0x19, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x18, 0x2f, 0x33, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x11, - 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, - 0x33, 0x12, 0x39, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x32, 0x16, 0x15, - 0x14, 0x00, 0x21, 0x22, 0x27, 0x11, 0x1e, 0x01, 0x33, 0x20, 0x35, 0x34, - 0x21, 0x22, 0x06, 0x07, 0x27, 0x13, 0x21, 0x11, 0x21, 0x03, 0x37, 0x36, - 0x02, 0x66, 0xd4, 0xfb, 0xfe, 0xd2, 0xfe, 0xe7, 0xf4, 0x96, 0x4f, 0xd2, - 0x5e, 0x01, 0x1b, 0xfe, 0xdb, 0x35, 0x80, 0x28, 0x7b, 0x37, 0x03, 0x19, - 0xfd, 0xf6, 0x1b, 0x23, 0x3d, 0x03, 0xa6, 0xee, 0xcf, 0xf5, 0xfe, 0xf8, - 0x4f, 0x01, 0x0b, 0x2a, 0x35, 0xe8, 0xdd, 0x15, 0x0c, 0x42, 0x02, 0xe9, - 0xfe, 0xfa, 0xfe, 0xe1, 0x07, 0x0e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x48, - 0xff, 0xec, 0x04, 0x50, 0x05, 0xc7, 0x00, 0x18, 0x00, 0x24, 0x00, 0x41, - 0x40, 0x21, 0x06, 0x12, 0x0c, 0x0c, 0x22, 0x22, 0x00, 0x1c, 0x12, 0x00, - 0x12, 0x25, 0x26, 0x0f, 0x1f, 0x50, 0x59, 0x0f, 0x0f, 0x15, 0x03, 0x15, - 0x19, 0x4f, 0x59, 0x15, 0x19, 0x03, 0x08, 0x4f, 0x59, 0x03, 0x07, 0x00, - 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, - 0x2b, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, - 0x11, 0x12, 0x39, 0x31, 0x30, 0x13, 0x10, 0x00, 0x21, 0x32, 0x17, 0x15, - 0x26, 0x23, 0x22, 0x0e, 0x01, 0x07, 0x33, 0x36, 0x33, 0x32, 0x16, 0x15, - 0x14, 0x00, 0x23, 0x22, 0x26, 0x02, 0x05, 0x32, 0x36, 0x35, 0x34, 0x26, - 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x48, 0x01, 0x6f, 0x01, 0x6e, 0x7d, - 0x47, 0x59, 0x57, 0x9f, 0xc9, 0x64, 0x09, 0x0d, 0x63, 0xda, 0xc4, 0xde, - 0xfe, 0xf8, 0xea, 0xa2, 0xf1, 0x83, 0x02, 0x10, 0x63, 0x6a, 0x63, 0x64, - 0x5e, 0x85, 0x7d, 0x02, 0x6d, 0x01, 0xb2, 0x01, 0xa8, 0x0f, 0xf7, 0x14, - 0x60, 0xbc, 0xad, 0xaa, 0xf6, 0xd9, 0xea, 0xfe, 0xef, 0x96, 0x01, 0x20, - 0xbf, 0x85, 0x7b, 0x6b, 0x7b, 0x7a, 0x51, 0x77, 0xa4, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x37, 0x00, 0x00, 0x04, 0x50, 0x05, 0xb4, 0x00, 0x06, - 0x00, 0x2e, 0x40, 0x16, 0x06, 0x00, 0x00, 0x02, 0x01, 0x01, 0x05, 0x02, - 0x05, 0x07, 0x08, 0x05, 0x03, 0x02, 0x03, 0x02, 0x4e, 0x59, 0x03, 0x06, - 0x00, 0x18, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x31, 0x30, - 0x33, 0x01, 0x21, 0x11, 0x21, 0x15, 0x01, 0xe3, 0x02, 0x25, 0xfd, 0x2f, - 0x04, 0x19, 0xfd, 0xd7, 0x04, 0xb0, 0x01, 0x04, 0xc2, 0xfb, 0x0e, 0x00, - 0x00, 0x03, 0x00, 0x48, 0xff, 0xec, 0x04, 0x4a, 0x05, 0xc9, 0x00, 0x17, - 0x00, 0x22, 0x00, 0x2e, 0x00, 0x53, 0x40, 0x29, 0x12, 0x06, 0x15, 0x2c, - 0x03, 0x03, 0x18, 0x09, 0x18, 0x26, 0x15, 0x15, 0x0f, 0x1e, 0x1e, 0x09, - 0x0f, 0x09, 0x2f, 0x30, 0x06, 0x12, 0x12, 0x21, 0x21, 0x29, 0x29, 0x0c, - 0x00, 0x0c, 0x1b, 0x51, 0x59, 0x0c, 0x19, 0x00, 0x23, 0x51, 0x59, 0x00, - 0x07, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, - 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, - 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x32, 0x11, 0x12, 0x39, 0x11, 0x33, - 0x12, 0x39, 0x39, 0x31, 0x30, 0x01, 0x32, 0x04, 0x15, 0x14, 0x06, 0x07, - 0x1e, 0x01, 0x15, 0x14, 0x04, 0x23, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, - 0x2e, 0x01, 0x35, 0x34, 0x24, 0x03, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, - 0x34, 0x26, 0x27, 0x06, 0x13, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x3e, - 0x01, 0x35, 0x34, 0x26, 0x02, 0x4a, 0xd2, 0x01, 0x01, 0x7c, 0x8a, 0xa4, - 0x8f, 0xfe, 0xe6, 0xe6, 0xf0, 0xfe, 0xee, 0x85, 0x93, 0x7d, 0x6e, 0x01, - 0x04, 0x13, 0x78, 0x68, 0x73, 0x72, 0x71, 0x7f, 0xd5, 0xe2, 0x4f, 0x61, - 0x4d, 0x65, 0x62, 0x4e, 0x64, 0x05, 0xc9, 0xbf, 0xa2, 0x70, 0xaf, 0x45, - 0x58, 0xbf, 0x72, 0xb4, 0xdb, 0xcc, 0xbb, 0x7d, 0xc2, 0x4a, 0x4f, 0xb4, - 0x6b, 0x9d, 0xc2, 0xfb, 0xbc, 0x56, 0x60, 0x63, 0x51, 0x43, 0x75, 0x42, - 0x62, 0x02, 0xcc, 0x51, 0x44, 0x3c, 0x5f, 0x32, 0x2e, 0x60, 0x3f, 0x45, - 0x50, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x42, 0xff, 0xec, 0x04, 0x4a, - 0x05, 0xc7, 0x00, 0x19, 0x00, 0x25, 0x00, 0x3f, 0x40, 0x20, 0x1d, 0x05, - 0x13, 0x0c, 0x0c, 0x23, 0x23, 0x00, 0x13, 0x00, 0x26, 0x27, 0x10, 0x20, - 0x50, 0x59, 0x10, 0x10, 0x03, 0x16, 0x16, 0x1a, 0x4f, 0x59, 0x16, 0x07, - 0x03, 0x08, 0x50, 0x59, 0x03, 0x19, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, - 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x01, 0x39, - 0x39, 0x11, 0x33, 0x12, 0x39, 0x11, 0x12, 0x39, 0x32, 0x31, 0x30, 0x01, - 0x10, 0x00, 0x21, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x37, - 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x00, 0x33, 0x32, 0x16, - 0x12, 0x25, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, - 0x26, 0x04, 0x4a, 0xfe, 0x94, 0xfe, 0x8f, 0x82, 0x43, 0x54, 0x5c, 0x9b, - 0xc8, 0x6a, 0x08, 0x0c, 0x3a, 0x98, 0x72, 0xbf, 0xdc, 0x01, 0x0b, 0xe6, - 0xa2, 0xf3, 0x82, 0xfd, 0xef, 0x60, 0x6c, 0x62, 0x64, 0x5e, 0x86, 0x7d, - 0x03, 0x46, 0xfe, 0x50, 0xfe, 0x56, 0x0e, 0xf8, 0x15, 0x5b, 0xc3, 0xab, - 0x5e, 0x4c, 0xf5, 0xda, 0xeb, 0x01, 0x11, 0x98, 0xfe, 0xdf, 0xc1, 0x84, - 0x7c, 0x6a, 0x7c, 0x7b, 0x50, 0x77, 0xa4, 0x00, 0x00, 0x02, 0x00, 0x75, - 0xff, 0xe5, 0x01, 0xd3, 0x04, 0x73, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x26, - 0x40, 0x13, 0x12, 0x06, 0x06, 0x0c, 0x00, 0x00, 0x18, 0x0f, 0x15, 0x54, - 0x59, 0x0f, 0x10, 0x09, 0x03, 0x54, 0x59, 0x09, 0x13, 0x00, 0x3f, 0x2b, - 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, - 0x31, 0x30, 0x37, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x75, 0x5a, 0x56, 0x53, 0x5b, 0x5c, 0x52, 0x54, 0x5c, 0x5a, - 0x56, 0x53, 0x5b, 0x5d, 0x51, 0x54, 0x5c, 0x8f, 0x54, 0x56, 0x58, 0x52, - 0x4f, 0x5b, 0x59, 0x03, 0x8b, 0x54, 0x56, 0x58, 0x52, 0x51, 0x59, 0x58, - 0x00, 0x02, 0x00, 0x3f, 0xfe, 0xf8, 0x01, 0xd3, 0x04, 0x73, 0x00, 0x06, - 0x00, 0x12, 0x00, 0x28, 0x40, 0x13, 0x0d, 0x07, 0x07, 0x13, 0x03, 0x04, - 0x06, 0x01, 0x06, 0x06, 0x13, 0x0a, 0x10, 0x54, 0x59, 0x0a, 0x10, 0x04, - 0x06, 0x00, 0x2f, 0xc6, 0x3f, 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, 0x10, - 0xc2, 0x32, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x25, 0x17, 0x06, 0x03, - 0x23, 0x12, 0x37, 0x03, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, - 0x23, 0x22, 0x26, 0x01, 0xbc, 0x0f, 0x34, 0x7c, 0xdc, 0x41, 0x24, 0x2f, - 0x5a, 0x56, 0x53, 0x5b, 0x5d, 0x51, 0x54, 0x5c, 0xee, 0x17, 0xca, 0xfe, - 0xeb, 0x01, 0x0a, 0xec, 0x02, 0xdb, 0x54, 0x56, 0x58, 0x52, 0x51, 0x59, - 0x58, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x58, 0x00, 0xcb, 0x04, 0x39, - 0x05, 0x00, 0x00, 0x06, 0x00, 0x27, 0x40, 0x10, 0x05, 0x01, 0x04, 0x00, - 0x01, 0x00, 0x07, 0x08, 0x04, 0x03, 0x03, 0x06, 0x00, 0x02, 0x01, 0x05, - 0x00, 0x3d, 0x2f, 0x33, 0x33, 0x33, 0x32, 0x33, 0x11, 0x33, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x25, 0x01, 0x35, - 0x01, 0x15, 0x09, 0x01, 0x04, 0x39, 0xfc, 0x1f, 0x03, 0xe1, 0xfd, 0x54, - 0x02, 0xac, 0xcb, 0x01, 0xb6, 0x8f, 0x01, 0xf0, 0xf0, 0xfe, 0xc3, 0xfe, - 0xe7, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x58, 0x01, 0xa2, 0x04, 0x39, - 0x04, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x24, 0x40, 0x11, 0x07, 0x03, - 0x03, 0x09, 0x04, 0x00, 0x08, 0x05, 0x50, 0x04, 0x60, 0x04, 0x02, 0x04, - 0x04, 0x00, 0x01, 0x00, 0x2f, 0x33, 0x33, 0x2f, 0x5d, 0x33, 0x11, 0x01, - 0x33, 0x32, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x35, 0x21, 0x15, - 0x01, 0x35, 0x21, 0x15, 0x58, 0x03, 0xe1, 0xfc, 0x1f, 0x03, 0xe1, 0x03, - 0x25, 0xdb, 0xdb, 0xfe, 0x7d, 0xdb, 0xdb, 0x00, 0x00, 0x01, 0x00, 0x58, - 0x00, 0xcb, 0x04, 0x39, 0x05, 0x00, 0x00, 0x06, 0x00, 0x2b, 0x40, 0x12, - 0x02, 0x00, 0x01, 0x05, 0x00, 0x05, 0x07, 0x08, 0x00, 0x06, 0x06, 0x01, - 0x02, 0x03, 0x03, 0x05, 0x04, 0x01, 0x00, 0x3d, 0x2f, 0x33, 0x33, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x09, 0x01, 0x35, 0x01, 0x15, 0x01, - 0x58, 0x02, 0xac, 0xfd, 0x54, 0x03, 0xe1, 0xfc, 0x1f, 0x01, 0xba, 0x01, - 0x19, 0x01, 0x3d, 0xf0, 0xfe, 0x10, 0x8f, 0xfe, 0x4a, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x06, 0xff, 0xe5, 0x03, 0xa0, 0x05, 0xcb, 0x00, 0x19, - 0x00, 0x25, 0x00, 0x44, 0x40, 0x22, 0x20, 0x1a, 0x1a, 0x19, 0x00, 0x00, - 0x0d, 0x07, 0x07, 0x12, 0x0d, 0x12, 0x26, 0x27, 0x0f, 0x00, 0x01, 0x09, - 0x03, 0x00, 0x00, 0x23, 0x23, 0x1d, 0x54, 0x59, 0x23, 0x13, 0x0f, 0x0a, - 0x4f, 0x59, 0x0f, 0x04, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x00, 0x33, 0x18, 0x2f, 0x5f, 0x5e, 0x5d, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x23, 0x22, - 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, - 0x1d, 0x01, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x01, 0x14, 0x52, 0x6d, 0x69, 0x43, 0x60, 0x56, 0x96, 0xc0, - 0x6d, 0xdf, 0xfa, 0xce, 0xf3, 0x64, 0x8c, 0x60, 0x33, 0xfe, 0xd7, 0x5a, - 0x56, 0x53, 0x5b, 0x5c, 0x52, 0x54, 0x5c, 0x01, 0xe5, 0x4a, 0x60, 0x8e, - 0x50, 0x4b, 0x5e, 0x3a, 0x41, 0x44, 0x62, 0xdb, 0x7d, 0xc6, 0xa5, 0x6e, - 0xa0, 0x64, 0x47, 0x4a, 0x3c, 0x3c, 0xfe, 0xaa, 0x54, 0x56, 0x58, 0x52, - 0x4f, 0x5b, 0x59, 0x00, 0x00, 0x02, 0x00, 0x66, 0xff, 0x66, 0x06, 0xc7, - 0x05, 0xc9, 0x00, 0x34, 0x00, 0x3f, 0x00, 0x59, 0x40, 0x2b, 0x07, 0x39, - 0x39, 0x14, 0x14, 0x13, 0x35, 0x35, 0x0d, 0x3b, 0x13, 0x28, 0x13, 0x0d, - 0x03, 0x21, 0x19, 0x21, 0x2d, 0x19, 0x00, 0x2d, 0x00, 0x40, 0x41, 0x16, - 0x08, 0x37, 0x37, 0x04, 0x0a, 0x3d, 0x10, 0x0a, 0x10, 0x0a, 0x10, 0x2a, - 0x1d, 0x31, 0x04, 0x24, 0x2a, 0x00, 0x2f, 0x33, 0x3f, 0x33, 0x12, 0x39, - 0x39, 0x2f, 0x2f, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x33, 0x11, - 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x12, 0x39, 0x31, - 0x30, 0x01, 0x14, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x23, 0x06, 0x23, - 0x22, 0x26, 0x35, 0x34, 0x00, 0x33, 0x32, 0x16, 0x17, 0x03, 0x14, 0x33, - 0x32, 0x36, 0x35, 0x34, 0x2e, 0x01, 0x23, 0x22, 0x04, 0x02, 0x15, 0x10, - 0x00, 0x21, 0x32, 0x36, 0x37, 0x15, 0x06, 0x21, 0x20, 0x00, 0x11, 0x34, - 0x12, 0x24, 0x21, 0x32, 0x04, 0x12, 0x01, 0x14, 0x33, 0x32, 0x36, 0x3f, - 0x01, 0x26, 0x23, 0x22, 0x06, 0x06, 0xc7, 0x5c, 0xa8, 0x6f, 0x4a, 0x72, - 0x19, 0x10, 0x6c, 0xa7, 0xb1, 0xcc, 0x01, 0x0c, 0xd8, 0x56, 0xcf, 0x43, - 0x17, 0x4c, 0x40, 0x4c, 0x86, 0xf3, 0x9c, 0xca, 0xfe, 0xd6, 0x9f, 0x01, - 0x27, 0x01, 0x18, 0x6a, 0xfe, 0x7b, 0xd6, 0xfe, 0xfb, 0xfe, 0x84, 0xfe, - 0x57, 0xd9, 0x01, 0x91, 0x01, 0x05, 0xdc, 0x01, 0x5a, 0xbc, 0xfc, 0x00, - 0xac, 0x5a, 0x5e, 0x0a, 0x0d, 0x33, 0x40, 0x7d, 0x8b, 0x02, 0xf0, 0x90, - 0xef, 0x88, 0x47, 0x3a, 0x81, 0xd5, 0xb9, 0xd3, 0x01, 0x02, 0x21, 0x17, - 0xfe, 0x17, 0x8b, 0xbb, 0x97, 0xa1, 0xf7, 0x82, 0xa6, 0xfe, 0xc7, 0xcd, - 0xfe, 0xec, 0xfe, 0xd9, 0x2f, 0x2d, 0xc0, 0x5b, 0x01, 0x90, 0x01, 0x64, - 0xf7, 0x01, 0x93, 0xe5, 0xb4, 0xfe, 0xb4, 0xfe, 0xaa, 0xd3, 0x7f, 0x8f, - 0xdd, 0x0b, 0x9c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x85, - 0x05, 0xbc, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x43, 0x40, 0x21, 0x02, 0x0d, - 0x03, 0x08, 0x01, 0x00, 0x06, 0x05, 0x0b, 0x0b, 0x03, 0x00, 0x00, 0x07, - 0x07, 0x0f, 0x03, 0x04, 0x04, 0x0e, 0x0d, 0x02, 0x4c, 0x59, 0x0d, 0x0d, - 0x03, 0x0b, 0x05, 0x03, 0x00, 0x03, 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x33, - 0x12, 0x39, 0x2f, 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x33, 0x12, 0x39, 0x39, 0x12, 0x39, - 0x39, 0x31, 0x30, 0x21, 0x03, 0x21, 0x03, 0x21, 0x01, 0x21, 0x09, 0x01, - 0x02, 0x26, 0x27, 0x06, 0x03, 0x04, 0x37, 0x6a, 0xfd, 0xeb, 0x6a, 0xfe, - 0xb2, 0x02, 0x04, 0x01, 0x7b, 0x02, 0x06, 0xfd, 0xfe, 0x93, 0x25, 0x08, - 0x21, 0x9c, 0x01, 0x5c, 0xfe, 0xa4, 0x05, 0xbc, 0xfa, 0x44, 0x02, 0x60, - 0x01, 0xd9, 0x7c, 0x24, 0x80, 0xfe, 0x07, 0x00, 0x00, 0x03, 0x00, 0xb8, - 0x00, 0x00, 0x04, 0xf4, 0x05, 0xb6, 0x00, 0x0f, 0x00, 0x18, 0x00, 0x20, - 0x00, 0x56, 0x40, 0x2c, 0x07, 0x14, 0x14, 0x04, 0x04, 0x1a, 0x1e, 0x0b, - 0x0b, 0x22, 0x10, 0x1a, 0x1a, 0x0f, 0x0f, 0x21, 0x08, 0x10, 0x19, 0x10, - 0x19, 0x4d, 0x59, 0x0c, 0x10, 0x01, 0x0d, 0x03, 0x10, 0x10, 0x0f, 0x00, - 0x0f, 0x1a, 0x4c, 0x59, 0x0f, 0x12, 0x00, 0x18, 0x4c, 0x59, 0x00, 0x03, - 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, - 0x2f, 0x5f, 0x5e, 0x5d, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, 0x01, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, - 0x12, 0x39, 0x31, 0x30, 0x13, 0x21, 0x20, 0x04, 0x15, 0x14, 0x06, 0x07, - 0x15, 0x1e, 0x01, 0x15, 0x14, 0x04, 0x23, 0x21, 0x01, 0x33, 0x32, 0x36, - 0x35, 0x34, 0x26, 0x2b, 0x01, 0x19, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, - 0x21, 0xb8, 0x01, 0xc7, 0x01, 0x37, 0x01, 0x19, 0x7b, 0x66, 0x8b, 0x7b, - 0xfe, 0xdf, 0xf8, 0xfd, 0xdd, 0x01, 0x36, 0xb4, 0x7e, 0x71, 0x7b, 0x85, - 0xa3, 0xca, 0x80, 0x7a, 0xfe, 0xfc, 0x05, 0xb6, 0xb1, 0xc1, 0x83, 0xa8, - 0x11, 0x0a, 0x1f, 0xaa, 0x8d, 0xc8, 0xe0, 0x03, 0x73, 0x4e, 0x5a, 0x54, - 0x49, 0xfd, 0xc5, 0xfe, 0x83, 0x62, 0x65, 0xb6, 0x00, 0x01, 0x00, 0x77, - 0xff, 0xec, 0x04, 0xd1, 0x05, 0xcb, 0x00, 0x16, 0x00, 0x31, 0x40, 0x18, - 0x07, 0x13, 0x13, 0x18, 0x03, 0x0d, 0x0d, 0x17, 0x14, 0x00, 0x11, 0x00, - 0x4c, 0x59, 0x11, 0x04, 0x07, 0x05, 0x0a, 0x05, 0x4c, 0x59, 0x0a, 0x13, - 0x00, 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x18, 0x3f, 0x2b, 0x11, 0x00, 0x33, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, - 0x22, 0x02, 0x15, 0x10, 0x21, 0x32, 0x37, 0x11, 0x06, 0x23, 0x20, 0x00, - 0x11, 0x34, 0x12, 0x24, 0x33, 0x32, 0x17, 0x07, 0x2e, 0x01, 0x03, 0x25, - 0xaf, 0xc0, 0x01, 0x6f, 0x9a, 0xdb, 0xb4, 0xde, 0xfe, 0xc1, 0xfe, 0xae, - 0xa6, 0x01, 0x37, 0xd1, 0xd5, 0xd7, 0x64, 0x52, 0xa6, 0x04, 0xc9, 0xfe, - 0xf9, 0xeb, 0xfe, 0x17, 0x4d, 0xfe, 0xfc, 0x4b, 0x01, 0x83, 0x01, 0x6a, - 0xe4, 0x01, 0x57, 0xb7, 0x67, 0xfc, 0x27, 0x3a, 0x00, 0x02, 0x00, 0xb8, - 0x00, 0x00, 0x05, 0x75, 0x05, 0xb6, 0x00, 0x08, 0x00, 0x0f, 0x00, 0x28, - 0x40, 0x14, 0x09, 0x00, 0x00, 0x11, 0x0d, 0x04, 0x04, 0x10, 0x05, 0x0c, - 0x4c, 0x59, 0x05, 0x03, 0x04, 0x0d, 0x4c, 0x59, 0x04, 0x12, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x00, 0x29, 0x01, 0x11, 0x21, 0x20, - 0x00, 0x01, 0x10, 0x21, 0x23, 0x11, 0x33, 0x20, 0x05, 0x75, 0xfe, 0x65, - 0xfe, 0x7c, 0xfe, 0x62, 0x01, 0xcb, 0x01, 0x66, 0x01, 0x8c, 0xfe, 0xbe, - 0xfe, 0x60, 0xa5, 0x85, 0x01, 0xc0, 0x02, 0xe9, 0xfe, 0x97, 0xfe, 0x80, - 0x05, 0xb6, 0xfe, 0x86, 0xfe, 0xa5, 0x01, 0xd7, 0xfc, 0x48, 0x00, 0x00, - 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x04, 0x02, 0x05, 0xb6, 0x00, 0x0b, - 0x00, 0x45, 0x40, 0x24, 0x08, 0x04, 0x00, 0x00, 0x0d, 0x06, 0x0a, 0x0a, - 0x01, 0x01, 0x0c, 0x06, 0x09, 0x4c, 0x59, 0x0c, 0x06, 0x01, 0x0d, 0x03, - 0x06, 0x06, 0x01, 0x02, 0x02, 0x05, 0x4c, 0x59, 0x02, 0x03, 0x01, 0x0a, - 0x4c, 0x59, 0x01, 0x12, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x18, 0x2f, 0x5f, 0x5e, 0x5d, 0x2b, 0x11, 0x01, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x29, - 0x01, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x04, - 0x02, 0xfc, 0xb6, 0x03, 0x4a, 0xfd, 0xec, 0x01, 0xef, 0xfe, 0x11, 0x02, - 0x14, 0x05, 0xb6, 0xfe, 0xfe, 0xbf, 0xfe, 0xfe, 0x87, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x03, 0xfe, 0x05, 0xb6, 0x00, 0x09, - 0x00, 0x34, 0x40, 0x1a, 0x08, 0x03, 0x03, 0x0b, 0x06, 0x00, 0x00, 0x01, - 0x01, 0x0a, 0x06, 0x09, 0x4c, 0x59, 0x06, 0x06, 0x01, 0x02, 0x02, 0x05, - 0x4c, 0x59, 0x02, 0x03, 0x01, 0x12, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x21, 0x15, 0x21, - 0x11, 0x21, 0x15, 0x21, 0x01, 0xe9, 0xfe, 0xcf, 0x03, 0x46, 0xfd, 0xeb, - 0x01, 0xf0, 0xfe, 0x10, 0x05, 0xb6, 0xfe, 0xfe, 0x87, 0xfd, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x77, 0xff, 0xec, 0x05, 0x27, 0x05, 0xcb, 0x00, 0x1a, - 0x00, 0x4c, 0x40, 0x27, 0x1a, 0x18, 0x18, 0x02, 0x0e, 0x0d, 0x0d, 0x02, - 0x02, 0x13, 0x1c, 0x13, 0x08, 0x08, 0x1b, 0x0e, 0x10, 0x0b, 0x10, 0x4c, - 0x59, 0x00, 0x1a, 0x4c, 0x59, 0x00, 0x00, 0x05, 0x0b, 0x04, 0x18, 0x16, - 0x05, 0x16, 0x4c, 0x59, 0x02, 0x05, 0x13, 0x00, 0x3f, 0x33, 0x2b, 0x11, - 0x00, 0x33, 0x18, 0x3f, 0x12, 0x39, 0x2f, 0x2b, 0x2b, 0x11, 0x00, 0x33, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x39, 0x31, 0x30, 0x01, 0x21, 0x11, 0x0e, 0x01, 0x23, - 0x20, 0x00, 0x11, 0x10, 0x00, 0x21, 0x32, 0x17, 0x07, 0x26, 0x23, 0x22, - 0x02, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x21, 0x02, 0xe3, 0x02, - 0x44, 0x8d, 0xf9, 0x82, 0xfe, 0xb5, 0xfe, 0xa3, 0x01, 0x95, 0x01, 0x67, - 0xe1, 0xd1, 0x67, 0xa0, 0xad, 0xc9, 0xf2, 0xc3, 0xba, 0x61, 0x64, 0xfe, - 0xeb, 0x03, 0x35, 0xfd, 0x0a, 0x2e, 0x25, 0x01, 0x85, 0x01, 0x6c, 0x01, - 0x62, 0x01, 0x8c, 0x5a, 0xf8, 0x50, 0xfe, 0xf2, 0xe4, 0xee, 0xfb, 0x14, - 0x01, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x05, 0x66, - 0x05, 0xb6, 0x00, 0x0b, 0x00, 0x37, 0x40, 0x1c, 0x09, 0x01, 0x01, 0x00, - 0x00, 0x0d, 0x08, 0x04, 0x04, 0x05, 0x05, 0x0c, 0x08, 0x03, 0x4c, 0x59, - 0x4c, 0x08, 0x01, 0x08, 0x08, 0x05, 0x0a, 0x06, 0x03, 0x01, 0x05, 0x12, - 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, 0x2f, 0x5d, 0x2b, 0x11, 0x01, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x29, 0x01, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, - 0x21, 0x05, 0x66, 0xfe, 0xcb, 0xfd, 0xbd, 0xfe, 0xca, 0x01, 0x36, 0x02, - 0x43, 0x01, 0x35, 0x02, 0x77, 0xfd, 0x89, 0x05, 0xb6, 0xfd, 0xc3, 0x02, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x01, 0xee, - 0x05, 0xb6, 0x00, 0x03, 0x00, 0x11, 0xb6, 0x00, 0x04, 0x05, 0x01, 0x03, - 0x00, 0x12, 0x00, 0x3f, 0x3f, 0x11, 0x12, 0x01, 0x39, 0x31, 0x30, 0x33, - 0x11, 0x21, 0x11, 0xb8, 0x01, 0x36, 0x05, 0xb6, 0xfa, 0x4a, 0x00, 0x00, - 0x00, 0x01, 0xff, 0x68, 0xfe, 0x52, 0x01, 0xee, 0x05, 0xb6, 0x00, 0x0d, - 0x00, 0x1f, 0x40, 0x0e, 0x0b, 0x02, 0x08, 0x08, 0x0e, 0x03, 0x05, 0x00, - 0x05, 0x4c, 0x59, 0x00, 0x09, 0x03, 0x00, 0x3f, 0xc4, 0x2b, 0x11, 0x00, - 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x13, 0x22, 0x27, - 0x11, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x10, 0x02, 0x1f, - 0x69, 0x4e, 0x50, 0x42, 0x66, 0x58, 0x01, 0x36, 0xea, 0xfe, 0x52, 0x16, - 0x01, 0x02, 0x14, 0x7f, 0x87, 0x05, 0x5a, 0xfa, 0xa8, 0xff, 0x00, 0xfe, - 0xf4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x05, 0x50, - 0x05, 0xb6, 0x00, 0x0c, 0x00, 0x42, 0x40, 0x1f, 0x0c, 0x02, 0x02, 0x0a, - 0x0b, 0x0b, 0x01, 0x00, 0x00, 0x0e, 0x08, 0x03, 0x05, 0x05, 0x0d, 0x0c, - 0x02, 0x02, 0x03, 0x0b, 0x0b, 0x06, 0x03, 0x08, 0x08, 0x05, 0x06, 0x03, - 0x01, 0x05, 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x12, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x32, - 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x39, 0x11, 0x33, 0x31, 0x30, - 0x29, 0x01, 0x01, 0x07, 0x11, 0x21, 0x11, 0x21, 0x11, 0x37, 0x01, 0x21, - 0x01, 0x05, 0x50, 0xfe, 0xa0, 0xfe, 0x81, 0x83, 0xfe, 0xca, 0x01, 0x36, - 0x7a, 0x01, 0x8c, 0x01, 0x58, 0xfe, 0x02, 0x02, 0x68, 0x5e, 0xfd, 0xf6, - 0x05, 0xb6, 0xfd, 0x63, 0xac, 0x01, 0xf1, 0xfd, 0x79, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x04, 0x3f, 0x05, 0xb6, 0x00, 0x05, - 0x00, 0x1f, 0x40, 0x0e, 0x04, 0x07, 0x03, 0x00, 0x00, 0x06, 0x01, 0x03, - 0x00, 0x03, 0x4c, 0x59, 0x00, 0x12, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x33, 0x11, 0x21, - 0x11, 0x21, 0x11, 0xb8, 0x01, 0x36, 0x02, 0x51, 0x05, 0xb6, 0xfb, 0x4a, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x06, 0xd3, - 0x05, 0xb6, 0x00, 0x14, 0x00, 0x3a, 0x40, 0x1c, 0x14, 0x00, 0x09, 0x0b, - 0x09, 0x08, 0x03, 0x05, 0x0e, 0x0e, 0x0d, 0x0d, 0x16, 0x05, 0x06, 0x15, - 0x12, 0x02, 0x09, 0x02, 0x06, 0x0b, 0x07, 0x03, 0x0e, 0x00, 0x06, 0x12, - 0x00, 0x3f, 0x33, 0x33, 0x3f, 0x33, 0x12, 0x39, 0x39, 0x11, 0x33, 0x11, - 0x01, 0x33, 0x32, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, 0x11, - 0x33, 0x33, 0x31, 0x30, 0x21, 0x01, 0x23, 0x12, 0x15, 0x11, 0x21, 0x11, - 0x21, 0x01, 0x33, 0x01, 0x21, 0x11, 0x21, 0x11, 0x34, 0x36, 0x13, 0x23, - 0x01, 0x03, 0x23, 0xfe, 0xa0, 0x09, 0x13, 0xfe, 0xeb, 0x01, 0xa6, 0x01, - 0x5a, 0x06, 0x01, 0x6f, 0x01, 0xa6, 0xfe, 0xdf, 0x03, 0x0c, 0x09, 0xfe, - 0x87, 0x04, 0x7b, 0xfe, 0xa2, 0x75, 0xfd, 0x58, 0x05, 0xb6, 0xfb, 0xa2, - 0x04, 0x5e, 0xfa, 0x4a, 0x02, 0xb4, 0x31, 0x80, 0x01, 0x14, 0xfb, 0x87, - 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x05, 0xc9, 0x05, 0xb6, 0x00, 0x0f, - 0x00, 0x36, 0x40, 0x19, 0x0a, 0x00, 0x09, 0x01, 0x06, 0x0d, 0x0d, 0x00, - 0x00, 0x11, 0x03, 0x05, 0x06, 0x06, 0x07, 0x10, 0x0b, 0x03, 0x07, 0x0e, - 0x08, 0x03, 0x01, 0x07, 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, - 0x39, 0x11, 0x01, 0x33, 0x32, 0x11, 0x33, 0x39, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x12, 0x39, 0x39, 0x12, 0x39, 0x31, 0x30, 0x29, 0x01, 0x01, 0x23, - 0x12, 0x15, 0x11, 0x21, 0x11, 0x21, 0x01, 0x33, 0x02, 0x35, 0x11, 0x21, - 0x05, 0xc9, 0xfe, 0x76, 0xfd, 0x84, 0x09, 0x13, 0xfe, 0xeb, 0x01, 0x87, - 0x02, 0x7b, 0x07, 0x0f, 0x01, 0x17, 0x04, 0x52, 0xfe, 0xdb, 0x7d, 0xfd, - 0x50, 0x05, 0xb6, 0xfb, 0xb9, 0x01, 0x1d, 0x76, 0x02, 0xb4, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x77, 0xff, 0xec, 0x05, 0xe7, 0x05, 0xcd, 0x00, 0x0b, - 0x00, 0x15, 0x00, 0x28, 0x40, 0x14, 0x11, 0x00, 0x00, 0x17, 0x0c, 0x06, - 0x06, 0x16, 0x09, 0x13, 0x4c, 0x59, 0x09, 0x04, 0x03, 0x0f, 0x4c, 0x59, - 0x03, 0x13, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x01, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x00, 0x21, - 0x20, 0x00, 0x11, 0x10, 0x00, 0x21, 0x20, 0x00, 0x01, 0x14, 0x16, 0x33, - 0x20, 0x11, 0x10, 0x21, 0x22, 0x06, 0x05, 0xe7, 0xfe, 0x98, 0xfe, 0xb0, - 0xfe, 0xb0, 0xfe, 0x98, 0x01, 0x69, 0x01, 0x51, 0x01, 0x51, 0x01, 0x65, - 0xfb, 0xd5, 0xba, 0xb9, 0x01, 0x73, 0xfe, 0x8f, 0xb9, 0xbc, 0x02, 0xdd, - 0xfe, 0x95, 0xfe, 0x7a, 0x01, 0x86, 0x01, 0x6d, 0x01, 0x6d, 0x01, 0x81, - 0xfe, 0x7c, 0xfe, 0x94, 0xf5, 0xf8, 0x01, 0xed, 0x01, 0xee, 0xf9, 0x00, - 0x00, 0x02, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xaa, 0x05, 0xb6, 0x00, 0x08, - 0x00, 0x13, 0x00, 0x34, 0x40, 0x1a, 0x04, 0x09, 0x09, 0x15, 0x00, 0x0e, - 0x0e, 0x0f, 0x0f, 0x14, 0x0d, 0x00, 0x4c, 0x59, 0x0d, 0x0d, 0x0f, 0x10, - 0x10, 0x08, 0x4c, 0x59, 0x10, 0x03, 0x0f, 0x12, 0x00, 0x3f, 0x3f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x33, 0x32, 0x36, - 0x35, 0x34, 0x26, 0x2b, 0x01, 0x05, 0x14, 0x04, 0x21, 0x23, 0x11, 0x21, - 0x11, 0x21, 0x20, 0x04, 0x01, 0xee, 0x66, 0x8f, 0x8e, 0x77, 0x7f, 0x8d, - 0x02, 0xbc, 0xfe, 0xd9, 0xfe, 0xf0, 0x85, 0xfe, 0xca, 0x01, 0xd3, 0x01, - 0x0a, 0x01, 0x15, 0x03, 0x06, 0x71, 0x6c, 0x6d, 0x68, 0xca, 0xec, 0xfa, - 0xfd, 0xf8, 0x05, 0xb6, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, - 0xfe, 0xa4, 0x05, 0xe7, 0x05, 0xcd, 0x00, 0x0f, 0x00, 0x19, 0x00, 0x42, - 0x40, 0x22, 0x06, 0x03, 0x05, 0x04, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0a, - 0x15, 0x00, 0x00, 0x1b, 0x10, 0x0a, 0x0a, 0x1a, 0x03, 0x07, 0x0d, 0x0d, - 0x17, 0x4c, 0x59, 0x0d, 0x04, 0x07, 0x13, 0x4c, 0x59, 0x05, 0x07, 0x13, - 0x00, 0x3f, 0xc6, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, 0x17, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x02, 0x07, 0x01, 0x21, - 0x01, 0x23, 0x20, 0x00, 0x11, 0x10, 0x00, 0x21, 0x20, 0x00, 0x01, 0x14, - 0x16, 0x33, 0x20, 0x11, 0x10, 0x21, 0x22, 0x06, 0x05, 0xe7, 0xb7, 0xb1, - 0x01, 0x60, 0xfe, 0x73, 0xfe, 0xf4, 0x17, 0xfe, 0xb0, 0xfe, 0x98, 0x01, - 0x69, 0x01, 0x51, 0x01, 0x51, 0x01, 0x65, 0xfb, 0xd5, 0xba, 0xb9, 0x01, - 0x73, 0xfe, 0x8f, 0xb9, 0xbc, 0x02, 0xdd, 0xfe, 0xfe, 0xfe, 0xa3, 0x51, - 0xfe, 0x77, 0x01, 0x48, 0x01, 0x86, 0x01, 0x6d, 0x01, 0x6d, 0x01, 0x81, - 0xfe, 0x7c, 0xfe, 0x94, 0xf5, 0xf8, 0x01, 0xed, 0x01, 0xee, 0xf9, 0x00, - 0x00, 0x02, 0x00, 0xb8, 0x00, 0x00, 0x05, 0x48, 0x05, 0xb6, 0x00, 0x08, - 0x00, 0x17, 0x00, 0x4e, 0x40, 0x26, 0x13, 0x17, 0x17, 0x04, 0x0a, 0x04, - 0x10, 0x10, 0x0a, 0x16, 0x15, 0x19, 0x00, 0x0a, 0x0a, 0x0b, 0x0b, 0x18, - 0x13, 0x09, 0x0c, 0x00, 0x09, 0x4d, 0x59, 0x00, 0x00, 0x0b, 0x0c, 0x0c, - 0x08, 0x4c, 0x59, 0x0c, 0x03, 0x16, 0x0b, 0x12, 0x00, 0x3f, 0x33, 0x3f, - 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x00, 0x39, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x10, 0x18, 0xc4, 0x32, 0x11, - 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x33, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x19, 0x01, 0x21, 0x11, 0x21, - 0x20, 0x04, 0x15, 0x14, 0x06, 0x07, 0x00, 0x17, 0x21, 0x01, 0x01, 0xee, - 0x64, 0x93, 0x8c, 0x8f, 0x96, 0x5e, 0xfe, 0xca, 0x01, 0xaa, 0x01, 0x2a, - 0x01, 0x1e, 0x8e, 0x82, 0x01, 0x4a, 0x64, 0xfe, 0xa8, 0xfe, 0xa3, 0x03, - 0x2d, 0x62, 0x69, 0x68, 0x58, 0xfd, 0x79, 0xfd, 0xcf, 0x05, 0xb6, 0xd9, - 0xdd, 0x81, 0xc9, 0x39, 0xfe, 0x13, 0x90, 0x02, 0x31, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x5e, 0xff, 0xec, 0x04, 0x17, 0x05, 0xcb, 0x00, 0x27, - 0x00, 0x45, 0x40, 0x22, 0x1b, 0x1a, 0x1a, 0x21, 0x00, 0x21, 0x05, 0x14, - 0x0c, 0x00, 0x14, 0x00, 0x28, 0x29, 0x14, 0x21, 0x00, 0x0c, 0x21, 0x0c, - 0x1e, 0x09, 0x17, 0x1e, 0x4c, 0x59, 0x17, 0x04, 0x03, 0x09, 0x4c, 0x59, - 0x03, 0x13, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, - 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, - 0x14, 0x04, 0x23, 0x22, 0x27, 0x11, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x35, - 0x34, 0x2e, 0x01, 0x27, 0x2e, 0x02, 0x35, 0x34, 0x24, 0x33, 0x32, 0x16, - 0x17, 0x07, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x01, 0x17, - 0x1e, 0x01, 0x04, 0x17, 0xfe, 0xe3, 0xfe, 0xea, 0xb4, 0x94, 0xcd, 0x55, - 0x66, 0x6d, 0x30, 0x5d, 0x8f, 0x86, 0x86, 0x50, 0x01, 0x07, 0xe8, 0x72, - 0xcf, 0x71, 0x64, 0x75, 0x99, 0x4a, 0x58, 0x5e, 0x26, 0x53, 0x9b, 0xcd, - 0x98, 0x01, 0x96, 0xc6, 0xe4, 0x58, 0x01, 0x20, 0x42, 0x36, 0x4e, 0x4d, - 0x2b, 0x43, 0x3e, 0x44, 0x3f, 0x74, 0x9a, 0x67, 0xc2, 0xde, 0x36, 0x31, - 0xf1, 0x30, 0x26, 0x52, 0x42, 0x29, 0x3d, 0x39, 0x4a, 0x62, 0xc5, 0x00, - 0x00, 0x01, 0x00, 0x29, 0x00, 0x00, 0x04, 0x79, 0x05, 0xb6, 0x00, 0x07, - 0x00, 0x26, 0x40, 0x12, 0x06, 0x00, 0x00, 0x03, 0x01, 0x01, 0x08, 0x09, - 0x07, 0x03, 0x04, 0x03, 0x4c, 0x59, 0x04, 0x03, 0x01, 0x12, 0x00, 0x3f, - 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, - 0x02, 0xec, 0xfe, 0xca, 0xfe, 0x73, 0x04, 0x50, 0xfe, 0x73, 0x04, 0xb4, - 0x01, 0x02, 0xfe, 0xfe, 0x00, 0x01, 0x00, 0xae, 0xff, 0xec, 0x05, 0x5e, - 0x05, 0xb6, 0x00, 0x12, 0x00, 0x25, 0x40, 0x11, 0x11, 0x01, 0x01, 0x14, - 0x0b, 0x08, 0x08, 0x13, 0x12, 0x09, 0x03, 0x05, 0x0e, 0x4c, 0x59, 0x05, - 0x13, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x33, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x11, 0x14, 0x06, 0x04, - 0x23, 0x20, 0x00, 0x35, 0x11, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, - 0x35, 0x11, 0x05, 0x5e, 0x91, 0xfe, 0xee, 0xbb, 0xfe, 0xe6, 0xfe, 0xc8, - 0x01, 0x35, 0x88, 0x9d, 0x98, 0x89, 0x05, 0xb6, 0xfc, 0x4e, 0xa2, 0xf4, - 0x82, 0x01, 0x21, 0xfb, 0x03, 0xae, 0xfc, 0x81, 0xa9, 0x9e, 0x9f, 0xaa, - 0x03, 0x7d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x33, - 0x05, 0xb6, 0x00, 0x0b, 0x00, 0x2a, 0x40, 0x13, 0x03, 0x02, 0x09, 0x09, - 0x05, 0x00, 0x01, 0x01, 0x0d, 0x05, 0x04, 0x04, 0x0c, 0x00, 0x04, 0x03, - 0x09, 0x03, 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x39, 0x11, 0x33, 0x33, 0x31, 0x30, - 0x01, 0x21, 0x01, 0x21, 0x01, 0x21, 0x01, 0x1e, 0x01, 0x17, 0x36, 0x37, - 0x03, 0xfa, 0x01, 0x39, 0xfe, 0x0f, 0xfe, 0xae, 0xfe, 0x10, 0x01, 0x39, - 0x01, 0x13, 0x17, 0x31, 0x06, 0x0b, 0x40, 0x05, 0xb6, 0xfa, 0x4a, 0x05, - 0xb6, 0xfc, 0x9a, 0x4d, 0xcd, 0x28, 0x5c, 0xe6, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xbc, 0x05, 0xb6, 0x00, 0x1d, 0x00, 0x46, 0x40, 0x22, - 0x0a, 0x09, 0x0f, 0x14, 0x13, 0x05, 0x01, 0x00, 0x18, 0x18, 0x05, 0x0f, - 0x03, 0x0c, 0x1c, 0x1c, 0x1d, 0x1d, 0x1f, 0x0c, 0x0b, 0x0b, 0x1e, 0x1c, - 0x13, 0x05, 0x0b, 0x03, 0x18, 0x0f, 0x0f, 0x01, 0x0a, 0x12, 0x00, 0x3f, - 0x33, 0x33, 0x11, 0x33, 0x3f, 0x33, 0x33, 0x33, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, 0x11, 0x33, 0x33, - 0x11, 0x33, 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x29, 0x01, 0x03, 0x26, - 0x02, 0x27, 0x0e, 0x01, 0x07, 0x03, 0x21, 0x01, 0x21, 0x13, 0x16, 0x17, - 0x3e, 0x01, 0x37, 0x13, 0x21, 0x13, 0x1e, 0x01, 0x17, 0x3e, 0x01, 0x37, - 0x13, 0x21, 0x06, 0x48, 0xfe, 0x9f, 0xc6, 0x0b, 0x35, 0x04, 0x06, 0x30, - 0x0d, 0xc5, 0xfe, 0xa0, 0xfe, 0x8b, 0x01, 0x31, 0xbb, 0x31, 0x16, 0x06, - 0x2b, 0x13, 0xd5, 0x01, 0x25, 0xd5, 0x0e, 0x2a, 0x0b, 0x0a, 0x2c, 0x12, - 0xba, 0x01, 0x31, 0x03, 0x00, 0x29, 0x01, 0x01, 0x2c, 0x36, 0xef, 0x33, - 0xfd, 0x02, 0x05, 0xb6, 0xfc, 0xe2, 0xdd, 0xa2, 0x39, 0xef, 0x42, 0x03, - 0x33, 0xfc, 0xcd, 0x37, 0xe2, 0x51, 0x4e, 0xe9, 0x48, 0x03, 0x1e, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x56, 0x05, 0xb6, 0x00, 0x0b, - 0x00, 0x44, 0x40, 0x20, 0x0b, 0x05, 0x02, 0x08, 0x08, 0x07, 0x09, 0x07, - 0x06, 0x09, 0x0a, 0x06, 0x0a, 0x01, 0x00, 0x00, 0x0d, 0x03, 0x04, 0x0c, - 0x0b, 0x08, 0x02, 0x05, 0x05, 0x04, 0x09, 0x06, 0x03, 0x01, 0x04, 0x12, - 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, 0x11, 0x33, 0x33, 0x33, 0x11, - 0x01, 0x33, 0x32, 0x11, 0x33, 0x11, 0x33, 0x39, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x33, 0x33, 0x31, 0x30, 0x29, 0x01, - 0x09, 0x01, 0x21, 0x09, 0x01, 0x21, 0x09, 0x01, 0x21, 0x01, 0x05, 0x56, - 0xfe, 0x9e, 0xfe, 0xac, 0xfe, 0xac, 0xfe, 0xb4, 0x01, 0xe5, 0xfe, 0x3a, - 0x01, 0x56, 0x01, 0x3b, 0x01, 0x35, 0x01, 0x4e, 0xfe, 0x35, 0x02, 0x29, - 0xfd, 0xd7, 0x02, 0xf2, 0x02, 0xc4, 0xfd, 0xf2, 0x02, 0x0e, 0xfd, 0x2b, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x05, 0xb6, 0x00, 0x08, - 0x00, 0x36, 0x40, 0x19, 0x08, 0x07, 0x07, 0x05, 0x01, 0x02, 0x02, 0x00, - 0x04, 0x04, 0x05, 0x05, 0x09, 0x0a, 0x03, 0x06, 0x06, 0x00, 0x00, 0x05, - 0x01, 0x07, 0x03, 0x05, 0x12, 0x00, 0x3f, 0x3f, 0x33, 0x12, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x12, 0x39, 0x32, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x09, 0x01, 0x21, 0x01, - 0x11, 0x21, 0x11, 0x01, 0x21, 0x02, 0x7f, 0x01, 0x31, 0x01, 0x4e, 0xfe, - 0x1b, 0xfe, 0xcc, 0xfe, 0x1b, 0x01, 0x50, 0x03, 0x5c, 0x02, 0x5a, 0xfc, - 0x83, 0xfd, 0xc7, 0x02, 0x2f, 0x03, 0x87, 0x00, 0x00, 0x01, 0x00, 0x31, - 0x00, 0x00, 0x04, 0x71, 0x05, 0xb6, 0x00, 0x09, 0x00, 0x3b, 0x40, 0x1d, - 0x08, 0x04, 0x01, 0x03, 0x07, 0x07, 0x00, 0x01, 0x00, 0x0a, 0x0b, 0x07, - 0x04, 0x05, 0x05, 0x04, 0x4c, 0x59, 0x05, 0x03, 0x02, 0x01, 0x08, 0x01, - 0x08, 0x4c, 0x59, 0x01, 0x12, 0x00, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, - 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x29, 0x01, 0x35, - 0x01, 0x21, 0x11, 0x21, 0x15, 0x01, 0x21, 0x04, 0x71, 0xfb, 0xc0, 0x02, - 0xbd, 0xfd, 0x56, 0x04, 0x1a, 0xfd, 0x44, 0x02, 0xcf, 0xc9, 0x03, 0xed, - 0x01, 0x00, 0xc8, 0xfc, 0x12, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8f, - 0xfe, 0xbc, 0x02, 0x73, 0x05, 0xb6, 0x00, 0x07, 0x00, 0x1e, 0x40, 0x0d, - 0x06, 0x01, 0x01, 0x08, 0x04, 0x00, 0x09, 0x05, 0x02, 0x03, 0x06, 0x01, - 0x24, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x11, 0x01, 0x33, 0x32, 0x11, 0x39, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x21, 0x11, 0x21, 0x15, 0x23, 0x11, 0x33, - 0x02, 0x73, 0xfe, 0x1c, 0x01, 0xe4, 0xe0, 0xe0, 0xfe, 0xbc, 0x06, 0xfa, - 0xd3, 0xfa, 0xac, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x03, 0x42, - 0x05, 0xb6, 0x00, 0x03, 0x00, 0x1c, 0x40, 0x0c, 0x00, 0x03, 0x03, 0x04, - 0x02, 0x01, 0x01, 0x05, 0x03, 0x03, 0x02, 0x12, 0x00, 0x3f, 0x3f, 0x11, - 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x09, 0x01, - 0x21, 0x01, 0x01, 0x21, 0x02, 0x21, 0xfe, 0xeb, 0xfd, 0xdf, 0x05, 0xb6, - 0xfa, 0x4a, 0x05, 0xb6, 0x00, 0x01, 0x00, 0x33, 0xfe, 0xbc, 0x02, 0x17, - 0x05, 0xb6, 0x00, 0x07, 0x00, 0x20, 0x40, 0x0e, 0x01, 0x06, 0x06, 0x09, - 0x03, 0x07, 0x07, 0x08, 0x00, 0x07, 0x24, 0x03, 0x04, 0x03, 0x00, 0x3f, - 0x33, 0x3f, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, - 0x31, 0x30, 0x17, 0x33, 0x11, 0x23, 0x35, 0x21, 0x11, 0x21, 0x33, 0xdf, - 0xdf, 0x01, 0xe4, 0xfe, 0x1c, 0x71, 0x05, 0x54, 0xd3, 0xf9, 0x06, 0x00, - 0x00, 0x01, 0x00, 0x08, 0x02, 0x08, 0x04, 0x3d, 0x05, 0xbe, 0x00, 0x06, - 0x00, 0x2d, 0x40, 0x14, 0x02, 0x01, 0x05, 0x05, 0x06, 0x04, 0x04, 0x03, - 0x03, 0x08, 0x06, 0x00, 0x00, 0x00, 0x04, 0x04, 0x07, 0x05, 0x02, 0x06, - 0x00, 0x3f, 0x33, 0x12, 0x39, 0x2f, 0x33, 0x01, 0x32, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x33, 0x31, 0x30, 0x13, - 0x01, 0x33, 0x01, 0x23, 0x09, 0x01, 0x08, 0x01, 0xb6, 0x90, 0x01, 0xef, - 0xef, 0xfe, 0xbe, 0xfe, 0xe8, 0x02, 0x08, 0x03, 0xb6, 0xfc, 0x4a, 0x02, - 0x83, 0xfd, 0x7d, 0x00, 0x00, 0x01, 0xff, 0xfc, 0xfe, 0xbc, 0x03, 0x4e, - 0xff, 0x48, 0x00, 0x03, 0x00, 0x12, 0xb6, 0x00, 0x05, 0x01, 0x04, 0x02, - 0x01, 0x24, 0x00, 0x3f, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x01, 0x21, 0x35, 0x21, 0x03, 0x4e, 0xfc, 0xae, 0x03, 0x52, 0xfe, 0xbc, - 0x8c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x4c, 0x04, 0xd9, 0x03, 0x8d, - 0x06, 0x21, 0x00, 0x08, 0x00, 0x1c, 0x40, 0x0b, 0x00, 0x07, 0x40, 0x03, - 0x05, 0x05, 0x09, 0x0a, 0x05, 0x80, 0x00, 0x00, 0x2f, 0x1a, 0xdd, 0x11, - 0x12, 0x01, 0x39, 0x11, 0x33, 0x1a, 0xca, 0x32, 0x31, 0x30, 0x01, 0x2e, - 0x01, 0x27, 0x35, 0x21, 0x16, 0x17, 0x15, 0x02, 0xc3, 0x3f, 0xf4, 0x44, - 0x01, 0x56, 0x3f, 0xac, 0x04, 0xd9, 0x2c, 0xc5, 0x42, 0x15, 0x65, 0xc8, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x56, 0xff, 0xec, 0x04, 0x3b, - 0x04, 0x75, 0x00, 0x18, 0x00, 0x22, 0x00, 0x4a, 0x40, 0x26, 0x12, 0x0c, - 0x08, 0x0c, 0x02, 0x22, 0x22, 0x18, 0x18, 0x24, 0x1d, 0x08, 0x08, 0x23, - 0x0c, 0x19, 0x4b, 0x59, 0x0c, 0x0c, 0x05, 0x14, 0x14, 0x0f, 0x46, 0x59, - 0x14, 0x10, 0x02, 0x1f, 0x05, 0x1f, 0x46, 0x59, 0x05, 0x16, 0x00, 0x15, - 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x18, 0x3f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x12, 0x39, 0x32, 0x11, 0x12, 0x39, 0x31, 0x30, 0x21, 0x27, - 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x35, - 0x34, 0x23, 0x22, 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x01, - 0x07, 0x0e, 0x01, 0x15, 0x14, 0x33, 0x32, 0x36, 0x35, 0x03, 0x66, 0x3b, - 0x08, 0x4d, 0xa3, 0x83, 0xa1, 0xb9, 0xf9, 0xfb, 0xc2, 0xae, 0x86, 0xb5, - 0x65, 0xc1, 0xeb, 0xe1, 0xf0, 0xfe, 0xd1, 0x76, 0x85, 0x82, 0x94, 0x6a, - 0x7f, 0x98, 0x61, 0x4b, 0xb8, 0xaa, 0xb2, 0xa9, 0x09, 0x06, 0x31, 0xaa, - 0x51, 0xce, 0x65, 0xc4, 0xc8, 0xfd, 0x17, 0x02, 0x06, 0x04, 0x04, 0x58, - 0x5a, 0x81, 0x7a, 0x65, 0x00, 0x02, 0x00, 0xa0, 0xff, 0xec, 0x04, 0xb4, - 0x06, 0x14, 0x00, 0x12, 0x00, 0x1f, 0x00, 0x42, 0x40, 0x21, 0x1d, 0x03, - 0x03, 0x21, 0x09, 0x10, 0x0b, 0x0e, 0x17, 0x17, 0x0b, 0x0b, 0x20, 0x0c, - 0x00, 0x0b, 0x15, 0x09, 0x10, 0x06, 0x00, 0x06, 0x1a, 0x47, 0x59, 0x06, - 0x16, 0x00, 0x13, 0x47, 0x59, 0x00, 0x10, 0x00, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x18, 0x3f, 0x3f, 0x11, 0x01, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, - 0x31, 0x30, 0x01, 0x32, 0x12, 0x11, 0x10, 0x02, 0x23, 0x22, 0x27, 0x23, - 0x07, 0x23, 0x11, 0x21, 0x11, 0x14, 0x07, 0x33, 0x36, 0x17, 0x22, 0x06, - 0x07, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x03, 0x0e, - 0xc6, 0xe0, 0xe7, 0xc7, 0xc5, 0x70, 0x15, 0x33, 0xe9, 0x01, 0x31, 0x0c, - 0x0c, 0x6b, 0x70, 0x71, 0x68, 0x02, 0x6b, 0x74, 0x5e, 0x6f, 0x70, 0x04, - 0x73, 0xfe, 0xcb, 0xfe, 0xf3, 0xfe, 0xeb, 0xfe, 0xd0, 0x8f, 0x7b, 0x06, - 0x14, 0xfe, 0x96, 0x45, 0x98, 0xa6, 0xf4, 0x8b, 0xa0, 0x21, 0xb4, 0x9c, - 0xad, 0xa5, 0xa5, 0xa5, 0x00, 0x01, 0x00, 0x5c, 0xff, 0xec, 0x03, 0xdd, - 0x04, 0x73, 0x00, 0x15, 0x00, 0x2a, 0x40, 0x15, 0x13, 0x0d, 0x07, 0x07, - 0x17, 0x0d, 0x02, 0x02, 0x16, 0x05, 0x0b, 0x47, 0x59, 0x05, 0x10, 0x00, - 0x0f, 0x47, 0x59, 0x00, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x31, 0x30, - 0x05, 0x20, 0x11, 0x10, 0x00, 0x21, 0x32, 0x17, 0x07, 0x2e, 0x01, 0x23, - 0x22, 0x11, 0x10, 0x33, 0x32, 0x36, 0x37, 0x11, 0x0e, 0x01, 0x02, 0x66, - 0xfd, 0xf6, 0x01, 0x1c, 0x01, 0x09, 0xc2, 0x9a, 0x5a, 0x48, 0x7c, 0x3e, - 0xee, 0xee, 0x58, 0x96, 0x4b, 0x4a, 0x97, 0x14, 0x02, 0x3d, 0x01, 0x1d, - 0x01, 0x2d, 0x4c, 0xec, 0x1d, 0x25, 0xfe, 0xae, 0xfe, 0xb8, 0x2f, 0x32, - 0xfe, 0xfb, 0x2f, 0x24, 0x00, 0x02, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x71, - 0x06, 0x14, 0x00, 0x12, 0x00, 0x1f, 0x00, 0x40, 0x40, 0x21, 0x09, 0x16, - 0x10, 0x03, 0x0b, 0x0b, 0x0e, 0x0e, 0x21, 0x1d, 0x03, 0x03, 0x20, 0x0f, - 0x15, 0x0c, 0x00, 0x11, 0x09, 0x00, 0x06, 0x06, 0x1a, 0x47, 0x59, 0x06, - 0x10, 0x00, 0x13, 0x47, 0x59, 0x00, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x18, 0x3f, 0x3f, 0x11, 0x01, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, 0x17, 0x39, 0x31, 0x30, - 0x05, 0x22, 0x02, 0x11, 0x10, 0x12, 0x33, 0x32, 0x17, 0x33, 0x26, 0x35, - 0x11, 0x21, 0x11, 0x23, 0x27, 0x23, 0x06, 0x27, 0x32, 0x36, 0x37, 0x35, - 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x02, 0x02, 0xc5, 0xe1, - 0xe5, 0xc9, 0xd3, 0x6f, 0x0a, 0x17, 0x01, 0x32, 0xea, 0x3b, 0x0d, 0x68, - 0x6a, 0x75, 0x6d, 0x05, 0x6f, 0x7d, 0x66, 0x71, 0x72, 0x14, 0x01, 0x32, - 0x01, 0x0f, 0x01, 0x13, 0x01, 0x33, 0xa4, 0x7d, 0x62, 0x01, 0x66, 0xf9, - 0xec, 0x91, 0xa5, 0xf3, 0x88, 0xa3, 0x21, 0xb4, 0x9c, 0xad, 0xa5, 0xa5, - 0xa5, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x62, - 0x04, 0x73, 0x00, 0x06, 0x00, 0x1b, 0x00, 0x46, 0x40, 0x23, 0x03, 0x12, - 0x04, 0x04, 0x19, 0x11, 0x11, 0x1d, 0x12, 0x0a, 0x0a, 0x1c, 0x18, 0x15, - 0x12, 0x03, 0x12, 0x4a, 0x59, 0x03, 0x03, 0x07, 0x0d, 0x0d, 0x00, 0x4a, - 0x59, 0x0d, 0x10, 0x07, 0x15, 0x46, 0x59, 0x07, 0x16, 0x00, 0x3f, 0x2b, - 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x33, 0x11, 0x12, 0x39, 0x31, 0x30, 0x01, 0x22, 0x06, 0x07, 0x21, 0x2e, - 0x01, 0x03, 0x20, 0x00, 0x11, 0x10, 0x00, 0x33, 0x32, 0x00, 0x1d, 0x01, - 0x21, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x15, 0x0e, 0x01, 0x02, 0x6f, - 0x61, 0x6e, 0x08, 0x01, 0xac, 0x02, 0x72, 0x36, 0xfe, 0xf2, 0xfe, 0xd0, - 0x01, 0x19, 0xf8, 0xed, 0x01, 0x08, 0xfd, 0x2f, 0x05, 0x90, 0x82, 0x65, - 0xb4, 0x62, 0x50, 0xb6, 0x03, 0x9a, 0x7b, 0x71, 0x71, 0x7b, 0xfc, 0x52, - 0x01, 0x2a, 0x01, 0x11, 0x01, 0x19, 0x01, 0x33, 0xfe, 0xf2, 0xee, 0x94, - 0x82, 0x92, 0x2a, 0x2e, 0xec, 0x28, 0x27, 0x00, 0x00, 0x01, 0x00, 0x29, - 0x00, 0x00, 0x03, 0x75, 0x06, 0x1f, 0x00, 0x15, 0x00, 0x3c, 0x40, 0x1e, - 0x14, 0x02, 0x02, 0x07, 0x05, 0x03, 0x03, 0x16, 0x17, 0x0d, 0x00, 0x00, - 0x17, 0x05, 0x01, 0x14, 0x01, 0x46, 0x59, 0x07, 0x14, 0x0f, 0x0b, 0x10, - 0x47, 0x59, 0x0b, 0x00, 0x03, 0x15, 0x00, 0x3f, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x33, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, - 0x12, 0x39, 0x11, 0x33, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x21, - 0x11, 0x21, 0x11, 0x23, 0x35, 0x37, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, - 0x07, 0x26, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x21, 0x03, 0x0a, 0xfe, 0xf8, - 0xfe, 0xcf, 0xa8, 0xa8, 0xbc, 0xcf, 0x9e, 0x7b, 0x4e, 0x5c, 0x4e, 0x41, - 0x3a, 0x01, 0x08, 0x03, 0x79, 0xfc, 0x87, 0x03, 0x79, 0x93, 0x52, 0x52, - 0xbf, 0xb0, 0x2f, 0xe0, 0x1d, 0x4d, 0x3c, 0x46, 0x00, 0x03, 0x00, 0x06, - 0xfe, 0x14, 0x04, 0x6d, 0x04, 0x73, 0x00, 0x29, 0x00, 0x36, 0x00, 0x40, - 0x00, 0x80, 0x40, 0x44, 0x0b, 0x1d, 0x1d, 0x3d, 0x3d, 0x04, 0x30, 0x11, - 0x11, 0x02, 0x29, 0x07, 0x20, 0x04, 0x23, 0x01, 0x04, 0x04, 0x42, 0x1a, - 0x2a, 0x2a, 0x17, 0x17, 0x37, 0x23, 0x23, 0x41, 0x1a, 0x0d, 0x00, 0x0d, - 0x01, 0x0d, 0x06, 0x0d, 0x34, 0x07, 0x3a, 0x4b, 0x59, 0x09, 0x20, 0x04, - 0x03, 0x07, 0x07, 0x26, 0x34, 0x29, 0x02, 0x4a, 0x59, 0x29, 0x29, 0x26, - 0x26, 0x3f, 0x4b, 0x59, 0x26, 0x10, 0x14, 0x2d, 0x4a, 0x59, 0x14, 0x1b, - 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x18, 0x2f, - 0x2b, 0x00, 0x18, 0x2f, 0x12, 0x39, 0x2f, 0x17, 0x39, 0x2b, 0x11, 0x00, - 0x33, 0x5f, 0x5e, 0x5d, 0x12, 0x39, 0x11, 0x01, 0x33, 0x11, 0x33, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, 0x17, 0x39, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x15, - 0x07, 0x16, 0x15, 0x14, 0x06, 0x23, 0x2f, 0x01, 0x06, 0x15, 0x14, 0x3b, - 0x01, 0x32, 0x16, 0x15, 0x14, 0x04, 0x21, 0x22, 0x26, 0x35, 0x34, 0x36, - 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, - 0x33, 0x32, 0x16, 0x17, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, - 0x26, 0x2b, 0x01, 0x22, 0x06, 0x13, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, - 0x34, 0x23, 0x22, 0x04, 0x6d, 0xaf, 0x30, 0xfb, 0xdf, 0x37, 0x2d, 0x2f, - 0xa8, 0xbe, 0xb8, 0xc1, 0xfe, 0xb9, 0xfe, 0xce, 0xea, 0xf7, 0x7e, 0x7a, - 0x2f, 0x46, 0x4a, 0x46, 0x58, 0x67, 0xee, 0xdd, 0x2f, 0x81, 0x12, 0xfe, - 0x27, 0x79, 0x6d, 0xa4, 0xba, 0x6e, 0x73, 0x9e, 0x54, 0x71, 0x6f, 0x53, - 0x55, 0x56, 0x50, 0xa6, 0xa8, 0x04, 0x5e, 0x9b, 0x2d, 0x4b, 0x5d, 0xb4, - 0xc9, 0x03, 0x05, 0x24, 0x2c, 0x42, 0x9e, 0x99, 0xc4, 0xd8, 0xa3, 0x93, - 0x65, 0x88, 0x1d, 0x14, 0x5b, 0x33, 0x40, 0x55, 0x29, 0x26, 0xa8, 0x72, - 0xb7, 0xc8, 0x11, 0x04, 0xfb, 0x04, 0x3f, 0x48, 0x5a, 0x4e, 0x3f, 0x30, - 0x4f, 0x03, 0x4d, 0x5b, 0x6a, 0x6a, 0x5b, 0xca, 0x00, 0x01, 0x00, 0xa0, - 0x00, 0x00, 0x04, 0xa8, 0x06, 0x14, 0x00, 0x15, 0x00, 0x35, 0x40, 0x1a, - 0x01, 0x00, 0x00, 0x17, 0x0f, 0x09, 0x0c, 0x08, 0x08, 0x09, 0x09, 0x16, - 0x0f, 0x04, 0x12, 0x12, 0x04, 0x47, 0x59, 0x12, 0x10, 0x0a, 0x00, 0x01, - 0x09, 0x15, 0x00, 0x3f, 0x33, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x34, 0x23, 0x22, 0x06, 0x15, 0x11, - 0x21, 0x11, 0x21, 0x11, 0x14, 0x0f, 0x01, 0x33, 0x36, 0x33, 0x32, 0x16, - 0x15, 0x04, 0xa8, 0xfe, 0xcf, 0xb4, 0x80, 0x72, 0xfe, 0xcf, 0x01, 0x31, - 0x07, 0x07, 0x10, 0x66, 0xde, 0xc5, 0xcc, 0x02, 0x8d, 0xf2, 0xae, 0xc3, - 0xfd, 0xf2, 0x06, 0x14, 0xfe, 0xc3, 0x25, 0x89, 0x5a, 0xa4, 0xd4, 0xc6, - 0x00, 0x02, 0x00, 0x93, 0x00, 0x00, 0x01, 0xdf, 0x06, 0x14, 0x00, 0x08, - 0x00, 0x0c, 0x00, 0x24, 0x40, 0x11, 0x04, 0x09, 0x09, 0x00, 0x0a, 0x0a, - 0x0d, 0x0b, 0x0f, 0x0a, 0x15, 0x02, 0x07, 0x49, 0x59, 0x02, 0x00, 0x00, - 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x3f, 0x11, 0x01, 0x33, 0x11, 0x33, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x13, 0x34, 0x33, 0x32, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x01, 0x21, 0x11, 0x21, 0x93, 0xa6, 0xa6, 0x53, 0x53, 0xa6, 0x01, - 0x3e, 0xfe, 0xcf, 0x01, 0x31, 0x05, 0x7f, 0x95, 0x95, 0x47, 0x4f, 0xfb, - 0x17, 0x04, 0x5e, 0x00, 0x00, 0x02, 0xff, 0x7d, 0xfe, 0x14, 0x01, 0xdf, - 0x06, 0x14, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x2f, 0x40, 0x18, 0x12, 0x0b, - 0x0b, 0x0e, 0x02, 0x08, 0x08, 0x17, 0x10, 0x15, 0x49, 0x59, 0x10, 0x00, - 0x09, 0x0f, 0x03, 0x05, 0x00, 0x05, 0x47, 0x59, 0x00, 0x1b, 0x00, 0x3f, - 0x2b, 0x11, 0x00, 0x33, 0x18, 0x3f, 0x3f, 0x2b, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x22, 0x27, 0x35, 0x16, - 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x14, 0x06, 0x03, 0x34, 0x33, - 0x32, 0x15, 0x14, 0x06, 0x23, 0x22, 0x46, 0x75, 0x54, 0x46, 0x49, 0x4d, - 0x47, 0x01, 0x31, 0xce, 0x70, 0xa6, 0xa6, 0x53, 0x53, 0xa6, 0xfe, 0x14, - 0x19, 0xf0, 0x13, 0x56, 0x54, 0x04, 0xaa, 0xfb, 0x29, 0xb2, 0xc1, 0x07, - 0x6b, 0x95, 0x95, 0x47, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa0, - 0x00, 0x00, 0x04, 0xf6, 0x06, 0x14, 0x00, 0x0e, 0x00, 0x49, 0x40, 0x23, - 0x04, 0x07, 0x07, 0x08, 0x02, 0x03, 0x03, 0x06, 0x05, 0x05, 0x10, 0x0e, - 0x0a, 0x0d, 0x0d, 0x08, 0x08, 0x0a, 0x0a, 0x0f, 0x0b, 0x00, 0x04, 0x07, - 0x07, 0x08, 0x08, 0x0e, 0x0e, 0x03, 0x06, 0x0a, 0x15, 0x03, 0x0f, 0x00, - 0x3f, 0x3f, 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, 0x39, 0x11, 0x33, 0x3f, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, - 0x37, 0x01, 0x21, 0x09, 0x01, 0x21, 0x01, 0x07, 0x11, 0x21, 0x11, 0x21, - 0x11, 0x07, 0x01, 0xc5, 0x85, 0x01, 0x39, 0x01, 0x58, 0xfe, 0x44, 0x01, - 0xd7, 0xfe, 0xa0, 0xfe, 0xbe, 0x83, 0xfe, 0xcf, 0x01, 0x31, 0x10, 0x02, - 0x60, 0xaa, 0x01, 0x54, 0xfe, 0x1b, 0xfd, 0x87, 0x01, 0xc5, 0x69, 0xfe, - 0xa4, 0x06, 0x14, 0xfd, 0x4a, 0xfe, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa0, - 0x00, 0x00, 0x01, 0xd1, 0x06, 0x14, 0x00, 0x03, 0x00, 0x13, 0xb7, 0x00, - 0x01, 0x01, 0x04, 0x02, 0x00, 0x01, 0x15, 0x00, 0x3f, 0x3f, 0x11, 0x01, - 0x33, 0x11, 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x21, 0x01, 0xd1, 0xfe, - 0xcf, 0x01, 0x31, 0x06, 0x14, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa0, - 0x00, 0x00, 0x07, 0x42, 0x04, 0x73, 0x00, 0x23, 0x00, 0x4d, 0x40, 0x26, - 0x14, 0x13, 0x13, 0x00, 0x00, 0x01, 0x01, 0x0a, 0x1c, 0x1c, 0x1b, 0x1b, - 0x25, 0x0d, 0x09, 0x09, 0x0a, 0x0a, 0x24, 0x13, 0x0d, 0x0d, 0x11, 0x20, - 0x05, 0x11, 0x05, 0x47, 0x59, 0x17, 0x11, 0x10, 0x0b, 0x0f, 0x1c, 0x01, - 0x0a, 0x15, 0x00, 0x3f, 0x33, 0x33, 0x3f, 0x3f, 0x33, 0x2b, 0x11, 0x00, - 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x12, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x12, 0x39, 0x11, - 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, - 0x11, 0x21, 0x11, 0x33, 0x17, 0x33, 0x3e, 0x01, 0x33, 0x32, 0x17, 0x33, - 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, 0x21, 0x11, 0x34, 0x26, 0x23, - 0x22, 0x06, 0x15, 0x04, 0x89, 0xfe, 0xcf, 0x51, 0x57, 0x75, 0x6a, 0xfe, - 0xcf, 0xe9, 0x29, 0x11, 0x2d, 0xaa, 0x6e, 0xfb, 0x59, 0x1b, 0x2d, 0xaf, - 0x6e, 0xbe, 0xc3, 0xfe, 0xce, 0x51, 0x57, 0x70, 0x6f, 0x02, 0x8d, 0x79, - 0x79, 0xac, 0xc5, 0xfd, 0xf2, 0x04, 0x5e, 0x8f, 0x4d, 0x57, 0xa4, 0x4e, - 0x56, 0xc3, 0xd7, 0xfd, 0x27, 0x02, 0x8d, 0x79, 0x79, 0xa0, 0xae, 0x00, - 0x00, 0x01, 0x00, 0xa0, 0x00, 0x00, 0x04, 0xa8, 0x04, 0x73, 0x00, 0x14, - 0x00, 0x31, 0x40, 0x18, 0x01, 0x00, 0x00, 0x16, 0x0d, 0x09, 0x09, 0x0a, - 0x0a, 0x15, 0x0d, 0x05, 0x11, 0x11, 0x05, 0x47, 0x59, 0x11, 0x10, 0x0b, - 0x0f, 0x01, 0x0a, 0x15, 0x00, 0x3f, 0x33, 0x3f, 0x3f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x11, 0x01, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, - 0x11, 0x21, 0x11, 0x33, 0x17, 0x33, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, - 0x04, 0xa8, 0xfe, 0xcf, 0x56, 0x5e, 0x80, 0x72, 0xfe, 0xcf, 0xe9, 0x29, - 0x11, 0x33, 0xb3, 0x72, 0xc3, 0xca, 0x02, 0x8d, 0x79, 0x79, 0xab, 0xc6, - 0xfd, 0xf2, 0x04, 0x5e, 0x8f, 0x51, 0x53, 0xd3, 0xc7, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x98, 0x04, 0x73, 0x00, 0x0b, - 0x00, 0x19, 0x00, 0x28, 0x40, 0x14, 0x06, 0x0c, 0x0c, 0x1b, 0x00, 0x13, - 0x13, 0x1a, 0x16, 0x09, 0x47, 0x59, 0x16, 0x10, 0x0f, 0x03, 0x47, 0x59, - 0x0f, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x01, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x16, 0x33, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x05, 0x10, 0x00, 0x21, - 0x22, 0x26, 0x02, 0x35, 0x10, 0x00, 0x21, 0x32, 0x16, 0x12, 0x01, 0x93, - 0x6d, 0x7b, 0x7a, 0x6b, 0x6c, 0x7b, 0x7a, 0x6c, 0x03, 0x05, 0xfe, 0xe0, - 0xfe, 0xff, 0xa1, 0xf6, 0x84, 0x01, 0x1e, 0x01, 0x03, 0xa1, 0xf6, 0x84, - 0x02, 0x31, 0xa6, 0xaa, 0xa9, 0xa7, 0xa6, 0xa6, 0xa5, 0xa7, 0xfe, 0xef, - 0xfe, 0xcc, 0x8d, 0x01, 0x08, 0xb0, 0x01, 0x12, 0x01, 0x30, 0x8c, 0xfe, - 0xfa, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa0, 0xfe, 0x14, 0x04, 0xb4, - 0x04, 0x73, 0x00, 0x13, 0x00, 0x1f, 0x00, 0x43, 0x40, 0x22, 0x18, 0x06, - 0x06, 0x07, 0x0a, 0x03, 0x03, 0x07, 0x1d, 0x10, 0x07, 0x10, 0x20, 0x21, - 0x03, 0x0a, 0x00, 0x0d, 0x0d, 0x14, 0x47, 0x59, 0x0d, 0x10, 0x08, 0x0f, - 0x07, 0x1b, 0x00, 0x1b, 0x47, 0x59, 0x00, 0x16, 0x00, 0x3f, 0x2b, 0x00, - 0x18, 0x3f, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x05, 0x22, 0x27, 0x23, 0x16, 0x15, 0x11, 0x21, 0x11, - 0x33, 0x17, 0x33, 0x36, 0x33, 0x32, 0x12, 0x11, 0x14, 0x02, 0x06, 0x03, - 0x22, 0x06, 0x07, 0x15, 0x14, 0x16, 0x33, 0x32, 0x11, 0x34, 0x26, 0x03, - 0x06, 0xc5, 0x70, 0x10, 0x10, 0xfe, 0xcf, 0xf8, 0x2b, 0x0e, 0x6b, 0xd2, - 0xc6, 0xe0, 0x69, 0xc2, 0xdd, 0x71, 0x68, 0x02, 0x6b, 0x74, 0xcd, 0x65, - 0x14, 0x8f, 0x8c, 0x16, 0xfe, 0x3b, 0x06, 0x4a, 0x91, 0xa6, 0xfe, 0xce, - 0xfe, 0xf0, 0xb3, 0xfe, 0xf8, 0x8a, 0x03, 0x93, 0x8b, 0xa0, 0x21, 0xb4, - 0x9c, 0x01, 0x52, 0xa5, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5c, - 0xfe, 0x14, 0x04, 0x71, 0x04, 0x73, 0x00, 0x0b, 0x00, 0x20, 0x00, 0x42, - 0x40, 0x21, 0x16, 0x03, 0x1d, 0x03, 0x1a, 0x1a, 0x19, 0x19, 0x22, 0x09, - 0x0f, 0x0f, 0x21, 0x1a, 0x1b, 0x17, 0x0f, 0x1e, 0x16, 0x0c, 0x12, 0x12, - 0x07, 0x47, 0x59, 0x12, 0x10, 0x0c, 0x00, 0x47, 0x59, 0x0c, 0x16, 0x00, - 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x18, - 0x3f, 0x3f, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, - 0x39, 0x39, 0x11, 0x33, 0x31, 0x30, 0x25, 0x32, 0x36, 0x37, 0x35, 0x34, - 0x26, 0x23, 0x22, 0x11, 0x14, 0x16, 0x17, 0x22, 0x02, 0x11, 0x10, 0x12, - 0x33, 0x32, 0x16, 0x17, 0x33, 0x37, 0x21, 0x11, 0x21, 0x11, 0x34, 0x37, - 0x23, 0x0e, 0x01, 0x02, 0x6f, 0x74, 0x6c, 0x05, 0x6f, 0x7b, 0xd7, 0x6b, - 0x04, 0xc6, 0xe0, 0xe5, 0xc7, 0x6a, 0x9e, 0x3c, 0x08, 0x1b, 0x01, 0x02, - 0xfe, 0xce, 0x0d, 0x0d, 0x31, 0xa2, 0xdb, 0x85, 0xa6, 0x25, 0xb4, 0x9c, - 0xfe, 0xae, 0xa8, 0xa6, 0xef, 0x01, 0x31, 0x01, 0x10, 0x01, 0x12, 0x01, - 0x34, 0x50, 0x54, 0x8f, 0xf9, 0xb6, 0x01, 0xd5, 0x3d, 0x6b, 0x51, 0x54, - 0x00, 0x01, 0x00, 0xa0, 0x00, 0x00, 0x03, 0x77, 0x04, 0x73, 0x00, 0x10, - 0x00, 0x25, 0x40, 0x11, 0x02, 0x12, 0x0d, 0x09, 0x09, 0x0a, 0x0a, 0x11, - 0x0b, 0x0f, 0x0a, 0x15, 0x0d, 0x05, 0x05, 0x00, 0x10, 0x00, 0x3f, 0x32, - 0x11, 0x39, 0x3f, 0x3f, 0x11, 0x01, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x32, 0x17, 0x03, 0x26, 0x23, 0x22, 0x06, 0x15, - 0x11, 0x21, 0x11, 0x33, 0x17, 0x33, 0x3e, 0x01, 0x03, 0x10, 0x3e, 0x29, - 0x17, 0x25, 0x35, 0x92, 0xa3, 0xfe, 0xcf, 0xe7, 0x2d, 0x0f, 0x34, 0xb1, - 0x04, 0x73, 0x09, 0xfe, 0xe2, 0x0a, 0x96, 0x87, 0xfd, 0xc7, 0x04, 0x5e, - 0xbc, 0x5e, 0x73, 0x00, 0x00, 0x01, 0x00, 0x5c, 0xff, 0xec, 0x03, 0xac, - 0x04, 0x73, 0x00, 0x25, 0x00, 0x3f, 0x40, 0x1f, 0x06, 0x19, 0x14, 0x0c, - 0x00, 0x00, 0x27, 0x1f, 0x14, 0x14, 0x26, 0x00, 0x0c, 0x14, 0x1f, 0x0c, - 0x1f, 0x0a, 0x1d, 0x17, 0x1d, 0x46, 0x59, 0x17, 0x10, 0x03, 0x0a, 0x46, - 0x59, 0x03, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x39, 0x31, 0x30, 0x01, 0x14, 0x06, - 0x23, 0x22, 0x26, 0x27, 0x35, 0x1e, 0x01, 0x33, 0x32, 0x35, 0x34, 0x2e, - 0x01, 0x27, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x07, 0x2e, - 0x01, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x02, 0x03, 0xac, 0xef, - 0xee, 0x7a, 0xac, 0x4b, 0x55, 0xd5, 0x51, 0xa6, 0x2c, 0x6c, 0x5a, 0x81, - 0x79, 0x37, 0xe7, 0xd4, 0xca, 0xbf, 0x5c, 0x54, 0x92, 0x4c, 0x87, 0x57, - 0x93, 0x83, 0x7a, 0x3a, 0x01, 0x4c, 0xac, 0xb4, 0x21, 0x20, 0xfc, 0x28, - 0x36, 0x60, 0x24, 0x2d, 0x39, 0x26, 0x36, 0x5c, 0x77, 0x57, 0x95, 0xa3, - 0x58, 0xdc, 0x24, 0x2e, 0x49, 0x29, 0x3c, 0x3b, 0x35, 0x5c, 0x78, 0x00, - 0x00, 0x01, 0x00, 0x2f, 0xff, 0xec, 0x03, 0x37, 0x05, 0x4c, 0x00, 0x15, - 0x00, 0x3d, 0x40, 0x1e, 0x0c, 0x08, 0x0f, 0x0f, 0x13, 0x13, 0x0a, 0x08, - 0x02, 0x11, 0x08, 0x11, 0x16, 0x17, 0x0a, 0x12, 0x0f, 0x12, 0x46, 0x59, - 0x0d, 0x0c, 0x0f, 0x0f, 0x05, 0x00, 0x47, 0x59, 0x05, 0x16, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x33, 0xc1, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x12, - 0x39, 0x31, 0x30, 0x25, 0x32, 0x37, 0x15, 0x06, 0x23, 0x22, 0x26, 0x35, - 0x11, 0x23, 0x35, 0x3f, 0x01, 0x33, 0x15, 0x21, 0x15, 0x21, 0x11, 0x14, - 0x16, 0x02, 0x77, 0x50, 0x70, 0x72, 0xa6, 0xb7, 0xa7, 0x92, 0xa8, 0x58, - 0xc3, 0x01, 0x39, 0xfe, 0xc7, 0x49, 0xdf, 0x23, 0xe3, 0x33, 0xb9, 0xb9, - 0x02, 0x1b, 0x81, 0x66, 0xec, 0xee, 0xe5, 0xfd, 0xe5, 0x41, 0x3e, 0x00, - 0x00, 0x01, 0x00, 0x9a, 0xff, 0xec, 0x04, 0xa2, 0x04, 0x5e, 0x00, 0x14, - 0x00, 0x32, 0x40, 0x18, 0x02, 0x11, 0x11, 0x14, 0x14, 0x16, 0x0b, 0x08, - 0x08, 0x15, 0x12, 0x09, 0x0f, 0x02, 0x05, 0x0e, 0x05, 0x0e, 0x47, 0x59, - 0x05, 0x16, 0x00, 0x15, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, - 0x18, 0x3f, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x12, 0x39, 0x31, 0x30, 0x21, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, - 0x35, 0x11, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, - 0x11, 0x03, 0xb8, 0x29, 0x10, 0x31, 0xb4, 0x73, 0xc5, 0xc8, 0x01, 0x31, - 0x56, 0x5e, 0x80, 0x72, 0x01, 0x31, 0x8f, 0x4e, 0x55, 0xd3, 0xc6, 0x02, - 0xd9, 0xfd, 0x73, 0x79, 0x79, 0xab, 0xc6, 0x02, 0x0e, 0xfb, 0xa2, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x8d, 0x04, 0x5e, 0x00, 0x0b, - 0x00, 0x2c, 0x40, 0x14, 0x0b, 0x00, 0x05, 0x05, 0x02, 0x09, 0x09, 0x0a, - 0x0a, 0x0d, 0x02, 0x01, 0x01, 0x0c, 0x09, 0x01, 0x0f, 0x05, 0x00, 0x15, - 0x00, 0x3f, 0x32, 0x3f, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x33, 0x31, 0x30, 0x21, 0x01, - 0x21, 0x13, 0x16, 0x17, 0x33, 0x36, 0x37, 0x13, 0x21, 0x01, 0x01, 0xaa, - 0xfe, 0x56, 0x01, 0x3f, 0xd8, 0x24, 0x09, 0x06, 0x05, 0x28, 0xd7, 0x01, - 0x3f, 0xfe, 0x56, 0x04, 0x5e, 0xfd, 0x83, 0x79, 0x6c, 0x60, 0x85, 0x02, - 0x7d, 0xfb, 0xa2, 0x00, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x06, 0xc5, - 0x04, 0x5e, 0x00, 0x1d, 0x00, 0x4a, 0x40, 0x24, 0x05, 0x04, 0x0a, 0x10, - 0x0f, 0x03, 0x1d, 0x00, 0x17, 0x17, 0x03, 0x0a, 0x03, 0x07, 0x1b, 0x1b, - 0x1c, 0x1c, 0x1f, 0x07, 0x06, 0x06, 0x1e, 0x17, 0x0a, 0x0a, 0x03, 0x05, - 0x0f, 0x0f, 0x1b, 0x06, 0x0f, 0x00, 0x05, 0x15, 0x00, 0x3f, 0x33, 0x3f, - 0x33, 0x33, 0x11, 0x12, 0x39, 0x39, 0x11, 0x33, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, 0x11, 0x33, 0x33, - 0x11, 0x33, 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x21, 0x0b, 0x01, 0x23, - 0x03, 0x21, 0x01, 0x21, 0x13, 0x16, 0x17, 0x33, 0x36, 0x3f, 0x01, 0x13, - 0x21, 0x13, 0x1e, 0x03, 0x17, 0x33, 0x3e, 0x01, 0x37, 0x13, 0x21, 0x01, - 0x04, 0x37, 0x56, 0x74, 0x07, 0xcc, 0xfe, 0xb8, 0xfe, 0xc2, 0x01, 0x30, - 0x81, 0x1f, 0x20, 0x06, 0x04, 0x1f, 0x10, 0x8a, 0x01, 0x50, 0x83, 0x04, - 0x11, 0x10, 0x0d, 0x01, 0x06, 0x09, 0x2e, 0x0a, 0x86, 0x01, 0x2b, 0xfe, - 0xbe, 0x01, 0x87, 0x01, 0xee, 0xfc, 0x8b, 0x04, 0x5e, 0xfe, 0x11, 0x85, - 0xea, 0x4c, 0xa5, 0x55, 0x02, 0x18, 0xfd, 0xe8, 0x16, 0x56, 0x61, 0x5d, - 0x1c, 0x48, 0xfb, 0x2c, 0x01, 0xef, 0xfb, 0xa2, 0x00, 0x01, 0x00, 0x0a, - 0x00, 0x00, 0x04, 0x96, 0x04, 0x5e, 0x00, 0x0b, 0x00, 0x4c, 0x40, 0x24, - 0x06, 0x05, 0x00, 0x01, 0x09, 0x03, 0x03, 0x02, 0x04, 0x02, 0x01, 0x04, - 0x05, 0x01, 0x05, 0x0b, 0x08, 0x07, 0x07, 0x0d, 0x0a, 0x0b, 0x0b, 0x0c, - 0x09, 0x06, 0x03, 0x00, 0x00, 0x01, 0x08, 0x0b, 0x15, 0x04, 0x01, 0x0f, - 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, 0x11, 0x33, 0x33, 0x33, 0x11, - 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x12, 0x39, 0x12, 0x39, - 0x31, 0x30, 0x09, 0x01, 0x21, 0x1b, 0x01, 0x21, 0x09, 0x01, 0x21, 0x0b, - 0x01, 0x21, 0x01, 0x85, 0xfe, 0x98, 0x01, 0x5a, 0xd9, 0xdb, 0x01, 0x5a, - 0xfe, 0x94, 0x01, 0x7d, 0xfe, 0xa5, 0xeb, 0xec, 0xfe, 0xa6, 0x02, 0x3b, - 0x02, 0x23, 0xfe, 0x9c, 0x01, 0x64, 0xfd, 0xdd, 0xfd, 0xc5, 0x01, 0x7f, - 0xfe, 0x81, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xfe, 0x14, 0x04, 0x8d, - 0x04, 0x5e, 0x00, 0x16, 0x00, 0x4c, 0x40, 0x25, 0x0b, 0x14, 0x14, 0x10, - 0x16, 0x16, 0x04, 0x04, 0x01, 0x08, 0x08, 0x09, 0x09, 0x18, 0x10, 0x01, - 0x00, 0x00, 0x17, 0x0b, 0x14, 0x14, 0x12, 0x04, 0x16, 0x15, 0x10, 0x12, - 0x0d, 0x12, 0x47, 0x59, 0x0d, 0x1b, 0x08, 0x00, 0x0f, 0x00, 0x3f, 0x32, - 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x18, 0x3f, 0x33, 0x12, 0x39, 0x11, 0x33, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, - 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x31, 0x30, 0x11, 0x21, - 0x13, 0x16, 0x17, 0x33, 0x36, 0x37, 0x13, 0x21, 0x01, 0x0e, 0x01, 0x23, - 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x3f, 0x01, 0x01, 0x4e, 0xd3, - 0x1b, 0x0a, 0x06, 0x0b, 0x20, 0xcf, 0x01, 0x47, 0xfe, 0x27, 0x41, 0xf1, - 0xa1, 0x4f, 0x4c, 0x37, 0x41, 0x51, 0x79, 0x22, 0x12, 0x04, 0x5e, 0xfd, - 0x8b, 0x52, 0x70, 0x67, 0x5b, 0x02, 0x75, 0xfb, 0x13, 0xaf, 0xae, 0x11, - 0xf2, 0x0d, 0x63, 0x64, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x37, - 0x00, 0x00, 0x03, 0xaa, 0x04, 0x5e, 0x00, 0x09, 0x00, 0x3d, 0x40, 0x1e, - 0x03, 0x07, 0x04, 0x07, 0x01, 0x00, 0x00, 0x0b, 0x08, 0x01, 0x01, 0x0a, - 0x07, 0x04, 0x05, 0x05, 0x04, 0x46, 0x59, 0x05, 0x0f, 0x02, 0x08, 0x01, - 0x01, 0x08, 0x46, 0x59, 0x01, 0x15, 0x00, 0x3f, 0x2b, 0x11, 0x12, 0x00, - 0x39, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, 0x11, 0x33, 0x31, 0x30, 0x29, - 0x01, 0x35, 0x01, 0x21, 0x35, 0x21, 0x15, 0x01, 0x21, 0x03, 0xaa, 0xfc, - 0x8d, 0x02, 0x06, 0xfe, 0x19, 0x03, 0x42, 0xfe, 0x08, 0x02, 0x0a, 0xb4, - 0x02, 0xc1, 0xe9, 0xc6, 0xfd, 0x51, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1f, - 0xfe, 0xbc, 0x02, 0xd5, 0x05, 0xb6, 0x00, 0x1f, 0x00, 0x36, 0x40, 0x19, - 0x03, 0x14, 0x08, 0x1f, 0x1f, 0x11, 0x18, 0x18, 0x20, 0x0d, 0x1c, 0x1c, - 0x21, 0x04, 0x03, 0x13, 0x13, 0x0d, 0x1b, 0x1b, 0x1c, 0x24, 0x0d, 0x0c, - 0x03, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x33, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, - 0x33, 0x39, 0x31, 0x30, 0x01, 0x34, 0x26, 0x23, 0x35, 0x32, 0x36, 0x3d, - 0x01, 0x11, 0x34, 0x36, 0x33, 0x15, 0x0e, 0x01, 0x15, 0x11, 0x06, 0x07, - 0x15, 0x16, 0x1d, 0x01, 0x11, 0x14, 0x16, 0x17, 0x15, 0x22, 0x26, 0x35, - 0x01, 0x1f, 0x83, 0x7d, 0x7e, 0x82, 0xc2, 0xf4, 0x63, 0x4b, 0x06, 0xe4, - 0xea, 0x4a, 0x64, 0xf4, 0xc2, 0x01, 0x0e, 0x57, 0x5c, 0xef, 0x58, 0x52, - 0x08, 0x01, 0x3e, 0x99, 0x7d, 0xe1, 0x03, 0x46, 0x44, 0xfe, 0xd5, 0xbc, - 0x22, 0x0c, 0x23, 0xb1, 0x09, 0xfe, 0xd5, 0x44, 0x46, 0x03, 0xe2, 0x7d, - 0x9a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0xc7, 0xfe, 0x2f, 0x02, 0xa2, - 0x06, 0x0e, 0x00, 0x03, 0x00, 0x14, 0xb7, 0x02, 0x03, 0x03, 0x04, 0x05, - 0x03, 0x00, 0x00, 0x00, 0x3f, 0x2f, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, - 0x31, 0x30, 0x01, 0x33, 0x11, 0x23, 0x01, 0xc7, 0xdb, 0xdb, 0x06, 0x0e, - 0xf8, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x52, 0xfe, 0xbc, 0x03, 0x08, - 0x05, 0xb6, 0x00, 0x22, 0x00, 0x36, 0x40, 0x19, 0x1f, 0x1a, 0x0d, 0x00, - 0x00, 0x10, 0x08, 0x08, 0x24, 0x14, 0x04, 0x04, 0x23, 0x1f, 0x1e, 0x0e, - 0x0e, 0x14, 0x05, 0x14, 0x15, 0x03, 0x05, 0x04, 0x24, 0x00, 0x3f, 0x33, - 0x3f, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x33, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x12, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x33, 0x39, 0x31, 0x30, - 0x05, 0x14, 0x0e, 0x01, 0x23, 0x35, 0x3e, 0x01, 0x35, 0x11, 0x35, 0x34, - 0x36, 0x37, 0x35, 0x26, 0x27, 0x11, 0x34, 0x26, 0x27, 0x35, 0x32, 0x1e, - 0x01, 0x15, 0x11, 0x15, 0x14, 0x16, 0x33, 0x15, 0x22, 0x06, 0x15, 0x02, - 0x08, 0x52, 0xbd, 0xa7, 0x63, 0x4b, 0x76, 0x73, 0xe3, 0x06, 0x4a, 0x64, - 0xa7, 0xbe, 0x51, 0x7b, 0x85, 0x7d, 0x83, 0x2d, 0x70, 0x72, 0x35, 0xe2, - 0x02, 0x44, 0x47, 0x01, 0x2b, 0x0b, 0x56, 0x6b, 0x11, 0x0c, 0x22, 0xbc, - 0x01, 0x2b, 0x46, 0x44, 0x03, 0xe1, 0x35, 0x73, 0x6e, 0xfe, 0xc2, 0x0a, - 0x54, 0x54, 0xef, 0x52, 0x61, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x58, - 0x02, 0x27, 0x04, 0x39, 0x03, 0x7d, 0x00, 0x15, 0x00, 0x37, 0x40, 0x18, - 0x06, 0x00, 0x11, 0x0b, 0x00, 0x0b, 0x03, 0x0f, 0x0f, 0x17, 0x03, 0x16, - 0x0f, 0x0e, 0x0e, 0x06, 0x04, 0x03, 0x03, 0x0b, 0x11, 0x11, 0x00, 0x06, - 0x00, 0x2f, 0x33, 0x32, 0x7d, 0x2f, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x22, 0x06, 0x07, 0x35, 0x36, 0x33, - 0x32, 0x16, 0x17, 0x16, 0x33, 0x32, 0x36, 0x37, 0x15, 0x06, 0x23, 0x22, - 0x26, 0x27, 0x26, 0x01, 0x42, 0x37, 0x7d, 0x36, 0x67, 0x99, 0x49, 0x81, - 0x4b, 0x81, 0x62, 0x35, 0x7e, 0x36, 0x65, 0x9b, 0x42, 0x78, 0x5a, 0x83, - 0x02, 0xa0, 0x43, 0x36, 0xe7, 0x6d, 0x20, 0x20, 0x37, 0x40, 0x39, 0xe7, - 0x6d, 0x1a, 0x25, 0x38, 0x00, 0x02, 0x00, 0x75, 0xfe, 0x8f, 0x01, 0xd3, - 0x04, 0x5e, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x26, 0x40, 0x12, 0x03, 0x0a, - 0x0a, 0x02, 0x04, 0x04, 0x11, 0x10, 0x00, 0x07, 0x0d, 0x07, 0x54, 0x59, - 0x0d, 0x0f, 0x03, 0x22, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x11, - 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x33, - 0x13, 0x21, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, - 0x32, 0x16, 0xa8, 0xf4, 0x33, 0xfe, 0xa6, 0x01, 0x5e, 0x5a, 0x56, 0x53, - 0x5b, 0x5d, 0x51, 0x54, 0x5c, 0x02, 0x5e, 0xfc, 0x31, 0x05, 0x25, 0x54, - 0x56, 0x58, 0x52, 0x51, 0x59, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8f, - 0xff, 0xec, 0x04, 0x10, 0x05, 0xcb, 0x00, 0x1b, 0x00, 0x44, 0x40, 0x23, - 0x11, 0x08, 0x1a, 0x1a, 0x05, 0x1b, 0x1b, 0x02, 0x17, 0x17, 0x0a, 0x02, - 0x0a, 0x1c, 0x1d, 0x19, 0x13, 0x4f, 0x59, 0x08, 0x0e, 0x4f, 0x59, 0x00, - 0x05, 0x08, 0x19, 0x08, 0x19, 0x08, 0x06, 0x1b, 0x19, 0x06, 0x07, 0x00, - 0x3f, 0x3f, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x12, 0x39, 0x39, 0x2b, 0x2b, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, - 0x33, 0x11, 0x33, 0x32, 0x31, 0x30, 0x25, 0x24, 0x11, 0x10, 0x12, 0x37, - 0x35, 0x33, 0x15, 0x16, 0x17, 0x07, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x15, - 0x10, 0x33, 0x32, 0x36, 0x37, 0x15, 0x06, 0x07, 0x15, 0x23, 0x02, 0x33, - 0xfe, 0x5c, 0xd1, 0xd3, 0xb2, 0xa6, 0x85, 0x5a, 0x48, 0x7c, 0x3e, 0x79, - 0x74, 0xed, 0x52, 0x84, 0x64, 0x7f, 0x8a, 0xb2, 0xb0, 0x3b, 0x01, 0xfa, - 0x01, 0x05, 0x01, 0x1c, 0x1f, 0xa6, 0x9e, 0x09, 0x41, 0xeb, 0x1d, 0x24, - 0xa7, 0xab, 0xfe, 0xb9, 0x1f, 0x2d, 0xfe, 0x3d, 0x09, 0xbc, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x52, 0x00, 0x00, 0x04, 0x6a, 0x05, 0xcb, 0x00, 0x1d, - 0x00, 0x58, 0x40, 0x2c, 0x0f, 0x12, 0x0b, 0x02, 0x09, 0x0d, 0x0d, 0x1a, - 0x16, 0x16, 0x02, 0x18, 0x10, 0x18, 0x12, 0x12, 0x10, 0x1e, 0x1f, 0x0c, - 0x18, 0x19, 0x18, 0x51, 0x59, 0x09, 0x19, 0x19, 0x00, 0x13, 0x12, 0x0f, - 0x12, 0x0f, 0x4e, 0x59, 0x12, 0x18, 0x00, 0x05, 0x4f, 0x59, 0x00, 0x07, - 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, - 0x39, 0x18, 0x2f, 0x33, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, 0x01, 0x39, - 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, - 0x12, 0x39, 0x12, 0x39, 0x31, 0x30, 0x01, 0x32, 0x17, 0x07, 0x26, 0x23, - 0x22, 0x06, 0x1d, 0x01, 0x21, 0x15, 0x21, 0x15, 0x14, 0x07, 0x21, 0x11, - 0x21, 0x35, 0x3e, 0x01, 0x3d, 0x01, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, - 0x02, 0xbc, 0xc3, 0xc3, 0x5d, 0x9d, 0x73, 0x4e, 0x54, 0x01, 0x77, 0xfe, - 0x89, 0x97, 0x02, 0xce, 0xfb, 0xe8, 0x67, 0x4d, 0xb2, 0xb2, 0xe5, 0x05, - 0xcb, 0x52, 0xe6, 0x40, 0x59, 0x53, 0xc1, 0xdb, 0x8f, 0xaa, 0x4e, 0xfe, - 0xfc, 0xf8, 0x2c, 0x72, 0x64, 0x91, 0xdb, 0xc3, 0xc9, 0xd9, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x71, 0x00, 0xfe, 0x04, 0x21, 0x04, 0xaa, 0x00, 0x1b, - 0x00, 0x27, 0x00, 0x3c, 0x40, 0x22, 0x10, 0x0c, 0x13, 0x09, 0x05, 0x17, - 0x1a, 0x02, 0x08, 0x00, 0x0e, 0x0e, 0x22, 0x1c, 0x00, 0x1c, 0x1c, 0x28, - 0x29, 0x17, 0x13, 0x10, 0x1a, 0x02, 0x0c, 0x09, 0x05, 0x08, 0x07, 0x15, - 0x15, 0x1f, 0x07, 0x25, 0x00, 0x2f, 0x33, 0xc6, 0x32, 0x11, 0x12, 0x17, - 0x39, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x10, 0xc2, 0x32, 0x11, 0x12, - 0x17, 0x39, 0x31, 0x30, 0x13, 0x34, 0x37, 0x27, 0x37, 0x17, 0x36, 0x33, - 0x32, 0x17, 0x37, 0x17, 0x07, 0x16, 0x15, 0x14, 0x07, 0x17, 0x07, 0x27, - 0x06, 0x23, 0x22, 0x27, 0x07, 0x27, 0x37, 0x26, 0x37, 0x14, 0x16, 0x33, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0xbc, 0x36, 0x81, 0x93, - 0x7f, 0x5b, 0x6a, 0x69, 0x5b, 0x7f, 0x96, 0x81, 0x35, 0x35, 0x7d, 0x92, - 0x7f, 0x5f, 0x65, 0x73, 0x54, 0x7d, 0x91, 0x7f, 0x36, 0xcf, 0x6d, 0x50, - 0x51, 0x6f, 0x71, 0x4f, 0x4e, 0x6f, 0x02, 0xd3, 0x66, 0x5f, 0x7f, 0x93, - 0x7f, 0x35, 0x37, 0x81, 0x8f, 0x81, 0x59, 0x6e, 0x6b, 0x5c, 0x7d, 0x91, - 0x7d, 0x33, 0x33, 0x7b, 0x91, 0x7d, 0x5d, 0x68, 0x4d, 0x6f, 0x6e, 0x4e, - 0x50, 0x6e, 0x70, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x04, 0x89, - 0x05, 0xb6, 0x00, 0x16, 0x00, 0x71, 0x40, 0x38, 0x0e, 0x12, 0x14, 0x12, - 0x15, 0x0d, 0x11, 0x11, 0x00, 0x09, 0x05, 0x03, 0x05, 0x02, 0x0a, 0x06, - 0x06, 0x00, 0x00, 0x16, 0x01, 0x01, 0x02, 0x02, 0x18, 0x16, 0x15, 0x15, - 0x17, 0x06, 0x12, 0x13, 0x12, 0x52, 0x59, 0x00, 0x03, 0x01, 0x03, 0x13, - 0x0f, 0x0a, 0x0e, 0x0f, 0x0e, 0x52, 0x59, 0x07, 0x0f, 0x0f, 0x0c, 0x01, - 0x15, 0x06, 0x0c, 0x18, 0x00, 0x3f, 0x3f, 0x33, 0x12, 0x39, 0x2f, 0x33, - 0x2b, 0x11, 0x00, 0x33, 0x18, 0x10, 0xc6, 0x32, 0x11, 0x12, 0x39, 0x2b, - 0x11, 0x00, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x12, 0x39, 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x39, 0x11, 0x33, 0x31, 0x30, 0x09, - 0x01, 0x21, 0x01, 0x33, 0x15, 0x23, 0x15, 0x33, 0x15, 0x23, 0x15, 0x21, - 0x35, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x01, 0x21, 0x02, 0x48, - 0x01, 0x08, 0x01, 0x39, 0xfe, 0x81, 0xc3, 0xf6, 0xf6, 0xf6, 0xfe, 0xe1, - 0xf7, 0xf7, 0xf7, 0xbe, 0xfe, 0x87, 0x01, 0x3c, 0x03, 0x5c, 0x02, 0x5a, - 0xfd, 0x15, 0xb2, 0x8a, 0xb2, 0xdd, 0xdd, 0xb2, 0x8a, 0xb2, 0x02, 0xeb, - 0x00, 0x02, 0x01, 0xc7, 0xfe, 0x2f, 0x02, 0xa2, 0x06, 0x0e, 0x00, 0x03, - 0x00, 0x07, 0x00, 0x23, 0x40, 0x0f, 0x02, 0x06, 0x06, 0x03, 0x07, 0x07, - 0x08, 0x09, 0x04, 0x03, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x3f, 0x2f, - 0x39, 0x39, 0x2f, 0x2f, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x33, 0x11, 0x23, 0x11, 0x33, 0x11, 0x23, 0x01, - 0xc7, 0xdb, 0xdb, 0xdb, 0xdb, 0x06, 0x0e, 0xfc, 0xd1, 0xfe, 0x7f, 0xfc, - 0xd1, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6a, 0xff, 0xec, 0x03, 0x7f, - 0x06, 0x29, 0x00, 0x2d, 0x00, 0x38, 0x00, 0x55, 0x40, 0x2a, 0x0a, 0x11, - 0x17, 0x11, 0x05, 0x05, 0x2e, 0x22, 0x00, 0x27, 0x1c, 0x1c, 0x33, 0x17, - 0x00, 0x17, 0x39, 0x3a, 0x03, 0x36, 0x36, 0x13, 0x19, 0x31, 0x31, 0x2a, - 0x13, 0x2a, 0x0e, 0x25, 0x1f, 0x25, 0x4b, 0x59, 0x1f, 0x16, 0x08, 0x0e, - 0x4b, 0x59, 0x08, 0x01, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x33, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x31, 0x30, 0x13, 0x34, 0x36, - 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x07, 0x2e, 0x01, 0x23, - 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x07, 0x1e, - 0x01, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x35, 0x1e, 0x01, 0x33, 0x32, - 0x35, 0x34, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x14, 0x16, 0x17, 0x36, - 0x35, 0x34, 0x26, 0x27, 0x0e, 0x01, 0x79, 0x48, 0x3d, 0x85, 0xdf, 0xb6, - 0xaa, 0xc1, 0x52, 0x44, 0x8d, 0x4e, 0x51, 0x4a, 0x63, 0x72, 0xa3, 0x9a, - 0x7d, 0x3e, 0x3f, 0xef, 0xc9, 0xcb, 0x92, 0x51, 0xc6, 0x46, 0xc2, 0x25, - 0x5a, 0x50, 0xb7, 0x8a, 0xdf, 0x82, 0x74, 0x4e, 0x65, 0x85, 0x25, 0x35, - 0x03, 0x25, 0x4f, 0x83, 0x28, 0x54, 0x95, 0x83, 0x9e, 0x54, 0xbe, 0x20, - 0x33, 0x2e, 0x30, 0x31, 0x4a, 0x2d, 0x40, 0xa9, 0x6d, 0xb1, 0x53, 0x28, - 0x69, 0x4a, 0x94, 0xaf, 0x4f, 0xcf, 0x29, 0x39, 0x75, 0x27, 0x30, 0x33, - 0x22, 0x4a, 0x9d, 0x8b, 0x43, 0x68, 0x2e, 0x39, 0x59, 0x44, 0x5e, 0x31, - 0x0e, 0x4f, 0x00, 0x00, 0x00, 0x02, 0x01, 0x17, 0x04, 0xf8, 0x03, 0xc5, - 0x06, 0x04, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x20, 0x40, 0x0d, 0x12, 0x0c, - 0x00, 0x06, 0x00, 0x00, 0x18, 0x19, 0x0f, 0x03, 0x03, 0x15, 0x09, 0x00, - 0x2f, 0x33, 0x33, 0x11, 0x33, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x10, - 0xcc, 0x32, 0x31, 0x30, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, - 0x06, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, - 0x06, 0x23, 0x22, 0x26, 0x01, 0x17, 0x4b, 0x40, 0x42, 0x4b, 0x4c, 0x41, - 0x40, 0x4b, 0x01, 0x93, 0x51, 0x3c, 0x41, 0x4d, 0x4e, 0x40, 0x3c, 0x51, - 0x05, 0x7d, 0x41, 0x46, 0x4a, 0x3d, 0x3c, 0x49, 0x46, 0x3f, 0x46, 0x41, - 0x48, 0x3f, 0x3d, 0x48, 0x41, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x64, - 0xff, 0xec, 0x06, 0x44, 0x05, 0xcb, 0x00, 0x15, 0x00, 0x25, 0x00, 0x35, - 0x00, 0x42, 0x40, 0x1f, 0x03, 0x0e, 0x09, 0x13, 0x0e, 0x13, 0x26, 0x2e, - 0x26, 0x16, 0x2e, 0x1e, 0x16, 0x1e, 0x36, 0x37, 0x05, 0x0b, 0x00, 0x11, - 0x0b, 0x11, 0x0b, 0x11, 0x1a, 0x2a, 0x22, 0x13, 0x32, 0x1a, 0x04, 0x00, - 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, - 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x22, 0x06, 0x15, - 0x10, 0x33, 0x32, 0x36, 0x37, 0x15, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, - 0x36, 0x33, 0x32, 0x17, 0x07, 0x26, 0x01, 0x34, 0x12, 0x24, 0x33, 0x32, - 0x04, 0x12, 0x15, 0x14, 0x02, 0x04, 0x23, 0x22, 0x24, 0x02, 0x37, 0x14, - 0x12, 0x04, 0x33, 0x32, 0x24, 0x12, 0x35, 0x34, 0x02, 0x24, 0x23, 0x22, - 0x04, 0x02, 0x03, 0x7f, 0x61, 0x6a, 0xcb, 0x39, 0x84, 0x39, 0x78, 0x84, - 0xcc, 0xe0, 0xdd, 0xc7, 0x95, 0x9c, 0x4a, 0x71, 0xfc, 0x7d, 0xc8, 0x01, - 0x5e, 0xca, 0xc8, 0x01, 0x5e, 0xca, 0xc2, 0xfe, 0xa2, 0xd0, 0xcf, 0xfe, - 0xa2, 0xc3, 0x8e, 0xa4, 0x01, 0x1c, 0xa2, 0xa4, 0x01, 0x1b, 0xa3, 0xa4, - 0xfe, 0xe4, 0xa2, 0xa4, 0xfe, 0xe5, 0xa3, 0x03, 0xf2, 0x94, 0x83, 0xfe, - 0xe8, 0x1e, 0x1d, 0xbf, 0x39, 0xfa, 0xdd, 0xdc, 0xf5, 0x4e, 0xa8, 0x3a, - 0xfe, 0xe9, 0xc8, 0x01, 0x5e, 0xca, 0xc8, 0xfe, 0xa2, 0xca, 0xc5, 0xfe, - 0xa6, 0xd0, 0xcf, 0x01, 0x5a, 0xc6, 0xa4, 0xfe, 0xe5, 0xa3, 0xa4, 0x01, - 0x1c, 0xa2, 0xa4, 0x01, 0x1b, 0xa3, 0xa4, 0xfe, 0xe4, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x2f, 0x02, 0xf0, 0x02, 0xb8, 0x05, 0xc7, 0x00, 0x17, - 0x00, 0x21, 0x00, 0x41, 0x40, 0x1e, 0x18, 0x07, 0x01, 0x17, 0x17, 0x1e, - 0x10, 0x07, 0x0b, 0x0b, 0x1e, 0x07, 0x1e, 0x22, 0x23, 0x0f, 0x0d, 0x0d, - 0x1f, 0x0b, 0x0b, 0x13, 0x01, 0x1b, 0x1b, 0x00, 0x00, 0x04, 0x13, 0x1f, - 0x00, 0x3f, 0xc4, 0x39, 0x2f, 0x32, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, - 0x32, 0x12, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x12, - 0x39, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x27, 0x0e, - 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x34, 0x23, 0x22, - 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, 0x25, 0x14, 0x16, - 0x33, 0x32, 0x36, 0x3d, 0x01, 0x07, 0x06, 0x02, 0x31, 0x1f, 0x2b, 0x7c, - 0x4a, 0x75, 0x7d, 0xa5, 0xb9, 0x63, 0x7f, 0x51, 0x88, 0x42, 0x42, 0x9f, - 0x63, 0x89, 0x95, 0xfe, 0x44, 0x2e, 0x20, 0x4d, 0x59, 0x63, 0x91, 0x02, - 0xfc, 0x6e, 0x3a, 0x40, 0x75, 0x6a, 0x6d, 0x6d, 0x09, 0x04, 0x75, 0x3d, - 0x87, 0x20, 0x32, 0x8e, 0x83, 0xfe, 0x46, 0xd5, 0x26, 0x24, 0x53, 0x41, - 0x24, 0x06, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x52, 0x00, 0x5e, 0x04, 0x9a, - 0x04, 0x04, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x5c, 0x40, 0x2b, 0x0a, 0x0d, - 0x0c, 0x09, 0x0b, 0x0b, 0x0c, 0x03, 0x06, 0x02, 0x04, 0x04, 0x01, 0x05, - 0x0c, 0x08, 0x0c, 0x0c, 0x0f, 0x0d, 0x06, 0x06, 0x03, 0x07, 0x00, 0x00, - 0x0a, 0x03, 0x03, 0x02, 0x0b, 0x04, 0x04, 0x0c, 0x05, 0x05, 0x01, 0x0e, - 0x09, 0x02, 0x02, 0x08, 0x01, 0x00, 0x2f, 0x33, 0x33, 0x11, 0x33, 0x11, - 0x12, 0x39, 0x2f, 0x33, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x10, - 0xd6, 0x32, 0x32, 0x11, 0x33, 0xc1, 0x32, 0x11, 0x33, 0x11, 0x33, 0x10, - 0xc1, 0x32, 0x31, 0x30, 0x13, 0x01, 0x17, 0x09, 0x01, 0x07, 0x01, 0x25, - 0x01, 0x17, 0x09, 0x01, 0x07, 0x01, 0x52, 0x01, 0x73, 0xdb, 0xfe, 0xe9, - 0x01, 0x17, 0xdb, 0xfe, 0x8d, 0x01, 0xfa, 0x01, 0x72, 0xdc, 0xfe, 0xe9, - 0x01, 0x17, 0xdc, 0xfe, 0x8e, 0x02, 0x3d, 0x01, 0xc7, 0x77, 0xfe, 0xa4, - 0xfe, 0xa4, 0x77, 0x01, 0xc5, 0x1a, 0x01, 0xc7, 0x77, 0xfe, 0xa4, 0xfe, - 0xa4, 0x77, 0x01, 0xc5, 0x00, 0x01, 0x00, 0x58, 0x00, 0xf8, 0x04, 0x39, - 0x03, 0x3f, 0x00, 0x05, 0x00, 0x1a, 0x40, 0x0a, 0x01, 0x00, 0x00, 0x07, - 0x03, 0x01, 0x01, 0x06, 0x03, 0x04, 0x00, 0x2f, 0x33, 0x12, 0x39, 0x2f, - 0x01, 0x32, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x25, 0x23, 0x11, 0x21, - 0x35, 0x21, 0x04, 0x39, 0xdb, 0xfc, 0xfa, 0x03, 0xe1, 0xf8, 0x01, 0x6c, - 0xdb, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x3d, 0x01, 0xa8, 0x02, 0x56, - 0x02, 0xa2, 0x12, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x64, - 0xff, 0xec, 0x06, 0x44, 0x05, 0xcb, 0x00, 0x0c, 0x00, 0x15, 0x00, 0x25, - 0x00, 0x35, 0x00, 0x66, 0x40, 0x31, 0x04, 0x03, 0x02, 0x05, 0x05, 0x07, - 0x00, 0x11, 0x11, 0x0d, 0x03, 0x0d, 0x07, 0x07, 0x08, 0x03, 0x08, 0x2e, - 0x26, 0x26, 0x16, 0x2e, 0x1e, 0x16, 0x1e, 0x36, 0x37, 0x02, 0x06, 0x06, - 0x0d, 0x0d, 0x04, 0x15, 0x04, 0x08, 0x15, 0x09, 0x08, 0x09, 0x08, 0x09, - 0x1a, 0x2a, 0x22, 0x13, 0x32, 0x1a, 0x04, 0x00, 0x3f, 0x33, 0x3f, 0x33, - 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, - 0x11, 0x33, 0x12, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x12, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, - 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, - 0x07, 0x13, 0x23, 0x03, 0x23, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x01, - 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x01, 0x34, 0x12, 0x24, - 0x33, 0x32, 0x04, 0x12, 0x15, 0x14, 0x02, 0x04, 0x23, 0x22, 0x24, 0x02, - 0x37, 0x14, 0x12, 0x04, 0x33, 0x32, 0x24, 0x12, 0x35, 0x34, 0x02, 0x24, - 0x23, 0x22, 0x04, 0x02, 0x04, 0x85, 0x8f, 0xed, 0xfe, 0xb2, 0x2f, 0xe5, - 0x01, 0x08, 0xb5, 0xa9, 0xfe, 0x7f, 0x1f, 0x42, 0x39, 0x38, 0x45, 0x1d, - 0xfd, 0x60, 0xc8, 0x01, 0x5e, 0xca, 0xc8, 0x01, 0x5e, 0xca, 0xc2, 0xfe, - 0xa2, 0xd0, 0xcf, 0xfe, 0xa2, 0xc3, 0x8e, 0xa4, 0x01, 0x1c, 0xa2, 0xa4, - 0x01, 0x1b, 0xa3, 0xa4, 0xfe, 0xe4, 0xa2, 0xa4, 0xfe, 0xe5, 0xa3, 0x03, - 0x89, 0xaa, 0x3f, 0xfe, 0x70, 0x01, 0x52, 0xfe, 0xae, 0x03, 0x94, 0x8c, - 0xfe, 0xf2, 0x39, 0x42, 0x41, 0x36, 0xfe, 0xdf, 0xc8, 0x01, 0x5e, 0xca, - 0xc8, 0xfe, 0xa2, 0xca, 0xc5, 0xfe, 0xa6, 0xd0, 0xcf, 0x01, 0x5a, 0xc6, - 0xa4, 0xfe, 0xe5, 0xa3, 0xa4, 0x01, 0x1c, 0xa2, 0xa4, 0x01, 0x1b, 0xa3, - 0xa4, 0xfe, 0xe4, 0x00, 0x00, 0x01, 0xff, 0xfa, 0x06, 0x14, 0x04, 0x06, - 0x06, 0xdd, 0x00, 0x03, 0x00, 0x12, 0xb6, 0x00, 0x05, 0x01, 0x04, 0x02, - 0x01, 0x00, 0x00, 0x3f, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x01, 0x21, 0x35, 0x21, 0x04, 0x06, 0xfb, 0xf4, 0x04, 0x0c, 0x06, 0x14, - 0xc9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5c, 0x03, 0x19, 0x03, 0x10, - 0x05, 0xcb, 0x00, 0x0e, 0x00, 0x1a, 0x00, 0x18, 0x40, 0x09, 0x00, 0x0f, - 0x0f, 0x1c, 0x1b, 0x12, 0x0c, 0x18, 0x04, 0x00, 0x2f, 0x33, 0xc4, 0x32, - 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x31, 0x30, 0x13, 0x34, 0x3e, 0x01, - 0x33, 0x32, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x37, - 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x5c, - 0x5c, 0xa0, 0x5e, 0x5c, 0xa1, 0x5d, 0x5d, 0xa0, 0x5d, 0x91, 0xc9, 0xbf, - 0x59, 0x42, 0x42, 0x5a, 0x5b, 0x41, 0x40, 0x5b, 0x04, 0x71, 0x5c, 0xa0, - 0x5e, 0x5c, 0xa2, 0x5c, 0x5d, 0xa1, 0x5a, 0xc7, 0x91, 0x40, 0x5a, 0x5c, - 0x3e, 0x3f, 0x5e, 0x5c, 0x00, 0x02, 0x00, 0x58, 0x00, 0x00, 0x04, 0x39, - 0x05, 0x02, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x36, 0x40, 0x18, 0x0f, 0x07, - 0x07, 0x06, 0x0a, 0x0a, 0x0b, 0x0c, 0x01, 0x01, 0x03, 0x0b, 0x0b, 0x10, - 0x11, 0x0d, 0x0c, 0x0b, 0x09, 0x01, 0x01, 0x06, 0x04, 0x02, 0x00, 0x2f, - 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x2f, 0x33, 0x11, 0x12, 0x01, 0x39, - 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, - 0x31, 0x30, 0x01, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x15, 0x21, - 0x11, 0x23, 0x01, 0x35, 0x21, 0x15, 0x01, 0xdb, 0xfe, 0x7d, 0x01, 0x83, - 0xdb, 0x01, 0x83, 0xfe, 0x7d, 0xdb, 0xfe, 0x7d, 0x03, 0xe1, 0x02, 0xa2, - 0xdb, 0x01, 0x85, 0xfe, 0x7b, 0xdb, 0xfe, 0x7f, 0xfe, 0xdf, 0xdb, 0xdb, - 0x00, 0x01, 0x00, 0x2f, 0x02, 0x4a, 0x02, 0xbe, 0x05, 0xcb, 0x00, 0x16, - 0x00, 0x28, 0x40, 0x12, 0x15, 0x0c, 0x01, 0x06, 0x00, 0x11, 0x01, 0x11, - 0x17, 0x18, 0x09, 0x0e, 0x1f, 0x02, 0x15, 0x15, 0x01, 0x20, 0x00, 0x3f, - 0x33, 0x12, 0x39, 0x3f, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, - 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x01, 0x21, 0x35, 0x37, 0x3e, 0x01, - 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, - 0x14, 0x06, 0x0f, 0x01, 0x21, 0x02, 0xbe, 0xfd, 0x79, 0xe0, 0x66, 0x39, - 0x30, 0x28, 0x51, 0x63, 0x7b, 0x93, 0xbd, 0x89, 0x9e, 0x5e, 0x81, 0x69, - 0x01, 0x60, 0x02, 0x4a, 0xa8, 0xdb, 0x64, 0x59, 0x32, 0x26, 0x28, 0x58, - 0x98, 0x81, 0x85, 0x75, 0x55, 0x96, 0x75, 0x5f, 0x00, 0x01, 0x00, 0x3b, - 0x02, 0x39, 0x02, 0xb6, 0x05, 0xc9, 0x00, 0x25, 0x00, 0x3e, 0x40, 0x1d, - 0x14, 0x0b, 0x02, 0x19, 0x19, 0x00, 0x00, 0x20, 0x06, 0x20, 0x0b, 0x10, - 0x06, 0x0b, 0x06, 0x26, 0x27, 0x03, 0x14, 0x14, 0x15, 0x15, 0x09, 0x1c, - 0x23, 0x1f, 0x0e, 0x09, 0x21, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, - 0x2f, 0x33, 0x12, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x31, 0x30, - 0x01, 0x14, 0x07, 0x15, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, - 0x35, 0x16, 0x33, 0x32, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x35, 0x33, 0x32, - 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x3e, 0x01, 0x33, - 0x32, 0x16, 0x02, 0x9a, 0xaa, 0x5e, 0x68, 0xb0, 0xba, 0x8f, 0x82, 0x94, - 0x7b, 0x8f, 0x58, 0x4e, 0x70, 0x5c, 0x53, 0x51, 0x32, 0x33, 0x2f, 0x54, - 0x39, 0x65, 0x3e, 0x97, 0x67, 0x7f, 0xa2, 0x04, 0xe1, 0x8f, 0x37, 0x0d, - 0x14, 0x6e, 0x4f, 0x79, 0x8b, 0x46, 0xbe, 0x5a, 0x6b, 0x35, 0x35, 0xa0, - 0x34, 0x39, 0x26, 0x32, 0x26, 0x28, 0x8d, 0x2f, 0x3e, 0x80, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x4c, 0x04, 0xd9, 0x03, 0x8d, 0x06, 0x21, 0x00, 0x08, - 0x00, 0x1c, 0x40, 0x0b, 0x03, 0x04, 0x40, 0x08, 0x00, 0x00, 0x09, 0x0a, - 0x04, 0x80, 0x00, 0x00, 0x2f, 0x1a, 0xcd, 0x11, 0x12, 0x01, 0x39, 0x11, - 0x33, 0x1a, 0xc9, 0x32, 0x31, 0x30, 0x01, 0x35, 0x36, 0x37, 0x21, 0x15, - 0x0e, 0x01, 0x07, 0x01, 0x4c, 0xac, 0x3f, 0x01, 0x56, 0x34, 0xfb, 0x47, - 0x04, 0xd9, 0x1b, 0xc8, 0x65, 0x15, 0x34, 0xcd, 0x32, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0xa0, 0xfe, 0x14, 0x04, 0xa8, 0x04, 0x5e, 0x00, 0x18, - 0x00, 0x3f, 0x40, 0x1f, 0x0b, 0x06, 0x06, 0x09, 0x09, 0x1a, 0x12, 0x16, - 0x00, 0x15, 0x15, 0x16, 0x16, 0x19, 0x07, 0x17, 0x0f, 0x16, 0x1b, 0x12, - 0x0c, 0x0f, 0x03, 0x0f, 0x03, 0x47, 0x59, 0x0f, 0x16, 0x0a, 0x15, 0x00, - 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x18, 0x3f, 0x3f, 0x33, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x12, 0x39, 0x31, 0x30, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, - 0x11, 0x21, 0x11, 0x23, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, - 0x1f, 0x01, 0x11, 0x21, 0x11, 0x21, 0x01, 0xd1, 0x58, 0x5e, 0x7e, 0x72, - 0x01, 0x31, 0xe7, 0x2b, 0x0f, 0x2a, 0x78, 0x58, 0x3e, 0x68, 0x20, 0x05, - 0x05, 0xfe, 0xcf, 0x01, 0x31, 0x01, 0xd1, 0x79, 0x79, 0xad, 0xc4, 0x02, - 0x0e, 0xfb, 0xa2, 0x96, 0x55, 0x55, 0x2e, 0x2c, 0x55, 0x9d, 0xfe, 0xc0, - 0x06, 0x4a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x71, 0xfe, 0xfc, 0x04, 0x8f, - 0x06, 0x14, 0x00, 0x0f, 0x00, 0x2f, 0x40, 0x15, 0x0b, 0x10, 0x04, 0x05, - 0x01, 0x00, 0x01, 0x01, 0x10, 0x11, 0x08, 0x08, 0x01, 0x0e, 0x0e, 0x03, - 0x4d, 0x59, 0x0e, 0x05, 0x01, 0x00, 0x2f, 0x33, 0x2f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x18, 0x2f, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x10, 0xc4, - 0x32, 0x11, 0x39, 0x31, 0x30, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x11, - 0x06, 0x23, 0x22, 0x26, 0x35, 0x10, 0x36, 0x33, 0x21, 0x04, 0x8f, 0xa1, - 0xa6, 0xa2, 0x3e, 0x54, 0xd8, 0xcb, 0xda, 0xe8, 0x02, 0x5c, 0xfe, 0xfc, - 0x06, 0x50, 0xf9, 0xb0, 0x03, 0x33, 0x12, 0xfa, 0xfb, 0x01, 0x04, 0xfe, - 0x00, 0x01, 0x00, 0x75, 0x02, 0x29, 0x01, 0xd3, 0x03, 0x7d, 0x00, 0x0b, - 0x00, 0x15, 0x40, 0x09, 0x06, 0x00, 0x00, 0x0c, 0x03, 0x09, 0x54, 0x59, - 0x03, 0x00, 0x2f, 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, - 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x75, - 0x5a, 0x56, 0x53, 0x5b, 0x5d, 0x51, 0x54, 0x5c, 0x02, 0xd3, 0x54, 0x56, - 0x58, 0x52, 0x51, 0x59, 0x58, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, - 0xfe, 0x14, 0x01, 0xa2, 0x00, 0x00, 0x00, 0x12, 0x00, 0x34, 0x40, 0x17, - 0x10, 0x0d, 0x0d, 0x05, 0x05, 0x00, 0x0b, 0x0b, 0x13, 0x14, 0x10, 0x10, - 0x0d, 0x14, 0x0d, 0x13, 0x09, 0x0e, 0x06, 0x09, 0x09, 0x03, 0x1b, 0x00, - 0x3f, 0x33, 0x11, 0x33, 0x2f, 0x11, 0x12, 0x39, 0x11, 0x12, 0x39, 0x7c, - 0x2f, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x12, 0x39, 0x11, 0x33, - 0x31, 0x30, 0x05, 0x14, 0x06, 0x23, 0x22, 0x27, 0x35, 0x1e, 0x01, 0x33, - 0x32, 0x35, 0x34, 0x27, 0x37, 0x33, 0x07, 0x1e, 0x01, 0x01, 0xa2, 0x97, - 0x9e, 0x4e, 0x44, 0x1b, 0x5b, 0x19, 0x48, 0xa6, 0x4e, 0xc1, 0x1b, 0x4a, - 0x58, 0xfa, 0x80, 0x72, 0x15, 0xa8, 0x07, 0x0e, 0x3e, 0x53, 0x19, 0x9a, - 0x3d, 0x18, 0x65, 0x00, 0x00, 0x01, 0x00, 0x5c, 0x02, 0x4a, 0x02, 0x48, - 0x05, 0xb6, 0x00, 0x0a, 0x00, 0x2a, 0x40, 0x13, 0x04, 0x09, 0x00, 0x00, - 0x08, 0x01, 0x01, 0x0b, 0x0c, 0x08, 0x07, 0x07, 0x01, 0x04, 0x04, 0x09, - 0x1e, 0x01, 0x20, 0x00, 0x3f, 0x3f, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, - 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x12, 0x39, 0x39, 0x31, 0x30, - 0x01, 0x23, 0x11, 0x3f, 0x01, 0x06, 0x0f, 0x01, 0x27, 0x25, 0x33, 0x02, - 0x48, 0xee, 0x03, 0x05, 0x1b, 0x30, 0x4e, 0x6d, 0x01, 0x2d, 0xbf, 0x02, - 0x4a, 0x01, 0xbe, 0x70, 0x5f, 0x24, 0x2a, 0x3d, 0x7f, 0xeb, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x39, 0x02, 0xf0, 0x02, 0xe1, 0x05, 0xc7, 0x00, 0x0b, - 0x00, 0x17, 0x00, 0x1f, 0x40, 0x0d, 0x0c, 0x06, 0x12, 0x00, 0x06, 0x00, - 0x18, 0x19, 0x0f, 0x03, 0x15, 0x09, 0x1f, 0x00, 0x3f, 0x33, 0xc4, 0x32, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, - 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x05, - 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x02, - 0xe1, 0xb7, 0x9f, 0x99, 0xb9, 0xb3, 0xa3, 0x98, 0xba, 0xfe, 0x23, 0x41, - 0x48, 0x48, 0x3f, 0x3f, 0x48, 0x48, 0x41, 0x04, 0x5c, 0xab, 0xc1, 0xc5, - 0xa7, 0xa9, 0xc2, 0xc5, 0xa6, 0x64, 0x65, 0x65, 0x64, 0x64, 0x63, 0x63, - 0x00, 0x02, 0x00, 0x52, 0x00, 0x5e, 0x04, 0x9a, 0x04, 0x04, 0x00, 0x06, - 0x00, 0x0d, 0x00, 0x5a, 0x40, 0x2a, 0x0b, 0x09, 0x09, 0x0a, 0x07, 0x08, - 0x04, 0x02, 0x02, 0x03, 0x00, 0x05, 0x01, 0x08, 0x0c, 0x08, 0x08, 0x0e, - 0x0d, 0x06, 0x06, 0x03, 0x07, 0x00, 0x00, 0x0a, 0x03, 0x03, 0x04, 0x09, - 0x02, 0x02, 0x08, 0x01, 0x01, 0x05, 0x0e, 0x0b, 0x04, 0x04, 0x0c, 0x05, - 0x00, 0x2f, 0x33, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x2f, 0x33, 0x33, - 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x10, 0xd6, 0x32, 0xc1, 0x32, 0x33, - 0x11, 0x33, 0x10, 0xc1, 0x32, 0x33, 0x11, 0x33, 0x31, 0x30, 0x09, 0x01, - 0x27, 0x09, 0x01, 0x37, 0x01, 0x05, 0x01, 0x27, 0x09, 0x01, 0x37, 0x01, - 0x04, 0x9a, 0xfe, 0x8d, 0xdb, 0x01, 0x16, 0xfe, 0xea, 0xdb, 0x01, 0x73, - 0xfe, 0x06, 0xfe, 0x8d, 0xdb, 0x01, 0x16, 0xfe, 0xea, 0xdb, 0x01, 0x73, - 0x02, 0x23, 0xfe, 0x3b, 0x77, 0x01, 0x5c, 0x01, 0x5c, 0x77, 0xfe, 0x39, - 0x1a, 0xfe, 0x3b, 0x77, 0x01, 0x5c, 0x01, 0x5c, 0x77, 0xfe, 0x39, 0x00, - 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x06, 0x92, 0x05, 0xb6, 0x00, 0x0a, - 0x00, 0x12, 0x00, 0x16, 0x00, 0x21, 0x00, 0x00, 0x25, 0x23, 0x15, 0x23, - 0x35, 0x21, 0x35, 0x01, 0x33, 0x11, 0x33, 0x21, 0x35, 0x34, 0x37, 0x0e, - 0x01, 0x0f, 0x01, 0x13, 0x01, 0x23, 0x09, 0x01, 0x23, 0x11, 0x3f, 0x01, - 0x06, 0x0f, 0x01, 0x27, 0x25, 0x33, 0x06, 0x92, 0x7d, 0xee, 0xfe, 0x81, - 0x01, 0x81, 0xec, 0x7d, 0xfe, 0x95, 0x06, 0x09, 0x35, 0x0f, 0x7f, 0xf9, - 0xfc, 0xd5, 0xef, 0x03, 0x2b, 0xfd, 0xaf, 0xee, 0x03, 0x05, 0x1b, 0x30, - 0x4e, 0x6d, 0x01, 0x2d, 0xbf, 0x98, 0x97, 0x97, 0x9a, 0x02, 0x41, 0xfd, - 0xcd, 0xa4, 0x56, 0x62, 0x1a, 0x6c, 0x17, 0xbf, 0x04, 0x76, 0xfa, 0x4a, - 0x05, 0xb6, 0xfc, 0x94, 0x01, 0xbe, 0x70, 0x5f, 0x24, 0x2a, 0x3d, 0x7f, - 0xeb, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x2e, 0x00, 0x00, 0x06, 0xb4, - 0x05, 0xb6, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x25, 0x00, 0x00, 0x09, 0x01, - 0x23, 0x09, 0x01, 0x23, 0x11, 0x3f, 0x01, 0x06, 0x0f, 0x01, 0x27, 0x25, - 0x33, 0x01, 0x21, 0x35, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x23, 0x22, - 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x21, - 0x05, 0x5a, 0xfc, 0xd5, 0xef, 0x03, 0x2b, 0xfd, 0xaf, 0xee, 0x03, 0x05, - 0x1b, 0x30, 0x4e, 0x6d, 0x01, 0x2d, 0xbf, 0x04, 0x9a, 0xfd, 0x79, 0xe0, - 0x66, 0x39, 0x30, 0x28, 0x51, 0x63, 0x7b, 0x93, 0xbd, 0x89, 0x9e, 0x5e, - 0x81, 0x69, 0x01, 0x60, 0x05, 0xb6, 0xfa, 0x4a, 0x05, 0xb6, 0xfc, 0x94, - 0x01, 0xbe, 0x70, 0x5f, 0x24, 0x2a, 0x3d, 0x7f, 0xeb, 0xfa, 0x4b, 0xa8, - 0xdb, 0x64, 0x59, 0x32, 0x26, 0x28, 0x58, 0x98, 0x81, 0x85, 0x75, 0x55, - 0x96, 0x75, 0x5f, 0x00, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x00, 0x06, 0xb0, - 0x05, 0xc9, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x16, 0x00, 0x3c, 0x00, 0x00, - 0x25, 0x23, 0x15, 0x23, 0x35, 0x21, 0x35, 0x01, 0x33, 0x11, 0x33, 0x21, - 0x35, 0x34, 0x37, 0x0e, 0x01, 0x0f, 0x01, 0x09, 0x01, 0x23, 0x01, 0x05, - 0x14, 0x07, 0x15, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x35, - 0x16, 0x33, 0x32, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x36, - 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, - 0x16, 0x06, 0xb0, 0x7d, 0xee, 0xfe, 0x81, 0x01, 0x81, 0xec, 0x7d, 0xfe, - 0x95, 0x06, 0x09, 0x35, 0x0f, 0x7f, 0x01, 0x22, 0xfc, 0xd5, 0xef, 0x03, - 0x2b, 0xfe, 0x07, 0xaa, 0x5e, 0x68, 0xb0, 0xba, 0x8f, 0x82, 0x94, 0x7b, - 0x8f, 0x58, 0x4e, 0x70, 0x5c, 0x53, 0x51, 0x32, 0x33, 0x2f, 0x54, 0x39, - 0x65, 0x3e, 0x97, 0x67, 0x7f, 0xa2, 0x98, 0x97, 0x97, 0x9a, 0x02, 0x41, - 0xfd, 0xcd, 0xa4, 0x56, 0x62, 0x1a, 0x6c, 0x17, 0xbf, 0x04, 0x76, 0xfa, - 0x4a, 0x05, 0xb6, 0xd5, 0x8f, 0x37, 0x0d, 0x14, 0x6e, 0x4f, 0x79, 0x8b, - 0x46, 0xbe, 0x5a, 0x6b, 0x35, 0x35, 0xa0, 0x34, 0x39, 0x26, 0x32, 0x26, - 0x28, 0x8d, 0x2f, 0x3e, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3d, - 0xfe, 0x79, 0x03, 0xd7, 0x04, 0x5e, 0x00, 0x1b, 0x00, 0x27, 0x00, 0x46, - 0x40, 0x24, 0x22, 0x1c, 0x1c, 0x1b, 0x00, 0x00, 0x07, 0x07, 0x14, 0x14, - 0x0e, 0x28, 0x0e, 0x29, 0x00, 0x1b, 0x10, 0x1b, 0x02, 0x09, 0x03, 0x1b, - 0x1b, 0x25, 0x25, 0x1f, 0x54, 0x59, 0x25, 0x0f, 0x11, 0x0a, 0x4f, 0x59, - 0x11, 0x23, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x00, 0x33, - 0x18, 0x2f, 0x5f, 0x5e, 0x5d, 0x11, 0x01, 0x33, 0x11, 0x12, 0x39, 0x11, - 0x33, 0x11, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x15, - 0x14, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, - 0x17, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, - 0x3d, 0x01, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, - 0x32, 0x16, 0x02, 0xc9, 0x59, 0x6c, 0x6d, 0x39, 0x57, 0x59, 0x4f, 0xb4, - 0x60, 0x66, 0x62, 0xf7, 0x6a, 0xdc, 0xfb, 0x61, 0x8f, 0x5f, 0x35, 0x01, - 0x28, 0x5a, 0x56, 0x53, 0x5b, 0x5d, 0x51, 0x54, 0x5c, 0x02, 0x5e, 0x4a, - 0x62, 0x8e, 0x4d, 0x4e, 0x58, 0x3f, 0x39, 0x4a, 0x3a, 0x2a, 0xdd, 0x38, - 0x45, 0xc1, 0xa9, 0x6c, 0x9e, 0x69, 0x46, 0x4a, 0x3d, 0x3b, 0x01, 0x56, - 0x54, 0x56, 0x58, 0x52, 0x51, 0x59, 0x58, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x85, 0x07, 0x73, 0x12, 0x26, 0x00, 0x24, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x43, 0x00, 0x06, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x02, - 0x16, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x85, 0x07, 0x73, 0x12, 0x26, 0x00, 0x24, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x76, 0x00, 0xd1, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x02, - 0x16, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x85, 0x07, 0x73, 0x00, 0x0d, 0x00, 0x15, 0x00, 0x1b, - 0x00, 0x00, 0x01, 0x26, 0x27, 0x06, 0x07, 0x23, 0x35, 0x36, 0x37, 0x21, - 0x1e, 0x01, 0x17, 0x15, 0x0b, 0x01, 0x21, 0x03, 0x21, 0x01, 0x21, 0x09, - 0x01, 0x02, 0x26, 0x27, 0x06, 0x03, 0x03, 0xaa, 0x9d, 0x4d, 0x4e, 0x97, - 0xcb, 0xbd, 0x43, 0x01, 0x65, 0x1f, 0x99, 0x48, 0x3e, 0x6a, 0xfd, 0xeb, - 0x6a, 0xfe, 0xb2, 0x02, 0x04, 0x01, 0x7b, 0x02, 0x06, 0xfd, 0xfe, 0x93, - 0x25, 0x08, 0x21, 0x9c, 0x06, 0x2b, 0x5d, 0x53, 0x51, 0x5f, 0x1b, 0xbd, - 0x70, 0x34, 0xb3, 0x46, 0x1b, 0xf9, 0xd5, 0x01, 0x5c, 0xfe, 0xa4, 0x05, - 0xbc, 0xfa, 0x44, 0x02, 0x60, 0x01, 0xd9, 0x7c, 0x24, 0x80, 0xfe, 0x07, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05, 0x85, 0x07, 0x60, 0x00, 0x17, - 0x00, 0x1f, 0x00, 0x25, 0x00, 0x00, 0x01, 0x22, 0x06, 0x07, 0x23, 0x3e, - 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, - 0x23, 0x22, 0x2e, 0x02, 0x01, 0x03, 0x21, 0x03, 0x21, 0x01, 0x21, 0x09, - 0x01, 0x02, 0x26, 0x27, 0x06, 0x03, 0x02, 0x1f, 0x1f, 0x39, 0x0d, 0x95, - 0x0b, 0x8f, 0x76, 0x29, 0x4f, 0x4d, 0x4a, 0x24, 0x1f, 0x39, 0x0d, 0x95, - 0x0b, 0x91, 0x74, 0x29, 0x4f, 0x4d, 0x4a, 0x01, 0xf4, 0x6a, 0xfd, 0xeb, - 0x6a, 0xfe, 0xb2, 0x02, 0x04, 0x01, 0x7b, 0x02, 0x06, 0xfd, 0xfe, 0x93, - 0x25, 0x08, 0x21, 0x9c, 0x06, 0x94, 0x35, 0x36, 0x91, 0xa4, 0x21, 0x27, - 0x20, 0x34, 0x36, 0x91, 0xa4, 0x21, 0x27, 0x21, 0xf9, 0x6c, 0x01, 0x5c, - 0xfe, 0xa4, 0x05, 0xbc, 0xfa, 0x44, 0x02, 0x60, 0x01, 0xd9, 0x7c, 0x24, - 0x80, 0xfe, 0x07, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x85, - 0x07, 0x56, 0x12, 0x26, 0x00, 0x24, 0x00, 0x00, 0x11, 0x07, 0x00, 0x6a, - 0x00, 0x56, 0x01, 0x52, 0x00, 0x0a, 0xb4, 0x03, 0x02, 0x23, 0x05, 0x26, - 0x00, 0x2b, 0x35, 0x35, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x05, 0x85, - 0x07, 0x0a, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x1f, 0x00, 0x25, 0x00, 0x00, - 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, - 0x07, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, - 0x01, 0x03, 0x21, 0x03, 0x21, 0x01, 0x21, 0x09, 0x01, 0x02, 0x26, 0x27, - 0x06, 0x03, 0x03, 0xbf, 0x8e, 0x70, 0x70, 0x88, 0x87, 0x71, 0x6e, 0x90, - 0x9e, 0x36, 0x2a, 0x2a, 0x36, 0x30, 0x30, 0x2a, 0x36, 0x01, 0x16, 0x6a, - 0xfd, 0xeb, 0x6a, 0xfe, 0xb2, 0x02, 0x04, 0x01, 0x7b, 0x02, 0x06, 0xfd, - 0xfe, 0x93, 0x25, 0x08, 0x21, 0x9c, 0x06, 0x1f, 0x6c, 0x84, 0x80, 0x6e, - 0x6c, 0x81, 0x84, 0x69, 0x2d, 0x33, 0x33, 0x2d, 0x2d, 0x34, 0x34, 0xfa, - 0x10, 0x01, 0x5c, 0xfe, 0xa4, 0x05, 0xbc, 0xfa, 0x44, 0x02, 0x60, 0x01, - 0xd9, 0x7c, 0x24, 0x80, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x25, 0x05, 0xb6, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x6f, - 0x40, 0x3c, 0x06, 0x13, 0x03, 0x10, 0x13, 0x03, 0x11, 0x04, 0x11, 0x01, - 0x0a, 0x0e, 0x0e, 0x01, 0x01, 0x05, 0x0c, 0x08, 0x00, 0x00, 0x15, 0x04, - 0x05, 0x05, 0x14, 0x10, 0x03, 0x4c, 0x59, 0x0a, 0x0d, 0x4c, 0x59, 0x0c, - 0x0a, 0x01, 0x0d, 0x03, 0x10, 0x0a, 0x10, 0x0a, 0x01, 0x06, 0x13, 0x09, - 0x06, 0x09, 0x4c, 0x59, 0x06, 0x03, 0x04, 0x12, 0x01, 0x0e, 0x4c, 0x59, - 0x01, 0x12, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x3f, 0x2b, 0x11, 0x00, - 0x33, 0x11, 0x12, 0x39, 0x39, 0x18, 0x2f, 0x2f, 0x5f, 0x5e, 0x5d, 0x2b, - 0x2b, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x33, 0x12, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, 0x11, - 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x21, 0x03, 0x21, 0x01, 0x21, 0x15, - 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x23, 0x07, - 0x25, 0xfc, 0x97, 0xfe, 0x15, 0x96, 0xfe, 0xc5, 0x02, 0x8f, 0x04, 0x96, - 0xfd, 0xcd, 0x02, 0x0e, 0xfd, 0xf2, 0x02, 0x33, 0xfb, 0x1d, 0x01, 0x7a, - 0x7f, 0x01, 0x5c, 0xfe, 0xa4, 0x05, 0xb6, 0xfe, 0xfe, 0xbf, 0xfe, 0xfe, - 0x87, 0x01, 0x60, 0x02, 0x4e, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x77, - 0xfe, 0x14, 0x04, 0xd1, 0x05, 0xcb, 0x12, 0x26, 0x00, 0x26, 0x00, 0x00, - 0x10, 0x07, 0x00, 0x7a, 0x02, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, - 0x00, 0x00, 0x04, 0x02, 0x07, 0x73, 0x12, 0x26, 0x00, 0x28, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x43, 0xff, 0xb7, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x14, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, - 0x00, 0x00, 0x04, 0x02, 0x07, 0x73, 0x12, 0x26, 0x00, 0x28, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x76, 0x00, 0x5c, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x14, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0xaf, - 0x00, 0x00, 0x04, 0x14, 0x07, 0x73, 0x00, 0x0d, 0x00, 0x19, 0x00, 0x00, - 0x01, 0x26, 0x27, 0x06, 0x07, 0x23, 0x35, 0x36, 0x37, 0x21, 0x1e, 0x01, - 0x17, 0x15, 0x03, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, - 0x11, 0x21, 0x03, 0x49, 0x9d, 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, 0x01, - 0x65, 0x1f, 0x99, 0x48, 0x12, 0xfc, 0xb6, 0x03, 0x4a, 0xfd, 0xec, 0x01, - 0xef, 0xfe, 0x11, 0x02, 0x14, 0x06, 0x2b, 0x5d, 0x53, 0x51, 0x5f, 0x1b, - 0xbd, 0x70, 0x34, 0xb3, 0x46, 0x1b, 0xf9, 0xd5, 0x05, 0xb6, 0xfe, 0xfe, - 0xbf, 0xfe, 0xfe, 0x87, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0x02, - 0x07, 0x56, 0x12, 0x26, 0x00, 0x28, 0x00, 0x00, 0x11, 0x07, 0x00, 0x6a, - 0xff, 0xf9, 0x01, 0x52, 0x00, 0x0a, 0xb4, 0x02, 0x01, 0x21, 0x05, 0x26, - 0x00, 0x2b, 0x35, 0x35, 0xff, 0xff, 0xff, 0xc6, 0x00, 0x00, 0x02, 0x07, - 0x07, 0x73, 0x12, 0x26, 0x00, 0x2c, 0x00, 0x00, 0x11, 0x07, 0x00, 0x43, - 0xfe, 0x7a, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, 0x0c, 0x05, 0x26, 0x00, - 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0xa7, 0x00, 0x00, 0x02, 0xe8, - 0x07, 0x73, 0x12, 0x26, 0x00, 0x2c, 0x00, 0x00, 0x11, 0x07, 0x00, 0x76, - 0xff, 0x5b, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, 0x0c, 0x05, 0x26, 0x00, - 0x2b, 0x35, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa0, 0x00, 0x00, 0x03, 0x05, - 0x07, 0x73, 0x00, 0x0d, 0x00, 0x11, 0x00, 0x00, 0x01, 0x26, 0x27, 0x06, - 0x07, 0x23, 0x35, 0x36, 0x37, 0x21, 0x1e, 0x01, 0x17, 0x15, 0x01, 0x11, - 0x21, 0x11, 0x02, 0x3a, 0x9d, 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, 0x01, - 0x65, 0x1f, 0x99, 0x48, 0xfd, 0xb3, 0x01, 0x36, 0x06, 0x2b, 0x5d, 0x53, - 0x51, 0x5f, 0x1b, 0xbd, 0x70, 0x34, 0xb3, 0x46, 0x1b, 0xf9, 0xd5, 0x05, - 0xb6, 0xfa, 0x4a, 0x00, 0xff, 0xff, 0xff, 0xfd, 0x00, 0x00, 0x02, 0xab, - 0x07, 0x56, 0x12, 0x26, 0x00, 0x2c, 0x00, 0x00, 0x11, 0x07, 0x00, 0x6a, - 0xfe, 0xe6, 0x01, 0x52, 0x00, 0x0a, 0xb4, 0x02, 0x01, 0x19, 0x05, 0x26, - 0x00, 0x2b, 0x35, 0x35, 0x00, 0x02, 0x00, 0x2f, 0x00, 0x00, 0x05, 0x75, - 0x05, 0xb6, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x48, 0x40, 0x24, 0x0d, 0x06, - 0x06, 0x1a, 0x14, 0x12, 0x16, 0x16, 0x0c, 0x01, 0x0a, 0x0a, 0x19, 0x15, - 0x0c, 0x00, 0x0c, 0x4c, 0x59, 0x12, 0x00, 0x00, 0x0a, 0x02, 0x0a, 0x16, - 0x4c, 0x59, 0x0a, 0x12, 0x02, 0x11, 0x4c, 0x59, 0x02, 0x03, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x33, - 0x2b, 0x11, 0x00, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x33, 0x33, 0x11, - 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x33, 0x11, 0x21, - 0x20, 0x00, 0x11, 0x10, 0x00, 0x29, 0x01, 0x11, 0x23, 0x25, 0x34, 0x26, - 0x2b, 0x01, 0x11, 0x33, 0x15, 0x23, 0x11, 0x33, 0x20, 0x2f, 0x89, 0x01, - 0xcb, 0x01, 0x66, 0x01, 0x8c, 0xfe, 0x65, 0xfe, 0x7c, 0xfe, 0x62, 0x89, - 0x04, 0x04, 0xd0, 0xd2, 0xa3, 0xed, 0xed, 0x83, 0x01, 0xc2, 0x03, 0x52, - 0x02, 0x64, 0xfe, 0x86, 0xfe, 0xad, 0xfe, 0x97, 0xfe, 0x80, 0x02, 0x54, - 0x8d, 0xe8, 0xef, 0xfe, 0x9a, 0xfe, 0xfe, 0xac, 0x00, 0x02, 0x00, 0xb8, - 0x00, 0x00, 0x05, 0xc9, 0x07, 0x60, 0x00, 0x17, 0x00, 0x27, 0x00, 0x00, - 0x01, 0x22, 0x06, 0x07, 0x23, 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, - 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, 0x23, 0x22, 0x2e, 0x02, 0x01, 0x21, - 0x01, 0x23, 0x12, 0x15, 0x11, 0x21, 0x11, 0x21, 0x01, 0x33, 0x02, 0x35, - 0x11, 0x21, 0x02, 0x9c, 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x8f, 0x76, 0x29, - 0x4f, 0x4d, 0x4a, 0x24, 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x91, 0x74, 0x29, - 0x4f, 0x4d, 0x4a, 0x03, 0x09, 0xfe, 0x76, 0xfd, 0x84, 0x09, 0x13, 0xfe, - 0xeb, 0x01, 0x87, 0x02, 0x7b, 0x07, 0x0f, 0x01, 0x17, 0x06, 0x94, 0x35, - 0x36, 0x91, 0xa4, 0x21, 0x27, 0x20, 0x34, 0x36, 0x91, 0xa4, 0x21, 0x27, - 0x21, 0xf9, 0x6c, 0x04, 0x52, 0xfe, 0xdb, 0x7d, 0xfd, 0x50, 0x05, 0xb6, - 0xfb, 0xb9, 0x01, 0x1d, 0x76, 0x02, 0xb4, 0x00, 0xff, 0xff, 0x00, 0x77, - 0xff, 0xec, 0x05, 0xe7, 0x07, 0x73, 0x12, 0x26, 0x00, 0x32, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x43, 0x00, 0x75, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x02, - 0x1e, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0x77, - 0xff, 0xec, 0x05, 0xe7, 0x07, 0x73, 0x12, 0x26, 0x00, 0x32, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x76, 0x01, 0x46, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x02, - 0x1e, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x77, - 0xff, 0xec, 0x05, 0xe7, 0x07, 0x73, 0x00, 0x0d, 0x00, 0x19, 0x00, 0x23, - 0x00, 0x00, 0x01, 0x26, 0x27, 0x06, 0x07, 0x23, 0x35, 0x36, 0x37, 0x21, - 0x1e, 0x01, 0x17, 0x15, 0x01, 0x10, 0x00, 0x21, 0x20, 0x00, 0x11, 0x10, - 0x00, 0x21, 0x20, 0x00, 0x01, 0x14, 0x16, 0x33, 0x20, 0x11, 0x10, 0x21, - 0x22, 0x06, 0x04, 0x17, 0x9d, 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, 0x01, - 0x65, 0x1f, 0x99, 0x48, 0x01, 0x05, 0xfe, 0x98, 0xfe, 0xb0, 0xfe, 0xb0, - 0xfe, 0x98, 0x01, 0x69, 0x01, 0x51, 0x01, 0x51, 0x01, 0x65, 0xfb, 0xd5, - 0xba, 0xb9, 0x01, 0x73, 0xfe, 0x8f, 0xb9, 0xbc, 0x06, 0x2b, 0x5d, 0x53, - 0x51, 0x5f, 0x1b, 0xbd, 0x70, 0x34, 0xb3, 0x46, 0x1b, 0xfc, 0xb2, 0xfe, - 0x95, 0xfe, 0x7a, 0x01, 0x86, 0x01, 0x6d, 0x01, 0x6d, 0x01, 0x81, 0xfe, - 0x7c, 0xfe, 0x94, 0xf5, 0xf8, 0x01, 0xed, 0x01, 0xee, 0xf9, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x77, 0xff, 0xec, 0x05, 0xe7, 0x07, 0x60, 0x00, 0x17, - 0x00, 0x23, 0x00, 0x2d, 0x00, 0x00, 0x01, 0x22, 0x06, 0x07, 0x23, 0x3e, - 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, - 0x23, 0x22, 0x2e, 0x02, 0x01, 0x10, 0x00, 0x21, 0x20, 0x00, 0x11, 0x10, - 0x00, 0x21, 0x20, 0x00, 0x01, 0x14, 0x16, 0x33, 0x20, 0x11, 0x10, 0x21, - 0x22, 0x06, 0x02, 0x8c, 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x8f, 0x76, 0x29, - 0x4f, 0x4d, 0x4a, 0x24, 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x91, 0x74, 0x29, - 0x4f, 0x4d, 0x4a, 0x03, 0x37, 0xfe, 0x98, 0xfe, 0xb0, 0xfe, 0xb0, 0xfe, - 0x98, 0x01, 0x69, 0x01, 0x51, 0x01, 0x51, 0x01, 0x65, 0xfb, 0xd5, 0xba, - 0xb9, 0x01, 0x73, 0xfe, 0x8f, 0xb9, 0xbc, 0x06, 0x94, 0x35, 0x36, 0x91, - 0xa4, 0x21, 0x27, 0x20, 0x34, 0x36, 0x91, 0xa4, 0x21, 0x27, 0x21, 0xfc, - 0x49, 0xfe, 0x95, 0xfe, 0x7a, 0x01, 0x86, 0x01, 0x6d, 0x01, 0x6d, 0x01, - 0x81, 0xfe, 0x7c, 0xfe, 0x94, 0xf5, 0xf8, 0x01, 0xed, 0x01, 0xee, 0xf9, - 0xff, 0xff, 0x00, 0x77, 0xff, 0xec, 0x05, 0xe7, 0x07, 0x56, 0x12, 0x26, - 0x00, 0x32, 0x00, 0x00, 0x11, 0x07, 0x00, 0x6a, 0x00, 0xc3, 0x01, 0x52, - 0x00, 0x0a, 0xb4, 0x03, 0x02, 0x2b, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x35, - 0x00, 0x01, 0x00, 0x81, 0x01, 0x0c, 0x04, 0x10, 0x04, 0x9a, 0x00, 0x0b, - 0x00, 0x1d, 0x40, 0x0b, 0x06, 0x03, 0x00, 0x09, 0x09, 0x0c, 0x0d, 0x09, - 0x06, 0x03, 0x00, 0x00, 0x19, 0x2f, 0x32, 0x32, 0x32, 0x11, 0x12, 0x01, - 0x39, 0x11, 0x33, 0x33, 0x33, 0x31, 0x30, 0x09, 0x01, 0x37, 0x09, 0x01, - 0x17, 0x09, 0x01, 0x07, 0x09, 0x01, 0x27, 0x01, 0xac, 0xfe, 0xd5, 0x98, - 0x01, 0x2d, 0x01, 0x31, 0x99, 0xfe, 0xcf, 0x01, 0x2d, 0x95, 0xfe, 0xcf, - 0xfe, 0xd3, 0x96, 0x02, 0xd3, 0x01, 0x2d, 0x9a, 0xfe, 0xd5, 0x01, 0x2b, - 0x96, 0xfe, 0xcf, 0xfe, 0xd1, 0x98, 0x01, 0x2d, 0xfe, 0xd5, 0x98, 0x00, - 0x00, 0x03, 0x00, 0x77, 0xff, 0xa6, 0x05, 0xe7, 0x06, 0x04, 0x00, 0x13, - 0x00, 0x1b, 0x00, 0x22, 0x00, 0x39, 0x40, 0x1c, 0x17, 0x1f, 0x1c, 0x14, - 0x14, 0x0a, 0x1c, 0x00, 0x0a, 0x00, 0x23, 0x24, 0x16, 0x1e, 0x21, 0x19, - 0x0d, 0x19, 0x4c, 0x59, 0x0d, 0x04, 0x03, 0x21, 0x4c, 0x59, 0x03, 0x13, - 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, - 0x39, 0x31, 0x30, 0x01, 0x10, 0x00, 0x21, 0x22, 0x27, 0x07, 0x27, 0x37, - 0x26, 0x11, 0x10, 0x00, 0x21, 0x32, 0x17, 0x37, 0x17, 0x07, 0x16, 0x01, - 0x14, 0x17, 0x01, 0x26, 0x23, 0x22, 0x06, 0x05, 0x34, 0x27, 0x01, 0x16, - 0x33, 0x20, 0x05, 0xe7, 0xfe, 0x98, 0xfe, 0xb0, 0xc5, 0x8b, 0x5a, 0xa2, - 0x5a, 0xc6, 0x01, 0x69, 0x01, 0x51, 0xc6, 0x92, 0x54, 0xa0, 0x58, 0xc2, - 0xfb, 0xd5, 0x38, 0x01, 0xfa, 0x54, 0x69, 0xb9, 0xbc, 0x02, 0xe6, 0x33, - 0xfe, 0x0c, 0x4c, 0x68, 0x01, 0x73, 0x02, 0xdd, 0xfe, 0x95, 0xfe, 0x7a, - 0x41, 0x87, 0x6c, 0x88, 0xc2, 0x01, 0x83, 0x01, 0x6d, 0x01, 0x81, 0x46, - 0x7d, 0x68, 0x83, 0xc2, 0xfe, 0x86, 0xbf, 0x74, 0x02, 0xf4, 0x2d, 0xf9, - 0xf5, 0xb4, 0x75, 0xfd, 0x11, 0x27, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae, - 0xff, 0xec, 0x05, 0x5e, 0x07, 0x73, 0x12, 0x26, 0x00, 0x38, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x43, 0x00, 0x2b, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x1b, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae, - 0xff, 0xec, 0x05, 0x5e, 0x07, 0x73, 0x12, 0x26, 0x00, 0x38, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x76, 0x01, 0x0e, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x1b, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0xae, - 0xff, 0xec, 0x05, 0x5e, 0x07, 0x73, 0x00, 0x0d, 0x00, 0x20, 0x00, 0x00, - 0x01, 0x26, 0x27, 0x06, 0x07, 0x23, 0x35, 0x36, 0x37, 0x21, 0x1e, 0x01, - 0x17, 0x15, 0x17, 0x11, 0x14, 0x06, 0x04, 0x23, 0x20, 0x00, 0x35, 0x11, - 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x03, 0xee, 0x9d, - 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, 0x01, 0x65, 0x1f, 0x99, 0x48, 0xa5, - 0x91, 0xfe, 0xee, 0xbb, 0xfe, 0xe6, 0xfe, 0xc8, 0x01, 0x35, 0x88, 0x9d, - 0x98, 0x89, 0x06, 0x2b, 0x5d, 0x53, 0x51, 0x5f, 0x1b, 0xbd, 0x70, 0x34, - 0xb3, 0x46, 0x1b, 0x75, 0xfc, 0x4e, 0xa2, 0xf4, 0x82, 0x01, 0x21, 0xfb, - 0x03, 0xae, 0xfc, 0x81, 0xa9, 0x9e, 0x9f, 0xaa, 0x03, 0x7d, 0x00, 0x00, - 0xff, 0xff, 0x00, 0xae, 0xff, 0xec, 0x05, 0x5e, 0x07, 0x56, 0x12, 0x26, - 0x00, 0x38, 0x00, 0x00, 0x11, 0x07, 0x00, 0x6a, 0x00, 0x9a, 0x01, 0x52, - 0x00, 0x0a, 0xb4, 0x02, 0x01, 0x28, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x35, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x07, 0x73, 0x12, 0x26, - 0x00, 0x3c, 0x00, 0x00, 0x11, 0x07, 0x00, 0x76, 0x00, 0x81, 0x01, 0x52, - 0x00, 0x08, 0xb3, 0x01, 0x11, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, - 0x00, 0x02, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xaa, 0x05, 0xb6, 0x00, 0x0c, - 0x00, 0x15, 0x00, 0x36, 0x40, 0x1c, 0x11, 0x00, 0x00, 0x17, 0x0d, 0x09, - 0x05, 0x05, 0x06, 0x06, 0x16, 0x04, 0x0d, 0x4d, 0x59, 0x09, 0x15, 0x4d, - 0x59, 0x04, 0x09, 0x04, 0x09, 0x06, 0x07, 0x03, 0x06, 0x12, 0x00, 0x3f, - 0x3f, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x2b, 0x2b, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, - 0x04, 0x21, 0x23, 0x11, 0x21, 0x11, 0x21, 0x15, 0x33, 0x32, 0x04, 0x01, - 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x04, 0xaa, 0xfe, 0xe3, - 0xfe, 0xfa, 0x99, 0xfe, 0xca, 0x01, 0x36, 0xb2, 0xfe, 0x01, 0x0c, 0xfd, - 0x44, 0x64, 0x91, 0x8e, 0x7f, 0x88, 0x7c, 0x03, 0x02, 0xe5, 0xf8, 0xfe, - 0xdb, 0x05, 0xb6, 0xe5, 0xee, 0xfe, 0x3c, 0x69, 0x7a, 0x6b, 0x68, 0x00, - 0x00, 0x01, 0x00, 0xa0, 0xff, 0xec, 0x05, 0x68, 0x06, 0x1f, 0x00, 0x35, - 0x00, 0x54, 0x40, 0x2b, 0x14, 0x07, 0x21, 0x21, 0x27, 0x27, 0x00, 0x00, - 0x2e, 0x1a, 0x0e, 0x0e, 0x37, 0x2e, 0x2f, 0x2f, 0x36, 0x0e, 0x1a, 0x21, - 0x07, 0x00, 0x27, 0x27, 0x07, 0x1a, 0x03, 0x18, 0x2a, 0x33, 0x2a, 0x47, - 0x59, 0x33, 0x00, 0x2f, 0x15, 0x11, 0x18, 0x4a, 0x59, 0x11, 0x16, 0x00, - 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x17, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, 0x39, 0x11, 0x33, 0x33, - 0x31, 0x30, 0x01, 0x14, 0x0e, 0x04, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x02, - 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x35, 0x1e, 0x01, 0x33, 0x32, - 0x35, 0x34, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, - 0x01, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x21, 0x11, 0x34, - 0x24, 0x21, 0x32, 0x04, 0x04, 0xe1, 0x2a, 0x40, 0x4a, 0x40, 0x2a, 0x35, - 0x42, 0x92, 0x69, 0x33, 0xe9, 0xe3, 0x63, 0x90, 0x3c, 0x35, 0xa5, 0x40, - 0xa8, 0x20, 0x52, 0x4a, 0x7e, 0x62, 0x46, 0x46, 0x4d, 0x3e, 0x7f, 0x64, - 0x74, 0x82, 0xfe, 0xcf, 0x01, 0x25, 0x01, 0x02, 0xf4, 0x01, 0x26, 0x04, - 0xd9, 0x40, 0x61, 0x4c, 0x3a, 0x30, 0x2a, 0x16, 0x1b, 0x34, 0x28, 0x5b, - 0x62, 0x7a, 0x4e, 0xac, 0xae, 0x1d, 0x22, 0xf2, 0x24, 0x32, 0x7b, 0x29, - 0x33, 0x3c, 0x2a, 0x48, 0x77, 0x51, 0x40, 0x6a, 0x31, 0x37, 0x50, 0x2e, - 0x3c, 0x51, 0x69, 0x60, 0xfb, 0x98, 0x04, 0x73, 0xc9, 0xe3, 0xb1, 0x00, - 0xff, 0xff, 0x00, 0x56, 0xff, 0xec, 0x04, 0x3b, 0x06, 0x21, 0x12, 0x26, - 0x00, 0x44, 0x00, 0x00, 0x11, 0x06, 0x00, 0x43, 0xa3, 0x00, 0x00, 0x08, - 0xb3, 0x02, 0x2b, 0x11, 0x26, 0x00, 0x2b, 0x35, 0xff, 0xff, 0x00, 0x56, - 0xff, 0xec, 0x04, 0x3b, 0x06, 0x21, 0x12, 0x26, 0x00, 0x44, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x76, 0x6d, 0x00, 0x00, 0x08, 0xb3, 0x02, 0x2b, 0x11, - 0x26, 0x00, 0x2b, 0x35, 0x00, 0x03, 0x00, 0x56, 0xff, 0xec, 0x04, 0x3b, - 0x06, 0x20, 0x00, 0x0d, 0x00, 0x26, 0x00, 0x30, 0x00, 0x00, 0x01, 0x26, - 0x27, 0x06, 0x07, 0x23, 0x35, 0x36, 0x37, 0x21, 0x1e, 0x01, 0x17, 0x15, - 0x03, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x3f, - 0x01, 0x35, 0x34, 0x23, 0x22, 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, - 0x11, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x33, 0x32, 0x36, 0x35, 0x03, - 0x4b, 0x9d, 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, 0x01, 0x65, 0x1f, 0x99, - 0x48, 0xb0, 0x3b, 0x08, 0x4d, 0xa3, 0x83, 0xa1, 0xb9, 0xf9, 0xfb, 0xc2, - 0xae, 0x86, 0xb5, 0x65, 0xc1, 0xeb, 0xe1, 0xf0, 0xfe, 0xd1, 0x76, 0x85, - 0x82, 0x94, 0x6a, 0x7f, 0x04, 0xd8, 0x5d, 0x53, 0x51, 0x5f, 0x1b, 0xbd, - 0x70, 0x34, 0xb3, 0x46, 0x1b, 0xfb, 0x28, 0x98, 0x61, 0x4b, 0xb8, 0xaa, - 0xb2, 0xa9, 0x09, 0x06, 0x31, 0xaa, 0x51, 0xce, 0x65, 0xc4, 0xc8, 0xfd, - 0x17, 0x02, 0x06, 0x04, 0x04, 0x58, 0x5a, 0x81, 0x7a, 0x65, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x56, 0xff, 0xec, 0x04, 0x3b, 0x06, 0x0e, 0x00, 0x17, - 0x00, 0x30, 0x00, 0x3a, 0x00, 0x00, 0x01, 0x22, 0x06, 0x07, 0x23, 0x3e, - 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, - 0x23, 0x22, 0x2e, 0x02, 0x01, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, - 0x35, 0x34, 0x36, 0x3f, 0x01, 0x35, 0x34, 0x23, 0x22, 0x07, 0x27, 0x36, - 0x33, 0x32, 0x16, 0x15, 0x11, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x33, - 0x32, 0x36, 0x35, 0x01, 0xd3, 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x8f, 0x76, - 0x29, 0x4f, 0x4d, 0x4a, 0x24, 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x91, 0x74, - 0x29, 0x4f, 0x4d, 0x4a, 0x01, 0x6f, 0x3b, 0x08, 0x4d, 0xa3, 0x83, 0xa1, - 0xb9, 0xf9, 0xfb, 0xc2, 0xae, 0x86, 0xb5, 0x65, 0xc1, 0xeb, 0xe1, 0xf0, - 0xfe, 0xd1, 0x76, 0x85, 0x82, 0x94, 0x6a, 0x7f, 0x05, 0x42, 0x35, 0x36, - 0x91, 0xa4, 0x21, 0x27, 0x20, 0x34, 0x36, 0x91, 0xa4, 0x21, 0x27, 0x21, - 0xfa, 0xbe, 0x98, 0x61, 0x4b, 0xb8, 0xaa, 0xb2, 0xa9, 0x09, 0x06, 0x31, - 0xaa, 0x51, 0xce, 0x65, 0xc4, 0xc8, 0xfd, 0x17, 0x02, 0x06, 0x04, 0x04, - 0x58, 0x5a, 0x81, 0x7a, 0x65, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, - 0xff, 0xec, 0x04, 0x3b, 0x06, 0x04, 0x12, 0x26, 0x00, 0x44, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x6a, 0x06, 0x00, 0x00, 0x0a, 0xb4, 0x03, 0x02, 0x38, - 0x11, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x00, 0x00, 0x04, 0x00, 0x56, - 0xff, 0xec, 0x04, 0x3b, 0x06, 0xb2, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x30, - 0x00, 0x3a, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, - 0x36, 0x33, 0x32, 0x16, 0x07, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, - 0x16, 0x33, 0x32, 0x36, 0x13, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, - 0x35, 0x34, 0x36, 0x3f, 0x01, 0x35, 0x34, 0x23, 0x22, 0x07, 0x27, 0x36, - 0x33, 0x32, 0x16, 0x15, 0x11, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x33, - 0x32, 0x36, 0x35, 0x03, 0x73, 0x8e, 0x70, 0x70, 0x88, 0x87, 0x71, 0x6e, - 0x90, 0x9e, 0x36, 0x2a, 0x2a, 0x36, 0x30, 0x30, 0x2a, 0x36, 0x91, 0x3b, - 0x08, 0x4d, 0xa3, 0x83, 0xa1, 0xb9, 0xf9, 0xfb, 0xc2, 0xae, 0x86, 0xb5, - 0x65, 0xc1, 0xeb, 0xe1, 0xf0, 0xfe, 0xd1, 0x76, 0x85, 0x82, 0x94, 0x6a, - 0x7f, 0x05, 0xc7, 0x6c, 0x84, 0x80, 0x6e, 0x6c, 0x81, 0x84, 0x69, 0x2d, - 0x33, 0x33, 0x2d, 0x2d, 0x34, 0x34, 0xfa, 0x68, 0x98, 0x61, 0x4b, 0xb8, - 0xaa, 0xb2, 0xa9, 0x09, 0x06, 0x31, 0xaa, 0x51, 0xce, 0x65, 0xc4, 0xc8, - 0xfd, 0x17, 0x02, 0x06, 0x04, 0x04, 0x58, 0x5a, 0x81, 0x7a, 0x65, 0x00, - 0x00, 0x03, 0x00, 0x56, 0xff, 0xec, 0x06, 0xfe, 0x04, 0x75, 0x00, 0x28, - 0x00, 0x32, 0x00, 0x38, 0x00, 0x85, 0x40, 0x45, 0x35, 0x36, 0x03, 0x18, - 0x20, 0x20, 0x32, 0x14, 0x0d, 0x0d, 0x32, 0x32, 0x09, 0x36, 0x36, 0x26, - 0x1f, 0x1f, 0x3a, 0x2d, 0x09, 0x09, 0x39, 0x25, 0x20, 0x23, 0x35, 0x20, - 0x4a, 0x59, 0x35, 0x35, 0x06, 0x03, 0x18, 0x00, 0x1b, 0x1b, 0x33, 0x4a, - 0x59, 0x1b, 0x10, 0x0d, 0x29, 0x4b, 0x59, 0x0d, 0x0d, 0x16, 0x06, 0x16, - 0x11, 0x46, 0x59, 0x16, 0x10, 0x00, 0x23, 0x46, 0x59, 0x00, 0x06, 0x06, - 0x2f, 0x46, 0x59, 0x06, 0x16, 0x00, 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x2b, - 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x00, - 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x12, 0x39, 0x18, 0x2f, - 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x33, 0x11, 0x12, 0x39, 0x11, 0x33, 0x11, 0x39, 0x11, 0x33, - 0x12, 0x39, 0x39, 0x11, 0x39, 0x31, 0x30, 0x05, 0x22, 0x26, 0x27, 0x0e, - 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x35, 0x34, 0x26, - 0x23, 0x22, 0x07, 0x27, 0x36, 0x33, 0x32, 0x17, 0x3e, 0x01, 0x33, 0x32, - 0x00, 0x1d, 0x01, 0x21, 0x1e, 0x01, 0x33, 0x32, 0x37, 0x15, 0x0e, 0x01, - 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x33, 0x32, 0x36, 0x35, 0x01, 0x22, - 0x07, 0x21, 0x2e, 0x01, 0x05, 0x31, 0x89, 0xe1, 0x48, 0x62, 0xc5, 0x9e, - 0xa1, 0xc3, 0xf2, 0xf1, 0xbf, 0x59, 0x4d, 0x8c, 0xa5, 0x63, 0xbd, 0xe9, - 0xe3, 0x73, 0x42, 0xad, 0x78, 0xdd, 0x01, 0x00, 0xfd, 0x2d, 0x05, 0x90, - 0x82, 0xc4, 0xb8, 0x4f, 0xb8, 0xfd, 0x41, 0x71, 0x7c, 0x7c, 0x8c, 0x65, - 0x78, 0x02, 0x23, 0xd9, 0x11, 0x01, 0xae, 0x02, 0x6a, 0x14, 0x65, 0x69, - 0x75, 0x59, 0xbd, 0xa5, 0xb2, 0xa9, 0x09, 0x06, 0x54, 0x45, 0x42, 0x4d, - 0xca, 0x65, 0x83, 0x40, 0x41, 0xfe, 0xed, 0xe9, 0x94, 0x82, 0x92, 0x58, - 0xec, 0x27, 0x28, 0x02, 0x1a, 0x04, 0x04, 0x57, 0x5b, 0x81, 0x7a, 0x65, - 0x01, 0xf0, 0xec, 0x70, 0x7c, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x5c, - 0xfe, 0x14, 0x03, 0xdd, 0x04, 0x73, 0x12, 0x26, 0x00, 0x46, 0x00, 0x00, - 0x10, 0x07, 0x00, 0x7a, 0x01, 0x83, 0x00, 0x00, 0xff, 0xff, 0x00, 0x5c, - 0xff, 0xec, 0x04, 0x62, 0x06, 0x21, 0x12, 0x26, 0x00, 0x48, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x43, 0xa9, 0x00, 0x00, 0x08, 0xb3, 0x02, 0x24, 0x11, - 0x26, 0x00, 0x2b, 0x35, 0xff, 0xff, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x62, - 0x06, 0x21, 0x12, 0x26, 0x00, 0x48, 0x00, 0x00, 0x11, 0x06, 0x00, 0x76, - 0x73, 0x00, 0x00, 0x08, 0xb3, 0x02, 0x24, 0x11, 0x26, 0x00, 0x2b, 0x35, - 0x00, 0x03, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x62, 0x06, 0x21, 0x00, 0x0d, - 0x00, 0x14, 0x00, 0x29, 0x00, 0x00, 0x01, 0x26, 0x27, 0x06, 0x07, 0x23, - 0x35, 0x36, 0x37, 0x21, 0x1e, 0x01, 0x17, 0x15, 0x01, 0x22, 0x06, 0x07, - 0x21, 0x2e, 0x01, 0x03, 0x20, 0x00, 0x11, 0x10, 0x00, 0x33, 0x32, 0x00, - 0x1d, 0x01, 0x21, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x15, 0x0e, 0x01, - 0x03, 0x5c, 0x9d, 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, 0x01, 0x65, 0x1f, - 0x99, 0x48, 0xfe, 0x48, 0x61, 0x6e, 0x08, 0x01, 0xac, 0x02, 0x72, 0x36, - 0xfe, 0xf2, 0xfe, 0xd0, 0x01, 0x19, 0xf8, 0xed, 0x01, 0x08, 0xfd, 0x2f, - 0x05, 0x90, 0x82, 0x65, 0xb4, 0x62, 0x50, 0xb6, 0x04, 0xd9, 0x5d, 0x53, - 0x51, 0x5f, 0x1b, 0xbd, 0x70, 0x34, 0xb3, 0x46, 0x1b, 0xfe, 0xc1, 0x7b, - 0x71, 0x71, 0x7b, 0xfc, 0x52, 0x01, 0x2a, 0x01, 0x11, 0x01, 0x19, 0x01, - 0x33, 0xfe, 0xf2, 0xee, 0x94, 0x82, 0x92, 0x2a, 0x2e, 0xec, 0x28, 0x27, - 0xff, 0xff, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x62, 0x06, 0x04, 0x12, 0x26, - 0x00, 0x48, 0x00, 0x00, 0x11, 0x06, 0x00, 0x6a, 0x12, 0x00, 0x00, 0x0a, - 0xb4, 0x03, 0x02, 0x31, 0x11, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x00, - 0x00, 0x02, 0xff, 0x9b, 0x00, 0x00, 0x01, 0xdc, 0x06, 0x21, 0x00, 0x03, - 0x00, 0x0c, 0x00, 0x00, 0x29, 0x01, 0x11, 0x21, 0x27, 0x2e, 0x01, 0x27, - 0x35, 0x21, 0x16, 0x17, 0x15, 0x01, 0xd1, 0xfe, 0xcf, 0x01, 0x31, 0xbf, - 0x3f, 0xf4, 0x44, 0x01, 0x56, 0x3f, 0xac, 0x04, 0x5e, 0x7b, 0x2c, 0xc5, - 0x42, 0x15, 0x65, 0xc8, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x91, - 0x00, 0x00, 0x02, 0xd2, 0x06, 0x21, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x00, - 0x29, 0x01, 0x11, 0x21, 0x25, 0x35, 0x36, 0x37, 0x21, 0x15, 0x0e, 0x01, - 0x07, 0x01, 0xd1, 0xfe, 0xcf, 0x01, 0x31, 0xfe, 0xc0, 0xac, 0x3f, 0x01, - 0x56, 0x34, 0xfb, 0x47, 0x04, 0x5e, 0x7b, 0x1b, 0xc8, 0x65, 0x15, 0x34, - 0xcd, 0x32, 0x00, 0x00, 0x00, 0x02, 0xff, 0x86, 0x00, 0x00, 0x02, 0xeb, - 0x06, 0x21, 0x00, 0x0d, 0x00, 0x11, 0x00, 0x00, 0x01, 0x26, 0x27, 0x06, - 0x07, 0x23, 0x35, 0x36, 0x37, 0x21, 0x1e, 0x01, 0x17, 0x15, 0x01, 0x21, - 0x11, 0x21, 0x02, 0x20, 0x9d, 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, 0x01, - 0x65, 0x1f, 0x99, 0x48, 0xfe, 0xe6, 0xfe, 0xcf, 0x01, 0x31, 0x04, 0xd9, - 0x5d, 0x53, 0x51, 0x5f, 0x1b, 0xbd, 0x70, 0x34, 0xb3, 0x46, 0x1b, 0xfb, - 0x27, 0x04, 0x5e, 0x00, 0x00, 0x03, 0xff, 0xe3, 0x00, 0x00, 0x02, 0x91, - 0x06, 0x04, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x1b, 0x00, 0x00, 0x29, 0x01, - 0x11, 0x21, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x01, 0xd1, 0xfe, 0xcf, 0x01, 0x31, 0xfe, 0x12, 0x4b, 0x40, - 0x42, 0x4b, 0x4c, 0x41, 0x40, 0x4b, 0x01, 0x93, 0x51, 0x3c, 0x41, 0x4d, - 0x4e, 0x40, 0x3c, 0x51, 0x04, 0x5e, 0x01, 0x1f, 0x41, 0x46, 0x4a, 0x3d, - 0x3c, 0x49, 0x46, 0x3f, 0x46, 0x41, 0x48, 0x3f, 0x3d, 0x48, 0x41, 0x00, - 0x00, 0x02, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x98, 0x06, 0x23, 0x00, 0x1b, - 0x00, 0x27, 0x00, 0x76, 0x40, 0x3b, 0x00, 0x19, 0x02, 0x17, 0x17, 0x1c, - 0x05, 0x08, 0x03, 0x0b, 0x03, 0x02, 0x02, 0x11, 0x1c, 0x1c, 0x0b, 0x0b, - 0x29, 0x22, 0x11, 0x11, 0x28, 0x19, 0x00, 0x18, 0x02, 0x05, 0x08, 0x03, - 0x09, 0x09, 0x18, 0x18, 0x02, 0x16, 0x16, 0x1f, 0x14, 0x14, 0x1f, 0x46, - 0x59, 0x14, 0x14, 0x0e, 0x02, 0x0e, 0x25, 0x46, 0x59, 0x0e, 0x16, 0x03, - 0x02, 0x4b, 0x59, 0x03, 0x01, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, - 0x12, 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, 0x11, 0x12, 0x39, 0x39, - 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, - 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, - 0x31, 0x30, 0x01, 0x26, 0x27, 0x37, 0x16, 0x17, 0x37, 0x17, 0x07, 0x16, - 0x12, 0x15, 0x10, 0x00, 0x23, 0x22, 0x00, 0x35, 0x34, 0x00, 0x33, 0x32, - 0x17, 0x37, 0x26, 0x27, 0x07, 0x27, 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, - 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x01, 0xfe, 0x50, 0x48, 0x65, 0x90, - 0x72, 0xe1, 0x64, 0xaa, 0x9c, 0x94, 0xfe, 0xde, 0xff, 0xf5, 0xfe, 0xda, - 0x01, 0x04, 0xdd, 0xcd, 0x46, 0x08, 0x43, 0x7d, 0xe6, 0x64, 0x02, 0x12, - 0x7a, 0x6b, 0x79, 0x6f, 0x78, 0x70, 0x7b, 0x6a, 0x05, 0x17, 0x35, 0x27, - 0xb0, 0x41, 0x4c, 0x8b, 0x9a, 0x68, 0x8f, 0xfe, 0x95, 0xe8, 0xfe, 0xe8, - 0xfe, 0xc7, 0x01, 0x12, 0xeb, 0xe9, 0x01, 0x11, 0x62, 0x04, 0xa2, 0x77, - 0x8e, 0x9c, 0xfd, 0x68, 0x6c, 0x82, 0x89, 0x92, 0x8c, 0x8e, 0xa4, 0x00, - 0x00, 0x02, 0x00, 0xa0, 0x00, 0x00, 0x04, 0xa8, 0x06, 0x0e, 0x00, 0x17, - 0x00, 0x2c, 0x00, 0x00, 0x01, 0x22, 0x06, 0x07, 0x23, 0x3e, 0x01, 0x33, - 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, 0x23, 0x22, - 0x2e, 0x02, 0x01, 0x21, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, - 0x21, 0x11, 0x33, 0x17, 0x33, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x01, - 0xfc, 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x8f, 0x76, 0x29, 0x4f, 0x4d, 0x4a, - 0x24, 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x91, 0x74, 0x29, 0x4f, 0x4d, 0x4a, - 0x02, 0x88, 0xfe, 0xcf, 0x56, 0x5e, 0x80, 0x72, 0xfe, 0xcf, 0xe9, 0x29, - 0x11, 0x33, 0xb3, 0x72, 0xc3, 0xca, 0x05, 0x42, 0x35, 0x36, 0x91, 0xa4, - 0x21, 0x27, 0x20, 0x34, 0x36, 0x91, 0xa4, 0x21, 0x27, 0x21, 0xfa, 0xbe, - 0x02, 0x8d, 0x79, 0x79, 0xab, 0xc6, 0xfd, 0xf2, 0x04, 0x5e, 0x8f, 0x51, - 0x53, 0xd3, 0xc7, 0x00, 0xff, 0xff, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x98, - 0x06, 0x21, 0x12, 0x26, 0x00, 0x52, 0x00, 0x00, 0x11, 0x06, 0x00, 0x43, - 0xa1, 0x00, 0x00, 0x08, 0xb3, 0x02, 0x22, 0x11, 0x26, 0x00, 0x2b, 0x35, - 0xff, 0xff, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x98, 0x06, 0x21, 0x12, 0x26, - 0x00, 0x52, 0x00, 0x00, 0x11, 0x07, 0x00, 0x76, 0x00, 0x87, 0x00, 0x00, - 0x00, 0x08, 0xb3, 0x02, 0x22, 0x11, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x98, 0x06, 0x21, 0x00, 0x0d, - 0x00, 0x19, 0x00, 0x27, 0x00, 0x00, 0x01, 0x26, 0x27, 0x06, 0x07, 0x23, - 0x35, 0x36, 0x37, 0x21, 0x1e, 0x01, 0x17, 0x15, 0x01, 0x14, 0x16, 0x33, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x05, 0x10, 0x00, 0x21, - 0x22, 0x26, 0x02, 0x35, 0x10, 0x00, 0x21, 0x32, 0x16, 0x12, 0x03, 0x60, - 0x9d, 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, 0x01, 0x65, 0x1f, 0x99, 0x48, - 0xfd, 0x68, 0x6d, 0x7b, 0x7a, 0x6b, 0x6c, 0x7b, 0x7a, 0x6c, 0x03, 0x05, - 0xfe, 0xe0, 0xfe, 0xff, 0xa1, 0xf6, 0x84, 0x01, 0x1e, 0x01, 0x03, 0xa1, - 0xf6, 0x84, 0x04, 0xd9, 0x5d, 0x53, 0x51, 0x5f, 0x1b, 0xbd, 0x70, 0x34, - 0xb3, 0x46, 0x1b, 0xfd, 0x58, 0xa6, 0xaa, 0xa9, 0xa7, 0xa6, 0xa6, 0xa5, - 0xa7, 0xfe, 0xef, 0xfe, 0xcc, 0x8d, 0x01, 0x08, 0xb0, 0x01, 0x12, 0x01, - 0x30, 0x8c, 0xfe, 0xfa, 0x00, 0x03, 0x00, 0x5c, 0xff, 0xec, 0x04, 0x98, - 0x06, 0x0e, 0x00, 0x17, 0x00, 0x23, 0x00, 0x31, 0x00, 0x00, 0x01, 0x22, - 0x06, 0x07, 0x23, 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, - 0x37, 0x33, 0x0e, 0x01, 0x23, 0x22, 0x2e, 0x02, 0x03, 0x14, 0x16, 0x33, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x05, 0x10, 0x00, 0x21, - 0x22, 0x26, 0x02, 0x35, 0x10, 0x00, 0x21, 0x32, 0x16, 0x12, 0x01, 0xd5, - 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x8f, 0x76, 0x29, 0x4f, 0x4d, 0x4a, 0x24, - 0x1f, 0x39, 0x0d, 0x95, 0x0b, 0x91, 0x74, 0x29, 0x4f, 0x4d, 0x4a, 0x66, - 0x6d, 0x7b, 0x7a, 0x6b, 0x6c, 0x7b, 0x7a, 0x6c, 0x03, 0x05, 0xfe, 0xe0, - 0xfe, 0xff, 0xa1, 0xf6, 0x84, 0x01, 0x1e, 0x01, 0x03, 0xa1, 0xf6, 0x84, - 0x05, 0x42, 0x35, 0x36, 0x91, 0xa4, 0x21, 0x27, 0x20, 0x34, 0x36, 0x91, - 0xa4, 0x21, 0x27, 0x21, 0xfc, 0xef, 0xa6, 0xaa, 0xa9, 0xa7, 0xa6, 0xa6, - 0xa5, 0xa7, 0xfe, 0xef, 0xfe, 0xcc, 0x8d, 0x01, 0x08, 0xb0, 0x01, 0x12, - 0x01, 0x30, 0x8c, 0xfe, 0xfa, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x5c, - 0xff, 0xec, 0x04, 0x98, 0x06, 0x04, 0x12, 0x26, 0x00, 0x52, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x6a, 0x0c, 0x00, 0x00, 0x0a, 0xb4, 0x03, 0x02, 0x2f, - 0x11, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x58, - 0x00, 0xdd, 0x04, 0x39, 0x04, 0xc7, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x1b, - 0x00, 0x2a, 0x40, 0x12, 0x16, 0x0a, 0x0a, 0x10, 0x04, 0x04, 0x00, 0x03, - 0x03, 0x1d, 0x00, 0x1c, 0x19, 0x13, 0x0d, 0x07, 0x00, 0x01, 0x00, 0x2f, - 0x33, 0xc4, 0x32, 0xc4, 0x32, 0x11, 0x01, 0x33, 0x11, 0x33, 0x11, 0x12, - 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x35, 0x21, 0x15, - 0x05, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, - 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, - 0x58, 0x03, 0xe1, 0xfd, 0x83, 0x4a, 0x42, 0x42, 0x49, 0x4a, 0x41, 0x41, - 0x4b, 0x4a, 0x42, 0x43, 0x48, 0x4a, 0x41, 0x41, 0x4b, 0x02, 0x64, 0xdb, - 0xdb, 0xef, 0x4c, 0x4b, 0x4e, 0x49, 0x46, 0x52, 0x4e, 0x03, 0x04, 0x4b, - 0x4d, 0x51, 0x47, 0x46, 0x51, 0x4e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x5c, - 0xff, 0xb4, 0x04, 0x98, 0x04, 0x91, 0x00, 0x13, 0x00, 0x1b, 0x00, 0x23, - 0x00, 0x39, 0x40, 0x1c, 0x17, 0x1f, 0x1c, 0x14, 0x14, 0x0a, 0x1c, 0x00, - 0x0a, 0x00, 0x25, 0x24, 0x16, 0x1e, 0x21, 0x19, 0x0d, 0x19, 0x47, 0x59, - 0x0d, 0x10, 0x03, 0x21, 0x47, 0x59, 0x03, 0x16, 0x00, 0x3f, 0x2b, 0x00, - 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x11, 0x12, 0x01, 0x39, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, 0x31, 0x30, 0x01, - 0x10, 0x00, 0x21, 0x22, 0x27, 0x07, 0x27, 0x37, 0x26, 0x11, 0x10, 0x00, - 0x21, 0x32, 0x17, 0x37, 0x17, 0x07, 0x16, 0x01, 0x14, 0x17, 0x01, 0x26, - 0x23, 0x22, 0x06, 0x05, 0x34, 0x27, 0x01, 0x16, 0x33, 0x32, 0x36, 0x04, - 0x98, 0xfe, 0xe0, 0xfe, 0xff, 0x7e, 0x6c, 0x43, 0x9a, 0x44, 0x98, 0x01, - 0x1e, 0x01, 0x03, 0x84, 0x74, 0x37, 0x98, 0x3a, 0x8e, 0xfc, 0xfb, 0x13, - 0x01, 0x3d, 0x2b, 0x3f, 0x7a, 0x6c, 0x01, 0xcd, 0x0c, 0xfe, 0xcb, 0x26, - 0x36, 0x7a, 0x6b, 0x02, 0x31, 0xfe, 0xef, 0xfe, 0xcc, 0x2d, 0x65, 0x69, - 0x64, 0x9c, 0x01, 0x14, 0x01, 0x12, 0x01, 0x30, 0x34, 0x52, 0x6c, 0x54, - 0x9b, 0xfe, 0xfb, 0x5e, 0x48, 0x01, 0xdb, 0x17, 0xa5, 0xa7, 0x51, 0x3c, - 0xfe, 0x32, 0x0f, 0xa9, 0xff, 0xff, 0x00, 0x9a, 0xff, 0xec, 0x04, 0xa2, - 0x06, 0x21, 0x12, 0x26, 0x00, 0x58, 0x00, 0x00, 0x11, 0x06, 0x00, 0x43, - 0xa9, 0x00, 0x00, 0x08, 0xb3, 0x01, 0x1d, 0x11, 0x26, 0x00, 0x2b, 0x35, - 0xff, 0xff, 0x00, 0x9a, 0xff, 0xec, 0x04, 0xa2, 0x06, 0x21, 0x12, 0x26, - 0x00, 0x58, 0x00, 0x00, 0x11, 0x07, 0x00, 0x76, 0x00, 0xa6, 0x00, 0x00, - 0x00, 0x08, 0xb3, 0x01, 0x1d, 0x11, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x9a, 0xff, 0xec, 0x04, 0xa2, 0x06, 0x21, 0x00, 0x0d, - 0x00, 0x22, 0x00, 0x00, 0x01, 0x26, 0x27, 0x06, 0x07, 0x23, 0x35, 0x36, - 0x37, 0x21, 0x1e, 0x01, 0x17, 0x15, 0x03, 0x27, 0x23, 0x0e, 0x01, 0x23, - 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, - 0x11, 0x21, 0x11, 0x03, 0x85, 0x9d, 0x4d, 0x4e, 0x97, 0xcb, 0xbd, 0x43, - 0x01, 0x65, 0x1f, 0x99, 0x48, 0x98, 0x29, 0x10, 0x31, 0xb4, 0x73, 0xc5, - 0xc8, 0x01, 0x31, 0x56, 0x5e, 0x80, 0x72, 0x01, 0x31, 0x04, 0xd9, 0x5d, - 0x53, 0x51, 0x5f, 0x1b, 0xbd, 0x70, 0x34, 0xb3, 0x46, 0x1b, 0xfb, 0x27, - 0x8f, 0x4e, 0x55, 0xd3, 0xc6, 0x02, 0xd9, 0xfd, 0x73, 0x79, 0x79, 0xab, - 0xc6, 0x02, 0x0e, 0xfb, 0xa2, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x9a, - 0xff, 0xec, 0x04, 0xa2, 0x06, 0x04, 0x12, 0x26, 0x00, 0x58, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x6a, 0x2f, 0x00, 0x00, 0x0a, 0xb4, 0x02, 0x01, 0x2a, - 0x11, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xfe, 0x14, 0x04, 0x8d, 0x06, 0x21, 0x12, 0x26, 0x00, 0x5c, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x76, 0x3d, 0x00, 0x00, 0x08, 0xb3, 0x01, 0x1f, 0x11, - 0x26, 0x00, 0x2b, 0x35, 0x00, 0x02, 0x00, 0xa0, 0xfe, 0x14, 0x04, 0xb4, - 0x06, 0x14, 0x00, 0x15, 0x00, 0x21, 0x00, 0x44, 0x40, 0x22, 0x1f, 0x06, - 0x06, 0x23, 0x15, 0x0c, 0x10, 0x1a, 0x13, 0x0f, 0x0f, 0x10, 0x10, 0x22, - 0x11, 0x00, 0x10, 0x1b, 0x0c, 0x15, 0x09, 0x03, 0x09, 0x1d, 0x47, 0x59, - 0x09, 0x16, 0x03, 0x16, 0x47, 0x59, 0x03, 0x10, 0x00, 0x3f, 0x2b, 0x00, - 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x18, 0x3f, 0x3f, 0x11, - 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x33, 0x12, 0x39, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x3e, 0x01, 0x33, 0x32, 0x12, 0x11, 0x10, - 0x02, 0x23, 0x22, 0x27, 0x23, 0x1f, 0x01, 0x11, 0x21, 0x11, 0x21, 0x11, - 0x0f, 0x01, 0x17, 0x22, 0x06, 0x07, 0x15, 0x14, 0x16, 0x33, 0x32, 0x11, - 0x34, 0x26, 0x01, 0xd1, 0x32, 0xa2, 0x69, 0xc6, 0xe0, 0xdf, 0xc7, 0xd5, - 0x68, 0x0e, 0x07, 0x07, 0xfe, 0xcf, 0x01, 0x31, 0x07, 0x07, 0xe9, 0x71, - 0x68, 0x02, 0x6b, 0x74, 0xcd, 0x65, 0x03, 0xcd, 0x51, 0x55, 0xfe, 0xcb, - 0xfe, 0xf3, 0xfe, 0xef, 0xfe, 0xcc, 0x89, 0x3e, 0x5e, 0xfe, 0x3b, 0x08, - 0x00, 0xfe, 0x79, 0x78, 0x48, 0x4e, 0x8b, 0xa0, 0x21, 0xb4, 0x9c, 0x01, - 0x52, 0xa5, 0xa5, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0x14, 0x04, 0x8d, - 0x06, 0x04, 0x12, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x11, 0x06, 0x00, 0x6a, - 0xdc, 0x00, 0x00, 0x0a, 0xb4, 0x02, 0x01, 0x2c, 0x11, 0x26, 0x00, 0x2b, - 0x35, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x72, - 0x00, 0x01, 0x04, 0x66, 0x18, 0x00, 0x00, 0x0a, 0x02, 0x64, 0x00, 0x05, - 0x00, 0x24, 0xff, 0x71, 0x00, 0x05, 0x00, 0x37, 0x00, 0x29, 0x00, 0x05, - 0x00, 0x39, 0x00, 0x29, 0x00, 0x05, 0x00, 0x3a, 0x00, 0x29, 0x00, 0x05, - 0x00, 0x3c, 0x00, 0x14, 0x00, 0x05, 0x00, 0x44, 0xff, 0xae, 0x00, 0x05, - 0x00, 0x46, 0xff, 0x85, 0x00, 0x05, 0x00, 0x47, 0xff, 0x85, 0x00, 0x05, - 0x00, 0x48, 0xff, 0x85, 0x00, 0x05, 0x00, 0x4a, 0xff, 0xc3, 0x00, 0x05, - 0x00, 0x50, 0xff, 0xc3, 0x00, 0x05, 0x00, 0x51, 0xff, 0xc3, 0x00, 0x05, - 0x00, 0x52, 0xff, 0x85, 0x00, 0x05, 0x00, 0x53, 0xff, 0xc3, 0x00, 0x05, - 0x00, 0x54, 0xff, 0x85, 0x00, 0x05, 0x00, 0x55, 0xff, 0xc3, 0x00, 0x05, - 0x00, 0x56, 0xff, 0xc3, 0x00, 0x05, 0x00, 0x58, 0xff, 0xc3, 0x00, 0x05, - 0x00, 0x82, 0xff, 0x71, 0x00, 0x05, 0x00, 0x83, 0xff, 0x71, 0x00, 0x05, - 0x00, 0x84, 0xff, 0x71, 0x00, 0x05, 0x00, 0x85, 0xff, 0x71, 0x00, 0x05, - 0x00, 0x86, 0xff, 0x71, 0x00, 0x05, 0x00, 0x87, 0xff, 0x71, 0x00, 0x05, - 0x00, 0x9f, 0x00, 0x14, 0x00, 0x05, 0x00, 0xa2, 0xff, 0x85, 0x00, 0x05, - 0x00, 0xa3, 0xff, 0xae, 0x00, 0x05, 0x00, 0xa4, 0xff, 0xae, 0x00, 0x05, - 0x00, 0xa5, 0xff, 0xae, 0x00, 0x05, 0x00, 0xa6, 0xff, 0xae, 0x00, 0x05, - 0x00, 0xa7, 0xff, 0xae, 0x00, 0x05, 0x00, 0xa8, 0xff, 0xae, 0x00, 0x05, - 0x00, 0xa9, 0xff, 0x85, 0x00, 0x05, 0x00, 0xaa, 0xff, 0x85, 0x00, 0x05, - 0x00, 0xab, 0xff, 0x85, 0x00, 0x05, 0x00, 0xac, 0xff, 0x85, 0x00, 0x05, - 0x00, 0xad, 0xff, 0x85, 0x00, 0x05, 0x00, 0xb4, 0xff, 0x85, 0x00, 0x05, - 0x00, 0xb5, 0xff, 0x85, 0x00, 0x05, 0x00, 0xb6, 0xff, 0x85, 0x00, 0x05, - 0x00, 0xb7, 0xff, 0x85, 0x00, 0x05, 0x00, 0xb8, 0xff, 0x85, 0x00, 0x05, - 0x00, 0xba, 0xff, 0x85, 0x00, 0x05, 0x00, 0xbb, 0xff, 0xc3, 0x00, 0x05, - 0x00, 0xbc, 0xff, 0xc3, 0x00, 0x05, 0x00, 0xbd, 0xff, 0xc3, 0x00, 0x05, - 0x00, 0xbe, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0x24, 0xff, 0x71, 0x00, 0x0a, - 0x00, 0x37, 0x00, 0x29, 0x00, 0x0a, 0x00, 0x39, 0x00, 0x29, 0x00, 0x0a, - 0x00, 0x3a, 0x00, 0x29, 0x00, 0x0a, 0x00, 0x3c, 0x00, 0x14, 0x00, 0x0a, - 0x00, 0x44, 0xff, 0xae, 0x00, 0x0a, 0x00, 0x46, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0x47, 0xff, 0x85, 0x00, 0x0a, 0x00, 0x48, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0x4a, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0x50, 0xff, 0xc3, 0x00, 0x0a, - 0x00, 0x51, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0x52, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0x53, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0x54, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0x55, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0x56, 0xff, 0xc3, 0x00, 0x0a, - 0x00, 0x58, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0x82, 0xff, 0x71, 0x00, 0x0a, - 0x00, 0x83, 0xff, 0x71, 0x00, 0x0a, 0x00, 0x84, 0xff, 0x71, 0x00, 0x0a, - 0x00, 0x85, 0xff, 0x71, 0x00, 0x0a, 0x00, 0x86, 0xff, 0x71, 0x00, 0x0a, - 0x00, 0x87, 0xff, 0x71, 0x00, 0x0a, 0x00, 0x9f, 0x00, 0x14, 0x00, 0x0a, - 0x00, 0xa2, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xa3, 0xff, 0xae, 0x00, 0x0a, - 0x00, 0xa4, 0xff, 0xae, 0x00, 0x0a, 0x00, 0xa5, 0xff, 0xae, 0x00, 0x0a, - 0x00, 0xa6, 0xff, 0xae, 0x00, 0x0a, 0x00, 0xa7, 0xff, 0xae, 0x00, 0x0a, - 0x00, 0xa8, 0xff, 0xae, 0x00, 0x0a, 0x00, 0xa9, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0xaa, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xab, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0xac, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xad, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0xb4, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xb5, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0xb6, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xb7, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0xb8, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xba, 0xff, 0x85, 0x00, 0x0a, - 0x00, 0xbb, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0xbc, 0xff, 0xc3, 0x00, 0x0a, - 0x00, 0xbd, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0xbe, 0xff, 0xc3, 0x00, 0x0b, - 0x00, 0x2d, 0x00, 0xb8, 0x00, 0x0f, 0x00, 0x26, 0xff, 0x9a, 0x00, 0x0f, - 0x00, 0x2a, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x32, 0xff, 0x9a, 0x00, 0x0f, - 0x00, 0x34, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x37, 0xff, 0x71, 0x00, 0x0f, - 0x00, 0x38, 0xff, 0xd7, 0x00, 0x0f, 0x00, 0x39, 0xff, 0x85, 0x00, 0x0f, - 0x00, 0x3a, 0xff, 0x85, 0x00, 0x0f, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x0f, - 0x00, 0x89, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x94, 0xff, 0x9a, 0x00, 0x0f, - 0x00, 0x95, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x96, 0xff, 0x9a, 0x00, 0x0f, - 0x00, 0x97, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x98, 0xff, 0x9a, 0x00, 0x0f, - 0x00, 0x9a, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x9b, 0xff, 0xd7, 0x00, 0x0f, - 0x00, 0x9c, 0xff, 0xd7, 0x00, 0x0f, 0x00, 0x9d, 0xff, 0xd7, 0x00, 0x0f, - 0x00, 0x9e, 0xff, 0xd7, 0x00, 0x0f, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x10, - 0x00, 0x37, 0xff, 0xae, 0x00, 0x11, 0x00, 0x26, 0xff, 0x9a, 0x00, 0x11, - 0x00, 0x2a, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x32, 0xff, 0x9a, 0x00, 0x11, - 0x00, 0x34, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x37, 0xff, 0x71, 0x00, 0x11, - 0x00, 0x38, 0xff, 0xd7, 0x00, 0x11, 0x00, 0x39, 0xff, 0x85, 0x00, 0x11, - 0x00, 0x3a, 0xff, 0x85, 0x00, 0x11, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x11, - 0x00, 0x89, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x94, 0xff, 0x9a, 0x00, 0x11, - 0x00, 0x95, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x96, 0xff, 0x9a, 0x00, 0x11, - 0x00, 0x97, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x98, 0xff, 0x9a, 0x00, 0x11, - 0x00, 0x9a, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x9b, 0xff, 0xd7, 0x00, 0x11, - 0x00, 0x9c, 0xff, 0xd7, 0x00, 0x11, 0x00, 0x9d, 0xff, 0xd7, 0x00, 0x11, - 0x00, 0x9e, 0xff, 0xd7, 0x00, 0x11, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x24, - 0x00, 0x05, 0xff, 0x71, 0x00, 0x24, 0x00, 0x0a, 0xff, 0x71, 0x00, 0x24, - 0x00, 0x26, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x24, - 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x24, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x24, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x37, 0xff, 0x71, 0x00, 0x24, - 0x00, 0x39, 0xff, 0xae, 0x00, 0x24, 0x00, 0x3a, 0xff, 0xae, 0x00, 0x24, - 0x00, 0x3c, 0xff, 0x85, 0x00, 0x24, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x24, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x24, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x24, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x24, - 0x00, 0x9f, 0xff, 0x85, 0x00, 0x25, 0x00, 0x0f, 0xff, 0xae, 0x00, 0x25, - 0x00, 0x11, 0xff, 0xae, 0x00, 0x25, 0x00, 0x24, 0xff, 0xd7, 0x00, 0x25, - 0x00, 0x37, 0xff, 0xc3, 0x00, 0x25, 0x00, 0x39, 0xff, 0xec, 0x00, 0x25, - 0x00, 0x3a, 0xff, 0xec, 0x00, 0x25, 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x25, - 0x00, 0x3c, 0xff, 0xec, 0x00, 0x25, 0x00, 0x3d, 0xff, 0xec, 0x00, 0x25, - 0x00, 0x82, 0xff, 0xd7, 0x00, 0x25, 0x00, 0x83, 0xff, 0xd7, 0x00, 0x25, - 0x00, 0x84, 0xff, 0xd7, 0x00, 0x25, 0x00, 0x85, 0xff, 0xd7, 0x00, 0x25, - 0x00, 0x86, 0xff, 0xd7, 0x00, 0x25, 0x00, 0x87, 0xff, 0xd7, 0x00, 0x25, - 0x00, 0x9f, 0xff, 0xec, 0x00, 0x26, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x26, - 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x26, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x26, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x26, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x26, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x27, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x27, 0x00, 0x11, 0xff, 0xae, 0x00, 0x27, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x27, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x27, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x27, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x27, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x27, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x27, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x27, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x27, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x28, - 0x00, 0x2d, 0x00, 0x7b, 0x00, 0x29, 0x00, 0x0f, 0xff, 0x85, 0x00, 0x29, - 0x00, 0x11, 0xff, 0x85, 0x00, 0x29, 0x00, 0x22, 0x00, 0x29, 0x00, 0x29, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x29, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x29, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x29, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x29, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x29, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x29, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x2e, - 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x2e, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x2e, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x2e, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x2e, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x2f, - 0x00, 0x05, 0xff, 0x5c, 0x00, 0x2f, 0x00, 0x0a, 0xff, 0x5c, 0x00, 0x2f, - 0x00, 0x26, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x2f, - 0x00, 0x32, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x2f, - 0x00, 0x37, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x38, 0xff, 0xec, 0x00, 0x2f, - 0x00, 0x39, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x3a, 0xff, 0xd7, 0x00, 0x2f, - 0x00, 0x3c, 0xff, 0xc3, 0x00, 0x2f, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x2f, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x2f, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x2f, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x2f, - 0x00, 0x9b, 0xff, 0xec, 0x00, 0x2f, 0x00, 0x9c, 0xff, 0xec, 0x00, 0x2f, - 0x00, 0x9d, 0xff, 0xec, 0x00, 0x2f, 0x00, 0x9e, 0xff, 0xec, 0x00, 0x2f, - 0x00, 0x9f, 0xff, 0xc3, 0x00, 0x32, 0x00, 0x0f, 0xff, 0xae, 0x00, 0x32, - 0x00, 0x11, 0xff, 0xae, 0x00, 0x32, 0x00, 0x24, 0xff, 0xd7, 0x00, 0x32, - 0x00, 0x37, 0xff, 0xc3, 0x00, 0x32, 0x00, 0x39, 0xff, 0xec, 0x00, 0x32, - 0x00, 0x3a, 0xff, 0xec, 0x00, 0x32, 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x32, - 0x00, 0x3c, 0xff, 0xec, 0x00, 0x32, 0x00, 0x3d, 0xff, 0xec, 0x00, 0x32, - 0x00, 0x82, 0xff, 0xd7, 0x00, 0x32, 0x00, 0x83, 0xff, 0xd7, 0x00, 0x32, - 0x00, 0x84, 0xff, 0xd7, 0x00, 0x32, 0x00, 0x85, 0xff, 0xd7, 0x00, 0x32, - 0x00, 0x86, 0xff, 0xd7, 0x00, 0x32, 0x00, 0x87, 0xff, 0xd7, 0x00, 0x32, - 0x00, 0x9f, 0xff, 0xec, 0x00, 0x33, 0x00, 0x0f, 0xfe, 0xf6, 0x00, 0x33, - 0x00, 0x11, 0xfe, 0xf6, 0x00, 0x33, 0x00, 0x24, 0xff, 0x9a, 0x00, 0x33, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x33, 0x00, 0x3d, 0xff, 0xec, 0x00, 0x33, - 0x00, 0x82, 0xff, 0x9a, 0x00, 0x33, 0x00, 0x83, 0xff, 0x9a, 0x00, 0x33, - 0x00, 0x84, 0xff, 0x9a, 0x00, 0x33, 0x00, 0x85, 0xff, 0x9a, 0x00, 0x33, - 0x00, 0x86, 0xff, 0x9a, 0x00, 0x33, 0x00, 0x87, 0xff, 0x9a, 0x00, 0x34, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x34, 0x00, 0x11, 0xff, 0xae, 0x00, 0x34, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x34, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x34, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x34, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x34, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x34, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x34, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x34, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x34, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x34, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x34, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x34, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x34, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x34, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x37, - 0x00, 0x0f, 0xff, 0x85, 0x00, 0x37, 0x00, 0x10, 0xff, 0xae, 0x00, 0x37, - 0x00, 0x11, 0xff, 0x85, 0x00, 0x37, 0x00, 0x22, 0x00, 0x29, 0x00, 0x37, - 0x00, 0x24, 0xff, 0x71, 0x00, 0x37, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x37, - 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x37, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x37, - 0x00, 0x44, 0xff, 0x5c, 0x00, 0x37, 0x00, 0x46, 0xff, 0x71, 0x00, 0x37, - 0x00, 0x47, 0xff, 0x71, 0x00, 0x37, 0x00, 0x48, 0xff, 0x71, 0x00, 0x37, - 0x00, 0x4a, 0xff, 0x71, 0x00, 0x37, 0x00, 0x50, 0xff, 0x9a, 0x00, 0x37, - 0x00, 0x51, 0xff, 0x9a, 0x00, 0x37, 0x00, 0x52, 0xff, 0x71, 0x00, 0x37, - 0x00, 0x53, 0xff, 0x9a, 0x00, 0x37, 0x00, 0x54, 0xff, 0x71, 0x00, 0x37, - 0x00, 0x55, 0xff, 0x9a, 0x00, 0x37, 0x00, 0x56, 0xff, 0x85, 0x00, 0x37, - 0x00, 0x58, 0xff, 0x9a, 0x00, 0x37, 0x00, 0x59, 0xff, 0xd7, 0x00, 0x37, - 0x00, 0x5a, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x5b, 0xff, 0xd7, 0x00, 0x37, - 0x00, 0x5c, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x5d, 0xff, 0xae, 0x00, 0x37, - 0x00, 0x82, 0xff, 0x71, 0x00, 0x37, 0x00, 0x83, 0xff, 0x71, 0x00, 0x37, - 0x00, 0x84, 0xff, 0x71, 0x00, 0x37, 0x00, 0x85, 0xff, 0x71, 0x00, 0x37, - 0x00, 0x86, 0xff, 0x71, 0x00, 0x37, 0x00, 0x87, 0xff, 0x71, 0x00, 0x37, - 0x00, 0x89, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x37, - 0x00, 0x95, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x37, - 0x00, 0x97, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x37, - 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x37, 0x00, 0xa2, 0xff, 0x71, 0x00, 0x37, - 0x00, 0xa3, 0xff, 0x5c, 0x00, 0x37, 0x00, 0xa4, 0xff, 0x5c, 0x00, 0x37, - 0x00, 0xa5, 0xff, 0x5c, 0x00, 0x37, 0x00, 0xa6, 0xff, 0x5c, 0x00, 0x37, - 0x00, 0xa7, 0xff, 0x5c, 0x00, 0x37, 0x00, 0xa8, 0xff, 0x5c, 0x00, 0x37, - 0x00, 0xa9, 0xff, 0x71, 0x00, 0x37, 0x00, 0xaa, 0xff, 0x71, 0x00, 0x37, - 0x00, 0xab, 0xff, 0x71, 0x00, 0x37, 0x00, 0xac, 0xff, 0x71, 0x00, 0x37, - 0x00, 0xad, 0xff, 0x71, 0x00, 0x37, 0x00, 0xb4, 0xff, 0x71, 0x00, 0x37, - 0x00, 0xb5, 0xff, 0x71, 0x00, 0x37, 0x00, 0xb6, 0xff, 0x71, 0x00, 0x37, - 0x00, 0xb7, 0xff, 0x71, 0x00, 0x37, 0x00, 0xb8, 0xff, 0x71, 0x00, 0x37, - 0x00, 0xba, 0xff, 0x71, 0x00, 0x37, 0x00, 0xbb, 0xff, 0x9a, 0x00, 0x37, - 0x00, 0xbc, 0xff, 0x9a, 0x00, 0x37, 0x00, 0xbd, 0xff, 0x9a, 0x00, 0x37, - 0x00, 0xbe, 0xff, 0x9a, 0x00, 0x37, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0x38, - 0x00, 0x0f, 0xff, 0xd7, 0x00, 0x38, 0x00, 0x11, 0xff, 0xd7, 0x00, 0x38, - 0x00, 0x24, 0xff, 0xec, 0x00, 0x38, 0x00, 0x82, 0xff, 0xec, 0x00, 0x38, - 0x00, 0x83, 0xff, 0xec, 0x00, 0x38, 0x00, 0x84, 0xff, 0xec, 0x00, 0x38, - 0x00, 0x85, 0xff, 0xec, 0x00, 0x38, 0x00, 0x86, 0xff, 0xec, 0x00, 0x38, - 0x00, 0x87, 0xff, 0xec, 0x00, 0x39, 0x00, 0x0f, 0xff, 0x9a, 0x00, 0x39, - 0x00, 0x11, 0xff, 0x9a, 0x00, 0x39, 0x00, 0x22, 0x00, 0x29, 0x00, 0x39, - 0x00, 0x24, 0xff, 0xae, 0x00, 0x39, 0x00, 0x26, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x2a, 0xff, 0xec, 0x00, 0x39, 0x00, 0x32, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x34, 0xff, 0xec, 0x00, 0x39, 0x00, 0x44, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0x46, 0xff, 0xd7, 0x00, 0x39, 0x00, 0x47, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0x48, 0xff, 0xd7, 0x00, 0x39, 0x00, 0x4a, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x50, 0xff, 0xec, 0x00, 0x39, 0x00, 0x51, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x52, 0xff, 0xd7, 0x00, 0x39, 0x00, 0x53, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x54, 0xff, 0xd7, 0x00, 0x39, 0x00, 0x55, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x56, 0xff, 0xec, 0x00, 0x39, 0x00, 0x58, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x82, 0xff, 0xae, 0x00, 0x39, 0x00, 0x83, 0xff, 0xae, 0x00, 0x39, - 0x00, 0x84, 0xff, 0xae, 0x00, 0x39, 0x00, 0x85, 0xff, 0xae, 0x00, 0x39, - 0x00, 0x86, 0xff, 0xae, 0x00, 0x39, 0x00, 0x87, 0xff, 0xae, 0x00, 0x39, - 0x00, 0x89, 0xff, 0xec, 0x00, 0x39, 0x00, 0x94, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x95, 0xff, 0xec, 0x00, 0x39, 0x00, 0x96, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x97, 0xff, 0xec, 0x00, 0x39, 0x00, 0x98, 0xff, 0xec, 0x00, 0x39, - 0x00, 0x9a, 0xff, 0xec, 0x00, 0x39, 0x00, 0xa2, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xa3, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xa4, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xa5, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xa6, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xa7, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xa8, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xa9, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xaa, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xab, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xac, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xad, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xb4, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xb5, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xb6, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xb7, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xb8, 0xff, 0xd7, 0x00, 0x39, - 0x00, 0xba, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xbb, 0xff, 0xec, 0x00, 0x39, - 0x00, 0xbc, 0xff, 0xec, 0x00, 0x39, 0x00, 0xbd, 0xff, 0xec, 0x00, 0x39, - 0x00, 0xbe, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x0f, 0xff, 0x9a, 0x00, 0x3a, - 0x00, 0x11, 0xff, 0x9a, 0x00, 0x3a, 0x00, 0x22, 0x00, 0x29, 0x00, 0x3a, - 0x00, 0x24, 0xff, 0xae, 0x00, 0x3a, 0x00, 0x26, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x2a, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x32, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x34, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x44, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0x46, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0x47, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0x48, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0x4a, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x50, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x51, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x52, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0x53, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x54, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0x55, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x56, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x58, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x82, 0xff, 0xae, 0x00, 0x3a, 0x00, 0x83, 0xff, 0xae, 0x00, 0x3a, - 0x00, 0x84, 0xff, 0xae, 0x00, 0x3a, 0x00, 0x85, 0xff, 0xae, 0x00, 0x3a, - 0x00, 0x86, 0xff, 0xae, 0x00, 0x3a, 0x00, 0x87, 0xff, 0xae, 0x00, 0x3a, - 0x00, 0x89, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x94, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x95, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x96, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x97, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x98, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0x9a, 0xff, 0xec, 0x00, 0x3a, 0x00, 0xa2, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xa3, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xa4, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xa5, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xa6, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xa7, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xa8, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xa9, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xaa, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xab, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xac, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xad, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xb4, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xb5, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xb6, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xb7, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xb8, 0xff, 0xd7, 0x00, 0x3a, - 0x00, 0xba, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xbb, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0xbc, 0xff, 0xec, 0x00, 0x3a, 0x00, 0xbd, 0xff, 0xec, 0x00, 0x3a, - 0x00, 0xbe, 0xff, 0xec, 0x00, 0x3b, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x3b, - 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x3b, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x3b, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x3b, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x3b, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x3c, - 0x00, 0x0f, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x11, 0xff, 0x85, 0x00, 0x3c, - 0x00, 0x22, 0x00, 0x29, 0x00, 0x3c, 0x00, 0x24, 0xff, 0x85, 0x00, 0x3c, - 0x00, 0x26, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x3c, - 0x00, 0x32, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x3c, - 0x00, 0x44, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0x46, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0x47, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0x48, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0x4a, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x50, 0xff, 0xc3, 0x00, 0x3c, - 0x00, 0x51, 0xff, 0xc3, 0x00, 0x3c, 0x00, 0x52, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0x53, 0xff, 0xc3, 0x00, 0x3c, 0x00, 0x54, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0x55, 0xff, 0xc3, 0x00, 0x3c, 0x00, 0x56, 0xff, 0xae, 0x00, 0x3c, - 0x00, 0x58, 0xff, 0xc3, 0x00, 0x3c, 0x00, 0x5d, 0xff, 0xd7, 0x00, 0x3c, - 0x00, 0x82, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x83, 0xff, 0x85, 0x00, 0x3c, - 0x00, 0x84, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x85, 0xff, 0x85, 0x00, 0x3c, - 0x00, 0x86, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x87, 0xff, 0x85, 0x00, 0x3c, - 0x00, 0x89, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x3c, - 0x00, 0x95, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x3c, - 0x00, 0x97, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x3c, - 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0xa2, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xa3, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xa4, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xa5, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xa6, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xa7, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xa8, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xa9, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xaa, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xab, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xac, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xad, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xb4, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xb5, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xb6, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xb7, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xb8, 0xff, 0x9a, 0x00, 0x3c, - 0x00, 0xba, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xbb, 0xff, 0xc3, 0x00, 0x3c, - 0x00, 0xbc, 0xff, 0xc3, 0x00, 0x3c, 0x00, 0xbd, 0xff, 0xc3, 0x00, 0x3c, - 0x00, 0xbe, 0xff, 0xc3, 0x00, 0x3d, 0x00, 0x26, 0xff, 0xec, 0x00, 0x3d, - 0x00, 0x2a, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x32, 0xff, 0xec, 0x00, 0x3d, - 0x00, 0x34, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x89, 0xff, 0xec, 0x00, 0x3d, - 0x00, 0x94, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x95, 0xff, 0xec, 0x00, 0x3d, - 0x00, 0x96, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x97, 0xff, 0xec, 0x00, 0x3d, - 0x00, 0x98, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x9a, 0xff, 0xec, 0x00, 0x3e, - 0x00, 0x2d, 0x00, 0xb8, 0x00, 0x44, 0x00, 0x05, 0xff, 0xec, 0x00, 0x44, - 0x00, 0x0a, 0xff, 0xec, 0x00, 0x45, 0x00, 0x05, 0xff, 0xec, 0x00, 0x45, - 0x00, 0x0a, 0xff, 0xec, 0x00, 0x45, 0x00, 0x59, 0xff, 0xd7, 0x00, 0x45, - 0x00, 0x5a, 0xff, 0xd7, 0x00, 0x45, 0x00, 0x5b, 0xff, 0xd7, 0x00, 0x45, - 0x00, 0x5c, 0xff, 0xd7, 0x00, 0x45, 0x00, 0x5d, 0xff, 0xec, 0x00, 0x45, - 0x00, 0xbf, 0xff, 0xd7, 0x00, 0x46, 0x00, 0x05, 0x00, 0x29, 0x00, 0x46, - 0x00, 0x0a, 0x00, 0x29, 0x00, 0x48, 0x00, 0x05, 0xff, 0xec, 0x00, 0x48, - 0x00, 0x0a, 0xff, 0xec, 0x00, 0x48, 0x00, 0x59, 0xff, 0xd7, 0x00, 0x48, - 0x00, 0x5a, 0xff, 0xd7, 0x00, 0x48, 0x00, 0x5b, 0xff, 0xd7, 0x00, 0x48, - 0x00, 0x5c, 0xff, 0xd7, 0x00, 0x48, 0x00, 0x5d, 0xff, 0xec, 0x00, 0x48, - 0x00, 0xbf, 0xff, 0xd7, 0x00, 0x49, 0x00, 0x05, 0x00, 0x7b, 0x00, 0x49, - 0x00, 0x0a, 0x00, 0x7b, 0x00, 0x4b, 0x00, 0x05, 0xff, 0xec, 0x00, 0x4b, - 0x00, 0x0a, 0xff, 0xec, 0x00, 0x4e, 0x00, 0x46, 0xff, 0xd7, 0x00, 0x4e, - 0x00, 0x47, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0x48, 0xff, 0xd7, 0x00, 0x4e, - 0x00, 0x52, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0x54, 0xff, 0xd7, 0x00, 0x4e, - 0x00, 0xa2, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xa9, 0xff, 0xd7, 0x00, 0x4e, - 0x00, 0xaa, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xab, 0xff, 0xd7, 0x00, 0x4e, - 0x00, 0xac, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xad, 0xff, 0xd7, 0x00, 0x4e, - 0x00, 0xb4, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xb5, 0xff, 0xd7, 0x00, 0x4e, - 0x00, 0xb6, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xb7, 0xff, 0xd7, 0x00, 0x4e, - 0x00, 0xb8, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xba, 0xff, 0xd7, 0x00, 0x50, - 0x00, 0x05, 0xff, 0xec, 0x00, 0x50, 0x00, 0x0a, 0xff, 0xec, 0x00, 0x51, - 0x00, 0x05, 0xff, 0xec, 0x00, 0x51, 0x00, 0x0a, 0xff, 0xec, 0x00, 0x52, - 0x00, 0x05, 0xff, 0xec, 0x00, 0x52, 0x00, 0x0a, 0xff, 0xec, 0x00, 0x52, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0x52, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0x52, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0x52, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0x52, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0x52, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0x53, - 0x00, 0x05, 0xff, 0xec, 0x00, 0x53, 0x00, 0x0a, 0xff, 0xec, 0x00, 0x53, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0x53, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0x53, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0x53, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0x53, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0x53, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0x05, 0x00, 0x52, 0x00, 0x55, 0x00, 0x0a, 0x00, 0x52, 0x00, 0x55, - 0x00, 0x44, 0xff, 0xd7, 0x00, 0x55, 0x00, 0x46, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0x47, 0xff, 0xd7, 0x00, 0x55, 0x00, 0x48, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0x4a, 0xff, 0xec, 0x00, 0x55, 0x00, 0x52, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0x54, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xa2, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xa3, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xa4, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xa5, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xa6, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xa7, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xa8, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xa9, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xaa, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xab, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xac, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xad, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xb4, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xb5, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xb6, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xb7, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xb8, 0xff, 0xd7, 0x00, 0x55, - 0x00, 0xba, 0xff, 0xd7, 0x00, 0x57, 0x00, 0x05, 0x00, 0x29, 0x00, 0x57, - 0x00, 0x0a, 0x00, 0x29, 0x00, 0x59, 0x00, 0x05, 0x00, 0x52, 0x00, 0x59, - 0x00, 0x0a, 0x00, 0x52, 0x00, 0x59, 0x00, 0x0f, 0xff, 0xae, 0x00, 0x59, - 0x00, 0x11, 0xff, 0xae, 0x00, 0x59, 0x00, 0x22, 0x00, 0x29, 0x00, 0x5a, - 0x00, 0x05, 0x00, 0x52, 0x00, 0x5a, 0x00, 0x0a, 0x00, 0x52, 0x00, 0x5a, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x5a, 0x00, 0x11, 0xff, 0xae, 0x00, 0x5a, - 0x00, 0x22, 0x00, 0x29, 0x00, 0x5b, 0x00, 0x46, 0xff, 0xd7, 0x00, 0x5b, - 0x00, 0x47, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0x48, 0xff, 0xd7, 0x00, 0x5b, - 0x00, 0x52, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0x54, 0xff, 0xd7, 0x00, 0x5b, - 0x00, 0xa2, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xa9, 0xff, 0xd7, 0x00, 0x5b, - 0x00, 0xaa, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xab, 0xff, 0xd7, 0x00, 0x5b, - 0x00, 0xac, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xad, 0xff, 0xd7, 0x00, 0x5b, - 0x00, 0xb4, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xb5, 0xff, 0xd7, 0x00, 0x5b, - 0x00, 0xb6, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xb7, 0xff, 0xd7, 0x00, 0x5b, - 0x00, 0xb8, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xba, 0xff, 0xd7, 0x00, 0x5c, - 0x00, 0x05, 0x00, 0x52, 0x00, 0x5c, 0x00, 0x0a, 0x00, 0x52, 0x00, 0x5c, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x5c, 0x00, 0x11, 0xff, 0xae, 0x00, 0x5c, - 0x00, 0x22, 0x00, 0x29, 0x00, 0x5e, 0x00, 0x2d, 0x00, 0xb8, 0x00, 0x82, - 0x00, 0x05, 0xff, 0x71, 0x00, 0x82, 0x00, 0x0a, 0xff, 0x71, 0x00, 0x82, - 0x00, 0x26, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x82, - 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x82, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x82, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x37, 0xff, 0x71, 0x00, 0x82, - 0x00, 0x39, 0xff, 0xae, 0x00, 0x82, 0x00, 0x3a, 0xff, 0xae, 0x00, 0x82, - 0x00, 0x3c, 0xff, 0x85, 0x00, 0x82, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x82, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x82, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x82, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x82, - 0x00, 0x9f, 0xff, 0x85, 0x00, 0x83, 0x00, 0x05, 0xff, 0x71, 0x00, 0x83, - 0x00, 0x0a, 0xff, 0x71, 0x00, 0x83, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x83, - 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x83, - 0x00, 0x32, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x83, - 0x00, 0x37, 0xff, 0x71, 0x00, 0x83, 0x00, 0x39, 0xff, 0xae, 0x00, 0x83, - 0x00, 0x3a, 0xff, 0xae, 0x00, 0x83, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x83, - 0x00, 0x89, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x83, - 0x00, 0x95, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x83, - 0x00, 0x97, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x83, - 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x84, - 0x00, 0x05, 0xff, 0x71, 0x00, 0x84, 0x00, 0x0a, 0xff, 0x71, 0x00, 0x84, - 0x00, 0x26, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x84, - 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x84, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x84, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x37, 0xff, 0x71, 0x00, 0x84, - 0x00, 0x39, 0xff, 0xae, 0x00, 0x84, 0x00, 0x3a, 0xff, 0xae, 0x00, 0x84, - 0x00, 0x3c, 0xff, 0x85, 0x00, 0x84, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x84, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x84, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x84, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x84, - 0x00, 0x9f, 0xff, 0x85, 0x00, 0x85, 0x00, 0x05, 0xff, 0x71, 0x00, 0x85, - 0x00, 0x0a, 0xff, 0x71, 0x00, 0x85, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x85, - 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x85, - 0x00, 0x32, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x85, - 0x00, 0x37, 0xff, 0x71, 0x00, 0x85, 0x00, 0x39, 0xff, 0xae, 0x00, 0x85, - 0x00, 0x3a, 0xff, 0xae, 0x00, 0x85, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x85, - 0x00, 0x89, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x85, - 0x00, 0x95, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x85, - 0x00, 0x97, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x85, - 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x86, - 0x00, 0x05, 0xff, 0x71, 0x00, 0x86, 0x00, 0x0a, 0xff, 0x71, 0x00, 0x86, - 0x00, 0x26, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x86, - 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x86, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x86, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x37, 0xff, 0x71, 0x00, 0x86, - 0x00, 0x39, 0xff, 0xae, 0x00, 0x86, 0x00, 0x3a, 0xff, 0xae, 0x00, 0x86, - 0x00, 0x3c, 0xff, 0x85, 0x00, 0x86, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x86, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x86, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x86, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x86, - 0x00, 0x9f, 0xff, 0x85, 0x00, 0x87, 0x00, 0x05, 0xff, 0x71, 0x00, 0x87, - 0x00, 0x0a, 0xff, 0x71, 0x00, 0x87, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x87, - 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x87, - 0x00, 0x32, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x87, - 0x00, 0x37, 0xff, 0x71, 0x00, 0x87, 0x00, 0x39, 0xff, 0xae, 0x00, 0x87, - 0x00, 0x3a, 0xff, 0xae, 0x00, 0x87, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x87, - 0x00, 0x89, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x87, - 0x00, 0x95, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x87, - 0x00, 0x97, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x87, - 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x88, - 0x00, 0x2d, 0x00, 0x7b, 0x00, 0x89, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x89, - 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x89, - 0x00, 0x34, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x89, - 0x00, 0x94, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x89, - 0x00, 0x96, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x89, - 0x00, 0x98, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x8a, - 0x00, 0x2d, 0x00, 0x7b, 0x00, 0x8b, 0x00, 0x2d, 0x00, 0x7b, 0x00, 0x8c, - 0x00, 0x2d, 0x00, 0x7b, 0x00, 0x8d, 0x00, 0x2d, 0x00, 0x7b, 0x00, 0x92, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x92, 0x00, 0x11, 0xff, 0xae, 0x00, 0x92, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x92, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x92, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x92, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x92, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x92, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x92, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x92, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x92, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x92, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x92, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x92, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x92, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x92, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x94, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x94, 0x00, 0x11, 0xff, 0xae, 0x00, 0x94, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x94, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x94, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x94, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x94, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x94, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x94, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x94, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x94, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x94, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x94, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x94, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x94, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x94, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x95, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x95, 0x00, 0x11, 0xff, 0xae, 0x00, 0x95, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x95, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x95, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x95, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x95, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x95, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x95, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x95, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x95, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x95, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x95, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x95, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x95, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x95, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x96, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x96, 0x00, 0x11, 0xff, 0xae, 0x00, 0x96, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x96, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x96, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x96, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x96, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x96, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x96, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x96, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x96, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x96, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x96, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x96, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x96, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x96, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x97, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x97, 0x00, 0x11, 0xff, 0xae, 0x00, 0x97, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x97, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x97, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x97, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x97, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x97, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x97, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x97, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x97, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x97, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x97, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x97, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x97, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x97, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x98, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x98, 0x00, 0x11, 0xff, 0xae, 0x00, 0x98, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x98, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x98, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x98, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x98, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x98, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x98, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x98, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x98, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x98, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x98, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x98, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x98, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x98, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x9a, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0x9a, 0x00, 0x11, 0xff, 0xae, 0x00, 0x9a, - 0x00, 0x24, 0xff, 0xd7, 0x00, 0x9a, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x9a, - 0x00, 0x39, 0xff, 0xec, 0x00, 0x9a, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x9a, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x9a, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x9a, - 0x00, 0x3d, 0xff, 0xec, 0x00, 0x9a, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x9a, - 0x00, 0x83, 0xff, 0xd7, 0x00, 0x9a, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x9a, - 0x00, 0x85, 0xff, 0xd7, 0x00, 0x9a, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x9a, - 0x00, 0x87, 0xff, 0xd7, 0x00, 0x9a, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x9b, - 0x00, 0x0f, 0xff, 0xd7, 0x00, 0x9b, 0x00, 0x11, 0xff, 0xd7, 0x00, 0x9b, - 0x00, 0x24, 0xff, 0xec, 0x00, 0x9b, 0x00, 0x82, 0xff, 0xec, 0x00, 0x9b, - 0x00, 0x83, 0xff, 0xec, 0x00, 0x9b, 0x00, 0x84, 0xff, 0xec, 0x00, 0x9b, - 0x00, 0x85, 0xff, 0xec, 0x00, 0x9b, 0x00, 0x86, 0xff, 0xec, 0x00, 0x9b, - 0x00, 0x87, 0xff, 0xec, 0x00, 0x9c, 0x00, 0x0f, 0xff, 0xd7, 0x00, 0x9c, - 0x00, 0x11, 0xff, 0xd7, 0x00, 0x9c, 0x00, 0x24, 0xff, 0xec, 0x00, 0x9c, - 0x00, 0x82, 0xff, 0xec, 0x00, 0x9c, 0x00, 0x83, 0xff, 0xec, 0x00, 0x9c, - 0x00, 0x84, 0xff, 0xec, 0x00, 0x9c, 0x00, 0x85, 0xff, 0xec, 0x00, 0x9c, - 0x00, 0x86, 0xff, 0xec, 0x00, 0x9c, 0x00, 0x87, 0xff, 0xec, 0x00, 0x9d, - 0x00, 0x0f, 0xff, 0xd7, 0x00, 0x9d, 0x00, 0x11, 0xff, 0xd7, 0x00, 0x9d, - 0x00, 0x24, 0xff, 0xec, 0x00, 0x9d, 0x00, 0x82, 0xff, 0xec, 0x00, 0x9d, - 0x00, 0x83, 0xff, 0xec, 0x00, 0x9d, 0x00, 0x84, 0xff, 0xec, 0x00, 0x9d, - 0x00, 0x85, 0xff, 0xec, 0x00, 0x9d, 0x00, 0x86, 0xff, 0xec, 0x00, 0x9d, - 0x00, 0x87, 0xff, 0xec, 0x00, 0x9e, 0x00, 0x0f, 0xff, 0xd7, 0x00, 0x9e, - 0x00, 0x11, 0xff, 0xd7, 0x00, 0x9e, 0x00, 0x24, 0xff, 0xec, 0x00, 0x9e, - 0x00, 0x82, 0xff, 0xec, 0x00, 0x9e, 0x00, 0x83, 0xff, 0xec, 0x00, 0x9e, - 0x00, 0x84, 0xff, 0xec, 0x00, 0x9e, 0x00, 0x85, 0xff, 0xec, 0x00, 0x9e, - 0x00, 0x86, 0xff, 0xec, 0x00, 0x9e, 0x00, 0x87, 0xff, 0xec, 0x00, 0x9f, - 0x00, 0x0f, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x11, 0xff, 0x85, 0x00, 0x9f, - 0x00, 0x22, 0x00, 0x29, 0x00, 0x9f, 0x00, 0x24, 0xff, 0x85, 0x00, 0x9f, - 0x00, 0x26, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x9f, - 0x00, 0x32, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x9f, - 0x00, 0x44, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0x46, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0x47, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0x48, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0x4a, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x50, 0xff, 0xc3, 0x00, 0x9f, - 0x00, 0x51, 0xff, 0xc3, 0x00, 0x9f, 0x00, 0x52, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0x53, 0xff, 0xc3, 0x00, 0x9f, 0x00, 0x54, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0x55, 0xff, 0xc3, 0x00, 0x9f, 0x00, 0x56, 0xff, 0xae, 0x00, 0x9f, - 0x00, 0x58, 0xff, 0xc3, 0x00, 0x9f, 0x00, 0x5d, 0xff, 0xd7, 0x00, 0x9f, - 0x00, 0x82, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x83, 0xff, 0x85, 0x00, 0x9f, - 0x00, 0x84, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x85, 0xff, 0x85, 0x00, 0x9f, - 0x00, 0x86, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x87, 0xff, 0x85, 0x00, 0x9f, - 0x00, 0x89, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x9f, - 0x00, 0x95, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x9f, - 0x00, 0x97, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x9f, - 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0xa2, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xa3, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xa4, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xa5, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xa6, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xa7, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xa8, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xa9, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xaa, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xab, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xac, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xad, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xb4, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xb5, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xb6, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xb7, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xb8, 0xff, 0x9a, 0x00, 0x9f, - 0x00, 0xba, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xbb, 0xff, 0xc3, 0x00, 0x9f, - 0x00, 0xbc, 0xff, 0xc3, 0x00, 0x9f, 0x00, 0xbd, 0xff, 0xc3, 0x00, 0x9f, - 0x00, 0xbe, 0xff, 0xc3, 0x00, 0xa0, 0x00, 0x0f, 0xfe, 0xf6, 0x00, 0xa0, - 0x00, 0x11, 0xfe, 0xf6, 0x00, 0xa0, 0x00, 0x24, 0xff, 0x9a, 0x00, 0xa0, - 0x00, 0x3b, 0xff, 0xd7, 0x00, 0xa0, 0x00, 0x3d, 0xff, 0xec, 0x00, 0xa0, - 0x00, 0x82, 0xff, 0x9a, 0x00, 0xa0, 0x00, 0x83, 0xff, 0x9a, 0x00, 0xa0, - 0x00, 0x84, 0xff, 0x9a, 0x00, 0xa0, 0x00, 0x85, 0xff, 0x9a, 0x00, 0xa0, - 0x00, 0x86, 0xff, 0x9a, 0x00, 0xa0, 0x00, 0x87, 0xff, 0x9a, 0x00, 0xa2, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xa2, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa3, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xa3, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa4, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xa4, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa5, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xa5, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa6, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xa6, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa7, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xa7, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xaa, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xaa, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xaa, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xaa, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xaa, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xaa, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xaa, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xaa, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xab, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xab, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xab, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xab, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xab, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xab, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xab, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xab, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xac, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xac, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xac, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xac, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xac, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xac, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xac, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xac, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xad, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xad, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xad, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xad, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xad, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xad, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xad, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xad, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb2, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xb2, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xb2, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xb2, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xb2, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xb2, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xb2, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xb2, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb4, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xb4, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xb4, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xb4, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xb4, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xb4, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xb4, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xb4, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb5, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xb5, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xb5, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xb5, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xb5, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xb5, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xb5, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xb5, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb6, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xb6, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xb6, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xb6, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xb6, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xb6, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xb6, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xb6, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb8, - 0x00, 0x05, 0xff, 0xd7, 0x00, 0xb8, 0x00, 0x0a, 0xff, 0xd7, 0x00, 0xba, - 0x00, 0x05, 0xff, 0xec, 0x00, 0xba, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xba, - 0x00, 0x59, 0xff, 0xd7, 0x00, 0xba, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xba, - 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xba, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xba, - 0x00, 0x5d, 0xff, 0xec, 0x00, 0xba, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xbf, - 0x00, 0x05, 0x00, 0x52, 0x00, 0xbf, 0x00, 0x0a, 0x00, 0x52, 0x00, 0xbf, - 0x00, 0x0f, 0xff, 0xae, 0x00, 0xbf, 0x00, 0x11, 0xff, 0xae, 0x00, 0xbf, - 0x00, 0x22, 0x00, 0x29, 0x00, 0xc0, 0x00, 0x05, 0xff, 0xec, 0x00, 0xc0, - 0x00, 0x0a, 0xff, 0xec, 0x00, 0xc0, 0x00, 0x59, 0xff, 0xd7, 0x00, 0xc0, - 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xc0, 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xc0, - 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xc0, 0x00, 0x5d, 0xff, 0xec, 0x00, 0xc0, - 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xc1, 0x00, 0x05, 0x00, 0x52, 0x00, 0xc1, - 0x00, 0x0a, 0x00, 0x52, 0x00, 0xc1, 0x00, 0x0f, 0xff, 0xae, 0x00, 0xc1, - 0x00, 0x11, 0xff, 0xae, 0x00, 0xc1, 0x00, 0x22, 0x00, 0x29, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x31, 0x02, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x39, 0x00, 0x74, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x09, 0x00, 0xc2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x04, 0x00, 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x23, 0x01, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x0e, 0x01, 0x65, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x0c, 0x01, 0x8e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x0d, 0x01, 0xb7, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x52, 0x02, 0x6b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x14, 0x02, 0xe8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0b, 0x00, 0x1c, 0x03, 0x37, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x2e, 0x03, 0xb2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0d, 0x00, 0x2e, 0x04, 0x3f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x2a, 0x04, 0xc4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x18, 0x04, 0xef, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x0b, 0x05, 0x76, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x02, 0x00, 0x11, 0x05, 0xa2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x03, 0x00, 0x12, 0x06, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x04, 0x00, 0x12, 0x06, 0x78, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x18, 0x05, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x01, 0x00, 0x12, 0x05, 0x82, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x02, 0x00, 0x1f, 0x05, 0xb4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x03, 0x00, 0x1f, 0x06, 0x24, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x04, 0x00, 0x23, 0x06, 0x8b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x00, 0x00, 0x21, 0x05, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x02, 0x00, 0x17, 0x05, 0xd4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x03, 0x00, 0x10, 0x06, 0x44, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x04, 0x00, 0x0f, 0x06, 0xaf, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, - 0x01, 0x00, 0x00, 0x15, 0x05, 0x43, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, - 0x01, 0x02, 0x00, 0x11, 0x05, 0xec, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, - 0x01, 0x03, 0x00, 0x13, 0x06, 0x55, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, - 0x01, 0x04, 0x00, 0x0c, 0x06, 0xbf, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x1c, 0x05, 0x59, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x01, 0x00, 0x0c, 0x05, 0x95, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x02, 0x00, 0x12, 0x05, 0xfe, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x03, 0x00, 0x0e, 0x06, 0x69, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x04, 0x00, 0x0d, 0x06, 0xcc, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x01, 0x00, 0x12, 0x00, 0xae, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x02, 0x00, 0x08, 0x00, 0xcc, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x03, 0x00, 0x46, 0x00, 0xdb, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x04, 0x00, 0x1c, 0x01, 0x47, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x05, 0x00, 0x18, 0x01, 0x74, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x06, 0x00, 0x1a, 0x01, 0x9b, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x07, 0x00, 0xa4, 0x01, 0xc5, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x08, 0x00, 0x28, 0x02, 0xbe, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x0b, 0x00, 0x38, 0x02, 0xfd, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x0c, 0x00, 0x5c, 0x03, 0x54, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x0d, 0x00, 0x5c, 0x03, 0xe1, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x0e, 0x00, 0x54, 0x04, 0x6e, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, - 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x7a, 0x00, 0x65, 0x00, 0x64, - 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x20, - 0x00, 0x63, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, - 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xa9, 0x00, 0x20, - 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x30, 0x00, 0x2d, 0x00, 0x32, - 0x00, 0x30, 0x00, 0x31, 0x00, 0x31, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x47, - 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x20, - 0x00, 0x43, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x70, 0x00, 0x6f, 0x00, 0x72, - 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2e, - 0x00, 0x00, 0x44, 0x69, 0x67, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x20, 0xa9, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x32, 0x30, - 0x31, 0x31, 0x2c, 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x43, - 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x00, - 0x00, 0x4f, 0x00, 0x70, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x53, - 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x00, 0x4f, 0x70, 0x65, 0x6e, - 0x20, 0x53, 0x61, 0x6e, 0x73, 0x00, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6c, - 0x00, 0x64, 0x00, 0x00, 0x42, 0x6f, 0x6c, 0x64, 0x00, 0x00, 0x41, 0x00, - 0x73, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x65, 0x00, - 0x72, 0x00, 0x20, 0x00, 0x2d, 0x00, 0x20, 0x00, 0x4f, 0x00, 0x70, 0x00, - 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, - 0x73, 0x00, 0x20, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x64, 0x00, - 0x20, 0x00, 0x42, 0x00, 0x75, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x64, 0x00, - 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x41, 0x73, 0x63, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x2d, 0x20, 0x4f, 0x70, 0x65, 0x6e, - 0x20, 0x53, 0x61, 0x6e, 0x73, 0x20, 0x42, 0x6f, 0x6c, 0x64, 0x20, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x20, 0x31, 0x30, 0x30, 0x00, 0x00, 0x4f, 0x00, - 0x70, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, - 0x6e, 0x00, 0x73, 0x00, 0x20, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6c, 0x00, - 0x64, 0x00, 0x00, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53, 0x61, 0x6e, 0x73, - 0x20, 0x42, 0x6f, 0x6c, 0x64, 0x00, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, - 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x31, - 0x00, 0x2e, 0x00, 0x31, 0x00, 0x30, 0x00, 0x00, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x31, 0x30, 0x00, 0x00, 0x4f, 0x00, - 0x70, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, - 0x73, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x64, 0x00, - 0x00, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x61, 0x6e, 0x73, 0x2d, 0x42, 0x6f, - 0x6c, 0x64, 0x00, 0x00, 0x4f, 0x00, 0x70, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x20, 0x00, - 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x74, 0x00, - 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x61, 0x00, - 0x72, 0x00, 0x6b, 0x00, 0x20, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x20, 0x00, - 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, - 0x20, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6d, 0x00, - 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x62, 0x00, 0x65, 0x00, 0x20, 0x00, - 0x72, 0x00, 0x65, 0x00, 0x67, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, - 0x65, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x20, 0x00, 0x63, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, - 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x6a, 0x00, 0x75, 0x00, - 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x64, 0x00, 0x69, 0x00, 0x63, 0x00, - 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x2e, 0x00, - 0x00, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53, 0x61, 0x6e, 0x73, 0x20, 0x69, - 0x73, 0x20, 0x61, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 0x61, 0x72, - 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6a, 0x75, 0x72, - 0x69, 0x73, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x00, - 0x00, 0x41, 0x00, 0x73, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, - 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x72, - 0x00, 0x70, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, - 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, - 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, - 0x2e, 0x00, 0x61, 0x00, 0x73, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, - 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, - 0x70, 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x2f, 0x00, - 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, - 0x61, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x63, 0x6f, 0x72, 0x70, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, - 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x77, 0x00, 0x77, - 0x00, 0x77, 0x00, 0x2e, 0x00, 0x61, 0x00, 0x73, 0x00, 0x63, 0x00, 0x65, - 0x00, 0x6e, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x6f, - 0x00, 0x72, 0x00, 0x70, 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, - 0x00, 0x2f, 0x00, 0x74, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, - 0x00, 0x65, 0x00, 0x73, 0x00, 0x69, 0x00, 0x67, 0x00, 0x6e, 0x00, 0x65, - 0x00, 0x72, 0x00, 0x73, 0x00, 0x2e, 0x00, 0x68, 0x00, 0x74, 0x00, 0x6d, - 0x00, 0x6c, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x61, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x63, - 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x79, 0x70, 0x65, - 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x68, 0x74, - 0x6d, 0x6c, 0x00, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, - 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x75, 0x00, - 0x6e, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x74, 0x00, - 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x41, 0x00, 0x70, 0x00, 0x61, 0x00, - 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, - 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2c, 0x00, - 0x20, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, - 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x30, 0x00, - 0x00, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x61, 0x63, - 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e, 0x30, 0x00, - 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, - 0x00, 0x2f, 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x61, - 0x00, 0x70, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x2e, - 0x00, 0x6f, 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00, 0x6c, 0x00, 0x69, - 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x73, - 0x00, 0x2f, 0x00, 0x4c, 0x00, 0x49, 0x00, 0x43, 0x00, 0x45, 0x00, 0x4e, - 0x00, 0x53, 0x00, 0x45, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x30, - 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, - 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, 0x43, - 0x45, 0x4e, 0x53, 0x45, 0x2d, 0x32, 0x2e, 0x30, 0x00, 0x41, 0x6c, 0x6c, - 0x20, 0x54, 0x79, 0x70, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, - 0x20, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, 0x46, 0x6f, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x79, 0x70, 0x6f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x71, 0x75, 0x65, 0x73, 0x00, 0x41, - 0x6c, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x6f, 0x67, 0x72, 0x61, 0x66, - 0x69, 0x73, 0x63, 0x68, 0x65, 0x6e, 0x20, 0x4d, 0x9a, 0x67, 0x6c, 0x69, - 0x63, 0x68, 0x6b, 0x65, 0x69, 0x74, 0x65, 0x6e, 0x00, 0x46, 0x75, 0x6e, - 0x7a, 0x69, 0x6f, 0x6e, 0x69, 0x20, 0x54, 0x69, 0x70, 0x6f, 0x67, 0x72, - 0x61, 0x66, 0x69, 0x63, 0x68, 0x65, 0x00, 0x41, 0x6c, 0x6c, 0x65, 0x20, - 0x74, 0x79, 0x70, 0x6f, 0x67, 0x72, 0x61, 0x66, 0x69, 0x73, 0x63, 0x68, - 0x65, 0x20, 0x6b, 0x65, 0x6e, 0x6d, 0x65, 0x72, 0x6b, 0x65, 0x6e, 0x00, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x43, 0x61, 0x73, 0x65, 0x00, - 0x53, 0x74, 0x79, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x73, 0x20, 0x43, 0x68, - 0x69, 0x66, 0x66, 0x72, 0x65, 0x73, 0x00, 0x4e, 0x75, 0x6d, 0x6d, 0x65, - 0x72, 0x68, 0x6f, 0x6f, 0x67, 0x74, 0x65, 0x00, 0x41, 0x6c, 0x6c, 0x20, - 0x54, 0x79, 0x70, 0x65, 0x20, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x00, 0x54, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x79, 0x70, 0x6f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x71, 0x75, 0x65, 0x73, 0x00, 0x41, 0x6c, - 0x6c, 0x65, 0x20, 0x41, 0x75, 0x73, 0x7a, 0x65, 0x69, 0x63, 0x68, 0x6e, - 0x75, 0x6e, 0x67, 0x73, 0x61, 0x72, 0x74, 0x65, 0x6e, 0x00, 0x54, 0x75, - 0x74, 0x74, 0x65, 0x20, 0x6c, 0x65, 0x20, 0x46, 0x75, 0x6e, 0x7a, 0x69, - 0x6f, 0x6e, 0x69, 0x00, 0x41, 0x6c, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x6b, 0x65, 0x6e, 0x6d, 0x65, 0x72, 0x6b, 0x65, 0x6e, 0x00, 0x4c, - 0x6f, 0x77, 0x65, 0x72, 0x20, 0x43, 0x61, 0x73, 0x65, 0x20, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x00, 0x43, 0x68, 0x69, 0x66, 0x66, 0x72, - 0x65, 0x73, 0x20, 0x41, 0x6e, 0x63, 0x69, 0x65, 0x6e, 0x73, 0x20, 0x28, - 0x62, 0x61, 0x73, 0x20, 0x64, 0x65, 0x20, 0x63, 0x61, 0x73, 0x73, 0x65, - 0x29, 0x00, 0x4d, 0x65, 0x64, 0x69, 0xbe, 0x76, 0x61, 0x6c, 0x2d, 0x5a, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x6e, 0x00, 0x53, 0x6f, 0x70, 0x72, 0x61, - 0x20, 0x6c, 0x61, 0x20, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x20, 0x42, 0x61, - 0x73, 0x65, 0x00, 0x4b, 0x6c, 0x65, 0x69, 0x6e, 0x65, 0x20, 0x6e, 0x75, - 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x00, 0x55, 0x70, 0x70, 0x65, 0x72, 0x20, - 0x43, 0x61, 0x73, 0x65, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x00, 0x43, 0x68, 0x69, 0x66, 0x66, 0x72, 0x65, 0x73, 0x20, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x73, - 0x20, 0x28, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x29, - 0x00, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x65, 0x20, 0x5a, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x6e, 0x00, 0x54, 0x72, 0x61, 0x64, 0x69, 0x7a, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x00, 0x47, 0x72, 0x6f, 0x74, 0x65, 0x20, - 0x6e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0x66, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, - 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, - 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x0e, - 0x00, 0x0f, 0x00, 0x10, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14, - 0x00, 0x15, 0x00, 0x16, 0x00, 0x17, 0x00, 0x18, 0x00, 0x19, 0x00, 0x1a, - 0x00, 0x1b, 0x00, 0x1c, 0x00, 0x1d, 0x00, 0x1e, 0x00, 0x1f, 0x00, 0x20, - 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, - 0x00, 0x27, 0x00, 0x28, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x2b, 0x00, 0x2c, - 0x00, 0x2d, 0x00, 0x2e, 0x00, 0x2f, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, - 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, - 0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, - 0x00, 0x3f, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, - 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, - 0x00, 0x4b, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x50, - 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, - 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, - 0x00, 0x5d, 0x00, 0x5e, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0xac, - 0x00, 0xa3, 0x00, 0x84, 0x00, 0x85, 0x00, 0xbd, 0x00, 0x96, 0x00, 0xe8, - 0x00, 0x86, 0x00, 0x8e, 0x00, 0x8b, 0x00, 0x9d, 0x00, 0xa9, 0x00, 0xa4, - 0x01, 0x02, 0x00, 0x8a, 0x01, 0x03, 0x00, 0x83, 0x00, 0x93, 0x00, 0xf2, - 0x00, 0xf3, 0x00, 0x8d, 0x00, 0x97, 0x00, 0x88, 0x00, 0xc3, 0x00, 0xde, - 0x00, 0xf1, 0x00, 0x9e, 0x00, 0xaa, 0x00, 0xf5, 0x00, 0xf4, 0x00, 0xf6, - 0x00, 0xa2, 0x00, 0xad, 0x00, 0xc9, 0x00, 0xc7, 0x00, 0xae, 0x00, 0x62, - 0x00, 0x63, 0x00, 0x90, 0x00, 0x64, 0x00, 0xcb, 0x00, 0x65, 0x00, 0xc8, - 0x00, 0xca, 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xe9, - 0x00, 0x66, 0x00, 0xd3, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xaf, 0x00, 0x67, - 0x00, 0xf0, 0x00, 0x91, 0x00, 0xd6, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0x68, - 0x00, 0xeb, 0x00, 0xed, 0x00, 0x89, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6b, - 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x6e, 0x00, 0xa0, 0x00, 0x6f, 0x00, 0x71, - 0x00, 0x70, 0x00, 0x72, 0x00, 0x73, 0x00, 0x75, 0x00, 0x74, 0x00, 0x76, - 0x00, 0x77, 0x00, 0xea, 0x00, 0x78, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x7b, - 0x00, 0x7d, 0x00, 0x7c, 0x00, 0xb8, 0x00, 0xa1, 0x00, 0x7f, 0x00, 0x7e, - 0x00, 0x80, 0x00, 0x81, 0x00, 0xec, 0x00, 0xee, 0x00, 0xba, 0x07, 0x75, - 0x6e, 0x69, 0x30, 0x30, 0x41, 0x44, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x0a, - 0xff, 0xff, 0x00, 0x0f, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x15, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x02, 0x00, 0x00, 0x00, 0x28, - 0xc0, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x03, - 0x00, 0x01, 0x01, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0xe5, 0x64, 0x3d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x42, 0x17, 0xa0, - 0x00, 0x00, 0x00, 0x00, 0xe5, 0xf9, 0x0a, 0x7c}; -unsigned int MwBoldTTFDataSize = 36548; -#endif diff --git a/src/text/font/ttf.c b/src/text/font/ttf.c deleted file mode 100644 index c5d03b95a..000000000 --- a/src/text/font/ttf.c +++ /dev/null @@ -1,2945 +0,0 @@ -#include - -#if defined(USE_STB_TRUETYPE) || defined(USE_FREETYPE2) -unsigned char MwTTFData[] = { - 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x04, 0x00, 0x20, - 0x46, 0x46, 0x54, 0x4d, 0x94, 0x92, 0x79, 0xd4, 0x00, 0x00, 0x89, 0xa4, - 0x00, 0x00, 0x00, 0x1c, 0x4f, 0x53, 0x2f, 0x32, 0xa1, 0x35, 0x9f, 0x72, - 0x00, 0x00, 0x01, 0xa8, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, - 0x09, 0xe8, 0xe7, 0x70, 0x00, 0x00, 0x05, 0x10, 0x00, 0x00, 0x01, 0x4a, - 0x63, 0x76, 0x74, 0x20, 0x0f, 0x4d, 0x18, 0xa4, 0x00, 0x00, 0x0f, 0x1c, - 0x00, 0x00, 0x00, 0xa2, 0x66, 0x65, 0x61, 0x74, 0xc0, 0x1a, 0x05, 0x59, - 0x00, 0x00, 0x89, 0x74, 0x00, 0x00, 0x00, 0x30, 0x66, 0x70, 0x67, 0x6d, - 0x7e, 0x61, 0xb6, 0x11, 0x00, 0x00, 0x06, 0x5c, 0x00, 0x00, 0x07, 0xb4, - 0x67, 0x61, 0x73, 0x70, 0x00, 0x15, 0x00, 0x23, 0x00, 0x00, 0x88, 0xec, - 0x00, 0x00, 0x00, 0x10, 0x67, 0x6c, 0x79, 0x66, 0x65, 0x79, 0x59, 0xb7, - 0x00, 0x00, 0x11, 0x48, 0x00, 0x00, 0x52, 0x6c, 0x68, 0x65, 0x61, 0x64, - 0x15, 0x0d, 0x9f, 0xf2, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x00, 0x36, - 0x68, 0x68, 0x65, 0x61, 0x0f, 0x3c, 0x06, 0x13, 0x00, 0x00, 0x01, 0x64, - 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, 0x53, 0x6d, 0x50, 0x6f, - 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x08, 0x6b, 0x65, 0x72, 0x6e, - 0x4a, 0x11, 0x58, 0x96, 0x00, 0x00, 0x63, 0xb4, 0x00, 0x00, 0x1a, 0x76, - 0x6c, 0x6f, 0x63, 0x61, 0x41, 0xac, 0x2d, 0xdc, 0x00, 0x00, 0x0f, 0xc0, - 0x00, 0x00, 0x01, 0x86, 0x6d, 0x61, 0x78, 0x70, 0x02, 0x48, 0x01, 0x4a, - 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x00, 0x20, 0x6d, 0x6f, 0x72, 0x78, - 0x00, 0x32, 0x00, 0xbb, 0x00, 0x00, 0x88, 0xfc, 0x00, 0x00, 0x00, 0x78, - 0x6e, 0x61, 0x6d, 0x65, 0x56, 0x44, 0xff, 0x7a, 0x00, 0x00, 0x7e, 0x2c, - 0x00, 0x00, 0x09, 0x08, 0x70, 0x6f, 0x73, 0x74, 0xb1, 0xe2, 0x4e, 0x7c, - 0x00, 0x00, 0x87, 0x34, 0x00, 0x00, 0x01, 0xb8, 0x70, 0x72, 0x65, 0x70, - 0x43, 0xb7, 0x96, 0xa4, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x01, 0x09, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x19, 0x9a, 0xf4, 0xa4, 0xd1, 0x4e, - 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x1f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc9, 0x35, 0x31, 0x8b, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xf9, 0x0a, 0x4d, - 0xff, 0x60, 0xfe, 0x10, 0x07, 0x4c, 0x07, 0x73, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x08, 0x8d, 0xfd, 0xa8, 0x00, 0x00, 0x08, 0x00, 0xff, 0x60, 0xff, 0xa8, - 0x07, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x01, 0x00, 0x00, - 0x00, 0xc2, 0x00, 0x42, 0x00, 0x05, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x02, - 0x00, 0x10, 0x00, 0x2f, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x99, - 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x04, 0x5f, 0x01, 0x90, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x9a, 0x05, 0x33, 0x00, 0x00, 0x01, 0x1f, 0x05, 0x9a, - 0x05, 0x33, 0x00, 0x00, 0x03, 0xd1, 0x00, 0x66, 0x01, 0xf1, 0x08, 0x02, - 0x02, 0x0b, 0x06, 0x06, 0x03, 0x05, 0x04, 0x02, 0x02, 0x04, 0xe0, 0x00, - 0x02, 0xef, 0x40, 0x00, 0x20, 0x5b, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x31, 0x41, 0x53, 0x43, 0x00, 0x40, 0x00, 0x20, 0x00, 0xff, - 0x06, 0x1f, 0xfe, 0x14, 0x00, 0x84, 0x08, 0x8d, 0x02, 0x58, 0x20, 0x00, - 0x01, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x04, 0x48, 0x05, 0xb6, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x02, 0x23, 0x00, 0x98, - 0x03, 0x35, 0x00, 0x85, 0x05, 0x2b, 0x00, 0x33, 0x04, 0x93, 0x00, 0x83, - 0x06, 0x96, 0x00, 0x68, 0x05, 0xd7, 0x00, 0x71, 0x01, 0xc5, 0x00, 0x85, - 0x02, 0x5e, 0x00, 0x52, 0x02, 0x5e, 0x00, 0x3d, 0x04, 0x6a, 0x00, 0x56, - 0x04, 0x93, 0x00, 0x68, 0x01, 0xf6, 0x00, 0x3f, 0x02, 0x93, 0x00, 0x54, - 0x02, 0x21, 0x00, 0x98, 0x02, 0xf0, 0x00, 0x14, 0x04, 0x93, 0x00, 0x66, - 0x04, 0x93, 0x00, 0xbc, 0x04, 0x93, 0x00, 0x64, 0x04, 0x93, 0x00, 0x5e, - 0x04, 0x93, 0x00, 0x2b, 0x04, 0x93, 0x00, 0x85, 0x04, 0x93, 0x00, 0x75, - 0x04, 0x93, 0x00, 0x5e, 0x04, 0x93, 0x00, 0x68, 0x04, 0x93, 0x00, 0x6a, - 0x02, 0x21, 0x00, 0x98, 0x02, 0x21, 0x00, 0x3f, 0x04, 0x93, 0x00, 0x68, - 0x04, 0x93, 0x00, 0x77, 0x04, 0x93, 0x00, 0x68, 0x03, 0x6f, 0x00, 0x1b, - 0x07, 0x31, 0x00, 0x79, 0x05, 0x10, 0x00, 0x00, 0x05, 0x2f, 0x00, 0xc9, - 0x05, 0x0c, 0x00, 0x7d, 0x05, 0xd5, 0x00, 0xc9, 0x04, 0x73, 0x00, 0xc9, - 0x04, 0x21, 0x00, 0xc9, 0x05, 0xd3, 0x00, 0x7d, 0x05, 0xe7, 0x00, 0xc9, - 0x02, 0x3b, 0x00, 0xc9, 0x02, 0x23, 0xff, 0x60, 0x04, 0xe9, 0x00, 0xc9, - 0x04, 0x27, 0x00, 0xc9, 0x07, 0x39, 0x00, 0xc9, 0x06, 0x08, 0x00, 0xc9, - 0x06, 0x3b, 0x00, 0x7d, 0x04, 0xd1, 0x00, 0xc9, 0x06, 0x3b, 0x00, 0x7d, - 0x04, 0xf2, 0x00, 0xc9, 0x04, 0x64, 0x00, 0x6a, 0x04, 0x6d, 0x00, 0x12, - 0x05, 0xd3, 0x00, 0xba, 0x04, 0xc3, 0x00, 0x00, 0x07, 0x68, 0x00, 0x1b, - 0x04, 0x9e, 0x00, 0x08, 0x04, 0x7b, 0x00, 0x00, 0x04, 0x91, 0x00, 0x52, - 0x02, 0xa2, 0x00, 0xa6, 0x02, 0xf0, 0x00, 0x17, 0x02, 0xa2, 0x00, 0x33, - 0x04, 0x56, 0x00, 0x31, 0x03, 0x96, 0xff, 0xfc, 0x04, 0x9e, 0x01, 0x89, - 0x04, 0x73, 0x00, 0x5e, 0x04, 0xe7, 0x00, 0xb0, 0x03, 0xcf, 0x00, 0x73, - 0x04, 0xe7, 0x00, 0x73, 0x04, 0x7d, 0x00, 0x73, 0x02, 0xb6, 0x00, 0x1d, - 0x04, 0x62, 0x00, 0x27, 0x04, 0xe9, 0x00, 0xb0, 0x02, 0x06, 0x00, 0xa2, - 0x02, 0x06, 0xff, 0x91, 0x04, 0x33, 0x00, 0xb0, 0x02, 0x06, 0x00, 0xb0, - 0x07, 0x71, 0x00, 0xb0, 0x04, 0xe9, 0x00, 0xb0, 0x04, 0xd5, 0x00, 0x73, - 0x04, 0xe7, 0x00, 0xb0, 0x04, 0xe7, 0x00, 0x73, 0x03, 0x44, 0x00, 0xb0, - 0x03, 0xd1, 0x00, 0x6a, 0x02, 0xd3, 0x00, 0x1f, 0x04, 0xe9, 0x00, 0xa4, - 0x04, 0x02, 0x00, 0x00, 0x06, 0x39, 0x00, 0x17, 0x04, 0x31, 0x00, 0x27, - 0x04, 0x08, 0x00, 0x02, 0x03, 0xbe, 0x00, 0x52, 0x03, 0x08, 0x00, 0x3d, - 0x04, 0x68, 0x01, 0xee, 0x03, 0x08, 0x00, 0x48, 0x04, 0x93, 0x00, 0x68, - 0x02, 0x14, 0x00, 0x00, 0x02, 0x23, 0x00, 0x98, 0x04, 0x93, 0x00, 0xbe, - 0x04, 0x93, 0x00, 0x3f, 0x04, 0x93, 0x00, 0x7b, 0x04, 0x93, 0x00, 0x1f, - 0x04, 0x68, 0x01, 0xee, 0x04, 0x21, 0x00, 0x7b, 0x04, 0x9e, 0x01, 0x35, - 0x06, 0xa8, 0x00, 0x64, 0x02, 0xd5, 0x00, 0x46, 0x03, 0xfa, 0x00, 0x52, - 0x04, 0x93, 0x00, 0x68, 0x02, 0x93, 0x00, 0x54, 0x06, 0xa8, 0x00, 0x64, - 0x04, 0x00, 0xff, 0xfa, 0x03, 0x6d, 0x00, 0x7f, 0x04, 0x93, 0x00, 0x68, - 0x02, 0xc7, 0x00, 0x31, 0x02, 0xc7, 0x00, 0x21, 0x04, 0x9e, 0x01, 0x89, - 0x04, 0xf4, 0x00, 0xb0, 0x05, 0x3d, 0x00, 0x71, 0x02, 0x21, 0x00, 0x98, - 0x01, 0xd1, 0x00, 0x25, 0x02, 0xc7, 0x00, 0x4c, 0x03, 0x00, 0x00, 0x42, - 0x03, 0xfa, 0x00, 0x50, 0x06, 0x3d, 0x00, 0x4b, 0x06, 0x3d, 0x00, 0x2e, - 0x06, 0x3d, 0x00, 0x1a, 0x03, 0x6f, 0x00, 0x33, 0x05, 0x10, 0x00, 0x00, - 0x05, 0x10, 0x00, 0x00, 0x05, 0x10, 0x00, 0x00, 0x05, 0x10, 0x00, 0x00, - 0x05, 0x10, 0x00, 0x00, 0x05, 0x10, 0x00, 0x00, 0x06, 0xfc, 0xff, 0xfe, - 0x05, 0x0c, 0x00, 0x7d, 0x04, 0x73, 0x00, 0xc9, 0x04, 0x73, 0x00, 0xc9, - 0x04, 0x73, 0x00, 0xc9, 0x04, 0x73, 0x00, 0xc9, 0x02, 0x3b, 0x00, 0x05, - 0x02, 0x3b, 0x00, 0xb3, 0x02, 0x3b, 0xff, 0xc7, 0x02, 0x3b, 0x00, 0x05, - 0x05, 0xc7, 0x00, 0x2f, 0x06, 0x08, 0x00, 0xc9, 0x06, 0x3b, 0x00, 0x7d, - 0x06, 0x3b, 0x00, 0x7d, 0x06, 0x3b, 0x00, 0x7d, 0x06, 0x3b, 0x00, 0x7d, - 0x06, 0x3b, 0x00, 0x7d, 0x04, 0x93, 0x00, 0x85, 0x06, 0x3b, 0x00, 0x7d, - 0x05, 0xd3, 0x00, 0xba, 0x05, 0xd3, 0x00, 0xba, 0x05, 0xd3, 0x00, 0xba, - 0x05, 0xd3, 0x00, 0xba, 0x04, 0x7b, 0x00, 0x00, 0x04, 0xe3, 0x00, 0xc9, - 0x04, 0xfa, 0x00, 0xb0, 0x04, 0x73, 0x00, 0x5e, 0x04, 0x73, 0x00, 0x5e, - 0x04, 0x73, 0x00, 0x5e, 0x04, 0x73, 0x00, 0x5e, 0x04, 0x73, 0x00, 0x5e, - 0x04, 0x73, 0x00, 0x5e, 0x06, 0xdd, 0x00, 0x5e, 0x03, 0xcf, 0x00, 0x73, - 0x04, 0x7d, 0x00, 0x73, 0x04, 0x7d, 0x00, 0x73, 0x04, 0x7d, 0x00, 0x73, - 0x04, 0x7d, 0x00, 0x73, 0x02, 0x06, 0xff, 0xda, 0x02, 0x06, 0x00, 0xa9, - 0x02, 0x06, 0xff, 0xb3, 0x02, 0x06, 0xff, 0xec, 0x04, 0xc5, 0x00, 0x71, - 0x04, 0xe9, 0x00, 0xb0, 0x04, 0xd5, 0x00, 0x73, 0x04, 0xd5, 0x00, 0x73, - 0x04, 0xd5, 0x00, 0x73, 0x04, 0xd5, 0x00, 0x73, 0x04, 0xd5, 0x00, 0x73, - 0x04, 0x93, 0x00, 0x68, 0x04, 0xd5, 0x00, 0x73, 0x04, 0xe9, 0x00, 0xa4, - 0x04, 0xe9, 0x00, 0xa4, 0x04, 0xe9, 0x00, 0xa4, 0x04, 0xe9, 0x00, 0xa4, - 0x04, 0x08, 0x00, 0x02, 0x04, 0xe7, 0x00, 0xb0, 0x04, 0x08, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x03, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x7e, 0x00, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x20, 0x00, 0xa0, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xc2, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x04, - 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, - 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, - 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, - 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x00, 0x86, 0x87, - 0x89, 0x8b, 0x93, 0x98, 0x9e, 0xa3, 0xa2, 0xa4, 0xa6, 0xa5, 0xa7, 0xa9, - 0xab, 0xaa, 0xac, 0xad, 0xaf, 0xae, 0xb0, 0xb1, 0xb3, 0xb5, 0xb4, 0xb6, - 0xb8, 0xb7, 0xbc, 0xbb, 0xbd, 0xbe, 0x00, 0x72, 0x64, 0x65, 0x69, 0x00, - 0x78, 0xa1, 0x70, 0x6b, 0x00, 0x76, 0x6a, 0x00, 0x88, 0x9a, 0x00, 0x73, - 0x00, 0x00, 0x67, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x7c, 0x00, - 0xa8, 0xba, 0x81, 0x63, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x7d, 0x00, - 0x62, 0x82, 0x85, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb9, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, - 0x00, 0x00, 0x00, 0x84, 0x8c, 0x83, 0x8d, 0x8a, 0x8f, 0x90, 0x91, 0x8e, - 0x95, 0x96, 0x00, 0x94, 0x9c, 0x9d, 0x9b, 0x00, 0x00, 0x00, 0x71, 0x00, - 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x47, 0x5b, 0x5a, - 0x59, 0x58, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x4f, 0x4e, 0x4d, 0x4c, - 0x4b, 0x4a, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, - 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x31, - 0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, - 0x21, 0x1f, 0x18, 0x14, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0b, 0x0a, 0x09, - 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x2c, 0x20, 0xb0, - 0x01, 0x60, 0x45, 0xb0, 0x03, 0x25, 0x20, 0x11, 0x46, 0x61, 0x23, 0x45, - 0x23, 0x61, 0x48, 0x2d, 0x2c, 0x20, 0x45, 0x18, 0x68, 0x44, 0x2d, 0x2c, - 0x45, 0x23, 0x46, 0x60, 0xb0, 0x20, 0x61, 0x20, 0xb0, 0x46, 0x60, 0xb0, - 0x04, 0x26, 0x23, 0x48, 0x48, 0x2d, 0x2c, 0x45, 0x23, 0x46, 0x23, 0x61, - 0xb0, 0x20, 0x60, 0x20, 0xb0, 0x26, 0x61, 0xb0, 0x20, 0x61, 0xb0, 0x04, - 0x26, 0x23, 0x48, 0x48, 0x2d, 0x2c, 0x45, 0x23, 0x46, 0x60, 0xb0, 0x40, - 0x61, 0x20, 0xb0, 0x66, 0x60, 0xb0, 0x04, 0x26, 0x23, 0x48, 0x48, 0x2d, - 0x2c, 0x45, 0x23, 0x46, 0x23, 0x61, 0xb0, 0x40, 0x60, 0x20, 0xb0, 0x26, - 0x61, 0xb0, 0x40, 0x61, 0xb0, 0x04, 0x26, 0x23, 0x48, 0x48, 0x2d, 0x2c, - 0x01, 0x10, 0x20, 0x3c, 0x00, 0x3c, 0x2d, 0x2c, 0x20, 0x45, 0x23, 0x20, - 0xb0, 0xcd, 0x44, 0x23, 0x20, 0xb8, 0x01, 0x5a, 0x51, 0x58, 0x23, 0x20, - 0xb0, 0x8d, 0x44, 0x23, 0x59, 0x20, 0xb0, 0xed, 0x51, 0x58, 0x23, 0x20, - 0xb0, 0x4d, 0x44, 0x23, 0x59, 0x20, 0xb0, 0x04, 0x26, 0x51, 0x58, 0x23, - 0x20, 0xb0, 0x0d, 0x44, 0x23, 0x59, 0x21, 0x21, 0x2d, 0x2c, 0x20, 0x20, - 0x45, 0x18, 0x68, 0x44, 0x20, 0xb0, 0x01, 0x60, 0x20, 0x45, 0xb0, 0x46, - 0x76, 0x68, 0x8a, 0x45, 0x60, 0x44, 0x2d, 0x2c, 0x01, 0xb1, 0x0b, 0x0a, - 0x43, 0x23, 0x43, 0x65, 0x0a, 0x2d, 0x2c, 0x00, 0xb1, 0x0a, 0x0b, 0x43, - 0x23, 0x43, 0x0b, 0x2d, 0x2c, 0x00, 0xb0, 0x28, 0x23, 0x70, 0xb1, 0x01, - 0x28, 0x3e, 0x01, 0xb0, 0x28, 0x23, 0x70, 0xb1, 0x02, 0x28, 0x45, 0x3a, - 0xb1, 0x02, 0x00, 0x08, 0x0d, 0x2d, 0x2c, 0x20, 0x45, 0xb0, 0x03, 0x25, - 0x45, 0x61, 0x64, 0xb0, 0x50, 0x51, 0x58, 0x45, 0x44, 0x1b, 0x21, 0x21, - 0x59, 0x2d, 0x2c, 0x49, 0xb0, 0x0e, 0x23, 0x44, 0x2d, 0x2c, 0x20, 0x45, - 0xb0, 0x00, 0x43, 0x60, 0x44, 0x2d, 0x2c, 0x01, 0xb0, 0x06, 0x43, 0xb0, - 0x07, 0x43, 0x65, 0x0a, 0x2d, 0x2c, 0x20, 0x69, 0xb0, 0x40, 0x61, 0xb0, - 0x00, 0x8b, 0x20, 0xb1, 0x2c, 0xc0, 0x8a, 0x8c, 0xb8, 0x10, 0x00, 0x62, - 0x60, 0x2b, 0x0c, 0x64, 0x23, 0x64, 0x61, 0x5c, 0x58, 0xb0, 0x03, 0x61, - 0x59, 0x2d, 0x2c, 0x8a, 0x03, 0x45, 0x8a, 0x8a, 0x87, 0xb0, 0x11, 0x2b, - 0xb0, 0x29, 0x23, 0x44, 0xb0, 0x29, 0x7a, 0xe4, 0x18, 0x2d, 0x2c, 0x45, - 0x65, 0xb0, 0x2c, 0x23, 0x44, 0x45, 0xb0, 0x2b, 0x23, 0x44, 0x2d, 0x2c, - 0x4b, 0x52, 0x58, 0x45, 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x4b, - 0x51, 0x58, 0x45, 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x01, 0xb0, - 0x05, 0x25, 0x10, 0x23, 0x20, 0x8a, 0xf5, 0x00, 0xb0, 0x01, 0x60, 0x23, - 0xed, 0xec, 0x2d, 0x2c, 0x01, 0xb0, 0x05, 0x25, 0x10, 0x23, 0x20, 0x8a, - 0xf5, 0x00, 0xb0, 0x01, 0x61, 0x23, 0xed, 0xec, 0x2d, 0x2c, 0x01, 0xb0, - 0x06, 0x25, 0x10, 0xf5, 0x00, 0xed, 0xec, 0x2d, 0x2c, 0xb0, 0x02, 0x43, - 0xb0, 0x01, 0x52, 0x58, 0x21, 0x21, 0x21, 0x21, 0x21, 0x1b, 0x46, 0x23, - 0x46, 0x60, 0x8a, 0x8a, 0x46, 0x23, 0x20, 0x46, 0x8a, 0x60, 0x8a, 0x61, - 0xb8, 0xff, 0x80, 0x62, 0x23, 0x20, 0x10, 0x23, 0x8a, 0xb1, 0x0c, 0x0c, - 0x8a, 0x70, 0x45, 0x60, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x01, 0x61, - 0xb8, 0xff, 0xba, 0x8b, 0x1b, 0xb0, 0x46, 0x8c, 0x59, 0xb0, 0x10, 0x60, - 0x68, 0x01, 0x3a, 0x59, 0x2d, 0x2c, 0x20, 0x45, 0xb0, 0x03, 0x25, 0x46, - 0x52, 0x4b, 0xb0, 0x13, 0x51, 0x5b, 0x58, 0xb0, 0x02, 0x25, 0x46, 0x20, - 0x68, 0x61, 0xb0, 0x03, 0x25, 0xb0, 0x03, 0x25, 0x3f, 0x23, 0x21, 0x38, - 0x1b, 0x21, 0x11, 0x59, 0x2d, 0x2c, 0x20, 0x45, 0xb0, 0x03, 0x25, 0x46, - 0x50, 0x58, 0xb0, 0x02, 0x25, 0x46, 0x20, 0x68, 0x61, 0xb0, 0x03, 0x25, - 0xb0, 0x03, 0x25, 0x3f, 0x23, 0x21, 0x38, 0x1b, 0x21, 0x11, 0x59, 0x2d, - 0x2c, 0x00, 0xb0, 0x07, 0x43, 0xb0, 0x06, 0x43, 0x0b, 0x2d, 0x2c, 0x21, - 0x21, 0x0c, 0x64, 0x23, 0x64, 0x8b, 0xb8, 0x40, 0x00, 0x62, 0x2d, 0x2c, - 0x21, 0xb0, 0x80, 0x51, 0x58, 0x0c, 0x64, 0x23, 0x64, 0x8b, 0xb8, 0x20, - 0x00, 0x62, 0x1b, 0xb2, 0x00, 0x40, 0x2f, 0x2b, 0x59, 0xb0, 0x02, 0x60, - 0x2d, 0x2c, 0x21, 0xb0, 0xc0, 0x51, 0x58, 0x0c, 0x64, 0x23, 0x64, 0x8b, - 0xb8, 0x15, 0x55, 0x62, 0x1b, 0xb2, 0x00, 0x80, 0x2f, 0x2b, 0x59, 0xb0, - 0x02, 0x60, 0x2d, 0x2c, 0x0c, 0x64, 0x23, 0x64, 0x8b, 0xb8, 0x40, 0x00, - 0x62, 0x60, 0x23, 0x21, 0x2d, 0x2c, 0x4b, 0x53, 0x58, 0x8a, 0xb0, 0x04, - 0x25, 0x49, 0x64, 0x23, 0x45, 0x69, 0xb0, 0x40, 0x8b, 0x61, 0xb0, 0x80, - 0x62, 0xb0, 0x20, 0x61, 0x6a, 0xb0, 0x0e, 0x23, 0x44, 0x23, 0x10, 0xb0, - 0x0e, 0xf6, 0x1b, 0x21, 0x23, 0x8a, 0x12, 0x11, 0x20, 0x39, 0x2f, 0x59, - 0x2d, 0x2c, 0x4b, 0x53, 0x58, 0x20, 0xb0, 0x03, 0x25, 0x49, 0x64, 0x69, - 0x20, 0xb0, 0x05, 0x26, 0xb0, 0x06, 0x25, 0x49, 0x64, 0x23, 0x61, 0xb0, - 0x80, 0x62, 0xb0, 0x20, 0x61, 0x6a, 0xb0, 0x0e, 0x23, 0x44, 0xb0, 0x04, - 0x26, 0x10, 0xb0, 0x0e, 0xf6, 0x8a, 0x10, 0xb0, 0x0e, 0x23, 0x44, 0xb0, - 0x0e, 0xf6, 0xb0, 0x0e, 0x23, 0x44, 0xb0, 0x0e, 0xed, 0x1b, 0x8a, 0xb0, - 0x04, 0x26, 0x11, 0x12, 0x20, 0x39, 0x23, 0x20, 0x39, 0x2f, 0x2f, 0x59, - 0x2d, 0x2c, 0x45, 0x23, 0x45, 0x60, 0x23, 0x45, 0x60, 0x23, 0x45, 0x60, - 0x23, 0x76, 0x68, 0x18, 0xb0, 0x80, 0x62, 0x20, 0x2d, 0x2c, 0xb0, 0x48, - 0x2b, 0x2d, 0x2c, 0x20, 0x45, 0xb0, 0x00, 0x54, 0x58, 0xb0, 0x40, 0x44, - 0x20, 0x45, 0xb0, 0x40, 0x61, 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, - 0x45, 0xb1, 0x30, 0x2f, 0x45, 0x23, 0x45, 0x61, 0x60, 0xb0, 0x01, 0x60, - 0x69, 0x44, 0x2d, 0x2c, 0x4b, 0x51, 0x58, 0xb0, 0x2f, 0x23, 0x70, 0xb0, - 0x14, 0x23, 0x42, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x4b, 0x51, 0x58, - 0x20, 0xb0, 0x03, 0x25, 0x45, 0x69, 0x53, 0x58, 0x44, 0x1b, 0x21, 0x21, - 0x59, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x45, 0xb0, 0x14, 0x43, 0xb0, - 0x00, 0x60, 0x63, 0xb0, 0x01, 0x60, 0x69, 0x44, 0x2d, 0x2c, 0xb0, 0x2f, - 0x45, 0x44, 0x2d, 0x2c, 0x45, 0x23, 0x20, 0x45, 0x8a, 0x60, 0x44, 0x2d, - 0x2c, 0x45, 0x23, 0x45, 0x60, 0x44, 0x2d, 0x2c, 0x4b, 0x23, 0x51, 0x58, - 0xb9, 0x00, 0x33, 0xff, 0xe0, 0xb1, 0x34, 0x20, 0x1b, 0xb3, 0x33, 0x00, - 0x34, 0x00, 0x59, 0x44, 0x44, 0x2d, 0x2c, 0xb0, 0x16, 0x43, 0x58, 0xb0, - 0x03, 0x26, 0x45, 0x8a, 0x58, 0x64, 0x66, 0xb0, 0x1f, 0x60, 0x1b, 0x64, - 0xb0, 0x20, 0x60, 0x66, 0x20, 0x58, 0x1b, 0x21, 0xb0, 0x40, 0x59, 0xb0, - 0x01, 0x61, 0x59, 0x23, 0x58, 0x65, 0x59, 0xb0, 0x29, 0x23, 0x44, 0x23, - 0x10, 0xb0, 0x29, 0xe0, 0x1b, 0x21, 0x21, 0x21, 0x21, 0x21, 0x59, 0x2d, - 0x2c, 0xb0, 0x02, 0x43, 0x54, 0x58, 0x4b, 0x53, 0x23, 0x4b, 0x51, 0x5a, - 0x58, 0x38, 0x1b, 0x21, 0x21, 0x59, 0x1b, 0x21, 0x21, 0x21, 0x21, 0x59, - 0x2d, 0x2c, 0xb0, 0x16, 0x43, 0x58, 0xb0, 0x04, 0x25, 0x45, 0x64, 0xb0, - 0x20, 0x60, 0x66, 0x20, 0x58, 0x1b, 0x21, 0xb0, 0x40, 0x59, 0xb0, 0x01, - 0x61, 0x23, 0x58, 0x1b, 0x65, 0x59, 0xb0, 0x29, 0x23, 0x44, 0xb0, 0x05, - 0x25, 0xb0, 0x08, 0x25, 0x08, 0x20, 0x58, 0x02, 0x1b, 0x03, 0x59, 0xb0, - 0x04, 0x25, 0x10, 0xb0, 0x05, 0x25, 0x20, 0x46, 0xb0, 0x04, 0x25, 0x23, - 0x42, 0x3c, 0xb0, 0x04, 0x25, 0xb0, 0x07, 0x25, 0x08, 0xb0, 0x07, 0x25, - 0x10, 0xb0, 0x06, 0x25, 0x20, 0x46, 0xb0, 0x04, 0x25, 0xb0, 0x01, 0x60, - 0x23, 0x42, 0x3c, 0x20, 0x58, 0x01, 0x1b, 0x00, 0x59, 0xb0, 0x04, 0x25, - 0x10, 0xb0, 0x05, 0x25, 0xb0, 0x29, 0xe0, 0xb0, 0x29, 0x20, 0x45, 0x65, - 0x44, 0xb0, 0x07, 0x25, 0x10, 0xb0, 0x06, 0x25, 0xb0, 0x29, 0xe0, 0xb0, - 0x05, 0x25, 0xb0, 0x08, 0x25, 0x08, 0x20, 0x58, 0x02, 0x1b, 0x03, 0x59, - 0xb0, 0x05, 0x25, 0xb0, 0x03, 0x25, 0x43, 0x48, 0xb0, 0x04, 0x25, 0xb0, - 0x07, 0x25, 0x08, 0xb0, 0x06, 0x25, 0xb0, 0x03, 0x25, 0xb0, 0x01, 0x60, - 0x43, 0x48, 0x1b, 0x21, 0x59, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, - 0x2d, 0x2c, 0x02, 0xb0, 0x04, 0x25, 0x20, 0x20, 0x46, 0xb0, 0x04, 0x25, - 0x23, 0x42, 0xb0, 0x05, 0x25, 0x08, 0xb0, 0x03, 0x25, 0x45, 0x48, 0x21, - 0x21, 0x21, 0x21, 0x2d, 0x2c, 0x02, 0xb0, 0x03, 0x25, 0x20, 0xb0, 0x04, - 0x25, 0x08, 0xb0, 0x02, 0x25, 0x43, 0x48, 0x21, 0x21, 0x21, 0x2d, 0x2c, - 0x45, 0x23, 0x20, 0x45, 0x18, 0x20, 0xb0, 0x00, 0x50, 0x20, 0x58, 0x23, - 0x65, 0x23, 0x59, 0x23, 0x68, 0x20, 0xb0, 0x40, 0x50, 0x58, 0x21, 0xb0, - 0x40, 0x59, 0x23, 0x58, 0x65, 0x59, 0x8a, 0x60, 0x44, 0x2d, 0x2c, 0x4b, - 0x53, 0x23, 0x4b, 0x51, 0x5a, 0x58, 0x20, 0x45, 0x8a, 0x60, 0x44, 0x1b, - 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x4b, 0x54, 0x58, 0x20, 0x45, 0x8a, 0x60, - 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x4b, 0x53, 0x23, 0x4b, 0x51, - 0x5a, 0x58, 0x38, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x00, 0x21, - 0x4b, 0x54, 0x58, 0x38, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x02, - 0x43, 0x54, 0x58, 0xb0, 0x46, 0x2b, 0x1b, 0x21, 0x21, 0x21, 0x21, 0x59, - 0x2d, 0x2c, 0xb0, 0x02, 0x43, 0x54, 0x58, 0xb0, 0x47, 0x2b, 0x1b, 0x21, - 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x02, 0x43, 0x54, 0x58, 0xb0, 0x48, - 0x2b, 0x1b, 0x21, 0x21, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0xb0, 0x02, 0x43, - 0x54, 0x58, 0xb0, 0x49, 0x2b, 0x1b, 0x21, 0x21, 0x21, 0x59, 0x2d, 0x2c, - 0x20, 0x8a, 0x08, 0x23, 0x4b, 0x53, 0x8a, 0x4b, 0x51, 0x5a, 0x58, 0x23, - 0x38, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0x2c, 0x00, 0xb0, 0x02, 0x25, 0x49, - 0xb0, 0x00, 0x53, 0x58, 0x20, 0xb0, 0x40, 0x38, 0x11, 0x1b, 0x21, 0x59, - 0x2d, 0x2c, 0x01, 0x46, 0x23, 0x46, 0x60, 0x23, 0x46, 0x61, 0x23, 0x20, - 0x10, 0x20, 0x46, 0x8a, 0x61, 0xb8, 0xff, 0x80, 0x62, 0x8a, 0xb1, 0x40, - 0x40, 0x8a, 0x70, 0x45, 0x60, 0x68, 0x3a, 0x2d, 0x2c, 0x20, 0x8a, 0x23, - 0x49, 0x64, 0x8a, 0x23, 0x53, 0x58, 0x3c, 0x1b, 0x21, 0x59, 0x2d, 0x2c, - 0x4b, 0x52, 0x58, 0x7d, 0x1b, 0x7a, 0x59, 0x2d, 0x2c, 0xb0, 0x12, 0x00, - 0x4b, 0x01, 0x4b, 0x54, 0x42, 0x2d, 0x2c, 0xb1, 0x02, 0x00, 0x42, 0xb1, - 0x23, 0x01, 0x88, 0x51, 0xb1, 0x40, 0x01, 0x88, 0x53, 0x5a, 0x58, 0xb9, - 0x10, 0x00, 0x00, 0x20, 0x88, 0x54, 0x58, 0xb2, 0x02, 0x01, 0x02, 0x43, - 0x60, 0x42, 0x59, 0xb1, 0x24, 0x01, 0x88, 0x51, 0x58, 0xb9, 0x20, 0x00, - 0x00, 0x40, 0x88, 0x54, 0x58, 0xb2, 0x02, 0x02, 0x02, 0x43, 0x60, 0x42, - 0xb1, 0x24, 0x01, 0x88, 0x54, 0x58, 0xb2, 0x02, 0x20, 0x02, 0x43, 0x60, - 0x42, 0x00, 0x4b, 0x01, 0x4b, 0x52, 0x58, 0xb2, 0x02, 0x08, 0x02, 0x43, - 0x60, 0x42, 0x59, 0x1b, 0xb9, 0x40, 0x00, 0x00, 0x80, 0x88, 0x54, 0x58, - 0xb2, 0x02, 0x04, 0x02, 0x43, 0x60, 0x42, 0x59, 0xb9, 0x40, 0x00, 0x00, - 0x80, 0x63, 0xb8, 0x01, 0x00, 0x88, 0x54, 0x58, 0xb2, 0x02, 0x08, 0x02, - 0x43, 0x60, 0x42, 0x59, 0xb9, 0x40, 0x00, 0x01, 0x00, 0x63, 0xb8, 0x02, - 0x00, 0x88, 0x54, 0x58, 0xb2, 0x02, 0x10, 0x02, 0x43, 0x60, 0x42, 0x59, - 0xb1, 0x26, 0x01, 0x88, 0x51, 0x58, 0xb9, 0x40, 0x00, 0x02, 0x00, 0x63, - 0xb8, 0x04, 0x00, 0x88, 0x54, 0x58, 0xb2, 0x02, 0x40, 0x02, 0x43, 0x60, - 0x42, 0x59, 0xb9, 0x40, 0x00, 0x04, 0x00, 0x63, 0xb8, 0x08, 0x00, 0x88, - 0x54, 0x58, 0xb2, 0x02, 0x80, 0x02, 0x43, 0x60, 0x42, 0x59, 0x59, 0x59, - 0x59, 0x59, 0x59, 0xb1, 0x00, 0x02, 0x43, 0x54, 0x58, 0x40, 0x0a, 0x05, - 0x40, 0x08, 0x40, 0x09, 0x40, 0x0c, 0x02, 0x0d, 0x02, 0x1b, 0xb1, 0x01, - 0x02, 0x43, 0x54, 0x58, 0xb2, 0x05, 0x40, 0x08, 0xba, 0x01, 0x00, 0x00, - 0x09, 0x01, 0x00, 0xb3, 0x0c, 0x01, 0x0d, 0x01, 0x1b, 0xb1, 0x80, 0x02, - 0x43, 0x52, 0x58, 0xb2, 0x05, 0x40, 0x08, 0xb8, 0x01, 0x80, 0xb1, 0x09, - 0x40, 0x1b, 0xb2, 0x05, 0x40, 0x08, 0xba, 0x01, 0x80, 0x00, 0x09, 0x01, - 0x40, 0x59, 0xb9, 0x40, 0x00, 0x00, 0x80, 0x88, 0x55, 0xb9, 0x40, 0x00, - 0x02, 0x00, 0x63, 0xb8, 0x04, 0x00, 0x88, 0x55, 0x5a, 0x58, 0xb3, 0x0c, - 0x00, 0x0d, 0x01, 0x1b, 0xb3, 0x0c, 0x00, 0x0d, 0x01, 0x59, 0x59, 0x59, - 0x42, 0x42, 0x42, 0x42, 0x42, 0x2d, 0x2c, 0x45, 0x18, 0x68, 0x23, 0x4b, - 0x51, 0x58, 0x23, 0x20, 0x45, 0x20, 0x64, 0xb0, 0x40, 0x50, 0x58, 0x7c, - 0x59, 0x68, 0x8a, 0x60, 0x59, 0x44, 0x2d, 0x2c, 0xb0, 0x00, 0x16, 0xb0, - 0x02, 0x25, 0xb0, 0x02, 0x25, 0x01, 0xb0, 0x01, 0x23, 0x3e, 0x00, 0xb0, - 0x02, 0x23, 0x3e, 0xb1, 0x01, 0x02, 0x06, 0x0c, 0xb0, 0x0a, 0x23, 0x65, - 0x42, 0xb0, 0x0b, 0x23, 0x42, 0x01, 0xb0, 0x01, 0x23, 0x3f, 0x00, 0xb0, - 0x02, 0x23, 0x3f, 0xb1, 0x01, 0x02, 0x06, 0x0c, 0xb0, 0x06, 0x23, 0x65, - 0x42, 0xb0, 0x07, 0x23, 0x42, 0xb0, 0x01, 0x16, 0x01, 0x2d, 0x2c, 0xb0, - 0x80, 0xb0, 0x02, 0x43, 0x50, 0xb0, 0x01, 0xb0, 0x02, 0x43, 0x54, 0x5b, - 0x58, 0x21, 0x23, 0x10, 0xb0, 0x20, 0x1a, 0xc9, 0x1b, 0x8a, 0x10, 0xed, - 0x59, 0x2d, 0x2c, 0xb0, 0x59, 0x2b, 0x2d, 0x2c, 0x8a, 0x10, 0xe5, 0x2d, - 0x40, 0x99, 0x09, 0x21, 0x48, 0x20, 0x55, 0x20, 0x01, 0x1e, 0x55, 0x1f, - 0x48, 0x03, 0x55, 0x1f, 0x1e, 0x01, 0x0f, 0x1e, 0x3f, 0x1e, 0xaf, 0x1e, - 0x03, 0x4d, 0x4b, 0x26, 0x1f, 0x4c, 0x4b, 0x33, 0x1f, 0x4b, 0x46, 0x25, - 0x1f, 0x26, 0x34, 0x10, 0x55, 0x25, 0x33, 0x24, 0x55, 0x19, 0x13, 0xff, - 0x1f, 0x07, 0x04, 0xff, 0x1f, 0x06, 0x03, 0xff, 0x1f, 0x4a, 0x49, 0x33, - 0x1f, 0x49, 0x46, 0x25, 0x1f, 0x13, 0x33, 0x12, 0x55, 0x05, 0x01, 0x03, - 0x55, 0x04, 0x33, 0x03, 0x55, 0x1f, 0x03, 0x01, 0x0f, 0x03, 0x3f, 0x03, - 0xaf, 0x03, 0x03, 0x47, 0x46, 0x19, 0x1f, 0xeb, 0x46, 0x01, 0x23, 0x33, - 0x22, 0x55, 0x1c, 0x33, 0x1b, 0x55, 0x16, 0x33, 0x15, 0x55, 0x11, 0x01, - 0x0f, 0x55, 0x10, 0x33, 0x0f, 0x55, 0x0f, 0x0f, 0x4f, 0x0f, 0x02, 0x1f, - 0x0f, 0xcf, 0x0f, 0x02, 0x0f, 0x0f, 0xff, 0x0f, 0x02, 0x06, 0x02, 0x01, - 0x00, 0x55, 0x01, 0x33, 0x00, 0x55, 0x6f, 0x00, 0x7f, 0x00, 0xaf, 0x00, - 0xef, 0x00, 0x04, 0x10, 0x00, 0x01, 0x80, 0x16, 0x01, 0x05, 0x01, 0xb8, - 0x01, 0x90, 0xb1, 0x54, 0x53, 0x2b, 0x2b, 0x4b, 0xb8, 0x07, 0xff, 0x52, - 0x4b, 0xb0, 0x09, 0x50, 0x5b, 0xb0, 0x01, 0x88, 0xb0, 0x25, 0x53, 0xb0, - 0x01, 0x88, 0xb0, 0x40, 0x51, 0x5a, 0xb0, 0x06, 0x88, 0xb0, 0x00, 0x55, - 0x5a, 0x5b, 0x58, 0xb1, 0x01, 0x01, 0x8e, 0x59, 0x85, 0x8d, 0x8d, 0x00, - 0x42, 0x1d, 0x4b, 0xb0, 0x32, 0x53, 0x58, 0xb0, 0x20, 0x1d, 0x59, 0x4b, - 0xb0, 0x64, 0x53, 0x58, 0xb0, 0x10, 0x1d, 0xb1, 0x16, 0x00, 0x42, 0x59, - 0x73, 0x73, 0x2b, 0x2b, 0x5e, 0x73, 0x74, 0x75, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x74, 0x2b, 0x73, 0x74, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x73, 0x74, 0x2b, 0x2b, 0x2b, 0x18, - 0x5e, 0x00, 0x00, 0x00, 0x06, 0x14, 0x00, 0x17, 0x00, 0x4e, 0x05, 0xb6, - 0x00, 0x17, 0x00, 0x75, 0x05, 0xb6, 0x05, 0xcd, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x48, - 0x00, 0x14, 0x00, 0x91, 0x00, 0x00, 0xff, 0xec, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xec, 0x00, 0x00, 0x00, 0x00, 0xff, 0xec, 0x00, 0x00, 0xfe, 0x14, - 0xff, 0xec, 0x00, 0x00, 0x05, 0xb6, 0x00, 0x13, 0xfc, 0x94, 0xff, 0xed, - 0xfe, 0x85, 0xff, 0xea, 0xfe, 0xa9, 0xff, 0xec, 0x00, 0x18, 0xfe, 0xbc, - 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, 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, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x8b, 0x00, 0x81, 0x00, 0xdd, 0x00, 0x98, 0x00, 0x8f, 0x00, 0x8e, - 0x00, 0x99, 0x00, 0x88, 0x00, 0x81, 0x01, 0x0f, 0x00, 0x8a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, - 0x00, 0x58, 0x00, 0xe0, 0x01, 0x5c, 0x01, 0xce, 0x02, 0x4c, 0x02, 0x66, - 0x02, 0x92, 0x02, 0xbe, 0x02, 0xfa, 0x03, 0x26, 0x03, 0x44, 0x03, 0x5a, - 0x03, 0x7c, 0x03, 0x96, 0x03, 0xd8, 0x04, 0x02, 0x04, 0x44, 0x04, 0xa2, - 0x04, 0xe4, 0x05, 0x30, 0x05, 0x8e, 0x05, 0xb0, 0x06, 0x20, 0x06, 0x7e, - 0x06, 0xb4, 0x06, 0xe8, 0x07, 0x08, 0x07, 0x32, 0x07, 0x52, 0x07, 0xaa, - 0x08, 0x32, 0x08, 0x72, 0x08, 0xce, 0x09, 0x0c, 0x09, 0x48, 0x09, 0x7e, - 0x09, 0xac, 0x09, 0xfc, 0x0a, 0x2e, 0x0a, 0x44, 0x0a, 0x6c, 0x0a, 0x9c, - 0x0a, 0xba, 0x0a, 0xf8, 0x0b, 0x30, 0x0b, 0x76, 0x0b, 0xb4, 0x0c, 0x08, - 0x0c, 0x56, 0x0c, 0xaa, 0x0c, 0xce, 0x0d, 0x02, 0x0d, 0x2a, 0x0d, 0x6e, - 0x0d, 0x9e, 0x0d, 0xc6, 0x0d, 0xf2, 0x0e, 0x16, 0x0e, 0x30, 0x0e, 0x54, - 0x0e, 0x76, 0x0e, 0x8c, 0x0e, 0xac, 0x0f, 0x08, 0x0f, 0x5e, 0x0f, 0x9a, - 0x0f, 0xee, 0x10, 0x3c, 0x10, 0x7c, 0x11, 0x10, 0x11, 0x4e, 0x11, 0x7c, - 0x11, 0xba, 0x11, 0xf8, 0x12, 0x10, 0x12, 0x68, 0x12, 0xa2, 0x12, 0xe4, - 0x13, 0x3a, 0x13, 0x8e, 0x13, 0xc2, 0x14, 0x14, 0x14, 0x54, 0x14, 0x92, - 0x14, 0xba, 0x15, 0x06, 0x15, 0x36, 0x15, 0x70, 0x15, 0x9c, 0x15, 0xde, - 0x15, 0xf6, 0x16, 0x3c, 0x16, 0x76, 0x16, 0x76, 0x16, 0xa8, 0x16, 0xf4, - 0x17, 0x46, 0x17, 0x94, 0x17, 0xe8, 0x18, 0x0e, 0x18, 0x8a, 0x18, 0xc0, - 0x19, 0x3c, 0x19, 0x8a, 0x19, 0xc6, 0x19, 0xe4, 0x19, 0xec, 0x1a, 0x76, - 0x1a, 0x8c, 0x1a, 0xc4, 0x1a, 0xe2, 0x1b, 0x1c, 0x1b, 0x6c, 0x1b, 0x8c, - 0x1b, 0xcc, 0x1b, 0xfc, 0x1c, 0x1e, 0x1c, 0x50, 0x1c, 0x78, 0x1c, 0xb2, - 0x1c, 0xea, 0x1d, 0x28, 0x1d, 0x6a, 0x1d, 0xc4, 0x1e, 0x22, 0x1e, 0x34, - 0x1e, 0x46, 0x1e, 0x80, 0x1e, 0xc4, 0x1e, 0xd6, 0x1f, 0x1a, 0x1f, 0x68, - 0x1f, 0x74, 0x1f, 0x86, 0x1f, 0x98, 0x1f, 0xc8, 0x1f, 0xda, 0x1f, 0xec, - 0x1f, 0xfe, 0x20, 0x22, 0x20, 0x34, 0x20, 0x8c, 0x20, 0xce, 0x20, 0xe0, - 0x20, 0xf2, 0x21, 0x3c, 0x21, 0x90, 0x21, 0xa2, 0x21, 0xd0, 0x22, 0x3c, - 0x22, 0x4e, 0x22, 0x60, 0x22, 0x98, 0x22, 0xaa, 0x22, 0xbc, 0x22, 0xfe, - 0x23, 0x66, 0x23, 0x76, 0x23, 0x86, 0x23, 0xd6, 0x24, 0x30, 0x24, 0x42, - 0x24, 0x9c, 0x25, 0x28, 0x25, 0x34, 0x25, 0x44, 0x25, 0x54, 0x25, 0x9a, - 0x25, 0xac, 0x25, 0xc8, 0x25, 0xe4, 0x26, 0x08, 0x26, 0x36, 0x26, 0x9e, - 0x26, 0xe2, 0x26, 0xf2, 0x27, 0x02, 0x27, 0x46, 0x27, 0x94, 0x27, 0xa6, - 0x27, 0xec, 0x28, 0x52, 0x28, 0x62, 0x28, 0x72, 0x28, 0xaa, 0x28, 0xbc, - 0x28, 0xcc, 0x29, 0x24, 0x29, 0x36, 0x00, 0x00, 0x00, 0x02, 0x00, 0x98, - 0xff, 0xe3, 0x01, 0x89, 0x05, 0xb6, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x2b, - 0x40, 0x14, 0x03, 0x09, 0x09, 0x02, 0x04, 0x04, 0x0f, 0x10, 0x01, 0x01, - 0x0c, 0x02, 0x0c, 0x06, 0x4f, 0x59, 0x0c, 0x16, 0x02, 0x03, 0x00, 0x3f, - 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x11, 0x12, 0x01, 0x39, - 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x23, 0x03, 0x33, 0x03, - 0x34, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x01, 0x46, - 0x69, 0x33, 0xcf, 0xe1, 0x78, 0x3a, 0x3f, 0x40, 0x39, 0x34, 0x44, 0x01, - 0x93, 0x04, 0x23, 0xfa, 0xb4, 0x88, 0x46, 0x42, 0x40, 0x47, 0x3f, 0x00, - 0x00, 0x02, 0x00, 0x85, 0x03, 0xa6, 0x02, 0xb0, 0x05, 0xb6, 0x00, 0x03, - 0x00, 0x07, 0x00, 0x1f, 0x40, 0x0d, 0x00, 0x03, 0x07, 0x04, 0x03, 0x04, - 0x08, 0x09, 0x06, 0x02, 0x07, 0x03, 0x03, 0x00, 0x3f, 0x33, 0xcd, 0x32, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, - 0x03, 0x23, 0x03, 0x21, 0x03, 0x23, 0x03, 0x01, 0x3f, 0x28, 0x69, 0x29, - 0x02, 0x2b, 0x29, 0x68, 0x29, 0x05, 0xb6, 0xfd, 0xf0, 0x02, 0x10, 0xfd, - 0xf0, 0x02, 0x10, 0x00, 0x00, 0x02, 0x00, 0x33, 0x00, 0x00, 0x04, 0xf6, - 0x05, 0xb6, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x99, 0x40, 0x55, 0x08, 0x1f, - 0x1c, 0x15, 0x04, 0x14, 0x09, 0x11, 0x0c, 0x0c, 0x09, 0x12, 0x0f, 0x0e, - 0x0b, 0x04, 0x0a, 0x13, 0x13, 0x14, 0x16, 0x1d, 0x1e, 0x07, 0x04, 0x06, - 0x17, 0x04, 0x01, 0x00, 0x19, 0x04, 0x18, 0x05, 0x05, 0x06, 0x14, 0x06, - 0x0a, 0x21, 0x03, 0x1a, 0x17, 0x03, 0x18, 0x0a, 0x18, 0x20, 0x21, 0x08, - 0x04, 0x0c, 0x0d, 0x0c, 0x4e, 0x59, 0x1c, 0x01, 0x0d, 0x1f, 0x00, 0x10, - 0x11, 0x10, 0x4e, 0x59, 0x19, 0x15, 0x11, 0x4f, 0x0d, 0x01, 0x4f, 0x11, - 0x01, 0x0d, 0x11, 0x0d, 0x11, 0x05, 0x17, 0x13, 0x03, 0x0a, 0x05, 0x00, - 0x2f, 0x33, 0x3f, 0x33, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x5d, 0x5d, 0x11, - 0x33, 0x33, 0x2b, 0x11, 0x00, 0x33, 0x33, 0x11, 0x33, 0x33, 0x2b, 0x11, - 0x00, 0x33, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x17, 0x33, 0x11, - 0x12, 0x39, 0x39, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, 0x11, 0x12, 0x17, - 0x39, 0x11, 0x33, 0x11, 0x12, 0x17, 0x39, 0x32, 0x32, 0x11, 0x33, 0x11, - 0x12, 0x17, 0x39, 0x31, 0x30, 0x01, 0x03, 0x21, 0x15, 0x21, 0x03, 0x23, - 0x13, 0x21, 0x03, 0x23, 0x13, 0x21, 0x35, 0x21, 0x13, 0x21, 0x35, 0x21, - 0x13, 0x33, 0x03, 0x21, 0x13, 0x33, 0x03, 0x21, 0x15, 0x01, 0x21, 0x13, - 0x21, 0x03, 0xd5, 0x42, 0x01, 0x1b, 0xfe, 0xcd, 0x54, 0x89, 0x54, 0xfe, - 0xd1, 0x52, 0x88, 0x50, 0xfe, 0xfa, 0x01, 0x1f, 0x44, 0xfe, 0xeb, 0x01, - 0x2b, 0x52, 0x8b, 0x52, 0x01, 0x31, 0x54, 0x86, 0x54, 0x01, 0x08, 0xfc, - 0xe5, 0x01, 0x2f, 0x42, 0xfe, 0xd1, 0x03, 0x83, 0xfe, 0xac, 0x81, 0xfe, - 0x52, 0x01, 0xae, 0xfe, 0x52, 0x01, 0xae, 0x81, 0x01, 0x54, 0x7f, 0x01, - 0xb4, 0xfe, 0x4c, 0x01, 0xb4, 0xfe, 0x4c, 0x7f, 0xfe, 0xac, 0x01, 0x54, - 0x00, 0x03, 0x00, 0x83, 0xff, 0x89, 0x04, 0x0c, 0x06, 0x12, 0x00, 0x20, - 0x00, 0x26, 0x00, 0x2d, 0x00, 0x66, 0x40, 0x35, 0x27, 0x11, 0x25, 0x1d, - 0x17, 0x04, 0x04, 0x2a, 0x14, 0x0d, 0x05, 0x21, 0x00, 0x00, 0x19, 0x05, - 0x11, 0x09, 0x05, 0x2e, 0x2f, 0x25, 0x0d, 0x06, 0x0d, 0x4d, 0x59, 0x03, - 0x06, 0x24, 0x0e, 0x2a, 0x0e, 0x4c, 0x59, 0x1d, 0x2a, 0x2b, 0x1c, 0x14, - 0x1c, 0x4d, 0x59, 0x17, 0x2a, 0x14, 0x06, 0x14, 0x06, 0x14, 0x05, 0x16, - 0x05, 0x00, 0x2f, 0x2f, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x12, 0x39, 0x32, - 0x2b, 0x11, 0x00, 0x33, 0x11, 0x33, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x33, - 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x01, 0x14, 0x06, 0x07, 0x15, 0x23, 0x35, 0x22, 0x26, 0x27, 0x35, 0x1e, - 0x01, 0x33, 0x11, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x35, 0x33, 0x15, - 0x16, 0x17, 0x07, 0x26, 0x27, 0x11, 0x1e, 0x02, 0x07, 0x34, 0x26, 0x27, - 0x11, 0x36, 0x01, 0x14, 0x16, 0x17, 0x11, 0x0e, 0x01, 0x04, 0x0c, 0xcc, - 0xb7, 0x81, 0x70, 0xd2, 0x43, 0x53, 0xd9, 0x59, 0xcd, 0xa5, 0xcb, 0xa7, - 0x81, 0xb8, 0xab, 0x34, 0x95, 0x9a, 0x9d, 0x9c, 0x4a, 0xaa, 0x59, 0x80, - 0xd9, 0xfd, 0xdd, 0x5a, 0x6f, 0x63, 0x66, 0x01, 0xc1, 0x88, 0xb1, 0x17, - 0xe8, 0xdf, 0x23, 0x1f, 0x9c, 0x25, 0x2f, 0x01, 0xb8, 0x41, 0xac, 0x88, - 0x83, 0xa8, 0x12, 0xb6, 0xb4, 0x05, 0x45, 0x83, 0x3b, 0x0b, 0xfe, 0x4e, - 0x32, 0x5f, 0x7b, 0x65, 0x48, 0x59, 0x2c, 0xfe, 0x7b, 0x1e, 0x03, 0x07, - 0x4c, 0x5c, 0x29, 0x01, 0x83, 0x10, 0x5d, 0x00, 0x00, 0x05, 0x00, 0x68, - 0xff, 0xec, 0x06, 0x2d, 0x05, 0xcb, 0x00, 0x09, 0x00, 0x15, 0x00, 0x21, - 0x00, 0x2d, 0x00, 0x31, 0x00, 0x45, 0x40, 0x24, 0x00, 0x10, 0x05, 0x0a, - 0x16, 0x28, 0x1c, 0x22, 0x22, 0x2e, 0x28, 0x0a, 0x30, 0x10, 0x06, 0x32, - 0x33, 0x03, 0x0d, 0x1f, 0x2b, 0x0d, 0x2b, 0x0d, 0x2b, 0x30, 0x31, 0x06, - 0x30, 0x18, 0x19, 0x25, 0x19, 0x07, 0x13, 0x07, 0x00, 0x3f, 0x33, 0x3f, - 0x33, 0x3f, 0x3f, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x13, 0x14, 0x16, 0x33, 0x32, 0x11, 0x10, 0x23, 0x22, - 0x06, 0x05, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, - 0x16, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, - 0x06, 0x05, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, - 0x16, 0x09, 0x01, 0x23, 0x01, 0xf2, 0x4a, 0x53, 0xa4, 0xa4, 0x53, 0x4a, - 0x01, 0xca, 0x99, 0x94, 0x8c, 0x9b, 0x95, 0x92, 0x91, 0x9c, 0x01, 0xa6, - 0x4a, 0x54, 0x54, 0x50, 0x50, 0x54, 0x54, 0x4a, 0x01, 0xcb, 0x99, 0x94, - 0x8e, 0x99, 0x95, 0x92, 0x8e, 0x9f, 0xfe, 0xfe, 0xfc, 0xd5, 0x93, 0x03, - 0x2b, 0x04, 0x02, 0xaa, 0xaa, 0x01, 0x54, 0x01, 0x52, 0xa8, 0xaa, 0xe4, - 0xe9, 0xee, 0xdf, 0xe3, 0xe6, 0xee, 0xfc, 0xdb, 0xab, 0xa9, 0xa7, 0xad, - 0xab, 0xa5, 0xa5, 0xab, 0xe3, 0xe9, 0xee, 0xde, 0xe3, 0xe6, 0xeb, 0x03, - 0x20, 0xfa, 0x4a, 0x05, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x71, - 0xff, 0xec, 0x05, 0xd3, 0x05, 0xcd, 0x00, 0x0b, 0x00, 0x15, 0x00, 0x35, - 0x00, 0x51, 0x40, 0x30, 0x13, 0x16, 0x00, 0x1d, 0x06, 0x23, 0x2a, 0x2b, - 0x2e, 0x2b, 0x2d, 0x23, 0x0e, 0x26, 0x19, 0x1d, 0x16, 0x09, 0x36, 0x37, - 0x33, 0x0c, 0x49, 0x59, 0x33, 0x13, 0x0f, 0x27, 0x2d, 0x0e, 0x30, 0x05, - 0x2f, 0x03, 0x19, 0x26, 0x03, 0x2a, 0x2a, 0x20, 0x2f, 0x12, 0x20, 0x09, - 0x4a, 0x59, 0x20, 0x04, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x12, 0x39, - 0x2f, 0x17, 0x39, 0x12, 0x17, 0x39, 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x17, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, - 0x14, 0x16, 0x17, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x13, - 0x32, 0x37, 0x01, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x25, 0x34, 0x36, 0x37, - 0x2e, 0x02, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, - 0x01, 0x3e, 0x01, 0x37, 0x33, 0x02, 0x07, 0x01, 0x23, 0x27, 0x0e, 0x01, - 0x23, 0x22, 0x26, 0x01, 0x9e, 0x48, 0x57, 0x81, 0x65, 0x67, 0x56, 0x59, - 0x6f, 0x9b, 0xf1, 0x9f, 0xfe, 0x4b, 0x6f, 0x5c, 0x2c, 0x9b, 0xfe, 0xb9, - 0x8b, 0xb4, 0x55, 0x3d, 0x24, 0xc4, 0xaf, 0xa2, 0xba, 0x88, 0x9d, 0x01, - 0x97, 0x38, 0x43, 0x17, 0xa8, 0x44, 0x89, 0x01, 0x2b, 0xe5, 0xb9, 0x76, - 0xf4, 0x96, 0xd7, 0xed, 0x04, 0x93, 0x45, 0x7d, 0x58, 0x4b, 0x7f, 0x53, - 0x4d, 0x61, 0x60, 0xfb, 0x9d, 0x9a, 0x01, 0xa8, 0x44, 0x59, 0x66, 0x41, - 0x75, 0x89, 0xfa, 0x82, 0xc8, 0x66, 0x5f, 0x62, 0x6a, 0x39, 0x96, 0xa8, - 0xa7, 0x95, 0x6b, 0xb5, 0x5d, 0xfe, 0x79, 0x3e, 0xa7, 0x63, 0xfe, 0xe2, - 0x94, 0xfe, 0xdd, 0xb2, 0x6a, 0x5c, 0xd4, 0x00, 0x00, 0x01, 0x00, 0x85, - 0x03, 0xa6, 0x01, 0x3f, 0x05, 0xb6, 0x00, 0x03, 0x00, 0x14, 0xb7, 0x00, - 0x03, 0x03, 0x04, 0x05, 0x02, 0x03, 0x03, 0x00, 0x3f, 0xcd, 0x11, 0x12, - 0x01, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x03, 0x23, 0x03, 0x01, 0x3f, - 0x28, 0x69, 0x29, 0x05, 0xb6, 0xfd, 0xf0, 0x02, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x52, 0xfe, 0xbc, 0x02, 0x21, 0x05, 0xb6, 0x00, 0x0d, - 0x00, 0x1c, 0x40, 0x0c, 0x07, 0x00, 0x0a, 0x04, 0x00, 0x04, 0x0e, 0x0f, - 0x0b, 0x27, 0x03, 0x03, 0x00, 0x3f, 0x3f, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x10, 0x12, 0x37, 0x33, 0x06, - 0x02, 0x15, 0x14, 0x12, 0x17, 0x23, 0x26, 0x02, 0x52, 0x9b, 0x92, 0xa2, - 0x90, 0x91, 0x94, 0x8b, 0xa0, 0x93, 0x9a, 0x02, 0x31, 0x01, 0x09, 0x01, - 0xce, 0xae, 0xc1, 0xfe, 0x32, 0xf4, 0xf0, 0xfe, 0x36, 0xbd, 0xaa, 0x01, - 0xc6, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3d, 0xfe, 0xbc, 0x02, 0x0c, - 0x05, 0xb6, 0x00, 0x0d, 0x00, 0x1c, 0x40, 0x0c, 0x04, 0x0a, 0x07, 0x00, - 0x0a, 0x00, 0x0e, 0x0f, 0x0a, 0x03, 0x04, 0x27, 0x00, 0x3f, 0x3f, 0x11, - 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, - 0x02, 0x07, 0x23, 0x36, 0x12, 0x35, 0x34, 0x02, 0x27, 0x33, 0x16, 0x12, - 0x02, 0x0c, 0x9b, 0x92, 0xa0, 0x8b, 0x94, 0x91, 0x90, 0xa2, 0x93, 0x9a, - 0x02, 0x31, 0xfe, 0xf9, 0xfe, 0x3a, 0xa8, 0xbc, 0x01, 0xcb, 0xf0, 0xf4, - 0x01, 0xce, 0xc1, 0xaf, 0xfe, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x56, - 0x02, 0x7f, 0x04, 0x0e, 0x06, 0x14, 0x00, 0x0e, 0x00, 0x30, 0x40, 0x1b, - 0x03, 0x05, 0x04, 0x01, 0x07, 0x0d, 0x0a, 0x09, 0x0b, 0x09, 0x0f, 0x10, - 0x04, 0x0a, 0x01, 0x0d, 0x02, 0x0c, 0x0c, 0x0d, 0x0a, 0x07, 0x04, 0x06, - 0x08, 0x0e, 0x00, 0x00, 0x3f, 0xc4, 0x32, 0x17, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x31, 0x30, 0x01, 0x03, - 0x25, 0x17, 0x05, 0x13, 0x07, 0x0b, 0x01, 0x27, 0x13, 0x25, 0x37, 0x05, - 0x03, 0x02, 0x91, 0x2b, 0x01, 0x8e, 0x1a, 0xfe, 0x83, 0xf8, 0xac, 0xb0, - 0xa0, 0xb0, 0xf2, 0xfe, 0x87, 0x1d, 0x01, 0x87, 0x2b, 0x06, 0x14, 0xfe, - 0x75, 0x6f, 0xb6, 0x1f, 0xfe, 0xba, 0x5e, 0x01, 0x6a, 0xfe, 0x96, 0x5e, - 0x01, 0x46, 0x1f, 0xb6, 0x6f, 0x01, 0x8b, 0x00, 0x00, 0x01, 0x00, 0x68, - 0x00, 0xe3, 0x04, 0x29, 0x04, 0xc3, 0x00, 0x0b, 0x00, 0x28, 0x40, 0x13, - 0x00, 0x04, 0x04, 0x09, 0x05, 0x05, 0x0c, 0x0d, 0x03, 0x07, 0x08, 0x07, - 0x50, 0x59, 0x00, 0x0f, 0x08, 0x01, 0x08, 0x00, 0x2f, 0x5d, 0x33, 0x2b, - 0x11, 0x00, 0x33, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, - 0x31, 0x30, 0x01, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, - 0x11, 0x33, 0x02, 0x8d, 0x01, 0x9c, 0xfe, 0x64, 0x8b, 0xfe, 0x66, 0x01, - 0x9a, 0x8b, 0x03, 0x17, 0x8a, 0xfe, 0x56, 0x01, 0xaa, 0x8a, 0x01, 0xac, - 0x00, 0x01, 0x00, 0x3f, 0xfe, 0xf8, 0x01, 0x6d, 0x00, 0xee, 0x00, 0x08, - 0x00, 0x11, 0xb5, 0x05, 0x00, 0x09, 0x0a, 0x05, 0x00, 0x00, 0x2f, 0xcd, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x31, 0x30, 0x25, 0x17, 0x06, 0x02, 0x07, - 0x23, 0x36, 0x12, 0x37, 0x01, 0x5e, 0x0f, 0x1a, 0x62, 0x35, 0x7d, 0x1b, - 0x41, 0x0d, 0xee, 0x17, 0x64, 0xfe, 0xf7, 0x72, 0x68, 0x01, 0x32, 0x5c, - 0x00, 0x01, 0x00, 0x54, 0x01, 0xd9, 0x02, 0x3f, 0x02, 0x71, 0x00, 0x03, - 0x00, 0x11, 0xb5, 0x02, 0x00, 0x05, 0x04, 0x00, 0x01, 0x00, 0x2f, 0x33, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x31, 0x30, 0x13, 0x35, 0x21, 0x15, 0x54, - 0x01, 0xeb, 0x01, 0xd9, 0x98, 0x98, 0x00, 0x00, 0x00, 0x01, 0x00, 0x98, - 0xff, 0xe3, 0x01, 0x89, 0x00, 0xf2, 0x00, 0x0b, 0x00, 0x18, 0x40, 0x0b, - 0x06, 0x00, 0x00, 0x0c, 0x0d, 0x09, 0x03, 0x4f, 0x59, 0x09, 0x16, 0x00, - 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x31, 0x30, 0x37, 0x34, - 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x98, 0x3d, - 0x39, 0x3a, 0x41, 0x42, 0x39, 0x33, 0x43, 0x6a, 0x43, 0x45, 0x45, 0x43, - 0x41, 0x46, 0x3f, 0x00, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x02, 0xdb, - 0x05, 0xb6, 0x00, 0x03, 0x00, 0x13, 0xb7, 0x02, 0x00, 0x04, 0x05, 0x03, - 0x03, 0x02, 0x12, 0x00, 0x3f, 0x3f, 0x11, 0x12, 0x01, 0x39, 0x39, 0x31, - 0x30, 0x09, 0x01, 0x23, 0x01, 0x02, 0xdb, 0xfd, 0xdf, 0xa6, 0x02, 0x21, - 0x05, 0xb6, 0xfa, 0x4a, 0x05, 0xb6, 0x00, 0x00, 0x00, 0x02, 0x00, 0x66, - 0xff, 0xec, 0x04, 0x2d, 0x05, 0xcd, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x28, - 0x40, 0x14, 0x12, 0x00, 0x0c, 0x06, 0x00, 0x06, 0x19, 0x18, 0x09, 0x15, - 0x4b, 0x59, 0x09, 0x07, 0x03, 0x0f, 0x4b, 0x59, 0x03, 0x19, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x02, 0x23, 0x22, 0x02, 0x11, 0x10, - 0x12, 0x33, 0x32, 0x12, 0x01, 0x10, 0x12, 0x33, 0x32, 0x12, 0x11, 0x10, - 0x02, 0x23, 0x22, 0x02, 0x04, 0x2d, 0xef, 0xf6, 0xec, 0xf6, 0xee, 0xf4, - 0xee, 0xf7, 0xfc, 0xe1, 0x96, 0xa4, 0xa6, 0x95, 0x95, 0xa6, 0xa4, 0x96, - 0x02, 0xdd, 0xfe, 0x85, 0xfe, 0x8a, 0x01, 0x7f, 0x01, 0x72, 0x01, 0x7e, - 0x01, 0x72, 0xfe, 0x7e, 0xfe, 0x92, 0xfe, 0xc1, 0xfe, 0xdd, 0x01, 0x27, - 0x01, 0x3b, 0x01, 0x3b, 0x01, 0x25, 0xfe, 0xdf, 0x00, 0x01, 0x00, 0xbc, - 0x00, 0x00, 0x02, 0xcb, 0x05, 0xb6, 0x00, 0x0a, 0x00, 0x24, 0x40, 0x10, - 0x09, 0x00, 0x01, 0x08, 0x01, 0x0b, 0x0c, 0x04, 0x09, 0x07, 0x07, 0x01, - 0x09, 0x06, 0x01, 0x18, 0x00, 0x3f, 0x3f, 0x12, 0x39, 0x2f, 0x12, 0x39, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x33, 0x31, 0x30, 0x21, 0x23, - 0x11, 0x34, 0x37, 0x0e, 0x01, 0x07, 0x27, 0x01, 0x33, 0x02, 0xcb, 0xa2, - 0x08, 0x15, 0x34, 0xd4, 0x58, 0x01, 0x83, 0x8c, 0x04, 0x12, 0x82, 0x74, - 0x15, 0x2e, 0xac, 0x72, 0x01, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x64, - 0x00, 0x00, 0x04, 0x25, 0x05, 0xcb, 0x00, 0x19, 0x00, 0x2b, 0x40, 0x17, - 0x18, 0x01, 0x07, 0x13, 0x00, 0x13, 0x0e, 0x01, 0x04, 0x1a, 0x1b, 0x10, - 0x0a, 0x4b, 0x59, 0x10, 0x07, 0x01, 0x18, 0x4c, 0x59, 0x01, 0x18, 0x00, - 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x31, 0x30, 0x29, 0x01, 0x35, 0x01, 0x3e, 0x02, 0x35, - 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, - 0x14, 0x02, 0x07, 0x01, 0x15, 0x21, 0x04, 0x25, 0xfc, 0x3f, 0x01, 0x81, - 0xb0, 0x70, 0x38, 0x8e, 0x7e, 0x5b, 0xa3, 0x64, 0x58, 0xca, 0xee, 0xce, - 0xea, 0x9c, 0xd6, 0xfe, 0xc0, 0x02, 0xf0, 0x8f, 0x01, 0x83, 0xb2, 0x98, - 0x90, 0x53, 0x75, 0x89, 0x3c, 0x4f, 0x71, 0xa8, 0xd3, 0xb2, 0x8b, 0xfe, - 0xf0, 0xd0, 0xfe, 0xc7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5e, - 0xff, 0xec, 0x04, 0x1b, 0x05, 0xcb, 0x00, 0x27, 0x00, 0x43, 0x40, 0x24, - 0x1b, 0x00, 0x13, 0x07, 0x07, 0x00, 0x03, 0x16, 0x22, 0x0d, 0x06, 0x28, - 0x29, 0x03, 0x17, 0x16, 0x17, 0x16, 0x4b, 0x59, 0x17, 0x17, 0x0a, 0x25, - 0x25, 0x1e, 0x4b, 0x59, 0x25, 0x07, 0x0a, 0x11, 0x4b, 0x59, 0x0a, 0x19, - 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, - 0x2f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x06, 0x07, 0x15, 0x1e, 0x01, - 0x15, 0x14, 0x04, 0x21, 0x22, 0x26, 0x27, 0x35, 0x1e, 0x01, 0x33, 0x20, - 0x11, 0x10, 0x21, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, - 0x22, 0x06, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x03, 0xee, 0x9d, - 0x90, 0xb0, 0xaa, 0xfe, 0xde, 0xfe, 0xf5, 0x74, 0xc1, 0x5b, 0x5f, 0xd7, - 0x60, 0x01, 0x7b, 0xfe, 0x5e, 0x90, 0x92, 0xab, 0xc8, 0x93, 0x7e, 0x60, - 0xaa, 0x6d, 0x54, 0x5a, 0xeb, 0x82, 0xd5, 0xec, 0x04, 0x5e, 0x8c, 0xb2, - 0x1e, 0x08, 0x16, 0xb4, 0x92, 0xd1, 0xe1, 0x23, 0x2c, 0x9e, 0x2f, 0x31, - 0x01, 0x29, 0x01, 0x0a, 0x8f, 0x97, 0x86, 0x6b, 0x7a, 0x34, 0x46, 0x70, - 0x47, 0x51, 0xc3, 0x00, 0x00, 0x02, 0x00, 0x2b, 0x00, 0x00, 0x04, 0x6a, - 0x05, 0xbe, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x3c, 0x40, 0x1e, 0x12, 0x05, - 0x09, 0x02, 0x02, 0x0b, 0x07, 0x03, 0x00, 0x03, 0x05, 0x03, 0x13, 0x14, - 0x01, 0x05, 0x12, 0x05, 0x4c, 0x59, 0x09, 0x0f, 0x07, 0x12, 0x12, 0x03, - 0x07, 0x06, 0x03, 0x18, 0x00, 0x3f, 0x3f, 0x12, 0x39, 0x2f, 0x12, 0x39, - 0x33, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, - 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x23, 0x11, 0x23, - 0x11, 0x21, 0x35, 0x01, 0x33, 0x11, 0x33, 0x21, 0x11, 0x34, 0x37, 0x23, - 0x06, 0x07, 0x01, 0x04, 0x6a, 0xd9, 0x9f, 0xfd, 0x39, 0x02, 0xb6, 0xb0, - 0xd9, 0xfe, 0x88, 0x0a, 0x08, 0x30, 0x2a, 0xfe, 0x37, 0x01, 0x50, 0xfe, - 0xb0, 0x01, 0x50, 0x91, 0x03, 0xdd, 0xfc, 0x29, 0x01, 0xe6, 0x8f, 0xb4, - 0x60, 0x3f, 0xfd, 0x76, 0x00, 0x01, 0x00, 0x85, 0xff, 0xec, 0x04, 0x1d, - 0x05, 0xb6, 0x00, 0x1a, 0x00, 0x3a, 0x40, 0x1f, 0x0f, 0x03, 0x19, 0x14, - 0x08, 0x14, 0x17, 0x03, 0x04, 0x1c, 0x1b, 0x00, 0x11, 0x4b, 0x59, 0x00, - 0x00, 0x06, 0x15, 0x15, 0x18, 0x4c, 0x59, 0x15, 0x06, 0x06, 0x0c, 0x4b, - 0x59, 0x06, 0x19, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x32, 0x04, 0x15, 0x14, 0x00, 0x23, 0x22, - 0x27, 0x35, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x35, 0x10, 0x21, 0x22, 0x07, - 0x27, 0x13, 0x21, 0x15, 0x21, 0x03, 0x36, 0x02, 0x2d, 0xe7, 0x01, 0x09, - 0xfe, 0xdf, 0xfe, 0xf7, 0x82, 0x46, 0xd0, 0x65, 0xb0, 0xc3, 0xfe, 0x89, - 0x5f, 0x9f, 0x56, 0x37, 0x02, 0xd7, 0xfd, 0xb7, 0x25, 0x73, 0x03, 0x7d, - 0xe5, 0xc7, 0xe3, 0xfe, 0xfe, 0x4f, 0xa0, 0x2d, 0x33, 0xa6, 0x9d, 0x01, - 0x32, 0x1d, 0x37, 0x02, 0xac, 0x99, 0xfe, 0x49, 0x17, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x75, 0xff, 0xec, 0x04, 0x2f, 0x05, 0xcb, 0x00, 0x16, - 0x00, 0x24, 0x00, 0x44, 0x40, 0x23, 0x1a, 0x11, 0x0b, 0x21, 0x21, 0x00, - 0x00, 0x06, 0x11, 0x03, 0x26, 0x25, 0x0c, 0x0b, 0x0e, 0x1d, 0x4d, 0x59, - 0x0b, 0x0e, 0x0e, 0x14, 0x03, 0x14, 0x17, 0x4b, 0x59, 0x14, 0x19, 0x03, - 0x08, 0x4d, 0x59, 0x03, 0x07, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x39, 0x2b, 0x11, 0x00, 0x33, 0x11, - 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x13, 0x10, 0x00, 0x21, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x02, 0x03, - 0x33, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x02, 0x23, 0x22, 0x00, 0x05, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x0e, 0x01, 0x15, 0x14, 0x1e, - 0x01, 0x75, 0x01, 0x4f, 0x01, 0x48, 0x71, 0x41, 0x4d, 0x63, 0xeb, 0xf8, - 0x0c, 0x0c, 0x6e, 0xee, 0xc5, 0xe3, 0xf9, 0xd4, 0xe3, 0xfe, 0xf6, 0x01, - 0xeb, 0x8e, 0x9d, 0x92, 0x91, 0x5a, 0x96, 0x59, 0x50, 0x93, 0x02, 0x71, - 0x01, 0xaf, 0x01, 0xab, 0x13, 0x8f, 0x19, 0xfe, 0xdb, 0xfe, 0xc6, 0xac, - 0xee, 0xcc, 0xe4, 0xfe, 0xfb, 0x01, 0x55, 0xc8, 0xb3, 0xa9, 0x91, 0xa6, - 0x4a, 0x82, 0x46, 0x67, 0xb2, 0x68, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5e, - 0x00, 0x00, 0x04, 0x2b, 0x05, 0xb6, 0x00, 0x06, 0x00, 0x1f, 0x40, 0x10, - 0x01, 0x05, 0x05, 0x00, 0x02, 0x03, 0x07, 0x08, 0x03, 0x02, 0x4c, 0x59, - 0x03, 0x06, 0x00, 0x18, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x17, - 0x39, 0x11, 0x33, 0x31, 0x30, 0x21, 0x01, 0x21, 0x35, 0x21, 0x15, 0x01, - 0x01, 0x1d, 0x02, 0x5e, 0xfc, 0xe3, 0x03, 0xcd, 0xfd, 0xaa, 0x05, 0x1d, - 0x99, 0x85, 0xfa, 0xcf, 0x00, 0x03, 0x00, 0x68, 0xff, 0xec, 0x04, 0x29, - 0x05, 0xcb, 0x00, 0x16, 0x00, 0x22, 0x00, 0x2e, 0x00, 0x4d, 0x40, 0x29, - 0x17, 0x0f, 0x26, 0x14, 0x2c, 0x03, 0x1d, 0x09, 0x09, 0x03, 0x06, 0x11, - 0x14, 0x0f, 0x06, 0x2f, 0x30, 0x06, 0x11, 0x29, 0x20, 0x29, 0x20, 0x4b, - 0x59, 0x29, 0x29, 0x0c, 0x00, 0x0c, 0x1a, 0x4d, 0x59, 0x0c, 0x19, 0x00, - 0x23, 0x4d, 0x59, 0x00, 0x07, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, - 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x1e, 0x01, - 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x25, 0x2e, 0x01, 0x35, - 0x34, 0x36, 0x03, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, - 0x0e, 0x01, 0x01, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x3e, 0x01, 0x35, - 0x34, 0x26, 0x02, 0x48, 0xc8, 0xea, 0x86, 0x93, 0xb2, 0x96, 0xfe, 0xdd, - 0xea, 0xfc, 0x01, 0x32, 0x8a, 0x78, 0xeb, 0x77, 0xa7, 0x97, 0x95, 0xa6, - 0x9c, 0xc2, 0x95, 0x86, 0x01, 0x3a, 0x7d, 0x8e, 0x76, 0x9f, 0x8f, 0x77, - 0x91, 0x05, 0xcb, 0xba, 0xa4, 0x6c, 0xb2, 0x49, 0x55, 0xbb, 0x7b, 0xb6, - 0xd9, 0xcd, 0xbc, 0xfb, 0x8c, 0x4e, 0xb5, 0x70, 0x9f, 0xbd, 0xfb, 0xa6, - 0x78, 0x86, 0x8c, 0x7a, 0x61, 0x97, 0x47, 0x40, 0x9b, 0x03, 0x67, 0x78, - 0x64, 0x5c, 0x84, 0x42, 0x3c, 0x8a, 0x5c, 0x65, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x25, 0x05, 0xcb, 0x00, 0x17, - 0x00, 0x25, 0x00, 0x41, 0x40, 0x22, 0x1b, 0x11, 0x22, 0x0a, 0x0a, 0x00, - 0x00, 0x04, 0x11, 0x03, 0x26, 0x27, 0x0e, 0x1e, 0x4d, 0x59, 0x0b, 0x14, - 0x0e, 0x0e, 0x02, 0x14, 0x14, 0x18, 0x4b, 0x59, 0x14, 0x07, 0x02, 0x07, - 0x4d, 0x59, 0x02, 0x19, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x18, 0x2f, 0x12, 0x39, 0x2b, 0x11, 0x12, 0x01, 0x17, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x21, - 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x12, 0x13, 0x23, 0x0e, 0x01, 0x23, - 0x22, 0x26, 0x35, 0x34, 0x00, 0x33, 0x32, 0x16, 0x12, 0x01, 0x22, 0x06, - 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x35, 0x34, 0x2e, 0x01, 0x04, - 0x25, 0xfd, 0x68, 0x74, 0x44, 0x50, 0x66, 0xf0, 0xf5, 0x0b, 0x0c, 0x37, - 0xb6, 0x72, 0xc2, 0xe4, 0x00, 0xff, 0xd0, 0x95, 0xdf, 0x78, 0xfe, 0x14, - 0x8f, 0x9c, 0x90, 0x93, 0x5b, 0x99, 0x58, 0x52, 0x93, 0x03, 0x46, 0xfc, - 0xa6, 0x14, 0x8f, 0x1a, 0x01, 0x29, 0x01, 0x33, 0x53, 0x57, 0xe8, 0xd0, - 0xe4, 0x01, 0x08, 0x99, 0xfe, 0xdb, 0x01, 0x30, 0xb8, 0xa4, 0x90, 0xa5, - 0x4a, 0x80, 0x46, 0x69, 0xb2, 0x66, 0x00, 0x00, 0x00, 0x02, 0x00, 0x98, - 0xff, 0xe3, 0x01, 0x89, 0x04, 0x64, 0x00, 0x0b, 0x00, 0x15, 0x00, 0x28, - 0x40, 0x14, 0x10, 0x06, 0x06, 0x0c, 0x00, 0x00, 0x16, 0x17, 0x0e, 0x13, - 0x4f, 0x59, 0x0e, 0x10, 0x09, 0x03, 0x4f, 0x59, 0x09, 0x16, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x37, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, - 0x06, 0x23, 0x22, 0x26, 0x11, 0x34, 0x33, 0x32, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x98, 0x3d, 0x39, 0x3a, 0x41, 0x42, 0x39, 0x33, 0x43, 0x76, - 0x7b, 0x42, 0x39, 0x33, 0x43, 0x6a, 0x43, 0x45, 0x45, 0x43, 0x41, 0x46, - 0x3f, 0x03, 0xbb, 0x87, 0x87, 0x41, 0x46, 0x3f, 0x00, 0x02, 0x00, 0x3f, - 0xfe, 0xf8, 0x01, 0x85, 0x04, 0x64, 0x00, 0x08, 0x00, 0x12, 0x00, 0x22, - 0x40, 0x10, 0x01, 0x0d, 0x0d, 0x05, 0x09, 0x09, 0x14, 0x13, 0x0b, 0x10, - 0x4f, 0x59, 0x0b, 0x10, 0x05, 0x00, 0x00, 0x2f, 0xcd, 0x3f, 0x2b, 0x11, - 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x25, 0x17, - 0x06, 0x02, 0x07, 0x23, 0x36, 0x12, 0x37, 0x03, 0x34, 0x33, 0x32, 0x15, - 0x14, 0x06, 0x23, 0x22, 0x26, 0x01, 0x5e, 0x0f, 0x1a, 0x62, 0x35, 0x7d, - 0x1b, 0x41, 0x0d, 0x15, 0x77, 0x7b, 0x42, 0x39, 0x3a, 0x3d, 0xee, 0x17, - 0x64, 0xfe, 0xf7, 0x72, 0x68, 0x01, 0x32, 0x5c, 0x02, 0xef, 0x87, 0x87, - 0x41, 0x46, 0x46, 0x00, 0x00, 0x01, 0x00, 0x68, 0x00, 0xf2, 0x04, 0x29, - 0x04, 0xd9, 0x00, 0x06, 0x00, 0x15, 0x40, 0x09, 0x04, 0x00, 0x05, 0x01, - 0x04, 0x07, 0x08, 0x03, 0x00, 0x00, 0x2f, 0x2f, 0x11, 0x12, 0x01, 0x17, - 0x39, 0x31, 0x30, 0x25, 0x01, 0x35, 0x01, 0x15, 0x09, 0x01, 0x04, 0x29, - 0xfc, 0x3f, 0x03, 0xc1, 0xfc, 0xf2, 0x03, 0x0e, 0xf2, 0x01, 0xa6, 0x62, - 0x01, 0xdf, 0x95, 0xfe, 0x8d, 0xfe, 0xb8, 0x00, 0x00, 0x02, 0x00, 0x77, - 0x01, 0xc1, 0x04, 0x19, 0x03, 0xe3, 0x00, 0x03, 0x00, 0x07, 0x00, 0x2a, - 0x40, 0x15, 0x07, 0x02, 0x04, 0x00, 0x02, 0x00, 0x09, 0x08, 0x04, 0x05, - 0x50, 0x59, 0x04, 0x01, 0x00, 0x50, 0x59, 0x0f, 0x01, 0x01, 0x01, 0x00, - 0x2f, 0x5d, 0x2b, 0x00, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x35, 0x21, 0x15, 0x01, 0x35, - 0x21, 0x15, 0x77, 0x03, 0xa2, 0xfc, 0x5e, 0x03, 0xa2, 0x03, 0x5a, 0x89, - 0x89, 0xfe, 0x67, 0x89, 0x89, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x68, - 0x00, 0xf2, 0x04, 0x29, 0x04, 0xd9, 0x00, 0x06, 0x00, 0x15, 0x40, 0x09, - 0x05, 0x01, 0x02, 0x00, 0x04, 0x07, 0x08, 0x06, 0x03, 0x00, 0x2f, 0x2f, - 0x11, 0x12, 0x01, 0x17, 0x39, 0x31, 0x30, 0x13, 0x09, 0x01, 0x35, 0x01, - 0x15, 0x01, 0x68, 0x03, 0x0f, 0xfc, 0xf1, 0x03, 0xc1, 0xfc, 0x3f, 0x01, - 0x89, 0x01, 0x46, 0x01, 0x75, 0x95, 0xfe, 0x21, 0x62, 0xfe, 0x5a, 0x00, - 0x00, 0x02, 0x00, 0x1b, 0xff, 0xe3, 0x03, 0x39, 0x05, 0xcb, 0x00, 0x1b, - 0x00, 0x26, 0x00, 0x39, 0x40, 0x1d, 0x21, 0x1c, 0x1b, 0x00, 0x07, 0x13, - 0x13, 0x00, 0x1c, 0x0e, 0x04, 0x27, 0x28, 0x00, 0x00, 0x24, 0x10, 0x24, - 0x1e, 0x4f, 0x59, 0x24, 0x16, 0x10, 0x0a, 0x49, 0x59, 0x10, 0x04, 0x00, - 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, - 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x23, - 0x22, 0x06, 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x01, - 0x07, 0x0e, 0x01, 0x1d, 0x01, 0x03, 0x34, 0x33, 0x32, 0x16, 0x15, 0x14, - 0x06, 0x23, 0x22, 0x26, 0x01, 0x21, 0x48, 0x62, 0x88, 0x47, 0x83, 0x7b, - 0x4f, 0x96, 0x61, 0x3b, 0xbd, 0xce, 0xbf, 0xd4, 0x27, 0x4c, 0x7e, 0x65, - 0x41, 0xb2, 0x78, 0x3a, 0x3f, 0x40, 0x39, 0x34, 0x44, 0x01, 0x93, 0x36, - 0x75, 0x97, 0x54, 0x73, 0x74, 0x52, 0x66, 0x6f, 0x25, 0x31, 0x87, 0x63, - 0xbc, 0xab, 0x49, 0x6f, 0x63, 0x6e, 0x56, 0x72, 0x5f, 0x21, 0xfe, 0xd7, - 0x88, 0x46, 0x42, 0x40, 0x47, 0x3f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x79, - 0xff, 0x46, 0x06, 0xb8, 0x05, 0xb4, 0x00, 0x35, 0x00, 0x3f, 0x00, 0x45, - 0x40, 0x22, 0x23, 0x2e, 0x36, 0x0e, 0x3b, 0x07, 0x14, 0x1b, 0x00, 0x00, - 0x29, 0x14, 0x0e, 0x2e, 0x05, 0x40, 0x41, 0x18, 0x38, 0x38, 0x04, 0x3d, - 0x08, 0x11, 0x0b, 0x11, 0x0b, 0x11, 0x2b, 0x1f, 0x32, 0x03, 0x26, 0x2b, - 0x00, 0x2f, 0x33, 0x3f, 0x33, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x12, 0x39, - 0x32, 0x33, 0x33, 0x11, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x0e, - 0x01, 0x23, 0x22, 0x26, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, - 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x03, 0x15, 0x14, 0x33, 0x32, 0x36, - 0x35, 0x34, 0x02, 0x24, 0x23, 0x22, 0x04, 0x02, 0x15, 0x10, 0x00, 0x21, - 0x32, 0x37, 0x15, 0x06, 0x23, 0x20, 0x00, 0x11, 0x10, 0x12, 0x24, 0x21, - 0x32, 0x04, 0x12, 0x01, 0x14, 0x33, 0x32, 0x1b, 0x01, 0x26, 0x23, 0x22, - 0x06, 0x06, 0xb8, 0x58, 0xa0, 0x68, 0x56, 0x76, 0x0b, 0x08, 0x28, 0x95, - 0x66, 0x96, 0xa9, 0xec, 0xc0, 0x44, 0xac, 0x45, 0x19, 0x85, 0x5b, 0x72, - 0x94, 0xfe, 0xef, 0xb1, 0xdf, 0xfe, 0xb6, 0xae, 0x01, 0x42, 0x01, 0x2f, - 0xd2, 0xe2, 0xc0, 0xf4, 0xfe, 0x95, 0xfe, 0x6f, 0xd6, 0x01, 0x8c, 0x01, - 0x00, 0xd7, 0x01, 0x4f, 0xb7, 0xfb, 0xf6, 0xc3, 0xcf, 0x12, 0x0e, 0x48, - 0x55, 0x82, 0x93, 0x02, 0xd9, 0x8e, 0xec, 0x82, 0x68, 0x51, 0x57, 0x62, - 0xcd, 0xb0, 0xcc, 0x00, 0xff, 0x19, 0x16, 0xfe, 0x2a, 0x16, 0xb2, 0xd7, - 0xac, 0xb5, 0x01, 0x10, 0x93, 0xb9, 0xfe, 0xa9, 0xe1, 0xfe, 0xcf, 0xfe, - 0xb8, 0x56, 0x85, 0x54, 0x01, 0x8f, 0x01, 0x66, 0x01, 0x04, 0x01, 0x96, - 0xdf, 0xb5, 0xfe, 0xb3, 0xfe, 0xa4, 0xfe, 0x01, 0x39, 0x01, 0x05, 0x14, - 0xb4, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x10, - 0x05, 0xbc, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x39, 0x40, 0x1e, 0x02, 0x0e, - 0x0b, 0x08, 0x01, 0x05, 0x00, 0x03, 0x00, 0x07, 0x03, 0x04, 0x07, 0x04, - 0x10, 0x0f, 0x0e, 0x02, 0x49, 0x59, 0x0b, 0x05, 0x0e, 0x0e, 0x04, 0x05, - 0x03, 0x00, 0x04, 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x12, 0x39, 0x2f, 0x12, - 0x39, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x12, 0x17, 0x39, 0x31, 0x30, 0x21, 0x03, 0x21, 0x03, 0x23, 0x01, 0x33, - 0x09, 0x01, 0x03, 0x26, 0x27, 0x06, 0x07, 0x03, 0x04, 0x60, 0xb6, 0xfd, - 0xb6, 0xb4, 0xac, 0x02, 0x42, 0x8f, 0x02, 0x3f, 0xfe, 0x65, 0xaa, 0x21, - 0x23, 0x16, 0x29, 0xac, 0x01, 0xd1, 0xfe, 0x2f, 0x05, 0xbc, 0xfa, 0x44, - 0x02, 0x6a, 0x01, 0xc5, 0x56, 0x7d, 0x60, 0x73, 0xfe, 0x3b, 0x00, 0x00, - 0x00, 0x03, 0x00, 0xc9, 0x00, 0x00, 0x04, 0xbe, 0x05, 0xb6, 0x00, 0x0e, - 0x00, 0x17, 0x00, 0x20, 0x00, 0x49, 0x40, 0x26, 0x13, 0x04, 0x1d, 0x0a, - 0x0f, 0x19, 0x19, 0x0e, 0x0a, 0x04, 0x07, 0x0e, 0x04, 0x21, 0x22, 0x08, - 0x0f, 0x18, 0x0f, 0x18, 0x4a, 0x59, 0x0f, 0x0f, 0x0e, 0x00, 0x0e, 0x19, - 0x4a, 0x59, 0x0e, 0x12, 0x00, 0x17, 0x4a, 0x59, 0x00, 0x03, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x21, 0x20, 0x04, 0x15, - 0x14, 0x06, 0x07, 0x15, 0x04, 0x11, 0x14, 0x04, 0x23, 0x21, 0x13, 0x21, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x19, 0x01, 0x21, 0x32, 0x36, - 0x35, 0x34, 0x26, 0x23, 0xc9, 0x01, 0x9d, 0x01, 0x23, 0x01, 0x04, 0x91, - 0x8b, 0x01, 0x4d, 0xfe, 0xf7, 0xee, 0xfe, 0x02, 0xaa, 0x01, 0x18, 0xb4, - 0x9e, 0xb0, 0xc0, 0xfa, 0x01, 0x31, 0xb1, 0xb3, 0xb7, 0xbb, 0x05, 0xb6, - 0xae, 0xbc, 0x82, 0xa9, 0x19, 0x0a, 0x39, 0xfe, 0xdb, 0xc4, 0xdc, 0x03, - 0x44, 0x71, 0x86, 0x7b, 0x6d, 0xfd, 0x91, 0xfd, 0xdd, 0x89, 0x92, 0x88, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x7d, 0xff, 0xec, 0x04, 0xcf, - 0x05, 0xcb, 0x00, 0x16, 0x00, 0x26, 0x40, 0x14, 0x03, 0x0e, 0x14, 0x09, - 0x0e, 0x03, 0x17, 0x18, 0x12, 0x00, 0x49, 0x59, 0x12, 0x04, 0x0b, 0x06, - 0x49, 0x59, 0x0b, 0x13, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x22, 0x00, 0x11, - 0x10, 0x00, 0x33, 0x32, 0x37, 0x15, 0x06, 0x23, 0x20, 0x00, 0x11, 0x34, - 0x12, 0x24, 0x33, 0x32, 0x17, 0x07, 0x26, 0x03, 0x3b, 0xf1, 0xfe, 0xe9, - 0x01, 0x0d, 0xf9, 0x99, 0xc4, 0x98, 0xdf, 0xfe, 0xbd, 0xfe, 0xa1, 0xa9, - 0x01, 0x3f, 0xd8, 0xe6, 0xac, 0x48, 0xa6, 0x05, 0x33, 0xfe, 0xbf, 0xfe, - 0xe9, 0xfe, 0xe1, 0xfe, 0xc7, 0x37, 0x95, 0x39, 0x01, 0x88, 0x01, 0x69, - 0xe2, 0x01, 0x54, 0xb8, 0x54, 0x92, 0x4e, 0x00, 0x00, 0x02, 0x00, 0xc9, - 0x00, 0x00, 0x05, 0x58, 0x05, 0xb6, 0x00, 0x08, 0x00, 0x11, 0x00, 0x28, - 0x40, 0x14, 0x0e, 0x04, 0x09, 0x00, 0x04, 0x00, 0x12, 0x13, 0x05, 0x0d, - 0x4a, 0x59, 0x05, 0x03, 0x04, 0x0e, 0x4a, 0x59, 0x04, 0x12, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x00, 0x29, 0x01, 0x11, 0x21, 0x20, - 0x00, 0x03, 0x10, 0x00, 0x21, 0x23, 0x11, 0x33, 0x20, 0x00, 0x05, 0x58, - 0xfe, 0x77, 0xfe, 0x8f, 0xfe, 0x6b, 0x01, 0xc0, 0x01, 0x55, 0x01, 0x7a, - 0xb4, 0xfe, 0xe1, 0xfe, 0xe5, 0xf7, 0xcf, 0x01, 0x30, 0x01, 0x32, 0x02, - 0xe9, 0xfe, 0x96, 0xfe, 0x81, 0x05, 0xb6, 0xfe, 0x86, 0xfe, 0xa7, 0x01, - 0x1e, 0x01, 0x22, 0xfb, 0x70, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x00, 0xc9, - 0x00, 0x00, 0x03, 0xf8, 0x05, 0xb6, 0x00, 0x0b, 0x00, 0x3a, 0x40, 0x1f, - 0x06, 0x0a, 0x0a, 0x01, 0x04, 0x00, 0x08, 0x01, 0x04, 0x0c, 0x0d, 0x06, - 0x09, 0x49, 0x59, 0x06, 0x06, 0x01, 0x02, 0x02, 0x05, 0x49, 0x59, 0x02, - 0x03, 0x01, 0x0a, 0x49, 0x59, 0x01, 0x12, 0x00, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x01, - 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x21, - 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x03, 0xf8, 0xfc, 0xd1, - 0x03, 0x2f, 0xfd, 0x7b, 0x02, 0x5e, 0xfd, 0xa2, 0x02, 0x85, 0x05, 0xb6, - 0x97, 0xfe, 0x29, 0x96, 0xfd, 0xe6, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc9, - 0x00, 0x00, 0x03, 0xf8, 0x05, 0xb6, 0x00, 0x09, 0x00, 0x32, 0x40, 0x1a, - 0x06, 0x00, 0x00, 0x01, 0x03, 0x08, 0x01, 0x03, 0x0a, 0x0b, 0x06, 0x09, - 0x49, 0x59, 0x06, 0x06, 0x01, 0x02, 0x02, 0x05, 0x49, 0x59, 0x02, 0x03, - 0x01, 0x12, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, - 0x2b, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x21, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x01, 0x73, - 0xaa, 0x03, 0x2f, 0xfd, 0x7b, 0x02, 0x5e, 0xfd, 0xa2, 0x05, 0xb6, 0x97, - 0xfd, 0xe9, 0x97, 0x00, 0x00, 0x01, 0x00, 0x7d, 0xff, 0xec, 0x05, 0x3d, - 0x05, 0xcb, 0x00, 0x1b, 0x00, 0x3a, 0x40, 0x1f, 0x14, 0x08, 0x19, 0x02, - 0x02, 0x0e, 0x1b, 0x08, 0x04, 0x1c, 0x1d, 0x00, 0x1b, 0x49, 0x59, 0x00, - 0x00, 0x05, 0x0c, 0x0c, 0x11, 0x49, 0x59, 0x0c, 0x04, 0x05, 0x17, 0x49, - 0x59, 0x05, 0x13, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x21, 0x11, 0x0e, 0x01, 0x23, 0x20, 0x00, - 0x11, 0x34, 0x12, 0x24, 0x33, 0x32, 0x17, 0x07, 0x26, 0x23, 0x20, 0x00, - 0x11, 0x10, 0x00, 0x21, 0x32, 0x37, 0x11, 0x21, 0x03, 0x4c, 0x01, 0xf1, - 0x74, 0xf0, 0x9e, 0xfe, 0xb4, 0xfe, 0x8e, 0xb7, 0x01, 0x58, 0xe7, 0xea, - 0xca, 0x42, 0xc6, 0xb7, 0xfe, 0xf5, 0xfe, 0xd4, 0x01, 0x21, 0x01, 0x18, - 0x98, 0x91, 0xfe, 0xb9, 0x02, 0xfe, 0xfd, 0x39, 0x25, 0x26, 0x01, 0x8b, - 0x01, 0x64, 0xe4, 0x01, 0x57, 0xb5, 0x56, 0x96, 0x54, 0xfe, 0xc2, 0xfe, - 0xe6, 0xfe, 0xd8, 0xfe, 0xce, 0x23, 0x01, 0xc2, 0x00, 0x01, 0x00, 0xc9, - 0x00, 0x00, 0x05, 0x1f, 0x05, 0xb6, 0x00, 0x0b, 0x00, 0x33, 0x40, 0x19, - 0x09, 0x01, 0x01, 0x00, 0x08, 0x04, 0x04, 0x05, 0x00, 0x05, 0x0d, 0x0c, - 0x08, 0x03, 0x49, 0x59, 0x08, 0x08, 0x05, 0x0a, 0x06, 0x03, 0x01, 0x05, - 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, 0x2f, 0x2b, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x21, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, - 0x33, 0x05, 0x1f, 0xaa, 0xfc, 0xfe, 0xaa, 0xaa, 0x03, 0x02, 0xaa, 0x02, - 0xb0, 0xfd, 0x50, 0x05, 0xb6, 0xfd, 0x92, 0x02, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0xc9, 0x00, 0x00, 0x01, 0x73, 0x05, 0xb6, 0x00, 0x03, - 0x00, 0x11, 0xb6, 0x00, 0x04, 0x05, 0x01, 0x03, 0x00, 0x12, 0x00, 0x3f, - 0x3f, 0x11, 0x12, 0x01, 0x39, 0x31, 0x30, 0x33, 0x11, 0x33, 0x11, 0xc9, - 0xaa, 0x05, 0xb6, 0xfa, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x60, - 0xfe, 0x7f, 0x01, 0x68, 0x05, 0xb6, 0x00, 0x0d, 0x00, 0x1d, 0x40, 0x0d, - 0x0b, 0x08, 0x08, 0x0e, 0x0f, 0x09, 0x03, 0x00, 0x05, 0x49, 0x59, 0x00, - 0x22, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x11, 0x12, 0x01, 0x39, 0x11, - 0x33, 0x31, 0x30, 0x03, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, - 0x11, 0x33, 0x11, 0x14, 0x06, 0x0c, 0x5e, 0x36, 0x47, 0x4d, 0x63, 0x67, - 0xaa, 0xc0, 0xfe, 0x7f, 0x1b, 0x91, 0x14, 0x78, 0x71, 0x05, 0xb6, 0xfa, - 0x58, 0xbe, 0xd1, 0x00, 0x00, 0x01, 0x00, 0xc9, 0x00, 0x00, 0x04, 0xe9, - 0x05, 0xb6, 0x00, 0x0b, 0x00, 0x2a, 0x40, 0x15, 0x08, 0x04, 0x04, 0x05, - 0x05, 0x02, 0x0b, 0x0a, 0x00, 0x05, 0x0d, 0x0c, 0x02, 0x08, 0x05, 0x09, - 0x06, 0x03, 0x01, 0x05, 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, - 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x21, 0x23, 0x01, 0x07, 0x11, 0x23, 0x11, 0x33, 0x11, 0x01, 0x33, 0x01, - 0x04, 0xe9, 0xc8, 0xfd, 0xeb, 0x99, 0xaa, 0xaa, 0x02, 0x97, 0xc9, 0xfd, - 0xb4, 0x02, 0xc5, 0x88, 0xfd, 0xc3, 0x05, 0xb6, 0xfd, 0x2b, 0x02, 0xd5, - 0xfd, 0x85, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc9, 0x00, 0x00, 0x03, 0xf8, - 0x05, 0xb6, 0x00, 0x05, 0x00, 0x1f, 0x40, 0x0e, 0x03, 0x00, 0x00, 0x04, - 0x06, 0x07, 0x01, 0x03, 0x00, 0x03, 0x49, 0x59, 0x00, 0x12, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x31, - 0x30, 0x33, 0x11, 0x33, 0x11, 0x21, 0x15, 0xc9, 0xaa, 0x02, 0x85, 0x05, - 0xb6, 0xfa, 0xe4, 0x9a, 0x00, 0x01, 0x00, 0xc9, 0x00, 0x00, 0x06, 0x71, - 0x05, 0xb6, 0x00, 0x13, 0x00, 0x32, 0x40, 0x18, 0x08, 0x05, 0x05, 0x06, - 0x0b, 0x0e, 0x0e, 0x0d, 0x06, 0x0d, 0x14, 0x15, 0x01, 0x0a, 0x11, 0x03, - 0x06, 0x0b, 0x07, 0x03, 0x0e, 0x00, 0x06, 0x12, 0x00, 0x3f, 0x33, 0x33, - 0x3f, 0x33, 0x12, 0x17, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x21, 0x01, 0x23, 0x16, - 0x15, 0x11, 0x23, 0x11, 0x21, 0x01, 0x33, 0x01, 0x33, 0x11, 0x23, 0x11, - 0x34, 0x37, 0x23, 0x01, 0x03, 0x50, 0xfe, 0x10, 0x08, 0x0e, 0x9d, 0x01, - 0x00, 0x01, 0xcf, 0x08, 0x01, 0xd3, 0xfe, 0xaa, 0x0e, 0x08, 0xfe, 0x0c, - 0x05, 0x10, 0x9a, 0xd4, 0xfc, 0x5e, 0x05, 0xb6, 0xfb, 0x4a, 0x04, 0xb6, - 0xfa, 0x4a, 0x03, 0xae, 0xa2, 0xbe, 0xfa, 0xf2, 0x00, 0x01, 0x00, 0xc9, - 0x00, 0x00, 0x05, 0x3f, 0x05, 0xb6, 0x00, 0x10, 0x00, 0x2e, 0x40, 0x15, - 0x09, 0x06, 0x06, 0x07, 0x01, 0x0f, 0x0f, 0x00, 0x07, 0x00, 0x11, 0x12, - 0x0b, 0x03, 0x07, 0x0f, 0x08, 0x03, 0x01, 0x07, 0x12, 0x00, 0x3f, 0x33, - 0x3f, 0x33, 0x12, 0x39, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x21, 0x23, 0x01, 0x23, - 0x16, 0x15, 0x11, 0x23, 0x11, 0x33, 0x01, 0x33, 0x26, 0x02, 0x37, 0x11, - 0x33, 0x05, 0x3f, 0xc2, 0xfc, 0xe1, 0x08, 0x10, 0x9d, 0xc0, 0x03, 0x1d, - 0x08, 0x02, 0x0e, 0x02, 0x9f, 0x04, 0xcb, 0xd8, 0xb4, 0xfc, 0xc1, 0x05, - 0xb6, 0xfb, 0x3a, 0x1b, 0x01, 0x25, 0x3f, 0x03, 0x47, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x7d, 0xff, 0xec, 0x05, 0xbe, 0x05, 0xcd, 0x00, 0x0b, - 0x00, 0x17, 0x00, 0x28, 0x40, 0x14, 0x12, 0x00, 0x0c, 0x06, 0x00, 0x06, - 0x19, 0x18, 0x09, 0x15, 0x49, 0x59, 0x09, 0x04, 0x03, 0x0f, 0x49, 0x59, - 0x03, 0x13, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x01, - 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x00, 0x21, - 0x20, 0x00, 0x11, 0x10, 0x00, 0x21, 0x20, 0x00, 0x01, 0x10, 0x12, 0x33, - 0x32, 0x12, 0x11, 0x10, 0x02, 0x23, 0x22, 0x02, 0x05, 0xbe, 0xfe, 0x9d, - 0xfe, 0xc4, 0xfe, 0xbd, 0xfe, 0xa1, 0x01, 0x60, 0x01, 0x44, 0x01, 0x3b, - 0x01, 0x62, 0xfb, 0x73, 0xfd, 0xf1, 0xf3, 0xf8, 0xf7, 0xf2, 0xf3, 0xfd, - 0x02, 0xdd, 0xfe, 0xa1, 0xfe, 0x6e, 0x01, 0x8b, 0x01, 0x68, 0x01, 0x65, - 0x01, 0x89, 0xfe, 0x70, 0xfe, 0xa0, 0xfe, 0xd7, 0xfe, 0xcd, 0x01, 0x32, - 0x01, 0x2a, 0x01, 0x27, 0x01, 0x31, 0xfe, 0xcd, 0x00, 0x02, 0x00, 0xc9, - 0x00, 0x00, 0x04, 0x68, 0x05, 0xb6, 0x00, 0x09, 0x00, 0x12, 0x00, 0x34, - 0x40, 0x1a, 0x0a, 0x05, 0x05, 0x06, 0x0e, 0x00, 0x06, 0x00, 0x13, 0x14, - 0x0a, 0x04, 0x4a, 0x59, 0x0a, 0x0a, 0x06, 0x07, 0x07, 0x12, 0x4a, 0x59, - 0x07, 0x03, 0x06, 0x12, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, - 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x04, 0x21, 0x23, 0x11, 0x23, 0x11, - 0x21, 0x20, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x04, - 0x68, 0xfe, 0xd1, 0xfe, 0xe6, 0xac, 0xaa, 0x01, 0x7b, 0x02, 0x24, 0xfd, - 0x0b, 0x99, 0xe2, 0xca, 0xbe, 0xc9, 0xbe, 0x04, 0x0c, 0xde, 0xef, 0xfd, - 0xc1, 0x05, 0xb6, 0xfd, 0x1b, 0x92, 0xa1, 0x91, 0x8e, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x7d, 0xfe, 0xa4, 0x05, 0xbe, 0x05, 0xcd, 0x00, 0x0f, - 0x00, 0x1b, 0x00, 0x34, 0x40, 0x1b, 0x10, 0x0a, 0x16, 0x00, 0x00, 0x04, - 0x03, 0x0a, 0x04, 0x1c, 0x1d, 0x03, 0x0d, 0x07, 0x0d, 0x19, 0x49, 0x59, - 0x0d, 0x04, 0x07, 0x13, 0x49, 0x59, 0x05, 0x07, 0x13, 0x00, 0x3f, 0xc6, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, 0x12, 0x01, - 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x02, 0x07, - 0x01, 0x23, 0x01, 0x07, 0x20, 0x00, 0x11, 0x10, 0x00, 0x21, 0x20, 0x00, - 0x01, 0x10, 0x12, 0x33, 0x32, 0x12, 0x11, 0x10, 0x02, 0x23, 0x22, 0x02, - 0x05, 0xbe, 0xe2, 0xce, 0x01, 0x5c, 0xf7, 0xfe, 0xe3, 0x37, 0xfe, 0xbd, - 0xfe, 0xa1, 0x01, 0x60, 0x01, 0x44, 0x01, 0x3b, 0x01, 0x62, 0xfb, 0x73, - 0xfd, 0xf1, 0xf3, 0xf8, 0xf7, 0xf2, 0xf3, 0xfd, 0x02, 0xdd, 0xfe, 0xe7, - 0xfe, 0x8c, 0x42, 0xfe, 0x96, 0x01, 0x4a, 0x02, 0x01, 0x8b, 0x01, 0x68, - 0x01, 0x65, 0x01, 0x89, 0xfe, 0x70, 0xfe, 0xa0, 0xfe, 0xd7, 0xfe, 0xcd, - 0x01, 0x32, 0x01, 0x2a, 0x01, 0x27, 0x01, 0x31, 0xfe, 0xcd, 0x00, 0x00, - 0x00, 0x02, 0x00, 0xc9, 0x00, 0x00, 0x04, 0xcf, 0x05, 0xb6, 0x00, 0x0c, - 0x00, 0x15, 0x00, 0x48, 0x40, 0x25, 0x0d, 0x01, 0x01, 0x02, 0x0c, 0x09, - 0x11, 0x07, 0x0b, 0x0a, 0x0a, 0x07, 0x09, 0x02, 0x04, 0x16, 0x17, 0x09, - 0x0d, 0x00, 0x0d, 0x00, 0x4a, 0x59, 0x0d, 0x0d, 0x02, 0x03, 0x03, 0x15, - 0x49, 0x59, 0x03, 0x03, 0x0b, 0x02, 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, - 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x11, 0x23, 0x11, 0x21, 0x20, 0x04, 0x15, - 0x10, 0x05, 0x01, 0x23, 0x01, 0x25, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, - 0x2b, 0x01, 0x01, 0x73, 0xaa, 0x01, 0x91, 0x01, 0x0d, 0x01, 0x01, 0xfe, - 0xda, 0x01, 0x8d, 0xc9, 0xfe, 0x9e, 0xfe, 0xcf, 0xe9, 0xb4, 0xa8, 0xab, - 0xbd, 0xdd, 0x02, 0x60, 0xfd, 0xa0, 0x05, 0xb6, 0xce, 0xcf, 0xfe, 0xde, - 0x66, 0xfd, 0x6f, 0x02, 0x60, 0x92, 0x8f, 0x8f, 0x91, 0x80, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x02, 0x05, 0xcb, 0x00, 0x24, - 0x00, 0x34, 0x40, 0x1b, 0x1e, 0x13, 0x0c, 0x00, 0x00, 0x18, 0x13, 0x05, - 0x04, 0x25, 0x26, 0x0c, 0x1e, 0x03, 0x16, 0x16, 0x1b, 0x49, 0x59, 0x16, - 0x04, 0x03, 0x09, 0x49, 0x59, 0x03, 0x13, 0x00, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x04, 0x23, 0x20, 0x27, - 0x35, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x01, 0x27, 0x2e, - 0x01, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x07, 0x26, 0x23, 0x22, 0x06, - 0x15, 0x14, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x04, 0x02, 0xfe, 0xe8, 0xf0, - 0xfe, 0xfc, 0x8c, 0x5a, 0xd4, 0x68, 0xaa, 0xac, 0x3d, 0x8f, 0x92, 0xcc, - 0xaf, 0xfe, 0xd1, 0xda, 0xb7, 0x35, 0xb5, 0xab, 0x87, 0x98, 0x38, 0x85, - 0x89, 0xe6, 0xad, 0x01, 0x85, 0xc1, 0xd8, 0x43, 0xa4, 0x26, 0x2c, 0x81, - 0x73, 0x4c, 0x61, 0x52, 0x34, 0x49, 0xc8, 0xa1, 0xa9, 0xc8, 0x50, 0x94, - 0x4c, 0x74, 0x67, 0x4c, 0x61, 0x51, 0x31, 0x52, 0xbc, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x12, 0x00, 0x00, 0x04, 0x5a, 0x05, 0xb6, 0x00, 0x07, - 0x00, 0x24, 0x40, 0x12, 0x00, 0x01, 0x05, 0x01, 0x03, 0x03, 0x08, 0x09, - 0x07, 0x03, 0x04, 0x03, 0x49, 0x59, 0x04, 0x03, 0x01, 0x12, 0x00, 0x3f, - 0x3f, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, - 0x31, 0x30, 0x21, 0x23, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x02, 0x8b, - 0xaa, 0xfe, 0x31, 0x04, 0x48, 0xfe, 0x31, 0x05, 0x1f, 0x97, 0x97, 0x00, - 0x00, 0x01, 0x00, 0xba, 0xff, 0xec, 0x05, 0x19, 0x05, 0xb6, 0x00, 0x11, - 0x00, 0x25, 0x40, 0x11, 0x10, 0x01, 0x0a, 0x07, 0x01, 0x07, 0x13, 0x12, - 0x11, 0x08, 0x03, 0x04, 0x0d, 0x49, 0x59, 0x04, 0x13, 0x00, 0x3f, 0x2b, - 0x00, 0x18, 0x3f, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x11, 0x14, 0x00, 0x21, 0x20, 0x00, 0x35, 0x11, - 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x05, 0x19, 0xfe, - 0xd2, 0xfe, 0xf8, 0xfe, 0xf8, 0xfe, 0xdf, 0xaa, 0xc8, 0xc2, 0xb9, 0xc8, - 0x05, 0xb6, 0xfc, 0x4e, 0xfa, 0xfe, 0xe2, 0x01, 0x20, 0xfc, 0x03, 0xae, - 0xfc, 0x46, 0xb7, 0xc4, 0xc5, 0xb8, 0x03, 0xb8, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x04, 0xc3, 0x05, 0xb6, 0x00, 0x0a, 0x00, 0x1a, 0x40, 0x0b, - 0x01, 0x04, 0x0c, 0x0b, 0x08, 0x03, 0x00, 0x04, 0x03, 0x03, 0x12, 0x00, - 0x3f, 0x3f, 0x33, 0x12, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, 0x31, 0x30, - 0x01, 0x33, 0x01, 0x23, 0x01, 0x33, 0x01, 0x16, 0x17, 0x36, 0x37, 0x04, - 0x0c, 0xb7, 0xfd, 0xf1, 0xa8, 0xfd, 0xf4, 0xb4, 0x01, 0x50, 0x3a, 0x22, - 0x24, 0x3a, 0x05, 0xb6, 0xfa, 0x4a, 0x05, 0xb6, 0xfc, 0x4e, 0xa3, 0x9a, - 0xa2, 0xa1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1b, 0x00, 0x00, 0x07, 0x4c, - 0x05, 0xb6, 0x00, 0x19, 0x00, 0x24, 0x40, 0x10, 0x19, 0x0a, 0x1b, 0x1a, - 0x15, 0x0e, 0x0e, 0x05, 0x09, 0x18, 0x11, 0x0a, 0x03, 0x01, 0x09, 0x12, - 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x33, 0x12, 0x39, 0x39, 0x11, 0x33, 0x11, - 0x12, 0x01, 0x39, 0x39, 0x31, 0x30, 0x21, 0x23, 0x01, 0x2e, 0x01, 0x27, - 0x06, 0x07, 0x01, 0x23, 0x01, 0x33, 0x13, 0x16, 0x17, 0x36, 0x37, 0x01, - 0x33, 0x01, 0x16, 0x17, 0x36, 0x37, 0x13, 0x33, 0x05, 0xc5, 0xa8, 0xfe, - 0xd9, 0x15, 0x34, 0x01, 0x16, 0x30, 0xfe, 0xe2, 0xa8, 0xfe, 0x7b, 0xb4, - 0xe7, 0x30, 0x16, 0x1b, 0x35, 0x01, 0x06, 0xb4, 0x01, 0x13, 0x30, 0x21, - 0x13, 0x35, 0xe6, 0xb4, 0x03, 0xd3, 0x41, 0xc6, 0x14, 0x84, 0x9d, 0xfc, - 0x33, 0x05, 0xb6, 0xfc, 0x79, 0xbe, 0x9a, 0xb7, 0xaf, 0x03, 0x79, 0xfc, - 0x7f, 0x9b, 0xc3, 0x8e, 0xcc, 0x03, 0x85, 0x00, 0x00, 0x01, 0x00, 0x08, - 0x00, 0x00, 0x04, 0x96, 0x05, 0xb6, 0x00, 0x0b, 0x00, 0x23, 0x40, 0x12, - 0x04, 0x06, 0x05, 0x0b, 0x0a, 0x00, 0x06, 0x0d, 0x0c, 0x02, 0x08, 0x04, - 0x09, 0x06, 0x03, 0x01, 0x04, 0x12, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, - 0x39, 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x31, 0x30, 0x21, 0x23, 0x09, - 0x01, 0x23, 0x09, 0x01, 0x33, 0x09, 0x01, 0x33, 0x01, 0x04, 0x96, 0xc1, - 0xfe, 0x77, 0xfe, 0x70, 0xb4, 0x01, 0xe6, 0xfe, 0x3b, 0xbc, 0x01, 0x6b, - 0x01, 0x6e, 0xb5, 0xfe, 0x3b, 0x02, 0x83, 0xfd, 0x7d, 0x02, 0xfc, 0x02, - 0xba, 0xfd, 0xbd, 0x02, 0x43, 0xfd, 0x4c, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x7b, 0x05, 0xb6, 0x00, 0x08, 0x00, 0x20, 0x40, 0x0f, - 0x04, 0x05, 0x02, 0x05, 0x07, 0x03, 0x09, 0x0a, 0x00, 0x05, 0x01, 0x07, - 0x03, 0x05, 0x12, 0x00, 0x3f, 0x3f, 0x33, 0x12, 0x39, 0x11, 0x12, 0x01, - 0x17, 0x39, 0x11, 0x33, 0x31, 0x30, 0x09, 0x01, 0x33, 0x01, 0x11, 0x23, - 0x11, 0x01, 0x33, 0x02, 0x3d, 0x01, 0x86, 0xb8, 0xfe, 0x18, 0xac, 0xfe, - 0x19, 0xba, 0x02, 0xdb, 0x02, 0xdb, 0xfc, 0x81, 0xfd, 0xc9, 0x02, 0x2f, - 0x03, 0x87, 0x00, 0x00, 0x00, 0x01, 0x00, 0x52, 0x00, 0x00, 0x04, 0x3f, - 0x05, 0xb6, 0x00, 0x09, 0x00, 0x2b, 0x40, 0x17, 0x08, 0x01, 0x03, 0x07, - 0x00, 0x07, 0x04, 0x01, 0x04, 0x0a, 0x0b, 0x05, 0x04, 0x49, 0x59, 0x05, - 0x03, 0x01, 0x08, 0x49, 0x59, 0x01, 0x12, 0x00, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x29, 0x01, 0x35, 0x01, 0x21, 0x35, 0x21, 0x15, 0x01, 0x21, 0x04, - 0x3f, 0xfc, 0x13, 0x03, 0x08, 0xfd, 0x10, 0x03, 0xbf, 0xfc, 0xf8, 0x03, - 0x1e, 0x85, 0x04, 0x98, 0x99, 0x85, 0xfb, 0x69, 0x00, 0x01, 0x00, 0xa6, - 0xfe, 0xbc, 0x02, 0x6f, 0x05, 0xb6, 0x00, 0x07, 0x00, 0x20, 0x40, 0x0e, - 0x06, 0x01, 0x04, 0x00, 0x01, 0x00, 0x08, 0x09, 0x05, 0x02, 0x03, 0x06, - 0x01, 0x27, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x21, 0x11, 0x21, 0x15, 0x21, - 0x11, 0x21, 0x02, 0x6f, 0xfe, 0x37, 0x01, 0xc9, 0xfe, 0xdf, 0x01, 0x21, - 0xfe, 0xbc, 0x06, 0xfa, 0x8d, 0xfa, 0x21, 0x00, 0x00, 0x01, 0x00, 0x17, - 0x00, 0x00, 0x02, 0xdd, 0x05, 0xb6, 0x00, 0x03, 0x00, 0x13, 0xb7, 0x03, - 0x01, 0x04, 0x05, 0x03, 0x03, 0x02, 0x12, 0x00, 0x3f, 0x3f, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x31, 0x30, 0x13, 0x01, 0x23, 0x01, 0xba, 0x02, 0x23, - 0xa6, 0xfd, 0xe0, 0x05, 0xb6, 0xfa, 0x4a, 0x05, 0xb6, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x33, 0xfe, 0xbc, 0x01, 0xfc, 0x05, 0xb6, 0x00, 0x07, - 0x00, 0x20, 0x40, 0x0e, 0x03, 0x00, 0x01, 0x06, 0x00, 0x06, 0x08, 0x09, - 0x00, 0x07, 0x27, 0x03, 0x04, 0x03, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x11, - 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x17, 0x21, - 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x33, 0x01, 0x21, 0xfe, 0xdf, 0x01, - 0xc9, 0xfe, 0x37, 0xb6, 0x05, 0xdf, 0x8d, 0xf9, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x31, 0x02, 0x27, 0x04, 0x23, 0x05, 0xc1, 0x00, 0x06, - 0x00, 0x18, 0x40, 0x09, 0x00, 0x03, 0x07, 0x08, 0x05, 0x02, 0x00, 0x04, - 0x02, 0x00, 0x2f, 0x2f, 0x33, 0x12, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x31, 0x30, 0x13, 0x01, 0x33, 0x01, 0x23, 0x09, 0x01, 0x31, 0x01, 0xb2, - 0x63, 0x01, 0xdd, 0x98, 0xfe, 0x8c, 0xfe, 0xb2, 0x02, 0x27, 0x03, 0x9a, - 0xfc, 0x66, 0x02, 0xe9, 0xfd, 0x17, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfc, - 0xfe, 0xc5, 0x03, 0x9a, 0xff, 0x48, 0x00, 0x03, 0x00, 0x11, 0xb5, 0x00, - 0x05, 0x01, 0x04, 0x01, 0x02, 0x00, 0x2f, 0x33, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x21, 0x35, 0x21, 0x03, 0x9a, 0xfc, 0x62, 0x03, - 0x9e, 0xfe, 0xc5, 0x83, 0x00, 0x01, 0x01, 0x89, 0x04, 0xd9, 0x03, 0x12, - 0x06, 0x21, 0x00, 0x09, 0x00, 0x13, 0xb6, 0x00, 0x04, 0x0b, 0x0a, 0x06, - 0x80, 0x01, 0x00, 0x2f, 0x1a, 0xcd, 0x11, 0x12, 0x01, 0x39, 0x39, 0x31, - 0x30, 0x01, 0x23, 0x2e, 0x01, 0x27, 0x35, 0x33, 0x1e, 0x01, 0x17, 0x03, - 0x12, 0x6e, 0x41, 0xb2, 0x28, 0xcb, 0x20, 0x72, 0x2c, 0x04, 0xd9, 0x34, - 0xc0, 0x3f, 0x15, 0x45, 0xb5, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5e, - 0xff, 0xec, 0x03, 0xcd, 0x04, 0x5a, 0x00, 0x19, 0x00, 0x24, 0x00, 0x47, - 0x40, 0x25, 0x22, 0x08, 0x0b, 0x1e, 0x1e, 0x19, 0x19, 0x12, 0x08, 0x03, - 0x25, 0x26, 0x01, 0x02, 0x0b, 0x1e, 0x47, 0x59, 0x02, 0x0b, 0x0b, 0x00, - 0x15, 0x15, 0x0f, 0x46, 0x59, 0x15, 0x10, 0x05, 0x1a, 0x46, 0x59, 0x05, - 0x16, 0x00, 0x15, 0x00, 0x3f, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x18, 0x2f, 0x39, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, - 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x21, - 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x10, 0x25, 0x37, 0x35, - 0x34, 0x26, 0x23, 0x22, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, - 0x11, 0x25, 0x32, 0x36, 0x3d, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, - 0x03, 0x52, 0x21, 0x08, 0x52, 0xa3, 0x7a, 0xa3, 0xb9, 0x02, 0x13, 0xba, - 0x6f, 0x7a, 0x89, 0xad, 0x33, 0x51, 0xc1, 0x61, 0xc4, 0xbd, 0xfe, 0x0e, - 0x9b, 0xb1, 0xa6, 0xc6, 0xaf, 0x6d, 0x9c, 0x67, 0x49, 0xa8, 0x9b, 0x01, - 0x4c, 0x10, 0x06, 0x44, 0x81, 0x7b, 0x54, 0x7f, 0x2c, 0x32, 0xae, 0xc0, - 0xfd, 0x14, 0x75, 0xaa, 0x99, 0x63, 0x07, 0x07, 0x6d, 0x73, 0x5a, 0x5e, - 0x00, 0x02, 0x00, 0xb0, 0xff, 0xec, 0x04, 0x75, 0x06, 0x14, 0x00, 0x13, - 0x00, 0x1f, 0x00, 0x44, 0x40, 0x22, 0x0a, 0x17, 0x17, 0x0f, 0x0f, 0x0c, - 0x1d, 0x03, 0x0c, 0x03, 0x20, 0x21, 0x0d, 0x00, 0x0c, 0x15, 0x12, 0x11, - 0x0a, 0x11, 0x06, 0x00, 0x06, 0x1a, 0x46, 0x59, 0x06, 0x16, 0x00, 0x14, - 0x46, 0x59, 0x00, 0x10, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x39, 0x11, 0x33, 0x18, 0x3f, 0x3f, 0x11, 0x12, 0x01, - 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x01, 0x32, 0x12, 0x11, 0x10, 0x02, 0x23, 0x22, 0x26, 0x27, 0x23, 0x07, - 0x23, 0x11, 0x33, 0x11, 0x14, 0x07, 0x33, 0x36, 0x17, 0x22, 0x06, 0x15, - 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x02, 0xae, 0xd8, 0xef, - 0xf1, 0xd6, 0x6b, 0xb1, 0x3c, 0x0c, 0x23, 0x77, 0xa6, 0x08, 0x08, 0x74, - 0xcc, 0xaa, 0x96, 0x9a, 0xaa, 0x99, 0x96, 0x96, 0x04, 0x5a, 0xfe, 0xd9, - 0xfe, 0xf2, 0xfe, 0xf2, 0xfe, 0xd5, 0x4f, 0x52, 0x8d, 0x06, 0x14, 0xfe, - 0x86, 0x7f, 0x65, 0xa4, 0x8b, 0xc3, 0xe7, 0xe7, 0xc7, 0xdf, 0xd1, 0xd6, - 0xd2, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x73, 0xff, 0xec, 0x03, 0x8b, - 0x04, 0x5c, 0x00, 0x16, 0x00, 0x26, 0x40, 0x14, 0x0f, 0x03, 0x03, 0x15, - 0x09, 0x03, 0x18, 0x17, 0x06, 0x0d, 0x46, 0x59, 0x06, 0x10, 0x00, 0x12, - 0x46, 0x59, 0x00, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x31, 0x30, 0x05, 0x22, 0x00, 0x11, - 0x10, 0x00, 0x33, 0x32, 0x16, 0x17, 0x07, 0x2e, 0x01, 0x23, 0x20, 0x11, - 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x06, 0x02, 0x66, 0xee, 0xfe, 0xfb, - 0x01, 0x09, 0xf5, 0x4f, 0x9e, 0x2d, 0x33, 0x37, 0x82, 0x32, 0xfe, 0xb2, - 0xa3, 0xa0, 0x89, 0x90, 0x6e, 0x14, 0x01, 0x25, 0x01, 0x0c, 0x01, 0x13, - 0x01, 0x2c, 0x22, 0x17, 0x8d, 0x16, 0x1d, 0xfe, 0x56, 0xca, 0xd8, 0x3b, - 0x93, 0x39, 0x00, 0x00, 0x00, 0x02, 0x00, 0x73, 0xff, 0xec, 0x04, 0x37, - 0x06, 0x14, 0x00, 0x12, 0x00, 0x1f, 0x00, 0x42, 0x40, 0x21, 0x1d, 0x06, - 0x17, 0x00, 0x0e, 0x0e, 0x11, 0x06, 0x11, 0x20, 0x21, 0x12, 0x15, 0x0f, - 0x00, 0x00, 0x01, 0x01, 0x0c, 0x03, 0x09, 0x09, 0x1a, 0x46, 0x59, 0x09, - 0x10, 0x03, 0x13, 0x46, 0x59, 0x03, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x11, 0x33, 0x18, 0x3f, 0x3f, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, - 0x31, 0x30, 0x25, 0x23, 0x06, 0x23, 0x22, 0x02, 0x11, 0x10, 0x12, 0x33, - 0x32, 0x17, 0x33, 0x2f, 0x01, 0x11, 0x33, 0x11, 0x23, 0x25, 0x32, 0x36, - 0x3d, 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x03, 0x9a, - 0x09, 0x73, 0xe5, 0xd7, 0xef, 0xf0, 0xd6, 0xdf, 0x77, 0x0d, 0x07, 0x04, - 0xa6, 0x87, 0xfe, 0x9e, 0xaa, 0x99, 0x9b, 0xaa, 0x92, 0x9b, 0x9a, 0x93, - 0xa7, 0x01, 0x26, 0x01, 0x0f, 0x01, 0x0f, 0x01, 0x2c, 0xa2, 0x4f, 0x4d, - 0x01, 0xbe, 0xf9, 0xec, 0x77, 0xb9, 0xce, 0x23, 0xe9, 0xc7, 0xe3, 0xcf, - 0xd2, 0xd6, 0x00, 0x00, 0x00, 0x02, 0x00, 0x73, 0xff, 0xec, 0x04, 0x12, - 0x04, 0x5c, 0x00, 0x13, 0x00, 0x1a, 0x00, 0x3b, 0x40, 0x1f, 0x18, 0x0a, - 0x17, 0x0b, 0x03, 0x03, 0x11, 0x0a, 0x03, 0x1c, 0x1b, 0x17, 0x0b, 0x46, - 0x59, 0x17, 0x17, 0x00, 0x06, 0x06, 0x14, 0x46, 0x59, 0x06, 0x10, 0x00, - 0x0e, 0x46, 0x59, 0x00, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x2b, 0x11, 0x12, 0x01, 0x17, 0x39, - 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x05, 0x22, 0x00, 0x11, 0x10, - 0x00, 0x33, 0x32, 0x12, 0x1d, 0x01, 0x21, 0x1e, 0x01, 0x33, 0x32, 0x37, - 0x15, 0x0e, 0x01, 0x03, 0x22, 0x06, 0x07, 0x21, 0x34, 0x26, 0x02, 0x7f, - 0xf3, 0xfe, 0xe7, 0x01, 0x05, 0xdc, 0xce, 0xf0, 0xfd, 0x0d, 0x05, 0xb9, - 0xa8, 0xb1, 0xad, 0x58, 0x9d, 0x9c, 0x84, 0x9d, 0x0e, 0x02, 0x3d, 0x8c, - 0x14, 0x01, 0x28, 0x01, 0x07, 0x01, 0x09, 0x01, 0x38, 0xfe, 0xf1, 0xde, - 0x69, 0xc1, 0xc8, 0x4a, 0x94, 0x26, 0x21, 0x03, 0xe5, 0xac, 0x98, 0x9d, - 0xa7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1d, 0x00, 0x00, 0x03, 0x0e, - 0x06, 0x1f, 0x00, 0x14, 0x00, 0x39, 0x40, 0x1d, 0x14, 0x0c, 0x0c, 0x13, - 0x02, 0x02, 0x07, 0x03, 0x05, 0x03, 0x15, 0x16, 0x0a, 0x0f, 0x46, 0x59, - 0x0a, 0x00, 0x01, 0x05, 0x07, 0x05, 0x46, 0x59, 0x13, 0x07, 0x0f, 0x03, - 0x15, 0x00, 0x3f, 0x3f, 0x33, 0x2b, 0x11, 0x00, 0x33, 0x18, 0x3f, 0x2b, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x33, 0x12, - 0x39, 0x31, 0x30, 0x01, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x37, 0x35, - 0x10, 0x21, 0x32, 0x17, 0x07, 0x26, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x21, - 0x02, 0x9e, 0xfe, 0xe9, 0xa6, 0xc4, 0xc4, 0x01, 0x61, 0x57, 0x75, 0x2b, - 0x60, 0x44, 0x5e, 0x5a, 0x01, 0x17, 0x03, 0xc7, 0xfc, 0x39, 0x03, 0xc7, - 0x4b, 0x3c, 0x3d, 0x01, 0x94, 0x23, 0x85, 0x1f, 0x7d, 0x8a, 0x47, 0x00, - 0x00, 0x03, 0x00, 0x27, 0xfe, 0x14, 0x04, 0x31, 0x04, 0x5c, 0x00, 0x2a, - 0x00, 0x37, 0x00, 0x41, 0x00, 0x6e, 0x40, 0x3e, 0x2b, 0x19, 0x38, 0x25, - 0x0c, 0x1f, 0x3d, 0x05, 0x31, 0x13, 0x01, 0x13, 0x05, 0x02, 0x2a, 0x22, - 0x1c, 0x1f, 0x25, 0x19, 0x0a, 0x42, 0x43, 0x1c, 0x0f, 0x35, 0x0f, 0x35, - 0x46, 0x59, 0x08, 0x3b, 0x47, 0x59, 0x0a, 0x22, 0x08, 0x2a, 0x0f, 0x08, - 0x0f, 0x08, 0x16, 0x2a, 0x2a, 0x02, 0x47, 0x59, 0x2a, 0x0f, 0x28, 0x3f, - 0x47, 0x59, 0x28, 0x10, 0x16, 0x2e, 0x47, 0x59, 0x16, 0x1b, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, - 0x39, 0x39, 0x18, 0x2f, 0x2f, 0x11, 0x12, 0x39, 0x39, 0x2b, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x15, 0x07, 0x1e, - 0x01, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x06, 0x15, 0x14, 0x16, 0x3b, - 0x01, 0x32, 0x16, 0x15, 0x14, 0x04, 0x21, 0x22, 0x26, 0x35, 0x34, 0x36, - 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, - 0x33, 0x32, 0x17, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, - 0x2b, 0x01, 0x22, 0x06, 0x13, 0x14, 0x16, 0x33, 0x32, 0x35, 0x34, 0x23, - 0x22, 0x06, 0x04, 0x31, 0xcb, 0x1c, 0x2c, 0xdc, 0xc0, 0x31, 0x2b, 0x6a, - 0x4a, 0x5a, 0xc2, 0xb2, 0xbf, 0xfe, 0xdc, 0xfe, 0xe8, 0xd7, 0xe9, 0x80, - 0x74, 0x2a, 0x39, 0x40, 0x45, 0x55, 0x6b, 0xd8, 0xc6, 0x56, 0x45, 0xfe, - 0x11, 0x96, 0x8c, 0xd1, 0xc9, 0x6e, 0x98, 0xc7, 0x71, 0x7e, 0x5a, 0x82, - 0x74, 0xf3, 0xf6, 0x75, 0x7e, 0x04, 0x48, 0x69, 0x18, 0x23, 0x71, 0x47, - 0xa1, 0xc0, 0x08, 0x38, 0x55, 0x2d, 0x2b, 0x96, 0x8f, 0xb6, 0xbf, 0xa0, - 0x92, 0x64, 0x92, 0x1a, 0x13, 0x50, 0x35, 0x3c, 0x5a, 0x2a, 0x23, 0xa8, - 0x6c, 0xb4, 0xc3, 0x14, 0xfb, 0x00, 0x59, 0x5c, 0x7d, 0x6b, 0x59, 0x45, - 0x6c, 0x03, 0x3c, 0x73, 0x76, 0xec, 0xf7, 0x7e, 0x00, 0x01, 0x00, 0xb0, - 0x00, 0x00, 0x04, 0x44, 0x06, 0x14, 0x00, 0x16, 0x00, 0x33, 0x40, 0x19, - 0x0e, 0x0c, 0x08, 0x08, 0x09, 0x00, 0x16, 0x09, 0x16, 0x17, 0x18, 0x0e, - 0x09, 0x12, 0x12, 0x04, 0x46, 0x59, 0x12, 0x10, 0x0a, 0x00, 0x00, 0x09, - 0x15, 0x00, 0x3f, 0x33, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x11, - 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x33, 0x31, - 0x30, 0x21, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x23, 0x11, - 0x33, 0x11, 0x14, 0x07, 0x33, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, - 0x03, 0x9e, 0x7a, 0x82, 0xad, 0x9f, 0xa6, 0xa6, 0x08, 0x0a, 0x31, 0xb5, - 0x74, 0xc9, 0xc9, 0x02, 0xc5, 0x86, 0x84, 0xbc, 0xd6, 0xfd, 0xc3, 0x06, - 0x14, 0xfe, 0x29, 0x55, 0x38, 0x4f, 0x5b, 0xbf, 0xd0, 0xfd, 0x35, 0x00, - 0x00, 0x02, 0x00, 0xa2, 0x00, 0x00, 0x01, 0x66, 0x05, 0xdf, 0x00, 0x03, - 0x00, 0x0f, 0x00, 0x23, 0x40, 0x11, 0x0a, 0x00, 0x00, 0x04, 0x01, 0x01, - 0x10, 0x11, 0x0d, 0x07, 0x48, 0x59, 0x0d, 0x02, 0x0f, 0x01, 0x15, 0x00, - 0x3f, 0x3f, 0xce, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x21, 0x23, 0x11, 0x33, 0x03, 0x34, 0x36, 0x33, 0x32, - 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x01, 0x56, 0xa6, 0xa6, 0xb4, - 0x38, 0x2a, 0x28, 0x3a, 0x3a, 0x28, 0x2a, 0x38, 0x04, 0x48, 0x01, 0x29, - 0x39, 0x35, 0x36, 0x38, 0x38, 0x37, 0x37, 0x00, 0x00, 0x02, 0xff, 0x91, - 0xfe, 0x14, 0x01, 0x66, 0x05, 0xdf, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x2c, - 0x40, 0x16, 0x13, 0x0b, 0x0b, 0x0d, 0x08, 0x08, 0x19, 0x1a, 0x16, 0x10, - 0x48, 0x59, 0x16, 0x40, 0x09, 0x0f, 0x00, 0x05, 0x46, 0x59, 0x00, 0x1b, - 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x1a, 0xce, 0x2b, 0x11, 0x12, 0x01, - 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x22, 0x27, 0x35, - 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x10, 0x03, 0x34, 0x36, - 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x2b, 0x5f, 0x3b, - 0x45, 0x43, 0x4e, 0x49, 0xa6, 0xb4, 0x38, 0x2a, 0x28, 0x3a, 0x3a, 0x28, - 0x2a, 0x38, 0xfe, 0x14, 0x19, 0x87, 0x14, 0x55, 0x57, 0x04, 0xfc, 0xfb, - 0x10, 0xfe, 0xbc, 0x07, 0x5d, 0x39, 0x35, 0x36, 0x38, 0x38, 0x37, 0x37, - 0x00, 0x01, 0x00, 0xb0, 0x00, 0x00, 0x04, 0x1d, 0x06, 0x14, 0x00, 0x10, - 0x00, 0x36, 0x40, 0x1b, 0x10, 0x0e, 0x0a, 0x0a, 0x0b, 0x0b, 0x08, 0x06, - 0x04, 0x05, 0x08, 0x04, 0x11, 0x12, 0x0c, 0x00, 0x00, 0x10, 0x10, 0x08, - 0x08, 0x03, 0x07, 0x0b, 0x15, 0x03, 0x0f, 0x00, 0x3f, 0x3f, 0x33, 0x12, - 0x39, 0x2f, 0x39, 0x11, 0x33, 0x3f, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x01, 0x36, 0x37, 0x01, - 0x33, 0x09, 0x01, 0x23, 0x01, 0x07, 0x11, 0x23, 0x11, 0x33, 0x11, 0x14, - 0x07, 0x01, 0x54, 0x2b, 0x58, 0x01, 0x62, 0xc5, 0xfe, 0x44, 0x01, 0xdb, - 0xc9, 0xfe, 0x7d, 0x7d, 0xa4, 0xa4, 0x08, 0x02, 0x31, 0x3d, 0x63, 0x01, - 0x77, 0xfe, 0x2d, 0xfd, 0x8b, 0x02, 0x06, 0x6c, 0xfe, 0x66, 0x06, 0x14, - 0xfc, 0xc7, 0x37, 0x73, 0x00, 0x01, 0x00, 0xb0, 0x00, 0x00, 0x01, 0x56, - 0x06, 0x14, 0x00, 0x03, 0x00, 0x16, 0x40, 0x09, 0x00, 0x01, 0x01, 0x04, - 0x05, 0x02, 0x00, 0x01, 0x15, 0x00, 0x3f, 0x3f, 0x11, 0x12, 0x01, 0x39, - 0x11, 0x33, 0x31, 0x30, 0x21, 0x23, 0x11, 0x33, 0x01, 0x56, 0xa6, 0xa6, - 0x06, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb0, 0x00, 0x00, 0x06, 0xcb, - 0x04, 0x5c, 0x00, 0x23, 0x00, 0x46, 0x40, 0x23, 0x15, 0x11, 0x11, 0x12, - 0x08, 0x09, 0x00, 0x23, 0x09, 0x12, 0x23, 0x03, 0x24, 0x25, 0x1c, 0x16, - 0x15, 0x15, 0x12, 0x19, 0x04, 0x0d, 0x19, 0x0d, 0x46, 0x59, 0x1f, 0x19, - 0x10, 0x13, 0x0f, 0x09, 0x00, 0x12, 0x15, 0x00, 0x3f, 0x33, 0x33, 0x3f, - 0x3f, 0x33, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, 0x39, 0x18, 0x2f, 0x33, - 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x21, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, - 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x23, 0x11, - 0x33, 0x17, 0x33, 0x3e, 0x01, 0x33, 0x20, 0x17, 0x33, 0x3e, 0x01, 0x33, - 0x32, 0x16, 0x15, 0x11, 0x06, 0x25, 0x70, 0x76, 0x9b, 0x94, 0xa6, 0x70, - 0x77, 0x9c, 0x91, 0xa6, 0x87, 0x1b, 0x08, 0x2f, 0xab, 0x6a, 0x01, 0x01, - 0x4f, 0x08, 0x31, 0xba, 0x77, 0xba, 0xb9, 0x02, 0xc9, 0x83, 0x83, 0xb2, - 0xb9, 0xfd, 0x9c, 0x02, 0xc9, 0x83, 0x83, 0xbb, 0xd5, 0xfd, 0xc1, 0x04, - 0x48, 0x96, 0x50, 0x5a, 0xba, 0x56, 0x64, 0xbf, 0xd2, 0xfd, 0x35, 0x00, - 0x00, 0x01, 0x00, 0xb0, 0x00, 0x00, 0x04, 0x44, 0x04, 0x5c, 0x00, 0x14, - 0x00, 0x31, 0x40, 0x18, 0x00, 0x14, 0x0c, 0x08, 0x08, 0x09, 0x14, 0x09, - 0x16, 0x15, 0x0c, 0x09, 0x10, 0x10, 0x04, 0x46, 0x59, 0x10, 0x10, 0x0a, - 0x0f, 0x00, 0x09, 0x15, 0x00, 0x3f, 0x33, 0x3f, 0x3f, 0x2b, 0x11, 0x12, - 0x00, 0x39, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x21, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, - 0x23, 0x11, 0x33, 0x17, 0x33, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, - 0x03, 0x9e, 0x7a, 0x82, 0xac, 0xa0, 0xa6, 0x87, 0x1b, 0x08, 0x33, 0xb8, - 0x71, 0xc6, 0xc8, 0x02, 0xc5, 0x86, 0x84, 0xba, 0xd6, 0xfd, 0xc1, 0x04, - 0x48, 0x96, 0x51, 0x59, 0xbf, 0xd2, 0xfd, 0x35, 0x00, 0x02, 0x00, 0x73, - 0xff, 0xec, 0x04, 0x62, 0x04, 0x5c, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x28, - 0x40, 0x14, 0x13, 0x00, 0x0d, 0x07, 0x00, 0x07, 0x1a, 0x19, 0x0a, 0x16, - 0x46, 0x59, 0x0a, 0x10, 0x03, 0x10, 0x46, 0x59, 0x03, 0x16, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x00, 0x23, 0x22, 0x26, 0x02, 0x35, - 0x10, 0x00, 0x33, 0x32, 0x00, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, - 0x34, 0x26, 0x23, 0x22, 0x06, 0x04, 0x62, 0xfe, 0xf2, 0xee, 0x93, 0xe4, - 0x7c, 0x01, 0x0c, 0xee, 0xe6, 0x01, 0x0f, 0xfc, 0xbd, 0xa8, 0xa3, 0xa3, - 0xa9, 0xa9, 0xa5, 0xa3, 0xa6, 0x02, 0x25, 0xfe, 0xf4, 0xfe, 0xd3, 0x8a, - 0x01, 0x02, 0xad, 0x01, 0x0c, 0x01, 0x2b, 0xfe, 0xce, 0xfe, 0xfb, 0xd2, - 0xdc, 0xdb, 0xd3, 0xd1, 0xd9, 0xd6, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb0, - 0xfe, 0x14, 0x04, 0x75, 0x04, 0x5c, 0x00, 0x14, 0x00, 0x21, 0x00, 0x3f, - 0x40, 0x20, 0x19, 0x0b, 0x04, 0x07, 0x07, 0x08, 0x1f, 0x12, 0x08, 0x12, - 0x22, 0x23, 0x04, 0x0b, 0x00, 0x0f, 0x0f, 0x15, 0x46, 0x59, 0x0f, 0x10, - 0x09, 0x0f, 0x08, 0x1b, 0x00, 0x1c, 0x46, 0x59, 0x00, 0x16, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x33, - 0x33, 0x31, 0x30, 0x05, 0x22, 0x26, 0x27, 0x23, 0x16, 0x15, 0x11, 0x23, - 0x11, 0x33, 0x17, 0x33, 0x3e, 0x01, 0x33, 0x32, 0x12, 0x11, 0x10, 0x02, - 0x03, 0x22, 0x06, 0x07, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, - 0x26, 0x02, 0xae, 0x6b, 0xb1, 0x3c, 0x0c, 0x0c, 0xa6, 0x87, 0x17, 0x08, - 0x40, 0xaa, 0x6e, 0xda, 0xed, 0xf1, 0xee, 0xa8, 0x96, 0x02, 0x9a, 0xaa, - 0x8e, 0xa1, 0xa1, 0x14, 0x4f, 0x52, 0x60, 0x56, 0xfe, 0x3d, 0x06, 0x34, - 0x96, 0x5a, 0x50, 0xfe, 0xd6, 0xfe, 0xf3, 0xfe, 0xf2, 0xfe, 0xd5, 0x03, - 0xe3, 0xba, 0xcb, 0x25, 0xe7, 0xc7, 0xe6, 0xca, 0xcd, 0xdb, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x73, 0xfe, 0x14, 0x04, 0x37, 0x04, 0x5c, 0x00, 0x0c, - 0x00, 0x1f, 0x00, 0x44, 0x40, 0x22, 0x0a, 0x10, 0x1d, 0x16, 0x03, 0x1a, - 0x1a, 0x19, 0x10, 0x19, 0x20, 0x21, 0x1a, 0x1b, 0x17, 0x0f, 0x1d, 0x1e, - 0x1e, 0x16, 0x0d, 0x13, 0x13, 0x07, 0x46, 0x59, 0x13, 0x10, 0x0d, 0x00, - 0x46, 0x59, 0x0d, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x39, 0x11, 0x33, 0x18, 0x3f, 0x3f, 0x11, 0x12, 0x01, - 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x25, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, - 0x16, 0x17, 0x22, 0x02, 0x11, 0x10, 0x12, 0x33, 0x32, 0x17, 0x33, 0x37, - 0x33, 0x11, 0x23, 0x11, 0x34, 0x37, 0x23, 0x06, 0x02, 0x4e, 0xa6, 0x98, - 0x05, 0x9c, 0xa9, 0x92, 0x9b, 0x99, 0x7d, 0xd4, 0xee, 0xf0, 0xd6, 0xe1, - 0x79, 0x09, 0x18, 0x83, 0xa6, 0x0b, 0x0d, 0x73, 0x77, 0xb2, 0xd3, 0x25, - 0xe6, 0xca, 0xe3, 0xcf, 0xcf, 0xd9, 0x8b, 0x01, 0x2a, 0x01, 0x0b, 0x01, - 0x0d, 0x01, 0x2e, 0xaa, 0x96, 0xf9, 0xcc, 0x01, 0xd5, 0x64, 0x46, 0xa7, - 0x00, 0x01, 0x00, 0xb0, 0x00, 0x00, 0x03, 0x27, 0x04, 0x5c, 0x00, 0x10, - 0x00, 0x2a, 0x40, 0x14, 0x0d, 0x09, 0x09, 0x0a, 0x0a, 0x02, 0x11, 0x12, - 0x0b, 0x0f, 0x0d, 0x00, 0x0a, 0x15, 0x00, 0x05, 0x46, 0x59, 0x00, 0x10, - 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x12, 0x39, 0x3f, 0x11, 0x12, 0x01, - 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x32, 0x17, 0x07, - 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x23, 0x11, 0x33, 0x17, 0x33, 0x3e, - 0x01, 0x02, 0xa4, 0x49, 0x3a, 0x17, 0x44, 0x34, 0x85, 0xbd, 0xa6, 0x89, - 0x13, 0x08, 0x3d, 0xac, 0x04, 0x5c, 0x0c, 0x9a, 0x0f, 0xd8, 0xa1, 0xfd, - 0xb4, 0x04, 0x48, 0xcb, 0x6b, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6a, - 0xff, 0xec, 0x03, 0x73, 0x04, 0x5c, 0x00, 0x24, 0x00, 0x36, 0x40, 0x1c, - 0x1e, 0x13, 0x0c, 0x00, 0x00, 0x18, 0x05, 0x13, 0x04, 0x25, 0x26, 0x0c, - 0x1e, 0x03, 0x16, 0x16, 0x1b, 0x46, 0x59, 0x16, 0x10, 0x06, 0x03, 0x09, - 0x46, 0x59, 0x03, 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x2f, 0x3f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x06, 0x23, 0x22, 0x27, 0x35, 0x1e, - 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x02, 0x35, 0x34, - 0x36, 0x33, 0x32, 0x17, 0x07, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, - 0x01, 0x17, 0x1e, 0x01, 0x03, 0x73, 0xe4, 0xce, 0xda, 0x7a, 0x4f, 0xb5, - 0x54, 0x82, 0x8c, 0x6f, 0xa1, 0x99, 0x81, 0x3f, 0xda, 0xbe, 0xb1, 0xa9, - 0x3b, 0xa5, 0x86, 0x76, 0x78, 0x2d, 0x64, 0x8e, 0xc3, 0x89, 0x01, 0x2b, - 0x99, 0xa6, 0x45, 0x9a, 0x28, 0x2e, 0x53, 0x55, 0x40, 0x5b, 0x3e, 0x39, - 0x55, 0x6c, 0x4b, 0x86, 0x9b, 0x48, 0x87, 0x44, 0x4a, 0x41, 0x2c, 0x3e, - 0x38, 0x35, 0x47, 0x90, 0x00, 0x01, 0x00, 0x1f, 0xff, 0xec, 0x02, 0xa8, - 0x05, 0x46, 0x00, 0x16, 0x00, 0x34, 0x40, 0x1b, 0x10, 0x14, 0x14, 0x09, - 0x0b, 0x09, 0x12, 0x03, 0x04, 0x18, 0x17, 0x0a, 0x13, 0x10, 0x13, 0x47, - 0x59, 0x0e, 0x40, 0x10, 0x0f, 0x07, 0x00, 0x46, 0x59, 0x07, 0x16, 0x00, - 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x1a, 0xcd, 0x2b, 0x11, 0x00, 0x33, 0x11, - 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x25, 0x32, - 0x36, 0x37, 0x15, 0x0e, 0x01, 0x23, 0x20, 0x19, 0x01, 0x23, 0x35, 0x3f, - 0x01, 0x33, 0x15, 0x21, 0x15, 0x21, 0x11, 0x14, 0x16, 0x02, 0x12, 0x2c, - 0x52, 0x18, 0x1b, 0x69, 0x2a, 0xfe, 0xc2, 0x9d, 0x9d, 0x46, 0x60, 0x01, - 0x3e, 0xfe, 0xc2, 0x5e, 0x75, 0x0d, 0x07, 0x7f, 0x0d, 0x11, 0x01, 0x4f, - 0x02, 0x8c, 0x50, 0x45, 0xea, 0xfe, 0x81, 0xfd, 0x7b, 0x63, 0x6a, 0x00, - 0x00, 0x01, 0x00, 0xa4, 0xff, 0xec, 0x04, 0x39, 0x04, 0x48, 0x00, 0x14, - 0x00, 0x34, 0x40, 0x19, 0x01, 0x13, 0x07, 0x0c, 0x0c, 0x0a, 0x13, 0x0a, - 0x15, 0x16, 0x0c, 0x0d, 0x0d, 0x10, 0x08, 0x14, 0x0f, 0x10, 0x04, 0x46, - 0x59, 0x10, 0x16, 0x0b, 0x15, 0x00, 0x3f, 0x3f, 0x2b, 0x00, 0x18, 0x3f, - 0x33, 0x12, 0x39, 0x11, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x11, 0x14, 0x16, 0x33, 0x32, - 0x36, 0x35, 0x11, 0x33, 0x11, 0x23, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, - 0x26, 0x35, 0x11, 0x01, 0x4c, 0x7a, 0x82, 0xac, 0x9f, 0xa6, 0x89, 0x18, - 0x09, 0x33, 0xb5, 0x74, 0xc8, 0xc7, 0x04, 0x48, 0xfd, 0x39, 0x86, 0x84, - 0xbc, 0xd5, 0x02, 0x40, 0xfb, 0xb8, 0x93, 0x51, 0x56, 0xbe, 0xd1, 0x02, - 0xcd, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, - 0x04, 0x48, 0x00, 0x0b, 0x00, 0x18, 0x40, 0x0a, 0x01, 0x0a, 0x0c, 0x0d, - 0x05, 0x09, 0x01, 0x0f, 0x00, 0x15, 0x00, 0x3f, 0x3f, 0x33, 0x39, 0x11, - 0x12, 0x01, 0x39, 0x39, 0x31, 0x30, 0x21, 0x01, 0x33, 0x13, 0x16, 0x17, - 0x33, 0x36, 0x12, 0x13, 0x33, 0x01, 0x01, 0xa0, 0xfe, 0x60, 0xb2, 0xec, - 0x50, 0x0e, 0x08, 0x0b, 0x75, 0xcc, 0xb2, 0xfe, 0x60, 0x04, 0x48, 0xfd, - 0x76, 0xe4, 0x44, 0x35, 0x01, 0x4d, 0x02, 0x30, 0xfb, 0xb8, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x17, 0x00, 0x00, 0x06, 0x23, 0x04, 0x48, 0x00, 0x1c, - 0x00, 0x2c, 0x40, 0x14, 0x09, 0x1b, 0x1d, 0x1e, 0x17, 0x16, 0x0e, 0x0d, - 0x03, 0x04, 0x0d, 0x04, 0x08, 0x1a, 0x12, 0x09, 0x0f, 0x00, 0x08, 0x15, - 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x33, 0x12, 0x39, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x33, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x31, 0x30, 0x21, 0x03, - 0x26, 0x27, 0x23, 0x06, 0x07, 0x03, 0x23, 0x01, 0x33, 0x1a, 0x01, 0x17, - 0x33, 0x3e, 0x01, 0x37, 0x13, 0x33, 0x13, 0x16, 0x17, 0x33, 0x3e, 0x01, - 0x13, 0x33, 0x01, 0x04, 0x2f, 0xc9, 0x13, 0x34, 0x08, 0x28, 0x1e, 0xcf, - 0xc0, 0xfe, 0xd5, 0xae, 0x6a, 0x6f, 0x08, 0x08, 0x0b, 0x31, 0x12, 0xc9, - 0xb4, 0xc4, 0x38, 0x14, 0x08, 0x04, 0x23, 0xbf, 0xac, 0xfe, 0xd1, 0x02, - 0x83, 0x3b, 0xd1, 0xaf, 0x5f, 0xfd, 0x7f, 0x04, 0x48, 0xfe, 0x63, 0xfe, - 0x50, 0x4b, 0x39, 0xb5, 0x35, 0x02, 0x75, 0xfd, 0x8b, 0xac, 0x75, 0x24, - 0x96, 0x02, 0xdc, 0xfb, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x27, - 0x00, 0x00, 0x04, 0x08, 0x04, 0x48, 0x00, 0x0b, 0x00, 0x22, 0x40, 0x11, - 0x07, 0x05, 0x06, 0x00, 0x01, 0x05, 0x0c, 0x0d, 0x09, 0x03, 0x01, 0x08, - 0x0b, 0x15, 0x04, 0x01, 0x0f, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, 0x39, - 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x31, 0x30, 0x09, 0x01, 0x33, 0x09, - 0x01, 0x33, 0x09, 0x01, 0x23, 0x09, 0x01, 0x23, 0x01, 0xb8, 0xfe, 0x83, - 0xbd, 0x01, 0x21, 0x01, 0x20, 0xbb, 0xfe, 0x83, 0x01, 0x91, 0xbc, 0xfe, - 0xcd, 0xfe, 0xca, 0xbc, 0x02, 0x31, 0x02, 0x17, 0xfe, 0x5c, 0x01, 0xa4, - 0xfd, 0xe9, 0xfd, 0xcf, 0x01, 0xbc, 0xfe, 0x44, 0x00, 0x01, 0x00, 0x02, - 0xfe, 0x14, 0x04, 0x06, 0x04, 0x48, 0x00, 0x15, 0x00, 0x24, 0x40, 0x12, - 0x09, 0x0f, 0x00, 0x03, 0x16, 0x17, 0x04, 0x0d, 0x00, 0x0d, 0x12, 0x46, - 0x59, 0x0d, 0x1b, 0x08, 0x00, 0x0f, 0x00, 0x3f, 0x32, 0x3f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x31, 0x30, 0x13, 0x33, - 0x13, 0x16, 0x17, 0x33, 0x3e, 0x01, 0x13, 0x33, 0x01, 0x0e, 0x01, 0x23, - 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x3f, 0x01, 0x02, 0xb2, 0xf0, 0x4f, - 0x13, 0x08, 0x0d, 0x53, 0xe6, 0xb2, 0xfe, 0x29, 0x46, 0xbb, 0x88, 0x4c, - 0x4a, 0x37, 0x44, 0xab, 0x49, 0x3d, 0x04, 0x48, 0xfd, 0x8f, 0xd6, 0x5f, - 0x33, 0xf7, 0x02, 0x7c, 0xfb, 0x20, 0xb9, 0x9b, 0x11, 0x85, 0x0c, 0xc0, - 0x9c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x52, 0x00, 0x00, 0x03, 0x6d, - 0x04, 0x48, 0x00, 0x09, 0x00, 0x2b, 0x40, 0x17, 0x08, 0x01, 0x03, 0x07, - 0x00, 0x07, 0x04, 0x01, 0x04, 0x0a, 0x0b, 0x05, 0x04, 0x47, 0x59, 0x05, - 0x0f, 0x01, 0x08, 0x47, 0x59, 0x01, 0x15, 0x00, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x2b, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x29, 0x01, 0x35, 0x01, 0x21, 0x35, 0x21, 0x15, 0x01, 0x21, 0x03, - 0x6d, 0xfc, 0xe5, 0x02, 0x56, 0xfd, 0xcf, 0x02, 0xe7, 0xfd, 0xb2, 0x02, - 0x5d, 0x71, 0x03, 0x56, 0x81, 0x81, 0xfc, 0xba, 0x00, 0x01, 0x00, 0x3d, - 0xfe, 0xbc, 0x02, 0xc1, 0x05, 0xb6, 0x00, 0x1c, 0x00, 0x2c, 0x40, 0x15, - 0x19, 0x1a, 0x1a, 0x0b, 0x17, 0x00, 0x00, 0x0f, 0x07, 0x14, 0x03, 0x03, - 0x07, 0x0b, 0x03, 0x1d, 0x1e, 0x13, 0x03, 0x04, 0x27, 0x00, 0x3f, 0x3f, - 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x25, 0x14, 0x16, 0x17, 0x15, 0x2e, - 0x01, 0x35, 0x11, 0x34, 0x26, 0x23, 0x35, 0x3e, 0x01, 0x35, 0x11, 0x34, - 0x36, 0x33, 0x15, 0x06, 0x15, 0x11, 0x14, 0x07, 0x15, 0x16, 0x15, 0x01, - 0xdb, 0x75, 0x71, 0xbe, 0xd0, 0x7e, 0x78, 0x82, 0x74, 0xd8, 0xb6, 0xe6, - 0xdf, 0xdf, 0x0c, 0x66, 0x5c, 0x02, 0x8c, 0x02, 0xaa, 0x9a, 0x01, 0x2f, - 0x68, 0x59, 0x8d, 0x02, 0x5c, 0x60, 0x01, 0x32, 0x9b, 0xac, 0x8b, 0x06, - 0xc1, 0xfe, 0xd9, 0xd7, 0x27, 0x0c, 0x27, 0xd7, 0x00, 0x01, 0x01, 0xee, - 0xfe, 0x10, 0x02, 0x7b, 0x06, 0x14, 0x00, 0x03, 0x00, 0x16, 0x40, 0x09, - 0x02, 0x03, 0x03, 0x04, 0x05, 0x03, 0x1b, 0x00, 0x00, 0x00, 0x3f, 0x3f, - 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x33, 0x11, 0x23, - 0x01, 0xee, 0x8d, 0x8d, 0x06, 0x14, 0xf7, 0xfc, 0x00, 0x01, 0x00, 0x48, - 0xfe, 0xbc, 0x02, 0xcb, 0x05, 0xb6, 0x00, 0x1d, 0x00, 0x2c, 0x40, 0x15, - 0x15, 0x05, 0x0a, 0x12, 0x12, 0x02, 0x19, 0x00, 0x1d, 0x1d, 0x0e, 0x0e, - 0x19, 0x05, 0x03, 0x1e, 0x1f, 0x15, 0x27, 0x06, 0x03, 0x00, 0x3f, 0x3f, - 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x26, 0x35, 0x11, 0x34, 0x27, - 0x35, 0x32, 0x16, 0x15, 0x11, 0x14, 0x16, 0x17, 0x15, 0x22, 0x06, 0x15, - 0x11, 0x14, 0x06, 0x07, 0x35, 0x3e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, - 0x02, 0x0a, 0xdf, 0xe3, 0xb8, 0xd3, 0x76, 0x82, 0x7a, 0x7e, 0xcd, 0xbe, - 0x6f, 0x74, 0x6e, 0x71, 0x02, 0x3f, 0x27, 0xd7, 0x01, 0x27, 0xc1, 0x06, - 0x8b, 0xae, 0x99, 0xfe, 0xce, 0x61, 0x5b, 0x02, 0x8d, 0x59, 0x68, 0xfe, - 0xd1, 0x99, 0xab, 0x02, 0x8c, 0x02, 0x5c, 0x66, 0x01, 0x29, 0x72, 0x78, - 0x14, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x68, 0x02, 0x50, 0x04, 0x29, - 0x03, 0x54, 0x00, 0x17, 0x00, 0x24, 0x40, 0x11, 0x03, 0x0f, 0x18, 0x19, - 0x12, 0x0c, 0x50, 0x59, 0x03, 0x12, 0x0f, 0x06, 0x06, 0x00, 0x50, 0x59, - 0x06, 0x00, 0x2f, 0x2b, 0x00, 0x10, 0x18, 0xc4, 0x2f, 0xc4, 0x2b, 0x11, - 0x12, 0x01, 0x39, 0x39, 0x31, 0x30, 0x01, 0x22, 0x06, 0x07, 0x35, 0x36, - 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x15, 0x06, - 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x01, 0x52, 0x35, 0x7f, 0x36, 0x64, - 0x90, 0x44, 0x71, 0x59, 0x42, 0x62, 0x2f, 0x36, 0x80, 0x36, 0x66, 0x8e, - 0x48, 0x7e, 0x48, 0x4b, 0x5a, 0x02, 0xc9, 0x43, 0x36, 0x97, 0x6d, 0x1c, - 0x26, 0x1c, 0x1b, 0x40, 0x39, 0x96, 0x6e, 0x21, 0x20, 0x20, 0x18, 0x00, - 0x00, 0x02, 0x00, 0x98, 0xfe, 0x8b, 0x01, 0x89, 0x04, 0x5e, 0x00, 0x03, - 0x00, 0x0e, 0x00, 0x2b, 0x40, 0x14, 0x02, 0x04, 0x04, 0x03, 0x09, 0x09, - 0x0f, 0x10, 0x00, 0x00, 0x03, 0x0c, 0x0c, 0x06, 0x4f, 0x59, 0x0c, 0x10, - 0x03, 0x22, 0x00, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, - 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, - 0x33, 0x13, 0x23, 0x13, 0x14, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, - 0x32, 0x16, 0xdb, 0x69, 0x33, 0xcf, 0xe1, 0x79, 0x3c, 0x3c, 0x3f, 0x39, - 0x33, 0x46, 0x02, 0xac, 0xfb, 0xdf, 0x05, 0x4c, 0x87, 0x47, 0x40, 0x3f, - 0x48, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0xbe, 0xff, 0xec, 0x03, 0xdb, - 0x05, 0xcb, 0x00, 0x1b, 0x00, 0x3e, 0x40, 0x1e, 0x16, 0x08, 0x0d, 0x03, - 0x03, 0x0a, 0x04, 0x00, 0x10, 0x10, 0x04, 0x08, 0x03, 0x1c, 0x1d, 0x19, - 0x05, 0x02, 0x13, 0x0a, 0x0d, 0x02, 0x0d, 0x02, 0x0d, 0x04, 0x0b, 0x07, - 0x04, 0x19, 0x00, 0x3f, 0x3f, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x11, 0x33, - 0x33, 0x11, 0x33, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x25, 0x06, 0x07, 0x15, - 0x23, 0x35, 0x26, 0x02, 0x35, 0x10, 0x25, 0x35, 0x33, 0x15, 0x1e, 0x01, - 0x17, 0x07, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, - 0x03, 0xcb, 0x69, 0x93, 0x85, 0xcb, 0xc1, 0x01, 0x8c, 0x87, 0x4b, 0x8e, - 0x31, 0x31, 0x85, 0x6d, 0xac, 0xa2, 0x9f, 0xa7, 0x8d, 0x8e, 0xf0, 0x36, - 0x06, 0xc8, 0xce, 0x20, 0x01, 0x11, 0xfa, 0x01, 0xfc, 0x3e, 0xac, 0xa4, - 0x03, 0x21, 0x17, 0x8c, 0x33, 0xd3, 0xd9, 0xd4, 0xcb, 0x3b, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x04, 0x44, 0x05, 0xc9, 0x00, 0x1d, - 0x00, 0x48, 0x40, 0x26, 0x18, 0x13, 0x09, 0x0d, 0x0d, 0x1a, 0x16, 0x11, - 0x02, 0x0b, 0x16, 0x13, 0x05, 0x1e, 0x1f, 0x0c, 0x18, 0x19, 0x18, 0x4e, - 0x59, 0x09, 0x19, 0x19, 0x13, 0x00, 0x13, 0x10, 0x4c, 0x59, 0x13, 0x18, - 0x00, 0x05, 0x4b, 0x59, 0x00, 0x07, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, - 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, 0x33, 0x2b, 0x11, 0x00, 0x33, - 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, - 0x31, 0x30, 0x01, 0x32, 0x17, 0x07, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, - 0x21, 0x15, 0x21, 0x15, 0x14, 0x06, 0x07, 0x21, 0x15, 0x21, 0x35, 0x36, - 0x3d, 0x01, 0x23, 0x35, 0x33, 0x11, 0x34, 0x36, 0x02, 0xaa, 0xbe, 0xaa, - 0x3d, 0x9a, 0x8f, 0x7b, 0x7d, 0x01, 0xa6, 0xfe, 0x5a, 0x41, 0x4a, 0x03, - 0x1b, 0xfb, 0xfb, 0xcd, 0xc6, 0xc6, 0xe0, 0x05, 0xc9, 0x54, 0x85, 0x4d, - 0x7c, 0x8c, 0xfe, 0xd9, 0x7f, 0xdd, 0x64, 0x88, 0x2c, 0x9a, 0x8d, 0x2f, - 0xf4, 0xdf, 0x7f, 0x01, 0x3c, 0xb2, 0xcd, 0x00, 0x00, 0x02, 0x00, 0x7b, - 0x01, 0x06, 0x04, 0x17, 0x04, 0xa0, 0x00, 0x1b, 0x00, 0x27, 0x00, 0x20, - 0x40, 0x0d, 0x1c, 0x00, 0x22, 0x0e, 0x00, 0x0e, 0x28, 0x29, 0x1f, 0x15, - 0x15, 0x25, 0x07, 0x00, 0x2f, 0x33, 0x33, 0x2f, 0x33, 0x11, 0x12, 0x01, - 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x34, 0x37, 0x27, - 0x37, 0x17, 0x36, 0x33, 0x32, 0x17, 0x37, 0x17, 0x07, 0x16, 0x15, 0x14, - 0x07, 0x17, 0x07, 0x27, 0x06, 0x23, 0x22, 0x27, 0x07, 0x27, 0x37, 0x26, - 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, - 0xb8, 0x4a, 0x87, 0x5e, 0x87, 0x68, 0x82, 0x7f, 0x66, 0x89, 0x5f, 0x86, - 0x4a, 0x4a, 0x83, 0x5c, 0x89, 0x66, 0x7f, 0x86, 0x64, 0x87, 0x5c, 0x85, - 0x4a, 0x81, 0x9d, 0x74, 0x74, 0x9e, 0xa0, 0x72, 0x74, 0x9d, 0x02, 0xd3, - 0x7a, 0x6b, 0x8c, 0x5c, 0x85, 0x49, 0x49, 0x85, 0x5c, 0x8a, 0x71, 0x76, - 0x83, 0x67, 0x87, 0x5c, 0x85, 0x47, 0x49, 0x85, 0x5c, 0x88, 0x6b, 0x7c, - 0x70, 0xa0, 0x9f, 0x71, 0x72, 0xa2, 0xa4, 0x00, 0x00, 0x01, 0x00, 0x1f, - 0x00, 0x00, 0x04, 0x71, 0x05, 0xb6, 0x00, 0x16, 0x00, 0x56, 0x40, 0x2e, - 0x12, 0x0e, 0x07, 0x0b, 0x0b, 0x10, 0x0c, 0x05, 0x09, 0x02, 0x09, 0x03, - 0x0c, 0x14, 0x0e, 0x15, 0x07, 0x17, 0x18, 0x0a, 0x0e, 0x0e, 0x07, 0x0f, - 0x06, 0x12, 0x12, 0x03, 0x00, 0x13, 0x15, 0x0f, 0x13, 0x1f, 0x13, 0x02, - 0x0f, 0x13, 0x0f, 0x13, 0x0c, 0x01, 0x15, 0x06, 0x0c, 0x18, 0x00, 0x3f, - 0x3f, 0x33, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x5d, 0x11, 0x12, 0x39, 0x32, - 0x32, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x12, 0x01, 0x17, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x09, 0x01, 0x33, 0x01, 0x21, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x11, - 0x23, 0x11, 0x21, 0x35, 0x21, 0x35, 0x21, 0x35, 0x21, 0x01, 0x33, 0x02, - 0x48, 0x01, 0x7b, 0xae, 0xfe, 0x60, 0x01, 0x06, 0xfe, 0xc3, 0x01, 0x3d, - 0xfe, 0xc3, 0xa4, 0xfe, 0xc4, 0x01, 0x3c, 0xfe, 0xc4, 0x01, 0x00, 0xfe, - 0x65, 0xb2, 0x02, 0xdf, 0x02, 0xd7, 0xfc, 0xfe, 0x7f, 0xaa, 0x7f, 0xfe, - 0xf4, 0x01, 0x0c, 0x7f, 0xaa, 0x7f, 0x03, 0x02, 0x00, 0x02, 0x01, 0xee, - 0xfe, 0x10, 0x02, 0x7b, 0x06, 0x14, 0x00, 0x03, 0x00, 0x07, 0x00, 0x24, - 0x40, 0x10, 0x02, 0x06, 0x06, 0x03, 0x07, 0x07, 0x08, 0x09, 0x04, 0x03, - 0x04, 0x03, 0x07, 0x1b, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x39, 0x39, 0x2f, - 0x2f, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x01, 0x33, 0x11, 0x23, 0x11, 0x33, 0x11, 0x23, 0x01, 0xee, 0x8d, 0x8d, - 0x8d, 0x8d, 0x06, 0x14, 0xfc, 0xf8, 0xfe, 0x0d, 0xfc, 0xf7, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x7b, 0xff, 0xf8, 0x03, 0x96, 0x06, 0x1d, 0x00, 0x31, - 0x00, 0x3d, 0x00, 0x43, 0x40, 0x26, 0x32, 0x00, 0x13, 0x06, 0x2a, 0x1e, - 0x38, 0x19, 0x19, 0x1e, 0x0c, 0x06, 0x00, 0x23, 0x06, 0x3e, 0x3f, 0x15, - 0x03, 0x3b, 0x36, 0x1c, 0x2d, 0x06, 0x21, 0x09, 0x21, 0x27, 0x47, 0x59, - 0x21, 0x15, 0x09, 0x10, 0x47, 0x59, 0x09, 0x00, 0x00, 0x3f, 0x2b, 0x00, - 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x17, 0x39, 0x11, 0x12, 0x01, 0x17, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, - 0x34, 0x36, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, - 0x07, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, - 0x15, 0x14, 0x06, 0x07, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x35, - 0x1e, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x01, 0x27, 0x2e, 0x02, - 0x37, 0x14, 0x16, 0x1f, 0x01, 0x36, 0x35, 0x34, 0x26, 0x27, 0x0e, 0x01, - 0x8b, 0x56, 0x4e, 0x4a, 0x54, 0xcf, 0xc5, 0x5e, 0x9f, 0x61, 0x35, 0x62, - 0x87, 0x4c, 0x74, 0x74, 0x7b, 0x9a, 0xba, 0x96, 0x52, 0x4a, 0x99, 0xea, - 0xd4, 0xda, 0x80, 0x4e, 0xc2, 0x52, 0x86, 0x8d, 0x30, 0x6c, 0x73, 0x8e, - 0x86, 0x42, 0x92, 0x84, 0xa7, 0x31, 0x89, 0x93, 0xb9, 0x44, 0x55, 0x03, - 0x29, 0x56, 0x89, 0x25, 0x28, 0x6f, 0x55, 0x79, 0x8b, 0x1d, 0x27, 0x83, - 0x27, 0x1b, 0x3b, 0x40, 0x3c, 0x54, 0x37, 0x44, 0x97, 0x6b, 0x5a, 0x8d, - 0x29, 0x51, 0x92, 0x8c, 0x99, 0x41, 0x94, 0x25, 0x2d, 0x4c, 0x47, 0x2e, - 0x3a, 0x3a, 0x2b, 0x34, 0x5a, 0x72, 0x62, 0x4d, 0x69, 0x3d, 0x13, 0x50, - 0x6f, 0x53, 0x70, 0x39, 0x13, 0x64, 0x00, 0x00, 0x00, 0x02, 0x01, 0x35, - 0x05, 0x0e, 0x03, 0x68, 0x05, 0xd3, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x1e, - 0x40, 0x0c, 0x06, 0x00, 0x0c, 0x12, 0x00, 0x12, 0x18, 0x19, 0x0f, 0x03, - 0x15, 0x09, 0x00, 0x2f, 0x33, 0xcd, 0x32, 0x11, 0x12, 0x01, 0x39, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, - 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, - 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x01, 0x35, 0x35, 0x25, 0x26, 0x37, - 0x37, 0x26, 0x25, 0x35, 0x01, 0x7d, 0x35, 0x25, 0x25, 0x37, 0x37, 0x25, - 0x25, 0x35, 0x05, 0x71, 0x34, 0x2e, 0x2e, 0x34, 0x32, 0x31, 0x31, 0x32, - 0x34, 0x2e, 0x2e, 0x34, 0x32, 0x31, 0x31, 0x00, 0x00, 0x03, 0x00, 0x64, - 0xff, 0xec, 0x06, 0x44, 0x05, 0xcb, 0x00, 0x16, 0x00, 0x26, 0x00, 0x36, - 0x00, 0x46, 0x40, 0x27, 0x27, 0x17, 0x03, 0x0f, 0x2f, 0x1f, 0x1f, 0x14, - 0x09, 0x0f, 0x17, 0x05, 0x37, 0x38, 0x06, 0x0c, 0x00, 0x12, 0x0f, 0x0c, - 0x1f, 0x0c, 0x02, 0x00, 0x12, 0x10, 0x12, 0x02, 0x0c, 0x12, 0x0c, 0x12, - 0x1b, 0x2b, 0x23, 0x13, 0x33, 0x1b, 0x04, 0x00, 0x3f, 0x33, 0x3f, 0x33, - 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x5d, 0x5d, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, - 0x01, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x0e, 0x01, - 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x07, 0x26, 0x01, - 0x34, 0x12, 0x24, 0x33, 0x32, 0x04, 0x12, 0x15, 0x14, 0x02, 0x04, 0x23, - 0x22, 0x24, 0x02, 0x37, 0x14, 0x12, 0x04, 0x33, 0x32, 0x24, 0x12, 0x35, - 0x34, 0x02, 0x24, 0x23, 0x22, 0x04, 0x02, 0x03, 0x7d, 0x7d, 0x87, 0x7f, - 0x83, 0x56, 0x7d, 0x30, 0x65, 0x46, 0xc2, 0xd0, 0xdd, 0xbf, 0x80, 0x76, - 0x3a, 0x6c, 0xfc, 0x97, 0xc8, 0x01, 0x5e, 0xca, 0xc8, 0x01, 0x5e, 0xca, - 0xc2, 0xfe, 0xa2, 0xd0, 0xcf, 0xfe, 0xa2, 0xc3, 0x69, 0xae, 0x01, 0x2d, - 0xac, 0xae, 0x01, 0x2a, 0xaf, 0xae, 0xfe, 0xd7, 0xb0, 0xae, 0xfe, 0xd6, - 0xaf, 0x04, 0x23, 0xae, 0x9a, 0xa8, 0xa2, 0x2d, 0x7c, 0x14, 0x1c, 0xf1, - 0xd8, 0xd1, 0xf6, 0x3c, 0x76, 0x33, 0xfe, 0xb8, 0xc8, 0x01, 0x5e, 0xca, - 0xc8, 0xfe, 0xa2, 0xca, 0xc5, 0xfe, 0xa6, 0xd0, 0xcf, 0x01, 0x5a, 0xc6, - 0xad, 0xfe, 0xd3, 0xad, 0xae, 0x01, 0x29, 0xb0, 0xae, 0x01, 0x2a, 0xaf, - 0xae, 0xfe, 0xd7, 0x00, 0x00, 0x02, 0x00, 0x46, 0x03, 0x14, 0x02, 0x71, - 0x05, 0xc7, 0x00, 0x16, 0x00, 0x1f, 0x00, 0x37, 0x40, 0x1c, 0x17, 0x06, - 0x1b, 0x0a, 0x01, 0x01, 0x16, 0x16, 0x10, 0x06, 0x03, 0x20, 0x21, 0x1c, - 0x0a, 0x0a, 0x12, 0x19, 0x16, 0x00, 0x03, 0x10, 0x03, 0x02, 0x03, 0x0d, - 0x12, 0x1f, 0x00, 0x3f, 0x33, 0xd4, 0x5d, 0xc4, 0x33, 0x12, 0x39, 0x2f, - 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x27, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, - 0x3f, 0x01, 0x35, 0x34, 0x23, 0x22, 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, - 0x15, 0x11, 0x25, 0x14, 0x33, 0x32, 0x3d, 0x01, 0x07, 0x0e, 0x01, 0x02, - 0x14, 0x18, 0x5c, 0x8c, 0x5f, 0x6f, 0x9a, 0xa5, 0x75, 0x94, 0x64, 0x68, - 0x2b, 0x72, 0x85, 0x82, 0x89, 0xfe, 0x50, 0x70, 0xc9, 0x62, 0x70, 0x67, - 0x03, 0x21, 0x54, 0x61, 0x63, 0x66, 0x66, 0x69, 0x06, 0x04, 0x27, 0x85, - 0x33, 0x60, 0x38, 0x69, 0x79, 0xfe, 0x3c, 0xbc, 0x64, 0xb4, 0x31, 0x04, - 0x04, 0x39, 0x00, 0x00, 0x00, 0x02, 0x00, 0x52, 0x00, 0x75, 0x03, 0xaa, - 0x03, 0xbe, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x29, 0x40, 0x13, 0x03, 0x06, - 0x0a, 0x0d, 0x02, 0x04, 0x0b, 0x09, 0x09, 0x04, 0x0d, 0x06, 0x04, 0x0e, - 0x0f, 0x0c, 0x05, 0x08, 0x01, 0x00, 0x2f, 0x33, 0x2f, 0x33, 0x11, 0x12, - 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x13, 0x01, 0x17, 0x09, 0x01, 0x07, 0x01, 0x25, 0x01, 0x17, 0x09, - 0x01, 0x07, 0x01, 0x52, 0x01, 0x56, 0x77, 0xfe, 0xdf, 0x01, 0x21, 0x77, - 0xfe, 0xaa, 0x01, 0x8b, 0x01, 0x58, 0x75, 0xfe, 0xe1, 0x01, 0x1f, 0x75, - 0xfe, 0xa8, 0x02, 0x27, 0x01, 0x97, 0x45, 0xfe, 0xa2, 0xfe, 0xa1, 0x47, - 0x01, 0x97, 0x1b, 0x01, 0x97, 0x45, 0xfe, 0xa2, 0xfe, 0xa1, 0x47, 0x01, - 0x97, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x68, 0x01, 0x08, 0x04, 0x29, - 0x03, 0x17, 0x00, 0x05, 0x00, 0x1b, 0x40, 0x0c, 0x02, 0x01, 0x04, 0x01, - 0x06, 0x07, 0x05, 0x04, 0x50, 0x59, 0x05, 0x02, 0x00, 0x2f, 0x2f, 0x2b, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x31, 0x30, 0x01, 0x11, 0x23, - 0x11, 0x21, 0x35, 0x04, 0x29, 0x89, 0xfc, 0xc8, 0x03, 0x17, 0xfd, 0xf1, - 0x01, 0x85, 0x8a, 0x00, 0xff, 0xff, 0x00, 0x54, 0x01, 0xd9, 0x02, 0x3f, - 0x02, 0x71, 0x12, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x64, - 0xff, 0xec, 0x06, 0x44, 0x05, 0xcb, 0x00, 0x08, 0x00, 0x16, 0x00, 0x26, - 0x00, 0x36, 0x00, 0x5d, 0x40, 0x33, 0x27, 0x17, 0x00, 0x11, 0x11, 0x12, - 0x04, 0x09, 0x2f, 0x1f, 0x1f, 0x0d, 0x09, 0x0c, 0x12, 0x17, 0x06, 0x37, - 0x38, 0x0c, 0x10, 0x10, 0x00, 0x00, 0x0e, 0x13, 0x0e, 0x12, 0x08, 0x13, - 0x0f, 0x12, 0x1f, 0x12, 0x02, 0x00, 0x13, 0x10, 0x13, 0x02, 0x12, 0x13, - 0x12, 0x13, 0x1b, 0x2b, 0x23, 0x13, 0x33, 0x1b, 0x04, 0x00, 0x3f, 0x33, - 0x3f, 0x33, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x5d, 0x5d, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x12, 0x39, 0x2f, 0x33, 0x11, 0x33, 0x11, 0x12, 0x01, 0x17, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x05, 0x14, - 0x06, 0x07, 0x13, 0x23, 0x03, 0x23, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, - 0x01, 0x34, 0x12, 0x24, 0x33, 0x32, 0x04, 0x12, 0x15, 0x14, 0x02, 0x04, - 0x23, 0x22, 0x24, 0x02, 0x37, 0x14, 0x12, 0x04, 0x33, 0x32, 0x24, 0x12, - 0x35, 0x34, 0x02, 0x24, 0x23, 0x22, 0x04, 0x02, 0x02, 0xd3, 0x6c, 0x50, - 0x61, 0x56, 0x5d, 0x6a, 0x01, 0xb2, 0x55, 0x4d, 0xee, 0xa8, 0xcf, 0x87, - 0x94, 0x01, 0x05, 0xa6, 0x9b, 0xfb, 0xdf, 0xc8, 0x01, 0x5e, 0xca, 0xc8, - 0x01, 0x5e, 0xca, 0xc2, 0xfe, 0xa2, 0xd0, 0xcf, 0xfe, 0xa2, 0xc3, 0x69, - 0xae, 0x01, 0x2d, 0xac, 0xae, 0x01, 0x2a, 0xaf, 0xae, 0xfe, 0xd7, 0xb0, - 0xae, 0xfe, 0xd6, 0xaf, 0x02, 0xfa, 0x53, 0x40, 0x4b, 0x41, 0x88, 0x50, - 0x7b, 0x1e, 0xfe, 0x75, 0x01, 0x62, 0xfe, 0x9e, 0x03, 0x7b, 0x82, 0xfe, - 0xc5, 0xc8, 0x01, 0x5e, 0xca, 0xc8, 0xfe, 0xa2, 0xca, 0xc5, 0xfe, 0xa6, - 0xd0, 0xcf, 0x01, 0x5a, 0xc6, 0xad, 0xfe, 0xd3, 0xad, 0xae, 0x01, 0x29, - 0xb0, 0xae, 0x01, 0x2a, 0xaf, 0xae, 0xfe, 0xd7, 0x00, 0x01, 0xff, 0xfa, - 0x06, 0x14, 0x04, 0x06, 0x06, 0x93, 0x00, 0x03, 0x00, 0x11, 0xb5, 0x00, - 0x05, 0x01, 0x04, 0x01, 0x02, 0x00, 0x2f, 0x33, 0x11, 0x01, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x21, 0x35, 0x21, 0x04, 0x06, 0xfb, 0xf4, 0x04, - 0x0c, 0x06, 0x14, 0x7f, 0x00, 0x02, 0x00, 0x7f, 0x03, 0x5c, 0x02, 0xee, - 0x05, 0xcb, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x21, 0x40, 0x0e, 0x0d, 0x00, - 0x13, 0x06, 0x00, 0x06, 0x19, 0x1a, 0x10, 0x0a, 0xc0, 0x16, 0x03, 0x04, - 0x00, 0x3f, 0x33, 0x1a, 0xcc, 0x32, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x31, 0x30, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, - 0x14, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, - 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x7f, 0xb5, 0x82, 0x82, 0xb6, 0x52, - 0x92, 0x54, 0x82, 0xb5, 0x73, 0x75, 0x51, 0x50, 0x73, 0x71, 0x52, 0x53, - 0x73, 0x04, 0x93, 0x82, 0xb6, 0xb5, 0x83, 0x54, 0x8f, 0x54, 0xb4, 0x83, - 0x52, 0x72, 0x71, 0x53, 0x54, 0x71, 0x72, 0x00, 0x00, 0x02, 0x00, 0x68, - 0x00, 0x01, 0x04, 0x29, 0x04, 0xc3, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, - 0x37, 0x35, 0x21, 0x15, 0x01, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, - 0x35, 0x21, 0x11, 0x33, 0x68, 0x03, 0xc1, 0xfe, 0x64, 0x01, 0x9c, 0xfe, - 0x64, 0x8b, 0xfe, 0x66, 0x01, 0x9a, 0x8b, 0x01, 0x8a, 0x8a, 0x03, 0x16, - 0x8a, 0xfe, 0x56, 0x01, 0xaa, 0x8a, 0x01, 0xac, 0x00, 0x01, 0x00, 0x31, - 0x02, 0x4a, 0x02, 0x8d, 0x05, 0xc9, 0x00, 0x18, 0x00, 0x23, 0x40, 0x11, - 0x07, 0x13, 0x17, 0x01, 0x01, 0x0e, 0x13, 0x00, 0x04, 0x1a, 0x19, 0x0a, - 0x10, 0x1f, 0x17, 0x01, 0x20, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x11, 0x12, - 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x21, 0x35, - 0x37, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x36, - 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x21, 0x02, 0x8d, 0xfd, - 0xa4, 0xec, 0x59, 0x52, 0x21, 0x50, 0x3f, 0x34, 0x62, 0x45, 0x42, 0x83, - 0x98, 0x84, 0x93, 0x59, 0x93, 0xae, 0x01, 0xb8, 0x02, 0x4a, 0x68, 0xe6, - 0x56, 0x61, 0x4c, 0x36, 0x44, 0x45, 0x26, 0x32, 0x58, 0x6f, 0x82, 0x70, - 0x50, 0x97, 0x8a, 0xa5, 0x00, 0x01, 0x00, 0x21, 0x02, 0x39, 0x02, 0x8d, - 0x05, 0xc9, 0x00, 0x23, 0x00, 0x39, 0x40, 0x22, 0x0f, 0x05, 0x05, 0x00, - 0x03, 0x12, 0x1e, 0x0a, 0x06, 0x24, 0x25, 0x12, 0x5d, 0x13, 0x6d, 0x13, - 0x02, 0x4c, 0x13, 0x01, 0x0b, 0x13, 0x1b, 0x13, 0x02, 0x13, 0x13, 0x08, - 0x1a, 0x21, 0x1f, 0x0d, 0x08, 0x21, 0x00, 0x3f, 0x33, 0x3f, 0x33, 0x12, - 0x39, 0x2f, 0x5d, 0x5d, 0x5d, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x14, 0x06, 0x07, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x34, 0x2b, 0x01, 0x35, 0x33, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x3e, 0x01, - 0x33, 0x32, 0x16, 0x02, 0x73, 0x52, 0x44, 0xb0, 0xb8, 0xa8, 0x98, 0x74, - 0x93, 0x7b, 0xd3, 0xe7, 0x75, 0x77, 0x67, 0x63, 0x50, 0x43, 0x42, 0x70, - 0x38, 0x45, 0x3f, 0x8c, 0x5e, 0x88, 0x9d, 0x04, 0xe7, 0x50, 0x67, 0x17, - 0x2f, 0xa2, 0x80, 0x8f, 0x38, 0x7b, 0x44, 0xa2, 0x91, 0x6b, 0x4f, 0x44, - 0x3d, 0x44, 0x2b, 0x23, 0x5a, 0x2d, 0x36, 0x77, 0x00, 0x01, 0x01, 0x89, - 0x04, 0xd9, 0x03, 0x12, 0x06, 0x21, 0x00, 0x09, 0x00, 0x13, 0xb6, 0x09, - 0x04, 0x0a, 0x0b, 0x04, 0x80, 0x09, 0x00, 0x2f, 0x1a, 0xcd, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x31, 0x30, 0x01, 0x3e, 0x01, 0x37, 0x33, 0x15, 0x0e, - 0x01, 0x07, 0x23, 0x01, 0x89, 0x30, 0x6f, 0x20, 0xca, 0x2c, 0xae, 0x40, - 0x6f, 0x04, 0xf2, 0x3e, 0xb0, 0x41, 0x15, 0x41, 0xbe, 0x34, 0x00, 0x00, - 0x00, 0x01, 0x00, 0xb0, 0xfe, 0x14, 0x04, 0x44, 0x04, 0x48, 0x00, 0x16, - 0x00, 0x35, 0x40, 0x1a, 0x05, 0x0a, 0x0a, 0x08, 0x10, 0x00, 0x13, 0x13, - 0x14, 0x08, 0x14, 0x18, 0x17, 0x06, 0x15, 0x0f, 0x14, 0x1b, 0x0d, 0x02, - 0x46, 0x59, 0x0d, 0x16, 0x09, 0x15, 0x00, 0x3f, 0x3f, 0x2b, 0x00, 0x18, - 0x3f, 0x3f, 0x33, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, - 0x33, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x33, 0x32, 0x36, - 0x35, 0x11, 0x33, 0x11, 0x23, 0x27, 0x23, 0x06, 0x23, 0x22, 0x27, 0x23, - 0x16, 0x15, 0x11, 0x23, 0x11, 0x33, 0x01, 0x56, 0xfe, 0xab, 0x9f, 0xa6, - 0x88, 0x1a, 0x0a, 0x6f, 0xe5, 0x96, 0x58, 0x0a, 0x0a, 0xa6, 0xa6, 0x01, - 0x7d, 0xfe, 0xfa, 0xbd, 0xd4, 0x02, 0x40, 0xfb, 0xb8, 0x93, 0xa7, 0x5c, - 0x54, 0xa0, 0xfe, 0xc0, 0x06, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x71, - 0xfe, 0xfc, 0x04, 0x60, 0x06, 0x14, 0x00, 0x0f, 0x00, 0x27, 0x40, 0x12, - 0x04, 0x05, 0x01, 0x00, 0x00, 0x05, 0x0b, 0x03, 0x10, 0x11, 0x08, 0x08, - 0x05, 0x03, 0x0f, 0x05, 0x01, 0x05, 0x00, 0x2f, 0x33, 0x3f, 0x33, 0x12, - 0x39, 0x2f, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x11, 0x06, 0x23, 0x22, 0x26, - 0x35, 0x10, 0x36, 0x33, 0x21, 0x04, 0x60, 0x72, 0xd5, 0x73, 0x3e, 0x54, - 0xd8, 0xcb, 0xda, 0xe8, 0x02, 0x2d, 0xfe, 0xfc, 0x06, 0xb0, 0xf9, 0x50, - 0x03, 0x33, 0x12, 0xfa, 0xfb, 0x01, 0x04, 0xfe, 0x00, 0x01, 0x00, 0x98, - 0x02, 0x4c, 0x01, 0x89, 0x03, 0x5a, 0x00, 0x0b, 0x00, 0x17, 0x40, 0x0a, - 0x06, 0x00, 0x00, 0x0d, 0x0c, 0x03, 0x09, 0x4f, 0x59, 0x03, 0x00, 0x2f, - 0x2b, 0x11, 0x12, 0x01, 0x39, 0x11, 0x33, 0x31, 0x30, 0x13, 0x34, 0x36, - 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x98, 0x3e, 0x38, - 0x3a, 0x41, 0x42, 0x39, 0x33, 0x43, 0x02, 0xd3, 0x42, 0x45, 0x45, 0x42, - 0x41, 0x46, 0x3f, 0x00, 0x00, 0x01, 0x00, 0x25, 0xfe, 0x14, 0x01, 0xb4, - 0x00, 0x00, 0x00, 0x12, 0x00, 0x24, 0x40, 0x10, 0x11, 0x0e, 0x0b, 0x00, - 0x00, 0x0e, 0x05, 0x03, 0x13, 0x14, 0x0e, 0x11, 0x11, 0x08, 0x03, 0x10, - 0x00, 0x2f, 0xcc, 0x32, 0x39, 0x2f, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x06, 0x23, 0x22, 0x27, - 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x33, 0x07, - 0x16, 0x01, 0xb4, 0x99, 0x96, 0x33, 0x2d, 0x2d, 0x3b, 0x4f, 0x51, 0x4f, - 0x6d, 0x58, 0x6e, 0x37, 0xb4, 0xfe, 0xdf, 0x61, 0x6a, 0x09, 0x6a, 0x08, - 0x28, 0x36, 0x2b, 0x35, 0x11, 0xb2, 0x73, 0x27, 0x00, 0x01, 0x00, 0x4c, - 0x02, 0x4a, 0x01, 0xe1, 0x05, 0xb6, 0x00, 0x0a, 0x00, 0x20, 0x40, 0x0e, - 0x02, 0x00, 0x03, 0x03, 0x0a, 0x0c, 0x0b, 0x09, 0x09, 0x03, 0x20, 0x06, - 0x00, 0x1e, 0x00, 0x3f, 0x32, 0x3f, 0x39, 0x2f, 0x11, 0x12, 0x01, 0x39, - 0x39, 0x11, 0x33, 0x33, 0x31, 0x30, 0x01, 0x33, 0x11, 0x23, 0x11, 0x34, - 0x37, 0x0e, 0x01, 0x07, 0x27, 0x01, 0x52, 0x8f, 0x85, 0x06, 0x16, 0x36, - 0x87, 0x43, 0x05, 0xb6, 0xfc, 0x94, 0x02, 0x43, 0x5b, 0x5a, 0x16, 0x2d, - 0x5f, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x42, 0x03, 0x14, 0x02, 0xbe, - 0x05, 0xc7, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x25, 0x40, 0x12, 0x0c, 0x06, - 0x12, 0x00, 0x06, 0x00, 0x18, 0x19, 0x0f, 0x00, 0x03, 0x10, 0x03, 0x02, - 0x03, 0x15, 0x09, 0x1f, 0x00, 0x3f, 0x33, 0xc4, 0x5d, 0x32, 0x11, 0x12, - 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x14, 0x06, - 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x05, 0x14, 0x16, - 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x02, 0xbe, 0xab, - 0x96, 0x92, 0xa9, 0xa8, 0x97, 0x98, 0xa5, 0xfd, 0xfe, 0x5b, 0x68, 0x69, - 0x5c, 0x5c, 0x69, 0x67, 0x5c, 0x04, 0x6f, 0xa4, 0xb7, 0xba, 0xa1, 0xa3, - 0xb5, 0xb6, 0xa2, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x76, 0x76, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x50, 0x00, 0x75, 0x03, 0xa8, 0x03, 0xbe, 0x00, 0x06, - 0x00, 0x0d, 0x00, 0x23, 0x40, 0x11, 0x0b, 0x09, 0x04, 0x02, 0x00, 0x03, - 0x07, 0x02, 0x0a, 0x09, 0x06, 0x0e, 0x0f, 0x0c, 0x05, 0x08, 0x01, 0x00, - 0x2f, 0x33, 0x2f, 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x09, 0x01, 0x27, 0x09, 0x01, 0x37, 0x01, 0x05, 0x01, - 0x27, 0x09, 0x01, 0x37, 0x01, 0x03, 0xa8, 0xfe, 0xa8, 0x75, 0x01, 0x1f, - 0xfe, 0xe1, 0x75, 0x01, 0x58, 0xfe, 0x75, 0xfe, 0xa8, 0x75, 0x01, 0x1f, - 0xfe, 0xe1, 0x75, 0x01, 0x58, 0x02, 0x0c, 0xfe, 0x69, 0x47, 0x01, 0x5f, - 0x01, 0x5e, 0x45, 0xfe, 0x69, 0x1b, 0xfe, 0x69, 0x47, 0x01, 0x5f, 0x01, - 0x5e, 0x45, 0xfe, 0x69, 0x00, 0x04, 0x00, 0x4b, 0x00, 0x00, 0x05, 0xd1, - 0x05, 0xb6, 0x00, 0x0a, 0x00, 0x14, 0x00, 0x18, 0x00, 0x23, 0x00, 0x00, - 0x25, 0x23, 0x15, 0x23, 0x35, 0x21, 0x35, 0x01, 0x33, 0x11, 0x33, 0x21, - 0x35, 0x34, 0x37, 0x0e, 0x03, 0x0f, 0x01, 0x09, 0x01, 0x23, 0x01, 0x21, - 0x33, 0x11, 0x23, 0x11, 0x34, 0x37, 0x0e, 0x01, 0x07, 0x27, 0x05, 0xd1, - 0x7d, 0x91, 0xfe, 0x6e, 0x01, 0x98, 0x8b, 0x7d, 0xfe, 0xf2, 0x06, 0x05, - 0x18, 0x1e, 0x1e, 0x0b, 0xa8, 0x01, 0x55, 0xfc, 0x79, 0x8f, 0x03, 0x87, - 0xfc, 0xce, 0x8f, 0x85, 0x06, 0x16, 0x36, 0x87, 0x43, 0xcb, 0xca, 0xca, - 0x65, 0x02, 0x43, 0xfd, 0xcd, 0xc3, 0x86, 0x4b, 0x0c, 0x27, 0x2d, 0x2d, - 0x11, 0xf6, 0x04, 0x76, 0xfa, 0x4a, 0x05, 0xb6, 0xfc, 0x94, 0x02, 0x43, - 0x5b, 0x5a, 0x16, 0x2d, 0x5f, 0x60, 0x00, 0x00, 0x00, 0x03, 0x00, 0x2e, - 0x00, 0x00, 0x05, 0xdb, 0x05, 0xb6, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x27, - 0x00, 0x00, 0x09, 0x01, 0x23, 0x01, 0x21, 0x33, 0x11, 0x23, 0x11, 0x34, - 0x37, 0x0e, 0x01, 0x07, 0x27, 0x01, 0x21, 0x35, 0x37, 0x3e, 0x02, 0x35, - 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, - 0x14, 0x06, 0x0f, 0x01, 0x21, 0x04, 0xce, 0xfc, 0x79, 0x8f, 0x03, 0x87, - 0xfc, 0xf5, 0x8f, 0x85, 0x06, 0x16, 0x36, 0x87, 0x43, 0x05, 0xad, 0xfd, - 0xa4, 0xec, 0x59, 0x52, 0x21, 0x50, 0x3f, 0x34, 0x62, 0x45, 0x42, 0x83, - 0x98, 0x84, 0x93, 0x59, 0x93, 0xae, 0x01, 0xb8, 0x05, 0xb6, 0xfa, 0x4a, - 0x05, 0xb6, 0xfc, 0x94, 0x02, 0x43, 0x5b, 0x5a, 0x16, 0x2d, 0x5f, 0x60, - 0xfb, 0x01, 0x68, 0xe6, 0x56, 0x61, 0x4c, 0x36, 0x44, 0x45, 0x26, 0x32, - 0x58, 0x6f, 0x82, 0x70, 0x50, 0x97, 0x8a, 0xa5, 0x00, 0x04, 0x00, 0x1a, - 0x00, 0x00, 0x06, 0x21, 0x05, 0xc9, 0x00, 0x0a, 0x00, 0x14, 0x00, 0x18, - 0x00, 0x3c, 0x00, 0x00, 0x25, 0x23, 0x15, 0x23, 0x35, 0x21, 0x35, 0x01, - 0x33, 0x11, 0x33, 0x21, 0x35, 0x34, 0x37, 0x0e, 0x03, 0x0f, 0x01, 0x09, - 0x01, 0x23, 0x01, 0x05, 0x14, 0x06, 0x07, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x34, 0x2b, 0x01, 0x35, 0x33, - 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x3e, 0x01, - 0x33, 0x32, 0x16, 0x06, 0x21, 0x7d, 0x91, 0xfe, 0x6e, 0x01, 0x98, 0x8b, - 0x7d, 0xfe, 0xf2, 0x06, 0x05, 0x18, 0x1e, 0x1e, 0x0b, 0xa8, 0x01, 0x61, - 0xfc, 0x79, 0x8f, 0x03, 0x87, 0xfd, 0x8d, 0x52, 0x44, 0xb0, 0xb8, 0xa8, - 0x98, 0x74, 0x93, 0x7b, 0xd3, 0xe7, 0x75, 0x77, 0x67, 0x63, 0x50, 0x43, - 0x42, 0x70, 0x38, 0x45, 0x3f, 0x8c, 0x5e, 0x88, 0x9d, 0xcb, 0xca, 0xca, - 0x65, 0x02, 0x43, 0xfd, 0xcd, 0xc3, 0x86, 0x4b, 0x0c, 0x27, 0x2d, 0x2d, - 0x11, 0xf6, 0x04, 0x76, 0xfa, 0x4a, 0x05, 0xb6, 0xcf, 0x50, 0x67, 0x17, - 0x2f, 0xa2, 0x80, 0x8f, 0x38, 0x7b, 0x44, 0xa2, 0x91, 0x6b, 0x4f, 0x44, - 0x3d, 0x44, 0x2b, 0x23, 0x5a, 0x2d, 0x36, 0x77, 0x00, 0x02, 0x00, 0x33, - 0xfe, 0x77, 0x03, 0x54, 0x04, 0x5e, 0x00, 0x1d, 0x00, 0x28, 0x00, 0x41, - 0x40, 0x22, 0x08, 0x14, 0x1e, 0x23, 0x01, 0x1c, 0x0f, 0x1c, 0x23, 0x14, - 0x04, 0x29, 0x2a, 0x00, 0x1d, 0x01, 0x0c, 0x03, 0x1d, 0x1d, 0x11, 0x26, - 0x26, 0x20, 0x4f, 0x59, 0x26, 0x10, 0x11, 0x0b, 0x49, 0x59, 0x11, 0x23, - 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, - 0x2f, 0x5f, 0x5e, 0x5d, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x02, - 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x23, 0x22, 0x26, - 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x3d, 0x01, 0x13, 0x14, 0x23, - 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x02, 0x4e, 0x4b, 0x61, - 0x79, 0x3d, 0x19, 0x84, 0x7a, 0x50, 0x96, 0x62, 0x3b, 0xc5, 0xc6, 0xbe, - 0xd8, 0x23, 0x40, 0x59, 0x36, 0x65, 0x41, 0xb4, 0x79, 0x3b, 0x3e, 0x42, - 0x37, 0x33, 0x46, 0x02, 0xac, 0x33, 0x7a, 0x94, 0x54, 0x6a, 0x4b, 0x4d, - 0x38, 0x64, 0x71, 0x26, 0x30, 0x87, 0x60, 0xba, 0xaa, 0x46, 0x69, 0x59, - 0x52, 0x2f, 0x58, 0x74, 0x5d, 0x1f, 0x01, 0x2b, 0x87, 0x45, 0x42, 0x40, - 0x47, 0x40, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x10, - 0x07, 0x73, 0x12, 0x26, 0x00, 0x24, 0x00, 0x00, 0x11, 0x07, 0x00, 0x43, - 0xff, 0xc2, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x02, 0x10, 0x05, 0x26, 0x00, - 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x10, - 0x07, 0x73, 0x12, 0x26, 0x00, 0x24, 0x00, 0x00, 0x11, 0x07, 0x00, 0x76, - 0x00, 0x85, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x02, 0x18, 0x05, 0x26, 0x00, - 0x2b, 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05, 0x10, - 0x07, 0x73, 0x00, 0x0e, 0x00, 0x16, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x3e, - 0x01, 0x37, 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, 0x06, 0x07, - 0x23, 0x01, 0x03, 0x21, 0x03, 0x23, 0x01, 0x33, 0x09, 0x01, 0x03, 0x26, - 0x27, 0x06, 0x07, 0x03, 0x01, 0x2f, 0x7f, 0x66, 0x17, 0xa6, 0x16, 0x6d, - 0x7d, 0x77, 0x58, 0x85, 0x88, 0x53, 0x73, 0x03, 0x31, 0xb6, 0xfd, 0xb6, - 0xb4, 0xac, 0x02, 0x42, 0x8f, 0x02, 0x3f, 0xfe, 0x65, 0xaa, 0x21, 0x23, - 0x16, 0x29, 0xac, 0x06, 0x42, 0x88, 0x80, 0x29, 0x2a, 0x85, 0x82, 0x17, - 0x37, 0x83, 0x86, 0x34, 0xf9, 0xd5, 0x01, 0xd1, 0xfe, 0x2f, 0x05, 0xbc, - 0xfa, 0x44, 0x02, 0x6a, 0x01, 0xc5, 0x56, 0x7d, 0x60, 0x73, 0xfe, 0x3b, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05, 0x10, 0x07, 0x2f, 0x00, 0x17, - 0x00, 0x1f, 0x00, 0x26, 0x00, 0x00, 0x01, 0x22, 0x2e, 0x02, 0x23, 0x22, - 0x06, 0x07, 0x23, 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, - 0x37, 0x33, 0x0e, 0x01, 0x13, 0x03, 0x21, 0x03, 0x23, 0x01, 0x33, 0x09, - 0x01, 0x03, 0x26, 0x27, 0x06, 0x07, 0x03, 0x03, 0x18, 0x2b, 0x52, 0x4f, - 0x49, 0x22, 0x32, 0x33, 0x0e, 0x62, 0x0d, 0x73, 0x5b, 0x2e, 0x56, 0x4e, - 0x48, 0x20, 0x31, 0x30, 0x0f, 0x63, 0x0d, 0x71, 0xea, 0xb6, 0xfd, 0xb6, - 0xb4, 0xac, 0x02, 0x42, 0x8f, 0x02, 0x3f, 0xfe, 0x65, 0xaa, 0x21, 0x23, - 0x16, 0x29, 0xac, 0x06, 0x2d, 0x25, 0x2d, 0x25, 0x3c, 0x3d, 0x79, 0x89, - 0x25, 0x2d, 0x25, 0x3b, 0x3e, 0x79, 0x89, 0xf9, 0xd3, 0x01, 0xd1, 0xfe, - 0x2f, 0x05, 0xbc, 0xfa, 0x44, 0x02, 0x6a, 0x01, 0xc5, 0x56, 0x7d, 0x60, - 0x73, 0xfe, 0x3b, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x05, 0x10, - 0x07, 0x25, 0x12, 0x26, 0x00, 0x24, 0x00, 0x00, 0x11, 0x07, 0x00, 0x6a, - 0x00, 0x37, 0x01, 0x52, 0x00, 0x0a, 0xb4, 0x03, 0x02, 0x24, 0x05, 0x26, - 0x00, 0x2b, 0x35, 0x35, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x05, 0x10, - 0x07, 0x06, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x1f, 0x00, 0x26, 0x00, 0x00, - 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, - 0x07, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, - 0x01, 0x03, 0x21, 0x03, 0x23, 0x01, 0x33, 0x09, 0x01, 0x03, 0x26, 0x27, - 0x06, 0x07, 0x03, 0x03, 0x66, 0x7b, 0x66, 0x65, 0x78, 0x79, 0x64, 0x65, - 0x7c, 0x6c, 0x42, 0x33, 0x33, 0x42, 0x3c, 0x39, 0x34, 0x41, 0x01, 0x66, - 0xb6, 0xfd, 0xb6, 0xb4, 0xac, 0x02, 0x42, 0x8f, 0x02, 0x3f, 0xfe, 0x65, - 0xaa, 0x21, 0x23, 0x16, 0x29, 0xac, 0x06, 0x33, 0x62, 0x77, 0x75, 0x62, - 0x62, 0x73, 0x77, 0x5e, 0x38, 0x3d, 0x3d, 0x38, 0x38, 0x3d, 0x3d, 0xfa, - 0x07, 0x01, 0xd1, 0xfe, 0x2f, 0x05, 0xbc, 0xfa, 0x44, 0x02, 0x6a, 0x01, - 0xc5, 0x56, 0x7d, 0x60, 0x73, 0xfe, 0x3b, 0x00, 0x00, 0x02, 0xff, 0xfe, - 0x00, 0x00, 0x06, 0x81, 0x05, 0xb6, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x4e, - 0x40, 0x2c, 0x0a, 0x0e, 0x0e, 0x11, 0x01, 0x00, 0x08, 0x0c, 0x01, 0x10, - 0x05, 0x05, 0x15, 0x05, 0x14, 0x09, 0x13, 0x06, 0x13, 0x49, 0x59, 0x10, - 0x03, 0x49, 0x59, 0x0a, 0x0d, 0x49, 0x59, 0x10, 0x0a, 0x10, 0x0a, 0x01, - 0x06, 0x03, 0x05, 0x12, 0x01, 0x0e, 0x49, 0x59, 0x01, 0x12, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x3f, 0x12, 0x39, 0x39, 0x2f, 0x2f, 0x2b, 0x2b, - 0x2b, 0x11, 0x00, 0x33, 0x11, 0x01, 0x33, 0x11, 0x12, 0x17, 0x39, 0x11, - 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x29, 0x01, 0x11, 0x21, 0x03, 0x23, - 0x01, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x01, 0x21, - 0x11, 0x23, 0x06, 0x81, 0xfd, 0x12, 0xfd, 0xfe, 0xe3, 0xb0, 0x02, 0xba, - 0x03, 0xc9, 0xfd, 0xbc, 0x02, 0x1d, 0xfd, 0xe3, 0x02, 0x44, 0xfb, 0x54, - 0x01, 0xbe, 0x76, 0x01, 0xd1, 0xfe, 0x2f, 0x05, 0xb6, 0x97, 0xfe, 0x29, - 0x96, 0xfd, 0xe6, 0x01, 0xd2, 0x02, 0xb5, 0x00, 0xff, 0xff, 0x00, 0x7d, - 0xfe, 0x14, 0x04, 0xcf, 0x05, 0xcb, 0x12, 0x26, 0x00, 0x26, 0x00, 0x00, - 0x10, 0x07, 0x00, 0x7a, 0x02, 0x02, 0x00, 0x00, 0xff, 0xff, 0x00, 0xc9, - 0x00, 0x00, 0x03, 0xf8, 0x07, 0x73, 0x12, 0x26, 0x00, 0x28, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x43, 0xff, 0xb7, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x0d, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0xc9, - 0x00, 0x00, 0x03, 0xf8, 0x07, 0x73, 0x12, 0x26, 0x00, 0x28, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x76, 0x00, 0x3f, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x15, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc9, - 0x00, 0x00, 0x03, 0xf8, 0x07, 0x73, 0x00, 0x0e, 0x00, 0x1a, 0x00, 0x00, - 0x01, 0x3e, 0x01, 0x37, 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, - 0x06, 0x07, 0x23, 0x01, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, - 0x21, 0x11, 0x21, 0x01, 0x07, 0x7f, 0x66, 0x17, 0xa6, 0x16, 0x6d, 0x7d, - 0x77, 0x58, 0x85, 0x88, 0x53, 0x73, 0x02, 0xf1, 0xfc, 0xd1, 0x03, 0x2f, - 0xfd, 0x7b, 0x02, 0x5e, 0xfd, 0xa2, 0x02, 0x85, 0x06, 0x42, 0x88, 0x80, - 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, 0x86, 0x34, 0xf9, 0xd5, 0x05, - 0xb6, 0x97, 0xfe, 0x29, 0x96, 0xfd, 0xe6, 0x00, 0xff, 0xff, 0x00, 0xc9, - 0x00, 0x00, 0x03, 0xf8, 0x07, 0x25, 0x12, 0x26, 0x00, 0x28, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x6a, 0x00, 0x12, 0x01, 0x52, 0x00, 0x0a, 0xb4, 0x02, - 0x01, 0x21, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x35, 0xff, 0xff, 0x00, 0x05, - 0x00, 0x00, 0x01, 0x8e, 0x07, 0x73, 0x12, 0x26, 0x00, 0x2c, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x43, 0xfe, 0x7c, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x05, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb3, - 0x00, 0x00, 0x02, 0x3c, 0x07, 0x73, 0x12, 0x26, 0x00, 0x2c, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x76, 0xff, 0x2a, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x0d, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc7, - 0x00, 0x00, 0x02, 0x69, 0x07, 0x73, 0x00, 0x0e, 0x00, 0x12, 0x00, 0x00, - 0x03, 0x3e, 0x01, 0x37, 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, - 0x06, 0x07, 0x23, 0x01, 0x11, 0x33, 0x11, 0x39, 0x7f, 0x66, 0x17, 0xa6, - 0x16, 0x6d, 0x7d, 0x77, 0x58, 0x85, 0x88, 0x53, 0x73, 0x01, 0x02, 0xaa, - 0x06, 0x42, 0x88, 0x80, 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, 0x86, - 0x34, 0xf9, 0xd5, 0x05, 0xb6, 0xfa, 0x4a, 0x00, 0xff, 0xff, 0x00, 0x05, - 0x00, 0x00, 0x02, 0x38, 0x07, 0x25, 0x12, 0x26, 0x00, 0x2c, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x6a, 0xfe, 0xd0, 0x01, 0x52, 0x00, 0x0a, 0xb4, 0x02, - 0x01, 0x19, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x02, 0x00, 0x2f, - 0x00, 0x00, 0x05, 0x48, 0x05, 0xb6, 0x00, 0x0c, 0x00, 0x17, 0x00, 0x57, - 0x40, 0x32, 0x11, 0x15, 0x15, 0x08, 0x04, 0x0d, 0x00, 0x00, 0x13, 0x04, - 0x06, 0x04, 0x18, 0x19, 0x14, 0x06, 0x07, 0x06, 0x49, 0x59, 0x11, 0x0f, - 0x07, 0x3f, 0x07, 0xaf, 0x07, 0xcf, 0x07, 0xdf, 0x07, 0x05, 0x0b, 0x03, - 0x07, 0x07, 0x04, 0x09, 0x09, 0x10, 0x4a, 0x59, 0x09, 0x03, 0x04, 0x15, - 0x4a, 0x59, 0x04, 0x12, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, 0x11, - 0x12, 0x00, 0x39, 0x18, 0x2f, 0x5f, 0x5e, 0x5d, 0x33, 0x2b, 0x11, 0x00, - 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x10, 0x00, 0x29, 0x01, 0x11, 0x23, 0x35, 0x33, - 0x11, 0x21, 0x20, 0x00, 0x03, 0x10, 0x21, 0x23, 0x11, 0x21, 0x15, 0x21, - 0x11, 0x33, 0x20, 0x05, 0x48, 0xfe, 0x77, 0xfe, 0x8f, 0xfe, 0x7b, 0x9a, - 0x9a, 0x01, 0xb2, 0x01, 0x51, 0x01, 0x7c, 0xb5, 0xfd, 0xc7, 0xe7, 0x01, - 0x7b, 0xfe, 0x85, 0xbe, 0x02, 0x62, 0x02, 0xe9, 0xfe, 0x96, 0xfe, 0x81, - 0x02, 0x89, 0x96, 0x02, 0x97, 0xfe, 0x89, 0xfe, 0xa4, 0x02, 0x40, 0xfd, - 0xfc, 0x96, 0xfe, 0x0a, 0x00, 0x02, 0x00, 0xc9, 0x00, 0x00, 0x05, 0x3f, - 0x07, 0x2f, 0x00, 0x17, 0x00, 0x28, 0x00, 0x00, 0x01, 0x22, 0x2e, 0x02, - 0x23, 0x22, 0x06, 0x07, 0x23, 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, - 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, 0x01, 0x23, 0x01, 0x23, 0x16, 0x15, - 0x11, 0x23, 0x11, 0x33, 0x01, 0x33, 0x26, 0x02, 0x37, 0x11, 0x33, 0x03, - 0xa7, 0x2b, 0x52, 0x4f, 0x49, 0x22, 0x32, 0x33, 0x0e, 0x62, 0x0d, 0x73, - 0x5b, 0x2e, 0x56, 0x4e, 0x48, 0x20, 0x31, 0x30, 0x0f, 0x63, 0x0d, 0x71, - 0x01, 0x3a, 0xc2, 0xfc, 0xe1, 0x08, 0x10, 0x9d, 0xc0, 0x03, 0x1d, 0x08, - 0x02, 0x0e, 0x02, 0x9f, 0x06, 0x2d, 0x25, 0x2d, 0x25, 0x3c, 0x3d, 0x79, - 0x89, 0x25, 0x2d, 0x25, 0x3b, 0x3e, 0x79, 0x89, 0xf9, 0xd3, 0x04, 0xcb, - 0xd8, 0xb4, 0xfc, 0xc1, 0x05, 0xb6, 0xfb, 0x3a, 0x1b, 0x01, 0x25, 0x3f, - 0x03, 0x47, 0x00, 0x00, 0xff, 0xff, 0x00, 0x7d, 0xff, 0xec, 0x05, 0xbe, - 0x07, 0x73, 0x12, 0x26, 0x00, 0x32, 0x00, 0x00, 0x11, 0x07, 0x00, 0x43, - 0x00, 0x79, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x02, 0x19, 0x05, 0x26, 0x00, - 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0x7d, 0xff, 0xec, 0x05, 0xbe, - 0x07, 0x73, 0x12, 0x26, 0x00, 0x32, 0x00, 0x00, 0x11, 0x07, 0x00, 0x76, - 0x01, 0x0a, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x02, 0x21, 0x05, 0x26, 0x00, - 0x2b, 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x7d, 0xff, 0xec, 0x05, 0xbe, - 0x07, 0x73, 0x00, 0x0e, 0x00, 0x1a, 0x00, 0x26, 0x00, 0x00, 0x01, 0x3e, - 0x01, 0x37, 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, 0x06, 0x07, - 0x23, 0x01, 0x10, 0x00, 0x21, 0x20, 0x00, 0x11, 0x10, 0x00, 0x21, 0x20, - 0x00, 0x01, 0x10, 0x12, 0x33, 0x32, 0x12, 0x11, 0x10, 0x02, 0x23, 0x22, - 0x02, 0x01, 0xc0, 0x7f, 0x66, 0x17, 0xa6, 0x16, 0x6d, 0x7d, 0x77, 0x58, - 0x85, 0x88, 0x53, 0x73, 0x03, 0xfe, 0xfe, 0x9d, 0xfe, 0xc4, 0xfe, 0xbd, - 0xfe, 0xa1, 0x01, 0x60, 0x01, 0x44, 0x01, 0x3b, 0x01, 0x62, 0xfb, 0x73, - 0xfd, 0xf1, 0xf3, 0xf8, 0xf7, 0xf2, 0xf3, 0xfd, 0x06, 0x42, 0x88, 0x80, - 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, 0x86, 0x34, 0xfc, 0xb2, 0xfe, - 0xa1, 0xfe, 0x6e, 0x01, 0x8b, 0x01, 0x68, 0x01, 0x65, 0x01, 0x89, 0xfe, - 0x70, 0xfe, 0xa0, 0xfe, 0xd7, 0xfe, 0xcd, 0x01, 0x32, 0x01, 0x2a, 0x01, - 0x27, 0x01, 0x31, 0xfe, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x7d, - 0xff, 0xec, 0x05, 0xbe, 0x07, 0x2f, 0x00, 0x17, 0x00, 0x23, 0x00, 0x2f, - 0x00, 0x00, 0x01, 0x22, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x23, 0x3e, - 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, - 0x01, 0x10, 0x00, 0x21, 0x20, 0x00, 0x11, 0x10, 0x00, 0x21, 0x20, 0x00, - 0x01, 0x10, 0x12, 0x33, 0x32, 0x12, 0x11, 0x10, 0x02, 0x23, 0x22, 0x02, - 0x03, 0xae, 0x2b, 0x52, 0x4f, 0x49, 0x22, 0x32, 0x33, 0x0e, 0x62, 0x0d, - 0x73, 0x5b, 0x2e, 0x56, 0x4e, 0x48, 0x20, 0x31, 0x30, 0x0f, 0x63, 0x0d, - 0x71, 0x01, 0xb2, 0xfe, 0x9d, 0xfe, 0xc4, 0xfe, 0xbd, 0xfe, 0xa1, 0x01, - 0x60, 0x01, 0x44, 0x01, 0x3b, 0x01, 0x62, 0xfb, 0x73, 0xfd, 0xf1, 0xf3, - 0xf8, 0xf7, 0xf2, 0xf3, 0xfd, 0x06, 0x2d, 0x25, 0x2d, 0x25, 0x3c, 0x3d, - 0x79, 0x89, 0x25, 0x2d, 0x25, 0x3b, 0x3e, 0x79, 0x89, 0xfc, 0xb0, 0xfe, - 0xa1, 0xfe, 0x6e, 0x01, 0x8b, 0x01, 0x68, 0x01, 0x65, 0x01, 0x89, 0xfe, - 0x70, 0xfe, 0xa0, 0xfe, 0xd7, 0xfe, 0xcd, 0x01, 0x32, 0x01, 0x2a, 0x01, - 0x27, 0x01, 0x31, 0xfe, 0xcd, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x7d, - 0xff, 0xec, 0x05, 0xbe, 0x07, 0x25, 0x12, 0x26, 0x00, 0x32, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x6a, 0x00, 0xd5, 0x01, 0x52, 0x00, 0x0a, 0xb4, 0x03, - 0x02, 0x2d, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x01, 0x00, 0x85, - 0x01, 0x10, 0x04, 0x0c, 0x04, 0x98, 0x00, 0x0b, 0x00, 0x19, 0x40, 0x09, - 0x07, 0x09, 0x03, 0x01, 0x09, 0x01, 0x0c, 0x0d, 0x08, 0x00, 0x19, 0x2f, - 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, - 0x17, 0x09, 0x01, 0x07, 0x09, 0x01, 0x27, 0x09, 0x01, 0x37, 0x01, 0x03, - 0xac, 0x60, 0xfe, 0xa0, 0x01, 0x5e, 0x60, 0xfe, 0x9e, 0xfe, 0xa4, 0x65, - 0x01, 0x5e, 0xfe, 0xa0, 0x64, 0x01, 0x61, 0x04, 0x98, 0x63, 0xfe, 0x9e, - 0xfe, 0xa0, 0x63, 0x01, 0x5f, 0xfe, 0xa1, 0x63, 0x01, 0x60, 0x01, 0x60, - 0x65, 0xfe, 0x9d, 0x00, 0x00, 0x03, 0x00, 0x7d, 0xff, 0xc3, 0x05, 0xbe, - 0x05, 0xf6, 0x00, 0x13, 0x00, 0x1b, 0x00, 0x23, 0x00, 0x4e, 0x40, 0x2c, - 0x16, 0x1f, 0x17, 0x1e, 0x04, 0x1c, 0x14, 0x1c, 0x0a, 0x14, 0x00, 0x00, - 0x12, 0x0f, 0x05, 0x08, 0x0a, 0x06, 0x24, 0x25, 0x16, 0x1e, 0x21, 0x19, - 0x0d, 0x21, 0x49, 0x59, 0x0f, 0x12, 0x08, 0x05, 0x04, 0x03, 0x10, 0x0d, - 0x04, 0x03, 0x19, 0x49, 0x59, 0x06, 0x03, 0x13, 0x00, 0x3f, 0xc6, 0x2b, - 0x00, 0x18, 0x3f, 0xc6, 0x12, 0x17, 0x39, 0x2b, 0x11, 0x12, 0x00, 0x39, - 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x12, - 0x17, 0x39, 0x31, 0x30, 0x01, 0x10, 0x00, 0x21, 0x22, 0x27, 0x07, 0x27, - 0x37, 0x26, 0x11, 0x10, 0x00, 0x21, 0x32, 0x17, 0x37, 0x17, 0x07, 0x16, - 0x03, 0x10, 0x27, 0x01, 0x16, 0x33, 0x32, 0x12, 0x01, 0x10, 0x17, 0x01, - 0x26, 0x23, 0x22, 0x02, 0x05, 0xbe, 0xfe, 0x9d, 0xfe, 0xc4, 0xeb, 0x94, - 0x65, 0x78, 0x6c, 0xb2, 0x01, 0x60, 0x01, 0x44, 0xd1, 0x9d, 0x61, 0x78, - 0x6a, 0xc0, 0xb4, 0x6e, 0xfd, 0x60, 0x73, 0xb0, 0xf3, 0xf8, 0xfc, 0x27, - 0x65, 0x02, 0x9d, 0x6a, 0xa8, 0xf3, 0xfd, 0x02, 0xdd, 0xfe, 0xa1, 0xfe, - 0x6e, 0x64, 0x8d, 0x4f, 0x9a, 0xc6, 0x01, 0x6d, 0x01, 0x65, 0x01, 0x89, - 0x5e, 0x87, 0x50, 0x94, 0xca, 0xfe, 0x95, 0x01, 0x10, 0x9a, 0xfc, 0x4c, - 0x52, 0x01, 0x32, 0x01, 0x2a, 0xfe, 0xfa, 0x9a, 0x03, 0xaf, 0x49, 0xfe, - 0xcd, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xba, 0xff, 0xec, 0x05, 0x19, - 0x07, 0x73, 0x12, 0x26, 0x00, 0x38, 0x00, 0x00, 0x11, 0x07, 0x00, 0x43, - 0x00, 0x46, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, 0x13, 0x05, 0x26, 0x00, - 0x2b, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0xba, 0xff, 0xec, 0x05, 0x19, - 0x07, 0x73, 0x12, 0x26, 0x00, 0x38, 0x00, 0x00, 0x11, 0x07, 0x00, 0x76, - 0x00, 0xcf, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, 0x1b, 0x05, 0x26, 0x00, - 0x2b, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0xba, 0xff, 0xec, 0x05, 0x19, - 0x07, 0x73, 0x00, 0x0e, 0x00, 0x20, 0x00, 0x00, 0x01, 0x3e, 0x01, 0x37, - 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, 0x06, 0x07, 0x23, 0x05, - 0x11, 0x14, 0x00, 0x21, 0x20, 0x00, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, - 0x33, 0x32, 0x36, 0x35, 0x11, 0x01, 0x89, 0x7f, 0x66, 0x17, 0xa6, 0x16, - 0x6d, 0x7d, 0x77, 0x58, 0x85, 0x88, 0x53, 0x73, 0x03, 0x90, 0xfe, 0xd2, - 0xfe, 0xf8, 0xfe, 0xf8, 0xfe, 0xdf, 0xaa, 0xc8, 0xc2, 0xb9, 0xc8, 0x06, - 0x42, 0x88, 0x80, 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, 0x86, 0x34, - 0x75, 0xfc, 0x4e, 0xfa, 0xfe, 0xe2, 0x01, 0x20, 0xfc, 0x03, 0xae, 0xfc, - 0x46, 0xb7, 0xc4, 0xc5, 0xb8, 0x03, 0xb8, 0x00, 0xff, 0xff, 0x00, 0xba, - 0xff, 0xec, 0x05, 0x19, 0x07, 0x25, 0x12, 0x26, 0x00, 0x38, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x6a, 0x00, 0x98, 0x01, 0x52, 0x00, 0x0a, 0xb4, 0x02, - 0x01, 0x27, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x35, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x7b, 0x07, 0x73, 0x12, 0x26, 0x00, 0x3c, 0x00, 0x00, - 0x11, 0x07, 0x00, 0x76, 0x00, 0x31, 0x01, 0x52, 0x00, 0x08, 0xb3, 0x01, - 0x12, 0x05, 0x26, 0x00, 0x2b, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc9, - 0x00, 0x00, 0x04, 0x79, 0x05, 0xb6, 0x00, 0x0c, 0x00, 0x15, 0x00, 0x36, - 0x40, 0x1c, 0x0d, 0x09, 0x05, 0x05, 0x06, 0x11, 0x00, 0x06, 0x00, 0x16, - 0x17, 0x0d, 0x04, 0x4a, 0x59, 0x09, 0x15, 0x4a, 0x59, 0x0d, 0x09, 0x0d, - 0x09, 0x06, 0x07, 0x03, 0x06, 0x12, 0x00, 0x3f, 0x3f, 0x12, 0x39, 0x39, - 0x2f, 0x2f, 0x2b, 0x2b, 0x11, 0x12, 0x01, 0x39, 0x39, 0x11, 0x33, 0x11, - 0x33, 0x11, 0x33, 0x33, 0x31, 0x30, 0x01, 0x14, 0x04, 0x21, 0x23, 0x11, - 0x23, 0x11, 0x33, 0x11, 0x33, 0x20, 0x04, 0x01, 0x33, 0x32, 0x36, 0x35, - 0x34, 0x26, 0x2b, 0x01, 0x04, 0x79, 0xfe, 0xd1, 0xfe, 0xe1, 0xb8, 0xaa, - 0xaa, 0xd7, 0x01, 0x19, 0x01, 0x16, 0xfc, 0xfa, 0xa8, 0xe2, 0xca, 0xbe, - 0xca, 0xcc, 0x03, 0x10, 0xe3, 0xee, 0xfe, 0xc1, 0x05, 0xb6, 0xff, 0x00, - 0xcf, 0xfd, 0xea, 0x8f, 0xa4, 0x95, 0x8a, 0x00, 0x00, 0x01, 0x00, 0xb0, - 0xff, 0xec, 0x04, 0x9c, 0x06, 0x1f, 0x00, 0x30, 0x00, 0x41, 0x40, 0x22, - 0x29, 0x2a, 0x05, 0x1d, 0x23, 0x00, 0x17, 0x0c, 0x0c, 0x00, 0x1d, 0x11, - 0x2a, 0x05, 0x31, 0x32, 0x12, 0x12, 0x2a, 0x2e, 0x2e, 0x26, 0x46, 0x59, - 0x2e, 0x00, 0x2a, 0x15, 0x0f, 0x15, 0x46, 0x59, 0x0f, 0x16, 0x00, 0x3f, - 0x2b, 0x00, 0x18, 0x3f, 0x3f, 0x2b, 0x11, 0x12, 0x00, 0x39, 0x18, 0x2f, - 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, - 0x33, 0x31, 0x30, 0x01, 0x14, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x1e, 0x01, - 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x35, 0x1e, 0x01, - 0x33, 0x32, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, - 0x3e, 0x01, 0x35, 0x34, 0x26, 0x23, 0x20, 0x15, 0x11, 0x23, 0x11, 0x34, - 0x36, 0x33, 0x32, 0x16, 0x04, 0x19, 0x8f, 0x58, 0x38, 0x1b, 0x47, 0x4e, - 0x8c, 0x66, 0xc2, 0xb3, 0xbc, 0x6b, 0x3f, 0x9c, 0x48, 0xd7, 0x53, 0x6e, - 0x7f, 0x60, 0x45, 0x47, 0x4b, 0x40, 0x88, 0x7f, 0xfe, 0xec, 0xa6, 0xdc, - 0xde, 0xce, 0xe1, 0x04, 0xf2, 0x87, 0x73, 0x46, 0x43, 0x21, 0x20, 0x2a, - 0x39, 0x33, 0x5f, 0x9d, 0x65, 0xa0, 0xab, 0x45, 0x9a, 0x27, 0x2f, 0xb6, - 0x4b, 0x6b, 0x46, 0x52, 0x7b, 0x54, 0x3f, 0x6a, 0x35, 0x39, 0x5a, 0x35, - 0x50, 0x55, 0xdf, 0xfb, 0x4c, 0x04, 0xb2, 0xb2, 0xbb, 0x9d, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x5e, 0xff, 0xec, 0x03, 0xcd, 0x06, 0x21, 0x12, 0x26, - 0x00, 0x44, 0x00, 0x00, 0x11, 0x06, 0x00, 0x43, 0x8e, 0x00, 0x00, 0x08, - 0xb3, 0x02, 0x26, 0x11, 0x26, 0x00, 0x2b, 0x35, 0xff, 0xff, 0x00, 0x5e, - 0xff, 0xec, 0x03, 0xcd, 0x06, 0x21, 0x12, 0x26, 0x00, 0x44, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x76, 0x2b, 0x00, 0x00, 0x08, 0xb3, 0x02, 0x2e, 0x11, - 0x26, 0x00, 0x2b, 0x35, 0x00, 0x03, 0x00, 0x5e, 0xff, 0xec, 0x03, 0xcd, - 0x06, 0x21, 0x00, 0x0e, 0x00, 0x28, 0x00, 0x33, 0x00, 0x00, 0x13, 0x3e, - 0x01, 0x37, 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, 0x06, 0x07, - 0x23, 0x01, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x10, 0x25, - 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, - 0x16, 0x15, 0x11, 0x25, 0x32, 0x36, 0x3d, 0x01, 0x07, 0x0e, 0x01, 0x15, - 0x14, 0x16, 0xe4, 0x7f, 0x66, 0x17, 0xa6, 0x16, 0x6d, 0x7d, 0x77, 0x58, - 0x85, 0x88, 0x53, 0x73, 0x02, 0x6e, 0x21, 0x08, 0x52, 0xa3, 0x7a, 0xa3, - 0xb9, 0x02, 0x13, 0xba, 0x6f, 0x7a, 0x89, 0xad, 0x33, 0x51, 0xc1, 0x61, - 0xc4, 0xbd, 0xfe, 0x0e, 0x9b, 0xb1, 0xa6, 0xc6, 0xaf, 0x6d, 0x04, 0xf0, - 0x88, 0x80, 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, 0x86, 0x34, 0xfb, - 0x27, 0x9c, 0x67, 0x49, 0xa8, 0x9b, 0x01, 0x4c, 0x10, 0x06, 0x44, 0x81, - 0x7b, 0x54, 0x7f, 0x2c, 0x32, 0xae, 0xc0, 0xfd, 0x14, 0x75, 0xaa, 0x99, - 0x63, 0x07, 0x07, 0x6d, 0x73, 0x5a, 0x5e, 0x00, 0x00, 0x03, 0x00, 0x5e, - 0xff, 0xec, 0x03, 0xcd, 0x05, 0xdd, 0x00, 0x17, 0x00, 0x31, 0x00, 0x3c, - 0x00, 0x00, 0x01, 0x22, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x23, 0x3e, - 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, - 0x13, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x10, 0x25, 0x37, - 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, 0x16, - 0x15, 0x11, 0x25, 0x32, 0x36, 0x3d, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, - 0x16, 0x02, 0xd1, 0x2b, 0x52, 0x4f, 0x49, 0x22, 0x32, 0x33, 0x0e, 0x62, - 0x0d, 0x73, 0x5b, 0x2e, 0x56, 0x4e, 0x48, 0x20, 0x31, 0x30, 0x0f, 0x63, - 0x0d, 0x71, 0x23, 0x21, 0x08, 0x52, 0xa3, 0x7a, 0xa3, 0xb9, 0x02, 0x13, - 0xba, 0x6f, 0x7a, 0x89, 0xad, 0x33, 0x51, 0xc1, 0x61, 0xc4, 0xbd, 0xfe, - 0x0e, 0x9b, 0xb1, 0xa6, 0xc6, 0xaf, 0x6d, 0x04, 0xdb, 0x25, 0x2d, 0x25, - 0x3c, 0x3d, 0x79, 0x89, 0x25, 0x2d, 0x25, 0x3b, 0x3e, 0x79, 0x89, 0xfb, - 0x25, 0x9c, 0x67, 0x49, 0xa8, 0x9b, 0x01, 0x4c, 0x10, 0x06, 0x44, 0x81, - 0x7b, 0x54, 0x7f, 0x2c, 0x32, 0xae, 0xc0, 0xfd, 0x14, 0x75, 0xaa, 0x99, - 0x63, 0x07, 0x07, 0x6d, 0x73, 0x5a, 0x5e, 0x00, 0xff, 0xff, 0x00, 0x5e, - 0xff, 0xec, 0x03, 0xcd, 0x05, 0xd3, 0x12, 0x26, 0x00, 0x44, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x6a, 0xe2, 0x00, 0x00, 0x0a, 0xb4, 0x03, 0x02, 0x3a, - 0x11, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x00, 0x00, 0x04, 0x00, 0x5e, - 0xff, 0xec, 0x03, 0xcd, 0x06, 0x85, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x31, - 0x00, 0x3c, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, - 0x36, 0x33, 0x32, 0x16, 0x07, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, - 0x16, 0x33, 0x32, 0x36, 0x13, 0x27, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, - 0x35, 0x10, 0x25, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x27, 0x3e, - 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, 0x25, 0x32, 0x36, 0x3d, 0x01, 0x07, - 0x0e, 0x01, 0x15, 0x14, 0x16, 0x03, 0x24, 0x7b, 0x66, 0x65, 0x78, 0x79, - 0x64, 0x65, 0x7c, 0x6c, 0x42, 0x33, 0x33, 0x42, 0x3c, 0x39, 0x34, 0x41, - 0x9a, 0x21, 0x08, 0x52, 0xa3, 0x7a, 0xa3, 0xb9, 0x02, 0x13, 0xba, 0x6f, - 0x7a, 0x89, 0xad, 0x33, 0x51, 0xc1, 0x61, 0xc4, 0xbd, 0xfe, 0x0e, 0x9b, - 0xb1, 0xa6, 0xc6, 0xaf, 0x6d, 0x05, 0xb2, 0x62, 0x77, 0x75, 0x62, 0x62, - 0x73, 0x77, 0x5e, 0x38, 0x3d, 0x3d, 0x38, 0x38, 0x3d, 0x3d, 0xfa, 0x88, - 0x9c, 0x67, 0x49, 0xa8, 0x9b, 0x01, 0x4c, 0x10, 0x06, 0x44, 0x81, 0x7b, - 0x54, 0x7f, 0x2c, 0x32, 0xae, 0xc0, 0xfd, 0x14, 0x75, 0xaa, 0x99, 0x63, - 0x07, 0x07, 0x6d, 0x73, 0x5a, 0x5e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x5e, - 0xff, 0xec, 0x06, 0x73, 0x04, 0x5c, 0x00, 0x29, 0x00, 0x34, 0x00, 0x3b, - 0x00, 0x61, 0x40, 0x33, 0x2a, 0x00, 0x24, 0x11, 0x30, 0x38, 0x19, 0x19, - 0x04, 0x30, 0x39, 0x18, 0x18, 0x1f, 0x30, 0x0b, 0x00, 0x05, 0x3c, 0x3d, - 0x1b, 0x2d, 0x27, 0x2d, 0x46, 0x59, 0x19, 0x31, 0x04, 0x31, 0x47, 0x59, - 0x38, 0x24, 0x27, 0x11, 0x04, 0x04, 0x0e, 0x22, 0x27, 0x16, 0x35, 0x08, - 0x0e, 0x08, 0x46, 0x59, 0x14, 0x0e, 0x10, 0x00, 0x3f, 0x33, 0x2b, 0x11, - 0x00, 0x33, 0x18, 0x3f, 0x33, 0x12, 0x39, 0x2f, 0x39, 0x12, 0x39, 0x33, - 0x2b, 0x11, 0x00, 0x33, 0x2b, 0x11, 0x00, 0x33, 0x11, 0x12, 0x01, 0x17, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x12, 0x39, 0x39, 0x11, - 0x33, 0x31, 0x30, 0x13, 0x34, 0x36, 0x3f, 0x01, 0x35, 0x34, 0x26, 0x23, - 0x22, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x3e, 0x01, 0x33, - 0x32, 0x12, 0x1d, 0x01, 0x21, 0x12, 0x21, 0x32, 0x36, 0x37, 0x15, 0x0e, - 0x01, 0x23, 0x20, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, - 0x33, 0x32, 0x36, 0x3d, 0x01, 0x07, 0x0e, 0x01, 0x01, 0x22, 0x06, 0x07, - 0x21, 0x34, 0x26, 0x5e, 0xf8, 0xfe, 0xb8, 0x74, 0x77, 0x90, 0xa3, 0x34, - 0x4a, 0xc7, 0x62, 0x82, 0xa5, 0x29, 0x35, 0xab, 0x6e, 0xc0, 0xe8, 0xfd, - 0x43, 0x08, 0x01, 0x3a, 0x5b, 0x9d, 0x54, 0x56, 0x95, 0x65, 0xfe, 0xdf, - 0x7d, 0x51, 0xc5, 0x86, 0xa3, 0xb9, 0xae, 0x6b, 0x58, 0x91, 0xa8, 0x9e, - 0xba, 0xa4, 0x03, 0xbd, 0x79, 0x8b, 0x0b, 0x02, 0x07, 0x80, 0x01, 0x2f, - 0xa1, 0xb3, 0x08, 0x06, 0x44, 0x81, 0x7b, 0x54, 0x7f, 0x29, 0x35, 0x57, - 0x5f, 0x58, 0x60, 0xfe, 0xf5, 0xde, 0x6b, 0xfe, 0x75, 0x23, 0x27, 0x94, - 0x26, 0x21, 0xe9, 0x7f, 0x6a, 0xaa, 0x97, 0x5f, 0x59, 0xa9, 0x9a, 0x63, - 0x07, 0x08, 0x6d, 0x02, 0x32, 0xa6, 0x9e, 0x9c, 0xa8, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x73, 0xfe, 0x14, 0x03, 0x8b, 0x04, 0x5c, 0x12, 0x26, - 0x00, 0x46, 0x00, 0x00, 0x10, 0x07, 0x00, 0x7a, 0x01, 0x46, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x73, 0xff, 0xec, 0x04, 0x12, 0x06, 0x21, 0x12, 0x26, - 0x00, 0x48, 0x00, 0x00, 0x11, 0x06, 0x00, 0x43, 0xb5, 0x00, 0x00, 0x08, - 0xb3, 0x02, 0x1c, 0x11, 0x26, 0x00, 0x2b, 0x35, 0xff, 0xff, 0x00, 0x73, - 0xff, 0xec, 0x04, 0x12, 0x06, 0x21, 0x12, 0x26, 0x00, 0x48, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x76, 0x4e, 0x00, 0x00, 0x08, 0xb3, 0x02, 0x24, 0x11, - 0x26, 0x00, 0x2b, 0x35, 0x00, 0x03, 0x00, 0x73, 0xff, 0xec, 0x04, 0x12, - 0x06, 0x21, 0x00, 0x0e, 0x00, 0x22, 0x00, 0x29, 0x00, 0x00, 0x01, 0x3e, - 0x01, 0x37, 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, 0x06, 0x07, - 0x23, 0x01, 0x22, 0x00, 0x11, 0x10, 0x00, 0x33, 0x32, 0x12, 0x1d, 0x01, - 0x21, 0x1e, 0x01, 0x33, 0x32, 0x37, 0x15, 0x0e, 0x01, 0x03, 0x22, 0x06, - 0x07, 0x21, 0x34, 0x26, 0x01, 0x03, 0x7f, 0x66, 0x17, 0xa6, 0x16, 0x6d, - 0x7d, 0x77, 0x58, 0x85, 0x88, 0x53, 0x73, 0x01, 0x7c, 0xf3, 0xfe, 0xe7, - 0x01, 0x05, 0xdc, 0xce, 0xf0, 0xfd, 0x0d, 0x05, 0xb9, 0xa8, 0xb1, 0xad, - 0x58, 0x9d, 0x9c, 0x84, 0x9d, 0x0e, 0x02, 0x3d, 0x8c, 0x04, 0xf0, 0x88, - 0x80, 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, 0x86, 0x34, 0xfb, 0x13, - 0x01, 0x28, 0x01, 0x07, 0x01, 0x09, 0x01, 0x38, 0xfe, 0xf1, 0xde, 0x69, - 0xc1, 0xc8, 0x4a, 0x94, 0x26, 0x21, 0x03, 0xe5, 0xac, 0x98, 0x9d, 0xa7, - 0xff, 0xff, 0x00, 0x73, 0xff, 0xec, 0x04, 0x12, 0x05, 0xd3, 0x12, 0x26, - 0x00, 0x48, 0x00, 0x00, 0x11, 0x06, 0x00, 0x6a, 0x0a, 0x00, 0x00, 0x0a, - 0xb4, 0x03, 0x02, 0x30, 0x11, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x00, - 0x00, 0x02, 0xff, 0xda, 0x00, 0x00, 0x01, 0x63, 0x06, 0x21, 0x00, 0x03, - 0x00, 0x0d, 0x00, 0x00, 0x21, 0x23, 0x11, 0x33, 0x37, 0x23, 0x2e, 0x01, - 0x27, 0x35, 0x33, 0x1e, 0x01, 0x17, 0x01, 0x56, 0xa6, 0xa6, 0x0d, 0x6e, - 0x41, 0xb2, 0x28, 0xcb, 0x20, 0x72, 0x2c, 0x04, 0x48, 0x91, 0x34, 0xc0, - 0x3f, 0x15, 0x45, 0xb5, 0x35, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa9, - 0x00, 0x00, 0x02, 0x32, 0x06, 0x21, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, - 0x21, 0x23, 0x11, 0x33, 0x27, 0x3e, 0x01, 0x37, 0x33, 0x15, 0x0e, 0x01, - 0x07, 0x23, 0x01, 0x56, 0xa6, 0xa6, 0xad, 0x30, 0x6f, 0x20, 0xca, 0x2c, - 0xae, 0x40, 0x6f, 0x04, 0x48, 0xaa, 0x3e, 0xb0, 0x41, 0x15, 0x41, 0xbe, - 0x34, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb3, 0x00, 0x00, 0x02, 0x55, - 0x06, 0x21, 0x00, 0x0e, 0x00, 0x12, 0x00, 0x00, 0x03, 0x3e, 0x01, 0x37, - 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, 0x06, 0x07, 0x23, 0x01, - 0x23, 0x11, 0x33, 0x4d, 0x7f, 0x66, 0x17, 0xa6, 0x16, 0x6d, 0x7d, 0x77, - 0x58, 0x85, 0x88, 0x53, 0x73, 0x01, 0xa3, 0xa6, 0xa6, 0x04, 0xf0, 0x88, - 0x80, 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, 0x86, 0x34, 0xfb, 0x27, - 0x04, 0x48, 0x00, 0x00, 0x00, 0x03, 0xff, 0xec, 0x00, 0x00, 0x02, 0x1f, - 0x05, 0xd3, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x1b, 0x00, 0x00, 0x21, 0x23, - 0x11, 0x33, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, - 0x22, 0x26, 0x01, 0x56, 0xa6, 0xa6, 0xfe, 0x96, 0x35, 0x25, 0x26, 0x37, - 0x37, 0x26, 0x25, 0x35, 0x01, 0x7d, 0x35, 0x25, 0x25, 0x37, 0x37, 0x25, - 0x25, 0x35, 0x04, 0x48, 0x01, 0x29, 0x34, 0x2e, 0x2e, 0x34, 0x32, 0x31, - 0x31, 0x32, 0x34, 0x2e, 0x2e, 0x34, 0x32, 0x31, 0x31, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x71, 0xff, 0xec, 0x04, 0x62, 0x06, 0x21, 0x00, 0x1b, - 0x00, 0x26, 0x00, 0x4a, 0x40, 0x2b, 0x21, 0x06, 0x0c, 0x1c, 0x1c, 0x00, - 0x00, 0x18, 0x19, 0x16, 0x0e, 0x11, 0x13, 0x10, 0x06, 0x09, 0x27, 0x28, - 0x09, 0x1f, 0x46, 0x59, 0x0b, 0x03, 0x16, 0x11, 0x19, 0x0e, 0x0f, 0x05, - 0x14, 0x09, 0x09, 0x03, 0x17, 0x14, 0x01, 0x03, 0x24, 0x46, 0x59, 0x03, - 0x16, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x33, 0x12, 0x39, 0x2f, 0x12, - 0x17, 0x39, 0x12, 0x39, 0x2b, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, - 0x11, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x10, 0x00, 0x23, 0x22, 0x00, - 0x35, 0x34, 0x00, 0x33, 0x32, 0x17, 0x37, 0x26, 0x27, 0x05, 0x27, 0x37, - 0x26, 0x27, 0x37, 0x16, 0x17, 0x37, 0x17, 0x07, 0x16, 0x12, 0x03, 0x34, - 0x26, 0x23, 0x20, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x04, 0x62, 0xfe, - 0xfb, 0xf7, 0xde, 0xfe, 0xe9, 0x01, 0x07, 0xdc, 0xe2, 0x64, 0x08, 0x39, - 0xcd, 0xfe, 0xf1, 0x49, 0xe9, 0x5c, 0x5e, 0x45, 0x9c, 0x66, 0xee, 0x4c, - 0xcf, 0x98, 0xa5, 0xa8, 0xb4, 0x9c, 0xfe, 0xaf, 0xaf, 0xa2, 0xaf, 0xa1, - 0x02, 0x33, 0xfe, 0xe7, 0xfe, 0xd2, 0x01, 0x0d, 0xe2, 0xe6, 0x01, 0x06, - 0x79, 0x04, 0xd6, 0xbf, 0x9b, 0x6c, 0x85, 0x3e, 0x31, 0x75, 0x49, 0x4b, - 0x8a, 0x6b, 0x77, 0x8f, 0xfe, 0x72, 0xfe, 0xe8, 0x93, 0xaa, 0xfe, 0x98, - 0xa7, 0xb7, 0xc9, 0x00, 0x00, 0x02, 0x00, 0xb0, 0x00, 0x00, 0x04, 0x44, - 0x05, 0xdd, 0x00, 0x17, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x22, 0x2e, 0x02, - 0x23, 0x22, 0x06, 0x07, 0x23, 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x33, - 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, 0x13, 0x11, 0x34, 0x26, 0x23, 0x22, - 0x06, 0x15, 0x11, 0x23, 0x11, 0x33, 0x17, 0x33, 0x3e, 0x01, 0x33, 0x32, - 0x16, 0x15, 0x11, 0x03, 0x22, 0x2b, 0x52, 0x4f, 0x49, 0x22, 0x32, 0x33, - 0x0e, 0x62, 0x0d, 0x73, 0x5b, 0x2e, 0x56, 0x4e, 0x48, 0x20, 0x31, 0x30, - 0x0f, 0x63, 0x0d, 0x71, 0x1e, 0x7a, 0x82, 0xac, 0xa0, 0xa6, 0x87, 0x1b, - 0x08, 0x33, 0xb8, 0x71, 0xc6, 0xc8, 0x04, 0xdb, 0x25, 0x2d, 0x25, 0x3c, - 0x3d, 0x79, 0x89, 0x25, 0x2d, 0x25, 0x3b, 0x3e, 0x79, 0x89, 0xfb, 0x25, - 0x02, 0xc5, 0x86, 0x84, 0xba, 0xd6, 0xfd, 0xc1, 0x04, 0x48, 0x96, 0x51, - 0x59, 0xbf, 0xd2, 0xfd, 0x35, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x73, - 0xff, 0xec, 0x04, 0x62, 0x06, 0x21, 0x12, 0x26, 0x00, 0x52, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x43, 0xd4, 0x00, 0x00, 0x08, 0xb3, 0x02, 0x1a, 0x11, - 0x26, 0x00, 0x2b, 0x35, 0xff, 0xff, 0x00, 0x73, 0xff, 0xec, 0x04, 0x62, - 0x06, 0x21, 0x12, 0x26, 0x00, 0x52, 0x00, 0x00, 0x11, 0x06, 0x00, 0x76, - 0x56, 0x00, 0x00, 0x08, 0xb3, 0x02, 0x22, 0x11, 0x26, 0x00, 0x2b, 0x35, - 0x00, 0x03, 0x00, 0x73, 0xff, 0xec, 0x04, 0x62, 0x06, 0x21, 0x00, 0x0e, - 0x00, 0x1b, 0x00, 0x27, 0x00, 0x00, 0x01, 0x3e, 0x01, 0x37, 0x33, 0x1e, - 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, 0x06, 0x07, 0x23, 0x01, 0x10, 0x00, - 0x23, 0x22, 0x26, 0x02, 0x35, 0x10, 0x00, 0x33, 0x32, 0x00, 0x01, 0x14, - 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x01, 0x1a, - 0x7f, 0x66, 0x17, 0xa6, 0x16, 0x6d, 0x7d, 0x77, 0x58, 0x85, 0x88, 0x53, - 0x73, 0x03, 0x48, 0xfe, 0xf2, 0xee, 0x93, 0xe4, 0x7c, 0x01, 0x0c, 0xee, - 0xe6, 0x01, 0x0f, 0xfc, 0xbd, 0xa8, 0xa3, 0xa3, 0xa9, 0xa9, 0xa5, 0xa3, - 0xa6, 0x04, 0xf0, 0x88, 0x80, 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, - 0x86, 0x34, 0xfd, 0x4c, 0xfe, 0xf4, 0xfe, 0xd3, 0x8a, 0x01, 0x02, 0xad, - 0x01, 0x0c, 0x01, 0x2b, 0xfe, 0xce, 0xfe, 0xfb, 0xd2, 0xdc, 0xdb, 0xd3, - 0xd1, 0xd9, 0xd6, 0x00, 0x00, 0x03, 0x00, 0x73, 0xff, 0xec, 0x04, 0x62, - 0x05, 0xdd, 0x00, 0x17, 0x00, 0x24, 0x00, 0x30, 0x00, 0x00, 0x01, 0x22, - 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x23, 0x3e, 0x01, 0x33, 0x32, 0x1e, - 0x02, 0x33, 0x32, 0x36, 0x37, 0x33, 0x0e, 0x01, 0x01, 0x10, 0x00, 0x23, - 0x22, 0x26, 0x02, 0x35, 0x10, 0x00, 0x33, 0x32, 0x00, 0x01, 0x14, 0x16, - 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x03, 0x05, 0x2b, - 0x52, 0x4f, 0x49, 0x22, 0x32, 0x33, 0x0e, 0x62, 0x0d, 0x73, 0x5b, 0x2e, - 0x56, 0x4e, 0x48, 0x20, 0x31, 0x30, 0x0f, 0x63, 0x0d, 0x71, 0x00, 0xff, - 0xfe, 0xf2, 0xee, 0x93, 0xe4, 0x7c, 0x01, 0x0c, 0xee, 0xe6, 0x01, 0x0f, - 0xfc, 0xbd, 0xa8, 0xa3, 0xa3, 0xa9, 0xa9, 0xa5, 0xa3, 0xa6, 0x04, 0xdb, - 0x25, 0x2d, 0x25, 0x3c, 0x3d, 0x79, 0x89, 0x25, 0x2d, 0x25, 0x3b, 0x3e, - 0x79, 0x89, 0xfd, 0x4a, 0xfe, 0xf4, 0xfe, 0xd3, 0x8a, 0x01, 0x02, 0xad, - 0x01, 0x0c, 0x01, 0x2b, 0xfe, 0xce, 0xfe, 0xfb, 0xd2, 0xdc, 0xdb, 0xd3, - 0xd1, 0xd9, 0xd6, 0x00, 0xff, 0xff, 0x00, 0x73, 0xff, 0xec, 0x04, 0x62, - 0x05, 0xd3, 0x12, 0x26, 0x00, 0x52, 0x00, 0x00, 0x11, 0x06, 0x00, 0x6a, - 0x1b, 0x00, 0x00, 0x0a, 0xb4, 0x03, 0x02, 0x2e, 0x11, 0x26, 0x00, 0x2b, - 0x35, 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x68, 0x00, 0xfc, 0x04, 0x29, - 0x04, 0xa8, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x1b, 0x00, 0x33, 0x40, 0x18, - 0x16, 0x0a, 0x0a, 0x10, 0x04, 0x02, 0x04, 0x01, 0x03, 0x1c, 0x1d, 0x19, - 0x13, 0x13, 0x01, 0x07, 0x0d, 0x0d, 0x01, 0x01, 0x00, 0x50, 0x59, 0x01, - 0x00, 0x2f, 0x2b, 0x11, 0x00, 0x33, 0x18, 0x2f, 0x33, 0x11, 0x33, 0x2f, - 0x33, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, - 0x30, 0x13, 0x35, 0x21, 0x15, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, - 0x14, 0x06, 0x23, 0x22, 0x26, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, - 0x14, 0x06, 0x23, 0x22, 0x26, 0x68, 0x03, 0xc1, 0xfd, 0xae, 0x3b, 0x36, - 0x34, 0x3a, 0x3b, 0x33, 0x34, 0x3d, 0x3b, 0x36, 0x34, 0x3a, 0x3b, 0x33, - 0x34, 0x3d, 0x02, 0x8d, 0x8a, 0x8a, 0xfe, 0xe8, 0x3c, 0x3d, 0x3f, 0x3a, - 0x39, 0x40, 0x3f, 0x02, 0xf4, 0x3c, 0x3d, 0x3f, 0x3a, 0x39, 0x40, 0x3f, - 0x00, 0x03, 0x00, 0x73, 0xff, 0xbc, 0x04, 0x62, 0x04, 0x87, 0x00, 0x13, - 0x00, 0x1b, 0x00, 0x23, 0x00, 0x4b, 0x40, 0x29, 0x17, 0x1f, 0x1c, 0x14, - 0x14, 0x0a, 0x1c, 0x00, 0x00, 0x12, 0x0f, 0x05, 0x08, 0x0a, 0x06, 0x24, - 0x25, 0x16, 0x1e, 0x21, 0x19, 0x0d, 0x19, 0x46, 0x59, 0x0f, 0x12, 0x08, - 0x05, 0x04, 0x03, 0x10, 0x0d, 0x10, 0x03, 0x21, 0x46, 0x59, 0x06, 0x03, - 0x16, 0x00, 0x3f, 0xc6, 0x2b, 0x00, 0x18, 0x3f, 0xc6, 0x12, 0x17, 0x39, - 0x2b, 0x11, 0x12, 0x00, 0x39, 0x39, 0x11, 0x12, 0x01, 0x17, 0x39, 0x11, - 0x33, 0x11, 0x33, 0x11, 0x12, 0x39, 0x39, 0x31, 0x30, 0x01, 0x10, 0x00, - 0x23, 0x22, 0x27, 0x07, 0x27, 0x37, 0x26, 0x11, 0x10, 0x00, 0x33, 0x32, - 0x17, 0x37, 0x17, 0x07, 0x16, 0x05, 0x14, 0x17, 0x01, 0x26, 0x23, 0x22, - 0x06, 0x05, 0x34, 0x27, 0x01, 0x16, 0x33, 0x32, 0x36, 0x04, 0x62, 0xfe, - 0xf2, 0xee, 0x9a, 0x70, 0x54, 0x72, 0x5e, 0x81, 0x01, 0x0c, 0xee, 0x9a, - 0x74, 0x54, 0x75, 0x61, 0x7f, 0xfc, 0xbd, 0x35, 0x01, 0xd1, 0x4b, 0x72, - 0xa3, 0xa6, 0x02, 0x97, 0x33, 0xfe, 0x2f, 0x47, 0x71, 0xa3, 0xa9, 0x02, - 0x25, 0xfe, 0xf4, 0xfe, 0xd3, 0x45, 0x75, 0x4e, 0x83, 0x98, 0x01, 0x00, - 0x01, 0x0c, 0x01, 0x2b, 0x4c, 0x77, 0x4c, 0x85, 0x98, 0xf9, 0xab, 0x66, - 0x02, 0x86, 0x35, 0xd6, 0xd4, 0xa4, 0x64, 0xfd, 0x7d, 0x33, 0xdb, 0x00, - 0xff, 0xff, 0x00, 0xa4, 0xff, 0xec, 0x04, 0x39, 0x06, 0x21, 0x12, 0x26, - 0x00, 0x58, 0x00, 0x00, 0x11, 0x06, 0x00, 0x43, 0xc4, 0x00, 0x00, 0x08, - 0xb3, 0x01, 0x16, 0x11, 0x26, 0x00, 0x2b, 0x35, 0xff, 0xff, 0x00, 0xa4, - 0xff, 0xec, 0x04, 0x39, 0x06, 0x21, 0x12, 0x26, 0x00, 0x58, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x76, 0x71, 0x00, 0x00, 0x08, 0xb3, 0x01, 0x1e, 0x11, - 0x26, 0x00, 0x2b, 0x35, 0x00, 0x02, 0x00, 0xa4, 0xff, 0xec, 0x04, 0x39, - 0x06, 0x21, 0x00, 0x0e, 0x00, 0x23, 0x00, 0x00, 0x01, 0x3e, 0x01, 0x37, - 0x33, 0x1e, 0x01, 0x17, 0x15, 0x23, 0x26, 0x27, 0x06, 0x07, 0x23, 0x17, - 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x23, 0x27, - 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x11, 0x01, 0x1e, 0x7f, 0x66, - 0x17, 0xa6, 0x16, 0x6d, 0x7d, 0x77, 0x58, 0x85, 0x88, 0x53, 0x73, 0x2e, - 0x7a, 0x82, 0xac, 0x9f, 0xa6, 0x89, 0x18, 0x09, 0x33, 0xb5, 0x74, 0xc8, - 0xc7, 0x04, 0xf0, 0x88, 0x80, 0x29, 0x2a, 0x85, 0x82, 0x17, 0x37, 0x83, - 0x86, 0x34, 0x91, 0xfd, 0x39, 0x86, 0x84, 0xbc, 0xd5, 0x02, 0x40, 0xfb, - 0xb8, 0x93, 0x51, 0x56, 0xbe, 0xd1, 0x02, 0xcd, 0xff, 0xff, 0x00, 0xa4, - 0xff, 0xec, 0x04, 0x39, 0x05, 0xd3, 0x12, 0x26, 0x00, 0x58, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x6a, 0x21, 0x00, 0x00, 0x0a, 0xb4, 0x02, 0x01, 0x2a, - 0x11, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x00, 0xff, 0xff, 0x00, 0x02, - 0xfe, 0x14, 0x04, 0x06, 0x06, 0x21, 0x12, 0x26, 0x00, 0x5c, 0x00, 0x00, - 0x11, 0x06, 0x00, 0x76, 0x12, 0x00, 0x00, 0x08, 0xb3, 0x01, 0x1f, 0x11, - 0x26, 0x00, 0x2b, 0x35, 0x00, 0x02, 0x00, 0xb0, 0xfe, 0x14, 0x04, 0x75, - 0x06, 0x14, 0x00, 0x16, 0x00, 0x22, 0x00, 0x3e, 0x40, 0x1f, 0x20, 0x06, - 0x1b, 0x14, 0x10, 0x10, 0x11, 0x06, 0x11, 0x24, 0x23, 0x12, 0x00, 0x11, - 0x1b, 0x0c, 0x16, 0x09, 0x03, 0x09, 0x1e, 0x46, 0x59, 0x09, 0x16, 0x03, - 0x17, 0x46, 0x59, 0x03, 0x10, 0x00, 0x3f, 0x2b, 0x00, 0x18, 0x3f, 0x2b, - 0x11, 0x12, 0x00, 0x39, 0x39, 0x18, 0x3f, 0x3f, 0x11, 0x12, 0x01, 0x39, - 0x39, 0x11, 0x33, 0x11, 0x33, 0x33, 0x11, 0x33, 0x31, 0x30, 0x01, 0x3e, - 0x01, 0x33, 0x32, 0x12, 0x11, 0x10, 0x02, 0x23, 0x22, 0x27, 0x23, 0x17, - 0x16, 0x15, 0x11, 0x23, 0x11, 0x33, 0x11, 0x14, 0x07, 0x25, 0x22, 0x06, - 0x07, 0x15, 0x14, 0x16, 0x33, 0x20, 0x11, 0x34, 0x26, 0x01, 0x58, 0x42, - 0xaa, 0x6a, 0xd7, 0xf0, 0xf1, 0xd6, 0xde, 0x7a, 0x0c, 0x04, 0x08, 0xa6, - 0xa6, 0x06, 0x01, 0x48, 0xa8, 0x98, 0x02, 0x9a, 0xaa, 0x01, 0x2f, 0x94, - 0x03, 0xb4, 0x59, 0x4f, 0xfe, 0xd4, 0xfe, 0xf5, 0xfe, 0xf4, 0xfe, 0xd3, - 0xa1, 0x22, 0x4d, 0x3f, 0xfe, 0x35, 0x08, 0x00, 0xfe, 0x2e, 0x34, 0x5a, - 0x1b, 0xb8, 0xc9, 0x29, 0xe7, 0xc7, 0x01, 0xb0, 0xd7, 0xd1, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x02, 0xfe, 0x14, 0x04, 0x06, 0x05, 0xd3, 0x12, 0x26, - 0x00, 0x5c, 0x00, 0x00, 0x11, 0x06, 0x00, 0x6a, 0xb5, 0x00, 0x00, 0x0a, - 0xb4, 0x02, 0x01, 0x2b, 0x11, 0x26, 0x00, 0x2b, 0x35, 0x35, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1a, 0x72, 0x00, 0x01, 0x04, 0x66, - 0x18, 0x00, 0x00, 0x0a, 0x02, 0x64, 0x00, 0x05, 0x00, 0x24, 0xff, 0x71, - 0x00, 0x05, 0x00, 0x37, 0x00, 0x29, 0x00, 0x05, 0x00, 0x39, 0x00, 0x29, - 0x00, 0x05, 0x00, 0x3a, 0x00, 0x29, 0x00, 0x05, 0x00, 0x3c, 0x00, 0x14, - 0x00, 0x05, 0x00, 0x44, 0xff, 0xae, 0x00, 0x05, 0x00, 0x46, 0xff, 0x85, - 0x00, 0x05, 0x00, 0x47, 0xff, 0x85, 0x00, 0x05, 0x00, 0x48, 0xff, 0x85, - 0x00, 0x05, 0x00, 0x4a, 0xff, 0xc3, 0x00, 0x05, 0x00, 0x50, 0xff, 0xc3, - 0x00, 0x05, 0x00, 0x51, 0xff, 0xc3, 0x00, 0x05, 0x00, 0x52, 0xff, 0x85, - 0x00, 0x05, 0x00, 0x53, 0xff, 0xc3, 0x00, 0x05, 0x00, 0x54, 0xff, 0x85, - 0x00, 0x05, 0x00, 0x55, 0xff, 0xc3, 0x00, 0x05, 0x00, 0x56, 0xff, 0xc3, - 0x00, 0x05, 0x00, 0x58, 0xff, 0xc3, 0x00, 0x05, 0x00, 0x82, 0xff, 0x71, - 0x00, 0x05, 0x00, 0x83, 0xff, 0x71, 0x00, 0x05, 0x00, 0x84, 0xff, 0x71, - 0x00, 0x05, 0x00, 0x85, 0xff, 0x71, 0x00, 0x05, 0x00, 0x86, 0xff, 0x71, - 0x00, 0x05, 0x00, 0x87, 0xff, 0x71, 0x00, 0x05, 0x00, 0x9f, 0x00, 0x14, - 0x00, 0x05, 0x00, 0xa2, 0xff, 0x85, 0x00, 0x05, 0x00, 0xa3, 0xff, 0xae, - 0x00, 0x05, 0x00, 0xa4, 0xff, 0xae, 0x00, 0x05, 0x00, 0xa5, 0xff, 0xae, - 0x00, 0x05, 0x00, 0xa6, 0xff, 0xae, 0x00, 0x05, 0x00, 0xa7, 0xff, 0xae, - 0x00, 0x05, 0x00, 0xa8, 0xff, 0xae, 0x00, 0x05, 0x00, 0xa9, 0xff, 0x85, - 0x00, 0x05, 0x00, 0xaa, 0xff, 0x85, 0x00, 0x05, 0x00, 0xab, 0xff, 0x85, - 0x00, 0x05, 0x00, 0xac, 0xff, 0x85, 0x00, 0x05, 0x00, 0xad, 0xff, 0x85, - 0x00, 0x05, 0x00, 0xb4, 0xff, 0x85, 0x00, 0x05, 0x00, 0xb5, 0xff, 0x85, - 0x00, 0x05, 0x00, 0xb6, 0xff, 0x85, 0x00, 0x05, 0x00, 0xb7, 0xff, 0x85, - 0x00, 0x05, 0x00, 0xb8, 0xff, 0x85, 0x00, 0x05, 0x00, 0xba, 0xff, 0x85, - 0x00, 0x05, 0x00, 0xbb, 0xff, 0xc3, 0x00, 0x05, 0x00, 0xbc, 0xff, 0xc3, - 0x00, 0x05, 0x00, 0xbd, 0xff, 0xc3, 0x00, 0x05, 0x00, 0xbe, 0xff, 0xc3, - 0x00, 0x0a, 0x00, 0x24, 0xff, 0x71, 0x00, 0x0a, 0x00, 0x37, 0x00, 0x29, - 0x00, 0x0a, 0x00, 0x39, 0x00, 0x29, 0x00, 0x0a, 0x00, 0x3a, 0x00, 0x29, - 0x00, 0x0a, 0x00, 0x3c, 0x00, 0x14, 0x00, 0x0a, 0x00, 0x44, 0xff, 0xae, - 0x00, 0x0a, 0x00, 0x46, 0xff, 0x85, 0x00, 0x0a, 0x00, 0x47, 0xff, 0x85, - 0x00, 0x0a, 0x00, 0x48, 0xff, 0x85, 0x00, 0x0a, 0x00, 0x4a, 0xff, 0xc3, - 0x00, 0x0a, 0x00, 0x50, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0x51, 0xff, 0xc3, - 0x00, 0x0a, 0x00, 0x52, 0xff, 0x85, 0x00, 0x0a, 0x00, 0x53, 0xff, 0xc3, - 0x00, 0x0a, 0x00, 0x54, 0xff, 0x85, 0x00, 0x0a, 0x00, 0x55, 0xff, 0xc3, - 0x00, 0x0a, 0x00, 0x56, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0x58, 0xff, 0xc3, - 0x00, 0x0a, 0x00, 0x82, 0xff, 0x71, 0x00, 0x0a, 0x00, 0x83, 0xff, 0x71, - 0x00, 0x0a, 0x00, 0x84, 0xff, 0x71, 0x00, 0x0a, 0x00, 0x85, 0xff, 0x71, - 0x00, 0x0a, 0x00, 0x86, 0xff, 0x71, 0x00, 0x0a, 0x00, 0x87, 0xff, 0x71, - 0x00, 0x0a, 0x00, 0x9f, 0x00, 0x14, 0x00, 0x0a, 0x00, 0xa2, 0xff, 0x85, - 0x00, 0x0a, 0x00, 0xa3, 0xff, 0xae, 0x00, 0x0a, 0x00, 0xa4, 0xff, 0xae, - 0x00, 0x0a, 0x00, 0xa5, 0xff, 0xae, 0x00, 0x0a, 0x00, 0xa6, 0xff, 0xae, - 0x00, 0x0a, 0x00, 0xa7, 0xff, 0xae, 0x00, 0x0a, 0x00, 0xa8, 0xff, 0xae, - 0x00, 0x0a, 0x00, 0xa9, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xaa, 0xff, 0x85, - 0x00, 0x0a, 0x00, 0xab, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xac, 0xff, 0x85, - 0x00, 0x0a, 0x00, 0xad, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xb4, 0xff, 0x85, - 0x00, 0x0a, 0x00, 0xb5, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xb6, 0xff, 0x85, - 0x00, 0x0a, 0x00, 0xb7, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xb8, 0xff, 0x85, - 0x00, 0x0a, 0x00, 0xba, 0xff, 0x85, 0x00, 0x0a, 0x00, 0xbb, 0xff, 0xc3, - 0x00, 0x0a, 0x00, 0xbc, 0xff, 0xc3, 0x00, 0x0a, 0x00, 0xbd, 0xff, 0xc3, - 0x00, 0x0a, 0x00, 0xbe, 0xff, 0xc3, 0x00, 0x0b, 0x00, 0x2d, 0x00, 0xb8, - 0x00, 0x0f, 0x00, 0x26, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x2a, 0xff, 0x9a, - 0x00, 0x0f, 0x00, 0x32, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x34, 0xff, 0x9a, - 0x00, 0x0f, 0x00, 0x37, 0xff, 0x71, 0x00, 0x0f, 0x00, 0x38, 0xff, 0xd7, - 0x00, 0x0f, 0x00, 0x39, 0xff, 0x85, 0x00, 0x0f, 0x00, 0x3a, 0xff, 0x85, - 0x00, 0x0f, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x0f, 0x00, 0x89, 0xff, 0x9a, - 0x00, 0x0f, 0x00, 0x94, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x95, 0xff, 0x9a, - 0x00, 0x0f, 0x00, 0x96, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x97, 0xff, 0x9a, - 0x00, 0x0f, 0x00, 0x98, 0xff, 0x9a, 0x00, 0x0f, 0x00, 0x9a, 0xff, 0x9a, - 0x00, 0x0f, 0x00, 0x9b, 0xff, 0xd7, 0x00, 0x0f, 0x00, 0x9c, 0xff, 0xd7, - 0x00, 0x0f, 0x00, 0x9d, 0xff, 0xd7, 0x00, 0x0f, 0x00, 0x9e, 0xff, 0xd7, - 0x00, 0x0f, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x10, 0x00, 0x37, 0xff, 0xae, - 0x00, 0x11, 0x00, 0x26, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x2a, 0xff, 0x9a, - 0x00, 0x11, 0x00, 0x32, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x34, 0xff, 0x9a, - 0x00, 0x11, 0x00, 0x37, 0xff, 0x71, 0x00, 0x11, 0x00, 0x38, 0xff, 0xd7, - 0x00, 0x11, 0x00, 0x39, 0xff, 0x85, 0x00, 0x11, 0x00, 0x3a, 0xff, 0x85, - 0x00, 0x11, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x11, 0x00, 0x89, 0xff, 0x9a, - 0x00, 0x11, 0x00, 0x94, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x95, 0xff, 0x9a, - 0x00, 0x11, 0x00, 0x96, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x97, 0xff, 0x9a, - 0x00, 0x11, 0x00, 0x98, 0xff, 0x9a, 0x00, 0x11, 0x00, 0x9a, 0xff, 0x9a, - 0x00, 0x11, 0x00, 0x9b, 0xff, 0xd7, 0x00, 0x11, 0x00, 0x9c, 0xff, 0xd7, - 0x00, 0x11, 0x00, 0x9d, 0xff, 0xd7, 0x00, 0x11, 0x00, 0x9e, 0xff, 0xd7, - 0x00, 0x11, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x24, 0x00, 0x05, 0xff, 0x71, - 0x00, 0x24, 0x00, 0x0a, 0xff, 0x71, 0x00, 0x24, 0x00, 0x26, 0xff, 0xd7, - 0x00, 0x24, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x2d, 0x01, 0x0a, - 0x00, 0x24, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x24, 0x00, 0x37, 0xff, 0x71, 0x00, 0x24, 0x00, 0x39, 0xff, 0xae, - 0x00, 0x24, 0x00, 0x3a, 0xff, 0xae, 0x00, 0x24, 0x00, 0x3c, 0xff, 0x85, - 0x00, 0x24, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x24, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x24, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x24, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x24, 0x00, 0x9f, 0xff, 0x85, - 0x00, 0x25, 0x00, 0x0f, 0xff, 0xae, 0x00, 0x25, 0x00, 0x11, 0xff, 0xae, - 0x00, 0x25, 0x00, 0x24, 0xff, 0xd7, 0x00, 0x25, 0x00, 0x37, 0xff, 0xc3, - 0x00, 0x25, 0x00, 0x39, 0xff, 0xec, 0x00, 0x25, 0x00, 0x3a, 0xff, 0xec, - 0x00, 0x25, 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x25, 0x00, 0x3c, 0xff, 0xec, - 0x00, 0x25, 0x00, 0x3d, 0xff, 0xec, 0x00, 0x25, 0x00, 0x82, 0xff, 0xd7, - 0x00, 0x25, 0x00, 0x83, 0xff, 0xd7, 0x00, 0x25, 0x00, 0x84, 0xff, 0xd7, - 0x00, 0x25, 0x00, 0x85, 0xff, 0xd7, 0x00, 0x25, 0x00, 0x86, 0xff, 0xd7, - 0x00, 0x25, 0x00, 0x87, 0xff, 0xd7, 0x00, 0x25, 0x00, 0x9f, 0xff, 0xec, - 0x00, 0x26, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x2a, 0xff, 0xd7, - 0x00, 0x26, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x26, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x26, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x26, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x26, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x26, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x27, 0x00, 0x11, 0xff, 0xae, 0x00, 0x27, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x27, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x27, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x27, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x27, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x27, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x27, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x27, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x27, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x27, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x27, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x27, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x28, 0x00, 0x2d, 0x00, 0x7b, - 0x00, 0x29, 0x00, 0x0f, 0xff, 0x85, 0x00, 0x29, 0x00, 0x11, 0xff, 0x85, - 0x00, 0x29, 0x00, 0x22, 0x00, 0x29, 0x00, 0x29, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x29, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x29, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x29, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x29, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x29, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x29, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x2e, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x2a, 0xff, 0xd7, - 0x00, 0x2e, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x2e, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x2e, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x2e, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x2e, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x2e, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x05, 0xff, 0x5c, - 0x00, 0x2f, 0x00, 0x0a, 0xff, 0x5c, 0x00, 0x2f, 0x00, 0x26, 0xff, 0xd7, - 0x00, 0x2f, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x32, 0xff, 0xd7, - 0x00, 0x2f, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x37, 0xff, 0xd7, - 0x00, 0x2f, 0x00, 0x38, 0xff, 0xec, 0x00, 0x2f, 0x00, 0x39, 0xff, 0xd7, - 0x00, 0x2f, 0x00, 0x3a, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x3c, 0xff, 0xc3, - 0x00, 0x2f, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x2f, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x2f, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x2f, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x2f, 0x00, 0x9b, 0xff, 0xec, - 0x00, 0x2f, 0x00, 0x9c, 0xff, 0xec, 0x00, 0x2f, 0x00, 0x9d, 0xff, 0xec, - 0x00, 0x2f, 0x00, 0x9e, 0xff, 0xec, 0x00, 0x2f, 0x00, 0x9f, 0xff, 0xc3, - 0x00, 0x32, 0x00, 0x0f, 0xff, 0xae, 0x00, 0x32, 0x00, 0x11, 0xff, 0xae, - 0x00, 0x32, 0x00, 0x24, 0xff, 0xd7, 0x00, 0x32, 0x00, 0x37, 0xff, 0xc3, - 0x00, 0x32, 0x00, 0x39, 0xff, 0xec, 0x00, 0x32, 0x00, 0x3a, 0xff, 0xec, - 0x00, 0x32, 0x00, 0x3b, 0xff, 0xd7, 0x00, 0x32, 0x00, 0x3c, 0xff, 0xec, - 0x00, 0x32, 0x00, 0x3d, 0xff, 0xec, 0x00, 0x32, 0x00, 0x82, 0xff, 0xd7, - 0x00, 0x32, 0x00, 0x83, 0xff, 0xd7, 0x00, 0x32, 0x00, 0x84, 0xff, 0xd7, - 0x00, 0x32, 0x00, 0x85, 0xff, 0xd7, 0x00, 0x32, 0x00, 0x86, 0xff, 0xd7, - 0x00, 0x32, 0x00, 0x87, 0xff, 0xd7, 0x00, 0x32, 0x00, 0x9f, 0xff, 0xec, - 0x00, 0x33, 0x00, 0x0f, 0xfe, 0xf6, 0x00, 0x33, 0x00, 0x11, 0xfe, 0xf6, - 0x00, 0x33, 0x00, 0x24, 0xff, 0x9a, 0x00, 0x33, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x33, 0x00, 0x3d, 0xff, 0xec, 0x00, 0x33, 0x00, 0x82, 0xff, 0x9a, - 0x00, 0x33, 0x00, 0x83, 0xff, 0x9a, 0x00, 0x33, 0x00, 0x84, 0xff, 0x9a, - 0x00, 0x33, 0x00, 0x85, 0xff, 0x9a, 0x00, 0x33, 0x00, 0x86, 0xff, 0x9a, - 0x00, 0x33, 0x00, 0x87, 0xff, 0x9a, 0x00, 0x34, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x34, 0x00, 0x11, 0xff, 0xae, 0x00, 0x34, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x34, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x34, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x34, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x34, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x34, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x34, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x34, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x34, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x34, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x34, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x34, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x34, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x34, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x37, 0x00, 0x0f, 0xff, 0x85, - 0x00, 0x37, 0x00, 0x10, 0xff, 0xae, 0x00, 0x37, 0x00, 0x11, 0xff, 0x85, - 0x00, 0x37, 0x00, 0x22, 0x00, 0x29, 0x00, 0x37, 0x00, 0x24, 0xff, 0x71, - 0x00, 0x37, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x2a, 0xff, 0xd7, - 0x00, 0x37, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x37, 0x00, 0x44, 0xff, 0x5c, - 0x00, 0x37, 0x00, 0x46, 0xff, 0x71, 0x00, 0x37, 0x00, 0x47, 0xff, 0x71, - 0x00, 0x37, 0x00, 0x48, 0xff, 0x71, 0x00, 0x37, 0x00, 0x4a, 0xff, 0x71, - 0x00, 0x37, 0x00, 0x50, 0xff, 0x9a, 0x00, 0x37, 0x00, 0x51, 0xff, 0x9a, - 0x00, 0x37, 0x00, 0x52, 0xff, 0x71, 0x00, 0x37, 0x00, 0x53, 0xff, 0x9a, - 0x00, 0x37, 0x00, 0x54, 0xff, 0x71, 0x00, 0x37, 0x00, 0x55, 0xff, 0x9a, - 0x00, 0x37, 0x00, 0x56, 0xff, 0x85, 0x00, 0x37, 0x00, 0x58, 0xff, 0x9a, - 0x00, 0x37, 0x00, 0x59, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x5a, 0xff, 0xd7, - 0x00, 0x37, 0x00, 0x5b, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x5c, 0xff, 0xd7, - 0x00, 0x37, 0x00, 0x5d, 0xff, 0xae, 0x00, 0x37, 0x00, 0x82, 0xff, 0x71, - 0x00, 0x37, 0x00, 0x83, 0xff, 0x71, 0x00, 0x37, 0x00, 0x84, 0xff, 0x71, - 0x00, 0x37, 0x00, 0x85, 0xff, 0x71, 0x00, 0x37, 0x00, 0x86, 0xff, 0x71, - 0x00, 0x37, 0x00, 0x87, 0xff, 0x71, 0x00, 0x37, 0x00, 0x89, 0xff, 0xd7, - 0x00, 0x37, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x95, 0xff, 0xd7, - 0x00, 0x37, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x97, 0xff, 0xd7, - 0x00, 0x37, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x37, 0x00, 0x9a, 0xff, 0xd7, - 0x00, 0x37, 0x00, 0xa2, 0xff, 0x71, 0x00, 0x37, 0x00, 0xa3, 0xff, 0x5c, - 0x00, 0x37, 0x00, 0xa4, 0xff, 0x5c, 0x00, 0x37, 0x00, 0xa5, 0xff, 0x5c, - 0x00, 0x37, 0x00, 0xa6, 0xff, 0x5c, 0x00, 0x37, 0x00, 0xa7, 0xff, 0x5c, - 0x00, 0x37, 0x00, 0xa8, 0xff, 0x5c, 0x00, 0x37, 0x00, 0xa9, 0xff, 0x71, - 0x00, 0x37, 0x00, 0xaa, 0xff, 0x71, 0x00, 0x37, 0x00, 0xab, 0xff, 0x71, - 0x00, 0x37, 0x00, 0xac, 0xff, 0x71, 0x00, 0x37, 0x00, 0xad, 0xff, 0x71, - 0x00, 0x37, 0x00, 0xb4, 0xff, 0x71, 0x00, 0x37, 0x00, 0xb5, 0xff, 0x71, - 0x00, 0x37, 0x00, 0xb6, 0xff, 0x71, 0x00, 0x37, 0x00, 0xb7, 0xff, 0x71, - 0x00, 0x37, 0x00, 0xb8, 0xff, 0x71, 0x00, 0x37, 0x00, 0xba, 0xff, 0x71, - 0x00, 0x37, 0x00, 0xbb, 0xff, 0x9a, 0x00, 0x37, 0x00, 0xbc, 0xff, 0x9a, - 0x00, 0x37, 0x00, 0xbd, 0xff, 0x9a, 0x00, 0x37, 0x00, 0xbe, 0xff, 0x9a, - 0x00, 0x37, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0x38, 0x00, 0x0f, 0xff, 0xd7, - 0x00, 0x38, 0x00, 0x11, 0xff, 0xd7, 0x00, 0x38, 0x00, 0x24, 0xff, 0xec, - 0x00, 0x38, 0x00, 0x82, 0xff, 0xec, 0x00, 0x38, 0x00, 0x83, 0xff, 0xec, - 0x00, 0x38, 0x00, 0x84, 0xff, 0xec, 0x00, 0x38, 0x00, 0x85, 0xff, 0xec, - 0x00, 0x38, 0x00, 0x86, 0xff, 0xec, 0x00, 0x38, 0x00, 0x87, 0xff, 0xec, - 0x00, 0x39, 0x00, 0x0f, 0xff, 0x9a, 0x00, 0x39, 0x00, 0x11, 0xff, 0x9a, - 0x00, 0x39, 0x00, 0x22, 0x00, 0x29, 0x00, 0x39, 0x00, 0x24, 0xff, 0xae, - 0x00, 0x39, 0x00, 0x26, 0xff, 0xec, 0x00, 0x39, 0x00, 0x2a, 0xff, 0xec, - 0x00, 0x39, 0x00, 0x32, 0xff, 0xec, 0x00, 0x39, 0x00, 0x34, 0xff, 0xec, - 0x00, 0x39, 0x00, 0x44, 0xff, 0xd7, 0x00, 0x39, 0x00, 0x46, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0x47, 0xff, 0xd7, 0x00, 0x39, 0x00, 0x48, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0x4a, 0xff, 0xec, 0x00, 0x39, 0x00, 0x50, 0xff, 0xec, - 0x00, 0x39, 0x00, 0x51, 0xff, 0xec, 0x00, 0x39, 0x00, 0x52, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0x53, 0xff, 0xec, 0x00, 0x39, 0x00, 0x54, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0x55, 0xff, 0xec, 0x00, 0x39, 0x00, 0x56, 0xff, 0xec, - 0x00, 0x39, 0x00, 0x58, 0xff, 0xec, 0x00, 0x39, 0x00, 0x82, 0xff, 0xae, - 0x00, 0x39, 0x00, 0x83, 0xff, 0xae, 0x00, 0x39, 0x00, 0x84, 0xff, 0xae, - 0x00, 0x39, 0x00, 0x85, 0xff, 0xae, 0x00, 0x39, 0x00, 0x86, 0xff, 0xae, - 0x00, 0x39, 0x00, 0x87, 0xff, 0xae, 0x00, 0x39, 0x00, 0x89, 0xff, 0xec, - 0x00, 0x39, 0x00, 0x94, 0xff, 0xec, 0x00, 0x39, 0x00, 0x95, 0xff, 0xec, - 0x00, 0x39, 0x00, 0x96, 0xff, 0xec, 0x00, 0x39, 0x00, 0x97, 0xff, 0xec, - 0x00, 0x39, 0x00, 0x98, 0xff, 0xec, 0x00, 0x39, 0x00, 0x9a, 0xff, 0xec, - 0x00, 0x39, 0x00, 0xa2, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xa3, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xa4, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xa5, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xa6, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xa7, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xa8, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xa9, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xaa, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xab, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xac, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xad, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xb4, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xb5, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xb6, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xb7, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xb8, 0xff, 0xd7, 0x00, 0x39, 0x00, 0xba, 0xff, 0xd7, - 0x00, 0x39, 0x00, 0xbb, 0xff, 0xec, 0x00, 0x39, 0x00, 0xbc, 0xff, 0xec, - 0x00, 0x39, 0x00, 0xbd, 0xff, 0xec, 0x00, 0x39, 0x00, 0xbe, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0x0f, 0xff, 0x9a, 0x00, 0x3a, 0x00, 0x11, 0xff, 0x9a, - 0x00, 0x3a, 0x00, 0x22, 0x00, 0x29, 0x00, 0x3a, 0x00, 0x24, 0xff, 0xae, - 0x00, 0x3a, 0x00, 0x26, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x2a, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0x32, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x34, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0x44, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0x46, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0x47, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0x48, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0x4a, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x50, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0x51, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x52, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0x53, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x54, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0x55, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x56, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0x58, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x82, 0xff, 0xae, - 0x00, 0x3a, 0x00, 0x83, 0xff, 0xae, 0x00, 0x3a, 0x00, 0x84, 0xff, 0xae, - 0x00, 0x3a, 0x00, 0x85, 0xff, 0xae, 0x00, 0x3a, 0x00, 0x86, 0xff, 0xae, - 0x00, 0x3a, 0x00, 0x87, 0xff, 0xae, 0x00, 0x3a, 0x00, 0x89, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0x94, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x95, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0x96, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x97, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0x98, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x9a, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0xa2, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xa3, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xa4, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xa5, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xa6, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xa7, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xa8, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xa9, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xaa, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xab, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xac, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xad, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xb4, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xb5, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xb6, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xb7, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xb8, 0xff, 0xd7, 0x00, 0x3a, 0x00, 0xba, 0xff, 0xd7, - 0x00, 0x3a, 0x00, 0xbb, 0xff, 0xec, 0x00, 0x3a, 0x00, 0xbc, 0xff, 0xec, - 0x00, 0x3a, 0x00, 0xbd, 0xff, 0xec, 0x00, 0x3a, 0x00, 0xbe, 0xff, 0xec, - 0x00, 0x3b, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x2a, 0xff, 0xd7, - 0x00, 0x3b, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x3b, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x3b, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x3b, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x3b, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x3b, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x0f, 0xff, 0x85, - 0x00, 0x3c, 0x00, 0x11, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x22, 0x00, 0x29, - 0x00, 0x3c, 0x00, 0x24, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x26, 0xff, 0xd7, - 0x00, 0x3c, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x32, 0xff, 0xd7, - 0x00, 0x3c, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x44, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0x46, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0x47, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0x48, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0x4a, 0xff, 0xd7, - 0x00, 0x3c, 0x00, 0x50, 0xff, 0xc3, 0x00, 0x3c, 0x00, 0x51, 0xff, 0xc3, - 0x00, 0x3c, 0x00, 0x52, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0x53, 0xff, 0xc3, - 0x00, 0x3c, 0x00, 0x54, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0x55, 0xff, 0xc3, - 0x00, 0x3c, 0x00, 0x56, 0xff, 0xae, 0x00, 0x3c, 0x00, 0x58, 0xff, 0xc3, - 0x00, 0x3c, 0x00, 0x5d, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x82, 0xff, 0x85, - 0x00, 0x3c, 0x00, 0x83, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x84, 0xff, 0x85, - 0x00, 0x3c, 0x00, 0x85, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x86, 0xff, 0x85, - 0x00, 0x3c, 0x00, 0x87, 0xff, 0x85, 0x00, 0x3c, 0x00, 0x89, 0xff, 0xd7, - 0x00, 0x3c, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x95, 0xff, 0xd7, - 0x00, 0x3c, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x97, 0xff, 0xd7, - 0x00, 0x3c, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x3c, 0x00, 0x9a, 0xff, 0xd7, - 0x00, 0x3c, 0x00, 0xa2, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xa3, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xa4, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xa5, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xa6, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xa7, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xa8, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xa9, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xaa, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xab, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xac, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xad, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xb4, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xb5, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xb6, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xb7, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xb8, 0xff, 0x9a, 0x00, 0x3c, 0x00, 0xba, 0xff, 0x9a, - 0x00, 0x3c, 0x00, 0xbb, 0xff, 0xc3, 0x00, 0x3c, 0x00, 0xbc, 0xff, 0xc3, - 0x00, 0x3c, 0x00, 0xbd, 0xff, 0xc3, 0x00, 0x3c, 0x00, 0xbe, 0xff, 0xc3, - 0x00, 0x3d, 0x00, 0x26, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x2a, 0xff, 0xec, - 0x00, 0x3d, 0x00, 0x32, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x34, 0xff, 0xec, - 0x00, 0x3d, 0x00, 0x89, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x94, 0xff, 0xec, - 0x00, 0x3d, 0x00, 0x95, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x96, 0xff, 0xec, - 0x00, 0x3d, 0x00, 0x97, 0xff, 0xec, 0x00, 0x3d, 0x00, 0x98, 0xff, 0xec, - 0x00, 0x3d, 0x00, 0x9a, 0xff, 0xec, 0x00, 0x3e, 0x00, 0x2d, 0x00, 0xb8, - 0x00, 0x44, 0x00, 0x05, 0xff, 0xec, 0x00, 0x44, 0x00, 0x0a, 0xff, 0xec, - 0x00, 0x45, 0x00, 0x05, 0xff, 0xec, 0x00, 0x45, 0x00, 0x0a, 0xff, 0xec, - 0x00, 0x45, 0x00, 0x59, 0xff, 0xd7, 0x00, 0x45, 0x00, 0x5a, 0xff, 0xd7, - 0x00, 0x45, 0x00, 0x5b, 0xff, 0xd7, 0x00, 0x45, 0x00, 0x5c, 0xff, 0xd7, - 0x00, 0x45, 0x00, 0x5d, 0xff, 0xec, 0x00, 0x45, 0x00, 0xbf, 0xff, 0xd7, - 0x00, 0x46, 0x00, 0x05, 0x00, 0x29, 0x00, 0x46, 0x00, 0x0a, 0x00, 0x29, - 0x00, 0x48, 0x00, 0x05, 0xff, 0xec, 0x00, 0x48, 0x00, 0x0a, 0xff, 0xec, - 0x00, 0x48, 0x00, 0x59, 0xff, 0xd7, 0x00, 0x48, 0x00, 0x5a, 0xff, 0xd7, - 0x00, 0x48, 0x00, 0x5b, 0xff, 0xd7, 0x00, 0x48, 0x00, 0x5c, 0xff, 0xd7, - 0x00, 0x48, 0x00, 0x5d, 0xff, 0xec, 0x00, 0x48, 0x00, 0xbf, 0xff, 0xd7, - 0x00, 0x49, 0x00, 0x05, 0x00, 0x7b, 0x00, 0x49, 0x00, 0x0a, 0x00, 0x7b, - 0x00, 0x4b, 0x00, 0x05, 0xff, 0xec, 0x00, 0x4b, 0x00, 0x0a, 0xff, 0xec, - 0x00, 0x4e, 0x00, 0x46, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0x47, 0xff, 0xd7, - 0x00, 0x4e, 0x00, 0x48, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0x52, 0xff, 0xd7, - 0x00, 0x4e, 0x00, 0x54, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xa2, 0xff, 0xd7, - 0x00, 0x4e, 0x00, 0xa9, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xaa, 0xff, 0xd7, - 0x00, 0x4e, 0x00, 0xab, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xac, 0xff, 0xd7, - 0x00, 0x4e, 0x00, 0xad, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xb4, 0xff, 0xd7, - 0x00, 0x4e, 0x00, 0xb5, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xb6, 0xff, 0xd7, - 0x00, 0x4e, 0x00, 0xb7, 0xff, 0xd7, 0x00, 0x4e, 0x00, 0xb8, 0xff, 0xd7, - 0x00, 0x4e, 0x00, 0xba, 0xff, 0xd7, 0x00, 0x50, 0x00, 0x05, 0xff, 0xec, - 0x00, 0x50, 0x00, 0x0a, 0xff, 0xec, 0x00, 0x51, 0x00, 0x05, 0xff, 0xec, - 0x00, 0x51, 0x00, 0x0a, 0xff, 0xec, 0x00, 0x52, 0x00, 0x05, 0xff, 0xec, - 0x00, 0x52, 0x00, 0x0a, 0xff, 0xec, 0x00, 0x52, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0x52, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0x52, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0x52, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0x52, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0x52, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0x53, 0x00, 0x05, 0xff, 0xec, - 0x00, 0x53, 0x00, 0x0a, 0xff, 0xec, 0x00, 0x53, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0x53, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0x53, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0x53, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0x53, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0x53, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0x55, 0x00, 0x05, 0x00, 0x52, - 0x00, 0x55, 0x00, 0x0a, 0x00, 0x52, 0x00, 0x55, 0x00, 0x44, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0x46, 0xff, 0xd7, 0x00, 0x55, 0x00, 0x47, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0x48, 0xff, 0xd7, 0x00, 0x55, 0x00, 0x4a, 0xff, 0xec, - 0x00, 0x55, 0x00, 0x52, 0xff, 0xd7, 0x00, 0x55, 0x00, 0x54, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xa2, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xa3, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xa4, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xa5, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xa6, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xa7, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xa8, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xa9, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xaa, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xab, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xac, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xad, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xb4, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xb5, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xb6, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xb7, 0xff, 0xd7, - 0x00, 0x55, 0x00, 0xb8, 0xff, 0xd7, 0x00, 0x55, 0x00, 0xba, 0xff, 0xd7, - 0x00, 0x57, 0x00, 0x05, 0x00, 0x29, 0x00, 0x57, 0x00, 0x0a, 0x00, 0x29, - 0x00, 0x59, 0x00, 0x05, 0x00, 0x52, 0x00, 0x59, 0x00, 0x0a, 0x00, 0x52, - 0x00, 0x59, 0x00, 0x0f, 0xff, 0xae, 0x00, 0x59, 0x00, 0x11, 0xff, 0xae, - 0x00, 0x59, 0x00, 0x22, 0x00, 0x29, 0x00, 0x5a, 0x00, 0x05, 0x00, 0x52, - 0x00, 0x5a, 0x00, 0x0a, 0x00, 0x52, 0x00, 0x5a, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x5a, 0x00, 0x11, 0xff, 0xae, 0x00, 0x5a, 0x00, 0x22, 0x00, 0x29, - 0x00, 0x5b, 0x00, 0x46, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0x47, 0xff, 0xd7, - 0x00, 0x5b, 0x00, 0x48, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0x52, 0xff, 0xd7, - 0x00, 0x5b, 0x00, 0x54, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xa2, 0xff, 0xd7, - 0x00, 0x5b, 0x00, 0xa9, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xaa, 0xff, 0xd7, - 0x00, 0x5b, 0x00, 0xab, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xac, 0xff, 0xd7, - 0x00, 0x5b, 0x00, 0xad, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xb4, 0xff, 0xd7, - 0x00, 0x5b, 0x00, 0xb5, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xb6, 0xff, 0xd7, - 0x00, 0x5b, 0x00, 0xb7, 0xff, 0xd7, 0x00, 0x5b, 0x00, 0xb8, 0xff, 0xd7, - 0x00, 0x5b, 0x00, 0xba, 0xff, 0xd7, 0x00, 0x5c, 0x00, 0x05, 0x00, 0x52, - 0x00, 0x5c, 0x00, 0x0a, 0x00, 0x52, 0x00, 0x5c, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x5c, 0x00, 0x11, 0xff, 0xae, 0x00, 0x5c, 0x00, 0x22, 0x00, 0x29, - 0x00, 0x5e, 0x00, 0x2d, 0x00, 0xb8, 0x00, 0x82, 0x00, 0x05, 0xff, 0x71, - 0x00, 0x82, 0x00, 0x0a, 0xff, 0x71, 0x00, 0x82, 0x00, 0x26, 0xff, 0xd7, - 0x00, 0x82, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x2d, 0x01, 0x0a, - 0x00, 0x82, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x82, 0x00, 0x37, 0xff, 0x71, 0x00, 0x82, 0x00, 0x39, 0xff, 0xae, - 0x00, 0x82, 0x00, 0x3a, 0xff, 0xae, 0x00, 0x82, 0x00, 0x3c, 0xff, 0x85, - 0x00, 0x82, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x82, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x82, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x82, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x82, 0x00, 0x9f, 0xff, 0x85, - 0x00, 0x83, 0x00, 0x05, 0xff, 0x71, 0x00, 0x83, 0x00, 0x0a, 0xff, 0x71, - 0x00, 0x83, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x2a, 0xff, 0xd7, - 0x00, 0x83, 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x83, 0x00, 0x32, 0xff, 0xd7, - 0x00, 0x83, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x37, 0xff, 0x71, - 0x00, 0x83, 0x00, 0x39, 0xff, 0xae, 0x00, 0x83, 0x00, 0x3a, 0xff, 0xae, - 0x00, 0x83, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x83, 0x00, 0x89, 0xff, 0xd7, - 0x00, 0x83, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x95, 0xff, 0xd7, - 0x00, 0x83, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x97, 0xff, 0xd7, - 0x00, 0x83, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x83, 0x00, 0x9a, 0xff, 0xd7, - 0x00, 0x83, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x84, 0x00, 0x05, 0xff, 0x71, - 0x00, 0x84, 0x00, 0x0a, 0xff, 0x71, 0x00, 0x84, 0x00, 0x26, 0xff, 0xd7, - 0x00, 0x84, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x2d, 0x01, 0x0a, - 0x00, 0x84, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x84, 0x00, 0x37, 0xff, 0x71, 0x00, 0x84, 0x00, 0x39, 0xff, 0xae, - 0x00, 0x84, 0x00, 0x3a, 0xff, 0xae, 0x00, 0x84, 0x00, 0x3c, 0xff, 0x85, - 0x00, 0x84, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x84, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x84, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x84, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x84, 0x00, 0x9f, 0xff, 0x85, - 0x00, 0x85, 0x00, 0x05, 0xff, 0x71, 0x00, 0x85, 0x00, 0x0a, 0xff, 0x71, - 0x00, 0x85, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x2a, 0xff, 0xd7, - 0x00, 0x85, 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x85, 0x00, 0x32, 0xff, 0xd7, - 0x00, 0x85, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x37, 0xff, 0x71, - 0x00, 0x85, 0x00, 0x39, 0xff, 0xae, 0x00, 0x85, 0x00, 0x3a, 0xff, 0xae, - 0x00, 0x85, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x85, 0x00, 0x89, 0xff, 0xd7, - 0x00, 0x85, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x95, 0xff, 0xd7, - 0x00, 0x85, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x97, 0xff, 0xd7, - 0x00, 0x85, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x85, 0x00, 0x9a, 0xff, 0xd7, - 0x00, 0x85, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x86, 0x00, 0x05, 0xff, 0x71, - 0x00, 0x86, 0x00, 0x0a, 0xff, 0x71, 0x00, 0x86, 0x00, 0x26, 0xff, 0xd7, - 0x00, 0x86, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x2d, 0x01, 0x0a, - 0x00, 0x86, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x86, 0x00, 0x37, 0xff, 0x71, 0x00, 0x86, 0x00, 0x39, 0xff, 0xae, - 0x00, 0x86, 0x00, 0x3a, 0xff, 0xae, 0x00, 0x86, 0x00, 0x3c, 0xff, 0x85, - 0x00, 0x86, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x86, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x86, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x86, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x86, 0x00, 0x9f, 0xff, 0x85, - 0x00, 0x87, 0x00, 0x05, 0xff, 0x71, 0x00, 0x87, 0x00, 0x0a, 0xff, 0x71, - 0x00, 0x87, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x2a, 0xff, 0xd7, - 0x00, 0x87, 0x00, 0x2d, 0x01, 0x0a, 0x00, 0x87, 0x00, 0x32, 0xff, 0xd7, - 0x00, 0x87, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x37, 0xff, 0x71, - 0x00, 0x87, 0x00, 0x39, 0xff, 0xae, 0x00, 0x87, 0x00, 0x3a, 0xff, 0xae, - 0x00, 0x87, 0x00, 0x3c, 0xff, 0x85, 0x00, 0x87, 0x00, 0x89, 0xff, 0xd7, - 0x00, 0x87, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x95, 0xff, 0xd7, - 0x00, 0x87, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x97, 0xff, 0xd7, - 0x00, 0x87, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x87, 0x00, 0x9a, 0xff, 0xd7, - 0x00, 0x87, 0x00, 0x9f, 0xff, 0x85, 0x00, 0x88, 0x00, 0x2d, 0x00, 0x7b, - 0x00, 0x89, 0x00, 0x26, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x2a, 0xff, 0xd7, - 0x00, 0x89, 0x00, 0x32, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x34, 0xff, 0xd7, - 0x00, 0x89, 0x00, 0x89, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x94, 0xff, 0xd7, - 0x00, 0x89, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x96, 0xff, 0xd7, - 0x00, 0x89, 0x00, 0x97, 0xff, 0xd7, 0x00, 0x89, 0x00, 0x98, 0xff, 0xd7, - 0x00, 0x89, 0x00, 0x9a, 0xff, 0xd7, 0x00, 0x8a, 0x00, 0x2d, 0x00, 0x7b, - 0x00, 0x8b, 0x00, 0x2d, 0x00, 0x7b, 0x00, 0x8c, 0x00, 0x2d, 0x00, 0x7b, - 0x00, 0x8d, 0x00, 0x2d, 0x00, 0x7b, 0x00, 0x92, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x92, 0x00, 0x11, 0xff, 0xae, 0x00, 0x92, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x92, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x92, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x92, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x92, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x92, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x92, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x92, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x92, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x92, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x92, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x92, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x92, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x92, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x94, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x94, 0x00, 0x11, 0xff, 0xae, 0x00, 0x94, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x94, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x94, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x94, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x94, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x94, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x94, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x94, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x94, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x94, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x94, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x94, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x94, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x94, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x95, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x95, 0x00, 0x11, 0xff, 0xae, 0x00, 0x95, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x95, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x95, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x95, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x95, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x95, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x95, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x95, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x95, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x95, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x95, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x95, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x95, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x95, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x96, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x96, 0x00, 0x11, 0xff, 0xae, 0x00, 0x96, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x96, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x96, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x96, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x96, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x96, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x96, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x96, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x96, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x96, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x96, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x96, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x96, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x96, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x97, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x97, 0x00, 0x11, 0xff, 0xae, 0x00, 0x97, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x97, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x97, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x97, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x97, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x97, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x97, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x97, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x97, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x97, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x97, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x97, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x97, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x97, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x98, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x98, 0x00, 0x11, 0xff, 0xae, 0x00, 0x98, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x98, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x98, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x98, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x98, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x98, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x98, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x98, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x98, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x98, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x98, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x98, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x98, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x98, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x9a, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0x9a, 0x00, 0x11, 0xff, 0xae, 0x00, 0x9a, 0x00, 0x24, 0xff, 0xd7, - 0x00, 0x9a, 0x00, 0x37, 0xff, 0xc3, 0x00, 0x9a, 0x00, 0x39, 0xff, 0xec, - 0x00, 0x9a, 0x00, 0x3a, 0xff, 0xec, 0x00, 0x9a, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0x9a, 0x00, 0x3c, 0xff, 0xec, 0x00, 0x9a, 0x00, 0x3d, 0xff, 0xec, - 0x00, 0x9a, 0x00, 0x82, 0xff, 0xd7, 0x00, 0x9a, 0x00, 0x83, 0xff, 0xd7, - 0x00, 0x9a, 0x00, 0x84, 0xff, 0xd7, 0x00, 0x9a, 0x00, 0x85, 0xff, 0xd7, - 0x00, 0x9a, 0x00, 0x86, 0xff, 0xd7, 0x00, 0x9a, 0x00, 0x87, 0xff, 0xd7, - 0x00, 0x9a, 0x00, 0x9f, 0xff, 0xec, 0x00, 0x9b, 0x00, 0x0f, 0xff, 0xd7, - 0x00, 0x9b, 0x00, 0x11, 0xff, 0xd7, 0x00, 0x9b, 0x00, 0x24, 0xff, 0xec, - 0x00, 0x9b, 0x00, 0x82, 0xff, 0xec, 0x00, 0x9b, 0x00, 0x83, 0xff, 0xec, - 0x00, 0x9b, 0x00, 0x84, 0xff, 0xec, 0x00, 0x9b, 0x00, 0x85, 0xff, 0xec, - 0x00, 0x9b, 0x00, 0x86, 0xff, 0xec, 0x00, 0x9b, 0x00, 0x87, 0xff, 0xec, - 0x00, 0x9c, 0x00, 0x0f, 0xff, 0xd7, 0x00, 0x9c, 0x00, 0x11, 0xff, 0xd7, - 0x00, 0x9c, 0x00, 0x24, 0xff, 0xec, 0x00, 0x9c, 0x00, 0x82, 0xff, 0xec, - 0x00, 0x9c, 0x00, 0x83, 0xff, 0xec, 0x00, 0x9c, 0x00, 0x84, 0xff, 0xec, - 0x00, 0x9c, 0x00, 0x85, 0xff, 0xec, 0x00, 0x9c, 0x00, 0x86, 0xff, 0xec, - 0x00, 0x9c, 0x00, 0x87, 0xff, 0xec, 0x00, 0x9d, 0x00, 0x0f, 0xff, 0xd7, - 0x00, 0x9d, 0x00, 0x11, 0xff, 0xd7, 0x00, 0x9d, 0x00, 0x24, 0xff, 0xec, - 0x00, 0x9d, 0x00, 0x82, 0xff, 0xec, 0x00, 0x9d, 0x00, 0x83, 0xff, 0xec, - 0x00, 0x9d, 0x00, 0x84, 0xff, 0xec, 0x00, 0x9d, 0x00, 0x85, 0xff, 0xec, - 0x00, 0x9d, 0x00, 0x86, 0xff, 0xec, 0x00, 0x9d, 0x00, 0x87, 0xff, 0xec, - 0x00, 0x9e, 0x00, 0x0f, 0xff, 0xd7, 0x00, 0x9e, 0x00, 0x11, 0xff, 0xd7, - 0x00, 0x9e, 0x00, 0x24, 0xff, 0xec, 0x00, 0x9e, 0x00, 0x82, 0xff, 0xec, - 0x00, 0x9e, 0x00, 0x83, 0xff, 0xec, 0x00, 0x9e, 0x00, 0x84, 0xff, 0xec, - 0x00, 0x9e, 0x00, 0x85, 0xff, 0xec, 0x00, 0x9e, 0x00, 0x86, 0xff, 0xec, - 0x00, 0x9e, 0x00, 0x87, 0xff, 0xec, 0x00, 0x9f, 0x00, 0x0f, 0xff, 0x85, - 0x00, 0x9f, 0x00, 0x11, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x22, 0x00, 0x29, - 0x00, 0x9f, 0x00, 0x24, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x26, 0xff, 0xd7, - 0x00, 0x9f, 0x00, 0x2a, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x32, 0xff, 0xd7, - 0x00, 0x9f, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x44, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0x46, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0x47, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0x48, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0x4a, 0xff, 0xd7, - 0x00, 0x9f, 0x00, 0x50, 0xff, 0xc3, 0x00, 0x9f, 0x00, 0x51, 0xff, 0xc3, - 0x00, 0x9f, 0x00, 0x52, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0x53, 0xff, 0xc3, - 0x00, 0x9f, 0x00, 0x54, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0x55, 0xff, 0xc3, - 0x00, 0x9f, 0x00, 0x56, 0xff, 0xae, 0x00, 0x9f, 0x00, 0x58, 0xff, 0xc3, - 0x00, 0x9f, 0x00, 0x5d, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x82, 0xff, 0x85, - 0x00, 0x9f, 0x00, 0x83, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x84, 0xff, 0x85, - 0x00, 0x9f, 0x00, 0x85, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x86, 0xff, 0x85, - 0x00, 0x9f, 0x00, 0x87, 0xff, 0x85, 0x00, 0x9f, 0x00, 0x89, 0xff, 0xd7, - 0x00, 0x9f, 0x00, 0x94, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x95, 0xff, 0xd7, - 0x00, 0x9f, 0x00, 0x96, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x97, 0xff, 0xd7, - 0x00, 0x9f, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x9f, 0x00, 0x9a, 0xff, 0xd7, - 0x00, 0x9f, 0x00, 0xa2, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xa3, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xa4, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xa5, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xa6, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xa7, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xa8, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xa9, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xaa, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xab, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xac, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xad, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xb4, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xb5, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xb6, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xb7, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xb8, 0xff, 0x9a, 0x00, 0x9f, 0x00, 0xba, 0xff, 0x9a, - 0x00, 0x9f, 0x00, 0xbb, 0xff, 0xc3, 0x00, 0x9f, 0x00, 0xbc, 0xff, 0xc3, - 0x00, 0x9f, 0x00, 0xbd, 0xff, 0xc3, 0x00, 0x9f, 0x00, 0xbe, 0xff, 0xc3, - 0x00, 0xa0, 0x00, 0x0f, 0xfe, 0xf6, 0x00, 0xa0, 0x00, 0x11, 0xfe, 0xf6, - 0x00, 0xa0, 0x00, 0x24, 0xff, 0x9a, 0x00, 0xa0, 0x00, 0x3b, 0xff, 0xd7, - 0x00, 0xa0, 0x00, 0x3d, 0xff, 0xec, 0x00, 0xa0, 0x00, 0x82, 0xff, 0x9a, - 0x00, 0xa0, 0x00, 0x83, 0xff, 0x9a, 0x00, 0xa0, 0x00, 0x84, 0xff, 0x9a, - 0x00, 0xa0, 0x00, 0x85, 0xff, 0x9a, 0x00, 0xa0, 0x00, 0x86, 0xff, 0x9a, - 0x00, 0xa0, 0x00, 0x87, 0xff, 0x9a, 0x00, 0xa2, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xa2, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa3, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xa3, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa4, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xa4, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa5, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xa5, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa6, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xa6, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xa7, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xa7, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xaa, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xaa, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xaa, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xaa, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xaa, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xaa, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xaa, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xaa, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xab, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xab, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xab, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xab, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xab, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xab, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xab, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xab, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xac, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xac, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xac, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xac, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xac, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xac, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xac, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xac, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xad, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xad, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xad, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xad, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xad, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xad, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xad, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xad, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb2, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xb2, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xb2, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xb2, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xb2, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xb2, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xb2, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xb2, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb4, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xb4, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xb4, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xb4, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xb4, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xb4, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xb4, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xb4, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb5, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xb5, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xb5, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xb5, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xb5, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xb5, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xb5, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xb5, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb6, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xb6, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xb6, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xb6, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xb6, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xb6, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xb6, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xb6, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xb8, 0x00, 0x05, 0xff, 0xd7, - 0x00, 0xb8, 0x00, 0x0a, 0xff, 0xd7, 0x00, 0xba, 0x00, 0x05, 0xff, 0xec, - 0x00, 0xba, 0x00, 0x0a, 0xff, 0xec, 0x00, 0xba, 0x00, 0x59, 0xff, 0xd7, - 0x00, 0xba, 0x00, 0x5a, 0xff, 0xd7, 0x00, 0xba, 0x00, 0x5b, 0xff, 0xd7, - 0x00, 0xba, 0x00, 0x5c, 0xff, 0xd7, 0x00, 0xba, 0x00, 0x5d, 0xff, 0xec, - 0x00, 0xba, 0x00, 0xbf, 0xff, 0xd7, 0x00, 0xbf, 0x00, 0x05, 0x00, 0x52, - 0x00, 0xbf, 0x00, 0x0a, 0x00, 0x52, 0x00, 0xbf, 0x00, 0x0f, 0xff, 0xae, - 0x00, 0xbf, 0x00, 0x11, 0xff, 0xae, 0x00, 0xbf, 0x00, 0x22, 0x00, 0x29, - 0x00, 0xc0, 0x00, 0x05, 0xff, 0xec, 0x00, 0xc0, 0x00, 0x0a, 0xff, 0xec, - 0x00, 0xc0, 0x00, 0x59, 0xff, 0xd7, 0x00, 0xc0, 0x00, 0x5a, 0xff, 0xd7, - 0x00, 0xc0, 0x00, 0x5b, 0xff, 0xd7, 0x00, 0xc0, 0x00, 0x5c, 0xff, 0xd7, - 0x00, 0xc0, 0x00, 0x5d, 0xff, 0xec, 0x00, 0xc0, 0x00, 0xbf, 0xff, 0xd7, - 0x00, 0xc1, 0x00, 0x05, 0x00, 0x52, 0x00, 0xc1, 0x00, 0x0a, 0x00, 0x52, - 0x00, 0xc1, 0x00, 0x0f, 0xff, 0xae, 0x00, 0xc1, 0x00, 0x11, 0xff, 0xae, - 0x00, 0xc1, 0x00, 0x22, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, - 0x02, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, - 0x00, 0x74, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, - 0x00, 0xc2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, - 0x00, 0xdc, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1e, - 0x01, 0x22, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, - 0x01, 0x55, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, - 0x01, 0x79, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, - 0x01, 0x98, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x52, - 0x02, 0x47, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x14, - 0x02, 0xc4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x1c, - 0x03, 0x13, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x2e, - 0x03, 0x8e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x2e, - 0x04, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x2a, - 0x04, 0xa0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, - 0x04, 0xcb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0b, - 0x05, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x11, - 0x05, 0x7e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x12, - 0x05, 0xed, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x12, - 0x06, 0x54, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x18, - 0x04, 0xe4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x12, - 0x05, 0x5e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x00, 0x1f, - 0x05, 0x90, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x1f, - 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x04, 0x00, 0x23, - 0x06, 0x67, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x21, - 0x04, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x02, 0x00, 0x17, - 0x05, 0xb0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x03, 0x00, 0x10, - 0x06, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x04, 0x00, 0x0f, - 0x06, 0x8b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x15, - 0x05, 0x1f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, 0x11, - 0x05, 0xc8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01, 0x03, 0x00, 0x13, - 0x06, 0x31, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01, 0x04, 0x00, 0x0c, - 0x06, 0x9b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x1c, - 0x05, 0x35, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x0c, - 0x05, 0x71, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x12, - 0x05, 0xda, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x0e, - 0x06, 0x45, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x04, 0x00, 0x0d, - 0x06, 0xa8, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x00, 0x00, 0x72, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x01, 0x00, 0x12, - 0x00, 0xae, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x02, 0x00, 0x0e, - 0x00, 0xcc, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x3c, - 0x00, 0xe4, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x04, 0x00, 0x12, - 0x01, 0x41, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x18, - 0x01, 0x5f, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x06, 0x00, 0x10, - 0x01, 0x86, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x07, 0x00, 0xa4, - 0x01, 0xa1, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x08, 0x00, 0x28, - 0x02, 0x9a, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0b, 0x00, 0x38, - 0x02, 0xd9, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0c, 0x00, 0x5c, - 0x03, 0x30, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0d, 0x00, 0x5c, - 0x03, 0xbd, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0e, 0x00, 0x54, - 0x04, 0x4a, 0x00, 0x44, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, - 0x00, 0x69, 0x00, 0x7a, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x64, - 0x00, 0x61, 0x00, 0x74, 0x00, 0x61, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6f, - 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, - 0x00, 0x74, 0x00, 0x20, 0x00, 0xa9, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, - 0x00, 0x31, 0x00, 0x30, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, - 0x00, 0x31, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, - 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6f, - 0x00, 0x72, 0x00, 0x70, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, - 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x00, 0x44, 0x69, - 0x67, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0xa9, - 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x31, 0x2c, 0x20, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x00, 0x00, 0x4f, 0x00, 0x70, - 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, - 0x00, 0x73, 0x00, 0x00, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53, 0x61, 0x6e, - 0x73, 0x00, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, - 0x00, 0x61, 0x00, 0x72, 0x00, 0x00, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, - 0x72, 0x00, 0x00, 0x41, 0x00, 0x73, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, - 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x2d, 0x00, 0x20, - 0x00, 0x4f, 0x00, 0x70, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x53, - 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x20, 0x00, 0x42, 0x00, 0x75, - 0x00, 0x69, 0x00, 0x6c, 0x00, 0x64, 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, - 0x00, 0x30, 0x00, 0x00, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x2d, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53, 0x61, 0x6e, 0x73, - 0x20, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x31, 0x30, 0x30, 0x00, 0x00, - 0x4f, 0x00, 0x70, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x53, 0x00, - 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x00, 0x4f, 0x70, 0x65, 0x6e, 0x20, - 0x53, 0x61, 0x6e, 0x73, 0x00, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, - 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x31, 0x00, - 0x2e, 0x00, 0x31, 0x00, 0x30, 0x00, 0x00, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x31, 0x30, 0x00, 0x00, 0x4f, 0x00, 0x70, - 0x00, 0x65, 0x00, 0x6e, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, - 0x00, 0x00, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x61, 0x6e, 0x73, 0x00, 0x00, - 0x4f, 0x00, 0x70, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x53, 0x00, - 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x20, 0x00, 0x69, 0x00, 0x73, 0x00, - 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, - 0x64, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6b, 0x00, - 0x20, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x20, 0x00, 0x47, 0x00, 0x6f, 0x00, - 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x20, 0x00, 0x61, 0x00, - 0x6e, 0x00, 0x64, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x79, 0x00, - 0x20, 0x00, 0x62, 0x00, 0x65, 0x00, 0x20, 0x00, 0x72, 0x00, 0x65, 0x00, - 0x67, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, - 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, - 0x63, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, - 0x6e, 0x00, 0x20, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x72, 0x00, 0x69, 0x00, - 0x73, 0x00, 0x64, 0x00, 0x69, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, - 0x6f, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x2e, 0x00, 0x00, 0x4f, 0x70, 0x65, - 0x6e, 0x20, 0x53, 0x61, 0x6e, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, - 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x20, 0x6f, 0x66, - 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x65, 0x72, - 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6a, 0x75, 0x72, 0x69, 0x73, 0x64, 0x69, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x00, 0x00, 0x41, 0x00, 0x73, - 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, - 0x00, 0x20, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x70, 0x00, 0x6f, - 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, - 0x00, 0x00, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x43, - 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, - 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, - 0x2f, 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x61, 0x00, - 0x73, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x65, 0x00, - 0x72, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x70, 0x00, 0x2e, 0x00, - 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x2f, 0x00, 0x00, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x73, 0x63, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, - 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, - 0x00, 0x61, 0x00, 0x73, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, - 0x00, 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x70, - 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x2f, 0x00, 0x74, - 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x64, 0x00, 0x65, 0x00, 0x73, - 0x00, 0x69, 0x00, 0x67, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, - 0x00, 0x2e, 0x00, 0x68, 0x00, 0x74, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x00, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, - 0x73, 0x63, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x63, 0x6f, 0x72, 0x70, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x00, 0x00, - 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, - 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, - 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, - 0x20, 0x00, 0x41, 0x00, 0x70, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, - 0x65, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, - 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x56, 0x00, - 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, - 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x00, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e, 0x30, 0x00, 0x00, 0x68, 0x00, 0x74, - 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x77, - 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x61, 0x00, 0x70, 0x00, 0x61, - 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x6f, 0x00, 0x72, - 0x00, 0x67, 0x00, 0x2f, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, - 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2f, 0x00, 0x4c, - 0x00, 0x49, 0x00, 0x43, 0x00, 0x45, 0x00, 0x4e, 0x00, 0x53, 0x00, 0x45, - 0x00, 0x2d, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x00, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x70, 0x61, - 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, - 0x2d, 0x32, 0x2e, 0x30, 0x00, 0x41, 0x6c, 0x6c, 0x20, 0x54, 0x79, 0x70, - 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, 0x46, 0x6f, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x79, 0x70, 0x6f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x69, 0x71, 0x75, 0x65, 0x73, 0x00, 0x41, 0x6c, 0x6c, 0x65, 0x20, - 0x74, 0x79, 0x70, 0x6f, 0x67, 0x72, 0x61, 0x66, 0x69, 0x73, 0x63, 0x68, - 0x65, 0x6e, 0x20, 0x4d, 0x9a, 0x67, 0x6c, 0x69, 0x63, 0x68, 0x6b, 0x65, - 0x69, 0x74, 0x65, 0x6e, 0x00, 0x46, 0x75, 0x6e, 0x7a, 0x69, 0x6f, 0x6e, - 0x69, 0x20, 0x54, 0x69, 0x70, 0x6f, 0x67, 0x72, 0x61, 0x66, 0x69, 0x63, - 0x68, 0x65, 0x00, 0x41, 0x6c, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x6f, - 0x67, 0x72, 0x61, 0x66, 0x69, 0x73, 0x63, 0x68, 0x65, 0x20, 0x6b, 0x65, - 0x6e, 0x6d, 0x65, 0x72, 0x6b, 0x65, 0x6e, 0x00, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x43, 0x61, 0x73, 0x65, 0x00, 0x53, 0x74, 0x79, 0x6c, - 0x65, 0x20, 0x64, 0x65, 0x73, 0x20, 0x43, 0x68, 0x69, 0x66, 0x66, 0x72, - 0x65, 0x73, 0x00, 0x4e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x68, 0x6f, 0x6f, - 0x67, 0x74, 0x65, 0x00, 0x41, 0x6c, 0x6c, 0x20, 0x54, 0x79, 0x70, 0x65, - 0x20, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, 0x54, 0x6f, - 0x75, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x74, 0x79, 0x70, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x71, 0x75, 0x65, 0x73, 0x00, 0x41, 0x6c, 0x6c, 0x65, 0x20, 0x41, - 0x75, 0x73, 0x7a, 0x65, 0x69, 0x63, 0x68, 0x6e, 0x75, 0x6e, 0x67, 0x73, - 0x61, 0x72, 0x74, 0x65, 0x6e, 0x00, 0x54, 0x75, 0x74, 0x74, 0x65, 0x20, - 0x6c, 0x65, 0x20, 0x46, 0x75, 0x6e, 0x7a, 0x69, 0x6f, 0x6e, 0x69, 0x00, - 0x41, 0x6c, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x6b, 0x65, 0x6e, - 0x6d, 0x65, 0x72, 0x6b, 0x65, 0x6e, 0x00, 0x4c, 0x6f, 0x77, 0x65, 0x72, - 0x20, 0x43, 0x61, 0x73, 0x65, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x00, 0x43, 0x68, 0x69, 0x66, 0x66, 0x72, 0x65, 0x73, 0x20, 0x41, - 0x6e, 0x63, 0x69, 0x65, 0x6e, 0x73, 0x20, 0x28, 0x62, 0x61, 0x73, 0x20, - 0x64, 0x65, 0x20, 0x63, 0x61, 0x73, 0x73, 0x65, 0x29, 0x00, 0x4d, 0x65, - 0x64, 0x69, 0xbe, 0x76, 0x61, 0x6c, 0x2d, 0x5a, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x6e, 0x00, 0x53, 0x6f, 0x70, 0x72, 0x61, 0x20, 0x6c, 0x61, 0x20, - 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x20, 0x42, 0x61, 0x73, 0x65, 0x00, 0x4b, - 0x6c, 0x65, 0x69, 0x6e, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x6d, 0x65, 0x72, - 0x73, 0x00, 0x55, 0x70, 0x70, 0x65, 0x72, 0x20, 0x43, 0x61, 0x73, 0x65, - 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x00, 0x43, 0x68, 0x69, - 0x66, 0x66, 0x72, 0x65, 0x73, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x20, 0x28, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x29, 0x00, 0x4e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x65, 0x20, 0x5a, 0x69, 0x66, 0x66, 0x65, 0x72, 0x6e, - 0x00, 0x54, 0x72, 0x61, 0x64, 0x69, 0x7a, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x65, 0x00, 0x47, 0x72, 0x6f, 0x74, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x6d, - 0x65, 0x72, 0x73, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0x66, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, - 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0a, - 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x0e, 0x00, 0x0f, 0x00, 0x10, - 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14, 0x00, 0x15, 0x00, 0x16, - 0x00, 0x17, 0x00, 0x18, 0x00, 0x19, 0x00, 0x1a, 0x00, 0x1b, 0x00, 0x1c, - 0x00, 0x1d, 0x00, 0x1e, 0x00, 0x1f, 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, - 0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x00, 0x28, - 0x00, 0x29, 0x00, 0x2a, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x2d, 0x00, 0x2e, - 0x00, 0x2f, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, - 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3a, - 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x40, - 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, - 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x4c, - 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, - 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, - 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x5e, - 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0xac, 0x00, 0xa3, 0x00, 0x84, - 0x00, 0x85, 0x00, 0xbd, 0x00, 0x96, 0x00, 0xe8, 0x00, 0x86, 0x00, 0x8e, - 0x00, 0x8b, 0x00, 0x9d, 0x00, 0xa9, 0x00, 0xa4, 0x01, 0x02, 0x00, 0x8a, - 0x01, 0x03, 0x00, 0x83, 0x00, 0x93, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0x8d, - 0x00, 0x97, 0x00, 0x88, 0x00, 0xc3, 0x00, 0xde, 0x00, 0xf1, 0x00, 0x9e, - 0x00, 0xaa, 0x00, 0xf5, 0x00, 0xf4, 0x00, 0xf6, 0x00, 0xa2, 0x00, 0xad, - 0x00, 0xc9, 0x00, 0xc7, 0x00, 0xae, 0x00, 0x62, 0x00, 0x63, 0x00, 0x90, - 0x00, 0x64, 0x00, 0xcb, 0x00, 0x65, 0x00, 0xc8, 0x00, 0xca, 0x00, 0xcf, - 0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xe9, 0x00, 0x66, 0x00, 0xd3, - 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xaf, 0x00, 0x67, 0x00, 0xf0, 0x00, 0x91, - 0x00, 0xd6, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0x68, 0x00, 0xeb, 0x00, 0xed, - 0x00, 0x89, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x6d, 0x00, 0x6c, - 0x00, 0x6e, 0x00, 0xa0, 0x00, 0x6f, 0x00, 0x71, 0x00, 0x70, 0x00, 0x72, - 0x00, 0x73, 0x00, 0x75, 0x00, 0x74, 0x00, 0x76, 0x00, 0x77, 0x00, 0xea, - 0x00, 0x78, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x7b, 0x00, 0x7d, 0x00, 0x7c, - 0x00, 0xb8, 0x00, 0xa1, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x80, 0x00, 0x81, - 0x00, 0xec, 0x00, 0xee, 0x00, 0xba, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x30, - 0x41, 0x44, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x00, 0x01, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x07, - 0xff, 0xff, 0x00, 0x0f, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x15, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x15, 0x00, 0x02, 0x00, 0x00, 0x00, 0x28, - 0xc0, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x03, - 0x00, 0x01, 0x01, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0xe5, 0x64, 0x3d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x35, 0x31, 0x8b, - 0x00, 0x00, 0x00, 0x00, 0xe5, 0xf9, 0x0a, 0x4d}; -unsigned int MwTTFDataSize = 35264; -#endif diff --git a/src/text/ft2.c b/src/text/ft2.c deleted file mode 100644 index 32e658775..000000000 --- a/src/text/ft2.c +++ /dev/null @@ -1,194 +0,0 @@ -#ifdef USE_FREETYPE2 -#include - -#include -#include FT_FREETYPE_H - -static struct ft_table { - FT_Error (*FT_Init_FreeType)(FT_Library* alibrary); - FT_Error (*FT_New_Memory_Face)(FT_Library library, - const FT_Byte* file_base, - FT_Long file_size, - FT_Long face_index, - FT_Face* aface); - FT_Error (*FT_Set_Pixel_Sizes)(FT_Face face, - FT_UInt pixel_width, - FT_UInt pixel_height); - FT_Error (*FT_Load_Char)(FT_Face face, - FT_ULong char_code, - FT_Int32 load_flags); - FT_Error (*FT_Get_Kerning)(FT_Face face, - FT_UInt left_glyph, - FT_UInt right_glyph, - FT_UInt kern_mode, - FT_Vector* akerning); - FT_Error (*FT_Done_Face)(FT_Face face); - FT_Error (*FT_Done_FreeType)(FT_Library library); - -} ft_table; - -struct _MwFLFont { - FT_Library library; - FT_Face face; - void* data; - int px; -}; -static int ft2_MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text, MwLLColor color) { - int tw, th; - unsigned char* px; - MwLLPixmap p; - MwRect r; - int x = 0, y = 0; - - tw = MwTextWidth(handle, ttf, text); - th = MwTextHeight(handle, ttf, text); - px = malloc(tw * th * 4); - - memset(px, 0, tw * th * 4); - while(text[0] != 0) { - FT_Bitmap* bmp; - int cy, cx; - int c, c2; - int l = MwUTF8ToUTF32(text, &c); - FT_Vector vec; - const char* old_text; - if(l <= 0) break; - text += l; - - if(c == '\n') { - x = 0; - y += ttf->face->height * ttf->px / ttf->face->units_per_EM; - continue; - } - - ft_table.FT_Load_Char(ttf->face, c, FT_LOAD_RENDER); - bmp = &ttf->face->glyph->bitmap; - - for(cy = 0; cy < bmp->rows; cy++) { - for(cx = 0; cx < bmp->width; cx++) { - int ox = x + (ttf->face->glyph->metrics.horiBearingX / 64) + cx + ttf->face->glyph->bitmap_left; - int oy = y + (ttf->face->height * ttf->px / ttf->face->units_per_EM) - ttf->face->glyph->bitmap_top + cy + (ttf->face->descender * ttf->px / ttf->face->units_per_EM); - unsigned char* opx = &px[(oy * tw + ox) * 4]; - opx[0] = color->common.red; - opx[1] = color->common.green; - opx[2] = color->common.blue; - /* overflow check */ - if(opx[3] + bmp->buffer[cy * bmp->pitch + cx] < opx[3]) { - opx[3] = 255; - } else { - opx[3] = bmp->buffer[cy * bmp->pitch + cx]; - } - } - } - - x += (ttf->face->glyph->advance.x >> 6) + (ttf->face->glyph->metrics.horiBearingX >> 6); - - old_text = text; - text += MwUTF8ToUTF32(text, &c2); - - if(c2 != '\n') { - ft_table.FT_Get_Kerning(ttf->face, c, c2, FT_KERNING_DEFAULT, &vec); - - x += vec.x >> 6; - } - - text = old_text; - } - - p = MwLoadRaw(handle, px, tw, th); - r.x = point->x; - r.y = point->y - th / 2; - r.width = tw; - r.height = th; - - MwLLDrawPixmap(handle->lowlevel, &r, p); - MwLLDestroyPixmap(p); - free(px); - - return 0; -} - -static int ft2_MwTextWidth(MwFLFont ttf, const char* text) { - int tw = 0, mtw = 0; - - while(text[0] != 0) { - int c, c2; - FT_Vector vec; - const char* old_text; - - text += MwUTF8ToUTF32(text, &c); - if(c == '\n') { - tw = 0; - continue; - } - - ft_table.FT_Load_Char(ttf->face, c, FT_LOAD_DEFAULT); - - tw += (ttf->face->glyph->advance.x >> 6) + (ttf->face->glyph->metrics.horiBearingX >> 6); - - old_text = text; - text += MwUTF8ToUTF32(text, &c2); - - if(c2 != '\n') { - ft_table.FT_Get_Kerning(ttf->face, c, c2, FT_KERNING_DEFAULT, &vec); - - tw += vec.x >> 6; - } - - text = old_text; - if(tw > mtw) mtw = tw; - } - - return mtw + 1; -} - -static int ft2_MwTextHeight(MwFLFont ttf, int count) { - return ceil((ttf->face->height * ttf->px / ttf->face->units_per_EM) * count); -} - -static void* ft2_MwFontLoad(unsigned char* data, unsigned int size, int px) { - MwFLFont ttf = malloc(sizeof(*ttf)); - ttf->data = malloc(size); - memcpy(ttf->data, data, size); - ft_table.FT_Init_FreeType(&ttf->library); - ft_table.FT_New_Memory_Face(ttf->library, ttf->data, size, 0, &ttf->face); - - ttf->px = px; - ft_table.FT_Set_Pixel_Sizes(ttf->face, 0, ttf->px); - - return ttf; -} - -static void ft2_MwFontFree(void* handle) { - MwFLFont ttf = handle; - - ft_table.FT_Done_Face(ttf->face); - ft_table.FT_Done_FreeType(ttf->library); - - free(ttf->data); - free(ttf); -} - -int MWFL_FT2Setup(void) { - /* Try and load FreeType2. If it fails, return 1, signifying we default to stbtt. */ - void* ftlib; - if(!(ftlib = MwDynamicOpen("libfreetype.so"))) { - return 1; - } - - ft_table.FT_Init_FreeType = MwDynamicSymbol(ftlib, "FT_Init_FreeType"); - ft_table.FT_New_Memory_Face = MwDynamicSymbol(ftlib, "FT_New_Memory_Face"); - ft_table.FT_Set_Pixel_Sizes = MwDynamicSymbol(ftlib, "FT_Set_Pixel_Sizes"); - ft_table.FT_Load_Char = MwDynamicSymbol(ftlib, "FT_Load_Char"); - ft_table.FT_Get_Kerning = MwDynamicSymbol(ftlib, "FT_Get_Kerning"); - ft_table.FT_Done_Face = MwDynamicSymbol(ftlib, "FT_Done_Face"); - ft_table.FT_Done_FreeType = MwDynamicSymbol(ftlib, "FT_Done_FreeType"); - - MwFLDrawText = ft2_MwDrawText; - MwFLTextWidth = ft2_MwTextWidth; - MwFLTextHeight = ft2_MwTextHeight; - MwFLFontLoad = ft2_MwFontLoad; - MwFLFontFree = ft2_MwFontFree; - return 0; -} -#endif diff --git a/src/text/stbtt.c b/src/text/stbtt.c deleted file mode 100644 index a84190769..000000000 --- a/src/text/stbtt.c +++ /dev/null @@ -1,163 +0,0 @@ -#ifdef USE_STB_TRUETYPE -#include - -#include "../../external/stb_truetype.h" - -struct _MwFLFont { - stbtt_fontinfo font; - void* data; - float scale; - int ascent; - int descent; -}; - -static int stbtt_MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text, MwLLColor color) { - unsigned char* px; - int tw, th; - MwRect r; - MwLLPixmap p; - int ax, lsb; - int x = 0, y = 0; - - tw = MwTextWidth(handle, ttf, text); - th = MwTextHeight(handle, ttf, text); - px = malloc(tw * th * 4); - - memset(px, 0, tw * th * 4); - while(text[0] != 0) { - int c, c2; - int x0, y0, x1, y1, cx, cy; - int ow, oh; - unsigned char* out; - int kern; - const char* old_text; - - text += MwUTF8ToUTF32(text, &c); - if(c == '\n') { - x = 0; - y += ceil((ttf->ascent - ttf->descent) * ttf->scale); - continue; - } - - stbtt_GetCodepointHMetrics(&ttf->font, c, &ax, &lsb); - - stbtt_GetCodepointBitmapBox(&ttf->font, c, ttf->scale, ttf->scale, &x0, &y0, &x1, &y1); - ow = x1 - x0; - oh = y1 - y0; - out = malloc(ow * oh); - stbtt_MakeCodepointBitmap(&ttf->font, out, ow, oh, ow, ttf->scale, ttf->scale, c); - - for(cy = 0; cy < oh; cy++) { - for(cx = 0; cx < ow; cx++) { - int ox = x + ceil(lsb * ttf->scale) + cx; - int oy = y + ceil(ttf->ascent * ttf->scale) + y0 + cy; - unsigned char* opx = &px[(oy * tw + ox) * 4]; - opx[0] = color->common.red; - opx[1] = color->common.green; - opx[2] = color->common.blue; - /* overflow check */ - if(opx[3] + out[cy * ow + cx] < opx[3]) { - opx[3] = 255; - } else { - opx[3] = out[cy * ow + cx]; - } - } - } - - x += ceil(ax * ttf->scale); - - old_text = text; - text += MwUTF8ToUTF32(text, &c2); - - if(c2 != '\n') { - kern = stbtt_GetCodepointKernAdvance(&ttf->font, c, c2); - - x += ceil(kern * ttf->scale); - } - - text = old_text; - - free(out); - } - - p = MwLoadRaw(handle, px, tw, th); - r.x = point->x; - r.y = point->y - th / 2; - r.width = tw; - r.height = th; - - MwLLDrawPixmap(handle->lowlevel, &r, p); - MwLLDestroyPixmap(p); - free(px); - - return 0; -} - -static int stbtt_MwTextWidth(MwFLFont ttf, const char* text) { - int ax, lsb; - int tw = 0, mtw = 0; - - while(text[0] != 0) { - int kern; - int c, c2; - const char* old_text; - - text += MwUTF8ToUTF32(text, &c); - if(c == '\n') { - tw = 0; - continue; - } - - stbtt_GetCodepointHMetrics(&ttf->font, c, &ax, &lsb); - - tw += ceil(ax * ttf->scale); - - old_text = text; - text += MwUTF8ToUTF32(text, &c2); - - if(c2 != '\n') { - kern = stbtt_GetCodepointKernAdvance(&ttf->font, c, c2); - - tw += ceil(kern * ttf->scale); - } - - text = old_text; - if(tw > mtw) mtw = tw; - } - - return mtw + 1; -} - -static int stbtt_MwTextHeight(MwFLFont ttf, int count) { - return ceil((ttf->ascent - ttf->descent) * ttf->scale * count); -} - -static void* stbtt_MwFontLoad(unsigned char* data, unsigned int size, int px) { - MwFLFont ttf = malloc(sizeof(*ttf)); - ttf->data = malloc(size); - memcpy(ttf->data, data, size); - stbtt_InitFont(&ttf->font, ttf->data, 0); - - ttf->scale = stbtt_ScaleForMappingEmToPixels(&ttf->font, px); - stbtt_GetFontVMetrics(&ttf->font, &ttf->ascent, &ttf->descent, 0); - - return ttf; -} - -static void stbtt_MwFontFree(void* handle) { - MwFLFont ttf = handle; - - free(ttf->data); - free(ttf); -} - -int MwFL_STBTTSetup(void) { - MwFLDrawText = stbtt_MwDrawText; - MwFLTextWidth = stbtt_MwTextWidth; - MwFLTextHeight = stbtt_MwTextHeight; - MwFLFontLoad = stbtt_MwFontLoad; - MwFLFontFree = stbtt_MwFontFree; - return 0; -} - -#endif diff --git a/src/text/text.c b/src/text/text.c deleted file mode 100644 index fec0bb449..000000000 --- a/src/text/text.c +++ /dev/null @@ -1,204 +0,0 @@ -#include - -int (*MwFLDrawText)(MwWidget handle, MwFLFont font, MwPoint* point, const char* text, MwLLColor color) = NULL; -int (*MwFLTextWidth)(MwFLFont font, const char* text) = NULL; -int (*MwFLTextHeight)(MwFLFont font, int count) = NULL; -void* (*MwFLFontLoad)(unsigned char* data, unsigned int size, int px) = NULL; -void (*MwFLFontFree)(void* handle) = NULL; - -#if defined(USE_FREETYPE2) || defined(USE_STB_TRUETYPE) -#define TTF -#endif - -#define FontWidth 7 -#define FontHeight 14 - -static void bitmap_MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, MwLLColor color); - -static int is_bold(MwWidget handle, MwFLFont ttf) { - size_t u = (size_t)ttf; - int s; - - if(u & MwFLFlagBold) return 1; - - s = MwGetInteger(handle, MwNbold); - if(s == MwDEFAULT) return 0; - return s; -} - -#ifdef TTF -static int is_monospace(MwWidget handle, MwFLFont ttf) { - size_t u = (size_t)ttf; - int s; - - if(u & MwFLFlagMonospace) return 1; - - s = MwGetInteger(handle, MwNuseMonospace); - if(s == MwDEFAULT) return 0; - return s; -} -#endif - -#ifdef TTF - -static MwFLFont assume_ttf(MwWidget handle, MwFLFont ttf) { - if(MwGetInteger(handle, MwNbitmapFont)) return NULL; - - if(is_monospace(handle, ttf)) return is_bold(handle, ttf) ? MwGetVoid(handle, MwNboldMonospaceFont) : MwGetVoid(handle, MwNmonospaceFont); - return is_bold(handle, ttf) ? MwGetVoid(handle, MwNboldFont) : MwGetVoid(handle, MwNfont); -} -#endif - -void MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text, int align, MwLLColor color) { - MwPoint p = *point; - - if(strlen(text) == 0) return; -#ifdef TTF - if(ttf <= MwFLBuildFont(0xff)) ttf = assume_ttf(handle, ttf); -#endif - - if(align == MwALIGNMENT_CENTER) { - p.x -= MwTextWidth(handle, ttf, text) / 2; - } else if(align == MwALIGNMENT_END) { - p.x -= MwTextWidth(handle, ttf, text); - } - -#ifdef TTF - if(MwFLDrawText) - if(MwGetInteger(handle, MwNbitmapFont) || ttf == NULL || MwFLDrawText(handle, ttf, &p, text, color)) -#endif - bitmap_MwDrawText(handle, &p, text, is_bold(handle, ttf), color); -} - -int MwTextWidth(MwWidget handle, MwFLFont ttf, const char* text) { - /* TODO: check newline */ -#ifdef TTF - int st; - - if(ttf <= MwFLBuildFont(0xff)) ttf = assume_ttf(handle, ttf); - - if(MwFLTextWidth) - if(!MwGetInteger(handle, MwNbitmapFont) && ttf != NULL && (st = MwFLTextWidth(ttf, text)) != -1) return st; -#else - (void)handle; - (void)ttf; -#endif - return MwUTF8Length(text) * FontWidth; -} - -int MwTextHeight(MwWidget handle, MwFLFont ttf, const char* text) { - int c = 1; - int i = 0; -#ifdef TTF - int st; -#endif - -#ifdef TTF - if(ttf <= MwFLBuildFont(0xff)) ttf = assume_ttf(handle, ttf); -#else - (void)handle; - (void)text; - (void)ttf; -#endif - - while(text[i] != 0) { - int out; - int l = MwUTF8ToUTF32(text + i, &out); - if(l == 0) break; - i += l; - - if(out == '\n') c++; - } -#ifdef TTF - if(MwFLTextHeight) - if(!MwGetInteger(handle, MwNbitmapFont) && ttf != NULL && (st = MwFLTextHeight(ttf, c)) != -1) return st; -#endif - return FontHeight * c; -} - -void* MwFontLoad(unsigned char* data, unsigned int size) { - if(MwFLFontLoad) - return MwFLFontLoad(data, size, 14); - return NULL; -} - -void MwFontFree(void* handle) { - if(MwFLFontFree) MwFLFontFree(handle); -} - -static void bitmap_MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, MwLLColor color) { - int i = 0, x, y, sx, sy; - int tw, th; - unsigned char* px; - MwRect r; - MwLLPixmap p; - - if(strlen(text) == 0) text = " "; - tw = MwTextWidth(handle, NULL, text); - th = MwTextHeight(handle, NULL, text); - px = malloc(tw * th * 4); - - memset(px, 0, tw * th * 4); - - sx = 0; - sy = 0; - - while(text[i] != 0) { - int out; - i += MwUTF8ToUTF32(text + i, &out); - - if(out > 0xff) { - out = 0; - } - - if(out == '\n') { - sx = 0; - sy += FontHeight; - } else { - for(y = 0; y < FontHeight; y++) { - for(x = 0; x < FontWidth; x++) { - unsigned char* ppx = &px[((sy + y) * tw + sx + x) * 4]; - if((bold ? MwBoldFontData : MwFontData)[out].data[y] & (1 << ((FontWidth - 1) - x))) { - ppx[0] = color->common.red; - ppx[1] = color->common.green; - ppx[2] = color->common.blue; - ppx[3] = 255; - } else { - ppx[0] = 0; - ppx[1] = 0; - ppx[2] = 0; - ppx[3] = 0; - } - } - } - sx += FontWidth; - } - } - - p = MwLoadRaw(handle, px, tw, th); - r.x = point->x; - r.y = point->y - th / 2; - r.width = tw; - r.height = th; - - MwLLDrawPixmap(handle->lowlevel, &r, p); - MwLLDestroyPixmap(p); - free(px); -} - -typedef int (*call_t)(void); -void MwFLSetup(void) { - call_t calls[] = { -#ifdef USE_FREETYPE2 - MWFL_FT2Setup, -#endif -#ifdef USE_STB_TRUETYPE - MwFL_STBTTSetup, -#endif - NULL}; - int i; - - for(i = 0; calls[i] != NULL; i++) { - if(calls[i]() == 0) return; - } -} diff --git a/src/widget/box.c b/src/widget/box.c index 6fb893550..e2808c4ea 100644 --- a/src/widget/box.c +++ b/src/widget/box.c @@ -2,28 +2,27 @@ #include "../../external/stb_ds.h" -static int wcreate(MwWidget handle) { - MwBox b = malloc(sizeof(*b)); - memset(b, 0, sizeof(*b)); - - handle->internal = b; - +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNorientation, MwHORIZONTAL); MwSetInteger(handle, MwNmargin, 0); MwSetInteger(handle, MwNpadding, 0); - MwSetInteger(handle, MwNhasBorder, 0); - MwSetInteger(handle, MwNinverted, 1); - - b->layout = 0; return 0; } -static void destroy(MwWidget handle) { - MwBox b = handle->internal; - free(b); +static void draw(MwWidget handle) { + MwRect r; + MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); + + r.x = 0; + r.y = 0; + r.width = MwGetInteger(handle, MwNwidth); + r.height = MwGetInteger(handle, MwNheight); + MwDrawRect(handle, &r, base); + + MwLLFreeColor(base); } #define Margin ((i != (arrlen(handle->children) - 1)) ? MwGetInteger(handle, MwNmargin) : 0) @@ -32,22 +31,19 @@ static void layout(MwWidget handle) { int i; int sum = 0; int horiz = MwGetInteger(handle, MwNorientation) == MwHORIZONTAL ? 1 : 0; - int sz = MwGetInteger(handle, horiz ? MwNwidth : MwNheight) - (MwGetInteger(handle, MwNpadding) + (MwGetInteger(handle, MwNhasBorder) ? MwDefaultBorderWidth(handle) : 0)) * 2; - int fsz = MwGetInteger(handle, horiz ? MwNheight : MwNwidth) - (MwGetInteger(handle, MwNpadding) + (MwGetInteger(handle, MwNhasBorder) ? MwDefaultBorderWidth(handle) : 0)) * 2; - int sk = MwGetInteger(handle, MwNpadding) + (MwGetInteger(handle, MwNhasBorder) ? MwDefaultBorderWidth(handle) : 0); + int sz = MwGetInteger(handle, horiz ? MwNwidth : MwNheight) - MwGetInteger(handle, MwNpadding) * 2; + int fsz = MwGetInteger(handle, horiz ? MwNheight : MwNwidth) - MwGetInteger(handle, MwNpadding) * 2; + int sk = MwGetInteger(handle, MwNpadding); for(i = 0; i < arrlen(handle->children); i++) { int n = MwGetInteger(handle->children[i], MwNratio); int s = MwGetInteger(handle->children[i], MwNfixedSize); if(n == MwDEFAULT) n = 1; - if(handle->children[i]->destroyed) continue; - if(s != MwDEFAULT) { sz -= s + Margin; } else { sum += n; - sz -= Margin; } } @@ -57,86 +53,44 @@ static void layout(MwWidget handle) { int wsz; if(n == MwDEFAULT) n = 1; - if(handle->children[i]->destroyed) continue; - if(s != MwDEFAULT) { wsz = s; } else { wsz = sz * n / sum; } + wsz -= Margin; MwVaApply(handle->children[i], - horiz ? MwNx : MwNy, sk, /* this is what gets changed */ - horiz ? MwNy : MwNx, MwGetInteger(handle, MwNpadding) + (MwGetInteger(handle, MwNhasBorder) ? MwDefaultBorderWidth(handle) : 0), /* fixed between widgets */ - horiz ? MwNwidth : MwNheight, wsz, /* this is what gets changed */ - horiz ? MwNheight : MwNwidth, fsz, /* fixed between widgets */ + horiz ? MwNx : MwNy, sk, /* this is what gets changed */ + horiz ? MwNy : MwNx, MwGetInteger(handle, MwNpadding), /* fixed between widgets */ + horiz ? MwNwidth : MwNheight, wsz, /* this is what gets changed */ + horiz ? MwNheight : MwNwidth, fsz, /* fixed between widgets */ NULL); sk += wsz + Margin; } } -static void draw(MwWidget handle) { - MwRect r; - MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); - MwBox b = handle->internal; - - r.x = 0; - r.y = 0; - r.width = MwGetInteger(handle, MwNwidth); - r.height = MwGetInteger(handle, MwNheight); - - if(MwGetInteger(handle, MwNhasBorder)) { - MwDrawFrame(handle, &r, base, MwGetInteger(handle, MwNinverted)); - } - - MwDrawRect(handle, &r, base); - - MwLLFreeColor(base); - - if(b->layout) { - layout(handle); - - b->layout = 0; - } -} - static void prop_change(MwWidget handle, const char* key) { - if(strcmp(key, MwNorientation) == 0) { - MwBox b = handle->internal; - b->layout = 1; - - MwForceRender(handle); - } + if(strcmp(key, MwNorientation) == 0) layout(handle); } static void children_prop_change(MwWidget handle, MwWidget child, const char* key) { (void)child; - if(strcmp(key, MwNratio) == 0 || strcmp(key, MwNfixedSize) == 0) { - MwBox b = handle->internal; - b->layout = 1; - - MwForceRender(handle); - } + if(strcmp(key, MwNratio) == 0 || strcmp(key, MwNfixedSize) == 0) layout(handle); } static void resize(MwWidget handle) { - MwBox b = handle->internal; - b->layout = 1; - - MwForceRender(handle); + layout(handle); } static void children_update(MwWidget handle) { - MwBox b = handle->internal; - b->layout = 1; - - MwForceRender(handle); + layout(handle); } MwClassRec MwBoxClassRec = { - wcreate, /* create */ - destroy, /* destroy */ + create, /* create */ + NULL, /* destroy */ draw, /* draw */ NULL, /* click */ NULL, /* parent_resize */ @@ -150,7 +104,7 @@ MwClassRec MwBoxClassRec = { resize, /* resize */ children_update, /* children_update */ children_prop_change, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/button.c b/src/widget/button.c index 7287f2a4e..dfff6d5bf 100644 --- a/src/widget/button.c +++ b/src/widget/button.c @@ -1,14 +1,11 @@ #include -#include "../../external/stb_ds.h" - -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNflat, 0); MwSetInteger(handle, MwNpadding, 0); MwSetInteger(handle, MwNfillArea, 1); - MwSetInteger(handle, MwNroundness, 5); return 0; } @@ -21,7 +18,6 @@ static void draw(MwWidget handle) { const char* str = MwGetText(handle, MwNtext); MwLLPixmap px = MwGetVoid(handle, MwNpixmap); MwLLPixmap bgpx = MwGetVoid(handle, MwNbackgroundPixmap); - int inv; if(str == NULL) str = ""; @@ -31,7 +27,7 @@ static void draw(MwWidget handle) { r.height = MwGetInteger(handle, MwNheight); if(MwGetInteger(handle, MwNflat)) { - if(handle->pressed || ((inv = MwGetInteger(handle, MwNforceInverted)) != MwDEFAULT && inv)) { + if(handle->pressed) { MwDrawWidgetBack(handle, &r, base, handle->pressed, 1); } else { MwDrawRect(handle, &r, base); @@ -40,7 +36,7 @@ static void draw(MwWidget handle) { MwDrawWidgetBack(handle, &r, base, handle->pressed, 1); } if(bgpx != NULL) MwLLDrawPixmap(handle->lowlevel, &r, bgpx); - if(MwGetInteger(handle, MwNflat) && !(handle->pressed || ((inv = MwGetInteger(handle, MwNforceInverted)) != MwDEFAULT && inv))) { + if(MwGetInteger(handle, MwNflat) && !handle->pressed) { r.x += MwDefaultBorderWidth(handle); r.y += MwDefaultBorderWidth(handle); r.width -= MwDefaultBorderWidth(handle) * 2; @@ -77,7 +73,7 @@ static void draw(MwWidget handle) { point.x = r.x + r.width / 2; point.y = r.x + r.height / 2; - MwDrawText(handle, NULL, &point, str, MwALIGNMENT_CENTER, text); + MwDrawText(handle, &point, str, 0, MwALIGNMENT_CENTER, text); } MwLLFreeColor(text); @@ -93,7 +89,7 @@ static void prop_change(MwWidget handle, const char* key) { } MwClassRec MwButtonClassRec = { - wcreate, /* create */ + create, /* create */ NULL, /* destroy */ draw, /* draw */ click, /* click */ @@ -108,7 +104,7 @@ MwClassRec MwButtonClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/checkbox.c b/src/widget/checkbox.c index 2301aa0ff..8a42b8904 100644 --- a/src/widget/checkbox.c +++ b/src/widget/checkbox.c @@ -1,6 +1,6 @@ #include -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNchecked, 0); @@ -38,7 +38,7 @@ static void prop_change(MwWidget handle, const char* key) { } MwClassRec MwCheckBoxClassRec = { - wcreate, /* create */ + create, /* create */ NULL, /* destroy */ draw, /* draw */ click, /* click */ @@ -53,7 +53,7 @@ MwClassRec MwCheckBoxClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/combobox.c b/src/widget/combobox.c index 4c964f105..156242e81 100644 --- a/src/widget/combobox.c +++ b/src/widget/combobox.c @@ -2,7 +2,7 @@ #include "../../external/stb_ds.h" -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwComboBox cb = malloc(sizeof(*cb)); cb->list = NULL; @@ -51,7 +51,7 @@ static void draw(MwWidget handle) { p.x = MwDefaultBorderWidth(handle) * 2 + 4; p.y = MwGetInteger(handle, MwNheight) / 2; - MwDrawText(handle, NULL, &p, cb->list[MwGetInteger(handle, MwNvalue)], MwALIGNMENT_BEGINNING, text); + MwDrawText(handle, &p, cb->list[MwGetInteger(handle, MwNvalue)], 0, MwALIGNMENT_BEGINNING, text); } r = rc; @@ -89,7 +89,7 @@ static void listbox_activate(MwWidget handle, void* user, void* client) { MwForceRender(handle->parent); - MwDispatchUserHandler(handle->parent, MwNcomboBoxChangedHandler, client); + MwDispatchUserHandler(handle->parent, MwNchangedHandler, client); MwDestroyWidget(handle); } @@ -115,11 +115,11 @@ static void click(MwWidget handle) { MwLLSetCursor(handle->lowlevel, &MwCursorArrow, &MwCursorArrowMask); for(i = 0; i < arrlen(cb->list); i++) { - int l = MwTextWidth(handle, NULL, cb->list[i]) + MwDefaultBorderWidth(handle) * 2; + int l = MwTextWidth(handle, cb->list[i]) + MwDefaultBorderWidth(handle) * 2; if(l > width) width = l; } - cb->listbox = MwVaCreateWidget(MwListBoxClass, "listbox", handle, 0, MwGetInteger(handle, MwNheight), width, MwTextHeight(handle, NULL, "M") * ent + MwDefaultBorderWidth(handle) * 2 + MwTextHeight(handle, NULL, "M") / 4, + cb->listbox = MwVaCreateWidget(MwListBoxClass, "listbox", handle, 0, MwGetInteger(handle, MwNheight), width, MwTextHeight(handle, "M") * ent + MwDefaultBorderWidth(handle) * 2 + MwTextHeight(handle, "M") / 4, MwNsingleClickSelectable, 1, NULL); @@ -189,7 +189,7 @@ static void func_handler(MwWidget handle, const char* name, void* out, va_list v } MwClassRec MwComboBoxClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ click, /* click */ @@ -204,7 +204,7 @@ MwClassRec MwComboBoxClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/entry.c b/src/widget/entry.c index 41b976e83..85f9a86c1 100644 --- a/src/widget/entry.c +++ b/src/widget/entry.c @@ -1,6 +1,6 @@ #include -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwEntry t = malloc(sizeof(*t)); t->cursor = 0; @@ -11,7 +11,6 @@ static int wcreate(MwWidget handle) { MwSetDefault(handle); MwLLSetCursor(handle->lowlevel, &MwCursorText, &MwCursorTextMask); - MwSetInteger(handle, MwNroundness, 5); return 0; } @@ -27,7 +26,6 @@ static void draw(MwWidget handle) { MwLLColor text = MwParseColor(handle, MwGetText(handle, MwNforeground)); const char* str = MwGetText(handle, MwNtext); MwLLPixmap bgpx = MwGetVoid(handle, MwNbackgroundPixmap); - MwFLFont font = MwFLBuildFont(MwFLFlagMonospace); if(str == NULL) str = ""; r.x = 0; @@ -38,8 +36,8 @@ static void draw(MwWidget handle) { MwDrawWidgetBack(handle, &r, base, 1, 1); if(bgpx != NULL) MwLLDrawPixmap(handle->lowlevel, &r, bgpx); if(str != NULL) { - int w = MwTextWidth(handle, font, "M"); - int h = MwTextHeight(handle, font, "M"); + int w = MwTextWidth(handle, "M"); + int h = MwTextHeight(handle, "M"); MwPoint p; char* show; int len; @@ -54,32 +52,30 @@ static void draw(MwWidget handle) { len = (r.width - p.x * 2) / w; - if(len > 0) { - show = malloc(len * 4 + 1); - memset(show, 0, len * 4 + 1); + show = malloc(len * 4 + 1); + memset(show, 0, len * 4 + 1); - start = (t->cursor - 1) / len; - start *= len; - if((attr = MwGetInteger(handle, MwNhideInput)) == MwDEFAULT || !attr) { - MwUTF8Copy(str, start, show, 0, len); - } else { - for(i = 0; i < MwUTF8Length(str) - start; i++) show[i] = '*'; - } - - MwDrawText(handle, font, &p, show, MwALIGNMENT_BEGINNING, text); - - textlen = (t->cursor - 1) % len + 1; - for(i = 0; i < textlen; i++) show[i] = 'M'; - show[i] = 0; - - currc.x = p.x + MwTextWidth(handle, font, show); - currc.y = (r.height - h) / 2; - currc.width = 1; - currc.height = h; - MwDrawRect(handle, &currc, text); - - free(show); + start = (t->cursor - 1) / len; + start *= len; + if((attr = MwGetInteger(handle, MwNhideInput)) == MwDEFAULT || !attr) { + MwUTF8Copy(str, start, show, 0, len); + } else { + for(i = 0; i < MwUTF8Length(str) - start; i++) show[i] = '*'; } + + MwDrawText(handle, &p, show, 0, MwALIGNMENT_BEGINNING, text); + + textlen = (t->cursor - 1) % len + 1; + for(i = 0; i < textlen; i++) show[i] = 'M'; + show[i] = 0; + + currc.x = p.x + MwTextWidth(handle, show); + currc.y = (r.height - h) / 2; + currc.width = 1; + currc.height = h; + MwDrawRect(handle, &currc, text); + + free(show); } MwLLFreeColor(text); @@ -113,7 +109,20 @@ static void key(MwWidget handle, int code) { } else if(code == MwLLKeyEnter) { MwDispatchUserHandler(handle, MwNactivateHandler, NULL); } else if(code == (MwLLControlMask | 'v')) { - MwLLGetClipboard(handle->lowlevel, MwCLIPBOARD_MAIN); + char* c = MwLLGetClipboard(handle->lowlevel); + if(c != NULL) { + char* out = malloc(strlen(str) + strlen(c) + 1); + + MwUTF8Copy(str, 0, out, 0, t->cursor); + MwUTF8Copy(c, 0, out, t->cursor, MwUTF8Length(c)); + MwUTF8Copy(str, t->cursor, out, t->cursor + MwUTF8Length(c), MwUTF8Length(str) - t->cursor); + + t->cursor += MwUTF8Length(c); + + MwSetText(handle, MwNtext, out); + free(out); + free(c); + } } else if(!(code & MwLLKeyMask)) { int incr = 0; out = malloc(strlen(str) + 5 + 1); @@ -133,20 +142,6 @@ static void key(MwWidget handle, int code) { MwForceRender(handle); } -#if defined(USE_X11) || defined(USE_WAYLAND) -static void mouse_up(MwWidget handle, void* ptr) { - if(handle->lowlevel->common.type == MwLLBackendWayland || handle->lowlevel->common.type == MwLLBackendX11) { - MwMouse* mouse = ptr; - if(mouse->button == MwMOUSE_MIDDLE) { - MwLLGetClipboard(handle->lowlevel, MwCLIPBOARD_PRIMARY); - } - } - MwForceRender2(handle, NULL); -} -#else -#define mouse_up MwForceRender2 -#endif - static void prop_change(MwWidget handle, const char* prop) { if(strcmp(prop, MwNtext) == 0 || strcmp(prop, MwNhideInput) == 0) MwForceRender(handle); @@ -162,38 +157,15 @@ static void prop_change(MwWidget handle, const char* prop) { } } -static void clipboard(MwWidget handle, const char* data) { - MwEntry t = handle->internal; - const char* str = MwGetText(handle, MwNtext); - char* out; - if(!str) { - str = ""; - } - out = malloc(strlen(str) + strlen(data) + 1); - - if(str == NULL) str = ""; - - MwUTF8Copy(str, 0, out, 0, t->cursor); - MwUTF8Copy(data, 0, out, t->cursor, MwUTF8Length(data)); - MwUTF8Copy(str, t->cursor, out, t->cursor + MwUTF8Length(data), MwUTF8Length(str) - t->cursor); - - t->cursor += MwUTF8Length(data); - - MwSetText(handle, MwNtext, out); - free(out); - - MwForceRender(handle); -} - MwClassRec MwEntryClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ NULL, /* click */ NULL, /* parent_resize */ prop_change, /* prop_change */ NULL, /* mouse_move */ - mouse_up, /* mouse_up */ + MwForceRender2, /* mouse_up */ MwForceRender2, /* mouse_down */ key, /* key */ NULL, /* execute */ @@ -201,7 +173,7 @@ MwClassRec MwEntryClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - clipboard, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/frame.c b/src/widget/frame.c index 0cc0c4163..d48c2874d 100644 --- a/src/widget/frame.c +++ b/src/widget/frame.c @@ -1,6 +1,6 @@ #include -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNhasBorder, 0); @@ -46,7 +46,7 @@ static void prop_change(MwWidget handle, const char* key) { } MwClassRec MwFrameClassRec = { - wcreate, /* create */ + create, /* create */ NULL, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -61,7 +61,7 @@ MwClassRec MwFrameClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/image.c b/src/widget/image.c index 791570ecb..487521dd5 100644 --- a/src/widget/image.c +++ b/src/widget/image.c @@ -1,11 +1,10 @@ #include -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNhasBorder, 0); MwSetInteger(handle, MwNinverted, 1); - MwSetInteger(handle, MwNfillArea, 1); return 0; } @@ -24,13 +23,6 @@ static void draw(MwWidget handle) { MwDrawRect(handle, &r, base); if(px != NULL) { - if(!MwGetInteger(handle, MwNfillArea)) { - r.x = (r.width - px->common.width) / 2; - r.y = (r.height - px->common.height) / 2; - r.width = px->common.width; - r.height = px->common.height; - } - MwLLDrawPixmap(handle->lowlevel, &r, px); } @@ -42,7 +34,7 @@ static void prop_change(MwWidget handle, const char* key) { } MwClassRec MwImageClassRec = { - wcreate, /* create */ + create, /* create */ NULL, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -57,7 +49,7 @@ MwClassRec MwImageClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/label.c b/src/widget/label.c index 98a0d5fef..2cf6a8da3 100644 --- a/src/widget/label.c +++ b/src/widget/label.c @@ -1,139 +1,21 @@ #include -#include "../../external/stb_ds.h" - -#define Spacing 1 - -static int wcreate(MwWidget handle) { - MwLabel lab = malloc(sizeof(*lab)); - - lab->segment = NULL; - handle->internal = lab; - +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNalignment, MwALIGNMENT_CENTER); MwSetInteger(handle, MwNbold, 0); - MwSetInteger(handle, MwNsevenSegment, 0); - MwSetInteger(handle, MwNlength, 4); - MwSetInteger(handle, MwNleftPadding, 0); return 0; } -static void destroy(MwWidget handle) { - MwLabel lab = handle->internal; - - hmfree(lab->segment); - - free(handle->internal); -} - -static void draw_v(MwWidget handle, unsigned char* raw, int x, int y, int stride, MwLLColor text) { - int cy, cx, b; - - int l_one = MwGetInteger(handle, MwNlength) - (MwGetInteger(handle, MwNlength) % 2); - int s_one = (l_one * 3 / 4) - ((l_one * 3 / 4) % 2) + 1; - - for(cy = y; cy < y + l_one; cy++) { - for(cx = x; cx < x + s_one; cx++) { - unsigned char* px = &raw[(cy * stride + cx) * 4]; - px[0] = text->common.red; - px[1] = text->common.green; - px[2] = text->common.blue; - px[3] = 255; - } - } - - b = y - (s_one - 1) / 2; - for(cy = b; cy < b + (s_one - 1) / 2; cy++) { - int w = (cy - b) * 2 + 1; - int b2 = x + (s_one - w) / 2; - for(cx = b2; cx < b2 + w; cx++) { - unsigned char* px; - - px = &raw[(cy * stride + cx) * 4]; - px[0] = text->common.red; - px[1] = text->common.green; - px[2] = text->common.blue; - px[3] = 255; - } - } - - b = y + l_one; - for(cy = b; cy < b + (s_one - 1) / 2; cy++) { - int w = ((s_one - 1) / 2 - 1 - (cy - b)) * 2 + 1; - int b2 = x + (s_one - w) / 2; - for(cx = b2; cx < b2 + w; cx++) { - unsigned char* px; - - px = &raw[(cy * stride + cx) * 4]; - px[0] = text->common.red; - px[1] = text->common.green; - px[2] = text->common.blue; - px[3] = 255; - } - } -} - -static void draw_h(MwWidget handle, unsigned char* raw, int x, int y, int stride, MwLLColor text) { - int cy, cx, b; - - int l_one = MwGetInteger(handle, MwNlength) - (MwGetInteger(handle, MwNlength) % 2); - int s_one = (l_one * 3 / 4) - ((l_one * 3 / 4) % 2) + 1; - - for(cx = x; cx < x + l_one; cx++) { - for(cy = y; cy < y + s_one; cy++) { - unsigned char* px = &raw[(cy * stride + cx) * 4]; - px[0] = text->common.red; - px[1] = text->common.green; - px[2] = text->common.blue; - px[3] = 255; - } - } - - b = x - (s_one - 1) / 2; - for(cx = b; cx < b + (s_one - 1) / 2; cx++) { - int w = (cx - b) * 2 + 1; - int b2 = y + (s_one - w) / 2; - for(cy = b2; cy < b2 + w; cy++) { - unsigned char* px; - - px = &raw[(cy * stride + cx) * 4]; - px[0] = text->common.red; - px[1] = text->common.green; - px[2] = text->common.blue; - px[3] = 255; - } - } - - b = x + l_one; - for(cx = b; cx < b + (s_one - 1) / 2; cx++) { - int w = ((s_one - 1) / 2 - 1 - (cx - b)) * 2 + 1; - int b2 = y + (s_one - w) / 2; - for(cy = b2; cy < b2 + w; cy++) { - unsigned char* px; - - px = &raw[(cy * stride + cx) * 4]; - px[0] = text->common.red; - px[1] = text->common.green; - px[2] = text->common.blue; - px[3] = 255; - } - } -} - static void draw(MwWidget handle) { MwRect r; MwPoint p; - MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); - MwLLColor text = MwParseColor(handle, MwGetText(handle, MwNforeground)); - MwLLColor shadow = MwLightenColor(handle, base, MwDefaultShadow, MwDefaultShadow, MwDefaultShadow); + MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); + MwLLColor text = MwParseColor(handle, MwGetText(handle, MwNforeground)); int align; - const char* str = MwGetText(handle, MwNtext); - MwLLPixmap bgpx = MwGetVoid(handle, MwNbackgroundPixmap); - MwLabel lab = handle->internal; - int l_one = MwGetInteger(handle, MwNlength) - (MwGetInteger(handle, MwNlength) % 2); - int s_one = (l_one * 3 / 4) - ((l_one * 3 / 4) % 2) + 1; + const char* str = MwGetText(handle, MwNtext); + MwLLPixmap bgpx = MwGetVoid(handle, MwNbackgroundPixmap); if(str == NULL) str = ""; @@ -146,236 +28,41 @@ static void draw(MwWidget handle) { if(bgpx != NULL) MwLLDrawPixmap(handle->lowlevel, &r, bgpx); align = MwGetInteger(handle, MwNalignment); - if(MwGetInteger(handle, MwNsevenSegment)) { - MwLLPixmap px; - unsigned char* raw; - int w = 0, h = s_one * 3 + l_one * 2, i; - int x = 0; - - /* so - this mode cannot do unicode. - * but you wouldn't show unicode on 7 segment anyways - */ - - /* L - * S <---> - * - * S - * ^ - * | - * L | - * | - * v - */ - - for(i = 0; (hmgeti(lab->segment, i) != -1) || str[i] != 0; i++) { - if(i > 0 && ((hmgeti(lab->segment, i) != -1) || str[i] != '.')) w += Spacing; - if(hmgeti(lab->segment, i) != -1 || ('0' <= str[i] && str[i] <= '9') || ('A' <= str[i] && str[i] <= 'F') || ('a' <= str[i] && str[i] <= 'f')) { - w += l_one + s_one * 2; - } else if(str[i] == ':' || str[i] == ' ') { - w += s_one; - } - } - - w++; - h++; - - raw = malloc(w * h * 4); - memset(raw, 0, w * h * 4); - - for(i = 0; (hmgeti(lab->segment, i) != -1) || str[i] != 0; i++) { - if((hmgeti(lab->segment, i) != -1) || ('0' <= str[i] && str[i] <= '9') || ('A' <= str[i] && str[i] <= 'F') || ('a' <= str[i] && str[i] <= 'f')) { - int la = 0, lb = 0, lc = 0, ld = 0, le = 0, lf = 0, lg = 0; - int j; - - /* https://en.wikipedia.org/wiki/File:7_Segment_Display_with_Labeled_Segments.svg */ - - if(hmgeti(lab->segment, i) != -1) { - unsigned char c = hmget(lab->segment, i); - - if(c & (1 << 0)) la = 1; - if(c & (1 << 1)) lb = 1; - if(c & (1 << 2)) lc = 1; - if(c & (1 << 3)) ld = 1; - if(c & (1 << 4)) le = 1; - if(c & (1 << 5)) lf = 1; - if(c & (1 << 6)) lg = 1; - } else { - if(str[i] == '0') { - la = lb = lc = ld = le = lf = 1; - } else if(str[i] == '1') { - lb = lc = 1; - } else if(str[i] == '2') { - la = lb = ld = le = lg = 1; - } else if(str[i] == '3') { - la = lb = lc = ld = lg = 1; - } else if(str[i] == '4') { - lb = lc = lf = lg = 1; - } else if(str[i] == '5') { - la = lc = ld = lf = lg = 1; - } else if(str[i] == '6') { - la = lc = ld = le = lf = lg = 1; - } else if(str[i] == '7') { - la = lb = lc = 1; - } else if(str[i] == '8') { - la = lb = lc = ld = le = lf = lg = 1; - } else if(str[i] == '9') { - la = lb = lc = ld = lf = lg = 1; - } else if(str[i] == 'A' || str[i] == 'a') { - la = lb = lc = le = lf = lg = 1; - } else if(str[i] == 'B' || str[i] == 'b') { - lc = ld = le = lf = lg = 1; - } else if(str[i] == 'C' || str[i] == 'c') { - ld = le = lg = 1; - } else if(str[i] == 'D' || str[i] == 'd') { - lb = lc = ld = le = lg = 1; - } else if(str[i] == 'E' || str[i] == 'e') { - la = ld = le = lf = lg = 1; - } else if(str[i] == 'F' || str[i] == 'f') { - la = le = lf = lg = 1; - } - } - - for(j = 1; j >= 0; j--) { - MwLLColor cl = j == 1 ? shadow : text; - - if(la) draw_h(handle, raw, x + s_one + j, j, w, cl); - if(lb) draw_v(handle, raw, x + s_one + l_one + j, s_one + j, w, cl); - if(lc) draw_v(handle, raw, x + s_one + l_one + j, s_one * 2 + l_one + j, w, cl); - if(ld) draw_h(handle, raw, x + s_one + j, s_one * 2 + l_one * 2 + j, w, cl); - if(le) draw_v(handle, raw, x + j, s_one * 2 + l_one + j, w, cl); - if(lf) draw_v(handle, raw, x + j, s_one + j, w, cl); - if(lg) draw_h(handle, raw, x + s_one + j, s_one + l_one + j, w, cl); - } - - x += l_one + s_one * 2; - } else if(str[i] == ':') { - int cy, cx; - int j; - for(j = 1; j >= 0; j--) { - MwLLColor cl = j == 1 ? shadow : text; - for(cy = 1; cy < h - 1; cy++) { - int h = s_one / 2; - int c = (l_one - h) / 2 + s_one; - - int c1 = (c <= cy && cy <= (c + h)) ? 1 : 0; - int c2 = ((s_one + l_one + c) <= cy && cy <= (s_one + l_one + c + h)) ? 1 : 0; - - if(c1 || c2) { - for(cx = x; cx < x + s_one; cx++) { - unsigned char* px = &raw[((cy + j) * w + (cx + j)) * 4]; - px[0] = cl->common.red; - px[1] = cl->common.green; - px[2] = cl->common.blue; - px[3] = 255; - } - } - } - } - x += s_one; - } else if(str[i] == ' ') { - x += s_one; - } else if(str[i] == '.') { - int cy, cx; - int j; - for(j = 1; j >= 0; j--) { - MwLLColor cl = j == 1 ? shadow : text; - for(cy = h - (s_one - 1) / 2 - 1; cy < h; cy++) { - for(cx = x - Spacing - (s_one - 1) / 2 - 1; cx < (x - Spacing); cx++) { - unsigned char* px = &raw[((cy + j) * w + (cx + j)) * 4]; - px[0] = cl->common.red; - px[1] = cl->common.green; - px[2] = cl->common.blue; - px[3] = 255; - } - } - } - continue; - } - - x += Spacing; - } - - px = MwLoadRaw(handle, raw, w, h); - - r.y = (r.height - h) / 2; - r.height = h; - if(align == MwALIGNMENT_CENTER) { - r.x = (r.width - w) / 2; - } else if(align == MwALIGNMENT_BEGINNING) { - r.x = 0; - } else if(align == MwALIGNMENT_END) { - r.x = r.width - w; - } - r.width = w; - MwLLDrawPixmap(handle->lowlevel, &r, px); - - MwLLDestroyPixmap(px); - } else { - r.width -= MwGetInteger(handle, MwNleftPadding); - - if(align == MwALIGNMENT_CENTER) { - p.x = r.width / 2; - } else if(align == MwALIGNMENT_BEGINNING) { - p.x = MwTextWidth(handle, NULL, str) / 2; - } else if(align == MwALIGNMENT_END) { - p.x = r.width - MwTextWidth(handle, NULL, str) / 2; - } - p.y = r.height / 2; - - p.x += MwGetInteger(handle, MwNleftPadding); - - p.x += 1; - p.y += 1; - MwDrawText(handle, NULL, &p, str, MwALIGNMENT_CENTER, shadow); - - p.x -= 1; - p.y -= 1; - MwDrawText(handle, NULL, &p, str, MwALIGNMENT_CENTER, text); + if(align == MwALIGNMENT_CENTER) { + p.x = r.width / 2; + } else if(align == MwALIGNMENT_BEGINNING) { + p.x = MwTextWidth(handle, str) / 2; + } else if(align == MwALIGNMENT_END) { + p.x = r.width - MwTextWidth(handle, str) / 2; } + p.y = r.height / 2; + MwDrawText(handle, &p, str, MwGetInteger(handle, MwNbold), MwALIGNMENT_CENTER, text); - MwLLFreeColor(shadow); MwLLFreeColor(text); MwLLFreeColor(base); } static void prop_change(MwWidget handle, const char* key) { - if(strcmp(key, MwNtext) == 0 || strcmp(key, MwNalignment) == 0 || strcmp(key, MwNsevenSegment) == 0 || strcmp(key, MwNlength) == 0 || strcmp(key, MwNleftPadding) == 0) MwForceRender(handle); -} - -static void mwLabelSetSevenSegmentImpl(MwWidget handle, int index, unsigned char data) { - MwLabel lab = handle->internal; - - hmput(lab->segment, index, data); -} - -static void func_handler(MwWidget handle, const char* name, void* out, va_list va) { - (void)out; - - if(strcmp(name, "mwLabelSetSevenSegment") == 0) { - int index = va_arg(va, int); - int data = va_arg(va, int); - - mwLabelSetSevenSegmentImpl(handle, index, data); - } + if(strcmp(key, MwNtext) == 0 || strcmp(key, MwNalignment) == 0) MwForceRender(handle); } MwClassRec MwLabelClassRec = { - wcreate, /* create */ - destroy, /* destroy */ - draw, /* draw */ - NULL, /* click */ - NULL, /* parent_resize */ - prop_change, /* prop_change */ - NULL, /* mouse_move */ - NULL, /* mouse_up */ - NULL, /* mouse_down */ - NULL, /* key */ - func_handler, /* execute */ - NULL, /* tick */ - NULL, /* resize */ - NULL, /* children_update */ - NULL, /* children_prop_change */ - NULL, /* clipboard */ + create, /* create */ + NULL, /* destroy */ + draw, /* draw */ + NULL, /* click */ + NULL, /* parent_resize */ + prop_change, /* prop_change */ + NULL, /* mouse_move */ + NULL, /* mouse_up */ + NULL, /* mouse_down */ + NULL, /* key */ + NULL, /* execute */ + NULL, /* tick */ + NULL, /* resize */ + NULL, /* children_update */ + NULL, /* children_prop_change */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/listbox.c b/src/widget/listbox.c index 6f2a9db2a..785468d06 100644 --- a/src/widget/listbox.c +++ b/src/widget/listbox.c @@ -4,8 +4,6 @@ #define Padding 2 -#define Font MwFLBuildFont(MwFLFlagMonospace) - MwListBoxPacket* MwListBoxCreatePacket(void) { MwListBoxPacket* packet = malloc(sizeof(*packet)); memset(packet, 0, sizeof(*packet)); @@ -119,20 +117,20 @@ static void vscroll_changed(MwWidget handle, void* user, void* call) { } static void frame_mouse_down(MwWidget handle, void* user, void* call) { - MwListBox lb = handle->parent->internal; - MwMouse* m = call; + MwListBox lb = handle->parent->internal; + MwLLMouse* m = call; (void)user; - if(m->button == MwMOUSE_LEFT) { + if(m->button == MwLLMouseLeft) { int st = 0; int i; int y = MwDefaultBorderWidth(handle); int h = MwGetInteger(handle, MwNheight); st = get_first_entry(handle->parent, lb); - for(i = 0; (st + i) < arrlen(lb->list) && i < (h - MwDefaultBorderWidth(handle) * 2) / (MwTextHeight(handle, Font, "M") + Padding) + 2; i++) { - if(y <= m->point.y && m->point.y <= (y + MwTextHeight(handle, Font, "M") + Padding)) { + for(i = 0; (st + i) < arrlen(lb->list) && i < (h - MwDefaultBorderWidth(handle) * 2) / (MwTextHeight(handle, "M") + Padding) + 2; i++) { + if(y <= m->point.y && m->point.y <= (y + MwTextHeight(handle, "M") + Padding)) { unsigned long t; int old = MwGetInteger(handle->parent, MwNvalue); @@ -140,12 +138,12 @@ static void frame_mouse_down(MwWidget handle, void* user, void* call) { if((((t = MwTimeGetTick()) - lb->click_time) < MwDoubleClickTimeout && old == st + i) || MwGetInteger(handle->parent, MwNsingleClickSelectable)) { int n = MwGetInteger(handle->parent, MwNvalue); - MwDispatchUserHandler(handle->parent, MwNlistBoxActivateHandler, &n); + MwDispatchUserHandler(handle->parent, MwNactivateHandler, &n); } lb->click_time = t; } - y += MwTextHeight(handle, Font, "M") + Padding; + y += MwTextHeight(handle, "M") + Padding; } MwForceRender(lb->frame); @@ -154,12 +152,12 @@ static void frame_mouse_down(MwWidget handle, void* user, void* call) { } static void frame_mouse_up(MwWidget handle, void* user, void* call) { - MwListBox lb = handle->parent->internal; - MwMouse* m = call; + MwListBox lb = handle->parent->internal; + MwLLMouse* m = call; (void)user; - if(m->button == MwMOUSE_LEFT) { + if(m->button == MwLLMouseLeft) { lb->pressed = 0; } } @@ -177,11 +175,11 @@ static void frame_mouse_move(MwWidget handle, void* user, void* call) { int h = MwGetInteger(handle, MwNheight); st = get_first_entry(handle->parent, lb); - for(i = 0; (st + i) < arrlen(lb->list) && i < (h - MwDefaultBorderWidth(handle) * 2) / (MwTextHeight(handle, Font, "M") + Padding) + 2; i++) { - if(y <= p->y && p->y <= (y + MwTextHeight(handle, Font, "M") + Padding)) { + for(i = 0; (st + i) < arrlen(lb->list) && i < (h - MwDefaultBorderWidth(handle) * 2) / (MwTextHeight(handle, "M") + Padding) + 2; i++) { + if(y <= p->y && p->y <= (y + MwTextHeight(handle, "M") + Padding)) { MwSetInteger(handle->parent, MwNvalue, st + i); } - y += MwTextHeight(handle, Font, "M") + Padding; + y += MwTextHeight(handle, "M") + Padding; } MwForceRender(lb->frame); @@ -218,7 +216,7 @@ static void frame_draw(MwWidget handle) { st = get_first_entry(handle->parent, lb); area = r.height - MwDefaultBorderWidth(handle) * 2; - ent = area / (MwTextHeight(handle, Font, "M") + Padding) + 2; + ent = area / (MwTextHeight(handle, "M") + Padding) + 2; for(i = st; i < arrlen(lb->list) && i < st + ent; i++) { int selected = MwGetInteger(handle->parent, MwNvalue) == i ? 1 : 0; @@ -229,20 +227,20 @@ static void frame_draw(MwWidget handle) { r2.x = MwDefaultBorderWidth(handle) + MwGetInteger(handle->parent, MwNleftPadding); r2.y = p.y; r2.width = r.width - r2.x; - r2.height = MwTextHeight(handle, Font, "M") + Padding; + r2.height = MwTextHeight(handle, "M") + Padding; MwDrawRect(handle, &r2, text2); handle->bgcolor = text2; } if(lb->list[i].pixmap != NULL) { MwRect r2; - int h = (lb->list[i].pixmap->common.height > (MwTextHeight(handle, Font, "M") + Padding)) ? (MwTextHeight(handle, Font, "M") + Padding) : lb->list[i].pixmap->common.height; + int h = (lb->list[i].pixmap->common.height > (MwTextHeight(handle, "M") + Padding)) ? (MwTextHeight(handle, "M") + Padding) : lb->list[i].pixmap->common.height; r2.x = MwDefaultBorderWidth(handle); - r2.y = p.y + (MwTextHeight(handle, Font, "M") + Padding - h) / 2; + r2.y = p.y + (MwTextHeight(handle, "M") + Padding - h) / 2; r2.width = h * lb->list[i].pixmap->common.width / lb->list[i].pixmap->common.height; r2.height = h; MwLLDrawPixmap(handle->lowlevel, &r2, lb->list[i].pixmap); } - p.y += (MwTextHeight(handle, Font, "M") + Padding) / 2; + p.y += (MwTextHeight(handle, "M") + Padding) / 2; p.x = MwDefaultBorderWidth(handle) + MwGetInteger(handle->parent, MwNleftPadding); for(j = 0; j < arrlen(lb->list[i].name); j++) { char* t = lb->list[i].name[j]; @@ -252,8 +250,8 @@ static void frame_draw(MwWidget handle) { if(t == NULL) t = ""; str = MwStringDuplicate(t); - if(MwUTF8Length(str) > (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M")) { - int ind = (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M"); + if(MwUTF8Length(str) > (get_col_width(lb, j) - l) / MwTextWidth(handle, "M")) { + int ind = (get_col_width(lb, j) - l) / MwTextWidth(handle, "M"); str[ind] = 0; if(ind > 3) memset(str + ind - 3, '.', 3); } @@ -261,26 +259,26 @@ static void frame_draw(MwWidget handle) { if(j == (arrlen(lb->list[i].name) - 1)) p.x -= MwDefaultBorderWidth(handle); if(arrlen(lb->alignment) <= j || lb->alignment[j] == MwALIGNMENT_BEGINNING) { p.x += 4; - MwDrawText(handle, Font, &p, str, MwALIGNMENT_BEGINNING, selected ? base2 : text2); + MwDrawText(handle, &p, str, 0, MwALIGNMENT_BEGINNING, selected ? base2 : text2); p.x -= 4; p.x += get_col_width(lb, j); } else if(lb->alignment[j] == MwALIGNMENT_CENTER) { p.x += (get_col_width(lb, j) - l) / 2; - MwDrawText(handle, Font, &p, str, MwALIGNMENT_CENTER, selected ? base2 : text2); + MwDrawText(handle, &p, str, 0, MwALIGNMENT_CENTER, selected ? base2 : text2); p.x += (get_col_width(lb, j) - l) / 2; p.x += l; } else if(lb->alignment[j] == MwALIGNMENT_END) { p.x += get_col_width(lb, j); p.x -= 4; - MwDrawText(handle, Font, &p, str, MwALIGNMENT_END, selected ? base2 : text2); + MwDrawText(handle, &p, str, 0, MwALIGNMENT_END, selected ? base2 : text2); p.x += 4; } free(str); if(j == 0) p.x -= MwGetInteger(handle->parent, MwNleftPadding); } - p.y += (MwTextHeight(handle, Font, "M") + Padding) / 2; + p.y += (MwTextHeight(handle, "M") + Padding) / 2; handle->bgcolor = NULL; } @@ -299,7 +297,7 @@ static void resize(MwWidget handle) { int ih, y; int m = 0; - y = MwGetInteger(handle, MwNhasHeading) ? (MwTextHeight(handle, NULL, "M") + MwDefaultBorderWidth(handle) * 2) : 0; + y = MwGetInteger(handle, MwNhasHeading) ? (MwTextHeight(handle, "M") + MwDefaultBorderWidth(handle) * 2) : 0; if(lb->vscroll == NULL) { lb->vscroll = MwVaCreateWidget(MwScrollBarClass, "vscroll", handle, w - 16, 0, 16, h, NULL); @@ -318,7 +316,7 @@ static void resize(MwWidget handle) { h -= y; - if(ih <= (h / (MwTextHeight(handle, Font, "M") + Padding))) { + if(ih <= (h / (MwTextHeight(handle, "M") + Padding))) { MwLLShow(lb->vscroll->lowlevel, 0); } else { MwLLShow(lb->vscroll->lowlevel, 1); @@ -342,12 +340,12 @@ static void resize(MwWidget handle) { h -= MwDefaultBorderWidth(handle) * 2; MwVaApply(lb->vscroll, - MwNareaShown, h / (MwTextHeight(handle, Font, "M") + Padding), + MwNareaShown, h / (MwTextHeight(handle, "M") + Padding), MwNmaxValue, ih, NULL); } -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwListBox lb = malloc(sizeof(*lb)); memset(lb, 0, sizeof(*lb)); @@ -402,7 +400,7 @@ static void draw(MwWidget handle) { r.x = x; r.y = 0; r.width = get_col_width(lb, i); - r.height = MwDefaultBorderWidth(handle) * 2 + MwTextHeight(handle, NULL, "M"); + r.height = MwDefaultBorderWidth(handle) * 2 + MwTextHeight(handle, "M"); MwDrawFrame(handle, &r, base, 0); x += MwDefaultBorderWidth(handle); @@ -410,15 +408,15 @@ static void draw(MwWidget handle) { if(arrlen(lb->alignment) <= i || lb->alignment[i] == MwALIGNMENT_BEGINNING) { p.x = 4 + x; p.y = r.y + r.height / 2; - MwDrawText(handle, NULL, &p, lb->list[0].name[i], MwALIGNMENT_BEGINNING, text); + MwDrawText(handle, &p, lb->list[0].name[i], 0, MwALIGNMENT_BEGINNING, text); } else if(lb->alignment[i] == MwALIGNMENT_CENTER) { p.x = x + r.width / 2; p.y = r.y + r.height / 2; - MwDrawText(handle, NULL, &p, lb->list[0].name[i], MwALIGNMENT_CENTER, text); + MwDrawText(handle, &p, lb->list[0].name[i], 0, MwALIGNMENT_CENTER, text); } else if(lb->alignment[i] == MwALIGNMENT_END) { p.x = x + r.width - 4; p.y = r.y + r.height / 2; - MwDrawText(handle, NULL, &p, lb->list[0].name[i], MwALIGNMENT_END, text); + MwDrawText(handle, &p, lb->list[0].name[i], 0, MwALIGNMENT_END, text); } x += r.width; @@ -595,7 +593,7 @@ static void tick(MwWidget handle) { } MwClassRec MwListBoxClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -610,7 +608,7 @@ MwClassRec MwListBoxClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/menu.c b/src/widget/menu.c index 1517591bc..ffb8bb60e 100644 --- a/src/widget/menu.c +++ b/src/widget/menu.c @@ -8,7 +8,7 @@ static void set_xywh(MwWidget handle) { int diff = MwDefaultBorderWidth(handle); diff = 0; - height = MwTextHeight(handle, NULL, "M") + 10; + height = MwTextHeight(handle, "M") + 10; MwVaApply(handle, MwNx, -diff, @@ -18,7 +18,7 @@ static void set_xywh(MwWidget handle) { NULL); } -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwMenu m = malloc(sizeof(*m)); m->name = NULL; @@ -71,8 +71,8 @@ static void destroy(MwWidget handle) { #define BEGIN_MENU_LOOP \ for(i = 0; i < arrlen(m->sub); i++) { \ int incr = m->sub[i]->name[0] == '?' ? 1 : 0; \ - int tw = MwTextWidth(handle, NULL, m->sub[i]->name + incr); \ - int th = MwTextHeight(handle, NULL, m->sub[i]->name + incr); \ + int tw = MwTextWidth(handle, m->sub[i]->name + incr); \ + int th = MwTextHeight(handle, m->sub[i]->name + incr); \ int in_area; \ \ if(incr) { \ @@ -104,7 +104,7 @@ static void draw(MwWidget handle) { MwDrawWidgetBack(handle, &r, base, 0, MwFALSE); } - MwDrawText(handle, MwFLBuildFont((m->sub[i]->wsub != NULL || (in_area && handle->pressed)) ? MwFLFlagBold : 0), &p, m->sub[i]->name + incr, MwALIGNMENT_BEGINNING, text); + MwDrawText(handle, &p, m->sub[i]->name + incr, m->sub[i]->wsub != NULL || (in_area && handle->pressed) ? 1 : 0, MwALIGNMENT_BEGINNING, text); END_MENU_LOOP; MwLLFreeColor(text); @@ -118,7 +118,7 @@ static void parent_resize(MwWidget handle) { static void mouse_down(MwWidget handle, void* ptr) { MENU_LOOP_DECL; - if(((MwMouse*)ptr)->button != MwMOUSE_LEFT) return; + if(((MwLLMouse*)ptr)->button != MwLLMouseLeft) return; BEGIN_MENU_LOOP; if(in_area) { @@ -129,7 +129,7 @@ static void mouse_down(MwWidget handle, void* ptr) { p2.y = p.y + th / 2 + 5; m->sub[i]->wsub = MwCreateWidget(MwSubMenuClass, "submenu", handle, 0, 0, 0, 0); - MwSubMenuAppear(m->sub[i]->wsub, m->sub[i], &p2, 0); + MwSubMenuAppear(m->sub[i]->wsub, m->sub[i], &p2); } else if(m->sub[i]->wsub != NULL && m->sub[i]->keep) { MwDestroyWidget(m->sub[i]->wsub); m->sub[i]->wsub = NULL; @@ -150,7 +150,7 @@ static void mouse_down(MwWidget handle, void* ptr) { static void mouse_up(MwWidget handle, void* ptr) { MENU_LOOP_DECL; - if(((MwMouse*)ptr)->button != MwMOUSE_LEFT) return; + if(((MwLLMouse*)ptr)->button != MwLLMouseLeft) return; BEGIN_MENU_LOOP; if(in_area && m->sub[i]->wsub != NULL) { @@ -189,7 +189,7 @@ static void func_handler(MwWidget handle, const char* name, void* out, va_list v } MwClassRec MwMenuClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -204,7 +204,7 @@ MwClassRec MwMenuClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/numberentry.c b/src/widget/numberentry.c index 69ee4c9d5..ccbdf1433 100644 --- a/src/widget/numberentry.c +++ b/src/widget/numberentry.c @@ -1,6 +1,6 @@ #include -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { int st; MwEntry e; @@ -98,14 +98,14 @@ static void mouse_up(MwWidget handle, void* ptr) { int h = MwGetInteger(handle, MwNheight); const char* str = MwGetText(handle, MwNtext); - if(((MwMouse*)ptr)->button != MwMOUSE_LEFT) return; + if(((MwLLMouse*)ptr)->button != MwLLMouseLeft) return; if(e->mouse.x >= (w - e->right)) { char s[512]; if(e->mouse.y >= (h / 2)) { - MwStringPrintIntoBuffer(s, 512, "%g", atof(str) - 1); + sprintf(s, "%g", atof(str) - 1); } else { - MwStringPrintIntoBuffer(s, 512, "%g", atof(str) + 1); + sprintf(s, "%g", atof(str) + 1); } MwSetText(handle, MwNtext, s); } @@ -116,7 +116,7 @@ static void mouse_up(MwWidget handle, void* ptr) { static void mouse_down(MwWidget handle, void* ptr) { MwEntry e = handle->internal; - if(((MwMouse*)ptr)->button != MwMOUSE_LEFT) return; + if(((MwLLMouse*)ptr)->button != MwLLMouseLeft) return; e->mouse = handle->mouse_point; @@ -128,7 +128,7 @@ static void prop_change(MwWidget handle, const char* prop) { } MwClassRec MwNumberEntryClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -143,7 +143,7 @@ MwClassRec MwNumberEntryClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/opengl.c b/src/widget/opengl.c index 252d7ad56..19a7c4d10 100644 --- a/src/widget/opengl.c +++ b/src/widget/opengl.c @@ -1,13 +1,6 @@ -#ifndef __APPLE__ - #include - -#ifndef MW_OPENGL -#define MW_OPENGL_NO_INCLUDE -#endif #include -#ifdef MW_OPENGL #ifdef USE_GDI typedef HGLRC(WINAPI* MWwglCreateContext)(HDC); typedef BOOL(WINAPI* MWwglMakeCurrent)(HDC, HGLRC); @@ -27,13 +20,10 @@ typedef struct gdiopengl { } gdiopengl_t; #endif #ifdef USE_X11 -typedef XVisualInfo* (*MWglXChooseVisual)(Display* dpy, int screen, - int* attribList); -typedef GLXContext (*MWglXCreateContext)(Display* dpy, XVisualInfo* vis, - GLXContext shareList, Bool direct); +typedef XVisualInfo* (*MWglXChooseVisual)(Display* dpy, int screen, int* attribList); +typedef GLXContext (*MWglXCreateContext)(Display* dpy, XVisualInfo* vis, GLXContext shareList, Bool direct); typedef void (*MWglXDestroyContext)(Display* dpy, GLXContext ctx); -typedef Bool (*MWglXMakeCurrent)(Display* dpy, GLXDrawable drawable, - GLXContext ctx); +typedef Bool (*MWglXMakeCurrent)(Display* dpy, GLXDrawable drawable, GLXContext ctx); typedef void (*MWglXSwapBuffers)(Display* dpy, GLXDrawable drawable); typedef void* (*MWglXGetProcAddress)(const GLubyte* procname); @@ -52,64 +42,8 @@ typedef struct x11opengl { } x11opengl_t; #endif -#ifdef USE_WAYLAND -#include -#include - -typedef struct waylandopengl { - EGLNativeWindowType egl_window_native; - EGLDisplay egl_display; - EGLContext egl_context; - EGLSurface egl_surface; - EGLConfig egl_config; - - void* gllib; - void* wlgllib; - EGLBoolean (*eglGetConfigs)(EGLDisplay display, - EGLConfig* configs, - EGLint config_size, - EGLint* num_config); - EGLBoolean (*eglInitialize)(EGLDisplay display, - EGLint* major, - EGLint* minor); - EGLContext (*eglCreateContext)(EGLDisplay display, - EGLConfig config, - EGLContext share_context, - EGLint const* attrib_list); - EGLBoolean (*eglMakeCurrent)(EGLDisplay display, - EGLSurface draw, - EGLSurface read, - EGLContext context); - void* (*eglGetProcAddress)(char const* procname); - EGLBoolean (*eglSwapBuffers)(EGLDisplay display, - EGLSurface surface); - EGLBoolean (*eglSwapInterval)(EGLDisplay display, - EGLint interval); - EGLint (*eglGetError)(void); - EGLBoolean (*eglBindAPI)(EGLenum api); - EGLDisplay (*eglGetDisplay)(NativeDisplayType native_display); - EGLSurface (*eglCreateWindowSurface)(EGLDisplay display, - EGLConfig config, - NativeWindowType native_window, - EGLint const* attrib_list); - EGLBoolean (*eglChooseConfig)(EGLDisplay display, - EGLint const* attrib_list, - EGLConfig* configs, - EGLint config_size, - EGLint* num_config); - - struct wl_egl_window* (*wl_egl_window_create)(struct wl_surface* surface, - int width, int height); - void (*wl_egl_window_resize)(struct wl_egl_window* egl_window, - int width, int height, - int dx, int dy); -} waylandopengl_t; -#endif - -static int wcreate(MwWidget handle) { - void* r = NULL; - MwWidget w = handle; - +static int create(MwWidget handle) { + void* r = NULL; #ifdef USE_GDI if(handle->lowlevel->common.type == MwLLBackendGDI) { PIXELFORMATDESCRIPTOR pfd; @@ -130,24 +64,23 @@ static int wcreate(MwWidget handle) { o->lib = MwDynamicOpen("opengl32.dll"); - o->wglCreateContext = - (MWwglCreateContext)(void*)MwDynamicSymbol(o->lib, "wglCreateContext"); - o->wglMakeCurrent = - (MWwglMakeCurrent)(void*)MwDynamicSymbol(o->lib, "wglMakeCurrent"); - o->wglDeleteContext = - (MWwglDeleteContext)(void*)MwDynamicSymbol(o->lib, "wglDeleteContext"); - o->wglGetProcAddress = (MWwglGetProcAddress)(void*)MwDynamicSymbol( - o->lib, "wglGetProcAddress"); + o->wglCreateContext = (MWwglCreateContext)(void*)MwDynamicSymbol(o->lib, "wglCreateContext"); + o->wglMakeCurrent = (MWwglMakeCurrent)(void*)MwDynamicSymbol(o->lib, "wglMakeCurrent"); + o->wglDeleteContext = (MWwglDeleteContext)(void*)MwDynamicSymbol(o->lib, "wglDeleteContext"); + o->wglGetProcAddress = (MWwglGetProcAddress)(void*)MwDynamicSymbol(o->lib, "wglGetProcAddress"); o->gl = o->wglCreateContext(o->dc); } #endif #ifdef USE_X11 if(handle->lowlevel->common.type == MwLLBackendX11) { - int attribs[5]; - const char* glpath[] = {"libGL.so", "/usr/local/lib/libGL.so", - "/usr/X11R7/lib/libGL.so", "/usr/pkg/lib/libGL.so"}; - int glincr = 0; + int attribs[5]; + const char* glpath[] = { + "libGL.so", + "/usr/local/lib/libGL.so", + "/usr/X11R7/lib/libGL.so", + "/usr/pkg/lib/libGL.so"}; + int glincr = 0; x11opengl_t* o = r = malloc(sizeof(*o)); attribs[0] = GLX_RGBA; @@ -156,176 +89,23 @@ static int wcreate(MwWidget handle) { attribs[3] = 24; attribs[4] = None; - while(glpath[glincr] != NULL && - (o->lib = MwDynamicOpen(glpath[glincr++])) == NULL); + while(glpath[glincr] != NULL && (o->lib = MwDynamicOpen(glpath[glincr++])) == NULL); - o->glXChooseVisual = - (MWglXChooseVisual)MwDynamicSymbol(o->lib, "glXChooseVisual"); - o->glXCreateContext = - (MWglXCreateContext)MwDynamicSymbol(o->lib, "glXCreateContext"); - o->glXDestroyContext = - (MWglXDestroyContext)MwDynamicSymbol(o->lib, "glXDestroyContext"); - o->glXMakeCurrent = - (MWglXMakeCurrent)MwDynamicSymbol(o->lib, "glXMakeCurrent"); - o->glXSwapBuffers = - (MWglXSwapBuffers)MwDynamicSymbol(o->lib, "glXSwapBuffers"); - o->glXGetProcAddress = - (MWglXGetProcAddress)MwDynamicSymbol(o->lib, "glXGetProcAddress"); + o->glXChooseVisual = (MWglXChooseVisual)MwDynamicSymbol(o->lib, "glXChooseVisual"); + o->glXCreateContext = (MWglXCreateContext)MwDynamicSymbol(o->lib, "glXCreateContext"); + o->glXDestroyContext = (MWglXDestroyContext)MwDynamicSymbol(o->lib, "glXDestroyContext"); + o->glXMakeCurrent = (MWglXMakeCurrent)MwDynamicSymbol(o->lib, "glXMakeCurrent"); + o->glXSwapBuffers = (MWglXSwapBuffers)MwDynamicSymbol(o->lib, "glXSwapBuffers"); + o->glXGetProcAddress = (MWglXGetProcAddress)MwDynamicSymbol(o->lib, "glXGetProcAddress"); /* XXX: fix this */ - o->visual = o->glXChooseVisual(handle->lowlevel->x11.display, - DefaultScreen(handle->lowlevel->x11.display), - attribs); - o->gl = o->glXCreateContext(handle->lowlevel->x11.display, o->visual, NULL, - GL_TRUE); + o->visual = o->glXChooseVisual(handle->lowlevel->x11.display, DefaultScreen(handle->lowlevel->x11.display), attribs); + o->gl = o->glXCreateContext(handle->lowlevel->x11.display, o->visual, NULL, GL_TRUE); } #endif #ifdef USE_WAYLAND if(handle->lowlevel->common.type == MwLLBackendWayland) { - EGLint numConfigs; - EGLint majorVersion; - EGLint minorVersion; - EGLContext context; - EGLSurface surface; - EGLint fbAttribs[] = {EGL_SURFACE_TYPE, - EGL_WINDOW_BIT, - EGL_RENDERABLE_TYPE, - EGL_OPENGL_ES2_BIT, - EGL_RED_SIZE, - 8, - EGL_GREEN_SIZE, - 8, - EGL_BLUE_SIZE, - 8, - EGL_DEPTH_SIZE, - 24, - EGL_RENDERABLE_TYPE, - EGL_OPENGL_BIT, - EGL_NONE}; - EGLint contextAttribs[] = {EGL_CONTEXT_CLIENT_VERSION, - 1, - EGL_CONTEXT_MAJOR_VERSION, - 1, - EGL_CONTEXT_MINOR_VERSION, - 1, - EGL_NONE}; - EGLDisplay display; - waylandopengl_t* o = r = malloc(sizeof(*o)); - MwWaylandAlwaysRender = MwTRUE; - - o->gllib = MwDynamicOpen("libEGL.so"); - if(!o->gllib) { - printf("Could not load OpenGL widget under Wayland! libEGL.so missing.\n"); - return 1; - } - o->wlgllib = MwDynamicOpen("libwayland-egl.so"); - if(!o->gllib) { - printf("Could not load OpenGL widget under Wayland! libwayland-egl.so missing.\n"); - return 1; - } -#define EGL_FUNC(x) \ - o->x = MwDynamicSymbol(o->gllib, #x); \ - if(!o->x) { \ - printf("Could not load OpenGL widget under Wayland! " #x " missing.\n"); \ - return 1; \ - }; -#define WAYLAND_EGL_FUNC(x) \ - o->x = MwDynamicSymbol(o->wlgllib, #x); \ - if(!o->x) { \ - printf("Could not load OpenGL widget under Wayland! " #x " missing.\n"); \ - return 1; \ - }; - EGL_FUNC(eglGetConfigs) - EGL_FUNC(eglInitialize) - EGL_FUNC(eglCreateContext) - EGL_FUNC(eglMakeCurrent) - EGL_FUNC(eglGetProcAddress) - EGL_FUNC(eglSwapBuffers) - EGL_FUNC(eglSwapInterval) - EGL_FUNC(eglGetError) - EGL_FUNC(eglBindAPI) - EGL_FUNC(eglGetDisplay) - EGL_FUNC(eglCreateWindowSurface) - EGL_FUNC(eglChooseConfig) - WAYLAND_EGL_FUNC(wl_egl_window_create) - WAYLAND_EGL_FUNC(wl_egl_window_resize) - -#define eglGetConfigs o->eglGetConfigs -#define eglInitialize o->eglInitialize -#define eglCreateContext o->eglCreateContext -#define eglMakeCurrent o->eglMakeCurrent -#define eglGetProcAddress o->eglGetProcAddress -#define eglSwapBuffers o->eglSwapBuffers -#define eglSwapInterval o->eglSwapInterval -#define eglGetError o->eglGetError -#define wl_egl_window_create o->wl_egl_window_create -#define eglBindAPI o->eglBindAPI -#define eglGetDisplay o->eglGetDisplay -#define wl_egl_window_resize o->wl_egl_window_resize -#define eglCreateWindowSurface o->eglCreateWindowSurface -#define eglChooseConfig o->eglChooseConfig - - display = - eglGetDisplay((EGLNativeDisplayType)handle->lowlevel->wayland.display); - if(display == EGL_NO_DISPLAY) { - printf("ERROR: eglGetDisplay, %0X\n", eglGetError()); - return MwFALSE; - } - /* Initialize EGL */ - if(!eglInitialize(display, &majorVersion, &minorVersion)) { - printf("ERROR: eglInitialize, %0X\n", eglGetError()); - return MwFALSE; - } - - /* Get configs */ - if((eglGetConfigs(display, NULL, 0, &numConfigs) != EGL_TRUE) || - (numConfigs == 0)) { - printf("ERROR: eglGetConfigs, %0X\n", eglGetError()); - return MwFALSE; - } - - /* Choose config */ - if((eglChooseConfig(display, fbAttribs, &o->egl_config, 1, &numConfigs) != - EGL_TRUE) || - (numConfigs != 1)) { - printf("ERROR: eglChooseConfig, %0X\n", eglGetError()); - return MwFALSE; - } - - o->egl_window_native = (EGLNativeWindowType)wl_egl_window_create( - handle->lowlevel->wayland.framebuffer.surface, - handle->lowlevel->wayland.ww, handle->lowlevel->wayland.wh); - if(!o->egl_window_native) { - printf("ERROR: wl_egl_window_create, EGL_NO_SURFACE\n"); - return MwFALSE; - } - - /* Create a surface */ - surface = eglCreateWindowSurface(display, o->egl_config, - o->egl_window_native, NULL); - if(surface == EGL_NO_SURFACE) { - printf("ERROR: eglCreateWindowSurface, %0X\n", eglGetError()); - return MwFALSE; - } - - eglBindAPI(EGL_OPENGL_API); - - /* Create a GL context */ - context = eglCreateContext(display, o->egl_config, EGL_NO_CONTEXT, - contextAttribs); - if(context == EGL_NO_CONTEXT) { - printf("ERROR: eglCreateContext, %0X\n", eglGetError()); - return MwFALSE; - } - - if(!eglMakeCurrent(display, surface, surface, context)) { - printf("ERROR: eglMakeCurrent (setup): %0X\n", eglGetError()); - } - eglSwapInterval(o->egl_display, 0); - - o->egl_display = display; - o->egl_surface = surface; - o->egl_context = context; + /* todo */ } #endif @@ -334,17 +114,10 @@ static int wcreate(MwWidget handle) { MwSetDefault(handle); - while(w->parent != NULL) - w = w->parent; - - w->berserk++; - return 0; } static void destroy(MwWidget handle) { - MwWidget w = handle; - #ifdef USE_GDI if(handle->lowlevel->common.type == MwLLBackendGDI) { gdiopengl_t* o = handle->internal; @@ -372,65 +145,27 @@ static void destroy(MwWidget handle) { } #endif - while(w->parent != NULL) - w = w->parent; - - w->berserk--; - free(handle->internal); } static void mwOpenGLMakeCurrentImpl(MwWidget handle) { - /* these swap interval functions belonging here actually stink! */ - #ifdef USE_GDI if(handle->lowlevel->common.type == MwLLBackendGDI) { - gdiopengl_t* o = handle->internal; - BOOL(APIENTRY * swap_interval_ext)(int) = NULL; + gdiopengl_t* o = handle->internal; o->wglMakeCurrent(o->dc, o->gl); - - if((swap_interval_ext = - MwOpenGLGetProcAddress(handle, "wglSwapIntervalEXT")) != NULL) { - swap_interval_ext(1); - } } #endif #ifdef USE_X11 if(handle->lowlevel->common.type == MwLLBackendX11) { - x11opengl_t* o = handle->internal; - void (*swap_interval_ext)(Display*, GLXDrawable, int) = NULL; - void (*swap_interval_mesa)(unsigned int) = NULL; - void (*swap_interval_sgi)(int) = NULL; + x11opengl_t* o = handle->internal; - o->glXMakeCurrent(handle->lowlevel->x11.display, - handle->lowlevel->x11.window, o->gl); - - if((swap_interval_ext = - MwOpenGLGetProcAddress(handle, "glXSwapIntervalEXT")) != NULL) { - swap_interval_ext(handle->lowlevel->x11.display, - handle->lowlevel->x11.window, 1); - } - - if((swap_interval_mesa = - MwOpenGLGetProcAddress(handle, "glXSwapIntervalMESA")) != NULL) { - swap_interval_mesa(1); - } - - if((swap_interval_sgi = - MwOpenGLGetProcAddress(handle, "glXSwapIntervalSGI")) != NULL) { - swap_interval_sgi(1); - } + o->glXMakeCurrent(handle->lowlevel->x11.display, handle->lowlevel->x11.window, o->gl); } #endif #ifdef USE_WAYLAND if(handle->lowlevel->common.type == MwLLBackendWayland) { - waylandopengl_t* o = handle->internal; - - if(!eglMakeCurrent(o->egl_display, o->egl_surface, o->egl_surface, - o->egl_context)) { - printf("ERROR: eglMakeCurrent, %0X\n", eglGetError()); - } + /* todo */ } #endif } @@ -447,20 +182,12 @@ static void mwOpenGLSwapBufferImpl(MwWidget handle) { if(handle->lowlevel->common.type == MwLLBackendX11) { x11opengl_t* o = handle->internal; - o->glXSwapBuffers(handle->lowlevel->x11.display, - handle->lowlevel->x11.window); + o->glXSwapBuffers(handle->lowlevel->x11.display, handle->lowlevel->x11.window); } #endif #ifdef USE_WAYLAND if(handle->lowlevel->common.type == MwLLBackendWayland) { - waylandopengl_t* o = handle->internal; - eglSwapInterval(o->egl_display, 0); - if(!eglSwapBuffers(o->egl_display, o->egl_surface)) { - printf("ERROR: eglSwapBuffers, %0X\n", eglGetError()); - }; - wl_egl_window_resize((struct wl_egl_window*)o->egl_window_native, - handle->lowlevel->wayland.ww, - handle->lowlevel->wayland.wh, 0, 0); + /* todo */ } #endif } @@ -482,15 +209,13 @@ static void* mwOpenGLGetProcAddressImpl(MwWidget handle, const char* name) { #endif #ifdef USE_WAYLAND if(handle->lowlevel->common.type == MwLLBackendWayland) { - waylandopengl_t* o = handle->internal; - return eglGetProcAddress(name); + /* todo */ } #endif return NULL; } -static void func_handler(MwWidget handle, const char* name, void* out, - va_list va) { +static void func_handler(MwWidget handle, const char* name, void* out, va_list va) { if(strcmp(name, "mwOpenGLMakeCurrent") == 0) { mwOpenGLMakeCurrentImpl(handle); } @@ -503,28 +228,25 @@ static void func_handler(MwWidget handle, const char* name, void* out, } } -MwClassRec MwOpenGLClassRec = {wcreate, /* create */ - destroy, /* destroy */ - NULL, /* draw */ - NULL, /* click */ - NULL, /* parent_resize */ - NULL, /* prop_change */ - NULL, /* mouse_move */ - NULL, /* mouse_up */ - NULL, /* mouse_down */ - NULL, /* key */ - func_handler, /* execute */ - NULL, /* tick */ - NULL, /* resize */ - NULL, /* children_update */ - NULL, /* children_prop_change */ - NULL, /* clipboard */ - NULL, NULL, NULL, NULL}; -MwClass MwOpenGLClass = &MwOpenGLClassRec; -#else -MWDECL MwClass MwOpenGLClass; - -MwClass MwOpenGLClass = NULL; -#endif - -#endif +MwClassRec MwOpenGLClassRec = { + create, /* create */ + destroy, /* destroy */ + NULL, /* draw */ + NULL, /* click */ + NULL, /* parent_resize */ + NULL, /* prop_change */ + NULL, /* mouse_move */ + NULL, /* mouse_up */ + NULL, /* mouse_down */ + NULL, /* key */ + func_handler, /* execute */ + NULL, /* tick */ + NULL, /* resize */ + NULL, /* children_update */ + NULL, /* children_prop_change */ + NULL, + NULL, + NULL, + NULL, + NULL}; +MwClass MwOpenGLClass = &MwOpenGLClassRec; diff --git a/src/widget/opengl_cocoa.m b/src/widget/opengl_cocoa.m deleted file mode 100644 index a4d2bfa2f..000000000 --- a/src/widget/opengl_cocoa.m +++ /dev/null @@ -1,131 +0,0 @@ -#include "Mw/BaseTypes.h" -#include "Mw/Core.h" -#include "Mw/LowLevel/Cocoa.h" -#include "Mw/StringDefs.h" -#include -#include -#import - -@interface MacOpenGLWidget : NSObject { - NSOpenGLPixelFormat* pixelFormat; - NSOpenGLContext* glc; - MilskoCocoa* _win; -} - -- (MacOpenGLWidget*)initWithWindow:(MilskoCocoa*)w; -- (void)destroy; -- (void)makeCurrent; -- (void)swapBuffer; -- (void*)getProcAddressWithName:(const char*)name; - -@end - -static int wcreate(MwWidget handle) { - void* r = NULL; - MwWidget w = handle; - - int x = MwGetInteger(w, MwNx); - int y = MwGetInteger(w, MwNy); - int width = MwGetInteger(w, MwNwidth); - int height = MwGetInteger(w, MwNheight); - - printf("%d %d\n", width, height); - - handle->internal = - [[MacOpenGLWidget alloc] initWithWindow:handle->lowlevel->cocoa.real]; - handle->lowlevel->common.copy_buffer = 0; - - MwSetDefault(handle); - - while(w->parent != NULL) - w = w->parent; - - w->berserk++; - - return 0; -} - -static void destroy(MwWidget handle) { - [(MacOpenGLWidget*)handle->internal destroy]; -} - -static void mwOpenGLMakeCurrentImpl(MwWidget handle) { - [(MacOpenGLWidget*)handle->internal makeCurrent]; -} - -static void mwOpenGLSwapBufferImpl(MwWidget handle) { - [(MacOpenGLWidget*)handle->internal swapBuffer]; -} - -static void* mwOpenGLGetProcAddressImpl(MwWidget handle, const char* name) { - return [(MacOpenGLWidget*)handle->internal getProcAddressWithName:name]; -} - -static void func_handler(MwWidget handle, const char* name, void* out, - va_list va) { - if(strcmp(name, "mwOpenGLMakeCurrent") == 0) { - mwOpenGLMakeCurrentImpl(handle); - } - if(strcmp(name, "mwOpenGLSwapBuffer") == 0) { - mwOpenGLSwapBufferImpl(handle); - } - if(strcmp(name, "mwOpenGLGetProcAddress") == 0) { - const char* _name = va_arg(va, const char*); - *(void**)out = mwOpenGLGetProcAddressImpl(handle, _name); - } -} - -@implementation MacOpenGLWidget - -- (MacOpenGLWidget*)initWithWindow:(MilskoCocoa*)w { - NSOpenGLPixelFormatAttribute pixelFormatAttributes[] = { - NSOpenGLPFAColorSize, 24, - NSOpenGLPFAStencilSize, 8, - NSOpenGLPFAAlphaSize, 8, - NSOpenGLPFADoubleBuffer, NSOpenGLPFAAccelerated, - NSOpenGLPFANoRecovery, 0}; - self->pixelFormat = - [[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes]; - self->glc = - [[NSOpenGLContext alloc] initWithFormat:pixelFormat - shareContext:nil]; - [self->glc setView:[w getView]]; - self->_win = w; - return self; -}; -- (void)destroy { -}; -- (void)makeCurrent { - [self->glc makeCurrentContext]; -}; -- (void)swapBuffer { - [self->glc flushBuffer]; -}; -- (void*)getProcAddressWithName:(const char*)name { - if(NSIsSymbolNameDefined(name)) { - return NSAddressOfSymbol(NSLookupAndBindSymbol(name)); - } else { - return NULL; - } -}; - -@end - -MwClassRec MwOpenGLClassRec = {wcreate, /* create */ - destroy, /* destroy */ - NULL, /* draw */ - NULL, /* click */ - NULL, /* parent_resize */ - NULL, /* prop_change */ - NULL, /* mouse_move */ - NULL, /* mouse_up */ - NULL, /* mouse_down */ - NULL, /* key */ - func_handler, /* execute */ - NULL, /* tick */ - NULL, /* resize */ - NULL, /* children_update */ - NULL, /* children_prop_change */ - NULL, /* clipboard */ - NULL, NULL, NULL, NULL}; -MwClass MwOpenGLClass = &MwOpenGLClassRec; diff --git a/src/widget/progressbar.c b/src/widget/progressbar.c index dedd7a911..bd036dd3d 100644 --- a/src/widget/progressbar.c +++ b/src/widget/progressbar.c @@ -1,6 +1,6 @@ #include -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwSetDefault(handle); MwVaApply(handle, MwNminValue, 0, @@ -46,7 +46,7 @@ static void prop_change(MwWidget handle, const char* key) { } MwClassRec MwProgressBarClassRec = { - wcreate, /* create */ + create, /* create */ NULL, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -61,7 +61,7 @@ MwClassRec MwProgressBarClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/radiobox.c b/src/widget/radiobox.c index 1342232e5..a6f78f9d5 100644 --- a/src/widget/radiobox.c +++ b/src/widget/radiobox.c @@ -2,7 +2,7 @@ #include "../../external/stb_ds.h" -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNchecked, 0); @@ -47,7 +47,7 @@ static void prop_change(MwWidget handle, const char* key) { } MwClassRec MwRadioBoxClassRec = { - wcreate, /* create */ + create, /* create */ NULL, /* destroy */ draw, /* draw */ click, /* click */ @@ -62,7 +62,7 @@ MwClassRec MwRadioBoxClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/scrollbar.c b/src/widget/scrollbar.c index 58ed578b2..254e05beb 100644 --- a/src/widget/scrollbar.c +++ b/src/widget/scrollbar.c @@ -1,7 +1,13 @@ #include -static int wcreate(MwWidget handle) { - MwScrollBar scr = malloc(sizeof(*scr)); +typedef struct scrollbar { + MwPoint point; + int drag; + int pos; +} scrollbar_t; + +static int create(MwWidget handle) { + scrollbar_t* scr = malloc(sizeof(*scr)); handle->internal = scr; @@ -54,10 +60,10 @@ static void add_value(MwWidget handle, int mul) { } static void draw(MwWidget handle) { - MwRect r, rt, rbar; - MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); - MwLLColor dark = MwLightenColor(handle, base, -64, -64, -64); - MwScrollBar scr = handle->internal; + MwRect r, rt, rbar; + MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); + MwLLColor dark = MwLightenColor(handle, base, -64, -64, -64); + scrollbar_t* scr = handle->internal; int or ; int uy, dy, ux, dx; MwLLPixmap bgpx = MwGetVoid(handle, MwNbackgroundPixmap); @@ -131,15 +137,15 @@ static void draw(MwWidget handle) { } } - if(rbar.height >= 0) MwDrawWidgetBack(handle, &rbar, base, 0, MwTRUE); + MwDrawWidgetBack(handle, &rbar, base, 0, MwTRUE); MwLLFreeColor(dark); MwLLFreeColor(base); } static void mouse_move(MwWidget handle) { - int or = MwGetInteger(handle, MwNorientation); - MwScrollBar scr = handle->internal; + int or = MwGetInteger(handle, MwNorientation); + scrollbar_t* scr = handle->internal; if(!handle->pressed) return; @@ -166,13 +172,13 @@ static void mouse_move(MwWidget handle) { } static void mouse_down(MwWidget handle, void* ptr) { - int ww = MwGetInteger(handle, MwNwidth); - int wh = MwGetInteger(handle, MwNheight); - int or = MwGetInteger(handle, MwNorientation); - MwScrollBar scr = handle->internal; - MwMouse* m = ptr; + int ww = MwGetInteger(handle, MwNwidth); + int wh = MwGetInteger(handle, MwNheight); + int or = MwGetInteger(handle, MwNorientation); + scrollbar_t* scr = handle->internal; + MwLLMouse* m = ptr; - if(m->button == MwMOUSE_WHEELUP) { + if(m->button == MwLLMouseWheelUp) { int min = MwGetInteger(handle, MwNminValue); int val = MwGetInteger(handle, MwNvalue); int diff = MwGetInteger(handle, MwNareaShown); @@ -184,7 +190,7 @@ static void mouse_down(MwWidget handle, void* ptr) { MwSetInteger(handle, MwNvalue, val); MwSetInteger(handle, MwNchangedBy, -diff); MwDispatchUserHandler(handle, MwNchangedHandler, NULL); - } else if(m->button == MwMOUSE_WHEELDOWN) { + } else if(m->button == MwLLMouseWheelDown) { int max = MwGetInteger(handle, MwNmaxValue); int val = MwGetInteger(handle, MwNvalue); int diff = MwGetInteger(handle, MwNareaShown); @@ -197,7 +203,7 @@ static void mouse_down(MwWidget handle, void* ptr) { MwSetInteger(handle, MwNchangedBy, diff); MwDispatchUserHandler(handle, MwNchangedHandler, NULL); } - if(m->button != MwMOUSE_LEFT) return; + if(m->button != MwLLMouseLeft) return; scr->point = handle->mouse_point; scr->drag = 0; @@ -257,7 +263,7 @@ static void func_handler(MwWidget handle, const char* name, void* out, va_list v } MwClassRec MwScrollBarClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -272,7 +278,7 @@ MwClassRec MwScrollBarClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/separator.c b/src/widget/separator.c index 15919d0ed..5800ba302 100644 --- a/src/widget/separator.c +++ b/src/widget/separator.c @@ -1,6 +1,6 @@ #include -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNorientation, MwHORIZONTAL); @@ -35,7 +35,7 @@ static void prop_change(MwWidget handle, const char* key) { } MwClassRec MwSeparatorClassRec = { - wcreate, /* create */ + create, /* create */ NULL, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -50,7 +50,7 @@ MwClassRec MwSeparatorClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/submenu.c b/src/widget/submenu.c index c937a9ca4..09a02744e 100644 --- a/src/widget/submenu.c +++ b/src/widget/submenu.c @@ -2,11 +2,10 @@ #include "../../external/stb_ds.h" -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwLLBeginStateChange(handle->lowlevel); MwSetDefault(handle); - MwSetInteger(handle, MwNleftPadding, 0); return 0; } @@ -54,35 +53,33 @@ static void draw(MwWidget handle) { rc.x = MwDefaultBorderWidth(handle) * 2; rc.y = p.y; - rc.width = r.width - (rc.x * 2) - MwGetInteger(handle, MwNleftPadding); - rc.height = 2; + rc.width = r.width - (rc.x * 2); + rc.height = MwDefaultBorderWidth(handle) * 2; - rc.x += MwGetInteger(handle, MwNleftPadding); + MwDrawFrame(handle, &rc, base, 1); - MwDrawFrameEx(handle, &rc, base, 1, 1, 0, 0); - - p.y += 2 + 1; + p.y += MwDefaultBorderWidth(handle) * 2 + 1; } else { - int tw = MwTextWidth(handle, NULL, menu->sub[i]->name); - int th = MwTextHeight(handle, NULL, menu->sub[i]->name); + int tw = MwTextWidth(handle, menu->sub[i]->name); + int th = MwTextHeight(handle, menu->sub[i]->name); if(menu->sub[i]->wsub != NULL) { - r.x = MwGetInteger(handle, MwNleftPadding); + r.x = 0; r.y = p.y - 3; - r.width = MwGetInteger(handle, MwNwidth) - MwGetInteger(handle, MwNleftPadding); + r.width = tw + 15 + 5 * 2; r.height = th + 3 * 2; MwDrawWidgetBack(handle, &r, base, 0, MwTRUE); } - p.x = 5 + tw / 2 + MwGetInteger(handle, MwNleftPadding); + p.x = 5 + tw / 2; p.y += th / 2; - MwDrawText(handle, MwFLBuildFont(menu->sub[i]->wsub != NULL ? MwFLFlagBold : 0), &p, menu->sub[i]->name, MwALIGNMENT_CENTER, text); + MwDrawText(handle, &p, menu->sub[i]->name, menu->sub[i]->wsub != NULL ? 1 : 0, MwALIGNMENT_CENTER, text); if(arrlen(menu->sub[i]->sub) > 0) { MwRect tr; - tr.x = MwGetInteger(handle, MwNwidth) - MwDefaultBorderWidth(handle) - 11 - 2; + tr.x = p.x + tw / 2 + 5; tr.y = p.y - th / 2 + 2; tr.width = tr.height = 11; @@ -110,20 +107,16 @@ static void click(MwWidget handle) { rc.x = 5; rc.y = 3; for(i = 0; i < arrlen(menu->sub); i++) { - int tw = MwTextWidth(handle, NULL, menu->sub[i]->name); + int tw = MwTextWidth(handle, menu->sub[i]->name); if(tw > ww) ww = tw; } rc.width = ww + 15; for(i = 0; i < arrlen(menu->sub); i++) { - int th = MwTextHeight(handle, NULL, menu->sub[i]->name); + int th = MwTextHeight(handle, menu->sub[i]->name); rc.height = th; - if(strcmp(menu->sub[i]->name, "----") == 0) { - rc.height = 2 - 1; - } - - if(MwGetInteger(handle, MwNleftPadding) <= handle->mouse_point.x && rc.y <= handle->mouse_point.y && handle->mouse_point.y <= (int)(rc.y + rc.height)) { + if(rc.x <= handle->mouse_point.x && rc.y <= handle->mouse_point.y && handle->mouse_point.x <= (int)(rc.x + rc.width) && handle->mouse_point.y <= (int)(rc.y + rc.height)) { if(menu->sub[i]->wsub == NULL && arrlen(menu->sub[i]->sub) > 0) { MwPoint p; int j; @@ -133,14 +126,14 @@ static void click(MwWidget handle) { menu->sub[j]->wsub = NULL; } - p.x = MwGetInteger(handle, MwNwidth); + p.x = rc.x + rc.width + 3; p.y = rc.y - 3; menu->sub[i]->wsub = MwCreateWidget(MwSubMenuClass, "submenu", handle, 0, 0, 0, 0); - MwSubMenuAppear(menu->sub[i]->wsub, menu->sub[i], &p, 0); + MwSubMenuAppear(menu->sub[i]->wsub, menu->sub[i], &p); i = -1; } else if(menu->sub[i]->wsub != NULL && arrlen(menu->sub[i]->sub) > 0) { - while(w->parent->widget_class == MwSubMenuClass) w = w->parent; + while(w->parent->widget_class != MwMenuClass) w = w->parent; MwDestroyWidget(menu->sub[i]->wsub); menu->sub[i]->wsub = NULL; @@ -149,7 +142,7 @@ static void click(MwWidget handle) { MwForceRender(handle); } else if(strcmp(menu->sub[i]->name, "----") != 0 && arrlen(menu->sub[i]->sub) == 0) { - while(w->parent->widget_class == MwSubMenuClass) w = w->parent; + while(w->parent->widget_class != MwMenuClass) w = w->parent; MwGetBeforeStep(w, &jmp); MwDestroyWidget(w); @@ -166,82 +159,48 @@ static void click(MwWidget handle) { } } -static void mwSubMenuAppearImpl(MwWidget handle, MwMenu menu, MwPoint* point, int diff_calc) { - MwRect rc, sz; - MwPoint p = *point; - - MwSubMenuGetSize(handle, menu, &sz); - - MwGetScreenSize(handle, &rc); +static void mwSubMenuAppearImpl(MwWidget handle, MwMenu menu, MwPoint* point) { + int i, w = 0, h = 0; handle->internal = menu; - if(diff_calc) { - p.y = p.y - sz.height; - } - MwLLMakeToolWindow(handle->lowlevel); - MwLLDetach(handle->lowlevel, &p); - - if(handle->lowlevel->common.coordinate_type == MwCOORDINATE_GLOBAL) { - if(MwGetInteger(handle, MwNy) + sz.height > rc.height) { - MwVaApply(handle, - MwNy, rc.height - sz.height, - NULL); - } - } - + MwLLDetach(handle->lowlevel, point); MwLLEndStateChange(handle->lowlevel); - MwVaApply(handle, - MwNwidth, sz.width, - MwNheight, sz.height, - NULL); -} - -static void mwSubMenuGetSizeImpl(MwWidget handle, MwMenu menu, MwRect* rect) { - int i; - - rect->width = 0; - rect->height = 0; - for(i = 0; i < arrlen(menu->sub); i++) { if(strcmp(menu->sub[i]->name, "----") == 0) { - rect->height += 2 + 2; + h += MwDefaultBorderWidth(handle) * 2 + 2; } else { - int tw = MwTextWidth(handle, NULL, menu->sub[i]->name); - rect->height += MwTextHeight(handle, NULL, menu->sub[i]->name) + 3; - if(tw > rect->width) { - rect->width = tw; + int tw = MwTextWidth(handle, menu->sub[i]->name); + h += MwTextHeight(handle, menu->sub[i]->name) + 3; + if(tw > w) { + w = tw; } } } - rect->width += MwGetInteger(handle, MwNleftPadding); + w += 10 + 15; + h += 3; - rect->width += 10 + 15; - rect->height += 3; - - rect->width += 16; + MwVaApply(handle, + MwNwidth, w, + MwNheight, h, + NULL); } static void func_handler(MwWidget handle, const char* name, void* out, va_list va) { (void)out; if(strcmp(name, "mwSubMenuAppear") == 0) { - MwMenu menu = va_arg(va, MwMenu); - MwPoint* point = va_arg(va, MwPoint*); - int diff_calc = va_arg(va, int); - mwSubMenuAppearImpl(handle, menu, point, diff_calc); - } else if(strcmp(name, "mwSubMenuGetSize") == 0) { - MwMenu menu = va_arg(va, MwMenu); - MwRect* rect = va_arg(va, MwRect*); - mwSubMenuGetSizeImpl(handle, menu, rect); + MwMenu menu = va_arg(va, MwMenu); + MwPoint* point = va_arg(va, MwPoint*); + mwSubMenuAppearImpl(handle, menu, point); } } MwClassRec MwSubMenuClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ click, /* click */ @@ -256,7 +215,7 @@ MwClassRec MwSubMenuClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/treeview.c b/src/widget/treeview.c index 99f12e27e..27607ceeb 100644 --- a/src/widget/treeview.c +++ b/src/widget/treeview.c @@ -30,11 +30,11 @@ static void recursion(MwWidget handle, MwTreeViewEntry* tree, MwTreeViewEntry** if((*skip) > 0) { (*skip)--; skipped = 1; - if(p->y == MwDefaultBorderWidth(handle)) p->y -= MwTextHeight(handle, NULL, "M"); - } else if((*shared) < (MwGetInteger(handle, MwNheight) / MwTextHeight(handle, NULL, "M") + 2)) { + if(p->y == MwDefaultBorderWidth(handle)) p->y -= MwTextHeight(handle, "M"); + } else if((*shared) < (MwGetInteger(handle, MwNheight) / MwTextHeight(handle, "M") + 2)) { MwRect r; p->x += shift; - p->y += MwTextHeight(handle, NULL, "M") / 2 + LinePadding; + p->y += MwTextHeight(handle, "M") / 2 + LinePadding; if(tree->tree != NULL || shift > LineSpace) { l[0] = *p; @@ -47,9 +47,9 @@ static void recursion(MwWidget handle, MwTreeViewEntry* tree, MwTreeViewEntry** l[0] = *p; l[0].x -= LineSpace / 2; l[1] = l[0]; - l[0].y -= MwTextHeight(handle, NULL, "M") / 2 + LinePadding; + l[0].y -= MwTextHeight(handle, "M") / 2 + LinePadding; if(next) { - l[1].y += MwTextHeight(handle, NULL, "M") / 2; + l[1].y += MwTextHeight(handle, "M") / 2; } if(draw) MwLLLine(handle->lowlevel, &l[0], text2); } @@ -57,7 +57,7 @@ static void recursion(MwWidget handle, MwTreeViewEntry* tree, MwTreeViewEntry** r.width = OpenerSize; r.height = OpenerSize; r.x = p->x - LineSpace + (LineSpace - r.width) / 2; - r.y = p->y - MwTextHeight(handle, NULL, "M") / 2 + (MwTextHeight(handle, NULL, "M") - r.height) / 2; + r.y = p->y - MwTextHeight(handle, "M") / 2 + (MwTextHeight(handle, "M") - r.height) / 2; if(draw) { MwLLColor col = tree->opened ? MwLightenColor(handle, base, -8, -8, -8) : base; MwRect r2 = r; @@ -101,11 +101,11 @@ static void recursion(MwWidget handle, MwTreeViewEntry* tree, MwTreeViewEntry** } } if(tree->pixmap != NULL) { - r.height = MwTextHeight(handle, NULL, "M"); + r.height = MwTextHeight(handle, "M"); r.width = r.height * tree->pixmap->common.width / tree->pixmap->common.height; r.x = p->x; - r.y = p->y - MwTextHeight(handle, NULL, "M") / 2; + r.y = p->y - MwTextHeight(handle, "M") / 2; if(draw) MwLLDrawPixmap(handle->lowlevel, &r, tree->pixmap); } @@ -113,22 +113,22 @@ static void recursion(MwWidget handle, MwTreeViewEntry* tree, MwTreeViewEntry** if(draw) { if(tree->selected) { r.x = p->x; - r.y = p->y - MwTextHeight(handle, NULL, "M") / 2; + r.y = p->y - MwTextHeight(handle, "M") / 2; r.width = MwGetInteger(handle, MwNwidth) - MwGetInteger(handle, MwNleftPadding) - shift; - r.height = MwTextHeight(handle, NULL, "M"); + r.height = MwTextHeight(handle, "M"); MwDrawRect(handle, &r, text2); } handle->bgcolor = tree->selected ? text2 : base2; - MwDrawText(handle, NULL, p, tree->label, MwALIGNMENT_BEGINNING, tree->selected ? base2 : text2); + MwDrawText(handle, p, tree->label, 0, MwALIGNMENT_BEGINNING, tree->selected ? base2 : text2); handle->bgcolor = NULL; } else { - if(p->x <= mouse->x && mouse->x <= (p->x + MwTextWidth(handle, NULL, tree->label)) && (p->y - MwTextHeight(handle, NULL, "M") / 2) <= mouse->y && mouse->y <= (p->y + MwTextHeight(handle, NULL, "M") / 2)) { + if(p->x <= mouse->x && mouse->x <= (p->x + MwTextWidth(handle, tree->label)) && (p->y - MwTextHeight(handle, "M") / 2) <= mouse->y && mouse->y <= (p->y + MwTextHeight(handle, "M") / 2)) { unsigned long t; set_all(root, 0); tree->selected = 1; if(((t = MwTimeGetTick()) - tree->click_time) < MwDoubleClickTimeout || MwGetInteger(handle->parent, MwNsingleClickSelectable)) { - MwDispatchUserHandler(handle->parent, MwNtreeViewActivateHandler, tree); + MwDispatchUserHandler(handle->parent, MwNactivateHandler, tree); } tree->click_time = t; @@ -136,7 +136,7 @@ static void recursion(MwWidget handle, MwTreeViewEntry* tree, MwTreeViewEntry** } p->x -= MwGetInteger(handle->parent, MwNleftPadding); - p->y += MwTextHeight(handle, NULL, "M") / 2; + p->y += MwTextHeight(handle, "M") / 2; p->x -= shift; (*shared)++; @@ -145,7 +145,7 @@ static void recursion(MwWidget handle, MwTreeViewEntry* tree, MwTreeViewEntry** for(i = 0; i < arrlen(tree->tree); i++) { l[0] = *p; l[0].x += shift + LineSpace / 2; - l[0].y += MwTextHeight(handle, NULL, "M") - (MwTextHeight(handle, NULL, "M") - OpenerSize) / 2; + l[0].y += MwTextHeight(handle, "M") - (MwTextHeight(handle, "M") - OpenerSize) / 2; if(tree->tree[i]->tree != NULL) { l[0].y += OpenerSize / 2; } @@ -189,7 +189,7 @@ static void frame_draw(MwWidget handle) { r = r2; for(i = 0; i < arrlen(tv->tree); i++) { - if(shared > (r.height / MwTextHeight(handle, NULL, "M"))) break; + if(shared > (r.height / MwTextHeight(handle, "M"))) break; recursion(handle, tv->tree[i], tv->tree, base, text, base2, text2, &p, 0, LineSpace, &skip, &shared, 1, NULL); } @@ -213,11 +213,11 @@ static int recursive_length(MwTreeViewEntry** e) { static void frame_mouse_down(MwWidget handle, void* user, void* call) { MwTreeView tv = handle->parent->internal; - MwMouse* mouse = call; + MwLLMouse* mouse = call; (void)user; - if(mouse->button == MwMOUSE_LEFT) tv->pressed = mouse->point; + if(mouse->button == MwLLMouseLeft) tv->pressed = mouse->point; } static void resize(MwWidget handle); @@ -227,16 +227,16 @@ static void frame_mouse_up(MwWidget handle, void* user, void* call) { int shared = 0; int skip = MwGetInteger(tv->vscroll, MwNvalue) * (MwGetInteger(tv->vscroll, MwNmaxValue) - MwGetInteger(tv->vscroll, MwNareaShown)) / MwGetInteger(tv->vscroll, MwNmaxValue); MwPoint p; - MwMouse* mouse = call; + MwLLMouse* mouse = call; (void)user; - if(mouse->button == MwMOUSE_LEFT) { + if(mouse->button == MwLLMouseLeft) { int i; p.x = MwDefaultBorderWidth(tv->frame); p.y = MwDefaultBorderWidth(tv->frame); for(i = 0; i < arrlen(tv->tree); i++) { - if(shared > (MwGetInteger(tv->frame, MwNheight) / MwTextHeight(tv->frame, NULL, "M"))) break; + if(shared > (MwGetInteger(tv->frame, MwNheight) / MwTextHeight(tv->frame, "M"))) break; recursion(tv->frame, tv->tree[i], tv->tree, NULL, NULL, NULL, NULL, &p, 0, LineSpace, &skip, &shared, 0, &tv->pressed); } resize(handle->parent); @@ -267,7 +267,7 @@ static void resize(MwWidget handle) { ih = recursive_length(tv->tree); if(ih == 0) ih = 1; - if(ih <= (h / (LinePadding + MwTextHeight(handle, NULL, "M")))) { + if(ih <= (h / (LinePadding + MwTextHeight(handle, "M")))) { MwLLShow(tv->vscroll->lowlevel, 0); } else { MwLLShow(tv->vscroll->lowlevel, 1); @@ -292,12 +292,12 @@ static void resize(MwWidget handle) { } MwVaApply(tv->vscroll, - MwNareaShown, h / (LinePadding + MwTextHeight(handle, NULL, "M")), + MwNareaShown, h / (LinePadding + MwTextHeight(handle, "M")), MwNmaxValue, ih, NULL); } -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwTreeView tv = malloc(sizeof(*tv)); memset(tv, 0, sizeof(*tv)); @@ -481,7 +481,7 @@ static void tick(MwWidget handle) { } MwClassRec MwTreeViewClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -496,7 +496,7 @@ MwClassRec MwTreeViewClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/viewport.c b/src/widget/viewport.c index f05b18d5b..9bdf86017 100644 --- a/src/widget/viewport.c +++ b/src/widget/viewport.c @@ -74,7 +74,7 @@ static void resize(MwWidget handle) { NULL); } -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwViewport vp = malloc(sizeof(*vp)); memset(vp, 0, sizeof(*vp)); @@ -176,7 +176,7 @@ static void tick(MwWidget handle) { } MwClassRec MwViewportClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -191,7 +191,7 @@ MwClassRec MwViewportClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/src/widget/vulkan.c b/src/widget/vulkan.c index 1e67ea923..bda24bfff 100644 --- a/src/widget/vulkan.c +++ b/src/widget/vulkan.c @@ -1,24 +1,18 @@ #include +#include + +#include "../error_internal.h" /** * ioixd maintains this file. nishi doesn't know vulkan at all */ -#ifndef MW_VULKAN -#define MW_VULKAN_NO_INCLUDE -#endif -#include - -#ifdef MW_VULKAN #ifdef USE_GDI #define VK_USE_PLATFORM_WIN32_KHR 1 #endif #ifdef USE_X11 #define VK_USE_PLATFORM_XLIB_KHR 1 #endif -#ifdef USE_WAYLAND -#define VK_USE_PLATFORM_WAYLAND_KHR 1 -#endif #include #include @@ -28,12 +22,6 @@ #ifdef USE_X11 #include #endif -#ifdef USE_WAYLAND -#include -#endif -#ifdef USE_COCOA -#include -#endif #ifdef HAS_VK_ENUM_STRING_HELPER #include @@ -55,19 +43,15 @@ MwVulkanConfig vulkan_config = { #define VK_CMD(func) \ vk_res = func; \ if(vk_res != VK_SUCCESS) { \ - char buf[1024]; \ - MwStringPrintIntoBuffer(buf, 1024, "Vulkan error (%s:%d): %s\n", __FILE__, __LINE__, string_VkResult(vk_res)); \ - MwDispatchError(1, buf); \ - return 1; \ + setLastError("Vulkan error (%s:%d): %s\n", __FILE__, __LINE__, string_VkResult(vk_res)); \ + return MwEerror; \ } #else #define VK_CMD(func) \ vk_res = func; \ if(vk_res != VK_SUCCESS) { \ - char buf[1024]; \ - MwStringPrintIntoBuffer(buf, 1024, "Vulkan error (%s:%d): (error %d)\n", __FILE__, __LINE__, vk_res); \ - MwDispatchError(1, buf); \ - return 1; \ + setLastError("Vulkan error (%s:%d): (error %d)\n", __FILE__, __LINE__, vk_res); \ + return MwEerror; \ } #endif @@ -79,10 +63,8 @@ MwVulkanConfig vulkan_config = { /* convienence macro to return an error if an assert goes wrong */ #define VK_ASSERT(val) \ if(!val) { \ - char buf[1024]; \ - MwStringPrintIntoBuffer(buf, 1024, "Vulkan error (%s:%d): Assertion Failed (%s != NULL)\n", __FILE__, __LINE__, #val); \ - MwDispatchError(1, buf); \ - return 1; \ + setLastError("Vulkan error (%s:%d): Assertion Failed (%s != NULL)\n", __FILE__, __LINE__, #val); \ + return MwEerror; \ } const char** enabledExtensions; @@ -117,26 +99,29 @@ typedef struct vulkan { int vkLayerCount; } vulkan_t; -static int vulkan_instance_setup(MwWidget handle, vulkan_t* o); -static int vulkan_surface_setup(MwWidget handle, vulkan_t* o); -static int vulkan_devices_setup(MwWidget handle, vulkan_t* o); +static MwErrorEnum vulkan_instance_setup(MwWidget handle, vulkan_t* o); +static MwErrorEnum vulkan_surface_setup(MwWidget handle, vulkan_t* o); +static MwErrorEnum vulkan_devices_setup(MwWidget handle, vulkan_t* o); -static int wcreate(MwWidget handle) { - vulkan_t* o = malloc(sizeof(*o)); - int err; +static int create(MwWidget handle) { + vulkan_t* o = malloc(sizeof(*o)); + MwErrorEnum err; memset(o, 0, sizeof(*o)); err = vulkan_instance_setup(handle, o); - if(err != 0) { + if(err != MwEsuccess) { + printf("%s", MwGetLastError()); return 1; } err = vulkan_surface_setup(handle, o); - if(err != 0) { + if(err != MwEsuccess) { + printf("%s", MwGetLastError()); return 1; } err = vulkan_devices_setup(handle, o); - if(err != 0) { + if(err != MwEsuccess) { + printf("%s", MwGetLastError()); return 1; } @@ -148,7 +133,7 @@ static int wcreate(MwWidget handle) { return 0; } -static int _destroy(MwWidget handle) { +static MwErrorEnum _destroy(MwWidget handle) { vulkan_t* o = (vulkan_t*)handle->internal; LOAD_VK_FUNCTION(vkDestroyInstance); @@ -165,26 +150,25 @@ static int _destroy(MwWidget handle) { free(o); - return 0; + return MwEsuccess; } static void destroy(MwWidget handle) { - int err = _destroy(handle); - - (void)err; + MwErrorEnum err = _destroy(handle); + if(err == MwEerror) { + printf("[Vulkan Widget] %s", MwGetLastError()); + } } static void* vulkan_lib_load() { #ifdef _WIN32 return MwDynamicOpen("vulkan-1.dll"); -#elif defined(__APPLE__) - return MwDynamicOpen("libvulkan.dylib"); #else return MwDynamicOpen("libvulkan.so"); #endif } -static int vulkan_instance_setup(MwWidget handle, vulkan_t* o) { +static MwErrorEnum vulkan_instance_setup(MwWidget handle, vulkan_t* o) { uint32_t vulkan_version = vulkan_config.vk_version; uint32_t api_version = vulkan_config.api_version; uint32_t extension_count = 0; @@ -209,7 +193,7 @@ static int vulkan_instance_setup(MwWidget handle, vulkan_t* o) { o->vulkanLibrary = vulkan_lib_load(); if(!o->vulkanLibrary) { vulkan_supported = VULKAN_SUPPORTED_NO; - MwDispatchError(1, "Vulkan not found."); + setLastError("Vulkan not found."); } else { vulkan_supported = VULKAN_SUPPORTED_YES; } @@ -235,18 +219,6 @@ static int vulkan_instance_setup(MwWidget handle, vulkan_t* o) { arrput(enabledExtensions, VK_KHR_XLIB_SURFACE_EXTENSION_NAME); } #endif -#ifdef USE_WAYLAND - if(handle->lowlevel->common.type == MwLLBackendWayland) { - arrput(enabledExtensions, VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME); - /* take this opprutunity to set the widget to always render */ - MwWaylandAlwaysRender = MwTRUE; - } -#endif -#ifdef USE_COCOA - if(handle->lowlevel->common.type == MwLLBackendCocoa) { - arrput(enabledExtensions, VK_EXT_METAL_SURFACE_EXTENSION_NAME); - } -#endif /* passing null gives us all the extensions provided by the current vulkan implementation */ VK_CMD(_vkEnumerateInstanceExtensionProperties(NULL, &extension_count, NULL)); @@ -307,10 +279,10 @@ static int vulkan_instance_setup(MwWidget handle, vulkan_t* o) { instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; VK_CMD(_vkCreateInstance(&instance_create_info, NULL, &o->vkInstance)); - return 0; + return MwEsuccess; } -static int vulkan_surface_setup(MwWidget handle, vulkan_t* o) { +static MwErrorEnum vulkan_surface_setup(MwWidget handle, vulkan_t* o) { int vk_res; #ifdef USE_GDI if(handle->lowlevel->common.type == MwLLBackendGDI) { @@ -342,34 +314,10 @@ static int vulkan_surface_setup(MwWidget handle, vulkan_t* o) { VK_CMD(_vkCreateXlibSurfaceKHR(o->vkInstance, &createInfo, NULL, &o->vkSurface)); } #endif -#ifdef USE_WAYLAND - if(handle->lowlevel->common.type == MwLLBackendWayland) { - LOAD_VK_FUNCTION(vkCreateWaylandSurfaceKHR); - - VkWaylandSurfaceCreateInfoKHR createInfo = { - .sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR, - .pNext = NULL, - .flags = 0, - .display = handle->lowlevel->wayland.display, - .surface = handle->lowlevel->wayland.framebuffer.surface, - }; - VK_CMD(_vkCreateWaylandSurfaceKHR(o->vkInstance, &createInfo, NULL, &o->vkSurface)); - } -#endif -#ifdef USE_COCOA - if(handle->lowlevel->common.type == MwLLBackendCocoa) { - VkMetalSurfaceCreateInfoEXT MwCocoaGetMetalSurfaceCreateInfo(MwWidget handle); - VkMetalSurfaceCreateInfoEXT inf = MwCocoaGetMetalSurfaceCreateInfo(handle); - - LOAD_VK_FUNCTION(vkCreateMetalSurfaceEXT); - - VK_CMD(_vkCreateMetalSurfaceEXT(o->vkInstance, &inf, NULL, &o->vkSurface)); - } -#endif - return 0; + return MwEsuccess; } -static int vulkan_devices_setup(MwWidget handle, vulkan_t* o) { +static MwErrorEnum vulkan_devices_setup(MwWidget handle, vulkan_t* o) { (void)(handle); int vk_res; @@ -425,8 +373,8 @@ static int vulkan_devices_setup(MwWidget handle, vulkan_t* o) { } if(!has_graphics && !has_present) { /* rare, yes, but idk maybe some shitty drivers will present this dillema idk. */ - MwDispatchError(1, "There were no devices with either a graphics or presentation queue.\n"); - return 1; + setLastError("There were no devices with either a graphics or presentation queue.\n"); + return MwEerror; } /* create the logical device */ @@ -486,11 +434,11 @@ static int vulkan_devices_setup(MwWidget handle, vulkan_t* o) { _vkGetDeviceQueue(o->vkLogicalDevice, o->vkPresentFamilyIDX, 0, &o->vkPresentQueue); } free(devices); - return 0; + return MwEsuccess; } -void MwVulkanConfigure(MwVulkanConfig* cfg) { - vulkan_config = *cfg; +void MwVulkanConfigure(MwVulkanConfig cfg) { + vulkan_config = cfg; } void MwVulkanEnableExtension(const char* name) { @@ -501,7 +449,7 @@ void MwVulkanEnableLayer(const char* name) { arrput(enabledLayers, name); } -int MwVulkanSupported(void) { +VkBool32 MwVulkanSupported(void) { if(vulkan_supported == VULKAN_SUPPORTED_UNKNOWN) { void* lib = vulkan_lib_load(); if(lib == NULL) { @@ -512,58 +460,56 @@ int MwVulkanSupported(void) { } } if(vulkan_supported == VULKAN_SUPPORTED_YES) { - return 1; + return VK_TRUE; } else { - return 0; + return VK_FALSE; } }; -static void* mwVulkanGetFieldImpl(MwWidget handle, int field, int* err) { +static void* mwVulkanGetFieldImpl(MwWidget handle, MwVulkanField field, MwErrorEnum* out) { vulkan_t* o = handle->internal; - char buf[1024]; switch(field) { - case MwVULKANFIELD_GETINSTANCEPROCADDR: + case MwVulkanField_GetInstanceProcAddr: return o->vkGetInstanceProcAddr; - case MwVULKANFIELD_INSTANCE: + case MwVulkanField_Instance: return o->vkInstance; - case MwVULKANFIELD_SURFACE: + case MwVulkanField_Surface: return o->vkSurface; - case MwVULKANFIELD_PHYSICALDEVICE: + case MwVulkanField_PhysicalDevice: return o->vkPhysicalDevice; - case MwVULKANFIELD_LOGICALDEVICE: + case MwVulkanField_LogicalDevice: return o->vkLogicalDevice; - case MwVULKANFIELD_GRAPHICSQUEUEINDEX: + case MwVulkanField_GraphicsQueueIndex: return &o->vkGraphicsFamilyIDX; - case MwVULKANFIELD_PRESENTQUEUEINDEX: + case MwVulkanField_PresentQueueIndex: return &o->vkPresentFamilyIDX; - case MwVULKANFIELD_GRAPHICSQUEUE: + case MwVulkanField_GraphicsQueue: return o->vkGraphicsQueue; - case MwVULKANFIELD_PRESENTQUEUE: + case MwVulkanField_PresentQueue: return o->vkPresentQueue; default: - MwStringPrintIntoBuffer(buf, 1024, "Unknown vulkan field request (%d given)", field); - MwDispatchError(1, buf); - if(err != NULL) { - *err = 1; + setLastError("Unknown vulkan field request (%d given)", field); + if(out != NULL) { + *out = MwEerror; } return NULL; } - if(err != NULL) { - *err = 0; + if(out != NULL) { + *out = MwEsuccess; } }; -static void func_handler(MwWidget handle, const char* name, void* output, va_list va) { +static void func_handler(MwWidget handle, const char* name, void* out, va_list va) { if(strcmp(name, "mwVulkanGetField") == 0) { - int field = va_arg(va, int); - int* err = va_arg(va, int*); - *(void**)output = mwVulkanGetFieldImpl(handle, field, err); + MwVulkanField field = va_arg(va, MwVulkanField); + MwErrorEnum* err = va_arg(va, MwErrorEnum*); + *(void**)out = mwVulkanGetFieldImpl(handle, field, err); } } MwClassRec MwVulkanClassRec = { - wcreate, /* create */ + create, /* create */ destroy, /* destroy */ NULL, /* draw */ NULL, /* click */ @@ -578,28 +524,9 @@ MwClassRec MwVulkanClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, NULL}; MwClass MwVulkanClass = &MwVulkanClassRec; -#else -MwClass MwVulkanClass = NULL; - -void MwVulkanEnableExtension(const char* ext_name) { - (void)ext_name; -} - -void MwVulkanEnableLayer(const char* ext_name) { - (void)ext_name; -} - -void MwVulkanConfigure(MwVulkanConfig* cfg) { - (void)cfg; -} - -int MwVulkanSupported(void) { - return 0; -} -#endif diff --git a/src/widget/window.c b/src/widget/window.c index 2b596b50d..98a128f8f 100644 --- a/src/widget/window.c +++ b/src/widget/window.c @@ -1,6 +1,6 @@ #include -static int wcreate(MwWidget handle) { +static int create(MwWidget handle) { MwSetDefault(handle); MwSetInteger(handle, MwNhasBorder, 0); @@ -44,7 +44,7 @@ static void func_handler(MwWidget handle, const char* name, void* out, va_list v } } MwClassRec MwWindowClassRec = { - wcreate, /* create */ + create, /* create */ NULL, /* destroy */ draw, /* draw */ NULL, /* click */ @@ -59,7 +59,7 @@ MwClassRec MwWindowClassRec = { NULL, /* resize */ NULL, /* children_update */ NULL, /* children_prop_change */ - NULL, /* clipboard */ + NULL, NULL, NULL, NULL, diff --git a/tools/.gitignore b/tools/.gitignore deleted file mode 100644 index 0581170fb..000000000 --- a/tools/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -font -fuzzer diff --git a/tools/Makefile b/tools/Makefile index ef8636836..fbfc51a7d 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -6,10 +6,7 @@ LIBS = `freetype-config --libs` .PHONY: all clean .SUFFIXES: .c .o -all: fuzzer font - -fuzzer: fuzzer.o - $(CC) -g -L../src/ -Wl,-R../src -lMw -o $@ fuzzer.o +all: font font: font.o $(CC) $(LDFLAGS) -o $@ font.o $(LIBS) @@ -18,4 +15,4 @@ font: font.o $(CC) $(CFLAGS) -c -o $@ $< clean: - rm -f *.o font fuzzer + rm -f *.o font diff --git a/tools/fuzzer.c b/tools/fuzzer.c deleted file mode 100644 index 5b4224e93..000000000 --- a/tools/fuzzer.c +++ /dev/null @@ -1,85 +0,0 @@ -#include - -#define WIDGET_AMOUNT 1 - -int main() { - MwWidget window, widget; - - MwLibraryInit(); - - window = MwCreateWidget(MwWindowClass, "window", NULL, 0, 0, 400, 400); - - while(true) { - int r = rand() % WIDGET_AMOUNT; - MwClass cls; - switch(r) { - case 0: - cls = MwBoxClass; - break; - case 1: - cls = MwButtonClass; - break; - case 2: - cls = MwCheckBoxClass; - break; - case 3: - cls = MwComboBoxClass; - break; - case 4: - cls = MwEntryClass; - break; - case 5: - cls = MwFrameClass; - break; - case 6: - cls = MwImageClass; - break; - case 7: - cls = MwLabelClass; - break; - case 8: - cls = MwListBoxClass; - break; - case 9: - cls = MwMenuClass; - break; - case 10: - cls = MwNumberEntryClass; - break; - case 12: - cls = MwProgressBarClass; - break; - case 13: - cls = MwRadioBoxClass; - break; - case 14: - cls = MwScrollBarClass; - break; - case 15: - cls = MwSeparatorClass; - break; - // case 16: - // cls = MwSubMenuClass; - // break; - case 17: - cls = MwTreeViewClass; - break; - case 18: - cls = MwViewportClass; - break; - default: - cls = NULL; - break; - } - if(cls) { - widget = MwCreateWidget(cls, "Cls", window, 0, 0, 100, 100); - } - - if(MwPending(window)) { - MwStep(window); - } - if(cls) { - MwDestroyWidget(widget); - } - } -} diff --git a/tools/gendcl.pl b/tools/gendcl.pl deleted file mode 100755 index f2e3399c3..000000000 --- a/tools/gendcl.pl +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env perl - -our $clean = 0; -my @objs = (); - -sub compile { - my ($source) = @_; - my $object = ""; - my $dir = ""; - - $dir = $source; - $dir =~ s/\/([^\/]+)$//; - - $source =~ s/^(.+)\/([^\/]+)$/[\/\1]\2/; - $source =~ s/\//\./g; - - $object = $source; - $object =~ s/\.c$/.obj/; - - print(OUT "\$ if f\$search(\"$object;*\") .eqs. \"\"\n"); - print(OUT "\$ then\n"); - print(OUT "\$ write sys\$output \"CC $object\"\n"); - print(OUT -"\$ cc /include_directory=(\"./include\",\"./$dir\") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=$object $source\n" - ); - print(OUT "\$ endif\n"); - - push(@objs, $object); -} - -sub clean { - my ($source) = @_; - my $object = ""; - my $dir = ""; - - $source =~ s/^(.+)\/([^\/]+)$/[\/\1]\2/; - $source =~ s/\//\./g; - - $object = $source; - $object =~ s/\.c$/.obj/; - - print(OUT - "\$ if f\$search(\"$object\") .nes. \"\" then delete $object;*\n"); -} - -sub thing { - if ($clean) { - clean($_[0]); - } - else { - compile($_[0]); - } -} - -sub scan { - my ($dir) = @_; - - opendir(my $dh, $dir); - while (my $file = readdir($dh)) { - if ( !(($dir . "/" . $file) eq "src/widget/opengl.c") - && !(($dir . "/" . $file) eq "src/widget/vulkan.c") - && !(($dir . "/" . $file) eq "external/stb_truetype.c") - && !(($dir . "/" . $file) eq "external/stb_image.c") - && ($file =~ /\.c$/)) - { - thing($dir . "/" . $file); - } - } - closedir($dh); -} - -for (my $i = 0 ; $i < 2 ; $i++) { - $clean = $i; - - open(OUT, ">", $i == 0 ? "vms/build.com" : "vms/clean.com"); - scan("src"); - scan("src/cursor"); - scan("src/widget"); - scan("src/dialog"); - scan("src/font"); - scan("src/icon"); - scan("src/abstract"); - scan("external"); - thing("src/backend/x11.c"); - - if ($i == 0) { - print(OUT "\$ if f\$search(\"[.src]MwSHR.exe;*\") .eqs. \"\"\n"); - print(OUT "\$ then\n"); - print(OUT "\$ write sys\$output \"LINK [.src]MwSHR.exe\"\n"); - print(OUT "\$ OPEN /WRITE LINK_OPT LINK.OPT\n"); - foreach my $obj (@objs) { - print(OUT "\$ WRITE LINK_OPT \"$obj\"\n"); - } - print(OUT "\$ WRITE LINK_OPT \"SYS\$LIBRARY:DECW\$XLIBSHR/SHARE\"\n"); - print(OUT "\$ WRITE LINK_OPT \"SYS\$LIBRARY:DPML\$SHR/SHARE\"\n"); - print(OUT "\$ CLOSE LINK_OPT\n"); - print(OUT "\$ link /SHAREABLE=[.src]MwSHR.exe LINK.OPT/options\n"); - print(OUT "\$ DELETE LINK.OPT;*\n"); - print(OUT "\$ endif\n"); - } - else { - clean("src/MwSHR.exe"); - } - close(OUT); -} diff --git a/tools/genmk.pl b/tools/genmk.pl index ae03d9f7e..77545d8f9 100755 --- a/tools/genmk.pl +++ b/tools/genmk.pl @@ -93,7 +93,7 @@ sub generate { print(OUT "LD = $link\n"); print(OUT "\n"); print(OUT -"CFLAGS = ${inc}include ${inc}external${dir}libz${dir}include ${def}_MILSKO ${def}USE_GDI ${def}USE_STB_TRUETYPE ${def}USE_STB_IMAGE ${def}STBI_NO_SIMD\n" +"CFLAGS = ${inc}include ${def}_MILSKO ${def}USE_GDI ${def}USE_STB_TRUETYPE ${def}USE_STB_IMAGE ${def}STBI_NO_SIMD\n" ); print(OUT "LDFLAGS = $dll"); print(OUT "\n"); @@ -121,8 +121,7 @@ sub generate { print(OUT "src${dir}Mw.dll: " . cobjs($dir) . "\n"); print( OUT " \$(LD) \$(LDFLAGS) $c_dllout $dllout\$@ " . cobjs($dir, $prefobj) - . " $needlibs ${lib}opengl32.lib ${lib}gdi32.lib ${lib}user32.lib ${lib}advapi32.lib\n" - ); + . " $needlibs ${lib}opengl32.lib ${lib}gdi32.lib ${lib}user32.lib\n"); print(OUT " $c_dllafter\n"); print(OUT "\n"); @@ -144,12 +143,11 @@ sub generate { scan("src"); scan("external"); -scan("external/libz/src"); scan("src/icon"); scan("src/cursor"); scan("src/widget"); scan("src/text"); -scan("src/text/font"); +scan("src/font"); scan("src/dialog"); scan("src/abstract"); push(@cfiles, "src/backend/gdi.c"); diff --git a/tools/readme.pl b/tools/readme.pl index 653184c1b..573d9573e 100755 --- a/tools/readme.pl +++ b/tools/readme.pl @@ -58,10 +58,9 @@ l( l(""); c("Requirements"); l(""); -l(" Milsko requires either"); -l(" * A Windows environment with GDI (so anything NT or 9x)"); -l(" * A MacOS environment with Cocoa (10.4 or above supported)"); -l(" * A Unix-like environment with X11 for runtime."); +l( +" Milsko requires the Windows environment with GDI (so anything NT or 9x) or the Unix-like environment with X11 for runtime." +); l(""); l(" To build Milsko for Windows, you must have one of following compilers:"); l(" * Visual C++ 6.0 or newer"); @@ -69,7 +68,7 @@ l(" * Borland C++ 5.5 or newer"); l(" * Open Watcom 2.0 or newer"); l(" * MinGW-w64"); l(""); -l(" and for Unix-like and MacOS:"); +l(" and for Unix-like:"); l(" * GNU C Compiler"); l(" * Clang"); l(""); @@ -106,8 +105,8 @@ l("1) Run `wmake -f WatMakefile'."); h("D. MinGW-w64/GCC/Clang"); l("1) Determine if you need Vulkan and/or OpenGL."); l(""); -l("2) Run `./configure'."); -l(" For help, run `./configure --help'."); +l("2) Run `./Makefile.pl'."); +l(" For help, run `./Makefile.pl --help'."); l(""); l("3) Run `make'."); l(""); diff --git a/vms/build.com b/vms/build.com deleted file mode 100644 index 06467b321..000000000 --- a/vms/build.com +++ /dev/null @@ -1,346 +0,0 @@ -$ if f$search("[.src]color.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src]color.obj" -$ cc /include_directory=("./include","./src") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src]color.obj [.src]color.c -$ endif -$ if f$search("[.src]draw.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src]draw.obj" -$ cc /include_directory=("./include","./src") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src]draw.obj [.src]draw.c -$ endif -$ if f$search("[.src]lowlevel.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src]lowlevel.obj" -$ cc /include_directory=("./include","./src") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src]lowlevel.obj [.src]lowlevel.c -$ endif -$ if f$search("[.src]string.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src]string.obj" -$ cc /include_directory=("./include","./src") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src]string.obj [.src]string.c -$ endif -$ if f$search("[.src]unicode.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src]unicode.obj" -$ cc /include_directory=("./include","./src") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src]unicode.obj [.src]unicode.c -$ endif -$ if f$search("[.src]core.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src]core.obj" -$ cc /include_directory=("./include","./src") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src]core.obj [.src]core.c -$ endif -$ if f$search("[.src]default.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src]default.obj" -$ cc /include_directory=("./include","./src") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src]default.obj [.src]default.c -$ endif -$ if f$search("[.src.cursor]hidden.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.cursor]hidden.obj" -$ cc /include_directory=("./include","./src/cursor") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.cursor]hidden.obj [.src.cursor]hidden.c -$ endif -$ if f$search("[.src.cursor]arrow.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.cursor]arrow.obj" -$ cc /include_directory=("./include","./src/cursor") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.cursor]arrow.obj [.src.cursor]arrow.c -$ endif -$ if f$search("[.src.cursor]cross.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.cursor]cross.obj" -$ cc /include_directory=("./include","./src/cursor") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.cursor]cross.obj [.src.cursor]cross.c -$ endif -$ if f$search("[.src.cursor]text.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.cursor]text.obj" -$ cc /include_directory=("./include","./src/cursor") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.cursor]text.obj [.src.cursor]text.c -$ endif -$ if f$search("[.src.cursor]default.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.cursor]default.obj" -$ cc /include_directory=("./include","./src/cursor") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.cursor]default.obj [.src.cursor]default.c -$ endif -$ if f$search("[.src.widget]menu.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]menu.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]menu.obj [.src.widget]menu.c -$ endif -$ if f$search("[.src.widget]image.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]image.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]image.obj [.src.widget]image.c -$ endif -$ if f$search("[.src.widget]viewport.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]viewport.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]viewport.obj [.src.widget]viewport.c -$ endif -$ if f$search("[.src.widget]treeview.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]treeview.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]treeview.obj [.src.widget]treeview.c -$ endif -$ if f$search("[.src.widget]button.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]button.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]button.obj [.src.widget]button.c -$ endif -$ if f$search("[.src.widget]radiobox.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]radiobox.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]radiobox.obj [.src.widget]radiobox.c -$ endif -$ if f$search("[.src.widget]scrollbar.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]scrollbar.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]scrollbar.obj [.src.widget]scrollbar.c -$ endif -$ if f$search("[.src.widget]progressbar.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]progressbar.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]progressbar.obj [.src.widget]progressbar.c -$ endif -$ if f$search("[.src.widget]submenu.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]submenu.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]submenu.obj [.src.widget]submenu.c -$ endif -$ if f$search("[.src.widget]checkbox.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]checkbox.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]checkbox.obj [.src.widget]checkbox.c -$ endif -$ if f$search("[.src.widget]entry.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]entry.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]entry.obj [.src.widget]entry.c -$ endif -$ if f$search("[.src.widget]window.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]window.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]window.obj [.src.widget]window.c -$ endif -$ if f$search("[.src.widget]label.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]label.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]label.obj [.src.widget]label.c -$ endif -$ if f$search("[.src.widget]separator.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]separator.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]separator.obj [.src.widget]separator.c -$ endif -$ if f$search("[.src.widget]combobox.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]combobox.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]combobox.obj [.src.widget]combobox.c -$ endif -$ if f$search("[.src.widget]numberentry.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]numberentry.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]numberentry.obj [.src.widget]numberentry.c -$ endif -$ if f$search("[.src.widget]frame.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]frame.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]frame.obj [.src.widget]frame.c -$ endif -$ if f$search("[.src.widget]listbox.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]listbox.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]listbox.obj [.src.widget]listbox.c -$ endif -$ if f$search("[.src.widget]box.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.widget]box.obj" -$ cc /include_directory=("./include","./src/widget") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.widget]box.obj [.src.widget]box.c -$ endif -$ if f$search("[.src.dialog]directorychooser.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.dialog]directorychooser.obj" -$ cc /include_directory=("./include","./src/dialog") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.dialog]directorychooser.obj [.src.dialog]directorychooser.c -$ endif -$ if f$search("[.src.dialog]filechooser.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.dialog]filechooser.obj" -$ cc /include_directory=("./include","./src/dialog") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.dialog]filechooser.obj [.src.dialog]filechooser.c -$ endif -$ if f$search("[.src.dialog]messagebox.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.dialog]messagebox.obj" -$ cc /include_directory=("./include","./src/dialog") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.dialog]messagebox.obj [.src.dialog]messagebox.c -$ endif -$ if f$search("[.src.dialog]colorpicker.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.dialog]colorpicker.obj" -$ cc /include_directory=("./include","./src/dialog") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.dialog]colorpicker.obj [.src.dialog]colorpicker.c -$ endif -$ if f$search("[.src.icon]right.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]right.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]right.obj [.src.icon]right.c -$ endif -$ if f$search("[.src.icon]info.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]info.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]info.obj [.src.icon]info.c -$ endif -$ if f$search("[.src.icon]computer.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]computer.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]computer.obj [.src.icon]computer.c -$ endif -$ if f$search("[.src.icon]forward.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]forward.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]forward.obj [.src.icon]forward.c -$ endif -$ if f$search("[.src.icon]left.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]left.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]left.obj [.src.icon]left.c -$ endif -$ if f$search("[.src.icon]clock.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]clock.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]clock.obj [.src.icon]clock.c -$ endif -$ if f$search("[.src.icon]warning.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]warning.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]warning.obj [.src.icon]warning.c -$ endif -$ if f$search("[.src.icon]directory.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]directory.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]directory.obj [.src.icon]directory.c -$ endif -$ if f$search("[.src.icon]file.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]file.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]file.obj [.src.icon]file.c -$ endif -$ if f$search("[.src.icon]back.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]back.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]back.obj [.src.icon]back.c -$ endif -$ if f$search("[.src.icon]down.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]down.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]down.obj [.src.icon]down.c -$ endif -$ if f$search("[.src.icon]news.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]news.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]news.obj [.src.icon]news.c -$ endif -$ if f$search("[.src.icon]error.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]error.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]error.obj [.src.icon]error.c -$ endif -$ if f$search("[.src.icon]note.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]note.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]note.obj [.src.icon]note.c -$ endif -$ if f$search("[.src.icon]search.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]search.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]search.obj [.src.icon]search.c -$ endif -$ if f$search("[.src.icon]up.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.icon]up.obj" -$ cc /include_directory=("./include","./src/icon") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.icon]up.obj [.src.icon]up.c -$ endif -$ if f$search("[.src.abstract]time.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.abstract]time.obj" -$ cc /include_directory=("./include","./src/abstract") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.abstract]time.obj [.src.abstract]time.c -$ endif -$ if f$search("[.src.abstract]directory.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.abstract]directory.obj" -$ cc /include_directory=("./include","./src/abstract") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.abstract]directory.obj [.src.abstract]directory.c -$ endif -$ if f$search("[.src.abstract]dynamic.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.abstract]dynamic.obj" -$ cc /include_directory=("./include","./src/abstract") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.abstract]dynamic.obj [.src.abstract]dynamic.c -$ endif -$ if f$search("[.external]stb_ds.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.external]stb_ds.obj" -$ cc /include_directory=("./include","./external") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.external]stb_ds.obj [.external]stb_ds.c -$ endif -$ if f$search("[.src.backend]x11.obj;*") .eqs. "" -$ then -$ write sys$output "CC [.src.backend]x11.obj" -$ cc /include_directory=("./include","./src/backend") /define=(_MILSKO,USE_X11,NO_IMAGE) /object=[.src.backend]x11.obj [.src.backend]x11.c -$ endif -$ if f$search("[.src]MwSHR.exe;*") .eqs. "" -$ then -$ write sys$output "LINK [.src]MwSHR.exe" -$ OPEN /WRITE LINK_OPT LINK.OPT -$ WRITE LINK_OPT "[.src]color.obj" -$ WRITE LINK_OPT "[.src]draw.obj" -$ WRITE LINK_OPT "[.src]lowlevel.obj" -$ WRITE LINK_OPT "[.src]string.obj" -$ WRITE LINK_OPT "[.src]unicode.obj" -$ WRITE LINK_OPT "[.src]core.obj" -$ WRITE LINK_OPT "[.src]default.obj" -$ WRITE LINK_OPT "[.src.cursor]hidden.obj" -$ WRITE LINK_OPT "[.src.cursor]arrow.obj" -$ WRITE LINK_OPT "[.src.cursor]cross.obj" -$ WRITE LINK_OPT "[.src.cursor]text.obj" -$ WRITE LINK_OPT "[.src.cursor]default.obj" -$ WRITE LINK_OPT "[.src.widget]menu.obj" -$ WRITE LINK_OPT "[.src.widget]image.obj" -$ WRITE LINK_OPT "[.src.widget]viewport.obj" -$ WRITE LINK_OPT "[.src.widget]treeview.obj" -$ WRITE LINK_OPT "[.src.widget]button.obj" -$ WRITE LINK_OPT "[.src.widget]radiobox.obj" -$ WRITE LINK_OPT "[.src.widget]scrollbar.obj" -$ WRITE LINK_OPT "[.src.widget]progressbar.obj" -$ WRITE LINK_OPT "[.src.widget]submenu.obj" -$ WRITE LINK_OPT "[.src.widget]checkbox.obj" -$ WRITE LINK_OPT "[.src.widget]entry.obj" -$ WRITE LINK_OPT "[.src.widget]window.obj" -$ WRITE LINK_OPT "[.src.widget]label.obj" -$ WRITE LINK_OPT "[.src.widget]separator.obj" -$ WRITE LINK_OPT "[.src.widget]combobox.obj" -$ WRITE LINK_OPT "[.src.widget]numberentry.obj" -$ WRITE LINK_OPT "[.src.widget]frame.obj" -$ WRITE LINK_OPT "[.src.widget]listbox.obj" -$ WRITE LINK_OPT "[.src.widget]box.obj" -$ WRITE LINK_OPT "[.src.dialog]directorychooser.obj" -$ WRITE LINK_OPT "[.src.dialog]filechooser.obj" -$ WRITE LINK_OPT "[.src.dialog]messagebox.obj" -$ WRITE LINK_OPT "[.src.dialog]colorpicker.obj" -$ WRITE LINK_OPT "[.src.icon]right.obj" -$ WRITE LINK_OPT "[.src.icon]info.obj" -$ WRITE LINK_OPT "[.src.icon]computer.obj" -$ WRITE LINK_OPT "[.src.icon]forward.obj" -$ WRITE LINK_OPT "[.src.icon]left.obj" -$ WRITE LINK_OPT "[.src.icon]clock.obj" -$ WRITE LINK_OPT "[.src.icon]warning.obj" -$ WRITE LINK_OPT "[.src.icon]directory.obj" -$ WRITE LINK_OPT "[.src.icon]file.obj" -$ WRITE LINK_OPT "[.src.icon]back.obj" -$ WRITE LINK_OPT "[.src.icon]down.obj" -$ WRITE LINK_OPT "[.src.icon]news.obj" -$ WRITE LINK_OPT "[.src.icon]error.obj" -$ WRITE LINK_OPT "[.src.icon]note.obj" -$ WRITE LINK_OPT "[.src.icon]search.obj" -$ WRITE LINK_OPT "[.src.icon]up.obj" -$ WRITE LINK_OPT "[.src.abstract]time.obj" -$ WRITE LINK_OPT "[.src.abstract]directory.obj" -$ WRITE LINK_OPT "[.src.abstract]dynamic.obj" -$ WRITE LINK_OPT "[.external]stb_ds.obj" -$ WRITE LINK_OPT "[.src.backend]x11.obj" -$ WRITE LINK_OPT "SYS$LIBRARY:DECW$XLIBSHR/SHARE" -$ WRITE LINK_OPT "SYS$LIBRARY:DPML$SHR/SHARE" -$ CLOSE LINK_OPT -$ link /SHAREABLE=[.src]MwSHR.exe LINK.OPT/options -$ DELETE LINK.OPT;* -$ endif diff --git a/vms/clean.com b/vms/clean.com deleted file mode 100644 index 45b54d4bb..000000000 --- a/vms/clean.com +++ /dev/null @@ -1,57 +0,0 @@ -$ if f$search("[.src]color.obj") .nes. "" then delete [.src]color.obj;* -$ if f$search("[.src]draw.obj") .nes. "" then delete [.src]draw.obj;* -$ if f$search("[.src]lowlevel.obj") .nes. "" then delete [.src]lowlevel.obj;* -$ if f$search("[.src]string.obj") .nes. "" then delete [.src]string.obj;* -$ if f$search("[.src]unicode.obj") .nes. "" then delete [.src]unicode.obj;* -$ if f$search("[.src]core.obj") .nes. "" then delete [.src]core.obj;* -$ if f$search("[.src]default.obj") .nes. "" then delete [.src]default.obj;* -$ if f$search("[.src.cursor]hidden.obj") .nes. "" then delete [.src.cursor]hidden.obj;* -$ if f$search("[.src.cursor]arrow.obj") .nes. "" then delete [.src.cursor]arrow.obj;* -$ if f$search("[.src.cursor]cross.obj") .nes. "" then delete [.src.cursor]cross.obj;* -$ if f$search("[.src.cursor]text.obj") .nes. "" then delete [.src.cursor]text.obj;* -$ if f$search("[.src.cursor]default.obj") .nes. "" then delete [.src.cursor]default.obj;* -$ if f$search("[.src.widget]menu.obj") .nes. "" then delete [.src.widget]menu.obj;* -$ if f$search("[.src.widget]image.obj") .nes. "" then delete [.src.widget]image.obj;* -$ if f$search("[.src.widget]viewport.obj") .nes. "" then delete [.src.widget]viewport.obj;* -$ if f$search("[.src.widget]treeview.obj") .nes. "" then delete [.src.widget]treeview.obj;* -$ if f$search("[.src.widget]button.obj") .nes. "" then delete [.src.widget]button.obj;* -$ if f$search("[.src.widget]radiobox.obj") .nes. "" then delete [.src.widget]radiobox.obj;* -$ if f$search("[.src.widget]scrollbar.obj") .nes. "" then delete [.src.widget]scrollbar.obj;* -$ if f$search("[.src.widget]progressbar.obj") .nes. "" then delete [.src.widget]progressbar.obj;* -$ if f$search("[.src.widget]submenu.obj") .nes. "" then delete [.src.widget]submenu.obj;* -$ if f$search("[.src.widget]checkbox.obj") .nes. "" then delete [.src.widget]checkbox.obj;* -$ if f$search("[.src.widget]entry.obj") .nes. "" then delete [.src.widget]entry.obj;* -$ if f$search("[.src.widget]window.obj") .nes. "" then delete [.src.widget]window.obj;* -$ if f$search("[.src.widget]label.obj") .nes. "" then delete [.src.widget]label.obj;* -$ if f$search("[.src.widget]separator.obj") .nes. "" then delete [.src.widget]separator.obj;* -$ if f$search("[.src.widget]combobox.obj") .nes. "" then delete [.src.widget]combobox.obj;* -$ if f$search("[.src.widget]numberentry.obj") .nes. "" then delete [.src.widget]numberentry.obj;* -$ if f$search("[.src.widget]frame.obj") .nes. "" then delete [.src.widget]frame.obj;* -$ if f$search("[.src.widget]listbox.obj") .nes. "" then delete [.src.widget]listbox.obj;* -$ if f$search("[.src.widget]box.obj") .nes. "" then delete [.src.widget]box.obj;* -$ if f$search("[.src.dialog]directorychooser.obj") .nes. "" then delete [.src.dialog]directorychooser.obj;* -$ if f$search("[.src.dialog]filechooser.obj") .nes. "" then delete [.src.dialog]filechooser.obj;* -$ if f$search("[.src.dialog]messagebox.obj") .nes. "" then delete [.src.dialog]messagebox.obj;* -$ if f$search("[.src.dialog]colorpicker.obj") .nes. "" then delete [.src.dialog]colorpicker.obj;* -$ if f$search("[.src.icon]right.obj") .nes. "" then delete [.src.icon]right.obj;* -$ if f$search("[.src.icon]info.obj") .nes. "" then delete [.src.icon]info.obj;* -$ if f$search("[.src.icon]computer.obj") .nes. "" then delete [.src.icon]computer.obj;* -$ if f$search("[.src.icon]forward.obj") .nes. "" then delete [.src.icon]forward.obj;* -$ if f$search("[.src.icon]left.obj") .nes. "" then delete [.src.icon]left.obj;* -$ if f$search("[.src.icon]clock.obj") .nes. "" then delete [.src.icon]clock.obj;* -$ if f$search("[.src.icon]warning.obj") .nes. "" then delete [.src.icon]warning.obj;* -$ if f$search("[.src.icon]directory.obj") .nes. "" then delete [.src.icon]directory.obj;* -$ if f$search("[.src.icon]file.obj") .nes. "" then delete [.src.icon]file.obj;* -$ if f$search("[.src.icon]back.obj") .nes. "" then delete [.src.icon]back.obj;* -$ if f$search("[.src.icon]down.obj") .nes. "" then delete [.src.icon]down.obj;* -$ if f$search("[.src.icon]news.obj") .nes. "" then delete [.src.icon]news.obj;* -$ if f$search("[.src.icon]error.obj") .nes. "" then delete [.src.icon]error.obj;* -$ if f$search("[.src.icon]note.obj") .nes. "" then delete [.src.icon]note.obj;* -$ if f$search("[.src.icon]search.obj") .nes. "" then delete [.src.icon]search.obj;* -$ if f$search("[.src.icon]up.obj") .nes. "" then delete [.src.icon]up.obj;* -$ if f$search("[.src.abstract]time.obj") .nes. "" then delete [.src.abstract]time.obj;* -$ if f$search("[.src.abstract]directory.obj") .nes. "" then delete [.src.abstract]directory.obj;* -$ if f$search("[.src.abstract]dynamic.obj") .nes. "" then delete [.src.abstract]dynamic.obj;* -$ if f$search("[.external]stb_ds.obj") .nes. "" then delete [.external]stb_ds.obj;* -$ if f$search("[.src.backend]x11.obj") .nes. "" then delete [.src.backend]x11.obj;* -$ if f$search("[.src]MwSHR.exe") .nes. "" then delete [.src]MwSHR.exe;*