├── images
├── image_1.jpg
├── disassembly.mp4
├── switch_s3.jpg
└── switch_s1_s2.jpg
├── examples
├── DMX512Tools
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── DMX512Tools.ino
│ ├── src
│ │ ├── CMakeLists.txt
│ │ ├── common.h
│ │ ├── src.cpp
│ │ ├── view_receiver.h
│ │ ├── view_sender.h
│ │ └── logo_sender.h
│ ├── README.md
│ ├── platformio.ini
│ └── .clang-format
└── PortSeparateSample
│ ├── CMakeLists.txt
│ ├── PortSeparateSample.ino
│ └── src
│ ├── CMakeLists.txt
│ └── src.cpp
├── .gitignore
├── .github
└── workflows
│ └── clang-format-check.yml
├── LICENSE
├── README.md
└── .clang-format
/images/image_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m5stack/M5Module-DMX512/HEAD/images/image_1.jpg
--------------------------------------------------------------------------------
/images/disassembly.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m5stack/M5Module-DMX512/HEAD/images/disassembly.mp4
--------------------------------------------------------------------------------
/images/switch_s3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m5stack/M5Module-DMX512/HEAD/images/switch_s3.jpg
--------------------------------------------------------------------------------
/images/switch_s1_s2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m5stack/M5Module-DMX512/HEAD/images/switch_s1_s2.jpg
--------------------------------------------------------------------------------
/examples/DMX512Tools/.gitignore:
--------------------------------------------------------------------------------
1 | .pio
2 | .vscode/.browse.c_cpp.db*
3 | .vscode/c_cpp_properties.json
4 | .vscode/launch.json
5 | .vscode/ipch
6 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.16.0)
2 | include($ENV{IDF_PATH}/tools/cmake/project.cmake)
3 | project(DMX512Tools)
4 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/DMX512Tools.ino:
--------------------------------------------------------------------------------
1 | /// This is an empty sketch for ArduinoIDE and PlatformIO compatibility.
2 | /// The source code is located in the src folder.
3 |
--------------------------------------------------------------------------------
/examples/PortSeparateSample/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.16.0)
2 | include($ENV{IDF_PATH}/tools/cmake/project.cmake)
3 | project(DMX512Tools)
4 |
--------------------------------------------------------------------------------
/examples/PortSeparateSample/PortSeparateSample.ino:
--------------------------------------------------------------------------------
1 | /// This is an empty sketch for ArduinoIDE and PlatformIO compatibility.
2 | /// The source code is located in the src folder.
3 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/src/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # This file was automatically generated for projects
2 | # without default 'CMakeLists.txt' file.
3 |
4 | FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*)
5 |
6 | idf_component_register(SRCS ${app_sources})
7 |
--------------------------------------------------------------------------------
/examples/PortSeparateSample/src/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # This file was automatically generated for projects
2 | # without default 'CMakeLists.txt' file.
3 |
4 | FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*)
5 |
6 | idf_component_register(SRCS ${app_sources})
7 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/README.md:
--------------------------------------------------------------------------------
1 | # DMX512Tools
2 |
3 | ### target devices
4 | - M5Stack BASIC / GRAY / GO / FIRE
5 | - M5Stack Core2
6 |
7 | ### Required Libraries
8 | - [esp_dmx](https://github.com/someweisguy/esp_dmx/)
9 | - [M5Unified](https://github.com/M5Stack/M5Unified/)
10 | - [M5GFX](https://github.com/M5Stack/M5GFX/)
11 |
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Prerequisites
2 | *.d
3 |
4 | # Compiled Object files
5 | *.slo
6 | *.lo
7 | *.o
8 | *.obj
9 |
10 | # Precompiled Headers
11 | *.gch
12 | *.pch
13 |
14 | # Compiled Dynamic libraries
15 | *.so
16 | *.dylib
17 | *.dll
18 |
19 | # Fortran module files
20 | *.mod
21 | *.smod
22 |
23 | # Compiled Static libraries
24 | *.lai
25 | *.la
26 | *.a
27 | *.lib
28 |
29 | # Executables
30 | *.exe
31 | *.out
32 | *.app
33 | /examples/DMX512Tools/.vscode
34 |
--------------------------------------------------------------------------------
/.github/workflows/clang-format-check.yml:
--------------------------------------------------------------------------------
1 | name: clang-format Check
2 | on: [push, pull_request]
3 | jobs:
4 | formatting-check:
5 | name: Formatting Check
6 | runs-on: ubuntu-latest
7 | strategy:
8 | matrix:
9 | path:
10 | - check: './' # path to include
11 | exclude: '' # path to exclude
12 | # - check: 'src'
13 | # exclude: ''
14 | # - check: 'examples'
15 | # exclude: ''
16 | steps:
17 | - uses: actions/checkout@v2
18 | - name: Run clang-format style check for C/C++/Protobuf programs.
19 | uses: jidicula/clang-format-action@v4.5.0
20 | with:
21 | clang-format-version: '13'
22 | check-path: ${{ matrix.path['check'] }}
23 | exclude-regex: ${{ matrix.path['exclude'] }}
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 M5Stack
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/examples/DMX512Tools/platformio.ini:
--------------------------------------------------------------------------------
1 | ; PlatformIO Project Configuration File
2 | ;
3 | ; Build options: build flags, source filter
4 | ; Upload options: custom upload port, speed and extra flags
5 | ; Library options: dependencies, extra library storages
6 | ; Advanced options: extra scripting
7 | ;
8 | ; Please visit documentation for the other options and examples
9 | ; https://docs.platformio.org/page/projectconf.html
10 |
11 | [env]
12 | platform = espressif32
13 | framework = arduino
14 | board = m5stack-core-esp32
15 | board_build.f_flash = 80000000L
16 | board_build.f_cpu = 240000000L
17 | monitor_speed = 115200
18 | upload_speed = 1500000
19 | monitor_filters = time, esp32_exception_decoder
20 | board_build.flash_mode = qio
21 | ; board_build.flash_mode = dio
22 | build_flags = -DCORE_DEBUG_LEVEL=5
23 | build_type = debug
24 | lib_deps =
25 | M5Stack/M5Unified
26 | M5Stack/M5GFX
27 | https://github.com/someweisguy/esp_dmx/archive/refs/tags/v2.02.zip
28 |
29 | [env:m5stack_arduino_1_0_6]
30 | platform = espressif32@3.4
31 |
32 | [env:m5stack_arduino_2_0_3]
33 | platform = espressif32@4.4.0
34 |
35 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Module DMX512 for M5Stack
2 |
3 | ### target devices
4 | - M5Stack BASIC / GRAY / GO / FIRE
5 | - M5Stack Core2
6 | - M5Stack CoreS3
7 |
8 | ---
9 | ### pin map
10 |
11 | | | Core1 | Core2 | CoreS3 |
12 | | :---: | :---: | :---: | :----: |
13 | | TX | 13 | 19 | 7 |
14 | | RX | 35 | 35 | 10 |
15 | | EN | 12 | 27 | 6 |
16 |
17 | ※ Core1 : BASIC / GRAY / GO / FIRE
18 | ※ Core2 : Core2 / Core2AWS / TOUGH
19 |
20 | ---
21 | ### Role of switches
22 |
23 | - S1 : BiasResistor ON (LEFT) / OFF (RIGHT) for OUT port
24 | - S2 : Pass-through (LEFT) or Separate(RIGHT)
25 | - S3 : TerminationResistor ON (UP) / OFF (DOWN) for IN port
26 |
27 | 
28 | 
29 |
30 | #### S1 : BiasResistor for OUT port
31 | - OUTポートにバイアス抵抗を接続するスイッチです。
32 | - スイッチ位置が左 = バイアス抵抗が接続されます。
33 | - スイッチ位置が右 = バイアス抵抗なし。
34 | - IN側に機器を繋がない場合や、スイッチS2を分離(Separate)にした際、バイアス抵抗を接続すると通信が安定します。
35 |
36 | #### S2 : Pass-through or Separate
37 | - IN-OUTポート間の配線を直結(Pass-through)するか、分離(Separate)するかを選択するスイッチです。
38 | - スイッチ位置が左 = INとOUTは直結され、IN側から入った信号はそのままOUT側に出力されます。
39 | - スイッチ位置が右 = INとOUTは分離され、別々の信号経路として動作します。
40 |
41 | #### 直結(Pass-through)構成時の注意点
42 | - IN側から信号入力中にDMXモジュールからも信号出力すると、OUTポートの信号が混信して誤動作します。
43 |
44 | #### 分離(Separate)構成時の注意点
45 | - INポートとOUTポートは別々の経路となるため、M5Stackのプログラムで信号を中継する必要があります。
46 | - RDM規格に対応した機器からの返信信号はOUTポートからINポートに中継されません。
47 | - RDM規格の返信信号を中継させたい場合は、直結(Pass-through)構成を選択してください。
48 |
49 | #### S3 : TerminationResistor for IN port
50 | - INポートに終端抵抗を接続するスイッチです。
51 | - スイッチ位置が上 = 終端抵抗が接続されます。
52 | - スイッチ位置が下 = 終端抵抗なし。
53 | - OUT側に機器を繋がない場合や、スイッチS2で分離(Separate)構成にしたときにONにします。
54 |
55 |
56 | ### board image
57 | 
58 |
59 | ### disassembly method
60 |
61 |
62 | ---
63 | There is currently no official M5Stack library for the DMX512 module.
64 | We recommend using the [esp_dmx v2.0.2](https://github.com/someweisguy/esp_dmx/archive/refs/tags/v2.02.zip) library.
65 |
66 | [someweisguy/esp_dmx](https://github.com/someweisguy/esp_dmx/tree/v2.02)
67 |
68 | ### sample application.
69 | - [DMX512Tools](examples/DMX512Tools/)
70 |
71 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/src/common.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include // https://github.com/someweisguy/esp_dmx/
4 | #include // https://github.com/M5Stack/M5Unified/
5 |
6 | #if defined(DMX_PACKET_TIMEOUT_TICK)
7 | #define ESP_DMX_VERSION 2
8 | #else
9 | #define ESP_DMX_VERSION 1
10 | #endif
11 |
12 | /* lets decide which DMX port to use. The ESP32 has either 2 or 3 ports.
13 | Port 0 is typically used to transmit serial data back to your Serial Monitor,
14 | so we shouldn't use that port. Lets use port 1! */
15 | static constexpr const dmx_port_t dmxPort = 1;
16 | static constexpr const int dmxInterruptPriority = 1;
17 | static constexpr const int dmxQueueSize = 1;
18 | extern QueueHandle_t queue;
19 |
20 | static constexpr uint32_t bar_color_table[] = {
21 | 0xED7F11u, 0xCDB001u, 0xA0D904u, 0x6EF51Au, 0x3FFF3Fu, 0x1AF56Eu,
22 | 0x04D9A0u, 0x01B0CDu, 0x117FEDu, 0x314EFDu, 0x5E25FAu, 0x9009E4u,
23 | 0xBF00BFu, 0xE40990u, 0xFA255Eu, 0xFD4E31u};
24 |
25 | struct ui_rect_t {
26 | int x = 0;
27 | int y = 0;
28 | int w = 0;
29 | int h = 0;
30 | ui_rect_t(int src_x, int src_y, int src_w, int src_h)
31 | : x{src_x}, y{src_y}, w{src_w}, h{src_h} {};
32 | bool contain(int src_x, int src_y) {
33 | return src_x >= x && src_x < x + w && src_y >= y && src_y < y + h;
34 | }
35 | };
36 |
37 | struct ui_button_t : public ui_rect_t {
38 | ui_button_t(int src_x, int src_y, int src_w, int src_h,
39 | const char* src_caption)
40 | : ui_rect_t{src_x, src_y, src_w, src_h}, caption{src_caption} {};
41 |
42 | const char* caption = nullptr;
43 | void draw(LovyanGFX* gfx, bool has_focus, bool is_pressed,
44 | bool invalidated = false) {
45 | auto rim_color = TFT_DARKGRAY;
46 | auto bg_color = TFT_BLACK;
47 | auto fg_color = TFT_WHITE;
48 |
49 | if (invalidated) {
50 | _prev_focus = !has_focus;
51 | _prev_pressed = !is_pressed;
52 | }
53 |
54 | if (has_focus) {
55 | rim_color = TFT_WHITE;
56 | }
57 | if (is_pressed) {
58 | std::swap(fg_color, bg_color);
59 | }
60 | gfx->setTextDatum(textdatum_t::middle_center);
61 | gfx->setTextColor(fg_color);
62 |
63 | if (_prev_pressed != is_pressed) {
64 | gfx->fillRoundRect(x, y, w, h, 3, bg_color);
65 | _prev_focus = !has_focus;
66 | }
67 | if (_prev_focus != has_focus) {
68 | gfx->drawRoundRect(x, y, w, h, 3, rim_color);
69 | }
70 | if (_prev_pressed != is_pressed) {
71 | if (caption) {
72 | gfx->drawString(caption, x + (w >> 1), y + (h >> 1));
73 | }
74 | }
75 | _prev_focus = has_focus;
76 | _prev_pressed = is_pressed;
77 | }
78 |
79 | private:
80 | bool _prev_focus = false;
81 | bool _prev_pressed = false;
82 | };
83 |
84 | class view_t {
85 | public:
86 | virtual void setup(void) = 0;
87 | virtual bool loop(void) = 0;
88 | virtual void close(void) = 0;
89 | };
90 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/src/src.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "common.h"
3 | #include "view_receiver.h"
4 | #include "view_sender.h"
5 |
6 | QueueHandle_t queue;
7 |
8 | enum scene_mode_t {
9 | mode_select,
10 | mode_receiver,
11 | mode_sender,
12 | };
13 |
14 | static scene_mode_t scene_mode = mode_select;
15 | static ui_button_t btns[2] = {{0, 200, 120, 40, "Receiver"},
16 | {200, 200, 120, 40, "Sender"}};
17 | static view_receiver_t view_receiver;
18 | static view_sender_t view_sender;
19 |
20 | void drawSelectSetup(void) {
21 | scene_mode = mode_select;
22 | M5.Display.fillScreen(TFT_BLACK);
23 | M5.Display.setTextDatum(textdatum_t::baseline_center);
24 | M5.Display.setFont(&fonts::Font4);
25 | M5.Display.drawString("DMX512Tools", M5.Display.width() >> 1,
26 | M5.Display.height() >> 2);
27 |
28 | M5.Display.setFont(&fonts::AsciiFont8x16);
29 | M5.Display.drawString("Select mode", M5.Display.width() >> 1,
30 | M5.Display.height() * 12 >> 4);
31 | for (size_t i = 0; i < 2; ++i) {
32 | btns[i].draw(&M5.Display, false, false, true);
33 | }
34 | }
35 |
36 | void setup(void) {
37 | M5.begin();
38 |
39 | /* Configure the DMX hardware to the default DMX settings and tell the DMX
40 | driver which hardware pins we are using. */
41 | dmx_config_t dmxConfig = DMX_DEFAULT_CONFIG;
42 | dmx_param_config(dmxPort, &dmxConfig);
43 |
44 | /// For M5Stack Core2/Tough pin setting: TX:19 RX:35 EN:27
45 | gpio_num_t transmitPin = GPIO_NUM_19;
46 | gpio_num_t receivePin = GPIO_NUM_35;
47 | gpio_num_t enablePin = GPIO_NUM_27;
48 |
49 | /// M5Unifiedの実行環境チェックを利用し、CoreS3,旧Coreでの動作の場合はピン設定を変更する。
50 | if (M5.getBoard() == m5::board_t::board_M5StackCoreS3
51 | || M5.getBoard() == m5::board_t::board_M5StackCoreS3SE) {
52 | /// M5Stack CoreS3 pin setting: TX:7 RX:10 EN:6
53 | transmitPin = GPIO_NUM_7;
54 | receivePin = GPIO_NUM_10;
55 | enablePin = GPIO_NUM_6;
56 | }
57 | else if (M5.getBoard() == m5::board_t::board_M5Stack) {
58 | /// M5Stack(BASIC/GRAY/GO/FIRE) pin setting: TX:13 RX:35 EN:12
59 | transmitPin = GPIO_NUM_13;
60 | receivePin = GPIO_NUM_35;
61 | enablePin = GPIO_NUM_12;
62 | }
63 | dmx_set_pin(dmxPort, transmitPin, receivePin, enablePin);
64 |
65 | dmx_driver_install(dmxPort, DMX_MAX_PACKET_SIZE, dmxQueueSize, &queue,
66 | dmxInterruptPriority);
67 |
68 | drawSelectSetup();
69 | }
70 |
71 | int getBtnIndex(int x, int y) {
72 | for (int i = 0; i < 2; ++i) {
73 | if (btns[i].contain(x, y)) {
74 | return i;
75 | }
76 | }
77 | return -1;
78 | }
79 |
80 | int focus_idx = -1;
81 |
82 | void loop(void) {
83 | M5.update();
84 | switch (scene_mode) {
85 | case mode_receiver:
86 | if (!view_receiver.loop()) {
87 | view_receiver.close();
88 | drawSelectSetup();
89 | }
90 | return;
91 |
92 | case mode_sender:
93 | if (!view_sender.loop()) {
94 | view_sender.close();
95 | drawSelectSetup();
96 | }
97 | return;
98 |
99 | default:
100 | break;
101 | }
102 |
103 | int clicked_idx = -1;
104 |
105 | auto tp = M5.Touch.getDetail();
106 | if (tp.wasPressed()) {
107 | focus_idx = getBtnIndex(tp.base_x, tp.base_y);
108 | }
109 | if (tp.wasClicked()) {
110 | clicked_idx = getBtnIndex(tp.base_x, tp.base_y);
111 | }
112 |
113 | if (M5.BtnA.wasPressed()) {
114 | focus_idx = 0;
115 | } else if (M5.BtnA.wasReleased() && focus_idx == 0) {
116 | focus_idx = -1;
117 | }
118 | if (M5.BtnC.wasPressed()) {
119 | focus_idx = 1;
120 | } else if (M5.BtnC.wasReleased() && focus_idx == 1) {
121 | focus_idx = -1;
122 | }
123 | if (M5.BtnA.wasClicked()) {
124 | clicked_idx = 0;
125 | }
126 | if (M5.BtnC.wasClicked()) {
127 | clicked_idx = 1;
128 | }
129 | for (size_t i = 0; i < 2; ++i) {
130 | btns[i].draw(&M5.Display, i == focus_idx, i == clicked_idx);
131 | }
132 | delay(10);
133 |
134 | if (clicked_idx >= 0) {
135 | scene_mode = (clicked_idx == 0) ? mode_receiver : mode_sender;
136 | switch (scene_mode) {
137 | case mode_receiver:
138 | view_receiver.setup();
139 | break;
140 |
141 | case mode_sender:
142 | view_sender.setup();
143 | break;
144 |
145 | default:
146 | break;
147 | }
148 | }
149 | }
150 |
--------------------------------------------------------------------------------
/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | Language: Cpp
3 | BasedOnStyle: Google
4 | AccessModifierOffset: -1
5 | AlignAfterOpenBracket: Align
6 | AlignConsecutiveMacros: true
7 | AlignConsecutiveAssignments: true
8 | AlignConsecutiveDeclarations: false
9 | AlignEscapedNewlines: Left
10 | AlignOperands: true
11 | AlignTrailingComments: true
12 | AllowAllArgumentsOnNextLine: true
13 | AllowAllConstructorInitializersOnNextLine: true
14 | AllowAllParametersOfDeclarationOnNextLine: true
15 | AllowShortBlocksOnASingleLine: Never
16 | AllowShortCaseLabelsOnASingleLine: false
17 | AllowShortFunctionsOnASingleLine: false
18 | AllowShortLambdasOnASingleLine: All
19 | AllowShortIfStatementsOnASingleLine: WithoutElse
20 | AllowShortLoopsOnASingleLine: true
21 | AlwaysBreakAfterDefinitionReturnType: None
22 | AlwaysBreakAfterReturnType: None
23 | AlwaysBreakBeforeMultilineStrings: true
24 | AlwaysBreakTemplateDeclarations: Yes
25 | BinPackArguments: true
26 | BinPackParameters: true
27 | BraceWrapping:
28 | AfterCaseLabel: false
29 | AfterClass: false
30 | AfterControlStatement: false
31 | AfterEnum: false
32 | AfterFunction: false
33 | AfterNamespace: false
34 | AfterObjCDeclaration: false
35 | AfterStruct: false
36 | AfterUnion: false
37 | AfterExternBlock: false
38 | BeforeCatch: false
39 | BeforeElse: false
40 | IndentBraces: false
41 | SplitEmptyFunction: true
42 | SplitEmptyRecord: true
43 | SplitEmptyNamespace: true
44 | BreakBeforeBinaryOperators: None
45 | BreakBeforeBraces: Attach
46 | BreakBeforeInheritanceComma: false
47 | BreakInheritanceList: BeforeColon
48 | BreakBeforeTernaryOperators: true
49 | BreakConstructorInitializersBeforeComma: false
50 | BreakConstructorInitializers: BeforeColon
51 | BreakAfterJavaFieldAnnotations: false
52 | BreakStringLiterals: true
53 | ColumnLimit: 80
54 | CommentPragmas: '^ IWYU pragma:'
55 | CompactNamespaces: false
56 | ConstructorInitializerAllOnOneLineOrOnePerLine: true
57 | ConstructorInitializerIndentWidth: 4
58 | ContinuationIndentWidth: 4
59 | Cpp11BracedListStyle: true
60 | DeriveLineEnding: true
61 | DerivePointerAlignment: true
62 | DisableFormat: false
63 | ExperimentalAutoDetectBinPacking: false
64 | FixNamespaceComments: true
65 | ForEachMacros:
66 | - foreach
67 | - Q_FOREACH
68 | - BOOST_FOREACH
69 | IncludeBlocks: Regroup
70 | IncludeCategories:
71 | - Regex: '^'
72 | Priority: 2
73 | SortPriority: 0
74 | - Regex: '^<.*\.h>'
75 | Priority: 1
76 | SortPriority: 0
77 | - Regex: '^<.*'
78 | Priority: 2
79 | SortPriority: 0
80 | - Regex: '.*'
81 | Priority: 3
82 | SortPriority: 0
83 | IncludeIsMainRegex: '([-_](test|unittest))?$'
84 | IncludeIsMainSourceRegex: ''
85 | IndentCaseLabels: true
86 | IndentGotoLabels: true
87 | IndentPPDirectives: None
88 | IndentWidth: 4
89 | IndentWrappedFunctionNames: false
90 | JavaScriptQuotes: Leave
91 | JavaScriptWrapImports: true
92 | KeepEmptyLinesAtTheStartOfBlocks: false
93 | MacroBlockBegin: ''
94 | MacroBlockEnd: ''
95 | MaxEmptyLinesToKeep: 1
96 | NamespaceIndentation: None
97 | ObjCBinPackProtocolList: Never
98 | ObjCBlockIndentWidth: 2
99 | ObjCSpaceAfterProperty: false
100 | ObjCSpaceBeforeProtocolList: true
101 | PenaltyBreakAssignment: 2
102 | PenaltyBreakBeforeFirstCallParameter: 1
103 | PenaltyBreakComment: 300
104 | PenaltyBreakFirstLessLess: 120
105 | PenaltyBreakString: 1000
106 | PenaltyBreakTemplateDeclaration: 10
107 | PenaltyExcessCharacter: 1000000
108 | PenaltyReturnTypeOnItsOwnLine: 200
109 | PointerAlignment: Left
110 | RawStringFormats:
111 | - Language: Cpp
112 | Delimiters:
113 | - cc
114 | - CC
115 | - cpp
116 | - Cpp
117 | - CPP
118 | - 'c++'
119 | - 'C++'
120 | CanonicalDelimiter: ''
121 | BasedOnStyle: google
122 | - Language: TextProto
123 | Delimiters:
124 | - pb
125 | - PB
126 | - proto
127 | - PROTO
128 | EnclosingFunctions:
129 | - EqualsProto
130 | - EquivToProto
131 | - PARSE_PARTIAL_TEXT_PROTO
132 | - PARSE_TEST_PROTO
133 | - PARSE_TEXT_PROTO
134 | - ParseTextOrDie
135 | - ParseTextProtoOrDie
136 | CanonicalDelimiter: ''
137 | BasedOnStyle: google
138 | ReflowComments: true
139 | SortIncludes: false
140 | SortUsingDeclarations: true
141 | SpaceAfterCStyleCast: false
142 | SpaceAfterLogicalNot: false
143 | SpaceAfterTemplateKeyword: true
144 | SpaceBeforeAssignmentOperators: true
145 | SpaceBeforeCpp11BracedList: false
146 | SpaceBeforeCtorInitializerColon: true
147 | SpaceBeforeInheritanceColon: true
148 | SpaceBeforeParens: ControlStatements
149 | SpaceBeforeRangeBasedForLoopColon: true
150 | SpaceInEmptyBlock: false
151 | SpaceInEmptyParentheses: false
152 | SpacesBeforeTrailingComments: 2
153 | SpacesInAngles: false
154 | SpacesInConditionalStatement: false
155 | SpacesInContainerLiterals: true
156 | SpacesInCStyleCastParentheses: false
157 | SpacesInParentheses: false
158 | SpacesInSquareBrackets: false
159 | SpaceBeforeSquareBrackets: false
160 | Standard: Auto
161 | StatementMacros:
162 | - Q_UNUSED
163 | - QT_REQUIRE_VERSION
164 | TabWidth: 4
165 | UseCRLF: false
166 | UseTab: Never
167 | ...
168 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | Language: Cpp
3 | BasedOnStyle: Google
4 | AccessModifierOffset: -1
5 | AlignAfterOpenBracket: Align
6 | AlignConsecutiveMacros: true
7 | AlignConsecutiveAssignments: true
8 | AlignConsecutiveDeclarations: false
9 | AlignEscapedNewlines: Left
10 | AlignOperands: true
11 | AlignTrailingComments: true
12 | AllowAllArgumentsOnNextLine: true
13 | AllowAllConstructorInitializersOnNextLine: true
14 | AllowAllParametersOfDeclarationOnNextLine: true
15 | AllowShortBlocksOnASingleLine: Never
16 | AllowShortCaseLabelsOnASingleLine: false
17 | AllowShortFunctionsOnASingleLine: false
18 | AllowShortLambdasOnASingleLine: All
19 | AllowShortIfStatementsOnASingleLine: WithoutElse
20 | AllowShortLoopsOnASingleLine: true
21 | AlwaysBreakAfterDefinitionReturnType: None
22 | AlwaysBreakAfterReturnType: None
23 | AlwaysBreakBeforeMultilineStrings: true
24 | AlwaysBreakTemplateDeclarations: Yes
25 | BinPackArguments: true
26 | BinPackParameters: true
27 | BraceWrapping:
28 | AfterCaseLabel: false
29 | AfterClass: false
30 | AfterControlStatement: false
31 | AfterEnum: false
32 | AfterFunction: false
33 | AfterNamespace: false
34 | AfterObjCDeclaration: false
35 | AfterStruct: false
36 | AfterUnion: false
37 | AfterExternBlock: false
38 | BeforeCatch: false
39 | BeforeElse: false
40 | IndentBraces: false
41 | SplitEmptyFunction: true
42 | SplitEmptyRecord: true
43 | SplitEmptyNamespace: true
44 | BreakBeforeBinaryOperators: None
45 | BreakBeforeBraces: Attach
46 | BreakBeforeInheritanceComma: false
47 | BreakInheritanceList: BeforeColon
48 | BreakBeforeTernaryOperators: true
49 | BreakConstructorInitializersBeforeComma: false
50 | BreakConstructorInitializers: BeforeColon
51 | BreakAfterJavaFieldAnnotations: false
52 | BreakStringLiterals: true
53 | ColumnLimit: 80
54 | CommentPragmas: '^ IWYU pragma:'
55 | CompactNamespaces: false
56 | ConstructorInitializerAllOnOneLineOrOnePerLine: true
57 | ConstructorInitializerIndentWidth: 4
58 | ContinuationIndentWidth: 4
59 | Cpp11BracedListStyle: true
60 | DeriveLineEnding: true
61 | DerivePointerAlignment: true
62 | DisableFormat: false
63 | ExperimentalAutoDetectBinPacking: false
64 | FixNamespaceComments: true
65 | ForEachMacros:
66 | - foreach
67 | - Q_FOREACH
68 | - BOOST_FOREACH
69 | IncludeBlocks: Regroup
70 | IncludeCategories:
71 | - Regex: '^'
72 | Priority: 2
73 | SortPriority: 0
74 | - Regex: '^<.*\.h>'
75 | Priority: 1
76 | SortPriority: 0
77 | - Regex: '^<.*'
78 | Priority: 2
79 | SortPriority: 0
80 | - Regex: '.*'
81 | Priority: 3
82 | SortPriority: 0
83 | IncludeIsMainRegex: '([-_](test|unittest))?$'
84 | IncludeIsMainSourceRegex: ''
85 | IndentCaseLabels: true
86 | IndentGotoLabels: true
87 | IndentPPDirectives: None
88 | IndentWidth: 4
89 | IndentWrappedFunctionNames: false
90 | JavaScriptQuotes: Leave
91 | JavaScriptWrapImports: true
92 | KeepEmptyLinesAtTheStartOfBlocks: false
93 | MacroBlockBegin: ''
94 | MacroBlockEnd: ''
95 | MaxEmptyLinesToKeep: 1
96 | NamespaceIndentation: None
97 | ObjCBinPackProtocolList: Never
98 | ObjCBlockIndentWidth: 2
99 | ObjCSpaceAfterProperty: false
100 | ObjCSpaceBeforeProtocolList: true
101 | PenaltyBreakAssignment: 2
102 | PenaltyBreakBeforeFirstCallParameter: 1
103 | PenaltyBreakComment: 300
104 | PenaltyBreakFirstLessLess: 120
105 | PenaltyBreakString: 1000
106 | PenaltyBreakTemplateDeclaration: 10
107 | PenaltyExcessCharacter: 1000000
108 | PenaltyReturnTypeOnItsOwnLine: 200
109 | PointerAlignment: Left
110 | RawStringFormats:
111 | - Language: Cpp
112 | Delimiters:
113 | - cc
114 | - CC
115 | - cpp
116 | - Cpp
117 | - CPP
118 | - 'c++'
119 | - 'C++'
120 | CanonicalDelimiter: ''
121 | BasedOnStyle: google
122 | - Language: TextProto
123 | Delimiters:
124 | - pb
125 | - PB
126 | - proto
127 | - PROTO
128 | EnclosingFunctions:
129 | - EqualsProto
130 | - EquivToProto
131 | - PARSE_PARTIAL_TEXT_PROTO
132 | - PARSE_TEST_PROTO
133 | - PARSE_TEXT_PROTO
134 | - ParseTextOrDie
135 | - ParseTextProtoOrDie
136 | CanonicalDelimiter: ''
137 | BasedOnStyle: google
138 | ReflowComments: true
139 | SortIncludes: false
140 | SortUsingDeclarations: true
141 | SpaceAfterCStyleCast: false
142 | SpaceAfterLogicalNot: false
143 | SpaceAfterTemplateKeyword: true
144 | SpaceBeforeAssignmentOperators: true
145 | SpaceBeforeCpp11BracedList: false
146 | SpaceBeforeCtorInitializerColon: true
147 | SpaceBeforeInheritanceColon: true
148 | SpaceBeforeParens: ControlStatements
149 | SpaceBeforeRangeBasedForLoopColon: true
150 | SpaceInEmptyBlock: false
151 | SpaceInEmptyParentheses: false
152 | SpacesBeforeTrailingComments: 2
153 | SpacesInAngles: false
154 | SpacesInConditionalStatement: false
155 | SpacesInContainerLiterals: true
156 | SpacesInCStyleCastParentheses: false
157 | SpacesInParentheses: false
158 | SpacesInSquareBrackets: false
159 | SpaceBeforeSquareBrackets: false
160 | Standard: Auto
161 | StatementMacros:
162 | - Q_UNUSED
163 | - QT_REQUIRE_VERSION
164 | TabWidth: 4
165 | UseCRLF: false
166 | UseTab: Never
167 | ...
168 |
--------------------------------------------------------------------------------
/examples/PortSeparateSample/src/src.cpp:
--------------------------------------------------------------------------------
1 |
2 |
3 | /// M5ライブラリは M5Stack.hやM5Core2.hを使用しても良いが、
4 | /// この例では 旧CoreとCore2のどちらにも対応可能なM5Unifiedを使用する。
5 |
6 | #include // https://github.com/M5Stack/M5Unified/
7 | #include // https://github.com/someweisguy/esp_dmx/
8 |
9 | /// ESP_DMXライブラリはメジャーバージョンアップ時に色々な名称変更があったため、
10 | /// バージョン1.x, 2.x, 3.1.x に対応できるようにdefine値に基づいたチェックを行う。
11 | #if defined(ESP_DMX_VERSION_MAJOR)
12 | #define ESP_DMX_VERSION 3
13 | #elif defined(DMX_PACKET_TIMEOUT_TICK)
14 | #define ESP_DMX_VERSION 2
15 | #else
16 | #define ESP_DMX_VERSION 1
17 | #endif
18 |
19 | // パススルー構成の時は送受信をひとつのシリアルポートで行うが、
20 | // セパレート構成の時は送信と受信を別々のシリアルポートで行う。
21 |
22 | /// 送信に使用するUARTのポート番号
23 | static constexpr const dmx_port_t dmxTxPort = 1;
24 |
25 | /// 受信に使用するUARTのポート番号
26 | static constexpr const dmx_port_t dmxRxPort = 2;
27 |
28 | static constexpr const int dmxInterruptPriority = 1;
29 | static constexpr const int dmxQueueSize = 1;
30 |
31 | QueueHandle_t dmxTxQueue;
32 | QueueHandle_t dmxRxQueue;
33 |
34 | /// 送受信データ
35 | #if ESP_DMX_VERSION == 3
36 | uint8_t in_data[DMX_PACKET_SIZE];
37 | uint8_t out_data[DMX_PACKET_SIZE];
38 | #else
39 | uint8_t in_data[DMX_MAX_PACKET_SIZE];
40 | uint8_t out_data[DMX_MAX_PACKET_SIZE];
41 | #endif
42 |
43 | /// デバッグ用
44 | unsigned long lastUpdate = millis();
45 |
46 | void setup(void) {
47 | M5.begin();
48 | /// デバッグ用
49 | Serial.begin(115200);
50 |
51 | /// Core2用のピン設定を用意。
52 | /// For M5Stack Core2/Tough pin setting: TX:19 RX:35 EN:27
53 | gpio_num_t transmitPin = GPIO_NUM_19;
54 | gpio_num_t receivePin = GPIO_NUM_35;
55 | gpio_num_t enablePin = GPIO_NUM_27;
56 |
57 | /// M5Unifiedの実行環境チェックを利用し、CoreS3,旧Coreでの動作の場合はピン設定を変更する。
58 | if (M5.getBoard() == m5::board_t::board_M5StackCoreS3
59 | || M5.getBoard() == m5::board_t::board_M5StackCoreS3SE) {
60 | /// M5Stack CoreS3 pin setting: TX:7 RX:10 EN:6
61 | transmitPin = GPIO_NUM_7;
62 | receivePin = GPIO_NUM_10;
63 | enablePin = GPIO_NUM_6;
64 | }
65 | else if (M5.getBoard() == m5::board_t::board_M5Stack) {
66 | /// M5Stack(BASIC/GRAY/GO/FIRE) pin setting: TX:13 RX:35 EN:12
67 | transmitPin = GPIO_NUM_13;
68 | receivePin = GPIO_NUM_35;
69 | enablePin = GPIO_NUM_12;
70 | }
71 |
72 | /// 送信用と受信用の両方のシリアルポートを準備する。
73 | #if ESP_DMX_VERSION == 3
74 | dmx_config_t dmxConfig = DMX_CONFIG_DEFAULT;
75 | #else
76 | dmx_config_t dmxConfig = DMX_DEFAULT_CONFIG;
77 | dmx_param_config(dmxTxPort, &dmxConfig);
78 | dmx_param_config(dmxRxPort, &dmxConfig);
79 | #endif
80 |
81 | ///Ver2まではこのタイミングでdmx_set_pin
82 | #if ESP_DMX_VERSION < 3
83 | /// 送信側ポートは Tx と En のみ使用する。Rx は使用しない。
84 | dmx_set_pin(dmxTxPort, transmitPin, -1, enablePin);
85 |
86 | /// 受信側ポートは Rx のみを使用する。Tx と En は使用しない。
87 | dmx_set_pin(dmxRxPort, -1, receivePin, -1);
88 | #endif
89 |
90 | /// esp_dmxドライバを準備する。
91 | #if ESP_DMX_VERSION == 3
92 | dmx_driver_install(dmxTxPort, &dmxConfig, DMX_INTR_FLAGS_DEFAULT);
93 | dmx_driver_install(dmxRxPort, &dmxConfig, DMX_INTR_FLAGS_DEFAULT);
94 | #else
95 | dmx_driver_install(dmxTxPort, DMX_MAX_PACKET_SIZE, dmxQueueSize,
96 | &dmxTxQueue, dmxInterruptPriority);
97 | dmx_driver_install(dmxRxPort, DMX_MAX_PACKET_SIZE, dmxQueueSize,
98 | &dmxRxQueue, dmxInterruptPriority);
99 | #endif
100 |
101 | #if ESP_DMX_VERSION == 1
102 | dmx_set_mode(dmxRxPort, DMX_MODE_RX);
103 | dmx_set_mode(dmxTxPort, DMX_MODE_TX);
104 | #elif ESP_DMX_VERSION == 2
105 | dmx_set_mode(dmxRxPort, DMX_MODE_READ);
106 | dmx_set_mode(dmxTxPort, DMX_MODE_WRITE);
107 | #elif ESP_DMX_VERSION == 3
108 | dmx_set_pin(dmxTxPort, transmitPin, -1, enablePin);
109 | dmx_set_pin(dmxRxPort, -1, receivePin, -1);
110 | #endif
111 | }
112 |
113 | void loop(void) {
114 |
115 | #if ESP_DMX_VERSION == 3
116 | dmx_packet_t packet;
117 | #else
118 | dmx_event_t packet;
119 | #endif
120 |
121 | /// RX側からDMXデータを受信する。
122 | #if ESP_DMX_VERSION == 3
123 | if (dmx_receive(dmxRxPort, &packet, DMX_TIMEOUT_TICK)) {
124 | unsigned long now = millis(); //デバッグ用
125 | if (!packet.err) {
126 | dmx_read(dmxRxPort, in_data, packet.size);
127 | // このサンプルでは memcpyを使って、入力内容をそのまま出力内容にコピーする。
128 | memcpy(out_data, in_data, DMX_PACKET_SIZE);
129 | // ※ ここで値を変更したり、MIDI等から信号をミックスすることができる。
130 | if (now - lastUpdate > 1000) {
131 | Serial.printf("Start code: %d Slot 1: %d Number of Slot: %d\n", in_data[0], in_data[1], packet.size);
132 | lastUpdate = now;
133 | }
134 | }
135 | }
136 | #else
137 | if (xQueueReceive(dmxRxQueue, &packet, DMX_RX_PACKET_TOUT_TICK)) {
138 | unsigned long now = millis(); //デバッグ用
139 | if (packet.status == DMX_OK) {
140 | if (ESP_OK ==
141 | dmx_read_packet(dmxRxPort, in_data, packet.size)) {
142 |
143 | // このサンプルでは memcpyを使って、入力内容をそのまま出力内容にコピーする。
144 | memcpy(out_data, in_data, DMX_MAX_PACKET_SIZE);
145 | // ※ ここで値を変更したり、MIDI等から信号をミックスすることができる。
146 | if (now - lastUpdate > 1000) {
147 | Serial.printf("Start code: %d Slot 1: %d Number of Slot: %d\n", in_data[0], in_data[1], packet.size);
148 | lastupdate = now;
149 | }
150 | }
151 | }
152 | }
153 | #endif
154 |
155 | // TX側からDMXデータを送信する。
156 | #if ESP_DMX_VERSION == 3
157 | dmx_write(dmxTxPort, out_data, DMX_PACKET_SIZE);
158 | #else
159 | dmx_write_packet(dmxTxPort, out_data, DMX_MAX_PACKET_SIZE);
160 | #endif
161 |
162 | #if ESP_DMX_VERSION == 1
163 | if (ESP_ERR_TIMEOUT != dmx_wait_tx_done(dmxTxPort, DMX_TX_PACKET_TOUT_TICK)) {
164 | dmx_tx_packet(dmxTxPort);
165 | }
166 | #elif ESP_DMX_VERSION == 2
167 | if (ESP_ERR_TIMEOUT != dmx_wait_send_done(dmxTxPort, DMX_TX_PACKET_TOUT_TICK)) {
168 | dmx_send_packet(dmxTxPort, DMX_MAX_PACKET_SIZE);
169 | }
170 | #elif ESP_DMX_VERSION == 3
171 | if (ESP_ERR_TIMEOUT != dmx_wait_sent(dmxTxPort, DMX_TIMEOUT_TICK)) {
172 | dmx_send(dmxTxPort, DMX_PACKET_SIZE);
173 | }
174 | #endif
175 | }
176 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/src/view_receiver.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "common.h"
4 |
5 | class view_receiver_t : public view_t {
6 | public:
7 | void setup(void) override {
8 | #if ESP_DMX_VERSION == 1
9 | dmx_set_mode(dmxPort, DMX_MODE_RX);
10 | #else
11 | dmx_set_mode(dmxPort, DMX_MODE_READ);
12 | #endif
13 | memset(data, 0, sizeof(data));
14 |
15 | M5.Display.setFont(&fonts::Font0);
16 | M5.Display.setTextDatum(textdatum_t::top_left);
17 | M5.Display.setTextWrap(false);
18 | M5.Display.fillScreen(TFT_BLACK);
19 | M5.Display.drawFastHLine(0, CONSOLE_Y - 3, M5.Display.width(),
20 | TFT_DARKGRAY);
21 |
22 | canvas.setColorDepth(8);
23 | canvas.createSprite(M5.Display.width(),
24 | M5.Display.height() - CONSOLE_Y);
25 | canvas.setTextScroll(true);
26 |
27 | fillBar(&M5.Display, 0, 0, M5.Display.width(), BAR_HEIGHT);
28 | }
29 |
30 | bool loop(void) override {
31 | bool change_view = M5.BtnB.wasClicked();
32 | if (!change_view) {
33 | auto td = M5.Touch.getDetail();
34 | change_view = (td.wasClicked() && td.y > CONSOLE_Y &&
35 | td.y < M5.Display.height());
36 | }
37 | if (change_view) {
38 | graph_view = !graph_view;
39 | }
40 |
41 | dmx_event_t packet;
42 |
43 | if (xQueueReceive(queue, &packet, DMX_RX_PACKET_TOUT_TICK)) {
44 | if (packet.status == DMX_OK) {
45 | if (!dmxIsConnected) {
46 | dmxIsConnected = true;
47 | canvas.println("DMX connected!");
48 | canvas.pushSprite(&M5.Display, 0, CONSOLE_Y);
49 | }
50 | if (ESP_OK ==
51 | dmx_read_packet(dmxPort, data[data_idx], packet.size)) {
52 | updateDisplay(packet.duration);
53 | data_idx = !data_idx;
54 | }
55 | } else {
56 | canvas.println("\nDMX error!");
57 | canvas.pushSprite(&M5.Display, 0, CONSOLE_Y);
58 | }
59 | }
60 | return true;
61 | }
62 |
63 | void close(void) override {
64 | canvas.deleteSprite();
65 | }
66 |
67 | private:
68 | static constexpr int BAR_HEIGHT = 128;
69 | static constexpr int CONSOLE_Y = 152;
70 |
71 | uint32_t timer;
72 | size_t data_idx = 0;
73 | M5Canvas canvas;
74 | bool graph_view = false;
75 | uint8_t visible[DMX_MAX_PACKET_SIZE];
76 | uint8_t data[2][DMX_MAX_PACKET_SIZE];
77 | bool dmxIsConnected = false;
78 |
79 | uint32_t getBarColor(int32_t y) {
80 | int32_t v = 63 - (y >> 1);
81 | int32_t v2 = 63 - ((y + 1) >> 1);
82 | if ((v >> 4) != (v2 >> 4)) {
83 | return 0x887766u;
84 | }
85 | return m5gfx::color888(v + 2, v, v + 6);
86 | }
87 |
88 | void fillBar(LovyanGFX* gfx, int32_t x, int32_t y, int32_t w, int32_t h,
89 | size_t ch = 0) {
90 | uint32_t color_add = 0;
91 | if (h < 0) {
92 | y += h;
93 | h = -h;
94 | color_add = (bar_color_table[ch & 15] >> 1) & 0x7F7F7Fu;
95 | }
96 |
97 | gfx->setAddrWindow(x, y, w, h);
98 | uint32_t prev_color = (color_add + getBarColor(y)) & 0xF8FCF8u;
99 | uint32_t py = y;
100 | while (h--) {
101 | uint32_t color = (color_add + getBarColor(++y)) & 0xF8FCF8u;
102 | if (prev_color != color || h == 0) {
103 | gfx->pushBlock(prev_color, w * (y - py));
104 | prev_color = color;
105 | py = y;
106 | }
107 | }
108 | }
109 |
110 | void updateDisplay(int32_t duration) {
111 | timer += duration;
112 | int idx = 0;
113 | bool full_redraw = false;
114 | bool drawed = false;
115 |
116 | size_t drawcount = 0;
117 | for (int ch = 1; ch < DMX_MAX_PACKET_SIZE; ++ch) {
118 | if (!visible[ch]) {
119 | if (data[0][ch] == data[1][ch]) {
120 | continue;
121 | }
122 | visible[ch] = true;
123 | full_redraw = true;
124 | }
125 | ++drawcount;
126 | }
127 |
128 | M5.Display.startWrite();
129 | for (int ch = 1; ch < DMX_MAX_PACKET_SIZE; ++ch) {
130 | if (!visible[ch]) {
131 | if (data[0][ch] == data[1][ch]) {
132 | continue;
133 | }
134 | visible[ch] = true;
135 | full_redraw = true;
136 | }
137 | uint32_t current_data = data[data_idx][ch];
138 | uint32_t prev_data = data[!data_idx][ch];
139 | if (full_redraw || current_data != prev_data) {
140 | int x = (idx * M5.Display.width()) / drawcount;
141 | int w = (((idx + 1) * M5.Display.width()) / drawcount) - x;
142 | if (full_redraw) {
143 | M5.Display.fillRect(x, BAR_HEIGHT, w, 20, TFT_BLACK);
144 | M5.Display.setTextColor(bar_color_table[ch & 15]);
145 | M5.Display.setCursor(x - 3, BAR_HEIGHT + 12);
146 | M5.Display.printf("% 3d", ch);
147 | }
148 | M5.Display.setTextColor(TFT_WHITE, TFT_BLACK);
149 | M5.Display.setCursor(x + 2, BAR_HEIGHT + 2);
150 | M5.Display.printf("%02x", current_data);
151 |
152 | int y = BAR_HEIGHT - ((current_data + 1) >> 1);
153 | int py =
154 | BAR_HEIGHT - (full_redraw ? 0 : ((prev_data + 1) >> 1));
155 | if (full_redraw) {
156 | fillBar(&M5.Display, x, 0, w, BAR_HEIGHT, ch);
157 | }
158 | if (w > 2) {
159 | --w;
160 | }
161 | if (w > 2) {
162 | ++x;
163 | --w;
164 | }
165 | fillBar(&M5.Display, x, py, w, y - py, ch);
166 | }
167 |
168 | if (graph_view) {
169 | if (!drawed) {
170 | drawed = true;
171 | }
172 | int32_t x1 = current_data;
173 | int32_t x2 = prev_data;
174 | if (x1 > x2) {
175 | std::swap(x1, x2);
176 | }
177 | canvas.fillRectAlpha(32 + x1, canvas.height() - 1, x2 - x1 + 1,
178 | 1, 128, bar_color_table[ch & 15]);
179 | } else {
180 | if (prev_data != current_data) {
181 | if (!drawed) {
182 | drawed = true;
183 | canvas.setTextColor(TFT_SKYBLUE);
184 | int msec = timer / 1000;
185 | int second = msec / 1000;
186 | int minute = second / 60;
187 | msec -= second * 1000;
188 | second -= minute * 60;
189 | canvas.printf("%2d:%02d.%03d", minute, second, msec);
190 | }
191 | if (canvas.getCursorX() > 280) {
192 | canvas.println();
193 | canvas.setCursor(9 * canvas.fontWidth(),
194 | canvas.getCursorY());
195 | }
196 | canvas.setTextColor(TFT_DARKGRAY);
197 | canvas.printf(" [", timer / 1000);
198 | canvas.setTextColor(bar_color_table[ch & 15]);
199 | canvas.printf("%3d", ch);
200 | canvas.setTextColor((uint8_t)0x29u);
201 | canvas.print("]");
202 | canvas.setTextColor(TFT_WHITE);
203 | canvas.printf("%02x", current_data);
204 | }
205 | }
206 | ++idx;
207 | }
208 | if (drawed) {
209 | canvas.pushSprite(&M5.Display, 0, CONSOLE_Y);
210 | if (graph_view) {
211 | canvas.scroll(0, -1);
212 | } else {
213 | canvas.println();
214 | }
215 | }
216 | M5.Display.endWrite();
217 | }
218 | };
219 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/src/view_sender.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "common.h"
4 | #include "logo_sender.h"
5 |
6 | class view_sender_t : public view_t {
7 | public:
8 | void setup(void) override {
9 | #if ESP_DMX_VERSION == 1
10 | dmx_set_mode(dmxPort, DMX_MODE_TX);
11 | #else
12 | dmx_set_mode(dmxPort, DMX_MODE_WRITE);
13 | #endif
14 | memset(data, 0, sizeof(data));
15 | dmx_write_packet(dmxPort, data[0], DMX_MAX_PACKET_SIZE);
16 |
17 | M5.Display.setFont(&fonts::Font0);
18 | M5.Display.setTextDatum(textdatum_t::top_left);
19 | M5.Display.setTextWrap(false);
20 | M5.Display.fillScreen(TFT_BLACK);
21 |
22 | enable_channel_count = 512;
23 | for (int i = 0; i < enable_channel_count; ++i) {
24 | int ch = i + 1;
25 | enable_channels[i] = ch;
26 | visible[ch] = 1;
27 | // data[0][ch] = rand();
28 | // data[1][ch] = data[0][ch];
29 | }
30 | target_channel = enable_channels[target_channel_index];
31 |
32 | updateDisplay(true);
33 | hideUIValueSet();
34 | }
35 |
36 | bool loop(void) override {
37 | #if ESP_DMX_VERSION == 1
38 | if (ESP_ERR_TIMEOUT != dmx_wait_tx_done(dmxPort, 0)) {
39 | dmx_tx_packet(dmxPort);
40 | }
41 | #else
42 | if (ESP_ERR_TIMEOUT != dmx_wait_send_done(dmxPort, 0)) {
43 | dmx_send_packet(dmxPort, DMX_MAX_PACKET_SIZE);
44 | }
45 | #endif
46 |
47 | bool modified = false;
48 | bool btnB_Clicked = M5.BtnB.wasClicked();
49 |
50 | auto tp = M5.Touch.getDetail();
51 | if (tp.state) {
52 | if (tp.base_y < scroll_height &&
53 | tp.base_x <
54 | scroll_width) { /// スクロールエリア内でのタッチ操作の処理;
55 | auto dy = tp.deltaY();
56 | scroll_y_add = -dy;
57 | if (dy && ui_mode == ui_mode_t::mode_value_setting) {
58 | setUIMode(ui_mode_t::mode_channel_select);
59 | }
60 |
61 | if (tp.wasClicked()) { /// タップ操作でチャンネル選択;
62 | int new_channel_index =
63 | (tp.x / channel_item_width) +
64 | ((tp.y + scroll_y) / channel_item_height) *
65 | channel_item_cols;
66 |
67 | if (new_channel_index < 0) {
68 | new_channel_index = 0;
69 | } else if (new_channel_index >= enable_channel_count) {
70 | new_channel_index = enable_channel_count - 1;
71 | } else if (target_channel_index != new_channel_index) {
72 | target_channel_index = new_channel_index;
73 | target_channel = enable_channels[new_channel_index];
74 | target_value = data[data_idx][target_channel];
75 | modified = true;
76 | ui_mode = ui_mode_t::mode_channel_select;
77 | setUIMode(ui_mode_t::mode_value_setting);
78 | } else {
79 | setUIMode(ui_mode == ui_mode_t::mode_channel_select
80 | ? ui_mode_t::mode_value_setting
81 | : ui_mode_t::mode_channel_select);
82 | }
83 | updateDisplay(true);
84 | }
85 | } else if (tp.base_x >= scroll_width &&
86 | tp.base_y < M5.Display.height()) {
87 | if (ui_mode == ui_mode_t::mode_value_setting) {
88 | int new_value = target_value;
89 | if (tp.base_y >= slider_y && tp.base_y - 128 < slider_y) {
90 | new_value = 255 - ((tp.y - slider_y) << 1);
91 | } else if (tp.wasPressed() || tp.isHolding()) {
92 | new_value += (tp.base_y < slider_y) ? 1 : -1;
93 | }
94 |
95 | if (new_value < 0) {
96 | new_value = 0;
97 | } else if (new_value > 255) {
98 | new_value = 255;
99 | }
100 | if (target_value != new_value) {
101 | drawUIValueSet(new_value);
102 | }
103 | }
104 | }
105 | }
106 |
107 | switch (ui_mode) {
108 | case mode_channel_select: {
109 | int new_channel_index = target_channel_index;
110 | if (M5.BtnA.wasPressed() || M5.BtnA.isHolding()) {
111 | --new_channel_index;
112 | }
113 | if (M5.BtnC.wasPressed() || M5.BtnC.isHolding()) {
114 | ++new_channel_index;
115 | }
116 | if (new_channel_index != target_channel_index) {
117 | if (new_channel_index < 0) {
118 | new_channel_index = 0;
119 | } else if (new_channel_index >= enable_channel_count) {
120 | new_channel_index = enable_channel_count - 1;
121 | }
122 |
123 | target_channel_index = new_channel_index;
124 | int new_channel = enable_channels[new_channel_index];
125 | if (target_channel != new_channel) {
126 | target_channel = new_channel;
127 | target_value = data[data_idx][new_channel];
128 | if (!scrollToTargetItem()) {
129 | updateDisplay(true);
130 | }
131 | }
132 | modified = true;
133 | }
134 | if (btnB_Clicked) {
135 | setUIMode(ui_mode_t::mode_value_setting);
136 | modified = true;
137 | }
138 | } break;
139 |
140 | case mode_value_setting:
141 |
142 | {
143 | int new_value = target_value;
144 | if (M5.BtnA.wasPressed() || M5.BtnA.isHolding()) {
145 | --new_value;
146 | }
147 | if (M5.BtnC.wasPressed() || M5.BtnC.isHolding()) {
148 | ++new_value;
149 | }
150 | if (new_value != target_value) {
151 | if (new_value <= 0) {
152 | new_value = 0;
153 | } else if (new_value > 255) {
154 | new_value = 255;
155 | }
156 | drawUIValueSet(new_value);
157 | }
158 | if (btnB_Clicked) {
159 | setUIMode(ui_mode_t::mode_channel_select);
160 | }
161 | }
162 | }
163 |
164 | if (target_value != data[data_idx][target_channel]) {
165 | data_idx = 1 - data_idx;
166 | data[data_idx][target_channel] = target_value;
167 | dmx_write_packet(dmxPort, data[data_idx], DMX_MAX_PACKET_SIZE);
168 | updateDisplay();
169 | modified = true;
170 | data[1 - data_idx][target_channel] = target_value;
171 | }
172 |
173 | if (scroll_y_add) {
174 | int new_y = scroll_y + scroll_y_add;
175 | scroll_y_add += (scroll_y_add < 0) ? 1 : -1;
176 | if (new_y < 0) {
177 | new_y = 0;
178 | }
179 | static constexpr int scroll_liimt =
180 | channel_item_height *
181 | ((511 + channel_item_cols) / channel_item_cols) -
182 | scroll_height;
183 | if (new_y > scroll_liimt) {
184 | new_y = scroll_liimt;
185 | }
186 | if (scroll_y != new_y) {
187 | scroll_y = new_y;
188 | updateDisplay(true);
189 | }
190 | }
191 |
192 | if (!modified) {
193 | delay(1);
194 | }
195 |
196 | return true;
197 | }
198 |
199 | void close(void) override {
200 | for (auto& tmp : canvas) {
201 | tmp.deleteSprite();
202 | }
203 | }
204 |
205 | private:
206 | static constexpr int BAR_HEIGHT = 64;
207 | static constexpr int CONSOLE_Y = 88;
208 |
209 | size_t data_idx = 0;
210 | M5Canvas canvas[2];
211 | bool canvas_flip;
212 |
213 | uint16_t enable_channels[DMX_MAX_PACKET_SIZE];
214 | uint16_t enable_channel_count;
215 |
216 | uint8_t visible[DMX_MAX_PACKET_SIZE];
217 | uint8_t data[2][DMX_MAX_PACKET_SIZE];
218 | uint16_t target_channel_index = 0;
219 | uint16_t target_channel;
220 | int16_t target_value = 0;
221 | int16_t scroll_y = 0;
222 | int16_t scroll_y_add = 0;
223 | static constexpr uint16_t scroll_width = 250;
224 | static constexpr uint8_t scroll_height = 240;
225 | static constexpr uint8_t channel_item_cols = 5;
226 | static constexpr uint8_t channel_item_width =
227 | scroll_width / channel_item_cols;
228 | static constexpr uint8_t channel_item_height = 54;
229 | static constexpr uint16_t slider_x = scroll_width + 28;
230 | static constexpr uint8_t slider_w = 16;
231 | static constexpr uint8_t slider_y = 72; // 40;
232 | static constexpr uint8_t slider_btn_height = 32;
233 |
234 | int16_t circle_ui_x = 160;
235 | int16_t circle_ui_y = 160;
236 | int16_t circle_ui_r0 = 40;
237 | int16_t circle_ui_r1 = 72;
238 |
239 | enum ui_mode_t {
240 | mode_channel_select,
241 | mode_value_setting,
242 | };
243 |
244 | ui_mode_t ui_mode = mode_channel_select;
245 |
246 | void setUIMode(ui_mode_t new_mode) {
247 | if (ui_mode == new_mode) {
248 | return;
249 | }
250 | ui_mode = new_mode;
251 | switch (new_mode) {
252 | case ui_mode_t::mode_channel_select:
253 | // M5.Speaker.tone(660, 80);
254 | hideUIValueSet();
255 | break;
256 |
257 | case ui_mode_t::mode_value_setting:
258 | // M5.Speaker.tone(880, 80);
259 | target_value = data[data_idx][target_channel];
260 | drawUIValueSet(target_value, true);
261 | scrollToTargetItem();
262 | break;
263 |
264 | default:
265 | break;
266 | }
267 | updateDisplay(true);
268 | }
269 |
270 | bool scrollToTargetItem(void) {
271 | int new_y =
272 | (target_channel_index / channel_item_cols) * channel_item_height;
273 | if (scroll_y > new_y) {
274 | scroll_y_add = 0;
275 | int target = scroll_y - new_y;
276 | while (0 < (target += --scroll_y_add))
277 | ;
278 | return true;
279 | } else if (scroll_y + scroll_height - channel_item_height < new_y) {
280 | scroll_y_add = 0;
281 | int target =
282 | new_y - (scroll_y + scroll_height - channel_item_height);
283 | while (0 < (target -= ++scroll_y_add))
284 | ;
285 | return true;
286 | }
287 | return false;
288 | }
289 |
290 | void drawFocusBox(LovyanGFX* gfx, int x, int y, int w, int h, int fw) {
291 | int horizon = w >> 2;
292 | int vertical = h >> 3;
293 | gfx->fillRect(x, y, horizon, fw);
294 | gfx->fillRect(x + w - horizon, y, horizon, fw);
295 | gfx->fillRect(x, y + h - fw, horizon, fw);
296 | gfx->fillRect(x + w - horizon, y + h - fw, horizon, fw);
297 | gfx->fillRect(x, y + fw, fw, vertical);
298 | gfx->fillRect(x + w - fw, y + fw, fw, vertical);
299 | gfx->fillRect(x, y + h - fw - vertical, fw, vertical);
300 | gfx->fillRect(x + w - fw, y + h - fw - vertical, fw, vertical);
301 | }
302 |
303 | void hideUIValueSet(void) {
304 | M5.Display.fillRect(scroll_width, 0, 320 - scroll_width,
305 | M5.Display.height(), TFT_BLACK);
306 | M5.Display.fillRect(scroll_width, scroll_height, 1,
307 | M5.Display.height() - (scroll_height << 1),
308 | TFT_DARKGRAY);
309 | M5.Display.pushImage(scroll_width + 8, 120, logo_sender_width,
310 | logo_sender_height,
311 | (const m5gfx::swap565_t*)logo_sender);
312 | }
313 |
314 | void drawUIValueUpDown(int sign = 0) {
315 | int x = scroll_width + 10;
316 | int w = 320 - scroll_width - 20;
317 | // M5.Display.drawRoundRect(x, 2, w, slider_btn_height - 4,
318 | // 4, sign > 0 ? TFT_WHITE : TFT_DARKGRAY);
319 | M5.Display.drawRoundRect(x, slider_y - 10 - (slider_btn_height - 4), w,
320 | slider_btn_height - 4, 4,
321 | sign > 0 ? TFT_WHITE : TFT_DARKGRAY);
322 | M5.Display.drawRoundRect(x, slider_y + 128 + 10, w,
323 | slider_btn_height - 4, 4,
324 | sign < 0 ? TFT_WHITE : TFT_DARKGRAY);
325 | }
326 |
327 | void drawUIValueSet(uint16_t new_value, bool force_redraw = false) {
328 | M5.Display.setTextDatum(textdatum_t::middle_center);
329 | M5.Display.setTextColor(TFT_WHITE, TFT_BLACK);
330 | M5.Display.setFont(&fonts::AsciiFont8x16);
331 | char str[8];
332 | uint32_t color = bar_color_table[target_channel & 15];
333 |
334 | int y = ((256 - new_value) >> 1) + slider_y;
335 | int py = ((256 - target_value) >> 1) + slider_y;
336 |
337 | int text_x = (scroll_width + M5.Display.width()) >> 1;
338 | // int text_y = ((slider_y * 2 + 128)+M5.Display.height()) >> 1;
339 | int text_y = 16;
340 | if (force_redraw) {
341 | M5.Display.fillRect(scroll_width + 1, 0, 320 - scroll_width,
342 | M5.Display.height(), TFT_BLACK);
343 | py = 128 + slider_y;
344 |
345 | M5.Display.setColor(TFT_WHITE);
346 | drawFocusBox(&M5.Display, slider_x - 8, slider_y - 5, slider_w + 16,
347 | 128 + 10, 2);
348 |
349 | fillBar(&M5.Display, slider_x, slider_y, slider_w, y - slider_y,
350 | target_channel);
351 |
352 | int text_x = (scroll_width + M5.Display.width()) >> 1;
353 | M5.Display.drawString("+", text_x,
354 | slider_y - 8 - (slider_btn_height >> 1));
355 | M5.Display.drawString(
356 | "-", text_x, slider_y + 128 + 8 + (slider_btn_height >> 1));
357 | snprintf(str, sizeof(str), "%3dch", target_channel);
358 | M5.Display.drawString(str, text_x, text_y - 8);
359 | drawUIValueUpDown();
360 | }
361 | if (force_redraw || target_value != new_value) {
362 | snprintf(str, sizeof(str), "%3d", new_value);
363 | M5.Display.drawString(str, text_x, text_y + 8);
364 | target_value = new_value;
365 | }
366 |
367 | fillBar(&M5.Display, slider_x, py, slider_w, y - py, target_channel);
368 | }
369 |
370 | uint32_t getBarColor(int32_t y) {
371 | int32_t v = 63 - (y >> 1);
372 | int32_t v2 = 63 - ((y + 1) >> 1);
373 | if ((v >> 4) != (v2 >> 4)) {
374 | return 0x887766u;
375 | }
376 | return m5gfx::color888(v + 2, v, v + 6);
377 | }
378 |
379 | void fillBar(LovyanGFX* gfx, int32_t x, int32_t y, int32_t w, int32_t h,
380 | size_t ch = 0) {
381 | uint32_t color_add = 0;
382 | if (h < 0) {
383 | y += h;
384 | h = -h;
385 | color_add = (bar_color_table[ch & 15] >> 1) & 0x7F7F7Fu;
386 | }
387 |
388 | gfx->setAddrWindow(x, y, w, h);
389 | uint32_t prev_color =
390 | (color_add + getBarColor(y - slider_y)) & 0xF8FCF8u;
391 | uint32_t py = y;
392 | while (h--) {
393 | uint32_t color =
394 | (color_add + getBarColor(++y - slider_y)) & 0xF8FCF8u;
395 | if (prev_color != color || h == 0) {
396 | gfx->pushBlock(prev_color, w * (y - py));
397 | prev_color = color;
398 | py = y;
399 | }
400 | }
401 | }
402 |
403 | void updateDisplay(bool full_redraw = false) {
404 | int idx = 0;
405 | bool drawed = false;
406 |
407 | size_t drawcount = 0;
408 | for (int ch = 1; ch < DMX_MAX_PACKET_SIZE; ++ch) {
409 | if (!visible[ch]) {
410 | if (data[0][ch] == data[1][ch]) {
411 | continue;
412 | }
413 | visible[ch] = true;
414 | full_redraw = true;
415 | }
416 | ++drawcount;
417 | }
418 |
419 | M5.Display.setClipRect(0, 0, 320, scroll_height);
420 | M5.Display.startWrite();
421 |
422 | static constexpr int circle_x = channel_item_width >> 1;
423 | static constexpr int circle_y = (channel_item_height - 8) >> 1;
424 |
425 | for (int ch = 1; ch < 512 + channel_item_cols; ++ch) {
426 | uint32_t current_data = 0;
427 | uint32_t prev_data = 0;
428 | if (ch < DMX_MAX_PACKET_SIZE) {
429 | current_data = data[data_idx][ch];
430 | prev_data = data[!data_idx][ch];
431 | }
432 | if (full_redraw || current_data != prev_data) {
433 | int y = (idx / channel_item_cols) * channel_item_height;
434 | y -= scroll_y;
435 | if (y >= scroll_height) {
436 | break;
437 | }
438 | if (y + channel_item_height > 0) {
439 | int x = (idx % channel_item_cols) * channel_item_width;
440 |
441 | auto& c = canvas[canvas_flip];
442 | canvas_flip = !canvas_flip;
443 | c.createSprite(channel_item_width, channel_item_height);
444 |
445 | if (ch < DMX_MAX_PACKET_SIZE) {
446 | if (ch == target_channel) {
447 | int fw = (ui_mode == ui_mode_t::mode_channel_select)
448 | ? 2
449 | : 1;
450 | c.setColor(0xFFFFFFu);
451 | drawFocusBox(&c, 0, 0, channel_item_width,
452 | channel_item_height, fw);
453 | }
454 | bool dimmer =
455 | (ui_mode != ui_mode_t::mode_channel_select) &&
456 | (ch != target_channel);
457 |
458 | c.setTextDatum(textdatum_t::middle_center);
459 | c.setTextColor(dimmer ? TFT_DARKGRAY : TFT_WHITE);
460 | c.setFont(&fonts::Font2);
461 | c.drawNumber(ch, circle_x + 1, circle_y);
462 | c.setFont(&fonts::Font0);
463 | c.setTextDatum(textdatum_t::top_center);
464 | c.drawNumber(current_data, circle_x + 1, circle_y + 20);
465 | float angle = current_data * 360.0f / 255;
466 |
467 | c.fillArc(circle_x, circle_y, 17, 15, 270 + angle, 269,
468 | dimmer ? 0x131313u : 0x333333u);
469 | uint32_t color = bar_color_table[ch & 15];
470 | if (dimmer) {
471 | color = (0x3F3F3F & (color >> 2)) + 0x2F2F2Fu;
472 | }
473 | c.fillArc(circle_x, circle_y, 19, 13, 270, 270 + angle,
474 | color);
475 | }
476 | c.pushSprite(&M5.Display, x, y);
477 | }
478 | }
479 | ++idx;
480 | }
481 | M5.Display.clearClipRect();
482 | M5.Display.endWrite();
483 | }
484 | };
485 |
--------------------------------------------------------------------------------
/examples/DMX512Tools/src/logo_sender.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | static constexpr const uint8_t logo_sender_width = 48;
4 | static constexpr const uint8_t logo_sender_height = 108;
5 | static constexpr const uint16_t logo_sender[] = {
6 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
7 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
8 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
9 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
10 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
11 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
12 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
13 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
14 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
15 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
16 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
17 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
18 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
19 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
20 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
21 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
22 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
23 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
24 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
25 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
26 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
27 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
28 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
29 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
30 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x6108u, 0x0421u, 0x0421u,
31 | 0xe318u, 0x6108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
32 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
33 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8631u,
34 | 0x2c63u, 0x8e73u, 0x6d6bu, 0x0842u, 0x6108u, 0x0000u, 0x0000u, 0x0000u,
35 | 0x0000u, 0x0000u, 0x0000u, 0x2000u, 0x4529u, 0x0842u, 0x0000u, 0x0000u,
36 | 0x0000u, 0x0000u, 0x0000u, 0x0421u, 0x8e73u, 0xd7bdu, 0xdbdeu, 0x3ce7u,
37 | 0xbad6u, 0xd7bdu, 0xef7bu, 0x494au, 0x8210u, 0x0000u, 0x0000u, 0x0000u,
38 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xeb5au, 0x3084u, 0x3084u,
39 | 0x3084u, 0x694au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0842u, 0xf39cu,
40 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0xcf7bu, 0xe318u, 0x0000u, 0x0000u,
41 | 0x0000u, 0x0000u, 0xe318u, 0x0c63u, 0xf39cu, 0x4d6bu, 0x0000u, 0x0000u,
42 | 0x0000u, 0x0000u, 0xe739u, 0x38c6u, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
43 | 0xffffu, 0xffffu, 0xffffu, 0xbef7u, 0x18c6u, 0x0c63u, 0x8210u, 0x0000u,
44 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xb294u, 0xffffu, 0xffffu,
45 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0xa210u, 0x718cu, 0x55adu,
46 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x2000u, 0x0000u,
47 | 0x6108u, 0x8a52u, 0x718cu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
48 | 0x0000u, 0xe318u, 0x38c6u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
49 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xdfffu, 0x59ceu, 0xeb5au,
50 | 0x4108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xb294u, 0xffffu, 0xffffu,
51 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0xe739u, 0x34a5u, 0x55adu,
52 | 0x55adu, 0xf39cu, 0xd39cu, 0x55adu, 0x55adu, 0xb294u, 0xe318u, 0x0842u,
53 | 0x3084u, 0x34a5u, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
54 | 0x0000u, 0x6d6bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
55 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
56 | 0x59ceu, 0xaa52u, 0x8210u, 0x0000u, 0x0000u, 0xb294u, 0xffffu, 0xffffu,
57 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
58 | 0x2c63u, 0x4108u, 0x0000u, 0xe739u, 0xb294u, 0x55adu, 0x9294u, 0x55adu,
59 | 0x55adu, 0x55adu, 0x55adu, 0x34a5u, 0x1084u, 0x0842u, 0x0000u, 0x0000u,
60 | 0x4108u, 0xb6b5u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
61 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
62 | 0xffffu, 0xdfffu, 0x75adu, 0x494au, 0x4108u, 0xb294u, 0xffffu, 0xffffu,
63 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
64 | 0x0421u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu, 0x55adu,
65 | 0x55adu, 0xd39cu, 0x6d6bu, 0xc739u, 0x4108u, 0x0000u, 0x0000u, 0x0000u,
66 | 0xe318u, 0x9ad6u, 0xffffu, 0xffffu, 0xffffu, 0xdbdeu, 0xf7bdu, 0x59ceu,
67 | 0xbef7u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
68 | 0xffffu, 0xffffu, 0xffffu, 0x9ef7u, 0xd39cu, 0xd7bdu, 0xffffu, 0xffffu,
69 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0xf39cu,
70 | 0x2000u, 0x0000u, 0x0000u, 0x0000u, 0x8631u, 0x34a5u, 0x55adu, 0xd39cu,
71 | 0x0c63u, 0x4529u, 0x2000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
72 | 0x0421u, 0xbad6u, 0xffffu, 0xffffu, 0x59ceu, 0x2421u, 0x6108u, 0xa210u,
73 | 0xa631u, 0x6d6bu, 0x38c6u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
74 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
75 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0xf39cu,
76 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4529u, 0xb294u, 0xeb5au, 0x0421u,
77 | 0x2000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
78 | 0x0421u, 0xbad6u, 0xffffu, 0xffffu, 0x18c6u, 0xc318u, 0x0000u, 0x0000u,
79 | 0x0000u, 0x2000u, 0xe739u, 0x718cu, 0x3ce7u, 0xffffu, 0xffffu, 0xffffu,
80 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
81 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0xf39cu,
82 | 0x6108u, 0x0000u, 0x0000u, 0x0000u, 0x0421u, 0x494au, 0x6108u, 0x0000u,
83 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
84 | 0x6108u, 0x18c6u, 0xffffu, 0xffffu, 0xdfffu, 0x9ad6u, 0x34a5u, 0x14a5u,
85 | 0x14a5u, 0xae73u, 0x0000u, 0x2000u, 0xa631u, 0xef7bu, 0x1ce7u, 0xffffu,
86 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
87 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
88 | 0x3084u, 0x1084u, 0x8e73u, 0x2c63u, 0xeb5au, 0xaa52u, 0x8a52u, 0x494au,
89 | 0x2842u, 0xc739u, 0xa631u, 0x4529u, 0x2421u, 0xa210u, 0x0000u, 0x0000u,
90 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
91 | 0xffffu, 0xb6b5u, 0x0000u, 0x0000u, 0x0000u, 0x2000u, 0x4529u, 0xef7bu,
92 | 0x7defu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
93 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
94 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
95 | 0x55adu, 0x14a5u, 0x14a5u, 0xf39cu, 0xf39cu, 0x0c63u, 0x0000u, 0x0000u,
96 | 0x0000u, 0x0421u, 0x38c6u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
97 | 0xffffu, 0xb6b5u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
98 | 0x0421u, 0xef7bu, 0x1ce7u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
99 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
100 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
101 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
102 | 0x0000u, 0x0000u, 0x6529u, 0xb6b5u, 0xdfffu, 0xffffu, 0xffffu, 0xffffu,
103 | 0xffffu, 0xb6b5u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
104 | 0x0000u, 0x0000u, 0x2421u, 0xef7bu, 0x1ce7u, 0xffffu, 0xffffu, 0xffffu,
105 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x6529u, 0xaa52u, 0xaa52u,
106 | 0xcb5au, 0x0c63u, 0x2c63u, 0x4d6bu, 0x8e73u, 0xae73u, 0x3084u, 0x518cu,
107 | 0x718cu, 0xb294u, 0x14a5u, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
108 | 0x0000u, 0x0000u, 0x0000u, 0x8210u, 0x8a52u, 0x518cu, 0x75adu, 0xd7bdu,
109 | 0xd7bdu, 0x3084u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
110 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x6529u, 0xef7bu, 0xd7bdu, 0xd7bdu,
111 | 0xd7bdu, 0x0c63u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
112 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x6108u,
113 | 0xc318u, 0x0421u, 0x6529u, 0xe739u, 0x694au, 0x0842u, 0x0000u, 0x0000u,
114 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2000u, 0x6108u,
115 | 0x6108u, 0x6108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
116 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2000u, 0x6108u, 0x6108u,
117 | 0x6108u, 0x4108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
118 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
119 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
120 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
121 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
122 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
123 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
124 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
125 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
126 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
127 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
128 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
129 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4108u, 0x6108u, 0x0000u,
130 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
131 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
132 | 0x0000u, 0x8a52u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u,
133 | 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u,
134 | 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u,
135 | 0x3084u, 0x694au, 0x0000u, 0x0000u, 0x0000u, 0x2842u, 0x518cu, 0xef7bu,
136 | 0x0421u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
137 | 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x494au, 0x8631u, 0x0000u, 0x0000u,
138 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
139 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
140 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
141 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
142 | 0xe318u, 0x0000u, 0x0000u, 0x2000u, 0x694au, 0xcb5au, 0x494au, 0x2000u,
143 | 0x0000u, 0x0000u, 0x0000u, 0xf39cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
144 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
145 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
146 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
147 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
148 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0x1084u, 0x4108u,
149 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
150 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
151 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
152 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
153 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
154 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0xef7bu, 0x4108u,
155 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
156 | 0x0000u, 0x8631u, 0x38c6u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
157 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
158 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
159 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
160 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0xae73u, 0x2000u,
161 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
162 | 0x0000u, 0x0000u, 0x6529u, 0xdbdeu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
163 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
164 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
165 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
166 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0xae73u, 0x2000u,
167 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
168 | 0x0000u, 0x0000u, 0x0000u, 0x0842u, 0x9ef7u, 0xffffu, 0xffffu, 0xffffu,
169 | 0x7defu, 0x55adu, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u,
170 | 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u, 0x3084u,
171 | 0x3084u, 0x694au, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
172 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0xef7bu, 0x4108u,
173 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
174 | 0x0000u, 0x0000u, 0x0000u, 0x4108u, 0xb294u, 0xffffu, 0xffffu, 0xffffu,
175 | 0x6d6bu, 0x2000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
176 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
177 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
178 | 0x2421u, 0x4108u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0x1084u, 0x4108u,
179 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
180 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2842u, 0xbef7u, 0xffffu, 0xbef7u,
181 | 0x0842u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
182 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
183 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
184 | 0xd39cu, 0xd39cu, 0xb294u, 0xb294u, 0xf39cu, 0x55adu, 0xb294u, 0xcb5au,
185 | 0xaa52u, 0x2842u, 0x2842u, 0xd39cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
186 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xa210u, 0x38c6u, 0xffffu, 0xbef7u,
187 | 0xc739u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
188 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
189 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
190 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
191 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
192 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0c63u, 0x3084u, 0x1084u,
193 | 0x2421u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
194 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
195 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
196 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
197 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
198 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
199 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
200 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
201 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xa631u, 0x2c63u, 0x2c63u,
202 | 0x4d6bu, 0xae73u, 0xae73u, 0xcf7bu, 0xef7bu, 0x1084u, 0x518cu, 0x718cu,
203 | 0xd39cu, 0x34a5u, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
204 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
205 | 0x0000u, 0x0000u, 0x6529u, 0x4d6bu, 0x3084u, 0xf39cu, 0x14a5u, 0x14a5u,
206 | 0x14a5u, 0x14a5u, 0x14a5u, 0xf39cu, 0x718cu, 0xae73u, 0xe739u, 0x0000u,
207 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
208 | 0x0000u, 0x0000u, 0x0000u, 0x2000u, 0x4108u, 0x6108u, 0x8210u, 0xa210u,
209 | 0xe318u, 0x0421u, 0x4529u, 0xa631u, 0x2842u, 0xa631u, 0x0000u, 0x0000u,
210 | 0x0000u, 0xa631u, 0xcb5au, 0xcb5au, 0xcb5au, 0x6529u, 0x0000u, 0x0000u,
211 | 0xa210u, 0x9294u, 0xdfffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
212 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0x55adu,
213 | 0x2421u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
214 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
215 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
216 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0x2c63u, 0x0000u, 0x2000u,
217 | 0xae73u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
218 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
219 | 0xd7bdu, 0xc318u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
220 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
221 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
222 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0x2c63u, 0x0000u, 0x8210u,
223 | 0x59ceu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
224 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
225 | 0xdfffu, 0xeb5au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
226 | 0x0000u, 0x0000u, 0x0000u, 0xe318u, 0x4529u, 0x2421u, 0xa210u, 0x0000u,
227 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
228 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0x2c63u, 0x0000u, 0xe318u,
229 | 0xbef7u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
230 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
231 | 0xffffu, 0x14a5u, 0x2000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
232 | 0xe318u, 0xeb5au, 0x3084u, 0xd39cu, 0xf39cu, 0xf39cu, 0xd39cu, 0x3084u,
233 | 0xeb5au, 0xe318u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
234 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0x2c63u, 0x0000u, 0xe318u,
235 | 0x9ef7u, 0xffffu, 0xffffu, 0xffffu, 0xdfffu, 0x7defu, 0x7defu, 0x7defu,
236 | 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0xbef7u, 0xffffu, 0xffffu,
237 | 0xffffu, 0x59ceu, 0xa210u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2842u,
238 | 0xd39cu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
239 | 0x55adu, 0xf39cu, 0xaa52u, 0x4108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
240 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0x2c63u, 0x0000u, 0x6108u,
241 | 0xb6b5u, 0xffffu, 0xffffu, 0xbad6u, 0x8a52u, 0xa631u, 0xa631u, 0xa631u,
242 | 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0x494au, 0xfbdeu, 0xffffu,
243 | 0xffffu, 0x9ad6u, 0xe318u, 0x0000u, 0x0000u, 0x0000u, 0xa631u, 0x14a5u,
244 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
245 | 0x55adu, 0x55adu, 0x55adu, 0x2c63u, 0x4108u, 0x0000u, 0x0000u, 0x0000u,
246 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0x2c63u, 0x0000u, 0x0000u,
247 | 0x694au, 0x7defu, 0xffffu, 0x9ad6u, 0x2842u, 0x4529u, 0x0000u, 0x0000u,
248 | 0xe318u, 0xa631u, 0xa631u, 0xa631u, 0x0842u, 0xcb5au, 0x1ce7u, 0xffffu,
249 | 0xffffu, 0x9ad6u, 0xe318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu,
250 | 0x55adu, 0x55adu, 0x3084u, 0x4d6bu, 0xaa52u, 0xaa52u, 0x4d6bu, 0x518cu,
251 | 0x55adu, 0x55adu, 0x55adu, 0x34a5u, 0x2842u, 0x0000u, 0x0000u, 0x0000u,
252 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0x18c6u, 0x14a5u, 0x14a5u,
253 | 0x14a5u, 0xfbdeu, 0xffffu, 0xffffu, 0x9ef7u, 0x55adu, 0x0000u, 0x0000u,
254 | 0x0c63u, 0x7defu, 0x7defu, 0x7defu, 0x9ef7u, 0xdfffu, 0xffffu, 0xffffu,
255 | 0xffffu, 0xf7bdu, 0x6108u, 0x0000u, 0x0000u, 0x6529u, 0xf39cu, 0x55adu,
256 | 0x14a5u, 0xaa52u, 0x8210u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8210u,
257 | 0x2842u, 0xd39cu, 0x55adu, 0x55adu, 0x1084u, 0x6108u, 0x0000u, 0x0000u,
258 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
259 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xb6b5u, 0x0000u, 0x0000u,
260 | 0x2c63u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
261 | 0xffffu, 0xef7bu, 0x0000u, 0x0000u, 0x0000u, 0x494au, 0x55adu, 0x55adu,
262 | 0xeb5au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
263 | 0x0000u, 0x4529u, 0x9294u, 0x55adu, 0x34a5u, 0xc739u, 0x0000u, 0x0000u,
264 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
265 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xb6b5u, 0x0000u, 0x0000u,
266 | 0x2c63u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
267 | 0x7defu, 0xe739u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
268 | 0x6529u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
269 | 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu, 0x694au, 0x0000u, 0x0000u,
270 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
271 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xb6b5u, 0x0000u, 0x0000u,
272 | 0x2c63u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
273 | 0x1084u, 0x2000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
274 | 0xe318u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
275 | 0x0000u, 0x0000u, 0x2421u, 0x34a5u, 0x55adu, 0xcb5au, 0x0000u, 0x0000u,
276 | 0x0000u, 0xae73u, 0x7defu, 0xbef7u, 0xbef7u, 0xbef7u, 0xffffu, 0xffffu,
277 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xb6b5u, 0x0000u, 0x0000u,
278 | 0x2c63u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xdfffu, 0x1ce7u, 0x8e73u,
279 | 0x4108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
280 | 0xc318u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
281 | 0x0000u, 0x0000u, 0x2000u, 0x34a5u, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
282 | 0x0000u, 0x0421u, 0xa631u, 0x494au, 0x494au, 0x694au, 0xeb5au, 0x0c63u,
283 | 0x0c63u, 0x6d6bu, 0x8e73u, 0x8e73u, 0x1084u, 0x4d6bu, 0x0000u, 0x0000u,
284 | 0x2842u, 0x3084u, 0x3084u, 0xef7bu, 0x6d6bu, 0x8a52u, 0xe318u, 0x0000u,
285 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
286 | 0xc318u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
287 | 0x0000u, 0x0000u, 0x0000u, 0xb294u, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
288 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
289 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
290 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
291 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
292 | 0xc318u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
293 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
294 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
295 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
296 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
297 | 0x4529u, 0x8631u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x34a5u,
298 | 0x8e73u, 0x2c63u, 0xeb5au, 0xaa52u, 0x2842u, 0xa631u, 0x4529u, 0xe318u,
299 | 0x2000u, 0x0000u, 0x0000u, 0xf39cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
300 | 0x0000u, 0x0421u, 0x2421u, 0xa210u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
301 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
302 | 0x0000u, 0x0000u, 0x2000u, 0xc318u, 0xa631u, 0x0c63u, 0xb294u, 0xbad6u,
303 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
304 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
305 | 0x55adu, 0xf39cu, 0x718cu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
306 | 0x0000u, 0xcf7bu, 0x7defu, 0x18c6u, 0xd39cu, 0x4d6bu, 0x494au, 0x4529u,
307 | 0x6108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xc318u,
308 | 0xe739u, 0x2c63u, 0xf39cu, 0x79ceu, 0xdfffu, 0xffffu, 0xffffu, 0xffffu,
309 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
310 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
311 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
312 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xdfffu, 0xfbdeu,
313 | 0x38c6u, 0x718cu, 0x4d6bu, 0x2842u, 0x2842u, 0x6d6bu, 0xf39cu, 0x9ad6u,
314 | 0x9ef7u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
315 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0xe739u, 0xae73u, 0xef7bu,
316 | 0xef7bu, 0x1084u, 0x518cu, 0x518cu, 0xb294u, 0xf39cu, 0x55adu, 0x55adu,
317 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
318 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
319 | 0xffffu, 0xffffu, 0xffffu, 0x9ef7u, 0x9ef7u, 0xffffu, 0xffffu, 0xffffu,
320 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
321 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2000u, 0x4108u,
322 | 0x4108u, 0x6108u, 0x8210u, 0x8210u, 0xc318u, 0xe318u, 0x0421u, 0x6529u,
323 | 0xa631u, 0x0842u, 0x8a52u, 0x4d6bu, 0x8e73u, 0x8a52u, 0x0000u, 0x0000u,
324 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
325 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
326 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
327 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
328 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
329 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
330 | 0x0000u, 0x8e73u, 0xdfffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
331 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
332 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xdfffu, 0xdbdeu,
333 | 0x75adu, 0x494au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
334 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
335 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
336 | 0x0000u, 0xe318u, 0x2842u, 0x2c63u, 0x518cu, 0xd7bdu, 0xdbdeu, 0xffffu,
337 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
338 | 0xffffu, 0xffffu, 0x1ce7u, 0x18c6u, 0xb294u, 0x4d6bu, 0x2842u, 0x2421u,
339 | 0x2000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
340 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
341 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
342 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4108u, 0xc739u, 0x6d6bu, 0x55adu,
343 | 0xbef7u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
344 | 0x9ef7u, 0x75adu, 0x3084u, 0xeb5au, 0xa631u, 0x8210u, 0x0000u, 0x0000u,
345 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
346 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
347 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
348 | 0x0000u, 0x694au, 0x34a5u, 0x38c6u, 0xbef7u, 0xffffu, 0xffffu, 0xffffu,
349 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
350 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0x1ce7u, 0x18c6u,
351 | 0x55adu, 0x8a52u, 0x0000u, 0x0000u, 0x0000u, 0x494au, 0x9294u, 0x518cu,
352 | 0x3084u, 0xef7bu, 0xef7bu, 0xcf7bu, 0xae73u, 0xae73u, 0x4d6bu, 0x2c63u,
353 | 0x2c63u, 0xcb5au, 0xaa52u, 0xaa52u, 0xaa52u, 0xc739u, 0x0000u, 0x0000u,
354 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
355 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
356 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
357 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
358 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
359 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
360 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
361 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
362 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
363 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
364 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
365 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
366 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
367 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
368 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
369 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x2421u, 0x2842u, 0x2842u,
370 | 0x2842u, 0x2842u, 0xaa52u, 0xcb5au, 0xcb5au, 0xcb5au, 0xcb5au, 0x0c63u,
371 | 0x4d6bu, 0x518cu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
372 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
373 | 0x3ce7u, 0x79ceu, 0xf39cu, 0x6d6bu, 0x4d6bu, 0x1084u, 0x75adu, 0x9ad6u,
374 | 0x3ce7u, 0xdfffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
375 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
376 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4529u,
377 | 0x8e73u, 0x34a5u, 0x55adu, 0x55adu, 0x55adu, 0x0c63u, 0x0000u, 0x0000u,
378 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0x9ad6u, 0x75adu, 0xcf7bu, 0x8a52u,
379 | 0x8631u, 0xa210u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xa210u,
380 | 0x8631u, 0x494au, 0x0c63u, 0x1084u, 0x96b5u, 0x79ceu, 0x9ef7u, 0xffffu,
381 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
382 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8210u, 0xcb5au, 0xd39cu,
383 | 0x55adu, 0x55adu, 0x55adu, 0xf39cu, 0x0c63u, 0xe318u, 0x0000u, 0x0000u,
384 | 0x0000u, 0x494au, 0xeb5au, 0xa631u, 0xe318u, 0x4108u, 0x0000u, 0x0000u,
385 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
386 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4108u, 0xc318u, 0x4529u, 0x2842u,
387 | 0x2c63u, 0x494au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
388 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xa631u, 0x1084u, 0x55adu, 0x55adu,
389 | 0x55adu, 0x55adu, 0x1084u, 0x8631u, 0x2000u, 0x0000u, 0x0000u, 0x0000u,
390 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
391 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
392 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
393 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
394 | 0x0000u, 0x0000u, 0xe318u, 0x2c63u, 0x34a5u, 0x55adu, 0x55adu, 0x55adu,
395 | 0xd39cu, 0xcb5au, 0x4108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
396 | 0x0000u, 0x0421u, 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u,
397 | 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u,
398 | 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u, 0xc739u,
399 | 0xc739u, 0x0421u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
400 | 0x4108u, 0x2842u, 0x718cu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0xcf7bu,
401 | 0x6529u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
402 | 0x0000u, 0xae73u, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu,
403 | 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu,
404 | 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu,
405 | 0x7defu, 0x8e73u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4529u,
406 | 0x8e73u, 0x34a5u, 0x55adu, 0x55adu, 0x55adu, 0xb294u, 0x8a52u, 0x6108u,
407 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
408 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
409 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
410 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
411 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x6108u, 0xcb5au, 0xf39cu,
412 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x8e73u, 0x2421u, 0x0000u, 0x0000u,
413 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
414 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
415 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
416 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
417 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
418 | 0x55adu, 0x55adu, 0x518cu, 0x0842u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
419 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
420 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
421 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
422 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
423 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
424 | 0x55adu, 0xf39cu, 0x4d6bu, 0x0c63u, 0xaa52u, 0xaa52u, 0xaa52u, 0xaa52u,
425 | 0xaa52u, 0x694au, 0x2842u, 0x2842u, 0x2842u, 0x8631u, 0x0000u, 0x0000u,
426 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
427 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
428 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
429 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
430 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
431 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
432 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
433 | 0xffffu, 0xbef7u, 0x59ceu, 0x55adu, 0x1084u, 0x2c63u, 0x8a52u, 0x2842u,
434 | 0x2842u, 0x2842u, 0x2842u, 0x2842u, 0x2842u, 0x2842u, 0x2842u, 0x2842u,
435 | 0x2842u, 0x4529u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
436 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
437 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
438 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
439 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0x3ce7u, 0x59ceu, 0x96b5u, 0xb294u,
440 | 0x8e73u, 0xcb5au, 0x0842u, 0x6529u, 0xe318u, 0x2000u, 0x0000u, 0x0000u,
441 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2842u, 0x3084u, 0x3084u,
442 | 0x3084u, 0x3084u, 0x518cu, 0x718cu, 0x718cu, 0x9294u, 0xb294u, 0xb294u,
443 | 0xd39cu, 0xf39cu, 0xf39cu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
444 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
445 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
446 | 0xffffu, 0xffffu, 0xdfffu, 0x1ce7u, 0x9ad6u, 0xf7bdu, 0xb294u, 0xcf7bu,
447 | 0x2c63u, 0x8631u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
448 | 0x0000u, 0x2000u, 0x8210u, 0x8210u, 0x8210u, 0xe318u, 0xe318u, 0xe318u,
449 | 0x2421u, 0x4529u, 0x4529u, 0xc739u, 0xe739u, 0x6529u, 0x0000u, 0x0000u,
450 | 0x0000u, 0x6529u, 0x0c63u, 0xef7bu, 0x14a5u, 0xf7bdu, 0x3ce7u, 0xffffu,
451 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
452 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
453 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
454 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
455 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
456 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xe318u,
457 | 0xe739u, 0x0c63u, 0x1084u, 0x75adu, 0x7defu, 0xffffu, 0xffffu, 0xffffu,
458 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
459 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
460 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
461 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
462 | 0x0000u, 0x0000u, 0x4108u, 0x0421u, 0xa631u, 0x494au, 0xeb5au, 0xae73u,
463 | 0xd39cu, 0xd7bdu, 0x9ad6u, 0x9ef7u, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
464 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
465 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0xa210u, 0x2421u, 0xe318u,
466 | 0x4108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
467 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
468 | 0x0000u, 0x0c63u, 0x59ceu, 0xdbdeu, 0x5defu, 0xffffu, 0xffffu, 0xffffu,
469 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
470 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0x9ef7u,
471 | 0x9ad6u, 0x0c63u, 0x0000u, 0x0000u, 0x0000u, 0x694au, 0xd39cu, 0x718cu,
472 | 0x0421u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
473 | 0x0000u, 0x0000u, 0x0000u, 0x4d6bu, 0x0c63u, 0x2842u, 0x0000u, 0x0000u,
474 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
475 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
476 | 0xffffu, 0xfbdeu, 0xb6b5u, 0xd39cu, 0xcf7bu, 0xcb5au, 0x0842u, 0x4529u,
477 | 0xe318u, 0x4108u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
478 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0x0c63u, 0x8e73u, 0xeb5au, 0x4108u,
479 | 0x0000u, 0x0000u, 0x0000u, 0xd39cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
480 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
481 | 0xffffu, 0xffffu, 0x9ef7u, 0x38c6u, 0x34a5u, 0x518cu, 0x4d6bu, 0x494au,
482 | 0x6529u, 0x0421u, 0x0421u, 0x0421u, 0x0421u, 0x0421u, 0x0421u, 0x0421u,
483 | 0x0421u, 0xa210u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
484 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0x1084u, 0x4108u,
485 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
486 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
487 | 0xffffu, 0xffffu, 0x5defu, 0x3ce7u, 0x3ce7u, 0x3ce7u, 0x3ce7u, 0x3ce7u,
488 | 0x3ce7u, 0x3ce7u, 0x3ce7u, 0x3ce7u, 0x3ce7u, 0x3ce7u, 0x3ce7u, 0x3ce7u,
489 | 0x3ce7u, 0x6d6bu, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
490 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0xcf7bu, 0x2000u,
491 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
492 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
493 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
494 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
495 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
496 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0xae73u, 0x2000u,
497 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
498 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
499 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
500 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
501 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
502 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0xae73u, 0x2000u,
503 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
504 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
505 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
506 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
507 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
508 | 0xc318u, 0x0000u, 0x0000u, 0x4108u, 0xcf7bu, 0x55adu, 0xef7bu, 0x4108u,
509 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
510 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
511 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
512 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
513 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x14a5u,
514 | 0xa631u, 0x0421u, 0xe318u, 0x0421u, 0xef7bu, 0x55adu, 0x1084u, 0x4108u,
515 | 0x0000u, 0x0000u, 0x0000u, 0x718cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
516 | 0x0000u, 0xc739u, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au,
517 | 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au,
518 | 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au, 0xeb5au,
519 | 0xeb5au, 0xa631u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
520 | 0xf39cu, 0xb294u, 0xb294u, 0xb294u, 0x14a5u, 0x55adu, 0xb294u, 0x2c63u,
521 | 0x0c63u, 0xaa52u, 0xaa52u, 0xd39cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
522 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
523 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
524 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
525 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
526 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
527 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
528 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
529 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
530 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
531 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8a52u, 0x55adu, 0x55adu,
532 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu,
533 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
534 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x8210u, 0x0421u, 0xa631u,
535 | 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u,
536 | 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0x8631u, 0xe318u, 0x4108u, 0x0000u,
537 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2421u, 0x2842u, 0x2842u,
538 | 0x494au, 0xaa52u, 0xaa52u, 0xcb5au, 0x2c63u, 0x4d6bu, 0xae73u, 0xcf7bu,
539 | 0xef7bu, 0x3084u, 0x718cu, 0xd39cu, 0x55adu, 0x4d6bu, 0x0000u, 0x0000u,
540 | 0x0000u, 0x0000u, 0x0000u, 0x6529u, 0xf39cu, 0xfbdeu, 0x3ce7u, 0x7defu,
541 | 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu,
542 | 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x3ce7u, 0x9ad6u, 0xae73u,
543 | 0x6108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
544 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2000u,
545 | 0x4108u, 0x8210u, 0xa210u, 0xe318u, 0x2421u, 0x0421u, 0x0000u, 0x0000u,
546 | 0x0000u, 0x0000u, 0xe739u, 0x3ce7u, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
547 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
548 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
549 | 0x9294u, 0x2000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
550 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
551 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
552 | 0x0000u, 0x4108u, 0xb6b5u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
553 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
554 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
555 | 0x5defu, 0xa631u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
556 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
557 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
558 | 0x0000u, 0xa631u, 0x5defu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
559 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
560 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
561 | 0xffffu, 0xeb5au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x2000u,
562 | 0x4108u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4108u,
563 | 0x0842u, 0xaa52u, 0x494au, 0xa210u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
564 | 0x0000u, 0xaa52u, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
565 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
566 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
567 | 0xffffu, 0x6d6bu, 0x0000u, 0x0000u, 0x0000u, 0xe739u, 0x3084u, 0xb294u,
568 | 0x2842u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xa210u, 0xae73u,
569 | 0x34a5u, 0x55adu, 0x55adu, 0x718cu, 0xa631u, 0x0000u, 0x0000u, 0x0000u,
570 | 0x0000u, 0x4d6bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xbef7u, 0x7defu,
571 | 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu,
572 | 0x7defu, 0x7defu, 0x7defu, 0x9ef7u, 0xdfffu, 0xffffu, 0xffffu, 0xffffu,
573 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0xcb5au, 0x55adu, 0x14a5u,
574 | 0x0421u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0xa210u, 0xef7bu, 0x55adu,
575 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0x718cu, 0xe318u, 0x0000u, 0x0000u,
576 | 0x0000u, 0x6d6bu, 0xffffu, 0xffffu, 0xffffu, 0x9ad6u, 0x694au, 0xa631u,
577 | 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u,
578 | 0xa631u, 0xa631u, 0xa631u, 0xe739u, 0xeb5au, 0xdbdeu, 0xffffu, 0xffffu,
579 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x4d6bu, 0x55adu, 0x9294u,
580 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4108u, 0x4d6bu, 0x55adu, 0x55adu,
581 | 0x55adu, 0x14a5u, 0x55adu, 0x55adu, 0x55adu, 0xaa52u, 0x0000u, 0x0000u,
582 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0x34a5u, 0xa631u, 0xa631u,
583 | 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u,
584 | 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0xa631u, 0x75adu, 0xffffu, 0xffffu,
585 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x6d6bu, 0x55adu, 0x3084u,
586 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x694au, 0x34a5u, 0x55adu, 0x55adu,
587 | 0x4d6bu, 0x8631u, 0xeb5au, 0x55adu, 0x55adu, 0xae73u, 0x2000u, 0x0000u,
588 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xdfffu, 0x7defu, 0x7defu,
589 | 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu,
590 | 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0x7defu, 0xdfffu, 0xffffu, 0xffffu,
591 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x6d6bu, 0x55adu, 0xd39cu,
592 | 0x6108u, 0x0000u, 0x0000u, 0x6529u, 0xf39cu, 0x55adu, 0x55adu, 0x8e73u,
593 | 0x6108u, 0x0000u, 0x2000u, 0x518cu, 0x55adu, 0x1084u, 0x6108u, 0x0000u,
594 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
595 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
596 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
597 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x4d6bu, 0x55adu, 0x55adu,
598 | 0xaa52u, 0x6108u, 0x4529u, 0x718cu, 0x55adu, 0x55adu, 0x1084u, 0x8210u,
599 | 0x0000u, 0x0000u, 0x0000u, 0x6d6bu, 0x55adu, 0x1084u, 0x6108u, 0x0000u,
600 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
601 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
602 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
603 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x694au, 0x55adu, 0x55adu,
604 | 0x14a5u, 0x1084u, 0xf39cu, 0x55adu, 0x55adu, 0x718cu, 0x2421u, 0x0000u,
605 | 0x0000u, 0x0000u, 0x0000u, 0x8e73u, 0x55adu, 0x1084u, 0x6108u, 0x0000u,
606 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
607 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
608 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
609 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x2421u, 0xb294u, 0x55adu,
610 | 0x55adu, 0x55adu, 0x55adu, 0x55adu, 0xb294u, 0xa631u, 0x0000u, 0x0000u,
611 | 0x0000u, 0x0000u, 0x0000u, 0xef7bu, 0x55adu, 0xcf7bu, 0x2000u, 0x0000u,
612 | 0x0000u, 0xcf7bu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
613 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
614 | 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu, 0xffffu,
615 | 0xffffu, 0xae73u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x694au, 0x55adu,
616 | 0x55adu, 0x55adu, 0x55adu, 0xf39cu, 0x0842u, 0x0000u, 0x0000u, 0x0000u,
617 | 0x0000u, 0x0000u, 0x8210u, 0x14a5u, 0x55adu, 0x0c63u, 0x0000u, 0x0000u,
618 | 0x0000u, 0x8e73u, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu,
619 | 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu,
620 | 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu, 0xfbdeu,
621 | 0xfbdeu, 0x6d6bu, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x4529u,
622 | 0x0c63u, 0x8e73u, 0xeb5au, 0xe318u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
623 | 0x0000u, 0x0000u, 0x494au, 0xb294u, 0x718cu, 0x0842u, 0x0000u, 0x0000u,
624 | 0x0000u, 0xc318u, 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u,
625 | 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u,
626 | 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u, 0x4529u,
627 | 0x4529u, 0xc318u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
628 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
629 | 0x0000u, 0x0000u, 0xe318u, 0xe318u, 0x8210u, 0x4108u, 0x0000u, 0x0000u,
630 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
631 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
632 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
633 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
634 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
635 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
636 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
637 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
638 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
639 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
640 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
641 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
642 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
643 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
644 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
645 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
646 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
647 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
648 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
649 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
650 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
651 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
652 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
653 | 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
654 | };
--------------------------------------------------------------------------------