commit 1f469ab418f4b439ff0b03d760923e64473915d0 Author: Martin Vladic Date: Fri Apr 29 13:47:55 2022 +0200 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0884789 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +build +.vscode/launch.json +.vscode/.vscode/c_cpp_properties.json +.vscode/launch.json + +.vscode/*.log + +*.eez-project-ui-state diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4805c04 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,199 @@ +cmake_minimum_required(VERSION 3.10) + +project(min_eez_sample) + +set (CMAKE_CXX_STANDARD 17) + +if(MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /wd4100 /wd4214 /wd4200 /wd4244 /wd4456 /wd4457 /wd4458 /wd4459 /wd4245 /wd4389 /wd4706 /wd4611 /wd4310") +endif() + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") + +if(${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-const-variable -Wno-nested-anon-types -Wno-dollar-in-identifier-extension -O2") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_CXX_FLAGS} -s DEMANGLE_SUPPORT=1 -s FORCE_FILESYSTEM=1 -s ALLOW_MEMORY_GROWTH=1 -s INITIAL_MEMORY=83886080 -s LLD_REPORT_UNDEFINED --bind -lidbfs.js --pre-js ${PROJECT_SOURCE_DIR}/src/platform/simulator/emscripten/pre.js") + #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --preload-file ../../images/eez.png") + add_definitions(-DEMCC_DEBUG) +endif() + +if(NOT(${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten")) + set(SDL2_BUILDING_LIBRARY 1) + find_package(SDL2 REQUIRED) + find_package(SDL2_image REQUIRED) + include_directories(SYSTEM ${SDL2_INCLUDE_DIRS}) + include_directories(SYSTEM ${SDL2IMAGE_INCLUDE_DIR}) +endif() + +if (UNIX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -pedantic") +endif (UNIX) + +add_definitions(-DEEZ_PLATFORM_SIMULATOR) + +if(WIN32) + ENABLE_LANGUAGE(RC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + add_definitions(-DEEZ_PLATFORM_SIMULATOR_WIN32) +endif() + +if (UNIX) + add_definitions(-DEEZ_PLATFORM_SIMULATOR_UNIX) +endif() + +if(${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") + add_definitions(-DEEZ_PLATFORM_SIMULATOR_EMSCRIPTEN) +endif() + +include_directories( + ./ + ./eez/libs/agg + ./eez/platform/simulator + ./src/conf +) + + +set(src_files) +set(header_files) + + +################################################################################ +# EEZ Framework files +file(GLOB_RECURSE src_eez + eez/*.cpp + eez/*.c +) +file(GLOB_RECURSE header_eez + eez/*.h +) + +# exclude STM32 platform specific files +set (EXCLUDE_DIR "eez/platform/stm32") +foreach (TMP_PATH ${src_eez}) + string (FIND ${TMP_PATH} ${EXCLUDE_DIR} EXCLUDE_DIR_FOUND) + if (NOT ${EXCLUDE_DIR_FOUND} EQUAL -1) + list (REMOVE_ITEM src_eez ${TMP_PATH}) + endif () +endforeach(TMP_PATH) +foreach (TMP_PATH ${header_eez}) + string (FIND ${TMP_PATH} ${EXCLUDE_DIR} EXCLUDE_DIR_FOUND) + if (NOT ${EXCLUDE_DIR_FOUND} EQUAL -1) + list (REMOVE_ITEM header_eez ${TMP_PATH}) + endif () +endforeach(TMP_PATH) + +# exclude libscpi +set (EXCLUDE_DIR "eez/libs/libscpi") +foreach (TMP_PATH ${src_eez}) + string (FIND ${TMP_PATH} ${EXCLUDE_DIR} EXCLUDE_DIR_FOUND) + if (NOT ${EXCLUDE_DIR_FOUND} EQUAL -1) + list (REMOVE_ITEM src_eez ${TMP_PATH}) + endif () +endforeach(TMP_PATH) +foreach (TMP_PATH ${header_eez}) + string (FIND ${TMP_PATH} ${EXCLUDE_DIR} EXCLUDE_DIR_FOUND) + if (NOT ${EXCLUDE_DIR_FOUND} EQUAL -1) + list (REMOVE_ITEM header_eez ${TMP_PATH}) + endif () +endforeach(TMP_PATH) + +list (APPEND src_files ${src_eez}) +list (APPEND header_files ${header_eez}) + +source_group(TREE "../../eez" PREFIX "eez" FILES ${src_eez} ${header_eez}) + +# TODO +#if(MSVC) +# set_source_files_properties(${src_eez_libs_libscpi} PROPERTIES COMPILE_FLAGS /W0) +#endif() + +################################################################################ + + +################################################################################ +# SAMPLE files +file(GLOB_RECURSE src_sample + src/*.cpp + src/*.c +) +file(GLOB_RECURSE header_sample + src/*.h +) + +list (APPEND src_files ${src_sample}) +list (APPEND header_files ${header_sample}) + +source_group(TREE "../../src" PREFIX "src" FILES ${src_sample} ${header_sample}) + +################################################################################ + + +if(WIN32) + set(src_win32_specific + ./src/platform/simulator/win32/icon.rc + ) + list (APPEND src_files ${src_win32_specific}) + source_group("win32" FILES ${src_win32_specific}) + + set(SOURCES src/platform/simulator/win32/icon.rc ${src_files}) +endif() + +add_executable(min_eez_sample ${src_files} ${header_files}) + +if(MSVC) + target_compile_options(min_eez_sample PRIVATE "/MP") +endif() + +if (UNIX AND NOT(${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten")) + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) + target_link_libraries(min_eez_sample Threads::Threads bsd) +endif () + +target_link_libraries(min_eez_sample ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES}) + +if(WIN32) + target_link_libraries(min_eez_sample wsock32 ws2_32) + + add_custom_command(TARGET min_eez_sample POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/../../SDL2-2.0.14/lib/x86/SDL2.dll" + $) + + add_custom_command(TARGET min_eez_sample POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/../../SDL2_image-2.0.4/lib/x86/libjpeg-9.dll" + $) + + add_custom_command(TARGET min_eez_sample POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/../../SDL2_image-2.0.4/lib/x86/libpng16-16.dll" + $) + + add_custom_command(TARGET min_eez_sample POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/../../SDL2_image-2.0.4/lib/x86/libtiff-5.dll" + $) + + add_custom_command(TARGET min_eez_sample POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/../../SDL2_image-2.0.4/lib/x86/libwebp-7.dll" + $) + + add_custom_command(TARGET min_eez_sample POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/../../SDL2_image-2.0.4/lib/x86/SDL2_image.dll" + $) + + add_custom_command(TARGET min_eez_sample POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/../../SDL2_image-2.0.4/lib/x86/zlib1.dll" + $) +endif() + +if(${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") + add_custom_command(TARGET min_eez_sample POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + "${PROJECT_SOURCE_DIR}/src/platform/simulator/emscripten" + $) +endif() diff --git a/README.md b/README.md new file mode 100644 index 0000000..8d7eb8e --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +### Ownership and License + +The contributors are listed in CONTRIB.TXT. This project uses the GPL v3 license, see LICENSE.TXT. +This project uses the [C4.1 (Collective Code Construction Contract)](http://rfc.zeromq.org/spec:22) process for contributions. +To report an issue, use the [issues page](https://github.com/eez-open/eez-flow-template-sdl/issues) tracker. + +## Build + +#### Linux + +``` +sudo apt-get update +sudo apt-get install -y git libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev cmake build-essential libbsd-dev +git clone https://github.com/eez-open/eez-flow-template-sdl +mkdir -p eez-flow-template-sdl/build/linux +cd eez-flow-template-sdl/build/linux +cmake ../.. +make +``` + +Start simulator with: + +``` +./eez-flow-template-sdl +``` + +#### Windows + +Install [Visual Studio Community 2017](https://visualstudio.microsoft.com/downloads/) and [CMake](https://cmake.org/install/). + +Use git to clone https://github.com/eez-open/eez-flow-template-sdl. + +Execute `cmake.bat`. + +Visual Studio solution is created in `\path\to\eez-flow-template-sdl\build\win32`. diff --git a/app.eez-project b/app.eez-project new file mode 100644 index 0000000..e9fcede --- /dev/null +++ b/app.eez-project @@ -0,0 +1,1954 @@ +{ + "settings": { + "general": { + "projectVersion": "v3", + "projectType": "firmware", + "imports": [ + { + "projectFilePath": "gui.eez-project" + } + ], + "flowSupport": true, + "displayWidth": 480, + "displayHeight": 272 + }, + "build": { + "configurations": [ + { + "name": "default" + } + ], + "files": [ + { + "fileName": "src/gui/document.h", + "template": "#pragma once\n\n#include \n#include \n\nnamespace eez {\nnamespace gui {\n\n//${eez-studio DATA_ENUM}\n\n//${eez-studio DATA_FUNCS_DECL}\n\n//${eez-studio DATA_ARRAY_DECL}\n\n//${eez-studio ACTIONS_ENUM}\n\n//${eez-studio ACTIONS_FUNCS_DECL}\n\n//${eez-studio ACTIONS_ARRAY_DECL}\n\n//${eez-studio GUI_FONTS_ENUM}\n\n//${eez-studio GUI_BITMAPS_ENUM}\n\n//${eez-studio GUI_STYLES_ENUM}\n\n//${eez-studio GUI_THEMES_ENUM}\n\n//${eez-studio GUI_COLORS_ENUM}\n\n//${eez-studio GUI_PAGES_ENUM}\n\n//${eez-studio GUI_ASSETS_DECL_COMPRESSED}\n\n} // namespace gui\n} // namespace eez\n" + }, + { + "fileName": "src/gui/document.cpp", + "template": "#include \"document.h\"\n\nnamespace eez {\nnamespace gui {\n\n//${eez-studio DATA_ARRAY_DEF}\n\n//${eez-studio ACTIONS_ARRAY_DEF}\n\n//${eez-studio GUI_ASSETS_DEF_COMPRESSED}\n\n} // namespace gui\n} // namespace eez\n" + } + ], + "destinationFolder": "." + } + }, + "variables": { + "globalVariables": [], + "structures": [], + "enums": [] + }, + "actions": [], + "pages": [ + { + "components": [ + { + "type": "TextWidget", + "left": 0, + "top": 114, + "width": 480, + "height": 44, + "wireID": "eab24b5b-fd70-4464-d05a-d3bf0df7eac9", + "customInputs": [], + "customOutputs": [], + "data": "\"Hello, world!\"", + "style": { + "inheritFrom": "default" + } + } + ], + "connectionLines": [], + "localVariables": [], + "id": 1, + "name": "main", + "style": "background", + "left": 0, + "top": 0, + "width": 480, + "height": 272 + } + ], + "styles": [], + "fonts": [ + { + "name": "medium", + "renderingEngine": "freetype", + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12 + }, + "bpp": 8, + "height": 22, + "ascent": 18, + "descent": 4, + "glyphs": [ + { + "encoding": 32, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 4, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 32 + } + }, + { + "encoding": 33, + "x": 0, + "y": 0, + "width": 4, + "height": 14, + "dx": 4, + "glyphBitmap": { + "width": 4, + "height": 14, + "pixelArray": "28fcfc1718ffff0508fff20000f8df0000e7cd0000d7ba0000c7a80000b6950000a682000095700000855d0000020200239c9c0538ffff08" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 33 + } + }, + { + "encoding": 34, + "x": 1, + "y": 8, + "width": 5, + "height": 6, + "dx": 6, + "glyphBitmap": { + "width": 5, + "height": 6, + "pixelArray": "f5f122fccbf8ca20ffa1f89e20ff75f87220ff48f84620ff1b0401010401" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 34 + } + }, + { + "encoding": 35, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "00006cfc7d1efcc80000008fff5c41ffa8000000b1ff3964ff85000000d3ff1687ff620056fcfffffdfffffe0b3ab5ffe7a4f4ffa8060042ffa401f3f4010039beffd49ffff39c055fffffffffffffff0502a9ff435bff8f040100c7ff2078ff6d000000e7fc0498ff4e000008ffe000b8ff2f000025ffc000d8ff100000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 35 + } + }, + { + "encoding": 36, + "x": 0, + "y": -2, + "width": 8, + "height": 18, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 18, + "pixelArray": "0000001844000000000000308e0000000030bcf7ffd443000febffcdc1fff21358fff40701d5ff6271fff505009acb5652ffff87000000000ce6ffff8c0200000039f4ffffa70500000034e9ffff9f0000000023ddffff490532470023f6ffa86fffd30000adffc83cfffd2100b0ffac03d1ffe2adfeff4c001cadf2ffe4630000000000b7010000000000005a000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 36 + } + }, + { + "encoding": 37, + "x": 0, + "y": 0, + "width": 16, + "height": 14, + "dx": 16, + "glyphBitmap": { + "width": 16, + "height": 14, + "pixelArray": "0043d0f9e381020000c8d6000000000009eeffb3ebff540014fe9200000000003bffc4006cff990059ff4b000000000052ffb10056ffaf00a0f90b000000000052ffb10056ffae01e6bd00000000000039ffc90072ff962eff7500000000000007eaffaeecff4e75ff2e0a6897893700003fd3ffec8201bce601b5fffffffe410000000200000bf9a016ffeb197cffa00000000000004aff5838ffc60043ffc100000000000091fe133bffc50041ffc3000000000000d8ca0026ffdb0155ffaf00000000001fff830002e0ffb2e1ff69000000000065ff3c000036c7faeb9205" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 37 + } + }, + { + "encoding": 38, + "x": 0, + "y": 0, + "width": 10, + "height": 14, + "dx": 10, + "glyphBitmap": { + "width": 10, + "height": 14, + "pixelArray": "000063dcf7bf380000000039fff6b5ffef0c0000008fff8c00caff4800000094ff8701e3ff3600000054ffbe36ffd90200000005dcfcc2fd40000000000064ffff6400000000000ad2fffe31009ab817008affcaffc604f4fe0902eeff28b7ff8bffca0021fff40129fcffff670016fffb0c02c3ffff480300bcffc8cbfff1ffff30001baff7f0a8177ef630" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 38 + } + }, + { + "encoding": 39, + "x": 1, + "y": 8, + "width": 3, + "height": 6, + "dx": 5, + "glyphBitmap": { + "width": 3, + "height": 6, + "pixelArray": "d9fc0ddce300dcbb00dc9200dc6900040200" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 39 + } + }, + { + "encoding": 40, + "x": 1, + "y": -3, + "width": 4, + "height": 17, + "dx": 5, + "glyphBitmap": { + "width": 4, + "height": 17, + "pixelArray": "001badd402cdffb342ffe00588ff9700afff7700c6ff6300d6ff5900dbff5500dcff5400dcff5400d6ff5800c7ff6100b0ff75008aff980042ffdf0502cfffb0001db1d7" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 40 + } + }, + { + "encoding": 41, + "x": 0, + "y": -3, + "width": 5, + "height": 17, + "dx": 5, + "glyphBitmap": { + "width": 5, + "height": 17, + "pixelArray": "71d552000050f8fe3900007affa7000030ffed01000dffff170001fbff2d0000f0ff3a0000edff410000ecff440000edff420000f0ff3a0001faff2e000cffff170032ffee01007cffa7004ff8fe390073d9540000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 41 + } + }, + { + "encoding": 42, + "x": 0, + "y": 8, + "width": 7, + "height": 6, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 6, + "pixelArray": "000018fc890000018e2bfc78723d19e6fdfefafe780004a1fff62600002cf88ff698000036c40f878402" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 42 + } + }, + { + "encoding": 43, + "x": 0, + "y": 3, + "width": 7, + "height": 8, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 8, + "pixelArray": "000028fc7b0000000028ff7c0000589cacffcd9c9590fffffffffff403042cff7f0404000028ff7c0000000028ff7c000000000104020000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 43 + } + }, + { + "encoding": 44, + "x": 0, + "y": -3, + "width": 3, + "height": 6, + "dx": 4, + "glyphBitmap": { + "width": 3, + "height": 6, + "pixelArray": "0c242354fff454fff4003ae016e16e022c00" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 44 + } + }, + { + "encoding": 45, + "x": 0, + "y": 4, + "width": 6, + "height": 3, + "dx": 6, + "glyphBitmap": { + "width": 6, + "height": 3, + "pixelArray": "089c9c9c9c0a0cffffffff10010404040401" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 45 + } + }, + { + "encoding": 46, + "x": 0, + "y": 0, + "width": 4, + "height": 3, + "dx": 4, + "glyphBitmap": { + "width": 4, + "height": 3, + "pixelArray": "0824240238ffff0838ffff08" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 46 + } + }, + { + "encoding": 47, + "x": 0, + "y": 0, + "width": 7, + "height": 14, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 14, + "pixelArray": "00000000a1f20800000002eab60000000032ff6e0000000079ff2700000000c0df010000000dfb98000000004fff500000000096fb0e00000000ddc10000000024ff7a000000006cff3200000000b3ea0200000006f4a30000000041ff5c00000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 47 + } + }, + { + "encoding": 48, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "00098de6f9d25900009bffebb2feff480bfaff5200a6ffb734ffff27007cffe33cffff240078ffec3cffff240078ffec3cffff240078ffec3cffff240078ffec3cffff240078ffec3cffff240078ffec35ffff29007dffe40efbff5700abffb80099ffebaffeff4a00098ee9fdd55c00" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 48 + } + }, + { + "encoding": 49, + "x": 1, + "y": 0, + "width": 6, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 6, + "height": 14, + "pixelArray": "00056bf6fc0c4cdcffffff0c88fde1ffff0c210f50ffff0c000050ffff0c000050ffff0c000050ffff0c000050ffff0c000050ffff0c000050ffff0c000050ffff0c000050ffff0c000050ffff0c000050ffff0c" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 49 + } + }, + { + "encoding": 50, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "000685e1fadb74020089fff6b1f9ff6d02f0ff700087ffce1cffff390064fff317a0a01e008bffe9000000000ceaffaa000000008cffff380000002bfbff9d00000001c0ffe7100000005affff540000000fe7ffb0010000008ffff21b00000023fcffd99c9c9c603cffffffffffff9c" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 50 + } + }, + { + "encoding": 51, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "001098e9f8d15b0000b8ffe4b5feff4f25ffff3a00a7ffb84cffff11007dffdc25747406008affc8000000001cd8ff750000006bffff940300000046c6ffea2a0000000001baffa41d5c5c050080ffd84affff170080ffd821ffff6106c0ffaa00c2fffffbffff4b0017a4eefdd76300" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 51 + } + }, + { + "encoding": 52, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "0000001dfafcdd00000000007fffffe00000000003e3ffffe0000000004bffc7ffe000000000b0ff75ffe00000001afcc858ffe00000007bff7558ffe0000002e0ff2258ffe0000045ffcf0058ffe0000064fffffcfefffffc4b63fcfcfcfefffffc4b0000000058ffe000000000000058ffe000000000000058ffe00000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 52 + } + }, + { + "encoding": 53, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "00dbfcfcfcfcfc6300e2ffb2a4a4a44100e6ff200000000000e9ff170000000000edff0e0000000000f0ffabf3ea890300f4ffebb0fbff6900d0d836008fffc2000000000064ffe400000000005effe926fcfc270064ffd80dfeff4f008affa800b5ffe7a8f8ff440018aef0fdd96100" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 53 + } + }, + { + "encoding": 54, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "000276dff9dd820400006afff9aff4ff7c0000d8ff7b007affd5000fffff4c0031887f0022ffff3d000000000024ffff5f899244000024fffffcffffff5a0024ffff9310afffcd0024ffff3c005dfffc0323ffff3c0052ffff0913ffff420057fff60100dbff740086ffc1000068fff5a9f7ff5400000173e1fddd690000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 54 + } + }, + { + "encoding": 55, + "x": 0, + "y": 0, + "width": 7, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 7, + "height": 14, + "pixelArray": "53fcfcfcfcfc9e36a4a4a4e8ff9100000000e1ff5c00000019ffff2600000050ffee0100000088ffb800000000bfff8200000004f4ff4b0000002fffff1500000066ffde000000009effa700000000d6ff7000000010ffff3a00000045fffb090000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 55 + } + }, + { + "encoding": 56, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "000c95e9f8cb4400009effe9befff92206f6ff4b01d1ff771cffff2300a7ff980cfeff3300b6ff8600b9ff8b1af1ff390020f1ffffff92000088ffe7b9ffe81f1afdff3600b5ff974cfffb03007dffcf4dfff801007affd128ffff2600a8ffab01c2ffdcaeffff480016a4effcd45d00" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 56 + } + }, + { + "encoding": 57, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "00058ae5f8ca4400008fffeab9fffb2e0af6ff5200b8ff9d34ffff200084ffd246ffff19007cffe33effff24007cffe413fdff720fbdffe4009cfffffffeffe40005699f818effe400000000007effe11aa0a014008fffcd10feff4c04caff9900b6fffbe8fffc310014a1ecfcd45000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 57 + } + }, + { + "encoding": 58, + "x": 1, + "y": 0, + "width": 3, + "height": 9, + "dx": 4, + "glyphBitmap": { + "width": 3, + "height": 9, + "pixelArray": "959c2cf4ff48040402000000000000000000959c2cf4ff48040402" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 58 + } + }, + { + "encoding": 59, + "x": 1, + "y": -2, + "width": 3, + "height": 12, + "dx": 4, + "glyphBitmap": { + "width": 3, + "height": 12, + "pixelArray": "f5fc47f8ff482b2c0d00000000000000000023240cf8ff54f8ff5407db42a9cc08150200" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 59 + } + }, + { + "encoding": 60, + "x": 0, + "y": 0, + "width": 6, + "height": 11, + "dx": 7, + "glyphBitmap": { + "width": 6, + "height": 11, + "pixelArray": "000000000005000000016689000016b2ff94004be9ffc8235ffffd8205007cff940100004ffaffa810000030d4ffe03700000990ff94000000004579000000000001" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 60 + } + }, + { + "encoding": 61, + "x": 0, + "y": 4, + "width": 7, + "height": 6, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 6, + "pixelArray": "039c9c9c9c9c3104ffffffffff5001040404040402039c9c9c9c9c3104ffffffffff5001040404040402" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 61 + } + }, + { + "encoding": 62, + "x": 0, + "y": 0, + "width": 7, + "height": 11, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 11, + "pixelArray": "020300000000000cc421000000000cfff25f010000016bf7ffab130000002ad0ffe6050000001cedff08000047e8ffd104038dfffe8907000cffe13f0000000ca20f0000000001000000000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 62 + } + }, + { + "encoding": 63, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "002db9f2f4c23f0009e7ffd3c5fff92836fffe0e01c9ff872afff70700a7ffa60533060001d6ff8b000000003fffff3b0000000dd8ffad00000006b6ffd51000000079ffd8190000000084ff94000000000047884f0000000000162419000000000098ffb0000000000098ffb0000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 63 + } + }, + { + "encoding": 64, + "x": 0, + "y": -3, + "width": 16, + "height": 17, + "dx": 16, + "glyphBitmap": { + "width": 16, + "height": 17, + "pixelArray": "00000000003c9dd4f6f6d289150000000000000da0ffffd5abb1e6ffed3b0000000008c4ffc429000000036dfceb180000007fffb70600000000000076ff92000015f6f6180024b7f4a0fcaf05e3ec02006dff920015e6ffcfd5ff8b0096ff2300adff3f0093ffa90292ff650070ff3700daff0d07f2ff1e00b6ff3f006cff3401faea0035ffdd0000daff19008dff1a06ffdf004bffcd0005faf30102d6de0101faeb0038fff7337cffd9006cff790000deff1406e2fffff5f6fac3ffd50a00009dff640030bfd7576cf2f4a6160000003affe111000000000001010000000000009fffd43700000000010c000000000000069bffffdaaea4bce89a00000000000000003ba0d8fafce0ba6800000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 64 + } + }, + { + "encoding": 65, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "000006f5fcd2000000000031fffffd0b0000000064ffffff3a0000000097ffeeff6d00000000caffa0ffa000000006f9ff4dffd300000031ffec0efffd0a000064ffc300e4ff39000097ff9900baff6c0000cafffffcffff9f0006f9ffb9a4c4ffd20031ffff1b003cfffc0964fff0010011ffff3897ffc5000000e6ff6b" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 65 + } + }, + { + "encoding": 66, + "x": 1, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "f5fcfcfae5a42100f8ffd5abe4ffe00af8ff88000dedff4df8ff880000c5ff6df8ff880000d8ff5bf8ff880352fff318f8ffffffffe93c00f8ffd5a9e5ffcf17f8ff88000ae2ff8ef8ff8800009fffcbf8ff88000099ffd2f8ff880003d5ffa9f8ffd29fd6fffe3ef8fffffff7c84b00" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 66 + } + }, + { + "encoding": 67, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "00047ad8f8edb225000084fffaaedaffe00703eeff860016ffff4820ffff5d0000fbff6b2fffff580000f8ff7030ffff58000010100730ffff58000000000030ffff58000000000030ffff5800003334172fffff580000f8ff7021ffff5e0001fcff6903efff89001bffff430083fffaabd5ffdb0400037bdffcf2b52500" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 67 + } + }, + { + "encoding": 68, + "x": 1, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "f5fcfcfae4a72300f8ffd5a9e8ffe60df8ff880025ffff63f8ff880001f8ff8cf8ff880000f5ff98f8ff880000f4ff98f8ff880000f4ff98f8ff880000f4ff98f8ff880000f4ff98f8ff880000f5ff98f8ff880001fcff88f8ff88002cffff5bf8ffd2a2e6ffe009f8ffffffe9ac2100" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 68 + } + }, + { + "encoding": 69, + "x": 1, + "y": 0, + "width": 6, + "height": 14, + "dx": 7, + "glyphBitmap": { + "width": 6, + "height": 14, + "pixelArray": "f5fcfcfcfcc9f8ffd5a4a483f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8fffffcfc1cf8ffd5a4a412f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ffd29c9c82f8ffffffffd4" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 69 + } + }, + { + "encoding": 70, + "x": 1, + "y": 0, + "width": 6, + "height": 14, + "dx": 7, + "glyphBitmap": { + "width": 6, + "height": 14, + "pixelArray": "f5fcfcfcfcaef8ffd5a4a471f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8fffffcfc0cf8ffd5a4a408f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 70 + } + }, + { + "encoding": 71, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "000377d8f9eeb32c00007ffffab1d6ffeb0f02ecff87000cf9ff5e1dffff5c0000e0ff852dffff58000094ac5f30ffff58000000000030ffff58000000000030ffff5820fcfcfc9a30ffff5815a4dfff9c2dffff580000a5ff9c19ffff610000afff9c01e6ff900005e2ff9c0080fffcafcbf6ff9c000582e4fdd049ff9c" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 71 + } + }, + { + "encoding": 72, + "x": 1, + "y": 0, + "width": 8, + "height": 14, + "dx": 10, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "f1fc8e0000a2fcd9f4ff900000a4ffdcf4ff900000a4ffdcf4ff900000a4ffdcf4ff900000a4ffdcf4ff900000a4ffdcf4fffffcfcffffdcf4ffd8a4a4dfffdcf4ff900000a4ffdcf4ff900000a4ffdcf4ff900000a4ffdcf4ff900000a4ffdcf4ff900000a4ffdcf4ff900000a4ffdc" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 72 + } + }, + { + "encoding": 73, + "x": 1, + "y": 0, + "width": 3, + "height": 14, + "dx": 5, + "glyphBitmap": { + "width": 3, + "height": 14, + "pixelArray": "e1fc92e4ff94e4ff94e4ff94e4ff94e4ff94e4ff94e4ff94e4ff94e4ff94e4ff94e4ff94e4ff94e4ff94" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 73 + } + }, + { + "encoding": 74, + "x": 0, + "y": 0, + "width": 5, + "height": 14, + "dx": 6, + "glyphBitmap": { + "width": 5, + "height": 14, + "pixelArray": "0000fcfc7e0000ffff7f0000ffff7f0000ffff7e0000ffff7e0000ffff7e0000ffff7d0000ffff7d0000ffff7c0000ffff7c0002ffff7b002fffff6ca9f4ffff30d8fde37000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 74 + } + }, + { + "encoding": 75, + "x": 1, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "f5fc86000bebfc6df8ff88006afff410f8ff8802dbff9800f8ff884fffff2d00f8ff88c1ffc00000f8ffbcffff540000f8ffffffff1e0000f8ffefefff750000f8ff9198ffd60100f8ff883bffff3600f8ff8801ddff9600f8ff880081ffef08f8ff880025ffff57f8ff880000c7ffb8" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 75 + } + }, + { + "encoding": 76, + "x": 1, + "y": 0, + "width": 6, + "height": 14, + "dx": 7, + "glyphBitmap": { + "width": 6, + "height": 14, + "pixelArray": "f5fc86000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ff88000000f8ffdfb8b899f8ffffffffd4" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 76 + } + }, + { + "encoding": 77, + "x": 1, + "y": 0, + "width": 10, + "height": 14, + "dx": 12, + "glyphBitmap": { + "width": 10, + "height": 14, + "pixelArray": "c4fce200000042fcfc5dcbffff1a000078ffff62cfffff4d0000adffff66d4ffff810000e2ffff6bd8fff4b50018fff6ff6fdcffbfe9014dffc0ff73e0ff85ff1d82ff88ff77e5ff4cff51b7e46bff7ce9ff14ff86edaf66ff80edfe00dcdaff7a61ff84f2fa00a7ffff455dff89f6f60072ffff1158ff8dfaf2003dffdb0054ff91feee000bfda6004fff96" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 77 + } + }, + { + "encoding": 78, + "x": 1, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "f5ea090000ddfc34f8ff620000e0ff34f8ffcf0100e0ff34f8ffff3b00e0ff34f8ffffa800e0ff34f8fffcfb1ae0ff34f8ffadff82e0ff34f8ff47fee9e7ff34f8ff28b3ffffff34f8ff284affffff34f8ff2803dfffff34f8ff280078ffff34f8ff280016faff34f8ff280000a5ff34" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 78 + } + }, + { + "encoding": 79, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 10, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "000479d7f9eeb52e000084fffbb1d5fff01803f0ff87000bf2ff7921ffff5f0000d3ffab2fffff5c0000d0ffbc30ffff5c0000d0ffbc30ffff5c0000d0ffbc30ffff5c0000d0ffbc30ffff5c0000d0ffbc30ffff5c0000d0ffbb1fffff5e0000d3ffaa02ecff850009f2ff790082fff9a9cefff01800047adafcf2be3100" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 79 + } + }, + { + "encoding": 80, + "x": 1, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "f5fcfcfcf3ba2c00f8ffd5a8ddffe80ef8ff880010f8ff59f8ff880000dcff7ef8ff880000e5ff7af8ff88024cffff48f8ffffffffffba02f8ffd5a496570400f8ff880000000000f8ff880000000000f8ff880000000000f8ff880000000000f8ff880000000000f8ff880000000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 80 + } + }, + { + "encoding": 81, + "x": 0, + "y": -3, + "width": 9, + "height": 17, + "dx": 10, + "glyphBitmap": { + "width": 9, + "height": 17, + "pixelArray": "000479d7f9eeb52e000084fffbb1d5fff01703f0ff87000bf2ff7821ffff5f0000d3ffab2fffff5c0000d0ffbc30ffff5c0000d0ffbc30ffff5c0000d0ffbc30ffff5c0000d0ffbc30ffff5c0000d0ffbc30ffff5c0000d0ffbb1fffff5e0000d3ffaa02ecff850009f2ff780082fff9a9cefff11800047adafdfffa3a00000000000090ffaa08000000000004acf709000000000000034d00" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 81 + } + }, + { + "encoding": 82, + "x": 1, + "y": 0, + "width": 8, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "f5fcfcf9e3a62700f8ffd5aae8ffeb15f8ff880016fbff69f8ff880000d6ff8cf8ff880001e5ff82f8ff880764ffff50f8ffffffffffb604f8ffd5c0fffa0a00f8ff8820ffff4500f8ff8800deff8d00f8ff88009cffd500f8ff88005affff1df8ff880019ffff64f8ff880000d6ffac" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 82 + } + }, + { + "encoding": 83, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "0016a1ebf7cc490001c8ffdab4fffa272fffff1e00aeff874affff200076d2722dffffb10500000002d0ffffb60c00000026e8ffffca1400000023dbffffc90600000016ccffff74022a520011e5ffd044fff5030089ffed15fdff430088ffd100a1ffefa8f5ff6700098be4fedc6d01" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 83 + } + }, + { + "encoding": 84, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 7, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "edfcfcfcfcfcfc1c9aa4defff5a4a4120000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe00000000000a0ffe0000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 84 + } + }, + { + "encoding": 85, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 10, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "14fcfc5b0000c5fca614ffff5c0000c8ffa814ffff5c0000c8ffa814ffff5c0000c8ffa814ffff5c0000c8ffa814ffff5c0000c8ffa814ffff5c0000c8ffa814ffff5c0000c8ffa814ffff5c0000c8ffa813ffff5c0000c9ffa606ffff630000cfff9600d6ff95000df5ff68006dfffeaed3ffed14000274dbfbf3bc3200" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 85 + } + }, + { + "encoding": 86, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 9, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "81fcb1000001eefc4e51ffe2000020ffff1c1effff13004dffe90101ecff42007affb60000b9ff7100a7ff82000086ffa100d4ff4f000053ffd007fcff1c000020fffa35ffe901000001edff8bffb600000000baffe5ff820000000087ffffff4f0000000054ffffff1c0000000021ffffe9010000000001eeffb6000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 86 + } + }, + { + "encoding": 87, + "x": 0, + "y": 0, + "width": 12, + "height": 14, + "dx": 12, + "glyphBitmap": { + "width": 12, + "height": 14, + "pixelArray": "5efcb90000cefb0b007bfc903bffdb0003f8ff33009cff6e17fffa0224ffff5d00bcff4a01f3ff1b4effff8800dcff2600cfff3b77fffcb202fafd0600abff5aa1fac2dd1bffde000087ff7acbd394fe45ffba000063ff9bf4a869ff8cff9600003fffd8ff7e3fffd7ff7200001bffffff5314ffffff4e000002f6ffff2900eaffff2a000000d3fffa0500bffffe08000000afffd4000095ffe2000000008bffa900006affbe0000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 87 + } + }, + { + "encoding": 88, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "8bfcc9000040fce70627ffff35009bff900000bdff9f07efff30000054fff761ffcf00000005e7fff4ff6e0000000083fffffa14000000002bffffad000000000067ffffa80000000000c7fffffa1700000027fff3e1ff7900000086ff9f78ffdf030003e4ff4316f9ff4a0045ffe40300a4ffb300a5ff8a00003afffe1f" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 88 + } + }, + { + "encoding": 89, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "adfca4000050fcf0085effef05009bffaa0011fbff4101e5ff580000b8ff8f30fff90e000065ffde7bffb400000016fdffe4ff6200000000c0fffffd14000000006dffffbe00000000001dffff71000000000008ffff5c000000000008ffff5c000000000008ffff5c000000000008ffff5c000000000008ffff5c000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 89 + } + }, + { + "encoding": 90, + "x": 0, + "y": 0, + "width": 7, + "height": 14, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 14, + "pixelArray": "38fcfcfcfcfccd24a4a4a4efffb200000011faff5c00000061fff70e000000b7ffad00000013fbff5600000063fff40b000000baffa700000015fcff5000000066fff108000000bcffa100000016fdff4a0000005effffa29c9c8268ffffffffffd4" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 90 + } + }, + { + "encoding": 91, + "x": 0, + "y": -3, + "width": 6, + "height": 17, + "dx": 6, + "glyphBitmap": { + "width": 6, + "height": 17, + "pixelArray": "05fcfcfcfc1405ffffa7a40d05ffff08000005ffff08000006ffff08000006ffff08000006ffff08000006ffff08000007ffff08000007ffff08000007ffff08000007ffff08000008ffff08000008ffff08000008ffff08000008ffffa3a00a08ffffffff10" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 91 + } + }, + { + "encoding": 92, + "x": 0, + "y": 0, + "width": 7, + "height": 14, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 14, + "pixelArray": "40fc5a0000000007f5a20000000000b4e802000000006dff310000000026ff780000000001dec0000000000097fb0d0000000050ff4f000000000efb960000000000c1de01000000007aff250000000033ff6d0000000002eab40000000000a4f508" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 92 + } + }, + { + "encoding": 93, + "x": 0, + "y": -3, + "width": 5, + "height": 17, + "dx": 5, + "glyphBitmap": { + "width": 5, + "height": 17, + "pixelArray": "9efcfcfc7767a4dbff78000098ff78000098ff78000098ff78000098ff78000098ff78000098ff78000098ff78000098ff78000098ff78000098ff78000098ff78000098ff78000098ff7864a0d9ff78a0ffffff78" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 93 + } + }, + { + "encoding": 94, + "x": 0, + "y": 8, + "width": 8, + "height": 6, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 6, + "pixelArray": "00004dfcfc3200000000bbffffa000000029ffb9d2f916000095ff5d76ff7d000ff4f50c1dfee7062c846100006e8421" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 94 + } + }, + { + "encoding": 95, + "x": 0, + "y": -3, + "width": 7, + "height": 2, + "dx": 6, + "glyphBitmap": { + "width": 7, + "height": 2, + "pixelArray": "a0a0a0a0a0a00affffffffffff10" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 95 + } + }, + { + "encoding": 96, + "x": 0, + "y": 10, + "width": 5, + "height": 4, + "dx": 5, + "glyphBitmap": { + "width": 5, + "height": 4, + "pixelArray": "04c8fc6100002af8b700000073fb120000010401" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 96 + } + }, + { + "encoding": 97, + "x": 0, + "y": 0, + "width": 8, + "height": 10, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 10, + "pixelArray": "0024aff1f1a7100001cfffc9e5ff8d0021ffff1770ffd300145c5c0370ffe000000040bfffffe000007cffd287ffe00022fffd1e64ffe0004fffef026bffe1002affffb7e4ffeb00007df3db51fffe05" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 97 + } + }, + { + "encoding": 98, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "18fcfc3c0000000018ffff3c0000000018ffff3c0000000018ffff3c0000000018ffff88d4f0700018ffffdbc4fffd1a18ffff3d09fbff5618ffff3c00edff6418ffff3c00ecff6418ffff3c00ecff6418ffff3c00edff6318ffff3c07fbff5018ffffcfbbfffa1518ffff95e0f16800" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 98 + } + }, + { + "encoding": 99, + "x": 0, + "y": 0, + "width": 7, + "height": 10, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 10, + "pixelArray": "0030c3f6eda41003e0ffc8e3ff8c2fffff1964ffcb4affff0944c4a34cffff080000004cffff080000004affff0954f4cb30ffff1865ffc904e2ffc8e2ff890034c8faf0a30e" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 99 + } + }, + { + "encoding": 100, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "000000002cfcfc28000000002cffff28000000002cffff28000000002cffff28004ce3e99affff2804e9ffd2ceffff282fffff272cffff2846ffff112cffff2848ffff102cffff2848ffff102cffff2847ffff112cffff2834ffff222cffff2806f4ffccc5ffff28005be6ed9cffff28" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 100 + } + }, + { + "encoding": 101, + "x": 0, + "y": 0, + "width": 7, + "height": 10, + "dx": 8, + "glyphBitmap": { + "width": 7, + "height": 10, + "pixelArray": "002dc1f6ee9f0b03ddffc3deff832effff0f58ffcb4affff9ebcffe14cffffffffffe44cffff080404044affff042b887930ffff1460ffd504e3ffcde6ff8d0035c7f9efa00d" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 101 + } + }, + { + "encoding": 102, + "x": 0, + "y": 0, + "width": 6, + "height": 14, + "dx": 5, + "glyphBitmap": { + "width": 6, + "height": 14, + "pixelArray": "000caef5f00f006dfffcb30d0098ffbe000000a0ffb00000aefffffffc1071deffe4a40b00a0ffb0000000a0ffb0000000a0ffb0000000a0ffb0000000a0ffb0000000a0ffb0000000a0ffb0000000a0ffb00000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 102 + } + }, + { + "encoding": 103, + "x": 0, + "y": -3, + "width": 9, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "000000000000000f00002abbf6e56486d40101d9ffc2e1ffdb680428fff70457ffa7000042ffe60044ffcf00002ffff40454ffc2000003d3ffbaddff7d0000007df2f8f39d0800002cfe9b1b03000000002cfafffffdda73010002a8e99eb9f2ff430066ff84000068ff6f0096ffeeada6e7ff440020b0ecfffdda7c0100" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 103 + } + }, + { + "encoding": 104, + "x": 0, + "y": 0, + "width": 8, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 14, + "pixelArray": "10fcfc3f0000000010ffff400000000010ffff400000000010ffff400000000010ffff6fb8f6b30310ffffe9beffff3b10ffff4309ffff4c10ffff4004ffff4c10ffff4004ffff4c10ffff4004ffff4c10ffff4004ffff4c10ffff4004ffff4c10ffff4004ffff4c10ffff4004ffff4c" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 104 + } + }, + { + "encoding": 105, + "x": 0, + "y": 0, + "width": 4, + "height": 14, + "dx": 4, + "glyphBitmap": { + "width": 4, + "height": 14, + "pixelArray": "08fcfc4b06a4a431000000000000000008fcfc4708ffff4808ffff4808ffff4808ffff4808ffff4808ffff4808ffff4808ffff4808ffff48" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 105 + } + }, + { + "encoding": 106, + "x": -1, + "y": -3, + "width": 5, + "height": 17, + "dx": 4, + "glyphBitmap": { + "width": 5, + "height": 17, + "pixelArray": "0000e1fc73000093a44b000000000000000000000000ddfc6f0000e0ff700000e0ff700000e0ff700000e0ff700000e0ff700000e0ff700000e0ff700000e0ff700000e0ff700004eeff6d31d9ffff3734f7ec7d01" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 106 + } + }, + { + "encoding": 107, + "x": 0, + "y": 0, + "width": 9, + "height": 14, + "dx": 8, + "glyphBitmap": { + "width": 9, + "height": 14, + "pixelArray": "18fcfc38000000000018ffff38000000000018ffff38000000000018ffff38000000000018ffff38009ffcd90818ffff383fffff4c0018ffff3ed6ffb3000018ffffb0fff822000018ffffffffef09000018ffffb3e3ff5d000018ffff3c89ffc3000018ffff382effff2a0018ffff3800d2ff8f0018ffff380076ffee08" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 107 + } + }, + { + "encoding": 108, + "x": 1, + "y": 0, + "width": 3, + "height": 14, + "dx": 4, + "glyphBitmap": { + "width": 3, + "height": 14, + "pixelArray": "f5fc5bf8ff5cf8ff5cf8ff5cf8ff5cf8ff5cf8ff5cf8ff5cf8ff5cf8ff5cf8ff5cf8ff5cf8ff5cf8ff5c" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 108 + } + }, + { + "encoding": 109, + "x": 0, + "y": 0, + "width": 12, + "height": 10, + "dx": 12, + "glyphBitmap": { + "width": 12, + "height": 10, + "pixelArray": "1cfcfc67d3f69039c7f7a6031cffffe9bbffffe9b4ffff3c1cffff2303fcff4600deff5b1cffff1800f8ff3c00d8ff5c1cffff1800f8ff3c00d8ff5c1cffff1800f8ff3c00d8ff5c1cffff1800f8ff3c00d8ff5c1cffff1800f8ff3c00d8ff5c1cffff1800f8ff3c00d8ff5c1cffff1800f8ff3c00d8ff5c" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 109 + } + }, + { + "encoding": 110, + "x": 0, + "y": 0, + "width": 8, + "height": 10, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 10, + "pixelArray": "1cfcfc6fb7f6a1011cffffe3c4ffff221cffff3a21ffff381cffff381cffff381cffff381cffff381cffff381cffff381cffff381cffff381cffff381cffff381cffff381cffff381cffff381cffff38" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 110 + } + }, + { + "encoding": 111, + "x": 0, + "y": 0, + "width": 7, + "height": 10, + "dx": 8, + "glyphBitmap": { + "width": 7, + "height": 10, + "pixelArray": "002cbff6ed9d0d04dfffc8e3ff9633ffff135dffe74bffff014dffff4cffff004cffff4cffff004cffff4bffff004dffff34ffff0f5dffe804e3ffc1deff9b0032c1f9efa110" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 111 + } + }, + { + "encoding": 112, + "x": 0, + "y": -3, + "width": 8, + "height": 13, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 13, + "pixelArray": "1cfcfc8dd8ef6d001cffffdac7fffc171cffff390bfdff4f1cffff3800f1ff601cffff3800f0ff601cffff3800f0ff601cffff3800f1ff5f1cffff3808fdff4c1cffffcdbefff9121cffff91e0ef65001cffff38000000001cffff38000000001cffff3800000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 112 + } + }, + { + "encoding": 113, + "x": 0, + "y": -3, + "width": 8, + "height": 13, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 13, + "pixelArray": "0048e1e995fcfc3004e8ffd3cdffff3030ffff2724ffff3043ffff1124ffff3044ffff1024ffff3044ffff1024ffff3043ffff1124ffff3030ffff2224ffff3005f1ffccc4ffff300059e6ed97ffff300000000024ffff300000000024ffff300000000024ffff30" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 113 + } + }, + { + "encoding": 114, + "x": 0, + "y": 0, + "width": 6, + "height": 11, + "dx": 6, + "glyphBitmap": { + "width": 6, + "height": 11, + "pixelArray": "00000000000214fcfc6bcea614fffffbb87914ffff77000014ffff40000014ffff40000014ffff40000014ffff40000014ffff40000014ffff40000014ffff400000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 114 + } + }, + { + "encoding": 115, + "x": 0, + "y": 0, + "width": 7, + "height": 10, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 10, + "pixelArray": "0054d4f7bb240021fdfbb4fccd015fffc6008ed71531ffff730a01000093ffff8b0200000283ffff9200000c0863ffff3167f56300c7ff5b31fef4abfcfd20005bd7fbd15700" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 115 + } + }, + { + "encoding": 116, + "x": 0, + "y": 0, + "width": 6, + "height": 13, + "dx": 6, + "glyphBitmap": { + "width": 6, + "height": 13, + "pixelArray": "00b6fc9e000000b8ffa0000000b8ffa00000aefffffffc1c71e7ffdea41200b8ffa0000000b8ffa0000000b8ffa0000000b8ffa0000000b8ffa0000000b4ffad00000088ffffdb320017c6fcf533" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 116 + } + }, + { + "encoding": 117, + "x": 0, + "y": 0, + "width": 8, + "height": 10, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 10, + "pixelArray": "2cfcfc2434fcfc1c2cffff2434ffff1c2cffff2434ffff1c2cffff2434ffff1c2cffff2434ffff1c2cffff2434ffff1c2cffff2434ffff1c2cffff2a37ffff1c19ffffd0e7ffff1c009ffac067ffff1c" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 117 + } + }, + { + "encoding": 118, + "x": 0, + "y": 0, + "width": 7, + "height": 10, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 10, + "pixelArray": "aefc8b00a3fc9280ffaf00c7ff634effd200e8ff331dfff40cfffb0701ecff43ffd10000bbff88ffa0000089ffccff6f000058fffeff3e000027ffffff0e000002f3ffdc0000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 118 + } + }, + { + "encoding": 119, + "x": 0, + "y": 0, + "width": 10, + "height": 10, + "dx": 10, + "glyphBitmap": { + "width": 10, + "height": 10, + "pixelArray": "7ffc6700d6f9063afc965bff8907fcff295eff7134ffab2cffff5082ff490effcc55fffe76a6ff2100e7ed7ef1cd9dcbf80300c0ffb7c3a0c4f0d2000099fff79474f5ffaa000072ffff6547ffff8300004bffff361bffff5b000024fffe0a01efff3400" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 119 + } + }, + { + "encoding": 120, + "x": 0, + "y": 0, + "width": 7, + "height": 10, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 10, + "pixelArray": "92fcb10064fc9926feff26c8ff2f00b1ffbdffc200003fffffff55000001d8ffe405000015f9ffe808000073ffffff620001d9ff98ffd4013fffc210f3ff48a5ff63008effbb" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 120 + } + }, + { + "encoding": 121, + "x": 0, + "y": -3, + "width": 7, + "height": 13, + "dx": 7, + "glyphBitmap": { + "width": 7, + "height": 13, + "pixelArray": "c3fc750067fcd289ffa50090ff9e4bffd300b8ff6610fefb07e0ff2f00ceff3afff504008fff8fffc0000051ffe4ff89000014ffffff51000000d5ffff1a00000098ffe30000000075ffab00000bb6f0ff52000010fdd574010000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 121 + } + }, + { + "encoding": 122, + "x": 0, + "y": 0, + "width": 6, + "height": 10, + "dx": 6, + "glyphBitmap": { + "width": 6, + "height": 10, + "pixelArray": "2cfcfcfcfcd51da4a4e3ffbe000009eeff5b00005effee080000c6ff9000002effff2b000095ffc400000cf2ff5e00005dffffa69c7f70ffffffffd0" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 122 + } + }, + { + "encoding": 123, + "x": 0, + "y": -3, + "width": 6, + "height": 17, + "dx": 6, + "glyphBitmap": { + "width": 6, + "height": 17, + "pixelArray": "00007de8fc4b0017ffffcc310035ffff1f000038ffff14000038ffff1400003affff1400004afffa05002ad4ffa8000044fffc5200000270ffe10000003effff0b000039ffff14000038ffff14000038ffff14000032ffff21000013feffca30000076ebff4c" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 123 + } + }, + { + "encoding": 124, + "x": 1, + "y": -3, + "width": 3, + "height": 17, + "dx": 4, + "glyphBitmap": { + "width": 3, + "height": 17, + "pixelArray": "dafc28ddff28ddff28ddff28deff28deff28deff28deff28dfff28dfff28dfff28dfff28e0ff28e0ff28e0ff28e0ff28e0ff28" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 124 + } + }, + { + "encoding": 125, + "x": 0, + "y": -3, + "width": 6, + "height": 17, + "dx": 6, + "glyphBitmap": { + "width": 6, + "height": 17, + "pixelArray": "43fce98400002cc9ffff1e000018ffff3e00000dffff4400000cffff4400000cffff44000002f6ff50000000a3ffd72f00004dfaff4c0000dcff76020006ffff4600000cffff4400000cffff4400000dffff4400001affff3b002bc7ffff1a0044ffed7d0000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 125 + } + }, + { + "encoding": 126, + "x": 0, + "y": 5, + "width": 8, + "height": 4, + "dx": 8, + "glyphBitmap": { + "width": 8, + "height": 4, + "pixelArray": "00218c630700220026efffffe4b4fd2e067a1753cbf57a010000000000010000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 126 + } + }, + { + "encoding": 127, + "x": 0, + "y": 0, + "width": 6, + "height": 12, + "dx": 6, + "glyphBitmap": { + "width": 6, + "height": 12, + "pixelArray": "25545454540770553c3c9b14702000007c14702000007c14702000007c14702000007c14702000007c14702000007c14702000007c14702000007c14702000007c14709b8c8cc514" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 12, + "encoding": 127 + } + } + ], + "alwaysBuild": false + } + ], + "bitmaps": [], + "colors": [ + { + "name": "background" + }, + { + "name": "text" + }, + { + "name": "text_inactive" + }, + { + "name": "dark_text" + }, + { + "name": "border" + }, + { + "id": 1, + "name": "backdrop" + }, + { + "name": "active_background" + }, + { + "name": "button_text" + }, + { + "name": "button_background" + }, + { + "name": "button_active_background" + }, + { + "name": "button_border" + }, + { + "name": "button_disabled_text" + }, + { + "name": "button_disabled_background" + }, + { + "name": "button_disabled_border" + }, + { + "name": "error" + }, + { + "name": "note" + }, + { + "name": "switch_widget_color" + }, + { + "name": "switch_widget_background_on" + }, + { + "name": "switch_widget_background_off" + }, + { + "name": "switch_widget_border" + }, + { + "name": "slider_widget_color" + }, + { + "name": "slider_widget_background" + }, + { + "name": "drop_down_list_color" + }, + { + "name": "drop_down_list_color_disabled" + }, + { + "name": "drop_down_list_background" + }, + { + "name": "drop_down_list_border" + }, + { + "name": "drop_down_list_active_background" + }, + { + "name": "text_input_color" + }, + { + "name": "text_input_color_disabled" + }, + { + "name": "text_input_background" + }, + { + "name": "text_input_active_background" + }, + { + "name": "text_input_border" + } + ], + "themes": [ + { + "name": "default", + "colors": [ + "#474747", + "#ffffff", + "#c0c0c0", + "#202020", + "#3b3b3b", + "#808080", + "#c490ee", + "#ffffff", + "#202020", + "#5c5c5c", + "#808080", + "#404040", + "#202020", + "#808080", + "#ffa3a3", + "#fce440", + "#ffffff", + "#0080ff", + "#808080", + "#c0c0c0", + "#0080ff", + "#ffffff", + "#404040", + "#808080", + "#ffffff", + "#404040", + "#c0c0c0", + "#404040", + "#808080", + "#ffffff", + "#c0c0c0", + "#404040" + ] + } + ] +} \ No newline at end of file diff --git a/cmake.bat b/cmake.bat new file mode 100644 index 0000000..53a0d63 --- /dev/null +++ b/cmake.bat @@ -0,0 +1,11 @@ +set SDL2DIR=..\..\SDL2-2.0.14 +set SDL2IMAGEDIR=..\..\SDL2_image-2.0.4 + +if not exist "build" mkdir "build" +if not exist "build\win32" mkdir "build\win32" + +cd build\win32 + +cmake ..\.. + +cd ..\.. \ No newline at end of file diff --git a/cmake/Emscripten.cmake b/cmake/Emscripten.cmake new file mode 100644 index 0000000..f484ed9 --- /dev/null +++ b/cmake/Emscripten.cmake @@ -0,0 +1,361 @@ +# This file is a 'toolchain description file' for CMake. +# It teaches CMake about the Emscripten compiler, so that CMake can generate makefiles +# from CMakeLists.txt that invoke emcc. + +# At the moment this required minimum version is not exact (i.e. we do not know of a feature that needs CMake 3.0.0 specifically) +# It is possible that CMake 3.0.0 is too old and will not actually work. If you do find such a case, please report it at Emscripten +# bug tracker to revise the minimum requirement. See also https://github.com/juj/emsdk/issues/108 +cmake_minimum_required(VERSION 3.0.0) + +# To use this toolchain file with CMake, invoke CMake with the following command line parameters +# cmake -DCMAKE_TOOLCHAIN_FILE=/cmake/Modules/Platform/Emscripten.cmake +# -DCMAKE_BUILD_TYPE= +# -G "Unix Makefiles" (Linux and OSX) +# -G "MinGW Makefiles" (Windows) +# # Note, pass in here ONLY the path to the file, not the filename 'CMakeLists.txt' itself. + +# After that, build the generated Makefile with the command 'make'. On Windows, you may download and use 'mingw32-make' instead. + +# The following variable describes the target OS we are building to. +set(CMAKE_SYSTEM_NAME Emscripten) +set(CMAKE_SYSTEM_VERSION 1) + +set(CMAKE_CROSSCOMPILING TRUE) + +# Advertise Emscripten as a 32-bit platform (as opposed to CMAKE_SYSTEM_PROCESSOR=x86_64 for 64-bit platform), +# since some projects (e.g. OpenCV) use this to detect bitness. +set(CMAKE_SYSTEM_PROCESSOR x86) + +# Tell CMake how it should instruct the compiler to generate multiple versions of an outputted .so library: e.g. "libfoo.so, libfoo.so.1, libfoo.so.1.4" etc. +# This feature is activated if a shared library project has the property SOVERSION defined. +set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") + +# In CMake, CMAKE_HOST_WIN32 is set when we are cross-compiling from Win32 to Emscripten: http://www.cmake.org/cmake/help/v2.8.12/cmake.html#variable:CMAKE_HOST_WIN32 +# The variable WIN32 is set only when the target arch that will run the code will be WIN32, so unset WIN32 when cross-compiling. +set(WIN32) + +# The same logic as above applies for APPLE and CMAKE_HOST_APPLE, so unset APPLE. +set(APPLE) + +# And for UNIX and CMAKE_HOST_UNIX. However, Emscripten is often able to mimic being a Linux/Unix system, in which case a lot of existing CMakeLists.txt files can be configured for Emscripten while assuming UNIX build, so this is left enabled. +set(UNIX 1) + +# Do a no-op access on the CMAKE_TOOLCHAIN_FILE variable so that CMake will not issue a warning on it being unused. +if (CMAKE_TOOLCHAIN_FILE) +endif() + +# In order for check_function_exists() detection to work, we must signal it to pass an additional flag, which causes the compilation +# to abort if linking results in any undefined symbols. The CMake detection mechanism depends on the undefined symbol error to be raised. +# Disable wasm in cmake checks so that (1) we do not depend on wasm support just for configuration (perhaps the user does not intend +# to build to wasm; using asm.js only depends on js which we need anyhow), and (2) we don't have issues with a separate .wasm file +# on the side, async startup, etc.. +set(CMAKE_REQUIRED_FLAGS "-s WASM=0") + +# Locate where the Emscripten compiler resides in relative to this toolchain file. +if ("${EMSCRIPTEN_ROOT_PATH}" STREQUAL "") + get_filename_component(GUESS_EMSCRIPTEN_ROOT_PATH "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + if (EXISTS "${GUESS_EMSCRIPTEN_ROOT_PATH}/emranlib") + set(EMSCRIPTEN_ROOT_PATH "${GUESS_EMSCRIPTEN_ROOT_PATH}") + endif() +endif() + +# If not found by above search, locate using the EMSCRIPTEN environment variable. +if ("${EMSCRIPTEN_ROOT_PATH}" STREQUAL "") + set(EMSCRIPTEN_ROOT_PATH "$ENV{EMSCRIPTEN}") +endif() + +# Abort if not found. +if ("${EMSCRIPTEN_ROOT_PATH}" STREQUAL "") + message(FATAL_ERROR "Could not locate the Emscripten compiler toolchain directory! Either set the EMSCRIPTEN environment variable, or pass -DEMSCRIPTEN_ROOT_PATH=xxx to CMake to explicitly specify the location of the compiler!") +endif() + +# Normalize, convert Windows backslashes to forward slashes or CMake will crash. +get_filename_component(EMSCRIPTEN_ROOT_PATH "${EMSCRIPTEN_ROOT_PATH}" ABSOLUTE) + +list(APPEND CMAKE_MODULE_PATH "${EMSCRIPTEN_ROOT_PATH}/cmake/Modules") + +list(APPEND CMAKE_FIND_ROOT_PATH "${EMSCRIPTEN_ROOT_PATH}/system") + +if (CMAKE_HOST_WIN32) + set(EMCC_SUFFIX ".bat") +else() + set(EMCC_SUFFIX "") +endif() + +# Specify the compilers to use for C and C++ +if ("${CMAKE_C_COMPILER}" STREQUAL "") + set(CMAKE_C_COMPILER "${EMSCRIPTEN_ROOT_PATH}/emcc${EMCC_SUFFIX}") +endif() +if ("${CMAKE_CXX_COMPILER}" STREQUAL "") + set(CMAKE_CXX_COMPILER "${EMSCRIPTEN_ROOT_PATH}/em++${EMCC_SUFFIX}") +endif() + +if ("${CMAKE_AR}" STREQUAL "") + set(CMAKE_AR "${EMSCRIPTEN_ROOT_PATH}/emar${EMCC_SUFFIX}" CACHE FILEPATH "Emscripten ar") +endif() + +if ("${CMAKE_RANLIB}" STREQUAL "") + set(CMAKE_RANLIB "${EMSCRIPTEN_ROOT_PATH}/emranlib${EMCC_SUFFIX}" CACHE FILEPATH "Emscripten ranlib") +endif() + +# Don't allow CMake to autodetect the compiler, since it does not understand Emscripten. +# Pass -DEMSCRIPTEN_FORCE_COMPILERS=OFF to disable (sensible mostly only for testing/debugging purposes). +option(EMSCRIPTEN_FORCE_COMPILERS "Force C/C++ compiler" ON) +if (EMSCRIPTEN_FORCE_COMPILERS) + + # Detect version of the 'emcc' executable. Note that for CMake, we tell it the version of the Clang compiler and not the version of Emscripten, + # because CMake understands Clang better. + if (NOT CMAKE_C_COMPILER_VERSION) # Toolchain script is interpreted multiple times, so don't rerun the check if already done before. + execute_process(COMMAND "${CMAKE_C_COMPILER}" "-v" RESULT_VARIABLE _cmake_compiler_result ERROR_VARIABLE _cmake_compiler_output OUTPUT_QUIET) + if (NOT _cmake_compiler_result EQUAL 0) + message(FATAL_ERROR "Failed to fetch compiler version information with command \"'${CMAKE_C_COMPILER}' -v\"! Process returned with error code ${_cmake_compiler_result}.") + endif() + if (NOT "${_cmake_compiler_output}" MATCHES "[Ee]mscripten") + message(FATAL_ERROR "System LLVM compiler cannot be used to build with Emscripten! Check Emscripten's LLVM toolchain location in .emscripten configuration file, and make sure to point CMAKE_C_COMPILER to where emcc is located. (was pointing to \"${CMAKE_C_COMPILER}\")") + endif() + string(REGEX MATCH "clang version ([0-9\\.]+)" _dummy_unused "${_cmake_compiler_output}") + if (NOT CMAKE_MATCH_1) + message(FATAL_ERROR "Failed to regex parse Clang compiler version from version string: ${_cmake_compiler_output}") + endif() + + set(CMAKE_C_COMPILER_VERSION "${CMAKE_MATCH_1}") + set(CMAKE_CXX_COMPILER_VERSION "${CMAKE_MATCH_1}") + if (${CMAKE_C_COMPILER_VERSION} VERSION_LESS 3.9.0) + message(WARNING "CMAKE_C_COMPILER version looks too old. Was ${CMAKE_C_COMPILER_VERSION}, should be at least 3.9.0.") + endif() + endif() + + # Capture the Emscripten version to EMSCRIPTEN_VERSION variable. + if (NOT EMSCRIPTEN_VERSION) + execute_process(COMMAND "${CMAKE_C_COMPILER}" "-v" RESULT_VARIABLE _cmake_compiler_result ERROR_VARIABLE _cmake_compiler_output OUTPUT_QUIET) + if (NOT _cmake_compiler_result EQUAL 0) + message(FATAL_ERROR "Failed to fetch Emscripten version information with command \"'${CMAKE_C_COMPILER}' -v\"! Process returned with error code ${_cmake_compiler_result}.") + endif() + string(REGEX MATCH "emcc \\(.*\\) ([0-9\\.]+)" _dummy_unused "${_cmake_compiler_output}") + if (NOT CMAKE_MATCH_1) + message(FATAL_ERROR "Failed to regex parse Emscripten compiler version from version string: ${_cmake_compiler_output}") + endif() + + set(EMSCRIPTEN_VERSION "${CMAKE_MATCH_1}") + endif() + + set(CMAKE_C_COMPILER_ID_RUN TRUE) + set(CMAKE_C_COMPILER_FORCED TRUE) + set(CMAKE_C_COMPILER_WORKS TRUE) + set(CMAKE_C_COMPILER_ID Clang) + set(CMAKE_C_STANDARD_COMPUTED_DEFAULT 11) + + set(CMAKE_CXX_COMPILER_ID_RUN TRUE) + set(CMAKE_CXX_COMPILER_FORCED TRUE) + set(CMAKE_CXX_COMPILER_WORKS TRUE) + set(CMAKE_CXX_COMPILER_ID Clang) + set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT 98) + + set(CMAKE_C_PLATFORM_ID "emscripten") + set(CMAKE_CXX_PLATFORM_ID "emscripten") + + if ("${CMAKE_VERSION}" VERSION_LESS "3.8") + set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros;c_static_assert") + set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes") + set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros") + set(CMAKE_C11_COMPILE_FEATURES "c_static_assert") + + set(CMAKE_CXX_COMPILE_FEATURES "cxx_template_template_parameters;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") + set(CMAKE_CXX98_COMPILE_FEATURES "cxx_template_template_parameters") + set(CMAKE_CXX11_COMPILE_FEATURES "cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") + set(CMAKE_CXX14_COMPILE_FEATURES "cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") + else() + set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert") + set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") + set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") + set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") + + set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17") + set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") + set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") + set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") + endif() +endif() + +# To find programs to execute during CMake run time with find_program(), e.g. 'git' or so, we allow looking +# into system paths. +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + +# Since Emscripten is a cross-compiler, we should never look at the system-provided directories like /usr/include and so on. +# Therefore only CMAKE_FIND_ROOT_PATH should be used as a find directory. See http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE.html +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(CMAKE_SYSTEM_INCLUDE_PATH "${EMSCRIPTEN_ROOT_PATH}/system/include") + +# We would prefer to specify a standard set of Clang+Emscripten-friendly common convention for suffix files, especially for CMake executable files, +# but if these are adjusted, ${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake will fail, since it depends on being able to compile output files with predefined names. +#SET(CMAKE_LINK_LIBRARY_SUFFIX "") +#SET(CMAKE_STATIC_LIBRARY_PREFIX "") +#SET(CMAKE_SHARED_LIBRARY_PREFIX "") +#SET(CMAKE_FIND_LIBRARY_PREFIXES "") +#SET(CMAKE_FIND_LIBRARY_SUFFIXES ".bc") +#SET(CMAKE_SHARED_LIBRARY_SUFFIX ".bc") + +option(EMSCRIPTEN_GENERATE_BITCODE_STATIC_LIBRARIES "If set, static library targets generate LLVM bitcode files (.bc). If disabled (default), UNIX ar archives (.a) are generated." OFF) +if (EMSCRIPTEN_GENERATE_BITCODE_STATIC_LIBRARIES) + SET(CMAKE_STATIC_LIBRARY_SUFFIX ".bc") + + SET(CMAKE_C_CREATE_STATIC_LIBRARY " -o ") + SET(CMAKE_CXX_CREATE_STATIC_LIBRARY " -o ") +else() + # Specify the program to use when building static libraries. Force Emscripten-related command line options to clang. + SET(CMAKE_C_CREATE_STATIC_LIBRARY " rc ") + SET(CMAKE_CXX_CREATE_STATIC_LIBRARY " rc ") +endif() + +SET(CMAKE_EXECUTABLE_SUFFIX ".js") + +SET(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES 1) +SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_LIBRARIES 1) +SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) +SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) +SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES 1) +SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 1) + +set(CMAKE_C_RESPONSE_FILE_LINK_FLAG "@") +set(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@") + +# Set a global EMSCRIPTEN variable that can be used in client CMakeLists.txt to detect when building using Emscripten. +set(EMSCRIPTEN 1 CACHE BOOL "If true, we are targeting Emscripten output.") + +# Hardwire support for cmake-2.8/Modules/CMakeBackwardsCompatibilityC.cmake without having CMake to try complex things +# to autodetect these: +set(CMAKE_SKIP_COMPATIBILITY_TESTS 1) +set(CMAKE_SIZEOF_CHAR 1) +set(CMAKE_SIZEOF_UNSIGNED_SHORT 2) +set(CMAKE_SIZEOF_SHORT 2) +set(CMAKE_SIZEOF_INT 4) +set(CMAKE_SIZEOF_UNSIGNED_LONG 4) +set(CMAKE_SIZEOF_UNSIGNED_INT 4) +set(CMAKE_SIZEOF_LONG 4) +set(CMAKE_SIZEOF_VOID_P 4) +set(CMAKE_SIZEOF_FLOAT 4) +set(CMAKE_SIZEOF_DOUBLE 8) +set(CMAKE_C_SIZEOF_DATA_PTR 4) +set(CMAKE_CXX_SIZEOF_DATA_PTR 4) +set(CMAKE_HAVE_LIMITS_H 1) +set(CMAKE_HAVE_UNISTD_H 1) +set(CMAKE_HAVE_PTHREAD_H 1) +set(CMAKE_HAVE_SYS_PRCTL_H 1) +set(CMAKE_WORDS_BIGENDIAN 0) +set(CMAKE_DL_LIBS) + +set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O2" CACHE STRING "Emscripten-overridden CMAKE_C_FLAGS_RELEASE") +set(CMAKE_C_FLAGS_MINSIZEREL "-DNDEBUG -Os" CACHE STRING "Emscripten-overridden CMAKE_C_FLAGS_MINSIZEREL") +set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2" CACHE STRING "Emscripten-overridden CMAKE_C_FLAGS_RELWITHDEBINFO") +set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O2" CACHE STRING "Emscripten-overridden CMAKE_CXX_FLAGS_RELEASE") +set(CMAKE_CXX_FLAGS_MINSIZEREL "-DNDEBUG -Os" CACHE STRING "Emscripten-overridden CMAKE_CXX_FLAGS_MINSIZEREL") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2" CACHE STRING "Emscripten-overridden CMAKE_CXX_FLAGS_RELWITHDEBINFO") + +set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-O2" CACHE STRING "Emscripten-overridden CMAKE_EXE_LINKER_FLAGS_RELEASE") +set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "-Os" CACHE STRING "Emscripten-overridden CMAKE_EXE_LINKER_FLAGS_MINSIZEREL") +set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "-O2 -g" CACHE STRING "Emscripten-overridden CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO") +set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "-O2" CACHE STRING "Emscripten-overridden CMAKE_SHARED_LINKER_FLAGS_RELEASE") +set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "-Os" CACHE STRING "Emscripten-overridden CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL") +set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "-O2 -g" CACHE STRING "Emscripten-overridden CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO") +set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "-O2" CACHE STRING "Emscripten-overridden CMAKE_MODULE_LINKER_FLAGS_RELEASE") +set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "-Os" CACHE STRING "Emscripten-overridden CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL") +set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "-O2 -g" CACHE STRING "Emscripten-overridden CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO") + +function(em_validate_asmjs_after_build target) + add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo Validating build output for asm.js... COMMAND "python" ARGS "${EMSCRIPTEN_ROOT_PATH}/tools/validate_asmjs.py" "$") +endfunction() + +# A global counter to guarantee unique names for js library files. +set(link_js_counter 1) + +# Internal function: Do not call from user CMakeLists.txt files. Use one of em_link_js_library()/em_link_pre_js()/em_link_post_js() instead. +function(em_add_tracked_link_flag target flagname) + + # User can input list of JS files either as a single list, or as variable arguments to this function, so iterate over varargs, and treat each + # item in varargs as a list itself, to support both syntax forms. + foreach(jsFileList ${ARGN}) + foreach(jsfile ${jsFileList}) + # If the user edits the JS file, we want to relink the emscripten application, but unfortunately it is not possible to make a link step + # depend directly on a source file. Instead, we must make a dummy no-op build target on that source file, and make the project depend on + # that target. + + # Sanitate the source .js filename to a good symbol name to use as a dummy filename. + get_filename_component(jsname "${jsfile}" NAME) + string(REGEX REPLACE "[/:\\\\.\ ]" "_" dummy_js_target ${jsname}) + set(dummy_lib_name ${target}_${link_js_counter}_${dummy_js_target}) + set(dummy_c_name "${CMAKE_BINARY_DIR}/${dummy_js_target}_tracker.c") + + # Create a new static library target that with a single dummy .c file. + add_library(${dummy_lib_name} STATIC ${dummy_c_name}) + # Make the dummy .c file depend on the .js file we are linking, so that if the .js file is edited, the dummy .c file, and hence the static library will be rebuild (no-op). This causes the main application to be relinked, which is what we want. + # This approach was recommended by http://www.cmake.org/pipermail/cmake/2010-May/037206.html + add_custom_command(OUTPUT ${dummy_c_name} COMMAND ${CMAKE_COMMAND} -E touch ${dummy_c_name} DEPENDS ${jsfile}) + target_link_libraries(${target} ${dummy_lib_name}) + + # Link the js-library to the target + # When a linked library starts with a "-" cmake will just add it to the linker command line as it is. + # The advantage of doing it this way is that the js-library will also be automatically linked to targets + # that depend on this target. + get_filename_component(js_file_absolute_path "${jsfile}" ABSOLUTE ) + target_link_libraries(${target} "${flagname} \"${js_file_absolute_path}\"") + + math(EXPR link_js_counter "${link_js_counter} + 1") + endforeach() + endforeach() +endfunction() + +# This function links a (list of ) .js library file(s) to the given CMake project. +# Example: em_link_js_library(my_executable "lib1.js" "lib2.js") +# will result in emcc passing --js-library lib1.js --js-library lib2.js to the emscripten linker, as well as +# tracking the modification timestamp between the linked .js files and the main project, so that editing the .js file +# will cause the target project to be relinked. +function(em_link_js_library target) + em_add_tracked_link_flag(${target} "--js-library" ${ARGN}) +endfunction() + +# This function is identical to em_link_js_library(), except the .js files will be added with '--pre-js file.js' command line flag, +# which is generally used to add some preamble .js code to a generated output file. +function(em_link_pre_js target) + em_add_tracked_link_flag(${target} "--pre-js" ${ARGN}) +endfunction() + +# This function is identical to em_link_js_library(), except the .js files will be added with '--post-js file.js' command line flag, +# which is generally used to add some postamble .js code to a generated output file. +function(em_link_post_js target) + em_add_tracked_link_flag(${target} "--post-js" ${ARGN}) +endfunction() + +# Experimental support for targeting generation of Visual Studio project files (vs-tool) of Emscripten projects for Windows. +# To use this, pass the combination -G "Visual Studio 10" -DCMAKE_TOOLCHAIN_FILE=Emscripten.cmake +if ("${CMAKE_GENERATOR}" MATCHES "^Visual Studio.*") + # By default, CMake generates VS project files with a true directive. + # This causes VS to attempt to invoke rc.exe during the build, which will fail since app manifests are meaningless for Emscripten. + # To disable this, add the following linker flag. This flag will not go to emcc, since the Visual Studio CMake generator will swallow it. + set(EMSCRIPTEN_VS_LINKER_FLAGS "/MANIFEST:NO") + # CMake is hardcoded to write a ClCompile directive $(IntDir) in all VS project files it generates. + # This makes VS pass emcc a -o param that points to a directory instead of a file, which causes emcc autogenerate the output filename. + # CMake is hardcoded to assume all object files have the suffix .obj, so adjust the emcc-autogenerated default suffix name to match. + set(EMSCRIPTEN_VS_LINKER_FLAGS "${EMSCRIPTEN_VS_LINKER_FLAGS} --default-obj-ext .obj") + # Also hint CMake that it should not hardcode generation. Requires a custom CMake build for this to work (ignored on others) + # See http://www.cmake.org/Bug/view.php?id=14673 and https://github.com/juj/CMake + set(CMAKE_VS_NO_DEFAULT_OBJECTFILENAME 1) + + # Apply and cache Emscripten Visual Studio IDE-specific linker flags. + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EMSCRIPTEN_VS_LINKER_FLAGS}" CACHE STRING "") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${EMSCRIPTEN_VS_LINKER_FLAGS}" CACHE STRING "") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${EMSCRIPTEN_VS_LINKER_FLAGS}" CACHE STRING "") +endif() + +if (NOT DEFINED CMAKE_CROSSCOMPILING_EMULATOR) + find_program(NODE_JS_EXECUTABLE NAMES nodejs node) + if(NODE_JS_EXECUTABLE) + set(CMAKE_CROSSCOMPILING_EMULATOR "${NODE_JS_EXECUTABLE}" CACHE FILEPATH "Path to the emulator for the target system.") + endif() +endif() +# No-op on CMAKE_CROSSCOMPILING_EMULATOR so older versions of cmake do not +# complain about unused CMake variable. +if(CMAKE_CROSSCOMPILING_EMULATOR) +endif() diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake new file mode 100644 index 0000000..2a9545d --- /dev/null +++ b/cmake/FindSDL2.cmake @@ -0,0 +1,200 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindSDL2 +# ------- +# +# Locate SDL2 library +# +# This module defines +# +# :: +# +# SDL2_LIBRARY, the name of the library to link against +# SDL2_FOUND, if false, do not try to link to SDL +# SDL2_INCLUDE_DIR, where to find SDL.h +# SDL2_VERSION_STRING, human-readable string containing the version of SDL +# +# +# +# This module responds to the flag: +# +# :: +# +# SDL2_BUILDING_LIBRARY +# If this is defined, then no SDL2_main will be linked in because +# only applications need main(). +# Otherwise, it is assumed you are building an application and this +# module will attempt to locate and set the proper link flags +# as part of the returned SDL2_LIBRARY variable. +# +# +# +# Don't forget to include SDLmain.h and SDLmain.m your project for the +# OS X framework based version. (Other versions link to -lSDLmain which +# this module will try to find on your behalf.) Also for OS X, this +# module will automatically add the -framework Cocoa on your behalf. +# +# +# +# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your +# configuration and no SDL2_LIBRARY, it means CMake did not find your SDL +# library (SDL.dll, libsdl.so, SDL.framework, etc). Set +# SDL2_LIBRARY_TEMP to point to your SDL library, and configure again. +# Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this +# value as appropriate. These values are used to generate the final +# SDL2_LIBRARY variable, but when these values are unset, SDL2_LIBRARY +# does not get created. +# +# +# +# $SDL2DIR is an environment variable that would correspond to the +# ./configure --prefix=$SDL2DIR used in building SDL. l.e.galup 9-20-02 +# +# Modified by Eric Wing. Added code to assist with automated building +# by using environmental variables and providing a more +# controlled/consistent search behavior. Added new modifications to +# recognize OS X frameworks and additional Unix paths (FreeBSD, etc). +# Also corrected the header search path to follow "proper" SDL +# guidelines. Added a search for SDLmain which is needed by some +# platforms. Added a search for threads which is needed by some +# platforms. Added needed compile switches for MinGW. +# +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of SDL2_LIBRARY to +# override this selection or set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. +# +# Note that the header path has changed from SDL/SDL.h to just SDL.h +# This needed to change because "proper" SDL convention is #include +# "SDL.h", not . This is done for portability reasons +# because not all systems place things in SDL/ (see FreeBSD). + +if(NOT SDL2_DIR) + set(SDL2_DIR "" CACHE PATH "SDL2 directory") +endif() + +find_path(SDL2_INCLUDE_DIR SDL.h + HINTS + ENV SDL2DIR + ${SDL2_DIR} + PATH_SUFFIXES SDL2 + # path suffixes to search inside ENV{SDL2DIR} + include/SDL2 include +) + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(VC_LIB_PATH_SUFFIX lib/x64) +else() + set(VC_LIB_PATH_SUFFIX lib/x86) +endif() + +find_library(SDL2_LIBRARY_TEMP + NAMES SDL2 + HINTS + ENV SDL2DIR + ${SDL2_DIR} + PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} +) + +# Hide this cache variable from the user, it's an internal implementation +# detail. The documented library variable for the user is SDL2_LIBRARY +# which is derived from SDL2_LIBRARY_TEMP further below. +set_property(CACHE SDL2_LIBRARY_TEMP PROPERTY TYPE INTERNAL) + +if(NOT SDL2_BUILDING_LIBRARY) + if(NOT SDL2_INCLUDE_DIR MATCHES ".framework") + # Non-OS X framework versions expect you to also dynamically link to + # SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms + # seem to provide SDLmain for compatibility even though they don't + # necessarily need it. + find_library(SDL2MAIN_LIBRARY + NAMES SDL2main + HINTS + ENV SDL2DIR + ${SDL2_DIR} + PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} + PATHS + /sw + /opt/local + /opt/csw + /opt + ) + endif() +endif() + +# SDL may require threads on your system. +# The Apple build may not need an explicit flag because one of the +# frameworks may already provide it. +# But for non-OSX systems, I will use the CMake Threads package. +if(NOT APPLE) + find_package(Threads) +endif() + +# MinGW needs an additional link flag, -mwindows +# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -mwindows +if(MINGW) + set(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "link flags for MinGW") +endif() + +if(SDL2_LIBRARY_TEMP) + # For SDLmain + if(SDL2MAIN_LIBRARY AND NOT SDL2_BUILDING_LIBRARY) + list(FIND SDL2_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" _SDL2_MAIN_INDEX) + if(_SDL2_MAIN_INDEX EQUAL -1) + set(SDL2_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" ${SDL2_LIBRARY_TEMP}) + endif() + unset(_SDL2_MAIN_INDEX) + endif() + + # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. + # CMake doesn't display the -framework Cocoa string in the UI even + # though it actually is there if I modify a pre-used variable. + # I think it has something to do with the CACHE STRING. + # So I use a temporary variable until the end so I can set the + # "real" variable in one-shot. + if(APPLE) + set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") + endif() + + # For threads, as mentioned Apple doesn't need this. + # In fact, there seems to be a problem if I used the Threads package + # and try using this line, so I'm just skipping it entirely for OS X. + if(NOT APPLE) + set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) + endif() + + # For MinGW library + if(MINGW) + set(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) + endif() + + # Set the final string here so the GUI reflects the final state. + set(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found") +endif() + +if(SDL2_INCLUDE_DIR AND EXISTS "${SDL2_INCLUDE_DIR}/SDL2_version.h") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL2_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MAJOR "${SDL2_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL2_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MINOR "${SDL2_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL2_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_PATCH "${SDL2_VERSION_PATCH_LINE}") + set(SDL2_VERSION_STRING ${SDL2_VERSION_MAJOR}.${SDL2_VERSION_MINOR}.${SDL2_VERSION_PATCH}) + unset(SDL2_VERSION_MAJOR_LINE) + unset(SDL2_VERSION_MINOR_LINE) + unset(SDL2_VERSION_PATCH_LINE) + unset(SDL2_VERSION_MAJOR) + unset(SDL2_VERSION_MINOR) + unset(SDL2_VERSION_PATCH) +endif() + +set(SDL2_LIBRARIES ${SDL2_LIBRARY} ${SDL2MAIN_LIBRARY}) +set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 + REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR + VERSION_VAR SDL2_VERSION_STRING) \ No newline at end of file diff --git a/cmake/FindSDL2_image.cmake b/cmake/FindSDL2_image.cmake new file mode 100644 index 0000000..b310cfd --- /dev/null +++ b/cmake/FindSDL2_image.cmake @@ -0,0 +1,102 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindSDL2_image +# ------------- +# +# Locate SDL2_image library +# +# This module defines: +# +# :: +# +# SDL2_IMAGE_LIBRARIES, the name of the library to link against +# SDL2_IMAGE_INCLUDE_DIRS, where to find the headers +# SDL2_IMAGE_FOUND, if false, do not try to link against +# SDL2_IMAGE_VERSION_STRING - human-readable string containing the +# version of SDL2_image +# +# +# +# For backward compatibility the following variables are also set: +# +# :: +# +# SDL2IMAGE_LIBRARY (same value as SDL2_IMAGE_LIBRARIES) +# SDL2IMAGE_INCLUDE_DIR (same value as SDL2_IMAGE_INCLUDE_DIRS) +# SDL2IMAGE_FOUND (same value as SDL2_IMAGE_FOUND) +# +# +# +# $SDLDIR is an environment variable that would correspond to the +# ./configure --prefix=$SDLDIR used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +if(NOT SDL2_IMAGE_INCLUDE_DIR AND SDL2IMAGE_INCLUDE_DIR) + set(SDL2_IMAGE_INCLUDE_DIR ${SDL2IMAGE_INCLUDE_DIR} CACHE PATH "directory cache +entry initialized from old variable name") +endif() +find_path(SDL2_IMAGE_INCLUDE_DIR SDL_image.h + HINTS + ENV SDL2IMAGEDIR + ENV SDL2DIR + ${SDL2_DIR} + PATH_SUFFIXES SDL2 + # path suffixes to search inside ENV{SDL2DIR} + include/SDL2 include +) + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(VC_LIB_PATH_SUFFIX lib/x64) +else() + set(VC_LIB_PATH_SUFFIX lib/x86) +endif() + +if(NOT SDL2_IMAGE_LIBRARY AND SDL2IMAGE_LIBRARY) + set(SDL2_IMAGE_LIBRARY ${SDL2IMAGE_LIBRARY} CACHE FILEPATH "file cache entry +initialized from old variable name") +endif() +find_library(SDL2_IMAGE_LIBRARY + NAMES SDL2_image + HINTS + ENV SDL2IMAGEDIR + ENV SDL2DIR + ${SDL2_DIR} + PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} +) + +if(SDL2_IMAGE_INCLUDE_DIR AND EXISTS "${SDL2_IMAGE_INCLUDE_DIR}/SDL2_image.h") + file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL2_image.h" SDL2_IMAGE_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_IMAGE_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL2_image.h" SDL2_IMAGE_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_IMAGE_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL2_image.h" SDL2_IMAGE_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_IMAGE_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL2_IMAGE_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_MAJOR "${SDL2_IMAGE_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL2_IMAGE_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_MINOR "${SDL2_IMAGE_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL2_IMAGE_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_PATCH "${SDL2_IMAGE_VERSION_PATCH_LINE}") + set(SDL2_IMAGE_VERSION_STRING ${SDL2_IMAGE_VERSION_MAJOR}.${SDL2_IMAGE_VERSION_MINOR}.${SDL2_IMAGE_VERSION_PATCH}) + unset(SDL2_IMAGE_VERSION_MAJOR_LINE) + unset(SDL2_IMAGE_VERSION_MINOR_LINE) + unset(SDL2_IMAGE_VERSION_PATCH_LINE) + unset(SDL2_IMAGE_VERSION_MAJOR) + unset(SDL2_IMAGE_VERSION_MINOR) + unset(SDL2_IMAGE_VERSION_PATCH) +endif() + +set(SDL2_IMAGE_LIBRARIES ${SDL2_IMAGE_LIBRARY}) +set(SDL2_IMAGE_INCLUDE_DIRS ${SDL2_IMAGE_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_image + REQUIRED_VARS SDL2_IMAGE_LIBRARIES SDL2_IMAGE_INCLUDE_DIRS + VERSION_VAR SDL2_IMAGE_VERSION_STRING) + +# for backward compatibility +set(SDL2IMAGE_LIBRARY ${SDL2_IMAGE_LIBRARIES}) +set(SDL2IMAGE_INCLUDE_DIR ${SDL2_IMAGE_INCLUDE_DIRS}) +set(SDL2IMAGE_FOUND ${SDL2_IMAGE_FOUND}) + +mark_as_advanced(SDL2_IMAGE_LIBRARY SDL2_IMAGE_INCLUDE_DIR) \ No newline at end of file diff --git a/gui.eez-project b/gui.eez-project new file mode 100644 index 0000000..c387e01 --- /dev/null +++ b/gui.eez-project @@ -0,0 +1,2589 @@ +{ + "settings": { + "general": { + "projectVersion": "v3", + "projectType": "firmware-module", + "imports": [ + { + "projectFilePath": "app.eez-project" + } + ], + "flowSupport": true, + "displayWidth": 480, + "displayHeight": 272 + }, + "build": { + "configurations": [ + { + "name": "stm32" + }, + { + "name": "simulator" + } + ], + "files": [] + } + }, + "variables": { + "globalVariables": [ + { + "id": 1, + "name": "alert_message", + "description": "Message in alert dialog", + "type": "string", + "defaultValue": "\"Are you sure?\"", + "native": true + }, + { + "id": 2, + "name": "touch_calibration_point", + "type": "enum:Touch_calibration_point", + "defaultValue": "0", + "native": true + }, + { + "id": 3, + "name": "keypad_text", + "type": "string", + "defaultValue": "\"\"", + "persistent": false, + "native": true + }, + { + "id": 4, + "name": "keypad_edit_unit", + "type": "string", + "defaultValue": "\"\"", + "persistent": false, + "native": true + }, + { + "id": 5, + "name": "keypad_sign_enabled", + "type": "boolean", + "defaultValue": "false", + "persistent": false, + "native": true + }, + { + "id": 6, + "name": "keypad_unit_enabled", + "type": "boolean", + "defaultValue": "false", + "persistent": false, + "native": true + }, + { + "id": 7, + "name": "keypad_dot_enabled", + "type": "boolean", + "defaultValue": "false", + "persistent": false, + "native": true + }, + { + "id": 8, + "name": "keypad_option1_enabled", + "type": "boolean", + "defaultValue": "false", + "persistent": false, + "native": true + }, + { + "id": 9, + "name": "keypad_option1_text", + "type": "string", + "defaultValue": "\"\"", + "persistent": false, + "native": true + }, + { + "id": 10, + "name": "keypad_option2_enabled", + "type": "boolean", + "defaultValue": "false", + "persistent": false, + "native": true + }, + { + "id": 11, + "name": "keypad_option2_text", + "type": "string", + "defaultValue": "\"\"", + "persistent": false, + "native": true + }, + { + "id": 12, + "name": "keypad_option3_enabled", + "type": "boolean", + "defaultValue": "false", + "persistent": false, + "native": true + }, + { + "id": 13, + "name": "keypad_option3_text", + "type": "string", + "defaultValue": "\"\"", + "persistent": false, + "native": true + }, + { + "id": 14, + "name": "keypad_mode", + "type": "integer", + "defaultValue": "0", + "persistent": false, + "native": true + }, + { + "id": 15, + "name": "keypad_ok_enabled", + "type": "boolean", + "defaultValue": "false", + "persistent": false, + "native": true + } + ], + "structures": [], + "enums": [ + { + "name": "Touch_calibration_point", + "members": [ + { + "name": "Top left", + "value": 0 + }, + { + "name": "Bottom right", + "value": 1 + }, + { + "name": "Top right", + "value": 2 + } + ] + } + ] + }, + "actions": [ + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 1, + "name": "yes", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 2, + "name": "no", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 3, + "name": "cancel", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 4, + "name": "edit", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 5, + "name": "drag_overlay", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 6, + "name": "scroll", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 7, + "name": "keypad_key", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 8, + "name": "keypad_back", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 9, + "name": "keypad_unit", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 10, + "name": "keypad_option1", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 11, + "name": "keypad_option2", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 12, + "name": "keypad_option3", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 13, + "name": "keypad_sign", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 14, + "name": "keypad_ok", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 15, + "name": "keypad_cancel", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 16, + "name": "toggle_keypad_mode", + "implementationType": "native" + }, + { + "components": [], + "connectionLines": [], + "localVariables": [], + "id": 17, + "name": "keypad_space", + "implementationType": "native" + } + ], + "pages": [ + { + "components": [ + { + "type": "Select", + "left": 0, + "top": 0, + "width": 480, + "height": 272, + "wireID": "29b822b5-0191-44ac-ccfc-b5d473083547", + "customInputs": [], + "customOutputs": [], + "data": "touch_calibration_point", + "style": { + "inheritFrom": "touch_calibration" + }, + "widgets": [ + { + "type": "Container", + "left": 0, + "top": 0, + "width": 480, + "height": 272, + "wireID": "7311d830-c36c-464b-ee3a-7d04e357b513", + "customInputs": [], + "customOutputs": [], + "style": { + "inheritFrom": "touch_calibration" + }, + "widgets": [ + { + "type": "MultilineText", + "left": 95, + "top": 98, + "width": 290, + "height": 76, + "wireID": "b835daad-dba0-4ddc-bf30-e59136add4ee", + "customInputs": [], + "customOutputs": [], + "data": "\"Touch top-left cross in the center until change color\"", + "style": { + "inheritFrom": "note_M" + } + }, + { + "type": "Text", + "left": 0, + "top": 0, + "width": 35, + "height": 35, + "wireID": "6279d14d-f079-4b71-b03f-a45ef374be16", + "customInputs": [], + "customOutputs": [], + "data": "\"+\"", + "action": "", + "style": { + "inheritFrom": "touch_calibration_point", + "activeBackgroundColor": "#000000" + } + } + ] + }, + { + "type": "Container", + "left": 0, + "top": 0, + "width": 480, + "height": 272, + "wireID": "6e7b9361-0965-4ca2-9116-613a7b8d9735", + "customInputs": [], + "customOutputs": [], + "style": { + "inheritFrom": "touch_calibration" + }, + "widgets": [ + { + "type": "MultilineText", + "left": 95, + "top": 98, + "width": 290, + "height": 76, + "wireID": "729f4182-e9be-49d4-c1c1-2bf4767ac4fd", + "customInputs": [], + "customOutputs": [], + "data": "\"Touch bottom-right cross in the center until change color\"", + "style": { + "inheritFrom": "note_M" + } + }, + { + "type": "Text", + "left": 445, + "top": 237, + "width": 35, + "height": 35, + "wireID": "4a88c334-572d-4f06-a440-9c667eef30e2", + "customInputs": [], + "customOutputs": [], + "data": "\"+\"", + "action": "", + "style": { + "inheritFrom": "touch_calibration_point" + } + } + ] + }, + { + "type": "Container", + "left": 0, + "top": 0, + "width": 480, + "height": 272, + "wireID": "9ce862b9-9ec4-4173-f463-59bcb854e96d", + "customInputs": [], + "customOutputs": [], + "style": { + "inheritFrom": "touch_calibration" + }, + "widgets": [ + { + "type": "MultilineText", + "left": 95, + "top": 98, + "width": 290, + "height": 76, + "wireID": "1513bc9a-aca5-4cb0-efca-c777e048c478", + "customInputs": [], + "customOutputs": [], + "data": "\"Touch top-right cross in the center until change color\"", + "style": { + "inheritFrom": "note_M" + } + }, + { + "type": "Text", + "left": 445, + "top": 0, + "width": 35, + "height": 35, + "wireID": "3fa9d7e7-d7b3-4d2e-dc14-2b76e0cdd8df", + "customInputs": [], + "customOutputs": [], + "data": "\"+\"", + "action": "", + "style": { + "inheritFrom": "touch_calibration_point" + } + } + ] + } + ] + } + ], + "connectionLines": [], + "localVariables": [], + "id": 2, + "name": "touch_calibration", + "style": "background", + "left": 0, + "top": 0, + "width": 480, + "height": 272 + }, + { + "components": [ + { + "type": "DisplayData", + "left": 0, + "top": 82, + "width": 480, + "height": 40, + "wireID": "5ffa4219-e9d1-4160-a8f6-f8bf4cbfadc4", + "customInputs": [], + "customOutputs": [], + "data": "alert_message", + "style": { + "inheritFrom": "default" + }, + "displayOption": 0 + }, + { + "type": "Text", + "left": 90, + "top": 176, + "width": 140, + "height": 40, + "wireID": "15ec65f7-bed9-4a08-b4b5-b91d2e5bd549", + "customInputs": [], + "customOutputs": [], + "data": "\"Yes\"", + "action": "yes", + "style": { + "inheritFrom": "button" + } + }, + { + "type": "Text", + "left": 250, + "top": 176, + "width": 140, + "height": 40, + "wireID": "0c230611-18aa-4d6f-d95c-2cffe0881728", + "customInputs": [], + "customOutputs": [], + "data": "\"Start again\"", + "action": "no", + "style": { + "inheritFrom": "button" + } + } + ], + "connectionLines": [], + "localVariables": [], + "id": 3, + "name": "touch_calibration_yes_no", + "description": "Touchscreen calibration confirmation", + "style": "background", + "left": 0, + "top": 0, + "width": 480, + "height": 272 + } + ], + "styles": [ + { + "id": 1, + "name": "default", + "description": "", + "inheritFrom": "", + "font": "medium", + "alignHorizontal": "center", + "alignVertical": "center", + "color": "text", + "backgroundColor": "background", + "activeColor": "background", + "activeBackgroundColor": "text", + "borderColor": "border", + "padding": "0" + }, + { + "id": 2, + "name": "info_alert", + "inheritFrom": "default", + "alwaysBuild": true, + "padding": "20", + "margin": "20" + }, + { + "id": 3, + "name": "error_alert", + "inheritFrom": "default", + "alwaysBuild": true, + "color": "dark_text", + "backgroundColor": "error", + "activeColor": "error", + "activeBackgroundColor": "dark_text", + "padding": "20", + "margin": "20" + }, + { + "id": 4, + "name": "error_alert_button", + "inheritFrom": "button", + "alwaysBuild": true, + "padding": "8 16 8 16" + }, + { + "id": 5, + "name": "select_enum_item_popup_container", + "inheritFrom": "default", + "alwaysBuild": true, + "color": "drop_down_list_color", + "backgroundColor": "drop_down_list_background", + "activeColor": "drop_down_list_background", + "activeBackgroundColor": "drop_down_list_color", + "padding": "12" + }, + { + "id": 6, + "name": "select_enum_item_popup_container_S", + "inheritFrom": "select_enum_item_popup_container", + "alwaysBuild": true + }, + { + "id": 7, + "name": "select_enum_item_popup_item", + "inheritFrom": "select_enum_item_popup_container", + "alwaysBuild": true, + "padding": "6" + }, + { + "id": 8, + "name": "select_enum_item_popup_item_S", + "inheritFrom": "select_enum_item_popup_container_S", + "alwaysBuild": true, + "alignHorizontal": "left", + "padding": "6" + }, + { + "id": 9, + "name": "select_enum_item_popup_disabled_item", + "inheritFrom": "select_enum_item_popup_item", + "alwaysBuild": true, + "color": "drop_down_list_color_disabled" + }, + { + "id": 10, + "name": "select_enum_item_popup_disabled_item_S", + "inheritFrom": "select_enum_item_popup_item_S", + "alwaysBuild": true, + "color": "drop_down_list_color_disabled" + }, + { + "id": 11, + "name": "menu_with_buttons_message", + "inheritFrom": "default", + "alwaysBuild": true, + "alignVertical": "top", + "color": "text", + "backgroundColor": "background", + "activeColor": "background", + "activeBackgroundColor": "text", + "padding": "0 0 10 0", + "margin": "0" + }, + { + "id": 12, + "name": "menu_with_buttons_container", + "inheritFrom": "default", + "alwaysBuild": true, + "padding": "20", + "margin": "20" + }, + { + "id": 13, + "name": "menu_with_buttons_button", + "inheritFrom": "button", + "alwaysBuild": true, + "padding": "0 4", + "margin": "0" + }, + { + "id": 14, + "name": "fps_graph", + "inheritFrom": "default", + "alwaysBuild": true, + "color": "#00ff1e", + "backgroundColor": "#000000", + "borderSize": "1", + "borderColor": "backdrop" + }, + { + "name": "slider_widget", + "inheritFrom": "default", + "color": "slider_widget_color", + "backgroundColor": "slider_widget_background" + }, + { + "name": "background", + "inheritFrom": "default", + "backgroundColor": "background", + "backgroundImage": "" + }, + { + "name": "button", + "inheritFrom": "default", + "color": "button_text", + "backgroundColor": "button_background", + "activeColor": "button_text", + "activeBackgroundColor": "button_active_background", + "borderSize": "2", + "borderRadius": "8", + "borderColor": "button_border" + }, + { + "name": "button_disabled", + "inheritFrom": "button", + "color": "button_disabled_text", + "backgroundColor": "button_disabled_background", + "activeColor": "button_disabled_text", + "activeBackgroundColor": "button_disabled_background", + "borderColor": "button_disabled_border" + }, + { + "name": "touch_calibration", + "inheritFrom": "default", + "font": "gui_icons", + "color": "#ffffff", + "backgroundColor": "#000000", + "activeColor": "#000000", + "activeBackgroundColor": "#ffffff" + }, + { + "name": "touch_calibration_point", + "inheritFrom": "touch_calibration", + "activeColor": "#00ff00", + "activeBackgroundColor": "#000000" + }, + { + "name": "note_M", + "inheritFrom": "default", + "color": "dark_text", + "backgroundColor": "note" + }, + { + "name": "drop_down_list", + "inheritFrom": "default", + "color": "drop_down_list_color", + "backgroundColor": "drop_down_list_background", + "activeColor": "drop_down_list_color", + "activeBackgroundColor": "drop_down_list_active_background", + "borderSize": "2", + "borderRadius": "8", + "borderColor": "drop_down_list_border" + } + ], + "fonts": [ + { + "id": 1, + "name": "shadow", + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14 + }, + "bpp": 8, + "height": 20, + "ascent": 20, + "descent": 0, + "glyphs": [ + { + "encoding": 32, + "x": 0, + "y": 0, + "width": 20, + "height": 20, + "dx": 20, + "glyphBitmap": { + "width": 20, + "height": 20, + "pixelArray": "0000000000000000000303030303060606060606000000000000030606060a0a0a0a0a0a0a0a0a0a000000000306060a10101010171717171717171700000003060a10171b1e21212828282828282828000003060a101b000000000000000000000000000000060a101b280000000000000000000000000000030a101b28390000000000000000000000000000060a1721364e000000000000000000000000000006101b2c445f000000000000000000000000000306101e324e7000000000000000000000000000030a102139587a00000000000000000000000000060a10213d5f8400000000000000000000000000060a1728405f8b00000000000000000000000000060a172844668b00000000000000000000000000060a172844668b00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000" + } + }, + { + "encoding": 33, + "x": 0, + "y": 0, + "width": 20, + "height": 20, + "dx": 20, + "glyphBitmap": { + "width": 20, + "height": 20, + "pixelArray": "06060606060606060606060606060606060606060a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a171717171717171717171717171717171717171728282828282828282828282828282828282828280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "encoding": 34, + "x": 0, + "y": 0, + "width": 20, + "height": 20, + "dx": 20, + "glyphBitmap": { + "width": 20, + "height": 20, + "pixelArray": "06060606060603030303030000000000000000000a0a0a0a0a0a0a0a0a0a060606030000000000001717171717171717101010100a06060300000000282828282828282821211e1b17100a0603000000000000000000000000000000001b100a0603000000000000000000000000000000281b100a0600000000000000000000000000000039281b100a0300000000000000000000000000004e3621170a0600000000000000000000000000005f442c1b10060000000000000000000000000000704e321e100603000000000000000000000000007a583921100a0300000000000000000000000000845f3d21100a06000000000000000000000000008b5f4028170a06000000000000000000000000008b664428170a06000000000000000000000000008b664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06" + } + }, + { + "encoding": 35, + "x": 0, + "y": 0, + "width": 20, + "height": 20, + "dx": 20, + "glyphBitmap": { + "width": 20, + "height": 20, + "pixelArray": "060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000" + } + }, + { + "encoding": 36, + "x": 0, + "y": 0, + "width": 20, + "height": 20, + "dx": 20, + "glyphBitmap": { + "width": 20, + "height": 20, + "pixelArray": "000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06" + } + }, + { + "encoding": 37, + "x": 0, + "y": 0, + "width": 20, + "height": 20, + "dx": 20, + "glyphBitmap": { + "width": 20, + "height": 20, + "pixelArray": "060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668e00000000000000000000000000060a172844668b00000000000000000000000000060a172844668b00000000000000000000000000060a1728405f8b00000000000000000000000000060a10213d5f84f8000000000000000000000000030a102139587ac5fb00000000000000000000000306101e324e708eb0c8ddeaf4f4fbfbfbfbfbfb0006101b2c445f7a99adbeccd2d6dddddddddddd00060a1721364e667a8e9faab0b4b4b4b4b4b4b400030a101b28394e5f707a84888b8b8b8e8e8e8e0000060a101b2836444e585f5f66666666666666000003060a101b212c32393d404444444444444400000003060a10171b1e21212828282828282828000000000306060a101010101717171717171b1b000000000000030606060a0a0a0a0a0a0a0d0d0d000000000000000000030303030306060a0a0a0a" + } + }, + { + "encoding": 38, + "x": 0, + "y": 0, + "width": 20, + "height": 20, + "dx": 20, + "glyphBitmap": { + "width": 20, + "height": 20, + "pixelArray": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbddddddddddddddddddddddddddddddddddddddddb4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b48e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e6666666666666666666666666666666666666666444444444444444444444444444444444444444428282828282828282828282828282828282828281b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a" + } + }, + { + "encoding": 39, + "x": 0, + "y": 0, + "width": 20, + "height": 20, + "dx": 20, + "glyphBitmap": { + "width": 20, + "height": 20, + "pixelArray": "000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008e664428170a06000000000000000000000000008b664428170a06000000000000000000000000008b664428170a06000000000000000000000000008b5f4028170a06000000000000000000000000f8845f3d21100a060000000000000000000000fbc57a583921100a03fbfbfbfbfbfbf4f4eaddc8b08e704e321e100603ddddddddddddd6d2ccbead997a5f442c1b100600b4b4b4b4b4b4b4b0aa9f8e7a664e3621170a06008e8e8e8e8b8b8b88847a705f4e39281b100a0300666666666666665f5f584e4436281b100a06000044444444444444403d39322c211b100a06030000282828282828282821211e1b17100a06030000001b17171717171717101010100a060603000000000d0d0a0a0a0a0a0a0a0a060606030000000000000a0a0a0606060303030303000000000000000000" + } + } + ], + "alwaysBuild": true + }, + { + "name": "gui_icons", + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14 + }, + "bpp": 8, + "height": 35, + "ascent": 35, + "descent": 0, + "glyphs": [ + { + "encoding": 32, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 32 + } + }, + { + "encoding": 33, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 33 + } + }, + { + "encoding": 34, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 34 + } + }, + { + "encoding": 35, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 35 + } + }, + { + "encoding": 36, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 36 + } + }, + { + "encoding": 37, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 37 + } + }, + { + "encoding": 38, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 38 + } + }, + { + "encoding": 39, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 39 + } + }, + { + "encoding": 40, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 40 + } + }, + { + "encoding": 41, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 41 + } + }, + { + "encoding": 42, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 42 + } + }, + { + "encoding": 43, + "x": 0, + "y": 0, + "width": 35, + "height": 35, + "dx": 35, + "glyphBitmap": { + "width": 35, + "height": 35, + "pixelArray": "00000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000404040404040404040404000000ffffff0000040404040404040404040100000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff0000000000000000000000000000000000000000000000000000000000000000ffffff00000000000000000000000000000000" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 43 + } + }, + { + "encoding": 44, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 44 + } + }, + { + "encoding": 45, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 45 + } + }, + { + "encoding": 46, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 46 + } + }, + { + "encoding": 47, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 47 + } + }, + { + "encoding": 48, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 48 + } + }, + { + "encoding": 49, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 49 + } + }, + { + "encoding": 50, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 50 + } + }, + { + "encoding": 51, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 51 + } + }, + { + "encoding": 52, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 52 + } + }, + { + "encoding": 53, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 53 + } + }, + { + "encoding": 54, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 54 + } + }, + { + "encoding": 55, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 55 + } + }, + { + "encoding": 56, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 56 + } + }, + { + "encoding": 57, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 57 + } + }, + { + "encoding": 58, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 58 + } + }, + { + "encoding": 59, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 59 + } + }, + { + "encoding": 60, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 60 + } + }, + { + "encoding": 61, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 61 + } + }, + { + "encoding": 62, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 62 + } + }, + { + "encoding": 63, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 63 + } + }, + { + "encoding": 64, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 64 + } + }, + { + "encoding": 65, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 65 + } + }, + { + "encoding": 66, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 66 + } + }, + { + "encoding": 67, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 67 + } + }, + { + "encoding": 68, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 68 + } + }, + { + "encoding": 69, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 69 + } + }, + { + "encoding": 70, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 70 + } + }, + { + "encoding": 71, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 71 + } + }, + { + "encoding": 72, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 72 + } + }, + { + "encoding": 73, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 73 + } + }, + { + "encoding": 74, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 74 + } + }, + { + "encoding": 75, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 75 + } + }, + { + "encoding": 76, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 76 + } + }, + { + "encoding": 77, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 77 + } + }, + { + "encoding": 78, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 78 + } + }, + { + "encoding": 79, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 79 + } + }, + { + "encoding": 80, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 80 + } + }, + { + "encoding": 81, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 81 + } + }, + { + "encoding": 82, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 82 + } + }, + { + "encoding": 83, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 83 + } + }, + { + "encoding": 84, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 84 + } + }, + { + "encoding": 85, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 85 + } + }, + { + "encoding": 86, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 86 + } + }, + { + "encoding": 87, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 87 + } + }, + { + "encoding": 88, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 88 + } + }, + { + "encoding": 89, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 89 + } + }, + { + "encoding": 90, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 90 + } + }, + { + "encoding": 91, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 91 + } + }, + { + "encoding": 92, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 92 + } + }, + { + "encoding": 93, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 93 + } + }, + { + "encoding": 94, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 94 + } + }, + { + "encoding": 95, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 95 + } + }, + { + "encoding": 96, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 96 + } + }, + { + "encoding": 97, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 97 + } + }, + { + "encoding": 98, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 98 + } + }, + { + "encoding": 99, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 99 + } + }, + { + "encoding": 100, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 100 + } + }, + { + "encoding": 101, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 101 + } + }, + { + "encoding": 102, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 102 + } + }, + { + "encoding": 103, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 103 + } + }, + { + "encoding": 104, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 104 + } + }, + { + "encoding": 105, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 105 + } + }, + { + "encoding": 106, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 106 + } + }, + { + "encoding": 107, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 107 + } + }, + { + "encoding": 108, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 108 + } + }, + { + "encoding": 109, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 109 + } + }, + { + "encoding": 110, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 110 + } + }, + { + "encoding": 111, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 111 + } + }, + { + "encoding": 112, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 112 + } + }, + { + "encoding": 113, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 113 + } + }, + { + "encoding": 114, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 114 + } + }, + { + "encoding": 115, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 115 + } + }, + { + "encoding": 116, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 116 + } + }, + { + "encoding": 117, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 117 + } + }, + { + "encoding": 118, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 118 + } + }, + { + "encoding": 119, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 119 + } + }, + { + "encoding": 120, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 120 + } + }, + { + "encoding": 121, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 121 + } + }, + { + "encoding": 122, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 122 + } + }, + { + "encoding": 123, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 123 + } + }, + { + "encoding": 124, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 124 + } + }, + { + "encoding": 125, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 125 + } + }, + { + "encoding": 126, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 126 + } + }, + { + "encoding": 127, + "x": 0, + "y": 0, + "width": 0, + "height": 0, + "dx": 0, + "glyphBitmap": { + "width": 0, + "height": 0, + "pixelArray": "" + }, + "source": { + "filePath": "Oswald-Medium.ttf", + "size": 14, + "encoding": 127 + } + } + ] + } + ], + "bitmaps": [], + "colors": [], + "themes": [] +} \ No newline at end of file diff --git a/images/eez-flow-template-sdl.ico b/images/eez-flow-template-sdl.ico new file mode 100644 index 0000000..0e52f96 Binary files /dev/null and b/images/eez-flow-template-sdl.ico differ diff --git a/images/eez-flow-template-sdl.png b/images/eez-flow-template-sdl.png new file mode 100644 index 0000000..1cee4df Binary files /dev/null and b/images/eez-flow-template-sdl.png differ diff --git a/src/conf/eez/conf.h b/src/conf/eez/conf.h new file mode 100644 index 0000000..e3605a9 --- /dev/null +++ b/src/conf/eez/conf.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +static const uint32_t DISPLAY_WIDTH = 480; +static const uint32_t DISPLAY_HEIGHT = 272; +static const uint32_t DISPLAY_BPP = 32; // RGBA8888 + +static const char *TITLE = "EEZ Flow App"; +static const char *ICON = "eez-flow-template-sdl.png"; + +#define MAX_NUM_OF_Y_AXES 18 +#define MAX_NUM_OF_Y_VALUES MAX_NUM_OF_Y_AXES + +#define OPTION_KEYBOARD 0 +#define OPTION_MOUSE 0 + +#define CUSTOM_VALUE_TYPES + +#define DISPLAY_BACKGROUND_LUMINOSITY_STEP_MIN 0 +#define DISPLAY_BACKGROUND_LUMINOSITY_STEP_MAX 20 +#define DISPLAY_BACKGROUND_LUMINOSITY_STEP_DEFAULT 10 diff --git a/src/conf/eez/gui_conf.h b/src/conf/eez/gui_conf.h new file mode 100644 index 0000000..2ee6c00 --- /dev/null +++ b/src/conf/eez/gui_conf.h @@ -0,0 +1,11 @@ +#pragma once + +#include "../../gui/document.h" + +#define PAGE_ID_NUMERIC_KEYPAD -1 +#define PAGE_ID_ASYNC_OPERATION_IN_PROGRESS 0 +#define COLOR_ID_BOOKMARK 0 + +/// Maximum allowed length (including label) of the keypad text. +#define MAX_KEYPAD_TEXT_LENGTH 128 +#define MAX_KEYPAD_LABEL_LENGTH 64 diff --git a/src/gui/app_context.cpp b/src/gui/app_context.cpp new file mode 100644 index 0000000..ac943d3 --- /dev/null +++ b/src/gui/app_context.cpp @@ -0,0 +1,114 @@ +#include + +#include +#include + +#include + +//////////////////////////////////////////////////////////////////////////////// + +namespace eez { + namespace gui { + const EnumItem *g_enumDefinitions[] = { nullptr }; + + static class : public AppContext { + public: + void stateManagment() override { + AppContext::stateManagment(); + if (getActivePageId() == PAGE_ID_NONE) { + showPage(getMainPageId()); + } + } + + protected: + int getMainPageId() override { + return PAGE_ID_MAIN; + } + } g_myAppContext; + + AppContext *getAppContextFromId(int16_t id) { return &g_myAppContext; } + void executeNumericKeypadOptionHook(int optionActionIndex) { } + Keypad *getActiveKeypad() { return nullptr; } + NumericKeypad *getActiveNumericKeypad() { return nullptr; } + void action_edit() { } + } // namespace gui +} // namespace eez + +//////////////////////////////////////////////////////////////////////////////// + +namespace eez { + bool g_shutdown; + void shutdown() { g_shutdown = true; } + + namespace keyboard { + void onKeyboardEvent(SDL_KeyboardEvent *key) { } + } // keyboard + + namespace sound { + void playBeep(bool force) {} + void playClick() {} + } // namespace sound +} // namespace eez + +//////////////////////////////////////////////////////////////////////////////// + +#ifdef _WIN32 +#undef INPUT +#undef OUTPUT +#include +#include +#include +#else +#include +#include +#include +#include +#include +#endif + +namespace eez { + char *getConfFilePath(const char *file_name) { + static char file_path[1024]; + + *file_path = 0; + + #ifdef _WIN32 + if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_PROFILE, NULL, 0, file_path))) { + stringAppendString(file_path, sizeof(file_path), "\\.min_eez_sample"); + _mkdir(file_path); + stringAppendString(file_path, sizeof(file_path), "\\"); + } + #elif defined(__EMSCRIPTEN__) + stringAppendString(file_path, sizeof(file_path), "/min_eez_sample/"); + #else + const char *home_dir = 0; + if ((home_dir = getenv("HOME")) == NULL) { + home_dir = getpwuid(getuid())->pw_dir; + } + if (home_dir) { + stringAppendString(file_path, sizeof(file_path), home_dir); + stringAppendString(file_path, sizeof(file_path), "/.min_eez_sample"); + mkdir(file_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + stringAppendString(file_path, sizeof(file_path), "/"); + } + #endif + + char *q = file_path + strlen(file_path); + const char *p = file_name; + while (*p) { + char ch = *p++; + #ifdef _WIN32 + if (ch == '/') + *q++ = '\\'; + #else + if (ch == '\\') + *q++ = '/'; + #endif + else + *q++ = ch; + } + *q = 0; + + return file_path; + } +} // eez diff --git a/src/gui/document.cpp b/src/gui/document.cpp new file mode 100644 index 0000000..4abdfd6 --- /dev/null +++ b/src/gui/document.cpp @@ -0,0 +1,659 @@ +#include "document.h" + +namespace eez { +namespace gui { + +DataOperationsFunction g_dataOperationsFunctions[] = { + data_none, + data_alert_message, + data_touch_calibration_point, + data_keypad_text, + data_keypad_edit_unit, + data_keypad_sign_enabled, + data_keypad_unit_enabled, + data_keypad_dot_enabled, + data_keypad_option1_enabled, + data_keypad_option1_text, + data_keypad_option2_enabled, + data_keypad_option2_text, + data_keypad_option3_enabled, + data_keypad_option3_text, + data_keypad_mode, + data_keypad_ok_enabled +}; + +ActionExecFunc g_actionExecFunctions[] = { + 0, + action_yes, + action_no, + action_cancel, + action_edit, + action_drag_overlay, + action_scroll, + action_keypad_key, + action_keypad_back, + action_keypad_unit, + action_keypad_option1, + action_keypad_option2, + action_keypad_option3, + action_keypad_sign, + action_keypad_ok, + action_keypad_cancel, + action_toggle_keypad_mode, + action_keypad_space +}; + +// ASSETS DEFINITION +const uint8_t assets[9722] = { + 0x7E, 0x65, 0x65, 0x7A, 0x03, 0x00, 0x01, 0x00, 0x70, 0x49, 0x00, 0x00, 0xF0, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x26, 0x98, 0x00, 0x01, 0x00, 0x2E, 0xA4, 0x00, 0x01, 0x00, 0x17, 0xB4, 0x0C, 0x00, 0xF2, 0x63, + 0xCC, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, + 0x44, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0xB0, 0x01, 0x00, 0x00, + 0xD4, 0x01, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, + 0x64, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, 0xAC, 0x02, 0x00, 0x00, 0xD0, 0x02, 0x00, 0x00, + 0xF4, 0x02, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0xCC, 0x03, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x24, 0x04, 0xA4, 0x00, 0xA6, 0x30, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xEC, 0x47, 0x8C, + 0x00, 0x15, 0x01, 0x0A, 0x00, 0x51, 0xE0, 0x01, 0x10, 0x01, 0x0F, 0x10, 0x00, 0x5F, 0x3C, 0x04, + 0x00, 0x00, 0x08, 0x1C, 0x00, 0x04, 0x1F, 0x40, 0x1C, 0x00, 0x04, 0x00, 0x60, 0x00, 0x13, 0x44, + 0x1C, 0x00, 0x70, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x82, 0x00, 0x21, 0x00, 0x20, 0x24, + 0x00, 0x15, 0x05, 0x2E, 0x00, 0x22, 0x02, 0xFF, 0x08, 0x00, 0x0F, 0x24, 0x00, 0x0B, 0x40, 0x14, + 0x14, 0x14, 0x14, 0x24, 0x00, 0x7F, 0x0E, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0E, 0x24, 0x00, 0x0A, + 0x71, 0x08, 0x00, 0x07, 0x00, 0x09, 0x00, 0x07, 0x24, 0x00, 0x73, 0x02, 0x02, 0x02, 0x02, 0x0A, + 0x00, 0x08, 0x01, 0x00, 0x60, 0x02, 0xFF, 0x08, 0x10, 0x08, 0x10, 0x24, 0x00, 0x7F, 0x18, 0x00, + 0x16, 0x00, 0x16, 0x00, 0x18, 0x48, 0x00, 0x02, 0x4F, 0x0C, 0x0C, 0x0C, 0x0C, 0x24, 0x00, 0x31, + 0x7F, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x10, 0x24, 0x00, 0x10, 0x00, 0x48, 0x00, 0x1F, 0x17, + 0x48, 0x00, 0x10, 0x0F, 0x24, 0x00, 0x0D, 0x1F, 0x02, 0x68, 0x01, 0x0C, 0x1E, 0x0A, 0x68, 0x01, + 0x0F, 0x44, 0x01, 0x20, 0x01, 0x83, 0x01, 0x65, 0x00, 0x12, 0x00, 0x21, 0x00, 0x22, 0x48, 0x00, + 0x10, 0x01, 0x01, 0x00, 0x0F, 0xD4, 0x01, 0x1C, 0x04, 0x24, 0x00, 0x7F, 0x21, 0x00, 0x23, 0x00, + 0x23, 0x00, 0x21, 0x24, 0x00, 0x00, 0x15, 0x03, 0x24, 0x00, 0x3F, 0x0F, 0x00, 0x04, 0x48, 0x00, + 0x12, 0x3F, 0x21, 0x00, 0x24, 0x48, 0x00, 0x06, 0x0F, 0xD8, 0x00, 0x0E, 0x01, 0x01, 0x00, 0x11, + 0x14, 0x66, 0x00, 0x33, 0x00, 0x00, 0x27, 0xD4, 0x02, 0x13, 0x50, 0xC4, 0x02, 0x10, 0x54, 0xF4, + 0x00, 0x12, 0x04, 0x1C, 0x00, 0x13, 0x7F, 0x1C, 0x00, 0xEA, 0x74, 0x04, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, 0x23, 0x00, 0x1C, 0x00, 0x22, 0xF8, 0x05, 0x1C, 0x00, 0x62, + 0xFC, 0x05, 0x00, 0x00, 0x7C, 0x07, 0x5C, 0x00, 0xF1, 0x04, 0xE3, 0x07, 0xFF, 0xFF, 0xE0, 0x07, + 0x00, 0x00, 0x88, 0x07, 0x00, 0x00, 0xB0, 0x07, 0x00, 0x00, 0xD8, 0x07, 0x00, 0x5D, 0x00, 0xF0, + 0x06, 0x18, 0x08, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x44, 0x08, 0x00, 0x00, 0x5C, 0x08, 0x00, + 0x00, 0x74, 0x08, 0x00, 0x00, 0x80, 0x18, 0x00, 0xF0, 0xB1, 0x0A, 0x00, 0x00, 0xB0, 0x0B, 0x00, + 0x00, 0x48, 0x0D, 0x00, 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x78, 0x10, 0x00, 0x00, 0x10, 0x12, 0x00, + 0x00, 0xA8, 0x13, 0x00, 0x00, 0x40, 0x15, 0x00, 0x00, 0x4C, 0x15, 0x00, 0x00, 0x54, 0x15, 0x00, + 0x00, 0x94, 0x15, 0x00, 0x00, 0xBC, 0x15, 0x00, 0x00, 0x44, 0x16, 0x00, 0x00, 0xDC, 0x16, 0x00, + 0x00, 0xC4, 0x17, 0x00, 0x00, 0x58, 0x18, 0x00, 0x00, 0x74, 0x18, 0x00, 0x00, 0xC0, 0x18, 0x00, + 0x00, 0x20, 0x19, 0x00, 0x00, 0x54, 0x19, 0x00, 0x00, 0x94, 0x19, 0x00, 0x00, 0xB0, 0x19, 0x00, + 0x00, 0xCC, 0x19, 0x00, 0x00, 0xE0, 0x19, 0x00, 0x00, 0x4C, 0x1A, 0x00, 0x00, 0xC4, 0x1A, 0x00, + 0x00, 0x20, 0x1B, 0x00, 0x00, 0x98, 0x1B, 0x00, 0x00, 0x10, 0x1C, 0x00, 0x00, 0x98, 0x1C, 0x00, + 0x00, 0x10, 0x1D, 0x00, 0x00, 0x98, 0x1D, 0x00, 0x00, 0x04, 0x1E, 0x00, 0x00, 0x7C, 0x1E, 0x00, + 0x00, 0xF4, 0x1E, 0x00, 0x00, 0x18, 0x1F, 0x00, 0x00, 0x44, 0x1F, 0x00, 0x00, 0x90, 0x1F, 0x00, + 0x00, 0xC4, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x94, 0x20, 0x00, 0x00, 0xAC, 0x21, 0x00, + 0x00, 0x34, 0x22, 0x00, 0x00, 0xAC, 0x22, 0x00, 0x00, 0x34, 0x23, 0x00, 0x00, 0xAC, 0x23, 0x00, + 0x00, 0x08, 0x24, 0x00, 0x00, 0x64, 0x24, 0x00, 0x00, 0xEC, 0x08, 0x00, 0xF2, 0xFF, 0xFF, 0x54, + 0x25, 0x00, 0x00, 0x98, 0x25, 0x00, 0x00, 0xE8, 0x25, 0x00, 0x00, 0x60, 0x26, 0x00, 0x00, 0xBC, + 0x26, 0x00, 0x00, 0x50, 0x27, 0x00, 0x00, 0xC8, 0x27, 0x00, 0x00, 0x50, 0x28, 0x00, 0x00, 0xC8, + 0x28, 0x00, 0x00, 0x6C, 0x29, 0x00, 0x00, 0xE4, 0x29, 0x00, 0x00, 0x5C, 0x2A, 0x00, 0x00, 0xD4, + 0x2A, 0x00, 0x00, 0x5C, 0x2B, 0x00, 0x00, 0xE4, 0x2B, 0x00, 0x00, 0x94, 0x2C, 0x00, 0x00, 0x1C, + 0x2D, 0x00, 0x00, 0xA4, 0x2D, 0x00, 0x00, 0x10, 0x2E, 0x00, 0x00, 0x80, 0x2E, 0x00, 0x00, 0xEC, + 0x2E, 0x00, 0x00, 0x4C, 0x2F, 0x00, 0x00, 0x84, 0x2F, 0x00, 0x00, 0x9C, 0x2F, 0x00, 0x00, 0xB8, + 0x2F, 0x00, 0x00, 0x10, 0x30, 0x00, 0x00, 0x88, 0x30, 0x00, 0x00, 0xD8, 0x30, 0x00, 0x00, 0x50, + 0x31, 0x00, 0x00, 0xA0, 0x31, 0x00, 0x00, 0xFC, 0x31, 0x00, 0x00, 0x84, 0x32, 0x00, 0x00, 0xFC, + 0x32, 0x00, 0x00, 0x3C, 0x33, 0x00, 0x00, 0x9C, 0x33, 0x00, 0x00, 0x24, 0x34, 0x00, 0x00, 0x58, + 0x34, 0x00, 0x00, 0xD8, 0x34, 0x00, 0x00, 0x30, 0x35, 0x00, 0x00, 0x80, 0x35, 0x00, 0x00, 0xF0, + 0x35, 0x00, 0x00, 0x60, 0x36, 0x00, 0x00, 0xAC, 0x36, 0x00, 0x00, 0xFC, 0x36, 0x00, 0x00, 0x54, + 0x37, 0x00, 0x00, 0xAC, 0x37, 0x00, 0x00, 0xFC, 0x37, 0x00, 0x00, 0x68, 0x38, 0x00, 0x00, 0xB8, + 0x38, 0x00, 0x00, 0x1C, 0x39, 0x00, 0x00, 0x60, 0x39, 0x00, 0x00, 0xD0, 0x39, 0x00, 0x00, 0x0C, + 0x3A, 0x00, 0x00, 0x7C, 0x3A, 0x00, 0x00, 0xA4, 0x3A, 0x00, 0x00, 0xF4, 0x3A, 0x00, 0x00, 0x00, + 0x3B, 0x00, 0x00, 0x08, 0x3B, 0x00, 0x00, 0x10, 0x3B, 0x00, 0x00, 0x18, 0x3B, 0x00, 0x00, 0x20, + 0x3B, 0x00, 0x00, 0x28, 0x3B, 0x00, 0x00, 0x30, 0x3B, 0x00, 0x00, 0x38, 0x3B, 0x00, 0x00, 0x40, + 0x3B, 0x00, 0x00, 0x48, 0x3B, 0x00, 0x00, 0x50, 0x3B, 0x00, 0x00, 0x58, 0x3B, 0x00, 0x00, 0x2C, + 0x40, 0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x3C, 0x40, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x4C, + 0x40, 0x00, 0x00, 0x54, 0x40, 0x00, 0x00, 0x5C, 0x40, 0x00, 0x00, 0x64, 0x40, 0x00, 0x00, 0x6C, + 0x40, 0x00, 0x00, 0x74, 0x40, 0x00, 0x00, 0x7C, 0x40, 0x00, 0x00, 0x84, 0x40, 0x00, 0x00, 0x8C, + 0x40, 0x00, 0x00, 0x94, 0x40, 0x00, 0x00, 0x9C, 0x40, 0x00, 0x00, 0xA4, 0x40, 0x00, 0x00, 0xAC, + 0x40, 0x00, 0x00, 0xB4, 0x40, 0x00, 0x00, 0xBC, 0x40, 0x00, 0x00, 0xC4, 0x40, 0x00, 0x00, 0xCC, + 0x40, 0x00, 0x00, 0xD4, 0x40, 0x00, 0x00, 0xDC, 0x40, 0x00, 0x00, 0xE4, 0x40, 0x00, 0x00, 0xEC, + 0x40, 0x00, 0x00, 0xF4, 0x40, 0x00, 0x00, 0xFC, 0x40, 0x00, 0x00, 0x04, 0x41, 0x00, 0x00, 0x0C, + 0x41, 0x00, 0x00, 0x14, 0x41, 0x00, 0x00, 0x1C, 0x41, 0x00, 0x00, 0x24, 0x41, 0x00, 0x00, 0x2C, + 0x41, 0x00, 0x00, 0x34, 0x41, 0x00, 0x00, 0x3C, 0x41, 0x00, 0x00, 0x44, 0x41, 0x00, 0x00, 0x4C, + 0x41, 0x00, 0x00, 0x54, 0x41, 0x00, 0x00, 0x5C, 0x41, 0x00, 0x00, 0x64, 0x41, 0x00, 0x00, 0x6C, + 0x41, 0x00, 0x00, 0x74, 0x41, 0x00, 0x00, 0x7C, 0x41, 0x00, 0x00, 0x84, 0x41, 0x00, 0x00, 0x8C, + 0x41, 0x00, 0x00, 0x94, 0x41, 0x00, 0x00, 0x9C, 0x41, 0x00, 0x00, 0xA4, 0x41, 0x00, 0x00, 0xAC, + 0x41, 0x00, 0x00, 0xB4, 0x41, 0x00, 0x00, 0xBC, 0x41, 0x00, 0x00, 0xC4, 0x41, 0x00, 0x00, 0xCC, + 0x41, 0x00, 0x00, 0xD4, 0x41, 0x00, 0x00, 0xDC, 0x41, 0x00, 0x00, 0xE4, 0x41, 0x00, 0x00, 0xEC, + 0x41, 0x00, 0x00, 0xF4, 0x41, 0x00, 0x00, 0xFC, 0x41, 0x00, 0x00, 0x04, 0x42, 0x00, 0x00, 0x0C, + 0x42, 0x00, 0x00, 0x14, 0x42, 0x00, 0x00, 0x1C, 0x42, 0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x2C, + 0x42, 0x00, 0x00, 0x34, 0x42, 0x00, 0x00, 0x3C, 0x42, 0x00, 0x00, 0x44, 0x42, 0x00, 0x00, 0x4C, + 0x42, 0x00, 0x00, 0x54, 0x42, 0x00, 0x00, 0x5C, 0x42, 0x00, 0x00, 0x64, 0x42, 0x00, 0x00, 0x6C, + 0x42, 0x00, 0x00, 0x74, 0x42, 0x00, 0x00, 0x7C, 0x42, 0x00, 0x00, 0x84, 0x42, 0x00, 0x00, 0x8C, + 0x42, 0x00, 0x00, 0x94, 0x42, 0x00, 0x00, 0x9C, 0x42, 0x00, 0x00, 0xA4, 0x42, 0x00, 0x00, 0xAC, + 0x42, 0x00, 0x00, 0xB4, 0x42, 0x00, 0x00, 0xBC, 0x42, 0x00, 0x00, 0xC4, 0x42, 0x00, 0x00, 0xCC, + 0x42, 0x78, 0x03, 0x22, 0xD4, 0x42, 0x78, 0x03, 0x2E, 0x14, 0x43, 0x6C, 0x07, 0x00, 0x18, 0x00, + 0x17, 0x18, 0x18, 0x00, 0x00, 0x08, 0x05, 0x1F, 0x1C, 0x28, 0x00, 0x00, 0x00, 0x8F, 0x03, 0x17, + 0x44, 0x18, 0x00, 0x00, 0xC4, 0x06, 0x1F, 0x60, 0x28, 0x00, 0x00, 0x00, 0x18, 0x00, 0x17, 0x6C, + 0x18, 0x00, 0x31, 0x06, 0x00, 0xFF, 0x3E, 0x04, 0x57, 0x72, 0x00, 0xE0, 0x01, 0x2C, 0x0A, 0x07, + 0x13, 0x04, 0x18, 0x00, 0x02, 0x14, 0x07, 0x11, 0x10, 0x38, 0x00, 0x20, 0x78, 0x43, 0x9A, 0x04, + 0x02, 0x18, 0x00, 0x53, 0x52, 0x00, 0xE0, 0x01, 0x28, 0x30, 0x00, 0xF7, 0x00, 0x06, 0x00, 0xFE, + 0xFF, 0x01, 0x00, 0x5A, 0x00, 0xB0, 0x00, 0x8C, 0x00, 0x28, 0x00, 0x13, 0x5C, 0x00, 0x5D, 0xFD, + 0xFF, 0x02, 0x00, 0xFA, 0x18, 0x00, 0x13, 0x20, 0x08, 0x00, 0x00, 0x9C, 0x04, 0x01, 0xB5, 0x05, + 0x09, 0xA1, 0x00, 0x00, 0x01, 0x00, 0x22, 0x06, 0x06, 0x16, 0x06, 0x01, 0x11, 0x00, 0x45, 0x06, + 0x06, 0x06, 0x0A, 0x01, 0x00, 0x03, 0x12, 0x00, 0x63, 0x0A, 0x10, 0x10, 0x10, 0x10, 0x17, 0x01, + 0x00, 0x01, 0x13, 0x00, 0x83, 0x0A, 0x10, 0x17, 0x1B, 0x1E, 0x21, 0x21, 0x28, 0x01, 0x00, 0x02, + 0x13, 0x00, 0x1B, 0x1B, 0xFE, 0x00, 0x00, 0x13, 0x00, 0x1B, 0x28, 0x70, 0x00, 0x00, 0x13, 0x00, + 0x1C, 0x39, 0x27, 0x00, 0x4B, 0x17, 0x21, 0x36, 0x4E, 0x14, 0x00, 0x5A, 0x10, 0x1B, 0x2C, 0x44, + 0x5F, 0x3B, 0x00, 0x6C, 0x06, 0x10, 0x1E, 0x32, 0x4E, 0x70, 0x4F, 0x00, 0x4C, 0x21, 0x39, 0x58, + 0x7A, 0x76, 0x00, 0x4C, 0x21, 0x3D, 0x5F, 0x84, 0x63, 0x00, 0x4D, 0x28, 0x40, 0x5F, 0x8B, 0x14, + 0x00, 0x2F, 0x44, 0x66, 0x14, 0x00, 0x15, 0x1F, 0x8E, 0x14, 0x00, 0x4A, 0x04, 0x98, 0x01, 0x1F, + 0x06, 0x01, 0x00, 0x00, 0x1F, 0x0A, 0x01, 0x00, 0x00, 0x1F, 0x17, 0x01, 0x00, 0x00, 0x1F, 0x28, + 0x01, 0x00, 0x00, 0x1F, 0x00, 0x01, 0x00, 0xFF, 0x2D, 0x0A, 0x98, 0x01, 0x01, 0x2D, 0x03, 0x06, + 0x1C, 0x04, 0x05, 0x01, 0x00, 0x00, 0x1B, 0x00, 0x02, 0x14, 0x00, 0x04, 0x8C, 0x01, 0x00, 0x30, + 0x03, 0x13, 0x0A, 0x16, 0x00, 0x04, 0x8C, 0x01, 0x9C, 0x21, 0x21, 0x1E, 0x1B, 0x17, 0x10, 0x0A, + 0x06, 0x03, 0x65, 0x00, 0x1F, 0x1B, 0x15, 0x00, 0x00, 0x10, 0x28, 0x15, 0x00, 0x0B, 0x14, 0x00, + 0x10, 0x39, 0x15, 0x00, 0x0B, 0x29, 0x00, 0x4C, 0x4E, 0x36, 0x21, 0x17, 0x29, 0x00, 0x5B, 0x5F, + 0x44, 0x2C, 0x1B, 0x10, 0x14, 0x00, 0x5B, 0x70, 0x4E, 0x32, 0x1E, 0x10, 0x66, 0x00, 0x4C, 0x7A, + 0x58, 0x39, 0x21, 0x51, 0x00, 0x4C, 0x84, 0x5F, 0x3D, 0x21, 0x7A, 0x00, 0x4C, 0x8B, 0x5F, 0x40, + 0x28, 0x65, 0x00, 0x3F, 0x8B, 0x66, 0x44, 0x14, 0x00, 0x12, 0x1F, 0x8E, 0x14, 0x00, 0x43, 0x05, + 0x98, 0x01, 0x0E, 0x9C, 0x03, 0x0F, 0x14, 0x00, 0xFF, 0x6B, 0x0D, 0x60, 0x06, 0x0E, 0x04, 0x02, + 0x0F, 0x14, 0x00, 0xFF, 0x63, 0x0F, 0x30, 0x03, 0x5F, 0x0F, 0x58, 0x07, 0x13, 0x0E, 0x94, 0x07, + 0x01, 0xBC, 0x07, 0x1F, 0xF8, 0xE4, 0x07, 0x00, 0x2E, 0xC5, 0xFB, 0x0C, 0x08, 0x81, 0x8E, 0xB0, + 0xC8, 0xDD, 0xEA, 0xF4, 0xF4, 0xFB, 0x01, 0x00, 0x03, 0x34, 0x08, 0x81, 0x7A, 0x99, 0xAD, 0xBE, + 0xCC, 0xD2, 0xD6, 0xDD, 0x01, 0x00, 0x03, 0x5C, 0x08, 0x72, 0x66, 0x7A, 0x8E, 0x9F, 0xAA, 0xB0, + 0xB4, 0x01, 0x00, 0x03, 0x84, 0x08, 0xD3, 0x4E, 0x5F, 0x70, 0x7A, 0x84, 0x88, 0x8B, 0x8B, 0x8B, + 0x8E, 0x8E, 0x8E, 0x8E, 0xAC, 0x08, 0x72, 0x36, 0x44, 0x4E, 0x58, 0x5F, 0x5F, 0x66, 0x01, 0x00, + 0x03, 0xD4, 0x08, 0x72, 0x21, 0x2C, 0x32, 0x39, 0x3D, 0x40, 0x44, 0x01, 0x00, 0x0F, 0xFC, 0x08, + 0x03, 0x0C, 0x24, 0x09, 0x2D, 0x1B, 0x1B, 0x4C, 0x09, 0x3C, 0x0D, 0x0D, 0x0D, 0x74, 0x09, 0x00, + 0x17, 0x00, 0x0E, 0x30, 0x03, 0x0F, 0x30, 0x07, 0xAB, 0x1F, 0xFB, 0x01, 0x00, 0x00, 0x1F, 0xDD, + 0x01, 0x00, 0x00, 0x1F, 0xB4, 0x01, 0x00, 0x00, 0x1F, 0x8E, 0x01, 0x00, 0x00, 0x1F, 0x66, 0x01, + 0x00, 0x00, 0x1F, 0x44, 0x01, 0x00, 0x00, 0x0F, 0xFC, 0x08, 0x01, 0x1F, 0x1B, 0x01, 0x00, 0x00, + 0x1F, 0x0D, 0x01, 0x00, 0x00, 0x0F, 0x60, 0x09, 0x01, 0x0F, 0xC8, 0x04, 0x66, 0x0F, 0x58, 0x07, + 0x15, 0x0F, 0x94, 0x07, 0x00, 0x1E, 0xF8, 0xBC, 0x07, 0x23, 0xFB, 0xC5, 0xE4, 0x07, 0x02, 0x8A, + 0x01, 0x73, 0xF4, 0xF4, 0xEA, 0xDD, 0xC8, 0xB0, 0x8E, 0x0C, 0x08, 0x02, 0x8A, 0x01, 0x73, 0xD6, + 0xD2, 0xCC, 0xBE, 0xAD, 0x99, 0x7A, 0x34, 0x08, 0x03, 0x8B, 0x01, 0x63, 0xB0, 0xAA, 0x9F, 0x8E, + 0x7A, 0x66, 0x5C, 0x08, 0x00, 0x88, 0x01, 0x93, 0x8B, 0x8B, 0x8B, 0x88, 0x84, 0x7A, 0x70, 0x5F, + 0x4E, 0x84, 0x08, 0x03, 0x8B, 0x01, 0x63, 0x5F, 0x5F, 0x58, 0x4E, 0x44, 0x36, 0xAC, 0x08, 0x03, + 0x8B, 0x01, 0x63, 0x40, 0x3D, 0x39, 0x32, 0x2C, 0x21, 0xD4, 0x08, 0x0F, 0xFC, 0x08, 0x01, 0x1F, + 0x1B, 0x24, 0x09, 0x00, 0x2E, 0x0D, 0x0D, 0x4C, 0x09, 0x03, 0x0D, 0x00, 0x09, 0x74, 0x09, 0x04, + 0xCC, 0x0C, 0x11, 0x60, 0x34, 0x0D, 0x03, 0x3C, 0x0D, 0x22, 0x04, 0x0E, 0x33, 0x09, 0xF0, 0x2C, + 0xFC, 0xFC, 0x17, 0x18, 0xFF, 0xFF, 0x05, 0x08, 0xFF, 0xF2, 0x00, 0x00, 0xF8, 0xDF, 0x00, 0x00, + 0xE7, 0xCD, 0x00, 0x00, 0xD7, 0xBA, 0x00, 0x00, 0xC7, 0xA8, 0x00, 0x00, 0xB6, 0x95, 0x00, 0x00, + 0xA6, 0x82, 0x00, 0x00, 0x95, 0x70, 0x00, 0x00, 0x85, 0x5D, 0x00, 0x00, 0x02, 0x02, 0x00, 0x23, + 0x9C, 0x9C, 0x05, 0x38, 0xFF, 0xFF, 0x08, 0x06, 0x05, 0x06, 0x01, 0x1C, 0x0D, 0xF0, 0x0D, 0xF5, + 0xF1, 0x22, 0xFC, 0xCB, 0xF8, 0xCA, 0x20, 0xFF, 0xA1, 0xF8, 0x9E, 0x20, 0xFF, 0x75, 0xF8, 0x72, + 0x20, 0xFF, 0x48, 0xF8, 0x46, 0x20, 0xFF, 0x1B, 0x04, 0x01, 0x01, 0x70, 0x15, 0x33, 0x09, 0x09, + 0x0E, 0x72, 0x00, 0xF2, 0x39, 0x6C, 0xFC, 0x7D, 0x1E, 0xFC, 0xC8, 0x00, 0x00, 0x00, 0x8F, 0xFF, + 0x5C, 0x41, 0xFF, 0xA8, 0x00, 0x00, 0x00, 0xB1, 0xFF, 0x39, 0x64, 0xFF, 0x85, 0x00, 0x00, 0x00, + 0xD3, 0xFF, 0x16, 0x87, 0xFF, 0x62, 0x00, 0x56, 0xFC, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFE, 0x0B, + 0x3A, 0xB5, 0xFF, 0xE7, 0xA4, 0xF4, 0xFF, 0xA8, 0x06, 0x00, 0x42, 0xFF, 0xA4, 0x01, 0xF3, 0xF4, + 0x01, 0x00, 0x39, 0xBE, 0xFF, 0xD4, 0x9F, 0xFF, 0xF3, 0x9C, 0x05, 0x5F, 0xFF, 0x01, 0x00, 0xF1, + 0x1D, 0x05, 0x02, 0xA9, 0xFF, 0x43, 0x5B, 0xFF, 0x8F, 0x04, 0x01, 0x00, 0xC7, 0xFF, 0x20, 0x78, + 0xFF, 0x6D, 0x00, 0x00, 0x00, 0xE7, 0xFC, 0x04, 0x98, 0xFF, 0x4E, 0x00, 0x00, 0x08, 0xFF, 0xE0, + 0x00, 0xB8, 0xFF, 0x2F, 0x00, 0x00, 0x25, 0xFF, 0xC0, 0x00, 0xD8, 0xFF, 0x10, 0xC8, 0x0D, 0x42, + 0x08, 0x12, 0x00, 0xFE, 0x89, 0x00, 0x22, 0x18, 0x44, 0x08, 0x00, 0x11, 0x30, 0x82, 0x05, 0xF0, + 0x14, 0x30, 0xBC, 0xF7, 0xFF, 0xD4, 0x43, 0x00, 0x0F, 0xEB, 0xFF, 0xCD, 0xC1, 0xFF, 0xF2, 0x13, + 0x58, 0xFF, 0xF4, 0x07, 0x01, 0xD5, 0xFF, 0x62, 0x71, 0xFF, 0xF5, 0x05, 0x00, 0x9A, 0xCB, 0x56, + 0x52, 0xFF, 0xFF, 0x87, 0x27, 0x00, 0x50, 0x0C, 0xE6, 0xFF, 0xFF, 0x8C, 0x23, 0x13, 0x50, 0x39, + 0xF4, 0xFF, 0xFF, 0xA7, 0xFC, 0x12, 0x50, 0x34, 0xE9, 0xFF, 0xFF, 0x9F, 0x1B, 0x00, 0xF1, 0x1D, + 0x23, 0xDD, 0xFF, 0xFF, 0x49, 0x05, 0x32, 0x47, 0x00, 0x23, 0xF6, 0xFF, 0xA8, 0x6F, 0xFF, 0xD3, + 0x00, 0x00, 0xAD, 0xFF, 0xC8, 0x3C, 0xFF, 0xFD, 0x21, 0x00, 0xB0, 0xFF, 0xAC, 0x03, 0xD1, 0xFF, + 0xE2, 0xAD, 0xFE, 0xFF, 0x4C, 0x00, 0x1C, 0xAD, 0xF2, 0xFF, 0xE4, 0x63, 0x79, 0x00, 0x13, 0xB7, + 0xC3, 0x0E, 0x63, 0x5A, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20, 0x01, 0xA1, 0x43, 0xD0, 0xF9, 0xE3, + 0x81, 0x02, 0x00, 0x00, 0xC8, 0xD6, 0x0F, 0x00, 0xB1, 0x09, 0xEE, 0xFF, 0xB3, 0xEB, 0xFF, 0x54, + 0x00, 0x14, 0xFE, 0x92, 0x10, 0x00, 0xB1, 0x3B, 0xFF, 0xC4, 0x00, 0x6C, 0xFF, 0x99, 0x00, 0x59, + 0xFF, 0x4B, 0x10, 0x00, 0xB7, 0x52, 0xFF, 0xB1, 0x00, 0x56, 0xFF, 0xAF, 0x00, 0xA0, 0xF9, 0x0B, + 0x10, 0x00, 0x43, 0xAE, 0x01, 0xE6, 0xBD, 0xF7, 0x0A, 0x92, 0xFF, 0xC9, 0x00, 0x72, 0xFF, 0x96, + 0x2E, 0xFF, 0x75, 0x10, 0x00, 0xF1, 0x11, 0x07, 0xEA, 0xFF, 0xAE, 0xEC, 0xFF, 0x4E, 0x75, 0xFF, + 0x2E, 0x0A, 0x68, 0x97, 0x89, 0x37, 0x00, 0x00, 0x3F, 0xD3, 0xFF, 0xEC, 0x82, 0x01, 0xBC, 0xE6, + 0x01, 0xB5, 0xFF, 0xFF, 0xFF, 0xFE, 0x41, 0x4B, 0x14, 0xB2, 0x00, 0x0B, 0xF9, 0xA0, 0x16, 0xFF, + 0xEB, 0x19, 0x7C, 0xFF, 0xA0, 0x36, 0x00, 0xA2, 0x4A, 0xFF, 0x58, 0x38, 0xFF, 0xC6, 0x00, 0x43, + 0xFF, 0xC1, 0x10, 0x00, 0xA2, 0x91, 0xFE, 0x13, 0x3B, 0xFF, 0xC5, 0x00, 0x41, 0xFF, 0xC3, 0x10, + 0x00, 0xA1, 0xD8, 0xCA, 0x00, 0x26, 0xFF, 0xDB, 0x01, 0x55, 0xFF, 0xAF, 0x0F, 0x00, 0xB1, 0x1F, + 0xFF, 0x83, 0x00, 0x02, 0xE0, 0xFF, 0xB2, 0xE1, 0xFF, 0x69, 0x10, 0x00, 0xD4, 0x65, 0xFF, 0x3C, + 0x00, 0x00, 0x36, 0xC7, 0xFA, 0xEB, 0x92, 0x05, 0x0A, 0x0A, 0x08, 0x02, 0x52, 0x63, 0xDC, 0xF7, + 0xBF, 0x38, 0xA3, 0x00, 0x51, 0xF6, 0xB5, 0xFF, 0xEF, 0x0C, 0x12, 0x02, 0xF0, 0x00, 0x8C, 0x00, + 0xCA, 0xFF, 0x48, 0x00, 0x00, 0x00, 0x94, 0xFF, 0x87, 0x01, 0xE3, 0xFF, 0x36, 0x11, 0x14, 0x50, + 0xFF, 0xBE, 0x36, 0xFF, 0xD9, 0x72, 0x01, 0x61, 0x05, 0xDC, 0xFC, 0xC2, 0xFD, 0x40, 0x3C, 0x00, + 0x42, 0x64, 0xFF, 0xFF, 0x64, 0xE7, 0x02, 0xF2, 0x37, 0xD2, 0xFF, 0xFE, 0x31, 0x00, 0x9A, 0xB8, + 0x17, 0x00, 0x8A, 0xFF, 0xCA, 0xFF, 0xC6, 0x04, 0xF4, 0xFE, 0x09, 0x02, 0xEE, 0xFF, 0x28, 0xB7, + 0xFF, 0x8B, 0xFF, 0xCA, 0x00, 0x21, 0xFF, 0xF4, 0x01, 0x29, 0xFC, 0xFF, 0xFF, 0x67, 0x00, 0x16, + 0xFF, 0xFB, 0x0C, 0x02, 0xC3, 0xFF, 0xFF, 0x48, 0x03, 0x00, 0xBC, 0xFF, 0xC8, 0xCB, 0xFF, 0xF1, + 0xFF, 0xFF, 0x30, 0x00, 0x1B, 0xAF, 0xF7, 0xF0, 0xA8, 0x17, 0x7E, 0xF6, 0x30, 0x05, 0x03, 0xC4, + 0x02, 0xF1, 0x01, 0xD9, 0xFC, 0x0D, 0xDC, 0xE3, 0x00, 0xDC, 0xBB, 0x00, 0xDC, 0x92, 0x00, 0xDC, + 0x69, 0x00, 0x04, 0x75, 0x00, 0x41, 0x04, 0x11, 0x01, 0xFD, 0x68, 0x0C, 0xF1, 0x12, 0xAD, 0xD4, + 0x02, 0xCD, 0xFF, 0xB3, 0x42, 0xFF, 0xE0, 0x05, 0x88, 0xFF, 0x97, 0x00, 0xAF, 0xFF, 0x77, 0x00, + 0xC6, 0xFF, 0x63, 0x00, 0xD6, 0xFF, 0x59, 0x00, 0xDB, 0xFF, 0x55, 0x00, 0xDC, 0xFF, 0x54, 0x04, + 0x00, 0xF0, 0x11, 0xD6, 0xFF, 0x58, 0x00, 0xC7, 0xFF, 0x61, 0x00, 0xB0, 0xFF, 0x75, 0x00, 0x8A, + 0xFF, 0x98, 0x00, 0x42, 0xFF, 0xDF, 0x05, 0x02, 0xCF, 0xFF, 0xB0, 0x00, 0x1D, 0xB1, 0xD7, 0x05, + 0x05, 0x11, 0x00, 0x4C, 0x00, 0xF0, 0x18, 0x71, 0xD5, 0x52, 0x00, 0x00, 0x50, 0xF8, 0xFE, 0x39, + 0x00, 0x00, 0x7A, 0xFF, 0xA7, 0x00, 0x00, 0x30, 0xFF, 0xED, 0x01, 0x00, 0x0D, 0xFF, 0xFF, 0x17, + 0x00, 0x01, 0xFB, 0xFF, 0x2D, 0x00, 0x00, 0xF0, 0xFF, 0x3A, 0x00, 0x00, 0xED, 0xFF, 0xE6, 0x11, + 0x20, 0xFF, 0x44, 0x0A, 0x00, 0x12, 0x42, 0x14, 0x00, 0x60, 0x01, 0xFA, 0xFF, 0x2E, 0x00, 0x0C, + 0x28, 0x00, 0xA0, 0x32, 0xFF, 0xEE, 0x01, 0x00, 0x7C, 0xFF, 0xA7, 0x00, 0x4F, 0x46, 0x00, 0x32, + 0x73, 0xD9, 0x54, 0xDC, 0x01, 0x42, 0x07, 0x06, 0x00, 0x08, 0xDB, 0x02, 0xF0, 0x18, 0xFC, 0x89, + 0x00, 0x00, 0x01, 0x8E, 0x2B, 0xFC, 0x78, 0x72, 0x3D, 0x19, 0xE6, 0xFD, 0xFE, 0xFA, 0xFE, 0x78, + 0x00, 0x04, 0xA1, 0xFF, 0xF6, 0x26, 0x00, 0x00, 0x2C, 0xF8, 0x8F, 0xF6, 0x98, 0x00, 0x00, 0x36, + 0xC4, 0x0F, 0x87, 0x84, 0x02, 0x34, 0x00, 0x33, 0x08, 0x00, 0x03, 0x02, 0x04, 0x11, 0x7B, 0x07, + 0x00, 0xC1, 0xFF, 0x7C, 0x00, 0x00, 0x58, 0x9C, 0xAC, 0xFF, 0xCD, 0x9C, 0x95, 0x90, 0x63, 0x03, + 0x83, 0xF4, 0x03, 0x04, 0x2C, 0xFF, 0x7F, 0x04, 0x04, 0x1C, 0x00, 0x05, 0x07, 0x00, 0x10, 0x01, + 0x21, 0x01, 0x31, 0x04, 0x03, 0x06, 0xD4, 0x00, 0xF1, 0x02, 0x0C, 0x24, 0x23, 0x54, 0xFF, 0xF4, + 0x54, 0xFF, 0xF4, 0x00, 0x3A, 0xE0, 0x16, 0xE1, 0x6E, 0x02, 0x2C, 0xF8, 0x0D, 0x11, 0x03, 0x68, + 0x04, 0x70, 0x08, 0x9C, 0x9C, 0x9C, 0x9C, 0x0A, 0x0C, 0x4C, 0x00, 0x50, 0x10, 0x01, 0x04, 0x04, + 0x04, 0x10, 0x04, 0x22, 0x04, 0x04, 0x76, 0x00, 0x40, 0x08, 0x24, 0x24, 0x02, 0x48, 0x04, 0x00, + 0x04, 0x00, 0x35, 0x07, 0x07, 0x0E, 0xAC, 0x04, 0x20, 0xA1, 0xF2, 0xCA, 0x00, 0x30, 0x02, 0xEA, + 0xB6, 0x0D, 0x00, 0x30, 0x32, 0xFF, 0x6E, 0x07, 0x00, 0x20, 0x79, 0xFF, 0x2E, 0x16, 0x30, 0x00, + 0xC0, 0xDF, 0x38, 0x03, 0x21, 0x0D, 0xFB, 0xFB, 0x19, 0x30, 0x4F, 0xFF, 0x50, 0x07, 0x00, 0x21, + 0x96, 0xFB, 0x3B, 0x00, 0x11, 0xDD, 0xA0, 0x02, 0x21, 0x24, 0xFF, 0xD4, 0x10, 0x30, 0x6C, 0xFF, + 0x32, 0x07, 0x00, 0x20, 0xB3, 0xEA, 0xC8, 0x01, 0x30, 0x06, 0xF4, 0xA3, 0x0D, 0x00, 0x32, 0x41, + 0xFF, 0x5C, 0x60, 0x00, 0x23, 0x09, 0x08, 0x6C, 0x00, 0xFF, 0x18, 0x09, 0x8D, 0xE6, 0xF9, 0xD2, + 0x59, 0x00, 0x00, 0x9B, 0xFF, 0xEB, 0xB2, 0xFE, 0xFF, 0x48, 0x0B, 0xFA, 0xFF, 0x52, 0x00, 0xA6, + 0xFF, 0xB7, 0x34, 0xFF, 0xFF, 0x27, 0x00, 0x7C, 0xFF, 0xE3, 0x3C, 0xFF, 0xFF, 0x24, 0x00, 0x78, + 0xFF, 0xEC, 0x08, 0x00, 0x15, 0xF2, 0x14, 0x35, 0xFF, 0xFF, 0x29, 0x00, 0x7D, 0xFF, 0xE4, 0x0E, + 0xFB, 0xFF, 0x57, 0x00, 0xAB, 0xFF, 0xB8, 0x00, 0x99, 0xFF, 0xEB, 0xAF, 0xFE, 0xFF, 0x4A, 0x00, + 0x09, 0x8E, 0xE9, 0xFD, 0xD5, 0x5C, 0x00, 0x09, 0x06, 0x0E, 0xF6, 0x03, 0xFF, 0x0A, 0x05, 0x6B, + 0xF6, 0xFC, 0x0C, 0x4C, 0xDC, 0xFF, 0xFF, 0xFF, 0x0C, 0x88, 0xFD, 0xE1, 0xFF, 0xFF, 0x0C, 0x21, + 0x0F, 0x50, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x06, 0x00, 0x27, 0x05, 0xD4, 0x00, 0xF1, 0x18, 0x06, + 0x85, 0xE1, 0xFA, 0xDB, 0x74, 0x02, 0x00, 0x89, 0xFF, 0xF6, 0xB1, 0xF9, 0xFF, 0x6D, 0x02, 0xF0, + 0xFF, 0x70, 0x00, 0x87, 0xFF, 0xCE, 0x1C, 0xFF, 0xFF, 0x39, 0x00, 0x64, 0xFF, 0xF3, 0x17, 0xA0, + 0xA0, 0x1E, 0x00, 0x8B, 0xFF, 0xE9, 0xD0, 0x04, 0x30, 0xEA, 0xFF, 0xAA, 0x08, 0x00, 0x30, 0x8C, + 0xFF, 0xFF, 0x8D, 0x03, 0x40, 0x2B, 0xFB, 0xFF, 0x9D, 0xDB, 0x01, 0x30, 0xC0, 0xFF, 0xE7, 0x2F, + 0x05, 0x30, 0x5A, 0xFF, 0xFF, 0x5B, 0x02, 0x51, 0x0F, 0xE7, 0xFF, 0xB0, 0x01, 0xA0, 0x03, 0x10, + 0xF2, 0x9D, 0x09, 0x92, 0x23, 0xFC, 0xFF, 0xD9, 0x9C, 0x9C, 0x9C, 0x60, 0x3C, 0x83, 0x05, 0x15, + 0x9C, 0x78, 0x00, 0xF0, 0x17, 0x10, 0x98, 0xE9, 0xF8, 0xD1, 0x5B, 0x00, 0x00, 0xB8, 0xFF, 0xE4, + 0xB5, 0xFE, 0xFF, 0x4F, 0x25, 0xFF, 0xFF, 0x3A, 0x00, 0xA7, 0xFF, 0xB8, 0x4C, 0xFF, 0xFF, 0x11, + 0x00, 0x7D, 0xFF, 0xDC, 0x25, 0x74, 0x74, 0x06, 0x00, 0x8A, 0xFF, 0xFC, 0x05, 0x31, 0x00, 0x1C, + 0xD8, 0x92, 0x04, 0x40, 0x6B, 0xFF, 0xFF, 0x94, 0x09, 0x02, 0x51, 0x46, 0xC6, 0xFF, 0xEA, 0x2A, + 0x55, 0x02, 0xC0, 0xBA, 0xFF, 0xA4, 0x1D, 0x5C, 0x5C, 0x05, 0x00, 0x80, 0xFF, 0xD8, 0x4A, 0xEB, + 0x02, 0xF7, 0x0B, 0x80, 0xFF, 0xD8, 0x21, 0xFF, 0xFF, 0x61, 0x06, 0xC0, 0xFF, 0xAA, 0x00, 0xC2, + 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x4B, 0x00, 0x17, 0xA4, 0xEE, 0xFD, 0xD7, 0x63, 0x54, 0x06, 0x51, + 0x00, 0x1D, 0xFA, 0xFC, 0xDD, 0x09, 0x00, 0x41, 0x7F, 0xFF, 0xFF, 0xE0, 0x27, 0x0A, 0x13, 0xE3, + 0x09, 0x00, 0x32, 0x4B, 0xFF, 0xC7, 0x09, 0x00, 0x31, 0xB0, 0xFF, 0x75, 0x09, 0x00, 0x41, 0x1A, + 0xFC, 0xC8, 0x58, 0x09, 0x00, 0x31, 0x7B, 0xFF, 0x75, 0x09, 0x00, 0x41, 0x02, 0xE0, 0xFF, 0x22, + 0x09, 0x00, 0x41, 0x45, 0xFF, 0xCF, 0x00, 0x09, 0x00, 0xC2, 0x64, 0xFF, 0xFF, 0xFC, 0xFE, 0xFF, + 0xFF, 0xFC, 0x4B, 0x63, 0xFC, 0xFC, 0x09, 0x00, 0x00, 0x41, 0x00, 0x02, 0x36, 0x00, 0x0F, 0x09, + 0x00, 0x00, 0x05, 0x00, 0x01, 0x20, 0xDB, 0xFC, 0x01, 0x00, 0xC2, 0x63, 0x00, 0xE2, 0xFF, 0xB2, + 0xA4, 0xA4, 0xA4, 0x41, 0x00, 0xE6, 0xFF, 0x73, 0x07, 0x31, 0xE9, 0xFF, 0x17, 0x08, 0x00, 0x22, + 0xED, 0xFF, 0x29, 0x00, 0xF3, 0x08, 0xF0, 0xFF, 0xAB, 0xF3, 0xEA, 0x89, 0x03, 0x00, 0xF4, 0xFF, + 0xEB, 0xB0, 0xFB, 0xFF, 0x69, 0x00, 0xD0, 0xD8, 0x36, 0x00, 0x8F, 0xFF, 0xC2, 0xDB, 0x04, 0x11, + 0xE4, 0x08, 0x00, 0xF6, 0x13, 0x5E, 0xFF, 0xE9, 0x26, 0xFC, 0xFC, 0x27, 0x00, 0x64, 0xFF, 0xD8, + 0x0D, 0xFE, 0xFF, 0x4F, 0x00, 0x8A, 0xFF, 0xA8, 0x00, 0xB5, 0xFF, 0xE7, 0xA8, 0xF8, 0xFF, 0x44, + 0x00, 0x18, 0xAE, 0xF0, 0xFD, 0xD9, 0x61, 0x00, 0x01, 0xE0, 0x02, 0x76, 0xDF, 0xF9, 0xDD, 0x82, + 0x04, 0x00, 0x00, 0x6A, 0xFF, 0xF9, 0xAF, 0xF4, 0x9E, 0x03, 0xF2, 0x07, 0xD8, 0xFF, 0x7B, 0x00, + 0x7A, 0xFF, 0xD5, 0x00, 0x0F, 0xFF, 0xFF, 0x4C, 0x00, 0x31, 0x88, 0x7F, 0x00, 0x22, 0xFF, 0xFF, + 0x3D, 0x00, 0x1D, 0x03, 0x51, 0xFF, 0x5F, 0x89, 0x92, 0x44, 0x09, 0x00, 0x50, 0xFC, 0xFF, 0xFF, + 0xFF, 0x5A, 0x09, 0x00, 0x50, 0x93, 0x10, 0xAF, 0xFF, 0xCD, 0x09, 0x00, 0x70, 0x3C, 0x00, 0x5D, + 0xFF, 0xFC, 0x03, 0x23, 0x09, 0x00, 0xF0, 0x04, 0x52, 0xFF, 0xFF, 0x09, 0x13, 0xFF, 0xFF, 0x42, + 0x00, 0x57, 0xFF, 0xF6, 0x01, 0x00, 0xDB, 0xFF, 0x74, 0x00, 0x86, 0xFF, 0x05, 0x50, 0x68, 0xFF, + 0xF5, 0xA9, 0xF7, 0x16, 0x02, 0x51, 0x01, 0x73, 0xE1, 0xFD, 0xDD, 0xE0, 0x05, 0x13, 0x09, 0xB8, + 0x03, 0x11, 0x53, 0xFF, 0x00, 0x80, 0x9E, 0x36, 0xA4, 0xA4, 0xA4, 0xE8, 0xFF, 0x91, 0x12, 0x00, + 0x11, 0xE1, 0x6F, 0x03, 0x40, 0x19, 0xFF, 0xFF, 0x26, 0xE3, 0x19, 0x00, 0xB5, 0x04, 0x50, 0x00, + 0x00, 0x88, 0xFF, 0xB8, 0x1B, 0x00, 0x30, 0xBF, 0xFF, 0x82, 0x7F, 0x08, 0x11, 0xF4, 0xC8, 0x06, + 0xA0, 0x2F, 0xFF, 0xFF, 0x15, 0x00, 0x00, 0x00, 0x66, 0xFF, 0xDE, 0x1B, 0x00, 0x10, 0x9E, 0x15, + 0x05, 0x40, 0x00, 0x00, 0xD6, 0xFF, 0xAF, 0x14, 0x10, 0x10, 0x45, 0x02, 0x00, 0x9C, 0x01, 0x29, + 0xFB, 0x09, 0x6C, 0x01, 0x60, 0x0C, 0x95, 0xE9, 0xF8, 0xCB, 0x44, 0x2D, 0x00, 0xF0, 0x1D, 0xE9, + 0xBE, 0xFF, 0xF9, 0x22, 0x06, 0xF6, 0xFF, 0x4B, 0x01, 0xD1, 0xFF, 0x77, 0x1C, 0xFF, 0xFF, 0x23, + 0x00, 0xA7, 0xFF, 0x98, 0x0C, 0xFE, 0xFF, 0x33, 0x00, 0xB6, 0xFF, 0x86, 0x00, 0xB9, 0xFF, 0x8B, + 0x1A, 0xF1, 0xFF, 0x39, 0x00, 0x20, 0xF1, 0xFF, 0xFF, 0xFF, 0x92, 0x7F, 0x00, 0xF0, 0x0F, 0xE7, + 0xB9, 0xFF, 0xE8, 0x1F, 0x1A, 0xFD, 0xFF, 0x36, 0x00, 0xB5, 0xFF, 0x97, 0x4C, 0xFF, 0xFB, 0x03, + 0x00, 0x7D, 0xFF, 0xCF, 0x4D, 0xFF, 0xF8, 0x01, 0x00, 0x7A, 0xFF, 0xD1, 0x28, 0xAC, 0x00, 0xF6, + 0x03, 0xA8, 0xFF, 0xAB, 0x01, 0xC2, 0xFF, 0xDC, 0xAE, 0xFF, 0xFF, 0x48, 0x00, 0x16, 0xA4, 0xEF, + 0xFC, 0xD4, 0x5D, 0x78, 0x00, 0x60, 0x05, 0x8A, 0xE5, 0xF8, 0xCA, 0x44, 0x0C, 0x03, 0xF0, 0x0A, + 0xEA, 0xB9, 0xFF, 0xFB, 0x2E, 0x0A, 0xF6, 0xFF, 0x52, 0x00, 0xB8, 0xFF, 0x9D, 0x34, 0xFF, 0xFF, + 0x20, 0x00, 0x84, 0xFF, 0xD2, 0x46, 0xFF, 0xFF, 0x19, 0x38, 0x04, 0x10, 0x3E, 0x10, 0x04, 0xD0, + 0x7C, 0xFF, 0xE4, 0x13, 0xFD, 0xFF, 0x72, 0x0F, 0xBD, 0xFF, 0xE4, 0x00, 0x9C, 0x5F, 0x07, 0x83, + 0xFF, 0xE4, 0x00, 0x05, 0x69, 0x9F, 0x81, 0x8E, 0xE4, 0x01, 0xF1, 0x17, 0x7E, 0xFF, 0xE1, 0x1A, + 0xA0, 0xA0, 0x14, 0x00, 0x8F, 0xFF, 0xCD, 0x10, 0xFE, 0xFF, 0x4C, 0x04, 0xCA, 0xFF, 0x99, 0x00, + 0xB6, 0xFF, 0xFB, 0xE8, 0xFF, 0xFC, 0x31, 0x00, 0x14, 0xA1, 0xEC, 0xFC, 0xD4, 0x50, 0x00, 0x04, + 0x03, 0x09, 0x30, 0x04, 0x95, 0x95, 0x9C, 0x2C, 0xF4, 0xFF, 0x48, 0x04, 0x04, 0x02, 0x22, 0x05, + 0x06, 0x12, 0x00, 0x40, 0x04, 0x03, 0x0C, 0x01, 0xD4, 0x08, 0x86, 0xF5, 0xFC, 0x47, 0xF8, 0xFF, + 0x48, 0x2B, 0x2C, 0x2D, 0x0D, 0xF6, 0x06, 0x23, 0x24, 0x0C, 0xF8, 0xFF, 0x54, 0xF8, 0xFF, 0x54, + 0x07, 0xDB, 0x42, 0xA9, 0xCC, 0x08, 0x15, 0x02, 0x00, 0x07, 0x06, 0x0B, 0xE2, 0x0A, 0x00, 0xBF, + 0x08, 0xF0, 0x1E, 0x01, 0x66, 0x89, 0x00, 0x00, 0x16, 0xB2, 0xFF, 0x94, 0x00, 0x4B, 0xE9, 0xFF, + 0xC8, 0x23, 0x5F, 0xFF, 0xFD, 0x82, 0x05, 0x00, 0x7C, 0xFF, 0x94, 0x01, 0x00, 0x00, 0x4F, 0xFA, + 0xFF, 0xA8, 0x10, 0x00, 0x00, 0x30, 0xD4, 0xFF, 0xE0, 0x37, 0x00, 0x00, 0x09, 0x90, 0xFF, 0x94, + 0x35, 0x00, 0x24, 0x45, 0x79, 0xED, 0x17, 0x00, 0x70, 0x06, 0x00, 0xE0, 0x05, 0x10, 0x03, 0xE0, + 0x05, 0x31, 0x9C, 0x31, 0x04, 0x0E, 0x04, 0x11, 0x50, 0xE2, 0x05, 0x2F, 0x04, 0x02, 0x15, 0x00, + 0x02, 0x00, 0x34, 0x00, 0x02, 0x80, 0x00, 0x12, 0x02, 0xFF, 0x05, 0x31, 0x0C, 0xC4, 0x21, 0x07, + 0x00, 0xB0, 0xFF, 0xF2, 0x5F, 0x01, 0x00, 0x00, 0x01, 0x6B, 0xF7, 0xFF, 0xAB, 0x7C, 0x17, 0x40, + 0x2A, 0xD0, 0xFF, 0xE6, 0x9D, 0x00, 0xF0, 0x07, 0x1C, 0xED, 0xFF, 0x08, 0x00, 0x00, 0x47, 0xE8, + 0xFF, 0xD1, 0x04, 0x03, 0x8D, 0xFF, 0xFE, 0x89, 0x07, 0x00, 0x0C, 0xFF, 0xE1, 0x3F, 0x31, 0x00, + 0x24, 0xA2, 0x0F, 0x72, 0x18, 0x03, 0xA0, 0x17, 0x04, 0xA0, 0x01, 0xF1, 0x17, 0x2D, 0xB9, 0xF2, + 0xF4, 0xC2, 0x3F, 0x00, 0x09, 0xE7, 0xFF, 0xD3, 0xC5, 0xFF, 0xF9, 0x28, 0x36, 0xFF, 0xFE, 0x0E, + 0x01, 0xC9, 0xFF, 0x87, 0x2A, 0xFF, 0xF7, 0x07, 0x00, 0xA7, 0xFF, 0xA6, 0x05, 0x33, 0x06, 0x00, + 0x01, 0xD6, 0xFF, 0x39, 0x0F, 0x40, 0x3F, 0xFF, 0xFF, 0x3B, 0x4A, 0x06, 0x30, 0xD8, 0xFF, 0xAD, + 0x35, 0x05, 0x41, 0xB6, 0xFF, 0xD5, 0x10, 0x66, 0x06, 0x21, 0xD8, 0x19, 0xCD, 0x13, 0x02, 0xEF, + 0x00, 0x41, 0x00, 0x47, 0x88, 0x4F, 0x08, 0x00, 0x21, 0x16, 0x24, 0x17, 0x00, 0x47, 0x00, 0x98, + 0xFF, 0xB0, 0x08, 0x00, 0x22, 0x10, 0x10, 0xD4, 0x07, 0x01, 0x85, 0x00, 0x82, 0x3C, 0x9D, 0xD4, + 0xF6, 0xF6, 0xD2, 0x89, 0x15, 0x0E, 0x00, 0xB1, 0x0D, 0xA0, 0xFF, 0xFF, 0xD5, 0xAB, 0xB1, 0xE6, + 0xFF, 0xED, 0x3B, 0xA2, 0x00, 0x40, 0xC4, 0xFF, 0xC4, 0x29, 0x2E, 0x01, 0x41, 0x6D, 0xFC, 0xEB, + 0x18, 0xAA, 0x04, 0x13, 0xB7, 0x6E, 0x0C, 0x10, 0x76, 0x98, 0x02, 0xF2, 0x85, 0x15, 0xF6, 0xF6, + 0x18, 0x00, 0x24, 0xB7, 0xF4, 0xA0, 0xFC, 0xAF, 0x05, 0xE3, 0xEC, 0x02, 0x00, 0x6D, 0xFF, 0x92, + 0x00, 0x15, 0xE6, 0xFF, 0xCF, 0xD5, 0xFF, 0x8B, 0x00, 0x96, 0xFF, 0x23, 0x00, 0xAD, 0xFF, 0x3F, + 0x00, 0x93, 0xFF, 0xA9, 0x02, 0x92, 0xFF, 0x65, 0x00, 0x70, 0xFF, 0x37, 0x00, 0xDA, 0xFF, 0x0D, + 0x07, 0xF2, 0xFF, 0x1E, 0x00, 0xB6, 0xFF, 0x3F, 0x00, 0x6C, 0xFF, 0x34, 0x01, 0xFA, 0xEA, 0x00, + 0x35, 0xFF, 0xDD, 0x00, 0x00, 0xDA, 0xFF, 0x19, 0x00, 0x8D, 0xFF, 0x1A, 0x06, 0xFF, 0xDF, 0x00, + 0x4B, 0xFF, 0xCD, 0x00, 0x05, 0xFA, 0xF3, 0x01, 0x02, 0xD6, 0xDE, 0x01, 0x01, 0xFA, 0xEB, 0x00, + 0x38, 0xFF, 0xF7, 0x33, 0x7C, 0xFF, 0xD9, 0x00, 0x6C, 0xFF, 0x79, 0x00, 0x00, 0xDE, 0xFF, 0x14, + 0x06, 0xE2, 0xFF, 0xFF, 0xF5, 0xF6, 0xFA, 0xC3, 0xFF, 0xD5, 0x0A, 0x00, 0x00, 0x9D, 0xFF, 0x64, + 0x00, 0x30, 0xBF, 0xD7, 0x57, 0x6C, 0xF2, 0xF4, 0xA6, 0x16, 0x00, 0x00, 0x00, 0x3A, 0xFF, 0xE1, + 0x11, 0xE9, 0x01, 0x03, 0x65, 0x01, 0x41, 0x9F, 0xFF, 0xD4, 0x37, 0x10, 0x00, 0x13, 0x0C, 0x65, + 0x06, 0x94, 0x9B, 0xFF, 0xFF, 0xDA, 0xAE, 0xA4, 0xBC, 0xE8, 0x9A, 0xFF, 0x00, 0xA8, 0x3B, 0xA0, + 0xD8, 0xFA, 0xFC, 0xE0, 0xBA, 0x68, 0x00, 0x00, 0xF0, 0x0B, 0x41, 0x06, 0xF5, 0xFC, 0xD2, 0x09, + 0x00, 0x53, 0x31, 0xFF, 0xFF, 0xFD, 0x0B, 0xBE, 0x09, 0x01, 0xD4, 0x03, 0x41, 0x00, 0x97, 0xFF, + 0xEE, 0xB1, 0x0B, 0x41, 0x00, 0xCA, 0xFF, 0xA0, 0x6B, 0x0A, 0x61, 0x06, 0xF9, 0xFF, 0x4D, 0xFF, + 0xD3, 0x2C, 0x00, 0x50, 0xEC, 0x0E, 0xFF, 0xFD, 0x0A, 0x2C, 0x00, 0x50, 0xC3, 0x00, 0xE4, 0xFF, + 0x39, 0x2C, 0x00, 0x50, 0x99, 0x00, 0xBA, 0xFF, 0x6C, 0x2C, 0x00, 0x00, 0xB8, 0x04, 0x10, 0x9F, + 0x2C, 0x00, 0x50, 0xB9, 0xA4, 0xC4, 0xFF, 0xD2, 0x58, 0x00, 0xF1, 0x09, 0x1B, 0x00, 0x3C, 0xFF, + 0xFC, 0x09, 0x64, 0xFF, 0xF0, 0x01, 0x00, 0x11, 0xFF, 0xFF, 0x38, 0x97, 0xFF, 0xC5, 0x00, 0x00, + 0x00, 0xE6, 0xFF, 0x6B, 0x30, 0x04, 0x01, 0xC0, 0x00, 0xF0, 0x09, 0xF5, 0xFC, 0xFC, 0xFA, 0xE5, + 0xA4, 0x21, 0x00, 0xF8, 0xFF, 0xD5, 0xAB, 0xE4, 0xFF, 0xE0, 0x0A, 0xF8, 0xFF, 0x88, 0x00, 0x0D, + 0xED, 0xFF, 0x4D, 0x08, 0x00, 0x41, 0x00, 0xC5, 0xFF, 0x6D, 0x08, 0x00, 0xC0, 0xD8, 0xFF, 0x5B, + 0xF8, 0xFF, 0x88, 0x03, 0x52, 0xFF, 0xF3, 0x18, 0xF8, 0xB7, 0x02, 0x20, 0xE9, 0x3C, 0x30, 0x00, + 0x50, 0xA9, 0xE5, 0xFF, 0xCF, 0x17, 0x20, 0x00, 0x41, 0x0A, 0xE2, 0xFF, 0x8E, 0x28, 0x00, 0x31, + 0x9F, 0xFF, 0xCB, 0x08, 0x00, 0x30, 0x99, 0xFF, 0xD2, 0x08, 0x00, 0xC0, 0x03, 0xD5, 0xFF, 0xA9, + 0xF8, 0xFF, 0xD2, 0x9F, 0xD6, 0xFF, 0xFE, 0x3E, 0x38, 0x00, 0x36, 0xF7, 0xC8, 0x4B, 0x00, 0x01, + 0x70, 0x04, 0x7A, 0xD8, 0xF8, 0xED, 0xB2, 0x25, 0x50, 0x02, 0xF1, 0x13, 0xFA, 0xAE, 0xDA, 0xFF, + 0xE0, 0x07, 0x03, 0xEE, 0xFF, 0x86, 0x00, 0x16, 0xFF, 0xFF, 0x48, 0x20, 0xFF, 0xFF, 0x5D, 0x00, + 0x00, 0xFB, 0xFF, 0x6B, 0x2F, 0xFF, 0xFF, 0x58, 0x00, 0x00, 0xF8, 0xFF, 0x70, 0x30, 0x09, 0x00, + 0x32, 0x10, 0x10, 0x07, 0x09, 0x00, 0x00, 0x96, 0x0C, 0x0A, 0x09, 0x00, 0x35, 0x33, 0x34, 0x17, + 0x2D, 0x00, 0xFA, 0x15, 0x21, 0xFF, 0xFF, 0x5E, 0x00, 0x01, 0xFC, 0xFF, 0x69, 0x03, 0xEF, 0xFF, + 0x89, 0x00, 0x1B, 0xFF, 0xFF, 0x43, 0x00, 0x83, 0xFF, 0xFA, 0xAB, 0xD5, 0xFF, 0xDB, 0x04, 0x00, + 0x03, 0x7B, 0xDF, 0xFC, 0xF2, 0xB5, 0x25, 0x00, 0x00, 0x01, 0x31, 0xE4, 0xA7, 0x23, 0xD0, 0x00, + 0x40, 0xE8, 0xFF, 0xE6, 0x0D, 0xB8, 0x00, 0x40, 0x25, 0xFF, 0xFF, 0x63, 0x08, 0x00, 0x41, 0x01, + 0xF8, 0xFF, 0x8C, 0xD0, 0x00, 0x31, 0xF5, 0xFF, 0x98, 0x08, 0x00, 0x1F, 0xF4, 0x08, 0x00, 0x0C, + 0x03, 0x28, 0x00, 0x40, 0x01, 0xFC, 0xFF, 0x88, 0x08, 0x00, 0x20, 0x2C, 0xFF, 0x38, 0x01, 0x60, + 0xD2, 0xA2, 0xE6, 0xFF, 0xE0, 0x09, 0x00, 0x01, 0x65, 0xE9, 0xAC, 0x21, 0x00, 0x07, 0x06, 0x78, + 0x00, 0x91, 0xFC, 0xFC, 0xC9, 0xF8, 0xFF, 0xD5, 0xA4, 0xA4, 0x83, 0x3C, 0x00, 0x1F, 0x00, 0x06, + 0x00, 0x01, 0x41, 0xFF, 0xFC, 0xFC, 0x1C, 0x24, 0x00, 0x1F, 0x12, 0x24, 0x00, 0x07, 0x41, 0xD2, + 0x9C, 0x9C, 0x82, 0x96, 0x01, 0x19, 0xD4, 0x5C, 0x00, 0x11, 0xAE, 0x38, 0x00, 0x1F, 0x71, 0x5C, + 0x00, 0x0A, 0x11, 0x0C, 0x24, 0x00, 0x1E, 0x08, 0x24, 0x00, 0x0E, 0x06, 0x00, 0x05, 0xB8, 0x01, + 0x70, 0x03, 0x77, 0xD8, 0xF9, 0xEE, 0xB3, 0x2C, 0xA8, 0x03, 0xF0, 0x02, 0xFA, 0xB1, 0xD6, 0xFF, + 0xEB, 0x0F, 0x02, 0xEC, 0xFF, 0x87, 0x00, 0x0C, 0xF9, 0xFF, 0x5E, 0x1D, 0xFF, 0xD6, 0x06, 0x41, + 0xE0, 0xFF, 0x85, 0x2D, 0x8B, 0x01, 0x3F, 0x94, 0xAC, 0x5F, 0xAF, 0x01, 0x03, 0x50, 0x20, 0xFC, + 0xFC, 0xFC, 0x9A, 0x09, 0x00, 0x52, 0x15, 0xA4, 0xDF, 0xFF, 0x9C, 0x2D, 0x00, 0xF3, 0x1B, 0xA5, + 0xFF, 0x9C, 0x19, 0xFF, 0xFF, 0x61, 0x00, 0x00, 0xAF, 0xFF, 0x9C, 0x01, 0xE6, 0xFF, 0x90, 0x00, + 0x05, 0xE2, 0xFF, 0x9C, 0x00, 0x80, 0xFF, 0xFC, 0xAF, 0xCB, 0xF6, 0xFF, 0x9C, 0x00, 0x05, 0x82, + 0xE4, 0xFD, 0xD0, 0x49, 0xFF, 0x9C, 0x00, 0x00, 0x0A, 0xB8, 0x01, 0xFF, 0x01, 0xF1, 0xFC, 0x8E, + 0x00, 0x00, 0xA2, 0xFC, 0xD9, 0xF4, 0xFF, 0x90, 0x00, 0x00, 0xA4, 0xFF, 0xDC, 0x08, 0x00, 0x0F, + 0x40, 0xFF, 0xFC, 0xFC, 0xFF, 0x08, 0x00, 0x4E, 0xD8, 0xA4, 0xA4, 0xDF, 0x30, 0x00, 0x0F, 0x08, + 0x00, 0x0D, 0x22, 0x05, 0x03, 0x78, 0x00, 0x6F, 0xE1, 0xFC, 0x92, 0xE4, 0xFF, 0x94, 0x03, 0x00, + 0x11, 0x44, 0x00, 0x00, 0x06, 0x05, 0xEC, 0x03, 0x85, 0xFC, 0xFC, 0x7E, 0x00, 0x00, 0xFF, 0xFF, + 0x7F, 0x05, 0x00, 0x1A, 0x7E, 0x05, 0x00, 0x15, 0x7D, 0x05, 0x00, 0x12, 0x7C, 0x05, 0x00, 0x40, + 0x02, 0xFF, 0xFF, 0x7B, 0xFE, 0x07, 0xA9, 0x6C, 0xA9, 0xF4, 0xFF, 0xFF, 0x30, 0xD8, 0xFD, 0xE3, + 0x70, 0xB4, 0x02, 0x51, 0x86, 0x00, 0x0B, 0xEB, 0xFC, 0x9C, 0x03, 0xB0, 0x6A, 0xFF, 0xF4, 0x10, + 0xF8, 0xFF, 0x88, 0x02, 0xDB, 0xFF, 0x98, 0xAA, 0x01, 0x40, 0x4F, 0xFF, 0xFF, 0x2D, 0x08, 0x00, + 0x30, 0xC1, 0xFF, 0xC0, 0xBA, 0x01, 0x11, 0xBC, 0xA8, 0x0A, 0x01, 0x1E, 0x02, 0x10, 0x1E, 0x08, + 0x00, 0x20, 0xEF, 0xEF, 0x5E, 0x0A, 0x70, 0xF8, 0xFF, 0x91, 0x98, 0xFF, 0xD6, 0x01, 0x28, 0x00, + 0x40, 0x3B, 0xFF, 0xFF, 0x36, 0x08, 0x00, 0x41, 0x01, 0xDD, 0xFF, 0x96, 0xEA, 0x01, 0x43, 0x81, + 0xFF, 0xEF, 0x08, 0x04, 0x03, 0x11, 0x57, 0xFA, 0x01, 0x36, 0xC7, 0xFF, 0xB8, 0x58, 0x02, 0x1E, + 0x86, 0x28, 0x02, 0x0F, 0x06, 0x00, 0x22, 0x42, 0xDF, 0xB8, 0xB8, 0x99, 0xB4, 0x02, 0x22, 0x0C, + 0x0A, 0x5C, 0x00, 0xF0, 0x09, 0xC4, 0xFC, 0xE2, 0x00, 0x00, 0x00, 0x42, 0xFC, 0xFC, 0x5D, 0xCB, + 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x78, 0xFF, 0xFF, 0x62, 0xCF, 0xFF, 0xFF, 0x4D, 0x2D, 0x10, 0xF5, + 0x61, 0xFF, 0x66, 0xD4, 0xFF, 0xFF, 0x81, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0x6B, 0xD8, 0xFF, 0xF4, + 0xB5, 0x00, 0x18, 0xFF, 0xF6, 0xFF, 0x6F, 0xDC, 0xFF, 0xBF, 0xE9, 0x01, 0x4D, 0xFF, 0xC0, 0xFF, + 0x73, 0xE0, 0xFF, 0x85, 0xFF, 0x1D, 0x82, 0xFF, 0x88, 0xFF, 0x77, 0xE5, 0xFF, 0x4C, 0xFF, 0x51, + 0xB7, 0xE4, 0x6B, 0xFF, 0x7C, 0xE9, 0xFF, 0x14, 0xFF, 0x86, 0xED, 0xAF, 0x66, 0xFF, 0x80, 0xED, + 0xFE, 0x00, 0xDC, 0xDA, 0xFF, 0x7A, 0x61, 0xFF, 0x84, 0xF2, 0xFA, 0x00, 0xA7, 0xFF, 0xFF, 0x45, + 0x5D, 0xFF, 0x89, 0xF6, 0xF6, 0x00, 0x72, 0xFF, 0xFF, 0x11, 0x58, 0xFF, 0x8D, 0xFA, 0xF2, 0x00, + 0x3D, 0xFF, 0xDB, 0x00, 0x54, 0xFF, 0x91, 0xFE, 0xEE, 0x00, 0x0B, 0xFD, 0xA6, 0x00, 0x4F, 0xFF, + 0x96, 0x68, 0x01, 0xA0, 0xEA, 0x09, 0x00, 0x00, 0xDD, 0xFC, 0x34, 0xF8, 0xFF, 0x62, 0xD8, 0x02, + 0x52, 0x34, 0xF8, 0xFF, 0xCF, 0x01, 0x08, 0x00, 0x23, 0xFF, 0x3B, 0x08, 0x00, 0x12, 0xA8, 0x08, + 0x00, 0x31, 0xFC, 0xFB, 0x1A, 0x08, 0x00, 0x31, 0xAD, 0xFF, 0x82, 0x08, 0x00, 0x40, 0x47, 0xFE, + 0xE9, 0xE7, 0x08, 0x00, 0x41, 0x28, 0xB3, 0xFF, 0xFF, 0x08, 0x00, 0x13, 0x4A, 0x08, 0x00, 0x22, + 0x03, 0xDF, 0x08, 0x00, 0x23, 0x00, 0x78, 0x08, 0x00, 0x22, 0x16, 0xFA, 0x08, 0x00, 0x55, 0x00, + 0xA5, 0xFF, 0x34, 0x0A, 0x1C, 0x05, 0x60, 0x79, 0xD7, 0xF9, 0xEE, 0xB5, 0x2E, 0x1C, 0x05, 0xF0, + 0x04, 0xFB, 0xB1, 0xD5, 0xFF, 0xF0, 0x18, 0x03, 0xF0, 0xFF, 0x87, 0x00, 0x0B, 0xF2, 0xFF, 0x79, + 0x21, 0xFF, 0xFF, 0x5F, 0x10, 0x12, 0x21, 0xAB, 0x2F, 0x6D, 0x03, 0x4F, 0xD0, 0xFF, 0xBC, 0x30, + 0x09, 0x00, 0x18, 0x20, 0xBB, 0x1F, 0x1C, 0x05, 0xFA, 0x0F, 0x00, 0xD3, 0xFF, 0xAA, 0x02, 0xEC, + 0xFF, 0x85, 0x00, 0x09, 0xF2, 0xFF, 0x79, 0x00, 0x82, 0xFF, 0xF9, 0xA9, 0xCE, 0xFF, 0xF0, 0x18, + 0x00, 0x04, 0x7A, 0xDA, 0xFC, 0xF2, 0xBE, 0x31, 0x1C, 0x05, 0x40, 0xFC, 0xF3, 0xBA, 0x2C, 0x1C, + 0x05, 0x50, 0xA8, 0xDD, 0xFF, 0xE8, 0x0E, 0xBE, 0x01, 0x41, 0x10, 0xF8, 0xFF, 0x59, 0xC6, 0x01, + 0x31, 0xDC, 0xFF, 0x7E, 0x08, 0x00, 0x30, 0xE5, 0xFF, 0x7A, 0x80, 0x02, 0x41, 0x4C, 0xFF, 0xFF, + 0x48, 0xD2, 0x01, 0x30, 0xFF, 0xBA, 0x02, 0x56, 0x04, 0x33, 0x96, 0x57, 0x04, 0xEE, 0x01, 0x1F, + 0x00, 0x08, 0x00, 0x16, 0x23, 0x0A, 0x09, 0x34, 0x08, 0x0C, 0x00, 0x01, 0x14, 0x17, 0x00, 0x01, + 0x1F, 0x78, 0x00, 0x01, 0x3D, 0x13, 0x78, 0x00, 0x01, 0x11, 0xF1, 0x00, 0x01, 0x42, 0xFD, 0xFF, + 0xFA, 0x3A, 0x82, 0x01, 0x32, 0x90, 0xFF, 0xAA, 0x32, 0x10, 0x43, 0x04, 0xAC, 0xF7, 0x09, 0xF9, + 0x04, 0x2A, 0x4D, 0x00, 0x1C, 0x01, 0x40, 0xF9, 0xE3, 0xA6, 0x27, 0x1C, 0x01, 0x50, 0xAA, 0xE8, + 0xFF, 0xEB, 0x15, 0xC4, 0x00, 0x41, 0x16, 0xFB, 0xFF, 0x69, 0xCC, 0x00, 0x12, 0xD6, 0x38, 0x06, + 0xC2, 0x01, 0xE5, 0xFF, 0x82, 0xF8, 0xFF, 0x88, 0x07, 0x64, 0xFF, 0xFF, 0x50, 0x1C, 0x01, 0x90, + 0xB6, 0x04, 0xF8, 0xFF, 0xD5, 0xC0, 0xFF, 0xFA, 0x0A, 0xF4, 0x00, 0x41, 0x20, 0xFF, 0xFF, 0x45, + 0xFC, 0x00, 0x31, 0xDE, 0xFF, 0x8D, 0x08, 0x00, 0x31, 0x9C, 0xFF, 0xD5, 0x08, 0x00, 0x40, 0x5A, + 0xFF, 0xFF, 0x1D, 0x08, 0x00, 0x43, 0x19, 0xFF, 0xFF, 0x64, 0x50, 0x00, 0x15, 0xAC, 0xC8, 0x09, + 0xF0, 0x01, 0x16, 0xA1, 0xEB, 0xF7, 0xCC, 0x49, 0x00, 0x01, 0xC8, 0xFF, 0xDA, 0xB4, 0xFF, 0xFA, + 0x27, 0x2F, 0xDA, 0x03, 0x40, 0xAE, 0xFF, 0x87, 0x4A, 0x68, 0x0B, 0x70, 0x76, 0xD2, 0x72, 0x2D, + 0xFF, 0xFF, 0xB1, 0x22, 0x0A, 0x50, 0x02, 0xD0, 0xFF, 0xFF, 0xB6, 0x92, 0x08, 0x50, 0x26, 0xE8, + 0xFF, 0xFF, 0xCA, 0x78, 0x16, 0x50, 0x23, 0xDB, 0xFF, 0xFF, 0xC9, 0x5A, 0x09, 0xF3, 0x1F, 0x16, + 0xCC, 0xFF, 0xFF, 0x74, 0x02, 0x2A, 0x52, 0x00, 0x11, 0xE5, 0xFF, 0xD0, 0x44, 0xFF, 0xF5, 0x03, + 0x00, 0x89, 0xFF, 0xED, 0x15, 0xFD, 0xFF, 0x43, 0x00, 0x88, 0xFF, 0xD1, 0x00, 0xA1, 0xFF, 0xEF, + 0xA8, 0xF5, 0xFF, 0x67, 0x00, 0x09, 0x8B, 0xE4, 0xFE, 0xDC, 0x6D, 0x01, 0x07, 0x78, 0x00, 0x11, + 0xED, 0xC4, 0x0C, 0xD3, 0xFC, 0x1C, 0x9A, 0xA4, 0xDE, 0xFF, 0xF5, 0xA4, 0xA4, 0x12, 0x00, 0x00, + 0xA0, 0xEE, 0x0D, 0x0F, 0x08, 0x00, 0x43, 0x04, 0x0C, 0x03, 0xA1, 0x14, 0xFC, 0xFC, 0x5B, 0x00, + 0x00, 0xC5, 0xFC, 0xA6, 0x14, 0xC4, 0x01, 0x3F, 0xC8, 0xFF, 0xA8, 0x09, 0x00, 0x2C, 0x11, 0x13, + 0x09, 0x00, 0xF7, 0x17, 0xC9, 0xFF, 0xA6, 0x06, 0xFF, 0xFF, 0x63, 0x00, 0x00, 0xCF, 0xFF, 0x96, + 0x00, 0xD6, 0xFF, 0x95, 0x00, 0x0D, 0xF5, 0xFF, 0x68, 0x00, 0x6D, 0xFF, 0xFE, 0xAE, 0xD3, 0xFF, + 0xED, 0x14, 0x00, 0x02, 0x74, 0xDB, 0xFB, 0xF3, 0xBC, 0x32, 0xF8, 0x06, 0xF0, 0x1B, 0x81, 0xFC, + 0xB1, 0x00, 0x00, 0x01, 0xEE, 0xFC, 0x4E, 0x51, 0xFF, 0xE2, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0x1C, + 0x1E, 0xFF, 0xFF, 0x13, 0x00, 0x4D, 0xFF, 0xE9, 0x01, 0x01, 0xEC, 0xFF, 0x42, 0x00, 0x7A, 0xFF, + 0xB6, 0x00, 0x00, 0xB9, 0xFF, 0x71, 0x00, 0xA7, 0xC0, 0x0D, 0xF0, 0x01, 0x86, 0xFF, 0xA1, 0x00, + 0xD4, 0xFF, 0x4F, 0x00, 0x00, 0x53, 0xFF, 0xD0, 0x07, 0xFC, 0xFF, 0x1C, 0x32, 0x00, 0x40, 0xFA, + 0x35, 0xFF, 0xE9, 0xCC, 0x0B, 0x41, 0xED, 0xFF, 0x8B, 0xFF, 0xBE, 0x11, 0x31, 0xBA, 0xFF, 0xE5, + 0xEC, 0x0D, 0x51, 0x00, 0x87, 0xFF, 0xFF, 0xFF, 0x4C, 0x0B, 0x30, 0x54, 0xFF, 0xFF, 0x2C, 0x00, + 0x41, 0x00, 0x00, 0x21, 0xFF, 0x2C, 0x00, 0x00, 0x72, 0x00, 0x02, 0x2C, 0x00, 0x32, 0x00, 0x0C, + 0x0C, 0x88, 0x00, 0xF0, 0x0E, 0x5E, 0xFC, 0xB9, 0x00, 0x00, 0xCE, 0xFB, 0x0B, 0x00, 0x7B, 0xFC, + 0x90, 0x3B, 0xFF, 0xDB, 0x00, 0x03, 0xF8, 0xFF, 0x33, 0x00, 0x9C, 0xFF, 0x6E, 0x17, 0xFF, 0xFA, + 0x02, 0x24, 0x39, 0x09, 0xF0, 0x15, 0xBC, 0xFF, 0x4A, 0x01, 0xF3, 0xFF, 0x1B, 0x4E, 0xFF, 0xFF, + 0x88, 0x00, 0xDC, 0xFF, 0x26, 0x00, 0xCF, 0xFF, 0x3B, 0x77, 0xFF, 0xFC, 0xB2, 0x02, 0xFA, 0xFD, + 0x06, 0x00, 0xAB, 0xFF, 0x5A, 0xA1, 0xFA, 0xC2, 0xDD, 0x1B, 0x4F, 0x0E, 0xF0, 0x07, 0x87, 0xFF, + 0x7A, 0xCB, 0xD3, 0x94, 0xFE, 0x45, 0xFF, 0xBA, 0x00, 0x00, 0x63, 0xFF, 0x9B, 0xF4, 0xA8, 0x69, + 0xFF, 0x8C, 0xFF, 0x96, 0xFD, 0x0B, 0x90, 0xD8, 0xFF, 0x7E, 0x3F, 0xFF, 0xD7, 0xFF, 0x72, 0x00, + 0x3D, 0x09, 0x50, 0xFF, 0x53, 0x14, 0xFF, 0xFF, 0x35, 0x16, 0x20, 0x02, 0xF6, 0xC2, 0x11, 0x41, + 0xEA, 0xFF, 0xFF, 0x2A, 0x91, 0x16, 0x60, 0xFA, 0x05, 0x00, 0xBF, 0xFF, 0xFE, 0x24, 0x03, 0x60, + 0xAF, 0xFF, 0xD4, 0x00, 0x00, 0x95, 0x16, 0x01, 0x50, 0x00, 0x00, 0x8B, 0xFF, 0xA9, 0x6D, 0x0F, + 0x43, 0xBE, 0x00, 0x00, 0x08, 0x38, 0x01, 0xF0, 0x00, 0x8B, 0xFC, 0xC9, 0x00, 0x00, 0x40, 0xFC, + 0xE7, 0x06, 0x27, 0xFF, 0xFF, 0x35, 0x00, 0x9B, 0x4E, 0x07, 0x70, 0xBD, 0xFF, 0x9F, 0x07, 0xEF, + 0xFF, 0x30, 0xEF, 0x00, 0x40, 0xF7, 0x61, 0xFF, 0xCF, 0x70, 0x0D, 0x32, 0xE7, 0xFF, 0xF4, 0xCB, + 0x12, 0x41, 0x83, 0xFF, 0xFF, 0xFA, 0x25, 0x19, 0x21, 0x2B, 0xFF, 0x7D, 0x0C, 0x41, 0x00, 0x00, + 0x67, 0xFF, 0x0C, 0x17, 0x00, 0x89, 0x06, 0x20, 0xFF, 0xFA, 0x2F, 0x10, 0x40, 0x27, 0xFF, 0xF3, + 0xE1, 0xA9, 0x0B, 0xF0, 0x0F, 0x00, 0x86, 0xFF, 0x9F, 0x78, 0xFF, 0xDF, 0x03, 0x00, 0x03, 0xE4, + 0xFF, 0x43, 0x16, 0xF9, 0xFF, 0x4A, 0x00, 0x45, 0xFF, 0xE4, 0x03, 0x00, 0xA4, 0xFF, 0xB3, 0x00, + 0xA5, 0xFF, 0x8A, 0xA9, 0x0B, 0x26, 0xFE, 0x1F, 0x88, 0x00, 0xF0, 0x09, 0xAD, 0xFC, 0xA4, 0x00, + 0x00, 0x50, 0xFC, 0xF0, 0x08, 0x5E, 0xFF, 0xEF, 0x05, 0x00, 0x9B, 0xFF, 0xAA, 0x00, 0x11, 0xFB, + 0xFF, 0x41, 0x01, 0xE5, 0x7D, 0x08, 0x70, 0xB8, 0xFF, 0x8F, 0x30, 0xFF, 0xF9, 0x0E, 0x90, 0x15, + 0x30, 0xDE, 0x7B, 0xFF, 0x1A, 0x2D, 0x61, 0x16, 0xFD, 0xFF, 0xE4, 0xFF, 0x62, 0x55, 0x13, 0x31, + 0xFF, 0xFF, 0xFD, 0x91, 0x00, 0x42, 0x6D, 0xFF, 0xFF, 0xBE, 0x53, 0x11, 0x32, 0xFF, 0xFF, 0x71, + 0x5B, 0x0D, 0x01, 0x4A, 0x02, 0x0F, 0x09, 0x00, 0x14, 0x04, 0xC4, 0x13, 0x11, 0x38, 0x47, 0x03, + 0xD1, 0xCD, 0x24, 0xA4, 0xA4, 0xA4, 0xEF, 0xFF, 0xB2, 0x00, 0x00, 0x00, 0x11, 0xFA, 0x22, 0x00, + 0x30, 0x61, 0xFF, 0xF7, 0x21, 0x00, 0x11, 0xB7, 0xF6, 0x00, 0x40, 0x13, 0xFB, 0xFF, 0x56, 0x0A, + 0x16, 0x31, 0xFF, 0xF4, 0x0B, 0x28, 0x02, 0x00, 0xF7, 0x0F, 0x21, 0x15, 0xFC, 0xD2, 0x13, 0x30, + 0x66, 0xFF, 0xF1, 0x75, 0x01, 0x32, 0xBC, 0xFF, 0xA1, 0xA7, 0x00, 0x11, 0x4A, 0x13, 0x11, 0x61, + 0xFF, 0xA2, 0x9C, 0x9C, 0x82, 0x68, 0x63, 0x04, 0x10, 0xD4, 0x60, 0x14, 0x02, 0x48, 0x05, 0x10, + 0x05, 0x6B, 0x00, 0x90, 0x14, 0x05, 0xFF, 0xFF, 0xA7, 0xA4, 0x0D, 0x05, 0xFF, 0x32, 0x0E, 0x02, + 0x06, 0x00, 0x1F, 0x06, 0x06, 0x00, 0x04, 0x1F, 0x07, 0x06, 0x00, 0x04, 0x1F, 0x08, 0x06, 0x00, + 0x01, 0x41, 0xA3, 0xA0, 0x0A, 0x08, 0xBA, 0x14, 0x06, 0xDC, 0x00, 0x31, 0x40, 0xFC, 0x5A, 0xEB, + 0x00, 0x21, 0xF5, 0xA2, 0x0F, 0x00, 0x32, 0xB4, 0xE8, 0x02, 0x39, 0x01, 0x00, 0x54, 0x06, 0x41, + 0x00, 0x26, 0xFF, 0x78, 0xD1, 0x02, 0x21, 0xDE, 0xC0, 0x1D, 0x00, 0x21, 0x97, 0xFB, 0x8E, 0x0F, + 0x12, 0x50, 0xF9, 0x02, 0x31, 0x0E, 0xFB, 0x96, 0x16, 0x00, 0x21, 0xC1, 0xDE, 0xF6, 0x02, 0x20, + 0x7A, 0xFF, 0xA3, 0x0B, 0x22, 0x00, 0x33, 0x05, 0x0D, 0x22, 0x02, 0xEA, 0xAD, 0x2E, 0x20, 0xA4, + 0xF5, 0xC2, 0x00, 0x03, 0x2C, 0x16, 0x80, 0x9E, 0xFC, 0xFC, 0xFC, 0x77, 0x67, 0xA4, 0xDB, 0x56, + 0x00, 0x1F, 0x98, 0x05, 0x00, 0x2B, 0x81, 0x64, 0xA0, 0xD9, 0xFF, 0x78, 0xA0, 0xFF, 0xFF, 0xA1, + 0x00, 0x24, 0x08, 0x08, 0x2C, 0x16, 0x31, 0x4D, 0xFC, 0xFC, 0x28, 0x15, 0x21, 0xBB, 0xFF, 0x83, + 0x0D, 0x60, 0x29, 0xFF, 0xB9, 0xD2, 0xF9, 0x16, 0xEA, 0x02, 0xF1, 0x09, 0x5D, 0x76, 0xFF, 0x7D, + 0x00, 0x0F, 0xF4, 0xF5, 0x0C, 0x1D, 0xFE, 0xE7, 0x06, 0x2C, 0x84, 0x61, 0x00, 0x00, 0x6E, 0x84, + 0x21, 0x06, 0x07, 0x02, 0x98, 0x00, 0x11, 0xA0, 0x01, 0x00, 0x33, 0x0A, 0xFF, 0xFF, 0x1C, 0x01, + 0x31, 0x05, 0x05, 0x04, 0xF0, 0x27, 0xF0, 0x00, 0x04, 0xC8, 0xFC, 0x61, 0x00, 0x00, 0x2A, 0xF8, + 0xB7, 0x00, 0x00, 0x00, 0x73, 0xFB, 0x12, 0x26, 0x16, 0x42, 0x01, 0x08, 0x08, 0x0A, 0xD4, 0x05, + 0xE0, 0x24, 0xAF, 0xF1, 0xF1, 0xA7, 0x10, 0x00, 0x01, 0xCF, 0xFF, 0xC9, 0xE5, 0xFF, 0x8D, 0xFE, + 0x03, 0xA1, 0x17, 0x70, 0xFF, 0xD3, 0x00, 0x14, 0x5C, 0x5C, 0x03, 0x70, 0x0E, 0x05, 0x21, 0x40, + 0xBF, 0xB6, 0x13, 0xF4, 0x18, 0x7C, 0xFF, 0xD2, 0x87, 0xFF, 0xE0, 0x00, 0x22, 0xFF, 0xFD, 0x1E, + 0x64, 0xFF, 0xE0, 0x00, 0x4F, 0xFF, 0xEF, 0x02, 0x6B, 0xFF, 0xE1, 0x00, 0x2A, 0xFF, 0xFF, 0xB7, + 0xE4, 0xFF, 0xEB, 0x00, 0x00, 0x7D, 0xF3, 0xDB, 0x51, 0xFF, 0xFE, 0x05, 0x2C, 0x06, 0x41, 0x18, + 0xFC, 0xFC, 0x3C, 0x08, 0x00, 0x2F, 0xFF, 0xFF, 0x08, 0x00, 0x05, 0x40, 0x88, 0xD4, 0xF0, 0x70, + 0x08, 0x00, 0xD1, 0xDB, 0xC4, 0xFF, 0xFD, 0x1A, 0x18, 0xFF, 0xFF, 0x3D, 0x09, 0xFB, 0xFF, 0x56, + 0x20, 0x00, 0x31, 0xED, 0xFF, 0x64, 0x08, 0x00, 0x1B, 0xEC, 0x08, 0x00, 0x30, 0xED, 0xFF, 0x63, + 0x08, 0x00, 0xF3, 0x07, 0x07, 0xFB, 0xFF, 0x50, 0x18, 0xFF, 0xFF, 0xCF, 0xBB, 0xFF, 0xFA, 0x15, + 0x18, 0xFF, 0xFF, 0x95, 0xE0, 0xF1, 0x68, 0x00, 0x07, 0x07, 0xD0, 0x00, 0xF1, 0x0D, 0x30, 0xC3, + 0xF6, 0xED, 0xA4, 0x10, 0x03, 0xE0, 0xFF, 0xC8, 0xE3, 0xFF, 0x8C, 0x2F, 0xFF, 0xFF, 0x19, 0x64, + 0xFF, 0xCB, 0x4A, 0xFF, 0xFF, 0x09, 0x44, 0xC4, 0xA3, 0x4C, 0x40, 0x02, 0x13, 0x00, 0x07, 0x00, + 0x00, 0x15, 0x00, 0xF7, 0x09, 0x54, 0xF4, 0xCB, 0x30, 0xFF, 0xFF, 0x18, 0x65, 0xFF, 0xC9, 0x04, + 0xE2, 0xFF, 0xC8, 0xE2, 0xFF, 0x89, 0x00, 0x34, 0xC8, 0xFA, 0xF0, 0xA3, 0x0E, 0xBC, 0x10, 0x61, + 0x00, 0x00, 0x00, 0x2C, 0xFC, 0xFC, 0x14, 0x1F, 0x3E, 0x2C, 0xFF, 0xFF, 0x08, 0x00, 0xF0, 0x04, + 0x4C, 0xE3, 0xE9, 0x9A, 0xFF, 0xFF, 0x28, 0x04, 0xE9, 0xFF, 0xD2, 0xCE, 0xFF, 0xFF, 0x28, 0x2F, + 0xFF, 0xFF, 0x27, 0x18, 0x00, 0x40, 0x46, 0xFF, 0xFF, 0x11, 0x08, 0x00, 0x48, 0x48, 0xFF, 0xFF, + 0x10, 0x08, 0x00, 0x13, 0x47, 0x18, 0x00, 0x40, 0x34, 0xFF, 0xFF, 0x22, 0x08, 0x00, 0x50, 0x06, + 0xF4, 0xFF, 0xCC, 0xC5, 0x48, 0x00, 0x84, 0x5B, 0xE6, 0xED, 0x9C, 0xFF, 0xFF, 0x28, 0x08, 0xC8, + 0x00, 0xF1, 0x03, 0x2D, 0xC1, 0xF6, 0xEE, 0x9F, 0x0B, 0x03, 0xDD, 0xFF, 0xC3, 0xDE, 0xFF, 0x83, + 0x2E, 0xFF, 0xFF, 0x0F, 0x58, 0xC8, 0x00, 0x51, 0x9E, 0xBC, 0xFF, 0xE1, 0x4C, 0xE1, 0x01, 0x10, + 0xE4, 0xC8, 0x00, 0xF4, 0x14, 0x04, 0x04, 0x04, 0x4A, 0xFF, 0xFF, 0x04, 0x2B, 0x88, 0x79, 0x30, + 0xFF, 0xFF, 0x14, 0x60, 0xFF, 0xD5, 0x04, 0xE3, 0xFF, 0xCD, 0xE6, 0xFF, 0x8D, 0x00, 0x35, 0xC7, + 0xF9, 0xEF, 0xA0, 0x0D, 0x00, 0x00, 0x05, 0x06, 0x9C, 0x13, 0xC1, 0xAE, 0xF5, 0xF0, 0x0F, 0x00, + 0x6D, 0xFF, 0xFC, 0xB3, 0x0D, 0x00, 0x98, 0x4F, 0x04, 0x10, 0xA0, 0x2D, 0x11, 0xC2, 0xAE, 0xFF, + 0xFF, 0xFF, 0xFC, 0x10, 0x71, 0xDE, 0xFF, 0xE4, 0xA4, 0x0B, 0x12, 0x00, 0x0F, 0x06, 0x00, 0x17, + 0x00, 0xE0, 0x04, 0x16, 0xFD, 0xBA, 0x12, 0xF0, 0x0A, 0x0F, 0x00, 0x00, 0x2A, 0xBB, 0xF6, 0xE5, + 0x64, 0x86, 0xD4, 0x01, 0x01, 0xD9, 0xFF, 0xC2, 0xE1, 0xFF, 0xDB, 0x68, 0x04, 0x28, 0xFF, 0xF7, + 0x04, 0x57, 0x44, 0x04, 0x50, 0x42, 0xFF, 0xE6, 0x00, 0x44, 0x71, 0x05, 0x50, 0x2F, 0xFF, 0xF4, + 0x04, 0x54, 0x58, 0x15, 0x50, 0x03, 0xD3, 0xFF, 0xBA, 0xDD, 0x79, 0x0C, 0xD1, 0x00, 0x7D, 0xF2, + 0xF8, 0xF3, 0x9D, 0x08, 0x00, 0x00, 0x2C, 0xFE, 0x9B, 0x1B, 0x83, 0x12, 0xF0, 0x06, 0x2C, 0xFA, + 0xFF, 0xFF, 0xFD, 0xDA, 0x73, 0x01, 0x00, 0x02, 0xA8, 0xE9, 0x9E, 0xB9, 0xF2, 0xFF, 0x43, 0x00, + 0x66, 0xFF, 0x84, 0xE7, 0x14, 0xF7, 0x04, 0x6F, 0x00, 0x96, 0xFF, 0xEE, 0xAD, 0xA6, 0xE7, 0xFF, + 0x44, 0x00, 0x20, 0xB0, 0xEC, 0xFF, 0xFD, 0xDA, 0x7C, 0x01, 0x68, 0x12, 0x52, 0x10, 0xFC, 0xFC, + 0x3F, 0x00, 0x9F, 0x14, 0x1F, 0x40, 0x08, 0x00, 0x04, 0x70, 0x6F, 0xB8, 0xF6, 0xB3, 0x03, 0x10, + 0xFF, 0xA0, 0x14, 0xA0, 0xFF, 0x3B, 0x10, 0xFF, 0xFF, 0x43, 0x09, 0xFF, 0xFF, 0x4C, 0x20, 0x00, + 0x1F, 0x04, 0x08, 0x00, 0x20, 0x04, 0xA8, 0x1D, 0x85, 0x08, 0xFC, 0xFC, 0x4B, 0x06, 0xA4, 0xA4, + 0x31, 0xF8, 0x12, 0x7F, 0xFC, 0xFC, 0x47, 0x08, 0xFF, 0xFF, 0x48, 0x04, 0x00, 0x0D, 0x42, 0x04, + 0x05, 0x11, 0xFF, 0x40, 0x01, 0x97, 0xE1, 0xFC, 0x73, 0x00, 0x00, 0x93, 0xA4, 0x4B, 0x00, 0x01, + 0x00, 0x30, 0xDD, 0xFC, 0x6F, 0xFA, 0x0B, 0x1F, 0x70, 0x05, 0x00, 0x16, 0xF6, 0x00, 0x04, 0xEE, + 0xFF, 0x6D, 0x31, 0xD9, 0xFF, 0xFF, 0x37, 0x34, 0xF7, 0xEC, 0x7D, 0x01, 0x00, 0x80, 0x06, 0x53, + 0x18, 0xFC, 0xFC, 0x38, 0x00, 0x75, 0x03, 0x0F, 0x09, 0x00, 0x0A, 0x40, 0x9F, 0xFC, 0xD9, 0x08, + 0x09, 0x00, 0x10, 0x3F, 0xA2, 0x16, 0x71, 0x18, 0xFF, 0xFF, 0x3E, 0xD6, 0xFF, 0xB3, 0x1B, 0x00, + 0x41, 0xB0, 0xFF, 0xF8, 0x22, 0x09, 0x00, 0x41, 0xFF, 0xFF, 0xEF, 0x09, 0x09, 0x00, 0x42, 0xB3, + 0xE3, 0xFF, 0x5D, 0xCE, 0x03, 0x32, 0x89, 0xFF, 0xC3, 0x3F, 0x00, 0x10, 0x2E, 0xA0, 0x07, 0x01, + 0x48, 0x00, 0x32, 0xD2, 0xFF, 0x8F, 0x09, 0x00, 0x40, 0x76, 0xFF, 0xEE, 0x08, 0x90, 0x1A, 0x04, + 0xB8, 0x0A, 0x4F, 0x5B, 0xF8, 0xFF, 0x5C, 0x03, 0x00, 0x11, 0x00, 0x74, 0x08, 0x02, 0x08, 0x03, + 0xF0, 0x09, 0x1C, 0xFC, 0xFC, 0x67, 0xD3, 0xF6, 0x90, 0x39, 0xC7, 0xF7, 0xA6, 0x03, 0x1C, 0xFF, + 0xFF, 0xE9, 0xBB, 0xFF, 0xFF, 0xE9, 0xB4, 0xFF, 0xFF, 0x3C, 0x54, 0x16, 0xFF, 0x05, 0x03, 0xFC, + 0xFF, 0x46, 0x00, 0xDE, 0xFF, 0x5B, 0x1C, 0xFF, 0xFF, 0x18, 0x00, 0xF8, 0xFF, 0x3C, 0x00, 0xD8, + 0xFF, 0x5C, 0x0C, 0x00, 0x35, 0x25, 0x08, 0x08, 0x80, 0x00, 0xFF, 0x07, 0x6F, 0xB7, 0xF6, 0xA1, + 0x01, 0x1C, 0xFF, 0xFF, 0xE3, 0xC4, 0xFF, 0xFF, 0x22, 0x1C, 0xFF, 0xFF, 0x3A, 0x21, 0xFF, 0xFF, + 0x38, 0x1C, 0x04, 0x00, 0x24, 0x05, 0xE0, 0x03, 0x80, 0x2C, 0xBF, 0xF6, 0xED, 0x9D, 0x0D, 0x04, + 0xDF, 0xA8, 0x04, 0xF5, 0x05, 0x96, 0x33, 0xFF, 0xFF, 0x13, 0x5D, 0xFF, 0xE7, 0x4B, 0xFF, 0xFF, + 0x01, 0x4D, 0xFF, 0xFF, 0x4C, 0xFF, 0xFF, 0x00, 0x4C, 0x07, 0x00, 0xF0, 0x0D, 0x4B, 0xFF, 0xFF, + 0x00, 0x4D, 0xFF, 0xFF, 0x34, 0xFF, 0xFF, 0x0F, 0x5D, 0xFF, 0xE8, 0x04, 0xE3, 0xFF, 0xC1, 0xDE, + 0xFF, 0x9B, 0x00, 0x32, 0xC1, 0xF9, 0xEF, 0xA1, 0x10, 0xFC, 0x02, 0x32, 0x0D, 0x00, 0xFD, 0xA8, + 0x00, 0xD0, 0x8D, 0xD8, 0xEF, 0x6D, 0x00, 0x1C, 0xFF, 0xFF, 0xDA, 0xC7, 0xFF, 0xFC, 0x17, 0x58, + 0x1A, 0x40, 0x0B, 0xFD, 0xFF, 0x4F, 0x74, 0x00, 0x41, 0x00, 0xF1, 0xFF, 0x60, 0x08, 0x00, 0x1B, + 0xF0, 0x08, 0x00, 0x31, 0xF1, 0xFF, 0x5F, 0x94, 0x00, 0xF3, 0x05, 0xFD, 0xFF, 0x4C, 0x1C, 0xFF, + 0xFF, 0xCD, 0xBE, 0xFF, 0xF9, 0x12, 0x1C, 0xFF, 0xFF, 0x91, 0xE0, 0xEF, 0x65, 0x00, 0x1C, 0x19, + 0x02, 0x0C, 0x08, 0x00, 0x04, 0x70, 0x00, 0xF0, 0x0D, 0x00, 0x48, 0xE1, 0xE9, 0x95, 0xFC, 0xFC, + 0x30, 0x04, 0xE8, 0xFF, 0xD3, 0xCD, 0xFF, 0xFF, 0x30, 0x30, 0xFF, 0xFF, 0x27, 0x24, 0xFF, 0xFF, + 0x30, 0x43, 0xFF, 0xFF, 0x11, 0x08, 0x00, 0x48, 0x44, 0xFF, 0xFF, 0x10, 0x08, 0x00, 0x04, 0x18, + 0x00, 0x40, 0x30, 0xFF, 0xFF, 0x22, 0x08, 0x00, 0x50, 0x05, 0xF1, 0xFF, 0xCC, 0xC4, 0xF2, 0x1D, + 0x40, 0x59, 0xE6, 0xED, 0x97, 0x08, 0x00, 0x02, 0x07, 0x19, 0x0D, 0x08, 0x00, 0x18, 0x06, 0x1C, + 0x17, 0x60, 0x02, 0x14, 0xFC, 0xFC, 0x6B, 0xCE, 0x8F, 0x0B, 0xA1, 0xFB, 0xB8, 0x79, 0x14, 0xFF, + 0xFF, 0x77, 0x00, 0x00, 0x14, 0xDC, 0x03, 0x0F, 0x06, 0x00, 0x11, 0x16, 0x00, 0x24, 0x06, 0xF1, + 0x16, 0x54, 0xD4, 0xF7, 0xBB, 0x24, 0x00, 0x21, 0xFD, 0xFB, 0xB4, 0xFC, 0xCD, 0x01, 0x5F, 0xFF, + 0xC6, 0x00, 0x8E, 0xD7, 0x15, 0x31, 0xFF, 0xFF, 0x73, 0x0A, 0x01, 0x00, 0x00, 0x93, 0xFF, 0xFF, + 0x8B, 0x02, 0x00, 0x00, 0x02, 0x83, 0x9A, 0x18, 0xF1, 0x0B, 0x0C, 0x08, 0x63, 0xFF, 0xFF, 0x31, + 0x67, 0xF5, 0x63, 0x00, 0xC7, 0xFF, 0x5B, 0x31, 0xFE, 0xF4, 0xAB, 0xFC, 0xFD, 0x20, 0x00, 0x5B, + 0xD7, 0xFB, 0xD1, 0x57, 0x4C, 0x1D, 0x03, 0xD6, 0x17, 0x40, 0xB6, 0xFC, 0x9E, 0x00, 0xCB, 0x09, + 0x14, 0xA0, 0x06, 0x00, 0x01, 0x56, 0x05, 0x78, 0x1C, 0x71, 0xE7, 0xFF, 0xDE, 0xA4, 0x12, 0x18, + 0x00, 0x0F, 0x06, 0x00, 0x00, 0x11, 0xB4, 0x76, 0x09, 0xD4, 0x88, 0xFF, 0xFF, 0xDB, 0x32, 0x00, + 0x17, 0xC6, 0xFC, 0xF5, 0x33, 0x00, 0x00, 0x7C, 0x02, 0xFF, 0x00, 0x2C, 0xFC, 0xFC, 0x24, 0x34, + 0xFC, 0xFC, 0x1C, 0x2C, 0xFF, 0xFF, 0x24, 0x34, 0xFF, 0xFF, 0x08, 0x00, 0x19, 0xA0, 0x2A, 0x37, + 0xFF, 0xFF, 0x1C, 0x19, 0xFF, 0xFF, 0xD0, 0xE7, 0xD6, 0x0B, 0x74, 0x9F, 0xFA, 0xC0, 0x67, 0xFF, + 0xFF, 0x1C, 0x00, 0x01, 0xF0, 0x13, 0xAE, 0xFC, 0x8B, 0x00, 0xA3, 0xFC, 0x92, 0x80, 0xFF, 0xAF, + 0x00, 0xC7, 0xFF, 0x63, 0x4E, 0xFF, 0xD2, 0x00, 0xE8, 0xFF, 0x33, 0x1D, 0xFF, 0xF4, 0x0C, 0xFF, + 0xFB, 0x07, 0x01, 0xEC, 0xFF, 0x43, 0xFF, 0xD1, 0x7A, 0x08, 0x10, 0x88, 0x9F, 0x00, 0x50, 0x89, + 0xFF, 0xCC, 0xFF, 0x6F, 0x55, 0x1B, 0x30, 0xFE, 0xFF, 0x3E, 0xFF, 0x0A, 0x10, 0xFF, 0x2E, 0x1B, + 0x43, 0x02, 0xF3, 0xFF, 0xDC, 0xD0, 0x22, 0x01, 0x50, 0x00, 0xF0, 0x2C, 0x7F, 0xFC, 0x67, 0x00, + 0xD6, 0xF9, 0x06, 0x3A, 0xFC, 0x96, 0x5B, 0xFF, 0x89, 0x07, 0xFC, 0xFF, 0x29, 0x5E, 0xFF, 0x71, + 0x34, 0xFF, 0xAB, 0x2C, 0xFF, 0xFF, 0x50, 0x82, 0xFF, 0x49, 0x0E, 0xFF, 0xCC, 0x55, 0xFF, 0xFE, + 0x76, 0xA6, 0xFF, 0x21, 0x00, 0xE7, 0xED, 0x7E, 0xF1, 0xCD, 0x9D, 0xCB, 0xF8, 0x03, 0x00, 0xC0, + 0xFF, 0xB7, 0xC3, 0xA0, 0xC4, 0xF0, 0xD2, 0xB0, 0x15, 0x40, 0xF7, 0x94, 0x74, 0xF5, 0xF1, 0x1C, + 0x80, 0x72, 0xFF, 0xFF, 0x65, 0x47, 0xFF, 0xFF, 0x83, 0x20, 0x1C, 0x60, 0xFF, 0x36, 0x1B, 0xFF, + 0xFF, 0x5B, 0x03, 0x02, 0x65, 0xFE, 0x0A, 0x01, 0xEF, 0xFF, 0x34, 0xBC, 0x01, 0xF1, 0x05, 0x92, + 0xFC, 0xB1, 0x00, 0x64, 0xFC, 0x99, 0x26, 0xFE, 0xFF, 0x26, 0xC8, 0xFF, 0x2F, 0x00, 0xB1, 0xFF, + 0xBD, 0xFF, 0xC2, 0x36, 0x18, 0xF0, 0x1E, 0xFF, 0x55, 0x00, 0x00, 0x01, 0xD8, 0xFF, 0xE4, 0x05, + 0x00, 0x00, 0x15, 0xF9, 0xFF, 0xE8, 0x08, 0x00, 0x00, 0x73, 0xFF, 0xFF, 0xFF, 0x62, 0x00, 0x01, + 0xD9, 0xFF, 0x98, 0xFF, 0xD4, 0x01, 0x3F, 0xFF, 0xC2, 0x10, 0xF3, 0xFF, 0x48, 0xA5, 0xFF, 0x63, + 0x00, 0x8E, 0xFF, 0xBB, 0x0C, 0x02, 0x02, 0xC8, 0x02, 0xF0, 0x18, 0xC3, 0xFC, 0x75, 0x00, 0x67, + 0xFC, 0xD2, 0x89, 0xFF, 0xA5, 0x00, 0x90, 0xFF, 0x9E, 0x4B, 0xFF, 0xD3, 0x00, 0xB8, 0xFF, 0x66, + 0x10, 0xFE, 0xFB, 0x07, 0xE0, 0xFF, 0x2F, 0x00, 0xCE, 0xFF, 0x3A, 0xFF, 0xF5, 0x04, 0x00, 0x8F, + 0xFF, 0x8F, 0xD3, 0x12, 0x51, 0x51, 0xFF, 0xE4, 0xFF, 0x89, 0x4E, 0x02, 0x61, 0xFF, 0x51, 0x00, + 0x00, 0x00, 0xD5, 0x2C, 0x12, 0x40, 0x00, 0x98, 0xFF, 0xE3, 0x98, 0x00, 0xF1, 0x02, 0x75, 0xFF, + 0xAB, 0x00, 0x00, 0x0B, 0xB6, 0xF0, 0xFF, 0x52, 0x00, 0x00, 0x10, 0xFD, 0xD5, 0x74, 0x01, 0x20, + 0x02, 0x05, 0xC8, 0x01, 0x91, 0xFC, 0xFC, 0xD5, 0x1D, 0xA4, 0xA4, 0xE3, 0xFF, 0xBE, 0x3E, 0x22, + 0x10, 0x5B, 0x38, 0x0B, 0x00, 0x1A, 0x05, 0x10, 0xC6, 0x94, 0x0C, 0x40, 0x2E, 0xFF, 0xFF, 0x2B, + 0xDC, 0x09, 0x50, 0xC4, 0x00, 0x00, 0x0C, 0xF2, 0x24, 0x10, 0x70, 0x5D, 0xFF, 0xFF, 0xA6, 0x9C, + 0x7F, 0x70, 0x6E, 0x05, 0x14, 0xD0, 0x50, 0x0B, 0xF4, 0x08, 0x00, 0x00, 0x7D, 0xE8, 0xFC, 0x4B, + 0x00, 0x17, 0xFF, 0xFF, 0xCC, 0x31, 0x00, 0x35, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x38, 0xFF, 0xFF, + 0x14, 0x06, 0x00, 0x11, 0x3A, 0x06, 0x00, 0x10, 0x4A, 0x1B, 0x0D, 0x20, 0x2A, 0xD4, 0xB5, 0x0C, + 0xF0, 0x02, 0x44, 0xFF, 0xFC, 0x52, 0x00, 0x00, 0x02, 0x70, 0xFF, 0xE1, 0x00, 0x00, 0x00, 0x3E, + 0xFF, 0xFF, 0x0B, 0xD4, 0x21, 0x2A, 0xFF, 0x14, 0x36, 0x00, 0xF0, 0x02, 0x32, 0xFF, 0xFF, 0x21, + 0x00, 0x00, 0x13, 0xFE, 0xFF, 0xCA, 0x30, 0x00, 0x00, 0x76, 0xEB, 0xFF, 0x4C, 0xAC, 0x05, 0x02, + 0x5C, 0x21, 0x53, 0xDA, 0xFC, 0x28, 0xDD, 0xFF, 0x03, 0x00, 0x17, 0xDE, 0x03, 0x00, 0x17, 0xDF, + 0x03, 0x00, 0x1A, 0xE0, 0x03, 0x00, 0x05, 0xFC, 0x0B, 0x81, 0x43, 0xFC, 0xE9, 0x84, 0x00, 0x00, + 0x2C, 0xC9, 0xF9, 0x13, 0x00, 0x47, 0x06, 0x10, 0x00, 0x4A, 0x21, 0x10, 0x44, 0x53, 0x1A, 0x06, + 0x06, 0x00, 0x21, 0x02, 0xF6, 0x54, 0x0C, 0x80, 0xA3, 0xFF, 0xD7, 0x2F, 0x00, 0x00, 0x4D, 0xFA, + 0x7C, 0x00, 0x40, 0xDC, 0xFF, 0x76, 0x02, 0x0F, 0x0C, 0x1A, 0x46, 0x2A, 0x00, 0x02, 0x3C, 0x00, + 0x10, 0x1A, 0xF9, 0x12, 0x20, 0x2B, 0xC7, 0x75, 0x01, 0x42, 0x44, 0xFF, 0xED, 0x7D, 0x8C, 0x04, + 0x12, 0x04, 0xEA, 0x36, 0xF4, 0x08, 0x21, 0x8C, 0x63, 0x07, 0x00, 0x22, 0x00, 0x26, 0xEF, 0xFF, + 0xFF, 0xE4, 0xB4, 0xFD, 0x2E, 0x06, 0x7A, 0x17, 0x53, 0xCB, 0xF5, 0x7A, 0x01, 0x14, 0x1B, 0x22, + 0x06, 0x06, 0x1F, 0x19, 0xFF, 0x02, 0x25, 0x54, 0x54, 0x54, 0x54, 0x07, 0x70, 0x55, 0x3C, 0x3C, + 0x9B, 0x14, 0x70, 0x20, 0x00, 0x00, 0x7C, 0x06, 0x00, 0x1F, 0x58, 0x9B, 0x8C, 0x8C, 0xC5, 0x14, + 0xB4, 0x25, 0x0F, 0x01, 0x00, 0x45, 0x3F, 0x23, 0x23, 0x23, 0x18, 0x00, 0x02, 0x3E, 0xFF, 0xFF, + 0xFF, 0x3B, 0x00, 0x0F, 0x23, 0x00, 0xFF, 0xE6, 0x0F, 0x36, 0x00, 0x03, 0x08, 0x01, 0x00, 0x0F, + 0x14, 0x00, 0x01, 0x0F, 0x23, 0x00, 0x33, 0x0F, 0x8E, 0x00, 0x12, 0x16, 0x04, 0x01, 0x00, 0x04, + 0xD2, 0x00, 0x06, 0x13, 0x00, 0x1F, 0x01, 0xBC, 0x02, 0xFF, 0xCC, 0x0F, 0x01, 0x00, 0xFF, 0xFF, + 0xA1, 0xF0, 0x29, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x00, 0x28, 0x42, 0xFF, 0xFF, 0x18, + 0xC6, 0x04, 0x21, 0xC7, 0x39, 0x10, 0x84, 0x9D, 0xC4, 0xFF, 0xFF, 0x04, 0x21, 0xEB, 0x5A, 0x10, + 0x84, 0x08, 0x42, 0x04, 0x21, 0x10, 0x84, 0x14, 0xFD, 0x28, 0xFF, 0xFF, 0xFF, 0x1F, 0x04, 0x10, + 0x84, 0x18, 0xC6, 0x1F, 0x04, 0xFF, 0xFF, 0x08, 0x42, 0x10, 0x84, 0x06, 0x00, 0x22, 0x18, 0xC6, + 0x0A, 0x00, 0x00, 0x08, 0x00, 0xF0, 0x36, 0x84, 0x43, 0x00, 0x00, 0xA4, 0x43, 0x00, 0x00, 0xA8, + 0x43, 0x00, 0x00, 0xC8, 0x43, 0x00, 0x00, 0xE8, 0x43, 0x00, 0x00, 0x08, 0x44, 0x00, 0x00, 0x28, + 0x44, 0x00, 0x00, 0x48, 0x44, 0x00, 0x00, 0x68, 0x44, 0x00, 0x00, 0x88, 0x44, 0x00, 0x00, 0xA8, + 0x44, 0x00, 0x00, 0xC8, 0x44, 0x00, 0x00, 0xE8, 0x44, 0x00, 0x00, 0xEC, 0x44, 0x00, 0x00, 0xF0, + 0x44, 0x00, 0x00, 0xF4, 0x44, 0x00, 0x00, 0xF8, 0x44, 0x00, 0x00, 0xFC, 0x09, 0x2D, 0xF0, 0x16, + 0x45, 0x00, 0x00, 0x04, 0x45, 0x00, 0x00, 0x24, 0x45, 0x00, 0x00, 0x44, 0x45, 0x00, 0x00, 0x64, + 0x45, 0x00, 0x00, 0x68, 0x45, 0x00, 0x00, 0x6C, 0x45, 0x00, 0x00, 0x70, 0x45, 0x00, 0x00, 0x8C, + 0x45, 0x00, 0x00, 0xA8, 0x45, 0x28, 0x3B, 0x0A, 0xF0, 0x3B, 0x22, 0xC4, 0x45, 0x08, 0x00, 0x20, + 0xC8, 0x45, 0x8A, 0x03, 0x0C, 0xDC, 0x42, 0x02, 0xC4, 0x3B, 0x13, 0xCC, 0x24, 0x00, 0x13, 0xD8, + 0x24, 0x00, 0x1B, 0x04, 0x44, 0x00, 0x13, 0xDC, 0x20, 0x00, 0x13, 0xE0, 0x20, 0x00, 0x1B, 0x07, + 0x20, 0x00, 0x13, 0xE4, 0x20, 0x00, 0x13, 0xE8, 0x20, 0x00, 0x0C, 0x84, 0x00, 0x13, 0xEC, 0x20, + 0x00, 0x13, 0xF0, 0x20, 0x00, 0x0C, 0x80, 0x00, 0x13, 0xF4, 0x20, 0x00, 0x2F, 0x00, 0x46, 0x60, + 0x00, 0x03, 0x22, 0x04, 0x46, 0x08, 0x00, 0x2F, 0x08, 0x46, 0x60, 0x00, 0x03, 0x13, 0x0C, 0x20, + 0x00, 0x2F, 0x10, 0x46, 0x60, 0x00, 0x03, 0x13, 0x14, 0x20, 0x00, 0x1F, 0x20, 0x60, 0x00, 0x04, + 0x13, 0x24, 0x20, 0x00, 0x1F, 0x28, 0x60, 0x00, 0x04, 0x13, 0x2C, 0x20, 0x00, 0x17, 0x30, 0x60, + 0x00, 0x13, 0x02, 0x5C, 0x00, 0x00, 0x74, 0x0A, 0x13, 0x06, 0x80, 0x3C, 0x2E, 0x09, 0x00, 0x3C, + 0x00, 0x13, 0x34, 0x3C, 0x00, 0x13, 0x38, 0x3C, 0x00, 0x1B, 0x05, 0x20, 0x00, 0x13, 0x3C, 0x20, + 0x00, 0x1F, 0x40, 0x7C, 0x00, 0x04, 0x13, 0x44, 0x20, 0x00, 0x1B, 0x48, 0xDC, 0x00, 0x1D, 0x02, + 0x6C, 0x44, 0x11, 0x10, 0x14, 0x00, 0x2C, 0x4C, 0x46, 0xE4, 0x01, 0x06, 0x1C, 0x00, 0x1F, 0x54, + 0x1C, 0x00, 0x08, 0x13, 0x5C, 0x1C, 0x00, 0xF0, 0x4A, 0x64, 0x46, 0x00, 0x00, 0x68, 0x46, 0x00, + 0x00, 0x74, 0x46, 0x00, 0x00, 0x78, 0x46, 0x00, 0x00, 0x7C, 0x46, 0x00, 0x00, 0x80, 0x46, 0x00, + 0x00, 0x8C, 0x46, 0x00, 0x00, 0x90, 0x46, 0x00, 0x00, 0x9C, 0x46, 0x00, 0x00, 0xA0, 0x46, 0x00, + 0x00, 0xAC, 0x46, 0x00, 0x00, 0xB0, 0x46, 0x00, 0x00, 0xBC, 0x46, 0x00, 0x00, 0xC0, 0x46, 0x00, + 0x00, 0xC4, 0x46, 0x00, 0x00, 0xC8, 0x46, 0x00, 0x00, 0xD4, 0x46, 0x00, 0x00, 0xD8, 0x46, 0x00, + 0x00, 0xE4, 0x46, 0x00, 0x00, 0xE8, 0x46, 0x00, 0x00, 0xF4, 0x46, 0x00, 0x00, 0xF8, 0x46, 0x00, + 0x00, 0xFC, 0x60, 0x00, 0xF1, 0x32, 0x47, 0x00, 0x00, 0x0C, 0x47, 0x00, 0x00, 0x10, 0x47, 0x00, + 0x00, 0x1C, 0x47, 0x00, 0x00, 0x20, 0x47, 0x00, 0x00, 0x2C, 0x47, 0x00, 0x00, 0x30, 0x47, 0x00, + 0x00, 0x3C, 0x47, 0x00, 0x00, 0x40, 0x47, 0x00, 0x00, 0x4C, 0x47, 0x00, 0x00, 0x50, 0x47, 0x00, + 0x00, 0x5C, 0x47, 0x00, 0x00, 0x74, 0x47, 0x00, 0x00, 0x8C, 0x47, 0x00, 0x00, 0xA4, 0x47, 0x00, + 0x00, 0xBC, 0x47, 0x00, 0x00, 0xD4, 0x47, 0xF8, 0x00, 0x1B, 0xE0, 0xAB, 0x03, 0x17, 0xE0, 0x04, + 0x00, 0x06, 0x3C, 0x01, 0x3B, 0x60, 0x00, 0xE0, 0xAC, 0x3E, 0x09, 0x10, 0x00, 0x1F, 0x04, 0x48, + 0x00, 0x14, 0x1F, 0x05, 0x38, 0x00, 0x24, 0x1F, 0x06, 0x38, 0x00, 0x0C, 0x1C, 0x07, 0x48, 0x00, + 0x0B, 0xB0, 0x00, 0x1D, 0x08, 0x30, 0x00, 0xD9, 0xFE, 0xFF, 0x00, 0x00, 0x5F, 0x00, 0x62, 0x00, + 0x22, 0x01, 0x4C, 0x00, 0x11, 0x18, 0x3F, 0x03, 0x26, 0x0C, 0x47, 0x00, 0x23, 0x00, 0x12, 0x30, + 0x00, 0x1F, 0xFC, 0x30, 0x00, 0x04, 0x7D, 0xFB, 0xFF, 0x00, 0x00, 0xBD, 0x01, 0xED, 0x30, 0x00, + 0x1F, 0xFA, 0x30, 0x00, 0x04, 0x11, 0xF9, 0x30, 0x00, 0x0C, 0x60, 0x00, 0xFF, 0x13, 0x10, 0x48, + 0x00, 0x00, 0x20, 0x48, 0x00, 0x00, 0x30, 0x48, 0x00, 0x00, 0x40, 0x48, 0x00, 0x00, 0x50, 0x48, + 0x00, 0x00, 0x60, 0x48, 0x00, 0x00, 0x70, 0x48, 0x00, 0x00, 0x80, 0x48, 0x00, 0x00, 0x90, 0x48, + 0x80, 0x40, 0x03, 0x08, 0x01, 0x00, 0x04, 0x08, 0x29, 0x2A, 0xA0, 0x48, 0x10, 0x00, 0x1B, 0xB0, + 0x10, 0x00, 0x1B, 0xE8, 0x10, 0x00, 0x1B, 0xEC, 0x10, 0x00, 0x2A, 0x28, 0x49, 0x10, 0x00, 0x1B, + 0x60, 0x10, 0x00, 0x13, 0x64, 0x10, 0x00, 0xC0, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x77, + 0x6F, 0x72, 0x6C, 0x64, 0xD7, 0x28, 0xF0, 0x26, 0x54, 0x6F, 0x75, 0x63, 0x68, 0x20, 0x74, 0x6F, + 0x70, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x20, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x69, 0x6E, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x75, 0x6E, 0x74, 0x69, 0x6C, + 0x20, 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x14, 0x1C, 0x05, + 0x3C, 0x00, 0xBF, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x2D, 0x72, 0x69, 0x67, 0x68, 0x40, 0x00, + 0x18, 0x06, 0x78, 0x00, 0x0F, 0x39, 0x00, 0x1B, 0xF0, 0x01, 0x59, 0x65, 0x73, 0x00, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6E, 0x00 +}; + +} // namespace gui +} // namespace eez diff --git a/src/gui/document.h b/src/gui/document.h new file mode 100644 index 0000000..993997c --- /dev/null +++ b/src/gui/document.h @@ -0,0 +1,179 @@ +#pragma once + +#include +#include + +namespace eez { +namespace gui { + +enum DataEnum { + DATA_ID_NONE = 0, + DATA_ID_ALERT_MESSAGE = 1, + DATA_ID_TOUCH_CALIBRATION_POINT = 2, + DATA_ID_KEYPAD_TEXT = 3, + DATA_ID_KEYPAD_EDIT_UNIT = 4, + DATA_ID_KEYPAD_SIGN_ENABLED = 5, + DATA_ID_KEYPAD_UNIT_ENABLED = 6, + DATA_ID_KEYPAD_DOT_ENABLED = 7, + DATA_ID_KEYPAD_OPTION1_ENABLED = 8, + DATA_ID_KEYPAD_OPTION1_TEXT = 9, + DATA_ID_KEYPAD_OPTION2_ENABLED = 10, + DATA_ID_KEYPAD_OPTION2_TEXT = 11, + DATA_ID_KEYPAD_OPTION3_ENABLED = 12, + DATA_ID_KEYPAD_OPTION3_TEXT = 13, + DATA_ID_KEYPAD_MODE = 14, + DATA_ID_KEYPAD_OK_ENABLED = 15 +}; + +void data_none(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_alert_message(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_touch_calibration_point(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_text(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_edit_unit(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_sign_enabled(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_unit_enabled(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_dot_enabled(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_option1_enabled(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_option1_text(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_option2_enabled(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_option2_text(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_option3_enabled(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_option3_text(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_mode(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); +void data_keypad_ok_enabled(DataOperationEnum operation, const WidgetCursor &cursor, Value &value); + +typedef void (*DataOperationsFunction)(DataOperationEnum operation, const WidgetCursor &widgetCursor, Value &value); + +extern DataOperationsFunction g_dataOperationsFunctions[]; + +enum ActionsEnum { + ACTION_ID_NONE = 0, + ACTION_ID_YES = 1, + ACTION_ID_NO = 2, + ACTION_ID_CANCEL = 3, + ACTION_ID_EDIT = 4, + ACTION_ID_DRAG_OVERLAY = 5, + ACTION_ID_SCROLL = 6, + ACTION_ID_KEYPAD_KEY = 7, + ACTION_ID_KEYPAD_BACK = 8, + ACTION_ID_KEYPAD_UNIT = 9, + ACTION_ID_KEYPAD_OPTION1 = 10, + ACTION_ID_KEYPAD_OPTION2 = 11, + ACTION_ID_KEYPAD_OPTION3 = 12, + ACTION_ID_KEYPAD_SIGN = 13, + ACTION_ID_KEYPAD_OK = 14, + ACTION_ID_KEYPAD_CANCEL = 15, + ACTION_ID_TOGGLE_KEYPAD_MODE = 16, + ACTION_ID_KEYPAD_SPACE = 17 +}; + +void action_yes(); +void action_no(); +void action_cancel(); +void action_edit(); +void action_drag_overlay(); +void action_scroll(); +void action_keypad_key(); +void action_keypad_back(); +void action_keypad_unit(); +void action_keypad_option1(); +void action_keypad_option2(); +void action_keypad_option3(); +void action_keypad_sign(); +void action_keypad_ok(); +void action_keypad_cancel(); +void action_toggle_keypad_mode(); +void action_keypad_space(); + +extern ActionExecFunc g_actionExecFunctions[]; + +enum FontsEnum { + FONT_ID_NONE = 0, + FONT_ID_SHADOW = 1, + FONT_ID_MEDIUM = 2, + FONT_ID_GUI_ICONS = 3 +}; + +enum BitmapsEnum { + BITMAP_ID_NONE = 0 +}; + +enum StylesEnum { + STYLE_ID_NONE = 0, + STYLE_ID_DEFAULT = 1, + STYLE_ID_INFO_ALERT = 2, + STYLE_ID_ERROR_ALERT = 3, + STYLE_ID_ERROR_ALERT_BUTTON = 4, + STYLE_ID_SELECT_ENUM_ITEM_POPUP_CONTAINER = 5, + STYLE_ID_SELECT_ENUM_ITEM_POPUP_CONTAINER_S = 6, + STYLE_ID_SELECT_ENUM_ITEM_POPUP_ITEM = 7, + STYLE_ID_SELECT_ENUM_ITEM_POPUP_ITEM_S = 8, + STYLE_ID_SELECT_ENUM_ITEM_POPUP_DISABLED_ITEM = 9, + STYLE_ID_SELECT_ENUM_ITEM_POPUP_DISABLED_ITEM_S = 10, + STYLE_ID_MENU_WITH_BUTTONS_MESSAGE = 11, + STYLE_ID_MENU_WITH_BUTTONS_CONTAINER = 12, + STYLE_ID_MENU_WITH_BUTTONS_BUTTON = 13, + STYLE_ID_FPS_GRAPH = 14, + STYLE_ID_BACKGROUND = 15, + STYLE_ID_TOUCH_CALIBRATION = 16, + STYLE_ID_NOTE_M = 17, + STYLE_ID_TOUCH_CALIBRATION_POINT = 18, + STYLE_ID_BUTTON = 19 +}; + +enum ThemesEnum { + THEME_ID_DEFAULT = 0 +}; + +enum ColorsEnum { + COLOR_ID_TRANSPARENT = 65535, + COLOR_ID_BACKGROUND = 0, + COLOR_ID_BACKDROP = 1, + COLOR_ID_TEXT = 2, + COLOR_ID_TEXT_INACTIVE = 3, + COLOR_ID_DARK_TEXT = 4, + COLOR_ID_BORDER = 5, + COLOR_ID_ACTIVE_BACKGROUND = 6, + COLOR_ID_BUTTON_TEXT = 7, + COLOR_ID_BUTTON_BACKGROUND = 8, + COLOR_ID_BUTTON_ACTIVE_BACKGROUND = 9, + COLOR_ID_BUTTON_BORDER = 10, + COLOR_ID_BUTTON_DISABLED_TEXT = 11, + COLOR_ID_BUTTON_DISABLED_BACKGROUND = 12, + COLOR_ID_BUTTON_DISABLED_BORDER = 13, + COLOR_ID_ERROR = 14, + COLOR_ID_NOTE = 15, + COLOR_ID_SWITCH_WIDGET_COLOR = 16, + COLOR_ID_SWITCH_WIDGET_BACKGROUND_ON = 17, + COLOR_ID_SWITCH_WIDGET_BACKGROUND_OFF = 18, + COLOR_ID_SWITCH_WIDGET_BORDER = 19, + COLOR_ID_SLIDER_WIDGET_COLOR = 20, + COLOR_ID_SLIDER_WIDGET_BACKGROUND = 21, + COLOR_ID_DROP_DOWN_LIST_COLOR = 22, + COLOR_ID_DROP_DOWN_LIST_COLOR_DISABLED = 23, + COLOR_ID_DROP_DOWN_LIST_BACKGROUND = 24, + COLOR_ID_DROP_DOWN_LIST_BORDER = 25, + COLOR_ID_DROP_DOWN_LIST_ACTIVE_BACKGROUND = 26, + COLOR_ID_TEXT_INPUT_COLOR = 27, + COLOR_ID_TEXT_INPUT_COLOR_DISABLED = 28, + COLOR_ID_TEXT_INPUT_BACKGROUND = 29, + COLOR_ID_TEXT_INPUT_ACTIVE_BACKGROUND = 30, + COLOR_ID_TEXT_INPUT_BORDER = 31, + COLOR_ID_CUSTOM_UNDEFINED = 32, + COLOR_ID_CUSTOM_000000 = 33, + COLOR_ID_CUSTOM_00FF1E = 34, + COLOR_ID_CUSTOM_FFFFFF = 35, + COLOR_ID_CUSTOM_00FF00 = 36 +}; + +enum PagesEnum { + PAGE_ID_NONE = 0, + PAGE_ID_MAIN = 1, + PAGE_ID_TOUCH_CALIBRATION = 2, + PAGE_ID_TOUCH_CALIBRATION_YES_NO = 3 +}; + +extern const uint8_t assets[9722]; + +} // namespace gui +} // namespace eez diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..496ea61 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,84 @@ +#include +#include + +#ifdef __EMSCRIPTEN__ +void startEmscripten(); +#endif + +void init() { + eez::initMemory(); + eez::initAllocHeap(eez::ALLOC_BUFFER, eez::ALLOC_BUFFER_SIZE); + eez::gui::display::turnOn(); + eez::gui::startThread(); +} + +int main() { +#ifdef __EMSCRIPTEN__ + startEmscripten(); +#else + init(); + + while (!eez::g_shutdown) { + osDelay(1); + } +#endif +} + +#ifdef __EMSCRIPTEN__ +#include +#include + +extern void eez_system_tick(); + +static int g_initialized = false; + +// clang-format off +void mountFileSystem() { + EM_ASM( + FS.mkdir("/min_eez_sample"); + FS.mount(IDBFS, {}, "/min_eez_sample"); + + //Module.print("start file sync.."); + + //flag to check when data are synchronized + Module.syncdone = 0; + + FS.syncfs(true, function(err) { + assert(!err); + //Module.print("end file sync.."); + Module.syncdone = 1; + }); + , 0); +} +// clang-format on + +EM_PORT_API(void) mainLoop() { + if (emscripten_run_script_int("Module.syncdone") == 1) { + if (!g_initialized) { + g_initialized = true; + init(); + } else { + eez_system_tick(); + + // clang-format off + EM_ASM( + if (Module.syncdone) { + //Module.print("Start File sync.."); + Module.syncdone = 0; + + FS.syncfs(false, function(err) { + assert(!err); + //Module.print("End File sync.."); + Module.syncdone = 1; + }); + } + , 0); + // clang-format on + } + } +} + +void startEmscripten() { + mountFileSystem(); +} +#endif \ No newline at end of file diff --git a/src/platform/simulator/emscripten/index.html b/src/platform/simulator/emscripten/index.html new file mode 100644 index 0000000..0914401 --- /dev/null +++ b/src/platform/simulator/emscripten/index.html @@ -0,0 +1,111 @@ + + + + + + Min EEZ Sample + + + + + +
+
+ +
+
+ + + + diff --git a/src/platform/simulator/emscripten/main.css b/src/platform/simulator/emscripten/main.css new file mode 100644 index 0000000..ee83359 --- /dev/null +++ b/src/platform/simulator/emscripten/main.css @@ -0,0 +1,31 @@ +body { + margin: 0; + padding: 0; + overflow: hidden; +} + +#content { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} + +#canvas-container { + flex-grow: 1; + flex-shrink: 0; + text-align: center; + margin-top: 10px; + display: flex; + align-items: center; + justify-content: center; +} + +#canvas { + margin: 0; + border: none; + padding: 0; +} diff --git a/src/platform/simulator/emscripten/pre.js b/src/platform/simulator/emscripten/pre.js new file mode 100644 index 0000000..c113349 --- /dev/null +++ b/src/platform/simulator/emscripten/pre.js @@ -0,0 +1,35 @@ +Module = {}; + +Module.onRuntimeInitialized = function() { + postMessage(0); +} + +Module.print = function (args) { + console.log(args); +} + +const WIDTH = 480; +const HEIGHT = 272; + +onmessage = function (e) { + if (e.data.wheel.deltaY != 0 || e.data.wheel.clicked != 0) { + Module._onMouseWheelEvent(e.data.wheel.deltaY, e.data.wheel.clicked); + } + + for (let i = 0; i < e.data.pointerEvents.length; i++) { + const pointerEvent = e.data.pointerEvents[i]; + Module._onPointerEvent(pointerEvent.x, pointerEvent.y, pointerEvent.pressed); + } + + Module._mainLoop(); + + var buf_addr = Module._getSyncedBuffer(); + if (buf_addr != 0) { + var uint8ClampedArray = new Uint8ClampedArray(Module.HEAPU8.subarray(buf_addr, buf_addr + WIDTH * HEIGHT * 4)); + postMessage({ + screen: uint8ClampedArray + }); + } else { + postMessage(0); + } +} diff --git a/src/platform/simulator/win32/icon.rc b/src/platform/simulator/win32/icon.rc new file mode 100644 index 0000000..cb38499 Binary files /dev/null and b/src/platform/simulator/win32/icon.rc differ